]> git.openstreetmap.org Git - rails.git/blob - vendor/assets/iD/iD.js
Merge remote-tracking branch 'upstream/pull/2512'
[rails.git] / vendor / assets / iD / iD.js
1 (function () {
2         var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
3
4         function commonjsRequire () {
5                 throw new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');
6         }
7
8         function unwrapExports (x) {
9                 return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
10         }
11
12         function createCommonjsModule(fn, module) {
13                 return module = { exports: {} }, fn(module, module.exports), module.exports;
14         }
15
16         function getCjsExportFromNamespace (n) {
17                 return n && n['default'] || n;
18         }
19
20         var isImplemented = function () {
21                 var set, iterator, result;
22                 if (typeof Set !== 'function') { return false; }
23                 set = new Set(['raz', 'dwa', 'trzy']);
24                 if (String(set) !== '[object Set]') { return false; }
25                 if (set.size !== 3) { return false; }
26                 if (typeof set.add !== 'function') { return false; }
27                 if (typeof set.clear !== 'function') { return false; }
28                 if (typeof set.delete !== 'function') { return false; }
29                 if (typeof set.entries !== 'function') { return false; }
30                 if (typeof set.forEach !== 'function') { return false; }
31                 if (typeof set.has !== 'function') { return false; }
32                 if (typeof set.keys !== 'function') { return false; }
33                 if (typeof set.values !== 'function') { return false; }
34
35                 iterator = set.values();
36                 result = iterator.next();
37                 if (result.done !== false) { return false; }
38                 if (result.value !== 'raz') { return false; }
39
40                 return true;
41         };
42
43         // eslint-disable-next-line no-empty-function
44         var noop = function () {};
45
46         var _undefined = noop(); // Support ES3 engines
47
48         var isValue = function (val) { return val !== _undefined && val !== null; };
49
50         var validValue = function (value) {
51                 if (!isValue(value)) { throw new TypeError("Cannot use null or undefined"); }
52                 return value;
53         };
54
55         var clear = function () {
56                 validValue(this).length = 0;
57                 return this;
58         };
59
60         var isImplemented$1 = function () {
61                 var numberIsNaN = Number.isNaN;
62                 if (typeof numberIsNaN !== "function") { return false; }
63                 return !numberIsNaN({}) && numberIsNaN(NaN) && !numberIsNaN(34);
64         };
65
66         var shim = function (value) {
67                 // eslint-disable-next-line no-self-compare
68                 return value !== value;
69         };
70
71         var isNan = isImplemented$1() ? Number.isNaN : shim;
72
73         var isImplemented$2 = function () {
74                 var sign = Math.sign;
75                 if (typeof sign !== "function") { return false; }
76                 return sign(10) === 1 && sign(-20) === -1;
77         };
78
79         var shim$1 = function (value) {
80                 value = Number(value);
81                 if (isNaN(value) || value === 0) { return value; }
82                 return value > 0 ? 1 : -1;
83         };
84
85         var sign = isImplemented$2() ? Math.sign : shim$1;
86
87         var abs   = Math.abs
88           , floor = Math.floor;
89
90         var toInteger = function (value) {
91                 if (isNaN(value)) { return 0; }
92                 value = Number(value);
93                 if (value === 0 || !isFinite(value)) { return value; }
94                 return sign(value) * floor(abs(value));
95         };
96
97         var max       = Math.max;
98
99         var toPosInteger = function (value) { return max(0, toInteger(value)); };
100
101         var indexOf           = Array.prototype.indexOf
102           , objHasOwnProperty = Object.prototype.hasOwnProperty
103           , abs$1               = Math.abs
104           , floor$1             = Math.floor;
105
106         var eIndexOf = function (searchElement/*, fromIndex*/) {
107                 var i, length, fromIndex, val;
108                 if (!isNan(searchElement)) { return indexOf.apply(this, arguments); }
109
110                 length = toPosInteger(validValue(this).length);
111                 fromIndex = arguments[1];
112                 if (isNaN(fromIndex)) { fromIndex = 0; }
113                 else if (fromIndex >= 0) { fromIndex = floor$1(fromIndex); }
114                 else { fromIndex = toPosInteger(this.length) - floor$1(abs$1(fromIndex)); }
115
116                 for (i = fromIndex; i < length; ++i) {
117                         if (objHasOwnProperty.call(this, i)) {
118                                 val = this[i];
119                                 if (isNan(val)) { return i; } // Jslint: ignore
120                         }
121                 }
122                 return -1;
123         };
124
125         var create = Object.create, getPrototypeOf = Object.getPrototypeOf, plainObject = {};
126
127         var isImplemented$3 = function (/* CustomCreate*/) {
128                 var setPrototypeOf = Object.setPrototypeOf, customCreate = arguments[0] || create;
129                 if (typeof setPrototypeOf !== "function") { return false; }
130                 return getPrototypeOf(setPrototypeOf(customCreate(null), plainObject)) === plainObject;
131         };
132
133         var map = { function: true, object: true };
134
135         var isObject = function (value) { return (isValue(value) && map[typeof value]) || false; };
136
137         var create$1 = Object.create, shim$2;
138
139         if (!isImplemented$3()) {
140                 shim$2 = shim$3;
141         }
142
143         var create_1 = (function () {
144                 var nullObject, polyProps, desc;
145                 if (!shim$2) { return create$1; }
146                 if (shim$2.level !== 1) { return create$1; }
147
148                 nullObject = {};
149                 polyProps = {};
150                 desc = { configurable: false, enumerable: false, writable: true, value: undefined };
151                 Object.getOwnPropertyNames(Object.prototype).forEach(function (name) {
152                         if (name === "__proto__") {
153                                 polyProps[name] = {
154                                         configurable: true,
155                                         enumerable: false,
156                                         writable: true,
157                                         value: undefined
158                                 };
159                                 return;
160                         }
161                         polyProps[name] = desc;
162                 });
163                 Object.defineProperties(nullObject, polyProps);
164
165                 Object.defineProperty(shim$2, "nullPolyfill", {
166                         configurable: false,
167                         enumerable: false,
168                         writable: false,
169                         value: nullObject
170                 });
171
172                 return function (prototype, props) {
173                         return create$1(prototype === null ? nullObject : prototype, props);
174                 };
175         })();
176
177         var objIsPrototypeOf = Object.prototype.isPrototypeOf
178           , defineProperty   = Object.defineProperty
179           , nullDesc         = { configurable: true, enumerable: false, writable: true, value: undefined }
180           , validate;
181
182         validate = function (obj, prototype) {
183                 validValue(obj);
184                 if (prototype === null || isObject(prototype)) { return obj; }
185                 throw new TypeError("Prototype must be null or an object");
186         };
187
188         var shim$3 = (function (status) {
189                 var fn, set;
190                 if (!status) { return null; }
191                 if (status.level === 2) {
192                         if (status.set) {
193                                 set = status.set;
194                                 fn = function (obj, prototype) {
195                                         set.call(validate(obj, prototype), prototype);
196                                         return obj;
197                                 };
198                         } else {
199                                 fn = function (obj, prototype) {
200                                         validate(obj, prototype).__proto__ = prototype;
201                                         return obj;
202                                 };
203                         }
204                 } else {
205                         fn = function self(obj, prototype) {
206                                 var isNullBase;
207                                 validate(obj, prototype);
208                                 isNullBase = objIsPrototypeOf.call(self.nullPolyfill, obj);
209                                 if (isNullBase) { delete self.nullPolyfill.__proto__; }
210                                 if (prototype === null) { prototype = self.nullPolyfill; }
211                                 obj.__proto__ = prototype;
212                                 if (isNullBase) { defineProperty(self.nullPolyfill, "__proto__", nullDesc); }
213                                 return obj;
214                         };
215                 }
216                 return Object.defineProperty(fn, "level", {
217                         configurable: false,
218                         enumerable: false,
219                         writable: false,
220                         value: status.level
221                 });
222         })(
223                 (function () {
224                         var tmpObj1 = Object.create(null)
225                           , tmpObj2 = {}
226                           , set
227                           , desc = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__");
228
229                         if (desc) {
230                                 try {
231                                         set = desc.set; // Opera crashes at this point
232                                         set.call(tmpObj1, tmpObj2);
233                                 } catch (ignore) {}
234                                 if (Object.getPrototypeOf(tmpObj1) === tmpObj2) { return { set: set, level: 2 }; }
235                         }
236
237                         tmpObj1.__proto__ = tmpObj2;
238                         if (Object.getPrototypeOf(tmpObj1) === tmpObj2) { return { level: 2 }; }
239
240                         tmpObj1 = {};
241                         tmpObj1.__proto__ = tmpObj2;
242                         if (Object.getPrototypeOf(tmpObj1) === tmpObj2) { return { level: 1 }; }
243
244                         return false;
245                 })()
246         );
247
248         var setPrototypeOf = isImplemented$3() ? Object.setPrototypeOf : shim$3;
249
250         var validCallable = function (fn) {
251                 if (typeof fn !== "function") { throw new TypeError(fn + " is not a function"); }
252                 return fn;
253         };
254
255         // ES3 safe
256         var _undefined$1 = void 0;
257
258         var is = function (value) { return value !== _undefined$1 && value !== null; };
259
260         // prettier-ignore
261         var possibleTypes = { "object": true, "function": true, "undefined": true /* document.all */ };
262
263         var is$1 = function (value) {
264                 if (!is(value)) { return false; }
265                 return hasOwnProperty.call(possibleTypes, typeof value);
266         };
267
268         var is$2 = function (value) {
269                 if (!is$1(value)) { return false; }
270                 try {
271                         if (!value.constructor) { return false; }
272                         return value.constructor.prototype === value;
273                 } catch (error) {
274                         return false;
275                 }
276         };
277
278         var is$3 = function (value) {
279                 if (typeof value !== "function") { return false; }
280
281                 if (!hasOwnProperty.call(value, "length")) { return false; }
282
283                 try {
284                         if (typeof value.length !== "number") { return false; }
285                         if (typeof value.call !== "function") { return false; }
286                         if (typeof value.apply !== "function") { return false; }
287                 } catch (error) {
288                         return false;
289                 }
290
291                 return !is$2(value);
292         };
293
294         var classRe = /^\s*class[\s{/}]/, functionToString = Function.prototype.toString;
295
296         var is$4 = function (value) {
297                 if (!is$3(value)) { return false; }
298                 if (classRe.test(functionToString.call(value))) { return false; }
299                 return true;
300         };
301
302         var isImplemented$4 = function () {
303                 var assign = Object.assign, obj;
304                 if (typeof assign !== "function") { return false; }
305                 obj = { foo: "raz" };
306                 assign(obj, { bar: "dwa" }, { trzy: "trzy" });
307                 return obj.foo + obj.bar + obj.trzy === "razdwatrzy";
308         };
309
310         var isImplemented$5 = function () {
311                 try {
312                         Object.keys("primitive");
313                         return true;
314                 } catch (e) {
315                         return false;
316                 }
317         };
318
319         var keys = Object.keys;
320
321         var shim$4 = function (object) { return keys(isValue(object) ? Object(object) : object); };
322
323         var keys$1 = isImplemented$5() ? Object.keys : shim$4;
324
325         var max$1   = Math.max;
326
327         var shim$5 = function (dest, src/*, …srcn*/) {
328                 var arguments$1 = arguments;
329
330                 var error, i, length = max$1(arguments.length, 2), assign;
331                 dest = Object(validValue(dest));
332                 assign = function (key) {
333                         try {
334                                 dest[key] = src[key];
335                         } catch (e) {
336                                 if (!error) { error = e; }
337                         }
338                 };
339                 for (i = 1; i < length; ++i) {
340                         src = arguments$1[i];
341                         keys$1(src).forEach(assign);
342                 }
343                 if (error !== undefined) { throw error; }
344                 return dest;
345         };
346
347         var assign = isImplemented$4() ? Object.assign : shim$5;
348
349         var forEach = Array.prototype.forEach, create$2 = Object.create;
350
351         var process$1 = function (src, obj) {
352                 var key;
353                 for (key in src) { obj[key] = src[key]; }
354         };
355
356         // eslint-disable-next-line no-unused-vars
357         var normalizeOptions = function (opts1/*, …options*/) {
358                 var result = create$2(null);
359                 forEach.call(arguments, function (options) {
360                         if (!isValue(options)) { return; }
361                         process$1(Object(options), result);
362                 });
363                 return result;
364         };
365
366         var str = "razdwatrzy";
367
368         var isImplemented$6 = function () {
369                 if (typeof str.contains !== "function") { return false; }
370                 return str.contains("dwa") === true && str.contains("foo") === false;
371         };
372
373         var indexOf$1 = String.prototype.indexOf;
374
375         var shim$6 = function (searchString/*, position*/) {
376                 return indexOf$1.call(this, searchString, arguments[1]) > -1;
377         };
378
379         var contains = isImplemented$6() ? String.prototype.contains : shim$6;
380
381         var d_1 = createCommonjsModule(function (module) {
382
383
384
385         var d = (module.exports = function (dscr, value/*, options*/) {
386                 var c, e, w, options, desc;
387                 if (arguments.length < 2 || typeof dscr !== "string") {
388                         options = value;
389                         value = dscr;
390                         dscr = null;
391                 } else {
392                         options = arguments[2];
393                 }
394                 if (is(dscr)) {
395                         c = contains.call(dscr, "c");
396                         e = contains.call(dscr, "e");
397                         w = contains.call(dscr, "w");
398                 } else {
399                         c = w = true;
400                         e = false;
401                 }
402
403                 desc = { value: value, configurable: c, enumerable: e, writable: w };
404                 return !options ? desc : assign(normalizeOptions(options), desc);
405         });
406
407         d.gs = function (dscr, get, set/*, options*/) {
408                 var c, e, options, desc;
409                 if (typeof dscr !== "string") {
410                         options = set;
411                         set = get;
412                         get = dscr;
413                         dscr = null;
414                 } else {
415                         options = arguments[3];
416                 }
417                 if (!is(get)) {
418                         get = undefined;
419                 } else if (!is$4(get)) {
420                         options = get;
421                         get = set = undefined;
422                 } else if (!is(set)) {
423                         set = undefined;
424                 } else if (!is$4(set)) {
425                         options = set;
426                         set = undefined;
427                 }
428                 if (is(dscr)) {
429                         c = contains.call(dscr, "c");
430                         e = contains.call(dscr, "e");
431                 } else {
432                         c = true;
433                         e = false;
434                 }
435
436                 desc = { get: get, set: set, configurable: c, enumerable: e };
437                 return !options ? desc : assign(normalizeOptions(options), desc);
438         };
439         });
440
441         var eventEmitter = createCommonjsModule(function (module, exports) {
442
443         var apply = Function.prototype.apply, call = Function.prototype.call
444           , create = Object.create, defineProperty = Object.defineProperty
445           , defineProperties = Object.defineProperties
446           , hasOwnProperty = Object.prototype.hasOwnProperty
447           , descriptor = { configurable: true, enumerable: false, writable: true }
448
449           , on, once, off, emit, methods, descriptors, base;
450
451         on = function (type, listener) {
452                 var data;
453
454                 validCallable(listener);
455
456                 if (!hasOwnProperty.call(this, '__ee__')) {
457                         data = descriptor.value = create(null);
458                         defineProperty(this, '__ee__', descriptor);
459                         descriptor.value = null;
460                 } else {
461                         data = this.__ee__;
462                 }
463                 if (!data[type]) { data[type] = listener; }
464                 else if (typeof data[type] === 'object') { data[type].push(listener); }
465                 else { data[type] = [data[type], listener]; }
466
467                 return this;
468         };
469
470         once = function (type, listener) {
471                 var once, self;
472
473                 validCallable(listener);
474                 self = this;
475                 on.call(this, type, once = function () {
476                         off.call(self, type, once);
477                         apply.call(listener, this, arguments);
478                 });
479
480                 once.__eeOnceListener__ = listener;
481                 return this;
482         };
483
484         off = function (type, listener) {
485                 var data, listeners, candidate, i;
486
487                 validCallable(listener);
488
489                 if (!hasOwnProperty.call(this, '__ee__')) { return this; }
490                 data = this.__ee__;
491                 if (!data[type]) { return this; }
492                 listeners = data[type];
493
494                 if (typeof listeners === 'object') {
495                         for (i = 0; (candidate = listeners[i]); ++i) {
496                                 if ((candidate === listener) ||
497                                                 (candidate.__eeOnceListener__ === listener)) {
498                                         if (listeners.length === 2) { data[type] = listeners[i ? 0 : 1]; }
499                                         else { listeners.splice(i, 1); }
500                                 }
501                         }
502                 } else {
503                         if ((listeners === listener) ||
504                                         (listeners.__eeOnceListener__ === listener)) {
505                                 delete data[type];
506                         }
507                 }
508
509                 return this;
510         };
511
512         emit = function (type) {
513                 var arguments$1 = arguments;
514
515                 var i, l, listener, listeners, args;
516
517                 if (!hasOwnProperty.call(this, '__ee__')) { return; }
518                 listeners = this.__ee__[type];
519                 if (!listeners) { return; }
520
521                 if (typeof listeners === 'object') {
522                         l = arguments.length;
523                         args = new Array(l - 1);
524                         for (i = 1; i < l; ++i) { args[i - 1] = arguments$1[i]; }
525
526                         listeners = listeners.slice();
527                         for (i = 0; (listener = listeners[i]); ++i) {
528                                 apply.call(listener, this, args);
529                         }
530                 } else {
531                         switch (arguments.length) {
532                         case 1:
533                                 call.call(listeners, this);
534                                 break;
535                         case 2:
536                                 call.call(listeners, this, arguments[1]);
537                                 break;
538                         case 3:
539                                 call.call(listeners, this, arguments[1], arguments[2]);
540                                 break;
541                         default:
542                                 l = arguments.length;
543                                 args = new Array(l - 1);
544                                 for (i = 1; i < l; ++i) {
545                                         args[i - 1] = arguments$1[i];
546                                 }
547                                 apply.call(listeners, this, args);
548                         }
549                 }
550         };
551
552         methods = {
553                 on: on,
554                 once: once,
555                 off: off,
556                 emit: emit
557         };
558
559         descriptors = {
560                 on: d_1(on),
561                 once: d_1(once),
562                 off: d_1(off),
563                 emit: d_1(emit)
564         };
565
566         base = defineProperties({}, descriptors);
567
568         module.exports = exports = function (o) {
569                 return (o == null) ? create(base) : defineProperties(Object(o), descriptors);
570         };
571         exports.methods = methods;
572         });
573         var eventEmitter_1 = eventEmitter.methods;
574
575         var validTypes = { object: true, symbol: true };
576
577         var isImplemented$7 = function () {
578                 var symbol;
579                 if (typeof Symbol !== 'function') { return false; }
580                 symbol = Symbol('test symbol');
581                 try { String(symbol); } catch (e) { return false; }
582
583                 // Return 'true' also for polyfills
584                 if (!validTypes[typeof Symbol.iterator]) { return false; }
585                 if (!validTypes[typeof Symbol.toPrimitive]) { return false; }
586                 if (!validTypes[typeof Symbol.toStringTag]) { return false; }
587
588                 return true;
589         };
590
591         var isSymbol = function (x) {
592                 if (!x) { return false; }
593                 if (typeof x === 'symbol') { return true; }
594                 if (!x.constructor) { return false; }
595                 if (x.constructor.name !== 'Symbol') { return false; }
596                 return (x[x.constructor.toStringTag] === 'Symbol');
597         };
598
599         var validateSymbol = function (value) {
600                 if (!isSymbol(value)) { throw new TypeError(value + " is not a symbol"); }
601                 return value;
602         };
603
604         var create$3 = Object.create, defineProperties = Object.defineProperties
605           , defineProperty$1 = Object.defineProperty, objPrototype = Object.prototype
606           , NativeSymbol, SymbolPolyfill, HiddenSymbol, globalSymbols = create$3(null)
607           , isNativeSafe;
608
609         if (typeof Symbol === 'function') {
610                 NativeSymbol = Symbol;
611                 try {
612                         String(NativeSymbol());
613                         isNativeSafe = true;
614                 } catch (ignore) {}
615         }
616
617         var generateName = (function () {
618                 var created = create$3(null);
619                 return function (desc) {
620                         var postfix = 0, name, ie11BugWorkaround;
621                         while (created[desc + (postfix || '')]) { ++postfix; }
622                         desc += (postfix || '');
623                         created[desc] = true;
624                         name = '@@' + desc;
625                         defineProperty$1(objPrototype, name, d_1.gs(null, function (value) {
626                                 // For IE11 issue see:
627                                 // https://connect.microsoft.com/IE/feedbackdetail/view/1928508/
628                                 //    ie11-broken-getters-on-dom-objects
629                                 // https://github.com/medikoo/es6-symbol/issues/12
630                                 if (ie11BugWorkaround) { return; }
631                                 ie11BugWorkaround = true;
632                                 defineProperty$1(this, name, d_1(value));
633                                 ie11BugWorkaround = false;
634                         }));
635                         return name;
636                 };
637         }());
638
639         // Internal constructor (not one exposed) for creating Symbol instances.
640         // This one is used to ensure that `someSymbol instanceof Symbol` always return false
641         HiddenSymbol = function Symbol(description) {
642                 if (this instanceof HiddenSymbol) { throw new TypeError('Symbol is not a constructor'); }
643                 return SymbolPolyfill(description);
644         };
645
646         // Exposed `Symbol` constructor
647         // (returns instances of HiddenSymbol)
648         var polyfill = SymbolPolyfill = function Symbol(description) {
649                 var symbol;
650                 if (this instanceof Symbol) { throw new TypeError('Symbol is not a constructor'); }
651                 if (isNativeSafe) { return NativeSymbol(description); }
652                 symbol = create$3(HiddenSymbol.prototype);
653                 description = (description === undefined ? '' : String(description));
654                 return defineProperties(symbol, {
655                         __description__: d_1('', description),
656                         __name__: d_1('', generateName(description))
657                 });
658         };
659         defineProperties(SymbolPolyfill, {
660                 for: d_1(function (key) {
661                         if (globalSymbols[key]) { return globalSymbols[key]; }
662                         return (globalSymbols[key] = SymbolPolyfill(String(key)));
663                 }),
664                 keyFor: d_1(function (s) {
665                         var key;
666                         validateSymbol(s);
667                         for (key in globalSymbols) { if (globalSymbols[key] === s) { return key; } }
668                 }),
669
670                 // To ensure proper interoperability with other native functions (e.g. Array.from)
671                 // fallback to eventual native implementation of given symbol
672                 hasInstance: d_1('', (NativeSymbol && NativeSymbol.hasInstance) || SymbolPolyfill('hasInstance')),
673                 isConcatSpreadable: d_1('', (NativeSymbol && NativeSymbol.isConcatSpreadable) ||
674                         SymbolPolyfill('isConcatSpreadable')),
675                 iterator: d_1('', (NativeSymbol && NativeSymbol.iterator) || SymbolPolyfill('iterator')),
676                 match: d_1('', (NativeSymbol && NativeSymbol.match) || SymbolPolyfill('match')),
677                 replace: d_1('', (NativeSymbol && NativeSymbol.replace) || SymbolPolyfill('replace')),
678                 search: d_1('', (NativeSymbol && NativeSymbol.search) || SymbolPolyfill('search')),
679                 species: d_1('', (NativeSymbol && NativeSymbol.species) || SymbolPolyfill('species')),
680                 split: d_1('', (NativeSymbol && NativeSymbol.split) || SymbolPolyfill('split')),
681                 toPrimitive: d_1('', (NativeSymbol && NativeSymbol.toPrimitive) || SymbolPolyfill('toPrimitive')),
682                 toStringTag: d_1('', (NativeSymbol && NativeSymbol.toStringTag) || SymbolPolyfill('toStringTag')),
683                 unscopables: d_1('', (NativeSymbol && NativeSymbol.unscopables) || SymbolPolyfill('unscopables'))
684         });
685
686         // Internal tweaks for real symbol producer
687         defineProperties(HiddenSymbol.prototype, {
688                 constructor: d_1(SymbolPolyfill),
689                 toString: d_1('', function () { return this.__name__; })
690         });
691
692         // Proper implementation of methods exposed on Symbol.prototype
693         // They won't be accessible on produced symbol instances as they derive from HiddenSymbol.prototype
694         defineProperties(SymbolPolyfill.prototype, {
695                 toString: d_1(function () { return 'Symbol (' + validateSymbol(this).__description__ + ')'; }),
696                 valueOf: d_1(function () { return validateSymbol(this); })
697         });
698         defineProperty$1(SymbolPolyfill.prototype, SymbolPolyfill.toPrimitive, d_1('', function () {
699                 var symbol = validateSymbol(this);
700                 if (typeof symbol === 'symbol') { return symbol; }
701                 return symbol.toString();
702         }));
703         defineProperty$1(SymbolPolyfill.prototype, SymbolPolyfill.toStringTag, d_1('c', 'Symbol'));
704
705         // Proper implementaton of toPrimitive and toStringTag for returned symbol instances
706         defineProperty$1(HiddenSymbol.prototype, SymbolPolyfill.toStringTag,
707                 d_1('c', SymbolPolyfill.prototype[SymbolPolyfill.toStringTag]));
708
709         // Note: It's important to define `toPrimitive` as last one, as some implementations
710         // implement `toPrimitive` natively without implementing `toStringTag` (or other specified symbols)
711         // And that may invoke error in definition flow:
712         // See: https://github.com/medikoo/es6-symbol/issues/13#issuecomment-164146149
713         defineProperty$1(HiddenSymbol.prototype, SymbolPolyfill.toPrimitive,
714                 d_1('c', SymbolPolyfill.prototype[SymbolPolyfill.toPrimitive]));
715
716         var es6Symbol = isImplemented$7() ? Symbol : polyfill;
717
718         var objToString = Object.prototype.toString
719           , id = objToString.call((function () { return arguments; })());
720
721         var isArguments = function (value) { return objToString.call(value) === id; };
722
723         var objToString$1 = Object.prototype.toString, id$1 = objToString$1.call("");
724
725         var isString = function (value) {
726                 return (
727                         typeof value === "string" ||
728                         (value &&
729                                 typeof value === "object" &&
730                                 (value instanceof String || objToString$1.call(value) === id$1)) ||
731                         false
732                 );
733         };
734
735         var isImplemented$8 = function () {
736                 if (typeof globalThis !== "object") { return false; }
737                 if (!globalThis) { return false; }
738                 return globalThis.Array === Array;
739         };
740
741         var naiveFallback = function () {
742                 if (typeof self === "object" && self) { return self; }
743                 if (typeof window === "object" && window) { return window; }
744                 throw new Error("Unable to resolve global `this`");
745         };
746
747         var implementation = (function () {
748                 if (this) { return this; }
749
750                 // Unexpected strict mode (may happen if e.g. bundled into ESM module)
751
752                 // Thanks @mathiasbynens -> https://mathiasbynens.be/notes/globalthis
753                 // In all ES5+ engines global object inherits from Object.prototype
754                 // (if you approached one that doesn't please report)
755                 try {
756                         Object.defineProperty(Object.prototype, "__global__", {
757                                 get: function () { return this; },
758                                 configurable: true
759                         });
760                 } catch (error) {
761                         // Unfortunate case of Object.prototype being sealed (via preventExtensions, seal or freeze)
762                         return naiveFallback();
763                 }
764                 try {
765                         // Safari case (window.__global__ is resolved with global context, but __global__ does not)
766                         if (!__global__) { return naiveFallback(); }
767                         return __global__;
768                 } finally {
769                         delete Object.prototype.__global__;
770                 }
771         })();
772
773         var globalThis_1 = isImplemented$8() ? globalThis : implementation;
774
775         var validTypes$1 = { object: true, symbol: true };
776
777         var isImplemented$9 = function () {
778                 var Symbol = globalThis_1.Symbol;
779                 var symbol;
780                 if (typeof Symbol !== "function") { return false; }
781                 symbol = Symbol("test symbol");
782                 try { String(symbol); }
783                 catch (e) { return false; }
784
785                 // Return 'true' also for polyfills
786                 if (!validTypes$1[typeof Symbol.iterator]) { return false; }
787                 if (!validTypes$1[typeof Symbol.toPrimitive]) { return false; }
788                 if (!validTypes$1[typeof Symbol.toStringTag]) { return false; }
789
790                 return true;
791         };
792
793         var isSymbol$1 = function (value) {
794                 if (!value) { return false; }
795                 if (typeof value === "symbol") { return true; }
796                 if (!value.constructor) { return false; }
797                 if (value.constructor.name !== "Symbol") { return false; }
798                 return value[value.constructor.toStringTag] === "Symbol";
799         };
800
801         var validateSymbol$1 = function (value) {
802                 if (!isSymbol$1(value)) { throw new TypeError(value + " is not a symbol"); }
803                 return value;
804         };
805
806         var create$4 = Object.create, defineProperty$2 = Object.defineProperty, objPrototype$1 = Object.prototype;
807
808         var created = create$4(null);
809         var generateName$1 = function (desc) {
810                 var postfix = 0, name, ie11BugWorkaround;
811                 while (created[desc + (postfix || "")]) { ++postfix; }
812                 desc += postfix || "";
813                 created[desc] = true;
814                 name = "@@" + desc;
815                 defineProperty$2(
816                         objPrototype$1,
817                         name,
818                         d_1.gs(null, function (value) {
819                                 // For IE11 issue see:
820                                 // https://connect.microsoft.com/IE/feedbackdetail/view/1928508/
821                                 //    ie11-broken-getters-on-dom-objects
822                                 // https://github.com/medikoo/es6-symbol/issues/12
823                                 if (ie11BugWorkaround) { return; }
824                                 ie11BugWorkaround = true;
825                                 defineProperty$2(this, name, d_1(value));
826                                 ie11BugWorkaround = false;
827                         })
828                 );
829                 return name;
830         };
831
832         var NativeSymbol$1 = globalThis_1.Symbol;
833
834         var standardSymbols = function (SymbolPolyfill) {
835                 return Object.defineProperties(SymbolPolyfill, {
836                         // To ensure proper interoperability with other native functions (e.g. Array.from)
837                         // fallback to eventual native implementation of given symbol
838                         hasInstance: d_1(
839                                 "", (NativeSymbol$1 && NativeSymbol$1.hasInstance) || SymbolPolyfill("hasInstance")
840                         ),
841                         isConcatSpreadable: d_1(
842                                 "",
843                                 (NativeSymbol$1 && NativeSymbol$1.isConcatSpreadable) ||
844                                         SymbolPolyfill("isConcatSpreadable")
845                         ),
846                         iterator: d_1("", (NativeSymbol$1 && NativeSymbol$1.iterator) || SymbolPolyfill("iterator")),
847                         match: d_1("", (NativeSymbol$1 && NativeSymbol$1.match) || SymbolPolyfill("match")),
848                         replace: d_1("", (NativeSymbol$1 && NativeSymbol$1.replace) || SymbolPolyfill("replace")),
849                         search: d_1("", (NativeSymbol$1 && NativeSymbol$1.search) || SymbolPolyfill("search")),
850                         species: d_1("", (NativeSymbol$1 && NativeSymbol$1.species) || SymbolPolyfill("species")),
851                         split: d_1("", (NativeSymbol$1 && NativeSymbol$1.split) || SymbolPolyfill("split")),
852                         toPrimitive: d_1(
853                                 "", (NativeSymbol$1 && NativeSymbol$1.toPrimitive) || SymbolPolyfill("toPrimitive")
854                         ),
855                         toStringTag: d_1(
856                                 "", (NativeSymbol$1 && NativeSymbol$1.toStringTag) || SymbolPolyfill("toStringTag")
857                         ),
858                         unscopables: d_1(
859                                 "", (NativeSymbol$1 && NativeSymbol$1.unscopables) || SymbolPolyfill("unscopables")
860                         )
861                 });
862         };
863
864         var registry = Object.create(null);
865
866         var symbolRegistry = function (SymbolPolyfill) {
867                 return Object.defineProperties(SymbolPolyfill, {
868                         for: d_1(function (key) {
869                                 if (registry[key]) { return registry[key]; }
870                                 return (registry[key] = SymbolPolyfill(String(key)));
871                         }),
872                         keyFor: d_1(function (symbol) {
873                                 var key;
874                                 validateSymbol$1(symbol);
875                                 for (key in registry) {
876                                         if (registry[key] === symbol) { return key; }
877                                 }
878                                 return undefined;
879                         })
880                 });
881         };
882
883         var NativeSymbol$2         = globalThis_1.Symbol;
884
885         var create$5 = Object.create
886           , defineProperties$1 = Object.defineProperties
887           , defineProperty$3 = Object.defineProperty;
888
889         var SymbolPolyfill$1, HiddenSymbol$1, isNativeSafe$1;
890
891         if (typeof NativeSymbol$2 === "function") {
892                 try {
893                         String(NativeSymbol$2());
894                         isNativeSafe$1 = true;
895                 } catch (ignore) {}
896         } else {
897                 NativeSymbol$2 = null;
898         }
899
900         // Internal constructor (not one exposed) for creating Symbol instances.
901         // This one is used to ensure that `someSymbol instanceof Symbol` always return false
902         HiddenSymbol$1 = function Symbol(description) {
903                 if (this instanceof HiddenSymbol$1) { throw new TypeError("Symbol is not a constructor"); }
904                 return SymbolPolyfill$1(description);
905         };
906
907         // Exposed `Symbol` constructor
908         // (returns instances of HiddenSymbol)
909         var polyfill$1 = SymbolPolyfill$1 = function Symbol(description) {
910                 var symbol;
911                 if (this instanceof Symbol) { throw new TypeError("Symbol is not a constructor"); }
912                 if (isNativeSafe$1) { return NativeSymbol$2(description); }
913                 symbol = create$5(HiddenSymbol$1.prototype);
914                 description = description === undefined ? "" : String(description);
915                 return defineProperties$1(symbol, {
916                         __description__: d_1("", description),
917                         __name__: d_1("", generateName$1(description))
918                 });
919         };
920
921         standardSymbols(SymbolPolyfill$1);
922         symbolRegistry(SymbolPolyfill$1);
923
924         // Internal tweaks for real symbol producer
925         defineProperties$1(HiddenSymbol$1.prototype, {
926                 constructor: d_1(SymbolPolyfill$1),
927                 toString: d_1("", function () { return this.__name__; })
928         });
929
930         // Proper implementation of methods exposed on Symbol.prototype
931         // They won't be accessible on produced symbol instances as they derive from HiddenSymbol.prototype
932         defineProperties$1(SymbolPolyfill$1.prototype, {
933                 toString: d_1(function () { return "Symbol (" + validateSymbol$1(this).__description__ + ")"; }),
934                 valueOf: d_1(function () { return validateSymbol$1(this); })
935         });
936         defineProperty$3(
937                 SymbolPolyfill$1.prototype,
938                 SymbolPolyfill$1.toPrimitive,
939                 d_1("", function () {
940                         var symbol = validateSymbol$1(this);
941                         if (typeof symbol === "symbol") { return symbol; }
942                         return symbol.toString();
943                 })
944         );
945         defineProperty$3(SymbolPolyfill$1.prototype, SymbolPolyfill$1.toStringTag, d_1("c", "Symbol"));
946
947         // Proper implementaton of toPrimitive and toStringTag for returned symbol instances
948         defineProperty$3(
949                 HiddenSymbol$1.prototype, SymbolPolyfill$1.toStringTag,
950                 d_1("c", SymbolPolyfill$1.prototype[SymbolPolyfill$1.toStringTag])
951         );
952
953         // Note: It's important to define `toPrimitive` as last one, as some implementations
954         // implement `toPrimitive` natively without implementing `toStringTag` (or other specified symbols)
955         // And that may invoke error in definition flow:
956         // See: https://github.com/medikoo/es6-symbol/issues/13#issuecomment-164146149
957         defineProperty$3(
958                 HiddenSymbol$1.prototype, SymbolPolyfill$1.toPrimitive,
959                 d_1("c", SymbolPolyfill$1.prototype[SymbolPolyfill$1.toPrimitive])
960         );
961
962         var es6Symbol$1 = isImplemented$9()
963                 ? globalThis_1.Symbol
964                 : polyfill$1;
965
966         var iteratorSymbol = es6Symbol$1.iterator
967           , isArray        = Array.isArray;
968
969         var isIterable = function (value) {
970                 if (!isValue(value)) { return false; }
971                 if (isArray(value)) { return true; }
972                 if (isString(value)) { return true; }
973                 if (isArguments(value)) { return true; }
974                 return typeof value[iteratorSymbol] === "function";
975         };
976
977         var validIterable = function (value) {
978                 if (!isIterable(value)) { throw new TypeError(value + " is not iterable"); }
979                 return value;
980         };
981
982         var objectToString = Object.prototype.toString;
983
984         var coerce = function (value) {
985                 if (!is(value)) { return null; }
986                 if (is$1(value)) {
987                         // Reject Object.prototype.toString coercion
988                         var valueToString = value.toString;
989                         if (typeof valueToString !== "function") { return null; }
990                         if (valueToString === objectToString) { return null; }
991                         // Note: It can be object coming from other realm, still as there's no ES3 and CSP compliant
992                         // way to resolve its realm's Object.prototype.toString it's left as not addressed edge case
993                 }
994                 try {
995                         return "" + value; // Ensure implicit coercion
996                 } catch (error) {
997                         return null;
998                 }
999         };
1000
1001         var safeToString = function (value) {
1002                 try {
1003                         return value.toString();
1004                 } catch (error) {
1005                         try { return String(value); }
1006                         catch (error2) { return null; }
1007                 }
1008         };
1009
1010         var reNewLine = /[\n\r\u2028\u2029]/g;
1011
1012         var toShortString = function (value) {
1013                 var string = safeToString(value);
1014                 if (string === null) { return "<Non-coercible to string value>"; }
1015                 // Trim if too long
1016                 if (string.length > 100) { string = string.slice(0, 99) + "…"; }
1017                 // Replace eventual new lines
1018                 string = string.replace(reNewLine, function (char) {
1019                         switch (char) {
1020                                 case "\n":
1021                                         return "\\n";
1022                                 case "\r":
1023                                         return "\\r";
1024                                 case "\u2028":
1025                                         return "\\u2028";
1026                                 case "\u2029":
1027                                         return "\\u2029";
1028                                 /* istanbul ignore next */
1029                                 default:
1030                                         throw new Error("Unexpected character");
1031                         }
1032                 });
1033                 return string;
1034         };
1035
1036         var resolveMessage = function (message, value) {
1037                 return message.replace("%v", toShortString(value));
1038         };
1039
1040         var resolveException = function (value, defaultMessage, inputOptions) {
1041                 if (!is$1(inputOptions)) { throw new TypeError(resolveMessage(defaultMessage, value)); }
1042                 if (!is(value)) {
1043                         if ("default" in inputOptions) { return inputOptions["default"]; }
1044                         if (inputOptions.isOptional) { return null; }
1045                 }
1046                 var errorMessage = coerce(inputOptions.errorMessage);
1047                 if (!is(errorMessage)) { errorMessage = defaultMessage; }
1048                 throw new TypeError(resolveMessage(errorMessage, value));
1049         };
1050
1051         var ensure = function (value/*, options*/) {
1052                 if (is(value)) { return value; }
1053                 return resolveException(value, "Cannot use %v", arguments[1]);
1054         };
1055
1056         var ensure$1 = function (value/*, options*/) {
1057                 if (is$4(value)) { return value; }
1058                 return resolveException(value, "%v is not a plain function", arguments[1]);
1059         };
1060
1061         var isImplemented$a = function () {
1062                 var from = Array.from, arr, result;
1063                 if (typeof from !== "function") { return false; }
1064                 arr = ["raz", "dwa"];
1065                 result = from(arr);
1066                 return Boolean(result && result !== arr && result[1] === "dwa");
1067         };
1068
1069         var objToString$2 = Object.prototype.toString
1070           , isFunctionStringTag = RegExp.prototype.test.bind(/^[object [A-Za-z0-9]*Function]$/);
1071
1072         var isFunction = function (value) {
1073                 return typeof value === "function" && isFunctionStringTag(objToString$2.call(value));
1074         };
1075
1076         var iteratorSymbol$1 = es6Symbol$1.iterator
1077           , isArray$1        = Array.isArray
1078           , call           = Function.prototype.call
1079           , desc           = { configurable: true, enumerable: true, writable: true, value: null }
1080           , defineProperty$4 = Object.defineProperty;
1081
1082         // eslint-disable-next-line complexity, max-lines-per-function
1083         var shim$7 = function (arrayLike/*, mapFn, thisArg*/) {
1084                 var mapFn = arguments[1]
1085                   , thisArg = arguments[2]
1086                   , Context
1087                   , i
1088                   , j
1089                   , arr
1090                   , length
1091                   , code
1092                   , iterator
1093                   , result
1094                   , getIterator
1095                   , value;
1096
1097                 arrayLike = Object(validValue(arrayLike));
1098
1099                 if (isValue(mapFn)) { validCallable(mapFn); }
1100                 if (!this || this === Array || !isFunction(this)) {
1101                         // Result: Plain array
1102                         if (!mapFn) {
1103                                 if (isArguments(arrayLike)) {
1104                                         // Source: Arguments
1105                                         length = arrayLike.length;
1106                                         if (length !== 1) { return Array.apply(null, arrayLike); }
1107                                         arr = new Array(1);
1108                                         arr[0] = arrayLike[0];
1109                                         return arr;
1110                                 }
1111                                 if (isArray$1(arrayLike)) {
1112                                         // Source: Array
1113                                         arr = new Array((length = arrayLike.length));
1114                                         for (i = 0; i < length; ++i) { arr[i] = arrayLike[i]; }
1115                                         return arr;
1116                                 }
1117                         }
1118                         arr = [];
1119                 } else {
1120                         // Result: Non plain array
1121                         Context = this;
1122                 }
1123
1124                 if (!isArray$1(arrayLike)) {
1125                         if ((getIterator = arrayLike[iteratorSymbol$1]) !== undefined) {
1126                                 // Source: Iterator
1127                                 iterator = validCallable(getIterator).call(arrayLike);
1128                                 if (Context) { arr = new Context(); }
1129                                 result = iterator.next();
1130                                 i = 0;
1131                                 while (!result.done) {
1132                                         value = mapFn ? call.call(mapFn, thisArg, result.value, i) : result.value;
1133                                         if (Context) {
1134                                                 desc.value = value;
1135                                                 defineProperty$4(arr, i, desc);
1136                                         } else {
1137                                                 arr[i] = value;
1138                                         }
1139                                         result = iterator.next();
1140                                         ++i;
1141                                 }
1142                                 length = i;
1143                         } else if (isString(arrayLike)) {
1144                                 // Source: String
1145                                 length = arrayLike.length;
1146                                 if (Context) { arr = new Context(); }
1147                                 for (i = 0, j = 0; i < length; ++i) {
1148                                         value = arrayLike[i];
1149                                         if (i + 1 < length) {
1150                                                 code = value.charCodeAt(0);
1151                                                 // eslint-disable-next-line max-depth
1152                                                 if (code >= 0xd800 && code <= 0xdbff) { value += arrayLike[++i]; }
1153                                         }
1154                                         value = mapFn ? call.call(mapFn, thisArg, value, j) : value;
1155                                         if (Context) {
1156                                                 desc.value = value;
1157                                                 defineProperty$4(arr, j, desc);
1158                                         } else {
1159                                                 arr[j] = value;
1160                                         }
1161                                         ++j;
1162                                 }
1163                                 length = j;
1164                         }
1165                 }
1166                 if (length === undefined) {
1167                         // Source: array or array-like
1168                         length = toPosInteger(arrayLike.length);
1169                         if (Context) { arr = new Context(length); }
1170                         for (i = 0; i < length; ++i) {
1171                                 value = mapFn ? call.call(mapFn, thisArg, arrayLike[i], i) : arrayLike[i];
1172                                 if (Context) {
1173                                         desc.value = value;
1174                                         defineProperty$4(arr, i, desc);
1175                                 } else {
1176                                         arr[i] = value;
1177                                 }
1178                         }
1179                 }
1180                 if (Context) {
1181                         desc.value = null;
1182                         arr.length = length;
1183                 }
1184                 return arr;
1185         };
1186
1187         var from_1 = isImplemented$a() ? Array.from : shim$7;
1188
1189         var copy = function (obj/*, propertyNames, options*/) {
1190                 var copy = Object(validValue(obj)), propertyNames = arguments[1], options = Object(arguments[2]);
1191                 if (copy !== obj && !propertyNames) { return copy; }
1192                 var result = {};
1193                 if (propertyNames) {
1194                         from_1(propertyNames, function (propertyName) {
1195                                 if (options.ensure || propertyName in obj) { result[propertyName] = obj[propertyName]; }
1196                         });
1197                 } else {
1198                         assign(result, obj);
1199                 }
1200                 return result;
1201         };
1202
1203         var bind                    = Function.prototype.bind
1204           , call$1                    = Function.prototype.call
1205           , keys$2                    = Object.keys
1206           , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;
1207
1208         var _iterate = function (method, defVal) {
1209                 return function (obj, cb/*, thisArg, compareFn*/) {
1210                         var list, thisArg = arguments[2], compareFn = arguments[3];
1211                         obj = Object(validValue(obj));
1212                         validCallable(cb);
1213
1214                         list = keys$2(obj);
1215                         if (compareFn) {
1216                                 list.sort(typeof compareFn === "function" ? bind.call(compareFn, obj) : undefined);
1217                         }
1218                         if (typeof method !== "function") { method = list[method]; }
1219                         return call$1.call(method, list, function (key, index) {
1220                                 if (!objPropertyIsEnumerable.call(obj, key)) { return defVal; }
1221                                 return call$1.call(cb, thisArg, obj[key], key, obj, index);
1222                         });
1223                 };
1224         };
1225
1226         var forEach$1 = _iterate("forEach");
1227
1228         var call$2     = Function.prototype.call;
1229
1230         var map$1 = function (obj, cb/*, thisArg*/) {
1231                 var result = {}, thisArg = arguments[2];
1232                 validCallable(cb);
1233                 forEach$1(obj, function (value, key, targetObj, index) {
1234                         result[key] = call$2.call(cb, thisArg, value, key, targetObj, index);
1235                 });
1236                 return result;
1237         };
1238
1239         var bind$1 = Function.prototype.bind
1240           , defineProperty$5 = Object.defineProperty
1241           , hasOwnProperty$1 = Object.prototype.hasOwnProperty
1242           , define;
1243
1244         define = function (name, desc, options) {
1245                 var value = ensure(desc) && ensure$1(desc.value), dgs;
1246                 dgs = copy(desc);
1247                 delete dgs.writable;
1248                 delete dgs.value;
1249                 dgs.get = function () {
1250                         if (!options.overwriteDefinition && hasOwnProperty$1.call(this, name)) { return value; }
1251                         desc.value = bind$1.call(value, options.resolveContext ? options.resolveContext(this) : this);
1252                         defineProperty$5(this, name, desc);
1253                         return this[name];
1254                 };
1255                 return dgs;
1256         };
1257
1258         var autoBind = function (props/*, options*/) {
1259                 var options = normalizeOptions(arguments[1]);
1260                 if (is(options.resolveContext)) { ensure$1(options.resolveContext); }
1261                 return map$1(props, function (desc, name) { return define(name, desc, options); });
1262         };
1263
1264         var defineProperty$6 = Object.defineProperty, defineProperties$2 = Object.defineProperties, Iterator;
1265
1266         var es6Iterator = Iterator = function (list, context) {
1267                 if (!(this instanceof Iterator)) { throw new TypeError("Constructor requires 'new'"); }
1268                 defineProperties$2(this, {
1269                         __list__: d_1("w", validValue(list)),
1270                         __context__: d_1("w", context),
1271                         __nextIndex__: d_1("w", 0)
1272                 });
1273                 if (!context) { return; }
1274                 validCallable(context.on);
1275                 context.on("_add", this._onAdd);
1276                 context.on("_delete", this._onDelete);
1277                 context.on("_clear", this._onClear);
1278         };
1279
1280         // Internal %IteratorPrototype% doesn't expose its constructor
1281         delete Iterator.prototype.constructor;
1282
1283         defineProperties$2(
1284                 Iterator.prototype,
1285                 assign(
1286                         {
1287                                 _next: d_1(function () {
1288                                         var i;
1289                                         if (!this.__list__) { return undefined; }
1290                                         if (this.__redo__) {
1291                                                 i = this.__redo__.shift();
1292                                                 if (i !== undefined) { return i; }
1293                                         }
1294                                         if (this.__nextIndex__ < this.__list__.length) { return this.__nextIndex__++; }
1295                                         this._unBind();
1296                                         return undefined;
1297                                 }),
1298                                 next: d_1(function () {
1299                                         return this._createResult(this._next());
1300                                 }),
1301                                 _createResult: d_1(function (i) {
1302                                         if (i === undefined) { return { done: true, value: undefined }; }
1303                                         return { done: false, value: this._resolve(i) };
1304                                 }),
1305                                 _resolve: d_1(function (i) {
1306                                         return this.__list__[i];
1307                                 }),
1308                                 _unBind: d_1(function () {
1309                                         this.__list__ = null;
1310                                         delete this.__redo__;
1311                                         if (!this.__context__) { return; }
1312                                         this.__context__.off("_add", this._onAdd);
1313                                         this.__context__.off("_delete", this._onDelete);
1314                                         this.__context__.off("_clear", this._onClear);
1315                                         this.__context__ = null;
1316                                 }),
1317                                 toString: d_1(function () {
1318                                         return "[object " + (this[es6Symbol$1.toStringTag] || "Object") + "]";
1319                                 })
1320                         },
1321                         autoBind({
1322                                 _onAdd: d_1(function (index) {
1323                                         if (index >= this.__nextIndex__) { return; }
1324                                         ++this.__nextIndex__;
1325                                         if (!this.__redo__) {
1326                                                 defineProperty$6(this, "__redo__", d_1("c", [index]));
1327                                                 return;
1328                                         }
1329                                         this.__redo__.forEach(function (redo, i) {
1330                                                 if (redo >= index) { this.__redo__[i] = ++redo; }
1331                                         }, this);
1332                                         this.__redo__.push(index);
1333                                 }),
1334                                 _onDelete: d_1(function (index) {
1335                                         var i;
1336                                         if (index >= this.__nextIndex__) { return; }
1337                                         --this.__nextIndex__;
1338                                         if (!this.__redo__) { return; }
1339                                         i = this.__redo__.indexOf(index);
1340                                         if (i !== -1) { this.__redo__.splice(i, 1); }
1341                                         this.__redo__.forEach(function (redo, j) {
1342                                                 if (redo > index) { this.__redo__[j] = --redo; }
1343                                         }, this);
1344                                 }),
1345                                 _onClear: d_1(function () {
1346                                         if (this.__redo__) { clear.call(this.__redo__); }
1347                                         this.__nextIndex__ = 0;
1348                                 })
1349                         })
1350                 )
1351         );
1352
1353         defineProperty$6(
1354                 Iterator.prototype,
1355                 es6Symbol$1.iterator,
1356                 d_1(function () {
1357                         return this;
1358                 })
1359         );
1360
1361         var array = createCommonjsModule(function (module) {
1362
1363
1364
1365         var defineProperty = Object.defineProperty, ArrayIterator;
1366
1367         ArrayIterator = module.exports = function (arr, kind) {
1368                 if (!(this instanceof ArrayIterator)) { throw new TypeError("Constructor requires 'new'"); }
1369                 es6Iterator.call(this, arr);
1370                 if (!kind) { kind = "value"; }
1371                 else if (contains.call(kind, "key+value")) { kind = "key+value"; }
1372                 else if (contains.call(kind, "key")) { kind = "key"; }
1373                 else { kind = "value"; }
1374                 defineProperty(this, "__kind__", d_1("", kind));
1375         };
1376         if (setPrototypeOf) { setPrototypeOf(ArrayIterator, es6Iterator); }
1377
1378         // Internal %ArrayIteratorPrototype% doesn't expose its constructor
1379         delete ArrayIterator.prototype.constructor;
1380
1381         ArrayIterator.prototype = Object.create(es6Iterator.prototype, {
1382                 _resolve: d_1(function (i) {
1383                         if (this.__kind__ === "value") { return this.__list__[i]; }
1384                         if (this.__kind__ === "key+value") { return [i, this.__list__[i]]; }
1385                         return i;
1386                 })
1387         });
1388         defineProperty(ArrayIterator.prototype, es6Symbol$1.toStringTag, d_1("c", "Array Iterator"));
1389         });
1390
1391         var string = createCommonjsModule(function (module) {
1392
1393
1394
1395         var defineProperty = Object.defineProperty, StringIterator;
1396
1397         StringIterator = module.exports = function (str) {
1398                 if (!(this instanceof StringIterator)) { throw new TypeError("Constructor requires 'new'"); }
1399                 str = String(str);
1400                 es6Iterator.call(this, str);
1401                 defineProperty(this, "__length__", d_1("", str.length));
1402         };
1403         if (setPrototypeOf) { setPrototypeOf(StringIterator, es6Iterator); }
1404
1405         // Internal %ArrayIteratorPrototype% doesn't expose its constructor
1406         delete StringIterator.prototype.constructor;
1407
1408         StringIterator.prototype = Object.create(es6Iterator.prototype, {
1409                 _next: d_1(function () {
1410                         if (!this.__list__) { return undefined; }
1411                         if (this.__nextIndex__ < this.__length__) { return this.__nextIndex__++; }
1412                         this._unBind();
1413                         return undefined;
1414                 }),
1415                 _resolve: d_1(function (i) {
1416                         var char = this.__list__[i], code;
1417                         if (this.__nextIndex__ === this.__length__) { return char; }
1418                         code = char.charCodeAt(0);
1419                         if (code >= 0xd800 && code <= 0xdbff) { return char + this.__list__[this.__nextIndex__++]; }
1420                         return char;
1421                 })
1422         });
1423         defineProperty(StringIterator.prototype, es6Symbol$1.toStringTag, d_1("c", "String Iterator"));
1424         });
1425
1426         var iteratorSymbol$2 = es6Symbol$1.iterator;
1427
1428         var get = function (obj) {
1429                 if (typeof validIterable(obj)[iteratorSymbol$2] === "function") { return obj[iteratorSymbol$2](); }
1430                 if (isArguments(obj)) { return new array(obj); }
1431                 if (isString(obj)) { return new string(obj); }
1432                 return new array(obj);
1433         };
1434
1435         var isArray$2 = Array.isArray, call$3 = Function.prototype.call, some = Array.prototype.some;
1436
1437         var forOf = function (iterable, cb /*, thisArg*/) {
1438                 var mode, thisArg = arguments[2], result, doBreak, broken, i, length, char, code;
1439                 if (isArray$2(iterable) || isArguments(iterable)) { mode = "array"; }
1440                 else if (isString(iterable)) { mode = "string"; }
1441                 else { iterable = get(iterable); }
1442
1443                 validCallable(cb);
1444                 doBreak = function () {
1445                         broken = true;
1446                 };
1447                 if (mode === "array") {
1448                         some.call(iterable, function (value) {
1449                                 call$3.call(cb, thisArg, value, doBreak);
1450                                 return broken;
1451                         });
1452                         return;
1453                 }
1454                 if (mode === "string") {
1455                         length = iterable.length;
1456                         for (i = 0; i < length; ++i) {
1457                                 char = iterable[i];
1458                                 if (i + 1 < length) {
1459                                         code = char.charCodeAt(0);
1460                                         if (code >= 0xd800 && code <= 0xdbff) { char += iterable[++i]; }
1461                                 }
1462                                 call$3.call(cb, thisArg, char, doBreak);
1463                                 if (broken) { break; }
1464                         }
1465                         return;
1466                 }
1467                 result = iterable.next();
1468
1469                 while (!result.done) {
1470                         call$3.call(cb, thisArg, result.value, doBreak);
1471                         if (broken) { return; }
1472                         result = iterable.next();
1473                 }
1474         };
1475
1476         var iterator = createCommonjsModule(function (module) {
1477
1478         var toStringTagSymbol = es6Symbol.toStringTag
1479
1480           , defineProperty = Object.defineProperty
1481           , SetIterator;
1482
1483         SetIterator = module.exports = function (set, kind) {
1484                 if (!(this instanceof SetIterator)) { return new SetIterator(set, kind); }
1485                 es6Iterator.call(this, set.__setData__, set);
1486                 if (!kind) { kind = 'value'; }
1487                 else if (contains.call(kind, 'key+value')) { kind = 'key+value'; }
1488                 else { kind = 'value'; }
1489                 defineProperty(this, '__kind__', d_1('', kind));
1490         };
1491         if (setPrototypeOf) { setPrototypeOf(SetIterator, es6Iterator); }
1492
1493         SetIterator.prototype = Object.create(es6Iterator.prototype, {
1494                 constructor: d_1(SetIterator),
1495                 _resolve: d_1(function (i) {
1496                         if (this.__kind__ === 'value') { return this.__list__[i]; }
1497                         return [this.__list__[i], this.__list__[i]];
1498                 }),
1499                 toString: d_1(function () { return '[object Set Iterator]'; })
1500         });
1501         defineProperty(SetIterator.prototype, toStringTagSymbol, d_1('c', 'Set Iterator'));
1502         });
1503
1504         // Exports true if environment provides native `Set` implementation,
1505
1506         var isNativeImplemented = (function () {
1507                 if (typeof Set === 'undefined') { return false; }
1508                 return (Object.prototype.toString.call(Set.prototype) === '[object Set]');
1509         }());
1510
1511         var iterator$1       = validIterable
1512
1513           , call$4 = Function.prototype.call
1514           , defineProperty$7 = Object.defineProperty, getPrototypeOf$1 = Object.getPrototypeOf
1515           , SetPoly, getValues, NativeSet;
1516
1517         if (isNativeImplemented) { NativeSet = Set; }
1518
1519         var polyfill$2 = SetPoly = function Set(/*iterable*/) {
1520                 var iterable = arguments[0], self;
1521                 if (!(this instanceof SetPoly)) { throw new TypeError('Constructor requires \'new\''); }
1522                 if (isNativeImplemented && setPrototypeOf) { self = setPrototypeOf(new NativeSet(), getPrototypeOf$1(this)); }
1523                 else { self = this; }
1524                 if (iterable != null) { iterator$1(iterable); }
1525                 defineProperty$7(self, '__setData__', d_1('c', []));
1526                 if (!iterable) { return self; }
1527                 forOf(iterable, function (value) {
1528                         if (eIndexOf.call(this, value) !== -1) { return; }
1529                         this.push(value);
1530                 }, self.__setData__);
1531                 return self;
1532         };
1533
1534         if (isNativeImplemented) {
1535                 if (setPrototypeOf) { setPrototypeOf(SetPoly, NativeSet); }
1536                 SetPoly.prototype = Object.create(NativeSet.prototype, { constructor: d_1(SetPoly) });
1537         }
1538
1539         eventEmitter(Object.defineProperties(SetPoly.prototype, {
1540                 add: d_1(function (value) {
1541                         if (this.has(value)) { return this; }
1542                         this.emit('_add', this.__setData__.push(value) - 1, value);
1543                         return this;
1544                 }),
1545                 clear: d_1(function () {
1546                         if (!this.__setData__.length) { return; }
1547                         clear.call(this.__setData__);
1548                         this.emit('_clear');
1549                 }),
1550                 delete: d_1(function (value) {
1551                         var index = eIndexOf.call(this.__setData__, value);
1552                         if (index === -1) { return false; }
1553                         this.__setData__.splice(index, 1);
1554                         this.emit('_delete', index, value);
1555                         return true;
1556                 }),
1557                 entries: d_1(function () { return new iterator(this, 'key+value'); }),
1558                 forEach: d_1(function (cb/*, thisArg*/) {
1559                         var thisArg = arguments[1], iterator, result, value;
1560                         validCallable(cb);
1561                         iterator = this.values();
1562                         result = iterator._next();
1563                         while (result !== undefined) {
1564                                 value = iterator._resolve(result);
1565                                 call$4.call(cb, thisArg, value, value, this);
1566                                 result = iterator._next();
1567                         }
1568                 }),
1569                 has: d_1(function (value) {
1570                         return (eIndexOf.call(this.__setData__, value) !== -1);
1571                 }),
1572                 keys: d_1(getValues = function () { return this.values(); }),
1573                 size: d_1.gs(function () { return this.__setData__.length; }),
1574                 values: d_1(function () { return new iterator(this); }),
1575                 toString: d_1(function () { return '[object Set]'; })
1576         }));
1577         defineProperty$7(SetPoly.prototype, es6Symbol.iterator, d_1(getValues));
1578         defineProperty$7(SetPoly.prototype, es6Symbol.toStringTag, d_1('c', 'Set'));
1579
1580         var es6Set = isImplemented() ? Set : polyfill$2;
1581
1582         var isImplemented$b = function () {
1583                 var map, iterator, result;
1584                 if (typeof Map !== 'function') { return false; }
1585                 try {
1586                         // WebKit doesn't support arguments and crashes
1587                         map = new Map([['raz', 'one'], ['dwa', 'two'], ['trzy', 'three']]);
1588                 } catch (e) {
1589                         return false;
1590                 }
1591                 if (String(map) !== '[object Map]') { return false; }
1592                 if (map.size !== 3) { return false; }
1593                 if (typeof map.clear !== 'function') { return false; }
1594                 if (typeof map.delete !== 'function') { return false; }
1595                 if (typeof map.entries !== 'function') { return false; }
1596                 if (typeof map.forEach !== 'function') { return false; }
1597                 if (typeof map.get !== 'function') { return false; }
1598                 if (typeof map.has !== 'function') { return false; }
1599                 if (typeof map.keys !== 'function') { return false; }
1600                 if (typeof map.set !== 'function') { return false; }
1601                 if (typeof map.values !== 'function') { return false; }
1602
1603                 iterator = map.entries();
1604                 result = iterator.next();
1605                 if (result.done !== false) { return false; }
1606                 if (!result.value) { return false; }
1607                 if (result.value[0] !== 'raz') { return false; }
1608                 if (result.value[1] !== 'one') { return false; }
1609
1610                 return true;
1611         };
1612
1613         var forEach$2 = Array.prototype.forEach, create$6 = Object.create;
1614
1615         // eslint-disable-next-line no-unused-vars
1616         var primitiveSet = function (arg/*, …args*/) {
1617                 var set = create$6(null);
1618                 forEach$2.call(arguments, function (name) { set[name] = true; });
1619                 return set;
1620         };
1621
1622         var iteratorKinds = primitiveSet('key',
1623                 'value', 'key+value');
1624
1625         var iterator$2 = createCommonjsModule(function (module) {
1626
1627         var toStringTagSymbol = es6Symbol$1.toStringTag
1628
1629           , defineProperties = Object.defineProperties
1630           , unBind = es6Iterator.prototype._unBind
1631           , MapIterator;
1632
1633         MapIterator = module.exports = function (map, kind) {
1634                 if (!(this instanceof MapIterator)) { return new MapIterator(map, kind); }
1635                 es6Iterator.call(this, map.__mapKeysData__, map);
1636                 if (!kind || !iteratorKinds[kind]) { kind = 'key+value'; }
1637                 defineProperties(this, {
1638                         __kind__: d_1('', kind),
1639                         __values__: d_1('w', map.__mapValuesData__)
1640                 });
1641         };
1642         if (setPrototypeOf) { setPrototypeOf(MapIterator, es6Iterator); }
1643
1644         MapIterator.prototype = Object.create(es6Iterator.prototype, {
1645                 constructor: d_1(MapIterator),
1646                 _resolve: d_1(function (i) {
1647                         if (this.__kind__ === 'value') { return this.__values__[i]; }
1648                         if (this.__kind__ === 'key') { return this.__list__[i]; }
1649                         return [this.__list__[i], this.__values__[i]];
1650                 }),
1651                 _unBind: d_1(function () {
1652                         this.__values__ = null;
1653                         unBind.call(this);
1654                 }),
1655                 toString: d_1(function () { return '[object Map Iterator]'; })
1656         });
1657         Object.defineProperty(MapIterator.prototype, toStringTagSymbol,
1658                 d_1('c', 'Map Iterator'));
1659         });
1660
1661         // Exports true if environment provides native `Map` implementation,
1662
1663         var isNativeImplemented$1 = (function () {
1664                 if (typeof Map === 'undefined') { return false; }
1665                 return (Object.prototype.toString.call(new Map()) === '[object Map]');
1666         }());
1667
1668         var iterator$3       = validIterable
1669
1670           , call$5 = Function.prototype.call
1671           , defineProperties$3 = Object.defineProperties, getPrototypeOf$2 = Object.getPrototypeOf
1672           , MapPoly;
1673
1674         var polyfill$3 = MapPoly = function (/*iterable*/) {
1675                 var iterable = arguments[0], keys, values, self;
1676                 if (!(this instanceof MapPoly)) { throw new TypeError('Constructor requires \'new\''); }
1677                 if (isNativeImplemented$1 && setPrototypeOf && (Map !== MapPoly)) {
1678                         self = setPrototypeOf(new Map(), getPrototypeOf$2(this));
1679                 } else {
1680                         self = this;
1681                 }
1682                 if (iterable != null) { iterator$3(iterable); }
1683                 defineProperties$3(self, {
1684                         __mapKeysData__: d_1('c', keys = []),
1685                         __mapValuesData__: d_1('c', values = [])
1686                 });
1687                 if (!iterable) { return self; }
1688                 forOf(iterable, function (value) {
1689                         var key = validValue(value)[0];
1690                         value = value[1];
1691                         if (eIndexOf.call(keys, key) !== -1) { return; }
1692                         keys.push(key);
1693                         values.push(value);
1694                 }, self);
1695                 return self;
1696         };
1697
1698         if (isNativeImplemented$1) {
1699                 if (setPrototypeOf) { setPrototypeOf(MapPoly, Map); }
1700                 MapPoly.prototype = Object.create(Map.prototype, {
1701                         constructor: d_1(MapPoly)
1702                 });
1703         }
1704
1705         eventEmitter(defineProperties$3(MapPoly.prototype, {
1706                 clear: d_1(function () {
1707                         if (!this.__mapKeysData__.length) { return; }
1708                         clear.call(this.__mapKeysData__);
1709                         clear.call(this.__mapValuesData__);
1710                         this.emit('_clear');
1711                 }),
1712                 delete: d_1(function (key) {
1713                         var index = eIndexOf.call(this.__mapKeysData__, key);
1714                         if (index === -1) { return false; }
1715                         this.__mapKeysData__.splice(index, 1);
1716                         this.__mapValuesData__.splice(index, 1);
1717                         this.emit('_delete', index, key);
1718                         return true;
1719                 }),
1720                 entries: d_1(function () { return new iterator$2(this, 'key+value'); }),
1721                 forEach: d_1(function (cb/*, thisArg*/) {
1722                         var thisArg = arguments[1], iterator, result;
1723                         validCallable(cb);
1724                         iterator = this.entries();
1725                         result = iterator._next();
1726                         while (result !== undefined) {
1727                                 call$5.call(cb, thisArg, this.__mapValuesData__[result],
1728                                         this.__mapKeysData__[result], this);
1729                                 result = iterator._next();
1730                         }
1731                 }),
1732                 get: d_1(function (key) {
1733                         var index = eIndexOf.call(this.__mapKeysData__, key);
1734                         if (index === -1) { return; }
1735                         return this.__mapValuesData__[index];
1736                 }),
1737                 has: d_1(function (key) {
1738                         return (eIndexOf.call(this.__mapKeysData__, key) !== -1);
1739                 }),
1740                 keys: d_1(function () { return new iterator$2(this, 'key'); }),
1741                 set: d_1(function (key, value) {
1742                         var index = eIndexOf.call(this.__mapKeysData__, key), emit;
1743                         if (index === -1) {
1744                                 index = this.__mapKeysData__.push(key) - 1;
1745                                 emit = true;
1746                         }
1747                         this.__mapValuesData__[index] = value;
1748                         if (emit) { this.emit('_add', index, key); }
1749                         return this;
1750                 }),
1751                 size: d_1.gs(function () { return this.__mapKeysData__.length; }),
1752                 values: d_1(function () { return new iterator$2(this, 'value'); }),
1753                 toString: d_1(function () { return '[object Map]'; })
1754         }));
1755         Object.defineProperty(MapPoly.prototype, es6Symbol$1.iterator, d_1(function () {
1756                 return this.entries();
1757         }));
1758         Object.defineProperty(MapPoly.prototype, es6Symbol$1.toStringTag, d_1('c', 'Map'));
1759
1760         var es6Map = isImplemented$b() ? Map : polyfill$3;
1761
1762         var toStr = Object.prototype.toString;
1763
1764         var isArguments$1 = function isArguments(value) {
1765                 var str = toStr.call(value);
1766                 var isArgs = str === '[object Arguments]';
1767                 if (!isArgs) {
1768                         isArgs = str !== '[object Array]' &&
1769                                 value !== null &&
1770                                 typeof value === 'object' &&
1771                                 typeof value.length === 'number' &&
1772                                 value.length >= 0 &&
1773                                 toStr.call(value.callee) === '[object Function]';
1774                 }
1775                 return isArgs;
1776         };
1777
1778         var keysShim;
1779         if (!Object.keys) {
1780                 // modified from https://github.com/es-shims/es5-shim
1781                 var has = Object.prototype.hasOwnProperty;
1782                 var toStr$1 = Object.prototype.toString;
1783                 var isArgs = isArguments$1; // eslint-disable-line global-require
1784                 var isEnumerable = Object.prototype.propertyIsEnumerable;
1785                 var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');
1786                 var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');
1787                 var dontEnums = [
1788                         'toString',
1789                         'toLocaleString',
1790                         'valueOf',
1791                         'hasOwnProperty',
1792                         'isPrototypeOf',
1793                         'propertyIsEnumerable',
1794                         'constructor'
1795                 ];
1796                 var equalsConstructorPrototype = function (o) {
1797                         var ctor = o.constructor;
1798                         return ctor && ctor.prototype === o;
1799                 };
1800                 var excludedKeys = {
1801                         $applicationCache: true,
1802                         $console: true,
1803                         $external: true,
1804                         $frame: true,
1805                         $frameElement: true,
1806                         $frames: true,
1807                         $innerHeight: true,
1808                         $innerWidth: true,
1809                         $onmozfullscreenchange: true,
1810                         $onmozfullscreenerror: true,
1811                         $outerHeight: true,
1812                         $outerWidth: true,
1813                         $pageXOffset: true,
1814                         $pageYOffset: true,
1815                         $parent: true,
1816                         $scrollLeft: true,
1817                         $scrollTop: true,
1818                         $scrollX: true,
1819                         $scrollY: true,
1820                         $self: true,
1821                         $webkitIndexedDB: true,
1822                         $webkitStorageInfo: true,
1823                         $window: true
1824                 };
1825                 var hasAutomationEqualityBug = (function () {
1826                         /* global window */
1827                         if (typeof window === 'undefined') { return false; }
1828                         for (var k in window) {
1829                                 try {
1830                                         if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {
1831                                                 try {
1832                                                         equalsConstructorPrototype(window[k]);
1833                                                 } catch (e) {
1834                                                         return true;
1835                                                 }
1836                                         }
1837                                 } catch (e) {
1838                                         return true;
1839                                 }
1840                         }
1841                         return false;
1842                 }());
1843                 var equalsConstructorPrototypeIfNotBuggy = function (o) {
1844                         /* global window */
1845                         if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
1846                                 return equalsConstructorPrototype(o);
1847                         }
1848                         try {
1849                                 return equalsConstructorPrototype(o);
1850                         } catch (e) {
1851                                 return false;
1852                         }
1853                 };
1854
1855                 keysShim = function keys(object) {
1856                         var isObject = object !== null && typeof object === 'object';
1857                         var isFunction = toStr$1.call(object) === '[object Function]';
1858                         var isArguments = isArgs(object);
1859                         var isString = isObject && toStr$1.call(object) === '[object String]';
1860                         var theKeys = [];
1861
1862                         if (!isObject && !isFunction && !isArguments) {
1863                                 throw new TypeError('Object.keys called on a non-object');
1864                         }
1865
1866                         var skipProto = hasProtoEnumBug && isFunction;
1867                         if (isString && object.length > 0 && !has.call(object, 0)) {
1868                                 for (var i = 0; i < object.length; ++i) {
1869                                         theKeys.push(String(i));
1870                                 }
1871                         }
1872
1873                         if (isArguments && object.length > 0) {
1874                                 for (var j = 0; j < object.length; ++j) {
1875                                         theKeys.push(String(j));
1876                                 }
1877                         } else {
1878                                 for (var name in object) {
1879                                         if (!(skipProto && name === 'prototype') && has.call(object, name)) {
1880                                                 theKeys.push(String(name));
1881                                         }
1882                                 }
1883                         }
1884
1885                         if (hasDontEnumBug) {
1886                                 var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
1887
1888                                 for (var k = 0; k < dontEnums.length; ++k) {
1889                                         if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {
1890                                                 theKeys.push(dontEnums[k]);
1891                                         }
1892                                 }
1893                         }
1894                         return theKeys;
1895                 };
1896         }
1897         var implementation$1 = keysShim;
1898
1899         var slice = Array.prototype.slice;
1900
1901
1902         var origKeys = Object.keys;
1903         var keysShim$1 = origKeys ? function keys(o) { return origKeys(o); } : implementation$1;
1904
1905         var originalKeys = Object.keys;
1906
1907         keysShim$1.shim = function shimObjectKeys() {
1908                 if (Object.keys) {
1909                         var keysWorksWithArguments = (function () {
1910                                 // Safari 5.0 bug
1911                                 var args = Object.keys(arguments);
1912                                 return args && args.length === arguments.length;
1913                         }(1, 2));
1914                         if (!keysWorksWithArguments) {
1915                                 Object.keys = function keys(object) { // eslint-disable-line func-name-matching
1916                                         if (isArguments$1(object)) {
1917                                                 return originalKeys(slice.call(object));
1918                                         }
1919                                         return originalKeys(object);
1920                                 };
1921                         }
1922                 } else {
1923                         Object.keys = keysShim$1;
1924                 }
1925                 return Object.keys || keysShim$1;
1926         };
1927
1928         var objectKeys = keysShim$1;
1929
1930         var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';
1931
1932         var toStr$2 = Object.prototype.toString;
1933         var concat = Array.prototype.concat;
1934         var origDefineProperty = Object.defineProperty;
1935
1936         var isFunction$1 = function (fn) {
1937                 return typeof fn === 'function' && toStr$2.call(fn) === '[object Function]';
1938         };
1939
1940         var arePropertyDescriptorsSupported = function () {
1941                 var obj = {};
1942                 try {
1943                         origDefineProperty(obj, 'x', { enumerable: false, value: obj });
1944                         // eslint-disable-next-line no-unused-vars, no-restricted-syntax
1945                         for (var _ in obj) { // jscs:ignore disallowUnusedVariables
1946                                 return false;
1947                         }
1948                         return obj.x === obj;
1949                 } catch (e) { /* this is IE 8. */
1950                         return false;
1951                 }
1952         };
1953         var supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();
1954
1955         var defineProperty$8 = function (object, name, value, predicate) {
1956                 if (name in object && (!isFunction$1(predicate) || !predicate())) {
1957                         return;
1958                 }
1959                 if (supportsDescriptors) {
1960                         origDefineProperty(object, name, {
1961                                 configurable: true,
1962                                 enumerable: false,
1963                                 value: value,
1964                                 writable: true
1965                         });
1966                 } else {
1967                         object[name] = value;
1968                 }
1969         };
1970
1971         var defineProperties$4 = function (object, map) {
1972                 var predicates = arguments.length > 2 ? arguments[2] : {};
1973                 var props = objectKeys(map);
1974                 if (hasSymbols) {
1975                         props = concat.call(props, Object.getOwnPropertySymbols(map));
1976                 }
1977                 for (var i = 0; i < props.length; i += 1) {
1978                         defineProperty$8(object, props[i], map[props[i]], predicates[props[i]]);
1979                 }
1980         };
1981
1982         defineProperties$4.supportsDescriptors = !!supportsDescriptors;
1983
1984         var defineProperties_1 = defineProperties$4;
1985
1986         /* eslint no-invalid-this: 1 */
1987
1988         var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
1989         var slice$1 = Array.prototype.slice;
1990         var toStr$3 = Object.prototype.toString;
1991         var funcType = '[object Function]';
1992
1993         var implementation$2 = function bind(that) {
1994             var target = this;
1995             if (typeof target !== 'function' || toStr$3.call(target) !== funcType) {
1996                 throw new TypeError(ERROR_MESSAGE + target);
1997             }
1998             var args = slice$1.call(arguments, 1);
1999
2000             var bound;
2001             var binder = function () {
2002                 if (this instanceof bound) {
2003                     var result = target.apply(
2004                         this,
2005                         args.concat(slice$1.call(arguments))
2006                     );
2007                     if (Object(result) === result) {
2008                         return result;
2009                     }
2010                     return this;
2011                 } else {
2012                     return target.apply(
2013                         that,
2014                         args.concat(slice$1.call(arguments))
2015                     );
2016                 }
2017             };
2018
2019             var boundLength = Math.max(0, target.length - args.length);
2020             var boundArgs = [];
2021             for (var i = 0; i < boundLength; i++) {
2022                 boundArgs.push('$' + i);
2023             }
2024
2025             bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);
2026
2027             if (target.prototype) {
2028                 var Empty = function Empty() {};
2029                 Empty.prototype = target.prototype;
2030                 bound.prototype = new Empty();
2031                 Empty.prototype = null;
2032             }
2033
2034             return bound;
2035         };
2036
2037         var functionBind = Function.prototype.bind || implementation$2;
2038
2039         var src = functionBind.call(Function.call, Object.prototype.hasOwnProperty);
2040
2041         var isPrimitive = function isPrimitive(value) {
2042                 return value === null || (typeof value !== 'function' && typeof value !== 'object');
2043         };
2044
2045         var fnToStr = Function.prototype.toString;
2046
2047         var constructorRegex = /^\s*class\b/;
2048         var isES6ClassFn = function isES6ClassFunction(value) {
2049                 try {
2050                         var fnStr = fnToStr.call(value);
2051                         return constructorRegex.test(fnStr);
2052                 } catch (e) {
2053                         return false; // not a function
2054                 }
2055         };
2056
2057         var tryFunctionObject = function tryFunctionToStr(value) {
2058                 try {
2059                         if (isES6ClassFn(value)) { return false; }
2060                         fnToStr.call(value);
2061                         return true;
2062                 } catch (e) {
2063                         return false;
2064                 }
2065         };
2066         var toStr$4 = Object.prototype.toString;
2067         var fnClass = '[object Function]';
2068         var genClass = '[object GeneratorFunction]';
2069         var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
2070
2071         var isCallable = function isCallable(value) {
2072                 if (!value) { return false; }
2073                 if (typeof value !== 'function' && typeof value !== 'object') { return false; }
2074                 if (typeof value === 'function' && !value.prototype) { return true; }
2075                 if (hasToStringTag) { return tryFunctionObject(value); }
2076                 if (isES6ClassFn(value)) { return false; }
2077                 var strClass = toStr$4.call(value);
2078                 return strClass === fnClass || strClass === genClass;
2079         };
2080
2081         var getDay = Date.prototype.getDay;
2082         var tryDateObject = function tryDateObject(value) {
2083                 try {
2084                         getDay.call(value);
2085                         return true;
2086                 } catch (e) {
2087                         return false;
2088                 }
2089         };
2090
2091         var toStr$5 = Object.prototype.toString;
2092         var dateClass = '[object Date]';
2093         var hasToStringTag$1 = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
2094
2095         var isDateObject = function isDateObject(value) {
2096                 if (typeof value !== 'object' || value === null) { return false; }
2097                 return hasToStringTag$1 ? tryDateObject(value) : toStr$5.call(value) === dateClass;
2098         };
2099
2100         /* eslint complexity: [2, 17], max-statements: [2, 33] */
2101         var shams = function hasSymbols() {
2102                 if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }
2103                 if (typeof Symbol.iterator === 'symbol') { return true; }
2104
2105                 var obj = {};
2106                 var sym = Symbol('test');
2107                 var symObj = Object(sym);
2108                 if (typeof sym === 'string') { return false; }
2109
2110                 if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }
2111                 if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }
2112
2113                 // temp disabled per https://github.com/ljharb/object.assign/issues/17
2114                 // if (sym instanceof Symbol) { return false; }
2115                 // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
2116                 // if (!(symObj instanceof Symbol)) { return false; }
2117
2118                 // if (typeof Symbol.prototype.toString !== 'function') { return false; }
2119                 // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
2120
2121                 var symVal = 42;
2122                 obj[sym] = symVal;
2123                 for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax
2124                 if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }
2125
2126                 if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }
2127
2128                 var syms = Object.getOwnPropertySymbols(obj);
2129                 if (syms.length !== 1 || syms[0] !== sym) { return false; }
2130
2131                 if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }
2132
2133                 if (typeof Object.getOwnPropertyDescriptor === 'function') {
2134                         var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
2135                         if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }
2136                 }
2137
2138                 return true;
2139         };
2140
2141         var origSymbol = commonjsGlobal.Symbol;
2142
2143
2144         var hasSymbols$1 = function hasNativeSymbols() {
2145                 if (typeof origSymbol !== 'function') { return false; }
2146                 if (typeof Symbol !== 'function') { return false; }
2147                 if (typeof origSymbol('foo') !== 'symbol') { return false; }
2148                 if (typeof Symbol('bar') !== 'symbol') { return false; }
2149
2150                 return shams();
2151         };
2152
2153         var isSymbol$2 = createCommonjsModule(function (module) {
2154
2155         var toStr = Object.prototype.toString;
2156         var hasSymbols = hasSymbols$1();
2157
2158         if (hasSymbols) {
2159                 var symToStr = Symbol.prototype.toString;
2160                 var symStringRegex = /^Symbol\(.*\)$/;
2161                 var isSymbolObject = function isRealSymbolObject(value) {
2162                         if (typeof value.valueOf() !== 'symbol') {
2163                                 return false;
2164                         }
2165                         return symStringRegex.test(symToStr.call(value));
2166                 };
2167
2168                 module.exports = function isSymbol(value) {
2169                         if (typeof value === 'symbol') {
2170                                 return true;
2171                         }
2172                         if (toStr.call(value) !== '[object Symbol]') {
2173                                 return false;
2174                         }
2175                         try {
2176                                 return isSymbolObject(value);
2177                         } catch (e) {
2178                                 return false;
2179                         }
2180                 };
2181         } else {
2182
2183                 module.exports = function isSymbol(value) {
2184                         // this environment does not support Symbols.
2185                         return false ;
2186                 };
2187         }
2188         });
2189
2190         var hasSymbols$2 = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';
2191
2192
2193
2194
2195
2196
2197         var ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {
2198                 if (typeof O === 'undefined' || O === null) {
2199                         throw new TypeError('Cannot call method on ' + O);
2200                 }
2201                 if (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {
2202                         throw new TypeError('hint must be "string" or "number"');
2203                 }
2204                 var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
2205                 var method, result, i;
2206                 for (i = 0; i < methodNames.length; ++i) {
2207                         method = O[methodNames[i]];
2208                         if (isCallable(method)) {
2209                                 result = method.call(O);
2210                                 if (isPrimitive(result)) {
2211                                         return result;
2212                                 }
2213                         }
2214                 }
2215                 throw new TypeError('No default value');
2216         };
2217
2218         var GetMethod = function GetMethod(O, P) {
2219                 var func = O[P];
2220                 if (func !== null && typeof func !== 'undefined') {
2221                         if (!isCallable(func)) {
2222                                 throw new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');
2223                         }
2224                         return func;
2225                 }
2226                 return void 0;
2227         };
2228
2229         // http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive
2230         var es2015 = function ToPrimitive(input) {
2231                 if (isPrimitive(input)) {
2232                         return input;
2233                 }
2234                 var hint = 'default';
2235                 if (arguments.length > 1) {
2236                         if (arguments[1] === String) {
2237                                 hint = 'string';
2238                         } else if (arguments[1] === Number) {
2239                                 hint = 'number';
2240                         }
2241                 }
2242
2243                 var exoticToPrim;
2244                 if (hasSymbols$2) {
2245                         if (Symbol.toPrimitive) {
2246                                 exoticToPrim = GetMethod(input, Symbol.toPrimitive);
2247                         } else if (isSymbol$2(input)) {
2248                                 exoticToPrim = Symbol.prototype.valueOf;
2249                         }
2250                 }
2251                 if (typeof exoticToPrim !== 'undefined') {
2252                         var result = exoticToPrim.call(input, hint);
2253                         if (isPrimitive(result)) {
2254                                 return result;
2255                         }
2256                         throw new TypeError('unable to convert exotic object to primitive');
2257                 }
2258                 if (hint === 'default' && (isDateObject(input) || isSymbol$2(input))) {
2259                         hint = 'string';
2260                 }
2261                 return ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);
2262         };
2263
2264         var es6 = es2015;
2265
2266         var objectInspect = function inspect_ (obj, opts, depth, seen) {
2267             if (!opts) { opts = {}; }
2268             
2269             var maxDepth = opts.depth === undefined ? 5 : opts.depth;
2270             if (depth === undefined) { depth = 0; }
2271             if (depth > maxDepth && maxDepth > 0) { return '...'; }
2272             
2273             if (seen === undefined) { seen = []; }
2274             else if (indexOf$2(seen, obj) >= 0) {
2275                 return '[Circular]';
2276             }
2277             
2278             function inspect (value, from) {
2279                 if (from) {
2280                     seen = seen.slice();
2281                     seen.push(from);
2282                 }
2283                 return inspect_(value, opts, depth + 1, seen);
2284             }
2285             
2286             if (typeof obj === 'string') {
2287                 return inspectString(obj);
2288             }
2289             else if (typeof obj === 'function') {
2290                 var name = nameOf(obj);
2291                 return '[Function' + (name ? ': ' + name : '') + ']';
2292             }
2293             else if (obj === null) {
2294                 return 'null';
2295             }
2296             else if (isElement(obj)) {
2297                 var s = '<' + String(obj.nodeName).toLowerCase();
2298                 var attrs = obj.attributes || [];
2299                 for (var i = 0; i < attrs.length; i++) {
2300                     s += ' ' + attrs[i].name + '="' + quote(attrs[i].value) + '"';
2301                 }
2302                 s += '>';
2303                 if (obj.childNodes && obj.childNodes.length) { s += '...'; }
2304                 s += '</' + String(obj.tagName).toLowerCase() + '>';
2305                 return s;
2306             }
2307             else if (isArray$3(obj)) {
2308                 if (obj.length === 0) { return '[]'; }
2309                 var xs = Array(obj.length);
2310                 for (var i = 0; i < obj.length; i++) {
2311                     xs[i] = has$1(obj, i) ? inspect(obj[i], obj) : '';
2312                 }
2313                 return '[ ' + xs.join(', ') + ' ]';
2314             }
2315             else if (typeof obj === 'object' && typeof obj.inspect === 'function') {
2316                 return obj.inspect();
2317             }
2318             else if (typeof obj === 'object' && !isDate(obj) && !isRegExp(obj)) {
2319                 var xs = [], keys = [];
2320                 for (var key in obj) {
2321                     if (has$1(obj, key)) { keys.push(key); }
2322                 }
2323                 keys.sort();
2324                 for (var i = 0; i < keys.length; i++) {
2325                     var key = keys[i];
2326                     if (/[^\w$]/.test(key)) {
2327                         xs.push(inspect(key) + ': ' + inspect(obj[key], obj));
2328                     }
2329                     else { xs.push(key + ': ' + inspect(obj[key], obj)); }
2330                 }
2331                 if (xs.length === 0) { return '{}'; }
2332                 return '{ ' + xs.join(', ') + ' }';
2333             }
2334             else { return String(obj); }
2335         };
2336
2337         function quote (s) {
2338             return String(s).replace(/"/g, '&quot;');
2339         }
2340
2341         function isArray$3 (obj) {
2342             return {}.toString.call(obj) === '[object Array]';
2343         }
2344
2345         function isDate (obj) {
2346             return {}.toString.call(obj) === '[object Date]';
2347         }
2348
2349         function isRegExp (obj) {
2350             return {}.toString.call(obj) === '[object RegExp]';
2351         }
2352
2353         function has$1 (obj, key) {
2354             if (!{}.hasOwnProperty) { return key in obj; }
2355             return {}.hasOwnProperty.call(obj, key);
2356         }
2357
2358         function nameOf (f) {
2359             if (f.name) { return f.name; }
2360             var m = f.toString().match(/^function\s*([\w$]+)/);
2361             if (m) { return m[1]; }
2362         }
2363
2364         function indexOf$2 (xs, x) {
2365             if (xs.indexOf) { return xs.indexOf(x); }
2366             for (var i = 0, l = xs.length; i < l; i++) {
2367                 if (xs[i] === x) { return i; }
2368             }
2369             return -1;
2370         }
2371
2372         function isElement (x) {
2373             if (!x || typeof x !== 'object') { return false; }
2374             if (typeof HTMLElement !== 'undefined') {
2375                 return x instanceof HTMLElement;
2376             }
2377             else { return typeof x.nodeName === 'string'
2378                 && typeof x.getAttribute === 'function'
2379             ; }
2380         }
2381
2382         function inspectString (str) {
2383             var s = str.replace(/(['\\])/g, '\\$1').replace(/[\x00-\x1f]/g, lowbyte);
2384             return "'" + s + "'";
2385             
2386             function lowbyte (c) {
2387                 var n = c.charCodeAt(0);
2388                 var x = { 8: 'b', 9: 't', 10: 'n', 12: 'f', 13: 'r' }[n];
2389                 if (x) { return '\\' + x; }
2390                 return '\\x' + (n < 0x10 ? '0' : '') + n.toString(16);
2391             }
2392         }
2393
2394         /* globals
2395                 Atomics,
2396                 SharedArrayBuffer,
2397         */
2398
2399         var undefined$1; // eslint-disable-line no-shadow-restricted-names
2400
2401         var $TypeError = TypeError;
2402
2403         var ThrowTypeError = Object.getOwnPropertyDescriptor
2404                 ? (function () { return Object.getOwnPropertyDescriptor(arguments, 'callee').get; }())
2405                 : function () { throw new $TypeError(); };
2406
2407         var hasSymbols$3 = hasSymbols$1();
2408
2409         var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto
2410         var generatorFunction =  undefined$1;
2411         var asyncFunction =  undefined$1;
2412         var asyncGenFunction =  undefined$1;
2413
2414         var TypedArray = typeof Uint8Array === 'undefined' ? undefined$1 : getProto(Uint8Array);
2415
2416         var INTRINSICS = {
2417                 '$ %Array%': Array,
2418                 '$ %ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined$1 : ArrayBuffer,
2419                 '$ %ArrayBufferPrototype%': typeof ArrayBuffer === 'undefined' ? undefined$1 : ArrayBuffer.prototype,
2420                 '$ %ArrayIteratorPrototype%': hasSymbols$3 ? getProto([][Symbol.iterator]()) : undefined$1,
2421                 '$ %ArrayPrototype%': Array.prototype,
2422                 '$ %ArrayProto_entries%': Array.prototype.entries,
2423                 '$ %ArrayProto_forEach%': Array.prototype.forEach,
2424                 '$ %ArrayProto_keys%': Array.prototype.keys,
2425                 '$ %ArrayProto_values%': Array.prototype.values,
2426                 '$ %AsyncFromSyncIteratorPrototype%': undefined$1,
2427                 '$ %AsyncFunction%': asyncFunction,
2428                 '$ %AsyncFunctionPrototype%':  undefined$1,
2429                 '$ %AsyncGenerator%':  undefined$1,
2430                 '$ %AsyncGeneratorFunction%': asyncGenFunction,
2431                 '$ %AsyncGeneratorPrototype%':  undefined$1,
2432                 '$ %AsyncIteratorPrototype%':  undefined$1,
2433                 '$ %Atomics%': typeof Atomics === 'undefined' ? undefined$1 : Atomics,
2434                 '$ %Boolean%': Boolean,
2435                 '$ %BooleanPrototype%': Boolean.prototype,
2436                 '$ %DataView%': typeof DataView === 'undefined' ? undefined$1 : DataView,
2437                 '$ %DataViewPrototype%': typeof DataView === 'undefined' ? undefined$1 : DataView.prototype,
2438                 '$ %Date%': Date,
2439                 '$ %DatePrototype%': Date.prototype,
2440                 '$ %decodeURI%': decodeURI,
2441                 '$ %decodeURIComponent%': decodeURIComponent,
2442                 '$ %encodeURI%': encodeURI,
2443                 '$ %encodeURIComponent%': encodeURIComponent,
2444                 '$ %Error%': Error,
2445                 '$ %ErrorPrototype%': Error.prototype,
2446                 '$ %eval%': eval, // eslint-disable-line no-eval
2447                 '$ %EvalError%': EvalError,
2448                 '$ %EvalErrorPrototype%': EvalError.prototype,
2449                 '$ %Float32Array%': typeof Float32Array === 'undefined' ? undefined$1 : Float32Array,
2450                 '$ %Float32ArrayPrototype%': typeof Float32Array === 'undefined' ? undefined$1 : Float32Array.prototype,
2451                 '$ %Float64Array%': typeof Float64Array === 'undefined' ? undefined$1 : Float64Array,
2452                 '$ %Float64ArrayPrototype%': typeof Float64Array === 'undefined' ? undefined$1 : Float64Array.prototype,
2453                 '$ %Function%': Function,
2454                 '$ %FunctionPrototype%': Function.prototype,
2455                 '$ %Generator%':  undefined$1,
2456                 '$ %GeneratorFunction%': generatorFunction,
2457                 '$ %GeneratorPrototype%':  undefined$1,
2458                 '$ %Int8Array%': typeof Int8Array === 'undefined' ? undefined$1 : Int8Array,
2459                 '$ %Int8ArrayPrototype%': typeof Int8Array === 'undefined' ? undefined$1 : Int8Array.prototype,
2460                 '$ %Int16Array%': typeof Int16Array === 'undefined' ? undefined$1 : Int16Array,
2461                 '$ %Int16ArrayPrototype%': typeof Int16Array === 'undefined' ? undefined$1 : Int8Array.prototype,
2462                 '$ %Int32Array%': typeof Int32Array === 'undefined' ? undefined$1 : Int32Array,
2463                 '$ %Int32ArrayPrototype%': typeof Int32Array === 'undefined' ? undefined$1 : Int32Array.prototype,
2464                 '$ %isFinite%': isFinite,
2465                 '$ %isNaN%': isNaN,
2466                 '$ %IteratorPrototype%': hasSymbols$3 ? getProto(getProto([][Symbol.iterator]())) : undefined$1,
2467                 '$ %JSON%': JSON,
2468                 '$ %JSONParse%': JSON.parse,
2469                 '$ %Map%': typeof Map === 'undefined' ? undefined$1 : Map,
2470                 '$ %MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols$3 ? undefined$1 : getProto(new Map()[Symbol.iterator]()),
2471                 '$ %MapPrototype%': typeof Map === 'undefined' ? undefined$1 : Map.prototype,
2472                 '$ %Math%': Math,
2473                 '$ %Number%': Number,
2474                 '$ %NumberPrototype%': Number.prototype,
2475                 '$ %Object%': Object,
2476                 '$ %ObjectPrototype%': Object.prototype,
2477                 '$ %ObjProto_toString%': Object.prototype.toString,
2478                 '$ %ObjProto_valueOf%': Object.prototype.valueOf,
2479                 '$ %parseFloat%': parseFloat,
2480                 '$ %parseInt%': parseInt,
2481                 '$ %Promise%': typeof Promise === 'undefined' ? undefined$1 : Promise,
2482                 '$ %PromisePrototype%': typeof Promise === 'undefined' ? undefined$1 : Promise.prototype,
2483                 '$ %PromiseProto_then%': typeof Promise === 'undefined' ? undefined$1 : Promise.prototype.then,
2484                 '$ %Promise_all%': typeof Promise === 'undefined' ? undefined$1 : Promise.all,
2485                 '$ %Promise_reject%': typeof Promise === 'undefined' ? undefined$1 : Promise.reject,
2486                 '$ %Promise_resolve%': typeof Promise === 'undefined' ? undefined$1 : Promise.resolve,
2487                 '$ %Proxy%': typeof Proxy === 'undefined' ? undefined$1 : Proxy,
2488                 '$ %RangeError%': RangeError,
2489                 '$ %RangeErrorPrototype%': RangeError.prototype,
2490                 '$ %ReferenceError%': ReferenceError,
2491                 '$ %ReferenceErrorPrototype%': ReferenceError.prototype,
2492                 '$ %Reflect%': typeof Reflect === 'undefined' ? undefined$1 : Reflect,
2493                 '$ %RegExp%': RegExp,
2494                 '$ %RegExpPrototype%': RegExp.prototype,
2495                 '$ %Set%': typeof Set === 'undefined' ? undefined$1 : Set,
2496                 '$ %SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols$3 ? undefined$1 : getProto(new Set()[Symbol.iterator]()),
2497                 '$ %SetPrototype%': typeof Set === 'undefined' ? undefined$1 : Set.prototype,
2498                 '$ %SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined$1 : SharedArrayBuffer,
2499                 '$ %SharedArrayBufferPrototype%': typeof SharedArrayBuffer === 'undefined' ? undefined$1 : SharedArrayBuffer.prototype,
2500                 '$ %String%': String,
2501                 '$ %StringIteratorPrototype%': hasSymbols$3 ? getProto(''[Symbol.iterator]()) : undefined$1,
2502                 '$ %StringPrototype%': String.prototype,
2503                 '$ %Symbol%': hasSymbols$3 ? Symbol : undefined$1,
2504                 '$ %SymbolPrototype%': hasSymbols$3 ? Symbol.prototype : undefined$1,
2505                 '$ %SyntaxError%': SyntaxError,
2506                 '$ %SyntaxErrorPrototype%': SyntaxError.prototype,
2507                 '$ %ThrowTypeError%': ThrowTypeError,
2508                 '$ %TypedArray%': TypedArray,
2509                 '$ %TypedArrayPrototype%': TypedArray ? TypedArray.prototype : undefined$1,
2510                 '$ %TypeError%': $TypeError,
2511                 '$ %TypeErrorPrototype%': $TypeError.prototype,
2512                 '$ %Uint8Array%': typeof Uint8Array === 'undefined' ? undefined$1 : Uint8Array,
2513                 '$ %Uint8ArrayPrototype%': typeof Uint8Array === 'undefined' ? undefined$1 : Uint8Array.prototype,
2514                 '$ %Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined$1 : Uint8ClampedArray,
2515                 '$ %Uint8ClampedArrayPrototype%': typeof Uint8ClampedArray === 'undefined' ? undefined$1 : Uint8ClampedArray.prototype,
2516                 '$ %Uint16Array%': typeof Uint16Array === 'undefined' ? undefined$1 : Uint16Array,
2517                 '$ %Uint16ArrayPrototype%': typeof Uint16Array === 'undefined' ? undefined$1 : Uint16Array.prototype,
2518                 '$ %Uint32Array%': typeof Uint32Array === 'undefined' ? undefined$1 : Uint32Array,
2519                 '$ %Uint32ArrayPrototype%': typeof Uint32Array === 'undefined' ? undefined$1 : Uint32Array.prototype,
2520                 '$ %URIError%': URIError,
2521                 '$ %URIErrorPrototype%': URIError.prototype,
2522                 '$ %WeakMap%': typeof WeakMap === 'undefined' ? undefined$1 : WeakMap,
2523                 '$ %WeakMapPrototype%': typeof WeakMap === 'undefined' ? undefined$1 : WeakMap.prototype,
2524                 '$ %WeakSet%': typeof WeakSet === 'undefined' ? undefined$1 : WeakSet,
2525                 '$ %WeakSetPrototype%': typeof WeakSet === 'undefined' ? undefined$1 : WeakSet.prototype
2526         };
2527
2528
2529         var $replace = functionBind.call(Function.call, String.prototype.replace);
2530
2531         /* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
2532         var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
2533         var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */
2534         var stringToPath = function stringToPath(string) {
2535                 var result = [];
2536                 $replace(string, rePropName, function (match, number, quote, subString) {
2537                         result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : (number || match);
2538                 });
2539                 return result;
2540         };
2541         /* end adaptation */
2542
2543         var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {
2544                 var key = '$ ' + name;
2545                 if (!(key in INTRINSICS)) {
2546                         throw new SyntaxError('intrinsic ' + name + ' does not exist!');
2547                 }
2548
2549                 // istanbul ignore if // hopefully this is impossible to test :-)
2550                 if (typeof INTRINSICS[key] === 'undefined' && !allowMissing) {
2551                         throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
2552                 }
2553
2554                 return INTRINSICS[key];
2555         };
2556
2557         var GetIntrinsic = function GetIntrinsic(name, allowMissing) {
2558                 if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
2559                         throw new TypeError('"allowMissing" argument must be a boolean');
2560                 }
2561
2562                 var parts = stringToPath(name);
2563
2564                 if (parts.length === 0) {
2565                         return getBaseIntrinsic(name, allowMissing);
2566                 }
2567
2568                 var value = getBaseIntrinsic('%' + parts[0] + '%', allowMissing);
2569                 for (var i = 1; i < parts.length; i += 1) {
2570                         if (value != null) {
2571                                 value = value[parts[i]];
2572                         }
2573                 }
2574                 return value;
2575         };
2576
2577         var $TypeError$1 = GetIntrinsic('%TypeError%');
2578         var $SyntaxError = GetIntrinsic('%SyntaxError%');
2579
2580
2581
2582         var predicates = {
2583                 // https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
2584                 'Property Descriptor': function isPropertyDescriptor(ES, Desc) {
2585                         if (ES.Type(Desc) !== 'Object') {
2586                                 return false;
2587                         }
2588                         var allowed = {
2589                                 '[[Configurable]]': true,
2590                                 '[[Enumerable]]': true,
2591                                 '[[Get]]': true,
2592                                 '[[Set]]': true,
2593                                 '[[Value]]': true,
2594                                 '[[Writable]]': true
2595                         };
2596
2597                         for (var key in Desc) { // eslint-disable-line
2598                                 if (src(Desc, key) && !allowed[key]) {
2599                                         return false;
2600                                 }
2601                         }
2602
2603                         var isData = src(Desc, '[[Value]]');
2604                         var IsAccessor = src(Desc, '[[Get]]') || src(Desc, '[[Set]]');
2605                         if (isData && IsAccessor) {
2606                                 throw new $TypeError$1('Property Descriptors may not be both accessor and data descriptors');
2607                         }
2608                         return true;
2609                 }
2610         };
2611
2612         var assertRecord = function assertRecord(ES, recordType, argumentName, value) {
2613                 var predicate = predicates[recordType];
2614                 if (typeof predicate !== 'function') {
2615                         throw new $SyntaxError('unknown record type: ' + recordType);
2616                 }
2617                 if (!predicate(ES, value)) {
2618                         throw new $TypeError$1(argumentName + ' must be a ' + recordType);
2619                 }
2620         };
2621
2622         var _isNaN = Number.isNaN || function isNaN(a) {
2623                 return a !== a;
2624         };
2625
2626         var $isNaN = Number.isNaN || function (a) { return a !== a; };
2627
2628         var _isFinite = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };
2629
2630         var $Math = GetIntrinsic('%Math%');
2631         var $Number = GetIntrinsic('%Number%');
2632
2633         var maxSafeInteger = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;
2634
2635         var $assign = GetIntrinsic('%Object%').assign;
2636
2637         var assign$1 = function assign(target, source) {
2638                 if ($assign) {
2639                         return $assign(target, source);
2640                 }
2641
2642                 // eslint-disable-next-line no-restricted-syntax
2643                 for (var key in source) {
2644                         if (src(source, key)) {
2645                                 target[key] = source[key];
2646                         }
2647                 }
2648                 return target;
2649         };
2650
2651         var sign$1 = function sign(number) {
2652                 return number >= 0 ? 1 : -1;
2653         };
2654
2655         var mod = function mod(number, modulo) {
2656                 var remain = number % modulo;
2657                 return Math.floor(remain >= 0 ? remain : remain + modulo);
2658         };
2659
2660         var isPrimitive$1 = function isPrimitive(value) {
2661                 return value === null || (typeof value !== 'function' && typeof value !== 'object');
2662         };
2663
2664         var forEach$3 = function forEach(array, callback) {
2665                 for (var i = 0; i < array.length; i += 1) {
2666                         callback(array[i], i, array); // eslint-disable-line callback-return
2667                 }
2668         };
2669
2670         var every = function every(array, predicate) {
2671                 for (var i = 0; i < array.length; i += 1) {
2672                         if (!predicate(array[i], i, array)) {
2673                                 return false;
2674                         }
2675                 }
2676                 return true;
2677         };
2678
2679         var isSamePropertyDescriptor = function isSamePropertyDescriptor(ES, D1, D2) {
2680                 var fields = [
2681                         '[[Configurable]]',
2682                         '[[Enumerable]]',
2683                         '[[Get]]',
2684                         '[[Set]]',
2685                         '[[Value]]',
2686                         '[[Writable]]'
2687                 ];
2688                 return every(fields, function (field) {
2689                         if ((field in D1) !== (field in D2)) {
2690                                 return false;
2691                         }
2692                         return ES.SameValue(D1[field], D2[field]);
2693                 });
2694         };
2695
2696         var $TypeError$2 = GetIntrinsic('%TypeError%');
2697
2698         var isPropertyDescriptor = function IsPropertyDescriptor(ES, Desc) {
2699                 if (ES.Type(Desc) !== 'Object') {
2700                         return false;
2701                 }
2702                 var allowed = {
2703                         '[[Configurable]]': true,
2704                         '[[Enumerable]]': true,
2705                         '[[Get]]': true,
2706                         '[[Set]]': true,
2707                         '[[Value]]': true,
2708                         '[[Writable]]': true
2709                 };
2710
2711             for (var key in Desc) { // eslint-disable-line
2712                         if (src(Desc, key) && !allowed[key]) {
2713                                 return false;
2714                         }
2715                 }
2716
2717                 if (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {
2718                         throw new $TypeError$2('Property Descriptors may not be both accessor and data descriptors');
2719                 }
2720                 return true;
2721         };
2722
2723         var $Function = GetIntrinsic('%Function%');
2724         var $apply = $Function.apply;
2725         var $call = $Function.call;
2726
2727         var callBind = function callBind() {
2728                 return functionBind.apply($call, arguments);
2729         };
2730
2731         var apply = function applyBind() {
2732                 return functionBind.apply($apply, arguments);
2733         };
2734         callBind.apply = apply;
2735
2736         var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));
2737
2738         var callBound = function callBoundIntrinsic(name, allowMissing) {
2739                 var intrinsic = GetIntrinsic(name, !!allowMissing);
2740                 if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.')) {
2741                         return callBind(intrinsic);
2742                 }
2743                 return intrinsic;
2744         };
2745
2746         var $test = GetIntrinsic('RegExp.prototype.test');
2747
2748
2749
2750         var regexTester = function regexTester(regex) {
2751                 return callBind($test, regex);
2752         };
2753
2754         var hasSymbols$4 = hasSymbols$1();
2755
2756
2757
2758         var $iterator = GetIntrinsic('%Symbol.iterator%', true);
2759         var $arraySlice = callBound('Array.prototype.slice');
2760         var $arrayJoin = callBound('Array.prototype.join');
2761
2762         var getIteratorMethod = function getIteratorMethod(ES, iterable) {
2763                 var usingIterator;
2764                 if (hasSymbols$4) {
2765                         usingIterator = ES.GetMethod(iterable, $iterator);
2766                 } else if (ES.IsArray(iterable)) {
2767                         usingIterator = function () {
2768                                 var i = -1;
2769                                 var arr = this; // eslint-disable-line no-invalid-this
2770                                 return {
2771                                         next: function () {
2772                                                 i += 1;
2773                                                 return {
2774                                                         done: i >= arr.length,
2775                                                         value: arr[i]
2776                                                 };
2777                                         }
2778                                 };
2779                         };
2780                 } else if (ES.Type(iterable) === 'String') {
2781                         usingIterator = function () {
2782                                 var i = 0;
2783                                 return {
2784                                         next: function () {
2785                                                 var nextIndex = ES.AdvanceStringIndex(iterable, i, true);
2786                                                 var value = $arrayJoin($arraySlice(iterable, i, nextIndex), '');
2787                                                 i = nextIndex;
2788                                                 return {
2789                                                         done: nextIndex > iterable.length,
2790                                                         value: value
2791                                                 };
2792                                         }
2793                                 };
2794                         };
2795                 }
2796                 return usingIterator;
2797         };
2798
2799         var getInferredName;
2800         try {
2801                 // eslint-disable-next-line no-new-func
2802                 getInferredName = Function('s', 'return { [s]() {} }[s].name;');
2803         } catch (e) {}
2804
2805         var inferred = function () {};
2806         var getInferredName_1 = getInferredName && inferred.name === 'inferred' ? getInferredName : null;
2807
2808         var $SyntaxError$1 = GetIntrinsic('%SyntaxError%');
2809         var symToStr = callBound('Symbol.prototype.toString', true);
2810
2811
2812
2813         var getSymbolDescription = function getSymbolDescription(symbol) {
2814                 if (!symToStr) {
2815                         throw new $SyntaxError$1('Symbols are not supported in this environment');
2816                 }
2817                 var str = symToStr(symbol); // will throw if not a symbol
2818
2819                 if (getInferredName_1) {
2820                         var name = getInferredName_1(symbol);
2821                         if (name === '') { return; }
2822                         // eslint-disable-next-line consistent-return
2823                         return name.slice(1, -1); // name.slice('['.length, -']'.length);
2824                 }
2825
2826                 var desc = str.slice(7, -1); // str.slice('Symbol('.length, -')'.length);
2827                 if (desc) {
2828                         // eslint-disable-next-line consistent-return
2829                         return desc;
2830                 }
2831         };
2832
2833         var originalSetProto = GetIntrinsic('%Object.setPrototypeOf%', true);
2834         var $ArrayProto = GetIntrinsic('%Array.prototype%');
2835
2836         var setProto = originalSetProto || (
2837                 // eslint-disable-next-line no-proto, no-negated-condition
2838                 [].__proto__ !== $ArrayProto
2839                         ? null
2840                         : function (O, proto) {
2841                                 O.__proto__ = proto; // eslint-disable-line no-proto
2842                                 return O;
2843                         }
2844         );
2845
2846         var $strSlice = callBound('String.prototype.slice');
2847
2848         var isPrefixOf = function isPrefixOf(prefix, string) {
2849                 if (prefix === string) {
2850                         return true;
2851                 }
2852                 if (prefix.length > string.length) {
2853                         return false;
2854                 }
2855                 return $strSlice(string, 0, prefix.length) === prefix;
2856         };
2857
2858         var toStr$6 = Object.prototype.toString;
2859
2860
2861
2862
2863
2864         // http://ecma-international.org/ecma-262/5.1/#sec-8.12.8
2865         var ES5internalSlots = {
2866                 '[[DefaultValue]]': function (O) {
2867                         var actualHint;
2868                         if (arguments.length > 1) {
2869                                 actualHint = arguments[1];
2870                         } else {
2871                                 actualHint = toStr$6.call(O) === '[object Date]' ? String : Number;
2872                         }
2873
2874                         if (actualHint === String || actualHint === Number) {
2875                                 var methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
2876                                 var value, i;
2877                                 for (i = 0; i < methods.length; ++i) {
2878                                         if (isCallable(O[methods[i]])) {
2879                                                 value = O[methods[i]]();
2880                                                 if (isPrimitive(value)) {
2881                                                         return value;
2882                                                 }
2883                                         }
2884                                 }
2885                                 throw new TypeError('No default value');
2886                         }
2887                         throw new TypeError('invalid [[DefaultValue]] hint supplied');
2888                 }
2889         };
2890
2891         // http://ecma-international.org/ecma-262/5.1/#sec-9.1
2892         var es5 = function ToPrimitive(input) {
2893                 if (isPrimitive(input)) {
2894                         return input;
2895                 }
2896                 if (arguments.length > 1) {
2897                         return ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);
2898                 }
2899                 return ES5internalSlots['[[DefaultValue]]'](input);
2900         };
2901
2902         var $Object = GetIntrinsic('%Object%');
2903         var $EvalError = GetIntrinsic('%EvalError%');
2904         var $TypeError$3 = GetIntrinsic('%TypeError%');
2905         var $String = GetIntrinsic('%String%');
2906         var $Date = GetIntrinsic('%Date%');
2907         var $Number$1 = GetIntrinsic('%Number%');
2908         var $floor = GetIntrinsic('%Math.floor%');
2909         var $DateUTC = GetIntrinsic('%Date.UTC%');
2910         var $abs = GetIntrinsic('%Math.abs%');
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926         var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear');
2927
2928         var HoursPerDay = 24;
2929         var MinutesPerHour = 60;
2930         var SecondsPerMinute = 60;
2931         var msPerSecond = 1e3;
2932         var msPerMinute = msPerSecond * SecondsPerMinute;
2933         var msPerHour = msPerMinute * MinutesPerHour;
2934         var msPerDay = 86400000;
2935
2936         // https://es5.github.io/#x9
2937         var ES5 = {
2938                 ToPrimitive: es5,
2939
2940                 ToBoolean: function ToBoolean(value) {
2941                         return !!value;
2942                 },
2943                 ToNumber: function ToNumber(value) {
2944                         return +value; // eslint-disable-line no-implicit-coercion
2945                 },
2946                 ToInteger: function ToInteger(value) {
2947                         var number = this.ToNumber(value);
2948                         if (_isNaN(number)) { return 0; }
2949                         if (number === 0 || !_isFinite(number)) { return number; }
2950                         return sign$1(number) * Math.floor(Math.abs(number));
2951                 },
2952                 ToInt32: function ToInt32(x) {
2953                         return this.ToNumber(x) >> 0;
2954                 },
2955                 ToUint32: function ToUint32(x) {
2956                         return this.ToNumber(x) >>> 0;
2957                 },
2958                 ToUint16: function ToUint16(value) {
2959                         var number = this.ToNumber(value);
2960                         if (_isNaN(number) || number === 0 || !_isFinite(number)) { return 0; }
2961                         var posInt = sign$1(number) * Math.floor(Math.abs(number));
2962                         return mod(posInt, 0x10000);
2963                 },
2964                 ToString: function ToString(value) {
2965                         return $String(value);
2966                 },
2967                 ToObject: function ToObject(value) {
2968                         this.CheckObjectCoercible(value);
2969                         return $Object(value);
2970                 },
2971                 CheckObjectCoercible: function CheckObjectCoercible(value, optMessage) {
2972                         /* jshint eqnull:true */
2973                         if (value == null) {
2974                                 throw new $TypeError$3(optMessage || 'Cannot call method on ' + value);
2975                         }
2976                         return value;
2977                 },
2978                 IsCallable: isCallable,
2979                 SameValue: function SameValue(x, y) {
2980                         if (x === y) { // 0 === -0, but they are not identical.
2981                                 if (x === 0) { return 1 / x === 1 / y; }
2982                                 return true;
2983                         }
2984                         return _isNaN(x) && _isNaN(y);
2985                 },
2986
2987                 // https://ecma-international.org/ecma-262/5.1/#sec-8
2988                 Type: function Type(x) {
2989                         if (x === null) {
2990                                 return 'Null';
2991                         }
2992                         if (typeof x === 'undefined') {
2993                                 return 'Undefined';
2994                         }
2995                         if (typeof x === 'function' || typeof x === 'object') {
2996                                 return 'Object';
2997                         }
2998                         if (typeof x === 'number') {
2999                                 return 'Number';
3000                         }
3001                         if (typeof x === 'boolean') {
3002                                 return 'Boolean';
3003                         }
3004                         if (typeof x === 'string') {
3005                                 return 'String';
3006                         }
3007                 },
3008
3009                 // https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
3010                 IsPropertyDescriptor: function IsPropertyDescriptor(Desc) {
3011                         return isPropertyDescriptor(this, Desc);
3012                 },
3013
3014                 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.1
3015                 IsAccessorDescriptor: function IsAccessorDescriptor(Desc) {
3016                         if (typeof Desc === 'undefined') {
3017                                 return false;
3018                         }
3019
3020                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
3021
3022                         if (!src(Desc, '[[Get]]') && !src(Desc, '[[Set]]')) {
3023                                 return false;
3024                         }
3025
3026                         return true;
3027                 },
3028
3029                 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.2
3030                 IsDataDescriptor: function IsDataDescriptor(Desc) {
3031                         if (typeof Desc === 'undefined') {
3032                                 return false;
3033                         }
3034
3035                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
3036
3037                         if (!src(Desc, '[[Value]]') && !src(Desc, '[[Writable]]')) {
3038                                 return false;
3039                         }
3040
3041                         return true;
3042                 },
3043
3044                 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.3
3045                 IsGenericDescriptor: function IsGenericDescriptor(Desc) {
3046                         if (typeof Desc === 'undefined') {
3047                                 return false;
3048                         }
3049
3050                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
3051
3052                         if (!this.IsAccessorDescriptor(Desc) && !this.IsDataDescriptor(Desc)) {
3053                                 return true;
3054                         }
3055
3056                         return false;
3057                 },
3058
3059                 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.4
3060                 FromPropertyDescriptor: function FromPropertyDescriptor(Desc) {
3061                         if (typeof Desc === 'undefined') {
3062                                 return Desc;
3063                         }
3064
3065                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
3066
3067                         if (this.IsDataDescriptor(Desc)) {
3068                                 return {
3069                                         value: Desc['[[Value]]'],
3070                                         writable: !!Desc['[[Writable]]'],
3071                                         enumerable: !!Desc['[[Enumerable]]'],
3072                                         configurable: !!Desc['[[Configurable]]']
3073                                 };
3074                         } else if (this.IsAccessorDescriptor(Desc)) {
3075                                 return {
3076                                         get: Desc['[[Get]]'],
3077                                         set: Desc['[[Set]]'],
3078                                         enumerable: !!Desc['[[Enumerable]]'],
3079                                         configurable: !!Desc['[[Configurable]]']
3080                                 };
3081                         } else {
3082                                 throw new $TypeError$3('FromPropertyDescriptor must be called with a fully populated Property Descriptor');
3083                         }
3084                 },
3085
3086                 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.5
3087                 ToPropertyDescriptor: function ToPropertyDescriptor(Obj) {
3088                         if (this.Type(Obj) !== 'Object') {
3089                                 throw new $TypeError$3('ToPropertyDescriptor requires an object');
3090                         }
3091
3092                         var desc = {};
3093                         if (src(Obj, 'enumerable')) {
3094                                 desc['[[Enumerable]]'] = this.ToBoolean(Obj.enumerable);
3095                         }
3096                         if (src(Obj, 'configurable')) {
3097                                 desc['[[Configurable]]'] = this.ToBoolean(Obj.configurable);
3098                         }
3099                         if (src(Obj, 'value')) {
3100                                 desc['[[Value]]'] = Obj.value;
3101                         }
3102                         if (src(Obj, 'writable')) {
3103                                 desc['[[Writable]]'] = this.ToBoolean(Obj.writable);
3104                         }
3105                         if (src(Obj, 'get')) {
3106                                 var getter = Obj.get;
3107                                 if (typeof getter !== 'undefined' && !this.IsCallable(getter)) {
3108                                         throw new TypeError('getter must be a function');
3109                                 }
3110                                 desc['[[Get]]'] = getter;
3111                         }
3112                         if (src(Obj, 'set')) {
3113                                 var setter = Obj.set;
3114                                 if (typeof setter !== 'undefined' && !this.IsCallable(setter)) {
3115                                         throw new $TypeError$3('setter must be a function');
3116                                 }
3117                                 desc['[[Set]]'] = setter;
3118                         }
3119
3120                         if ((src(desc, '[[Get]]') || src(desc, '[[Set]]')) && (src(desc, '[[Value]]') || src(desc, '[[Writable]]'))) {
3121                                 throw new $TypeError$3('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
3122                         }
3123                         return desc;
3124                 },
3125
3126                 // https://ecma-international.org/ecma-262/5.1/#sec-11.9.3
3127                 'Abstract Equality Comparison': function AbstractEqualityComparison(x, y) {
3128                         var xType = this.Type(x);
3129                         var yType = this.Type(y);
3130                         if (xType === yType) {
3131                                 return x === y; // ES6+ specified this shortcut anyways.
3132                         }
3133                         if (x == null && y == null) {
3134                                 return true;
3135                         }
3136                         if (xType === 'Number' && yType === 'String') {
3137                                 return this['Abstract Equality Comparison'](x, this.ToNumber(y));
3138                         }
3139                         if (xType === 'String' && yType === 'Number') {
3140                                 return this['Abstract Equality Comparison'](this.ToNumber(x), y);
3141                         }
3142                         if (xType === 'Boolean') {
3143                                 return this['Abstract Equality Comparison'](this.ToNumber(x), y);
3144                         }
3145                         if (yType === 'Boolean') {
3146                                 return this['Abstract Equality Comparison'](x, this.ToNumber(y));
3147                         }
3148                         if ((xType === 'String' || xType === 'Number') && yType === 'Object') {
3149                                 return this['Abstract Equality Comparison'](x, this.ToPrimitive(y));
3150                         }
3151                         if (xType === 'Object' && (yType === 'String' || yType === 'Number')) {
3152                                 return this['Abstract Equality Comparison'](this.ToPrimitive(x), y);
3153                         }
3154                         return false;
3155                 },
3156
3157                 // https://ecma-international.org/ecma-262/5.1/#sec-11.9.6
3158                 'Strict Equality Comparison': function StrictEqualityComparison(x, y) {
3159                         var xType = this.Type(x);
3160                         var yType = this.Type(y);
3161                         if (xType !== yType) {
3162                                 return false;
3163                         }
3164                         if (xType === 'Undefined' || xType === 'Null') {
3165                                 return true;
3166                         }
3167                         return x === y; // shortcut for steps 4-7
3168                 },
3169
3170                 // https://ecma-international.org/ecma-262/5.1/#sec-11.8.5
3171                 // eslint-disable-next-line max-statements
3172                 'Abstract Relational Comparison': function AbstractRelationalComparison(x, y, LeftFirst) {
3173                         if (this.Type(LeftFirst) !== 'Boolean') {
3174                                 throw new $TypeError$3('Assertion failed: LeftFirst argument must be a Boolean');
3175                         }
3176                         var px;
3177                         var py;
3178                         if (LeftFirst) {
3179                                 px = this.ToPrimitive(x, $Number$1);
3180                                 py = this.ToPrimitive(y, $Number$1);
3181                         } else {
3182                                 py = this.ToPrimitive(y, $Number$1);
3183                                 px = this.ToPrimitive(x, $Number$1);
3184                         }
3185                         var bothStrings = this.Type(px) === 'String' && this.Type(py) === 'String';
3186                         if (!bothStrings) {
3187                                 var nx = this.ToNumber(px);
3188                                 var ny = this.ToNumber(py);
3189                                 if (_isNaN(nx) || _isNaN(ny)) {
3190                                         return undefined;
3191                                 }
3192                                 if (_isFinite(nx) && _isFinite(ny) && nx === ny) {
3193                                         return false;
3194                                 }
3195                                 if (nx === 0 && ny === 0) {
3196                                         return false;
3197                                 }
3198                                 if (nx === Infinity) {
3199                                         return false;
3200                                 }
3201                                 if (ny === Infinity) {
3202                                         return true;
3203                                 }
3204                                 if (ny === -Infinity) {
3205                                         return false;
3206                                 }
3207                                 if (nx === -Infinity) {
3208                                         return true;
3209                                 }
3210                                 return nx < ny; // by now, these are both nonzero, finite, and not equal
3211                         }
3212                         if (isPrefixOf(py, px)) {
3213                                 return false;
3214                         }
3215                         if (isPrefixOf(px, py)) {
3216                                 return true;
3217                         }
3218                         return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
3219                 },
3220
3221                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
3222                 msFromTime: function msFromTime(t) {
3223                         return mod(t, msPerSecond);
3224                 },
3225
3226                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
3227                 SecFromTime: function SecFromTime(t) {
3228                         return mod($floor(t / msPerSecond), SecondsPerMinute);
3229                 },
3230
3231                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
3232                 MinFromTime: function MinFromTime(t) {
3233                         return mod($floor(t / msPerMinute), MinutesPerHour);
3234                 },
3235
3236                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
3237                 HourFromTime: function HourFromTime(t) {
3238                         return mod($floor(t / msPerHour), HoursPerDay);
3239                 },
3240
3241                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
3242                 Day: function Day(t) {
3243                         return $floor(t / msPerDay);
3244                 },
3245
3246                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
3247                 TimeWithinDay: function TimeWithinDay(t) {
3248                         return mod(t, msPerDay);
3249                 },
3250
3251                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
3252                 DayFromYear: function DayFromYear(y) {
3253                         return (365 * (y - 1970)) + $floor((y - 1969) / 4) - $floor((y - 1901) / 100) + $floor((y - 1601) / 400);
3254                 },
3255
3256                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
3257                 TimeFromYear: function TimeFromYear(y) {
3258                         return msPerDay * this.DayFromYear(y);
3259                 },
3260
3261                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
3262                 YearFromTime: function YearFromTime(t) {
3263                         // largest y such that this.TimeFromYear(y) <= t
3264                         return $getUTCFullYear(new $Date(t));
3265                 },
3266
3267                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.6
3268                 WeekDay: function WeekDay(t) {
3269                         return mod(this.Day(t) + 4, 7);
3270                 },
3271
3272                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
3273                 DaysInYear: function DaysInYear(y) {
3274                         if (mod(y, 4) !== 0) {
3275                                 return 365;
3276                         }
3277                         if (mod(y, 100) !== 0) {
3278                                 return 366;
3279                         }
3280                         if (mod(y, 400) !== 0) {
3281                                 return 365;
3282                         }
3283                         return 366;
3284                 },
3285
3286                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
3287                 InLeapYear: function InLeapYear(t) {
3288                         var days = this.DaysInYear(this.YearFromTime(t));
3289                         if (days === 365) {
3290                                 return 0;
3291                         }
3292                         if (days === 366) {
3293                                 return 1;
3294                         }
3295                         throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days);
3296                 },
3297
3298                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
3299                 DayWithinYear: function DayWithinYear(t) {
3300                         return this.Day(t) - this.DayFromYear(this.YearFromTime(t));
3301                 },
3302
3303                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
3304                 MonthFromTime: function MonthFromTime(t) {
3305                         var day = this.DayWithinYear(t);
3306                         if (0 <= day && day < 31) {
3307                                 return 0;
3308                         }
3309                         var leap = this.InLeapYear(t);
3310                         if (31 <= day && day < (59 + leap)) {
3311                                 return 1;
3312                         }
3313                         if ((59 + leap) <= day && day < (90 + leap)) {
3314                                 return 2;
3315                         }
3316                         if ((90 + leap) <= day && day < (120 + leap)) {
3317                                 return 3;
3318                         }
3319                         if ((120 + leap) <= day && day < (151 + leap)) {
3320                                 return 4;
3321                         }
3322                         if ((151 + leap) <= day && day < (181 + leap)) {
3323                                 return 5;
3324                         }
3325                         if ((181 + leap) <= day && day < (212 + leap)) {
3326                                 return 6;
3327                         }
3328                         if ((212 + leap) <= day && day < (243 + leap)) {
3329                                 return 7;
3330                         }
3331                         if ((243 + leap) <= day && day < (273 + leap)) {
3332                                 return 8;
3333                         }
3334                         if ((273 + leap) <= day && day < (304 + leap)) {
3335                                 return 9;
3336                         }
3337                         if ((304 + leap) <= day && day < (334 + leap)) {
3338                                 return 10;
3339                         }
3340                         if ((334 + leap) <= day && day < (365 + leap)) {
3341                                 return 11;
3342                         }
3343                 },
3344
3345                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.5
3346                 DateFromTime: function DateFromTime(t) {
3347                         var m = this.MonthFromTime(t);
3348                         var d = this.DayWithinYear(t);
3349                         if (m === 0) {
3350                                 return d + 1;
3351                         }
3352                         if (m === 1) {
3353                                 return d - 30;
3354                         }
3355                         var leap = this.InLeapYear(t);
3356                         if (m === 2) {
3357                                 return d - 58 - leap;
3358                         }
3359                         if (m === 3) {
3360                                 return d - 89 - leap;
3361                         }
3362                         if (m === 4) {
3363                                 return d - 119 - leap;
3364                         }
3365                         if (m === 5) {
3366                                 return d - 150 - leap;
3367                         }
3368                         if (m === 6) {
3369                                 return d - 180 - leap;
3370                         }
3371                         if (m === 7) {
3372                                 return d - 211 - leap;
3373                         }
3374                         if (m === 8) {
3375                                 return d - 242 - leap;
3376                         }
3377                         if (m === 9) {
3378                                 return d - 272 - leap;
3379                         }
3380                         if (m === 10) {
3381                                 return d - 303 - leap;
3382                         }
3383                         if (m === 11) {
3384                                 return d - 333 - leap;
3385                         }
3386                         throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m);
3387                 },
3388
3389                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.12
3390                 MakeDay: function MakeDay(year, month, date) {
3391                         if (!_isFinite(year) || !_isFinite(month) || !_isFinite(date)) {
3392                                 return NaN;
3393                         }
3394                         var y = this.ToInteger(year);
3395                         var m = this.ToInteger(month);
3396                         var dt = this.ToInteger(date);
3397                         var ym = y + $floor(m / 12);
3398                         var mn = mod(m, 12);
3399                         var t = $DateUTC(ym, mn, 1);
3400                         if (this.YearFromTime(t) !== ym || this.MonthFromTime(t) !== mn || this.DateFromTime(t) !== 1) {
3401                                 return NaN;
3402                         }
3403                         return this.Day(t) + dt - 1;
3404                 },
3405
3406                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.13
3407                 MakeDate: function MakeDate(day, time) {
3408                         if (!_isFinite(day) || !_isFinite(time)) {
3409                                 return NaN;
3410                         }
3411                         return (day * msPerDay) + time;
3412                 },
3413
3414                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.11
3415                 MakeTime: function MakeTime(hour, min, sec, ms) {
3416                         if (!_isFinite(hour) || !_isFinite(min) || !_isFinite(sec) || !_isFinite(ms)) {
3417                                 return NaN;
3418                         }
3419                         var h = this.ToInteger(hour);
3420                         var m = this.ToInteger(min);
3421                         var s = this.ToInteger(sec);
3422                         var milli = this.ToInteger(ms);
3423                         var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli;
3424                         return t;
3425                 },
3426
3427                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.14
3428                 TimeClip: function TimeClip(time) {
3429                         if (!_isFinite(time) || $abs(time) > 8.64e15) {
3430                                 return NaN;
3431                         }
3432                         return $Number$1(new $Date(this.ToNumber(time)));
3433                 },
3434
3435                 // https://ecma-international.org/ecma-262/5.1/#sec-5.2
3436                 modulo: function modulo(x, y) {
3437                         return mod(x, y);
3438                 }
3439         };
3440
3441         var es5$1 = ES5;
3442
3443         var regexExec = RegExp.prototype.exec;
3444         var gOPD = Object.getOwnPropertyDescriptor;
3445
3446         var tryRegexExecCall = function tryRegexExec(value) {
3447                 try {
3448                         var lastIndex = value.lastIndex;
3449                         value.lastIndex = 0;
3450
3451                         regexExec.call(value);
3452                         return true;
3453                 } catch (e) {
3454                         return false;
3455                 } finally {
3456                         value.lastIndex = lastIndex;
3457                 }
3458         };
3459         var toStr$7 = Object.prototype.toString;
3460         var regexClass = '[object RegExp]';
3461         var hasToStringTag$2 = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
3462
3463         var isRegex = function isRegex(value) {
3464                 if (!value || typeof value !== 'object') {
3465                         return false;
3466                 }
3467                 if (!hasToStringTag$2) {
3468                         return toStr$7.call(value) === regexClass;
3469                 }
3470
3471                 var descriptor = gOPD(value, 'lastIndex');
3472                 var hasLastIndexDataProperty = descriptor && src(descriptor, 'value');
3473                 if (!hasLastIndexDataProperty) {
3474                         return false;
3475                 }
3476
3477                 return tryRegexExecCall(value);
3478         };
3479
3480         var $TypeError$4 = GetIntrinsic('%TypeError%');
3481         var $RangeError = GetIntrinsic('%RangeError%');
3482         var $SyntaxError$2 = GetIntrinsic('%SyntaxError%');
3483         var $Array = GetIntrinsic('%Array%');
3484         var $ArrayPrototype = $Array.prototype;
3485         var $String$1 = GetIntrinsic('%String%');
3486         var $Object$1 = GetIntrinsic('%Object%');
3487         var $Number$2 = GetIntrinsic('%Number%');
3488         var $Symbol = GetIntrinsic('%Symbol%', true);
3489         var $RegExp = GetIntrinsic('%RegExp%');
3490         var $Date$1 = GetIntrinsic('%Date%');
3491         var $Function$1 = GetIntrinsic('%Function%');
3492         var $preventExtensions = $Object$1.preventExtensions;
3493
3494         var hasSymbols$5 = hasSymbols$1();
3495
3496
3497
3498
3499         var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1;
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510         var parseInteger = parseInt;
3511
3512
3513
3514
3515
3516         var $PromiseThen = callBound('Promise.prototype.then', true);
3517         var arraySlice = callBound('Array.prototype.slice');
3518         var strSlice = callBound('String.prototype.slice');
3519         var $indexOf$1 = callBound('Array.prototype.indexOf');
3520         var $push = callBound('Array.prototype.push');
3521
3522         var isBinary = regexTester(/^0b[01]+$/i);
3523         var isOctal = regexTester(/^0o[0-7]+$/i);
3524         var isDigit = regexTester(/^[0-9]$/);
3525         var regexExec$1 = callBound('RegExp.prototype.exec');
3526         var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
3527         var nonWSregex = new $RegExp('[' + nonWS + ']', 'g');
3528         var hasNonWS = regexTester(nonWSregex);
3529         var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);
3530         var $charCodeAt = callBound('String.prototype.charCodeAt');
3531         var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
3532
3533         var toStr$8 = callBound('Object.prototype.toString');
3534
3535         var $NumberValueOf = callBound('Number.prototype.valueOf');
3536         var $BooleanValueOf = callBound('Boolean.prototype.valueOf');
3537         var $StringValueOf = callBound('String.prototype.valueOf');
3538         var $DateValueOf = callBound('Date.prototype.valueOf');
3539         var $SymbolToString = callBound('Symbol.prototype.toString', true);
3540
3541         var $floor$1 = Math.floor;
3542         var $abs$1 = Math.abs;
3543
3544         var $ObjectCreate = $Object$1.create;
3545         var $gOPD = $Object$1.getOwnPropertyDescriptor;
3546         var $gOPN = $Object$1.getOwnPropertyNames;
3547         var $gOPS = $Object$1.getOwnPropertySymbols;
3548         var $isExtensible = $Object$1.isExtensible;
3549         var $defineProperty = $Object$1.defineProperty;
3550
3551
3552         var DefineOwnProperty = function DefineOwnProperty(ES, O, P, desc) {
3553                 if (!$defineProperty) {
3554                         if (!ES.IsDataDescriptor(desc)) {
3555                                 // ES3 does not support getters/setters
3556                                 return false;
3557                         }
3558                         if (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {
3559                                 return false;
3560                         }
3561
3562                         // fallback for ES3
3563                         if (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {
3564                                 // a non-enumerable existing property
3565                                 return false;
3566                         }
3567
3568                         // property does not exist at all, or exists but is enumerable
3569                         var V = desc['[[Value]]'];
3570                         O[P] = V; // will use [[Define]]
3571                         return ES.SameValue(O[P], V);
3572                 }
3573                 $defineProperty(O, P, ES.FromPropertyDescriptor(desc));
3574                 return true;
3575         };
3576
3577         // whitespace from: https://es5.github.io/#x15.5.4.20
3578         // implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324
3579         var ws = [
3580                 '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003',
3581                 '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028',
3582                 '\u2029\uFEFF'
3583         ].join('');
3584         var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');
3585         var $replace$1 = callBound('String.prototype.replace');
3586         var trim = function (value) {
3587                 return $replace$1(value, trimRegex, '');
3588         };
3589
3590
3591
3592
3593
3594         // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-abstract-operations
3595         var ES6 = assign$1(assign$1({}, es5$1), {
3596
3597                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-call-f-v-args
3598                 Call: function Call(F, V) {
3599                         var args = arguments.length > 2 ? arguments[2] : [];
3600                         if (!this.IsCallable(F)) {
3601                                 throw new $TypeError$4(objectInspect(F) + ' is not a function');
3602                         }
3603                         return F.apply(V, args);
3604                 },
3605
3606                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toprimitive
3607                 ToPrimitive: es6,
3608
3609                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toboolean
3610                 // ToBoolean: ES5.ToBoolean,
3611
3612                 // https://ecma-international.org/ecma-262/6.0/#sec-tonumber
3613                 ToNumber: function ToNumber(argument) {
3614                         var value = isPrimitive$1(argument) ? argument : es6(argument, $Number$2);
3615                         if (typeof value === 'symbol') {
3616                                 throw new $TypeError$4('Cannot convert a Symbol value to a number');
3617                         }
3618                         if (typeof value === 'string') {
3619                                 if (isBinary(value)) {
3620                                         return this.ToNumber(parseInteger(strSlice(value, 2), 2));
3621                                 } else if (isOctal(value)) {
3622                                         return this.ToNumber(parseInteger(strSlice(value, 2), 8));
3623                                 } else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
3624                                         return NaN;
3625                                 } else {
3626                                         var trimmed = trim(value);
3627                                         if (trimmed !== value) {
3628                                                 return this.ToNumber(trimmed);
3629                                         }
3630                                 }
3631                         }
3632                         return $Number$2(value);
3633                 },
3634
3635                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tointeger
3636                 // ToInteger: ES5.ToNumber,
3637
3638                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toint32
3639                 // ToInt32: ES5.ToInt32,
3640
3641                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint32
3642                 // ToUint32: ES5.ToUint32,
3643
3644                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toint16
3645                 ToInt16: function ToInt16(argument) {
3646                         var int16bit = this.ToUint16(argument);
3647                         return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit;
3648                 },
3649
3650                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint16
3651                 // ToUint16: ES5.ToUint16,
3652
3653                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toint8
3654                 ToInt8: function ToInt8(argument) {
3655                         var int8bit = this.ToUint8(argument);
3656                         return int8bit >= 0x80 ? int8bit - 0x100 : int8bit;
3657                 },
3658
3659                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint8
3660                 ToUint8: function ToUint8(argument) {
3661                         var number = this.ToNumber(argument);
3662                         if (_isNaN(number) || number === 0 || !_isFinite(number)) { return 0; }
3663                         var posInt = sign$1(number) * $floor$1($abs$1(number));
3664                         return mod(posInt, 0x100);
3665                 },
3666
3667                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint8clamp
3668                 ToUint8Clamp: function ToUint8Clamp(argument) {
3669                         var number = this.ToNumber(argument);
3670                         if (_isNaN(number) || number <= 0) { return 0; }
3671                         if (number >= 0xFF) { return 0xFF; }
3672                         var f = $floor$1(argument);
3673                         if (f + 0.5 < number) { return f + 1; }
3674                         if (number < f + 0.5) { return f; }
3675                         if (f % 2 !== 0) { return f + 1; }
3676                         return f;
3677                 },
3678
3679                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tostring
3680                 ToString: function ToString(argument) {
3681                         if (typeof argument === 'symbol') {
3682                                 throw new $TypeError$4('Cannot convert a Symbol value to a string');
3683                         }
3684                         return $String$1(argument);
3685                 },
3686
3687                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toobject
3688                 ToObject: function ToObject(value) {
3689                         this.RequireObjectCoercible(value);
3690                         return $Object$1(value);
3691                 },
3692
3693                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-topropertykey
3694                 ToPropertyKey: function ToPropertyKey(argument) {
3695                         var key = this.ToPrimitive(argument, $String$1);
3696                         return typeof key === 'symbol' ? key : this.ToString(key);
3697                 },
3698
3699                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
3700                 ToLength: function ToLength(argument) {
3701                         var len = this.ToInteger(argument);
3702                         if (len <= 0) { return 0; } // includes converting -0 to +0
3703                         if (len > maxSafeInteger) { return maxSafeInteger; }
3704                         return len;
3705                 },
3706
3707                 // https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring
3708                 CanonicalNumericIndexString: function CanonicalNumericIndexString(argument) {
3709                         if (toStr$8(argument) !== '[object String]') {
3710                                 throw new $TypeError$4('must be a string');
3711                         }
3712                         if (argument === '-0') { return -0; }
3713                         var n = this.ToNumber(argument);
3714                         if (this.SameValue(this.ToString(n), argument)) { return n; }
3715                         return void 0;
3716                 },
3717
3718                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-requireobjectcoercible
3719                 RequireObjectCoercible: es5$1.CheckObjectCoercible,
3720
3721                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isarray
3722                 IsArray: $Array.isArray || function IsArray(argument) {
3723                         return toStr$8(argument) === '[object Array]';
3724                 },
3725
3726                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-iscallable
3727                 // IsCallable: ES5.IsCallable,
3728
3729                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isconstructor
3730                 IsConstructor: function IsConstructor(argument) {
3731                         return typeof argument === 'function' && !!argument.prototype; // unfortunately there's no way to truly check this without try/catch `new argument` or Proxy
3732                 },
3733
3734                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isextensible-o
3735                 IsExtensible: $preventExtensions
3736                         ? function IsExtensible(obj) {
3737                                 if (isPrimitive$1(obj)) {
3738                                         return false;
3739                                 }
3740                                 return $isExtensible(obj);
3741                         }
3742                         : function isExtensible(obj) { return true; }, // eslint-disable-line no-unused-vars
3743
3744                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isinteger
3745                 IsInteger: function IsInteger(argument) {
3746                         if (typeof argument !== 'number' || _isNaN(argument) || !_isFinite(argument)) {
3747                                 return false;
3748                         }
3749                         var abs = $abs$1(argument);
3750                         return $floor$1(abs) === abs;
3751                 },
3752
3753                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-ispropertykey
3754                 IsPropertyKey: function IsPropertyKey(argument) {
3755                         return typeof argument === 'string' || typeof argument === 'symbol';
3756                 },
3757
3758                 // https://ecma-international.org/ecma-262/6.0/#sec-isregexp
3759                 IsRegExp: function IsRegExp(argument) {
3760                         if (!argument || typeof argument !== 'object') {
3761                                 return false;
3762                         }
3763                         if (hasSymbols$5) {
3764                                 var isRegExp = argument[$Symbol.match];
3765                                 if (typeof isRegExp !== 'undefined') {
3766                                         return es5$1.ToBoolean(isRegExp);
3767                                 }
3768                         }
3769                         return isRegex(argument);
3770                 },
3771
3772                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevalue
3773                 // SameValue: ES5.SameValue,
3774
3775                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero
3776                 SameValueZero: function SameValueZero(x, y) {
3777                         return (x === y) || (_isNaN(x) && _isNaN(y));
3778                 },
3779
3780                 /**
3781                  * 7.3.2 GetV (V, P)
3782                  * 1. Assert: IsPropertyKey(P) is true.
3783                  * 2. Let O be ToObject(V).
3784                  * 3. ReturnIfAbrupt(O).
3785                  * 4. Return O.[[Get]](P, V).
3786                  */
3787                 GetV: function GetV(V, P) {
3788                         // 7.3.2.1
3789                         if (!this.IsPropertyKey(P)) {
3790                                 throw new $TypeError$4('Assertion failed: IsPropertyKey(P) is not true');
3791                         }
3792
3793                         // 7.3.2.2-3
3794                         var O = this.ToObject(V);
3795
3796                         // 7.3.2.4
3797                         return O[P];
3798                 },
3799
3800                 /**
3801                  * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod
3802                  * 1. Assert: IsPropertyKey(P) is true.
3803                  * 2. Let func be GetV(O, P).
3804                  * 3. ReturnIfAbrupt(func).
3805                  * 4. If func is either undefined or null, return undefined.
3806                  * 5. If IsCallable(func) is false, throw a TypeError exception.
3807                  * 6. Return func.
3808                  */
3809                 GetMethod: function GetMethod(O, P) {
3810                         // 7.3.9.1
3811                         if (!this.IsPropertyKey(P)) {
3812                                 throw new $TypeError$4('Assertion failed: IsPropertyKey(P) is not true');
3813                         }
3814
3815                         // 7.3.9.2
3816                         var func = this.GetV(O, P);
3817
3818                         // 7.3.9.4
3819                         if (func == null) {
3820                                 return void 0;
3821                         }
3822
3823                         // 7.3.9.5
3824                         if (!this.IsCallable(func)) {
3825                                 throw new $TypeError$4(P + 'is not a function');
3826                         }
3827
3828                         // 7.3.9.6
3829                         return func;
3830                 },
3831
3832                 /**
3833                  * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p
3834                  * 1. Assert: Type(O) is Object.
3835                  * 2. Assert: IsPropertyKey(P) is true.
3836                  * 3. Return O.[[Get]](P, O).
3837                  */
3838                 Get: function Get(O, P) {
3839                         // 7.3.1.1
3840                         if (this.Type(O) !== 'Object') {
3841                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
3842                         }
3843                         // 7.3.1.2
3844                         if (!this.IsPropertyKey(P)) {
3845                                 throw new $TypeError$4('Assertion failed: IsPropertyKey(P) is not true, got ' + objectInspect(P));
3846                         }
3847                         // 7.3.1.3
3848                         return O[P];
3849                 },
3850
3851                 Type: function Type(x) {
3852                         if (typeof x === 'symbol') {
3853                                 return 'Symbol';
3854                         }
3855                         return es5$1.Type(x);
3856                 },
3857
3858                 // https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor
3859                 SpeciesConstructor: function SpeciesConstructor(O, defaultConstructor) {
3860                         if (this.Type(O) !== 'Object') {
3861                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
3862                         }
3863                         var C = O.constructor;
3864                         if (typeof C === 'undefined') {
3865                                 return defaultConstructor;
3866                         }
3867                         if (this.Type(C) !== 'Object') {
3868                                 throw new $TypeError$4('O.constructor is not an Object');
3869                         }
3870                         var S = hasSymbols$5 && $Symbol.species ? C[$Symbol.species] : void 0;
3871                         if (S == null) {
3872                                 return defaultConstructor;
3873                         }
3874                         if (this.IsConstructor(S)) {
3875                                 return S;
3876                         }
3877                         throw new $TypeError$4('no constructor found');
3878                 },
3879
3880                 // https://www.ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor
3881                 FromPropertyDescriptor: function FromPropertyDescriptor(Desc) {
3882                         if (typeof Desc === 'undefined') {
3883                                 return Desc;
3884                         }
3885
3886                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
3887
3888                         var obj = {};
3889                         if ('[[Value]]' in Desc) {
3890                                 obj.value = Desc['[[Value]]'];
3891                         }
3892                         if ('[[Writable]]' in Desc) {
3893                                 obj.writable = Desc['[[Writable]]'];
3894                         }
3895                         if ('[[Get]]' in Desc) {
3896                                 obj.get = Desc['[[Get]]'];
3897                         }
3898                         if ('[[Set]]' in Desc) {
3899                                 obj.set = Desc['[[Set]]'];
3900                         }
3901                         if ('[[Enumerable]]' in Desc) {
3902                                 obj.enumerable = Desc['[[Enumerable]]'];
3903                         }
3904                         if ('[[Configurable]]' in Desc) {
3905                                 obj.configurable = Desc['[[Configurable]]'];
3906                         }
3907                         return obj;
3908                 },
3909
3910                 // https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor
3911                 CompletePropertyDescriptor: function CompletePropertyDescriptor(Desc) {
3912                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
3913
3914                         if (this.IsGenericDescriptor(Desc) || this.IsDataDescriptor(Desc)) {
3915                                 if (!src(Desc, '[[Value]]')) {
3916                                         Desc['[[Value]]'] = void 0;
3917                                 }
3918                                 if (!src(Desc, '[[Writable]]')) {
3919                                         Desc['[[Writable]]'] = false;
3920                                 }
3921                         } else {
3922                                 if (!src(Desc, '[[Get]]')) {
3923                                         Desc['[[Get]]'] = void 0;
3924                                 }
3925                                 if (!src(Desc, '[[Set]]')) {
3926                                         Desc['[[Set]]'] = void 0;
3927                                 }
3928                         }
3929                         if (!src(Desc, '[[Enumerable]]')) {
3930                                 Desc['[[Enumerable]]'] = false;
3931                         }
3932                         if (!src(Desc, '[[Configurable]]')) {
3933                                 Desc['[[Configurable]]'] = false;
3934                         }
3935                         return Desc;
3936                 },
3937
3938                 // https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw
3939                 Set: function Set(O, P, V, Throw) {
3940                         if (this.Type(O) !== 'Object') {
3941                                 throw new $TypeError$4('O must be an Object');
3942                         }
3943                         if (!this.IsPropertyKey(P)) {
3944                                 throw new $TypeError$4('P must be a Property Key');
3945                         }
3946                         if (this.Type(Throw) !== 'Boolean') {
3947                                 throw new $TypeError$4('Throw must be a Boolean');
3948                         }
3949                         if (Throw) {
3950                                 O[P] = V;
3951                                 return true;
3952                         } else {
3953                                 try {
3954                                         O[P] = V;
3955                                 } catch (e) {
3956                                         return false;
3957                                 }
3958                         }
3959                 },
3960
3961                 // https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty
3962                 HasOwnProperty: function HasOwnProperty(O, P) {
3963                         if (this.Type(O) !== 'Object') {
3964                                 throw new $TypeError$4('O must be an Object');
3965                         }
3966                         if (!this.IsPropertyKey(P)) {
3967                                 throw new $TypeError$4('P must be a Property Key');
3968                         }
3969                         return src(O, P);
3970                 },
3971
3972                 // https://ecma-international.org/ecma-262/6.0/#sec-hasproperty
3973                 HasProperty: function HasProperty(O, P) {
3974                         if (this.Type(O) !== 'Object') {
3975                                 throw new $TypeError$4('O must be an Object');
3976                         }
3977                         if (!this.IsPropertyKey(P)) {
3978                                 throw new $TypeError$4('P must be a Property Key');
3979                         }
3980                         return P in O;
3981                 },
3982
3983                 // https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable
3984                 IsConcatSpreadable: function IsConcatSpreadable(O) {
3985                         if (this.Type(O) !== 'Object') {
3986                                 return false;
3987                         }
3988                         if (hasSymbols$5 && typeof $Symbol.isConcatSpreadable === 'symbol') {
3989                                 var spreadable = this.Get(O, Symbol.isConcatSpreadable);
3990                                 if (typeof spreadable !== 'undefined') {
3991                                         return this.ToBoolean(spreadable);
3992                                 }
3993                         }
3994                         return this.IsArray(O);
3995                 },
3996
3997                 // https://ecma-international.org/ecma-262/6.0/#sec-invoke
3998                 Invoke: function Invoke(O, P) {
3999                         if (!this.IsPropertyKey(P)) {
4000                                 throw new $TypeError$4('P must be a Property Key');
4001                         }
4002                         var argumentsList = arraySlice(arguments, 2);
4003                         var func = this.GetV(O, P);
4004                         return this.Call(func, O, argumentsList);
4005                 },
4006
4007                 // https://ecma-international.org/ecma-262/6.0/#sec-getiterator
4008                 GetIterator: function GetIterator(obj, method) {
4009                         var actualMethod = method;
4010                         if (arguments.length < 2) {
4011                                 actualMethod = getIteratorMethod(this, obj);
4012                         }
4013                         var iterator = this.Call(actualMethod, obj);
4014                         if (this.Type(iterator) !== 'Object') {
4015                                 throw new $TypeError$4('iterator must return an object');
4016                         }
4017
4018                         return iterator;
4019                 },
4020
4021                 // https://ecma-international.org/ecma-262/6.0/#sec-iteratornext
4022                 IteratorNext: function IteratorNext(iterator, value) {
4023                         var result = this.Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]);
4024                         if (this.Type(result) !== 'Object') {
4025                                 throw new $TypeError$4('iterator next must return an object');
4026                         }
4027                         return result;
4028                 },
4029
4030                 // https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete
4031                 IteratorComplete: function IteratorComplete(iterResult) {
4032                         if (this.Type(iterResult) !== 'Object') {
4033                                 throw new $TypeError$4('Assertion failed: Type(iterResult) is not Object');
4034                         }
4035                         return this.ToBoolean(this.Get(iterResult, 'done'));
4036                 },
4037
4038                 // https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue
4039                 IteratorValue: function IteratorValue(iterResult) {
4040                         if (this.Type(iterResult) !== 'Object') {
4041                                 throw new $TypeError$4('Assertion failed: Type(iterResult) is not Object');
4042                         }
4043                         return this.Get(iterResult, 'value');
4044                 },
4045
4046                 // https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep
4047                 IteratorStep: function IteratorStep(iterator) {
4048                         var result = this.IteratorNext(iterator);
4049                         var done = this.IteratorComplete(result);
4050                         return done === true ? false : result;
4051                 },
4052
4053                 // https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose
4054                 IteratorClose: function IteratorClose(iterator, completion) {
4055                         if (this.Type(iterator) !== 'Object') {
4056                                 throw new $TypeError$4('Assertion failed: Type(iterator) is not Object');
4057                         }
4058                         if (!this.IsCallable(completion)) {
4059                                 throw new $TypeError$4('Assertion failed: completion is not a thunk for a Completion Record');
4060                         }
4061                         var completionThunk = completion;
4062
4063                         var iteratorReturn = this.GetMethod(iterator, 'return');
4064
4065                         if (typeof iteratorReturn === 'undefined') {
4066                                 return completionThunk();
4067                         }
4068
4069                         var completionRecord;
4070                         try {
4071                                 var innerResult = this.Call(iteratorReturn, iterator, []);
4072                         } catch (e) {
4073                                 // if we hit here, then "e" is the innerResult completion that needs re-throwing
4074
4075                                 // if the completion is of type "throw", this will throw.
4076                                 completionRecord = completionThunk();
4077                                 completionThunk = null; // ensure it's not called twice.
4078
4079                                 // if not, then return the innerResult completion
4080                                 throw e;
4081                         }
4082                         completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does
4083                         completionThunk = null; // ensure it's not called twice.
4084
4085                         if (this.Type(innerResult) !== 'Object') {
4086                                 throw new $TypeError$4('iterator .return must return an object');
4087                         }
4088
4089                         return completionRecord;
4090                 },
4091
4092                 // https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject
4093                 CreateIterResultObject: function CreateIterResultObject(value, done) {
4094                         if (this.Type(done) !== 'Boolean') {
4095                                 throw new $TypeError$4('Assertion failed: Type(done) is not Boolean');
4096                         }
4097                         return {
4098                                 value: value,
4099                                 done: done
4100                         };
4101                 },
4102
4103                 // https://ecma-international.org/ecma-262/6.0/#sec-regexpexec
4104                 RegExpExec: function RegExpExec(R, S) {
4105                         if (this.Type(R) !== 'Object') {
4106                                 throw new $TypeError$4('R must be an Object');
4107                         }
4108                         if (this.Type(S) !== 'String') {
4109                                 throw new $TypeError$4('S must be a String');
4110                         }
4111                         var exec = this.Get(R, 'exec');
4112                         if (this.IsCallable(exec)) {
4113                                 var result = this.Call(exec, R, [S]);
4114                                 if (result === null || this.Type(result) === 'Object') {
4115                                         return result;
4116                                 }
4117                                 throw new $TypeError$4('"exec" method must return `null` or an Object');
4118                         }
4119                         return regexExec$1(R, S);
4120                 },
4121
4122                 // https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate
4123                 ArraySpeciesCreate: function ArraySpeciesCreate(originalArray, length) {
4124                         if (!this.IsInteger(length) || length < 0) {
4125                                 throw new $TypeError$4('Assertion failed: length must be an integer >= 0');
4126                         }
4127                         var len = length === 0 ? 0 : length;
4128                         var C;
4129                         var isArray = this.IsArray(originalArray);
4130                         if (isArray) {
4131                                 C = this.Get(originalArray, 'constructor');
4132                                 // TODO: figure out how to make a cross-realm normal Array, a same-realm Array
4133                                 // if (this.IsConstructor(C)) {
4134                                 //      if C is another realm's Array, C = undefined
4135                                 //      Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?
4136                                 // }
4137                                 if (this.Type(C) === 'Object' && hasSymbols$5 && $Symbol.species) {
4138                                         C = this.Get(C, $Symbol.species);
4139                                         if (C === null) {
4140                                                 C = void 0;
4141                                         }
4142                                 }
4143                         }
4144                         if (typeof C === 'undefined') {
4145                                 return $Array(len);
4146                         }
4147                         if (!this.IsConstructor(C)) {
4148                                 throw new $TypeError$4('C must be a constructor');
4149                         }
4150                         return new C(len); // this.Construct(C, len);
4151                 },
4152
4153                 CreateDataProperty: function CreateDataProperty(O, P, V) {
4154                         if (this.Type(O) !== 'Object') {
4155                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4156                         }
4157                         if (!this.IsPropertyKey(P)) {
4158                                 throw new $TypeError$4('Assertion failed: IsPropertyKey(P) is not true');
4159                         }
4160                         var oldDesc = $gOPD(O, P);
4161                         var extensible = oldDesc || this.IsExtensible(O);
4162                         var immutable = oldDesc && (!oldDesc.writable || !oldDesc.configurable);
4163                         if (immutable || !extensible) {
4164                                 return false;
4165                         }
4166                         return DefineOwnProperty(this, O, P, {
4167                                 '[[Configurable]]': true,
4168                                 '[[Enumerable]]': true,
4169                                 '[[Value]]': V,
4170                                 '[[Writable]]': true
4171                         });
4172                 },
4173
4174                 // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow
4175                 CreateDataPropertyOrThrow: function CreateDataPropertyOrThrow(O, P, V) {
4176                         if (this.Type(O) !== 'Object') {
4177                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4178                         }
4179                         if (!this.IsPropertyKey(P)) {
4180                                 throw new $TypeError$4('Assertion failed: IsPropertyKey(P) is not true');
4181                         }
4182                         var success = this.CreateDataProperty(O, P, V);
4183                         if (!success) {
4184                                 throw new $TypeError$4('unable to create data property');
4185                         }
4186                         return success;
4187                 },
4188
4189                 // https://www.ecma-international.org/ecma-262/6.0/#sec-objectcreate
4190                 ObjectCreate: function ObjectCreate(proto, internalSlotsList) {
4191                         if (proto !== null && this.Type(proto) !== 'Object') {
4192                                 throw new $TypeError$4('Assertion failed: proto must be null or an object');
4193                         }
4194                         var slots = arguments.length < 2 ? [] : internalSlotsList;
4195                         if (slots.length > 0) {
4196                                 throw new $SyntaxError$2('es-abstract does not yet support internal slots');
4197                         }
4198
4199                         if (proto === null && !$ObjectCreate) {
4200                                 throw new $SyntaxError$2('native Object.create support is required to create null objects');
4201                         }
4202
4203                         return $ObjectCreate(proto);
4204                 },
4205
4206                 // https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex
4207                 AdvanceStringIndex: function AdvanceStringIndex(S, index, unicode) {
4208                         if (this.Type(S) !== 'String') {
4209                                 throw new $TypeError$4('S must be a String');
4210                         }
4211                         if (!this.IsInteger(index) || index < 0 || index > maxSafeInteger) {
4212                                 throw new $TypeError$4('Assertion failed: length must be an integer >= 0 and <= 2**53');
4213                         }
4214                         if (this.Type(unicode) !== 'Boolean') {
4215                                 throw new $TypeError$4('Assertion failed: unicode must be a Boolean');
4216                         }
4217                         if (!unicode) {
4218                                 return index + 1;
4219                         }
4220                         var length = S.length;
4221                         if ((index + 1) >= length) {
4222                                 return index + 1;
4223                         }
4224
4225                         var first = $charCodeAt(S, index);
4226                         if (first < 0xD800 || first > 0xDBFF) {
4227                                 return index + 1;
4228                         }
4229
4230                         var second = $charCodeAt(S, index + 1);
4231                         if (second < 0xDC00 || second > 0xDFFF) {
4232                                 return index + 1;
4233                         }
4234
4235                         return index + 2;
4236                 },
4237
4238                 // https://www.ecma-international.org/ecma-262/6.0/#sec-createmethodproperty
4239                 CreateMethodProperty: function CreateMethodProperty(O, P, V) {
4240                         if (this.Type(O) !== 'Object') {
4241                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4242                         }
4243
4244                         if (!this.IsPropertyKey(P)) {
4245                                 throw new $TypeError$4('Assertion failed: IsPropertyKey(P) is not true');
4246                         }
4247
4248                         var newDesc = {
4249                                 '[[Configurable]]': true,
4250                                 '[[Enumerable]]': false,
4251                                 '[[Value]]': V,
4252                                 '[[Writable]]': true
4253                         };
4254                         return DefineOwnProperty(this, O, P, newDesc);
4255                 },
4256
4257                 // https://www.ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow
4258                 DefinePropertyOrThrow: function DefinePropertyOrThrow(O, P, desc) {
4259                         if (this.Type(O) !== 'Object') {
4260                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4261                         }
4262
4263                         if (!this.IsPropertyKey(P)) {
4264                                 throw new $TypeError$4('Assertion failed: IsPropertyKey(P) is not true');
4265                         }
4266
4267                         var Desc = isPropertyDescriptor(this, desc) ? desc : this.ToPropertyDescriptor(desc);
4268                         if (!isPropertyDescriptor(this, Desc)) {
4269                                 throw new $TypeError$4('Assertion failed: Desc is not a valid Property Descriptor');
4270                         }
4271
4272                         return DefineOwnProperty(this, O, P, Desc);
4273                 },
4274
4275                 // https://www.ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow
4276                 DeletePropertyOrThrow: function DeletePropertyOrThrow(O, P) {
4277                         if (this.Type(O) !== 'Object') {
4278                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4279                         }
4280
4281                         if (!this.IsPropertyKey(P)) {
4282                                 throw new $TypeError$4('Assertion failed: IsPropertyKey(P) is not true');
4283                         }
4284
4285                         var success = delete O[P];
4286                         if (!success) {
4287                                 throw new TypeError('Attempt to delete property failed.');
4288                         }
4289                         return success;
4290                 },
4291
4292                 // https://www.ecma-international.org/ecma-262/6.0/#sec-enumerableownnames
4293                 EnumerableOwnNames: function EnumerableOwnNames(O) {
4294                         if (this.Type(O) !== 'Object') {
4295                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4296                         }
4297
4298                         return objectKeys(O);
4299                 },
4300
4301                 // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object
4302                 thisNumberValue: function thisNumberValue(value) {
4303                         if (this.Type(value) === 'Number') {
4304                                 return value;
4305                         }
4306
4307                         return $NumberValueOf(value);
4308                 },
4309
4310                 // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object
4311                 thisBooleanValue: function thisBooleanValue(value) {
4312                         if (this.Type(value) === 'Boolean') {
4313                                 return value;
4314                         }
4315
4316                         return $BooleanValueOf(value);
4317                 },
4318
4319                 // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object
4320                 thisStringValue: function thisStringValue(value) {
4321                         if (this.Type(value) === 'String') {
4322                                 return value;
4323                         }
4324
4325                         return $StringValueOf(value);
4326                 },
4327
4328                 // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-date-prototype-object
4329                 thisTimeValue: function thisTimeValue(value) {
4330                         return $DateValueOf(value);
4331                 },
4332
4333                 // https://www.ecma-international.org/ecma-262/6.0/#sec-setintegritylevel
4334                 SetIntegrityLevel: function SetIntegrityLevel(O, level) {
4335                         if (this.Type(O) !== 'Object') {
4336                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4337                         }
4338                         if (level !== 'sealed' && level !== 'frozen') {
4339                                 throw new $TypeError$4('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
4340                         }
4341                         if (!$preventExtensions) {
4342                                 throw new $SyntaxError$2('SetIntegrityLevel requires native `Object.preventExtensions` support');
4343                         }
4344                         var status = $preventExtensions(O);
4345                         if (!status) {
4346                                 return false;
4347                         }
4348                         if (!$gOPN) {
4349                                 throw new $SyntaxError$2('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support');
4350                         }
4351                         var theKeys = $gOPN(O);
4352                         var ES = this;
4353                         if (level === 'sealed') {
4354                                 forEach$3(theKeys, function (k) {
4355                                         ES.DefinePropertyOrThrow(O, k, { configurable: false });
4356                                 });
4357                         } else if (level === 'frozen') {
4358                                 forEach$3(theKeys, function (k) {
4359                                         var currentDesc = $gOPD(O, k);
4360                                         if (typeof currentDesc !== 'undefined') {
4361                                                 var desc;
4362                                                 if (ES.IsAccessorDescriptor(ES.ToPropertyDescriptor(currentDesc))) {
4363                                                         desc = { configurable: false };
4364                                                 } else {
4365                                                         desc = { configurable: false, writable: false };
4366                                                 }
4367                                                 ES.DefinePropertyOrThrow(O, k, desc);
4368                                         }
4369                                 });
4370                         }
4371                         return true;
4372                 },
4373
4374                 // https://www.ecma-international.org/ecma-262/6.0/#sec-testintegritylevel
4375                 TestIntegrityLevel: function TestIntegrityLevel(O, level) {
4376                         if (this.Type(O) !== 'Object') {
4377                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4378                         }
4379                         if (level !== 'sealed' && level !== 'frozen') {
4380                                 throw new $TypeError$4('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
4381                         }
4382                         var status = this.IsExtensible(O);
4383                         if (status) {
4384                                 return false;
4385                         }
4386                         var theKeys = $gOPN(O);
4387                         var ES = this;
4388                         return theKeys.length === 0 || every(theKeys, function (k) {
4389                                 var currentDesc = $gOPD(O, k);
4390                                 if (typeof currentDesc !== 'undefined') {
4391                                         if (currentDesc.configurable) {
4392                                                 return false;
4393                                         }
4394                                         if (level === 'frozen' && ES.IsDataDescriptor(ES.ToPropertyDescriptor(currentDesc)) && currentDesc.writable) {
4395                                                 return false;
4396                                         }
4397                                 }
4398                                 return true;
4399                         });
4400                 },
4401
4402                 // https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance
4403                 OrdinaryHasInstance: function OrdinaryHasInstance(C, O) {
4404                         if (this.IsCallable(C) === false) {
4405                                 return false;
4406                         }
4407                         if (this.Type(O) !== 'Object') {
4408                                 return false;
4409                         }
4410                         var P = this.Get(C, 'prototype');
4411                         if (this.Type(P) !== 'Object') {
4412                                 throw new $TypeError$4('OrdinaryHasInstance called on an object with an invalid prototype property.');
4413                         }
4414                         return O instanceof C;
4415                 },
4416
4417                 // https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty
4418                 OrdinaryHasProperty: function OrdinaryHasProperty(O, P) {
4419                         if (this.Type(O) !== 'Object') {
4420                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4421                         }
4422                         if (!this.IsPropertyKey(P)) {
4423                                 throw new $TypeError$4('Assertion failed: P must be a Property Key');
4424                         }
4425                         return P in O;
4426                 },
4427
4428                 // https://www.ecma-international.org/ecma-262/6.0/#sec-instanceofoperator
4429                 InstanceofOperator: function InstanceofOperator(O, C) {
4430                         if (this.Type(O) !== 'Object') {
4431                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4432                         }
4433                         var instOfHandler = hasSymbols$5 && $Symbol.hasInstance ? this.GetMethod(C, $Symbol.hasInstance) : void 0;
4434                         if (typeof instOfHandler !== 'undefined') {
4435                                 return this.ToBoolean(this.Call(instOfHandler, C, [O]));
4436                         }
4437                         if (!this.IsCallable(C)) {
4438                                 throw new $TypeError$4('`C` is not Callable');
4439                         }
4440                         return this.OrdinaryHasInstance(C, O);
4441                 },
4442
4443                 // https://www.ecma-international.org/ecma-262/6.0/#sec-ispromise
4444                 IsPromise: function IsPromise(x) {
4445                         if (this.Type(x) !== 'Object') {
4446                                 return false;
4447                         }
4448                         if (!$PromiseThen) { // Promises are not supported
4449                                 return false;
4450                         }
4451                         try {
4452                                 $PromiseThen(x); // throws if not a promise
4453                         } catch (e) {
4454                                 return false;
4455                         }
4456                         return true;
4457                 },
4458
4459                 // https://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison
4460                 'Abstract Equality Comparison': function AbstractEqualityComparison(x, y) {
4461                         var xType = this.Type(x);
4462                         var yType = this.Type(y);
4463                         if (xType === yType) {
4464                                 return x === y; // ES6+ specified this shortcut anyways.
4465                         }
4466                         if (x == null && y == null) {
4467                                 return true;
4468                         }
4469                         if (xType === 'Number' && yType === 'String') {
4470                                 return this['Abstract Equality Comparison'](x, this.ToNumber(y));
4471                         }
4472                         if (xType === 'String' && yType === 'Number') {
4473                                 return this['Abstract Equality Comparison'](this.ToNumber(x), y);
4474                         }
4475                         if (xType === 'Boolean') {
4476                                 return this['Abstract Equality Comparison'](this.ToNumber(x), y);
4477                         }
4478                         if (yType === 'Boolean') {
4479                                 return this['Abstract Equality Comparison'](x, this.ToNumber(y));
4480                         }
4481                         if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') {
4482                                 return this['Abstract Equality Comparison'](x, this.ToPrimitive(y));
4483                         }
4484                         if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) {
4485                                 return this['Abstract Equality Comparison'](this.ToPrimitive(x), y);
4486                         }
4487                         return false;
4488                 },
4489
4490                 // eslint-disable-next-line max-lines-per-function, max-statements, id-length, max-params
4491                 ValidateAndApplyPropertyDescriptor: function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) {
4492                         // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic.
4493                         var oType = this.Type(O);
4494                         if (oType !== 'Undefined' && oType !== 'Object') {
4495                                 throw new $TypeError$4('Assertion failed: O must be undefined or an Object');
4496                         }
4497                         if (this.Type(extensible) !== 'Boolean') {
4498                                 throw new $TypeError$4('Assertion failed: extensible must be a Boolean');
4499                         }
4500                         if (!isPropertyDescriptor(this, Desc)) {
4501                                 throw new $TypeError$4('Assertion failed: Desc must be a Property Descriptor');
4502                         }
4503                         if (this.Type(current) !== 'Undefined' && !isPropertyDescriptor(this, current)) {
4504                                 throw new $TypeError$4('Assertion failed: current must be a Property Descriptor, or undefined');
4505                         }
4506                         if (oType !== 'Undefined' && !this.IsPropertyKey(P)) {
4507                                 throw new $TypeError$4('Assertion failed: if O is not undefined, P must be a Property Key');
4508                         }
4509                         if (this.Type(current) === 'Undefined') {
4510                                 if (!extensible) {
4511                                         return false;
4512                                 }
4513                                 if (this.IsGenericDescriptor(Desc) || this.IsDataDescriptor(Desc)) {
4514                                         if (oType !== 'Undefined') {
4515                                                 DefineOwnProperty(this, O, P, {
4516                                                         '[[Configurable]]': Desc['[[Configurable]]'],
4517                                                         '[[Enumerable]]': Desc['[[Enumerable]]'],
4518                                                         '[[Value]]': Desc['[[Value]]'],
4519                                                         '[[Writable]]': Desc['[[Writable]]']
4520                                                 });
4521                                         }
4522                                 } else {
4523                                         if (!this.IsAccessorDescriptor(Desc)) {
4524                                                 throw new $TypeError$4('Assertion failed: Desc is not an accessor descriptor');
4525                                         }
4526                                         if (oType !== 'Undefined') {
4527                                                 return DefineOwnProperty(this, O, P, Desc);
4528                                         }
4529                                 }
4530                                 return true;
4531                         }
4532                         if (this.IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) {
4533                                 return true;
4534                         }
4535                         if (isSamePropertyDescriptor(this, Desc, current)) {
4536                                 return true; // removed by ES2017, but should still be correct
4537                         }
4538                         // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor
4539                         if (!current['[[Configurable]]']) {
4540                                 if (Desc['[[Configurable]]']) {
4541                                         return false;
4542                                 }
4543                                 if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) {
4544                                         return false;
4545                                 }
4546                         }
4547                         if (this.IsGenericDescriptor(Desc)) ; else if (this.IsDataDescriptor(current) !== this.IsDataDescriptor(Desc)) {
4548                                 if (!current['[[Configurable]]']) {
4549                                         return false;
4550                                 }
4551                                 if (this.IsDataDescriptor(current)) {
4552                                         if (oType !== 'Undefined') {
4553                                                 DefineOwnProperty(this, O, P, {
4554                                                         '[[Configurable]]': current['[[Configurable]]'],
4555                                                         '[[Enumerable]]': current['[[Enumerable]]'],
4556                                                         '[[Get]]': undefined
4557                                                 });
4558                                         }
4559                                 } else if (oType !== 'Undefined') {
4560                                         DefineOwnProperty(this, O, P, {
4561                                                 '[[Configurable]]': current['[[Configurable]]'],
4562                                                 '[[Enumerable]]': current['[[Enumerable]]'],
4563                                                 '[[Value]]': undefined
4564                                         });
4565                                 }
4566                         } else if (this.IsDataDescriptor(current) && this.IsDataDescriptor(Desc)) {
4567                                 if (!current['[[Configurable]]'] && !current['[[Writable]]']) {
4568                                         if ('[[Writable]]' in Desc && Desc['[[Writable]]']) {
4569                                                 return false;
4570                                         }
4571                                         if ('[[Value]]' in Desc && !this.SameValue(Desc['[[Value]]'], current['[[Value]]'])) {
4572                                                 return false;
4573                                         }
4574                                         return true;
4575                                 }
4576                         } else if (this.IsAccessorDescriptor(current) && this.IsAccessorDescriptor(Desc)) {
4577                                 if (!current['[[Configurable]]']) {
4578                                         if ('[[Set]]' in Desc && !this.SameValue(Desc['[[Set]]'], current['[[Set]]'])) {
4579                                                 return false;
4580                                         }
4581                                         if ('[[Get]]' in Desc && !this.SameValue(Desc['[[Get]]'], current['[[Get]]'])) {
4582                                                 return false;
4583                                         }
4584                                         return true;
4585                                 }
4586                         } else {
4587                                 throw new $TypeError$4('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.');
4588                         }
4589                         if (oType !== 'Undefined') {
4590                                 return DefineOwnProperty(this, O, P, Desc);
4591                         }
4592                         return true;
4593                 },
4594
4595                 // https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty
4596                 OrdinaryDefineOwnProperty: function OrdinaryDefineOwnProperty(O, P, Desc) {
4597                         if (this.Type(O) !== 'Object') {
4598                                 throw new $TypeError$4('Assertion failed: O must be an Object');
4599                         }
4600                         if (!this.IsPropertyKey(P)) {
4601                                 throw new $TypeError$4('Assertion failed: P must be a Property Key');
4602                         }
4603                         if (!isPropertyDescriptor(this, Desc)) {
4604                                 throw new $TypeError$4('Assertion failed: Desc must be a Property Descriptor');
4605                         }
4606                         var desc = $gOPD(O, P);
4607                         var current = desc && this.ToPropertyDescriptor(desc);
4608                         var extensible = this.IsExtensible(O);
4609                         return this.ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current);
4610                 },
4611
4612                 // https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty
4613                 OrdinaryGetOwnProperty: function OrdinaryGetOwnProperty(O, P) {
4614                         if (this.Type(O) !== 'Object') {
4615                                 throw new $TypeError$4('Assertion failed: O must be an Object');
4616                         }
4617                         if (!this.IsPropertyKey(P)) {
4618                                 throw new $TypeError$4('Assertion failed: P must be a Property Key');
4619                         }
4620                         if (!src(O, P)) {
4621                                 return void 0;
4622                         }
4623                         if (!$gOPD) {
4624                                 // ES3 fallback
4625                                 var arrayLength = this.IsArray(O) && P === 'length';
4626                                 var regexLastIndex = this.IsRegExp(O) && P === 'lastIndex';
4627                                 return {
4628                                         '[[Configurable]]': !(arrayLength || regexLastIndex),
4629                                         '[[Enumerable]]': $isEnumerable(O, P),
4630                                         '[[Value]]': O[P],
4631                                         '[[Writable]]': true
4632                                 };
4633                         }
4634                         return this.ToPropertyDescriptor($gOPD(O, P));
4635                 },
4636
4637                 // https://www.ecma-international.org/ecma-262/6.0/#sec-arraycreate
4638                 ArrayCreate: function ArrayCreate(length) {
4639                         if (!this.IsInteger(length) || length < 0) {
4640                                 throw new $TypeError$4('Assertion failed: `length` must be an integer Number >= 0');
4641                         }
4642                         if (length > MAX_ARRAY_LENGTH) {
4643                                 throw new $RangeError('length is greater than (2**32 - 1)');
4644                         }
4645                         var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype;
4646                         var A = []; // steps 5 - 7, and 9
4647                         if (proto !== $ArrayPrototype) { // step 8
4648                                 if (!setProto) {
4649                                         throw new $SyntaxError$2('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]');
4650                                 }
4651                                 setProto(A, proto);
4652                         }
4653                         if (length !== 0) { // bypasses the need for step 2
4654                                 A.length = length;
4655                         }
4656                         /* step 10, the above as a shortcut for the below
4657                         this.OrdinaryDefineOwnProperty(A, 'length', {
4658                                 '[[Configurable]]': false,
4659                                 '[[Enumerable]]': false,
4660                                 '[[Value]]': length,
4661                                 '[[Writable]]': true
4662                         });
4663                         */
4664                         return A;
4665                 },
4666
4667                 // eslint-disable-next-line max-statements, max-lines-per-function
4668                 ArraySetLength: function ArraySetLength(A, Desc) {
4669                         if (!this.IsArray(A)) {
4670                                 throw new $TypeError$4('Assertion failed: A must be an Array');
4671                         }
4672                         if (!isPropertyDescriptor(this, Desc)) {
4673                                 throw new $TypeError$4('Assertion failed: Desc must be a Property Descriptor');
4674                         }
4675                         if (!('[[Value]]' in Desc)) {
4676                                 return this.OrdinaryDefineOwnProperty(A, 'length', Desc);
4677                         }
4678                         var newLenDesc = assign$1({}, Desc);
4679                         var newLen = this.ToUint32(Desc['[[Value]]']);
4680                         var numberLen = this.ToNumber(Desc['[[Value]]']);
4681                         if (newLen !== numberLen) {
4682                                 throw new $RangeError('Invalid array length');
4683                         }
4684                         newLenDesc['[[Value]]'] = newLen;
4685                         var oldLenDesc = this.OrdinaryGetOwnProperty(A, 'length');
4686                         if (!this.IsDataDescriptor(oldLenDesc)) {
4687                                 throw new $TypeError$4('Assertion failed: an array had a non-data descriptor on `length`');
4688                         }
4689                         var oldLen = oldLenDesc['[[Value]]'];
4690                         if (newLen >= oldLen) {
4691                                 return this.OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
4692                         }
4693                         if (!oldLenDesc['[[Writable]]']) {
4694                                 return false;
4695                         }
4696                         var newWritable;
4697                         if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) {
4698                                 newWritable = true;
4699                         } else {
4700                                 newWritable = false;
4701                                 newLenDesc['[[Writable]]'] = true;
4702                         }
4703                         var succeeded = this.OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
4704                         if (!succeeded) {
4705                                 return false;
4706                         }
4707                         while (newLen < oldLen) {
4708                                 oldLen -= 1;
4709                                 var deleteSucceeded = delete A[this.ToString(oldLen)];
4710                                 if (!deleteSucceeded) {
4711                                         newLenDesc['[[Value]]'] = oldLen + 1;
4712                                         if (!newWritable) {
4713                                                 newLenDesc['[[Writable]]'] = false;
4714                                                 this.OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
4715                                                 return false;
4716                                         }
4717                                 }
4718                         }
4719                         if (!newWritable) {
4720                                 return this.OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false });
4721                         }
4722                         return true;
4723                 },
4724
4725                 // https://www.ecma-international.org/ecma-262/6.0/#sec-createhtml
4726                 CreateHTML: function CreateHTML(string, tag, attribute, value) {
4727                         if (this.Type(tag) !== 'String' || this.Type(attribute) !== 'String') {
4728                                 throw new $TypeError$4('Assertion failed: `tag` and `attribute` must be strings');
4729                         }
4730                         var str = this.RequireObjectCoercible(string);
4731                         var S = this.ToString(str);
4732                         var p1 = '<' + tag;
4733                         if (attribute !== '') {
4734                                 var V = this.ToString(value);
4735                                 var escapedV = $replace$1(V, /\x22/g, '&quot;');
4736                                 p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22';
4737                         }
4738                         return p1 + '>' + S + '</' + tag + '>';
4739                 },
4740
4741                 // https://www.ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys
4742                 GetOwnPropertyKeys: function GetOwnPropertyKeys(O, Type) {
4743                         if (this.Type(O) !== 'Object') {
4744                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4745                         }
4746                         if (Type === 'Symbol') {
4747                                 return hasSymbols$5 && $gOPS ? $gOPS(O) : [];
4748                         }
4749                         if (Type === 'String') {
4750                                 if (!$gOPN) {
4751                                         return objectKeys(O);
4752                                 }
4753                                 return $gOPN(O);
4754                         }
4755                         throw new $TypeError$4('Assertion failed: `Type` must be `"String"` or `"Symbol"`');
4756                 },
4757
4758                 // https://www.ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring
4759                 SymbolDescriptiveString: function SymbolDescriptiveString(sym) {
4760                         if (this.Type(sym) !== 'Symbol') {
4761                                 throw new $TypeError$4('Assertion failed: `sym` must be a Symbol');
4762                         }
4763                         return $SymbolToString(sym);
4764                 },
4765
4766                 // https://www.ecma-international.org/ecma-262/6.0/#sec-getsubstitution
4767                 // eslint-disable-next-line max-statements, max-params, max-lines-per-function
4768                 GetSubstitution: function GetSubstitution(matched, str, position, captures, replacement) {
4769                         if (this.Type(matched) !== 'String') {
4770                                 throw new $TypeError$4('Assertion failed: `matched` must be a String');
4771                         }
4772                         var matchLength = matched.length;
4773
4774                         if (this.Type(str) !== 'String') {
4775                                 throw new $TypeError$4('Assertion failed: `str` must be a String');
4776                         }
4777                         var stringLength = str.length;
4778
4779                         if (!this.IsInteger(position) || position < 0 || position > stringLength) {
4780                                 throw new $TypeError$4('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + objectInspect(position));
4781                         }
4782
4783                         var ES = this;
4784                         var isStringOrHole = function (capture, index, arr) { return ES.Type(capture) === 'String' || !(index in arr); };
4785                         if (!this.IsArray(captures) || !every(captures, isStringOrHole)) {
4786                                 throw new $TypeError$4('Assertion failed: `captures` must be a List of Strings, got ' + objectInspect(captures));
4787                         }
4788
4789                         if (this.Type(replacement) !== 'String') {
4790                                 throw new $TypeError$4('Assertion failed: `replacement` must be a String');
4791                         }
4792
4793                         var tailPos = position + matchLength;
4794                         var m = captures.length;
4795
4796                         var result = '';
4797                         for (var i = 0; i < replacement.length; i += 1) {
4798                                 // if this is a $, and it's not the end of the replacement
4799                                 var current = replacement[i];
4800                                 var isLast = (i + 1) >= replacement.length;
4801                                 var nextIsLast = (i + 2) >= replacement.length;
4802                                 if (current === '$' && !isLast) {
4803                                         var next = replacement[i + 1];
4804                                         if (next === '$') {
4805                                                 result += '$';
4806                                                 i += 1;
4807                                         } else if (next === '&') {
4808                                                 result += matched;
4809                                                 i += 1;
4810                                         } else if (next === '`') {
4811                                                 result += position === 0 ? '' : strSlice(str, 0, position - 1);
4812                                                 i += 1;
4813                                         } else if (next === "'") {
4814                                                 result += tailPos >= stringLength ? '' : strSlice(str, tailPos);
4815                                                 i += 1;
4816                                         } else {
4817                                                 var nextNext = nextIsLast ? null : replacement[i + 2];
4818                                                 if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) {
4819                                                         // $1 through $9, and not followed by a digit
4820                                                         var n = parseInteger(next, 10);
4821                                                         // if (n > m, impl-defined)
4822                                                         result += (n <= m && this.Type(captures[n - 1]) === 'Undefined') ? '' : captures[n - 1];
4823                                                         i += 1;
4824                                                 } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) {
4825                                                         // $00 through $99
4826                                                         var nn = next + nextNext;
4827                                                         var nnI = parseInteger(nn, 10) - 1;
4828                                                         // if nn === '00' or nn > m, impl-defined
4829                                                         result += (nn <= m && this.Type(captures[nnI]) === 'Undefined') ? '' : captures[nnI];
4830                                                         i += 2;
4831                                                 } else {
4832                                                         result += '$';
4833                                                 }
4834                                         }
4835                                 } else {
4836                                         // the final $, or else not a $
4837                                         result += replacement[i];
4838                                 }
4839                         }
4840                         return result;
4841                 },
4842
4843                 // https://ecma-international.org/ecma-262/6.0/#sec-todatestring
4844                 ToDateString: function ToDateString(tv) {
4845                         if (this.Type(tv) !== 'Number') {
4846                                 throw new $TypeError$4('Assertion failed: `tv` must be a Number');
4847                         }
4848                         if (_isNaN(tv)) {
4849                                 return 'Invalid Date';
4850                         }
4851                         return $Date$1(tv);
4852                 },
4853
4854                 // https://ecma-international.org/ecma-262/6.0/#sec-createlistfromarraylike
4855                 CreateListFromArrayLike: function CreateListFromArrayLike(obj) {
4856                         var elementTypes = arguments.length > 1
4857                                 ? arguments[1]
4858                                 : ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object'];
4859
4860                         if (this.Type(obj) !== 'Object') {
4861                                 throw new $TypeError$4('Assertion failed: `obj` must be an Object');
4862                         }
4863                         if (!this.IsArray(elementTypes)) {
4864                                 throw new $TypeError$4('Assertion failed: `elementTypes`, if provided, must be an array');
4865                         }
4866                         var len = this.ToLength(this.Get(obj, 'length'));
4867                         var list = [];
4868                         var index = 0;
4869                         while (index < len) {
4870                                 var indexName = this.ToString(index);
4871                                 var next = this.Get(obj, indexName);
4872                                 var nextType = this.Type(next);
4873                                 if ($indexOf$1(elementTypes, nextType) < 0) {
4874                                         throw new $TypeError$4('item type ' + nextType + ' is not a valid elementType');
4875                                 }
4876                                 $push(list, next);
4877                                 index += 1;
4878                         }
4879                         return list;
4880                 },
4881
4882                 // https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor
4883                 GetPrototypeFromConstructor: function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) {
4884                         var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic
4885                         if (!this.IsConstructor(constructor)) {
4886                                 throw new $TypeError$4('Assertion failed: `constructor` must be a constructor');
4887                         }
4888                         var proto = this.Get(constructor, 'prototype');
4889                         if (this.Type(proto) !== 'Object') {
4890                                 if (!(constructor instanceof $Function$1)) {
4891                                         // ignore other realms, for now
4892                                         throw new $TypeError$4('cross-realm constructors not currently supported');
4893                                 }
4894                                 proto = intrinsic;
4895                         }
4896                         return proto;
4897                 },
4898
4899                 // https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname
4900                 SetFunctionName: function SetFunctionName(F, name) {
4901                         if (typeof F !== 'function') {
4902                                 throw new $TypeError$4('Assertion failed: `F` must be a function');
4903                         }
4904                         if (!this.IsExtensible(F) || src(F, 'name')) {
4905                                 throw new $TypeError$4('Assertion failed: `F` must be extensible, and must not have a `name` own property');
4906                         }
4907                         var nameType = this.Type(name);
4908                         if (nameType !== 'Symbol' && nameType !== 'String') {
4909                                 throw new $TypeError$4('Assertion failed: `name` must be a Symbol or a String');
4910                         }
4911                         if (nameType === 'Symbol') {
4912                                 var description = getSymbolDescription(name);
4913                                 // eslint-disable-next-line no-param-reassign
4914                                 name = typeof description === 'undefined' ? '' : '[' + description + ']';
4915                         }
4916                         if (arguments.length > 2) {
4917                                 var prefix = arguments[2];
4918                                 // eslint-disable-next-line no-param-reassign
4919                                 name = prefix + ' ' + name;
4920                         }
4921                         return this.DefinePropertyOrThrow(F, 'name', {
4922                                 '[[Value]]': name,
4923                                 '[[Writable]]': false,
4924                                 '[[Enumerable]]': false,
4925                                 '[[Configurable]]': true
4926                         });
4927                 }
4928         });
4929
4930         delete ES6.CheckObjectCoercible; // renamed in ES6 to RequireObjectCoercible
4931
4932         var es2015$1 = ES6;
4933
4934         var es6$1 = es2015$1;
4935
4936         var implementation$3 = function find(predicate) {
4937                 var list = es6$1.ToObject(this);
4938                 var length = es6$1.ToLength(list.length);
4939                 if (!es6$1.IsCallable(predicate)) {
4940                         throw new TypeError('Array#find: predicate must be a function');
4941                 }
4942                 if (length === 0) {
4943                         return void 0;
4944                 }
4945                 var thisArg;
4946                 if (arguments.length > 0) {
4947                         thisArg = arguments[1];
4948                 }
4949
4950                 for (var i = 0, value; i < length; i++) {
4951                         value = list[i];
4952                         // inlined for performance: if (ES.Call(predicate, thisArg, [value, i, list])) {
4953                         if (predicate.apply(thisArg, [value, i, list])) {
4954                                 return value;
4955                         }
4956                 }
4957                 return void 0;
4958         };
4959
4960         var polyfill$4 = function getPolyfill() {
4961                 // Detect if an implementation exists
4962                 // Detect early implementations which skipped holes in sparse arrays
4963                 // eslint-disable-next-line no-sparse-arrays
4964                 var implemented = Array.prototype.find && [, 1].find(function () {
4965                         return true;
4966                 }) !== 1;
4967
4968                 // eslint-disable-next-line global-require
4969                 return implemented ? Array.prototype.find : implementation$3;
4970         };
4971
4972         var shim$8 = function shimArrayPrototypeFind() {
4973                 var polyfill = polyfill$4();
4974
4975                 defineProperties_1(Array.prototype, { find: polyfill }, {
4976                         find: function () {
4977                                 return Array.prototype.find !== polyfill;
4978                         }
4979                 });
4980
4981                 return polyfill;
4982         };
4983
4984         var slice$2 = Array.prototype.slice;
4985
4986         var polyfill$5 = polyfill$4();
4987
4988         var boundFindShim = function find(array, predicate) { // eslint-disable-line no-unused-vars
4989                 es6$1.RequireObjectCoercible(array);
4990                 var args = slice$2.call(arguments, 1);
4991                 return polyfill$5.apply(array, args);
4992         };
4993
4994         defineProperties_1(boundFindShim, {
4995                 getPolyfill: polyfill$4,
4996                 implementation: implementation$3,
4997                 shim: shim$8
4998         });
4999
5000         var array_prototype_find = boundFindShim;
5001
5002         var implementation$4 = function findIndex(predicate) {
5003                 var list = es6$1.ToObject(this);
5004                 var length = es6$1.ToLength(list.length);
5005                 if (!es6$1.IsCallable(predicate)) {
5006                         throw new TypeError('Array#findIndex: predicate must be a function');
5007                 }
5008                 if (length === 0) { return -1; }
5009                 var thisArg = arguments[1];
5010                 for (var i = 0, value; i < length; i++) {
5011                         value = list[i];
5012                         if (es6$1.Call(predicate, thisArg, [value, i, list])) { return i; }
5013                 }
5014                 return -1;
5015         };
5016
5017         var polyfill$6 = function getPolyfill() {
5018                 // Detect if an implementation exists
5019                 // Detect early implementations which skipped holes in sparse arrays
5020                 var implemented = Array.prototype.findIndex && ([, 1].findIndex(function (item, idx) {
5021                         return idx === 0;
5022                 }) === 0);
5023
5024
5025                 return implemented ? Array.prototype.findIndex : implementation$4;
5026         };
5027
5028         var shim$9 = function shimArrayPrototypeFindIndex() {
5029                 var polyfill = polyfill$6();
5030
5031                 defineProperties_1(Array.prototype, { findIndex: polyfill }, {
5032                         findIndex: function () {
5033                                 return Array.prototype.findIndex !== polyfill;
5034                         }
5035                 });
5036
5037                 return polyfill;
5038         };
5039
5040         var slice$3 = Array.prototype.slice;
5041
5042         var polyfill$7 = polyfill$6();
5043
5044         var boundShim = function findIndex(array, predicate) {
5045                 es6$1.RequireObjectCoercible(array);
5046                 var args = slice$3.call(arguments, 1);
5047                 return polyfill$7.apply(array, args);
5048         };
5049
5050         defineProperties_1(boundShim, {
5051                 implementation: implementation$4,
5052                 getPolyfill: polyfill$6,
5053                 shim: shim$9
5054         });
5055
5056         var array_prototype_findindex = boundShim;
5057
5058         var supportsDescriptors$1 = defineProperties_1.supportsDescriptors;
5059
5060         /*! https://mths.be/array-from v0.2.0 by @mathias */
5061         var implementation$5 = function from(arrayLike) {
5062                 var defineProperty = supportsDescriptors$1 ? Object.defineProperty : function put(object, key, descriptor) {
5063                         object[key] = descriptor.value;
5064                 };
5065                 var C = this;
5066                 if (arrayLike === null || typeof arrayLike === 'undefined') {
5067                         throw new TypeError('`Array.from` requires an array-like object, not `null` or `undefined`');
5068                 }
5069                 var items = es6$1.ToObject(arrayLike);
5070
5071                 var mapFn, T;
5072                 if (typeof arguments[1] !== 'undefined') {
5073                         mapFn = arguments[1];
5074                         if (!es6$1.IsCallable(mapFn)) {
5075                                 throw new TypeError('When provided, the second argument to `Array.from` must be a function');
5076                         }
5077                         if (arguments.length > 2) {
5078                                 T = arguments[2];
5079                         }
5080                 }
5081
5082                 var len = es6$1.ToLength(items.length);
5083                 var A = es6$1.IsCallable(C) ? es6$1.ToObject(new C(len)) : new Array(len);
5084                 var k = 0;
5085                 var kValue, mappedValue;
5086                 while (k < len) {
5087                         kValue = items[k];
5088                         if (mapFn) {
5089                                 mappedValue = typeof T === 'undefined' ? mapFn(kValue, k) : es6$1.Call(mapFn, T, [kValue, k]);
5090                         } else {
5091                                 mappedValue = kValue;
5092                         }
5093                         defineProperty(A, k, {
5094                                 'configurable': true,
5095                                 'enumerable': true,
5096                                 'value': mappedValue,
5097                                 'writable': true
5098                         });
5099                         k += 1;
5100                 }
5101                 A.length = len;
5102                 return A;
5103         };
5104
5105         var tryCall = function (fn) {
5106                 try {
5107                         fn();
5108                         return true;
5109                 } catch (e) {
5110                         return false;
5111                 }
5112         };
5113
5114         var polyfill$8 = function getPolyfill() {
5115                 var implemented = es6$1.IsCallable(Array.from)
5116                         && tryCall(function () { Array.from({ 'length': -Infinity }); })
5117                         && !tryCall(function () { Array.from([], undefined); });
5118
5119                 return implemented ? Array.from : implementation$5;
5120         };
5121
5122         var shim$a = function shimArrayFrom() {
5123                 var polyfill = polyfill$8();
5124
5125                 defineProperties_1(Array, { 'from': polyfill }, {
5126                         'from': function () {
5127                                 return Array.from !== polyfill;
5128                         }
5129                 });
5130
5131                 return polyfill;
5132         };
5133
5134         // eslint-disable-next-line no-unused-vars
5135         var boundFromShim = function from(array) {
5136             // eslint-disable-next-line no-invalid-this
5137                 return implementation$5.apply(this || Array, arguments);
5138         };
5139
5140         defineProperties_1(boundFromShim, {
5141                 'getPolyfill': polyfill$8,
5142                 'implementation': implementation$5,
5143                 'shim': shim$a
5144         });
5145
5146         var array_from = boundFromShim;
5147
5148         var originalGetProto = GetIntrinsic('%Object.getPrototypeOf%', true);
5149         var $ArrayProto$1 = GetIntrinsic('%Array.prototype%');
5150
5151         var getProto$1 = originalGetProto || (
5152                 // eslint-disable-next-line no-proto
5153                 [].__proto__ === $ArrayProto$1
5154                         ? function (O) {
5155                                 return O.__proto__; // eslint-disable-line no-proto
5156                         }
5157                         : null
5158         );
5159
5160         var $TypeError$5 = GetIntrinsic('%TypeError%');
5161         var $arrayPush = callBound('Array.prototype.push');
5162
5163
5164         var ES2016 = assign$1(assign$1({}, es2015$1), {
5165                 // https://www.ecma-international.org/ecma-262/7.0/#sec-samevaluenonnumber
5166                 SameValueNonNumber: function SameValueNonNumber(x, y) {
5167                         if (typeof x === 'number' || typeof x !== typeof y) {
5168                                 throw new TypeError('SameValueNonNumber requires two non-number values of the same type.');
5169                         }
5170                         return this.SameValue(x, y);
5171                 },
5172
5173                 // https://www.ecma-international.org/ecma-262/7.0/#sec-iterabletoarraylike
5174                 IterableToArrayLike: function IterableToArrayLike(items) {
5175                         var usingIterator = getIteratorMethod(this, items);
5176                         if (typeof usingIterator !== 'undefined') {
5177                                 var iterator = this.GetIterator(items, usingIterator);
5178                                 var values = [];
5179                                 var next = true;
5180                                 while (next) {
5181                                         next = this.IteratorStep(iterator);
5182                                         if (next) {
5183                                                 var nextValue = this.IteratorValue(next);
5184                                                 $arrayPush(values, nextValue);
5185                                         }
5186                                 }
5187                                 return values;
5188                         }
5189
5190                         return this.ToObject(items);
5191                 },
5192
5193                 // https://ecma-international.org/ecma-262/7.0/#sec-ordinarygetprototypeof
5194                 OrdinaryGetPrototypeOf: function (O) {
5195                         if (this.Type(O) !== 'Object') {
5196                                 throw new $TypeError$5('Assertion failed: O must be an Object');
5197                         }
5198                         if (!getProto$1) {
5199                                 throw new $TypeError$5('This environment does not support fetching prototypes.');
5200                         }
5201                         return getProto$1(O);
5202                 },
5203
5204                 // https://ecma-international.org/ecma-262/7.0/#sec-ordinarysetprototypeof
5205                 OrdinarySetPrototypeOf: function (O, V) {
5206                         if (this.Type(V) !== 'Object' && this.Type(V) !== 'Null') {
5207                                 throw new $TypeError$5('Assertion failed: V must be Object or Null');
5208                         }
5209                         /*
5210                         var extensible = this.IsExtensible(O);
5211                         var current = this.OrdinaryGetPrototypeOf(O);
5212                         if (this.SameValue(V, current)) {
5213                                 return true;
5214                         }
5215                         if (!extensible) {
5216                                 return false;
5217                         }
5218                         */
5219                         try {
5220                                 setProto(O, V);
5221                         } catch (e) {
5222                                 return false;
5223                         }
5224                         return this.OrdinaryGetPrototypeOf(O) === V;
5225                         /*
5226                         var p = V;
5227                         var done = false;
5228                         while (!done) {
5229                                 if (p === null) {
5230                                         done = true;
5231                                 } else if (this.SameValue(p, O)) {
5232                                         return false;
5233                                 } else {
5234                                         if (wat) {
5235                                                 done = true;
5236                                         } else {
5237                                                 p = p.[[Prototype]];
5238                                         }
5239                                 }
5240                          }
5241                          O.[[Prototype]] = V;
5242                          return true;
5243                          */
5244                 }
5245         });
5246
5247         var es2016 = ES2016;
5248
5249         var es7 = es2016;
5250
5251         var isEnumerable$1 = functionBind.call(Function.call, Object.prototype.propertyIsEnumerable);
5252
5253         var implementation$6 = function values(O) {
5254                 var obj = es7.RequireObjectCoercible(O);
5255                 var vals = [];
5256                 for (var key in obj) {
5257                         if (src(obj, key) && isEnumerable$1(obj, key)) {
5258                                 vals.push(obj[key]);
5259                         }
5260                 }
5261                 return vals;
5262         };
5263
5264         var polyfill$9 = function getPolyfill() {
5265                 return typeof Object.values === 'function' ? Object.values : implementation$6;
5266         };
5267
5268         var shim$b = function shimValues() {
5269                 var polyfill = polyfill$9();
5270                 defineProperties_1(Object, { values: polyfill }, {
5271                         values: function testValues() {
5272                                 return Object.values !== polyfill;
5273                         }
5274                 });
5275                 return polyfill;
5276         };
5277
5278         var polyfill$a = polyfill$9();
5279
5280         defineProperties_1(polyfill$a, {
5281                 getPolyfill: polyfill$9,
5282                 implementation: implementation$6,
5283                 shim: shim$b
5284         });
5285
5286         var object_values = polyfill$a;
5287
5288         // modified from https://github.com/es-shims/es6-shim
5289
5290
5291         var canBeObject = function (obj) {
5292                 return typeof obj !== 'undefined' && obj !== null;
5293         };
5294         var hasSymbols$6 = shams();
5295         var toObject = Object;
5296         var push = functionBind.call(Function.call, Array.prototype.push);
5297         var propIsEnumerable = functionBind.call(Function.call, Object.prototype.propertyIsEnumerable);
5298         var originalGetSymbols = hasSymbols$6 ? Object.getOwnPropertySymbols : null;
5299
5300         var implementation$7 = function assign(target, source1) {
5301                 var arguments$1 = arguments;
5302
5303                 if (!canBeObject(target)) { throw new TypeError('target must be an object'); }
5304                 var objTarget = toObject(target);
5305                 var s, source, i, props, syms, value, key;
5306                 for (s = 1; s < arguments.length; ++s) {
5307                         source = toObject(arguments$1[s]);
5308                         props = objectKeys(source);
5309                         var getSymbols = hasSymbols$6 && (Object.getOwnPropertySymbols || originalGetSymbols);
5310                         if (getSymbols) {
5311                                 syms = getSymbols(source);
5312                                 for (i = 0; i < syms.length; ++i) {
5313                                         key = syms[i];
5314                                         if (propIsEnumerable(source, key)) {
5315                                                 push(props, key);
5316                                         }
5317                                 }
5318                         }
5319                         for (i = 0; i < props.length; ++i) {
5320                                 key = props[i];
5321                                 value = source[key];
5322                                 if (propIsEnumerable(source, key)) {
5323                                         objTarget[key] = value;
5324                                 }
5325                         }
5326                 }
5327                 return objTarget;
5328         };
5329
5330         var lacksProperEnumerationOrder = function () {
5331                 if (!Object.assign) {
5332                         return false;
5333                 }
5334                 // v8, specifically in node 4.x, has a bug with incorrect property enumeration order
5335                 // note: this does not detect the bug unless there's 20 characters
5336                 var str = 'abcdefghijklmnopqrst';
5337                 var letters = str.split('');
5338                 var map = {};
5339                 for (var i = 0; i < letters.length; ++i) {
5340                         map[letters[i]] = letters[i];
5341                 }
5342                 var obj = Object.assign({}, map);
5343                 var actual = '';
5344                 for (var k in obj) {
5345                         actual += k;
5346                 }
5347                 return str !== actual;
5348         };
5349
5350         var assignHasPendingExceptions = function () {
5351                 if (!Object.assign || !Object.preventExtensions) {
5352                         return false;
5353                 }
5354                 // Firefox 37 still has "pending exception" logic in its Object.assign implementation,
5355                 // which is 72% slower than our shim, and Firefox 40's native implementation.
5356                 var thrower = Object.preventExtensions({ 1: 2 });
5357                 try {
5358                         Object.assign(thrower, 'xy');
5359                 } catch (e) {
5360                         return thrower[1] === 'y';
5361                 }
5362                 return false;
5363         };
5364
5365         var polyfill$b = function getPolyfill() {
5366                 if (!Object.assign) {
5367                         return implementation$7;
5368                 }
5369                 if (lacksProperEnumerationOrder()) {
5370                         return implementation$7;
5371                 }
5372                 if (assignHasPendingExceptions()) {
5373                         return implementation$7;
5374                 }
5375                 return Object.assign;
5376         };
5377
5378         var shim$c = function shimAssign() {
5379                 var polyfill = polyfill$b();
5380                 defineProperties_1(
5381                         Object,
5382                         { assign: polyfill },
5383                         { assign: function () { return Object.assign !== polyfill; } }
5384                 );
5385                 return polyfill;
5386         };
5387
5388         var polyfill$c = polyfill$b();
5389
5390         defineProperties_1(polyfill$c, {
5391                 getPolyfill: polyfill$b,
5392                 implementation: implementation$7,
5393                 shim: shim$c
5394         });
5395
5396         var object_assign = polyfill$c;
5397
5398         /**
5399          * @this {Promise}
5400          */
5401         function finallyConstructor(callback) {
5402           var constructor = this.constructor;
5403           return this.then(
5404             function(value) {
5405               // @ts-ignore
5406               return constructor.resolve(callback()).then(function() {
5407                 return value;
5408               });
5409             },
5410             function(reason) {
5411               // @ts-ignore
5412               return constructor.resolve(callback()).then(function() {
5413                 // @ts-ignore
5414                 return constructor.reject(reason);
5415               });
5416             }
5417           );
5418         }
5419
5420         // Store setTimeout reference so promise-polyfill will be unaffected by
5421         // other code modifying setTimeout (like sinon.useFakeTimers())
5422         var setTimeoutFunc = setTimeout;
5423
5424         function isArray$4(x) {
5425           return Boolean(x && typeof x.length !== 'undefined');
5426         }
5427
5428         function noop$1() {}
5429
5430         // Polyfill for Function.prototype.bind
5431         function bind$2(fn, thisArg) {
5432           return function() {
5433             fn.apply(thisArg, arguments);
5434           };
5435         }
5436
5437         /**
5438          * @constructor
5439          * @param {Function} fn
5440          */
5441         function Promise$1(fn) {
5442           if (!(this instanceof Promise$1))
5443             { throw new TypeError('Promises must be constructed via new'); }
5444           if (typeof fn !== 'function') { throw new TypeError('not a function'); }
5445           /** @type {!number} */
5446           this._state = 0;
5447           /** @type {!boolean} */
5448           this._handled = false;
5449           /** @type {Promise|undefined} */
5450           this._value = undefined;
5451           /** @type {!Array<!Function>} */
5452           this._deferreds = [];
5453
5454           doResolve(fn, this);
5455         }
5456
5457         function handle(self, deferred) {
5458           while (self._state === 3) {
5459             self = self._value;
5460           }
5461           if (self._state === 0) {
5462             self._deferreds.push(deferred);
5463             return;
5464           }
5465           self._handled = true;
5466           Promise$1._immediateFn(function() {
5467             var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
5468             if (cb === null) {
5469               (self._state === 1 ? resolve : reject)(deferred.promise, self._value);
5470               return;
5471             }
5472             var ret;
5473             try {
5474               ret = cb(self._value);
5475             } catch (e) {
5476               reject(deferred.promise, e);
5477               return;
5478             }
5479             resolve(deferred.promise, ret);
5480           });
5481         }
5482
5483         function resolve(self, newValue) {
5484           try {
5485             // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
5486             if (newValue === self)
5487               { throw new TypeError('A promise cannot be resolved with itself.'); }
5488             if (
5489               newValue &&
5490               (typeof newValue === 'object' || typeof newValue === 'function')
5491             ) {
5492               var then = newValue.then;
5493               if (newValue instanceof Promise$1) {
5494                 self._state = 3;
5495                 self._value = newValue;
5496                 finale(self);
5497                 return;
5498               } else if (typeof then === 'function') {
5499                 doResolve(bind$2(then, newValue), self);
5500                 return;
5501               }
5502             }
5503             self._state = 1;
5504             self._value = newValue;
5505             finale(self);
5506           } catch (e) {
5507             reject(self, e);
5508           }
5509         }
5510
5511         function reject(self, newValue) {
5512           self._state = 2;
5513           self._value = newValue;
5514           finale(self);
5515         }
5516
5517         function finale(self) {
5518           if (self._state === 2 && self._deferreds.length === 0) {
5519             Promise$1._immediateFn(function() {
5520               if (!self._handled) {
5521                 Promise$1._unhandledRejectionFn(self._value);
5522               }
5523             });
5524           }
5525
5526           for (var i = 0, len = self._deferreds.length; i < len; i++) {
5527             handle(self, self._deferreds[i]);
5528           }
5529           self._deferreds = null;
5530         }
5531
5532         /**
5533          * @constructor
5534          */
5535         function Handler(onFulfilled, onRejected, promise) {
5536           this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
5537           this.onRejected = typeof onRejected === 'function' ? onRejected : null;
5538           this.promise = promise;
5539         }
5540
5541         /**
5542          * Take a potentially misbehaving resolver function and make sure
5543          * onFulfilled and onRejected are only called once.
5544          *
5545          * Makes no guarantees about asynchrony.
5546          */
5547         function doResolve(fn, self) {
5548           var done = false;
5549           try {
5550             fn(
5551               function(value) {
5552                 if (done) { return; }
5553                 done = true;
5554                 resolve(self, value);
5555               },
5556               function(reason) {
5557                 if (done) { return; }
5558                 done = true;
5559                 reject(self, reason);
5560               }
5561             );
5562           } catch (ex) {
5563             if (done) { return; }
5564             done = true;
5565             reject(self, ex);
5566           }
5567         }
5568
5569         Promise$1.prototype['catch'] = function(onRejected) {
5570           return this.then(null, onRejected);
5571         };
5572
5573         Promise$1.prototype.then = function(onFulfilled, onRejected) {
5574           // @ts-ignore
5575           var prom = new this.constructor(noop$1);
5576
5577           handle(this, new Handler(onFulfilled, onRejected, prom));
5578           return prom;
5579         };
5580
5581         Promise$1.prototype['finally'] = finallyConstructor;
5582
5583         Promise$1.all = function(arr) {
5584           return new Promise$1(function(resolve, reject) {
5585             if (!isArray$4(arr)) {
5586               return reject(new TypeError('Promise.all accepts an array'));
5587             }
5588
5589             var args = Array.prototype.slice.call(arr);
5590             if (args.length === 0) { return resolve([]); }
5591             var remaining = args.length;
5592
5593             function res(i, val) {
5594               try {
5595                 if (val && (typeof val === 'object' || typeof val === 'function')) {
5596                   var then = val.then;
5597                   if (typeof then === 'function') {
5598                     then.call(
5599                       val,
5600                       function(val) {
5601                         res(i, val);
5602                       },
5603                       reject
5604                     );
5605                     return;
5606                   }
5607                 }
5608                 args[i] = val;
5609                 if (--remaining === 0) {
5610                   resolve(args);
5611                 }
5612               } catch (ex) {
5613                 reject(ex);
5614               }
5615             }
5616
5617             for (var i = 0; i < args.length; i++) {
5618               res(i, args[i]);
5619             }
5620           });
5621         };
5622
5623         Promise$1.resolve = function(value) {
5624           if (value && typeof value === 'object' && value.constructor === Promise$1) {
5625             return value;
5626           }
5627
5628           return new Promise$1(function(resolve) {
5629             resolve(value);
5630           });
5631         };
5632
5633         Promise$1.reject = function(value) {
5634           return new Promise$1(function(resolve, reject) {
5635             reject(value);
5636           });
5637         };
5638
5639         Promise$1.race = function(arr) {
5640           return new Promise$1(function(resolve, reject) {
5641             if (!isArray$4(arr)) {
5642               return reject(new TypeError('Promise.race accepts an array'));
5643             }
5644
5645             for (var i = 0, len = arr.length; i < len; i++) {
5646               Promise$1.resolve(arr[i]).then(resolve, reject);
5647             }
5648           });
5649         };
5650
5651         // Use polyfill for setImmediate for performance gains
5652         Promise$1._immediateFn =
5653           // @ts-ignore
5654           (typeof setImmediate === 'function' &&
5655             function(fn) {
5656               // @ts-ignore
5657               setImmediate(fn);
5658             }) ||
5659           function(fn) {
5660             setTimeoutFunc(fn, 0);
5661           };
5662
5663         Promise$1._unhandledRejectionFn = function _unhandledRejectionFn(err) {
5664           if (typeof console !== 'undefined' && console) {
5665             console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console
5666           }
5667         };
5668
5669         /** @suppress {undefinedVars} */
5670         var globalNS = (function() {
5671           // the only reliable means to get the global object is
5672           // `Function('return this')()`
5673           // However, this causes CSP violations in Chrome apps.
5674           if (typeof self !== 'undefined') {
5675             return self;
5676           }
5677           if (typeof window !== 'undefined') {
5678             return window;
5679           }
5680           if (typeof global !== 'undefined') {
5681             return global;
5682           }
5683           throw new Error('unable to locate global object');
5684         })();
5685
5686         if (!('Promise' in globalNS)) {
5687           globalNS['Promise'] = Promise$1;
5688         } else if (!globalNS.Promise.prototype['finally']) {
5689           globalNS.Promise.prototype['finally'] = finallyConstructor;
5690         }
5691
5692         var polyfill$d = /*#__PURE__*/Object.freeze({
5693                 __proto__: null
5694         });
5695
5696         var setAsap = createCommonjsModule(function (module) {
5697         (function (thisVar, undefined$1) {
5698                 var main = (typeof window === 'object' && window) || (typeof commonjsGlobal === 'object' && commonjsGlobal) ||
5699                         typeof self === 'object' && self || thisVar;
5700
5701                 var hasSetImmediate = typeof setImmediate === 'function';
5702                 var hasNextTick = typeof process === 'object' && !!process && typeof process.nextTick === 'function';
5703                 var index = 0;
5704
5705                 function getNewIndex() {
5706                         if (index === 9007199254740991) {
5707                                 return 0;
5708                         }
5709                         return ++index;
5710                 }
5711
5712                 var setAsap = (function () {
5713                         var hiddenDiv, scriptEl, timeoutFn, callbacks;
5714
5715                         // Modern browsers, fastest async
5716                         if (main.MutationObserver) {
5717                                 return function setAsap(callback) {
5718                                         hiddenDiv = document.createElement("div");
5719                                         (new MutationObserver(function() {
5720                                                 callback();
5721                                                 hiddenDiv = null;
5722                                         })).observe(hiddenDiv, { attributes: true });
5723                                         hiddenDiv.setAttribute('i', '1');
5724                                 };
5725
5726                         // Browsers that support postMessage
5727                         } else if (!hasSetImmediate && main.postMessage && !main.importScripts && main.addEventListener) {
5728
5729                                 var MESSAGE_PREFIX = "com.setImmediate" + Math.random();
5730                                 callbacks = {};
5731
5732                                 var onGlobalMessage = function (event) {
5733                                         if (event.source === main && event.data.indexOf(MESSAGE_PREFIX) === 0) {
5734                                                 var i = +event.data.split(':')[1];
5735                                                 callbacks[i]();
5736                                                 delete callbacks[i];
5737                                         }
5738                                 };
5739
5740                                 main.addEventListener("message", onGlobalMessage, false);
5741
5742                                 return function setAsap(callback) {
5743                                         var i = getNewIndex();
5744                                         callbacks[i] = callback;
5745                                         main.postMessage(MESSAGE_PREFIX + ':' + i, "*");
5746                                 };
5747
5748                                 // IE browsers without postMessage
5749                         } else if (!hasSetImmediate && main.document && 'onreadystatechange' in document.createElement('script')) {
5750
5751                                 return function setAsap(callback) {
5752                                         scriptEl = document.createElement("script");
5753                                         scriptEl.onreadystatechange = function onreadystatechange() {
5754                                                 scriptEl.onreadystatechange = null;
5755                                                 scriptEl.parentNode.removeChild(scriptEl);
5756                                                 scriptEl = null;
5757                                                 callback();
5758                                         };
5759                                         document.body.appendChild(scriptEl);
5760                                 };
5761
5762                         // All other browsers and node
5763                         } else {
5764
5765                                 timeoutFn = (hasSetImmediate && setImmediate) || (hasNextTick && process.nextTick) || setTimeout;
5766                                 return function setAsap(callback) {
5767                                         timeoutFn(callback);
5768                                 };
5769                         }
5770
5771                 })();
5772
5773                 if ( module.exports) {
5774                         module.exports = setAsap;
5775                 } else if (typeof commonjsRequire !== 'undefined' && commonjsRequire.amd) {
5776                         undefined$1(function () {
5777                                 return setAsap;
5778                         });
5779                 } else {
5780                         main.setAsap = setAsap;
5781                 }
5782         })(commonjsGlobal);
5783         });
5784
5785         var performanceNow = createCommonjsModule(function (module) {
5786         // Generated by CoffeeScript 1.12.2
5787         (function() {
5788           var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;
5789
5790           if ((typeof performance !== "undefined" && performance !== null) && performance.now) {
5791             module.exports = function() {
5792               return performance.now();
5793             };
5794           } else if ((typeof process !== "undefined" && process !== null) && process.hrtime) {
5795             module.exports = function() {
5796               return (getNanoSeconds() - nodeLoadTime) / 1e6;
5797             };
5798             hrtime = process.hrtime;
5799             getNanoSeconds = function() {
5800               var hr;
5801               hr = hrtime();
5802               return hr[0] * 1e9 + hr[1];
5803             };
5804             moduleLoadTime = getNanoSeconds();
5805             upTime = process.uptime() * 1e9;
5806             nodeLoadTime = moduleLoadTime - upTime;
5807           } else if (Date.now) {
5808             module.exports = function() {
5809               return Date.now() - loadTime;
5810             };
5811             loadTime = Date.now();
5812           } else {
5813             module.exports = function() {
5814               return new Date().getTime() - loadTime;
5815             };
5816             loadTime = new Date().getTime();
5817           }
5818
5819         }).call(commonjsGlobal);
5820
5821
5822         });
5823
5824         var root = typeof window === 'undefined' ? commonjsGlobal : window
5825           , vendors = ['moz', 'webkit']
5826           , suffix = 'AnimationFrame'
5827           , raf = root['request' + suffix]
5828           , caf = root['cancel' + suffix] || root['cancelRequest' + suffix];
5829
5830         for(var i = 0; !raf && i < vendors.length; i++) {
5831           raf = root[vendors[i] + 'Request' + suffix];
5832           caf = root[vendors[i] + 'Cancel' + suffix]
5833               || root[vendors[i] + 'CancelRequest' + suffix];
5834         }
5835
5836         // Some versions of FF have rAF but not cAF
5837         if(!raf || !caf) {
5838           var last = 0
5839             , id$2 = 0
5840             , queue = []
5841             , frameDuration = 1000 / 60;
5842
5843           raf = function(callback) {
5844             if(queue.length === 0) {
5845               var _now = performanceNow()
5846                 , next = Math.max(0, frameDuration - (_now - last));
5847               last = next + _now;
5848               setTimeout(function() {
5849                 var cp = queue.slice(0);
5850                 // Clear queue here to prevent
5851                 // callbacks from appending listeners
5852                 // to the current frame's queue
5853                 queue.length = 0;
5854                 for(var i = 0; i < cp.length; i++) {
5855                   if(!cp[i].cancelled) {
5856                     try{
5857                       cp[i].callback(last);
5858                     } catch(e) {
5859                       setTimeout(function() { throw e }, 0);
5860                     }
5861                   }
5862                 }
5863               }, Math.round(next));
5864             }
5865             queue.push({
5866               handle: ++id$2,
5867               callback: callback,
5868               cancelled: false
5869             });
5870             return id$2
5871           };
5872
5873           caf = function(handle) {
5874             for(var i = 0; i < queue.length; i++) {
5875               if(queue[i].handle === handle) {
5876                 queue[i].cancelled = true;
5877               }
5878             }
5879           };
5880         }
5881
5882         var raf_1 = function(fn) {
5883           // Wrap in a new function to prevent
5884           // `cancel` potentially being assigned
5885           // to the native rAF function
5886           return raf.call(root, fn)
5887         };
5888         var cancel = function() {
5889           caf.apply(root, arguments);
5890         };
5891         var polyfill$e = function(object) {
5892           if (!object) {
5893             object = root;
5894           }
5895           object.requestAnimationFrame = raf;
5896           object.cancelAnimationFrame = caf;
5897         };
5898         raf_1.cancel = cancel;
5899         raf_1.polyfill = polyfill$e;
5900
5901         var support = {
5902           searchParams: 'URLSearchParams' in self,
5903           iterable: 'Symbol' in self && 'iterator' in Symbol,
5904           blob:
5905             'FileReader' in self &&
5906             'Blob' in self &&
5907             (function() {
5908               try {
5909                 new Blob();
5910                 return true
5911               } catch (e) {
5912                 return false
5913               }
5914             })(),
5915           formData: 'FormData' in self,
5916           arrayBuffer: 'ArrayBuffer' in self
5917         };
5918
5919         function isDataView(obj) {
5920           return obj && DataView.prototype.isPrototypeOf(obj)
5921         }
5922
5923         if (support.arrayBuffer) {
5924           var viewClasses = [
5925             '[object Int8Array]',
5926             '[object Uint8Array]',
5927             '[object Uint8ClampedArray]',
5928             '[object Int16Array]',
5929             '[object Uint16Array]',
5930             '[object Int32Array]',
5931             '[object Uint32Array]',
5932             '[object Float32Array]',
5933             '[object Float64Array]'
5934           ];
5935
5936           var isArrayBufferView =
5937             ArrayBuffer.isView ||
5938             function(obj) {
5939               return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
5940             };
5941         }
5942
5943         function normalizeName(name) {
5944           if (typeof name !== 'string') {
5945             name = String(name);
5946           }
5947           if (/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(name)) {
5948             throw new TypeError('Invalid character in header field name')
5949           }
5950           return name.toLowerCase()
5951         }
5952
5953         function normalizeValue(value) {
5954           if (typeof value !== 'string') {
5955             value = String(value);
5956           }
5957           return value
5958         }
5959
5960         // Build a destructive iterator for the value list
5961         function iteratorFor(items) {
5962           var iterator = {
5963             next: function() {
5964               var value = items.shift();
5965               return {done: value === undefined, value: value}
5966             }
5967           };
5968
5969           if (support.iterable) {
5970             iterator[Symbol.iterator] = function() {
5971               return iterator
5972             };
5973           }
5974
5975           return iterator
5976         }
5977
5978         function Headers(headers) {
5979           this.map = {};
5980
5981           if (headers instanceof Headers) {
5982             headers.forEach(function(value, name) {
5983               this.append(name, value);
5984             }, this);
5985           } else if (Array.isArray(headers)) {
5986             headers.forEach(function(header) {
5987               this.append(header[0], header[1]);
5988             }, this);
5989           } else if (headers) {
5990             Object.getOwnPropertyNames(headers).forEach(function(name) {
5991               this.append(name, headers[name]);
5992             }, this);
5993           }
5994         }
5995
5996         Headers.prototype.append = function(name, value) {
5997           name = normalizeName(name);
5998           value = normalizeValue(value);
5999           var oldValue = this.map[name];
6000           this.map[name] = oldValue ? oldValue + ', ' + value : value;
6001         };
6002
6003         Headers.prototype['delete'] = function(name) {
6004           delete this.map[normalizeName(name)];
6005         };
6006
6007         Headers.prototype.get = function(name) {
6008           name = normalizeName(name);
6009           return this.has(name) ? this.map[name] : null
6010         };
6011
6012         Headers.prototype.has = function(name) {
6013           return this.map.hasOwnProperty(normalizeName(name))
6014         };
6015
6016         Headers.prototype.set = function(name, value) {
6017           this.map[normalizeName(name)] = normalizeValue(value);
6018         };
6019
6020         Headers.prototype.forEach = function(callback, thisArg) {
6021           for (var name in this.map) {
6022             if (this.map.hasOwnProperty(name)) {
6023               callback.call(thisArg, this.map[name], name, this);
6024             }
6025           }
6026         };
6027
6028         Headers.prototype.keys = function() {
6029           var items = [];
6030           this.forEach(function(value, name) {
6031             items.push(name);
6032           });
6033           return iteratorFor(items)
6034         };
6035
6036         Headers.prototype.values = function() {
6037           var items = [];
6038           this.forEach(function(value) {
6039             items.push(value);
6040           });
6041           return iteratorFor(items)
6042         };
6043
6044         Headers.prototype.entries = function() {
6045           var items = [];
6046           this.forEach(function(value, name) {
6047             items.push([name, value]);
6048           });
6049           return iteratorFor(items)
6050         };
6051
6052         if (support.iterable) {
6053           Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
6054         }
6055
6056         function consumed(body) {
6057           if (body.bodyUsed) {
6058             return Promise.reject(new TypeError('Already read'))
6059           }
6060           body.bodyUsed = true;
6061         }
6062
6063         function fileReaderReady(reader) {
6064           return new Promise(function(resolve, reject) {
6065             reader.onload = function() {
6066               resolve(reader.result);
6067             };
6068             reader.onerror = function() {
6069               reject(reader.error);
6070             };
6071           })
6072         }
6073
6074         function readBlobAsArrayBuffer(blob) {
6075           var reader = new FileReader();
6076           var promise = fileReaderReady(reader);
6077           reader.readAsArrayBuffer(blob);
6078           return promise
6079         }
6080
6081         function readBlobAsText(blob) {
6082           var reader = new FileReader();
6083           var promise = fileReaderReady(reader);
6084           reader.readAsText(blob);
6085           return promise
6086         }
6087
6088         function readArrayBufferAsText(buf) {
6089           var view = new Uint8Array(buf);
6090           var chars = new Array(view.length);
6091
6092           for (var i = 0; i < view.length; i++) {
6093             chars[i] = String.fromCharCode(view[i]);
6094           }
6095           return chars.join('')
6096         }
6097
6098         function bufferClone(buf) {
6099           if (buf.slice) {
6100             return buf.slice(0)
6101           } else {
6102             var view = new Uint8Array(buf.byteLength);
6103             view.set(new Uint8Array(buf));
6104             return view.buffer
6105           }
6106         }
6107
6108         function Body() {
6109           this.bodyUsed = false;
6110
6111           this._initBody = function(body) {
6112             this._bodyInit = body;
6113             if (!body) {
6114               this._bodyText = '';
6115             } else if (typeof body === 'string') {
6116               this._bodyText = body;
6117             } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
6118               this._bodyBlob = body;
6119             } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
6120               this._bodyFormData = body;
6121             } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
6122               this._bodyText = body.toString();
6123             } else if (support.arrayBuffer && support.blob && isDataView(body)) {
6124               this._bodyArrayBuffer = bufferClone(body.buffer);
6125               // IE 10-11 can't handle a DataView body.
6126               this._bodyInit = new Blob([this._bodyArrayBuffer]);
6127             } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
6128               this._bodyArrayBuffer = bufferClone(body);
6129             } else {
6130               this._bodyText = body = Object.prototype.toString.call(body);
6131             }
6132
6133             if (!this.headers.get('content-type')) {
6134               if (typeof body === 'string') {
6135                 this.headers.set('content-type', 'text/plain;charset=UTF-8');
6136               } else if (this._bodyBlob && this._bodyBlob.type) {
6137                 this.headers.set('content-type', this._bodyBlob.type);
6138               } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
6139                 this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
6140               }
6141             }
6142           };
6143
6144           if (support.blob) {
6145             this.blob = function() {
6146               var rejected = consumed(this);
6147               if (rejected) {
6148                 return rejected
6149               }
6150
6151               if (this._bodyBlob) {
6152                 return Promise.resolve(this._bodyBlob)
6153               } else if (this._bodyArrayBuffer) {
6154                 return Promise.resolve(new Blob([this._bodyArrayBuffer]))
6155               } else if (this._bodyFormData) {
6156                 throw new Error('could not read FormData body as blob')
6157               } else {
6158                 return Promise.resolve(new Blob([this._bodyText]))
6159               }
6160             };
6161
6162             this.arrayBuffer = function() {
6163               if (this._bodyArrayBuffer) {
6164                 return consumed(this) || Promise.resolve(this._bodyArrayBuffer)
6165               } else {
6166                 return this.blob().then(readBlobAsArrayBuffer)
6167               }
6168             };
6169           }
6170
6171           this.text = function() {
6172             var rejected = consumed(this);
6173             if (rejected) {
6174               return rejected
6175             }
6176
6177             if (this._bodyBlob) {
6178               return readBlobAsText(this._bodyBlob)
6179             } else if (this._bodyArrayBuffer) {
6180               return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))
6181             } else if (this._bodyFormData) {
6182               throw new Error('could not read FormData body as text')
6183             } else {
6184               return Promise.resolve(this._bodyText)
6185             }
6186           };
6187
6188           if (support.formData) {
6189             this.formData = function() {
6190               return this.text().then(decode)
6191             };
6192           }
6193
6194           this.json = function() {
6195             return this.text().then(JSON.parse)
6196           };
6197
6198           return this
6199         }
6200
6201         // HTTP methods whose capitalization should be normalized
6202         var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];
6203
6204         function normalizeMethod(method) {
6205           var upcased = method.toUpperCase();
6206           return methods.indexOf(upcased) > -1 ? upcased : method
6207         }
6208
6209         function Request(input, options) {
6210           options = options || {};
6211           var body = options.body;
6212
6213           if (input instanceof Request) {
6214             if (input.bodyUsed) {
6215               throw new TypeError('Already read')
6216             }
6217             this.url = input.url;
6218             this.credentials = input.credentials;
6219             if (!options.headers) {
6220               this.headers = new Headers(input.headers);
6221             }
6222             this.method = input.method;
6223             this.mode = input.mode;
6224             this.signal = input.signal;
6225             if (!body && input._bodyInit != null) {
6226               body = input._bodyInit;
6227               input.bodyUsed = true;
6228             }
6229           } else {
6230             this.url = String(input);
6231           }
6232
6233           this.credentials = options.credentials || this.credentials || 'same-origin';
6234           if (options.headers || !this.headers) {
6235             this.headers = new Headers(options.headers);
6236           }
6237           this.method = normalizeMethod(options.method || this.method || 'GET');
6238           this.mode = options.mode || this.mode || null;
6239           this.signal = options.signal || this.signal;
6240           this.referrer = null;
6241
6242           if ((this.method === 'GET' || this.method === 'HEAD') && body) {
6243             throw new TypeError('Body not allowed for GET or HEAD requests')
6244           }
6245           this._initBody(body);
6246         }
6247
6248         Request.prototype.clone = function() {
6249           return new Request(this, {body: this._bodyInit})
6250         };
6251
6252         function decode(body) {
6253           var form = new FormData();
6254           body
6255             .trim()
6256             .split('&')
6257             .forEach(function(bytes) {
6258               if (bytes) {
6259                 var split = bytes.split('=');
6260                 var name = split.shift().replace(/\+/g, ' ');
6261                 var value = split.join('=').replace(/\+/g, ' ');
6262                 form.append(decodeURIComponent(name), decodeURIComponent(value));
6263               }
6264             });
6265           return form
6266         }
6267
6268         function parseHeaders(rawHeaders) {
6269           var headers = new Headers();
6270           // Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space
6271           // https://tools.ietf.org/html/rfc7230#section-3.2
6272           var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' ');
6273           preProcessedHeaders.split(/\r?\n/).forEach(function(line) {
6274             var parts = line.split(':');
6275             var key = parts.shift().trim();
6276             if (key) {
6277               var value = parts.join(':').trim();
6278               headers.append(key, value);
6279             }
6280           });
6281           return headers
6282         }
6283
6284         Body.call(Request.prototype);
6285
6286         function Response(bodyInit, options) {
6287           if (!options) {
6288             options = {};
6289           }
6290
6291           this.type = 'default';
6292           this.status = options.status === undefined ? 200 : options.status;
6293           this.ok = this.status >= 200 && this.status < 300;
6294           this.statusText = 'statusText' in options ? options.statusText : 'OK';
6295           this.headers = new Headers(options.headers);
6296           this.url = options.url || '';
6297           this._initBody(bodyInit);
6298         }
6299
6300         Body.call(Response.prototype);
6301
6302         Response.prototype.clone = function() {
6303           return new Response(this._bodyInit, {
6304             status: this.status,
6305             statusText: this.statusText,
6306             headers: new Headers(this.headers),
6307             url: this.url
6308           })
6309         };
6310
6311         Response.error = function() {
6312           var response = new Response(null, {status: 0, statusText: ''});
6313           response.type = 'error';
6314           return response
6315         };
6316
6317         var redirectStatuses = [301, 302, 303, 307, 308];
6318
6319         Response.redirect = function(url, status) {
6320           if (redirectStatuses.indexOf(status) === -1) {
6321             throw new RangeError('Invalid status code')
6322           }
6323
6324           return new Response(null, {status: status, headers: {location: url}})
6325         };
6326
6327         var DOMException$1 = self.DOMException;
6328         try {
6329           new DOMException$1();
6330         } catch (err) {
6331           DOMException$1 = function(message, name) {
6332             this.message = message;
6333             this.name = name;
6334             var error = Error(message);
6335             this.stack = error.stack;
6336           };
6337           DOMException$1.prototype = Object.create(Error.prototype);
6338           DOMException$1.prototype.constructor = DOMException$1;
6339         }
6340
6341         function fetch$1(input, init) {
6342           return new Promise(function(resolve, reject) {
6343             var request = new Request(input, init);
6344
6345             if (request.signal && request.signal.aborted) {
6346               return reject(new DOMException$1('Aborted', 'AbortError'))
6347             }
6348
6349             var xhr = new XMLHttpRequest();
6350
6351             function abortXhr() {
6352               xhr.abort();
6353             }
6354
6355             xhr.onload = function() {
6356               var options = {
6357                 status: xhr.status,
6358                 statusText: xhr.statusText,
6359                 headers: parseHeaders(xhr.getAllResponseHeaders() || '')
6360               };
6361               options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');
6362               var body = 'response' in xhr ? xhr.response : xhr.responseText;
6363               resolve(new Response(body, options));
6364             };
6365
6366             xhr.onerror = function() {
6367               reject(new TypeError('Network request failed'));
6368             };
6369
6370             xhr.ontimeout = function() {
6371               reject(new TypeError('Network request failed'));
6372             };
6373
6374             xhr.onabort = function() {
6375               reject(new DOMException$1('Aborted', 'AbortError'));
6376             };
6377
6378             xhr.open(request.method, request.url, true);
6379
6380             if (request.credentials === 'include') {
6381               xhr.withCredentials = true;
6382             } else if (request.credentials === 'omit') {
6383               xhr.withCredentials = false;
6384             }
6385
6386             if ('responseType' in xhr && support.blob) {
6387               xhr.responseType = 'blob';
6388             }
6389
6390             request.headers.forEach(function(value, name) {
6391               xhr.setRequestHeader(name, value);
6392             });
6393
6394             if (request.signal) {
6395               request.signal.addEventListener('abort', abortXhr);
6396
6397               xhr.onreadystatechange = function() {
6398                 // DONE (success or failure)
6399                 if (xhr.readyState === 4) {
6400                   request.signal.removeEventListener('abort', abortXhr);
6401                 }
6402               };
6403             }
6404
6405             xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);
6406           })
6407         }
6408
6409         fetch$1.polyfill = true;
6410
6411         if (!self.fetch) {
6412           self.fetch = fetch$1;
6413           self.Headers = Headers;
6414           self.Request = Request;
6415           self.Response = Response;
6416         }
6417
6418         var lib = createCommonjsModule(function (module, exports) {
6419         Object.defineProperty(exports, "__esModule", { value: true });
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430         if (!window.Set) {
6431             window.Set = es6Set;
6432         }
6433         if (!window.Map) {
6434             window.Map = es6Map;
6435         }
6436         if (!window.Promise) {
6437             window.Promise = polyfill$d;
6438             window.Promise._immediateFn = setAsap;
6439         }
6440         if (!Array.prototype.find) {
6441             array_prototype_find.shim();
6442         }
6443         if (!Array.prototype.findIndex) {
6444             array_prototype_findindex.shim();
6445         }
6446         if (!Array.from) {
6447             array_from.shim();
6448         }
6449         if (!Object.values) {
6450             object_values.shim();
6451         }
6452         if (!Object.assign) {
6453             object_assign.shim();
6454         }
6455         if (!window.requestAnimationFrame || !window.cancelAnimationFrame) {
6456             window.requestAnimationFrame = raf_1;
6457             window.cancelAnimationFrame = raf_1.cancel;
6458         }
6459
6460         var finalFetch = window.fetch;
6461         var finalPromise = window.Promise;
6462         window.fetch = function (input, init) {
6463             try {
6464                 return finalFetch(input, init);
6465             }
6466             catch (error) {
6467                 return new finalPromise(function (_, reject) { return reject(error); });
6468             }
6469         };
6470         });
6471
6472         unwrapExports(lib);
6473
6474         /*! http://mths.be/fromcodepoint v0.2.1 by @mathias */
6475         if (!String.fromCodePoint) {
6476                 (function() {
6477                         var defineProperty = (function() {
6478                                 // IE 8 only supports `Object.defineProperty` on DOM elements
6479                                 try {
6480                                         var object = {};
6481                                         var $defineProperty = Object.defineProperty;
6482                                         var result = $defineProperty(object, object, object) && $defineProperty;
6483                                 } catch(error) {}
6484                                 return result;
6485                         }());
6486                         var stringFromCharCode = String.fromCharCode;
6487                         var floor = Math.floor;
6488                         var fromCodePoint = function(_) {
6489                                 var arguments$1 = arguments;
6490
6491                                 var MAX_SIZE = 0x4000;
6492                                 var codeUnits = [];
6493                                 var highSurrogate;
6494                                 var lowSurrogate;
6495                                 var index = -1;
6496                                 var length = arguments.length;
6497                                 if (!length) {
6498                                         return '';
6499                                 }
6500                                 var result = '';
6501                                 while (++index < length) {
6502                                         var codePoint = Number(arguments$1[index]);
6503                                         if (
6504                                                 !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
6505                                                 codePoint < 0 || // not a valid Unicode code point
6506                                                 codePoint > 0x10FFFF || // not a valid Unicode code point
6507                                                 floor(codePoint) != codePoint // not an integer
6508                                         ) {
6509                                                 throw RangeError('Invalid code point: ' + codePoint);
6510                                         }
6511                                         if (codePoint <= 0xFFFF) { // BMP code point
6512                                                 codeUnits.push(codePoint);
6513                                         } else { // Astral code point; split in surrogate halves
6514                                                 // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
6515                                                 codePoint -= 0x10000;
6516                                                 highSurrogate = (codePoint >> 10) + 0xD800;
6517                                                 lowSurrogate = (codePoint % 0x400) + 0xDC00;
6518                                                 codeUnits.push(highSurrogate, lowSurrogate);
6519                                         }
6520                                         if (index + 1 == length || codeUnits.length > MAX_SIZE) {
6521                                                 result += stringFromCharCode.apply(null, codeUnits);
6522                                                 codeUnits.length = 0;
6523                                         }
6524                                 }
6525                                 return result;
6526                         };
6527                         if (defineProperty) {
6528                                 defineProperty(String, 'fromCodePoint', {
6529                                         'value': fromCodePoint,
6530                                         'configurable': true,
6531                                         'writable': true
6532                                 });
6533                         } else {
6534                                 String.fromCodePoint = fromCodePoint;
6535                         }
6536                 }());
6537         }
6538
6539         (function (factory) {
6540           
6541           factory();
6542         }((function () {
6543           function _classCallCheck(instance, Constructor) {
6544             if (!(instance instanceof Constructor)) {
6545               throw new TypeError("Cannot call a class as a function");
6546             }
6547           }
6548
6549           function _defineProperties(target, props) {
6550             for (var i = 0; i < props.length; i++) {
6551               var descriptor = props[i];
6552               descriptor.enumerable = descriptor.enumerable || false;
6553               descriptor.configurable = true;
6554               if ("value" in descriptor) { descriptor.writable = true; }
6555               Object.defineProperty(target, descriptor.key, descriptor);
6556             }
6557           }
6558
6559           function _createClass(Constructor, protoProps, staticProps) {
6560             if (protoProps) { _defineProperties(Constructor.prototype, protoProps); }
6561             if (staticProps) { _defineProperties(Constructor, staticProps); }
6562             return Constructor;
6563           }
6564
6565           function _inherits(subClass, superClass) {
6566             if (typeof superClass !== "function" && superClass !== null) {
6567               throw new TypeError("Super expression must either be null or a function");
6568             }
6569
6570             subClass.prototype = Object.create(superClass && superClass.prototype, {
6571               constructor: {
6572                 value: subClass,
6573                 writable: true,
6574                 configurable: true
6575               }
6576             });
6577             if (superClass) { _setPrototypeOf(subClass, superClass); }
6578           }
6579
6580           function _getPrototypeOf(o) {
6581             _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
6582               return o.__proto__ || Object.getPrototypeOf(o);
6583             };
6584             return _getPrototypeOf(o);
6585           }
6586
6587           function _setPrototypeOf(o, p) {
6588             _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
6589               o.__proto__ = p;
6590               return o;
6591             };
6592
6593             return _setPrototypeOf(o, p);
6594           }
6595
6596           function _assertThisInitialized(self) {
6597             if (self === void 0) {
6598               throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
6599             }
6600
6601             return self;
6602           }
6603
6604           function _possibleConstructorReturn(self, call) {
6605             if (call && (typeof call === "object" || typeof call === "function")) {
6606               return call;
6607             }
6608
6609             return _assertThisInitialized(self);
6610           }
6611
6612           function _superPropBase(object, property) {
6613             while (!Object.prototype.hasOwnProperty.call(object, property)) {
6614               object = _getPrototypeOf(object);
6615               if (object === null) { break; }
6616             }
6617
6618             return object;
6619           }
6620
6621           function _get(target, property, receiver) {
6622             if (typeof Reflect !== "undefined" && Reflect.get) {
6623               _get = Reflect.get;
6624             } else {
6625               _get = function _get(target, property, receiver) {
6626                 var base = _superPropBase(target, property);
6627
6628                 if (!base) { return; }
6629                 var desc = Object.getOwnPropertyDescriptor(base, property);
6630
6631                 if (desc.get) {
6632                   return desc.get.call(receiver);
6633                 }
6634
6635                 return desc.value;
6636               };
6637             }
6638
6639             return _get(target, property, receiver || target);
6640           }
6641
6642           var Emitter =
6643           /*#__PURE__*/
6644           function () {
6645             function Emitter() {
6646               _classCallCheck(this, Emitter);
6647
6648               Object.defineProperty(this, 'listeners', {
6649                 value: {},
6650                 writable: true,
6651                 configurable: true
6652               });
6653             }
6654
6655             _createClass(Emitter, [{
6656               key: "addEventListener",
6657               value: function addEventListener(type, callback) {
6658                 if (!(type in this.listeners)) {
6659                   this.listeners[type] = [];
6660                 }
6661
6662                 this.listeners[type].push(callback);
6663               }
6664             }, {
6665               key: "removeEventListener",
6666               value: function removeEventListener(type, callback) {
6667                 if (!(type in this.listeners)) {
6668                   return;
6669                 }
6670
6671                 var stack = this.listeners[type];
6672
6673                 for (var i = 0, l = stack.length; i < l; i++) {
6674                   if (stack[i] === callback) {
6675                     stack.splice(i, 1);
6676                     return;
6677                   }
6678                 }
6679               }
6680             }, {
6681               key: "dispatchEvent",
6682               value: function dispatchEvent(event) {
6683                 var _this = this;
6684
6685                 if (!(event.type in this.listeners)) {
6686                   return;
6687                 }
6688
6689                 var debounce = function debounce(callback) {
6690                   setTimeout(function () {
6691                     return callback.call(_this, event);
6692                   });
6693                 };
6694
6695                 var stack = this.listeners[event.type];
6696
6697                 for (var i = 0, l = stack.length; i < l; i++) {
6698                   debounce(stack[i]);
6699                 }
6700
6701                 return !event.defaultPrevented;
6702               }
6703             }]);
6704
6705             return Emitter;
6706           }();
6707
6708           var AbortSignal =
6709           /*#__PURE__*/
6710           function (_Emitter) {
6711             _inherits(AbortSignal, _Emitter);
6712
6713             function AbortSignal() {
6714               var _this2;
6715
6716               _classCallCheck(this, AbortSignal);
6717
6718               _this2 = _possibleConstructorReturn(this, _getPrototypeOf(AbortSignal).call(this)); // Some versions of babel does not transpile super() correctly for IE <= 10, if the parent
6719               // constructor has failed to run, then "this.listeners" will still be undefined and then we call
6720               // the parent constructor directly instead as a workaround. For general details, see babel bug:
6721               // https://github.com/babel/babel/issues/3041
6722               // This hack was added as a fix for the issue described here:
6723               // https://github.com/Financial-Times/polyfill-library/pull/59#issuecomment-477558042
6724
6725               if (!_this2.listeners) {
6726                 Emitter.call(_assertThisInitialized(_this2));
6727               } // Compared to assignment, Object.defineProperty makes properties non-enumerable by default and
6728               // we want Object.keys(new AbortController().signal) to be [] for compat with the native impl
6729
6730
6731               Object.defineProperty(_assertThisInitialized(_this2), 'aborted', {
6732                 value: false,
6733                 writable: true,
6734                 configurable: true
6735               });
6736               Object.defineProperty(_assertThisInitialized(_this2), 'onabort', {
6737                 value: null,
6738                 writable: true,
6739                 configurable: true
6740               });
6741               return _this2;
6742             }
6743
6744             _createClass(AbortSignal, [{
6745               key: "toString",
6746               value: function toString() {
6747                 return '[object AbortSignal]';
6748               }
6749             }, {
6750               key: "dispatchEvent",
6751               value: function dispatchEvent(event) {
6752                 if (event.type === 'abort') {
6753                   this.aborted = true;
6754
6755                   if (typeof this.onabort === 'function') {
6756                     this.onabort.call(this, event);
6757                   }
6758                 }
6759
6760                 _get(_getPrototypeOf(AbortSignal.prototype), "dispatchEvent", this).call(this, event);
6761               }
6762             }]);
6763
6764             return AbortSignal;
6765           }(Emitter);
6766           var AbortController =
6767           /*#__PURE__*/
6768           function () {
6769             function AbortController() {
6770               _classCallCheck(this, AbortController);
6771
6772               // Compared to assignment, Object.defineProperty makes properties non-enumerable by default and
6773               // we want Object.keys(new AbortController()) to be [] for compat with the native impl
6774               Object.defineProperty(this, 'signal', {
6775                 value: new AbortSignal(),
6776                 writable: true,
6777                 configurable: true
6778               });
6779             }
6780
6781             _createClass(AbortController, [{
6782               key: "abort",
6783               value: function abort() {
6784                 var event;
6785
6786                 try {
6787                   event = new Event('abort');
6788                 } catch (e) {
6789                   if (typeof document !== 'undefined') {
6790                     if (!document.createEvent) {
6791                       // For Internet Explorer 8:
6792                       event = document.createEventObject();
6793                       event.type = 'abort';
6794                     } else {
6795                       // For Internet Explorer 11:
6796                       event = document.createEvent('Event');
6797                       event.initEvent('abort', false, false);
6798                     }
6799                   } else {
6800                     // Fallback where document isn't available:
6801                     event = {
6802                       type: 'abort',
6803                       bubbles: false,
6804                       cancelable: false
6805                     };
6806                   }
6807                 }
6808
6809                 this.signal.dispatchEvent(event);
6810               }
6811             }, {
6812               key: "toString",
6813               value: function toString() {
6814                 return '[object AbortController]';
6815               }
6816             }]);
6817
6818             return AbortController;
6819           }();
6820
6821           if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
6822             // These are necessary to make sure that we get correct output for:
6823             // Object.prototype.toString.call(new AbortController())
6824             AbortController.prototype[Symbol.toStringTag] = 'AbortController';
6825             AbortSignal.prototype[Symbol.toStringTag] = 'AbortSignal';
6826           }
6827
6828           function polyfillNeeded(self) {
6829             if (self.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {
6830               console.log('__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL=true is set, will force install polyfill');
6831               return true;
6832             } // Note that the "unfetch" minimal fetch polyfill defines fetch() without
6833             // defining window.Request, and this polyfill need to work on top of unfetch
6834             // so the below feature detection needs the !self.AbortController part.
6835             // The Request.prototype check is also needed because Safari versions 11.1.2
6836             // up to and including 12.1.x has a window.AbortController present but still
6837             // does NOT correctly implement abortable fetch:
6838             // https://bugs.webkit.org/show_bug.cgi?id=174980#c2
6839
6840
6841             return typeof self.Request === 'function' && !self.Request.prototype.hasOwnProperty('signal') || !self.AbortController;
6842           }
6843
6844           /**
6845            * Note: the "fetch.Request" default value is available for fetch imported from
6846            * the "node-fetch" package and not in browsers. This is OK since browsers
6847            * will be importing umd-polyfill.js from that path "self" is passed the
6848            * decorator so the default value will not be used (because browsers that define
6849            * fetch also has Request). One quirky setup where self.fetch exists but
6850            * self.Request does not is when the "unfetch" minimal fetch polyfill is used
6851            * on top of IE11; for this case the browser will try to use the fetch.Request
6852            * default value which in turn will be undefined but then then "if (Request)"
6853            * will ensure that you get a patched fetch but still no Request (as expected).
6854            * @param {fetch, Request = fetch.Request}
6855            * @returns {fetch: abortableFetch, Request: AbortableRequest}
6856            */
6857
6858           function abortableFetchDecorator(patchTargets) {
6859             if ('function' === typeof patchTargets) {
6860               patchTargets = {
6861                 fetch: patchTargets
6862               };
6863             }
6864
6865             var _patchTargets = patchTargets,
6866                 fetch = _patchTargets.fetch,
6867                 _patchTargets$Request = _patchTargets.Request,
6868                 NativeRequest = _patchTargets$Request === void 0 ? fetch.Request : _patchTargets$Request,
6869                 NativeAbortController = _patchTargets.AbortController,
6870                 _patchTargets$__FORCE = _patchTargets.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL,
6871                 __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL = _patchTargets$__FORCE === void 0 ? false : _patchTargets$__FORCE;
6872
6873             if (!polyfillNeeded({
6874               fetch: fetch,
6875               Request: NativeRequest,
6876               AbortController: NativeAbortController,
6877               __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL: __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL
6878             })) {
6879               return {
6880                 fetch: fetch,
6881                 Request: Request
6882               };
6883             }
6884
6885             var Request = NativeRequest; // Note that the "unfetch" minimal fetch polyfill defines fetch() without
6886             // defining window.Request, and this polyfill need to work on top of unfetch
6887             // hence we only patch it if it's available. Also we don't patch it if signal
6888             // is already available on the Request prototype because in this case support
6889             // is present and the patching below can cause a crash since it assigns to
6890             // request.signal which is technically a read-only property. This latter error
6891             // happens when you run the main5.js node-fetch example in the repo
6892             // "abortcontroller-polyfill-examples". The exact error is:
6893             //   request.signal = init.signal;
6894             //   ^
6895             // TypeError: Cannot set property signal of #<Request> which has only a getter
6896
6897             if (Request && !Request.prototype.hasOwnProperty('signal') || __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {
6898               Request = function Request(input, init) {
6899                 var signal;
6900
6901                 if (init && init.signal) {
6902                   signal = init.signal; // Never pass init.signal to the native Request implementation when the polyfill has
6903                   // been installed because if we're running on top of a browser with a
6904                   // working native AbortController (i.e. the polyfill was installed due to
6905                   // __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL being set), then passing our
6906                   // fake AbortSignal to the native fetch will trigger:
6907                   // TypeError: Failed to construct 'Request': member signal is not of type AbortSignal.
6908
6909                   delete init.signal;
6910                 }
6911
6912                 var request = new NativeRequest(input, init);
6913
6914                 if (signal) {
6915                   Object.defineProperty(request, 'signal', {
6916                     writable: false,
6917                     enumerable: false,
6918                     configurable: true,
6919                     value: signal
6920                   });
6921                 }
6922
6923                 return request;
6924               };
6925
6926               Request.prototype = NativeRequest.prototype;
6927             }
6928
6929             var realFetch = fetch;
6930
6931             var abortableFetch = function abortableFetch(input, init) {
6932               var signal = Request && Request.prototype.isPrototypeOf(input) ? input.signal : init ? init.signal : undefined;
6933
6934               if (signal) {
6935                 var abortError;
6936
6937                 try {
6938                   abortError = new DOMException('Aborted', 'AbortError');
6939                 } catch (err) {
6940                   // IE 11 does not support calling the DOMException constructor, use a
6941                   // regular error object on it instead.
6942                   abortError = new Error('Aborted');
6943                   abortError.name = 'AbortError';
6944                 } // Return early if already aborted, thus avoiding making an HTTP request
6945
6946
6947                 if (signal.aborted) {
6948                   return Promise.reject(abortError);
6949                 } // Turn an event into a promise, reject it once `abort` is dispatched
6950
6951
6952                 var cancellation = new Promise(function (_, reject) {
6953                   signal.addEventListener('abort', function () {
6954                     return reject(abortError);
6955                   }, {
6956                     once: true
6957                   });
6958                 });
6959
6960                 if (init && init.signal) {
6961                   // Never pass .signal to the native implementation when the polyfill has
6962                   // been installed because if we're running on top of a browser with a
6963                   // working native AbortController (i.e. the polyfill was installed due to
6964                   // __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL being set), then passing our
6965                   // fake AbortSignal to the native fetch will trigger:
6966                   // TypeError: Failed to execute 'fetch' on 'Window': member signal is not of type AbortSignal.
6967                   delete init.signal;
6968                 } // Return the fastest promise (don't need to wait for request to finish)
6969
6970
6971                 return Promise.race([cancellation, realFetch(input, init)]);
6972               }
6973
6974               return realFetch(input, init);
6975             };
6976
6977             return {
6978               fetch: abortableFetch,
6979               Request: Request
6980             };
6981           }
6982
6983           (function (self) {
6984
6985             if (!polyfillNeeded(self)) {
6986               return;
6987             }
6988
6989             if (!self.fetch) {
6990               console.warn('fetch() is not available, cannot install abortcontroller-polyfill');
6991               return;
6992             }
6993
6994             var _abortableFetch = abortableFetchDecorator(self),
6995                 fetch = _abortableFetch.fetch,
6996                 Request = _abortableFetch.Request;
6997
6998             self.fetch = fetch;
6999             self.Request = Request;
7000             Object.defineProperty(self, 'AbortController', {
7001               writable: true,
7002               enumerable: false,
7003               configurable: true,
7004               value: AbortController
7005             });
7006             Object.defineProperty(self, 'AbortSignal', {
7007               writable: true,
7008               enumerable: false,
7009               configurable: true,
7010               value: AbortSignal
7011             });
7012           })(typeof self !== 'undefined' ? self : commonjsGlobal);
7013
7014         })));
7015
7016         var version = "5.15.0";
7017
7018         function d3_ascending(a, b) {
7019           return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
7020         }
7021
7022         function d3_bisector(compare) {
7023           if (compare.length === 1) { compare = ascendingComparator(compare); }
7024           return {
7025             left: function(a, x, lo, hi) {
7026               if (lo == null) { lo = 0; }
7027               if (hi == null) { hi = a.length; }
7028               while (lo < hi) {
7029                 var mid = lo + hi >>> 1;
7030                 if (compare(a[mid], x) < 0) { lo = mid + 1; }
7031                 else { hi = mid; }
7032               }
7033               return lo;
7034             },
7035             right: function(a, x, lo, hi) {
7036               if (lo == null) { lo = 0; }
7037               if (hi == null) { hi = a.length; }
7038               while (lo < hi) {
7039                 var mid = lo + hi >>> 1;
7040                 if (compare(a[mid], x) > 0) { hi = mid; }
7041                 else { lo = mid + 1; }
7042               }
7043               return lo;
7044             }
7045           };
7046         }
7047
7048         function ascendingComparator(f) {
7049           return function(d, x) {
7050             return d3_ascending(f(d), x);
7051           };
7052         }
7053
7054         var ascendingBisect = d3_bisector(d3_ascending);
7055         var bisectRight = ascendingBisect.right;
7056         var bisectLeft = ascendingBisect.left;
7057
7058         function pairs(array, f) {
7059           if (f == null) { f = pair; }
7060           var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);
7061           while (i < n) { pairs[i] = f(p, p = array[++i]); }
7062           return pairs;
7063         }
7064
7065         function pair(a, b) {
7066           return [a, b];
7067         }
7068
7069         function cross(values0, values1, reduce) {
7070           var n0 = values0.length,
7071               n1 = values1.length,
7072               values = new Array(n0 * n1),
7073               i0,
7074               i1,
7075               i,
7076               value0;
7077
7078           if (reduce == null) { reduce = pair; }
7079
7080           for (i0 = i = 0; i0 < n0; ++i0) {
7081             for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {
7082               values[i] = reduce(value0, values1[i1]);
7083             }
7084           }
7085
7086           return values;
7087         }
7088
7089         function d3_descending(a, b) {
7090           return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
7091         }
7092
7093         function number(x) {
7094           return x === null ? NaN : +x;
7095         }
7096
7097         function variance(values, valueof) {
7098           var n = values.length,
7099               m = 0,
7100               i = -1,
7101               mean = 0,
7102               value,
7103               delta,
7104               sum = 0;
7105
7106           if (valueof == null) {
7107             while (++i < n) {
7108               if (!isNaN(value = number(values[i]))) {
7109                 delta = value - mean;
7110                 mean += delta / ++m;
7111                 sum += delta * (value - mean);
7112               }
7113             }
7114           }
7115
7116           else {
7117             while (++i < n) {
7118               if (!isNaN(value = number(valueof(values[i], i, values)))) {
7119                 delta = value - mean;
7120                 mean += delta / ++m;
7121                 sum += delta * (value - mean);
7122               }
7123             }
7124           }
7125
7126           if (m > 1) { return sum / (m - 1); }
7127         }
7128
7129         function deviation(array, f) {
7130           var v = variance(array, f);
7131           return v ? Math.sqrt(v) : v;
7132         }
7133
7134         function extent(values, valueof) {
7135           var n = values.length,
7136               i = -1,
7137               value,
7138               min,
7139               max;
7140
7141           if (valueof == null) {
7142             while (++i < n) { // Find the first comparable value.
7143               if ((value = values[i]) != null && value >= value) {
7144                 min = max = value;
7145                 while (++i < n) { // Compare the remaining values.
7146                   if ((value = values[i]) != null) {
7147                     if (min > value) { min = value; }
7148                     if (max < value) { max = value; }
7149                   }
7150                 }
7151               }
7152             }
7153           }
7154
7155           else {
7156             while (++i < n) { // Find the first comparable value.
7157               if ((value = valueof(values[i], i, values)) != null && value >= value) {
7158                 min = max = value;
7159                 while (++i < n) { // Compare the remaining values.
7160                   if ((value = valueof(values[i], i, values)) != null) {
7161                     if (min > value) { min = value; }
7162                     if (max < value) { max = value; }
7163                   }
7164                 }
7165               }
7166             }
7167           }
7168
7169           return [min, max];
7170         }
7171
7172         var array$1 = Array.prototype;
7173
7174         var slice$4 = array$1.slice;
7175         var map$2 = array$1.map;
7176
7177         function constant(x) {
7178           return function() {
7179             return x;
7180           };
7181         }
7182
7183         function identity(x) {
7184           return x;
7185         }
7186
7187         function d3_range(start, stop, step) {
7188           start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
7189
7190           var i = -1,
7191               n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
7192               range = new Array(n);
7193
7194           while (++i < n) {
7195             range[i] = start + i * step;
7196           }
7197
7198           return range;
7199         }
7200
7201         var e10 = Math.sqrt(50),
7202             e5 = Math.sqrt(10),
7203             e2 = Math.sqrt(2);
7204
7205         function ticks(start, stop, count) {
7206           var reverse,
7207               i = -1,
7208               n,
7209               ticks,
7210               step;
7211
7212           stop = +stop, start = +start, count = +count;
7213           if (start === stop && count > 0) { return [start]; }
7214           if (reverse = stop < start) { n = start, start = stop, stop = n; }
7215           if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) { return []; }
7216
7217           if (step > 0) {
7218             start = Math.ceil(start / step);
7219             stop = Math.floor(stop / step);
7220             ticks = new Array(n = Math.ceil(stop - start + 1));
7221             while (++i < n) { ticks[i] = (start + i) * step; }
7222           } else {
7223             start = Math.floor(start * step);
7224             stop = Math.ceil(stop * step);
7225             ticks = new Array(n = Math.ceil(start - stop + 1));
7226             while (++i < n) { ticks[i] = (start - i) / step; }
7227           }
7228
7229           if (reverse) { ticks.reverse(); }
7230
7231           return ticks;
7232         }
7233
7234         function tickIncrement(start, stop, count) {
7235           var step = (stop - start) / Math.max(0, count),
7236               power = Math.floor(Math.log(step) / Math.LN10),
7237               error = step / Math.pow(10, power);
7238           return power >= 0
7239               ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)
7240               : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);
7241         }
7242
7243         function tickStep(start, stop, count) {
7244           var step0 = Math.abs(stop - start) / Math.max(0, count),
7245               step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
7246               error = step0 / step1;
7247           if (error >= e10) { step1 *= 10; }
7248           else if (error >= e5) { step1 *= 5; }
7249           else if (error >= e2) { step1 *= 2; }
7250           return stop < start ? -step1 : step1;
7251         }
7252
7253         function thresholdSturges(values) {
7254           return Math.ceil(Math.log(values.length) / Math.LN2) + 1;
7255         }
7256
7257         function histogram() {
7258           var value = identity,
7259               domain = extent,
7260               threshold = thresholdSturges;
7261
7262           function histogram(data) {
7263             var i,
7264                 n = data.length,
7265                 x,
7266                 values = new Array(n);
7267
7268             for (i = 0; i < n; ++i) {
7269               values[i] = value(data[i], i, data);
7270             }
7271
7272             var xz = domain(values),
7273                 x0 = xz[0],
7274                 x1 = xz[1],
7275                 tz = threshold(values, x0, x1);
7276
7277             // Convert number of thresholds into uniform thresholds.
7278             if (!Array.isArray(tz)) {
7279               tz = tickStep(x0, x1, tz);
7280               tz = d3_range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive
7281             }
7282
7283             // Remove any thresholds outside the domain.
7284             var m = tz.length;
7285             while (tz[0] <= x0) { tz.shift(), --m; }
7286             while (tz[m - 1] > x1) { tz.pop(), --m; }
7287
7288             var bins = new Array(m + 1),
7289                 bin;
7290
7291             // Initialize bins.
7292             for (i = 0; i <= m; ++i) {
7293               bin = bins[i] = [];
7294               bin.x0 = i > 0 ? tz[i - 1] : x0;
7295               bin.x1 = i < m ? tz[i] : x1;
7296             }
7297
7298             // Assign data to bins by value, ignoring any outside the domain.
7299             for (i = 0; i < n; ++i) {
7300               x = values[i];
7301               if (x0 <= x && x <= x1) {
7302                 bins[bisectRight(tz, x, 0, m)].push(data[i]);
7303               }
7304             }
7305
7306             return bins;
7307           }
7308
7309           histogram.value = function(_) {
7310             return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value;
7311           };
7312
7313           histogram.domain = function(_) {
7314             return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain;
7315           };
7316
7317           histogram.thresholds = function(_) {
7318             return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice$4.call(_)) : constant(_), histogram) : threshold;
7319           };
7320
7321           return histogram;
7322         }
7323
7324         function threshold(values, p, valueof) {
7325           if (valueof == null) { valueof = number; }
7326           if (!(n = values.length)) { return; }
7327           if ((p = +p) <= 0 || n < 2) { return +valueof(values[0], 0, values); }
7328           if (p >= 1) { return +valueof(values[n - 1], n - 1, values); }
7329           var n,
7330               i = (n - 1) * p,
7331               i0 = Math.floor(i),
7332               value0 = +valueof(values[i0], i0, values),
7333               value1 = +valueof(values[i0 + 1], i0 + 1, values);
7334           return value0 + (value1 - value0) * (i - i0);
7335         }
7336
7337         function freedmanDiaconis(values, min, max) {
7338           values = map$2.call(values, number).sort(d3_ascending);
7339           return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));
7340         }
7341
7342         function scott(values, min, max) {
7343           return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));
7344         }
7345
7346         function max$2(values, valueof) {
7347           var n = values.length,
7348               i = -1,
7349               value,
7350               max;
7351
7352           if (valueof == null) {
7353             while (++i < n) { // Find the first comparable value.
7354               if ((value = values[i]) != null && value >= value) {
7355                 max = value;
7356                 while (++i < n) { // Compare the remaining values.
7357                   if ((value = values[i]) != null && value > max) {
7358                     max = value;
7359                   }
7360                 }
7361               }
7362             }
7363           }
7364
7365           else {
7366             while (++i < n) { // Find the first comparable value.
7367               if ((value = valueof(values[i], i, values)) != null && value >= value) {
7368                 max = value;
7369                 while (++i < n) { // Compare the remaining values.
7370                   if ((value = valueof(values[i], i, values)) != null && value > max) {
7371                     max = value;
7372                   }
7373                 }
7374               }
7375             }
7376           }
7377
7378           return max;
7379         }
7380
7381         function mean(values, valueof) {
7382           var n = values.length,
7383               m = n,
7384               i = -1,
7385               value,
7386               sum = 0;
7387
7388           if (valueof == null) {
7389             while (++i < n) {
7390               if (!isNaN(value = number(values[i]))) { sum += value; }
7391               else { --m; }
7392             }
7393           }
7394
7395           else {
7396             while (++i < n) {
7397               if (!isNaN(value = number(valueof(values[i], i, values)))) { sum += value; }
7398               else { --m; }
7399             }
7400           }
7401
7402           if (m) { return sum / m; }
7403         }
7404
7405         function d3_median(values, valueof) {
7406           var n = values.length,
7407               i = -1,
7408               value,
7409               numbers = [];
7410
7411           if (valueof == null) {
7412             while (++i < n) {
7413               if (!isNaN(value = number(values[i]))) {
7414                 numbers.push(value);
7415               }
7416             }
7417           }
7418
7419           else {
7420             while (++i < n) {
7421               if (!isNaN(value = number(valueof(values[i], i, values)))) {
7422                 numbers.push(value);
7423               }
7424             }
7425           }
7426
7427           return threshold(numbers.sort(d3_ascending), 0.5);
7428         }
7429
7430         function merge(arrays) {
7431           var n = arrays.length,
7432               m,
7433               i = -1,
7434               j = 0,
7435               merged,
7436               array;
7437
7438           while (++i < n) { j += arrays[i].length; }
7439           merged = new Array(j);
7440
7441           while (--n >= 0) {
7442             array = arrays[n];
7443             m = array.length;
7444             while (--m >= 0) {
7445               merged[--j] = array[m];
7446             }
7447           }
7448
7449           return merged;
7450         }
7451
7452         function min(values, valueof) {
7453           var n = values.length,
7454               i = -1,
7455               value,
7456               min;
7457
7458           if (valueof == null) {
7459             while (++i < n) { // Find the first comparable value.
7460               if ((value = values[i]) != null && value >= value) {
7461                 min = value;
7462                 while (++i < n) { // Compare the remaining values.
7463                   if ((value = values[i]) != null && min > value) {
7464                     min = value;
7465                   }
7466                 }
7467               }
7468             }
7469           }
7470
7471           else {
7472             while (++i < n) { // Find the first comparable value.
7473               if ((value = valueof(values[i], i, values)) != null && value >= value) {
7474                 min = value;
7475                 while (++i < n) { // Compare the remaining values.
7476                   if ((value = valueof(values[i], i, values)) != null && min > value) {
7477                     min = value;
7478                   }
7479                 }
7480               }
7481             }
7482           }
7483
7484           return min;
7485         }
7486
7487         function permute(array, indexes) {
7488           var i = indexes.length, permutes = new Array(i);
7489           while (i--) { permutes[i] = array[indexes[i]]; }
7490           return permutes;
7491         }
7492
7493         function scan(values, compare) {
7494           if (!(n = values.length)) { return; }
7495           var n,
7496               i = 0,
7497               j = 0,
7498               xi,
7499               xj = values[j];
7500
7501           if (compare == null) { compare = d3_ascending; }
7502
7503           while (++i < n) {
7504             if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {
7505               xj = xi, j = i;
7506             }
7507           }
7508
7509           if (compare(xj, xj) === 0) { return j; }
7510         }
7511
7512         function shuffle(array, i0, i1) {
7513           var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),
7514               t,
7515               i;
7516
7517           while (m) {
7518             i = Math.random() * m-- | 0;
7519             t = array[m + i0];
7520             array[m + i0] = array[i + i0];
7521             array[i + i0] = t;
7522           }
7523
7524           return array;
7525         }
7526
7527         function sum(values, valueof) {
7528           var n = values.length,
7529               i = -1,
7530               value,
7531               sum = 0;
7532
7533           if (valueof == null) {
7534             while (++i < n) {
7535               if (value = +values[i]) { sum += value; } // Note: zero and null are equivalent.
7536             }
7537           }
7538
7539           else {
7540             while (++i < n) {
7541               if (value = +valueof(values[i], i, values)) { sum += value; }
7542             }
7543           }
7544
7545           return sum;
7546         }
7547
7548         function transpose(matrix) {
7549           if (!(n = matrix.length)) { return []; }
7550           for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {
7551             for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
7552               row[j] = matrix[j][i];
7553             }
7554           }
7555           return transpose;
7556         }
7557
7558         function length(d) {
7559           return d.length;
7560         }
7561
7562         function zip() {
7563           return transpose(arguments);
7564         }
7565
7566         var slice$5 = Array.prototype.slice;
7567
7568         function identity$1(x) {
7569           return x;
7570         }
7571
7572         var top = 1,
7573             right = 2,
7574             bottom = 3,
7575             left = 4,
7576             epsilon = 1e-6;
7577
7578         function translateX(x) {
7579           return "translate(" + (x + 0.5) + ",0)";
7580         }
7581
7582         function translateY(y) {
7583           return "translate(0," + (y + 0.5) + ")";
7584         }
7585
7586         function number$1(scale) {
7587           return function(d) {
7588             return +scale(d);
7589           };
7590         }
7591
7592         function center(scale) {
7593           var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.
7594           if (scale.round()) { offset = Math.round(offset); }
7595           return function(d) {
7596             return +scale(d) + offset;
7597           };
7598         }
7599
7600         function entering() {
7601           return !this.__axis;
7602         }
7603
7604         function axis(orient, scale) {
7605           var tickArguments = [],
7606               tickValues = null,
7607               tickFormat = null,
7608               tickSizeInner = 6,
7609               tickSizeOuter = 6,
7610               tickPadding = 3,
7611               k = orient === top || orient === left ? -1 : 1,
7612               x = orient === left || orient === right ? "x" : "y",
7613               transform = orient === top || orient === bottom ? translateX : translateY;
7614
7615           function axis(context) {
7616             var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,
7617                 format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$1) : tickFormat,
7618                 spacing = Math.max(tickSizeInner, 0) + tickPadding,
7619                 range = scale.range(),
7620                 range0 = +range[0] + 0.5,
7621                 range1 = +range[range.length - 1] + 0.5,
7622                 position = (scale.bandwidth ? center : number$1)(scale.copy()),
7623                 selection = context.selection ? context.selection() : context,
7624                 path = selection.selectAll(".domain").data([null]),
7625                 tick = selection.selectAll(".tick").data(values, scale).order(),
7626                 tickExit = tick.exit(),
7627                 tickEnter = tick.enter().append("g").attr("class", "tick"),
7628                 line = tick.select("line"),
7629                 text = tick.select("text");
7630
7631             path = path.merge(path.enter().insert("path", ".tick")
7632                 .attr("class", "domain")
7633                 .attr("stroke", "currentColor"));
7634
7635             tick = tick.merge(tickEnter);
7636
7637             line = line.merge(tickEnter.append("line")
7638                 .attr("stroke", "currentColor")
7639                 .attr(x + "2", k * tickSizeInner));
7640
7641             text = text.merge(tickEnter.append("text")
7642                 .attr("fill", "currentColor")
7643                 .attr(x, k * spacing)
7644                 .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
7645
7646             if (context !== selection) {
7647               path = path.transition(context);
7648               tick = tick.transition(context);
7649               line = line.transition(context);
7650               text = text.transition(context);
7651
7652               tickExit = tickExit.transition(context)
7653                   .attr("opacity", epsilon)
7654                   .attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute("transform"); });
7655
7656               tickEnter
7657                   .attr("opacity", epsilon)
7658                   .attr("transform", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });
7659             }
7660
7661             tickExit.remove();
7662
7663             path
7664                 .attr("d", orient === left || orient == right
7665                     ? (tickSizeOuter ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter : "M0.5," + range0 + "V" + range1)
7666                     : (tickSizeOuter ? "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter : "M" + range0 + ",0.5H" + range1));
7667
7668             tick
7669                 .attr("opacity", 1)
7670                 .attr("transform", function(d) { return transform(position(d)); });
7671
7672             line
7673                 .attr(x + "2", k * tickSizeInner);
7674
7675             text
7676                 .attr(x, k * spacing)
7677                 .text(format);
7678
7679             selection.filter(entering)
7680                 .attr("fill", "none")
7681                 .attr("font-size", 10)
7682                 .attr("font-family", "sans-serif")
7683                 .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle");
7684
7685             selection
7686                 .each(function() { this.__axis = position; });
7687           }
7688
7689           axis.scale = function(_) {
7690             return arguments.length ? (scale = _, axis) : scale;
7691           };
7692
7693           axis.ticks = function() {
7694             return tickArguments = slice$5.call(arguments), axis;
7695           };
7696
7697           axis.tickArguments = function(_) {
7698             return arguments.length ? (tickArguments = _ == null ? [] : slice$5.call(_), axis) : tickArguments.slice();
7699           };
7700
7701           axis.tickValues = function(_) {
7702             return arguments.length ? (tickValues = _ == null ? null : slice$5.call(_), axis) : tickValues && tickValues.slice();
7703           };
7704
7705           axis.tickFormat = function(_) {
7706             return arguments.length ? (tickFormat = _, axis) : tickFormat;
7707           };
7708
7709           axis.tickSize = function(_) {
7710             return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;
7711           };
7712
7713           axis.tickSizeInner = function(_) {
7714             return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;
7715           };
7716
7717           axis.tickSizeOuter = function(_) {
7718             return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;
7719           };
7720
7721           axis.tickPadding = function(_) {
7722             return arguments.length ? (tickPadding = +_, axis) : tickPadding;
7723           };
7724
7725           return axis;
7726         }
7727
7728         function axisTop(scale) {
7729           return axis(top, scale);
7730         }
7731
7732         function axisRight(scale) {
7733           return axis(right, scale);
7734         }
7735
7736         function axisBottom(scale) {
7737           return axis(bottom, scale);
7738         }
7739
7740         function axisLeft(scale) {
7741           return axis(left, scale);
7742         }
7743
7744         var noop$2 = {value: function() {}};
7745
7746         function dispatch() {
7747           var arguments$1 = arguments;
7748
7749           for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
7750             if (!(t = arguments$1[i] + "") || (t in _) || /[\s.]/.test(t)) { throw new Error("illegal type: " + t); }
7751             _[t] = [];
7752           }
7753           return new Dispatch(_);
7754         }
7755
7756         function Dispatch(_) {
7757           this._ = _;
7758         }
7759
7760         function parseTypenames(typenames, types) {
7761           return typenames.trim().split(/^|\s+/).map(function(t) {
7762             var name = "", i = t.indexOf(".");
7763             if (i >= 0) { name = t.slice(i + 1), t = t.slice(0, i); }
7764             if (t && !types.hasOwnProperty(t)) { throw new Error("unknown type: " + t); }
7765             return {type: t, name: name};
7766           });
7767         }
7768
7769         Dispatch.prototype = dispatch.prototype = {
7770           constructor: Dispatch,
7771           on: function(typename, callback) {
7772             var _ = this._,
7773                 T = parseTypenames(typename + "", _),
7774                 t,
7775                 i = -1,
7776                 n = T.length;
7777
7778             // If no callback was specified, return the callback of the given type and name.
7779             if (arguments.length < 2) {
7780               while (++i < n) { if ((t = (typename = T[i]).type) && (t = get$1(_[t], typename.name))) { return t; } }
7781               return;
7782             }
7783
7784             // If a type was specified, set the callback for the given type and name.
7785             // Otherwise, if a null callback was specified, remove callbacks of the given name.
7786             if (callback != null && typeof callback !== "function") { throw new Error("invalid callback: " + callback); }
7787             while (++i < n) {
7788               if (t = (typename = T[i]).type) { _[t] = set(_[t], typename.name, callback); }
7789               else if (callback == null) { for (t in _) { _[t] = set(_[t], typename.name, null); } }
7790             }
7791
7792             return this;
7793           },
7794           copy: function() {
7795             var copy = {}, _ = this._;
7796             for (var t in _) { copy[t] = _[t].slice(); }
7797             return new Dispatch(copy);
7798           },
7799           call: function(type, that) {
7800             var arguments$1 = arguments;
7801
7802             if ((n = arguments.length - 2) > 0) { for (var args = new Array(n), i = 0, n, t; i < n; ++i) { args[i] = arguments$1[i + 2]; } }
7803             if (!this._.hasOwnProperty(type)) { throw new Error("unknown type: " + type); }
7804             for (t = this._[type], i = 0, n = t.length; i < n; ++i) { t[i].value.apply(that, args); }
7805           },
7806           apply: function(type, that, args) {
7807             if (!this._.hasOwnProperty(type)) { throw new Error("unknown type: " + type); }
7808             for (var t = this._[type], i = 0, n = t.length; i < n; ++i) { t[i].value.apply(that, args); }
7809           }
7810         };
7811
7812         function get$1(type, name) {
7813           for (var i = 0, n = type.length, c; i < n; ++i) {
7814             if ((c = type[i]).name === name) {
7815               return c.value;
7816             }
7817           }
7818         }
7819
7820         function set(type, name, callback) {
7821           for (var i = 0, n = type.length; i < n; ++i) {
7822             if (type[i].name === name) {
7823               type[i] = noop$2, type = type.slice(0, i).concat(type.slice(i + 1));
7824               break;
7825             }
7826           }
7827           if (callback != null) { type.push({name: name, value: callback}); }
7828           return type;
7829         }
7830
7831         var xhtml = "http://www.w3.org/1999/xhtml";
7832
7833         var namespaces = {
7834           svg: "http://www.w3.org/2000/svg",
7835           xhtml: xhtml,
7836           xlink: "http://www.w3.org/1999/xlink",
7837           xml: "http://www.w3.org/XML/1998/namespace",
7838           xmlns: "http://www.w3.org/2000/xmlns/"
7839         };
7840
7841         function namespace(name) {
7842           var prefix = name += "", i = prefix.indexOf(":");
7843           if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") { name = name.slice(i + 1); }
7844           return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;
7845         }
7846
7847         function creatorInherit(name) {
7848           return function() {
7849             var document = this.ownerDocument,
7850                 uri = this.namespaceURI;
7851             return uri === xhtml && document.documentElement.namespaceURI === xhtml
7852                 ? document.createElement(name)
7853                 : document.createElementNS(uri, name);
7854           };
7855         }
7856
7857         function creatorFixed(fullname) {
7858           return function() {
7859             return this.ownerDocument.createElementNS(fullname.space, fullname.local);
7860           };
7861         }
7862
7863         function creator(name) {
7864           var fullname = namespace(name);
7865           return (fullname.local
7866               ? creatorFixed
7867               : creatorInherit)(fullname);
7868         }
7869
7870         function none() {}
7871
7872         function selector(selector) {
7873           return selector == null ? none : function() {
7874             return this.querySelector(selector);
7875           };
7876         }
7877
7878         function selection_select(select) {
7879           if (typeof select !== "function") { select = selector(select); }
7880
7881           for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
7882             for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
7883               if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
7884                 if ("__data__" in node) { subnode.__data__ = node.__data__; }
7885                 subgroup[i] = subnode;
7886               }
7887             }
7888           }
7889
7890           return new Selection(subgroups, this._parents);
7891         }
7892
7893         function empty() {
7894           return [];
7895         }
7896
7897         function selectorAll(selector) {
7898           return selector == null ? empty : function() {
7899             return this.querySelectorAll(selector);
7900           };
7901         }
7902
7903         function selection_selectAll(select) {
7904           if (typeof select !== "function") { select = selectorAll(select); }
7905
7906           for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
7907             for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
7908               if (node = group[i]) {
7909                 subgroups.push(select.call(node, node.__data__, i, group));
7910                 parents.push(node);
7911               }
7912             }
7913           }
7914
7915           return new Selection(subgroups, parents);
7916         }
7917
7918         function matcher(selector) {
7919           return function() {
7920             return this.matches(selector);
7921           };
7922         }
7923
7924         function selection_filter(match) {
7925           if (typeof match !== "function") { match = matcher(match); }
7926
7927           for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
7928             for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
7929               if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
7930                 subgroup.push(node);
7931               }
7932             }
7933           }
7934
7935           return new Selection(subgroups, this._parents);
7936         }
7937
7938         function sparse(update) {
7939           return new Array(update.length);
7940         }
7941
7942         function selection_enter() {
7943           return new Selection(this._enter || this._groups.map(sparse), this._parents);
7944         }
7945
7946         function EnterNode(parent, datum) {
7947           this.ownerDocument = parent.ownerDocument;
7948           this.namespaceURI = parent.namespaceURI;
7949           this._next = null;
7950           this._parent = parent;
7951           this.__data__ = datum;
7952         }
7953
7954         EnterNode.prototype = {
7955           constructor: EnterNode,
7956           appendChild: function(child) { return this._parent.insertBefore(child, this._next); },
7957           insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },
7958           querySelector: function(selector) { return this._parent.querySelector(selector); },
7959           querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }
7960         };
7961
7962         function constant$1(x) {
7963           return function() {
7964             return x;
7965           };
7966         }
7967
7968         var keyPrefix = "$"; // Protect against keys like “__proto__”.
7969
7970         function bindIndex(parent, group, enter, update, exit, data) {
7971           var i = 0,
7972               node,
7973               groupLength = group.length,
7974               dataLength = data.length;
7975
7976           // Put any non-null nodes that fit into update.
7977           // Put any null nodes into enter.
7978           // Put any remaining data into enter.
7979           for (; i < dataLength; ++i) {
7980             if (node = group[i]) {
7981               node.__data__ = data[i];
7982               update[i] = node;
7983             } else {
7984               enter[i] = new EnterNode(parent, data[i]);
7985             }
7986           }
7987
7988           // Put any non-null nodes that don’t fit into exit.
7989           for (; i < groupLength; ++i) {
7990             if (node = group[i]) {
7991               exit[i] = node;
7992             }
7993           }
7994         }
7995
7996         function bindKey(parent, group, enter, update, exit, data, key) {
7997           var i,
7998               node,
7999               nodeByKeyValue = {},
8000               groupLength = group.length,
8001               dataLength = data.length,
8002               keyValues = new Array(groupLength),
8003               keyValue;
8004
8005           // Compute the key for each node.
8006           // If multiple nodes have the same key, the duplicates are added to exit.
8007           for (i = 0; i < groupLength; ++i) {
8008             if (node = group[i]) {
8009               keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);
8010               if (keyValue in nodeByKeyValue) {
8011                 exit[i] = node;
8012               } else {
8013                 nodeByKeyValue[keyValue] = node;
8014               }
8015             }
8016           }
8017
8018           // Compute the key for each datum.
8019           // If there a node associated with this key, join and add it to update.
8020           // If there is not (or the key is a duplicate), add it to enter.
8021           for (i = 0; i < dataLength; ++i) {
8022             keyValue = keyPrefix + key.call(parent, data[i], i, data);
8023             if (node = nodeByKeyValue[keyValue]) {
8024               update[i] = node;
8025               node.__data__ = data[i];
8026               nodeByKeyValue[keyValue] = null;
8027             } else {
8028               enter[i] = new EnterNode(parent, data[i]);
8029             }
8030           }
8031
8032           // Add any remaining nodes that were not bound to data to exit.
8033           for (i = 0; i < groupLength; ++i) {
8034             if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {
8035               exit[i] = node;
8036             }
8037           }
8038         }
8039
8040         function selection_data(value, key) {
8041           if (!value) {
8042             data = new Array(this.size()), j = -1;
8043             this.each(function(d) { data[++j] = d; });
8044             return data;
8045           }
8046
8047           var bind = key ? bindKey : bindIndex,
8048               parents = this._parents,
8049               groups = this._groups;
8050
8051           if (typeof value !== "function") { value = constant$1(value); }
8052
8053           for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
8054             var parent = parents[j],
8055                 group = groups[j],
8056                 groupLength = group.length,
8057                 data = value.call(parent, parent && parent.__data__, j, parents),
8058                 dataLength = data.length,
8059                 enterGroup = enter[j] = new Array(dataLength),
8060                 updateGroup = update[j] = new Array(dataLength),
8061                 exitGroup = exit[j] = new Array(groupLength);
8062
8063             bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
8064
8065             // Now connect the enter nodes to their following update node, such that
8066             // appendChild can insert the materialized enter node before this node,
8067             // rather than at the end of the parent node.
8068             for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
8069               if (previous = enterGroup[i0]) {
8070                 if (i0 >= i1) { i1 = i0 + 1; }
8071                 while (!(next = updateGroup[i1]) && ++i1 < dataLength){ }
8072                 previous._next = next || null;
8073               }
8074             }
8075           }
8076
8077           update = new Selection(update, parents);
8078           update._enter = enter;
8079           update._exit = exit;
8080           return update;
8081         }
8082
8083         function selection_exit() {
8084           return new Selection(this._exit || this._groups.map(sparse), this._parents);
8085         }
8086
8087         function selection_join(onenter, onupdate, onexit) {
8088           var enter = this.enter(), update = this, exit = this.exit();
8089           enter = typeof onenter === "function" ? onenter(enter) : enter.append(onenter + "");
8090           if (onupdate != null) { update = onupdate(update); }
8091           if (onexit == null) { exit.remove(); } else { onexit(exit); }
8092           return enter && update ? enter.merge(update).order() : update;
8093         }
8094
8095         function selection_merge(selection) {
8096
8097           for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
8098             for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
8099               if (node = group0[i] || group1[i]) {
8100                 merge[i] = node;
8101               }
8102             }
8103           }
8104
8105           for (; j < m0; ++j) {
8106             merges[j] = groups0[j];
8107           }
8108
8109           return new Selection(merges, this._parents);
8110         }
8111
8112         function selection_order() {
8113
8114           for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {
8115             for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {
8116               if (node = group[i]) {
8117                 if (next && node.compareDocumentPosition(next) ^ 4) { next.parentNode.insertBefore(node, next); }
8118                 next = node;
8119               }
8120             }
8121           }
8122
8123           return this;
8124         }
8125
8126         function selection_sort(compare) {
8127           if (!compare) { compare = ascending; }
8128
8129           function compareNode(a, b) {
8130             return a && b ? compare(a.__data__, b.__data__) : !a - !b;
8131           }
8132
8133           for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
8134             for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {
8135               if (node = group[i]) {
8136                 sortgroup[i] = node;
8137               }
8138             }
8139             sortgroup.sort(compareNode);
8140           }
8141
8142           return new Selection(sortgroups, this._parents).order();
8143         }
8144
8145         function ascending(a, b) {
8146           return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
8147         }
8148
8149         function selection_call() {
8150           var callback = arguments[0];
8151           arguments[0] = this;
8152           callback.apply(null, arguments);
8153           return this;
8154         }
8155
8156         function selection_nodes() {
8157           var nodes = new Array(this.size()), i = -1;
8158           this.each(function() { nodes[++i] = this; });
8159           return nodes;
8160         }
8161
8162         function selection_node() {
8163
8164           for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
8165             for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
8166               var node = group[i];
8167               if (node) { return node; }
8168             }
8169           }
8170
8171           return null;
8172         }
8173
8174         function selection_size() {
8175           var size = 0;
8176           this.each(function() { ++size; });
8177           return size;
8178         }
8179
8180         function selection_empty() {
8181           return !this.node();
8182         }
8183
8184         function selection_each(callback) {
8185
8186           for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
8187             for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
8188               if (node = group[i]) { callback.call(node, node.__data__, i, group); }
8189             }
8190           }
8191
8192           return this;
8193         }
8194
8195         function attrRemove(name) {
8196           return function() {
8197             this.removeAttribute(name);
8198           };
8199         }
8200
8201         function attrRemoveNS(fullname) {
8202           return function() {
8203             this.removeAttributeNS(fullname.space, fullname.local);
8204           };
8205         }
8206
8207         function attrConstant(name, value) {
8208           return function() {
8209             this.setAttribute(name, value);
8210           };
8211         }
8212
8213         function attrConstantNS(fullname, value) {
8214           return function() {
8215             this.setAttributeNS(fullname.space, fullname.local, value);
8216           };
8217         }
8218
8219         function attrFunction(name, value) {
8220           return function() {
8221             var v = value.apply(this, arguments);
8222             if (v == null) { this.removeAttribute(name); }
8223             else { this.setAttribute(name, v); }
8224           };
8225         }
8226
8227         function attrFunctionNS(fullname, value) {
8228           return function() {
8229             var v = value.apply(this, arguments);
8230             if (v == null) { this.removeAttributeNS(fullname.space, fullname.local); }
8231             else { this.setAttributeNS(fullname.space, fullname.local, v); }
8232           };
8233         }
8234
8235         function selection_attr(name, value) {
8236           var fullname = namespace(name);
8237
8238           if (arguments.length < 2) {
8239             var node = this.node();
8240             return fullname.local
8241                 ? node.getAttributeNS(fullname.space, fullname.local)
8242                 : node.getAttribute(fullname);
8243           }
8244
8245           return this.each((value == null
8246               ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function"
8247               ? (fullname.local ? attrFunctionNS : attrFunction)
8248               : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
8249         }
8250
8251         function defaultView(node) {
8252           return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
8253               || (node.document && node) // node is a Window
8254               || node.defaultView; // node is a Document
8255         }
8256
8257         function styleRemove(name) {
8258           return function() {
8259             this.style.removeProperty(name);
8260           };
8261         }
8262
8263         function styleConstant(name, value, priority) {
8264           return function() {
8265             this.style.setProperty(name, value, priority);
8266           };
8267         }
8268
8269         function styleFunction(name, value, priority) {
8270           return function() {
8271             var v = value.apply(this, arguments);
8272             if (v == null) { this.style.removeProperty(name); }
8273             else { this.style.setProperty(name, v, priority); }
8274           };
8275         }
8276
8277         function selection_style(name, value, priority) {
8278           return arguments.length > 1
8279               ? this.each((value == null
8280                     ? styleRemove : typeof value === "function"
8281                     ? styleFunction
8282                     : styleConstant)(name, value, priority == null ? "" : priority))
8283               : styleValue(this.node(), name);
8284         }
8285
8286         function styleValue(node, name) {
8287           return node.style.getPropertyValue(name)
8288               || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);
8289         }
8290
8291         function propertyRemove(name) {
8292           return function() {
8293             delete this[name];
8294           };
8295         }
8296
8297         function propertyConstant(name, value) {
8298           return function() {
8299             this[name] = value;
8300           };
8301         }
8302
8303         function propertyFunction(name, value) {
8304           return function() {
8305             var v = value.apply(this, arguments);
8306             if (v == null) { delete this[name]; }
8307             else { this[name] = v; }
8308           };
8309         }
8310
8311         function selection_property(name, value) {
8312           return arguments.length > 1
8313               ? this.each((value == null
8314                   ? propertyRemove : typeof value === "function"
8315                   ? propertyFunction
8316                   : propertyConstant)(name, value))
8317               : this.node()[name];
8318         }
8319
8320         function classArray(string) {
8321           return string.trim().split(/^|\s+/);
8322         }
8323
8324         function classList(node) {
8325           return node.classList || new ClassList(node);
8326         }
8327
8328         function ClassList(node) {
8329           this._node = node;
8330           this._names = classArray(node.getAttribute("class") || "");
8331         }
8332
8333         ClassList.prototype = {
8334           add: function(name) {
8335             var i = this._names.indexOf(name);
8336             if (i < 0) {
8337               this._names.push(name);
8338               this._node.setAttribute("class", this._names.join(" "));
8339             }
8340           },
8341           remove: function(name) {
8342             var i = this._names.indexOf(name);
8343             if (i >= 0) {
8344               this._names.splice(i, 1);
8345               this._node.setAttribute("class", this._names.join(" "));
8346             }
8347           },
8348           contains: function(name) {
8349             return this._names.indexOf(name) >= 0;
8350           }
8351         };
8352
8353         function classedAdd(node, names) {
8354           var list = classList(node), i = -1, n = names.length;
8355           while (++i < n) { list.add(names[i]); }
8356         }
8357
8358         function classedRemove(node, names) {
8359           var list = classList(node), i = -1, n = names.length;
8360           while (++i < n) { list.remove(names[i]); }
8361         }
8362
8363         function classedTrue(names) {
8364           return function() {
8365             classedAdd(this, names);
8366           };
8367         }
8368
8369         function classedFalse(names) {
8370           return function() {
8371             classedRemove(this, names);
8372           };
8373         }
8374
8375         function classedFunction(names, value) {
8376           return function() {
8377             (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
8378           };
8379         }
8380
8381         function selection_classed(name, value) {
8382           var names = classArray(name + "");
8383
8384           if (arguments.length < 2) {
8385             var list = classList(this.node()), i = -1, n = names.length;
8386             while (++i < n) { if (!list.contains(names[i])) { return false; } }
8387             return true;
8388           }
8389
8390           return this.each((typeof value === "function"
8391               ? classedFunction : value
8392               ? classedTrue
8393               : classedFalse)(names, value));
8394         }
8395
8396         function textRemove() {
8397           this.textContent = "";
8398         }
8399
8400         function textConstant(value) {
8401           return function() {
8402             this.textContent = value;
8403           };
8404         }
8405
8406         function textFunction(value) {
8407           return function() {
8408             var v = value.apply(this, arguments);
8409             this.textContent = v == null ? "" : v;
8410           };
8411         }
8412
8413         function selection_text(value) {
8414           return arguments.length
8415               ? this.each(value == null
8416                   ? textRemove : (typeof value === "function"
8417                   ? textFunction
8418                   : textConstant)(value))
8419               : this.node().textContent;
8420         }
8421
8422         function htmlRemove() {
8423           this.innerHTML = "";
8424         }
8425
8426         function htmlConstant(value) {
8427           return function() {
8428             this.innerHTML = value;
8429           };
8430         }
8431
8432         function htmlFunction(value) {
8433           return function() {
8434             var v = value.apply(this, arguments);
8435             this.innerHTML = v == null ? "" : v;
8436           };
8437         }
8438
8439         function selection_html(value) {
8440           return arguments.length
8441               ? this.each(value == null
8442                   ? htmlRemove : (typeof value === "function"
8443                   ? htmlFunction
8444                   : htmlConstant)(value))
8445               : this.node().innerHTML;
8446         }
8447
8448         function raise() {
8449           if (this.nextSibling) { this.parentNode.appendChild(this); }
8450         }
8451
8452         function selection_raise() {
8453           return this.each(raise);
8454         }
8455
8456         function lower() {
8457           if (this.previousSibling) { this.parentNode.insertBefore(this, this.parentNode.firstChild); }
8458         }
8459
8460         function selection_lower() {
8461           return this.each(lower);
8462         }
8463
8464         function selection_append(name) {
8465           var create = typeof name === "function" ? name : creator(name);
8466           return this.select(function() {
8467             return this.appendChild(create.apply(this, arguments));
8468           });
8469         }
8470
8471         function constantNull() {
8472           return null;
8473         }
8474
8475         function selection_insert(name, before) {
8476           var create = typeof name === "function" ? name : creator(name),
8477               select = before == null ? constantNull : typeof before === "function" ? before : selector(before);
8478           return this.select(function() {
8479             return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
8480           });
8481         }
8482
8483         function remove() {
8484           var parent = this.parentNode;
8485           if (parent) { parent.removeChild(this); }
8486         }
8487
8488         function selection_remove() {
8489           return this.each(remove);
8490         }
8491
8492         function selection_cloneShallow() {
8493           var clone = this.cloneNode(false), parent = this.parentNode;
8494           return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
8495         }
8496
8497         function selection_cloneDeep() {
8498           var clone = this.cloneNode(true), parent = this.parentNode;
8499           return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
8500         }
8501
8502         function selection_clone(deep) {
8503           return this.select(deep ? selection_cloneDeep : selection_cloneShallow);
8504         }
8505
8506         function selection_datum(value) {
8507           return arguments.length
8508               ? this.property("__data__", value)
8509               : this.node().__data__;
8510         }
8511
8512         var filterEvents = {};
8513
8514         var event = null;
8515
8516         if (typeof document !== "undefined") {
8517           var element = document.documentElement;
8518           if (!("onmouseenter" in element)) {
8519             filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"};
8520           }
8521         }
8522
8523         function filterContextListener(listener, index, group) {
8524           listener = contextListener(listener, index, group);
8525           return function(event) {
8526             var related = event.relatedTarget;
8527             if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {
8528               listener.call(this, event);
8529             }
8530           };
8531         }
8532
8533         function contextListener(listener, index, group) {
8534           return function(event1) {
8535             var event0 = event; // Events can be reentrant (e.g., focus).
8536             event = event1;
8537             try {
8538               listener.call(this, this.__data__, index, group);
8539             } finally {
8540               event = event0;
8541             }
8542           };
8543         }
8544
8545         function parseTypenames$1(typenames) {
8546           return typenames.trim().split(/^|\s+/).map(function(t) {
8547             var name = "", i = t.indexOf(".");
8548             if (i >= 0) { name = t.slice(i + 1), t = t.slice(0, i); }
8549             return {type: t, name: name};
8550           });
8551         }
8552
8553         function onRemove(typename) {
8554           return function() {
8555             var on = this.__on;
8556             if (!on) { return; }
8557             for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
8558               if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {
8559                 this.removeEventListener(o.type, o.listener, o.capture);
8560               } else {
8561                 on[++i] = o;
8562               }
8563             }
8564             if (++i) { on.length = i; }
8565             else { delete this.__on; }
8566           };
8567         }
8568
8569         function onAdd(typename, value, capture) {
8570           var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;
8571           return function(d, i, group) {
8572             var on = this.__on, o, listener = wrap(value, i, group);
8573             if (on) { for (var j = 0, m = on.length; j < m; ++j) {
8574               if ((o = on[j]).type === typename.type && o.name === typename.name) {
8575                 this.removeEventListener(o.type, o.listener, o.capture);
8576                 this.addEventListener(o.type, o.listener = listener, o.capture = capture);
8577                 o.value = value;
8578                 return;
8579               }
8580             } }
8581             this.addEventListener(typename.type, listener, capture);
8582             o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};
8583             if (!on) { this.__on = [o]; }
8584             else { on.push(o); }
8585           };
8586         }
8587
8588         function selection_on(typename, value, capture) {
8589           var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t;
8590
8591           if (arguments.length < 2) {
8592             var on = this.node().__on;
8593             if (on) { for (var j = 0, m = on.length, o; j < m; ++j) {
8594               for (i = 0, o = on[j]; i < n; ++i) {
8595                 if ((t = typenames[i]).type === o.type && t.name === o.name) {
8596                   return o.value;
8597                 }
8598               }
8599             } }
8600             return;
8601           }
8602
8603           on = value ? onAdd : onRemove;
8604           if (capture == null) { capture = false; }
8605           for (i = 0; i < n; ++i) { this.each(on(typenames[i], value, capture)); }
8606           return this;
8607         }
8608
8609         function customEvent(event1, listener, that, args) {
8610           var event0 = event;
8611           event1.sourceEvent = event;
8612           event = event1;
8613           try {
8614             return listener.apply(that, args);
8615           } finally {
8616             event = event0;
8617           }
8618         }
8619
8620         function dispatchEvent(node, type, params) {
8621           var window = defaultView(node),
8622               event = window.CustomEvent;
8623
8624           if (typeof event === "function") {
8625             event = new event(type, params);
8626           } else {
8627             event = window.document.createEvent("Event");
8628             if (params) { event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; }
8629             else { event.initEvent(type, false, false); }
8630           }
8631
8632           node.dispatchEvent(event);
8633         }
8634
8635         function dispatchConstant(type, params) {
8636           return function() {
8637             return dispatchEvent(this, type, params);
8638           };
8639         }
8640
8641         function dispatchFunction(type, params) {
8642           return function() {
8643             return dispatchEvent(this, type, params.apply(this, arguments));
8644           };
8645         }
8646
8647         function selection_dispatch(type, params) {
8648           return this.each((typeof params === "function"
8649               ? dispatchFunction
8650               : dispatchConstant)(type, params));
8651         }
8652
8653         var root$1 = [null];
8654
8655         function Selection(groups, parents) {
8656           this._groups = groups;
8657           this._parents = parents;
8658         }
8659
8660         function selection() {
8661           return new Selection([[document.documentElement]], root$1);
8662         }
8663
8664         Selection.prototype = selection.prototype = {
8665           constructor: Selection,
8666           select: selection_select,
8667           selectAll: selection_selectAll,
8668           filter: selection_filter,
8669           data: selection_data,
8670           enter: selection_enter,
8671           exit: selection_exit,
8672           join: selection_join,
8673           merge: selection_merge,
8674           order: selection_order,
8675           sort: selection_sort,
8676           call: selection_call,
8677           nodes: selection_nodes,
8678           node: selection_node,
8679           size: selection_size,
8680           empty: selection_empty,
8681           each: selection_each,
8682           attr: selection_attr,
8683           style: selection_style,
8684           property: selection_property,
8685           classed: selection_classed,
8686           text: selection_text,
8687           html: selection_html,
8688           raise: selection_raise,
8689           lower: selection_lower,
8690           append: selection_append,
8691           insert: selection_insert,
8692           remove: selection_remove,
8693           clone: selection_clone,
8694           datum: selection_datum,
8695           on: selection_on,
8696           dispatch: selection_dispatch
8697         };
8698
8699         function d3_select(selector) {
8700           return typeof selector === "string"
8701               ? new Selection([[document.querySelector(selector)]], [document.documentElement])
8702               : new Selection([[selector]], root$1);
8703         }
8704
8705         function create$7(name) {
8706           return d3_select(creator(name).call(document.documentElement));
8707         }
8708
8709         var nextId = 0;
8710
8711         function local() {
8712           return new Local;
8713         }
8714
8715         function Local() {
8716           this._ = "@" + (++nextId).toString(36);
8717         }
8718
8719         Local.prototype = local.prototype = {
8720           constructor: Local,
8721           get: function(node) {
8722             var id = this._;
8723             while (!(id in node)) { if (!(node = node.parentNode)) { return; } }
8724             return node[id];
8725           },
8726           set: function(node, value) {
8727             return node[this._] = value;
8728           },
8729           remove: function(node) {
8730             return this._ in node && delete node[this._];
8731           },
8732           toString: function() {
8733             return this._;
8734           }
8735         };
8736
8737         function sourceEvent() {
8738           var current = event, source;
8739           while (source = current.sourceEvent) { current = source; }
8740           return current;
8741         }
8742
8743         function point(node, event) {
8744           var svg = node.ownerSVGElement || node;
8745
8746           if (svg.createSVGPoint) {
8747             var point = svg.createSVGPoint();
8748             point.x = event.clientX, point.y = event.clientY;
8749             point = point.matrixTransform(node.getScreenCTM().inverse());
8750             return [point.x, point.y];
8751           }
8752
8753           var rect = node.getBoundingClientRect();
8754           return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
8755         }
8756
8757         function d3_mouse(node) {
8758           var event = sourceEvent();
8759           if (event.changedTouches) { event = event.changedTouches[0]; }
8760           return point(node, event);
8761         }
8762
8763         function d3_selectAll(selector) {
8764           return typeof selector === "string"
8765               ? new Selection([document.querySelectorAll(selector)], [document.documentElement])
8766               : new Selection([selector == null ? [] : selector], root$1);
8767         }
8768
8769         function touch(node, touches, identifier) {
8770           if (arguments.length < 3) { identifier = touches, touches = sourceEvent().changedTouches; }
8771
8772           for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {
8773             if ((touch = touches[i]).identifier === identifier) {
8774               return point(node, touch);
8775             }
8776           }
8777
8778           return null;
8779         }
8780
8781         function d3_touches(node, touches) {
8782           if (touches == null) { touches = sourceEvent().touches; }
8783
8784           for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {
8785             points[i] = point(node, touches[i]);
8786           }
8787
8788           return points;
8789         }
8790
8791         function nopropagation() {
8792           event.stopImmediatePropagation();
8793         }
8794
8795         function noevent() {
8796           event.preventDefault();
8797           event.stopImmediatePropagation();
8798         }
8799
8800         function dragDisable(view) {
8801           var root = view.document.documentElement,
8802               selection = d3_select(view).on("dragstart.drag", noevent, true);
8803           if ("onselectstart" in root) {
8804             selection.on("selectstart.drag", noevent, true);
8805           } else {
8806             root.__noselect = root.style.MozUserSelect;
8807             root.style.MozUserSelect = "none";
8808           }
8809         }
8810
8811         function yesdrag(view, noclick) {
8812           var root = view.document.documentElement,
8813               selection = d3_select(view).on("dragstart.drag", null);
8814           if (noclick) {
8815             selection.on("click.drag", noevent, true);
8816             setTimeout(function() { selection.on("click.drag", null); }, 0);
8817           }
8818           if ("onselectstart" in root) {
8819             selection.on("selectstart.drag", null);
8820           } else {
8821             root.style.MozUserSelect = root.__noselect;
8822             delete root.__noselect;
8823           }
8824         }
8825
8826         function constant$2(x) {
8827           return function() {
8828             return x;
8829           };
8830         }
8831
8832         function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {
8833           this.target = target;
8834           this.type = type;
8835           this.subject = subject;
8836           this.identifier = id;
8837           this.active = active;
8838           this.x = x;
8839           this.y = y;
8840           this.dx = dx;
8841           this.dy = dy;
8842           this._ = dispatch;
8843         }
8844
8845         DragEvent.prototype.on = function() {
8846           var value = this._.on.apply(this._, arguments);
8847           return value === this._ ? this : value;
8848         };
8849
8850         // Ignore right-click, since that should open the context menu.
8851         function defaultFilter() {
8852           return !event.ctrlKey && !event.button;
8853         }
8854
8855         function defaultContainer() {
8856           return this.parentNode;
8857         }
8858
8859         function defaultSubject(d) {
8860           return d == null ? {x: event.x, y: event.y} : d;
8861         }
8862
8863         function defaultTouchable() {
8864           return navigator.maxTouchPoints || ("ontouchstart" in this);
8865         }
8866
8867         function d3_drag() {
8868           var filter = defaultFilter,
8869               container = defaultContainer,
8870               subject = defaultSubject,
8871               touchable = defaultTouchable,
8872               gestures = {},
8873               listeners = dispatch("start", "drag", "end"),
8874               active = 0,
8875               mousedownx,
8876               mousedowny,
8877               mousemoving,
8878               touchending,
8879               clickDistance2 = 0;
8880
8881           function drag(selection) {
8882             selection
8883                 .on("mousedown.drag", mousedowned)
8884               .filter(touchable)
8885                 .on("touchstart.drag", touchstarted)
8886                 .on("touchmove.drag", touchmoved)
8887                 .on("touchend.drag touchcancel.drag", touchended)
8888                 .style("touch-action", "none")
8889                 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
8890           }
8891
8892           function mousedowned() {
8893             if (touchending || !filter.apply(this, arguments)) { return; }
8894             var gesture = beforestart("mouse", container.apply(this, arguments), d3_mouse, this, arguments);
8895             if (!gesture) { return; }
8896             d3_select(event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true);
8897             dragDisable(event.view);
8898             nopropagation();
8899             mousemoving = false;
8900             mousedownx = event.clientX;
8901             mousedowny = event.clientY;
8902             gesture("start");
8903           }
8904
8905           function mousemoved() {
8906             noevent();
8907             if (!mousemoving) {
8908               var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;
8909               mousemoving = dx * dx + dy * dy > clickDistance2;
8910             }
8911             gestures.mouse("drag");
8912           }
8913
8914           function mouseupped() {
8915             d3_select(event.view).on("mousemove.drag mouseup.drag", null);
8916             yesdrag(event.view, mousemoving);
8917             noevent();
8918             gestures.mouse("end");
8919           }
8920
8921           function touchstarted() {
8922             var arguments$1 = arguments;
8923
8924             if (!filter.apply(this, arguments)) { return; }
8925             var touches = event.changedTouches,
8926                 c = container.apply(this, arguments),
8927                 n = touches.length, i, gesture;
8928
8929             for (i = 0; i < n; ++i) {
8930               if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments$1)) {
8931                 nopropagation();
8932                 gesture("start");
8933               }
8934             }
8935           }
8936
8937           function touchmoved() {
8938             var touches = event.changedTouches,
8939                 n = touches.length, i, gesture;
8940
8941             for (i = 0; i < n; ++i) {
8942               if (gesture = gestures[touches[i].identifier]) {
8943                 noevent();
8944                 gesture("drag");
8945               }
8946             }
8947           }
8948
8949           function touchended() {
8950             var touches = event.changedTouches,
8951                 n = touches.length, i, gesture;
8952
8953             if (touchending) { clearTimeout(touchending); }
8954             touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
8955             for (i = 0; i < n; ++i) {
8956               if (gesture = gestures[touches[i].identifier]) {
8957                 nopropagation();
8958                 gesture("end");
8959               }
8960             }
8961           }
8962
8963           function beforestart(id, container, point, that, args) {
8964             var p = point(container, id), s, dx, dy,
8965                 sublisteners = listeners.copy();
8966
8967             if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {
8968               if ((event.subject = s = subject.apply(that, args)) == null) { return false; }
8969               dx = s.x - p[0] || 0;
8970               dy = s.y - p[1] || 0;
8971               return true;
8972             })) { return; }
8973
8974             return function gesture(type) {
8975               var p0 = p, n;
8976               switch (type) {
8977                 case "start": gestures[id] = gesture, n = active++; break;
8978                 case "end": delete gestures[id], --active; // nobreak
8979                 case "drag": p = point(container, id), n = active; break;
8980               }
8981               customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);
8982             };
8983           }
8984
8985           drag.filter = function(_) {
8986             return arguments.length ? (filter = typeof _ === "function" ? _ : constant$2(!!_), drag) : filter;
8987           };
8988
8989           drag.container = function(_) {
8990             return arguments.length ? (container = typeof _ === "function" ? _ : constant$2(_), drag) : container;
8991           };
8992
8993           drag.subject = function(_) {
8994             return arguments.length ? (subject = typeof _ === "function" ? _ : constant$2(_), drag) : subject;
8995           };
8996
8997           drag.touchable = function(_) {
8998             return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$2(!!_), drag) : touchable;
8999           };
9000
9001           drag.on = function() {
9002             var value = listeners.on.apply(listeners, arguments);
9003             return value === listeners ? drag : value;
9004           };
9005
9006           drag.clickDistance = function(_) {
9007             return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);
9008           };
9009
9010           return drag;
9011         }
9012
9013         function define$1(constructor, factory, prototype) {
9014           constructor.prototype = factory.prototype = prototype;
9015           prototype.constructor = constructor;
9016         }
9017
9018         function extend(parent, definition) {
9019           var prototype = Object.create(parent.prototype);
9020           for (var key in definition) { prototype[key] = definition[key]; }
9021           return prototype;
9022         }
9023
9024         function Color() {}
9025
9026         var darker = 0.7;
9027         var brighter = 1 / darker;
9028
9029         var reI = "\\s*([+-]?\\d+)\\s*",
9030             reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",
9031             reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
9032             reHex = /^#([0-9a-f]{3,8})$/,
9033             reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"),
9034             reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"),
9035             reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"),
9036             reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"),
9037             reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"),
9038             reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$");
9039
9040         var named = {
9041           aliceblue: 0xf0f8ff,
9042           antiquewhite: 0xfaebd7,
9043           aqua: 0x00ffff,
9044           aquamarine: 0x7fffd4,
9045           azure: 0xf0ffff,
9046           beige: 0xf5f5dc,
9047           bisque: 0xffe4c4,
9048           black: 0x000000,
9049           blanchedalmond: 0xffebcd,
9050           blue: 0x0000ff,
9051           blueviolet: 0x8a2be2,
9052           brown: 0xa52a2a,
9053           burlywood: 0xdeb887,
9054           cadetblue: 0x5f9ea0,
9055           chartreuse: 0x7fff00,
9056           chocolate: 0xd2691e,
9057           coral: 0xff7f50,
9058           cornflowerblue: 0x6495ed,
9059           cornsilk: 0xfff8dc,
9060           crimson: 0xdc143c,
9061           cyan: 0x00ffff,
9062           darkblue: 0x00008b,
9063           darkcyan: 0x008b8b,
9064           darkgoldenrod: 0xb8860b,
9065           darkgray: 0xa9a9a9,
9066           darkgreen: 0x006400,
9067           darkgrey: 0xa9a9a9,
9068           darkkhaki: 0xbdb76b,
9069           darkmagenta: 0x8b008b,
9070           darkolivegreen: 0x556b2f,
9071           darkorange: 0xff8c00,
9072           darkorchid: 0x9932cc,
9073           darkred: 0x8b0000,
9074           darksalmon: 0xe9967a,
9075           darkseagreen: 0x8fbc8f,
9076           darkslateblue: 0x483d8b,
9077           darkslategray: 0x2f4f4f,
9078           darkslategrey: 0x2f4f4f,
9079           darkturquoise: 0x00ced1,
9080           darkviolet: 0x9400d3,
9081           deeppink: 0xff1493,
9082           deepskyblue: 0x00bfff,
9083           dimgray: 0x696969,
9084           dimgrey: 0x696969,
9085           dodgerblue: 0x1e90ff,
9086           firebrick: 0xb22222,
9087           floralwhite: 0xfffaf0,
9088           forestgreen: 0x228b22,
9089           fuchsia: 0xff00ff,
9090           gainsboro: 0xdcdcdc,
9091           ghostwhite: 0xf8f8ff,
9092           gold: 0xffd700,
9093           goldenrod: 0xdaa520,
9094           gray: 0x808080,
9095           green: 0x008000,
9096           greenyellow: 0xadff2f,
9097           grey: 0x808080,
9098           honeydew: 0xf0fff0,
9099           hotpink: 0xff69b4,
9100           indianred: 0xcd5c5c,
9101           indigo: 0x4b0082,
9102           ivory: 0xfffff0,
9103           khaki: 0xf0e68c,
9104           lavender: 0xe6e6fa,
9105           lavenderblush: 0xfff0f5,
9106           lawngreen: 0x7cfc00,
9107           lemonchiffon: 0xfffacd,
9108           lightblue: 0xadd8e6,
9109           lightcoral: 0xf08080,
9110           lightcyan: 0xe0ffff,
9111           lightgoldenrodyellow: 0xfafad2,
9112           lightgray: 0xd3d3d3,
9113           lightgreen: 0x90ee90,
9114           lightgrey: 0xd3d3d3,
9115           lightpink: 0xffb6c1,
9116           lightsalmon: 0xffa07a,
9117           lightseagreen: 0x20b2aa,
9118           lightskyblue: 0x87cefa,
9119           lightslategray: 0x778899,
9120           lightslategrey: 0x778899,
9121           lightsteelblue: 0xb0c4de,
9122           lightyellow: 0xffffe0,
9123           lime: 0x00ff00,
9124           limegreen: 0x32cd32,
9125           linen: 0xfaf0e6,
9126           magenta: 0xff00ff,
9127           maroon: 0x800000,
9128           mediumaquamarine: 0x66cdaa,
9129           mediumblue: 0x0000cd,
9130           mediumorchid: 0xba55d3,
9131           mediumpurple: 0x9370db,
9132           mediumseagreen: 0x3cb371,
9133           mediumslateblue: 0x7b68ee,
9134           mediumspringgreen: 0x00fa9a,
9135           mediumturquoise: 0x48d1cc,
9136           mediumvioletred: 0xc71585,
9137           midnightblue: 0x191970,
9138           mintcream: 0xf5fffa,
9139           mistyrose: 0xffe4e1,
9140           moccasin: 0xffe4b5,
9141           navajowhite: 0xffdead,
9142           navy: 0x000080,
9143           oldlace: 0xfdf5e6,
9144           olive: 0x808000,
9145           olivedrab: 0x6b8e23,
9146           orange: 0xffa500,
9147           orangered: 0xff4500,
9148           orchid: 0xda70d6,
9149           palegoldenrod: 0xeee8aa,
9150           palegreen: 0x98fb98,
9151           paleturquoise: 0xafeeee,
9152           palevioletred: 0xdb7093,
9153           papayawhip: 0xffefd5,
9154           peachpuff: 0xffdab9,
9155           peru: 0xcd853f,
9156           pink: 0xffc0cb,
9157           plum: 0xdda0dd,
9158           powderblue: 0xb0e0e6,
9159           purple: 0x800080,
9160           rebeccapurple: 0x663399,
9161           red: 0xff0000,
9162           rosybrown: 0xbc8f8f,
9163           royalblue: 0x4169e1,
9164           saddlebrown: 0x8b4513,
9165           salmon: 0xfa8072,
9166           sandybrown: 0xf4a460,
9167           seagreen: 0x2e8b57,
9168           seashell: 0xfff5ee,
9169           sienna: 0xa0522d,
9170           silver: 0xc0c0c0,
9171           skyblue: 0x87ceeb,
9172           slateblue: 0x6a5acd,
9173           slategray: 0x708090,
9174           slategrey: 0x708090,
9175           snow: 0xfffafa,
9176           springgreen: 0x00ff7f,
9177           steelblue: 0x4682b4,
9178           tan: 0xd2b48c,
9179           teal: 0x008080,
9180           thistle: 0xd8bfd8,
9181           tomato: 0xff6347,
9182           turquoise: 0x40e0d0,
9183           violet: 0xee82ee,
9184           wheat: 0xf5deb3,
9185           white: 0xffffff,
9186           whitesmoke: 0xf5f5f5,
9187           yellow: 0xffff00,
9188           yellowgreen: 0x9acd32
9189         };
9190
9191         define$1(Color, color, {
9192           copy: function(channels) {
9193             return Object.assign(new this.constructor, this, channels);
9194           },
9195           displayable: function() {
9196             return this.rgb().displayable();
9197           },
9198           hex: color_formatHex, // Deprecated! Use color.formatHex.
9199           formatHex: color_formatHex,
9200           formatHsl: color_formatHsl,
9201           formatRgb: color_formatRgb,
9202           toString: color_formatRgb
9203         });
9204
9205         function color_formatHex() {
9206           return this.rgb().formatHex();
9207         }
9208
9209         function color_formatHsl() {
9210           return hslConvert(this).formatHsl();
9211         }
9212
9213         function color_formatRgb() {
9214           return this.rgb().formatRgb();
9215         }
9216
9217         function color(format) {
9218           var m, l;
9219           format = (format + "").trim().toLowerCase();
9220           return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000
9221               : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00
9222               : l === 8 ? new Rgb(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000
9223               : l === 4 ? new Rgb((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000
9224               : null) // invalid hex
9225               : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
9226               : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
9227               : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
9228               : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
9229               : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
9230               : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
9231               : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins
9232               : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
9233               : null;
9234         }
9235
9236         function rgbn(n) {
9237           return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
9238         }
9239
9240         function rgba(r, g, b, a) {
9241           if (a <= 0) { r = g = b = NaN; }
9242           return new Rgb(r, g, b, a);
9243         }
9244
9245         function rgbConvert(o) {
9246           if (!(o instanceof Color)) { o = color(o); }
9247           if (!o) { return new Rgb; }
9248           o = o.rgb();
9249           return new Rgb(o.r, o.g, o.b, o.opacity);
9250         }
9251
9252         function rgb(r, g, b, opacity) {
9253           return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
9254         }
9255
9256         function Rgb(r, g, b, opacity) {
9257           this.r = +r;
9258           this.g = +g;
9259           this.b = +b;
9260           this.opacity = +opacity;
9261         }
9262
9263         define$1(Rgb, rgb, extend(Color, {
9264           brighter: function(k) {
9265             k = k == null ? brighter : Math.pow(brighter, k);
9266             return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
9267           },
9268           darker: function(k) {
9269             k = k == null ? darker : Math.pow(darker, k);
9270             return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
9271           },
9272           rgb: function() {
9273             return this;
9274           },
9275           displayable: function() {
9276             return (-0.5 <= this.r && this.r < 255.5)
9277                 && (-0.5 <= this.g && this.g < 255.5)
9278                 && (-0.5 <= this.b && this.b < 255.5)
9279                 && (0 <= this.opacity && this.opacity <= 1);
9280           },
9281           hex: rgb_formatHex, // Deprecated! Use color.formatHex.
9282           formatHex: rgb_formatHex,
9283           formatRgb: rgb_formatRgb,
9284           toString: rgb_formatRgb
9285         }));
9286
9287         function rgb_formatHex() {
9288           return "#" + hex$1(this.r) + hex$1(this.g) + hex$1(this.b);
9289         }
9290
9291         function rgb_formatRgb() {
9292           var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
9293           return (a === 1 ? "rgb(" : "rgba(")
9294               + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", "
9295               + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", "
9296               + Math.max(0, Math.min(255, Math.round(this.b) || 0))
9297               + (a === 1 ? ")" : ", " + a + ")");
9298         }
9299
9300         function hex$1(value) {
9301           value = Math.max(0, Math.min(255, Math.round(value) || 0));
9302           return (value < 16 ? "0" : "") + value.toString(16);
9303         }
9304
9305         function hsla(h, s, l, a) {
9306           if (a <= 0) { h = s = l = NaN; }
9307           else if (l <= 0 || l >= 1) { h = s = NaN; }
9308           else if (s <= 0) { h = NaN; }
9309           return new Hsl(h, s, l, a);
9310         }
9311
9312         function hslConvert(o) {
9313           if (o instanceof Hsl) { return new Hsl(o.h, o.s, o.l, o.opacity); }
9314           if (!(o instanceof Color)) { o = color(o); }
9315           if (!o) { return new Hsl; }
9316           if (o instanceof Hsl) { return o; }
9317           o = o.rgb();
9318           var r = o.r / 255,
9319               g = o.g / 255,
9320               b = o.b / 255,
9321               min = Math.min(r, g, b),
9322               max = Math.max(r, g, b),
9323               h = NaN,
9324               s = max - min,
9325               l = (max + min) / 2;
9326           if (s) {
9327             if (r === max) { h = (g - b) / s + (g < b) * 6; }
9328             else if (g === max) { h = (b - r) / s + 2; }
9329             else { h = (r - g) / s + 4; }
9330             s /= l < 0.5 ? max + min : 2 - max - min;
9331             h *= 60;
9332           } else {
9333             s = l > 0 && l < 1 ? 0 : h;
9334           }
9335           return new Hsl(h, s, l, o.opacity);
9336         }
9337
9338         function hsl(h, s, l, opacity) {
9339           return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
9340         }
9341
9342         function Hsl(h, s, l, opacity) {
9343           this.h = +h;
9344           this.s = +s;
9345           this.l = +l;
9346           this.opacity = +opacity;
9347         }
9348
9349         define$1(Hsl, hsl, extend(Color, {
9350           brighter: function(k) {
9351             k = k == null ? brighter : Math.pow(brighter, k);
9352             return new Hsl(this.h, this.s, this.l * k, this.opacity);
9353           },
9354           darker: function(k) {
9355             k = k == null ? darker : Math.pow(darker, k);
9356             return new Hsl(this.h, this.s, this.l * k, this.opacity);
9357           },
9358           rgb: function() {
9359             var h = this.h % 360 + (this.h < 0) * 360,
9360                 s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
9361                 l = this.l,
9362                 m2 = l + (l < 0.5 ? l : 1 - l) * s,
9363                 m1 = 2 * l - m2;
9364             return new Rgb(
9365               hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
9366               hsl2rgb(h, m1, m2),
9367               hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
9368               this.opacity
9369             );
9370           },
9371           displayable: function() {
9372             return (0 <= this.s && this.s <= 1 || isNaN(this.s))
9373                 && (0 <= this.l && this.l <= 1)
9374                 && (0 <= this.opacity && this.opacity <= 1);
9375           },
9376           formatHsl: function() {
9377             var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
9378             return (a === 1 ? "hsl(" : "hsla(")
9379                 + (this.h || 0) + ", "
9380                 + (this.s || 0) * 100 + "%, "
9381                 + (this.l || 0) * 100 + "%"
9382                 + (a === 1 ? ")" : ", " + a + ")");
9383           }
9384         }));
9385
9386         /* From FvD 13.37, CSS Color Module Level 3 */
9387         function hsl2rgb(h, m1, m2) {
9388           return (h < 60 ? m1 + (m2 - m1) * h / 60
9389               : h < 180 ? m2
9390               : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
9391               : m1) * 255;
9392         }
9393
9394         var deg2rad = Math.PI / 180;
9395         var rad2deg = 180 / Math.PI;
9396
9397         // https://observablehq.com/@mbostock/lab-and-rgb
9398         var K = 18,
9399             Xn = 0.96422,
9400             Yn = 1,
9401             Zn = 0.82521,
9402             t0 = 4 / 29,
9403             t1 = 6 / 29,
9404             t2 = 3 * t1 * t1,
9405             t3 = t1 * t1 * t1;
9406
9407         function labConvert(o) {
9408           if (o instanceof Lab) { return new Lab(o.l, o.a, o.b, o.opacity); }
9409           if (o instanceof Hcl) { return hcl2lab(o); }
9410           if (!(o instanceof Rgb)) { o = rgbConvert(o); }
9411           var r = rgb2lrgb(o.r),
9412               g = rgb2lrgb(o.g),
9413               b = rgb2lrgb(o.b),
9414               y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;
9415           if (r === g && g === b) { x = z = y; } else {
9416             x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);
9417             z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);
9418           }
9419           return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
9420         }
9421
9422         function gray(l, opacity) {
9423           return new Lab(l, 0, 0, opacity == null ? 1 : opacity);
9424         }
9425
9426         function lab(l, a, b, opacity) {
9427           return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
9428         }
9429
9430         function Lab(l, a, b, opacity) {
9431           this.l = +l;
9432           this.a = +a;
9433           this.b = +b;
9434           this.opacity = +opacity;
9435         }
9436
9437         define$1(Lab, lab, extend(Color, {
9438           brighter: function(k) {
9439             return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);
9440           },
9441           darker: function(k) {
9442             return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);
9443           },
9444           rgb: function() {
9445             var y = (this.l + 16) / 116,
9446                 x = isNaN(this.a) ? y : y + this.a / 500,
9447                 z = isNaN(this.b) ? y : y - this.b / 200;
9448             x = Xn * lab2xyz(x);
9449             y = Yn * lab2xyz(y);
9450             z = Zn * lab2xyz(z);
9451             return new Rgb(
9452               lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),
9453               lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),
9454               lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),
9455               this.opacity
9456             );
9457           }
9458         }));
9459
9460         function xyz2lab(t) {
9461           return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
9462         }
9463
9464         function lab2xyz(t) {
9465           return t > t1 ? t * t * t : t2 * (t - t0);
9466         }
9467
9468         function lrgb2rgb(x) {
9469           return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
9470         }
9471
9472         function rgb2lrgb(x) {
9473           return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
9474         }
9475
9476         function hclConvert(o) {
9477           if (o instanceof Hcl) { return new Hcl(o.h, o.c, o.l, o.opacity); }
9478           if (!(o instanceof Lab)) { o = labConvert(o); }
9479           if (o.a === 0 && o.b === 0) { return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity); }
9480           var h = Math.atan2(o.b, o.a) * rad2deg;
9481           return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
9482         }
9483
9484         function lch(l, c, h, opacity) {
9485           return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
9486         }
9487
9488         function hcl(h, c, l, opacity) {
9489           return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
9490         }
9491
9492         function Hcl(h, c, l, opacity) {
9493           this.h = +h;
9494           this.c = +c;
9495           this.l = +l;
9496           this.opacity = +opacity;
9497         }
9498
9499         function hcl2lab(o) {
9500           if (isNaN(o.h)) { return new Lab(o.l, 0, 0, o.opacity); }
9501           var h = o.h * deg2rad;
9502           return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
9503         }
9504
9505         define$1(Hcl, hcl, extend(Color, {
9506           brighter: function(k) {
9507             return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);
9508           },
9509           darker: function(k) {
9510             return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);
9511           },
9512           rgb: function() {
9513             return hcl2lab(this).rgb();
9514           }
9515         }));
9516
9517         var A = -0.14861,
9518             B = +1.78277,
9519             C = -0.29227,
9520             D = -0.90649,
9521             E = +1.97294,
9522             ED = E * D,
9523             EB = E * B,
9524             BC_DA = B * C - D * A;
9525
9526         function cubehelixConvert(o) {
9527           if (o instanceof Cubehelix) { return new Cubehelix(o.h, o.s, o.l, o.opacity); }
9528           if (!(o instanceof Rgb)) { o = rgbConvert(o); }
9529           var r = o.r / 255,
9530               g = o.g / 255,
9531               b = o.b / 255,
9532               l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
9533               bl = b - l,
9534               k = (E * (g - l) - C * bl) / D,
9535               s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
9536               h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;
9537           return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
9538         }
9539
9540         function cubehelix(h, s, l, opacity) {
9541           return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
9542         }
9543
9544         function Cubehelix(h, s, l, opacity) {
9545           this.h = +h;
9546           this.s = +s;
9547           this.l = +l;
9548           this.opacity = +opacity;
9549         }
9550
9551         define$1(Cubehelix, cubehelix, extend(Color, {
9552           brighter: function(k) {
9553             k = k == null ? brighter : Math.pow(brighter, k);
9554             return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
9555           },
9556           darker: function(k) {
9557             k = k == null ? darker : Math.pow(darker, k);
9558             return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
9559           },
9560           rgb: function() {
9561             var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,
9562                 l = +this.l,
9563                 a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
9564                 cosh = Math.cos(h),
9565                 sinh = Math.sin(h);
9566             return new Rgb(
9567               255 * (l + a * (A * cosh + B * sinh)),
9568               255 * (l + a * (C * cosh + D * sinh)),
9569               255 * (l + a * (E * cosh)),
9570               this.opacity
9571             );
9572           }
9573         }));
9574
9575         function basis(t1, v0, v1, v2, v3) {
9576           var t2 = t1 * t1, t3 = t2 * t1;
9577           return ((1 - 3 * t1 + 3 * t2 - t3) * v0
9578               + (4 - 6 * t2 + 3 * t3) * v1
9579               + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2
9580               + t3 * v3) / 6;
9581         }
9582
9583         function basis$1(values) {
9584           var n = values.length - 1;
9585           return function(t) {
9586             var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
9587                 v1 = values[i],
9588                 v2 = values[i + 1],
9589                 v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
9590                 v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
9591             return basis((t - i / n) * n, v0, v1, v2, v3);
9592           };
9593         }
9594
9595         function basisClosed(values) {
9596           var n = values.length;
9597           return function(t) {
9598             var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
9599                 v0 = values[(i + n - 1) % n],
9600                 v1 = values[i % n],
9601                 v2 = values[(i + 1) % n],
9602                 v3 = values[(i + 2) % n];
9603             return basis((t - i / n) * n, v0, v1, v2, v3);
9604           };
9605         }
9606
9607         function constant$3(x) {
9608           return function() {
9609             return x;
9610           };
9611         }
9612
9613         function linear(a, d) {
9614           return function(t) {
9615             return a + t * d;
9616           };
9617         }
9618
9619         function exponential(a, b, y) {
9620           return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
9621             return Math.pow(a + t * b, y);
9622           };
9623         }
9624
9625         function hue(a, b) {
9626           var d = b - a;
9627           return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a);
9628         }
9629
9630         function gamma(y) {
9631           return (y = +y) === 1 ? nogamma : function(a, b) {
9632             return b - a ? exponential(a, b, y) : constant$3(isNaN(a) ? b : a);
9633           };
9634         }
9635
9636         function nogamma(a, b) {
9637           var d = b - a;
9638           return d ? linear(a, d) : constant$3(isNaN(a) ? b : a);
9639         }
9640
9641         var d3_interpolateRgb = (function rgbGamma(y) {
9642           var color = gamma(y);
9643
9644           function rgb$1(start, end) {
9645             var r = color((start = rgb(start)).r, (end = rgb(end)).r),
9646                 g = color(start.g, end.g),
9647                 b = color(start.b, end.b),
9648                 opacity = nogamma(start.opacity, end.opacity);
9649             return function(t) {
9650               start.r = r(t);
9651               start.g = g(t);
9652               start.b = b(t);
9653               start.opacity = opacity(t);
9654               return start + "";
9655             };
9656           }
9657
9658           rgb$1.gamma = rgbGamma;
9659
9660           return rgb$1;
9661         })(1);
9662
9663         function rgbSpline(spline) {
9664           return function(colors) {
9665             var n = colors.length,
9666                 r = new Array(n),
9667                 g = new Array(n),
9668                 b = new Array(n),
9669                 i, color;
9670             for (i = 0; i < n; ++i) {
9671               color = rgb(colors[i]);
9672               r[i] = color.r || 0;
9673               g[i] = color.g || 0;
9674               b[i] = color.b || 0;
9675             }
9676             r = spline(r);
9677             g = spline(g);
9678             b = spline(b);
9679             color.opacity = 1;
9680             return function(t) {
9681               color.r = r(t);
9682               color.g = g(t);
9683               color.b = b(t);
9684               return color + "";
9685             };
9686           };
9687         }
9688
9689         var rgbBasis = rgbSpline(basis$1);
9690         var rgbBasisClosed = rgbSpline(basisClosed);
9691
9692         function numberArray(a, b) {
9693           if (!b) { b = []; }
9694           var n = a ? Math.min(b.length, a.length) : 0,
9695               c = b.slice(),
9696               i;
9697           return function(t) {
9698             for (i = 0; i < n; ++i) { c[i] = a[i] * (1 - t) + b[i] * t; }
9699             return c;
9700           };
9701         }
9702
9703         function isNumberArray(x) {
9704           return ArrayBuffer.isView(x) && !(x instanceof DataView);
9705         }
9706
9707         function array$2(a, b) {
9708           return (isNumberArray(b) ? numberArray : genericArray)(a, b);
9709         }
9710
9711         function genericArray(a, b) {
9712           var nb = b ? b.length : 0,
9713               na = a ? Math.min(nb, a.length) : 0,
9714               x = new Array(na),
9715               c = new Array(nb),
9716               i;
9717
9718           for (i = 0; i < na; ++i) { x[i] = d3_interpolate(a[i], b[i]); }
9719           for (; i < nb; ++i) { c[i] = b[i]; }
9720
9721           return function(t) {
9722             for (i = 0; i < na; ++i) { c[i] = x[i](t); }
9723             return c;
9724           };
9725         }
9726
9727         function date(a, b) {
9728           var d = new Date;
9729           return a = +a, b = +b, function(t) {
9730             return d.setTime(a * (1 - t) + b * t), d;
9731           };
9732         }
9733
9734         function d3_interpolateNumber(a, b) {
9735           return a = +a, b = +b, function(t) {
9736             return a * (1 - t) + b * t;
9737           };
9738         }
9739
9740         function object(a, b) {
9741           var i = {},
9742               c = {},
9743               k;
9744
9745           if (a === null || typeof a !== "object") { a = {}; }
9746           if (b === null || typeof b !== "object") { b = {}; }
9747
9748           for (k in b) {
9749             if (k in a) {
9750               i[k] = d3_interpolate(a[k], b[k]);
9751             } else {
9752               c[k] = b[k];
9753             }
9754           }
9755
9756           return function(t) {
9757             for (k in i) { c[k] = i[k](t); }
9758             return c;
9759           };
9760         }
9761
9762         var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,
9763             reB = new RegExp(reA.source, "g");
9764
9765         function zero(b) {
9766           return function() {
9767             return b;
9768           };
9769         }
9770
9771         function one(b) {
9772           return function(t) {
9773             return b(t) + "";
9774           };
9775         }
9776
9777         function interpolateString(a, b) {
9778           var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
9779               am, // current match in a
9780               bm, // current match in b
9781               bs, // string preceding current number in b, if any
9782               i = -1, // index in s
9783               s = [], // string constants and placeholders
9784               q = []; // number interpolators
9785
9786           // Coerce inputs to strings.
9787           a = a + "", b = b + "";
9788
9789           // Interpolate pairs of numbers in a & b.
9790           while ((am = reA.exec(a))
9791               && (bm = reB.exec(b))) {
9792             if ((bs = bm.index) > bi) { // a string precedes the next number in b
9793               bs = b.slice(bi, bs);
9794               if (s[i]) { s[i] += bs; } // coalesce with previous string
9795               else { s[++i] = bs; }
9796             }
9797             if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
9798               if (s[i]) { s[i] += bm; } // coalesce with previous string
9799               else { s[++i] = bm; }
9800             } else { // interpolate non-matching numbers
9801               s[++i] = null;
9802               q.push({i: i, x: d3_interpolateNumber(am, bm)});
9803             }
9804             bi = reB.lastIndex;
9805           }
9806
9807           // Add remains of b.
9808           if (bi < b.length) {
9809             bs = b.slice(bi);
9810             if (s[i]) { s[i] += bs; } // coalesce with previous string
9811             else { s[++i] = bs; }
9812           }
9813
9814           // Special optimization for only a single match.
9815           // Otherwise, interpolate each of the numbers and rejoin the string.
9816           return s.length < 2 ? (q[0]
9817               ? one(q[0].x)
9818               : zero(b))
9819               : (b = q.length, function(t) {
9820                   for (var i = 0, o; i < b; ++i) { s[(o = q[i]).i] = o.x(t); }
9821                   return s.join("");
9822                 });
9823         }
9824
9825         function d3_interpolate(a, b) {
9826           var t = typeof b, c;
9827           return b == null || t === "boolean" ? constant$3(b)
9828               : (t === "number" ? d3_interpolateNumber
9829               : t === "string" ? ((c = color(b)) ? (b = c, d3_interpolateRgb) : interpolateString)
9830               : b instanceof color ? d3_interpolateRgb
9831               : b instanceof Date ? date
9832               : isNumberArray(b) ? numberArray
9833               : Array.isArray(b) ? genericArray
9834               : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object
9835               : d3_interpolateNumber)(a, b);
9836         }
9837
9838         function discrete(range) {
9839           var n = range.length;
9840           return function(t) {
9841             return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
9842           };
9843         }
9844
9845         function hue$1(a, b) {
9846           var i = hue(+a, +b);
9847           return function(t) {
9848             var x = i(t);
9849             return x - 360 * Math.floor(x / 360);
9850           };
9851         }
9852
9853         function interpolateRound(a, b) {
9854           return a = +a, b = +b, function(t) {
9855             return Math.round(a * (1 - t) + b * t);
9856           };
9857         }
9858
9859         var degrees = 180 / Math.PI;
9860
9861         var identity$2 = {
9862           translateX: 0,
9863           translateY: 0,
9864           rotate: 0,
9865           skewX: 0,
9866           scaleX: 1,
9867           scaleY: 1
9868         };
9869
9870         function decompose(a, b, c, d, e, f) {
9871           var scaleX, scaleY, skewX;
9872           if (scaleX = Math.sqrt(a * a + b * b)) { a /= scaleX, b /= scaleX; }
9873           if (skewX = a * c + b * d) { c -= a * skewX, d -= b * skewX; }
9874           if (scaleY = Math.sqrt(c * c + d * d)) { c /= scaleY, d /= scaleY, skewX /= scaleY; }
9875           if (a * d < b * c) { a = -a, b = -b, skewX = -skewX, scaleX = -scaleX; }
9876           return {
9877             translateX: e,
9878             translateY: f,
9879             rotate: Math.atan2(b, a) * degrees,
9880             skewX: Math.atan(skewX) * degrees,
9881             scaleX: scaleX,
9882             scaleY: scaleY
9883           };
9884         }
9885
9886         var cssNode,
9887             cssRoot,
9888             cssView,
9889             svgNode;
9890
9891         function parseCss(value) {
9892           if (value === "none") { return identity$2; }
9893           if (!cssNode) { cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView; }
9894           cssNode.style.transform = value;
9895           value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform");
9896           cssRoot.removeChild(cssNode);
9897           value = value.slice(7, -1).split(",");
9898           return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);
9899         }
9900
9901         function parseSvg(value) {
9902           if (value == null) { return identity$2; }
9903           if (!svgNode) { svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); }
9904           svgNode.setAttribute("transform", value);
9905           if (!(value = svgNode.transform.baseVal.consolidate())) { return identity$2; }
9906           value = value.matrix;
9907           return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
9908         }
9909
9910         function interpolateTransform(parse, pxComma, pxParen, degParen) {
9911
9912           function pop(s) {
9913             return s.length ? s.pop() + " " : "";
9914           }
9915
9916           function translate(xa, ya, xb, yb, s, q) {
9917             if (xa !== xb || ya !== yb) {
9918               var i = s.push("translate(", null, pxComma, null, pxParen);
9919               q.push({i: i - 4, x: d3_interpolateNumber(xa, xb)}, {i: i - 2, x: d3_interpolateNumber(ya, yb)});
9920             } else if (xb || yb) {
9921               s.push("translate(" + xb + pxComma + yb + pxParen);
9922             }
9923           }
9924
9925           function rotate(a, b, s, q) {
9926             if (a !== b) {
9927               if (a - b > 180) { b += 360; } else if (b - a > 180) { a += 360; } // shortest path
9928               q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: d3_interpolateNumber(a, b)});
9929             } else if (b) {
9930               s.push(pop(s) + "rotate(" + b + degParen);
9931             }
9932           }
9933
9934           function skewX(a, b, s, q) {
9935             if (a !== b) {
9936               q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: d3_interpolateNumber(a, b)});
9937             } else if (b) {
9938               s.push(pop(s) + "skewX(" + b + degParen);
9939             }
9940           }
9941
9942           function scale(xa, ya, xb, yb, s, q) {
9943             if (xa !== xb || ya !== yb) {
9944               var i = s.push(pop(s) + "scale(", null, ",", null, ")");
9945               q.push({i: i - 4, x: d3_interpolateNumber(xa, xb)}, {i: i - 2, x: d3_interpolateNumber(ya, yb)});
9946             } else if (xb !== 1 || yb !== 1) {
9947               s.push(pop(s) + "scale(" + xb + "," + yb + ")");
9948             }
9949           }
9950
9951           return function(a, b) {
9952             var s = [], // string constants and placeholders
9953                 q = []; // number interpolators
9954             a = parse(a), b = parse(b);
9955             translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
9956             rotate(a.rotate, b.rotate, s, q);
9957             skewX(a.skewX, b.skewX, s, q);
9958             scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
9959             a = b = null; // gc
9960             return function(t) {
9961               var i = -1, n = q.length, o;
9962               while (++i < n) { s[(o = q[i]).i] = o.x(t); }
9963               return s.join("");
9964             };
9965           };
9966         }
9967
9968         var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
9969         var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
9970
9971         var rho = Math.SQRT2,
9972             rho2 = 2,
9973             rho4 = 4,
9974             epsilon2 = 1e-12;
9975
9976         function cosh(x) {
9977           return ((x = Math.exp(x)) + 1 / x) / 2;
9978         }
9979
9980         function sinh(x) {
9981           return ((x = Math.exp(x)) - 1 / x) / 2;
9982         }
9983
9984         function tanh(x) {
9985           return ((x = Math.exp(2 * x)) - 1) / (x + 1);
9986         }
9987
9988         // p0 = [ux0, uy0, w0]
9989         // p1 = [ux1, uy1, w1]
9990         function interpolateZoom(p0, p1) {
9991           var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],
9992               ux1 = p1[0], uy1 = p1[1], w1 = p1[2],
9993               dx = ux1 - ux0,
9994               dy = uy1 - uy0,
9995               d2 = dx * dx + dy * dy,
9996               i,
9997               S;
9998
9999           // Special case for u0 ≅ u1.
10000           if (d2 < epsilon2) {
10001             S = Math.log(w1 / w0) / rho;
10002             i = function(t) {
10003               return [
10004                 ux0 + t * dx,
10005                 uy0 + t * dy,
10006                 w0 * Math.exp(rho * t * S)
10007               ];
10008             };
10009           }
10010
10011           // General case.
10012           else {
10013             var d1 = Math.sqrt(d2),
10014                 b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
10015                 b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
10016                 r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
10017                 r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
10018             S = (r1 - r0) / rho;
10019             i = function(t) {
10020               var s = t * S,
10021                   coshr0 = cosh(r0),
10022                   u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
10023               return [
10024                 ux0 + u * dx,
10025                 uy0 + u * dy,
10026                 w0 * coshr0 / cosh(rho * s + r0)
10027               ];
10028             };
10029           }
10030
10031           i.duration = S * 1000;
10032
10033           return i;
10034         }
10035
10036         function hsl$1(hue) {
10037           return function(start, end) {
10038             var h = hue((start = hsl(start)).h, (end = hsl(end)).h),
10039                 s = nogamma(start.s, end.s),
10040                 l = nogamma(start.l, end.l),
10041                 opacity = nogamma(start.opacity, end.opacity);
10042             return function(t) {
10043               start.h = h(t);
10044               start.s = s(t);
10045               start.l = l(t);
10046               start.opacity = opacity(t);
10047               return start + "";
10048             };
10049           }
10050         }
10051
10052         var hsl$2 = hsl$1(hue);
10053         var hslLong = hsl$1(nogamma);
10054
10055         function lab$1(start, end) {
10056           var l = nogamma((start = lab(start)).l, (end = lab(end)).l),
10057               a = nogamma(start.a, end.a),
10058               b = nogamma(start.b, end.b),
10059               opacity = nogamma(start.opacity, end.opacity);
10060           return function(t) {
10061             start.l = l(t);
10062             start.a = a(t);
10063             start.b = b(t);
10064             start.opacity = opacity(t);
10065             return start + "";
10066           };
10067         }
10068
10069         function hcl$1(hue) {
10070           return function(start, end) {
10071             var h = hue((start = hcl(start)).h, (end = hcl(end)).h),
10072                 c = nogamma(start.c, end.c),
10073                 l = nogamma(start.l, end.l),
10074                 opacity = nogamma(start.opacity, end.opacity);
10075             return function(t) {
10076               start.h = h(t);
10077               start.c = c(t);
10078               start.l = l(t);
10079               start.opacity = opacity(t);
10080               return start + "";
10081             };
10082           }
10083         }
10084
10085         var hcl$2 = hcl$1(hue);
10086         var hclLong = hcl$1(nogamma);
10087
10088         function cubehelix$1(hue) {
10089           return (function cubehelixGamma(y) {
10090             y = +y;
10091
10092             function cubehelix$1(start, end) {
10093               var h = hue((start = cubehelix(start)).h, (end = cubehelix(end)).h),
10094                   s = nogamma(start.s, end.s),
10095                   l = nogamma(start.l, end.l),
10096                   opacity = nogamma(start.opacity, end.opacity);
10097               return function(t) {
10098                 start.h = h(t);
10099                 start.s = s(t);
10100                 start.l = l(Math.pow(t, y));
10101                 start.opacity = opacity(t);
10102                 return start + "";
10103               };
10104             }
10105
10106             cubehelix$1.gamma = cubehelixGamma;
10107
10108             return cubehelix$1;
10109           })(1);
10110         }
10111
10112         var cubehelix$2 = cubehelix$1(hue);
10113         var cubehelixLong = cubehelix$1(nogamma);
10114
10115         function piecewise(interpolate, values) {
10116           var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);
10117           while (i < n) { I[i] = interpolate(v, v = values[++i]); }
10118           return function(t) {
10119             var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));
10120             return I[i](t - i);
10121           };
10122         }
10123
10124         function d3_quantize(interpolator, n) {
10125           var samples = new Array(n);
10126           for (var i = 0; i < n; ++i) { samples[i] = interpolator(i / (n - 1)); }
10127           return samples;
10128         }
10129
10130         var frame = 0, // is an animation frame pending?
10131             timeout = 0, // is a timeout pending?
10132             interval = 0, // are any timers active?
10133             pokeDelay = 1000, // how frequently we check for clock skew
10134             taskHead,
10135             taskTail,
10136             clockLast = 0,
10137             clockNow = 0,
10138             clockSkew = 0,
10139             clock = typeof performance === "object" && performance.now ? performance : Date,
10140             setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };
10141
10142         function now() {
10143           return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
10144         }
10145
10146         function clearNow() {
10147           clockNow = 0;
10148         }
10149
10150         function Timer() {
10151           this._call =
10152           this._time =
10153           this._next = null;
10154         }
10155
10156         Timer.prototype = timer.prototype = {
10157           constructor: Timer,
10158           restart: function(callback, delay, time) {
10159             if (typeof callback !== "function") { throw new TypeError("callback is not a function"); }
10160             time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
10161             if (!this._next && taskTail !== this) {
10162               if (taskTail) { taskTail._next = this; }
10163               else { taskHead = this; }
10164               taskTail = this;
10165             }
10166             this._call = callback;
10167             this._time = time;
10168             sleep();
10169           },
10170           stop: function() {
10171             if (this._call) {
10172               this._call = null;
10173               this._time = Infinity;
10174               sleep();
10175             }
10176           }
10177         };
10178
10179         function timer(callback, delay, time) {
10180           var t = new Timer;
10181           t.restart(callback, delay, time);
10182           return t;
10183         }
10184
10185         function timerFlush() {
10186           now(); // Get the current time, if not already set.
10187           ++frame; // Pretend we’ve set an alarm, if we haven’t already.
10188           var t = taskHead, e;
10189           while (t) {
10190             if ((e = clockNow - t._time) >= 0) { t._call.call(null, e); }
10191             t = t._next;
10192           }
10193           --frame;
10194         }
10195
10196         function wake() {
10197           clockNow = (clockLast = clock.now()) + clockSkew;
10198           frame = timeout = 0;
10199           try {
10200             timerFlush();
10201           } finally {
10202             frame = 0;
10203             nap();
10204             clockNow = 0;
10205           }
10206         }
10207
10208         function poke() {
10209           var now = clock.now(), delay = now - clockLast;
10210           if (delay > pokeDelay) { clockSkew -= delay, clockLast = now; }
10211         }
10212
10213         function nap() {
10214           var t0, t1 = taskHead, t2, time = Infinity;
10215           while (t1) {
10216             if (t1._call) {
10217               if (time > t1._time) { time = t1._time; }
10218               t0 = t1, t1 = t1._next;
10219             } else {
10220               t2 = t1._next, t1._next = null;
10221               t1 = t0 ? t0._next = t2 : taskHead = t2;
10222             }
10223           }
10224           taskTail = t0;
10225           sleep(time);
10226         }
10227
10228         function sleep(time) {
10229           if (frame) { return; } // Soonest alarm already set, or will be.
10230           if (timeout) { timeout = clearTimeout(timeout); }
10231           var delay = time - clockNow; // Strictly less than if we recomputed clockNow.
10232           if (delay > 24) {
10233             if (time < Infinity) { timeout = setTimeout(wake, time - clock.now() - clockSkew); }
10234             if (interval) { interval = clearInterval(interval); }
10235           } else {
10236             if (!interval) { clockLast = clock.now(), interval = setInterval(poke, pokeDelay); }
10237             frame = 1, setFrame(wake);
10238           }
10239         }
10240
10241         function d3_timeout(callback, delay, time) {
10242           var t = new Timer;
10243           delay = delay == null ? 0 : +delay;
10244           t.restart(function(elapsed) {
10245             t.stop();
10246             callback(elapsed + delay);
10247           }, delay, time);
10248           return t;
10249         }
10250
10251         function interval$1(callback, delay, time) {
10252           var t = new Timer, total = delay;
10253           if (delay == null) { return t.restart(callback, delay, time), t; }
10254           delay = +delay, time = time == null ? now() : +time;
10255           t.restart(function tick(elapsed) {
10256             elapsed += total;
10257             t.restart(tick, total += delay, time);
10258             callback(elapsed);
10259           }, delay, time);
10260           return t;
10261         }
10262
10263         var emptyOn = dispatch("start", "end", "cancel", "interrupt");
10264         var emptyTween = [];
10265
10266         var CREATED = 0;
10267         var SCHEDULED = 1;
10268         var STARTING = 2;
10269         var STARTED = 3;
10270         var RUNNING = 4;
10271         var ENDING = 5;
10272         var ENDED = 6;
10273
10274         function schedule(node, name, id, index, group, timing) {
10275           var schedules = node.__transition;
10276           if (!schedules) { node.__transition = {}; }
10277           else if (id in schedules) { return; }
10278           create$8(node, id, {
10279             name: name,
10280             index: index, // For context during callback.
10281             group: group, // For context during callback.
10282             on: emptyOn,
10283             tween: emptyTween,
10284             time: timing.time,
10285             delay: timing.delay,
10286             duration: timing.duration,
10287             ease: timing.ease,
10288             timer: null,
10289             state: CREATED
10290           });
10291         }
10292
10293         function init(node, id) {
10294           var schedule = get$2(node, id);
10295           if (schedule.state > CREATED) { throw new Error("too late; already scheduled"); }
10296           return schedule;
10297         }
10298
10299         function set$1(node, id) {
10300           var schedule = get$2(node, id);
10301           if (schedule.state > STARTED) { throw new Error("too late; already running"); }
10302           return schedule;
10303         }
10304
10305         function get$2(node, id) {
10306           var schedule = node.__transition;
10307           if (!schedule || !(schedule = schedule[id])) { throw new Error("transition not found"); }
10308           return schedule;
10309         }
10310
10311         function create$8(node, id, self) {
10312           var schedules = node.__transition,
10313               tween;
10314
10315           // Initialize the self timer when the transition is created.
10316           // Note the actual delay is not known until the first callback!
10317           schedules[id] = self;
10318           self.timer = timer(schedule, 0, self.time);
10319
10320           function schedule(elapsed) {
10321             self.state = SCHEDULED;
10322             self.timer.restart(start, self.delay, self.time);
10323
10324             // If the elapsed delay is less than our first sleep, start immediately.
10325             if (self.delay <= elapsed) { start(elapsed - self.delay); }
10326           }
10327
10328           function start(elapsed) {
10329             var i, j, n, o;
10330
10331             // If the state is not SCHEDULED, then we previously errored on start.
10332             if (self.state !== SCHEDULED) { return stop(); }
10333
10334             for (i in schedules) {
10335               o = schedules[i];
10336               if (o.name !== self.name) { continue; }
10337
10338               // While this element already has a starting transition during this frame,
10339               // defer starting an interrupting transition until that transition has a
10340               // chance to tick (and possibly end); see d3/d3-transition#54!
10341               if (o.state === STARTED) { return d3_timeout(start); }
10342
10343               // Interrupt the active transition, if any.
10344               if (o.state === RUNNING) {
10345                 o.state = ENDED;
10346                 o.timer.stop();
10347                 o.on.call("interrupt", node, node.__data__, o.index, o.group);
10348                 delete schedules[i];
10349               }
10350
10351               // Cancel any pre-empted transitions.
10352               else if (+i < id) {
10353                 o.state = ENDED;
10354                 o.timer.stop();
10355                 o.on.call("cancel", node, node.__data__, o.index, o.group);
10356                 delete schedules[i];
10357               }
10358             }
10359
10360             // Defer the first tick to end of the current frame; see d3/d3#1576.
10361             // Note the transition may be canceled after start and before the first tick!
10362             // Note this must be scheduled before the start event; see d3/d3-transition#16!
10363             // Assuming this is successful, subsequent callbacks go straight to tick.
10364             d3_timeout(function() {
10365               if (self.state === STARTED) {
10366                 self.state = RUNNING;
10367                 self.timer.restart(tick, self.delay, self.time);
10368                 tick(elapsed);
10369               }
10370             });
10371
10372             // Dispatch the start event.
10373             // Note this must be done before the tween are initialized.
10374             self.state = STARTING;
10375             self.on.call("start", node, node.__data__, self.index, self.group);
10376             if (self.state !== STARTING) { return; } // interrupted
10377             self.state = STARTED;
10378
10379             // Initialize the tween, deleting null tween.
10380             tween = new Array(n = self.tween.length);
10381             for (i = 0, j = -1; i < n; ++i) {
10382               if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {
10383                 tween[++j] = o;
10384               }
10385             }
10386             tween.length = j + 1;
10387           }
10388
10389           function tick(elapsed) {
10390             var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),
10391                 i = -1,
10392                 n = tween.length;
10393
10394             while (++i < n) {
10395               tween[i].call(node, t);
10396             }
10397
10398             // Dispatch the end event.
10399             if (self.state === ENDING) {
10400               self.on.call("end", node, node.__data__, self.index, self.group);
10401               stop();
10402             }
10403           }
10404
10405           function stop() {
10406             self.state = ENDED;
10407             self.timer.stop();
10408             delete schedules[id];
10409             for (var i in schedules) { return; } // eslint-disable-line no-unused-vars
10410             delete node.__transition;
10411           }
10412         }
10413
10414         function interrupt(node, name) {
10415           var schedules = node.__transition,
10416               schedule,
10417               active,
10418               empty = true,
10419               i;
10420
10421           if (!schedules) { return; }
10422
10423           name = name == null ? null : name + "";
10424
10425           for (i in schedules) {
10426             if ((schedule = schedules[i]).name !== name) { empty = false; continue; }
10427             active = schedule.state > STARTING && schedule.state < ENDING;
10428             schedule.state = ENDED;
10429             schedule.timer.stop();
10430             schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group);
10431             delete schedules[i];
10432           }
10433
10434           if (empty) { delete node.__transition; }
10435         }
10436
10437         function selection_interrupt(name) {
10438           return this.each(function() {
10439             interrupt(this, name);
10440           });
10441         }
10442
10443         function tweenRemove(id, name) {
10444           var tween0, tween1;
10445           return function() {
10446             var schedule = set$1(this, id),
10447                 tween = schedule.tween;
10448
10449             // If this node shared tween with the previous node,
10450             // just assign the updated shared tween and we’re done!
10451             // Otherwise, copy-on-write.
10452             if (tween !== tween0) {
10453               tween1 = tween0 = tween;
10454               for (var i = 0, n = tween1.length; i < n; ++i) {
10455                 if (tween1[i].name === name) {
10456                   tween1 = tween1.slice();
10457                   tween1.splice(i, 1);
10458                   break;
10459                 }
10460               }
10461             }
10462
10463             schedule.tween = tween1;
10464           };
10465         }
10466
10467         function tweenFunction(id, name, value) {
10468           var tween0, tween1;
10469           if (typeof value !== "function") { throw new Error; }
10470           return function() {
10471             var schedule = set$1(this, id),
10472                 tween = schedule.tween;
10473
10474             // If this node shared tween with the previous node,
10475             // just assign the updated shared tween and we’re done!
10476             // Otherwise, copy-on-write.
10477             if (tween !== tween0) {
10478               tween1 = (tween0 = tween).slice();
10479               for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {
10480                 if (tween1[i].name === name) {
10481                   tween1[i] = t;
10482                   break;
10483                 }
10484               }
10485               if (i === n) { tween1.push(t); }
10486             }
10487
10488             schedule.tween = tween1;
10489           };
10490         }
10491
10492         function transition_tween(name, value) {
10493           var id = this._id;
10494
10495           name += "";
10496
10497           if (arguments.length < 2) {
10498             var tween = get$2(this.node(), id).tween;
10499             for (var i = 0, n = tween.length, t; i < n; ++i) {
10500               if ((t = tween[i]).name === name) {
10501                 return t.value;
10502               }
10503             }
10504             return null;
10505           }
10506
10507           return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));
10508         }
10509
10510         function tweenValue(transition, name, value) {
10511           var id = transition._id;
10512
10513           transition.each(function() {
10514             var schedule = set$1(this, id);
10515             (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
10516           });
10517
10518           return function(node) {
10519             return get$2(node, id).value[name];
10520           };
10521         }
10522
10523         function interpolate(a, b) {
10524           var c;
10525           return (typeof b === "number" ? d3_interpolateNumber
10526               : b instanceof color ? d3_interpolateRgb
10527               : (c = color(b)) ? (b = c, d3_interpolateRgb)
10528               : interpolateString)(a, b);
10529         }
10530
10531         function attrRemove$1(name) {
10532           return function() {
10533             this.removeAttribute(name);
10534           };
10535         }
10536
10537         function attrRemoveNS$1(fullname) {
10538           return function() {
10539             this.removeAttributeNS(fullname.space, fullname.local);
10540           };
10541         }
10542
10543         function attrConstant$1(name, interpolate, value1) {
10544           var string00,
10545               string1 = value1 + "",
10546               interpolate0;
10547           return function() {
10548             var string0 = this.getAttribute(name);
10549             return string0 === string1 ? null
10550                 : string0 === string00 ? interpolate0
10551                 : interpolate0 = interpolate(string00 = string0, value1);
10552           };
10553         }
10554
10555         function attrConstantNS$1(fullname, interpolate, value1) {
10556           var string00,
10557               string1 = value1 + "",
10558               interpolate0;
10559           return function() {
10560             var string0 = this.getAttributeNS(fullname.space, fullname.local);
10561             return string0 === string1 ? null
10562                 : string0 === string00 ? interpolate0
10563                 : interpolate0 = interpolate(string00 = string0, value1);
10564           };
10565         }
10566
10567         function attrFunction$1(name, interpolate, value) {
10568           var string00,
10569               string10,
10570               interpolate0;
10571           return function() {
10572             var string0, value1 = value(this), string1;
10573             if (value1 == null) { return void this.removeAttribute(name); }
10574             string0 = this.getAttribute(name);
10575             string1 = value1 + "";
10576             return string0 === string1 ? null
10577                 : string0 === string00 && string1 === string10 ? interpolate0
10578                 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
10579           };
10580         }
10581
10582         function attrFunctionNS$1(fullname, interpolate, value) {
10583           var string00,
10584               string10,
10585               interpolate0;
10586           return function() {
10587             var string0, value1 = value(this), string1;
10588             if (value1 == null) { return void this.removeAttributeNS(fullname.space, fullname.local); }
10589             string0 = this.getAttributeNS(fullname.space, fullname.local);
10590             string1 = value1 + "";
10591             return string0 === string1 ? null
10592                 : string0 === string00 && string1 === string10 ? interpolate0
10593                 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
10594           };
10595         }
10596
10597         function transition_attr(name, value) {
10598           var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate;
10599           return this.attrTween(name, typeof value === "function"
10600               ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value))
10601               : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)
10602               : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value));
10603         }
10604
10605         function attrInterpolate(name, i) {
10606           return function(t) {
10607             this.setAttribute(name, i.call(this, t));
10608           };
10609         }
10610
10611         function attrInterpolateNS(fullname, i) {
10612           return function(t) {
10613             this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));
10614           };
10615         }
10616
10617         function attrTweenNS(fullname, value) {
10618           var t0, i0;
10619           function tween() {
10620             var i = value.apply(this, arguments);
10621             if (i !== i0) { t0 = (i0 = i) && attrInterpolateNS(fullname, i); }
10622             return t0;
10623           }
10624           tween._value = value;
10625           return tween;
10626         }
10627
10628         function attrTween(name, value) {
10629           var t0, i0;
10630           function tween() {
10631             var i = value.apply(this, arguments);
10632             if (i !== i0) { t0 = (i0 = i) && attrInterpolate(name, i); }
10633             return t0;
10634           }
10635           tween._value = value;
10636           return tween;
10637         }
10638
10639         function transition_attrTween(name, value) {
10640           var key = "attr." + name;
10641           if (arguments.length < 2) { return (key = this.tween(key)) && key._value; }
10642           if (value == null) { return this.tween(key, null); }
10643           if (typeof value !== "function") { throw new Error; }
10644           var fullname = namespace(name);
10645           return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
10646         }
10647
10648         function delayFunction(id, value) {
10649           return function() {
10650             init(this, id).delay = +value.apply(this, arguments);
10651           };
10652         }
10653
10654         function delayConstant(id, value) {
10655           return value = +value, function() {
10656             init(this, id).delay = value;
10657           };
10658         }
10659
10660         function transition_delay(value) {
10661           var id = this._id;
10662
10663           return arguments.length
10664               ? this.each((typeof value === "function"
10665                   ? delayFunction
10666                   : delayConstant)(id, value))
10667               : get$2(this.node(), id).delay;
10668         }
10669
10670         function durationFunction(id, value) {
10671           return function() {
10672             set$1(this, id).duration = +value.apply(this, arguments);
10673           };
10674         }
10675
10676         function durationConstant(id, value) {
10677           return value = +value, function() {
10678             set$1(this, id).duration = value;
10679           };
10680         }
10681
10682         function transition_duration(value) {
10683           var id = this._id;
10684
10685           return arguments.length
10686               ? this.each((typeof value === "function"
10687                   ? durationFunction
10688                   : durationConstant)(id, value))
10689               : get$2(this.node(), id).duration;
10690         }
10691
10692         function easeConstant(id, value) {
10693           if (typeof value !== "function") { throw new Error; }
10694           return function() {
10695             set$1(this, id).ease = value;
10696           };
10697         }
10698
10699         function transition_ease(value) {
10700           var id = this._id;
10701
10702           return arguments.length
10703               ? this.each(easeConstant(id, value))
10704               : get$2(this.node(), id).ease;
10705         }
10706
10707         function transition_filter(match) {
10708           if (typeof match !== "function") { match = matcher(match); }
10709
10710           for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
10711             for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
10712               if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
10713                 subgroup.push(node);
10714               }
10715             }
10716           }
10717
10718           return new Transition(subgroups, this._parents, this._name, this._id);
10719         }
10720
10721         function transition_merge(transition) {
10722           if (transition._id !== this._id) { throw new Error; }
10723
10724           for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
10725             for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
10726               if (node = group0[i] || group1[i]) {
10727                 merge[i] = node;
10728               }
10729             }
10730           }
10731
10732           for (; j < m0; ++j) {
10733             merges[j] = groups0[j];
10734           }
10735
10736           return new Transition(merges, this._parents, this._name, this._id);
10737         }
10738
10739         function start(name) {
10740           return (name + "").trim().split(/^|\s+/).every(function(t) {
10741             var i = t.indexOf(".");
10742             if (i >= 0) { t = t.slice(0, i); }
10743             return !t || t === "start";
10744           });
10745         }
10746
10747         function onFunction(id, name, listener) {
10748           var on0, on1, sit = start(name) ? init : set$1;
10749           return function() {
10750             var schedule = sit(this, id),
10751                 on = schedule.on;
10752
10753             // If this node shared a dispatch with the previous node,
10754             // just assign the updated shared dispatch and we’re done!
10755             // Otherwise, copy-on-write.
10756             if (on !== on0) { (on1 = (on0 = on).copy()).on(name, listener); }
10757
10758             schedule.on = on1;
10759           };
10760         }
10761
10762         function transition_on(name, listener) {
10763           var id = this._id;
10764
10765           return arguments.length < 2
10766               ? get$2(this.node(), id).on.on(name)
10767               : this.each(onFunction(id, name, listener));
10768         }
10769
10770         function removeFunction(id) {
10771           return function() {
10772             var parent = this.parentNode;
10773             for (var i in this.__transition) { if (+i !== id) { return; } }
10774             if (parent) { parent.removeChild(this); }
10775           };
10776         }
10777
10778         function transition_remove() {
10779           return this.on("end.remove", removeFunction(this._id));
10780         }
10781
10782         function transition_select(select) {
10783           var name = this._name,
10784               id = this._id;
10785
10786           if (typeof select !== "function") { select = selector(select); }
10787
10788           for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
10789             for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
10790               if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
10791                 if ("__data__" in node) { subnode.__data__ = node.__data__; }
10792                 subgroup[i] = subnode;
10793                 schedule(subgroup[i], name, id, i, subgroup, get$2(node, id));
10794               }
10795             }
10796           }
10797
10798           return new Transition(subgroups, this._parents, name, id);
10799         }
10800
10801         function transition_selectAll(select) {
10802           var name = this._name,
10803               id = this._id;
10804
10805           if (typeof select !== "function") { select = selectorAll(select); }
10806
10807           for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
10808             for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
10809               if (node = group[i]) {
10810                 for (var children = select.call(node, node.__data__, i, group), child, inherit = get$2(node, id), k = 0, l = children.length; k < l; ++k) {
10811                   if (child = children[k]) {
10812                     schedule(child, name, id, k, children, inherit);
10813                   }
10814                 }
10815                 subgroups.push(children);
10816                 parents.push(node);
10817               }
10818             }
10819           }
10820
10821           return new Transition(subgroups, parents, name, id);
10822         }
10823
10824         var Selection$1 = selection.prototype.constructor;
10825
10826         function transition_selection() {
10827           return new Selection$1(this._groups, this._parents);
10828         }
10829
10830         function styleNull(name, interpolate) {
10831           var string00,
10832               string10,
10833               interpolate0;
10834           return function() {
10835             var string0 = styleValue(this, name),
10836                 string1 = (this.style.removeProperty(name), styleValue(this, name));
10837             return string0 === string1 ? null
10838                 : string0 === string00 && string1 === string10 ? interpolate0
10839                 : interpolate0 = interpolate(string00 = string0, string10 = string1);
10840           };
10841         }
10842
10843         function styleRemove$1(name) {
10844           return function() {
10845             this.style.removeProperty(name);
10846           };
10847         }
10848
10849         function styleConstant$1(name, interpolate, value1) {
10850           var string00,
10851               string1 = value1 + "",
10852               interpolate0;
10853           return function() {
10854             var string0 = styleValue(this, name);
10855             return string0 === string1 ? null
10856                 : string0 === string00 ? interpolate0
10857                 : interpolate0 = interpolate(string00 = string0, value1);
10858           };
10859         }
10860
10861         function styleFunction$1(name, interpolate, value) {
10862           var string00,
10863               string10,
10864               interpolate0;
10865           return function() {
10866             var string0 = styleValue(this, name),
10867                 value1 = value(this),
10868                 string1 = value1 + "";
10869             if (value1 == null) { string1 = value1 = (this.style.removeProperty(name), styleValue(this, name)); }
10870             return string0 === string1 ? null
10871                 : string0 === string00 && string1 === string10 ? interpolate0
10872                 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
10873           };
10874         }
10875
10876         function styleMaybeRemove(id, name) {
10877           var on0, on1, listener0, key = "style." + name, event = "end." + key, remove;
10878           return function() {
10879             var schedule = set$1(this, id),
10880                 on = schedule.on,
10881                 listener = schedule.value[key] == null ? remove || (remove = styleRemove$1(name)) : undefined;
10882
10883             // If this node shared a dispatch with the previous node,
10884             // just assign the updated shared dispatch and we’re done!
10885             // Otherwise, copy-on-write.
10886             if (on !== on0 || listener0 !== listener) { (on1 = (on0 = on).copy()).on(event, listener0 = listener); }
10887
10888             schedule.on = on1;
10889           };
10890         }
10891
10892         function transition_style(name, value, priority) {
10893           var i = (name += "") === "transform" ? interpolateTransformCss : interpolate;
10894           return value == null ? this
10895               .styleTween(name, styleNull(name, i))
10896               .on("end.style." + name, styleRemove$1(name))
10897             : typeof value === "function" ? this
10898               .styleTween(name, styleFunction$1(name, i, tweenValue(this, "style." + name, value)))
10899               .each(styleMaybeRemove(this._id, name))
10900             : this
10901               .styleTween(name, styleConstant$1(name, i, value), priority)
10902               .on("end.style." + name, null);
10903         }
10904
10905         function styleInterpolate(name, i, priority) {
10906           return function(t) {
10907             this.style.setProperty(name, i.call(this, t), priority);
10908           };
10909         }
10910
10911         function styleTween(name, value, priority) {
10912           var t, i0;
10913           function tween() {
10914             var i = value.apply(this, arguments);
10915             if (i !== i0) { t = (i0 = i) && styleInterpolate(name, i, priority); }
10916             return t;
10917           }
10918           tween._value = value;
10919           return tween;
10920         }
10921
10922         function transition_styleTween(name, value, priority) {
10923           var key = "style." + (name += "");
10924           if (arguments.length < 2) { return (key = this.tween(key)) && key._value; }
10925           if (value == null) { return this.tween(key, null); }
10926           if (typeof value !== "function") { throw new Error; }
10927           return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
10928         }
10929
10930         function textConstant$1(value) {
10931           return function() {
10932             this.textContent = value;
10933           };
10934         }
10935
10936         function textFunction$1(value) {
10937           return function() {
10938             var value1 = value(this);
10939             this.textContent = value1 == null ? "" : value1;
10940           };
10941         }
10942
10943         function transition_text(value) {
10944           return this.tween("text", typeof value === "function"
10945               ? textFunction$1(tweenValue(this, "text", value))
10946               : textConstant$1(value == null ? "" : value + ""));
10947         }
10948
10949         function textInterpolate(i) {
10950           return function(t) {
10951             this.textContent = i.call(this, t);
10952           };
10953         }
10954
10955         function textTween(value) {
10956           var t0, i0;
10957           function tween() {
10958             var i = value.apply(this, arguments);
10959             if (i !== i0) { t0 = (i0 = i) && textInterpolate(i); }
10960             return t0;
10961           }
10962           tween._value = value;
10963           return tween;
10964         }
10965
10966         function transition_textTween(value) {
10967           var key = "text";
10968           if (arguments.length < 1) { return (key = this.tween(key)) && key._value; }
10969           if (value == null) { return this.tween(key, null); }
10970           if (typeof value !== "function") { throw new Error; }
10971           return this.tween(key, textTween(value));
10972         }
10973
10974         function transition_transition() {
10975           var name = this._name,
10976               id0 = this._id,
10977               id1 = newId();
10978
10979           for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
10980             for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
10981               if (node = group[i]) {
10982                 var inherit = get$2(node, id0);
10983                 schedule(node, name, id1, i, group, {
10984                   time: inherit.time + inherit.delay + inherit.duration,
10985                   delay: 0,
10986                   duration: inherit.duration,
10987                   ease: inherit.ease
10988                 });
10989               }
10990             }
10991           }
10992
10993           return new Transition(groups, this._parents, name, id1);
10994         }
10995
10996         function transition_end() {
10997           var on0, on1, that = this, id = that._id, size = that.size();
10998           return new Promise(function(resolve, reject) {
10999             var cancel = {value: reject},
11000                 end = {value: function() { if (--size === 0) { resolve(); } }};
11001
11002             that.each(function() {
11003               var schedule = set$1(this, id),
11004                   on = schedule.on;
11005
11006               // If this node shared a dispatch with the previous node,
11007               // just assign the updated shared dispatch and we’re done!
11008               // Otherwise, copy-on-write.
11009               if (on !== on0) {
11010                 on1 = (on0 = on).copy();
11011                 on1._.cancel.push(cancel);
11012                 on1._.interrupt.push(cancel);
11013                 on1._.end.push(end);
11014               }
11015
11016               schedule.on = on1;
11017             });
11018           });
11019         }
11020
11021         var id$3 = 0;
11022
11023         function Transition(groups, parents, name, id) {
11024           this._groups = groups;
11025           this._parents = parents;
11026           this._name = name;
11027           this._id = id;
11028         }
11029
11030         function transition(name) {
11031           return selection().transition(name);
11032         }
11033
11034         function newId() {
11035           return ++id$3;
11036         }
11037
11038         var selection_prototype = selection.prototype;
11039
11040         Transition.prototype = transition.prototype = {
11041           constructor: Transition,
11042           select: transition_select,
11043           selectAll: transition_selectAll,
11044           filter: transition_filter,
11045           merge: transition_merge,
11046           selection: transition_selection,
11047           transition: transition_transition,
11048           call: selection_prototype.call,
11049           nodes: selection_prototype.nodes,
11050           node: selection_prototype.node,
11051           size: selection_prototype.size,
11052           empty: selection_prototype.empty,
11053           each: selection_prototype.each,
11054           on: transition_on,
11055           attr: transition_attr,
11056           attrTween: transition_attrTween,
11057           style: transition_style,
11058           styleTween: transition_styleTween,
11059           text: transition_text,
11060           textTween: transition_textTween,
11061           remove: transition_remove,
11062           tween: transition_tween,
11063           delay: transition_delay,
11064           duration: transition_duration,
11065           ease: transition_ease,
11066           end: transition_end
11067         };
11068
11069         function linear$1(t) {
11070           return +t;
11071         }
11072
11073         function quadIn(t) {
11074           return t * t;
11075         }
11076
11077         function quadOut(t) {
11078           return t * (2 - t);
11079         }
11080
11081         function quadInOut(t) {
11082           return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;
11083         }
11084
11085         function cubicIn(t) {
11086           return t * t * t;
11087         }
11088
11089         function cubicOut(t) {
11090           return --t * t * t + 1;
11091         }
11092
11093         function cubicInOut(t) {
11094           return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
11095         }
11096
11097         var exponent = 3;
11098
11099         var polyIn = (function custom(e) {
11100           e = +e;
11101
11102           function polyIn(t) {
11103             return Math.pow(t, e);
11104           }
11105
11106           polyIn.exponent = custom;
11107
11108           return polyIn;
11109         })(exponent);
11110
11111         var polyOut = (function custom(e) {
11112           e = +e;
11113
11114           function polyOut(t) {
11115             return 1 - Math.pow(1 - t, e);
11116           }
11117
11118           polyOut.exponent = custom;
11119
11120           return polyOut;
11121         })(exponent);
11122
11123         var polyInOut = (function custom(e) {
11124           e = +e;
11125
11126           function polyInOut(t) {
11127             return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;
11128           }
11129
11130           polyInOut.exponent = custom;
11131
11132           return polyInOut;
11133         })(exponent);
11134
11135         var pi = Math.PI,
11136             halfPi = pi / 2;
11137
11138         function sinIn(t) {
11139           return 1 - Math.cos(t * halfPi);
11140         }
11141
11142         function sinOut(t) {
11143           return Math.sin(t * halfPi);
11144         }
11145
11146         function sinInOut(t) {
11147           return (1 - Math.cos(pi * t)) / 2;
11148         }
11149
11150         function expIn(t) {
11151           return Math.pow(2, 10 * t - 10);
11152         }
11153
11154         function expOut(t) {
11155           return 1 - Math.pow(2, -10 * t);
11156         }
11157
11158         function expInOut(t) {
11159           return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;
11160         }
11161
11162         function circleIn(t) {
11163           return 1 - Math.sqrt(1 - t * t);
11164         }
11165
11166         function circleOut(t) {
11167           return Math.sqrt(1 - --t * t);
11168         }
11169
11170         function circleInOut(t) {
11171           return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;
11172         }
11173
11174         var b1 = 4 / 11,
11175             b2 = 6 / 11,
11176             b3 = 8 / 11,
11177             b4 = 3 / 4,
11178             b5 = 9 / 11,
11179             b6 = 10 / 11,
11180             b7 = 15 / 16,
11181             b8 = 21 / 22,
11182             b9 = 63 / 64,
11183             b0 = 1 / b1 / b1;
11184
11185         function bounceIn(t) {
11186           return 1 - bounceOut(1 - t);
11187         }
11188
11189         function bounceOut(t) {
11190           return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;
11191         }
11192
11193         function bounceInOut(t) {
11194           return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;
11195         }
11196
11197         var overshoot = 1.70158;
11198
11199         var backIn = (function custom(s) {
11200           s = +s;
11201
11202           function backIn(t) {
11203             return t * t * ((s + 1) * t - s);
11204           }
11205
11206           backIn.overshoot = custom;
11207
11208           return backIn;
11209         })(overshoot);
11210
11211         var backOut = (function custom(s) {
11212           s = +s;
11213
11214           function backOut(t) {
11215             return --t * t * ((s + 1) * t + s) + 1;
11216           }
11217
11218           backOut.overshoot = custom;
11219
11220           return backOut;
11221         })(overshoot);
11222
11223         var backInOut = (function custom(s) {
11224           s = +s;
11225
11226           function backInOut(t) {
11227             return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;
11228           }
11229
11230           backInOut.overshoot = custom;
11231
11232           return backInOut;
11233         })(overshoot);
11234
11235         var tau = 2 * Math.PI,
11236             amplitude = 1,
11237             period = 0.3;
11238
11239         var elasticIn = (function custom(a, p) {
11240           var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
11241
11242           function elasticIn(t) {
11243             return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);
11244           }
11245
11246           elasticIn.amplitude = function(a) { return custom(a, p * tau); };
11247           elasticIn.period = function(p) { return custom(a, p); };
11248
11249           return elasticIn;
11250         })(amplitude, period);
11251
11252         var elasticOut = (function custom(a, p) {
11253           var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
11254
11255           function elasticOut(t) {
11256             return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);
11257           }
11258
11259           elasticOut.amplitude = function(a) { return custom(a, p * tau); };
11260           elasticOut.period = function(p) { return custom(a, p); };
11261
11262           return elasticOut;
11263         })(amplitude, period);
11264
11265         var elasticInOut = (function custom(a, p) {
11266           var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
11267
11268           function elasticInOut(t) {
11269             return ((t = t * 2 - 1) < 0
11270                 ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)
11271                 : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;
11272           }
11273
11274           elasticInOut.amplitude = function(a) { return custom(a, p * tau); };
11275           elasticInOut.period = function(p) { return custom(a, p); };
11276
11277           return elasticInOut;
11278         })(amplitude, period);
11279
11280         var defaultTiming = {
11281           time: null, // Set on use.
11282           delay: 0,
11283           duration: 250,
11284           ease: cubicInOut
11285         };
11286
11287         function inherit(node, id) {
11288           var timing;
11289           while (!(timing = node.__transition) || !(timing = timing[id])) {
11290             if (!(node = node.parentNode)) {
11291               return defaultTiming.time = now(), defaultTiming;
11292             }
11293           }
11294           return timing;
11295         }
11296
11297         function selection_transition(name) {
11298           var id,
11299               timing;
11300
11301           if (name instanceof Transition) {
11302             id = name._id, name = name._name;
11303           } else {
11304             id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
11305           }
11306
11307           for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
11308             for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
11309               if (node = group[i]) {
11310                 schedule(node, name, id, i, group, timing || inherit(node, id));
11311               }
11312             }
11313           }
11314
11315           return new Transition(groups, this._parents, name, id);
11316         }
11317
11318         selection.prototype.interrupt = selection_interrupt;
11319         selection.prototype.transition = selection_transition;
11320
11321         var root$2 = [null];
11322
11323         function active(node, name) {
11324           var schedules = node.__transition,
11325               schedule,
11326               i;
11327
11328           if (schedules) {
11329             name = name == null ? null : name + "";
11330             for (i in schedules) {
11331               if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {
11332                 return new Transition([[node]], root$2, name, +i);
11333               }
11334             }
11335           }
11336
11337           return null;
11338         }
11339
11340         function constant$4(x) {
11341           return function() {
11342             return x;
11343           };
11344         }
11345
11346         function BrushEvent(target, type, selection) {
11347           this.target = target;
11348           this.type = type;
11349           this.selection = selection;
11350         }
11351
11352         function nopropagation$1() {
11353           event.stopImmediatePropagation();
11354         }
11355
11356         function noevent$1() {
11357           event.preventDefault();
11358           event.stopImmediatePropagation();
11359         }
11360
11361         var MODE_DRAG = {name: "drag"},
11362             MODE_SPACE = {name: "space"},
11363             MODE_HANDLE = {name: "handle"},
11364             MODE_CENTER = {name: "center"};
11365
11366         function number1(e) {
11367           return [+e[0], +e[1]];
11368         }
11369
11370         function number2(e) {
11371           return [number1(e[0]), number1(e[1])];
11372         }
11373
11374         function toucher(identifier) {
11375           return function(target) {
11376             return touch(target, event.touches, identifier);
11377           };
11378         }
11379
11380         var X = {
11381           name: "x",
11382           handles: ["w", "e"].map(type),
11383           input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },
11384           output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }
11385         };
11386
11387         var Y = {
11388           name: "y",
11389           handles: ["n", "s"].map(type),
11390           input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },
11391           output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }
11392         };
11393
11394         var XY = {
11395           name: "xy",
11396           handles: ["n", "w", "e", "s", "nw", "ne", "sw", "se"].map(type),
11397           input: function(xy) { return xy == null ? null : number2(xy); },
11398           output: function(xy) { return xy; }
11399         };
11400
11401         var cursors = {
11402           overlay: "crosshair",
11403           selection: "move",
11404           n: "ns-resize",
11405           e: "ew-resize",
11406           s: "ns-resize",
11407           w: "ew-resize",
11408           nw: "nwse-resize",
11409           ne: "nesw-resize",
11410           se: "nwse-resize",
11411           sw: "nesw-resize"
11412         };
11413
11414         var flipX = {
11415           e: "w",
11416           w: "e",
11417           nw: "ne",
11418           ne: "nw",
11419           se: "sw",
11420           sw: "se"
11421         };
11422
11423         var flipY = {
11424           n: "s",
11425           s: "n",
11426           nw: "sw",
11427           ne: "se",
11428           se: "ne",
11429           sw: "nw"
11430         };
11431
11432         var signsX = {
11433           overlay: +1,
11434           selection: +1,
11435           n: null,
11436           e: +1,
11437           s: null,
11438           w: -1,
11439           nw: -1,
11440           ne: +1,
11441           se: +1,
11442           sw: -1
11443         };
11444
11445         var signsY = {
11446           overlay: +1,
11447           selection: +1,
11448           n: -1,
11449           e: null,
11450           s: +1,
11451           w: null,
11452           nw: -1,
11453           ne: -1,
11454           se: +1,
11455           sw: +1
11456         };
11457
11458         function type(t) {
11459           return {type: t};
11460         }
11461
11462         // Ignore right-click, since that should open the context menu.
11463         function defaultFilter$1() {
11464           return !event.ctrlKey && !event.button;
11465         }
11466
11467         function defaultExtent() {
11468           var svg = this.ownerSVGElement || this;
11469           if (svg.hasAttribute("viewBox")) {
11470             svg = svg.viewBox.baseVal;
11471             return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];
11472           }
11473           return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];
11474         }
11475
11476         function defaultTouchable$1() {
11477           return navigator.maxTouchPoints || ("ontouchstart" in this);
11478         }
11479
11480         // Like d3.local, but with the name “__brush” rather than auto-generated.
11481         function local$1(node) {
11482           while (!node.__brush) { if (!(node = node.parentNode)) { return; } }
11483           return node.__brush;
11484         }
11485
11486         function empty$1(extent) {
11487           return extent[0][0] === extent[1][0]
11488               || extent[0][1] === extent[1][1];
11489         }
11490
11491         function brushSelection(node) {
11492           var state = node.__brush;
11493           return state ? state.dim.output(state.selection) : null;
11494         }
11495
11496         function brushX() {
11497           return brush$1(X);
11498         }
11499
11500         function brushY() {
11501           return brush$1(Y);
11502         }
11503
11504         function brush() {
11505           return brush$1(XY);
11506         }
11507
11508         function brush$1(dim) {
11509           var extent = defaultExtent,
11510               filter = defaultFilter$1,
11511               touchable = defaultTouchable$1,
11512               keys = true,
11513               listeners = dispatch("start", "brush", "end"),
11514               handleSize = 6,
11515               touchending;
11516
11517           function brush(group) {
11518             var overlay = group
11519                 .property("__brush", initialize)
11520               .selectAll(".overlay")
11521               .data([type("overlay")]);
11522
11523             overlay.enter().append("rect")
11524                 .attr("class", "overlay")
11525                 .attr("pointer-events", "all")
11526                 .attr("cursor", cursors.overlay)
11527               .merge(overlay)
11528                 .each(function() {
11529                   var extent = local$1(this).extent;
11530                   d3_select(this)
11531                       .attr("x", extent[0][0])
11532                       .attr("y", extent[0][1])
11533                       .attr("width", extent[1][0] - extent[0][0])
11534                       .attr("height", extent[1][1] - extent[0][1]);
11535                 });
11536
11537             group.selectAll(".selection")
11538               .data([type("selection")])
11539               .enter().append("rect")
11540                 .attr("class", "selection")
11541                 .attr("cursor", cursors.selection)
11542                 .attr("fill", "#777")
11543                 .attr("fill-opacity", 0.3)
11544                 .attr("stroke", "#fff")
11545                 .attr("shape-rendering", "crispEdges");
11546
11547             var handle = group.selectAll(".handle")
11548               .data(dim.handles, function(d) { return d.type; });
11549
11550             handle.exit().remove();
11551
11552             handle.enter().append("rect")
11553                 .attr("class", function(d) { return "handle handle--" + d.type; })
11554                 .attr("cursor", function(d) { return cursors[d.type]; });
11555
11556             group
11557                 .each(redraw)
11558                 .attr("fill", "none")
11559                 .attr("pointer-events", "all")
11560                 .on("mousedown.brush", started)
11561               .filter(touchable)
11562                 .on("touchstart.brush", started)
11563                 .on("touchmove.brush", touchmoved)
11564                 .on("touchend.brush touchcancel.brush", touchended)
11565                 .style("touch-action", "none")
11566                 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
11567           }
11568
11569           brush.move = function(group, selection) {
11570             if (group.selection) {
11571               group
11572                   .on("start.brush", function() { emitter(this, arguments).beforestart().start(); })
11573                   .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); })
11574                   .tween("brush", function() {
11575                     var that = this,
11576                         state = that.__brush,
11577                         emit = emitter(that, arguments),
11578                         selection0 = state.selection,
11579                         selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent),
11580                         i = d3_interpolate(selection0, selection1);
11581
11582                     function tween(t) {
11583                       state.selection = t === 1 && selection1 === null ? null : i(t);
11584                       redraw.call(that);
11585                       emit.brush();
11586                     }
11587
11588                     return selection0 !== null && selection1 !== null ? tween : tween(1);
11589                   });
11590             } else {
11591               group
11592                   .each(function() {
11593                     var that = this,
11594                         args = arguments,
11595                         state = that.__brush,
11596                         selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent),
11597                         emit = emitter(that, args).beforestart();
11598
11599                     interrupt(that);
11600                     state.selection = selection1 === null ? null : selection1;
11601                     redraw.call(that);
11602                     emit.start().brush().end();
11603                   });
11604             }
11605           };
11606
11607           brush.clear = function(group) {
11608             brush.move(group, null);
11609           };
11610
11611           function redraw() {
11612             var group = d3_select(this),
11613                 selection = local$1(this).selection;
11614
11615             if (selection) {
11616               group.selectAll(".selection")
11617                   .style("display", null)
11618                   .attr("x", selection[0][0])
11619                   .attr("y", selection[0][1])
11620                   .attr("width", selection[1][0] - selection[0][0])
11621                   .attr("height", selection[1][1] - selection[0][1]);
11622
11623               group.selectAll(".handle")
11624                   .style("display", null)
11625                   .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })
11626                   .attr("y", function(d) { return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })
11627                   .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })
11628                   .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });
11629             }
11630
11631             else {
11632               group.selectAll(".selection,.handle")
11633                   .style("display", "none")
11634                   .attr("x", null)
11635                   .attr("y", null)
11636                   .attr("width", null)
11637                   .attr("height", null);
11638             }
11639           }
11640
11641           function emitter(that, args, clean) {
11642             return (!clean && that.__brush.emitter) || new Emitter(that, args);
11643           }
11644
11645           function Emitter(that, args) {
11646             this.that = that;
11647             this.args = args;
11648             this.state = that.__brush;
11649             this.active = 0;
11650           }
11651
11652           Emitter.prototype = {
11653             beforestart: function() {
11654               if (++this.active === 1) { this.state.emitter = this, this.starting = true; }
11655               return this;
11656             },
11657             start: function() {
11658               if (this.starting) { this.starting = false, this.emit("start"); }
11659               else { this.emit("brush"); }
11660               return this;
11661             },
11662             brush: function() {
11663               this.emit("brush");
11664               return this;
11665             },
11666             end: function() {
11667               if (--this.active === 0) { delete this.state.emitter, this.emit("end"); }
11668               return this;
11669             },
11670             emit: function(type) {
11671               customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);
11672             }
11673           };
11674
11675           function started() {
11676             if (touchending && !event.touches) { return; }
11677             if (!filter.apply(this, arguments)) { return; }
11678
11679             var that = this,
11680                 type = event.target.__data__.type,
11681                 mode = (keys && event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),
11682                 signX = dim === Y ? null : signsX[type],
11683                 signY = dim === X ? null : signsY[type],
11684                 state = local$1(that),
11685                 extent = state.extent,
11686                 selection = state.selection,
11687                 W = extent[0][0], w0, w1,
11688                 N = extent[0][1], n0, n1,
11689                 E = extent[1][0], e0, e1,
11690                 S = extent[1][1], s0, s1,
11691                 dx = 0,
11692                 dy = 0,
11693                 moving,
11694                 shifting = signX && signY && keys && event.shiftKey,
11695                 lockX,
11696                 lockY,
11697                 pointer = event.touches ? toucher(event.changedTouches[0].identifier) : d3_mouse,
11698                 point0 = pointer(that),
11699                 point = point0,
11700                 emit = emitter(that, arguments, true).beforestart();
11701
11702             if (type === "overlay") {
11703               if (selection) { moving = true; }
11704               state.selection = selection = [
11705                 [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],
11706                 [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]
11707               ];
11708             } else {
11709               w0 = selection[0][0];
11710               n0 = selection[0][1];
11711               e0 = selection[1][0];
11712               s0 = selection[1][1];
11713             }
11714
11715             w1 = w0;
11716             n1 = n0;
11717             e1 = e0;
11718             s1 = s0;
11719
11720             var group = d3_select(that)
11721                 .attr("pointer-events", "none");
11722
11723             var overlay = group.selectAll(".overlay")
11724                 .attr("cursor", cursors[type]);
11725
11726             if (event.touches) {
11727               emit.moved = moved;
11728               emit.ended = ended;
11729             } else {
11730               var view = d3_select(event.view)
11731                   .on("mousemove.brush", moved, true)
11732                   .on("mouseup.brush", ended, true);
11733               if (keys) { view
11734                   .on("keydown.brush", keydowned, true)
11735                   .on("keyup.brush", keyupped, true); }
11736
11737               dragDisable(event.view);
11738             }
11739
11740             nopropagation$1();
11741             interrupt(that);
11742             redraw.call(that);
11743             emit.start();
11744
11745             function moved() {
11746               var point1 = pointer(that);
11747               if (shifting && !lockX && !lockY) {
11748                 if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) { lockY = true; }
11749                 else { lockX = true; }
11750               }
11751               point = point1;
11752               moving = true;
11753               noevent$1();
11754               move();
11755             }
11756
11757             function move() {
11758               var t;
11759
11760               dx = point[0] - point0[0];
11761               dy = point[1] - point0[1];
11762
11763               switch (mode) {
11764                 case MODE_SPACE:
11765                 case MODE_DRAG: {
11766                   if (signX) { dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx; }
11767                   if (signY) { dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy; }
11768                   break;
11769                 }
11770                 case MODE_HANDLE: {
11771                   if (signX < 0) { dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0; }
11772                   else if (signX > 0) { dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx; }
11773                   if (signY < 0) { dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0; }
11774                   else if (signY > 0) { dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy; }
11775                   break;
11776                 }
11777                 case MODE_CENTER: {
11778                   if (signX) { w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX)); }
11779                   if (signY) { n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY)); }
11780                   break;
11781                 }
11782               }
11783
11784               if (e1 < w1) {
11785                 signX *= -1;
11786                 t = w0, w0 = e0, e0 = t;
11787                 t = w1, w1 = e1, e1 = t;
11788                 if (type in flipX) { overlay.attr("cursor", cursors[type = flipX[type]]); }
11789               }
11790
11791               if (s1 < n1) {
11792                 signY *= -1;
11793                 t = n0, n0 = s0, s0 = t;
11794                 t = n1, n1 = s1, s1 = t;
11795                 if (type in flipY) { overlay.attr("cursor", cursors[type = flipY[type]]); }
11796               }
11797
11798               if (state.selection) { selection = state.selection; } // May be set by brush.move!
11799               if (lockX) { w1 = selection[0][0], e1 = selection[1][0]; }
11800               if (lockY) { n1 = selection[0][1], s1 = selection[1][1]; }
11801
11802               if (selection[0][0] !== w1
11803                   || selection[0][1] !== n1
11804                   || selection[1][0] !== e1
11805                   || selection[1][1] !== s1) {
11806                 state.selection = [[w1, n1], [e1, s1]];
11807                 redraw.call(that);
11808                 emit.brush();
11809               }
11810             }
11811
11812             function ended() {
11813               nopropagation$1();
11814               if (event.touches) {
11815                 if (event.touches.length) { return; }
11816                 if (touchending) { clearTimeout(touchending); }
11817                 touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
11818               } else {
11819                 yesdrag(event.view, moving);
11820                 view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);
11821               }
11822               group.attr("pointer-events", "all");
11823               overlay.attr("cursor", cursors.overlay);
11824               if (state.selection) { selection = state.selection; } // May be set by brush.move (on start)!
11825               if (empty$1(selection)) { state.selection = null, redraw.call(that); }
11826               emit.end();
11827             }
11828
11829             function keydowned() {
11830               switch (event.keyCode) {
11831                 case 16: { // SHIFT
11832                   shifting = signX && signY;
11833                   break;
11834                 }
11835                 case 18: { // ALT
11836                   if (mode === MODE_HANDLE) {
11837                     if (signX) { e0 = e1 - dx * signX, w0 = w1 + dx * signX; }
11838                     if (signY) { s0 = s1 - dy * signY, n0 = n1 + dy * signY; }
11839                     mode = MODE_CENTER;
11840                     move();
11841                   }
11842                   break;
11843                 }
11844                 case 32: { // SPACE; takes priority over ALT
11845                   if (mode === MODE_HANDLE || mode === MODE_CENTER) {
11846                     if (signX < 0) { e0 = e1 - dx; } else if (signX > 0) { w0 = w1 - dx; }
11847                     if (signY < 0) { s0 = s1 - dy; } else if (signY > 0) { n0 = n1 - dy; }
11848                     mode = MODE_SPACE;
11849                     overlay.attr("cursor", cursors.selection);
11850                     move();
11851                   }
11852                   break;
11853                 }
11854                 default: return;
11855               }
11856               noevent$1();
11857             }
11858
11859             function keyupped() {
11860               switch (event.keyCode) {
11861                 case 16: { // SHIFT
11862                   if (shifting) {
11863                     lockX = lockY = shifting = false;
11864                     move();
11865                   }
11866                   break;
11867                 }
11868                 case 18: { // ALT
11869                   if (mode === MODE_CENTER) {
11870                     if (signX < 0) { e0 = e1; } else if (signX > 0) { w0 = w1; }
11871                     if (signY < 0) { s0 = s1; } else if (signY > 0) { n0 = n1; }
11872                     mode = MODE_HANDLE;
11873                     move();
11874                   }
11875                   break;
11876                 }
11877                 case 32: { // SPACE
11878                   if (mode === MODE_SPACE) {
11879                     if (event.altKey) {
11880                       if (signX) { e0 = e1 - dx * signX, w0 = w1 + dx * signX; }
11881                       if (signY) { s0 = s1 - dy * signY, n0 = n1 + dy * signY; }
11882                       mode = MODE_CENTER;
11883                     } else {
11884                       if (signX < 0) { e0 = e1; } else if (signX > 0) { w0 = w1; }
11885                       if (signY < 0) { s0 = s1; } else if (signY > 0) { n0 = n1; }
11886                       mode = MODE_HANDLE;
11887                     }
11888                     overlay.attr("cursor", cursors[type]);
11889                     move();
11890                   }
11891                   break;
11892                 }
11893                 default: return;
11894               }
11895               noevent$1();
11896             }
11897           }
11898
11899           function touchmoved() {
11900             emitter(this, arguments).moved();
11901           }
11902
11903           function touchended() {
11904             emitter(this, arguments).ended();
11905           }
11906
11907           function initialize() {
11908             var state = this.__brush || {selection: null};
11909             state.extent = number2(extent.apply(this, arguments));
11910             state.dim = dim;
11911             return state;
11912           }
11913
11914           brush.extent = function(_) {
11915             return arguments.length ? (extent = typeof _ === "function" ? _ : constant$4(number2(_)), brush) : extent;
11916           };
11917
11918           brush.filter = function(_) {
11919             return arguments.length ? (filter = typeof _ === "function" ? _ : constant$4(!!_), brush) : filter;
11920           };
11921
11922           brush.touchable = function(_) {
11923             return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$4(!!_), brush) : touchable;
11924           };
11925
11926           brush.handleSize = function(_) {
11927             return arguments.length ? (handleSize = +_, brush) : handleSize;
11928           };
11929
11930           brush.keyModifiers = function(_) {
11931             return arguments.length ? (keys = !!_, brush) : keys;
11932           };
11933
11934           brush.on = function() {
11935             var value = listeners.on.apply(listeners, arguments);
11936             return value === listeners ? brush : value;
11937           };
11938
11939           return brush;
11940         }
11941
11942         var cos = Math.cos;
11943         var sin = Math.sin;
11944         var pi$1 = Math.PI;
11945         var halfPi$1 = pi$1 / 2;
11946         var tau$1 = pi$1 * 2;
11947         var max$3 = Math.max;
11948
11949         function compareValue(compare) {
11950           return function(a, b) {
11951             return compare(
11952               a.source.value + a.target.value,
11953               b.source.value + b.target.value
11954             );
11955           };
11956         }
11957
11958         function chord() {
11959           var padAngle = 0,
11960               sortGroups = null,
11961               sortSubgroups = null,
11962               sortChords = null;
11963
11964           function chord(matrix) {
11965             var n = matrix.length,
11966                 groupSums = [],
11967                 groupIndex = d3_range(n),
11968                 subgroupIndex = [],
11969                 chords = [],
11970                 groups = chords.groups = new Array(n),
11971                 subgroups = new Array(n * n),
11972                 k,
11973                 x,
11974                 x0,
11975                 dx,
11976                 i,
11977                 j;
11978
11979             // Compute the sum.
11980             k = 0, i = -1; while (++i < n) {
11981               x = 0, j = -1; while (++j < n) {
11982                 x += matrix[i][j];
11983               }
11984               groupSums.push(x);
11985               subgroupIndex.push(d3_range(n));
11986               k += x;
11987             }
11988
11989             // Sort groups…
11990             if (sortGroups) { groupIndex.sort(function(a, b) {
11991               return sortGroups(groupSums[a], groupSums[b]);
11992             }); }
11993
11994             // Sort subgroups…
11995             if (sortSubgroups) { subgroupIndex.forEach(function(d, i) {
11996               d.sort(function(a, b) {
11997                 return sortSubgroups(matrix[i][a], matrix[i][b]);
11998               });
11999             }); }
12000
12001             // Convert the sum to scaling factor for [0, 2pi].
12002             // TODO Allow start and end angle to be specified?
12003             // TODO Allow padding to be specified as percentage?
12004             k = max$3(0, tau$1 - padAngle * n) / k;
12005             dx = k ? padAngle : tau$1 / n;
12006
12007             // Compute the start and end angle for each group and subgroup.
12008             // Note: Opera has a bug reordering object literal properties!
12009             x = 0, i = -1; while (++i < n) {
12010               x0 = x, j = -1; while (++j < n) {
12011                 var di = groupIndex[i],
12012                     dj = subgroupIndex[di][j],
12013                     v = matrix[di][dj],
12014                     a0 = x,
12015                     a1 = x += v * k;
12016                 subgroups[dj * n + di] = {
12017                   index: di,
12018                   subindex: dj,
12019                   startAngle: a0,
12020                   endAngle: a1,
12021                   value: v
12022                 };
12023               }
12024               groups[di] = {
12025                 index: di,
12026                 startAngle: x0,
12027                 endAngle: x,
12028                 value: groupSums[di]
12029               };
12030               x += dx;
12031             }
12032
12033             // Generate chords for each (non-empty) subgroup-subgroup link.
12034             i = -1; while (++i < n) {
12035               j = i - 1; while (++j < n) {
12036                 var source = subgroups[j * n + i],
12037                     target = subgroups[i * n + j];
12038                 if (source.value || target.value) {
12039                   chords.push(source.value < target.value
12040                       ? {source: target, target: source}
12041                       : {source: source, target: target});
12042                 }
12043               }
12044             }
12045
12046             return sortChords ? chords.sort(sortChords) : chords;
12047           }
12048
12049           chord.padAngle = function(_) {
12050             return arguments.length ? (padAngle = max$3(0, _), chord) : padAngle;
12051           };
12052
12053           chord.sortGroups = function(_) {
12054             return arguments.length ? (sortGroups = _, chord) : sortGroups;
12055           };
12056
12057           chord.sortSubgroups = function(_) {
12058             return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;
12059           };
12060
12061           chord.sortChords = function(_) {
12062             return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;
12063           };
12064
12065           return chord;
12066         }
12067
12068         var slice$6 = Array.prototype.slice;
12069
12070         function constant$5(x) {
12071           return function() {
12072             return x;
12073           };
12074         }
12075
12076         var pi$2 = Math.PI,
12077             tau$2 = 2 * pi$2,
12078             epsilon$1 = 1e-6,
12079             tauEpsilon = tau$2 - epsilon$1;
12080
12081         function Path() {
12082           this._x0 = this._y0 = // start of current subpath
12083           this._x1 = this._y1 = null; // end of current subpath
12084           this._ = "";
12085         }
12086
12087         function path() {
12088           return new Path;
12089         }
12090
12091         Path.prototype = path.prototype = {
12092           constructor: Path,
12093           moveTo: function(x, y) {
12094             this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y);
12095           },
12096           closePath: function() {
12097             if (this._x1 !== null) {
12098               this._x1 = this._x0, this._y1 = this._y0;
12099               this._ += "Z";
12100             }
12101           },
12102           lineTo: function(x, y) {
12103             this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y);
12104           },
12105           quadraticCurveTo: function(x1, y1, x, y) {
12106             this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y);
12107           },
12108           bezierCurveTo: function(x1, y1, x2, y2, x, y) {
12109             this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y);
12110           },
12111           arcTo: function(x1, y1, x2, y2, r) {
12112             x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
12113             var x0 = this._x1,
12114                 y0 = this._y1,
12115                 x21 = x2 - x1,
12116                 y21 = y2 - y1,
12117                 x01 = x0 - x1,
12118                 y01 = y0 - y1,
12119                 l01_2 = x01 * x01 + y01 * y01;
12120
12121             // Is the radius negative? Error.
12122             if (r < 0) { throw new Error("negative radius: " + r); }
12123
12124             // Is this path empty? Move to (x1,y1).
12125             if (this._x1 === null) {
12126               this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1);
12127             }
12128
12129             // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
12130             else if (!(l01_2 > epsilon$1));
12131
12132             // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
12133             // Equivalently, is (x1,y1) coincident with (x2,y2)?
12134             // Or, is the radius zero? Line to (x1,y1).
12135             else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$1) || !r) {
12136               this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1);
12137             }
12138
12139             // Otherwise, draw an arc!
12140             else {
12141               var x20 = x2 - x0,
12142                   y20 = y2 - y0,
12143                   l21_2 = x21 * x21 + y21 * y21,
12144                   l20_2 = x20 * x20 + y20 * y20,
12145                   l21 = Math.sqrt(l21_2),
12146                   l01 = Math.sqrt(l01_2),
12147                   l = r * Math.tan((pi$2 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
12148                   t01 = l / l01,
12149                   t21 = l / l21;
12150
12151               // If the start tangent is not coincident with (x0,y0), line to.
12152               if (Math.abs(t01 - 1) > epsilon$1) {
12153                 this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01);
12154               }
12155
12156               this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21);
12157             }
12158           },
12159           arc: function(x, y, r, a0, a1, ccw) {
12160             x = +x, y = +y, r = +r, ccw = !!ccw;
12161             var dx = r * Math.cos(a0),
12162                 dy = r * Math.sin(a0),
12163                 x0 = x + dx,
12164                 y0 = y + dy,
12165                 cw = 1 ^ ccw,
12166                 da = ccw ? a0 - a1 : a1 - a0;
12167
12168             // Is the radius negative? Error.
12169             if (r < 0) { throw new Error("negative radius: " + r); }
12170
12171             // Is this path empty? Move to (x0,y0).
12172             if (this._x1 === null) {
12173               this._ += "M" + x0 + "," + y0;
12174             }
12175
12176             // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
12177             else if (Math.abs(this._x1 - x0) > epsilon$1 || Math.abs(this._y1 - y0) > epsilon$1) {
12178               this._ += "L" + x0 + "," + y0;
12179             }
12180
12181             // Is this arc empty? We’re done.
12182             if (!r) { return; }
12183
12184             // Does the angle go the wrong way? Flip the direction.
12185             if (da < 0) { da = da % tau$2 + tau$2; }
12186
12187             // Is this a complete circle? Draw two arcs to complete the circle.
12188             if (da > tauEpsilon) {
12189               this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0);
12190             }
12191
12192             // Is this arc non-empty? Draw an arc!
12193             else if (da > epsilon$1) {
12194               this._ += "A" + r + "," + r + ",0," + (+(da >= pi$2)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1));
12195             }
12196           },
12197           rect: function(x, y, w, h) {
12198             this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z";
12199           },
12200           toString: function() {
12201             return this._;
12202           }
12203         };
12204
12205         function defaultSource(d) {
12206           return d.source;
12207         }
12208
12209         function defaultTarget(d) {
12210           return d.target;
12211         }
12212
12213         function defaultRadius(d) {
12214           return d.radius;
12215         }
12216
12217         function defaultStartAngle(d) {
12218           return d.startAngle;
12219         }
12220
12221         function defaultEndAngle(d) {
12222           return d.endAngle;
12223         }
12224
12225         function ribbon() {
12226           var source = defaultSource,
12227               target = defaultTarget,
12228               radius = defaultRadius,
12229               startAngle = defaultStartAngle,
12230               endAngle = defaultEndAngle,
12231               context = null;
12232
12233           function ribbon() {
12234             var buffer,
12235                 argv = slice$6.call(arguments),
12236                 s = source.apply(this, argv),
12237                 t = target.apply(this, argv),
12238                 sr = +radius.apply(this, (argv[0] = s, argv)),
12239                 sa0 = startAngle.apply(this, argv) - halfPi$1,
12240                 sa1 = endAngle.apply(this, argv) - halfPi$1,
12241                 sx0 = sr * cos(sa0),
12242                 sy0 = sr * sin(sa0),
12243                 tr = +radius.apply(this, (argv[0] = t, argv)),
12244                 ta0 = startAngle.apply(this, argv) - halfPi$1,
12245                 ta1 = endAngle.apply(this, argv) - halfPi$1;
12246
12247             if (!context) { context = buffer = path(); }
12248
12249             context.moveTo(sx0, sy0);
12250             context.arc(0, 0, sr, sa0, sa1);
12251             if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?
12252               context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));
12253               context.arc(0, 0, tr, ta0, ta1);
12254             }
12255             context.quadraticCurveTo(0, 0, sx0, sy0);
12256             context.closePath();
12257
12258             if (buffer) { return context = null, buffer + "" || null; }
12259           }
12260
12261           ribbon.radius = function(_) {
12262             return arguments.length ? (radius = typeof _ === "function" ? _ : constant$5(+_), ribbon) : radius;
12263           };
12264
12265           ribbon.startAngle = function(_) {
12266             return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : startAngle;
12267           };
12268
12269           ribbon.endAngle = function(_) {
12270             return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : endAngle;
12271           };
12272
12273           ribbon.source = function(_) {
12274             return arguments.length ? (source = _, ribbon) : source;
12275           };
12276
12277           ribbon.target = function(_) {
12278             return arguments.length ? (target = _, ribbon) : target;
12279           };
12280
12281           ribbon.context = function(_) {
12282             return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;
12283           };
12284
12285           return ribbon;
12286         }
12287
12288         var prefix = "$";
12289
12290         function Map$1() {}
12291
12292         Map$1.prototype = map$3.prototype = {
12293           constructor: Map$1,
12294           has: function(key) {
12295             return (prefix + key) in this;
12296           },
12297           get: function(key) {
12298             return this[prefix + key];
12299           },
12300           set: function(key, value) {
12301             this[prefix + key] = value;
12302             return this;
12303           },
12304           remove: function(key) {
12305             var property = prefix + key;
12306             return property in this && delete this[property];
12307           },
12308           clear: function() {
12309             for (var property in this) { if (property[0] === prefix) { delete this[property]; } }
12310           },
12311           keys: function() {
12312             var keys = [];
12313             for (var property in this) { if (property[0] === prefix) { keys.push(property.slice(1)); } }
12314             return keys;
12315           },
12316           values: function() {
12317             var values = [];
12318             for (var property in this) { if (property[0] === prefix) { values.push(this[property]); } }
12319             return values;
12320           },
12321           entries: function() {
12322             var entries = [];
12323             for (var property in this) { if (property[0] === prefix) { entries.push({key: property.slice(1), value: this[property]}); } }
12324             return entries;
12325           },
12326           size: function() {
12327             var size = 0;
12328             for (var property in this) { if (property[0] === prefix) { ++size; } }
12329             return size;
12330           },
12331           empty: function() {
12332             for (var property in this) { if (property[0] === prefix) { return false; } }
12333             return true;
12334           },
12335           each: function(f) {
12336             for (var property in this) { if (property[0] === prefix) { f(this[property], property.slice(1), this); } }
12337           }
12338         };
12339
12340         function map$3(object, f) {
12341           var map = new Map$1;
12342
12343           // Copy constructor.
12344           if (object instanceof Map$1) { object.each(function(value, key) { map.set(key, value); }); }
12345
12346           // Index array by numeric index or specified key function.
12347           else if (Array.isArray(object)) {
12348             var i = -1,
12349                 n = object.length,
12350                 o;
12351
12352             if (f == null) { while (++i < n) { map.set(i, object[i]); } }
12353             else { while (++i < n) { map.set(f(o = object[i], i, object), o); } }
12354           }
12355
12356           // Convert object to map.
12357           else if (object) { for (var key in object) { map.set(key, object[key]); } }
12358
12359           return map;
12360         }
12361
12362         function nest() {
12363           var keys = [],
12364               sortKeys = [],
12365               sortValues,
12366               rollup,
12367               nest;
12368
12369           function apply(array, depth, createResult, setResult) {
12370             if (depth >= keys.length) {
12371               if (sortValues != null) { array.sort(sortValues); }
12372               return rollup != null ? rollup(array) : array;
12373             }
12374
12375             var i = -1,
12376                 n = array.length,
12377                 key = keys[depth++],
12378                 keyValue,
12379                 value,
12380                 valuesByKey = map$3(),
12381                 values,
12382                 result = createResult();
12383
12384             while (++i < n) {
12385               if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {
12386                 values.push(value);
12387               } else {
12388                 valuesByKey.set(keyValue, [value]);
12389               }
12390             }
12391
12392             valuesByKey.each(function(values, key) {
12393               setResult(result, key, apply(values, depth, createResult, setResult));
12394             });
12395
12396             return result;
12397           }
12398
12399           function entries(map, depth) {
12400             if (++depth > keys.length) { return map; }
12401             var array, sortKey = sortKeys[depth - 1];
12402             if (rollup != null && depth >= keys.length) { array = map.entries(); }
12403             else { array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); }); }
12404             return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;
12405           }
12406
12407           return nest = {
12408             object: function(array) { return apply(array, 0, createObject, setObject); },
12409             map: function(array) { return apply(array, 0, createMap, setMap); },
12410             entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },
12411             key: function(d) { keys.push(d); return nest; },
12412             sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },
12413             sortValues: function(order) { sortValues = order; return nest; },
12414             rollup: function(f) { rollup = f; return nest; }
12415           };
12416         }
12417
12418         function createObject() {
12419           return {};
12420         }
12421
12422         function setObject(object, key, value) {
12423           object[key] = value;
12424         }
12425
12426         function createMap() {
12427           return map$3();
12428         }
12429
12430         function setMap(map, key, value) {
12431           map.set(key, value);
12432         }
12433
12434         function Set$1() {}
12435
12436         var proto = map$3.prototype;
12437
12438         Set$1.prototype = set$2.prototype = {
12439           constructor: Set$1,
12440           has: proto.has,
12441           add: function(value) {
12442             value += "";
12443             this[prefix + value] = value;
12444             return this;
12445           },
12446           remove: proto.remove,
12447           clear: proto.clear,
12448           values: proto.keys,
12449           size: proto.size,
12450           empty: proto.empty,
12451           each: proto.each
12452         };
12453
12454         function set$2(object, f) {
12455           var set = new Set$1;
12456
12457           // Copy constructor.
12458           if (object instanceof Set$1) { object.each(function(value) { set.add(value); }); }
12459
12460           // Otherwise, assume it’s an array.
12461           else if (object) {
12462             var i = -1, n = object.length;
12463             if (f == null) { while (++i < n) { set.add(object[i]); } }
12464             else { while (++i < n) { set.add(f(object[i], i, object)); } }
12465           }
12466
12467           return set;
12468         }
12469
12470         function keys$3(map) {
12471           var keys = [];
12472           for (var key in map) { keys.push(key); }
12473           return keys;
12474         }
12475
12476         function values(map) {
12477           var values = [];
12478           for (var key in map) { values.push(map[key]); }
12479           return values;
12480         }
12481
12482         function entries(map) {
12483           var entries = [];
12484           for (var key in map) { entries.push({key: key, value: map[key]}); }
12485           return entries;
12486         }
12487
12488         var array$3 = Array.prototype;
12489
12490         var slice$7 = array$3.slice;
12491
12492         function ascending$1(a, b) {
12493           return a - b;
12494         }
12495
12496         function area(ring) {
12497           var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];
12498           while (++i < n) { area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1]; }
12499           return area;
12500         }
12501
12502         function constant$6(x) {
12503           return function() {
12504             return x;
12505           };
12506         }
12507
12508         function contains$1(ring, hole) {
12509           var i = -1, n = hole.length, c;
12510           while (++i < n) { if (c = ringContains(ring, hole[i])) { return c; } }
12511           return 0;
12512         }
12513
12514         function ringContains(ring, point) {
12515           var x = point[0], y = point[1], contains = -1;
12516           for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {
12517             var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];
12518             if (segmentContains(pi, pj, point)) { return 0; }
12519             if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) { contains = -contains; }
12520           }
12521           return contains;
12522         }
12523
12524         function segmentContains(a, b, c) {
12525           var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);
12526         }
12527
12528         function collinear(a, b, c) {
12529           return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);
12530         }
12531
12532         function within(p, q, r) {
12533           return p <= q && q <= r || r <= q && q <= p;
12534         }
12535
12536         function noop$3() {}
12537
12538         var cases = [
12539           [],
12540           [[[1.0, 1.5], [0.5, 1.0]]],
12541           [[[1.5, 1.0], [1.0, 1.5]]],
12542           [[[1.5, 1.0], [0.5, 1.0]]],
12543           [[[1.0, 0.5], [1.5, 1.0]]],
12544           [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],
12545           [[[1.0, 0.5], [1.0, 1.5]]],
12546           [[[1.0, 0.5], [0.5, 1.0]]],
12547           [[[0.5, 1.0], [1.0, 0.5]]],
12548           [[[1.0, 1.5], [1.0, 0.5]]],
12549           [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],
12550           [[[1.5, 1.0], [1.0, 0.5]]],
12551           [[[0.5, 1.0], [1.5, 1.0]]],
12552           [[[1.0, 1.5], [1.5, 1.0]]],
12553           [[[0.5, 1.0], [1.0, 1.5]]],
12554           []
12555         ];
12556
12557         function contours() {
12558           var dx = 1,
12559               dy = 1,
12560               threshold = thresholdSturges,
12561               smooth = smoothLinear;
12562
12563           function contours(values) {
12564             var tz = threshold(values);
12565
12566             // Convert number of thresholds into uniform thresholds.
12567             if (!Array.isArray(tz)) {
12568               var domain = extent(values), start = domain[0], stop = domain[1];
12569               tz = tickStep(start, stop, tz);
12570               tz = d3_range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);
12571             } else {
12572               tz = tz.slice().sort(ascending$1);
12573             }
12574
12575             return tz.map(function(value) {
12576               return contour(values, value);
12577             });
12578           }
12579
12580           // Accumulate, smooth contour rings, assign holes to exterior rings.
12581           // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js
12582           function contour(values, value) {
12583             var polygons = [],
12584                 holes = [];
12585
12586             isorings(values, value, function(ring) {
12587               smooth(ring, values, value);
12588               if (area(ring) > 0) { polygons.push([ring]); }
12589               else { holes.push(ring); }
12590             });
12591
12592             holes.forEach(function(hole) {
12593               for (var i = 0, n = polygons.length, polygon; i < n; ++i) {
12594                 if (contains$1((polygon = polygons[i])[0], hole) !== -1) {
12595                   polygon.push(hole);
12596                   return;
12597                 }
12598               }
12599             });
12600
12601             return {
12602               type: "MultiPolygon",
12603               value: value,
12604               coordinates: polygons
12605             };
12606           }
12607
12608           // Marching squares with isolines stitched into rings.
12609           // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js
12610           function isorings(values, value, callback) {
12611             var fragmentByStart = new Array,
12612                 fragmentByEnd = new Array,
12613                 x, y, t0, t1, t2, t3;
12614
12615             // Special case for the first row (y = -1, t2 = t3 = 0).
12616             x = y = -1;
12617             t1 = values[0] >= value;
12618             cases[t1 << 1].forEach(stitch);
12619             while (++x < dx - 1) {
12620               t0 = t1, t1 = values[x + 1] >= value;
12621               cases[t0 | t1 << 1].forEach(stitch);
12622             }
12623             cases[t1 << 0].forEach(stitch);
12624
12625             // General case for the intermediate rows.
12626             while (++y < dy - 1) {
12627               x = -1;
12628               t1 = values[y * dx + dx] >= value;
12629               t2 = values[y * dx] >= value;
12630               cases[t1 << 1 | t2 << 2].forEach(stitch);
12631               while (++x < dx - 1) {
12632                 t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;
12633                 t3 = t2, t2 = values[y * dx + x + 1] >= value;
12634                 cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);
12635               }
12636               cases[t1 | t2 << 3].forEach(stitch);
12637             }
12638
12639             // Special case for the last row (y = dy - 1, t0 = t1 = 0).
12640             x = -1;
12641             t2 = values[y * dx] >= value;
12642             cases[t2 << 2].forEach(stitch);
12643             while (++x < dx - 1) {
12644               t3 = t2, t2 = values[y * dx + x + 1] >= value;
12645               cases[t2 << 2 | t3 << 3].forEach(stitch);
12646             }
12647             cases[t2 << 3].forEach(stitch);
12648
12649             function stitch(line) {
12650               var start = [line[0][0] + x, line[0][1] + y],
12651                   end = [line[1][0] + x, line[1][1] + y],
12652                   startIndex = index(start),
12653                   endIndex = index(end),
12654                   f, g;
12655               if (f = fragmentByEnd[startIndex]) {
12656                 if (g = fragmentByStart[endIndex]) {
12657                   delete fragmentByEnd[f.end];
12658                   delete fragmentByStart[g.start];
12659                   if (f === g) {
12660                     f.ring.push(end);
12661                     callback(f.ring);
12662                   } else {
12663                     fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};
12664                   }
12665                 } else {
12666                   delete fragmentByEnd[f.end];
12667                   f.ring.push(end);
12668                   fragmentByEnd[f.end = endIndex] = f;
12669                 }
12670               } else if (f = fragmentByStart[endIndex]) {
12671                 if (g = fragmentByEnd[startIndex]) {
12672                   delete fragmentByStart[f.start];
12673                   delete fragmentByEnd[g.end];
12674                   if (f === g) {
12675                     f.ring.push(end);
12676                     callback(f.ring);
12677                   } else {
12678                     fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};
12679                   }
12680                 } else {
12681                   delete fragmentByStart[f.start];
12682                   f.ring.unshift(start);
12683                   fragmentByStart[f.start = startIndex] = f;
12684                 }
12685               } else {
12686                 fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};
12687               }
12688             }
12689           }
12690
12691           function index(point) {
12692             return point[0] * 2 + point[1] * (dx + 1) * 4;
12693           }
12694
12695           function smoothLinear(ring, values, value) {
12696             ring.forEach(function(point) {
12697               var x = point[0],
12698                   y = point[1],
12699                   xt = x | 0,
12700                   yt = y | 0,
12701                   v0,
12702                   v1 = values[yt * dx + xt];
12703               if (x > 0 && x < dx && xt === x) {
12704                 v0 = values[yt * dx + xt - 1];
12705                 point[0] = x + (value - v0) / (v1 - v0) - 0.5;
12706               }
12707               if (y > 0 && y < dy && yt === y) {
12708                 v0 = values[(yt - 1) * dx + xt];
12709                 point[1] = y + (value - v0) / (v1 - v0) - 0.5;
12710               }
12711             });
12712           }
12713
12714           contours.contour = contour;
12715
12716           contours.size = function(_) {
12717             if (!arguments.length) { return [dx, dy]; }
12718             var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);
12719             if (!(_0 > 0) || !(_1 > 0)) { throw new Error("invalid size"); }
12720             return dx = _0, dy = _1, contours;
12721           };
12722
12723           contours.thresholds = function(_) {
12724             return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$6(slice$7.call(_)) : constant$6(_), contours) : threshold;
12725           };
12726
12727           contours.smooth = function(_) {
12728             return arguments.length ? (smooth = _ ? smoothLinear : noop$3, contours) : smooth === smoothLinear;
12729           };
12730
12731           return contours;
12732         }
12733
12734         // TODO Optimize edge cases.
12735         // TODO Optimize index calculation.
12736         // TODO Optimize arguments.
12737         function blurX(source, target, r) {
12738           var n = source.width,
12739               m = source.height,
12740               w = (r << 1) + 1;
12741           for (var j = 0; j < m; ++j) {
12742             for (var i = 0, sr = 0; i < n + r; ++i) {
12743               if (i < n) {
12744                 sr += source.data[i + j * n];
12745               }
12746               if (i >= r) {
12747                 if (i >= w) {
12748                   sr -= source.data[i - w + j * n];
12749                 }
12750                 target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);
12751               }
12752             }
12753           }
12754         }
12755
12756         // TODO Optimize edge cases.
12757         // TODO Optimize index calculation.
12758         // TODO Optimize arguments.
12759         function blurY(source, target, r) {
12760           var n = source.width,
12761               m = source.height,
12762               w = (r << 1) + 1;
12763           for (var i = 0; i < n; ++i) {
12764             for (var j = 0, sr = 0; j < m + r; ++j) {
12765               if (j < m) {
12766                 sr += source.data[i + j * n];
12767               }
12768               if (j >= r) {
12769                 if (j >= w) {
12770                   sr -= source.data[i + (j - w) * n];
12771                 }
12772                 target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);
12773               }
12774             }
12775           }
12776         }
12777
12778         function defaultX(d) {
12779           return d[0];
12780         }
12781
12782         function defaultY(d) {
12783           return d[1];
12784         }
12785
12786         function defaultWeight() {
12787           return 1;
12788         }
12789
12790         function density() {
12791           var x = defaultX,
12792               y = defaultY,
12793               weight = defaultWeight,
12794               dx = 960,
12795               dy = 500,
12796               r = 20, // blur radius
12797               k = 2, // log2(grid cell size)
12798               o = r * 3, // grid offset, to pad for blur
12799               n = (dx + o * 2) >> k, // grid width
12800               m = (dy + o * 2) >> k, // grid height
12801               threshold = constant$6(20);
12802
12803           function density(data) {
12804             var values0 = new Float32Array(n * m),
12805                 values1 = new Float32Array(n * m);
12806
12807             data.forEach(function(d, i, data) {
12808               var xi = (+x(d, i, data) + o) >> k,
12809                   yi = (+y(d, i, data) + o) >> k,
12810                   wi = +weight(d, i, data);
12811               if (xi >= 0 && xi < n && yi >= 0 && yi < m) {
12812                 values0[xi + yi * n] += wi;
12813               }
12814             });
12815
12816             // TODO Optimize.
12817             blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
12818             blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
12819             blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
12820             blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
12821             blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
12822             blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
12823
12824             var tz = threshold(values0);
12825
12826             // Convert number of thresholds into uniform thresholds.
12827             if (!Array.isArray(tz)) {
12828               var stop = max$2(values0);
12829               tz = tickStep(0, stop, tz);
12830               tz = d3_range(0, Math.floor(stop / tz) * tz, tz);
12831               tz.shift();
12832             }
12833
12834             return contours()
12835                 .thresholds(tz)
12836                 .size([n, m])
12837               (values0)
12838                 .map(transform);
12839           }
12840
12841           function transform(geometry) {
12842             geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.
12843             geometry.coordinates.forEach(transformPolygon);
12844             return geometry;
12845           }
12846
12847           function transformPolygon(coordinates) {
12848             coordinates.forEach(transformRing);
12849           }
12850
12851           function transformRing(coordinates) {
12852             coordinates.forEach(transformPoint);
12853           }
12854
12855           // TODO Optimize.
12856           function transformPoint(coordinates) {
12857             coordinates[0] = coordinates[0] * Math.pow(2, k) - o;
12858             coordinates[1] = coordinates[1] * Math.pow(2, k) - o;
12859           }
12860
12861           function resize() {
12862             o = r * 3;
12863             n = (dx + o * 2) >> k;
12864             m = (dy + o * 2) >> k;
12865             return density;
12866           }
12867
12868           density.x = function(_) {
12869             return arguments.length ? (x = typeof _ === "function" ? _ : constant$6(+_), density) : x;
12870           };
12871
12872           density.y = function(_) {
12873             return arguments.length ? (y = typeof _ === "function" ? _ : constant$6(+_), density) : y;
12874           };
12875
12876           density.weight = function(_) {
12877             return arguments.length ? (weight = typeof _ === "function" ? _ : constant$6(+_), density) : weight;
12878           };
12879
12880           density.size = function(_) {
12881             if (!arguments.length) { return [dx, dy]; }
12882             var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);
12883             if (!(_0 >= 0) && !(_0 >= 0)) { throw new Error("invalid size"); }
12884             return dx = _0, dy = _1, resize();
12885           };
12886
12887           density.cellSize = function(_) {
12888             if (!arguments.length) { return 1 << k; }
12889             if (!((_ = +_) >= 1)) { throw new Error("invalid cell size"); }
12890             return k = Math.floor(Math.log(_) / Math.LN2), resize();
12891           };
12892
12893           density.thresholds = function(_) {
12894             return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$6(slice$7.call(_)) : constant$6(_), density) : threshold;
12895           };
12896
12897           density.bandwidth = function(_) {
12898             if (!arguments.length) { return Math.sqrt(r * (r + 1)); }
12899             if (!((_ = +_) >= 0)) { throw new Error("invalid bandwidth"); }
12900             return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();
12901           };
12902
12903           return density;
12904         }
12905
12906         var EOL = {},
12907             EOF = {},
12908             QUOTE = 34,
12909             NEWLINE = 10,
12910             RETURN = 13;
12911
12912         function objectConverter(columns) {
12913           return new Function("d", "return {" + columns.map(function(name, i) {
12914             return JSON.stringify(name) + ": d[" + i + "] || \"\"";
12915           }).join(",") + "}");
12916         }
12917
12918         function customConverter(columns, f) {
12919           var object = objectConverter(columns);
12920           return function(row, i) {
12921             return f(object(row), i, columns);
12922           };
12923         }
12924
12925         // Compute unique columns in order of discovery.
12926         function inferColumns(rows) {
12927           var columnSet = Object.create(null),
12928               columns = [];
12929
12930           rows.forEach(function(row) {
12931             for (var column in row) {
12932               if (!(column in columnSet)) {
12933                 columns.push(columnSet[column] = column);
12934               }
12935             }
12936           });
12937
12938           return columns;
12939         }
12940
12941         function pad(value, width) {
12942           var s = value + "", length = s.length;
12943           return length < width ? new Array(width - length + 1).join(0) + s : s;
12944         }
12945
12946         function formatYear(year) {
12947           return year < 0 ? "-" + pad(-year, 6)
12948             : year > 9999 ? "+" + pad(year, 6)
12949             : pad(year, 4);
12950         }
12951
12952         function formatDate(date) {
12953           var hours = date.getUTCHours(),
12954               minutes = date.getUTCMinutes(),
12955               seconds = date.getUTCSeconds(),
12956               milliseconds = date.getUTCMilliseconds();
12957           return isNaN(date) ? "Invalid Date"
12958               : formatYear(date.getUTCFullYear()) + "-" + pad(date.getUTCMonth() + 1, 2) + "-" + pad(date.getUTCDate(), 2)
12959               + (milliseconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "." + pad(milliseconds, 3) + "Z"
12960               : seconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "Z"
12961               : minutes || hours ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + "Z"
12962               : "");
12963         }
12964
12965         function dsvFormat(delimiter) {
12966           var reFormat = new RegExp("[\"" + delimiter + "\n\r]"),
12967               DELIMITER = delimiter.charCodeAt(0);
12968
12969           function parse(text, f) {
12970             var convert, columns, rows = parseRows(text, function(row, i) {
12971               if (convert) { return convert(row, i - 1); }
12972               columns = row, convert = f ? customConverter(row, f) : objectConverter(row);
12973             });
12974             rows.columns = columns || [];
12975             return rows;
12976           }
12977
12978           function parseRows(text, f) {
12979             var rows = [], // output rows
12980                 N = text.length,
12981                 I = 0, // current character index
12982                 n = 0, // current line number
12983                 t, // current token
12984                 eof = N <= 0, // current token followed by EOF?
12985                 eol = false; // current token followed by EOL?
12986
12987             // Strip the trailing newline.
12988             if (text.charCodeAt(N - 1) === NEWLINE) { --N; }
12989             if (text.charCodeAt(N - 1) === RETURN) { --N; }
12990
12991             function token() {
12992               if (eof) { return EOF; }
12993               if (eol) { return eol = false, EOL; }
12994
12995               // Unescape quotes.
12996               var i, j = I, c;
12997               if (text.charCodeAt(j) === QUOTE) {
12998                 while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE){ }
12999                 if ((i = I) >= N) { eof = true; }
13000                 else if ((c = text.charCodeAt(I++)) === NEWLINE) { eol = true; }
13001                 else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) { ++I; } }
13002                 return text.slice(j + 1, i - 1).replace(/""/g, "\"");
13003               }
13004
13005               // Find next delimiter or newline.
13006               while (I < N) {
13007                 if ((c = text.charCodeAt(i = I++)) === NEWLINE) { eol = true; }
13008                 else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) { ++I; } }
13009                 else if (c !== DELIMITER) { continue; }
13010                 return text.slice(j, i);
13011               }
13012
13013               // Return last token before EOF.
13014               return eof = true, text.slice(j, N);
13015             }
13016
13017             while ((t = token()) !== EOF) {
13018               var row = [];
13019               while (t !== EOL && t !== EOF) { row.push(t), t = token(); }
13020               if (f && (row = f(row, n++)) == null) { continue; }
13021               rows.push(row);
13022             }
13023
13024             return rows;
13025           }
13026
13027           function preformatBody(rows, columns) {
13028             return rows.map(function(row) {
13029               return columns.map(function(column) {
13030                 return formatValue(row[column]);
13031               }).join(delimiter);
13032             });
13033           }
13034
13035           function format(rows, columns) {
13036             if (columns == null) { columns = inferColumns(rows); }
13037             return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join("\n");
13038           }
13039
13040           function formatBody(rows, columns) {
13041             if (columns == null) { columns = inferColumns(rows); }
13042             return preformatBody(rows, columns).join("\n");
13043           }
13044
13045           function formatRows(rows) {
13046             return rows.map(formatRow).join("\n");
13047           }
13048
13049           function formatRow(row) {
13050             return row.map(formatValue).join(delimiter);
13051           }
13052
13053           function formatValue(value) {
13054             return value == null ? ""
13055                 : value instanceof Date ? formatDate(value)
13056                 : reFormat.test(value += "") ? "\"" + value.replace(/"/g, "\"\"") + "\""
13057                 : value;
13058           }
13059
13060           return {
13061             parse: parse,
13062             parseRows: parseRows,
13063             format: format,
13064             formatBody: formatBody,
13065             formatRows: formatRows,
13066             formatRow: formatRow,
13067             formatValue: formatValue
13068           };
13069         }
13070
13071         var csv = dsvFormat(",");
13072
13073         var csvParse = csv.parse;
13074         var csvParseRows = csv.parseRows;
13075         var csvFormat = csv.format;
13076         var csvFormatBody = csv.formatBody;
13077         var csvFormatRows = csv.formatRows;
13078         var csvFormatRow = csv.formatRow;
13079         var csvFormatValue = csv.formatValue;
13080
13081         var tsv = dsvFormat("\t");
13082
13083         var tsvParse = tsv.parse;
13084         var tsvParseRows = tsv.parseRows;
13085         var tsvFormat = tsv.format;
13086         var tsvFormatBody = tsv.formatBody;
13087         var tsvFormatRows = tsv.formatRows;
13088         var tsvFormatRow = tsv.formatRow;
13089         var tsvFormatValue = tsv.formatValue;
13090
13091         function autoType(object) {
13092           for (var key in object) {
13093             var value = object[key].trim(), number, m;
13094             if (!value) { value = null; }
13095             else if (value === "true") { value = true; }
13096             else if (value === "false") { value = false; }
13097             else if (value === "NaN") { value = NaN; }
13098             else if (!isNaN(number = +value)) { value = number; }
13099             else if (m = value.match(/^([-+]\d{2})?\d{4}(-\d{2}(-\d{2})?)?(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[-+]\d{2}:\d{2})?)?$/)) {
13100               if (fixtz && !!m[4] && !m[7]) { value = value.replace(/-/g, "/").replace(/T/, " "); }
13101               value = new Date(value);
13102             }
13103             else { continue; }
13104             object[key] = value;
13105           }
13106           return object;
13107         }
13108
13109         // https://github.com/d3/d3-dsv/issues/45
13110         var fixtz = new Date("2019-01-01T00:00").getHours() || new Date("2019-07-01T00:00").getHours();
13111
13112         function responseBlob(response) {
13113           if (!response.ok) { throw new Error(response.status + " " + response.statusText); }
13114           return response.blob();
13115         }
13116
13117         function blob(input, init) {
13118           return fetch(input, init).then(responseBlob);
13119         }
13120
13121         function responseArrayBuffer(response) {
13122           if (!response.ok) { throw new Error(response.status + " " + response.statusText); }
13123           return response.arrayBuffer();
13124         }
13125
13126         function buffer(input, init) {
13127           return fetch(input, init).then(responseArrayBuffer);
13128         }
13129
13130         function responseText(response) {
13131           if (!response.ok) { throw new Error(response.status + " " + response.statusText); }
13132           return response.text();
13133         }
13134
13135         function d3_text(input, init) {
13136           return fetch(input, init).then(responseText);
13137         }
13138
13139         function dsvParse(parse) {
13140           return function(input, init, row) {
13141             if (arguments.length === 2 && typeof init === "function") { row = init, init = undefined; }
13142             return d3_text(input, init).then(function(response) {
13143               return parse(response, row);
13144             });
13145           };
13146         }
13147
13148         function dsv(delimiter, input, init, row) {
13149           if (arguments.length === 3 && typeof init === "function") { row = init, init = undefined; }
13150           var format = dsvFormat(delimiter);
13151           return d3_text(input, init).then(function(response) {
13152             return format.parse(response, row);
13153           });
13154         }
13155
13156         var csv$1 = dsvParse(csvParse);
13157         var tsv$1 = dsvParse(tsvParse);
13158
13159         function image(input, init) {
13160           return new Promise(function(resolve, reject) {
13161             var image = new Image;
13162             for (var key in init) { image[key] = init[key]; }
13163             image.onerror = reject;
13164             image.onload = function() { resolve(image); };
13165             image.src = input;
13166           });
13167         }
13168
13169         function responseJson(response) {
13170           if (!response.ok) { throw new Error(response.status + " " + response.statusText); }
13171           return response.json();
13172         }
13173
13174         function d3_json(input, init) {
13175           return fetch(input, init).then(responseJson);
13176         }
13177
13178         function parser(type) {
13179           return function(input, init)  {
13180             return d3_text(input, init).then(function(text) {
13181               return (new DOMParser).parseFromString(text, type);
13182             });
13183           };
13184         }
13185
13186         var d3_xml = parser("application/xml");
13187
13188         var html = parser("text/html");
13189
13190         var svg = parser("image/svg+xml");
13191
13192         function center$1(x, y) {
13193           var nodes;
13194
13195           if (x == null) { x = 0; }
13196           if (y == null) { y = 0; }
13197
13198           function force() {
13199             var i,
13200                 n = nodes.length,
13201                 node,
13202                 sx = 0,
13203                 sy = 0;
13204
13205             for (i = 0; i < n; ++i) {
13206               node = nodes[i], sx += node.x, sy += node.y;
13207             }
13208
13209             for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {
13210               node = nodes[i], node.x -= sx, node.y -= sy;
13211             }
13212           }
13213
13214           force.initialize = function(_) {
13215             nodes = _;
13216           };
13217
13218           force.x = function(_) {
13219             return arguments.length ? (x = +_, force) : x;
13220           };
13221
13222           force.y = function(_) {
13223             return arguments.length ? (y = +_, force) : y;
13224           };
13225
13226           return force;
13227         }
13228
13229         function constant$7(x) {
13230           return function() {
13231             return x;
13232           };
13233         }
13234
13235         function jiggle() {
13236           return (Math.random() - 0.5) * 1e-6;
13237         }
13238
13239         function tree_add(d) {
13240           var x = +this._x.call(null, d),
13241               y = +this._y.call(null, d);
13242           return add(this.cover(x, y), x, y, d);
13243         }
13244
13245         function add(tree, x, y, d) {
13246           if (isNaN(x) || isNaN(y)) { return tree; } // ignore invalid points
13247
13248           var parent,
13249               node = tree._root,
13250               leaf = {data: d},
13251               x0 = tree._x0,
13252               y0 = tree._y0,
13253               x1 = tree._x1,
13254               y1 = tree._y1,
13255               xm,
13256               ym,
13257               xp,
13258               yp,
13259               right,
13260               bottom,
13261               i,
13262               j;
13263
13264           // If the tree is empty, initialize the root as a leaf.
13265           if (!node) { return tree._root = leaf, tree; }
13266
13267           // Find the existing leaf for the new point, or add it.
13268           while (node.length) {
13269             if (right = x >= (xm = (x0 + x1) / 2)) { x0 = xm; } else { x1 = xm; }
13270             if (bottom = y >= (ym = (y0 + y1) / 2)) { y0 = ym; } else { y1 = ym; }
13271             if (parent = node, !(node = node[i = bottom << 1 | right])) { return parent[i] = leaf, tree; }
13272           }
13273
13274           // Is the new point is exactly coincident with the existing point?
13275           xp = +tree._x.call(null, node.data);
13276           yp = +tree._y.call(null, node.data);
13277           if (x === xp && y === yp) { return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; }
13278
13279           // Otherwise, split the leaf node until the old and new point are separated.
13280           do {
13281             parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);
13282             if (right = x >= (xm = (x0 + x1) / 2)) { x0 = xm; } else { x1 = xm; }
13283             if (bottom = y >= (ym = (y0 + y1) / 2)) { y0 = ym; } else { y1 = ym; }
13284           } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));
13285           return parent[j] = node, parent[i] = leaf, tree;
13286         }
13287
13288         function addAll(data) {
13289           var d, i, n = data.length,
13290               x,
13291               y,
13292               xz = new Array(n),
13293               yz = new Array(n),
13294               x0 = Infinity,
13295               y0 = Infinity,
13296               x1 = -Infinity,
13297               y1 = -Infinity;
13298
13299           // Compute the points and their extent.
13300           for (i = 0; i < n; ++i) {
13301             if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) { continue; }
13302             xz[i] = x;
13303             yz[i] = y;
13304             if (x < x0) { x0 = x; }
13305             if (x > x1) { x1 = x; }
13306             if (y < y0) { y0 = y; }
13307             if (y > y1) { y1 = y; }
13308           }
13309
13310           // If there were no (valid) points, abort.
13311           if (x0 > x1 || y0 > y1) { return this; }
13312
13313           // Expand the tree to cover the new points.
13314           this.cover(x0, y0).cover(x1, y1);
13315
13316           // Add the new points.
13317           for (i = 0; i < n; ++i) {
13318             add(this, xz[i], yz[i], data[i]);
13319           }
13320
13321           return this;
13322         }
13323
13324         function tree_cover(x, y) {
13325           if (isNaN(x = +x) || isNaN(y = +y)) { return this; } // ignore invalid points
13326
13327           var x0 = this._x0,
13328               y0 = this._y0,
13329               x1 = this._x1,
13330               y1 = this._y1;
13331
13332           // If the quadtree has no extent, initialize them.
13333           // Integer extent are necessary so that if we later double the extent,
13334           // the existing quadrant boundaries don’t change due to floating point error!
13335           if (isNaN(x0)) {
13336             x1 = (x0 = Math.floor(x)) + 1;
13337             y1 = (y0 = Math.floor(y)) + 1;
13338           }
13339
13340           // Otherwise, double repeatedly to cover.
13341           else {
13342             var z = x1 - x0,
13343                 node = this._root,
13344                 parent,
13345                 i;
13346
13347             while (x0 > x || x >= x1 || y0 > y || y >= y1) {
13348               i = (y < y0) << 1 | (x < x0);
13349               parent = new Array(4), parent[i] = node, node = parent, z *= 2;
13350               switch (i) {
13351                 case 0: x1 = x0 + z, y1 = y0 + z; break;
13352                 case 1: x0 = x1 - z, y1 = y0 + z; break;
13353                 case 2: x1 = x0 + z, y0 = y1 - z; break;
13354                 case 3: x0 = x1 - z, y0 = y1 - z; break;
13355               }
13356             }
13357
13358             if (this._root && this._root.length) { this._root = node; }
13359           }
13360
13361           this._x0 = x0;
13362           this._y0 = y0;
13363           this._x1 = x1;
13364           this._y1 = y1;
13365           return this;
13366         }
13367
13368         function tree_data() {
13369           var data = [];
13370           this.visit(function(node) {
13371             if (!node.length) { do { data.push(node.data); } while (node = node.next) }
13372           });
13373           return data;
13374         }
13375
13376         function tree_extent(_) {
13377           return arguments.length
13378               ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])
13379               : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];
13380         }
13381
13382         function Quad(node, x0, y0, x1, y1) {
13383           this.node = node;
13384           this.x0 = x0;
13385           this.y0 = y0;
13386           this.x1 = x1;
13387           this.y1 = y1;
13388         }
13389
13390         function tree_find(x, y, radius) {
13391           var data,
13392               x0 = this._x0,
13393               y0 = this._y0,
13394               x1,
13395               y1,
13396               x2,
13397               y2,
13398               x3 = this._x1,
13399               y3 = this._y1,
13400               quads = [],
13401               node = this._root,
13402               q,
13403               i;
13404
13405           if (node) { quads.push(new Quad(node, x0, y0, x3, y3)); }
13406           if (radius == null) { radius = Infinity; }
13407           else {
13408             x0 = x - radius, y0 = y - radius;
13409             x3 = x + radius, y3 = y + radius;
13410             radius *= radius;
13411           }
13412
13413           while (q = quads.pop()) {
13414
13415             // Stop searching if this quadrant can’t contain a closer node.
13416             if (!(node = q.node)
13417                 || (x1 = q.x0) > x3
13418                 || (y1 = q.y0) > y3
13419                 || (x2 = q.x1) < x0
13420                 || (y2 = q.y1) < y0) { continue; }
13421
13422             // Bisect the current quadrant.
13423             if (node.length) {
13424               var xm = (x1 + x2) / 2,
13425                   ym = (y1 + y2) / 2;
13426
13427               quads.push(
13428                 new Quad(node[3], xm, ym, x2, y2),
13429                 new Quad(node[2], x1, ym, xm, y2),
13430                 new Quad(node[1], xm, y1, x2, ym),
13431                 new Quad(node[0], x1, y1, xm, ym)
13432               );
13433
13434               // Visit the closest quadrant first.
13435               if (i = (y >= ym) << 1 | (x >= xm)) {
13436                 q = quads[quads.length - 1];
13437                 quads[quads.length - 1] = quads[quads.length - 1 - i];
13438                 quads[quads.length - 1 - i] = q;
13439               }
13440             }
13441
13442             // Visit this point. (Visiting coincident points isn’t necessary!)
13443             else {
13444               var dx = x - +this._x.call(null, node.data),
13445                   dy = y - +this._y.call(null, node.data),
13446                   d2 = dx * dx + dy * dy;
13447               if (d2 < radius) {
13448                 var d = Math.sqrt(radius = d2);
13449                 x0 = x - d, y0 = y - d;
13450                 x3 = x + d, y3 = y + d;
13451                 data = node.data;
13452               }
13453             }
13454           }
13455
13456           return data;
13457         }
13458
13459         function tree_remove(d) {
13460           if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) { return this; } // ignore invalid points
13461
13462           var parent,
13463               node = this._root,
13464               retainer,
13465               previous,
13466               next,
13467               x0 = this._x0,
13468               y0 = this._y0,
13469               x1 = this._x1,
13470               y1 = this._y1,
13471               x,
13472               y,
13473               xm,
13474               ym,
13475               right,
13476               bottom,
13477               i,
13478               j;
13479
13480           // If the tree is empty, initialize the root as a leaf.
13481           if (!node) { return this; }
13482
13483           // Find the leaf node for the point.
13484           // While descending, also retain the deepest parent with a non-removed sibling.
13485           if (node.length) { while (true) {
13486             if (right = x >= (xm = (x0 + x1) / 2)) { x0 = xm; } else { x1 = xm; }
13487             if (bottom = y >= (ym = (y0 + y1) / 2)) { y0 = ym; } else { y1 = ym; }
13488             if (!(parent = node, node = node[i = bottom << 1 | right])) { return this; }
13489             if (!node.length) { break; }
13490             if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) { retainer = parent, j = i; }
13491           } }
13492
13493           // Find the point to remove.
13494           while (node.data !== d) { if (!(previous = node, node = node.next)) { return this; } }
13495           if (next = node.next) { delete node.next; }
13496
13497           // If there are multiple coincident points, remove just the point.
13498           if (previous) { return (next ? previous.next = next : delete previous.next), this; }
13499
13500           // If this is the root point, remove it.
13501           if (!parent) { return this._root = next, this; }
13502
13503           // Remove this leaf.
13504           next ? parent[i] = next : delete parent[i];
13505
13506           // If the parent now contains exactly one leaf, collapse superfluous parents.
13507           if ((node = parent[0] || parent[1] || parent[2] || parent[3])
13508               && node === (parent[3] || parent[2] || parent[1] || parent[0])
13509               && !node.length) {
13510             if (retainer) { retainer[j] = node; }
13511             else { this._root = node; }
13512           }
13513
13514           return this;
13515         }
13516
13517         function removeAll(data) {
13518           for (var i = 0, n = data.length; i < n; ++i) { this.remove(data[i]); }
13519           return this;
13520         }
13521
13522         function tree_root() {
13523           return this._root;
13524         }
13525
13526         function tree_size() {
13527           var size = 0;
13528           this.visit(function(node) {
13529             if (!node.length) { do { ++size; } while (node = node.next) }
13530           });
13531           return size;
13532         }
13533
13534         function tree_visit(callback) {
13535           var quads = [], q, node = this._root, child, x0, y0, x1, y1;
13536           if (node) { quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1)); }
13537           while (q = quads.pop()) {
13538             if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {
13539               var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
13540               if (child = node[3]) { quads.push(new Quad(child, xm, ym, x1, y1)); }
13541               if (child = node[2]) { quads.push(new Quad(child, x0, ym, xm, y1)); }
13542               if (child = node[1]) { quads.push(new Quad(child, xm, y0, x1, ym)); }
13543               if (child = node[0]) { quads.push(new Quad(child, x0, y0, xm, ym)); }
13544             }
13545           }
13546           return this;
13547         }
13548
13549         function tree_visitAfter(callback) {
13550           var quads = [], next = [], q;
13551           if (this._root) { quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1)); }
13552           while (q = quads.pop()) {
13553             var node = q.node;
13554             if (node.length) {
13555               var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
13556               if (child = node[0]) { quads.push(new Quad(child, x0, y0, xm, ym)); }
13557               if (child = node[1]) { quads.push(new Quad(child, xm, y0, x1, ym)); }
13558               if (child = node[2]) { quads.push(new Quad(child, x0, ym, xm, y1)); }
13559               if (child = node[3]) { quads.push(new Quad(child, xm, ym, x1, y1)); }
13560             }
13561             next.push(q);
13562           }
13563           while (q = next.pop()) {
13564             callback(q.node, q.x0, q.y0, q.x1, q.y1);
13565           }
13566           return this;
13567         }
13568
13569         function defaultX$1(d) {
13570           return d[0];
13571         }
13572
13573         function tree_x(_) {
13574           return arguments.length ? (this._x = _, this) : this._x;
13575         }
13576
13577         function defaultY$1(d) {
13578           return d[1];
13579         }
13580
13581         function tree_y(_) {
13582           return arguments.length ? (this._y = _, this) : this._y;
13583         }
13584
13585         function quadtree(nodes, x, y) {
13586           var tree = new Quadtree(x == null ? defaultX$1 : x, y == null ? defaultY$1 : y, NaN, NaN, NaN, NaN);
13587           return nodes == null ? tree : tree.addAll(nodes);
13588         }
13589
13590         function Quadtree(x, y, x0, y0, x1, y1) {
13591           this._x = x;
13592           this._y = y;
13593           this._x0 = x0;
13594           this._y0 = y0;
13595           this._x1 = x1;
13596           this._y1 = y1;
13597           this._root = undefined;
13598         }
13599
13600         function leaf_copy(leaf) {
13601           var copy = {data: leaf.data}, next = copy;
13602           while (leaf = leaf.next) { next = next.next = {data: leaf.data}; }
13603           return copy;
13604         }
13605
13606         var treeProto = quadtree.prototype = Quadtree.prototype;
13607
13608         treeProto.copy = function() {
13609           var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),
13610               node = this._root,
13611               nodes,
13612               child;
13613
13614           if (!node) { return copy; }
13615
13616           if (!node.length) { return copy._root = leaf_copy(node), copy; }
13617
13618           nodes = [{source: node, target: copy._root = new Array(4)}];
13619           while (node = nodes.pop()) {
13620             for (var i = 0; i < 4; ++i) {
13621               if (child = node.source[i]) {
13622                 if (child.length) { nodes.push({source: child, target: node.target[i] = new Array(4)}); }
13623                 else { node.target[i] = leaf_copy(child); }
13624               }
13625             }
13626           }
13627
13628           return copy;
13629         };
13630
13631         treeProto.add = tree_add;
13632         treeProto.addAll = addAll;
13633         treeProto.cover = tree_cover;
13634         treeProto.data = tree_data;
13635         treeProto.extent = tree_extent;
13636         treeProto.find = tree_find;
13637         treeProto.remove = tree_remove;
13638         treeProto.removeAll = removeAll;
13639         treeProto.root = tree_root;
13640         treeProto.size = tree_size;
13641         treeProto.visit = tree_visit;
13642         treeProto.visitAfter = tree_visitAfter;
13643         treeProto.x = tree_x;
13644         treeProto.y = tree_y;
13645
13646         function x(d) {
13647           return d.x + d.vx;
13648         }
13649
13650         function y(d) {
13651           return d.y + d.vy;
13652         }
13653
13654         function collide(radius) {
13655           var nodes,
13656               radii,
13657               strength = 1,
13658               iterations = 1;
13659
13660           if (typeof radius !== "function") { radius = constant$7(radius == null ? 1 : +radius); }
13661
13662           function force() {
13663             var i, n = nodes.length,
13664                 tree,
13665                 node,
13666                 xi,
13667                 yi,
13668                 ri,
13669                 ri2;
13670
13671             for (var k = 0; k < iterations; ++k) {
13672               tree = quadtree(nodes, x, y).visitAfter(prepare);
13673               for (i = 0; i < n; ++i) {
13674                 node = nodes[i];
13675                 ri = radii[node.index], ri2 = ri * ri;
13676                 xi = node.x + node.vx;
13677                 yi = node.y + node.vy;
13678                 tree.visit(apply);
13679               }
13680             }
13681
13682             function apply(quad, x0, y0, x1, y1) {
13683               var data = quad.data, rj = quad.r, r = ri + rj;
13684               if (data) {
13685                 if (data.index > node.index) {
13686                   var x = xi - data.x - data.vx,
13687                       y = yi - data.y - data.vy,
13688                       l = x * x + y * y;
13689                   if (l < r * r) {
13690                     if (x === 0) { x = jiggle(), l += x * x; }
13691                     if (y === 0) { y = jiggle(), l += y * y; }
13692                     l = (r - (l = Math.sqrt(l))) / l * strength;
13693                     node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));
13694                     node.vy += (y *= l) * r;
13695                     data.vx -= x * (r = 1 - r);
13696                     data.vy -= y * r;
13697                   }
13698                 }
13699                 return;
13700               }
13701               return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;
13702             }
13703           }
13704
13705           function prepare(quad) {
13706             if (quad.data) { return quad.r = radii[quad.data.index]; }
13707             for (var i = quad.r = 0; i < 4; ++i) {
13708               if (quad[i] && quad[i].r > quad.r) {
13709                 quad.r = quad[i].r;
13710               }
13711             }
13712           }
13713
13714           function initialize() {
13715             if (!nodes) { return; }
13716             var i, n = nodes.length, node;
13717             radii = new Array(n);
13718             for (i = 0; i < n; ++i) { node = nodes[i], radii[node.index] = +radius(node, i, nodes); }
13719           }
13720
13721           force.initialize = function(_) {
13722             nodes = _;
13723             initialize();
13724           };
13725
13726           force.iterations = function(_) {
13727             return arguments.length ? (iterations = +_, force) : iterations;
13728           };
13729
13730           force.strength = function(_) {
13731             return arguments.length ? (strength = +_, force) : strength;
13732           };
13733
13734           force.radius = function(_) {
13735             return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius;
13736           };
13737
13738           return force;
13739         }
13740
13741         function index(d) {
13742           return d.index;
13743         }
13744
13745         function find(nodeById, nodeId) {
13746           var node = nodeById.get(nodeId);
13747           if (!node) { throw new Error("missing: " + nodeId); }
13748           return node;
13749         }
13750
13751         function link(links) {
13752           var id = index,
13753               strength = defaultStrength,
13754               strengths,
13755               distance = constant$7(30),
13756               distances,
13757               nodes,
13758               count,
13759               bias,
13760               iterations = 1;
13761
13762           if (links == null) { links = []; }
13763
13764           function defaultStrength(link) {
13765             return 1 / Math.min(count[link.source.index], count[link.target.index]);
13766           }
13767
13768           function force(alpha) {
13769             for (var k = 0, n = links.length; k < iterations; ++k) {
13770               for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {
13771                 link = links[i], source = link.source, target = link.target;
13772                 x = target.x + target.vx - source.x - source.vx || jiggle();
13773                 y = target.y + target.vy - source.y - source.vy || jiggle();
13774                 l = Math.sqrt(x * x + y * y);
13775                 l = (l - distances[i]) / l * alpha * strengths[i];
13776                 x *= l, y *= l;
13777                 target.vx -= x * (b = bias[i]);
13778                 target.vy -= y * b;
13779                 source.vx += x * (b = 1 - b);
13780                 source.vy += y * b;
13781               }
13782             }
13783           }
13784
13785           function initialize() {
13786             if (!nodes) { return; }
13787
13788             var i,
13789                 n = nodes.length,
13790                 m = links.length,
13791                 nodeById = map$3(nodes, id),
13792                 link;
13793
13794             for (i = 0, count = new Array(n); i < m; ++i) {
13795               link = links[i], link.index = i;
13796               if (typeof link.source !== "object") { link.source = find(nodeById, link.source); }
13797               if (typeof link.target !== "object") { link.target = find(nodeById, link.target); }
13798               count[link.source.index] = (count[link.source.index] || 0) + 1;
13799               count[link.target.index] = (count[link.target.index] || 0) + 1;
13800             }
13801
13802             for (i = 0, bias = new Array(m); i < m; ++i) {
13803               link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);
13804             }
13805
13806             strengths = new Array(m), initializeStrength();
13807             distances = new Array(m), initializeDistance();
13808           }
13809
13810           function initializeStrength() {
13811             if (!nodes) { return; }
13812
13813             for (var i = 0, n = links.length; i < n; ++i) {
13814               strengths[i] = +strength(links[i], i, links);
13815             }
13816           }
13817
13818           function initializeDistance() {
13819             if (!nodes) { return; }
13820
13821             for (var i = 0, n = links.length; i < n; ++i) {
13822               distances[i] = +distance(links[i], i, links);
13823             }
13824           }
13825
13826           force.initialize = function(_) {
13827             nodes = _;
13828             initialize();
13829           };
13830
13831           force.links = function(_) {
13832             return arguments.length ? (links = _, initialize(), force) : links;
13833           };
13834
13835           force.id = function(_) {
13836             return arguments.length ? (id = _, force) : id;
13837           };
13838
13839           force.iterations = function(_) {
13840             return arguments.length ? (iterations = +_, force) : iterations;
13841           };
13842
13843           force.strength = function(_) {
13844             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initializeStrength(), force) : strength;
13845           };
13846
13847           force.distance = function(_) {
13848             return arguments.length ? (distance = typeof _ === "function" ? _ : constant$7(+_), initializeDistance(), force) : distance;
13849           };
13850
13851           return force;
13852         }
13853
13854         function x$1(d) {
13855           return d.x;
13856         }
13857
13858         function y$1(d) {
13859           return d.y;
13860         }
13861
13862         var initialRadius = 10,
13863             initialAngle = Math.PI * (3 - Math.sqrt(5));
13864
13865         function simulation(nodes) {
13866           var simulation,
13867               alpha = 1,
13868               alphaMin = 0.001,
13869               alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),
13870               alphaTarget = 0,
13871               velocityDecay = 0.6,
13872               forces = map$3(),
13873               stepper = timer(step),
13874               event = dispatch("tick", "end");
13875
13876           if (nodes == null) { nodes = []; }
13877
13878           function step() {
13879             tick();
13880             event.call("tick", simulation);
13881             if (alpha < alphaMin) {
13882               stepper.stop();
13883               event.call("end", simulation);
13884             }
13885           }
13886
13887           function tick(iterations) {
13888             var i, n = nodes.length, node;
13889
13890             if (iterations === undefined) { iterations = 1; }
13891
13892             for (var k = 0; k < iterations; ++k) {
13893               alpha += (alphaTarget - alpha) * alphaDecay;
13894
13895               forces.each(function (force) {
13896                 force(alpha);
13897               });
13898
13899               for (i = 0; i < n; ++i) {
13900                 node = nodes[i];
13901                 if (node.fx == null) { node.x += node.vx *= velocityDecay; }
13902                 else { node.x = node.fx, node.vx = 0; }
13903                 if (node.fy == null) { node.y += node.vy *= velocityDecay; }
13904                 else { node.y = node.fy, node.vy = 0; }
13905               }
13906             }
13907
13908             return simulation;
13909           }
13910
13911           function initializeNodes() {
13912             for (var i = 0, n = nodes.length, node; i < n; ++i) {
13913               node = nodes[i], node.index = i;
13914               if (node.fx != null) { node.x = node.fx; }
13915               if (node.fy != null) { node.y = node.fy; }
13916               if (isNaN(node.x) || isNaN(node.y)) {
13917                 var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;
13918                 node.x = radius * Math.cos(angle);
13919                 node.y = radius * Math.sin(angle);
13920               }
13921               if (isNaN(node.vx) || isNaN(node.vy)) {
13922                 node.vx = node.vy = 0;
13923               }
13924             }
13925           }
13926
13927           function initializeForce(force) {
13928             if (force.initialize) { force.initialize(nodes); }
13929             return force;
13930           }
13931
13932           initializeNodes();
13933
13934           return simulation = {
13935             tick: tick,
13936
13937             restart: function() {
13938               return stepper.restart(step), simulation;
13939             },
13940
13941             stop: function() {
13942               return stepper.stop(), simulation;
13943             },
13944
13945             nodes: function(_) {
13946               return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;
13947             },
13948
13949             alpha: function(_) {
13950               return arguments.length ? (alpha = +_, simulation) : alpha;
13951             },
13952
13953             alphaMin: function(_) {
13954               return arguments.length ? (alphaMin = +_, simulation) : alphaMin;
13955             },
13956
13957             alphaDecay: function(_) {
13958               return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;
13959             },
13960
13961             alphaTarget: function(_) {
13962               return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;
13963             },
13964
13965             velocityDecay: function(_) {
13966               return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;
13967             },
13968
13969             force: function(name, _) {
13970               return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);
13971             },
13972
13973             find: function(x, y, radius) {
13974               var i = 0,
13975                   n = nodes.length,
13976                   dx,
13977                   dy,
13978                   d2,
13979                   node,
13980                   closest;
13981
13982               if (radius == null) { radius = Infinity; }
13983               else { radius *= radius; }
13984
13985               for (i = 0; i < n; ++i) {
13986                 node = nodes[i];
13987                 dx = x - node.x;
13988                 dy = y - node.y;
13989                 d2 = dx * dx + dy * dy;
13990                 if (d2 < radius) { closest = node, radius = d2; }
13991               }
13992
13993               return closest;
13994             },
13995
13996             on: function(name, _) {
13997               return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);
13998             }
13999           };
14000         }
14001
14002         function manyBody() {
14003           var nodes,
14004               node,
14005               alpha,
14006               strength = constant$7(-30),
14007               strengths,
14008               distanceMin2 = 1,
14009               distanceMax2 = Infinity,
14010               theta2 = 0.81;
14011
14012           function force(_) {
14013             var i, n = nodes.length, tree = quadtree(nodes, x$1, y$1).visitAfter(accumulate);
14014             for (alpha = _, i = 0; i < n; ++i) { node = nodes[i], tree.visit(apply); }
14015           }
14016
14017           function initialize() {
14018             if (!nodes) { return; }
14019             var i, n = nodes.length, node;
14020             strengths = new Array(n);
14021             for (i = 0; i < n; ++i) { node = nodes[i], strengths[node.index] = +strength(node, i, nodes); }
14022           }
14023
14024           function accumulate(quad) {
14025             var strength = 0, q, c, weight = 0, x, y, i;
14026
14027             // For internal nodes, accumulate forces from child quadrants.
14028             if (quad.length) {
14029               for (x = y = i = 0; i < 4; ++i) {
14030                 if ((q = quad[i]) && (c = Math.abs(q.value))) {
14031                   strength += q.value, weight += c, x += c * q.x, y += c * q.y;
14032                 }
14033               }
14034               quad.x = x / weight;
14035               quad.y = y / weight;
14036             }
14037
14038             // For leaf nodes, accumulate forces from coincident quadrants.
14039             else {
14040               q = quad;
14041               q.x = q.data.x;
14042               q.y = q.data.y;
14043               do { strength += strengths[q.data.index]; }
14044               while (q = q.next);
14045             }
14046
14047             quad.value = strength;
14048           }
14049
14050           function apply(quad, x1, _, x2) {
14051             if (!quad.value) { return true; }
14052
14053             var x = quad.x - node.x,
14054                 y = quad.y - node.y,
14055                 w = x2 - x1,
14056                 l = x * x + y * y;
14057
14058             // Apply the Barnes-Hut approximation if possible.
14059             // Limit forces for very close nodes; randomize direction if coincident.
14060             if (w * w / theta2 < l) {
14061               if (l < distanceMax2) {
14062                 if (x === 0) { x = jiggle(), l += x * x; }
14063                 if (y === 0) { y = jiggle(), l += y * y; }
14064                 if (l < distanceMin2) { l = Math.sqrt(distanceMin2 * l); }
14065                 node.vx += x * quad.value * alpha / l;
14066                 node.vy += y * quad.value * alpha / l;
14067               }
14068               return true;
14069             }
14070
14071             // Otherwise, process points directly.
14072             else if (quad.length || l >= distanceMax2) { return; }
14073
14074             // Limit forces for very close nodes; randomize direction if coincident.
14075             if (quad.data !== node || quad.next) {
14076               if (x === 0) { x = jiggle(), l += x * x; }
14077               if (y === 0) { y = jiggle(), l += y * y; }
14078               if (l < distanceMin2) { l = Math.sqrt(distanceMin2 * l); }
14079             }
14080
14081             do { if (quad.data !== node) {
14082               w = strengths[quad.data.index] * alpha / l;
14083               node.vx += x * w;
14084               node.vy += y * w;
14085             } } while (quad = quad.next);
14086           }
14087
14088           force.initialize = function(_) {
14089             nodes = _;
14090             initialize();
14091           };
14092
14093           force.strength = function(_) {
14094             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
14095           };
14096
14097           force.distanceMin = function(_) {
14098             return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);
14099           };
14100
14101           force.distanceMax = function(_) {
14102             return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);
14103           };
14104
14105           force.theta = function(_) {
14106             return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);
14107           };
14108
14109           return force;
14110         }
14111
14112         function radial(radius, x, y) {
14113           var nodes,
14114               strength = constant$7(0.1),
14115               strengths,
14116               radiuses;
14117
14118           if (typeof radius !== "function") { radius = constant$7(+radius); }
14119           if (x == null) { x = 0; }
14120           if (y == null) { y = 0; }
14121
14122           function force(alpha) {
14123             for (var i = 0, n = nodes.length; i < n; ++i) {
14124               var node = nodes[i],
14125                   dx = node.x - x || 1e-6,
14126                   dy = node.y - y || 1e-6,
14127                   r = Math.sqrt(dx * dx + dy * dy),
14128                   k = (radiuses[i] - r) * strengths[i] * alpha / r;
14129               node.vx += dx * k;
14130               node.vy += dy * k;
14131             }
14132           }
14133
14134           function initialize() {
14135             if (!nodes) { return; }
14136             var i, n = nodes.length;
14137             strengths = new Array(n);
14138             radiuses = new Array(n);
14139             for (i = 0; i < n; ++i) {
14140               radiuses[i] = +radius(nodes[i], i, nodes);
14141               strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);
14142             }
14143           }
14144
14145           force.initialize = function(_) {
14146             nodes = _, initialize();
14147           };
14148
14149           force.strength = function(_) {
14150             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
14151           };
14152
14153           force.radius = function(_) {
14154             return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius;
14155           };
14156
14157           force.x = function(_) {
14158             return arguments.length ? (x = +_, force) : x;
14159           };
14160
14161           force.y = function(_) {
14162             return arguments.length ? (y = +_, force) : y;
14163           };
14164
14165           return force;
14166         }
14167
14168         function x$2(x) {
14169           var strength = constant$7(0.1),
14170               nodes,
14171               strengths,
14172               xz;
14173
14174           if (typeof x !== "function") { x = constant$7(x == null ? 0 : +x); }
14175
14176           function force(alpha) {
14177             for (var i = 0, n = nodes.length, node; i < n; ++i) {
14178               node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;
14179             }
14180           }
14181
14182           function initialize() {
14183             if (!nodes) { return; }
14184             var i, n = nodes.length;
14185             strengths = new Array(n);
14186             xz = new Array(n);
14187             for (i = 0; i < n; ++i) {
14188               strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
14189             }
14190           }
14191
14192           force.initialize = function(_) {
14193             nodes = _;
14194             initialize();
14195           };
14196
14197           force.strength = function(_) {
14198             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
14199           };
14200
14201           force.x = function(_) {
14202             return arguments.length ? (x = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : x;
14203           };
14204
14205           return force;
14206         }
14207
14208         function y$2(y) {
14209           var strength = constant$7(0.1),
14210               nodes,
14211               strengths,
14212               yz;
14213
14214           if (typeof y !== "function") { y = constant$7(y == null ? 0 : +y); }
14215
14216           function force(alpha) {
14217             for (var i = 0, n = nodes.length, node; i < n; ++i) {
14218               node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;
14219             }
14220           }
14221
14222           function initialize() {
14223             if (!nodes) { return; }
14224             var i, n = nodes.length;
14225             strengths = new Array(n);
14226             yz = new Array(n);
14227             for (i = 0; i < n; ++i) {
14228               strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
14229             }
14230           }
14231
14232           force.initialize = function(_) {
14233             nodes = _;
14234             initialize();
14235           };
14236
14237           force.strength = function(_) {
14238             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
14239           };
14240
14241           force.y = function(_) {
14242             return arguments.length ? (y = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : y;
14243           };
14244
14245           return force;
14246         }
14247
14248         // Computes the decimal coefficient and exponent of the specified number x with
14249         // significant digits p, where x is positive and p is in [1, 21] or undefined.
14250         // For example, formatDecimal(1.23) returns ["123", 0].
14251         function formatDecimal(x, p) {
14252           if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) { return null; } // NaN, ±Infinity
14253           var i, coefficient = x.slice(0, i);
14254
14255           // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
14256           // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
14257           return [
14258             coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
14259             +x.slice(i + 1)
14260           ];
14261         }
14262
14263         function exponent$1(x) {
14264           return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;
14265         }
14266
14267         function formatGroup(grouping, thousands) {
14268           return function(value, width) {
14269             var i = value.length,
14270                 t = [],
14271                 j = 0,
14272                 g = grouping[0],
14273                 length = 0;
14274
14275             while (i > 0 && g > 0) {
14276               if (length + g + 1 > width) { g = Math.max(1, width - length); }
14277               t.push(value.substring(i -= g, i + g));
14278               if ((length += g + 1) > width) { break; }
14279               g = grouping[j = (j + 1) % grouping.length];
14280             }
14281
14282             return t.reverse().join(thousands);
14283           };
14284         }
14285
14286         function formatNumerals(numerals) {
14287           return function(value) {
14288             return value.replace(/[0-9]/g, function(i) {
14289               return numerals[+i];
14290             });
14291           };
14292         }
14293
14294         // [[fill]align][sign][symbol][0][width][,][.precision][~][type]
14295         var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
14296
14297         function formatSpecifier(specifier) {
14298           if (!(match = re.exec(specifier))) { throw new Error("invalid format: " + specifier); }
14299           var match;
14300           return new FormatSpecifier({
14301             fill: match[1],
14302             align: match[2],
14303             sign: match[3],
14304             symbol: match[4],
14305             zero: match[5],
14306             width: match[6],
14307             comma: match[7],
14308             precision: match[8] && match[8].slice(1),
14309             trim: match[9],
14310             type: match[10]
14311           });
14312         }
14313
14314         formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
14315
14316         function FormatSpecifier(specifier) {
14317           this.fill = specifier.fill === undefined ? " " : specifier.fill + "";
14318           this.align = specifier.align === undefined ? ">" : specifier.align + "";
14319           this.sign = specifier.sign === undefined ? "-" : specifier.sign + "";
14320           this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + "";
14321           this.zero = !!specifier.zero;
14322           this.width = specifier.width === undefined ? undefined : +specifier.width;
14323           this.comma = !!specifier.comma;
14324           this.precision = specifier.precision === undefined ? undefined : +specifier.precision;
14325           this.trim = !!specifier.trim;
14326           this.type = specifier.type === undefined ? "" : specifier.type + "";
14327         }
14328
14329         FormatSpecifier.prototype.toString = function() {
14330           return this.fill
14331               + this.align
14332               + this.sign
14333               + this.symbol
14334               + (this.zero ? "0" : "")
14335               + (this.width === undefined ? "" : Math.max(1, this.width | 0))
14336               + (this.comma ? "," : "")
14337               + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0))
14338               + (this.trim ? "~" : "")
14339               + this.type;
14340         };
14341
14342         // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.
14343         function formatTrim(s) {
14344           out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {
14345             switch (s[i]) {
14346               case ".": i0 = i1 = i; break;
14347               case "0": if (i0 === 0) { i0 = i; } i1 = i; break;
14348               default: if (!+s[i]) { break out; } if (i0 > 0) { i0 = 0; } break;
14349             }
14350           }
14351           return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;
14352         }
14353
14354         var prefixExponent;
14355
14356         function formatPrefixAuto(x, p) {
14357           var d = formatDecimal(x, p);
14358           if (!d) { return x + ""; }
14359           var coefficient = d[0],
14360               exponent = d[1],
14361               i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
14362               n = coefficient.length;
14363           return i === n ? coefficient
14364               : i > n ? coefficient + new Array(i - n + 1).join("0")
14365               : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
14366               : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!
14367         }
14368
14369         function formatRounded(x, p) {
14370           var d = formatDecimal(x, p);
14371           if (!d) { return x + ""; }
14372           var coefficient = d[0],
14373               exponent = d[1];
14374           return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
14375               : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
14376               : coefficient + new Array(exponent - coefficient.length + 2).join("0");
14377         }
14378
14379         var formatTypes = {
14380           "%": function(x, p) { return (x * 100).toFixed(p); },
14381           "b": function(x) { return Math.round(x).toString(2); },
14382           "c": function(x) { return x + ""; },
14383           "d": function(x) { return Math.round(x).toString(10); },
14384           "e": function(x, p) { return x.toExponential(p); },
14385           "f": function(x, p) { return x.toFixed(p); },
14386           "g": function(x, p) { return x.toPrecision(p); },
14387           "o": function(x) { return Math.round(x).toString(8); },
14388           "p": function(x, p) { return formatRounded(x * 100, p); },
14389           "r": formatRounded,
14390           "s": formatPrefixAuto,
14391           "X": function(x) { return Math.round(x).toString(16).toUpperCase(); },
14392           "x": function(x) { return Math.round(x).toString(16); }
14393         };
14394
14395         function identity$3(x) {
14396           return x;
14397         }
14398
14399         var map$4 = Array.prototype.map,
14400             prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];
14401
14402         function formatLocale(locale) {
14403           var group = locale.grouping === undefined || locale.thousands === undefined ? identity$3 : formatGroup(map$4.call(locale.grouping, Number), locale.thousands + ""),
14404               currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "",
14405               currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "",
14406               decimal = locale.decimal === undefined ? "." : locale.decimal + "",
14407               numerals = locale.numerals === undefined ? identity$3 : formatNumerals(map$4.call(locale.numerals, String)),
14408               percent = locale.percent === undefined ? "%" : locale.percent + "",
14409               minus = locale.minus === undefined ? "-" : locale.minus + "",
14410               nan = locale.nan === undefined ? "NaN" : locale.nan + "";
14411
14412           function newFormat(specifier) {
14413             specifier = formatSpecifier(specifier);
14414
14415             var fill = specifier.fill,
14416                 align = specifier.align,
14417                 sign = specifier.sign,
14418                 symbol = specifier.symbol,
14419                 zero = specifier.zero,
14420                 width = specifier.width,
14421                 comma = specifier.comma,
14422                 precision = specifier.precision,
14423                 trim = specifier.trim,
14424                 type = specifier.type;
14425
14426             // The "n" type is an alias for ",g".
14427             if (type === "n") { comma = true, type = "g"; }
14428
14429             // The "" type, and any invalid type, is an alias for ".12~g".
14430             else if (!formatTypes[type]) { precision === undefined && (precision = 12), trim = true, type = "g"; }
14431
14432             // If zero fill is specified, padding goes after sign and before digits.
14433             if (zero || (fill === "0" && align === "=")) { zero = true, fill = "0", align = "="; }
14434
14435             // Compute the prefix and suffix.
14436             // For SI-prefix, the suffix is lazily computed.
14437             var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
14438                 suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "";
14439
14440             // What format function should we use?
14441             // Is this an integer type?
14442             // Can this type generate exponential notation?
14443             var formatType = formatTypes[type],
14444                 maybeSuffix = /[defgprs%]/.test(type);
14445
14446             // Set the default precision if not specified,
14447             // or clamp the specified precision to the supported range.
14448             // For significant precision, it must be in [1, 21].
14449             // For fixed precision, it must be in [0, 20].
14450             precision = precision === undefined ? 6
14451                 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
14452                 : Math.max(0, Math.min(20, precision));
14453
14454             function format(value) {
14455               var valuePrefix = prefix,
14456                   valueSuffix = suffix,
14457                   i, n, c;
14458
14459               if (type === "c") {
14460                 valueSuffix = formatType(value) + valueSuffix;
14461                 value = "";
14462               } else {
14463                 value = +value;
14464
14465                 // Perform the initial formatting.
14466                 var valueNegative = value < 0;
14467                 value = isNaN(value) ? nan : formatType(Math.abs(value), precision);
14468
14469                 // Trim insignificant zeros.
14470                 if (trim) { value = formatTrim(value); }
14471
14472                 // If a negative value rounds to zero during formatting, treat as positive.
14473                 if (valueNegative && +value === 0) { valueNegative = false; }
14474
14475                 // Compute the prefix and suffix.
14476                 valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
14477
14478                 valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
14479
14480                 // Break the formatted value into the integer “value” part that can be
14481                 // grouped, and fractional or exponential “suffix” part that is not.
14482                 if (maybeSuffix) {
14483                   i = -1, n = value.length;
14484                   while (++i < n) {
14485                     if (c = value.charCodeAt(i), 48 > c || c > 57) {
14486                       valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
14487                       value = value.slice(0, i);
14488                       break;
14489                     }
14490                   }
14491                 }
14492               }
14493
14494               // If the fill character is not "0", grouping is applied before padding.
14495               if (comma && !zero) { value = group(value, Infinity); }
14496
14497               // Compute the padding.
14498               var length = valuePrefix.length + value.length + valueSuffix.length,
14499                   padding = length < width ? new Array(width - length + 1).join(fill) : "";
14500
14501               // If the fill character is "0", grouping is applied after padding.
14502               if (comma && zero) { value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; }
14503
14504               // Reconstruct the final output based on the desired alignment.
14505               switch (align) {
14506                 case "<": value = valuePrefix + value + valueSuffix + padding; break;
14507                 case "=": value = valuePrefix + padding + value + valueSuffix; break;
14508                 case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;
14509                 default: value = padding + valuePrefix + value + valueSuffix; break;
14510               }
14511
14512               return numerals(value);
14513             }
14514
14515             format.toString = function() {
14516               return specifier + "";
14517             };
14518
14519             return format;
14520           }
14521
14522           function formatPrefix(specifier, value) {
14523             var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
14524                 e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3,
14525                 k = Math.pow(10, -e),
14526                 prefix = prefixes[8 + e / 3];
14527             return function(value) {
14528               return f(k * value) + prefix;
14529             };
14530           }
14531
14532           return {
14533             format: newFormat,
14534             formatPrefix: formatPrefix
14535           };
14536         }
14537
14538         var locale;
14539         var format;
14540         var formatPrefix;
14541
14542         defaultLocale({
14543           decimal: ".",
14544           thousands: ",",
14545           grouping: [3],
14546           currency: ["$", ""],
14547           minus: "-"
14548         });
14549
14550         function defaultLocale(definition) {
14551           locale = formatLocale(definition);
14552           format = locale.format;
14553           formatPrefix = locale.formatPrefix;
14554           return locale;
14555         }
14556
14557         function precisionFixed(step) {
14558           return Math.max(0, -exponent$1(Math.abs(step)));
14559         }
14560
14561         function precisionPrefix(step, value) {
14562           return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step)));
14563         }
14564
14565         function precisionRound(step, max) {
14566           step = Math.abs(step), max = Math.abs(max) - step;
14567           return Math.max(0, exponent$1(max) - exponent$1(step)) + 1;
14568         }
14569
14570         // Adds floating point numbers with twice the normal precision.
14571         // Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and
14572         // Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)
14573         // 305–363 (1997).
14574         // Code adapted from GeographicLib by Charles F. F. Karney,
14575         // http://geographiclib.sourceforge.net/
14576
14577         function adder() {
14578           return new Adder;
14579         }
14580
14581         function Adder() {
14582           this.reset();
14583         }
14584
14585         Adder.prototype = {
14586           constructor: Adder,
14587           reset: function() {
14588             this.s = // rounded value
14589             this.t = 0; // exact error
14590           },
14591           add: function(y) {
14592             add$1(temp, y, this.t);
14593             add$1(this, temp.s, this.s);
14594             if (this.s) { this.t += temp.t; }
14595             else { this.s = temp.t; }
14596           },
14597           valueOf: function() {
14598             return this.s;
14599           }
14600         };
14601
14602         var temp = new Adder;
14603
14604         function add$1(adder, a, b) {
14605           var x = adder.s = a + b,
14606               bv = x - a,
14607               av = x - bv;
14608           adder.t = (a - av) + (b - bv);
14609         }
14610
14611         var epsilon$2 = 1e-6;
14612         var epsilon2$1 = 1e-12;
14613         var pi$3 = Math.PI;
14614         var halfPi$2 = pi$3 / 2;
14615         var quarterPi = pi$3 / 4;
14616         var tau$3 = pi$3 * 2;
14617
14618         var degrees$1 = 180 / pi$3;
14619         var radians = pi$3 / 180;
14620
14621         var abs$2 = Math.abs;
14622         var atan = Math.atan;
14623         var atan2 = Math.atan2;
14624         var cos$1 = Math.cos;
14625         var ceil = Math.ceil;
14626         var exp = Math.exp;
14627         var log = Math.log;
14628         var pow = Math.pow;
14629         var sin$1 = Math.sin;
14630         var sign$2 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };
14631         var sqrt = Math.sqrt;
14632         var tan = Math.tan;
14633
14634         function acos(x) {
14635           return x > 1 ? 0 : x < -1 ? pi$3 : Math.acos(x);
14636         }
14637
14638         function asin(x) {
14639           return x > 1 ? halfPi$2 : x < -1 ? -halfPi$2 : Math.asin(x);
14640         }
14641
14642         function haversin(x) {
14643           return (x = sin$1(x / 2)) * x;
14644         }
14645
14646         function noop$4() {}
14647
14648         function streamGeometry(geometry, stream) {
14649           if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {
14650             streamGeometryType[geometry.type](geometry, stream);
14651           }
14652         }
14653
14654         var streamObjectType = {
14655           Feature: function(object, stream) {
14656             streamGeometry(object.geometry, stream);
14657           },
14658           FeatureCollection: function(object, stream) {
14659             var features = object.features, i = -1, n = features.length;
14660             while (++i < n) { streamGeometry(features[i].geometry, stream); }
14661           }
14662         };
14663
14664         var streamGeometryType = {
14665           Sphere: function(object, stream) {
14666             stream.sphere();
14667           },
14668           Point: function(object, stream) {
14669             object = object.coordinates;
14670             stream.point(object[0], object[1], object[2]);
14671           },
14672           MultiPoint: function(object, stream) {
14673             var coordinates = object.coordinates, i = -1, n = coordinates.length;
14674             while (++i < n) { object = coordinates[i], stream.point(object[0], object[1], object[2]); }
14675           },
14676           LineString: function(object, stream) {
14677             streamLine(object.coordinates, stream, 0);
14678           },
14679           MultiLineString: function(object, stream) {
14680             var coordinates = object.coordinates, i = -1, n = coordinates.length;
14681             while (++i < n) { streamLine(coordinates[i], stream, 0); }
14682           },
14683           Polygon: function(object, stream) {
14684             streamPolygon(object.coordinates, stream);
14685           },
14686           MultiPolygon: function(object, stream) {
14687             var coordinates = object.coordinates, i = -1, n = coordinates.length;
14688             while (++i < n) { streamPolygon(coordinates[i], stream); }
14689           },
14690           GeometryCollection: function(object, stream) {
14691             var geometries = object.geometries, i = -1, n = geometries.length;
14692             while (++i < n) { streamGeometry(geometries[i], stream); }
14693           }
14694         };
14695
14696         function streamLine(coordinates, stream, closed) {
14697           var i = -1, n = coordinates.length - closed, coordinate;
14698           stream.lineStart();
14699           while (++i < n) { coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); }
14700           stream.lineEnd();
14701         }
14702
14703         function streamPolygon(coordinates, stream) {
14704           var i = -1, n = coordinates.length;
14705           stream.polygonStart();
14706           while (++i < n) { streamLine(coordinates[i], stream, 1); }
14707           stream.polygonEnd();
14708         }
14709
14710         function d3_geoStream(object, stream) {
14711           if (object && streamObjectType.hasOwnProperty(object.type)) {
14712             streamObjectType[object.type](object, stream);
14713           } else {
14714             streamGeometry(object, stream);
14715           }
14716         }
14717
14718         var areaRingSum = adder();
14719
14720         var areaSum = adder(),
14721             lambda00,
14722             phi00,
14723             lambda0,
14724             cosPhi0,
14725             sinPhi0;
14726
14727         var areaStream = {
14728           point: noop$4,
14729           lineStart: noop$4,
14730           lineEnd: noop$4,
14731           polygonStart: function() {
14732             areaRingSum.reset();
14733             areaStream.lineStart = areaRingStart;
14734             areaStream.lineEnd = areaRingEnd;
14735           },
14736           polygonEnd: function() {
14737             var areaRing = +areaRingSum;
14738             areaSum.add(areaRing < 0 ? tau$3 + areaRing : areaRing);
14739             this.lineStart = this.lineEnd = this.point = noop$4;
14740           },
14741           sphere: function() {
14742             areaSum.add(tau$3);
14743           }
14744         };
14745
14746         function areaRingStart() {
14747           areaStream.point = areaPointFirst;
14748         }
14749
14750         function areaRingEnd() {
14751           areaPoint(lambda00, phi00);
14752         }
14753
14754         function areaPointFirst(lambda, phi) {
14755           areaStream.point = areaPoint;
14756           lambda00 = lambda, phi00 = phi;
14757           lambda *= radians, phi *= radians;
14758           lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);
14759         }
14760
14761         function areaPoint(lambda, phi) {
14762           lambda *= radians, phi *= radians;
14763           phi = phi / 2 + quarterPi; // half the angular distance from south pole
14764
14765           // Spherical excess E for a spherical triangle with vertices: south pole,
14766           // previous point, current point.  Uses a formula derived from Cagnoli’s
14767           // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).
14768           var dLambda = lambda - lambda0,
14769               sdLambda = dLambda >= 0 ? 1 : -1,
14770               adLambda = sdLambda * dLambda,
14771               cosPhi = cos$1(phi),
14772               sinPhi = sin$1(phi),
14773               k = sinPhi0 * sinPhi,
14774               u = cosPhi0 * cosPhi + k * cos$1(adLambda),
14775               v = k * sdLambda * sin$1(adLambda);
14776           areaRingSum.add(atan2(v, u));
14777
14778           // Advance the previous points.
14779           lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;
14780         }
14781
14782         function d3_geoArea(object) {
14783           areaSum.reset();
14784           d3_geoStream(object, areaStream);
14785           return areaSum * 2;
14786         }
14787
14788         function spherical(cartesian) {
14789           return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];
14790         }
14791
14792         function cartesian(spherical) {
14793           var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);
14794           return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];
14795         }
14796
14797         function cartesianDot(a, b) {
14798           return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
14799         }
14800
14801         function cartesianCross(a, b) {
14802           return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
14803         }
14804
14805         // TODO return a
14806         function cartesianAddInPlace(a, b) {
14807           a[0] += b[0], a[1] += b[1], a[2] += b[2];
14808         }
14809
14810         function cartesianScale(vector, k) {
14811           return [vector[0] * k, vector[1] * k, vector[2] * k];
14812         }
14813
14814         // TODO return d
14815         function cartesianNormalizeInPlace(d) {
14816           var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
14817           d[0] /= l, d[1] /= l, d[2] /= l;
14818         }
14819
14820         var lambda0$1, phi0, lambda1, phi1, // bounds
14821             lambda2, // previous lambda-coordinate
14822             lambda00$1, phi00$1, // first point
14823             p0, // previous 3D point
14824             deltaSum = adder(),
14825             ranges,
14826             range;
14827
14828         var boundsStream = {
14829           point: boundsPoint,
14830           lineStart: boundsLineStart,
14831           lineEnd: boundsLineEnd,
14832           polygonStart: function() {
14833             boundsStream.point = boundsRingPoint;
14834             boundsStream.lineStart = boundsRingStart;
14835             boundsStream.lineEnd = boundsRingEnd;
14836             deltaSum.reset();
14837             areaStream.polygonStart();
14838           },
14839           polygonEnd: function() {
14840             areaStream.polygonEnd();
14841             boundsStream.point = boundsPoint;
14842             boundsStream.lineStart = boundsLineStart;
14843             boundsStream.lineEnd = boundsLineEnd;
14844             if (areaRingSum < 0) { lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90); }
14845             else if (deltaSum > epsilon$2) { phi1 = 90; }
14846             else if (deltaSum < -epsilon$2) { phi0 = -90; }
14847             range[0] = lambda0$1, range[1] = lambda1;
14848           },
14849           sphere: function() {
14850             lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);
14851           }
14852         };
14853
14854         function boundsPoint(lambda, phi) {
14855           ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);
14856           if (phi < phi0) { phi0 = phi; }
14857           if (phi > phi1) { phi1 = phi; }
14858         }
14859
14860         function linePoint(lambda, phi) {
14861           var p = cartesian([lambda * radians, phi * radians]);
14862           if (p0) {
14863             var normal = cartesianCross(p0, p),
14864                 equatorial = [normal[1], -normal[0], 0],
14865                 inflection = cartesianCross(equatorial, normal);
14866             cartesianNormalizeInPlace(inflection);
14867             inflection = spherical(inflection);
14868             var delta = lambda - lambda2,
14869                 sign = delta > 0 ? 1 : -1,
14870                 lambdai = inflection[0] * degrees$1 * sign,
14871                 phii,
14872                 antimeridian = abs$2(delta) > 180;
14873             if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {
14874               phii = inflection[1] * degrees$1;
14875               if (phii > phi1) { phi1 = phii; }
14876             } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {
14877               phii = -inflection[1] * degrees$1;
14878               if (phii < phi0) { phi0 = phii; }
14879             } else {
14880               if (phi < phi0) { phi0 = phi; }
14881               if (phi > phi1) { phi1 = phi; }
14882             }
14883             if (antimeridian) {
14884               if (lambda < lambda2) {
14885                 if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) { lambda1 = lambda; }
14886               } else {
14887                 if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) { lambda0$1 = lambda; }
14888               }
14889             } else {
14890               if (lambda1 >= lambda0$1) {
14891                 if (lambda < lambda0$1) { lambda0$1 = lambda; }
14892                 if (lambda > lambda1) { lambda1 = lambda; }
14893               } else {
14894                 if (lambda > lambda2) {
14895                   if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) { lambda1 = lambda; }
14896                 } else {
14897                   if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) { lambda0$1 = lambda; }
14898                 }
14899               }
14900             }
14901           } else {
14902             ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);
14903           }
14904           if (phi < phi0) { phi0 = phi; }
14905           if (phi > phi1) { phi1 = phi; }
14906           p0 = p, lambda2 = lambda;
14907         }
14908
14909         function boundsLineStart() {
14910           boundsStream.point = linePoint;
14911         }
14912
14913         function boundsLineEnd() {
14914           range[0] = lambda0$1, range[1] = lambda1;
14915           boundsStream.point = boundsPoint;
14916           p0 = null;
14917         }
14918
14919         function boundsRingPoint(lambda, phi) {
14920           if (p0) {
14921             var delta = lambda - lambda2;
14922             deltaSum.add(abs$2(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);
14923           } else {
14924             lambda00$1 = lambda, phi00$1 = phi;
14925           }
14926           areaStream.point(lambda, phi);
14927           linePoint(lambda, phi);
14928         }
14929
14930         function boundsRingStart() {
14931           areaStream.lineStart();
14932         }
14933
14934         function boundsRingEnd() {
14935           boundsRingPoint(lambda00$1, phi00$1);
14936           areaStream.lineEnd();
14937           if (abs$2(deltaSum) > epsilon$2) { lambda0$1 = -(lambda1 = 180); }
14938           range[0] = lambda0$1, range[1] = lambda1;
14939           p0 = null;
14940         }
14941
14942         // Finds the left-right distance between two longitudes.
14943         // This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want
14944         // the distance between ±180° to be 360°.
14945         function angle(lambda0, lambda1) {
14946           return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;
14947         }
14948
14949         function rangeCompare(a, b) {
14950           return a[0] - b[0];
14951         }
14952
14953         function rangeContains(range, x) {
14954           return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
14955         }
14956
14957         function d3_geoBounds(feature) {
14958           var i, n, a, b, merged, deltaMax, delta;
14959
14960           phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);
14961           ranges = [];
14962           d3_geoStream(feature, boundsStream);
14963
14964           // First, sort ranges by their minimum longitudes.
14965           if (n = ranges.length) {
14966             ranges.sort(rangeCompare);
14967
14968             // Then, merge any ranges that overlap.
14969             for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {
14970               b = ranges[i];
14971               if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {
14972                 if (angle(a[0], b[1]) > angle(a[0], a[1])) { a[1] = b[1]; }
14973                 if (angle(b[0], a[1]) > angle(a[0], a[1])) { a[0] = b[0]; }
14974               } else {
14975                 merged.push(a = b);
14976               }
14977             }
14978
14979             // Finally, find the largest gap between the merged ranges.
14980             // The final bounding box will be the inverse of this gap.
14981             for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {
14982               b = merged[i];
14983               if ((delta = angle(a[1], b[0])) > deltaMax) { deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1]; }
14984             }
14985           }
14986
14987           ranges = range = null;
14988
14989           return lambda0$1 === Infinity || phi0 === Infinity
14990               ? [[NaN, NaN], [NaN, NaN]]
14991               : [[lambda0$1, phi0], [lambda1, phi1]];
14992         }
14993
14994         var W0, W1,
14995             X0, Y0, Z0,
14996             X1, Y1, Z1,
14997             X2, Y2, Z2,
14998             lambda00$2, phi00$2, // first point
14999             x0, y0, z0; // previous point
15000
15001         var centroidStream = {
15002           sphere: noop$4,
15003           point: centroidPoint,
15004           lineStart: centroidLineStart,
15005           lineEnd: centroidLineEnd,
15006           polygonStart: function() {
15007             centroidStream.lineStart = centroidRingStart;
15008             centroidStream.lineEnd = centroidRingEnd;
15009           },
15010           polygonEnd: function() {
15011             centroidStream.lineStart = centroidLineStart;
15012             centroidStream.lineEnd = centroidLineEnd;
15013           }
15014         };
15015
15016         // Arithmetic mean of Cartesian vectors.
15017         function centroidPoint(lambda, phi) {
15018           lambda *= radians, phi *= radians;
15019           var cosPhi = cos$1(phi);
15020           centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));
15021         }
15022
15023         function centroidPointCartesian(x, y, z) {
15024           ++W0;
15025           X0 += (x - X0) / W0;
15026           Y0 += (y - Y0) / W0;
15027           Z0 += (z - Z0) / W0;
15028         }
15029
15030         function centroidLineStart() {
15031           centroidStream.point = centroidLinePointFirst;
15032         }
15033
15034         function centroidLinePointFirst(lambda, phi) {
15035           lambda *= radians, phi *= radians;
15036           var cosPhi = cos$1(phi);
15037           x0 = cosPhi * cos$1(lambda);
15038           y0 = cosPhi * sin$1(lambda);
15039           z0 = sin$1(phi);
15040           centroidStream.point = centroidLinePoint;
15041           centroidPointCartesian(x0, y0, z0);
15042         }
15043
15044         function centroidLinePoint(lambda, phi) {
15045           lambda *= radians, phi *= radians;
15046           var cosPhi = cos$1(phi),
15047               x = cosPhi * cos$1(lambda),
15048               y = cosPhi * sin$1(lambda),
15049               z = sin$1(phi),
15050               w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
15051           W1 += w;
15052           X1 += w * (x0 + (x0 = x));
15053           Y1 += w * (y0 + (y0 = y));
15054           Z1 += w * (z0 + (z0 = z));
15055           centroidPointCartesian(x0, y0, z0);
15056         }
15057
15058         function centroidLineEnd() {
15059           centroidStream.point = centroidPoint;
15060         }
15061
15062         // See J. E. Brock, The Inertia Tensor for a Spherical Triangle,
15063         // J. Applied Mechanics 42, 239 (1975).
15064         function centroidRingStart() {
15065           centroidStream.point = centroidRingPointFirst;
15066         }
15067
15068         function centroidRingEnd() {
15069           centroidRingPoint(lambda00$2, phi00$2);
15070           centroidStream.point = centroidPoint;
15071         }
15072
15073         function centroidRingPointFirst(lambda, phi) {
15074           lambda00$2 = lambda, phi00$2 = phi;
15075           lambda *= radians, phi *= radians;
15076           centroidStream.point = centroidRingPoint;
15077           var cosPhi = cos$1(phi);
15078           x0 = cosPhi * cos$1(lambda);
15079           y0 = cosPhi * sin$1(lambda);
15080           z0 = sin$1(phi);
15081           centroidPointCartesian(x0, y0, z0);
15082         }
15083
15084         function centroidRingPoint(lambda, phi) {
15085           lambda *= radians, phi *= radians;
15086           var cosPhi = cos$1(phi),
15087               x = cosPhi * cos$1(lambda),
15088               y = cosPhi * sin$1(lambda),
15089               z = sin$1(phi),
15090               cx = y0 * z - z0 * y,
15091               cy = z0 * x - x0 * z,
15092               cz = x0 * y - y0 * x,
15093               m = sqrt(cx * cx + cy * cy + cz * cz),
15094               w = asin(m), // line weight = angle
15095               v = m && -w / m; // area weight multiplier
15096           X2 += v * cx;
15097           Y2 += v * cy;
15098           Z2 += v * cz;
15099           W1 += w;
15100           X1 += w * (x0 + (x0 = x));
15101           Y1 += w * (y0 + (y0 = y));
15102           Z1 += w * (z0 + (z0 = z));
15103           centroidPointCartesian(x0, y0, z0);
15104         }
15105
15106         function d3_geoCentroid(object) {
15107           W0 = W1 =
15108           X0 = Y0 = Z0 =
15109           X1 = Y1 = Z1 =
15110           X2 = Y2 = Z2 = 0;
15111           d3_geoStream(object, centroidStream);
15112
15113           var x = X2,
15114               y = Y2,
15115               z = Z2,
15116               m = x * x + y * y + z * z;
15117
15118           // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.
15119           if (m < epsilon2$1) {
15120             x = X1, y = Y1, z = Z1;
15121             // If the feature has zero length, fall back to arithmetic mean of point vectors.
15122             if (W1 < epsilon$2) { x = X0, y = Y0, z = Z0; }
15123             m = x * x + y * y + z * z;
15124             // If the feature still has an undefined ccentroid, then return.
15125             if (m < epsilon2$1) { return [NaN, NaN]; }
15126           }
15127
15128           return [atan2(y, x) * degrees$1, asin(z / sqrt(m)) * degrees$1];
15129         }
15130
15131         function constant$8(x) {
15132           return function() {
15133             return x;
15134           };
15135         }
15136
15137         function compose(a, b) {
15138
15139           function compose(x, y) {
15140             return x = a(x, y), b(x[0], x[1]);
15141           }
15142
15143           if (a.invert && b.invert) { compose.invert = function(x, y) {
15144             return x = b.invert(x, y), x && a.invert(x[0], x[1]);
15145           }; }
15146
15147           return compose;
15148         }
15149
15150         function rotationIdentity(lambda, phi) {
15151           return [abs$2(lambda) > pi$3 ? lambda + Math.round(-lambda / tau$3) * tau$3 : lambda, phi];
15152         }
15153
15154         rotationIdentity.invert = rotationIdentity;
15155
15156         function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {
15157           return (deltaLambda %= tau$3) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))
15158             : rotationLambda(deltaLambda))
15159             : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)
15160             : rotationIdentity);
15161         }
15162
15163         function forwardRotationLambda(deltaLambda) {
15164           return function(lambda, phi) {
15165             return lambda += deltaLambda, [lambda > pi$3 ? lambda - tau$3 : lambda < -pi$3 ? lambda + tau$3 : lambda, phi];
15166           };
15167         }
15168
15169         function rotationLambda(deltaLambda) {
15170           var rotation = forwardRotationLambda(deltaLambda);
15171           rotation.invert = forwardRotationLambda(-deltaLambda);
15172           return rotation;
15173         }
15174
15175         function rotationPhiGamma(deltaPhi, deltaGamma) {
15176           var cosDeltaPhi = cos$1(deltaPhi),
15177               sinDeltaPhi = sin$1(deltaPhi),
15178               cosDeltaGamma = cos$1(deltaGamma),
15179               sinDeltaGamma = sin$1(deltaGamma);
15180
15181           function rotation(lambda, phi) {
15182             var cosPhi = cos$1(phi),
15183                 x = cos$1(lambda) * cosPhi,
15184                 y = sin$1(lambda) * cosPhi,
15185                 z = sin$1(phi),
15186                 k = z * cosDeltaPhi + x * sinDeltaPhi;
15187             return [
15188               atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),
15189               asin(k * cosDeltaGamma + y * sinDeltaGamma)
15190             ];
15191           }
15192
15193           rotation.invert = function(lambda, phi) {
15194             var cosPhi = cos$1(phi),
15195                 x = cos$1(lambda) * cosPhi,
15196                 y = sin$1(lambda) * cosPhi,
15197                 z = sin$1(phi),
15198                 k = z * cosDeltaGamma - y * sinDeltaGamma;
15199             return [
15200               atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),
15201               asin(k * cosDeltaPhi - x * sinDeltaPhi)
15202             ];
15203           };
15204
15205           return rotation;
15206         }
15207
15208         function rotation(rotate) {
15209           rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);
15210
15211           function forward(coordinates) {
15212             coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);
15213             return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
15214           }
15215
15216           forward.invert = function(coordinates) {
15217             coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);
15218             return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
15219           };
15220
15221           return forward;
15222         }
15223
15224         // Generates a circle centered at [0°, 0°], with a given radius and precision.
15225         function circleStream(stream, radius, delta, direction, t0, t1) {
15226           if (!delta) { return; }
15227           var cosRadius = cos$1(radius),
15228               sinRadius = sin$1(radius),
15229               step = direction * delta;
15230           if (t0 == null) {
15231             t0 = radius + direction * tau$3;
15232             t1 = radius - step / 2;
15233           } else {
15234             t0 = circleRadius(cosRadius, t0);
15235             t1 = circleRadius(cosRadius, t1);
15236             if (direction > 0 ? t0 < t1 : t0 > t1) { t0 += direction * tau$3; }
15237           }
15238           for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {
15239             point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);
15240             stream.point(point[0], point[1]);
15241           }
15242         }
15243
15244         // Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].
15245         function circleRadius(cosRadius, point) {
15246           point = cartesian(point), point[0] -= cosRadius;
15247           cartesianNormalizeInPlace(point);
15248           var radius = acos(-point[1]);
15249           return ((-point[2] < 0 ? -radius : radius) + tau$3 - epsilon$2) % tau$3;
15250         }
15251
15252         function circle() {
15253           var center = constant$8([0, 0]),
15254               radius = constant$8(90),
15255               precision = constant$8(6),
15256               ring,
15257               rotate,
15258               stream = {point: point};
15259
15260           function point(x, y) {
15261             ring.push(x = rotate(x, y));
15262             x[0] *= degrees$1, x[1] *= degrees$1;
15263           }
15264
15265           function circle() {
15266             var c = center.apply(this, arguments),
15267                 r = radius.apply(this, arguments) * radians,
15268                 p = precision.apply(this, arguments) * radians;
15269             ring = [];
15270             rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;
15271             circleStream(stream, r, p, 1);
15272             c = {type: "Polygon", coordinates: [ring]};
15273             ring = rotate = null;
15274             return c;
15275           }
15276
15277           circle.center = function(_) {
15278             return arguments.length ? (center = typeof _ === "function" ? _ : constant$8([+_[0], +_[1]]), circle) : center;
15279           };
15280
15281           circle.radius = function(_) {
15282             return arguments.length ? (radius = typeof _ === "function" ? _ : constant$8(+_), circle) : radius;
15283           };
15284
15285           circle.precision = function(_) {
15286             return arguments.length ? (precision = typeof _ === "function" ? _ : constant$8(+_), circle) : precision;
15287           };
15288
15289           return circle;
15290         }
15291
15292         function clipBuffer() {
15293           var lines = [],
15294               line;
15295           return {
15296             point: function(x, y) {
15297               line.push([x, y]);
15298             },
15299             lineStart: function() {
15300               lines.push(line = []);
15301             },
15302             lineEnd: noop$4,
15303             rejoin: function() {
15304               if (lines.length > 1) { lines.push(lines.pop().concat(lines.shift())); }
15305             },
15306             result: function() {
15307               var result = lines;
15308               lines = [];
15309               line = null;
15310               return result;
15311             }
15312           };
15313         }
15314
15315         function pointEqual(a, b) {
15316           return abs$2(a[0] - b[0]) < epsilon$2 && abs$2(a[1] - b[1]) < epsilon$2;
15317         }
15318
15319         function Intersection(point, points, other, entry) {
15320           this.x = point;
15321           this.z = points;
15322           this.o = other; // another intersection
15323           this.e = entry; // is an entry?
15324           this.v = false; // visited
15325           this.n = this.p = null; // next & previous
15326         }
15327
15328         // A generalized polygon clipping algorithm: given a polygon that has been cut
15329         // into its visible line segments, and rejoins the segments by interpolating
15330         // along the clip edge.
15331         function clipRejoin(segments, compareIntersection, startInside, interpolate, stream) {
15332           var subject = [],
15333               clip = [],
15334               i,
15335               n;
15336
15337           segments.forEach(function(segment) {
15338             if ((n = segment.length - 1) <= 0) { return; }
15339             var n, p0 = segment[0], p1 = segment[n], x;
15340
15341             // If the first and last points of a segment are coincident, then treat as a
15342             // closed ring. TODO if all rings are closed, then the winding order of the
15343             // exterior ring should be checked.
15344             if (pointEqual(p0, p1)) {
15345               stream.lineStart();
15346               for (i = 0; i < n; ++i) { stream.point((p0 = segment[i])[0], p0[1]); }
15347               stream.lineEnd();
15348               return;
15349             }
15350
15351             subject.push(x = new Intersection(p0, segment, null, true));
15352             clip.push(x.o = new Intersection(p0, null, x, false));
15353             subject.push(x = new Intersection(p1, segment, null, false));
15354             clip.push(x.o = new Intersection(p1, null, x, true));
15355           });
15356
15357           if (!subject.length) { return; }
15358
15359           clip.sort(compareIntersection);
15360           link$1(subject);
15361           link$1(clip);
15362
15363           for (i = 0, n = clip.length; i < n; ++i) {
15364             clip[i].e = startInside = !startInside;
15365           }
15366
15367           var start = subject[0],
15368               points,
15369               point;
15370
15371           while (1) {
15372             // Find first unvisited intersection.
15373             var current = start,
15374                 isSubject = true;
15375             while (current.v) { if ((current = current.n) === start) { return; } }
15376             points = current.z;
15377             stream.lineStart();
15378             do {
15379               current.v = current.o.v = true;
15380               if (current.e) {
15381                 if (isSubject) {
15382                   for (i = 0, n = points.length; i < n; ++i) { stream.point((point = points[i])[0], point[1]); }
15383                 } else {
15384                   interpolate(current.x, current.n.x, 1, stream);
15385                 }
15386                 current = current.n;
15387               } else {
15388                 if (isSubject) {
15389                   points = current.p.z;
15390                   for (i = points.length - 1; i >= 0; --i) { stream.point((point = points[i])[0], point[1]); }
15391                 } else {
15392                   interpolate(current.x, current.p.x, -1, stream);
15393                 }
15394                 current = current.p;
15395               }
15396               current = current.o;
15397               points = current.z;
15398               isSubject = !isSubject;
15399             } while (!current.v);
15400             stream.lineEnd();
15401           }
15402         }
15403
15404         function link$1(array) {
15405           if (!(n = array.length)) { return; }
15406           var n,
15407               i = 0,
15408               a = array[0],
15409               b;
15410           while (++i < n) {
15411             a.n = b = array[i];
15412             b.p = a;
15413             a = b;
15414           }
15415           a.n = b = array[0];
15416           b.p = a;
15417         }
15418
15419         var sum$1 = adder();
15420
15421         function longitude(point) {
15422           if (abs$2(point[0]) <= pi$3)
15423             { return point[0]; }
15424           else
15425             { return sign$2(point[0]) * ((abs$2(point[0]) + pi$3) % tau$3 - pi$3); }
15426         }
15427
15428         function polygonContains(polygon, point) {
15429           var lambda = longitude(point),
15430               phi = point[1],
15431               sinPhi = sin$1(phi),
15432               normal = [sin$1(lambda), -cos$1(lambda), 0],
15433               angle = 0,
15434               winding = 0;
15435
15436           sum$1.reset();
15437
15438           if (sinPhi === 1) { phi = halfPi$2 + epsilon$2; }
15439           else if (sinPhi === -1) { phi = -halfPi$2 - epsilon$2; }
15440
15441           for (var i = 0, n = polygon.length; i < n; ++i) {
15442             if (!(m = (ring = polygon[i]).length)) { continue; }
15443             var ring,
15444                 m,
15445                 point0 = ring[m - 1],
15446                 lambda0 = longitude(point0),
15447                 phi0 = point0[1] / 2 + quarterPi,
15448                 sinPhi0 = sin$1(phi0),
15449                 cosPhi0 = cos$1(phi0);
15450
15451             for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {
15452               var point1 = ring[j],
15453                   lambda1 = longitude(point1),
15454                   phi1 = point1[1] / 2 + quarterPi,
15455                   sinPhi1 = sin$1(phi1),
15456                   cosPhi1 = cos$1(phi1),
15457                   delta = lambda1 - lambda0,
15458                   sign = delta >= 0 ? 1 : -1,
15459                   absDelta = sign * delta,
15460                   antimeridian = absDelta > pi$3,
15461                   k = sinPhi0 * sinPhi1;
15462
15463               sum$1.add(atan2(k * sign * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));
15464               angle += antimeridian ? delta + sign * tau$3 : delta;
15465
15466               // Are the longitudes either side of the point’s meridian (lambda),
15467               // and are the latitudes smaller than the parallel (phi)?
15468               if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {
15469                 var arc = cartesianCross(cartesian(point0), cartesian(point1));
15470                 cartesianNormalizeInPlace(arc);
15471                 var intersection = cartesianCross(normal, arc);
15472                 cartesianNormalizeInPlace(intersection);
15473                 var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);
15474                 if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
15475                   winding += antimeridian ^ delta >= 0 ? 1 : -1;
15476                 }
15477               }
15478             }
15479           }
15480
15481           // First, determine whether the South pole is inside or outside:
15482           //
15483           // It is inside if:
15484           // * the polygon winds around it in a clockwise direction.
15485           // * the polygon does not (cumulatively) wind around it, but has a negative
15486           //   (counter-clockwise) area.
15487           //
15488           // Second, count the (signed) number of times a segment crosses a lambda
15489           // from the point to the South pole.  If it is zero, then the point is the
15490           // same side as the South pole.
15491
15492           return (angle < -epsilon$2 || angle < epsilon$2 && sum$1 < -epsilon$2) ^ (winding & 1);
15493         }
15494
15495         function clip(pointVisible, clipLine, interpolate, start) {
15496           return function(sink) {
15497             var line = clipLine(sink),
15498                 ringBuffer = clipBuffer(),
15499                 ringSink = clipLine(ringBuffer),
15500                 polygonStarted = false,
15501                 polygon,
15502                 segments,
15503                 ring;
15504
15505             var clip = {
15506               point: point,
15507               lineStart: lineStart,
15508               lineEnd: lineEnd,
15509               polygonStart: function() {
15510                 clip.point = pointRing;
15511                 clip.lineStart = ringStart;
15512                 clip.lineEnd = ringEnd;
15513                 segments = [];
15514                 polygon = [];
15515               },
15516               polygonEnd: function() {
15517                 clip.point = point;
15518                 clip.lineStart = lineStart;
15519                 clip.lineEnd = lineEnd;
15520                 segments = merge(segments);
15521                 var startInside = polygonContains(polygon, start);
15522                 if (segments.length) {
15523                   if (!polygonStarted) { sink.polygonStart(), polygonStarted = true; }
15524                   clipRejoin(segments, compareIntersection, startInside, interpolate, sink);
15525                 } else if (startInside) {
15526                   if (!polygonStarted) { sink.polygonStart(), polygonStarted = true; }
15527                   sink.lineStart();
15528                   interpolate(null, null, 1, sink);
15529                   sink.lineEnd();
15530                 }
15531                 if (polygonStarted) { sink.polygonEnd(), polygonStarted = false; }
15532                 segments = polygon = null;
15533               },
15534               sphere: function() {
15535                 sink.polygonStart();
15536                 sink.lineStart();
15537                 interpolate(null, null, 1, sink);
15538                 sink.lineEnd();
15539                 sink.polygonEnd();
15540               }
15541             };
15542
15543             function point(lambda, phi) {
15544               if (pointVisible(lambda, phi)) { sink.point(lambda, phi); }
15545             }
15546
15547             function pointLine(lambda, phi) {
15548               line.point(lambda, phi);
15549             }
15550
15551             function lineStart() {
15552               clip.point = pointLine;
15553               line.lineStart();
15554             }
15555
15556             function lineEnd() {
15557               clip.point = point;
15558               line.lineEnd();
15559             }
15560
15561             function pointRing(lambda, phi) {
15562               ring.push([lambda, phi]);
15563               ringSink.point(lambda, phi);
15564             }
15565
15566             function ringStart() {
15567               ringSink.lineStart();
15568               ring = [];
15569             }
15570
15571             function ringEnd() {
15572               pointRing(ring[0][0], ring[0][1]);
15573               ringSink.lineEnd();
15574
15575               var clean = ringSink.clean(),
15576                   ringSegments = ringBuffer.result(),
15577                   i, n = ringSegments.length, m,
15578                   segment,
15579                   point;
15580
15581               ring.pop();
15582               polygon.push(ring);
15583               ring = null;
15584
15585               if (!n) { return; }
15586
15587               // No intersections.
15588               if (clean & 1) {
15589                 segment = ringSegments[0];
15590                 if ((m = segment.length - 1) > 0) {
15591                   if (!polygonStarted) { sink.polygonStart(), polygonStarted = true; }
15592                   sink.lineStart();
15593                   for (i = 0; i < m; ++i) { sink.point((point = segment[i])[0], point[1]); }
15594                   sink.lineEnd();
15595                 }
15596                 return;
15597               }
15598
15599               // Rejoin connected segments.
15600               // TODO reuse ringBuffer.rejoin()?
15601               if (n > 1 && clean & 2) { ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); }
15602
15603               segments.push(ringSegments.filter(validSegment));
15604             }
15605
15606             return clip;
15607           };
15608         }
15609
15610         function validSegment(segment) {
15611           return segment.length > 1;
15612         }
15613
15614         // Intersections are sorted along the clip edge. For both antimeridian cutting
15615         // and circle clipping, the same comparison is used.
15616         function compareIntersection(a, b) {
15617           return ((a = a.x)[0] < 0 ? a[1] - halfPi$2 - epsilon$2 : halfPi$2 - a[1])
15618                - ((b = b.x)[0] < 0 ? b[1] - halfPi$2 - epsilon$2 : halfPi$2 - b[1]);
15619         }
15620
15621         var clipAntimeridian = clip(
15622           function() { return true; },
15623           clipAntimeridianLine,
15624           clipAntimeridianInterpolate,
15625           [-pi$3, -halfPi$2]
15626         );
15627
15628         // Takes a line and cuts into visible segments. Return values: 0 - there were
15629         // intersections or the line was empty; 1 - no intersections; 2 - there were
15630         // intersections, and the first and last segments should be rejoined.
15631         function clipAntimeridianLine(stream) {
15632           var lambda0 = NaN,
15633               phi0 = NaN,
15634               sign0 = NaN,
15635               clean; // no intersections
15636
15637           return {
15638             lineStart: function() {
15639               stream.lineStart();
15640               clean = 1;
15641             },
15642             point: function(lambda1, phi1) {
15643               var sign1 = lambda1 > 0 ? pi$3 : -pi$3,
15644                   delta = abs$2(lambda1 - lambda0);
15645               if (abs$2(delta - pi$3) < epsilon$2) { // line crosses a pole
15646                 stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$2 : -halfPi$2);
15647                 stream.point(sign0, phi0);
15648                 stream.lineEnd();
15649                 stream.lineStart();
15650                 stream.point(sign1, phi0);
15651                 stream.point(lambda1, phi0);
15652                 clean = 0;
15653               } else if (sign0 !== sign1 && delta >= pi$3) { // line crosses antimeridian
15654                 if (abs$2(lambda0 - sign0) < epsilon$2) { lambda0 -= sign0 * epsilon$2; } // handle degeneracies
15655                 if (abs$2(lambda1 - sign1) < epsilon$2) { lambda1 -= sign1 * epsilon$2; }
15656                 phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);
15657                 stream.point(sign0, phi0);
15658                 stream.lineEnd();
15659                 stream.lineStart();
15660                 stream.point(sign1, phi0);
15661                 clean = 0;
15662               }
15663               stream.point(lambda0 = lambda1, phi0 = phi1);
15664               sign0 = sign1;
15665             },
15666             lineEnd: function() {
15667               stream.lineEnd();
15668               lambda0 = phi0 = NaN;
15669             },
15670             clean: function() {
15671               return 2 - clean; // if intersections, rejoin first and last segments
15672             }
15673           };
15674         }
15675
15676         function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {
15677           var cosPhi0,
15678               cosPhi1,
15679               sinLambda0Lambda1 = sin$1(lambda0 - lambda1);
15680           return abs$2(sinLambda0Lambda1) > epsilon$2
15681               ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)
15682                   - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))
15683                   / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))
15684               : (phi0 + phi1) / 2;
15685         }
15686
15687         function clipAntimeridianInterpolate(from, to, direction, stream) {
15688           var phi;
15689           if (from == null) {
15690             phi = direction * halfPi$2;
15691             stream.point(-pi$3, phi);
15692             stream.point(0, phi);
15693             stream.point(pi$3, phi);
15694             stream.point(pi$3, 0);
15695             stream.point(pi$3, -phi);
15696             stream.point(0, -phi);
15697             stream.point(-pi$3, -phi);
15698             stream.point(-pi$3, 0);
15699             stream.point(-pi$3, phi);
15700           } else if (abs$2(from[0] - to[0]) > epsilon$2) {
15701             var lambda = from[0] < to[0] ? pi$3 : -pi$3;
15702             phi = direction * lambda / 2;
15703             stream.point(-lambda, phi);
15704             stream.point(0, phi);
15705             stream.point(lambda, phi);
15706           } else {
15707             stream.point(to[0], to[1]);
15708           }
15709         }
15710
15711         function clipCircle(radius) {
15712           var cr = cos$1(radius),
15713               delta = 6 * radians,
15714               smallRadius = cr > 0,
15715               notHemisphere = abs$2(cr) > epsilon$2; // TODO optimise for this common case
15716
15717           function interpolate(from, to, direction, stream) {
15718             circleStream(stream, radius, delta, direction, from, to);
15719           }
15720
15721           function visible(lambda, phi) {
15722             return cos$1(lambda) * cos$1(phi) > cr;
15723           }
15724
15725           // Takes a line and cuts into visible segments. Return values used for polygon
15726           // clipping: 0 - there were intersections or the line was empty; 1 - no
15727           // intersections 2 - there were intersections, and the first and last segments
15728           // should be rejoined.
15729           function clipLine(stream) {
15730             var point0, // previous point
15731                 c0, // code for previous point
15732                 v0, // visibility of previous point
15733                 v00, // visibility of first point
15734                 clean; // no intersections
15735             return {
15736               lineStart: function() {
15737                 v00 = v0 = false;
15738                 clean = 1;
15739               },
15740               point: function(lambda, phi) {
15741                 var point1 = [lambda, phi],
15742                     point2,
15743                     v = visible(lambda, phi),
15744                     c = smallRadius
15745                       ? v ? 0 : code(lambda, phi)
15746                       : v ? code(lambda + (lambda < 0 ? pi$3 : -pi$3), phi) : 0;
15747                 if (!point0 && (v00 = v0 = v)) { stream.lineStart(); }
15748                 // Handle degeneracies.
15749                 // TODO ignore if not clipping polygons.
15750                 if (v !== v0) {
15751                   point2 = intersect(point0, point1);
15752                   if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {
15753                     point1[0] += epsilon$2;
15754                     point1[1] += epsilon$2;
15755                     v = visible(point1[0], point1[1]);
15756                   }
15757                 }
15758                 if (v !== v0) {
15759                   clean = 0;
15760                   if (v) {
15761                     // outside going in
15762                     stream.lineStart();
15763                     point2 = intersect(point1, point0);
15764                     stream.point(point2[0], point2[1]);
15765                   } else {
15766                     // inside going out
15767                     point2 = intersect(point0, point1);
15768                     stream.point(point2[0], point2[1]);
15769                     stream.lineEnd();
15770                   }
15771                   point0 = point2;
15772                 } else if (notHemisphere && point0 && smallRadius ^ v) {
15773                   var t;
15774                   // If the codes for two points are different, or are both zero,
15775                   // and there this segment intersects with the small circle.
15776                   if (!(c & c0) && (t = intersect(point1, point0, true))) {
15777                     clean = 0;
15778                     if (smallRadius) {
15779                       stream.lineStart();
15780                       stream.point(t[0][0], t[0][1]);
15781                       stream.point(t[1][0], t[1][1]);
15782                       stream.lineEnd();
15783                     } else {
15784                       stream.point(t[1][0], t[1][1]);
15785                       stream.lineEnd();
15786                       stream.lineStart();
15787                       stream.point(t[0][0], t[0][1]);
15788                     }
15789                   }
15790                 }
15791                 if (v && (!point0 || !pointEqual(point0, point1))) {
15792                   stream.point(point1[0], point1[1]);
15793                 }
15794                 point0 = point1, v0 = v, c0 = c;
15795               },
15796               lineEnd: function() {
15797                 if (v0) { stream.lineEnd(); }
15798                 point0 = null;
15799               },
15800               // Rejoin first and last segments if there were intersections and the first
15801               // and last points were visible.
15802               clean: function() {
15803                 return clean | ((v00 && v0) << 1);
15804               }
15805             };
15806           }
15807
15808           // Intersects the great circle between a and b with the clip circle.
15809           function intersect(a, b, two) {
15810             var pa = cartesian(a),
15811                 pb = cartesian(b);
15812
15813             // We have two planes, n1.p = d1 and n2.p = d2.
15814             // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).
15815             var n1 = [1, 0, 0], // normal
15816                 n2 = cartesianCross(pa, pb),
15817                 n2n2 = cartesianDot(n2, n2),
15818                 n1n2 = n2[0], // cartesianDot(n1, n2),
15819                 determinant = n2n2 - n1n2 * n1n2;
15820
15821             // Two polar points.
15822             if (!determinant) { return !two && a; }
15823
15824             var c1 =  cr * n2n2 / determinant,
15825                 c2 = -cr * n1n2 / determinant,
15826                 n1xn2 = cartesianCross(n1, n2),
15827                 A = cartesianScale(n1, c1),
15828                 B = cartesianScale(n2, c2);
15829             cartesianAddInPlace(A, B);
15830
15831             // Solve |p(t)|^2 = 1.
15832             var u = n1xn2,
15833                 w = cartesianDot(A, u),
15834                 uu = cartesianDot(u, u),
15835                 t2 = w * w - uu * (cartesianDot(A, A) - 1);
15836
15837             if (t2 < 0) { return; }
15838
15839             var t = sqrt(t2),
15840                 q = cartesianScale(u, (-w - t) / uu);
15841             cartesianAddInPlace(q, A);
15842             q = spherical(q);
15843
15844             if (!two) { return q; }
15845
15846             // Two intersection points.
15847             var lambda0 = a[0],
15848                 lambda1 = b[0],
15849                 phi0 = a[1],
15850                 phi1 = b[1],
15851                 z;
15852
15853             if (lambda1 < lambda0) { z = lambda0, lambda0 = lambda1, lambda1 = z; }
15854
15855             var delta = lambda1 - lambda0,
15856                 polar = abs$2(delta - pi$3) < epsilon$2,
15857                 meridian = polar || delta < epsilon$2;
15858
15859             if (!polar && phi1 < phi0) { z = phi0, phi0 = phi1, phi1 = z; }
15860
15861             // Check that the first point is between a and b.
15862             if (meridian
15863                 ? polar
15864                   ? phi0 + phi1 > 0 ^ q[1] < (abs$2(q[0] - lambda0) < epsilon$2 ? phi0 : phi1)
15865                   : phi0 <= q[1] && q[1] <= phi1
15866                 : delta > pi$3 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {
15867               var q1 = cartesianScale(u, (-w + t) / uu);
15868               cartesianAddInPlace(q1, A);
15869               return [q, spherical(q1)];
15870             }
15871           }
15872
15873           // Generates a 4-bit vector representing the location of a point relative to
15874           // the small circle's bounding box.
15875           function code(lambda, phi) {
15876             var r = smallRadius ? radius : pi$3 - radius,
15877                 code = 0;
15878             if (lambda < -r) { code |= 1; } // left
15879             else if (lambda > r) { code |= 2; } // right
15880             if (phi < -r) { code |= 4; } // below
15881             else if (phi > r) { code |= 8; } // above
15882             return code;
15883           }
15884
15885           return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$3, radius - pi$3]);
15886         }
15887
15888         function clipLine(a, b, x0, y0, x1, y1) {
15889           var ax = a[0],
15890               ay = a[1],
15891               bx = b[0],
15892               by = b[1],
15893               t0 = 0,
15894               t1 = 1,
15895               dx = bx - ax,
15896               dy = by - ay,
15897               r;
15898
15899           r = x0 - ax;
15900           if (!dx && r > 0) { return; }
15901           r /= dx;
15902           if (dx < 0) {
15903             if (r < t0) { return; }
15904             if (r < t1) { t1 = r; }
15905           } else if (dx > 0) {
15906             if (r > t1) { return; }
15907             if (r > t0) { t0 = r; }
15908           }
15909
15910           r = x1 - ax;
15911           if (!dx && r < 0) { return; }
15912           r /= dx;
15913           if (dx < 0) {
15914             if (r > t1) { return; }
15915             if (r > t0) { t0 = r; }
15916           } else if (dx > 0) {
15917             if (r < t0) { return; }
15918             if (r < t1) { t1 = r; }
15919           }
15920
15921           r = y0 - ay;
15922           if (!dy && r > 0) { return; }
15923           r /= dy;
15924           if (dy < 0) {
15925             if (r < t0) { return; }
15926             if (r < t1) { t1 = r; }
15927           } else if (dy > 0) {
15928             if (r > t1) { return; }
15929             if (r > t0) { t0 = r; }
15930           }
15931
15932           r = y1 - ay;
15933           if (!dy && r < 0) { return; }
15934           r /= dy;
15935           if (dy < 0) {
15936             if (r > t1) { return; }
15937             if (r > t0) { t0 = r; }
15938           } else if (dy > 0) {
15939             if (r < t0) { return; }
15940             if (r < t1) { t1 = r; }
15941           }
15942
15943           if (t0 > 0) { a[0] = ax + t0 * dx, a[1] = ay + t0 * dy; }
15944           if (t1 < 1) { b[0] = ax + t1 * dx, b[1] = ay + t1 * dy; }
15945           return true;
15946         }
15947
15948         var clipMax = 1e9, clipMin = -clipMax;
15949
15950         // TODO Use d3-polygon’s polygonContains here for the ring check?
15951         // TODO Eliminate duplicate buffering in clipBuffer and polygon.push?
15952
15953         function clipRectangle(x0, y0, x1, y1) {
15954
15955           function visible(x, y) {
15956             return x0 <= x && x <= x1 && y0 <= y && y <= y1;
15957           }
15958
15959           function interpolate(from, to, direction, stream) {
15960             var a = 0, a1 = 0;
15961             if (from == null
15962                 || (a = corner(from, direction)) !== (a1 = corner(to, direction))
15963                 || comparePoint(from, to) < 0 ^ direction > 0) {
15964               do { stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); }
15965               while ((a = (a + direction + 4) % 4) !== a1);
15966             } else {
15967               stream.point(to[0], to[1]);
15968             }
15969           }
15970
15971           function corner(p, direction) {
15972             return abs$2(p[0] - x0) < epsilon$2 ? direction > 0 ? 0 : 3
15973                 : abs$2(p[0] - x1) < epsilon$2 ? direction > 0 ? 2 : 1
15974                 : abs$2(p[1] - y0) < epsilon$2 ? direction > 0 ? 1 : 0
15975                 : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon
15976           }
15977
15978           function compareIntersection(a, b) {
15979             return comparePoint(a.x, b.x);
15980           }
15981
15982           function comparePoint(a, b) {
15983             var ca = corner(a, 1),
15984                 cb = corner(b, 1);
15985             return ca !== cb ? ca - cb
15986                 : ca === 0 ? b[1] - a[1]
15987                 : ca === 1 ? a[0] - b[0]
15988                 : ca === 2 ? a[1] - b[1]
15989                 : b[0] - a[0];
15990           }
15991
15992           return function(stream) {
15993             var activeStream = stream,
15994                 bufferStream = clipBuffer(),
15995                 segments,
15996                 polygon,
15997                 ring,
15998                 x__, y__, v__, // first point
15999                 x_, y_, v_, // previous point
16000                 first,
16001                 clean;
16002
16003             var clipStream = {
16004               point: point,
16005               lineStart: lineStart,
16006               lineEnd: lineEnd,
16007               polygonStart: polygonStart,
16008               polygonEnd: polygonEnd
16009             };
16010
16011             function point(x, y) {
16012               if (visible(x, y)) { activeStream.point(x, y); }
16013             }
16014
16015             function polygonInside() {
16016               var winding = 0;
16017
16018               for (var i = 0, n = polygon.length; i < n; ++i) {
16019                 for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {
16020                   a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];
16021                   if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) { ++winding; } }
16022                   else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) { --winding; } }
16023                 }
16024               }
16025
16026               return winding;
16027             }
16028
16029             // Buffer geometry within a polygon and then clip it en masse.
16030             function polygonStart() {
16031               activeStream = bufferStream, segments = [], polygon = [], clean = true;
16032             }
16033
16034             function polygonEnd() {
16035               var startInside = polygonInside(),
16036                   cleanInside = clean && startInside,
16037                   visible = (segments = merge(segments)).length;
16038               if (cleanInside || visible) {
16039                 stream.polygonStart();
16040                 if (cleanInside) {
16041                   stream.lineStart();
16042                   interpolate(null, null, 1, stream);
16043                   stream.lineEnd();
16044                 }
16045                 if (visible) {
16046                   clipRejoin(segments, compareIntersection, startInside, interpolate, stream);
16047                 }
16048                 stream.polygonEnd();
16049               }
16050               activeStream = stream, segments = polygon = ring = null;
16051             }
16052
16053             function lineStart() {
16054               clipStream.point = linePoint;
16055               if (polygon) { polygon.push(ring = []); }
16056               first = true;
16057               v_ = false;
16058               x_ = y_ = NaN;
16059             }
16060
16061             // TODO rather than special-case polygons, simply handle them separately.
16062             // Ideally, coincident intersection points should be jittered to avoid
16063             // clipping issues.
16064             function lineEnd() {
16065               if (segments) {
16066                 linePoint(x__, y__);
16067                 if (v__ && v_) { bufferStream.rejoin(); }
16068                 segments.push(bufferStream.result());
16069               }
16070               clipStream.point = point;
16071               if (v_) { activeStream.lineEnd(); }
16072             }
16073
16074             function linePoint(x, y) {
16075               var v = visible(x, y);
16076               if (polygon) { ring.push([x, y]); }
16077               if (first) {
16078                 x__ = x, y__ = y, v__ = v;
16079                 first = false;
16080                 if (v) {
16081                   activeStream.lineStart();
16082                   activeStream.point(x, y);
16083                 }
16084               } else {
16085                 if (v && v_) { activeStream.point(x, y); }
16086                 else {
16087                   var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],
16088                       b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];
16089                   if (clipLine(a, b, x0, y0, x1, y1)) {
16090                     if (!v_) {
16091                       activeStream.lineStart();
16092                       activeStream.point(a[0], a[1]);
16093                     }
16094                     activeStream.point(b[0], b[1]);
16095                     if (!v) { activeStream.lineEnd(); }
16096                     clean = false;
16097                   } else if (v) {
16098                     activeStream.lineStart();
16099                     activeStream.point(x, y);
16100                     clean = false;
16101                   }
16102                 }
16103               }
16104               x_ = x, y_ = y, v_ = v;
16105             }
16106
16107             return clipStream;
16108           };
16109         }
16110
16111         function extent$1() {
16112           var x0 = 0,
16113               y0 = 0,
16114               x1 = 960,
16115               y1 = 500,
16116               cache,
16117               cacheStream,
16118               clip;
16119
16120           return clip = {
16121             stream: function(stream) {
16122               return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);
16123             },
16124             extent: function(_) {
16125               return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];
16126             }
16127           };
16128         }
16129
16130         var lengthSum = adder(),
16131             lambda0$2,
16132             sinPhi0$1,
16133             cosPhi0$1;
16134
16135         var lengthStream = {
16136           sphere: noop$4,
16137           point: noop$4,
16138           lineStart: lengthLineStart,
16139           lineEnd: noop$4,
16140           polygonStart: noop$4,
16141           polygonEnd: noop$4
16142         };
16143
16144         function lengthLineStart() {
16145           lengthStream.point = lengthPointFirst;
16146           lengthStream.lineEnd = lengthLineEnd;
16147         }
16148
16149         function lengthLineEnd() {
16150           lengthStream.point = lengthStream.lineEnd = noop$4;
16151         }
16152
16153         function lengthPointFirst(lambda, phi) {
16154           lambda *= radians, phi *= radians;
16155           lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);
16156           lengthStream.point = lengthPoint;
16157         }
16158
16159         function lengthPoint(lambda, phi) {
16160           lambda *= radians, phi *= radians;
16161           var sinPhi = sin$1(phi),
16162               cosPhi = cos$1(phi),
16163               delta = abs$2(lambda - lambda0$2),
16164               cosDelta = cos$1(delta),
16165               sinDelta = sin$1(delta),
16166               x = cosPhi * sinDelta,
16167               y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,
16168               z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;
16169           lengthSum.add(atan2(sqrt(x * x + y * y), z));
16170           lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;
16171         }
16172
16173         function d3_geoLength(object) {
16174           lengthSum.reset();
16175           d3_geoStream(object, lengthStream);
16176           return +lengthSum;
16177         }
16178
16179         var coordinates = [null, null],
16180             object$1 = {type: "LineString", coordinates: coordinates};
16181
16182         function distance(a, b) {
16183           coordinates[0] = a;
16184           coordinates[1] = b;
16185           return d3_geoLength(object$1);
16186         }
16187
16188         var containsObjectType = {
16189           Feature: function(object, point) {
16190             return containsGeometry(object.geometry, point);
16191           },
16192           FeatureCollection: function(object, point) {
16193             var features = object.features, i = -1, n = features.length;
16194             while (++i < n) { if (containsGeometry(features[i].geometry, point)) { return true; } }
16195             return false;
16196           }
16197         };
16198
16199         var containsGeometryType = {
16200           Sphere: function() {
16201             return true;
16202           },
16203           Point: function(object, point) {
16204             return containsPoint(object.coordinates, point);
16205           },
16206           MultiPoint: function(object, point) {
16207             var coordinates = object.coordinates, i = -1, n = coordinates.length;
16208             while (++i < n) { if (containsPoint(coordinates[i], point)) { return true; } }
16209             return false;
16210           },
16211           LineString: function(object, point) {
16212             return containsLine(object.coordinates, point);
16213           },
16214           MultiLineString: function(object, point) {
16215             var coordinates = object.coordinates, i = -1, n = coordinates.length;
16216             while (++i < n) { if (containsLine(coordinates[i], point)) { return true; } }
16217             return false;
16218           },
16219           Polygon: function(object, point) {
16220             return containsPolygon(object.coordinates, point);
16221           },
16222           MultiPolygon: function(object, point) {
16223             var coordinates = object.coordinates, i = -1, n = coordinates.length;
16224             while (++i < n) { if (containsPolygon(coordinates[i], point)) { return true; } }
16225             return false;
16226           },
16227           GeometryCollection: function(object, point) {
16228             var geometries = object.geometries, i = -1, n = geometries.length;
16229             while (++i < n) { if (containsGeometry(geometries[i], point)) { return true; } }
16230             return false;
16231           }
16232         };
16233
16234         function containsGeometry(geometry, point) {
16235           return geometry && containsGeometryType.hasOwnProperty(geometry.type)
16236               ? containsGeometryType[geometry.type](geometry, point)
16237               : false;
16238         }
16239
16240         function containsPoint(coordinates, point) {
16241           return distance(coordinates, point) === 0;
16242         }
16243
16244         function containsLine(coordinates, point) {
16245           var ao, bo, ab;
16246           for (var i = 0, n = coordinates.length; i < n; i++) {
16247             bo = distance(coordinates[i], point);
16248             if (bo === 0) { return true; }
16249             if (i > 0) {
16250               ab = distance(coordinates[i], coordinates[i - 1]);
16251               if (
16252                 ab > 0 &&
16253                 ao <= ab &&
16254                 bo <= ab &&
16255                 (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2$1 * ab
16256               )
16257                 { return true; }
16258             }
16259             ao = bo;
16260           }
16261           return false;
16262         }
16263
16264         function containsPolygon(coordinates, point) {
16265           return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));
16266         }
16267
16268         function ringRadians(ring) {
16269           return ring = ring.map(pointRadians), ring.pop(), ring;
16270         }
16271
16272         function pointRadians(point) {
16273           return [point[0] * radians, point[1] * radians];
16274         }
16275
16276         function contains$2(object, point) {
16277           return (object && containsObjectType.hasOwnProperty(object.type)
16278               ? containsObjectType[object.type]
16279               : containsGeometry)(object, point);
16280         }
16281
16282         function graticuleX(y0, y1, dy) {
16283           var y = d3_range(y0, y1 - epsilon$2, dy).concat(y1);
16284           return function(x) { return y.map(function(y) { return [x, y]; }); };
16285         }
16286
16287         function graticuleY(x0, x1, dx) {
16288           var x = d3_range(x0, x1 - epsilon$2, dx).concat(x1);
16289           return function(y) { return x.map(function(x) { return [x, y]; }); };
16290         }
16291
16292         function graticule() {
16293           var x1, x0, X1, X0,
16294               y1, y0, Y1, Y0,
16295               dx = 10, dy = dx, DX = 90, DY = 360,
16296               x, y, X, Y,
16297               precision = 2.5;
16298
16299           function graticule() {
16300             return {type: "MultiLineString", coordinates: lines()};
16301           }
16302
16303           function lines() {
16304             return d3_range(ceil(X0 / DX) * DX, X1, DX).map(X)
16305                 .concat(d3_range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))
16306                 .concat(d3_range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs$2(x % DX) > epsilon$2; }).map(x))
16307                 .concat(d3_range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs$2(y % DY) > epsilon$2; }).map(y));
16308           }
16309
16310           graticule.lines = function() {
16311             return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; });
16312           };
16313
16314           graticule.outline = function() {
16315             return {
16316               type: "Polygon",
16317               coordinates: [
16318                 X(X0).concat(
16319                 Y(Y1).slice(1),
16320                 X(X1).reverse().slice(1),
16321                 Y(Y0).reverse().slice(1))
16322               ]
16323             };
16324           };
16325
16326           graticule.extent = function(_) {
16327             if (!arguments.length) { return graticule.extentMinor(); }
16328             return graticule.extentMajor(_).extentMinor(_);
16329           };
16330
16331           graticule.extentMajor = function(_) {
16332             if (!arguments.length) { return [[X0, Y0], [X1, Y1]]; }
16333             X0 = +_[0][0], X1 = +_[1][0];
16334             Y0 = +_[0][1], Y1 = +_[1][1];
16335             if (X0 > X1) { _ = X0, X0 = X1, X1 = _; }
16336             if (Y0 > Y1) { _ = Y0, Y0 = Y1, Y1 = _; }
16337             return graticule.precision(precision);
16338           };
16339
16340           graticule.extentMinor = function(_) {
16341             if (!arguments.length) { return [[x0, y0], [x1, y1]]; }
16342             x0 = +_[0][0], x1 = +_[1][0];
16343             y0 = +_[0][1], y1 = +_[1][1];
16344             if (x0 > x1) { _ = x0, x0 = x1, x1 = _; }
16345             if (y0 > y1) { _ = y0, y0 = y1, y1 = _; }
16346             return graticule.precision(precision);
16347           };
16348
16349           graticule.step = function(_) {
16350             if (!arguments.length) { return graticule.stepMinor(); }
16351             return graticule.stepMajor(_).stepMinor(_);
16352           };
16353
16354           graticule.stepMajor = function(_) {
16355             if (!arguments.length) { return [DX, DY]; }
16356             DX = +_[0], DY = +_[1];
16357             return graticule;
16358           };
16359
16360           graticule.stepMinor = function(_) {
16361             if (!arguments.length) { return [dx, dy]; }
16362             dx = +_[0], dy = +_[1];
16363             return graticule;
16364           };
16365
16366           graticule.precision = function(_) {
16367             if (!arguments.length) { return precision; }
16368             precision = +_;
16369             x = graticuleX(y0, y1, 90);
16370             y = graticuleY(x0, x1, precision);
16371             X = graticuleX(Y0, Y1, 90);
16372             Y = graticuleY(X0, X1, precision);
16373             return graticule;
16374           };
16375
16376           return graticule
16377               .extentMajor([[-180, -90 + epsilon$2], [180, 90 - epsilon$2]])
16378               .extentMinor([[-180, -80 - epsilon$2], [180, 80 + epsilon$2]]);
16379         }
16380
16381         function graticule10() {
16382           return graticule()();
16383         }
16384
16385         function interpolate$1(a, b) {
16386           var x0 = a[0] * radians,
16387               y0 = a[1] * radians,
16388               x1 = b[0] * radians,
16389               y1 = b[1] * radians,
16390               cy0 = cos$1(y0),
16391               sy0 = sin$1(y0),
16392               cy1 = cos$1(y1),
16393               sy1 = sin$1(y1),
16394               kx0 = cy0 * cos$1(x0),
16395               ky0 = cy0 * sin$1(x0),
16396               kx1 = cy1 * cos$1(x1),
16397               ky1 = cy1 * sin$1(x1),
16398               d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),
16399               k = sin$1(d);
16400
16401           var interpolate = d ? function(t) {
16402             var B = sin$1(t *= d) / k,
16403                 A = sin$1(d - t) / k,
16404                 x = A * kx0 + B * kx1,
16405                 y = A * ky0 + B * ky1,
16406                 z = A * sy0 + B * sy1;
16407             return [
16408               atan2(y, x) * degrees$1,
16409               atan2(z, sqrt(x * x + y * y)) * degrees$1
16410             ];
16411           } : function() {
16412             return [x0 * degrees$1, y0 * degrees$1];
16413           };
16414
16415           interpolate.distance = d;
16416
16417           return interpolate;
16418         }
16419
16420         function identity$4(x) {
16421           return x;
16422         }
16423
16424         var areaSum$1 = adder(),
16425             areaRingSum$1 = adder(),
16426             x00,
16427             y00,
16428             x0$1,
16429             y0$1;
16430
16431         var areaStream$1 = {
16432           point: noop$4,
16433           lineStart: noop$4,
16434           lineEnd: noop$4,
16435           polygonStart: function() {
16436             areaStream$1.lineStart = areaRingStart$1;
16437             areaStream$1.lineEnd = areaRingEnd$1;
16438           },
16439           polygonEnd: function() {
16440             areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$4;
16441             areaSum$1.add(abs$2(areaRingSum$1));
16442             areaRingSum$1.reset();
16443           },
16444           result: function() {
16445             var area = areaSum$1 / 2;
16446             areaSum$1.reset();
16447             return area;
16448           }
16449         };
16450
16451         function areaRingStart$1() {
16452           areaStream$1.point = areaPointFirst$1;
16453         }
16454
16455         function areaPointFirst$1(x, y) {
16456           areaStream$1.point = areaPoint$1;
16457           x00 = x0$1 = x, y00 = y0$1 = y;
16458         }
16459
16460         function areaPoint$1(x, y) {
16461           areaRingSum$1.add(y0$1 * x - x0$1 * y);
16462           x0$1 = x, y0$1 = y;
16463         }
16464
16465         function areaRingEnd$1() {
16466           areaPoint$1(x00, y00);
16467         }
16468
16469         var x0$2 = Infinity,
16470             y0$2 = x0$2,
16471             x1 = -x0$2,
16472             y1 = x1;
16473
16474         var boundsStream$1 = {
16475           point: boundsPoint$1,
16476           lineStart: noop$4,
16477           lineEnd: noop$4,
16478           polygonStart: noop$4,
16479           polygonEnd: noop$4,
16480           result: function() {
16481             var bounds = [[x0$2, y0$2], [x1, y1]];
16482             x1 = y1 = -(y0$2 = x0$2 = Infinity);
16483             return bounds;
16484           }
16485         };
16486
16487         function boundsPoint$1(x, y) {
16488           if (x < x0$2) { x0$2 = x; }
16489           if (x > x1) { x1 = x; }
16490           if (y < y0$2) { y0$2 = y; }
16491           if (y > y1) { y1 = y; }
16492         }
16493
16494         // TODO Enforce positive area for exterior, negative area for interior?
16495
16496         var X0$1 = 0,
16497             Y0$1 = 0,
16498             Z0$1 = 0,
16499             X1$1 = 0,
16500             Y1$1 = 0,
16501             Z1$1 = 0,
16502             X2$1 = 0,
16503             Y2$1 = 0,
16504             Z2$1 = 0,
16505             x00$1,
16506             y00$1,
16507             x0$3,
16508             y0$3;
16509
16510         var centroidStream$1 = {
16511           point: centroidPoint$1,
16512           lineStart: centroidLineStart$1,
16513           lineEnd: centroidLineEnd$1,
16514           polygonStart: function() {
16515             centroidStream$1.lineStart = centroidRingStart$1;
16516             centroidStream$1.lineEnd = centroidRingEnd$1;
16517           },
16518           polygonEnd: function() {
16519             centroidStream$1.point = centroidPoint$1;
16520             centroidStream$1.lineStart = centroidLineStart$1;
16521             centroidStream$1.lineEnd = centroidLineEnd$1;
16522           },
16523           result: function() {
16524             var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]
16525                 : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]
16526                 : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]
16527                 : [NaN, NaN];
16528             X0$1 = Y0$1 = Z0$1 =
16529             X1$1 = Y1$1 = Z1$1 =
16530             X2$1 = Y2$1 = Z2$1 = 0;
16531             return centroid;
16532           }
16533         };
16534
16535         function centroidPoint$1(x, y) {
16536           X0$1 += x;
16537           Y0$1 += y;
16538           ++Z0$1;
16539         }
16540
16541         function centroidLineStart$1() {
16542           centroidStream$1.point = centroidPointFirstLine;
16543         }
16544
16545         function centroidPointFirstLine(x, y) {
16546           centroidStream$1.point = centroidPointLine;
16547           centroidPoint$1(x0$3 = x, y0$3 = y);
16548         }
16549
16550         function centroidPointLine(x, y) {
16551           var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy);
16552           X1$1 += z * (x0$3 + x) / 2;
16553           Y1$1 += z * (y0$3 + y) / 2;
16554           Z1$1 += z;
16555           centroidPoint$1(x0$3 = x, y0$3 = y);
16556         }
16557
16558         function centroidLineEnd$1() {
16559           centroidStream$1.point = centroidPoint$1;
16560         }
16561
16562         function centroidRingStart$1() {
16563           centroidStream$1.point = centroidPointFirstRing;
16564         }
16565
16566         function centroidRingEnd$1() {
16567           centroidPointRing(x00$1, y00$1);
16568         }
16569
16570         function centroidPointFirstRing(x, y) {
16571           centroidStream$1.point = centroidPointRing;
16572           centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);
16573         }
16574
16575         function centroidPointRing(x, y) {
16576           var dx = x - x0$3,
16577               dy = y - y0$3,
16578               z = sqrt(dx * dx + dy * dy);
16579
16580           X1$1 += z * (x0$3 + x) / 2;
16581           Y1$1 += z * (y0$3 + y) / 2;
16582           Z1$1 += z;
16583
16584           z = y0$3 * x - x0$3 * y;
16585           X2$1 += z * (x0$3 + x);
16586           Y2$1 += z * (y0$3 + y);
16587           Z2$1 += z * 3;
16588           centroidPoint$1(x0$3 = x, y0$3 = y);
16589         }
16590
16591         function PathContext(context) {
16592           this._context = context;
16593         }
16594
16595         PathContext.prototype = {
16596           _radius: 4.5,
16597           pointRadius: function(_) {
16598             return this._radius = _, this;
16599           },
16600           polygonStart: function() {
16601             this._line = 0;
16602           },
16603           polygonEnd: function() {
16604             this._line = NaN;
16605           },
16606           lineStart: function() {
16607             this._point = 0;
16608           },
16609           lineEnd: function() {
16610             if (this._line === 0) { this._context.closePath(); }
16611             this._point = NaN;
16612           },
16613           point: function(x, y) {
16614             switch (this._point) {
16615               case 0: {
16616                 this._context.moveTo(x, y);
16617                 this._point = 1;
16618                 break;
16619               }
16620               case 1: {
16621                 this._context.lineTo(x, y);
16622                 break;
16623               }
16624               default: {
16625                 this._context.moveTo(x + this._radius, y);
16626                 this._context.arc(x, y, this._radius, 0, tau$3);
16627                 break;
16628               }
16629             }
16630           },
16631           result: noop$4
16632         };
16633
16634         var lengthSum$1 = adder(),
16635             lengthRing,
16636             x00$2,
16637             y00$2,
16638             x0$4,
16639             y0$4;
16640
16641         var lengthStream$1 = {
16642           point: noop$4,
16643           lineStart: function() {
16644             lengthStream$1.point = lengthPointFirst$1;
16645           },
16646           lineEnd: function() {
16647             if (lengthRing) { lengthPoint$1(x00$2, y00$2); }
16648             lengthStream$1.point = noop$4;
16649           },
16650           polygonStart: function() {
16651             lengthRing = true;
16652           },
16653           polygonEnd: function() {
16654             lengthRing = null;
16655           },
16656           result: function() {
16657             var length = +lengthSum$1;
16658             lengthSum$1.reset();
16659             return length;
16660           }
16661         };
16662
16663         function lengthPointFirst$1(x, y) {
16664           lengthStream$1.point = lengthPoint$1;
16665           x00$2 = x0$4 = x, y00$2 = y0$4 = y;
16666         }
16667
16668         function lengthPoint$1(x, y) {
16669           x0$4 -= x, y0$4 -= y;
16670           lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4));
16671           x0$4 = x, y0$4 = y;
16672         }
16673
16674         function PathString() {
16675           this._string = [];
16676         }
16677
16678         PathString.prototype = {
16679           _radius: 4.5,
16680           _circle: circle$1(4.5),
16681           pointRadius: function(_) {
16682             if ((_ = +_) !== this._radius) { this._radius = _, this._circle = null; }
16683             return this;
16684           },
16685           polygonStart: function() {
16686             this._line = 0;
16687           },
16688           polygonEnd: function() {
16689             this._line = NaN;
16690           },
16691           lineStart: function() {
16692             this._point = 0;
16693           },
16694           lineEnd: function() {
16695             if (this._line === 0) { this._string.push("Z"); }
16696             this._point = NaN;
16697           },
16698           point: function(x, y) {
16699             switch (this._point) {
16700               case 0: {
16701                 this._string.push("M", x, ",", y);
16702                 this._point = 1;
16703                 break;
16704               }
16705               case 1: {
16706                 this._string.push("L", x, ",", y);
16707                 break;
16708               }
16709               default: {
16710                 if (this._circle == null) { this._circle = circle$1(this._radius); }
16711                 this._string.push("M", x, ",", y, this._circle);
16712                 break;
16713               }
16714             }
16715           },
16716           result: function() {
16717             if (this._string.length) {
16718               var result = this._string.join("");
16719               this._string = [];
16720               return result;
16721             } else {
16722               return null;
16723             }
16724           }
16725         };
16726
16727         function circle$1(radius) {
16728           return "m0," + radius
16729               + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius
16730               + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius
16731               + "z";
16732         }
16733
16734         function d3_geoPath(projection, context) {
16735           var pointRadius = 4.5,
16736               projectionStream,
16737               contextStream;
16738
16739           function path(object) {
16740             if (object) {
16741               if (typeof pointRadius === "function") { contextStream.pointRadius(+pointRadius.apply(this, arguments)); }
16742               d3_geoStream(object, projectionStream(contextStream));
16743             }
16744             return contextStream.result();
16745           }
16746
16747           path.area = function(object) {
16748             d3_geoStream(object, projectionStream(areaStream$1));
16749             return areaStream$1.result();
16750           };
16751
16752           path.measure = function(object) {
16753             d3_geoStream(object, projectionStream(lengthStream$1));
16754             return lengthStream$1.result();
16755           };
16756
16757           path.bounds = function(object) {
16758             d3_geoStream(object, projectionStream(boundsStream$1));
16759             return boundsStream$1.result();
16760           };
16761
16762           path.centroid = function(object) {
16763             d3_geoStream(object, projectionStream(centroidStream$1));
16764             return centroidStream$1.result();
16765           };
16766
16767           path.projection = function(_) {
16768             return arguments.length ? (projectionStream = _ == null ? (projection = null, identity$4) : (projection = _).stream, path) : projection;
16769           };
16770
16771           path.context = function(_) {
16772             if (!arguments.length) { return context; }
16773             contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);
16774             if (typeof pointRadius !== "function") { contextStream.pointRadius(pointRadius); }
16775             return path;
16776           };
16777
16778           path.pointRadius = function(_) {
16779             if (!arguments.length) { return pointRadius; }
16780             pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
16781             return path;
16782           };
16783
16784           return path.projection(projection).context(context);
16785         }
16786
16787         function d3_geoTransform(methods) {
16788           return {
16789             stream: transformer(methods)
16790           };
16791         }
16792
16793         function transformer(methods) {
16794           return function(stream) {
16795             var s = new TransformStream;
16796             for (var key in methods) { s[key] = methods[key]; }
16797             s.stream = stream;
16798             return s;
16799           };
16800         }
16801
16802         function TransformStream() {}
16803
16804         TransformStream.prototype = {
16805           constructor: TransformStream,
16806           point: function(x, y) { this.stream.point(x, y); },
16807           sphere: function() { this.stream.sphere(); },
16808           lineStart: function() { this.stream.lineStart(); },
16809           lineEnd: function() { this.stream.lineEnd(); },
16810           polygonStart: function() { this.stream.polygonStart(); },
16811           polygonEnd: function() { this.stream.polygonEnd(); }
16812         };
16813
16814         function fit(projection, fitBounds, object) {
16815           var clip = projection.clipExtent && projection.clipExtent();
16816           projection.scale(150).translate([0, 0]);
16817           if (clip != null) { projection.clipExtent(null); }
16818           d3_geoStream(object, projection.stream(boundsStream$1));
16819           fitBounds(boundsStream$1.result());
16820           if (clip != null) { projection.clipExtent(clip); }
16821           return projection;
16822         }
16823
16824         function fitExtent(projection, extent, object) {
16825           return fit(projection, function(b) {
16826             var w = extent[1][0] - extent[0][0],
16827                 h = extent[1][1] - extent[0][1],
16828                 k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),
16829                 x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,
16830                 y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;
16831             projection.scale(150 * k).translate([x, y]);
16832           }, object);
16833         }
16834
16835         function fitSize(projection, size, object) {
16836           return fitExtent(projection, [[0, 0], size], object);
16837         }
16838
16839         function fitWidth(projection, width, object) {
16840           return fit(projection, function(b) {
16841             var w = +width,
16842                 k = w / (b[1][0] - b[0][0]),
16843                 x = (w - k * (b[1][0] + b[0][0])) / 2,
16844                 y = -k * b[0][1];
16845             projection.scale(150 * k).translate([x, y]);
16846           }, object);
16847         }
16848
16849         function fitHeight(projection, height, object) {
16850           return fit(projection, function(b) {
16851             var h = +height,
16852                 k = h / (b[1][1] - b[0][1]),
16853                 x = -k * b[0][0],
16854                 y = (h - k * (b[1][1] + b[0][1])) / 2;
16855             projection.scale(150 * k).translate([x, y]);
16856           }, object);
16857         }
16858
16859         var maxDepth = 16, // maximum depth of subdivision
16860             cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance)
16861
16862         function resample(project, delta2) {
16863           return +delta2 ? resample$1(project, delta2) : resampleNone(project);
16864         }
16865
16866         function resampleNone(project) {
16867           return transformer({
16868             point: function(x, y) {
16869               x = project(x, y);
16870               this.stream.point(x[0], x[1]);
16871             }
16872           });
16873         }
16874
16875         function resample$1(project, delta2) {
16876
16877           function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {
16878             var dx = x1 - x0,
16879                 dy = y1 - y0,
16880                 d2 = dx * dx + dy * dy;
16881             if (d2 > 4 * delta2 && depth--) {
16882               var a = a0 + a1,
16883                   b = b0 + b1,
16884                   c = c0 + c1,
16885                   m = sqrt(a * a + b * b + c * c),
16886                   phi2 = asin(c /= m),
16887                   lambda2 = abs$2(abs$2(c) - 1) < epsilon$2 || abs$2(lambda0 - lambda1) < epsilon$2 ? (lambda0 + lambda1) / 2 : atan2(b, a),
16888                   p = project(lambda2, phi2),
16889                   x2 = p[0],
16890                   y2 = p[1],
16891                   dx2 = x2 - x0,
16892                   dy2 = y2 - y0,
16893                   dz = dy * dx2 - dx * dy2;
16894               if (dz * dz / d2 > delta2 // perpendicular projected distance
16895                   || abs$2((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end
16896                   || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance
16897                 resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);
16898                 stream.point(x2, y2);
16899                 resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);
16900               }
16901             }
16902           }
16903           return function(stream) {
16904             var lambda00, x00, y00, a00, b00, c00, // first point
16905                 lambda0, x0, y0, a0, b0, c0; // previous point
16906
16907             var resampleStream = {
16908               point: point,
16909               lineStart: lineStart,
16910               lineEnd: lineEnd,
16911               polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },
16912               polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }
16913             };
16914
16915             function point(x, y) {
16916               x = project(x, y);
16917               stream.point(x[0], x[1]);
16918             }
16919
16920             function lineStart() {
16921               x0 = NaN;
16922               resampleStream.point = linePoint;
16923               stream.lineStart();
16924             }
16925
16926             function linePoint(lambda, phi) {
16927               var c = cartesian([lambda, phi]), p = project(lambda, phi);
16928               resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
16929               stream.point(x0, y0);
16930             }
16931
16932             function lineEnd() {
16933               resampleStream.point = point;
16934               stream.lineEnd();
16935             }
16936
16937             function ringStart() {
16938               lineStart();
16939               resampleStream.point = ringPoint;
16940               resampleStream.lineEnd = ringEnd;
16941             }
16942
16943             function ringPoint(lambda, phi) {
16944               linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
16945               resampleStream.point = linePoint;
16946             }
16947
16948             function ringEnd() {
16949               resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);
16950               resampleStream.lineEnd = lineEnd;
16951               lineEnd();
16952             }
16953
16954             return resampleStream;
16955           };
16956         }
16957
16958         var transformRadians = transformer({
16959           point: function(x, y) {
16960             this.stream.point(x * radians, y * radians);
16961           }
16962         });
16963
16964         function transformRotate(rotate) {
16965           return transformer({
16966             point: function(x, y) {
16967               var r = rotate(x, y);
16968               return this.stream.point(r[0], r[1]);
16969             }
16970           });
16971         }
16972
16973         function scaleTranslate(k, dx, dy) {
16974           function transform(x, y) {
16975             return [dx + k * x, dy - k * y];
16976           }
16977           transform.invert = function(x, y) {
16978             return [(x - dx) / k, (dy - y) / k];
16979           };
16980           return transform;
16981         }
16982
16983         function scaleTranslateRotate(k, dx, dy, alpha) {
16984           var cosAlpha = cos$1(alpha),
16985               sinAlpha = sin$1(alpha),
16986               a = cosAlpha * k,
16987               b = sinAlpha * k,
16988               ai = cosAlpha / k,
16989               bi = sinAlpha / k,
16990               ci = (sinAlpha * dy - cosAlpha * dx) / k,
16991               fi = (sinAlpha * dx + cosAlpha * dy) / k;
16992           function transform(x, y) {
16993             return [a * x - b * y + dx, dy - b * x - a * y];
16994           }
16995           transform.invert = function(x, y) {
16996             return [ai * x - bi * y + ci, fi - bi * x - ai * y];
16997           };
16998           return transform;
16999         }
17000
17001         function projection(project) {
17002           return projectionMutator(function() { return project; })();
17003         }
17004
17005         function projectionMutator(projectAt) {
17006           var project,
17007               k = 150, // scale
17008               x = 480, y = 250, // translate
17009               lambda = 0, phi = 0, // center
17010               deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate
17011               alpha = 0, // post-rotate
17012               theta = null, preclip = clipAntimeridian, // pre-clip angle
17013               x0 = null, y0, x1, y1, postclip = identity$4, // post-clip extent
17014               delta2 = 0.5, // precision
17015               projectResample,
17016               projectTransform,
17017               projectRotateTransform,
17018               cache,
17019               cacheStream;
17020
17021           function projection(point) {
17022             return projectRotateTransform(point[0] * radians, point[1] * radians);
17023           }
17024
17025           function invert(point) {
17026             point = projectRotateTransform.invert(point[0], point[1]);
17027             return point && [point[0] * degrees$1, point[1] * degrees$1];
17028           }
17029
17030           projection.stream = function(stream) {
17031             return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));
17032           };
17033
17034           projection.preclip = function(_) {
17035             return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;
17036           };
17037
17038           projection.postclip = function(_) {
17039             return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;
17040           };
17041
17042           projection.clipAngle = function(_) {
17043             return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;
17044           };
17045
17046           projection.clipExtent = function(_) {
17047             return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
17048           };
17049
17050           projection.scale = function(_) {
17051             return arguments.length ? (k = +_, recenter()) : k;
17052           };
17053
17054           projection.translate = function(_) {
17055             return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];
17056           };
17057
17058           projection.center = function(_) {
17059             return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];
17060           };
17061
17062           projection.rotate = function(_) {
17063             return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1];
17064           };
17065
17066           projection.angle = function(_) {
17067             return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees$1;
17068           };
17069
17070           projection.precision = function(_) {
17071             return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);
17072           };
17073
17074           projection.fitExtent = function(extent, object) {
17075             return fitExtent(projection, extent, object);
17076           };
17077
17078           projection.fitSize = function(size, object) {
17079             return fitSize(projection, size, object);
17080           };
17081
17082           projection.fitWidth = function(width, object) {
17083             return fitWidth(projection, width, object);
17084           };
17085
17086           projection.fitHeight = function(height, object) {
17087             return fitHeight(projection, height, object);
17088           };
17089
17090           function recenter() {
17091             var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)),
17092                 transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);
17093             rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);
17094             projectTransform = compose(project, transform);
17095             projectRotateTransform = compose(rotate, projectTransform);
17096             projectResample = resample(projectTransform, delta2);
17097             return reset();
17098           }
17099
17100           function reset() {
17101             cache = cacheStream = null;
17102             return projection;
17103           }
17104
17105           return function() {
17106             project = projectAt.apply(this, arguments);
17107             projection.invert = project.invert && invert;
17108             return recenter();
17109           };
17110         }
17111
17112         function conicProjection(projectAt) {
17113           var phi0 = 0,
17114               phi1 = pi$3 / 3,
17115               m = projectionMutator(projectAt),
17116               p = m(phi0, phi1);
17117
17118           p.parallels = function(_) {
17119             return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];
17120           };
17121
17122           return p;
17123         }
17124
17125         function cylindricalEqualAreaRaw(phi0) {
17126           var cosPhi0 = cos$1(phi0);
17127
17128           function forward(lambda, phi) {
17129             return [lambda * cosPhi0, sin$1(phi) / cosPhi0];
17130           }
17131
17132           forward.invert = function(x, y) {
17133             return [x / cosPhi0, asin(y * cosPhi0)];
17134           };
17135
17136           return forward;
17137         }
17138
17139         function conicEqualAreaRaw(y0, y1) {
17140           var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2;
17141
17142           // Are the parallels symmetrical around the Equator?
17143           if (abs$2(n) < epsilon$2) { return cylindricalEqualAreaRaw(y0); }
17144
17145           var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;
17146
17147           function project(x, y) {
17148             var r = sqrt(c - 2 * n * sin$1(y)) / n;
17149             return [r * sin$1(x *= n), r0 - r * cos$1(x)];
17150           }
17151
17152           project.invert = function(x, y) {
17153             var r0y = r0 - y;
17154             return [atan2(x, abs$2(r0y)) / n * sign$2(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];
17155           };
17156
17157           return project;
17158         }
17159
17160         function conicEqualArea() {
17161           return conicProjection(conicEqualAreaRaw)
17162               .scale(155.424)
17163               .center([0, 33.6442]);
17164         }
17165
17166         function albers() {
17167           return conicEqualArea()
17168               .parallels([29.5, 45.5])
17169               .scale(1070)
17170               .translate([480, 250])
17171               .rotate([96, 0])
17172               .center([-0.6, 38.7]);
17173         }
17174
17175         // The projections must have mutually exclusive clip regions on the sphere,
17176         // as this will avoid emitting interleaving lines and polygons.
17177         function multiplex(streams) {
17178           var n = streams.length;
17179           return {
17180             point: function(x, y) { var i = -1; while (++i < n) { streams[i].point(x, y); } },
17181             sphere: function() { var i = -1; while (++i < n) { streams[i].sphere(); } },
17182             lineStart: function() { var i = -1; while (++i < n) { streams[i].lineStart(); } },
17183             lineEnd: function() { var i = -1; while (++i < n) { streams[i].lineEnd(); } },
17184             polygonStart: function() { var i = -1; while (++i < n) { streams[i].polygonStart(); } },
17185             polygonEnd: function() { var i = -1; while (++i < n) { streams[i].polygonEnd(); } }
17186           };
17187         }
17188
17189         // A composite projection for the United States, configured by default for
17190         // 960×500. The projection also works quite well at 960×600 if you change the
17191         // scale to 1285 and adjust the translate accordingly. The set of standard
17192         // parallels for each region comes from USGS, which is published here:
17193         // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers
17194         function albersUsa() {
17195           var cache,
17196               cacheStream,
17197               lower48 = albers(), lower48Point,
17198               alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338
17199               hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007
17200               point, pointStream = {point: function(x, y) { point = [x, y]; }};
17201
17202           function albersUsa(coordinates) {
17203             var x = coordinates[0], y = coordinates[1];
17204             return point = null,
17205                 (lower48Point.point(x, y), point)
17206                 || (alaskaPoint.point(x, y), point)
17207                 || (hawaiiPoint.point(x, y), point);
17208           }
17209
17210           albersUsa.invert = function(coordinates) {
17211             var k = lower48.scale(),
17212                 t = lower48.translate(),
17213                 x = (coordinates[0] - t[0]) / k,
17214                 y = (coordinates[1] - t[1]) / k;
17215             return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska
17216                 : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii
17217                 : lower48).invert(coordinates);
17218           };
17219
17220           albersUsa.stream = function(stream) {
17221             return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);
17222           };
17223
17224           albersUsa.precision = function(_) {
17225             if (!arguments.length) { return lower48.precision(); }
17226             lower48.precision(_), alaska.precision(_), hawaii.precision(_);
17227             return reset();
17228           };
17229
17230           albersUsa.scale = function(_) {
17231             if (!arguments.length) { return lower48.scale(); }
17232             lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);
17233             return albersUsa.translate(lower48.translate());
17234           };
17235
17236           albersUsa.translate = function(_) {
17237             if (!arguments.length) { return lower48.translate(); }
17238             var k = lower48.scale(), x = +_[0], y = +_[1];
17239
17240             lower48Point = lower48
17241                 .translate(_)
17242                 .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])
17243                 .stream(pointStream);
17244
17245             alaskaPoint = alaska
17246                 .translate([x - 0.307 * k, y + 0.201 * k])
17247                 .clipExtent([[x - 0.425 * k + epsilon$2, y + 0.120 * k + epsilon$2], [x - 0.214 * k - epsilon$2, y + 0.234 * k - epsilon$2]])
17248                 .stream(pointStream);
17249
17250             hawaiiPoint = hawaii
17251                 .translate([x - 0.205 * k, y + 0.212 * k])
17252                 .clipExtent([[x - 0.214 * k + epsilon$2, y + 0.166 * k + epsilon$2], [x - 0.115 * k - epsilon$2, y + 0.234 * k - epsilon$2]])
17253                 .stream(pointStream);
17254
17255             return reset();
17256           };
17257
17258           albersUsa.fitExtent = function(extent, object) {
17259             return fitExtent(albersUsa, extent, object);
17260           };
17261
17262           albersUsa.fitSize = function(size, object) {
17263             return fitSize(albersUsa, size, object);
17264           };
17265
17266           albersUsa.fitWidth = function(width, object) {
17267             return fitWidth(albersUsa, width, object);
17268           };
17269
17270           albersUsa.fitHeight = function(height, object) {
17271             return fitHeight(albersUsa, height, object);
17272           };
17273
17274           function reset() {
17275             cache = cacheStream = null;
17276             return albersUsa;
17277           }
17278
17279           return albersUsa.scale(1070);
17280         }
17281
17282         function azimuthalRaw(scale) {
17283           return function(x, y) {
17284             var cx = cos$1(x),
17285                 cy = cos$1(y),
17286                 k = scale(cx * cy);
17287             return [
17288               k * cy * sin$1(x),
17289               k * sin$1(y)
17290             ];
17291           }
17292         }
17293
17294         function azimuthalInvert(angle) {
17295           return function(x, y) {
17296             var z = sqrt(x * x + y * y),
17297                 c = angle(z),
17298                 sc = sin$1(c),
17299                 cc = cos$1(c);
17300             return [
17301               atan2(x * sc, z * cc),
17302               asin(z && y * sc / z)
17303             ];
17304           }
17305         }
17306
17307         var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {
17308           return sqrt(2 / (1 + cxcy));
17309         });
17310
17311         azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {
17312           return 2 * asin(z / 2);
17313         });
17314
17315         function azimuthalEqualArea() {
17316           return projection(azimuthalEqualAreaRaw)
17317               .scale(124.75)
17318               .clipAngle(180 - 1e-3);
17319         }
17320
17321         var azimuthalEquidistantRaw = azimuthalRaw(function(c) {
17322           return (c = acos(c)) && c / sin$1(c);
17323         });
17324
17325         azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {
17326           return z;
17327         });
17328
17329         function azimuthalEquidistant() {
17330           return projection(azimuthalEquidistantRaw)
17331               .scale(79.4188)
17332               .clipAngle(180 - 1e-3);
17333         }
17334
17335         function mercatorRaw(lambda, phi) {
17336           return [lambda, log(tan((halfPi$2 + phi) / 2))];
17337         }
17338
17339         mercatorRaw.invert = function(x, y) {
17340           return [x, 2 * atan(exp(y)) - halfPi$2];
17341         };
17342
17343         function mercator() {
17344           return mercatorProjection(mercatorRaw)
17345               .scale(961 / tau$3);
17346         }
17347
17348         function mercatorProjection(project) {
17349           var m = projection(project),
17350               center = m.center,
17351               scale = m.scale,
17352               translate = m.translate,
17353               clipExtent = m.clipExtent,
17354               x0 = null, y0, x1, y1; // clip extent
17355
17356           m.scale = function(_) {
17357             return arguments.length ? (scale(_), reclip()) : scale();
17358           };
17359
17360           m.translate = function(_) {
17361             return arguments.length ? (translate(_), reclip()) : translate();
17362           };
17363
17364           m.center = function(_) {
17365             return arguments.length ? (center(_), reclip()) : center();
17366           };
17367
17368           m.clipExtent = function(_) {
17369             return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];
17370           };
17371
17372           function reclip() {
17373             var k = pi$3 * scale(),
17374                 t = m(rotation(m.rotate()).invert([0, 0]));
17375             return clipExtent(x0 == null
17376                 ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw
17377                 ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]
17378                 : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);
17379           }
17380
17381           return reclip();
17382         }
17383
17384         function tany(y) {
17385           return tan((halfPi$2 + y) / 2);
17386         }
17387
17388         function conicConformalRaw(y0, y1) {
17389           var cy0 = cos$1(y0),
17390               n = y0 === y1 ? sin$1(y0) : log(cy0 / cos$1(y1)) / log(tany(y1) / tany(y0)),
17391               f = cy0 * pow(tany(y0), n) / n;
17392
17393           if (!n) { return mercatorRaw; }
17394
17395           function project(x, y) {
17396             if (f > 0) { if (y < -halfPi$2 + epsilon$2) { y = -halfPi$2 + epsilon$2; } }
17397             else { if (y > halfPi$2 - epsilon$2) { y = halfPi$2 - epsilon$2; } }
17398             var r = f / pow(tany(y), n);
17399             return [r * sin$1(n * x), f - r * cos$1(n * x)];
17400           }
17401
17402           project.invert = function(x, y) {
17403             var fy = f - y, r = sign$2(n) * sqrt(x * x + fy * fy);
17404             return [atan2(x, abs$2(fy)) / n * sign$2(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi$2];
17405           };
17406
17407           return project;
17408         }
17409
17410         function conicConformal() {
17411           return conicProjection(conicConformalRaw)
17412               .scale(109.5)
17413               .parallels([30, 30]);
17414         }
17415
17416         function equirectangularRaw(lambda, phi) {
17417           return [lambda, phi];
17418         }
17419
17420         equirectangularRaw.invert = equirectangularRaw;
17421
17422         function equirectangular() {
17423           return projection(equirectangularRaw)
17424               .scale(152.63);
17425         }
17426
17427         function conicEquidistantRaw(y0, y1) {
17428           var cy0 = cos$1(y0),
17429               n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),
17430               g = cy0 / n + y0;
17431
17432           if (abs$2(n) < epsilon$2) { return equirectangularRaw; }
17433
17434           function project(x, y) {
17435             var gy = g - y, nx = n * x;
17436             return [gy * sin$1(nx), g - gy * cos$1(nx)];
17437           }
17438
17439           project.invert = function(x, y) {
17440             var gy = g - y;
17441             return [atan2(x, abs$2(gy)) / n * sign$2(gy), g - sign$2(n) * sqrt(x * x + gy * gy)];
17442           };
17443
17444           return project;
17445         }
17446
17447         function conicEquidistant() {
17448           return conicProjection(conicEquidistantRaw)
17449               .scale(131.154)
17450               .center([0, 13.9389]);
17451         }
17452
17453         var A1 = 1.340264,
17454             A2 = -0.081106,
17455             A3 = 0.000893,
17456             A4 = 0.003796,
17457             M = sqrt(3) / 2,
17458             iterations = 12;
17459
17460         function equalEarthRaw(lambda, phi) {
17461           var l = asin(M * sin$1(phi)), l2 = l * l, l6 = l2 * l2 * l2;
17462           return [
17463             lambda * cos$1(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),
17464             l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))
17465           ];
17466         }
17467
17468         equalEarthRaw.invert = function(x, y) {
17469           var l = y, l2 = l * l, l6 = l2 * l2 * l2;
17470           for (var i = 0, delta, fy, fpy; i < iterations; ++i) {
17471             fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;
17472             fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);
17473             l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;
17474             if (abs$2(delta) < epsilon2$1) { break; }
17475           }
17476           return [
17477             M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos$1(l),
17478             asin(sin$1(l) / M)
17479           ];
17480         };
17481
17482         function equalEarth() {
17483           return projection(equalEarthRaw)
17484               .scale(177.158);
17485         }
17486
17487         function gnomonicRaw(x, y) {
17488           var cy = cos$1(y), k = cos$1(x) * cy;
17489           return [cy * sin$1(x) / k, sin$1(y) / k];
17490         }
17491
17492         gnomonicRaw.invert = azimuthalInvert(atan);
17493
17494         function gnomonic() {
17495           return projection(gnomonicRaw)
17496               .scale(144.049)
17497               .clipAngle(60);
17498         }
17499
17500         function scaleTranslate$1(kx, ky, tx, ty) {
17501           return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity$4 : transformer({
17502             point: function(x, y) {
17503               this.stream.point(x * kx + tx, y * ky + ty);
17504             }
17505           });
17506         }
17507
17508         function d3_geoIdentity() {
17509           var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity$4, // scale, translate and reflect
17510               x0 = null, y0, x1, y1, // clip extent
17511               postclip = identity$4,
17512               cache,
17513               cacheStream,
17514               projection;
17515
17516           function reset() {
17517             cache = cacheStream = null;
17518             return projection;
17519           }
17520
17521           return projection = {
17522             stream: function(stream) {
17523               return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));
17524             },
17525             postclip: function(_) {
17526               return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;
17527             },
17528             clipExtent: function(_) {
17529               return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
17530             },
17531             scale: function(_) {
17532               return arguments.length ? (transform = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k;
17533             },
17534             translate: function(_) {
17535               return arguments.length ? (transform = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
17536             },
17537             reflectX: function(_) {
17538               return arguments.length ? (transform = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;
17539             },
17540             reflectY: function(_) {
17541               return arguments.length ? (transform = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;
17542             },
17543             fitExtent: function(extent, object) {
17544               return fitExtent(projection, extent, object);
17545             },
17546             fitSize: function(size, object) {
17547               return fitSize(projection, size, object);
17548             },
17549             fitWidth: function(width, object) {
17550               return fitWidth(projection, width, object);
17551             },
17552             fitHeight: function(height, object) {
17553               return fitHeight(projection, height, object);
17554             }
17555           };
17556         }
17557
17558         function naturalEarth1Raw(lambda, phi) {
17559           var phi2 = phi * phi, phi4 = phi2 * phi2;
17560           return [
17561             lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),
17562             phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))
17563           ];
17564         }
17565
17566         naturalEarth1Raw.invert = function(x, y) {
17567           var phi = y, i = 25, delta;
17568           do {
17569             var phi2 = phi * phi, phi4 = phi2 * phi2;
17570             phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /
17571                 (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));
17572           } while (abs$2(delta) > epsilon$2 && --i > 0);
17573           return [
17574             x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),
17575             phi
17576           ];
17577         };
17578
17579         function naturalEarth1() {
17580           return projection(naturalEarth1Raw)
17581               .scale(175.295);
17582         }
17583
17584         function orthographicRaw(x, y) {
17585           return [cos$1(y) * sin$1(x), sin$1(y)];
17586         }
17587
17588         orthographicRaw.invert = azimuthalInvert(asin);
17589
17590         function orthographic() {
17591           return projection(orthographicRaw)
17592               .scale(249.5)
17593               .clipAngle(90 + epsilon$2);
17594         }
17595
17596         function stereographicRaw(x, y) {
17597           var cy = cos$1(y), k = 1 + cos$1(x) * cy;
17598           return [cy * sin$1(x) / k, sin$1(y) / k];
17599         }
17600
17601         stereographicRaw.invert = azimuthalInvert(function(z) {
17602           return 2 * atan(z);
17603         });
17604
17605         function stereographic() {
17606           return projection(stereographicRaw)
17607               .scale(250)
17608               .clipAngle(142);
17609         }
17610
17611         function transverseMercatorRaw(lambda, phi) {
17612           return [log(tan((halfPi$2 + phi) / 2)), -lambda];
17613         }
17614
17615         transverseMercatorRaw.invert = function(x, y) {
17616           return [-y, 2 * atan(exp(x)) - halfPi$2];
17617         };
17618
17619         function transverseMercator() {
17620           var m = mercatorProjection(transverseMercatorRaw),
17621               center = m.center,
17622               rotate = m.rotate;
17623
17624           m.center = function(_) {
17625             return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);
17626           };
17627
17628           m.rotate = function(_) {
17629             return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);
17630           };
17631
17632           return rotate([0, 0, 90])
17633               .scale(159.155);
17634         }
17635
17636         function defaultSeparation(a, b) {
17637           return a.parent === b.parent ? 1 : 2;
17638         }
17639
17640         function meanX(children) {
17641           return children.reduce(meanXReduce, 0) / children.length;
17642         }
17643
17644         function meanXReduce(x, c) {
17645           return x + c.x;
17646         }
17647
17648         function maxY(children) {
17649           return 1 + children.reduce(maxYReduce, 0);
17650         }
17651
17652         function maxYReduce(y, c) {
17653           return Math.max(y, c.y);
17654         }
17655
17656         function leafLeft(node) {
17657           var children;
17658           while (children = node.children) { node = children[0]; }
17659           return node;
17660         }
17661
17662         function leafRight(node) {
17663           var children;
17664           while (children = node.children) { node = children[children.length - 1]; }
17665           return node;
17666         }
17667
17668         function cluster() {
17669           var separation = defaultSeparation,
17670               dx = 1,
17671               dy = 1,
17672               nodeSize = false;
17673
17674           function cluster(root) {
17675             var previousNode,
17676                 x = 0;
17677
17678             // First walk, computing the initial x & y values.
17679             root.eachAfter(function(node) {
17680               var children = node.children;
17681               if (children) {
17682                 node.x = meanX(children);
17683                 node.y = maxY(children);
17684               } else {
17685                 node.x = previousNode ? x += separation(node, previousNode) : 0;
17686                 node.y = 0;
17687                 previousNode = node;
17688               }
17689             });
17690
17691             var left = leafLeft(root),
17692                 right = leafRight(root),
17693                 x0 = left.x - separation(left, right) / 2,
17694                 x1 = right.x + separation(right, left) / 2;
17695
17696             // Second walk, normalizing x & y to the desired size.
17697             return root.eachAfter(nodeSize ? function(node) {
17698               node.x = (node.x - root.x) * dx;
17699               node.y = (root.y - node.y) * dy;
17700             } : function(node) {
17701               node.x = (node.x - x0) / (x1 - x0) * dx;
17702               node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;
17703             });
17704           }
17705
17706           cluster.separation = function(x) {
17707             return arguments.length ? (separation = x, cluster) : separation;
17708           };
17709
17710           cluster.size = function(x) {
17711             return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);
17712           };
17713
17714           cluster.nodeSize = function(x) {
17715             return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);
17716           };
17717
17718           return cluster;
17719         }
17720
17721         function count(node) {
17722           var sum = 0,
17723               children = node.children,
17724               i = children && children.length;
17725           if (!i) { sum = 1; }
17726           else { while (--i >= 0) { sum += children[i].value; } }
17727           node.value = sum;
17728         }
17729
17730         function node_count() {
17731           return this.eachAfter(count);
17732         }
17733
17734         function node_each(callback) {
17735           var node = this, current, next = [node], children, i, n;
17736           do {
17737             current = next.reverse(), next = [];
17738             while (node = current.pop()) {
17739               callback(node), children = node.children;
17740               if (children) { for (i = 0, n = children.length; i < n; ++i) {
17741                 next.push(children[i]);
17742               } }
17743             }
17744           } while (next.length);
17745           return this;
17746         }
17747
17748         function node_eachBefore(callback) {
17749           var node = this, nodes = [node], children, i;
17750           while (node = nodes.pop()) {
17751             callback(node), children = node.children;
17752             if (children) { for (i = children.length - 1; i >= 0; --i) {
17753               nodes.push(children[i]);
17754             } }
17755           }
17756           return this;
17757         }
17758
17759         function node_eachAfter(callback) {
17760           var node = this, nodes = [node], next = [], children, i, n;
17761           while (node = nodes.pop()) {
17762             next.push(node), children = node.children;
17763             if (children) { for (i = 0, n = children.length; i < n; ++i) {
17764               nodes.push(children[i]);
17765             } }
17766           }
17767           while (node = next.pop()) {
17768             callback(node);
17769           }
17770           return this;
17771         }
17772
17773         function node_sum(value) {
17774           return this.eachAfter(function(node) {
17775             var sum = +value(node.data) || 0,
17776                 children = node.children,
17777                 i = children && children.length;
17778             while (--i >= 0) { sum += children[i].value; }
17779             node.value = sum;
17780           });
17781         }
17782
17783         function node_sort(compare) {
17784           return this.eachBefore(function(node) {
17785             if (node.children) {
17786               node.children.sort(compare);
17787             }
17788           });
17789         }
17790
17791         function node_path(end) {
17792           var start = this,
17793               ancestor = leastCommonAncestor(start, end),
17794               nodes = [start];
17795           while (start !== ancestor) {
17796             start = start.parent;
17797             nodes.push(start);
17798           }
17799           var k = nodes.length;
17800           while (end !== ancestor) {
17801             nodes.splice(k, 0, end);
17802             end = end.parent;
17803           }
17804           return nodes;
17805         }
17806
17807         function leastCommonAncestor(a, b) {
17808           if (a === b) { return a; }
17809           var aNodes = a.ancestors(),
17810               bNodes = b.ancestors(),
17811               c = null;
17812           a = aNodes.pop();
17813           b = bNodes.pop();
17814           while (a === b) {
17815             c = a;
17816             a = aNodes.pop();
17817             b = bNodes.pop();
17818           }
17819           return c;
17820         }
17821
17822         function node_ancestors() {
17823           var node = this, nodes = [node];
17824           while (node = node.parent) {
17825             nodes.push(node);
17826           }
17827           return nodes;
17828         }
17829
17830         function node_descendants() {
17831           var nodes = [];
17832           this.each(function(node) {
17833             nodes.push(node);
17834           });
17835           return nodes;
17836         }
17837
17838         function node_leaves() {
17839           var leaves = [];
17840           this.eachBefore(function(node) {
17841             if (!node.children) {
17842               leaves.push(node);
17843             }
17844           });
17845           return leaves;
17846         }
17847
17848         function node_links() {
17849           var root = this, links = [];
17850           root.each(function(node) {
17851             if (node !== root) { // Don’t include the root’s parent, if any.
17852               links.push({source: node.parent, target: node});
17853             }
17854           });
17855           return links;
17856         }
17857
17858         function hierarchy(data, children) {
17859           var root = new Node(data),
17860               valued = +data.value && (root.value = data.value),
17861               node,
17862               nodes = [root],
17863               child,
17864               childs,
17865               i,
17866               n;
17867
17868           if (children == null) { children = defaultChildren; }
17869
17870           while (node = nodes.pop()) {
17871             if (valued) { node.value = +node.data.value; }
17872             if ((childs = children(node.data)) && (n = childs.length)) {
17873               node.children = new Array(n);
17874               for (i = n - 1; i >= 0; --i) {
17875                 nodes.push(child = node.children[i] = new Node(childs[i]));
17876                 child.parent = node;
17877                 child.depth = node.depth + 1;
17878               }
17879             }
17880           }
17881
17882           return root.eachBefore(computeHeight);
17883         }
17884
17885         function node_copy() {
17886           return hierarchy(this).eachBefore(copyData);
17887         }
17888
17889         function defaultChildren(d) {
17890           return d.children;
17891         }
17892
17893         function copyData(node) {
17894           node.data = node.data.data;
17895         }
17896
17897         function computeHeight(node) {
17898           var height = 0;
17899           do { node.height = height; }
17900           while ((node = node.parent) && (node.height < ++height));
17901         }
17902
17903         function Node(data) {
17904           this.data = data;
17905           this.depth =
17906           this.height = 0;
17907           this.parent = null;
17908         }
17909
17910         Node.prototype = hierarchy.prototype = {
17911           constructor: Node,
17912           count: node_count,
17913           each: node_each,
17914           eachAfter: node_eachAfter,
17915           eachBefore: node_eachBefore,
17916           sum: node_sum,
17917           sort: node_sort,
17918           path: node_path,
17919           ancestors: node_ancestors,
17920           descendants: node_descendants,
17921           leaves: node_leaves,
17922           links: node_links,
17923           copy: node_copy
17924         };
17925
17926         var slice$8 = Array.prototype.slice;
17927
17928         function shuffle$1(array) {
17929           var m = array.length,
17930               t,
17931               i;
17932
17933           while (m) {
17934             i = Math.random() * m-- | 0;
17935             t = array[m];
17936             array[m] = array[i];
17937             array[i] = t;
17938           }
17939
17940           return array;
17941         }
17942
17943         function enclose(circles) {
17944           var i = 0, n = (circles = shuffle$1(slice$8.call(circles))).length, B = [], p, e;
17945
17946           while (i < n) {
17947             p = circles[i];
17948             if (e && enclosesWeak(e, p)) { ++i; }
17949             else { e = encloseBasis(B = extendBasis(B, p)), i = 0; }
17950           }
17951
17952           return e;
17953         }
17954
17955         function extendBasis(B, p) {
17956           var i, j;
17957
17958           if (enclosesWeakAll(p, B)) { return [p]; }
17959
17960           // If we get here then B must have at least one element.
17961           for (i = 0; i < B.length; ++i) {
17962             if (enclosesNot(p, B[i])
17963                 && enclosesWeakAll(encloseBasis2(B[i], p), B)) {
17964               return [B[i], p];
17965             }
17966           }
17967
17968           // If we get here then B must have at least two elements.
17969           for (i = 0; i < B.length - 1; ++i) {
17970             for (j = i + 1; j < B.length; ++j) {
17971               if (enclosesNot(encloseBasis2(B[i], B[j]), p)
17972                   && enclosesNot(encloseBasis2(B[i], p), B[j])
17973                   && enclosesNot(encloseBasis2(B[j], p), B[i])
17974                   && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {
17975                 return [B[i], B[j], p];
17976               }
17977             }
17978           }
17979
17980           // If we get here then something is very wrong.
17981           throw new Error;
17982         }
17983
17984         function enclosesNot(a, b) {
17985           var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;
17986           return dr < 0 || dr * dr < dx * dx + dy * dy;
17987         }
17988
17989         function enclosesWeak(a, b) {
17990           var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;
17991           return dr > 0 && dr * dr > dx * dx + dy * dy;
17992         }
17993
17994         function enclosesWeakAll(a, B) {
17995           for (var i = 0; i < B.length; ++i) {
17996             if (!enclosesWeak(a, B[i])) {
17997               return false;
17998             }
17999           }
18000           return true;
18001         }
18002
18003         function encloseBasis(B) {
18004           switch (B.length) {
18005             case 1: return encloseBasis1(B[0]);
18006             case 2: return encloseBasis2(B[0], B[1]);
18007             case 3: return encloseBasis3(B[0], B[1], B[2]);
18008           }
18009         }
18010
18011         function encloseBasis1(a) {
18012           return {
18013             x: a.x,
18014             y: a.y,
18015             r: a.r
18016           };
18017         }
18018
18019         function encloseBasis2(a, b) {
18020           var x1 = a.x, y1 = a.y, r1 = a.r,
18021               x2 = b.x, y2 = b.y, r2 = b.r,
18022               x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,
18023               l = Math.sqrt(x21 * x21 + y21 * y21);
18024           return {
18025             x: (x1 + x2 + x21 / l * r21) / 2,
18026             y: (y1 + y2 + y21 / l * r21) / 2,
18027             r: (l + r1 + r2) / 2
18028           };
18029         }
18030
18031         function encloseBasis3(a, b, c) {
18032           var x1 = a.x, y1 = a.y, r1 = a.r,
18033               x2 = b.x, y2 = b.y, r2 = b.r,
18034               x3 = c.x, y3 = c.y, r3 = c.r,
18035               a2 = x1 - x2,
18036               a3 = x1 - x3,
18037               b2 = y1 - y2,
18038               b3 = y1 - y3,
18039               c2 = r2 - r1,
18040               c3 = r3 - r1,
18041               d1 = x1 * x1 + y1 * y1 - r1 * r1,
18042               d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,
18043               d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,
18044               ab = a3 * b2 - a2 * b3,
18045               xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,
18046               xb = (b3 * c2 - b2 * c3) / ab,
18047               ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,
18048               yb = (a2 * c3 - a3 * c2) / ab,
18049               A = xb * xb + yb * yb - 1,
18050               B = 2 * (r1 + xa * xb + ya * yb),
18051               C = xa * xa + ya * ya - r1 * r1,
18052               r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);
18053           return {
18054             x: x1 + xa + xb * r,
18055             y: y1 + ya + yb * r,
18056             r: r
18057           };
18058         }
18059
18060         function place(b, a, c) {
18061           var dx = b.x - a.x, x, a2,
18062               dy = b.y - a.y, y, b2,
18063               d2 = dx * dx + dy * dy;
18064           if (d2) {
18065             a2 = a.r + c.r, a2 *= a2;
18066             b2 = b.r + c.r, b2 *= b2;
18067             if (a2 > b2) {
18068               x = (d2 + b2 - a2) / (2 * d2);
18069               y = Math.sqrt(Math.max(0, b2 / d2 - x * x));
18070               c.x = b.x - x * dx - y * dy;
18071               c.y = b.y - x * dy + y * dx;
18072             } else {
18073               x = (d2 + a2 - b2) / (2 * d2);
18074               y = Math.sqrt(Math.max(0, a2 / d2 - x * x));
18075               c.x = a.x + x * dx - y * dy;
18076               c.y = a.y + x * dy + y * dx;
18077             }
18078           } else {
18079             c.x = a.x + c.r;
18080             c.y = a.y;
18081           }
18082         }
18083
18084         function intersects(a, b) {
18085           var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;
18086           return dr > 0 && dr * dr > dx * dx + dy * dy;
18087         }
18088
18089         function score(node) {
18090           var a = node._,
18091               b = node.next._,
18092               ab = a.r + b.r,
18093               dx = (a.x * b.r + b.x * a.r) / ab,
18094               dy = (a.y * b.r + b.y * a.r) / ab;
18095           return dx * dx + dy * dy;
18096         }
18097
18098         function Node$1(circle) {
18099           this._ = circle;
18100           this.next = null;
18101           this.previous = null;
18102         }
18103
18104         function packEnclose(circles) {
18105           if (!(n = circles.length)) { return 0; }
18106
18107           var a, b, c, n, aa, ca, i, j, k, sj, sk;
18108
18109           // Place the first circle.
18110           a = circles[0], a.x = 0, a.y = 0;
18111           if (!(n > 1)) { return a.r; }
18112
18113           // Place the second circle.
18114           b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;
18115           if (!(n > 2)) { return a.r + b.r; }
18116
18117           // Place the third circle.
18118           place(b, a, c = circles[2]);
18119
18120           // Initialize the front-chain using the first three circles a, b and c.
18121           a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);
18122           a.next = c.previous = b;
18123           b.next = a.previous = c;
18124           c.next = b.previous = a;
18125
18126           // Attempt to place each remaining circle…
18127           pack: for (i = 3; i < n; ++i) {
18128             place(a._, b._, c = circles[i]), c = new Node$1(c);
18129
18130             // Find the closest intersecting circle on the front-chain, if any.
18131             // “Closeness” is determined by linear distance along the front-chain.
18132             // “Ahead” or “behind” is likewise determined by linear distance.
18133             j = b.next, k = a.previous, sj = b._.r, sk = a._.r;
18134             do {
18135               if (sj <= sk) {
18136                 if (intersects(j._, c._)) {
18137                   b = j, a.next = b, b.previous = a, --i;
18138                   continue pack;
18139                 }
18140                 sj += j._.r, j = j.next;
18141               } else {
18142                 if (intersects(k._, c._)) {
18143                   a = k, a.next = b, b.previous = a, --i;
18144                   continue pack;
18145                 }
18146                 sk += k._.r, k = k.previous;
18147               }
18148             } while (j !== k.next);
18149
18150             // Success! Insert the new circle c between a and b.
18151             c.previous = a, c.next = b, a.next = b.previous = b = c;
18152
18153             // Compute the new closest circle pair to the centroid.
18154             aa = score(a);
18155             while ((c = c.next) !== b) {
18156               if ((ca = score(c)) < aa) {
18157                 a = c, aa = ca;
18158               }
18159             }
18160             b = a.next;
18161           }
18162
18163           // Compute the enclosing circle of the front chain.
18164           a = [b._], c = b; while ((c = c.next) !== b) { a.push(c._); } c = enclose(a);
18165
18166           // Translate the circles to put the enclosing circle around the origin.
18167           for (i = 0; i < n; ++i) { a = circles[i], a.x -= c.x, a.y -= c.y; }
18168
18169           return c.r;
18170         }
18171
18172         function siblings(circles) {
18173           packEnclose(circles);
18174           return circles;
18175         }
18176
18177         function optional(f) {
18178           return f == null ? null : required(f);
18179         }
18180
18181         function required(f) {
18182           if (typeof f !== "function") { throw new Error; }
18183           return f;
18184         }
18185
18186         function constantZero() {
18187           return 0;
18188         }
18189
18190         function constant$9(x) {
18191           return function() {
18192             return x;
18193           };
18194         }
18195
18196         function defaultRadius$1(d) {
18197           return Math.sqrt(d.value);
18198         }
18199
18200         function index$1() {
18201           var radius = null,
18202               dx = 1,
18203               dy = 1,
18204               padding = constantZero;
18205
18206           function pack(root) {
18207             root.x = dx / 2, root.y = dy / 2;
18208             if (radius) {
18209               root.eachBefore(radiusLeaf(radius))
18210                   .eachAfter(packChildren(padding, 0.5))
18211                   .eachBefore(translateChild(1));
18212             } else {
18213               root.eachBefore(radiusLeaf(defaultRadius$1))
18214                   .eachAfter(packChildren(constantZero, 1))
18215                   .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))
18216                   .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));
18217             }
18218             return root;
18219           }
18220
18221           pack.radius = function(x) {
18222             return arguments.length ? (radius = optional(x), pack) : radius;
18223           };
18224
18225           pack.size = function(x) {
18226             return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];
18227           };
18228
18229           pack.padding = function(x) {
18230             return arguments.length ? (padding = typeof x === "function" ? x : constant$9(+x), pack) : padding;
18231           };
18232
18233           return pack;
18234         }
18235
18236         function radiusLeaf(radius) {
18237           return function(node) {
18238             if (!node.children) {
18239               node.r = Math.max(0, +radius(node) || 0);
18240             }
18241           };
18242         }
18243
18244         function packChildren(padding, k) {
18245           return function(node) {
18246             if (children = node.children) {
18247               var children,
18248                   i,
18249                   n = children.length,
18250                   r = padding(node) * k || 0,
18251                   e;
18252
18253               if (r) { for (i = 0; i < n; ++i) { children[i].r += r; } }
18254               e = packEnclose(children);
18255               if (r) { for (i = 0; i < n; ++i) { children[i].r -= r; } }
18256               node.r = e + r;
18257             }
18258           };
18259         }
18260
18261         function translateChild(k) {
18262           return function(node) {
18263             var parent = node.parent;
18264             node.r *= k;
18265             if (parent) {
18266               node.x = parent.x + k * node.x;
18267               node.y = parent.y + k * node.y;
18268             }
18269           };
18270         }
18271
18272         function roundNode(node) {
18273           node.x0 = Math.round(node.x0);
18274           node.y0 = Math.round(node.y0);
18275           node.x1 = Math.round(node.x1);
18276           node.y1 = Math.round(node.y1);
18277         }
18278
18279         function treemapDice(parent, x0, y0, x1, y1) {
18280           var nodes = parent.children,
18281               node,
18282               i = -1,
18283               n = nodes.length,
18284               k = parent.value && (x1 - x0) / parent.value;
18285
18286           while (++i < n) {
18287             node = nodes[i], node.y0 = y0, node.y1 = y1;
18288             node.x0 = x0, node.x1 = x0 += node.value * k;
18289           }
18290         }
18291
18292         function partition() {
18293           var dx = 1,
18294               dy = 1,
18295               padding = 0,
18296               round = false;
18297
18298           function partition(root) {
18299             var n = root.height + 1;
18300             root.x0 =
18301             root.y0 = padding;
18302             root.x1 = dx;
18303             root.y1 = dy / n;
18304             root.eachBefore(positionNode(dy, n));
18305             if (round) { root.eachBefore(roundNode); }
18306             return root;
18307           }
18308
18309           function positionNode(dy, n) {
18310             return function(node) {
18311               if (node.children) {
18312                 treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);
18313               }
18314               var x0 = node.x0,
18315                   y0 = node.y0,
18316                   x1 = node.x1 - padding,
18317                   y1 = node.y1 - padding;
18318               if (x1 < x0) { x0 = x1 = (x0 + x1) / 2; }
18319               if (y1 < y0) { y0 = y1 = (y0 + y1) / 2; }
18320               node.x0 = x0;
18321               node.y0 = y0;
18322               node.x1 = x1;
18323               node.y1 = y1;
18324             };
18325           }
18326
18327           partition.round = function(x) {
18328             return arguments.length ? (round = !!x, partition) : round;
18329           };
18330
18331           partition.size = function(x) {
18332             return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];
18333           };
18334
18335           partition.padding = function(x) {
18336             return arguments.length ? (padding = +x, partition) : padding;
18337           };
18338
18339           return partition;
18340         }
18341
18342         var keyPrefix$1 = "$", // Protect against keys like “__proto__”.
18343             preroot = {depth: -1},
18344             ambiguous = {};
18345
18346         function defaultId(d) {
18347           return d.id;
18348         }
18349
18350         function defaultParentId(d) {
18351           return d.parentId;
18352         }
18353
18354         function stratify() {
18355           var id = defaultId,
18356               parentId = defaultParentId;
18357
18358           function stratify(data) {
18359             var d,
18360                 i,
18361                 n = data.length,
18362                 root,
18363                 parent,
18364                 node,
18365                 nodes = new Array(n),
18366                 nodeId,
18367                 nodeKey,
18368                 nodeByKey = {};
18369
18370             for (i = 0; i < n; ++i) {
18371               d = data[i], node = nodes[i] = new Node(d);
18372               if ((nodeId = id(d, i, data)) != null && (nodeId += "")) {
18373                 nodeKey = keyPrefix$1 + (node.id = nodeId);
18374                 nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;
18375               }
18376             }
18377
18378             for (i = 0; i < n; ++i) {
18379               node = nodes[i], nodeId = parentId(data[i], i, data);
18380               if (nodeId == null || !(nodeId += "")) {
18381                 if (root) { throw new Error("multiple roots"); }
18382                 root = node;
18383               } else {
18384                 parent = nodeByKey[keyPrefix$1 + nodeId];
18385                 if (!parent) { throw new Error("missing: " + nodeId); }
18386                 if (parent === ambiguous) { throw new Error("ambiguous: " + nodeId); }
18387                 if (parent.children) { parent.children.push(node); }
18388                 else { parent.children = [node]; }
18389                 node.parent = parent;
18390               }
18391             }
18392
18393             if (!root) { throw new Error("no root"); }
18394             root.parent = preroot;
18395             root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);
18396             root.parent = null;
18397             if (n > 0) { throw new Error("cycle"); }
18398
18399             return root;
18400           }
18401
18402           stratify.id = function(x) {
18403             return arguments.length ? (id = required(x), stratify) : id;
18404           };
18405
18406           stratify.parentId = function(x) {
18407             return arguments.length ? (parentId = required(x), stratify) : parentId;
18408           };
18409
18410           return stratify;
18411         }
18412
18413         function defaultSeparation$1(a, b) {
18414           return a.parent === b.parent ? 1 : 2;
18415         }
18416
18417         // function radialSeparation(a, b) {
18418         //   return (a.parent === b.parent ? 1 : 2) / a.depth;
18419         // }
18420
18421         // This function is used to traverse the left contour of a subtree (or
18422         // subforest). It returns the successor of v on this contour. This successor is
18423         // either given by the leftmost child of v or by the thread of v. The function
18424         // returns null if and only if v is on the highest level of its subtree.
18425         function nextLeft(v) {
18426           var children = v.children;
18427           return children ? children[0] : v.t;
18428         }
18429
18430         // This function works analogously to nextLeft.
18431         function nextRight(v) {
18432           var children = v.children;
18433           return children ? children[children.length - 1] : v.t;
18434         }
18435
18436         // Shifts the current subtree rooted at w+. This is done by increasing
18437         // prelim(w+) and mod(w+) by shift.
18438         function moveSubtree(wm, wp, shift) {
18439           var change = shift / (wp.i - wm.i);
18440           wp.c -= change;
18441           wp.s += shift;
18442           wm.c += change;
18443           wp.z += shift;
18444           wp.m += shift;
18445         }
18446
18447         // All other shifts, applied to the smaller subtrees between w- and w+, are
18448         // performed by this function. To prepare the shifts, we have to adjust
18449         // change(w+), shift(w+), and change(w-).
18450         function executeShifts(v) {
18451           var shift = 0,
18452               change = 0,
18453               children = v.children,
18454               i = children.length,
18455               w;
18456           while (--i >= 0) {
18457             w = children[i];
18458             w.z += shift;
18459             w.m += shift;
18460             shift += w.s + (change += w.c);
18461           }
18462         }
18463
18464         // If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,
18465         // returns the specified (default) ancestor.
18466         function nextAncestor(vim, v, ancestor) {
18467           return vim.a.parent === v.parent ? vim.a : ancestor;
18468         }
18469
18470         function TreeNode(node, i) {
18471           this._ = node;
18472           this.parent = null;
18473           this.children = null;
18474           this.A = null; // default ancestor
18475           this.a = this; // ancestor
18476           this.z = 0; // prelim
18477           this.m = 0; // mod
18478           this.c = 0; // change
18479           this.s = 0; // shift
18480           this.t = null; // thread
18481           this.i = i; // number
18482         }
18483
18484         TreeNode.prototype = Object.create(Node.prototype);
18485
18486         function treeRoot(root) {
18487           var tree = new TreeNode(root, 0),
18488               node,
18489               nodes = [tree],
18490               child,
18491               children,
18492               i,
18493               n;
18494
18495           while (node = nodes.pop()) {
18496             if (children = node._.children) {
18497               node.children = new Array(n = children.length);
18498               for (i = n - 1; i >= 0; --i) {
18499                 nodes.push(child = node.children[i] = new TreeNode(children[i], i));
18500                 child.parent = node;
18501               }
18502             }
18503           }
18504
18505           (tree.parent = new TreeNode(null, 0)).children = [tree];
18506           return tree;
18507         }
18508
18509         // Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
18510         function tree() {
18511           var separation = defaultSeparation$1,
18512               dx = 1,
18513               dy = 1,
18514               nodeSize = null;
18515
18516           function tree(root) {
18517             var t = treeRoot(root);
18518
18519             // Compute the layout using Buchheim et al.’s algorithm.
18520             t.eachAfter(firstWalk), t.parent.m = -t.z;
18521             t.eachBefore(secondWalk);
18522
18523             // If a fixed node size is specified, scale x and y.
18524             if (nodeSize) { root.eachBefore(sizeNode); }
18525
18526             // If a fixed tree size is specified, scale x and y based on the extent.
18527             // Compute the left-most, right-most, and depth-most nodes for extents.
18528             else {
18529               var left = root,
18530                   right = root,
18531                   bottom = root;
18532               root.eachBefore(function(node) {
18533                 if (node.x < left.x) { left = node; }
18534                 if (node.x > right.x) { right = node; }
18535                 if (node.depth > bottom.depth) { bottom = node; }
18536               });
18537               var s = left === right ? 1 : separation(left, right) / 2,
18538                   tx = s - left.x,
18539                   kx = dx / (right.x + s + tx),
18540                   ky = dy / (bottom.depth || 1);
18541               root.eachBefore(function(node) {
18542                 node.x = (node.x + tx) * kx;
18543                 node.y = node.depth * ky;
18544               });
18545             }
18546
18547             return root;
18548           }
18549
18550           // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is
18551           // applied recursively to the children of v, as well as the function
18552           // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the
18553           // node v is placed to the midpoint of its outermost children.
18554           function firstWalk(v) {
18555             var children = v.children,
18556                 siblings = v.parent.children,
18557                 w = v.i ? siblings[v.i - 1] : null;
18558             if (children) {
18559               executeShifts(v);
18560               var midpoint = (children[0].z + children[children.length - 1].z) / 2;
18561               if (w) {
18562                 v.z = w.z + separation(v._, w._);
18563                 v.m = v.z - midpoint;
18564               } else {
18565                 v.z = midpoint;
18566               }
18567             } else if (w) {
18568               v.z = w.z + separation(v._, w._);
18569             }
18570             v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
18571           }
18572
18573           // Computes all real x-coordinates by summing up the modifiers recursively.
18574           function secondWalk(v) {
18575             v._.x = v.z + v.parent.m;
18576             v.m += v.parent.m;
18577           }
18578
18579           // The core of the algorithm. Here, a new subtree is combined with the
18580           // previous subtrees. Threads are used to traverse the inside and outside
18581           // contours of the left and right subtree up to the highest common level. The
18582           // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the
18583           // superscript o means outside and i means inside, the subscript - means left
18584           // subtree and + means right subtree. For summing up the modifiers along the
18585           // contour, we use respective variables si+, si-, so-, and so+. Whenever two
18586           // nodes of the inside contours conflict, we compute the left one of the
18587           // greatest uncommon ancestors using the function ANCESTOR and call MOVE
18588           // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.
18589           // Finally, we add a new thread (if necessary).
18590           function apportion(v, w, ancestor) {
18591             if (w) {
18592               var vip = v,
18593                   vop = v,
18594                   vim = w,
18595                   vom = vip.parent.children[0],
18596                   sip = vip.m,
18597                   sop = vop.m,
18598                   sim = vim.m,
18599                   som = vom.m,
18600                   shift;
18601               while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {
18602                 vom = nextLeft(vom);
18603                 vop = nextRight(vop);
18604                 vop.a = v;
18605                 shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
18606                 if (shift > 0) {
18607                   moveSubtree(nextAncestor(vim, v, ancestor), v, shift);
18608                   sip += shift;
18609                   sop += shift;
18610                 }
18611                 sim += vim.m;
18612                 sip += vip.m;
18613                 som += vom.m;
18614                 sop += vop.m;
18615               }
18616               if (vim && !nextRight(vop)) {
18617                 vop.t = vim;
18618                 vop.m += sim - sop;
18619               }
18620               if (vip && !nextLeft(vom)) {
18621                 vom.t = vip;
18622                 vom.m += sip - som;
18623                 ancestor = v;
18624               }
18625             }
18626             return ancestor;
18627           }
18628
18629           function sizeNode(node) {
18630             node.x *= dx;
18631             node.y = node.depth * dy;
18632           }
18633
18634           tree.separation = function(x) {
18635             return arguments.length ? (separation = x, tree) : separation;
18636           };
18637
18638           tree.size = function(x) {
18639             return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);
18640           };
18641
18642           tree.nodeSize = function(x) {
18643             return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);
18644           };
18645
18646           return tree;
18647         }
18648
18649         function treemapSlice(parent, x0, y0, x1, y1) {
18650           var nodes = parent.children,
18651               node,
18652               i = -1,
18653               n = nodes.length,
18654               k = parent.value && (y1 - y0) / parent.value;
18655
18656           while (++i < n) {
18657             node = nodes[i], node.x0 = x0, node.x1 = x1;
18658             node.y0 = y0, node.y1 = y0 += node.value * k;
18659           }
18660         }
18661
18662         var phi = (1 + Math.sqrt(5)) / 2;
18663
18664         function squarifyRatio(ratio, parent, x0, y0, x1, y1) {
18665           var rows = [],
18666               nodes = parent.children,
18667               row,
18668               nodeValue,
18669               i0 = 0,
18670               i1 = 0,
18671               n = nodes.length,
18672               dx, dy,
18673               value = parent.value,
18674               sumValue,
18675               minValue,
18676               maxValue,
18677               newRatio,
18678               minRatio,
18679               alpha,
18680               beta;
18681
18682           while (i0 < n) {
18683             dx = x1 - x0, dy = y1 - y0;
18684
18685             // Find the next non-empty node.
18686             do { sumValue = nodes[i1++].value; } while (!sumValue && i1 < n);
18687             minValue = maxValue = sumValue;
18688             alpha = Math.max(dy / dx, dx / dy) / (value * ratio);
18689             beta = sumValue * sumValue * alpha;
18690             minRatio = Math.max(maxValue / beta, beta / minValue);
18691
18692             // Keep adding nodes while the aspect ratio maintains or improves.
18693             for (; i1 < n; ++i1) {
18694               sumValue += nodeValue = nodes[i1].value;
18695               if (nodeValue < minValue) { minValue = nodeValue; }
18696               if (nodeValue > maxValue) { maxValue = nodeValue; }
18697               beta = sumValue * sumValue * alpha;
18698               newRatio = Math.max(maxValue / beta, beta / minValue);
18699               if (newRatio > minRatio) { sumValue -= nodeValue; break; }
18700               minRatio = newRatio;
18701             }
18702
18703             // Position and record the row orientation.
18704             rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});
18705             if (row.dice) { treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1); }
18706             else { treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1); }
18707             value -= sumValue, i0 = i1;
18708           }
18709
18710           return rows;
18711         }
18712
18713         var squarify = (function custom(ratio) {
18714
18715           function squarify(parent, x0, y0, x1, y1) {
18716             squarifyRatio(ratio, parent, x0, y0, x1, y1);
18717           }
18718
18719           squarify.ratio = function(x) {
18720             return custom((x = +x) > 1 ? x : 1);
18721           };
18722
18723           return squarify;
18724         })(phi);
18725
18726         function index$2() {
18727           var tile = squarify,
18728               round = false,
18729               dx = 1,
18730               dy = 1,
18731               paddingStack = [0],
18732               paddingInner = constantZero,
18733               paddingTop = constantZero,
18734               paddingRight = constantZero,
18735               paddingBottom = constantZero,
18736               paddingLeft = constantZero;
18737
18738           function treemap(root) {
18739             root.x0 =
18740             root.y0 = 0;
18741             root.x1 = dx;
18742             root.y1 = dy;
18743             root.eachBefore(positionNode);
18744             paddingStack = [0];
18745             if (round) { root.eachBefore(roundNode); }
18746             return root;
18747           }
18748
18749           function positionNode(node) {
18750             var p = paddingStack[node.depth],
18751                 x0 = node.x0 + p,
18752                 y0 = node.y0 + p,
18753                 x1 = node.x1 - p,
18754                 y1 = node.y1 - p;
18755             if (x1 < x0) { x0 = x1 = (x0 + x1) / 2; }
18756             if (y1 < y0) { y0 = y1 = (y0 + y1) / 2; }
18757             node.x0 = x0;
18758             node.y0 = y0;
18759             node.x1 = x1;
18760             node.y1 = y1;
18761             if (node.children) {
18762               p = paddingStack[node.depth + 1] = paddingInner(node) / 2;
18763               x0 += paddingLeft(node) - p;
18764               y0 += paddingTop(node) - p;
18765               x1 -= paddingRight(node) - p;
18766               y1 -= paddingBottom(node) - p;
18767               if (x1 < x0) { x0 = x1 = (x0 + x1) / 2; }
18768               if (y1 < y0) { y0 = y1 = (y0 + y1) / 2; }
18769               tile(node, x0, y0, x1, y1);
18770             }
18771           }
18772
18773           treemap.round = function(x) {
18774             return arguments.length ? (round = !!x, treemap) : round;
18775           };
18776
18777           treemap.size = function(x) {
18778             return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];
18779           };
18780
18781           treemap.tile = function(x) {
18782             return arguments.length ? (tile = required(x), treemap) : tile;
18783           };
18784
18785           treemap.padding = function(x) {
18786             return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();
18787           };
18788
18789           treemap.paddingInner = function(x) {
18790             return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$9(+x), treemap) : paddingInner;
18791           };
18792
18793           treemap.paddingOuter = function(x) {
18794             return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();
18795           };
18796
18797           treemap.paddingTop = function(x) {
18798             return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$9(+x), treemap) : paddingTop;
18799           };
18800
18801           treemap.paddingRight = function(x) {
18802             return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$9(+x), treemap) : paddingRight;
18803           };
18804
18805           treemap.paddingBottom = function(x) {
18806             return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$9(+x), treemap) : paddingBottom;
18807           };
18808
18809           treemap.paddingLeft = function(x) {
18810             return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$9(+x), treemap) : paddingLeft;
18811           };
18812
18813           return treemap;
18814         }
18815
18816         function binary(parent, x0, y0, x1, y1) {
18817           var nodes = parent.children,
18818               i, n = nodes.length,
18819               sum, sums = new Array(n + 1);
18820
18821           for (sums[0] = sum = i = 0; i < n; ++i) {
18822             sums[i + 1] = sum += nodes[i].value;
18823           }
18824
18825           partition(0, n, parent.value, x0, y0, x1, y1);
18826
18827           function partition(i, j, value, x0, y0, x1, y1) {
18828             if (i >= j - 1) {
18829               var node = nodes[i];
18830               node.x0 = x0, node.y0 = y0;
18831               node.x1 = x1, node.y1 = y1;
18832               return;
18833             }
18834
18835             var valueOffset = sums[i],
18836                 valueTarget = (value / 2) + valueOffset,
18837                 k = i + 1,
18838                 hi = j - 1;
18839
18840             while (k < hi) {
18841               var mid = k + hi >>> 1;
18842               if (sums[mid] < valueTarget) { k = mid + 1; }
18843               else { hi = mid; }
18844             }
18845
18846             if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) { --k; }
18847
18848             var valueLeft = sums[k] - valueOffset,
18849                 valueRight = value - valueLeft;
18850
18851             if ((x1 - x0) > (y1 - y0)) {
18852               var xk = (x0 * valueRight + x1 * valueLeft) / value;
18853               partition(i, k, valueLeft, x0, y0, xk, y1);
18854               partition(k, j, valueRight, xk, y0, x1, y1);
18855             } else {
18856               var yk = (y0 * valueRight + y1 * valueLeft) / value;
18857               partition(i, k, valueLeft, x0, y0, x1, yk);
18858               partition(k, j, valueRight, x0, yk, x1, y1);
18859             }
18860           }
18861         }
18862
18863         function sliceDice(parent, x0, y0, x1, y1) {
18864           (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);
18865         }
18866
18867         var resquarify = (function custom(ratio) {
18868
18869           function resquarify(parent, x0, y0, x1, y1) {
18870             if ((rows = parent._squarify) && (rows.ratio === ratio)) {
18871               var rows,
18872                   row,
18873                   nodes,
18874                   i,
18875                   j = -1,
18876                   n,
18877                   m = rows.length,
18878                   value = parent.value;
18879
18880               while (++j < m) {
18881                 row = rows[j], nodes = row.children;
18882                 for (i = row.value = 0, n = nodes.length; i < n; ++i) { row.value += nodes[i].value; }
18883                 if (row.dice) { treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value); }
18884                 else { treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1); }
18885                 value -= row.value;
18886               }
18887             } else {
18888               parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);
18889               rows.ratio = ratio;
18890             }
18891           }
18892
18893           resquarify.ratio = function(x) {
18894             return custom((x = +x) > 1 ? x : 1);
18895           };
18896
18897           return resquarify;
18898         })(phi);
18899
18900         function d3_polygonArea(polygon) {
18901           var i = -1,
18902               n = polygon.length,
18903               a,
18904               b = polygon[n - 1],
18905               area = 0;
18906
18907           while (++i < n) {
18908             a = b;
18909             b = polygon[i];
18910             area += a[1] * b[0] - a[0] * b[1];
18911           }
18912
18913           return area / 2;
18914         }
18915
18916         function d3_polygonCentroid(polygon) {
18917           var i = -1,
18918               n = polygon.length,
18919               x = 0,
18920               y = 0,
18921               a,
18922               b = polygon[n - 1],
18923               c,
18924               k = 0;
18925
18926           while (++i < n) {
18927             a = b;
18928             b = polygon[i];
18929             k += c = a[0] * b[1] - b[0] * a[1];
18930             x += (a[0] + b[0]) * c;
18931             y += (a[1] + b[1]) * c;
18932           }
18933
18934           return k *= 3, [x / k, y / k];
18935         }
18936
18937         // Returns the 2D cross product of AB and AC vectors, i.e., the z-component of
18938         // the 3D cross product in a quadrant I Cartesian coordinate system (+x is
18939         // right, +y is up). Returns a positive value if ABC is counter-clockwise,
18940         // negative if clockwise, and zero if the points are collinear.
18941         function cross$1(a, b, c) {
18942           return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
18943         }
18944
18945         function lexicographicOrder(a, b) {
18946           return a[0] - b[0] || a[1] - b[1];
18947         }
18948
18949         // Computes the upper convex hull per the monotone chain algorithm.
18950         // Assumes points.length >= 3, is sorted by x, unique in y.
18951         // Returns an array of indices into points in left-to-right order.
18952         function computeUpperHullIndexes(points) {
18953           var n = points.length,
18954               indexes = [0, 1],
18955               size = 2;
18956
18957           for (var i = 2; i < n; ++i) {
18958             while (size > 1 && cross$1(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) { --size; }
18959             indexes[size++] = i;
18960           }
18961
18962           return indexes.slice(0, size); // remove popped points
18963         }
18964
18965         function d3_polygonHull(points) {
18966           if ((n = points.length) < 3) { return null; }
18967
18968           var i,
18969               n,
18970               sortedPoints = new Array(n),
18971               flippedPoints = new Array(n);
18972
18973           for (i = 0; i < n; ++i) { sortedPoints[i] = [+points[i][0], +points[i][1], i]; }
18974           sortedPoints.sort(lexicographicOrder);
18975           for (i = 0; i < n; ++i) { flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]]; }
18976
18977           var upperIndexes = computeUpperHullIndexes(sortedPoints),
18978               lowerIndexes = computeUpperHullIndexes(flippedPoints);
18979
18980           // Construct the hull polygon, removing possible duplicate endpoints.
18981           var skipLeft = lowerIndexes[0] === upperIndexes[0],
18982               skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],
18983               hull = [];
18984
18985           // Add upper hull in right-to-l order.
18986           // Then add lower hull in left-to-right order.
18987           for (i = upperIndexes.length - 1; i >= 0; --i) { hull.push(points[sortedPoints[upperIndexes[i]][2]]); }
18988           for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) { hull.push(points[sortedPoints[lowerIndexes[i]][2]]); }
18989
18990           return hull;
18991         }
18992
18993         function contains$3(polygon, point) {
18994           var n = polygon.length,
18995               p = polygon[n - 1],
18996               x = point[0], y = point[1],
18997               x0 = p[0], y0 = p[1],
18998               x1, y1,
18999               inside = false;
19000
19001           for (var i = 0; i < n; ++i) {
19002             p = polygon[i], x1 = p[0], y1 = p[1];
19003             if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) { inside = !inside; }
19004             x0 = x1, y0 = y1;
19005           }
19006
19007           return inside;
19008         }
19009
19010         function length$1(polygon) {
19011           var i = -1,
19012               n = polygon.length,
19013               b = polygon[n - 1],
19014               xa,
19015               ya,
19016               xb = b[0],
19017               yb = b[1],
19018               perimeter = 0;
19019
19020           while (++i < n) {
19021             xa = xb;
19022             ya = yb;
19023             b = polygon[i];
19024             xb = b[0];
19025             yb = b[1];
19026             xa -= xb;
19027             ya -= yb;
19028             perimeter += Math.sqrt(xa * xa + ya * ya);
19029           }
19030
19031           return perimeter;
19032         }
19033
19034         function defaultSource$1() {
19035           return Math.random();
19036         }
19037
19038         var uniform = (function sourceRandomUniform(source) {
19039           function randomUniform(min, max) {
19040             min = min == null ? 0 : +min;
19041             max = max == null ? 1 : +max;
19042             if (arguments.length === 1) { max = min, min = 0; }
19043             else { max -= min; }
19044             return function() {
19045               return source() * max + min;
19046             };
19047           }
19048
19049           randomUniform.source = sourceRandomUniform;
19050
19051           return randomUniform;
19052         })(defaultSource$1);
19053
19054         var normal = (function sourceRandomNormal(source) {
19055           function randomNormal(mu, sigma) {
19056             var x, r;
19057             mu = mu == null ? 0 : +mu;
19058             sigma = sigma == null ? 1 : +sigma;
19059             return function() {
19060               var y;
19061
19062               // If available, use the second previously-generated uniform random.
19063               if (x != null) { y = x, x = null; }
19064
19065               // Otherwise, generate a new x and y.
19066               else { do {
19067                 x = source() * 2 - 1;
19068                 y = source() * 2 - 1;
19069                 r = x * x + y * y;
19070               } while (!r || r > 1); }
19071
19072               return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);
19073             };
19074           }
19075
19076           randomNormal.source = sourceRandomNormal;
19077
19078           return randomNormal;
19079         })(defaultSource$1);
19080
19081         var logNormal = (function sourceRandomLogNormal(source) {
19082           function randomLogNormal() {
19083             var randomNormal = normal.source(source).apply(this, arguments);
19084             return function() {
19085               return Math.exp(randomNormal());
19086             };
19087           }
19088
19089           randomLogNormal.source = sourceRandomLogNormal;
19090
19091           return randomLogNormal;
19092         })(defaultSource$1);
19093
19094         var irwinHall = (function sourceRandomIrwinHall(source) {
19095           function randomIrwinHall(n) {
19096             return function() {
19097               for (var sum = 0, i = 0; i < n; ++i) { sum += source(); }
19098               return sum;
19099             };
19100           }
19101
19102           randomIrwinHall.source = sourceRandomIrwinHall;
19103
19104           return randomIrwinHall;
19105         })(defaultSource$1);
19106
19107         var bates = (function sourceRandomBates(source) {
19108           function randomBates(n) {
19109             var randomIrwinHall = irwinHall.source(source)(n);
19110             return function() {
19111               return randomIrwinHall() / n;
19112             };
19113           }
19114
19115           randomBates.source = sourceRandomBates;
19116
19117           return randomBates;
19118         })(defaultSource$1);
19119
19120         var exponential$1 = (function sourceRandomExponential(source) {
19121           function randomExponential(lambda) {
19122             return function() {
19123               return -Math.log(1 - source()) / lambda;
19124             };
19125           }
19126
19127           randomExponential.source = sourceRandomExponential;
19128
19129           return randomExponential;
19130         })(defaultSource$1);
19131
19132         function initRange(domain, range) {
19133           switch (arguments.length) {
19134             case 0: break;
19135             case 1: this.range(domain); break;
19136             default: this.range(range).domain(domain); break;
19137           }
19138           return this;
19139         }
19140
19141         function initInterpolator(domain, interpolator) {
19142           switch (arguments.length) {
19143             case 0: break;
19144             case 1: this.interpolator(domain); break;
19145             default: this.interpolator(interpolator).domain(domain); break;
19146           }
19147           return this;
19148         }
19149
19150         var array$4 = Array.prototype;
19151
19152         var map$5 = array$4.map;
19153         var slice$9 = array$4.slice;
19154
19155         var implicit = {name: "implicit"};
19156
19157         function ordinal() {
19158           var index = map$3(),
19159               domain = [],
19160               range = [],
19161               unknown = implicit;
19162
19163           function scale(d) {
19164             var key = d + "", i = index.get(key);
19165             if (!i) {
19166               if (unknown !== implicit) { return unknown; }
19167               index.set(key, i = domain.push(d));
19168             }
19169             return range[(i - 1) % range.length];
19170           }
19171
19172           scale.domain = function(_) {
19173             if (!arguments.length) { return domain.slice(); }
19174             domain = [], index = map$3();
19175             var i = -1, n = _.length, d, key;
19176             while (++i < n) { if (!index.has(key = (d = _[i]) + "")) { index.set(key, domain.push(d)); } }
19177             return scale;
19178           };
19179
19180           scale.range = function(_) {
19181             return arguments.length ? (range = slice$9.call(_), scale) : range.slice();
19182           };
19183
19184           scale.unknown = function(_) {
19185             return arguments.length ? (unknown = _, scale) : unknown;
19186           };
19187
19188           scale.copy = function() {
19189             return ordinal(domain, range).unknown(unknown);
19190           };
19191
19192           initRange.apply(scale, arguments);
19193
19194           return scale;
19195         }
19196
19197         function band() {
19198           var scale = ordinal().unknown(undefined),
19199               domain = scale.domain,
19200               ordinalRange = scale.range,
19201               range = [0, 1],
19202               step,
19203               bandwidth,
19204               round = false,
19205               paddingInner = 0,
19206               paddingOuter = 0,
19207               align = 0.5;
19208
19209           delete scale.unknown;
19210
19211           function rescale() {
19212             var n = domain().length,
19213                 reverse = range[1] < range[0],
19214                 start = range[reverse - 0],
19215                 stop = range[1 - reverse];
19216             step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
19217             if (round) { step = Math.floor(step); }
19218             start += (stop - start - step * (n - paddingInner)) * align;
19219             bandwidth = step * (1 - paddingInner);
19220             if (round) { start = Math.round(start), bandwidth = Math.round(bandwidth); }
19221             var values = d3_range(n).map(function(i) { return start + step * i; });
19222             return ordinalRange(reverse ? values.reverse() : values);
19223           }
19224
19225           scale.domain = function(_) {
19226             return arguments.length ? (domain(_), rescale()) : domain();
19227           };
19228
19229           scale.range = function(_) {
19230             return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();
19231           };
19232
19233           scale.rangeRound = function(_) {
19234             return range = [+_[0], +_[1]], round = true, rescale();
19235           };
19236
19237           scale.bandwidth = function() {
19238             return bandwidth;
19239           };
19240
19241           scale.step = function() {
19242             return step;
19243           };
19244
19245           scale.round = function(_) {
19246             return arguments.length ? (round = !!_, rescale()) : round;
19247           };
19248
19249           scale.padding = function(_) {
19250             return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;
19251           };
19252
19253           scale.paddingInner = function(_) {
19254             return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;
19255           };
19256
19257           scale.paddingOuter = function(_) {
19258             return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;
19259           };
19260
19261           scale.align = function(_) {
19262             return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
19263           };
19264
19265           scale.copy = function() {
19266             return band(domain(), range)
19267                 .round(round)
19268                 .paddingInner(paddingInner)
19269                 .paddingOuter(paddingOuter)
19270                 .align(align);
19271           };
19272
19273           return initRange.apply(rescale(), arguments);
19274         }
19275
19276         function pointish(scale) {
19277           var copy = scale.copy;
19278
19279           scale.padding = scale.paddingOuter;
19280           delete scale.paddingInner;
19281           delete scale.paddingOuter;
19282
19283           scale.copy = function() {
19284             return pointish(copy());
19285           };
19286
19287           return scale;
19288         }
19289
19290         function point$1() {
19291           return pointish(band.apply(null, arguments).paddingInner(1));
19292         }
19293
19294         function constant$a(x) {
19295           return function() {
19296             return x;
19297           };
19298         }
19299
19300         function number$2(x) {
19301           return +x;
19302         }
19303
19304         var unit = [0, 1];
19305
19306         function identity$5(x) {
19307           return x;
19308         }
19309
19310         function normalize(a, b) {
19311           return (b -= (a = +a))
19312               ? function(x) { return (x - a) / b; }
19313               : constant$a(isNaN(b) ? NaN : 0.5);
19314         }
19315
19316         function clamper(domain) {
19317           var a = domain[0], b = domain[domain.length - 1], t;
19318           if (a > b) { t = a, a = b, b = t; }
19319           return function(x) { return Math.max(a, Math.min(b, x)); };
19320         }
19321
19322         // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
19323         // interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].
19324         function bimap(domain, range, interpolate) {
19325           var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];
19326           if (d1 < d0) { d0 = normalize(d1, d0), r0 = interpolate(r1, r0); }
19327           else { d0 = normalize(d0, d1), r0 = interpolate(r0, r1); }
19328           return function(x) { return r0(d0(x)); };
19329         }
19330
19331         function polymap(domain, range, interpolate) {
19332           var j = Math.min(domain.length, range.length) - 1,
19333               d = new Array(j),
19334               r = new Array(j),
19335               i = -1;
19336
19337           // Reverse descending domains.
19338           if (domain[j] < domain[0]) {
19339             domain = domain.slice().reverse();
19340             range = range.slice().reverse();
19341           }
19342
19343           while (++i < j) {
19344             d[i] = normalize(domain[i], domain[i + 1]);
19345             r[i] = interpolate(range[i], range[i + 1]);
19346           }
19347
19348           return function(x) {
19349             var i = bisectRight(domain, x, 1, j) - 1;
19350             return r[i](d[i](x));
19351           };
19352         }
19353
19354         function copy$1(source, target) {
19355           return target
19356               .domain(source.domain())
19357               .range(source.range())
19358               .interpolate(source.interpolate())
19359               .clamp(source.clamp())
19360               .unknown(source.unknown());
19361         }
19362
19363         function transformer$1() {
19364           var domain = unit,
19365               range = unit,
19366               interpolate = d3_interpolate,
19367               transform,
19368               untransform,
19369               unknown,
19370               clamp = identity$5,
19371               piecewise,
19372               output,
19373               input;
19374
19375           function rescale() {
19376             piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;
19377             output = input = null;
19378             return scale;
19379           }
19380
19381           function scale(x) {
19382             return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));
19383           }
19384
19385           scale.invert = function(y) {
19386             return clamp(untransform((input || (input = piecewise(range, domain.map(transform), d3_interpolateNumber)))(y)));
19387           };
19388
19389           scale.domain = function(_) {
19390             return arguments.length ? (domain = map$5.call(_, number$2), clamp === identity$5 || (clamp = clamper(domain)), rescale()) : domain.slice();
19391           };
19392
19393           scale.range = function(_) {
19394             return arguments.length ? (range = slice$9.call(_), rescale()) : range.slice();
19395           };
19396
19397           scale.rangeRound = function(_) {
19398             return range = slice$9.call(_), interpolate = interpolateRound, rescale();
19399           };
19400
19401           scale.clamp = function(_) {
19402             return arguments.length ? (clamp = _ ? clamper(domain) : identity$5, scale) : clamp !== identity$5;
19403           };
19404
19405           scale.interpolate = function(_) {
19406             return arguments.length ? (interpolate = _, rescale()) : interpolate;
19407           };
19408
19409           scale.unknown = function(_) {
19410             return arguments.length ? (unknown = _, scale) : unknown;
19411           };
19412
19413           return function(t, u) {
19414             transform = t, untransform = u;
19415             return rescale();
19416           };
19417         }
19418
19419         function continuous(transform, untransform) {
19420           return transformer$1()(transform, untransform);
19421         }
19422
19423         function tickFormat(start, stop, count, specifier) {
19424           var step = tickStep(start, stop, count),
19425               precision;
19426           specifier = formatSpecifier(specifier == null ? ",f" : specifier);
19427           switch (specifier.type) {
19428             case "s": {
19429               var value = Math.max(Math.abs(start), Math.abs(stop));
19430               if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) { specifier.precision = precision; }
19431               return formatPrefix(specifier, value);
19432             }
19433             case "":
19434             case "e":
19435             case "g":
19436             case "p":
19437             case "r": {
19438               if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) { specifier.precision = precision - (specifier.type === "e"); }
19439               break;
19440             }
19441             case "f":
19442             case "%": {
19443               if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) { specifier.precision = precision - (specifier.type === "%") * 2; }
19444               break;
19445             }
19446           }
19447           return format(specifier);
19448         }
19449
19450         function linearish(scale) {
19451           var domain = scale.domain;
19452
19453           scale.ticks = function(count) {
19454             var d = domain();
19455             return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
19456           };
19457
19458           scale.tickFormat = function(count, specifier) {
19459             var d = domain();
19460             return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);
19461           };
19462
19463           scale.nice = function(count) {
19464             if (count == null) { count = 10; }
19465
19466             var d = domain(),
19467                 i0 = 0,
19468                 i1 = d.length - 1,
19469                 start = d[i0],
19470                 stop = d[i1],
19471                 step;
19472
19473             if (stop < start) {
19474               step = start, start = stop, stop = step;
19475               step = i0, i0 = i1, i1 = step;
19476             }
19477
19478             step = tickIncrement(start, stop, count);
19479
19480             if (step > 0) {
19481               start = Math.floor(start / step) * step;
19482               stop = Math.ceil(stop / step) * step;
19483               step = tickIncrement(start, stop, count);
19484             } else if (step < 0) {
19485               start = Math.ceil(start * step) / step;
19486               stop = Math.floor(stop * step) / step;
19487               step = tickIncrement(start, stop, count);
19488             }
19489
19490             if (step > 0) {
19491               d[i0] = Math.floor(start / step) * step;
19492               d[i1] = Math.ceil(stop / step) * step;
19493               domain(d);
19494             } else if (step < 0) {
19495               d[i0] = Math.ceil(start * step) / step;
19496               d[i1] = Math.floor(stop * step) / step;
19497               domain(d);
19498             }
19499
19500             return scale;
19501           };
19502
19503           return scale;
19504         }
19505
19506         function linear$2() {
19507           var scale = continuous(identity$5, identity$5);
19508
19509           scale.copy = function() {
19510             return copy$1(scale, linear$2());
19511           };
19512
19513           initRange.apply(scale, arguments);
19514
19515           return linearish(scale);
19516         }
19517
19518         function identity$6(domain) {
19519           var unknown;
19520
19521           function scale(x) {
19522             return isNaN(x = +x) ? unknown : x;
19523           }
19524
19525           scale.invert = scale;
19526
19527           scale.domain = scale.range = function(_) {
19528             return arguments.length ? (domain = map$5.call(_, number$2), scale) : domain.slice();
19529           };
19530
19531           scale.unknown = function(_) {
19532             return arguments.length ? (unknown = _, scale) : unknown;
19533           };
19534
19535           scale.copy = function() {
19536             return identity$6(domain).unknown(unknown);
19537           };
19538
19539           domain = arguments.length ? map$5.call(domain, number$2) : [0, 1];
19540
19541           return linearish(scale);
19542         }
19543
19544         function nice(domain, interval) {
19545           domain = domain.slice();
19546
19547           var i0 = 0,
19548               i1 = domain.length - 1,
19549               x0 = domain[i0],
19550               x1 = domain[i1],
19551               t;
19552
19553           if (x1 < x0) {
19554             t = i0, i0 = i1, i1 = t;
19555             t = x0, x0 = x1, x1 = t;
19556           }
19557
19558           domain[i0] = interval.floor(x0);
19559           domain[i1] = interval.ceil(x1);
19560           return domain;
19561         }
19562
19563         function transformLog(x) {
19564           return Math.log(x);
19565         }
19566
19567         function transformExp(x) {
19568           return Math.exp(x);
19569         }
19570
19571         function transformLogn(x) {
19572           return -Math.log(-x);
19573         }
19574
19575         function transformExpn(x) {
19576           return -Math.exp(-x);
19577         }
19578
19579         function pow10(x) {
19580           return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
19581         }
19582
19583         function powp(base) {
19584           return base === 10 ? pow10
19585               : base === Math.E ? Math.exp
19586               : function(x) { return Math.pow(base, x); };
19587         }
19588
19589         function logp(base) {
19590           return base === Math.E ? Math.log
19591               : base === 10 && Math.log10
19592               || base === 2 && Math.log2
19593               || (base = Math.log(base), function(x) { return Math.log(x) / base; });
19594         }
19595
19596         function reflect(f) {
19597           return function(x) {
19598             return -f(-x);
19599           };
19600         }
19601
19602         function loggish(transform) {
19603           var scale = transform(transformLog, transformExp),
19604               domain = scale.domain,
19605               base = 10,
19606               logs,
19607               pows;
19608
19609           function rescale() {
19610             logs = logp(base), pows = powp(base);
19611             if (domain()[0] < 0) {
19612               logs = reflect(logs), pows = reflect(pows);
19613               transform(transformLogn, transformExpn);
19614             } else {
19615               transform(transformLog, transformExp);
19616             }
19617             return scale;
19618           }
19619
19620           scale.base = function(_) {
19621             return arguments.length ? (base = +_, rescale()) : base;
19622           };
19623
19624           scale.domain = function(_) {
19625             return arguments.length ? (domain(_), rescale()) : domain();
19626           };
19627
19628           scale.ticks = function(count) {
19629             var d = domain(),
19630                 u = d[0],
19631                 v = d[d.length - 1],
19632                 r;
19633
19634             if (r = v < u) { i = u, u = v, v = i; }
19635
19636             var i = logs(u),
19637                 j = logs(v),
19638                 p,
19639                 k,
19640                 t,
19641                 n = count == null ? 10 : +count,
19642                 z = [];
19643
19644             if (!(base % 1) && j - i < n) {
19645               i = Math.round(i) - 1, j = Math.round(j) + 1;
19646               if (u > 0) { for (; i < j; ++i) {
19647                 for (k = 1, p = pows(i); k < base; ++k) {
19648                   t = p * k;
19649                   if (t < u) { continue; }
19650                   if (t > v) { break; }
19651                   z.push(t);
19652                 }
19653               } } else { for (; i < j; ++i) {
19654                 for (k = base - 1, p = pows(i); k >= 1; --k) {
19655                   t = p * k;
19656                   if (t < u) { continue; }
19657                   if (t > v) { break; }
19658                   z.push(t);
19659                 }
19660               } }
19661             } else {
19662               z = ticks(i, j, Math.min(j - i, n)).map(pows);
19663             }
19664
19665             return r ? z.reverse() : z;
19666           };
19667
19668           scale.tickFormat = function(count, specifier) {
19669             if (specifier == null) { specifier = base === 10 ? ".0e" : ","; }
19670             if (typeof specifier !== "function") { specifier = format(specifier); }
19671             if (count === Infinity) { return specifier; }
19672             if (count == null) { count = 10; }
19673             var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
19674             return function(d) {
19675               var i = d / pows(Math.round(logs(d)));
19676               if (i * base < base - 0.5) { i *= base; }
19677               return i <= k ? specifier(d) : "";
19678             };
19679           };
19680
19681           scale.nice = function() {
19682             return domain(nice(domain(), {
19683               floor: function(x) { return pows(Math.floor(logs(x))); },
19684               ceil: function(x) { return pows(Math.ceil(logs(x))); }
19685             }));
19686           };
19687
19688           return scale;
19689         }
19690
19691         function log$1() {
19692           var scale = loggish(transformer$1()).domain([1, 10]);
19693
19694           scale.copy = function() {
19695             return copy$1(scale, log$1()).base(scale.base());
19696           };
19697
19698           initRange.apply(scale, arguments);
19699
19700           return scale;
19701         }
19702
19703         function transformSymlog(c) {
19704           return function(x) {
19705             return Math.sign(x) * Math.log1p(Math.abs(x / c));
19706           };
19707         }
19708
19709         function transformSymexp(c) {
19710           return function(x) {
19711             return Math.sign(x) * Math.expm1(Math.abs(x)) * c;
19712           };
19713         }
19714
19715         function symlogish(transform) {
19716           var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));
19717
19718           scale.constant = function(_) {
19719             return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;
19720           };
19721
19722           return linearish(scale);
19723         }
19724
19725         function symlog() {
19726           var scale = symlogish(transformer$1());
19727
19728           scale.copy = function() {
19729             return copy$1(scale, symlog()).constant(scale.constant());
19730           };
19731
19732           return initRange.apply(scale, arguments);
19733         }
19734
19735         function transformPow(exponent) {
19736           return function(x) {
19737             return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
19738           };
19739         }
19740
19741         function transformSqrt(x) {
19742           return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);
19743         }
19744
19745         function transformSquare(x) {
19746           return x < 0 ? -x * x : x * x;
19747         }
19748
19749         function powish(transform) {
19750           var scale = transform(identity$5, identity$5),
19751               exponent = 1;
19752
19753           function rescale() {
19754             return exponent === 1 ? transform(identity$5, identity$5)
19755                 : exponent === 0.5 ? transform(transformSqrt, transformSquare)
19756                 : transform(transformPow(exponent), transformPow(1 / exponent));
19757           }
19758
19759           scale.exponent = function(_) {
19760             return arguments.length ? (exponent = +_, rescale()) : exponent;
19761           };
19762
19763           return linearish(scale);
19764         }
19765
19766         function pow$1() {
19767           var scale = powish(transformer$1());
19768
19769           scale.copy = function() {
19770             return copy$1(scale, pow$1()).exponent(scale.exponent());
19771           };
19772
19773           initRange.apply(scale, arguments);
19774
19775           return scale;
19776         }
19777
19778         function sqrt$1() {
19779           return pow$1.apply(null, arguments).exponent(0.5);
19780         }
19781
19782         function quantile() {
19783           var domain = [],
19784               range = [],
19785               thresholds = [],
19786               unknown;
19787
19788           function rescale() {
19789             var i = 0, n = Math.max(1, range.length);
19790             thresholds = new Array(n - 1);
19791             while (++i < n) { thresholds[i - 1] = threshold(domain, i / n); }
19792             return scale;
19793           }
19794
19795           function scale(x) {
19796             return isNaN(x = +x) ? unknown : range[bisectRight(thresholds, x)];
19797           }
19798
19799           scale.invertExtent = function(y) {
19800             var i = range.indexOf(y);
19801             return i < 0 ? [NaN, NaN] : [
19802               i > 0 ? thresholds[i - 1] : domain[0],
19803               i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
19804             ];
19805           };
19806
19807           scale.domain = function(_) {
19808             if (!arguments.length) { return domain.slice(); }
19809             domain = [];
19810             for (var i = 0, n = _.length, d; i < n; ++i) { if (d = _[i], d != null && !isNaN(d = +d)) { domain.push(d); } }
19811             domain.sort(d3_ascending);
19812             return rescale();
19813           };
19814
19815           scale.range = function(_) {
19816             return arguments.length ? (range = slice$9.call(_), rescale()) : range.slice();
19817           };
19818
19819           scale.unknown = function(_) {
19820             return arguments.length ? (unknown = _, scale) : unknown;
19821           };
19822
19823           scale.quantiles = function() {
19824             return thresholds.slice();
19825           };
19826
19827           scale.copy = function() {
19828             return quantile()
19829                 .domain(domain)
19830                 .range(range)
19831                 .unknown(unknown);
19832           };
19833
19834           return initRange.apply(scale, arguments);
19835         }
19836
19837         function quantize() {
19838           var x0 = 0,
19839               x1 = 1,
19840               n = 1,
19841               domain = [0.5],
19842               range = [0, 1],
19843               unknown;
19844
19845           function scale(x) {
19846             return x <= x ? range[bisectRight(domain, x, 0, n)] : unknown;
19847           }
19848
19849           function rescale() {
19850             var i = -1;
19851             domain = new Array(n);
19852             while (++i < n) { domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1); }
19853             return scale;
19854           }
19855
19856           scale.domain = function(_) {
19857             return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];
19858           };
19859
19860           scale.range = function(_) {
19861             return arguments.length ? (n = (range = slice$9.call(_)).length - 1, rescale()) : range.slice();
19862           };
19863
19864           scale.invertExtent = function(y) {
19865             var i = range.indexOf(y);
19866             return i < 0 ? [NaN, NaN]
19867                 : i < 1 ? [x0, domain[0]]
19868                 : i >= n ? [domain[n - 1], x1]
19869                 : [domain[i - 1], domain[i]];
19870           };
19871
19872           scale.unknown = function(_) {
19873             return arguments.length ? (unknown = _, scale) : scale;
19874           };
19875
19876           scale.thresholds = function() {
19877             return domain.slice();
19878           };
19879
19880           scale.copy = function() {
19881             return quantize()
19882                 .domain([x0, x1])
19883                 .range(range)
19884                 .unknown(unknown);
19885           };
19886
19887           return initRange.apply(linearish(scale), arguments);
19888         }
19889
19890         function threshold$1() {
19891           var domain = [0.5],
19892               range = [0, 1],
19893               unknown,
19894               n = 1;
19895
19896           function scale(x) {
19897             return x <= x ? range[bisectRight(domain, x, 0, n)] : unknown;
19898           }
19899
19900           scale.domain = function(_) {
19901             return arguments.length ? (domain = slice$9.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();
19902           };
19903
19904           scale.range = function(_) {
19905             return arguments.length ? (range = slice$9.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();
19906           };
19907
19908           scale.invertExtent = function(y) {
19909             var i = range.indexOf(y);
19910             return [domain[i - 1], domain[i]];
19911           };
19912
19913           scale.unknown = function(_) {
19914             return arguments.length ? (unknown = _, scale) : unknown;
19915           };
19916
19917           scale.copy = function() {
19918             return threshold$1()
19919                 .domain(domain)
19920                 .range(range)
19921                 .unknown(unknown);
19922           };
19923
19924           return initRange.apply(scale, arguments);
19925         }
19926
19927         var t0$1 = new Date,
19928             t1$1 = new Date;
19929
19930         function newInterval(floori, offseti, count, field) {
19931
19932           function interval(date) {
19933             return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;
19934           }
19935
19936           interval.floor = function(date) {
19937             return floori(date = new Date(+date)), date;
19938           };
19939
19940           interval.ceil = function(date) {
19941             return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
19942           };
19943
19944           interval.round = function(date) {
19945             var d0 = interval(date),
19946                 d1 = interval.ceil(date);
19947             return date - d0 < d1 - date ? d0 : d1;
19948           };
19949
19950           interval.offset = function(date, step) {
19951             return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
19952           };
19953
19954           interval.range = function(start, stop, step) {
19955             var range = [], previous;
19956             start = interval.ceil(start);
19957             step = step == null ? 1 : Math.floor(step);
19958             if (!(start < stop) || !(step > 0)) { return range; } // also handles Invalid Date
19959             do { range.push(previous = new Date(+start)), offseti(start, step), floori(start); }
19960             while (previous < start && start < stop);
19961             return range;
19962           };
19963
19964           interval.filter = function(test) {
19965             return newInterval(function(date) {
19966               if (date >= date) { while (floori(date), !test(date)) { date.setTime(date - 1); } }
19967             }, function(date, step) {
19968               if (date >= date) {
19969                 if (step < 0) { while (++step <= 0) {
19970                   while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty
19971                 } } else { while (--step >= 0) {
19972                   while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty
19973                 } }
19974               }
19975             });
19976           };
19977
19978           if (count) {
19979             interval.count = function(start, end) {
19980               t0$1.setTime(+start), t1$1.setTime(+end);
19981               floori(t0$1), floori(t1$1);
19982               return Math.floor(count(t0$1, t1$1));
19983             };
19984
19985             interval.every = function(step) {
19986               step = Math.floor(step);
19987               return !isFinite(step) || !(step > 0) ? null
19988                   : !(step > 1) ? interval
19989                   : interval.filter(field
19990                       ? function(d) { return field(d) % step === 0; }
19991                       : function(d) { return interval.count(0, d) % step === 0; });
19992             };
19993           }
19994
19995           return interval;
19996         }
19997
19998         var millisecond = newInterval(function() {
19999           // noop
20000         }, function(date, step) {
20001           date.setTime(+date + step);
20002         }, function(start, end) {
20003           return end - start;
20004         });
20005
20006         // An optimized implementation for this simple case.
20007         millisecond.every = function(k) {
20008           k = Math.floor(k);
20009           if (!isFinite(k) || !(k > 0)) { return null; }
20010           if (!(k > 1)) { return millisecond; }
20011           return newInterval(function(date) {
20012             date.setTime(Math.floor(date / k) * k);
20013           }, function(date, step) {
20014             date.setTime(+date + step * k);
20015           }, function(start, end) {
20016             return (end - start) / k;
20017           });
20018         };
20019         var milliseconds = millisecond.range;
20020
20021         var durationSecond = 1e3;
20022         var durationMinute = 6e4;
20023         var durationHour = 36e5;
20024         var durationDay = 864e5;
20025         var durationWeek = 6048e5;
20026
20027         var second = newInterval(function(date) {
20028           date.setTime(date - date.getMilliseconds());
20029         }, function(date, step) {
20030           date.setTime(+date + step * durationSecond);
20031         }, function(start, end) {
20032           return (end - start) / durationSecond;
20033         }, function(date) {
20034           return date.getUTCSeconds();
20035         });
20036         var seconds = second.range;
20037
20038         var minute = newInterval(function(date) {
20039           date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);
20040         }, function(date, step) {
20041           date.setTime(+date + step * durationMinute);
20042         }, function(start, end) {
20043           return (end - start) / durationMinute;
20044         }, function(date) {
20045           return date.getMinutes();
20046         });
20047         var minutes = minute.range;
20048
20049         var hour = newInterval(function(date) {
20050           date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);
20051         }, function(date, step) {
20052           date.setTime(+date + step * durationHour);
20053         }, function(start, end) {
20054           return (end - start) / durationHour;
20055         }, function(date) {
20056           return date.getHours();
20057         });
20058         var hours = hour.range;
20059
20060         var day = newInterval(function(date) {
20061           date.setHours(0, 0, 0, 0);
20062         }, function(date, step) {
20063           date.setDate(date.getDate() + step);
20064         }, function(start, end) {
20065           return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;
20066         }, function(date) {
20067           return date.getDate() - 1;
20068         });
20069         var days = day.range;
20070
20071         function weekday(i) {
20072           return newInterval(function(date) {
20073             date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
20074             date.setHours(0, 0, 0, 0);
20075           }, function(date, step) {
20076             date.setDate(date.getDate() + step * 7);
20077           }, function(start, end) {
20078             return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
20079           });
20080         }
20081
20082         var sunday = weekday(0);
20083         var monday = weekday(1);
20084         var tuesday = weekday(2);
20085         var wednesday = weekday(3);
20086         var thursday = weekday(4);
20087         var friday = weekday(5);
20088         var saturday = weekday(6);
20089
20090         var sundays = sunday.range;
20091         var mondays = monday.range;
20092         var tuesdays = tuesday.range;
20093         var wednesdays = wednesday.range;
20094         var thursdays = thursday.range;
20095         var fridays = friday.range;
20096         var saturdays = saturday.range;
20097
20098         var month = newInterval(function(date) {
20099           date.setDate(1);
20100           date.setHours(0, 0, 0, 0);
20101         }, function(date, step) {
20102           date.setMonth(date.getMonth() + step);
20103         }, function(start, end) {
20104           return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
20105         }, function(date) {
20106           return date.getMonth();
20107         });
20108         var months = month.range;
20109
20110         var year = newInterval(function(date) {
20111           date.setMonth(0, 1);
20112           date.setHours(0, 0, 0, 0);
20113         }, function(date, step) {
20114           date.setFullYear(date.getFullYear() + step);
20115         }, function(start, end) {
20116           return end.getFullYear() - start.getFullYear();
20117         }, function(date) {
20118           return date.getFullYear();
20119         });
20120
20121         // An optimized implementation for this simple case.
20122         year.every = function(k) {
20123           return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
20124             date.setFullYear(Math.floor(date.getFullYear() / k) * k);
20125             date.setMonth(0, 1);
20126             date.setHours(0, 0, 0, 0);
20127           }, function(date, step) {
20128             date.setFullYear(date.getFullYear() + step * k);
20129           });
20130         };
20131         var years = year.range;
20132
20133         var utcMinute = newInterval(function(date) {
20134           date.setUTCSeconds(0, 0);
20135         }, function(date, step) {
20136           date.setTime(+date + step * durationMinute);
20137         }, function(start, end) {
20138           return (end - start) / durationMinute;
20139         }, function(date) {
20140           return date.getUTCMinutes();
20141         });
20142         var utcMinutes = utcMinute.range;
20143
20144         var utcHour = newInterval(function(date) {
20145           date.setUTCMinutes(0, 0, 0);
20146         }, function(date, step) {
20147           date.setTime(+date + step * durationHour);
20148         }, function(start, end) {
20149           return (end - start) / durationHour;
20150         }, function(date) {
20151           return date.getUTCHours();
20152         });
20153         var utcHours = utcHour.range;
20154
20155         var utcDay = newInterval(function(date) {
20156           date.setUTCHours(0, 0, 0, 0);
20157         }, function(date, step) {
20158           date.setUTCDate(date.getUTCDate() + step);
20159         }, function(start, end) {
20160           return (end - start) / durationDay;
20161         }, function(date) {
20162           return date.getUTCDate() - 1;
20163         });
20164         var utcDays = utcDay.range;
20165
20166         function utcWeekday(i) {
20167           return newInterval(function(date) {
20168             date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
20169             date.setUTCHours(0, 0, 0, 0);
20170           }, function(date, step) {
20171             date.setUTCDate(date.getUTCDate() + step * 7);
20172           }, function(start, end) {
20173             return (end - start) / durationWeek;
20174           });
20175         }
20176
20177         var utcSunday = utcWeekday(0);
20178         var utcMonday = utcWeekday(1);
20179         var utcTuesday = utcWeekday(2);
20180         var utcWednesday = utcWeekday(3);
20181         var utcThursday = utcWeekday(4);
20182         var utcFriday = utcWeekday(5);
20183         var utcSaturday = utcWeekday(6);
20184
20185         var utcSundays = utcSunday.range;
20186         var utcMondays = utcMonday.range;
20187         var utcTuesdays = utcTuesday.range;
20188         var utcWednesdays = utcWednesday.range;
20189         var utcThursdays = utcThursday.range;
20190         var utcFridays = utcFriday.range;
20191         var utcSaturdays = utcSaturday.range;
20192
20193         var utcMonth = newInterval(function(date) {
20194           date.setUTCDate(1);
20195           date.setUTCHours(0, 0, 0, 0);
20196         }, function(date, step) {
20197           date.setUTCMonth(date.getUTCMonth() + step);
20198         }, function(start, end) {
20199           return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
20200         }, function(date) {
20201           return date.getUTCMonth();
20202         });
20203         var utcMonths = utcMonth.range;
20204
20205         var utcYear = newInterval(function(date) {
20206           date.setUTCMonth(0, 1);
20207           date.setUTCHours(0, 0, 0, 0);
20208         }, function(date, step) {
20209           date.setUTCFullYear(date.getUTCFullYear() + step);
20210         }, function(start, end) {
20211           return end.getUTCFullYear() - start.getUTCFullYear();
20212         }, function(date) {
20213           return date.getUTCFullYear();
20214         });
20215
20216         // An optimized implementation for this simple case.
20217         utcYear.every = function(k) {
20218           return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
20219             date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
20220             date.setUTCMonth(0, 1);
20221             date.setUTCHours(0, 0, 0, 0);
20222           }, function(date, step) {
20223             date.setUTCFullYear(date.getUTCFullYear() + step * k);
20224           });
20225         };
20226         var utcYears = utcYear.range;
20227
20228         function localDate(d) {
20229           if (0 <= d.y && d.y < 100) {
20230             var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
20231             date.setFullYear(d.y);
20232             return date;
20233           }
20234           return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
20235         }
20236
20237         function utcDate(d) {
20238           if (0 <= d.y && d.y < 100) {
20239             var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
20240             date.setUTCFullYear(d.y);
20241             return date;
20242           }
20243           return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
20244         }
20245
20246         function newDate(y, m, d) {
20247           return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};
20248         }
20249
20250         function formatLocale$1(locale) {
20251           var locale_dateTime = locale.dateTime,
20252               locale_date = locale.date,
20253               locale_time = locale.time,
20254               locale_periods = locale.periods,
20255               locale_weekdays = locale.days,
20256               locale_shortWeekdays = locale.shortDays,
20257               locale_months = locale.months,
20258               locale_shortMonths = locale.shortMonths;
20259
20260           var periodRe = formatRe(locale_periods),
20261               periodLookup = formatLookup(locale_periods),
20262               weekdayRe = formatRe(locale_weekdays),
20263               weekdayLookup = formatLookup(locale_weekdays),
20264               shortWeekdayRe = formatRe(locale_shortWeekdays),
20265               shortWeekdayLookup = formatLookup(locale_shortWeekdays),
20266               monthRe = formatRe(locale_months),
20267               monthLookup = formatLookup(locale_months),
20268               shortMonthRe = formatRe(locale_shortMonths),
20269               shortMonthLookup = formatLookup(locale_shortMonths);
20270
20271           var formats = {
20272             "a": formatShortWeekday,
20273             "A": formatWeekday,
20274             "b": formatShortMonth,
20275             "B": formatMonth,
20276             "c": null,
20277             "d": formatDayOfMonth,
20278             "e": formatDayOfMonth,
20279             "f": formatMicroseconds,
20280             "H": formatHour24,
20281             "I": formatHour12,
20282             "j": formatDayOfYear,
20283             "L": formatMilliseconds,
20284             "m": formatMonthNumber,
20285             "M": formatMinutes,
20286             "p": formatPeriod,
20287             "q": formatQuarter,
20288             "Q": formatUnixTimestamp,
20289             "s": formatUnixTimestampSeconds,
20290             "S": formatSeconds,
20291             "u": formatWeekdayNumberMonday,
20292             "U": formatWeekNumberSunday,
20293             "V": formatWeekNumberISO,
20294             "w": formatWeekdayNumberSunday,
20295             "W": formatWeekNumberMonday,
20296             "x": null,
20297             "X": null,
20298             "y": formatYear$1,
20299             "Y": formatFullYear,
20300             "Z": formatZone,
20301             "%": formatLiteralPercent
20302           };
20303
20304           var utcFormats = {
20305             "a": formatUTCShortWeekday,
20306             "A": formatUTCWeekday,
20307             "b": formatUTCShortMonth,
20308             "B": formatUTCMonth,
20309             "c": null,
20310             "d": formatUTCDayOfMonth,
20311             "e": formatUTCDayOfMonth,
20312             "f": formatUTCMicroseconds,
20313             "H": formatUTCHour24,
20314             "I": formatUTCHour12,
20315             "j": formatUTCDayOfYear,
20316             "L": formatUTCMilliseconds,
20317             "m": formatUTCMonthNumber,
20318             "M": formatUTCMinutes,
20319             "p": formatUTCPeriod,
20320             "q": formatUTCQuarter,
20321             "Q": formatUnixTimestamp,
20322             "s": formatUnixTimestampSeconds,
20323             "S": formatUTCSeconds,
20324             "u": formatUTCWeekdayNumberMonday,
20325             "U": formatUTCWeekNumberSunday,
20326             "V": formatUTCWeekNumberISO,
20327             "w": formatUTCWeekdayNumberSunday,
20328             "W": formatUTCWeekNumberMonday,
20329             "x": null,
20330             "X": null,
20331             "y": formatUTCYear,
20332             "Y": formatUTCFullYear,
20333             "Z": formatUTCZone,
20334             "%": formatLiteralPercent
20335           };
20336
20337           var parses = {
20338             "a": parseShortWeekday,
20339             "A": parseWeekday,
20340             "b": parseShortMonth,
20341             "B": parseMonth,
20342             "c": parseLocaleDateTime,
20343             "d": parseDayOfMonth,
20344             "e": parseDayOfMonth,
20345             "f": parseMicroseconds,
20346             "H": parseHour24,
20347             "I": parseHour24,
20348             "j": parseDayOfYear,
20349             "L": parseMilliseconds,
20350             "m": parseMonthNumber,
20351             "M": parseMinutes,
20352             "p": parsePeriod,
20353             "q": parseQuarter,
20354             "Q": parseUnixTimestamp,
20355             "s": parseUnixTimestampSeconds,
20356             "S": parseSeconds,
20357             "u": parseWeekdayNumberMonday,
20358             "U": parseWeekNumberSunday,
20359             "V": parseWeekNumberISO,
20360             "w": parseWeekdayNumberSunday,
20361             "W": parseWeekNumberMonday,
20362             "x": parseLocaleDate,
20363             "X": parseLocaleTime,
20364             "y": parseYear,
20365             "Y": parseFullYear,
20366             "Z": parseZone,
20367             "%": parseLiteralPercent
20368           };
20369
20370           // These recursive directive definitions must be deferred.
20371           formats.x = newFormat(locale_date, formats);
20372           formats.X = newFormat(locale_time, formats);
20373           formats.c = newFormat(locale_dateTime, formats);
20374           utcFormats.x = newFormat(locale_date, utcFormats);
20375           utcFormats.X = newFormat(locale_time, utcFormats);
20376           utcFormats.c = newFormat(locale_dateTime, utcFormats);
20377
20378           function newFormat(specifier, formats) {
20379             return function(date) {
20380               var string = [],
20381                   i = -1,
20382                   j = 0,
20383                   n = specifier.length,
20384                   c,
20385                   pad,
20386                   format;
20387
20388               if (!(date instanceof Date)) { date = new Date(+date); }
20389
20390               while (++i < n) {
20391                 if (specifier.charCodeAt(i) === 37) {
20392                   string.push(specifier.slice(j, i));
20393                   if ((pad = pads[c = specifier.charAt(++i)]) != null) { c = specifier.charAt(++i); }
20394                   else { pad = c === "e" ? " " : "0"; }
20395                   if (format = formats[c]) { c = format(date, pad); }
20396                   string.push(c);
20397                   j = i + 1;
20398                 }
20399               }
20400
20401               string.push(specifier.slice(j, i));
20402               return string.join("");
20403             };
20404           }
20405
20406           function newParse(specifier, Z) {
20407             return function(string) {
20408               var d = newDate(1900, undefined, 1),
20409                   i = parseSpecifier(d, specifier, string += "", 0),
20410                   week, day$1;
20411               if (i != string.length) { return null; }
20412
20413               // If a UNIX timestamp is specified, return it.
20414               if ("Q" in d) { return new Date(d.Q); }
20415               if ("s" in d) { return new Date(d.s * 1000 + ("L" in d ? d.L : 0)); }
20416
20417               // If this is utcParse, never use the local timezone.
20418               if (Z && !("Z" in d)) { d.Z = 0; }
20419
20420               // The am-pm flag is 0 for AM, and 1 for PM.
20421               if ("p" in d) { d.H = d.H % 12 + d.p * 12; }
20422
20423               // If the month was not specified, inherit from the quarter.
20424               if (d.m === undefined) { d.m = "q" in d ? d.q : 0; }
20425
20426               // Convert day-of-week and week-of-year to day-of-year.
20427               if ("V" in d) {
20428                 if (d.V < 1 || d.V > 53) { return null; }
20429                 if (!("w" in d)) { d.w = 1; }
20430                 if ("Z" in d) {
20431                   week = utcDate(newDate(d.y, 0, 1)), day$1 = week.getUTCDay();
20432                   week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);
20433                   week = utcDay.offset(week, (d.V - 1) * 7);
20434                   d.y = week.getUTCFullYear();
20435                   d.m = week.getUTCMonth();
20436                   d.d = week.getUTCDate() + (d.w + 6) % 7;
20437                 } else {
20438                   week = localDate(newDate(d.y, 0, 1)), day$1 = week.getDay();
20439                   week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week);
20440                   week = day.offset(week, (d.V - 1) * 7);
20441                   d.y = week.getFullYear();
20442                   d.m = week.getMonth();
20443                   d.d = week.getDate() + (d.w + 6) % 7;
20444                 }
20445               } else if ("W" in d || "U" in d) {
20446                 if (!("w" in d)) { d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0; }
20447                 day$1 = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();
20448                 d.m = 0;
20449                 d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$1 + 5) % 7 : d.w + d.U * 7 - (day$1 + 6) % 7;
20450               }
20451
20452               // If a time zone is specified, all fields are interpreted as UTC and then
20453               // offset according to the specified time zone.
20454               if ("Z" in d) {
20455                 d.H += d.Z / 100 | 0;
20456                 d.M += d.Z % 100;
20457                 return utcDate(d);
20458               }
20459
20460               // Otherwise, all fields are in local time.
20461               return localDate(d);
20462             };
20463           }
20464
20465           function parseSpecifier(d, specifier, string, j) {
20466             var i = 0,
20467                 n = specifier.length,
20468                 m = string.length,
20469                 c,
20470                 parse;
20471
20472             while (i < n) {
20473               if (j >= m) { return -1; }
20474               c = specifier.charCodeAt(i++);
20475               if (c === 37) {
20476                 c = specifier.charAt(i++);
20477                 parse = parses[c in pads ? specifier.charAt(i++) : c];
20478                 if (!parse || ((j = parse(d, string, j)) < 0)) { return -1; }
20479               } else if (c != string.charCodeAt(j++)) {
20480                 return -1;
20481               }
20482             }
20483
20484             return j;
20485           }
20486
20487           function parsePeriod(d, string, i) {
20488             var n = periodRe.exec(string.slice(i));
20489             return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;
20490           }
20491
20492           function parseShortWeekday(d, string, i) {
20493             var n = shortWeekdayRe.exec(string.slice(i));
20494             return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
20495           }
20496
20497           function parseWeekday(d, string, i) {
20498             var n = weekdayRe.exec(string.slice(i));
20499             return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
20500           }
20501
20502           function parseShortMonth(d, string, i) {
20503             var n = shortMonthRe.exec(string.slice(i));
20504             return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
20505           }
20506
20507           function parseMonth(d, string, i) {
20508             var n = monthRe.exec(string.slice(i));
20509             return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
20510           }
20511
20512           function parseLocaleDateTime(d, string, i) {
20513             return parseSpecifier(d, locale_dateTime, string, i);
20514           }
20515
20516           function parseLocaleDate(d, string, i) {
20517             return parseSpecifier(d, locale_date, string, i);
20518           }
20519
20520           function parseLocaleTime(d, string, i) {
20521             return parseSpecifier(d, locale_time, string, i);
20522           }
20523
20524           function formatShortWeekday(d) {
20525             return locale_shortWeekdays[d.getDay()];
20526           }
20527
20528           function formatWeekday(d) {
20529             return locale_weekdays[d.getDay()];
20530           }
20531
20532           function formatShortMonth(d) {
20533             return locale_shortMonths[d.getMonth()];
20534           }
20535
20536           function formatMonth(d) {
20537             return locale_months[d.getMonth()];
20538           }
20539
20540           function formatPeriod(d) {
20541             return locale_periods[+(d.getHours() >= 12)];
20542           }
20543
20544           function formatQuarter(d) {
20545             return 1 + ~~(d.getMonth() / 3);
20546           }
20547
20548           function formatUTCShortWeekday(d) {
20549             return locale_shortWeekdays[d.getUTCDay()];
20550           }
20551
20552           function formatUTCWeekday(d) {
20553             return locale_weekdays[d.getUTCDay()];
20554           }
20555
20556           function formatUTCShortMonth(d) {
20557             return locale_shortMonths[d.getUTCMonth()];
20558           }
20559
20560           function formatUTCMonth(d) {
20561             return locale_months[d.getUTCMonth()];
20562           }
20563
20564           function formatUTCPeriod(d) {
20565             return locale_periods[+(d.getUTCHours() >= 12)];
20566           }
20567
20568           function formatUTCQuarter(d) {
20569             return 1 + ~~(d.getUTCMonth() / 3);
20570           }
20571
20572           return {
20573             format: function(specifier) {
20574               var f = newFormat(specifier += "", formats);
20575               f.toString = function() { return specifier; };
20576               return f;
20577             },
20578             parse: function(specifier) {
20579               var p = newParse(specifier += "", false);
20580               p.toString = function() { return specifier; };
20581               return p;
20582             },
20583             utcFormat: function(specifier) {
20584               var f = newFormat(specifier += "", utcFormats);
20585               f.toString = function() { return specifier; };
20586               return f;
20587             },
20588             utcParse: function(specifier) {
20589               var p = newParse(specifier += "", true);
20590               p.toString = function() { return specifier; };
20591               return p;
20592             }
20593           };
20594         }
20595
20596         var pads = {"-": "", "_": " ", "0": "0"},
20597             numberRe = /^\s*\d+/, // note: ignores next directive
20598             percentRe = /^%/,
20599             requoteRe = /[\\^$*+?|[\]().{}]/g;
20600
20601         function pad$1(value, fill, width) {
20602           var sign = value < 0 ? "-" : "",
20603               string = (sign ? -value : value) + "",
20604               length = string.length;
20605           return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
20606         }
20607
20608         function requote(s) {
20609           return s.replace(requoteRe, "\\$&");
20610         }
20611
20612         function formatRe(names) {
20613           return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
20614         }
20615
20616         function formatLookup(names) {
20617           var map = {}, i = -1, n = names.length;
20618           while (++i < n) { map[names[i].toLowerCase()] = i; }
20619           return map;
20620         }
20621
20622         function parseWeekdayNumberSunday(d, string, i) {
20623           var n = numberRe.exec(string.slice(i, i + 1));
20624           return n ? (d.w = +n[0], i + n[0].length) : -1;
20625         }
20626
20627         function parseWeekdayNumberMonday(d, string, i) {
20628           var n = numberRe.exec(string.slice(i, i + 1));
20629           return n ? (d.u = +n[0], i + n[0].length) : -1;
20630         }
20631
20632         function parseWeekNumberSunday(d, string, i) {
20633           var n = numberRe.exec(string.slice(i, i + 2));
20634           return n ? (d.U = +n[0], i + n[0].length) : -1;
20635         }
20636
20637         function parseWeekNumberISO(d, string, i) {
20638           var n = numberRe.exec(string.slice(i, i + 2));
20639           return n ? (d.V = +n[0], i + n[0].length) : -1;
20640         }
20641
20642         function parseWeekNumberMonday(d, string, i) {
20643           var n = numberRe.exec(string.slice(i, i + 2));
20644           return n ? (d.W = +n[0], i + n[0].length) : -1;
20645         }
20646
20647         function parseFullYear(d, string, i) {
20648           var n = numberRe.exec(string.slice(i, i + 4));
20649           return n ? (d.y = +n[0], i + n[0].length) : -1;
20650         }
20651
20652         function parseYear(d, string, i) {
20653           var n = numberRe.exec(string.slice(i, i + 2));
20654           return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
20655         }
20656
20657         function parseZone(d, string, i) {
20658           var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6));
20659           return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
20660         }
20661
20662         function parseQuarter(d, string, i) {
20663           var n = numberRe.exec(string.slice(i, i + 1));
20664           return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;
20665         }
20666
20667         function parseMonthNumber(d, string, i) {
20668           var n = numberRe.exec(string.slice(i, i + 2));
20669           return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
20670         }
20671
20672         function parseDayOfMonth(d, string, i) {
20673           var n = numberRe.exec(string.slice(i, i + 2));
20674           return n ? (d.d = +n[0], i + n[0].length) : -1;
20675         }
20676
20677         function parseDayOfYear(d, string, i) {
20678           var n = numberRe.exec(string.slice(i, i + 3));
20679           return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
20680         }
20681
20682         function parseHour24(d, string, i) {
20683           var n = numberRe.exec(string.slice(i, i + 2));
20684           return n ? (d.H = +n[0], i + n[0].length) : -1;
20685         }
20686
20687         function parseMinutes(d, string, i) {
20688           var n = numberRe.exec(string.slice(i, i + 2));
20689           return n ? (d.M = +n[0], i + n[0].length) : -1;
20690         }
20691
20692         function parseSeconds(d, string, i) {
20693           var n = numberRe.exec(string.slice(i, i + 2));
20694           return n ? (d.S = +n[0], i + n[0].length) : -1;
20695         }
20696
20697         function parseMilliseconds(d, string, i) {
20698           var n = numberRe.exec(string.slice(i, i + 3));
20699           return n ? (d.L = +n[0], i + n[0].length) : -1;
20700         }
20701
20702         function parseMicroseconds(d, string, i) {
20703           var n = numberRe.exec(string.slice(i, i + 6));
20704           return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;
20705         }
20706
20707         function parseLiteralPercent(d, string, i) {
20708           var n = percentRe.exec(string.slice(i, i + 1));
20709           return n ? i + n[0].length : -1;
20710         }
20711
20712         function parseUnixTimestamp(d, string, i) {
20713           var n = numberRe.exec(string.slice(i));
20714           return n ? (d.Q = +n[0], i + n[0].length) : -1;
20715         }
20716
20717         function parseUnixTimestampSeconds(d, string, i) {
20718           var n = numberRe.exec(string.slice(i));
20719           return n ? (d.s = +n[0], i + n[0].length) : -1;
20720         }
20721
20722         function formatDayOfMonth(d, p) {
20723           return pad$1(d.getDate(), p, 2);
20724         }
20725
20726         function formatHour24(d, p) {
20727           return pad$1(d.getHours(), p, 2);
20728         }
20729
20730         function formatHour12(d, p) {
20731           return pad$1(d.getHours() % 12 || 12, p, 2);
20732         }
20733
20734         function formatDayOfYear(d, p) {
20735           return pad$1(1 + day.count(year(d), d), p, 3);
20736         }
20737
20738         function formatMilliseconds(d, p) {
20739           return pad$1(d.getMilliseconds(), p, 3);
20740         }
20741
20742         function formatMicroseconds(d, p) {
20743           return formatMilliseconds(d, p) + "000";
20744         }
20745
20746         function formatMonthNumber(d, p) {
20747           return pad$1(d.getMonth() + 1, p, 2);
20748         }
20749
20750         function formatMinutes(d, p) {
20751           return pad$1(d.getMinutes(), p, 2);
20752         }
20753
20754         function formatSeconds(d, p) {
20755           return pad$1(d.getSeconds(), p, 2);
20756         }
20757
20758         function formatWeekdayNumberMonday(d) {
20759           var day = d.getDay();
20760           return day === 0 ? 7 : day;
20761         }
20762
20763         function formatWeekNumberSunday(d, p) {
20764           return pad$1(sunday.count(year(d) - 1, d), p, 2);
20765         }
20766
20767         function formatWeekNumberISO(d, p) {
20768           var day = d.getDay();
20769           d = (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d);
20770           return pad$1(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2);
20771         }
20772
20773         function formatWeekdayNumberSunday(d) {
20774           return d.getDay();
20775         }
20776
20777         function formatWeekNumberMonday(d, p) {
20778           return pad$1(monday.count(year(d) - 1, d), p, 2);
20779         }
20780
20781         function formatYear$1(d, p) {
20782           return pad$1(d.getFullYear() % 100, p, 2);
20783         }
20784
20785         function formatFullYear(d, p) {
20786           return pad$1(d.getFullYear() % 10000, p, 4);
20787         }
20788
20789         function formatZone(d) {
20790           var z = d.getTimezoneOffset();
20791           return (z > 0 ? "-" : (z *= -1, "+"))
20792               + pad$1(z / 60 | 0, "0", 2)
20793               + pad$1(z % 60, "0", 2);
20794         }
20795
20796         function formatUTCDayOfMonth(d, p) {
20797           return pad$1(d.getUTCDate(), p, 2);
20798         }
20799
20800         function formatUTCHour24(d, p) {
20801           return pad$1(d.getUTCHours(), p, 2);
20802         }
20803
20804         function formatUTCHour12(d, p) {
20805           return pad$1(d.getUTCHours() % 12 || 12, p, 2);
20806         }
20807
20808         function formatUTCDayOfYear(d, p) {
20809           return pad$1(1 + utcDay.count(utcYear(d), d), p, 3);
20810         }
20811
20812         function formatUTCMilliseconds(d, p) {
20813           return pad$1(d.getUTCMilliseconds(), p, 3);
20814         }
20815
20816         function formatUTCMicroseconds(d, p) {
20817           return formatUTCMilliseconds(d, p) + "000";
20818         }
20819
20820         function formatUTCMonthNumber(d, p) {
20821           return pad$1(d.getUTCMonth() + 1, p, 2);
20822         }
20823
20824         function formatUTCMinutes(d, p) {
20825           return pad$1(d.getUTCMinutes(), p, 2);
20826         }
20827
20828         function formatUTCSeconds(d, p) {
20829           return pad$1(d.getUTCSeconds(), p, 2);
20830         }
20831
20832         function formatUTCWeekdayNumberMonday(d) {
20833           var dow = d.getUTCDay();
20834           return dow === 0 ? 7 : dow;
20835         }
20836
20837         function formatUTCWeekNumberSunday(d, p) {
20838           return pad$1(utcSunday.count(utcYear(d) - 1, d), p, 2);
20839         }
20840
20841         function formatUTCWeekNumberISO(d, p) {
20842           var day = d.getUTCDay();
20843           d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);
20844           return pad$1(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);
20845         }
20846
20847         function formatUTCWeekdayNumberSunday(d) {
20848           return d.getUTCDay();
20849         }
20850
20851         function formatUTCWeekNumberMonday(d, p) {
20852           return pad$1(utcMonday.count(utcYear(d) - 1, d), p, 2);
20853         }
20854
20855         function formatUTCYear(d, p) {
20856           return pad$1(d.getUTCFullYear() % 100, p, 2);
20857         }
20858
20859         function formatUTCFullYear(d, p) {
20860           return pad$1(d.getUTCFullYear() % 10000, p, 4);
20861         }
20862
20863         function formatUTCZone() {
20864           return "+0000";
20865         }
20866
20867         function formatLiteralPercent() {
20868           return "%";
20869         }
20870
20871         function formatUnixTimestamp(d) {
20872           return +d;
20873         }
20874
20875         function formatUnixTimestampSeconds(d) {
20876           return Math.floor(+d / 1000);
20877         }
20878
20879         var locale$1;
20880         var timeFormat;
20881         var timeParse;
20882         var utcFormat;
20883         var utcParse;
20884
20885         defaultLocale$1({
20886           dateTime: "%x, %X",
20887           date: "%-m/%-d/%Y",
20888           time: "%-I:%M:%S %p",
20889           periods: ["AM", "PM"],
20890           days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
20891           shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
20892           months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
20893           shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
20894         });
20895
20896         function defaultLocale$1(definition) {
20897           locale$1 = formatLocale$1(definition);
20898           timeFormat = locale$1.format;
20899           timeParse = locale$1.parse;
20900           utcFormat = locale$1.utcFormat;
20901           utcParse = locale$1.utcParse;
20902           return locale$1;
20903         }
20904
20905         var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
20906
20907         function formatIsoNative(date) {
20908           return date.toISOString();
20909         }
20910
20911         var formatIso = Date.prototype.toISOString
20912             ? formatIsoNative
20913             : utcFormat(isoSpecifier);
20914
20915         function parseIsoNative(string) {
20916           var date = new Date(string);
20917           return isNaN(date) ? null : date;
20918         }
20919
20920         var parseIso = +new Date("2000-01-01T00:00:00.000Z")
20921             ? parseIsoNative
20922             : utcParse(isoSpecifier);
20923
20924         var durationSecond$1 = 1000,
20925             durationMinute$1 = durationSecond$1 * 60,
20926             durationHour$1 = durationMinute$1 * 60,
20927             durationDay$1 = durationHour$1 * 24,
20928             durationWeek$1 = durationDay$1 * 7,
20929             durationMonth = durationDay$1 * 30,
20930             durationYear = durationDay$1 * 365;
20931
20932         function date$1(t) {
20933           return new Date(t);
20934         }
20935
20936         function number$3(t) {
20937           return t instanceof Date ? +t : +new Date(+t);
20938         }
20939
20940         function calendar(year, month, week, day, hour, minute, second, millisecond, format) {
20941           var scale = continuous(identity$5, identity$5),
20942               invert = scale.invert,
20943               domain = scale.domain;
20944
20945           var formatMillisecond = format(".%L"),
20946               formatSecond = format(":%S"),
20947               formatMinute = format("%I:%M"),
20948               formatHour = format("%I %p"),
20949               formatDay = format("%a %d"),
20950               formatWeek = format("%b %d"),
20951               formatMonth = format("%B"),
20952               formatYear = format("%Y");
20953
20954           var tickIntervals = [
20955             [second,  1,      durationSecond$1],
20956             [second,  5,  5 * durationSecond$1],
20957             [second, 15, 15 * durationSecond$1],
20958             [second, 30, 30 * durationSecond$1],
20959             [minute,  1,      durationMinute$1],
20960             [minute,  5,  5 * durationMinute$1],
20961             [minute, 15, 15 * durationMinute$1],
20962             [minute, 30, 30 * durationMinute$1],
20963             [  hour,  1,      durationHour$1  ],
20964             [  hour,  3,  3 * durationHour$1  ],
20965             [  hour,  6,  6 * durationHour$1  ],
20966             [  hour, 12, 12 * durationHour$1  ],
20967             [   day,  1,      durationDay$1   ],
20968             [   day,  2,  2 * durationDay$1   ],
20969             [  week,  1,      durationWeek$1  ],
20970             [ month,  1,      durationMonth ],
20971             [ month,  3,  3 * durationMonth ],
20972             [  year,  1,      durationYear  ]
20973           ];
20974
20975           function tickFormat(date) {
20976             return (second(date) < date ? formatMillisecond
20977                 : minute(date) < date ? formatSecond
20978                 : hour(date) < date ? formatMinute
20979                 : day(date) < date ? formatHour
20980                 : month(date) < date ? (week(date) < date ? formatDay : formatWeek)
20981                 : year(date) < date ? formatMonth
20982                 : formatYear)(date);
20983           }
20984
20985           function tickInterval(interval, start, stop, step) {
20986             if (interval == null) { interval = 10; }
20987
20988             // If a desired tick count is specified, pick a reasonable tick interval
20989             // based on the extent of the domain and a rough estimate of tick size.
20990             // Otherwise, assume interval is already a time interval and use it.
20991             if (typeof interval === "number") {
20992               var target = Math.abs(stop - start) / interval,
20993                   i = d3_bisector(function(i) { return i[2]; }).right(tickIntervals, target);
20994               if (i === tickIntervals.length) {
20995                 step = tickStep(start / durationYear, stop / durationYear, interval);
20996                 interval = year;
20997               } else if (i) {
20998                 i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
20999                 step = i[1];
21000                 interval = i[0];
21001               } else {
21002                 step = Math.max(tickStep(start, stop, interval), 1);
21003                 interval = millisecond;
21004               }
21005             }
21006
21007             return step == null ? interval : interval.every(step);
21008           }
21009
21010           scale.invert = function(y) {
21011             return new Date(invert(y));
21012           };
21013
21014           scale.domain = function(_) {
21015             return arguments.length ? domain(map$5.call(_, number$3)) : domain().map(date$1);
21016           };
21017
21018           scale.ticks = function(interval, step) {
21019             var d = domain(),
21020                 t0 = d[0],
21021                 t1 = d[d.length - 1],
21022                 r = t1 < t0,
21023                 t;
21024             if (r) { t = t0, t0 = t1, t1 = t; }
21025             t = tickInterval(interval, t0, t1, step);
21026             t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
21027             return r ? t.reverse() : t;
21028           };
21029
21030           scale.tickFormat = function(count, specifier) {
21031             return specifier == null ? tickFormat : format(specifier);
21032           };
21033
21034           scale.nice = function(interval, step) {
21035             var d = domain();
21036             return (interval = tickInterval(interval, d[0], d[d.length - 1], step))
21037                 ? domain(nice(d, interval))
21038                 : scale;
21039           };
21040
21041           scale.copy = function() {
21042             return copy$1(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));
21043           };
21044
21045           return scale;
21046         }
21047
21048         function time() {
21049           return initRange.apply(calendar(year, month, sunday, day, hour, minute, second, millisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);
21050         }
21051
21052         function utcTime() {
21053           return initRange.apply(calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);
21054         }
21055
21056         function transformer$2() {
21057           var x0 = 0,
21058               x1 = 1,
21059               t0,
21060               t1,
21061               k10,
21062               transform,
21063               interpolator = identity$5,
21064               clamp = false,
21065               unknown;
21066
21067           function scale(x) {
21068             return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));
21069           }
21070
21071           scale.domain = function(_) {
21072             return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];
21073           };
21074
21075           scale.clamp = function(_) {
21076             return arguments.length ? (clamp = !!_, scale) : clamp;
21077           };
21078
21079           scale.interpolator = function(_) {
21080             return arguments.length ? (interpolator = _, scale) : interpolator;
21081           };
21082
21083           scale.unknown = function(_) {
21084             return arguments.length ? (unknown = _, scale) : unknown;
21085           };
21086
21087           return function(t) {
21088             transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);
21089             return scale;
21090           };
21091         }
21092
21093         function copy$2(source, target) {
21094           return target
21095               .domain(source.domain())
21096               .interpolator(source.interpolator())
21097               .clamp(source.clamp())
21098               .unknown(source.unknown());
21099         }
21100
21101         function sequential() {
21102           var scale = linearish(transformer$2()(identity$5));
21103
21104           scale.copy = function() {
21105             return copy$2(scale, sequential());
21106           };
21107
21108           return initInterpolator.apply(scale, arguments);
21109         }
21110
21111         function sequentialLog() {
21112           var scale = loggish(transformer$2()).domain([1, 10]);
21113
21114           scale.copy = function() {
21115             return copy$2(scale, sequentialLog()).base(scale.base());
21116           };
21117
21118           return initInterpolator.apply(scale, arguments);
21119         }
21120
21121         function sequentialSymlog() {
21122           var scale = symlogish(transformer$2());
21123
21124           scale.copy = function() {
21125             return copy$2(scale, sequentialSymlog()).constant(scale.constant());
21126           };
21127
21128           return initInterpolator.apply(scale, arguments);
21129         }
21130
21131         function sequentialPow() {
21132           var scale = powish(transformer$2());
21133
21134           scale.copy = function() {
21135             return copy$2(scale, sequentialPow()).exponent(scale.exponent());
21136           };
21137
21138           return initInterpolator.apply(scale, arguments);
21139         }
21140
21141         function sequentialSqrt() {
21142           return sequentialPow.apply(null, arguments).exponent(0.5);
21143         }
21144
21145         function sequentialQuantile() {
21146           var domain = [],
21147               interpolator = identity$5;
21148
21149           function scale(x) {
21150             if (!isNaN(x = +x)) { return interpolator((bisectRight(domain, x) - 1) / (domain.length - 1)); }
21151           }
21152
21153           scale.domain = function(_) {
21154             if (!arguments.length) { return domain.slice(); }
21155             domain = [];
21156             for (var i = 0, n = _.length, d; i < n; ++i) { if (d = _[i], d != null && !isNaN(d = +d)) { domain.push(d); } }
21157             domain.sort(d3_ascending);
21158             return scale;
21159           };
21160
21161           scale.interpolator = function(_) {
21162             return arguments.length ? (interpolator = _, scale) : interpolator;
21163           };
21164
21165           scale.copy = function() {
21166             return sequentialQuantile(interpolator).domain(domain);
21167           };
21168
21169           return initInterpolator.apply(scale, arguments);
21170         }
21171
21172         function transformer$3() {
21173           var x0 = 0,
21174               x1 = 0.5,
21175               x2 = 1,
21176               t0,
21177               t1,
21178               t2,
21179               k10,
21180               k21,
21181               interpolator = identity$5,
21182               transform,
21183               clamp = false,
21184               unknown;
21185
21186           function scale(x) {
21187             return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));
21188           }
21189
21190           scale.domain = function(_) {
21191             return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), t2 = transform(x2 = +_[2]), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2];
21192           };
21193
21194           scale.clamp = function(_) {
21195             return arguments.length ? (clamp = !!_, scale) : clamp;
21196           };
21197
21198           scale.interpolator = function(_) {
21199             return arguments.length ? (interpolator = _, scale) : interpolator;
21200           };
21201
21202           scale.unknown = function(_) {
21203             return arguments.length ? (unknown = _, scale) : unknown;
21204           };
21205
21206           return function(t) {
21207             transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1);
21208             return scale;
21209           };
21210         }
21211
21212         function diverging() {
21213           var scale = linearish(transformer$3()(identity$5));
21214
21215           scale.copy = function() {
21216             return copy$2(scale, diverging());
21217           };
21218
21219           return initInterpolator.apply(scale, arguments);
21220         }
21221
21222         function divergingLog() {
21223           var scale = loggish(transformer$3()).domain([0.1, 1, 10]);
21224
21225           scale.copy = function() {
21226             return copy$2(scale, divergingLog()).base(scale.base());
21227           };
21228
21229           return initInterpolator.apply(scale, arguments);
21230         }
21231
21232         function divergingSymlog() {
21233           var scale = symlogish(transformer$3());
21234
21235           scale.copy = function() {
21236             return copy$2(scale, divergingSymlog()).constant(scale.constant());
21237           };
21238
21239           return initInterpolator.apply(scale, arguments);
21240         }
21241
21242         function divergingPow() {
21243           var scale = powish(transformer$3());
21244
21245           scale.copy = function() {
21246             return copy$2(scale, divergingPow()).exponent(scale.exponent());
21247           };
21248
21249           return initInterpolator.apply(scale, arguments);
21250         }
21251
21252         function divergingSqrt() {
21253           return divergingPow.apply(null, arguments).exponent(0.5);
21254         }
21255
21256         function colors(specifier) {
21257           var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;
21258           while (i < n) { colors[i] = "#" + specifier.slice(i * 6, ++i * 6); }
21259           return colors;
21260         }
21261
21262         var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf");
21263
21264         var Accent = colors("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666");
21265
21266         var Dark2 = colors("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666");
21267
21268         var Paired = colors("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928");
21269
21270         var Pastel1 = colors("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2");
21271
21272         var Pastel2 = colors("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc");
21273
21274         var Set1 = colors("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999");
21275
21276         var Set2 = colors("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3");
21277
21278         var Set3 = colors("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f");
21279
21280         var Tableau10 = colors("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab");
21281
21282         function ramp(scheme) {
21283           return rgbBasis(scheme[scheme.length - 1]);
21284         }
21285
21286         var scheme = new Array(3).concat(
21287           "d8b365f5f5f55ab4ac",
21288           "a6611adfc27d80cdc1018571",
21289           "a6611adfc27df5f5f580cdc1018571",
21290           "8c510ad8b365f6e8c3c7eae55ab4ac01665e",
21291           "8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e",
21292           "8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e",
21293           "8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e",
21294           "5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30",
21295           "5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30"
21296         ).map(colors);
21297
21298         var BrBG = ramp(scheme);
21299
21300         var scheme$1 = new Array(3).concat(
21301           "af8dc3f7f7f77fbf7b",
21302           "7b3294c2a5cfa6dba0008837",
21303           "7b3294c2a5cff7f7f7a6dba0008837",
21304           "762a83af8dc3e7d4e8d9f0d37fbf7b1b7837",
21305           "762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837",
21306           "762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837",
21307           "762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837",
21308           "40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b",
21309           "40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b"
21310         ).map(colors);
21311
21312         var PRGn = ramp(scheme$1);
21313
21314         var scheme$2 = new Array(3).concat(
21315           "e9a3c9f7f7f7a1d76a",
21316           "d01c8bf1b6dab8e1864dac26",
21317           "d01c8bf1b6daf7f7f7b8e1864dac26",
21318           "c51b7de9a3c9fde0efe6f5d0a1d76a4d9221",
21319           "c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221",
21320           "c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221",
21321           "c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221",
21322           "8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419",
21323           "8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419"
21324         ).map(colors);
21325
21326         var PiYG = ramp(scheme$2);
21327
21328         var scheme$3 = new Array(3).concat(
21329           "998ec3f7f7f7f1a340",
21330           "5e3c99b2abd2fdb863e66101",
21331           "5e3c99b2abd2f7f7f7fdb863e66101",
21332           "542788998ec3d8daebfee0b6f1a340b35806",
21333           "542788998ec3d8daebf7f7f7fee0b6f1a340b35806",
21334           "5427888073acb2abd2d8daebfee0b6fdb863e08214b35806",
21335           "5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806",
21336           "2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08",
21337           "2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08"
21338         ).map(colors);
21339
21340         var PuOr = ramp(scheme$3);
21341
21342         var scheme$4 = new Array(3).concat(
21343           "ef8a62f7f7f767a9cf",
21344           "ca0020f4a58292c5de0571b0",
21345           "ca0020f4a582f7f7f792c5de0571b0",
21346           "b2182bef8a62fddbc7d1e5f067a9cf2166ac",
21347           "b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac",
21348           "b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac",
21349           "b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac",
21350           "67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061",
21351           "67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061"
21352         ).map(colors);
21353
21354         var RdBu = ramp(scheme$4);
21355
21356         var scheme$5 = new Array(3).concat(
21357           "ef8a62ffffff999999",
21358           "ca0020f4a582bababa404040",
21359           "ca0020f4a582ffffffbababa404040",
21360           "b2182bef8a62fddbc7e0e0e09999994d4d4d",
21361           "b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d",
21362           "b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d",
21363           "b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d",
21364           "67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a",
21365           "67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a"
21366         ).map(colors);
21367
21368         var RdGy = ramp(scheme$5);
21369
21370         var scheme$6 = new Array(3).concat(
21371           "fc8d59ffffbf91bfdb",
21372           "d7191cfdae61abd9e92c7bb6",
21373           "d7191cfdae61ffffbfabd9e92c7bb6",
21374           "d73027fc8d59fee090e0f3f891bfdb4575b4",
21375           "d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4",
21376           "d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4",
21377           "d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4",
21378           "a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695",
21379           "a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695"
21380         ).map(colors);
21381
21382         var RdYlBu = ramp(scheme$6);
21383
21384         var scheme$7 = new Array(3).concat(
21385           "fc8d59ffffbf91cf60",
21386           "d7191cfdae61a6d96a1a9641",
21387           "d7191cfdae61ffffbfa6d96a1a9641",
21388           "d73027fc8d59fee08bd9ef8b91cf601a9850",
21389           "d73027fc8d59fee08bffffbfd9ef8b91cf601a9850",
21390           "d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850",
21391           "d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850",
21392           "a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837",
21393           "a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837"
21394         ).map(colors);
21395
21396         var RdYlGn = ramp(scheme$7);
21397
21398         var scheme$8 = new Array(3).concat(
21399           "fc8d59ffffbf99d594",
21400           "d7191cfdae61abdda42b83ba",
21401           "d7191cfdae61ffffbfabdda42b83ba",
21402           "d53e4ffc8d59fee08be6f59899d5943288bd",
21403           "d53e4ffc8d59fee08bffffbfe6f59899d5943288bd",
21404           "d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd",
21405           "d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd",
21406           "9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2",
21407           "9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2"
21408         ).map(colors);
21409
21410         var Spectral = ramp(scheme$8);
21411
21412         var scheme$9 = new Array(3).concat(
21413           "e5f5f999d8c92ca25f",
21414           "edf8fbb2e2e266c2a4238b45",
21415           "edf8fbb2e2e266c2a42ca25f006d2c",
21416           "edf8fbccece699d8c966c2a42ca25f006d2c",
21417           "edf8fbccece699d8c966c2a441ae76238b45005824",
21418           "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824",
21419           "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b"
21420         ).map(colors);
21421
21422         var BuGn = ramp(scheme$9);
21423
21424         var scheme$a = new Array(3).concat(
21425           "e0ecf49ebcda8856a7",
21426           "edf8fbb3cde38c96c688419d",
21427           "edf8fbb3cde38c96c68856a7810f7c",
21428           "edf8fbbfd3e69ebcda8c96c68856a7810f7c",
21429           "edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b",
21430           "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b",
21431           "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b"
21432         ).map(colors);
21433
21434         var BuPu = ramp(scheme$a);
21435
21436         var scheme$b = new Array(3).concat(
21437           "e0f3dba8ddb543a2ca",
21438           "f0f9e8bae4bc7bccc42b8cbe",
21439           "f0f9e8bae4bc7bccc443a2ca0868ac",
21440           "f0f9e8ccebc5a8ddb57bccc443a2ca0868ac",
21441           "f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e",
21442           "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e",
21443           "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081"
21444         ).map(colors);
21445
21446         var GnBu = ramp(scheme$b);
21447
21448         var scheme$c = new Array(3).concat(
21449           "fee8c8fdbb84e34a33",
21450           "fef0d9fdcc8afc8d59d7301f",
21451           "fef0d9fdcc8afc8d59e34a33b30000",
21452           "fef0d9fdd49efdbb84fc8d59e34a33b30000",
21453           "fef0d9fdd49efdbb84fc8d59ef6548d7301f990000",
21454           "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000",
21455           "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000"
21456         ).map(colors);
21457
21458         var OrRd = ramp(scheme$c);
21459
21460         var scheme$d = new Array(3).concat(
21461           "ece2f0a6bddb1c9099",
21462           "f6eff7bdc9e167a9cf02818a",
21463           "f6eff7bdc9e167a9cf1c9099016c59",
21464           "f6eff7d0d1e6a6bddb67a9cf1c9099016c59",
21465           "f6eff7d0d1e6a6bddb67a9cf3690c002818a016450",
21466           "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450",
21467           "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636"
21468         ).map(colors);
21469
21470         var PuBuGn = ramp(scheme$d);
21471
21472         var scheme$e = new Array(3).concat(
21473           "ece7f2a6bddb2b8cbe",
21474           "f1eef6bdc9e174a9cf0570b0",
21475           "f1eef6bdc9e174a9cf2b8cbe045a8d",
21476           "f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d",
21477           "f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b",
21478           "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b",
21479           "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858"
21480         ).map(colors);
21481
21482         var PuBu = ramp(scheme$e);
21483
21484         var scheme$f = new Array(3).concat(
21485           "e7e1efc994c7dd1c77",
21486           "f1eef6d7b5d8df65b0ce1256",
21487           "f1eef6d7b5d8df65b0dd1c77980043",
21488           "f1eef6d4b9dac994c7df65b0dd1c77980043",
21489           "f1eef6d4b9dac994c7df65b0e7298ace125691003f",
21490           "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f",
21491           "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f"
21492         ).map(colors);
21493
21494         var PuRd = ramp(scheme$f);
21495
21496         var scheme$g = new Array(3).concat(
21497           "fde0ddfa9fb5c51b8a",
21498           "feebe2fbb4b9f768a1ae017e",
21499           "feebe2fbb4b9f768a1c51b8a7a0177",
21500           "feebe2fcc5c0fa9fb5f768a1c51b8a7a0177",
21501           "feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177",
21502           "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177",
21503           "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a"
21504         ).map(colors);
21505
21506         var RdPu = ramp(scheme$g);
21507
21508         var scheme$h = new Array(3).concat(
21509           "edf8b17fcdbb2c7fb8",
21510           "ffffcca1dab441b6c4225ea8",
21511           "ffffcca1dab441b6c42c7fb8253494",
21512           "ffffccc7e9b47fcdbb41b6c42c7fb8253494",
21513           "ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84",
21514           "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84",
21515           "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58"
21516         ).map(colors);
21517
21518         var YlGnBu = ramp(scheme$h);
21519
21520         var scheme$i = new Array(3).concat(
21521           "f7fcb9addd8e31a354",
21522           "ffffccc2e69978c679238443",
21523           "ffffccc2e69978c67931a354006837",
21524           "ffffccd9f0a3addd8e78c67931a354006837",
21525           "ffffccd9f0a3addd8e78c67941ab5d238443005a32",
21526           "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32",
21527           "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529"
21528         ).map(colors);
21529
21530         var YlGn = ramp(scheme$i);
21531
21532         var scheme$j = new Array(3).concat(
21533           "fff7bcfec44fd95f0e",
21534           "ffffd4fed98efe9929cc4c02",
21535           "ffffd4fed98efe9929d95f0e993404",
21536           "ffffd4fee391fec44ffe9929d95f0e993404",
21537           "ffffd4fee391fec44ffe9929ec7014cc4c028c2d04",
21538           "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04",
21539           "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506"
21540         ).map(colors);
21541
21542         var YlOrBr = ramp(scheme$j);
21543
21544         var scheme$k = new Array(3).concat(
21545           "ffeda0feb24cf03b20",
21546           "ffffb2fecc5cfd8d3ce31a1c",
21547           "ffffb2fecc5cfd8d3cf03b20bd0026",
21548           "ffffb2fed976feb24cfd8d3cf03b20bd0026",
21549           "ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026",
21550           "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026",
21551           "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026"
21552         ).map(colors);
21553
21554         var YlOrRd = ramp(scheme$k);
21555
21556         var scheme$l = new Array(3).concat(
21557           "deebf79ecae13182bd",
21558           "eff3ffbdd7e76baed62171b5",
21559           "eff3ffbdd7e76baed63182bd08519c",
21560           "eff3ffc6dbef9ecae16baed63182bd08519c",
21561           "eff3ffc6dbef9ecae16baed64292c62171b5084594",
21562           "f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594",
21563           "f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b"
21564         ).map(colors);
21565
21566         var Blues = ramp(scheme$l);
21567
21568         var scheme$m = new Array(3).concat(
21569           "e5f5e0a1d99b31a354",
21570           "edf8e9bae4b374c476238b45",
21571           "edf8e9bae4b374c47631a354006d2c",
21572           "edf8e9c7e9c0a1d99b74c47631a354006d2c",
21573           "edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32",
21574           "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32",
21575           "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b"
21576         ).map(colors);
21577
21578         var Greens = ramp(scheme$m);
21579
21580         var scheme$n = new Array(3).concat(
21581           "f0f0f0bdbdbd636363",
21582           "f7f7f7cccccc969696525252",
21583           "f7f7f7cccccc969696636363252525",
21584           "f7f7f7d9d9d9bdbdbd969696636363252525",
21585           "f7f7f7d9d9d9bdbdbd969696737373525252252525",
21586           "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525",
21587           "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000"
21588         ).map(colors);
21589
21590         var Greys = ramp(scheme$n);
21591
21592         var scheme$o = new Array(3).concat(
21593           "efedf5bcbddc756bb1",
21594           "f2f0f7cbc9e29e9ac86a51a3",
21595           "f2f0f7cbc9e29e9ac8756bb154278f",
21596           "f2f0f7dadaebbcbddc9e9ac8756bb154278f",
21597           "f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486",
21598           "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486",
21599           "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d"
21600         ).map(colors);
21601
21602         var Purples = ramp(scheme$o);
21603
21604         var scheme$p = new Array(3).concat(
21605           "fee0d2fc9272de2d26",
21606           "fee5d9fcae91fb6a4acb181d",
21607           "fee5d9fcae91fb6a4ade2d26a50f15",
21608           "fee5d9fcbba1fc9272fb6a4ade2d26a50f15",
21609           "fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d",
21610           "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d",
21611           "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d"
21612         ).map(colors);
21613
21614         var Reds = ramp(scheme$p);
21615
21616         var scheme$q = new Array(3).concat(
21617           "fee6cefdae6be6550d",
21618           "feeddefdbe85fd8d3cd94701",
21619           "feeddefdbe85fd8d3ce6550da63603",
21620           "feeddefdd0a2fdae6bfd8d3ce6550da63603",
21621           "feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04",
21622           "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04",
21623           "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704"
21624         ).map(colors);
21625
21626         var Oranges = ramp(scheme$q);
21627
21628         function cividis(t) {
21629           t = Math.max(0, Math.min(1, t));
21630           return "rgb("
21631               + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + ", "
21632               + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + ", "
21633               + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))
21634               + ")";
21635         }
21636
21637         var cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));
21638
21639         var warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
21640
21641         var cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
21642
21643         var c = cubehelix();
21644
21645         function rainbow(t) {
21646           if (t < 0 || t > 1) { t -= Math.floor(t); }
21647           var ts = Math.abs(t - 0.5);
21648           c.h = 360 * t - 100;
21649           c.s = 1.5 - 1.5 * ts;
21650           c.l = 0.8 - 0.9 * ts;
21651           return c + "";
21652         }
21653
21654         var c$1 = rgb(),
21655             pi_1_3 = Math.PI / 3,
21656             pi_2_3 = Math.PI * 2 / 3;
21657
21658         function sinebow(t) {
21659           var x;
21660           t = (0.5 - t) * Math.PI;
21661           c$1.r = 255 * (x = Math.sin(t)) * x;
21662           c$1.g = 255 * (x = Math.sin(t + pi_1_3)) * x;
21663           c$1.b = 255 * (x = Math.sin(t + pi_2_3)) * x;
21664           return c$1 + "";
21665         }
21666
21667         function turbo(t) {
21668           t = Math.max(0, Math.min(1, t));
21669           return "rgb("
21670               + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + ", "
21671               + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + ", "
21672               + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))
21673               + ")";
21674         }
21675
21676         function ramp$1(range) {
21677           var n = range.length;
21678           return function(t) {
21679             return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
21680           };
21681         }
21682
21683         var viridis = ramp$1(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));
21684
21685         var magma = ramp$1(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf"));
21686
21687         var inferno = ramp$1(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4"));
21688
21689         var plasma = ramp$1(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));
21690
21691         function constant$b(x) {
21692           return function constant() {
21693             return x;
21694           };
21695         }
21696
21697         var abs$3 = Math.abs;
21698         var atan2$1 = Math.atan2;
21699         var cos$2 = Math.cos;
21700         var max$4 = Math.max;
21701         var min$1 = Math.min;
21702         var sin$2 = Math.sin;
21703         var sqrt$2 = Math.sqrt;
21704
21705         var epsilon$3 = 1e-12;
21706         var pi$4 = Math.PI;
21707         var halfPi$3 = pi$4 / 2;
21708         var tau$4 = 2 * pi$4;
21709
21710         function acos$1(x) {
21711           return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);
21712         }
21713
21714         function asin$1(x) {
21715           return x >= 1 ? halfPi$3 : x <= -1 ? -halfPi$3 : Math.asin(x);
21716         }
21717
21718         function arcInnerRadius(d) {
21719           return d.innerRadius;
21720         }
21721
21722         function arcOuterRadius(d) {
21723           return d.outerRadius;
21724         }
21725
21726         function arcStartAngle(d) {
21727           return d.startAngle;
21728         }
21729
21730         function arcEndAngle(d) {
21731           return d.endAngle;
21732         }
21733
21734         function arcPadAngle(d) {
21735           return d && d.padAngle; // Note: optional!
21736         }
21737
21738         function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
21739           var x10 = x1 - x0, y10 = y1 - y0,
21740               x32 = x3 - x2, y32 = y3 - y2,
21741               t = y32 * x10 - x32 * y10;
21742           if (t * t < epsilon$3) { return; }
21743           t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;
21744           return [x0 + t * x10, y0 + t * y10];
21745         }
21746
21747         // Compute perpendicular offset line of length rc.
21748         // http://mathworld.wolfram.com/Circle-LineIntersection.html
21749         function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
21750           var x01 = x0 - x1,
21751               y01 = y0 - y1,
21752               lo = (cw ? rc : -rc) / sqrt$2(x01 * x01 + y01 * y01),
21753               ox = lo * y01,
21754               oy = -lo * x01,
21755               x11 = x0 + ox,
21756               y11 = y0 + oy,
21757               x10 = x1 + ox,
21758               y10 = y1 + oy,
21759               x00 = (x11 + x10) / 2,
21760               y00 = (y11 + y10) / 2,
21761               dx = x10 - x11,
21762               dy = y10 - y11,
21763               d2 = dx * dx + dy * dy,
21764               r = r1 - rc,
21765               D = x11 * y10 - x10 * y11,
21766               d = (dy < 0 ? -1 : 1) * sqrt$2(max$4(0, r * r * d2 - D * D)),
21767               cx0 = (D * dy - dx * d) / d2,
21768               cy0 = (-D * dx - dy * d) / d2,
21769               cx1 = (D * dy + dx * d) / d2,
21770               cy1 = (-D * dx + dy * d) / d2,
21771               dx0 = cx0 - x00,
21772               dy0 = cy0 - y00,
21773               dx1 = cx1 - x00,
21774               dy1 = cy1 - y00;
21775
21776           // Pick the closer of the two intersection points.
21777           // TODO Is there a faster way to determine which intersection to use?
21778           if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) { cx0 = cx1, cy0 = cy1; }
21779
21780           return {
21781             cx: cx0,
21782             cy: cy0,
21783             x01: -ox,
21784             y01: -oy,
21785             x11: cx0 * (r1 / r - 1),
21786             y11: cy0 * (r1 / r - 1)
21787           };
21788         }
21789
21790         function arc() {
21791           var innerRadius = arcInnerRadius,
21792               outerRadius = arcOuterRadius,
21793               cornerRadius = constant$b(0),
21794               padRadius = null,
21795               startAngle = arcStartAngle,
21796               endAngle = arcEndAngle,
21797               padAngle = arcPadAngle,
21798               context = null;
21799
21800           function arc() {
21801             var buffer,
21802                 r,
21803                 r0 = +innerRadius.apply(this, arguments),
21804                 r1 = +outerRadius.apply(this, arguments),
21805                 a0 = startAngle.apply(this, arguments) - halfPi$3,
21806                 a1 = endAngle.apply(this, arguments) - halfPi$3,
21807                 da = abs$3(a1 - a0),
21808                 cw = a1 > a0;
21809
21810             if (!context) { context = buffer = path(); }
21811
21812             // Ensure that the outer radius is always larger than the inner radius.
21813             if (r1 < r0) { r = r1, r1 = r0, r0 = r; }
21814
21815             // Is it a point?
21816             if (!(r1 > epsilon$3)) { context.moveTo(0, 0); }
21817
21818             // Or is it a circle or annulus?
21819             else if (da > tau$4 - epsilon$3) {
21820               context.moveTo(r1 * cos$2(a0), r1 * sin$2(a0));
21821               context.arc(0, 0, r1, a0, a1, !cw);
21822               if (r0 > epsilon$3) {
21823                 context.moveTo(r0 * cos$2(a1), r0 * sin$2(a1));
21824                 context.arc(0, 0, r0, a1, a0, cw);
21825               }
21826             }
21827
21828             // Or is it a circular or annular sector?
21829             else {
21830               var a01 = a0,
21831                   a11 = a1,
21832                   a00 = a0,
21833                   a10 = a1,
21834                   da0 = da,
21835                   da1 = da,
21836                   ap = padAngle.apply(this, arguments) / 2,
21837                   rp = (ap > epsilon$3) && (padRadius ? +padRadius.apply(this, arguments) : sqrt$2(r0 * r0 + r1 * r1)),
21838                   rc = min$1(abs$3(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
21839                   rc0 = rc,
21840                   rc1 = rc,
21841                   t0,
21842                   t1;
21843
21844               // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
21845               if (rp > epsilon$3) {
21846                 var p0 = asin$1(rp / r0 * sin$2(ap)),
21847                     p1 = asin$1(rp / r1 * sin$2(ap));
21848                 if ((da0 -= p0 * 2) > epsilon$3) { p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0; }
21849                 else { da0 = 0, a00 = a10 = (a0 + a1) / 2; }
21850                 if ((da1 -= p1 * 2) > epsilon$3) { p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1; }
21851                 else { da1 = 0, a01 = a11 = (a0 + a1) / 2; }
21852               }
21853
21854               var x01 = r1 * cos$2(a01),
21855                   y01 = r1 * sin$2(a01),
21856                   x10 = r0 * cos$2(a10),
21857                   y10 = r0 * sin$2(a10);
21858
21859               // Apply rounded corners?
21860               if (rc > epsilon$3) {
21861                 var x11 = r1 * cos$2(a11),
21862                     y11 = r1 * sin$2(a11),
21863                     x00 = r0 * cos$2(a00),
21864                     y00 = r0 * sin$2(a00),
21865                     oc;
21866
21867                 // Restrict the corner radius according to the sector angle.
21868                 if (da < pi$4 && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {
21869                   var ax = x01 - oc[0],
21870                       ay = y01 - oc[1],
21871                       bx = x11 - oc[0],
21872                       by = y11 - oc[1],
21873                       kc = 1 / sin$2(acos$1((ax * bx + ay * by) / (sqrt$2(ax * ax + ay * ay) * sqrt$2(bx * bx + by * by))) / 2),
21874                       lc = sqrt$2(oc[0] * oc[0] + oc[1] * oc[1]);
21875                   rc0 = min$1(rc, (r0 - lc) / (kc - 1));
21876                   rc1 = min$1(rc, (r1 - lc) / (kc + 1));
21877                 }
21878               }
21879
21880               // Is the sector collapsed to a line?
21881               if (!(da1 > epsilon$3)) { context.moveTo(x01, y01); }
21882
21883               // Does the sector’s outer ring have rounded corners?
21884               else if (rc1 > epsilon$3) {
21885                 t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
21886                 t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
21887
21888                 context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
21889
21890                 // Have the corners merged?
21891                 if (rc1 < rc) { context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw); }
21892
21893                 // Otherwise, draw the two corners and the ring.
21894                 else {
21895                   context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);
21896                   context.arc(0, 0, r1, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
21897                   context.arc(t1.cx, t1.cy, rc1, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);
21898                 }
21899               }
21900
21901               // Or is the outer ring just a circular arc?
21902               else { context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); }
21903
21904               // Is there no inner ring, and it’s a circular sector?
21905               // Or perhaps it’s an annular sector collapsed due to padding?
21906               if (!(r0 > epsilon$3) || !(da0 > epsilon$3)) { context.lineTo(x10, y10); }
21907
21908               // Does the sector’s inner ring (or point) have rounded corners?
21909               else if (rc0 > epsilon$3) {
21910                 t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
21911                 t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
21912
21913                 context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
21914
21915                 // Have the corners merged?
21916                 if (rc0 < rc) { context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw); }
21917
21918                 // Otherwise, draw the two corners and the ring.
21919                 else {
21920                   context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);
21921                   context.arc(0, 0, r0, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), cw);
21922                   context.arc(t1.cx, t1.cy, rc0, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);
21923                 }
21924               }
21925
21926               // Or is the inner ring just a circular arc?
21927               else { context.arc(0, 0, r0, a10, a00, cw); }
21928             }
21929
21930             context.closePath();
21931
21932             if (buffer) { return context = null, buffer + "" || null; }
21933           }
21934
21935           arc.centroid = function() {
21936             var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
21937                 a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$4 / 2;
21938             return [cos$2(a) * r, sin$2(a) * r];
21939           };
21940
21941           arc.innerRadius = function(_) {
21942             return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : innerRadius;
21943           };
21944
21945           arc.outerRadius = function(_) {
21946             return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : outerRadius;
21947           };
21948
21949           arc.cornerRadius = function(_) {
21950             return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : cornerRadius;
21951           };
21952
21953           arc.padRadius = function(_) {
21954             return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), arc) : padRadius;
21955           };
21956
21957           arc.startAngle = function(_) {
21958             return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : startAngle;
21959           };
21960
21961           arc.endAngle = function(_) {
21962             return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : endAngle;
21963           };
21964
21965           arc.padAngle = function(_) {
21966             return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : padAngle;
21967           };
21968
21969           arc.context = function(_) {
21970             return arguments.length ? ((context = _ == null ? null : _), arc) : context;
21971           };
21972
21973           return arc;
21974         }
21975
21976         function Linear(context) {
21977           this._context = context;
21978         }
21979
21980         Linear.prototype = {
21981           areaStart: function() {
21982             this._line = 0;
21983           },
21984           areaEnd: function() {
21985             this._line = NaN;
21986           },
21987           lineStart: function() {
21988             this._point = 0;
21989           },
21990           lineEnd: function() {
21991             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
21992             this._line = 1 - this._line;
21993           },
21994           point: function(x, y) {
21995             x = +x, y = +y;
21996             switch (this._point) {
21997               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
21998               case 1: this._point = 2; // proceed
21999               default: this._context.lineTo(x, y); break;
22000             }
22001           }
22002         };
22003
22004         function curveLinear(context) {
22005           return new Linear(context);
22006         }
22007
22008         function x$3(p) {
22009           return p[0];
22010         }
22011
22012         function y$3(p) {
22013           return p[1];
22014         }
22015
22016         function line() {
22017           var x = x$3,
22018               y = y$3,
22019               defined = constant$b(true),
22020               context = null,
22021               curve = curveLinear,
22022               output = null;
22023
22024           function line(data) {
22025             var i,
22026                 n = data.length,
22027                 d,
22028                 defined0 = false,
22029                 buffer;
22030
22031             if (context == null) { output = curve(buffer = path()); }
22032
22033             for (i = 0; i <= n; ++i) {
22034               if (!(i < n && defined(d = data[i], i, data)) === defined0) {
22035                 if (defined0 = !defined0) { output.lineStart(); }
22036                 else { output.lineEnd(); }
22037               }
22038               if (defined0) { output.point(+x(d, i, data), +y(d, i, data)); }
22039             }
22040
22041             if (buffer) { return output = null, buffer + "" || null; }
22042           }
22043
22044           line.x = function(_) {
22045             return arguments.length ? (x = typeof _ === "function" ? _ : constant$b(+_), line) : x;
22046           };
22047
22048           line.y = function(_) {
22049             return arguments.length ? (y = typeof _ === "function" ? _ : constant$b(+_), line) : y;
22050           };
22051
22052           line.defined = function(_) {
22053             return arguments.length ? (defined = typeof _ === "function" ? _ : constant$b(!!_), line) : defined;
22054           };
22055
22056           line.curve = function(_) {
22057             return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;
22058           };
22059
22060           line.context = function(_) {
22061             return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
22062           };
22063
22064           return line;
22065         }
22066
22067         function area$1() {
22068           var x0 = x$3,
22069               x1 = null,
22070               y0 = constant$b(0),
22071               y1 = y$3,
22072               defined = constant$b(true),
22073               context = null,
22074               curve = curveLinear,
22075               output = null;
22076
22077           function area(data) {
22078             var i,
22079                 j,
22080                 k,
22081                 n = data.length,
22082                 d,
22083                 defined0 = false,
22084                 buffer,
22085                 x0z = new Array(n),
22086                 y0z = new Array(n);
22087
22088             if (context == null) { output = curve(buffer = path()); }
22089
22090             for (i = 0; i <= n; ++i) {
22091               if (!(i < n && defined(d = data[i], i, data)) === defined0) {
22092                 if (defined0 = !defined0) {
22093                   j = i;
22094                   output.areaStart();
22095                   output.lineStart();
22096                 } else {
22097                   output.lineEnd();
22098                   output.lineStart();
22099                   for (k = i - 1; k >= j; --k) {
22100                     output.point(x0z[k], y0z[k]);
22101                   }
22102                   output.lineEnd();
22103                   output.areaEnd();
22104                 }
22105               }
22106               if (defined0) {
22107                 x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);
22108                 output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);
22109               }
22110             }
22111
22112             if (buffer) { return output = null, buffer + "" || null; }
22113           }
22114
22115           function arealine() {
22116             return line().defined(defined).curve(curve).context(context);
22117           }
22118
22119           area.x = function(_) {
22120             return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$b(+_), x1 = null, area) : x0;
22121           };
22122
22123           area.x0 = function(_) {
22124             return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$b(+_), area) : x0;
22125           };
22126
22127           area.x1 = function(_) {
22128             return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), area) : x1;
22129           };
22130
22131           area.y = function(_) {
22132             return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$b(+_), y1 = null, area) : y0;
22133           };
22134
22135           area.y0 = function(_) {
22136             return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$b(+_), area) : y0;
22137           };
22138
22139           area.y1 = function(_) {
22140             return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), area) : y1;
22141           };
22142
22143           area.lineX0 =
22144           area.lineY0 = function() {
22145             return arealine().x(x0).y(y0);
22146           };
22147
22148           area.lineY1 = function() {
22149             return arealine().x(x0).y(y1);
22150           };
22151
22152           area.lineX1 = function() {
22153             return arealine().x(x1).y(y0);
22154           };
22155
22156           area.defined = function(_) {
22157             return arguments.length ? (defined = typeof _ === "function" ? _ : constant$b(!!_), area) : defined;
22158           };
22159
22160           area.curve = function(_) {
22161             return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;
22162           };
22163
22164           area.context = function(_) {
22165             return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;
22166           };
22167
22168           return area;
22169         }
22170
22171         function descending(a, b) {
22172           return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
22173         }
22174
22175         function identity$7(d) {
22176           return d;
22177         }
22178
22179         function pie() {
22180           var value = identity$7,
22181               sortValues = descending,
22182               sort = null,
22183               startAngle = constant$b(0),
22184               endAngle = constant$b(tau$4),
22185               padAngle = constant$b(0);
22186
22187           function pie(data) {
22188             var i,
22189                 n = data.length,
22190                 j,
22191                 k,
22192                 sum = 0,
22193                 index = new Array(n),
22194                 arcs = new Array(n),
22195                 a0 = +startAngle.apply(this, arguments),
22196                 da = Math.min(tau$4, Math.max(-tau$4, endAngle.apply(this, arguments) - a0)),
22197                 a1,
22198                 p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
22199                 pa = p * (da < 0 ? -1 : 1),
22200                 v;
22201
22202             for (i = 0; i < n; ++i) {
22203               if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
22204                 sum += v;
22205               }
22206             }
22207
22208             // Optionally sort the arcs by previously-computed values or by data.
22209             if (sortValues != null) { index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); }); }
22210             else if (sort != null) { index.sort(function(i, j) { return sort(data[i], data[j]); }); }
22211
22212             // Compute the arcs! They are stored in the original data's order.
22213             for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
22214               j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
22215                 data: data[j],
22216                 index: i,
22217                 value: v,
22218                 startAngle: a0,
22219                 endAngle: a1,
22220                 padAngle: p
22221               };
22222             }
22223
22224             return arcs;
22225           }
22226
22227           pie.value = function(_) {
22228             return arguments.length ? (value = typeof _ === "function" ? _ : constant$b(+_), pie) : value;
22229           };
22230
22231           pie.sortValues = function(_) {
22232             return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
22233           };
22234
22235           pie.sort = function(_) {
22236             return arguments.length ? (sort = _, sortValues = null, pie) : sort;
22237           };
22238
22239           pie.startAngle = function(_) {
22240             return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : startAngle;
22241           };
22242
22243           pie.endAngle = function(_) {
22244             return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : endAngle;
22245           };
22246
22247           pie.padAngle = function(_) {
22248             return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : padAngle;
22249           };
22250
22251           return pie;
22252         }
22253
22254         var curveRadialLinear = curveRadial(curveLinear);
22255
22256         function Radial(curve) {
22257           this._curve = curve;
22258         }
22259
22260         Radial.prototype = {
22261           areaStart: function() {
22262             this._curve.areaStart();
22263           },
22264           areaEnd: function() {
22265             this._curve.areaEnd();
22266           },
22267           lineStart: function() {
22268             this._curve.lineStart();
22269           },
22270           lineEnd: function() {
22271             this._curve.lineEnd();
22272           },
22273           point: function(a, r) {
22274             this._curve.point(r * Math.sin(a), r * -Math.cos(a));
22275           }
22276         };
22277
22278         function curveRadial(curve) {
22279
22280           function radial(context) {
22281             return new Radial(curve(context));
22282           }
22283
22284           radial._curve = curve;
22285
22286           return radial;
22287         }
22288
22289         function lineRadial(l) {
22290           var c = l.curve;
22291
22292           l.angle = l.x, delete l.x;
22293           l.radius = l.y, delete l.y;
22294
22295           l.curve = function(_) {
22296             return arguments.length ? c(curveRadial(_)) : c()._curve;
22297           };
22298
22299           return l;
22300         }
22301
22302         function lineRadial$1() {
22303           return lineRadial(line().curve(curveRadialLinear));
22304         }
22305
22306         function areaRadial() {
22307           var a = area$1().curve(curveRadialLinear),
22308               c = a.curve,
22309               x0 = a.lineX0,
22310               x1 = a.lineX1,
22311               y0 = a.lineY0,
22312               y1 = a.lineY1;
22313
22314           a.angle = a.x, delete a.x;
22315           a.startAngle = a.x0, delete a.x0;
22316           a.endAngle = a.x1, delete a.x1;
22317           a.radius = a.y, delete a.y;
22318           a.innerRadius = a.y0, delete a.y0;
22319           a.outerRadius = a.y1, delete a.y1;
22320           a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;
22321           a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;
22322           a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;
22323           a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;
22324
22325           a.curve = function(_) {
22326             return arguments.length ? c(curveRadial(_)) : c()._curve;
22327           };
22328
22329           return a;
22330         }
22331
22332         function pointRadial(x, y) {
22333           return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];
22334         }
22335
22336         var slice$a = Array.prototype.slice;
22337
22338         function linkSource(d) {
22339           return d.source;
22340         }
22341
22342         function linkTarget(d) {
22343           return d.target;
22344         }
22345
22346         function link$2(curve) {
22347           var source = linkSource,
22348               target = linkTarget,
22349               x = x$3,
22350               y = y$3,
22351               context = null;
22352
22353           function link() {
22354             var buffer, argv = slice$a.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);
22355             if (!context) { context = buffer = path(); }
22356             curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));
22357             if (buffer) { return context = null, buffer + "" || null; }
22358           }
22359
22360           link.source = function(_) {
22361             return arguments.length ? (source = _, link) : source;
22362           };
22363
22364           link.target = function(_) {
22365             return arguments.length ? (target = _, link) : target;
22366           };
22367
22368           link.x = function(_) {
22369             return arguments.length ? (x = typeof _ === "function" ? _ : constant$b(+_), link) : x;
22370           };
22371
22372           link.y = function(_) {
22373             return arguments.length ? (y = typeof _ === "function" ? _ : constant$b(+_), link) : y;
22374           };
22375
22376           link.context = function(_) {
22377             return arguments.length ? ((context = _ == null ? null : _), link) : context;
22378           };
22379
22380           return link;
22381         }
22382
22383         function curveHorizontal(context, x0, y0, x1, y1) {
22384           context.moveTo(x0, y0);
22385           context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);
22386         }
22387
22388         function curveVertical(context, x0, y0, x1, y1) {
22389           context.moveTo(x0, y0);
22390           context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);
22391         }
22392
22393         function curveRadial$1(context, x0, y0, x1, y1) {
22394           var p0 = pointRadial(x0, y0),
22395               p1 = pointRadial(x0, y0 = (y0 + y1) / 2),
22396               p2 = pointRadial(x1, y0),
22397               p3 = pointRadial(x1, y1);
22398           context.moveTo(p0[0], p0[1]);
22399           context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);
22400         }
22401
22402         function linkHorizontal() {
22403           return link$2(curveHorizontal);
22404         }
22405
22406         function linkVertical() {
22407           return link$2(curveVertical);
22408         }
22409
22410         function linkRadial() {
22411           var l = link$2(curveRadial$1);
22412           l.angle = l.x, delete l.x;
22413           l.radius = l.y, delete l.y;
22414           return l;
22415         }
22416
22417         var circle$2 = {
22418           draw: function(context, size) {
22419             var r = Math.sqrt(size / pi$4);
22420             context.moveTo(r, 0);
22421             context.arc(0, 0, r, 0, tau$4);
22422           }
22423         };
22424
22425         var cross$2 = {
22426           draw: function(context, size) {
22427             var r = Math.sqrt(size / 5) / 2;
22428             context.moveTo(-3 * r, -r);
22429             context.lineTo(-r, -r);
22430             context.lineTo(-r, -3 * r);
22431             context.lineTo(r, -3 * r);
22432             context.lineTo(r, -r);
22433             context.lineTo(3 * r, -r);
22434             context.lineTo(3 * r, r);
22435             context.lineTo(r, r);
22436             context.lineTo(r, 3 * r);
22437             context.lineTo(-r, 3 * r);
22438             context.lineTo(-r, r);
22439             context.lineTo(-3 * r, r);
22440             context.closePath();
22441           }
22442         };
22443
22444         var tan30 = Math.sqrt(1 / 3),
22445             tan30_2 = tan30 * 2;
22446
22447         var diamond = {
22448           draw: function(context, size) {
22449             var y = Math.sqrt(size / tan30_2),
22450                 x = y * tan30;
22451             context.moveTo(0, -y);
22452             context.lineTo(x, 0);
22453             context.lineTo(0, y);
22454             context.lineTo(-x, 0);
22455             context.closePath();
22456           }
22457         };
22458
22459         var ka = 0.89081309152928522810,
22460             kr = Math.sin(pi$4 / 10) / Math.sin(7 * pi$4 / 10),
22461             kx = Math.sin(tau$4 / 10) * kr,
22462             ky = -Math.cos(tau$4 / 10) * kr;
22463
22464         var star = {
22465           draw: function(context, size) {
22466             var r = Math.sqrt(size * ka),
22467                 x = kx * r,
22468                 y = ky * r;
22469             context.moveTo(0, -r);
22470             context.lineTo(x, y);
22471             for (var i = 1; i < 5; ++i) {
22472               var a = tau$4 * i / 5,
22473                   c = Math.cos(a),
22474                   s = Math.sin(a);
22475               context.lineTo(s * r, -c * r);
22476               context.lineTo(c * x - s * y, s * x + c * y);
22477             }
22478             context.closePath();
22479           }
22480         };
22481
22482         var square = {
22483           draw: function(context, size) {
22484             var w = Math.sqrt(size),
22485                 x = -w / 2;
22486             context.rect(x, x, w, w);
22487           }
22488         };
22489
22490         var sqrt3 = Math.sqrt(3);
22491
22492         var triangle = {
22493           draw: function(context, size) {
22494             var y = -Math.sqrt(size / (sqrt3 * 3));
22495             context.moveTo(0, y * 2);
22496             context.lineTo(-sqrt3 * y, -y);
22497             context.lineTo(sqrt3 * y, -y);
22498             context.closePath();
22499           }
22500         };
22501
22502         var c$2 = -0.5,
22503             s = Math.sqrt(3) / 2,
22504             k = 1 / Math.sqrt(12),
22505             a = (k / 2 + 1) * 3;
22506
22507         var wye = {
22508           draw: function(context, size) {
22509             var r = Math.sqrt(size / a),
22510                 x0 = r / 2,
22511                 y0 = r * k,
22512                 x1 = x0,
22513                 y1 = r * k + r,
22514                 x2 = -x1,
22515                 y2 = y1;
22516             context.moveTo(x0, y0);
22517             context.lineTo(x1, y1);
22518             context.lineTo(x2, y2);
22519             context.lineTo(c$2 * x0 - s * y0, s * x0 + c$2 * y0);
22520             context.lineTo(c$2 * x1 - s * y1, s * x1 + c$2 * y1);
22521             context.lineTo(c$2 * x2 - s * y2, s * x2 + c$2 * y2);
22522             context.lineTo(c$2 * x0 + s * y0, c$2 * y0 - s * x0);
22523             context.lineTo(c$2 * x1 + s * y1, c$2 * y1 - s * x1);
22524             context.lineTo(c$2 * x2 + s * y2, c$2 * y2 - s * x2);
22525             context.closePath();
22526           }
22527         };
22528
22529         var symbols = [
22530           circle$2,
22531           cross$2,
22532           diamond,
22533           square,
22534           star,
22535           triangle,
22536           wye
22537         ];
22538
22539         function symbol() {
22540           var type = constant$b(circle$2),
22541               size = constant$b(64),
22542               context = null;
22543
22544           function symbol() {
22545             var buffer;
22546             if (!context) { context = buffer = path(); }
22547             type.apply(this, arguments).draw(context, +size.apply(this, arguments));
22548             if (buffer) { return context = null, buffer + "" || null; }
22549           }
22550
22551           symbol.type = function(_) {
22552             return arguments.length ? (type = typeof _ === "function" ? _ : constant$b(_), symbol) : type;
22553           };
22554
22555           symbol.size = function(_) {
22556             return arguments.length ? (size = typeof _ === "function" ? _ : constant$b(+_), symbol) : size;
22557           };
22558
22559           symbol.context = function(_) {
22560             return arguments.length ? (context = _ == null ? null : _, symbol) : context;
22561           };
22562
22563           return symbol;
22564         }
22565
22566         function noop$5() {}
22567
22568         function point$2(that, x, y) {
22569           that._context.bezierCurveTo(
22570             (2 * that._x0 + that._x1) / 3,
22571             (2 * that._y0 + that._y1) / 3,
22572             (that._x0 + 2 * that._x1) / 3,
22573             (that._y0 + 2 * that._y1) / 3,
22574             (that._x0 + 4 * that._x1 + x) / 6,
22575             (that._y0 + 4 * that._y1 + y) / 6
22576           );
22577         }
22578
22579         function Basis(context) {
22580           this._context = context;
22581         }
22582
22583         Basis.prototype = {
22584           areaStart: function() {
22585             this._line = 0;
22586           },
22587           areaEnd: function() {
22588             this._line = NaN;
22589           },
22590           lineStart: function() {
22591             this._x0 = this._x1 =
22592             this._y0 = this._y1 = NaN;
22593             this._point = 0;
22594           },
22595           lineEnd: function() {
22596             switch (this._point) {
22597               case 3: point$2(this, this._x1, this._y1); // proceed
22598               case 2: this._context.lineTo(this._x1, this._y1); break;
22599             }
22600             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
22601             this._line = 1 - this._line;
22602           },
22603           point: function(x, y) {
22604             x = +x, y = +y;
22605             switch (this._point) {
22606               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
22607               case 1: this._point = 2; break;
22608               case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed
22609               default: point$2(this, x, y); break;
22610             }
22611             this._x0 = this._x1, this._x1 = x;
22612             this._y0 = this._y1, this._y1 = y;
22613           }
22614         };
22615
22616         function basis$2(context) {
22617           return new Basis(context);
22618         }
22619
22620         function BasisClosed(context) {
22621           this._context = context;
22622         }
22623
22624         BasisClosed.prototype = {
22625           areaStart: noop$5,
22626           areaEnd: noop$5,
22627           lineStart: function() {
22628             this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =
22629             this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
22630             this._point = 0;
22631           },
22632           lineEnd: function() {
22633             switch (this._point) {
22634               case 1: {
22635                 this._context.moveTo(this._x2, this._y2);
22636                 this._context.closePath();
22637                 break;
22638               }
22639               case 2: {
22640                 this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
22641                 this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
22642                 this._context.closePath();
22643                 break;
22644               }
22645               case 3: {
22646                 this.point(this._x2, this._y2);
22647                 this.point(this._x3, this._y3);
22648                 this.point(this._x4, this._y4);
22649                 break;
22650               }
22651             }
22652           },
22653           point: function(x, y) {
22654             x = +x, y = +y;
22655             switch (this._point) {
22656               case 0: this._point = 1; this._x2 = x, this._y2 = y; break;
22657               case 1: this._point = 2; this._x3 = x, this._y3 = y; break;
22658               case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;
22659               default: point$2(this, x, y); break;
22660             }
22661             this._x0 = this._x1, this._x1 = x;
22662             this._y0 = this._y1, this._y1 = y;
22663           }
22664         };
22665
22666         function basisClosed$1(context) {
22667           return new BasisClosed(context);
22668         }
22669
22670         function BasisOpen(context) {
22671           this._context = context;
22672         }
22673
22674         BasisOpen.prototype = {
22675           areaStart: function() {
22676             this._line = 0;
22677           },
22678           areaEnd: function() {
22679             this._line = NaN;
22680           },
22681           lineStart: function() {
22682             this._x0 = this._x1 =
22683             this._y0 = this._y1 = NaN;
22684             this._point = 0;
22685           },
22686           lineEnd: function() {
22687             if (this._line || (this._line !== 0 && this._point === 3)) { this._context.closePath(); }
22688             this._line = 1 - this._line;
22689           },
22690           point: function(x, y) {
22691             x = +x, y = +y;
22692             switch (this._point) {
22693               case 0: this._point = 1; break;
22694               case 1: this._point = 2; break;
22695               case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;
22696               case 3: this._point = 4; // proceed
22697               default: point$2(this, x, y); break;
22698             }
22699             this._x0 = this._x1, this._x1 = x;
22700             this._y0 = this._y1, this._y1 = y;
22701           }
22702         };
22703
22704         function basisOpen(context) {
22705           return new BasisOpen(context);
22706         }
22707
22708         function Bundle(context, beta) {
22709           this._basis = new Basis(context);
22710           this._beta = beta;
22711         }
22712
22713         Bundle.prototype = {
22714           lineStart: function() {
22715             this._x = [];
22716             this._y = [];
22717             this._basis.lineStart();
22718           },
22719           lineEnd: function() {
22720             var x = this._x,
22721                 y = this._y,
22722                 j = x.length - 1;
22723
22724             if (j > 0) {
22725               var x0 = x[0],
22726                   y0 = y[0],
22727                   dx = x[j] - x0,
22728                   dy = y[j] - y0,
22729                   i = -1,
22730                   t;
22731
22732               while (++i <= j) {
22733                 t = i / j;
22734                 this._basis.point(
22735                   this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
22736                   this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
22737                 );
22738               }
22739             }
22740
22741             this._x = this._y = null;
22742             this._basis.lineEnd();
22743           },
22744           point: function(x, y) {
22745             this._x.push(+x);
22746             this._y.push(+y);
22747           }
22748         };
22749
22750         var bundle = (function custom(beta) {
22751
22752           function bundle(context) {
22753             return beta === 1 ? new Basis(context) : new Bundle(context, beta);
22754           }
22755
22756           bundle.beta = function(beta) {
22757             return custom(+beta);
22758           };
22759
22760           return bundle;
22761         })(0.85);
22762
22763         function point$3(that, x, y) {
22764           that._context.bezierCurveTo(
22765             that._x1 + that._k * (that._x2 - that._x0),
22766             that._y1 + that._k * (that._y2 - that._y0),
22767             that._x2 + that._k * (that._x1 - x),
22768             that._y2 + that._k * (that._y1 - y),
22769             that._x2,
22770             that._y2
22771           );
22772         }
22773
22774         function Cardinal(context, tension) {
22775           this._context = context;
22776           this._k = (1 - tension) / 6;
22777         }
22778
22779         Cardinal.prototype = {
22780           areaStart: function() {
22781             this._line = 0;
22782           },
22783           areaEnd: function() {
22784             this._line = NaN;
22785           },
22786           lineStart: function() {
22787             this._x0 = this._x1 = this._x2 =
22788             this._y0 = this._y1 = this._y2 = NaN;
22789             this._point = 0;
22790           },
22791           lineEnd: function() {
22792             switch (this._point) {
22793               case 2: this._context.lineTo(this._x2, this._y2); break;
22794               case 3: point$3(this, this._x1, this._y1); break;
22795             }
22796             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
22797             this._line = 1 - this._line;
22798           },
22799           point: function(x, y) {
22800             x = +x, y = +y;
22801             switch (this._point) {
22802               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
22803               case 1: this._point = 2; this._x1 = x, this._y1 = y; break;
22804               case 2: this._point = 3; // proceed
22805               default: point$3(this, x, y); break;
22806             }
22807             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
22808             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
22809           }
22810         };
22811
22812         var cardinal = (function custom(tension) {
22813
22814           function cardinal(context) {
22815             return new Cardinal(context, tension);
22816           }
22817
22818           cardinal.tension = function(tension) {
22819             return custom(+tension);
22820           };
22821
22822           return cardinal;
22823         })(0);
22824
22825         function CardinalClosed(context, tension) {
22826           this._context = context;
22827           this._k = (1 - tension) / 6;
22828         }
22829
22830         CardinalClosed.prototype = {
22831           areaStart: noop$5,
22832           areaEnd: noop$5,
22833           lineStart: function() {
22834             this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
22835             this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
22836             this._point = 0;
22837           },
22838           lineEnd: function() {
22839             switch (this._point) {
22840               case 1: {
22841                 this._context.moveTo(this._x3, this._y3);
22842                 this._context.closePath();
22843                 break;
22844               }
22845               case 2: {
22846                 this._context.lineTo(this._x3, this._y3);
22847                 this._context.closePath();
22848                 break;
22849               }
22850               case 3: {
22851                 this.point(this._x3, this._y3);
22852                 this.point(this._x4, this._y4);
22853                 this.point(this._x5, this._y5);
22854                 break;
22855               }
22856             }
22857           },
22858           point: function(x, y) {
22859             x = +x, y = +y;
22860             switch (this._point) {
22861               case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
22862               case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
22863               case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
22864               default: point$3(this, x, y); break;
22865             }
22866             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
22867             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
22868           }
22869         };
22870
22871         var cardinalClosed = (function custom(tension) {
22872
22873           function cardinal(context) {
22874             return new CardinalClosed(context, tension);
22875           }
22876
22877           cardinal.tension = function(tension) {
22878             return custom(+tension);
22879           };
22880
22881           return cardinal;
22882         })(0);
22883
22884         function CardinalOpen(context, tension) {
22885           this._context = context;
22886           this._k = (1 - tension) / 6;
22887         }
22888
22889         CardinalOpen.prototype = {
22890           areaStart: function() {
22891             this._line = 0;
22892           },
22893           areaEnd: function() {
22894             this._line = NaN;
22895           },
22896           lineStart: function() {
22897             this._x0 = this._x1 = this._x2 =
22898             this._y0 = this._y1 = this._y2 = NaN;
22899             this._point = 0;
22900           },
22901           lineEnd: function() {
22902             if (this._line || (this._line !== 0 && this._point === 3)) { this._context.closePath(); }
22903             this._line = 1 - this._line;
22904           },
22905           point: function(x, y) {
22906             x = +x, y = +y;
22907             switch (this._point) {
22908               case 0: this._point = 1; break;
22909               case 1: this._point = 2; break;
22910               case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
22911               case 3: this._point = 4; // proceed
22912               default: point$3(this, x, y); break;
22913             }
22914             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
22915             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
22916           }
22917         };
22918
22919         var cardinalOpen = (function custom(tension) {
22920
22921           function cardinal(context) {
22922             return new CardinalOpen(context, tension);
22923           }
22924
22925           cardinal.tension = function(tension) {
22926             return custom(+tension);
22927           };
22928
22929           return cardinal;
22930         })(0);
22931
22932         function point$4(that, x, y) {
22933           var x1 = that._x1,
22934               y1 = that._y1,
22935               x2 = that._x2,
22936               y2 = that._y2;
22937
22938           if (that._l01_a > epsilon$3) {
22939             var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
22940                 n = 3 * that._l01_a * (that._l01_a + that._l12_a);
22941             x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
22942             y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
22943           }
22944
22945           if (that._l23_a > epsilon$3) {
22946             var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
22947                 m = 3 * that._l23_a * (that._l23_a + that._l12_a);
22948             x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
22949             y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
22950           }
22951
22952           that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
22953         }
22954
22955         function CatmullRom(context, alpha) {
22956           this._context = context;
22957           this._alpha = alpha;
22958         }
22959
22960         CatmullRom.prototype = {
22961           areaStart: function() {
22962             this._line = 0;
22963           },
22964           areaEnd: function() {
22965             this._line = NaN;
22966           },
22967           lineStart: function() {
22968             this._x0 = this._x1 = this._x2 =
22969             this._y0 = this._y1 = this._y2 = NaN;
22970             this._l01_a = this._l12_a = this._l23_a =
22971             this._l01_2a = this._l12_2a = this._l23_2a =
22972             this._point = 0;
22973           },
22974           lineEnd: function() {
22975             switch (this._point) {
22976               case 2: this._context.lineTo(this._x2, this._y2); break;
22977               case 3: this.point(this._x2, this._y2); break;
22978             }
22979             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
22980             this._line = 1 - this._line;
22981           },
22982           point: function(x, y) {
22983             x = +x, y = +y;
22984
22985             if (this._point) {
22986               var x23 = this._x2 - x,
22987                   y23 = this._y2 - y;
22988               this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
22989             }
22990
22991             switch (this._point) {
22992               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
22993               case 1: this._point = 2; break;
22994               case 2: this._point = 3; // proceed
22995               default: point$4(this, x, y); break;
22996             }
22997
22998             this._l01_a = this._l12_a, this._l12_a = this._l23_a;
22999             this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
23000             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
23001             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
23002           }
23003         };
23004
23005         var catmullRom = (function custom(alpha) {
23006
23007           function catmullRom(context) {
23008             return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
23009           }
23010
23011           catmullRom.alpha = function(alpha) {
23012             return custom(+alpha);
23013           };
23014
23015           return catmullRom;
23016         })(0.5);
23017
23018         function CatmullRomClosed(context, alpha) {
23019           this._context = context;
23020           this._alpha = alpha;
23021         }
23022
23023         CatmullRomClosed.prototype = {
23024           areaStart: noop$5,
23025           areaEnd: noop$5,
23026           lineStart: function() {
23027             this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
23028             this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
23029             this._l01_a = this._l12_a = this._l23_a =
23030             this._l01_2a = this._l12_2a = this._l23_2a =
23031             this._point = 0;
23032           },
23033           lineEnd: function() {
23034             switch (this._point) {
23035               case 1: {
23036                 this._context.moveTo(this._x3, this._y3);
23037                 this._context.closePath();
23038                 break;
23039               }
23040               case 2: {
23041                 this._context.lineTo(this._x3, this._y3);
23042                 this._context.closePath();
23043                 break;
23044               }
23045               case 3: {
23046                 this.point(this._x3, this._y3);
23047                 this.point(this._x4, this._y4);
23048                 this.point(this._x5, this._y5);
23049                 break;
23050               }
23051             }
23052           },
23053           point: function(x, y) {
23054             x = +x, y = +y;
23055
23056             if (this._point) {
23057               var x23 = this._x2 - x,
23058                   y23 = this._y2 - y;
23059               this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
23060             }
23061
23062             switch (this._point) {
23063               case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
23064               case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
23065               case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
23066               default: point$4(this, x, y); break;
23067             }
23068
23069             this._l01_a = this._l12_a, this._l12_a = this._l23_a;
23070             this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
23071             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
23072             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
23073           }
23074         };
23075
23076         var catmullRomClosed = (function custom(alpha) {
23077
23078           function catmullRom(context) {
23079             return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
23080           }
23081
23082           catmullRom.alpha = function(alpha) {
23083             return custom(+alpha);
23084           };
23085
23086           return catmullRom;
23087         })(0.5);
23088
23089         function CatmullRomOpen(context, alpha) {
23090           this._context = context;
23091           this._alpha = alpha;
23092         }
23093
23094         CatmullRomOpen.prototype = {
23095           areaStart: function() {
23096             this._line = 0;
23097           },
23098           areaEnd: function() {
23099             this._line = NaN;
23100           },
23101           lineStart: function() {
23102             this._x0 = this._x1 = this._x2 =
23103             this._y0 = this._y1 = this._y2 = NaN;
23104             this._l01_a = this._l12_a = this._l23_a =
23105             this._l01_2a = this._l12_2a = this._l23_2a =
23106             this._point = 0;
23107           },
23108           lineEnd: function() {
23109             if (this._line || (this._line !== 0 && this._point === 3)) { this._context.closePath(); }
23110             this._line = 1 - this._line;
23111           },
23112           point: function(x, y) {
23113             x = +x, y = +y;
23114
23115             if (this._point) {
23116               var x23 = this._x2 - x,
23117                   y23 = this._y2 - y;
23118               this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
23119             }
23120
23121             switch (this._point) {
23122               case 0: this._point = 1; break;
23123               case 1: this._point = 2; break;
23124               case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
23125               case 3: this._point = 4; // proceed
23126               default: point$4(this, x, y); break;
23127             }
23128
23129             this._l01_a = this._l12_a, this._l12_a = this._l23_a;
23130             this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
23131             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
23132             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
23133           }
23134         };
23135
23136         var catmullRomOpen = (function custom(alpha) {
23137
23138           function catmullRom(context) {
23139             return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
23140           }
23141
23142           catmullRom.alpha = function(alpha) {
23143             return custom(+alpha);
23144           };
23145
23146           return catmullRom;
23147         })(0.5);
23148
23149         function LinearClosed(context) {
23150           this._context = context;
23151         }
23152
23153         LinearClosed.prototype = {
23154           areaStart: noop$5,
23155           areaEnd: noop$5,
23156           lineStart: function() {
23157             this._point = 0;
23158           },
23159           lineEnd: function() {
23160             if (this._point) { this._context.closePath(); }
23161           },
23162           point: function(x, y) {
23163             x = +x, y = +y;
23164             if (this._point) { this._context.lineTo(x, y); }
23165             else { this._point = 1, this._context.moveTo(x, y); }
23166           }
23167         };
23168
23169         function linearClosed(context) {
23170           return new LinearClosed(context);
23171         }
23172
23173         function sign$3(x) {
23174           return x < 0 ? -1 : 1;
23175         }
23176
23177         // Calculate the slopes of the tangents (Hermite-type interpolation) based on
23178         // the following paper: Steffen, M. 1990. A Simple Method for Monotonic
23179         // Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
23180         // NOV(II), P. 443, 1990.
23181         function slope3(that, x2, y2) {
23182           var h0 = that._x1 - that._x0,
23183               h1 = x2 - that._x1,
23184               s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
23185               s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
23186               p = (s0 * h1 + s1 * h0) / (h0 + h1);
23187           return (sign$3(s0) + sign$3(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
23188         }
23189
23190         // Calculate a one-sided slope.
23191         function slope2(that, t) {
23192           var h = that._x1 - that._x0;
23193           return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
23194         }
23195
23196         // According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
23197         // "you can express cubic Hermite interpolation in terms of cubic Bézier curves
23198         // with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
23199         function point$5(that, t0, t1) {
23200           var x0 = that._x0,
23201               y0 = that._y0,
23202               x1 = that._x1,
23203               y1 = that._y1,
23204               dx = (x1 - x0) / 3;
23205           that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
23206         }
23207
23208         function MonotoneX(context) {
23209           this._context = context;
23210         }
23211
23212         MonotoneX.prototype = {
23213           areaStart: function() {
23214             this._line = 0;
23215           },
23216           areaEnd: function() {
23217             this._line = NaN;
23218           },
23219           lineStart: function() {
23220             this._x0 = this._x1 =
23221             this._y0 = this._y1 =
23222             this._t0 = NaN;
23223             this._point = 0;
23224           },
23225           lineEnd: function() {
23226             switch (this._point) {
23227               case 2: this._context.lineTo(this._x1, this._y1); break;
23228               case 3: point$5(this, this._t0, slope2(this, this._t0)); break;
23229             }
23230             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
23231             this._line = 1 - this._line;
23232           },
23233           point: function(x, y) {
23234             var t1 = NaN;
23235
23236             x = +x, y = +y;
23237             if (x === this._x1 && y === this._y1) { return; } // Ignore coincident points.
23238             switch (this._point) {
23239               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
23240               case 1: this._point = 2; break;
23241               case 2: this._point = 3; point$5(this, slope2(this, t1 = slope3(this, x, y)), t1); break;
23242               default: point$5(this, this._t0, t1 = slope3(this, x, y)); break;
23243             }
23244
23245             this._x0 = this._x1, this._x1 = x;
23246             this._y0 = this._y1, this._y1 = y;
23247             this._t0 = t1;
23248           }
23249         };
23250
23251         function MonotoneY(context) {
23252           this._context = new ReflectContext(context);
23253         }
23254
23255         (MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {
23256           MonotoneX.prototype.point.call(this, y, x);
23257         };
23258
23259         function ReflectContext(context) {
23260           this._context = context;
23261         }
23262
23263         ReflectContext.prototype = {
23264           moveTo: function(x, y) { this._context.moveTo(y, x); },
23265           closePath: function() { this._context.closePath(); },
23266           lineTo: function(x, y) { this._context.lineTo(y, x); },
23267           bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }
23268         };
23269
23270         function monotoneX(context) {
23271           return new MonotoneX(context);
23272         }
23273
23274         function monotoneY(context) {
23275           return new MonotoneY(context);
23276         }
23277
23278         function Natural(context) {
23279           this._context = context;
23280         }
23281
23282         Natural.prototype = {
23283           areaStart: function() {
23284             this._line = 0;
23285           },
23286           areaEnd: function() {
23287             this._line = NaN;
23288           },
23289           lineStart: function() {
23290             this._x = [];
23291             this._y = [];
23292           },
23293           lineEnd: function() {
23294             var x = this._x,
23295                 y = this._y,
23296                 n = x.length;
23297
23298             if (n) {
23299               this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
23300               if (n === 2) {
23301                 this._context.lineTo(x[1], y[1]);
23302               } else {
23303                 var px = controlPoints(x),
23304                     py = controlPoints(y);
23305                 for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
23306                   this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
23307                 }
23308               }
23309             }
23310
23311             if (this._line || (this._line !== 0 && n === 1)) { this._context.closePath(); }
23312             this._line = 1 - this._line;
23313             this._x = this._y = null;
23314           },
23315           point: function(x, y) {
23316             this._x.push(+x);
23317             this._y.push(+y);
23318           }
23319         };
23320
23321         // See https://www.particleincell.com/2012/bezier-splines/ for derivation.
23322         function controlPoints(x) {
23323           var i,
23324               n = x.length - 1,
23325               m,
23326               a = new Array(n),
23327               b = new Array(n),
23328               r = new Array(n);
23329           a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
23330           for (i = 1; i < n - 1; ++i) { a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1]; }
23331           a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
23332           for (i = 1; i < n; ++i) { m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1]; }
23333           a[n - 1] = r[n - 1] / b[n - 1];
23334           for (i = n - 2; i >= 0; --i) { a[i] = (r[i] - a[i + 1]) / b[i]; }
23335           b[n - 1] = (x[n] + a[n - 1]) / 2;
23336           for (i = 0; i < n - 1; ++i) { b[i] = 2 * x[i + 1] - a[i + 1]; }
23337           return [a, b];
23338         }
23339
23340         function natural(context) {
23341           return new Natural(context);
23342         }
23343
23344         function Step(context, t) {
23345           this._context = context;
23346           this._t = t;
23347         }
23348
23349         Step.prototype = {
23350           areaStart: function() {
23351             this._line = 0;
23352           },
23353           areaEnd: function() {
23354             this._line = NaN;
23355           },
23356           lineStart: function() {
23357             this._x = this._y = NaN;
23358             this._point = 0;
23359           },
23360           lineEnd: function() {
23361             if (0 < this._t && this._t < 1 && this._point === 2) { this._context.lineTo(this._x, this._y); }
23362             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
23363             if (this._line >= 0) { this._t = 1 - this._t, this._line = 1 - this._line; }
23364           },
23365           point: function(x, y) {
23366             x = +x, y = +y;
23367             switch (this._point) {
23368               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
23369               case 1: this._point = 2; // proceed
23370               default: {
23371                 if (this._t <= 0) {
23372                   this._context.lineTo(this._x, y);
23373                   this._context.lineTo(x, y);
23374                 } else {
23375                   var x1 = this._x * (1 - this._t) + x * this._t;
23376                   this._context.lineTo(x1, this._y);
23377                   this._context.lineTo(x1, y);
23378                 }
23379                 break;
23380               }
23381             }
23382             this._x = x, this._y = y;
23383           }
23384         };
23385
23386         function step(context) {
23387           return new Step(context, 0.5);
23388         }
23389
23390         function stepBefore(context) {
23391           return new Step(context, 0);
23392         }
23393
23394         function stepAfter(context) {
23395           return new Step(context, 1);
23396         }
23397
23398         function none$1(series, order) {
23399           if (!((n = series.length) > 1)) { return; }
23400           for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
23401             s0 = s1, s1 = series[order[i]];
23402             for (j = 0; j < m; ++j) {
23403               s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
23404             }
23405           }
23406         }
23407
23408         function none$2(series) {
23409           var n = series.length, o = new Array(n);
23410           while (--n >= 0) { o[n] = n; }
23411           return o;
23412         }
23413
23414         function stackValue(d, key) {
23415           return d[key];
23416         }
23417
23418         function stack() {
23419           var keys = constant$b([]),
23420               order = none$2,
23421               offset = none$1,
23422               value = stackValue;
23423
23424           function stack(data) {
23425             var kz = keys.apply(this, arguments),
23426                 i,
23427                 m = data.length,
23428                 n = kz.length,
23429                 sz = new Array(n),
23430                 oz;
23431
23432             for (i = 0; i < n; ++i) {
23433               for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {
23434                 si[j] = sij = [0, +value(data[j], ki, j, data)];
23435                 sij.data = data[j];
23436               }
23437               si.key = ki;
23438             }
23439
23440             for (i = 0, oz = order(sz); i < n; ++i) {
23441               sz[oz[i]].index = i;
23442             }
23443
23444             offset(sz, oz);
23445             return sz;
23446           }
23447
23448           stack.keys = function(_) {
23449             return arguments.length ? (keys = typeof _ === "function" ? _ : constant$b(slice$a.call(_)), stack) : keys;
23450           };
23451
23452           stack.value = function(_) {
23453             return arguments.length ? (value = typeof _ === "function" ? _ : constant$b(+_), stack) : value;
23454           };
23455
23456           stack.order = function(_) {
23457             return arguments.length ? (order = _ == null ? none$2 : typeof _ === "function" ? _ : constant$b(slice$a.call(_)), stack) : order;
23458           };
23459
23460           stack.offset = function(_) {
23461             return arguments.length ? (offset = _ == null ? none$1 : _, stack) : offset;
23462           };
23463
23464           return stack;
23465         }
23466
23467         function expand(series, order) {
23468           if (!((n = series.length) > 0)) { return; }
23469           for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {
23470             for (y = i = 0; i < n; ++i) { y += series[i][j][1] || 0; }
23471             if (y) { for (i = 0; i < n; ++i) { series[i][j][1] /= y; } }
23472           }
23473           none$1(series, order);
23474         }
23475
23476         function diverging$1(series, order) {
23477           if (!((n = series.length) > 0)) { return; }
23478           for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {
23479             for (yp = yn = 0, i = 0; i < n; ++i) {
23480               if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {
23481                 d[0] = yp, d[1] = yp += dy;
23482               } else if (dy < 0) {
23483                 d[1] = yn, d[0] = yn += dy;
23484               } else {
23485                 d[0] = 0, d[1] = dy;
23486               }
23487             }
23488           }
23489         }
23490
23491         function silhouette(series, order) {
23492           if (!((n = series.length) > 0)) { return; }
23493           for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
23494             for (var i = 0, y = 0; i < n; ++i) { y += series[i][j][1] || 0; }
23495             s0[j][1] += s0[j][0] = -y / 2;
23496           }
23497           none$1(series, order);
23498         }
23499
23500         function wiggle(series, order) {
23501           if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) { return; }
23502           for (var y = 0, j = 1, s0, m, n; j < m; ++j) {
23503             for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {
23504               var si = series[order[i]],
23505                   sij0 = si[j][1] || 0,
23506                   sij1 = si[j - 1][1] || 0,
23507                   s3 = (sij0 - sij1) / 2;
23508               for (var k = 0; k < i; ++k) {
23509                 var sk = series[order[k]],
23510                     skj0 = sk[j][1] || 0,
23511                     skj1 = sk[j - 1][1] || 0;
23512                 s3 += skj0 - skj1;
23513               }
23514               s1 += sij0, s2 += s3 * sij0;
23515             }
23516             s0[j - 1][1] += s0[j - 1][0] = y;
23517             if (s1) { y -= s2 / s1; }
23518           }
23519           s0[j - 1][1] += s0[j - 1][0] = y;
23520           none$1(series, order);
23521         }
23522
23523         function appearance(series) {
23524           var peaks = series.map(peak);
23525           return none$2(series).sort(function(a, b) { return peaks[a] - peaks[b]; });
23526         }
23527
23528         function peak(series) {
23529           var i = -1, j = 0, n = series.length, vi, vj = -Infinity;
23530           while (++i < n) { if ((vi = +series[i][1]) > vj) { vj = vi, j = i; } }
23531           return j;
23532         }
23533
23534         function ascending$2(series) {
23535           var sums = series.map(sum$2);
23536           return none$2(series).sort(function(a, b) { return sums[a] - sums[b]; });
23537         }
23538
23539         function sum$2(series) {
23540           var s = 0, i = -1, n = series.length, v;
23541           while (++i < n) { if (v = +series[i][1]) { s += v; } }
23542           return s;
23543         }
23544
23545         function descending$1(series) {
23546           return ascending$2(series).reverse();
23547         }
23548
23549         function insideOut(series) {
23550           var n = series.length,
23551               i,
23552               j,
23553               sums = series.map(sum$2),
23554               order = appearance(series),
23555               top = 0,
23556               bottom = 0,
23557               tops = [],
23558               bottoms = [];
23559
23560           for (i = 0; i < n; ++i) {
23561             j = order[i];
23562             if (top < bottom) {
23563               top += sums[j];
23564               tops.push(j);
23565             } else {
23566               bottom += sums[j];
23567               bottoms.push(j);
23568             }
23569           }
23570
23571           return bottoms.reverse().concat(tops);
23572         }
23573
23574         function reverse(series) {
23575           return none$2(series).reverse();
23576         }
23577
23578         function constant$c(x) {
23579           return function() {
23580             return x;
23581           };
23582         }
23583
23584         function x$4(d) {
23585           return d[0];
23586         }
23587
23588         function y$4(d) {
23589           return d[1];
23590         }
23591
23592         function RedBlackTree() {
23593           this._ = null; // root node
23594         }
23595
23596         function RedBlackNode(node) {
23597           node.U = // parent node
23598           node.C = // color - true for red, false for black
23599           node.L = // left node
23600           node.R = // right node
23601           node.P = // previous node
23602           node.N = null; // next node
23603         }
23604
23605         RedBlackTree.prototype = {
23606           constructor: RedBlackTree,
23607
23608           insert: function(after, node) {
23609             var parent, grandpa, uncle;
23610
23611             if (after) {
23612               node.P = after;
23613               node.N = after.N;
23614               if (after.N) { after.N.P = node; }
23615               after.N = node;
23616               if (after.R) {
23617                 after = after.R;
23618                 while (after.L) { after = after.L; }
23619                 after.L = node;
23620               } else {
23621                 after.R = node;
23622               }
23623               parent = after;
23624             } else if (this._) {
23625               after = RedBlackFirst(this._);
23626               node.P = null;
23627               node.N = after;
23628               after.P = after.L = node;
23629               parent = after;
23630             } else {
23631               node.P = node.N = null;
23632               this._ = node;
23633               parent = null;
23634             }
23635             node.L = node.R = null;
23636             node.U = parent;
23637             node.C = true;
23638
23639             after = node;
23640             while (parent && parent.C) {
23641               grandpa = parent.U;
23642               if (parent === grandpa.L) {
23643                 uncle = grandpa.R;
23644                 if (uncle && uncle.C) {
23645                   parent.C = uncle.C = false;
23646                   grandpa.C = true;
23647                   after = grandpa;
23648                 } else {
23649                   if (after === parent.R) {
23650                     RedBlackRotateLeft(this, parent);
23651                     after = parent;
23652                     parent = after.U;
23653                   }
23654                   parent.C = false;
23655                   grandpa.C = true;
23656                   RedBlackRotateRight(this, grandpa);
23657                 }
23658               } else {
23659                 uncle = grandpa.L;
23660                 if (uncle && uncle.C) {
23661                   parent.C = uncle.C = false;
23662                   grandpa.C = true;
23663                   after = grandpa;
23664                 } else {
23665                   if (after === parent.L) {
23666                     RedBlackRotateRight(this, parent);
23667                     after = parent;
23668                     parent = after.U;
23669                   }
23670                   parent.C = false;
23671                   grandpa.C = true;
23672                   RedBlackRotateLeft(this, grandpa);
23673                 }
23674               }
23675               parent = after.U;
23676             }
23677             this._.C = false;
23678           },
23679
23680           remove: function(node) {
23681             if (node.N) { node.N.P = node.P; }
23682             if (node.P) { node.P.N = node.N; }
23683             node.N = node.P = null;
23684
23685             var parent = node.U,
23686                 sibling,
23687                 left = node.L,
23688                 right = node.R,
23689                 next,
23690                 red;
23691
23692             if (!left) { next = right; }
23693             else if (!right) { next = left; }
23694             else { next = RedBlackFirst(right); }
23695
23696             if (parent) {
23697               if (parent.L === node) { parent.L = next; }
23698               else { parent.R = next; }
23699             } else {
23700               this._ = next;
23701             }
23702
23703             if (left && right) {
23704               red = next.C;
23705               next.C = node.C;
23706               next.L = left;
23707               left.U = next;
23708               if (next !== right) {
23709                 parent = next.U;
23710                 next.U = node.U;
23711                 node = next.R;
23712                 parent.L = node;
23713                 next.R = right;
23714                 right.U = next;
23715               } else {
23716                 next.U = parent;
23717                 parent = next;
23718                 node = next.R;
23719               }
23720             } else {
23721               red = node.C;
23722               node = next;
23723             }
23724
23725             if (node) { node.U = parent; }
23726             if (red) { return; }
23727             if (node && node.C) { node.C = false; return; }
23728
23729             do {
23730               if (node === this._) { break; }
23731               if (node === parent.L) {
23732                 sibling = parent.R;
23733                 if (sibling.C) {
23734                   sibling.C = false;
23735                   parent.C = true;
23736                   RedBlackRotateLeft(this, parent);
23737                   sibling = parent.R;
23738                 }
23739                 if ((sibling.L && sibling.L.C)
23740                     || (sibling.R && sibling.R.C)) {
23741                   if (!sibling.R || !sibling.R.C) {
23742                     sibling.L.C = false;
23743                     sibling.C = true;
23744                     RedBlackRotateRight(this, sibling);
23745                     sibling = parent.R;
23746                   }
23747                   sibling.C = parent.C;
23748                   parent.C = sibling.R.C = false;
23749                   RedBlackRotateLeft(this, parent);
23750                   node = this._;
23751                   break;
23752                 }
23753               } else {
23754                 sibling = parent.L;
23755                 if (sibling.C) {
23756                   sibling.C = false;
23757                   parent.C = true;
23758                   RedBlackRotateRight(this, parent);
23759                   sibling = parent.L;
23760                 }
23761                 if ((sibling.L && sibling.L.C)
23762                   || (sibling.R && sibling.R.C)) {
23763                   if (!sibling.L || !sibling.L.C) {
23764                     sibling.R.C = false;
23765                     sibling.C = true;
23766                     RedBlackRotateLeft(this, sibling);
23767                     sibling = parent.L;
23768                   }
23769                   sibling.C = parent.C;
23770                   parent.C = sibling.L.C = false;
23771                   RedBlackRotateRight(this, parent);
23772                   node = this._;
23773                   break;
23774                 }
23775               }
23776               sibling.C = true;
23777               node = parent;
23778               parent = parent.U;
23779             } while (!node.C);
23780
23781             if (node) { node.C = false; }
23782           }
23783         };
23784
23785         function RedBlackRotateLeft(tree, node) {
23786           var p = node,
23787               q = node.R,
23788               parent = p.U;
23789
23790           if (parent) {
23791             if (parent.L === p) { parent.L = q; }
23792             else { parent.R = q; }
23793           } else {
23794             tree._ = q;
23795           }
23796
23797           q.U = parent;
23798           p.U = q;
23799           p.R = q.L;
23800           if (p.R) { p.R.U = p; }
23801           q.L = p;
23802         }
23803
23804         function RedBlackRotateRight(tree, node) {
23805           var p = node,
23806               q = node.L,
23807               parent = p.U;
23808
23809           if (parent) {
23810             if (parent.L === p) { parent.L = q; }
23811             else { parent.R = q; }
23812           } else {
23813             tree._ = q;
23814           }
23815
23816           q.U = parent;
23817           p.U = q;
23818           p.L = q.R;
23819           if (p.L) { p.L.U = p; }
23820           q.R = p;
23821         }
23822
23823         function RedBlackFirst(node) {
23824           while (node.L) { node = node.L; }
23825           return node;
23826         }
23827
23828         function createEdge(left, right, v0, v1) {
23829           var edge = [null, null],
23830               index = edges.push(edge) - 1;
23831           edge.left = left;
23832           edge.right = right;
23833           if (v0) { setEdgeEnd(edge, left, right, v0); }
23834           if (v1) { setEdgeEnd(edge, right, left, v1); }
23835           cells[left.index].halfedges.push(index);
23836           cells[right.index].halfedges.push(index);
23837           return edge;
23838         }
23839
23840         function createBorderEdge(left, v0, v1) {
23841           var edge = [v0, v1];
23842           edge.left = left;
23843           return edge;
23844         }
23845
23846         function setEdgeEnd(edge, left, right, vertex) {
23847           if (!edge[0] && !edge[1]) {
23848             edge[0] = vertex;
23849             edge.left = left;
23850             edge.right = right;
23851           } else if (edge.left === right) {
23852             edge[1] = vertex;
23853           } else {
23854             edge[0] = vertex;
23855           }
23856         }
23857
23858         // Liang–Barsky line clipping.
23859         function clipEdge(edge, x0, y0, x1, y1) {
23860           var a = edge[0],
23861               b = edge[1],
23862               ax = a[0],
23863               ay = a[1],
23864               bx = b[0],
23865               by = b[1],
23866               t0 = 0,
23867               t1 = 1,
23868               dx = bx - ax,
23869               dy = by - ay,
23870               r;
23871
23872           r = x0 - ax;
23873           if (!dx && r > 0) { return; }
23874           r /= dx;
23875           if (dx < 0) {
23876             if (r < t0) { return; }
23877             if (r < t1) { t1 = r; }
23878           } else if (dx > 0) {
23879             if (r > t1) { return; }
23880             if (r > t0) { t0 = r; }
23881           }
23882
23883           r = x1 - ax;
23884           if (!dx && r < 0) { return; }
23885           r /= dx;
23886           if (dx < 0) {
23887             if (r > t1) { return; }
23888             if (r > t0) { t0 = r; }
23889           } else if (dx > 0) {
23890             if (r < t0) { return; }
23891             if (r < t1) { t1 = r; }
23892           }
23893
23894           r = y0 - ay;
23895           if (!dy && r > 0) { return; }
23896           r /= dy;
23897           if (dy < 0) {
23898             if (r < t0) { return; }
23899             if (r < t1) { t1 = r; }
23900           } else if (dy > 0) {
23901             if (r > t1) { return; }
23902             if (r > t0) { t0 = r; }
23903           }
23904
23905           r = y1 - ay;
23906           if (!dy && r < 0) { return; }
23907           r /= dy;
23908           if (dy < 0) {
23909             if (r > t1) { return; }
23910             if (r > t0) { t0 = r; }
23911           } else if (dy > 0) {
23912             if (r < t0) { return; }
23913             if (r < t1) { t1 = r; }
23914           }
23915
23916           if (!(t0 > 0) && !(t1 < 1)) { return true; } // TODO Better check?
23917
23918           if (t0 > 0) { edge[0] = [ax + t0 * dx, ay + t0 * dy]; }
23919           if (t1 < 1) { edge[1] = [ax + t1 * dx, ay + t1 * dy]; }
23920           return true;
23921         }
23922
23923         function connectEdge(edge, x0, y0, x1, y1) {
23924           var v1 = edge[1];
23925           if (v1) { return true; }
23926
23927           var v0 = edge[0],
23928               left = edge.left,
23929               right = edge.right,
23930               lx = left[0],
23931               ly = left[1],
23932               rx = right[0],
23933               ry = right[1],
23934               fx = (lx + rx) / 2,
23935               fy = (ly + ry) / 2,
23936               fm,
23937               fb;
23938
23939           if (ry === ly) {
23940             if (fx < x0 || fx >= x1) { return; }
23941             if (lx > rx) {
23942               if (!v0) { v0 = [fx, y0]; }
23943               else if (v0[1] >= y1) { return; }
23944               v1 = [fx, y1];
23945             } else {
23946               if (!v0) { v0 = [fx, y1]; }
23947               else if (v0[1] < y0) { return; }
23948               v1 = [fx, y0];
23949             }
23950           } else {
23951             fm = (lx - rx) / (ry - ly);
23952             fb = fy - fm * fx;
23953             if (fm < -1 || fm > 1) {
23954               if (lx > rx) {
23955                 if (!v0) { v0 = [(y0 - fb) / fm, y0]; }
23956                 else if (v0[1] >= y1) { return; }
23957                 v1 = [(y1 - fb) / fm, y1];
23958               } else {
23959                 if (!v0) { v0 = [(y1 - fb) / fm, y1]; }
23960                 else if (v0[1] < y0) { return; }
23961                 v1 = [(y0 - fb) / fm, y0];
23962               }
23963             } else {
23964               if (ly < ry) {
23965                 if (!v0) { v0 = [x0, fm * x0 + fb]; }
23966                 else if (v0[0] >= x1) { return; }
23967                 v1 = [x1, fm * x1 + fb];
23968               } else {
23969                 if (!v0) { v0 = [x1, fm * x1 + fb]; }
23970                 else if (v0[0] < x0) { return; }
23971                 v1 = [x0, fm * x0 + fb];
23972               }
23973             }
23974           }
23975
23976           edge[0] = v0;
23977           edge[1] = v1;
23978           return true;
23979         }
23980
23981         function clipEdges(x0, y0, x1, y1) {
23982           var i = edges.length,
23983               edge;
23984
23985           while (i--) {
23986             if (!connectEdge(edge = edges[i], x0, y0, x1, y1)
23987                 || !clipEdge(edge, x0, y0, x1, y1)
23988                 || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$4
23989                     || Math.abs(edge[0][1] - edge[1][1]) > epsilon$4)) {
23990               delete edges[i];
23991             }
23992           }
23993         }
23994
23995         function createCell(site) {
23996           return cells[site.index] = {
23997             site: site,
23998             halfedges: []
23999           };
24000         }
24001
24002         function cellHalfedgeAngle(cell, edge) {
24003           var site = cell.site,
24004               va = edge.left,
24005               vb = edge.right;
24006           if (site === vb) { vb = va, va = site; }
24007           if (vb) { return Math.atan2(vb[1] - va[1], vb[0] - va[0]); }
24008           if (site === va) { va = edge[1], vb = edge[0]; }
24009           else { va = edge[0], vb = edge[1]; }
24010           return Math.atan2(va[0] - vb[0], vb[1] - va[1]);
24011         }
24012
24013         function cellHalfedgeStart(cell, edge) {
24014           return edge[+(edge.left !== cell.site)];
24015         }
24016
24017         function cellHalfedgeEnd(cell, edge) {
24018           return edge[+(edge.left === cell.site)];
24019         }
24020
24021         function sortCellHalfedges() {
24022           for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {
24023             if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {
24024               var index = new Array(m),
24025                   array = new Array(m);
24026               for (j = 0; j < m; ++j) { index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]); }
24027               index.sort(function(i, j) { return array[j] - array[i]; });
24028               for (j = 0; j < m; ++j) { array[j] = halfedges[index[j]]; }
24029               for (j = 0; j < m; ++j) { halfedges[j] = array[j]; }
24030             }
24031           }
24032         }
24033
24034         function clipCells(x0, y0, x1, y1) {
24035           var nCells = cells.length,
24036               iCell,
24037               cell,
24038               site,
24039               iHalfedge,
24040               halfedges,
24041               nHalfedges,
24042               start,
24043               startX,
24044               startY,
24045               end,
24046               endX,
24047               endY,
24048               cover = true;
24049
24050           for (iCell = 0; iCell < nCells; ++iCell) {
24051             if (cell = cells[iCell]) {
24052               site = cell.site;
24053               halfedges = cell.halfedges;
24054               iHalfedge = halfedges.length;
24055
24056               // Remove any dangling clipped edges.
24057               while (iHalfedge--) {
24058                 if (!edges[halfedges[iHalfedge]]) {
24059                   halfedges.splice(iHalfedge, 1);
24060                 }
24061               }
24062
24063               // Insert any border edges as necessary.
24064               iHalfedge = 0, nHalfedges = halfedges.length;
24065               while (iHalfedge < nHalfedges) {
24066                 end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];
24067                 start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];
24068                 if (Math.abs(endX - startX) > epsilon$4 || Math.abs(endY - startY) > epsilon$4) {
24069                   halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,
24070                       Math.abs(endX - x0) < epsilon$4 && y1 - endY > epsilon$4 ? [x0, Math.abs(startX - x0) < epsilon$4 ? startY : y1]
24071                       : Math.abs(endY - y1) < epsilon$4 && x1 - endX > epsilon$4 ? [Math.abs(startY - y1) < epsilon$4 ? startX : x1, y1]
24072                       : Math.abs(endX - x1) < epsilon$4 && endY - y0 > epsilon$4 ? [x1, Math.abs(startX - x1) < epsilon$4 ? startY : y0]
24073                       : Math.abs(endY - y0) < epsilon$4 && endX - x0 > epsilon$4 ? [Math.abs(startY - y0) < epsilon$4 ? startX : x0, y0]
24074                       : null)) - 1);
24075                   ++nHalfedges;
24076                 }
24077               }
24078
24079               if (nHalfedges) { cover = false; }
24080             }
24081           }
24082
24083           // If there weren’t any edges, have the closest site cover the extent.
24084           // It doesn’t matter which corner of the extent we measure!
24085           if (cover) {
24086             var dx, dy, d2, dc = Infinity;
24087
24088             for (iCell = 0, cover = null; iCell < nCells; ++iCell) {
24089               if (cell = cells[iCell]) {
24090                 site = cell.site;
24091                 dx = site[0] - x0;
24092                 dy = site[1] - y0;
24093                 d2 = dx * dx + dy * dy;
24094                 if (d2 < dc) { dc = d2, cover = cell; }
24095               }
24096             }
24097
24098             if (cover) {
24099               var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];
24100               cover.halfedges.push(
24101                 edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,
24102                 edges.push(createBorderEdge(site, v01, v11)) - 1,
24103                 edges.push(createBorderEdge(site, v11, v10)) - 1,
24104                 edges.push(createBorderEdge(site, v10, v00)) - 1
24105               );
24106             }
24107           }
24108
24109           // Lastly delete any cells with no edges; these were entirely clipped.
24110           for (iCell = 0; iCell < nCells; ++iCell) {
24111             if (cell = cells[iCell]) {
24112               if (!cell.halfedges.length) {
24113                 delete cells[iCell];
24114               }
24115             }
24116           }
24117         }
24118
24119         var circlePool = [];
24120
24121         var firstCircle;
24122
24123         function Circle() {
24124           RedBlackNode(this);
24125           this.x =
24126           this.y =
24127           this.arc =
24128           this.site =
24129           this.cy = null;
24130         }
24131
24132         function attachCircle(arc) {
24133           var lArc = arc.P,
24134               rArc = arc.N;
24135
24136           if (!lArc || !rArc) { return; }
24137
24138           var lSite = lArc.site,
24139               cSite = arc.site,
24140               rSite = rArc.site;
24141
24142           if (lSite === rSite) { return; }
24143
24144           var bx = cSite[0],
24145               by = cSite[1],
24146               ax = lSite[0] - bx,
24147               ay = lSite[1] - by,
24148               cx = rSite[0] - bx,
24149               cy = rSite[1] - by;
24150
24151           var d = 2 * (ax * cy - ay * cx);
24152           if (d >= -epsilon2$2) { return; }
24153
24154           var ha = ax * ax + ay * ay,
24155               hc = cx * cx + cy * cy,
24156               x = (cy * ha - ay * hc) / d,
24157               y = (ax * hc - cx * ha) / d;
24158
24159           var circle = circlePool.pop() || new Circle;
24160           circle.arc = arc;
24161           circle.site = cSite;
24162           circle.x = x + bx;
24163           circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom
24164
24165           arc.circle = circle;
24166
24167           var before = null,
24168               node = circles._;
24169
24170           while (node) {
24171             if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {
24172               if (node.L) { node = node.L; }
24173               else { before = node.P; break; }
24174             } else {
24175               if (node.R) { node = node.R; }
24176               else { before = node; break; }
24177             }
24178           }
24179
24180           circles.insert(before, circle);
24181           if (!before) { firstCircle = circle; }
24182         }
24183
24184         function detachCircle(arc) {
24185           var circle = arc.circle;
24186           if (circle) {
24187             if (!circle.P) { firstCircle = circle.N; }
24188             circles.remove(circle);
24189             circlePool.push(circle);
24190             RedBlackNode(circle);
24191             arc.circle = null;
24192           }
24193         }
24194
24195         var beachPool = [];
24196
24197         function Beach() {
24198           RedBlackNode(this);
24199           this.edge =
24200           this.site =
24201           this.circle = null;
24202         }
24203
24204         function createBeach(site) {
24205           var beach = beachPool.pop() || new Beach;
24206           beach.site = site;
24207           return beach;
24208         }
24209
24210         function detachBeach(beach) {
24211           detachCircle(beach);
24212           beaches.remove(beach);
24213           beachPool.push(beach);
24214           RedBlackNode(beach);
24215         }
24216
24217         function removeBeach(beach) {
24218           var circle = beach.circle,
24219               x = circle.x,
24220               y = circle.cy,
24221               vertex = [x, y],
24222               previous = beach.P,
24223               next = beach.N,
24224               disappearing = [beach];
24225
24226           detachBeach(beach);
24227
24228           var lArc = previous;
24229           while (lArc.circle
24230               && Math.abs(x - lArc.circle.x) < epsilon$4
24231               && Math.abs(y - lArc.circle.cy) < epsilon$4) {
24232             previous = lArc.P;
24233             disappearing.unshift(lArc);
24234             detachBeach(lArc);
24235             lArc = previous;
24236           }
24237
24238           disappearing.unshift(lArc);
24239           detachCircle(lArc);
24240
24241           var rArc = next;
24242           while (rArc.circle
24243               && Math.abs(x - rArc.circle.x) < epsilon$4
24244               && Math.abs(y - rArc.circle.cy) < epsilon$4) {
24245             next = rArc.N;
24246             disappearing.push(rArc);
24247             detachBeach(rArc);
24248             rArc = next;
24249           }
24250
24251           disappearing.push(rArc);
24252           detachCircle(rArc);
24253
24254           var nArcs = disappearing.length,
24255               iArc;
24256           for (iArc = 1; iArc < nArcs; ++iArc) {
24257             rArc = disappearing[iArc];
24258             lArc = disappearing[iArc - 1];
24259             setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);
24260           }
24261
24262           lArc = disappearing[0];
24263           rArc = disappearing[nArcs - 1];
24264           rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);
24265
24266           attachCircle(lArc);
24267           attachCircle(rArc);
24268         }
24269
24270         function addBeach(site) {
24271           var x = site[0],
24272               directrix = site[1],
24273               lArc,
24274               rArc,
24275               dxl,
24276               dxr,
24277               node = beaches._;
24278
24279           while (node) {
24280             dxl = leftBreakPoint(node, directrix) - x;
24281             if (dxl > epsilon$4) { node = node.L; } else {
24282               dxr = x - rightBreakPoint(node, directrix);
24283               if (dxr > epsilon$4) {
24284                 if (!node.R) {
24285                   lArc = node;
24286                   break;
24287                 }
24288                 node = node.R;
24289               } else {
24290                 if (dxl > -epsilon$4) {
24291                   lArc = node.P;
24292                   rArc = node;
24293                 } else if (dxr > -epsilon$4) {
24294                   lArc = node;
24295                   rArc = node.N;
24296                 } else {
24297                   lArc = rArc = node;
24298                 }
24299                 break;
24300               }
24301             }
24302           }
24303
24304           createCell(site);
24305           var newArc = createBeach(site);
24306           beaches.insert(lArc, newArc);
24307
24308           if (!lArc && !rArc) { return; }
24309
24310           if (lArc === rArc) {
24311             detachCircle(lArc);
24312             rArc = createBeach(lArc.site);
24313             beaches.insert(newArc, rArc);
24314             newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);
24315             attachCircle(lArc);
24316             attachCircle(rArc);
24317             return;
24318           }
24319
24320           if (!rArc) { // && lArc
24321             newArc.edge = createEdge(lArc.site, newArc.site);
24322             return;
24323           }
24324
24325           // else lArc !== rArc
24326           detachCircle(lArc);
24327           detachCircle(rArc);
24328
24329           var lSite = lArc.site,
24330               ax = lSite[0],
24331               ay = lSite[1],
24332               bx = site[0] - ax,
24333               by = site[1] - ay,
24334               rSite = rArc.site,
24335               cx = rSite[0] - ax,
24336               cy = rSite[1] - ay,
24337               d = 2 * (bx * cy - by * cx),
24338               hb = bx * bx + by * by,
24339               hc = cx * cx + cy * cy,
24340               vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];
24341
24342           setEdgeEnd(rArc.edge, lSite, rSite, vertex);
24343           newArc.edge = createEdge(lSite, site, null, vertex);
24344           rArc.edge = createEdge(site, rSite, null, vertex);
24345           attachCircle(lArc);
24346           attachCircle(rArc);
24347         }
24348
24349         function leftBreakPoint(arc, directrix) {
24350           var site = arc.site,
24351               rfocx = site[0],
24352               rfocy = site[1],
24353               pby2 = rfocy - directrix;
24354
24355           if (!pby2) { return rfocx; }
24356
24357           var lArc = arc.P;
24358           if (!lArc) { return -Infinity; }
24359
24360           site = lArc.site;
24361           var lfocx = site[0],
24362               lfocy = site[1],
24363               plby2 = lfocy - directrix;
24364
24365           if (!plby2) { return lfocx; }
24366
24367           var hl = lfocx - rfocx,
24368               aby2 = 1 / pby2 - 1 / plby2,
24369               b = hl / plby2;
24370
24371           if (aby2) { return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; }
24372
24373           return (rfocx + lfocx) / 2;
24374         }
24375
24376         function rightBreakPoint(arc, directrix) {
24377           var rArc = arc.N;
24378           if (rArc) { return leftBreakPoint(rArc, directrix); }
24379           var site = arc.site;
24380           return site[1] === directrix ? site[0] : Infinity;
24381         }
24382
24383         var epsilon$4 = 1e-6;
24384         var epsilon2$2 = 1e-12;
24385         var beaches;
24386         var cells;
24387         var circles;
24388         var edges;
24389
24390         function triangleArea(a, b, c) {
24391           return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);
24392         }
24393
24394         function lexicographic(a, b) {
24395           return b[1] - a[1]
24396               || b[0] - a[0];
24397         }
24398
24399         function Diagram(sites, extent) {
24400           var site = sites.sort(lexicographic).pop(),
24401               x,
24402               y,
24403               circle;
24404
24405           edges = [];
24406           cells = new Array(sites.length);
24407           beaches = new RedBlackTree;
24408           circles = new RedBlackTree;
24409
24410           while (true) {
24411             circle = firstCircle;
24412             if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {
24413               if (site[0] !== x || site[1] !== y) {
24414                 addBeach(site);
24415                 x = site[0], y = site[1];
24416               }
24417               site = sites.pop();
24418             } else if (circle) {
24419               removeBeach(circle.arc);
24420             } else {
24421               break;
24422             }
24423           }
24424
24425           sortCellHalfedges();
24426
24427           if (extent) {
24428             var x0 = +extent[0][0],
24429                 y0 = +extent[0][1],
24430                 x1 = +extent[1][0],
24431                 y1 = +extent[1][1];
24432             clipEdges(x0, y0, x1, y1);
24433             clipCells(x0, y0, x1, y1);
24434           }
24435
24436           this.edges = edges;
24437           this.cells = cells;
24438
24439           beaches =
24440           circles =
24441           edges =
24442           cells = null;
24443         }
24444
24445         Diagram.prototype = {
24446           constructor: Diagram,
24447
24448           polygons: function() {
24449             var edges = this.edges;
24450
24451             return this.cells.map(function(cell) {
24452               var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });
24453               polygon.data = cell.site.data;
24454               return polygon;
24455             });
24456           },
24457
24458           triangles: function() {
24459             var triangles = [],
24460                 edges = this.edges;
24461
24462             this.cells.forEach(function(cell, i) {
24463               if (!(m = (halfedges = cell.halfedges).length)) { return; }
24464               var site = cell.site,
24465                   halfedges,
24466                   j = -1,
24467                   m,
24468                   s0,
24469                   e1 = edges[halfedges[m - 1]],
24470                   s1 = e1.left === site ? e1.right : e1.left;
24471
24472               while (++j < m) {
24473                 s0 = s1;
24474                 e1 = edges[halfedges[j]];
24475                 s1 = e1.left === site ? e1.right : e1.left;
24476                 if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {
24477                   triangles.push([site.data, s0.data, s1.data]);
24478                 }
24479               }
24480             });
24481
24482             return triangles;
24483           },
24484
24485           links: function() {
24486             return this.edges.filter(function(edge) {
24487               return edge.right;
24488             }).map(function(edge) {
24489               return {
24490                 source: edge.left.data,
24491                 target: edge.right.data
24492               };
24493             });
24494           },
24495
24496           find: function(x, y, radius) {
24497             var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;
24498
24499             // Use the previously-found cell, or start with an arbitrary one.
24500             while (!(cell = that.cells[i1])) { if (++i1 >= n) { return null; } }
24501             var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;
24502
24503             // Traverse the half-edges to find a closer cell, if any.
24504             do {
24505               cell = that.cells[i0 = i1], i1 = null;
24506               cell.halfedges.forEach(function(e) {
24507                 var edge = that.edges[e], v = edge.left;
24508                 if ((v === cell.site || !v) && !(v = edge.right)) { return; }
24509                 var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;
24510                 if (v2 < d2) { d2 = v2, i1 = v.index; }
24511               });
24512             } while (i1 !== null);
24513
24514             that._found = i0;
24515
24516             return radius == null || d2 <= radius * radius ? cell.site : null;
24517           }
24518         };
24519
24520         function voronoi() {
24521           var x = x$4,
24522               y = y$4,
24523               extent = null;
24524
24525           function voronoi(data) {
24526             return new Diagram(data.map(function(d, i) {
24527               var s = [Math.round(x(d, i, data) / epsilon$4) * epsilon$4, Math.round(y(d, i, data) / epsilon$4) * epsilon$4];
24528               s.index = i;
24529               s.data = d;
24530               return s;
24531             }), extent);
24532           }
24533
24534           voronoi.polygons = function(data) {
24535             return voronoi(data).polygons();
24536           };
24537
24538           voronoi.links = function(data) {
24539             return voronoi(data).links();
24540           };
24541
24542           voronoi.triangles = function(data) {
24543             return voronoi(data).triangles();
24544           };
24545
24546           voronoi.x = function(_) {
24547             return arguments.length ? (x = typeof _ === "function" ? _ : constant$c(+_), voronoi) : x;
24548           };
24549
24550           voronoi.y = function(_) {
24551             return arguments.length ? (y = typeof _ === "function" ? _ : constant$c(+_), voronoi) : y;
24552           };
24553
24554           voronoi.extent = function(_) {
24555             return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];
24556           };
24557
24558           voronoi.size = function(_) {
24559             return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];
24560           };
24561
24562           return voronoi;
24563         }
24564
24565         function constant$d(x) {
24566           return function() {
24567             return x;
24568           };
24569         }
24570
24571         function ZoomEvent(target, type, transform) {
24572           this.target = target;
24573           this.type = type;
24574           this.transform = transform;
24575         }
24576
24577         function Transform(k, x, y) {
24578           this.k = k;
24579           this.x = x;
24580           this.y = y;
24581         }
24582
24583         Transform.prototype = {
24584           constructor: Transform,
24585           scale: function(k) {
24586             return k === 1 ? this : new Transform(this.k * k, this.x, this.y);
24587           },
24588           translate: function(x, y) {
24589             return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);
24590           },
24591           apply: function(point) {
24592             return [point[0] * this.k + this.x, point[1] * this.k + this.y];
24593           },
24594           applyX: function(x) {
24595             return x * this.k + this.x;
24596           },
24597           applyY: function(y) {
24598             return y * this.k + this.y;
24599           },
24600           invert: function(location) {
24601             return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];
24602           },
24603           invertX: function(x) {
24604             return (x - this.x) / this.k;
24605           },
24606           invertY: function(y) {
24607             return (y - this.y) / this.k;
24608           },
24609           rescaleX: function(x) {
24610             return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));
24611           },
24612           rescaleY: function(y) {
24613             return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));
24614           },
24615           toString: function() {
24616             return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
24617           }
24618         };
24619
24620         var identity$8 = new Transform(1, 0, 0);
24621
24622         transform.prototype = Transform.prototype;
24623
24624         function transform(node) {
24625           while (!node.__zoom) { if (!(node = node.parentNode)) { return identity$8; } }
24626           return node.__zoom;
24627         }
24628
24629         function nopropagation$2() {
24630           event.stopImmediatePropagation();
24631         }
24632
24633         function noevent$2() {
24634           event.preventDefault();
24635           event.stopImmediatePropagation();
24636         }
24637
24638         // Ignore right-click, since that should open the context menu.
24639         function defaultFilter$2() {
24640           return !event.ctrlKey && !event.button;
24641         }
24642
24643         function defaultExtent$1() {
24644           var e = this;
24645           if (e instanceof SVGElement) {
24646             e = e.ownerSVGElement || e;
24647             if (e.hasAttribute("viewBox")) {
24648               e = e.viewBox.baseVal;
24649               return [[e.x, e.y], [e.x + e.width, e.y + e.height]];
24650             }
24651             return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];
24652           }
24653           return [[0, 0], [e.clientWidth, e.clientHeight]];
24654         }
24655
24656         function defaultTransform() {
24657           return this.__zoom || identity$8;
24658         }
24659
24660         function defaultWheelDelta() {
24661           return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002);
24662         }
24663
24664         function defaultTouchable$2() {
24665           return navigator.maxTouchPoints || ("ontouchstart" in this);
24666         }
24667
24668         function defaultConstrain(transform, extent, translateExtent) {
24669           var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],
24670               dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],
24671               dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],
24672               dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];
24673           return transform.translate(
24674             dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),
24675             dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)
24676           );
24677         }
24678
24679         function d3_zoom() {
24680           var filter = defaultFilter$2,
24681               extent = defaultExtent$1,
24682               constrain = defaultConstrain,
24683               wheelDelta = defaultWheelDelta,
24684               touchable = defaultTouchable$2,
24685               scaleExtent = [0, Infinity],
24686               translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],
24687               duration = 250,
24688               interpolate = interpolateZoom,
24689               listeners = dispatch("start", "zoom", "end"),
24690               touchstarting,
24691               touchending,
24692               touchDelay = 500,
24693               wheelDelay = 150,
24694               clickDistance2 = 0;
24695
24696           function zoom(selection) {
24697             selection
24698                 .property("__zoom", defaultTransform)
24699                 .on("wheel.zoom", wheeled)
24700                 .on("mousedown.zoom", mousedowned)
24701                 .on("dblclick.zoom", dblclicked)
24702               .filter(touchable)
24703                 .on("touchstart.zoom", touchstarted)
24704                 .on("touchmove.zoom", touchmoved)
24705                 .on("touchend.zoom touchcancel.zoom", touchended)
24706                 .style("touch-action", "none")
24707                 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
24708           }
24709
24710           zoom.transform = function(collection, transform, point) {
24711             var selection = collection.selection ? collection.selection() : collection;
24712             selection.property("__zoom", defaultTransform);
24713             if (collection !== selection) {
24714               schedule(collection, transform, point);
24715             } else {
24716               selection.interrupt().each(function() {
24717                 gesture(this, arguments)
24718                     .start()
24719                     .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)
24720                     .end();
24721               });
24722             }
24723           };
24724
24725           zoom.scaleBy = function(selection, k, p) {
24726             zoom.scaleTo(selection, function() {
24727               var k0 = this.__zoom.k,
24728                   k1 = typeof k === "function" ? k.apply(this, arguments) : k;
24729               return k0 * k1;
24730             }, p);
24731           };
24732
24733           zoom.scaleTo = function(selection, k, p) {
24734             zoom.transform(selection, function() {
24735               var e = extent.apply(this, arguments),
24736                   t0 = this.__zoom,
24737                   p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p,
24738                   p1 = t0.invert(p0),
24739                   k1 = typeof k === "function" ? k.apply(this, arguments) : k;
24740               return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);
24741             }, p);
24742           };
24743
24744           zoom.translateBy = function(selection, x, y) {
24745             zoom.transform(selection, function() {
24746               return constrain(this.__zoom.translate(
24747                 typeof x === "function" ? x.apply(this, arguments) : x,
24748                 typeof y === "function" ? y.apply(this, arguments) : y
24749               ), extent.apply(this, arguments), translateExtent);
24750             });
24751           };
24752
24753           zoom.translateTo = function(selection, x, y, p) {
24754             zoom.transform(selection, function() {
24755               var e = extent.apply(this, arguments),
24756                   t = this.__zoom,
24757                   p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p;
24758               return constrain(identity$8.translate(p0[0], p0[1]).scale(t.k).translate(
24759                 typeof x === "function" ? -x.apply(this, arguments) : -x,
24760                 typeof y === "function" ? -y.apply(this, arguments) : -y
24761               ), e, translateExtent);
24762             }, p);
24763           };
24764
24765           function scale(transform, k) {
24766             k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));
24767             return k === transform.k ? transform : new Transform(k, transform.x, transform.y);
24768           }
24769
24770           function translate(transform, p0, p1) {
24771             var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;
24772             return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);
24773           }
24774
24775           function centroid(extent) {
24776             return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
24777           }
24778
24779           function schedule(transition, transform, point) {
24780             transition
24781                 .on("start.zoom", function() { gesture(this, arguments).start(); })
24782                 .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })
24783                 .tween("zoom", function() {
24784                   var that = this,
24785                       args = arguments,
24786                       g = gesture(that, args),
24787                       e = extent.apply(that, args),
24788                       p = point == null ? centroid(e) : typeof point === "function" ? point.apply(that, args) : point,
24789                       w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
24790                       a = that.__zoom,
24791                       b = typeof transform === "function" ? transform.apply(that, args) : transform,
24792                       i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
24793                   return function(t) {
24794                     if (t === 1) { t = b; } // Avoid rounding error on end.
24795                     else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }
24796                     g.zoom(null, t);
24797                   };
24798                 });
24799           }
24800
24801           function gesture(that, args, clean) {
24802             return (!clean && that.__zooming) || new Gesture(that, args);
24803           }
24804
24805           function Gesture(that, args) {
24806             this.that = that;
24807             this.args = args;
24808             this.active = 0;
24809             this.extent = extent.apply(that, args);
24810             this.taps = 0;
24811           }
24812
24813           Gesture.prototype = {
24814             start: function() {
24815               if (++this.active === 1) {
24816                 this.that.__zooming = this;
24817                 this.emit("start");
24818               }
24819               return this;
24820             },
24821             zoom: function(key, transform) {
24822               if (this.mouse && key !== "mouse") { this.mouse[1] = transform.invert(this.mouse[0]); }
24823               if (this.touch0 && key !== "touch") { this.touch0[1] = transform.invert(this.touch0[0]); }
24824               if (this.touch1 && key !== "touch") { this.touch1[1] = transform.invert(this.touch1[0]); }
24825               this.that.__zoom = transform;
24826               this.emit("zoom");
24827               return this;
24828             },
24829             end: function() {
24830               if (--this.active === 0) {
24831                 delete this.that.__zooming;
24832                 this.emit("end");
24833               }
24834               return this;
24835             },
24836             emit: function(type) {
24837               customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);
24838             }
24839           };
24840
24841           function wheeled() {
24842             if (!filter.apply(this, arguments)) { return; }
24843             var g = gesture(this, arguments),
24844                 t = this.__zoom,
24845                 k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),
24846                 p = d3_mouse(this);
24847
24848             // If the mouse is in the same location as before, reuse it.
24849             // If there were recent wheel events, reset the wheel idle timeout.
24850             if (g.wheel) {
24851               if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {
24852                 g.mouse[1] = t.invert(g.mouse[0] = p);
24853               }
24854               clearTimeout(g.wheel);
24855             }
24856
24857             // If this wheel event won’t trigger a transform change, ignore it.
24858             else if (t.k === k) { return; }
24859
24860             // Otherwise, capture the mouse point and location at the start.
24861             else {
24862               g.mouse = [p, t.invert(p)];
24863               interrupt(this);
24864               g.start();
24865             }
24866
24867             noevent$2();
24868             g.wheel = setTimeout(wheelidled, wheelDelay);
24869             g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));
24870
24871             function wheelidled() {
24872               g.wheel = null;
24873               g.end();
24874             }
24875           }
24876
24877           function mousedowned() {
24878             if (touchending || !filter.apply(this, arguments)) { return; }
24879             var g = gesture(this, arguments, true),
24880                 v = d3_select(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
24881                 p = d3_mouse(this),
24882                 x0 = event.clientX,
24883                 y0 = event.clientY;
24884
24885             dragDisable(event.view);
24886             nopropagation$2();
24887             g.mouse = [p, this.__zoom.invert(p)];
24888             interrupt(this);
24889             g.start();
24890
24891             function mousemoved() {
24892               noevent$2();
24893               if (!g.moved) {
24894                 var dx = event.clientX - x0, dy = event.clientY - y0;
24895                 g.moved = dx * dx + dy * dy > clickDistance2;
24896               }
24897               g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = d3_mouse(g.that), g.mouse[1]), g.extent, translateExtent));
24898             }
24899
24900             function mouseupped() {
24901               v.on("mousemove.zoom mouseup.zoom", null);
24902               yesdrag(event.view, g.moved);
24903               noevent$2();
24904               g.end();
24905             }
24906           }
24907
24908           function dblclicked() {
24909             if (!filter.apply(this, arguments)) { return; }
24910             var t0 = this.__zoom,
24911                 p0 = d3_mouse(this),
24912                 p1 = t0.invert(p0),
24913                 k1 = t0.k * (event.shiftKey ? 0.5 : 2),
24914                 t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent);
24915
24916             noevent$2();
24917             if (duration > 0) { d3_select(this).transition().duration(duration).call(schedule, t1, p0); }
24918             else { d3_select(this).call(zoom.transform, t1); }
24919           }
24920
24921           function touchstarted() {
24922             if (!filter.apply(this, arguments)) { return; }
24923             var touches = event.touches,
24924                 n = touches.length,
24925                 g = gesture(this, arguments, event.changedTouches.length === n),
24926                 started, i, t, p;
24927
24928             nopropagation$2();
24929             for (i = 0; i < n; ++i) {
24930               t = touches[i], p = touch(this, touches, t.identifier);
24931               p = [p, this.__zoom.invert(p), t.identifier];
24932               if (!g.touch0) { g.touch0 = p, started = true, g.taps = 1 + !!touchstarting; }
24933               else if (!g.touch1 && g.touch0[2] !== p[2]) { g.touch1 = p, g.taps = 0; }
24934             }
24935
24936             if (touchstarting) { touchstarting = clearTimeout(touchstarting); }
24937
24938             if (started) {
24939               if (g.taps < 2) { touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay); }
24940               interrupt(this);
24941               g.start();
24942             }
24943           }
24944
24945           function touchmoved() {
24946             if (!this.__zooming) { return; }
24947             var g = gesture(this, arguments),
24948                 touches = event.changedTouches,
24949                 n = touches.length, i, t, p, l;
24950
24951             noevent$2();
24952             if (touchstarting) { touchstarting = clearTimeout(touchstarting); }
24953             g.taps = 0;
24954             for (i = 0; i < n; ++i) {
24955               t = touches[i], p = touch(this, touches, t.identifier);
24956               if (g.touch0 && g.touch0[2] === t.identifier) { g.touch0[0] = p; }
24957               else if (g.touch1 && g.touch1[2] === t.identifier) { g.touch1[0] = p; }
24958             }
24959             t = g.that.__zoom;
24960             if (g.touch1) {
24961               var p0 = g.touch0[0], l0 = g.touch0[1],
24962                   p1 = g.touch1[0], l1 = g.touch1[1],
24963                   dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,
24964                   dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;
24965               t = scale(t, Math.sqrt(dp / dl));
24966               p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
24967               l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
24968             }
24969             else if (g.touch0) { p = g.touch0[0], l = g.touch0[1]; }
24970             else { return; }
24971             g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent));
24972           }
24973
24974           function touchended() {
24975             if (!this.__zooming) { return; }
24976             var g = gesture(this, arguments),
24977                 touches = event.changedTouches,
24978                 n = touches.length, i, t;
24979
24980             nopropagation$2();
24981             if (touchending) { clearTimeout(touchending); }
24982             touchending = setTimeout(function() { touchending = null; }, touchDelay);
24983             for (i = 0; i < n; ++i) {
24984               t = touches[i];
24985               if (g.touch0 && g.touch0[2] === t.identifier) { delete g.touch0; }
24986               else if (g.touch1 && g.touch1[2] === t.identifier) { delete g.touch1; }
24987             }
24988             if (g.touch1 && !g.touch0) { g.touch0 = g.touch1, delete g.touch1; }
24989             if (g.touch0) { g.touch0[1] = this.__zoom.invert(g.touch0[0]); }
24990             else {
24991               g.end();
24992               // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.
24993               if (g.taps === 2) {
24994                 var p = d3_select(this).on("dblclick.zoom");
24995                 if (p) { p.apply(this, arguments); }
24996               }
24997             }
24998           }
24999
25000           zoom.wheelDelta = function(_) {
25001             return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : constant$d(+_), zoom) : wheelDelta;
25002           };
25003
25004           zoom.filter = function(_) {
25005             return arguments.length ? (filter = typeof _ === "function" ? _ : constant$d(!!_), zoom) : filter;
25006           };
25007
25008           zoom.touchable = function(_) {
25009             return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$d(!!_), zoom) : touchable;
25010           };
25011
25012           zoom.extent = function(_) {
25013             return arguments.length ? (extent = typeof _ === "function" ? _ : constant$d([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;
25014           };
25015
25016           zoom.scaleExtent = function(_) {
25017             return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];
25018           };
25019
25020           zoom.translateExtent = function(_) {
25021             return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];
25022           };
25023
25024           zoom.constrain = function(_) {
25025             return arguments.length ? (constrain = _, zoom) : constrain;
25026           };
25027
25028           zoom.duration = function(_) {
25029             return arguments.length ? (duration = +_, zoom) : duration;
25030           };
25031
25032           zoom.interpolate = function(_) {
25033             return arguments.length ? (interpolate = _, zoom) : interpolate;
25034           };
25035
25036           zoom.on = function() {
25037             var value = listeners.on.apply(listeners, arguments);
25038             return value === listeners ? zoom : value;
25039           };
25040
25041           zoom.clickDistance = function(_) {
25042             return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);
25043           };
25044
25045           return zoom;
25046         }
25047
25048
25049
25050         var index$3 = /*#__PURE__*/Object.freeze({
25051                 __proto__: null,
25052                 version: version,
25053                 bisect: bisectRight,
25054                 bisectRight: bisectRight,
25055                 bisectLeft: bisectLeft,
25056                 ascending: d3_ascending,
25057                 bisector: d3_bisector,
25058                 cross: cross,
25059                 descending: d3_descending,
25060                 deviation: deviation,
25061                 extent: extent,
25062                 histogram: histogram,
25063                 thresholdFreedmanDiaconis: freedmanDiaconis,
25064                 thresholdScott: scott,
25065                 thresholdSturges: thresholdSturges,
25066                 max: max$2,
25067                 mean: mean,
25068                 median: d3_median,
25069                 merge: merge,
25070                 min: min,
25071                 pairs: pairs,
25072                 permute: permute,
25073                 quantile: threshold,
25074                 range: d3_range,
25075                 scan: scan,
25076                 shuffle: shuffle,
25077                 sum: sum,
25078                 ticks: ticks,
25079                 tickIncrement: tickIncrement,
25080                 tickStep: tickStep,
25081                 transpose: transpose,
25082                 variance: variance,
25083                 zip: zip,
25084                 axisTop: axisTop,
25085                 axisRight: axisRight,
25086                 axisBottom: axisBottom,
25087                 axisLeft: axisLeft,
25088                 brush: brush,
25089                 brushX: brushX,
25090                 brushY: brushY,
25091                 brushSelection: brushSelection,
25092                 chord: chord,
25093                 ribbon: ribbon,
25094                 nest: nest,
25095                 set: set$2,
25096                 map: map$3,
25097                 keys: keys$3,
25098                 values: values,
25099                 entries: entries,
25100                 color: color,
25101                 rgb: rgb,
25102                 hsl: hsl,
25103                 lab: lab,
25104                 hcl: hcl,
25105                 lch: lch,
25106                 gray: gray,
25107                 cubehelix: cubehelix,
25108                 contours: contours,
25109                 contourDensity: density,
25110                 dispatch: dispatch,
25111                 drag: d3_drag,
25112                 dragDisable: dragDisable,
25113                 dragEnable: yesdrag,
25114                 dsvFormat: dsvFormat,
25115                 csvParse: csvParse,
25116                 csvParseRows: csvParseRows,
25117                 csvFormat: csvFormat,
25118                 csvFormatBody: csvFormatBody,
25119                 csvFormatRows: csvFormatRows,
25120                 csvFormatRow: csvFormatRow,
25121                 csvFormatValue: csvFormatValue,
25122                 tsvParse: tsvParse,
25123                 tsvParseRows: tsvParseRows,
25124                 tsvFormat: tsvFormat,
25125                 tsvFormatBody: tsvFormatBody,
25126                 tsvFormatRows: tsvFormatRows,
25127                 tsvFormatRow: tsvFormatRow,
25128                 tsvFormatValue: tsvFormatValue,
25129                 autoType: autoType,
25130                 easeLinear: linear$1,
25131                 easeQuad: quadInOut,
25132                 easeQuadIn: quadIn,
25133                 easeQuadOut: quadOut,
25134                 easeQuadInOut: quadInOut,
25135                 easeCubic: cubicInOut,
25136                 easeCubicIn: cubicIn,
25137                 easeCubicOut: cubicOut,
25138                 easeCubicInOut: cubicInOut,
25139                 easePoly: polyInOut,
25140                 easePolyIn: polyIn,
25141                 easePolyOut: polyOut,
25142                 easePolyInOut: polyInOut,
25143                 easeSin: sinInOut,
25144                 easeSinIn: sinIn,
25145                 easeSinOut: sinOut,
25146                 easeSinInOut: sinInOut,
25147                 easeExp: expInOut,
25148                 easeExpIn: expIn,
25149                 easeExpOut: expOut,
25150                 easeExpInOut: expInOut,
25151                 easeCircle: circleInOut,
25152                 easeCircleIn: circleIn,
25153                 easeCircleOut: circleOut,
25154                 easeCircleInOut: circleInOut,
25155                 easeBounce: bounceOut,
25156                 easeBounceIn: bounceIn,
25157                 easeBounceOut: bounceOut,
25158                 easeBounceInOut: bounceInOut,
25159                 easeBack: backInOut,
25160                 easeBackIn: backIn,
25161                 easeBackOut: backOut,
25162                 easeBackInOut: backInOut,
25163                 easeElastic: elasticOut,
25164                 easeElasticIn: elasticIn,
25165                 easeElasticOut: elasticOut,
25166                 easeElasticInOut: elasticInOut,
25167                 blob: blob,
25168                 buffer: buffer,
25169                 dsv: dsv,
25170                 csv: csv$1,
25171                 tsv: tsv$1,
25172                 image: image,
25173                 json: d3_json,
25174                 text: d3_text,
25175                 xml: d3_xml,
25176                 html: html,
25177                 svg: svg,
25178                 forceCenter: center$1,
25179                 forceCollide: collide,
25180                 forceLink: link,
25181                 forceManyBody: manyBody,
25182                 forceRadial: radial,
25183                 forceSimulation: simulation,
25184                 forceX: x$2,
25185                 forceY: y$2,
25186                 formatDefaultLocale: defaultLocale,
25187                 get format () { return format; },
25188                 get formatPrefix () { return formatPrefix; },
25189                 formatLocale: formatLocale,
25190                 formatSpecifier: formatSpecifier,
25191                 FormatSpecifier: FormatSpecifier,
25192                 precisionFixed: precisionFixed,
25193                 precisionPrefix: precisionPrefix,
25194                 precisionRound: precisionRound,
25195                 geoArea: d3_geoArea,
25196                 geoBounds: d3_geoBounds,
25197                 geoCentroid: d3_geoCentroid,
25198                 geoCircle: circle,
25199                 geoClipAntimeridian: clipAntimeridian,
25200                 geoClipCircle: clipCircle,
25201                 geoClipExtent: extent$1,
25202                 geoClipRectangle: clipRectangle,
25203                 geoContains: contains$2,
25204                 geoDistance: distance,
25205                 geoGraticule: graticule,
25206                 geoGraticule10: graticule10,
25207                 geoInterpolate: interpolate$1,
25208                 geoLength: d3_geoLength,
25209                 geoPath: d3_geoPath,
25210                 geoAlbers: albers,
25211                 geoAlbersUsa: albersUsa,
25212                 geoAzimuthalEqualArea: azimuthalEqualArea,
25213                 geoAzimuthalEqualAreaRaw: azimuthalEqualAreaRaw,
25214                 geoAzimuthalEquidistant: azimuthalEquidistant,
25215                 geoAzimuthalEquidistantRaw: azimuthalEquidistantRaw,
25216                 geoConicConformal: conicConformal,
25217                 geoConicConformalRaw: conicConformalRaw,
25218                 geoConicEqualArea: conicEqualArea,
25219                 geoConicEqualAreaRaw: conicEqualAreaRaw,
25220                 geoConicEquidistant: conicEquidistant,
25221                 geoConicEquidistantRaw: conicEquidistantRaw,
25222                 geoEqualEarth: equalEarth,
25223                 geoEqualEarthRaw: equalEarthRaw,
25224                 geoEquirectangular: equirectangular,
25225                 geoEquirectangularRaw: equirectangularRaw,
25226                 geoGnomonic: gnomonic,
25227                 geoGnomonicRaw: gnomonicRaw,
25228                 geoIdentity: d3_geoIdentity,
25229                 geoProjection: projection,
25230                 geoProjectionMutator: projectionMutator,
25231                 geoMercator: mercator,
25232                 geoMercatorRaw: mercatorRaw,
25233                 geoNaturalEarth1: naturalEarth1,
25234                 geoNaturalEarth1Raw: naturalEarth1Raw,
25235                 geoOrthographic: orthographic,
25236                 geoOrthographicRaw: orthographicRaw,
25237                 geoStereographic: stereographic,
25238                 geoStereographicRaw: stereographicRaw,
25239                 geoTransverseMercator: transverseMercator,
25240                 geoTransverseMercatorRaw: transverseMercatorRaw,
25241                 geoRotation: rotation,
25242                 geoStream: d3_geoStream,
25243                 geoTransform: d3_geoTransform,
25244                 cluster: cluster,
25245                 hierarchy: hierarchy,
25246                 pack: index$1,
25247                 packSiblings: siblings,
25248                 packEnclose: enclose,
25249                 partition: partition,
25250                 stratify: stratify,
25251                 tree: tree,
25252                 treemap: index$2,
25253                 treemapBinary: binary,
25254                 treemapDice: treemapDice,
25255                 treemapSlice: treemapSlice,
25256                 treemapSliceDice: sliceDice,
25257                 treemapSquarify: squarify,
25258                 treemapResquarify: resquarify,
25259                 interpolate: d3_interpolate,
25260                 interpolateArray: array$2,
25261                 interpolateBasis: basis$1,
25262                 interpolateBasisClosed: basisClosed,
25263                 interpolateDate: date,
25264                 interpolateDiscrete: discrete,
25265                 interpolateHue: hue$1,
25266                 interpolateNumber: d3_interpolateNumber,
25267                 interpolateNumberArray: numberArray,
25268                 interpolateObject: object,
25269                 interpolateRound: interpolateRound,
25270                 interpolateString: interpolateString,
25271                 interpolateTransformCss: interpolateTransformCss,
25272                 interpolateTransformSvg: interpolateTransformSvg,
25273                 interpolateZoom: interpolateZoom,
25274                 interpolateRgb: d3_interpolateRgb,
25275                 interpolateRgbBasis: rgbBasis,
25276                 interpolateRgbBasisClosed: rgbBasisClosed,
25277                 interpolateHsl: hsl$2,
25278                 interpolateHslLong: hslLong,
25279                 interpolateLab: lab$1,
25280                 interpolateHcl: hcl$2,
25281                 interpolateHclLong: hclLong,
25282                 interpolateCubehelix: cubehelix$2,
25283                 interpolateCubehelixLong: cubehelixLong,
25284                 piecewise: piecewise,
25285                 quantize: d3_quantize,
25286                 path: path,
25287                 polygonArea: d3_polygonArea,
25288                 polygonCentroid: d3_polygonCentroid,
25289                 polygonHull: d3_polygonHull,
25290                 polygonContains: contains$3,
25291                 polygonLength: length$1,
25292                 quadtree: quadtree,
25293                 randomUniform: uniform,
25294                 randomNormal: normal,
25295                 randomLogNormal: logNormal,
25296                 randomBates: bates,
25297                 randomIrwinHall: irwinHall,
25298                 randomExponential: exponential$1,
25299                 scaleBand: band,
25300                 scalePoint: point$1,
25301                 scaleIdentity: identity$6,
25302                 scaleLinear: linear$2,
25303                 scaleLog: log$1,
25304                 scaleSymlog: symlog,
25305                 scaleOrdinal: ordinal,
25306                 scaleImplicit: implicit,
25307                 scalePow: pow$1,
25308                 scaleSqrt: sqrt$1,
25309                 scaleQuantile: quantile,
25310                 scaleQuantize: quantize,
25311                 scaleThreshold: threshold$1,
25312                 scaleTime: time,
25313                 scaleUtc: utcTime,
25314                 scaleSequential: sequential,
25315                 scaleSequentialLog: sequentialLog,
25316                 scaleSequentialPow: sequentialPow,
25317                 scaleSequentialSqrt: sequentialSqrt,
25318                 scaleSequentialSymlog: sequentialSymlog,
25319                 scaleSequentialQuantile: sequentialQuantile,
25320                 scaleDiverging: diverging,
25321                 scaleDivergingLog: divergingLog,
25322                 scaleDivergingPow: divergingPow,
25323                 scaleDivergingSqrt: divergingSqrt,
25324                 scaleDivergingSymlog: divergingSymlog,
25325                 tickFormat: tickFormat,
25326                 schemeCategory10: category10,
25327                 schemeAccent: Accent,
25328                 schemeDark2: Dark2,
25329                 schemePaired: Paired,
25330                 schemePastel1: Pastel1,
25331                 schemePastel2: Pastel2,
25332                 schemeSet1: Set1,
25333                 schemeSet2: Set2,
25334                 schemeSet3: Set3,
25335                 schemeTableau10: Tableau10,
25336                 interpolateBrBG: BrBG,
25337                 schemeBrBG: scheme,
25338                 interpolatePRGn: PRGn,
25339                 schemePRGn: scheme$1,
25340                 interpolatePiYG: PiYG,
25341                 schemePiYG: scheme$2,
25342                 interpolatePuOr: PuOr,
25343                 schemePuOr: scheme$3,
25344                 interpolateRdBu: RdBu,
25345                 schemeRdBu: scheme$4,
25346                 interpolateRdGy: RdGy,
25347                 schemeRdGy: scheme$5,
25348                 interpolateRdYlBu: RdYlBu,
25349                 schemeRdYlBu: scheme$6,
25350                 interpolateRdYlGn: RdYlGn,
25351                 schemeRdYlGn: scheme$7,
25352                 interpolateSpectral: Spectral,
25353                 schemeSpectral: scheme$8,
25354                 interpolateBuGn: BuGn,
25355                 schemeBuGn: scheme$9,
25356                 interpolateBuPu: BuPu,
25357                 schemeBuPu: scheme$a,
25358                 interpolateGnBu: GnBu,
25359                 schemeGnBu: scheme$b,
25360                 interpolateOrRd: OrRd,
25361                 schemeOrRd: scheme$c,
25362                 interpolatePuBuGn: PuBuGn,
25363                 schemePuBuGn: scheme$d,
25364                 interpolatePuBu: PuBu,
25365                 schemePuBu: scheme$e,
25366                 interpolatePuRd: PuRd,
25367                 schemePuRd: scheme$f,
25368                 interpolateRdPu: RdPu,
25369                 schemeRdPu: scheme$g,
25370                 interpolateYlGnBu: YlGnBu,
25371                 schemeYlGnBu: scheme$h,
25372                 interpolateYlGn: YlGn,
25373                 schemeYlGn: scheme$i,
25374                 interpolateYlOrBr: YlOrBr,
25375                 schemeYlOrBr: scheme$j,
25376                 interpolateYlOrRd: YlOrRd,
25377                 schemeYlOrRd: scheme$k,
25378                 interpolateBlues: Blues,
25379                 schemeBlues: scheme$l,
25380                 interpolateGreens: Greens,
25381                 schemeGreens: scheme$m,
25382                 interpolateGreys: Greys,
25383                 schemeGreys: scheme$n,
25384                 interpolatePurples: Purples,
25385                 schemePurples: scheme$o,
25386                 interpolateReds: Reds,
25387                 schemeReds: scheme$p,
25388                 interpolateOranges: Oranges,
25389                 schemeOranges: scheme$q,
25390                 interpolateCividis: cividis,
25391                 interpolateCubehelixDefault: cubehelix$3,
25392                 interpolateRainbow: rainbow,
25393                 interpolateWarm: warm,
25394                 interpolateCool: cool,
25395                 interpolateSinebow: sinebow,
25396                 interpolateTurbo: turbo,
25397                 interpolateViridis: viridis,
25398                 interpolateMagma: magma,
25399                 interpolateInferno: inferno,
25400                 interpolatePlasma: plasma,
25401                 create: create$7,
25402                 creator: creator,
25403                 local: local,
25404                 matcher: matcher,
25405                 mouse: d3_mouse,
25406                 namespace: namespace,
25407                 namespaces: namespaces,
25408                 clientPoint: point,
25409                 select: d3_select,
25410                 selectAll: d3_selectAll,
25411                 selection: selection,
25412                 selector: selector,
25413                 selectorAll: selectorAll,
25414                 style: styleValue,
25415                 touch: touch,
25416                 touches: d3_touches,
25417                 window: defaultView,
25418                 get event () { return event; },
25419                 customEvent: customEvent,
25420                 arc: arc,
25421                 area: area$1,
25422                 line: line,
25423                 pie: pie,
25424                 areaRadial: areaRadial,
25425                 radialArea: areaRadial,
25426                 lineRadial: lineRadial$1,
25427                 radialLine: lineRadial$1,
25428                 pointRadial: pointRadial,
25429                 linkHorizontal: linkHorizontal,
25430                 linkVertical: linkVertical,
25431                 linkRadial: linkRadial,
25432                 symbol: symbol,
25433                 symbols: symbols,
25434                 symbolCircle: circle$2,
25435                 symbolCross: cross$2,
25436                 symbolDiamond: diamond,
25437                 symbolSquare: square,
25438                 symbolStar: star,
25439                 symbolTriangle: triangle,
25440                 symbolWye: wye,
25441                 curveBasisClosed: basisClosed$1,
25442                 curveBasisOpen: basisOpen,
25443                 curveBasis: basis$2,
25444                 curveBundle: bundle,
25445                 curveCardinalClosed: cardinalClosed,
25446                 curveCardinalOpen: cardinalOpen,
25447                 curveCardinal: cardinal,
25448                 curveCatmullRomClosed: catmullRomClosed,
25449                 curveCatmullRomOpen: catmullRomOpen,
25450                 curveCatmullRom: catmullRom,
25451                 curveLinearClosed: linearClosed,
25452                 curveLinear: curveLinear,
25453                 curveMonotoneX: monotoneX,
25454                 curveMonotoneY: monotoneY,
25455                 curveNatural: natural,
25456                 curveStep: step,
25457                 curveStepAfter: stepAfter,
25458                 curveStepBefore: stepBefore,
25459                 stack: stack,
25460                 stackOffsetExpand: expand,
25461                 stackOffsetDiverging: diverging$1,
25462                 stackOffsetNone: none$1,
25463                 stackOffsetSilhouette: silhouette,
25464                 stackOffsetWiggle: wiggle,
25465                 stackOrderAppearance: appearance,
25466                 stackOrderAscending: ascending$2,
25467                 stackOrderDescending: descending$1,
25468                 stackOrderInsideOut: insideOut,
25469                 stackOrderNone: none$2,
25470                 stackOrderReverse: reverse,
25471                 timeInterval: newInterval,
25472                 timeMillisecond: millisecond,
25473                 timeMilliseconds: milliseconds,
25474                 utcMillisecond: millisecond,
25475                 utcMilliseconds: milliseconds,
25476                 timeSecond: second,
25477                 timeSeconds: seconds,
25478                 utcSecond: second,
25479                 utcSeconds: seconds,
25480                 timeMinute: minute,
25481                 timeMinutes: minutes,
25482                 timeHour: hour,
25483                 timeHours: hours,
25484                 timeDay: day,
25485                 timeDays: days,
25486                 timeWeek: sunday,
25487                 timeWeeks: sundays,
25488                 timeSunday: sunday,
25489                 timeSundays: sundays,
25490                 timeMonday: monday,
25491                 timeMondays: mondays,
25492                 timeTuesday: tuesday,
25493                 timeTuesdays: tuesdays,
25494                 timeWednesday: wednesday,
25495                 timeWednesdays: wednesdays,
25496                 timeThursday: thursday,
25497                 timeThursdays: thursdays,
25498                 timeFriday: friday,
25499                 timeFridays: fridays,
25500                 timeSaturday: saturday,
25501                 timeSaturdays: saturdays,
25502                 timeMonth: month,
25503                 timeMonths: months,
25504                 timeYear: year,
25505                 timeYears: years,
25506                 utcMinute: utcMinute,
25507                 utcMinutes: utcMinutes,
25508                 utcHour: utcHour,
25509                 utcHours: utcHours,
25510                 utcDay: utcDay,
25511                 utcDays: utcDays,
25512                 utcWeek: utcSunday,
25513                 utcWeeks: utcSundays,
25514                 utcSunday: utcSunday,
25515                 utcSundays: utcSundays,
25516                 utcMonday: utcMonday,
25517                 utcMondays: utcMondays,
25518                 utcTuesday: utcTuesday,
25519                 utcTuesdays: utcTuesdays,
25520                 utcWednesday: utcWednesday,
25521                 utcWednesdays: utcWednesdays,
25522                 utcThursday: utcThursday,
25523                 utcThursdays: utcThursdays,
25524                 utcFriday: utcFriday,
25525                 utcFridays: utcFridays,
25526                 utcSaturday: utcSaturday,
25527                 utcSaturdays: utcSaturdays,
25528                 utcMonth: utcMonth,
25529                 utcMonths: utcMonths,
25530                 utcYear: utcYear,
25531                 utcYears: utcYears,
25532                 timeFormatDefaultLocale: defaultLocale$1,
25533                 get timeFormat () { return timeFormat; },
25534                 get timeParse () { return timeParse; },
25535                 get utcFormat () { return utcFormat; },
25536                 get utcParse () { return utcParse; },
25537                 timeFormatLocale: formatLocale$1,
25538                 isoFormat: formatIso,
25539                 isoParse: parseIso,
25540                 now: now,
25541                 timer: timer,
25542                 timerFlush: timerFlush,
25543                 timeout: d3_timeout,
25544                 interval: interval$1,
25545                 transition: transition,
25546                 active: active,
25547                 interrupt: interrupt,
25548                 voronoi: voronoi,
25549                 zoom: d3_zoom,
25550                 zoomTransform: transform,
25551                 zoomIdentity: identity$8
25552         });
25553
25554         function actionAddEntity(way) {
25555             return function(graph) {
25556                 return graph.replace(way);
25557             };
25558         }
25559
25560         /*
25561         Order the nodes of a way in reverse order and reverse any direction dependent tags
25562         other than `oneway`. (We assume that correcting a backwards oneway is the primary
25563         reason for reversing a way.)
25564
25565         In addition, numeric-valued `incline` tags are negated.
25566
25567         The JOSM implementation was used as a guide, but transformations that were of unclear benefit
25568         or adjusted tags that don't seem to be used in practice were omitted.
25569
25570         References:
25571             http://wiki.openstreetmap.org/wiki/Forward_%26_backward,_left_%26_right
25572             http://wiki.openstreetmap.org/wiki/Key:direction#Steps
25573             http://wiki.openstreetmap.org/wiki/Key:incline
25574             http://wiki.openstreetmap.org/wiki/Route#Members
25575             http://josm.openstreetmap.de/browser/josm/trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
25576             http://wiki.openstreetmap.org/wiki/Tag:highway%3Dstop
25577             http://wiki.openstreetmap.org/wiki/Key:traffic_sign#On_a_way_or_area
25578         */
25579         function actionReverse(entityID, options) {
25580             var ignoreKey = /^.*(_|:)?(description|name|note|website|ref|source|comment|watch|attribution)(_|:)?/;
25581             var numeric = /^([+\-]?)(?=[\d.])/;
25582             var directionKey = /direction$/;
25583             var turn_lanes = /^turn:lanes:?/;
25584             var keyReplacements = [
25585                 [/:right$/, ':left'],
25586                 [/:left$/, ':right'],
25587                 [/:forward$/, ':backward'],
25588                 [/:backward$/, ':forward'],
25589                 [/:right:/, ':left:'],
25590                 [/:left:/, ':right:'],
25591                 [/:forward:/, ':backward:'],
25592                 [/:backward:/, ':forward:']
25593             ];
25594             var valueReplacements = {
25595                 left: 'right',
25596                 right: 'left',
25597                 up: 'down',
25598                 down: 'up',
25599                 forward: 'backward',
25600                 backward: 'forward',
25601                 forwards: 'backward',
25602                 backwards: 'forward',
25603             };
25604             var roleReplacements = {
25605                 forward: 'backward',
25606                 backward: 'forward',
25607                 forwards: 'backward',
25608                 backwards: 'forward'
25609             };
25610             var onewayReplacements = {
25611                 yes: '-1',
25612                 '1': '-1',
25613                 '-1': 'yes'
25614             };
25615
25616             var compassReplacements = {
25617                 N: 'S',
25618                 NNE: 'SSW',
25619                 NE: 'SW',
25620                 ENE: 'WSW',
25621                 E: 'W',
25622                 ESE: 'WNW',
25623                 SE: 'NW',
25624                 SSE: 'NNW',
25625                 S: 'N',
25626                 SSW: 'NNE',
25627                 SW: 'NE',
25628                 WSW: 'ENE',
25629                 W: 'E',
25630                 WNW: 'ESE',
25631                 NW: 'SE',
25632                 NNW: 'SSE'
25633             };
25634
25635
25636             function reverseKey(key) {
25637                 for (var i = 0; i < keyReplacements.length; ++i) {
25638                     var replacement = keyReplacements[i];
25639                     if (replacement[0].test(key)) {
25640                         return key.replace(replacement[0], replacement[1]);
25641                     }
25642                 }
25643                 return key;
25644             }
25645
25646
25647             function reverseValue(key, value, includeAbsolute) {
25648                 if (ignoreKey.test(key)) { return value; }
25649
25650                 // Turn lanes are left/right to key (not way) direction - #5674
25651                 if (turn_lanes.test(key)) {
25652                     return value;
25653
25654                 } else if (key === 'incline' && numeric.test(value)) {
25655                     return value.replace(numeric, function(_, sign) { return sign === '-' ? '' : '-'; });
25656
25657                 } else if (options && options.reverseOneway && key === 'oneway') {
25658                     return onewayReplacements[value] || value;
25659
25660                 } else if (includeAbsolute && directionKey.test(key)) {
25661                     if (compassReplacements[value]) { return compassReplacements[value]; }
25662
25663                     var degrees = parseFloat(value);
25664                     if (typeof degrees === 'number' && !isNaN(degrees)) {
25665                         if (degrees < 180) {
25666                             degrees += 180;
25667                         } else {
25668                             degrees -= 180;
25669                         }
25670                         return degrees.toString();
25671                     }
25672                 }
25673
25674                 return valueReplacements[value] || value;
25675             }
25676
25677
25678             // Reverse the direction of tags attached to the nodes - #3076
25679             function reverseNodeTags(graph, nodeIDs) {
25680                 for (var i = 0; i < nodeIDs.length; i++) {
25681                     var node = graph.hasEntity(nodeIDs[i]);
25682                     if (!node || !Object.keys(node.tags).length) { continue; }
25683
25684                     var tags = {};
25685                     for (var key in node.tags) {
25686                         tags[reverseKey(key)] = reverseValue(key, node.tags[key], node.id === entityID);
25687                     }
25688                     graph = graph.replace(node.update({tags: tags}));
25689                 }
25690                 return graph;
25691             }
25692
25693
25694             function reverseWay(graph, way) {
25695                 var nodes = way.nodes.slice().reverse();
25696                 var tags = {};
25697                 var role;
25698
25699                 for (var key in way.tags) {
25700                     tags[reverseKey(key)] = reverseValue(key, way.tags[key]);
25701                 }
25702
25703                 graph.parentRelations(way).forEach(function(relation) {
25704                     relation.members.forEach(function(member, index) {
25705                         if (member.id === way.id && (role = roleReplacements[member.role])) {
25706                             relation = relation.updateMember({role: role}, index);
25707                             graph = graph.replace(relation);
25708                         }
25709                     });
25710                 });
25711
25712                 // Reverse any associated directions on nodes on the way and then replace
25713                 // the way itself with the reversed node ids and updated way tags
25714                 return reverseNodeTags(graph, nodes)
25715                     .replace(way.update({nodes: nodes, tags: tags}));
25716             }
25717
25718
25719             var action = function(graph) {
25720                 var entity = graph.entity(entityID);
25721                 if (entity.type === 'way') {
25722                     return reverseWay(graph, entity);
25723                 }
25724                 return reverseNodeTags(graph, [entityID]);
25725             };
25726
25727             action.disabled = function(graph) {
25728                 var entity = graph.hasEntity(entityID);
25729                 if (!entity || entity.type === 'way') { return false; }
25730
25731                 for (var key in entity.tags) {
25732                     var value = entity.tags[key];
25733                     if (reverseKey(key) !== key || reverseValue(key, value, true) !== value) {
25734                         return false;
25735                     }
25736                 }
25737                 return 'nondirectional_node';
25738             };
25739
25740             action.entityID = function() {
25741                 return entityID;
25742             };
25743
25744             return action;
25745         }
25746
25747         function osmIsInterestingTag(key) {
25748             return key !== 'attribution' &&
25749                 key !== 'created_by' &&
25750                 key !== 'source' &&
25751                 key !== 'odbl' &&
25752                 key.indexOf('source:') !== 0 &&
25753                 key.indexOf('source_ref') !== 0 && // purposely exclude colon
25754                 key.indexOf('tiger:') !== 0;
25755         }
25756
25757         var osmAreaKeys = {};
25758         function osmSetAreaKeys(value) {
25759             osmAreaKeys = value;
25760         }
25761
25762         // Tags that indicate a node can be a standalone point
25763         // e.g. { amenity: { bar: true, parking: true, ... } ... }
25764         var osmPointTags = {};
25765         function osmSetPointTags(value) {
25766             osmPointTags = value;
25767         }
25768         // Tags that indicate a node can be part of a way
25769         // e.g. { amenity: { parking: true, ... }, highway: { stop: true ... } ... }
25770         var osmVertexTags = {};
25771         function osmSetVertexTags(value) {
25772             osmVertexTags = value;
25773         }
25774
25775         function osmNodeGeometriesForTags(nodeTags) {
25776             var geometries = {};
25777             for (var key in nodeTags) {
25778                 if (osmPointTags[key] &&
25779                     (osmPointTags[key]['*'] || osmPointTags[key][nodeTags[key]])) {
25780                     geometries.point = true;
25781                 }
25782                 if (osmVertexTags[key] &&
25783                     (osmVertexTags[key]['*'] || osmVertexTags[key][nodeTags[key]])) {
25784                     geometries.vertex = true;
25785                 }
25786                 // break early if both are already supported
25787                 if (geometries.point && geometries.vertex) { break; }
25788             }
25789             return geometries;
25790         }
25791
25792         var osmOneWayTags = {
25793             'aerialway': {
25794                 'chair_lift': true,
25795                 'drag_lift': true,
25796                 'j-bar': true,
25797                 'magic_carpet': true,
25798                 'mixed_lift': true,
25799                 'platter': true,
25800                 'rope_tow': true,
25801                 't-bar': true,
25802                 'zip_line': true
25803             },
25804             'highway': {
25805                 'motorway': true
25806             },
25807             'junction': {
25808                 'circular': true,
25809                 'roundabout': true
25810             },
25811             'man_made': {
25812                 'piste:halfpipe': true
25813             },
25814             'piste:type': {
25815                 'downhill': true,
25816                 'sled': true,
25817                 'yes': true
25818             },
25819             'waterway': {
25820                 'canal': true,
25821                 'ditch': true,
25822                 'drain': true,
25823                 'fish_pass': true,
25824                 'river': true,
25825                 'stream': true,
25826                 'tidal_channel': true
25827             }
25828         };
25829
25830
25831         var osmPavedTags = {
25832             'surface': {
25833                 'paved': true,
25834                 'asphalt': true,
25835                 'concrete': true,
25836                 'concrete:lanes': true,
25837                 'concrete:plates': true
25838             },
25839             'tracktype': {
25840                 'grade1': true
25841             }
25842         };
25843
25844         var osmRightSideIsInsideTags = {
25845             'natural': {
25846                 'cliff': true,
25847                 'coastline': 'coastline',
25848             },
25849             'barrier': {
25850                 'retaining_wall': true,
25851                 'kerb': true,
25852                 'guard_rail': true,
25853                 'city_wall': true,
25854             },
25855             'man_made': {
25856                 'embankment': true
25857             },
25858             'waterway': {
25859                 'weir': true
25860             }
25861         };
25862
25863         // "highway" tag values for pedestrian or vehicle right-of-ways that make up the routable network
25864         // (does not include `raceway`)
25865         var osmRoutableHighwayTagValues = {
25866             motorway: true, trunk: true, primary: true, secondary: true, tertiary: true, residential: true,
25867             motorway_link: true, trunk_link: true, primary_link: true, secondary_link: true, tertiary_link: true,
25868             unclassified: true, road: true, service: true, track: true, living_street: true, bus_guideway: true,
25869             path: true, footway: true, cycleway: true, bridleway: true, pedestrian: true, corridor: true, steps: true
25870         };
25871         // "highway" tag values that generally do not allow motor vehicles
25872         var osmPathHighwayTagValues = {
25873             path: true, footway: true, cycleway: true, bridleway: true, pedestrian: true, corridor: true, steps: true
25874         };
25875
25876         // "railway" tag values representing existing railroad tracks (purposely does not include 'abandoned')
25877         var osmRailwayTrackTagValues = {
25878             rail: true, light_rail: true, tram: true, subway: true,
25879             monorail: true, funicular: true, miniature: true, narrow_gauge: true,
25880             disused: true, preserved: true
25881         };
25882
25883         // "waterway" tag values for line features representing water flow
25884         var osmFlowingWaterwayTagValues = {
25885             canal: true, ditch: true, drain: true, fish_pass: true, river: true, stream: true, tidal_channel: true
25886         };
25887
25888         // constants
25889         var TAU = 2 * Math.PI;
25890         var EQUATORIAL_RADIUS = 6356752.314245179;
25891         var POLAR_RADIUS = 6378137.0;
25892
25893
25894         function geoLatToMeters(dLat) {
25895             return dLat * (TAU * POLAR_RADIUS / 360);
25896         }
25897
25898
25899         function geoLonToMeters(dLon, atLat) {
25900             return Math.abs(atLat) >= 90 ? 0 :
25901                 dLon * (TAU * EQUATORIAL_RADIUS / 360) * Math.abs(Math.cos(atLat * (Math.PI / 180)));
25902         }
25903
25904
25905         function geoMetersToLat(m) {
25906             return m / (TAU * POLAR_RADIUS / 360);
25907         }
25908
25909
25910         function geoMetersToLon(m, atLat) {
25911             return Math.abs(atLat) >= 90 ? 0 :
25912                 m / (TAU * EQUATORIAL_RADIUS / 360) / Math.abs(Math.cos(atLat * (Math.PI / 180)));
25913         }
25914
25915
25916         function geoMetersToOffset(meters, tileSize) {
25917             tileSize = tileSize || 256;
25918             return [
25919                 meters[0] * tileSize / (TAU * EQUATORIAL_RADIUS),
25920                 -meters[1] * tileSize / (TAU * POLAR_RADIUS)
25921             ];
25922         }
25923
25924
25925         function geoOffsetToMeters(offset, tileSize) {
25926             tileSize = tileSize || 256;
25927             return [
25928                 offset[0] * TAU * EQUATORIAL_RADIUS / tileSize,
25929                 -offset[1] * TAU * POLAR_RADIUS / tileSize
25930             ];
25931         }
25932
25933
25934         // Equirectangular approximation of spherical distances on Earth
25935         function geoSphericalDistance(a, b) {
25936             var x = geoLonToMeters(a[0] - b[0], (a[1] + b[1]) / 2);
25937             var y = geoLatToMeters(a[1] - b[1]);
25938             return Math.sqrt((x * x) + (y * y));
25939         }
25940
25941
25942         // scale to zoom
25943         function geoScaleToZoom(k, tileSize) {
25944             tileSize = tileSize || 256;
25945             var log2ts = Math.log(tileSize) * Math.LOG2E;
25946             return Math.log(k * TAU) / Math.LN2 - log2ts;
25947         }
25948
25949
25950         // zoom to scale
25951         function geoZoomToScale(z, tileSize) {
25952             tileSize = tileSize || 256;
25953             return tileSize * Math.pow(2, z) / TAU;
25954         }
25955
25956
25957         // returns info about the node from `nodes` closest to the given `point`
25958         function geoSphericalClosestNode(nodes, point) {
25959             var minDistance = Infinity, distance;
25960             var indexOfMin;
25961
25962             for (var i in nodes) {
25963                 distance = geoSphericalDistance(nodes[i].loc, point);
25964                 if (distance < minDistance) {
25965                     minDistance = distance;
25966                     indexOfMin = i;
25967                 }
25968             }
25969
25970             if (indexOfMin !== undefined) {
25971                 return { index: indexOfMin, distance: minDistance, node: nodes[indexOfMin] };
25972             } else {
25973                 return null;
25974             }
25975         }
25976
25977         function geoExtent(min, max) {
25978             if (!(this instanceof geoExtent)) {
25979                 return new geoExtent(min, max);
25980             } else if (min instanceof geoExtent) {
25981                 return min;
25982             } else if (min && min.length === 2 && min[0].length === 2 && min[1].length === 2) {
25983                 this[0] = min[0];
25984                 this[1] = min[1];
25985             } else {
25986                 this[0] = min        || [ Infinity,  Infinity];
25987                 this[1] = max || min || [-Infinity, -Infinity];
25988             }
25989         }
25990
25991         geoExtent.prototype = new Array(2);
25992
25993         Object.assign(geoExtent.prototype, {
25994
25995             equals: function (obj) {
25996                 return this[0][0] === obj[0][0] &&
25997                     this[0][1] === obj[0][1] &&
25998                     this[1][0] === obj[1][0] &&
25999                     this[1][1] === obj[1][1];
26000             },
26001
26002
26003             extend: function(obj) {
26004                 if (!(obj instanceof geoExtent)) { obj = new geoExtent(obj); }
26005                 return geoExtent(
26006                     [Math.min(obj[0][0], this[0][0]), Math.min(obj[0][1], this[0][1])],
26007                     [Math.max(obj[1][0], this[1][0]), Math.max(obj[1][1], this[1][1])]
26008                 );
26009             },
26010
26011
26012             _extend: function(extent) {
26013                 this[0][0] = Math.min(extent[0][0], this[0][0]);
26014                 this[0][1] = Math.min(extent[0][1], this[0][1]);
26015                 this[1][0] = Math.max(extent[1][0], this[1][0]);
26016                 this[1][1] = Math.max(extent[1][1], this[1][1]);
26017             },
26018
26019
26020             area: function() {
26021                 return Math.abs((this[1][0] - this[0][0]) * (this[1][1] - this[0][1]));
26022             },
26023
26024
26025             center: function() {
26026                 return [(this[0][0] + this[1][0]) / 2, (this[0][1] + this[1][1]) / 2];
26027             },
26028
26029
26030             rectangle: function() {
26031                 return [this[0][0], this[0][1], this[1][0], this[1][1]];
26032             },
26033
26034
26035             bbox: function() {
26036                 return { minX: this[0][0], minY: this[0][1], maxX: this[1][0], maxY: this[1][1] };
26037             },
26038
26039
26040             polygon: function() {
26041                 return [
26042                     [this[0][0], this[0][1]],
26043                     [this[0][0], this[1][1]],
26044                     [this[1][0], this[1][1]],
26045                     [this[1][0], this[0][1]],
26046                     [this[0][0], this[0][1]]
26047                 ];
26048             },
26049
26050
26051             contains: function(obj) {
26052                 if (!(obj instanceof geoExtent)) { obj = new geoExtent(obj); }
26053                 return obj[0][0] >= this[0][0] &&
26054                        obj[0][1] >= this[0][1] &&
26055                        obj[1][0] <= this[1][0] &&
26056                        obj[1][1] <= this[1][1];
26057             },
26058
26059
26060             intersects: function(obj) {
26061                 if (!(obj instanceof geoExtent)) { obj = new geoExtent(obj); }
26062                 return obj[0][0] <= this[1][0] &&
26063                        obj[0][1] <= this[1][1] &&
26064                        obj[1][0] >= this[0][0] &&
26065                        obj[1][1] >= this[0][1];
26066             },
26067
26068
26069             intersection: function(obj) {
26070                 if (!this.intersects(obj)) { return new geoExtent(); }
26071                 return new geoExtent(
26072                     [Math.max(obj[0][0], this[0][0]), Math.max(obj[0][1], this[0][1])],
26073                     [Math.min(obj[1][0], this[1][0]), Math.min(obj[1][1], this[1][1])]
26074                 );
26075             },
26076
26077
26078             percentContainedIn: function(obj) {
26079                 if (!(obj instanceof geoExtent)) { obj = new geoExtent(obj); }
26080                 var a1 = this.intersection(obj).area();
26081                 var a2 = this.area();
26082
26083                 if (a1 === Infinity || a2 === Infinity || a1 === 0 || a2 === 0) {
26084                     return 0;
26085                 } else {
26086                     return a1 / a2;
26087                 }
26088             },
26089
26090
26091             padByMeters: function(meters) {
26092                 var dLat = geoMetersToLat(meters);
26093                 var dLon = geoMetersToLon(meters, this.center()[1]);
26094                 return geoExtent(
26095                     [this[0][0] - dLon, this[0][1] - dLat],
26096                     [this[1][0] + dLon, this[1][1] + dLat]
26097                 );
26098             },
26099
26100
26101             toParam: function() {
26102                 return this.rectangle().join(',');
26103             }
26104
26105         });
26106
26107         // vector equals
26108         function geoVecEqual(a, b, epsilon) {
26109             if (epsilon) {
26110                 return (Math.abs(a[0] - b[0]) <= epsilon) && (Math.abs(a[1] - b[1]) <= epsilon);
26111             } else {
26112                 return (a[0] === b[0]) && (a[1] === b[1]);
26113             }
26114         }
26115
26116         // vector addition
26117         function geoVecAdd(a, b) {
26118             return [ a[0] + b[0], a[1] + b[1] ];
26119         }
26120
26121         // vector subtraction
26122         function geoVecSubtract(a, b) {
26123             return [ a[0] - b[0], a[1] - b[1] ];
26124         }
26125
26126         // vector scaling
26127         function geoVecScale(a, mag) {
26128             return [ a[0] * mag, a[1] * mag ];
26129         }
26130
26131         // vector rounding (was: geoRoundCoordinates)
26132         function geoVecFloor(a) {
26133             return [ Math.floor(a[0]), Math.floor(a[1]) ];
26134         }
26135
26136         // linear interpolation
26137         function geoVecInterp(a, b, t) {
26138             return [
26139                 a[0] + (b[0] - a[0]) * t,
26140                 a[1] + (b[1] - a[1]) * t
26141             ];
26142         }
26143
26144         // http://jsperf.com/id-dist-optimization
26145         function geoVecLength(a, b) {
26146             return Math.sqrt(geoVecLengthSquare(a,b));
26147         }
26148
26149         // length of vector raised to the power two
26150         function geoVecLengthSquare(a, b) {
26151             b = b || [0, 0];
26152             var x = a[0] - b[0];
26153             var y = a[1] - b[1];
26154             return (x * x) + (y * y);
26155         }
26156
26157         // get a unit vector
26158         function geoVecNormalize(a) {
26159             var length = Math.sqrt((a[0] * a[0]) + (a[1] * a[1]));
26160             if (length !== 0) {
26161                 return geoVecScale(a, 1 / length);
26162             }
26163             return [0, 0];
26164         }
26165
26166         // Return the counterclockwise angle in the range (-pi, pi)
26167         // between the positive X axis and the line intersecting a and b.
26168         function geoVecAngle(a, b) {
26169             return Math.atan2(b[1] - a[1], b[0] - a[0]);
26170         }
26171
26172         // dot product
26173         function geoVecDot(a, b, origin) {
26174             origin = origin || [0, 0];
26175             var p = geoVecSubtract(a, origin);
26176             var q = geoVecSubtract(b, origin);
26177             return (p[0]) * (q[0]) + (p[1]) * (q[1]);
26178         }
26179
26180         // normalized dot product
26181         function geoVecNormalizedDot(a, b, origin) {
26182             origin = origin || [0, 0];
26183             var p = geoVecNormalize(geoVecSubtract(a, origin));
26184             var q = geoVecNormalize(geoVecSubtract(b, origin));
26185             return geoVecDot(p, q);
26186         }
26187
26188         // 2D cross product of OA and OB vectors, returns magnitude of Z vector
26189         // Returns a positive value, if OAB makes a counter-clockwise turn,
26190         // negative for clockwise turn, and zero if the points are collinear.
26191         function geoVecCross(a, b, origin) {
26192             origin = origin || [0, 0];
26193             var p = geoVecSubtract(a, origin);
26194             var q = geoVecSubtract(b, origin);
26195             return (p[0]) * (q[1]) - (p[1]) * (q[0]);
26196         }
26197
26198
26199         // find closest orthogonal projection of point onto points array
26200         function geoVecProject(a, points) {
26201             var min = Infinity;
26202             var idx;
26203             var target;
26204
26205             for (var i = 0; i < points.length - 1; i++) {
26206                 var o = points[i];
26207                 var s = geoVecSubtract(points[i + 1], o);
26208                 var v = geoVecSubtract(a, o);
26209                 var proj = geoVecDot(v, s) / geoVecDot(s, s);
26210                 var p;
26211
26212                 if (proj < 0) {
26213                     p = o;
26214                 } else if (proj > 1) {
26215                     p = points[i + 1];
26216                 } else {
26217                     p = [o[0] + proj * s[0], o[1] + proj * s[1]];
26218                 }
26219
26220                 var dist = geoVecLength(p, a);
26221                 if (dist < min) {
26222                     min = dist;
26223                     idx = i + 1;
26224                     target = p;
26225                 }
26226             }
26227
26228             if (idx !== undefined) {
26229                 return { index: idx, distance: min, target: target };
26230             } else {
26231                 return null;
26232             }
26233         }
26234
26235         // Return the counterclockwise angle in the range (-pi, pi)
26236         // between the positive X axis and the line intersecting a and b.
26237         function geoAngle(a, b, projection) {
26238             return geoVecAngle(projection(a.loc), projection(b.loc));
26239         }
26240
26241
26242         function geoEdgeEqual(a, b) {
26243             return (a[0] === b[0] && a[1] === b[1]) ||
26244                 (a[0] === b[1] && a[1] === b[0]);
26245         }
26246
26247
26248         // Rotate all points counterclockwise around a pivot point by given angle
26249         function geoRotate(points, angle, around) {
26250             return points.map(function(point) {
26251                 var radial = geoVecSubtract(point, around);
26252                 return [
26253                     radial[0] * Math.cos(angle) - radial[1] * Math.sin(angle) + around[0],
26254                     radial[0] * Math.sin(angle) + radial[1] * Math.cos(angle) + around[1]
26255                 ];
26256             });
26257         }
26258
26259
26260         // Choose the edge with the minimal distance from `point` to its orthogonal
26261         // projection onto that edge, if such a projection exists, or the distance to
26262         // the closest vertex on that edge. Returns an object with the `index` of the
26263         // chosen edge, the chosen `loc` on that edge, and the `distance` to to it.
26264         function geoChooseEdge(nodes, point, projection, activeID) {
26265             var dist = geoVecLength;
26266             var points = nodes.map(function(n) { return projection(n.loc); });
26267             var ids = nodes.map(function(n) { return n.id; });
26268             var min = Infinity;
26269             var idx;
26270             var loc;
26271
26272             for (var i = 0; i < points.length - 1; i++) {
26273                 if (ids[i] === activeID || ids[i + 1] === activeID) { continue; }
26274
26275                 var o = points[i];
26276                 var s = geoVecSubtract(points[i + 1], o);
26277                 var v = geoVecSubtract(point, o);
26278                 var proj = geoVecDot(v, s) / geoVecDot(s, s);
26279                 var p;
26280
26281                 if (proj < 0) {
26282                     p = o;
26283                 } else if (proj > 1) {
26284                     p = points[i + 1];
26285                 } else {
26286                     p = [o[0] + proj * s[0], o[1] + proj * s[1]];
26287                 }
26288
26289                 var d = dist(p, point);
26290                 if (d < min) {
26291                     min = d;
26292                     idx = i + 1;
26293                     loc = projection.invert(p);
26294                 }
26295             }
26296
26297             if (idx !== undefined) {
26298                 return { index: idx, distance: min, loc: loc };
26299             } else {
26300                 return null;
26301             }
26302         }
26303
26304
26305         // Test active (dragged or drawing) segments against inactive segments
26306         // This is used to test e.g. multipolygon rings that cross
26307         // `activeNodes` is the ring containing the activeID being dragged.
26308         // `inactiveNodes` is the other ring to test against
26309         function geoHasLineIntersections(activeNodes, inactiveNodes, activeID) {
26310             var actives = [];
26311             var inactives = [];
26312             var j, k, n1, n2, segment;
26313
26314             // gather active segments (only segments in activeNodes that contain the activeID)
26315             for (j = 0; j < activeNodes.length - 1; j++) {
26316                 n1 = activeNodes[j];
26317                 n2 = activeNodes[j+1];
26318                 segment = [n1.loc, n2.loc];
26319                 if (n1.id === activeID || n2.id === activeID) {
26320                     actives.push(segment);
26321                 }
26322             }
26323
26324             // gather inactive segments
26325             for (j = 0; j < inactiveNodes.length - 1; j++) {
26326                 n1 = inactiveNodes[j];
26327                 n2 = inactiveNodes[j+1];
26328                 segment = [n1.loc, n2.loc];
26329                 inactives.push(segment);
26330             }
26331
26332             // test
26333             for (j = 0; j < actives.length; j++) {
26334                 for (k = 0; k < inactives.length; k++) {
26335                     var p = actives[j];
26336                     var q = inactives[k];
26337                     var hit = geoLineIntersection(p, q);
26338                     if (hit) {
26339                         return true;
26340                     }
26341                 }
26342             }
26343
26344             return false;
26345         }
26346
26347
26348         // Test active (dragged or drawing) segments against inactive segments
26349         // This is used to test whether a way intersects with itself.
26350         function geoHasSelfIntersections(nodes, activeID) {
26351             var actives = [];
26352             var inactives = [];
26353             var j, k;
26354
26355             // group active and passive segments along the nodes
26356             for (j = 0; j < nodes.length - 1; j++) {
26357                 var n1 = nodes[j];
26358                 var n2 = nodes[j+1];
26359                 var segment = [n1.loc, n2.loc];
26360                 if (n1.id === activeID || n2.id === activeID) {
26361                     actives.push(segment);
26362                 } else {
26363                     inactives.push(segment);
26364                 }
26365             }
26366
26367             // test
26368             for (j = 0; j < actives.length; j++) {
26369                 for (k = 0; k < inactives.length; k++) {
26370                     var p = actives[j];
26371                     var q = inactives[k];
26372                     // skip if segments share an endpoint
26373                     if (geoVecEqual(p[1], q[0]) || geoVecEqual(p[0], q[1]) ||
26374                         geoVecEqual(p[0], q[0]) || geoVecEqual(p[1], q[1]) ) {
26375                         continue;
26376                     }
26377
26378                     var hit = geoLineIntersection(p, q);
26379                     if (hit) {
26380                         var epsilon = 1e-8;
26381                         // skip if the hit is at the segment's endpoint
26382                         if (geoVecEqual(p[1], hit, epsilon) || geoVecEqual(p[0], hit, epsilon) ||
26383                             geoVecEqual(q[1], hit, epsilon) || geoVecEqual(q[0], hit, epsilon) ) {
26384                             continue;
26385                         } else {
26386                             return true;
26387                         }
26388                     }
26389                 }
26390             }
26391
26392             return false;
26393         }
26394
26395
26396         // Return the intersection point of 2 line segments.
26397         // From https://github.com/pgkelley4/line-segments-intersect
26398         // This uses the vector cross product approach described below:
26399         //  http://stackoverflow.com/a/565282/786339
26400         function geoLineIntersection(a, b) {
26401             var p = [a[0][0], a[0][1]];
26402             var p2 = [a[1][0], a[1][1]];
26403             var q = [b[0][0], b[0][1]];
26404             var q2 = [b[1][0], b[1][1]];
26405             var r = geoVecSubtract(p2, p);
26406             var s = geoVecSubtract(q2, q);
26407             var uNumerator = geoVecCross(geoVecSubtract(q, p), r);
26408             var denominator = geoVecCross(r, s);
26409
26410             if (uNumerator && denominator) {
26411                 var u = uNumerator / denominator;
26412                 var t = geoVecCross(geoVecSubtract(q, p), s) / denominator;
26413
26414                 if ((t >= 0) && (t <= 1) && (u >= 0) && (u <= 1)) {
26415                     return geoVecInterp(p, p2, t);
26416                 }
26417             }
26418
26419             return null;
26420         }
26421
26422
26423         function geoPathIntersections(path1, path2) {
26424             var intersections = [];
26425             for (var i = 0; i < path1.length - 1; i++) {
26426                 for (var j = 0; j < path2.length - 1; j++) {
26427                     var a = [ path1[i], path1[i+1] ];
26428                     var b = [ path2[j], path2[j+1] ];
26429                     var hit = geoLineIntersection(a, b);
26430                     if (hit) {
26431                         intersections.push(hit);
26432                     }
26433                 }
26434             }
26435             return intersections;
26436         }
26437
26438         function geoPathHasIntersections(path1, path2) {
26439             for (var i = 0; i < path1.length - 1; i++) {
26440                 for (var j = 0; j < path2.length - 1; j++) {
26441                     var a = [ path1[i], path1[i+1] ];
26442                     var b = [ path2[j], path2[j+1] ];
26443                     var hit = geoLineIntersection(a, b);
26444                     if (hit) {
26445                         return true;
26446                     }
26447                 }
26448             }
26449             return false;
26450         }
26451
26452
26453         // Return whether point is contained in polygon.
26454         //
26455         // `point` should be a 2-item array of coordinates.
26456         // `polygon` should be an array of 2-item arrays of coordinates.
26457         //
26458         // From https://github.com/substack/point-in-polygon.
26459         // ray-casting algorithm based on
26460         // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
26461         //
26462         function geoPointInPolygon(point, polygon) {
26463             var x = point[0];
26464             var y = point[1];
26465             var inside = false;
26466
26467             for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
26468                 var xi = polygon[i][0];
26469                 var yi = polygon[i][1];
26470                 var xj = polygon[j][0];
26471                 var yj = polygon[j][1];
26472
26473                 var intersect = ((yi > y) !== (yj > y)) &&
26474                     (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
26475                 if (intersect) { inside = !inside; }
26476             }
26477
26478             return inside;
26479         }
26480
26481
26482         function geoPolygonContainsPolygon(outer, inner) {
26483             return inner.every(function(point) {
26484                 return geoPointInPolygon(point, outer);
26485             });
26486         }
26487
26488
26489         function geoPolygonIntersectsPolygon(outer, inner, checkSegments) {
26490             function testPoints(outer, inner) {
26491                 return inner.some(function(point) {
26492                     return geoPointInPolygon(point, outer);
26493                 });
26494             }
26495
26496            return testPoints(outer, inner) || (!!checkSegments && geoPathHasIntersections(outer, inner));
26497         }
26498
26499
26500         // http://gis.stackexchange.com/questions/22895/finding-minimum-area-rectangle-for-given-points
26501         // http://gis.stackexchange.com/questions/3739/generalisation-strategies-for-building-outlines/3756#3756
26502         function geoGetSmallestSurroundingRectangle(points) {
26503             var hull = d3_polygonHull(points);
26504             var centroid = d3_polygonCentroid(hull);
26505             var minArea = Infinity;
26506             var ssrExtent = [];
26507             var ssrAngle = 0;
26508             var c1 = hull[0];
26509
26510             for (var i = 0; i <= hull.length - 1; i++) {
26511                 var c2 = (i === hull.length - 1) ? hull[0] : hull[i + 1];
26512                 var angle = Math.atan2(c2[1] - c1[1], c2[0] - c1[0]);
26513                 var poly = geoRotate(hull, -angle, centroid);
26514                 var extent = poly.reduce(function(extent, point) {
26515                     return extent.extend(geoExtent(point));
26516                 }, geoExtent());
26517
26518                 var area = extent.area();
26519                 if (area < minArea) {
26520                     minArea = area;
26521                     ssrExtent = extent;
26522                     ssrAngle = angle;
26523                 }
26524                 c1 = c2;
26525             }
26526
26527             return {
26528                 poly: geoRotate(ssrExtent.polygon(), ssrAngle, centroid),
26529                 angle: ssrAngle
26530             };
26531         }
26532
26533
26534         function geoPathLength(path) {
26535             var length = 0;
26536             for (var i = 0; i < path.length - 1; i++) {
26537                 length += geoVecLength(path[i], path[i + 1]);
26538             }
26539             return length;
26540         }
26541
26542
26543         // If the given point is at the edge of the padded viewport,
26544         // return a vector that will nudge the viewport in that direction
26545         function geoViewportEdge(point, dimensions) {
26546             var pad = [80, 20, 50, 20];   // top, right, bottom, left
26547             var x = 0;
26548             var y = 0;
26549
26550             if (point[0] > dimensions[0] - pad[1])
26551                 { x = -10; }
26552             if (point[0] < pad[3])
26553                 { x = 10; }
26554             if (point[1] > dimensions[1] - pad[2])
26555                 { y = -10; }
26556             if (point[1] < pad[0])
26557                 { y = 10; }
26558
26559             if (x || y) {
26560                 return [x, y];
26561             } else {
26562                 return null;
26563             }
26564         }
26565
26566         /*
26567             Bypasses features of D3's default projection stream pipeline that are unnecessary:
26568             * Antimeridian clipping
26569             * Spherical rotation
26570             * Resampling
26571         */
26572         function geoRawMercator() {
26573             var project = mercatorRaw;
26574             var k = 512 / Math.PI; // scale
26575             var x = 0;
26576             var y = 0; // translate
26577             var clipExtent = [[0, 0], [0, 0]];
26578
26579
26580             function projection(point) {
26581                 point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180);
26582                 return [point[0] * k + x, y - point[1] * k];
26583             }
26584
26585
26586             projection.invert = function(point) {
26587                 point = project.invert((point[0] - x) / k, (y - point[1]) / k);
26588                 return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI];
26589             };
26590
26591
26592             projection.scale = function(_) {
26593                 if (!arguments.length) { return k; }
26594                 k = +_;
26595                 return projection;
26596             };
26597
26598
26599             projection.translate = function(_) {
26600                 if (!arguments.length) { return [x, y]; }
26601                 x = +_[0];
26602                 y = +_[1];
26603                 return projection;
26604             };
26605
26606
26607             projection.clipExtent = function(_) {
26608                 if (!arguments.length) { return clipExtent; }
26609                 clipExtent = _;
26610                 return projection;
26611             };
26612
26613
26614             projection.transform = function(obj) {
26615                 if (!arguments.length) { return identity$8.translate(x, y).scale(k); }
26616                 x = +obj.x;
26617                 y = +obj.y;
26618                 k = +obj.k;
26619                 return projection;
26620             };
26621
26622
26623             projection.stream = d3_geoTransform({
26624                 point: function(x, y) {
26625                     var vec = projection([x, y]);
26626                     this.stream.point(vec[0], vec[1]);
26627                 }
26628             }).stream;
26629
26630
26631             return projection;
26632         }
26633
26634         function geoOrthoNormalizedDotProduct(a, b, origin) {
26635             if (geoVecEqual(origin, a) || geoVecEqual(origin, b)) {
26636                 return 1;  // coincident points, treat as straight and try to remove
26637             }
26638             return geoVecNormalizedDot(a, b, origin);
26639         }
26640
26641
26642         function geoOrthoFilterDotProduct(dotp, epsilon, lowerThreshold, upperThreshold, allowStraightAngles) {
26643             var val = Math.abs(dotp);
26644             if (val < epsilon) {
26645                 return 0;      // already orthogonal
26646             } else if (allowStraightAngles && Math.abs(val-1) < epsilon) {
26647                 return 0;      // straight angle, which is okay in this case
26648             } else if (val < lowerThreshold || val > upperThreshold) {
26649                 return dotp;   // can be adjusted
26650             } else {
26651                 return null;   // ignore vertex
26652             }
26653         }
26654
26655
26656         function geoOrthoCalcScore(points, isClosed, epsilon, threshold) {
26657             var score = 0;
26658             var first = isClosed ? 0 : 1;
26659             var last = isClosed ? points.length : points.length - 1;
26660             var coords = points.map(function(p) { return p.coord; });
26661
26662             var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
26663             var upperThreshold = Math.cos(threshold * Math.PI / 180);
26664
26665             for (var i = first; i < last; i++) {
26666                 var a = coords[(i - 1 + coords.length) % coords.length];
26667                 var origin = coords[i];
26668                 var b = coords[(i + 1) % coords.length];
26669
26670                 var dotp = geoOrthoFilterDotProduct(geoOrthoNormalizedDotProduct(a, b, origin), epsilon, lowerThreshold, upperThreshold);
26671                 if (dotp === null) { continue; }    // ignore vertex
26672                 score = score + 2.0 * Math.min(Math.abs(dotp - 1.0), Math.min(Math.abs(dotp), Math.abs(dotp + 1)));
26673             }
26674
26675             return score;
26676         }
26677
26678         // returns the maximum angle less than `lessThan` between the actual corner and a 0° or 90° corner
26679         function geoOrthoMaxOffsetAngle(coords, isClosed, lessThan) {
26680             var max = -Infinity;
26681
26682             var first = isClosed ? 0 : 1;
26683             var last = isClosed ? coords.length : coords.length - 1;
26684
26685             for (var i = first; i < last; i++) {
26686                 var a = coords[(i - 1 + coords.length) % coords.length];
26687                 var origin = coords[i];
26688                 var b = coords[(i + 1) % coords.length];
26689                 var normalizedDotP = geoOrthoNormalizedDotProduct(a, b, origin);
26690
26691                 var angle = Math.acos(Math.abs(normalizedDotP)) * 180 / Math.PI;
26692
26693                 if (angle > 45) { angle = 90 - angle; }
26694
26695                 if (angle >= lessThan) { continue; }
26696
26697                 if (angle > max) { max = angle; }
26698             }
26699
26700             if (max === -Infinity) { return null; }
26701
26702             return max;
26703         }
26704
26705
26706         // similar to geoOrthoCalcScore, but returns quickly if there is something to do
26707         function geoOrthoCanOrthogonalize(coords, isClosed, epsilon, threshold, allowStraightAngles) {
26708             var score = null;
26709             var first = isClosed ? 0 : 1;
26710             var last = isClosed ? coords.length : coords.length - 1;
26711
26712             var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
26713             var upperThreshold = Math.cos(threshold * Math.PI / 180);
26714
26715             for (var i = first; i < last; i++) {
26716                 var a = coords[(i - 1 + coords.length) % coords.length];
26717                 var origin = coords[i];
26718                 var b = coords[(i + 1) % coords.length];
26719
26720                 var dotp = geoOrthoFilterDotProduct(geoOrthoNormalizedDotProduct(a, b, origin), epsilon, lowerThreshold, upperThreshold, allowStraightAngles);
26721                 if (dotp === null) { continue; }        // ignore vertex
26722                 if (Math.abs(dotp) > 0) { return 1; }   // something to do
26723                 score = 0;                          // already square
26724             }
26725
26726             return score;
26727         }
26728
26729         var wikibooks = [["Afrikaans","Afrikaans","af"],["Arabic","العربية","ar"],["Azerbaijani","azərbaycanca","az"],["Belarusian","беларуская","be"],["Bulgarian","български","bg"],["Bangla","বাংলা","bn"],["Bosnian","bosanski","bs"],["Catalan","català","ca"],["Czech","čeština","cs"],["Chuvash","Чӑвашла","cv"],["Welsh","Cymraeg","cy"],["Danish","dansk","da"],["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Estonian","eesti","et"],["Basque","euskara","eu"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["French","français","fr"],["Western Frisian","Frysk","fy"],["Galician","galego","gl"],["Hebrew","עברית","he"],["Hindi","हिन्दी","hi"],["Croatian","hrvatski","hr"],["Hungarian","magyar","hu"],["Armenian","Հայերեն","hy"],["Interlingua","interlingua","ia"],["Indonesian","Bahasa Indonesia","id"],["Icelandic","íslenska","is"],["Italian","italiano","it"],["Japanese","日本語","ja"],["Georgian","ქართული","ka"],["Kazakh","қазақша","kk"],["Khmer","ភាសាខ្មែរ","km"],["Korean","한국어","ko"],["Kurdish","Kurdî","ku"],["Kyrgyz","Кыргызча","ky"],["Latin","Latina","la"],["Limburgish","Limburgs","li"],["Lithuanian","lietuvių","lt"],["Malagasy","Malagasy","mg"],["Macedonian","македонски","mk"],["Malayalam","മലയാളം","ml"],["Marathi","मराठी","mr"],["Malay","Bahasa Melayu","ms"],["Nepali","नेपाली","ne"],["Dutch","Nederlands","nl"],["Norwegian","norsk bokmål","no"],["Occitan","occitan","oc"],["Punjabi","ਪੰਜਾਬੀ","pa"],["Polish","polski","pl"],["Portuguese","português","pt"],["Romanian","română","ro"],["Russian","русский","ru"],["Sanskrit","संस्कृतम्","sa"],["Sinhala","සිංහල","si"],["Slovak","slovenčina","sk"],["Slovenian","slovenščina","sl"],["Albanian","shqip","sq"],["Serbian","српски / srpski","sr"],["Swedish","svenska","sv"],["Tamil","தமிழ்","ta"],["Telugu","తెలుగు","te"],["Tajik","тоҷикӣ","tg"],["Thai","ไทย","th"],["Tagalog","Tagalog","tl"],["Turkish","Türkçe","tr"],["Tatar","татарча/tatarça","tt"],["Ukrainian","українська","uk"],["Urdu","اردو","ur"],["Vietnamese","Tiếng Việt","vi"],["Chinese","中文","zh"]];
26730
26731         var wikibooks$1 = /*#__PURE__*/Object.freeze({
26732                 __proto__: null,
26733                 'default': wikibooks
26734         });
26735
26736         var wikinews = [["Arabic","العربية","ar"],["Bulgarian","български","bg"],["Bosnian","bosanski","bs"],["Catalan","català","ca"],["Czech","čeština","cs"],["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["French","français","fr"],["Hebrew","עברית","he"],["Italian","italiano","it"],["Japanese","日本語","ja"],["Korean","한국어","ko"],["Norwegian","norsk bokmål","no"],["Polish","polski","pl"],["Portuguese","português","pt"],["Romanian","română","ro"],["Russian","русский","ru"],["Albanian","shqip","sq"],["Serbian","српски / srpski","sr"],["Swedish","svenska","sv"],["Tamil","தமிழ்","ta"],["Turkish","Türkçe","tr"],["Ukrainian","українська","uk"],["Chinese","中文","zh"]];
26737
26738         var wikinews$1 = /*#__PURE__*/Object.freeze({
26739                 __proto__: null,
26740                 'default': wikinews
26741         });
26742
26743         var wikiquote = [["Afrikaans","Afrikaans","af"],["Arabic","العربية","ar"],["Azerbaijani","azərbaycanca","az"],["Belarusian","беларуская","be"],["Bulgarian","български","bg"],["Breton","brezhoneg","br"],["Bosnian","bosanski","bs"],["Catalan","català","ca"],["Czech","čeština","cs"],["Welsh","Cymraeg","cy"],["Danish","dansk","da"],["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Estonian","eesti","et"],["Basque","euskara","eu"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["French","français","fr"],["Galician","galego","gl"],["Gujarati","ગુજરાતી","gu"],["Hebrew","עברית","he"],["Hindi","हिन्दी","hi"],["Croatian","hrvatski","hr"],["Hungarian","magyar","hu"],["Armenian","Հայերեն","hy"],["Indonesian","Bahasa Indonesia","id"],["Icelandic","íslenska","is"],["Italian","italiano","it"],["Japanese","日本語","ja"],["Georgian","ქართული","ka"],["Kannada","ಕನ್ನಡ","kn"],["Korean","한국어","ko"],["Kurdish","Kurdî","ku"],["Kyrgyz","Кыргызча","ky"],["Latin","Latina","la"],["Limburgish","Limburgs","li"],["Lithuanian","lietuvių","lt"],["Malayalam","മലയാളം","ml"],["Marathi","मराठी","mr"],["Dutch","Nederlands","nl"],["Norwegian Nynorsk","norsk nynorsk","nn"],["Norwegian","norsk bokmål","no"],["Polish","polski","pl"],["Portuguese","português","pt"],["Romanian","română","ro"],["Russian","русский","ru"],["Sanskrit","संस्कृतम्","sa"],["Slovak","slovenčina","sk"],["Slovenian","slovenščina","sl"],["Albanian","shqip","sq"],["Serbian","српски / srpski","sr"],["Sundanese","Basa Sunda","su"],["Swedish","svenska","sv"],["Tamil","தமிழ்","ta"],["Telugu","తెలుగు","te"],["Thai","ไทย","th"],["Turkish","Türkçe","tr"],["Ukrainian","українська","uk"],["Urdu","اردو","ur"],["Uzbek","oʻzbekcha/ўзбекча","uz"],["Vietnamese","Tiếng Việt","vi"],["Wolof","Wolof","wo"],["Chinese","中文","zh"]];
26744
26745         var wikiquote$1 = /*#__PURE__*/Object.freeze({
26746                 __proto__: null,
26747                 'default': wikiquote
26748         });
26749
26750         var wikiversity = [["Arabic","العربية","ar"],["Czech","čeština","cs"],["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Spanish","español","es"],["Finnish","suomi","fi"],["French","français","fr"],["Italian","italiano","it"],["Japanese","日本語","ja"],["Korean","한국어","ko"],["Portuguese","português","pt"],["Russian","русский","ru"],["Slovenian","slovenščina","sl"],["Swedish","svenska","sv"]];
26751
26752         var wikiversity$1 = /*#__PURE__*/Object.freeze({
26753                 __proto__: null,
26754                 'default': wikiversity
26755         });
26756
26757         var wikivoyage = [["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Spanish","español","es"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["French","français","fr"],["Hebrew","עברית","he"],["Italian","italiano","it"],["Dutch","Nederlands","nl"],["Polish","polski","pl"],["Portuguese","português","pt"],["Romanian","română","ro"],["Russian","русский","ru"],["Swedish","svenska","sv"],["Ukrainian","українська","uk"],["Vietnamese","Tiếng Việt","vi"],["Chinese","中文","zh"]];
26758
26759         var wikivoyage$1 = /*#__PURE__*/Object.freeze({
26760                 __proto__: null,
26761                 'default': wikivoyage
26762         });
26763
26764         var wiktionary = [["Afrikaans","Afrikaans","af"],["Amharic","አማርኛ","am"],["Aragonese","aragonés","an"],["Old English","Ænglisc","ang"],["Arabic","العربية","ar"],["Asturian","asturianu","ast"],["Aymara","Aymar aru","ay"],["Azerbaijani","azərbaycanca","az"],["Belarusian","беларуская","be"],["Bulgarian","български","bg"],["Bangla","বাংলা","bn"],["Breton","brezhoneg","br"],["Bosnian","bosanski","bs"],["Catalan","català","ca"],["Cherokee","ᏣᎳᎩ","chr"],["Corsican","corsu","co"],["Czech","čeština","cs"],["Kashubian","kaszëbsczi","csb"],["Welsh","Cymraeg","cy"],["Danish","dansk","da"],["German","Deutsch","de"],["Divehi","ދިވެހިބަސް","dv"],["Greek","Ελληνικά","el"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Estonian","eesti","et"],["Basque","euskara","eu"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["Fijian","Na Vosa Vakaviti","fj"],["Faroese","føroyskt","fo"],["French","français","fr"],["Western Frisian","Frysk","fy"],["Irish","Gaeilge","ga"],["Scottish Gaelic","Gàidhlig","gd"],["Galician","galego","gl"],["Guarani","Avañe'ẽ","gn"],["Gujarati","ગુજરાતી","gu"],["Manx","Gaelg","gv"],["Hausa","Hausa","ha"],["Hebrew","עברית","he"],["Hindi","हिन्दी","hi"],["Croatian","hrvatski","hr"],["Upper Sorbian","hornjoserbsce","hsb"],["Hungarian","magyar","hu"],["Armenian","Հայերեն","hy"],["Interlingua","interlingua","ia"],["Indonesian","Bahasa Indonesia","id"],["Interlingue","Interlingue","ie"],["Ido","Ido","io"],["Icelandic","íslenska","is"],["Italian","italiano","it"],["Inuktitut","ᐃᓄᒃᑎᑐᑦ/inuktitut","iu"],["Japanese","日本語","ja"],["Lojban","la .lojban.","jbo"],["Javanese","Basa Jawa","jv"],["Georgian","ქართული","ka"],["Kazakh","қазақша","kk"],["Kalaallisut","kalaallisut","kl"],["Khmer","ភាសាខ្មែរ","km"],["Kannada","ಕನ್ನಡ","kn"],["Korean","한국어","ko"],["Kashmiri","कॉशुर / کٲشُر","ks"],["Kurdish","Kurdî","ku"],["Cornish","kernowek","kw"],["Kyrgyz","Кыргызча","ky"],["Latin","Latina","la"],["Luxembourgish","Lëtzebuergesch","lb"],["Limburgish","Limburgs","li"],["Lingala","lingála","ln"],["Lao","ລາວ","lo"],["Lithuanian","lietuvių","lt"],["Latvian","latviešu","lv"],["Malagasy","Malagasy","mg"],["Maori","Māori","mi"],["Macedonian","македонски","mk"],["Malayalam","മലയാളം","ml"],["Mongolian","монгол","mn"],["Marathi","मराठी","mr"],["Malay","Bahasa Melayu","ms"],["Maltese","Malti","mt"],["Burmese","မြန်မာဘာသာ","my"],["Nauru","Dorerin Naoero","na"],["Nāhuatl","Nāhuatl","nah"],["Low German","Plattdüütsch","nds"],["Nepali","नेपाली","ne"],["Dutch","Nederlands","nl"],["Norwegian Nynorsk","norsk nynorsk","nn"],["Norwegian","norsk bokmål","no"],["Occitan","occitan","oc"],["Oromo","Oromoo","om"],["Odia","ଓଡ଼ିଆ","or"],["Punjabi","ਪੰਜਾਬੀ","pa"],["Polish","polski","pl"],["Western Punjabi","پنجابی","pnb"],["Pashto","پښتو","ps"],["Portuguese","português","pt"],["Quechua","Runa Simi","qu"],["Romanian","română","ro"],["Aromanian","armãneashti","roa-rup"],["Russian","русский","ru"],["Kinyarwanda","Kinyarwanda","rw"],["Sanskrit","संस्कृतम्","sa"],["Sicilian","sicilianu","scn"],["Sindhi","سنڌي","sd"],["Sango","Sängö","sg"],["Serbo-Croatian","srpskohrvatski / српскохрватски","sh"],["Sinhala","සිංහල","si"],["Simple English","Simple English","simple"],["Slovak","slovenčina","sk"],["Slovenian","slovenščina","sl"],["Samoan","Gagana Samoa","sm"],["Somali","Soomaaliga","so"],["Albanian","shqip","sq"],["Serbian","српски / srpski","sr"],["Swati","SiSwati","ss"],["Southern Sotho","Sesotho","st"],["Sundanese","Basa Sunda","su"],["Swedish","svenska","sv"],["Swahili","Kiswahili","sw"],["Tamil","தமிழ்","ta"],["Telugu","తెలుగు","te"],["Tajik","тоҷикӣ","tg"],["Thai","ไทย","th"],["Tigrinya","ትግርኛ","ti"],["Turkmen","Türkmençe","tk"],["Tagalog","Tagalog","tl"],["Tswana","Setswana","tn"],["Tok Pisin","Tok Pisin","tpi"],["Turkish","Türkçe","tr"],["Tsonga","Xitsonga","ts"],["Tatar","татарча/tatarça","tt"],["Uyghur","ئۇيغۇرچە / Uyghurche","ug"],["Ukrainian","українська","uk"],["Urdu","اردو","ur"],["Uzbek","oʻzbekcha/ўзбекча","uz"],["Venetian","vèneto","vec"],["Vietnamese","Tiếng Việt","vi"],["Volapük","Volapük","vo"],["Walloon","walon","wa"],["Wolof","Wolof","wo"],["Yiddish","ייִדיש","yi"],["Chinese","中文","zh"],["Chinese (Min Nan)","Bân-lâm-gú","zh-min-nan"],["Zulu","isiZulu","zu"]];
26765
26766         var wiktionary$1 = /*#__PURE__*/Object.freeze({
26767                 __proto__: null,
26768                 'default': wiktionary
26769         });
26770
26771         var wikipedia = [["Abkhazian","Аҧсшәа","ab"],["Achinese","Acèh","ace"],["Adyghe","адыгабзэ","ady"],["Afrikaans","Afrikaans","af"],["Akan","Akan","ak"],["Alemannisch","Alemannisch","als"],["Amharic","አማርኛ","am"],["Aragonese","aragonés","an"],["Old English","Ænglisc","ang"],["Arabic","العربية","ar"],["Aramaic","ܐܪܡܝܐ","arc"],["Egyptian Arabic","مصرى","arz"],["Assamese","অসমীয়া","as"],["Asturian","asturianu","ast"],["Avaric","авар","av"],["Aymara","Aymar aru","ay"],["Azerbaijani","azərbaycanca","az"],["تۆرکجه","تۆرکجه","azb"],["Bashkir","башҡортса","ba"],["Bavarian","Boarisch","bar"],["Samogitian","žemaitėška","bat-smg"],["Bikol Central","Bikol Central","bcl"],["Belarusian","беларуская","be"],["беларуская (тарашкевіца)‎","беларуская (тарашкевіца)‎","be-x-old"],["Bulgarian","български","bg"],["भोजपुरी","भोजपुरी","bh"],["Bislama","Bislama","bi"],["Banjar","Bahasa Banjar","bjn"],["Bambara","bamanankan","bm"],["Bangla","বাংলা","bn"],["Tibetan","བོད་ཡིག","bo"],["Bishnupriya","বিষ্ণুপ্রিয়া মণিপুরী","bpy"],["Breton","brezhoneg","br"],["Bosnian","bosanski","bs"],["Buginese","ᨅᨔ ᨕᨘᨁᨗ","bug"],["буряад","буряад","bxr"],["Catalan","català","ca"],["Chavacano de Zamboanga","Chavacano de Zamboanga","cbk-zam"],["Min Dong Chinese","Mìng-dĕ̤ng-ngṳ̄","cdo"],["Chechen","нохчийн","ce"],["Cebuano","Cebuano","ceb"],["Chamorro","Chamoru","ch"],["Cherokee","ᏣᎳᎩ","chr"],["Cheyenne","Tsetsêhestâhese","chy"],["Central Kurdish","کوردیی ناوەندی","ckb"],["Corsican","corsu","co"],["Cree","Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ","cr"],["Crimean Turkish","qırımtatarca","crh"],["Czech","čeština","cs"],["Kashubian","kaszëbsczi","csb"],["Church Slavic","словѣньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ","cu"],["Chuvash","Чӑвашла","cv"],["Welsh","Cymraeg","cy"],["Danish","dansk","da"],["German","Deutsch","de"],["Zazaki","Zazaki","diq"],["Lower Sorbian","dolnoserbski","dsb"],["Divehi","ދިވެހިބަސް","dv"],["Dzongkha","ཇོང་ཁ","dz"],["Ewe","eʋegbe","ee"],["Greek","Ελληνικά","el"],["Emiliano-Romagnolo","emiliàn e rumagnòl","eml"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Estonian","eesti","et"],["Basque","euskara","eu"],["Extremaduran","estremeñu","ext"],["Persian","فارسی","fa"],["Fulah","Fulfulde","ff"],["Finnish","suomi","fi"],["Võro","Võro","fiu-vro"],["Fijian","Na Vosa Vakaviti","fj"],["Faroese","føroyskt","fo"],["French","français","fr"],["Arpitan","arpetan","frp"],["Northern Frisian","Nordfriisk","frr"],["Friulian","furlan","fur"],["Western Frisian","Frysk","fy"],["Irish","Gaeilge","ga"],["Gagauz","Gagauz","gag"],["Gan Chinese","贛語","gan"],["Scottish Gaelic","Gàidhlig","gd"],["Galician","galego","gl"],["Gilaki","گیلکی","glk"],["Guarani","Avañe'ẽ","gn"],["Goan Konkani","गोंयची कोंकणी / Gõychi Konknni","gom"],["Gothic","𐌲𐌿𐍄𐌹𐍃𐌺","got"],["Gujarati","ગુજરાતી","gu"],["Manx","Gaelg","gv"],["Hausa","Hausa","ha"],["Hakka Chinese","客家語/Hak-kâ-ngî","hak"],["Hawaiian","Hawaiʻi","haw"],["Hebrew","עברית","he"],["Hindi","हिन्दी","hi"],["Fiji Hindi","Fiji Hindi","hif"],["Croatian","hrvatski","hr"],["Upper Sorbian","hornjoserbsce","hsb"],["Haitian Creole","Kreyòl ayisyen","ht"],["Hungarian","magyar","hu"],["Armenian","Հայերեն","hy"],["Interlingua","interlingua","ia"],["Indonesian","Bahasa Indonesia","id"],["Interlingue","Interlingue","ie"],["Igbo","Igbo","ig"],["Inupiaq","Iñupiak","ik"],["Iloko","Ilokano","ilo"],["Ido","Ido","io"],["Icelandic","íslenska","is"],["Italian","italiano","it"],["Inuktitut","ᐃᓄᒃᑎᑐᑦ/inuktitut","iu"],["Japanese","日本語","ja"],["Jamaican Creole English","Patois","jam"],["Lojban","la .lojban.","jbo"],["Javanese","Basa Jawa","jv"],["Georgian","ქართული","ka"],["Kara-Kalpak","Qaraqalpaqsha","kaa"],["Kabyle","Taqbaylit","kab"],["Kabardian","Адыгэбзэ","kbd"],["Kongo","Kongo","kg"],["Kikuyu","Gĩkũyũ","ki"],["Kazakh","қазақша","kk"],["Kalaallisut","kalaallisut","kl"],["Khmer","ភាសាខ្មែរ","km"],["Kannada","ಕನ್ನಡ","kn"],["Korean","한국어","ko"],["Komi-Permyak","Перем Коми","koi"],["Karachay-Balkar","къарачай-малкъар","krc"],["Kashmiri","कॉशुर / کٲشُر","ks"],["Colognian","Ripoarisch","ksh"],["Kurdish","Kurdî","ku"],["Komi","коми","kv"],["Cornish","kernowek","kw"],["Kyrgyz","Кыргызча","ky"],["Latin","Latina","la"],["Ladino","Ladino","lad"],["Luxembourgish","Lëtzebuergesch","lb"],["лакку","лакку","lbe"],["Lezghian","лезги","lez"],["Ganda","Luganda","lg"],["Limburgish","Limburgs","li"],["Ligurian","Ligure","lij"],["Lombard","lumbaart","lmo"],["Lingala","lingála","ln"],["Lao","ລາວ","lo"],["Northern Luri","لۊری شومالی","lrc"],["Lithuanian","lietuvių","lt"],["Latgalian","latgaļu","ltg"],["Latvian","latviešu","lv"],["Maithili","मैथिली","mai"],["Basa Banyumasan","Basa Banyumasan","map-bms"],["Moksha","мокшень","mdf"],["Malagasy","Malagasy","mg"],["Eastern Mari","олык марий","mhr"],["Maori","Māori","mi"],["Minangkabau","Baso Minangkabau","min"],["Macedonian","македонски","mk"],["Malayalam","മലയാളം","ml"],["Mongolian","монгол","mn"],["Marathi","मराठी","mr"],["Western Mari","кырык мары","mrj"],["Malay","Bahasa Melayu","ms"],["Maltese","Malti","mt"],["Mirandese","Mirandés","mwl"],["Burmese","မြန်မာဘာသာ","my"],["Erzya","эрзянь","myv"],["Mazanderani","مازِرونی","mzn"],["Nauru","Dorerin Naoero","na"],["Nāhuatl","Nāhuatl","nah"],["Neapolitan","Napulitano","nap"],["Low German","Plattdüütsch","nds"],["Low Saxon","Nedersaksies","nds-nl"],["Nepali","नेपाली","ne"],["Newari","नेपाल भाषा","new"],["Dutch","Nederlands","nl"],["Norwegian Nynorsk","norsk nynorsk","nn"],["Norwegian","norsk bokmål","no"],["Novial","Novial","nov"],["Nouormand","Nouormand","nrm"],["Northern Sotho","Sesotho sa Leboa","nso"],["Navajo","Diné bizaad","nv"],["Nyanja","Chi-Chewa","ny"],["Occitan","occitan","oc"],["Livvi-Karelian","Livvinkarjala","olo"],["Oromo","Oromoo","om"],["Odia","ଓଡ଼ିଆ","or"],["Ossetic","Ирон","os"],["Punjabi","ਪੰਜਾਬੀ","pa"],["Pangasinan","Pangasinan","pag"],["Pampanga","Kapampangan","pam"],["Papiamento","Papiamentu","pap"],["Picard","Picard","pcd"],["Pennsylvania German","Deitsch","pdc"],["Palatine German","Pälzisch","pfl"],["Pali","पालि","pi"],["Norfuk / Pitkern","Norfuk / Pitkern","pih"],["Polish","polski","pl"],["Piedmontese","Piemontèis","pms"],["Western Punjabi","پنجابی","pnb"],["Pontic","Ποντιακά","pnt"],["Pashto","پښتو","ps"],["Portuguese","português","pt"],["Quechua","Runa Simi","qu"],["Romansh","rumantsch","rm"],["Romani","Romani","rmy"],["Rundi","Kirundi","rn"],["Romanian","română","ro"],["Aromanian","armãneashti","roa-rup"],["tarandíne","tarandíne","roa-tara"],["Russian","русский","ru"],["Rusyn","русиньскый","rue"],["Kinyarwanda","Kinyarwanda","rw"],["Sanskrit","संस्कृतम्","sa"],["Sakha","саха тыла","sah"],["Sardinian","sardu","sc"],["Sicilian","sicilianu","scn"],["Scots","Scots","sco"],["Sindhi","سنڌي","sd"],["Northern Sami","sámegiella","se"],["Sango","Sängö","sg"],["Serbo-Croatian","srpskohrvatski / српскохрватски","sh"],["Sinhala","සිංහල","si"],["Simple English","Simple English","simple"],["Slovak","slovenčina","sk"],["Slovenian","slovenščina","sl"],["Samoan","Gagana Samoa","sm"],["Shona","chiShona","sn"],["Somali","Soomaaliga","so"],["Albanian","shqip","sq"],["Serbian","српски / srpski","sr"],["Sranan Tongo","Sranantongo","srn"],["Swati","SiSwati","ss"],["Southern Sotho","Sesotho","st"],["Saterland Frisian","Seeltersk","stq"],["Sundanese","Basa Sunda","su"],["Swedish","svenska","sv"],["Swahili","Kiswahili","sw"],["Silesian","ślůnski","szl"],["Tamil","தமிழ்","ta"],["Tulu","ತುಳು","tcy"],["Telugu","తెలుగు","te"],["Tetum","tetun","tet"],["Tajik","тоҷикӣ","tg"],["Thai","ไทย","th"],["Tigrinya","ትግርኛ","ti"],["Turkmen","Türkmençe","tk"],["Tagalog","Tagalog","tl"],["Tswana","Setswana","tn"],["Tongan","lea faka-Tonga","to"],["Tok Pisin","Tok Pisin","tpi"],["Turkish","Türkçe","tr"],["Tsonga","Xitsonga","ts"],["Tatar","татарча/tatarça","tt"],["Tumbuka","chiTumbuka","tum"],["Twi","Twi","tw"],["Tahitian","reo tahiti","ty"],["Tuvinian","тыва дыл","tyv"],["Udmurt","удмурт","udm"],["Uyghur","ئۇيغۇرچە / Uyghurche","ug"],["Ukrainian","українська","uk"],["Urdu","اردو","ur"],["Uzbek","oʻzbekcha/ўзбекча","uz"],["Venda","Tshivenda","ve"],["Venetian","vèneto","vec"],["Veps","vepsän kel’","vep"],["Vietnamese","Tiếng Việt","vi"],["West Flemish","West-Vlams","vls"],["Volapük","Volapük","vo"],["Walloon","walon","wa"],["Waray","Winaray","war"],["Wolof","Wolof","wo"],["Wu Chinese","吴语","wuu"],["Kalmyk","хальмг","xal"],["Xhosa","isiXhosa","xh"],["Mingrelian","მარგალური","xmf"],["Yiddish","ייִדיש","yi"],["Yoruba","Yorùbá","yo"],["Zhuang","Vahcuengh","za"],["Zeelandic","Zeêuws","zea"],["Chinese","中文","zh"],["Classical Chinese","文言","zh-classical"],["Chinese (Min Nan)","Bân-lâm-gú","zh-min-nan"],["Cantonese","粵語","zh-yue"],["Zulu","isiZulu","zu"]];
26772
26773         var wikipedia$1 = /*#__PURE__*/Object.freeze({
26774                 __proto__: null,
26775                 'default': wikipedia
26776         });
26777
26778         var wikisource = [["Arabic","العربية","ar"],["Assamese","অসমীয়া","as"],["Azerbaijani","azərbaycanca","az"],["Belarusian","беларуская","be"],["Bulgarian","български","bg"],["Bangla","বাংলা","bn"],["Breton","brezhoneg","br"],["Bosnian","bosanski","bs"],["Catalan","català","ca"],["Czech","čeština","cs"],["Welsh","Cymraeg","cy"],["Danish","dansk","da"],["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Estonian","eesti","et"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["Faroese","føroyskt","fo"],["French","français","fr"],["Galician","galego","gl"],["Gujarati","ગુજરાતી","gu"],["Hebrew","עברית","he"],["Croatian","hrvatski","hr"],["Hungarian","magyar","hu"],["Armenian","Հայերեն","hy"],["Indonesian","Bahasa Indonesia","id"],["Icelandic","íslenska","is"],["Italian","italiano","it"],["Japanese","日本語","ja"],["Kannada","ಕನ್ನಡ","kn"],["Korean","한국어","ko"],["Latin","Latina","la"],["Limburgish","Limburgs","li"],["Lithuanian","lietuvių","lt"],["Macedonian","македонски","mk"],["Malayalam","മലയാളം","ml"],["Marathi","मराठी","mr"],["Dutch","Nederlands","nl"],["Norwegian","norsk bokmål","no"],["Odia","ଓଡ଼ିଆ","or"],["Punjabi","ਪੰਜਾਬੀ","pa"],["Polish","polski","pl"],["Portuguese","português","pt"],["Romanian","română","ro"],["Russian","русский","ru"],["Sanskrit","संस्कृतम्","sa"],["Sakha","саха тыла","sah"],["Slovak","slovenčina","sk"],["Slovenian","slovenščina","sl"],["Serbian","српски / srpski","sr"],["Swedish","svenska","sv"],["Tamil","தமிழ்","ta"],["Telugu","తెలుగు","te"],["Thai","ไทย","th"],["Turkish","Türkçe","tr"],["Ukrainian","українська","uk"],["Venetian","vèneto","vec"],["Vietnamese","Tiếng Việt","vi"],["Yiddish","ייִדיש","yi"],["Chinese","中文","zh"],["Chinese (Min Nan)","Bân-lâm-gú","zh-min-nan"]];
26779
26780         var wikisource$1 = /*#__PURE__*/Object.freeze({
26781                 __proto__: null,
26782                 'default': wikisource
26783         });
26784
26785         getCjsExportFromNamespace(wikibooks$1);
26786
26787         getCjsExportFromNamespace(wikinews$1);
26788
26789         getCjsExportFromNamespace(wikiquote$1);
26790
26791         getCjsExportFromNamespace(wikiversity$1);
26792
26793         getCjsExportFromNamespace(wikivoyage$1);
26794
26795         getCjsExportFromNamespace(wiktionary$1);
26796
26797         var require$$6 = getCjsExportFromNamespace(wikipedia$1);
26798
26799         getCjsExportFromNamespace(wikisource$1);
26800
26801         var wikipedia$2 = require$$6;
26802
26803         var dataAddressFormats = [{format:[["housenumber","street"],["city","postcode"]]},{countryCodes:["au"],format:[["unit","housenumber","street"],["suburb","state","postcode"]]},{countryCodes:["gb"],format:[["housename"],["housenumber","street"],["city","postcode"]]},{countryCodes:["ie"],format:[["housename"],["housenumber","street"],["city"],["postcode"]]},{countryCodes:["at","ch","de","si","pl"],format:[["street","housenumber"],["postcode","city"]]},{countryCodes:["ad","ba","be","cz","dk","es","fi","gr","hr","is","it","li","nl","no","pt","se","sk","sm","va"],format:[["street","housenumber","unit"],["postcode","city"]]},{countryCodes:["fr","lu","mo"],format:[["housenumber","street"],["postcode","city"]]},{countryCodes:["br"],format:[["street"],["housenumber","suburb"],["city","postcode"]]},{countryCodes:["vn"],format:[["housenumber","street"],["subdistrict"],["district"],["city"],["province","postcode"]]},{countryCodes:["ca"],format:[["housenumber","street","unit"],["city","province","postcode"]]},{countryCodes:["us"],format:[["housenumber","street","unit"],["city","state","postcode"]]},{countryCodes:["tw"],format:[["postcode","city","district"],["place","street"],["housenumber","floor","unit"]]},{countryCodes:["jp"],format:[["postcode","province","county"],["city","suburb"],["quarter","neighbourhood"],["block_number","housenumber"]],dropdowns:["postcode","province","county","city","suburb","quarter","neighbourhood","block_number"],widths:{postcode:0.3,province:0.35,county:0.35,city:0.65,suburb:0.35,quarter:0.5,neighbourhood:0.5,block_number:0.5,housenumber:0.5}},{countryCodes:["tr"],format:[["neighbourhood"],["street","housenumber"],["postcode","district","city"]]},{countryCodes:["ua"],format:[["housenumber","postcode"],["street"]]},{countryCodes:["cn"],format:[["postcode","province"],["city","district"],["street","housenumber"]],widths:{postcode:0.3,province:0.7,city:0.5,district:0.5,street:0.7,housenumber:0.3}},{countryCodes:["bo"],format:[["street","housenumber"],["neighbourhood","city"]],widths:{street:0.7,housenumber:0.3,neighbourhood:0.5,city:0.5}},{countryCodes:["pe"],format:[["street","housenumber"],["neighbourhood"],["city","state","postcode"]],dropdowns:["street","neighbourhood","city","state","postcode"],widths:{street:0.7,housenumber:0.3,city:0.4,state:0.4,postcode:0.2}}];
26804
26805         var dataDeprecated = [{old:{aerialway:"canopy"},replace:{aerialway:"zip_line"}},{old:{aeroway:"aerobridge"},replace:{aeroway:"jet_bridge",highway:"corridor"}},{old:{access:"public"},replace:{access:"yes"}},{old:{agrarian:"agrcultural_machinry"},replace:{agrarian:"agricultural_machinery"}},{old:{amenity:"advertising"},replace:{advertising:"*"}},{old:{amenity:"artwork"},replace:{tourism:"artwork"}},{old:{amenity:"bail_bonds"},replace:{office:"bail_bond_agent"}},{old:{amenity:"car_repair"},replace:{shop:"car_repair"}},{old:{amenity:"changing_room"},replace:{amenity:"dressing_room"}},{old:{amenity:"citymap_post"},replace:{tourism:"information"}},{old:{amenity:"club"},replace:{club:"*"}},{old:{amenity:"community_center"},replace:{amenity:"community_centre"}},{old:{amenity:"dancing_school"},replace:{leisure:"dance","dance:teaching":"yes"}},{old:{amenity:"dog_bin"},replace:{amenity:"waste_basket",waste:"dog_excrement"}},{old:{amenity:"dog_waste_bin"},replace:{amenity:"waste_basket",waste:"dog_excrement"}},{old:{amenity:"embassy"},replace:{office:"diplomatic"}},{old:{amenity:"ev_charging"},replace:{amenity:"charging_station"}},{old:{amenity:"fire_hydrant"},replace:{emergency:"fire_hydrant"}},{old:{amenity:"firepit"},replace:{leisure:"firepit"}},{old:{amenity:"garage"},replace:{landuse:"garages"}},{old:{amenity:"garages"},replace:{landuse:"garages"}},{old:{amenity:"gym"},replace:{leisure:"fitness_centre"}},{old:{amenity:"hotel"},replace:{tourism:"hotel"}},{old:{amenity:"kiosk"},replace:{shop:"kiosk"}},{old:{amenity:"nursery"},replace:{amenity:"kindergarten"}},{old:{amenity:"preschool"},replace:{amenity:"kindergarten",preschool:"yes"}},{old:{amenity:"public_building"},replace:{building:"public"}},{old:{amenity:"real_estate"},replace:{office:"estate_agent"}},{old:{amenity:"register_office"},replace:{office:"government",government:"register_office"}},{old:{amenity:"research_institution"},replace:{amenity:"research_institute"}},{old:{amenity:"sauna"},replace:{leisure:"sauna"}},{old:{amenity:"scrapyard"},replace:{landuse:"industrial",industrial:"scrap_yard"}},{old:{amenity:"shop"},replace:{shop:"*"}},{old:{amenity:"sloped_curb"},replace:{kerb:"lowered"}},{old:{amenity:"swimming_pool"},replace:{leisure:"swimming_pool"}},{old:{amenity:"ticket_booth"},replace:{shop:"ticket"}},{old:{amenity:"toilet"},replace:{amenity:"toilets"}},{old:{amenity:"vending_machine",vending:"news_papers"},replace:{amenity:"vending_machine",vending:"newspapers"}},{old:{amenity:"weigh_bridge"},replace:{amenity:"weighbridge"}},{old:{amenity:"winery"},replace:{craft:"winery"}},{old:{amenity:"youth_center"},replace:{amenity:"community_centre","community_centre:for":"juvenile"}},{old:{amenity:"youth_centre"},replace:{amenity:"community_centre","community_centre:for":"juvenile"}},{old:{artwork:"*"},replace:{artwork_type:"$1"}},{old:{"artwork:type":"*"},replace:{artwork_type:"$1"}},{old:{attraction:"ferris_wheel"},replace:{attraction:"big_wheel"}},{old:{barrier:"curb"},replace:{barrier:"kerb"}},{old:{barrier:"embankment"},replace:{man_made:"embankment"}},{old:{barrier:"railing"},replace:{barrier:"fence",fence_type:"railing"}},{old:{barrier:"wall",type:"noise_barrier"},replace:{barrier:"wall",wall:"noise_barrier"}},{old:{barrier:"wire_fence"},replace:{barrier:"fence",fence_type:"wire"}},{old:{barrier:"wood_fence"},replace:{barrier:"fence",fence_type:"wood"}},{old:{building:"entrance"},replace:{entrance:"*"}},{old:{building:"family_house"},replace:{building:"house"}},{old:{building:"home"},replace:{building:"house"}},{old:{building:"household"},replace:{building:"house"}},{old:{"building:color":"*"},replace:{"building:colour":"$1"}},{old:{"building:roof:colour":"*"},replace:{"roof:colour":"$1"}},{old:{"building:type":"*"},replace:{building:"$1"}},{old:{camp_site:"camp_pitch"},replace:{tourism:"camp_pitch"}},{old:{shop:"clothes",clothes:"second_hand"},replace:{shop:"clothes",second_hand:"yes"}},{old:{color:"*"},replace:{colour:"$1"}},{old:{company:"consulting"},replace:{office:"consulting"}},{old:{craft:"catering"},replace:{craft:"caterer"}},{old:{craft:"glass"},replace:{craft:"glaziery"}},{old:{craft:"jeweler"},replace:{shop:"jewelry"}},{old:{craft:"optician"},replace:{shop:"optician"}},{old:{craft:"sculpter"},replace:{craft:"sculptor"}},{old:{crossing:"island"},replace:{"crossing:island":"yes"}},{old:{cuisine:"gluten-free"},replace:{"diet:gluten_free":"*"}},{old:{cuisine:"halal"},replace:{"diet:halal":"*"}},{old:{cuisine:"kosher"},replace:{"diet:kosher":"*"}},{old:{cuisine:"vegan"},replace:{"diet:vegan":"*"}},{old:{cuisine:"vegetarian"},replace:{"diet:vegetarian":"*"}},{old:{curb:"*"},replace:{kerb:"$1"}},{old:{diaper:"1"},replace:{changing_table:"yes","changing_table:count":"1"}},{old:{diaper:"no"},replace:{changing_table:"no"}},{old:{diaper:"room"},replace:{changing_table:"yes","changing_table:location":"room"}},{old:{diaper:"yes"},replace:{changing_table:"yes"}},{old:{direction:"all"},replace:{direction:"both"}},{old:{direction:"down",highway:"*"},replace:{incline:"down",highway:"$1"}},{old:{direction:"downhill"},replace:{incline:"down"}},{old:{direction:"East"},replace:{direction:"E"}},{old:{direction:"forward;backward"},replace:{direction:"both"}},{old:{direction:"North"},replace:{direction:"N"}},{old:{direction:"South"},replace:{direction:"S"}},{old:{direction:"up",highway:"*"},replace:{incline:"up",highway:"$1"}},{old:{direction:"uphill"},replace:{incline:"up"}},{old:{direction:"West"},replace:{direction:"W"}},{old:{drinkable:"*"},replace:{drinking_water:"$1"}},{old:{dropped_kerb:"*"},replace:{kerb:"lowered"}},{old:{embankment:"1"},replace:{embankment:"yes"}},{old:{embankment:"false"},replace:{embankment:"no"}},{old:{embankment:"right",man_made:"embankment"},replace:{man_made:"embankment"}},{old:{embankment:"true"},replace:{embankment:"yes"}},{old:{entrance:"emergency_exit"},replace:{entrance:"emergency"}},{old:{entrance:"fire_exit"},replace:{entrance:"emergency"}},{old:{entrance:"loading_dock"},replace:{amenity:"loading_dock"}},{old:{entrance:"main_entrance"},replace:{entrance:"main"}},{old:{entrance:"private"},replace:{entrance:"yes",access:"private"}},{old:{escalator:"*"},replace:{highway:"steps",conveying:"$1"}},{old:{fee:"0"},replace:{fee:"no"}},{old:{fee:"free"},replace:{fee:"no"}},{old:{fee:"Free"},replace:{fee:"no"}},{old:{fee:"No"},replace:{fee:"no"}},{old:{fee:"none"},replace:{fee:"no"}},{old:{fee:"some"},replace:{fee:"yes"}},{old:{fee:"Yes"},replace:{fee:"yes"}},{old:{fenced:"yes"},replace:{barrier:"fence"}},{old:{FIXME:"*"},replace:{fixme:"$1"}},{old:{footway:"both"},replace:{sidewalk:"both"}},{old:{footway:"crossing",highway:"cycleway"},replace:{cycleway:"crossing",highway:"cycleway"}},{old:{footway:"left"},replace:{sidewalk:"left"}},{old:{footway:"no"},replace:{sidewalk:"no"}},{old:{footway:"none"},replace:{sidewalk:"no"}},{old:{footway:"right"},replace:{sidewalk:"right"}},{old:{footway:"separate"},replace:{sidewalk:"separate"}},{old:{amenity:"gambling",gambling:"casino"},replace:{amenity:"casino"}},{old:{leisure:"amusement_arcade",gambling:"*"},replace:{leisure:"adult_gaming_centre",gambling:"$1"}},{old:{gambling:"slot_machine"},replace:{gambling:"slot_machines"}},{old:{"generator:source":"photovoltaic"},replace:{"generator:source":"solar","generator:method":"photovoltaic"}},{old:{golf:"faiway"},replace:{golf:"fairway",landuse:"grass"}},{old:{golf:"putting_green"},replace:{golf:"green",landuse:"grass"}},{old:{golf:"sand_trap"},replace:{golf:"bunker",natural:"sand"}},{old:{golf:"tee_area"},replace:{golf:"tee",landuse:"grass"}},{old:{golf:"tee_box"},replace:{golf:"tee",landuse:"grass"}},{old:{golf:"teebox"},replace:{golf:"tee",landuse:"grass"}},{old:{highway:"abandoned"},replace:{"abandoned:highway":"*"}},{old:{highway:"bridleway",horse:"no"},replace:{highway:"path",horse:"no"}},{old:{highway:"cycleway",bicycle:"no"},replace:{highway:"path",bicycle:"no"}},{old:{highway:"cycleway",cycleway:"track"},replace:{highway:"cycleway"}},{old:{highway:"footway",foot:"no"},replace:{highway:"path",foot:"no"}},{old:{highway:"ford"},replace:{ford:"*"}},{old:{highway:"no"}},{old:{highway:"platform"},replace:{highway:"platform",public_transport:"platform"}},{old:{highway:"stile"},replace:{barrier:"stile"}},{old:{highway:"unsurfaced"},replace:{highway:"road",surface:"unpaved"}},{old:{internet_access:"public"},replace:{internet_access:"yes","internet_access:fee":"no"}},{old:{internet_access:"wifi"},replace:{internet_access:"wlan"}},{old:{"internet_access:fee":"0"},replace:{"internet_access:fee":"no"}},{old:{"internet_access:fee":"free"},replace:{"internet_access:fee":"no"}},{old:{"internet_access:fee":"Free"},replace:{"internet_access:fee":"no"}},{old:{"internet_access:fee":"No"},replace:{"internet_access:fee":"no"}},{old:{"internet_access:name":"*"},replace:{"internet_access:ssid":"$1"}},{old:{"internet_access:type":"*"},replace:{internet_access:"$1"}},{old:{kerb:"dropped"},replace:{kerb:"lowered"}},{old:{kerb:"flat"},replace:{kerb:"flush"}},{old:{landuse:"basin"},replace:{natural:"water",water:"basin"}},{old:{landuse:"conservation"},replace:{boundary:"protected_area"}},{old:{landuse:"farm"},replace:{landuse:"farmland"}},{old:{landuse:"field"},replace:{landuse:"farmland"}},{old:{landuse:"garden"},replace:{leisure:"garden"}},{old:{landuse:"pond"},replace:{natural:"water",water:"pond"}},{old:{landuse:"port"},replace:{landuse:"industrial",industrial:"port"}},{old:{landuse:"reservoir"},replace:{natural:"water",water:"reservoir"}},{old:{landuse:"wood"},replace:{natural:"wood"}},{old:{lawyer:"notary"},replace:{office:"notary"}},{old:{leisure:"beach"},replace:{natural:"beach"}},{old:{leisure:"bingo"},replace:{amenity:"gambling",gambling:"bingo"}},{old:{leisure:"club"},replace:{club:"*"}},{old:{leisure:"gambling"},replace:{amenity:"gambling"}},{old:{leisure:"golf_pin"},replace:{golf:"pin"}},{old:{leisure:"ice_rink",sport:"hockey"},replace:{leisure:"ice_rink",sport:"ice_hockey"}},{old:{leisure:"ice_rink",sport:"skating"},replace:{leisure:"ice_rink",sport:"ice_skating"}},{old:{leisure:"recreation_ground"},replace:{landuse:"recreation_ground"}},{old:{leisure:"video_arcade"},replace:{leisure:"amusement_arcade"}},{old:{Level:"*"},replace:{level:"$1"}},{old:{LEVEL:"*"},replace:{level:"$1"}},{old:{levels:"*"},replace:{"building:levels":"$1"}},{old:{LEVELS:"*"},replace:{"building:levels":"$1"}},{old:{levels_count:"*"},replace:{"building:levels":"$1"}},{old:{man_made:"cut_line"},replace:{man_made:"cutline"}},{old:{man_made:"gas_well"},replace:{man_made:"petroleum_well",substance:"gas"}},{old:{man_made:"jetty"},replace:{man_made:"pier"}},{old:{man_made:"mdf"},replace:{telecom:"exchange"}},{old:{man_made:"MDF"},replace:{telecom:"exchange"}},{old:{man_made:"fuel_storage_tank"},replace:{man_made:"storage_tank",content:"fuel"}},{old:{man_made:"oil_tank"},replace:{man_made:"storage_tank",content:"oil"}},{old:{man_made:"oil_well"},replace:{man_made:"petroleum_well",substance:"oil"}},{old:{man_made:"village_pump"},replace:{man_made:"water_well"}},{old:{man_made:"wastewater_tank"},replace:{man_made:"storage_tank",content:"wastewater"}},{old:{man_made:"water_tank"},replace:{man_made:"storage_tank",content:"water"}},{old:{man_made:"weigh_bridge"},replace:{amenity:"weighbridge"}},{old:{man_made:"weighbridge"},replace:{amenity:"weighbridge"}},{old:{man_made:"weighing_machine"},replace:{amenity:"weighbridge"}},{old:{man_made:"weighing_scale"},replace:{amenity:"weighbridge"}},{old:{man_made:"weighting machine"},replace:{amenity:"weighbridge"}},{old:{man_made:"weighting_machine"},replace:{amenity:"weighbridge"}},{old:{man_made:"well"},replace:{man_made:"water_well"}},{old:{man_made:"winery"},replace:{craft:"winery"}},{old:{maxage:"*"},replace:{max_age:"$1"}},{old:{memorial:"plate"},replace:{memorial:"plaque"}},{old:{men:"*"},replace:{male:"$1"}},{old:{minage:"*"},replace:{min_age:"$1"}},{old:{mining_resource:"*"},replace:{resource:"$1"}},{old:{museum_type:"history"},replace:{museum:"history"}},{old:{museum_type:"private"},replace:{"operator:type":"private"}},{old:{museum_type:"public"},replace:{"operator:type":"public"}},{old:{natural:"marsh"},replace:{natural:"wetland",wetland:"marsh"}},{old:{natural:"waterfall"},replace:{waterway:"waterfall"}},{old:{NOTE:"*"},replace:{note:"$1"}},{old:{nosquare:"*"},replace:{nonsquare:"$1"}},{old:{office:"administrative"},replace:{office:"government"}},{old:{office:"consultancy"},replace:{office:"consulting"}},{old:{office:"consultant"},replace:{office:"consulting"}},{old:{office:"real_estate"},replace:{office:"estate_agent"}},{old:{oneway:"1"},replace:{oneway:"yes"}},{old:{oneway:"alternate"},replace:{oneway:"alternating"}},{old:{oneway:"no;yes"}},{old:{oneway:"unknown"}},{old:{"operator:type":"goverment"},replace:{"operator:type":"government"}},{old:{"operator:type":"Privado"},replace:{"operator:type":"private"}},{old:{"operator:type":"Private"},replace:{"operator:type":"private"}},{old:{"operator:type":"Public"},replace:{"operator:type":"public"}},{old:{"operator:type":"Publico"},replace:{"operator:type":"public"}},{old:{"operator:type":"unknown"}},{old:{place_name:"*"},replace:{name:"$1"}},{old:{pole:"transition"},replace:{"location:transition":"yes"}},{old:{postcode:"*"},replace:{"addr:postcode":"$1"}},{old:{power:"busbar"},replace:{power:"line",line:"busbar"}},{old:{power:"line",location:"underground"},replace:{power:"cable",location:"underground"}},{old:{power:"marker"},replace:{marker:"*",utility:"power"}},{old:{power:"sub_station"},replace:{power:"substation"}},{old:{power:"substation",location:"kiosk"},replace:{power:"substation",man_made:"street_cabinet",street_cabinet:"power"}},{old:{power:"underground_cable"},replace:{power:"cable",location:"underground"}},{old:{power_source:"*"},replace:{"generator:source":"$1"}},{old:{power_rating:"*"},replace:{"generator:output":"$1"}},{old:{public_transport:"station",aerialway:"yes"},replace:{public_transport:"station",aerialway:"station"}},{old:{pump:"hand_pump"},replace:{pump:"manual"}},{old:{pump:"electrical_pump"},replace:{pump:"powered"}},{old:{pump:"no_pump"},replace:{pump:"no"}},{old:{pump:"power"},replace:{pump:"powered"}},{old:{railway:"*",abandoned:"yes"},replace:{"abandoned:railway":"$1"}},{old:{railway:"*",disused:"yes"},replace:{"disused:railway":"$1"}},{old:{railway:"platform"},replace:{railway:"platform",public_transport:"platform"}},{old:{railway:"station"},replace:{railway:"station",public_transport:"station"}},{old:{railway:"tram_stop"},replace:{railway:"tram_stop",public_transport:"stop_position",tram:"yes"}},{old:{recommended_speed:"*"},replace:{"maxspeed:advisory":"$1"}},{old:{"recommended_speed:backward":"*"},replace:{"maxspeed:advisory:backward":"$1"}},{old:{"recommended_speed:forward":"*"},replace:{"maxspeed:advisory:forward":"$1"}},{old:{religion:"catholic"},replace:{religion:"christian",denomination:"catholic"}},{old:{reservations:"*"},replace:{reservation:"$1"}},{old:{"roof:color":"*"},replace:{"roof:colour":"$1"}},{old:{"roof:shape":"half_hipped"},replace:{"roof:shape":"half-hipped"}},{old:{route:"ncn"},replace:{route:"bicycle",network:"ncn"}},{old:{rwn_expected_route_relations:"*"},replace:{expected_rwn_route_relations:"$1"}},{old:{shop:"adult"},replace:{shop:"erotic"}},{old:{shop:"antique"},replace:{shop:"antiques"}},{old:{shop:"army_surplus"},replace:{shop:"military_surplus"}},{old:{shop:"auto_parts"},replace:{shop:"car_parts"}},{old:{shop:"baby"},replace:{shop:"baby_goods"}},{old:{shop:"baby_care"},replace:{shop:"baby_goods"}},{old:{shop:"bags"},replace:{shop:"bag"}},{old:{shop:"bail_bond"},replace:{office:"bail_bond_agent"}},{old:{shop:"bail_bonds"},replace:{office:"bail_bond_agent"}},{old:{shop:"betting"},replace:{shop:"bookmaker"}},{old:{shop:"boutique"},replace:{shop:"clothes"}},{old:{shop:"cafe"},replace:{amenity:"cafe"}},{old:{shop:"consulting"},replace:{office:"consulting"}},{old:{shop:"dive"},replace:{shop:"scuba_diving"}},{old:{shop:"fashion"},replace:{shop:"clothes"}},{old:{shop:"fish"},replace:{shop:"seafood"}},{old:{shop:"fishmonger"},replace:{shop:"seafood"}},{old:{shop:"furnace"},replace:{shop:"fireplace"}},{old:{shop:"gallery"},replace:{shop:"art"}},{old:{shop:"jewellery"},replace:{shop:"jewelry"}},{old:{shop:"lingerie"},replace:{shop:"clothes",clothes:"underwear"}},{old:{shop:"luggage"},replace:{shop:"bag"}},{old:{shop:"money_transfer"},replace:{amenity:"money_transfer"}},{old:{shop:"moneylender"},replace:{shop:"money_lender"}},{old:{shop:"organic"},replace:{shop:"supermarket",organic:"only"}},{old:{shop:"perfume"},replace:{shop:"perfumery"}},{old:{shop:"real_estate"},replace:{office:"estate_agent"}},{old:{shop:"tickets"},replace:{shop:"ticket"}},{old:{shop:"underwear"},replace:{shop:"clothes",clothes:"underwear"}},{old:{shop:"winery"},replace:{craft:"winery"}},{old:{showers:"*"},replace:{shower:"$1"}},{old:{sloped_curb:"0"},replace:{kerb:"flush"}},{old:{sloped_curb:"0.00"},replace:{kerb:"flush"}},{old:{sloped_curb:"0.01"},replace:{kerb:"lowered","kerb:height":"1 cm"}},{old:{sloped_curb:"0.02"},replace:{kerb:"lowered","kerb:height":"2 cm"}},{old:{sloped_curb:"0.03"},replace:{kerb:"lowered","kerb:height":"3 cm"}},{old:{sloped_curb:"at_grade"},replace:{kerb:"flush"}},{old:{sloped_curb:"both"},replace:{kerb:"lowered"}},{old:{sloped_curb:"flush"},replace:{kerb:"flush"}},{old:{sloped_curb:"low"},replace:{kerb:"lowered"}},{old:{sloped_curb:"no"},replace:{kerb:"raised"}},{old:{sloped_curb:"yes"},replace:{kerb:"lowered"}},{old:{speed_limit:"*"},replace:{maxspeed:"$1"}},{old:{speedlimit:"*"},replace:{maxspeed:"$1"}},{old:{SpeedLimit:"*"},replace:{maxspeed:"$1"}},{old:{SPEEDLIMIT:"*"},replace:{maxspeed:"$1"}},{old:{sport:"horse_shoes"},replace:{sport:"horseshoes"}},{old:{sport:"horseshoe"},replace:{sport:"horseshoes"}},{old:{sport:"shuffle_board"},replace:{sport:"shuffleboard"}},{old:{station:"light_rail"},replace:{station:"light_rail",light_rail:"yes"}},{old:{station:"monorail"},replace:{station:"monorail",monorail:"yes"}},{old:{station:"subway"},replace:{station:"subway",subway:"yes"}},{old:{station:"train"},replace:{station:"train",train:"yes"}},{old:{sustenance:"bar"},replace:{amenity:"bar"}},{old:{sustenance:"cafe"},replace:{amenity:"cafe"}},{old:{sustenance:"pub"},replace:{amenity:"pub"}},{old:{sustenance:"restaurant"},replace:{amenity:"restaurant"}},{old:{"theatre:type":"amphitheatre"},replace:{"theatre:type":"amphi"}},{old:{todo:"*"},replace:{fixme:"$1"}},{old:{TODO:"*"},replace:{fixme:"$1"}},{old:{"toilets:disposal":"longdrop"},replace:{"toilets:disposal":"pitlatrine"}},{old:{"toilets:disposal":"pit_latrine"},replace:{"toilets:disposal":"pitlatrine"}},{old:{tourism:"bed_and_breakfast"},replace:{tourism:"guest_house",guest_house:"bed_and_breakfast"}},{old:{"tower:type":"power"},replace:{power:"tower"}},{old:{"tower:type":"anchor"},replace:{line_attachment:"anchor"}},{old:{"tower:type":"suspension"},replace:{line_attachment:"suspension"}},{old:{"townhall:village":"yes"},replace:{amenity:"townhall","townhall:type":"village"}},{old:{type:"audio",amenity:"studio"},replace:{studio:"audio"}},{old:{type:"broad_leaved"},replace:{leaf_type:"broadleaved"}},{old:{type:"caldera"},replace:{"volcano:type":"caldera"}},{old:{type:"conifer"},replace:{leaf_type:"needleleaved"}},{old:{type:"deciduous"},replace:{leaf_cycle:"deciduous"}},{old:{type:"extinct"},replace:{"volcano:status":"extinct"}},{old:{type:"scoria"},replace:{"volcano:type":"scoria"}},{old:{type:"shield"},replace:{"volcano:type":"shield"}},{old:{type:"strato"},replace:{"volcano:type":"stratovolcano"}},{old:{type:"video",amenity:"studio"},replace:{studio:"video"}},{old:{unnamed:"*"},replace:{noname:"$1"}},{old:{volcano:"extinct"},replace:{"volcano:status":"extinct"}},{old:{wall_type:"noise_barrier"},replace:{wall:"noise_barrier"}},{old:{water:"intermittent"},replace:{natural:"water",intermittent:"yes"}},{old:{water:"riverbank"},replace:{natural:"water",water:"river"}},{old:{water:"salt"},replace:{natural:"water",salt:"yes"}},{old:{water:"tidal"},replace:{natural:"water",tidal:"yes"}},{old:{waterway:"aqueduct"},replace:{waterway:"canal",bridge:"aqueduct"}},{old:{waterway:"lock"},replace:{waterway:"canal",lock:"yes"}},{old:{waterway:"riverbank"},replace:{natural:"water",water:"river"}},{old:{wifi:"yes"},replace:{internet_access:"wlan"}},{old:{wifi:"free"},replace:{internet_access:"wlan","internet_access:fee":"no"}},{old:{women:"*"},replace:{female:"$1"}},{old:{wood:"coniferous"},replace:{leaf_type:"needleleaved"}},{old:{wood:"deciduous"},replace:{leaf_cycle:"deciduous"}},{old:{wood:"evergreen"},replace:{leaf_cycle:"evergreen"}},{old:{wood:"mixed"},replace:{leaf_cycle:"mixed",leaf_type:"mixed"}}];
26806
26807         var dataDiscarded = {created_by:true,odbl:true,"odbl:note":true,"tiger:upload_uuid":true,"tiger:tlid":true,"tiger:source":true,"tiger:separated":true,"geobase:datasetName":true,"geobase:uuid":true,"osmarender:nameDirection":true,"osmarender:renderName":true,"osmarender:renderRef":true,"osmarender:rendernames":true,"sub_sea:type":true,"KSJ2:ADS":true,"KSJ2:ARE":true,"KSJ2:AdminArea":true,"KSJ2:COP_label":true,"KSJ2:DFD":true,"KSJ2:INT":true,"KSJ2:INT_label":true,"KSJ2:LOC":true,"KSJ2:LPN":true,"KSJ2:OPC":true,"KSJ2:PubFacAdmin":true,"KSJ2:RAC":true,"KSJ2:RAC_label":true,"KSJ2:RIC":true,"KSJ2:RIN":true,"KSJ2:WSC":true,"KSJ2:coordinate":true,"KSJ2:curve_id":true,"KSJ2:curve_type":true,"KSJ2:filename":true,"KSJ2:lake_id":true,"KSJ2:lat":true,"KSJ2:long":true,"KSJ2:river_id":true,"SK53_bulk:load":true,"yh:LINE_NAME":true,"yh:LINE_NUM":true,"yh:STRUCTURE":true,"yh:TOTYUMONO":true,"yh:TYPE":true,"yh:WIDTH":true,"yh:WIDTH_RANK":true};
26808
26809         var dataLanguages = {af:{nativeName:"Afrikaans"},agq:{nativeName:"Aghem"},ak:{nativeName:"Akan"},am:{nativeName:"አማርኛ"},ar:{nativeName:"العربية"},as:{nativeName:"অসমীয়া"},asa:{nativeName:"Kipare"},ast:{nativeName:"asturianu"},az:{nativeName:"azərbaycan"},"az-Cyrl":{base:"az",script:"Cyrl"},"az-Latn":{base:"az",script:"Latn"},bas:{nativeName:"Ɓàsàa"},be:{nativeName:"беларуская"},bem:{nativeName:"Ichibemba"},bez:{nativeName:"Hibena"},bg:{nativeName:"български"},bm:{nativeName:"bamanakan"},bn:{nativeName:"বাংলা"},bo:{nativeName:"བོད་སྐད་"},br:{nativeName:"brezhoneg"},brx:{nativeName:"बड़ो"},bs:{nativeName:"bosanski"},"bs-Cyrl":{base:"bs",script:"Cyrl"},"bs-Latn":{base:"bs",script:"Latn"},ca:{nativeName:"català"},ccp:{nativeName:"𑄌𑄋𑄴𑄟𑄳𑄦"},ce:{nativeName:"нохчийн"},ceb:{nativeName:"Binisaya"},cgg:{nativeName:"Rukiga"},chr:{nativeName:"ᏣᎳᎩ"},ckb:{nativeName:"کوردیی ناوەندی"},cs:{nativeName:"čeština"},cu:{nativeName:"cu"},cy:{nativeName:"Cymraeg"},da:{nativeName:"dansk"},dav:{nativeName:"Kitaita"},de:{nativeName:"Deutsch"},dje:{nativeName:"Zarmaciine"},dsb:{nativeName:"dolnoserbšćina"},dua:{nativeName:"duálá"},dyo:{nativeName:"joola"},dz:{nativeName:"རྫོང་ཁ"},ebu:{nativeName:"Kĩembu"},ee:{nativeName:"Eʋegbe"},el:{nativeName:"Ελληνικά"},en:{nativeName:"English"},eo:{nativeName:"esperanto"},es:{nativeName:"español"},et:{nativeName:"eesti"},eu:{nativeName:"euskara"},ewo:{nativeName:"ewondo"},fa:{nativeName:"فارسی"},ff:{nativeName:"Pulaar"},"ff-Latn":{base:"ff",script:"Latn"},fi:{nativeName:"suomi"},fil:{nativeName:"Filipino"},fo:{nativeName:"føroyskt"},fr:{nativeName:"français"},fur:{nativeName:"furlan"},fy:{nativeName:"Frysk"},ga:{nativeName:"Gaeilge"},gd:{nativeName:"Gàidhlig"},gl:{nativeName:"galego"},gsw:{nativeName:"Schwiizertüütsch"},gu:{nativeName:"ગુજરાતી"},guz:{nativeName:"Ekegusii"},gv:{nativeName:"Gaelg"},ha:{nativeName:"Hausa"},haw:{nativeName:"ʻŌlelo Hawaiʻi"},he:{nativeName:"עברית"},hi:{nativeName:"हिन्दी"},hr:{nativeName:"hrvatski"},hsb:{nativeName:"hornjoserbšćina"},hu:{nativeName:"magyar"},hy:{nativeName:"հայերեն"},ia:{nativeName:"interlingua"},id:{nativeName:"Indonesia"},ig:{nativeName:"Asụsụ Igbo"},ii:{nativeName:"ꆈꌠꉙ"},is:{nativeName:"íslenska"},it:{nativeName:"italiano"},ja:{nativeName:"日本語"},"ja-Hira":{base:"ja",script:"Hira"},"ja-Latn":{base:"ja",script:"Latn"},jgo:{nativeName:"Ndaꞌa"},jmc:{nativeName:"Kimachame"},jv:{nativeName:"Jawa"},ka:{nativeName:"ქართული"},kab:{nativeName:"Taqbaylit"},kam:{nativeName:"Kikamba"},kde:{nativeName:"Chimakonde"},kea:{nativeName:"kabuverdianu"},khq:{nativeName:"Koyra ciini"},ki:{nativeName:"Gikuyu"},kk:{nativeName:"қазақ тілі"},kkj:{nativeName:"kakɔ"},kl:{nativeName:"kalaallisut"},kln:{nativeName:"Kalenjin"},km:{nativeName:"ខ្មែរ"},kn:{nativeName:"ಕನ್ನಡ"},ko:{nativeName:"한국어"},"ko-Latn":{base:"ko",script:"Latn"},kok:{nativeName:"कोंकणी"},ks:{nativeName:"کٲشُر"},ksb:{nativeName:"Kishambaa"},ksf:{nativeName:"rikpa"},ksh:{nativeName:"Kölsch"},ku:{nativeName:"kurdî"},kw:{nativeName:"kernewek"},ky:{nativeName:"кыргызча"},lag:{nativeName:"Kɨlaangi"},lb:{nativeName:"Lëtzebuergesch"},lg:{nativeName:"Luganda"},lkt:{nativeName:"Lakȟólʼiyapi"},ln:{nativeName:"lingála"},lo:{nativeName:"ລາວ"},lrc:{nativeName:"لۊری شومالی"},lt:{nativeName:"lietuvių"},lu:{nativeName:"Tshiluba"},luo:{nativeName:"Dholuo"},luy:{nativeName:"Luluhia"},lv:{nativeName:"latviešu"},mas:{nativeName:"Maa"},mer:{nativeName:"Kĩmĩrũ"},mfe:{nativeName:"kreol morisien"},mg:{nativeName:"Malagasy"},mgh:{nativeName:"Makua"},mgo:{nativeName:"metaʼ"},mi:{nativeName:"Māori"},mk:{nativeName:"македонски"},ml:{nativeName:"മലയാളം"},mn:{nativeName:"монгол"},mr:{nativeName:"मराठी"},ms:{nativeName:"Melayu"},mt:{nativeName:"Malti"},mua:{nativeName:"MUNDAŊ"},my:{nativeName:"မြန်မာ"},mzn:{nativeName:"مازرونی"},naq:{nativeName:"Khoekhoegowab"},nb:{nativeName:"norsk bokmål"},nd:{nativeName:"isiNdebele"},nds:{nativeName:"nds"},ne:{nativeName:"नेपाली"},nl:{nativeName:"Nederlands"},nmg:{nativeName:"nmg"},nn:{nativeName:"nynorsk"},nnh:{nativeName:"Shwóŋò ngiembɔɔn"},nus:{nativeName:"Thok Nath"},nyn:{nativeName:"Runyankore"},oc:{nativeName:"Occitan"},om:{nativeName:"Oromoo"},or:{nativeName:"ଓଡ଼ିଆ"},os:{nativeName:"ирон"},pa:{nativeName:"ਪੰਜਾਬੀ"},"pa-Arab":{base:"pa",script:"Arab"},"pa-Guru":{base:"pa",script:"Guru"},pl:{nativeName:"polski"},prg:{nativeName:"prūsiskan"},ps:{nativeName:"پښتو"},pt:{nativeName:"português"},qu:{nativeName:"Runasimi"},rm:{nativeName:"rumantsch"},rn:{nativeName:"Ikirundi"},ro:{nativeName:"română"},rof:{nativeName:"Kihorombo"},root:{nativeName:"root"},ru:{nativeName:"русский"},rw:{nativeName:"Kinyarwanda"},rwk:{nativeName:"Kiruwa"},sah:{nativeName:"саха тыла"},saq:{nativeName:"Kisampur"},sbp:{nativeName:"Ishisangu"},sd:{nativeName:"سنڌي"},se:{nativeName:"davvisámegiella"},seh:{nativeName:"sena"},ses:{nativeName:"Koyraboro senni"},sg:{nativeName:"Sängö"},shi:{nativeName:"ⵜⴰⵛⵍⵃⵉⵜ"},"shi-Latn":{base:"shi",script:"Latn"},"shi-Tfng":{base:"shi",script:"Tfng"},si:{nativeName:"සිංහල"},sk:{nativeName:"slovenčina"},sl:{nativeName:"slovenščina"},smn:{nativeName:"anarâškielâ"},sn:{nativeName:"chiShona"},so:{nativeName:"Soomaali"},sq:{nativeName:"shqip"},sr:{nativeName:"српски"},"sr-Cyrl":{base:"sr",script:"Cyrl"},"sr-Latn":{base:"sr",script:"Latn"},sv:{nativeName:"svenska"},sw:{nativeName:"Kiswahili"},ta:{nativeName:"தமிழ்"},te:{nativeName:"తెలుగు"},teo:{nativeName:"Kiteso"},tg:{nativeName:"тоҷикӣ"},th:{nativeName:"ไทย"},ti:{nativeName:"ትግርኛ"},tk:{nativeName:"türkmen dili"},to:{nativeName:"lea fakatonga"},tr:{nativeName:"Türkçe"},tt:{nativeName:"татар"},twq:{nativeName:"Tasawaq senni"},tzm:{nativeName:"Tamaziɣt n laṭlaṣ"},ug:{nativeName:"ئۇيغۇرچە"},uk:{nativeName:"українська"},ur:{nativeName:"اردو"},uz:{nativeName:"o‘zbek"},"uz-Arab":{base:"uz",script:"Arab"},"uz-Cyrl":{base:"uz",script:"Cyrl"},"uz-Latn":{base:"uz",script:"Latn"},vai:{nativeName:"ꕙꔤ"},"vai-Latn":{base:"vai",script:"Latn"},"vai-Vaii":{base:"vai",script:"Vaii"},vi:{nativeName:"Tiếng Việt"},vo:{nativeName:"vo"},vun:{nativeName:"Kyivunjo"},wae:{nativeName:"Walser"},wo:{nativeName:"Wolof"},xh:{nativeName:"isiXhosa"},xog:{nativeName:"Olusoga"},yav:{nativeName:"nuasue"},yi:{nativeName:"ייִדיש"},yo:{nativeName:"Èdè Yorùbá"},yue:{nativeName:"粵語"},"yue-Hans":{base:"yue",script:"Hans"},"yue-Hant":{base:"yue",script:"Hant"},zgh:{nativeName:"ⵜⴰⵎⴰⵣⵉⵖⵜ"},zh:{nativeName:"中文"},"zh-Hans":{base:"zh",script:"Hans",nativeName:"简体中文"},"zh-Hant":{base:"zh",script:"Hant",nativeName:"繁體中文"},zh_pinyin:{base:"zh",script:"Latn"},zu:{nativeName:"isiZulu"}};
26810
26811         var dataLocales = {af:{rtl:false,languageNames:{aa:"Afar",ab:"Abkasies",ace:"Atsjenees",ach:"Akoli",ada:"Adangme",ady:"Adyghe",af:"Afrikaans",agq:"Aghem",ain:"Ainu",ak:"Akan",ale:"Aleut",alt:"Suid-Altai",am:"Amharies",an:"Aragonees",anp:"Angika",ar:"Arabies","ar-001":"Moderne Standaardarabies",arc:"Aramees",arn:"Mapuche",arp:"Arapaho",as:"Assamees",asa:"Asu",ast:"Asturies",av:"Avaries",awa:"Awadhi",ay:"Aymara",az:"Azerbeidjans",ba:"Baskir",ban:"Balinees",bas:"Basaa",be:"Belarussies",bem:"Bemba",bez:"Bena",bg:"Bulgaars",bgn:"Wes-Balochi",bho:"Bhojpuri",bi:"Bislama",bin:"Bini",bla:"Siksika",bm:"Bambara",bn:"Bengaals",bo:"Tibettaans",br:"Bretons",brx:"Bodo",bs:"Bosnies",bug:"Buginees",byn:"Blin",ca:"Katalaans",ccp:"Tsjaakma",ce:"Tsjetsjeens",ceb:"Cebuano",cgg:"Kiga",ch:"Chamorro",chk:"Chuukees",chm:"Mari",cho:"Choctaw",chr:"Cherokees",chy:"Cheyennees",ckb:"Sorani",co:"Korsikaans",cop:"Kopties",crs:"Seselwa Franskreools",cs:"Tsjeggies",cu:"Kerkslawies",cv:"Chuvash",cy:"Wallies",da:"Deens",dak:"Dakotaans",dar:"Dakota",dav:"Taita",de:"Duits","de-AT":"Duits (Oostenryk)","de-CH":"Duits (Switserland)",dgr:"Dogrib",dje:"Zarma",dsb:"Benedesorbies",dua:"Duala",dv:"Divehi",dyo:"Jola-Fonyi",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egy:"Antieke Egipties",eka:"Ekajuk",el:"Grieks",en:"Engels","en-AU":"Engels (Australië)","en-CA":"Engels (Kanada)","en-GB":"Engels (VK)","en-US":"Engels (VSA)",eo:"Esperanto",es:"Spaans","es-419":"Spaans (Latyns-Amerika)","es-ES":"Spaans (Spanje)","es-MX":"Spaans (Meksiko)",et:"Estnies",eu:"Baskies",ewo:"Ewondo",fa:"Persies",ff:"Fulah",fi:"Fins",fil:"Filippyns",fj:"Fidjiaans",fo:"Faroëes",fon:"Fon",fr:"Frans","fr-CA":"Frans (Kanada)","fr-CH":"Frans (Switserland)",fur:"Friuliaans",fy:"Fries",ga:"Iers",gaa:"Gaa",gag:"Gagauz",gan:"Gan-Sjinees",gd:"Skotse Gallies",gez:"Geez",gil:"Gilbertees",gl:"Galisies",gn:"Guarani",gor:"Gorontalo",got:"Goties",grc:"Antieke Grieks",gsw:"Switserse Duits",gu:"Goedjarati",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hak:"Hakka-Sjinees",haw:"Hawais",he:"Hebreeus",hi:"Hindi",hil:"Hiligaynon",hit:"Hetities",hmn:"Hmong",hr:"Kroaties",hsb:"Oppersorbies",hsn:"Xiang-Sjinees",ht:"Haïtiaans",hu:"Hongaars",hup:"Hupa",hy:"Armeens",hz:"Herero",ia:"Interlingua",iba:"Ibanees",ibb:"Ibibio",id:"Indonesies",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ilo:"Iloko",inh:"Ingush",io:"Ido",is:"Yslands",it:"Italiaans",iu:"Inuïties",ja:"Japannees",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jv:"Javaans",ka:"Georgies",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kbd:"Kabardiaans",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",kfo:"Koro",kg:"Kongolees",kha:"Khasi",khq:"Koyra Chiini",ki:"Kikuyu",kj:"Kuanyama",kk:"Kazaks",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Koreaans",koi:"Komi-Permyaks",kok:"Konkani",kpe:"Kpellees",kr:"Kanuri",krc:"Karachay-Balkar",krl:"Karelies",kru:"Kurukh",ks:"Kasjmirs",ksb:"Shambala",ksf:"Bafia",ksh:"Keuls",ku:"Koerdies",kum:"Kumyk",kv:"Komi",kw:"Kornies",ky:"Kirgisies",la:"Latyn",lad:"Ladino",lag:"Langi",lb:"Luxemburgs",lez:"Lezghies",lg:"Ganda",li:"Limburgs",lkt:"Lakota",ln:"Lingaals",lo:"Lao",loz:"Lozi",lrc:"Noord-Luri",lt:"Litaus",lu:"Luba-Katanga",lua:"Luba-Lulua",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Letties",mad:"Madurees",mag:"Magahi",mai:"Maithili",mak:"Makasar",mas:"Masai",mdf:"Moksha",men:"Mende",mer:"Meru",mfe:"Morisjen",mg:"Malgassies",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marshallees",mi:"Maori",mic:"Micmac",min:"Minangkabaus",mk:"Masedonies",ml:"Malabaars",mn:"Mongools",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",ms:"Maleis",mt:"Maltees",mua:"Mundang",mus:"Kreek",mwl:"Mirandees",my:"Birmaans",myv:"Erzya",mzn:"Masanderani",na:"Nauru",nan:"Min Nan-Sjinees",nap:"Neapolitaans",naq:"Nama",nb:"Boeknoors",nd:"Noord-Ndebele",nds:"Nederduits","nds-NL":"Nedersaksies",ne:"Nepalees","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niueaans",nl:"Nederlands","nl-BE":"Vlaams",nmg:"Kwasio",nn:"Nuwe Noors",nnh:"Ngiemboon",no:"Noors",nog:"Nogai",nqo:"N’Ko",nr:"Suid-Ndebele",nso:"Noord-Sotho",nus:"Nuer",nv:"Navajo",ny:"Nyanja",nyn:"Nyankole",oc:"Oksitaans",om:"Oromo",or:"Oriya",os:"Osseties",pa:"Pandjabi",pag:"Pangasinan",pam:"Pampanga",pap:"Papiamento",pau:"Palauaans",pcm:"Nigeriese Pidgin",phn:"Fenisies",pl:"Pools",prg:"Pruisies",ps:"Pasjto",pt:"Portugees","pt-BR":"Portugees (Brasilië)","pt-PT":"Portugees (Portugal)",qu:"Quechua",quc:"K’iche’",rap:"Rapanui",rar:"Rarotongaans",rm:"Reto-Romaans",rn:"Rundi",ro:"Roemeens","ro-MD":"Roemeens (Moldowa)",rof:"Rombo",root:"Root",ru:"Russies",rup:"Aromanies",rw:"Rwandees",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawees",sah:"Sakhaans",saq:"Samburu",sat:"Santalies",sba:"Ngambay",sbp:"Sangu",sc:"Sardinies",scn:"Sisiliaans",sco:"Skots",sd:"Sindhi",sdh:"Suid-Koerdies",se:"Noord-Sami",seh:"Sena",ses:"Koyraboro Senni",sg:"Sango",sh:"Serwo-Kroaties",shi:"Tachelhit",shn:"Shan",si:"Sinhala",sk:"Slowaaks",sl:"Sloweens",sm:"Samoaans",sma:"Suid-Sami",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somalies",sq:"Albanees",sr:"Serwies",srn:"Sranan Tongo",ss:"Swazi",ssy:"Saho",st:"Suid-Sotho",su:"Sundanees",suk:"Sukuma",sv:"Sweeds",sw:"Swahili","sw-CD":"Swahili (Demokratiese Republiek van die Kongo)",swb:"Comoraans",syr:"Siries",ta:"Tamil",te:"Teloegoe",tem:"Timne",teo:"Teso",tet:"Tetoem",tg:"Tadjiks",th:"Thai",ti:"Tigrinya",tig:"Tigre",tk:"Turkmeens",tlh:"Klingon",tn:"Tswana",to:"Tongaans",tpi:"Tok Pisin",tr:"Turks",trv:"Taroko",ts:"Tsonga",tt:"Tataars",tum:"Toemboeka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahities",tyv:"Tuvinees",tzm:"Sentraal-Atlas-Tamazight",udm:"Udmurt",ug:"Uighur",uk:"Oekraïens",umb:"Umbundu",ur:"Oerdoe",uz:"Oezbeeks",vai:"Vai",ve:"Venda",vi:"Viëtnamees",vo:"Volapük",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Wolaytta",war:"Waray",wbp:"Warlpiri",wo:"Wolof",wuu:"Wu-Sjinees",xal:"Kalmyk",xh:"Xhosa",xog:"Soga",yav:"Yangben",ybb:"Yemba",yi:"Jiddisj",yo:"Yoruba",yue:"Kantonees",zgh:"Standaard Marokkaanse Tamazight",zh:"Chinees","zh-Hans":"Mandarynse Chinees (Vereenvoudigd)","zh-Hant":"Mandarynse Chinees (Tradisioneel)",zu:"Zoeloe",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Sirillies",Latn:"Latyn",Arab:"Arabies",Guru:"Gurmukhi",Hans:"Vereenvoudig",Hant:"Tradisioneel"}},ar:{rtl:true,languageNames:{aa:"الأفارية",ab:"الأبخازية",ace:"الأتشينيزية",ach:"الأكولية",ada:"الأدانجمية",ady:"الأديغة",ae:"الأفستية",af:"الأفريقانية",afh:"الأفريهيلية",agq:"الأغم",ain:"الآينوية",ak:"الأكانية",akk:"الأكادية",ale:"الأليوتية",alt:"الألطائية الجنوبية",am:"الأمهرية",an:"الأراغونية",ang:"الإنجليزية القديمة",anp:"الأنجيكا",ar:"العربية","ar-001":"العربية الفصحى الحديثة",arc:"الآرامية",arn:"المابودونغونية",arp:"الأراباهو",ars:"اللهجة النجدية",arw:"الأراواكية",as:"الأسامية",asa:"الآسو",ast:"الأسترية",av:"الأوارية",awa:"الأوادية",ay:"الأيمارا",az:"الأذربيجانية",ba:"الباشكيرية",bal:"البلوشية",ban:"البالينية",bas:"الباسا",bax:"بامن",bbj:"لغة الغومالا",be:"البيلاروسية",bej:"البيجا",bem:"البيمبا",bez:"بينا",bfd:"لغة البافوت",bg:"البلغارية",bgn:"البلوشية الغربية",bho:"البهوجبورية",bi:"البيسلامية",bik:"البيكولية",bin:"البينية",bkm:"لغة الكوم",bla:"السيكسيكية",bm:"البامبارا",bn:"البنغالية",bo:"التبتية",br:"البريتونية",bra:"البراجية",brx:"البودو",bs:"البوسنية",bss:"أكوس",bua:"البرياتية",bug:"البجينيزية",bum:"لغة البولو",byn:"البلينية",byv:"لغة الميدومبا",ca:"الكتالانية",cad:"الكادو",car:"الكاريبية",cay:"الكايوجية",cch:"الأتسام",ccp:"تشاكما",ce:"الشيشانية",ceb:"السيبيوانية",cgg:"تشيغا",ch:"التشامورو",chb:"التشيبشا",chg:"التشاجاتاي",chk:"التشكيزية",chm:"الماري",chn:"الشينوك جارجون",cho:"الشوكتو",chp:"الشيباوايان",chr:"الشيروكي",chy:"الشايان",ckb:"السورانية الكردية",co:"الكورسيكية",cop:"القبطية",cr:"الكرى",crh:"لغة تتار القرم",crs:"الفرنسية الكريولية السيشيلية",cs:"التشيكية",csb:"الكاشبايان",cu:"سلافية كنسية",cv:"التشوفاشي",cy:"الويلزية",da:"الدانمركية",dak:"الداكوتا",dar:"الدارجوا",dav:"تيتا",de:"الألمانية","de-AT":"الألمانية النمساوية","de-CH":"الألمانية العليا السويسرية",del:"الديلوير",den:"السلافية",dgr:"الدوجريب",din:"الدنكا",dje:"الزارمية",doi:"الدوجرية",dsb:"صوربيا السفلى",dua:"الديولا",dum:"الهولندية الوسطى",dv:"المالديفية",dyo:"جولا فونيا",dyu:"الدايلا",dz:"الزونخاية",dzg:"القرعانية",ebu:"إمبو",ee:"الإيوي",efi:"الإفيك",egy:"المصرية القديمة",eka:"الإكاجك",el:"اليونانية",elx:"الإمايت",en:"الإنجليزية","en-AU":"الإنجليزية الأسترالية","en-CA":"الإنجليزية الكندية","en-GB":"الإنجليزية البريطانية","en-US":"الإنجليزية الأمريكية",enm:"الإنجليزية الوسطى",eo:"الإسبرانتو",es:"الإسبانية","es-419":"الإسبانية أمريكا اللاتينية","es-ES":"الإسبانية الأوروبية","es-MX":"الإسبانية المكسيكية",et:"الإستونية",eu:"الباسكية",ewo:"الإيوندو",fa:"الفارسية",fan:"الفانج",fat:"الفانتي",ff:"الفولانية",fi:"الفنلندية",fil:"الفلبينية",fj:"الفيجية",fo:"الفاروية",fon:"الفون",fr:"الفرنسية","fr-CA":"الفرنسية الكندية","fr-CH":"الفرنسية السويسرية",frc:"الفرنسية الكاجونية",frm:"الفرنسية الوسطى",fro:"الفرنسية القديمة",frr:"الفريزينية الشمالية",frs:"الفريزينية الشرقية",fur:"الفريلايان",fy:"الفريزيان",ga:"الأيرلندية",gaa:"الجا",gag:"الغاغوز",gan:"الغان الصينية",gay:"الجايو",gba:"الجبيا",gd:"الغيلية الأسكتلندية",gez:"الجعزية",gil:"لغة أهل جبل طارق",gl:"الجاليكية",gmh:"الألمانية العليا الوسطى",gn:"الغوارانية",goh:"الألمانية العليا القديمة",gon:"الجندي",gor:"الجورونتالو",got:"القوطية",grb:"الجريبو",grc:"اليونانية القديمة",gsw:"الألمانية السويسرية",gu:"الغوجاراتية",guz:"الغيزية",gv:"المنكية",gwi:"غوتشن",ha:"الهوسا",hai:"الهيدا",hak:"الهاكا الصينية",haw:"لغة هاواي",he:"العبرية",hi:"الهندية",hil:"الهيليجينون",hit:"الحثية",hmn:"الهمونجية",ho:"الهيري موتو",hr:"الكرواتية",hsb:"الصوربية العليا",hsn:"شيانغ الصينية",ht:"الكريولية الهايتية",hu:"الهنغارية",hup:"الهبا",hy:"الأرمنية",hz:"الهيريرو",ia:"اللّغة الوسيطة",iba:"الإيبان",ibb:"الإيبيبيو",id:"الإندونيسية",ie:"الإنترلينج",ig:"الإيجبو",ii:"السيتشيون يي",ik:"الإينبياك",ilo:"الإيلوكو",inh:"الإنجوشية",io:"الإيدو",is:"الأيسلندية",it:"الإيطالية",iu:"الإينكتيتت",ja:"اليابانية",jbo:"اللوجبان",jgo:"نغومبا",jmc:"الماتشامية",jpr:"الفارسية اليهودية",jrb:"العربية اليهودية",jv:"الجاوية",ka:"الجورجية",kaa:"الكارا-كالباك",kab:"القبيلية",kac:"الكاتشين",kaj:"الجو",kam:"الكامبا",kaw:"الكوي",kbd:"الكاباردايان",kbl:"كانمبو",kcg:"التايابية",kde:"ماكونده",kea:"كابوفيرديانو",kfo:"الكورو",kg:"الكونغو",kha:"الكازية",kho:"الخوتانيز",khq:"كويرا تشيني",ki:"الكيكيو",kj:"الكيونياما",kk:"الكازاخستانية",kkj:"لغة الكاكو",kl:"الكالاليست",kln:"كالينجين",km:"الخميرية",kmb:"الكيمبندو",kn:"الكانادا",ko:"الكورية",koi:"كومي-بيرماياك",kok:"الكونكانية",kos:"الكوسراين",kpe:"الكبيل",kr:"الكانوري",krc:"الكاراتشاي-بالكار",krl:"الكاريلية",kru:"الكوروخ",ks:"الكشميرية",ksb:"شامبالا",ksf:"لغة البافيا",ksh:"لغة الكولونيان",ku:"الكردية",kum:"القموقية",kut:"الكتيناي",kv:"الكومي",kw:"الكورنية",ky:"القيرغيزية",la:"اللاتينية",lad:"اللادينو",lag:"لانجي",lah:"اللاهندا",lam:"اللامبا",lb:"اللكسمبورغية",lez:"الليزجية",lg:"الغاندا",li:"الليمبورغية",lkt:"لاكوتا",ln:"اللينجالا",lo:"اللاوية",lol:"منغولى",lou:"الكريولية اللويزيانية",loz:"اللوزي",lrc:"اللرية الشمالية",lt:"الليتوانية",lu:"اللوبا كاتانغا",lua:"اللبا-لؤلؤ",lui:"اللوسينو",lun:"اللوندا",luo:"اللو",lus:"الميزو",luy:"لغة اللويا",lv:"اللاتفية",mad:"المادريز",mag:"الماجا",mai:"المايثيلي",mak:"الماكاسار",man:"الماندينغ",mas:"الماساي",mde:"مابا",mdf:"الموكشا",mdr:"الماندار",men:"الميند",mer:"الميرو",mfe:"المورسيانية",mg:"الملغاشي",mga:"الأيرلندية الوسطى",mgh:"ماخاوا-ميتو",mgo:"ميتا",mh:"المارشالية",mi:"الماورية",mic:"الميكماكيونية",min:"المينانجكاباو",mk:"المقدونية",ml:"المالايالامية",mn:"المنغولية",mnc:"المانشو",mni:"المانيبورية",moh:"الموهوك",mos:"الموسي",mr:"الماراثية",ms:"الماليزية",mt:"المالطية",mua:"مندنج",mus:"الكريك",mwl:"الميرانديز",mwr:"الماروارية",my:"البورمية",myv:"الأرزية",mzn:"المازندرانية",na:"النورو",nan:"مين-نان الصينية",nap:"النابولية",naq:"لغة الناما",nb:"النرويجية بوكمال",nd:"النديبيل الشمالية",nds:"الألمانية السفلى","nds-NL":"السكسونية السفلى",ne:"النيبالية","new":"النوارية",ng:"الندونجا",nia:"النياس",niu:"النيوي",nl:"الهولندية","nl-BE":"الفلمنكية",nmg:"كواسيو",nn:"النرويجية نينورسك",nnh:"لغة النجيمبون",no:"النرويجية",nog:"النوجاي",non:"النورس القديم",nqo:"أنكو",nr:"النديبيل الجنوبي",nso:"السوتو الشمالية",nus:"النوير",nv:"النافاجو",nwc:"النوارية التقليدية",ny:"النيانجا",nym:"النيامويزي",nyn:"النيانكول",nyo:"النيورو",nzi:"النزيما",oc:"الأوكسيتانية",oj:"الأوجيبوا",om:"الأورومية",or:"الأورية",os:"الأوسيتيك",osa:"الأوساج",ota:"التركية العثمانية",pa:"البنجابية",pag:"البانجاسينان",pal:"البهلوية",pam:"البامبانجا",pap:"البابيامينتو",pau:"البالوان",pcm:"البدجنية النيجيرية",peo:"الفارسية القديمة",phn:"الفينيقية",pi:"البالية",pl:"البولندية",pon:"البوهنبيايان",prg:"البروسياوية",pro:"البروفانسية القديمة",ps:"البشتو",pt:"البرتغالية","pt-BR":"البرتغالية البرازيلية","pt-PT":"البرتغالية الأوروبية",qu:"الكويتشوا",quc:"الكيشية",raj:"الراجاسثانية",rap:"الراباني",rar:"الراروتونجاني",rm:"الرومانشية",rn:"الرندي",ro:"الرومانية","ro-MD":"المولدوفية",rof:"الرومبو",rom:"الغجرية",root:"الجذر",ru:"الروسية",rup:"الأرومانيان",rw:"الكينيارواندا",rwk:"الروا",sa:"السنسكريتية",sad:"السانداوي",sah:"الساخيّة",sam:"الآرامية السامرية",saq:"سامبورو",sas:"الساساك",sat:"السانتالية",sba:"نامبي",sbp:"سانغو",sc:"السردينية",scn:"الصقلية",sco:"الأسكتلندية",sd:"السندية",sdh:"الكردية الجنوبية",se:"سامي الشمالية",see:"السنيكا",seh:"سينا",sel:"السيلكب",ses:"كويرابورو سيني",sg:"السانجو",sga:"الأيرلندية القديمة",sh:"صربية-كرواتية",shi:"تشلحيت",shn:"الشان",shu:"العربية التشادية",si:"السنهالية",sid:"السيدامو",sk:"السلوفاكية",sl:"السلوفانية",sm:"الساموائية",sma:"السامي الجنوبي",smj:"اللول سامي",smn:"الإيناري سامي",sms:"السكولت سامي",sn:"الشونا",snk:"السونينك",so:"الصومالية",sog:"السوجدين",sq:"الألبانية",sr:"الصربية",srn:"السرانان تونجو",srr:"السرر",ss:"السواتي",ssy:"لغة الساهو",st:"السوتو الجنوبية",su:"السوندانية",suk:"السوكوما",sus:"السوسو",sux:"السومارية",sv:"السويدية",sw:"السواحلية","sw-CD":"الكونغو السواحلية",swb:"القمرية",syc:"سريانية تقليدية",syr:"السريانية",ta:"التاميلية",te:"التيلوغوية",tem:"التيمن",teo:"تيسو",ter:"التيرينو",tet:"التيتم",tg:"الطاجيكية",th:"التايلاندية",ti:"التغرينية",tig:"التيغرية",tiv:"التيف",tk:"التركمانية",tkl:"التوكيلاو",tl:"التاغالوغية",tlh:"الكلينجون",tli:"التلينغيتية",tmh:"التاماشيك",tn:"التسوانية",to:"التونغية",tog:"تونجا - نياسا",tpi:"التوك بيسين",tr:"التركية",trv:"لغة التاروكو",ts:"السونجا",tsi:"التسيمشيان",tt:"التترية",tum:"التامبوكا",tvl:"التوفالو",tw:"التوي",twq:"تاساواق",ty:"التاهيتية",tyv:"التوفية",tzm:"الأمازيغية وسط الأطلس",udm:"الأدمرت",ug:"الأويغورية",uga:"اليجاريتيك",uk:"الأوكرانية",umb:"الأمبندو",ur:"الأوردية",uz:"الأوزبكية",vai:"الفاي",ve:"الفيندا",vi:"الفيتنامية",vo:"لغة الفولابوك",vot:"الفوتيك",vun:"الفونجو",wa:"الولونية",wae:"الوالسر",wal:"الولاياتا",war:"الواراي",was:"الواشو",wbp:"وارلبيري",wo:"الولوفية",wuu:"الوو الصينية",xal:"الكالميك",xh:"الخوسا",xog:"السوغا",yao:"الياو",yap:"اليابيز",yav:"يانجبن",ybb:"يمبا",yi:"اليديشية",yo:"اليوروبا",yue:"الكَنْتُونية",za:"الزهيونج",zap:"الزابوتيك",zbl:"رموز المعايير الأساسية",zen:"الزيناجا",zgh:"التمازيغية المغربية القياسية",zh:"الصينية","zh-Hans":"الصينية (المبسطة)","zh-Hant":"الصينية (التقليدية)",zu:"الزولو",zun:"الزونية",zza:"زازا"},scriptNames:{Cyrl:"السيريلية",Latn:"اللاتينية",Arab:"العربية",Guru:"الجرمخي",Tfng:"التيفيناغ",Vaii:"الفاي",Hans:"المبسطة",Hant:"التقليدية"}},"ar-AA":{rtl:true,languageNames:{aa:"الأفارية",ab:"الأبخازية",ace:"الأتشينيزية",ach:"الأكولية",ada:"الأدانجمية",ady:"الأديغة",ae:"الأفستية",af:"الأفريقانية",afh:"الأفريهيلية",agq:"الأغم",ain:"الآينوية",ak:"الأكانية",akk:"الأكادية",ale:"الأليوتية",alt:"الألطائية الجنوبية",am:"الأمهرية",an:"الأراغونية",ang:"الإنجليزية القديمة",anp:"الأنجيكا",ar:"العربية","ar-001":"العربية الفصحى الحديثة",arc:"الآرامية",arn:"المابودونغونية",arp:"الأراباهو",ars:"اللهجة النجدية",arw:"الأراواكية",as:"الأسامية",asa:"الآسو",ast:"الأسترية",av:"الأوارية",awa:"الأوادية",ay:"الأيمارا",az:"الأذربيجانية",ba:"الباشكيرية",bal:"البلوشية",ban:"البالينية",bas:"الباسا",bax:"بامن",bbj:"لغة الغومالا",be:"البيلاروسية",bej:"البيجا",bem:"البيمبا",bez:"بينا",bfd:"لغة البافوت",bg:"البلغارية",bgn:"البلوشية الغربية",bho:"البهوجبورية",bi:"البيسلامية",bik:"البيكولية",bin:"البينية",bkm:"لغة الكوم",bla:"السيكسيكية",bm:"البامبارا",bn:"البنغالية",bo:"التبتية",br:"البريتونية",bra:"البراجية",brx:"البودو",bs:"البوسنية",bss:"أكوس",bua:"البرياتية",bug:"البجينيزية",bum:"لغة البولو",byn:"البلينية",byv:"لغة الميدومبا",ca:"الكتالانية",cad:"الكادو",car:"الكاريبية",cay:"الكايوجية",cch:"الأتسام",ccp:"تشاكما",ce:"الشيشانية",ceb:"السيبيوانية",cgg:"تشيغا",ch:"التشامورو",chb:"التشيبشا",chg:"التشاجاتاي",chk:"التشكيزية",chm:"الماري",chn:"الشينوك جارجون",cho:"الشوكتو",chp:"الشيباوايان",chr:"الشيروكي",chy:"الشايان",ckb:"السورانية الكردية",co:"الكورسيكية",cop:"القبطية",cr:"الكرى",crh:"لغة تتار القرم",crs:"الفرنسية الكريولية السيشيلية",cs:"التشيكية",csb:"الكاشبايان",cu:"سلافية كنسية",cv:"التشوفاشي",cy:"الويلزية",da:"الدانمركية",dak:"الداكوتا",dar:"الدارجوا",dav:"تيتا",de:"الألمانية","de-AT":"الألمانية النمساوية","de-CH":"الألمانية العليا السويسرية",del:"الديلوير",den:"السلافية",dgr:"الدوجريب",din:"الدنكا",dje:"الزارمية",doi:"الدوجرية",dsb:"صوربيا السفلى",dua:"الديولا",dum:"الهولندية الوسطى",dv:"المالديفية",dyo:"جولا فونيا",dyu:"الدايلا",dz:"الزونخاية",dzg:"القرعانية",ebu:"إمبو",ee:"الإيوي",efi:"الإفيك",egy:"المصرية القديمة",eka:"الإكاجك",el:"اليونانية",elx:"الإمايت",en:"الإنجليزية","en-AU":"الإنجليزية الأسترالية","en-CA":"الإنجليزية الكندية","en-GB":"الإنجليزية البريطانية","en-US":"الإنجليزية الأمريكية",enm:"الإنجليزية الوسطى",eo:"الإسبرانتو",es:"الإسبانية","es-419":"الإسبانية أمريكا اللاتينية","es-ES":"الإسبانية الأوروبية","es-MX":"الإسبانية المكسيكية",et:"الإستونية",eu:"الباسكية",ewo:"الإيوندو",fa:"الفارسية",fan:"الفانج",fat:"الفانتي",ff:"الفولانية",fi:"الفنلندية",fil:"الفلبينية",fj:"الفيجية",fo:"الفاروية",fon:"الفون",fr:"الفرنسية","fr-CA":"الفرنسية الكندية","fr-CH":"الفرنسية السويسرية",frc:"الفرنسية الكاجونية",frm:"الفرنسية الوسطى",fro:"الفرنسية القديمة",frr:"الفريزينية الشمالية",frs:"الفريزينية الشرقية",fur:"الفريلايان",fy:"الفريزيان",ga:"الأيرلندية",gaa:"الجا",gag:"الغاغوز",gan:"الغان الصينية",gay:"الجايو",gba:"الجبيا",gd:"الغيلية الأسكتلندية",gez:"الجعزية",gil:"لغة أهل جبل طارق",gl:"الجاليكية",gmh:"الألمانية العليا الوسطى",gn:"الغوارانية",goh:"الألمانية العليا القديمة",gon:"الجندي",gor:"الجورونتالو",got:"القوطية",grb:"الجريبو",grc:"اليونانية القديمة",gsw:"الألمانية السويسرية",gu:"الغوجاراتية",guz:"الغيزية",gv:"المنكية",gwi:"غوتشن",ha:"الهوسا",hai:"الهيدا",hak:"الهاكا الصينية",haw:"لغة هاواي",he:"العبرية",hi:"الهندية",hil:"الهيليجينون",hit:"الحثية",hmn:"الهمونجية",ho:"الهيري موتو",hr:"الكرواتية",hsb:"الصوربية العليا",hsn:"شيانغ الصينية",ht:"الكريولية الهايتية",hu:"الهنغارية",hup:"الهبا",hy:"الأرمنية",hz:"الهيريرو",ia:"اللّغة الوسيطة",iba:"الإيبان",ibb:"الإيبيبيو",id:"الإندونيسية",ie:"الإنترلينج",ig:"الإيجبو",ii:"السيتشيون يي",ik:"الإينبياك",ilo:"الإيلوكو",inh:"الإنجوشية",io:"الإيدو",is:"الأيسلندية",it:"الإيطالية",iu:"الإينكتيتت",ja:"اليابانية",jbo:"اللوجبان",jgo:"نغومبا",jmc:"الماتشامية",jpr:"الفارسية اليهودية",jrb:"العربية اليهودية",jv:"الجاوية",ka:"الجورجية",kaa:"الكارا-كالباك",kab:"القبيلية",kac:"الكاتشين",kaj:"الجو",kam:"الكامبا",kaw:"الكوي",kbd:"الكاباردايان",kbl:"كانمبو",kcg:"التايابية",kde:"ماكونده",kea:"كابوفيرديانو",kfo:"الكورو",kg:"الكونغو",kha:"الكازية",kho:"الخوتانيز",khq:"كويرا تشيني",ki:"الكيكيو",kj:"الكيونياما",kk:"الكازاخستانية",kkj:"لغة الكاكو",kl:"الكالاليست",kln:"كالينجين",km:"الخميرية",kmb:"الكيمبندو",kn:"الكانادا",ko:"الكورية",koi:"كومي-بيرماياك",kok:"الكونكانية",kos:"الكوسراين",kpe:"الكبيل",kr:"الكانوري",krc:"الكاراتشاي-بالكار",krl:"الكاريلية",kru:"الكوروخ",ks:"الكشميرية",ksb:"شامبالا",ksf:"لغة البافيا",ksh:"لغة الكولونيان",ku:"الكردية",kum:"القموقية",kut:"الكتيناي",kv:"الكومي",kw:"الكورنية",ky:"القيرغيزية",la:"اللاتينية",lad:"اللادينو",lag:"لانجي",lah:"اللاهندا",lam:"اللامبا",lb:"اللكسمبورغية",lez:"الليزجية",lg:"الغاندا",li:"الليمبورغية",lkt:"لاكوتا",ln:"اللينجالا",lo:"اللاوية",lol:"منغولى",lou:"الكريولية اللويزيانية",loz:"اللوزي",lrc:"اللرية الشمالية",lt:"الليتوانية",lu:"اللوبا كاتانغا",lua:"اللبا-لؤلؤ",lui:"اللوسينو",lun:"اللوندا",luo:"اللو",lus:"الميزو",luy:"لغة اللويا",lv:"اللاتفية",mad:"المادريز",mag:"الماجا",mai:"المايثيلي",mak:"الماكاسار",man:"الماندينغ",mas:"الماساي",mde:"مابا",mdf:"الموكشا",mdr:"الماندار",men:"الميند",mer:"الميرو",mfe:"المورسيانية",mg:"الملغاشي",mga:"الأيرلندية الوسطى",mgh:"ماخاوا-ميتو",mgo:"ميتا",mh:"المارشالية",mi:"الماورية",mic:"الميكماكيونية",min:"المينانجكاباو",mk:"المقدونية",ml:"المالايالامية",mn:"المنغولية",mnc:"المانشو",mni:"المانيبورية",moh:"الموهوك",mos:"الموسي",mr:"الماراثية",ms:"الماليزية",mt:"المالطية",mua:"مندنج",mus:"الكريك",mwl:"الميرانديز",mwr:"الماروارية",my:"البورمية",myv:"الأرزية",mzn:"المازندرانية",na:"النورو",nan:"مين-نان الصينية",nap:"النابولية",naq:"لغة الناما",nb:"النرويجية بوكمال",nd:"النديبيل الشمالية",nds:"الألمانية السفلى","nds-NL":"السكسونية السفلى",ne:"النيبالية","new":"النوارية",ng:"الندونجا",nia:"النياس",niu:"النيوي",nl:"الهولندية","nl-BE":"الفلمنكية",nmg:"كواسيو",nn:"النرويجية نينورسك",nnh:"لغة النجيمبون",no:"النرويجية",nog:"النوجاي",non:"النورس القديم",nqo:"أنكو",nr:"النديبيل الجنوبي",nso:"السوتو الشمالية",nus:"النوير",nv:"النافاجو",nwc:"النوارية التقليدية",ny:"النيانجا",nym:"النيامويزي",nyn:"النيانكول",nyo:"النيورو",nzi:"النزيما",oc:"الأوكسيتانية",oj:"الأوجيبوا",om:"الأورومية",or:"الأورية",os:"الأوسيتيك",osa:"الأوساج",ota:"التركية العثمانية",pa:"البنجابية",pag:"البانجاسينان",pal:"البهلوية",pam:"البامبانجا",pap:"البابيامينتو",pau:"البالوان",pcm:"البدجنية النيجيرية",peo:"الفارسية القديمة",phn:"الفينيقية",pi:"البالية",pl:"البولندية",pon:"البوهنبيايان",prg:"البروسياوية",pro:"البروفانسية القديمة",ps:"البشتو",pt:"البرتغالية","pt-BR":"البرتغالية البرازيلية","pt-PT":"البرتغالية الأوروبية",qu:"الكويتشوا",quc:"الكيشية",raj:"الراجاسثانية",rap:"الراباني",rar:"الراروتونجاني",rm:"الرومانشية",rn:"الرندي",ro:"الرومانية","ro-MD":"المولدوفية",rof:"الرومبو",rom:"الغجرية",root:"الجذر",ru:"الروسية",rup:"الأرومانيان",rw:"الكينيارواندا",rwk:"الروا",sa:"السنسكريتية",sad:"السانداوي",sah:"الساخيّة",sam:"الآرامية السامرية",saq:"سامبورو",sas:"الساساك",sat:"السانتالية",sba:"نامبي",sbp:"سانغو",sc:"السردينية",scn:"الصقلية",sco:"الأسكتلندية",sd:"السندية",sdh:"الكردية الجنوبية",se:"سامي الشمالية",see:"السنيكا",seh:"سينا",sel:"السيلكب",ses:"كويرابورو سيني",sg:"السانجو",sga:"الأيرلندية القديمة",sh:"صربية-كرواتية",shi:"تشلحيت",shn:"الشان",shu:"العربية التشادية",si:"السنهالية",sid:"السيدامو",sk:"السلوفاكية",sl:"السلوفانية",sm:"الساموائية",sma:"السامي الجنوبي",smj:"اللول سامي",smn:"الإيناري سامي",sms:"السكولت سامي",sn:"الشونا",snk:"السونينك",so:"الصومالية",sog:"السوجدين",sq:"الألبانية",sr:"الصربية",srn:"السرانان تونجو",srr:"السرر",ss:"السواتي",ssy:"لغة الساهو",st:"السوتو الجنوبية",su:"السوندانية",suk:"السوكوما",sus:"السوسو",sux:"السومارية",sv:"السويدية",sw:"السواحلية","sw-CD":"الكونغو السواحلية",swb:"القمرية",syc:"سريانية تقليدية",syr:"السريانية",ta:"التاميلية",te:"التيلوغوية",tem:"التيمن",teo:"تيسو",ter:"التيرينو",tet:"التيتم",tg:"الطاجيكية",th:"التايلاندية",ti:"التغرينية",tig:"التيغرية",tiv:"التيف",tk:"التركمانية",tkl:"التوكيلاو",tl:"التاغالوغية",tlh:"الكلينجون",tli:"التلينغيتية",tmh:"التاماشيك",tn:"التسوانية",to:"التونغية",tog:"تونجا - نياسا",tpi:"التوك بيسين",tr:"التركية",trv:"لغة التاروكو",ts:"السونجا",tsi:"التسيمشيان",tt:"التترية",tum:"التامبوكا",tvl:"التوفالو",tw:"التوي",twq:"تاساواق",ty:"التاهيتية",tyv:"التوفية",tzm:"الأمازيغية وسط الأطلس",udm:"الأدمرت",ug:"الأويغورية",uga:"اليجاريتيك",uk:"الأوكرانية",umb:"الأمبندو",ur:"الأوردية",uz:"الأوزبكية",vai:"الفاي",ve:"الفيندا",vi:"الفيتنامية",vo:"لغة الفولابوك",vot:"الفوتيك",vun:"الفونجو",wa:"الولونية",wae:"الوالسر",wal:"الولاياتا",war:"الواراي",was:"الواشو",wbp:"وارلبيري",wo:"الولوفية",wuu:"الوو الصينية",xal:"الكالميك",xh:"الخوسا",xog:"السوغا",yao:"الياو",yap:"اليابيز",yav:"يانجبن",ybb:"يمبا",yi:"اليديشية",yo:"اليوروبا",yue:"الكَنْتُونية",za:"الزهيونج",zap:"الزابوتيك",zbl:"رموز المعايير الأساسية",zen:"الزيناجا",zgh:"التمازيغية المغربية القياسية",zh:"الصينية","zh-Hans":"الصينية (المبسطة)","zh-Hant":"الصينية (التقليدية)",zu:"الزولو",zun:"الزونية",zza:"زازا"},scriptNames:{Cyrl:"السيريلية",Latn:"اللاتينية",Arab:"العربية",Guru:"الجرمخي",Tfng:"التيفيناغ",Vaii:"الفاي",Hans:"المبسطة",Hant:"التقليدية"}},ast:{rtl:false,languageNames:{aa:"afar",ab:"abkhazianu",ace:"achinés",ach:"acoli",ada:"adangme",ady:"adyghe",ae:"avestanín",aeb:"árabe de Túnez",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"acadianu",akz:"alabama",ale:"aleut",aln:"gheg d’Albania",alt:"altai del sur",am:"amháricu",an:"aragonés",ang:"inglés antiguu",anp:"angika",ar:"árabe","ar-001":"árabe estándar modernu",arc:"araméu",arn:"mapuche",aro:"araona",arp:"arapaho",arq:"árabe d’Arxelia",arw:"arawak",ary:"árabe de Marruecos",arz:"árabe d’Exiptu",as:"asamés",asa:"asu",ase:"llingua de signos americana",ast:"asturianu",av:"aváricu",avk:"kotava",awa:"awadhi",ay:"aymara",az:"azerbaixanu",ba:"bashkir",bal:"baluchi",ban:"balinés",bar:"bávaru",bas:"basaa",bax:"bamun",bbc:"batak toba",bbj:"ghomala",be:"bielorrusu",bej:"beja",bem:"bemba",bew:"betawi",bez:"bena",bfd:"bafut",bfq:"badaga",bg:"búlgaru",bgn:"balochi occidental",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bjn:"banjar",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalín",bo:"tibetanu",bpy:"bishnupriya",bqi:"bakhtiari",br:"bretón",bra:"braj",brh:"brahui",brx:"bodo",bs:"bosniu",bss:"akoose",bua:"buriat",bug:"buginés",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalán",cad:"caddo",car:"caribe",cay:"cayuga",cch:"atsam",ce:"chechenu",ceb:"cebuanu",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuukés",chm:"mari",chn:"xíriga chinook",cho:"choctaw",chp:"chipewyanu",chr:"cheroqui",chy:"cheyenne",ckb:"kurdu central",co:"corsu",cop:"cópticu",cps:"capiznon",cr:"cree",crh:"turcu de Crimea",crs:"francés criollu seselwa",cs:"checu",csb:"kashubianu",cu:"eslávicu eclesiásticu",cv:"chuvash",cy:"galés",da:"danés",dak:"dakota",dar:"dargwa",dav:"taita",de:"alemán","de-AT":"alemán d’Austria","de-CH":"altualemán de Suiza",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"baxu sorbiu",dtp:"dusun central",dua:"duala",dum:"neerlandés mediu",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"embú",ee:"ewe",efi:"efik",egl:"emilianu",egy:"exipciu antiguu",eka:"ekajuk",el:"griegu",elx:"elamita",en:"inglés","en-AU":"inglés d’Australia","en-CA":"inglés de Canadá","en-GB":"inglés de Gran Bretaña","en-US":"inglés d’Estaos Xuníos",enm:"inglés mediu",eo:"esperanto",es:"español","es-419":"español d’América Llatina","es-ES":"español européu","es-MX":"español de Méxicu",esu:"yupik central",et:"estoniu",eu:"vascu",ewo:"ewondo",ext:"estremeñu",fa:"persa",fan:"fang",fat:"fanti",ff:"fulah",fi:"finlandés",fil:"filipín",fit:"finlandés de Tornedalen",fj:"fixanu",fo:"feroés",fr:"francés","fr-CA":"francés de Canadá","fr-CH":"francés de Suiza",frc:"francés cajun",frm:"francés mediu",fro:"francés antiguu",frp:"arpitanu",frr:"frisón del norte",frs:"frisón oriental",fur:"friulianu",fy:"frisón occidental",ga:"irlandés",gaa:"ga",gag:"gagauz",gan:"chinu gan",gay:"gayo",gba:"gbaya",gbz:"dari zoroastrianu",gd:"gaélicu escocés",gez:"geez",gil:"gilbertés",gl:"gallegu",glk:"gilaki",gmh:"altualemán mediu",gn:"guaraní",goh:"altualemán antiguu",gom:"goan konkani",gon:"gondi",gor:"gorontalo",got:"góticu",grb:"grebo",grc:"griegu antiguu",gsw:"alemán de Suiza",gu:"guyaratí",guc:"wayuu",gur:"frafra",guz:"gusii",gv:"manés",gwi:"gwichʼin",ha:"ḥausa",hai:"haida",hak:"chinu hakka",haw:"hawaianu",he:"hebréu",hi:"hindi",hif:"hindi de Fiji",hil:"hiligaynon",hit:"hitita",hmn:"hmong",ho:"hiri motu",hr:"croata",hsb:"altu sorbiu",hsn:"chinu xiang",ht:"haitianu",hu:"húngaru",hup:"hupa",hy:"armeniu",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesiu",ie:"interlingue",ig:"igbo",ii:"yi de Sichuán",ik:"inupiaq",ilo:"iloko",inh:"ingush",io:"ido",is:"islandés",it:"italianu",iu:"inuktitut",izh:"ingrianu",ja:"xaponés",jam:"inglés criollu xamaicanu",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"xudeo-persa",jrb:"xudeo-árabe",jut:"jutlandés",jv:"xavanés",ka:"xeorxanu",kaa:"kara-kalpak",kab:"kabileñu",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardianu",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"cabuverdianu",ken:"kenyang",kfo:"koro",kg:"kongo",kgp:"kaingang",kha:"khasi",kho:"khotanés",khq:"koyra chiini",khw:"khowar",ki:"kikuyu",kiu:"kirmanjki",kj:"kuanyama",kk:"kazaquistanín",kkj:"kako",kl:"kalaallisut",kln:"kalenjin",km:"ḥemer",kmb:"kimbundu",kn:"canarés",ko:"coreanu",koi:"komi-permyak",kok:"konkani",kos:"kosraeanu",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",kri:"krio",krj:"kinaray-a",krl:"karelianu",kru:"kurukh",ks:"cachemirés",ksb:"shambala",ksf:"bafia",ksh:"colonianu",ku:"curdu",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"córnicu",ky:"kirguistanín",la:"llatín",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgués",lez:"lezghianu",lfn:"lingua franca nova",lg:"ganda",li:"limburgués",lij:"ligurianu",liv:"livonianu",lkt:"lakota",lmo:"lombardu",ln:"lingala",lo:"laosianu",lol:"mongo",loz:"lozi",lrc:"luri del norte",lt:"lituanu",ltg:"latgalianu",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letón",lzh:"chinu lliterariu",lzz:"laz",mad:"madurés",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masái",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malgaxe",mga:"írlandés mediu",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshallés",mi:"maorí",mic:"micmac",min:"minangkabau",mk:"macedoniu",ml:"malayalam",mn:"mongol",mnc:"manchú",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",mrj:"mari occidental",ms:"malayu",mt:"maltés",mua:"mundang",mus:"creek",mwl:"mirandés",mwr:"marwari",mwv:"mentawai",my:"birmanu",mye:"myene",myv:"erzya",mzn:"mazanderani",na:"nauru",nan:"chinu min nan",nap:"napolitanu",naq:"nama",nb:"noruegu Bokmål",nd:"ndebele del norte",nds:"baxu alemán","nds-NL":"baxu saxón",ne:"nepalés","new":"newari",ng:"ndonga",nia:"nias",niu:"niueanu",njo:"ao naga",nl:"neerlandés","nl-BE":"flamencu",nmg:"kwasio",nn:"noruegu Nynorsk",nnh:"ngiemboon",no:"noruegu",nog:"nogai",non:"noruegu antiguu",nov:"novial",nqo:"n’ko",nr:"ndebele del sur",nso:"sotho del norte",nus:"nuer",nv:"navajo",nwc:"newari clásicu",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitanu",oj:"ojibwa",om:"oromo",or:"oriya",os:"oséticu",osa:"osage",ota:"turcu otomanu",pa:"punyabí",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauanu",pcd:"pícaru",pcm:"nixerianu simplificáu",pdc:"alemán de Pennsylvania",pdt:"plautdietsch",peo:"persa antiguu",pfl:"alemán palatinu",phn:"feniciu",pi:"pali",pl:"polacu",pms:"piamontés",pnt:"pónticu",pon:"pohnpeianu",prg:"prusianu",pro:"provenzal antiguu",ps:"pashtu",pt:"portugués","pt-BR":"portugués del Brasil","pt-PT":"portugués européu",qu:"quechua",quc:"kʼicheʼ",qug:"quichua del altiplanu de Chimborazo",raj:"rajasthanín",rap:"rapanui",rar:"rarotonganu",rgn:"romañol",rif:"rifianu",rm:"romanche",rn:"rundi",ro:"rumanu","ro-MD":"moldavu",rof:"rombo",rom:"romaní",rtm:"rotumanu",ru:"rusu",rue:"rusyn",rug:"roviana",rup:"aromanianu",rw:"kinyarwanda",rwk:"rwa",sa:"sánscritu",sad:"sandavés",sah:"sakha",sam:"araméu samaritanu",saq:"samburu",sas:"sasak",sat:"santali",saz:"saurashtra",sba:"ngambay",sbp:"sangu",sc:"sardu",scn:"sicilianu",sco:"scots",sd:"sindhi",sdc:"sardu sassarés",sdh:"kurdu del sur",se:"sami del norte",see:"séneca",seh:"sena",sei:"seri",sel:"selkup",ses:"koyraboro senni",sg:"sango",sga:"irlandés antiguu",sgs:"samogitianu",sh:"serbo-croata",shi:"tachelhit",shn:"shan",shu:"árabe chadianu",si:"cingalés",sid:"sidamo",sk:"eslovacu",sl:"eslovenu",sli:"baxu silesianu",sly:"selayarés",sm:"samoanu",sma:"sami del sur",smj:"lule sami",smn:"inari sami",sms:"skolt sami",sn:"shona",snk:"soninke",so:"somalín",sog:"sogdianu",sq:"albanu",sr:"serbiu",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sotho del sur",stq:"frisón de Saterland",su:"sondanés",suk:"sukuma",sus:"susu",sux:"sumeriu",sv:"suecu",sw:"suaḥili","sw-CD":"suaḥili del Congu",swb:"comorianu",syc:"siriacu clásicu",syr:"siriacu",szl:"silesianu",ta:"tamil",tcy:"tulu",te:"telugu",tem:"timne",teo:"teso",ter:"terena",tet:"tetum",tg:"taxiquistanín",th:"tailandés",ti:"tigrinya",tig:"tigre",tk:"turcomanu",tkl:"tokelau",tkr:"tsakhur",tl:"tagalog",tlh:"klingon",tli:"tlingit",tly:"talixín",tmh:"tamashek",tn:"tswana",to:"tonganu",tog:"tonga nyasa",tpi:"tok pisin",tr:"turcu",tru:"turoyo",trv:"taroko",ts:"tsonga",tsd:"tsakoniu",tsi:"tsimshian",tt:"tártaru",ttt:"tati musulmán",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahitianu",tyv:"tuvinianu",tzm:"tamazight del Atles central",udm:"udmurt",ug:"uigur",uga:"ugaríticu",uk:"ucraín",umb:"umbundu",ur:"urdu",uz:"uzbequistanín",ve:"venda",vec:"venecianu",vep:"vepsiu",vi:"vietnamín",vls:"flamencu occidental",vmf:"franconianu del Main",vo:"volapük",vot:"vóticu",vro:"voro",vun:"vunjo",wa:"valón",wae:"walser",wal:"wolaytta",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"chinu wu",xal:"calmuco",xh:"xhosa",xmf:"mingrelianu",xog:"soga",yap:"yapés",yav:"yangben",ybb:"yemba",yi:"yiddish",yo:"yoruba",yrl:"nheengatu",yue:"cantonés",za:"zhuang",zap:"zapoteca",zbl:"simbólicu Bliss",zea:"zeelandés",zen:"zenaga",zgh:"tamazight estándar de Marruecos",zh:"chinu","zh-Hans":"chinu (simplificáu)","zh-Hant":"chinu (tradicional)",zu:"zulú",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"cirílicu",Latn:"llatín",Arab:"árabe",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vai",Hans:"simplificáu",Hant:"tradicional"}},be:{rtl:false,languageNames:{aa:"афарская",ab:"абхазская",ace:"ачэх",ada:"адангмэ",ady:"адыгейская",af:"афрыкаанс",agq:"агем",ain:"айнская",ak:"акан",akk:"акадская",ale:"алеуцкая",alt:"паўднёваалтайская",am:"амхарская",an:"арагонская",ang:"стараанглійская",anp:"ангіка",ar:"арабская","ar-001":"сучасная стандартная арабская",arc:"арамейская",arn:"мапудунгун",arp:"арапаха",as:"асамская",asa:"асу",ast:"астурыйская",av:"аварская",awa:"авадхі",ay:"аймара",az:"азербайджанская",ba:"башкірская",ban:"балійская",bas:"басаа",be:"беларуская",bem:"бемба",bez:"бена",bg:"балгарская",bgn:"заходняя белуджская",bho:"бхаджпуры",bi:"біслама",bin:"эда",bla:"блэкфут",bm:"бамбара",bn:"бенгальская",bo:"тыбецкая",br:"брэтонская",brx:"бода",bs:"баснійская",bua:"бурацкая",bug:"бугіс",byn:"білен",ca:"каталанская",ccp:"чакма",ce:"чачэнская",ceb:"себуана",cgg:"чыга",ch:"чамора",chb:"чыбча",chk:"чуук",chm:"мары",cho:"чокта",chr:"чэрокі",chy:"шэйен",ckb:"цэнтральнакурдская",co:"карсіканская",cop:"копцкая",crs:"сэсэльва",cs:"чэшская",cu:"царкоўнаславянская",cv:"чувашская",cy:"валійская",da:"дацкая",dak:"дакота",dar:"даргінская",dav:"таіта",de:"нямецкая","de-AT":"аўстрыйская нямецкая","de-CH":"швейцарская літаратурная нямецкая",dgr:"догрыб",dje:"зарма",dsb:"ніжнялужыцкая",dua:"дуала",dv:"мальдыўская",dyo:"джола-фоньі",dz:"дзонг-кэ",dzg:"дазага",ebu:"эмбу",ee:"эве",efi:"эфік",egy:"старажытнаегіпецкая",eka:"экаджук",el:"грэчаская",en:"англійская","en-AU":"аўстралійская англійская","en-CA":"канадская англійская","en-GB":"брытанская англійская","en-US":"амерыканская англійская",eo:"эсперанта",es:"іспанская","es-419":"лацінаамерыканская іспанская","es-ES":"еўрапейская іспанская","es-MX":"мексіканская іспанская",et:"эстонская",eu:"баскская",ewo:"эвонда",fa:"фарсі",ff:"фула",fi:"фінская",fil:"філіпінская",fj:"фіджыйская",fo:"фарэрская",fon:"фон",fr:"французская","fr-CA":"канадская французская","fr-CH":"швейцарская французская",fro:"старафранцузская",fur:"фрыульская",fy:"заходняя фрызская",ga:"ірландская",gaa:"га",gag:"гагаузская",gd:"шатландская гэльская",gez:"геэз",gil:"кірыбаці",gl:"галісійская",gn:"гуарані",gor:"гарантала",grc:"старажытнагрэчаская",gsw:"швейцарская нямецкая",gu:"гуджараці",guz:"гусіі",gv:"мэнская",gwi:"гуіч’ін",ha:"хауса",haw:"гавайская",he:"іўрыт",hi:"хіндзі",hil:"хілігайнон",hmn:"хмонг",hr:"харвацкая",hsb:"верхнялужыцкая",ht:"гаіцянская крэольская",hu:"венгерская",hup:"хупа",hy:"армянская",hz:"герэра",ia:"інтэрлінгва",iba:"ібан",ibb:"ібібія",id:"інданезійская",ie:"інтэрлінгвэ",ig:"ігба",ii:"сычуаньская йі",ilo:"ілакана",inh:"інгушская",io:"іда",is:"ісландская",it:"італьянская",iu:"інуктытут",ja:"японская",jbo:"ложбан",jgo:"нгомба",jmc:"мачамбэ",jv:"яванская",ka:"грузінская",kab:"кабільская",kac:"качынская",kaj:"дджу",kam:"камба",kbd:"кабардзінская",kcg:"т’яп",kde:"макондэ",kea:"кабувердыяну",kfo:"кора",kha:"кхасі",khq:"койра чыіні",ki:"кікуйю",kj:"куаньяма",kk:"казахская",kkj:"како",kl:"грэнландская",kln:"календжын",km:"кхмерская",kmb:"кімбунду",kn:"канада",ko:"карэйская",koi:"комі-пярмяцкая",kok:"канкані",kpe:"кпеле",kr:"кануры",krc:"карачай-балкарская",krl:"карэльская",kru:"курух",ks:"кашмірская",ksb:"шамбала",ksf:"бафія",ksh:"кёльнская",ku:"курдская",kum:"кумыцкая",kv:"комі",kw:"корнская",ky:"кіргізская",la:"лацінская",lad:"ладына",lag:"лангі",lb:"люксембургская",lez:"лезгінская",lg:"ганда",li:"лімбургская",lkt:"лакота",ln:"лінгала",lo:"лаоская",lol:"монга",loz:"лозі",lrc:"паўночная луры",lt:"літоўская",lu:"луба-катанга",lua:"луба-касаі",lun:"лунда",luo:"луо",lus:"мізо",luy:"луйя",lv:"латышская",mad:"мадурская",mag:"магахі",mai:"майтхілі",mak:"макасар",man:"мандынг",mas:"маасай",mdf:"макшанская",men:"мендэ",mer:"меру",mfe:"марысьен",mg:"малагасійская",mgh:"макуўа-меета",mgo:"мета",mh:"маршальская",mi:"маары",mic:"мікмак",min:"мінангкабау",mk:"македонская",ml:"малаялам",mn:"мангольская",mni:"мейтэй",moh:"мохак",mos:"мосі",mr:"маратхі",ms:"малайская",mt:"мальтыйская",mua:"мунданг",mus:"мускогі",mwl:"мірандыйская",my:"бірманская",myv:"эрзянская",mzn:"мазандэранская",na:"науру",nap:"неапалітанская",naq:"нама",nb:"нарвежская (букмол)",nd:"паўночная ндэбеле",nds:"ніжненямецкая","nds-NL":"ніжнесаксонская",ne:"непальская","new":"неўары",ng:"ндонга",nia:"ніас",niu:"ніўэ",nl:"нідэрландская","nl-BE":"фламандская",nmg:"нгумба",nn:"нарвежская (нюношк)",nnh:"нг’ембон",no:"нарвежская",nog:"нагайская",non:"старанарвежская",nqo:"нко",nr:"паўднёвая ндэбеле",nso:"паўночная сота",nus:"нуэр",nv:"наваха",ny:"ньянджа",nyn:"ньянколе",oc:"аксітанская",oj:"аджыбва",om:"арома",or:"орыя",os:"асецінская",pa:"панджабі",pag:"пангасінан",pam:"пампанга",pap:"пап’яменту",pau:"палау",pcm:"нігерыйскі піджын",peo:"стараперсідская",phn:"фінікійская",pl:"польская",prg:"пруская",pro:"стараправансальская",ps:"пушту",pt:"партугальская","pt-BR":"бразільская партугальская","pt-PT":"еўрапейская партугальская",qu:"кечуа",quc:"кічэ",raj:"раджастханская",rap:"рапануі",rar:"раратонг",rm:"рэтараманская",rn:"рундзі",ro:"румынская","ro-MD":"малдаўская",rof:"ромба",root:"корань",ru:"руская",rup:"арумунская",rw:"руанда",rwk:"руа",sa:"санскрыт",sad:"сандаўэ",sah:"якуцкая",saq:"самбуру",sat:"санталі",sba:"нгамбай",sbp:"сангу",sc:"сардзінская",scn:"сіцылійская",sco:"шатландская",sd:"сіндхі",sdh:"паўднёвакурдская",se:"паўночнасаамская",seh:"сена",ses:"кайрабора сэні",sg:"санга",sga:"стараірландская",sh:"сербскахарвацкая",shi:"ташэльхіт",shn:"шан",si:"сінгальская",sk:"славацкая",sl:"славенская",sm:"самоа",sma:"паўднёвасаамская",smj:"луле-саамская",smn:"інары-саамская",sms:"колта-саамская",sn:"шона",snk:"санінке",so:"самалі",sq:"албанская",sr:"сербская",srn:"сранан-тонга",ss:"суаці",ssy:"саха",st:"сесута",su:"сунда",suk:"сукума",sux:"шумерская",sv:"шведская",sw:"суахілі","sw-CD":"кангалезская суахілі",swb:"каморская",syr:"сірыйская",ta:"тамільская",te:"тэлугу",tem:"тэмнэ",teo:"тэсо",tet:"тэтум",tg:"таджыкская",th:"тайская",ti:"тыгрынья",tig:"тыгрэ",tk:"туркменская",tlh:"клінган",tn:"тсвана",to:"танганская",tpi:"ток-пісін",tr:"турэцкая",trv:"тарока",ts:"тсонга",tt:"татарская",tum:"тумбука",tvl:"тувалу",twq:"тасаўак",ty:"таіці",tyv:"тувінская",tzm:"сярэднеатлаская тамазігхт",udm:"удмурцкая",ug:"уйгурская",uk:"украінская",umb:"умбунду",ur:"урду",uz:"узбекская",vai:"ваі",ve:"венда",vi:"в’етнамская",vo:"валапюк",vun:"вунджо",wa:"валонская",wae:"вальшская",wal:"волайта",war:"варай",wbp:"варлпіры",wo:"валоф",xal:"калмыцкая",xh:"коса",xog:"сога",yav:"янгбэн",ybb:"йемба",yi:"ідыш",yo:"ёруба",yue:"кантонскі дыялект кітайскай",zap:"сапатэк",zgh:"стандартная мараканская тамазіхт",zh:"кітайская","zh-Hans":"паўночнакітайская (спрошчаныя іерогліфы)","zh-Hant":"паўночнакітайская (традыцыйныя іерогліфы)",zu:"зулу",zun:"зуні",zza:"зазакі"},scriptNames:{Cyrl:"кірыліца",Latn:"лацініца",Arab:"арабскае",Guru:"гурмукхі",Hans:"спрошчанае кітайскае",Hant:"традыцыйнае кітайскае"}},bg:{rtl:false,languageNames:{aa:"афарски",ab:"абхазки",ace:"ачешки",ach:"аколи",ada:"адангме",ady:"адигейски",ae:"авестски",af:"африканс",afh:"африхили",agq:"агем",ain:"айну",ak:"акан",akk:"акадски",ale:"алеутски",alt:"южноалтайски",am:"амхарски",an:"арагонски",ang:"староанглийски",anp:"ангика",ar:"арабски","ar-001":"съвременен стандартен арабски",arc:"арамейски",arn:"мапуче",arp:"арапахо",arw:"аравак",as:"асамски",asa:"асу",ast:"астурски",av:"аварски",awa:"авади",ay:"аймара",az:"азербайджански",ba:"башкирски",bal:"балучи",ban:"балийски",bas:"баса",be:"беларуски",bej:"бея",bem:"бемба",bez:"бена",bg:"български",bgn:"западен балочи",bho:"боджпури",bi:"бислама",bik:"биколски",bin:"бини",bla:"сиксика",bm:"бамбара",bn:"бенгалски",bo:"тибетски",br:"бретонски",bra:"брадж",brx:"бодо",bs:"босненски",bua:"бурятски",bug:"бугински",byn:"биленски",ca:"каталонски",cad:"каддо",car:"карибски",cch:"атсам",ce:"чеченски",ceb:"себуански",cgg:"чига",ch:"чаморо",chb:"чибча",chg:"чагатай",chk:"чуук",chm:"марийски",chn:"жаргон чинуук",cho:"чокто",chp:"чиипувски",chr:"черокски",chy:"шайенски",ckb:"кюрдски (централен)",co:"корсикански",cop:"коптски",cr:"крии",crh:"кримскотатарски",crs:"сеселва, креолски френски",cs:"чешки",csb:"кашубски",cu:"църковнославянски",cv:"чувашки",cy:"уелски",da:"датски",dak:"дакотски",dar:"даргински",dav:"таита",de:"немски","de-AT":"немски (Австрия)","de-CH":"немски (Швейцария)",del:"делауер",den:"слейви",dgr:"догриб",din:"динка",dje:"зарма",doi:"догри",dsb:"долнолужишки",dua:"дуала",dum:"средновековен холандски",dv:"дивехи",dyo:"диола-фони",dyu:"диула",dz:"дзонгкха",dzg:"дазага",ebu:"ембу",ee:"еве",efi:"ефик",egy:"древноегипетски",eka:"екажук",el:"гръцки",elx:"еламитски",en:"английски","en-AU":"английски (Австралия)","en-CA":"английски (Канада)","en-GB":"английски (Обединено кралство)","en-US":"английски (САЩ)",enm:"средновековен английски",eo:"есперанто",es:"испански","es-419":"испански (Латинска Америка)","es-ES":"испански (Испания)","es-MX":"испански (Мексико)",et:"естонски",eu:"баски",ewo:"евондо",fa:"персийски",fan:"фанг",fat:"фанти",ff:"фула",fi:"фински",fil:"филипински",fj:"фиджийски",fo:"фарьорски",fon:"фон",fr:"френски","fr-CA":"френски (Канада)","fr-CH":"френски (Швейцария)",frm:"средновековен френски",fro:"старофренски",frr:"северен фризски",frs:"източнофризийски",fur:"фриулски",fy:"западнофризийски",ga:"ирландски",gaa:"га",gag:"гагаузки",gay:"гайо",gba:"гбая",gd:"шотландски келтски",gez:"гииз",gil:"гилбертски",gl:"галисийски",gmh:"средновисоконемски",gn:"гуарани",goh:"старовисоконемски",gon:"гонди",gor:"горонтало",got:"готически",grb:"гребо",grc:"древногръцки",gsw:"швейцарски немски",gu:"гуджарати",guz:"гусии",gv:"манкски",gwi:"гвичин",ha:"хауса",hai:"хайда",haw:"хавайски",he:"иврит",hi:"хинди",hil:"хилигайнон",hit:"хитски",hmn:"хмонг",ho:"хири моту",hr:"хърватски",hsb:"горнолужишки",ht:"хаитянски креолски",hu:"унгарски",hup:"хупа",hy:"арменски",hz:"хереро",ia:"интерлингва",iba:"ибан",ibb:"ибибио",id:"индонезийски",ie:"оксидентал",ig:"игбо",ii:"съчуански йи",ik:"инупиак",ilo:"илоко",inh:"ингушетски",io:"идо",is:"исландски",it:"италиански",iu:"инуктитут",ja:"японски",jbo:"ложбан",jgo:"нгомба",jmc:"мачаме",jpr:"юдео-персийски",jrb:"юдео-арабски",jv:"явански",ka:"грузински",kaa:"каракалпашки",kab:"кабилски",kac:"качински",kaj:"жжу",kam:"камба",kaw:"кави",kbd:"кабардиан",kcg:"туап",kde:"маконде",kea:"кабовердиански",kfo:"коро",kg:"конгоански",kha:"кхаси",kho:"котски",khq:"койра чиини",ki:"кикую",kj:"кваняма",kk:"казахски",kkj:"како",kl:"гренландски",kln:"календжин",km:"кхмерски",kmb:"кимбунду",kn:"каннада",ko:"корейски",koi:"коми-пермякски",kok:"конкани",kos:"косраен",kpe:"кпеле",kr:"канури",krc:"карачай-балкарски",krl:"карелски",kru:"курук",ks:"кашмирски",ksb:"шамбала",ksf:"бафия",ksh:"кьолнски",ku:"кюрдски",kum:"кумикски",kut:"кутенай",kv:"коми",kw:"корнуолски",ky:"киргизки",la:"латински",lad:"ладино",lag:"ланги",lah:"лахнда",lam:"ламба",lb:"люксембургски",lez:"лезгински",lg:"ганда",li:"лимбургски",lkt:"лакота",ln:"лингала",lo:"лаоски",lol:"монго",loz:"лози",lrc:"северен лури",lt:"литовски",lu:"луба-катанга",lua:"луба-лулуа",lui:"луисеньо",lun:"лунда",luo:"луо",lus:"мизо",luy:"лухя",lv:"латвийски",mad:"мадурски",mag:"магахи",mai:"майтхили",mak:"макасар",man:"мандинго",mas:"масайски",mdf:"мокша",mdr:"мандар",men:"менде",mer:"меру",mfe:"морисиен",mg:"малгашки",mga:"средновековен ирландски",mgh:"макуа мето",mgo:"мета",mh:"маршалезе",mi:"маорски",mic:"микмак",min:"минангкабау",mk:"македонски",ml:"малаялам",mn:"монголски",mnc:"манджурски",mni:"манипурски",moh:"мохоук",mos:"моси",mr:"марати",ms:"малайски",mt:"малтийски",mua:"мунданг",mus:"мускогски",mwl:"мирандийски",mwr:"марвари",my:"бирмански",myv:"ерзиа",mzn:"мазандерански",na:"науру",nap:"неаполитански",naq:"нама",nb:"норвежки (букмол)",nd:"северен ндебеле",nds:"долнонемски","nds-NL":"долносаксонски",ne:"непалски","new":"неварски",ng:"ндонга",nia:"ниас",niu:"ниуеан",nl:"нидерландски","nl-BE":"фламандски",nmg:"квасио",nn:"норвежки (нюношк)",nnh:"нгиембун",no:"норвежки",nog:"ногаи",non:"старонорвежки",nqo:"нко",nr:"южен ндебеле",nso:"северен сото",nus:"нуер",nv:"навахо",nwc:"класически невари",ny:"нянджа",nym:"ниамвези",nyn:"нянколе",nyo:"нуоро",nzi:"нзима",oc:"окситански",oj:"оджибва",om:"оромо",or:"ория",os:"осетински",osa:"осейджи",ota:"отомански турски",pa:"пенджабски",pag:"пангасинан",pal:"пахлави",pam:"пампанга",pap:"папиаменто",pau:"палауан",pcm:"нигерийски пиджин",peo:"староперсийски",phn:"финикийски",pi:"пали",pl:"полски",pon:"понапеан",prg:"пруски",pro:"старопровансалски",ps:"пущу",pt:"португалски","pt-BR":"португалски (Бразилия)","pt-PT":"португалски (Португалия)",qu:"кечуа",quc:"киче",raj:"раджастански",rap:"рапа нуи",rar:"раротонга",rm:"реторомански",rn:"рунди",ro:"румънски","ro-MD":"молдовски",rof:"ромбо",rom:"ромски",root:"роот",ru:"руски",rup:"арумънски",rw:"киняруанда",rwk:"рва",sa:"санскрит",sad:"сандаве",sah:"сакха",sam:"самаритански арамейски",saq:"самбуру",sas:"сасак",sat:"сантали",sba:"нгамбай",sbp:"сангу",sc:"сардински",scn:"сицилиански",sco:"шотландски",sd:"синдхи",sdh:"южнокюрдски",se:"северносаамски",seh:"сена",sel:"селкуп",ses:"койраборо сени",sg:"санго",sga:"староирландски",sh:"сърбохърватски",shi:"ташелхит",shn:"шан",si:"синхалски",sid:"сидамо",sk:"словашки",sl:"словенски",sm:"самоански",sma:"южносаамски",smj:"луле-саамски",smn:"инари-саамски",sms:"сколт-саамски",sn:"шона",snk:"сонинке",so:"сомалийски",sog:"согдийски",sq:"албански",sr:"сръбски",srn:"сранан тонго",srr:"серер",ss:"свати",ssy:"сахо",st:"сото",su:"сундански",suk:"сукума",sus:"сусу",sux:"шумерски",sv:"шведски",sw:"суахили","sw-CD":"конгоански суахили",swb:"коморски",syc:"класически сирийски",syr:"сирийски",ta:"тамилски",te:"телугу",tem:"темне",teo:"тесо",ter:"терено",tet:"тетум",tg:"таджикски",th:"тайски",ti:"тигриня",tig:"тигре",tiv:"тив",tk:"туркменски",tkl:"токелайски",tl:"тагалог",tlh:"клингонски",tli:"тлингит",tmh:"тамашек",tn:"тсвана",to:"тонгански",tog:"нианса тонга",tpi:"ток писин",tr:"турски",trv:"тароко",ts:"цонга",tsi:"цимшиански",tt:"татарски",tum:"тумбука",tvl:"тувалуански",tw:"туи",twq:"тасавак",ty:"таитянски",tyv:"тувински",tzm:"централноатласки тамазигт",udm:"удмуртски",ug:"уйгурски",uga:"угаритски",uk:"украински",umb:"умбунду",ur:"урду",uz:"узбекски",vai:"ваи",ve:"венда",vi:"виетнамски",vo:"волапюк",vot:"вотик",vun:"вунджо",wa:"валонски",wae:"валзерски немски",wal:"валамо",war:"варай",was:"уашо",wbp:"валпири",wo:"волоф",xal:"калмик",xh:"ксоса",xog:"сога",yao:"яо",yap:"япезе",yav:"янгбен",ybb:"йемба",yi:"идиш",yo:"йоруба",yue:"кантонски",za:"зуанг",zap:"запотек",zbl:"блис символи",zen:"зенага",zgh:"стандартен марокански тамазигт",zh:"китайски","zh-Hans":"китайски, мандарин (опростен)","zh-Hant":"китайски, мандарин (традиционен)",zu:"зулуски",zun:"зуни",zza:"заза"},scriptNames:{Cyrl:"кирилица",Latn:"латиница",Arab:"арабска",Guru:"гурмукхи",Vaii:"Вайска",Hans:"опростена",Hant:"традиционна"}},bn:{rtl:false,languageNames:{aa:"আফার",ab:"আবখাজিয়ান",ace:"অ্যাচাইনিজ",ach:"আকোলি",ada:"অদাগ্মে",ady:"আদেগে",ae:"আবেস্তীয়",af:"আফ্রিকান",afh:"আফ্রিহিলি",agq:"এঘেম",ain:"আইনু",ak:"আকান",akk:"আক্কাদিয়ান",ale:"আলেউত",alt:"দক্ষিন আলতাই",am:"আমহারিক",an:"আর্গোনিজ",ang:"প্রাচীন ইংরেজী",anp:"আঙ্গিকা",ar:"আরবী","ar-001":"আধুনিক আদর্শ আরবী",arc:"আরামাইক",arn:"মাপুচি",arp:"আরাপাহো",arw:"আরাওয়াক",as:"অসমীয়া",asa:"আসু",ast:"আস্তুরিয়",av:"আভেরিক",awa:"আওয়াধি",ay:"আয়মারা",az:"আজারবাইজানী",ba:"বাশকির",bal:"বেলুচী",ban:"বালিনীয়",bas:"বাসা",be:"বেলারুশিয়",bej:"বেজা",bem:"বেম্বা",bez:"বেনা",bg:"বুলগেরিয়",bgn:"পশ্চিম বালোচি",bho:"ভোজপুরি",bi:"বিসলামা",bik:"বিকোল",bin:"বিনি",bla:"সিকসিকা",bm:"বামবারা",bn:"বাংলা",bo:"তিব্বতি",br:"ব্রেটন",bra:"ব্রাজ",brx:"বোড়ো",bs:"বসনীয়ান",bua:"বুরিয়াত",bug:"বুগিনি",byn:"ব্লিন",ca:"কাতালান",cad:"ক্যাডো",car:"ক্যারিব",cch:"আত্সাম",ccp:"চাকমা",ce:"চেচেন",ceb:"চেবুয়ানো",cgg:"চিগা",ch:"চামোরো",chb:"চিবচা",chg:"চাগাতাই",chk:"চুকি",chm:"মারি",chn:"চিনুক জার্গন",cho:"চকটোও",chp:"চিপেওয়ান",chr:"চেরোকী",chy:"শাইয়েন",ckb:"মধ্য কুর্দিশ",co:"কর্সিকান",cop:"কপটিক",cr:"ক্রি",crh:"ক্রিমিয়ান তুর্কি",crs:"সেসেলওয়া ক্রেওল ফ্রেঞ্চ",cs:"চেক",csb:"কাশুবিয়ান",cu:"চার্চ স্লাভিক",cv:"চুবাস",cy:"ওয়েলশ",da:"ডেনিশ",dak:"ডাকোটা",dar:"দার্গওয়া",dav:"তাইতা",de:"জার্মান","de-AT":"অস্ট্রিয়ান জার্মান","de-CH":"সুইস হাই জার্মান",del:"ডেলাওয়ের",den:"স্ল্যাভ",dgr:"দোগ্রীব",din:"ডিংকা",dje:"জার্মা",doi:"ডোগরি",dsb:"নিম্নতর সোর্বিয়ান",dua:"দুয়ালা",dum:"মধ্য ডাচ",dv:"দিবেহি",dyo:"জোলা-ফনী",dyu:"ডিউলা",dz:"জোঙ্গা",dzg:"দাজাগা",ebu:"এম্বু",ee:"ইউয়ি",efi:"এফিক",egy:"প্রাচীন মিশরীয়",eka:"ইকাজুক",el:"গ্রিক",elx:"এলামাইট",en:"ইংরেজি","en-AU":"অস্ট্রেলীয় ইংরেজি","en-CA":"কানাডীয় ইংরেজি","en-GB":"ব্রিটিশ ইংরেজি","en-US":"আমেরিকার ইংরেজি",enm:"মধ্য ইংরেজি",eo:"এস্পেরান্তো",es:"স্প্যানিশ","es-419":"ল্যাটিন আমেরিকান স্প্যানিশ","es-ES":"ইউরোপীয় স্প্যানিশ","es-MX":"ম্যাক্সিকান স্প্যানিশ",et:"এস্তোনীয়",eu:"বাস্ক",ewo:"ইওন্ডো",fa:"ফার্সি",fan:"ফ্যাঙ্গ",fat:"ফান্তি",ff:"ফুলাহ্",fi:"ফিনিশ",fil:"ফিলিপিনো",fj:"ফিজিআন",fo:"ফারোস",fon:"ফন",fr:"ফরাসি","fr-CA":"কানাডীয় ফরাসি","fr-CH":"সুইস ফরাসি",frc:"কাজুন ফরাসি",frm:"মধ্য ফরাসি",fro:"প্রাচীন ফরাসি",frr:"উত্তরাঞ্চলীয় ফ্রিসিয়ান",frs:"পূর্ব ফ্রিসিয়",fur:"ফ্রিউলিয়ান",fy:"পশ্চিম ফ্রিসিয়ান",ga:"আইরিশ",gaa:"গা",gag:"গাগাউজ",gay:"গায়ো",gba:"বায়া",gd:"স্কটস-গ্যেলিক",gez:"গীজ",gil:"গিলবার্টিজ",gl:"গ্যালিশিয়",gmh:"মধ্য-উচ্চ জার্মানি",gn:"গুয়ারানি",goh:"প্রাচীন উচ্চ জার্মানি",gon:"গোন্ডি",gor:"গোরোন্তালো",got:"গথিক",grb:"গ্রেবো",grc:"প্রাচীন গ্রীক",gsw:"সুইস জার্মান",gu:"গুজরাটি",guz:"গুসী",gv:"ম্যাঙ্কস",gwi:"গওইচ্’ইন",ha:"হাউসা",hai:"হাইডা",haw:"হাওয়াইয়ান",he:"হিব্রু",hi:"হিন্দি",hil:"হিলিগ্যায়নোন",hit:"হিট্টিট",hmn:"হ্‌মোঙ",ho:"হিরি মোতু",hr:"ক্রোয়েশীয়",hsb:"উচ্চ সোর্বিয়ান",hsn:"Xiang চীনা",ht:"হাইতিয়ান ক্রেওল",hu:"হাঙ্গেরীয়",hup:"হুপা",hy:"আর্মেনিয়",hz:"হেরেরো",ia:"ইন্টারলিঙ্গুয়া",iba:"ইবান",ibb:"ইবিবিও",id:"ইন্দোনেশীয়",ie:"ইন্টারলিঙ্গ",ig:"ইগ্‌বো",ii:"সিচুয়ান য়ি",ik:"ইনুপিয়াক",ilo:"ইলোকো",inh:"ইঙ্গুশ",io:"ইডো",is:"আইসল্যান্ডীয়",it:"ইতালিয়",iu:"ইনুক্টিটুট",ja:"জাপানি",jbo:"লোজবান",jgo:"গোম্বা",jmc:"মাকামে",jpr:"জুদেও ফার্সি",jrb:"জুদেও আরবি",jv:"জাভানিজ",ka:"জর্জিয়ান",kaa:"কারা-কাল্পাক",kab:"কাবাইলে",kac:"কাচিন",kaj:"অজ্জু",kam:"কাম্বা",kaw:"কাউই",kbd:"কাবার্ডিয়ান",kcg:"টাইয়াপ",kde:"মাকোন্দে",kea:"কাবুভারদিয়ানু",kfo:"কোরো",kg:"কঙ্গো",kha:"খাশি",kho:"খোটানিজ",khq:"কোয়রা চীনি",ki:"কিকুয়ু",kj:"কোয়ানিয়ামা",kk:"কাজাখ",kkj:"কাকো",kl:"ক্যালাল্লিসুট",kln:"কালেনজিন",km:"খমের",kmb:"কিম্বুন্দু",kn:"কন্নড়",ko:"কোরিয়ান",koi:"কমি-পারমিআক",kok:"কোঙ্কানি",kos:"কোস্রাইন",kpe:"ক্‌পেল্লে",kr:"কানুরি",krc:"কারচে-বাল্কার",krl:"কারেলিয়ান",kru:"কুরুখ",ks:"কাশ্মীরি",ksb:"শাম্বালা",ksf:"বাফিয়া",ksh:"কলোনিয়ান",ku:"কুর্দিশ",kum:"কুমিক",kut:"কুটেনাই",kv:"কোমি",kw:"কর্ণিশ",ky:"কির্গিজ",la:"লাতিন",lad:"লাডিনো",lag:"লাঙ্গি",lah:"লান্ডা",lam:"লাম্বা",lb:"লুক্সেমবার্গীয়",lez:"লেজঘিয়ান",lg:"গান্ডা",li:"লিম্বুর্গিশ",lkt:"লাকোটা",ln:"লিঙ্গালা",lo:"লাও",lol:"মোঙ্গো",lou:"লুইসিয়ানা ক্রেওল",loz:"লোজি",lrc:"উত্তর লুরি",lt:"লিথুয়েনীয়",lu:"লুবা-কাটাঙ্গা",lua:"লুবা-লুলুয়া",lui:"লুইসেনো",lun:"লুন্ডা",luo:"লুয়ো",lus:"মিজো",luy:"লুইয়া",lv:"লাত্‌ভীয়",mad:"মাদুরেসে",mag:"মাগাহি",mai:"মৈথিলি",mak:"ম্যাকাসার",man:"ম্যান্ডিঙ্গো",mas:"মাসাই",mdf:"মোকশা",mdr:"ম্যাণ্ডার",men:"মেন্ডে",mer:"মেরু",mfe:"মরিসিয়ান",mg:"মালাগাসি",mga:"মধ্য আইরিশ",mgh:"মাখুয়া-মেত্তো",mgo:"মেটা",mh:"মার্শালিজ",mi:"মাওরি",mic:"মিকম্যাক",min:"মিনাংকাবাউ",mk:"ম্যাসিডোনীয়",ml:"মালায়ালাম",mn:"মঙ্গোলিয়",mnc:"মাঞ্চু",mni:"মণিপুরী",moh:"মোহাওক",mos:"মসি",mr:"মারাঠি",ms:"মালয়",mt:"মল্টিয়",mua:"মুদাঙ্গ",mus:"ক্রিক",mwl:"মিরান্ডিজ",mwr:"মারোয়ারি",my:"বর্মি",myv:"এরজিয়া",mzn:"মাজানদেরানি",na:"নাউরু",nap:"নেয়াপোলিটান",naq:"নামা",nb:"নরওয়েজিয়ান বোকমাল",nd:"উত্তর এন্দেবিলি",nds:"নিম্ন জার্মানি","nds-NL":"লো স্যাক্সন",ne:"নেপালী","new":"নেওয়ারি",ng:"এন্দোঙ্গা",nia:"নিয়াস",niu:"নিউয়ান",nl:"ওলন্দাজ","nl-BE":"ফ্লেমিশ",nmg:"কোয়াসিও",nn:"নরওয়েজীয়ান নিনর্স্ক",nnh:"নিঙ্গেম্বুন",no:"নরওয়েজীয়",nog:"নোগাই",non:"প্রাচীন নর্স",nqo:"এন’কো",nr:"দক্ষিণ এনডেবেলে",nso:"উত্তরাঞ্চলীয় সোথো",nus:"নুয়ার",nv:"নাভাজো",nwc:"প্রাচীন নেওয়ারী",ny:"নায়াঞ্জা",nym:"ন্যায়ামওয়েজি",nyn:"ন্যায়াঙ্কোলে",nyo:"ন্যোরো",nzi:"এনজিমা",oc:"অক্সিটান",oj:"ওজিবওয়া",om:"অরোমো",or:"ওড়িয়া",os:"ওসেটিক",osa:"ওসেজ",ota:"অটোমান তুর্কি",pa:"পাঞ্জাবী",pag:"পাঙ্গাসিনান",pal:"পাহ্লাভি",pam:"পাম্পাঙ্গা",pap:"পাপিয়ামেন্টো",pau:"পালায়ুয়ান",pcm:"নাইজেরিয় পিজিন",peo:"প্রাচীন ফার্সি",phn:"ফোনিশীয়ান",pi:"পালি",pl:"পোলিশ",pon:"পোহ্নপেইয়ান",prg:"প্রুশিয়ান",pro:"প্রাচীন প্রোভেনসাল",ps:"পুশতু",pt:"পর্তুগীজ","pt-BR":"ব্রাজিলের পর্তুগীজ","pt-PT":"ইউরোপের পর্তুগীজ",qu:"কেচুয়া",quc:"কি‘চে",raj:"রাজস্থানী",rap:"রাপানুই",rar:"রারোটোংগান",rm:"রোমান্স",rn:"রুন্দি",ro:"রোমানীয়","ro-MD":"মলদাভিয়",rof:"রম্বো",rom:"রোমানি",root:"মূল",ru:"রুশ",rup:"আরমেনিয়ান",rw:"কিনয়ারোয়ান্ডা",rwk:"রাওয়া",sa:"সংস্কৃত",sad:"স্যান্ডাওয়ে",sah:"শাখা",sam:"সামারিটান আরামিক",saq:"সামবুরু",sas:"সাসাক",sat:"সাঁওতালি",sba:"ন্যাগাম্বে",sbp:"সাঙ্গু",sc:"সার্ডিনিয়ান",scn:"সিসিলিয়ান",sco:"স্কটস",sd:"সিন্ধি",sdh:"দক্ষিণ কুর্দিশ",se:"উত্তরাঞ্চলীয় সামি",seh:"সেনা",sel:"সেল্কুপ",ses:"কোয়রাবেনো সেন্নী",sg:"সাঙ্গো",sga:"প্রাচীন আইরিশ",sh:"সার্বো-ক্রোয়েশিয়",shi:"তাচেলহিত",shn:"শান",si:"সিংহলী",sid:"সিডামো",sk:"স্লোভাক",sl:"স্লোভেনীয়",sm:"সামোয়ান",sma:"দক্ষিণাঞ্চলীয় সামি",smj:"লুলে সামি",smn:"ইনারি সামি",sms:"স্কোল্ট সামি",sn:"শোনা",snk:"সোনিঙ্কে",so:"সোমালি",sog:"সোগডিয়ান",sq:"আলবেনীয়",sr:"সার্বীয়",srn:"স্রানান টোঙ্গো",srr:"সেরের",ss:"সোয়াতি",ssy:"সাহো",st:"দক্ষিন সোথো",su:"সুদানী",suk:"সুকুমা",sus:"সুসু",sux:"সুমেরীয়",sv:"সুইডিশ",sw:"সোয়াহিলি","sw-CD":"কঙ্গো সোয়াহিলি",swb:"কমোরিয়ান",syc:"প্রাচীন সিরিও",syr:"সিরিয়াক",ta:"তামিল",te:"তেলুগু",tem:"টাইম্নে",teo:"তেসো",ter:"তেরেনো",tet:"তেতুম",tg:"তাজিক",th:"থাই",ti:"তিগরিনিয়া",tig:"টাইগ্রে",tiv:"টিভ",tk:"তুর্কমেনী",tkl:"টোকেলাউ",tl:"তাগালগ",tlh:"ক্লিঙ্গন",tli:"ত্লিঙ্গিট",tmh:"তামাশেক",tn:"সোয়ানা",to:"টোঙ্গান",tog:"নায়াসা টোঙ্গা",tpi:"টোক পিসিন",tr:"তুর্কী",trv:"তারোকো",ts:"সঙ্গা",tsi:"সিমশিয়ান",tt:"তাতার",tum:"তুম্বুকা",tvl:"টুভালু",tw:"টোয়াই",twq:"তাসাওয়াক",ty:"তাহিতিয়ান",tyv:"টুভিনিয়ান",tzm:"সেন্ট্রাল আটলাস তামাজিগাত",udm:"উডমুর্ট",ug:"উইঘুর",uga:"উগারিটিক",uk:"ইউক্রেনীয়",umb:"উম্বুন্দু",ur:"উর্দু",uz:"উজবেকীয়",vai:"ভাই",ve:"ভেন্ডা",vi:"ভিয়েতনামী",vo:"ভোলাপুক",vot:"ভোটিক",vun:"ভুঞ্জো",wa:"ওয়ালুন",wae:"ওয়ালসের",wal:"ওয়ালামো",war:"ওয়ারে",was:"ওয়াশো",wbp:"ওয়ার্লপিরি",wo:"উওলোফ",wuu:"Wu চীনা",xal:"কাল্মইক",xh:"জোসা",xog:"সোগা",yao:"ইয়াও",yap:"ইয়াপেসে",yav:"ইয়াঙ্গবেন",ybb:"ইয়েম্বা",yi:"ইয়েদ্দিশ",yo:"ইওরুবা",yue:"ক্যান্টোনিজ",za:"ঝু্য়াঙ",zap:"জাপোটেক",zbl:"চিত্র ভাষা",zen:"জেনাগা",zgh:"আদর্শ মরক্কোন তামাজিগাত",zh:"চীনা","zh-Hans":"চীনা ম্যান্ডারিন সরলীকৃত","zh-Hant":"ঐতিহ্যবাহী ম্যান্ডারিন চীনা",zu:"জুলু",zun:"জুনি",zza:"জাজা"},scriptNames:{Cyrl:"সিরিলিক",Latn:"ল্যাটিন",Arab:"আরবি",Guru:"গুরুমুখি",Tfng:"তিফিনাগ",Vaii:"ভাই",Hans:"সরলীকৃত",Hant:"ঐতিহ্যবাহী"}},bs:{rtl:false,languageNames:{aa:"afarski",ab:"abhaski",ace:"ačinski",ach:"akoli",ada:"adangmejski",ady:"adigejski",ae:"avestanski",af:"afrikans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akadijski",ale:"aleutski",alt:"južni altai",am:"amharski",an:"aragonski",ang:"staroengleski",anp:"angika",ar:"arapski","ar-001":"moderni standardni arapski",arc:"aramejski",arn:"mapuški",arp:"arapaho",arw:"aravak",as:"asamski",asa:"asu",ast:"asturijski",av:"avarski",awa:"avadhi",ay:"ajmara",az:"azerbejdžanski",ba:"baškirski",bal:"baluči",ban:"balinezijski",bas:"basa",bax:"bamunski",bbj:"gomala",be:"bjeloruski",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bugarski",bgn:"zapadni belučki",bho:"bojpuri",bi:"bislama",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalski",bo:"tibetanski",br:"bretonski",bra:"braj",brx:"bodo",bs:"bosanski",bss:"akoski",bua:"buriat",bug:"bugiški",bum:"bulu",byn:"blin",byv:"medumba",ca:"katalonski",cad:"kado",car:"karipski",cay:"kajuga",cch:"atsam",ccp:"čakma",ce:"čečenski",ceb:"cebuano",cgg:"čiga",ch:"čamoro",chb:"čibča",chg:"čagatai",chk:"čukeski",chm:"mari",chn:"činukski žargon",cho:"čoktav",chp:"čipvijanski",chr:"čeroki",chy:"čejenski",ckb:"centralnokurdski",co:"korzikanski",cop:"koptski",cr:"kri",crh:"krimski turski",crs:"seselva kreolski francuski",cs:"češki",csb:"kašubijanski",cu:"staroslavenski",cv:"čuvaški",cy:"velški",da:"danski",dak:"dakota",dar:"dargva",dav:"taita",de:"njemački","de-AT":"njemački (Austrija)","de-CH":"njemački (Švicarska)",del:"delaver",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"donjolužičkosrpski",dua:"duala",dum:"srednjovjekovni holandski",dv:"divehi",dyo:"jola-foni",dyu:"diula",dz:"džonga",dzg:"dazaga",ebu:"embu",ee:"eve",efi:"efik",egy:"staroegipatski",eka:"ekajuk",el:"grčki",elx:"elamitski",en:"engleski","en-AU":"engleski (Australija)","en-CA":"engleski (Kanada)","en-GB":"engleski (Ujedinjeno Kraljevstvo)","en-US":"engleski (Sjedinjene Države)",enm:"srednjovjekovni engleski",eo:"esperanto",es:"španski","es-419":"španski (Latinska Amerika)","es-ES":"španski (Španija)","es-MX":"španski (Meksiko)",et:"estonski",eu:"baskijski",ewo:"evondo",fa:"perzijski",fan:"fang",fat:"fanti",ff:"fulah",fi:"finski",fil:"filipino",fj:"fidžijski",fo:"farski",fr:"francuski","fr-CA":"francuski (Kanada)","fr-CH":"francuski (Švicarska)",frm:"srednjovjekovni francuski",fro:"starofrancuski",frr:"sjeverni frizijski",frs:"istočnofrizijski",fur:"friulijski",fy:"zapadni frizijski",ga:"irski",gaa:"ga",gag:"gagauški",gay:"gajo",gba:"gbaja",gd:"škotski galski",gez:"staroetiopski",gil:"gilbertski",gl:"galicijski",gmh:"srednjovjekovni gornjonjemački",gn:"gvarani",goh:"staronjemački",gon:"gondi",gor:"gorontalo",got:"gotski",grb:"grebo",grc:"starogrčki",gsw:"njemački (Švicarska)",gu:"gudžarati",guz:"gusi",gv:"manks",gwi:"gvičin",ha:"hausa",hai:"haida",haw:"havajski",he:"hebrejski",hi:"hindi",hil:"hiligajnon",hit:"hitite",hmn:"hmong",ho:"hiri motu",hr:"hrvatski",hsb:"gornjolužičkosrpski",ht:"haićanski kreolski",hu:"mađarski",hup:"hupa",hy:"armenski",hz:"herero",ia:"interlingva",iba:"iban",ibb:"ibibio",id:"indonezijski",ie:"interlingve",ig:"igbo",ii:"sičuan ji",ik:"inupiak",ilo:"iloko",inh:"ingušetski",io:"ido",is:"islandski",it:"italijanski",iu:"inuktitut",ja:"japanski",jbo:"lojban",jgo:"ngomba",jmc:"makame",jpr:"judeo-perzijski",jrb:"judeo-arapski",jv:"javanski",ka:"gruzijski",kaa:"kara-kalpak",kab:"kabile",kac:"kačin",kaj:"kaju",kam:"kamba",kaw:"kavi",kbd:"kabardijski",kbl:"kanembu",kcg:"tjap",kde:"makonde",kea:"zelenortski",kfo:"koro",kg:"kongo",kha:"kasi",kho:"kotanizijski",khq:"kojra čini",ki:"kikuju",kj:"kuanjama",kk:"kazaški",kkj:"kako",kl:"kalalisutski",kln:"kalenjin",km:"kmerski",kmb:"kimbundu",kn:"kanada",ko:"korejski",koi:"komi-permski",kok:"konkani",kos:"kosrejski",kpe:"kpele",kr:"kanuri",krc:"karačaj-balkar",kri:"krio",krl:"karelijski",kru:"kuruški",ks:"kašmirski",ksb:"šambala",ksf:"bafia",ksh:"kelnski",ku:"kurdski",kum:"kumik",kut:"kutenai",kv:"komi",kw:"kornski",ky:"kirgiški",la:"latinski",lad:"ladino",lag:"langi",lah:"landa",lam:"lamba",lb:"luksemburški",lez:"lezgijski",lg:"ganda",li:"limburški",lkt:"lakota",ln:"lingala",lo:"laoski",lol:"mongo",loz:"lozi",lrc:"sjeverni luri",lt:"litvanski",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"mizo",luy:"luhija",lv:"latvijski",mad:"madureški",maf:"mafa",mag:"magahi",mai:"maitili",mak:"makasar",man:"mandingo",mas:"masai",mde:"maba",mdf:"mokša",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauricijski kreolski",mg:"malgaški",mga:"srednjovjekovni irski",mgh:"makuva-meto",mgo:"meta",mh:"maršalski",mi:"maorski",mic:"mikmak",min:"minangkabau",mk:"makedonski",ml:"malajalam",mn:"mongolski",mnc:"manču",mni:"manipuri",moh:"mohavk",mos:"mosi",mr:"marati",ms:"malajski",mt:"malteški",mua:"mundang",mus:"kriški",mwl:"mirandeški",mwr:"marvari",my:"burmanski",mye:"mjene",myv:"erzija",mzn:"mazanderanski",na:"nauru",nap:"napolitanski",naq:"nama",nb:"norveški (Bokmal)",nd:"sjeverni ndebele",nds:"donjonjemački","nds-NL":"donjosaksonski",ne:"nepalski","new":"nevari",ng:"ndonga",nia:"nias",niu:"niue",nl:"holandski","nl-BE":"flamanski",nmg:"kvasio",nn:"norveški (Nynorsk)",nnh:"ngiembon",no:"norveški",nog:"nogai",non:"staronordijski",nqo:"nko",nr:"južni ndebele",nso:"sjeverni soto",nus:"nuer",nv:"navaho",nwc:"klasični nevari",ny:"njanja",nym:"njamvezi",nyn:"njankole",nyo:"njoro",nzi:"nzima",oc:"oksitanski",oj:"ojibva",om:"oromo",or:"odija",os:"osetski",osa:"osage",ota:"osmanski turski",pa:"pandžapski",pag:"pangasinski",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauanski",pcm:"nigerijski pidžin",peo:"staroperzijski",phn:"feničanski",pi:"pali",pl:"poljski",pon:"ponpejski",prg:"pruski",pro:"staroprovansalski",ps:"paštu",pt:"portugalski","pt-BR":"portugalski (Brazil)","pt-PT":"portugalski (Portugal)",qu:"kečua",quc:"kiče",raj:"rajastani",rap:"rapanui",rar:"rarotongan",rm:"retoromanski",rn:"rundi",ro:"rumunski","ro-MD":"moldavski",rof:"rombo",rom:"romani",root:"korijenski",ru:"ruski",rup:"arumunski",rw:"kinjaruanda",rwk:"rua",sa:"sanskrit",sad:"sandave",sah:"jakutski",sam:"samaritanski aramejski",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambaj",sbp:"sangu",sc:"sardinijski",scn:"sicilijanski",sco:"škotski",sd:"sindi",sdh:"južni kurdski",se:"sjeverni sami",see:"seneka",seh:"sena",sel:"selkup",ses:"kojraboro seni",sg:"sango",sga:"staroirski",sh:"srpskohrvatski",shi:"tahelhit",shn:"šan",shu:"čadski arapski",si:"sinhaleški",sid:"sidamo",sk:"slovački",sl:"slovenski",sm:"samoanski",sma:"južni sami",smj:"lule sami",smn:"inari sami",sms:"skolt sami",sn:"šona",snk:"soninke",so:"somalski",sog:"sogdien",sq:"albanski",sr:"srpski",srn:"srananski tongo",srr:"serer",ss:"svati",ssy:"saho",st:"južni soto",su:"sundanski",suk:"sukuma",sus:"susu",sux:"sumerski",sv:"švedski",sw:"svahili","sw-CD":"svahili (Demokratska Republika Kongo)",swb:"komorski",syc:"klasični sirijski",syr:"sirijski",ta:"tamilski",te:"telugu",tem:"timne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadžički",th:"tajlandski",ti:"tigrinja",tig:"tigre",tk:"turkmenski",tkl:"tokelau",tl:"tagalog",tlh:"klingonski",tli:"tlingit",tmh:"tamašek",tn:"tsvana",to:"tonganski",tog:"njasa tonga",tpi:"tok pisin",tr:"turski",trv:"taroko",ts:"tsonga",tsi:"tsimšian",tt:"tatarski",tum:"tumbuka",tvl:"tuvalu",tw:"tvi",twq:"tasavak",ty:"tahićanski",tyv:"tuvinijski",tzm:"centralnoatlaski tamazigt",udm:"udmurt",ug:"ujgurski",uga:"ugaritski",uk:"ukrajinski",umb:"umbundu",ur:"urdu",uz:"uzbečki",ve:"venda",vi:"vijetnamski",vo:"volapuk",vot:"votski",vun:"vunjo",wa:"valun",wae:"valser",wal:"valamo",war:"varej",was:"vašo",wbp:"varlpiri",wo:"volof",xal:"kalmik",xh:"hosa",xog:"soga",yao:"jao",yap:"japeški",yav:"jangben",ybb:"jemba",yi:"jidiš",yo:"jorubanski",yue:"kantonski",za:"zuang",zap:"zapotečki",zbl:"blis simboli",zen:"zenaga",zgh:"standardni marokanski tamazigt",zh:"kineski","zh-Hans":"kineski (pojednostavljeni standardni)","zh-Hant":"kineski (tradicionalni standardni)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"ćirilica",Latn:"latinica",Arab:"arapsko pismo",Guru:"pismo gurmuki",Tfng:"tifinag pismo",Vaii:"vai pismo",Hans:"pojednostavljeno",Hant:"tradicionalno"}},ca:{rtl:false,languageNames:{aa:"àfar",ab:"abkhaz",ace:"atjeh",ach:"acoli",ada:"adangme",ady:"adigué",ae:"avèstic",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"àkan",akk:"accadi",akz:"alabama",ale:"aleuta",aln:"albanès geg",alt:"altaic meridional",am:"amhàric",an:"aragonès",ang:"anglès antic",anp:"angika",ar:"àrab","ar-001":"àrab estàndard modern",arc:"arameu",arn:"mapudungu",aro:"araona",arp:"arapaho",ars:"àrab najdi",arw:"arauac",arz:"àrab egipci",as:"assamès",asa:"pare",ase:"llengua de signes americana",ast:"asturià",av:"àvar",awa:"awadhi",ay:"aimara",az:"azerbaidjanès",ba:"baixkir",bal:"balutxi",ban:"balinès",bar:"bavarès",bas:"basa",bax:"bamum",bbj:"ghomala",be:"belarús",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bfq:"badaga",bg:"búlgar",bgn:"balutxi occidental",bho:"bhojpuri",bi:"bislama",bik:"bicol",bin:"edo",bkm:"kom",bla:"blackfoot",bm:"bambara",bn:"bengalí",bo:"tibetà",br:"bretó",bra:"braj",brh:"brahui",brx:"bodo",bs:"bosnià",bss:"akoose",bua:"buriat",bug:"bugui",bum:"bulu",byn:"bilin",byv:"medumba",ca:"català",cad:"caddo",car:"carib",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"txetxè",ceb:"cebuà",cgg:"chiga",ch:"chamorro",chb:"txibtxa",chg:"txagatai",chk:"chuuk",chm:"mari",chn:"pidgin chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"xeiene",ckb:"kurd central",co:"cors",cop:"copte",cr:"cree",crh:"tàtar de Crimea",crs:"francès crioll de les Seychelles",cs:"txec",csb:"caixubi",cu:"eslau eclesiàstic",cv:"txuvaix",cy:"gal·lès",da:"danès",dak:"dakota",dar:"darguà",dav:"taita",de:"alemany","de-AT":"alemany austríac","de-CH":"alemany estàndard suís",del:"delaware",den:"slavi",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"baix sòrab",dua:"douala",dum:"neerlandès mitjà",dv:"divehi",dyo:"diola",dyu:"jula",dz:"dzongka",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egl:"emilià",egy:"egipci antic",eka:"ekajuk",el:"grec",elx:"elamita",en:"anglès","en-AU":"anglès australià","en-CA":"anglès canadenc","en-GB":"anglès britànic","en-US":"anglès americà",enm:"anglès mitjà",eo:"esperanto",es:"espanyol","es-419":"espanyol hispanoamericà","es-ES":"espanyol europeu","es-MX":"espanyol de Mèxic",et:"estonià",eu:"basc",ewo:"ewondo",ext:"extremeny",fa:"persa",fan:"fang",fat:"fanti",ff:"ful",fi:"finès",fil:"filipí",fj:"fijià",fo:"feroès",fr:"francès","fr-CA":"francès canadenc","fr-CH":"francès suís",frc:"francès cajun",frm:"francès mitjà",fro:"francès antic",frr:"frisó septentrional",frs:"frisó oriental",fur:"friülà",fy:"frisó occidental",ga:"irlandès",gaa:"ga",gag:"gagaús",gan:"xinès gan",gay:"gayo",gba:"gbaya",gd:"gaèlic escocès",gez:"gueez",gil:"gilbertès",gl:"gallec",glk:"gilaki",gmh:"alt alemany mitjà",gn:"guaraní",goh:"alt alemany antic",gom:"concani de Goa",gon:"gondi",gor:"gorontalo",got:"gòtic",grb:"grebo",grc:"grec antic",gsw:"alemany suís",gu:"gujarati",guc:"wayú",guz:"gusí",gv:"manx",gwi:"gwich’in",ha:"haussa",hai:"haida",hak:"xinès hakka",haw:"hawaià",he:"hebreu",hi:"hindi",hif:"hindi de Fiji",hil:"híligaynon",hit:"hitita",hmn:"hmong",ho:"hiri motu",hr:"croat",hsb:"alt sòrab",hsn:"xinès xiang",ht:"crioll d’Haití",hu:"hongarès",hup:"hupa",hy:"armeni",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesi",ie:"interlingue",ig:"igbo",ii:"yi sichuan",ik:"inupiak",ilo:"ilocano",inh:"ingúix",io:"ido",is:"islandès",it:"italià",iu:"inuktitut",ja:"japonès",jam:"crioll anglès de Jamaica",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"judeopersa",jrb:"judeoàrab",jv:"javanès",ka:"georgià",kaa:"karakalpak",kab:"cabilenc",kac:"katxin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardí",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"crioll capverdià",ken:"kenyang",kfo:"koro",kg:"kongo",kgp:"kaingà",kha:"khasi",kho:"khotanès",khq:"koyra chiini",ki:"kikuiu",kj:"kuanyama",kk:"kazakh",kkj:"kako",kl:"grenlandès",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"coreà",koi:"komi-permiac",kok:"concani",kos:"kosraeà",kpe:"kpelle",kr:"kanuri",krc:"karatxai-balkar",kri:"krio",krl:"carelià",kru:"kurukh",ks:"caixmiri",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurd",kum:"kúmik",kut:"kutenai",kv:"komi",kw:"còrnic",ky:"kirguís",la:"llatí",lad:"judeocastellà",lag:"langi",lah:"panjabi occidental",lam:"lamba",lb:"luxemburguès",lez:"lesguià",lg:"ganda",li:"limburguès",lij:"lígur",lkt:"lakota",lmo:"llombard",ln:"lingala",lo:"laosià",lol:"mongo",lou:"crioll francès de Louisiana",loz:"lozi",lrc:"luri septentrional",lt:"lituà",lu:"luba katanga",lua:"luba-lulua",lui:"luisenyo",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letó",lzh:"xinès clàssic",lzz:"laz",mad:"madurès",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makassar",man:"mandinga",mas:"massai",mde:"maba",mdf:"mordovià moksa",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauricià",mg:"malgaix",mga:"gaèlic irlandès mitjà",mgh:"makhuwa-metto",mgo:"meta’",mh:"marshallès",mi:"maori",mic:"micmac",min:"minangkabau",mk:"macedoni",ml:"malaiàlam",mn:"mongol",mnc:"manxú",mni:"manipurí",moh:"mohawk",mos:"moore",mr:"marathi",mrj:"mari occidental",ms:"malai",mt:"maltès",mua:"mundang",mus:"creek",mwl:"mirandès",mwr:"marwari",my:"birmà",mye:"myene",myv:"mordovià erza",mzn:"mazanderani",na:"nauruà",nan:"xinès min del sud",nap:"napolità",naq:"nama",nb:"noruec bokmål",nd:"ndebele septentrional",nds:"baix alemany","nds-NL":"baix saxó",ne:"nepalès","new":"newari",ng:"ndonga",nia:"nias",niu:"niueà",nl:"neerlandès","nl-BE":"flamenc",nmg:"bissio",nn:"noruec nynorsk",nnh:"ngiemboon",no:"noruec",nog:"nogai",non:"nòrdic antic",nov:"novial",nqo:"n’Ko",nr:"ndebele meridional",nso:"sotho septentrional",nus:"nuer",nv:"navaho",nwc:"newari clàssic",ny:"nyanja",nym:"nyamwesi",nyn:"nyankole",nyo:"nyoro",nzi:"nzema",oc:"occità",oj:"ojibwa",om:"oromo",or:"oriya",os:"osseta",osa:"osage",ota:"turc otomà",pa:"panjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiament",pau:"palauà",pcd:"picard",pcm:"pidgin de Nigèria",pdc:"alemany pennsilvanià",peo:"persa antic",pfl:"alemany palatí",phn:"fenici",pi:"pali",pl:"polonès",pms:"piemontès",pnt:"pòntic",pon:"ponapeà",prg:"prussià",pro:"provençal antic",ps:"paixtu",pt:"portuguès","pt-BR":"portuguès del Brasil","pt-PT":"portuguès de Portugal",qu:"quítxua",quc:"k’iche’",raj:"rajasthani",rap:"rapanui",rar:"rarotongà",rgn:"romanyès",rm:"retoromànic",rn:"rundi",ro:"romanès","ro-MD":"moldau",rof:"rombo",rom:"romaní",root:"arrel",ru:"rus",rup:"aromanès",rw:"ruandès",rwk:"rwo",sa:"sànscrit",sad:"sandawe",sah:"iacut",sam:"arameu samarità",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sard",scn:"sicilià",sco:"escocès",sd:"sindi",sdc:"sasserès",sdh:"kurd meridional",se:"sami septentrional",see:"seneca",seh:"sena",sel:"selkup",ses:"songhai oriental",sg:"sango",sga:"irlandès antic",sh:"serbocroat",shi:"taixelhit",shn:"xan",shu:"àrab txadià",si:"singalès",sid:"sidamo",sk:"eslovac",sl:"eslovè",sm:"samoà",sma:"sami meridional",smj:"sami lule",smn:"sami d’Inari",sms:"sami skolt",sn:"shona",snk:"soninke",so:"somali",sog:"sogdià",sq:"albanès",sr:"serbi",srn:"sranan",srr:"serer",ss:"swazi",ssy:"saho",st:"sotho meridional",su:"sondanès",suk:"sukuma",sus:"susú",sux:"sumeri",sv:"suec",sw:"suahili","sw-CD":"suahili del Congo",swb:"comorià",syc:"siríac clàssic",syr:"siríac",szl:"silesià",ta:"tàmil",te:"telugu",tem:"temne",teo:"teso",ter:"terena",tet:"tètum",tg:"tadjik",th:"tai",ti:"tigrinya",tig:"tigre",tk:"turcman",tkl:"tokelauès",tkr:"tsakhur",tl:"tagal",tlh:"klingonià",tli:"tlingit",tly:"talix",tmh:"amazic",tn:"setswana",to:"tongalès",tog:"tonga",tpi:"tok pisin",tr:"turc",trv:"taroko",ts:"tsonga",tsi:"tsimshià",tt:"tàtar",ttt:"tat meridional",tum:"tumbuka",tvl:"tuvaluà",tw:"twi",twq:"tasawaq",ty:"tahitià",tyv:"tuvinià",tzm:"amazic del Marroc central",udm:"udmurt",ug:"uigur",uga:"ugarític",uk:"ucraïnès",umb:"umbundu",ur:"urdú",uz:"uzbek",ve:"venda",vec:"vènet",vep:"vepse",vi:"vietnamita",vls:"flamenc occidental",vo:"volapük",vot:"vòtic",vun:"vunjo",wa:"való",wae:"walser",wal:"wolaita",war:"waray",was:"washo",wbp:"warlpiri",wo:"wòlof",wuu:"xinès wu",xal:"calmuc",xh:"xosa",xmf:"mingrelià",xog:"soga",yap:"yapeà",yav:"yangben",ybb:"yemba",yi:"ídix",yo:"ioruba",yue:"cantonès",za:"zhuang",zap:"zapoteca",zbl:"símbols Bliss",zea:"zelandès",zen:"zenaga",zgh:"amazic estàndard marroquí",zh:"xinès","zh-Hans":"xinès mandarí (simplificat)","zh-Hant":"xinès mandarí (tradicional)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"ciríl·lic",Latn:"llatí",Arab:"àrab",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vai",Hans:"simplificat",Hant:"tradicional"}},ckb:{rtl:true,languageNames:{aa:"ئەفار",ab:"ئەبخازی",ace:"ئاچەیی",ada:"دانگمێ",ady:"ئادیگی",af:"ئەفریکانس",agq:"ئاگێم",ain:"ئاینوو",ak:"ئاکان",ale:"ئالیوت",alt:"ئاڵتایی باشوور",am:"ئەمھەری",an:"ئاراگۆنی",anp:"ئەنگیکا",ar:"عەرەبی","ar-001":"عەرەبیی ستاندارد",arn:"ماپووچە",arp:"ئاراپاهۆ",as:"ئاسامی",asa:"ئاسوو",ast:"ئاستۆری",av:"ئەڤاری",awa:"ئاوادهی",ay:"ئایمارا",az:"ئازەربایجانی","az-Arab":"ئازەربایجانی باشووری",ba:"باشکیەر",ban:"بالی",bas:"باسا",be:"بیلاڕووسی",bem:"بێمبا",bez:"بێنا",bg:"بۆلگاری",bho:"بوجپووری",bi:"بیسلاما",bin:"بینی",bla:"سیکسیکا",bm:"بامبارا",bn:"بەنگلادێشی",bo:"تەبەتی",br:"برێتونی",brx:"بۆدۆ",bs:"بۆسنی",bug:"بووگی",byn:"بلین",ca:"كاتالۆنی",ce:"چیچانی",ceb:"سێبوانۆ",cgg:"کیگا",ch:"چامۆرۆ",chk:"چووکی",chm:"ماری",cho:"چۆکتاو",chr:"چێرۆکی",chy:"شایان",ckb:"کوردیی ناوەندی",co:"کۆرسیکی",crs:"فەرەنسیی سیشێلی",cs:"چێکی",cu:"سلاویی کلیسەیی",cv:"چووڤاشی",cy:"وێلزی",da:"دانماركی",dak:"داکۆتایی",dar:"دارگینی",dav:"تایتا",de:"ئەڵمانی","de-AT":"ئەڵمانی (نەمسا)","de-CH":"ئەڵمانی (سویسڕا)",dgr:"دۆگریب",dje:"زارما",dsb:"سربیی خوارین",dua:"دووالا",dv:"دیڤێهی",dyo:"جۆلافۆنی",dz:"دزوونگخا",dzg:"دازا",ebu:"ئێمبوو",ee:"ئێوێیی",efi:"ئێفیک",eka:"ئێکاجووک",el:"یۆنانی",en:"ئینگلیزی","en-AU":"ئینگلیزیی ئۆسترالیایی","en-CA":"ئینگلیزیی کەنەدایی","en-GB":"ئینگلیزیی بریتانیایی","en-US":"ئینگلیزیی ئەمەریکایی",eo:"ئێسپیرانتۆ",es:"ئیسپانی","es-419":"ئیسپانی (ئەمەریکای لاتین)","es-ES":"ئیسپانی (ئیسپانیا)","es-MX":"ئیسپانی (مەکسیک)",et:"ئیستۆنی",eu:"باسکی",ewo:"ئێوۆندۆ",fa:"فارسی",ff:"فوولایی",fi:"فینلەندی",fil:"فیلیپینی",fj:"فیجی",fo:"فەرۆیی",fon:"فۆنی",fr:"فەرەنسی","fr-CA":"فەرەنسی (کەنەدا)","fr-CH":"فەرەنسی (سویسڕا)",fur:"فریئوولی",fy:"فریسیی ڕۆژاوا",ga:"ئیرلەندی",gaa:"گایی",gd:"گه‌لیكی سكۆتله‌ندی",gez:"گیزی",gil:"گیلبێرتی",gl:"گالیسی",gn:"گووارانی",gor:"گۆرۆنتالی",gsw:"ئەڵمانیی سویسڕا",gu:"گوجاراتی",guz:"گووسی",gv:"مانکی",gwi:"گویچین",ha:"هائووسا",haw:"هاوایی",he:"عیبری",hi:"هیندی",hil:"هیلیگاینۆن",hmn:"همۆنگ",hr:"كرواتی",hsb:"سربیی سەروو",ht:"کریولی هائیتی",hu:"هەنگاری",hup:"هووپا",hy:"ئەرمەنی",hz:"هێرێرۆ",ia:"ئینترلینگووا",iba:"ئیبان",ibb:"ئیبیبۆ",id:"ئیندۆنیزی",ig:"ئیگبۆ",ii:"سیچوان یی",ilo:"ئیلۆکۆ",inh:"ئینگووش",io:"ئیدۆ",is:"ئیسلەندی",it:"ئیتالی",iu:"ئینوکتیتوت",ja:"ژاپۆنی",jbo:"لۆژبان",jgo:"نگۆمبا",jmc:"ماچامێ",jv:"جاڤایی",ka:"گۆرجستانی",kab:"کبائیلی",kac:"کاچین",kaj:"کیجوو",kam:"کامبا",kbd:"کاباردی",kcg:"تیاپ",kde:"ماکۆندە",kea:"کابووڤێردیانۆ",kfo:"کۆرۆ",kha:"کهاسی",khq:"کۆیرا چینی",ki:"کیکوویوو",kj:"کوانیاما",kk:"کازاخی",kkj:"کاکۆ",kl:"کالالیسووت",kln:"کالێنجین",km:"خمێر",kmb:"کیمبووندوو",kn:"کاننادا",ko:"كۆری",kok:"کۆنکانی",kpe:"کپێلێ",kr:"کانووری",krc:"کاراچای بالکار",krl:"کارێلی",kru:"کوورووخ",ks:"کەشمیری",ksb:"شامابالا",ksf:"بافیا",ksh:"کۆلۆنی",ku:"کوردی",kum:"کوومیک",kv:"کۆمی",kw:"کۆڕنی",ky:"كرگیزی",la:"لاتینی",lad:"لادینۆ",lag:"لانگی",lb:"لوکسەمبورگی",lez:"لەزگی",lg:"گاندا",li:"لیمبورگی",lkt:"لاکۆتا",ln:"لينگالا",lo:"لائۆیی",loz:"لۆزی",lrc:"لوڕیی باکوور",lt:"لیتوانی",lu:"لووبا کاتانگا",lua:"لووبا لوولووا",lun:"لووندا",luo:"لووئۆ",lus:"میزۆ",luy:"لوویا",lv:"لێتۆنی",mad:"مادووری",mag:"ماگاهی",mai:"مائیتیلی",mak:"ماکاسار",mas:"ماسایی",mdf:"مۆکشا",men:"مێندێ",mer:"مێروو",mfe:"مۆریسی",mg:"مالاگاسی",mgh:"ماخوامیتۆ",mgo:"مێتە",mh:"مارشاڵی",mi:"مائۆری",mic:"میکماک",min:"مینانکاباو",mk:"ماكێدۆنی",ml:"مالایالام",mn:"مەنگۆلی",mni:"مانیپووری",moh:"مۆهاوک",mos:"مۆسی",mr:"ماراتی",ms:"مالیزی",mt:"ماڵتی",mua:"موندانگ",mus:"کریک",mwl:"میراندی",my:"میانماری",myv:"ئێرزیا",mzn:"مازەندەرانی",na:"نائوروو",nap:"ناپۆلی",naq:"ناما",nb:"نەرویژیی بۆکمال",nd:"ئندێبێلێی باکوور","nds-NL":"nds (ھۆڵەندا)",ne:"نیپالی","new":"نێواری",ng:"ندۆنگا",nia:"نیاس",niu:"نیئوویی",nl:"هۆڵەندی","nl-BE":"فلێمی",nmg:"کواسیۆ",nn:"نەرویژیی نینۆرسک",nnh:"نگیمبوون",no:"نۆروێژی",nog:"نۆگای",nqo:"نکۆ",nr:"ئندێبێلێی باشوور",nso:"سۆتۆی باکوور",nus:"نوێر",nv:"ناڤاجۆ",ny:"نیانجا",nyn:"نیانکۆلێ",oc:"ئۆکسیتانی",om:"ئۆرۆمۆ",or:"ئۆدیا",os:"ئۆسێتی",pa:"پەنجابی",pag:"پانگاسینان",pam:"پامپانگا",pap:"پاپیامێنتۆ",pau:"پالائوویی",pcm:"پیجینی نیجریا",pl:"پۆڵەندی",prg:"پڕووسی",ps:"پەشتوو",pt:"پورتوگالی","pt-BR":"پورتوگالی (برازیل)","pt-PT":"پورتوگالی (پورتوگال)",qu:"کێچوا",quc:"کیچەیی",rap:"ڕاپانوویی",rar:"ڕاڕۆتۆنگان",rm:"ڕۆمانش",rn:"ڕووندی",ro:"ڕۆمانی","ro-MD":"مۆڵداڤی",rof:"ڕۆمبۆ",root:"ڕووت",ru:"ڕووسی",rup:"ئارمۆمانی",rw:"کینیارواندا",rwk:"ڕوا",sa:"سانسکريت",sad:"سانداوێ",sah:"ساخا",saq:"سامبووروو",sat:"سانتالی",sba:"نگامبای",sbp:"سانگوو",sc:"ساردینی",scn:"سیسیلی",sco:"سکۆتس",sd:"سيندی",sdh:"کوردیی باشووری",se:"سامیی باکوور",seh:"سێنا",ses:"کۆیرابۆرۆ سێنی",sg:"سانگۆ",shi:"شیلها",shn:"شان",si:"سینهالی",sk:"سلۆڤاكی",sl:"سلۆڤێنی",sm:"سامۆیی",sma:"سامیی باشوور",smj:"لوولێ سامی",smn:"ئیناری سامی",sms:"سامیی سکۆڵت",sn:"شۆنا",snk:"سۆنینکێ",so:"سۆمالی",sq:"ئەڵبانی",sr:"سربی",srn:"سرانان تۆنگۆ",ss:"سواتی",ssy:"ساهۆ",st:"سۆتۆی باشوور",su:"سوندانی",suk:"سووکووما",sv:"سویدی",sw:"سواهیلی","sw-CD":"سواهیلیی کۆنگۆ",swb:"کۆمۆری",syr:"سریانی",ta:"تامیلی",te:"تێلووگوو",tem:"تیمنێ",teo:"تێسوو",tet:"تێتووم",tg:"تاجیکی",th:"تایلەندی",ti:"تیگرینیا",tig:"تیگرێ",tk:"تورکمانی",tlh:"كلینگۆن",tn:"تسوانا",to:"تۆنگان",tpi:"تۆکپیسین",tr:"تورکی",trv:"تارۆکۆ",ts:"تسۆنگا",tt:"تاتاری",tum:"تومبووکا",tvl:"تووڤالوو",twq:"تاساواک",ty:"تاهیتی",tyv:"تووڤینی",tzm:"ئەمازیغی ناوەڕاست",udm:"ئوودموورت",ug:"ئۆیخۆری",uk:"ئۆكراینی",umb:"ئومبووندوو",ur:"ئۆردوو",uz:"ئوزبەکی",vai:"ڤایی",ve:"ڤێندا",vi:"ڤیەتنامی",vo:"ڤۆلاپووک",vun:"ڤوونجوو",wa:"والوون",wae:"والسێر",wal:"وۆلایتا",war:"وارای",wo:"وۆلۆف",xal:"کالمیک",xh:"سسوسا",xog:"سۆگا",yav:"یانگبێن",ybb:"یێمبا",yi:"ییدیش",yo:"یۆرووبا",yue:"کانتۆنی",zgh:"ئەمازیغیی مەغریب",zh:"چینی","zh-Hans":"چینی (ئاسانکراو)","zh-Hant":"چینی (دێرین)",zu:"زوولوو",zun:"زوونی",zza:"زازا"},scriptNames:{Cyrl:"سریلیک",Latn:"لاتینی",Arab:"عەرەبی",Guru:"گورموکھی",Hans:"ئاسانکراو",Hant:"دێرین"}},cs:{rtl:false,languageNames:{aa:"afarština",ab:"abcházština",ace:"acehština",ach:"akolština",ada:"adangme",ady:"adygejština",ae:"avestánština",aeb:"arabština (tuniská)",af:"afrikánština",afh:"afrihili",agq:"aghem",ain:"ainština",ak:"akanština",akk:"akkadština",akz:"alabamština",ale:"aleutština",aln:"albánština (Gheg)",alt:"altajština (jižní)",am:"amharština",an:"aragonština",ang:"staroangličtina",anp:"angika",ar:"arabština","ar-001":"arabština (moderní standardní)",arc:"aramejština",arn:"mapudungun",aro:"araonština",arp:"arapažština",arq:"arabština (alžírská)",ars:"arabština (Nadžd)",arw:"arawacké jazyky",ary:"arabština (marocká)",arz:"arabština (egyptská)",as:"ásámština",asa:"asu",ase:"znaková řeč (americká)",ast:"asturština",av:"avarština",avk:"kotava",awa:"awadhština",ay:"ajmarština",az:"ázerbájdžánština",ba:"baškirština",bal:"balúčština",ban:"balijština",bar:"bavorština",bas:"basa",bax:"bamun",bbc:"batak toba",bbj:"ghomala",be:"běloruština",bej:"bedža",bem:"bembština",bew:"batavština",bez:"bena",bfd:"bafut",bfq:"badagština",bg:"bulharština",bgn:"balúčština (západní)",bho:"bhódžpurština",bi:"bislamština",bik:"bikolština",bin:"bini",bjn:"bandžarština",bkm:"kom",bla:"siksika",bm:"bambarština",bn:"bengálština",bo:"tibetština",bpy:"bišnuprijskomanipurština",bqi:"bachtijárština",br:"bretonština",bra:"bradžština",brh:"brahujština",brx:"bodoština",bs:"bosenština",bss:"akoose",bua:"burjatština",bug:"bugiština",bum:"bulu",byn:"blinština",byv:"medumba",ca:"katalánština",cad:"caddo",car:"karibština",cay:"kajugština",cch:"atsam",ccp:"čakma",ce:"čečenština",ceb:"cebuánština",cgg:"kiga",ch:"čamoro",chb:"čibča",chg:"čagatajština",chk:"čukština",chm:"marijština",chn:"činuk pidžin",cho:"čoktština",chp:"čipevajština",chr:"čerokézština",chy:"čejenština",ckb:"kurdština (sorání)",co:"korsičtina",cop:"koptština",cps:"kapiznonština",cr:"kríjština",crh:"turečtina (krymská)",crs:"kreolština (seychelská)",cs:"čeština",csb:"kašubština",cu:"staroslověnština",cv:"čuvaština",cy:"velština",da:"dánština",dak:"dakotština",dar:"dargština",dav:"taita",de:"němčina","de-AT":"němčina (Rakousko)","de-CH":"němčina standardní (Švýcarsko)",del:"delawarština",den:"slejvština (athabaský jazyk)",dgr:"dogrib",din:"dinkština",dje:"zarmština",doi:"dogarština",dsb:"dolnolužická srbština",dtp:"kadazandusunština",dua:"dualština",dum:"holandština (středověká)",dv:"maledivština",dyo:"jola-fonyi",dyu:"djula",dz:"dzongkä",dzg:"dazaga",ebu:"embu",ee:"eweština",efi:"efikština",egl:"emilijština",egy:"egyptština stará",eka:"ekajuk",el:"řečtina",elx:"elamitština",en:"angličtina","en-AU":"angličtina (Austrálie)","en-CA":"angličtina (Kanada)","en-GB":"angličtina (Velká Británie)","en-US":"angličtina (USA)",enm:"angličtina (středověká)",eo:"esperanto",es:"španělština","es-419":"španělština (Latinská Amerika)","es-ES":"španělština (Evropa)","es-MX":"španělština (Mexiko)",esu:"jupikština (středoaljašská)",et:"estonština",eu:"baskičtina",ewo:"ewondo",ext:"extremadurština",fa:"perština",fan:"fang",fat:"fantština",ff:"fulbština",fi:"finština",fil:"filipínština",fit:"finština (tornedalská)",fj:"fidžijština",fo:"faerština",fon:"fonština",fr:"francouzština","fr-CA":"francouzština (Kanada)","fr-CH":"francouzština (Švýcarsko)",frc:"francouzština (cajunská)",frm:"francouzština (středověká)",fro:"francouzština (stará)",frp:"franko-provensálština",frr:"fríština (severní)",frs:"fríština (východní)",fur:"furlanština",fy:"fríština (západní)",ga:"irština",gaa:"gaština",gag:"gagauzština",gan:"čínština (dialekty Gan)",gay:"gayo",gba:"gbaja",gbz:"daríjština (zoroastrijská)",gd:"skotská gaelština",gez:"geez",gil:"kiribatština",gl:"galicijština",glk:"gilačtina",gmh:"hornoněmčina (středověká)",gn:"guaranština",goh:"hornoněmčina (stará)",gom:"konkánština (Goa)",gon:"góndština",gor:"gorontalo",got:"gótština",grb:"grebo",grc:"starořečtina",gsw:"němčina (Švýcarsko)",gu:"gudžarátština",guc:"wayúuština",gur:"frafra",guz:"gusii",gv:"manština",gwi:"gwichʼin",ha:"hauština",hai:"haidština",hak:"čínština (dialekty Hakka)",haw:"havajština",he:"hebrejština",hi:"hindština",hif:"hindština (Fidži)",hil:"hiligajnonština",hit:"chetitština",hmn:"hmongština",ho:"hiri motu",hr:"chorvatština",hsb:"hornolužická srbština",hsn:"čínština (dialekty Xiang)",ht:"haitština",hu:"maďarština",hup:"hupa",hy:"arménština",hz:"hererština",ia:"interlingua",iba:"ibanština",ibb:"ibibio",id:"indonéština",ie:"interlingue",ig:"igboština",ii:"iština (sečuánská)",ik:"inupiakština",ilo:"ilokánština",inh:"inguština",io:"ido",is:"islandština",it:"italština",iu:"inuktitutština",izh:"ingrijština",ja:"japonština",jam:"jamajská kreolština",jbo:"lojban",jgo:"ngomba",jmc:"mašame",jpr:"judeoperština",jrb:"judeoarabština",jut:"jutština",jv:"javánština",ka:"gruzínština",kaa:"karakalpačtina",kab:"kabylština",kac:"kačijština",kaj:"jju",kam:"kambština",kaw:"kawi",kbd:"kabardinština",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kapverdština",ken:"kenyang",kfo:"koro",kg:"konžština",kgp:"kaingang",kha:"khásí",kho:"chotánština",khq:"koyra chiini",khw:"chovarština",ki:"kikujština",kiu:"zazakština",kj:"kuaňamština",kk:"kazaština",kkj:"kako",kl:"grónština",kln:"kalendžin",km:"khmérština",kmb:"kimbundština",kn:"kannadština",ko:"korejština",koi:"komi-permjačtina",kok:"konkánština",kos:"kosrajština",kpe:"kpelle",kr:"kanuri",krc:"karačajevo-balkarština",kri:"krio",krj:"kinaraj-a",krl:"karelština",kru:"kuruchština",ks:"kašmírština",ksb:"šambala",ksf:"bafia",ksh:"kolínština",ku:"kurdština",kum:"kumyčtina",kut:"kutenajština",kv:"komijština",kw:"kornština",ky:"kyrgyzština",la:"latina",lad:"ladinština",lag:"langi",lah:"lahndština",lam:"lambština",lb:"lucemburština",lez:"lezginština",lfn:"lingua franca nova",lg:"gandština",li:"limburština",lij:"ligurština",liv:"livonština",lkt:"lakotština",lmo:"lombardština",ln:"lingalština",lo:"laoština",lol:"mongština",lou:"kreolština (Louisiana)",loz:"lozština",lrc:"lúrština (severní)",lt:"litevština",ltg:"latgalština",lu:"lubu-katanžština",lua:"luba-luluaština",lui:"luiseňo",lun:"lundština",luo:"luoština",lus:"mizoština",luy:"luhja",lv:"lotyština",lzh:"čínština (klasická)",lzz:"lazština",mad:"madurština",maf:"mafa",mag:"magahijština",mai:"maithiliština",mak:"makasarština",man:"mandingština",mas:"masajština",mde:"maba",mdf:"mokšanština",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauricijská kreolština",mg:"malgaština",mga:"irština (středověká)",mgh:"makhuwa-meetto",mgo:"meta’",mh:"maršálština",mi:"maorština",mic:"micmac",min:"minangkabau",mk:"makedonština",ml:"malajálamština",mn:"mongolština",mnc:"mandžuština",mni:"manipurština",moh:"mohawkština",mos:"mosi",mr:"maráthština",mrj:"marijština (západní)",ms:"malajština",mt:"maltština",mua:"mundang",mus:"kríkština",mwl:"mirandština",mwr:"márvárština",mwv:"mentavajština",my:"barmština",mye:"myene",myv:"erzjanština",mzn:"mázandaránština",na:"naurština",nan:"čínština (dialekty Minnan)",nap:"neapolština",naq:"namaština",nb:"norština (bokmål)",nd:"ndebele (Zimbabwe)",nds:"dolnoněmčina","nds-NL":"dolnosaština",ne:"nepálština","new":"névárština",ng:"ndondština",nia:"nias",niu:"niueština",njo:"ao (jazyky Nágálandu)",nl:"nizozemština","nl-BE":"vlámština",nmg:"kwasio",nn:"norština (nynorsk)",nnh:"ngiemboon",no:"norština",nog:"nogajština",non:"norština historická",nov:"novial",nqo:"n’ko",nr:"ndebele (Jižní Afrika)",nso:"sotština (severní)",nus:"nuerština",nv:"navažština",nwc:"newarština (klasická)",ny:"ňandžština",nym:"ňamwežština",nyn:"ňankolština",nyo:"ňorština",nzi:"nzima",oc:"okcitánština",oj:"odžibvejština",om:"oromština",or:"urijština",os:"osetština",osa:"osage",ota:"turečtina (osmanská)",pa:"paňdžábština",pag:"pangasinanština",pal:"pahlavština",pam:"papangau",pap:"papiamento",pau:"palauština",pcd:"picardština",pcm:"nigerijský pidžin",pdc:"němčina (pensylvánská)",pdt:"němčina (plautdietsch)",peo:"staroperština",pfl:"falčtina",phn:"féničtina",pi:"pálí",pl:"polština",pms:"piemonština",pnt:"pontština",pon:"pohnpeiština",prg:"pruština",pro:"provensálština",ps:"paštština",pt:"portugalština","pt-BR":"portugalština (Brazílie)","pt-PT":"portugalština (Evropa)",qu:"kečuánština",quc:"kičé",qug:"kečuánština (chimborazo)",raj:"rádžastánština",rap:"rapanujština",rar:"rarotongánština",rgn:"romaňolština",rif:"rífština",rm:"rétorománština",rn:"kirundština",ro:"rumunština","ro-MD":"moldavština",rof:"rombo",rom:"romština",root:"kořen",rtm:"rotumanština",ru:"ruština",rue:"rusínština",rug:"rovianština",rup:"arumunština",rw:"kiňarwandština",rwk:"rwa",sa:"sanskrt",sad:"sandawština",sah:"jakutština",sam:"samarština",saq:"samburu",sas:"sasakština",sat:"santálština",saz:"saurášterština",sba:"ngambay",sbp:"sangoština",sc:"sardština",scn:"sicilština",sco:"skotština",sd:"sindhština",sdc:"sassarština",sdh:"kurdština (jižní)",se:"sámština (severní)",see:"seneca",seh:"sena",sei:"seriština",sel:"selkupština",ses:"koyraboro senni",sg:"sangština",sga:"irština (stará)",sgs:"žemaitština",sh:"srbochorvatština",shi:"tašelhit",shn:"šanština",shu:"arabština (čadská)",si:"sinhálština",sid:"sidamo",sk:"slovenština",sl:"slovinština",sli:"němčina (slezská)",sly:"selajarština",sm:"samojština",sma:"sámština (jižní)",smj:"sámština (lulejská)",smn:"sámština (inarijská)",sms:"sámština (skoltská)",sn:"šonština",snk:"sonikština",so:"somálština",sog:"sogdština",sq:"albánština",sr:"srbština",srn:"sranan tongo",srr:"sererština",ss:"siswatština",ssy:"saho",st:"sotština (jižní)",stq:"fríština (saterlandská)",su:"sundština",suk:"sukuma",sus:"susu",sux:"sumerština",sv:"švédština",sw:"svahilština","sw-CD":"svahilština (Kongo)",swb:"komorština",syc:"syrština (klasická)",syr:"syrština",szl:"slezština",ta:"tamilština",tcy:"tuluština",te:"telugština",tem:"temne",teo:"teso",ter:"tereno",tet:"tetumština",tg:"tádžičtina",th:"thajština",ti:"tigrinijština",tig:"tigrejština",tiv:"tivština",tk:"turkmenština",tkl:"tokelauština",tkr:"cachurština",tl:"tagalog",tlh:"klingonština",tli:"tlingit",tly:"talyština",tmh:"tamašek",tn:"setswanština",to:"tongánština",tog:"tonžština (nyasa)",tpi:"tok pisin",tr:"turečtina",tru:"turojština",trv:"taroko",ts:"tsonga",tsd:"tsakonština",tsi:"tsimšijské jazyky",tt:"tatarština",ttt:"tatština",tum:"tumbukština",tvl:"tuvalština",tw:"twi",twq:"tasawaq",ty:"tahitština",tyv:"tuvinština",tzm:"tamazight (střední Maroko)",udm:"udmurtština",ug:"ujgurština",uga:"ugaritština",uk:"ukrajinština",umb:"umbundu",ur:"urdština",uz:"uzbečtina",ve:"venda",vec:"benátština",vep:"vepština",vi:"vietnamština",vls:"vlámština (západní)",vmf:"němčina (mohansko-franské dialekty)",vo:"volapük",vot:"votština",vro:"võruština",vun:"vunjo",wa:"valonština",wae:"němčina (walser)",wal:"wolajtština",war:"warajština",was:"waština",wbp:"warlpiri",wo:"wolofština",wuu:"čínština (dialekty Wu)",xal:"kalmyčtina",xh:"xhoština",xmf:"mingrelština",xog:"sogština",yao:"jaoština",yap:"japština",yav:"jangbenština",ybb:"yemba",yi:"jidiš",yo:"jorubština",yrl:"nheengatu",yue:"kantonština",za:"čuangština",zap:"zapotéčtina",zbl:"bliss systém",zea:"zélandština",zen:"zenaga",zgh:"tamazight (standardní marocký)",zh:"čínština","zh-Hans":"standardní čínština (zjednodušená)","zh-Hant":"standardní čínština (tradiční)",zu:"zuluština",zun:"zunijština",zza:"zaza"},scriptNames:{Cyrl:"cyrilice",Latn:"latinka",Arab:"arabské",Guru:"gurmukhi",Tfng:"berberské",Vaii:"vai",Hans:"zjednodušené",Hant:"tradiční"}},cy:{rtl:false,languageNames:{aa:"Affareg",ab:"Abchaseg",ace:"Acehneg",ach:"Acoli",ada:"Adangmeg",ady:"Circaseg Gorllewinol",ae:"Afestaneg",aeb:"Arabeg Tunisia",af:"Affricâneg",afh:"Affrihili",agq:"Aghemeg",ain:"Ainŵeg",ak:"Acaneg",akk:"Acadeg",akz:"Alabamäeg",ale:"Alewteg",aln:"Ghegeg Albania",alt:"Altäeg Deheuol",am:"Amhareg",an:"Aragoneg",ang:"Hen Saesneg",anp:"Angika",ar:"Arabeg","ar-001":"Arabeg Modern Safonol",arc:"Aramaeg",arn:"Arawcaneg",aro:"Araonaeg",arp:"Arapaho",arq:"Arabeg Algeria",arw:"Arawaceg",ary:"Arabeg Moroco",arz:"Arabeg yr Aifft",as:"Asameg",asa:"Asw",ase:"Iaith Arwyddion America",ast:"Astwrianeg",av:"Afareg",awa:"Awadhi",ay:"Aymareg",az:"Aserbaijaneg","az-Arab":"Aserbaijaneg Deheuol",ba:"Bashcorteg",bal:"Balwtsi",ban:"Balïeg",bas:"Basâeg",bax:"Bamwmeg",be:"Belarwseg",bej:"Bejäeg",bem:"Bembeg",bez:"Bena",bfd:"Baffwteg",bfq:"Badaga",bg:"Bwlgareg",bgn:"Balochi Gorllewinol",bho:"Bhojpuri",bi:"Bislama",bin:"Bini",bkm:"Comeg",bla:"Siksika",bm:"Bambareg",bn:"Bengaleg",bo:"Tibeteg",br:"Llydaweg",brh:"Brahui",brx:"Bodo",bs:"Bosnieg",bss:"Acwseg",bua:"Bwriateg",bug:"Bwginaeg",bum:"Bwlw",byn:"Blin",ca:"Catalaneg",cad:"Cado",car:"Caribeg",cch:"Atsameg",ccp:"Tsiacma",ce:"Tsietsieneg",ceb:"Cebuano",cgg:"Tsiga",ch:"Tsiamorro",chk:"Chuukaeg",chm:"Marieg",cho:"Siocto",chr:"Tsierocî",chy:"Cheyenne",ckb:"Cwrdeg Sorani",co:"Corseg",cop:"Copteg",cr:"Cri",crh:"Tyrceg y Crimea",crs:"Ffrangeg Seselwa Creole",cs:"Tsieceg",cu:"Hen Slafoneg",cv:"Tshwfasheg",cy:"Cymraeg",da:"Daneg",dak:"Dacotaeg",dar:"Dargwa",dav:"Taita",de:"Almaeneg","de-AT":"Almaeneg Awstria","de-CH":"Almaeneg Safonol y Swistir",dgr:"Dogrib",din:"Dinca",dje:"Sarmaeg",doi:"Dogri",dsb:"Sorbeg Isaf",dua:"Diwaleg",dum:"Iseldireg Canol",dv:"Difehi",dyo:"Jola-Fonyi",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embw",ee:"Ewe",efi:"Efik",egy:"Hen Eiffteg",eka:"Ekajuk",el:"Groeg",elx:"Elameg",en:"Saesneg","en-AU":"Saesneg Awstralia","en-CA":"Saesneg Canada","en-GB":"Saesneg Prydain","en-US":"Saesneg America",enm:"Saesneg Canol",eo:"Esperanto",es:"Sbaeneg","es-419":"Sbaeneg America Ladin","es-ES":"Sbaeneg Ewrop","es-MX":"Sbaeneg Mecsico",et:"Estoneg",eu:"Basgeg",ewo:"Ewondo",ext:"Extremadureg",fa:"Perseg",fat:"Ffanti",ff:"Ffwla",fi:"Ffinneg",fil:"Ffilipineg",fit:"Ffinneg Tornedal",fj:"Ffijïeg",fo:"Ffaröeg",fon:"Fon",fr:"Ffrangeg","fr-CA":"Ffrangeg Canada","fr-CH":"Ffrangeg y Swistir",frc:"Ffrangeg Cajwn",frm:"Ffrangeg Canol",fro:"Hen Ffrangeg",frp:"Arpitaneg",frr:"Ffriseg Gogleddol",frs:"Ffriseg y Dwyrain",fur:"Ffriwleg",fy:"Ffriseg y Gorllewin",ga:"Gwyddeleg",gaa:"Ga",gag:"Gagauz",gay:"Gaio",gba:"Gbaia",gbz:"Dareg y Zoroastriaid",gd:"Gaeleg yr Alban",gez:"Geez",gil:"Gilberteg",gl:"Galisieg",gmh:"Almaeneg Uchel Canol",gn:"Guaraní",goh:"Hen Almaeneg Uchel",gor:"Gorontalo",got:"Gotheg",grc:"Hen Roeg",gsw:"Almaeneg y Swistir",gu:"Gwjarati",guz:"Gusii",gv:"Manaweg",gwi:"Gwichʼin",ha:"Hawsa",hai:"Haida",haw:"Hawäieg",he:"Hebraeg",hi:"Hindi",hil:"Hiligaynon",hit:"Hetheg",hmn:"Hmongeg",hr:"Croateg",hsb:"Sorbeg Uchaf",ht:"Creol Haiti",hu:"Hwngareg",hup:"Hupa",hy:"Armeneg",hz:"Herero",ia:"Interlingua",iba:"Ibaneg",ibb:"Ibibio",id:"Indoneseg",ie:"Interlingue",ig:"Igbo",ii:"Nwosw",ik:"Inwpiaceg",ilo:"Ilocaneg",inh:"Ingwsieg",io:"Ido",is:"Islandeg",it:"Eidaleg",iu:"Inwctitwt",ja:"Japaneeg",jbo:"Lojban",jgo:"Ngomba",jmc:"Matsiame",jpr:"Iddew-Bersieg",jrb:"Iddew-Arabeg",jv:"Jafanaeg",ka:"Georgeg",kaa:"Cara-Calpaceg",kab:"Cabileg",kac:"Kachin",kaj:"Jju",kam:"Camba",kbd:"Cabardieg",kcg:"Tyapeg",kde:"Macondeg",kea:"Caboferdianeg",kfo:"Koro",kg:"Congo",kha:"Càseg",khq:"Koyra Chiini",khw:"Chowareg",ki:"Kikuyu",kj:"Kuanyama",kk:"Casacheg",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Chmereg",kmb:"Kimbundu",kn:"Kannada",ko:"Coreeg",koi:"Komi-Permyak",kok:"Concani",kpe:"Kpelle",kr:"Canwri",krc:"Karachay-Balkar",krl:"Careleg",kru:"Kurukh",ks:"Cashmireg",ksb:"Shambala",ksf:"Baffia",ksh:"Cwleneg",ku:"Cwrdeg",kum:"Cwmiceg",kv:"Comi",kw:"Cernyweg",ky:"Cirgiseg",la:"Lladin",lad:"Iddew-Sbaeneg",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Lwcsembwrgeg",lez:"Lezgheg",lg:"Ganda",li:"Limbwrgeg",lkt:"Lakota",lmo:"Lombardeg",ln:"Lingala",lo:"Laoeg",lol:"Mongo",loz:"Lozi",lrc:"Luri Gogleddol",lt:"Lithwaneg",ltg:"Latgaleg",lu:"Luba-Katanga",lua:"Luba-Lulua",lun:"Lwnda",luo:"Lŵo",lus:"Lwshaieg",luy:"Lwyia",lv:"Latfieg",mad:"Madwreg",mag:"Magahi",mai:"Maithili",mak:"Macasareg",man:"Mandingo",mas:"Masai",mdf:"Mocsia",mdr:"Mandareg",men:"Mendeg",mer:"Mêrw",mfe:"Morisyen",mg:"Malagaseg",mga:"Gwyddeleg Canol",mgh:"Makhuwa-Meetto",mgo:"Meta",mh:"Marsialeg",mi:"Maori",mic:"Micmaceg",min:"Minangkabau",mk:"Macedoneg",ml:"Malayalam",mn:"Mongoleg",mnc:"Manshw",mni:"Manipwri",moh:"Mohoceg",mos:"Mosi",mr:"Marathi",mrj:"Mari Gorllewinol",ms:"Maleieg",mt:"Malteg",mua:"Mundang",mus:"Creek",mwl:"Mirandeg",mwr:"Marwari",my:"Byrmaneg",myv:"Erzya",mzn:"Masanderani",na:"Nawrŵeg",nap:"Naplieg",naq:"Nama",nb:"Norwyeg Bokmål",nd:"Ndebele Gogleddol",nds:"Almaeneg Isel","nds-NL":"Sacsoneg Isel",ne:"Nepaleg","new":"Newaeg",ng:"Ndonga",nia:"Nias",niu:"Niuean",njo:"Ao Naga",nl:"Iseldireg","nl-BE":"Fflemeg",nmg:"Kwasio",nn:"Norwyeg Nynorsk",nnh:"Ngiemboon",no:"Norwyeg",nog:"Nogai",non:"Hen Norseg",nqo:"N’Ko",nr:"Ndebele Deheuol",nso:"Sotho Gogleddol",nus:"Nŵereg",nv:"Nafaho",nwc:"Hen Newari",ny:"Nianja",nym:"Niamwezi",nyn:"Niancole",nyo:"Nioro",nzi:"Nzimeg",oc:"Ocsitaneg",oj:"Ojibwa",om:"Oromo",or:"Odia",os:"Oseteg",osa:"Osageg",ota:"Tyrceg Otoman",pa:"Pwnjabeg",pag:"Pangasineg",pal:"Pahlafi",pam:"Pampanga",pap:"Papiamento",pau:"Palawan",pcd:"Picardeg",pcm:"Pidgin Nigeria",pdc:"Almaeneg Pensylfania",peo:"Hen Bersieg",pfl:"Almaeneg Palatin",phn:"Phoeniceg",pi:"Pali",pl:"Pwyleg",pms:"Piedmonteg",pnt:"Ponteg",pon:"Pohnpeianeg",prg:"Prwseg",pro:"Hen Brofensaleg",ps:"Pashto",pt:"Portiwgeeg","pt-BR":"Portiwgeeg Brasil","pt-PT":"Portiwgeeg Ewrop",qu:"Quechua",quc:"K’iche’",raj:"Rajasthaneg",rap:"Rapanŵi",rar:"Raratongeg",rm:"Románsh",rn:"Rwndi",ro:"Rwmaneg","ro-MD":"Moldofeg",rof:"Rombo",rom:"Romani",root:"Y Gwraidd",rtm:"Rotumaneg",ru:"Rwseg",rup:"Aromaneg",rw:"Ciniarŵandeg",rwk:"Rwa",sa:"Sansgrit",sad:"Sandäweg",sah:"Sakha",sam:"Aramaeg Samaria",saq:"Sambŵrw",sas:"Sasaceg",sat:"Santali",sba:"Ngambeieg",sbp:"Sangw",sc:"Sardeg",scn:"Sisileg",sco:"Sgoteg",sd:"Sindhi",sdc:"Sasareseg Sardinia",sdh:"Cwrdeg Deheuol",se:"Sami Gogleddol",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selcypeg",ses:"Koyraboro Senni",sg:"Sango",sga:"Hen Wyddeleg",sgs:"Samogiteg",sh:"Serbo-Croateg",shi:"Tachelhit",shn:"Shan",shu:"Arabeg Chad",si:"Sinhaleg",sid:"Sidamo",sk:"Slofaceg",sl:"Slofeneg",sli:"Is-silesieg",sm:"Samöeg",sma:"Sami Deheuol",smj:"Sami Lwle",smn:"Inari Sami",sms:"Sami Scolt",sn:"Shona",snk:"Soninceg",so:"Somaleg",sog:"Sogdeg",sq:"Albaneg",sr:"Serbeg",srn:"Sranan Tongo",srr:"Serereg",ss:"Swati",ssy:"Saho",st:"Sesotheg Deheuol",stq:"Ffriseg Saterland",su:"Swndaneg",suk:"Swcwma",sus:"Swsŵeg",sux:"Swmereg",sv:"Swedeg",sw:"Swahili","sw-CD":"Swahili’r Congo",swb:"Comoreg",syc:"Hen Syrieg",syr:"Syrieg",szl:"Silesieg",ta:"Tamileg",tcy:"Tulu",te:"Telugu",tem:"Timneg",teo:"Teso",ter:"Terena",tet:"Tetumeg",tg:"Tajiceg",th:"Thai",ti:"Tigrinya",tig:"Tigreg",tiv:"Tifeg",tk:"Tyrcmeneg",tkl:"Tocelaweg",tkr:"Tsakhureg",tl:"Tagalog",tlh:"Klingon",tli:"Llingit",tly:"Talysheg",tmh:"Tamasheceg",tn:"Tswana",to:"Tongeg",tpi:"Tok Pisin",tr:"Tyrceg",trv:"Taroko",ts:"Tsongaeg",tsd:"Tsaconeg",tt:"Tatareg",tum:"Twmbwca",tvl:"Twfalweg",tw:"Twi",twq:"Tasawaq",ty:"Tahitïeg",tyv:"Twfwnieg",tzm:"Tamazight Canol yr Atlas",udm:"Fotiaceg",ug:"Uighur",uga:"Wgariteg",uk:"Wcreineg",umb:"Umbundu",ur:"Wrdw",uz:"Wsbeceg",vai:"Faieg",ve:"Fendeg",vec:"Feniseg",vep:"Feps",vi:"Fietnameg",vls:"Fflemeg Gorllewinol",vo:"Folapük",vot:"Foteg",vun:"Funjo",wa:"Walwneg",wae:"Walsereg",wal:"Walamo",war:"Winarayeg",was:"Washo",wbp:"Warlpiri",wo:"Woloff",xal:"Calmyceg",xh:"Xhosa",xog:"Soga",yav:"Iangben",ybb:"Iembaeg",yi:"Iddew-Almaeneg",yo:"Iorwba",yue:"Cantoneeg",zap:"Zapoteceg",zbl:"Blisssymbols",zea:"Zêlandeg",zgh:"Tamaseit Safonol",zh:"Tsieinëeg","zh-Hans":"Tsieinëeg Mandarin Symledig","zh-Hant":"Tsieinëeg Mandarin Traddodiadol",zu:"Swlw",zun:"Swni",zza:"Sasäeg"},scriptNames:{Cyrl:"Cyrilig",Latn:"Lladin",Arab:"Arabaidd",Guru:"Gwrmwci",Hans:"Symledig",Hant:"Traddodiadol"}},da:{rtl:false,languageNames:{aa:"afar",ab:"abkhasisk",ace:"achinesisk",ach:"acoli",ada:"adangme",ady:"adyghe",ae:"avestan",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akkadisk",ale:"aleutisk",alt:"sydaltaisk",am:"amharisk",an:"aragonesisk",ang:"oldengelsk",anp:"angika",ar:"arabisk","ar-001":"moderne standardarabisk",arc:"aramæisk",arn:"mapudungun",arp:"arapaho",ars:"Najd-arabisk",arw:"arawak",as:"assamesisk",asa:"asu",ast:"asturisk",av:"avarisk",awa:"awadhi",ay:"aymara",az:"aserbajdsjansk",ba:"bashkir",bal:"baluchi",ban:"balinesisk",bas:"basaa",bax:"bamun",bbj:"ghomala",be:"hviderussisk",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bulgarsk",bgn:"vestbaluchi",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tibetansk",br:"bretonsk",bra:"braj",brx:"bodo",bs:"bosnisk",bss:"bakossi",bua:"buriatisk",bug:"buginesisk",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalansk",cad:"caddo",car:"caribisk",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"tjetjensk",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuukese",chm:"mari",chn:"chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"sorani",co:"korsikansk",cop:"koptisk",cr:"cree",crh:"krim-tyrkisk",crs:"seselwa (kreol-fransk)",cs:"tjekkisk",csb:"kasjubisk",cu:"kirkeslavisk",cv:"chuvash",cy:"walisisk",da:"dansk",dak:"dakota",dar:"dargwa",dav:"taita",de:"tysk","de-AT":"østrigsk tysk","de-CH":"schweizerhøjtysk",del:"delaware",den:"athapaskisk",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"nedersorbisk",dua:"duala",dum:"middelhollandsk",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"kiembu",ee:"ewe",efi:"efik",egy:"oldegyptisk",eka:"ekajuk",el:"græsk",elx:"elamitisk",en:"engelsk","en-AU":"australsk engelsk","en-CA":"canadisk engelsk","en-GB":"britisk engelsk","en-US":"amerikansk engelsk",enm:"middelengelsk",eo:"esperanto",es:"spansk","es-419":"latinamerikansk spansk","es-ES":"europæisk spansk","es-MX":"mexicansk spansk",et:"estisk",eu:"baskisk",ewo:"ewondo",fa:"persisk",fan:"fang",fat:"fanti",ff:"fulah",fi:"finsk",fil:"filippinsk",fj:"fijiansk",fo:"færøsk",fr:"fransk","fr-CA":"canadisk fransk","fr-CH":"schweizisk fransk",frc:"cajunfransk",frm:"middelfransk",fro:"oldfransk",frr:"nordfrisisk",frs:"østfrisisk",fur:"friulian",fy:"vestfrisisk",ga:"irsk",gaa:"ga",gag:"gagauzisk",gan:"gan-kinesisk",gay:"gayo",gba:"gbaya",gd:"skotsk gælisk",gez:"geez",gil:"gilbertesisk",gl:"galicisk",gmh:"middelhøjtysk",gn:"guarani",goh:"oldhøjtysk",gon:"gondi",gor:"gorontalo",got:"gotisk",grb:"grebo",grc:"oldgræsk",gsw:"schweizertysk",gu:"gujarati",guz:"gusii",gv:"manx",gwi:"gwichin",ha:"hausa",hai:"haida",hak:"hakka-kinesisk",haw:"hawaiiansk",he:"hebraisk",hi:"hindi",hil:"hiligaynon",hit:"hittitisk",hmn:"hmong",ho:"hirimotu",hr:"kroatisk",hsb:"øvresorbisk",hsn:"xiang-kinesisk",ht:"haitisk",hu:"ungarsk",hup:"hupa",hy:"armensk",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesisk",ie:"interlingue",ig:"igbo",ii:"sichuan yi",ik:"inupiaq",ilo:"iloko",inh:"ingush",io:"ido",is:"islandsk",it:"italiensk",iu:"inuktitut",ja:"japansk",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"jødisk-persisk",jrb:"jødisk-arabisk",jv:"javanesisk",ka:"georgisk",kaa:"karakalpakisk",kab:"kabylisk",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardian",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kapverdisk",kfo:"koro",kg:"kongo",kha:"khasi",kho:"khotanesisk",khq:"koyra-chiini",ki:"kikuyu",kj:"kuanyama",kk:"kasakhisk",kkj:"kako",kl:"grønlandsk",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"koreansk",koi:"komi-permjakisk",kok:"konkani",kos:"kosraean",kpe:"kpelle",kr:"kanuri",krc:"karatjai-balkar",krl:"karelsk",kru:"kurukh",ks:"kashmiri",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurdisk",kum:"kymyk",kut:"kutenaj",kv:"komi",kw:"cornisk",ky:"kirgisisk",la:"latin",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxembourgsk",lez:"lezghian",lg:"ganda",li:"limburgsk",lkt:"lakota",ln:"lingala",lo:"lao",lol:"mongo",lou:"Louisiana-kreolsk",loz:"lozi",lrc:"nordluri",lt:"litauisk",lu:"luba-Katanga",lua:"luba-Lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"luyana",lv:"lettisk",mad:"madurese",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masai",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malagassisk",mga:"middelirsk",mgh:"makhuwa-meetto",mgo:"meta",mh:"marshallese",mi:"maori",mic:"micmac",min:"minangkabau",mk:"makedonsk",ml:"malayalam",mn:"mongolsk",mnc:"manchu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathisk",ms:"malajisk",mt:"maltesisk",mua:"mundang",mus:"creek",mwl:"mirandesisk",mwr:"marwari",my:"burmesisk",mye:"myene",myv:"erzya",mzn:"mazenisk",na:"nauru",nan:"min-kinesisk",nap:"napolitansk",naq:"nama",nb:"norsk bokmål",nd:"nordndebele",nds:"nedertysk","nds-NL":"nedertysk (Holland)",ne:"nepalesisk","new":"newari",ng:"ndonga",nia:"nias",niu:"niueansk",nl:"hollandsk","nl-BE":"flamsk",nmg:"kwasio",nn:"nynorsk",nnh:"ngiemboon",no:"norsk",nog:"nogai",non:"oldislandsk",nqo:"n-ko",nr:"sydndebele",nso:"nordsotho",nus:"nuer",nv:"navajo",nwc:"klassisk newarisk",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro-sprog",nzi:"nzima",oc:"occitansk",oj:"ojibwa",om:"oromo",or:"oriya",os:"ossetisk",osa:"osage",ota:"osmannisk tyrkisk",pa:"punjabisk",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauansk",pcm:"nigeriansk pidgin",peo:"oldpersisk",phn:"fønikisk",pi:"pali",pl:"polsk",pon:"ponape",prg:"preussisk",pro:"oldprovencalsk",ps:"pashto",pt:"portugisisk","pt-BR":"brasiliansk portugisisk","pt-PT":"europæisk portugisisk",qu:"quechua",quc:"quiché",raj:"rajasthani",rap:"rapanui",rar:"rarotonga",rm:"rætoromansk",rn:"rundi",ro:"rumænsk","ro-MD":"moldovisk",rof:"rombo",rom:"romani",root:"rod",ru:"russisk",rup:"arumænsk",rw:"kinyarwanda",rwk:"rwa",sa:"sanskrit",sad:"sandawe",sah:"yakut",sam:"samaritansk aramæisk",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardinsk",scn:"siciliansk",sco:"skotsk",sd:"sindhi",sdh:"sydkurdisk",se:"nordsamisk",see:"seneca",seh:"sena",sel:"selkupisk",ses:"koyraboro senni",sg:"sango",sga:"oldirsk",sh:"serbokroatisk",shi:"tachelhit",shn:"shan",shu:"tchadisk arabisk",si:"singalesisk",sid:"sidamo",sk:"slovakisk",sl:"slovensk",sm:"samoansk",sma:"sydsamisk",smj:"lulesamisk",smn:"enaresamisk",sms:"skoltesamisk",sn:"shona",snk:"soninke",so:"somali",sog:"sogdiansk",sq:"albansk",sr:"serbisk",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sydsotho",su:"sundanesisk",suk:"sukuma",sus:"susu",sux:"sumerisk",sv:"svensk",sw:"swahili","sw-CD":"congolesisk swahili",swb:"shimaore",syc:"klassisk syrisk",syr:"syrisk",ta:"tamil",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadsjikisk",th:"thai",ti:"tigrinya",tig:"tigre",tiv:"tivi",tk:"turkmensk",tkl:"tokelau",tl:"tagalog",tlh:"klingon",tli:"tlingit",tmh:"tamashek",tn:"tswana",to:"tongansk",tog:"nyasa tongansk",tpi:"tok pisin",tr:"tyrkisk",trv:"taroko",ts:"tsonga",tsi:"tsimshisk",tt:"tatarisk",tum:"tumbuka",tvl:"tuvaluansk",tw:"twi",twq:"tasawaq",ty:"tahitiansk",tyv:"tuvinian",tzm:"centralmarokkansk tamazight",udm:"udmurt",ug:"uygurisk",uga:"ugaristisk",uk:"ukrainsk",umb:"umbundu",ur:"urdu",uz:"usbekisk",ve:"venda",vi:"vietnamesisk",vo:"volapyk",vot:"votisk",vun:"vunjo",wa:"vallonsk",wae:"walsertysk",wal:"walamo",war:"waray",was:"washo",wbp:"walbiri",wo:"wolof",wuu:"wu-kinesisk",xal:"kalmyk",xh:"isiXhosa",xog:"soga",yap:"yapese",yav:"yangben",ybb:"yemba",yi:"jiddisch",yo:"yoruba",yue:"kantonesisk",za:"zhuang",zap:"zapotec",zbl:"blissymboler",zen:"zenaga",zgh:"tamazight",zh:"kinesisk","zh-Hans":"kinesisk (forenklet)","zh-Hant":"kinesisk (traditionelt)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"kyrillisk",Latn:"latinsk",Arab:"arabisk",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vai",Hans:"forenklet",Hant:"traditionelt"}},de:{rtl:false,languageNames:{aa:"Afar",ab:"Abchasisch",ace:"Aceh",ach:"Acholi",ada:"Adangme",ady:"Adygeisch",ae:"Avestisch",aeb:"Tunesisches Arabisch",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Ainu",ak:"Akan",akk:"Akkadisch",akz:"Alabama",ale:"Aleutisch",aln:"Gegisch",alt:"Süd-Altaisch",am:"Amharisch",an:"Aragonesisch",ang:"Altenglisch",anp:"Angika",ar:"Arabisch","ar-001":"Modernes Hocharabisch",arc:"Aramäisch",arn:"Mapudungun",aro:"Araona",arp:"Arapaho",arq:"Algerisches Arabisch",ars:"Arabisch (Nadschd)",arw:"Arawak",ary:"Marokkanisches Arabisch",arz:"Ägyptisches Arabisch",as:"Assamesisch",asa:"Asu",ase:"Amerikanische Gebärdensprache",ast:"Asturianisch",av:"Awarisch",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Aserbaidschanisch",ba:"Baschkirisch",bal:"Belutschisch",ban:"Balinesisch",bar:"Bairisch",bas:"Basaa",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Weißrussisch",bej:"Bedauye",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgarisch",bgn:"Westliches Belutschi",bho:"Bhodschpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjaresisch",bkm:"Kom",bla:"Blackfoot",bm:"Bambara",bn:"Bengalisch",bo:"Tibetisch",bpy:"Bishnupriya",bqi:"Bachtiarisch",br:"Bretonisch",bra:"Braj-Bhakha",brh:"Brahui",brx:"Bodo",bs:"Bosnisch",bss:"Akoose",bua:"Burjatisch",bug:"Buginesisch",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Katalanisch",cad:"Caddo",car:"Karibisch",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Tschetschenisch",ceb:"Cebuano",cgg:"Rukiga",ch:"Chamorro",chb:"Chibcha",chg:"Tschagataisch",chk:"Chuukesisch",chm:"Mari",chn:"Chinook",cho:"Choctaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",ckb:"Zentralkurdisch",co:"Korsisch",cop:"Koptisch",cps:"Capiznon",cr:"Cree",crh:"Krimtatarisch",crs:"Seychellenkreol",cs:"Tschechisch",csb:"Kaschubisch",cu:"Kirchenslawisch",cv:"Tschuwaschisch",cy:"Walisisch",da:"Dänisch",dak:"Dakota",dar:"Darginisch",dav:"Taita",de:"Deutsch","de-AT":"Österreichisches Deutsch","de-CH":"Schweizer Hochdeutsch",del:"Delaware",den:"Slave",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Niedersorbisch",dtp:"Zentral-Dusun",dua:"Duala",dum:"Mittelniederländisch",dv:"Dhivehi",dyo:"Diola",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emilianisch",egy:"Ägyptisch",eka:"Ekajuk",el:"Griechisch",elx:"Elamisch",en:"Englisch","en-AU":"Englisch (Australien)","en-CA":"Englisch (Kanada)","en-GB":"Englisch (Vereinigtes Königreich)","en-US":"Englisch (Vereinigte Staaten)",enm:"Mittelenglisch",eo:"Esperanto",es:"Spanisch","es-419":"Spanisch (Lateinamerika)","es-ES":"Spanisch (Spanien)","es-MX":"Spanisch (Mexiko)",esu:"Zentral-Alaska-Yupik",et:"Estnisch",eu:"Baskisch",ewo:"Ewondo",ext:"Extremadurisch",fa:"Persisch",fan:"Pangwe",fat:"Fanti",ff:"Ful",fi:"Finnisch",fil:"Filipino",fit:"Meänkieli",fj:"Fidschi",fo:"Färöisch",fon:"Fon",fr:"Französisch","fr-CA":"Französisch (Kanada)","fr-CH":"Französisch (Schweiz)",frc:"Cajun",frm:"Mittelfranzösisch",fro:"Altfranzösisch",frp:"Frankoprovenzalisch",frr:"Nordfriesisch",frs:"Ostfriesisch",fur:"Friaulisch",fy:"Westfriesisch",ga:"Irisch",gaa:"Ga",gag:"Gagausisch",gan:"Gan",gay:"Gayo",gba:"Gbaya",gbz:"Gabri",gd:"Schottisches Gälisch",gez:"Geez",gil:"Kiribatisch",gl:"Galicisch",glk:"Gilaki",gmh:"Mittelhochdeutsch",gn:"Guaraní",goh:"Althochdeutsch",gom:"Goa-Konkani",gon:"Gondi",gor:"Mongondou",got:"Gotisch",grb:"Grebo",grc:"Altgriechisch",gsw:"Schweizerdeutsch",gu:"Gujarati",guc:"Wayúu",gur:"Farefare",guz:"Gusii",gv:"Manx",gwi:"Kutchin",ha:"Haussa",hai:"Haida",hak:"Hakka",haw:"Hawaiisch",he:"Hebräisch",hi:"Hindi",hif:"Fidschi-Hindi",hil:"Hiligaynon",hit:"Hethitisch",hmn:"Miao",ho:"Hiri-Motu",hr:"Kroatisch",hsb:"Obersorbisch",hsn:"Xiang",ht:"Haiti-Kreolisch",hu:"Ungarisch",hup:"Hupa",hy:"Armenisch",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesisch",ie:"Interlingue",ig:"Igbo",ii:"Yi",ik:"Inupiak",ilo:"Ilokano",inh:"Inguschisch",io:"Ido",is:"Isländisch",it:"Italienisch",iu:"Inuktitut",izh:"Ischorisch",ja:"Japanisch",jam:"Jamaikanisch-Kreolisch",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Jüdisch-Persisch",jrb:"Jüdisch-Arabisch",jut:"Jütisch",jv:"Javanisch",ka:"Georgisch",kaa:"Karakalpakisch",kab:"Kabylisch",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardinisch",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongolesisch",kgp:"Kaingang",kha:"Khasi",kho:"Sakisch",khq:"Koyra Chiini",khw:"Khowar",ki:"Kikuyu",kiu:"Kirmanjki",kj:"Kwanyama",kk:"Kasachisch",kkj:"Kako",kl:"Grönländisch",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Koreanisch",koi:"Komi-Permjakisch",kok:"Konkani",kos:"Kosraeanisch",kpe:"Kpelle",kr:"Kanuri",krc:"Karatschaiisch-Balkarisch",kri:"Krio",krj:"Kinaray-a",krl:"Karelisch",kru:"Oraon",ks:"Kaschmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Kölsch",ku:"Kurdisch",kum:"Kumükisch",kut:"Kutenai",kv:"Komi",kw:"Kornisch",ky:"Kirgisisch",la:"Latein",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luxemburgisch",lez:"Lesgisch",lfn:"Lingua Franca Nova",lg:"Ganda",li:"Limburgisch",lij:"Ligurisch",liv:"Livisch",lkt:"Lakota",lmo:"Lombardisch",ln:"Lingala",lo:"Laotisch",lol:"Mongo",lou:"Kreol (Louisiana)",loz:"Lozi",lrc:"Nördliches Luri",lt:"Litauisch",ltg:"Lettgallisch",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Lushai",luy:"Luhya",lv:"Lettisch",lzh:"Klassisches Chinesisch",lzz:"Lasisch",mad:"Maduresisch",maf:"Mafa",mag:"Khotta",mai:"Maithili",mak:"Makassarisch",man:"Malinke",mas:"Massai",mde:"Maba",mdf:"Mokschanisch",mdr:"Mandaresisch",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Madagassisch",mga:"Mittelirisch",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marschallesisch",mi:"Maori",mic:"Micmac",min:"Minangkabau",mk:"Mazedonisch",ml:"Malayalam",mn:"Mongolisch",mnc:"Mandschurisch",mni:"Meithei",moh:"Mohawk",mos:"Mossi",mr:"Marathi",mrj:"Bergmari",ms:"Malaiisch",mt:"Maltesisch",mua:"Mundang",mus:"Muskogee",mwl:"Mirandesisch",mwr:"Marwari",mwv:"Mentawai",my:"Birmanisch",mye:"Myene",myv:"Ersja-Mordwinisch",mzn:"Masanderanisch",na:"Nauruisch",nan:"Min Nan",nap:"Neapolitanisch",naq:"Nama",nb:"Norwegisch Bokmål",nd:"Nord-Ndebele",nds:"Niederdeutsch","nds-NL":"Niedersächsisch",ne:"Nepalesisch","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niue",njo:"Ao-Naga",nl:"Niederländisch","nl-BE":"Flämisch",nmg:"Kwasio",nn:"Norwegisch Nynorsk",nnh:"Ngiemboon",no:"Norwegisch",nog:"Nogai",non:"Altnordisch",nov:"Novial",nqo:"N’Ko",nr:"Süd-Ndebele",nso:"Nord-Sotho",nus:"Nuer",nv:"Navajo",nwc:"Alt-Newari",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Okzitanisch",oj:"Ojibwa",om:"Oromo",or:"Oriya",os:"Ossetisch",osa:"Osage",ota:"Osmanisch",pa:"Punjabi",pag:"Pangasinan",pal:"Mittelpersisch",pam:"Pampanggan",pap:"Papiamento",pau:"Palau",pcd:"Picardisch",pcm:"Nigerianisches Pidgin",pdc:"Pennsylvaniadeutsch",pdt:"Plautdietsch",peo:"Altpersisch",pfl:"Pfälzisch",phn:"Phönizisch",pi:"Pali",pl:"Polnisch",pms:"Piemontesisch",pnt:"Pontisch",pon:"Ponapeanisch",prg:"Altpreußisch",pro:"Altprovenzalisch",ps:"Paschtu",pt:"Portugiesisch","pt-BR":"Portugiesisch (Brasilien)","pt-PT":"Portugiesisch (Portugal)",qu:"Quechua",quc:"K’iche’",qug:"Chimborazo Hochland-Quechua",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotonganisch",rgn:"Romagnol",rif:"Tarifit",rm:"Rätoromanisch",rn:"Rundi",ro:"Rumänisch","ro-MD":"Moldauisch",rof:"Rombo",rom:"Romani",root:"Root",rtm:"Rotumanisch",ru:"Russisch",rue:"Russinisch",rug:"Roviana",rup:"Aromunisch",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawe",sah:"Jakutisch",sam:"Samaritanisch",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardisch",scn:"Sizilianisch",sco:"Schottisch",sd:"Sindhi",sdc:"Sassarisch",sdh:"Südkurdisch",se:"Nordsamisch",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkupisch",ses:"Koyra Senni",sg:"Sango",sga:"Altirisch",sgs:"Samogitisch",sh:"Serbo-Kroatisch",shi:"Taschelhit",shn:"Schan",shu:"Tschadisch-Arabisch",si:"Singhalesisch",sid:"Sidamo",sk:"Slowakisch",sl:"Slowenisch",sli:"Schlesisch (Niederschlesisch)",sly:"Selayar",sm:"Samoanisch",sma:"Südsamisch",smj:"Lule-Samisch",smn:"Inari-Samisch",sms:"Skolt-Samisch",sn:"Shona",snk:"Soninke",so:"Somali",sog:"Sogdisch",sq:"Albanisch",sr:"Serbisch",srn:"Srananisch",srr:"Serer",ss:"Swazi",ssy:"Saho",st:"Süd-Sotho",stq:"Saterfriesisch",su:"Sundanesisch",suk:"Sukuma",sus:"Susu",sux:"Sumerisch",sv:"Schwedisch",sw:"Suaheli","sw-CD":"Kongo-Swahili",swb:"Komorisch",syc:"Altsyrisch",syr:"Syrisch",szl:"Schlesisch (Wasserpolnisch)",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Temne",teo:"Teso",ter:"Tereno",tet:"Tetum",tg:"Tadschikisch",th:"Thailändisch",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmenisch",tkl:"Tokelauanisch",tkr:"Tsachurisch",tl:"Tagalog",tlh:"Klingonisch",tli:"Tlingit",tly:"Talisch",tmh:"Tamaseq",tn:"Tswana",to:"Tongaisch",tog:"Nyasa Tonga",tpi:"Neumelanesisch",tr:"Türkisch",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonisch",tsi:"Tsimshian",tt:"Tatarisch",ttt:"Tatisch",tum:"Tumbuka",tvl:"Tuvaluisch",tw:"Twi",twq:"Tasawaq",ty:"Tahitisch",tyv:"Tuwinisch",tzm:"Zentralatlas-Tamazight",udm:"Udmurtisch",ug:"Uigurisch",uga:"Ugaritisch",uk:"Ukrainisch",umb:"Umbundu",ur:"Urdu",uz:"Usbekisch",vai:"Vai",ve:"Venda",vec:"Venetisch",vep:"Wepsisch",vi:"Vietnamesisch",vls:"Westflämisch",vmf:"Mainfränkisch",vo:"Volapük",vot:"Wotisch",vro:"Võro",vun:"Vunjo",wa:"Wallonisch",wae:"Walliserdeutsch",wal:"Walamo",war:"Waray",was:"Washo",wbp:"Warlpiri",wo:"Wolof",wuu:"Wu",xal:"Kalmückisch",xh:"Xhosa",xmf:"Mingrelisch",xog:"Soga",yao:"Yao",yap:"Yapesisch",yav:"Yangben",ybb:"Yemba",yi:"Jiddisch",yo:"Yoruba",yrl:"Nheengatu",yue:"Kantonesisch",za:"Zhuang",zap:"Zapotekisch",zbl:"Bliss-Symbole",zea:"Seeländisch",zen:"Zenaga",zgh:"Tamazight",zh:"Chinesisch","zh-Hans":"Mandarin (Vereinfacht)","zh-Hant":"Chinesisch (Traditionell)",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Kyrillisch",Latn:"Lateinisch",Arab:"Arabisch",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Vereinfacht",Hant:"Traditionell"}},dv:{rtl:true,languageNames:{},scriptNames:{}},el:{rtl:false,languageNames:{aa:"Αφάρ",ab:"Αμπχαζικά",ace:"Ατσινιζικά",ach:"Ακολί",ada:"Αντάνγκμε",ady:"Αντιγκέα",ae:"Αβεστάν",af:"Αφρικάανς",afh:"Αφριχίλι",agq:"Αγκέμ",ain:"Αϊνού",ak:"Ακάν",akk:"Ακάντιαν",ale:"Αλεούτ",alt:"Νότια Αλτάι",am:"Αμχαρικά",an:"Αραγονικά",ang:"Παλαιά Αγγλικά",anp:"Ανγκικά",ar:"Αραβικά","ar-001":"Σύγχρονα Τυπικά Αραβικά",arc:"Αραμαϊκά",arn:"Αραουκανικά",arp:"Αραπάχο",ars:"Αραβικά Νάτζντι",arw:"Αραγουάκ",as:"Ασαμικά",asa:"Άσου",ast:"Αστουριανά",av:"Αβαρικά",awa:"Αγουαντί",ay:"Αϊμάρα",az:"Αζερμπαϊτζανικά",ba:"Μπασκίρ",bal:"Μπαλούτσι",ban:"Μπαλινίζ",bas:"Μπάσα",bax:"Μπαμούν",bbj:"Γκομάλα",be:"Λευκορωσικά",bej:"Μπέζα",bem:"Μπέμπα",bez:"Μπένα",bfd:"Μπαφούτ",bg:"Βουλγαρικά",bgn:"Δυτικά Μπαλοχικά",bho:"Μπότζπουρι",bi:"Μπισλάμα",bik:"Μπικόλ",bin:"Μπίνι",bkm:"Κομ",bla:"Σικσίκα",bm:"Μπαμπάρα",bn:"Βεγγαλικά",bo:"Θιβετιανά",br:"Βρετονικά",bra:"Μπρατζ",brx:"Μπόντο",bs:"Βοσνιακά",bss:"Ακόσι",bua:"Μπουριάτ",bug:"Μπουγκίζ",bum:"Μπουλού",byn:"Μπλιν",byv:"Μεντούμπα",ca:"Καταλανικά",cad:"Κάντο",car:"Καρίμπ",cay:"Καγιούγκα",cch:"Ατσάμ",ccp:"Τσάκμα",ce:"Τσετσενικά",ceb:"Σεμπουάνο",cgg:"Τσίγκα",ch:"Τσαμόρο",chb:"Τσίμπτσα",chg:"Τσαγκατάι",chk:"Τσουκίζι",chm:"Μάρι",chn:"Ιδιωματικά Σινούκ",cho:"Τσόκτο",chp:"Τσίπιουαν",chr:"Τσερόκι",chy:"Τσεγιέν",ckb:"Κουρδικά Σοράνι",co:"Κορσικανικά",cop:"Κοπτικά",cr:"Κρι",crh:"Τουρκικά Κριμαίας",crs:"Κρεολικά Γαλλικά Σεϋχελλών",cs:"Τσεχικά",csb:"Κασούμπιαν",cu:"Εκκλησιαστικά Σλαβικά",cv:"Τσουβασικά",cy:"Ουαλικά",da:"Δανικά",dak:"Ντακότα",dar:"Ντάργκουα",dav:"Τάιτα",de:"Γερμανικά","de-AT":"Γερμανικά Αυστρίας","de-CH":"Υψηλά Γερμανικά Ελβετίας",del:"Ντέλαγουερ",den:"Σλαβικά",dgr:"Ντόγκριμπ",din:"Ντίνκα",dje:"Ζάρμα",doi:"Ντόγκρι",dsb:"Κάτω Σορβικά",dua:"Ντουάλα",dum:"Μέσα Ολλανδικά",dv:"Ντιβέχι",dyo:"Τζόλα-Φόνι",dyu:"Ντογιούλα",dz:"Ντζόνγκχα",dzg:"Νταζάγκα",ebu:"Έμπου",ee:"Έουε",efi:"Εφίκ",egy:"Αρχαία Αιγυπτιακά",eka:"Εκατζούκ",el:"Ελληνικά",elx:"Ελαμάιτ",en:"Αγγλικά","en-AU":"Αγγλικά Αυστραλίας","en-CA":"Αγγλικά Καναδά","en-GB":"Αγγλικά Βρετανίας","en-US":"Αγγλικά Αμερικής",enm:"Μέσα Αγγλικά",eo:"Εσπεράντο",es:"Ισπανικά","es-419":"Ισπανικά Λατινικής Αμερικής","es-ES":"Ισπανικά Ευρώπης","es-MX":"Ισπανικά Μεξικού",et:"Εσθονικά",eu:"Βασκικά",ewo:"Εγουόντο",fa:"Περσικά",fan:"Φανγκ",fat:"Φάντι",ff:"Φουλά",fi:"Φινλανδικά",fil:"Φιλιππινικά",fj:"Φίτζι",fo:"Φεροϊκά",fon:"Φον",fr:"Γαλλικά","fr-CA":"Γαλλικά Καναδά","fr-CH":"Γαλλικά Ελβετίας",frc:"Γαλλικά (Λουιζιάνα)",frm:"Μέσα Γαλλικά",fro:"Παλαιά Γαλλικά",frr:"Βόρεια Φριζιανά",frs:"Ανατολικά Φριζιανά",fur:"Φριουλανικά",fy:"Δυτικά Φριζικά",ga:"Ιρλανδικά",gaa:"Γκα",gag:"Γκαγκάουζ",gay:"Γκάγιο",gba:"Γκμπάγια",gd:"Σκωτικά Κελτικά",gez:"Γκιζ",gil:"Γκιλμπερτίζ",gl:"Γαλικιανά",gmh:"Μέσα Άνω Γερμανικά",gn:"Γκουαρανί",goh:"Παλαιά Άνω Γερμανικά",gon:"Γκόντι",gor:"Γκοροντάλο",got:"Γοτθικά",grb:"Γκρίμπο",grc:"Αρχαία Ελληνικά",gsw:"Γερμανικά Ελβετίας",gu:"Γκουγιαράτι",guz:"Γκούσι",gv:"Μανξ",gwi:"Γκουίτσιν",ha:"Χάουσα",hai:"Χάιντα",haw:"Χαβαϊκά",he:"Εβραϊκά",hi:"Χίντι",hil:"Χιλιγκαϊνόν",hit:"Χιτίτε",hmn:"Χμονγκ",ho:"Χίρι Μότου",hr:"Κροατικά",hsb:"Άνω Σορβικά",ht:"Αϊτιανά",hu:"Ουγγρικά",hup:"Χούπα",hy:"Αρμενικά",hz:"Χερέρο",ia:"Ιντερλίνγκουα",iba:"Ιμπάν",ibb:"Ιμπίμπιο",id:"Ινδονησιακά",ie:"Ιντερλίνγκουε",ig:"Ίγκμπο",ii:"Σίτσουαν Γι",ik:"Ινουπιάκ",ilo:"Ιλόκο",inh:"Ινγκούς",io:"Ίντο",is:"Ισλανδικά",it:"Ιταλικά",iu:"Ινούκτιτουτ",ja:"Ιαπωνικά",jbo:"Λόζμπαν",jgo:"Νγκόμπα",jmc:"Ματσάμε",jpr:"Ιουδαϊκά-Περσικά",jrb:"Ιουδαϊκά-Αραβικά",jv:"Ιαβανικά",ka:"Γεωργιανά",kaa:"Κάρα-Καλπάκ",kab:"Καμπίλε",kac:"Κατσίν",kaj:"Τζου",kam:"Κάμπα",kaw:"Κάουι",kbd:"Καμπαρντιανά",kbl:"Κανέμπου",kcg:"Τιάπ",kde:"Μακόντε",kea:"Γλώσσα του Πράσινου Ακρωτηρίου",kfo:"Κόρο",kg:"Κονγκό",kha:"Κάσι",kho:"Κοτανικά",khq:"Κόιρα Τσίνι",ki:"Κικούγιου",kj:"Κουανιάμα",kk:"Καζακικά",kkj:"Κάκο",kl:"Καλαάλισουτ",kln:"Καλεντζίν",km:"Χμερ",kmb:"Κιμπούντου",kn:"Κανάντα",ko:"Κορεατικά",koi:"Κόμι-Περμιάκ",kok:"Κονκανικά",kos:"Κοσραενικά",kpe:"Κπέλε",kr:"Κανούρι",krc:"Καρατσάι-Μπαλκάρ",krl:"Καρελικά",kru:"Κουρούχ",ks:"Κασμιρικά",ksb:"Σαμπάλα",ksf:"Μπάφια",ksh:"Κολωνικά",ku:"Κουρδικά",kum:"Κουμγιούκ",kut:"Κουτενάι",kv:"Κόμι",kw:"Κορνουαλικά",ky:"Κιργιζικά",la:"Λατινικά",lad:"Λαδίνο",lag:"Λάνγκι",lah:"Λάχδα",lam:"Λάμπα",lb:"Λουξεμβουργιανά",lez:"Λεζγκικά",lg:"Γκάντα",li:"Λιμβουργιανά",lkt:"Λακότα",ln:"Λινγκάλα",lo:"Λαοτινά",lol:"Μόνγκο",lou:"Κρεολικά (Λουιζιάνα)",loz:"Λόζι",lrc:"Βόρεια Λούρι",lt:"Λιθουανικά",lu:"Λούμπα-Κατάνγκα",lua:"Λούμπα-Λουλούα",lui:"Λουισένο",lun:"Λούντα",luo:"Λούο",lus:"Μίζο",luy:"Λούχια",lv:"Λετονικά",mad:"Μαντουρίζ",maf:"Μάφα",mag:"Μαγκάχι",mai:"Μαϊτχίλι",mak:"Μακασάρ",man:"Μαντίνγκο",mas:"Μασάι",mde:"Μάμπα",mdf:"Μόκσα",mdr:"Μανδάρ",men:"Μέντε",mer:"Μέρου",mfe:"Μορισιέν",mg:"Μαλγασικά",mga:"Μέσα Ιρλανδικά",mgh:"Μακούβα-Μέτο",mgo:"Μέτα",mh:"Μαρσαλέζικα",mi:"Μαορί",mic:"Μικμάκ",min:"Μινανγκαμπάου",mk:"Μακεδονικά",ml:"Μαλαγιαλαμικά",mn:"Μογγολικά",mnc:"Μαντσού",mni:"Μανιπούρι",moh:"Μοχόκ",mos:"Μόσι",mr:"Μαραθικά",ms:"Μαλαισιανά",mt:"Μαλτεζικά",mua:"Μουντάνγκ",mus:"Κρικ",mwl:"Μιραντεζικά",mwr:"Μαργουάρι",my:"Βιρμανικά",mye:"Μιένε",myv:"Έρζια",mzn:"Μαζαντεράνι",na:"Ναούρου",nap:"Ναπολιτανικά",naq:"Νάμα",nb:"Νορβηγικά Μποκμάλ",nd:"Βόρεια Ντεμπέλε",nds:"Κάτω Γερμανικά","nds-NL":"Κάτω Γερμανικά Ολλανδίας",ne:"Νεπαλικά","new":"Νεγουάρι",ng:"Ντόνγκα",nia:"Νίας",niu:"Νιούε",nl:"Ολλανδικά","nl-BE":"Φλαμανδικά",nmg:"Κβάσιο",nn:"Νορβηγικά Νινόρσκ",nnh:"Νγκιεμπούν",no:"Νορβηγικά",nog:"Νογκάι",non:"Παλαιά Νορβηγικά",nqo:"Ν’Κο",nr:"Νότια Ντεμπέλε",nso:"Βόρεια Σόθο",nus:"Νούερ",nv:"Νάβαχο",nwc:"Κλασικά Νεουάρι",ny:"Νιάντζα",nym:"Νιαμγουέζι",nyn:"Νιανκόλε",nyo:"Νιόρο",nzi:"Νζίμα",oc:"Οξιτανικά",oj:"Οζιβίγουα",om:"Ορόμο",or:"Όντια",os:"Οσετικά",osa:"Οσάζ",ota:"Οθωμανικά Τουρκικά",pa:"Παντζαπικά",pag:"Πανγκασινάν",pal:"Παχλάβι",pam:"Παμπάνγκα",pap:"Παπιαμέντο",pau:"Παλάουαν",pcm:"Πίτζιν Νιγηρίας",peo:"Αρχαία Περσικά",phn:"Φοινικικά",pi:"Πάλι",pl:"Πολωνικά",pon:"Πομπηικά",prg:"Πρωσικά",pro:"Παλαιά Προβανσάλ",ps:"Πάστο",pt:"Πορτογαλικά","pt-BR":"Πορτογαλικά Βραζιλίας","pt-PT":"Πορτογαλικά Ευρώπης",qu:"Κέτσουα",quc:"Κιτσέ",raj:"Ραζασθάνι",rap:"Ραπανούι",rar:"Ραροτονγκάν",rm:"Ρομανικά",rn:"Ρούντι",ro:"Ρουμανικά","ro-MD":"Μολδαβικά",rof:"Ρόμπο",rom:"Ρομανί",root:"Ρίζα",ru:"Ρωσικά",rup:"Αρομανικά",rw:"Κινιαρουάντα",rwk:"Ρουά",sa:"Σανσκριτικά",sad:"Σαντάγουε",sah:"Σαχά",sam:"Σαμαρίτικα Αραμαϊκά",saq:"Σαμπούρου",sas:"Σασάκ",sat:"Σαντάλι",sba:"Νγκαμπέι",sbp:"Σάνγκου",sc:"Σαρδηνιακά",scn:"Σικελικά",sco:"Σκωτικά",sd:"Σίντι",sdh:"Νότια Κουρδικά",se:"Βόρεια Σάμι",see:"Σένεκα",seh:"Σένα",sel:"Σελκούπ",ses:"Κοϊραμπόρο Σένι",sg:"Σάνγκο",sga:"Παλαιά Ιρλανδικά",sh:"Σερβοκροατικά",shi:"Τασελχίτ",shn:"Σαν",shu:"Αραβικά του Τσαντ",si:"Σινχαλεζικά",sid:"Σιντάμο",sk:"Σλοβακικά",sl:"Σλοβενικά",sm:"Σαμοανά",sma:"Νότια Σάμι",smj:"Λούλε Σάμι",smn:"Ινάρι Σάμι",sms:"Σκολτ Σάμι",sn:"Σόνα",snk:"Σονίνκε",so:"Σομαλικά",sog:"Σογκντιέν",sq:"Αλβανικά",sr:"Σερβικά",srn:"Σρανάν Τόνγκο",srr:"Σερέρ",ss:"Σουάτι",ssy:"Σάχο",st:"Νότια Σόθο",su:"Σουνδανικά",suk:"Σουκούμα",sus:"Σούσου",sux:"Σουμερικά",sv:"Σουηδικά",sw:"Σουαχίλι","sw-CD":"Κονγκό Σουαχίλι",swb:"Κομοριανά",syc:"Κλασικά Συριακά",syr:"Συριακά",ta:"Ταμιλικά",te:"Τελούγκου",tem:"Τίμνε",teo:"Τέσο",ter:"Τερένο",tet:"Τέτουμ",tg:"Τατζικικά",th:"Ταϊλανδικά",ti:"Τιγκρινικά",tig:"Τίγκρε",tiv:"Τιβ",tk:"Τουρκμενικά",tkl:"Τοκελάου",tl:"Τάγκαλογκ",tlh:"Κλίνγκον",tli:"Τλίνγκιτ",tmh:"Ταμασέκ",tn:"Τσουάνα",to:"Τονγκανικά",tog:"Νιάσα Τόνγκα",tpi:"Τοκ Πισίν",tr:"Τουρκικά",trv:"Ταρόκο",ts:"Τσόνγκα",tsi:"Τσίμσιαν",tt:"Ταταρικά",tum:"Τουμπούκα",tvl:"Τουβαλού",tw:"Τούι",twq:"Τασαβάκ",ty:"Ταϊτιανά",tyv:"Τουβινικά",tzm:"Ταμαζίτ Κεντρικού Μαρόκο",udm:"Ουντμούρτ",ug:"Ουιγκουρικά",uga:"Ουγκαριτικά",uk:"Ουκρανικά",umb:"Ουμπούντου",ur:"Ουρντού",uz:"Ουζμπεκικά",vai:"Βάι",ve:"Βέντα",vi:"Βιετναμικά",vo:"Βολαπιούκ",vot:"Βότικ",vun:"Βούντζο",wa:"Βαλλωνικά",wae:"Βάλσερ",wal:"Γουολάιτα",war:"Γουάραϊ",was:"Γουασό",wbp:"Γουαρλπίρι",wo:"Γουόλοφ",wuu:"Κινεζικά Γου",xal:"Καλμίκ",xh:"Κόσα",xog:"Σόγκα",yao:"Γιάο",yap:"Γιαπίζ",yav:"Γιανγκμπέν",ybb:"Γιέμπα",yi:"Γίντις",yo:"Γιορούμπα",yue:"Καντονέζικα",za:"Ζουάνγκ",zap:"Ζάποτεκ",zbl:"Σύμβολα Bliss",zen:"Ζενάγκα",zgh:"Τυπικά Ταμαζίτ Μαρόκου",zh:"Κινεζικά","zh-Hans":"Απλοποιημένα Μανδαρινικά Κινεζικά","zh-Hant":"Παραδοσιακά Μανδαρινικά Κινεζικά",zu:"Ζουλού",zun:"Ζούνι",zza:"Ζάζα"},scriptNames:{Cyrl:"Κυριλλικό",Latn:"Λατινικό",Arab:"Αραβικό",Guru:"Γκουρμουκχί",Tfng:"Τιφινάγκ",Vaii:"Βάι",Hans:"Απλοποιημένο",Hant:"Παραδοσιακό"}},en:{rtl:false,languageNames:{aa:"Afar",ab:"Abkhazian",ace:"Achinese",ach:"Acoli",ada:"Adangme",ady:"Adyghe",ae:"Avestan",aeb:"Tunisian Arabic",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Ainu",ak:"Akan",akk:"Akkadian",akz:"Alabama",ale:"Aleut",aln:"Gheg Albanian",alt:"Southern Altai",am:"Amharic",an:"Aragonese",ang:"Old English",anp:"Angika",ar:"Arabic","ar-001":"Modern Standard Arabic",arc:"Aramaic",arn:"Mapuche",aro:"Araona",arp:"Arapaho",arq:"Algerian Arabic",ars:"Najdi Arabic",arw:"Arawak",ary:"Moroccan Arabic",arz:"Egyptian Arabic",as:"Assamese",asa:"Asu",ase:"American Sign Language",ast:"Asturian",av:"Avaric",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Azerbaijani",ba:"Bashkir",bal:"Baluchi",ban:"Balinese",bar:"Bavarian",bas:"Basaa",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Belarusian",bej:"Beja",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgarian",bgn:"Western Balochi",bho:"Bhojpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Bangla",bo:"Tibetan",bpy:"Bishnupriya",bqi:"Bakhtiari",br:"Breton",bra:"Braj",brh:"Brahui",brx:"Bodo",bs:"Bosnian",bss:"Akoose",bua:"Buriat",bug:"Buginese",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Catalan",cad:"Caddo",car:"Carib",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Chiga",ch:"Chamorro",chb:"Chibcha",chg:"Chagatai",chk:"Chuukese",chm:"Mari",chn:"Chinook Jargon",cho:"Choctaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",cic:"Chickasaw",ckb:"Central Kurdish",co:"Corsican",cop:"Coptic",cps:"Capiznon",cr:"Cree",crh:"Crimean Turkish",crs:"Seselwa Creole French",cs:"Czech",csb:"Kashubian",cu:"Church Slavic",cv:"Chuvash",cy:"Welsh",da:"Danish",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"German","de-AT":"Austrian German","de-CH":"Swiss High German",del:"Delaware",den:"Slave",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Lower Sorbian",dtp:"Central Dusun",dua:"Duala",dum:"Middle Dutch",dv:"Divehi",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emilian",egy:"Ancient Egyptian",eka:"Ekajuk",el:"Greek",elx:"Elamite",en:"English","en-AU":"Australian English","en-CA":"Canadian English","en-GB":"British English","en-US":"American English",enm:"Middle English",eo:"Esperanto",es:"Spanish","es-419":"Latin American Spanish","es-ES":"European Spanish","es-MX":"Mexican Spanish",esu:"Central Yupik",et:"Estonian",eu:"Basque",ewo:"Ewondo",ext:"Extremaduran",fa:"Persian","fa-AF":"Dari",fan:"Fang",fat:"Fanti",ff:"Fulah",fi:"Finnish",fil:"Filipino",fit:"Tornedalen Finnish",fj:"Fijian",fo:"Faroese",fon:"Fon",fr:"French","fr-CA":"Canadian French","fr-CH":"Swiss French",frc:"Cajun French",frm:"Middle French",fro:"Old French",frp:"Arpitan",frr:"Northern Frisian",frs:"Eastern Frisian",fur:"Friulian",fy:"Western Frisian",ga:"Irish",gaa:"Ga",gag:"Gagauz",gan:"Gan Chinese",gay:"Gayo",gba:"Gbaya",gbz:"Zoroastrian Dari",gd:"Scottish Gaelic",gez:"Geez",gil:"Gilbertese",gl:"Galician",glk:"Gilaki",gmh:"Middle High German",gn:"Guarani",goh:"Old High German",gom:"Goan Konkani",gon:"Gondi",gor:"Gorontalo",got:"Gothic",grb:"Grebo",grc:"Ancient Greek",gsw:"Swiss German",gu:"Gujarati",guc:"Wayuu",gur:"Frafra",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hai:"Haida",hak:"Hakka Chinese",haw:"Hawaiian",he:"Hebrew",hi:"Hindi",hif:"Fiji Hindi",hil:"Hiligaynon",hit:"Hittite",hmn:"Hmong",ho:"Hiri Motu",hr:"Croatian",hsb:"Upper Sorbian",hsn:"Xiang Chinese",ht:"Haitian Creole",hu:"Hungarian",hup:"Hupa",hy:"Armenian",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesian",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ik:"Inupiaq",ilo:"Iloko",inh:"Ingush",io:"Ido",is:"Icelandic",it:"Italian",iu:"Inuktitut",izh:"Ingrian",ja:"Japanese",jam:"Jamaican Creole English",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Judeo-Persian",jrb:"Judeo-Arabic",jut:"Jutish",jv:"Javanese",ka:"Georgian",kaa:"Kara-Kalpak",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardian",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongo",kgp:"Kaingang",kha:"Khasi",kho:"Khotanese",khq:"Koyra Chiini",khw:"Khowar",ki:"Kikuyu",kiu:"Kirmanjki",kj:"Kuanyama",kk:"Kazakh",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Korean",koi:"Komi-Permyak",kok:"Konkani",kos:"Kosraean",kpe:"Kpelle",kr:"Kanuri",krc:"Karachay-Balkar",kri:"Krio",krj:"Kinaray-a",krl:"Karelian",kru:"Kurukh",ks:"Kashmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Colognian",ku:"Kurdish",kum:"Kumyk",kut:"Kutenai",kv:"Komi",kw:"Cornish",ky:"Kyrgyz",la:"Latin",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luxembourgish",lez:"Lezghian",lfn:"Lingua Franca Nova",lg:"Ganda",li:"Limburgish",lij:"Ligurian",liv:"Livonian",lkt:"Lakota",lmo:"Lombard",ln:"Lingala",lo:"Lao",lol:"Mongo",lou:"Louisiana Creole",loz:"Lozi",lrc:"Northern Luri",lt:"Lithuanian",ltg:"Latgalian",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Latvian",lzh:"Literary Chinese",lzz:"Laz",mad:"Madurese",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",man:"Mandingo",mas:"Masai",mde:"Maba",mdf:"Moksha",mdr:"Mandar",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Malagasy",mga:"Middle Irish",mgh:"Makhuwa-Meetto",mgo:"Metaʼ",mh:"Marshallese",mi:"Maori",mic:"Mi'kmaq",min:"Minangkabau",mk:"Macedonian",ml:"Malayalam",mn:"Mongolian",mnc:"Manchu",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",mrj:"Western Mari",ms:"Malay",mt:"Maltese",mua:"Mundang",mus:"Muscogee",mwl:"Mirandese",mwr:"Marwari",mwv:"Mentawai",my:"Burmese",mye:"Myene",myv:"Erzya",mzn:"Mazanderani",na:"Nauru",nan:"Min Nan Chinese",nap:"Neapolitan",naq:"Nama",nb:"Norwegian Bokmål",nd:"North Ndebele",nds:"Low German","nds-NL":"Low Saxon",ne:"Nepali","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niuean",njo:"Ao Naga",nl:"Dutch","nl-BE":"Flemish",nmg:"Kwasio",nn:"Norwegian Nynorsk",nnh:"Ngiemboon",no:"Norwegian",nog:"Nogai",non:"Old Norse",nov:"Novial",nqo:"N’Ko",nr:"South Ndebele",nso:"Northern Sotho",nus:"Nuer",nv:"Navajo",nwc:"Classical Newari",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Occitan",oj:"Ojibwa",om:"Oromo",or:"Odia",os:"Ossetic",osa:"Osage",ota:"Ottoman Turkish",pa:"Punjabi",pag:"Pangasinan",pal:"Pahlavi",pam:"Pampanga",pap:"Papiamento",pau:"Palauan",pcd:"Picard",pcm:"Nigerian Pidgin",pdc:"Pennsylvania German",pdt:"Plautdietsch",peo:"Old Persian",pfl:"Palatine German",phn:"Phoenician",pi:"Pali",pl:"Polish",pms:"Piedmontese",pnt:"Pontic",pon:"Pohnpeian",prg:"Prussian",pro:"Old Provençal",ps:"Pashto",pt:"Portuguese","pt-BR":"Brazilian Portuguese","pt-PT":"European Portuguese",qu:"Quechua",quc:"Kʼicheʼ",qug:"Chimborazo Highland Quichua",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotongan",rgn:"Romagnol",rif:"Riffian",rm:"Romansh",rn:"Rundi",ro:"Romanian","ro-MD":"Moldavian",rof:"Rombo",rom:"Romany",root:"Root",rtm:"Rotuman",ru:"Russian",rue:"Rusyn",rug:"Roviana",rup:"Aromanian",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawe",sah:"Sakha",sam:"Samaritan Aramaic",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardinian",scn:"Sicilian",sco:"Scots",sd:"Sindhi",sdc:"Sassarese Sardinian",sdh:"Southern Kurdish",se:"Northern Sami",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkup",ses:"Koyraboro Senni",sg:"Sango",sga:"Old Irish",sgs:"Samogitian",sh:"Serbo-Croatian",shi:"Tachelhit",shn:"Shan",shu:"Chadian Arabic",si:"Sinhala",sid:"Sidamo",sk:"Slovak",sl:"Slovenian",sli:"Lower Silesian",sly:"Selayar",sm:"Samoan",sma:"Southern Sami",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somali",sog:"Sogdien",sq:"Albanian",sr:"Serbian","sr-ME":"Montenegrin",srn:"Sranan Tongo",srr:"Serer",ss:"Swati",ssy:"Saho",st:"Southern Sotho",stq:"Saterland Frisian",su:"Sundanese",suk:"Sukuma",sus:"Susu",sux:"Sumerian",sv:"Swedish",sw:"Swahili","sw-CD":"Congo Swahili",swb:"Comorian",syc:"Classical Syriac",syr:"Syriac",szl:"Silesian",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetum",tg:"Tajik",th:"Thai",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmen",tkl:"Tokelau",tkr:"Tsakhur",tl:"Tagalog",tlh:"Klingon",tli:"Tlingit",tly:"Talysh",tmh:"Tamashek",tn:"Tswana",to:"Tongan",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Turkish",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonian",tsi:"Tsimshian",tt:"Tatar",ttt:"Muslim Tat",tum:"Tumbuka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahitian",tyv:"Tuvinian",tzm:"Central Atlas Tamazight",udm:"Udmurt",ug:"Uyghur",uga:"Ugaritic",uk:"Ukrainian",umb:"Umbundu",ur:"Urdu",uz:"Uzbek",vai:"Vai",ve:"Venda",vec:"Venetian",vep:"Veps",vi:"Vietnamese",vls:"West Flemish",vmf:"Main-Franconian",vo:"Volapük",vot:"Votic",vro:"Võro",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Wolaytta",war:"Waray",was:"Washo",wbp:"Warlpiri",wo:"Wolof",wuu:"Wu Chinese",xal:"Kalmyk",xh:"Xhosa",xmf:"Mingrelian",xog:"Soga",yao:"Yao",yap:"Yapese",yav:"Yangben",ybb:"Yemba",yi:"Yiddish",yo:"Yoruba",yrl:"Nheengatu",yue:"Cantonese",za:"Zhuang",zap:"Zapotec",zbl:"Blissymbols",zea:"Zeelandic",zen:"Zenaga",zgh:"Standard Moroccan Tamazight",zh:"Mandarin Chinese","zh-Hans":"Simplified Mandarin Chinese","zh-Hant":"Traditional Mandarin Chinese",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Cyrillic",Latn:"Latin",Arab:"Arabic",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Simplified",Hant:"Traditional"}},"en-AU":{rtl:false,languageNames:{aa:"Afar",ab:"Abkhazian",ace:"Achinese",ach:"Acoli",ada:"Adangme",ady:"Adyghe",ae:"Avestan",aeb:"Tunisian Arabic",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Ainu",ak:"Akan",akk:"Akkadian",akz:"Alabama",ale:"Aleut",aln:"Gheg Albanian",alt:"Southern Altai",am:"Amharic",an:"Aragonese",ang:"Old English",anp:"Angika",ar:"Arabic","ar-001":"Modern Standard Arabic",arc:"Aramaic",arn:"Mapuche",aro:"Araona",arp:"Arapaho",arq:"Algerian Arabic",ars:"Najdi Arabic",arw:"Arawak",ary:"Moroccan Arabic",arz:"Egyptian Arabic",as:"Assamese",asa:"Asu",ase:"American Sign Language",ast:"Asturian",av:"Avaric",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Azerbaijani",ba:"Bashkir",bal:"Baluchi",ban:"Balinese",bar:"Bavarian",bas:"Basaa",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Belarusian",bej:"Beja",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgarian",bgn:"Western Balochi",bho:"Bhojpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Bengali",bo:"Tibetan",bpy:"Bishnupriya",bqi:"Bakhtiari",br:"Breton",bra:"Braj",brh:"Brahui",brx:"Bodo",bs:"Bosnian",bss:"Akoose",bua:"Buriat",bug:"Buginese",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Catalan",cad:"Caddo",car:"Carib",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Chiga",ch:"Chamorro",chb:"Chibcha",chg:"Chagatai",chk:"Chuukese",chm:"Mari",chn:"Chinook Jargon",cho:"Choctaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",cic:"Chickasaw",ckb:"Central Kurdish",co:"Corsican",cop:"Coptic",cps:"Capiznon",cr:"Cree",crh:"Crimean Turkish",crs:"Seselwa Creole French",cs:"Czech",csb:"Kashubian",cu:"Church Slavic",cv:"Chuvash",cy:"Welsh",da:"Danish",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"German","de-AT":"Austrian German","de-CH":"Swiss High German",del:"Delaware",den:"Slave",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Lower Sorbian",dtp:"Central Dusun",dua:"Duala",dum:"Middle Dutch",dv:"Divehi",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emilian",egy:"Ancient Egyptian",eka:"Ekajuk",el:"Greek",elx:"Elamite",en:"English","en-AU":"Australian English","en-CA":"Canadian English","en-GB":"British English","en-US":"United States English",enm:"Middle English",eo:"Esperanto",es:"Spanish","es-419":"Latin American Spanish","es-ES":"European Spanish","es-MX":"Mexican Spanish",esu:"Central Yupik",et:"Estonian",eu:"Basque",ewo:"Ewondo",ext:"Extremaduran",fa:"Persian","fa-AF":"Dari",fan:"Fang",fat:"Fanti",ff:"Fulah",fi:"Finnish",fil:"Filipino",fit:"Tornedalen Finnish",fj:"Fijian",fo:"Faroese",fon:"Fon",fr:"French","fr-CA":"Canadian French","fr-CH":"Swiss French",frm:"Middle French",fro:"Old French",frp:"Arpitan",frr:"Northern Frisian",frs:"Eastern Frisian",fur:"Friulian",fy:"Western Frisian",ga:"Irish",gaa:"Ga",gag:"Gagauz",gan:"Gan Chinese",gay:"Gayo",gba:"Gbaya",gbz:"Zoroastrian Dari",gd:"Scottish Gaelic",gez:"Geez",gil:"Gilbertese",gl:"Galician",glk:"Gilaki",gmh:"Middle High German",gn:"Guarani",goh:"Old High German",gom:"Goan Konkani",gon:"Gondi",gor:"Gorontalo",got:"Gothic",grb:"Grebo",grc:"Ancient Greek",gsw:"Swiss German",gu:"Gujarati",guc:"Wayuu",gur:"Frafra",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hai:"Haida",hak:"Hakka Chinese",haw:"Hawaiian",he:"Hebrew",hi:"Hindi",hif:"Fiji Hindi",hil:"Hiligaynon",hit:"Hittite",hmn:"Hmong",ho:"Hiri Motu",hr:"Croatian",hsb:"Upper Sorbian",hsn:"Xiang Chinese",ht:"Haitian Creole",hu:"Hungarian",hup:"Hupa",hy:"Armenian",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesian",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ik:"Inupiaq",ilo:"Iloko",inh:"Ingush",io:"Ido",is:"Icelandic",it:"Italian",iu:"Inuktitut",izh:"Ingrian",ja:"Japanese",jam:"Jamaican Creole English",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Judeo-Persian",jrb:"Judeo-Arabic",jut:"Jutish",jv:"Javanese",ka:"Georgian",kaa:"Kara-Kalpak",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardian",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongo",kgp:"Kaingang",kha:"Khasi",kho:"Khotanese",khq:"Koyra Chiini",khw:"Khowar",ki:"Kikuyu",kiu:"Kirmanjki",kj:"Kuanyama",kk:"Kazakh",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Korean",koi:"Komi-Permyak",kok:"Konkani",kos:"Kosraean",kpe:"Kpelle",kr:"Kanuri",krc:"Karachay-Balkar",kri:"Krio",krj:"Kinaray-a",krl:"Karelian",kru:"Kurukh",ks:"Kashmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Colognian",ku:"Kurdish",kum:"Kumyk",kut:"Kutenai",kv:"Komi",kw:"Cornish",ky:"Kyrgyz",la:"Latin",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luxembourgish",lez:"Lezghian",lfn:"Lingua Franca Nova",lg:"Ganda",li:"Limburgish",lij:"Ligurian",liv:"Livonian",lkt:"Lakota",lmo:"Lombard",ln:"Lingala",lo:"Lao",lol:"Mongo",loz:"Lozi",lrc:"Northern Luri",lt:"Lithuanian",ltg:"Latgalian",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Latvian",lzh:"Literary Chinese",lzz:"Laz",mad:"Madurese",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",man:"Mandingo",mas:"Masai",mde:"Maba",mdf:"Moksha",mdr:"Mandar",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Malagasy",mga:"Middle Irish",mgh:"Makhuwa-Meetto",mgo:"Metaʼ",mh:"Marshallese",mi:"Maori",mic:"Mi'kmaq",min:"Minangkabau",mk:"Macedonian",ml:"Malayalam",mn:"Mongolian",mnc:"Manchu",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",mrj:"Western Mari",ms:"Malay",mt:"Maltese",mua:"Mundang",mus:"Creek",mwl:"Mirandese",mwr:"Marwari",mwv:"Mentawai",my:"Burmese",mye:"Myene",myv:"Erzya",mzn:"Mazanderani",na:"Nauru",nan:"Min Nan Chinese",nap:"Neapolitan",naq:"Nama",nb:"Norwegian Bokmål",nd:"North Ndebele",nds:"Low German","nds-NL":"West Low German",ne:"Nepali","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niuean",njo:"Ao Naga",nl:"Dutch","nl-BE":"Flemish",nmg:"Kwasio",nn:"Norwegian Nynorsk",nnh:"Ngiemboon",no:"Norwegian",nog:"Nogai",non:"Old Norse",nov:"Novial",nqo:"N’Ko",nr:"South Ndebele",nso:"Northern Sotho",nus:"Nuer",nv:"Navajo",nwc:"Classical Newari",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Occitan",oj:"Ojibwa",om:"Oromo",or:"Odia",os:"Ossetic",osa:"Osage",ota:"Ottoman Turkish",pa:"Punjabi",pag:"Pangasinan",pal:"Pahlavi",pam:"Pampanga",pap:"Papiamento",pau:"Palauan",pcd:"Picard",pcm:"Nigerian Pidgin",pdc:"Pennsylvania German",pdt:"Plautdietsch",peo:"Old Persian",pfl:"Palatine German",phn:"Phoenician",pi:"Pali",pl:"Polish",pms:"Piedmontese",pnt:"Pontic",pon:"Pohnpeian",prg:"Prussian",pro:"Old Provençal",ps:"Pashto",pt:"Portuguese","pt-BR":"Brazilian Portuguese","pt-PT":"European Portuguese",qu:"Quechua",quc:"Kʼicheʼ",qug:"Chimborazo Highland Quichua",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotongan",rgn:"Romagnol",rif:"Riffian",rm:"Romansh",rn:"Rundi",ro:"Romanian","ro-MD":"Moldovan",rof:"Rombo",rom:"Romany",root:"Root",rtm:"Rotuman",ru:"Russian",rue:"Rusyn",rug:"Roviana",rup:"Aromanian",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawe",sah:"Sakha",sam:"Samaritan Aramaic",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardinian",scn:"Sicilian",sco:"Scots",sd:"Sindhi",sdc:"Sassarese Sardinian",sdh:"Southern Kurdish",se:"Northern Sami",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkup",ses:"Koyraboro Senni",sg:"Sango",sga:"Old Irish",sgs:"Samogitian",sh:"Serbo-Croatian",shi:"Tachelhit",shn:"Shan",shu:"Chadian Arabic",si:"Sinhala",sid:"Sidamo",sk:"Slovak",sl:"Slovenian",sli:"Lower Silesian",sly:"Selayar",sm:"Samoan",sma:"Southern Sami",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somali",sog:"Sogdien",sq:"Albanian",sr:"Serbian","sr-ME":"Montenegrin",srn:"Sranan Tongo",srr:"Serer",ss:"Swati",ssy:"Saho",st:"Southern Sotho",stq:"Saterland Frisian",su:"Sundanese",suk:"Sukuma",sus:"Susu",sux:"Sumerian",sv:"Swedish",sw:"Swahili","sw-CD":"Congo Swahili",swb:"Comorian",syc:"Classical Syriac",syr:"Syriac",szl:"Silesian",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetum",tg:"Tajik",th:"Thai",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmen",tkl:"Tokelau",tkr:"Tsakhur",tl:"Tagalog",tlh:"Klingon",tli:"Tlingit",tly:"Talysh",tmh:"Tamashek",tn:"Tswana",to:"Tongan",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Turkish",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonian",tsi:"Tsimshian",tt:"Tatar",ttt:"Muslim Tat",tum:"Tumbuka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahitian",tyv:"Tuvinian",tzm:"Central Atlas Tamazight",udm:"Udmurt",ug:"Uyghur",uga:"Ugaritic",uk:"Ukrainian",umb:"Umbundu",ur:"Urdu",uz:"Uzbek",vai:"Vai",ve:"Venda",vec:"Venetian",vep:"Veps",vi:"Vietnamese",vls:"West Flemish",vmf:"Main-Franconian",vo:"Volapük",vot:"Votic",vro:"Võro",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Wolaytta",war:"Waray",was:"Washo",wbp:"Warlpiri",wo:"Wolof",wuu:"Wu Chinese",xal:"Kalmyk",xh:"Xhosa",xmf:"Mingrelian",xog:"Soga",yao:"Yao",yap:"Yapese",yav:"Yangben",ybb:"Yemba",yi:"Yiddish",yo:"Yoruba",yrl:"Nheengatu",yue:"Cantonese",za:"Zhuang",zap:"Zapotec",zbl:"Blissymbols",zea:"Zeelandic",zen:"Zenaga",zgh:"Standard Moroccan Tamazight",zh:"Mandarin Chinese","zh-Hans":"Simplified Mandarin Chinese","zh-Hant":"Traditional Mandarin Chinese",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Cyrillic",Latn:"Latin",Arab:"Arabic",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Simplified",Hant:"Traditional"}},"en-GB":{rtl:false,languageNames:{aa:"Afar",ab:"Abkhazian",ace:"Achinese",ach:"Acoli",ada:"Adangme",ady:"Adyghe",ae:"Avestan",aeb:"Tunisian Arabic",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Ainu",ak:"Akan",akk:"Akkadian",akz:"Alabama",ale:"Aleut",aln:"Gheg Albanian",alt:"Southern Altai",am:"Amharic",an:"Aragonese",ang:"Old English",anp:"Angika",ar:"Arabic","ar-001":"Modern Standard Arabic",arc:"Aramaic",arn:"Mapuche",aro:"Araona",arp:"Arapaho",arq:"Algerian Arabic",ars:"Najdi Arabic",arw:"Arawak",ary:"Moroccan Arabic",arz:"Egyptian Arabic",as:"Assamese",asa:"Asu",ase:"American Sign Language",ast:"Asturian",av:"Avaric",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Azerbaijani",ba:"Bashkir",bal:"Baluchi",ban:"Balinese",bar:"Bavarian",bas:"Basaa",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Belarusian",bej:"Beja",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgarian",bgn:"Western Balochi",bho:"Bhojpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Bangla",bo:"Tibetan",bpy:"Bishnupriya",bqi:"Bakhtiari",br:"Breton",bra:"Braj",brh:"Brahui",brx:"Bodo",bs:"Bosnian",bss:"Akoose",bua:"Buriat",bug:"Buginese",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Catalan",cad:"Caddo",car:"Carib",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Chiga",ch:"Chamorro",chb:"Chibcha",chg:"Chagatai",chk:"Chuukese",chm:"Mari",chn:"Chinook Jargon",cho:"Choctaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",cic:"Chickasaw",ckb:"Central Kurdish",co:"Corsican",cop:"Coptic",cps:"Capiznon",cr:"Cree",crh:"Crimean Turkish",crs:"Seselwa Creole French",cs:"Czech",csb:"Kashubian",cu:"Church Slavic",cv:"Chuvash",cy:"Welsh",da:"Danish",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"German","de-AT":"Austrian German","de-CH":"Swiss High German",del:"Delaware",den:"Slave",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Lower Sorbian",dtp:"Central Dusun",dua:"Duala",dum:"Middle Dutch",dv:"Divehi",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emilian",egy:"Ancient Egyptian",eka:"Ekajuk",el:"Greek",elx:"Elamite",en:"English","en-AU":"Australian English","en-CA":"Canadian English","en-GB":"British English","en-US":"American English",enm:"Middle English",eo:"Esperanto",es:"Spanish","es-419":"Latin American Spanish","es-ES":"European Spanish","es-MX":"Mexican Spanish",esu:"Central Yupik",et:"Estonian",eu:"Basque",ewo:"Ewondo",ext:"Extremaduran",fa:"Persian","fa-AF":"Dari",fan:"Fang",fat:"Fanti",ff:"Fulah",fi:"Finnish",fil:"Filipino",fit:"Tornedalen Finnish",fj:"Fijian",fo:"Faroese",fon:"Fon",fr:"French","fr-CA":"Canadian French","fr-CH":"Swiss French",frc:"Cajun French",frm:"Middle French",fro:"Old French",frp:"Arpitan",frr:"Northern Frisian",frs:"Eastern Frisian",fur:"Friulian",fy:"Western Frisian",ga:"Irish",gaa:"Ga",gag:"Gagauz",gan:"Gan Chinese",gay:"Gayo",gba:"Gbaya",gbz:"Zoroastrian Dari",gd:"Scottish Gaelic",gez:"Geez",gil:"Gilbertese",gl:"Galician",glk:"Gilaki",gmh:"Middle High German",gn:"Guarani",goh:"Old High German",gom:"Goan Konkani",gon:"Gondi",gor:"Gorontalo",got:"Gothic",grb:"Grebo",grc:"Ancient Greek",gsw:"Swiss German",gu:"Gujarati",guc:"Wayuu",gur:"Frafra",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hai:"Haida",hak:"Hakka Chinese",haw:"Hawaiian",he:"Hebrew",hi:"Hindi",hif:"Fiji Hindi",hil:"Hiligaynon",hit:"Hittite",hmn:"Hmong",ho:"Hiri Motu",hr:"Croatian",hsb:"Upper Sorbian",hsn:"Xiang Chinese",ht:"Haitian Creole",hu:"Hungarian",hup:"Hupa",hy:"Armenian",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesian",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ik:"Inupiaq",ilo:"Iloko",inh:"Ingush",io:"Ido",is:"Icelandic",it:"Italian",iu:"Inuktitut",izh:"Ingrian",ja:"Japanese",jam:"Jamaican Creole English",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Judeo-Persian",jrb:"Judeo-Arabic",jut:"Jutish",jv:"Javanese",ka:"Georgian",kaa:"Kara-Kalpak",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardian",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongo",kgp:"Kaingang",kha:"Khasi",kho:"Khotanese",khq:"Koyra Chiini",khw:"Khowar",ki:"Kikuyu",kiu:"Kirmanjki",kj:"Kuanyama",kk:"Kazakh",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Korean",koi:"Komi-Permyak",kok:"Konkani",kos:"Kosraean",kpe:"Kpelle",kr:"Kanuri",krc:"Karachay-Balkar",kri:"Krio",krj:"Kinaray-a",krl:"Karelian",kru:"Kurukh",ks:"Kashmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Colognian",ku:"Kurdish",kum:"Kumyk",kut:"Kutenai",kv:"Komi",kw:"Cornish",ky:"Kyrgyz",la:"Latin",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luxembourgish",lez:"Lezghian",lfn:"Lingua Franca Nova",lg:"Ganda",li:"Limburgish",lij:"Ligurian",liv:"Livonian",lkt:"Lakota",lmo:"Lombard",ln:"Lingala",lo:"Lao",lol:"Mongo",lou:"Louisiana Creole",loz:"Lozi",lrc:"Northern Luri",lt:"Lithuanian",ltg:"Latgalian",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Latvian",lzh:"Literary Chinese",lzz:"Laz",mad:"Madurese",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",man:"Mandingo",mas:"Masai",mde:"Maba",mdf:"Moksha",mdr:"Mandar",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Malagasy",mga:"Middle Irish",mgh:"Makhuwa-Meetto",mgo:"Metaʼ",mh:"Marshallese",mi:"Maori",mic:"Mi'kmaq",min:"Minangkabau",mk:"Macedonian",ml:"Malayalam",mn:"Mongolian",mnc:"Manchu",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",mrj:"Western Mari",ms:"Malay",mt:"Maltese",mua:"Mundang",mus:"Creek",mwl:"Mirandese",mwr:"Marwari",mwv:"Mentawai",my:"Burmese",mye:"Myene",myv:"Erzya",mzn:"Mazanderani",na:"Nauru",nan:"Min Nan Chinese",nap:"Neapolitan",naq:"Nama",nb:"Norwegian Bokmål",nd:"North Ndebele",nds:"Low German","nds-NL":"West Low German",ne:"Nepali","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niuean",njo:"Ao Naga",nl:"Dutch","nl-BE":"Flemish",nmg:"Kwasio",nn:"Norwegian Nynorsk",nnh:"Ngiemboon",no:"Norwegian",nog:"Nogai",non:"Old Norse",nov:"Novial",nqo:"N’Ko",nr:"South Ndebele",nso:"Northern Sotho",nus:"Nuer",nv:"Navajo",nwc:"Classical Newari",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Occitan",oj:"Ojibwa",om:"Oromo",or:"Odia",os:"Ossetic",osa:"Osage",ota:"Ottoman Turkish",pa:"Punjabi",pag:"Pangasinan",pal:"Pahlavi",pam:"Pampanga",pap:"Papiamento",pau:"Palauan",pcd:"Picard",pcm:"Nigerian Pidgin",pdc:"Pennsylvania German",pdt:"Plautdietsch",peo:"Old Persian",pfl:"Palatine German",phn:"Phoenician",pi:"Pali",pl:"Polish",pms:"Piedmontese",pnt:"Pontic",pon:"Pohnpeian",prg:"Prussian",pro:"Old Provençal",ps:"Pashto",pt:"Portuguese","pt-BR":"Brazilian Portuguese","pt-PT":"European Portuguese",qu:"Quechua",quc:"Kʼicheʼ",qug:"Chimborazo Highland Quichua",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotongan",rgn:"Romagnol",rif:"Riffian",rm:"Romansh",rn:"Rundi",ro:"Romanian","ro-MD":"Moldavian",rof:"Rombo",rom:"Romany",root:"Root",rtm:"Rotuman",ru:"Russian",rue:"Rusyn",rug:"Roviana",rup:"Aromanian",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawe",sah:"Sakha",sam:"Samaritan Aramaic",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardinian",scn:"Sicilian",sco:"Scots",sd:"Sindhi",sdc:"Sassarese Sardinian",sdh:"Southern Kurdish",se:"Northern Sami",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkup",ses:"Koyraboro Senni",sg:"Sango",sga:"Old Irish",sgs:"Samogitian",sh:"Serbo-Croatian",shi:"Tachelhit",shn:"Shan",shu:"Chadian Arabic",si:"Sinhala",sid:"Sidamo",sk:"Slovak",sl:"Slovenian",sli:"Lower Silesian",sly:"Selayar",sm:"Samoan",sma:"Southern Sami",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somali",sog:"Sogdien",sq:"Albanian",sr:"Serbian","sr-ME":"Montenegrin",srn:"Sranan Tongo",srr:"Serer",ss:"Swati",ssy:"Saho",st:"Southern Sotho",stq:"Saterland Frisian",su:"Sundanese",suk:"Sukuma",sus:"Susu",sux:"Sumerian",sv:"Swedish",sw:"Swahili","sw-CD":"Congo Swahili",swb:"Comorian",syc:"Classical Syriac",syr:"Syriac",szl:"Silesian",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetum",tg:"Tajik",th:"Thai",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmen",tkl:"Tokelau",tkr:"Tsakhur",tl:"Tagalog",tlh:"Klingon",tli:"Tlingit",tly:"Talysh",tmh:"Tamashek",tn:"Tswana",to:"Tongan",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Turkish",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonian",tsi:"Tsimshian",tt:"Tatar",ttt:"Muslim Tat",tum:"Tumbuka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahitian",tyv:"Tuvinian",tzm:"Central Atlas Tamazight",udm:"Udmurt",ug:"Uyghur",uga:"Ugaritic",uk:"Ukrainian",umb:"Umbundu",ur:"Urdu",uz:"Uzbek",vai:"Vai",ve:"Venda",vec:"Venetian",vep:"Veps",vi:"Vietnamese",vls:"West Flemish",vmf:"Main-Franconian",vo:"Volapük",vot:"Votic",vro:"Võro",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Wolaytta",war:"Waray",was:"Washo",wbp:"Warlpiri",wo:"Wolof",wuu:"Wu Chinese",xal:"Kalmyk",xh:"Xhosa",xmf:"Mingrelian",xog:"Soga",yao:"Yao",yap:"Yapese",yav:"Yangben",ybb:"Yemba",yi:"Yiddish",yo:"Yoruba",yrl:"Nheengatu",yue:"Cantonese",za:"Zhuang",zap:"Zapotec",zbl:"Blissymbols",zea:"Zeelandic",zen:"Zenaga",zgh:"Standard Moroccan Tamazight",zh:"Mandarin Chinese","zh-Hans":"Simplified Mandarin Chinese","zh-Hant":"Traditional Mandarin Chinese",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Cyrillic",Latn:"Latin",Arab:"Arabic",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Simplified",Hant:"Traditional"}},eo:{rtl:false,languageNames:{aa:"afara",ab:"abĥaza",af:"afrikansa",am:"amhara",ar:"araba","ar-001":"araba (Mondo)",as:"asama",ay:"ajmara",az:"azerbajĝana",ba:"baŝkira",be:"belorusa",bg:"bulgara",bi:"bislamo",bn:"bengala",bo:"tibeta",br:"bretona",bs:"bosnia",ca:"kataluna",co:"korsika",cs:"ĉeĥa",cy:"kimra",da:"dana",de:"germana","de-AT":"germana (Aŭstrujo)","de-CH":"germana (Svisujo)",dv:"mahla",dz:"dzonko",efi:"ibibioefika",el:"greka",en:"angla","en-AU":"angla (Aŭstralio)","en-CA":"angla (Kanado)","en-GB":"angla (Unuiĝinta Reĝlando)","en-US":"angla (Usono)",eo:"esperanto",es:"hispana","es-419":"hispana (419)","es-ES":"hispana (Hispanujo)","es-MX":"hispana (Meksiko)",et:"estona",eu:"eŭska",fa:"persa",fi:"finna",fil:"filipina",fj:"fiĝia",fo:"feroa",fr:"franca","fr-CA":"franca (Kanado)","fr-CH":"franca (Svisujo)",fy:"frisa",ga:"irlanda",gd:"gaela",gl:"galega",gn:"gvarania",gu:"guĝarata",ha:"haŭsa",haw:"havaja",he:"hebrea",hi:"hinda",hr:"kroata",ht:"haitia kreola",hu:"hungara",hy:"armena",ia:"interlingvao",id:"indonezia",ie:"okcidentalo",ik:"eskima",is:"islanda",it:"itala",iu:"inuita",ja:"japana",jv:"java",ka:"kartvela",kk:"kazaĥa",kl:"gronlanda",km:"kmera",kn:"kanara",ko:"korea",ks:"kaŝmira",ku:"kurda",ky:"kirgiza",la:"latino",lb:"luksemburga",ln:"lingala",lo:"laŭa",lt:"litova",lv:"latva",mg:"malagasa",mi:"maoria",mk:"makedona",ml:"malajalama",mn:"mongola",mr:"marata",ms:"malaja",mt:"malta",my:"birma",na:"naura",nb:"dannorvega","nds-NL":"nds (Nederlando)",ne:"nepala",nl:"nederlanda","nl-BE":"nederlanda (Belgujo)",nn:"novnorvega",no:"norvega",oc:"okcitana",om:"oroma",or:"orijo",pa:"panĝaba",pl:"pola",ps:"paŝtoa",pt:"portugala","pt-BR":"brazilportugala","pt-PT":"eŭropportugala",qu:"keĉua",rm:"romanĉa",rn:"burunda",ro:"rumana","ro-MD":"rumana (Moldavujo)",ru:"rusa",rw:"ruanda",sa:"sanskrito",sd:"sinda",sg:"sangoa",sh:"serbo-Kroata",si:"sinhala",sk:"slovaka",sl:"slovena",sm:"samoa",sn:"ŝona",so:"somala",sq:"albana",sr:"serba",ss:"svazia",st:"sota",su:"sunda",sv:"sveda",sw:"svahila","sw-CD":"svahila (CD)",ta:"tamila",te:"telugua",tg:"taĝika",th:"taja",ti:"tigraja",tk:"turkmena",tl:"tagaloga",tlh:"klingona",tn:"cvana",to:"tongaa",tr:"turka",ts:"conga",tt:"tatara",ug:"ujgura",uk:"ukraina",ur:"urduo",uz:"uzbeka",vi:"vjetnama",vo:"volapuko",wo:"volofa",xh:"ksosa",yi:"jida",yo:"joruba",za:"ĝuanga",zh:"ĉina","zh-Hans":"ĉina (Hans)","zh-Hant":"ĉina (Hant)",zu:"zulua"},scriptNames:{}},es:{rtl:false,languageNames:{aa:"afar",ab:"abjasio",ace:"acehnés",ach:"acoli",ada:"adangme",ady:"adigué",ae:"avéstico",af:"afrikáans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"acadio",ale:"aleutiano",alt:"altái meridional",am:"amárico",an:"aragonés",ang:"inglés antiguo",anp:"angika",ar:"árabe","ar-001":"árabe estándar moderno",arc:"arameo",arn:"mapuche",arp:"arapaho",ars:"árabe najdí",arw:"arahuaco",as:"asamés",asa:"asu",ast:"asturiano",av:"avar",awa:"avadhi",ay:"aimara",az:"azerbaiyano",ba:"baskir",bal:"baluchi",ban:"balinés",bas:"basaa",bax:"bamún",bbj:"ghomala",be:"bielorruso",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"búlgaro",bgn:"baluchi occidental",bho:"bhoyapurí",bi:"bislama",bik:"bicol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalí",bo:"tibetano",br:"bretón",bra:"braj",brx:"bodo",bs:"bosnio",bss:"akoose",bua:"buriato",bug:"buginés",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalán",cad:"caddo",car:"caribe",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"checheno",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatái",chk:"trukés",chm:"marí",chn:"jerga chinuk",cho:"choctaw",chp:"chipewyan",chr:"cheroqui",chy:"cheyene",ckb:"kurdo sorani",co:"corso",cop:"copto",cr:"cree",crh:"tártaro de Crimea",crs:"criollo seychelense",cs:"checo",csb:"casubio",cu:"eslavo eclesiástico",cv:"chuvasio",cy:"galés",da:"danés",dak:"dakota",dar:"dargva",dav:"taita",de:"alemán","de-AT":"alemán austríaco","de-CH":"alto alemán suizo",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"bajo sorbio",dua:"duala",dum:"neerlandés medio",dv:"divehi",dyo:"jola-fonyi",dyu:"diula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewé",efi:"efik",egy:"egipcio antiguo",eka:"ekajuk",el:"griego",elx:"elamita",en:"inglés","en-AU":"inglés australiano","en-CA":"inglés canadiense","en-GB":"inglés británico","en-US":"inglés estadounidense",enm:"inglés medio",eo:"esperanto",es:"español","es-419":"español latinoamericano","es-ES":"español de España","es-MX":"español de México",et:"estonio",eu:"euskera",ewo:"ewondo",fa:"persa",fan:"fang",fat:"fanti",ff:"fula",fi:"finés",fil:"filipino",fj:"fiyiano",fo:"feroés",fr:"francés","fr-CA":"francés canadiense","fr-CH":"francés suizo",frc:"francés cajún",frm:"francés medio",fro:"francés antiguo",frr:"frisón septentrional",frs:"frisón oriental",fur:"friulano",fy:"frisón occidental",ga:"irlandés",gaa:"ga",gag:"gagauzo",gan:"chino gan",gay:"gayo",gba:"gbaya",gd:"gaélico escocés",gez:"geez",gil:"gilbertés",gl:"gallego",gmh:"alto alemán medio",gn:"guaraní",goh:"alto alemán antiguo",gon:"gondi",gor:"gorontalo",got:"gótico",grb:"grebo",grc:"griego antiguo",gsw:"alemán suizo",gu:"guyaratí",guz:"gusii",gv:"manés",gwi:"kutchin",ha:"hausa",hai:"haida",hak:"chino hakka",haw:"hawaiano",he:"hebreo",hi:"hindi",hil:"hiligaynon",hit:"hitita",hmn:"hmong",ho:"hiri motu",hr:"croata",hsb:"alto sorbio",hsn:"chino xiang",ht:"criollo haitiano",hu:"húngaro",hup:"hupa",hy:"armenio",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesio",ie:"interlingue",ig:"igbo",ii:"yi de Sichuán",ik:"inupiaq",ilo:"ilocano",inh:"ingush",io:"ido",is:"islandés",it:"italiano",iu:"inuktitut",ja:"japonés",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"judeo-persa",jrb:"judeo-árabe",jv:"javanés",ka:"georgiano",kaa:"karakalpako",kab:"cabila",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardiano",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"criollo caboverdiano",kfo:"koro",kg:"kongo",kha:"khasi",kho:"kotanés",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kazajo",kkj:"kako",kl:"groenlandés",kln:"kalenjin",km:"jemer",kmb:"kimbundu",kn:"canarés",ko:"coreano",koi:"komi permio",kok:"konkaní",kos:"kosraeano",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",krl:"carelio",kru:"kurukh",ks:"cachemiro",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurdo",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"córnico",ky:"kirguís",la:"latín",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgués",lez:"lezgiano",lg:"ganda",li:"limburgués",lkt:"lakota",ln:"lingala",lo:"lao",lol:"mongo",lou:"criollo de Luisiana",loz:"lozi",lrc:"lorí septentrional",lt:"lituano",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseño",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letón",mad:"madurés",maf:"mafa",mag:"magahi",mai:"maithili",mak:"macasar",man:"mandingo",mas:"masái",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"criollo mauriciano",mg:"malgache",mga:"irlandés medio",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshalés",mi:"maorí",mic:"micmac",min:"minangkabau",mk:"macedonio",ml:"malayalam",mn:"mongol",mnc:"manchú",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"maratí",ms:"malayo",mt:"maltés",mua:"mundang",mus:"creek",mwl:"mirandés",mwr:"marwari",my:"birmano",mye:"myene",myv:"erzya",mzn:"mazandaraní",na:"nauruano",nan:"chino min nan",nap:"napolitano",naq:"nama",nb:"noruego bokmal",nd:"ndebele septentrional",nds:"bajo alemán","nds-NL":"bajo sajón",ne:"nepalí","new":"newari",ng:"ndonga",nia:"nias",niu:"niueano",nl:"neerlandés","nl-BE":"flamenco",nmg:"kwasio",nn:"noruego nynorsk",nnh:"ngiemboon",no:"noruego",nog:"nogai",non:"nórdico antiguo",nqo:"n’ko",nr:"ndebele meridional",nso:"sotho septentrional",nus:"nuer",nv:"navajo",nwc:"newari clásico",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitano",oj:"ojibwa",om:"oromo",or:"oriya",os:"osético",osa:"osage",ota:"turco otomano",pa:"punyabí",pag:"pangasinán",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauano",pcm:"pidgin de Nigeria",peo:"persa antiguo",phn:"fenicio",pi:"pali",pl:"polaco",pon:"pohnpeiano",prg:"prusiano",pro:"provenzal antiguo",ps:"pastún",pt:"portugués","pt-BR":"portugués de Brasil","pt-PT":"portugués de Portugal",qu:"quechua",quc:"quiché",raj:"rajasthani",rap:"rapanui",rar:"rarotongano",rm:"romanche",rn:"kirundi",ro:"rumano","ro-MD":"moldavo",rof:"rombo",rom:"romaní",root:"raíz",ru:"ruso",rup:"arrumano",rw:"kinyarwanda",rwk:"rwa",sa:"sánscrito",sad:"sandawe",sah:"sakha",sam:"arameo samaritano",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"escocés",sd:"sindhi",sdh:"kurdo meridional",se:"sami septentrional",see:"seneca",seh:"sena",sel:"selkup",ses:"koyraboro senni",sg:"sango",sga:"irlandés antiguo",sh:"serbocroata",shi:"tashelhit",shn:"shan",shu:"árabe chadiano",si:"cingalés",sid:"sidamo",sk:"eslovaco",sl:"esloveno",sm:"samoano",sma:"sami meridional",smj:"sami lule",smn:"sami inari",sms:"sami skolt",sn:"shona",snk:"soninké",so:"somalí",sog:"sogdiano",sq:"albanés",sr:"serbio",srn:"sranan tongo",srr:"serer",ss:"suazi",ssy:"saho",st:"sotho meridional",su:"sundanés",suk:"sukuma",sus:"susu",sux:"sumerio",sv:"sueco",sw:"suajili","sw-CD":"suajili del Congo",swb:"comorense",syc:"siríaco clásico",syr:"siriaco",ta:"tamil",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetún",tg:"tayiko",th:"tailandés",ti:"tigriña",tig:"tigré",tk:"turcomano",tkl:"tokelauano",tl:"tagalo",tlh:"klingon",tli:"tlingit",tmh:"tamashek",tn:"setsuana",to:"tongano",tog:"tonga del Nyasa",tpi:"tok pisin",tr:"turco",trv:"taroko",ts:"tsonga",tsi:"tsimshiano",tt:"tártaro",tum:"tumbuka",tvl:"tuvaluano",tw:"twi",twq:"tasawaq",ty:"tahitiano",tyv:"tuviniano",tzm:"tamazight del Atlas Central",udm:"udmurt",ug:"uigur",uga:"ugarítico",uk:"ucraniano",umb:"umbundu",ur:"urdu",uz:"uzbeko",ve:"venda",vi:"vietnamita",vo:"volapük",vot:"vótico",vun:"vunjo",wa:"valón",wae:"walser",wal:"wolayta",war:"waray",was:"washo",wbp:"warlpiri",wo:"wólof",wuu:"chino wu",xal:"kalmyk",xh:"xhosa",xog:"soga",yap:"yapés",yav:"yangben",ybb:"yemba",yi:"yidis",yo:"yoruba",yue:"cantonés",za:"zhuang",zap:"zapoteco",zbl:"símbolos Bliss",zen:"zenaga",zgh:"tamazight estándar marroquí",zh:"chino","zh-Hans":"chino mandarín simplificado","zh-Hant":"chino mandarín tradicional",zu:"zulú",zun:"zuñi",zza:"zazaki"},scriptNames:{Cyrl:"cirílico",Latn:"latino",Arab:"árabe",Guru:"gurmuji",Tfng:"tifinagh",Vaii:"vai",Hans:"simplificado",Hant:"tradicional"}},et:{rtl:false,languageNames:{aa:"afari",ab:"abhaasi",ace:"atšehi",ach:"atšoli",ada:"adangme",ady:"adõgee",ae:"avesta",aeb:"Tuneesia araabia",af:"afrikaani",afh:"afrihili",agq:"aghemi",ain:"ainu",ak:"akani",akk:"akadi",akz:"alabama",ale:"aleuudi",aln:"geegi",alt:"altai",am:"amhara",an:"aragoni",ang:"vanainglise",anp:"angika",ar:"araabia","ar-001":"araabia (tänapäevane)",arc:"aramea",arn:"mapudunguni",aro:"araona",arp:"arapaho",arq:"Alžeeria araabia",arw:"aravaki",ary:"Maroko araabia",arz:"Egiptuse araabia",as:"assami",asa:"asu",ase:"Ameerika viipekeel",ast:"astuuria",av:"avaari",awa:"avadhi",ay:"aimara",az:"aserbaidžaani",ba:"baškiiri",bal:"belutši",ban:"bali",bar:"baieri",bas:"basaa",bax:"bamuni",bbc:"bataki",bbj:"ghomala",be:"valgevene",bej:"bedža",bem:"bemba",bew:"betavi",bez:"bena",bfd:"bafuti",bfq:"badaga",bg:"bulgaaria",bgn:"läänebelutši",bho:"bhodžpuri",bi:"bislama",bik:"bikoli",bin:"edo",bjn:"bandžari",bkm:"komi (Aafrika)",bla:"mustjalaindiaani",bm:"bambara",bn:"bengali",bo:"tiibeti",bpy:"bišnuprija",bqi:"bahtiari",br:"bretooni",bra:"bradži",brh:"brahui",brx:"bodo",bs:"bosnia",bss:"akoose",bua:"burjaadi",bug:"bugi",bum:"bulu",byn:"bilini",byv:"medumba",ca:"katalaani",cad:"kado",car:"kariibi",cay:"kajuka",cch:"aitšami",ccp:"tšaakma",ce:"tšetšeeni",ceb:"sebu",cgg:"tšiga",ch:"tšamorro",chb:"tšibtša",chg:"tšagatai",chk:"tšuugi",chm:"mari",chn:"tšinuki žargoon",cho:"tšokto",chp:"tšipevai",chr:"tšerokii",chy:"šaieeni",ckb:"sorani",co:"korsika",cop:"kopti",cps:"kapisnoni",cr:"krii",crh:"krimmitatari",crs:"seišelli",cs:"tšehhi",csb:"kašuubi",cu:"kirikuslaavi",cv:"tšuvaši",cy:"kõmri",da:"taani",dak:"siuu",dar:"dargi",dav:"davida",de:"saksa","de-AT":"Austria saksa","de-CH":"Šveitsi ülemsaksa",del:"delavari",den:"sleivi",dgr:"dogribi",din:"dinka",dje:"zarma",doi:"dogri",dsb:"alamsorbi",dtp:"keskdusuni",dua:"duala",dum:"keskhollandi",dv:"maldiivi",dyo:"fonji",dyu:"djula",dz:"dzongkha",dzg:"daza",ebu:"embu",ee:"eve",efi:"efiki",egl:"emiilia",egy:"egiptuse",eka:"ekadžuki",el:"kreeka",elx:"eelami",en:"inglise","en-AU":"Austraalia inglise","en-CA":"Kanada inglise","en-GB":"Briti inglise","en-US":"Ameerika inglise",enm:"keskinglise",eo:"esperanto",es:"hispaania","es-419":"Ladina-Ameerika hispaania","es-ES":"Euroopa hispaania","es-MX":"Mehhiko hispaania",esu:"keskjupiki",et:"eesti",eu:"baski",ewo:"evondo",ext:"estremenju",fa:"pärsia",fan:"fangi",fat:"fanti",ff:"fula",fi:"soome",fil:"filipiini",fit:"meä",fj:"fidži",fo:"fääri",fon:"foni",fr:"prantsuse","fr-CA":"Kanada prantsuse","fr-CH":"Šveitsi prantsuse",frc:"cajun’i",frm:"keskprantsuse",fro:"vanaprantsuse",frp:"frankoprovansi",frr:"põhjafriisi",frs:"idafriisi",fur:"friuuli",fy:"läänefriisi",ga:"iiri",gag:"gagauusi",gan:"kani",gay:"gajo",gba:"gbaja",gd:"gaeli",gez:"etioopia",gil:"kiribati",gl:"galeegi",glk:"gilaki",gmh:"keskülemsaksa",gn:"guaranii",goh:"vanaülemsaksa",gon:"gondi",gor:"gorontalo",got:"gooti",grb:"grebo",grc:"vanakreeka",gsw:"šveitsisaksa",gu:"gudžarati",guc:"vajuu",gur:"farefare",guz:"gusii",gv:"mänksi",gwi:"gvitšini",ha:"hausa",hai:"haida",hak:"hakka",haw:"havai",he:"heebrea",hi:"hindi",hif:"Fidži hindi",hil:"hiligainoni",hit:"heti",hmn:"hmongi",ho:"hirimotu",hr:"horvaadi",hsb:"ülemsorbi",hsn:"sjangi",ht:"haiti",hu:"ungari",hup:"hupa",hy:"armeenia",hz:"herero",ia:"interlingua",iba:"ibani",ibb:"ibibio",id:"indoneesia",ie:"interlingue",ig:"ibo",ii:"nuosu",ik:"injupiaki",ilo:"iloko",inh:"inguši",io:"ido",is:"islandi",it:"itaalia",iu:"inuktituti",izh:"isuri",ja:"jaapani",jam:"Jamaica kreoolkeel",jbo:"ložban",jgo:"ngomba",jmc:"matšame",jpr:"juudipärsia",jrb:"juudiaraabia",jut:"jüüti",jv:"jaava",ka:"gruusia",kaa:"karakalpaki",kab:"kabiili",kac:"katšini",kaj:"jju",kam:"kamba",kaw:"kaavi",kbd:"kabardi-tšerkessi",kbl:"kanembu",kcg:"tjapi",kde:"makonde",kea:"kabuverdianu",kfo:"koro",kg:"kongo",kgp:"kaingangi",kha:"khasi",kho:"saka",khq:"koyra chiini",khw:"khovari",ki:"kikuju",kiu:"kõrmandžki",kj:"kvanjama",kk:"kasahhi",kkj:"kako",kl:"grööni",kln:"kalendžini",km:"khmeeri",kmb:"mbundu",kn:"kannada",ko:"korea",koi:"permikomi",kok:"konkani",kos:"kosrae",kpe:"kpelle",kr:"kanuri",krc:"karatšai-balkaari",kri:"krio",krj:"kinaraia",krl:"karjala",kru:"kuruhhi",ks:"kašmiiri",ksb:"šambala",ksf:"bafia",ksh:"kölni",ku:"kurdi",kum:"kumõki",kut:"kutenai",kv:"komi",kw:"korni",ky:"kirgiisi",la:"ladina",lad:"ladiino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"letseburgi",lez:"lesgi",lg:"ganda",li:"limburgi",lij:"liguuri",liv:"liivi",lkt:"lakota",lmo:"lombardi",ln:"lingala",lo:"lao",lol:"mongo",lou:"Louisiana kreoolkeel",loz:"lozi",lrc:"põhjaluri",lt:"leedu",ltg:"latgali",lu:"Katanga luba",lua:"lulua",lui:"luisenjo",lun:"lunda",lus:"lušei",luy:"luhja",lv:"läti",lzh:"klassikaline hiina",lzz:"lazi",mad:"madura",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makassari",man:"malinke",mas:"masai",mde:"maba",mdf:"mokša",mdr:"mandari",men:"mende",mer:"meru",mfe:"Mauritiuse kreoolkeel",mg:"malagassi",mga:"keskiiri",mgh:"makhuwa-meetto",mgo:"meta",mh:"maršalli",mi:"maoori",mic:"mikmaki",min:"minangkabau",mk:"makedoonia",ml:"malajalami",mn:"mongoli",mnc:"mandžu",mni:"manipuri",moh:"mohoogi",mos:"more",mr:"marathi",mrj:"mäemari",ms:"malai",mt:"malta",mua:"mundangi",mus:"maskogi",mwl:"miranda",mwr:"marvari",mwv:"mentavei",my:"birma",mye:"mjene",myv:"ersa",mzn:"mazandaraani",na:"nauru",nan:"lõunamini",nap:"napoli",naq:"nama",nb:"norra bokmål",nd:"põhjandebele",nds:"alamsaksa","nds-NL":"Hollandi alamsaksa",ne:"nepali","new":"nevari",ng:"ndonga",nia:"niasi",niu:"niue",njo:"ao",nl:"hollandi","nl-BE":"flaami",nmg:"kwasio",nn:"uusnorra",nnh:"ngiembooni",no:"norra",nog:"nogai",non:"vanapõhjala",nov:"noviaal",nqo:"nkoo",nr:"lõunandebele",nso:"põhjasotho",nus:"nueri",nv:"navaho",nwc:"vananevari",ny:"njandža",nym:"njamvesi",nyn:"njankole",nyo:"njoro",nzi:"nzima",oc:"oksitaani",oj:"odžibvei",om:"oromo",or:"oria",os:"osseedi",osa:"oseidži",ota:"osmanitürgi",pa:"pandžabi",pag:"pangasinani",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"belau",pcd:"pikardi",pcm:"Nigeeria pidžinkeel",pdc:"Pennsylvania saksa",pdt:"mennoniidisaksa",peo:"vanapärsia",pfl:"Pfalzi",phn:"foiniikia",pi:"paali",pl:"poola",pms:"piemonte",pnt:"pontose",pon:"poonpei",prg:"preisi",pro:"vanaprovansi",ps:"puštu",pt:"portugali","pt-BR":"Brasiilia portugali","pt-PT":"Euroopa portugali",qu:"ketšua",quc:"kitše",raj:"radžastani",rap:"rapanui",rar:"rarotonga",rgn:"romanja",rif:"riifi",rm:"romanši",rn:"rundi",ro:"rumeenia","ro-MD":"moldova",rof:"rombo",rom:"mustlaskeel",rtm:"rotuma",ru:"vene",rue:"russiini",rug:"roviana",rup:"aromuuni",rw:"ruanda",rwk:"rvaa",sa:"sanskriti",sad:"sandave",sah:"jakuudi",sam:"Samaaria aramea",saq:"samburu",sas:"sasaki",sat:"santali",saz:"sauraštra",sba:"ngambai",sbp:"sangu",sc:"sardi",scn:"sitsiilia",sco:"šoti",sd:"sindhi",sdh:"lõunakurdi",se:"põhjasaami",see:"seneka",seh:"sena",sei:"seri",sel:"sölkupi",ses:"koyraboro senni",sg:"sango",sga:"vanaiiri",sgs:"žemaidi",sh:"serbia-horvaadi",shi:"šilha",shn:"šani",shu:"Tšaadi araabia",si:"singali",sid:"sidamo",sk:"slovaki",sl:"sloveeni",sli:"alamsileesia",sly:"selajari",sm:"samoa",sma:"lõunasaami",smj:"Lule saami",smn:"Inari saami",sms:"koltasaami",sn:"šona",snk:"soninke",so:"somaali",sog:"sogdi",sq:"albaania",sr:"serbia",srn:"sranani",srr:"sereri",ss:"svaasi",ssy:"saho",st:"lõunasotho",stq:"saterfriisi",su:"sunda",suk:"sukuma",sus:"susu",sux:"sumeri",sv:"rootsi",sw:"suahiili","sw-CD":"Kongo suahiili",swb:"komoori",syc:"vanasüüria",syr:"süüria",szl:"sileesia",ta:"tamili",tcy:"tulu",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetumi",tg:"tadžiki",th:"tai",ti:"tigrinja",tig:"tigree",tiv:"tivi",tk:"türkmeeni",tkl:"tokelau",tkr:"tsahhi",tl:"tagalogi",tlh:"klingoni",tli:"tlingiti",tly:"talõši",tmh:"tamašeki",tn:"tsvana",to:"tonga",tog:"tšitonga",tpi:"uusmelaneesia",tr:"türgi",tru:"turojo",trv:"taroko",ts:"tsonga",tsd:"tsakoonia",tsi:"tšimši",tt:"tatari",ttt:"lõunataadi",tum:"tumbuka",tvl:"tuvalu",tw:"tvii",twq:"taswaqi",ty:"tahiti",tyv:"tõva",tzm:"tamasikti",udm:"udmurdi",ug:"uiguuri",uga:"ugariti",uk:"ukraina",umb:"umbundu",ur:"urdu",uz:"usbeki",ve:"venda",vec:"veneti",vep:"vepsa",vi:"vietnami",vls:"lääneflaami",vmf:"Maini frangi",vo:"volapüki",vot:"vadja",vro:"võru",vun:"vundžo",wa:"vallooni",wae:"valsi",wal:"volaita",war:"varai",was:"vašo",wbp:"varlpiri",wo:"volofi",wuu:"uu",xal:"kalmõki",xh:"koosa",xmf:"megreli",xog:"soga",yao:"jao",yap:"japi",yav:"yangbeni",ybb:"jemba",yi:"jidiši",yo:"joruba",yrl:"njengatu",yue:"kantoni",za:"tšuangi",zap:"sapoteegi",zbl:"Blissi sümbolid",zea:"zeelandi",zen:"zenaga",zgh:"tamasikti (Maroko)",zh:"hiina","zh-Hans":"lihtsustatud mandariinihiina","zh-Hant":"traditsiooniline mandariinihiina",zu:"suulu",zun:"sunji",zza:"zaza"},scriptNames:{Cyrl:"kirillitsa",Latn:"ladina",Arab:"araabia",Guru:"gurmukhi",Tfng:"tifinagi",Vaii:"vai",Hans:"lihtsustatud",Hant:"traditsiooniline"}},eu:{rtl:false,languageNames:{aa:"afarera",ab:"abkhaziera",ace:"acehnera",ach:"acholiera",ada:"adangmera",ady:"adigera",af:"afrikaans",agq:"aghemera",ain:"ainuera",ak:"akanera",ale:"aleutera",alt:"hegoaldeko altaiera",am:"amharera",an:"aragoiera",anp:"angikera",ar:"arabiera","ar-001":"arabiera moderno estandarra",arn:"maputxe",arp:"arapaho",as:"assamera",asa:"asu",ast:"asturiera",av:"avarera",awa:"awadhiera",ay:"aimara",az:"azerbaijanera",ba:"baxkirera",ban:"baliera",bas:"basaa",be:"bielorrusiera",bem:"bembera",bez:"benera",bg:"bulgariera",bho:"bhojpurera",bi:"bislama",bin:"edoera",bla:"siksikera",bm:"bambarera",bn:"bengalera",bo:"tibetera",br:"bretoiera",brx:"bodoera",bs:"bosniera",bug:"buginera",byn:"bilena",ca:"katalan",ccp:"chakmera",ce:"txetxenera",ceb:"cebuera",cgg:"chigera",ch:"chamorrera",chk:"chuukera",chm:"mariera",cho:"choctaw",chr:"txerokiera",chy:"cheyennera",ckb:"erdialdeko kurduera",co:"korsikera",crs:"Seychelleetako kreolera",cs:"txekiera",cu:"elizako eslaviera",cv:"txuvaxera",cy:"gales",da:"daniera",dak:"dakotera",dar:"dargvera",dav:"taitera",de:"aleman","de-AT":"Austriako aleman","de-CH":"Suitzako aleman garai",dgr:"dogribera",dje:"zarma",dsb:"behe-sorabiera",dua:"dualera",dv:"divehiera",dyo:"fonyi jolera",dz:"dzongkha",dzg:"dazaga",ebu:"embua",ee:"eweera",efi:"efikera",eka:"akajuka",el:"greziera",en:"ingeles","en-AU":"Australiako ingeles","en-CA":"Kanadako ingeles","en-GB":"Britania Handiko ingeles","en-US":"AEBko ingeles",eo:"esperanto",es:"espainiera","es-419":"Latinoamerikako espainiera","es-ES":"espainiera (Europa)","es-MX":"Mexikoko espainiera",et:"estoniera",eu:"euskara",ewo:"ewondera",fa:"persiera",ff:"fula",fi:"finlandiera",fil:"filipinera",fj:"fijiera",fo:"faroera",fon:"fona",fr:"frantses","fr-CA":"Kanadako frantses","fr-CH":"Suitzako frantses",fur:"friuliera",fy:"frisiera",ga:"irlandera",gaa:"ga",gag:"gagauzera",gd:"Eskoziako gaeliko",gez:"ge’ez",gil:"gilbertera",gl:"galiziera",gn:"guaraniera",gor:"gorontaloa",gsw:"Suitzako aleman",gu:"gujaratera",guz:"gusiiera",gv:"manxera",gwi:"gwichʼin",ha:"hausa",haw:"hawaiiera",he:"hebreera",hi:"hindi",hil:"hiligainon",hmn:"hmong",hr:"kroaziera",hsb:"goi-sorabiera",ht:"Haitiko kreolera",hu:"hungariera",hup:"hupera",hy:"armeniera",hz:"hereroera",ia:"interlingua",iba:"ibanera",ibb:"ibibioera",id:"indonesiera",ie:"interlingue",ig:"igboera",ii:"Sichuango yiera",ilo:"ilokanera",inh:"ingushera",io:"ido",is:"islandiera",it:"italiera",iu:"inuktitut",ja:"japoniera",jbo:"lojbanera",jgo:"ngomba",jmc:"machame",jv:"javera",ka:"georgiera",kab:"kabilera",kac:"jingpoera",kaj:"kaiji",kam:"kambera",kbd:"kabardiera",kcg:"kataba",kde:"makondeera",kea:"Cabo Verdeko kreolera",kfo:"koroa",kg:"kikongoa",kha:"kashia",khq:"koyra chiini",ki:"kikuyuera",kj:"kuanyama",kk:"kazakhera",kkj:"kako",kl:"groenlandiera",kln:"kalenjinera",km:"khemerera",kmb:"kimbundua",kn:"kannada",ko:"koreera",koi:"komi-permyakera",kok:"konkanera",kpe:"kpellea",kr:"kanuriera",krc:"karachayera-balkarera",krl:"kareliera",kru:"kurukhera",ks:"kaxmirera",ksb:"shambalera",ksf:"bafiera",ksh:"koloniera",ku:"kurduera",kum:"kumykera",kv:"komiera",kw:"kornubiera",ky:"kirgizera",la:"latin",lad:"ladino",lag:"langiera",lb:"luxenburgera",lez:"lezgiera",lg:"gandera",li:"limburgera",lkt:"lakotera",ln:"lingala",lo:"laosera",loz:"loziera",lrc:"iparraldeko lurera",lt:"lituaniera",lu:"Katangako lubera",lua:"txilubera",lun:"lundera",luo:"luoera",lus:"mizoa",luy:"luhyera",lv:"letoniera",mad:"madurera",mag:"magahiera",mai:"maithilera",mak:"makasarera",mas:"masaiera",mdf:"mokxera",men:"mendeera",mer:"meruera",mfe:"Mauritaniako kreolera",mg:"malgaxe",mgh:"makhuwa-meettoera",mgo:"metaʼera",mh:"marshallera",mi:"maoriera",mic:"mikmakera",min:"minangkabauera",mk:"mazedoniera",ml:"malabarera",mn:"mongoliera",mni:"manipurera",moh:"mohawkera",mos:"moreera",mr:"marathera",ms:"malaysiera",mt:"maltera",mua:"mudangera",mus:"creera",mwl:"mirandera",my:"birmaniera",myv:"erziera",mzn:"mazandarandera",na:"nauruera",nap:"napoliera",naq:"namera",nb:"bokmål (norvegiera)",nd:"iparraldeko ndebeleera",nds:"behe-aleman","nds-NL":"behe-saxoiera",ne:"nepalera","new":"newarera",ng:"ndongera",nia:"niasera",niu:"niueera",nl:"nederlandera","nl-BE":"flandriera",nmg:"kwasiera",nn:"nynorsk (norvegiera)",nnh:"ngiemboonera",no:"norvegiera",nog:"nogaiera",nqo:"n’koera",nr:"hegoaldeko ndebelera",nso:"pediera",nus:"nuerera",nv:"navajoera",ny:"chewera",nyn:"ankolera",oc:"okzitaniera",om:"oromoera",or:"oriya",os:"osetiera",pa:"punjabera",pag:"pangasinanera",pam:"pampangera",pap:"papiamento",pau:"palauera",pcm:"Nigeriako pidgina",pl:"poloniera",prg:"prusiera",ps:"paxtuera",pt:"portuges","pt-BR":"Brasilgo portuges","pt-PT":"Europako portuges",qu:"kitxua",quc:"quicheera",rap:"rapa nui",rar:"rarotongera",rm:"erretorromaniera",rn:"rundiera",ro:"errumaniera","ro-MD":"moldaviera",rof:"rombo",root:"erroa",ru:"errusiera",rup:"aromaniera",rw:"kinyaruanda",rwk:"rwera",sa:"sanskrito",sad:"sandaweera",sah:"sakhera",saq:"samburuera",sat:"santalera",sba:"ngambayera",sbp:"sanguera",sc:"sardiniera",scn:"siziliera",sco:"eskoziera",sd:"sindhi",se:"iparraldeko samiera",seh:"senera",ses:"koyraboro senni",sg:"sango",sh:"serbokroaziera",shi:"tachelhit",shn:"shanera",si:"sinhala",sk:"eslovakiera",sl:"esloveniera",sm:"samoera",sma:"hegoaldeko samiera",smj:"Luleko samiera",smn:"Inariko samiera",sms:"skolten samiera",sn:"shonera",snk:"soninkera",so:"somaliera",sq:"albaniera",sr:"serbiera",srn:"srananera",ss:"swatiera",ssy:"sahoa",st:"hegoaldeko sothoera",su:"sundanera",suk:"sukumera",sv:"suediera",sw:"swahilia","sw-CD":"Kongoko swahilia",swb:"komoreera",syr:"asiriera",ta:"tamilera",te:"telugu",tem:"temnea",teo:"tesoera",tet:"tetum",tg:"tajikera",th:"thailandiera",ti:"tigrinyera",tig:"tigrea",tk:"turkmenera",tl:"tagalog",tlh:"klingonera",tn:"tswanera",to:"tongera",tpi:"tok pisin",tr:"turkiera",trv:"tarokoa",ts:"tsongera",tt:"tatarera",tum:"tumbukera",tvl:"tuvaluera",tw:"twia",twq:"tasawaq",ty:"tahitiera",tyv:"tuvera",tzm:"Erdialdeko Atlaseko amazigera",udm:"udmurtera",ug:"uigurrera",uk:"ukrainera",umb:"umbundu",ur:"urdu",uz:"uzbekera",vai:"vaiera",ve:"vendera",vi:"vietnamera",vo:"volapük",vun:"vunjo",wa:"waloiera",wae:"walserera",wal:"welayta",war:"samerera",wo:"wolofera",xal:"kalmykera",xh:"xhosera",xog:"sogera",yav:"yangbenera",ybb:"yemba",yi:"yiddish",yo:"jorubera",yue:"kantonera",zgh:"amazigera estandarra",zh:"txinera","zh-Hans":"mandarin sinplifikatu","zh-Hant":"mandarin tradizional",zu:"zuluera",zun:"zuñia",zza:"zazera"},scriptNames:{Cyrl:"zirilikoa",Latn:"latinoa",Arab:"arabiarra",Guru:"gurmukhia",Hans:"sinplifikatua",Hant:"tradizionala"}},fa:{rtl:true,languageNames:{aa:"آفاری",ab:"آبخازی",ace:"آچئی",ach:"آچولیایی",ada:"آدانگمه‌ای",ady:"آدیجیایی",ae:"اوستایی",aeb:"عربی تونسی",af:"آفریکانس",afh:"آفریهیلی",agq:"آگیم",ain:"آینویی",ak:"آکان",akk:"اکدی",akz:"آلابامایی",ale:"آلئوتی",alt:"آلتایی جنوبی",am:"امهری",an:"آراگونی",ang:"انگلیسی باستان",anp:"آنگیکا",ar:"عربی","ar-001":"عربی رسمی",arc:"آرامی",arn:"ماپوچه‌ای",arp:"آراپاهویی",arq:"عربی الجزایری",arw:"آراواکی",ary:"عربی مراکشی",arz:"عربی مصری",as:"آسامی",asa:"آسو",ast:"آستوری",av:"آواری",awa:"اودهی",ay:"آیمارایی",az:"ترکی آذربایجانی","az-Arab":"ترکی آذری جنوبی",ba:"باشقیری",bal:"بلوچی",ban:"بالیایی",bar:"باواریایی",bas:"باسایی",bax:"بمونی",be:"بلاروسی",bej:"بجایی",bem:"بمبایی",bez:"بنایی",bg:"بلغاری",bgn:"بلوچی غربی",bho:"بوجپوری",bi:"بیسلاما",bik:"بیکولی",bin:"بینی",bla:"سیکسیکا",bm:"بامبارایی",bn:"بنگالی",bo:"تبتی",bqi:"لری بختیاری",br:"برتون",bra:"براج",brh:"براهویی",brx:"بودویی",bs:"بوسنیایی",bua:"بوریاتی",bug:"بوگیایی",byn:"بلین",ca:"کاتالان",cad:"کادویی",car:"کاریبی",ccp:"چاکما",ce:"چچنی",ceb:"سبویی",cgg:"چیگا",ch:"چامورویی",chb:"چیبچا",chg:"جغتایی",chk:"چوکی",chm:"ماریایی",cho:"چوکتویی",chp:"چیپه‌ویه‌ای",chr:"چروکیایی",chy:"شایانی",ckb:"کردی مرکزی",co:"کورسی",cop:"قبطی",cr:"کریایی",crh:"ترکی کریمه",crs:"سیشل آمیختهٔ فرانسوی",cs:"چکی",csb:"کاشوبی",cu:"اسلاوی کلیسایی",cv:"چوواشی",cy:"ولزی",da:"دانمارکی",dak:"داکوتایی",dar:"دارقینی",dav:"تایتا",de:"آلمانی","de-AT":"آلمانی اتریش","de-CH":"آلمانی معیار سوئیس",del:"دلاواری",dgr:"دوگریب",din:"دینکایی",dje:"زرما",doi:"دوگری",dsb:"صُربی سفلی",dua:"دوآلایی",dum:"هلندی میانه",dv:"دیوهی",dyo:"دیولا فونی",dyu:"دایولایی",dz:"دزونگخا",dzg:"دازاگایی",ebu:"امبو",ee:"اوه‌ای",efi:"افیکی",egy:"مصری کهن",eka:"اکاجوک",el:"یونانی",elx:"عیلامی",en:"انگلیسی","en-AU":"انگلیسی استرالیا","en-CA":"انگلیسی کانادا","en-GB":"انگلیسی بریتانیا","en-US":"انگلیسی امریکا",enm:"انگلیسی میانه",eo:"اسپرانتو",es:"اسپانیایی","es-419":"اسپانیایی امریکای لاتین","es-ES":"اسپانیایی اروپا","es-MX":"اسپانیایی مکزیک",et:"استونیایی",eu:"باسکی",ewo:"اواندو",fa:"فارسی","fa-AF":"دری",fan:"فانگی",fat:"فانتیایی",ff:"فولانی",fi:"فنلاندی",fil:"فیلیپینی",fj:"فیجیایی",fo:"فارویی",fon:"فونی",fr:"فرانسوی","fr-CA":"فرانسوی کانادا","fr-CH":"فرانسوی سوئیس",frc:"فرانسوی کادین",frm:"فرانسوی میانه",fro:"فرانسوی باستان",frr:"فریزی شمالی",frs:"فریزی شرقی",fur:"فریولیایی",fy:"فریزی غربی",ga:"ایرلندی",gaa:"گایی",gag:"گاگائوزیایی",gay:"گایویی",gba:"گبایایی",gbz:"دری زرتشتی",gd:"گیلی اسکاتلندی",gez:"گی‌ئزی",gil:"گیلبرتی",gl:"گالیسیایی",glk:"گیلکی",gmh:"آلمانی معیار میانه",gn:"گوارانی",goh:"آلمانی علیای باستان",gon:"گوندی",gor:"گورونتالو",got:"گوتی",grb:"گریبویی",grc:"یونانی کهن",gsw:"آلمانی سوئیسی",gu:"گجراتی",guz:"گوسی",gv:"مانی",gwi:"گویچ این",ha:"هوسیایی",hai:"هایدایی",haw:"هاوائیایی",he:"عبری",hi:"هندی",hif:"هندی فیجیایی",hil:"هیلی‌گاینونی",hit:"هیتی",hmn:"همونگ",ho:"موتویی هیری",hr:"کروات",hsb:"صُربی علیا",ht:"هائیتیایی",hu:"مجاری",hup:"هوپا",hy:"ارمنی",hz:"هریرویی",ia:"میان‌زبان",iba:"ایبانی",ibb:"ایبیبیو",id:"اندونزیایی",ie:"اکسیدنتال",ig:"ایگبویی",ii:"یی سیچوان",ik:"اینوپیک",ilo:"ایلوکویی",inh:"اینگوشی",io:"ایدو",is:"ایسلندی",it:"ایتالیایی",iu:"اینوکتیتوت",ja:"ژاپنی",jbo:"لوجبان",jgo:"نگومبا",jmc:"ماچامه‌ای",jpr:"فارسی یهودی",jrb:"عربی یهودی",jv:"جاوه‌ای",ka:"گرجی",kaa:"قره‌قالپاقی",kab:"قبایلی",kac:"کاچینی",kaj:"جو",kam:"کامبایی",kaw:"کاویایی",kbd:"کاباردینی",kcg:"تیاپی",kde:"ماکونده",kea:"کابووردیانو",kfo:"کورو",kg:"کنگویی",kha:"خاسیایی",kho:"ختنی",khq:"کوجراچینی",khw:"کهوار",ki:"کیکویویی",kiu:"کرمانجی",kj:"کوانیاما",kk:"قزاقی",kkj:"کاکایی",kl:"گرینلندی",kln:"کالنجین",km:"خمری",kmb:"کیمبوندویی",kn:"کانارا",ko:"کره‌ای",koi:"کومی پرمیاک",kok:"کنکانی",kpe:"کپله‌ای",kr:"کانوریایی",krc:"قره‌چایی‐بالکاری",krl:"کاریلیانی",kru:"کوروخی",ks:"کشمیری",ksb:"شامبالا",ksf:"بافیایی",ksh:"ریپواری",ku:"کردی",kum:"کومیکی",kut:"کوتنی",kv:"کومیایی",kw:"کرنوالی",ky:"قرقیزی",la:"لاتین",lad:"لادینو",lag:"لانگی",lah:"لاهندا",lam:"لامبا",lb:"لوگزامبورگی",lez:"لزگی",lg:"گاندایی",li:"لیمبورگی",lkt:"لاکوتا",ln:"لینگالا",lo:"لائوسی",lol:"مونگویی",lou:"زبان آمیختهٔ مادری لوئیزیانا",loz:"لوزیایی",lrc:"لری شمالی",lt:"لیتوانیایی",lu:"لوبایی‐کاتانگا",lua:"لوبایی‐لولوا",lui:"لویسنو",lun:"لوندایی",luo:"لوئویی",lus:"لوشه‌ای",luy:"لویا",lv:"لتونیایی",lzh:"چینی ادبی",mad:"مادورایی",mag:"ماگاهیایی",mai:"مایدیلی",mak:"ماکاسار",man:"ماندینگویی",mas:"ماسایی",mdf:"مکشایی",mdr:"ماندار",men:"منده‌ای",mer:"مرویی",mfe:"موریسین",mg:"مالاگاسیایی",mga:"ایرلندی میانه",mgh:"ماکوا متو",mgo:"متایی",mh:"مارشالی",mi:"مائوریایی",mic:"میکماکی",min:"مینانگ‌کابویی",mk:"مقدونی",ml:"مالایالامی",mn:"مغولی",mnc:"مانچویی",mni:"میته‌ای",moh:"موهاکی",mos:"ماسیایی",mr:"مراتی",ms:"مالایی",mt:"مالتی",mua:"ماندانگی",mus:"کریکی",mwl:"میراندی",mwr:"مارواری",my:"برمه‌ای",myv:"ارزیایی",mzn:"مازندرانی",na:"نائورویی",nap:"ناپلی",naq:"نامایی",nb:"نروژی بوک‌مُل",nd:"انده‌بله‌ای شمالی",nds:"آلمانی سفلی","nds-NL":"ساکسونی سفلی",ne:"نپالی","new":"نواریایی",ng:"اندونگایی",nia:"نیاسی",niu:"نیویی",nl:"هلندی","nl-BE":"فلمنگی",nmg:"کوازیو",nn:"نروژی نی‌نُشک",nnh:"نیامبون",no:"نروژی",nog:"نغایی",non:"نرس باستان",nqo:"نکو",nr:"انده‌بله‌ای جنوبی",nso:"سوتویی شمالی",nus:"نویر",nv:"ناواهویی",nwc:"نواریایی کلاسیک",ny:"نیانجایی",nym:"نیام‌وزیایی",nyn:"نیانکوله‌ای",nyo:"نیورویی",nzi:"نزیمایی",oc:"اکسیتان",oj:"اوجیبوایی",om:"اورومویی",or:"اوریه‌ای",os:"آسی",osa:"اوسیجی",ota:"ترکی عثمانی",pa:"پنجابی",pag:"پانگاسینانی",pal:"پهلوی",pam:"پامپانگایی",pap:"پاپیامنتو",pau:"پالائویی",pcm:"نیم‌زبان نیجریه‌ای",pdc:"آلمانی پنسیلوانیایی",peo:"فارسی باستان",phn:"فنیقی",pi:"پالی",pl:"لهستانی",pon:"پانپیی",prg:"پروسی",pro:"پرووانسی باستان",ps:"پشتو",pt:"پرتغالی","pt-BR":"پرتغالی برزیل","pt-PT":"پرتغالی اروپا",qu:"کچوایی",quc:"کیچه‌",raj:"راجستانی",rap:"راپانویی",rar:"راروتونگایی",rm:"رومانش",rn:"روندیایی",ro:"رومانیایی","ro-MD":"مولداویایی",rof:"رومبویی",rom:"رومانویی",root:"ریشه",ru:"روسی",rup:"آرومانی",rw:"کینیارواندایی",rwk:"روایی",sa:"سانسکریت",sad:"سانداوه‌ای",sah:"یاقوتی",sam:"آرامی سامری",saq:"سامبورو",sas:"ساساکی",sat:"سانتالی",sba:"انگامبایی",sbp:"سانگویی",sc:"ساردینیایی",scn:"سیسیلی",sco:"اسکاتلندی",sd:"سندی",sdh:"کردی جنوبی",se:"سامی شمالی",seh:"سنا",sel:"سلکوپی",ses:"کویرابورا سنی",sg:"سانگو",sga:"ایرلندی باستان",sh:"صرب و کرواتی",shi:"تاچل‌هیت",shn:"شانی",shu:"عربی چادی",si:"سینهالی",sid:"سیدامویی",sk:"اسلواکی",sl:"اسلوونیایی",sli:"سیلزیایی سفلی",sm:"ساموآیی",sma:"سامی جنوبی",smj:"لوله سامی",smn:"ایناری سامی",sms:"اسکولت سامی",sn:"شونایی",snk:"سونینکه‌ای",so:"سومالیایی",sog:"سغدی",sq:"آلبانیایی",sr:"صربی",srn:"تاکی‌تاکی",srr:"سریری",ss:"سوازیایی",ssy:"ساهو",st:"سوتویی جنوبی",su:"سوندایی",suk:"سوکومایی",sus:"سوسویی",sux:"سومری",sv:"سوئدی",sw:"سواحیلی","sw-CD":"سواحیلی کنگو",swb:"کوموری",syc:"سریانی کلاسیک",syr:"سریانی",szl:"سیلزیایی",ta:"تامیلی",te:"تلوگویی",tem:"تمنه‌ای",teo:"تسویی",ter:"ترنو",tet:"تتومی",tg:"تاجیکی",th:"تایلندی",ti:"تیگرینیایی",tig:"تیگره‌ای",tiv:"تیوی",tk:"ترکمنی",tl:"تاگالوگی",tlh:"کلینگون",tli:"تلین‌گیتی",tmh:"تاماشقی",tn:"تسوانایی",to:"تونگایی",tog:"تونگایی نیاسا",tpi:"توک‌پیسینی",tr:"ترکی استانبولی",trv:"تاروکویی",ts:"تسونگایی",tsi:"تسیم‌شیانی",tt:"تاتاری",tum:"تومبوکایی",tvl:"تووالویی",tw:"توی‌یایی",twq:"تسواکی",ty:"تاهیتیایی",tyv:"تووایی",tzm:"آمازیغی اطلس مرکزی",udm:"اودمورتی",ug:"اویغوری",uga:"اوگاریتی",uk:"اوکراینی",umb:"امبوندویی",ur:"اردو",uz:"ازبکی",vai:"ویایی",ve:"وندایی",vi:"ویتنامی",vo:"ولاپوک",vot:"وتی",vun:"ونجو",wa:"والونی",wae:"والسر",wal:"والامو",war:"وارایی",was:"واشویی",wbp:"وارلپیری",wo:"ولوفی",xal:"قلموقی",xh:"خوسایی",xog:"سوگایی",yao:"یائویی",yap:"یاپی",yav:"یانگبنی",ybb:"یمبایی",yi:"یدی",yo:"یوروبایی",yue:"کانتونی",za:"چوانگی",zap:"زاپوتکی",zen:"زناگا",zgh:"آمازیغی معیار مراکش",zh:"چینی","zh-Hans":"چینی ماندارین ساده‌شده","zh-Hant":"چینی ماندارین سنتی",zu:"زولویی",zun:"زونیایی",zza:"زازایی"},scriptNames:{Cyrl:"سیریلی",Latn:"لاتینی",Arab:"عربی",Guru:"گورومخی",Tfng:"تیفیناغی",Vaii:"ویایی",Hans:"ساده‌شده",Hant:"سنتی"}},fi:{rtl:false,languageNames:{aa:"afar",ab:"abhaasi",ace:"atšeh",ach:"atšoli",ada:"adangme",ady:"adyge",ae:"avesta",aeb:"tunisianarabia",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akkadi",akz:"alabama",ale:"aleutti",aln:"gegi",alt:"altai",am:"amhara",an:"aragonia",ang:"muinaisenglanti",anp:"angika",ar:"arabia","ar-001":"yleisarabia",arc:"valtakunnanaramea",arn:"mapudungun",aro:"araona",arp:"arapaho",arq:"algerianarabia",ars:"arabia – najd",arw:"arawak",ary:"marokonarabia",arz:"egyptinarabia",as:"assami",asa:"asu",ase:"amerikkalainen viittomakieli",ast:"asturia",av:"avaari",avk:"kotava",awa:"awadhi",ay:"aimara",az:"azeri",ba:"baškiiri",bal:"belutši",ban:"bali",bar:"baijeri",bas:"basaa",bax:"bamum",bbc:"batak-toba",bbj:"ghomala",be:"valkovenäjä",bej:"bedža",bem:"bemba",bew:"betawi",bez:"bena",bfd:"fut",bfq:"badaga",bg:"bulgaria",bgn:"länsibelutši",bho:"bhodžpuri",bi:"bislama",bik:"bikol",bin:"bini",bjn:"banjar",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tiibet",bpy:"bišnupria",bqi:"bahtiari",br:"bretoni",bra:"bradž",brh:"brahui",brx:"bodo",bs:"bosnia",bss:"koose",bua:"burjaatti",bug:"bugi",bum:"bulu",byn:"bilin",byv:"medumba",ca:"katalaani",cad:"caddo",car:"karibi",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"tšetšeeni",ceb:"cebuano",cgg:"kiga",ch:"tšamorro",chb:"tšibtša",chg:"tšagatai",chk:"chuuk",chm:"mari",chn:"chinook-jargon",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"sorani",co:"korsika",cop:"kopti",cps:"capiznon",cr:"cree",crh:"krimintataari",crs:"seychellienkreoli",cs:"tšekki",csb:"kašubi",cu:"kirkkoslaavi",cv:"tšuvassi",cy:"kymri",da:"tanska",dak:"dakota",dar:"dargi",dav:"taita",de:"saksa","de-AT":"itävallansaksa","de-CH":"sveitsinyläsaksa",del:"delaware",den:"slevi",dgr:"dogrib",din:"dinka",dje:"djerma",doi:"dogri",dsb:"alasorbi",dtp:"dusun",dua:"duala",dum:"keskihollanti",dv:"divehi",dyo:"jola-fonyi",dyu:"djula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egl:"emilia",egy:"muinaisegypti",eka:"ekajuk",el:"kreikka",elx:"elami",en:"englanti","en-AU":"australianenglanti","en-CA":"kanadanenglanti","en-GB":"britannianenglanti","en-US":"amerikanenglanti",enm:"keskienglanti",eo:"esperanto",es:"espanja","es-419":"amerikanespanja","es-ES":"euroopanespanja","es-MX":"meksikonespanja",esu:"alaskanjupik",et:"viro",eu:"baski",ewo:"ewondo",ext:"extremadura",fa:"persia",fan:"fang",fat:"fanti",ff:"fulani",fi:"suomi",fil:"filipino",fit:"meänkieli",fj:"fidži",fo:"fääri",fr:"ranska","fr-CA":"kanadanranska","fr-CH":"sveitsinranska",frc:"cajunranska",frm:"keskiranska",fro:"muinaisranska",frp:"arpitaani",frr:"pohjoisfriisi",frs:"itäfriisi",fur:"friuli",fy:"länsifriisi",ga:"iiri",gaa:"ga",gag:"gagauzi",gan:"gan-kiina",gay:"gajo",gba:"gbaja",gbz:"zoroastrialaisdari",gd:"gaeli",gez:"ge’ez",gil:"kiribati",gl:"galicia",glk:"gilaki",gmh:"keskiyläsaksa",gn:"guarani",goh:"muinaisyläsaksa",gom:"goankonkani",gon:"gondi",gor:"gorontalo",got:"gootti",grb:"grebo",grc:"muinaiskreikka",gsw:"sveitsinsaksa",gu:"gudžarati",guc:"wayuu",gur:"frafra",guz:"gusii",gv:"manksi",gwi:"gwitšin",ha:"hausa",hai:"haida",hak:"hakka-kiina",haw:"havaiji",he:"heprea",hi:"hindi",hif:"fidžinhindi",hil:"hiligaino",hit:"heetti",hmn:"hmong",ho:"hiri-motu",hr:"kroatia",hsb:"yläsorbi",hsn:"xiang-kiina",ht:"haiti",hu:"unkari",hup:"hupa",hy:"armenia",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesia",ie:"interlingue",ig:"igbo",ii:"sichuanin-yi",ik:"inupiaq",ilo:"iloko",inh:"inguuši",io:"ido",is:"islanti",it:"italia",iu:"inuktitut",izh:"inkeroinen",ja:"japani",jam:"jamaikankreolienglanti",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"juutalaispersia",jrb:"juutalaisarabia",jut:"juutti",jv:"jaava",ka:"georgia",kaa:"karakalpakki",kab:"kabyyli",kac:"katšin",kaj:"jju",kam:"kamba",kaw:"kavi",kbd:"kabardi",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kapverdenkreoli",ken:"kenyang",kfo:"norsunluurannikonkoro",kg:"kongo",kgp:"kaingang",kha:"khasi",kho:"khotani",khq:"koyra chiini",khw:"khowar",ki:"kikuju",kiu:"kirmanjki",kj:"kuanjama",kk:"kazakki",kkj:"kako",kl:"kalaallisut",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"korea",koi:"komipermjakki",kok:"konkani",kos:"kosrae",kpe:"kpelle",kr:"kanuri",krc:"karatšai-balkaari",kri:"krio",krj:"kinaray-a",krl:"karjala",kru:"kurukh",ks:"kašmiri",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurdi",kum:"kumykki",kut:"kutenai",kv:"komi",kw:"korni",ky:"kirgiisi",la:"latina",lad:"ladino",lag:"lango",lah:"lahnda",lam:"lamba",lb:"luxemburg",lez:"lezgi",lfn:"lingua franca nova",lg:"ganda",li:"limburg",lij:"liguuri",liv:"liivi",lkt:"lakota",lmo:"lombardi",ln:"lingala",lo:"lao",lol:"mongo",lou:"louisianankreoli",loz:"lozi",lrc:"pohjoisluri",lt:"liettua",ltg:"latgalli",lu:"katanganluba",lua:"luluanluba",lui:"luiseño",lun:"lunda",lus:"lusai",luy:"luhya",lv:"latvia",lzh:"klassinen kiina",lzz:"lazi",mad:"madura",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makassar",man:"mandingo",mas:"maasai",mde:"maba",mdf:"mokša",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malagassi",mga:"keski-iiri",mgh:"makua-meetto",mgo:"meta’",mh:"marshall",mi:"maori",mic:"micmac",min:"minangkabau",mk:"makedonia",ml:"malajalam",mn:"mongoli",mnc:"mantšu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",mrj:"vuorimari",ms:"malaiji",mt:"malta",mua:"mundang",mus:"creek",mwl:"mirandeesi",mwr:"marwari",mwv:"mentawai",my:"burma",mye:"myene",myv:"ersä",mzn:"mazandarani",na:"nauru",nan:"min nan -kiina",nap:"napoli",naq:"nama",nb:"norjan bokmål",nd:"pohjois-ndebele",nds:"alasaksa","nds-NL":"alankomaidenalasaksa",ne:"nepali","new":"newari",ng:"ndonga",nia:"nias",niu:"niue",njo:"ao naga",nl:"hollanti","nl-BE":"flaami",nmg:"kwasio",nn:"norjan nynorsk",nnh:"ngiemboon",no:"norja",nog:"nogai",non:"muinaisnorja",nov:"novial",nqo:"n’ko",nr:"etelä-ndebele",nso:"pohjoissotho",nus:"nuer",nv:"navajo",nwc:"klassinen newari",ny:"njandža",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"oksitaani",oj:"odžibwa",om:"oromo",or:"orija",os:"osseetti",osa:"osage",ota:"osmani",pa:"pandžabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamentu",pau:"palau",pcd:"picardi",pcm:"nigerianpidgin",pdc:"pennsylvaniansaksa",pdt:"plautdietsch",peo:"muinaispersia",pfl:"pfaltsi",phn:"foinikia",pi:"paali",pl:"puola",pms:"piemonte",pnt:"pontoksenkreikka",pon:"pohnpei",prg:"muinaispreussi",pro:"muinaisprovensaali",ps:"paštu",pt:"portugali","pt-BR":"brasilianportugali","pt-PT":"euroopanportugali",qu:"ketšua",quc:"kʼicheʼ",qug:"chimborazonylänköketšua",raj:"radžastani",rap:"rapanui",rar:"rarotonga",rgn:"romagnoli",rif:"tarifit",rm:"retoromaani",rn:"rundi",ro:"romania","ro-MD":"moldova",rof:"rombo",rom:"romani",root:"juuri",rtm:"rotuma",ru:"venäjä",rue:"ruteeni",rug:"roviana",rup:"aromania",rw:"ruanda",rwk:"rwa",sa:"sanskrit",sad:"sandawe",sah:"jakuutti",sam:"samarianaramea",saq:"samburu",sas:"sasak",sat:"santali",saz:"sauraštri",sba:"ngambay",sbp:"sangu",sc:"sardi",scn:"sisilia",sco:"skotti",sd:"sindhi",sdc:"sassarinsardi",sdh:"eteläkurdi",se:"pohjoissaame",see:"seneca",seh:"sena",sei:"seri",sel:"selkuppi",ses:"koyraboro senni",sg:"sango",sga:"muinaisiiri",sgs:"samogiitti",sh:"serbokroaatti",shi:"tašelhit",shn:"shan",shu:"tšadinarabia",si:"sinhala",sid:"sidamo",sk:"slovakki",sl:"sloveeni",sli:"sleesiansaksa",sly:"selayar",sm:"samoa",sma:"eteläsaame",smj:"luulajansaame",smn:"inarinsaame",sms:"koltansaame",sn:"šona",snk:"soninke",so:"somali",sog:"sogdi",sq:"albania",sr:"serbia",srn:"sranan",srr:"serer",ss:"swazi",ssy:"saho",st:"eteläsotho",stq:"saterlandinfriisi",su:"sunda",suk:"sukuma",sus:"susu",sux:"sumeri",sv:"ruotsi",sw:"swahili","sw-CD":"kingwana",swb:"komori",syc:"muinaissyyria",syr:"syyria",szl:"sleesia",ta:"tamili",tcy:"tulu",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadžikki",th:"thai",ti:"tigrinja",tig:"tigre",tk:"turkmeeni",tkl:"tokelau",tkr:"tsahuri",tl:"tagalog",tlh:"klingon",tli:"tlingit",tly:"tališi",tmh:"tamašek",tn:"tswana",to:"tonga",tog:"malawintonga",tpi:"tok-pisin",tr:"turkki",tru:"turojo",trv:"taroko",ts:"tsonga",tsd:"tsakonia",tsi:"tsimši",tt:"tataari",ttt:"tati",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahiti",tyv:"tuva",tzm:"keskiatlaksentamazight",udm:"udmurtti",ug:"uiguuri",uga:"ugarit",uk:"ukraina",umb:"mbundu",ur:"urdu",uz:"uzbekki",ve:"venda",vec:"venetsia",vep:"vepsä",vi:"vietnam",vls:"länsiflaami",vmf:"maininfrankki",vo:"volapük",vot:"vatja",vro:"võro",vun:"vunjo",wa:"valloni",wae:"walser",wal:"wolaitta",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"wu-kiina",xal:"kalmukki",xh:"xhosa",xmf:"mingreli",xog:"soga",yao:"jao",yap:"japi",yav:"yangben",ybb:"yemba",yi:"jiddiš",yo:"joruba",yrl:"ñeengatú",yue:"kantoninkiina",za:"zhuang",zap:"zapoteekki",zbl:"blisskieli",zea:"seelanti",zen:"zenaga",zgh:"vakioitu tamazight",zh:"kiina","zh-Hans":"kiina (yksinkertaistettu)","zh-Hant":"kiina (perinteinen)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"kyrillinen",Latn:"latinalainen",Arab:"arabialainen",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vailainen",Hans:"yksinkertaistettu",Hant:"perinteinen"}},fr:{rtl:false,languageNames:{aa:"afar",ab:"abkhaze",ace:"aceh",ach:"acoli",ada:"adangme",ady:"adyguéen",ae:"avestique",aeb:"arabe tunisien",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"aïnou",ak:"akan",akk:"akkadien",akz:"alabama",ale:"aléoute",aln:"guègue",alt:"altaï du Sud",am:"amharique",an:"aragonais",ang:"ancien anglais",anp:"angika",ar:"arabe","ar-001":"arabe standard moderne",arc:"araméen",arn:"mapuche",aro:"araona",arp:"arapaho",arq:"arabe algérien",ars:"arabe najdi",arw:"arawak",ary:"arabe marocain",arz:"arabe égyptien",as:"assamais",asa:"asu",ase:"langue des signes américaine",ast:"asturien",av:"avar",avk:"kotava",awa:"awadhi",ay:"aymara",az:"azéri",ba:"bachkir",bal:"baloutchi",ban:"balinais",bar:"bavarois",bas:"bassa",bax:"bamoun",bbc:"batak toba",bbj:"ghomalaʼ",be:"biélorusse",bej:"bedja",bem:"bemba",bew:"betawi",bez:"béna",bfd:"bafut",bfq:"badaga",bg:"bulgare",bgn:"baloutchi occidental",bho:"bhodjpouri",bi:"bichelamar",bik:"bikol",bin:"bini",bjn:"banjar",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tibétain",bpy:"bishnupriya",bqi:"bakhtiari",br:"breton",bra:"braj",brh:"brahoui",brx:"bodo",bs:"bosniaque",bss:"akoose",bua:"bouriate",bug:"bugi",bum:"boulou",byn:"blin",byv:"médumba",ca:"catalan",cad:"caddo",car:"caribe",cay:"cayuga",cch:"atsam",ccp:"changma kodha",ce:"tchétchène",ceb:"cebuano",cgg:"kiga",ch:"chamorro",chb:"chibcha",chg:"tchaghataï",chk:"chuuk",chm:"mari",chn:"jargon chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"sorani",co:"corse",cop:"copte",cps:"capiznon",cr:"cree",crh:"turc de Crimée",crs:"créole seychellois",cs:"tchèque",csb:"kachoube",cu:"slavon d’église",cv:"tchouvache",cy:"gallois",da:"danois",dak:"dakota",dar:"dargwa",dav:"taita",de:"allemand","de-AT":"allemand autrichien","de-CH":"allemand suisse",del:"delaware",den:"esclave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"bas-sorabe",dtp:"dusun central",dua:"douala",dum:"moyen néerlandais",dv:"maldivien",dyo:"diola-fogny",dyu:"dioula",dz:"dzongkha",dzg:"dazaga",ebu:"embou",ee:"éwé",efi:"éfik",egl:"émilien",egy:"égyptien ancien",eka:"ékadjouk",el:"grec",elx:"élamite",en:"anglais","en-AU":"anglais australien","en-CA":"anglais canadien","en-GB":"anglais britannique","en-US":"anglais américain",enm:"moyen anglais",eo:"espéranto",es:"espagnol","es-419":"espagnol d’Amérique latine","es-ES":"espagnol d’Espagne","es-MX":"espagnol du Mexique",esu:"youpik central",et:"estonien",eu:"basque",ewo:"éwondo",ext:"estrémègne",fa:"persan",fan:"fang",fat:"fanti",ff:"peul",fi:"finnois",fil:"filipino",fit:"finnois tornédalien",fj:"fidjien",fo:"féroïen",fr:"français","fr-CA":"français canadien","fr-CH":"français suisse",frc:"français cadien",frm:"moyen français",fro:"ancien français",frp:"francoprovençal",frr:"frison du Nord",frs:"frison oriental",fur:"frioulan",fy:"frison occidental",ga:"irlandais",gaa:"ga",gag:"gagaouze",gay:"gayo",gba:"gbaya",gbz:"dari zoroastrien",gd:"gaélique écossais",gez:"guèze",gil:"gilbertin",gl:"galicien",glk:"gilaki",gmh:"moyen haut-allemand",gn:"guarani",goh:"ancien haut allemand",gom:"konkani de Goa",gon:"gondi",gor:"gorontalo",got:"gotique",grb:"grebo",grc:"grec ancien",gsw:"suisse allemand",gu:"goudjerati",guc:"wayuu",gur:"gurenne",guz:"gusii",gv:"mannois",gwi:"gwichʼin",ha:"haoussa",hai:"haida",hak:"hakka",haw:"hawaïen",he:"hébreu",hi:"hindi",hif:"hindi fidjien",hil:"hiligaynon",hit:"hittite",hmn:"hmong",ho:"hiri motu",hr:"croate",hsb:"haut-sorabe",hsn:"xiang",ht:"créole haïtien",hu:"hongrois",hup:"hupa",hy:"arménien",hz:"héréro",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonésien",ie:"interlingue",ig:"igbo",ii:"yi du Sichuan",ik:"inupiaq",ilo:"ilocano",inh:"ingouche",io:"ido",is:"islandais",it:"italien",iu:"inuktitut",izh:"ingrien",ja:"japonais",jam:"créole jamaïcain",jbo:"lojban",jgo:"ngomba",jmc:"matchamé",jpr:"judéo-persan",jrb:"judéo-arabe",jut:"jute",jv:"javanais",ka:"géorgien",kaa:"karakalpak",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabarde",kbl:"kanembou",kcg:"tyap",kde:"makondé",kea:"capverdien",ken:"kényang",kfo:"koro",kg:"kikongo",kgp:"caingangue",kha:"khasi",kho:"khotanais",khq:"koyra chiini",khw:"khowar",ki:"kikuyu",kiu:"kirmanjki",kj:"kuanyama",kk:"kazakh",kkj:"kako",kl:"groenlandais",kln:"kalendjin",km:"khmer",kmb:"kimboundou",kn:"kannada",ko:"coréen",koi:"komi-permiak",kok:"konkani",kos:"kosraéen",kpe:"kpellé",kr:"kanouri",krc:"karatchaï balkar",kri:"krio",krj:"kinaray-a",krl:"carélien",kru:"kouroukh",ks:"cachemiri",ksb:"shambala",ksf:"bafia",ksh:"francique ripuaire",ku:"kurde",kum:"koumyk",kut:"kutenai",kv:"komi",kw:"cornique",ky:"kirghize",la:"latin",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxembourgeois",lez:"lezghien",lfn:"lingua franca nova",lg:"ganda",li:"limbourgeois",lij:"ligure",liv:"livonien",lkt:"lakota",lmo:"lombard",ln:"lingala",lo:"lao",lol:"mongo",lou:"créole louisianais",loz:"lozi",lrc:"lori du Nord",lt:"lituanien",ltg:"latgalien",lu:"luba-katanga (kiluba)",lua:"luba-kasaï (ciluba)",lui:"luiseño",lun:"lunda",lus:"lushaï",luy:"luyia",lv:"letton",lzh:"chinois littéraire",lzz:"laze",mad:"madurais",maf:"mafa",mag:"magahi",mai:"maïthili",mak:"makassar",man:"mandingue",mas:"maasaï",mde:"maba",mdf:"mokcha",mdr:"mandar",men:"mendé",mer:"meru",mfe:"créole mauricien",mg:"malgache",mga:"moyen irlandais",mgh:"makua",mgo:"metaʼ",mh:"marshallais",mi:"maori",mic:"micmac",min:"minangkabau",mk:"macédonien",ml:"malayalam",mn:"mongol",mnc:"mandchou",mni:"manipuri",moh:"mohawk",mos:"moré",mr:"marathi",mrj:"mari occidental",ms:"malais",mt:"maltais",mua:"moundang",mus:"creek",mwl:"mirandais",mwr:"marwarî",mwv:"mentawaï",my:"birman",mye:"myènè",myv:"erzya",mzn:"mazandérani",na:"nauruan",nan:"minnan",nap:"napolitain",naq:"nama",nb:"norvégien bokmål",nd:"ndébélé du Nord",nds:"bas-allemand","nds-NL":"bas-saxon néerlandais",ne:"népalais","new":"newari",ng:"ndonga",nia:"niha",niu:"niuéen",njo:"Ao",nl:"néerlandais","nl-BE":"flamand",nmg:"ngoumba",nn:"norvégien nynorsk",nnh:"ngiemboon",no:"norvégien",nog:"nogaï",non:"vieux norrois",nov:"novial",nqo:"n’ko",nr:"ndébélé du Sud",nso:"sotho du Nord",nus:"nuer",nv:"navajo",nwc:"newarî classique",ny:"chewa",nym:"nyamwezi",nyn:"nyankolé",nyo:"nyoro",nzi:"nzema",oc:"occitan",oj:"ojibwa",om:"oromo",or:"odia",os:"ossète",osa:"osage",ota:"turc ottoman",pa:"pendjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampangan",pap:"papiamento",pau:"palau",pcd:"picard",pcm:"pidgin nigérian",pdc:"pennsilfaanisch",pdt:"bas-prussien",peo:"persan ancien",pfl:"allemand palatin",phn:"phénicien",pi:"pali",pl:"polonais",pms:"piémontais",pnt:"pontique",pon:"pohnpei",prg:"prussien",pro:"provençal ancien",ps:"pachto",pt:"portugais","pt-BR":"portugais brésilien","pt-PT":"portugais européen",qu:"quechua",quc:"quiché",qug:"quichua du Haut-Chimborazo",raj:"rajasthani",rap:"rapanui",rar:"rarotongien",rgn:"romagnol",rif:"rifain",rm:"romanche",rn:"roundi",ro:"roumain","ro-MD":"moldave",rof:"rombo",rom:"romani",root:"racine",rtm:"rotuman",ru:"russe",rue:"ruthène",rug:"roviana",rup:"aroumain",rw:"kinyarwanda",rwk:"rwa",sa:"sanskrit",sad:"sandawe",sah:"iakoute",sam:"araméen samaritain",saq:"samburu",sas:"sasak",sat:"santali",saz:"saurashtra",sba:"ngambay",sbp:"isangu",sc:"sarde",scn:"sicilien",sco:"écossais",sd:"sindhi",sdc:"sarde sassarais",sdh:"kurde du Sud",se:"same du Nord",see:"seneca",seh:"cisena",sei:"séri",sel:"selkoupe",ses:"koyraboro senni",sg:"sango",sga:"ancien irlandais",sgs:"samogitien",sh:"serbo-croate",shi:"chleuh",shn:"shan",shu:"arabe tchadien",si:"cingalais",sid:"sidamo",sk:"slovaque",sl:"slovène",sli:"bas-silésien",sly:"sélayar",sm:"samoan",sma:"same du Sud",smj:"same de Lule",smn:"same d’Inari",sms:"same skolt",sn:"shona",snk:"soninké",so:"somali",sog:"sogdien",sq:"albanais",sr:"serbe",srn:"sranan tongo",srr:"sérère",ss:"swati",ssy:"saho",st:"sotho du Sud",stq:"saterlandais",su:"soundanais",suk:"soukouma",sus:"soussou",sux:"sumérien",sv:"suédois",sw:"swahili","sw-CD":"swahili du Congo",swb:"comorien",syc:"syriaque classique",syr:"syriaque",szl:"silésien",ta:"tamoul",tcy:"toulou",te:"télougou",tem:"timné",teo:"teso",ter:"tereno",tet:"tétoum",tg:"tadjik",th:"thaï",ti:"tigrigna",tig:"tigré",tk:"turkmène",tkl:"tokelau",tkr:"tsakhour",tl:"tagalog",tlh:"klingon",tli:"tlingit",tly:"talysh",tmh:"tamacheq",tn:"tswana",to:"tongien",tog:"tonga nyasa",tpi:"tok pisin",tr:"turc",tru:"touroyo",trv:"taroko",ts:"tsonga",tsd:"tsakonien",tsi:"tsimshian",tt:"tatar",ttt:"tati caucasien",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahitien",tyv:"touvain",tzm:"amazighe de l’Atlas central",udm:"oudmourte",ug:"ouïghour",uga:"ougaritique",uk:"ukrainien",umb:"umbundu",ur:"ourdou",uz:"ouzbek",vai:"vaï",ve:"venda",vec:"vénitien",vep:"vepse",vi:"vietnamien",vls:"flamand occidental",vmf:"franconien du Main",vo:"volapük",vot:"vote",vro:"võro",vun:"vunjo",wa:"wallon",wae:"walser",wal:"walamo",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"wu",xal:"kalmouk",xh:"xhosa",xmf:"mingrélien",xog:"soga",yap:"yapois",yav:"yangben",ybb:"yemba",yi:"yiddish",yo:"yoruba",yrl:"nheengatou",yue:"cantonais",za:"zhuang",zap:"zapotèque",zbl:"symboles Bliss",zea:"zélandais",zen:"zenaga",zgh:"amazighe standard marocain",zh:"chinois","zh-Hans":"mandarin simplifié","zh-Hant":"mandarin traditionnel",zu:"zoulou",zun:"zuñi",zza:"zazaki"},scriptNames:{Cyrl:"cyrillique",Latn:"latin",Arab:"arabe",Guru:"gourmoukhî",Tfng:"tifinagh",Vaii:"vaï",Hans:"simplifié",Hant:"traditionnel"}},gan:{rtl:false,languageNames:{},scriptNames:{}},gl:{rtl:false,languageNames:{aa:"afar",ab:"abkhazo",ace:"achinés",ach:"acholí",ada:"adangme",ady:"adigueo",af:"afrikaans",agq:"aghem",ain:"ainu",ak:"akan",ale:"aleutiano",alt:"altai meridional",am:"amhárico",an:"aragonés",anp:"angika",ar:"árabe","ar-001":"árabe estándar moderno",arc:"arameo",arn:"mapuche",arp:"arapaho",as:"assamés",asa:"asu",ast:"asturiano",av:"avar",awa:"awadhi",ay:"aimará",az:"acerbaixano",ba:"baxkir",ban:"balinés",bas:"basaa",be:"belaruso",bem:"bemba",bez:"bena",bg:"búlgaro",bgn:"baluchi occidental",bho:"bhojpuri",bi:"bislama",bin:"bini",bla:"siksiká",bm:"bambara",bn:"bengalí",bo:"tibetano",br:"bretón",brx:"bodo",bs:"bosníaco",bug:"buginés",byn:"blin",ca:"catalán",ce:"checheno",ceb:"cebuano",cgg:"kiga",ch:"chamorro",chk:"chuuk",chm:"mari",cho:"choctaw",chr:"cherokee",chy:"cheyenne",ckb:"kurdo central",co:"corso",crs:"seselwa (crioulo das Seychelles)",cs:"checo",cu:"eslavo eclesiástico",cv:"chuvaxo",cy:"galés",da:"dinamarqués",dak:"dakota",dar:"dargwa",dav:"taita",de:"alemán","de-AT":"alemán austríaco","de-CH":"alto alemán suízo",dgr:"dogrib",dje:"zarma",dsb:"baixo sorbio",dua:"duala",dv:"divehi",dyo:"jola-fonyi",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egy:"exipcio antigo",eka:"ekajuk",el:"grego",en:"inglés","en-AU":"inglés australiano","en-CA":"inglés canadense","en-GB":"inglés británico","en-US":"inglés estadounidense",eo:"esperanto",es:"español","es-419":"español de América","es-ES":"español de España","es-MX":"español de México",et:"estoniano",eu:"éuscaro",ewo:"ewondo",fa:"persa",ff:"fula",fi:"finés",fil:"filipino",fj:"fixiano",fo:"feroés",fr:"francés","fr-CA":"francés canadense","fr-CH":"francés suízo",fur:"friulano",fy:"frisón occidental",ga:"irlandés",gaa:"ga",gag:"gagauz",gd:"gaélico escocés",gez:"ge’ez",gil:"kiribatiano",gl:"galego",gn:"guaraní",gor:"gorontalo",grc:"grego antigo",gsw:"alemán suízo",gu:"guxarati",guz:"gusii",gv:"manx",gwi:"gwichʼin",ha:"hausa",haw:"hawaiano",he:"hebreo",hi:"hindi",hil:"hiligaynon",hmn:"hmong",hr:"croata",hsb:"alto sorbio",ht:"crioulo haitiano",hu:"húngaro",hup:"hupa",hy:"armenio",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesio",ig:"igbo",ii:"yi sichuanés",ilo:"ilocano",inh:"inguxo",io:"ido",is:"islandés",it:"italiano",iu:"inuktitut",ja:"xaponés",jbo:"lojban",jgo:"ngomba",jmc:"machame",jv:"xavanés",ka:"xeorxiano",kab:"cabila",kac:"kachin",kaj:"jju",kam:"kamba",kbd:"cabardiano",kcg:"tyap",kde:"makonde",kea:"caboverdiano",kfo:"koro",kg:"kongo",kha:"khasi",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kazako",kkj:"kako",kl:"groenlandés",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannará",ko:"coreano",koi:"komi permio",kok:"konkani",kpe:"kpelle",kr:"kanuri",krc:"carachaio-bálcara",krl:"carelio",kru:"kurukh",ks:"caxemirés",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurdo",kum:"kumyk",kv:"komi",kw:"córnico",ky:"kirguiz",la:"latín",lad:"ladino",lag:"langi",lb:"luxemburgués",lez:"lezguio",lg:"ganda",li:"limburgués",lkt:"lakota",ln:"lingala",lo:"laosiano",loz:"lozi",lrc:"luri setentrional",lt:"lituano",lu:"luba-katanga",lua:"luba-lulua",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letón",mad:"madurés",mag:"magahi",mai:"maithili",mak:"makasar",mas:"masai",mdf:"moksha",men:"mende",mer:"meru",mfe:"crioulo mauriciano",mg:"malgaxe",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshalés",mi:"maorí",mic:"micmac",min:"minangkabau",mk:"macedonio",ml:"malabar",mn:"mongol",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",ms:"malaio",mt:"maltés",mua:"mundang",mus:"creek",mwl:"mirandés",my:"birmano",myv:"erzya",mzn:"mazandaraní",na:"nauruano",nap:"napolitano",naq:"nama",nb:"noruegués bokmål",nd:"ndebele setentrional",nds:"baixo alemán","nds-NL":"baixo saxón",ne:"nepalí","new":"newari",ng:"ndonga",nia:"nias",niu:"niueano",nl:"neerlandés","nl-BE":"flamengo",nmg:"kwasio",nn:"noruegués nynorsk",nnh:"ngiemboon",no:"noruegués",nog:"nogai",nqo:"n’ko",nr:"ndebele meridional",nso:"sesotho do norte",nus:"nuer",nv:"navajo",ny:"chewa",nyn:"nyankole",oc:"occitano",om:"oromo",or:"odiá",os:"ossetio",pa:"panxabí",pag:"pangasinan",pam:"pampanga",pap:"papiamento",pau:"palauano",pcm:"pidgin nixeriano",pl:"polaco",prg:"prusiano",ps:"paxto",pt:"portugués","pt-BR":"portugués do Brasil","pt-PT":"portugués de Portugal",qu:"quechua",quc:"quiché",rap:"rapanui",rar:"rarotongano",rm:"romanche",rn:"rundi",ro:"romanés","ro-MD":"moldavo",rof:"rombo",root:"raíz",ru:"ruso",rup:"aromanés",rw:"kiñaruanda",rwk:"rwa",sa:"sánscrito",sad:"sandawe",sah:"iacuto",saq:"samburu",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"escocés",sd:"sindhi",sdh:"kurdo meridional",se:"saami setentrional",seh:"sena",ses:"koyraboro senni",sg:"sango",sh:"serbocroata",shi:"tachelhit",shn:"shan",si:"cingalés",sk:"eslovaco",sl:"esloveno",sm:"samoano",sma:"saami meridional",smj:"saami de Lule",smn:"saami de Inari",sms:"saami skolt",sn:"shona",snk:"soninke",so:"somalí",sq:"albanés",sr:"serbio",srn:"sranan tongo",ss:"suazi",ssy:"saho",st:"sesotho",su:"sundanés",suk:"sukuma",sv:"sueco",sw:"suahili","sw-CD":"suahili congolés",swb:"comoriano",syr:"siríaco",ta:"támil",te:"telugu",tem:"temne",teo:"teso",tet:"tetun",tg:"taxico",th:"tailandés",ti:"tigriña",tig:"tigré",tk:"turkmeno",tl:"tagalo",tlh:"klingon",tn:"tswana",to:"tongano",tpi:"tok pisin",tr:"turco",trv:"taroko",ts:"tsonga",tt:"tártaro",tum:"tumbuka",tvl:"tuvalés",tw:"twi",twq:"tasawaq",ty:"tahitiano",tyv:"tuvaniano",tzm:"tamazight de Marrocos central",udm:"udmurto",ug:"uigur",uk:"ucraíno",umb:"umbundu",ur:"urdú",uz:"uzbeko",ve:"venda",vi:"vietnamita",vo:"volapuk",vun:"vunjo",wa:"valón",wae:"walser",wal:"wolaytta",war:"waray-waray",wbp:"walrpiri",wo:"wólof",xal:"calmuco",xh:"xhosa",xog:"soga",yav:"yangben",ybb:"yemba",yi:"yiddish",yo:"ioruba",yue:"cantonés",zgh:"tamazight marroquí estándar",zh:"chinés","zh-Hans":"chinés mandarín simplificado","zh-Hant":"chinés mandarín tradicional",zu:"zulú",zun:"zuni",zza:"zazaki"},scriptNames:{Cyrl:"cirílico",Latn:"latino",Arab:"árabe",Guru:"gurmukhi",Hans:"simplificado",Hant:"tradicional"}},gu:{rtl:false,languageNames:{aa:"અફાર",ab:"અબખાજિયન",ace:"અચીની",ach:"એકોલી",ada:"અદાંગ્મી",ady:"અદિઘે",ae:"અવેસ્તન",af:"આફ્રિકન્સ",afh:"અફ્રિહિલી",agq:"અઘેમ",ain:"ઐનુ",ak:"અકાન",akk:"અક્કાદીયાન",ale:"અલેઉત",alt:"દક્ષિણ અલ્તાઇ",am:"એમ્હારિક",an:"અર્ગોનીઝ",ang:"જુની અંગ્રેજી",anp:"અંગીકા",ar:"અરબી","ar-001":"મોડર્ન સ્ટાન્ડર્ડ અરબી",arc:"એરમૈક",arn:"મેપુચે",arp:"અરાપાહો",arq:"આલ્જેરિયન અરબી",arw:"અરાવક",ary:"મોરોક્કન અરબી",arz:"ઈજિપ્શિયન અરબી",as:"આસામી",asa:"અસુ",ast:"અસ્તુરિયન",av:"અવેરિક",awa:"અવધી",ay:"આયમારા",az:"અઝરબૈજાની",ba:"બશ્કીર",bal:"બલૂચી",ban:"બાલિનીસ",bas:"બસા",bax:"બામન",be:"બેલારુશિયન",bej:"બેજા",bem:"બેમ્બા",bez:"બેના",bg:"બલ્ગેરિયન",bgn:"પશ્ચિમી બાલોચી",bho:"ભોજપુરી",bi:"બિસ્લામા",bik:"બિકોલ",bin:"બિની",bla:"સિક્સિકા",bm:"બામ્બારા",bn:"બાંગ્લા",bo:"તિબેટીયન",bpy:"બિષ્નુપ્રિયા",br:"બ્રેટોન",bra:"વ્રજ",brh:"બ્રાહુઈ",brx:"બોડો",bs:"બોસ્નિયન",bua:"બુરિયાત",bug:"બુગિનીસ",byn:"બ્લિન",ca:"કતલાન",cad:"કડ્ડો",car:"કરિબ",cch:"અત્સમ",ccp:"ચકમા",ce:"ચેચન",ceb:"સિબુઆનો",cgg:"ચિગા",ch:"કેમોરો",chb:"ચિબ્ચા",chg:"છગાતાઇ",chk:"ચૂકીસ",chm:"મારી",chn:"ચિનૂક જાર્ગન",cho:"ચોક્તૌ",chp:"શિપેવ્યાન",chr:"શેરોકી",chy:"શેયેન્ન",ckb:"સેન્ટ્રલ કુર્દિશ",co:"કોર્સિકન",cop:"કોપ્ટિક",cr:"ક્રી",crh:"ક્રિમિયન તુર્કી",crs:"સેસેલ્વા ક્રેઓલે ફ્રેન્ચ",cs:"ચેક",csb:"કાશુબિયન",cu:"ચર્ચ સ્લાવિક",cv:"ચૂવાશ",cy:"વેલ્શ",da:"ડેનિશ",dak:"દાકોતા",dar:"દાર્ગવા",dav:"તૈતા",de:"જર્મન","de-AT":"ઓસ્ટ્રિઅન જર્મન","de-CH":"સ્વિસ હાય જર્મન",del:"દેલવેર",den:"સ્લેવ",dgr:"ડોગ્રિબ",din:"દિન્કા",dje:"ઝર્મા",doi:"ડોગ્રી",dsb:"લોઅર સોર્બિયન",dua:"દુઆલા",dum:"મધ્ય ડચ",dv:"દિવેહી",dyo:"જોલા-ફોન્યી",dyu:"ડ્યુલા",dz:"ડ્ઝોંગ્ખા",dzg:"દાઝાગા",ebu:"ઍમ્બુ",ee:"ઈવ",efi:"એફિક",egy:"પ્રાચીન ઇજીપ્શિયન",eka:"એકાજુક",el:"ગ્રીક",elx:"એલામાઇટ",en:"અંગ્રેજી","en-AU":"ઓસ્ટ્રેલિયન અંગ્રેજી","en-CA":"કેનેડિયન અંગ્રેજી","en-GB":"બ્રિટિશ અંગ્રેજી","en-US":"અમેરિકન અંગ્રેજી",enm:"મિડિલ અંગ્રેજી",eo:"એસ્પેરાન્ટો",es:"સ્પેનિશ","es-419":"લેટિન અમેરિકન સ્પેનિશ","es-ES":"યુરોપિયન સ્પેનિશ","es-MX":"મેક્સિકન સ્પેનિશ",et:"એસ્ટોનિયન",eu:"બાસ્ક",ewo:"ઇવોન્ડો",fa:"ફારસી",fan:"ફેંગ",fat:"ફન્ટી",ff:"ફુલાહ",fi:"ફિનિશ",fil:"ફિલિપિનો",fj:"ફીજીયન",fo:"ફોરિસ્ત",fon:"ફોન",fr:"ફ્રેન્ચ","fr-CA":"કેનેડિયન ફ્રેંચ","fr-CH":"સ્વિસ ફ્રેંચ",frc:"કાજૂન ફ્રેન્ચ",frm:"મિડિલ ફ્રેંચ",fro:"જૂની ફ્રેંચ",frr:"ઉત્તરીય ફ્રિશિયન",frs:"પૂર્વ ફ્રિશિયન",fur:"ફ્રિયુલિયાન",fy:"પશ્ચિમી ફ્રિસિયન",ga:"આઇરિશ",gaa:"ગા",gag:"ગાગાઝ",gay:"ગાયો",gba:"બાયા",gbz:"ઝોરોસ્ટ્રિઅન દારી",gd:"સ્કોટીસ ગેલિક",gez:"ગીઝ",gil:"જિલ્બરટીઝ",gl:"ગેલિશિયન",gmh:"મધ્ય હાઇ જર્મન",gn:"ગુઆરાની",goh:"જૂની હાઇ જર્મન",gom:"ગોઅન કોંકણી",gon:"ગોંડી",gor:"ગોરોન્તાલો",got:"ગોથિક",grb:"ગ્રેબો",grc:"પ્રાચીન ગ્રીક",gsw:"સ્વિસ જર્મન",gu:"ગુજરાતી",guz:"ગુસી",gv:"માંક્સ",gwi:"ગ્વિચ’ઇન",ha:"હૌસા",hai:"હૈડા",haw:"હવાઇયન",he:"હીબ્રુ",hi:"હિન્દી",hif:"ફીજી હિંદી",hil:"હિલિગેનોન",hit:"હિટ્ટિતે",hmn:"હમોંગ",ho:"હિરી મોટૂ",hr:"ક્રોએશિયન",hsb:"અપર સોર્બિયન",ht:"હૈતિઅન ક્રેઓલે",hu:"હંગેરિયન",hup:"હૂપા",hy:"આર્મેનિયન",hz:"હેરેરો",ia:"ઇંટરલિંગુઆ",iba:"ઇબાન",ibb:"ઇબિબિઓ",id:"ઇન્ડોનેશિયન",ie:"ઇંટરલિંગ",ig:"ઇગ્બો",ii:"સિચુઆન યી",ik:"ઇનુપિયાક",ilo:"ઇલોકો",inh:"ઇંગુશ",io:"ઈડો",is:"આઇસલેન્ડિક",it:"ઇટાલિયન",iu:"ઇનુકિટૂટ",ja:"જાપાનીઝ",jbo:"લોજ્બાન",jgo:"નગોમ્બા",jmc:"મકામે",jpr:"જુદેઓ-પર્શિયન",jrb:"જુદેઓ-અરબી",jv:"જાવાનીસ",ka:"જ્યોર્જિયન",kaa:"કારા-કલ્પક",kab:"કબાઇલ",kac:"કાચિન",kaj:"જ્જુ",kam:"કમ્બા",kaw:"કાવી",kbd:"કબાર્ડિયન",kcg:"ત્યાપ",kde:"મકોન્ડે",kea:"કાબુવર્ડિઆનુ",kfo:"કોરો",kg:"કોંગો",kha:"ખાસી",kho:"ખોતાનીસ",khq:"કોયરા ચિનિ",ki:"કિકુયૂ",kj:"ક્વાન્યામા",kk:"કઝાખ",kkj:"કાકો",kl:"કલાલ્લિસુત",kln:"કલેજિન",km:"ખ્મેર",kmb:"કિમ્બન્દુ",kn:"કન્નડ",ko:"કોરિયન",koi:"કોમી-પર્મ્યાક",kok:"કોંકણી",kos:"કોસરિયન",kpe:"ક્પેલ્લે",kr:"કનુરી",krc:"કરાચય-બલ્કાર",krl:"કરેલિયન",kru:"કુરૂખ",ks:"કાશ્મીરી",ksb:"શમ્બાલા",ksf:"બફિયા",ksh:"કોલોગ્નિયન",ku:"કુર્દિશ",kum:"કુમીક",kut:"કુતેનાઇ",kv:"કોમી",kw:"કોર્નિશ",ky:"કિર્ગીઝ",la:"લેટિન",lad:"લાદીનો",lag:"લંગી",lah:"લાહન્ડા",lam:"લામ્બા",lb:"લક્ઝેમબર્ગિશ",lez:"લેઝધીયન",lfn:"લિંગ્વા ફેન્કા નોવા",lg:"ગાંડા",li:"લિંબૂર્ગિશ",lkt:"લાકોટા",ln:"લિંગાલા",lo:"લાઓ",lol:"મોંગો",lou:"લ્યુઇસિયાના ક્રેઓલ",loz:"લોઝી",lrc:"ઉત્તરી લુરી",lt:"લિથુઆનિયન",lu:"લૂબા-કટાંગા",lua:"લૂબા-લુલુઆ",lui:"લુઇસેનો",lun:"લુન્ડા",luo:"લ્યુઓ",lus:"મિઝો",luy:"લુઈયા",lv:"લાતવિયન",mad:"માદુરીસ",mag:"મગહી",mai:"મૈથિલી",mak:"મકાસર",man:"મન્ડિન્ગો",mas:"મસાઇ",mdf:"મોક્ષ",mdr:"મંદાર",men:"મેન્ડે",mer:"મેરુ",mfe:"મોરીસ્યેન",mg:"મલાગસી",mga:"મધ્ય આઈરિશ",mgh:"માખુવા-મીટ્ટુ",mgo:"મેતા",mh:"માર્શલીઝ",mi:"માઓરી",mic:"મિકમેક",min:"મિનાંગ્કાબાઉ",mk:"મેસેડોનિયન",ml:"મલયાલમ",mn:"મોંગોલિયન",mnc:"માન્ચુ",mni:"મણિપુરી",moh:"મોહૌક",mos:"મોસ્સી",mr:"મરાઠી",mrj:"પશ્ચિમી મારી",ms:"મલય",mt:"માલ્ટિઝ",mua:"મુનડાન્ગ",mus:"ક્રિક",mwl:"મિરાંડી",mwr:"મારવાડી",my:"બર્મીઝ",myv:"એર્ઝયા",mzn:"મઝાન્દેરાની",na:"નાઉરૂ",nap:"નેપોલિટાન",naq:"નમા",nb:"નોર્વેજિયન બોકમાલ",nd:"ઉત્તર દેબેલ",nds:"લો જર્મન","nds-NL":"લો સેક્સોન",ne:"નેપાળી","new":"નેવારી",ng:"ડોન્ગા",nia:"નિયાસ",niu:"નિયુઆન",nl:"ડચ","nl-BE":"ફ્લેમિશ",nmg:"ક્વાસિઓ",nn:"નોર્વેજિયન નાયનૉર્સ્ક",nnh:"નીએમબુન",no:"નૉર્વેજીયન",nog:"નોગાઇ",non:"જૂની નોર્સ",nqo:"એન’કો",nr:"દક્ષિણ દેબેલ",nso:"ઉત્તરી સોથો",nus:"નુએર",nv:"નાવાજો",nwc:"પરંપરાગત નેવારી",ny:"ન્યાન્જા",nym:"ન્યામવેઝી",nyn:"ન્યાનકોલ",nyo:"ન્યોરો",nzi:"ન્ઝિમા",oc:"ઓક્સિટન",oj:"ઓજિબ્વા",om:"ઓરોમો",or:"ઉડિયા",os:"ઓસ્સેટિક",osa:"ઓસેજ",ota:"ઓટોમાન તુર્કિશ",pa:"પંજાબી",pag:"પંગાસીનાન",pal:"પહલવી",pam:"પમ્પાન્ગા",pap:"પાપિયામેન્ટો",pau:"પલાઉઆન",pcm:"નાઇજેરિયન પીજીન",peo:"જૂની ફારસી",phn:"ફોનિશિયન",pi:"પાલી",pl:"પોલીશ",pon:"પોહપિએન",prg:"પ્રુસ્સીયન",pro:"જુની પ્રોવેન્સલ",ps:"પશ્તો",pt:"પોર્ટુગીઝ","pt-BR":"બ્રાઝિલીયન પોર્ટુગીઝ","pt-PT":"યુરોપિયન પોર્ટુગીઝ",qu:"ક્વેચુઆ",quc:"કિચે",raj:"રાજસ્થાની",rap:"રાપાનુઇ",rar:"રારોટોંગન",rm:"રોમાન્શ",rn:"રૂન્દી",ro:"રોમાનિયન","ro-MD":"મોલડાવિયન",rof:"રોમ્બો",rom:"રોમાની",root:"રૂટ",ru:"રશિયન",rup:"અરોમેનિયન",rw:"કિન્યારવાન્ડા",rwk:"રવા",sa:"સંસ્કૃત",sad:"સોંડવે",sah:"સખા",sam:"સામરિટાન અરેમિક",saq:"સમ્બુરુ",sas:"સાસાક",sat:"સંતાલી",sba:"ન્ગામ્બેય",sbp:"સાંગુ",sc:"સાર્દિનિયન",scn:"સિસિલિયાન",sco:"સ્કોટ્સ",sd:"સિંધી",sdh:"સર્ઘન કુર્દીશ",se:"ઉત્તરી સામી",seh:"સેના",sel:"સેલ્કપ",ses:"કોયરાબોરો સેન્ની",sg:"સાંગો",sga:"જૂની આયરિશ",sh:"સર્બો-ક્રોએશિયન",shi:"તેશીલહિટ",shn:"શેન",si:"સિંહાલી",sid:"સિદામો",sk:"સ્લોવૅક",sl:"સ્લોવેનિયન",sm:"સામોન",sma:"દક્ષિણી સામી",smj:"લુલે સામી",smn:"ઇનારી સામી",sms:"સ્કોલ્ટ સામી",sn:"શોના",snk:"સોનિન્કે",so:"સોમાલી",sog:"સોગ્ડિએન",sq:"અલ્બેનિયન",sr:"સર્બિયન",srn:"સ્રાનન ટોન્ગો",srr:"સેરેર",ss:"સ્વાતી",ssy:"સાહો",st:"દક્ષિણ સોથો",su:"સંડેનીઝ",suk:"સુકુમા",sus:"સુસુ",sux:"સુમેરિયન",sv:"સ્વીડિશ",sw:"સ્વાહિલી","sw-CD":"કોંગો સ્વાહિલી",swb:"કોમોરિયન",syc:"પરંપરાગત સિરિએક",syr:"સિરિએક",ta:"તમિલ",tcy:"તુલુ",te:"તેલુગુ",tem:"ટિમ્ને",teo:"તેસો",ter:"તેરેનો",tet:"તેતુમ",tg:"તાજીક",th:"થાઈ",ti:"ટાઇગ્રિનિયા",tig:"ટાઇગ્રે",tiv:"તિવ",tk:"તુર્કમેન",tkl:"તોકેલાઉ",tl:"ટાગાલોગ",tlh:"ક્લિન્ગોન",tli:"ક્લીન્ગકિટ",tmh:"તામાશેખ",tn:"ત્સ્વાના",to:"ટોંગાન",tog:"ન્યાસા ટોન્ગા",tpi:"ટોક પિસિન",tr:"ટર્કિશ",trv:"ટારોકો",ts:"સોંગા",tsi:"સિમ્શિયન",tt:"તતાર",ttt:"મુસ્લિમ તાટ",tum:"તુમ્બુકા",tvl:"તુવાલુ",tw:"ટ્વાઇ",twq:"તસાવાક",ty:"તાહિતિયન",tyv:"ટુવીનિયન",tzm:"સેન્ટ્રલ એટલાસ તામાઝિટ",udm:"ઉદમુર્ત",ug:"ઉઇગુર",uga:"યુગેરિટિક",uk:"યુક્રેનિયન",umb:"ઉમ્બુન્ડૂ",ur:"ઉર્દૂ",uz:"ઉઝ્બેક",vai:"વાઇ",ve:"વેન્દા",vi:"વિયેતનામીસ",vo:"વોલાપુક",vot:"વોટિક",vun:"વુન્જો",wa:"વાલૂન",wae:"વેલ્સેર",wal:"વોલાયટ્ટા",war:"વારેય",was:"વાશો",wbp:"વાર્લ્પીરી",wo:"વોલોફ",xal:"કાલ્મિક",xh:"ખોસા",xog:"સોગા",yao:"યાઓ",yap:"યાપીસ",yav:"યાન્ગબેન",ybb:"યેમ્બા",yi:"યિદ્દિશ",yo:"યોરૂબા",yue:"કેંટોનીઝ",za:"ઝુઆગ",zap:"ઝેપોટેક",zbl:"બ્લિસિમ્બોલ્સ",zen:"ઝેનાગા",zgh:"માનક મોરોક્કન તામાઝિટ",zh:"ચાઇનીઝ","zh-Hans":"સરળીકૃત મેન્ડેરિન ચાઇનીઝ","zh-Hant":"પરંપરાગત મેન્ડેરિન ચાઇનીઝ",zu:"ઝુલુ",zun:"ઝૂની",zza:"ઝાઝા"},scriptNames:{Cyrl:"સિરિલિક",Latn:"લેટિન",Arab:"અરબી",Guru:"ગુરૂમુખી",Tfng:"તિફિનાઘ",Vaii:"વાઇ",Hans:"સરળીકૃત",Hant:"પરંપરાગત"}},he:{rtl:true,languageNames:{aa:"אפארית",ab:"אבחזית",ace:"אכינזית",ach:"אקצ׳ולי",ada:"אדנמה",ady:"אדיגית",ae:"אבסטן",af:"אפריקאנס",afh:"אפריהילי",agq:"אע׳ם",ain:"אינו",ak:"אקאן",akk:"אכדית",ale:"אלאוט",alt:"אלטאי דרומית",am:"אמהרית",an:"אראגונית",ang:"אנגלית עתיקה",anp:"אנג׳יקה",ar:"ערבית","ar-001":"ערבית ספרותית",arc:"ארמית",arn:"אראוקנית",arp:"אראפהו",ars:"ערבית - נג׳ד",arw:"ארוואק",as:"אסאמית",asa:"אסו",ast:"אסטורית",av:"אווארית",awa:"אוואדית",ay:"איימארית",az:"אזרית",ba:"בשקירית",bal:"באלוצ׳י",ban:"באלינזית",bar:"בווארית",bas:"בסאא",bax:"במום",bbj:"גומאלה",be:"בלארוסית",bej:"בז׳ה",bem:"במבה",bez:"בנה",bfd:"באפוט",bg:"בולגרית",bgn:"באלוצ׳י מערבית",bho:"בוג׳פורי",bi:"ביסלמה",bik:"ביקול",bin:"ביני",bkm:"קום",bla:"סיקסיקה",bm:"במבארה",bn:"בנגלית",bo:"טיבטית",br:"ברטונית",bra:"בראג׳",brx:"בודו",bs:"בוסנית",bss:"אקוסה",bua:"בוריאט",bug:"בוגינזית",bum:"בולו",byn:"בלין",byv:"מדומבה",ca:"קטלאנית",cad:"קאדו",car:"קאריב",cay:"קאיוגה",cch:"אטסם",ccp:"צ׳אקמה",ce:"צ׳צ׳נית",ceb:"סבואנו",cgg:"צ׳יגה",ch:"צ׳מורו",chb:"צ׳יבצ׳ה",chg:"צ׳אגאטאי",chk:"צ׳וקסה",chm:"מארי",chn:"ניב צ׳ינוק",cho:"צ׳וקטאו",chp:"צ׳יפוויאן",chr:"צ׳רוקי",chy:"שאיין",ckb:"כורדית סוראנית",co:"קורסיקנית",cop:"קופטית",cr:"קרי",crh:"טטרית של קרים",crs:"קריאולית (סיישל)",cs:"צ׳כית",csb:"קשובית",cu:"סלאבית כנסייתית עתיקה",cv:"צ׳ובאש",cy:"וולשית",da:"דנית",dak:"דקוטה",dar:"דרגווה",dav:"טאיטה",de:"גרמנית","de-AT":"גרמנית (אוסטריה)","de-CH":"גרמנית (שוויץ)",del:"דלאוור",den:"סלאבית",dgr:"דוגריב",din:"דינקה",dje:"זארמה",doi:"דוגרי",dsb:"סורבית תחתית",dua:"דואלה",dum:"הולנדית תיכונה",dv:"דיבהי",dyo:"ג׳ולה פונית",dyu:"דיולה",dz:"דזונקה",dzg:"דזאנגה",ebu:"אמבו",ee:"אווה",efi:"אפיק",egy:"מצרית עתיקה",eka:"אקיוק",el:"יוונית",elx:"עילמית",en:"אנגלית","en-AU":"אנגלית (אוסטרליה)","en-CA":"אנגלית (קנדה)","en-GB":"אנגלית (בריטניה)","en-US":"אנגלית (ארצות הברית)",enm:"אנגלית תיכונה",eo:"אספרנטו",es:"ספרדית","es-419":"ספרדית (אמריקה הלטינית)","es-ES":"ספרדית (ספרד)","es-MX":"ספרדית (מקסיקו)",et:"אסטונית",eu:"בסקית",ewo:"אוונדו",fa:"פרסית",fan:"פנג",fat:"פאנטי",ff:"פולה",fi:"פינית",fil:"פיליפינית",fj:"פיג׳ית",fo:"פארואזית",fon:"פון",fr:"צרפתית","fr-CA":"צרפתית (קנדה)","fr-CH":"צרפתית (שוויץ)",frc:"צרפתית קייג׳ונית",frm:"צרפתית תיכונה",fro:"צרפתית עתיקה",frr:"פריזית צפונית",frs:"פריזית מזרחית",fur:"פריולית",fy:"פריזית מערבית",ga:"אירית",gaa:"גא",gag:"גגאוזית",gan:"סינית גאן",gay:"גאיו",gba:"גבאיה",gd:"גאלית סקוטית",gez:"געז",gil:"קיריבטית",gl:"גליציאנית",gmh:"גרמנית בינונית-גבוהה",gn:"גוארני",goh:"גרמנית עתיקה גבוהה",gon:"גונדי",gor:"גורונטאלו",got:"גותית",grb:"גרבו",grc:"יוונית עתיקה",gsw:"גרמנית (בשוויץ)",gu:"גוג׳ארטי",guz:"גוסי",gv:"מאנית",gwi:"גוויצ׳ן",ha:"האוסה",hai:"האידה",hak:"סינית האקה",haw:"הוואית",he:"עברית",hi:"הינדי",hil:"היליגאינון",hit:"חתית",hmn:"המונג",ho:"הירי מוטו",hr:"קרואטית",hsb:"סורבית עילית",hsn:"סינית שיאנג",ht:"קריאולית (האיטי)",hu:"הונגרית",hup:"הופה",hy:"ארמנית",hz:"הררו",ia:"‏אינטרלינגואה",iba:"איבאן",ibb:"איביביו",id:"אינדונזית",ie:"אינטרלינגה",ig:"איגבו",ii:"סצ׳ואן יי",ik:"אינופיאק",ilo:"אילוקו",inh:"אינגושית",io:"אידו",is:"איסלנדית",it:"איטלקית",iu:"אינוקטיטוט",ja:"יפנית",jbo:"לוז׳באן",jgo:"נגומבה",jmc:"מאקאמה",jpr:"פרסית יהודית",jrb:"ערבית יהודית",jv:"יאוואית",ka:"גאורגית",kaa:"קארא-קלפאק",kab:"קבילה",kac:"קצ׳ין",kaj:"ג׳ו",kam:"קמבה",kaw:"קאווי",kbd:"קברדית",kbl:"קנמבו",kcg:"טיאפ",kde:"מקונדה",kea:"קאבוורדיאנו",kfo:"קורו",kg:"קונגו",kha:"קהאסי",kho:"קוטאנזית",khq:"קוירה צ׳יני",ki:"קיקויו",kj:"קואניאמה",kk:"קזחית",kkj:"קאקו",kl:"גרינלנדית",kln:"קלנג׳ין",km:"חמרית",kmb:"קימבונדו",kn:"קנאדה",ko:"קוריאנית",koi:"קומי-פרמיאקית",kok:"קונקאני",kos:"קוסראיאן",kpe:"קפלה",kr:"קאנורי",krc:"קראצ׳י-בלקר",krl:"קארלית",kru:"קורוק",ks:"קשמירית",ksb:"שמבאלה",ksf:"באפיה",ksh:"קולוניאן",ku:"כורדית",kum:"קומיקית",kut:"קוטנאי",kv:"קומי",kw:"קורנית",ky:"קירגיזית",la:"לטינית",lad:"לדינו",lag:"לאנגי",lah:"לנדה",lam:"למבה",lb:"לוקסמבורגית",lez:"לזגית",lg:"גאנדה",li:"לימבורגית",lkt:"לקוטה",ln:"לינגלה",lo:"לאו",lol:"מונגו",lou:"קריאולית לואיזיאנית",loz:"לוזית",lrc:"לורית צפונית",lt:"ליטאית",lu:"לובה-קטנגה",lua:"לובה-לולואה",lui:"לויסנו",lun:"לונדה",luo:"לואו",lus:"מיזו",luy:"לויה",lv:"לטבית",mad:"מדורזית",maf:"מאפאה",mag:"מאגאהית",mai:"מאיטילית",mak:"מקסאר",man:"מנדינגו",mas:"מסאית",mde:"מאבא",mdf:"מוקשה",mdr:"מנדאר",men:"מנדה",mer:"מרו",mfe:"קריאולית מאוריציאנית",mg:"מלגשית",mga:"אירית תיכונה",mgh:"מאקוואה מטו",mgo:"מטא",mh:"מרשלית",mi:"מאורית",mic:"מיקמק",min:"מיננגקבאו",mk:"מקדונית",ml:"מליאלאם",mn:"מונגולית",mnc:"מנצ׳ו",mni:"מניפורית",moh:"מוהוק",mos:"מוסי",mr:"מראטהי",ms:"מלאית",mt:"מלטית",mua:"מונדאנג",mus:"קריק",mwl:"מירנדזית",mwr:"מרווארי",my:"בורמזית",mye:"מאיין",myv:"ארזיה",mzn:"מאזאנדראני",na:"נאורית",nan:"סינית מין נאן",nap:"נפוליטנית",naq:"נאמה",nb:"נורווגית ספרותית",nd:"נדבלה צפונית",nds:"גרמנית תחתית","nds-NL":"סקסונית תחתית",ne:"נפאלית","new":"נווארי",ng:"נדונגה",nia:"ניאס",niu:"ניואן",nl:"הולנדית","nl-BE":"פלמית",nmg:"קוואסיו",nn:"נורווגית חדשה",nnh:"נגיאמבון",no:"נורווגית",nog:"נוגאי",non:"‏נורדית עתיקה",nqo:"נ׳קו",nr:"נדבלה דרומית",nso:"סותו צפונית",nus:"נואר",nv:"נאוואחו",nwc:"נווארית קלאסית",ny:"ניאנג׳ה",nym:"ניאמווזי",nyn:"ניאנקולה",nyo:"ניורו",nzi:"נזימה",oc:"אוקסיטנית",oj:"אוג׳יבווה",om:"אורומו",or:"אורייה",os:"אוסטית",osa:"אוסג׳",ota:"טורקית עות׳מנית",pa:"פנג׳אבי",pag:"פנגסינאן",pal:"פלאבי",pam:"פמפאניה",pap:"פפיאמנטו",pau:"פלוואן",pcm:"ניגרית פידג׳ית",peo:"פרסית עתיקה",phn:"פיניקית",pi:"פאלי",pl:"פולנית",pon:"פונפיאן",prg:"פרוסית",pro:"פרובנסאל עתיקה",ps:"פאשטו",pt:"פורטוגזית","pt-BR":"פורטוגזית (ברזיל)","pt-PT":"פורטוגזית (פורטוגל)",qu:"קצ׳ואה",quc:"קיצ׳ה",raj:"ראג׳סטאני",rap:"רפאנוי",rar:"ררוטונגאן",rm:"רומאנש",rn:"קירונדי",ro:"רומנית","ro-MD":"מולדבית",rof:"רומבו",rom:"רומאני",root:"רוט",ru:"רוסית",rup:"ארומנית",rw:"קנירואנדית",rwk:"ראווה",sa:"סנסקריט",sad:"סנדאווה",sah:"סאחה",sam:"ארמית שומרונית",saq:"סמבורו",sas:"סאסק",sat:"סאנטאלי",sba:"נגמבאי",sbp:"סאנגו",sc:"סרדינית",scn:"סיציליאנית",sco:"סקוטית",sd:"סינדהית",sdh:"כורדית דרומית",se:"סמי צפונית",see:"סנקה",seh:"סנה",sel:"סלקופ",ses:"קויראבורו סני",sg:"סנגו",sga:"אירית עתיקה",sh:"סרבו-קרואטית",shi:"שילה",shn:"שאן",shu:"ערבית צ׳אדית",si:"סינהלה",sid:"סידאמו",sk:"סלובקית",sl:"סלובנית",sm:"סמואית",sma:"סאמי דרומית",smj:"לולה סאמי",smn:"אינארי סאמי",sms:"סקולט סאמי",sn:"שונה",snk:"סונינקה",so:"סומלית",sog:"סוגדיאן",sq:"אלבנית",sr:"סרבית",srn:"סרנאן טונגו",srr:"סרר",ss:"סאווזי",ssy:"סאהו",st:"סותו דרומית",su:"סונדנזית",suk:"סוקומה",sus:"סוסו",sux:"שומרית",sv:"שוודית",sw:"סווהילי","sw-CD":"סווהילי קונגו",swb:"קומורית",syc:"סירית קלאסית",syr:"סורית",ta:"טמילית",te:"טלוגו",tem:"טימנה",teo:"טסו",ter:"טרנו",tet:"טטום",tg:"טג׳יקית",th:"תאית",ti:"תיגרינית",tig:"טיגרית",tiv:"טיב",tk:"טורקמנית",tkl:"טוקלאו",tl:"טאגאלוג",tlh:"קלינגונית",tli:"טלינגיט",tmh:"טמאשק",tn:"סוואנה",to:"טונגאית",tog:"ניאסה טונגה",tpi:"טוק פיסין",tr:"טורקית",trv:"טרוקו",ts:"טסונגה",tsi:"טסימשיאן",tt:"טטרית",tum:"טומבוקה",tvl:"טובאלו",tw:"טווי",twq:"טסוואק",ty:"טהיטית",tyv:"טובינית",tzm:"תמאזיגת של מרכז מרוקו",udm:"אודמורט",ug:"אויגור",uga:"אוגריתית",uk:"אוקראינית",umb:"אומבונדו",ur:"אורדו",uz:"אוזבקית",vai:"וואי",ve:"וונדה",vi:"וייטנאמית",vo:"‏וולאפיק",vot:"ווטיק",vun:"וונג׳ו",wa:"ולונית",wae:"וואלסר",wal:"ווליאטה",war:"ווראי",was:"וואשו",wbp:"וורלפירי",wo:"וולוף",wuu:"סינית וו",xal:"קלמיקית",xh:"קוסה",xog:"סוגה",yao:"יאו",yap:"יאפזית",yav:"יאנגבן",ybb:"ימבה",yi:"יידיש",yo:"יורובה",yue:"קנטונזית",za:"זואנג",zap:"זאפוטק",zbl:"בליסימבולס",zen:"זנאגה",zgh:"תמזיע׳ת מרוקאית תקנית",zh:"סינית","zh-Hans":"סינית מנדרינית פשוטה","zh-Hant":"סינית מנדרינית מסורתית",zu:"זולו",zun:"זוני",zza:"זאזא"},scriptNames:{Cyrl:"קירילי",Latn:"לטיני",Arab:"ערבי",Guru:"גורמוקי",Hans:"פשוט",Hant:"מסורתי"}},hi:{rtl:false,languageNames:{aa:"अफ़ार",ab:"अब्ख़ाज़ियन",ace:"अचाइनीस",ach:"अकोली",ada:"अदान्गमे",ady:"अदिघे",ae:"अवस्ताई",af:"अफ़्रीकी",afh:"अफ्रिहिली",agq:"अग्हेम",ain:"ऐनू",ak:"अकन",akk:"अक्कादी",ale:"अलेउत",alt:"दक्षिणी अल्ताई",am:"अम्हेरी",an:"अर्गोनी",ang:"पुरानी अंग्रेज़ी",anp:"अंगिका",ar:"अरबी","ar-001":"आधुनिक मानक अरबी",arc:"ऐरेमेक",arn:"मापूचे",arp:"अरापाहो",ars:"नज्दी अरबी",arw:"अरावक",as:"असमिया",asa:"असु",ast:"अस्तुरियन",av:"अवेरिक",awa:"अवधी",ay:"आयमारा",az:"अज़रबैजानी",ba:"बशख़िर",bal:"बलूची",ban:"बालिनीस",bas:"बसा",be:"बेलारूसी",bej:"बेजा",bem:"बेम्बा",bez:"बेना",bg:"बुल्गारियाई",bgn:"पश्चिमी बलोची",bho:"भोजपुरी",bi:"बिस्लामा",bik:"बिकोल",bin:"बिनी",bla:"सिक्सिका",bm:"बाम्बारा",bn:"बंगाली",bo:"तिब्बती",br:"ब्रेटन",bra:"ब्रज",brx:"बोडो",bs:"बोस्नियाई",bua:"बुरियात",bug:"बगिनीस",byn:"ब्लिन",ca:"कातालान",cad:"कैड्डो",car:"कैरिब",cch:"अत्सम",ccp:"चकमा",ce:"चेचन",ceb:"सिबुआनो",cgg:"शिगा",ch:"कमोरो",chb:"चिब्चा",chg:"छगाताई",chk:"चूकीस",chm:"मारी",chn:"चिनूक जारगॉन",cho:"चोक्तौ",chp:"शिपेव्यान",chr:"चेरोकी",chy:"शेयेन्न",ckb:"सोरानी कुर्दिश",co:"कोर्सीकन",cop:"कॉप्टिक",cr:"क्री",crh:"क्रीमीन तुर्की",crs:"सेसेल्वा क्रिओल फ्रेंच",cs:"चेक",csb:"काशुबियन",cu:"चर्च साल्विक",cv:"चूवाश",cy:"वेल्श",da:"डेनिश",dak:"दाकोता",dar:"दार्गवा",dav:"तैता",de:"जर्मन","de-AT":"ऑस्ट्रियाई जर्मन","de-CH":"स्विस उच्च जर्मन",del:"डिलैवेयर",den:"स्लेव",dgr:"डोग्रिब",din:"दिन्का",dje:"झार्मा",doi:"डोग्री",dsb:"निचला सॉर्बियन",dua:"दुआला",dum:"मध्यकालीन पुर्तगाली",dv:"दिवेही",dyo:"जोला-फोंई",dyu:"ड्युला",dz:"ज़ोन्गखा",dzg:"दज़ागा",ebu:"एम्बु",ee:"ईवे",efi:"एफिक",egy:"प्राचीन मिस्री",eka:"एकाजुक",el:"यूनानी",elx:"एलामाइट",en:"अंग्रेज़ी","en-AU":"ऑस्ट्रेलियाई अंग्रेज़ी","en-CA":"कनाडाई अंग्रेज़ी","en-GB":"ब्रिटिश अंग्रेज़ी","en-US":"अमेरिकी अंग्रेज़ी",enm:"मध्यकालीन अंग्रेज़ी",eo:"एस्पेरेंतो",es:"स्पेनी","es-419":"लैटिन अमेरिकी स्पेनिश","es-ES":"यूरोपीय स्पेनिश","es-MX":"मैक्सिकन स्पेनिश",et:"एस्टोनियाई",eu:"बास्क",ewo:"इवोन्डो",fa:"फ़ारसी",fan:"फैन्ग",fat:"फन्टी",ff:"फुलाह",fi:"फ़िनिश",fil:"फ़िलिपीनो",fj:"फिजियन",fo:"फ़ैरोइज़",fon:"फॉन",fr:"फ़्रेंच","fr-CA":"कनाडाई फ़्रेंच","fr-CH":"स्विस फ़्रेंच",frc:"केजन फ़्रेंच",frm:"मध्यकालीन फ़्रांसीसी",fro:"पुरातन फ़्रांसीसी",frr:"उत्तरी फ़्रीसियाई",frs:"पूर्वी फ़्रीसियाई",fur:"फ्रीयुलीयान",fy:"पश्चिमी फ़्रिसियाई",ga:"आयरिश",gaa:"गा",gag:"गागौज़",gay:"गायो",gba:"ग्बाया",gd:"स्कॉटिश गाएलिक",gez:"गीज़",gil:"गिल्बरतीस",gl:"गैलिशियन",gmh:"मध्यकालीन हाइ जर्मन",gn:"गुआरानी",goh:"पुरातन हाइ जर्मन",gon:"गाँडी",gor:"गोरोन्तालो",got:"गॉथिक",grb:"ग्रेबो",grc:"प्राचीन यूनानी",gsw:"स्विस जर्मन",gu:"गुजराती",guz:"गुसी",gv:"मैंक्स",gwi:"ग्विचइन",ha:"हौसा",hai:"हैडा",haw:"हवाई",he:"हिब्रू",hi:"हिन्दी",hil:"हिलिगेनन",hit:"हिताइत",hmn:"ह्मॉंग",ho:"हिरी मोटू",hr:"क्रोएशियाई",hsb:"ऊपरी सॉर्बियन",ht:"हैतियाई",hu:"हंगेरियाई",hup:"हूपा",hy:"आर्मेनियाई",hz:"हरैरो",ia:"इंटरलिंगुआ",iba:"इबान",ibb:"इबिबियो",id:"इंडोनेशियाई",ie:"ईन्टरलिंगुइ",ig:"ईग्बो",ii:"सिचुआन यी",ik:"इनुपियाक्",ilo:"इलोको",inh:"इंगुश",io:"इडौ",is:"आइसलैंडिक",it:"इतालवी",iu:"इनूकीटूत्",ja:"जापानी",jbo:"लोज्बान",jgo:"नगोंबा",jmc:"मैकहैमे",jpr:"जुदेओ-पर्शियन",jrb:"जुदेओ-अरेबिक",jv:"जावानीज़",ka:"जॉर्जियाई",kaa:"कारा-कल्पक",kab:"कबाइल",kac:"काचिन",kaj:"ज्जु",kam:"कम्बा",kaw:"कावी",kbd:"कबार्डियन",kcg:"त्याप",kde:"मैकोंड",kea:"काबुवेर्दियानु",kfo:"कोरो",kg:"कोंगो",kha:"खासी",kho:"खोतानीस",khq:"कोयरा चीनी",ki:"किकुयू",kj:"क्वान्यामा",kk:"कज़ाख़",kkj:"काको",kl:"कलालीसुत",kln:"कलेंजिन",km:"खमेर",kmb:"किम्बन्दु",kn:"कन्नड़",ko:"कोरियाई",koi:"कोमी-पर्मयाक",kok:"कोंकणी",kos:"कोसरैन",kpe:"क्पेल",kr:"कनुरी",krc:"कराचय-बल्कार",krl:"करेलियन",kru:"कुरूख",ks:"कश्मीरी",ksb:"शम्बाला",ksf:"बफिआ",ksh:"कोलोनियाई",ku:"कुर्दिश",kum:"कुमीक",kut:"क्यूतनाई",kv:"कोमी",kw:"कोर्निश",ky:"किर्गीज़",la:"लैटिन",lad:"लादीनो",lag:"लांगि",lah:"लाह्न्डा",lam:"लाम्बा",lb:"लग्ज़मबर्गी",lez:"लेज़्घीयन",lg:"गांडा",li:"लिंबर्गिश",lkt:"लैकोटा",ln:"लिंगाला",lo:"लाओ",lol:"मोंगो",lou:"लुईज़ियाना क्रियोल",loz:"लोज़ी",lrc:"उत्तरी लूरी",lt:"लिथुआनियाई",lu:"ल्यूबा-कटांगा",lua:"ल्यूबा-लुलुआ",lui:"लुइसेनो",lun:"लुन्डा",luo:"ल्युओ",lus:"मिज़ो",luy:"ल्युईआ",lv:"लातवियाई",mad:"मादुरीस",mag:"मगही",mai:"मैथिली",mak:"मकासर",man:"मन्डिन्गो",mas:"मसाई",mdf:"मोक्ष",mdr:"मंदार",men:"मेन्डे",mer:"मेरु",mfe:"मोरीस्येन",mg:"मालागासी",mga:"मध्यकालीन आइरिश",mgh:"मैखुवा-मीट्टो",mgo:"मेटा",mh:"मार्शलीज़",mi:"माओरी",mic:"मिकमैक",min:"मिनांग्काबाउ",mk:"मकदूनियाई",ml:"मलयालम",mn:"मंगोलियाई",mnc:"मन्चु",mni:"मणिपुरी",moh:"मोहौक",mos:"मोस्सी",mr:"मराठी",ms:"मलय",mt:"माल्टीज़",mua:"मुंडैंग",mus:"क्रीक",mwl:"मिरांडी",mwr:"मारवाड़ी",my:"बर्मीज़",myv:"एर्ज़या",mzn:"माज़न्देरानी",na:"नाउरू",nap:"नीपोलिटन",naq:"नामा",nb:"नॉर्वेजियाई बोकमाल",nd:"उत्तरी देबेल",nds:"निचला जर्मन","nds-NL":"निचली सैक्सन",ne:"नेपाली","new":"नेवाड़ी",ng:"डोन्गा",nia:"नियास",niu:"नियुआन",nl:"डच","nl-BE":"फ़्लेमिश",nmg:"क्वासिओ",nn:"नॉर्वेजियाई नॉयनॉर्स्क",nnh:"गैम्बू",no:"नॉर्वेजियाई",nog:"नोगाई",non:"पुराना नॉर्स",nqo:"एन्को",nr:"दक्षिण देबेल",nso:"उत्तरी सोथो",nus:"नुएर",nv:"नावाजो",nwc:"पारम्परिक नेवारी",ny:"न्यानजा",nym:"न्यामवेज़ी",nyn:"न्यानकोल",nyo:"न्योरो",nzi:"न्ज़ीमा",oc:"ओसीटान",oj:"ओजिब्वा",om:"ओरोमो",or:"उड़िया",os:"ओस्सेटिक",osa:"ओसेज",ota:"ओटोमान तुर्किश",pa:"पंजाबी",pag:"पंगासीनान",pal:"पाह्लावी",pam:"पाम्पान्गा",pap:"पापियामेन्टो",pau:"पलोउआन",pcm:"नाइजीरियाई पिडगिन",peo:"पुरानी फारसी",phn:"फोएनिशियन",pi:"पाली",pl:"पोलिश",pon:"पोह्नपिएन",prg:"प्रुशियाई",pro:"पुरानी प्रोवेन्सल",ps:"पश्तो",pt:"पुर्तगाली","pt-BR":"ब्राज़ीली पुर्तगाली","pt-PT":"यूरोपीय पुर्तगाली",qu:"क्वेचुआ",quc:"किश",raj:"राजस्थानी",rap:"रापानुई",rar:"रारोतोंगन",rm:"रोमान्श",rn:"रुन्दी",ro:"रोमानियाई","ro-MD":"मोलडावियन",rof:"रोम्बो",rom:"रोमानी",root:"रूट",ru:"रूसी",rup:"अरोमानियन",rw:"किन्यारवांडा",rwk:"रवा",sa:"संस्कृत",sad:"सन्डावे",sah:"याकूत",sam:"सामैरिटन अरैमिक",saq:"सैम्बुरु",sas:"सासाक",sat:"संथाली",sba:"न्गाम्बे",sbp:"सैंगु",sc:"सार्दिनियन",scn:"सिसिलियन",sco:"स्कॉट्स",sd:"सिंधी",sdh:"दक्षिणी कार्डिश",se:"नॉर्दन सामी",seh:"सेना",sel:"सेल्कप",ses:"कोयराबोरो सेन्नी",sg:"सांगो",sga:"पुरानी आइरिश",sh:"सेर्बो-क्रोएशियाई",shi:"तैचेल्हित",shn:"शैन",si:"सिंहली",sid:"सिदामो",sk:"स्लोवाक",sl:"स्लोवेनियाई",sm:"सामोन",sma:"दक्षिणी सामी",smj:"ल्युल सामी",smn:"इनारी सामी",sms:"स्कोल्ट सामी",sn:"शोणा",snk:"सोनिन्के",so:"सोमाली",sog:"सोग्डिएन",sq:"अल्बानियाई",sr:"सर्बियाई",srn:"स्रानान टॉन्गो",srr:"सेरेर",ss:"स्वाती",ssy:"साहो",st:"दक्षिणी सेसेथो",su:"सुंडानी",suk:"सुकुमा",sus:"सुसु",sux:"सुमेरियन",sv:"स्वीडिश",sw:"स्वाहिली","sw-CD":"कांगो स्वाहिली",swb:"कोमोरियन",syc:"क्लासिकल सिरिएक",syr:"सिरिएक",ta:"तमिल",te:"तेलुगू",tem:"टिम्ने",teo:"टेसो",ter:"तेरेनो",tet:"तेतुम",tg:"ताजिक",th:"थाई",ti:"तिग्रीन्या",tig:"टाइग्रे",tiv:"तिव",tk:"तुर्कमेन",tkl:"तोकेलाऊ",tl:"टैगलॉग",tlh:"क्लिंगन",tli:"त्लिंगित",tmh:"तामाशेक",tn:"सेत्स्वाना",to:"टोंगन",tog:"न्यासा टोन्गा",tpi:"टोक पिसिन",tr:"तुर्की",trv:"तारोको",ts:"सोंगा",tsi:"त्सिमीशियन",tt:"तातार",tum:"तम्बूका",tvl:"तुवालु",tw:"ट्वी",twq:"टासवाक",ty:"ताहितियन",tyv:"तुवीनियन",tzm:"मध्य एटलस तमाज़ित",udm:"उदमुर्त",ug:"उइगर",uga:"युगैरिटिक",uk:"यूक्रेनियाई",umb:"उम्बुन्डु",ur:"उर्दू",uz:"उज़्बेक",vai:"वाई",ve:"वेन्दा",vi:"वियतनामी",vo:"वोलापुक",vot:"वॉटिक",vun:"वुंजो",wa:"वाल्लून",wae:"वाल्सर",wal:"वलामो",war:"वारै",was:"वाशो",wbp:"वॉल्पेरी",wo:"वोलोफ़",wuu:"वू चीनी",xal:"काल्मिक",xh:"ख़ोसा",xog:"सोगा",yao:"याओ",yap:"यापीस",yav:"यांगबेन",ybb:"येंबा",yi:"यहूदी",yo:"योरूबा",yue:"कैंटोनीज़",za:"ज़ुआंग",zap:"ज़ेपोटेक",zbl:"ब्लिसिम्बॉल्स",zen:"ज़ेनान्गा",zgh:"मानक मोरक्कन तामाज़ाइट",zh:"चीनी","zh-Hans":"सरलीकृत मैंडेरिन चीनी","zh-Hant":"पारंपरिक मैंडेरिन चीनी",zu:"ज़ुलू",zun:"ज़ूनी",zza:"ज़ाज़ा"},scriptNames:{Cyrl:"सिरिलिक",Latn:"लैटिन",Arab:"अरबी",Guru:"गुरमुखी",Tfng:"तिफिनाघ",Vaii:"वाई",Hans:"सरलीकृत",Hant:"पारंपरिक"}},hr:{rtl:false,languageNames:{aa:"afarski",ab:"abhaski",ace:"ačinski",ach:"ačoli",ada:"adangme",ady:"adigejski",ae:"avestički",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainuski",ak:"akanski",akk:"akadski",ale:"aleutski",alt:"južni altai",am:"amharski",an:"aragonski",ang:"staroengleski",anp:"angika",ar:"arapski","ar-001":"moderni standardni arapski",arc:"aramejski",arn:"mapuche",arp:"arapaho",ars:"najdi arapski",arw:"aravački",as:"asamski",asa:"asu",ast:"asturijski",av:"avarski",awa:"awadhi",ay:"ajmarski",az:"azerbajdžanski","az-Arab":"južnoazerbajdžanski",ba:"baškirski",bal:"belučki",ban:"balijski",bas:"basa",bax:"bamunski",bbj:"ghomala",be:"bjeloruski",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bugarski",bgn:"zapadnobaludžijski",bho:"bhojpuri",bi:"bislama",bik:"bikolski",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bangla",bo:"tibetski",br:"bretonski",bra:"braj",brx:"bodo",bs:"bosanski",bss:"akoose",bua:"burjatski",bug:"buginski",bum:"bulu",byn:"blin",byv:"medumba",ca:"katalonski",cad:"caddo",car:"karipski",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"čečenski",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"čibča",chg:"čagatajski",chk:"chuukese",chm:"marijski",chn:"chinook žargon",cho:"choctaw",chp:"chipewyan",chr:"čerokijski",chy:"čejenski",ckb:"soranski kurdski",co:"korzički",cop:"koptski",cr:"cree",crh:"krimski turski",crs:"sejšelski kreolski",cs:"češki",csb:"kašupski",cu:"crkvenoslavenski",cv:"čuvaški",cy:"velški",da:"danski",dak:"dakota jezik",dar:"dargwa",dav:"taita",de:"njemački","de-AT":"austrijski njemački","de-CH":"gornjonjemački (švicarski)",del:"delavarski",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"donjolužički",dua:"duala",dum:"srednjonizozemski",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egy:"staroegipatski",eka:"ekajuk",el:"grčki",elx:"elamitski",en:"engleski","en-AU":"australski engleski","en-CA":"kanadski engleski","en-GB":"britanski engleski","en-US":"američki engleski",enm:"srednjoengleski",eo:"esperanto",es:"španjolski","es-419":"latinoamerički španjolski","es-ES":"europski španjolski","es-MX":"meksički španjolski",et:"estonski",eu:"baskijski",ewo:"ewondo",fa:"perzijski",fan:"fang",fat:"fanti",ff:"fula",fi:"finski",fil:"filipinski",fj:"fidžijski",fo:"ferojski",fr:"francuski","fr-CA":"kanadski francuski","fr-CH":"švicarski francuski",frc:"kajunski francuski",frm:"srednjofrancuski",fro:"starofrancuski",frr:"sjevernofrizijski",frs:"istočnofrizijski",fur:"furlanski",fy:"zapadnofrizijski",ga:"irski",gaa:"ga",gag:"gagauski",gan:"gan kineski",gay:"gayo",gba:"gbaya",gd:"škotski gaelski",gez:"geez",gil:"gilbertski",gl:"galicijski",gmh:"srednjogornjonjemački",gn:"gvaranski",goh:"starovisokonjemački",gon:"gondi",gor:"gorontalo",got:"gotski",grb:"grebo",grc:"starogrčki",gsw:"švicarski njemački",gu:"gudžaratski",guz:"gusii",gv:"manski",gwi:"gwich’in",ha:"hausa",hai:"haidi",hak:"hakka kineski",haw:"havajski",he:"hebrejski",hi:"hindski",hil:"hiligaynonski",hit:"hetitski",hmn:"hmong",ho:"hiri motu",hr:"hrvatski",hsb:"gornjolužički",hsn:"xiang kineski",ht:"haićanski kreolski",hu:"mađarski",hup:"hupa",hy:"armenski",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonezijski",ie:"interligua",ig:"igbo",ii:"sichuan ji",ik:"inupiaq",ilo:"iloko",inh:"ingušetski",io:"ido",is:"islandski",it:"talijanski",iu:"inuktitut",ja:"japanski",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"judejsko-perzijski",jrb:"judejsko-arapski",jv:"javanski",ka:"gruzijski",kaa:"kara-kalpak",kab:"kabilski",kac:"kačinski",kaj:"kaje",kam:"kamba",kaw:"kawi",kbd:"kabardinski",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"zelenortski",kfo:"koro",kg:"kongo",kha:"khasi",kho:"khotanese",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kazaški",kkj:"kako",kl:"kalaallisut",kln:"kalenjin",km:"kmerski",kmb:"kimbundu",kn:"karnatački",ko:"korejski",koi:"komi-permski",kok:"konkani",kos:"naurski",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",krl:"karelijski",kru:"kuruški",ks:"kašmirski",ksb:"shambala",ksf:"bafia",ksh:"kelnski",ku:"kurdski",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"kornski",ky:"kirgiski",la:"latinski",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luksemburški",lez:"lezgiški",lg:"ganda",li:"limburški",lkt:"lakota",ln:"lingala",lo:"laoski",lol:"mongo",lou:"lujzijanski kreolski",loz:"lozi",lrc:"sjevernolurski",lt:"litavski",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"luyia",lv:"latvijski",mad:"madurski",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masajski",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauricijski kreolski",mg:"malgaški",mga:"srednjoirski",mgh:"makhuwa-meetto",mgo:"meta’",mh:"maršalski",mi:"maorski",mic:"micmac",min:"minangkabau",mk:"makedonski",ml:"malajalamski",mn:"mongolski",mnc:"mandžurski",mni:"manipurski",moh:"mohok",mos:"mossi",mr:"marathski",ms:"malajski",mt:"malteški",mua:"mundang",mus:"creek",mwl:"mirandski",mwr:"marwari",my:"burmanski",mye:"myene",myv:"mordvinski",mzn:"mazanderanski",na:"nauru",nan:"min nan kineski",nap:"napolitanski",naq:"nama",nb:"norveški bokmål",nd:"sjeverni ndebele",nds:"donjonjemački","nds-NL":"donjosaksonski",ne:"nepalski","new":"newari",ng:"ndonga",nia:"nias",niu:"niujski",nl:"nizozemski","nl-BE":"flamanski",nmg:"kwasio",nn:"norveški nynorsk",nnh:"ngiemboon",no:"norveški",nog:"nogajski",non:"staronorveški",nqo:"n’ko",nr:"južni ndebele",nso:"sjeverni sotski",nus:"nuerski",nv:"navajo",nwc:"klasični newari",ny:"njandža",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"okcitanski",oj:"ojibwa",om:"oromski",or:"orijski",os:"osetski",osa:"osage",ota:"turski - otomanski",pa:"pandžapski",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauanski",pcm:"nigerijski pidžin",peo:"staroperzijski",phn:"fenički",pi:"pali",pl:"poljski",pon:"pohnpeian",prg:"pruski",pro:"staroprovansalski",ps:"paštunski",pt:"portugalski","pt-BR":"brazilski portugalski","pt-PT":"europski portugalski",qu:"kečuanski",quc:"kiče",raj:"rajasthani",rap:"rapa nui",rar:"rarotonški",rm:"retoromanski",rn:"rundi",ro:"rumunjski","ro-MD":"moldavski",rof:"rombo",rom:"romski",root:"korijenski",ru:"ruski",rup:"aromunski",rw:"kinyarwanda",rwk:"rwa",sa:"sanskrtski",sad:"sandawe",sah:"jakutski",sam:"samarijanski aramejski",saq:"samburu",sas:"sasak",sat:"santalski",sba:"ngambay",sbp:"sangu",sc:"sardski",scn:"sicilijski",sco:"škotski",sd:"sindski",sdh:"južnokurdski",se:"sjeverni sami",see:"seneca",seh:"sena",sel:"selkupski",ses:"koyraboro senni",sg:"sango",sga:"staroirski",sh:"srpsko-hrvatski",shi:"tachelhit",shn:"shan",shu:"čadski arapski",si:"sinhaleški",sid:"sidamo",sk:"slovački",sl:"slovenski",sm:"samoanski",sma:"južni sami",smj:"lule sami",smn:"inari sami",sms:"skolt sami",sn:"shona",snk:"soninke",so:"somalski",sog:"sogdien",sq:"albanski",sr:"srpski",srn:"sranan tongo",srr:"serer",ss:"svati",ssy:"saho",st:"sesotski",su:"sundanski",suk:"sukuma",sus:"susu",sux:"sumerski",sv:"švedski",sw:"svahili","sw-CD":"kongoanski svahili",swb:"komorski",syc:"klasični sirski",syr:"sirijski",ta:"tamilski",te:"teluški",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadžički",th:"tajlandski",ti:"tigrinja",tig:"tigriški",tk:"turkmenski",tkl:"tokelaunski",tl:"tagalog",tlh:"klingonski",tli:"tlingit",tmh:"tamašečki",tn:"cvana",to:"tonganski",tog:"nyasa tonga",tpi:"tok pisin",tr:"turski",trv:"taroko",ts:"tsonga",tsi:"tsimshian",tt:"tatarski",tum:"tumbuka",tvl:"tuvaluanski",tw:"twi",twq:"tasawaq",ty:"tahićanski",tyv:"tuvinski",tzm:"tamašek (Srednji Atlas)",udm:"udmurtski",ug:"ujgurski",uga:"ugaritski",uk:"ukrajinski",umb:"umbundu",ur:"urdski",uz:"uzbečki",ve:"venda",vi:"vijetnamski",vo:"volapük",vot:"votski",vun:"vunjo",wa:"valonski",wae:"walserski",wal:"walamo",war:"waray",was:"washo",wbp:"warlpiri",wo:"volof",wuu:"wu kineski",xal:"kalmyk",xh:"xhosa",xog:"soga",yap:"japski",yav:"yangben",ybb:"yemba",yi:"jidiš",yo:"jorupski",yue:"kantonski",za:"zhuang",zap:"zapotečki",zbl:"Blissovi simboli",zen:"zenaga",zgh:"standardni marokanski tamašek",zh:"kineski","zh-Hans":"mandarinski kineski (pojednostavljeni)","zh-Hant":"mandarinski kineski (tradicionalni)",zu:"zulu",zun:"zuni",zza:"zazaki"},scriptNames:{Cyrl:"ćirilica",Latn:"latinica",Arab:"arapsko pismo",Guru:"gurmukhi pismo",Tfng:"tifinar",Vaii:"vai pismo",Hans:"pojednostavljeno pismo",Hant:"tradicionalno pismo"}},hu:{rtl:false,languageNames:{aa:"afar",ab:"abház",ace:"achinéz",ach:"akoli",ada:"adangme",ady:"adyghe",ae:"avesztán",af:"afrikaans",afh:"afrihili",agq:"agem",ain:"ainu",ak:"akan",akk:"akkád",ale:"aleut",alt:"dél-altaji",am:"amhara",an:"aragonéz",ang:"óangol",anp:"angika",ar:"arab","ar-001":"modern szabányos arab",arc:"arámi",arn:"mapucse",arp:"arapaho",ars:"nedzsdi arab",arw:"aravak",as:"asszámi",asa:"asu",ast:"asztúr",av:"avar",awa:"awádi",ay:"ajmara",az:"azerbajdzsáni",ba:"baskír",bal:"balucsi",ban:"balinéz",bas:"basza",bax:"bamun",bbj:"gomala",be:"belarusz",bej:"bedzsa",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bolgár",bgn:"nyugati beludzs",bho:"bodzspuri",bi:"bislama",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bangla",bo:"tibeti",br:"breton",bra:"braj",brx:"bodo",bs:"bosnyák",bss:"koszi",bua:"burját",bug:"buginéz",bum:"bulu",byn:"blin",byv:"medumba",ca:"katalán",cad:"caddo",car:"karib",cay:"kajuga",cch:"atszam",ccp:"csakma",ce:"csecsen",ceb:"szebuano",cgg:"kiga",ch:"csamoró",chb:"csibcsa",chg:"csagatáj",chk:"csukéz",chm:"mari",chn:"csinuk zsargon",cho:"csoktó",chp:"csipevé",chr:"cseroki",chy:"csejen",ckb:"közép-ázsiai kurd",co:"korzikai",cop:"kopt",cr:"krí",crh:"krími tatár",crs:"szeszelva kreol francia",cs:"cseh",csb:"kasub",cu:"egyházi szláv",cv:"csuvas",cy:"walesi",da:"dán",dak:"dakota",dar:"dargva",dav:"taita",de:"német","de-AT":"osztrák német","de-CH":"svájci felnémet",del:"delavár",den:"szlevi",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"alsó-szorb",dua:"duala",dum:"közép holland",dv:"divehi",dyo:"jola-fonyi",dyu:"diula",dz:"dzsonga",dzg:"dazaga",ebu:"embu",ee:"eve",efi:"efik",egy:"óegyiptomi",eka:"ekadzsuk",el:"görög",elx:"elamit",en:"angol","en-AU":"ausztrál angol","en-CA":"kanadai angol","en-GB":"brit angol","en-US":"amerikai angol",enm:"közép angol",eo:"eszperantó",es:"spanyol","es-419":"latin-amerikai spanyol","es-ES":"európai spanyol","es-MX":"spanyol (mexikói)",et:"észt",eu:"baszk",ewo:"evondo",fa:"perzsa",fan:"fang",fat:"fanti",ff:"fulani",fi:"finn",fil:"filippínó",fj:"fidzsi",fo:"feröeri",fr:"francia","fr-CA":"kanadai francia","fr-CH":"svájci francia",frc:"cajun francia",frm:"közép francia",fro:"ófrancia",frr:"északi fríz",frs:"keleti fríz",fur:"friuli",fy:"nyugati fríz",ga:"ír",gaa:"ga",gag:"gagauz",gan:"gan kínai",gay:"gajo",gba:"gbaja",gd:"skóciai kelta",gez:"geez",gil:"ikiribati",gl:"gallego",gmh:"közép felső német",gn:"guarani",goh:"ófelső német",gon:"gondi",gor:"gorontalo",got:"gót",grb:"grebó",grc:"ógörög",gsw:"svájci német",gu:"gudzsaráti",guz:"guszii",gv:"man-szigeti",gwi:"gvicsin",ha:"hausza",hai:"haida",hak:"hakka kínai",haw:"hawaii",he:"héber",hi:"hindi",hil:"ilokano",hit:"hittite",hmn:"hmong",ho:"hiri motu",hr:"horvát",hsb:"felső-szorb",hsn:"xiang kínai",ht:"haiti kreol",hu:"magyar",hup:"hupa",hy:"örmény",hz:"herero",ia:"interlingva",iba:"iban",ibb:"ibibio",id:"indonéz",ie:"interlingue",ig:"igbó",ii:"szecsuán ji",ik:"inupiak",ilo:"ilokó",inh:"ingus",io:"idó",is:"izlandi",it:"olasz",iu:"inuktitut",ja:"japán",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"zsidó-perzsa",jrb:"zsidó-arab",jv:"jávai",ka:"grúz",kaa:"kara-kalpak",kab:"kabije",kac:"kacsin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardi",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kabuverdianu",kfo:"koro",kg:"kongo",kha:"kaszi",kho:"kotanéz",khq:"kojra-csíni",ki:"kikuju",kj:"kuanyama",kk:"kazah",kkj:"kakó",kl:"grönlandi",kln:"kalendzsin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"koreai",koi:"komi-permják",kok:"konkani",kos:"kosrei",kpe:"kpelle",kr:"kanuri",krc:"karacsáj-balkár",krl:"karelai",kru:"kuruh",ks:"kasmíri",ksb:"sambala",ksf:"bafia",ksh:"kölsch",ku:"kurd",kum:"kumük",kut:"kutenai",kv:"komi",kw:"korni",ky:"kirgiz",la:"latin",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgi",lez:"lezg",lg:"ganda",li:"limburgi",lkt:"lakota",ln:"lingala",lo:"lao",lol:"mongó",lou:"louisianai kreol",loz:"lozi",lrc:"északi luri",lt:"litván",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"lujia",lv:"lett",mad:"madurai",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makaszar",man:"mandingó",mas:"masai",mde:"maba",mdf:"moksán",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauritiusi kreol",mg:"malgas",mga:"közép ír",mgh:"makua-metó",mgo:"meta’",mh:"marshalli",mi:"maori",mic:"mikmak",min:"minangkabau",mk:"macedón",ml:"malajálam",mn:"mongol",mnc:"mandzsu",mni:"manipuri",moh:"mohawk",mos:"moszi",mr:"maráthi",ms:"maláj",mt:"máltai",mua:"mundang",mus:"krík",mwl:"mirandéz",mwr:"márvári",my:"burmai",mye:"myene",myv:"erzjány",mzn:"mázanderáni",na:"naurui",nan:"min nan kínai",nap:"nápolyi",naq:"nama",nb:"norvég (bokmål)",nd:"északi ndebele",nds:"alsónémet","nds-NL":"alsószász",ne:"nepáli","new":"nevari",ng:"ndonga",nia:"nias",niu:"niuei",nl:"holland","nl-BE":"flamand",nmg:"ngumba",nn:"norvég (nynorsk)",nnh:"ngiemboon",no:"norvég",nog:"nogaj",non:"óskandináv",nqo:"n’kó",nr:"déli ndebele",nso:"északi szeszotó",nus:"nuer",nv:"navahó",nwc:"klasszikus newari",ny:"nyandzsa",nym:"nyamvézi",nyn:"nyankole",nyo:"nyoró",nzi:"nzima",oc:"okszitán",oj:"ojibva",om:"oromo",or:"odia",os:"oszét",osa:"osage",ota:"ottomán török",pa:"pandzsábi",pag:"pangaszinan",pal:"pahlavi",pam:"pampangan",pap:"papiamento",pau:"palaui",pcm:"nigériai pidgin",peo:"óperzsa",phn:"főniciai",pi:"pali",pl:"lengyel",pon:"pohnpei",prg:"porosz",pro:"óprovánszi",ps:"pastu",pt:"portugál","pt-BR":"brazíliai portugál","pt-PT":"európai portugál",qu:"kecsua",quc:"kicse",raj:"radzsasztáni",rap:"rapanui",rar:"rarotongai",rm:"rétoromán",rn:"kirundi",ro:"román","ro-MD":"moldvai",rof:"rombo",rom:"roma",root:"ősi",ru:"orosz",rup:"aromán",rw:"kinyarvanda",rwk:"rwo",sa:"szanszkrit",sad:"szandave",sah:"szaha",sam:"szamaritánus arámi",saq:"szamburu",sas:"sasak",sat:"szantáli",sba:"ngambay",sbp:"szangu",sc:"szardíniai",scn:"szicíliai",sco:"skót",sd:"szindhi",sdh:"dél-kurd",se:"északi számi",see:"szeneka",seh:"szena",sel:"szölkup",ses:"kojra-szenni",sg:"szangó",sga:"óír",sh:"szerbhorvát",shi:"tachelhit",shn:"san",shu:"csádi arab",si:"szingaléz",sid:"szidamó",sk:"szlovák",sl:"szlovén",sm:"szamoai",sma:"déli számi",smj:"lulei számi",smn:"inari számi",sms:"kolta számi",sn:"sona",snk:"szoninke",so:"szomáli",sog:"sogdien",sq:"albán",sr:"szerb",srn:"szranai tongó",srr:"szerer",ss:"sziszuati",ssy:"szahó",st:"déli szeszotó",su:"szundanéz",suk:"szukuma",sus:"szuszu",sux:"sumér",sv:"svéd",sw:"szuahéli","sw-CD":"kongói szuahéli",swb:"comorei",syc:"klasszikus szír",syr:"szír",ta:"tamil",te:"telugu",tem:"temne",teo:"teszó",ter:"terenó",tet:"tetum",tg:"tadzsik",th:"thai",ti:"tigrinya",tig:"tigré",tk:"türkmén",tkl:"tokelaui",tl:"tagalog",tlh:"klingon",tli:"tlingit",tmh:"tamasek",tn:"szecsuáni",to:"tongai",tog:"nyugati nyasza",tpi:"tok pisin",tr:"török",trv:"tarokó",ts:"conga",tsi:"csimsiáni",tt:"tatár",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"szavák",ty:"tahiti",tyv:"tuvai",tzm:"közép-atlaszi tamazigt",udm:"udmurt",ug:"ujgur",uga:"ugariti",uk:"ukrán",umb:"umbundu",ur:"urdu",uz:"üzbég",ve:"venda",vi:"vietnámi",vo:"volapük",vot:"votják",vun:"vunjo",wa:"vallon",wae:"walser",wal:"valamo",war:"varaó",was:"vasó",wbp:"warlpiri",wo:"volof",wuu:"wu kínai",xal:"kalmük",xh:"xhosza",xog:"szoga",yao:"jaó",yap:"japi",yav:"jangben",ybb:"jemba",yi:"jiddis",yo:"joruba",yue:"kantoni",za:"zsuang",zap:"zapoték",zbl:"Bliss jelképrendszer",zen:"zenaga",zgh:"marokkói tamazight",zh:"kínai","zh-Hans":"kínai (egyszerűsített)","zh-Hant":"kínai (hagyományos)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"Cirill",Latn:"Latin",Guru:"Gurmuki",Tfng:"Berber",Vaii:"Vai",Hans:"Egyszerűsített",Hant:"Hagyományos"}},hy:{rtl:false,languageNames:{aa:"աֆարերեն",ab:"աբխազերեն",ace:"աչեհերեն",ach:"աչոլի",ada:"ադանգմերեն",ady:"ադիղերեն",aeb:"թունիսական արաբերեն",af:"աֆրիկաանս",agq:"աղեմ",ain:"այներեն",ak:"աքան",akk:"աքքադերեն",ale:"ալեութերեն",alt:"հարավային ալթայերեն",am:"ամհարերեն",an:"արագոներեն",ang:"հին անգլերեն",anp:"անգիկա",ar:"արաբերեն","ar-001":"արդի ընդհանուր արաբերեն",arc:"արամեերեն",arn:"մապուչի",arp:"արապահո",arq:"ալժիրական արաբերեն",arz:"եգիպտական արաբերեն",as:"ասամերեն",asa:"ասու",ase:"ամերիկյան ժեստերի լեզու",ast:"աստուրերեն",av:"ավարերեն",awa:"ավադհի",ay:"այմարա",az:"ադրբեջաներեն",ba:"բաշկիրերեն",ban:"բալիերեն",bas:"բասաա",be:"բելառուսերեն",bem:"բեմբա",bez:"բենա",bg:"բուլղարերեն",bgn:"արևմտաբելուջիերեն",bho:"բհոպուրի",bi:"բիսլամա",bin:"բինի",bla:"սիկսիկա",bm:"բամբարա",bn:"բենգալերեն",bo:"տիբեթերեն",br:"բրետոներեն",brx:"բոդո",bs:"բոսնիերեն",bss:"աքուզ",bug:"բուգիերեն",byn:"բիլին",ca:"կատալաներեն",ce:"չեչեներեն",ceb:"սեբուերեն",cgg:"չիգա",ch:"չամոռո",chk:"տրուկերեն",chm:"մարի",cho:"չոկտո",chr:"չերոկի",chy:"շայեն",ckb:"սորանի քրդերեն",co:"կորսիկերեն",cop:"ղպտերեն",crh:"ղրիմյան թուրքերեն",crs:"սեյշելյան խառնակերտ ֆրանսերեն",cs:"չեխերեն",cu:"սլավոներեն, եկեղեցական",cv:"չուվաշերեն",cy:"ուելսերեն",da:"դանիերեն",dak:"դակոտա",dar:"դարգիներեն",dav:"թաիթա",de:"գերմաներեն","de-AT":"ավստրիական գերմաներեն","de-CH":"շվեյցարական վերին գերմաներեն",dgr:"դոգրիբ",dje:"զարմա",dsb:"ստորին սորբերեն",dua:"դուալա",dv:"մալդիվերեն",dyo:"ջոլա-ֆոնյի",dz:"ջոնգքհա",dzg:"դազագա",ebu:"էմբու",ee:"էվե",efi:"էֆիկ",egy:"հին եգիպտերեն",eka:"էկաջուկ",el:"հունարեն",en:"անգլերեն","en-AU":"ավստրալիական անգլերեն","en-CA":"կանադական անգլերեն","en-GB":"բրիտանական անգլերեն","en-US":"ամերիկյան անգլերեն",eo:"էսպերանտո",es:"իսպաներեն","es-419":"լատինամերիկյան իսպաներեն","es-ES":"եվրոպական իսպաներեն","es-MX":"մեքսիկական իսպաներեն",et:"էստոներեն",eu:"բասկերեն",ewo:"էվոնդո",fa:"պարսկերեն",ff:"ֆուլահ",fi:"ֆիններեն",fil:"ֆիլիպիներեն",fit:"տորնադելեն ֆիններեն",fj:"ֆիջիերեն",fo:"ֆարյորերեն",fon:"ֆոն",fr:"ֆրանսերեն","fr-CA":"կանադական ֆրանսերեն","fr-CH":"շվեյցարական ֆրանսերեն",fro:"հին ֆրանսերեն",frs:"արևելաֆրիզերեն",fur:"ֆրիուլիերեն",fy:"արևմտաֆրիզերեն",ga:"իռլանդերեն",gaa:"գայերեն",gag:"գագաուզերեն",gbz:"զրադաշտական դարի",gd:"շոտլանդական գաելերեն",gez:"գեեզ",gil:"կիրիբատի",gl:"գալիսերեն",gn:"գուարանի",goh:"հին վերին գերմաներեն",gor:"գորոնտալո",got:"գոթերեն",grc:"հին հունարեն",gsw:"շվեյցարական գերմաներեն",gu:"գուջարաթի",guc:"վայուու",guz:"գուսի",gv:"մեներեն",gwi:"գվիչին",ha:"հաուսա",haw:"հավայիերեն",he:"եբրայերեն",hi:"հինդի",hil:"հիլիգայնոն",hmn:"հմոնգ",hr:"խորվաթերեն",hsb:"վերին սորբերեն",hsn:"սյան չինարեն",ht:"խառնակերտ հայիթերեն",hu:"հունգարերեն",hup:"հուպա",hy:"հայերեն",hz:"հերերո",ia:"ինտերլինգուա",iba:"իբաներեն",ibb:"իբիբիո",id:"ինդոնեզերեն",ie:"ինտերլինգուե",ig:"իգբո",ii:"սիչուան",ilo:"իլոկերեն",inh:"ինգուշերեն",io:"իդո",is:"իսլանդերեն",it:"իտալերեն",iu:"ինուկտիտուտ",ja:"ճապոներեն",jbo:"լոժբան",jgo:"նգոմբա",jmc:"մաշամե",jv:"ճավայերեն",ka:"վրացերեն",kab:"կաբիլերեն",kac:"կաչիներեն",kaj:"ջյու",kam:"կամբա",kbd:"կաբարդերեն",kcg:"տիապ",kde:"մակոնդե",kea:"կաբուվերդերեն",kfo:"կորո",kha:"քասիերեն",khq:"կոյրա չինի",ki:"կիկույու",kj:"կուանյամա",kk:"ղազախերեն",kkj:"կակո",kl:"կալաալիսուտ",kln:"կալենջին",km:"քմերերեն",kmb:"կիմբունդու",kn:"կաննադա",ko:"կորեերեն",koi:"պերմյակ կոմիերեն",kok:"կոնկանի",kpe:"կպելլեերեն",kr:"կանուրի",krc:"կարաչայ-բալկարերեն",krl:"կարելերեն",kru:"կուրուխ",ks:"քաշմիրերեն",ksb:"շամբալա",ksf:"բաֆիա",ksh:"քյոլներեն",ku:"քրդերեն",kum:"կումիկերեն",kv:"կոմիերեն",kw:"կոռներեն",ky:"ղրղզերեն",la:"լատիներեն",lad:"լադինո",lag:"լանգի",lb:"լյուքսեմբուրգերեն",lez:"լեզգիերեն",lg:"գանդա",li:"լիմբուրգերեն",lkt:"լակոտա",ln:"լինգալա",lo:"լաոսերեն",loz:"լոզի",lrc:"հյուսիսային լուրիերեն",lt:"լիտվերեն",lu:"լուբա-կատանգա",lua:"լուբա-լուլուա",lun:"լունդա",luo:"լուո",lus:"միզո",luy:"լույա",lv:"լատվիերեն",mad:"մադուրերեն",mag:"մագահի",mai:"մայթիլի",mak:"մակասարերեն",mas:"մասաի",mdf:"մոկշայերեն",men:"մենդե",mer:"մերու",mfe:"մորիսյեն",mg:"մալգաշերեն",mgh:"մաքուա-մետտո",mgo:"մետա",mh:"մարշալերեն",mi:"մաորի",mic:"միկմակ",min:"մինանգկաբաու",mk:"մակեդոներեն",ml:"մալայալամ",mn:"մոնղոլերեն",mni:"մանիպուրի",moh:"մոհավք",mos:"մոսսի",mr:"մարաթի",mrj:"արևմտամարիերեն",ms:"մալայերեն",mt:"մալթայերեն",mua:"մունդանգ",mus:"կրիկ",mwl:"միրանդերեն",my:"բիրմայերեն",myv:"էրզյա",mzn:"մազանդարաներեն",na:"նաուրու",nap:"նեապոլերեն",naq:"նամա",nb:"գրքային նորվեգերեն",nd:"հյուսիսային նդեբելե",nds:"ստորին գերմաներեն","nds-NL":"ստորին սաքսոներեն",ne:"նեպալերեն","new":"նեվարերեն",ng:"նդոնգա",nia:"նիասերեն",niu:"նիուերեն",nl:"հոլանդերեն","nl-BE":"ֆլամանդերեն",nmg:"կվասիո",nn:"նոր նորվեգերեն",nnh:"նգիեմբուն",no:"նորվեգերեն",nog:"նոգայերեն",non:"հին նորվեգերեն",nqo:"նկո",nr:"հարավային նդեբելե",nso:"հյուսիսային սոթո",nus:"նուեր",nv:"նավախո",ny:"նյանջա",nyn:"նյանկոլե",oc:"օքսիտաներեն",oj:"օջիբվա",om:"օրոմո",or:"օրիյա",os:"օսերեն",osa:"օսեյջ",ota:"օսմաներեն",pa:"փենջաբերեն",pag:"պանգասինաներեն",pal:"պահլավերեն",pam:"պամպանգաերեն",pap:"պապյամենտո",pau:"պալաուերեն",pcd:"պիկարդերեն",pcm:"նիգերյան կրեոլերեն",pdc:"փենսիլվանական գերմաներեն",pdt:"պլատագերմաներեն",peo:"հին պարսկերեն",pfl:"պալատինյան գերմաներեն",phn:"փյունիկերեն",pi:"պալի",pl:"լեհերեն",pms:"պիեմոնտերեն",pnt:"պոնտերեն",pon:"պոնպեերեն",prg:"պրուսերեն",pro:"հին պրովանսերեն",ps:"փուշթու",pt:"պորտուգալերեն","pt-BR":"բրազիլական պորտուգալերեն","pt-PT":"եվրոպական պորտուգալերեն",qu:"կեչուա",quc:"քիչե",raj:"ռաջաստաներեն",rap:"ռապանուի",rar:"ռարոտոնգաներեն",rgn:"ռոմանիոլերեն",rif:"ռիֆերեն",rm:"ռոմանշերեն",rn:"ռունդի",ro:"ռումիներեն","ro-MD":"մոլդովերեն",rof:"ռոմբո",rom:"ռոմաներեն",root:"ռուտերեն",rtm:"ռոտուման",ru:"ռուսերեն",rue:"ռուսիներեն",rug:"ռովիանա",rup:"արոմաներեն",rw:"կինյառուանդա",rwk:"ռվա",sa:"սանսկրիտ",sad:"սանդավե",sah:"յակուտերեն",saq:"սամբուրու",sat:"սանտալի",sba:"նգամբայ",sbp:"սանգու",sc:"սարդիներեն",scn:"սիցիլիերեն",sco:"շոտլանդերեն",sd:"սինդհի",sdh:"հարավային քրդերեն",se:"հյուսիսային սաամի",seh:"սենա",ses:"կոյրաբորո սեննի",sg:"սանգո",sga:"հին իռլանդերեն",sh:"սերբա-խորվաթերեն",shi:"տաշելհիթ",shn:"շաներեն",si:"սինհալերեն",sk:"սլովակերեն",sl:"սլովեներեն",sm:"սամոաերեն",sma:"հարավային սաամի",smj:"լուլե սաամի",smn:"ինարի սաամի",sms:"սկոլտ սաամի",sn:"շոնա",snk:"սոնինկե",so:"սոմալիերեն",sq:"ալբաներեն",sr:"սերբերեն",srn:"սրանան տոնգո",ss:"սվազերեն",ssy:"սահոերեն",st:"հարավային սոթո",su:"սունդաներեն",suk:"սուկումա",sv:"շվեդերեն",sw:"սուահիլի","sw-CD":"կոնգոյի սուահիլի",swb:"կոմորերեն",syr:"ասորերեն",ta:"թամիլերեն",tcy:"տուլու",te:"թելուգու",tem:"տեմնե",teo:"տեսո",ter:"տերենո",tet:"տետում",tg:"տաջիկերեն",th:"թայերեն",ti:"տիգրինյա",tig:"տիգրե",tiv:"տիվերեն",tk:"թուրքմեներեն",tkl:"տոկելաու",tkr:"ցախուր",tl:"տագալերեն",tlh:"կլինգոն",tli:"տլինգիտ",tly:"թալիշերեն",tmh:"տամաշեկ",tn:"ցվանա",to:"տոնգերեն",tpi:"տոկ փիսին",tr:"թուրքերեն",tru:"տուրոյո",trv:"տարոկո",ts:"ցոնգա",tsd:"ցակոներեն",tsi:"ցիմշյան",tt:"թաթարերեն",tum:"տումբուկա",tvl:"թուվալուերեն",tw:"տուի",twq:"տասավաք",ty:"թաիտերեն",tyv:"տուվերեն",tzm:"կենտրոնատլասյան թամազիղտ",udm:"ուդմուրտերեն",ug:"ույղուրերեն",uga:"ուգարիտերեն",uk:"ուկրաիներեն",umb:"ումբունդու",ur:"ուրդու",uz:"ուզբեկերեն",vai:"վաի",ve:"վենդա",vec:"վենետերեն",vep:"վեպսերեն",vi:"վիետնամերեն",vls:"արևմտաֆլամանդերեն",vo:"վոլապյուկ",vot:"վոդերեն",vro:"վորո",vun:"վունջո",wa:"վալոներեն",wae:"վալսերեն",wal:"վոլայտա",war:"վարայերեն",was:"վաշո",wbp:"վարլպիրի",wo:"վոլոֆ",wuu:"վու չինարեն",xal:"կալմիկերեն",xh:"քոսա",xog:"սոգա",yao:"յաո",yap:"յափերեն",yav:"յանգբեն",ybb:"եմբա",yi:"իդիշ",yo:"յորուբա",yue:"կանտոներեն",za:"ժուանգ",zap:"սապոտեկերեն",zea:"զեյլանդերեն",zen:"զենագա",zgh:"ընդհանուր մարոկյան թամազիղտ",zh:"չինարեն","zh-Hans":"չինարեն (պարզեցված չինական)","zh-Hant":"չինարեն (ավանդական չինական)",zu:"զուլուերեն",zun:"զունիերեն",zza:"զազաերեն"},scriptNames:{Cyrl:"կյուրեղագիր",Latn:"լատինական",Arab:"արաբական",Guru:"գուրմուխի",Hans:"պարզեցված չինական",Hant:"ավանդական չինական"}},ia:{rtl:false,languageNames:{aa:"afar",ab:"abkhazo",ace:"acehnese",ada:"adangme",ady:"adygeano",af:"afrikaans",agq:"aghem",ain:"ainu",ak:"akan",ale:"aleuto",alt:"altai del sud",am:"amharico",an:"aragonese",anp:"angika",ar:"arabe","ar-001":"arabe standard moderne",arn:"mapuche",arp:"arapaho",as:"assamese",asa:"asu",ast:"asturiano",av:"avaro",awa:"awadhi",ay:"aymara",az:"azerbaidzhano",ba:"bashkir",ban:"balinese",bas:"basaa",be:"bielorusso",bem:"bemba",bez:"bena",bg:"bulgaro",bho:"bhojpuri",bi:"bislama",bin:"bini",bla:"siksika",bm:"bambara",bn:"bengalese",bo:"tibetano",br:"breton",brx:"bodo",bs:"bosniaco",bug:"buginese",byn:"blin",ca:"catalano",ce:"checheno",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chk:"chuukese",chm:"mari",cho:"choctaw",chr:"cherokee",chy:"cheyenne",ckb:"kurdo central",co:"corso",crs:"creolo seychellese",cs:"checo",cu:"slavo ecclesiastic",cv:"chuvash",cy:"gallese",da:"danese",dak:"dakota",dar:"dargwa",dav:"taita",de:"germano","de-AT":"germano austriac","de-CH":"alte germano suisse",dgr:"dogrib",dje:"zarma",dsb:"basse sorabo",dua:"duala",dv:"divehi",dyo:"jola-fonyi",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",eka:"ekajuk",el:"greco",en:"anglese","en-AU":"anglese australian","en-CA":"anglese canadian","en-GB":"anglese britannic","en-US":"anglese american",eo:"esperanto",es:"espaniol","es-419":"espaniol latinoamerican","es-ES":"espaniol europee","es-MX":"espaniol mexican",et:"estoniano",eu:"basco",ewo:"ewondo",fa:"persa",ff:"fula",fi:"finnese",fil:"filipino",fj:"fijiano",fo:"feroese",fr:"francese","fr-CA":"francese canadian","fr-CH":"francese suisse",fur:"friulano",fy:"frison occidental",ga:"irlandese",gaa:"ga",gd:"gaelico scotese",gez:"ge’ez",gil:"gilbertese",gl:"galleco",gn:"guarani",gor:"gorontalo",gsw:"germano suisse",gu:"gujarati",guz:"gusii",gv:"mannese",gwi:"gwich’in",ha:"hausa",haw:"hawaiano",he:"hebreo",hi:"hindi",hil:"hiligaynon",hmn:"hmong",hr:"croato",hsb:"alte sorabo",ht:"creolo haitian",hu:"hungaro",hup:"hupa",hy:"armeniano",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesiano",ig:"igbo",ii:"yi de Sichuan",ilo:"ilocano",inh:"ingush",io:"ido",is:"islandese",it:"italiano",iu:"inuktitut",ja:"japonese",jbo:"lojban",jgo:"ngomba",jmc:"machame",jv:"javanese",ka:"georgiano",kab:"kabylo",kac:"kachin",kaj:"jju",kam:"kamba",kbd:"cabardiano",kcg:"tyap",kde:"makonde",kea:"capoverdiano",kfo:"koro",kha:"khasi",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kazakh",kkj:"kako",kl:"groenlandese",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"coreano",kok:"konkani",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkaro",krl:"careliano",kru:"kurukh",ks:"kashmiri",ksb:"shambala",ksf:"bafia",ksh:"coloniese",ku:"kurdo",kum:"kumyko",kv:"komi",kw:"cornico",ky:"kirghizo",la:"latino",lad:"ladino",lag:"langi",lb:"luxemburgese",lez:"lezghiano",lg:"luganda",li:"limburgese",lkt:"lakota",ln:"lingala",lo:"laotiano",loz:"lozi",lrc:"luri del nord",lt:"lithuano",lu:"luba-katanga",lua:"luba-lulua",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letton",mad:"madurese",mag:"magahi",mai:"maithili",mak:"macassarese",mas:"masai",mdf:"moksha",men:"mende",mer:"meri",mfe:"creolo mauritian",mg:"malgache",mgh:"makhuwa-meetto",mgo:"metaʼ",mh:"marshallese",mi:"maori",mic:"micmac",min:"minangkabau",mk:"macedone",ml:"malayalam",mn:"mongol",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",ms:"malay",mt:"maltese",mua:"mundang",mus:"creek",mwl:"mirandese",my:"birmano",myv:"erzya",mzn:"mazanderani",na:"nauru",nap:"napolitano",naq:"nama",nb:"norvegiano bokmål",nd:"ndebele del nord","nds-NL":"nds (Nederlandia)",ne:"nepalese","new":"newari",ng:"ndonga",nia:"nias",niu:"nieuano",nl:"nederlandese","nl-BE":"flamingo",nmg:"kwasio",nn:"norvegiano nynorsk",nnh:"ngiemboon",nog:"nogai",nqo:"n’ko",nr:"ndebele del sud",nso:"sotho del nord",nus:"nuer",nv:"navajo",ny:"nyanja",nyn:"nyankole",oc:"occitano",om:"oromo",or:"oriya",os:"osseto",pa:"punjabi",pag:"pangasinan",pam:"pampanga",pap:"papiamento",pau:"palauano",pcm:"pidgin nigerian",pl:"polonese",prg:"prussiano",ps:"pashto",pt:"portugese","pt-BR":"portugese de Brasil","pt-PT":"portugese de Portugal",qu:"quechua",quc:"kʼicheʼ",rap:"rapanui",rar:"rarotongano",rm:"romanche",rn:"rundi",ro:"romaniano","ro-MD":"moldavo",rof:"rombo",root:"radice",ru:"russo",rup:"aromaniano",rw:"kinyarwanda",rwk:"rwa",sa:"sanscrito",sad:"sandawe",sah:"yakuto",saq:"samburu",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"scotese",sd:"sindhi",se:"sami del nord",seh:"sena",ses:"koyraboro senni",sg:"sango",shi:"tachelhit",shn:"shan",si:"cingalese",sk:"slovaco",sl:"sloveno",sm:"samoano",sma:"sami del sud",smj:"sami de Lule",smn:"sami de Inari",sms:"sami skolt",sn:"shona",snk:"soninke",so:"somali",sq:"albanese",sr:"serbo",srn:"sranan tongo",ss:"swati",ssy:"saho",st:"sotho del sud",su:"sundanese",suk:"sukuma",sv:"svedese",sw:"swahili","sw-CD":"swahili del Congo",swb:"comoriano",syr:"syriaco",ta:"tamil",te:"telugu",tem:"temne",teo:"teso",tet:"tetum",tg:"tajiko",th:"thai",ti:"tigrinya",tig:"tigre",tk:"turkmeno",tlh:"klingon",tn:"tswana",to:"tongano",tpi:"tok pisin",tr:"turco",trv:"taroko",ts:"tsonga",tt:"tataro",tum:"tumbuka",tvl:"tuvaluano",twq:"tasawaq",ty:"tahitiano",tyv:"tuvano",tzm:"tamazight del Atlas Central",udm:"udmurto",ug:"uighur",uk:"ukrainiano",umb:"umbundu",ur:"urdu",uz:"uzbeko",ve:"venda",vi:"vietnamese",vo:"volapük",vun:"vunjo",wa:"wallon",wae:"walser",wal:"wolaytta",war:"waray",wo:"wolof",xal:"calmuco",xh:"xhosa",xog:"soga",yav:"yangben",ybb:"yemba",yi:"yiddish",yo:"yoruba",yue:"cantonese",zgh:"tamazight marocchin standard",zh:"chinese","zh-Hans":"chinese (simplificate)","zh-Hant":"chinese (traditional)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"cyrillic",Latn:"latin",Arab:"arabe",Guru:"gurmukhi",Hans:"simplificate",Hant:"traditional"}},id:{rtl:false,languageNames:{aa:"Afar",ab:"Abkhaz",ace:"Aceh",ach:"Acoli",ada:"Adangme",ady:"Adygei",ae:"Avesta",aeb:"Arab Tunisia",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Ainu",ak:"Akan",akk:"Akkadia",akz:"Alabama",ale:"Aleut",alt:"Altai Selatan",am:"Amharik",an:"Aragon",ang:"Inggris Kuno",anp:"Angika",ar:"Arab","ar-001":"Arab Standar Modern",arc:"Aram",arn:"Mapuche",arp:"Arapaho",arq:"Arab Aljazair",ars:"Arab Najdi",arw:"Arawak",ary:"Arab Maroko",arz:"Arab Mesir",as:"Assam",asa:"Asu",ase:"Bahasa Isyarat Amerika",ast:"Asturia",av:"Avar",awa:"Awadhi",ay:"Aymara",az:"Azerbaijani",ba:"Bashkir",bal:"Baluchi",ban:"Bali",bar:"Bavaria",bas:"Basa",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Belarusia",bej:"Beja",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bg:"Bulgaria",bgn:"Balochi Barat",bho:"Bhojpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Bengali",bo:"Tibet",br:"Breton",bra:"Braj",brx:"Bodo",bs:"Bosnia",bss:"Akoose",bua:"Buriat",bug:"Bugis",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Katalan",cad:"Kado",car:"Karib",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Kiga",ch:"Chamorro",chb:"Chibcha",chg:"Chagatai",chk:"Chuuke",chm:"Mari",chn:"Jargon Chinook",cho:"Koktaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",ckb:"Kurdi Sorani",co:"Korsika",cop:"Koptik",cr:"Kree",crh:"Tatar Krimea",crs:"Seselwa Kreol Prancis",cs:"Cheska",csb:"Kashubia",cu:"Bahasa Gereja Slavonia",cv:"Chuvash",cy:"Welsh",da:"Dansk",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"Jerman","de-AT":"Jerman (Austria)","de-CH":"Jerman Tinggi (Swiss)",del:"Delaware",den:"Slave",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Sorbia Hilir",dua:"Duala",dum:"Belanda Abad Pertengahan",dv:"Divehi",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egy:"Mesir Kuno",eka:"Ekajuk",el:"Yunani",elx:"Elam",en:"Inggris","en-AU":"Inggris (Australia)","en-CA":"Inggris (Kanada)","en-GB":"Inggris (Inggris)","en-US":"Inggris (Amerika Serikat)",enm:"Inggris Abad Pertengahan",eo:"Esperanto",es:"Spanyol","es-419":"Spanyol (Amerika Latin)","es-ES":"Spanyol (Eropa)","es-MX":"Spanyol (Meksiko)",et:"Esti",eu:"Basque",ewo:"Ewondo",fa:"Persia",fan:"Fang",fat:"Fanti",ff:"Fula",fi:"Suomi",fil:"Filipino",fj:"Fiji",fo:"Faroe",fon:"Fon",fr:"Prancis","fr-CA":"Perancis (Kanada)","fr-CH":"Perancis (Swiss)",frc:"Prancis Cajun",frm:"Prancis Abad Pertengahan",fro:"Prancis Kuno",frp:"Arpitan",frr:"Frisia Utara",frs:"Frisia Timur",fur:"Friuli",fy:"Frisia Barat",ga:"Irlandia",gaa:"Ga",gag:"Gagauz",gay:"Gayo",gba:"Gbaya",gd:"Gaelik Skotlandia",gez:"Geez",gil:"Gilbert",gl:"Galisia",glk:"Gilaki",gmh:"Jerman Abad Pertengahan",gn:"Guarani",goh:"Jerman Kuno",gon:"Gondi",gor:"Gorontalo",got:"Gotik",grb:"Grebo",grc:"Yunani Kuno",gsw:"Jerman (Swiss)",gu:"Gujarat",guz:"Gusii",gv:"Manx",gwi:"Gwich’in",ha:"Hausa",hai:"Haida",haw:"Hawaii",he:"Ibrani",hi:"Hindi",hif:"Hindi Fiji",hil:"Hiligaynon",hit:"Hitit",hmn:"Hmong",ho:"Hiri Motu",hr:"Kroasia",hsb:"Sorbia Hulu",ht:"Kreol Haiti",hu:"Hungaria",hup:"Hupa",hy:"Armenia",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesia",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ik:"Inupiak",ilo:"Iloko",inh:"Ingushetia",io:"Ido",is:"Islandia",it:"Italia",iu:"Inuktitut",ja:"Jepang",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Ibrani-Persia",jrb:"Ibrani-Arab",jv:"Jawa",ka:"Georgia",kaa:"Kara-Kalpak",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardi",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongo",kha:"Khasi",kho:"Khotan",khq:"Koyra Chiini",ki:"Kikuyu",kj:"Kuanyama",kk:"Kazakh",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Korea",koi:"Komi-Permyak",kok:"Konkani",kos:"Kosre",kpe:"Kpelle",kr:"Kanuri",krc:"Karachai Balkar",kri:"Krio",krl:"Karelia",kru:"Kuruk",ks:"Kashmir",ksb:"Shambala",ksf:"Bafia",ksh:"Dialek Kolsch",ku:"Kurdi",kum:"Kumyk",kut:"Kutenai",kv:"Komi",kw:"Kornish",ky:"Kirgiz",la:"Latin",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luksemburg",lez:"Lezghia",lg:"Ganda",li:"Limburgia",lij:"Liguria",lkt:"Lakota",ln:"Lingala",lo:"Lao",lol:"Mongo",lou:"Kreol Louisiana",loz:"Lozi",lrc:"Luri Utara",lt:"Lituavi",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Latvi",lzz:"Laz",mad:"Madura",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",man:"Mandingo",mas:"Masai",mde:"Maba",mdf:"Moksha",mdr:"Mandar",men:"Mende",mer:"Meru",mfe:"Morisien",mg:"Malagasi",mga:"Irlandia Abad Pertengahan",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marshall",mi:"Maori",mic:"Mikmak",min:"Minangkabau",mk:"Makedonia",ml:"Malayalam",mn:"Mongolia",mnc:"Manchuria",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",ms:"Melayu",mt:"Malta",mua:"Mundang",mus:"Bahasa Muskogee",mwl:"Miranda",mwr:"Marwari",mwv:"Mentawai",my:"Burma",mye:"Myene",myv:"Eryza",mzn:"Mazanderani",na:"Nauru",nap:"Neapolitan",naq:"Nama",nb:"Bokmål Norwegia",nd:"Ndebele Utara",nds:"Jerman Rendah","nds-NL":"Jerman Rendah (Belanda)",ne:"Nepali","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niuea",nl:"Belanda","nl-BE":"Belanda (Belgia)",nmg:"Kwasio",nn:"Nynorsk Norwegia",nnh:"Ngiemboon",no:"Norwegia",nog:"Nogai",non:"Norse Kuno",nqo:"N’Ko",nr:"Ndebele Selatan",nso:"Sotho Utara",nus:"Nuer",nv:"Navajo",nwc:"Newari Klasik",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Ositania",oj:"Ojibwa",om:"Oromo",or:"Oriya",os:"Ossetia",osa:"Osage",ota:"Turki Osmani",pa:"Punjabi",pag:"Pangasina",pal:"Pahlevi",pam:"Pampanga",pap:"Papiamento",pau:"Palau",pcm:"Pidgin Nigeria",pdc:"Jerman Pennsylvania",peo:"Persia Kuno",phn:"Funisia",pi:"Pali",pl:"Polski",pon:"Pohnpeia",prg:"Prusia",pro:"Provencal Lama",ps:"Pashto",pt:"Portugis","pt-BR":"Portugis (Brasil)","pt-PT":"Portugis (Eropa)",qu:"Quechua",quc:"Kʼicheʼ",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotonga",rm:"Reto-Roman",rn:"Rundi",ro:"Rumania","ro-MD":"Moldavia",rof:"Rombo",rom:"Romani",root:"Root",rtm:"Rotuma",ru:"Rusia",rup:"Aromania",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskerta",sad:"Sandawe",sah:"Sakha",sam:"Aram Samaria",saq:"Samburu",sas:"Sasak",sat:"Santali",sba:"Ngambai",sbp:"Sangu",sc:"Sardinia",scn:"Sisilia",sco:"Skotlandia",sd:"Sindhi",sdh:"Kurdi Selatan",se:"Sami Utara",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkup",ses:"Koyraboro Senni",sg:"Sango",sga:"Irlandia Kuno",sh:"Serbo-Kroasia",shi:"Tachelhit",shn:"Shan",shu:"Arab Suwa",si:"Sinhala",sid:"Sidamo",sk:"Slovak",sl:"Sloven",sli:"Silesia Rendah",sly:"Selayar",sm:"Samoa",sma:"Sami Selatan",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somalia",sog:"Sogdien",sq:"Albania",sr:"Serbia",srn:"Sranan Tongo",srr:"Serer",ss:"Swati",ssy:"Saho",st:"Sotho Selatan",su:"Sunda",suk:"Sukuma",sus:"Susu",sux:"Sumeria",sv:"Swedia",sw:"Swahili","sw-CD":"Swahili (Kongo)",swb:"Komoria",syc:"Suriah Klasik",syr:"Suriah",szl:"Silesia",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetun",tg:"Tajik",th:"Thai",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmen",tkl:"Tokelau",tl:"Tagalog",tlh:"Klingon",tli:"Tlingit",tmh:"Tamashek",tn:"Tswana",to:"Tonga",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Turki",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsi:"Tsimshia",tt:"Tatar",ttt:"Tat Muslim",tum:"Tumbuka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahiti",tyv:"Tuvinia",tzm:"Tamazight Maroko Tengah",udm:"Udmurt",ug:"Uyghur",uga:"Ugarit",uk:"Ukraina",umb:"Umbundu",ur:"Urdu",uz:"Uzbek",vai:"Vai",ve:"Venda",vec:"Venesia",vi:"Vietnam",vo:"Volapuk",vot:"Votia",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Walamo",war:"Warai",was:"Washo",wbp:"Warlpiri",wo:"Wolof",xal:"Kalmuk",xh:"Xhosa",xog:"Soga",yao:"Yao",yap:"Yapois",yav:"Yangben",ybb:"Yemba",yi:"Yiddish",yo:"Yoruba",yue:"Kanton",za:"Zhuang",zap:"Zapotek",zbl:"Blissymbol",zen:"Zenaga",zgh:"Tamazight Maroko Standar",zh:"Tionghoa","zh-Hans":"Tionghoa (Sederhana)","zh-Hant":"Tionghoa (Tradisional)",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Sirilik",Latn:"Latin",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Sederhana",Hant:"Tradisional"}},is:{rtl:false,languageNames:{aa:"afár",ab:"abkasíska",ace:"akkíska",ach:"acoli",ada:"adangme",ady:"adýge",ae:"avestíska",af:"afríkanska",afh:"afríhílí",agq:"aghem",ain:"aínu (Japan)",ak:"akan",akk:"akkadíska",ale:"aleúska",alt:"suðuraltaíska",am:"amharíska",an:"aragonska",ang:"fornenska",anp:"angíka",ar:"arabíska","ar-001":"stöðluð nútímaarabíska",arc:"arameíska",arn:"mapuche",arp:"arapahó",arw:"aravakska",as:"assamska",asa:"asu",ast:"astúríska",av:"avaríska",awa:"avadí",ay:"aímara",az:"aserska",ba:"baskír",bal:"balúkí",ban:"balíska",bas:"basa",bax:"bamun",be:"hvítrússneska",bej:"beja",bem:"bemba",bez:"bena",bg:"búlgarska",bgn:"vesturbalotsí",bho:"bojpúrí",bi:"bíslama",bik:"bíkol",bin:"bíní",bla:"siksika",bm:"bambara",bn:"bengalska",bo:"tíbeska",br:"bretónska",bra:"braí",brx:"bódó",bs:"bosníska",bss:"bakossi",bua:"búríat",bug:"búgíska",byn:"blín",ca:"katalónska",cad:"kaddó",car:"karíbamál",cay:"kajúga",cch:"atsam",ccp:"tsjakma",ce:"tsjetsjenska",ceb:"kebúanó",cgg:"kíga",ch:"kamorró",chb:"síbsja",chg:"sjagataí",chk:"sjúkíska",chm:"marí",chn:"sínúk",cho:"sjoktá",chp:"sípevíska",chr:"Cherokee-mál",chy:"sjeyen",ckb:"sorani-kúrdíska",co:"korsíska",cop:"koptíska",cr:"krí",crh:"krímtyrkneska",crs:"seychelles-kreólska",cs:"tékkneska",csb:"kasúbíska",cu:"kirkjuslavneska",cv:"sjúvas",cy:"velska",da:"danska",dak:"dakóta",dar:"dargva",dav:"taíta",de:"þýska","de-AT":"austurrísk þýska","de-CH":"svissnesk háþýska",del:"delaver",den:"slavneska",dgr:"dogríb",din:"dinka",dje:"zarma",doi:"dogrí",dsb:"lágsorbneska",dua:"dúala",dum:"miðhollenska",dv:"dívehí",dyo:"jola-fonyi",dyu:"djúla",dz:"dsongka",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efík",egy:"fornegypska",eka:"ekajúk",el:"gríska",elx:"elamít",en:"enska","en-AU":"áströlsk enska","en-CA":"kanadísk enska","en-GB":"bresk enska","en-US":"bandarísk enska",enm:"miðenska",eo:"esperantó",es:"spænska","es-419":"rómönsk-amerísk spænska","es-ES":"evrópsk spænska","es-MX":"mexíkósk spænska",et:"eistneska",eu:"baskneska",ewo:"evondó",fa:"persneska",fan:"fang",fat:"fantí",ff:"fúla",fi:"finnska",fil:"filippseyska",fj:"fídjeyska",fo:"færeyska",fon:"fón",fr:"franska","fr-CA":"kanadísk franska","fr-CH":"svissnesk franska",frc:"cajun-franska",frm:"miðfranska",fro:"fornfranska",frr:"norðurfrísneska",frs:"austurfrísneska",fur:"fríúlska",fy:"vesturfrísneska",ga:"írska",gaa:"ga",gag:"gagás",gay:"gajó",gba:"gbaja",gd:"skosk gelíska",gez:"gís",gil:"gilberska",gl:"galíanska",gmh:"miðháþýska",gn:"gvaraní",goh:"fornháþýska",gon:"gondí",gor:"gorontaló",got:"gotneska",grb:"gerbó",grc:"forngríska",gsw:"svissnesk þýska",gu:"gújaratí",guz:"gusii",gv:"manska",gwi:"gvísín",ha:"hása",hai:"haída",haw:"havaíska",he:"hebreska",hi:"hindí",hil:"híligaínon",hit:"hettitíska",hmn:"hmong",ho:"hírímótú",hr:"króatíska",hsb:"hásorbneska",ht:"haítíska",hu:"ungverska",hup:"húpa",hy:"armenska",hz:"hereró",ia:"alþjóðatunga",iba:"íban",ibb:"ibibio",id:"indónesíska",ie:"interlingve",ig:"ígbó",ii:"sísúanjí",ik:"ínúpíak",ilo:"ílokó",inh:"ingús",io:"ídó",is:"íslenska",it:"ítalska",iu:"inúktitút",ja:"japanska",jbo:"lojban",jgo:"ngomba",jmc:"masjáme",jpr:"gyðingapersneska",jrb:"gyðingaarabíska",jv:"javanska",ka:"georgíska",kaa:"karakalpak",kab:"kabíle",kac:"kasín",kaj:"jju",kam:"kamba",kaw:"kaví",kbd:"kabardíska",kcg:"tyap",kde:"makonde",kea:"grænhöfðeyska",kfo:"koro",kg:"kongóska",kha:"kasí",kho:"kotaska",khq:"koyra chiini",ki:"kíkújú",kj:"kúanjama",kk:"kasakska",kkj:"kako",kl:"grænlenska",kln:"kalenjin",km:"kmer",kmb:"kimbúndú",kn:"kannada",ko:"kóreska",koi:"kómí-permyak",kok:"konkaní",kos:"kosraska",kpe:"kpelle",kr:"kanúrí",krc:"karasaíbalkar",krl:"karélska",kru:"kúrúk",ks:"kasmírska",ksb:"sjambala",ksf:"bafía",ksh:"kölníska",ku:"kúrdíska",kum:"kúmík",kut:"kútenaí",kv:"komíska",kw:"kornbreska",ky:"kirgiska",la:"latína",lad:"ladínska",lag:"langí",lah:"landa",lam:"lamba",lb:"lúxemborgíska",lez:"lesgíska",lg:"ganda",li:"limbúrgíska",lkt:"lakóta",ln:"lingala",lo:"laó",lol:"mongó",lou:"kreólska (Louisiana)",loz:"lozi",lrc:"norðurlúrí",lt:"litháíska",lu:"lúbakatanga",lua:"luba-lulua",lui:"lúisenó",lun:"lúnda",luo:"lúó",lus:"lúsaí",luy:"luyia",lv:"lettneska",mad:"madúrska",mag:"magahí",mai:"maítílí",mak:"makasar",man:"mandingó",mas:"masaí",mdf:"moksa",mdr:"mandar",men:"mende",mer:"merú",mfe:"máritíska",mg:"malagasíska",mga:"miðírska",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshallska",mi:"maorí",mic:"mikmak",min:"mínangkabá",mk:"makedónska",ml:"malajalam",mn:"mongólska",mnc:"mansjú",mni:"manípúrí",moh:"móhíska",mos:"mossí",mr:"maratí",ms:"malaíska",mt:"maltneska",mua:"mundang",mus:"krík",mwl:"mirandesíska",mwr:"marvarí",my:"burmneska",myv:"ersja",mzn:"masanderaní",na:"nárúska",nap:"napólíska",naq:"nama",nb:"norskt bókmál",nd:"norður-ndebele",nds:"lágþýska; lágsaxneska","nds-NL":"lágsaxneska",ne:"nepalska","new":"nevarí",ng:"ndonga",nia:"nías",niu:"níveska",nl:"hollenska","nl-BE":"flæmska",nmg:"kwasio",nn:"nýnorska",nnh:"ngiemboon",no:"norska",nog:"nógaí",non:"norræna",nqo:"n’ko",nr:"suðurndebele",nso:"norðursótó",nus:"núer",nv:"navahó",nwc:"klassísk nevaríska",ny:"nýanja",nym:"njamvesí",nyn:"nyankole",nyo:"njóró",nzi:"nsíma",oc:"oksítaníska",oj:"ojibva",om:"oromo",or:"óría",os:"ossetíska",osa:"ósage",ota:"tyrkneska, ottóman",pa:"púnjabí",pag:"pangasínmál",pal:"palaví",pam:"pampanga",pap:"papíamentó",pau:"paláska",pcm:"nígerískt pidgin",peo:"fornpersneska",phn:"fönikíska",pi:"palí",pl:"pólska",pon:"ponpeiska",prg:"prússneska",pro:"fornpróvensalska",ps:"pastú",pt:"portúgalska","pt-BR":"brasílísk portúgalska","pt-PT":"evrópsk portúgalska",qu:"kvesjúa",quc:"kiche",raj:"rajastaní",rap:"rapanúí",rar:"rarótongska",rm:"rómanska",rn:"rúndí",ro:"rúmenska","ro-MD":"moldóvska",rof:"rombó",rom:"romaní",root:"rót",ru:"rússneska",rup:"arúmenska",rw:"kínjarvanda",rwk:"rúa",sa:"sanskrít",sad:"sandave",sah:"jakút",sam:"samversk arameíska",saq:"sambúrú",sas:"sasak",sat:"santalí",sba:"ngambay",sbp:"sangú",sc:"sardínska",scn:"sikileyska",sco:"skoska",sd:"sindí",sdh:"suðurkúrdíska",se:"norðursamíska",seh:"sena",sel:"selkúp",ses:"koíraboró-senní",sg:"sangó",sga:"fornírska",sh:"serbókróatíska",shi:"tachelhit",shn:"sjan",si:"singalíska",sid:"sídamó",sk:"slóvakíska",sl:"slóvenska",sm:"samóska",sma:"suðursamíska",smj:"lúlesamíska",smn:"enaresamíska",sms:"skoltesamíska",sn:"shona",snk:"sóninke",so:"sómalska",sog:"sogdíen",sq:"albanska",sr:"serbneska",srn:"sranan tongo",srr:"serer",ss:"svatí",ssy:"saho",st:"suðursótó",su:"súndanska",suk:"súkúma",sus:"súsú",sux:"súmerska",sv:"sænska",sw:"svahílí","sw-CD":"kongósvahílí",swb:"shimaoríska",syc:"klassísk sýrlenska",syr:"sýrlenska",ta:"tamílska",te:"telúgú",tem:"tímne",teo:"tesó",ter:"terenó",tet:"tetúm",tg:"tadsjikska",th:"taílenska",ti:"tígrinja",tig:"tígre",tiv:"tív",tk:"túrkmenska",tkl:"tókeláska",tl:"tagalog",tlh:"klingonska",tli:"tlingit",tmh:"tamasjek",tn:"tsúana",to:"tongverska",tog:"tongverska (nyasa)",tpi:"tokpisin",tr:"tyrkneska",trv:"tarókó",ts:"tsonga",tsi:"tsimsíska",tt:"tatarska",tum:"túmbúka",tvl:"túvalúska",tw:"tví",twq:"tasawaq",ty:"tahítíska",tyv:"túvínska",tzm:"tamazight",udm:"údmúrt",ug:"úígúr",uga:"úgarítíska",uk:"úkraínska",umb:"úmbúndú",ur:"úrdú",uz:"úsbekska",vai:"vaí",ve:"venda",vi:"víetnamska",vo:"volapyk",vot:"votíska",vun:"vunjó",wa:"vallónska",wae:"valser",wal:"volayatta",war:"varaí",was:"vasjó",wbp:"varlpiri",wo:"volof",xal:"kalmúkska",xh:"sósa",xog:"sóga",yao:"jaó",yap:"japíska",yav:"yangben",ybb:"yemba",yi:"jiddíska",yo:"jórúba",yue:"kantónska",za:"súang",zap:"sapótek",zbl:"blisstákn",zen:"senaga",zgh:"staðlað marokkóskt tamazight",zh:"kínverska","zh-Hans":"mandarín (einfölduð)","zh-Hant":"mandarín (hefðbundin)",zu:"súlú",zun:"súní",zza:"zázáíska"},scriptNames:{Cyrl:"kyrillískt",Latn:"latneskt",Arab:"arabískt",Guru:"gurmukhi",Hans:"einfaldað",Hant:"hefðbundið"}},it:{rtl:false,languageNames:{aa:"afar",ab:"abcaso",ace:"accinese",ach:"acioli",ada:"adangme",ady:"adyghe",ae:"avestan",aeb:"arabo tunisino",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"accado",akz:"alabama",ale:"aleuto",aln:"albanese ghego",alt:"altai meridionale",am:"amarico",an:"aragonese",ang:"inglese antico",anp:"angika",ar:"arabo","ar-001":"arabo moderno standard",arc:"aramaico",arn:"mapudungun",aro:"araona",arp:"arapaho",arq:"arabo algerino",ars:"arabo najd",arw:"aruaco",ary:"arabo marocchino",arz:"arabo egiziano",as:"assamese",asa:"asu",ase:"lingua dei segni americana",ast:"asturiano",av:"avaro",avk:"kotava",awa:"awadhi",ay:"aymara",az:"azerbaigiano",ba:"baschiro",bal:"beluci",ban:"balinese",bar:"bavarese",bas:"basa",bax:"bamun",bbc:"batak toba",bbj:"ghomala",be:"bielorusso",bej:"begia",bem:"wemba",bew:"betawi",bez:"bena",bfd:"bafut",bfq:"badaga",bg:"bulgaro",bgn:"beluci occidentale",bho:"bhojpuri",bi:"bislama",bik:"bicol",bin:"bini",bjn:"banjar",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalese",bo:"tibetano",bpy:"bishnupriya",bqi:"bakhtiari",br:"bretone",bra:"braj",brh:"brahui",brx:"bodo",bs:"bosniaco",bss:"akoose",bua:"buriat",bug:"bugi",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalano",cad:"caddo",car:"caribico",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"ceceno",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"ciagataico",chk:"chuukese",chm:"mari",chn:"gergo chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"curdo sorani",co:"corso",cop:"copto",cps:"capiznon",cr:"cree",crh:"turco crimeo",crs:"creolo delle Seychelles",cs:"ceco",csb:"kashubian",cu:"slavo della Chiesa",cv:"ciuvascio",cy:"gallese",da:"danese",dak:"dakota",dar:"dargwa",dav:"taita",de:"tedesco","de-AT":"tedesco austriaco","de-CH":"alto tedesco svizzero",del:"delaware",den:"slave",dgr:"dogrib",din:"dinca",dje:"zarma",doi:"dogri",dsb:"basso sorabo",dtp:"dusun centrale",dua:"duala",dum:"olandese medio",dv:"divehi",dyo:"jola-fony",dyu:"diula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egl:"emiliano",egy:"egiziano antico",eka:"ekajuka",el:"greco",elx:"elamitico",en:"inglese","en-AU":"inglese australiano","en-CA":"inglese canadese","en-GB":"inglese britannico","en-US":"inglese americano",enm:"inglese medio",eo:"esperanto",es:"spagnolo","es-419":"spagnolo latinoamericano","es-ES":"spagnolo europeo","es-MX":"spagnolo messicano",esu:"yupik centrale",et:"estone",eu:"basco",ewo:"ewondo",ext:"estremegno",fa:"persiano",fan:"fang",fat:"fanti",ff:"fulah",fi:"finlandese",fil:"filippino",fit:"finlandese del Tornedalen",fj:"figiano",fo:"faroese",fr:"francese","fr-CA":"francese canadese","fr-CH":"francese svizzero",frc:"francese cajun",frm:"francese medio",fro:"francese antico",frp:"francoprovenzale",frr:"frisone settentrionale",frs:"frisone orientale",fur:"friulano",fy:"frisone occidentale",ga:"irlandese",gaa:"ga",gag:"gagauzo",gay:"gayo",gba:"gbaya",gbz:"dari zoroastriano",gd:"gaelico scozzese",gez:"geez",gil:"gilbertese",gl:"galiziano",glk:"gilaki",gmh:"tedesco medio alto",gn:"guaraní",goh:"tedesco antico alto",gom:"konkani goano",gon:"gondi",gor:"gorontalo",got:"gotico",grb:"grebo",grc:"greco antico",gsw:"tedesco svizzero",gu:"gujarati",guc:"wayuu",guz:"gusii",gv:"mannese",gwi:"gwichʼin",ha:"hausa",hai:"haida",hak:"hakka",haw:"hawaiano",he:"ebraico",hi:"hindi",hif:"hindi figiano",hil:"ilongo",hit:"hittite",hmn:"hmong",ho:"hiri motu",hr:"croato",hsb:"alto sorabo",hsn:"xiang",ht:"haitiano",hu:"ungherese",hup:"hupa",hy:"armeno",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesiano",ie:"interlingue",ig:"igbo",ii:"sichuan yi",ik:"inupiak",ilo:"ilocano",inh:"ingush",io:"ido",is:"islandese",it:"italiano",iu:"inuktitut",izh:"ingrico",ja:"giapponese",jam:"creolo giamaicano",jbo:"lojban",jgo:"ngamambo",jmc:"machame",jpr:"giudeo persiano",jrb:"giudeo arabo",jut:"jutlandico",jv:"giavanese",ka:"georgiano",kaa:"kara-kalpak",kab:"cabilo",kac:"kachin",kaj:"kai",kam:"kamba",kaw:"kawi",kbd:"cabardino",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"capoverdiano",kfo:"koro",kg:"kongo",kgp:"kaingang",kha:"khasi",kho:"khotanese",khq:"koyra chiini",khw:"khowar",ki:"kikuyu",kiu:"kirmanjki",kj:"kuanyama",kk:"kazako",kkj:"kako",kl:"groenlandese",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"coreano",koi:"permiaco",kok:"konkani",kos:"kosraean",kpe:"kpelle",kr:"kanuri",krc:"karachay-Balkar",krl:"careliano",kru:"kurukh",ks:"kashmiri",ksb:"shambala",ksf:"bafia",ksh:"coloniese",ku:"curdo",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"cornico",ky:"kirghiso",la:"latino",lad:"giudeo-spagnolo",lag:"langi",lah:"lahnda",lam:"lamba",lb:"lussemburghese",lez:"lesgo",lfn:"Lingua Franca Nova",lg:"ganda",li:"limburghese",lij:"ligure",liv:"livone",lkt:"lakota",lmo:"lombardo",ln:"lingala",lo:"lao",lol:"lolo bantu",lou:"creolo della Louisiana",loz:"lozi",lrc:"luri settentrionale",lt:"lituano",ltg:"letgallo",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"luyia",lv:"lettone",lzh:"cinese classico",lzz:"laz",mad:"madurese",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masai",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"creolo mauriziano",mg:"malgascio",mga:"irlandese medio",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshallese",mi:"maori",mic:"micmac",min:"menangkabau",mk:"macedone",ml:"malayalam",mn:"mongolo",mnc:"manchu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",mrj:"mari occidentale",ms:"malese",mt:"maltese",mua:"mundang",mus:"creek",mwl:"mirandese",mwr:"marwari",mwv:"mentawai",my:"birmano",mye:"myene",myv:"erzya",mzn:"mazandarani",na:"nauru",nan:"min nan",nap:"napoletano",naq:"nama",nb:"norvegese bokmål",nd:"ndebele del nord",nds:"basso tedesco","nds-NL":"basso tedesco olandese",ne:"nepalese","new":"newari",ng:"ndonga",nia:"nias",niu:"niue",njo:"ao",nl:"olandese","nl-BE":"fiammingo",nmg:"kwasio",nn:"norvegese nynorsk",nnh:"ngiemboon",no:"norvegese",nog:"nogai",non:"norse antico",nov:"novial",nqo:"n’ko",nr:"ndebele del sud",nso:"sotho del nord",nus:"nuer",nv:"navajo",nwc:"newari classico",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitano",oj:"ojibwa",om:"oromo",or:"odia",os:"ossetico",osa:"osage",ota:"turco ottomano",pa:"punjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palau",pcd:"piccardo",pcm:"pidgin nigeriano",pdc:"tedesco della Pennsylvania",peo:"persiano antico",pfl:"tedesco palatino",phn:"fenicio",pi:"pali",pl:"polacco",pms:"piemontese",pnt:"pontico",pon:"ponape",prg:"prussiano",pro:"provenzale antico",ps:"pashto",pt:"portoghese","pt-BR":"portoghese brasiliano","pt-PT":"portoghese europeo",qu:"quechua",quc:"k’iche’",qug:"quechua dell’altopiano del Chimborazo",raj:"rajasthani",rap:"rapanui",rar:"rarotonga",rgn:"romagnolo",rif:"tarifit",rm:"romancio",rn:"rundi",ro:"rumeno","ro-MD":"moldavo",rof:"rombo",rom:"romani",rtm:"rotumano",ru:"russo",rue:"ruteno",rug:"roviana",rup:"arumeno",rw:"kinyarwanda",rwk:"rwa",sa:"sanscrito",sad:"sandawe",sah:"yakut",sam:"aramaico samaritano",saq:"samburu",sas:"sasak",sat:"santali",saz:"saurashtra",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"scozzese",sd:"sindhi",sdc:"sassarese",sdh:"curdo meridionale",se:"sami del nord",see:"seneca",seh:"sena",sei:"seri",sel:"selkup",ses:"koyraboro senni",sg:"sango",sga:"irlandese antico",sgs:"samogitico",sh:"serbo-croato",shi:"tashelhit",shn:"shan",shu:"arabo ciadiano",si:"singalese",sid:"sidamo",sk:"slovacco",sl:"sloveno",sli:"tedesco slesiano",sly:"selayar",sm:"samoano",sma:"sami del sud",smj:"sami di Lule",smn:"sami di Inari",sms:"sami skolt",sn:"shona",snk:"soninke",so:"somalo",sog:"sogdiano",sq:"albanese",sr:"serbo",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sotho del sud",stq:"saterfriesisch",su:"sundanese",suk:"sukuma",sus:"susu",sux:"sumero",sv:"svedese",sw:"swahili","sw-CD":"swahili del Congo",swb:"comoriano",syc:"siriaco classico",syr:"siriaco",szl:"slesiano",ta:"tamil",tcy:"tulu",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tagico",th:"thai",ti:"tigrino",tig:"tigre",tk:"turcomanno",tkl:"tokelau",tkr:"tsakhur",tl:"tagalog",tlh:"klingon",tli:"tlingit",tly:"taliscio",tmh:"tamashek",tn:"tswana",to:"tongano",tog:"nyasa del Tonga",tpi:"tok pisin",tr:"turco",tru:"turoyo",trv:"taroko",ts:"tsonga",tsd:"zaconico",tsi:"tsimshian",tt:"tataro",ttt:"tat islamico",tum:"tumbuka",tvl:"tuvalu",tw:"ci",twq:"tasawaq",ty:"taitiano",tyv:"tuvinian",tzm:"tamazight",udm:"udmurt",ug:"uiguro",uga:"ugaritico",uk:"ucraino",umb:"mbundu",ur:"urdu",uz:"uzbeco",ve:"venda",vec:"veneto",vep:"vepso",vi:"vietnamita",vls:"fiammingo occidentale",vo:"volapük",vot:"voto",vro:"võro",vun:"vunjo",wa:"vallone",wae:"walser",wal:"walamo",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"wu",xal:"kalmyk",xh:"xhosa",xmf:"mengrelio",xog:"soga",yao:"yao (bantu)",yap:"yapese",yav:"yangben",ybb:"yemba",yi:"yiddish",yo:"yoruba",yrl:"nheengatu",yue:"cantonese",za:"zhuang",zap:"zapotec",zbl:"blissymbol",zea:"zelandese",zen:"zenaga",zgh:"tamazight del Marocco standard",zh:"cinese","zh-Hans":"cinese mandarino semplificato","zh-Hant":"cinese mandarino tradizionale",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"cirillico",Latn:"latino",Arab:"arabo",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vaii",Hans:"semplificato",Hant:"tradizionale"}},ja:{rtl:false,languageNames:{aa:"アファル語",ab:"アブハズ語",ace:"アチェ語",ach:"アチョリ語",ada:"アダングメ語",ady:"アディゲ語",ae:"アヴェスタ語",aeb:"チュニジア・アラビア語",af:"アフリカーンス語",afh:"アフリヒリ語",agq:"アゲム語",ain:"アイヌ語",ak:"アカン語",akk:"アッカド語",akz:"アラバマ語",ale:"アレウト語",aln:"ゲグ・アルバニア語",alt:"南アルタイ語",am:"アムハラ語",an:"アラゴン語",ang:"古英語",anp:"アンギカ語",ar:"アラビア語","ar-001":"現代標準アラビア語",arc:"アラム語",arn:"マプチェ語",aro:"アラオナ語",arp:"アラパホー語",arq:"アルジェリア・アラビア語",ars:"ナジュド地方・アラビア語",arw:"アラワク語",ary:"モロッコ・アラビア語",arz:"エジプト・アラビア語",as:"アッサム語",asa:"アス語",ase:"アメリカ手話",ast:"アストゥリアス語",av:"アヴァル語",avk:"コタヴァ",awa:"アワディー語",ay:"アイマラ語",az:"アゼルバイジャン語",ba:"バシキール語",bal:"バルーチー語",ban:"バリ語",bar:"バイエルン・オーストリア語",bas:"バサ語",bax:"バムン語",bbc:"トバ・バタク語",bbj:"ゴーマラ語",be:"ベラルーシ語",bej:"ベジャ語",bem:"ベンバ語",bew:"ベタウィ語",bez:"ベナ語",bfd:"バフット語",bfq:"バダガ語",bg:"ブルガリア語",bgn:"西バローチー語",bho:"ボージュプリー語",bi:"ビスラマ語",bik:"ビコル語",bin:"ビニ語",bjn:"バンジャル語",bkm:"コム語",bla:"シクシカ語",bm:"バンバラ語",bn:"ベンガル語",bo:"チベット語",bpy:"ビシュヌプリヤ・マニプリ語",bqi:"バフティヤーリー語",br:"ブルトン語",bra:"ブラジ語",brh:"ブラフイ語",brx:"ボド語",bs:"ボスニア語",bss:"アコース語",bua:"ブリヤート語",bug:"ブギ語",bum:"ブル語",byn:"ビリン語",byv:"メドゥンバ語",ca:"カタロニア語",cad:"カドー語",car:"カリブ語",cay:"カユーガ語",cch:"チャワイ語",ccp:"チャクマ語",ce:"チェチェン語",ceb:"セブアノ語",cgg:"チガ語",ch:"チャモロ語",chb:"チブチャ語",chg:"チャガタイ語",chk:"チューク語",chm:"マリ語",chn:"チヌーク混成語",cho:"チョクトー語",chp:"チペワイアン語",chr:"チェロキー語",chy:"シャイアン語",ckb:"中央クルド語",co:"コルシカ語",cop:"コプト語",cps:"カピス語",cr:"クリー語",crh:"クリミア・タタール語",crs:"セーシェル・クレオール語",cs:"チェコ語",csb:"カシューブ語",cu:"教会スラブ語",cv:"チュヴァシ語",cy:"ウェールズ語",da:"デンマーク語",dak:"ダコタ語",dar:"ダルグワ語",dav:"タイタ語",de:"ドイツ語","de-AT":"ドイツ語 (オーストリア)","de-CH":"標準ドイツ語 (スイス)",del:"デラウェア語",den:"スレイビー語",dgr:"ドグリブ語",din:"ディンカ語",dje:"ザルマ語",doi:"ドーグリー語",dsb:"低地ソルブ語",dtp:"中央ドゥスン語",dua:"ドゥアラ語",dum:"中世オランダ語",dv:"ディベヒ語",dyo:"ジョラ=フォニィ語",dyu:"ジュラ語",dz:"ゾンカ語",dzg:"ダザガ語",ebu:"エンブ語",ee:"エウェ語",efi:"エフィク語",egl:"エミリア語",egy:"古代エジプト語",eka:"エカジュク語",el:"ギリシャ語",elx:"エラム語",en:"英語","en-AU":"オーストラリア英語","en-CA":"カナダ英語","en-GB":"イギリス英語","en-US":"アメリカ英語",enm:"中英語",eo:"エスペラント語",es:"スペイン語","es-419":"スペイン語 (ラテンアメリカ)","es-ES":"スペイン語 (イベリア半島)","es-MX":"スペイン語 (メキシコ)",esu:"中央アラスカ・ユピック語",et:"エストニア語",eu:"バスク語",ewo:"エウォンド語",ext:"エストレマドゥーラ語",fa:"ペルシア語",fan:"ファング語",fat:"ファンティー語",ff:"フラ語",fi:"フィンランド語",fil:"フィリピノ語",fit:"トルネダール・フィンランド語",fj:"フィジー語",fo:"フェロー語",fon:"フォン語",fr:"フランス語","fr-CA":"フランス語 (カナダ)","fr-CH":"フランス語 (スイス)",frc:"ケイジャン・フランス語",frm:"中期フランス語",fro:"古フランス語",frp:"アルピタン語",frr:"北フリジア語",frs:"東フリジア語",fur:"フリウリ語",fy:"西フリジア語",ga:"アイルランド語",gaa:"ガ語",gag:"ガガウズ語",gan:"贛語",gay:"ガヨ語",gba:"バヤ語",gbz:"ダリー語(ゾロアスター教)",gd:"スコットランド・ゲール語",gez:"ゲエズ語",gil:"キリバス語",gl:"ガリシア語",glk:"ギラキ語",gmh:"中高ドイツ語",gn:"グアラニー語",goh:"古高ドイツ語",gom:"ゴア・コンカニ語",gon:"ゴーンディー語",gor:"ゴロンタロ語",got:"ゴート語",grb:"グレボ語",grc:"古代ギリシャ語",gsw:"スイスドイツ語",gu:"グジャラート語",guc:"ワユ語",gur:"フラフラ語",guz:"グシイ語",gv:"マン島語",gwi:"グウィッチン語",ha:"ハウサ語",hai:"ハイダ語",hak:"客家語",haw:"ハワイ語",he:"ヘブライ語",hi:"ヒンディー語",hif:"フィジー・ヒンディー語",hil:"ヒリガイノン語",hit:"ヒッタイト語",hmn:"フモン語",ho:"ヒリモツ語",hr:"クロアチア語",hsb:"高地ソルブ語",hsn:"湘語",ht:"ハイチ・クレオール語",hu:"ハンガリー語",hup:"フパ語",hy:"アルメニア語",hz:"ヘレロ語",ia:"インターリングア",iba:"イバン語",ibb:"イビビオ語",id:"インドネシア語",ie:"インターリング",ig:"イボ語",ii:"四川イ語",ik:"イヌピアック語",ilo:"イロカノ語",inh:"イングーシ語",io:"イド語",is:"アイスランド語",it:"イタリア語",iu:"イヌクティトット語",izh:"イングリア語",ja:"日本語",jam:"ジャマイカ・クレオール語",jbo:"ロジバン語",jgo:"ンゴンバ語",jmc:"マチャメ語",jpr:"ユダヤ・ペルシア語",jrb:"ユダヤ・アラビア語",jut:"ユトランド語",jv:"ジャワ語",ka:"ジョージア語",kaa:"カラカルパク語",kab:"カビル語",kac:"カチン語",kaj:"カジェ語",kam:"カンバ語",kaw:"カウィ語",kbd:"カバルド語",kbl:"カネンブ語",kcg:"カタブ語",kde:"マコンデ語",kea:"カーボベルデ・クレオール語",ken:"ニャン語",kfo:"コロ語",kg:"コンゴ語",kgp:"カインガング語",kha:"カシ語",kho:"コータン語",khq:"コイラ・チーニ語",khw:"コワール語",ki:"キクユ語",kiu:"キルマンジュキ語",kj:"クワニャマ語",kk:"カザフ語",kkj:"カコ語",kl:"グリーンランド語",kln:"カレンジン語",km:"クメール語",kmb:"キンブンド語",kn:"カンナダ語",ko:"韓国語",koi:"コミ・ペルミャク語",kok:"コンカニ語",kos:"コスラエ語",kpe:"クペレ語",kr:"カヌリ語",krc:"カラチャイ・バルカル語",kri:"クリオ語",krj:"キナライア語",krl:"カレリア語",kru:"クルク語",ks:"カシミール語",ksb:"サンバー語",ksf:"バフィア語",ksh:"ケルン語",ku:"クルド語",kum:"クムク語",kut:"クテナイ語",kv:"コミ語",kw:"コーンウォール語",ky:"キルギス語",la:"ラテン語",lad:"ラディノ語",lag:"ランギ語",lah:"ラフンダー語",lam:"ランバ語",lb:"ルクセンブルク語",lez:"レズギ語",lfn:"リングア・フランカ・ノバ",lg:"ガンダ語",li:"リンブルフ語",lij:"リグリア語",liv:"リヴォニア語",lkt:"ラコタ語",lmo:"ロンバルド語",ln:"リンガラ語",lo:"ラオ語",lol:"モンゴ語",lou:"ルイジアナ・クレオール語",loz:"ロジ語",lrc:"北ロル語",lt:"リトアニア語",ltg:"ラトガリア語",lu:"ルバ・カタンガ語",lua:"ルバ・ルルア語",lui:"ルイセーニョ語",lun:"ルンダ語",luo:"ルオ語",lus:"ミゾ語",luy:"ルヒヤ語",lv:"ラトビア語",lzh:"漢文",lzz:"ラズ語",mad:"マドゥラ語",maf:"マファ語",mag:"マガヒー語",mai:"マイティリー語",mak:"マカッサル語",man:"マンディンゴ語",mas:"マサイ語",mde:"マバ語",mdf:"モクシャ語",mdr:"マンダル語",men:"メンデ語",mer:"メル語",mfe:"モーリシャス・クレオール語",mg:"マダガスカル語",mga:"中期アイルランド語",mgh:"マクア・ミート語",mgo:"メタ語",mh:"マーシャル語",mi:"マオリ語",mic:"ミクマク語",min:"ミナンカバウ語",mk:"マケドニア語",ml:"マラヤーラム語",mn:"モンゴル語",mnc:"満州語",mni:"マニプリ語",moh:"モーホーク語",mos:"モシ語",mr:"マラーティー語",mrj:"山地マリ語",ms:"マレー語",mt:"マルタ語",mua:"ムンダン語",mus:"クリーク語",mwl:"ミランダ語",mwr:"マールワーリー語",mwv:"メンタワイ語",my:"ミャンマー語",mye:"ミエネ語",myv:"エルジャ語",mzn:"マーザンダラーン語",na:"ナウル語",nan:"閩南語",nap:"ナポリ語",naq:"ナマ語",nb:"ノルウェー語(ブークモール)",nd:"北ンデベレ語",nds:"低地ドイツ語","nds-NL":"低地ドイツ語 (オランダ)",ne:"ネパール語","new":"ネワール語",ng:"ンドンガ語",nia:"ニアス語",niu:"ニウーエイ語",njo:"アオ・ナガ語",nl:"オランダ語","nl-BE":"フレミッシュ語",nmg:"クワシオ語",nn:"ノルウェー語(ニーノシュク)",nnh:"ンジエムブーン語",no:"ノルウェー語",nog:"ノガイ語",non:"古ノルド語",nov:"ノヴィアル",nqo:"ンコ語",nr:"南ンデベレ語",nso:"北部ソト語",nus:"ヌエル語",nv:"ナバホ語",nwc:"古典ネワール語",ny:"ニャンジャ語",nym:"ニャムウェジ語",nyn:"ニャンコレ語",nyo:"ニョロ語",nzi:"ンゼマ語",oc:"オック語",oj:"オジブウェー語",om:"オロモ語",or:"オディア語",os:"オセット語",osa:"オセージ語",ota:"オスマントルコ語",pa:"パンジャブ語",pag:"パンガシナン語",pal:"パフラヴィー語",pam:"パンパンガ語",pap:"パピアメント語",pau:"パラオ語",pcd:"ピカルディ語",pcm:"ナイジェリア・ピジン語",pdc:"ペンシルベニア・ドイツ語",pdt:"メノナイト低地ドイツ語",peo:"古代ペルシア語",pfl:"プファルツ語",phn:"フェニキア語",pi:"パーリ語",pl:"ポーランド語",pms:"ピエモンテ語",pnt:"ポントス・ギリシャ語",pon:"ポンペイ語",prg:"プロシア語",pro:"古期プロバンス語",ps:"パシュトゥー語",pt:"ポルトガル語","pt-BR":"ポルトガル語 (ブラジル)","pt-PT":"ポルトガル語 (イベリア半島)",qu:"ケチュア語",quc:"キチェ語",qug:"チンボラソ高地ケチュア語",raj:"ラージャスターン語",rap:"ラパヌイ語",rar:"ラロトンガ語",rgn:"ロマーニャ語",rif:"リーフ語",rm:"ロマンシュ語",rn:"ルンディ語",ro:"ルーマニア語","ro-MD":"モルダビア語",rof:"ロンボ語",rom:"ロマーニー語",root:"ルート",rtm:"ロツマ語",ru:"ロシア語",rue:"ルシン語",rug:"ロヴィアナ語",rup:"アルーマニア語",rw:"キニアルワンダ語",rwk:"ルワ語",sa:"サンスクリット語",sad:"サンダウェ語",sah:"サハ語",sam:"サマリア・アラム語",saq:"サンブル語",sas:"ササク語",sat:"サンターリー語",saz:"サウラーシュトラ語",sba:"ンガムバイ語",sbp:"サング語",sc:"サルデーニャ語",scn:"シチリア語",sco:"スコットランド語",sd:"シンド語",sdc:"サッサリ・サルデーニャ語",sdh:"南部クルド語",se:"北サーミ語",see:"セネカ語",seh:"セナ語",sei:"セリ語",sel:"セリクプ語",ses:"コイラボロ・センニ語",sg:"サンゴ語",sga:"古アイルランド語",sgs:"サモギティア語",sh:"セルボ・クロアチア語",shi:"タシルハイト語",shn:"シャン語",shu:"チャド・アラビア語",si:"シンハラ語",sid:"シダモ語",sk:"スロバキア語",sl:"スロベニア語",sli:"低シレジア語",sly:"スラヤール語",sm:"サモア語",sma:"南サーミ語",smj:"ルレ・サーミ語",smn:"イナリ・サーミ語",sms:"スコルト・サーミ語",sn:"ショナ語",snk:"ソニンケ語",so:"ソマリ語",sog:"ソグド語",sq:"アルバニア語",sr:"セルビア語",srn:"スリナム語",srr:"セレル語",ss:"スワジ語",ssy:"サホ語",st:"南部ソト語",stq:"ザーターフリジア語",su:"スンダ語",suk:"スクマ語",sus:"スス語",sux:"シュメール語",sv:"スウェーデン語",sw:"スワヒリ語","sw-CD":"コンゴ・スワヒリ語",swb:"コモロ語",syc:"古典シリア語",syr:"シリア語",szl:"シレジア語",ta:"タミル語",tcy:"トゥル語",te:"テルグ語",tem:"テムネ語",teo:"テソ語",ter:"テレーノ語",tet:"テトゥン語",tg:"タジク語",th:"タイ語",ti:"ティグリニア語",tig:"ティグレ語",tiv:"ティブ語",tk:"トルクメン語",tkl:"トケラウ語",tkr:"ツァフル語",tl:"タガログ語",tlh:"クリンゴン語",tli:"トリンギット語",tly:"タリシュ語",tmh:"タマシェク語",tn:"ツワナ語",to:"トンガ語",tog:"トンガ語(ニアサ)",tpi:"トク・ピシン語",tr:"トルコ語",tru:"トゥロヨ語",trv:"タロコ語",ts:"ツォンガ語",tsd:"ツァコン語",tsi:"チムシュ語",tt:"タタール語",ttt:"ムスリム・タタール語",tum:"トゥンブカ語",tvl:"ツバル語",tw:"トウィ語",twq:"タサワク語",ty:"タヒチ語",tyv:"トゥヴァ語",tzm:"中央アトラス・タマジクト語",udm:"ウドムルト語",ug:"ウイグル語",uga:"ウガリト語",uk:"ウクライナ語",umb:"ムブンドゥ語",ur:"ウルドゥー語",uz:"ウズベク語",vai:"ヴァイ語",ve:"ベンダ語",vec:"ヴェネト語",vep:"ヴェプス語",vi:"ベトナム語",vls:"西フラマン語",vmf:"マインフランク語",vo:"ヴォラピュク語",vot:"ヴォート語",vro:"ヴォロ語",vun:"ヴンジョ語",wa:"ワロン語",wae:"ヴァリス語",wal:"ウォライタ語",war:"ワライ語",was:"ワショ語",wbp:"ワルピリ語",wo:"ウォロフ語",wuu:"呉語",xal:"カルムイク語",xh:"コサ語",xmf:"メグレル語",xog:"ソガ語",yao:"ヤオ語",yap:"ヤップ語",yav:"ヤンベン語",ybb:"イエンバ語",yi:"イディッシュ語",yo:"ヨルバ語",yrl:"ニェエンガトゥ語",yue:"広東語",za:"チワン語",zap:"サポテカ語",zbl:"ブリスシンボル",zea:"ゼーラント語",zen:"ゼナガ語",zgh:"標準モロッコ タマジクト語",zh:"中国語","zh-Hans":"標準中国語 (簡体字)","zh-Hant":"標準中国語 (繁体字)",zu:"ズールー語",zun:"ズニ語",zza:"ザザ語"},scriptNames:{Cyrl:"キリル文字",Latn:"ラテン文字",Arab:"アラビア文字",Guru:"グルムキー文字",Tfng:"ティフナグ文字",Vaii:"ヴァイ文字",Hans:"簡体字",Hant:"繁体字"}},jv:{rtl:false,languageNames:{agq:"Aghem",ak:"Akan",am:"Amharik",ar:"Arab","ar-001":"Arab Standar Anyar",as:"Assam",asa:"Asu",ast:"Asturia",az:"Azerbaijan",bas:"Basaa",bem:"Bemba",bez:"Bena",bg:"Bulgaria",bm:"Bambara",bn:"Bengali",bo:"Tibet",br:"Breton",brx:"Bodo",ca:"Katala",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Chiga",chr:"Cherokee",ckb:"Kurdi Tengah",co:"Korsika",cs:"Ceska",cu:"Slavia Gerejani",cy:"Welsh",da:"Dansk",dav:"Taita",de:"Jérman","de-AT":"Jérman (Ostenrik)","de-CH":"Jérman (Switserlan)",dje:"Zarma",dsb:"Sorbia Non Standar",dua:"Duala",dyo:"Jola-Fonyi",dz:"Dzongkha",ebu:"Embu",ee:"Ewe",el:"Yunani",en:"Inggris","en-AU":"Inggris (Ostrali)","en-CA":"Inggris (Kanada)","en-GB":"Inggris (Karajan Manunggal)","en-US":"Inggris (Amérika Sarékat)",eo:"Esperanto",es:"Spanyol","es-419":"Spanyol (Amerika Latin)","es-ES":"Spanyol (Eropah)","es-MX":"Spanyol (Meksiko)",et:"Estonia",eu:"Basque",ewo:"Ewondo",fa:"Persia",ff:"Fulah",fi:"Suomi",fil:"Tagalog",fo:"Faroe",fr:"Prancis","fr-CA":"Prancis (Kanada)","fr-CH":"Prancis (Switserlan)",fur:"Friulian",fy:"Frisia Sisih Kulon",ga:"Irlandia",gd:"Gaulia",gl:"Galisia",gsw:"Jerman Swiss",gu:"Gujarat",guz:"Gusii",gv:"Manx",ha:"Hausa",haw:"Hawaii",he:"Ibrani",hi:"India",hmn:"Hmong",hr:"Kroasia",hsb:"Sorbia Standar",ht:"Kreol Haiti",hu:"Hungaria",hy:"Armenia",ia:"Interlingua",id:"Indonesia",ig:"Iqbo",ii:"Sichuan Yi",is:"Islandia",it:"Italia",ja:"Jepang",jgo:"Ngomba",jmc:"Machame",jv:"Jawa",ka:"Georgia",kab:"Kabyle",kam:"Kamba",kde:"Makonde",kea:"Kabuverdianu",khq:"Koyra Chiini",ki:"Kikuyu",kk:"Kazakh",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kn:"Kannada",ko:"Korea",kok:"Konkani",ks:"Kashmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Colonia",ku:"Kurdis",kw:"Kernowek",ky:"Kirgis",la:"Latin",lag:"Langi",lb:"Luksemburg",lg:"Ganda",lkt:"Lakota",ln:"Lingala",lo:"Laos",lrc:"Luri Sisih Lor",lt:"Lithuania",lu:"Luba-Katanga",luo:"Luo",luy:"Luyia",lv:"Latvia",mas:"Masai",mer:"Meru",mfe:"Morisyen",mg:"Malagasi",mgh:"Makhuwa-Meeto",mgo:"Meta’",mi:"Maori",mk:"Makedonia",ml:"Malayalam",mn:"Mongolia",mr:"Marathi",ms:"Melayu",mt:"Malta",mua:"Mundang",my:"Myanmar",mzn:"Mazanderani",naq:"Nama",nb:"Bokmål Norwegia",nd:"Ndebele Lor",nds:"Jerman Non Standar","nds-NL":"Jerman Non Standar (Walanda)",ne:"Nepal",nl:"Walanda","nl-BE":"Flemis",nmg:"Kwasio",nn:"Nynorsk Norwegia",nnh:"Ngiemboon",nus:"Nuer",ny:"Nyanja",nyn:"Nyankole",om:"Oromo",or:"Odia",os:"Ossetia",pa:"Punjab",pl:"Polandia",prg:"Prusia",ps:"Pashto",pt:"Portugis","pt-BR":"Portugis (Brasil)","pt-PT":"Portugis (Portugal)",qu:"Quechua",rm:"Roman",rn:"Rundi",ro:"Rumania","ro-MD":"Rumania (Moldova)",rof:"Rombo",ru:"Rusia",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskerta",sah:"Sakha",saq:"Samburu",sbp:"Sangu",sd:"Sindhi",se:"Sami Sisih Lor",seh:"Sena",ses:"Koyraboro Senni",sg:"Sango",shi:"Tachelhit",si:"Sinhala",sk:"Slowakia",sl:"Slovenia",sm:"Samoa",smn:"Inari Sami",sn:"Shona",so:"Somalia",sq:"Albania",sr:"Serbia",st:"Sotho Sisih Kidul",su:"Sunda",sv:"Swedia",sw:"Swahili","sw-CD":"Swahili (Kongo - Kinshasa)",ta:"Tamil",te:"Telugu",teo:"Teso",tg:"Tajik",th:"Thailand",ti:"Tigrinya",tk:"Turkmen",to:"Tonga",tr:"Turki",tt:"Tatar",twq:"Tasawaq",tzm:"Tamazight Atlas Tengah",ug:"Uighur",uk:"Ukraina",ur:"Urdu",uz:"Uzbek",vai:"Vai",vi:"Vietnam",vo:"Volapuk",vun:"Vunjo",wae:"Walser",wo:"Wolof",xh:"Xhosa",xog:"Soga",yav:"Yangben",yi:"Yiddish",yo:"Yoruba",yue:"Kanton",zgh:"Tamazight Moroko Standar",zh:"Tyonghwa","zh-Hans":"Tyonghwa Mandarin (Ringkes)","zh-Hant":"Tyonghwa Mandarin (Tradisional)",zu:"Zulu"},scriptNames:{Cyrl:"Sirilik",Latn:"Latin",Guru:"Gurmukhi",Hans:"Prasaja",Hant:"Tradhisional"}},km:{rtl:false,languageNames:{aa:"អាហ្វារ",ab:"អាប់ខាហ៊្សាន",ace:"អាកហ៊ីនឺស",ada:"អាដេងមី",ady:"អាឌីហ្គី",ae:"អាវេស្ថាន",af:"អាហ្វ្រិកាន",agq:"អាហ្គីម",ain:"អាយនូ",ak:"អាកាន",ale:"អាលូត",alt:"អាល់តៃខាងត្បូង",am:"អាំហារិក",an:"អារ៉ាហ្គោន",anp:"អាហ្គីកា",ar:"អារ៉ាប់","ar-001":"អារ៉ាប់ (ស្តង់ដារ)",arn:"ម៉ាពូឈី",arp:"អារ៉ាប៉ាហូ",as:"អាសាមីស",asa:"អាស៊ូ",ast:"អាស្ទូរី",av:"អាវ៉ារីក",awa:"អាវ៉ាឌី",ay:"អីម៉ារ៉ា",az:"អាស៊ែបៃហ្សង់",ba:"បាស្គៀ",ban:"បាលី",bas:"បាសា",be:"បេឡារុស",bem:"បេមបា",bez:"បេណា",bg:"ប៊ុលហ្គារី",bgn:"បាឡូជីខាងលិច",bho:"បូចពូរី",bi:"ប៊ីស្លាម៉ា",bin:"ប៊ីនី",bla:"ស៊ីកស៊ីកា",bm:"បាម្បារា",bn:"បង់ក្លាដែស",bo:"ទីបេ",br:"ប្រីស្តុន",brx:"បូដូ",bs:"បូស្នី",bug:"ប៊ុកហ្គី",byn:"ប្ល៊ីន",ca:"កាតាឡាន",ccp:"ចាក់ម៉ា",ce:"ឈីឆេន",ceb:"ស៊ីប៊ូអាណូ",cgg:"ឈីហ្គា",ch:"ឈីម៉ូរ៉ូ",chk:"ឈូគី",chm:"ម៉ារី",cho:"ឆុកតាវ",chr:"ឆេរូគី",chy:"ឈីយីនី",ckb:"ឃើដភាគកណ្តាល",co:"កូស៊ីខាន",crs:"សេសេលវ៉ាគ្រីអូល (បារាំង)",cs:"ឆែក",cu:"ឈឺជស្លាវិក",cv:"ឈូវ៉ាស",cy:"វេល",da:"ដាណឺម៉ាក",dak:"ដាកូតា",dar:"ដាចវ៉ា",dav:"តៃតា",de:"អាល្លឺម៉ង់","de-AT":"អាល្លឺម៉ង់ (អូទ្រីស)","de-CH":"អាល្លឺម៉ង់ (ស្វ៊ីស)",dgr:"ដូគ្រីប",dje:"ហ្សាម៉ា",dsb:"សូប៊ីក្រោម",dua:"ឌួលឡា",dv:"ទេវីហ៊ី",dyo:"ចូឡាហ៊្វុនយី",dz:"ដុងខា",dzg:"ដាហ្សាហ្គា",ebu:"អេមប៊ូ",ee:"អ៊ីវ",efi:"អ៊ីហ្វិក",eka:"អ៊ីកាជុក",el:"ក្រិក",en:"អង់គ្លេស","en-AU":"អង់គ្លេស (អូស្ត្រាលី)","en-CA":"អង់គ្លេស (កាណាដា)","en-GB":"អង់គ្លេស (ចក្រភព​អង់គ្លេស)","en-US":"អង់គ្លេស (សហរដ្ឋអាមេរិក)",eo:"អេស្ពេរ៉ាន់តូ",es:"អេស្ប៉ាញ","es-419":"អេស្ប៉ាញ (អាមេរិក​ឡាទីន)","es-ES":"អេស្ប៉ាញ (អ៊ឺរ៉ុប)","es-MX":"អេស្ប៉ាញ (ម៉ិកស៊ិក)",et:"អេស្តូនី",eu:"បាសខ៍",ewo:"អ៊ីវ៉ុនដូ",fa:"ភឺសៀន",ff:"ហ្វ៊ូឡា",fi:"ហ្វាំងឡង់",fil:"ហ្វីលីពីន",fj:"ហ៊្វីជី",fo:"ហ្វារូស",fon:"ហ្វ៊ុន",fr:"បារាំង","fr-CA":"បារាំង (កាណាដា)","fr-CH":"បារាំង (ស្វ៊ីស)",fur:"ហ៊្វ្រូលាន",fy:"ហ្វ្រីស៊ានខាងលិច",ga:"អៀរឡង់",gaa:"ហ្គា",gag:"កាគូស",gd:"ស្កុតហ្កែលិគ",gez:"ជីស",gil:"ហ្គីលបឺទ",gl:"ហ្គាលីស្យាន",gn:"ហ្គូរ៉ានី",gor:"ហ្គូរុនតាឡូ",gsw:"អាល្លឺម៉ង (ស្វីស)",gu:"ហ្កុយ៉ារាទី",guz:"ហ្គូស៊ី",gv:"មេន",gwi:"ហ្គីចឈីន",ha:"ហូសា",haw:"ហាវៃ",he:"ហេប្រឺ",hi:"ហិណ្ឌី",hil:"ហ៊ីលីហ្គេណុន",hmn:"ម៉ុង",hr:"ក្រូអាត",hsb:"សូប៊ីលើ",ht:"ហៃទី",hu:"ហុងគ្រី",hup:"ហ៊ូប៉ា",hy:"អាមេនី",hz:"ហឺរីរ៉ូ",ia:"អីនធើលីង",iba:"អ៊ីបាន",ibb:"អាយប៊ីប៊ីអូ",id:"ឥណ្ឌូណេស៊ី",ig:"អ៊ីកបូ",ii:"ស៊ីឈាន់យី",ilo:"អ៊ីឡូកូ",inh:"អ៊ិនហ្គូស",io:"អ៊ីដូ",is:"អ៊ីស្លង់",it:"អ៊ីតាលី",iu:"អ៊ីនុកទីទុត",ja:"ជប៉ុន",jbo:"លុចបាន",jgo:"ងុំបា",jmc:"ម៉ាឆាំ",jv:"ជ្វា",ka:"ហ្សក​ហ្ស៊ី",kab:"កាប៊ីឡេ",kac:"កាឈីន",kaj:"ជូ",kam:"កាំបា",kbd:"កាបាឌៀ",kcg:"យ៉ាប់",kde:"ម៉ាកូនដេ",kea:"កាប៊ូវឺឌៀនូ",kfo:"គូរូ",kha:"កាស៊ី",khq:"គុយរ៉ាឈីនី",ki:"គីគូយូ",kj:"គូនយ៉ាម៉ា",kk:"កាហ្សាក់",kkj:"កាកូ",kl:"កាឡាលលីស៊ុត",kln:"កាលែនជីន",km:"ខ្មែរ",kmb:"គីមប៊ុនឌូ",kn:"ខាណាដា",ko:"កូរ៉េ",koi:"គូមីភឹមយ៉ាគ",kok:"គុនកានី",kpe:"គ្លីប",kr:"កានូរី",krc:"ការ៉ាឆាយបាល់កា",krl:"ការីលា",kru:"គូរូក",ks:"កាស្មៀរ",ksb:"សាមបាឡា",ksf:"បាហ្វៀ",ksh:"កូឡូញ",ku:"ឃឺដ",kum:"គូមីគ",kv:"កូមី",kw:"កូនីស",ky:"​កៀហ្ស៊ីស",la:"ឡាតំាង",lad:"ឡាឌីណូ",lag:"ឡានហ្គី",lb:"លុចសំបួ",lez:"ឡេសហ្គី",lg:"ហ្គាន់ដា",li:"លីមប៊ូស",lkt:"ឡាកូតា",ln:"លីនកាឡា",lo:"ឡាវ",loz:"ឡូហ្ស៊ី",lrc:"លូរីខាងជើង",lt:"លីទុយអានី",lu:"លូបាកាតានហ្គា",lua:"លូបាលូឡា",lun:"លុនដា",luo:"លូអូ",lus:"មីហ្សូ",luy:"លូយ៉ា",lv:"ឡាតវី",mad:"ម៉ាឌូរីស",mag:"ម៉ាហ្គាហ៊ី",mai:"ម៉ៃធីលី",mak:"ម៉ាកាសា",mas:"ម៉ាសៃ",mdf:"មុខសា",men:"មេនឌី",mer:"មេរូ",mfe:"ម៉ូរីស៊ីន",mg:"ម៉ាឡាហ្គាស៊ី",mgh:"ម៉ាកគូវ៉ាមីតូ",mgo:"មេតា",mh:"ម៉ាស់សល",mi:"ម៉ោរី",mic:"មិកមេក",min:"មីណាងកាប៊ូ",mk:"ម៉ាសេដូនី",ml:"ម៉ាឡាយ៉ាឡាម",mn:"ម៉ុងហ្គោលី",mni:"ម៉ានីពូរី",moh:"ម៊ូហាគ",mos:"មូស៊ី",mr:"ម៉ារ៉ាធី",ms:"ម៉ាឡេ",mt:"ម៉ាល់តា",mua:"មុនដាង",mus:"គ្រីក",mwl:"មីរ៉ានដេស",my:"ភូមា",myv:"អឺហ្ស៊ីយ៉ា",mzn:"ម៉ាហ្សានដឺរេនី",na:"ណូរូ",nap:"នាប៉ូលីតាន",naq:"ណាម៉ា",nb:"ន័រវែស បុកម៉ាល់",nd:"នេបេលេខាងជើង",nds:"អាល្លឺម៉ង់ក្រោម","nds-NL":"ហ្សាក់ស្យុងក្រោម",ne:"នេប៉ាល់","new":"នេវ៉ាវី",ng:"នុនហ្គា",nia:"នីអាស",niu:"នូអៀន",nl:"ហូឡង់","nl-BE":"ផ្លាមីស",nmg:"ក្វាស្យូ",nn:"ន័រវែស នីនូស",nnh:"ងៀមប៊ូន",no:"ន័រវែស",nog:"ណូហ្គៃ",nqo:"នគោ",nr:"នេប៊េលខាងត្បូង",nso:"សូថូខាងជើង",nus:"នូអ័រ",nv:"ណាវ៉ាចូ",ny:"ណានចា",nyn:"ណានកូលេ",oc:"អូសីតាន់",om:"អូរ៉ូម៉ូ",or:"អូឌៀ",os:"អូស៊ីទិក",pa:"បឹនជាពិ",pag:"ភេនហ្គាស៊ីណាន",pam:"ផាមភេនហ្គា",pap:"ប៉ាប៉ៃមេនតូ",pau:"ប៉ាលូអាន",pcm:"ភាសាទំនាក់ទំនងនីហ្សេរីយ៉ា",pl:"ប៉ូឡូញ",prg:"ព្រូស៊ាន",ps:"បាស្តូ",pt:"ព័រទុយហ្គាល់","pt-BR":"ព័រទុយហ្គាល់ (ប្រេស៊ីល)","pt-PT":"ព័រទុយហ្គាល់ (អឺរ៉ុប)",qu:"ហ្គិកឈួ",quc:"គីចឈី",rap:"រ៉ាប៉ានូ",rar:"រ៉ារ៉ូតុងហ្គាន",rm:"រ៉ូម៉ង់",rn:"រុណ្ឌី",ro:"រូម៉ានី","ro-MD":"ម៉ុលដាវី",rof:"រុមបូ",root:"រូត",ru:"រុស្ស៊ី",rup:"អារ៉ូម៉ានី",rw:"គិនយ៉ាវ៉ាន់ដា",rwk:"រ៉្វា",sa:"សំស្ក្រឹត",sad:"សានដាវី",sah:"សាខា",saq:"សាមបូរូ",sat:"សាន់តាលី",sba:"ងាំបេយ",sbp:"សានហ្គូ",sc:"សាឌីនា",scn:"ស៊ីស៊ីលាន",sco:"ស្កុត",sd:"ស៊ីនឌី",sdh:"ឃើដភាគខាងត្បូង",se:"សាមីខាងជើង",seh:"ស៊ីណា",ses:"គុយរ៉ាបូរ៉ុស៊ីនី",sg:"សានហ្គោ",sh:"សឺបូក្រូអាត",shi:"តាឈីលហ៊ីត",shn:"សាន",si:"ស្រីលង្កា",sk:"ស្លូវ៉ាគី",sl:"ស្លូវ៉ានី",sm:"សាម័រ",sma:"សាមីខាងត្បូង",smj:"លូលីសាមី",smn:"អ៊ីណារីសាម៉ី",sms:"ស្កុលសាមី",sn:"សូណា",snk:"សូនីនគេ",so:"សូម៉ាលី",sq:"អាល់បានី",sr:"ស៊ែប",srn:"ស្រាណានតុងហ្គោ",ss:"ស្វាទី",ssy:"សាហូ",st:"សូថូខាងត្បូង",su:"ស៊ូដង់",suk:"ស៊ូគូម៉ា",sv:"ស៊ុយអែត",sw:"ស្វាហ៊ីលី","sw-CD":"កុងហ្គោស្វាហ៊ីលី",swb:"កូម៉ូរី",syr:"ស៊ីរី",ta:"តាមីល",te:"តេលុគុ",tem:"ធីមនី",teo:"តេសូ",tet:"ទីទុំ",tg:"តាហ្ស៊ីគ",th:"ថៃ",ti:"ទីហ្គ្រីញ៉ា",tig:"ធីហ្គ្រា",tk:"តួកម៉េន",tlh:"ឃ្លីនហ្គុន",tn:"ស្វាណា",to:"តុងហ្គា",tpi:"ថុកពីស៊ីន",tr:"ទួរគី",trv:"តារ៉ូកូ",ts:"សុងហ្គា",tt:"តាតា",tum:"ទុមប៊ូកា",tvl:"ទូវ៉ាលូ",tw:"ទ្វី",twq:"តាសាវ៉ាក់",ty:"តាហ៊ីទី",tyv:"ទូវីនៀ",tzm:"តាម៉ាសាយអាត្លាសកណ្តាល",udm:"អាត់មូដ",ug:"អ៊ុយហ្គឺរ",uk:"អ៊ុយក្រែន",umb:"អាម់ប៊ុនឌូ",ur:"អ៊ូរឌូ",uz:"អ៊ូសបេគ",vai:"វៃ",ve:"វេនដា",vi:"វៀតណាម",vo:"វូឡាពូក",vun:"វុនចូ",wa:"វ៉ាលូន",wae:"វេលសឺ",wal:"វ៉ូឡាយតា",war:"វ៉ារេយ",wbp:"វ៉ារីប៉ារី",wo:"វូឡុហ្វ",xal:"កាលមីគ",xh:"ឃសា",xog:"សូហ្គា",yav:"យ៉ាងបេន",ybb:"យេមបា",yi:"យ៉ីឌីស",yo:"យរូបា",yue:"កន្តាំង",za:"ហ្សួង",zgh:"តាម៉ាហ្សៃម៉ារ៉ុកស្តង់ដា",zh:"ចិន","zh-Hans":"ចិនកុកងឺ (អក្សរ​កាត់)","zh-Hant":"ចិនកុកងឺ (អក្សរ​ពុម្ព)",zu:"ហ្សូលូ",zun:"ហ្សូនី",zza:"ហ្សាហ្សា"},scriptNames:{Cyrl:"ស៊ីរីលីក",Latn:"ឡាតាំង",Arab:"អារ៉ាប់",Guru:"កុមុយឃី",Hans:"អក្សរ​ចិន​កាត់",Hant:"អក្សរ​ចិន​ពេញ"}},kn:{rtl:false,languageNames:{aa:"ಅಫಾರ್",ab:"ಅಬ್ಖಾಜಿಯನ್",ace:"ಅಛಿನೀಸ್",ach:"ಅಕೋಲಿ",ada:"ಅಡಂಗ್ಮೆ",ady:"ಅಡೈಘೆ",ae:"ಅವೆಸ್ಟನ್",af:"ಆಫ್ರಿಕಾನ್ಸ್",afh:"ಆಫ್ರಿಹಿಲಿ",agq:"ಅಘೆಮ್",ain:"ಐನು",ak:"ಅಕಾನ್",akk:"ಅಕ್ಕಾಡಿಯನ್",ale:"ಅಲೆಯುಟ್",alt:"ದಕ್ಷಿಣ ಅಲ್ಟಾಯ್",am:"ಅಂಹರಿಕ್",an:"ಅರಗೊನೀಸ್",ang:"ಪ್ರಾಚೀನ ಇಂಗ್ಲೀಷ್",anp:"ಆಂಗಿಕಾ",ar:"ಅರೇಬಿಕ್","ar-001":"ಆಧುನಿಕ ಪ್ರಮಾಣಿತ ಅರೇಬಿಕ್",arc:"ಅರಾಮಿಕ್",arn:"ಮಪುಚೆ",arp:"ಅರಪಾಹೋ",arw:"ಅರಾವಾಕ್",as:"ಅಸ್ಸಾಮೀಸ್",asa:"ಅಸು",ast:"ಆಸ್ಟುರಿಯನ್",av:"ಅವರಿಕ್",awa:"ಅವಧಿ",ay:"ಅಯ್ಮಾರಾ",az:"ಅಜೆರ್ಬೈಜಾನಿ",ba:"ಬಶ್ಕಿರ್",bal:"ಬಲೂಚಿ",ban:"ಬಲಿನೀಸ್",bas:"ಬಸಾ",be:"ಬೆಲರೂಸಿಯನ್",bej:"ಬೇಜಾ",bem:"ಬೆಂಬಾ",bez:"ಬೆನ",bg:"ಬಲ್ಗೇರಿಯನ್",bgn:"ಪಶ್ಚಿಮ ಬಲೊಚಿ",bho:"ಭೋಜಪುರಿ",bi:"ಬಿಸ್ಲಾಮಾ",bik:"ಬಿಕೊಲ್",bin:"ಬಿನಿ",bla:"ಸಿಕ್ಸಿಕಾ",bm:"ಬಂಬಾರಾ",bn:"ಬಾಂಗ್ಲಾ",bo:"ಟಿಬೇಟಿಯನ್",br:"ಬ್ರೆಟನ್",bra:"ಬ್ರಜ್",brx:"ಬೋಡೊ",bs:"ಬೋಸ್ನಿಯನ್",bua:"ಬುರಿಯಟ್",bug:"ಬುಗಿನೀಸ್",byn:"ಬ್ಲಿನ್",ca:"ಕೆಟಲಾನ್",cad:"ಕ್ಯಾಡ್ಡೋ",car:"ಕಾರಿಬ್",cch:"ಅಟ್ಸಮ್",ccp:"ಚಕ್ಮಾ",ce:"ಚೆಚನ್",ceb:"ಸೆಬುವಾನೊ",cgg:"ಚಿಗಾ",ch:"ಕಮೊರೊ",chb:"ಚಿಬ್ಚಾ",chg:"ಚಗಟಾಯ್",chk:"ಚೂಕಿಸೆ",chm:"ಮಾರಿ",chn:"ಚಿನೂಕ್ ಜಾರ್ಗೋನ್",cho:"ಚೋಕ್ಟಾವ್",chp:"ಚಿಪೆವ್ಯಾನ್",chr:"ಚೆರೋಕಿ",chy:"ಚೀಯೆನ್ನೇ",ckb:"ಮಧ್ಯ ಕುರ್ದಿಶ್",co:"ಕೋರ್ಸಿಕನ್",cop:"ಕೊಪ್ಟಿಕ್",cr:"ಕ್ರೀ",crh:"ಕ್ರಿಮೀಯನ್ ಟರ್ಕಿಷ್",crs:"ಸೆಸೆಲ್ವಾ ಕ್ರಯೋಲ್ ಫ್ರೆಂಚ್",cs:"ಜೆಕ್",csb:"ಕಶುಬಿಯನ್",cu:"ಚರ್ಚ್ ಸ್ಲಾವಿಕ್",cv:"ಚುವಾಶ್",cy:"ವೆಲ್ಶ್",da:"ಡ್ಯಾನಿಶ್",dak:"ಡಕೋಟಾ",dar:"ದರ್ಗ್ವಾ",dav:"ಟೈಟ",de:"ಜರ್ಮನ್","de-AT":"ಆಸ್ಟ್ರಿಯನ್ ಜರ್ಮನ್","de-CH":"ಸ್ವಿಸ್ ಹೈ ಜರ್ಮನ್",del:"ಡೆಲಾವೇರ್",den:"ಸ್ಲೇವ್",dgr:"ಡೋಗ್ರಿಬ್",din:"ಡಿಂಕಾ",dje:"ಜರ್ಮಾ",doi:"ಡೋಗ್ರಿ",dsb:"ಲೋವರ್ ಸರ್ಬಿಯನ್",dua:"ಡುವಾಲಾ",dum:"ಮಧ್ಯ ಡಚ್",dv:"ದಿವೆಹಿ",dyo:"ಜೊಲ-ಫೊನ್ಯಿ",dyu:"ಡ್ಯೂಲಾ",dz:"ಜೋಂಗ್‌ಖಾ",dzg:"ಡಜಾಗ",ebu:"ಎಂಬು",ee:"ಈವ್",efi:"ಎಫಿಕ್",egy:"ಪ್ರಾಚೀನ ಈಜಿಪ್ಟಿಯನ್",eka:"ಎಕಾಜುಕ್",el:"ಗ್ರೀಕ್",elx:"ಎಲಾಮೈಟ್",en:"ಇಂಗ್ಲಿಷ್","en-AU":"ಆಸ್ಟ್ರೇಲಿಯನ್ ಇಂಗ್ಲಿಷ್","en-CA":"ಕೆನೆಡಿಯನ್ ಇಂಗ್ಲಿಷ್","en-GB":"ಬ್ರಿಟಿಷ್ ಇಂಗ್ಲಿಷ್","en-US":"ಅಮೆರಿಕನ್ ಇಂಗ್ಲಿಷ್",enm:"ಮಧ್ಯ ಇಂಗ್ಲೀಷ್",eo:"ಎಸ್ಪೆರಾಂಟೊ",es:"ಸ್ಪ್ಯಾನಿಷ್","es-419":"ಲ್ಯಾಟಿನ್ ಅಮೇರಿಕನ್ ಸ್ಪ್ಯಾನಿಷ್","es-ES":"ಯುರೋಪಿಯನ್ ಸ್ಪ್ಯಾನಿಷ್","es-MX":"ಮೆಕ್ಸಿಕನ್ ಸ್ಪ್ಯಾನಿಷ್",et:"ಎಸ್ಟೊನಿಯನ್",eu:"ಬಾಸ್ಕ್",ewo:"ಇವಾಂಡೋ",fa:"ಪರ್ಶಿಯನ್",fan:"ಫಾಂಗ್",fat:"ಫಾಂಟಿ",ff:"ಫುಲಾ",fi:"ಫಿನ್ನಿಶ್",fil:"ಫಿಲಿಪಿನೊ",fj:"ಫಿಜಿಯನ್",fo:"ಫರೋಸಿ",fon:"ಫೋನ್",fr:"ಫ್ರೆಂಚ್","fr-CA":"ಕೆನೆಡಿಯನ್ ಫ್ರೆಂಚ್","fr-CH":"ಸ್ವಿಸ್ ಫ್ರೆಂಚ್",frc:"ಕಾಜುನ್ ಫ್ರೆಂಚ್",frm:"ಮಧ್ಯ ಫ್ರೆಂಚ್",fro:"ಪ್ರಾಚೀನ ಫ್ರೆಂಚ್",frr:"ಉತ್ತರ ಫ್ರಿಸಿಯನ್",frs:"ಪೂರ್ವ ಫ್ರಿಸಿಯನ್",fur:"ಫ್ರಿಯುಲಿಯನ್",fy:"ಪಶ್ಚಿಮ ಫ್ರಿಸಿಯನ್",ga:"ಐರಿಷ್",gaa:"ಗ",gag:"ಗಗೌಜ್",gan:"ಗಾನ್ ಚೀನೀಸ್",gay:"ಗಾಯೋ",gba:"ಗ್ಬಾಯಾ",gd:"ಸ್ಕಾಟಿಶ್ ಗೆಲಿಕ್",gez:"ಗೀಝ್",gil:"ಗಿಲ್ಬರ್ಟೀಸ್",gl:"ಗ್ಯಾಲಿಶಿಯನ್",gmh:"ಮಧ್ಯ ಹೈ ಜರ್ಮನ್",gn:"ಗೌರಾನಿ",goh:"ಪ್ರಾಚೀನ ಹೈ ಜರ್ಮನ್",gon:"ಗೊಂಡಿ",gor:"ಗೊರೊಂಟಾಲೋ",got:"ಗೋಥಿಕ್",grb:"ಗ್ರೇಬೋ",grc:"ಪ್ರಾಚೀನ ಗ್ರೀಕ್",gsw:"ಸ್ವಿಸ್ ಜರ್ಮನ್",gu:"ಗುಜರಾತಿ",guz:"ಗುಸಿ",gv:"ಮ್ಯಾಂಕ್ಸ್",gwi:"ಗ್ವಿಚ್‌ಇನ್",ha:"ಹೌಸಾ",hai:"ಹೈಡಾ",hak:"ಹಕ್",haw:"ಹವಾಯಿಯನ್",he:"ಹೀಬ್ರೂ",hi:"ಹಿಂದಿ",hil:"ಹಿಲಿಗೇನನ್",hit:"ಹಿಟ್ಟಿಟೆ",hmn:"ಮೋಂಗ್",ho:"ಹಿರಿ ಮೊಟು",hr:"ಕ್ರೊಯೇಶಿಯನ್",hsb:"ಅಪ್ಪರ್ ಸರ್ಬಿಯನ್",hsn:"ಶಯಾಂಗ್ ಚೀನೀಸೇ",ht:"ಹೈಟಿಯನ್ ಕ್ರಿಯೋಲಿ",hu:"ಹಂಗೇರಿಯನ್",hup:"ಹೂಪಾ",hy:"ಅರ್ಮೇನಿಯನ್",hz:"ಹೆರೆರೊ",ia:"ಇಂಟರ್‌ಲಿಂಗ್ವಾ",iba:"ಇಬಾನ್",ibb:"ಇಬಿಬಿಯೋ",id:"ಇಂಡೋನೇಶಿಯನ್",ie:"ಇಂಟರ್ಲಿಂಗ್",ig:"ಇಗ್ಬೊ",ii:"ಸಿಚುಅನ್ ಯಿ",ik:"ಇನುಪಿಯಾಕ್",ilo:"ಇಲ್ಲಿಕೋ",inh:"ಇಂಗುಷ್",io:"ಇಡೊ",is:"ಐಸ್‌ಲ್ಯಾಂಡಿಕ್",it:"ಇಟಾಲಿಯನ್",iu:"ಇನುಕ್ಟಿಟುಟ್",ja:"ಜಾಪನೀಸ್",jbo:"ಲೊಜ್ಬಾನ್",jgo:"ನೊಂಬಾ",jmc:"ಮ್ಯಕಮೆ",jpr:"ಜೂಡಿಯೋ-ಪರ್ಶಿಯನ್",jrb:"ಜೂಡಿಯೋ-ಅರೇಬಿಕ್",jv:"ಜಾವಾನೀಸ್",ka:"ಜಾರ್ಜಿಯನ್",kaa:"ಕಾರಾ-ಕಲ್ಪಾಕ್",kab:"ಕಬೈಲ್",kac:"ಕಚಿನ್",kaj:"ಜ್ಜು",kam:"ಕಂಬಾ",kaw:"ಕಾವಿ",kbd:"ಕಬರ್ಡಿಯನ್",kcg:"ಟ್ಯಾಪ್",kde:"ಮ್ಯಾಕೊಂಡ್",kea:"ಕಬುವೆರ್ಡಿಯನು",kfo:"ಕೋರೋ",kg:"ಕಾಂಗೋ",kha:"ಖಾಸಿ",kho:"ಖೋಟಾನೀಸ್",khq:"ಕೊಯ್ರ ಚೀನಿ",ki:"ಕಿಕುಯು",kj:"ಕ್ವಾನ್‌ಯಾಮಾ",kk:"ಕಝಕ್",kkj:"ಕಾಕೊ",kl:"ಕಲಾಲ್ಲಿಸುಟ್",kln:"ಕಲೆಂಜಿನ್",km:"ಖಮೇರ್",kmb:"ಕಿಂಬುಂಡು",kn:"ಕನ್ನಡ",ko:"ಕೊರಿಯನ್",koi:"ಕೋಮಿ-ಪರ್ಮ್ಯಕ್",kok:"ಕೊಂಕಣಿ",kos:"ಕೊಸರಿಯನ್",kpe:"ಕಪೆಲ್ಲೆ",kr:"ಕನುರಿ",krc:"ಕರಚಯ್-ಬಲ್ಕಾರ್",krl:"ಕರೇಲಿಯನ್",kru:"ಕುರುಖ್",ks:"ಕಾಶ್ಮೀರಿ",ksb:"ಶಂಬಲ",ksf:"ಬಫಿಯ",ksh:"ಕಲೊಗ್ನಿಯನ್",ku:"ಕುರ್ದಿಷ್",kum:"ಕುಮೈಕ್",kut:"ಕುಟೇನಾಯ್",kv:"ಕೋಮಿ",kw:"ಕಾರ್ನಿಷ್",ky:"ಕಿರ್ಗಿಜ್",la:"ಲ್ಯಾಟಿನ್",lad:"ಲ್ಯಾಡಿನೋ",lag:"ಲಾಂಗಿ",lah:"ಲಹಂಡಾ",lam:"ಲಂಬಾ",lb:"ಲಕ್ಸಂಬರ್ಗಿಷ್",lez:"ಲೆಜ್ಘಿಯನ್",lg:"ಗಾಂಡಾ",li:"ಲಿಂಬರ್ಗಿಶ್",lkt:"ಲಕೊಟ",ln:"ಲಿಂಗಾಲ",lo:"ಲಾವೋ",lol:"ಮೊಂಗೋ",lou:"ಲೂಯಿಸಿಯಾನ ಕ್ರಿಯೋಲ್",loz:"ಲೋಝಿ",lrc:"ಉತ್ತರ ಲೂರಿ",lt:"ಲಿಥುವೇನಿಯನ್",lu:"ಲೂಬಾ-ಕಟಾಂಗಾ",lua:"ಲುಬ-ಲುಲಾ",lui:"ಲೂಯಿಸೆನೋ",lun:"ಲುಂಡಾ",luo:"ಲುವೋ",lus:"ಮಿಝೋ",luy:"ಲುಯಿಯ",lv:"ಲಾಟ್ವಿಯನ್",mad:"ಮದುರೀಸ್",mag:"ಮಗಾಹಿ",mai:"ಮೈಥಿಲಿ",mak:"ಮಕಾಸರ್",man:"ಮಂಡಿಂಗೊ",mas:"ಮಸಾಯ್",mdf:"ಮೋಕ್ಷ",mdr:"ಮಂದಾರ್",men:"ಮೆಂಡೆ",mer:"ಮೆರು",mfe:"ಮೊರಿಸನ್",mg:"ಮಲಗಾಸಿ",mga:"ಮಧ್ಯ ಐರಿಷ್",mgh:"ಮ್ಯಖುವಾ- ಮೀಟ್ಟೊ",mgo:"ಮೆಟಾ",mh:"ಮಾರ್ಶಲ್ಲೀಸ್",mi:"ಮಾವೋರಿ",mic:"ಮಿಕ್‌ಮ್ಯಾಕ್",min:"ಮಿನಂಗ್‌ಕಬಾವು",mk:"ಮೆಸಿಡೋನಿಯನ್",ml:"ಮಲಯಾಳಂ",mn:"ಮಂಗೋಲಿಯನ್",mnc:"ಮಂಚು",mni:"ಮಣಿಪುರಿ",moh:"ಮೊಹಾವ್ಕ್",mos:"ಮೊಸ್ಸಿ",mr:"ಮರಾಠಿ",ms:"ಮಲಯ್",mt:"ಮಾಲ್ಟೀಸ್",mua:"ಮುಂಡಂಗ್",mus:"ಕ್ರೀಕ್",mwl:"ಮಿರಾಂಡೀಸ್",mwr:"ಮಾರ್ವಾಡಿ",my:"ಬರ್ಮೀಸ್",myv:"ಎರ್ಝ್ಯಾ",mzn:"ಮಜಂದೆರಾನಿ",na:"ನೌರು",nan:"ನಾನ್",nap:"ನಿಯಾಪೊಲಿಟನ್",naq:"ನಮ",nb:"ನಾರ್ವೆಜಿಯನ್ ಬೊಕ್ಮಲ್",nd:"ಉತ್ತರ ದೆಬೆಲೆ",nds:"ಲೋ ಜರ್ಮನ್","nds-NL":"ಲೋ ಸ್ಯಾಕ್ಸನ್",ne:"ನೇಪಾಳಿ","new":"ನೇವಾರೀ",ng:"ಡೋಂಗಾ",nia:"ನಿಯಾಸ್",niu:"ನಿಯುವನ್",nl:"ಡಚ್","nl-BE":"ಫ್ಲೆಮಿಷ್",nmg:"ಖ್ವಾಸಿಯೊ",nn:"ನಾರ್ವೇಜಿಯನ್ ನೈನಾರ್ಸ್ಕ್",nnh:"ನಿಂಬೂನ್",no:"ನಾರ್ವೇಜಿಯನ್",nog:"ನೊಗಾಯ್",non:"ಪ್ರಾಚೀನ ನೋರ್ಸ್",nqo:"ಎನ್‌ಕೋ",nr:"ದಕ್ಷಿಣ ದೆಬೆಲೆ",nso:"ಉತ್ತರ ಸೋಥೋ",nus:"ನೂಯರ್",nv:"ನವಾಜೊ",nwc:"ಶಾಸ್ತ್ರೀಯ ನೇವಾರಿ",ny:"ನ್ಯಾಂಜಾ",nym:"ನ್ಯಾಮ್‌ವೆಂಜಿ",nyn:"ನ್ಯಾನ್‌ಕೋಲೆ",nyo:"ನ್ಯೋರೋ",nzi:"ಜೀಮಾ",oc:"ಒಸಿಟನ್",oj:"ಒಜಿಬ್ವಾ",om:"ಒರೊಮೊ",or:"ಒಡಿಯ",os:"ಒಸ್ಸೆಟಿಕ್",osa:"ಓಸಾಜ್",ota:"ಒಟ್ಟೋಮನ್ ತುರ್ಕಿಷ್",pa:"ಪಂಜಾಬಿ",pag:"ಪಂಗಾಸಿನನ್",pal:"ಪಹ್ಲವಿ",pam:"ಪಂಪಾಂಗಾ",pap:"ಪಪಿಯಾಮೆಂಟೊ",pau:"ಪಲುಆನ್",pcm:"ನೈಜೀರಿಯನ್ ಪಿಡ್ಗಿನ್",peo:"ಪ್ರಾಚೀನ ಪರ್ಶಿಯನ್",phn:"ಫೀನಿಷಿಯನ್",pi:"ಪಾಲಿ",pl:"ಪೊಲಿಶ್",pon:"ಪೋನ್‌‌ಪಿಯನ್",prg:"ಪ್ರಶಿಯನ್",pro:"ಪ್ರಾಚೀನ ಪ್ರೊವೆನ್ಶಿಯಲ್",ps:"ಪಾಷ್ಟೋ",pt:"ಪೋರ್ಚುಗೀಸ್","pt-BR":"ಬ್ರೆಜಿಲಿಯನ್ ಪೋರ್ಚುಗೀಸ್","pt-PT":"ಯೂರೋಪಿಯನ್ ಪೋರ್ಚುಗೀಸ್",qu:"ಕ್ವೆಚುವಾ",quc:"ಕಿಷೆ",raj:"ರಾಜಸ್ಥಾನಿ",rap:"ರಾಪಾನುಯಿ",rar:"ರಾರೋಟೊಂಗನ್",rm:"ರೊಮಾನ್ಶ್",rn:"ರುಂಡಿ",ro:"ರೊಮೇನಿಯನ್","ro-MD":"ಮಾಲ್ಡೇವಿಯನ್",rof:"ರೊಂಬೊ",rom:"ರೋಮಾನಿ",root:"ರೂಟ್",ru:"ರಷ್ಯನ್",rup:"ಅರೋಮಾನಿಯನ್",rw:"ಕಿನ್ಯಾರ್‌ವಾಂಡಾ",rwk:"ರುವ",sa:"ಸಂಸ್ಕೃತ",sad:"ಸಂಡಾವೇ",sah:"ಸಖಾ",sam:"ಸಮರಿಟನ್ ಅರಾಮಿಕ್",saq:"ಸಂಬುರು",sas:"ಸಸಾಕ್",sat:"ಸಂತಾಲಿ",sba:"ನಂಬೇ",sbp:"ಸಂಗು",sc:"ಸರ್ಡೀನಿಯನ್",scn:"ಸಿಸಿಲಿಯನ್",sco:"ಸ್ಕೋಟ್ಸ್",sd:"ಸಿಂಧಿ",sdh:"ದಕ್ಷಿಣ ಕುರ್ದಿಶ್",se:"ಉತ್ತರ ಸಾಮಿ",seh:"ಸೆನ",sel:"ಸೆಲ್ಕಪ್",ses:"ಕೊಯ್ರಬೊರೊ ಸೆನ್ನಿ",sg:"ಸಾಂಗೋ",sga:"ಪ್ರಾಚೀನ ಐರಿಷ್",sh:"ಸರ್ಬೋ-ಕ್ರೊಯೇಶಿಯನ್",shi:"ಟಷೆಲ್‍ಹಿಟ್",shn:"ಶಾನ್",si:"ಸಿಂಹಳ",sid:"ಸಿಡಾಮೋ",sk:"ಸ್ಲೋವಾಕ್",sl:"ಸ್ಲೋವೇನಿಯನ್",sm:"ಸಮೋವನ್",sma:"ದಕ್ಷಿಣ ಸಾಮಿ",smj:"ಲೂಲ್ ಸಾಮಿ",smn:"ಇನಾರಿ ಸಮೀ",sms:"ಸ್ಕೋಟ್ ಸಾಮಿ",sn:"ಶೋನಾ",snk:"ಸೋನಿಂಕೆ",so:"ಸೊಮಾಲಿ",sog:"ಸೋಗ್ಡಿಯನ್",sq:"ಅಲ್ಬೇನಿಯನ್",sr:"ಸೆರ್ಬಿಯನ್",srn:"ಸ್ರಾನನ್ ಟೋಂಗೋ",srr:"ಸೇರೇರ್",ss:"ಸ್ವಾತಿ",ssy:"ಸಹೊ",st:"ದಕ್ಷಿಣ ಸೋಥೋ",su:"ಸುಂಡಾನೀಸ್",suk:"ಸುಕುಮಾ",sus:"ಸುಸು",sux:"ಸುಮೇರಿಯನ್",sv:"ಸ್ವೀಡಿಷ್",sw:"ಸ್ವಹಿಲಿ","sw-CD":"ಕಾಂಗೊ ಸ್ವಹಿಲಿ",swb:"ಕೊಮೊರಿಯನ್",syc:"ಶಾಸ್ತ್ರೀಯ ಸಿರಿಯಕ್",syr:"ಸಿರಿಯಾಕ್",ta:"ತಮಿಳು",te:"ತೆಲುಗು",tem:"ಟಿಮ್ನೆ",teo:"ಟೆಸೊ",ter:"ಟೆರೆನೋ",tet:"ಟೇಟಮ್",tg:"ತಾಜಿಕ್",th:"ಥಾಯ್",ti:"ಟಿಗ್ರಿನ್ಯಾ",tig:"ಟೈಗ್ರೆ",tiv:"ಟಿವ್",tk:"ಟರ್ಕ್‌ಮೆನ್",tkl:"ಟೊಕೆಲಾವ್",tl:"ಟ್ಯಾಗಲೋಗ್",tlh:"ಕ್ಲಿಂಗನ್",tli:"ಟ್ಲಿಂಗಿಟ್",tmh:"ಟಮಾಷೆಕ್",tn:"ಸ್ವಾನಾ",to:"ಟೋಂಗನ್",tog:"ನ್ಯಾಸಾ ಟೋಂಗಾ",tpi:"ಟೋಕ್ ಪಿಸಿನ್",tr:"ಟರ್ಕಿಶ್",trv:"ಟರೊಕೊ",ts:"ಸೋಂಗಾ",tsi:"ಸಿಂಶಿಯನ್",tt:"ಟಾಟರ್",tum:"ತುಂಬುಕಾ",tvl:"ಟುವಾಲು",tw:"ಟ್ವಿ",twq:"ಟಸವಕ್",ty:"ಟಹೀಟಿಯನ್",tyv:"ಟುವಿನಿಯನ್",tzm:"ಮಧ್ಯ ಅಟ್ಲಾಸ್ ಟಮಜೈಟ್",udm:"ಉಡ್‌ಮುರ್ಟ್",ug:"ಉಯಿಘರ್",uga:"ಉಗಾರಿಟಿಕ್",uk:"ಉಕ್ರೇನಿಯನ್",umb:"ಉಂಬುಂಡು",ur:"ಉರ್ದು",uz:"ಉಜ್ಬೇಕ್",vai:"ವಾಯಿ",ve:"ವೆಂಡಾ",vi:"ವಿಯೆಟ್ನಾಮೀಸ್",vo:"ವೋಲಾಪುಕ್",vot:"ವೋಟಿಕ್",vun:"ವುಂಜೊ",wa:"ವಾಲೂನ್",wae:"ವಾಲ್ಸರ್",wal:"ವಲಾಯ್ತಾ",war:"ವರಾಯ್",was:"ವಾಷೋ",wbp:"ವಾರ್ಲ್‌ಪಿರಿ",wo:"ವೋಲೋಫ್",wuu:"ವು",xal:"ಕಲ್ಮೈಕ್",xh:"ಕ್ಸೋಸ",xog:"ಸೊಗ",yao:"ಯಾವೊ",yap:"ಯಪೀಸೆ",yav:"ಯಾಂಗ್ಬೆನ್",ybb:"ಯೆಂಬಾ",yi:"ಯಿಡ್ಡಿಶ್",yo:"ಯೊರುಬಾ",yue:"ಕ್ಯಾಂಟನೀಸ್",za:"ಝೂವಾಂಗ್",zap:"ಝೋಪೊಟೆಕ್",zbl:"ಬ್ಲಿಸ್ಸಿಂಬಲ್ಸ್",zen:"ಝೆನಾಗಾ",zgh:"ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಮೊರೊಕ್ಕನ್ ಟಮಜೈಟ್",zh:"ಚೈನೀಸ್","zh-Hans":"ಚೈನೀಸ್ (ಸರಳೀಕೃತ)","zh-Hant":"ಸಾಂಪ್ರದಾಯಿಕ ಮ್ಯಾಂಡರಿನ್ ಚೈನೀಸ್",zu:"ಜುಲು",zun:"ಝೂನಿ",zza:"ಜಾಝಾ"},scriptNames:{Cyrl:"ಸಿರಿಲಿಕ್",Latn:"ಲ್ಯಾಟಿನ್",Arab:"ಅರೇಬಿಕ್",Guru:"ಗುರ್ಮುಖಿ",Tfng:"ಟಿಫಿನಾಘ್",Vaii:"ವಾಯ್",Hans:"ಸರಳೀಕೃತ",Hant:"ಸಾಂಪ್ರದಾಯಿಕ"}},ko:{rtl:false,languageNames:{aa:"아파르어",ab:"압카즈어",ace:"아체어",ach:"아콜리어",ada:"아당메어",ady:"아디게어",ae:"아베스타어",aeb:"튀니지 아랍어",af:"아프리칸스어",afh:"아프리힐리어",agq:"아그햄어",ain:"아이누어",ak:"아칸어",akk:"아카드어",ale:"알류트어",alt:"남부 알타이어",am:"암하라어",an:"아라곤어",ang:"고대 영어",anp:"앙가어",ar:"아랍어","ar-001":"현대 표준 아랍어",arc:"아람어",arn:"마푸둥군어",arp:"아라파호어",arq:"알제리 아랍어",ars:"아랍어(나즈디)",arw:"아라와크어",ary:"모로코 아랍어",arz:"이집트 아랍어",as:"아삼어",asa:"아수어",ast:"아스투리아어",av:"아바릭어",awa:"아와히어",ay:"아이마라어",az:"아제르바이잔어",ba:"바슈키르어",bal:"발루치어",ban:"발리어",bas:"바사어",bax:"바문어",bbj:"고말라어",be:"벨라루스어",bej:"베자어",bem:"벰바어",bez:"베나어",bfd:"바푸트어",bg:"불가리아어",bgn:"서부 발로치어",bho:"호즈푸리어",bi:"비슬라마어",bik:"비콜어",bin:"비니어",bkm:"콤어",bla:"식시카어",bm:"밤바라어",bn:"벵골어",bo:"티베트어",br:"브르타뉴어",bra:"브라지어",brh:"브라후이어",brx:"보도어",bs:"보스니아어",bss:"아쿠즈어",bua:"부리아타",bug:"부기어",bum:"불루어",byn:"브린어",byv:"메둠바어",ca:"카탈로니아어",cad:"카도어",car:"카리브어",cay:"카유가어",cch:"앗삼어",ccp:"차크마어",ce:"체첸어",ceb:"세부아노어",cgg:"치가어",ch:"차모로어",chb:"치브차어",chg:"차가타이어",chk:"추크어",chm:"마리어",chn:"치누크 자곤",cho:"촉토어",chp:"치페우얀",chr:"체로키어",chy:"샤이엔어",ckb:"소라니 쿠르드어",co:"코르시카어",cop:"콥트어",cr:"크리어",crh:"크리민 터키어; 크리민 타타르어",crs:"세이셸 크리올 프랑스어",cs:"체코어",csb:"카슈비아어",cu:"교회 슬라브어",cv:"추바시어",cy:"웨일스어",da:"덴마크어",dak:"다코타어",dar:"다르그와어",dav:"타이타어",de:"독일어","de-AT":"독일어(오스트리아)","de-CH":"고지 독일어(스위스)",del:"델라웨어어",den:"슬라브어",dgr:"도그리브어",din:"딩카어",dje:"자르마어",doi:"도그리어",dsb:"저지 소르비아어",dua:"두알라어",dum:"중세 네덜란드어",dv:"디베히어",dyo:"졸라 포니어",dyu:"드율라어",dz:"종카어",dzg:"다장가어",ebu:"엠부어",ee:"에웨어",efi:"이픽어",egy:"고대 이집트어",eka:"이카죽어",el:"그리스어",elx:"엘람어",en:"영어","en-AU":"영어(호주)","en-CA":"영어(캐나다)","en-GB":"영어(영국)","en-US":"영어(미국)",enm:"중세 영어",eo:"에스페란토어",es:"스페인어","es-419":"스페인어(라틴 아메리카)","es-ES":"스페인어(유럽)","es-MX":"스페인어(멕시코)",et:"에스토니아어",eu:"바스크어",ewo:"이원도어",fa:"페르시아어",fan:"팡그어",fat:"판티어",ff:"풀라어",fi:"핀란드어",fil:"필리핀어",fj:"피지어",fo:"페로어",fon:"폰어",fr:"프랑스어","fr-CA":"프랑스어(캐나다)","fr-CH":"프랑스어(스위스)",frc:"케이준 프랑스어",frm:"중세 프랑스어",fro:"고대 프랑스어",frr:"북부 프리지아어",frs:"동부 프리슬란드어",fur:"프리울리어",fy:"서부 프리지아어",ga:"아일랜드어",gaa:"가어",gag:"가가우스어",gan:"간어",gay:"가요어",gba:"그바야어",gbz:"조로아스터 다리어",gd:"스코틀랜드 게일어",gez:"게이즈어",gil:"키리바시어",gl:"갈리시아어",glk:"길라키어",gmh:"중세 고지 독일어",gn:"과라니어",goh:"고대 고지 독일어",gom:"고아 콘칸어",gon:"곤디어",gor:"고론탈로어",got:"고트어",grb:"게르보어",grc:"고대 그리스어",gsw:"독일어(스위스)",gu:"구자라트어",guz:"구시어",gv:"맹크스어",gwi:"그위친어",ha:"하우사어",hai:"하이다어",hak:"하카어",haw:"하와이어",he:"히브리어",hi:"힌디어",hif:"피지 힌디어",hil:"헤리가뇬어",hit:"하타이트어",hmn:"히몸어",ho:"히리 모투어",hr:"크로아티아어",hsb:"고지 소르비아어",hsn:"샹어",ht:"아이티어",hu:"헝가리어",hup:"후파어",hy:"아르메니아어",hz:"헤레로어",ia:"인터링구아",iba:"이반어",ibb:"이비비오어",id:"인도네시아어",ie:"인테르링구에",ig:"이그보어",ii:"쓰촨 이어",ik:"이누피아크어",ilo:"이로코어",inh:"인귀시어",io:"이도어",is:"아이슬란드어",it:"이탈리아어",iu:"이눅티투트어",ja:"일본어",jbo:"로반어",jgo:"응곰바어",jmc:"마차메어",jpr:"유대-페르시아어",jrb:"유대-아라비아어",jv:"자바어",ka:"조지아어",kaa:"카라칼파크어",kab:"커바일어",kac:"카친어",kaj:"까꼬토끄어",kam:"캄바어",kaw:"카위어",kbd:"카바르디어",kbl:"카넴부어",kcg:"티얍어",kde:"마콘데어",kea:"크리올어",kfo:"코로어",kg:"콩고어",kha:"카시어",kho:"호탄어",khq:"코이라 친니어",khw:"코와르어",ki:"키쿠유어",kj:"쿠안야마어",kk:"카자흐어",kkj:"카코어",kl:"그린란드어",kln:"칼렌진어",km:"크메르어",kmb:"킴분두어",kn:"칸나다어",ko:"한국어",koi:"코미페르먀크어",kok:"코카니어",kos:"코스라이엔어",kpe:"크펠레어",kr:"칸누리어",krc:"카라챠이-발카르어",krl:"카렐리야어",kru:"쿠르크어",ks:"카슈미르어",ksb:"샴발라어",ksf:"바피아어",ksh:"콜로그니안어",ku:"쿠르드어",kum:"쿠믹어",kut:"쿠테네어",kv:"코미어",kw:"콘월어",ky:"키르기스어",la:"라틴어",lad:"라디노어",lag:"랑기어",lah:"라한다어",lam:"람바어",lb:"룩셈부르크어",lez:"레즈기안어",lfn:"링구아 프랑카 노바",lg:"간다어",li:"림버거어",lkt:"라코타어",ln:"링갈라어",lo:"라오어",lol:"몽고어",lou:"루이지애나 크리올어",loz:"로지어",lrc:"북부 루리어",lt:"리투아니아어",lu:"루바-카탄가어",lua:"루바-룰루아어",lui:"루이세노어",lun:"룬다어",luo:"루오어",lus:"루샤이어",luy:"루야어",lv:"라트비아어",mad:"마두라어",maf:"마파어",mag:"마가히어",mai:"마이틸리어",mak:"마카사어",man:"만딩고어",mas:"마사이어",mde:"마바어",mdf:"모크샤어",mdr:"만다르어",men:"멘데어",mer:"메루어",mfe:"모리스얀어",mg:"말라가시어",mga:"중세 아일랜드어",mgh:"마크후와-메토어",mgo:"메타어",mh:"마셜어",mi:"마오리어",mic:"미크맥어",min:"미낭카바우어",mk:"마케도니아어",ml:"말라얄람어",mn:"몽골어",mnc:"만주어",mni:"마니푸리어",moh:"모호크어",mos:"모시어",mr:"마라티어",mrj:"서부 마리어",ms:"말레이어",mt:"몰타어",mua:"문당어",mus:"크리크어",mwl:"미란데어",mwr:"마르와리어",my:"버마어",mye:"미예네어",myv:"엘즈야어",mzn:"마잔데라니어",na:"나우루어",nan:"민난어",nap:"나폴리어",naq:"나마어",nb:"노르웨이어(보크말)",nd:"북부 은데벨레어",nds:"저지 독일어","nds-NL":"저지 색슨어",ne:"네팔어","new":"네와르어",ng:"느동가어",nia:"니아스어",niu:"니웨언어",nl:"네덜란드어","nl-BE":"플라망어",nmg:"크와시오어",nn:"노르웨이어(니노르스크)",nnh:"느기엠본어",no:"노르웨이어",nog:"노가이어",non:"고대 노르웨이어",nqo:"응코어",nr:"남부 은데벨레어",nso:"북부 소토어",nus:"누에르어",nv:"나바호어",nwc:"고전 네와르어",ny:"냔자어",nym:"니암웨지어",nyn:"니안콜어",nyo:"뉴로어",nzi:"느지마어",oc:"오크어",oj:"오지브와어",om:"오로모어",or:"오리야어",os:"오세트어",osa:"오세이지어",ota:"오스만 터키어",pa:"펀잡어",pag:"판가시난어",pal:"팔레비어",pam:"팜팡가어",pap:"파피아먼토어",pau:"팔라우어",pcm:"나이지리아 피진어",peo:"고대 페르시아어",phn:"페니키아어",pi:"팔리어",pl:"폴란드어",pnt:"폰틱어",pon:"폼페이어",prg:"프러시아어",pro:"고대 프로방스어",ps:"파슈토어",pt:"포르투갈어","pt-BR":"포르투갈어(브라질)","pt-PT":"포르투갈어(유럽)",qu:"케추아어",quc:"키체어",raj:"라자스탄어",rap:"라파뉴이",rar:"라로통가어",rm:"로만시어",rn:"룬디어",ro:"루마니아어","ro-MD":"몰도바어",rof:"롬보어",rom:"집시어",root:"어근",ru:"러시아어",rue:"루신어",rup:"아로마니아어",rw:"르완다어",rwk:"르와어",sa:"산스크리트어",sad:"산다웨어",sah:"야쿠트어",sam:"사마리아 아랍어",saq:"삼부루어",sas:"사사크어",sat:"산탈리어",sba:"느감바이어",sbp:"상구어",sc:"사르디니아어",scn:"시칠리아어",sco:"스코틀랜드어",sd:"신디어",sdh:"남부 쿠르드어",se:"북부 사미어",see:"세네카어",seh:"세나어",sel:"셀쿠프어",ses:"코이야보로 세니어",sg:"산고어",sga:"고대 아일랜드어",sh:"세르비아-크로아티아어",shi:"타셸히트어",shn:"샨어",shu:"차디언 아라비아어",si:"스리랑카어",sid:"시다모어",sk:"슬로바키아어",sl:"슬로베니아어",sm:"사모아어",sma:"남부 사미어",smj:"룰레 사미어",smn:"이나리 사미어",sms:"스콜트 사미어",sn:"쇼나어",snk:"소닌케어",so:"소말리아어",sog:"소그디엔어",sq:"알바니아어",sr:"세르비아어",srn:"스라난 통가어",srr:"세레르어",ss:"시스와티어",ssy:"사호어",st:"남부 소토어",su:"순다어",suk:"수쿠마어",sus:"수수어",sux:"수메르어",sv:"스웨덴어",sw:"스와힐리어","sw-CD":"콩고 스와힐리어",swb:"코모로어",syc:"고전 시리아어",syr:"시리아어",ta:"타밀어",te:"텔루구어",tem:"팀니어",teo:"테조어",ter:"테레노어",tet:"테툼어",tg:"타지크어",th:"태국어",ti:"티그리냐어",tig:"티그레어",tiv:"티브어",tk:"투르크멘어",tkl:"토켈라우제도어",tkr:"차후르어",tl:"타갈로그어",tlh:"클링온어",tli:"틀링깃족어",tly:"탈리쉬어",tmh:"타마섹어",tn:"츠와나어",to:"통가어",tog:"니아사 통가어",tpi:"토크 피신어",tr:"터키어",trv:"타로코어",ts:"총가어",tsi:"트심시안어",tt:"타타르어",tum:"툼부카어",tvl:"투발루어",tw:"트위어",twq:"타사와크어",ty:"타히티어",tyv:"투비니안어",tzm:"중앙 모로코 타마지트어",udm:"우드말트어",ug:"위구르어",uga:"유가리틱어",uk:"우크라이나어",umb:"움분두어",ur:"우르두어",uz:"우즈베크어",vai:"바이어",ve:"벤다어",vi:"베트남어",vo:"볼라퓌크어",vot:"보틱어",vun:"분조어",wa:"왈론어",wae:"월저어",wal:"월라이타어",war:"와라이어",was:"와쇼어",wbp:"왈피리어",wo:"월로프어",wuu:"우어",xal:"칼미크어",xh:"코사어",xog:"소가어",yao:"야오족어",yap:"얍페세어",yav:"양본어",ybb:"옘바어",yi:"이디시어",yo:"요루바어",yue:"광둥어",za:"주앙어",zap:"사포테크어",zbl:"블리스 심볼",zen:"제나가어",zgh:"표준 모로코 타마지트어",zh:"중국어","zh-Hans":"중국어(만다린, 간체)","zh-Hant":"중국어(만다린, 번체)",zu:"줄루어",zun:"주니어",zza:"자자어"},scriptNames:{Cyrl:"키릴 문자",Latn:"로마자",Arab:"아랍 문자",Guru:"구르무키 문자",Tfng:"티피나그 문자",Vaii:"바이 문자",Hans:"간체",Hant:"번체"}},ku:{rtl:false,languageNames:{aa:"afarî",ab:"abxazî",ace:"açehî",ady:"adîgeyî",af:"afrîkansî",ain:"aynuyî",ale:"alêwîtî",am:"amharî",an:"aragonî",ar:"erebî","ar-001":"erebiya standard",as:"asamî",ast:"astûrî",av:"avarî",ay:"aymarayî",az:"azerî",ba:"başkîrî",ban:"balînî",be:"belarusî",bem:"bembayî",bg:"bulgarî",bho:"bojpûrî",bi:"bîslamayî",bla:"blakfotî",bm:"bambarayî",bn:"bengalî",bo:"tîbetî",br:"bretonî",bs:"bosnî",bug:"bugî",ca:"katalanî",ce:"çeçenî",ceb:"sebwanoyî",ch:"çamoroyî",chk:"çûkî",chm:"marî",chr:"çerokî",chy:"çeyenî",ckb:"soranî",co:"korsîkayî",cs:"çekî",cv:"çuvaşî",cy:"weylsî",da:"danmarkî",de:"elmanî","de-AT":"elmanî (Awistirya)","de-CH":"elmanî (Swîsre)",dsb:"sorbiya jêrîn",dua:"diwalayî",dv:"divehî",dz:"conxayî",ee:"eweyî",el:"yewnanî",en:"îngilîzî","en-AU":"îngilîzî (Awistralya)","en-CA":"îngilîzî (Kanada)","en-GB":"îngilîzî (Keyaniya Yekbûyî)","en-US":"îngilîzî (Dewletên Yekbûyî yên Amerîkayê)",eo:"esperantoyî",es:"spanî","es-419":"spanî (Amerîkaya Latînî)","es-ES":"spanî (Spanya)","es-MX":"spanî (Meksîk)",et:"estonî",eu:"baskî",fa:"farisî",ff:"fulahî",fi:"fînî",fil:"fîlîpînoyî",fj:"fîjî",fo:"ferî",fr:"frensî","fr-CA":"frensî (Kanada)","fr-CH":"frensî (Swîsre)",fur:"friyolî",fy:"frîsî",ga:"îrî",gd:"gaelîka skotî",gil:"kîrîbatî",gl:"galîsî",gn:"guwaranî",gor:"gorontaloyî",gsw:"elmanîşî",gu:"gujaratî",gv:"manksî",ha:"hawsayî",haw:"hawayî",he:"îbranî",hi:"hindî",hil:"hîlîgaynonî",hr:"xirwatî",hsb:"sorbiya jorîn",ht:"haîtî",hu:"mecarî",hy:"ermenî",hz:"hereroyî",ia:"interlingua",id:"indonezî",ig:"îgboyî",ilo:"îlokanoyî",inh:"îngûşî",io:"îdoyî",is:"îzlendî",it:"îtalî",iu:"înuîtî",ja:"japonî",jbo:"lojbanî",jv:"javayî",ka:"gurcî",kab:"kabîlî",kea:"kapverdî",kk:"qazaxî",kl:"kalalîsûtî",km:"ximêrî",kn:"kannadayî",ko:"koreyî",kok:"konkanî",ks:"keşmîrî",ksh:"rîpwarî",ku:"kurdî",kv:"komî",kw:"kornî",ky:"kirgizî",lad:"ladînoyî",lb:"luksembûrgî",lez:"lezgînî",lg:"lugandayî",li:"lîmbûrgî",lkt:"lakotayî",ln:"lingalayî",lo:"lawsî",lrc:"luriya bakur",lt:"lîtwanî",lv:"latviyayî",mad:"madurayî",mas:"masayî",mdf:"mokşayî",mg:"malagasî",mh:"marşalî",mi:"maorî",mic:"mîkmakî",min:"mînangkabawî",mk:"makedonî",ml:"malayalamî",mn:"mongolî",moh:"mohawkî",mr:"maratî",ms:"malezî",mt:"maltayî",my:"burmayî",myv:"erzayî",mzn:"mazenderanî",na:"nawrûyî",nap:"napolîtanî",nb:"norwecî (bokmål)","nds-NL":"nds (Holenda)",ne:"nepalî",niu:"nîwî",nl:"holendî","nl-BE":"flamî",nn:"norwecî (nynorsk)",nso:"sotoyiya bakur",nv:"navajoyî",oc:"oksîtanî",om:"oromoyî",or:"oriyayî",os:"osetî",pa:"puncabî",pam:"kapampanganî",pap:"papyamentoyî",pau:"palawî",pl:"polonî",prg:"prûsyayî",ps:"peştûyî",pt:"portugalî","pt-BR":"portugalî (Brazîl)","pt-PT":"portugalî (Portûgal)",qu:"keçwayî",rap:"rapanuyî",rar:"rarotongî",rm:"romancî",ro:"romanî","ro-MD":"romanî (Moldova)",ru:"rusî",rup:"aromanî",rw:"kînyariwandayî",sa:"sanskrîtî",sc:"sardînî",scn:"sicîlî",sco:"skotî",sd:"sindhî",se:"samiya bakur",si:"kîngalî",sk:"slovakî",sl:"slovenî",sm:"samoayî",smn:"samiya înarî",sn:"şonayî",so:"somalî",sq:"elbanî",sr:"sirbî",srn:"sirananî",ss:"swazî",st:"sotoyiya başûr",su:"sundanî",sv:"swêdî",sw:"swahîlî","sw-CD":"swahîlî (Kongo - Kînşasa)",swb:"komorî",syr:"siryanî",ta:"tamîlî",te:"telûgûyî",tet:"tetûmî",tg:"tacikî",th:"tayî",ti:"tigrînî",tk:"tirkmenî",tlh:"klîngonî",tn:"tswanayî",to:"tongî",tpi:"tokpisinî",tr:"tirkî",trv:"tarokoyî",ts:"tsongayî",tt:"teterî",tum:"tumbukayî",tvl:"tuvalûyî",ty:"tahîtî",tzm:"temazîxtî",udm:"udmurtî",ug:"oygurî",uk:"ukraynî",ur:"urdûyî",uz:"ozbekî",vi:"viyetnamî",vo:"volapûkî",wa:"walonî",war:"warayî",wo:"wolofî",xh:"xosayî",yi:"yidîşî",yo:"yorubayî",yue:"kantonî","zh-Hans":"zh (Hans)","zh-Hant":"zh (Hant)",zu:"zuluyî",zza:"zazakî"},scriptNames:{Cyrl:"kirîlî",Latn:"latînî",Arab:"erebî"}},lij:{rtl:false,languageNames:{},scriptNames:{}},lt:{rtl:false,languageNames:{aa:"afarų",ab:"abchazų",ace:"ačinezų",ach:"akolių",ada:"adangmų",ady:"adygėjų",ae:"avestų",aeb:"Tuniso arabų",af:"afrikanų",afh:"afrihili",agq:"aghemų",ain:"ainų",ak:"akanų",akk:"akadianų",akz:"alabamiečių",ale:"aleutų",aln:"albanų kalbos gegų tarmė",alt:"pietų Altajaus",am:"amharų",an:"aragonesų",ang:"senoji anglų",anp:"angikų",ar:"arabų","ar-001":"šiuolaikinė standartinė arabų",arc:"aramaikų",arn:"mapudungunų",aro:"araonų",arp:"arapahų",arq:"Alžyro arabų",arw:"aravakų",ary:"Maroko arabų",arz:"Egipto arabų",as:"asamų",asa:"asu",ase:"Amerikos ženklų kalba",ast:"asturianų",av:"avarikų",avk:"kotava",awa:"avadhi",ay:"aimarų",az:"azerbaidžaniečių",ba:"baškirų",bal:"baluči",ban:"baliečių",bar:"bavarų",bas:"basų",bax:"bamunų",bbc:"batak toba",bbj:"ghomalų",be:"baltarusių",bej:"bėjų",bem:"bembų",bew:"betavi",bez:"benų",bfd:"bafutų",bfq:"badaga",bg:"bulgarų",bgn:"vakarų beludžių",bho:"baučpuri",bi:"bislama",bik:"bikolų",bin:"bini",bjn:"bandžarų",bkm:"komų",bla:"siksikų",bm:"bambarų",bn:"bengalų",bo:"tibetiečių",bpy:"bišnuprijos",bqi:"bakhtiari",br:"bretonų",bra:"brajų",brh:"brahujų",brx:"bodo",bs:"bosnių",bss:"akūsų",bua:"buriatų",bug:"buginezų",bum:"bulu",byn:"blin",byv:"medumbų",ca:"katalonų",cad:"kado",car:"karibų",cay:"kaijūgų",cch:"atsamų",ccp:"Čakma",ce:"čečėnų",ceb:"sebuanų",cgg:"čigų",ch:"čamorų",chb:"čibčų",chg:"čagatų",chk:"čukesų",chm:"marių",chn:"činuk žargonas",cho:"čoktau",chp:"čipvėjų",chr:"čerokių",chy:"čajenų",ckb:"soranių kurdų",co:"korsikiečių",cop:"koptų",cps:"capiznon",cr:"kry",crh:"Krymo turkų",crs:"Seišelių kreolų ir prancūzų",cs:"čekų",csb:"kašubų",cu:"bažnytinė slavų",cv:"čiuvašų",cy:"valų",da:"danų",dak:"dakotų",dar:"dargva",dav:"taitų",de:"vokiečių","de-AT":"Austrijos vokiečių","de-CH":"Šveicarijos aukštutinė vokiečių",del:"delavero",den:"slave",dgr:"dogribų",din:"dinkų",dje:"zarmų",doi:"dogri",dsb:"žemutinių sorbų",dtp:"centrinio Dusuno",dua:"dualų",dum:"Vidurio Vokietijos",dv:"divehų",dyo:"džiola-foni",dyu:"dyulų",dz:"botijų",dzg:"dazagų",ebu:"embu",ee:"evių",efi:"efik",egl:"italų kalbos Emilijos tarmė",egy:"senovės egiptiečių",eka:"ekajuk",el:"graikų",elx:"elamitų",en:"anglų","en-AU":"Australijos anglų","en-CA":"Kanados anglų","en-GB":"Didžiosios Britanijos anglų","en-US":"Jungtinių Valstijų anglų",enm:"Vidurio Anglijos",eo:"esperanto",es:"ispanų","es-419":"Lotynų Amerikos ispanų","es-ES":"Europos ispanų","es-MX":"Meksikos ispanų",esu:"centrinės Aliaskos jupikų",et:"estų",eu:"baskų",ewo:"evondo",ext:"ispanų kalbos Ekstremadūros tarmė",fa:"persų",fan:"fangų",fat:"fanti",ff:"fulahų",fi:"suomių",fil:"filipiniečių",fit:"suomių kalbos Tornedalio tarmė",fj:"fidžių",fo:"farerų",fr:"prancūzų","fr-CA":"Kanados prancūzų","fr-CH":"Šveicarijos prancūzų",frc:"kadžunų prancūzų",frm:"Vidurio Prancūzijos",fro:"senoji prancūzų",frp:"arpitano",frr:"šiaurinių fryzų",frs:"rytų fryzų",fur:"friulių",fy:"vakarų fryzų",ga:"airių",gaa:"ga",gag:"gagaūzų",gan:"kinų kalbos dziangsi tarmė",gay:"gajo",gba:"gbaja",gbz:"zoroastrų dari",gd:"škotų (gėlų)",gez:"gyz",gil:"kiribati",gl:"galisų",glk:"gilaki",gmh:"Vidurio Aukštosios Vokietijos",gn:"gvaranių",goh:"senoji Aukštosios Vokietijos",gom:"Goa konkanių",gon:"gondi",gor:"gorontalo",got:"gotų",grb:"grebo",grc:"senovės graikų",gsw:"Šveicarijos vokiečių",gu:"gudžaratų",guc:"vajų",gur:"frafra",guz:"gusi",gv:"meniečių",gwi:"gvičino",ha:"hausų",hai:"haido",hak:"kinų kalbos hakų tarmė",haw:"havajiečių",he:"hebrajų",hi:"hindi",hif:"Fidžio hindi",hil:"hiligainonų",hit:"hititų",hmn:"hmong",ho:"hiri motu",hr:"kroatų",hsb:"aukštutinių sorbų",hsn:"kinų kalbos hunano tarmė",ht:"Haičio",hu:"vengrų",hup:"hupa",hy:"armėnų",hz:"hererų",ia:"tarpinė",iba:"iban",ibb:"ibibijų",id:"indoneziečių",ie:"interkalba",ig:"igbų",ii:"sičuan ji",ik:"inupiakų",ilo:"ilokų",inh:"ingušų",io:"ido",is:"islandų",it:"italų",iu:"inukitut",izh:"ingrų",ja:"japonų",jam:"Jamaikos kreolų anglų",jbo:"loiban",jgo:"ngombų",jmc:"mačamų",jpr:"judėjų persų",jrb:"judėjų arabų",jut:"danų kalbos jutų tarmė",jv:"javiečių",ka:"gruzinų",kaa:"karakalpakų",kab:"kebailų",kac:"kačinų",kaj:"ju",kam:"kembų",kaw:"kavių",kbd:"kabardinų",kbl:"kanembų",kcg:"tyap",kde:"makondų",kea:"Žaliojo Kyšulio kreolų",ken:"kenyang",kfo:"koro",kg:"Kongo",kgp:"kaingang",kha:"kasi",kho:"kotanezų",khq:"kojra čini",khw:"khovarų",ki:"kikujų",kiu:"kirmanjki",kj:"kuaniama",kk:"kazachų",kkj:"kako",kl:"kalalisut",kln:"kalenjinų",km:"khmerų",kmb:"kimbundu",kn:"kanadų",ko:"korėjiečių",koi:"komių-permių",kok:"konkanių",kos:"kosreanų",kpe:"kpelių",kr:"kanurių",krc:"karačiajų balkarijos",kri:"krio",krj:"kinaray-a",krl:"karelų",kru:"kuruk",ks:"kašmyrų",ksb:"šambalų",ksf:"bafų",ksh:"kolognų",ku:"kurdų",kum:"kumikų",kut:"kutenai",kv:"komi",kw:"kornų",ky:"kirgizų",la:"lotynų",lad:"ladino",lag:"langi",lah:"landa",lam:"lamba",lb:"liuksemburgiečių",lez:"lezginų",lfn:"naujoji frankų kalba",lg:"ganda",li:"limburgiečių",lij:"ligūrų",liv:"lyvių",lkt:"lakotų",lmo:"lombardų",ln:"ngalų",lo:"laosiečių",lol:"mongų",lou:"Luizianos kreolų",loz:"lozių",lrc:"šiaurės luri",lt:"lietuvių",ltg:"latgalių",lu:"luba katanga",lua:"luba lulua",lui:"luiseno",lun:"Lundos",lus:"mizo",luy:"luja",lv:"latvių",lzh:"klasikinė kinų",lzz:"laz",mad:"madurezų",maf:"mafų",mag:"magahi",mai:"maithili",mak:"Makasaro",man:"mandingų",mas:"masajų",mde:"mabų",mdf:"mokša",mdr:"mandarų",men:"mende",mer:"merų",mfe:"morisijų",mg:"malagasų",mga:"Vidurio Airijos",mgh:"makua-maeto",mgo:"meta",mh:"Maršalo Salų",mi:"maorių",mic:"mikmakų",min:"minangkabau",mk:"makedonų",ml:"malajalių",mn:"mongolų",mnc:"manču",mni:"manipurių",moh:"mohok",mos:"mosi",mr:"maratų",mrj:"vakarų mari",ms:"malajiečių",mt:"maltiečių",mua:"mundangų",mus:"krykų",mwl:"mirandezų",mwr:"marvari",mwv:"mentavai",my:"birmiečių",mye:"mjenų",myv:"erzyjų",mzn:"mazenderanių",na:"naurų",nan:"kinų kalbos pietų minų tarmė",nap:"neapoliečių",naq:"nama",nb:"norvegų bukmolas",nd:"šiaurės ndebelų",nds:"Žemutinės Vokietijos","nds-NL":"Žemutinės Saksonijos (Nyderlandai)",ne:"nepaliečių","new":"nevari",ng:"ndongų",nia:"nias",niu:"niujiečių",njo:"ao naga",nl:"olandų","nl-BE":"flamandų",nmg:"kvasių",nn:"naujoji norvegų",nnh:"ngiembūnų",no:"norvegų",nog:"nogų",non:"senoji norsų",nov:"novial",nqo:"enko",nr:"pietų ndebele",nso:"šiaurės Soto",nus:"nuerų",nv:"navajų",nwc:"klasikinė nevari",ny:"nianjų",nym:"niamvezi",nyn:"niankolų",nyo:"niorų",nzi:"nzima",oc:"očitarų",oj:"ojibva",om:"oromų",or:"odijų",os:"osetinų",osa:"osage",ota:"osmanų turkų",pa:"pendžabų",pag:"pangasinanų",pal:"vidurinė persų kalba",pam:"pampangų",pap:"papiamento",pau:"palauliečių",pcd:"pikardų",pcm:"Nigerijos pidžinų",pdc:"Pensilvanijos vokiečių",pdt:"vokiečių kalbos žemaičių tarmė",peo:"senoji persų",pfl:"vokiečių kalbos Pfalco tarmė",phn:"finikiečių",pi:"pali",pl:"lenkų",pms:"italų kalbos Pjemonto tarmė",pnt:"Ponto",pon:"Ponapės",prg:"prūsų",pro:"senovės provansalų",ps:"puštūnų",pt:"portugalų","pt-BR":"Brazilijos portugalų","pt-PT":"Europos portugalų",qu:"kečujų",quc:"kičių",qug:"Čimboraso aukštumų kečujų",raj:"Radžastano",rap:"rapanui",rar:"rarotonganų",rgn:"italų kalbos Romanijos tarmė",rif:"rifų",rm:"retoromanų",rn:"rundi",ro:"rumunų","ro-MD":"moldavų",rof:"rombo",rom:"romų",root:"rūt",rtm:"rotumanų",ru:"rusų",rue:"rusinų",rug:"Rovianos",rup:"aromanių",rw:"kinjaruandų",rwk:"rua",sa:"sanskritas",sad:"sandavių",sah:"jakutų",sam:"samarėjų aramių",saq:"sambūrų",sas:"sasak",sat:"santalių",saz:"sauraštrų",sba:"ngambajų",sbp:"sangų",sc:"sardiniečių",scn:"siciliečių",sco:"škotų",sd:"sindų",sdc:"sasaresų sardinų",sdh:"pietų kurdų",se:"šiaurės samių",see:"senecų",seh:"senų",sei:"seri",sel:"selkup",ses:"kojraboro seni",sg:"sango",sga:"senoji airių",sgs:"žemaičių",sh:"serbų-kroatų",shi:"tachelhitų",shn:"šan",shu:"chadian arabų",si:"sinhalų",sid:"sidamų",sk:"slovakų",sl:"slovėnų",sli:"sileziečių žemaičių",sly:"selajarų",sm:"Samoa",sma:"pietų samių",smj:"Liuleo samių",smn:"Inario samių",sms:"Skolto samių",sn:"šonų",snk:"soninke",so:"somaliečių",sog:"sogdien",sq:"albanų",sr:"serbų",srn:"sranan tongo",srr:"sererų",ss:"svatų",ssy:"saho",st:"pietų Soto",stq:"Saterlendo fryzų",su:"sundų",suk:"sukuma",sus:"susu",sux:"šumerų",sv:"švedų",sw:"suahilių","sw-CD":"Kongo suahilių",swb:"Komorų",syc:"klasikinė sirų",syr:"sirų",szl:"sileziečių",ta:"tamilų",tcy:"tulų",te:"telugų",tem:"timne",teo:"teso",ter:"Tereno",tet:"tetum",tg:"tadžikų",th:"tajų",ti:"tigrajų",tig:"tigre",tk:"turkmėnų",tkl:"Tokelau",tkr:"tsakurų",tl:"tagalogų",tlh:"klingonų",tli:"tlingitų",tly:"talyšų",tmh:"tamašek",tn:"tsvanų",to:"tonganų",tog:"niasa tongų",tpi:"Papua pidžinų",tr:"turkų",tru:"turoyo",trv:"Taroko",ts:"tsongų",tsd:"tsakonų",tsi:"tsimšian",tt:"totorių",ttt:"musulmonų tatų",tum:"tumbukų",tvl:"Tuvalu",tw:"tvi",twq:"tasavakų",ty:"taitiečių",tyv:"tuvių",tzm:"Centrinio Maroko tamazitų",udm:"udmurtų",ug:"uigūrų",uga:"ugaritų",uk:"ukrainiečių",umb:"umbundu",ur:"urdų",uz:"uzbekų",ve:"vendų",vec:"venetų",vep:"vepsų",vi:"vietnamiečių",vls:"vakarų flamandų",vmf:"pagrindinė frankonų",vo:"volapiuko",vot:"Votik",vro:"veru",vun:"vunjo",wa:"valonų",wae:"valserų",wal:"valamo",war:"varai",was:"Vašo",wbp:"valrpiri",wo:"volofų",wuu:"kinų kalbos vu tarmė",xal:"kalmukų",xh:"kosų",xmf:"megrelų",xog:"sogų",yao:"jao",yap:"japezų",yav:"jangbenų",ybb:"jembų",yi:"jidiš",yo:"jorubų",yrl:"njengatu",yue:"kinų kalbos Kantono tarmė",za:"chuang",zap:"zapotekų",zbl:"BLISS simbolių",zea:"zelandų",zen:"zenaga",zgh:"standartinė Maroko tamazigtų",zh:"kinų","zh-Hans":"supaprastintoji mandarinų kinų","zh-Hant":"tradicinė mandarinų kinų",zu:"zulų",zun:"Zuni",zza:"zaza"},scriptNames:{Cyrl:"kirilica",Latn:"lotynų",Arab:"arabų",Guru:"gurmuki",Tfng:"tifinag",Vaii:"vai",Hans:"supaprastinti",Hant:"tradiciniai"}},lv:{rtl:false,languageNames:{aa:"afāru",ab:"abhāzu",ace:"ačinu",ach:"ačolu",ada:"adangmu",ady:"adigu",ae:"avesta",af:"afrikandu",afh:"afrihili",agq:"aghemu",ain:"ainu",ak:"akanu",akk:"akadiešu",ale:"aleutu",alt:"dienvidaltajiešu",am:"amharu",an:"aragoniešu",ang:"senangļu",anp:"angika",ar:"arābu","ar-001":"mūsdienu standarta arābu",arc:"aramiešu",arn:"araukāņu",arp:"arapahu",arw:"aravaku",as:"asamiešu",asa:"asu",ast:"astūriešu",av:"avāru",awa:"avadhu",ay:"aimaru",az:"azerbaidžāņu","az-Arab":"dienvidazerbaidžāņu",ba:"baškīru",bal:"beludžu",ban:"baliešu",bas:"basu",bax:"bamumu",bbj:"gomalu",be:"baltkrievu",bej:"bedžu",bem:"bembu",bez:"bena",bfd:"bafutu",bg:"bulgāru",bgn:"rietumbeludžu",bho:"bhodžpūru",bi:"bišlamā",bik:"bikolu",bin:"binu",bkm:"komu",bla:"siksiku",bm:"bambaru",bn:"bengāļu",bo:"tibetiešu",br:"bretoņu",bra:"bradžiešu",brx:"bodo",bs:"bosniešu",bss:"nkosi",bua:"burjatu",bug:"bugu",bum:"bulu",byn:"bilinu",byv:"medumbu",ca:"katalāņu",cad:"kadu",car:"karību",cay:"kajuga",cch:"atsamu",ccp:"čakmu",ce:"čečenu",ceb:"sebuāņu",cgg:"kiga",ch:"čamorru",chb:"čibču",chg:"džagatajs",chk:"čūku",chm:"mariešu",chn:"činuku žargons",cho:"čoktavu",chp:"čipevaianu",chr:"čiroku",chy:"šejenu",ckb:"centrālkurdu",co:"korsikāņu",cop:"koptu",cr:"krī",crh:"Krimas tatāru",crs:"franciskā kreoliskā valoda (Seišelu salas)",cs:"čehu",csb:"kašubu",cu:"baznīcslāvu",cv:"čuvašu",cy:"velsiešu",da:"dāņu",dak:"dakotu",dar:"dargu",dav:"taitu",de:"vācu","de-AT":"vācu (Austrija)","de-CH":"augšvācu (Šveice)",del:"delavēru",den:"sleivu",dgr:"dogribu",din:"dinku",dje:"zarmu",doi:"dogru",dsb:"lejassorbu",dua:"dualu",dum:"vidusholandiešu",dv:"maldīviešu",dyo:"diola-fonjī",dyu:"diūlu",dz:"dzongke",dzg:"dazu",ebu:"kjembu",ee:"evu",efi:"efiku",egy:"ēģiptiešu",eka:"ekadžuku",el:"grieķu",elx:"elamiešu",en:"angļu","en-AU":"angļu (Austrālija)","en-CA":"angļu (Kanāda)","en-GB":"angļu (Lielbritānija)","en-US":"angļu (Amerikas Savienotās Valstis)",enm:"vidusangļu",eo:"esperanto",es:"spāņu","es-419":"spāņu (Latīņamerika)","es-ES":"spāņu (Spānija)","es-MX":"spāņu (Meksika)",et:"igauņu",eu:"basku",ewo:"evondu",fa:"persiešu",fan:"fangu",fat:"fantu",ff:"fulu",fi:"somu",fil:"filipīniešu",fj:"fidžiešu",fo:"fēru",fon:"fonu",fr:"franču","fr-CA":"franču (Kanāda)","fr-CH":"franču (Šveice)",frc:"kadžūnu franču",frm:"vidusfranču",fro:"senfranču",frr:"ziemeļfrīzu",frs:"austrumfrīzu",fur:"friūlu",fy:"rietumfrīzu",ga:"īru",gaa:"ga",gag:"gagauzu",gay:"gajo",gba:"gbaju",gd:"skotu gēlu",gez:"gēzu",gil:"kiribatiešu",gl:"galisiešu",gmh:"vidusaugšvācu",gn:"gvaranu",goh:"senaugšvācu",gon:"gondu valodas",gor:"gorontalu",got:"gotu",grb:"grebo",grc:"sengrieķu",gsw:"Šveices vācu",gu:"gudžaratu",guz:"gusii",gv:"meniešu",gwi:"kučinu",ha:"hausu",hai:"haidu",haw:"havajiešu",he:"ivrits",hi:"hindi",hil:"hiligainonu",hit:"hetu",hmn:"hmongu",ho:"hirimotu",hr:"horvātu",hsb:"augšsorbu",ht:"haitiešu",hu:"ungāru",hup:"hupu",hy:"armēņu",hz:"hereru",ia:"interlingva",iba:"ibanu",ibb:"ibibio",id:"indonēziešu",ie:"interlingve",ig:"igbo",ii:"Sičuaņas ji",ik:"inupiaku",ilo:"iloku",inh:"ingušu",io:"ido",is:"islandiešu",it:"itāļu",iu:"inuītu",ja:"japāņu",jbo:"ložbans",jmc:"mačamu",jpr:"jūdpersiešu",jrb:"jūdarābu",jv:"javiešu",ka:"gruzīnu",kaa:"karakalpaku",kab:"kabilu",kac:"kačinu",kaj:"kadži",kam:"kambu",kaw:"kāvi",kbd:"kabardiešu",kbl:"kaņembu",kcg:"katabu",kde:"makonde",kea:"kaboverdiešu",kfo:"koru",kg:"kongu",kha:"khasu",kho:"hotaniešu",khq:"koiračiinī",ki:"kikuju",kj:"kvaņamu",kk:"kazahu",kkj:"kako",kl:"grenlandiešu",kln:"kalendžīnu",km:"khmeru",kmb:"kimbundu",kn:"kannadu",ko:"korejiešu",koi:"komiešu-permiešu",kok:"konkanu",kos:"kosrājiešu",kpe:"kpellu",kr:"kanuru",krc:"karačaju un balkāru",krl:"karēļu",kru:"kuruhu",ks:"kašmiriešu",ksb:"šambalu",ksf:"bafiju",ksh:"Ķelnes vācu",ku:"kurdu",kum:"kumiku",kut:"kutenaju",kv:"komiešu",kw:"korniešu",ky:"kirgīzu",la:"latīņu",lad:"ladino",lag:"langi",lah:"landu",lam:"lambu",lb:"luksemburgiešu",lez:"lezgīnu",lg:"gandu",li:"limburgiešu",lkt:"lakotu",ln:"lingala",lo:"laosiešu",lol:"mongu",lou:"Luiziānas kreolu",loz:"lozu",lrc:"ziemeļluru",lt:"lietuviešu",lu:"lubakatanga",lua:"lubalulva",lui:"luisenu",lun:"lundu",lus:"lušeju",luy:"luhju",lv:"latviešu",mad:"maduriešu",maf:"mafu",mag:"magahiešu",mai:"maithili",mak:"makasaru",man:"mandingu",mas:"masaju",mde:"mabu",mdf:"mokšu",mdr:"mandaru",men:"mendu",mer:"meru",mfe:"Maurīcijas kreolu",mg:"malagasu",mga:"vidusīru",mgh:"makua",mgo:"metu",mh:"māršaliešu",mi:"maoru",mic:"mikmaku",min:"minangkabavu",mk:"maķedoniešu",ml:"malajalu",mn:"mongoļu",mnc:"mandžūru",mni:"manipūru",moh:"mohauku",mos:"mosu",mr:"marathu",ms:"malajiešu",mt:"maltiešu",mua:"mundangu",mus:"krīku",mwl:"mirandiešu",mwr:"marvaru",my:"birmiešu",mye:"mjenu",myv:"erzju",mzn:"mazanderāņu",na:"nauruiešu",nap:"neapoliešu",naq:"nama",nb:"norvēģu bukmols",nd:"ziemeļndebelu",nds:"lejasvācu","nds-NL":"lejassakšu",ne:"nepāliešu","new":"nevaru",ng:"ndongu",nia:"njasu",niu:"niuāņu",nl:"holandiešu","nl-BE":"flāmu",nmg:"kvasio",nn:"jaunnorvēģu",nnh:"ngjembūnu",no:"norvēģu",nog:"nogaju",non:"sennorvēģu",nqo:"nko",nr:"dienvidndebelu",nso:"ziemeļsotu",nus:"nueru",nv:"navahu",nwc:"klasiskā nevaru",ny:"čičeva",nym:"ņamvezu",nyn:"ņankolu",nyo:"ņoru",nzi:"nzemu",oc:"oksitāņu",oj:"odžibvu",om:"oromu",or:"oriju",os:"osetīnu",osa:"važāžu",ota:"turku osmaņu",pa:"pandžabu",pag:"pangasinanu",pal:"pehlevi",pam:"pampanganu",pap:"papjamento",pau:"palaviešu",pcm:"Nigērijas pidžinvaloda",peo:"senpersu",phn:"feniķiešu",pi:"pāli",pl:"poļu",pon:"ponapiešu",prg:"prūšu",pro:"senprovansiešu",ps:"puštu",pt:"portugāļu","pt-BR":"portugāļu (Brazīlija)","pt-PT":"portugāļu (Portugāle)",qu:"kečvu",quc:"kiče",raj:"radžastāņu",rap:"rapanuju",rar:"rarotongiešu",rm:"retoromāņu",rn:"rundu",ro:"rumāņu","ro-MD":"moldāvu",rof:"rombo",rom:"čigānu",root:"sakne",ru:"krievu",rup:"aromūnu",rw:"kiņaruanda",rwk:"ruanda",sa:"sanskrits",sad:"sandavu",sah:"jakutu",sam:"Samārijas aramiešu",saq:"samburu",sas:"sasaku",sat:"santalu",sba:"ngambeju",sbp:"sangu",sc:"sardīniešu",scn:"sicīliešu",sco:"skotu",sd:"sindhu",sdh:"dienvidkurdu",se:"ziemeļsāmu",see:"seneku",seh:"senu",sel:"selkupu",ses:"koiraboro senni",sg:"sango",sga:"senīru",sh:"serbu–horvātu",shi:"šilhu",shn:"šanu",shu:"Čadas arābu",si:"singāļu",sid:"sidamu",sk:"slovāku",sl:"slovēņu",sm:"samoāņu",sma:"dienvidsāmu",smj:"Luleo sāmu",smn:"Inari sāmu",sms:"skoltsāmu",sn:"šonu",snk:"soninku",so:"somāļu",sog:"sogdiešu",sq:"albāņu",sr:"serbu",srn:"sranantogo",srr:"serēru",ss:"svatu",ssy:"saho",st:"dienvidsotu",su:"zundu",suk:"sukumu",sus:"susu",sux:"šumeru",sv:"zviedru",sw:"svahili","sw-CD":"svahili (Kongo)",swb:"komoru",syc:"klasiskā sīriešu",syr:"sīriešu",ta:"tamilu",te:"telugu",tem:"temnu",teo:"teso",ter:"tereno",tet:"tetumu",tg:"tadžiku",th:"taju",ti:"tigrinja",tig:"tigru",tiv:"tivu",tk:"turkmēņu",tkl:"tokelaviešu",tl:"tagalu",tlh:"klingoņu",tli:"tlinkitu",tmh:"tuaregu",tn:"cvanu",to:"tongiešu",tog:"Njasas tongu",tpi:"tokpisins",tr:"turku",trv:"taroko",ts:"congu",tsi:"cimšiāņu",tt:"tatāru",tum:"tumbuku",tvl:"tuvaliešu",tw:"tvī",twq:"tasavaku",ty:"taitiešu",tyv:"tuviešu",tzm:"Centrālmarokas tamazīts",udm:"udmurtu",ug:"uiguru",uga:"ugaritiešu",uk:"ukraiņu",umb:"umbundu",ur:"urdu",uz:"uzbeku",vai:"vaju",ve:"vendu",vi:"vjetnamiešu",vo:"volapiks",vot:"votu",vun:"vundžo",wa:"valoņu",wae:"Vallisas vācu",wal:"valamu",war:"varaju",was:"vašo",wbp:"varlpirī",wo:"volofu",xal:"kalmiku",xh:"khosu",xog:"sogu",yao:"jao",yap:"japiešu",yav:"janbaņu",ybb:"jembu",yi:"jidišs",yo:"jorubu",yue:"kantoniešu",za:"džuanu",zap:"sapoteku",zbl:"blissimbolika",zen:"zenagu",zgh:"standarta tamazigtu (Maroka)",zh:"ķīniešu","zh-Hans":"ķīniešu vienkāršotā (mandarīnu)","zh-Hant":"ķīniešu tradicionālā (mandarīnu)",zu:"zulu",zun:"zunju",zza:"zazaki"},scriptNames:{Cyrl:"kirilica",Latn:"latīņu",Arab:"arābu",Guru:"pandžabu",Hans:"vienkāršotā",Hant:"tradicionālā"}},mg:{rtl:false,languageNames:{ak:"Akan",am:"Amharika",ar:"Arabo","ar-001":"Arabo (001)",be:"Bielorosy",bg:"Biolgara",bn:"Bengali",cs:"Tseky",de:"Alemanina","de-AT":"Alemanina (Aotrisy)","de-CH":"Alemanina (Soisa)",el:"Grika",en:"Anglisy","en-AU":"Anglisy (Aostralia)","en-CA":"Anglisy (Kanada)","en-GB":"Anglisy (Angletera)","en-US":"Anglisy (Etazonia)",es:"Espaniola","es-419":"Espaniola (419)","es-ES":"Espaniola (Espaina)","es-MX":"Espaniola (Meksika)",fa:"Persa",fr:"Frantsay","fr-CA":"Frantsay (Kanada)","fr-CH":"Frantsay (Soisa)",ha:"haoussa",hi:"hindi",hu:"hongroà",id:"Indonezianina",ig:"igbo",it:"Italianina",ja:"Japoney",jv:"Javaney",km:"khmer",ko:"Koreanina",mg:"Malagasy",ms:"Malay",my:"Birmana","nds-NL":"nds (Holanda)",ne:"Nepale",nl:"Holandey","nl-BE":"Holandey (Belzika)",pa:"Penjabi",pl:"Poloney",pt:"Portiogey","pt-BR":"Portiogey (Brezila)","pt-PT":"Portiogey (Pôrtiogala)",ro:"Romanianina","ro-MD":"Romanianina (Môldavia)",ru:"Rosianina",rw:"Roande",so:"Somalianina",sv:"Soisa","sw-CD":"sw (Repoblikan’i Kongo)",ta:"Tamoila",th:"Taioaney",tr:"Tiorka",uk:"Okrainianina",ur:"Ordò",vi:"Vietnamianina",yo:"Yôrobà",zh:"Sinoa, Mandarin","zh-Hans":"Sinoa, Mandarin (Hans)","zh-Hant":"Sinoa, Mandarin (Hant)",zu:"Zolò"},scriptNames:{}},mi:{rtl:false,languageNames:{"ar-001":"ar (001)",de:"Tiamana","de-AT":"Tiamana Atiria","de-CH":"Tiamana Ōkawa Huiterangi",en:"Ingarihi","en-AU":"Ingarihi Ahitereiriana","en-CA":"Ingarihi Kānata","en-GB":"Ingarihi Piritene","en-US":"Ingarihi Amerikana",es:"Paniora","es-419":"Paniora Amerika ki te Tonga","es-ES":"Paniora Uropi","es-MX":"Paniora Mēhikana",fr:"Wīwī","fr-CA":"Wīwī Kānata","fr-CH":"Wīwī Huiterangi",it:"Ītariana",ja:"Hapanihi",mi:"Māori","nds-NL":"nds (NL)","nl-BE":"nl (BE)",pt:"Pōtikī","pt-BR":"Pōtikī Parahi","pt-PT":"Pōtikī Uropi","ro-MD":"ro (MD)",ru:"Ruhiana","sw-CD":"sw (CD)",zh:"Hainamana","zh-Hans":"Hainamana (Māmā)","zh-Hant":"Hainamana (Tukuiho)"},scriptNames:{Cyrl:"Hīririki",Latn:"Rātina",Arab:"Arapika",Hans:"Māmā",Hant:"Tukuiho"}},mk:{rtl:false,languageNames:{aa:"афарски",ab:"апхаски",ace:"ачешки",ach:"аколи",ada:"адангме",ady:"адигејски",ae:"авестански",aeb:"туниски арапски",af:"африканс",afh:"африхили",agq:"агемски",ain:"ајну",ak:"акански",akk:"акадски",akz:"алабамски",ale:"алеутски",aln:"гешки албански",alt:"јужноалтајски",am:"амхарски",an:"арагонски",ang:"староанглиски",anp:"ангика",ar:"арапски","ar-001":"литературен арапски",arc:"арамејски",arn:"мапучки",aro:"араона",arp:"арапахо",arq:"алжирски арапски",arw:"аравачки",ary:"марокански арапски",arz:"египетски арапски",as:"асамски",asa:"асу",ase:"американски знаковен јазик",ast:"астурски",av:"аварски",avk:"котава",awa:"авади",ay:"ајмарски",az:"азербејџански",ba:"башкирски",bal:"белуџиски",ban:"балиски",bar:"баварски",bas:"баса",bax:"бамунски",bbc:"тоба",bbj:"гомала",be:"белоруски",bej:"беџа",bem:"бемба",bew:"бетавски",bez:"бена",bfd:"бафут",bfq:"бадага",bg:"бугарски",bgn:"западен балочи",bho:"боџпури",bi:"бислама",bik:"биколски",bin:"бини",bjn:"банџарски",bkm:"ком",bla:"сиксика",bm:"бамбара",bn:"бенгалски",bo:"тибетски",bpy:"бишнуприја",bqi:"бахтијарски",br:"бретонски",bra:"брај",brh:"брахујски",brx:"бодо",bs:"босански",bss:"акосе",bua:"бурјатски",bug:"бугиски",bum:"булу",byn:"биленски",byv:"медумба",ca:"каталонски",cad:"кадо",car:"карипски",cay:"кајуга",cch:"ацам",ccp:"чакмански",ce:"чеченски",ceb:"себуански",cgg:"чига",ch:"чаморски",chb:"чибча",chg:"чагатајски",chk:"чучки",chm:"мариски",chn:"чинучки жаргон",cho:"чоктавски",chp:"чипевјански",chr:"черокиски",chy:"чејенски",ckb:"централнокурдски",co:"корзикански",cop:"коптски",cps:"капизнон",cr:"кри",crh:"кримскотурски",crs:"француски (Сеселва креоли)",cs:"чешки",csb:"кашупски",cu:"црковнословенски",cv:"чувашки",cy:"велшки",da:"дански",dak:"дакота",dar:"даргва",dav:"таита",de:"германски","de-AT":"австриски германски","de-CH":"швајцарски високо-германски",del:"делавер",den:"слејви",dgr:"догрипски",din:"динка",dje:"зарма",doi:"догри",dsb:"долнолужички",dtp:"дусунски",dua:"дуала",dum:"среднохоландски",dv:"дивехи",dyo:"јола-фоњи",dyu:"џула",dz:"ѕонгка",dzg:"дазага",ebu:"ембу",ee:"еве",efi:"ефик",egl:"емилијански",egy:"староегипетски",eka:"екаџук",el:"грчки",elx:"еламски",en:"англиски","en-AU":"австралиски англиски","en-CA":"канадски англиски","en-GB":"британски англиски","en-US":"американски англиски",enm:"средноанглиски",eo:"есперанто",es:"шпански","es-419":"латиноамерикански шпански","es-ES":"шпански (во Европа)","es-MX":"мексикански шпански",esu:"централнојупички",et:"естонски",eu:"баскиски",ewo:"евондо",ext:"екстремадурски",fa:"персиски",fan:"фанг",fat:"фанти",ff:"фула",fi:"фински",fil:"филипински",fit:"турнедаленски фински",fj:"фиџиски",fo:"фарски",fon:"фон",fr:"француски","fr-CA":"канадски француски","fr-CH":"швајцарски француски",frc:"каџунски француски",frm:"среднофранцуски",fro:"старофранцуски",frp:"франкопровансалски",frr:"севернофризиски",frs:"источнофризиски",fur:"фурлански",fy:"западнофризиски",ga:"ирски",gaa:"га",gag:"гагауски",gan:"ган",gay:"гајо",gba:"гбаја",gbz:"зороастриски дари",gd:"шкотски гелски",gez:"гиз",gil:"гилбертански",gl:"галициски",glk:"гилански",gmh:"средногорногермански",gn:"гварански",goh:"старогорногермански",gom:"гоански конкани",gon:"гонди",gor:"горонтало",got:"готски",grb:"гребо",grc:"старогрчки",gsw:"швајцарски германски",gu:"гуџарати",guc:"гвахиро",gur:"фарефаре",guz:"гуси",gv:"манкс",gwi:"гвичински",ha:"хауса",hai:"хајда",hak:"хака",haw:"хавајски",he:"хебрејски",hi:"хинди",hif:"фиџиски хинди",hil:"хилигајнонски",hit:"хетитски",hmn:"хмонг",ho:"хири моту",hr:"хрватски",hsb:"горнолужички",hsn:"сјанг",ht:"хаитски",hu:"унгарски",hup:"хупа",hy:"ерменски",hz:"хереро",ia:"интерлингва",iba:"ибан",ibb:"ибибио",id:"индонезиски",ie:"окцидентал",ig:"игбо",ii:"сичуан ји",ik:"инупијачки",ilo:"илокански",inh:"ингушки",io:"идо",is:"исландски",it:"италијански",iu:"инуктитут",izh:"ижорски",ja:"јапонски",jam:"јамајски креолски",jbo:"ложбан",jgo:"нгомба",jmc:"мачаме",jpr:"еврејскоперсиски",jrb:"еврејскоарапски",jut:"јитски",jv:"јавански",ka:"грузиски",kaa:"каракалпачки",kab:"кабилски",kac:"качински",kaj:"каџе",kam:"камба",kaw:"кави",kbd:"кабардински",kbl:"канембу",kcg:"тјап",kde:"маконде",kea:"кабувердиану",ken:"кењанг",kfo:"коро",kg:"конго",kgp:"каинганшки",kha:"каси",kho:"хотански",khq:"којра чиини",khw:"коварски",ki:"кикују",kiu:"зазаки",kj:"квањама",kk:"казашки",kkj:"како",kl:"калалисут",kln:"каленџин",km:"кмерски",kmb:"кимбунду",kn:"каннада",ko:"корејски",koi:"коми-пермјачки",kok:"конкани",kos:"козрејски",kpe:"кпеле",kr:"канури",krc:"карачаевско-балкарски",kri:"крио",krj:"кинарајски",krl:"карелски",kru:"курух",ks:"кашмирски",ksb:"шамбала",ksf:"бафија",ksh:"колоњски",ku:"курдски",kum:"кумички",kut:"кутенајски",kv:"коми",kw:"корнски",ky:"киргиски",la:"латински",lad:"ладино",lag:"ланги",lah:"ланда",lam:"ламба",lb:"луксембуршки",lez:"лезгински",lfn:"лингва франка нова",lg:"ганда",li:"лимбуршки",lij:"лигурски",liv:"ливонски",lkt:"лакотски",lmo:"ломбардиски",ln:"лингала",lo:"лаошки",lol:"монго",lou:"луизијански креолски",loz:"лози",lrc:"севернолуриски",lt:"литвански",ltg:"латгалски",lu:"луба-катанга",lua:"луба-лулуа",lui:"лујсењски",lun:"лунда",luo:"луо",lus:"мизо",luy:"луја",lv:"латвиски",lzh:"книжевен кинески",lzz:"ласки",mad:"мадурски",maf:"мафа",mag:"магахи",mai:"маитили",mak:"макасарски",man:"мандинго",mas:"масајски",mde:"маба",mdf:"мокшански",mdr:"мандарски",men:"менде",mer:"меру",mfe:"морисјен",mg:"малгашки",mga:"средноирски",mgh:"макува-мито",mgo:"мета",mh:"маршалски",mi:"маорски",mic:"микмак",min:"минангкабау",mk:"македонски",ml:"малајамски",mn:"монголски",mnc:"манџурски",mni:"манипурски",moh:"мохавски",mos:"моси",mr:"марати",mrj:"западномариски",ms:"малајски",mt:"малтешки",mua:"мунданг",mus:"крик",mwl:"мирандски",mwr:"марвари",my:"бурмански",mye:"мјене",myv:"ерзјански",mzn:"мазендерански",na:"науруански",nan:"јужномински",nap:"неаполски",naq:"нама",nb:"норвешки букмол",nd:"северен ндебеле",nds:"долногермански","nds-NL":"долносаксонски",ne:"непалски","new":"неварски",ng:"ндонга",nia:"нијас",niu:"ниујески",njo:"ао нага",nl:"холандски","nl-BE":"фламански",nmg:"квазио",nn:"норвешки нинорск",nnh:"нгиембун",no:"норвешки",nog:"ногајски",non:"старонордиски",nov:"новијал",nqo:"нко",nr:"јужен ндебеле",nso:"северносотски",nus:"нуер",nv:"навахо",nwc:"класичен неварски",ny:"њанџа",nym:"њамвези",nyn:"њанколе",nyo:"њоро",nzi:"нзима",oc:"окситански",oj:"оџибва",om:"оромо",or:"одија",os:"осетски",osa:"осашки",ota:"отомански турски",pa:"пенџапски",pag:"пангасинански",pal:"средноперсиски",pam:"пампанга",pap:"папијаменто",pau:"палауански",pcd:"пикардски",pcm:"нигериски пиџин",pdc:"пенсилваниски германски",pdt:"менонитски долногермански",peo:"староперсиски",pfl:"фалечкогермански",phn:"феникиски",pi:"пали",pl:"полски",pms:"пиемонтски",pnt:"понтски",pon:"понпејски",prg:"пруски",pro:"старопровансалски",ps:"паштунски",pt:"португалски","pt-BR":"бразилски португалски","pt-PT":"португалски (во Европа)",qu:"кечуански",quc:"киче",qug:"кичвански",raj:"раџастански",rap:"рапанујски",rar:"раротонгански",rgn:"ромањолски",rif:"рифски",rm:"реторомански",rn:"рунди",ro:"романски","ro-MD":"молдавски",rof:"ромбо",rom:"ромски",root:"корен",rtm:"ротумански",ru:"руски",rue:"русински",rug:"ровијански",rup:"влашки",rw:"руандски",rwk:"руа",sa:"санскрит",sad:"сандаве",sah:"јакутски",sam:"самарјански арамејски",saq:"самбуру",sas:"сасачки",sat:"сантали",saz:"саураштра",sba:"нгембеј",sbp:"сангу",sc:"сардински",scn:"сицилијански",sco:"шкотски германски",sd:"синди",sdc:"сасарски сардински",sdh:"јужнокурдски",se:"северен сами",see:"сенека",seh:"сена",sei:"сери",sel:"селкупски",ses:"којраборо сени",sg:"санго",sga:"староирски",sgs:"самогитски",sh:"српскохрватски",shi:"тачелхит",shn:"шан",shu:"чадски арапски",si:"синхалски",sid:"сидамо",sk:"словачки",sl:"словенечки",sli:"долношлезиски",sly:"селајарски",sm:"самоански",sma:"јужен сами",smj:"луле сами",smn:"инари сами",sms:"сколт сами",sn:"шона",snk:"сонинке",so:"сомалиски",sog:"зогдијански",sq:"албански",sr:"српски",srn:"срански тонго",srr:"серер",ss:"свати",ssy:"сахо",st:"сесото",stq:"затерландски фризиски",su:"сундски",suk:"сукума",sus:"сусу",sux:"сумерски",sv:"шведски",sw:"свахили","sw-CD":"конгоански свахили",swb:"коморијански",syc:"класичен сириски",syr:"сириски",szl:"шлезиски",ta:"тамилски",tcy:"тулу",te:"телугу",tem:"тимне",teo:"тесо",ter:"терено",tet:"тетум",tg:"таџикистански",th:"тајландски",ti:"тигриња",tig:"тигре",tiv:"тив",tk:"туркменски",tkl:"токелауански",tkr:"цахурски",tl:"тагалог",tlh:"клингонски",tli:"тлингит",tly:"талишки",tmh:"тамашек",tn:"цвана",to:"тонгајски",tog:"њаса тонга",tpi:"ток писин",tr:"турски",tru:"туројо",trv:"тароко",ts:"цонга",tsd:"цаконски",tsi:"цимшијански",tt:"татарски",ttt:"татски",tum:"тумбука",tvl:"тувалуански",tw:"тви",twq:"тазавак",ty:"тахитски",tyv:"тувански",tzm:"централноатлански тамазитски",udm:"удмуртски",ug:"ујгурски",uga:"угаритски",uk:"украински",umb:"умбунду",ur:"урду",uz:"узбечки",vai:"вај",ve:"венда",vec:"венетски",vep:"вепшки",vi:"виетнамски",vls:"западнофламански",vmf:"мајнскофранконски",vo:"волапик",vot:"вотски",vro:"виру",vun:"вунџо",wa:"валонски",wae:"валсер",wal:"воламо",war:"варајски",was:"вашо",wbp:"варлпири",wo:"волофски",wuu:"ву",xal:"калмички",xh:"коса",xmf:"мегрелски",xog:"сога",yao:"јао",yap:"јапски",yav:"јенгбен",ybb:"јемба",yi:"јидиш",yo:"јорупски",yrl:"њенгату",yue:"кантонски",za:"џуаншки",zap:"запотечки",zbl:"блиссимболи",zea:"зеландски",zen:"зенага",zgh:"стандарден марокански тамазитски",zh:"кинески","zh-Hans":"поедноставен мандарински","zh-Hant":"традиционален мандарински",zu:"зулу",zun:"зуни",zza:"заза"},scriptNames:{Cyrl:"кирилско писмо",Latn:"латинично писмо",Arab:"арапско писмо",Guru:"гурмуки",Tfng:"тифинаг",Vaii:"вај",Hans:"поедноставено",Hant:"традиционално"}},ml:{rtl:false,languageNames:{aa:"അഫാർ",ab:"അബ്‌ഖാസിയൻ",ace:"അചിനീസ്",ach:"അകോലി",ada:"അഡാങ്‌മി",ady:"അഡൈഗേ",ae:"അവസ്റ്റാൻ",af:"ആഫ്രിക്കാൻസ്",afh:"ആഫ്രിഹിലി",agq:"ആഘേം",ain:"ഐനു",ak:"അകാൻ‌",akk:"അക്കാഡിയൻ",ale:"അലൂട്ട്",alt:"തെക്കൻ അൾത്തായി",am:"അംഹാരിക്",an:"അരഗോണീസ്",ang:"പഴയ ഇംഗ്ലീഷ്",anp:"ആൻഗിക",ar:"അറബിക്","ar-001":"ആധുനിക സ്റ്റാൻഡേർഡ് അറബിക്",arc:"അരമായ",arn:"മാപുചി",arp:"അറാപഹോ",arw:"അറാവക്",as:"ആസ്സാമീസ്",asa:"ആസു",ast:"ഓസ്‌ട്രിയൻ",av:"അവാരിക്",awa:"അവാധി",ay:"അയ്മാറ",az:"അസർബൈജാനി",ba:"ബഷ്ഖിർ",bal:"ബലൂചി",ban:"ബാലിനീസ്",bas:"ബസ",bax:"ബാമുൻ",bbj:"ഘോമാല",be:"ബെലാറുഷ്യൻ",bej:"ബേജ",bem:"ബേംബ",bez:"ബെനാ",bfd:"ബാഫട്ട്",bg:"ബൾഗേറിയൻ",bgn:"പശ്ചിമ ബലൂചി",bho:"ഭോജ്‌പുരി",bi:"ബിസ്‌ലാമ",bik:"ബികോൽ",bin:"ബിനി",bkm:"കോം",bla:"സിക്സിക",bm:"ബംബാറ",bn:"ബംഗാളി",bo:"ടിബറ്റൻ",br:"ബ്രെട്ടൺ",bra:"ബ്രജ്",brx:"ബോഡോ",bs:"ബോസ്നിയൻ",bss:"അക്കൂസ്",bua:"ബുറിയത്ത്",bug:"ബുഗിനീസ്",bum:"ബുളു",byn:"ബ്ലിൻ",byv:"മെഡുംബ",ca:"കറ്റാലാൻ",cad:"കാഡോ",car:"കാരിബ്",cay:"കയൂഗ",cch:"അറ്റ്സാം",ccp:"ചക്‌മ",ce:"ചെചൻ",ceb:"സെബുവാനോ",cgg:"ചിഗ",ch:"ചമോറോ",chb:"ചിബ്ച",chg:"ഷാഗതായ്",chk:"ചൂകീസ്",chm:"മാരി",chn:"ചിനൂഗ് ജാർഗൺ",cho:"ചോക്റ്റാവ്",chp:"ചിപേവ്യൻ",chr:"ഷെരോക്കി",chy:"ഷായാൻ",ckb:"സെൻട്രൽ കുർദിഷ്",co:"കോർസിക്കൻ",cop:"കോപ്റ്റിക്",cr:"ക്രീ",crh:"ക്രിമിയൻ ടർക്കിഷ്",crs:"സെഷൽവ ക്രിയോൾ ഫ്രഞ്ച്",cs:"ചെക്ക്",csb:"കാഷുബിയാൻ",cu:"ചർച്ച് സ്ലാവിക്",cv:"ചുവാഷ്",cy:"വെൽഷ്",da:"ഡാനിഷ്",dak:"ഡകോട്ട",dar:"ഡർഗ്വാ",dav:"തൈത",de:"ജർമ്മൻ","de-AT":"ഓസ്‌ട്രിയൻ ജർമൻ","de-CH":"സ്വിസ് ഹൈ ജർമൻ",del:"ദെലവേർ",den:"സ്ലേവ്",dgr:"ഡോഗ്രിബ്",din:"ദിൻക",dje:"സാർമ്മ",doi:"ഡോഗ്രി",dsb:"ലോവർ സോർബിയൻ",dua:"ദ്വാല",dum:"മദ്ധ്യ ഡച്ച്",dv:"ദിവെഹി",dyo:"യോല-ഫോന്യി",dyu:"ദ്വൈല",dz:"ദ്‌സോങ്ക",dzg:"ഡാസാഗ",ebu:"എംബു",ee:"യൂവ്",efi:"എഫിക്",egy:"പ്രാചീന ഈജിപ്ഷ്യൻ",eka:"എകാജുക്",el:"ഗ്രീക്ക്",elx:"എലാമൈറ്റ്",en:"ഇംഗ്ലീഷ്","en-AU":"ഓസ്‌ട്രേലിയൻ ഇംഗ്ലീഷ്","en-CA":"കനേഡിയൻ ഇംഗ്ലീഷ്","en-GB":"ബ്രിട്ടീഷ് ഇംഗ്ലീഷ്","en-US":"അമേരിക്കൻ ഇംഗ്ലീഷ്",enm:"മദ്ധ്യ ഇംഗ്ലീഷ്",eo:"എസ്‌പരാന്റോ",es:"സ്‌പാനിഷ്","es-419":"ലാറ്റിൻ അമേരിക്കൻ സ്‌പാനിഷ്","es-ES":"യൂറോപ്യൻ സ്‌പാനിഷ്","es-MX":"മെക്സിക്കൻ സ്പാനിഷ്",et:"എസ്റ്റോണിയൻ",eu:"ബാസ്‌ക്",ewo:"എവോൻഡോ",fa:"പേർഷ്യൻ",fan:"ഫങ്",fat:"ഫാന്റി",ff:"ഫുല",fi:"ഫിന്നിഷ്",fil:"ഫിലിപ്പിനോ",fj:"ഫിജിയൻ",fo:"ഫാറോസ്",fon:"ഫോൻ",fr:"ഫ്രഞ്ച്","fr-CA":"കനേഡിയൻ ഫ്രഞ്ച്","fr-CH":"സ്വിസ് ഫ്രഞ്ച്",frc:"കേജൺ ഫ്രഞ്ച്",frm:"മദ്ധ്യ ഫ്രഞ്ച്",fro:"പഴയ ഫ്രഞ്ച്",frr:"നോർത്തേൻ ഫ്രിഷ്യൻ",frs:"ഈസ്റ്റേൺ ഫ്രിഷ്യൻ",fur:"ഫ്രിയുലിയാൻ",fy:"പശ്ചിമ ഫ്രിഷിയൻ",ga:"ഐറിഷ്",gaa:"ഗാ",gag:"ഗാഗൂസ്",gan:"ഗാൻ ചൈനീസ്",gay:"ഗയൊ",gba:"ഗബ്യ",gd:"സ്കോട്ടിഷ് ഗൈലിക്",gez:"ഗീസ്",gil:"ഗിൽബർട്ടീസ്",gl:"ഗലീഷ്യൻ",gmh:"മദ്ധ്യ ഉച്ച ജർമൻ",gn:"ഗ്വരനീ",goh:"ഓൾഡ് ഹൈ ജർമൻ",gon:"ഗോണ്ഡി",gor:"ഗൊറോന്റാലോ",got:"ഗോഥിക്ക്",grb:"ഗ്രബൊ",grc:"പുരാതന ഗ്രീക്ക്",gsw:"സ്വിസ് ജർമ്മൻ",gu:"ഗുജറാത്തി",guz:"ഗുസീ",gv:"മാൻസ്",gwi:"ഗ്വിച്ചിൻ",ha:"ഹൗസ",hai:"ഹൈഡ",hak:"ഹാക്ക ചൈനീസ്",haw:"ഹവായിയൻ",he:"ഹീബ്രു",hi:"ഹിന്ദി",hil:"ഹിലിഗയ്നോൺ",hit:"ഹിറ്റൈറ്റ്",hmn:"മോങ്",ho:"ഹിരി മോതു",hr:"ക്രൊയേഷ്യൻ",hsb:"അപ്പർ സോർബിയൻ",hsn:"ഷ്യാങ് ചൈനീസ്",ht:"ഹെയ്‌തിയൻ ക്രിയോൾ",hu:"ഹംഗേറിയൻ",hup:"ഹൂപ",hy:"അർമേനിയൻ",hz:"ഹെരേരൊ",ia:"ഇന്റർലിംഗ്വ",iba:"ഇബാൻ",ibb:"ഇബീബിയോ",id:"ഇന്തോനേഷ്യൻ",ie:"ഇന്റർലിംഗ്വേ",ig:"ഇഗ്ബോ",ii:"ഷുവാൻയി",ik:"ഇനുപിയാക്",ilo:"ഇലോകോ",inh:"ഇംഗ്വിഷ്",io:"ഇഡോ",is:"ഐസ്‌ലാൻഡിക്",it:"ഇറ്റാലിയൻ",iu:"ഇനുക്റ്റിറ്റട്ട്",ja:"ജാപ്പനീസ്",jbo:"ലോജ്ബാൻ",jgo:"ഗോമ്പ",jmc:"മചേം",jpr:"ജൂഡിയോ-പേർഷ്യൻ",jrb:"ജൂഡിയോ-അറബിക്",jv:"ജാവാനീസ്",ka:"ജോർജിയൻ",kaa:"കര-കാൽപ്പക്",kab:"കബൈൽ",kac:"കാചിൻ",kaj:"ജ്ജു",kam:"കംബ",kaw:"കാവി",kbd:"കബർഡിയാൻ",kbl:"കനെംബു",kcg:"ട്യാപ്",kde:"മക്കോണ്ടെ",kea:"കബുവെർദിയാനു",kfo:"കോറോ",kg:"കോംഗോ",kha:"ഘാസി",kho:"ഘോറ്റാനേസേ",khq:"കൊയ്റ ചീനി",ki:"കികൂയു",kj:"ക്വാന്യമ",kk:"കസാഖ്",kkj:"കാകോ",kl:"കലാല്ലിസട്ട്",kln:"കലെഞ്ഞിൻ",km:"ഖമെർ",kmb:"കിംബുണ്ടു",kn:"കന്നഡ",ko:"കൊറിയൻ",koi:"കോമി-പെർമ്യാക്ക്",kok:"കൊങ്കണി",kos:"കൊസറേയൻ",kpe:"കപെല്ലേ",kr:"കനൂറി",krc:"കരചൈ-ബാൽകർ",krl:"കരീലിയൻ",kru:"കുരുഖ്",ks:"കാശ്‌മീരി",ksb:"ഷംഭാള",ksf:"ബാഫിയ",ksh:"കൊളോണിയൻ",ku:"കുർദ്ദിഷ്",kum:"കുമൈക്",kut:"കുതേനൈ",kv:"കോമി",kw:"കോർണിഷ്",ky:"കിർഗിസ്",la:"ലാറ്റിൻ",lad:"ലാഡിനോ",lag:"ലാംഗി",lah:"ലഹ്‌ൻഡ",lam:"ലംബ",lb:"ലക്‌സംബർഗിഷ്",lez:"ലഹ്ഗിയാൻ",lg:"ഗാണ്ട",li:"ലിംബർഗിഷ്",lkt:"ലഗോത്ത",ln:"ലിംഗാല",lo:"ലാവോ",lol:"മോങ്കോ",lou:"ലൂസിയാന ക്രിയോൾ",loz:"ലൊസി",lrc:"വടക്കൻ ലൂറി",lt:"ലിത്വാനിയൻ",lu:"ലുബ-കറ്റംഗ",lua:"ലൂബ-ലുലുവ",lui:"ലൂയിസെനോ",lun:"ലുൻഡ",luo:"ലുവോ",lus:"മിസോ",luy:"ലുയിയ",lv:"ലാറ്റ്വിയൻ",mad:"മദുരേസേ",maf:"മാഫ",mag:"മഗാഹി",mai:"മൈഥിലി",mak:"മകാസർ",man:"മണ്ഡിൻഗോ",mas:"മസായ്",mde:"മാബ",mdf:"മോക്ഷ",mdr:"മണ്ഡാർ",men:"മെൻഡെ",mer:"മേരു",mfe:"മൊറിസിൻ",mg:"മലഗാസി",mga:"മദ്ധ്യ ഐറിഷ്",mgh:"മാഖുവാ-മീത്തോ",mgo:"മേത്താ",mh:"മാർഷല്ലീസ്",mi:"മവോറി",mic:"മിക്മാക്",min:"മിനാങ്കബൗ",mk:"മാസിഡോണിയൻ",ml:"മലയാളം",mn:"മംഗോളിയൻ",mnc:"മാൻ‌ചു",mni:"മണിപ്പൂരി",moh:"മോഹാക്",mos:"മൊസ്സി",mr:"മറാത്തി",ms:"മലെയ്",mt:"മാൾട്ടീസ്",mua:"മുന്ദാംഗ്",mus:"ക്രീക്ക്",mwl:"മിരാൻറസേ",mwr:"മർവാരി",my:"ബർമീസ്",mye:"മയീൻ",myv:"ഏഴ്സ്യ",mzn:"മസന്ററാനി",na:"നൗറു",nan:"മിൻ നാൻ ചൈനീസ്",nap:"നെപ്പോളിറ്റാൻ",naq:"നാമ",nb:"നോർവീജിയൻ ബുക്‌മൽ",nd:"നോർത്ത് ഡെബിൾ",nds:"ലോ ജർമൻ","nds-NL":"ലോ സാക്സൺ",ne:"നേപ്പാളി","new":"നേവാരി",ng:"ഡോങ്ക",nia:"നിയാസ്",niu:"ന്യുവാൻ",nl:"ഡച്ച്","nl-BE":"ഫ്ലമിഷ്",nmg:"ക്വാസിയോ",nn:"നോർവീജിയൻ നൈനോർക്‌സ്",nnh:"ഗീംബൂൺ",no:"നോർവീജിയൻ",nog:"നോഗൈ",non:"പഴയ നോഴ്‌സ്",nqo:"ഇൻകോ",nr:"ദക്ഷിണ നെഡിബിൾ",nso:"നോർത്തേൻ സോതോ",nus:"നുവേർ",nv:"നവാജോ",nwc:"ക്ലാസിക്കൽ നേവാരി",ny:"ന്യൻജ",nym:"ന്യാംവേസി",nyn:"ന്യാൻകോൾ",nyo:"ന്യോറോ",nzi:"സിമ",oc:"ഓക്‌സിറ്റൻ",oj:"ഓജിബ്വാ",om:"ഒറോമോ",or:"ഒഡിയ",os:"ഒസ്സെറ്റിക്",osa:"ഒസേജ്",ota:"ഓട്ടോമൻ തുർക്കിഷ്",pa:"പഞ്ചാബി",pag:"പങ്കാസിനൻ",pal:"പാഹ്ലവി",pam:"പാംപൻഗ",pap:"പാപിയാമെന്റൊ",pau:"പലാവുൻ",pcm:"നൈജീരിയൻ പിഡ്‌ഗിൻ",peo:"പഴയ പേർഷ്യൻ",phn:"ഫീനിഷ്യൻ",pi:"പാലി",pl:"പോളിഷ്",pon:"പൊൻപിയൻ",prg:"പ്രഷ്യൻ",pro:"പഴയ പ്രൊവൻഷ്ൽ",ps:"പഷ്‌തോ",pt:"പോർച്ചുഗീസ്","pt-BR":"ബ്രസീലിയൻ പോർച്ചുഗീസ്","pt-PT":"യൂറോപ്യൻ പോർച്ചുഗീസ്",qu:"ക്വെച്ചുവ",quc:"ക്വിച്ചെ",raj:"രാജസ്ഥാനി",rap:"രാപനൂയി",rar:"രാരോടോങ്കൻ",rm:"റൊമാഞ്ച്",rn:"റുണ്ടി",ro:"റൊമാനിയൻ","ro-MD":"മോൾഡാവിയൻ",rof:"റോംബോ",rom:"റൊമാനി",root:"മൂലഭാഷ",ru:"റഷ്യൻ",rup:"ആരോമാനിയൻ",rw:"കിന്യാർവാണ്ട",rwk:"റുവാ",sa:"സംസ്‌കൃതം",sad:"സാൻഡവേ",sah:"സാഖ",sam:"സമരിയാക്കാരുടെ അരമായ",saq:"സംബുരു",sas:"സസാക്",sat:"സന്താലി",sba:"ഗംബായ്",sbp:"സംഗു",sc:"സർഡിനിയാൻ",scn:"സിസിലിയൻ",sco:"സ്കോട്സ്",sd:"സിന്ധി",sdh:"തെക്കൻ കുർദ്ദിഷ്",se:"വടക്കൻ സമി",see:"സെനേക",seh:"സേന",sel:"സെൽകപ്",ses:"കൊയ്റാബൊറോ സെന്നി",sg:"സാംഗോ",sga:"പഴയ ഐറിഷ്",sh:"സെർബോ-ക്രൊയേഷ്യൻ",shi:"താച്ചലിറ്റ്",shn:"ഷാൻ",shu:"ചാഡിയൻ അറബി",si:"സിംഹള",sid:"സിഡാമോ",sk:"സ്ലോവാക്",sl:"സ്ലോവേനിയൻ",sm:"സമോവൻ",sma:"തെക്കൻ സമി",smj:"ലൂലീ സമി",smn:"ഇനാരി സമി",sms:"സ്കോൾട്ട് സമി",sn:"ഷോണ",snk:"സോണിൻകെ",so:"സോമാലി",sog:"സോജിഡിയൻ",sq:"അൽബേനിയൻ",sr:"സെർബിയൻ",srn:"ശ്രാനൻ ഡോങ്കോ",srr:"സെറർ",ss:"സ്വാറ്റി",ssy:"സാഹോ",st:"തെക്കൻ സോതോ",su:"സുണ്ടാനീസ്",suk:"സുകുമ",sus:"സുസു",sux:"സുമേരിയൻ",sv:"സ്വീഡിഷ്",sw:"സ്വാഹിലി","sw-CD":"കോംഗോ സ്വാഹിലി",swb:"കൊമോറിയൻ",syc:"പുരാതന സുറിയാനിഭാഷ",syr:"സുറിയാനി",ta:"തമിഴ്",te:"തെലുങ്ക്",tem:"ടിംനേ",teo:"ടെസോ",ter:"ടെറേനോ",tet:"ടെറ്റും",tg:"താജിക്",th:"തായ്",ti:"ടൈഗ്രിന്യ",tig:"ടൈഗ്രി",tiv:"ടിവ്",tk:"തുർക്‌മെൻ",tkl:"ടൊക്കേലൗ",tl:"തഗാലോഗ്",tlh:"ക്ലിംഗോൺ",tli:"ലിംഗ്വിറ്റ്",tmh:"ടമഷേക്",tn:"സ്വാന",to:"ടോംഗൻ",tog:"ന്യാസാ ഡോങ്ക",tpi:"ടോക് പിസിൻ",tr:"ടർക്കിഷ്",trv:"തരോക്കോ",ts:"സോംഗ",tsi:"സിംഷ്യൻ",tt:"ടാട്ടർ",tum:"ടുംബുക",tvl:"ടുവാലു",tw:"ട്വി",twq:"ടസവാക്ക്",ty:"താഹിതിയൻ",tyv:"തുവിനിയൻ",tzm:"മധ്യ അറ്റ്‌ലസ് ടമാസൈറ്റ്",udm:"ഉഡ്മുർട്ട്",ug:"ഉയ്ഘുർ",uga:"ഉഗറിട്ടിക്",uk:"ഉക്രേനിയൻ",umb:"ഉംബുന്ദു",ur:"ഉറുദു",uz:"ഉസ്‌ബെക്ക്",vai:"വൈ",ve:"വെന്ദ",vi:"വിയറ്റ്നാമീസ്",vo:"വോളാപുക്",vot:"വോട്ടിക്",vun:"വുൻജോ",wa:"വല്ലൂൺ",wae:"വാൾസർ",wal:"വൊലൈറ്റ",war:"വാരേയ്",was:"വാഷൊ",wbp:"വൂൾപിരി",wo:"വൊളോഫ്",wuu:"വു ചൈനീസ്",xal:"കൽമൈക്",xh:"ഖോസ",xog:"സോഗോ",yao:"യാവോ",yap:"യെപ്പീസ്",yav:"യാംഗ്ബെൻ",ybb:"യംബ",yi:"യിദ്ദിഷ്",yo:"യൊറൂബാ",yue:"കാന്റണീസ്",za:"സ്വാംഗ്",zap:"സാപ്പോടെക്",zbl:"ബ്ലിസ്സിംബൽസ്",zen:"സെനഗ",zgh:"സ്റ്റാൻഡേർഡ് മൊറോക്കൻ റ്റാമസിയറ്റ്",zh:"ചൈനീസ്","zh-Hans":"ചൈനീസ് (ലളിതവൽക്കരിച്ചത്)","zh-Hant":"ചൈനീസ് (പരമ്പരാഗതം)",zu:"സുലു",zun:"സുനി",zza:"സാസാ"},scriptNames:{Cyrl:"സിറിലിക്",Latn:"ലാറ്റിൻ",Arab:"അറബിക്",Guru:"ഗുരുമുഖി",Tfng:"തിഫിനാഗ്",Vaii:"വൈ",Hans:"ലളിതവൽക്കരിച്ചത്",Hant:"പരമ്പരാഗതം"}},mn:{rtl:false,languageNames:{aa:"афар",ab:"абхаз",ace:"ачин",ada:"адангмэ",ady:"адигэ",af:"африкаанс",agq:"агем",ain:"айну",ak:"акан",ale:"алют",alt:"өмнөд алтай",am:"амхар",an:"арагон",anp:"ангик",ar:"араб","ar-001":"стандарт араб",arn:"мапүчи",arp:"арапаго",as:"ассам",asa:"асу",ast:"астури",av:"авар",awa:"авадхи",ay:"аймара",az:"азербайжан",ba:"башкир",ban:"бали",bas:"басаа",be:"беларусь",bem:"бемба",bez:"бена",bg:"болгар",bho:"божпури",bi:"бислам",bin:"бини",bla:"сиксика",bm:"бамбара",bn:"бенгал",bo:"төвд",br:"бретон",brx:"бодо",bs:"босни",bug:"буги",byn:"блин",ca:"каталан",ccp:"чакма",ce:"чечень",ceb:"себуано",cgg:"чига",ch:"чаморро",chk:"чуук",chm:"мари хэл",cho:"чоктау",chr:"чероки",chy:"чэенн",ckb:"төв курд",co:"корсик",crs:"сеселва креол франц",cs:"чех",cu:"сүмийн славян",cv:"чуваш",cy:"уэльс",da:"дани",dak:"дакота",dar:"даргва",dav:"тайта",de:"герман","de-AT":"австри-герман","de-CH":"швейцарь-герман",dgr:"догриб",dje:"зарма",dsb:"доод сорби",dua:"дуала",dv:"дивехи",dyo:"жола-фони",dz:"зонха",dzg:"дазага",ebu:"эмбу",ee:"эвэ",efi:"эфик",eka:"экажук",el:"грек",en:"англи","en-AU":"австрали-англи","en-CA":"канад-англи","en-GB":"британи-англи","en-US":"америк-англи",eo:"эсперанто",es:"испани","es-419":"испани хэл (Латин Америк)","es-ES":"испани хэл (Европ)","es-MX":"испани хэл (Мексик)",et:"эстони",eu:"баск",ewo:"эвондо",fa:"перс",ff:"фула",fi:"фин",fil:"филипино",fj:"фижи",fo:"фарер",fon:"фон",fr:"франц","fr-CA":"канад-франц","fr-CH":"швейцари-франц",fur:"фриулан",fy:"баруун фриз",ga:"ирланд",gaa:"га",gag:"гагуз",gd:"шотландын гел",gez:"гийз",gil:"гилберт",gl:"галего",gn:"гуарани",gor:"горонтало",gsw:"швейцари-герман",gu:"гужарати",guz:"гузы",gv:"манкс",gwi:"гвичин",ha:"хауса",haw:"хавай",he:"еврей",hi:"хинди",hil:"хилигайнон",hmn:"хмонг",hr:"хорват",hsb:"дээд сорби",ht:"Гаитийн креол",hu:"мажар",hup:"хупа",hy:"армен",hz:"хереро",ia:"интерлингво",iba:"ибан",ibb:"ибибио",id:"индонези",ie:"нэгдмэл хэл",ig:"игбо",ii:"сычуань и",ilo:"илоко",inh:"ингуш",io:"идо",is:"исланд",it:"итали",iu:"инуктитут",ja:"япон",jbo:"ложбан",jgo:"нгомба",jmc:"мачамэ",jv:"ява",ka:"гүрж",kab:"кабиле",kac:"качин",kaj:"жжу",kam:"камба",kbd:"кабардин",kcg:"тяп",kde:"маконде",kea:"кабүвердиану",kfo:"коро",kha:"каси",khq:"койра чини",ki:"кикуюү",kj:"куаньяма",kk:"казах",kkj:"како",kl:"калалисут",kln:"каленжин",km:"кхмер",kmb:"кимбунду",kn:"каннада",ko:"солонгос",koi:"коми-пермяк",kok:"конкани",kpe:"кпелле",kr:"канури",krc:"карачай-балкар",krl:"карель",kru:"курук",ks:"кашмир",ksb:"шамбал",ksf:"бафиа",ksh:"кёльш",ku:"курд",kum:"кумук",kv:"коми",kw:"корн",ky:"киргиз",la:"латин",lad:"ладин",lag:"ланги",lb:"люксембург",lez:"лезги",lg:"ганда",li:"лимбург",lkt:"лакота",ln:"лингала",lo:"лаос",loz:"лози",lrc:"хойд лури",lt:"литва",lu:"луба-катанга",lua:"луба-лулуа",lun:"лунда",luo:"луо",lus:"мизо",luy:"луяа",lv:"латви",mad:"мадури хэл",mag:"магахи",mai:"май",mak:"макасар",mas:"масай",mdf:"мокша",men:"менде",mer:"меру",mfe:"морисен",mg:"малагаси",mgh:"макува-мито",mgo:"мета",mh:"маршалл",mi:"маори",mic:"микмак",min:"минангкабау",mk:"македон",ml:"малаялам",mn:"монгол",mni:"манипури",moh:"мохаук",mos:"мосси",mr:"марати",ms:"малай",mt:"малта",mua:"мунданг",mus:"крик",mwl:"меранди",my:"бирм",myv:"эрзя",mzn:"мазандерани",na:"науру",nap:"неаполитан",naq:"нама",nb:"норвегийн букмол",nd:"хойд ндебеле",nds:"доод герман","nds-NL":"бага саксон",ne:"балба","new":"невари",ng:"ндонга",nia:"ниас хэл",niu:"ниуэ",nl:"нидерланд","nl-BE":"фламанд",nmg:"квазио",nn:"норвегийн нинорск",nnh:"нгиембүүн",no:"норвеги",nog:"ногаи",nqo:"нко",nr:"өмнөд ндебеле",nso:"хойд сото",nus:"нуер",nv:"навахо",ny:"нянжа",nyn:"нянколе",oc:"окситан",om:"оромо",or:"ория",os:"оссетин",pa:"панжаби",pag:"пангасин",pam:"пампанга",pap:"папьяменто",pau:"палау",pcm:"нигерийн пиджин",pl:"польш",prg:"прусс",ps:"пушту",pt:"португал","pt-BR":"португал хэл (Бразил)","pt-PT":"португал хэл (Европ)",qu:"кечуа",quc:"киче",rap:"рапануи",rar:"раротонг",rm:"романш",rn:"рунди",ro:"румын","ro-MD":"молдав",rof:"ромбо",root:"рут",ru:"орос",rup:"ароманы",rw:"киньяруанда",rwk:"рва",sa:"санскрит",sad:"сандавэ",sah:"саха",saq:"самбүрү",sat:"сантали",sba:"нгамбай",sbp:"сангү",sc:"сардин",scn:"сицил",sco:"шотланд",sd:"синдхи",se:"хойд сами",seh:"сена",ses:"кёраборо сени",sg:"санго",sh:"хорватын серб",shi:"тачелхит",shn:"шань",si:"синхала",sk:"словак",sl:"словени",sm:"самоа",sma:"өмнөд сами",smj:"люле сами",smn:"инари сами",sms:"сколт сами",sn:"шона",snk:"сонинке",so:"сомали",sq:"албани",sr:"серб",srn:"сранан тонго",ss:"свати",ssy:"сахо",st:"сесото",su:"сундан",suk:"сукума",sv:"швед",sw:"свахили","sw-CD":"конгогийн свахили",swb:"комори",syr:"сири",ta:"тамил",te:"тэлүгү",tem:"тимн",teo:"тэсо",tet:"тетум",tg:"тажик",th:"тай",ti:"тигринья",tig:"тигр",tk:"туркмен",tlh:"клингон",tn:"цвана",to:"тонга",tpi:"ток писин",tr:"турк",trv:"тароко",ts:"цонга",tt:"татар",tum:"тумбула",tvl:"тувалу",tw:"тви",twq:"тасавак",ty:"таити",tyv:"тува",tzm:"Төв Атласын тамазигхт",udm:"удмурт",ug:"уйгур",uk:"украин",umb:"умбунду",ur:"урду",uz:"узбек",vai:"вай",ve:"венда",vi:"вьетнам",vo:"волапюк",vun:"вунжо",wa:"уоллун",wae:"уолсэр",wal:"уоллайтта",war:"варай",wo:"волоф",xal:"халимаг",xh:"хоса",xog:"сога",yav:"янгбен",ybb:"емба",yi:"иддиш",yo:"ёруба",yue:"кантон",zgh:"стандарт тамазайт (Морокко)",zh:"хятад","zh-Hans":"хялбаршуулсан мандарин хятад","zh-Hant":"уламжлалт мандарин хятад",zu:"зулу",zun:"зуни",zza:"заза"},scriptNames:{Cyrl:"кирилл",Latn:"латин",Arab:"араб",Guru:"гүрмүх",Hans:"хялбаршуулсан",Hant:"уламжлалт"}},ms:{rtl:false,languageNames:{aa:"Afar",ab:"Abkhazia",ace:"Aceh",ach:"Akoli",ada:"Adangme",ady:"Adyghe",ae:"Avestan",aeb:"Arab Tunisia",af:"Afrikaans",agq:"Aghem",ain:"Ainu",ak:"Akan",ale:"Aleut",alt:"Altai Selatan",am:"Amharic",an:"Aragon",anp:"Angika",ar:"Arab","ar-001":"Arab Standard Moden",arn:"Mapuche",arp:"Arapaho",arq:"Arab Algeria",ars:"Arab Najdi",ary:"Arab Maghribi",arz:"Arab Mesir",as:"Assam",asa:"Asu",ast:"Asturia",av:"Avaric",awa:"Awadhi",ay:"Aymara",az:"Azerbaijan",ba:"Bashkir",bal:"Baluchi",ban:"Bali",bas:"Basaa",bax:"Bamun",bbj:"Ghomala",be:"Belarus",bej:"Beja",bem:"Bemba",bez:"Bena",bfd:"Bafut",bg:"Bulgaria",bgn:"Balochi Barat",bho:"Bhojpuri",bi:"Bislama",bin:"Bini",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Benggala",bo:"Tibet",bpy:"Bishnupriya",br:"Breton",brh:"Brahui",brx:"Bodo",bs:"Bosnia",bss:"Akoose",bua:"Buriat",bug:"Bugis",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Catalonia",cay:"Cayuga",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Chiga",ch:"Chamorro",chk:"Chukese",chm:"Mari",cho:"Choctaw",chr:"Cherokee",chy:"Cheyenne",ckb:"Kurdi Sorani",co:"Corsica",cop:"Coptic",crh:"Turki Krimea",crs:"Perancis Seselwa Creole",cs:"Czech",cu:"Slavik Gereja",cv:"Chuvash",cy:"Wales",da:"Denmark",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"Jerman","de-AT":"Jerman Austria","de-CH":"Jerman Halus Switzerland",dgr:"Dogrib",dje:"Zarma",doi:"Dogri",dsb:"Sorbian Rendah",dua:"Duala",dv:"Divehi",dyo:"Jola-Fonyi",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",eka:"Ekajuk",el:"Greek",en:"Inggeris","en-AU":"Inggeris Australia","en-CA":"Inggeris Kanada","en-GB":"Inggeris British","en-US":"Inggeris AS",eo:"Esperanto",es:"Sepanyol","es-419":"Sepanyol Amerika Latin","es-ES":"Sepanyol Eropah","es-MX":"Sepanyol Mexico",et:"Estonia",eu:"Basque",ewo:"Ewondo",fa:"Parsi",ff:"Fulah",fi:"Finland",fil:"Filipina",fj:"Fiji",fo:"Faroe",fon:"Fon",fr:"Perancis","fr-CA":"Perancis Kanada","fr-CH":"Perancis Switzerland",frc:"Perancis Cajun",fur:"Friulian",fy:"Frisian Barat",ga:"Ireland",gaa:"Ga",gag:"Gagauz",gan:"Cina Gan",gba:"Gbaya",gbz:"Zoroastrian Dari",gd:"Scots Gaelic",gez:"Geez",gil:"Kiribati",gl:"Galicia",glk:"Gilaki",gn:"Guarani",gor:"Gorontalo",grc:"Greek Purba",gsw:"Jerman Switzerland",gu:"Gujerat",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hak:"Cina Hakka",haw:"Hawaii",he:"Ibrani",hi:"Hindi",hil:"Hiligaynon",hmn:"Hmong",hr:"Croatia",hsb:"Sorbian Atas",hsn:"Cina Xiang",ht:"Haiti",hu:"Hungary",hup:"Hupa",hy:"Armenia",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesia",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ilo:"Iloko",inh:"Ingush",io:"Ido",is:"Iceland",it:"Itali",iu:"Inuktitut",ja:"Jepun",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jv:"Jawa",ka:"Georgia",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kbd:"Kabardia",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",kfo:"Koro",kg:"Kongo",kha:"Khasi",khq:"Koyra Chiini",khw:"Khowar",ki:"Kikuya",kj:"Kuanyama",kk:"Kazakhstan",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Korea",koi:"Komi-Permyak",kok:"Konkani",kpe:"Kpelle",kr:"Kanuri",krc:"Karachay-Balkar",krl:"Karelian",kru:"Kurukh",ks:"Kashmir",ksb:"Shambala",ksf:"Bafia",ksh:"Colognian",ku:"Kurdish",kum:"Kumyk",kv:"Komi",kw:"Cornish",ky:"Kirghiz",la:"Latin",lad:"Ladino",lag:"Langi",lah:"Lahnda",lb:"Luxembourg",lez:"Lezghian",lg:"Ganda",li:"Limburgish",lkt:"Lakota",ln:"Lingala",lo:"Laos",lou:"Kreol Louisiana",loz:"Lozi",lrc:"Luri Utara",lt:"Lithuania",lu:"Luba-Katanga",lua:"Luba-Lulua",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Latvia",mad:"Madura",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",mas:"Masai",mde:"Maba",mdf:"Moksha",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Malagasy",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marshall",mi:"Maori",mic:"Micmac",min:"Minangkabau",mk:"Macedonia",ml:"Malayalam",mn:"Mongolia",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",ms:"Melayu",mt:"Malta",mua:"Mundang",mus:"Creek",mwl:"Mirandese",my:"Burma",mye:"Myene",myv:"Erzya",mzn:"Mazanderani",na:"Nauru",nan:"Cina Min Nan",nap:"Neapolitan",naq:"Nama",nb:"Bokmål Norway",nd:"Ndebele Utara",nds:"Jerman Rendah","nds-NL":"Saxon Rendah",ne:"Nepal","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niu",nl:"Belanda","nl-BE":"Flemish",nmg:"Kwasio",nn:"Nynorsk Norway",nnh:"Ngiemboon",no:"Norway",nog:"Nogai",nqo:"N’ko",nr:"Ndebele Selatan",nso:"Sotho Utara",nus:"Nuer",nv:"Navajo",ny:"Nyanja",nyn:"Nyankole",oc:"Occitania",om:"Oromo",or:"Odia",os:"Ossete",pa:"Punjabi",pag:"Pangasinan",pam:"Pampanga",pap:"Papiamento",pau:"Palauan",pcm:"Nigerian Pidgin",pl:"Poland",prg:"Prusia",ps:"Pashto",pt:"Portugis","pt-BR":"Portugis Brazil","pt-PT":"Portugis Eropah",qu:"Quechua",quc:"Kʼicheʼ",rap:"Rapanui",rar:"Rarotonga",rm:"Romansh",rn:"Rundi",ro:"Romania","ro-MD":"Moldavia",rof:"Rombo",root:"Root",ru:"Rusia",rup:"Aromanian",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawe",sah:"Sakha",saq:"Samburu",sat:"Santali",sba:"Ngambay",sbp:"Sangu",sc:"Sardinia",scn:"Sicili",sco:"Scots",sd:"Sindhi",sdh:"Kurdish Selatan",se:"Sami Utara",see:"Seneca",seh:"Sena",ses:"Koyraboro Senni",sg:"Sango",sh:"SerboCroatia",shi:"Tachelhit",shn:"Shan",shu:"Arab Chadian",si:"Sinhala",sk:"Slovak",sl:"Slovenia",sm:"Samoa",sma:"Sami Selatan",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somali",sq:"Albania",sr:"Serbia",srn:"Sranan Tongo",ss:"Swati",ssy:"Saho",st:"Sotho Selatan",su:"Sunda",suk:"Sukuma",sv:"Sweden",sw:"Swahili","sw-CD":"Congo Swahili",swb:"Comoria",syr:"Syriac",ta:"Tamil",te:"Telugu",tem:"Timne",teo:"Teso",tet:"Tetum",tg:"Tajik",th:"Thai",ti:"Tigrinya",tig:"Tigre",tk:"Turkmen",tlh:"Klingon",tly:"Talysh",tn:"Tswana",to:"Tonga",tpi:"Tok Pisin",tr:"Turki",trv:"Taroko",ts:"Tsonga",tt:"Tatar",tum:"Tumbuka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahiti",tyv:"Tuvinian",tzm:"Tamazight Atlas Tengah",udm:"Udmurt",ug:"Uyghur",uk:"Ukraine",umb:"Umbundu",ur:"Urdu",uz:"Uzbekistan",vai:"Vai",ve:"Venda",vi:"Vietnam",vo:"Volapük",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Wolaytta",war:"Waray",wbp:"Warlpiri",wo:"Wolof",wuu:"Cina Wu",xal:"Kalmyk",xh:"Xhosa",xog:"Soga",yav:"Yangben",ybb:"Yemba",yi:"Yiddish",yo:"Yoruba",yue:"Kantonis",zgh:"Tamazight Maghribi Standard",zh:"Cina","zh-Hans":"Cina Mandarin Ringkas","zh-Hant":"Cina Mandarin Tradisional",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Cyril",Latn:"Latin",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Ringkas",Hant:"Tradisional"}},ne:{rtl:false,languageNames:{aa:"अफार",ab:"अब्खाजियाली",ace:"अचाइनिज",ach:"अकोली",ada:"अदाङमे",ady:"अदिघे",ae:"अवेस्तान",af:"अफ्रिकान्स",afh:"अफ्रिहिली",agq:"आघेम",ain:"अइनु",ak:"आकान",akk:"अक्कादियाली",akz:"अलाबामा",ale:"अलेउट",aln:"घेग अल्बानियाली",alt:"दक्षिणी आल्टाइ",am:"अम्हारिक",an:"अरागोनी",ang:"पुरातन अङ्ग्रेजी",anp:"अङ्गिका",ar:"अरबी","ar-001":"आधुनिक मानक अरबी",arc:"अरामाइक",arn:"मापुचे",aro:"अराओना",arp:"अरापाहो",arq:"अल्जेरियाली अरबी",arw:"अरावाक",ary:"मोरोक्कोली अरबी",arz:"इजिप्ट अरबी",as:"आसामी",asa:"आसु",ase:"अमेरिकी साङ्केतिक भाषा",ast:"अस्टुरियाली",av:"अवारिक",avk:"कोटावा",awa:"अवधी",ay:"ऐमारा",az:"अजरबैजानी",ba:"बास्किर",bal:"बालुची",ban:"बाली",bar:"बाभारियाली",bas:"बासा",bax:"बामुन",bbc:"बाताक तोबा",bbj:"घोमाला",be:"बेलारुसी",bej:"बेजा",bem:"बेम्बा",bew:"बेटावी",bez:"बेना",bfd:"बाफुट",bfq:"बडागा",bg:"बुल्गेरियाली",bgn:"पश्चिम बालोची",bho:"भोजपुरी",bi:"बिस्लाम",bik:"बिकोल",bin:"बिनी",bjn:"बन्जार",bkm:"कोम",bla:"सिक्सिका",bm:"बाम्बारा",bn:"बंगाली",bo:"तिब्बती",bpy:"विष्णुप्रिया",bqi:"बाख्तिआरी",br:"ब्रेटन",bra:"ब्रज",brh:"ब्राहुइ",brx:"बोडो",bs:"बोस्नियाली",bss:"अकुज",bua:"बुरिआत",bug:"बुगिनियाली",bum:"बुलु",byn:"ब्लिन",byv:"मेडुम्बा",ca:"क्याटालन",cad:"काड्डो",car:"क्यारिब",cay:"कायुगा",cch:"अट्साम",ccp:"चाक्मा",ce:"चेचेन",ceb:"सेबुआनो",cgg:"चिगा",ch:"चामोर्रो",chb:"चिब्चा",chg:"चागाटाई",chk:"चुकेसे",chm:"मारी",chn:"चिनुक जार्गन",cho:"चोक्टाव",chp:"चिपेव्यान",chr:"चेरोकी",chy:"चेयेन्ने",ckb:"मध्यवर्ती कुर्दिस",co:"कोर्सिकन",cop:"कोप्टिक",cps:"कापिज्नोन",cr:"क्री",crh:"क्रिमियाली तुर्क",crs:"सेसेल्वा क्रिओल फ्रान्सेली",cs:"चेक",csb:"कासुवियन",cu:"चर्च स्लाभिक",cv:"चुभास",cy:"वेल्श",da:"डेनिस",dak:"डाकोटा",dar:"दार्ग्वा",dav:"ताइता",de:"जर्मन","de-AT":"अस्ट्रिएन जर्मन","de-CH":"स्वीस हाई जर्मन",del:"देलावर",dgr:"दोग्रिब",din:"दिन्का",dje:"जर्मा",doi:"डोगरी",dsb:"तल्लो सोर्बियन",dtp:"केन्द्रीय दुसुन",dua:"दुवाला",dum:"मध्य डच",dv:"दिबेही",dyo:"जोला-फोनिल",dyu:"द्युला",dz:"जोङ्खा",dzg:"दाजागा",ebu:"एम्बु",ee:"इवी",efi:"एफिक",egl:"एमिलियाली",egy:"पुरातन इजिप्टी",eka:"एकाजुक",el:"ग्रीक",elx:"एलामाइट",en:"अङ्ग्रेजी","en-AU":"अस्ट्रेलियाली अङ्ग्रेजी","en-CA":"क्यानाडेली अङ्ग्रेजी","en-GB":"बेलायती अङ्ग्रेजी","en-US":"अमेरिकी अङ्ग्रेजी",enm:"मध्य अङ्ग्रेजी",eo:"एस्पेरान्तो",es:"स्पेनी","es-419":"ल्याटिन अमेरिकी स्पेनी","es-ES":"युरोपेली स्पेनी","es-MX":"मेक्सिकन स्पेनी",esu:"केन्द्रीय युपिक",et:"इस्टोनियन",eu:"बास्क",ewo:"इवोन्डो",ext:"एक्सट्रेमादुराली",fa:"फारसी",fan:"फाङ",fat:"फान्टी",ff:"फुलाह",fi:"फिनिस",fil:"फिलिपिनी",fj:"फिजियन",fo:"फारोज",fon:"फोन",fr:"फ्रान्सेली","fr-CA":"क्यानेडाली फ्रान्सेली","fr-CH":"स्विस फ्रेन्च",frc:"काहुन फ्रान्सेली",frm:"मध्य फ्रान्सेली",fro:"पुरातन फ्रान्सेली",frp:"अर्पितान",frr:"उत्तरी फ्रिजी",frs:"पूर्वी फ्रिसियाली",fur:"फ्रिउलियाली",fy:"पश्चिमी फ्रिसियन",ga:"आइरिस",gaa:"गा",gag:"गगाउज",gan:"गान चिनियाँ",gay:"गायो",gba:"ग्बाया",gd:"स्कटिस गाएलिक",gez:"गिज",gil:"गिल्बर्टी",gl:"गलिसियाली",glk:"गिलाकी",gmh:"मध्य उच्च जर्मन",gn:"गुवारानी",goh:"पुरातन उच्च जर्मन",gom:"गोवा कोन्कानी",gon:"गोन्डी",gor:"गोरोन्टालो",got:"गोथिक",grb:"ग्रेबो",grc:"पुरातन ग्रिक",gsw:"स्वीस जर्मन",gu:"गुजराती",gur:"फ्राफ्रा",guz:"गुसी",gv:"मान्क्स",gwi:"गुइचिन",ha:"हाउसा",hai:"हाइदा",hak:"हक्का चिनियाँ",haw:"हवाइयन",he:"हिब्रु",hi:"हिन्दी",hif:"फिजी हिन्दी",hil:"हिलिगायनोन",hit:"हिट्टिटे",hmn:"हमोङ",ho:"हिरी मोटु",hr:"क्रोयसियाली",hsb:"माथिल्लो सोर्बियन",hsn:"जियाङ चिनियाँ",ht:"हैटियाली क्रियोल",hu:"हङ्गेरियाली",hup:"हुपा",hy:"आर्मेनियाली",hz:"हेरेरो",ia:"इन्टर्लिङ्गुआ",iba:"इबान",ibb:"इबिबियो",id:"इन्डोनेसियाली",ie:"इन्टरलिङ्ग्वे",ig:"इग्बो",ii:"सिचुआन यि",ik:"इनुपिआक्",ilo:"इयोको",inh:"इन्गस",io:"इडो",is:"आइसल्यान्डियाली",it:"इटालेली",iu:"इनुक्टिटुट",izh:"इन्ग्रियाली",ja:"जापानी",jam:"जमैकाली क्रेओले अङ्ग्रेजी",jbo:"लोज्बान",jgo:"न्गोम्बा",jmc:"माचामे",jpr:"जुडियो-फारसी",jrb:"जुडियो-अरबी",jut:"जुटिस",jv:"जाभानी",ka:"जर्जियाली",kaa:"कारा-काल्पाक",kab:"काबिल",kac:"काचिन",kaj:"ज्जु",kam:"काम्बा",kaw:"कावी",kbd:"काबार्दियाली",kbl:"कानेम्बु",kcg:"टुआप",kde:"माकोन्डे",kea:"काबुभेर्डियानु",ken:"केनयाङ",kfo:"कोरो",kg:"कोङ्गो",kgp:"काइनगाङ",kha:"खासी",kho:"खोटानी",khq:"कोयरा चिनी",khw:"खोवार",ki:"किकुयु",kiu:"किर्मान्जकी",kj:"कुआन्यामा",kk:"काजाख",kkj:"काको",kl:"कालालिसुट",kln:"कालेन्जिन",km:"खमेर",kmb:"किम्बुन्डु",kn:"कन्नाडा",ko:"कोरियाली",koi:"कोमी-पर्म्याक",kok:"कोन्कानी",kos:"कोस्राली",kpe:"क्पेल्ले",kr:"कानुरी",krc:"काराचाय-बाल्कर",kri:"क्रिओ",krj:"किनाराय-ए",krl:"करेलियन",kru:"कुरुख",ks:"कास्मिरी",ksb:"शाम्बाला",ksf:"बाफिया",ksh:"कोलोग्नियाली",ku:"कुर्दी",kum:"कुमिक",kut:"कुतेनाइ",kv:"कोमी",kw:"कोर्निस",ky:"किर्गिज",la:"ल्याटिन",lad:"लाडिनो",lag:"लाङ्गी",lah:"लाहन्डा",lam:"लाम्बा",lb:"लक्जेम्बर्गी",lez:"लाज्घियाली",lfn:"लिङ्गुवा फ्राङ्का नोभा",lg:"गान्डा",li:"लिम्बुर्गी",lij:"लिगुरियाली",liv:"लिभोनियाली",lkt:"लाकोता",lmo:"लोम्बार्ड",ln:"लिङ्गाला",lo:"लाओ",lol:"मोङ्गो",loz:"लोजी",lrc:"उत्तरी लुरी",lt:"लिथुआनियाली",ltg:"लाट्गाली",lu:"लुबा-काताङ्गा",lua:"लुबा-लुलुआ",lui:"लुइसेनो",lun:"लुन्डा",luo:"लुओ",lus:"मिजो",luy:"लुइया",lv:"लात्भियाली",lzh:"साहित्यिक चिनियाँ",lzz:"लाज",mad:"मादुरेसे",maf:"माफा",mag:"मगधी",mai:"मैथिली",mak:"माकासार",man:"मान्दिङो",mas:"मसाई",mde:"माबा",mdf:"मोक्ष",mdr:"मन्दर",men:"मेन्डे",mer:"मेरू",mfe:"मोरिसेन",mg:"मलागासी",mga:"मध्य आयरिस",mgh:"माखुवा-मिट्टो",mgo:"मेटा",mh:"मार्साली",mi:"माओरी",mic:"मिकमाक",min:"मिनाङकाबाउ",mk:"म्यासेडोनियन",ml:"मलयालम",mn:"मङ्गोलियाली",mnc:"मान्चु",mni:"मनिपुरी",moh:"मोहक",mos:"मोस्सी",mr:"मराठी",ms:"मलाय",mt:"माल्टिज",mua:"मुन्डाङ",mus:"क्रिक",mwl:"मिरान्डी",mwr:"माडवारी",mwv:"मेन्टावाई",my:"बर्मेली",mye:"म्येने",myv:"इर्ज्या",mzn:"मजानडेरानी",na:"नाउरू",nan:"मिन नान चिनियाँ",nap:"नेपोलिटान",naq:"नामा",nb:"नर्वेली बोकमाल",nd:"उत्तरी न्डेबेले",nds:"तल्लो जर्मन","nds-NL":"तल्लो साक्सन",ne:"नेपाली","new":"नेवारी",ng:"न्दोन्गा",nia:"नियास",niu:"निउएन",njo:"अओ नागा",nl:"डच","nl-BE":"फ्लेमिस",nmg:"क्वासियो",nn:"नर्वेली नाइनोर्स्क",nnh:"न्गिएम्बुन",no:"नर्वेली",nog:"नोगाइ",non:"पुरानो नोर्से",nov:"नोभियल",nqo:"नको",nr:"दक्षिण न्देबेले",nso:"उत्तरी सोथो",nus:"नुएर",nv:"नाभाजो",nwc:"परम्परागत नेवारी",ny:"न्यान्जा",nym:"न्यामवेजी",nyn:"न्यान्कोल",nyo:"न्योरो",nzi:"नजिमा",oc:"अक्सिटन",oj:"ओजिब्वा",om:"ओरोमो",or:"उडिया",os:"अोस्सेटिक",osa:"ओसागे",ota:"अटोमन तुर्की",pa:"पंजाबी",pag:"पाङ्गासिनान",pal:"पाहलावी",pam:"पामपाङ्गा",pap:"पापियामेन्तो",pau:"पालाउवाली",pcd:"पिकार्ड",pcm:"नाइजेरियाली पिड्जिन",pdc:"पेन्सिलभानियाली जर्मन",peo:"पुरातन फारसी",pfl:"पालाटिन जर्मन",phn:"फोनिसियाली",pi:"पाली",pl:"पोलिस",pms:"पिएडमोन्तेसे",pnt:"पोन्टिक",prg:"प्रसियाली",pro:"पुरातन प्रोभेन्काल",ps:"पास्तो",pt:"पोर्तुगी","pt-BR":"ब्राजिली पोर्तुगी","pt-PT":"युरोपेली पोर्तुगी",qu:"क्वेचुवा",quc:"किचे",qug:"चिम्बोराजो उच्चस्थान किचुआ",raj:"राजस्थानी",rap:"रापानुई",rar:"रारोटोङ्गान",rm:"रोमानिस",rn:"रुन्डी",ro:"रोमानियाली","ro-MD":"मोल्डाभियाली",rof:"रोम्बो",root:"रुट",ru:"रसियाली",rup:"अरोमानीयाली",rw:"किन्यारवान्डा",rwk:"र्‌वा",sa:"संस्कृत",sad:"सान्डेअ",sah:"साखा",saq:"साम्बुरू",sat:"सान्ताली",sba:"न्गामबाय",sbp:"साङ्गु",sc:"सार्डिनियाली",scn:"सिसिलियाली",sco:"स्कट्स",sd:"सिन्धी",sdh:"दक्षिणी कुर्दिश",se:"उत्तरी सामी",seh:"सेना",ses:"कोयराबोरो सेन्नी",sg:"साङ्गो",sga:"पुरातन आयरीस",shi:"टाचेल्हिट",shn:"शान",shu:"चाड अरबी",si:"सिन्हाली",sk:"स्लोभाकियाली",sl:"स्लोभेनियाली",sli:"तल्लो सिलेसियाली",sm:"सामोआ",sma:"दक्षिणी सामी",smj:"लुले सामी",smn:"इनारी सामी",sms:"स्कोइट सामी",sn:"शोना",snk:"सोनिन्के",so:"सोमाली",sq:"अल्बानियाली",sr:"सर्बियाली",srn:"स्रानान टोङ्गो",ss:"स्वाती",ssy:"साहो",st:"दक्षिणी सोथो",su:"सुडानी",suk:"सुकुमा",sus:"सुसू",sux:"सुमेरियाली",sv:"स्विडिस",sw:"स्वाहिली","sw-CD":"कङ्गो स्वाहिली",swb:"कोमोरी",syc:"परम्परागत सिरियाक",syr:"सिरियाक",ta:"तामिल",te:"तेलुगु",tem:"टिम्ने",teo:"टेसो",tet:"टेटुम",tg:"ताजिक",th:"थाई",ti:"टिग्रिन्या",tig:"टिग्रे",tk:"टर्कमेन",tlh:"क्लिङ्गन",tn:"ट्स्वाना",to:"टोङ्गन",tog:"न्यास टोङ्गा",tpi:"टोक पिसिन",tr:"टर्किश",trv:"टारोको",ts:"ट्सोङ्गा",tt:"तातार",ttt:"मुस्लिम टाट",tum:"टुम्बुका",tvl:"टुभालु",twq:"तासावाक",ty:"टाहिटियन",tyv:"टुभिनियाली",tzm:"केन्द्रीय एट्लास टामाजिघट",udm:"उड्मुर्ट",ug:"उइघुर",uk:"युक्रेनी",umb:"उम्बुन्डी",ur:"उर्दु",uz:"उज्बेकी",vai:"भाइ",ve:"भेन्डा",vi:"भियतनामी",vmf:"मुख्य-फ्राङ्कोनियाली",vo:"भोलापिक",vun:"भुन्जो",wa:"वाल्लुन",wae:"वाल्सर",wal:"वोलेट्टा",war:"वारे",wbp:"वार्ल्पिरी",wo:"वुलुफ",xal:"काल्मिक",xh:"खोसा",xmf:"मिनग्रेलियाली",xog:"सोगा",yav:"याङ्बेन",ybb:"येम्बा",yi:"यिद्दिस",yo:"योरूवा",yrl:"न्हिनगातु",yue:"क्यान्टोनिज",zbl:"ब्लिससिम्बोल्स",zgh:"मानक मोरोक्कोन तामाजिघट",zh:"चिनियाँ","zh-Hans":"सरलिकृत म्यान्डरिन चिनियाँ","zh-Hant":"परम्परागत म्यान्डरिन चिनियाँ",zu:"जुलु",zun:"जुनी",zza:"जाजा"},scriptNames:{Cyrl:"सिरिलिक",Latn:"ल्याटिन",Arab:"अरबी",Guru:"गुरूमुखी",Tfng:"टिफिनाघ",Vaii:"भाइ",Hans:"सरलिकृत चिनियाँ",Hant:"परम्परागत चिनियाँ"}},nl:{rtl:false,languageNames:{aa:"Afar",ab:"Abchazisch",ace:"Atjehs",ach:"Akoli",ada:"Adangme",ady:"Adygees",ae:"Avestisch",aeb:"Tunesisch Arabisch",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Aino",ak:"Akan",akk:"Akkadisch",akz:"Alabama",ale:"Aleoetisch",aln:"Gegisch",alt:"Zuid-Altaïsch",am:"Amhaars",an:"Aragonees",ang:"Oudengels",anp:"Angika",ar:"Arabisch","ar-001":"Arabisch (wereld)",arc:"Aramees",arn:"Mapudungun",aro:"Araona",arp:"Arapaho",arq:"Algerijns Arabisch",ars:"Nadjdi-Arabisch",arw:"Arawak",ary:"Marokkaans Arabisch",arz:"Egyptisch Arabisch",as:"Assamees",asa:"Asu",ase:"Amerikaanse Gebarentaal",ast:"Asturisch",av:"Avarisch",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Azerbeidzjaans",ba:"Basjkiers",bal:"Beloetsji",ban:"Balinees",bar:"Beiers",bas:"Basa",bax:"Bamoun",bbc:"Batak Toba",bbj:"Ghomala’",be:"Wit-Russisch",bej:"Beja",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgaars",bgn:"Westers Beloetsji",bho:"Bhojpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Bengaals",bo:"Tibetaans",bpy:"Bishnupriya",bqi:"Bakhtiari",br:"Bretons",bra:"Braj",brh:"Brahui",brx:"Bodo",bs:"Bosnisch",bss:"Akoose",bua:"Boerjatisch",bug:"Buginees",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Catalaans",cad:"Caddo",car:"Caribisch",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Tsjetsjeens",ceb:"Cebuano",cgg:"Chiga",ch:"Chamorro",chb:"Chibcha",chg:"Chagatai",chk:"Chuukees",chm:"Mari",chn:"Chinook Jargon",cho:"Choctaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",ckb:"Soranî",co:"Corsicaans",cop:"Koptisch",cps:"Capiznon",cr:"Cree",crh:"Krim-Tataars",crs:"Seychellencreools",cs:"Tsjechisch",csb:"Kasjoebisch",cu:"Kerkslavisch",cv:"Tsjoevasjisch",cy:"Welsh",da:"Deens",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"Duits","de-AT":"Duits (Oostenrijk)","de-CH":"Duits (Zwitserland)",del:"Delaware",den:"Slavey",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Nedersorbisch",dtp:"Dusun",dua:"Duala",dum:"Middelnederlands",dv:"Divehi",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emiliano",egy:"Oudegyptisch",eka:"Ekajuk",el:"Grieks",elx:"Elamitisch",en:"Engels","en-AU":"Engels (Australië)","en-CA":"Engels (Canada)","en-GB":"Engels (Verenigd Koninkrijk)","en-US":"Engels (Verenigde Staten)",enm:"Middelengels",eo:"Esperanto",es:"Spaans","es-419":"Spaans (Latijns-Amerika)","es-ES":"Spaans (Spanje)","es-MX":"Spaans (Mexico)",esu:"Yupik",et:"Estisch",eu:"Baskisch",ewo:"Ewondo",ext:"Extremeens",fa:"Perzisch",fan:"Fang",fat:"Fanti",ff:"Fulah",fi:"Fins",fil:"Filipijns",fit:"Tornedal-Fins",fj:"Fijisch",fo:"Faeröers",fon:"Fon",fr:"Frans","fr-CA":"Frans (Canada)","fr-CH":"Frans (Zwitserland)",frc:"Cajun-Frans",frm:"Middelfrans",fro:"Oudfrans",frp:"Arpitaans",frr:"Noord-Fries",frs:"Oost-Fries",fur:"Friulisch",fy:"Fries",ga:"Iers",gaa:"Ga",gag:"Gagaoezisch",gan:"Ganyu",gay:"Gayo",gba:"Gbaya",gbz:"Zoroastrisch Dari",gd:"Schots-Gaelisch",gez:"Ge’ez",gil:"Gilbertees",gl:"Galicisch",glk:"Gilaki",gmh:"Middelhoogduits",gn:"Guaraní",goh:"Oudhoogduits",gom:"Goa Konkani",gon:"Gondi",gor:"Gorontalo",got:"Gothisch",grb:"Grebo",grc:"Oudgrieks",gsw:"Zwitserduits",gu:"Gujarati",guc:"Wayuu",gur:"Gurune",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hai:"Haida",hak:"Hakka",haw:"Hawaïaans",he:"Hebreeuws",hi:"Hindi",hif:"Fijisch Hindi",hil:"Hiligaynon",hit:"Hettitisch",hmn:"Hmong",ho:"Hiri Motu",hr:"Kroatisch",hsb:"Oppersorbisch",hsn:"Xiangyu",ht:"Haïtiaans Creools",hu:"Hongaars",hup:"Hupa",hy:"Armeens",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesisch",ie:"Interlingue",ig:"Igbo",ii:"Yi",ik:"Inupiaq",ilo:"Iloko",inh:"Ingoesjetisch",io:"Ido",is:"IJslands",it:"Italiaans",iu:"Inuktitut",izh:"Ingrisch",ja:"Japans",jam:"Jamaicaans Creools",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Judeo-Perzisch",jrb:"Judeo-Arabisch",jut:"Jutlands",jv:"Javaans",ka:"Georgisch",kaa:"Karakalpaks",kab:"Kabylisch",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardisch",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kaapverdisch Creools",ken:"Kenyang",kfo:"Koro",kg:"Kongo",kgp:"Kaingang",kha:"Khasi",kho:"Khotanees",khq:"Koyra Chiini",khw:"Khowar",ki:"Gikuyu",kiu:"Kirmanckî",kj:"Kuanyama",kk:"Kazachs",kkj:"Kako",kl:"Groenlands",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Koreaans",koi:"Komi-Permjaaks",kok:"Konkani",kos:"Kosraeaans",kpe:"Kpelle",kr:"Kanuri",krc:"Karatsjaj-Balkarisch",kri:"Krio",krj:"Kinaray-a",krl:"Karelisch",kru:"Kurukh",ks:"Kasjmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Kölsch",ku:"Koerdisch",kum:"Koemuks",kut:"Kutenai",kv:"Komi",kw:"Cornish",ky:"Kirgizisch",la:"Latijn",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luxemburgs",lez:"Lezgisch",lfn:"Lingua Franca Nova",lg:"Luganda",li:"Limburgs",lij:"Ligurisch",liv:"Lijfs",lkt:"Lakota",lmo:"Lombardisch",ln:"Lingala",lo:"Laotiaans",lol:"Mongo",lou:"Louisiana-Creools",loz:"Lozi",lrc:"Noordelijk Luri",lt:"Litouws",ltg:"Letgaals",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Lets",lzh:"Klassiek Chinees",lzz:"Lazisch",mad:"Madoerees",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makassaars",man:"Mandingo",mas:"Maa",mde:"Maba",mdf:"Moksja",mdr:"Mandar",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Malagassisch",mga:"Middeliers",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marshallees",mi:"Maori",mic:"Mi’kmaq",min:"Minangkabau",mk:"Macedonisch",ml:"Malayalam",mn:"Mongools",mnc:"Mantsjoe",mni:"Meitei",moh:"Mohawk",mos:"Mossi",mr:"Marathi",mrj:"West-Mari",ms:"Maleis",mt:"Maltees",mua:"Mundang",mus:"Creek",mwl:"Mirandees",mwr:"Marwari",mwv:"Mentawai",my:"Birmaans",mye:"Myene",myv:"Erzja",mzn:"Mazanderani",na:"Nauruaans",nan:"Minnanyu",nap:"Napolitaans",naq:"Nama",nb:"Noors - Bokmål",nd:"Noord-Ndebele",nds:"Nedersaksisch","nds-NL":"Nederduits",ne:"Nepalees","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niueaans",njo:"Ao Naga",nl:"Nederlands","nl-BE":"Nederlands (België)",nmg:"Ngumba",nn:"Noors - Nynorsk",nnh:"Ngiemboon",no:"Noors",nog:"Nogai",non:"Oudnoors",nov:"Novial",nqo:"N’Ko",nr:"Zuid-Ndbele",nso:"Noord-Sotho",nus:"Nuer",nv:"Navajo",nwc:"Klassiek Nepalbhasa",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Occitaans",oj:"Ojibwa",om:"Afaan Oromo",or:"Odia",os:"Ossetisch",osa:"Osage",ota:"Ottomaans-Turks",pa:"Punjabi",pag:"Pangasinan",pal:"Pahlavi",pam:"Pampanga",pap:"Papiaments",pau:"Palaus",pcd:"Picardisch",pcm:"Nigeriaans Pidgin",pdc:"Pennsylvania-Duits",pdt:"Plautdietsch",peo:"Oudperzisch",pfl:"Paltsisch",phn:"Foenicisch",pi:"Pali",pl:"Pools",pms:"Piëmontees",pnt:"Pontisch",pon:"Pohnpeiaans",prg:"Oudpruisisch",pro:"Oudprovençaals",ps:"Pasjtoe",pt:"Portugees","pt-BR":"Portugees (Brazilië)","pt-PT":"Portugees (Portugal)",qu:"Quechua",quc:"K’iche’",qug:"Kichwa",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotongan",rgn:"Romagnol",rif:"Riffijns",rm:"Reto-Romaans",rn:"Kirundi",ro:"Roemeens","ro-MD":"Roemeens (Moldavië)",rof:"Rombo",rom:"Romani",root:"Root",rtm:"Rotumaans",ru:"Russisch",rue:"Roetheens",rug:"Roviana",rup:"Aroemeens",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskriet",sad:"Sandawe",sah:"Jakoets",sam:"Samaritaans-Aramees",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardijns",scn:"Siciliaans",sco:"Schots",sd:"Sindhi",sdc:"Sassarees",sdh:"Pahlavani",se:"Noord-Samisch",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkoeps",ses:"Koyraboro Senni",sg:"Sango",sga:"Oudiers",sgs:"Samogitisch",sh:"Servo-Kroatisch",shi:"Tashelhiyt",shn:"Shan",shu:"Tsjadisch Arabisch",si:"Singalees",sid:"Sidamo",sk:"Slowaaks",sl:"Sloveens",sli:"Silezisch Duits",sly:"Selayar",sm:"Samoaans",sma:"Zuid-Samisch",smj:"Lule-Samisch",smn:"Inari-Samisch",sms:"Skolt-Samisch",sn:"Shona",snk:"Soninke",so:"Somalisch",sog:"Sogdisch",sq:"Albanees",sr:"Servisch",srn:"Sranantongo",srr:"Serer",ss:"Swazi",ssy:"Saho",st:"Zuid-Sotho",stq:"Saterfries",su:"Soendanees",suk:"Sukuma",sus:"Soesoe",sux:"Soemerisch",sv:"Zweeds",sw:"Swahili","sw-CD":"Swahili (Congo-Kinshasa)",swb:"Shimaore",syc:"Klassiek Syrisch",syr:"Syrisch",szl:"Silezisch",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetun",tg:"Tadzjieks",th:"Thai",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmeens",tkl:"Tokelaus",tkr:"Tsakhur",tl:"Tagalog",tlh:"Klingon",tli:"Tlingit",tly:"Talysh",tmh:"Tamashek",tn:"Tswana",to:"Tongaans",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Turks",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonisch",tsi:"Tsimshian",tt:"Tataars",ttt:"Moslim Tat",tum:"Toemboeka",tvl:"Tuvaluaans",tw:"Twi",twq:"Tasawaq",ty:"Tahitiaans",tyv:"Toevaans",tzm:"Tamazight (Centraal-Marokko)",udm:"Oedmoerts",ug:"Oeigoers",uga:"Oegaritisch",uk:"Oekraïens",umb:"Umbundu",ur:"Urdu",uz:"Oezbeeks",vai:"Vai",ve:"Venda",vec:"Venetiaans",vep:"Wepsisch",vi:"Vietnamees",vls:"West-Vlaams",vmf:"Opperfrankisch",vo:"Volapük",vot:"Votisch",vro:"Võro",vun:"Vunjo",wa:"Waals",wae:"Walser",wal:"Wolaytta",war:"Waray",was:"Washo",wbp:"Warlpiri",wo:"Wolof",wuu:"Wuyu",xal:"Kalmuks",xh:"Xhosa",xmf:"Mingreels",xog:"Soga",yao:"Yao",yap:"Yapees",yav:"Yangben",ybb:"Yemba",yi:"Jiddisch",yo:"Yoruba",yrl:"Nheengatu",yue:"Kantonees",za:"Zhuang",zap:"Zapotec",zbl:"Blissymbolen",zea:"Zeeuws",zen:"Zenaga",zgh:"Standaard Marokkaanse Tamazight",zh:"Chinees","zh-Hans":"Mandarijn (vereenvoudigd)","zh-Hant":"Mandarijn (traditioneel)",zu:"Zoeloe",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Cyrillisch",Latn:"Latijns",Arab:"Arabisch",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"vereenvoudigd",Hant:"traditioneel"}},nn:{rtl:false,languageNames:{aa:"afar",ab:"abkhasisk",ace:"achinesisk",ach:"acoli",ada:"adangme",ady:"adygeisk",ae:"avestisk",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akkadisk",ale:"aleutisk",alt:"sør-altaj",am:"amharisk",an:"aragonsk",ang:"gammalengelsk",anp:"angika",ar:"arabisk","ar-001":"moderne standardarabisk",arc:"arameisk",arn:"mapudungun",arp:"arapaho",arw:"arawak",as:"assamesisk",asa:"asu (Tanzania)",ast:"asturisk",av:"avarisk",awa:"avadhi",ay:"aymara",az:"aserbajdsjansk",ba:"basjkirsk",bal:"baluchi",ban:"balinesisk",bas:"basa",bax:"bamun",be:"kviterussisk",bej:"beja",bem:"bemba",bez:"bena (Tanzania)",bg:"bulgarsk",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tibetansk",br:"bretonsk",bra:"braj",brx:"bodo",bs:"bosnisk",bss:"bakossi",bua:"burjatisk",bug:"buginesisk",byn:"blin",ca:"katalansk",cad:"caddo",car:"carib",cch:"atsam",ce:"tsjetsjensk",ceb:"cebuano",cgg:"kiga",ch:"chamorro",chb:"chibcha",chg:"tsjagataisk",chk:"chuukesisk",chm:"mari",chn:"chinook",cho:"choctaw",chp:"chipewiansk",chr:"cherokee",chy:"cheyenne",ckb:"sorani",co:"korsikansk",cop:"koptisk",cr:"cree",crh:"krimtatarisk",crs:"seselwa (fransk-kreolsk)",cs:"tsjekkisk",csb:"kasjubisk",cu:"kyrkjeslavisk",cv:"tsjuvansk",cy:"walisisk",da:"dansk",dak:"dakota",dar:"dargwa",dav:"taita",de:"tysk","de-AT":"tysk (Austerrike)","de-CH":"tysk (Sveits)",del:"delaware",den:"slavej",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"lågsorbisk",dua:"duala",dum:"mellomnederlandsk",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egy:"gammalegyptisk",eka:"ekajuk",el:"gresk",elx:"elamite",en:"engelsk","en-AU":"engelsk (Australia)","en-CA":"engelsk (Canada)","en-GB":"britisk engelsk","en-US":"engelsk (USA)",enm:"mellomengelsk",eo:"esperanto",es:"spansk","es-419":"spansk (Latin-Amerika)","es-ES":"spansk (Spania)","es-MX":"spansk (Mexico)",et:"estisk",eu:"baskisk",ewo:"ewondo",fa:"persisk",fan:"fang",fat:"fanti",ff:"fulfulde",fi:"finsk",fil:"filippinsk",fj:"fijiansk",fo:"færøysk",fr:"fransk","fr-CA":"fransk (Canada)","fr-CH":"fransk (Sveits)",frm:"mellomfransk",fro:"gammalfransk",frr:"nordfrisisk",frs:"austfrisisk",fur:"friulisk",fy:"vestfrisisk",ga:"irsk",gaa:"ga",gay:"gayo",gba:"gbaya",gd:"skotsk-gælisk",gez:"geez",gil:"gilbertese",gl:"galicisk",gmh:"mellomhøgtysk",gn:"guarani",goh:"gammalhøgtysk",gon:"gondi",gor:"gorontalo",got:"gotisk",grb:"grebo",grc:"gammalgresk",gsw:"sveitsertysk",gu:"gujarati",guz:"gusii",gv:"manx",gwi:"gwichin",ha:"hausa",hai:"haida",haw:"hawaiisk",he:"hebraisk",hi:"hindi",hil:"hiligaynon",hit:"hettittisk",hmn:"hmong",ho:"hiri motu",hr:"kroatisk",hsb:"høgsorbisk",ht:"haitisk",hu:"ungarsk",hup:"hupa",hy:"armensk",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesisk",ie:"interlingue",ig:"ibo",ii:"sichuan-yi",ik:"inupiak",ilo:"iloko",inh:"ingusjisk",io:"ido",is:"islandsk",it:"italiensk",iu:"inuktitut",ja:"japansk",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"jødepersisk",jrb:"jødearabisk",jv:"javanesisk",ka:"georgisk",kaa:"karakalpakisk",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardisk",kcg:"tyap",kde:"makonde",kea:"kabuverdianu",kfo:"koro",kg:"kikongo",kha:"khasi",kho:"khotanesisk",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kasakhisk",kkj:"kako",kl:"grønlandsk (kalaallisut)",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"koreansk",kok:"konkani",kos:"kosraeansk",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",krl:"karelsk",kru:"kurukh",ks:"kasjmiri",ksb:"shambala",ksf:"bafia",ksh:"kølnsk",ku:"kurdisk",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"kornisk",ky:"kirgisisk",la:"latin",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgsk",lez:"lezghian",lg:"ganda",li:"limburgisk",lkt:"lakota",ln:"lingala",lo:"laotisk",lol:"mongo",loz:"lozi",lrc:"nord-lurisk",lt:"litauisk",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"olulujia",lv:"latvisk",mad:"maduresisk",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masai",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"madagassisk",mga:"mellomirsk",mgh:"Makhuwa-Meetto",mgo:"meta’",mh:"marshallesisk",mi:"maori",mic:"micmac",min:"minangkabau",mk:"makedonsk",ml:"malayalam",mn:"mongolsk",mnc:"mandsju",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",ms:"malayisk",mt:"maltesisk",mua:"mundang",mus:"creek",mwl:"mirandesisk",mwr:"marwari",my:"burmesisk",myv:"erzia",mzn:"mazanderani",na:"nauru",nap:"napolitansk",naq:"nama",nb:"bokmål",nd:"nord-ndebele",nds:"lågtysk","nds-NL":"lågsaksisk",ne:"nepalsk","new":"newari",ng:"ndonga",nia:"nias",niu:"niuisk",nl:"nederlandsk","nl-BE":"flamsk",nmg:"kwasio",nn:"nynorsk",nnh:"ngiemboon",no:"norsk",nog:"nogai",non:"gammalnorsk",nqo:"n’ko",nr:"sør-ndebele",nso:"nordsotho",nus:"nuer",nv:"navajo",nwc:"klassisk newarisk",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"oksitansk",oj:"ojibwa",om:"oromo",or:"odia",os:"ossetisk",osa:"osage",ota:"ottomansk tyrkisk",pa:"panjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauisk",pcm:"nigeriansk pidgin",peo:"gammalpersisk",phn:"fønikisk",pi:"pali",pl:"polsk",pon:"ponapisk",prg:"prøyssisk",pro:"gammalprovençalsk",ps:"pashto",pt:"portugisisk","pt-BR":"portugisisk (Brasil)","pt-PT":"portugisisk (Portugal)",qu:"quechua",quc:"k’iche",raj:"rajasthani",rap:"rapanui",rar:"rarotongansk",rm:"retoromansk",rn:"rundi",ro:"rumensk","ro-MD":"moldavisk",rof:"rombo",rom:"romani",root:"rot",ru:"russisk",rup:"arumensk",rw:"kinjarwanda",rwk:"rwa",sa:"sanskrit",sad:"sandawe",sah:"sakha",sam:"samaritansk arameisk",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardinsk",scn:"siciliansk",sco:"skotsk",sd:"sindhi",se:"nordsamisk",seh:"sena",sel:"selkupisk",ses:"Koyraboro Senni",sg:"sango",sga:"gammalirsk",sh:"serbokroatisk",shi:"tachelhit",shn:"shan",si:"singalesisk",sid:"sidamo",sk:"slovakisk",sl:"slovensk",sm:"samoansk",sma:"sørsamisk",smj:"lulesamisk",smn:"enaresamisk",sms:"skoltesamisk",sn:"shona",snk:"soninke",so:"somali",sog:"sogdisk",sq:"albansk",sr:"serbisk",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sørsotho",su:"sundanesisk",suk:"sukuma",sus:"susu",sux:"sumerisk",sv:"svensk",sw:"swahili","sw-CD":"swahili (Kongo-Kinshasa)",swb:"shimaore",syc:"klassisk syrisk",syr:"syrisk",ta:"tamil",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadsjikisk",th:"thai",ti:"tigrinja",tig:"tigré",tiv:"tivi",tk:"turkmensk",tkl:"tokelau",tl:"tagalog",tlh:"klingon",tli:"tlingit",tmh:"tamasjek",tn:"tswana",to:"tongansk",tog:"tonga (Nyasa)",tpi:"tok pisin",tr:"tyrkisk",trv:"taroko",ts:"tsonga",tsi:"tsimshian",tt:"tatarisk",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahitisk",tyv:"tuvinisk",tzm:"sentral-tamazight",udm:"udmurt",ug:"uigurisk",uga:"ugaritisk",uk:"ukrainsk",umb:"umbundu",ur:"urdu",uz:"usbekisk",ve:"venda",vi:"vietnamesisk",vo:"volapyk",vot:"votisk",vun:"vunjo",wa:"vallonsk",wae:"walsertysk",wal:"wolaytta",war:"waray",was:"washo",wo:"wolof",xal:"kalmykisk",xh:"xhosa",xog:"soga",yap:"yapesisk",yav:"yangben",ybb:"yemba",yi:"jiddisk",yo:"joruba",yue:"kantonesisk",za:"zhuang",zap:"zapotec",zbl:"blissymbol",zen:"zenaga",zgh:"standard marokkansk tamazight",zh:"kinesisk","zh-Hans":"kinesisk (forenkla)","zh-Hant":"kinesisk (tradisjonell)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"kyrillisk",Latn:"latinsk",Arab:"arabisk",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vai",Hans:"forenkla",Hant:"tradisjonell"}},no:{rtl:false,languageNames:{},scriptNames:{}},nv:{rtl:false,languageNames:{},scriptNames:{}},pap:{rtl:false,languageNames:{},scriptNames:{}},pl:{rtl:false,languageNames:{aa:"afar",ab:"abchaski",ace:"aceh",ach:"aczoli",ada:"adangme",ady:"adygejski",ae:"awestyjski",aeb:"tunezyjski arabski",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ajnu",ak:"akan",akk:"akadyjski",akz:"alabama",ale:"aleucki",aln:"albański gegijski",alt:"południowoałtajski",am:"amharski",an:"aragoński",ang:"staroangielski",anp:"angika",ar:"arabski","ar-001":"współczesny arabski",arc:"aramejski",arn:"mapudungun",aro:"araona",arp:"arapaho",arq:"algierski arabski",ars:"arabski nadżdyjski",arw:"arawak",ary:"marokański arabski",arz:"egipski arabski",as:"asamski",asa:"asu",ase:"amerykański język migowy",ast:"asturyjski",av:"awarski",avk:"kotava",awa:"awadhi",ay:"ajmara",az:"azerbejdżański",ba:"baszkirski",bal:"beludżi",ban:"balijski",bar:"bawarski",bas:"basaa",bax:"bamum",bbc:"batak toba",bbj:"ghomala",be:"białoruski",bej:"bedża",bem:"bemba",bew:"betawi",bez:"bena",bfd:"bafut",bfq:"badaga",bg:"bułgarski",bgn:"beludżi północny",bho:"bhodżpuri",bi:"bislama",bik:"bikol",bin:"bini",bjn:"banjar",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalski",bo:"tybetański",bpy:"bisznuprija-manipuri",bqi:"bachtiarski",br:"bretoński",bra:"bradź",brh:"brahui",brx:"bodo",bs:"bośniacki",bss:"akoose",bua:"buriacki",bug:"bugijski",bum:"bulu",byn:"blin",byv:"medumba",ca:"kataloński",cad:"kaddo",car:"karaibski",cay:"kajuga",cch:"atsam",ccp:"czakma",ce:"czeczeński",ceb:"cebuano",cgg:"chiga",ch:"czamorro",chb:"czibcza",chg:"czagatajski",chk:"chuuk",chm:"maryjski",chn:"żargon czinucki",cho:"czoktawski",chp:"czipewiański",chr:"czirokeski",chy:"czejeński",ckb:"sorani",co:"korsykański",cop:"koptyjski",cps:"capiznon",cr:"kri",crh:"krymskotatarski",crs:"kreolski seszelski",cs:"czeski",csb:"kaszubski",cu:"cerkiewnosłowiański",cv:"czuwaski",cy:"walijski",da:"duński",dak:"dakota",dar:"dargwijski",dav:"taita",de:"niemiecki","de-AT":"austriacki niemiecki","de-CH":"szwajcarski wysokoniemiecki",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"dżerma",doi:"dogri",dsb:"dolnołużycki",dtp:"dusun centralny",dua:"duala",dum:"średniowieczny niderlandzki",dv:"malediwski",dyo:"diola",dyu:"diula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egl:"emilijski",egy:"staroegipski",eka:"ekajuk",el:"grecki",elx:"elamicki",en:"angielski","en-AU":"australijski angielski","en-CA":"kanadyjski angielski","en-GB":"brytyjski angielski","en-US":"amerykański angielski",enm:"średnioangielski",eo:"esperanto",es:"hiszpański","es-419":"amerykański hiszpański","es-ES":"europejski hiszpański","es-MX":"meksykański hiszpański",esu:"yupik środkowosyberyjski",et:"estoński",eu:"baskijski",ewo:"ewondo",ext:"estremadurski",fa:"perski",fan:"fang",fat:"fanti",ff:"fulani",fi:"fiński",fil:"filipino",fit:"meänkieli",fj:"fidżijski",fo:"farerski",fr:"francuski","fr-CA":"kanadyjski francuski","fr-CH":"szwajcarski francuski",frc:"cajuński",frm:"średniofrancuski",fro:"starofrancuski",frp:"franko-prowansalski",frr:"północnofryzyjski",frs:"wschodniofryzyjski",fur:"friulski",fy:"zachodniofryzyjski",ga:"irlandzki",gaa:"ga",gag:"gagauski",gay:"gayo",gba:"gbaya",gbz:"zaratusztriański dari",gd:"szkocki gaelicki",gez:"gyyz",gil:"gilbertański",gl:"galicyjski",glk:"giliański",gmh:"średnio-wysoko-niemiecki",gn:"guarani",goh:"staro-wysoko-niemiecki",gom:"konkani (Goa)",gon:"gondi",gor:"gorontalo",got:"gocki",grb:"grebo",grc:"starogrecki",gsw:"szwajcarski niemiecki",gu:"gudżarati",guc:"wayúu",gur:"frafra",guz:"gusii",gv:"manx",gwi:"gwichʼin",ha:"hausa",hai:"haida",hak:"hakka",haw:"hawajski",he:"hebrajski",hi:"hindi",hif:"hindi fidżyjskie",hil:"hiligaynon",hit:"hetycki",hmn:"hmong",ho:"hiri motu",hr:"chorwacki",hsb:"górnołużycki",hsn:"xiang",ht:"kreolski haitański",hu:"węgierski",hup:"hupa",hy:"ormiański",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonezyjski",ie:"interlingue",ig:"igbo",ii:"syczuański",ik:"inupiak",ilo:"ilokano",inh:"inguski",io:"ido",is:"islandzki",it:"włoski",iu:"inuktitut",izh:"ingryjski",ja:"japoński",jam:"jamajski",jbo:"lojban",jgo:"ngombe",jmc:"machame",jpr:"judeo-perski",jrb:"judeoarabski",jut:"jutlandzki",jv:"jawajski",ka:"gruziński",kaa:"karakałpacki",kab:"kabylski",kac:"kaczin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardyjski",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kreolski Wysp Zielonego Przylądka",ken:"kenyang",kfo:"koro",kg:"kongo",kgp:"kaingang",kha:"khasi",kho:"chotański",khq:"koyra chiini",khw:"khowar",ki:"kikuju",kiu:"kirmandżki",kj:"kwanyama",kk:"kazachski",kkj:"kako",kl:"grenlandzki",kln:"kalenjin",km:"khmerski",kmb:"kimbundu",kn:"kannada",ko:"koreański",koi:"komi-permiacki",kok:"konkani",kos:"kosrae",kpe:"kpelle",kr:"kanuri",krc:"karaczajsko-bałkarski",kri:"krio",krj:"kinaraya",krl:"karelski",kru:"kurukh",ks:"kaszmirski",ksb:"sambala",ksf:"bafia",ksh:"gwara kolońska",ku:"kurdyjski",kum:"kumycki",kut:"kutenai",kv:"komi",kw:"kornijski",ky:"kirgiski",la:"łaciński",lad:"ladyński",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luksemburski",lez:"lezgijski",lfn:"Lingua Franca Nova",lg:"ganda",li:"limburski",lij:"liguryjski",liv:"liwski",lkt:"lakota",lmo:"lombardzki",ln:"lingala",lo:"laotański",lol:"mongo",lou:"kreolski luizjański",loz:"lozi",lrc:"luryjski północny",lt:"litewski",ltg:"łatgalski",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"mizo",luy:"luhya",lv:"łotewski",lzh:"chiński klasyczny",lzz:"lazyjski",mad:"madurski",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masajski",mde:"maba",mdf:"moksza",mdr:"mandar",men:"mende",mer:"meru",mfe:"kreolski Mauritiusa",mg:"malgaski",mga:"średnioirlandzki",mgh:"makua",mgo:"meta",mh:"marszalski",mi:"maoryjski",mic:"mikmak",min:"minangkabu",mk:"macedoński",ml:"malajalam",mn:"mongolski",mnc:"manchu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",mrj:"zachodniomaryjski",ms:"malajski",mt:"maltański",mua:"mundang",mus:"krik",mwl:"mirandyjski",mwr:"marwari",mwv:"mentawai",my:"birmański",mye:"myene",myv:"erzja",mzn:"mazanderański",na:"nauruański",nan:"minnański",nap:"neapolitański",naq:"nama",nb:"norweski (bokmål)",nd:"ndebele północny",nds:"dolnoniemiecki","nds-NL":"dolnosaksoński",ne:"nepalski","new":"newarski",ng:"ndonga",nia:"nias",niu:"niue",njo:"ao",nl:"niderlandzki","nl-BE":"flamandzki",nmg:"ngumba",nn:"norweski (nynorsk)",nnh:"ngiemboon",no:"norweski",nog:"nogajski",non:"staronordyjski",nov:"novial",nqo:"n’ko",nr:"ndebele południowy",nso:"sotho północny",nus:"nuer",nv:"nawaho",nwc:"newarski klasyczny",ny:"njandża",nym:"niamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzema",oc:"oksytański",oj:"odżibwa",om:"oromo",or:"orija",os:"osetyjski",osa:"osage",ota:"osmańsko-turecki",pa:"pendżabski",pag:"pangasinan",pal:"pahlavi",pam:"pampango",pap:"papiamento",pau:"palau",pcd:"pikardyjski",pcm:"pidżyn nigeryjski",pdc:"pensylwański",pdt:"plautdietsch",peo:"staroperski",pfl:"palatynacki",phn:"fenicki",pi:"palijski",pl:"polski",pms:"piemoncki",pnt:"pontyjski",pon:"ponpejski",prg:"pruski",pro:"staroprowansalski",ps:"paszto",pt:"portugalski","pt-BR":"brazylijski portugalski","pt-PT":"europejski portugalski",qu:"keczua",quc:"kicze",qug:"keczua górski (Chimborazo)",raj:"radźasthani",rap:"rapanui",rar:"rarotonga",rgn:"romagnol",rif:"tarifit",rm:"retoromański",rn:"rundi",ro:"rumuński","ro-MD":"mołdawski",rof:"rombo",rom:"cygański",root:"język rdzenny",rtm:"rotumański",ru:"rosyjski",rue:"rusiński",rug:"roviana",rup:"arumuński",rw:"kinya-ruanda",rwk:"rwa",sa:"sanskryt",sad:"sandawe",sah:"jakucki",sam:"samarytański aramejski",saq:"samburu",sas:"sasak",sat:"santali",saz:"saurasztryjski",sba:"ngambay",sbp:"sangu",sc:"sardyński",scn:"sycylijski",sco:"scots",sd:"sindhi",sdc:"sassarski",sdh:"południowokurdyjski",se:"północnolapoński",see:"seneka",seh:"sena",sei:"seri",sel:"selkupski",ses:"koyraboro senni",sg:"sango",sga:"staroirlandzki",sgs:"żmudzki",sh:"serbsko-chorwacki",shi:"tashelhiyt",shn:"szan",shu:"arabski (Czad)",si:"syngaleski",sid:"sidamo",sk:"słowacki",sl:"słoweński",sli:"dolnośląski",sly:"selayar",sm:"samoański",sma:"południowolapoński",smj:"lule",smn:"inari",sms:"skolt",sn:"shona",snk:"soninke",so:"somalijski",sog:"sogdyjski",sq:"albański",sr:"serbski",srn:"sranan tongo",srr:"serer",ss:"suazi",ssy:"saho",st:"sotho południowy",stq:"fryzyjski saterlandzki",su:"sundajski",suk:"sukuma",sus:"susu",sux:"sumeryjski",sv:"szwedzki",sw:"suahili","sw-CD":"kongijski suahili",swb:"komoryjski",syc:"syriacki",syr:"syryjski",szl:"śląski",ta:"tamilski",tcy:"tulu",te:"telugu",tem:"temne",teo:"ateso",ter:"tereno",tet:"tetum",tg:"tadżycki",th:"tajski",ti:"tigrinia",tig:"tigre",tiv:"tiw",tk:"turkmeński",tkl:"tokelau",tkr:"cachurski",tl:"tagalski",tlh:"klingoński",tli:"tlingit",tly:"tałyski",tmh:"tamaszek",tn:"setswana",to:"tonga",tog:"tonga (Niasa)",tpi:"tok pisin",tr:"turecki",tru:"turoyo",trv:"taroko",ts:"tsonga",tsd:"cakoński",tsi:"tsimshian",tt:"tatarski",ttt:"tacki",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahitański",tyv:"tuwiński",tzm:"tamazight (Atlas Środkowy)",udm:"udmurcki",ug:"ujgurski",uga:"ugarycki",uk:"ukraiński",umb:"umbundu",ur:"urdu",uz:"uzbecki",vai:"wai",ve:"venda",vec:"wenecki",vep:"wepski",vi:"wietnamski",vls:"zachodnioflamandzki",vmf:"meński frankoński",vo:"wolapik",vot:"wotiacki",vro:"võro",vun:"vunjo",wa:"waloński",wae:"walser",wal:"wolayta",war:"waraj",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"wu",xal:"kałmucki",xh:"khosa",xmf:"megrelski",xog:"soga",yap:"japski",yav:"yangben",ybb:"yemba",yi:"jidysz",yo:"joruba",yrl:"nheengatu",yue:"kantoński",za:"czuang",zap:"zapotecki",zbl:"bliss",zea:"zelandzki",zen:"zenaga",zgh:"standardowy marokański tamazight",zh:"chiński","zh-Hans":"standardowy chiński uproszczony","zh-Hant":"standardowy chiński tradycyjny",zu:"zulu",zun:"zuni",zza:"zazaki"},scriptNames:{Cyrl:"cyrylica",Latn:"łacińskie",Arab:"arabskie",Guru:"gurmukhi",Tfng:"tifinagh (berberski)",Vaii:"vai",Hans:"uproszczone",Hant:"tradycyjne"}},pt:{rtl:false,languageNames:{aa:"afar",ab:"abcázio",ace:"achém",ach:"acoli",ada:"adangme",ady:"adigue",ae:"avéstico",af:"africanês",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"acadiano",ale:"aleúte",alt:"altai do sul",am:"amárico",an:"aragonês",ang:"inglês antigo",anp:"angika",ar:"árabe","ar-001":"árabe moderno padrão",arc:"aramaico",arn:"mapuche",arp:"arapaho",ars:"árabe do Négede",arw:"arauaqui",as:"assamês",asa:"asu",ast:"asturiano",av:"avaric",awa:"awadhi",ay:"aimará",az:"azerbaijano","az-Arab":"azeri sul",ba:"bashkir",bal:"balúchi",ban:"balinês",bas:"basa",bax:"bamun",bbj:"ghomala",be:"bielorrusso",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"búlgaro",bgn:"balúchi ocidental",bho:"bhojpuri",bi:"bislamá",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalês",bo:"tibetano",br:"bretão",bra:"braj",brx:"bodo",bs:"bósnio",bss:"akoose",bua:"buriat",bug:"buginês",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalão",cad:"caddo",car:"caribe",cay:"cayuga",cch:"atsam",ccp:"changma",ce:"checheno",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuquês",chm:"mari",chn:"jargão chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"sorani curdo",co:"córsico",cop:"copta",cr:"cree",crh:"turco da Crimeia",crs:"francês crioulo seselwa",cs:"checo",csb:"kashubian",cu:"eslavo eclesiástico",cv:"chuvash",cy:"galês",da:"dinamarquês",dak:"dacota",dar:"dargwa",dav:"taita",de:"alemão","de-AT":"alemão austríaco","de-CH":"alto alemão suíço",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"baixo sorábio",dua:"duala",dum:"holandês médio",dv:"divehi",dyo:"jola-fonyi",dyu:"diúla",dz:"dzonga",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egy:"egípcio clássico",eka:"ekajuk",el:"grego",elx:"elamite",en:"inglês","en-AU":"inglês australiano","en-CA":"inglês canadiano","en-GB":"inglês britânico","en-US":"inglês americano",enm:"inglês médio",eo:"esperanto",es:"espanhol","es-419":"espanhol latino-americano","es-ES":"espanhol europeu","es-MX":"espanhol mexicano",et:"estónio",eu:"basco",ewo:"ewondo",fa:"persa",fan:"fangue",fat:"fanti",ff:"fula",fi:"finlandês",fil:"filipino",fj:"fijiano",fo:"feroês",fr:"francês","fr-CA":"francês canadiano","fr-CH":"francês suíço",frc:"francês cajun",frm:"francês médio",fro:"francês antigo",frr:"frísio setentrional",frs:"frísio oriental",fur:"friulano",fy:"frísico ocidental",ga:"irlandês",gaa:"ga",gag:"gagauz",gay:"gayo",gba:"gbaia",gd:"gaélico escocês",gez:"geʼez",gil:"gilbertês",gl:"galego",gmh:"alto alemão médio",gn:"guarani",goh:"alemão alto antigo",gon:"gondi",gor:"gorontalo",got:"gótico",grb:"grebo",grc:"grego clássico",gsw:"alemão suíço",gu:"guzerate",guz:"gusii",gv:"manx",gwi:"gwichʼin",ha:"haúça",hai:"haida",hak:"hacá",haw:"havaiano",he:"hebraico",hi:"hindi",hil:"hiligaynon",hit:"hitita",hmn:"hmong",ho:"hiri motu",hr:"croata",hsb:"alto sorábio",hsn:"xiang",ht:"haitiano",hu:"húngaro",hup:"hupa",hy:"arménio",hz:"herero",ia:"interlíngua",iba:"iban",ibb:"ibibio",id:"indonésio",ie:"interlingue",ig:"igbo",ii:"sichuan yi",ik:"inupiaque",ilo:"ilocano",inh:"inguche",io:"ido",is:"islandês",it:"italiano",iu:"inuktitut",ja:"japonês",jbo:"lojban",jgo:"nguemba",jmc:"machame",jpr:"judaico-persa",jrb:"judaico-arábico",jv:"javanês",ka:"georgiano",kaa:"kara-kalpak",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"cabardiano",kbl:"kanembu",kcg:"tyap",kde:"maconde",kea:"crioulo cabo-verdiano",kfo:"koro",kg:"congolês",kha:"khasi",kho:"khotanês",khq:"koyra chiini",ki:"quicuio",kj:"cuanhama",kk:"cazaque",kkj:"kako",kl:"gronelandês",kln:"kalenjin",km:"khmer",kmb:"quimbundo",kn:"canarim",ko:"coreano",koi:"komi-permyak",kok:"concani",kos:"kosraean",kpe:"kpelle",kr:"canúri",krc:"carachaio-bálcaro",krl:"carélio",kru:"kurukh",ks:"caxemira",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"curdo",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"córnico",ky:"quirguiz",la:"latim",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburguês",lez:"lezghiano",lg:"ganda",li:"limburguês",lkt:"lacota",ln:"lingala",lo:"laosiano",lol:"mongo",lou:"crioulo de Louisiana",loz:"lozi",lrc:"luri do norte",lt:"lituano",lu:"luba-catanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"luyia",lv:"letão",mad:"madurês",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makassarês",man:"mandinga",mas:"massai",mde:"maba",mdf:"mocsa",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malgaxe",mga:"irlandês médio",mgh:"macua",mgo:"meta’",mh:"marshalês",mi:"maori",mic:"miquemaque",min:"minangkabau",mk:"macedónio",ml:"malaiala",mn:"mongol",mnc:"manchu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marata",ms:"malaio",mt:"maltês",mua:"mundang",mus:"creek",mwl:"mirandês",mwr:"marwari",my:"birmanês",mye:"myene",myv:"erzya",mzn:"mazandarani",na:"nauruano",nan:"min nan",nap:"napolitano",naq:"nama",nb:"norueguês bokmål",nd:"ndebele do norte",nds:"baixo-alemão","nds-NL":"baixo-saxão",ne:"nepalês","new":"newari",ng:"dongo",nia:"nias",niu:"niueano",nl:"neerlandês","nl-BE":"flamengo",nmg:"kwasio",nn:"norueguês nynorsk",nnh:"ngiemboon",no:"norueguês",nog:"nogai",non:"nórdico antigo",nqo:"n’ko",nr:"ndebele do sul",nso:"soto setentrional",nus:"nuer",nv:"navajo",nwc:"newari clássico",ny:"nianja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitano",oj:"ojibwa",om:"oromo",or:"oriya",os:"ossético",osa:"osage",ota:"turco otomano",pa:"panjabi",pag:"língua pangasinesa",pal:"pálavi",pam:"pampango",pap:"papiamento",pau:"palauano",pcm:"pidgin nigeriano",peo:"persa antigo",phn:"fenício",pi:"páli",pl:"polaco",pon:"língua pohnpeica",prg:"prussiano",pro:"provençal antigo",ps:"pastó",pt:"português","pt-BR":"português do Brasil","pt-PT":"português europeu",qu:"quíchua",quc:"quiché",raj:"rajastanês",rap:"rapanui",rar:"rarotongano",rm:"romanche",rn:"rundi",ro:"romeno","ro-MD":"moldávio",rof:"rombo",rom:"romani",ru:"russo",rup:"aromeno",rw:"quiniaruanda",rwk:"rwa",sa:"sânscrito",sad:"sandawe",sah:"sakha",sam:"aramaico samaritano",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"scots",sd:"sindi",sdh:"curdo meridional",se:"sami do norte",see:"seneca",seh:"sena",sel:"selkup",ses:"koyraboro senni",sg:"sango",sga:"irlandês antigo",sh:"servo-croata",shi:"tachelhit",shn:"shan",shu:"árabe do Chade",si:"cingalês",sid:"sidamo",sk:"eslovaco",sl:"esloveno",sm:"samoano",sma:"sami do sul",smj:"sami de Lule",smn:"inari sami",sms:"sami de Skolt",sn:"shona",snk:"soninquê",so:"somali",sog:"sogdiano",sq:"albanês",sr:"sérvio",srn:"surinamês",srr:"serere",ss:"suázi",ssy:"saho",st:"soto do sul",su:"sundanês",suk:"sukuma",sus:"susu",sux:"sumério",sv:"sueco",sw:"suaíli","sw-CD":"suaíli do Congo",swb:"comoriano",syc:"siríaco clássico",syr:"siríaco",ta:"tâmil",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tétum",tg:"tajique",th:"tailandês",ti:"tigrínia",tig:"tigré",tk:"turcomano",tkl:"toquelauano",tl:"tagalo",tlh:"klingon",tli:"tlinguite",tmh:"tamaxeque",tn:"tswana",to:"tonga",tog:"tonganês de Nyasa",tpi:"tok pisin",tr:"turco",trv:"taroko",ts:"tsonga",tsi:"tsimshiano",tt:"tatar",tum:"tumbuka",tvl:"tuvaluano",tw:"twi",twq:"tasawaq",ty:"taitiano",tyv:"tuviniano",tzm:"tamazight do Atlas Central",udm:"udmurte",ug:"uigur",uga:"ugarítico",uk:"ucraniano",umb:"umbundu",ur:"urdu",uz:"usbeque",ve:"venda",vi:"vietnamita",vo:"volapuque",vot:"vótico",vun:"vunjo",wa:"valão",wae:"walser",wal:"wolaytta",war:"waray",was:"washo",wbp:"warlpiri",wo:"uólofe",wuu:"wu",xal:"kalmyk",xh:"xosa",xog:"soga",yap:"yapese",yav:"yangben",ybb:"yemba",yi:"iídiche",yo:"ioruba",yue:"cantonês",za:"zhuang",zap:"zapoteco",zbl:"símbolos blis",zen:"zenaga",zgh:"tamazight marroquino padrão",zh:"chinês","zh-Hans":"chinês mandarim simplificado","zh-Hant":"chinês mandarim tradicional",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"cirílico",Latn:"latim",Arab:"árabe",Guru:"gurmuqui",Tfng:"tifinagh",Vaii:"vai",Hans:"simplificado",Hant:"tradicional"}},"pt-BR":{rtl:false,languageNames:{aa:"afar",ab:"abcázio",ace:"achém",ach:"acoli",ada:"adangme",ady:"adigue",ae:"avéstico",af:"africâner",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"acadiano",ale:"aleúte",alt:"altai meridional",am:"amárico",an:"aragonês",ang:"inglês arcaico",anp:"angika",ar:"árabe","ar-001":"árabe moderno",arc:"aramaico",arn:"mapudungun",arp:"arapaho",ars:"árabe négede",arw:"arauaqui",as:"assamês",asa:"asu",ast:"asturiano",av:"avárico",awa:"awadhi",ay:"aimará",az:"azerbaijano","az-Arab":"azeri sul",ba:"bashkir",bal:"balúchi",ban:"balinês",bas:"basa",bax:"bamum",bbj:"ghomala’",be:"bielorrusso",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"búlgaro",bgn:"balúchi ocidental",bho:"bhojpuri",bi:"bislamá",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tibetano",br:"bretão",bra:"braj",brx:"bodo",bs:"bósnio",bss:"akoose",bua:"buriato",bug:"buginês",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalão",cad:"caddo",car:"caribe",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"checheno",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuukese",chm:"mari",chn:"jargão Chinook",cho:"choctaw",chp:"chipewyan",chr:"cheroqui",chy:"cheiene",ckb:"curdo central",co:"corso",cop:"copta",cr:"cree",crh:"turco da Crimeia",crs:"crioulo francês seichelense",cs:"tcheco",csb:"kashubian",cu:"eslavo eclesiástico",cv:"tchuvache",cy:"galês",da:"dinamarquês",dak:"dacota",dar:"dargwa",dav:"taita",de:"alemão","de-AT":"alemão (Áustria)","de-CH":"alto alemão (Suíça)",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"baixo sorábio",dua:"duala",dum:"holandês médio",dv:"divehi",dyo:"jola-fonyi",dyu:"diúla",dz:"dzonga",dzg:"dazaga",ebu:"embu",ee:"eve",efi:"efique",egy:"egípcio arcaico",eka:"ekajuk",el:"grego",elx:"elamite",en:"inglês","en-AU":"inglês (Austrália)","en-CA":"inglês (Canadá)","en-GB":"inglês (Reino Unido)","en-US":"inglês (Estados Unidos)",enm:"inglês médio",eo:"esperanto",es:"espanhol","es-419":"espanhol (América Latina)","es-ES":"espanhol (Espanha)","es-MX":"espanhol (México)",et:"estoniano",eu:"basco",ewo:"ewondo",fa:"persa",fan:"fangue",fat:"fanti",ff:"fula",fi:"finlandês",fil:"filipino",fj:"fijiano",fo:"feroês",fon:"fom",fr:"francês","fr-CA":"francês (Canadá)","fr-CH":"francês (Suíça)",frc:"francês cajun",frm:"francês médio",fro:"francês arcaico",frr:"frísio setentrional",frs:"frisão oriental",fur:"friulano",fy:"frísio ocidental",ga:"irlandês",gaa:"ga",gag:"gagauz",gay:"gayo",gba:"gbaia",gd:"gaélico escocês",gez:"geez",gil:"gilbertês",gl:"galego",gmh:"alto alemão médio",gn:"guarani",goh:"alemão arcaico alto",gon:"gondi",gor:"gorontalo",got:"gótico",grb:"grebo",grc:"grego arcaico",gsw:"alemão (Suíça)",gu:"guzerate",guz:"gusii",gv:"manx",gwi:"gwichʼin",ha:"hauçá",hai:"haida",hak:"hacá",haw:"havaiano",he:"hebraico",hi:"híndi",hil:"hiligaynon",hit:"hitita",hmn:"hmong",ho:"hiri motu",hr:"croata",hsb:"alto sorábio",hsn:"xiang",ht:"haitiano",hu:"húngaro",hup:"hupa",hy:"armênio",hz:"herero",ia:"interlíngua",iba:"iban",ibb:"ibibio",id:"indonésio",ie:"interlingue",ig:"igbo",ii:"sichuan yi",ik:"inupiaque",ilo:"ilocano",inh:"inguche",io:"ido",is:"islandês",it:"italiano",iu:"inuktitut",ja:"japonês",jbo:"lojban",jgo:"nguemba",jmc:"machame",jpr:"judaico-persa",jrb:"judaico-arábico",jv:"javanês",ka:"georgiano",kaa:"kara-kalpak",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardiano",kbl:"kanembu",kcg:"tyap",kde:"maconde",kea:"crioulo cabo-verdiano",kfo:"koro",kg:"congolês",kha:"khasi",kho:"khotanês",khq:"koyra chiini",ki:"quicuio",kj:"cuanhama",kk:"cazaque",kkj:"kako",kl:"groenlandês",kln:"kalenjin",km:"khmer",kmb:"quimbundo",kn:"canarim",ko:"coreano",koi:"komi-permyak",kok:"concani",kos:"kosraean",kpe:"kpelle",kr:"canúri",krc:"karachay-balkar",krl:"carélio",kru:"kurukh",ks:"caxemira",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"curdo",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"córnico",ky:"quirguiz",la:"latim",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburguês",lez:"lezgui",lg:"luganda",li:"limburguês",lkt:"lacota",ln:"lingala",lo:"laosiano",lol:"mongo",lou:"crioulo da Louisiana",loz:"lozi",lrc:"luri setentrional",lt:"lituano",lu:"luba-catanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"luyia",lv:"letão",mad:"madurês",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandinga",mas:"massai",mde:"maba",mdf:"mocsa",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malgaxe",mga:"irlandês médio",mgh:"macua",mgo:"meta’",mh:"marshalês",mi:"maori",mic:"miquemaque",min:"minangkabau",mk:"macedônio",ml:"malaiala",mn:"mongol",mnc:"manchu",mni:"manipuri",moh:"moicano",mos:"mossi",mr:"marati",ms:"malaio",mt:"maltês",mua:"mundang",mus:"creek",mwl:"mirandês",mwr:"marwari",my:"birmanês",mye:"myene",myv:"erzya",mzn:"mazandarani",na:"nauruano",nan:"min nan",nap:"napolitano",naq:"nama",nb:"bokmål norueguês",nd:"ndebele do norte",nds:"baixo alemão","nds-NL":"baixo saxão",ne:"nepalês","new":"newari",ng:"dongo",nia:"nias",niu:"niueano",nl:"holandês","nl-BE":"flamengo",nmg:"kwasio",nn:"nynorsk norueguês",nnh:"ngiemboon",no:"norueguês",nog:"nogai",non:"nórdico arcaico",nqo:"n’ko",nr:"ndebele do sul",nso:"soto setentrional",nus:"nuer",nv:"navajo",nwc:"newari clássico",ny:"nianja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitânico",oj:"ojibwa",om:"oromo",or:"oriá",os:"osseto",osa:"osage",ota:"turco otomano",pa:"panjabi",pag:"pangasinã",pal:"pálavi",pam:"pampanga",pap:"papiamento",pau:"palauano",pcm:"pidgin nigeriano",peo:"persa arcaico",phn:"fenício",pi:"páli",pl:"polonês",pon:"pohnpeiano",prg:"prussiano",pro:"provençal arcaico",ps:"pashto",pt:"português","pt-BR":"português (Brasil)","pt-PT":"português (Portugal)",qu:"quíchua",quc:"quiché",raj:"rajastani",rap:"rapanui",rar:"rarotongano",rm:"romanche",rn:"rundi",ro:"romeno","ro-MD":"moldávio",rof:"rombo",rom:"romani",root:"raiz",ru:"russo",rup:"aromeno",rw:"quiniaruanda",rwk:"rwa",sa:"sânscrito",sad:"sandawe",sah:"sakha",sam:"aramaico samaritano",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"scots",sd:"sindi",sdh:"curdo meridional",se:"sami setentrional",see:"seneca",seh:"sena",sel:"selkup",ses:"koyraboro senni",sg:"sango",sga:"irlandês arcaico",sh:"servo-croata",shi:"tachelhit",shn:"shan",shu:"árabe chadiano",si:"cingalês",sid:"sidamo",sk:"eslovaco",sl:"esloveno",sm:"samoano",sma:"sami meridional",smj:"sami de Lule",smn:"sami de Inari",sms:"sami de Skolt",sn:"xona",snk:"soninquê",so:"somali",sog:"sogdiano",sq:"albanês",sr:"sérvio",srn:"surinamês",srr:"serere",ss:"suázi",ssy:"saho",st:"soto do sul",su:"sundanês",suk:"sukuma",sus:"susu",sux:"sumério",sv:"sueco",sw:"suaíli","sw-CD":"suaíli do Congo",swb:"comoriano",syc:"siríaco clássico",syr:"siríaco",ta:"tâmil",te:"télugo",tem:"timne",teo:"teso",ter:"tereno",tet:"tétum",tg:"tadjique",th:"tailandês",ti:"tigrínia",tig:"tigré",tk:"turcomeno",tkl:"toquelauano",tl:"tagalo",tlh:"klingon",tli:"tlinguite",tmh:"tamaxeque",tn:"tswana",to:"tonganês",tog:"tonganês de Nyasa",tpi:"tok pisin",tr:"turco",trv:"taroko",ts:"tsonga",tsi:"tsimshiano",tt:"tártaro",tum:"tumbuka",tvl:"tuvaluano",tw:"twi",twq:"tasawaq",ty:"taitiano",tyv:"tuviniano",tzm:"tamazirte do Atlas Central",udm:"udmurte",ug:"uigur",uga:"ugarítico",uk:"ucraniano",umb:"umbundu",ur:"urdu",uz:"uzbeque",ve:"venda",vi:"vietnamita",vo:"volapuque",vot:"vótico",vun:"vunjo",wa:"valão",wae:"walser",wal:"wolaytta",war:"waray",was:"washo",wbp:"warlpiri",wo:"uolofe",wuu:"wu",xal:"kalmyk",xh:"xhosa",xog:"lusoga",yap:"yapese",yav:"yangben",ybb:"yemba",yi:"iídiche",yo:"iorubá",yue:"cantonês",za:"zhuang",zap:"zapoteco",zbl:"símbolos blis",zen:"zenaga",zgh:"tamazirte marroqino padrão",zh:"chinês","zh-Hans":"chinês mandarim (simplificado)","zh-Hant":"chinês mandarim (tradicional)",zu:"zulu",zun:"zunhi",zza:"zazaki"},scriptNames:{Cyrl:"cirílico",Latn:"latim",Arab:"árabe",Guru:"gurmuqui",Tfng:"tifinagh",Vaii:"vai",Hans:"simplificado",Hant:"tradicional"}},rm:{rtl:false,languageNames:{aa:"afar",ab:"abchasian",ace:"aceh",ach:"acoli",ada:"andangme",ady:"adygai",ae:"avestic",af:"afrikaans",afh:"afrihili",ain:"ainu",ak:"akan",akk:"accadic",ale:"aleutic",alt:"altaic dal sid",am:"amaric",an:"aragonais",ang:"englais vegl",anp:"angika",ar:"arab","ar-001":"arab (mund)",arc:"arameic",arn:"araucanic",arp:"arapaho",arw:"arawak",as:"assami",ast:"asturian",av:"avaric",awa:"awadhi",ay:"aymara",az:"aserbeidschanic",ba:"baschkir",bal:"belutschi",ban:"balinais",bas:"basaa",be:"bieloruss",bej:"bedscha",bem:"bemba",bg:"bulgar",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bla:"siksika",bm:"bambara",bn:"bengal",bo:"tibetan",br:"breton",bra:"braj",bs:"bosniac",bua:"buriat",bug:"bugi",byn:"blin",ca:"catalan",cad:"caddo",car:"caribic",cch:"atsam",ce:"tschetschen",ceb:"cebuano",ch:"chamorro",chb:"chibcha",chg:"tschagataic",chk:"chuukais",chm:"mari",chn:"patuà chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",co:"cors",cop:"coptic",cr:"cree",crh:"tirc crimean",cs:"tschec",csb:"kaschubic",cu:"slav da baselgia",cv:"tschuvasch",cy:"kimric",da:"danais",dak:"dakota",dar:"dargwa",de:"tudestg","de-AT":"tudestg austriac","de-CH":"tudestg (Svizra)",del:"delaware",den:"slavey",dgr:"dogrib",din:"dinka",doi:"dogri",dsb:"bass sorb",dua:"duala",dum:"ollandais mesaun",dv:"maledivic",dyu:"diula",dz:"dzongkha",ee:"ewe",efi:"efik",egy:"egipzian vegl",eka:"ekajuk",el:"grec",elx:"elamitic",en:"englais","en-AU":"englais australian","en-CA":"englais canadais","en-GB":"englais britannic","en-US":"englais american",enm:"englais mesaun",eo:"esperanto",es:"spagnol","es-419":"spagnol latinamerican","es-ES":"spagnol iberic","es-MX":"spagnol (Mexico)",et:"eston",eu:"basc",ewo:"ewondo",fa:"persian",fan:"fang",fat:"fanti",ff:"fulah",fi:"finlandais",fil:"filippino",fj:"fidschian",fo:"ferrais",fr:"franzos","fr-CA":"franzos canadais","fr-CH":"franzos svizzer",frm:"franzos mesaun",fro:"franzos vegl",frr:"fris dal nord",frs:"fris da l’ost",fur:"friulan",fy:"fris",ga:"irlandais",gaa:"ga",gay:"gayo",gba:"gbaya",gd:"gaelic scot",gez:"geez",gil:"gilbertais",gl:"galician",gmh:"tudestg mesaun",gn:"guarani",goh:"vegl tudestg da scrittira",gon:"gondi",gor:"gorontalo",got:"gotic",grb:"grebo",grc:"grec vegl",gsw:"tudestg svizzer",gu:"gujarati",gv:"manx",gwi:"gwichʼin",ha:"haussa",hai:"haida",haw:"hawaian",he:"ebraic",hi:"hindi",hil:"hiligaynon",hit:"ettitic",hmn:"hmong",ho:"hiri motu",hr:"croat",hsb:"aut sorb",ht:"haitian",hu:"ungarais",hup:"hupa",hy:"armen",hz:"herero",ia:"interlingua",iba:"iban",id:"indonais",ie:"interlingue",ig:"igbo",ii:"sichuan yi",ik:"inupiak",ilo:"ilocano",inh:"ingush",io:"ido",is:"islandais",it:"talian",iu:"inuktitut",ja:"giapunais",jbo:"lojban",jpr:"giudaic-persian",jrb:"giudaic-arab",jv:"javanais",ka:"georgian",kaa:"karakalpak",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardic",kcg:"tyap",kfo:"koro",kg:"kongo",kha:"khasi",kho:"khotanais",ki:"kikuyu",kj:"kuanyama",kk:"casac",kl:"grönlandais",km:"cambodschan",kmb:"kimbundu",kn:"kannada",ko:"corean",kok:"konkani",kos:"kosraean",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",krl:"carelian",kru:"kurukh",ks:"kashmiri",ku:"curd",kum:"kumuk",kut:"kutenai",kv:"komi",kw:"cornic",ky:"kirghis",la:"latin",lad:"ladino",lah:"lahnda",lam:"lamba",lb:"luxemburgais",lez:"lezghian",lg:"ganda",li:"limburgais",ln:"lingala",lo:"laot",lol:"lomongo",loz:"lozi",lt:"lituan",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",lv:"letton",mad:"madurais",mag:"magahi",mai:"maithili",mak:"makassar",man:"mandingo",mas:"masai",mdf:"moksha",mdr:"mandar",men:"mende",mg:"malagassi",mga:"irlandais mesaun",mh:"marschallais",mi:"maori",mic:"micmac",min:"minangkabau",mk:"macedon",ml:"malayalam",mn:"mongolic",mnc:"manchu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",ms:"malaic",mt:"maltais",mus:"creek",mwl:"mirandais",mwr:"marwari",my:"birman",myv:"erzya",na:"nauru",nap:"neapolitan",nb:"norvegais bokmål",nd:"ndebele dal nord",nds:"bass tudestg","nds-NL":"bass tudestg (Pajais Bass)",ne:"nepalais","new":"newari",ng:"ndonga",nia:"nias",niu:"niue",nl:"ollandais","nl-BE":"flam",nn:"norvegiais nynorsk",no:"norvegiais",nog:"nogai",non:"nordic vegl",nqo:"n’ko",nr:"ndebele dal sid",nso:"sotho dal nord",nv:"navajo",nwc:"newari classic",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitan",oj:"ojibwa",om:"oromo",or:"oriya",os:"ossetic",osa:"osage",ota:"tirc ottoman",pa:"punjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palau",peo:"persian vegl",phn:"fenizian",pi:"pali",pl:"polac",pon:"ponapean",pro:"provenzal vegl",ps:"paschto",pt:"portugais","pt-BR":"portugais brasilian","pt-PT":"portugais iberian",qu:"quechua",raj:"rajasthani",rap:"rapanui",rar:"rarotonga",rm:"rumantsch",rn:"rundi",ro:"rumen","ro-MD":"moldav",rom:"romani",ru:"russ",rup:"aromunic",rw:"kinyarwanda",sa:"sanscrit",sad:"sandawe",sah:"jakut",sam:"arameic samaritan",sas:"sasak",sat:"santali",sc:"sard",scn:"sicilian",sco:"scot",sd:"sindhi",se:"sami dal nord",sel:"selkup",sg:"sango",sga:"irlandais vegl",sh:"serbo-croat",shn:"shan",si:"singalais",sid:"sidamo",sk:"slovac",sl:"sloven",sm:"samoan",sma:"sami dal sid",smj:"sami lule",smn:"sami inari",sms:"sami skolt",sn:"shona",snk:"soninke",so:"somali",sog:"sogdian",sq:"albanais",sr:"serb",srn:"sranan tongo",srr:"serer",ss:"swazi",st:"sotho dal sid",su:"sundanais",suk:"sukuma",sus:"susu",sux:"sumeric",sv:"svedais",sw:"suahili","sw-CD":"suahili (Republica Democratica dal Congo)",syc:"siric classic",syr:"siric",ta:"tamil",te:"telugu",tem:"temne",ter:"tereno",tet:"tetum",tg:"tadjik",th:"tailandais",ti:"tigrinya",tig:"tigre",tk:"turkmen",tkl:"tokelau",tl:"tagalog",tlh:"klingonic",tli:"tlingit",tmh:"tamasheq",tn:"tswana",to:"tonga",tog:"lingua tsonga",tpi:"tok pisin",tr:"tirc",ts:"tsonga",tsi:"tsimshian",tt:"tatar",tum:"tumbuka",tvl:"tuvalu",tw:"twi",ty:"tahitian",tyv:"tuvinian",udm:"udmurt",ug:"uiguric",uga:"ugaritic",uk:"ucranais",umb:"mbundu",ur:"urdu",uz:"usbec",ve:"venda",vi:"vietnamais",vo:"volapuk",vot:"votic",wa:"vallon",wal:"walamo",war:"waray",was:"washo",wo:"wolof",xal:"kalmuk",xh:"xhosa",yap:"yapais",yi:"jiddic",yo:"yoruba",za:"zhuang",zap:"zapotec",zbl:"simbols da Bliss",zen:"zenaga",zh:"chinais","zh-Hans":"chinais (scrittira chinaisa simplifitgada)","zh-Hant":"chinais (scrittira chinaisa tradiziunala)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"cirillic",Latn:"latin",Arab:"arab",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vaii",Hans:"scrittira chinaisa simplifitgada",Hant:"scrittira chinaisa tradiziunala"}},ro:{rtl:false,languageNames:{aa:"afar",ab:"abhază",ace:"aceh",ach:"acoli",ada:"adangme",ady:"adyghe",ae:"avestană",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akkadiană",ale:"aleută",alt:"altaică meridională",am:"amharică",an:"aragoneză",ang:"engleză veche",anp:"angika",ar:"arabă","ar-001":"arabă standard modernă",arc:"aramaică",arn:"mapuche",arp:"arapaho",ars:"arabă najdi",arw:"arawak",as:"asameză",asa:"asu",ast:"asturiană",av:"avară",awa:"awadhi",ay:"aymara",az:"azeră",ba:"bașkiră",bal:"baluchi",ban:"balineză",bas:"basaa",bax:"bamun",bbj:"ghomala",be:"belarusă",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bulgară",bgn:"baluchi occidentală",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengaleză",bo:"tibetană",br:"bretonă",bra:"braj",brx:"bodo",bs:"bosniacă",bss:"akoose",bua:"buriat",bug:"bugineză",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalană",cad:"caddo",car:"carib",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"cecenă",ceb:"cebuană",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuukese",chm:"mari",chn:"jargon chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"kurdă centrală",co:"corsicană",cop:"coptă",cr:"cree",crh:"turcă crimeeană",crs:"creolă franceză seselwa",cs:"cehă",csb:"cașubiană",cu:"slavonă",cv:"ciuvașă",cy:"galeză",da:"daneză",dak:"dakota",dar:"dargwa",dav:"taita",de:"germană","de-AT":"germană (Austria)","de-CH":"germană standard (Elveția)",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"sorabă de jos",dua:"duala",dum:"neerlandeză medie",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egy:"egipteană veche",eka:"ekajuk",el:"greacă",elx:"elamită",en:"engleză","en-AU":"engleză (Australia)","en-CA":"engleză (Canada)","en-GB":"engleză (Regatul Unit)","en-US":"engleză (Statele Unite ale Americii)",enm:"engleză medie",eo:"esperanto",es:"spaniolă","es-419":"spaniolă (America Latină)","es-ES":"spaniolă (Europa)","es-MX":"spaniolă (Mexic)",et:"estonă",eu:"bască",ewo:"ewondo",fa:"persană",fan:"fang",fat:"fanti",ff:"fulah",fi:"finlandeză",fil:"filipineză",fj:"fijiană",fo:"faroeză",fr:"franceză","fr-CA":"franceză (Canada)","fr-CH":"franceză (Elveția)",frc:"franceză cajun",frm:"franceză medie",fro:"franceză veche",frr:"frizonă nordică",frs:"frizonă orientală",fur:"friulană",fy:"frizonă occidentală",ga:"irlandeză",gaa:"ga",gag:"găgăuză",gan:"chineză gan",gay:"gayo",gba:"gbaya",gd:"gaelică scoțiană",gez:"geez",gil:"gilbertină",gl:"galiciană",gmh:"germană înaltă medie",gn:"guarani",goh:"germană înaltă veche",gon:"gondi",gor:"gorontalo",got:"gotică",grb:"grebo",grc:"greacă veche",gsw:"germană (Elveția)",gu:"gujarati",guz:"gusii",gv:"manx",gwi:"gwichʼin",ha:"hausa",hai:"haida",hak:"chineză hakka",haw:"hawaiiană",he:"ebraică",hi:"hindi",hil:"hiligaynon",hit:"hitită",hmn:"hmong",ho:"hiri motu",hr:"croată",hsb:"sorabă de sus",hsn:"chineză xiang",ht:"haitiană",hu:"maghiară",hup:"hupa",hy:"armeană",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indoneziană",ie:"interlingue",ig:"igbo",ii:"yi din Sichuan",ik:"inupiak",ilo:"iloko",inh:"ingușă",io:"ido",is:"islandeză",it:"italiană",iu:"inuktitut",ja:"japoneză",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"iudeo-persană",jrb:"iudeo-arabă",jv:"javaneză",ka:"georgiană",kaa:"karakalpak",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardian",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kabuverdianu",kfo:"koro",kg:"congoleză",kha:"khasi",kho:"khotaneză",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kazahă",kkj:"kako",kl:"kalaallisut",kln:"kalenjin",km:"khmeră",kmb:"kimbundu",kn:"kannada",ko:"coreeană",koi:"komi-permiak",kok:"konkani",kos:"kosrae",kpe:"kpelle",kr:"kanuri",krc:"karaceai-balkar",krl:"kareliană",kru:"kurukh",ks:"cașmiră",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurdă",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"cornică",ky:"kârgâză",la:"latină",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgheză",lez:"lezghian",lg:"ganda",li:"limburgheză",lkt:"lakota",ln:"lingala",lo:"laoțiană",lol:"mongo",lou:"creolă (Louisiana)",loz:"lozi",lrc:"luri de nord",lt:"lituaniană",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letonă",mad:"madureză",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masai",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malgașă",mga:"irlandeză medie",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshalleză",mi:"maori",mic:"micmac",min:"minangkabau",mk:"macedoneană",ml:"malayalam",mn:"mongolă",mnc:"manciuriană",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",ms:"malaeză",mt:"malteză",mua:"mundang",mus:"creek",mwl:"mirandeză",mwr:"marwari",my:"birmană",mye:"myene",myv:"erzya",mzn:"mazanderani",na:"nauru",nan:"chineză min nan",nap:"napolitană",naq:"nama",nb:"norvegiană bokmål",nd:"ndebele de nord",nds:"germana de jos","nds-NL":"saxona de jos",ne:"nepaleză","new":"newari",ng:"ndonga",nia:"nias",niu:"niueană",nl:"neerlandeză","nl-BE":"flamandă",nmg:"kwasio",nn:"norvegiană nynorsk",nnh:"ngiemboon",no:"norvegiană",nog:"nogai",non:"nordică veche",nqo:"n’ko",nr:"ndebele de sud",nso:"sotho de nord",nus:"nuer",nv:"navajo",nwc:"newari clasică",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitană",oj:"ojibwa",om:"oromo",or:"odia",os:"osetă",osa:"osage",ota:"turcă otomană",pa:"punjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauană",pcm:"pidgin nigerian",peo:"persană veche",phn:"feniciană",pi:"pali",pl:"poloneză",pon:"pohnpeiană",prg:"prusacă",pro:"provensală veche",ps:"paștună",pt:"portugheză","pt-BR":"portugheză (Brazilia)","pt-PT":"portugheză (Europa)",qu:"quechua",quc:"quiché",raj:"rajasthani",rap:"rapanui",rar:"rarotongan",rm:"romanșă",rn:"kirundi",ro:"română","ro-MD":"română (Republica Moldova)",rof:"rombo",rom:"romani",ru:"rusă",rup:"aromână",rw:"kinyarwanda",rwk:"rwa",sa:"sanscrită",sad:"sandawe",sah:"sakha",sam:"aramaică samariteană",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardiniană",scn:"siciliană",sco:"scots",sd:"sindhi",sdh:"kurdă de sud",se:"sami de nord",see:"seneca",seh:"sena",sel:"selkup",ses:"koyraboro Senni",sg:"sango",sga:"irlandeză veche",sh:"sârbo-croată",shi:"tachelhit",shn:"shan",shu:"arabă ciadiană",si:"singhaleză",sid:"sidamo",sk:"slovacă",sl:"slovenă",sm:"samoană",sma:"sami de sud",smj:"sami lule",smn:"sami inari",sms:"sami skolt",sn:"shona",snk:"soninke",so:"somaleză",sog:"sogdien",sq:"albaneză",sr:"sârbă",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sesotho",su:"sundaneză",suk:"sukuma",sus:"susu",sux:"sumeriană",sv:"suedeză",sw:"swahili","sw-CD":"swahili (R.D. Congo)",swb:"comoreză",syc:"siriacă clasică",syr:"siriacă",ta:"tamilă",te:"telugu",tem:"timne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadjică",th:"thailandeză",ti:"tigrină",tig:"tigre",tk:"turkmenă",tkl:"tokelau",tl:"tagalog",tlh:"klingoniană",tli:"tlingit",tmh:"tamashek",tn:"setswana",to:"tongană",tog:"nyasa tonga",tpi:"tok pisin",tr:"turcă",trv:"taroko",ts:"tsonga",tsi:"tsimshian",tt:"tătară",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahitiană",tyv:"tuvană",tzm:"tamazight din Altasul Central",udm:"udmurt",ug:"uigură",uga:"ugaritică",uk:"ucraineană",umb:"umbundu",ur:"urdu",uz:"uzbecă",ve:"venda",vi:"vietnameză",vo:"volapuk",vot:"votică",vun:"vunjo",wa:"valonă",wae:"walser",wal:"wolaita",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"chineză wu",xal:"calmucă",xh:"xhosa",xog:"soga",yap:"yapeză",yav:"yangben",ybb:"yemba",yi:"idiș",yo:"yoruba",yue:"cantoneză",za:"zhuang",zap:"zapotecă",zbl:"simboluri Bilss",zen:"zenaga",zgh:"tamazight standard marocană",zh:"chineză","zh-Hans":"chineză mandarină simplificată","zh-Hant":"chineză mandarină tradițională",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"chirilică",Latn:"latină",Arab:"arabă",Guru:"gurmukhi",Tfng:"berberă",Hans:"simplificată",Hant:"tradițională"}},ru:{rtl:false,languageNames:{aa:"афарский",ab:"абхазский",ace:"ачехский",ach:"ачоли",ada:"адангме",ady:"адыгейский",ae:"авестийский",af:"африкаанс",afh:"африхили",agq:"агем",ain:"айнский",ak:"акан",akk:"аккадский",ale:"алеутский",alt:"южноалтайский",am:"амхарский",an:"арагонский",ang:"староанглийский",anp:"ангика",ar:"арабский","ar-001":"арабский литературный",arc:"арамейский",arn:"мапуче",arp:"арапахо",ars:"недждийский арабский",arw:"аравакский",as:"ассамский",asa:"асу",ast:"астурийский",av:"аварский",awa:"авадхи",ay:"аймара",az:"азербайджанский",ba:"башкирский",bal:"белуджский",ban:"балийский",bas:"баса",bax:"бамум",bbj:"гомала",be:"белорусский",bej:"беджа",bem:"бемба",bez:"бена",bfd:"бафут",bg:"болгарский",bgn:"западный белуджский",bho:"бходжпури",bi:"бислама",bik:"бикольский",bin:"бини",bkm:"ком",bla:"сиксика",bm:"бамбара",bn:"бенгальский",bo:"тибетский",br:"бретонский",bra:"брауи",brx:"бодо",bs:"боснийский",bss:"акоосе",bua:"бурятский",bug:"бугийский",bum:"булу",byn:"билин",byv:"медумба",ca:"каталанский",cad:"каддо",car:"кариб",cay:"кайюга",cch:"атсам",ccp:"чакма",ce:"чеченский",ceb:"себуано",cgg:"кига",ch:"чаморро",chb:"чибча",chg:"чагатайский",chk:"чукотский",chm:"марийский",chn:"чинук жаргон",cho:"чоктавский",chp:"чипевьян",chr:"чероки",chy:"шайенский",ckb:"сорани",co:"корсиканский",cop:"коптский",cr:"кри",crh:"крымско-татарский",crs:"сейшельский креольский",cs:"чешский",csb:"кашубский",cu:"церковнославянский",cv:"чувашский",cy:"валлийский",da:"датский",dak:"дакота",dar:"даргинский",dav:"таита",de:"немецкий","de-AT":"австрийский немецкий","de-CH":"литературный швейцарский немецкий",del:"делаварский",den:"слейви",dgr:"догриб",din:"динка",dje:"джерма",doi:"догри",dsb:"нижнелужицкий",dua:"дуала",dum:"средненидерландский",dv:"мальдивский",dyo:"диола-фоньи",dyu:"диула",dz:"дзонг-кэ",dzg:"даза",ebu:"эмбу",ee:"эве",efi:"эфик",egy:"древнеегипетский",eka:"экаджук",el:"греческий",elx:"эламский",en:"английский","en-AU":"австралийский английский","en-CA":"канадский английский","en-GB":"британский английский","en-US":"американский английский",enm:"среднеанглийский",eo:"эсперанто",es:"испанский","es-419":"латиноамериканский испанский","es-ES":"европейский испанский","es-MX":"мексиканский испанский",et:"эстонский",eu:"баскский",ewo:"эвондо",fa:"персидский",fan:"фанг",fat:"фанти",ff:"фулах",fi:"финский",fil:"филиппинский",fj:"фиджи",fo:"фарерский",fon:"фон",fr:"французский","fr-CA":"канадский французский","fr-CH":"швейцарский французский",frc:"каджунский французский",frm:"среднефранцузский",fro:"старофранцузский",frr:"северный фризский",frs:"восточный фризский",fur:"фриульский",fy:"западнофризский",ga:"ирландский",gaa:"га",gag:"гагаузский",gan:"гань",gay:"гайо",gba:"гбая",gd:"гэльский",gez:"геэз",gil:"гилбертский",gl:"галисийский",gmh:"средневерхненемецкий",gn:"гуарани",goh:"древневерхненемецкий",gon:"гонди",gor:"горонтало",got:"готский",grb:"гребо",grc:"древнегреческий",gsw:"швейцарский немецкий",gu:"гуджарати",guz:"гусии",gv:"мэнский",gwi:"гвичин",ha:"хауса",hai:"хайда",hak:"хакка",haw:"гавайский",he:"иврит",hi:"хинди",hil:"хилигайнон",hit:"хеттский",hmn:"хмонг",ho:"хиримоту",hr:"хорватский",hsb:"верхнелужицкий",hsn:"сян",ht:"гаитянский",hu:"венгерский",hup:"хупа",hy:"армянский",hz:"гереро",ia:"интерлингва",iba:"ибанский",ibb:"ибибио",id:"индонезийский",ie:"интерлингве",ig:"игбо",ii:"носу",ik:"инупиак",ilo:"илоко",inh:"ингушский",io:"идо",is:"исландский",it:"итальянский",iu:"инуктитут",ja:"японский",jbo:"ложбан",jgo:"нгомба",jmc:"мачаме",jpr:"еврейско-персидский",jrb:"еврейско-арабский",jv:"яванский",ka:"грузинский",kaa:"каракалпакский",kab:"кабильский",kac:"качинский",kaj:"каджи",kam:"камба",kaw:"кави",kbd:"кабардинский",kbl:"канембу",kcg:"тьяп",kde:"маконде",kea:"кабувердьяну",kfo:"коро",kg:"конго",kha:"кхаси",kho:"хотанский",khq:"койра чиини",ki:"кикуйю",kj:"кунама",kk:"казахский",kkj:"како",kl:"гренландский",kln:"календжин",km:"кхмерский",kmb:"кимбунду",kn:"каннада",ko:"корейский",koi:"коми-пермяцкий",kok:"конкани",kos:"косраенский",kpe:"кпелле",kr:"канури",krc:"карачаево-балкарский",krl:"карельский",kru:"курух",ks:"кашмири",ksb:"шамбала",ksf:"бафия",ksh:"кёльнский",ku:"курдский",kum:"кумыкский",kut:"кутенаи",kv:"коми",kw:"корнский",ky:"киргизский",la:"латинский",lad:"ладино",lag:"ланго",lah:"лахнда",lam:"ламба",lb:"люксембургский",lez:"лезгинский",lg:"ганда",li:"лимбургский",lkt:"лакота",ln:"лингала",lo:"лаосский",lol:"монго",lou:"луизианский креольский",loz:"лози",lrc:"севернолурский",lt:"литовский",lu:"луба-катанга",lua:"луба-лулуа",lui:"луисеньо",lun:"лунда",luo:"луо",lus:"мизо",luy:"лухья",lv:"латышский",mad:"мадурский",maf:"мафа",mag:"магахи",mai:"майтхили",mak:"макассарский",man:"мандинго",mas:"масаи",mde:"маба",mdf:"мокшанский",mdr:"мандарский",men:"менде",mer:"меру",mfe:"маврикийский креольский",mg:"малагасийский",mga:"среднеирландский",mgh:"макуа-меетто",mgo:"мета",mh:"маршалльский",mi:"маори",mic:"микмак",min:"минангкабау",mk:"македонский",ml:"малаялам",mn:"монгольский",mnc:"маньчжурский",mni:"манипурский",moh:"мохаук",mos:"моси",mr:"маратхи",ms:"малайский",mt:"мальтийский",mua:"мунданг",mus:"крик",mwl:"мирандский",mwr:"марвари",my:"бирманский",mye:"миене",myv:"эрзянский",mzn:"мазандеранский",na:"науру",nan:"миньнань",nap:"неаполитанский",naq:"нама",nb:"норвежский букмол",nd:"северный ндебеле",nds:"нижненемецкий","nds-NL":"нижнесаксонский",ne:"непальский","new":"неварский",ng:"ндонга",nia:"ниас",niu:"ниуэ",nl:"нидерландский","nl-BE":"фламандский",nmg:"квасио",nn:"нюнорск",nnh:"нгиембунд",no:"норвежский",nog:"ногайский",non:"старонорвежский",nqo:"нко",nr:"южный ндебеле",nso:"северный сото",nus:"нуэр",nv:"навахо",nwc:"классический невари",ny:"ньянджа",nym:"ньямвези",nyn:"ньянколе",nyo:"ньоро",nzi:"нзима",oc:"окситанский",oj:"оджибва",om:"оромо",or:"ория",os:"осетинский",osa:"оседжи",ota:"старотурецкий",pa:"панджаби",pag:"пангасинан",pal:"пехлевийский",pam:"пампанга",pap:"папьяменто",pau:"палау",pcm:"нигерийско-креольский",peo:"староперсидский",phn:"финикийский",pi:"пали",pl:"польский",pon:"понапе",prg:"прусский",pro:"старопровансальский",ps:"пушту",pt:"португальский","pt-BR":"бразильский португальский","pt-PT":"европейский португальский",qu:"кечуа",quc:"киче",raj:"раджастхани",rap:"рапануйский",rar:"раротонга",rm:"романшский",rn:"рунди",ro:"румынский","ro-MD":"молдавский",rof:"ромбо",rom:"цыганский",root:"праязык",ru:"русский",rup:"арумынский",rw:"киньяруанда",rwk:"руанда",sa:"санскрит",sad:"сандаве",sah:"саха",sam:"самаритянский арамейский",saq:"самбуру",sas:"сасакский",sat:"сантали",sba:"нгамбайский",sbp:"сангу",sc:"сардинский",scn:"сицилийский",sco:"шотландский",sd:"синдхи",sdh:"южнокурдский",se:"северносаамский",see:"сенека",seh:"сена",sel:"селькупский",ses:"койраборо сенни",sg:"санго",sga:"староирландский",sh:"сербскохорватский",shi:"ташельхит",shn:"шанский",shu:"чадский арабский",si:"сингальский",sid:"сидама",sk:"словацкий",sl:"словенский",sm:"самоанский",sma:"южносаамский",smj:"луле-саамский",smn:"инари-саамский",sms:"колтта-саамский",sn:"шона",snk:"сонинке",so:"сомали",sog:"согдийский",sq:"албанский",sr:"сербский",srn:"сранан-тонго",srr:"серер",ss:"свази",ssy:"сахо",st:"южный сото",su:"сунданский",suk:"сукума",sus:"сусу",sux:"шумерский",sv:"шведский",sw:"суахили","sw-CD":"конголезский суахили",swb:"коморский",syc:"классический сирийский",syr:"сирийский",ta:"тамильский",te:"телугу",tem:"темне",teo:"тесо",ter:"терено",tet:"тетум",tg:"таджикский",th:"тайский",ti:"тигринья",tig:"тигре",tiv:"тиви",tk:"туркменский",tkl:"токелайский",tl:"тагалог",tlh:"клингонский",tli:"тлингит",tmh:"тамашек",tn:"тсвана",to:"тонганский",tog:"тонга",tpi:"ток-писин",tr:"турецкий",tru:"туройо",trv:"седекский",ts:"тсонга",tsi:"цимшиан",tt:"татарский",tum:"тумбука",tvl:"тувалу",tw:"тви",twq:"тасавак",ty:"таитянский",tyv:"тувинский",tzm:"среднеатласский тамазигхтский",udm:"удмуртский",ug:"уйгурский",uga:"угаритский",uk:"украинский",umb:"умбунду",ur:"урду",uz:"узбекский",vai:"ваи",ve:"венда",vi:"вьетнамский",vo:"волапюк",vot:"водский",vun:"вунджо",wa:"валлонский",wae:"валлисский",wal:"воламо",war:"варай",was:"вашо",wbp:"вальбири",wo:"волоф",wuu:"ву",xal:"калмыцкий",xh:"коса",xog:"сога",yao:"яо",yap:"яп",yav:"янгбен",ybb:"йемба",yi:"идиш",yo:"йоруба",yue:"кантонский",za:"чжуань",zap:"сапотекский",zbl:"блиссимволика",zen:"зенагский",zgh:"тамазигхтский",zh:"китайский","zh-Hans":"севернокитайский, упрощенное письмо","zh-Hant":"севернокитайский, традиционное письмо",zu:"зулу",zun:"зуньи",zza:"заза"},scriptNames:{Cyrl:"кириллица",Latn:"латиница",Arab:"арабица",Guru:"гурмукхи",Tfng:"древнеливийская",Vaii:"вайская",Hans:"упрощенная китайская",Hant:"традиционная китайская"}},sc:{rtl:false,languageNames:{},scriptNames:{}},si:{rtl:false,languageNames:{aa:"අෆාර්",ab:"ඇබ්කාසියානු",ace:"අචයිනිස්",ada:"අඩන්ග්මෙ",ady:"අඩිඝෙ",aeb:"ටියුනිසියනු අරාබි",af:"අෆ්රිකාන්ස්",agq:"ඇගම්",ain:"අයිනු",ak:"අකාන්",ale:"ඇලුඑට්",alt:"සතර්න් අල්ටය්",am:"ඇම්හාරික්",an:"ඇරගොනීස්",anp:"අන්ගික",ar:"අරාබි","ar-001":"නූතන සම්මත අරාබි",arn:"මපුචෙ",arp:"ඇරපහො",as:"ඇසෑම්",asa:"අසු",ast:"ඇස්ටියුරියන්",av:"ඇවරික්",awa:"අවදි",ay:"අයිමරා",az:"අසර්බයිජාන්",ba:"බාෂ්කිර්",ban:"බැලිනීස්",bas:"බසා",be:"බෙලරුසියානු",bem:"බෙම්බා",bez:"බෙනා",bg:"බල්ගේරියානු",bgn:"බටහිර බලොචි",bho:"බොජ්පුරි",bi:"බිස්ලමා",bin:"බිනි",bla:"සික්සිකා",bm:"බම්බරා",bn:"බෙංගාලි",bo:"ටිබෙට්",br:"බ්‍රේටොන්",brx:"බොඩො",bs:"බොස්නියානු",bug:"බුගිනීස්",byn:"බ්ලින්",ca:"කැටලන්",ccp:"චක්මා",ce:"චෙච්නියානු",ceb:"සෙබුඅනො",cgg:"චිගා",ch:"චමොරො",chk:"චූකීස්",chm:"මරි",cho:"චොක්ටොව්",chr:"චෙරොකී",chy:"චෙයෙන්නෙ",ckb:"සොරානි කුර්දිෂ්",co:"කෝසිකානු",crs:"සෙසෙල්ව ක්‍රොල් ෆ්‍රෙන්ච්",cs:"චෙක්",cu:"චර්ච් ස්ලැවික්",cv:"චවේෂ්",cy:"වෙල්ෂ්",da:"ඩැනිශ්",dak:"ඩකොටා",dar:"ඩාර්ග්වා",dav:"ටයිටා",de:"ජර්මන්","de-AT":"ඔස්ට්‍රියානු ජර්මන්","de-CH":"ස්විස් උසස් ජර්මන්",dgr:"ඩොග්‍රිබ්",dje:"සර්මා",dsb:"පහළ සෝබියානු",dua:"ඩුආලා",dv:"ඩිවෙහි",dyo:"ජොල-ෆෝනියි",dz:"ඩිසොන්කා",dzg:"ඩසාගා",ebu:"එම්බු",ee:"ඉව්",efi:"එෆික්",eka:"එකජුක්",el:"ග්‍රීක",en:"ඉංග්‍රීසි","en-AU":"ඕස්ට්‍රේලියානු ඉංග්‍රීසි","en-CA":"කැනේඩියානු ඉංග්‍රීසි","en-GB":"බ්‍රිතාන්‍ය ඉංග්‍රීසි","en-US":"ඇමෙරිකානු ඉංග්‍රීසි",eo:"එස්පැරන්ටෝ",es:"ස්පාඤ්ඤ","es-419":"ලතින් ඇමරිකානු ස්පාඤ්ඤ","es-ES":"යුරෝපීය ස්පාඤ්ඤ","es-MX":"මෙක්සිකානු ස්පාඤ්ඤ",et:"එස්තෝනියානු",eu:"බාස්ක්",ewo:"එවොන්ඩො",fa:"පර්සියානු",ff:"ෆුලාහ්",fi:"ෆින්ලන්ත",fil:"පිලිපීන",fj:"ෆීජි",fo:"ෆාරෝස්",fon:"ෆොන්",fr:"ප්‍රංශ","fr-CA":"කැනේඩියානු ප්‍රංශ","fr-CH":"ස්විස් ප්‍රංශ",fur:"ෆ්‍රියුලියන්",fy:"බටහිර ෆ්‍රිසියානු",ga:"අයර්ලන්ත",gaa:"ගා",gag:"ගගාස්",gan:"ගැන් චයිනිස්",gd:"ස්කොට්ටිශ් ගෙලික්",gez:"ගීස්",gil:"ගිල්බර්ටීස්",gl:"ගැලීසියානු",gn:"ගුවාරනි",gor:"ගොරොන්ටාලො",gsw:"ස්විස් ජර්මානු",gu:"ගුජරාටි",guz:"ගුසී",gv:"මැන්ක්ස්",gwi:"ග්විචින්",ha:"හෝසා",hak:"හකා චයිනිස්",haw:"හවායි",he:"හීබෲ",hi:"හින්දි",hil:"හිලිගෙනන්",hmn:"මොන්ග්",hr:"කෝඒෂියානු",hsb:"ඉහළ සෝබියානු",hsn:"සියැන් චීන",ht:"හයිටි",hu:"හන්ගේරියානු",hup:"හුපා",hy:"ආර්මේනියානු",hz:"හෙරෙරො",ia:"ඉන්ටලින්ගුආ",iba:"ඉබන්",ibb:"ඉබිබියො",id:"ඉන්දුනීසියානු",ig:"ඉග්බෝ",ii:"සිචුආන් යී",ilo:"ඉලොකො",inh:"ඉන්ගුෂ්",io:"ඉඩො",is:"අයිස්ලන්ත",it:"ඉතාලි",iu:"ඉනුක්ටිටුට්",ja:"ජපන්",jbo:"ලොජ්බන්",jgo:"නොම්බා",jmc:"මැකාමී",jv:"ජාවා",ka:"ජෝර්ජියානු",kab:"කාබිල්",kac:"කචින්",kaj:"ජ්ජු",kam:"කැම්බා",kbd:"කබාර්ඩියන්",kcg:"ට්යප්",kde:"මැකොන්ඩ්",kea:"කබුවෙර්ඩියානු",kfo:"කොරො",kha:"ඛසි",khq:"කොයිරා චිනි",ki:"කිකුයු",kj:"කුයන්යමා",kk:"කසාඛ්",kkj:"කකො",kl:"කලාලිසට්",kln:"කලෙන්ජන්",km:"කමර්",kmb:"කිම්බුන්ඩු",kn:"කණ්ණඩ",ko:"කොරියානු",koi:"කොමි-පර්මියාක්",kok:"කොන්කනි",kpe:"ක්පෙලෙ",kr:"කනුරි",krc:"කරන්චි-බාකර්",krl:"කැරෙලියන්",kru:"කුරුඛ්",ks:"කාෂ්මීර්",ksb:"ශාම්බලා",ksf:"බාෆියා",ksh:"කොලොග්නියන්",ku:"කුර්දි",kum:"කුමික්",kv:"කොමි",kw:"කෝනීසියානු",ky:"කිර්ගිස්",la:"ලතින්",lad:"ලඩිනො",lag:"ලංගි",lb:"ලක්සැම්බර්ග්",lez:"ලෙස්ගියන්",lg:"ගන්ඩා",li:"ලිම්බර්ගිශ්",lkt:"ලකොට",ln:"ලින්ගලා",lo:"ලාඕ",loz:"ලොසි",lrc:"උතුරු ලුරි",lt:"ලිතුවේනියානු",lu:"ලුබා-කටන්ගා",lua:"ලුබ-ලුලුඅ",lun:"ලුන්ඩ",luo:"ලුඔ",lus:"මිසො",luy:"ලුයියා",lv:"ලැට්වියානු",mad:"මදුරීස්",mag:"මඝහි",mai:"මයිතිලි",mak:"මකාසාර්",mas:"මසායි",mdf:"මොක්ශා",men:"මෙන්ඩෙ",mer:"මෙරු",mfe:"මොරිස්යෙම්",mg:"මලගාසි",mgh:"මඛුවා-මීටෝ",mgo:"මෙටා",mh:"මාශලීස්",mi:"මාවොරි",mic:"මික්මැක්",min:"මිනන්ග්කබාවු",mk:"මැසිඩෝනියානු",ml:"මලයාලම්",mn:"මොංගෝලියානු",mni:"මනිපුරි",moh:"මොහොව්ක්",mos:"මොස්සි",mr:"මරාති",ms:"මැලේ",mt:"මොල්ටිස්",mua:"මුන්ඩන්",mus:"ක්‍රීක්",mwl:"මිරන්ඩීස්",my:"බුරුම",myv:"එර්ස්යා",mzn:"මැසන්ඩරනි",na:"නෞරු",nan:"මින් නන් චයිනිස්",nap:"නියාපොලිටන්",naq:"නාමා",nb:"නෝර්වීජියානු බොක්මල්",nd:"උතුරු එන්ඩිබෙලෙ",nds:"පහළ ජර්මන්","nds-NL":"පහළ සැක්සන්",ne:"නේපාල","new":"නෙවාරි",ng:"න්ඩොන්ගා",nia:"නියාස්",niu:"නියුඑන්",nl:"ලන්දේසි","nl-BE":"ෆ්ලෙමිශ්",nmg:"කුවාසිඔ",nn:"නෝර්වීජියානු නයිනෝර්ස්ක්",nnh:"න්ගියාම්බූන්",nog:"නොගායි",nqo:"එන්‘කෝ",nr:"සෞත් ඩ්බේල්",nso:"නොදර්න් සොතො",nus:"නොයර්",nv:"නවාජො",ny:"න්යන්ජා",nyn:"නයන්කෝලෙ",oc:"ඔසිටාන්",om:"ඔරොමෝ",or:"ඔඩියා",os:"ඔසිටෙක්",pa:"පන්ජාබි",pag:"පන්ගසීනන්",pam:"පන්පන්ග",pap:"පපියමෙන්ටො",pau:"පලවුවන්",pcm:"නෛජීරියන් පෙන්ගින්",pl:"පෝලන්ත",prg:"පෘශියන්",ps:"පෂ්ටො",pt:"පෘතුගීසි","pt-BR":"බ්‍රසීල පෘතුගීසි","pt-PT":"යුරෝපීය පෘතුගීසි",qu:"ක්වීචුවා",quc:"කියිචේ",rap:"රපනුයි",rar:"රරොටොන්ගන්",rm:"රොමෑන්ශ්",rn:"රුන්ඩි",ro:"රොමේනියානු","ro-MD":"මොල්ඩවිආනු",rof:"රෝම්බෝ",root:"රූට්",ru:"රුසියානු",rup:"ඇරොමානියානු",rw:"කින්යර්වන්ඩා",rwk:"ර්වා",sa:"සංස්කෘත",sad:"සන්ඩවෙ",sah:"සඛා",saq:"සම්බුරු",sat:"සෑන්ටලි",sba:"න්ගම්බෙ",sbp:"සංගු",sc:"සාර්ඩිනිඅන්",scn:"සිසිලියන්",sco:"ස්කොට්ස්",sd:"සින්ධි",sdh:"දකුණු කුර්දි",se:"උතුරු සාමි",seh:"සෙනා",ses:"කෝයිරාබොරො සෙන්නි",sg:"සන්ග්‍රෝ",shi:"ටචේල්හිට්",shn:"ශාන්",si:"සිංහල",sk:"ස්ලෝවැක්",sl:"ස්ලෝවේනියානු",sm:"සෑමොඅන්",sma:"දකුණු සාමි",smj:"ලුලේ සාමි",smn:"ඉනාරි සාමි",sms:"ස්කොල්ට් සාමි",sn:"ශෝනා",snk:"සොනින්කෙ",so:"සෝමාලි",sq:"ඇල්බේනියානු",sr:"සර්බියානු",srn:"ස්‍රන් ටොන්ගො",ss:"ස්වති",ssy:"සහො",st:"සතර්න් සොතො",su:"සන්ඩනීසියානු",suk:"සුකුමා",sv:"ස්වීඩන්",sw:"ස්වාහිලි","sw-CD":"කොංගෝ ස්වාහිලි",swb:"කොමොරියන්",syr:"ස්‍රයෑක්",ta:"දෙමළ",te:"තෙළිඟු",tem:"ටිම්නෙ",teo:"ටෙසෝ",tet:"ටේටම්",tg:"ටජික්",th:"තායි",ti:"ටිග්‍රින්යා",tig:"ටීග්‍රෙ",tk:"ටර්ක්මෙන්",tlh:"ක්ලින්ගොන්",tn:"ස්වනා",to:"ටොංගා",tpi:"ටොක් පිසින්",tr:"තුර්කි",trv:"ටරොකො",ts:"සොන්ග",tt:"ටාටර්",tum:"ටුම්බුකා",tvl:"ටුවාලු",twq:"ටසවාක්",ty:"ටහිටියන්",tyv:"ටුවිනියන්",tzm:"මධ්‍යම ඇට්ලස් ටමසිට්",udm:"අඩ්මර්ට්",ug:"උයිගර්",uk:"යුක්රේනියානු",umb:"උබුන්ඩු",ur:"උර්දු",uz:"උස්බෙක්",vai:"වයි",ve:"වෙන්ඩා",vi:"වියට්නාම්",vo:"වොලපූක්",vun:"වුන්ජෝ",wa:"වෑලූන්",wae:"වොල්සර්",wal:"වොලෙට්ට",war:"වොරෙය්",wbp:"වොපිරි",wo:"වොලොෆ්",wuu:"වූ චයිනිස්",xal:"කල්මික්",xh:"ශෝසා",xog:"සොගා",yav:"යන්ග්බෙන්",ybb:"යෙම්බා",yi:"යිඩිශ්",yo:"යොරූබා",yue:"කැන්ටොනීස්",zgh:"සම්මත මොරොක්කෝ ටමසිග්ත්",zh:"චීන","zh-Hans":"සරල මැන්ඩරීන් චීන","zh-Hant":"සාම්ප්‍රදායික මැන්ඩරීන් චීන",zu:"සුලු",zun:"සුනි",zza:"සාසා"},scriptNames:{Cyrl:"සිරිලික්",Latn:"ලතින්",Arab:"අරාබි",Guru:"ගුර්මුඛි",Hans:"සුළුකළ",Hant:"සාම්ප්‍රදායික"}},sk:{rtl:false,languageNames:{aa:"afarčina",ab:"abcházčina",ace:"acehčina",ach:"ačoli",ada:"adangme",ady:"adygejčina",ae:"avestčina",af:"afrikánčina",afh:"afrihili",agq:"aghem",ain:"ainčina",ak:"akančina",akk:"akkadčina",ale:"aleutčina",alt:"južná altajčina",am:"amharčina",an:"aragónčina",ang:"stará angličtina",anp:"angika",ar:"arabčina","ar-001":"arabčina (moderná štandardná)",arc:"aramejčina",arn:"mapudungun",arp:"arapažština",ars:"arabčina (nadždská)",arw:"arawačtina",as:"ásamčina",asa:"asu",ast:"astúrčina",av:"avarčina",awa:"awadhi",ay:"aymarčina",az:"azerbajdžančina",ba:"baškirčina",bal:"balúčtina",ban:"balijčina",bas:"basa",bax:"bamun",bbj:"ghomala",be:"bieloruština",bej:"bedža",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bulharčina",bgn:"západná balúčtina",bho:"bhódžpurčina",bi:"bislama",bik:"bikolčina",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambarčina",bn:"bengálčina",bo:"tibetčina",br:"bretónčina",bra:"bradžčina",brx:"bodo",bs:"bosniačtina",bss:"akoose",bua:"buriatčina",bug:"bugiština",bum:"bulu",byn:"blin",byv:"medumba",ca:"katalánčina",cad:"kaddo",car:"karibčina",cay:"kajugčina",cch:"atsam",ccp:"čakma",ce:"čečenčina",ceb:"cebuánčina",cgg:"kiga",ch:"čamorčina",chb:"čibča",chg:"čagatajčina",chk:"chuuk",chm:"marijčina",chn:"činucký žargón",cho:"čoktčina",chp:"čipevajčina",chr:"čerokí",chy:"čejenčina",ckb:"kurdčina (sorání)",co:"korzičtina",cop:"koptčina",cr:"krí",crh:"krymská tatárčina",crs:"seychelská kreolčina",cs:"čeština",csb:"kašubčina",cu:"cirkevná slovančina",cv:"čuvaština",cy:"waleština",da:"dánčina",dak:"dakotčina",dar:"darginčina",dav:"taita",de:"nemčina","de-AT":"nemčina (rakúska)","de-CH":"nemčina (švajčiarska spisovná)",del:"delawarčina",den:"slavé",dgr:"dogribčina",din:"dinkčina",dje:"zarma",doi:"dógrí",dsb:"dolnolužická srbčina",dua:"duala",dum:"stredná holandčina",dv:"maldivčina",dyo:"jola-fonyi",dyu:"ďula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"eweština",efi:"efik",egy:"staroegyptčina",eka:"ekadžuk",el:"gréčtina",elx:"elamčina",en:"angličtina","en-AU":"angličtina (austrálska)","en-CA":"angličtina (kanadská)","en-GB":"angličtina (britská)","en-US":"angličtina (americká)",enm:"stredná angličtina",eo:"esperanto",es:"španielčina","es-419":"španielčina (latinskoamerická)","es-ES":"španielčina (európska)","es-MX":"španielčina (mexická)",et:"estónčina",eu:"baskičtina",ewo:"ewondo",fa:"perzština",fan:"fangčina",fat:"fanti",ff:"fulbčina",fi:"fínčina",fil:"filipínčina",fj:"fidžijčina",fo:"faerčina",fon:"fončina",fr:"francúzština","fr-CA":"francúzština (kanadská)","fr-CH":"francúzština (švajčiarska)",frc:"francúzština (Cajun)",frm:"stredná francúzština",fro:"stará francúzština",frr:"severná frízština",frs:"východofrízština",fur:"friulčina",fy:"západná frízština",ga:"írčina",gaa:"ga",gag:"gagauzština",gay:"gayo",gba:"gbaja",gd:"škótska gaelčina",gez:"etiópčina",gil:"kiribatčina",gl:"galícijčina",gmh:"stredná horná nemčina",gn:"guaraníjčina",goh:"stará horná nemčina",gon:"góndčina",gor:"gorontalo",got:"gótčina",grb:"grebo",grc:"starogréčtina",gsw:"nemčina (švajčiarska)",gu:"gudžarátčina",guz:"gusii",gv:"mančina",gwi:"kučinčina",ha:"hauština",hai:"haida",haw:"havajčina",he:"hebrejčina",hi:"hindčina",hil:"hiligajnončina",hit:"chetitčina",hmn:"hmongčina",ho:"hiri motu",hr:"chorvátčina",hsb:"hornolužická srbčina",ht:"haitská kreolčina",hu:"maďarčina",hup:"hupčina",hy:"arménčina",hz:"herero",ia:"interlingua",iba:"ibančina",ibb:"ibibio",id:"indonézština",ie:"interlingue",ig:"igboština",ii:"s’čchuanská iovčina",ik:"inupik",ilo:"ilokánčina",inh:"inguština",io:"ido",is:"islandčina",it:"taliančina",iu:"inuktitut",ja:"japončina",jbo:"lojban",jgo:"ngomba",jmc:"mašame",jpr:"židovská perzština",jrb:"židovská arabčina",jv:"jávčina",ka:"gruzínčina",kaa:"karakalpačtina",kab:"kabylčina",kac:"kačjinčina",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardčina",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kapverdčina",kfo:"koro",kg:"kongčina",kha:"khasijčina",kho:"chotančina",khq:"západná songhajčina",ki:"kikujčina",kj:"kuaňama",kk:"kazaština",kkj:"kako",kl:"grónčina",kln:"kalendžin",km:"khmérčina",kmb:"kimbundu",kn:"kannadčina",ko:"kórejčina",koi:"komi-permiačtina",kok:"konkánčina",kos:"kusaie",kpe:"kpelle",kr:"kanurijčina",krc:"karačajevsko-balkarčina",krl:"karelčina",kru:"kuruchčina",ks:"kašmírčina",ksb:"šambala",ksf:"bafia",ksh:"kolínčina",ku:"kurdčina",kum:"kumyčtina",kut:"kutenajčina",kv:"komijčina",kw:"kornčina",ky:"kirgizština",la:"latinčina",lad:"židovská španielčina",lag:"langi",lah:"lahandčina",lam:"lamba",lb:"luxemburčina",lez:"lezginčina",lg:"gandčina",li:"limburčina",lkt:"lakotčina",ln:"lingalčina",lo:"laoština",lol:"mongo",lou:"kreolčina (Louisiana)",loz:"lozi",lrc:"severné luri",lt:"litovčina",lu:"lubčina (katanžská)",lua:"lubčina (luluánska)",lui:"luiseňo",lun:"lunda",lus:"mizorámčina",luy:"luhja",lv:"lotyština",mad:"madurčina",maf:"mafa",mag:"magadhčina",mai:"maithilčina",mak:"makasarčina",man:"mandingo",mas:"masajčina",mde:"maba",mdf:"mokšiančina",mdr:"mandarčina",men:"mendejčina",mer:"meru",mfe:"maurícijská kreolčina",mg:"malgaština",mga:"stredná írčina",mgh:"makua-meetto",mgo:"meta’",mh:"marshallčina",mi:"maorijčina",mic:"mikmakčina",min:"minangkabaučina",mk:"macedónčina",ml:"malajálamčina",mn:"mongolčina",mnc:"mandžuština",mni:"manípurčina",moh:"mohawkčina",mos:"mossi",mr:"maráthčina",ms:"malajčina",mt:"maltčina",mua:"mundang",mus:"kríkčina",mwl:"mirandčina",mwr:"marwari",my:"barmčina",mye:"myene",myv:"erzjančina",mzn:"mázandaránčina",na:"nauruština",nap:"neapolčina",naq:"nama",nb:"nórčina (bokmal)",nd:"ndebelčina (severná)",nds:"dolná nemčina","nds-NL":"dolná saština",ne:"nepálčina","new":"nevárčina",ng:"ndonga",nia:"niasánčina",niu:"niueština",nl:"holandčina","nl-BE":"flámčina",nmg:"kwasio",nn:"nórčina (nynorsk)",nnh:"ngiemboon",no:"nórčina",nog:"nogajčina",non:"stará nórčina",nqo:"n’ko",nr:"ndebelčina (južná)",nso:"sothčina (severná)",nus:"nuer",nv:"navaho",nwc:"klasická nevárčina",ny:"ňandža",nym:"ňamwezi",nyn:"ňankole",nyo:"ňoro",nzi:"nzima",oc:"okcitánčina",oj:"odžibva",om:"oromčina",or:"uríjčina",os:"osetčina",osa:"osedžština",ota:"osmanská turečtina",pa:"pandžábčina",pag:"pangasinančina",pal:"pahlaví",pam:"kapampangančina",pap:"papiamento",pau:"palaučina",pcm:"nigerijský pidžin",peo:"stará perzština",phn:"feničtina",pi:"pálí",pl:"poľština",pon:"pohnpeiština",prg:"pruština",pro:"stará okcitánčina",ps:"paštčina",pt:"portugalčina","pt-BR":"portugalčina (brazílska)","pt-PT":"portugalčina (európska)",qu:"kečuánčina",quc:"quiché",raj:"radžastančina",rap:"rapanujčina",rar:"rarotongská maorijčina",rm:"rétorománčina",rn:"rundčina",ro:"rumunčina","ro-MD":"moldavčina",rof:"rombo",rom:"rómčina",root:"koreň",ru:"ruština",rup:"arumunčina",rw:"rwandčina",rwk:"rwa",sa:"sanskrit",sad:"sandaweština",sah:"jakutčina",sam:"samaritánska aramejčina",saq:"samburu",sas:"sasačtina",sat:"santalčina",sba:"ngambay",sbp:"sangu",sc:"sardínčina",scn:"sicílčina",sco:"škótčina",sd:"sindhčina",sdh:"južná kurdčina",se:"saamčina (severná)",see:"senekčina",seh:"sena",sel:"selkupčina",ses:"koyraboro senni",sg:"sango",sga:"stará írčina",sh:"srbochorvátčina",shi:"tachelhit",shn:"šančina",shu:"čadská arabčina",si:"sinhalčina",sid:"sidamo",sk:"slovenčina",sl:"slovinčina",sm:"samojčina",sma:"saamčina (južná)",smj:"saamčina (lulská)",smn:"saamčina (inarijská)",sms:"saamčina (skoltská)",sn:"šončina",snk:"soninke",so:"somálčina",sog:"sogdijčina",sq:"albánčina",sr:"srbčina",srn:"surinamčina",srr:"sererčina",ss:"svazijčina",ssy:"saho",st:"sothčina (južná)",su:"sundčina",suk:"sukuma",sus:"susu",sux:"sumerčina",sv:"švédčina",sw:"swahilčina","sw-CD":"svahilčina (konžská)",swb:"komorčina",syc:"sýrčina (klasická)",syr:"sýrčina",ta:"tamilčina",te:"telugčina",tem:"temne",teo:"teso",ter:"terêna",tet:"tetumčina",tg:"tadžičtina",th:"thajčina",ti:"tigriňa",tig:"tigrejčina",tk:"turkménčina",tkl:"tokelauština",tl:"tagalčina",tlh:"klingónčina",tli:"tlingitčina",tmh:"tuaregčina",tn:"tswančina",to:"tongčina",tog:"ňasa tonga",tpi:"novoguinejský pidžin",tr:"turečtina",trv:"taroko",ts:"tsongčina",tsi:"cimšjančina",tt:"tatárčina",tum:"tumbuka",tvl:"tuvalčina",tw:"twi",twq:"tasawaq",ty:"tahitčina",tyv:"tuviančina",tzm:"tuaregčina (stredomarocká)",udm:"udmurtčina",ug:"ujgurčina",uga:"ugaritčina",uk:"ukrajinčina",umb:"umbundu",ur:"urdčina",uz:"uzbečtina",ve:"vendčina",vi:"vietnamčina",vo:"volapük",vot:"vodčina",vun:"vunjo",wa:"valónčina",wae:"walserčina",wal:"walamčina",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolofčina",xal:"kalmyčtina",xh:"xhoština",xog:"soga",yao:"jao",yap:"japčina",yav:"jangben",ybb:"yemba",yi:"jidiš",yo:"jorubčina",yue:"kantončina",za:"čuangčina",zap:"zapotéčtina",zbl:"systém Bliss",zen:"zenaga",zgh:"tuaregčina (marocká štandardná)",zh:"čínština","zh-Hans":"čínština (mandarínska zjednodušená)","zh-Hant":"čínština (mandarínska tradičná)",zu:"zuluština",zun:"zuniština",zza:"zaza"},scriptNames:{Cyrl:"cyrilika",Latn:"latinka",Arab:"arabské",Guru:"gurmukhi",Hans:"zjednodušené",Hant:"tradičné"}},sl:{rtl:false,languageNames:{aa:"afarščina",ab:"abhaščina",ace:"ačejščina",ach:"ačolijščina",ada:"adangmejščina",ady:"adigejščina",ae:"avestijščina",af:"afrikanščina",afh:"afrihili",agq:"aghemščina",ain:"ainujščina",ak:"akanščina",akk:"akadščina",ale:"aleutščina",alt:"južna altajščina",am:"amharščina",an:"aragonščina",ang:"stara angleščina",anp:"angikaščina",ar:"arabščina","ar-001":"sodobna standardna arabščina",arc:"aramejščina",arn:"mapudungunščina",arp:"arapaščina",arw:"aravaščina",as:"asamščina",asa:"asujščina",ast:"asturijščina",av:"avarščina",awa:"avadščina",ay:"ajmarščina",az:"azerbajdžanščina",ba:"baškirščina",bal:"beludžijščina",ban:"balijščina",bas:"basa",be:"beloruščina",bej:"bedža",bem:"bemba",bez:"benajščina",bg:"bolgarščina",bgn:"zahodnobalučijščina",bho:"bodžpuri",bi:"bislamščina",bik:"bikolski jezik",bin:"edo",bla:"siksika",bm:"bambarščina",bn:"bengalščina",bo:"tibetanščina",br:"bretonščina",bra:"bradžbakanščina",brx:"bodojščina",bs:"bosanščina",bua:"burjatščina",bug:"buginščina",byn:"blinščina",ca:"katalonščina",cad:"kadoščina",car:"karibski jezik",ccp:"chakma",ce:"čečenščina",ceb:"sebuanščina",cgg:"čigajščina",ch:"čamorščina",chb:"čibčevščina",chg:"čagatajščina",chk:"trukeščina",chm:"marijščina",chn:"činuški žargon",cho:"čoktavščina",chp:"čipevščina",chr:"čerokeščina",chy:"čejenščina",ckb:"soranska kurdščina",co:"korziščina",cop:"koptščina",cr:"krijščina",crh:"krimska tatarščina",crs:"sejšelska francoska kreolščina",cs:"češčina",csb:"kašubščina",cu:"stara cerkvena slovanščina",cv:"čuvaščina",cy:"valižanščina",da:"danščina",dak:"dakotščina",dar:"darginščina",dav:"taitajščina",de:"nemščina","de-AT":"avstrijska nemščina","de-CH":"visoka nemščina (Švica)",del:"delavarščina",den:"slavejščina",dgr:"dogrib",din:"dinka",dje:"zarmajščina",doi:"dogri",dsb:"dolnja lužiška srbščina",dua:"duala",dum:"srednja nizozemščina",dv:"diveščina",dyo:"jola-fonjiščina",dyu:"diula",dz:"dzonka",dzg:"dazaga",ebu:"embujščina",ee:"evenščina",efi:"efiščina",egy:"stara egipčanščina",eka:"ekajuk",el:"grščina",elx:"elamščina",en:"angleščina","en-AU":"avstralska angleščina","en-CA":"kanadska angleščina","en-GB":"angleščina (VB)","en-US":"angleščina (ZDA)",enm:"srednja angleščina",eo:"esperanto",es:"španščina","es-419":"španščina (Latinska Amerika)","es-ES":"evropska španščina","es-MX":"mehiška španščina",et:"estonščina",eu:"baskovščina",ewo:"evondovščina",fa:"perzijščina",fan:"fangijščina",fat:"fantijščina",ff:"fulščina",fi:"finščina",fil:"filipinščina",fj:"fidžijščina",fo:"ferščina",fon:"fonščina",fr:"francoščina","fr-CA":"kanadska francoščina","fr-CH":"švicarska francoščina",frc:"cajunska francoščina",frm:"srednja francoščina",fro:"stara francoščina",frr:"severna frizijščina",frs:"vzhodna frizijščina",fur:"furlanščina",fy:"zahodna frizijščina",ga:"irščina",gaa:"ga",gag:"gagavščina",gay:"gajščina",gba:"gbajščina",gd:"škotska gelščina",gez:"etiopščina",gil:"kiribatščina",gl:"galicijščina",gmh:"srednja visoka nemščina",gn:"gvaranijščina",goh:"stara visoka nemščina",gon:"gondi",gor:"gorontalščina",got:"gotščina",grb:"grebščina",grc:"stara grščina",gsw:"nemščina (Švica)",gu:"gudžaratščina",guz:"gusijščina",gv:"manščina",gwi:"gvičin",ha:"havščina",hai:"haidščina",haw:"havajščina",he:"hebrejščina",hi:"hindujščina",hil:"hiligajnonščina",hit:"hetitščina",hmn:"hmonščina",ho:"hiri motu",hr:"hrvaščina",hsb:"gornja lužiška srbščina",ht:"haitijska kreolščina",hu:"madžarščina",hup:"hupa",hy:"armenščina",hz:"herero",ia:"interlingva",iba:"ibanščina",ibb:"ibibijščina",id:"indonezijščina",ie:"interlingve",ig:"igboščina",ii:"sečuanska jiščina",ik:"inupiaščina",ilo:"ilokanščina",inh:"inguščina",io:"ido",is:"islandščina",it:"italijanščina",iu:"inuktitutščina",ja:"japonščina",jbo:"lojban",jgo:"ngomba",jmc:"mačamejščina",jpr:"judovska perzijščina",jrb:"judovska arabščina",jv:"javanščina",ka:"gruzijščina",kaa:"karakalpaščina",kab:"kabilščina",kac:"kačinščina",kaj:"jju",kam:"kambaščina",kaw:"kavi",kbd:"kabardinščina",kcg:"tjapska nigerijščina",kde:"makondščina",kea:"zelenortskootoška kreolščina",kfo:"koro",kg:"kongovščina",kha:"kasi",kho:"kotanščina",khq:"koyra chiini",ki:"kikujščina",kj:"kvanjama",kk:"kazaščina",kkj:"kako",kl:"grenlandščina",kln:"kalenjinščina",km:"kmerščina",kmb:"kimbundu",kn:"kanareščina",ko:"korejščina",koi:"komi-permjaščina",kok:"konkanščina",kos:"kosrajščina",kpe:"kpelejščina",kr:"kanurščina",krc:"karačaj-balkarščina",krl:"karelščina",kru:"kuruk",ks:"kašmirščina",ksb:"šambala",ksf:"bafia",ksh:"kölnsko narečje",ku:"kurdščina",kum:"kumiščina",kut:"kutenajščina",kv:"komijščina",kw:"kornijščina",ky:"kirgiščina",la:"latinščina",lad:"ladinščina",lag:"langijščina",lah:"landa",lam:"lamba",lb:"luksemburščina",lez:"lezginščina",lg:"ganda",li:"limburščina",lkt:"lakotščina",ln:"lingala",lo:"laoščina",lol:"mongo",lou:"louisianska kreolščina",loz:"lozi",lrc:"severna lurijščina",lt:"litovščina",lu:"luba-katanga",lua:"luba-lulua",lui:"luisenščina",lun:"lunda",lus:"mizojščina",luy:"luhijščina",lv:"latvijščina",mad:"madurščina",mag:"magadščina",mai:"maitili",mak:"makasarščina",man:"mandingo",mas:"masajščina",mdf:"mokšavščina",mdr:"mandarščina",men:"mende",mer:"meru",mfe:"morisjenščina",mg:"malagaščina",mga:"srednja irščina",mgh:"makuva-meto",mgo:"meta",mh:"marshallovščina",mi:"maorščina",mic:"mikmaščina",min:"minangkabau",mk:"makedonščina",ml:"malajalamščina",mn:"mongolščina",mnc:"mandžurščina",mni:"manipurščina",moh:"mohoščina",mos:"mosijščina",mr:"maratščina",ms:"malajščina",mt:"malteščina",mua:"mundang",mus:"creekovščina",mwl:"mirandeščina",mwr:"marvarščina",my:"burmanščina",myv:"erzjanščina",mzn:"mazanderanščina",na:"naurujščina",nan:"min nan kitajščina",nap:"napolitanščina",naq:"khoekhoe",nb:"knjižna norveščina",nd:"severna ndebelščina",nds:"nizka nemščina","nds-NL":"nizka saščina",ne:"nepalščina","new":"nevarščina",ng:"ndonga",nia:"niaščina",niu:"niuejščina",nl:"nizozemščina","nl-BE":"flamščina",nmg:"kwasio",nn:"novonorveščina",nnh:"ngiemboonščina",no:"norveščina",nog:"nogajščina",non:"stara nordijščina",nqo:"n’ko",nr:"južna ndebelščina",nso:"severna sotščina",nus:"nuerščina",nv:"navajščina",nwc:"klasična nevarščina",ny:"njanščina",nym:"njamveščina",nyn:"njankole",nyo:"njoro",nzi:"nzima",oc:"okcitanščina",oj:"anašinabščina",om:"oromo",or:"odijščina",os:"osetinščina",osa:"osage",ota:"otomanska turščina",pa:"pandžabščina",pag:"pangasinanščina",pam:"pampanščina",pap:"papiamentu",pau:"palavanščina",pcm:"nigerijski pidžin",peo:"stara perzijščina",phn:"feničanščina",pi:"palijščina",pl:"poljščina",pon:"ponpejščina",prg:"stara pruščina",pro:"stara provansalščina",ps:"paštunščina",pt:"portugalščina","pt-BR":"brazilska portugalščina","pt-PT":"evropska portugalščina",qu:"kečuanščina",quc:"quiche",raj:"radžastanščina",rap:"rapanujščina",rar:"rarotongščina",rm:"retoromanščina",rn:"rundščina",ro:"romunščina","ro-MD":"moldavščina",rof:"rombo",rom:"romščina",root:"rootščina",ru:"ruščina",rup:"aromunščina",rw:"ruandščina",rwk:"rwa",sa:"sanskrt",sad:"sandavščina",sah:"jakutščina",sam:"samaritanska aramejščina",saq:"samburščina",sas:"sasaščina",sat:"santalščina",sba:"ngambajščina",sbp:"sangujščina",sc:"sardinščina",scn:"sicilijanščina",sco:"škotščina",sd:"sindščina",sdh:"južna kurdščina",se:"severna samijščina",seh:"sena",sel:"selkupščina",ses:"koyraboro senni",sg:"sango",sga:"stara irščina",sh:"srbohrvaščina",shi:"tahelitska berberščina",shn:"šanščina",si:"sinhalščina",sid:"sidamščina",sk:"slovaščina",sl:"slovenščina",sm:"samoanščina",sma:"južna samijščina",smj:"luleška samijščina",smn:"inarska samijščina",sms:"skoltska samijščina",sn:"šonščina",snk:"soninke",so:"somalščina",sq:"albanščina",sr:"srbščina",srn:"surinamska kreolščina",srr:"sererščina",ss:"svazijščina",ssy:"saho",st:"sesoto",su:"sundanščina",suk:"sukuma",sus:"susujščina",sux:"sumerščina",sv:"švedščina",sw:"svahili","sw-CD":"kongoški svahili",swb:"šikomor",syc:"klasična sirščina",syr:"sirščina",ta:"tamilščina",te:"telugijščina",tem:"temnejščina",teo:"teso",tet:"tetumščina",tg:"tadžiščina",th:"tajščina",ti:"tigrajščina",tig:"tigrejščina",tiv:"tivščina",tk:"turkmenščina",tkl:"tokelavščina",tl:"tagalogščina",tlh:"klingonščina",tli:"tlingitščina",tmh:"tamajaščina",tn:"cvanščina",to:"tongščina",tog:"malavijska tongščina",tpi:"tok pisin",tr:"turščina",trv:"taroko",ts:"congščina",tsi:"tsimščina",tt:"tatarščina",tum:"tumbukščina",tvl:"tuvalujščina",tw:"tvi",twq:"tasawaq",ty:"tahitščina",tyv:"tuvinščina",tzm:"tamašek (Srednji Atlas)",udm:"udmurtščina",ug:"ujgurščina",uga:"ugaritski jezik",uk:"ukrajinščina",umb:"umbundščina",ur:"urdujščina",uz:"uzbeščina",vai:"vajščina",ve:"venda",vi:"vietnamščina",vo:"volapuk",vot:"votjaščina",vun:"vunjo",wa:"valonščina",wae:"walser",wal:"valamščina",war:"varajščina",was:"vašajščina",wbp:"varlpirščina",wo:"volofščina",xal:"kalmiščina",xh:"koščina",xog:"sogščina",yao:"jaojščina",yap:"japščina",yav:"jangben",ybb:"jembajščina",yi:"jidiš",yo:"jorubščina",yue:"kantonščina",zap:"zapoteščina",zbl:"znakovni jezik Bliss",zen:"zenaščina",zgh:"standardni maroški tamazig",zh:"kitajščina","zh-Hans":"kitajščina (poenostavljena pisava han)","zh-Hant":"kitajščina (tradicionalna pisava han)",zu:"zulujščina",zun:"zunijščina",zza:"zazajščina"},scriptNames:{Cyrl:"cirilica",Latn:"latinica",Arab:"arabski",Guru:"gurmuki",Tfng:"tifinajski",Vaii:"zlogovna pisava vai",Hans:"poenostavljena pisava han",Hant:"tradicionalna pisava han"}},so:{rtl:false,languageNames:{af:"Afrikaanka",agq:"Ageem",ak:"Akan",am:"Axmaari",ar:"Carabi","ar-001":"Carabiga rasmiga ah",as:"Asaamiis",asa:"Asu",ast:"Astuuriyaan",az:"Asarbayjan",bas:"Basaa",be:"Beleruusiyaan",bem:"Bemba",bez:"Bena",bg:"Bulgeeriyaan",bm:"Bambaara",bn:"Bangladesh",bo:"Tibeetaan",br:"Biriton",brx:"Bodo",bs:"Bosniyaan",ca:"Katalaan",ccp:"Jakma",ce:"Jejen",ceb:"Sebuano",cgg:"Jiga",chr:"Jerookee",ckb:"Bartamaha Kurdish",co:"Korsikan",cs:"Jeeg",cu:"Kaniisadda Islaafik",cy:"Welsh",da:"Dhaanish",dav:"Taiita",de:"Jarmal","de-AT":"Jarmal (Awsteriya)","de-CH":"Jarmal (Iswiiserlaand)",dje:"Sarma",dsb:"Soorbiyaanka Hoose",dua:"Duaala",dyo:"Joola-Foonyi",dz:"D’zongqa",ebu:"Embuu",ee:"Eewe",el:"Giriik",en:"Ingiriisi","en-AU":"Ingiriis Austaraaliyaan","en-CA":"Ingiriis Kanadiyaan","en-GB":"Ingiriis Biritish","en-US":"Ingiriis Maraykan",eo:"Isberaanto",es:"Isbaanish","es-419":"Isbaanishka Laatiin Ameerika","es-ES":"Isbaanish (Isbayn)","es-MX":"Isbaanish (Meksiko)",et:"Istooniyaan",eu:"Basquu",ewo:"Eewondho",fa:"Faarisi",ff:"Fuulah",fi:"Finishka",fil:"Tagalog",fo:"Farowsi",fr:"Faransiis","fr-CA":"Faransiiska Kanada","fr-CH":"Faransiis (Iswiiserlaand)",fur:"Firiyuuliyaan",fy:"Firiisiyan Galbeed",ga:"Ayrish",gd:"Iskot Giilik",gl:"Galiisiyaan",gsw:"Jarmal Iswiis",gu:"Gujaraati",guz:"Guusii",gv:"Mankis",ha:"Hawsa",haw:"Hawaay",he:"Cibraani",hi:"Hindi",hmn:"Hamong",hr:"Koro’eeshiyaan",hsb:"Sorobiyaanka Sare",ht:"Heeytiyaan Karawle",hu:"Hangariyaan",hy:"Armeeniyaan",ia:"Interlinguwa",id:"Indunusiyaan",ig:"Igbo",ii:"Sijuwan Yi",is:"Ayslandays",it:"Talyaani",ja:"Jabaaniis",jgo:"Ingoomba",jmc:"Chaga",jv:"Jafaaniis",ka:"Joorijiyaan",kab:"Kabayle",kam:"Kaamba",kde:"Kimakonde",kea:"Kabuferdiyanu",khq:"Koyra Jiini",ki:"Kikuuyu",kk:"Kasaaq",kkj:"Kaako",kl:"Kalaallisuut",kln:"Kalenjiin",km:"Kamboodhian",kn:"Kannadays",ko:"Kuuriyaan",kok:"Konkani",ks:"Kaashmiir",ksb:"Shambaala",ksf:"Bafiya",ksh:"Kologniyaan",ku:"Kurdishka",kw:"Kornish",ky:"Kirgiis",la:"Laatiin",lag:"Laangi",lb:"Luksaamboorgish",lg:"Gandha",lkt:"Laakoota",ln:"Lingala",lo:"Lao",lrc:"Koonfurta Luuri",lt:"Lituwaanays",lu:"Luuba-kataanga",luo:"Luwada",luy:"Luhya",lv:"Laatfiyaan",mas:"Masaay",mer:"Meeru",mfe:"Moorisayn",mg:"Malagaasi",mgh:"Makhuwa",mgo:"Meetaa",mi:"Maaoori",mk:"Masadooniyaan",ml:"Malayalam",mn:"Mangooli",mr:"Maarati",ms:"Malaay",mt:"Maltiis",mua:"Miyundhaang",my:"Burmese",mzn:"Masanderaani",naq:"Nama",nb:"Noorwijiyaan Bokma",nd:"Indhebeele",nds:"Jarmal Hooseeya","nds-NL":"Jarmal Hooseeya (Nederlaands)",ne:"Nebaali",nl:"Holandays","nl-BE":"Af faleemi",nmg:"Kuwaasiyo",nn:"Nowrwejiyan (naynoroski)",nnh:"Ingiyembuun",nus:"Nuweer",ny:"Inyaanja",nyn:"Inyankoole",om:"Oromo",or:"Oodhiya",os:"Oseetic",pa:"Bunjaabi",pl:"Boolish",prg:"Brashiyaanki Hore",ps:"Bashtuu",pt:"Boortaqiis","pt-BR":"Boortaqiiska Baraasiil","pt-PT":"Boortaqiis (Boortuqaal)",qu:"Quwejuwa",rm:"Romaanis",rn:"Rundhi",ro:"Romanka","ro-MD":"Romanka (Moldofa)",rof:"Rombo",ru:"Ruush",rw:"Ruwaandha",rwk:"Raawa",sa:"Sanskrit",sah:"Saaqa",saq:"Sambuuru",sbp:"Sangu",sd:"Siindhi",se:"Koonfurta Saami",seh:"Seena",ses:"Koyraboro Seenni",sg:"Sango",shi:"Shilha",si:"Sinhaleys",sk:"Isloofaak",sl:"Islofeeniyaan",sm:"Samowan",smn:"Inaari Saami",sn:"Shoona",so:"Soomaali",sq:"Albeeniyaan",sr:"Seerbiyaan",st:"Sesooto",su:"Suudaaniis",sv:"Swiidhis",sw:"Sawaaxili","sw-CD":"Sawaaxili (Jamhuuriyadda Dimuquraadiga Kongo)",ta:"Tamiil",te:"Teluugu",teo:"Teeso",tg:"Taajik",th:"Taaylandays",ti:"Tigrinya",tk:"Turkumaanish",to:"Toongan",tr:"Turkish",tt:"Taatar",twq:"Tasaawaq",tzm:"Bartamaha Atlaas Tamasayt",ug:"Uighur",uk:"Yukreeniyaan",ur:"Urduu",uz:"Usbakis",vai:"Faayi",vi:"Fiitnaamays",vo:"Folabuuk",vun:"Fuunjo",wae:"Walseer",wo:"Woolof",xh:"Hoosta",xog:"Sooga",yav:"Yaangbeen",yi:"Yadhish",yo:"Yoruuba",yue:"Kantoneese",zgh:"Morokaanka Tamasayt Rasmiga",zh:"Shiinaha Mandarin","zh-Hans":"Shiinaha Mandarin (La fududeeyay)","zh-Hant":"Shiinaha Mandarin (Hore)",zu:"Zuulu"},scriptNames:{Cyrl:"Siriylik",Latn:"Laatiin",Arab:"Carabi",Hans:"La fududeeyay",Hant:"Hore"}},sq:{rtl:false,languageNames:{aa:"afarisht",ab:"abkazisht",ace:"akinezisht",ada:"andangmeisht",ady:"adigisht",af:"afrikanisht",agq:"agemisht",ain:"ajnuisht",ak:"akanisht",ale:"aleutisht",alt:"altaishte jugore",am:"amarisht",an:"aragonezisht",anp:"angikisht",ar:"arabisht","ar-001":"arabishte standarde moderne",arn:"mapuçisht",arp:"arapahoisht",as:"asamezisht",asa:"asuisht",ast:"asturisht",av:"avarikisht",awa:"auadhisht",ay:"ajmarisht",az:"azerbajxhanisht",ba:"bashkirisht",ban:"balinezisht",bas:"basaisht",be:"bjellorusisht",bem:"bembaisht",bez:"benaisht",bg:"bullgarisht",bgn:"balokishte perëndimore",bho:"boxhpurisht",bi:"bislamisht",bin:"binisht",bla:"siksikaisht",bm:"bambarisht",bn:"bengalisht",bo:"tibetisht",br:"bretonisht",brx:"bodoisht",bs:"boshnjakisht",bug:"buginezisht",byn:"blinisht",ca:"katalonisht",ccp:"çakmaisht",ce:"çeçenisht",ceb:"sebuanisht",cgg:"çigisht",ch:"kamoroisht",chk:"çukezisht",chm:"marisht",cho:"çoktauisht",chr:"çerokisht",chy:"çejenisht",ckb:"kurdishte qendrore",co:"korsikisht",crs:"frëngjishte kreole seselve",cs:"çekisht",cu:"sllavishte kishtare",cv:"çuvashisht",cy:"uellsisht",da:"danisht",dak:"dakotisht",dar:"darguaisht",dav:"tajtaisht",de:"gjermanisht","de-AT":"gjermanishte austriake","de-CH":"gjermanishte zvicerane (dialekti i Alpeve)",dgr:"dogribisht",dje:"zarmaisht",dsb:"sorbishte e poshtme",dua:"dualaisht",dv:"divehisht",dyo:"xhulafonjisht",dz:"xhongaisht",dzg:"dazagauisht",ebu:"embuisht",ee:"eveisht",efi:"efikisht",eka:"ekajukisht",el:"greqisht",en:"anglisht","en-AU":"anglishte australiane","en-CA":"anglishte kanadeze","en-GB":"anglishte britanike","en-US":"anglishte amerikane",eo:"esperanto",es:"spanjisht","es-419":"spanjishte amerikano-latine","es-ES":"spanjishte evropiane","es-MX":"spanjishte meksikane",et:"estonisht",eu:"baskisht",ewo:"euondoisht",fa:"persisht",ff:"fulaisht",fi:"finlandisht",fil:"filipinisht",fj:"fixhianisht",fo:"faroisht",fon:"fonisht",fr:"frëngjisht","fr-CA":"frëngjishte kanadeze","fr-CH":"frëngjishte zvicerane",fur:"friulianisht",fy:"frizianishte perëndimore",ga:"irlandisht",gaa:"gaisht",gag:"gagauzisht",gd:"galishte skoceze",gez:"gizisht",gil:"gilbertazisht",gl:"galicisht",gn:"guaranisht",gor:"gorontaloisht",gsw:"gjermanishte zvicerane",gu:"guxharatisht",guz:"gusisht",gv:"manksisht",gwi:"guiçinisht",ha:"hausisht",haw:"havaisht",he:"hebraisht",hi:"indisht",hil:"hiligajnonisht",hmn:"hmongisht",hr:"kroatisht",hsb:"sorbishte e sipërme",ht:"haitisht",hu:"hungarisht",hup:"hupaisht",hy:"armenisht",hz:"hereroisht",ia:"interlingua",iba:"ibanisht",ibb:"ibibioisht",id:"indonezisht",ie:"gjuha oksidentale",ig:"igboisht",ii:"sishuanisht",ilo:"ilokoisht",inh:"ingushisht",io:"idoisht",is:"islandisht",it:"italisht",iu:"inuktitutisht",ja:"japonisht",jbo:"lojbanisht",jgo:"ngombisht",jmc:"maçamisht",jv:"javanisht",ka:"gjeorgjisht",kab:"kabilisht",kac:"kaçinisht",kaj:"kajeisht",kam:"kambaisht",kbd:"kabardianisht",kcg:"tjapisht",kde:"makondisht",kea:"kreolishte e Kepit të Gjelbër",kfo:"koroisht",kha:"kasisht",khq:"kojraçinisht",ki:"kikujuisht",kj:"kuanjamaisht",kk:"kazakisht",kkj:"kakoisht",kl:"kalalisutisht",kln:"kalenxhinisht",km:"kmerisht",kmb:"kimbunduisht",kn:"kanadisht",ko:"koreanisht",koi:"komi-parmjakisht",kok:"konkanisht",kpe:"kpeleisht",kr:"kanurisht",krc:"karaçaj-balkarisht",krl:"karelianisht",kru:"kurukisht",ks:"kashmirisht",ksb:"shambalisht",ksf:"bafianisht",ksh:"këlnisht",ku:"kurdisht",kum:"kumikisht",kv:"komisht",kw:"kornisht",ky:"kirgizisht",la:"latinisht",lad:"ladinoisht",lag:"langisht",lb:"luksemburgisht",lez:"lezgianisht",lg:"gandaisht",li:"limburgisht",lkt:"lakotisht",ln:"lingalisht",lo:"laosisht",loz:"lozisht",lrc:"lurishte veriore",lt:"lituanisht",lu:"luba-katangaisht",lua:"luba-luluaisht",lun:"lundaisht",luo:"luoisht",lus:"mizoisht",luy:"lujaisht",lv:"letonisht",mad:"madurezisht",mag:"magaisht",mai:"maitilisht",mak:"makasarisht",mas:"masaisht",mdf:"mokshaisht",men:"mendisht",mer:"meruisht",mfe:"morisjenisht",mg:"madagaskarisht",mgh:"makua-mitoisht",mgo:"metaisht",mh:"marshallisht",mi:"maorisht",mic:"mikmakisht",min:"minangkabauisht",mk:"maqedonisht",ml:"malajalamisht",mn:"mongolisht",mni:"manipurisht",moh:"mohokisht",mos:"mosisht",mr:"maratisht",ms:"malajisht",mt:"maltisht",mua:"mundangisht",mus:"krikisht",mwl:"mirandisht",my:"birmanisht",myv:"erzjaisht",mzn:"mazanderanisht",na:"nauruisht",nap:"napoletanisht",naq:"namaisht",nb:"norvegjishte letrare",nd:"ndebelishte veriore",nds:"gjermanishte e vendeve të ulëta","nds-NL":"gjermanishte saksone e vendeve të ulëta",ne:"nepalisht","new":"neuarisht",ng:"ndongaisht",nia:"niasisht",niu:"niueanisht",nl:"holandisht","nl-BE":"flamandisht",nmg:"kuasisht",nn:"norvegjishte nynorsk",nnh:"ngiembunisht",no:"norvegjisht",nog:"nogajisht",nqo:"nkoisht",nr:"ndebelishte jugore",nso:"sotoishte veriore",nus:"nuerisht",nv:"navahoisht",ny:"nianjisht",nyn:"niankolisht",oc:"oksitanisht",om:"oromoisht",or:"odisht",os:"osetisht",pa:"punxhabisht",pag:"pangasinanisht",pam:"pampangaisht",pap:"papiamentisht",pau:"paluanisht",pcm:"pixhinishte nigeriane",pl:"polonisht",prg:"prusisht",ps:"pashtoisht",pt:"portugalisht","pt-BR":"portugalishte braziliane","pt-PT":"portugalishte evropiane",qu:"keçuaisht",quc:"kiçeisht",rap:"rapanuisht",rar:"rarontonganisht",rm:"retoromanisht",rn:"rundisht",ro:"rumanisht","ro-MD":"moldavisht",rof:"romboisht",root:"rutisht",ru:"rusisht",rup:"vllahisht",rw:"kiniaruandisht",rwk:"ruaisht",sa:"sanskritisht",sad:"sandauisht",sah:"sakaisht",saq:"samburisht",sat:"santalisht",sba:"ngambajisht",sbp:"sanguisht",sc:"sardenjisht",scn:"siçilianisht",sco:"skotisht",sd:"sindisht",sdh:"kurdishte jugore",se:"samishte veriore",seh:"senaisht",ses:"senishte kojrabore",sg:"sangoisht",sh:"serbo-kroatisht",shi:"taçelitisht",shn:"shanisht",si:"sinhalisht",sk:"sllovakisht",sl:"sllovenisht",sm:"samoanisht",sma:"samishte jugore",smj:"samishte lule",smn:"samishte inari",sms:"samishte skolti",sn:"shonisht",snk:"soninkisht",so:"somalisht",sq:"shqip",sr:"serbisht",srn:"srananisht (sranantongoisht)",ss:"suatisht",ssy:"sahoisht",st:"sotoishte jugore",su:"sundanisht",suk:"sukumaisht",sv:"suedisht",sw:"suahilisht","sw-CD":"suahilishte kongoleze",swb:"kamorianisht",syr:"siriakisht",ta:"tamilisht",te:"teluguisht",tem:"timneisht",teo:"tesoisht",tet:"tetumisht",tg:"taxhikisht",th:"tajlandisht",ti:"tigrinjaisht",tig:"tigreisht",tk:"turkmenisht",tlh:"klingonisht",tn:"cuanaisht",to:"tonganisht",tpi:"pisinishte toku",tr:"turqisht",trv:"torokoisht",ts:"congaisht",tt:"tatarisht",tum:"tumbukaisht",tvl:"tuvaluisht",tw:"tuisht",twq:"tasavakisht",ty:"tahitisht",tyv:"tuvinianisht",tzm:"tamazajtisht e Atlasit Qendror",udm:"udmurtisht",ug:"ujgurisht",uk:"ukrainisht",umb:"umbunduisht",ur:"urduisht",uz:"uzbekisht",vai:"vaisht",ve:"vendaisht",vi:"vietnamisht",vo:"volapykisht",vun:"vunxhoisht",wa:"ualunisht",wae:"ualserisht",wal:"ulajtaisht",war:"uarajisht",wbp:"uarlpirisht",wo:"uolofisht",xal:"kalmikisht",xh:"xhosaisht",xog:"sogisht",yav:"jangbenisht",ybb:"jembaisht",yi:"jidisht",yo:"jorubaisht",yue:"kantonezisht",zgh:"tamaziatishte standarde marokene",zh:"kinezisht","zh-Hans":"kinezisht (i thjeshtuar)","zh-Hant":"kinezisht (tradicional)",zu:"zuluisht",zun:"zunisht",zza:"zazaisht"},scriptNames:{Cyrl:"cirilik",Latn:"latin",Arab:"arabik",Guru:"gurmuk",Hans:"i thjeshtuar",Hant:"tradicional"}},sr:{rtl:false,languageNames:{aa:"афарски",ab:"абхаски",ace:"ацешки",ach:"аколи",ada:"адангме",ady:"адигејски",ae:"авестански",af:"африканс",afh:"африхили",agq:"агем",ain:"аину",ak:"акански",akk:"акадијски",ale:"алеутски",alt:"јужноалтајски",am:"амхарски",an:"арагонски",ang:"староенглески",anp:"ангика",ar:"арапски","ar-001":"савремени стандардни арапски",arc:"арамејски",arn:"мапуче",arp:"арапахо",arw:"аравачки",as:"асамски",asa:"асу",ast:"астуријски",av:"аварски",awa:"авади",ay:"ајмара",az:"азербејџански",ba:"башкирски",bal:"белучки",ban:"балијски",bas:"баса",be:"белоруски",bej:"беџа",bem:"бемба",bez:"бена",bg:"бугарски",bgn:"западни белучки",bho:"боџпури",bi:"бислама",bik:"бикол",bin:"бини",bla:"сисика",bm:"бамбара",bn:"бенгалски",bo:"тибетански",br:"бретонски",bra:"брај",brx:"бодо",bs:"босански",bua:"бурјатски",bug:"бугијски",byn:"блински",ca:"каталонски",cad:"кадо",car:"карипски",cch:"атсам",ce:"чеченски",ceb:"себуански",cgg:"чига",ch:"чаморо",chb:"чипча",chg:"чагатај",chk:"чучки",chm:"мари",chn:"чинучки",cho:"чоктавски",chp:"чипевјански",chr:"чероки",chy:"чејенски",ckb:"централни курдски",co:"корзикански",cop:"коптски",cr:"кри",crh:"кримскотатарски",crs:"сејшелски креолски француски",cs:"чешки",csb:"кашупски",cu:"црквенословенски",cv:"чувашки",cy:"велшки",da:"дански",dak:"дакота",dar:"даргински",dav:"таита",de:"немачки","de-AT":"немачки (Аустрија)","de-CH":"швајцарски високи немачки",del:"делаверски",den:"слејви",dgr:"догрипски",din:"динка",dje:"зарма",doi:"догри",dsb:"доњолужичкосрпски",dua:"дуала",dum:"средњехоландски",dv:"малдивски",dyo:"џола фоњи",dyu:"ђула",dz:"џонга",dzg:"дазага",ebu:"ембу",ee:"еве",efi:"ефички",egy:"староегипатски",eka:"екаџук",el:"грчки",elx:"еламитски",en:"енглески","en-AU":"енглески (Аустралија)","en-CA":"енглески (Канада)","en-GB":"енглески (Велика Британија)","en-US":"енглески (Сједињене Америчке Државе)",enm:"средњеенглески",eo:"есперанто",es:"шпански","es-419":"шпански (Латинска Америка)","es-ES":"шпански (Европа)","es-MX":"шпански (Мексико)",et:"естонски",eu:"баскијски",ewo:"евондо",fa:"персијски",fan:"фанг",fat:"фанти",ff:"фула",fi:"фински",fil:"филипински",fj:"фиџијски",fo:"фарски",fon:"фон",fr:"француски","fr-CA":"француски (Канада)","fr-CH":"француски (Швајцарска)",frc:"кајунски француски",frm:"средњефранцуски",fro:"старофранцуски",frr:"севернофризијски",frs:"источнофризијски",fur:"фриулски",fy:"западни фризијски",ga:"ирски",gaa:"га",gag:"гагауз",gay:"гајо",gba:"гбаја",gd:"шкотски гелски",gez:"геез",gil:"гилбертски",gl:"галицијски",gmh:"средњи високонемачки",gn:"гварани",goh:"старонемачки",gon:"гонди",gor:"горонтало",got:"готски",grb:"гребо",grc:"старогрчки",gsw:"немачки (Швајцарска)",gu:"гуџарати",guz:"гуси",gv:"манкс",gwi:"гвичински",ha:"хауса",hai:"хаида",haw:"хавајски",he:"хебрејски",hi:"хинди",hil:"хилигајнонски",hit:"хетитски",hmn:"хмоншки",ho:"хири моту",hr:"хрватски",hsb:"горњолужичкосрпски",ht:"хаићански",hu:"мађарски",hup:"хупа",hy:"јерменски",hz:"хереро",ia:"интерлингва",iba:"ибански",ibb:"ибибио",id:"индонежански",ie:"интерлингве",ig:"игбо",ii:"сечуански ји",ik:"инупик",ilo:"илоко",inh:"ингушки",io:"идо",is:"исландски",it:"италијански",iu:"инуктитутски",ja:"јапански",jbo:"ложбан",jgo:"нгомба",jmc:"мачаме",jpr:"јудео-персијски",jrb:"јудео-арапски",jv:"јавански",ka:"грузијски",kaa:"кара-калпашки",kab:"кабиле",kac:"качински",kaj:"џу",kam:"камба",kaw:"кави",kbd:"кабардијски",kcg:"тјап",kde:"маконде",kea:"зеленортски",kfo:"коро",kg:"конго",kha:"каси",kho:"котанешки",khq:"којра чиини",ki:"кикују",kj:"квањама",kk:"казашки",kkj:"како",kl:"гренландски",kln:"каленџински",km:"кмерски",kmb:"кимбунду",kn:"канада",ko:"корејски",koi:"коми-пермски",kok:"конкани",kos:"косренски",kpe:"кпеле",kr:"канури",krc:"карачајско-балкарски",kri:"крио",krl:"карелски",kru:"курук",ks:"кашмирски",ksb:"шамбала",ksf:"бафија",ksh:"келнски",ku:"курдски",kum:"кумички",kut:"кутенај",kv:"коми",kw:"корнволски",ky:"киргиски",la:"латински",lad:"ладино",lag:"ланги",lah:"ланда",lam:"ламба",lb:"луксембуршки",lez:"лезгински",lg:"ганда",li:"лимбуршки",lkt:"лакота",ln:"лингала",lo:"лаоски",lol:"монго",lou:"луизијански креолски",loz:"лози",lrc:"северни лури",lt:"литвански",lu:"луба-катанга",lua:"луба-лулуа",lui:"луисењо",lun:"лунда",luo:"луо",lus:"мизо",luy:"лујиа",lv:"летонски",mad:"мадурски",mag:"магахи",mai:"маитили",mak:"макасарски",man:"мандинго",mas:"масајски",mdf:"мокша",mdr:"мандар",men:"менде",mer:"меру",mfe:"морисјен",mg:"малгашки",mga:"средњеирски",mgh:"макува-мито",mgo:"мета",mh:"маршалски",mi:"маорски",mic:"микмак",min:"минангкабау",mk:"македонски",ml:"малајалам",mn:"монголски",mnc:"манџурски",mni:"манипурски",moh:"мохочки",mos:"моси",mr:"марати",ms:"малајски",mt:"малтешки",mua:"мунданг",mus:"кришки",mwl:"мирандски",mwr:"марвари",my:"бурмански",myv:"ерзја",mzn:"мазандерански",na:"науруски",nap:"напуљски",naq:"нама",nb:"норвешки букмол",nd:"северни ндебеле",nds:"нисконемачки","nds-NL":"нискосаксонски",ne:"непалски","new":"невари",ng:"ндонга",nia:"ниас",niu:"ниуејски",nl:"холандски","nl-BE":"фламански",nmg:"квасио",nn:"норвешки нинорск",nnh:"нгиембун",no:"норвешки",nog:"ногајски",non:"старонордијски",nqo:"нко",nr:"јужни ндебеле",nso:"северни сото",nus:"нуер",nv:"навахо",nwc:"класични неварски",ny:"њанџа",nym:"њамвези",nyn:"њанколе",nyo:"њоро",nzi:"нзима",oc:"окситански",oj:"оџибве",om:"оромо",or:"одија",os:"осетински",osa:"осаге",ota:"османски турски",pa:"пенџапски",pag:"пангасинански",pal:"пахлави",pam:"пампанга",pap:"папијаменто",pau:"палауски",pcm:"нигеријски пиџин",peo:"староперсијски",phn:"феничански",pi:"пали",pl:"пољски",pon:"понпејски",prg:"пруски",pro:"староокситански",ps:"паштунски",pt:"португалски","pt-BR":"португалски (Бразил)","pt-PT":"португалски (Португал)",qu:"кечуа",quc:"киче",raj:"раџастански",rap:"рапануи",rar:"раротонгански",rm:"романш",rn:"кирунди",ro:"румунски","ro-MD":"молдавски",rof:"ромбо",rom:"ромски",root:"рут",ru:"руски",rup:"цинцарски",rw:"кињаруанда",rwk:"руа",sa:"санскрит",sad:"сандаве",sah:"саха",sam:"самаријански арамејски",saq:"самбуру",sas:"сасак",sat:"сантали",sba:"нгамбај",sbp:"сангу",sc:"сардински",scn:"сицилијански",sco:"шкотски",sd:"синди",sdh:"јужнокурдски",se:"северни сами",seh:"сена",sel:"селкупски",ses:"којраборо сени",sg:"санго",sga:"староирски",sh:"српскохрватски",shi:"ташелхит",shn:"шански",si:"синхалешки",sid:"сидамо",sk:"словачки",sl:"словеначки",sm:"самоански",sma:"јужни сами",smj:"луле сами",smn:"инари сами",sms:"сколт сами",sn:"шона",snk:"сонинке",so:"сомалски",sog:"согдијски",sq:"албански",sr:"српски",srn:"сранан тонго",srr:"серерски",ss:"свази",ssy:"сахо",st:"сесото",su:"сундански",suk:"сукума",sus:"сусу",sux:"сумерски",sv:"шведски",sw:"свахили","sw-CD":"кисвахили",swb:"коморски",syc:"сиријачки",syr:"сиријски",ta:"тамилски",te:"телугу",tem:"тимне",teo:"тесо",ter:"терено",tet:"тетум",tg:"таџички",th:"тајски",ti:"тигриња",tig:"тигре",tiv:"тив",tk:"туркменски",tkl:"токелау",tl:"тагалог",tlh:"клингонски",tli:"тлингит",tmh:"тамашек",tn:"цвана",to:"тонгански",tog:"њаса тонга",tpi:"ток писин",tr:"турски",trv:"тароко",ts:"цонга",tsi:"цимшиан",tt:"татарски",tum:"тумбука",tvl:"тувалу",tw:"тви",twq:"тасавак",ty:"тахићански",tyv:"тувински",tzm:"централноатласки тамазигт",udm:"удмуртски",ug:"ујгурски",uga:"угаритски",uk:"украјински",umb:"умбунду",ur:"урду",uz:"узбечки",vai:"ваи",ve:"венда",vi:"вијетнамски",vo:"волапик",vot:"водски",vun:"вунџо",wa:"валонски",wae:"валсерски",wal:"волајта",war:"варајски",was:"вашо",wbp:"варлпири",wo:"волоф",xal:"калмички",xh:"коса",xog:"сога",yao:"јао",yap:"јапски",yav:"јангбен",ybb:"јемба",yi:"јидиш",yo:"јоруба",yue:"кантонски",za:"џуаншки",zap:"запотечки",zbl:"блисимболи",zen:"зенага",zgh:"стандардни марокански тамазигт",zh:"кинески","zh-Hans":"кинески (поједностављено кинеско писмо)","zh-Hant":"кинески (традиционално кинеско писмо)",zu:"зулу",zun:"зуни",zza:"заза"},scriptNames:{Cyrl:"ћирилица",Latn:"латиница",Arab:"арапско писмо",Guru:"гурмуки писмо",Tfng:"тифинаг писмо",Vaii:"ваи писмо",Hans:"поједностављено кинеско писмо",Hant:"традиционално кинеско писмо"}},sv:{rtl:false,languageNames:{aa:"afar",ab:"abchaziska",ace:"acehnesiska",ach:"acholi",ada:"adangme",ady:"adygeiska",ae:"avestiska",aeb:"tunisisk arabiska",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akkadiska",akz:"Alabama-muskogee",ale:"aleutiska",aln:"gegiska",alt:"sydaltaiska",am:"amhariska",an:"aragonesiska",ang:"fornengelska",anp:"angika",ar:"arabiska","ar-001":"modern standardarabiska",arc:"arameiska",arn:"mapudungun",aro:"araoniska",arp:"arapaho",arq:"algerisk arabiska",ars:"najdiarabiska",arw:"arawakiska",ary:"marockansk arabiska",arz:"egyptisk arabiska",as:"assamesiska",asa:"asu",ase:"amerikanskt teckenspråk",ast:"asturiska",av:"avariska",avk:"kotava",awa:"awadhi",ay:"aymara",az:"azerbajdzjanska",ba:"basjkiriska",bal:"baluchiska",ban:"balinesiska",bar:"bayerska",bas:"basa",bax:"bamunska",bbc:"batak-toba",bbj:"ghomala",be:"vitryska",bej:"beja",bem:"bemba",bew:"betawiska",bez:"bena",bfd:"bafut",bfq:"bagada",bg:"bulgariska",bgn:"västbaluchiska",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bjn:"banjariska",bkm:"bamekon",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tibetanska",bpy:"bishnupriya",bqi:"bakhtiari",br:"bretonska",bra:"braj",brh:"brahuiska",brx:"bodo",bs:"bosniska",bss:"bakossi",bua:"burjätiska",bug:"buginesiska",bum:"boulou",byn:"blin",byv:"bagangte",ca:"katalanska",cad:"caddo",car:"karibiska",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"tjetjenska",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuukesiska",chm:"mariska",chn:"chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokesiska",chy:"cheyenne",ckb:"soranisk kurdiska",co:"korsikanska",cop:"koptiska",cps:"kapisnon",cr:"cree",crh:"krimtatariska",crs:"seychellisk kreol",cs:"tjeckiska",csb:"kasjubiska",cu:"kyrkslaviska",cv:"tjuvasjiska",cy:"walesiska",da:"danska",dak:"dakota",dar:"darginska",dav:"taita",de:"tyska","de-AT":"österrikisk tyska","de-CH":"schweizisk högtyska",del:"delaware",den:"slavej",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"lågsorbiska",dtp:"centraldusun",dua:"duala",dum:"medelnederländska",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egl:"emiliska",egy:"fornegyptiska",eka:"ekajuk",el:"grekiska",elx:"elamitiska",en:"engelska","en-AU":"australisk engelska","en-CA":"kanadensisk engelska","en-GB":"brittisk engelska","en-US":"amerikansk engelska",enm:"medelengelska",eo:"esperanto",es:"spanska","es-419":"latinamerikansk spanska","es-ES":"europeisk spanska","es-MX":"mexikansk spanska",esu:"centralalaskisk jupiska",et:"estniska",eu:"baskiska",ewo:"ewondo",ext:"extremaduriska",fa:"persiska",fan:"fang",fat:"fanti",ff:"fulani",fi:"finska",fil:"filippinska",fit:"meänkieli",fj:"fijianska",fo:"färöiska",fon:"fonspråket",fr:"franska","fr-CA":"kanadensisk franska","fr-CH":"schweizisk franska",frc:"cajun-franska",frm:"medelfranska",fro:"fornfranska",frp:"frankoprovensalska",frr:"nordfrisiska",frs:"östfrisiska",fur:"friulianska",fy:"västfrisiska",ga:"iriska",gaa:"gã",gag:"gagauziska",gay:"gayo",gba:"gbaya",gbz:"zoroastrisk dari",gd:"skotsk gäliska",gez:"etiopiska",gil:"gilbertiska",gl:"galiciska",glk:"gilaki",gmh:"medelhögtyska",gn:"guaraní",goh:"fornhögtyska",gom:"Goa-konkani",gon:"gondi",gor:"gorontalo",got:"gotiska",grb:"grebo",grc:"forngrekiska",gsw:"schweizertyska",gu:"gujarati",guc:"wayuu",gur:"farefare",guz:"gusii",gv:"manx",gwi:"gwichin",ha:"hausa",hai:"haida",hak:"hakka",haw:"hawaiiska",he:"hebreiska",hi:"hindi",hif:"Fiji-hindi",hil:"hiligaynon",hit:"hettitiska",hmn:"hmongspråk",ho:"hirimotu",hr:"kroatiska",hsb:"högsorbiska",hsn:"xiang",ht:"haitiska",hu:"ungerska",hup:"hupa",hy:"armeniska",hz:"herero",ia:"interlingua",iba:"ibanska",ibb:"ibibio",id:"indonesiska",ie:"interlingue",ig:"igbo",ii:"szezuan i",ik:"inupiak",ilo:"iloko",inh:"ingusjiska",io:"ido",is:"isländska",it:"italienska",iu:"inuktitut",izh:"ingriska",ja:"japanska",jam:"jamaikansk engelsk kreol",jbo:"lojban",jgo:"ngomba",jmc:"kimashami",jpr:"judisk persiska",jrb:"judisk arabiska",jut:"jylländska",jv:"javanesiska",ka:"georgiska",kaa:"karakalpakiska",kab:"kabyliska",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardinska",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kapverdiska",ken:"kenjang",kfo:"koro",kg:"kikongo",kgp:"kaingang",kha:"khasi",kho:"khotanesiska",khq:"Timbuktu-songhai",khw:"khowar",ki:"kikuyu",kiu:"kirmanjki",kj:"kuanyama",kk:"kazakiska",kkj:"mkako",kl:"grönländska",kln:"kalenjin",km:"kambodjanska",kmb:"kimbundu",kn:"kannada",ko:"koreanska",koi:"komi-permjakiska",kok:"konkani",kos:"kosreanska",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",kri:"krio",krj:"kinaray-a",krl:"karelska",kru:"kurukh",ks:"kashmiriska",ksb:"kisambaa",ksf:"bafia",ksh:"kölniska",ku:"kurdiska",kum:"kumykiska",kut:"kutenaj",kv:"kome",kw:"korniska",ky:"kirgiziska",la:"latin",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgiska",lez:"lezghien",lfn:"lingua franca nova",lg:"luganda",li:"limburgiska",lij:"liguriska",liv:"livoniska",lkt:"lakota",lmo:"lombardiska",ln:"lingala",lo:"laotiska",lol:"mongo",lou:"louisiana-kreol",loz:"lozi",lrc:"nordluri",lt:"litauiska",ltg:"lettgalliska",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseño",lun:"lunda",lus:"lushai",luy:"luhya",lv:"lettiska",lzh:"litterär kineiska",lzz:"laziska",mad:"maduresiska",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mande",mas:"massajiska",mde:"maba",mdf:"moksja",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauritansk kreol",mg:"malagassiska",mga:"medeliriska",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshalliska",mi:"maori",mic:"mi’kmaq",min:"minangkabau",mk:"makedonska",ml:"malayalam",mn:"mongoliska",mnc:"manchuriska",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",mrj:"västmariska",ms:"malajiska",mt:"maltesiska",mua:"mundang",mus:"muskogee",mwl:"mirandesiska",mwr:"marwari",mwv:"mentawai",my:"burmesiska",mye:"myene",myv:"erjya",mzn:"mazanderani",na:"nauruanska",nan:"min nan",nap:"napolitanska",naq:"nama",nb:"norskt bokmål",nd:"nordndebele",nds:"lågtyska","nds-NL":"lågsaxiska",ne:"nepalesiska","new":"newariska",ng:"ndonga",nia:"nias",niu:"niueanska",njo:"ao-naga",nl:"nederländska","nl-BE":"flamländska",nmg:"kwasio",nn:"nynorska",nnh:"bamileké-ngiemboon",no:"norska",nog:"nogai",non:"fornnordiska",nov:"novial",nqo:"n-kå",nr:"sydndebele",nso:"nordsotho",nus:"nuer",nv:"navaho",nwc:"klassisk newariska",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitanska",oj:"odjibwa",om:"oromo",or:"oriya",os:"ossetiska",osa:"osage",ota:"ottomanska",pa:"punjabi",pag:"pangasinan",pal:"medelpersiska",pam:"pampanga",pap:"papiamento",pau:"palau",pcd:"pikardiska",pcm:"Nigeria-pidgin",pdc:"Pennsylvaniatyska",pdt:"mennonitisk lågtyska",peo:"fornpersiska",pfl:"Pfalz-tyska",phn:"feniciska",pi:"pali",pl:"polska",pms:"piemontesiska",pnt:"pontiska",pon:"pohnpeiska",prg:"fornpreussiska",pro:"fornprovensalska",ps:"afghanska",pt:"portugisiska","pt-BR":"brasiliansk portugisiska","pt-PT":"europeisk portugisiska",qu:"quechua",quc:"quiché",qug:"Chimborazo-höglandskichwa",raj:"rajasthani",rap:"rapanui",rar:"rarotonganska",rgn:"romagnol",rif:"riffianska",rm:"rätoromanska",rn:"rundi",ro:"rumänska","ro-MD":"moldaviska",rof:"rombo",rom:"romani",root:"rot",rtm:"rotumänska",ru:"ryska",rue:"rusyn",rug:"rovianska",rup:"arumänska",rw:"kinjarwanda",rwk:"rwa",sa:"sanskrit",sad:"sandawe",sah:"jakutiska",sam:"samaritanska",saq:"samburu",sas:"sasak",sat:"santali",saz:"saurashtra",sba:"ngambay",sbp:"sangu",sc:"sardinska",scn:"sicilianska",sco:"skotska",sd:"sindhi",sdc:"sassaresisk sardiska",sdh:"sydkurdiska",se:"nordsamiska",see:"seneca",seh:"sena",sei:"seri",sel:"selkup",ses:"Gao-songhai",sg:"sango",sga:"forniriska",sgs:"samogitiska",sh:"serbokroatiska",shi:"tachelhit",shn:"shan",shu:"Tchad-arabiska",si:"singalesiska",sid:"sidamo",sk:"slovakiska",sl:"slovenska",sli:"lågsilesiska",sly:"selayar",sm:"samoanska",sma:"sydsamiska",smj:"lulesamiska",smn:"enaresamiska",sms:"skoltsamiska",sn:"shona",snk:"soninke",so:"somaliska",sog:"sogdiska",sq:"albanska",sr:"serbiska",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sydsotho",stq:"saterfrisiska",su:"sundanesiska",suk:"sukuma",sus:"susu",sux:"sumeriska",sv:"svenska",sw:"swahili","sw-CD":"Kongo-swahili",swb:"shimaoré",syc:"klassisk syriska",syr:"syriska",szl:"silesiska",ta:"tamil",tcy:"tulu",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadzjikiska",th:"thailändska",ti:"tigrinja",tig:"tigré",tiv:"tivi",tk:"turkmeniska",tkl:"tokelauiska",tkr:"tsakhur",tl:"tagalog",tlh:"klingonska",tli:"tlingit",tly:"talysh",tmh:"tamashek",tn:"tswana",to:"tonganska",tog:"nyasatonganska",tpi:"tok pisin",tr:"turkiska",tru:"turoyo",trv:"taroko",ts:"tsonga",tsd:"tsakodiska",tsi:"tsimshian",tt:"tatariska",ttt:"muslimsk tatariska",tum:"tumbuka",tvl:"tuvaluanska",tw:"twi",twq:"tasawaq",ty:"tahitiska",tyv:"tuviniska",tzm:"centralmarockansk tamazight",udm:"udmurtiska",ug:"uiguriska",uga:"ugaritiska",uk:"ukrainska",umb:"umbundu",ur:"urdu",uz:"uzbekiska",vai:"vaj",ve:"venda",vec:"venetianska",vep:"veps",vi:"vietnamesiska",vls:"västflamländska",vmf:"Main-frankiska",vo:"volapük",vot:"votiska",vro:"võru",vun:"vunjo",wa:"vallonska",wae:"walsertyska",wal:"walamo",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"wu",xal:"kalmuckiska",xh:"xhosa",xmf:"mingrelianska",xog:"lusoga",yao:"kiyao",yap:"japetiska",yav:"yangben",ybb:"bamileké-jemba",yi:"jiddisch",yo:"yoruba",yrl:"nheengatu",yue:"kantonesiska",za:"zhuang",zap:"zapotek",zbl:"blissymboler",zea:"zeeländska",zen:"zenaga",zgh:"marockansk standard-tamazight",zh:"kinesiska","zh-Hans":"förenklad kinesiska","zh-Hant":"traditionell kinesiska",zu:"zulu",zun:"zuni",zza:"zazaiska"},scriptNames:{Cyrl:"kyrilliska",Latn:"latinska",Arab:"arabiska",Guru:"gurmukhiska",Tfng:"tifinaghiska",Vaii:"vaj",Hans:"förenklade",Hant:"traditionella"}},ta:{rtl:false,languageNames:{aa:"அஃபார்",ab:"அப்காஜியான்",ace:"ஆச்சினீஸ்",ach:"அகோலி",ada:"அதாங்மே",ady:"அதகே",ae:"அவெஸ்தான்",aeb:"துனிசிய அரபு",af:"ஆஃப்ரிகான்ஸ்",afh:"அஃப்ரிஹிலி",agq:"அகெம்",ain:"ஐனு",ak:"அகான்",akk:"அக்கேதியன்",ale:"அலூட்",alt:"தெற்கு அல்தை",am:"அம்ஹாரிக்",an:"ஆர்கோனீஸ்",ang:"பழைய ஆங்கிலம்",anp:"அங்கிகா",ar:"அரபிக்","ar-001":"நவீன நிலையான அரபிக்",arc:"அராமைக்",arn:"மபுச்சே",arp:"அரபஹோ",arw:"அராவாக்",as:"அஸ்ஸாமீஸ்",asa:"அசு",ast:"அஸ்துரியன்",av:"அவேரிக்",awa:"அவதி",ay:"அய்மரா",az:"அசர்பைஜானி",ba:"பஷ்கிர்",bal:"பலூச்சி",ban:"பலினீஸ்",bas:"பாஸா",be:"பெலாருஷியன்",bej:"பேஜா",bem:"பெம்பா",bez:"பெனா",bfq:"படகா",bg:"பல்கேரியன்",bgn:"மேற்கு பலோச்சி",bho:"போஜ்பூரி",bi:"பிஸ்லாமா",bik:"பிகோல்",bin:"பினி",bla:"சிக்சிகா",bm:"பம்பாரா",bn:"வங்காளம்",bo:"திபெத்தியன்",bpy:"பிஷ்ணுப்பிரியா",br:"பிரெட்டன்",bra:"ப்ராஜ்",brx:"போடோ",bs:"போஸ்னியன்",bua:"புரியாத்",bug:"புகினீஸ்",byn:"ப்லின்",ca:"கேட்டலான்",cad:"கேடோ",car:"கரீப்",cch:"ஆட்சம்",ccp:"சக்மா",ce:"செச்சென்",ceb:"செபுவானோ",cgg:"சிகா",ch:"சாமோரோ",chb:"சிப்சா",chg:"ஷகதை",chk:"சூகிசே",chm:"மாரி",chn:"சினூக் ஜார்கான்",cho:"சோக்தௌ",chp:"சிபெவ்யான்",chr:"செரோகீ",chy:"செயேனி",ckb:"மத்திய குர்திஷ்",co:"கார்சிகன்",cop:"காப்டிக்",cr:"க்ரீ",crh:"கிரிமியன் துர்க்கி",crs:"செசெல்வா க்ரெயோல் பிரெஞ்சு",cs:"செக்",csb:"கஷுபியன்",cu:"சர்ச் ஸ்லாவிக்",cv:"சுவாஷ்",cy:"வேல்ஷ்",da:"டேனிஷ்",dak:"டகோடா",dar:"தார்குவா",dav:"டைடா",de:"ஜெர்மன்","de-AT":"ஆஸ்திரிய ஜெர்மன்","de-CH":"ஸ்விஸ் ஹை ஜெர்மன்",del:"டெலாவர்",den:"ஸ்லாவ்",dgr:"டோக்ரிப்",din:"டின்கா",dje:"ஸார்மா",doi:"டோக்ரி",dsb:"லோயர் சோர்பியன்",dua:"டுவாலா",dum:"மிடில் டச்சு",dv:"திவேஹி",dyo:"ஜோலா-ஃபோன்யி",dyu:"ட்யூலா",dz:"பூடானி",dzg:"டசாகா",ebu:"எம்பு",ee:"ஈவ்",efi:"எஃபிக்",egy:"பண்டைய எகிப்தியன்",eka:"ஈகாஜுக்",el:"கிரேக்கம்",elx:"எலமைட்",en:"ஆங்கிலம்","en-AU":"ஆஸ்திரேலிய ஆங்கிலம்","en-CA":"கனடிய ஆங்கிலம்","en-GB":"பிரிட்டிஷ் ஆங்கிலம்","en-US":"அமெரிக்க ஆங்கிலம்",enm:"மிடில் ஆங்கிலம்",eo:"எஸ்பரேன்டோ",es:"ஸ்பானிஷ்","es-419":"லத்தின் அமெரிக்க ஸ்பானிஷ்","es-ES":"ஐரோப்பிய ஸ்பானிஷ்","es-MX":"மெக்ஸிகன் ஸ்பானிஷ்",et:"எஸ்டோனியன்",eu:"பாஸ்க்",ewo:"எவோன்டோ",fa:"பெர்ஷியன்",fan:"ஃபேங்க்",fat:"ஃபான்டி",ff:"ஃபுலா",fi:"ஃபின்னிஷ்",fil:"ஃபிலிபினோ",fj:"ஃபிஜியன்",fo:"ஃபரோயிஸ்",fon:"ஃபான்",fr:"பிரெஞ்சு","fr-CA":"கனடிய பிரெஞ்சு","fr-CH":"ஸ்விஸ் பிரஞ்சு",frc:"கஜுன் பிரெஞ்சு",frm:"மிடில் பிரெஞ்சு",fro:"பழைய பிரெஞ்சு",frr:"வடக்கு ஃப்ரிஸியான்",frs:"கிழக்கு ஃப்ரிஸியான்",fur:"ஃப்ரியூலியன்",fy:"மேற்கு ஃப்ரிஷியன்",ga:"ஐரிஷ்",gaa:"கா",gag:"காகௌஸ்",gan:"கன் சீனம்",gay:"கயோ",gba:"பயா",gd:"ஸ்காட்ஸ் கேலிக்",gez:"கீஜ்",gil:"கில்பெர்டீஸ்",gl:"காலிஸியன்",gmh:"மிடில் ஹை ஜெர்மன்",gn:"க்வாரனி",goh:"பழைய ஹை ஜெர்மன்",gon:"கோன்டி",gor:"கோரோன்டலோ",got:"கோதிக்",grb:"க்ரேபோ",grc:"பண்டைய கிரேக்கம்",gsw:"ஸ்விஸ் ஜெர்மன்",gu:"குஜராத்தி",guz:"குஸி",gv:"மேங்க்ஸ்",gwi:"குவிசின்",ha:"ஹௌஸா",hai:"ஹைடா",hak:"ஹக்கா சீனம்",haw:"ஹவாயியன்",he:"ஹீப்ரூ",hi:"இந்தி",hif:"ஃபிஜி இந்தி",hil:"ஹிலிகாய்னான்",hit:"ஹிட்டைட்",hmn:"மாங்க்",ho:"ஹிரி மோட்டு",hr:"குரோஷியன்",hsb:"அப்பர் சோர்பியான்",hsn:"சியாங்க் சீனம்",ht:"ஹைத்தியன் க்ரியோலி",hu:"ஹங்கேரியன்",hup:"ஹுபா",hy:"ஆர்மேனியன்",hz:"ஹெரேரோ",ia:"இன்டர்லிங்வா",iba:"இபான்",ibb:"இபிபியோ",id:"இந்தோனேஷியன்",ie:"இன்டர்லிங்",ig:"இக்போ",ii:"சிசுவான் ஈ",ik:"இனுபியாக்",ilo:"இலோகோ",inh:"இங்குஷ்",io:"இடோ",is:"ஐஸ்லேண்டிக்",it:"இத்தாலியன்",iu:"இனுகிடூட்",ja:"ஜப்பானியம்",jbo:"லோஜ்பன்",jgo:"நகொம்பா",jmc:"மாசெம்",jpr:"ஜூதேயோ-பெர்ஷியன்",jrb:"ஜூதேயோ-அராபிக்",jv:"ஜாவனீஸ்",ka:"ஜார்ஜியன்",kaa:"காரா-கல்பாக்",kab:"கபாய்ல்",kac:"காசின்",kaj:"ஜ்ஜூ",kam:"கம்பா",kaw:"காவி",kbd:"கபார்டியன்",kcg:"தையாப்",kde:"மகொண்டே",kea:"கபுவெர்தியானு",kfo:"கோரோ",kg:"காங்கோ",kha:"காஸி",kho:"கோதானீஸ்",khq:"கொய்ரா சீனீ",ki:"கிகுயூ",kj:"குவான்யாமா",kk:"கசாக்",kkj:"ககோ",kl:"கலாலிசூட்",kln:"கலின்ஜின்",km:"கெமெர்",kmb:"கிம்புன்து",kn:"கன்னடம்",ko:"கொரியன்",koi:"கொமி-பெர்ம்யாக்",kok:"கொங்கணி",kos:"கோஸ்ரைன்",kpe:"க்பெல்லே",kr:"கனுரி",krc:"கராசே-பல்கார்",krl:"கரேலியன்",kru:"குருக்",ks:"காஷ்மிரி",ksb:"ஷம்பாலா",ksf:"பாஃபியா",ksh:"கொலோக்னியன்",ku:"குர்திஷ்",kum:"கும்இக்",kut:"குடேனை",kv:"கொமி",kw:"கார்னிஷ்",ky:"கிர்கிஸ்",la:"லத்தின்",lad:"லடினோ",lag:"லங்கி",lah:"லஹன்டா",lam:"லம்பா",lb:"லக்ஸம்போர்கிஷ்",lez:"லெஜ்ஜியன்",lg:"கான்டா",li:"லிம்பர்கிஷ்",lkt:"லகோடா",ln:"லிங்காலா",lo:"லாவோ",lol:"மோங்கோ",lou:"லூசியானா க்ரயோல்",loz:"லோசி",lrc:"வடக்கு லுரி",lt:"லிதுவேனியன்",lu:"லுபா-கடாங்கா",lua:"லுபா-லுலுலா",lui:"லுய்சேனோ",lun:"லூன்டா",luo:"லுயோ",lus:"மிஸோ",luy:"லுயியா",lv:"லாட்வியன்",mad:"மதுரீஸ்",mag:"மகாஹி",mai:"மைதிலி",mak:"மகாசார்",man:"மான்டிங்கோ",mas:"மாசாய்",mdf:"மோக்க்ஷா",mdr:"மான்டார்",men:"மென்டீ",mer:"மெரு",mfe:"மொரிசியன்",mg:"மலகாஸி",mga:"மிடில் ஐரிஷ்",mgh:"மகுவா-மீட்டோ",mgo:"மேடா",mh:"மார்ஷெலீஸ்",mi:"மௌரி",mic:"மிக்மாக்",min:"மின்னாங்கபௌ",mk:"மாஸிடோனியன்",ml:"மலையாளம்",mn:"மங்கோலியன்",mnc:"மன்சூ",mni:"மணிப்புரி",moh:"மொஹாக்",mos:"மோஸ்ஸி",mr:"மராத்தி",ms:"மலாய்",mt:"மால்டிஸ்",mua:"முன்டாங்",mus:"க்ரீக்",mwl:"மிரான்டீஸ்",mwr:"மார்வாரி",my:"பர்மீஸ்",myv:"ஏர்ஜியா",mzn:"மசந்தேரனி",na:"நவ்ரூ",nan:"மின் நான் சீனம்",nap:"நியோபோலிடன்",naq:"நாமா",nb:"நார்வேஜியன் பொக்மால்",nd:"வடக்கு தெபெலே",nds:"லோ ஜெர்மன்","nds-NL":"லோ சாக்ஸன்",ne:"நேபாளி","new":"நெவாரி",ng:"தோங்கா",nia:"நியாஸ்",niu:"நியூவான்",nl:"டச்சு","nl-BE":"ஃப்லெமிஷ்",nmg:"க்வாசியோ",nn:"நார்வேஜியன் நியூநார்ஸ்க்",nnh:"நெகெய்ம்பூன்",no:"நார்வேஜியன்",nog:"நோகை",non:"பழைய நோர்ஸ்",nqo:"என்‘கோ",nr:"தெற்கு தெபெலே",nso:"வடக்கு சோதோ",nus:"நியூர்",nv:"நவாஜோ",nwc:"பாரம்பரிய நேவாரி",ny:"நயன்ஜா",nym:"நியாம்வேஜி",nyn:"நியான்கோலே",nyo:"நியோரோ",nzi:"நிஜ்மா",oc:"ஒக்கிடன்",oj:"ஒஜிப்வா",om:"ஒரோமோ",or:"ஒடியா",os:"ஒசெட்டிக்",osa:"ஓசேஜ்",ota:"ஓட்டோமான் துருக்கிஷ்",pa:"பஞ்சாபி",pag:"பன்காசினன்",pal:"பாஹ்லவி",pam:"பம்பாங்கா",pap:"பபியாமென்டோ",pau:"பலௌவன்",pcm:"நைஜீரியன் பிட்கின்",pdc:"பென்சில்வேனிய ஜெர்மன்",peo:"பழைய பெர்ஷியன்",phn:"ஃபொனிஷியன்",pi:"பாலி",pl:"போலிஷ்",pon:"ஃபோன்பெயென்",prg:"பிரஷ்யன்",pro:"பழைய ப்ரோவென்சால்",ps:"பஷ்தோ",pt:"போர்ச்சுக்கீஸ்","pt-BR":"பிரேசிலிய போர்ச்சுகீஸ்","pt-PT":"ஐரோப்பிய போர்ச்சுகீஸ்",qu:"க்வெச்சுவா",quc:"கீசீ",raj:"ராஜஸ்தானி",rap:"ரபனுய்",rar:"ரரோடோங்கன்",rm:"ரோமான்ஷ்",rn:"ருண்டி",ro:"ரோமேனியன்","ro-MD":"மோல்டாவியன்",rof:"ரோம்போ",rom:"ரோமானி",root:"ரூட்",ru:"ரஷியன்",rup:"அரோமானியன்",rw:"கின்யாருவான்டா",rwk:"ருவா",sa:"சமஸ்கிருதம்",sad:"சான்டாவே",sah:"சக்கா",sam:"சமாரிடன் அராமைக்",saq:"சம்புரு",sas:"சாசாக்",sat:"சான்டாலி",saz:"சௌராஷ்டிரம்",sba:"நெகாம்பே",sbp:"சங்கு",sc:"சார்தீனியன்",scn:"சிசிலியன்",sco:"ஸ்காட்ஸ்",sd:"சிந்தி",sdh:"தெற்கு குர்திஷ்",se:"வடக்கு சமி",seh:"செனா",sel:"செல்குப்",ses:"கொய்ராபோரோ சென்னி",sg:"சாங்கோ",sga:"பழைய ஐரிஷ்",sh:"செர்போ-குரோஷியன்",shi:"தசேஹித்",shn:"ஷான்",si:"சிங்களம்",sid:"சிடாமோ",sk:"ஸ்லோவாக்",sl:"ஸ்லோவேனியன்",sm:"சமோவான்",sma:"தெற்கு சமி",smj:"லுலே சமி",smn:"இனாரி சமி",sms:"ஸ்கோல்ட் சமி",sn:"ஷோனா",snk:"சோனின்கே",so:"சோமாலி",sog:"சோக்தியன்",sq:"அல்பேனியன்",sr:"செர்பியன்",srn:"ஸ்ரானன் டோங்கோ",srr:"செரெர்",ss:"ஸ்வாடீ",ssy:"சஹோ",st:"தெற்கு ஸோதோ",su:"சுண்டானீஸ்",suk:"சுகுமா",sus:"சுசு",sux:"சுமேரியன்",sv:"ஸ்வீடிஷ்",sw:"ஸ்வாஹிலி","sw-CD":"காங்கோ ஸ்வாஹிலி",swb:"கொமோரியன்",syc:"பாரம்பரிய சிரியாக்",syr:"சிரியாக்",ta:"தமிழ்",te:"தெலுங்கு",tem:"டிம்னே",teo:"டெசோ",ter:"டெரெனோ",tet:"டெடும்",tg:"தஜிக்",th:"தாய்",ti:"டிக்ரின்யா",tig:"டைக்ரே",tiv:"டிவ்",tk:"துருக்மென்",tkl:"டோகேலௌ",tl:"டாகாலோக்",tlh:"க்ளிங்கோன்",tli:"லிங்கிட்",tmh:"தமஷேக்",tn:"ஸ்வானா",to:"டோங்கான்",tog:"நயாசா டோங்கா",tpi:"டோக் பிஸின்",tr:"துருக்கிஷ்",trv:"தரோகோ",ts:"ஸோங்கா",tsi:"ட்ஸிம்ஷியன்",tt:"டாடர்",tum:"தும்புகா",tvl:"டுவாலு",tw:"ட்வி",twq:"டசவாக்",ty:"தஹிதியன்",tyv:"டுவினியன்",tzm:"மத்திய அட்லஸ் டமசைட்",udm:"உட்முர்ட்",ug:"உய்குர்",uga:"உகாரிடிக்",uk:"உக்ரைனியன்",umb:"அம்பொண்டு",ur:"உருது",uz:"உஸ்பெக்",vai:"வை",ve:"வென்டா",vi:"வியட்நாமீஸ்",vo:"ஒலாபூக்",vot:"வோட்க்",vun:"வுன்ஜோ",wa:"ஒவாலூன்",wae:"வால்சேர்",wal:"வோலாய்ட்டா",war:"வாரே",was:"வாஷோ",wbp:"வல்பிரி",wo:"ஓலோஃப்",wuu:"வூ சீனம்",xal:"கல்மிக்",xh:"ஹோசா",xog:"சோகா",yao:"யாவ்",yap:"யாபேசே",yav:"யாங்பென்",ybb:"யெம்பா",yi:"யெட்டிஷ்",yo:"யோருபா",yue:"காண்டோனீஸ்",za:"ஜுவாங்",zap:"ஜாபோடெக்",zbl:"ப்லிஸ்ஸிம்பால்ஸ்",zen:"ஜெனகா",zgh:"ஸ்டாண்டர்ட் மொராக்கன் தமாசைட்",zh:"சீனம்","zh-Hans":"எளிதாக்கப்பட்ட சீன மாண்டரின்","zh-Hant":"பாரம்பரிய சீன மாண்டரின்",zu:"ஜுலு",zun:"ஜூனி",zza:"ஜாஜா"},scriptNames:{Cyrl:"சிரிலிக்",Latn:"லத்தின்",Arab:"அரபிக்",Guru:"குர்முகி",Tfng:"டிஃபினாக்",Vaii:"வை",Hans:"எளிதாக்கப்பட்டது",Hant:"பாரம்பரியம்"}},te:{rtl:false,languageNames:{aa:"అఫార్",ab:"అబ్ఖాజియన్",ace:"ఆఖినీస్",ach:"అకోలి",ada:"అడాంగ్మే",ady:"అడిగాబ్జే",ae:"అవేస్టాన్",aeb:"టునీషియా అరబిక్",af:"ఆఫ్రికాన్స్",afh:"అఫ్రిహిలి",agq:"అగేమ్",ain:"ఐను",ak:"అకాన్",akk:"అక్కాడియాన్",ale:"అలియుట్",alt:"దక్షిణ ఆల్టై",am:"అమ్హారిక్",an:"అరగోనిస్",ang:"ప్రాచీన ఆంగ్లం",anp:"ఆంగిక",ar:"అరబిక్","ar-001":"ఆధునిక ప్రామాణిక అరబిక్",arc:"అరామైక్",arn:"మపుచే",arp:"అరాపాహో",arw:"అరావాక్",arz:"ఈజిప్షియన్ అరబిక్",as:"అస్సామీస్",asa:"అసు",ast:"ఆస్టూరియన్",av:"అవారిక్",awa:"అవధి",ay:"ఐమారా",az:"అజర్బైజాని",ba:"బాష్కిర్",bal:"బాలుచి",ban:"బాలినీస్",bas:"బసా",be:"బెలారుషియన్",bej:"బేజా",bem:"బెంబా",bez:"బెనా",bg:"బల్గేరియన్",bgn:"పశ్చిమ బలూచీ",bho:"భోజ్‌పురి",bi:"బిస్లామా",bik:"బికోల్",bin:"బిని",bla:"సిక్సికా",bm:"బంబారా",bn:"బంగ్లా",bo:"టిబెటన్",bpy:"బిష్ణుప్రియ",br:"బ్రెటన్",bra:"బ్రాజ్",brx:"బోడో",bs:"బోస్నియన్",bua:"బురియట్",bug:"బుగినీస్",byn:"బ్లిన్",ca:"కాటలాన్",cad:"కేడ్డో",car:"కేరిబ్",cch:"అట్సామ్",ccp:"చక్మా",ce:"చెచెన్",ceb:"సెబువానో",cgg:"ఛిగా",ch:"చమర్రో",chb:"చిబ్చా",chg:"చాగటై",chk:"చూకీస్",chm:"మారి",chn:"చినూక్ జార్గన్",cho:"చక్టా",chp:"చిపెవ్యాన్",chr:"చెరోకీ",chy:"చేయేన్",ckb:"సెంట్రల్ కర్డిష్",co:"కోర్సికన్",cop:"కోప్టిక్",cr:"క్రి",crh:"క్రిమియన్ టర్కిష్",crs:"సెసేల్వా క్రియోల్ ఫ్రెంచ్",cs:"చెక్",csb:"కషుబియన్",cu:"చర్చ్ స్లావిక్",cv:"చువాష్",cy:"వెల్ష్",da:"డానిష్",dak:"డకోటా",dar:"డార్గ్వా",dav:"టైటా",de:"జర్మన్","de-AT":"ఆస్ట్రియన్ జర్మన్","de-CH":"స్విస్ హై జర్మన్",del:"డెలావేర్",den:"స్లేవ్",dgr:"డోగ్రిబ్",din:"డింకా",dje:"జార్మా",doi:"డోగ్రి",dsb:"లోయర్ సోర్బియన్",dua:"డ్యూలా",dum:"మధ్యమ డచ్",dv:"దివేహి",dyo:"జోలా-ఫోనయి",dyu:"డ్యులా",dz:"జోంఖా",dzg:"డాజాగా",ebu:"ఇంబు",ee:"యూ",efi:"ఎఫిక్",egy:"ప్రాచీన ఈజిప్షియన్",eka:"ఏకాజక్",el:"గ్రీక్",elx:"ఎలామైట్",en:"ఆంగ్లం","en-AU":"ఆస్ట్రేలియన్ ఇంగ్లీష్","en-CA":"కెనడియన్ ఇంగ్లీష్","en-GB":"బ్రిటిష్ ఇంగ్లీష్","en-US":"అమెరికన్ ఇంగ్లీష్",enm:"మధ్యమ ఆంగ్లం",eo:"ఎస్పెరాంటో",es:"స్పానిష్","es-419":"లాటిన్ అమెరికన్ స్పానిష్","es-ES":"యూరోపియన్ స్పానిష్","es-MX":"మెక్సికన్ స్పానిష్",et:"ఎస్టోనియన్",eu:"బాస్క్యూ",ewo:"ఎవోండొ",fa:"పర్షియన్",fan:"ఫాంగ్",fat:"ఫాంటి",ff:"ఫ్యుల",fi:"ఫిన్నిష్",fil:"ఫిలిపినో",fj:"ఫిజియన్",fo:"ఫారోస్",fon:"ఫాన్",fr:"ఫ్రెంచ్","fr-CA":"కెనడియెన్ ఫ్రెంచ్","fr-CH":"స్విస్ ఫ్రెంచ్",frc:"కాజున్ ఫ్రెంచ్",frm:"మధ్యమ ప్రెంచ్",fro:"ప్రాచీన ఫ్రెంచ్",frr:"ఉత్తర ఫ్రిసియన్",frs:"తూర్పు ఫ్రిసియన్",fur:"ఫ్రియులియన్",fy:"పశ్చిమ ఫ్రిసియన్",ga:"ఐరిష్",gaa:"గా",gag:"గాగౌజ్",gan:"గాన్ చైనీస్",gay:"గాయో",gba:"గ్బాయా",gd:"స్కాటిష్ గేలిక్",gez:"జీజ్",gil:"గిల్బర్టీస్",gl:"గాలిషియన్",gmh:"మధ్యమ హై జర్మన్",gn:"గ్వారనీ",goh:"ప్రాచీన హై జర్మన్",gon:"గోండి",gor:"గోరోంటలా",got:"గోథిక్",grb:"గ్రేబో",grc:"ప్రాచీన గ్రీక్",gsw:"స్విస్ జర్మన్",gu:"గుజరాతి",guz:"గుస్సీ",gv:"మాంక్స్",gwi:"గ్విచిన్",ha:"హౌసా",hai:"హైడా",hak:"హక్కా చైనీస్",haw:"హవాయియన్",he:"హిబ్రూ",hi:"హిందీ",hil:"హిలిగెనాన్",hit:"హిట్టిటే",hmn:"మోంగ్",ho:"హిరి మోటు",hr:"క్రొయేషియన్",hsb:"అప్పర్ సోర్బియన్",hsn:"జియాంగ్ చైనీస్",ht:"హైటియన్ క్రియోల్",hu:"హంగేరియన్",hup:"హుపా",hy:"ఆర్మేనియన్",hz:"హెరెరో",ia:"ఇంటర్లింగ్వా",iba:"ఐబాన్",ibb:"ఇబిబియో",id:"ఇండోనేషియన్",ie:"ఇంటర్లింగ్",ig:"ఇగ్బో",ii:"శిషువన్ ఈ",ik:"ఇనుపైయాక్",ilo:"ఐలోకో",inh:"ఇంగుష్",io:"ఈడో",is:"ఐస్లాండిక్",it:"ఇటాలియన్",iu:"ఇనుక్టిటుట్",ja:"జపనీస్",jbo:"లోజ్బాన్",jgo:"గోంబా",jmc:"మకొమ్",jpr:"జ్యుడియో-పర్షియన్",jrb:"జ్యుడియో-అరబిక్",jv:"జావనీస్",ka:"జార్జియన్",kaa:"కారా-కల్పాక్",kab:"కాబిల్",kac:"కాచిన్",kaj:"జ్యూ",kam:"కంబా",kaw:"కావి",kbd:"కబార్డియన్",kcg:"ట్యాప్",kde:"మకొండే",kea:"కాబువేర్దియను",kfo:"కోరో",kg:"కోంగో",kha:"ఖాసి",kho:"ఖోటనీస్",khq:"కొయరా చీన్నీ",ki:"కికుయు",kj:"క్వాన్యామ",kk:"కజఖ్",kkj:"కాకో",kl:"కలాల్లిసూట్",kln:"కలెంజిన్",km:"ఖ్మేర్",kmb:"కిమ్బుండు",kn:"కన్నడ",ko:"కొరియన్",koi:"కోమి-పర్మాక్",kok:"కొంకణి",kos:"కోస్రేయన్",kpe:"పెల్లే",kr:"కానురి",krc:"కరచే-బల్కార్",krl:"కరేలియన్",kru:"కూరుఖ్",ks:"కాశ్మీరి",ksb:"శంబాలా",ksf:"బాఫియ",ksh:"కొలోనియన్",ku:"కుర్దిష్",kum:"కుమ్యిక్",kut:"కుటేనై",kv:"కోమి",kw:"కోర్నిష్",ky:"కిర్గిజ్",la:"లాటిన్",lad:"లాడినో",lag:"లాంగీ",lah:"లాహండా",lam:"లాంబా",lb:"లక్సెంబర్గిష్",lez:"లేజ్ఘియన్",lg:"గాండా",li:"లిమ్బర్గిష్",lkt:"లకొటా",ln:"లింగాల",lo:"లావో",lol:"మొంగో",lou:"లూసియానా క్రియోల్",loz:"లోజి",lrc:"ఉత్తర లూరీ",lt:"లిథువేనియన్",lu:"లూబ-కటాంగ",lua:"లుబా-లులువ",lui:"లుయిసెనో",lun:"లుండా",luo:"లువో",lus:"మిజో",luy:"లుయియ",lv:"లాట్వియన్",mad:"మాదురీస్",mag:"మగాహి",mai:"మైథిలి",mak:"మకాసార్",man:"మండింగో",mas:"మాసై",mdf:"మోక్ష",mdr:"మండార్",men:"మెండే",mer:"మెరు",mfe:"మొరిస్యేన్",mg:"మలగాసి",mga:"మధ్యమ ఐరిష్",mgh:"మక్వా-మిట్టో",mgo:"మెటా",mh:"మార్షలీస్",mi:"మావొరీ",mic:"మికమాక్",min:"మినాంగ్‌కాబో",mk:"మాసిడోనియన్",ml:"మలయాళం",mn:"మంగోలియన్",mnc:"మంచు",mni:"మణిపురి",moh:"మోహాక్",mos:"మోస్సి",mr:"మరాఠీ",ms:"మలయ్",mt:"మాల్టీస్",mua:"మండాంగ్",mus:"క్రీక్",mwl:"మిరాండిస్",mwr:"మార్వాడి",my:"బర్మీస్",myv:"ఎర్జియా",mzn:"మాసన్‌దెరాని",na:"నౌరు",nan:"మిన్ నాన్ చైనీస్",nap:"నియాపోలిటన్",naq:"నమ",nb:"నార్వేజియన్ బొక్మాల్",nd:"ఉత్తర దెబెలె",nds:"లో జర్మన్","nds-NL":"లో సాక్సన్",ne:"నేపాలి","new":"నెవారి",ng:"డోంగా",nia:"నియాస్",niu:"నియాన్",nl:"డచ్","nl-BE":"ఫ్లెమిష్",nmg:"క్వాసియె",nn:"నార్వేజియాన్ న్యోర్స్క్",nnh:"గింబూన్",no:"నార్వేజియన్",nog:"నోగై",non:"ప్రాచిన నోర్స్",nqo:"న్కో",nr:"దక్షిణ దెబెలె",nso:"ఉత్తర సోతో",nus:"న్యుర్",nv:"నవాజొ",nwc:"సాంప్రదాయ న్యూయారీ",ny:"న్యాన్జా",nym:"న్యంవేజి",nyn:"న్యాన్కోలె",nyo:"నేయోరో",nzi:"జీమా",oc:"ఆక్సిటన్",oj:"చేవా",om:"ఒరోమో",or:"ఒడియా",os:"ఒసేటిక్",osa:"ఒసాజ్",ota:"ఒట్టోమన్ టర్కిష్",pa:"పంజాబీ",pag:"పంగాసినాన్",pal:"పహ్లావి",pam:"పంపన్గా",pap:"పపియమేంటో",pau:"పలావెన్",pcm:"నైజీరియా పిడ్గిన్",peo:"ప్రాచీన పర్షియన్",phn:"ఫోనికన్",pi:"పాలీ",pl:"పోలిష్",pon:"పోహ్న్పెయన్",prg:"ప్రష్యన్",pro:"ప్రాచీన ప్రోవెంసాల్",ps:"పాష్టో",pt:"పోర్చుగీస్","pt-BR":"బ్రెజీలియన్ పోర్చుగీస్","pt-PT":"యూరోపియన్ పోర్చుగీస్",qu:"కెచువా",quc:"కిచే",raj:"రాజస్తానీ",rap:"రాపన్యుయి",rar:"రారోటొంగాన్",rm:"రోమన్ష్",rn:"రుండి",ro:"రోమేనియన్","ro-MD":"మొల్డావియన్",rof:"రోంబో",rom:"రోమానీ",root:"రూట్",ru:"రష్యన్",rup:"ఆరోమేనియన్",rw:"కిన్యర్వాండా",rwk:"ర్వా",sa:"సంస్కృతం",sad:"సండావి",sah:"సాఖా",sam:"సమారిటన్ అరామైక్",saq:"సంబురు",sas:"ససక్",sat:"సంతాలి",sba:"గాంబే",sbp:"సాంగు",sc:"సార్డీనియన్",scn:"సిసిలియన్",sco:"స్కాట్స్",sd:"సింధీ",sdh:"దక్షిణ కుర్డిష్",se:"ఉత్తర సామి",seh:"సెనా",sel:"సేల్కప్",ses:"కోయోరాబోరో సెన్నీ",sg:"సాంగో",sga:"ప్రాచీన ఐరిష్",sh:"సేర్బో-క్రొయేషియన్",shi:"టాచెల్‌హిట్",shn:"షాన్",si:"సింహళం",sid:"సిడామో",sk:"స్లోవక్",sl:"స్లోవేనియన్",sm:"సమోవన్",sma:"దక్షిణ సామి",smj:"లులే సామి",smn:"ఇనారి సామి",sms:"స్కోల్ట్ సామి",sn:"షోన",snk:"సోనింకి",so:"సోమాలి",sog:"సోగ్డియన్",sq:"అల్బేనియన్",sr:"సెర్బియన్",srn:"స్రానన్ టోంగో",srr:"సెరేర్",ss:"స్వాతి",ssy:"సాహో",st:"దక్షిణ సోతో",su:"సండానీస్",suk:"సుకుమా",sus:"సుసు",sux:"సుమేరియాన్",sv:"స్వీడిష్",sw:"స్వాహిలి","sw-CD":"కాంగో స్వాహిలి",swb:"కొమొరియన్",syc:"సాంప్రదాయ సిరియాక్",syr:"సిరియాక్",ta:"తమిళము",tcy:"తుళు",te:"తెలుగు",tem:"టిమ్నే",teo:"టెసో",ter:"టెరెనో",tet:"టేటం",tg:"తజిక్",th:"థాయ్",ti:"టిగ్రిన్యా",tig:"టీగ్రె",tiv:"టివ్",tk:"తుర్క్‌మెన్",tkl:"టోకెలావ్",tl:"టగలాగ్",tlh:"క్లింగాన్",tli:"ట్లింగిట్",tmh:"టామషేక్",tn:"స్వానా",to:"టాంగాన్",tog:"న్యాసా టోన్గా",tpi:"టోక్ పిసిన్",tr:"టర్కిష్",trv:"తరోకో",ts:"సోంగా",tsi:"శింషీయన్",tt:"టాటర్",tum:"టుంబుకా",tvl:"టువాలు",tw:"ట్వి",twq:"టసావాఖ్",ty:"తహితియన్",tyv:"టువినియన్",tzm:"సెంట్రల్ అట్లాస్ టామాజైట్",udm:"ఉడ్ముర్ట్",ug:"ఉయ్‌ఘర్",uga:"ఉగారిటిక్",uk:"ఉక్రెయినియన్",umb:"ఉమ్బుండు",ur:"ఉర్దూ",uz:"ఉజ్బెక్",vai:"వాయి",ve:"వెండా",vi:"వియత్నామీస్",vo:"వోలాపుక్",vot:"వోటిక్",vun:"వుంజొ",wa:"వాలూన్",wae:"వాల్సర్",wal:"వాలేట్టా",war:"వారే",was:"వాషో",wbp:"వార్లపిరి",wo:"ఉలూఫ్",wuu:"వు చైనీస్",xal:"కల్మిక్",xh:"షోసా",xog:"సొగా",yao:"యాయే",yap:"యాపిస్",yav:"యాంగ్‌బెన్",ybb:"యెంబా",yi:"ఇడ్డిష్",yo:"యోరుబా",yue:"కాంటనీస్",za:"జువాన్",zap:"జపోటెక్",zbl:"బ్లిసింబల్స్",zen:"జెనాగా",zgh:"ప్రామాణిక మొరొకన్ టామజైట్",zh:"చైనీస్","zh-Hans":"సరళీకృత మాండరిన్ చైనీస్","zh-Hant":"సాంప్రదాయక మాండరిన్ చైనీస్",zu:"జూలూ",zun:"జుని",zza:"జాజా"},scriptNames:{Cyrl:"సిరిలిక్",Latn:"లాటిన్",Arab:"అరబిక్",Guru:"గుర్ముఖి",Tfng:"టిఫీనాఘ్",Vaii:"వాయి",Hans:"సరళీకృతం",Hant:"సాంప్రదాయక"}},th:{rtl:false,languageNames:{aa:"อะฟาร์",ab:"อับฮาเซีย",ace:"อาเจะห์",ach:"อาโคลิ",ada:"อาแดงมี",ady:"อะดืยเก",ae:"อเวสตะ",aeb:"อาหรับตูนิเซีย",af:"แอฟริกานส์",afh:"แอฟริฮีลี",agq:"อักเฮม",ain:"ไอนุ",ak:"อาคาน",akk:"อักกาด",akz:"แอละแบมา",ale:"อาลิวต์",aln:"เกกแอลเบเนีย",alt:"อัลไตใต้",am:"อัมฮารา",an:"อารากอน",ang:"อังกฤษโบราณ",anp:"อังคิกา",ar:"อาหรับ","ar-001":"อาหรับมาตรฐานสมัยใหม่",arc:"อราเมอิก",arn:"มาปูเช",aro:"อาเรานา",arp:"อาราปาโฮ",arq:"อาหรับแอลจีเรีย",ars:"อาหรับนัจญ์ดี",arw:"อาราวัก",ary:"อาหรับโมร็อกโก",arz:"อาหรับพื้นเมืองอียิปต์",as:"อัสสัม",asa:"อาซู",ase:"ภาษามืออเมริกัน",ast:"อัสตูเรียส",av:"อาวาร์",avk:"โคตาวา",awa:"อวธี",ay:"ไอย์มารา",az:"อาเซอร์ไบจาน",ba:"บัชคีร์",bal:"บาลูชิ",ban:"บาหลี",bar:"บาวาเรีย",bas:"บาสา",bax:"บามัน",bbc:"บาตักโทบา",bbj:"โคมาลา",be:"เบลารุส",bej:"เบจา",bem:"เบมบา",bew:"เบตาวี",bez:"เบนา",bfd:"บาฟัต",bfq:"พทคะ",bg:"บัลแกเรีย",bgn:"บาลูจิตะวันตก",bho:"โภชปุรี",bi:"บิสลามา",bik:"บิกอล",bin:"บินี",bjn:"บันจาร์",bkm:"กม",bla:"สิกสิกา",bm:"บัมบารา",bn:"บังกลา",bo:"ทิเบต",bpy:"พิศนุปริยะ",bqi:"บักติยารี",br:"เบรตัน",bra:"พัรช",brh:"บราฮุย",brx:"โพโฑ",bs:"บอสเนีย",bss:"อาโคซี",bua:"บูเรียต",bug:"บูกิส",bum:"บูลู",byn:"บลิน",byv:"เมดุมบา",ca:"คาตาลัน",cad:"คัดโด",car:"คาริบ",cay:"คายูกา",cch:"แอตแซม",ccp:"จักม่า",ce:"เชเชน",ceb:"เซบู",cgg:"คีกา",ch:"ชามอร์โร",chb:"ชิบชา",chg:"ชะกะไต",chk:"ชูก",chm:"มารี",chn:"ชินุกจาร์กอน",cho:"ช็อกทอว์",chp:"ชิพิวยัน",chr:"เชอโรกี",chy:"เชเยนเน",ckb:"เคิร์ดตอนกลาง",co:"คอร์ซิกา",cop:"คอปติก",cps:"กาปิซนอน",cr:"ครี",crh:"ตุรกีไครเมีย",crs:"ครีโอลเซเซลส์ฝรั่งเศส",cs:"เช็ก",csb:"คาซูเบียน",cu:"เชอร์ชสลาวิก",cv:"ชูวัช",cy:"เวลส์",da:"เดนมาร์ก",dak:"ดาโกทา",dar:"ดาร์กิน",dav:"ไททา",de:"เยอรมัน","de-AT":"เยอรมัน - ออสเตรีย","de-CH":"เยอรมันสูง (สวิส)",del:"เดลาแวร์",den:"สเลวี",dgr:"โดกริบ",din:"ดิงกา",dje:"ซาร์มา",doi:"โฑครี",dsb:"ซอร์เบียตอนล่าง",dtp:"ดูซุนกลาง",dua:"ดัวลา",dum:"ดัตช์กลาง",dv:"ธิเวหิ",dyo:"โจลา-ฟอนยี",dyu:"ดิวลา",dz:"ซองคา",dzg:"ดาซากา",ebu:"เอ็มบู",ee:"เอเว",efi:"อีฟิก",egl:"เอมีเลีย",egy:"อียิปต์โบราณ",eka:"อีกาจุก",el:"กรีก",elx:"อีลาไมต์",en:"อังกฤษ","en-AU":"อังกฤษ - ออสเตรเลีย","en-CA":"อังกฤษ - แคนาดา","en-GB":"อังกฤษ - สหราชอาณาจักร","en-US":"อังกฤษ - อเมริกัน",enm:"อังกฤษกลาง",eo:"เอสเปรันโต",es:"สเปน","es-419":"สเปน - ละตินอเมริกา","es-ES":"สเปน - ยุโรป","es-MX":"สเปน - เม็กซิโก",esu:"ยูพิกกลาง",et:"เอสโตเนีย",eu:"บาสก์",ewo:"อีวันโด",ext:"เอกซ์เตรมาดูรา",fa:"เปอร์เซีย",fan:"ฟอง",fat:"ฟันติ",ff:"ฟูลาห์",fi:"ฟินแลนด์",fil:"ฟิลิปปินส์",fit:"ฟินแลนด์ทอร์เนดาเล็น",fj:"ฟิจิ",fo:"แฟโร",fon:"ฟอน",fr:"ฝรั่งเศส","fr-CA":"ฝรั่งเศส - แคนาดา","fr-CH":"ฝรั่งเศส (สวิส)",frc:"ฝรั่งเศสกาฌ็อง",frm:"ฝรั่งเศสกลาง",fro:"ฝรั่งเศสโบราณ",frp:"อาร์พิตา",frr:"ฟริเซียนเหนือ",frs:"ฟริเซียนตะวันออก",fur:"ฟรูลี",fy:"ฟริเซียนตะวันตก",ga:"ไอริช",gaa:"กา",gag:"กากาอุซ",gan:"จีนกั้น",gay:"กาโย",gba:"กบายา",gbz:"ดารีโซโรอัสเตอร์",gd:"เกลิกสกอต",gez:"กีซ",gil:"กิลเบอร์ต",gl:"กาลิเซีย",glk:"กิลากี",gmh:"เยอรมันสูงกลาง",gn:"กัวรานี",goh:"เยอรมันสูงโบราณ",gom:"กอนกานีของกัว",gon:"กอนดิ",gor:"กอรอนทาโล",got:"โกธิก",grb:"เกรโบ",grc:"กรีกโบราณ",gsw:"เยอรมันสวิส",gu:"คุชราต",guc:"วายู",gur:"ฟราฟรา",guz:"กุซซี",gv:"มานซ์",gwi:"กวิชอิน",ha:"เฮาซา",hai:"ไฮดา",hak:"จีนแคะ",haw:"ฮาวาย",he:"ฮิบรู",hi:"ฮินดี",hif:"ฮินดีฟิจิ",hil:"ฮีลีกัยนน",hit:"ฮิตไตต์",hmn:"ม้ง",ho:"ฮีรีโมตู",hr:"โครเอเชีย",hsb:"ซอร์เบียตอนบน",hsn:"จีนเซียง",ht:"เฮติครีโอล",hu:"ฮังการี",hup:"ฮูปา",hy:"อาร์เมเนีย",hz:"เฮเรโร",ia:"อินเตอร์ลิงกัว",iba:"อิบาน",ibb:"อิบิบิโอ",id:"อินโดนีเซีย",ie:"อินเตอร์ลิงกิว",ig:"อิกโบ",ii:"เสฉวนยี่",ik:"อีนูเปียก",ilo:"อีโลโก",inh:"อินกุช",io:"อีโด",is:"ไอซ์แลนด์",it:"อิตาลี",iu:"อินุกติตุต",izh:"อินเกรียน",ja:"ญี่ปุ่น",jam:"อังกฤษคลีโอลจาเมกา",jbo:"โลชบัน",jgo:"อึนกอมบา",jmc:"มาชาเม",jpr:"ยิว-เปอร์เซีย",jrb:"ยิว-อาหรับ",jut:"จัท",jv:"ชวา",ka:"จอร์เจีย",kaa:"การา-กาลพาก",kab:"กาไบล",kac:"กะฉิ่น",kaj:"คจู",kam:"คัมบา",kaw:"กวี",kbd:"คาร์บาเดีย",kbl:"คาเนมบู",kcg:"ทีแยป",kde:"มาคอนเด",kea:"คาบูเวอร์เดียนู",ken:"เกินยาง",kfo:"โคโร",kg:"คองโก",kgp:"เคนก่าง",kha:"กาสี",kho:"โคตัน",khq:"โคย์ราชีนี",khw:"โควาร์",ki:"กีกูยู",kiu:"เคอร์มานิกิ",kj:"กวนยามา",kk:"คาซัค",kkj:"คาโก",kl:"กรีนแลนด์",kln:"คาเลนจิน",km:"เขมร",kmb:"คิมบุนดู",kn:"กันนาดา",ko:"เกาหลี",koi:"โคมิ-เปียร์เมียค",kok:"กอนกานี",kos:"คูสไร",kpe:"กาแปล",kr:"คานูรี",krc:"คาราไช-บัลคาร์",kri:"คริโอ",krj:"กินารายอา",krl:"แกรเลียน",kru:"กุรุข",ks:"แคชเมียร์",ksb:"ชัมบาลา",ksf:"บาเฟีย",ksh:"โคโลญ",ku:"เคิร์ด",kum:"คูมืยค์",kut:"คูเทไน",kv:"โกมิ",kw:"คอร์นิช",ky:"คีร์กีซ",la:"ละติน",lad:"ลาดิโน",lag:"แลนจี",lah:"ลาฮ์นดา",lam:"แลมบา",lb:"ลักเซมเบิร์ก",lez:"เลซเกียน",lfn:"ลิงกัวฟรังกาโนวา",lg:"ยูกันดา",li:"ลิมเบิร์ก",lij:"ลิกูเรีย",liv:"ลิโวเนีย",lkt:"ลาโกตา",lmo:"ลอมบาร์ด",ln:"ลิงกาลา",lo:"ลาว",lol:"มองโก",lou:"ภาษาครีโอลุยเซียนา",loz:"โลซิ",lrc:"ลูรีเหนือ",lt:"ลิทัวเนีย",ltg:"ลัตเกล",lu:"ลูบา-กาตองกา",lua:"ลูบา-ลูลัว",lui:"ลุยเซโน",lun:"ลันดา",luo:"ลัว",lus:"มิโซ",luy:"ลูเยีย",lv:"ลัตเวีย",lzh:"จีนคลาสสิก",lzz:"แลซ",mad:"มาดูรา",maf:"มาฟา",mag:"มคหี",mai:"ไมถิลี",mak:"มากาซาร์",man:"มันดิงกา",mas:"มาไซ",mde:"มาบา",mdf:"มอคชา",mdr:"มานดาร์",men:"เมนเด",mer:"เมรู",mfe:"มอริสเยน",mg:"มาลากาซี",mga:"ไอริชกลาง",mgh:"มากัววา-มีทโท",mgo:"เมตา",mh:"มาร์แชลลิส",mi:"เมารี",mic:"มิกแมก",min:"มีนังกาเบา",mk:"มาซิโดเนีย",ml:"มาลายาลัม",mn:"มองโกเลีย",mnc:"แมนจู",mni:"มณีปุระ",moh:"โมฮอว์ก",mos:"โมซี",mr:"มราฐี",mrj:"มารีตะวันตก",ms:"มาเลย์",mt:"มอลตา",mua:"มันดัง",mus:"ครีก",mwl:"มีรันดา",mwr:"มารวาฑี",mwv:"เม็นตาไว",my:"พม่า",mye:"มยีน",myv:"เอียร์ซยา",mzn:"มาซันดารานี",na:"นาอูรู",nan:"จีนมินหนาน",nap:"นาโปลี",naq:"นามา",nb:"นอร์เวย์บุคมอล",nd:"เอ็นเดเบเลเหนือ",nds:"เยอรมันต่ำ","nds-NL":"แซกซอนใต้",ne:"เนปาล","new":"เนวาร์",ng:"ดองกา",nia:"นีอัส",niu:"นีวเว",njo:"อ๋าวนากา",nl:"ดัตช์","nl-BE":"เฟลมิช",nmg:"กวาซิโอ",nn:"นอร์เวย์นีนอสก์",nnh:"จีมบูน",no:"นอร์เวย์",nog:"โนไก",non:"นอร์สโบราณ",nov:"โนเวียล",nqo:"เอ็นโก",nr:"เอ็นเดเบเลใต้",nso:"โซโทเหนือ",nus:"เนือร์",nv:"นาวาโฮ",nwc:"เนวาร์ดั้งเดิม",ny:"เนียนจา",nym:"เนียมเวซี",nyn:"เนียนโกเล",nyo:"นิโอโร",nzi:"นซิมา",oc:"อ็อกซิตัน",oj:"โอจิบวา",om:"โอโรโม",or:"โอดิยา",os:"ออสเซเตีย",osa:"โอซากี",ota:"ตุรกีออตโตมัน",pa:"ปัญจาบ",pag:"ปางาซีนัน",pal:"ปะห์ลาวี",pam:"ปัมปางา",pap:"ปาเปียเมนโต",pau:"ปาเลา",pcd:"ปิการ์",pcm:"พิดจิน",pdc:"เยอรมันเพนซิลเวเนีย",pdt:"เพลาท์ดิช",peo:"เปอร์เซียโบราณ",pfl:"เยอรมันพาลาทิเนต",phn:"ฟินิเชีย",pi:"บาลี",pl:"โปแลนด์",pms:"พีดมอนต์",pnt:"พอนติก",pon:"พอห์นเพ",prg:"ปรัสเซีย",pro:"โปรวองซาลโบราณ",ps:"พัชโต",pt:"โปรตุเกส","pt-BR":"โปรตุเกส - บราซิล","pt-PT":"โปรตุเกส - ยุโรป",qu:"เคชวา",quc:"กีเช",qug:"ควิชัวไฮแลนด์ชิมโบราโซ",raj:"ราชสถาน",rap:"ราปานู",rar:"ราโรทองกา",rgn:"โรมัณโญ",rif:"ริฟฟิอัน",rm:"โรแมนซ์",rn:"บุรุนดี",ro:"โรมาเนีย","ro-MD":"มอลโดวา",rof:"รอมโบ",rom:"โรมานี",root:"รูท",rtm:"โรทูมัน",ru:"รัสเซีย",rue:"รูซิน",rug:"โรเวียนา",rup:"อาโรมาเนียน",rw:"รวันดา",rwk:"รวา",sa:"สันสกฤต",sad:"ซันดาเว",sah:"ซาคา",sam:"อราเมอิกซามาเรีย",saq:"แซมบูรู",sas:"ซาซัก",sat:"สันตาลี",saz:"เสาราษฏร์",sba:"กัมเบ",sbp:"แซงกู",sc:"ซาร์เดญา",scn:"ซิซิลี",sco:"สกอตส์",sd:"สินธิ",sdc:"ซาร์ดิเนียซาสซารี",sdh:"เคอร์ดิชใต้",se:"ซามิเหนือ",see:"เซนิกา",seh:"เซนา",sei:"เซรี",sel:"เซลคุป",ses:"โคย์ราโบโรเซนนี",sg:"ซันโก",sga:"ไอริชโบราณ",sgs:"ซาโมจิเตียน",sh:"เซอร์โบ-โครเอเชีย",shi:"ทาเชลีห์ท",shn:"ไทใหญ่",shu:"อาหรับ-ชาด",si:"สิงหล",sid:"ซิดาโม",sk:"สโลวัก",sl:"สโลวีเนีย",sli:"ไซลีเซียตอนล่าง",sly:"เซลายาร์",sm:"ซามัว",sma:"ซามิใต้",smj:"ซามิลูเล",smn:"ซามิอีนารี",sms:"ซามิสคอลต์",sn:"โชนา",snk:"โซนีนเก",so:"โซมาลี",sog:"ซอกดีน",sq:"แอลเบเนีย",sr:"เซอร์เบีย",srn:"ซูรินาเม",srr:"เซแรร์",ss:"สวาติ",ssy:"ซาโฮ",st:"โซโทใต้",stq:"ฟรีเซียนซัทเธอร์แลนด์",su:"ซุนดา",suk:"ซูคูมา",sus:"ซูซู",sux:"ซูเมอ",sv:"สวีเดน",sw:"สวาฮีลี","sw-CD":"สวาฮีลี - คองโก",swb:"โคเมอเรียน",syc:"ซีเรียแบบดั้งเดิม",syr:"ซีเรีย",szl:"ไซลีเซีย",ta:"ทมิฬ",tcy:"ตูลู",te:"เตลูกู",tem:"ทิมเน",teo:"เตโซ",ter:"เทเรโน",tet:"เตตุม",tg:"ทาจิก",th:"ไทย",ti:"ติกริญญา",tig:"ตีเกร",tiv:"ทิฟ",tk:"เติร์กเมน",tkl:"โตเกเลา",tkr:"แซคเซอร์",tl:"ตากาล็อก",tlh:"คลิงงอน",tli:"ทลิงกิต",tly:"ทาลิช",tmh:"ทามาเชก",tn:"บอตสวานา",to:"ตองกา",tog:"ไนอะซาตองกา",tpi:"ท็อกพิซิน",tr:"ตุรกี",tru:"ตูโรโย",trv:"ทาโรโก",ts:"ซิตซองกา",tsd:"ซาโคเนีย",tsi:"ซิมชีแอน",tt:"ตาตาร์",ttt:"ตัตมุสลิม",tum:"ทุมบูกา",tvl:"ตูวาลู",tw:"ทวิ",twq:"ตัสซาวัค",ty:"ตาฮิตี",tyv:"ตูวา",tzm:"ทามาไซต์แอตลาสกลาง",udm:"อุดมูร์ต",ug:"อุยกูร์",uga:"ยูการิต",uk:"ยูเครน",umb:"อุมบุนดู",ur:"อูรดู",uz:"อุซเบก",vai:"ไว",ve:"เวนดา",vec:"เวเนโต้",vep:"เวปส์",vi:"เวียดนาม",vls:"เฟลมิชตะวันตก",vmf:"เมน-ฟรานโกเนีย",vo:"โวลาพึค",vot:"โวทิก",vro:"โวโร",vun:"วุนจู",wa:"วาโลนี",wae:"วัลเซอร์",wal:"วาลาโม",war:"วาเรย์",was:"วาโช",wbp:"วอล์เพอร์รี",wo:"โวลอฟ",wuu:"จีนอู๋",xal:"คัลมืยค์",xh:"คะห์โอซา",xmf:"เมเกรเลีย",xog:"โซกา",yao:"เย้า",yap:"ยัป",yav:"แยงเบน",ybb:"เยมบา",yi:"ยิดดิช",yo:"โยรูบา",yrl:"เหงงกาตุ",yue:"กวางตุ้ง",za:"จ้วง",zap:"ซาโปเตก",zbl:"บลิสซิมโบลส์",zea:"เซแลนด์",zen:"เซนากา",zgh:"ทามาไซต์โมร็อกโกมาตรฐาน",zh:"จีน","zh-Hans":"จีน (ตัวย่อ)","zh-Hant":"จีน (ตัวเต็ม)",zu:"ซูลู",zun:"ซูนิ",zza:"ซาซา"},scriptNames:{Cyrl:"ซีริลลิก",Latn:"ละติน",Arab:"อาหรับ",Guru:"กูร์มูคี",Tfng:"ทิฟินาก",Vaii:"ไว",Hans:"ตัวย่อ",Hant:"ตัวเต็ม"}},tl:{rtl:false,languageNames:{},scriptNames:{}},tr:{rtl:false,languageNames:{aa:"Afar",ab:"Abhazca",ace:"Açece",ach:"Acoli",ada:"Adangme",ady:"Adigece",ae:"Avestçe",aeb:"Tunus Arapçası",af:"Afrikaanca",afh:"Afrihili",agq:"Aghem",ain:"Ayni Dili",ak:"Akan",akk:"Akad Dili",akz:"Alabamaca",ale:"Aleut dili",aln:"Gheg Arnavutçası",alt:"Güney Altayca",am:"Amharca",an:"Aragonca",ang:"Eski İngilizce",anp:"Angika",ar:"Arapça","ar-001":"Modern Standart Arapça",arc:"Aramice",arn:"Mapuçe dili",aro:"Araona",arp:"Arapaho Dili",arq:"Cezayir Arapçası",ars:"Necd Arapçası",arw:"Arawak Dili",ary:"Fas Arapçası",arz:"Mısır Arapçası",as:"Assamca",asa:"Asu",ase:"Amerikan İşaret Dili",ast:"Asturyasça",av:"Avar Dili",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Azerbaycan dili","az-Arab":"Güney Azerice",ba:"Başkırtça",bal:"Beluçça",ban:"Bali dili",bar:"Bavyera dili",bas:"Basa Dili",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Belarusça",bej:"Beja dili",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgarca",bgn:"Batı Balochi",bho:"Arayanice",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar Dili",bkm:"Kom",bla:"Karaayak dili",bm:"Bambara",bn:"Bengalce",bo:"Tibetçe",bpy:"Bishnupriya",bqi:"Bahtiyari",br:"Bretonca",bra:"Braj",brh:"Brohice",brx:"Bodo",bs:"Boşnakça",bss:"Akoose",bua:"Buryatça",bug:"Bugis",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Katalanca",cad:"Kado dili",car:"Carib",cay:"Kayuga dili",cch:"Atsam",ccp:"Chakma",ce:"Çeçence",ceb:"Sebuano dili",cgg:"Kiga",ch:"Çamorro dili",chb:"Çibça dili",chg:"Çağatayca",chk:"Chuukese",chm:"Mari dili",chn:"Çinuk dili",cho:"Çoktav dili",chp:"Çipevya dili",chr:"Çerokice",chy:"Şayence",ckb:"Orta Kürtçe",co:"Korsikaca",cop:"Kıptice",cps:"Capiznon",cr:"Krice",crh:"Kırım Türkçesi",crs:"Seselwa Kreole Fransızcası",cs:"Çekçe",csb:"Kashubian",cu:"Kilise Slavcası",cv:"Çuvaşça",cy:"Galce",da:"Danca",dak:"Dakotaca",dar:"Dargince",dav:"Taita",de:"Almanca","de-AT":"Avusturya Almancası","de-CH":"İsviçre Yüksek Almancası",del:"Delaware",den:"Slavey dili",dgr:"Dogrib",din:"Dinka dili",dje:"Zarma",doi:"Dogri",dsb:"Aşağı Sorbça",dtp:"Orta Kadazan",dua:"Duala",dum:"Ortaçağ Felemenkçesi",dv:"Divehi dili",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emilia Dili",egy:"Eski Mısır Dili",eka:"Ekajuk",el:"Yunanca",elx:"Elam",en:"İngilizce","en-AU":"Avustralya İngilizcesi","en-CA":"Kanada İngilizcesi","en-GB":"İngiliz İngilizcesi","en-US":"Amerikan İngilizcesi",enm:"Ortaçağ İngilizcesi",eo:"Esperanto",es:"İspanyolca","es-419":"Latin Amerika İspanyolcası","es-ES":"Avrupa İspanyolcası","es-MX":"Meksika İspanyolcası",esu:"Merkezi Yupikçe",et:"Estonca",eu:"Baskça",ewo:"Ewondo",ext:"Ekstremadura Dili",fa:"Farsça",fan:"Fang",fat:"Fanti",ff:"Fula dili",fi:"Fince",fil:"Filipince",fit:"Tornedalin Fincesi",fj:"Fiji dili",fo:"Faroe dili",fon:"Fon",fr:"Fransızca","fr-CA":"Kanada Fransızcası","fr-CH":"İsviçre Fransızcası",frc:"Cajun Fransızcası",frm:"Ortaçağ Fransızcası",fro:"Eski Fransızca",frp:"Arpitanca",frr:"Kuzey Frizce",frs:"Doğu Frizcesi",fur:"Friuli dili",fy:"Batı Frizcesi",ga:"İrlandaca",gaa:"Ga dili",gag:"Gagavuzca",gan:"Gan Çincesi",gay:"Gayo dili",gba:"Gbaya",gbz:"Zerdüşt Daricesi",gd:"İskoç Gaelcesi",gez:"Geez",gil:"Kiribatice",gl:"Galiçyaca",glk:"Gilanice",gmh:"Ortaçağ Yüksek Almancası",gn:"Guarani dili",goh:"Eski Yüksek Almanca",gom:"Goa Konkanicesi",gon:"Gondi dili",gor:"Gorontalo dili",got:"Gotça",grb:"Grebo dili",grc:"Antik Yunanca",gsw:"İsviçre Almancası",gu:"Güceratça",guc:"Wayuu dili",gur:"Frafra",guz:"Gusii",gv:"Man dili",gwi:"Guçince",ha:"Hausa dili",hai:"Haydaca",hak:"Hakka Çincesi",haw:"Hawaii dili",he:"İbranice",hi:"Hintçe",hif:"Fiji Hintçesi",hil:"Hiligaynon dili",hit:"Hititçe",hmn:"Hmong",ho:"Hiri Motu",hr:"Hırvatça",hsb:"Yukarı Sorbça",hsn:"Xiang Çincesi",ht:"Haiti Kreyolu",hu:"Macarca",hup:"Hupaca",hy:"Ermenice",hz:"Herero dili",ia:"İnterlingua",iba:"Iban",ibb:"İbibio dili",id:"Endonezce",ie:"Interlingue",ig:"İbo dili",ii:"Sichuan Yi",ik:"İnyupikçe",ilo:"Iloko",inh:"İnguşça",io:"Ido",is:"İzlandaca",it:"İtalyanca",iu:"İnuktitut dili",izh:"İngriya Dili",ja:"Japonca",jam:"Jamaika Patois Dili",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Yahudi Farsçası",jrb:"Yahudi Arapçası",jut:"Yutland Dili",jv:"Cava dili",ka:"Gürcüce",kaa:"Karakalpakça",kab:"Kabiliyece",kac:"Kaçin dili",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardeyce",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongo dili",kgp:"Kaingang",kha:"Khasi dili",kho:"Hotanca",khq:"Koyra Chiini",khw:"Çitral Dili",ki:"Kikuyu",kiu:"Kırmançça",kj:"Kuanyama",kk:"Kazakça",kkj:"Kako",kl:"Grönland dili",kln:"Kalenjin",km:"Khmer dili",kmb:"Kimbundu",kn:"Kannada dili",ko:"Korece",koi:"Komi-Permyak",kok:"Konkani dili",kos:"Kosraean",kpe:"Kpelle dili",kr:"Kanuri dili",krc:"Karaçay-Balkarca",kri:"Krio",krj:"Kinaray-a",krl:"Karelyaca",kru:"Kurukh dili",ks:"Keşmir dili",ksb:"Şambala",ksf:"Bafia",ksh:"Köln lehçesi",ku:"Kürtçe",kum:"Kumukça",kut:"Kutenai dili",kv:"Komi",kw:"Kernevekçe",ky:"Kırgızca",la:"Latince",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba dili",lb:"Lüksemburgca",lez:"Lezgice",lfn:"Lingua Franca Nova",lg:"Ganda",li:"Limburgca",lij:"Ligurca",liv:"Livonca",lkt:"Lakotaca",lmo:"Lombardça",ln:"Lingala",lo:"Lao dili",lol:"Mongo",lou:"Louisiana Kreolcesi",loz:"Lozi",lrc:"Kuzey Luri",lt:"Litvanca",ltg:"Latgalian",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Lushai",luy:"Luyia",lv:"Letonca",lzh:"Edebi Çince",lzz:"Lazca",mad:"Madura Dili",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",man:"Mandingo",mas:"Masai",mde:"Maba",mdf:"Mokşa dili",mdr:"Mandar",men:"Mende dili",mer:"Meru",mfe:"Morisyen",mg:"Malgaşça",mga:"Ortaçağ İrlandacası",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marshall Adaları dili",mi:"Maori dili",mic:"Micmac",min:"Minangkabau",mk:"Makedonca",ml:"Malayalam dili",mn:"Moğolca",mnc:"Mançurya dili",mni:"Manipuri dili",moh:"Mohavk dili",mos:"Mossi",mr:"Marathi dili",mrj:"Ova Çirmişçesi",ms:"Malayca",mt:"Maltaca",mua:"Mundang",mus:"Krikçe",mwl:"Miranda dili",mwr:"Marvari",mwv:"Mentawai",my:"Birman dili",mye:"Myene",myv:"Erzya",mzn:"Mazenderanca",na:"Nauru dili",nan:"Min Nan Çincesi",nap:"Napolice",naq:"Nama",nb:"Norveççe Bokmål",nd:"Kuzey Ndebele",nds:"Aşağı Almanca","nds-NL":"Aşağı Saksonca",ne:"Nepalce","new":"Nevari",ng:"Ndonga",nia:"Nias",niu:"Niue dili",njo:"Ao Naga",nl:"Felemenkçe","nl-BE":"Flamanca",nmg:"Kwasio",nn:"Norveççe Nynorsk",nnh:"Ngiemboon",no:"Norveççe",nog:"Nogayca",non:"Eski Nors dili",nov:"Novial",nqo:"N’Ko",nr:"Güney Ndebele",nso:"Kuzey Sotho dili",nus:"Nuer",nv:"Navaho dili",nwc:"Klasik Nevari",ny:"Nyanja",nym:"Nyamvezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima dili",oc:"Oksitan dili",oj:"Ojibva dili",om:"Oromo dili",or:"Oriya Dili",os:"Osetçe",osa:"Osage",ota:"Osmanlı Türkçesi",pa:"Pencapça",pag:"Pangasinan dili",pal:"Pehlevi Dili",pam:"Pampanga",pap:"Papiamento",pau:"Palau dili",pcd:"Picard Dili",pcm:"Nijerya Pidgin dili",pdc:"Pensilvanya Almancası",pdt:"Plautdietsch",peo:"Eski Farsça",pfl:"Palatin Almancası",phn:"Fenike dili",pi:"Pali",pl:"Lehçe",pms:"Piyemontece",pnt:"Kuzeybatı Kafkasya",pon:"Pohnpeian",prg:"Prusyaca",pro:"Eski Provensal",ps:"Peştuca",pt:"Portekizce","pt-BR":"Brezilya Portekizcesi","pt-PT":"Avrupa Portekizcesi",qu:"Keçuva dili",quc:"Kiçece",qug:"Chimborazo Highland Quichua",raj:"Rajasthani",rap:"Rapanui dili",rar:"Rarotongan",rgn:"Romanyolca",rif:"Rif Berbericesi",rm:"Romanşça",rn:"Kirundi",ro:"Rumence","ro-MD":"Moldovaca",rof:"Rombo",rom:"Romanca",root:"Köken",rtm:"Rotuman",ru:"Rusça",rue:"Rusince",rug:"Roviana",rup:"Ulahça",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandave",sah:"Yakutça",sam:"Samarit Aramcası",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardunya dili",scn:"Sicilyaca",sco:"İskoçça",sd:"Sindhi dili",sdc:"Sassari Sarduca",sdh:"Güney Kürtçesi",se:"Kuzey Laponcası",see:"Seneca dili",seh:"Sena",sei:"Seri",sel:"Selkup dili",ses:"Koyraboro Senni",sg:"Sango",sga:"Eski İrlandaca",sgs:"Samogitçe",sh:"Sırp-Hırvat Dili",shi:"Taşelit",shn:"Shan dili",shu:"Çad Arapçası",si:"Sinhali dili",sid:"Sidamo dili",sk:"Slovakça",sl:"Slovence",sli:"Aşağı Silezyaca",sly:"Selayar",sm:"Samoa dili",sma:"Güney Laponcası",smj:"Lule Laponcası",smn:"İnari Laponcası",sms:"Skolt Laponcası",sn:"Şona dili",snk:"Soninke",so:"Somalice",sog:"Sogdiana Dili",sq:"Arnavutça",sr:"Sırpça",srn:"Sranan Tongo",srr:"Serer dili",ss:"Sisvati",ssy:"Saho",st:"Güney Sotho dili",stq:"Saterland Frizcesi",su:"Sunda dili",suk:"Sukuma dili",sus:"Susu",sux:"Sümerce",sv:"İsveççe",sw:"Svahili dili","sw-CD":"Kongo Svahili",swb:"Komorca",syc:"Klasik Süryanice",syr:"Süryanice",szl:"Silezyaca",ta:"Tamilce",tcy:"Tuluca",te:"Telugu dili",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetum",tg:"Tacikçe",th:"Tayca",ti:"Tigrinya dili",tig:"Tigre",tiv:"Tiv",tk:"Türkmence",tkl:"Tokelau dili",tkr:"Sahurca",tl:"Tagalogca",tlh:"Klingonca",tli:"Tlingit",tly:"Talışça",tmh:"Tamaşek",tn:"Setsvana",to:"Tonga dili",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Türkçe",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonca",tsi:"Tsimshian",tt:"Tatarca",ttt:"Tatça",tum:"Tumbuka",tvl:"Tuvalyanca",tw:"Tvi",twq:"Tasawaq",ty:"Tahiti dili",tyv:"Tuvaca",tzm:"Orta Atlas Tamazigti",udm:"Udmurtça",ug:"Uygurca",uga:"Ugarit dili",uk:"Ukraynaca",umb:"Umbundu",ur:"Urduca",uz:"Özbekçe",vai:"Vai",ve:"Venda dili",vec:"Venedikçe",vep:"Veps dili",vi:"Vietnamca",vls:"Batı Flamanca",vmf:"Main Frankonya Dili",vo:"Volapük",vot:"Votça",vro:"Võro",vun:"Vunjo",wa:"Valonca",wae:"Walser",wal:"Valamo",war:"Varay",was:"Vaşo",wbp:"Warlpiri",wo:"Volofça",wuu:"Wu Çincesi",xal:"Kalmıkça",xh:"Zosa dili",xmf:"Megrelce",xog:"Soga",yao:"Yao",yap:"Yapça",yav:"Yangben",ybb:"Yemba",yi:"Yidiş",yo:"Yorubaca",yrl:"Nheengatu",yue:"Kantonca",za:"Zhuangca",zap:"Zapotek dili",zbl:"Blis Sembolleri",zea:"Zelandaca",zen:"Zenaga dili",zgh:"Standart Fas Tamazigti",zh:"Çince","zh-Hans":"Basitleştirilmiş Çince (Mandarin)","zh-Hant":"Geleneksel Çince (Mandarin)",zu:"Zuluca",zun:"Zunice",zza:"Zazaca"},scriptNames:{Cyrl:"Kiril",Latn:"Latin",Arab:"Arap",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Basitleştirilmiş",Hant:"Geleneksel"}},uk:{rtl:false,languageNames:{aa:"афарська",ab:"абхазька",ace:"ачехська",ach:"ачолі",ada:"адангме",ady:"адигейська",ae:"авестійська",af:"африкаанс",afh:"африхілі",agq:"агем",ain:"айнська",ak:"акан",akk:"аккадська",akz:"алабама",ale:"алеутська",alt:"південноалтайська",am:"амхарська",an:"арагонська",ang:"давньоанглійська",anp:"ангіка",ar:"арабська","ar-001":"сучасна стандартна арабська",arc:"арамейська",arn:"арауканська",aro:"араона",arp:"арапахо",arq:"алжирська арабська",ars:"надждійська арабська",arw:"аравакська",as:"асамська",asa:"асу",ase:"американська мова рухів",ast:"астурська",av:"аварська",awa:"авадхі",ay:"аймара",az:"азербайджанська","az-Arab":"південноазербайджанська",ba:"башкирська",bal:"балучі",ban:"балійська",bar:"баеріш",bas:"баса",bax:"бамум",bbc:"батак тоба",bbj:"гомала",be:"білоруська",bej:"беджа",bem:"бемба",bew:"бетаві",bez:"бена",bfd:"бафут",bfq:"бадага",bg:"болгарська",bgn:"східнобелуджійська",bho:"бходжпурі",bi:"біслама",bik:"бікольська",bin:"біні",bjn:"банджарська",bkm:"ком",bla:"сіксіка",bm:"бамбара",bn:"банґла",bo:"тибетська",bqi:"бахтіарі",br:"бретонська",bra:"брадж",brx:"бодо",bs:"боснійська",bss:"акус",bua:"бурятська",bug:"бугійська",bum:"булу",byn:"блін",byv:"медумба",ca:"каталонська",cad:"каддо",car:"карібська",cay:"кайюга",cch:"атсам",ccp:"чакма",ce:"чеченська",ceb:"себуанська",cgg:"кіга",ch:"чаморро",chb:"чібча",chg:"чагатайська",chk:"чуукська",chm:"марійська",chn:"чинук жаргон",cho:"чокто",chp:"чіпевʼян",chr:"черокі",chy:"чейєнн",ckb:"центральнокурдська",co:"корсиканська",cop:"коптська",cr:"крі",crh:"кримськотатарська",crs:"сейшельська креольська",cs:"чеська",csb:"кашубська",cu:"церковнословʼянська",cv:"чуваська",cy:"валлійська",da:"данська",dak:"дакота",dar:"даргінська",dav:"таіта",de:"німецька","de-AT":"австрійська німецька","de-CH":"верхньонімецька (Швейцарія)",del:"делаварська",den:"слейв",dgr:"догрибська",din:"дінка",dje:"джерма",doi:"догрі",dsb:"нижньолужицька",dua:"дуала",dum:"середньонідерландська",dv:"дівехі",dyo:"дьола-фоні",dyu:"діула",dz:"дзонг-ке",dzg:"дазага",ebu:"ембу",ee:"еве",efi:"ефік",egy:"давньоєгипетська",eka:"екаджук",el:"грецька",elx:"еламська",en:"англійська","en-AU":"австралійська англійська","en-CA":"канадська англійська","en-GB":"британська англійська","en-US":"англійська (США)",enm:"середньоанглійська",eo:"есперанто",es:"іспанська","es-419":"латиноамериканська іспанська","es-ES":"іспанська (Європа)","es-MX":"мексиканська іспанська",et:"естонська",eu:"баскська",ewo:"евондо",fa:"перська",fan:"фанг",fat:"фанті",ff:"фула",fi:"фінська",fil:"філіппінська",fj:"фіджі",fo:"фарерська",fon:"фон",fr:"французька","fr-CA":"канадська французька","fr-CH":"швейцарська французька",frc:"кажунська французька",frm:"середньофранцузька",fro:"давньофранцузька",frp:"арпітанська",frr:"фризька північна",frs:"фризька східна",fur:"фріульська",fy:"західнофризька",ga:"ірландська",gaa:"га",gag:"гагаузька",gan:"ґань",gay:"гайо",gba:"гбайя",gd:"гаельська",gez:"гєез",gil:"гільбертська",gl:"галісійська",gmh:"середньоверхньонімецька",gn:"гуарані",goh:"давньоверхньонімецька",gon:"гонді",gor:"горонтало",got:"готська",grb:"гребо",grc:"давньогрецька",gsw:"німецька (Швейцарія)",gu:"гуджараті",guz:"гусії",gv:"менкська",gwi:"кучін",ha:"хауса",hai:"хайда",hak:"хаккаська",haw:"гавайська",he:"іврит",hi:"гінді",hil:"хілігайнон",hit:"хітіті",hmn:"хмонг",ho:"хірі-моту",hr:"хорватська",hsb:"верхньолужицька",hsn:"сянська китайська",ht:"гаїтянська",hu:"угорська",hup:"хупа",hy:"вірменська",hz:"гереро",ia:"інтерлінгва",iba:"ібанська",ibb:"ібібіо",id:"індонезійська",ie:"інтерлінгве",ig:"ігбо",ii:"сичуань",ik:"інупіак",ilo:"ілоканська",inh:"інгуська",io:"ідо",is:"ісландська",it:"італійська",iu:"інуктітут",ja:"японська",jbo:"ложбан",jgo:"нгомба",jmc:"мачаме",jpr:"юдео-перська",jrb:"юдео-арабська",jv:"яванська",ka:"грузинська",kaa:"каракалпацька",kab:"кабільська",kac:"качін",kaj:"йю",kam:"камба",kaw:"каві",kbd:"кабардинська",kbl:"канембу",kcg:"тіап",kde:"маконде",kea:"кабувердіану",kfo:"коро",kg:"конґолезька",kha:"кхасі",kho:"хотаносакська",khq:"койра чіїні",ki:"кікуйю",kj:"кунама",kk:"казахська",kkj:"како",kl:"калааллісут",kln:"календжин",km:"кхмерська",kmb:"кімбунду",kn:"каннада",ko:"корейська",koi:"комі-перм’яцька",kok:"конкані",kos:"косрае",kpe:"кпеллє",kr:"канурі",krc:"карачаєво-балкарська",krl:"карельська",kru:"курукх",ks:"кашмірська",ksb:"шамбала",ksf:"бафіа",ksh:"колоніан",ku:"курдська",kum:"кумицька",kut:"кутенаї",kv:"комі",kw:"корнійська",ky:"киргизька",la:"латинська",lad:"ладіно",lag:"лангі",lah:"ланда",lam:"ламба",lb:"люксембурзька",lez:"лезгінська",lg:"ганда",li:"лімбургійська",lkt:"лакота",ln:"лінгала",lo:"лаоська",lol:"монго",lou:"луїзіанська креольська",loz:"лозі",lrc:"північнолурська",lt:"литовська",lu:"луба-катанга",lua:"луба-лулуа",lui:"луїсеньо",lun:"лунда",luo:"луо",lus:"мізо",luy:"луйя",lv:"латвійська",mad:"мадурська",maf:"мафа",mag:"магадхі",mai:"майтхілі",mak:"макасарська",man:"мандінго",mas:"масаї",mde:"маба",mdf:"мокша",mdr:"мандарська",men:"менде",mer:"меру",mfe:"маврикійська креольська",mg:"малагасійська",mga:"середньоірландська",mgh:"макува-меето",mgo:"мета",mh:"маршалльська",mi:"маорі",mic:"мікмак",min:"мінангкабау",mk:"македонська",ml:"малаялам",mn:"монгольська",mnc:"манчжурська",mni:"маніпурі",moh:"магавк",mos:"моссі",mr:"маратхі",ms:"малайська",mt:"мальтійська",mua:"мунданг",mus:"крік",mwl:"мірандська",mwr:"марварі",my:"бірманська",mye:"миін",myv:"ерзя",mzn:"мазандеранська",na:"науру",nan:"південноміньська",nap:"неаполітанська",naq:"нама",nb:"норвезька (букмол)",nd:"північна ндебеле",nds:"нижньонімецька","nds-NL":"нижньосаксонська",ne:"непальська","new":"неварі",ng:"ндонга",nia:"ніаська",niu:"ніуе",njo:"ао нага",nl:"нідерландська","nl-BE":"фламандська",nmg:"квазіо",nn:"норвезька (нюношк)",nnh:"нгємбун",no:"норвезька",nog:"ногайська",non:"давньонорвезька",nqo:"нко",nr:"ндебелє південна",nso:"північна сото",nus:"нуер",nv:"навахо",nwc:"неварі класична",ny:"ньянджа",nym:"ньямвезі",nyn:"ньянколе",nyo:"ньоро",nzi:"нзіма",oc:"окситанська",oj:"оджібва",om:"оромо",or:"одія",os:"осетинська",osa:"осейдж",ota:"османська",pa:"панджабі",pag:"пангасінанська",pal:"пехлеві",pam:"пампанга",pap:"папʼяменто",pau:"палауанська",pcm:"нігерійсько-креольська",peo:"давньоперська",phn:"фінікійсько-пунічна",pi:"палі",pl:"польська",pon:"понапе",prg:"пруська",pro:"давньопровансальська",ps:"пушту",pt:"портуґальська","pt-BR":"португальська (Бразилія)","pt-PT":"європейська портуґальська",qu:"кечуа",quc:"кіче",raj:"раджастхані",rap:"рапануї",rar:"раротонга",rm:"ретороманська",rn:"рунді",ro:"румунська","ro-MD":"молдавська",rof:"ромбо",rom:"циганська",root:"коренева",ru:"російська",rup:"арумунська",rw:"кіньяруанда",rwk:"рва",sa:"санскрит",sad:"сандаве",sah:"якутська",sam:"самаритянська арамейська",saq:"самбуру",sas:"сасакська",sat:"сантальська",sba:"нгамбай",sbp:"сангу",sc:"сардинська",scn:"сицилійська",sco:"шотландська",sd:"сіндхі",sdh:"південнокурдська",se:"північносаамська",see:"сенека",seh:"сена",sel:"селькупська",ses:"койраборо сені",sg:"санго",sga:"давньоірландська",sh:"сербсько-хорватська",shi:"тачеліт",shn:"шанська",shu:"чадійська арабська",si:"сингальська",sid:"сідамо",sk:"словацька",sl:"словенська",sm:"самоанська",sma:"південносаамська",smj:"саамська луле",smn:"саамська інарі",sms:"скольт-саамська",sn:"шона",snk:"сонінке",so:"сомалі",sog:"согдійська",sq:"албанська",sr:"сербська",srn:"сранан тонго",srr:"серер",ss:"сісваті",ssy:"сахо",st:"сото південна",su:"сунданська",suk:"сукума",sus:"сусу",sux:"шумерська",sv:"шведська",sw:"суахілі","sw-CD":"суахілі (Конго)",swb:"коморська",syc:"сирійська класична",syr:"сирійська",ta:"тамільська",te:"телугу",tem:"темне",teo:"тесо",ter:"терено",tet:"тетум",tg:"таджицька",th:"тайська",ti:"тигринья",tig:"тигре",tiv:"тів",tk:"туркменська",tkl:"токелау",tl:"тагальська",tlh:"клінгонська",tli:"тлінгіт",tmh:"тамашек",tn:"тсвана",to:"тонґанська",tog:"ньяса тонга",tpi:"ток-пісін",tr:"турецька",trv:"тароко",ts:"тсонга",tsi:"цимшиан",tt:"татарська",tum:"тумбука",tvl:"тувалу",tw:"тві",twq:"тасавак",ty:"таїтянська",tyv:"тувинська",tzm:"центральноатласька тамазігт",udm:"удмуртська",ug:"уйгурська",uga:"угаритська",uk:"українська",umb:"умбунду",ur:"урду",uz:"узбецька",vai:"ваї",ve:"венда",vi:"вʼєтнамська",vo:"волапʼюк",vot:"водська",vun:"вуньо",wa:"валлонська",wae:"валзерська",wal:"волайтта",war:"варай",was:"вашо",wbp:"валпірі",wo:"волоф",wuu:"уська китайська",xal:"калмицька",xh:"кхоса",xog:"сога",yao:"яо",yap:"яп",yav:"янгбен",ybb:"ємба",yi:"їдиш",yo:"йоруба",yue:"кантонська",za:"чжуан",zap:"сапотекська",zbl:"блісса мова",zen:"зенага",zgh:"стандартна марокканська берберська",zh:"китайська","zh-Hans":"китайська мандаринська (спрощене письмо)","zh-Hant":"китайська мандаринська (традиційне письмо)",zu:"зулуська",zun:"зуньї",zza:"зазакі"},scriptNames:{Cyrl:"кирилиця",Latn:"латиниця",Arab:"арабиця",Guru:"гурмухі",Tfng:"тифінаг",Vaii:"ваї",Hans:"спрощена",Hant:"традиційна"}},ur:{rtl:true,languageNames:{aa:"افار",ab:"ابقازیان",ace:"اچائینیز",ach:"اکولی",ada:"ادانگمے",ady:"ادیگھے",af:"افریقی",agq:"اغم",ain:"اینو",ak:"اکان",ale:"الیوت",alt:"جنوبی الٹائی",am:"امہاری",an:"اراگونیز",anp:"انگیکا",ar:"عربی","ar-001":"ماڈرن اسٹینڈرڈ عربی",arn:"ماپوچے",arp:"اراپاہو",as:"آسامی",asa:"آسو",ast:"اسٹوریائی",av:"اواری",awa:"اوادھی",ay:"ایمارا",az:"آذربائیجانی","az-Arab":"آزربائیجانی (عربی)",ba:"باشکیر",ban:"بالینیز",bas:"باسا",be:"بیلاروسی",bem:"بیمبا",bez:"بینا",bg:"بلغاری",bgn:"مغربی بلوچی",bho:"بھوجپوری",bi:"بسلاما",bin:"بینی",bla:"سکسیکا",bm:"بمبارا",bn:"بنگلہ",bo:"تبتی",br:"بریٹن",brx:"بوڈو",bs:"بوسنیائی",bug:"بگینیز",byn:"بلین",ca:"کیٹالان",ccp:"چکمہ",ce:"چیچن",ceb:"سیبوآنو",cgg:"چیگا",ch:"چیمارو",chk:"چوکیز",chm:"ماری",cho:"چاکٹاؤ",chr:"چیروکی",chy:"چینّے",ckb:"سینٹرل کردش",co:"کوراسیکن",crs:"سیسلوا کریولے فرانسیسی",cs:"چیک",cu:"چرچ سلاوک",cv:"چوواش",cy:"ویلش",da:"ڈینش",dak:"ڈاکوٹا",dar:"درگوا",dav:"تائتا",de:"جرمن","de-AT":"آسٹریائی جرمن","de-CH":"سوئس ہائی جرمن",dgr:"دوگریب",dje:"زرما",dsb:"ذیلی سربیائی",dua:"دوالا",dv:"ڈیویہی",dyo:"جولا فونيا",dz:"ژونگکھا",dzg:"دزاگا",ebu:"امبو",ee:"ایو",efi:"ایفِک",eka:"ایکاجوی",el:"یونانی",en:"انگریزی","en-AU":"آسٹریلیائی انگریزی","en-CA":"کینیڈین انگریزی","en-GB":"برطانوی انگریزی","en-US":"امریکی انگریزی",eo:"ایسپرانٹو",es:"ہسپانوی","es-419":"لاطینی امریکی ہسپانوی","es-ES":"یورپی ہسپانوی","es-MX":"میکسیکن ہسپانوی",et:"اسٹونین",eu:"باسکی",ewo:"ایوانڈو",fa:"فارسی",ff:"فولہ",fi:"فینیش",fil:"فلیپینو",fj:"فجی",fo:"فیروئیز",fon:"فون",fr:"فرانسیسی","fr-CA":"کینیڈین فرانسیسی","fr-CH":"سوئس فرینچ",frc:"کاجن فرانسیسی",fur:"فریولیائی",fy:"مغربی فریسیئن",ga:"آئیرِش",gaa:"گا",gag:"غاغاوز",gd:"سکاٹش گیلک",gez:"گیز",gil:"گلبرتیز",gl:"گالیشیائی",gn:"گُارانی",gor:"گورانٹالو",gsw:"سوئس جرمن",gu:"گجراتی",guz:"گسی",gv:"مینکس",gwi:"گوئچ ان",ha:"ہؤسا",haw:"ہوائی",he:"عبرانی",hi:"ہندی",hil:"ہالیگینون",hmn:"ہمانگ",hr:"کراتی",hsb:"اپر سربیائی",ht:"ہیتی",hu:"ہنگیرین",hup:"ہیوپا",hy:"آرمینیائی",hz:"ہریرو",ia:"بین لسانیات",iba:"ایبان",ibb:"ابی بیو",id:"انڈونیثیائی",ig:"اِگبو",ii:"سچوان ای",ilo:"ایلوکو",inh:"انگوش",io:"ایڈو",is:"آئس لینڈک",it:"اطالوی",iu:"اینُکٹیٹٹ",ja:"جاپانی",jbo:"لوجبان",jgo:"نگومبا",jmc:"ماشیم",jv:"جاوی",ka:"جارجیائی",kab:"قبائلی",kac:"کاچن",kaj:"جے جو",kam:"کامبا",kbd:"کبارڈین",kcg:"تیاپ",kde:"ماکونده",kea:"کابويرديانو",kfo:"کورو",kg:"کانگو",kha:"کھاسی",khq:"کويرا شيني",ki:"کیکویو",kj:"کونیاما",kk:"قزاخ",kkj:"کاکو",kl:"کالاليست",kln:"کالينجين",km:"خمیر",kmb:"کیمبونڈو",kn:"کنّاڈا",ko:"کوریائی",koi:"کومی پرمیاک",kok:"کونکنی",kpe:"کیپیلّے",kr:"کنوری",krc:"کراچے بالکر",krl:"کیرلین",kru:"کوروکھ",ks:"کشمیری",ksb:"شامبالا",ksf:"بافيا",ksh:"کولوگنیائی",ku:"کردش",kum:"کومیک",kv:"کومی",kw:"کورنش",ky:"کرغیزی",la:"لاطینی",lad:"لیڈینو",lag:"لانگی",lb:"لکسمبرگیش",lez:"لیزگیان",lg:"گینڈا",li:"لیمبرگش",lkt:"لاکوٹا",ln:"لِنگَلا",lo:"لاؤ",lou:"لوزیانا کریول",loz:"لوزی",lrc:"شمالی لری",lt:"لیتھوینین",lu:"لبا-کاتانجا",lua:"لیوبا لولوآ",lun:"لونڈا",luo:"لو",lus:"میزو",luy:"لویا",lv:"لیٹوین",mad:"مدورسی",mag:"مگاہی",mai:"میتھیلی",mak:"مکاسر",mas:"مسائی",mdf:"موکشا",men:"میندے",mer:"میرو",mfe:"موریسیین",mg:"ملاگاسی",mgh:"ماخاوا-ميتو",mgo:"میٹا",mh:"مارشلیز",mi:"ماؤری",mic:"مکمیک",min:"منانگکباؤ",mk:"مقدونیائی",ml:"مالایالم",mn:"منگولین",mni:"منی پوری",moh:"موہاک",mos:"موسی",mr:"مراٹهی",ms:"مالے",mt:"مالٹی",mua:"منڈانگ",mus:"کریک",mwl:"میرانڈیز",my:"برمی",myv:"ارزیا",mzn:"مزندرانی",na:"ناؤرو",nap:"نیاپولیٹن",naq:"ناما",nb:"نارویجین بوکمل",nd:"شمالی دبیل",nds:"ادنی جرمن","nds-NL":"ادنی سیکسن",ne:"نیپالی","new":"نیواری",ng:"نڈونگا",nia:"نیاس",niu:"نیویائی",nl:"ڈچ","nl-BE":"فلیمِش",nmg:"کوايسو",nn:"نارویجین نینورسک",nnh:"نگیمبون",no:"نارویجین",nog:"نوگائی",nqo:"اینکو",nr:"جنوبی نڈیبیلی",nso:"شمالی سوتھو",nus:"نویر",nv:"نواجو",ny:"نیانجا",nyn:"نینکول",oc:"آکسیٹان",om:"اورومو",or:"اڑیہ",os:"اوسیٹک",pa:"پنجابی",pag:"پنگاسنان",pam:"پامپنگا",pap:"پاپیامینٹو",pau:"پالاون",pcm:"نائجیریائی پڈگن",pl:"پولش",prg:"پارسی",ps:"پشتو",pt:"پُرتگالی","pt-BR":"برازیلی پرتگالی","pt-PT":"یورپی پرتگالی",qu:"کویچوآ",quc:"کيشی",rap:"رپانوی",rar:"راروتونگان",rm:"رومانش",rn:"رونڈی",ro:"رومینین","ro-MD":"مالدووا",rof:"رومبو",root:"روٹ",ru:"روسی",rup:"ارومانی",rw:"کینیاروانڈا",rwk:"روا",sa:"سنسکرت",sad:"سنڈاوے",sah:"ساکھا",saq:"سامبورو",sat:"سنتالی",sba:"نگامبے",sbp:"سانگو",sc:"سردینین",scn:"سیسیلین",sco:"سکاٹ",sd:"سندھی",sdh:"جنوبی کرد",se:"شمالی سامی",seh:"سینا",ses:"کويرابورو سينی",sg:"ساںغو",sh:"سربو-کروئیشین",shi:"تشلحيت",shn:"شان",si:"سنہالا",sk:"سلوواک",sl:"سلووینیائی",sm:"ساموآن",sma:"جنوبی سامی",smj:"لول سامی",smn:"اناری سامی",sms:"سکولٹ سامی",sn:"شونا",snk:"سوننکے",so:"صومالی",sq:"البانی",sr:"سربین",srn:"سرانن ٹونگو",ss:"سواتی",ssy:"ساہو",st:"جنوبی سوتھو",su:"سنڈانیز",suk:"سکوما",sv:"سویڈش",sw:"سواحلی","sw-CD":"کانگو سواحلی",swb:"کوموریائی",syr:"سریانی",ta:"تمل",te:"تیلگو",tem:"ٹمنے",teo:"تیسو",tet:"ٹیٹم",tg:"تاجک",th:"تھائی",ti:"ٹگرینیا",tig:"ٹگرے",tk:"ترکمان",tl:"ٹیگا لوگ",tlh:"کلنگن",tn:"سوانا",to:"ٹونگن",tpi:"ٹوک پِسِن",tr:"ترکی",trv:"ٹوروکو",ts:"زونگا",tt:"تاتار",tum:"ٹمبوکا",tvl:"تووالو",tw:"توی",twq:"تاساواق",ty:"تاہیتی",tyv:"تووینین",tzm:"سینٹرل ایٹلس ٹمازائٹ",udm:"ادمورت",ug:"یوئگہر",uk:"یوکرینیائی",umb:"اومبوندو",ur:"اردو",uz:"ازبیک",vai:"وائی",ve:"وینڈا",vi:"ویتنامی",vo:"وولاپوک",vun:"ونجو",wa:"والون",wae:"والسر",wal:"وولایتا",war:"وارے",wbp:"وارلپیری",wo:"وولوف",xal:"کالمیک",xh:"ژوسا",xog:"سوگا",yav:"یانگبین",ybb:"یمبا",yi:"یدش",yo:"یوروبا",yue:"کینٹونیز",zgh:"اسٹینڈرڈ مراقشی تمازیقی",zh:"چینی","zh-Hans":"سادہ مندارن چینی","zh-Hant":"روایتی مندارن چینی",zu:"زولو",zun:"زونی",zza:"زازا"},scriptNames:{Cyrl:"سیریلک",Latn:"لاطینی",Arab:"عربی",Guru:"گرمکھی",Hans:"آسان",Hant:"روایتی"}},vi:{rtl:false,languageNames:{aa:"Tiếng Afar",ab:"Tiếng Abkhazia",ace:"Tiếng Achinese",ach:"Tiếng Acoli",ada:"Tiếng Adangme",ady:"Tiếng Adyghe",ae:"Tiếng Avestan",af:"Tiếng Afrikaans",afh:"Tiếng Afrihili",agq:"Tiếng Aghem",ain:"Tiếng Ainu",ak:"Tiếng Akan",akk:"Tiếng Akkadia",akz:"Tiếng Alabama",ale:"Tiếng Aleut",aln:"Tiếng Gheg Albani",alt:"Tiếng Altai Miền Nam",am:"Tiếng Amharic",an:"Tiếng Aragon",ang:"Tiếng Anh cổ",anp:"Tiếng Angika",ar:"Tiếng Ả Rập","ar-001":"Tiếng Ả Rập Hiện đại",arc:"Tiếng Aramaic",arn:"Tiếng Mapuche",aro:"Tiếng Araona",arp:"Tiếng Arapaho",arq:"Tiếng Ả Rập Algeria",ars:"Tiếng Ả Rập Najdi",arw:"Tiếng Arawak",arz:"Tiếng Ả Rập Ai Cập",as:"Tiếng Assam",asa:"Tiếng Asu",ase:"Ngôn ngữ Ký hiệu Mỹ",ast:"Tiếng Asturias",av:"Tiếng Avaric",awa:"Tiếng Awadhi",ay:"Tiếng Aymara",az:"Tiếng Azerbaijan",ba:"Tiếng Bashkir",bal:"Tiếng Baluchi",ban:"Tiếng Bali",bar:"Tiếng Bavaria",bas:"Tiếng Basaa",bax:"Tiếng Bamun",bbc:"Tiếng Batak Toba",bbj:"Tiếng Ghomala",be:"Tiếng Belarus",bej:"Tiếng Beja",bem:"Tiếng Bemba",bew:"Tiếng Betawi",bez:"Tiếng Bena",bfd:"Tiếng Bafut",bfq:"Tiếng Badaga",bg:"Tiếng Bulgaria",bgn:"Tiếng Tây Balochi",bho:"Tiếng Bhojpuri",bi:"Tiếng Bislama",bik:"Tiếng Bikol",bin:"Tiếng Bini",bjn:"Tiếng Banjar",bkm:"Tiếng Kom",bla:"Tiếng Siksika",bm:"Tiếng Bambara",bn:"Tiếng Bangla",bo:"Tiếng Tây Tạng",bpy:"Tiếng Bishnupriya",bqi:"Tiếng Bakhtiari",br:"Tiếng Breton",bra:"Tiếng Braj",brh:"Tiếng Brahui",brx:"Tiếng Bodo",bs:"Tiếng Bosnia",bss:"Tiếng Akoose",bua:"Tiếng Buriat",bug:"Tiếng Bugin",bum:"Tiếng Bulu",byn:"Tiếng Blin",byv:"Tiếng Medumba",ca:"Tiếng Catalan",cad:"Tiếng Caddo",car:"Tiếng Carib",cay:"Tiếng Cayuga",cch:"Tiếng Atsam",ccp:"Tiếng Chakma",ce:"Tiếng Chechen",ceb:"Tiếng Cebuano",cgg:"Tiếng Chiga",ch:"Tiếng Chamorro",chb:"Tiếng Chibcha",chg:"Tiếng Chagatai",chk:"Tiếng Chuuk",chm:"Tiếng Mari",chn:"Biệt ngữ Chinook",cho:"Tiếng Choctaw",chp:"Tiếng Chipewyan",chr:"Tiếng Cherokee",chy:"Tiếng Cheyenne",ckb:"Tiếng Kurd Miền Trung",co:"Tiếng Corsica",cop:"Tiếng Coptic",cps:"Tiếng Capiznon",cr:"Tiếng Cree",crh:"Tiếng Thổ Nhĩ Kỳ Crimean",crs:"Tiếng Pháp Seselwa Creole",cs:"Tiếng Séc",csb:"Tiếng Kashubia",cu:"Tiếng Slavơ Nhà thờ",cv:"Tiếng Chuvash",cy:"Tiếng Wales",da:"Tiếng Đan Mạch",dak:"Tiếng Dakota",dar:"Tiếng Dargwa",dav:"Tiếng Taita",de:"Tiếng Đức","de-AT":"Tiếng Đức (Áo)","de-CH":"Tiếng Thượng Giéc-man (Thụy Sĩ)",del:"Tiếng Delaware",den:"Tiếng Slave",dgr:"Tiếng Dogrib",din:"Tiếng Dinka",dje:"Tiếng Zarma",doi:"Tiếng Dogri",dsb:"Tiếng Hạ Sorbia",dtp:"Tiếng Dusun Miền Trung",dua:"Tiếng Duala",dum:"Tiếng Hà Lan Trung cổ",dv:"Tiếng Divehi",dyo:"Tiếng Jola-Fonyi",dyu:"Tiếng Dyula",dz:"Tiếng Dzongkha",dzg:"Tiếng Dazaga",ebu:"Tiếng Embu",ee:"Tiếng Ewe",efi:"Tiếng Efik",egl:"Tiếng Emilia",egy:"Tiếng Ai Cập cổ",eka:"Tiếng Ekajuk",el:"Tiếng Hy Lạp",elx:"Tiếng Elamite",en:"Tiếng Anh","en-AU":"Tiếng Anh (Australia)","en-CA":"Tiếng Anh (Canada)","en-GB":"Tiếng Anh (Anh)","en-US":"Tiếng Anh (Mỹ)",enm:"Tiếng Anh Trung cổ",eo:"Tiếng Quốc Tế Ngữ",es:"Tiếng Tây Ban Nha","es-419":"Tiếng Tây Ban Nha (Mỹ La tinh)","es-ES":"Tiếng Tây Ban Nha (Châu Âu)","es-MX":"Tiếng Tây Ban Nha (Mexico)",esu:"Tiếng Yupik Miền Trung",et:"Tiếng Estonia",eu:"Tiếng Basque",ewo:"Tiếng Ewondo",ext:"Tiếng Extremadura",fa:"Tiếng Ba Tư",fan:"Tiếng Fang",fat:"Tiếng Fanti",ff:"Tiếng Fulah",fi:"Tiếng Phần Lan",fil:"Tiếng Philippines",fj:"Tiếng Fiji",fo:"Tiếng Faroe",fon:"Tiếng Fon",fr:"Tiếng Pháp","fr-CA":"Tiếng Pháp (Canada)","fr-CH":"Tiếng Pháp (Thụy Sĩ)",frc:"Tiếng Pháp Cajun",frm:"Tiếng Pháp Trung cổ",fro:"Tiếng Pháp cổ",frp:"Tiếng Arpitan",frr:"Tiếng Frisia Miền Bắc",frs:"Tiếng Frisian Miền Đông",fur:"Tiếng Friulian",fy:"Tiếng Frisia",ga:"Tiếng Ireland",gaa:"Tiếng Ga",gag:"Tiếng Gagauz",gan:"Tiếng Cám",gay:"Tiếng Gayo",gba:"Tiếng Gbaya",gd:"Tiếng Gael Scotland",gez:"Tiếng Geez",gil:"Tiếng Gilbert",gl:"Tiếng Galician",glk:"Tiếng Gilaki",gmh:"Tiếng Thượng Giéc-man Trung cổ",gn:"Tiếng Guarani",goh:"Tiếng Thượng Giéc-man cổ",gom:"Tiếng Goan Konkani",gon:"Tiếng Gondi",gor:"Tiếng Gorontalo",got:"Tiếng Gô-tích",grb:"Tiếng Grebo",grc:"Tiếng Hy Lạp cổ",gsw:"Tiếng Đức (Thụy Sĩ)",gu:"Tiếng Gujarati",gur:"Tiếng Frafra",guz:"Tiếng Gusii",gv:"Tiếng Manx",gwi:"Tiếng Gwichʼin",ha:"Tiếng Hausa",hai:"Tiếng Haida",hak:"Tiếng Khách Gia",haw:"Tiếng Hawaii",he:"Tiếng Do Thái",hi:"Tiếng Hindi",hif:"Tiếng Fiji Hindi",hil:"Tiếng Hiligaynon",hit:"Tiếng Hittite",hmn:"Tiếng Hmông",ho:"Tiếng Hiri Motu",hr:"Tiếng Croatia",hsb:"Tiếng Thượng Sorbia",hsn:"Tiếng Tương",ht:"Tiếng Haiti",hu:"Tiếng Hungary",hup:"Tiếng Hupa",hy:"Tiếng Armenia",hz:"Tiếng Herero",ia:"Tiếng Khoa Học Quốc Tế",iba:"Tiếng Iban",ibb:"Tiếng Ibibio",id:"Tiếng Indonesia",ie:"Tiếng Interlingue",ig:"Tiếng Igbo",ii:"Tiếng Di Tứ Xuyên",ik:"Tiếng Inupiaq",ilo:"Tiếng Iloko",inh:"Tiếng Ingush",io:"Tiếng Ido",is:"Tiếng Iceland",it:"Tiếng Italy",iu:"Tiếng Inuktitut",izh:"Tiếng Ingria",ja:"Tiếng Nhật",jam:"Tiếng Anh Jamaica Creole",jbo:"Tiếng Lojban",jgo:"Tiếng Ngomba",jmc:"Tiếng Machame",jpr:"Tiếng Judeo-Ba Tư",jrb:"Tiếng Judeo-Ả Rập",jut:"Tiếng Jutish",jv:"Tiếng Java",ka:"Tiếng Georgia",kaa:"Tiếng Kara-Kalpak",kab:"Tiếng Kabyle",kac:"Tiếng Kachin",kaj:"Tiếng Jju",kam:"Tiếng Kamba",kaw:"Tiếng Kawi",kbd:"Tiếng Kabardian",kbl:"Tiếng Kanembu",kcg:"Tiếng Tyap",kde:"Tiếng Makonde",kea:"Tiếng Kabuverdianu",kfo:"Tiếng Koro",kg:"Tiếng Kongo",kha:"Tiếng Khasi",kho:"Tiếng Khotan",khq:"Tiếng Koyra Chiini",ki:"Tiếng Kikuyu",kj:"Tiếng Kuanyama",kk:"Tiếng Kazakh",kkj:"Tiếng Kako",kl:"Tiếng Kalaallisut",kln:"Tiếng Kalenjin",km:"Tiếng Khmer",kmb:"Tiếng Kimbundu",kn:"Tiếng Kannada",ko:"Tiếng Hàn",koi:"Tiếng Komi-Permyak",kok:"Tiếng Konkani",kos:"Tiếng Kosrae",kpe:"Tiếng Kpelle",kr:"Tiếng Kanuri",krc:"Tiếng Karachay-Balkar",krl:"Tiếng Karelian",kru:"Tiếng Kurukh",ks:"Tiếng Kashmir",ksb:"Tiếng Shambala",ksf:"Tiếng Bafia",ksh:"Tiếng Cologne",ku:"Tiếng Kurd",kum:"Tiếng Kumyk",kut:"Tiếng Kutenai",kv:"Tiếng Komi",kw:"Tiếng Cornwall",ky:"Tiếng Kyrgyz",la:"Tiếng La-tinh",lad:"Tiếng Ladino",lag:"Tiếng Langi",lah:"Tiếng Lahnda",lam:"Tiếng Lamba",lb:"Tiếng Luxembourg",lez:"Tiếng Lezghian",lg:"Tiếng Ganda",li:"Tiếng Limburg",lkt:"Tiếng Lakota",ln:"Tiếng Lingala",lo:"Tiếng Lào",lol:"Tiếng Mongo",lou:"Tiếng Creole Louisiana",loz:"Tiếng Lozi",lrc:"Tiếng Bắc Luri",lt:"Tiếng Litva",lu:"Tiếng Luba-Katanga",lua:"Tiếng Luba-Lulua",lui:"Tiếng Luiseno",lun:"Tiếng Lunda",luo:"Tiếng Luo",lus:"Tiếng Lushai",luy:"Tiếng Luyia",lv:"Tiếng Latvia",mad:"Tiếng Madura",maf:"Tiếng Mafa",mag:"Tiếng Magahi",mai:"Tiếng Maithili",mak:"Tiếng Makasar",man:"Tiếng Mandingo",mas:"Tiếng Masai",mde:"Tiếng Maba",mdf:"Tiếng Moksha",mdr:"Tiếng Mandar",men:"Tiếng Mende",mer:"Tiếng Meru",mfe:"Tiếng Morisyen",mg:"Tiếng Malagasy",mga:"Tiếng Ai-len Trung cổ",mgh:"Tiếng Makhuwa-Meetto",mgo:"Tiếng Meta’",mh:"Tiếng Marshall",mi:"Tiếng Maori",mic:"Tiếng Micmac",min:"Tiếng Minangkabau",mk:"Tiếng Macedonia",ml:"Tiếng Malayalam",mn:"Tiếng Mông Cổ",mnc:"Tiếng Mãn Châu",mni:"Tiếng Manipuri",moh:"Tiếng Mohawk",mos:"Tiếng Mossi",mr:"Tiếng Marathi",ms:"Tiếng Mã Lai",mt:"Tiếng Malta",mua:"Tiếng Mundang",mus:"Tiếng Creek",mwl:"Tiếng Miranda",mwr:"Tiếng Marwari",my:"Tiếng Miến Điện",mye:"Tiếng Myene",myv:"Tiếng Erzya",mzn:"Tiếng Mazanderani",na:"Tiếng Nauru",nan:"Tiếng Mân Nam",nap:"Tiếng Napoli",naq:"Tiếng Nama",nb:"Tiếng Na Uy (Bokmål)",nd:"Tiếng Ndebele Miền Bắc",nds:"Tiếng Hạ Giéc-man","nds-NL":"Tiếng Hạ Saxon",ne:"Tiếng Nepal","new":"Tiếng Newari",ng:"Tiếng Ndonga",nia:"Tiếng Nias",niu:"Tiếng Niuean",njo:"Tiếng Ao Naga",nl:"Tiếng Hà Lan","nl-BE":"Tiếng Flemish",nmg:"Tiếng Kwasio",nn:"Tiếng Na Uy (Nynorsk)",nnh:"Tiếng Ngiemboon",no:"Tiếng Na Uy",nog:"Tiếng Nogai",non:"Tiếng Na Uy cổ",nqo:"Tiếng N’Ko",nr:"Tiếng Ndebele Miền Nam",nso:"Tiếng Sotho Miền Bắc",nus:"Tiếng Nuer",nv:"Tiếng Navajo",nwc:"Tiếng Newari cổ",ny:"Tiếng Nyanja",nym:"Tiếng Nyamwezi",nyn:"Tiếng Nyankole",nyo:"Tiếng Nyoro",nzi:"Tiếng Nzima",oc:"Tiếng Occitan",oj:"Tiếng Ojibwa",om:"Tiếng Oromo",or:"Tiếng Odia",os:"Tiếng Ossetic",osa:"Tiếng Osage",ota:"Tiếng Thổ Nhĩ Kỳ Ottoman",pa:"Tiếng Punjab",pag:"Tiếng Pangasinan",pal:"Tiếng Pahlavi",pam:"Tiếng Pampanga",pap:"Tiếng Papiamento",pau:"Tiếng Palauan",pcm:"Tiếng Nigeria Pidgin",peo:"Tiếng Ba Tư cổ",phn:"Tiếng Phoenicia",pi:"Tiếng Pali",pl:"Tiếng Ba Lan",pon:"Tiếng Pohnpeian",prg:"Tiếng Prussia",pro:"Tiếng Provençal cổ",ps:"Tiếng Pashto",pt:"Tiếng Bồ Đào Nha","pt-BR":"Tiếng Bồ Đào Nha (Brazil)","pt-PT":"Tiếng Bồ Đào Nha (Châu Âu)",qu:"Tiếng Quechua",quc:"Tiếng Kʼicheʼ",qug:"Tiếng Quechua ở Cao nguyên Chimborazo",raj:"Tiếng Rajasthani",rap:"Tiếng Rapanui",rar:"Tiếng Rarotongan",rm:"Tiếng Romansh",rn:"Tiếng Rundi",ro:"Tiếng Romania","ro-MD":"Tiếng Moldova",rof:"Tiếng Rombo",rom:"Tiếng Romany",root:"Tiếng Root",ru:"Tiếng Nga",rup:"Tiếng Aromania",rw:"Tiếng Kinyarwanda",rwk:"Tiếng Rwa",sa:"Tiếng Phạn",sad:"Tiếng Sandawe",sah:"Tiếng Sakha",sam:"Tiếng Samaritan Aramaic",saq:"Tiếng Samburu",sas:"Tiếng Sasak",sat:"Tiếng Santali",sba:"Tiếng Ngambay",sbp:"Tiếng Sangu",sc:"Tiếng Sardinia",scn:"Tiếng Sicilia",sco:"Tiếng Scots",sd:"Tiếng Sindhi",sdh:"Tiếng Kurd Miền Nam",se:"Tiếng Sami Miền Bắc",see:"Tiếng Seneca",seh:"Tiếng Sena",sel:"Tiếng Selkup",ses:"Tiếng Koyraboro Senni",sg:"Tiếng Sango",sga:"Tiếng Ai-len cổ",sh:"Tiếng Serbo-Croatia",shi:"Tiếng Tachelhit",shn:"Tiếng Shan",shu:"Tiếng Ả-Rập Chad",si:"Tiếng Sinhala",sid:"Tiếng Sidamo",sk:"Tiếng Slovak",sl:"Tiếng Slovenia",sm:"Tiếng Samoa",sma:"Tiếng Sami Miền Nam",smj:"Tiếng Lule Sami",smn:"Tiếng Inari Sami",sms:"Tiếng Skolt Sami",sn:"Tiếng Shona",snk:"Tiếng Soninke",so:"Tiếng Somali",sog:"Tiếng Sogdien",sq:"Tiếng Albania",sr:"Tiếng Serbia",srn:"Tiếng Sranan Tongo",srr:"Tiếng Serer",ss:"Tiếng Swati",ssy:"Tiếng Saho",st:"Tiếng Sotho Miền Nam",su:"Tiếng Sunda",suk:"Tiếng Sukuma",sus:"Tiếng Susu",sux:"Tiếng Sumeria",sv:"Tiếng Thụy Điển",sw:"Tiếng Swahili","sw-CD":"Tiếng Swahili Congo",swb:"Tiếng Cômo",syc:"Tiếng Syriac cổ",syr:"Tiếng Syriac",ta:"Tiếng Tamil",te:"Tiếng Telugu",tem:"Tiếng Timne",teo:"Tiếng Teso",ter:"Tiếng Tereno",tet:"Tiếng Tetum",tg:"Tiếng Tajik",th:"Tiếng Thái",ti:"Tiếng Tigrinya",tig:"Tiếng Tigre",tiv:"Tiếng Tiv",tk:"Tiếng Turkmen",tkl:"Tiếng Tokelau",tl:"Tiếng Tagalog",tlh:"Tiếng Klingon",tli:"Tiếng Tlingit",tmh:"Tiếng Tamashek",tn:"Tiếng Tswana",to:"Tiếng Tonga",tog:"Tiếng Nyasa Tonga",tpi:"Tiếng Tok Pisin",tr:"Tiếng Thổ Nhĩ Kỳ",trv:"Tiếng Taroko",ts:"Tiếng Tsonga",tsi:"Tiếng Tsimshian",tt:"Tiếng Tatar",tum:"Tiếng Tumbuka",tvl:"Tiếng Tuvalu",tw:"Tiếng Twi",twq:"Tiếng Tasawaq",ty:"Tiếng Tahiti",tyv:"Tiếng Tuvinian",tzm:"Tiếng Tamazight Miền Trung Ma-rốc",udm:"Tiếng Udmurt",ug:"Tiếng Uyghur",uga:"Tiếng Ugaritic",uk:"Tiếng Ukraina",umb:"Tiếng Umbundu",ur:"Tiếng Urdu",uz:"Tiếng Uzbek",vai:"Tiếng Vai",ve:"Tiếng Venda",vi:"Tiếng Việt",vo:"Tiếng Volapük",vot:"Tiếng Votic",vun:"Tiếng Vunjo",wa:"Tiếng Walloon",wae:"Tiếng Walser",wal:"Tiếng Walamo",war:"Tiếng Waray",was:"Tiếng Washo",wbp:"Tiếng Warlpiri",wo:"Tiếng Wolof",wuu:"Tiếng Ngô",xal:"Tiếng Kalmyk",xh:"Tiếng Xhosa",xog:"Tiếng Soga",yao:"Tiếng Yao",yap:"Tiếng Yap",yav:"Tiếng Yangben",ybb:"Tiếng Yemba",yi:"Tiếng Yiddish",yo:"Tiếng Yoruba",yue:"Tiếng Quảng Đông",za:"Tiếng Choang",zap:"Tiếng Zapotec",zbl:"Ký hiệu Blissymbols",zen:"Tiếng Zenaga",zgh:"Tiếng Tamazight Chuẩn của Ma-rốc",zh:"Tiếng Trung","zh-Hans":"Tiếng Trung Phổ thông (Giản thể)","zh-Hant":"Tiếng Trung Phổ thông (Phồn thể)",zu:"Tiếng Zulu",zun:"Tiếng Zuni",zza:"Tiếng Zaza"},scriptNames:{Cyrl:"Chữ Kirin",Latn:"Chữ La tinh",Arab:"Chữ Ả Rập",Guru:"Chữ Gurmukhi",Tfng:"Chữ Tifinagh",Vaii:"Chữ Vai",Hans:"Giản thể",Hant:"Phồn thể"}},yue:{rtl:false,languageNames:{aa:"阿法文",ab:"阿布哈茲文",ace:"亞齊文",ach:"阿僑利文",ada:"阿當莫文",ady:"阿迪各文",ae:"阿緯斯陀文",aeb:"突尼斯阿拉伯文",af:"南非荷蘭文",afh:"阿弗里希利文",agq:"亞罕文",ain:"阿伊努文",ak:"阿坎文",akk:"阿卡德文",akz:"阿拉巴馬文",ale:"阿留申文",aln:"蓋格阿爾巴尼亞文",alt:"南阿爾泰文",am:"阿姆哈拉文",an:"阿拉貢文",ang:"古英文",anp:"昂加文",ar:"阿拉伯文","ar-001":"現代標準阿拉伯文",arc:"阿拉米文",arn:"馬普切文",aro:"阿拉奧納文",arp:"阿拉帕霍文",arq:"阿爾及利亞阿拉伯文",arw:"阿拉瓦克文",ary:"摩洛哥阿拉伯文",arz:"埃及阿拉伯文",as:"阿薩姆文",asa:"阿蘇文",ase:"美國手語",ast:"阿斯圖里亞文",av:"阿瓦爾文",avk:"科塔瓦文",awa:"阿瓦文",ay:"艾馬拉文",az:"亞塞拜然文",ba:"巴什客爾文",bal:"俾路支文",ban:"峇里文",bar:"巴伐利亞文",bas:"巴薩文",bax:"巴姆穆文",bbc:"巴塔克托巴文",bbj:"戈馬拉文",be:"白俄羅斯文",bej:"貝扎文",bem:"別姆巴文",bew:"貝塔維文",bez:"貝納文",bfd:"富特文",bfq:"巴達加文",bg:"保加利亞文",bgn:"西俾路支文",bho:"博傑普爾文",bi:"比斯拉馬文",bik:"比科爾文",bin:"比尼文",bjn:"班亞爾文",bkm:"康姆文",bla:"錫克錫卡文",bm:"班巴拉文",bn:"孟加拉文",bo:"藏文",bpy:"比什奴普萊利亞文",bqi:"巴赫蒂亞里文",br:"布列塔尼文",bra:"布拉杰文",brh:"布拉維文",brx:"博多文",bs:"波士尼亞文",bss:"阿庫色文",bua:"布里阿特文",bug:"布吉斯文",bum:"布魯文",byn:"比林文",byv:"梅敦巴文",ca:"加泰羅尼亞文",cad:"卡多文",car:"加勒比文",cay:"卡尤加文",cch:"阿燦文",ccp:"查克馬文",ce:"車臣文",ceb:"宿霧文",cgg:"奇加文",ch:"查莫洛文",chb:"奇布查文",chg:"查加文",chk:"處奇斯文",chm:"馬里文",chn:"契奴克文",cho:"喬克托文",chp:"奇佩瓦揚文",chr:"柴羅基文",chy:"沙伊安文",ckb:"索拉尼庫爾德文",co:"科西嘉文",cop:"科普特文",cps:"卡皮茲文",cr:"克裡文",crh:"克里米亞半島的土耳其文;克里米亞半島的塔塔爾文",crs:"法語克里奧爾混合語",cs:"捷克文",csb:"卡舒布文",cu:"宗教斯拉夫文",cv:"楚瓦什文",cy:"威爾斯文",da:"丹麥文",dak:"達科他文",dar:"達爾格瓦文",dav:"台塔文",de:"德文","de-AT":"德文 (奧地利)","de-CH":"高地德文(瑞士)",del:"德拉瓦文",den:"斯拉夫",dgr:"多格里布文",din:"丁卡文",dje:"扎爾馬文",doi:"多格來文",dsb:"下索布文",dtp:"中部杜順文",dua:"杜亞拉文",dum:"中古荷蘭文",dv:"迪維西文",dyo:"朱拉文",dyu:"迪尤拉文",dz:"宗卡文",dzg:"達薩文",ebu:"恩布文",ee:"埃維文",efi:"埃菲克文",egl:"埃米利安文",egy:"古埃及文",eka:"艾卡朱克文",el:"希臘文",elx:"埃蘭文",en:"英文","en-AU":"英文 (澳洲)","en-CA":"英文 (加拿大)","en-GB":"英文 (英國)","en-US":"英文 (美國)",enm:"中古英文",eo:"世界文",es:"西班牙文","es-419":"西班牙文 (拉丁美洲)","es-ES":"西班牙文 (西班牙)","es-MX":"西班牙文 (墨西哥)",esu:"中尤皮克文",et:"愛沙尼亞文",eu:"巴斯克文",ewo:"依汪都文",ext:"埃斯特雷馬杜拉文",fa:"波斯文",fan:"芳族文",fat:"芳蒂文",ff:"富拉文",fi:"芬蘭文",fil:"菲律賓文",fit:"托爾訥芬蘭文",fj:"斐濟文",fo:"法羅文",fon:"豐文",fr:"法文","fr-CA":"法文 (加拿大)","fr-CH":"法文 (瑞士)",frc:"卡真法文",frm:"中古法文",fro:"古法文",frp:"法蘭克-普羅旺斯文",frr:"北弗里西亞文",frs:"東弗里西亞文",fur:"弗留利文",fy:"西弗里西亞文",ga:"愛爾蘭文",gaa:"加族文",gag:"加告茲文",gan:"贛語",gay:"加約文",gba:"葛巴亞文",gbz:"索羅亞斯德教達里文",gd:"蘇格蘭蓋爾文",gez:"吉茲文",gil:"吉爾伯特群島文",gl:"加利西亞文",glk:"吉拉基文",gmh:"中古高地德文",gn:"瓜拉尼文",goh:"古高地日耳曼文",gom:"孔卡尼文",gon:"岡德文",gor:"科隆達羅文",got:"哥德文",grb:"格列博文",grc:"古希臘文",gsw:"德文(瑞士)",gu:"古吉拉特文",guc:"瓦尤文",gur:"弗拉弗拉文",guz:"古西文",gv:"曼島文",gwi:"圭契文",ha:"豪撒文",hai:"海達文",hak:"客家話",haw:"夏威夷文",he:"希伯來文",hi:"北印度文",hif:"斐濟印地文",hil:"希利蓋農文",hit:"赫梯文",hmn:"孟文",ho:"西里莫圖土文",hr:"克羅埃西亞文",hsb:"上索布文",hsn:"湘語",ht:"海地文",hu:"匈牙利文",hup:"胡帕文",hy:"亞美尼亞文",hz:"赫雷羅文",ia:"國際文",iba:"伊班文",ibb:"伊比比奧文",id:"印尼文",ie:"國際文(E)",ig:"伊布文",ii:"四川彝文",ik:"依奴皮維克文",ilo:"伊洛闊文",inh:"印古什文",io:"伊多文",is:"冰島文",it:"義大利文",iu:"因紐特文",izh:"英格裏亞文",ja:"日文",jam:"牙買加克裏奧爾英文",jbo:"邏輯文",jgo:"恩格姆巴文",jmc:"馬恰美文",jpr:"猶太教-波斯文",jrb:"猶太阿拉伯文",jut:"日德蘭文",jv:"爪哇文",ka:"喬治亞文",kaa:"卡拉卡爾帕克文",kab:"卡比爾文",kac:"卡琴文",kaj:"卡捷文",kam:"卡姆巴文",kaw:"卡威文",kbd:"卡巴爾達文",kbl:"卡念布文",kcg:"卡塔布文",kde:"馬孔德文",kea:"卡布威爾第文",ken:"肯揚文",kfo:"科羅文",kg:"剛果文",kgp:"坎剛文",kha:"卡西文",kho:"和闐文",khq:"西桑海文",khw:"科瓦文",ki:"吉庫尤文",kiu:"北紮紮其文",kj:"廣亞馬文",kk:"哈薩克文",kkj:"卡庫文",kl:"格陵蘭文",kln:"卡倫金文",km:"高棉文",kmb:"金邦杜文",kn:"坎那達文",ko:"韓文",koi:"科米-彼爾米亞克文",kok:"貢根文",kos:"科斯雷恩文",kpe:"克佩列文",kr:"卡努裡文",krc:"卡拉柴-包爾卡爾文",kri:"塞拉利昂克裏奧爾文",krj:"基那來阿文",krl:"卡累利阿文",kru:"庫魯科文",ks:"喀什米爾文",ksb:"尚巴拉文",ksf:"巴菲亞文",ksh:"科隆文",ku:"庫爾德文",kum:"庫密克文",kut:"庫特奈文",kv:"科米文",kw:"康瓦耳文",ky:"吉爾吉斯文",la:"拉丁文",lad:"拉迪諾文",lag:"朗吉文",lah:"拉亨達文",lam:"蘭巴文",lb:"盧森堡文",lez:"列茲干文",lfn:"新共同語言",lg:"干達文",li:"林堡文",lij:"利古里亞文",liv:"利伏尼亞文",lkt:"拉科塔文",lmo:"倫巴底文",ln:"林加拉文",lo:"寮文",lol:"芒戈文",loz:"洛齊文",lrc:"北盧爾文",lt:"立陶宛文",ltg:"拉特加萊文",lu:"魯巴加丹加文",lua:"魯巴魯魯亞文",lui:"路易塞諾文",lun:"盧恩達文",luo:"盧奧文",lus:"盧晒文",luy:"盧雅文",lv:"拉脫維亞文",lzh:"文言文",lzz:"拉茲文",mad:"馬都拉文",maf:"馬法文",mag:"馬加伊文",mai:"邁蒂利文",mak:"望加錫文",man:"曼丁哥文",mas:"馬賽文",mde:"馬巴文",mdf:"莫克沙文",mdr:"曼達文",men:"門德文",mer:"梅魯文",mfe:"克里奧文(模里西斯)",mg:"馬拉加什文",mga:"中古愛爾蘭文",mgh:"馬夸文",mgo:"美塔文",mh:"馬紹爾文",mi:"毛利文",mic:"米克馬克文",min:"米南卡堡文",mk:"馬其頓文",ml:"馬來亞拉姆文",mn:"蒙古文",mnc:"滿族文",mni:"曼尼普裡文",moh:"莫霍克文",mos:"莫西文",mr:"馬拉地文",mrj:"西馬裏文",ms:"馬來文",mt:"馬爾他文",mua:"蒙當文",mus:"克里克文",mwl:"米蘭德斯文",mwr:"馬爾尼裡文",mwv:"明打威文",my:"緬甸文",mye:"姆耶內文",myv:"厄爾茲亞文",mzn:"馬贊德蘭文",na:"諾魯文",nan:"閩南語",nap:"拿波里文",naq:"納馬文",nb:"巴克摩挪威文",nd:"北地畢列文",nds:"低地德文","nds-NL":"低地薩克遜文",ne:"尼泊爾文","new":"尼瓦爾文",ng:"恩東加文",nia:"尼亞斯文",niu:"紐埃文",njo:"阿沃那加文",nl:"荷蘭文","nl-BE":"佛蘭芒文",nmg:"夸西奧文",nn:"耐諾斯克挪威文",nnh:"恩甘澎文",no:"挪威文",nog:"諾蓋文",non:"古諾爾斯文",nov:"諾維亞文",nqo:"曼德文字 (N’Ko)",nr:"南地畢列文",nso:"北索托文",nus:"努埃爾文",nv:"納瓦霍文",nwc:"古尼瓦爾文",ny:"尼揚賈文",nym:"尼揚韋齊文",nyn:"尼揚科萊文",nyo:"尼奧囉文",nzi:"尼茲馬文",oc:"奧克西坦文",oj:"奧杰布瓦文",om:"奧羅莫文",or:"歐利亞文",os:"奧塞提文",osa:"歐塞奇文",ota:"鄂圖曼土耳其文",pa:"旁遮普文",pag:"潘加辛文",pal:"巴列維文",pam:"潘帕嘉文",pap:"帕皮阿門托文",pau:"帛琉文",pcd:"庇卡底文",pcm:"尼日利亞皮欽語",pdc:"賓夕法尼亞德文",pdt:"門諾低地德文",peo:"古波斯文",pfl:"普法爾茨德文",phn:"腓尼基文",pi:"巴利文",pl:"波蘭文",pms:"皮埃蒙特文",pnt:"旁狄希臘文",pon:"波那貝文",prg:"普魯士文",pro:"古普羅旺斯文",ps:"普什圖文",pt:"葡萄牙文","pt-BR":"葡萄牙文 (巴西)","pt-PT":"葡萄牙文 (葡萄牙)",qu:"蓋楚瓦文",quc:"基切文",qug:"欽博拉索海蘭蓋丘亞文",raj:"拉賈斯坦諸文",rap:"復活島文",rar:"拉羅通加文",rgn:"羅馬格諾里文",rif:"里菲亞諾文",rm:"羅曼斯文",rn:"隆迪文",ro:"羅馬尼亞文","ro-MD":"摩爾多瓦文",rof:"蘭博文",rom:"吉普賽文",root:"根語言",rtm:"羅圖馬島文",ru:"俄文",rue:"盧森尼亞文",rug:"羅維阿納文",rup:"羅馬尼亞語系",rw:"盧安達文",rwk:"羅瓦文",sa:"梵文",sad:"桑達韋文",sah:"雅庫特文",sam:"薩瑪利亞阿拉姆文",saq:"薩布魯文",sas:"撒撒克文",sat:"散塔利文",saz:"索拉什特拉文",sba:"甘拜文",sbp:"桑古文",sc:"撒丁文",scn:"西西里文",sco:"蘇格蘭文",sd:"信德文",sdc:"薩丁尼亞-薩薩里文",sdh:"南庫爾德文",se:"北方薩米文",see:"塞訥卡文",seh:"賽納文",sei:"瑟里文",sel:"瑟爾卡普文",ses:"東桑海文",sg:"桑戈文",sga:"古愛爾蘭文",sgs:"薩莫吉希亞文",sh:"塞爾維亞克羅埃西亞文",shi:"希爾哈文",shn:"撣文",shu:"阿拉伯文(查德)",si:"僧伽羅文",sid:"希達摩文",sk:"斯洛伐克文",sl:"斯洛維尼亞文",sli:"下西利西亞文",sly:"塞拉亞文",sm:"薩摩亞文",sma:"南薩米文",smj:"魯勒薩米文",smn:"伊納裡薩米文",sms:"斯科特薩米文",sn:"塞內加爾文",snk:"索尼基文",so:"索馬利文",sog:"索格底亞納文",sq:"阿爾巴尼亞文",sr:"塞爾維亞文",srn:"蘇拉南東墎文",srr:"塞雷爾文",ss:"斯瓦特文",ssy:"薩霍文",st:"塞索托文",stq:"沙特菲士蘭文",su:"巽他文",suk:"蘇庫馬文",sus:"蘇蘇文",sux:"蘇美文",sv:"瑞典文",sw:"史瓦希里文","sw-CD":"史瓦希里文(剛果)",swb:"葛摩文",syc:"古敘利亞文",syr:"敘利亞文",szl:"西利西亞文",ta:"坦米爾文",tcy:"圖盧文",te:"泰盧固文",tem:"提姆文",teo:"特索文",ter:"泰雷諾文",tet:"泰頓文",tg:"塔吉克文",th:"泰文",ti:"提格利尼亞文",tig:"蒂格雷文",tiv:"提夫文",tk:"土庫曼文",tkl:"托克勞文",tkr:"查庫爾文",tl:"塔加路族文",tlh:"克林貢文",tli:"特林基特文",tly:"塔里什文",tmh:"塔馬奇克文",tn:"突尼西亞文",to:"東加文",tog:"東加文(尼亞薩)",tpi:"托比辛文",tr:"土耳其文",tru:"圖羅尤文",trv:"太魯閣文",ts:"特松加文",tsd:"特薩克尼恩文",tsi:"欽西安文",tt:"韃靼文",ttt:"穆斯林塔特文",tum:"圖姆布卡文",tvl:"吐瓦魯文",tw:"特威文",twq:"北桑海文",ty:"大溪地文",tyv:"土凡文",tzm:"塔馬齊格特文",udm:"沃蒂艾克文",ug:"維吾爾文",uga:"烏加列文",uk:"烏克蘭文",umb:"姆本杜文",ur:"烏都文",uz:"烏茲別克文",vai:"瓦伊文",ve:"溫達文",vec:"威尼斯文",vep:"維普森文",vi:"越南文",vls:"西佛蘭德文",vmf:"美茵-法蘭克尼亞文",vo:"沃拉普克文",vot:"沃提克文",vro:"佛羅文",vun:"溫舊文",wa:"瓦隆文",wae:"瓦瑟文",wal:"瓦拉莫文",war:"瓦瑞文",was:"瓦紹文",wbp:"沃皮瑞文",wo:"沃洛夫文",wuu:"吳語",xal:"卡爾梅克文",xh:"科薩文",xmf:"明格列爾文",xog:"索加文",yao:"瑤文",yap:"雅浦文",yav:"洋卞文",ybb:"耶姆巴文",yi:"意第緒文",yo:"約魯巴文",yrl:"奈恩加圖文",yue:"粵語",za:"壯文",zap:"薩波特克文",zbl:"布列斯符號",zea:"西蘭文",zen:"澤納加文",zgh:"標準摩洛哥塔馬塞特文",zh:"中文","zh-Hans":"簡體中文 (普通話)","zh-Hant":"繁體中文 (普通話)",zu:"祖魯文",zun:"祖尼文",zza:"扎扎文"},scriptNames:{Cyrl:"斯拉夫文",Latn:"拉丁文",Arab:"阿拉伯文",Guru:"古魯穆奇文",Tfng:"提非納文",Vaii:"瓦依文",Hans:"簡體",Hant:"繁體"}},zh:{rtl:false,languageNames:{aa:"阿法尔语",ab:"阿布哈西亚语",ace:"亚齐语",ach:"阿乔利语",ada:"阿当梅语",ady:"阿迪格语",ae:"阿维斯塔语",af:"南非荷兰语",afh:"阿弗里希利语",agq:"亚罕语",ain:"阿伊努语",ak:"阿肯语",akk:"阿卡德语",ale:"阿留申语",alt:"南阿尔泰语",am:"阿姆哈拉语",an:"阿拉贡语",ang:"古英语",anp:"昂加语",ar:"阿拉伯语","ar-001":"现代标准阿拉伯语",arc:"阿拉米语",arn:"马普切语",arp:"阿拉帕霍语",ars:"纳吉迪阿拉伯语",arw:"阿拉瓦克语",as:"阿萨姆语",asa:"帕雷语",ast:"阿斯图里亚斯语",av:"阿瓦尔语",awa:"阿瓦德语",ay:"艾马拉语",az:"阿塞拜疆语","az-Arab":"南阿塞拜疆语",ba:"巴什基尔语",bal:"俾路支语",ban:"巴厘语",bas:"巴萨语",bax:"巴姆穆语",bbj:"戈马拉语",be:"白俄罗斯语",bej:"贝沙语",bem:"本巴语",bez:"贝纳语",bfd:"巴非特语",bg:"保加利亚语",bgn:"西俾路支语",bho:"博杰普尔语",bi:"比斯拉马语",bik:"比科尔语",bin:"比尼语",bkm:"科姆语",bla:"西克西卡语",bm:"班巴拉语",bn:"孟加拉语",bo:"藏语",br:"布列塔尼语",bra:"布拉杰语",brx:"博多语",bs:"波斯尼亚语",bss:"阿库色语",bua:"布里亚特语",bug:"布吉语",bum:"布鲁语",byn:"比林语",byv:"梅敦巴语",ca:"加泰罗尼亚语",cad:"卡多语",car:"加勒比语",cay:"卡尤加语",cch:"阿灿语",ccp:"查克玛语",ce:"车臣语",ceb:"宿务语",cgg:"奇加语",ch:"查莫罗语",chb:"奇布查语",chg:"察合台语",chk:"楚克语",chm:"马里语",chn:"奇努克混合语",cho:"乔克托语",chp:"奇佩维安语",chr:"切罗基语",chy:"夏延语",ckb:"中库尔德语",co:"科西嘉语",cop:"科普特语",cr:"克里族语",crh:"克里米亚土耳其语",crs:"塞舌尔克里奥尔语",cs:"捷克语",csb:"卡舒比语",cu:"教会斯拉夫语",cv:"楚瓦什语",cy:"威尔士语",da:"丹麦语",dak:"达科他语",dar:"达尔格瓦语",dav:"台塔语",de:"德语","de-AT":"奥地利德语","de-CH":"瑞士高地德语",del:"特拉华语",den:"史拉维语",dgr:"多格里布语",din:"丁卡语",dje:"哲尔马语",doi:"多格拉语",dsb:"下索布语",dua:"都阿拉语",dum:"中古荷兰语",dv:"迪维希语",dyo:"朱拉语",dyu:"迪尤拉语",dz:"宗卡语",dzg:"达扎葛语",ebu:"恩布语",ee:"埃维语",efi:"埃菲克语",egy:"古埃及语",eka:"艾卡朱克语",el:"希腊语",elx:"埃兰语",en:"英语","en-AU":"澳大利亚英语","en-CA":"加拿大英语","en-GB":"英国英语","en-US":"美国英语",enm:"中古英语",eo:"世界语",es:"西班牙语","es-419":"拉丁美洲西班牙语","es-ES":"欧洲西班牙语","es-MX":"墨西哥西班牙语",et:"爱沙尼亚语",eu:"巴斯克语",ewo:"旺杜语",fa:"波斯语",fan:"芳格语",fat:"芳蒂语",ff:"富拉语",fi:"芬兰语",fil:"菲律宾语",fj:"斐济语",fo:"法罗语",fon:"丰语",fr:"法语","fr-CA":"加拿大法语","fr-CH":"瑞士法语",frc:"卡真法语",frm:"中古法语",fro:"古法语",frr:"北弗里西亚语",frs:"东弗里西亚语",fur:"弗留利语",fy:"西弗里西亚语",ga:"爱尔兰语",gaa:"加族语",gag:"加告兹语",gan:"赣语",gay:"迦约语",gba:"格巴亚语",gd:"苏格兰盖尔语",gez:"吉兹语",gil:"吉尔伯特语",gl:"加利西亚语",gmh:"中古高地德语",gn:"瓜拉尼语",goh:"古高地德语",gon:"冈德语",gor:"哥伦打洛语",got:"哥特语",grb:"格列博语",grc:"古希腊语",gsw:"瑞士德语",gu:"古吉拉特语",guz:"古西语",gv:"马恩语",gwi:"哥威迅语",ha:"豪萨语",hai:"海达语",hak:"客家语",haw:"夏威夷语",he:"希伯来语",hi:"印地语",hil:"希利盖农语",hit:"赫梯语",hmn:"苗语",ho:"希里莫图语",hr:"克罗地亚语",hsb:"上索布语",hsn:"湘语",ht:"海地克里奥尔语",hu:"匈牙利语",hup:"胡帕语",hy:"亚美尼亚语",hz:"赫雷罗语",ia:"国际语",iba:"伊班语",ibb:"伊比比奥语",id:"印度尼西亚语",ie:"国际文字(E)",ig:"伊博语",ii:"四川彝语",ik:"伊努皮克语",ilo:"伊洛卡诺语",inh:"印古什语",io:"伊多语",is:"冰岛语",it:"意大利语",iu:"因纽特语",ja:"日语",jbo:"逻辑语",jgo:"恩艮巴语",jmc:"马切姆语",jpr:"犹太波斯语",jrb:"犹太阿拉伯语",jv:"爪哇语",ka:"格鲁吉亚语",kaa:"卡拉卡尔帕克语",kab:"卡拜尔语",kac:"克钦语",kaj:"卡捷语",kam:"卡姆巴语",kaw:"卡威语",kbd:"卡巴尔德语",kbl:"加涅姆布语",kcg:"卡塔布语",kde:"马孔德语",kea:"卡布佛得鲁语",kfo:"克罗语",kg:"刚果语",kha:"卡西语",kho:"和田语",khq:"西桑海语",ki:"吉库尤语",kj:"宽亚玛语",kk:"哈萨克语",kkj:"卡库语",kl:"格陵兰语",kln:"卡伦金语",km:"高棉语",kmb:"金邦杜语",kn:"卡纳达语",ko:"韩语",koi:"科米-彼尔米亚克语",kok:"孔卡尼语",kos:"科斯拉伊语",kpe:"克佩列语",kr:"卡努里语",krc:"卡拉恰伊巴尔卡尔语",krl:"卡累利阿语",kru:"库鲁克语",ks:"克什米尔语",ksb:"香巴拉语",ksf:"巴菲亚语",ksh:"科隆语",ku:"库尔德语",kum:"库梅克语",kut:"库特奈语",kv:"科米语",kw:"康沃尔语",ky:"柯尔克孜语",la:"拉丁语",lad:"拉迪诺语",lag:"朗吉语",lah:"印度-雅利安语",lam:"兰巴语",lb:"卢森堡语",lez:"列兹金语",lg:"卢干达语",li:"林堡语",lkt:"拉科塔语",ln:"林加拉语",lo:"老挝语",lol:"蒙戈语",lou:"路易斯安那克里奥尔语",loz:"洛齐语",lrc:"北卢尔语",lt:"立陶宛语",lu:"鲁巴加丹加语",lua:"卢巴-卢拉语",lui:"卢伊塞诺语",lun:"隆达语",luo:"卢奥语",lus:"米佐语",luy:"卢雅语",lv:"拉脱维亚语",mad:"马都拉语",maf:"马法语",mag:"摩揭陀语",mai:"迈蒂利语",mak:"望加锡语",man:"曼丁哥语",mas:"马赛语",mde:"马坝语",mdf:"莫克沙语",mdr:"曼达尔语",men:"门德语",mer:"梅鲁语",mfe:"毛里求斯克里奥尔语",mg:"马拉加斯语",mga:"中古爱尔兰语",mgh:"马库阿语",mgo:"梅塔语",mh:"马绍尔语",mi:"毛利语",mic:"密克马克语",min:"米南佳保语",mk:"马其顿语",ml:"马拉雅拉姆语",mn:"蒙古语",mnc:"满语",mni:"曼尼普尔语",moh:"摩霍克语",mos:"莫西语",mr:"马拉地语",ms:"马来语",mt:"马耳他语",mua:"蒙当语",mus:"克里克语",mwl:"米兰德斯语",mwr:"马尔瓦里语",my:"缅甸语",mye:"姆耶内语",myv:"厄尔兹亚语",mzn:"马赞德兰语",na:"瑙鲁语",nan:"闽南语",nap:"那不勒斯语",naq:"纳马语",nb:"书面挪威语",nd:"北恩德贝勒语",nds:"低地德语","nds-NL":"低萨克森语",ne:"尼泊尔语","new":"尼瓦尔语",ng:"恩东加语",nia:"尼亚斯语",niu:"纽埃语",nl:"荷兰语","nl-BE":"弗拉芒语",nmg:"夸西奥语",nn:"挪威尼诺斯克语",nnh:"恩甘澎语",no:"挪威语",nog:"诺盖语",non:"古诺尔斯语",nqo:"西非书面文字",nr:"南恩德贝勒语",nso:"北索托语",nus:"努埃尔语",nv:"纳瓦霍语",nwc:"古典尼瓦尔语",ny:"齐切瓦语",nym:"尼扬韦齐语",nyn:"尼昂科勒语",nyo:"尼奥罗语",nzi:"恩济马语",oc:"奥克语",oj:"奥吉布瓦语",om:"奥罗莫语",or:"奥里亚语",os:"奥塞梯语",osa:"奥塞治语",ota:"奥斯曼土耳其语",pa:"旁遮普语",pag:"邦阿西南语",pal:"巴拉维语",pam:"邦板牙语",pap:"帕皮阿门托语",pau:"帕劳语",pcm:"尼日利亚皮钦语",peo:"古波斯语",phn:"腓尼基语",pi:"巴利语",pl:"波兰语",pon:"波纳佩语",prg:"普鲁士语",pro:"古普罗文斯语",ps:"普什图语",pt:"葡萄牙语","pt-BR":"巴西葡萄牙语","pt-PT":"欧洲葡萄牙语",qu:"克丘亚语",quc:"基切语",raj:"拉贾斯坦语",rap:"拉帕努伊语",rar:"拉罗汤加语",rm:"罗曼什语",rn:"隆迪语",ro:"罗马尼亚语","ro-MD":"摩尔多瓦语",rof:"兰博语",rom:"吉普赛语",root:"根语言",ru:"俄语",rup:"阿罗马尼亚语",rw:"卢旺达语",rwk:"罗瓦语",sa:"梵语",sad:"桑达韦语",sah:"萨哈语",sam:"萨马利亚阿拉姆语",saq:"桑布鲁语",sas:"萨萨克文",sat:"桑塔利语",sba:"甘拜语",sbp:"桑古语",sc:"萨丁语",scn:"西西里语",sco:"苏格兰语",sd:"信德语",sdh:"南库尔德语",se:"北方萨米语",see:"塞内卡语",seh:"塞纳语",sel:"塞尔库普语",ses:"东桑海语",sg:"桑戈语",sga:"古爱尔兰语",sh:"塞尔维亚-克罗地亚语",shi:"希尔哈语",shn:"掸语",shu:"乍得阿拉伯语",si:"僧伽罗语",sid:"悉达摩语",sk:"斯洛伐克语",sl:"斯洛文尼亚语",sm:"萨摩亚语",sma:"南萨米语",smj:"吕勒萨米语",smn:"伊纳里萨米语",sms:"斯科特萨米语",sn:"绍纳语",snk:"索宁克语",so:"索马里语",sog:"粟特语",sq:"阿尔巴尼亚语",sr:"塞尔维亚语",srn:"苏里南汤加语",srr:"塞雷尔语",ss:"斯瓦蒂语",ssy:"萨霍语",st:"南索托语",su:"巽他语",suk:"苏库马语",sus:"苏苏语",sux:"苏美尔语",sv:"瑞典语",sw:"斯瓦希里语","sw-CD":"刚果斯瓦希里语",swb:"科摩罗语",syc:"古典叙利亚语",syr:"叙利亚语",ta:"泰米尔语",te:"泰卢固语",tem:"泰姆奈语",teo:"特索语",ter:"特伦诺语",tet:"德顿语",tg:"塔吉克语",th:"泰语",ti:"提格利尼亚语",tig:"提格雷语",tiv:"蒂夫语",tk:"土库曼语",tkl:"托克劳语",tl:"他加禄语",tlh:"克林贡语",tli:"特林吉特语",tmh:"塔马奇克语",tn:"茨瓦纳语",to:"汤加语",tog:"尼亚萨汤加语",tpi:"托克皮辛语",tr:"土耳其语",trv:"赛德克语",ts:"聪加语",tsi:"钦西安语",tt:"鞑靼语",tum:"通布卡语",tvl:"图瓦卢语",tw:"契维语",twq:"北桑海语",ty:"塔希提语",tyv:"图瓦语",tzm:"塔马齐格特语",udm:"乌德穆尔特语",ug:"维吾尔语",uga:"乌加里特语",uk:"乌克兰语",umb:"翁本杜语",ur:"乌尔都语",uz:"乌兹别克语",vai:"瓦伊语",ve:"文达语",vep:"维普森语",vi:"越南语",vo:"沃拉普克语",vot:"沃提克语",vun:"温旧语",wa:"瓦隆语",wae:"瓦尔瑟语",wal:"瓦拉莫语",war:"瓦瑞语",was:"瓦绍语",wbp:"瓦尔皮瑞语",wo:"沃洛夫语",wuu:"吴语",xal:"卡尔梅克语",xh:"科萨语",xog:"索加语",yao:"瑶族语",yap:"雅浦语",yav:"洋卞语",ybb:"耶姆巴语",yi:"意第绪语",yo:"约鲁巴语",yue:"粤语",za:"壮语",zap:"萨波蒂克语",zbl:"布里斯符号",zen:"泽纳加语",zgh:"标准摩洛哥塔马塞特语",zh:"中文","zh-Hans":"现代标准汉语","zh-Hant":"台湾国语",zu:"祖鲁语",zun:"祖尼语",zza:"扎扎语"},scriptNames:{Cyrl:"西里尔文",Latn:"拉丁文",Arab:"阿拉伯文",Guru:"果鲁穆奇文",Tfng:"提非纳文",Vaii:"瓦依文",Hans:"简体",Hant:"繁体"}},"zh-CN":{rtl:false,languageNames:{aa:"阿法尔语",ab:"阿布哈西亚语",ace:"亚齐语",ach:"阿乔利语",ada:"阿当梅语",ady:"阿迪格语",ae:"阿维斯塔语",af:"南非荷兰语",afh:"阿弗里希利语",agq:"亚罕语",ain:"阿伊努语",ak:"阿肯语",akk:"阿卡德语",ale:"阿留申语",alt:"南阿尔泰语",am:"阿姆哈拉语",an:"阿拉贡语",ang:"古英语",anp:"昂加语",ar:"阿拉伯语","ar-001":"现代标准阿拉伯语",arc:"阿拉米语",arn:"马普切语",arp:"阿拉帕霍语",ars:"纳吉迪阿拉伯语",arw:"阿拉瓦克语",as:"阿萨姆语",asa:"帕雷语",ast:"阿斯图里亚斯语",av:"阿瓦尔语",awa:"阿瓦德语",ay:"艾马拉语",az:"阿塞拜疆语","az-Arab":"南阿塞拜疆语",ba:"巴什基尔语",bal:"俾路支语",ban:"巴厘语",bas:"巴萨语",bax:"巴姆穆语",bbj:"戈马拉语",be:"白俄罗斯语",bej:"贝沙语",bem:"本巴语",bez:"贝纳语",bfd:"巴非特语",bg:"保加利亚语",bgn:"西俾路支语",bho:"博杰普尔语",bi:"比斯拉马语",bik:"比科尔语",bin:"比尼语",bkm:"科姆语",bla:"西克西卡语",bm:"班巴拉语",bn:"孟加拉语",bo:"藏语",br:"布列塔尼语",bra:"布拉杰语",brx:"博多语",bs:"波斯尼亚语",bss:"阿库色语",bua:"布里亚特语",bug:"布吉语",bum:"布鲁语",byn:"比林语",byv:"梅敦巴语",ca:"加泰罗尼亚语",cad:"卡多语",car:"加勒比语",cay:"卡尤加语",cch:"阿灿语",ccp:"查克玛语",ce:"车臣语",ceb:"宿务语",cgg:"奇加语",ch:"查莫罗语",chb:"奇布查语",chg:"察合台语",chk:"楚克语",chm:"马里语",chn:"奇努克混合语",cho:"乔克托语",chp:"奇佩维安语",chr:"切罗基语",chy:"夏延语",ckb:"中库尔德语",co:"科西嘉语",cop:"科普特语",cr:"克里族语",crh:"克里米亚土耳其语",crs:"塞舌尔克里奥尔语",cs:"捷克语",csb:"卡舒比语",cu:"教会斯拉夫语",cv:"楚瓦什语",cy:"威尔士语",da:"丹麦语",dak:"达科他语",dar:"达尔格瓦语",dav:"台塔语",de:"德语","de-AT":"奥地利德语","de-CH":"瑞士高地德语",del:"特拉华语",den:"史拉维语",dgr:"多格里布语",din:"丁卡语",dje:"哲尔马语",doi:"多格拉语",dsb:"下索布语",dua:"都阿拉语",dum:"中古荷兰语",dv:"迪维希语",dyo:"朱拉语",dyu:"迪尤拉语",dz:"宗卡语",dzg:"达扎葛语",ebu:"恩布语",ee:"埃维语",efi:"埃菲克语",egy:"古埃及语",eka:"艾卡朱克语",el:"希腊语",elx:"埃兰语",en:"英语","en-AU":"澳大利亚英语","en-CA":"加拿大英语","en-GB":"英国英语","en-US":"美国英语",enm:"中古英语",eo:"世界语",es:"西班牙语","es-419":"拉丁美洲西班牙语","es-ES":"欧洲西班牙语","es-MX":"墨西哥西班牙语",et:"爱沙尼亚语",eu:"巴斯克语",ewo:"旺杜语",fa:"波斯语",fan:"芳格语",fat:"芳蒂语",ff:"富拉语",fi:"芬兰语",fil:"菲律宾语",fj:"斐济语",fo:"法罗语",fon:"丰语",fr:"法语","fr-CA":"加拿大法语","fr-CH":"瑞士法语",frc:"卡真法语",frm:"中古法语",fro:"古法语",frr:"北弗里西亚语",frs:"东弗里西亚语",fur:"弗留利语",fy:"西弗里西亚语",ga:"爱尔兰语",gaa:"加族语",gag:"加告兹语",gan:"赣语",gay:"迦约语",gba:"格巴亚语",gd:"苏格兰盖尔语",gez:"吉兹语",gil:"吉尔伯特语",gl:"加利西亚语",gmh:"中古高地德语",gn:"瓜拉尼语",goh:"古高地德语",gon:"冈德语",gor:"哥伦打洛语",got:"哥特语",grb:"格列博语",grc:"古希腊语",gsw:"瑞士德语",gu:"古吉拉特语",guz:"古西语",gv:"马恩语",gwi:"哥威迅语",ha:"豪萨语",hai:"海达语",hak:"客家语",haw:"夏威夷语",he:"希伯来语",hi:"印地语",hil:"希利盖农语",hit:"赫梯语",hmn:"苗语",ho:"希里莫图语",hr:"克罗地亚语",hsb:"上索布语",hsn:"湘语",ht:"海地克里奥尔语",hu:"匈牙利语",hup:"胡帕语",hy:"亚美尼亚语",hz:"赫雷罗语",ia:"国际语",iba:"伊班语",ibb:"伊比比奥语",id:"印度尼西亚语",ie:"国际文字(E)",ig:"伊博语",ii:"四川彝语",ik:"伊努皮克语",ilo:"伊洛卡诺语",inh:"印古什语",io:"伊多语",is:"冰岛语",it:"意大利语",iu:"因纽特语",ja:"日语",jbo:"逻辑语",jgo:"恩艮巴语",jmc:"马切姆语",jpr:"犹太波斯语",jrb:"犹太阿拉伯语",jv:"爪哇语",ka:"格鲁吉亚语",kaa:"卡拉卡尔帕克语",kab:"卡拜尔语",kac:"克钦语",kaj:"卡捷语",kam:"卡姆巴语",kaw:"卡威语",kbd:"卡巴尔德语",kbl:"加涅姆布语",kcg:"卡塔布语",kde:"马孔德语",kea:"卡布佛得鲁语",kfo:"克罗语",kg:"刚果语",kha:"卡西语",kho:"和田语",khq:"西桑海语",ki:"吉库尤语",kj:"宽亚玛语",kk:"哈萨克语",kkj:"卡库语",kl:"格陵兰语",kln:"卡伦金语",km:"高棉语",kmb:"金邦杜语",kn:"卡纳达语",ko:"韩语",koi:"科米-彼尔米亚克语",kok:"孔卡尼语",kos:"科斯拉伊语",kpe:"克佩列语",kr:"卡努里语",krc:"卡拉恰伊巴尔卡尔语",krl:"卡累利阿语",kru:"库鲁克语",ks:"克什米尔语",ksb:"香巴拉语",ksf:"巴菲亚语",ksh:"科隆语",ku:"库尔德语",kum:"库梅克语",kut:"库特奈语",kv:"科米语",kw:"康沃尔语",ky:"柯尔克孜语",la:"拉丁语",lad:"拉迪诺语",lag:"朗吉语",lah:"印度-雅利安语",lam:"兰巴语",lb:"卢森堡语",lez:"列兹金语",lg:"卢干达语",li:"林堡语",lkt:"拉科塔语",ln:"林加拉语",lo:"老挝语",lol:"蒙戈语",lou:"路易斯安那克里奥尔语",loz:"洛齐语",lrc:"北卢尔语",lt:"立陶宛语",lu:"鲁巴加丹加语",lua:"卢巴-卢拉语",lui:"卢伊塞诺语",lun:"隆达语",luo:"卢奥语",lus:"米佐语",luy:"卢雅语",lv:"拉脱维亚语",mad:"马都拉语",maf:"马法语",mag:"摩揭陀语",mai:"迈蒂利语",mak:"望加锡语",man:"曼丁哥语",mas:"马赛语",mde:"马坝语",mdf:"莫克沙语",mdr:"曼达尔语",men:"门德语",mer:"梅鲁语",mfe:"毛里求斯克里奥尔语",mg:"马拉加斯语",mga:"中古爱尔兰语",mgh:"马库阿语",mgo:"梅塔语",mh:"马绍尔语",mi:"毛利语",mic:"密克马克语",min:"米南佳保语",mk:"马其顿语",ml:"马拉雅拉姆语",mn:"蒙古语",mnc:"满语",mni:"曼尼普尔语",moh:"摩霍克语",mos:"莫西语",mr:"马拉地语",ms:"马来语",mt:"马耳他语",mua:"蒙当语",mus:"克里克语",mwl:"米兰德斯语",mwr:"马尔瓦里语",my:"缅甸语",mye:"姆耶内语",myv:"厄尔兹亚语",mzn:"马赞德兰语",na:"瑙鲁语",nan:"闽南语",nap:"那不勒斯语",naq:"纳马语",nb:"书面挪威语",nd:"北恩德贝勒语",nds:"低地德语","nds-NL":"低萨克森语",ne:"尼泊尔语","new":"尼瓦尔语",ng:"恩东加语",nia:"尼亚斯语",niu:"纽埃语",nl:"荷兰语","nl-BE":"弗拉芒语",nmg:"夸西奥语",nn:"挪威尼诺斯克语",nnh:"恩甘澎语",no:"挪威语",nog:"诺盖语",non:"古诺尔斯语",nqo:"西非书面文字",nr:"南恩德贝勒语",nso:"北索托语",nus:"努埃尔语",nv:"纳瓦霍语",nwc:"古典尼瓦尔语",ny:"齐切瓦语",nym:"尼扬韦齐语",nyn:"尼昂科勒语",nyo:"尼奥罗语",nzi:"恩济马语",oc:"奥克语",oj:"奥吉布瓦语",om:"奥罗莫语",or:"奥里亚语",os:"奥塞梯语",osa:"奥塞治语",ota:"奥斯曼土耳其语",pa:"旁遮普语",pag:"邦阿西南语",pal:"巴拉维语",pam:"邦板牙语",pap:"帕皮阿门托语",pau:"帕劳语",pcm:"尼日利亚皮钦语",peo:"古波斯语",phn:"腓尼基语",pi:"巴利语",pl:"波兰语",pon:"波纳佩语",prg:"普鲁士语",pro:"古普罗文斯语",ps:"普什图语",pt:"葡萄牙语","pt-BR":"巴西葡萄牙语","pt-PT":"欧洲葡萄牙语",qu:"克丘亚语",quc:"基切语",raj:"拉贾斯坦语",rap:"拉帕努伊语",rar:"拉罗汤加语",rm:"罗曼什语",rn:"隆迪语",ro:"罗马尼亚语","ro-MD":"摩尔多瓦语",rof:"兰博语",rom:"吉普赛语",root:"根语言",ru:"俄语",rup:"阿罗马尼亚语",rw:"卢旺达语",rwk:"罗瓦语",sa:"梵语",sad:"桑达韦语",sah:"萨哈语",sam:"萨马利亚阿拉姆语",saq:"桑布鲁语",sas:"萨萨克文",sat:"桑塔利语",sba:"甘拜语",sbp:"桑古语",sc:"萨丁语",scn:"西西里语",sco:"苏格兰语",sd:"信德语",sdh:"南库尔德语",se:"北方萨米语",see:"塞内卡语",seh:"塞纳语",sel:"塞尔库普语",ses:"东桑海语",sg:"桑戈语",sga:"古爱尔兰语",sh:"塞尔维亚-克罗地亚语",shi:"希尔哈语",shn:"掸语",shu:"乍得阿拉伯语",si:"僧伽罗语",sid:"悉达摩语",sk:"斯洛伐克语",sl:"斯洛文尼亚语",sm:"萨摩亚语",sma:"南萨米语",smj:"吕勒萨米语",smn:"伊纳里萨米语",sms:"斯科特萨米语",sn:"绍纳语",snk:"索宁克语",so:"索马里语",sog:"粟特语",sq:"阿尔巴尼亚语",sr:"塞尔维亚语",srn:"苏里南汤加语",srr:"塞雷尔语",ss:"斯瓦蒂语",ssy:"萨霍语",st:"南索托语",su:"巽他语",suk:"苏库马语",sus:"苏苏语",sux:"苏美尔语",sv:"瑞典语",sw:"斯瓦希里语","sw-CD":"刚果斯瓦希里语",swb:"科摩罗语",syc:"古典叙利亚语",syr:"叙利亚语",ta:"泰米尔语",te:"泰卢固语",tem:"泰姆奈语",teo:"特索语",ter:"特伦诺语",tet:"德顿语",tg:"塔吉克语",th:"泰语",ti:"提格利尼亚语",tig:"提格雷语",tiv:"蒂夫语",tk:"土库曼语",tkl:"托克劳语",tl:"他加禄语",tlh:"克林贡语",tli:"特林吉特语",tmh:"塔马奇克语",tn:"茨瓦纳语",to:"汤加语",tog:"尼亚萨汤加语",tpi:"托克皮辛语",tr:"土耳其语",trv:"赛德克语",ts:"聪加语",tsi:"钦西安语",tt:"鞑靼语",tum:"通布卡语",tvl:"图瓦卢语",tw:"契维语",twq:"北桑海语",ty:"塔希提语",tyv:"图瓦语",tzm:"塔马齐格特语",udm:"乌德穆尔特语",ug:"维吾尔语",uga:"乌加里特语",uk:"乌克兰语",umb:"翁本杜语",ur:"乌尔都语",uz:"乌兹别克语",vai:"瓦伊语",ve:"文达语",vep:"维普森语",vi:"越南语",vo:"沃拉普克语",vot:"沃提克语",vun:"温旧语",wa:"瓦隆语",wae:"瓦尔瑟语",wal:"瓦拉莫语",war:"瓦瑞语",was:"瓦绍语",wbp:"瓦尔皮瑞语",wo:"沃洛夫语",wuu:"吴语",xal:"卡尔梅克语",xh:"科萨语",xog:"索加语",yao:"瑶族语",yap:"雅浦语",yav:"洋卞语",ybb:"耶姆巴语",yi:"意第绪语",yo:"约鲁巴语",yue:"粤语",za:"壮语",zap:"萨波蒂克语",zbl:"布里斯符号",zen:"泽纳加语",zgh:"标准摩洛哥塔马塞特语",zh:"中文","zh-Hans":"现代标准汉语","zh-Hant":"台湾国语",zu:"祖鲁语",zun:"祖尼语",zza:"扎扎语"},scriptNames:{Cyrl:"西里尔文",Latn:"拉丁文",Arab:"阿拉伯文",Guru:"果鲁穆奇文",Tfng:"提非纳文",Vaii:"瓦依文",Hans:"简体",Hant:"繁体"}},"zh-HK":{rtl:false,languageNames:{aa:"阿法爾文",ab:"阿布哈茲文",ace:"亞齊文",ach:"阿僑利文",ada:"阿當莫文",ady:"阿迪各文",ae:"阿維斯塔文",aeb:"突尼斯阿拉伯文",af:"南非荷蘭文",afh:"阿弗里希利文",agq:"亞罕文",ain:"阿伊努文",ak:"阿坎文",akk:"阿卡德文",akz:"阿拉巴馬文",ale:"阿留申文",aln:"蓋格阿爾巴尼亞文",alt:"南阿爾泰文",am:"阿姆哈拉文",an:"阿拉貢文",ang:"古英文",anp:"昂加文",ar:"阿拉伯文","ar-001":"現代標準阿拉伯文",arc:"阿拉米文",arn:"馬普切文",aro:"阿拉奧納文",arp:"阿拉帕霍文",arq:"阿爾及利亞阿拉伯文",ars:"納吉迪阿拉伯文",arw:"阿拉瓦克文",ary:"摩洛哥阿拉伯文",arz:"埃及阿拉伯文",as:"阿薩姆文",asa:"阿蘇文",ase:"美國手語",ast:"阿斯圖里亞文",av:"阿瓦爾文",avk:"科塔瓦文",awa:"阿瓦文",ay:"艾馬拉文",az:"阿塞拜疆文","az-Arab":"南阿塞拜疆文",ba:"巴什基爾文",bal:"俾路支文",ban:"峇里文",bar:"巴伐利亞文",bas:"巴薩文",bax:"巴姆穆文",bbc:"巴塔克托巴文",bbj:"戈馬拉文",be:"白俄羅斯文",bej:"貝扎文",bem:"別姆巴文",bew:"貝塔維文",bez:"貝納文",bfd:"富特文",bfq:"巴達加文",bg:"保加利亞文",bgn:"西俾路支文",bho:"博傑普爾文",bi:"比斯拉馬文",bik:"比科爾文",bin:"比尼文",bjn:"班亞爾文",bkm:"康姆文",bla:"錫克錫卡文",bm:"班巴拉文",bn:"孟加拉文",bo:"藏文",bpy:"比什奴普萊利亞文",bqi:"巴赫蒂亞里文",br:"布里多尼文",bra:"布拉杰文",brh:"布拉維文",brx:"博多文",bs:"波斯尼亞文",bss:"阿庫色文",bua:"布里阿特文",bug:"布吉斯文",bum:"布魯文",byn:"比林文",byv:"梅敦巴文",ca:"加泰隆尼亞文",cad:"卡多文",car:"加勒比文",cay:"卡尤加文",cch:"阿燦文",ccp:"查克馬文",ce:"車臣文",ceb:"宿霧文",cgg:"奇加文",ch:"查莫洛文",chb:"奇布查文",chg:"查加文",chk:"處奇斯文",chm:"馬里文",chn:"契奴克文",cho:"喬克托文",chp:"奇佩瓦揚文",chr:"柴羅基文",chy:"沙伊安文",ckb:"中庫德文",co:"科西嘉文",cop:"科普特文",cps:"卡皮茲文",cr:"克里文",crh:"克里米亞韃靼文",crs:"塞舌爾克里奧爾法文",cs:"捷克文",csb:"卡舒布文",cu:"宗教斯拉夫文",cv:"楚瓦什文",cy:"威爾斯文",da:"丹麥文",dak:"達科他文",dar:"達爾格瓦文",dav:"台塔文",de:"德文","de-AT":"奧地利德文","de-CH":"瑞士德語",del:"德拉瓦文",den:"斯拉夫文",dgr:"多格里布文",din:"丁卡文",dje:"扎爾馬文",doi:"多格來文",dsb:"下索布文",dtp:"中部杜順文",dua:"杜亞拉文",dum:"中古荷蘭文",dv:"迪維西文",dyo:"朱拉文",dyu:"迪尤拉文",dz:"宗卡文",dzg:"達薩文",ebu:"恩布文",ee:"埃維文",efi:"埃菲克文",egl:"埃米利安文",egy:"古埃及文",eka:"艾卡朱克文",el:"希臘文",elx:"埃蘭文",en:"英文","en-AU":"澳洲英文","en-CA":"加拿大英文","en-GB":"英國英文","en-US":"美國英文",enm:"中古英文",eo:"世界語",es:"西班牙文","es-419":"拉丁美洲西班牙文","es-ES":"歐洲西班牙文","es-MX":"墨西哥西班牙文",esu:"中尤皮克文",et:"愛沙尼亞文",eu:"巴斯克文",ewo:"依汪都文",ext:"埃斯特雷馬杜拉文",fa:"波斯文",fan:"芳族文",fat:"芳蒂文",ff:"富拉文",fi:"芬蘭文",fil:"菲律賓文",fit:"托爾訥芬蘭文",fj:"斐濟文",fo:"法羅文",fon:"豐文",fr:"法文","fr-CA":"加拿大法文","fr-CH":"瑞士法文",frc:"卡真法文",frm:"中古法文",fro:"古法文",frp:"法蘭克-普羅旺斯文",frr:"北弗里西亞文",frs:"東弗里西亞文",fur:"弗留利文",fy:"西弗里西亞文",ga:"愛爾蘭文",gaa:"加族文",gag:"加告茲文",gan:"贛語",gay:"加約文",gba:"葛巴亞文",gbz:"索羅亞斯德教達里文",gd:"蘇格蘭蓋爾文",gez:"吉茲文",gil:"吉爾伯特文",gl:"加里西亞文",glk:"吉拉基文",gmh:"中古高地德文",gn:"瓜拉尼文",goh:"古高地德文",gom:"孔卡尼文",gon:"岡德文",gor:"科隆達羅文",got:"哥德文",grb:"格列博文",grc:"古希臘文",gsw:"瑞士德文",gu:"古吉拉特文",guc:"瓦尤文",gur:"弗拉弗拉文",guz:"古西文",gv:"曼島文",gwi:"圭契文",ha:"豪撒文",hai:"海達文",hak:"客家話",haw:"夏威夷文",he:"希伯來文",hi:"印地文",hif:"斐濟印地文",hil:"希利蓋農文",hit:"赫梯文",hmn:"苗語",ho:"西里莫圖土文",hr:"克羅地亞文",hsb:"上索布文",hsn:"湘語",ht:"海地文",hu:"匈牙利文",hup:"胡帕文",hy:"亞美尼亞文",hz:"赫雷羅文",ia:"國際文",iba:"伊班文",ibb:"伊比比奧文",id:"印尼文",ie:"國際文(E)",ig:"伊布文",ii:"四川彝文",ik:"依奴皮維克文",ilo:"伊洛闊文",inh:"印古什文",io:"伊多文",is:"冰島文",it:"意大利文",iu:"因紐特文",izh:"英格里亞文",ja:"日文",jam:"牙買加克里奧爾英文",jbo:"邏輯文",jgo:"恩格姆巴文",jmc:"馬恰美文",jpr:"猶太波斯文",jrb:"猶太阿拉伯文",jut:"日德蘭文",jv:"爪哇文",ka:"格魯吉亞文",kaa:"卡拉卡爾帕克文",kab:"卡比爾文",kac:"卡琴文",kaj:"卡捷文",kam:"卡姆巴文",kaw:"卡威文",kbd:"卡巴爾達文",kbl:"卡念布文",kcg:"卡塔布文",kde:"馬孔德文",kea:"卡布威爾第文",ken:"肯揚文",kfo:"科羅文",kg:"剛果文",kgp:"坎剛文",kha:"卡西文",kho:"和闐文",khq:"西桑海文",khw:"科瓦文",ki:"吉庫尤文",kiu:"扎扎其文",kj:"廣亞馬文",kk:"哈薩克文",kkj:"卡庫文",kl:"格陵蘭文",kln:"卡倫金文",km:"高棉文",kmb:"金邦杜文",kn:"坎納達文",ko:"韓文",koi:"科米-彼爾米亞克文",kok:"貢根文",kos:"科斯雷恩文",kpe:"克佩列文",kr:"卡努里文",krc:"卡拉柴-包爾卡爾文",kri:"克裡奧爾文",krj:"基那來阿文",krl:"卡累利阿文",kru:"庫魯科文",ks:"喀什米爾文",ksb:"尚巴拉文",ksf:"巴菲亞文",ksh:"科隆文",ku:"庫德文",kum:"庫密克文",kut:"庫特奈文",kv:"科米文",kw:"康瓦耳文",ky:"吉爾吉斯文",la:"拉丁文",lad:"拉迪諾文",lag:"朗吉文",lah:"拉亨達文",lam:"蘭巴文",lb:"盧森堡文",lez:"列茲干文",lfn:"新共同語言",lg:"干達文",li:"林堡文",lij:"利古里亞文",liv:"利伏尼亞文",lkt:"拉科塔文",lmo:"倫巴底文",ln:"林加拉文",lo:"老撾文",lol:"芒戈文",lou:"路易斯安那克里奧爾文",loz:"洛齊文",lrc:"北盧爾文",lt:"立陶宛文",ltg:"拉特加萊文",lu:"魯巴加丹加文",lua:"魯巴魯魯亞文",lui:"路易塞諾文",lun:"盧恩達文",luo:"盧歐文",lus:"米佐文",luy:"盧雅文",lv:"拉脫維亞文",lzh:"文言文",lzz:"拉茲文",mad:"馬都拉文",maf:"馬法文",mag:"馬加伊文",mai:"邁蒂利文",mak:"望加錫文",man:"曼丁哥文",mas:"馬賽文",mde:"馬巴文",mdf:"莫克沙文",mdr:"曼達文",men:"門德文",mer:"梅魯文",mfe:"毛里裘斯克里奧爾文",mg:"馬拉加斯文",mga:"中古愛爾蘭文",mgh:"馬夸文",mgo:"美塔文",mh:"馬紹爾文",mi:"毛利文",mic:"米克馬克文",min:"米南卡堡文",mk:"馬其頓文",ml:"馬拉雅拉姆文",mn:"蒙古文",mnc:"滿族文",mni:"曼尼普爾文",moh:"莫霍克文",mos:"莫西文",mr:"馬拉地文",mrj:"西馬里文",ms:"馬來文",mt:"馬耳他文",mua:"蒙當文",mus:"克里克文",mwl:"米蘭德斯文",mwr:"馬瓦里文",mwv:"明打威文",my:"緬甸文",mye:"姆耶內文",myv:"厄爾茲亞文",mzn:"馬贊德蘭文",na:"諾魯文",nan:"閩南語",nap:"拿波里文",naq:"納馬文",nb:"巴克摩挪威文",nd:"北地畢列文",nds:"低地德文","nds-NL":"低地薩克遜文",ne:"尼泊爾文","new":"尼瓦爾文",ng:"恩東加文",nia:"尼亞斯文",niu:"紐埃文",njo:"阿沃那加文",nl:"荷蘭文","nl-BE":"比利時荷蘭文",nmg:"夸西奧文",nn:"耐諾斯克挪威文",nnh:"恩甘澎文",no:"挪威文",nog:"諾蓋文",non:"古諾爾斯文",nov:"諾維亞文",nqo:"西非書面語言(N’ko)",nr:"南地畢列文",nso:"北索托文",nus:"努埃爾文",nv:"納瓦霍文",nwc:"古尼瓦爾文",ny:"尼揚賈文",nym:"尼揚韋齊文",nyn:"尼揚科萊文",nyo:"尼奧囉文",nzi:"尼茲馬文",oc:"奧克西坦文",oj:"奧杰布瓦文",om:"奧羅莫文",or:"奧里雅文",os:"奧塞提文",osa:"歐塞奇文",ota:"鄂圖曼土耳其文",pa:"旁遮普文",pag:"潘加辛文",pal:"巴列維文",pam:"潘帕嘉文",pap:"帕皮阿門托文",pau:"帛琉文",pcd:"庇卡底文",pcm:"尼日利亞皮欽文",pdc:"賓夕法尼亞德文",pdt:"門諾低地德文",peo:"古波斯文",pfl:"普法爾茨德文",phn:"腓尼基文",pi:"巴利文",pl:"波蘭文",pms:"皮埃蒙特文",pnt:"旁狄希臘文",pon:"波那貝文",prg:"普魯士文",pro:"古普羅旺斯文",ps:"普什圖文",pt:"葡萄牙文","pt-BR":"巴西葡萄牙文","pt-PT":"歐洲葡萄牙文",qu:"蓋楚瓦文",quc:"基切文",qug:"欽博拉索海蘭蓋丘亞文",raj:"拉賈斯坦諸文",rap:"復活島文",rar:"拉羅通加文",rgn:"羅馬格諾里文",rif:"里菲亞諾文",rm:"羅曼斯文",rn:"隆迪文",ro:"羅馬尼亞文","ro-MD":"摩爾多瓦羅馬尼亞文",rof:"蘭博文",rom:"吉普賽文",root:"根語言",rtm:"羅圖馬島文",ru:"俄文",rue:"盧森尼亞文",rug:"羅維阿納文",rup:"阿羅馬尼亞語",rw:"盧旺達文",rwk:"羅瓦文",sa:"梵文",sad:"桑達韋文",sah:"雅庫特文",sam:"薩瑪利亞阿拉姆文",saq:"薩布魯文",sas:"撒撒克文",sat:"桑塔利文",saz:"索拉什特拉文",sba:"甘拜文",sbp:"桑古文",sc:"撒丁文",scn:"西西里文",sco:"蘇格蘭文",sd:"信德文",sdc:"薩丁尼亞-薩薩里文",sdh:"南庫德文",se:"北薩米文",see:"塞訥卡文",seh:"賽納文",sei:"瑟里文",sel:"塞爾庫普文",ses:"東桑海文",sg:"桑戈文",sga:"古愛爾蘭文",sgs:"薩莫吉希亞文",sh:"塞爾維亞克羅埃西亞文",shi:"希爾哈文",shn:"撣文",shu:"阿拉伯文(查德)",si:"僧伽羅文",sid:"希達摩文",sk:"斯洛伐克文",sl:"斯洛文尼亞文",sli:"下西利西亞文",sly:"塞拉亞文",sm:"薩摩亞文",sma:"南薩米文",smj:"魯勒薩米文",smn:"伊納里薩米文",sms:"斯科特薩米文",sn:"修納文",snk:"索尼基文",so:"索馬里文",sog:"索格底亞納文",sq:"阿爾巴尼亞文",sr:"塞爾維亞文",srn:"蘇拉南東墎文",srr:"塞雷爾文",ss:"斯瓦特文",ssy:"薩霍文",st:"塞索托文",stq:"沙特菲士蘭文",su:"巽他文",suk:"蘇庫馬文",sus:"蘇蘇文",sux:"蘇美文",sv:"瑞典文",sw:"史瓦希里文","sw-CD":"剛果史瓦希里文",swb:"葛摩文",syc:"古敘利亞文",syr:"敍利亞文",szl:"西利西亞文",ta:"泰米爾文",tcy:"圖盧文",te:"泰盧固文",tem:"提姆文",teo:"特索文",ter:"泰雷諾文",tet:"泰頓文",tg:"塔吉克文",th:"泰文",ti:"提格利尼亞文",tig:"蒂格雷文",tiv:"提夫文",tk:"土庫曼文",tkl:"托克勞文",tkr:"查庫爾文",tl:"塔加路族文",tlh:"克林貢文",tli:"特林基特文",tly:"塔里什文",tmh:"塔馬奇克文",tn:"突尼西亞文",to:"湯加文",tog:"東加文(尼亞薩)",tpi:"托比辛文",tr:"土耳其文",tru:"圖羅尤文",trv:"太魯閣文",ts:"特松加文",tsd:"特薩克尼恩文",tsi:"欽西安文",tt:"韃靼文",ttt:"穆斯林塔特文",tum:"圖姆布卡文",tvl:"吐瓦魯文",tw:"特威文",twq:"北桑海文",ty:"大溪地文",tyv:"圖瓦文",tzm:"中阿特拉斯塔馬塞特文",udm:"烏德穆爾特文",ug:"維吾爾文",uga:"烏加列文",uk:"烏克蘭文",umb:"姆本杜文",ur:"烏爾都文",uz:"烏茲別克文",vai:"瓦伊文",ve:"溫達文",vec:"威尼斯文",vep:"維普森文",vi:"越南文",vls:"西佛蘭德文",vmf:"美茵-法蘭克尼亞文",vo:"沃拉普克文",vot:"沃提克文",vro:"佛羅文",vun:"溫舊文",wa:"瓦隆文",wae:"瓦爾瑟文",wal:"瓦拉莫文",war:"瓦瑞文",was:"瓦紹文",wbp:"瓦爾皮里文",wo:"沃洛夫文",wuu:"吳語",xal:"卡爾梅克文",xh:"科薩文",xmf:"明格列爾文",xog:"索加文",yao:"瑤文",yap:"雅浦文",yav:"洋卞文",ybb:"耶姆巴文",yi:"意第緒文",yo:"約魯巴文",yrl:"奈恩加圖文",yue:"廣東話",za:"壯文",zap:"薩波特克文",zbl:"布列斯符號",zea:"西蘭文",zen:"澤納加文",zgh:"摩洛哥標準塔馬齊格特文",zh:"中文","zh-Hans":"中文(簡體字)","zh-Hant":"中文(繁體字)",zu:"祖魯文",zun:"祖尼文",zza:"扎扎文"},scriptNames:{Cyrl:"西里爾文",Latn:"拉丁字母",Arab:"阿拉伯文",Guru:"古木基文",Tfng:"提非納文",Vaii:"瓦依文",Hans:"簡體字",Hant:"繁體字"}},"zh-TW":{rtl:false,languageNames:{aa:"阿法文",ab:"阿布哈茲文",ace:"亞齊文",ach:"阿僑利文",ada:"阿當莫文",ady:"阿迪各文",ae:"阿維斯塔文",aeb:"突尼斯阿拉伯文",af:"南非荷蘭文",afh:"阿弗里希利文",agq:"亞罕文",ain:"阿伊努文",ak:"阿坎文",akk:"阿卡德文",akz:"阿拉巴馬文",ale:"阿留申文",aln:"蓋格阿爾巴尼亞文",alt:"南阿爾泰文",am:"阿姆哈拉文",an:"阿拉貢文",ang:"古英文",anp:"昂加文",ar:"阿拉伯文","ar-001":"現代標準阿拉伯文",arc:"阿拉米文",arn:"馬普切文",aro:"阿拉奧納文",arp:"阿拉帕霍文",arq:"阿爾及利亞阿拉伯文",ars:"納吉迪阿拉伯文",arw:"阿拉瓦克文",ary:"摩洛哥阿拉伯文",arz:"埃及阿拉伯文",as:"阿薩姆文",asa:"阿蘇文",ase:"美國手語",ast:"阿斯圖里亞文",av:"阿瓦爾文",avk:"科塔瓦文",awa:"阿瓦文",ay:"艾馬拉文",az:"亞塞拜然文",ba:"巴什喀爾文",bal:"俾路支文",ban:"峇里文",bar:"巴伐利亞文",bas:"巴薩文",bax:"巴姆穆文",bbc:"巴塔克托巴文",bbj:"戈馬拉文",be:"白俄羅斯文",bej:"貝扎文",bem:"別姆巴文",bew:"貝塔維文",bez:"貝納文",bfd:"富特文",bfq:"巴達加文",bg:"保加利亞文",bgn:"西俾路支文",bho:"博傑普爾文",bi:"比斯拉馬文",bik:"比科爾文",bin:"比尼文",bjn:"班亞爾文",bkm:"康姆文",bla:"錫克錫卡文",bm:"班巴拉文",bn:"孟加拉文",bo:"藏文",bpy:"比什奴普萊利亞文",bqi:"巴赫蒂亞里文",br:"布列塔尼文",bra:"布拉杰文",brh:"布拉維文",brx:"博多文",bs:"波士尼亞文",bss:"阿庫色文",bua:"布里阿特文",bug:"布吉斯文",bum:"布魯文",byn:"比林文",byv:"梅敦巴文",ca:"加泰蘭文",cad:"卡多文",car:"加勒比文",cay:"卡尤加文",cch:"阿燦文",ccp:"查克馬文",ce:"車臣文",ceb:"宿霧文",cgg:"奇加文",ch:"查莫洛文",chb:"奇布查文",chg:"查加文",chk:"處奇斯文",chm:"馬里文",chn:"契奴克文",cho:"喬克托文",chp:"奇佩瓦揚文",chr:"柴羅基文",chy:"沙伊安文",ckb:"中庫德文",co:"科西嘉文",cop:"科普特文",cps:"卡皮茲文",cr:"克里文",crh:"土耳其文(克里米亞半島)",crs:"塞席爾克里奧爾法文",cs:"捷克文",csb:"卡舒布文",cu:"宗教斯拉夫文",cv:"楚瓦什文",cy:"威爾斯文",da:"丹麥文",dak:"達科他文",dar:"達爾格瓦文",dav:"台塔文",de:"德文","de-AT":"德文(奧地利)","de-CH":"高地德文(瑞士)",del:"德拉瓦文",den:"斯拉夫",dgr:"多格里布文",din:"丁卡文",dje:"扎爾馬文",doi:"多格來文",dsb:"下索布文",dtp:"中部杜順文",dua:"杜亞拉文",dum:"中古荷蘭文",dv:"迪維西文",dyo:"朱拉文",dyu:"迪尤拉文",dz:"宗卡文",dzg:"達薩文",ebu:"恩布文",ee:"埃維文",efi:"埃菲克文",egl:"埃米利安文",egy:"古埃及文",eka:"艾卡朱克文",el:"希臘文",elx:"埃蘭文",en:"英文","en-AU":"英文(澳洲)","en-CA":"英文(加拿大)","en-GB":"英文(英國)","en-US":"英文(美國)",enm:"中古英文",eo:"世界文",es:"西班牙文","es-419":"西班牙文(拉丁美洲)","es-ES":"西班牙文(西班牙)","es-MX":"西班牙文(墨西哥)",esu:"中尤皮克文",et:"愛沙尼亞文",eu:"巴斯克文",ewo:"依汪都文",ext:"埃斯特雷馬杜拉文",fa:"波斯文",fan:"芳族文",fat:"芳蒂文",ff:"富拉文",fi:"芬蘭文",fil:"菲律賓文",fit:"托爾訥芬蘭文",fj:"斐濟文",fo:"法羅文",fon:"豐文",fr:"法文","fr-CA":"法文(加拿大)","fr-CH":"法文(瑞士)",frc:"卡真法文",frm:"中古法文",fro:"古法文",frp:"法蘭克-普羅旺斯文",frr:"北弗里西亞文",frs:"東弗里西亞文",fur:"弗留利文",fy:"西弗里西亞文",ga:"愛爾蘭文",gaa:"加族文",gag:"加告茲文",gan:"贛語",gay:"加約文",gba:"葛巴亞文",gbz:"索羅亞斯德教達里文",gd:"蘇格蘭蓋爾文",gez:"吉茲文",gil:"吉爾伯特群島文",gl:"加利西亞文",glk:"吉拉基文",gmh:"中古高地德文",gn:"瓜拉尼文",goh:"古高地德文",gom:"孔卡尼文",gon:"岡德文",gor:"科隆達羅文",got:"哥德文",grb:"格列博文",grc:"古希臘文",gsw:"德文(瑞士)",gu:"古吉拉特文",guc:"瓦尤文",gur:"弗拉弗拉文",guz:"古西文",gv:"曼島文",gwi:"圭契文",ha:"豪撒文",hai:"海達文",hak:"客家話",haw:"夏威夷文",he:"希伯來文",hi:"印地文",hif:"斐濟印地文",hil:"希利蓋農文",hit:"赫梯文",hmn:"孟文",ho:"西里莫圖土文",hr:"克羅埃西亞文",hsb:"上索布文",hsn:"湘語",ht:"海地文",hu:"匈牙利文",hup:"胡帕文",hy:"亞美尼亞文",hz:"赫雷羅文",ia:"國際文",iba:"伊班文",ibb:"伊比比奧文",id:"印尼文",ie:"國際文(E)",ig:"伊布文",ii:"四川彝文",ik:"依奴皮維克文",ilo:"伊洛闊文",inh:"印古什文",io:"伊多文",is:"冰島文",it:"義大利文",iu:"因紐特文",izh:"英格里亞文",ja:"日文",jam:"牙買加克里奧爾英文",jbo:"邏輯文",jgo:"恩格姆巴文",jmc:"馬恰美文",jpr:"猶太教-波斯文",jrb:"猶太阿拉伯文",jut:"日德蘭文",jv:"爪哇文",ka:"喬治亞文",kaa:"卡拉卡爾帕克文",kab:"卡比爾文",kac:"卡琴文",kaj:"卡捷文",kam:"卡姆巴文",kaw:"卡威文",kbd:"卡巴爾達文",kbl:"卡念布文",kcg:"卡塔布文",kde:"馬孔德文",kea:"卡布威爾第文",ken:"肯揚文",kfo:"科羅文",kg:"剛果文",kgp:"坎剛文",kha:"卡西文",kho:"和闐文",khq:"西桑海文",khw:"科瓦文",ki:"吉庫尤文",kiu:"北紮紮其文",kj:"廣亞馬文",kk:"哈薩克文",kkj:"卡庫文",kl:"格陵蘭文",kln:"卡倫金文",km:"高棉文",kmb:"金邦杜文",kn:"坎那達文",ko:"韓文",koi:"科米-彼爾米亞克文",kok:"貢根文",kos:"科斯雷恩文",kpe:"克佩列文",kr:"卡努里文",krc:"卡拉柴-包爾卡爾文",kri:"塞拉利昂克裏奧爾文",krj:"基那來阿文",krl:"卡累利阿文",kru:"庫魯科文",ks:"喀什米爾文",ksb:"尚巴拉文",ksf:"巴菲亞文",ksh:"科隆文",ku:"庫德文",kum:"庫密克文",kut:"庫特奈文",kv:"科米文",kw:"康瓦耳文",ky:"吉爾吉斯文",la:"拉丁文",lad:"拉迪諾文",lag:"朗吉文",lah:"拉亨達文",lam:"蘭巴文",lb:"盧森堡文",lez:"列茲干文",lfn:"新共同語言",lg:"干達文",li:"林堡文",lij:"利古里亞文",liv:"利伏尼亞文",lkt:"拉科塔文",lmo:"倫巴底文",ln:"林加拉文",lo:"寮文",lol:"芒戈文",lou:"路易斯安那克里奧爾文",loz:"洛齊文",lrc:"北盧爾文",lt:"立陶宛文",ltg:"拉特加萊文",lu:"魯巴加丹加文",lua:"魯巴魯魯亞文",lui:"路易塞諾文",lun:"盧恩達文",luo:"盧奧文",lus:"米佐文",luy:"盧雅文",lv:"拉脫維亞文",lzh:"文言文",lzz:"拉茲文",mad:"馬都拉文",maf:"馬法文",mag:"馬加伊文",mai:"邁蒂利文",mak:"望加錫文",man:"曼丁哥文",mas:"馬賽文",mde:"馬巴文",mdf:"莫克沙文",mdr:"曼達文",men:"門德文",mer:"梅魯文",mfe:"克里奧文(模里西斯)",mg:"馬達加斯加文",mga:"中古愛爾蘭文",mgh:"馬夸文",mgo:"美塔文",mh:"馬紹爾文",mi:"毛利文",mic:"米克馬克文",min:"米南卡堡文",mk:"馬其頓文",ml:"馬來亞拉姆文",mn:"蒙古文",mnc:"滿族文",mni:"曼尼普爾文",moh:"莫霍克文",mos:"莫西文",mr:"馬拉地文",mrj:"西馬里文",ms:"馬來文",mt:"馬爾他文",mua:"蒙當文",mus:"克里克文",mwl:"米蘭德斯文",mwr:"馬瓦里文",mwv:"明打威文",my:"緬甸文",mye:"姆耶內文",myv:"厄爾茲亞文",mzn:"馬贊德蘭文",na:"諾魯文",nan:"閩南語",nap:"拿波里文",naq:"納馬文",nb:"巴克摩挪威文",nd:"北地畢列文",nds:"低地德文","nds-NL":"低地薩克遜文",ne:"尼泊爾文","new":"尼瓦爾文",ng:"恩東加文",nia:"尼亞斯文",niu:"紐埃文",njo:"阿沃那加文",nl:"荷蘭文","nl-BE":"佛蘭芒文",nmg:"夸西奧文",nn:"耐諾斯克挪威文",nnh:"恩甘澎文",no:"挪威文",nog:"諾蓋文",non:"古諾爾斯文",nov:"諾維亞文",nqo:"曼德文字 (N’Ko)",nr:"南地畢列文",nso:"北索托文",nus:"努埃爾文",nv:"納瓦霍文",nwc:"古尼瓦爾文",ny:"尼揚賈文",nym:"尼揚韋齊文",nyn:"尼揚科萊文",nyo:"尼奧囉文",nzi:"尼茲馬文",oc:"奧克西坦文",oj:"奧杰布瓦文",om:"奧羅莫文",or:"歐迪亞文",os:"奧塞提文",osa:"歐塞奇文",ota:"鄂圖曼土耳其文",pa:"旁遮普文",pag:"潘加辛文",pal:"巴列維文",pam:"潘帕嘉文",pap:"帕皮阿門托文",pau:"帛琉文",pcd:"庇卡底文",pcm:"奈及利亞皮欽文",pdc:"賓夕法尼亞德文",pdt:"門諾低地德文",peo:"古波斯文",pfl:"普法爾茨德文",phn:"腓尼基文",pi:"巴利文",pl:"波蘭文",pms:"皮埃蒙特文",pnt:"旁狄希臘文",pon:"波那貝文",prg:"普魯士文",pro:"古普羅旺斯文",ps:"普什圖文",pt:"葡萄牙文","pt-BR":"葡萄牙文(巴西)","pt-PT":"葡萄牙文(葡萄牙)",qu:"蓋楚瓦文",quc:"基切文",qug:"欽博拉索海蘭蓋丘亞文",raj:"拉賈斯坦諸文",rap:"復活島文",rar:"拉羅通加文",rgn:"羅馬格諾里文",rif:"里菲亞諾文",rm:"羅曼斯文",rn:"隆迪文",ro:"羅馬尼亞文","ro-MD":"摩爾多瓦文",rof:"蘭博文",rom:"吉普賽文",root:"根語言",rtm:"羅圖馬島文",ru:"俄文",rue:"盧森尼亞文",rug:"羅維阿納文",rup:"羅馬尼亞語系",rw:"盧安達文",rwk:"羅瓦文",sa:"梵文",sad:"桑達韋文",sah:"雅庫特文",sam:"薩瑪利亞阿拉姆文",saq:"薩布魯文",sas:"撒撒克文",sat:"桑塔利文",saz:"索拉什特拉文",sba:"甘拜文",sbp:"桑古文",sc:"撒丁文",scn:"西西里文",sco:"蘇格蘭文",sd:"信德文",sdc:"薩丁尼亞-薩薩里文",sdh:"南庫德文",se:"北薩米文",see:"塞訥卡文",seh:"賽納文",sei:"瑟里文",sel:"塞爾庫普文",ses:"東桑海文",sg:"桑戈文",sga:"古愛爾蘭文",sgs:"薩莫吉希亞文",sh:"塞爾維亞克羅埃西亞文",shi:"希爾哈文",shn:"撣文",shu:"阿拉伯文(查德)",si:"僧伽羅文",sid:"希達摩文",sk:"斯洛伐克文",sl:"斯洛維尼亞文",sli:"下西利西亞文",sly:"塞拉亞文",sm:"薩摩亞文",sma:"南薩米文",smj:"魯勒薩米文",smn:"伊納里薩米文",sms:"斯科特薩米文",sn:"紹納文",snk:"索尼基文",so:"索馬利文",sog:"索格底亞納文",sq:"阿爾巴尼亞文",sr:"塞爾維亞文",srn:"蘇拉南東墎文",srr:"塞雷爾文",ss:"斯瓦特文",ssy:"薩霍文",st:"塞索托文",stq:"沙特菲士蘭文",su:"巽他文",suk:"蘇庫馬文",sus:"蘇蘇文",sux:"蘇美文",sv:"瑞典文",sw:"史瓦希里文","sw-CD":"史瓦希里文(剛果)",swb:"葛摩文",syc:"古敘利亞文",syr:"敘利亞文",szl:"西利西亞文",ta:"坦米爾文",tcy:"圖盧文",te:"泰盧固文",tem:"提姆文",teo:"特索文",ter:"泰雷諾文",tet:"泰頓文",tg:"塔吉克文",th:"泰文",ti:"提格利尼亞文",tig:"蒂格雷文",tiv:"提夫文",tk:"土庫曼文",tkl:"托克勞文",tkr:"查庫爾文",tl:"塔加路族文",tlh:"克林貢文",tli:"特林基特文",tly:"塔里什文",tmh:"塔馬奇克文",tn:"塞茲瓦納文",to:"東加文",tog:"東加文(尼亞薩)",tpi:"托比辛文",tr:"土耳其文",tru:"圖羅尤文",trv:"太魯閣文",ts:"特松加文",tsd:"特薩克尼恩文",tsi:"欽西安文",tt:"韃靼文",ttt:"穆斯林塔特文",tum:"圖姆布卡文",tvl:"吐瓦魯文",tw:"特威文",twq:"北桑海文",ty:"大溪地文",tyv:"圖瓦文",tzm:"中阿特拉斯塔馬塞特文",udm:"烏德穆爾特文",ug:"維吾爾文",uga:"烏加列文",uk:"烏克蘭文",umb:"姆本杜文",ur:"烏都文",uz:"烏茲別克文",vai:"瓦伊文",ve:"溫達文",vec:"威尼斯文",vep:"維普森文",vi:"越南文",vls:"西佛蘭德文",vmf:"美茵-法蘭克尼亞文",vo:"沃拉普克文",vot:"沃提克文",vro:"佛羅文",vun:"溫舊文",wa:"瓦隆文",wae:"瓦爾瑟文",wal:"瓦拉莫文",war:"瓦瑞文",was:"瓦紹文",wbp:"沃皮瑞文",wo:"沃洛夫文",wuu:"吳語",xal:"卡爾梅克文",xh:"科薩文",xmf:"明格列爾文",xog:"索加文",yao:"瑤文",yap:"雅浦文",yav:"洋卞文",ybb:"耶姆巴文",yi:"意第緒文",yo:"約魯巴文",yrl:"奈恩加圖文",yue:"粵語",za:"壯文",zap:"薩波特克文",zbl:"布列斯符號",zea:"西蘭文",zen:"澤納加文",zgh:"標準摩洛哥塔馬塞特文",zh:"中文","zh-Hans":"中文(簡體)","zh-Hant":"中文(繁體)",zu:"祖魯文",zun:"祖尼文",zza:"扎扎文"},scriptNames:{Cyrl:"斯拉夫文",Latn:"拉丁文",Arab:"阿拉伯文",Guru:"古魯穆奇文",Tfng:"提非納文",Vaii:"瓦依文",Hans:"簡體",Hant:"繁體"}}};
26812
26813         var dataPhoneFormats = {ag:"+1-268-555-1234",ai:"+1-264-555-1234",as:"+1-684-555-1234",at:"+43 1 123 45 67",au:"+61 1 2345 6789",bb:"+1-246-555-1234",bj:"+229 20 12 34 56",bm:"+1-441-555-1234",bo:"+591 1 2345678",br:"+55 11 0982 1098",bs:"+1-242-555-1234",ca:"+1-226-555-1234",ci:"+225 20 12 34 56",cn:"+86 10 12345678",de:"+49 89 1234567",dm:"+1-767-555-1234","do":"+1-809-555-1234",es:"+34 989 12 34 56",fi:"+358 40 123 4567",fr:"+33 1 23 45 67 89",gb:"+44 1632 961234",gd:"+1-473-555-1234",gg:"+44 1632 961234",gu:"+1-671-555-1234",hk:"+852 1234 5678",hr:"+385 01 123 4567",hu:"+36 1 123 45 67",ie:"+353 20 912 3456",im:"+44 1632 961234",it:"+39 01 123 456",je:"+44 1632 961234",jm:"+1-876-555-1234",kn:"+1-869-555-1234",ky:"+1-345-555-1234",kz:"+7 495 1234567",lc:"+1-758-555-1234",mp:"+1-670-555-1234",ms:"+1-664-555-1234",nl:"+31 42 123 4567",no:"+47 22 12 34 56",pe:"+51 1 1234567",pl:"+48 42 123 4567",pr:"+1-787-555-1234",pt:"+351 211 123456",ru:"+7 495 1234567",se:"+46 31 123 4567",si:"+386 31 123 4567",sj:"+47 22 12 34 56",sx:"+1-721-555-1234",tc:"+1-649-555-1234",tr:"+90 312 123 4567",tt:"+1-868-555-1234",tw:"+886 1 2345 6789",ua:"+380 44 123 4567",us:"+1-202-555-1234",va:"+39 01 123 456",vc:"+1-784-555-1234",vg:"+1-284-555-1234",vi:"+1-340-555-1234",vn:"+84 1 234 5678",za:"+27 11 907 1111"};
26814
26815         var dataShortcuts = [{tab:"browsing",text:"shortcuts.browsing.title",columns:[{rows:[{section:"navigation",text:"shortcuts.browsing.navigation.title"},{shortcuts:["↓","↑","←","→"],text:"shortcuts.browsing.navigation.pan",separator:","},{modifiers:["⌘"],shortcuts:["↓","↑","←","→"],text:"shortcuts.browsing.navigation.pan_more",separator:","},{shortcuts:["+","-"],text:"shortcuts.browsing.navigation.zoom",separator:","},{modifiers:["⌘"],shortcuts:["+","-"],text:"shortcuts.browsing.navigation.zoom_more",separator:","},{section:"display_options",text:"shortcuts.browsing.display_options.title"},{shortcuts:["background.key"],text:"shortcuts.browsing.display_options.background"},{modifiers:["⌘"],shortcuts:["background.key"],text:"shortcuts.browsing.display_options.background_switch"},{shortcuts:["map_data.key"],text:"shortcuts.browsing.display_options.map_data"},{shortcuts:["issues.key"],text:"shortcuts.browsing.display_options.issues"},{shortcuts:["preferences.key"],text:"shortcuts.browsing.display_options.preferences"},{modifiers:["⌃","⌘"],shortcuts:["F","F11"],text:"shortcuts.browsing.display_options.fullscreen"},{shortcuts:["sidebar.key","`","²"],text:"shortcuts.browsing.display_options.sidebar"},{shortcuts:["area_fill.wireframe.key"],text:"shortcuts.browsing.display_options.wireframe"},{modifiers:["⌥"],shortcuts:["area_fill.wireframe.key"],text:"shortcuts.browsing.display_options.osm_data"},{shortcuts:["background.minimap.key"],text:"shortcuts.browsing.display_options.minimap"},{shortcuts:["map_data.highlight_edits.key"],text:"shortcuts.browsing.display_options.highlight_edits"}]},{rows:[{section:"help",text:"shortcuts.browsing.help.title"},{shortcuts:["help.key"],text:"shortcuts.browsing.help.help"},{shortcuts:["shortcuts.toggle.key","?"],text:"shortcuts.browsing.help.keyboard"},{section:"selecting",text:"shortcuts.browsing.selecting.title"},{shortcuts:["Left-click"],text:"shortcuts.browsing.selecting.select_one"},{modifiers:["⇧"],shortcuts:["Left-click"],text:"shortcuts.browsing.selecting.select_multi"},{modifiers:["⇧"],shortcuts:["Left-click"],gesture:"shortcuts.gesture.drag",text:"shortcuts.browsing.selecting.lasso"},{modifiers:["⌘"],shortcuts:["F"],text:"shortcuts.browsing.selecting.search"},{section:"with_selected",text:"shortcuts.browsing.with_selected.title"},{shortcuts:["Right-click","shortcuts.key.space"],text:"shortcuts.browsing.with_selected.edit_menu"},{shortcuts:["inspector.zoom_to.key"],text:"shortcuts.browsing.with_selected.zoom_to"},{section:"vertex_selected",text:"shortcuts.browsing.vertex_selected.title"},{shortcuts:["[","↖"],text:"shortcuts.browsing.vertex_selected.previous"},{shortcuts:["]","↘"],text:"shortcuts.browsing.vertex_selected.next"},{shortcuts:["{","⇞"],text:"shortcuts.browsing.vertex_selected.first"},{shortcuts:["}","⇟"],text:"shortcuts.browsing.vertex_selected.last"},{shortcuts:["\\","shortcuts.key.pause"],text:"shortcuts.browsing.vertex_selected.change_parent"}]}]},{tab:"editing",text:"shortcuts.editing.title",columns:[{rows:[{section:"drawing",text:"shortcuts.editing.drawing.title"},{shortcuts:["1"],text:"shortcuts.editing.drawing.add_point"},{shortcuts:["2"],text:"shortcuts.editing.drawing.add_line"},{shortcuts:["3"],text:"shortcuts.editing.drawing.add_area"},{shortcuts:["modes.add_note.key"],text:"shortcuts.editing.drawing.add_note"},{shortcuts:["Left-click","shortcuts.key.space"],text:"shortcuts.editing.drawing.place_point"},{shortcuts:["⌥"],text:"shortcuts.editing.drawing.disable_snap"},{shortcuts:["↵","⎋"],text:"shortcuts.editing.drawing.stop_line"},{section:"commands",text:"shortcuts.editing.commands.title"},{modifiers:["⌘"],shortcuts:["C"],text:"shortcuts.editing.commands.copy"},{modifiers:["⌘"],shortcuts:["V"],text:"shortcuts.editing.commands.paste"},{modifiers:["⌘"],shortcuts:["Z"],text:"shortcuts.editing.commands.undo"},{modifiers:["⌘","⇧"],shortcuts:["Z"],text:"shortcuts.editing.commands.redo"},{modifiers:["⌘"],shortcuts:["S"],text:"shortcuts.editing.commands.save"}]},{rows:[{section:"operations",text:"shortcuts.editing.operations.title"},{shortcuts:["operations.continue.key"],text:"shortcuts.editing.operations.continue_line"},{shortcuts:["operations.merge.key"],text:"shortcuts.editing.operations.merge"},{shortcuts:["operations.disconnect.key"],text:"shortcuts.editing.operations.disconnect"},{shortcuts:["operations.extract.key"],text:"shortcuts.editing.operations.extract"},{shortcuts:["operations.split.key"],text:"shortcuts.editing.operations.split"},{shortcuts:["operations.reverse.key"],text:"shortcuts.editing.operations.reverse"},{shortcuts:["operations.move.key"],text:"shortcuts.editing.operations.move"},{shortcuts:["operations.rotate.key"],text:"shortcuts.editing.operations.rotate"},{shortcuts:["operations.orthogonalize.key"],text:"shortcuts.editing.operations.orthogonalize"},{shortcuts:["operations.straighten.key"],text:"shortcuts.editing.operations.straighten"},{shortcuts:["operations.circularize.key"],text:"shortcuts.editing.operations.circularize"},{shortcuts:["operations.reflect.key.long"],text:"shortcuts.editing.operations.reflect_long"},{shortcuts:["operations.reflect.key.short"],text:"shortcuts.editing.operations.reflect_short"},{modifiers:["⌘"],shortcuts:["⌫"],text:"shortcuts.editing.operations.delete"}]}]},{tab:"tools",text:"shortcuts.tools.title",columns:[{rows:[{section:"info",text:"shortcuts.tools.info.title"},{modifiers:["⌘"],shortcuts:["info_panels.key"],text:"shortcuts.tools.info.all"},{modifiers:["⌘","⇧"],shortcuts:["info_panels.background.key"],text:"shortcuts.tools.info.background"},{modifiers:["⌘","⇧"],shortcuts:["info_panels.history.key"],text:"shortcuts.tools.info.history"},{modifiers:["⌘","⇧"],shortcuts:["info_panels.location.key"],text:"shortcuts.tools.info.location"},{modifiers:["⌘","⇧"],shortcuts:["info_panels.measurement.key"],text:"shortcuts.tools.info.measurement"}]}]}];
26816
26817         var dataTerritoryLanguages = {ac:["en"],ad:["ca","es","fr"],ae:["ar","en","ml","ps","bal","fa"],af:["fa","ps","haz","uz-Arab","tk","prd","bal","bgn","ug","kk-Arab"],ag:["en","pt"],ai:["en"],al:["sq","el","mk"],am:["hy","ku","az"],ao:["pt","umb","kmb","ln"],aq:["und"],ar:["es","en","cy","gn"],as:["sm","en"],at:["de","bar","en","fr","it","hr","sl","hu"],au:["en","zh-Hant","it","wbp"],aw:["nl","pap","en"],ax:["sv"],az:["az","az-Cyrl","tly","ku","ttt","tkr"],ba:["bs","bs-Cyrl","en","hr","sr","sr-Latn"],bb:["en"],bd:["bn","en","rkt","syl","ccp","my","grt","mro","mni"],be:["en","nl","fr","de","vls","wa"],bf:["mos","dyu","fr","ff","ff-Adlm"],bg:["bg","en","ru","tr","de"],bh:["ar","ml"],bi:["rn","fr","sw","en"],bj:["fr","fon","yo"],bl:["fr"],bm:["en"],bn:["ms","zh-Hant","ms-Arab","en"],bo:["es","qu","ay","gn","aro"],bq:["pap","nl"],br:["pt","en","de","it","ja","es","ko","kgp","gub","yrl","xav"],bs:["en"],bt:["dz","ne","tsj","en","lep"],bv:["und"],bw:["en","tn","af"],by:["be","ru"],bz:["en","es"],ca:["en","fr","it","de","pdt","cr","crk","yi","iu","iu-Latn","moe","crj","atj","crl","csw","crm","ikt","moh","dgr","den","scs","nsk","chp","gwi"],cc:["ms-Arab","en"],cd:["sw","lua","fr","ln","lu","kg","lol","rw"],cf:["fr","sg","ln"],cg:["fr","ln"],ch:["de","gsw","en","fr","it","lmo","pt","rm","rmo","wae"],ci:["fr","bci","sef","dnj","kfo","bqv"],ck:["en"],cl:["es","en","arn"],cm:["fr","en","bum","ff","ewo","ybb","bbj","nnh","bkm","bas","bax","byv","mua","maf","bfd","bss","kkj","dua","mgo","ar","jgo","ksf","agq","ha-Arab","nmg","yav","ff-Adlm"],cn:["zh","wuu","yue-Hans","hsn","hak","nan","gan","ii","ug","za","mn-Mong","bo","ko","kk-Arab","lis","ky-Arab","nxq","khb","tdd","lcp","en","ru","vi","uz-Cyrl","lzh"],co:["es","guc"],cp:["und"],cr:["es"],cu:["es"],cv:["kea","pt"],cw:["pap","nl","es"],cx:["en"],cy:["el","en","tr","fr","hy","ar"],cz:["cs","en","sk","de","pl"],de:["de","en","fr","bar","nds","nl","it","es","ru","vmf","tr","gsw","da","swg","hr","ku","el","ksh","pl","hsb","frr","dsb","frs","stq","pfl"],dg:["en"],dj:["aa","so","ar","fr"],dk:["da","en","de","sv","fo","kl","jut"],dm:["en"],"do":["es","en"],dz:["arq","ar","fr","kab","en"],ea:["es"],ec:["es","qu","qug"],ee:["et","ru","en","fi","vro"],eg:["ar","arz","en","el"],eh:["ar"],er:["ti","en","tig","ar","aa","ssy","byn"],es:["es","en","ca","gl","eu","ast","ext","an"],et:["en","am","om","so","ti","sid","wal","aa"],fi:["fi","en","sv","de","ru","et","rmf","se","smn","sms"],fj:["en","hi","hif","fj","rtm"],fk:["en"],fm:["en","chk","pon","kos","yap","uli"],fo:["fo"],fr:["fr","en","es","de","oc","it","pt","pcd","gsw","br","co","ca","eu","nl","frp","ia"],ga:["fr","puu"],gb:["en","fr","de","sco","pa","cy","bn","zh-Hant","syl","el","it","ks","gd","yi","ml","ga","kw"],gd:["en"],ge:["ka","xmf","ru","hy","ab","os","ku"],gf:["fr","gcr","zh-Hant"],gg:["en"],gh:["ak","en","ee","abr","gur","ada","gaa","nzi","ha","saf","ff","ff-Adlm"],gi:["en","es"],gl:["kl","da"],gm:["en","man","ff","ff-Adlm"],gn:["fr","ff","man-Nkoo","sus","nqo","kpe","ff-Adlm"],gp:["fr"],gq:["es","fan","fr","bvb","pt"],gr:["el","en","fr","de","pnt","mk","tr","bg","sq","tsd"],gs:["und"],gt:["es","quc"],gu:["en","ch"],gw:["pt","knf","ff","ff-Adlm"],gy:["en"],hk:["zh-Hant","yue","en","zh"],hm:["und"],hn:["es","en"],hr:["hr","en","it"],ht:["ht","fr"],hu:["hu","en","de","fr","ro","hr","sk","sl"],ic:["es"],id:["id","jv","su","mad","ms-Arab","min","bew","ban","bug","bjn","ace","sas","bbc","zh-Hant","mak","ljp","rej","gor","nij","kge","aoz","kvr","lbw","gay","rob","mdr","sxn","sly","mwv"],ie:["en","ga","fr"],il:["he","en","ar","ru","ro","yi","pl","lad","hu","am","ti","ml"],im:["en","gv"],"in":["hi","en","bn","te","mr","ta","ur","gu","kn","ml","or","pa","bho","awa","as","bgc","mag","mai","mwr","hne","dcc","bjj","ne","sat","wtm","rkt","ks","kok","gom","swv","gbm","lmn","sd","gon","kfy","doi","kru","sck","wbq","xnr","khn","tcy","wbr","brx","noe","bhb","mni","raj","hoc","mtr","unr","bhi","hoj","kha","kfr","grt","unx","bfy","srx","saz","ccp","sd-Deva","bfq","njo","ria","bo","bpy","bft","bra","lep","btv","lif","lah","sa","kht","dv","dz"],io:["en"],iq:["ar","en","ckb","az-Arab","fa","lrc","syr"],ir:["fa","az-Arab","mzn","glk","ckb","sdh","tk","lrc","ar","bal","rmt","bqi","luz","lki","bgn","prd","hy","ps","ka","gbz","kk-Arab"],is:["is","da"],it:["it","en","fr","sc","de","vec","nap","lij","scn","sdc","sl","fur","egl","ca","el","lmo","pms","hr","rgn"],je:["en"],jm:["en","jam"],jo:["ar","en"],jp:["ja","ryu","ko"],ke:["sw","en","ki","luy","luo","kam","kln","guz","mer","mas","ebu","so","dav","teo","pko","om","saq","ar","pa","gu"],kg:["ky","ru"],kh:["km","cja","kdt"],ki:["en","gil"],km:["ar","fr","zdj","wni"],kn:["en"],kp:["ko"],kr:["ko"],kw:["ar"],ky:["en"],kz:["ru","kk","en","de","ug-Cyrl"],la:["lo","kjg","kdt"],lb:["ar","en","hy","ku-Arab","fr"],lc:["en"],li:["de","gsw","wae"],lk:["si","ta","en"],lr:["en","kpe","vai","men","ff","ff-Adlm","vai-Latn"],ls:["st","en","zu","ss","xh"],lt:["lt","ru","en","de","sgs"],lu:["fr","lb","de","en","pt"],lv:["lv","en","ru","ltg"],ly:["ar"],ma:["ary","ar","zgh","fr","en","tzm","shi","shi-Latn","rif","rif-Latn","es"],mc:["fr"],md:["ro","uk","bg","gag","ru"],me:["sr-Latn","sq","sr"],mf:["fr"],mg:["mg","fr","en"],mh:["en","mh"],mk:["mk","sq","tr"],ml:["bm","fr","ffm","snk","mwk","ses","tmh","bm-Nkoo","khq","dtm","kao","ar","bmq","bze"],mm:["my","shn","kac","mnw","kht"],mn:["mn","kk-Arab","zh","ru","ug-Cyrl"],mo:["zh-Hant","pt","zh","en"],mp:["en","ch"],mq:["fr"],mr:["ar","fr","ff","wo","ff-Adlm"],ms:["en"],mt:["mt","en","it","fr"],mu:["mfe","en","bho","ur","fr","ta"],mv:["dv"],mw:["en","ny","tum","tog","zu"],mx:["es","en","yua","nhe","nhw","maz","nch","sei"],my:["ms","en","zh-Hant","ta","iba","jv","zmi","dtp","ml","bug","bjn"],mz:["pt","vmw","ndc","ts","ngl","seh","mgh","rng","ny","yao","sw","zu"],na:["af","kj","ng","naq","hz","en","de","tn"],nc:["fr"],ne:["ha","fr","dje","fuq","tmh","ar","twq","ff","ff-Adlm"],nf:["en"],ng:["en","pcm","ha","ig","yo","fuv","tiv","efi","ibb","ha-Arab","bin","kaj","kcg","ar","cch","amo","ff","ff-Adlm"],ni:["es"],nl:["nl","en","de","fr","nds","li","fy","gos","id","zea","rif-Latn","tr"],no:["nb","nn","se"],np:["ne","mai","bho","new","jml","en","dty","awa","thl","bap","tdg","thr","lif","mgp","thq","mrd","bfy","xsr","rjs","taj","hi","gvr","bo","tkt","tdh","bn","unr-Deva","lep"],nr:["en","na"],nu:["en","niu"],nz:["en","mi"],om:["ar","bal","fa"],pa:["es","en","zh-Hant"],pe:["es","qu","ay"],pf:["fr","ty","zh-Hant"],pg:["tpi","en","ho"],ph:["en","fil","es","ceb","ilo","hil","bik","war","bhk","pam","pag","mdh","tsg","zh-Hant","cps","krj","bto","hnn","tbw","bku"],pk:["ur","pa-Arab","en","lah","ps","sd","skr","bal","brh","hno","fa","bgn","hnd","tg-Arab","gju","bft","kvx","khw","mvy","gjk","kxp","ks","btv"],pl:["pl","en","de","ru","szl","be","uk","csb","sli","lt"],pm:["fr","en"],pn:["en"],pr:["es","en"],ps:["ar"],pt:["pt","en","fr","es","gl"],pw:["pau","en"],py:["gn","es","de"],qa:["ar","fa","ml"],re:["fr","rcf","ta"],ro:["ro","en","fr","es","hu","de","tr","sr-Latn","bg","el","pl"],rs:["sr","sr-Latn","sq","hu","ro","hr","sk","uk"],ru:["ru","tt","ba","cv","hy","ce","av","udm","chm","os","sah","kbd","myv","dar","bua","mdf","kum","kv","lez","krc","inh","tyv","az-Cyrl","ady","krl","lbe","koi","mrj","alt","fi","sr-Latn","vep","mn","izh","cu","vot"],rw:["rw","en","fr"],sa:["ar","ars"],sb:["en","rug"],sc:["crs","fr","en"],sd:["ar","en","bej","fvr","ha-Arab","mls","fia","zag"],se:["sv","en","fi","fit","se","rmu","yi","smj","sma","ia"],sg:["en","zh","ms","ta","ml","pa"],sh:["en"],si:["sl","hr","en","de","hu","it"],sj:["nb","ru"],sk:["sk","cs","en","de","hu","uk","pl"],sl:["kri","en","men","tem","ff","ff-Adlm"],sm:["it","eo"],sn:["wo","fr","ff","srr","dyo","sav","mfv","bjt","snf","knf","bsc","mey","tnr","ff-Adlm"],so:["so","ar","sw","om"],sr:["nl","srn","zh-Hant"],ss:["ar","en","nus"],st:["pt"],sv:["es"],sx:["en","es","vic","nl"],sy:["ar","ku","fr","hy","syr"],sz:["en","ss","zu","ts"],ta:["en"],tc:["en"],td:["fr","ar"],tf:["fr"],tg:["fr","ee","ife"],th:["th","en","tts","nod","sou","mfa","zh-Hant","kxm","kdt","mnw","shn","lcp","lwl"],tj:["tg","ru","fa","ar"],tk:["en","tkl"],tl:["pt","tet"],tm:["tk","ru","uz","ku"],tn:["aeb","ar","fr"],to:["to","en"],tr:["tr","en","ku","zza","kbd","az","az-Arab","ar","bgx","bg","ady","kiu","hy","ka","lzz","sr-Latn","sq","ab","el","tru","uz","ky-Latn","kk"],tt:["en","es"],tv:["tvl","en"],tw:["zh-Hant","trv"],tz:["sw","en","suk","nym","kde","bez","ksb","mas","mgy","asa","lag","jmc","rof","vun","rwk","sbp"],ua:["uk","ru","pl","yi","rue","be","crh","ro","bg","tr","hu","el"],ug:["sw","lg","nyn","cgg","xog","en","teo","laj","ach","myx","rw","ttj","hi"],um:["en"],us:["en","es","zh-Hant","fr","de","fil","it","vi","ko","ru","nv","yi","pdc","haw","frc","chr","esu","dak","cho","lkt","ik","mus","cic","osa"],uy:["es"],uz:["uz","uz-Cyrl","ru","kaa","tr"],va:["it","la"],vc:["en"],ve:["es"],vg:["en"],vi:["en"],vn:["vi","zh-Hant","cjm"],vu:["bi","en","fr"],wf:["wls","fr","fud"],ws:["sm","en"],xk:["sq","aln","sr","sr-Latn"],ye:["ar","en"],yt:["swb","fr","buc","sw"],za:["en","zu","xh","af","nso","tn","st","ts","ss","ve","hi","nr","sw"],zm:["bem","en","ny","loz"],zw:["sn","en","nd","mxc","ndc","kck","ny","ve","tn"]};
26818
26819         var en = {icons:{download:"download",information:"info",remove:"remove",undo:"undo",zoom_to:"zoom to",copy:"copy",view_on:"view on {domain}",favorite:"favorite"},toolbar:{inspect:"Inspect",undo_redo:"Undo / Redo",recent:"Recent",favorites:"Favorites",add_feature:"Add Feature"},modes:{add_feature:{title:"Add a feature",description:"Search for features to add to the map.",key:"Tab",result:"{count} result",results:"{count} results"},add_area:{title:"Area",description:"Add parks, buildings, lakes or other areas to the map.",tail:"Click on the map to start drawing an area, like a park, lake, or building.",filter_tooltip:"areas"},add_line:{title:"Line",description:"Add highways, streets, pedestrian paths, canals or other lines to the map.",tail:"Click on the map to start drawing a road, path, or route.",filter_tooltip:"lines"},add_point:{title:"Point",description:"Add restaurants, monuments, postal boxes or other points to the map.",tail:"Click on the map to add a point.",filter_tooltip:"points"},add_note:{title:"Note",label:"Add Note",description:"Spotted an issue? Let other mappers know.",tail:"Click on the map to add a note.",key:"N"},add_preset:{title:"Add {feature}",point:{title:"Add {feature} as a point"},line:{title:"Add {feature} as a line"},area:{title:"Add {feature} as an area"},building:{title:"Add {feature} as a building"}},browse:{title:"Browse",description:"Pan and zoom the map."},draw_area:{tail:"Click to add nodes to your area. Click the first node to finish the area."},draw_line:{tail:"Click to add more nodes to the line. Click on other lines to connect to them, and double-click to end the line."},drag_node:{connected_to_hidden:"This can't be edited because it is connected to a hidden feature."}},operations:{add:{annotation:{point:"Added a point.",vertex:"Added a node to a way.",relation:"Added a relation.",note:"Added a note."}},start:{annotation:{line:"Started a line.",area:"Started an area."}},"continue":{key:"A",title:"Continue",description:"Continue this line.",not_eligible:"No line can be continued here.",multiple:"Several lines can be continued here. To choose a line, press the Shift key and click on it to select it.",annotation:{line:"Continued a line.",area:"Continued an area."}},cancel_draw:{annotation:"Canceled drawing."},change_role:{annotation:"Changed the role of a relation member."},change_tags:{annotation:"Changed tags."},circularize:{title:"Circularize",description:{line:"Make this line circular.",area:"Make this area circular."},key:"O",annotation:{line:"Made a line circular.",area:"Made an area circular."},not_closed:"This can't be made circular because it's not a loop.",too_large:"This can't be made circular because not enough of it is currently visible.",connected_to_hidden:"This can't be made circular because it is connected to a hidden feature.",not_downloaded:"This can't be made circular because parts of it have not yet been downloaded.",already_circular:"This can't be made circular because it's already circular."},orthogonalize:{title:"Square",description:{corner:{single:"Square this corner.",multiple:"Square these corners."},feature:{single:"Square the corners of this feature.",multiple:"Square the corners of these features."}},key:"Q",annotation:{corner:{single:"Squared a corner.",multiple:"Squared several corners."},feature:{single:"Squared the corners of a feature.",multiple:"Squared the corners of several features."}},multiple_blockers:{multiple:"These can't be squared for multiple reasons."},end_vertex:{single:"This can't be squared because it is an endpoint.",multiple:"These can't be squared because they are endpoints."},square_enough:{single:"This can't be made more square than it already is.",multiple:"These can't be made more square than they already are."},not_squarish:{single:"This can't be made square because it is not squarish.",multiple:"These can't be made square because they are not squarish."},too_large:{single:"This can't be made square because not enough of it is currently visible.",multiple:"These can't be made square because not enough of them are currently visible."},connected_to_hidden:{single:"This can't be made square because it is connected to a hidden feature.",multiple:"These can't be made square because some are connected to hidden features."},not_downloaded:{single:"This can't be made square because parts of it have not yet been downloaded.",multiple:"These can't be made square because parts of them have not yet been downloaded."}},straighten:{title:"Straighten",description:{points:"Straighten these points.",line:"Straighten this line."},key:"S",annotation:{points:"Straightened several points.",line:"Straightened a line."},too_bendy:"This can't be straightened because it bends too much.",connected_to_hidden:"This can't be straightened because it is connected to a hidden feature.",not_downloaded:"This can't be straightened because parts of it have not yet been downloaded."},"delete":{title:"Delete",description:{single:"Delete this feature permanently.",multiple:"Delete these features permanently."},annotation:{point:"Deleted a point.",vertex:"Deleted a node from a way.",line:"Deleted a line.",area:"Deleted an area.",relation:"Deleted a relation.",multiple:"Deleted {n} features."},too_large:{single:"This feature can't be deleted because not enough of it is currently visible.",multiple:"These features can't be deleted because not enough of them are currently visible."},incomplete_relation:{single:"This feature can't be deleted because it hasn't been fully downloaded.",multiple:"These features can't be deleted because they haven't been fully downloaded."},part_of_relation:{single:"This feature can't be deleted because it is part of a larger relation. You must remove it from the relation first.",multiple:"These features can't be deleted because they are part of larger relations. You must remove them from the relations first."},connected_to_hidden:{single:"This feature can't be deleted because it is connected to a hidden feature.",multiple:"These features can't be deleted because some are connected to hidden features."},not_downloaded:{single:"This feature can't be deleted because parts of it have not yet been downloaded.",multiple:"These features can't be deleted because parts of them have not yet been downloaded."},has_wikidata_tag:{single:"This feature can't be deleted because it has a Wikidata tag.",multiple:"These features can't be deleted because some have Wikidata tags."}},downgrade:{title:"Downgrade",description:{building_address:"Remove all non-address and non-building tags.",building:"Remove all non-building tags.",address:"Remove all non-address tags."},annotation:{building:{single:"Downgraded a feature to a basic building.",multiple:"Downgraded {n} features to basic buildings."},address:{single:"Downgraded a feature to an address.",multiple:"Downgraded {n} features to addresses."},multiple:"Downgraded {n} features."},has_wikidata_tag:{single:"This feature can't be downgraded because it has a Wikidata tag.",multiple:"These features can't be downgraded because some have Wikidata tags."}},add_member:{annotation:"Added a member to a relation."},delete_member:{annotation:"Removed a member from a relation."},reorder_members:{annotation:"Reordered a relation's members."},connect:{annotation:{from_vertex:{to_point:"Connected a way to a point.",to_vertex:"Connected a way to another.",to_line:"Connected a way to a line.",to_area:"Connected a way to an area.",to_adjacent_vertex:"Merged adjacent points in a way.",to_sibling_vertex:"Connected a way to itself."},from_point:{to_point:"Merged a point with another.",to_vertex:"Merged a point with a point in a way.",to_line:"Moved a point to a line.",to_area:"Moved a point to an area."}},relation:"These features can't be connected because they have conflicting relation roles.",restriction:"These features can't be connected because it would damage a \"{relation}\" relation."},disconnect:{title:"Disconnect",description:"Disconnect these lines/areas from each other.",line:{description:"Disconnect this line from other features."},area:{description:"Disconnect this area from other features."},key:"D",annotation:"Disconnected lines/areas.",too_large:{single:"This can't be disconnected because not enough of it is currently visible."},not_connected:"There aren't enough lines/areas here to disconnect.",not_downloaded:"This can't be disconnected because parts of it have not yet been downloaded.",connected_to_hidden:"This can't be disconnected because it is connected to a hidden feature.",relation:"This can't be disconnected because it connects members of a relation."},merge:{title:"Merge",description:"Merge these features.",key:"C",annotation:"Merged {n} features.",not_eligible:"These features can't be merged.",not_adjacent:"These features can't be merged because their endpoints aren't connected.",restriction:"These features can't be merged because it would damage a \"{relation}\" relation.",relation:"These features can't be merged because they have conflicting relation roles.",incomplete_relation:"These features can't be merged because at least one hasn't been fully downloaded.",conflicting_tags:"These features can't be merged because some of their tags have conflicting values.",paths_intersect:"These features can't be merged because the resulting path would intersect itself."},move:{title:"Move",description:{single:"Move this feature to a different location.",multiple:"Move these features to a different location."},key:"M",annotation:{point:"Moved a point.",vertex:"Moved a node in a way.",line:"Moved a line.",area:"Moved an area.",multiple:"Moved multiple features."},incomplete_relation:{single:"This feature can't be moved because it hasn't been fully downloaded.",multiple:"These features can't be moved because they haven't been fully downloaded."},too_large:{single:"This feature can't be moved because not enough of it is currently visible.",multiple:"These features can't be moved because not enough of them are currently visible."},connected_to_hidden:{single:"This feature can't be moved because it is connected to a hidden feature.",multiple:"These features can't be moved because some are connected to hidden features."},not_downloaded:{single:"This feature can't be moved because parts of it have not yet been downloaded.",multiple:"These features can't be moved because parts of them have not yet been downloaded."}},reflect:{title:{long:"Reflect Long",short:"Reflect Short"},description:{long:{single:"Reflect this feature across its long axis.",multiple:"Reflect these features across their long axis."},short:{single:"Reflect this feature across its short axis.",multiple:"Reflect these features across their short axis."}},key:{long:"T",short:"Y"},annotation:{long:{single:"Reflected a feature across its long axis.",multiple:"Reflected multiple features across their long axis."},short:{single:"Reflected a feature across its short axis.",multiple:"Reflected multiple features across their short axis."}},incomplete_relation:{single:"This feature can't be reflected because it hasn't been fully downloaded.",multiple:"These features can't be reflected because they haven't been fully downloaded."},too_large:{single:"This feature can't be reflected because not enough of it is currently visible.",multiple:"These features can't be reflected because not enough of them are currently visible."},connected_to_hidden:{single:"This feature can't be reflected because it is connected to a hidden feature.",multiple:"These features can't be reflected because some are connected to hidden features."},not_downloaded:{single:"This feature can't be reflected because parts of it have not yet been downloaded.",multiple:"These features can't be reflected because parts of them have not yet been downloaded."}},rotate:{title:"Rotate",description:{single:"Rotate this feature around its center point.",multiple:"Rotate these features around their center point."},key:"R",annotation:{line:"Rotated a line.",area:"Rotated an area.",multiple:"Rotated multiple features."},incomplete_relation:{single:"This feature can't be rotated because it hasn't been fully downloaded.",multiple:"These features can't be rotated because they haven't been fully downloaded."},too_large:{single:"This feature can't be rotated because not enough of it is currently visible.",multiple:"These features can't be rotated because not enough of them are currently visible."},connected_to_hidden:{single:"This feature can't be rotated because it is connected to a hidden feature.",multiple:"These features can't be rotated because some are connected to hidden features."},not_downloaded:{single:"This feature can't be rotated because parts of it have not yet been downloaded.",multiple:"These features can't be rotated because parts of them have not yet been downloaded."}},reverse:{title:"Reverse",description:{point:"Flip the direction of this point.",points:"Flip the direction of these points.",line:"Make this line go in the opposite direction.",lines:"Make these lines go in the opposite direction.",features:"Flip the directions of these features."},key:"V",annotation:{point:"Reversed a point.",points:"Reversed multiple points.",line:"Reversed a line.",lines:"Reversed multiple lines.",features:"Reversed multiple features."}},split:{title:"Split",description:{line:"Split this line into two at this node.",area:"Split the boundary of this area into two.",multiple:"Split the lines/area boundaries at this node into two."},key:"X",annotation:{line:"Split a line.",area:"Split an area boundary.",multiple:"Split {n} lines/area boundaries."},not_eligible:"Lines can't be split at their beginning or end.",multiple_ways:"There are too many lines here to split.",connected_to_hidden:"This can't be split because it is connected to a hidden feature."},restriction:{annotation:{create:"Added a turn restriction","delete":"Deleted a turn restriction"}},extract:{title:"Extract",key:"E",description:{vertex:{single:"Extract this point from its parent lines/areas."},area:{single:"Extract a point from this area."}},annotation:{single:"Extracted a point."},too_large:{area:{single:"A point can't be extracted from this area because not enough of it is currently visible."}},restriction:{vertex:{single:"This point can't be extracted because it would damage a \"{relation}\" relation."}},connected_to_hidden:{vertex:{single:"This point can't be extracted because it is connected to a hidden feature."}}}},restriction:{controls:{distance:"Distance",distance_up_to:"Up to {distance}",via:"Via",via_node_only:"Node only",via_up_to_one:"Up to 1 way",via_up_to_two:"Up to 2 ways"},help:{indirect:"(indirect)",turn:{no_left_turn:"NO Left Turn {indirect}",no_right_turn:"NO Right Turn {indirect}",no_u_turn:"NO U-Turn {indirect}",no_straight_on:"NO Straight On {indirect}",only_left_turn:"ONLY Left Turn {indirect}",only_right_turn:"ONLY Right Turn {indirect}",only_u_turn:"ONLY U-Turn {indirect}",only_straight_on:"ONLY Straight On {indirect}",allowed_left_turn:"Left Turn Allowed {indirect}",allowed_right_turn:"Right Turn Allowed {indirect}",allowed_u_turn:"U-Turn Allowed {indirect}",allowed_straight_on:"Straight On Allowed {indirect}"},from:"FROM",via:"VIA",to:"TO",from_name:"{from} {fromName}",from_name_to_name:"{from} {fromName} {to} {toName}",via_names:"{via} {viaNames}",select_from:"Click to select a {from} segment",select_from_name:"Click to select {from} {fromName}",toggle:"Click for \"{turn}\""}},undo:{tooltip:"Undo: {action}",nothing:"Nothing to undo."},redo:{tooltip:"Redo: {action}",nothing:"Nothing to redo."},tooltip_keyhint:"Shortcut:",browser_notice:"This editor is supported in Firefox, Chrome, Safari, Opera, and Internet Explorer 11 and above. Please upgrade your browser or use Potlatch 2 to edit the map.",translate:{translate:"Translate",localized_translation_label:"Multilingual Name",localized_translation_language:"Choose language",localized_translation_name:"Name",language_and_code:"{language} ({code})"},zoom_in_edit:"Zoom in to edit",login:"Log In",logout:"Log Out",loading_auth:"Connecting to OpenStreetMap...",report_a_bug:"Report a bug",help_translate:"Help translate",sidebar:{key:"`",tooltip:"Toggle the sidebar."},feature_info:{hidden_warning:"{count} hidden features",hidden_details:"These features are currently hidden: {details}"},osm_api_status:{message:{error:"Unable to reach the OpenStreetMap API. Your edits are safe locally. Check your network connection.",offline:"The OpenStreetMap API is offline. Your edits are safe locally. Please come back later.",readonly:"The OpenStreetMap API is currently read-only. You can continue editing, but must wait to save your changes.",rateLimit:"The OpenStreetMap API is limiting anonymous connections. You can fix this by logging in."},retry:"Retry"},commit:{title:"Upload to OpenStreetMap",upload_explanation:"The changes you upload will be visible on all maps that use OpenStreetMap data.",upload_explanation_with_user:"The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.",request_review:"I would like someone to review my edits.",save:"Upload",cancel:"Cancel",changes:"{count} Changes",download_changes:"Download osmChange file",errors:"Errors",warnings:"Warnings",modified:"Modified",deleted:"Deleted",created:"Created",outstanding_errors_message:"Please resolve all errors first. {count} remaining.",comment_needed_message:"Please add a changeset comment first.",about_changeset_comments:"About changeset comments",about_changeset_comments_link:"//wiki.openstreetmap.org/wiki/Good_changeset_comments",google_warning:"You mentioned Google in this comment: remember that copying from Google Maps is strictly forbidden.",google_warning_link:"https://www.openstreetmap.org/copyright"},contributors:{list:"Edits by {users}",truncated_list:"Edits by {users} and {count} others"},info_panels:{key:"I",background:{key:"B",title:"Background",zoom:"Zoom",vintage:"Vintage",source:"Source",description:"Description",resolution:"Resolution",accuracy:"Accuracy",unknown:"Unknown",show_tiles:"Show Tiles",hide_tiles:"Hide Tiles",show_vintage:"Show Vintage",hide_vintage:"Hide Vintage"},history:{key:"H",title:"History",selected:"{n} selected",no_history:"No History (New Feature)",version:"Version",last_edit:"Last Edit",edited_by:"Edited By",changeset:"Changeset",unknown:"Unknown",link_text:"History on openstreetmap.org",note_no_history:"No History (New Note)",note_comments:"Comments",note_created_date:"Created Date",note_created_user:"Created By",note_link_text:"Note on openstreetmap.org"},location:{key:"L",title:"Location",unknown_location:"Unknown Location"},measurement:{key:"M",title:"Measurement",selected:"{n} selected",geometry:"Geometry",closed_line:"closed line",closed_area:"closed area",center:"Center",perimeter:"Perimeter",length:"Length",area:"Area",centroid:"Centroid",location:"Location",metric:"Metric",imperial:"Imperial",node_count:"Number of nodes"}},geometry:{point:"point",vertex:"vertex",line:"line",area:"area",relation:"relation",note:"note"},geocoder:{search:"Search worldwide...",no_results_worldwide:"No results found"},geolocate:{title:"Show My Location",locating:"Locating, please wait..."},inspector:{zoom_to:{key:"Z",title:"Zoom to this",tooltip_feature:"Center and zoom the map to focus on this feature.",tooltip_note:"Center and zoom the map to focus on this note.",tooltip_data:"Center and zoom the map to focus on this data.",tooltip_issue:"Center and zoom the map to focus on this issue."},show_more:"Show More",view_on_osm:"View on openstreetmap.org",view_on_keepRight:"View on keepright.at",all_fields:"All fields",all_tags:"All tags",all_members:"All members",all_relations:"All relations",add_to_relation:"Add to a relation",new_relation:"New relation...",choose_relation:"Choose a parent relation",role:"Role",choose:"Select feature type",results:"{n} results for {search}",no_documentation_key:"There is no documentation available.",edit_reference:"edit/translate",wiki_reference:"View documentation",wiki_en_reference:"View documentation in English",hidden_preset:{manual:"{features} are hidden. Enable them in the Map Data pane.",zoom:"{features} are hidden. Zoom in to enable them."},back_tooltip:"Change feature",remove:"Remove",search:"Search",multiselect:"Selected features",unknown:"Unknown",incomplete:"<not downloaded>",feature_list:"Search features",edit:"Edit feature",check:{yes:"Yes",no:"No",reverser:"Change Direction"},radio:{structure:{type:"Type","default":"Default",layer:"Layer"}},add:"Add",none:"None",node:"Node",way:"Way",relation:"Relation",location:"Location",add_fields:"Add field:",lock:{suggestion:"The \"{label}\" field is locked because there is a Wikidata tag. You can delete it or edit the tags in the \"All tags\" section."}},background:{title:"Background",description:"Background settings",key:"B",backgrounds:"Backgrounds",none:"None",best_imagery:"Best known imagery source for this location","switch":"Switch back to this background",custom:"Custom",overlays:"Overlays",imagery_problem_faq:"Report an Imagery Problem",reset:"reset",reset_all:"Reset All",display_options:"Display Options",brightness:"Brightness",contrast:"Contrast",saturation:"Saturation",sharpness:"Sharpness",minimap:{description:"Show Minimap",tooltip:"Show a zoomed out map to help locate the area currently displayed.",key:"/"},panel:{description:"Show Detail Panel",tooltip:"Show advanced background information."},fix_misalignment:"Adjust imagery offset",offset:"Drag anywhere in the gray area below to adjust the imagery offset, or enter the offset values in meters."},map_data:{title:"Map Data",description:"Map Data",key:"F",data_layers:"Data Layers",layers:{osm:{tooltip:"Map data from OpenStreetMap",title:"OpenStreetMap data"},notes:{tooltip:"Note data from OpenStreetMap",title:"OpenStreetMap notes"},keepRight:{tooltip:"Automatically detected map issues from keepright.at",title:"KeepRight Issues"},improveOSM:{tooltip:"Missing data automatically detected by improveosm.org",title:"ImproveOSM Issues"},custom:{tooltip:"Drag and drop a data file onto the page, or click the button to setup",title:"Custom Map Data",zoom:"Zoom to data"}},style_options:"Style Options",highlight_edits:{key:"G"},map_features:"Map Features",autohidden:"These features have been automatically hidden because too many would be shown on the screen.  You can zoom in to edit them.",osmhidden:"These features have been automatically hidden because the OpenStreetMap layer is hidden."},visual_diff:{highlight_edits:{description:"Highlight Changes",tooltip:"Outline edited features"}},photo_overlays:{title:"Photo Overlays",traffic_signs:{title:"Traffic Signs"},photo_type:{flat:{title:"Flat Photos",tooltip:"Traditional photos"},panoramic:{title:"Panoramic Photos",tooltip:"360° photos"}}},feature:{points:{description:"Points",tooltip:"Points of Interest"},traffic_roads:{description:"Traffic Roads",tooltip:"Highways, Streets, etc."},service_roads:{description:"Service Roads",tooltip:"Service Roads, Parking Aisles, Tracks, etc."},paths:{description:"Paths",tooltip:"Sidewalks, Foot Paths, Cycle Paths, etc."},buildings:{description:"Buildings",tooltip:"Buildings, Shelters, Garages, etc."},building_parts:{description:"Building Parts",tooltip:"3D Building and Roof Components"},indoor:{description:"Indoor Features",tooltip:"Rooms, Corridors, Stairwells, etc."},landuse:{description:"Landuse Features",tooltip:"Forests, Farmland, Parks, Residential, Commercial, etc."},boundaries:{description:"Boundaries",tooltip:"Administrative Boundaries"},water:{description:"Water Features",tooltip:"Rivers, Lakes, Ponds, Basins, etc."},rail:{description:"Rail Features",tooltip:"Railways"},pistes:{description:"Pistes",tooltip:"Ski Slopes, Sled Runs, Ice Skating Trails, etc."},aerialways:{description:"Aerial Features",tooltip:"Chair Lifts, Gondolas, Zip Lines, etc."},power:{description:"Power Features",tooltip:"Power Lines, Power Plants, Substations, etc."},past_future:{description:"Past/Future Features",tooltip:"Proposed, Construction, Abandoned, Demolished, etc."},others:{description:"Other Features",tooltip:"Everything Else"}},area_fill:{wireframe:{description:"No Fill (Wireframe)",tooltip:"Enabling wireframe mode makes it easy to see the background imagery.",key:"W"},partial:{description:"Partial Fill",tooltip:"Areas are drawn with fill only around their inner edges. (Recommended for beginner mappers)"},full:{description:"Full Fill",tooltip:"Areas are drawn fully filled."}},settings:{custom_background:{tooltip:"Edit custom background",header:"Custom Background Settings",instructions:"Enter a tile URL template. Valid tokens are:\n   {zoom} or {z}, {x}, {y} for Z/X/Y tile scheme\n   {-y} or {ty} for flipped TMS-style Y coordinates\n   {u} for quadtile scheme\n   {switch:a,b,c} for DNS server multiplexing\n\nExample:\n{example}",template:{placeholder:"Enter a url template"}},custom_data:{tooltip:"Edit custom data layer",header:"Custom Map Data Settings",file:{instructions:"Choose a local data file. Supported types are:\n   .gpx, .kml, .geojson, .json",label:"Browse files"},or:"Or",url:{instructions:"Enter a data file URL or vector tile URL template. Valid tokens are:\n   {zoom} or {z}, {x}, {y} for Z/X/Y tile scheme",placeholder:"Enter a url"}}},preferences:{title:"Preferences",description:"Preferences",key:"P",privacy:{title:"Privacy",privacy_link:"View the iD privacy policy",third_party_icons:{description:"Show Third Party Icons",tooltip:"Uncheck this box to avoid loading icons from third party sites such as Wikimedia Commons, Facebook, or Twitter."}}},restore:{heading:"You have unsaved changes",description:"Do you wish to restore unsaved changes from a previous editing session?",restore:"Restore my changes",reset:"Discard my changes"},save:{title:"Save",help:"Review your changes and upload them to OpenStreetMap, making them visible to other users.",no_changes:"No changes to save.",error:"Errors occurred while trying to save",status_code:"Server returned status code {code}",unknown_error_details:"Please ensure you are connected to the internet.",uploading:"Uploading changes to OpenStreetMap...",conflict_progress:"Checking for conflicts: {num} of {total}",unsaved_changes:"You have unsaved changes",conflict:{header:"Resolve conflicting edits",count:"Conflict {num} of {total}",previous:"< Previous",next:"Next >",keep_local:"Keep mine",keep_remote:"Use theirs",restore:"Restore","delete":"Leave Deleted",download_changes:"Or download osmChange file",done:"All conflicts resolved!",help:"Another user changed some of the same map features you changed.\nClick on each feature below for more details about the conflict, and choose whether to keep\nyour changes or the other user's changes.\n"}},merge_remote_changes:{conflict:{deleted:"This feature has been deleted by {user}.",location:"This feature was moved by both you and {user}.",nodelist:"Nodes were changed by both you and {user}.",memberlist:"Relation members were changed by both you and {user}.",tags:"You changed the <b>{tag}</b> tag to \"{local}\" and {user} changed it to \"{remote}\"."}},success:{just_edited:"You just edited OpenStreetMap!",thank_you:"Thank you for improving the map.",thank_you_location:"Thank you for improving the map around {where}.",thank_you_where:{format:"{place}{separator}{region}",separator:", "},help_html:"Your changes should appear on OpenStreetMap within a few minutes. It may take longer for maps elsewhere to receive updates.",help_link_text:"Details",help_link_url:"https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F",view_on_osm:"View Changes on OSM",changeset_id:"Your changeset #: {changeset_id}",like_osm:"Like OpenStreetMap? Connect with others:",more:"More",events:"Events",languages:"Languages: {languages}",missing:"Is something missing from this list?",tell_us:"Tell us!"},confirm:{okay:"OK",cancel:"Cancel"},splash:{welcome:"Welcome to the iD OpenStreetMap editor",text:"iD is a friendly but powerful tool for contributing to the world's best free world map. This is version {version}. For more information see {website} and report bugs at {github}.",privacy_update:"Our privacy policy has recently been updated.",privacy_policy:"iD privacy policy",privacy:"{updateMessage} By using this software, you agree to do so in accordance with the {privacyLink}.",walkthrough:"Start the Walkthrough",start:"Edit now"},source_switch:{live:"live",lose_changes:"You have unsaved changes. Switching the map server will discard them. Are you sure you want to switch servers?",dev:"dev"},version:{whats_new:"What's new in iD {version}"},tag_reference:{description:"Description",on_wiki:"{tag} on wiki.osm.org",used_with:"used with {type}"},zoom:{"in":"Zoom in",out:"Zoom out"},cannot_zoom:"Cannot zoom out further in current mode.",full_screen:"Toggle Full Screen",QA:{improveOSM:{title:"ImproveOSM Detection",geometry_types:{path:"paths",parking:"parking",road:"roads",both:"roads and parking"},directions:{east:"east",north:"north",northeast:"northeast",northwest:"northwest",south:"south",southeast:"southeast",southwest:"southwest",west:"west"},error_types:{ow:{title:"Missing One-way",description:"Along this section of {highway}, {percentage}% of {num_trips} recorded trips travel from {from_node} to {to_node}. There may be missing a \"oneway\" tag."},mr:{title:"Missing Geometry",description:"{num_trips} recorded trips in this area suggest there may be unmapped {geometry_type} here.",description_alt:"Data from a 3rd party suggests there may be unmapped {geometry_type} here."},tr:{title:"Missing Turn Restriction",description:"{num_passed} of {num_trips} recorded trips (travelling {travel_direction}) make a turn from {from_way} to {to_way} at {junction}. There may be a missing \"{turn_restriction}\" restriction."}}},keepRight:{title:"KeepRight Error",detail_title:"Error",detail_description:"Description",comment:"Comment",comment_placeholder:"Enter a comment to share with other users.",close:"Close (Error Fixed)",ignore:"Ignore (Not an Error)",save_comment:"Save Comment",close_comment:"Close and Comment",ignore_comment:"Ignore and Comment",error_parts:{this_node:"this node",this_way:"this way",this_relation:"this relation",this_oneway:"this oneway",this_highway:"this highway",this_railway:"this railway",this_waterway:"this waterway",this_cycleway:"this cycleway",this_cycleway_footpath:"this cycleway/footpath",this_riverbank:"this riverbank",this_crossing:"this crossing",this_railway_crossing:"this railway crossing",this_bridge:"this bridge",this_tunnel:"this tunnel",this_boundary:"this boundary",this_turn_restriction:"this turn restriction",this_roundabout:"this roundabout",this_mini_roundabout:"this mini-roundabout",this_track:"this track",this_feature:"this feature",highway:"highway",railway:"railway",waterway:"waterway",cycleway:"cycleway",cycleway_footpath:"cycleway/footpath",riverbank:"riverbank",place_of_worship:"place of worship",pub:"pub",restaurant:"restaurant",school:"school",university:"university",hospital:"hospital",library:"library",theatre:"theatre",courthouse:"courthouse",bank:"bank",cinema:"cinema",pharmacy:"pharmacy",cafe:"cafe",fast_food:"fast food",fuel:"fuel",from:"from",to:"to",left_hand:"left-hand",right_hand:"right-hand"},errorTypes:{"20":{title:"Multiple nodes on the same spot",description:"There is more than one node in this spot. Node IDs: {var1}."},"30":{title:"Non-closed area",description:"{var1} is tagged with \"{var2}\" and should be a closed loop."},"40":{title:"Impossible oneway",description:"The first node {var1} of {var2} is not connected to any other way."},"41":{description:"The last node {var1} of {var2} is not connected to any other way."},"42":{description:"You cannot reach {var1} because all ways leading from it are oneway."},"43":{description:"You cannot escape from {var1} because all ways leading to it are oneway."},"50":{title:"Almost junction",description:"{var1} is very close but not connected to way {var2}."},"60":{title:"Deprecated tag",description:"{var1} uses deprecated tag \"{var2}\". Please use \"{var3}\" instead."},"70":{title:"Missing tag",description:"{var1} has an empty tag: \"{var2}\"."},"71":{description:"{var1} has no tags."},"72":{description:"{var1} is not member of any way and doesn't have any tags."},"73":{description:"{var1} has a \"{var2}\" tag but no \"highway\" tag."},"74":{description:"{var1} has an empty tag: \"{var2}\"."},"75":{description:"{var1} has a name \"{var2}\" but no other tags."},"90":{title:"Motorway without ref tag",description:"{var1} is tagged as a motorway and therefore needs a \"ref\", \"nat_ref\", or \"int_ref\" tag."},"100":{title:"Place of worship without religion",description:"{var1} is tagged as a place of worship and therefore needs a religion tag."},"110":{title:"Point of interest without name",description:"{var1} is tagged as a \"{var2}\" and therefore needs a name tag."},"120":{title:"Way without nodes",description:"{var1} has just one single node."},"130":{title:"Disconnected way",description:"{var1} is not connected to the rest of the map."},"150":{title:"Railway crossing without tag",description:"{var1} of a highway and a railway needs to be tagged as \"railway=crossing\" or \"railway=level_crossing\"."},"160":{title:"Railway layer conflict",description:"There are ways in different layers (e.g. tunnel or bridge) meeting at {var1}."},"170":{title:"FIXME tagged item",description:"{var1} has a FIXME tag: {var2}"},"180":{title:"Relation without type",description:"{var1} is missing a \"type\" tag."},"190":{title:"Intersection without junction",description:"{var1} intersects the {var2} {var3} but there is no junction node, bridge, or tunnel."},"200":{title:"Overlapping ways",description:"{var1} overlaps the {var2} {var3}."},"210":{title:"Self-intersecting way",description:"There is an unspecified issue with self intersecting ways."},"211":{description:"{var1} contains more than one node multiple times. Nodes are {var2}. This may or may not be an error."},"212":{description:"{var1} has only two different nodes and contains one of them more than once."},"220":{title:"Misspelled tag",description:"{var1} is tagged \"{var2}\" where \"{var3}\" looks like \"{var4}\"."},"221":{description:"{var1} has a suspicious tag \"{var2}\"."},"230":{title:"Layer conflict",description:"{var1} is a junction of ways on different layers."},"231":{description:"{var1} is a junction of ways on different layers: {var2}.",layer:"(layer: {layer})"},"232":{description:"{var1} is tagged with \"layer={var2}\". This need not be an error but it looks strange."},"270":{title:"Unusual motorway connection",description:"{var1} is a junction of a motorway and a highway other than \"motorway\", \"motorway_link\", \"trunk\", \"rest_area\", or \"construction\". Connection to \"service\" or \"unclassified\" is only valid if it has \"access=no/private\", or it leads to a motorway service area, or if it is a \"service=parking_aisle\"."},"280":{title:"Boundary issue",description:"There is an unspecified issue with this boundary."},"281":{title:"Boundary missing name",description:"{var1} has no name."},"282":{title:"Boundary missing admin level",description:"The boundary of {var1} has no valid numeric admin_level. Please do not mix admin levels (e.g. \"6;7\"). Always tag the lowest admin_level of all boundaries."},"283":{title:"Boundary not a closed loop",description:"The boundary of {var1} is not a closed loop."},"284":{title:"Boundary is split",description:"The boundary of {var1} splits here."},"285":{title:"Boundary admin_level too high",description:"{var1} has \"admin_level={var2}\" but belongs to a relation with lower \"admin_level\" (e.g. higher priority); it should have the lowest \"admin_level\" of all relations."},"290":{title:"Restriction issue",description:"There is an unspecified issue with this restriction."},"291":{title:"Restriction missing type",description:"{var1} has an unrecognized restriction type."},"292":{title:"Restriction missing \"from\" way",description:"{var1} has {var2} \"from\" members, but it should have 1."},"293":{title:"Restriction missing \"to\" way",description:"{var1} has {var2} \"to\" members, but it should have 1."},"294":{title:"Restriction \"from\" or \"to\" is not a way",description:"{var1} has \"from\" or \"to\" members which should be ways. {var2}."},"295":{title:"Restriction \"via\" is not an endpoint",description:"{var1} has a \"via\" (node {var2}) which is not the first or the last member of \"{var3}\" (way {var4})."},"296":{title:"Unusual restriction angle",description:"{var1} has a restriction type \"{var2}\" but the angle is {var3} degrees. Maybe the restriction type is not appropriate?"},"297":{title:"Wrong direction of \"to\" way",description:"{var1} does not match the direction of \"to\" way {var2}."},"298":{title:"Redundant restriction - oneway",description:"{var1} may be redundant. Entry already prohibited by \"oneway\" tag on {var2}."},"300":{title:"Missing maxspeed",description:"{var1} is missing a \"maxspeed\" tag and is tagged as motorway, trunk, primary, or secondary."},"310":{title:"Roundabout issue",description:"There is an unspecified issue with this roundabout."},"311":{title:"Roundabout not closed loop",description:"{var1} is part of a roundabout but is not closed-loop. (Split carriageways approaching a roundabout should not be tagged as roundabout)."},"312":{title:"Roundabout wrong direction",description:"If {var1} is in a country with {var2} traffic then its orientation goes the wrong way around."},"313":{title:"Roundabout weakly connected",description:"{var1} has only {var2} other road(s) connected. Roundabouts typically have 3 or more."},"320":{title:"Improper link connection",description:"{var1} is tagged as \"{var2}\" but doesn't have a connection to any other \"{var3}\" or \"{var4}\"."},"350":{title:"Improper bridge tag",description:"{var1} doesn't have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: {var2}."},"360":{title:"Missing local name tag",description:"It would be nice if {var1} had a local name tag \"name:XX={var2}\" where XX shows the language of its common name \"{var2}\"."},"370":{title:"Doubled places",description:"{var1} has tags in common with the surrounding way {var2} {var3} and seems to be redundant.",including_the_name:"(including the name {name})"},"380":{title:"Non-physical use of sport tag",description:"{var1} is tagged \"{var2}\" but has no physical tag (e.g. \"leisure\", \"building\", \"amenity\", or \"highway\")."},"390":{title:"Missing tracktype",description:"{var1} doesn't have a \"tracktype\" tag."},"400":{title:"Geometry issue",description:"There is an unspecified issue with the geometry here."},"401":{title:"Missing turn restriction",description:"Ways {var1} and {var2} join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning."},"402":{title:"Impossible angle",description:"{var1} bends in a very sharp angle here."},"410":{title:"Website issue",description:"There is an unspecified issue with a contact website or URL."},"411":{description:"{var1} may have an outdated URL: {var2} returned HTTP status code {var3}."},"412":{description:"{var1} may have an outdated URL: {var2} contained suspicious text \"{var3}\"."},"413":{description:"{var1} may have an outdated URL: {var2} did not contain keywords \"{var3}\"."}}}},streetside:{tooltip:"Streetside photos from Microsoft",title:"Bing Streetside",report:"Report a privacy concern with this image",view_on_bing:"View on Bing Maps",hires:"High resolution"},mapillary_images:{tooltip:"Street-level photos from Mapillary"},mapillary_map_features:{title:"Map Features",tooltip:"Map features from Mapillary",request_data:"Request Data",construction:{flat:{crosswalk_plain:"plain crosswalk"}},marking:{discrete:{crosswalk_zebra:"zebra crosswalk"}},object:{banner:"banner",bench:"bench",bike_rack:"bike rack",billboard:"billboard",catch_basin:"catch basin",cctv_camera:"CCTV camera",fire_hydrant:"fire hydrant",mailbox:"mailbox",manhole:"manhole",phone_booth:"phone booth",sign:{advertisement:"advertisement",information:"information sign",store:"shop sign"},street_light:"street light",support:{utility_pole:"utility pole"},traffic_cone:"traffic cone",traffic_light:{cyclists:"cyclist traffic light",general_horizontal:"horizontal traffic light",general_single:"single traffic light",general_upright:"vertical traffic light",other:"traffic light",pedestrians:"pedestrian traffic light"},trash_can:"trash can"}},mapillary:{title:"Mapillary",signs:{tooltip:"Traffic signs from Mapillary"},view_on_mapillary:"View this image on Mapillary"},openstreetcam_images:{tooltip:"Street-level photos from OpenStreetCam"},openstreetcam:{title:"OpenStreetCam",view_on_openstreetcam:"View this image on OpenStreetCam"},note:{note:"Note",title:"Edit note",anonymous:"anonymous",closed:"(Closed)",commentTitle:"Comments",status:{opened:"opened {when}",reopened:"reopened {when}",commented:"commented {when}",closed:"closed {when}"},newComment:"New Comment",inputPlaceholder:"Enter a comment to share with other users.",close:"Close Note",open:"Reopen Note",comment:"Comment",close_comment:"Close and Comment",open_comment:"Reopen and Comment",report:"Report","new":"New Note",newDescription:"Describe the issue.",save:"Save Note",login:"You must log in to change or comment on this note.",upload_explanation:"Your comments will be publicly visible to all OpenStreetMap users.",upload_explanation_with_user:"Your comments as {user} will be publicly visible to all OpenStreetMap users."},help:{title:"Help",key:"H",help:{title:"Help",welcome:"Welcome to the iD editor for [OpenStreetMap](https://www.openstreetmap.org/). With this editor you can update OpenStreetMap right from your web browser.",open_data_h:"Open Data",open_data:"Edits that you make on this map will be visible to everyone who uses OpenStreetMap. Your edits can be based on personal knowledge, on-the-ground surveying, or imagery collected from aerial or street level photos. Copying from commercial sources, like Google Maps, [is strictly forbidden](https://www.openstreetmap.org/copyright).",before_start_h:"Before you start",before_start:"You should be familiar with OpenStreetMap and this editor before you start editing. iD contains a walkthrough to teach you the basics of editing OpenStreetMap. Click \"Start the Walkthrough\" on this screen to take the tutorial - it takes only about 15 minutes.",open_source_h:"Open Source",open_source:"The iD editor is a collaborative open source project, and you are using version {version} now. The source code is available [on GitHub](https://github.com/openstreetmap/iD).",open_source_help:"You can help iD by [translating](https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating) or [reporting bugs](https://github.com/openstreetmap/iD/issues)."},overview:{title:"Overview",navigation_h:"Navigation",navigation_drag:"You can drag the map by pressing and holding down the {leftclick} left mouse button and moving the mouse around. You can also use the `↓`, `↑`, `←`, `→` arrow keys on your keyboard.",navigation_zoom:"You can zoom in or out by scrolling with the mouse wheel or trackpad, or by clicking the {plus} / {minus} buttons along the side of the map. You can also use the `+`, `-` keys on your keyboard.",features_h:"Map Features",features:"We use the word *features* to describe things that appear on the map, such as roads, buildings, or points of interest. Anything in the real world can be mapped as a feature on OpenStreetMap. Map features are represented on the map using *points*, *lines*, or *areas*.",nodes_ways:"In OpenStreetMap, points are sometimes called *nodes*, and lines and areas are sometimes called *ways*."},editing:{title:"Editing & Saving",select_h:"Select",select_left_click:"{leftclick} Left-click on a feature to select it. This will highlight it with a pulsing glow, and the sidebar will display details about that feature, such as its name or address.",select_right_click:"{rightclick} Right-click on a feature to display the editing menu, which shows the commands that are available, such as rotating, moving, and deleting.",multiselect_h:"Multiselect",multiselect_shift_click:"`{shift}`+{leftclick} left-click to select several features together.  This makes it easier to move or delete multiple items.",multiselect_lasso:"Another way to select multiple features is to hold down the `{shift}` key, then press and hold down the {leftclick} left mouse button and drag the mouse to draw a selection lasso. All of the points inside the lasso area will be selected.",undo_redo_h:"Undo & Redo",undo_redo:"Your edits are stored locally in your browser until you choose to save them to the OpenStreetMap server. You can undo edits by clicking the {undo} **Undo** button, and redo them by clicking the {redo} **Redo** button.",save_h:"Save",save:"Click {save} **Save** to finish your edits and send them to OpenStreetMap. You should remember to save your work frequently!",save_validation:"On the save screen, you'll have a chance to review what you've done. iD will also perform some basic checks for missing data and may offer helpful suggestions and warnings if something doesn't seem right.",upload_h:"Upload",upload:"Before uploading your changes you must enter a [changeset comment](https://wiki.openstreetmap.org/wiki/Good_changeset_comments). Then click **Upload** to send your changes to OpenStreetMap, where they will be merged into the map and publicly visible to everyone.",backups_h:"Automatic Backups",backups:"If you can't finish your edits in one sitting, for example if your computer crashes or you close the browser tab, your edits are still saved in your browser's storage. You can come back later (on the same browser and computer), and iD will offer to restore your work.",keyboard_h:"Keyboard Shortcuts",keyboard:"You can view a list of keyboard shortcuts by pressing the `?` key."},feature_editor:{title:"Feature Editor",intro:"The *feature editor* appears alongside the map, and allows you to see and edit all of the information for the selected feature.",definitions:"The top section displays the feature's type. The middle section contains *fields* showing the feature's attributes, such as its name or address.",type_h:"Feature Type",type:"You can click on the feature type to change the feature to a different type. Everything that exists in the real world can be added to OpenStreetMap, so there are thousands of feature types to choose from.",type_picker:"The type picker displays the most common feature types, such as parks, hospitals, restaurants, roads, and buildings. You can search for anything by typing what you're looking for in the search box. You can also click the {inspect} **Info** icon next to the feature type to learn more about it.",fields_h:"Fields",fields_all_fields:"The \"All fields\" section contains all of the feature's details that you may edit. In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.",fields_example:"Each feature type will display different fields. For example, a road may display fields for its surface and speed limit, but a restaurant may display fields for the type of food it serves and the hours it is open.",fields_add_field:"You can also click the \"Add field\" dropdown to add more fields, such as a description, Wikipedia link, wheelchair access, and more.",tags_h:"Tags",tags_all_tags:"Below the fields section, you can expand the \"All tags\" section to edit any of the OpenStreetMap *tags* for the selected feature. Each tag consists of a *key* and *value*, data elements that define all of the features stored in OpenStreetMap.",tags_resources:"Editing a feature's tags requires intermediate knowledge about OpenStreetMap. You should consult resources like the [OpenStreetMap Wiki](https://wiki.openstreetmap.org/wiki/Main_Page) or [Taginfo](https://taginfo.openstreetmap.org/) to learn more about accepted OpenStreetMap tagging practices."},points:{title:"Points",intro:"*Points* can be used to represent features such as shops, restaurants, and monuments. They mark a specific location, and describe what's there.",add_point_h:"Adding Points",add_point:"To add a point, click the {point} **Point** button on the toolbar above the map, or press the shortcut key `1`. This will change the mouse cursor to a cross symbol.",add_point_finish:"To place the new point on the map, position the mouse cursor where the point should go, then {leftclick} left-click or press `Space`.",move_point_h:"Moving Points",move_point:"To move a point, place the mouse cursor over the point, then press and hold the {leftclick} left mouse button while dragging the point to its new location.",delete_point_h:"Deleting Points",delete_point:"It's OK to delete features that don't exist in the real world. Deleting a feature from OpenStreetMap removes it from the map that everyone uses, so you should make sure a feature is really gone before you delete it.",delete_point_command:"To delete a point, {rightclick} right-click on the point to select it and show the edit menu, then use the {delete} **Delete** command."},lines:{title:"Lines",intro:"*Lines* are used to represent features such as roads, railroads, and rivers. Lines should be drawn down the center of the feature that they represent.",add_line_h:"Adding Lines",add_line:"To add a line, click the {line} **Line** button on the toolbar above the map, or press the shortcut key `2`. This will change the mouse cursor to a cross symbol.",add_line_draw:"Next, position the mouse cursor where the line should begin and {leftclick} left-click or press `Space` to begin placing nodes along the line. Continue placing more nodes by clicking or pressing `Space`. While drawing, you can zoom in or drag the map in order to add more detail.",add_line_finish:"To finish a line, press `{return}` or click again on the last node.",modify_line_h:"Modifying Lines",modify_line_dragnode:"Often you'll see lines that aren't shaped correctly, for example a road that does not match up with the background imagery. To adjust the shape of a line, first {leftclick} left-click to select it. All nodes of the line will be drawn as small circles. You can then drag the nodes to better locations.",modify_line_addnode:"You can also create new nodes along a line either by {leftclick}**x2** double-clicking on the line or by dragging the small triangles at the midpoints between nodes.",connect_line_h:"Connecting Lines",connect_line:"Having roads connected properly is important for the map and essential for providing driving directions.",connect_line_display:"The connections between roads are drawn with gray circles. The endpoints of a line are drawn with larger white circles if they don't connect to anything.",connect_line_drag:"To connect a line to another feature, drag one of the line's nodes onto the other feature until both features snap together. Tip: You can hold down the `{alt}` key to prevent nodes from connecting to other features.",connect_line_tag:"If you know that the connection has traffic lights or crosswalks, you can add them by selecting the connecting node and using the feature editor to select the correct feature's type.",disconnect_line_h:"Disconnecting Lines",disconnect_line_command:"To disconnect a road from another feature, {rightclick} right-click the connecting node and select the {disconnect} **Disconnect** command from the editing menu.",move_line_h:"Moving Lines",move_line_command:"To move an entire line, {rightclick} right-click the line and select the {move} **Move** command from the editing menu. Then move the mouse, and {leftclick} left-click to place the line in a new location.",move_line_connected:"Lines that are connected to other features will stay connected as you move the line to a new location. iD may prevent you from moving a line across another connected line.",delete_line_h:"Deleting Lines",delete_line:"If a line is entirely incorrect, for example a road that doesn't exist in the real world, it's OK to delete it. Be careful when deleting features: the background imagery you are using might be outdated, and a road that looks wrong could simply be newly built.",delete_line_command:"To delete a line, {rightclick} right-click on the line to select it and show the edit menu, then use the {delete} **Delete** command."},areas:{title:"Areas",intro:"*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas. Areas should be traced around the edge of the feature that they represent, for example, around the base of a building.",point_or_area_h:"Points or Areas?",point_or_area:"Many features can be represented as points or areas. You should map buildings and property outlines as areas whenever possible. Place points inside a building area to represent businesses, amenities, and other features located inside the building.",add_area_h:"Adding Areas",add_area_command:"To add an area, click the {area} **Area** button on the toolbar above the map, or press the shortcut key `3`. This will change the mouse cursor to a cross symbol.",add_area_draw:"Next, position the mouse cursor at one of the corners of the feature and {leftclick} left-click or press `Space` to begin placing nodes around the outer edge of the area. Continue placing more nodes by clicking or pressing `Space`. While drawing, you can zoom in or drag the map in order to add more detail.",add_area_finish:"To finish an area, press `{return}` or click again on either the first or last node.",square_area_h:"Square Corners",square_area_command:"Many area features like buildings have square corners. To square the corners of an area, {rightclick} right-click the edge of the area and select the {orthogonalize} **Square** command from the editing menu.",modify_area_h:"Modifying Areas",modify_area_dragnode:"Often you'll see areas that aren't shaped correctly, for example a building that does not match up with the background imagery. To adjust the shape of an area, first {leftclick} left-click to select it. All nodes of the area will be drawn as small circles. You can then drag the nodes to better locations.",modify_area_addnode:"You can also create new nodes along an area either by {leftclick}**x2** double-clicking on the edge of the area or by dragging the small triangles at the midpoints between nodes.",delete_area_h:"Deleting Areas",delete_area:"If an area is entirely incorrect, for example a building that doesn't exist in the real world, it's OK to delete it. Be cautious when deleting features - the background imagery you are using might be outdated, and a building that looks wrong could simply be newly built.",delete_area_command:"To delete an area, {rightclick} right-click on the area to select it and show the edit menu, then use the {delete} **Delete** command."},relations:{title:"Relations",intro:"A *relation* is a special type of feature in OpenStreetMap that groups together other features. The features that belong to a relation are called *members*, and each member can have a *role* in the relation.",edit_relation_h:"Editing Relations",edit_relation:"At the bottom of the feature editor, you can expand the \"All relations\" section to see if the selected feature is a member of any relations. You can then click on the relation to select and edit it.",edit_relation_add:"To add a feature to a relation, select the feature, then click the {plus} add button in the \"All relations\" section of the feature editor. You can choose from a list of nearby relations, or choose the \"New relation...\" option.",edit_relation_delete:"You can also click the {delete} **Delete** button to remove the selected feature from the relation. If you remove all of the members from a relation, the relation will be deleted automatically.",maintain_relation_h:"Maintaining Relations",maintain_relation:"For the most part, iD will maintain relations automatically as you edit. You should take care when replacing features that might be members of relations. For example if you delete a section of road and draw a new section of road to replace it, you should add the new section to the same relations (routes, turn restrictions, etc.) as the original.",relation_types_h:"Relation Types",multipolygon_h:"Multipolygons",multipolygon:"A *multipolygon* relation is a group of one or more *outer* features and one or more inner features. The outer features define the outer edges of the multipolygon, and the inner features define sub-areas or holes cut out from the inside of the multipolygon.",multipolygon_create:"To create a multipolygon, for example a building with a hole in it, draw the outer edge as an area and the inner edge as a line or different kind of area. Then `{shift}`+{leftclick} left-click to select both features, {rightclick} right-click to show the edit menu, and select the {merge} **Merge** command.",multipolygon_merge:"Merging several lines or areas will create a new multipolygon relation with all selected areas as members. iD will choose the inner and outer roles automatically, based on which features are contained inside other features.",turn_restriction_h:"Turn restrictions",turn_restriction:"A *turn restriction* relation is a group of several road segments in an intersection. Turn restrictions consist of a *from* road, *via* node or roads, and a *to* road.",turn_restriction_field:"To edit turn restrictions, select a junction node where two or more roads meet. The feature editor will display a special \"Turn Restrictions\" field containing a model of the intersection.",turn_restriction_editing:"In the \"Turn Restrictions\" field, click to select a \"from\" road, and see whether turns are allowed or restricted to any of the \"to\" roads. You can click on the turn icons to toggle them between allowed and restricted. iD will create relations automatically and set the from, via, and to roles based on your choices.",route_h:"Routes",route:"A *route* relation is a group of one or more line features that together form a route network, like a bus route, train route, or highway route.",route_add:"To add a feature to a route relation, select the feature and scroll down to the \"All relations\" section of the feature editor, then click the {plus} add button to add this feature to a nearby existing relation or a new relation.",boundary_h:"Boundaries",boundary:"A *boundary* relation is a group of one or more line features that together form an administrative boundary.",boundary_add:"To add a feature to a boundary relation, select the feature and scroll down to the \"All relations\" section of the feature editor, then click the {plus} add button to add this feature to a nearby existing relation or a new relation."},notes:{title:"Notes",intro:"*Notes* are used to alert other users that a feature requires fixing or attention. Notes mark a specific location on the map. To view existing notes or add new ones, click the {data} **Map data** panel to enable the OpenStreetMap notes layer.",add_note_h:"Adding Notes",add_note:"To add a new note, click the {note} **Note** button on the toolbar above the map, or press the shortcut key `4`. This will change the mouse cursor to a cross symbol. To place the new note on the map, position the mouse cursor where the note should go, then {leftclick} left-click or press `Space`.",move_note:"Only new notes can be moved. To move a note, place the mouse cursor over the new note, then press and hold the {leftclick} left mouse button while dragging the note to its new location.",update_note_h:"Closing, Reopening, and Commenting",update_note:"An existing note can be updated by closing it, reopening it, or adding a comment to it. Closing a note indicates that the problem has been resolved. Reopening a note indicates that the original issue is not resolved.",save_note_h:"Saving Notes",save_note:"You must save any note edits individually by clicking the buttons below the note comments. Note edits are **not** included in changesets that you upload to OpenStreetMap."},imagery:{title:"Background Imagery",intro:"The background imagery that appears beneath the map data is an important resource for mapping. This imagery can be aerial photos collected from satellites, airplanes, and drones, or it can be scanned historical maps or other freely available source data.",sources_h:"Imagery Sources",choosing:"To see which imagery sources are available for editing, click the {layers} **Background settings** button on the side of the map.",sources:"By default, a [Bing Maps](https://www.bing.com/maps/) satellite layer is chosen as the background image. Depending on where you are editing, other imagery sources will be available. Some may be newer or have higher resolution, so it is always useful to check and see which layer is the best one to use as a mapping reference.",offsets_h:"Adjusting Imagery Offset",offset:"Imagery is sometimes offset slightly from accurate map data. If you see a lot of roads or buildings shifted from the background imagery, it may be the imagery that's incorrect, so don't move them all to match the background. Instead, you can adjust the background so that it matches the existing data by expanding the \"Adjust Imagery Offset\" section at the bottom of the Background Settings pane.",offset_change:"Click on the small triangles to adjust the imagery offset in small steps, or hold the {leftclick} left mouse button and drag within the gray square to slide the imagery into alignment."},streetlevel:{title:"Street Level Photos",intro:"Street level photos are useful for mapping traffic signs, businesses, and other details that you can't see from satellite and aerial images. The iD editor supports street level photos from [Bing Streetside](https://www.microsoft.com/en-us/maps/streetside), [Mapillary](https://www.mapillary.com), and [OpenStreetCam](https://www.openstreetcam.org).",using_h:"Using Street Level Photos",using:"To use street level photos for mapping, click the {data} **Map data** panel on the side of the map to enable or disable the available photo layers.",photos:"When enabled, the photo layer displays a line along the sequence of photos. At higher zoom levels, a circle marks at each photo location, and at even higher zoom levels, a cone indicates the direction the camera was facing when the photo was taken.",viewer:"When you click on one of the photo locations, a photo viewer appears in the bottom corner of the map. The photo viewer contains controls to step forward and backward in the image sequence. It also shows the username of the person who captured the image, the date it was captured, and a link to view the image on the original site."},gps:{title:"GPS Traces",intro:"Collected GPS traces are a valuable source of data for OpenStreetMap. This editor supports *.gpx*, *.geojson*, and *.kml* files on your local computer. You can collect GPS traces with a smartphone, sports watch, or other GPS device.",survey:"For information on how to perform a GPS survey, read [Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).",using_h:"Using GPS Traces",using:"To use a GPS trace for mapping, drag and drop the data file onto the map editor. If it's recognized, it will be drawn on the map as a bright purple line. Click the {data} **Map data** panel on the side of the map to enable, disable, or zoom to your GPS data.",tracing:"The GPS track isn't sent to OpenStreetMap - the best way to use it is to draw on the map, using it as a guide for the new features that you add.",upload:"You can also [upload your GPS data to OpenStreetMap](https://www.openstreetmap.org/trace/create) for other users to use."},qa:{title:"Quality Assurance",intro:"*Quality Assurance* (Q/A) tools can find improper tags, disconnected roads, and other issues with OpenStreetMap, which mappers can then fix. To view existing Q/A issues, click the {data} **Map data** panel to enable a specific Q/A layer.",tools_h:"Tools",tools:"The following tools are currently supported: [KeepRight](https://www.keepright.at/) and [ImproveOSM](https://improveosm.org/en/). Expect iD to support [Osmose](https://osmose.openstreetmap.fr/) and more Q/A tools in the future.",issues_h:"Handling Issues",issues:"Handling Q/A issues is similar to handling notes. Click on a marker to view the issue details in the sidebar. Each tool has its own capabilities, but generally you can comment and/or close an issue."},field:{restrictions:{title:"Turn Restrictions Help",about:{title:"About",about:"This field allows you to inspect and modify turn restrictions. It displays a model of the selected intersection including other nearby connected roads.",from_via_to:"A turn restriction always contains: one **FROM way**, one **TO way**, and either one **VIA node** or one or more **VIA ways**.",maxdist:"The \"{distField}\" slider controls how far to search for additional connected roads.",maxvia:"The \"{viaField}\" slider adjusts how many via ways may be included in the search. (Tip: simple is better)"},inspecting:{title:"Inspecting",about:"Hover over any **FROM** segment to see whether it has any turn restrictions. Each possible **TO** destination will be drawn with a colored shadow showing whether a restriction exists.",from_shadow:"{fromShadow} **FROM segment**",allow_shadow:"{allowShadow} **TO Allowed**",restrict_shadow:"{restrictShadow} **TO Restricted**",only_shadow:"{onlyShadow} **TO Only**",restricted:"\"Restricted\" means that there is a turn restriction, for example \"No Left Turn\".",only:"\"Only\" means that a vehicle taking that path may only make that choice, for example \"Only Straight On\"."},modifying:{title:"Modifying",about:"To modify turn restrictions, first click on any starting **FROM** segment to select it. The selected segment will pulse, and all possible **TO** destinations will appear as turn symbols.",indicators:"Then, click on a turn symbol to toggle it between \"Allowed\", \"Restricted\", and \"Only\".",allow_turn:"{allowTurn} **TO Allowed**",restrict_turn:"{restrictTurn} **TO Restricted**",only_turn:"{onlyTurn} **TO Only**"},tips:{title:"Tips",simple:"**Prefer simple restrictions over complex ones.**",simple_example:"For example, avoid creating a via-way restriction if a simpler via-node turn restriction will do.",indirect:"**Some restrictions display the text \"(indirect)\" and are drawn lighter.**",indirect_example:"These restrictions exist because of another nearby restriction. For example, an \"Only Straight On\" restriction will indirectly create \"No Turn\" restrictions for all other paths through the intersection.",indirect_noedit:"You may not edit indirect restrictions. Instead, edit the nearby direct restriction."}}}},issues:{title:"Issues",key:"I",list_title:"Issues ({count})",errors:{list_title:"Errors ({count})"},warnings:{list_title:"Warnings ({count})"},rules:{title:"Rules"},user_resolved_issues:"Issues resolved by your edits",warnings_and_errors:"Warnings and errors",no_issues:{message:{everything:"Everything looks fine",everything_in_view:"Everything in view looks fine",edits:"Your edits look fine",edits_in_view:"Your edits in view look fine",no_edits:"You have no edits yet"},hidden_issues:{none:"Detected issues will appear here",elsewhere:"Issues elsewhere: {count}",everything_else:"Issues with everything else: {count}",everything_else_elsewhere:"Issues elsewhere with everything else: {count}",disabled_rules:"Issues with disabled rules: {count}",disabled_rules_elsewhere:"Issues elsewhere with disabled rules: {count}",ignored_issues:"Ignored issues: {count}",ignored_issues_elsewhere:"Ignored issues elsewhere: {count}"}},options:{what:{title:"Check:",edited:"My Edits",all:"Everything"},where:{title:"Where:",visible:"In View",all:"Everywhere"}},suggested:"Suggested updates:",enable_all:"Enable All",disable_all:"Disable All",reset_ignored:"Reset Ignored ({count})",fix_one:{title:"fix"},fix_all:{title:"Fix All",annotation:"Fixed several validation issues."},almost_junction:{title:"Almost Junctions",message:"{feature} is very close but not connected to {feature2}",tip:"Find features that should possibly be connected to other nearby features",self:{message:"{feature} ends very close to itself but does not reconnect"},"highway-highway":{reference:"Intersecting highways should share a junction vertex."}},close_nodes:{title:"Very Close Points",tip:"Find redundant and crowded points",message:"Two points in {way} are very close together",reference:"Redundant points in a way should be merged or moved apart.",detached:{message:"{feature} is too close to {feature2}",reference:"Separate points should not share a location."}},crossing_ways:{title:"Crossings Ways",message:"{feature} crosses {feature2}",tip:"Find features that incorrectly cross over one another","building-building":{reference:"Buildings should not intersect except on different layers."},"building-highway":{reference:"Highways crossing buildings should use bridges, tunnels, or different layers."},"building-railway":{reference:"Railways crossing buildings should use bridges, tunnels, or different layers."},"building-waterway":{reference:"Waterways crossing buildings should use tunnels or different layers."},"highway-highway":{reference:"Crossing highways should use bridges, tunnels, or intersections."},"highway-railway":{reference:"Highways crossing railways should use bridges, tunnels, or level crossings."},"highway-waterway":{reference:"Highways crossing waterways should use bridges, tunnels, or fords."},"railway-railway":{reference:"Crossing railways should be connected or use bridges or tunnels."},"railway-waterway":{reference:"Railways crossing waterways should use bridges or tunnels."},"waterway-waterway":{reference:"Crossing waterways should be connected or use tunnels."},"tunnel-tunnel":{reference:"Crossing tunnels should use different layers."},"tunnel-tunnel_connectable":{reference:"Crossing tunnels should be connected or use different layers."},"bridge-bridge":{reference:"Crossing bridges should use different layers."},"bridge-bridge_connectable":{reference:"Crossing bridges should be connected or use different layers."},"indoor-indoor":{reference:"Crossing indoor features should use different levels."},"indoor-indoor_connectable":{reference:"Crossing indoor features should be connected or use different levels."}},disconnected_way:{title:"Disconnected Ways",tip:"Find unroutable roads, paths, and ferry routes",routable:{message:{multiple:"{count} routable features are connected only to each other."},reference:"All roads, paths, and ferry routes should connect to form a single routing network."},highway:{message:"{highway} is disconnected from other roads and paths"}},fixme_tag:{message:"{feature} has a \"Fix Me\" request",reference:"A \"fixme\" tag indicates that a mapper has requested help with a feature."},generic_name:{message:"{feature} has the suspicious name \"{name}\"",message_language:"{feature} has the suspicious name \"{name}\" in {language}",reference:"Names should be the actual, on-the-ground names of features."},help_request:{title:"Help Requests",tip:"Find features where others requested assistance"},incompatible_source:{title:"Suspicious Sources",tip:"Find features with suspicious source tags",google:{feature:{message:"{feature} lists Google as a data source"},reference:"Google products are proprietary and must not be used as references."}},incorrect_name:{message:"{feature} has the mistaken name \"{name}\"",message_language:"{feature} has the mistaken name \"{name}\" in {language}"},invalid_format:{title:"Invalid Formatting",tip:"Find tags with unexpected formats",email:{message:"{feature} has an invalid email address",message_multi:"{feature} has multiple invalid email addresses",reference:"Email addresses must look like \"user@example.com\"."}},mismatched_geometry:{title:"Mismatched Geometry",tip:"Find features with conflicting tags and geometry"},missing_role:{title:"Missing Roles",message:"{member} has no role within {relation}",tip:"Find relations with missing or incorrect member roles",multipolygon:{reference:"Multipolygon members must have an inner or outer role."}},missing_tag:{title:"Missing Tags",tip:"Find features that are missing descriptive tags",reference:"Features must have tags that define what they are.",any:{message:"{feature} has no tags"},descriptive:{message:"{feature} has no descriptive tags"},relation_type:{message:"{feature} is a relation without a type"}},old_multipolygon:{message:"{multipolygon} has misplaced tags",reference:"Multipolygons should be tagged on their relation, not their outer way."},outdated_tags:{title:"Outdated Tags",message:"{feature} has outdated tags",tip:"Find features with deprecated tags that can be updated",reference:"Some tags change over time and should be updated.",incomplete:{message:"{feature} has incomplete tags",reference:"Some features should have additional tags."},noncanonical_brand:{message:"{feature} looks like a brand with nonstandard tags",message_incomplete:"{feature} looks like a brand with incomplete tags",reference:"All features of the same brand should be tagged the same way."}},point_as_vertex:{message:"{feature} should be a standalone point based on its tags",reference:"Some features shouldn't be part of lines or areas."},private_data:{title:"Private Information",tip:"Find features that may contain private information",reference:"Sensitive data like personal phone numbers should not be tagged.",contact:{message:"{feature} might be tagged with private contact information"}},suspicious_name:{title:"Suspicious Names",tip:"Find features with generic or suspicious names"},tag_suggests_area:{message:"{feature} should be a closed area based on the tag \"{tag}\"",reference:"Areas must have connected endpoints."},unknown_road:{message:"{feature} has no classification",reference:"Roads without a specific type may not appear in maps or routing."},impossible_oneway:{title:"Impossible One-Ways",tip:"Find route issues with one-way features",waterway:{connected:{start:{message:"{feature} flows away from a connected waterway"},end:{message:"{feature} flows against a connected waterway"},reference:"Waterway segments should all flow in the same direction."}},highway:{start:{message:"{feature} is unreachable",reference:"One-way roads must be accessible via other roads."},end:{message:"{feature} has no outlet",reference:"One-way roads must lead to other roads."}}},unclosed_multipolygon_part:{message:"{feature} has an unclosed part",reference:"All inner and outer parts of multipolygons should have connected endpoints."},unsquare_way:{title:"Unsquare Corners (up to {val}°)",message:"{feature} has unsquare corners",tip:"Find features with unsquare corners that can be drawn better",buildings:{reference:"Buildings with unsquare corners can often be drawn more accurately."}},vertex_as_point:{message:"{feature} should be part of a line or area based on its tags",reference:"Some features shouldn't be standalone points."},fix:{add_a_bridge:{title:"Add a bridge",annotation:"Added a bridge."},add_a_tunnel:{title:"Add a tunnel",annotation:"Added a tunnel."},address_the_concern:{title:"Address the concern"},connect_almost_junction:{annotation:"Connected very close features."},connect_crossing_features:{annotation:"Connected crossing features."},connect_endpoints:{title:"Connect the ends",annotation:"Connected the endpoints of a way."},connect_feature:{title:"Connect this feature"},connect_features:{title:"Connect the features"},connect_using_ford:{title:"Connect using a ford"},continue_from_start:{title:"Continue drawing from start"},continue_from_end:{title:"Continue drawing from end"},delete_feature:{title:"Delete this feature"},extract_point:{title:"Extract this point"},ignore_issue:{title:"Ignore this issue"},merge_close_vertices:{annotation:"Merged very close points in a way."},merge_points:{title:"Merge these points"},move_points_apart:{title:"Move these points apart"},move_tags:{title:"Move the tags",annotation:"Moved tags."},remove_from_relation:{title:"Remove from relation"},remove_generic_name:{annotation:"Removed a generic name."},remove_mistaken_name:{annotation:"Removed a mistaken name."},remove_private_info:{annotation:"Removed private information."},remove_proprietary_data:{title:"Remove any proprietary data"},remove_tag:{title:"Remove the tag",annotation:"Removed tag."},remove_tags:{title:"Remove the tags"},remove_the_name:{title:"Remove the name"},reposition_features:{title:"Reposition the features"},reverse_feature:{title:"Reverse this feature"},select_preset:{title:"Select a feature type"},select_road_type:{title:"Select a road type"},set_as_inner:{title:"Set as inner"},set_as_outer:{title:"Set as outer"},square_feature:{title:"Square this feature"},tag_as_disconnected:{title:"Tag as disconnected",annotation:"Tagged very close features as disconnected."},tag_as_unsquare:{title:"Tag as physically unsquare",annotation:"Tagged a way as having unsquare corners."},tag_this_as_higher:{title:"Tag this as higher"},tag_this_as_lower:{title:"Tag this as lower"},upgrade_tags:{title:"Upgrade the tags",annotation:"Upgraded old tags."},use_different_layers:{title:"Use different layers"},use_different_layers_or_levels:{title:"Use different layers or levels"},use_different_levels:{title:"Use different levels"}}},intro:{done:"done",ok:"OK",graph:{block_number:"<value for addr:block_number>",city:"Three Rivers",county:"<value for addr:county>",district:"<value for addr:district>",hamlet:"<value for addr:hamlet>",neighbourhood:"<value for addr:neighbourhood>",postcode:"49093",province:"<value for addr:province>",quarter:"<value for addr:quarter>",state:"MI",subdistrict:"<value for addr:subdistrict>",suburb:"<value for addr:suburb>",countrycode:"us",name:{"1st-avenue":"1st Avenue","2nd-avenue":"2nd Avenue","4th-avenue":"4th Avenue","5th-avenue":"5th Avenue","6th-avenue":"6th Avenue","6th-street":"6th Street","7th-avenue":"7th Avenue","8th-avenue":"8th Avenue","9th-avenue":"9th Avenue","10th-avenue":"10th Avenue","11th-avenue":"11th Avenue","12th-avenue":"12th Avenue","access-point-employment":"Access Point Employment","adams-street":"Adams Street","andrews-elementary-school":"Andrews Elementary School","andrews-street":"Andrews Street","armitage-street":"Armitage Street","barrows-school":"Barrows School","battle-street":"Battle Street","bennett-street":"Bennett Street","bowman-park":"Bowman Park","collins-drive":"Collins Drive","conrail-railroad":"Conrail Railroad","conservation-park":"Conservation Park","constantine-street":"Constantine Street","cushman-street":"Cushman Street","dollar-tree":"Dollar Tree","douglas-avenue":"Douglas Avenue","east-street":"East Street","elm-street":"Elm Street","flower-street":"Flower Street","foster-street":"Foster Street","french-street":"French Street","garden-street":"Garden Street","gem-pawnbroker":"Gem Pawnbroker","golden-finch-framing":"Golden Finch Framing","grant-avenue":"Grant Avenue","hoffman-pond":"Hoffman Pond","hoffman-street":"Hoffman Street","hook-avenue":"Hook Avenue","jefferson-street":"Jefferson Street","kelsey-street":"Kelsey Street","lafayette-park":"LaFayette Park","las-coffee-cafe":"L.A.'s Coffee Cafe","lincoln-avenue":"Lincoln Avenue","lowrys-books":"Lowry's Books","lynns-garage":"Lynn's Garage","main-street-barbell":"Main Street Barbell","main-street-cafe":"Main Street Cafe","main-street-fitness":"Main Street Fitness","main-street":"Main Street","maple-street":"Maple Street","marina-park":"Marina Park","market-street":"Market Street","memory-isle-park":"Memory Isle Park","memory-isle":"Memory Isle","michigan-avenue":"Michigan Avenue","middle-street":"Middle Street","millard-street":"Millard Street","moore-street":"Moore Street","morris-avenue":"Morris Avenue","mural-mall":"Mural Mall","paisanos-bar-and-grill":"Paisano's Bar and Grill","paisley-emporium":"Paisley Emporium","paparazzi-tattoo":"Paparazzi Tattoo","pealer-street":"Pealer Street","pine-street":"Pine Street","pizza-hut":"Pizza Hut","portage-avenue":"Portage Avenue","portage-river":"Portage River","preferred-insurance-services":"Preferred Insurance Services","railroad-drive":"Railroad Drive","river-city-appliance":"River City Appliance","river-drive":"River Drive","river-road":"River Road","river-street":"River Street","riverside-cemetery":"Riverside Cemetery","riverwalk-trail":"Riverwalk Trail","riviera-theatre":"Riviera Theatre","rocky-river":"Rocky River","saint-joseph-river":"Saint Joseph River","scidmore-park-petting-zoo":"Scidmore Park Petting Zoo","scidmore-park":"Scidmore Park","scouter-park":"Scouter Park","sherwin-williams":"Sherwin-Williams","south-street":"South Street","southern-michigan-bank":"Southern Michigan Bank","spring-street":"Spring Street","sturgeon-river-road":"Sturgeon River Road","three-rivers-city-hall":"Three Rivers City Hall","three-rivers-elementary-school":"Three Rivers Elementary School","three-rivers-fire-department":"Three Rivers Fire Department","three-rivers-high-school":"Three Rivers High School","three-rivers-middle-school":"Three Rivers Middle School","three-rivers-municipal-airport":"Three Rivers Municipal Airport","three-rivers-post-office":"Three Rivers Post Office","three-rivers-public-library":"Three Rivers Public Library","three-rivers":"Three Rivers","unique-jewelry":"Unique Jewelry","walnut-street":"Walnut Street","washington-street":"Washington Street","water-street":"Water Street","west-street":"West Street","wheeler-street":"Wheeler Street","william-towing":"William Towing","willow-drive":"Willow Drive","wood-street":"Wood Street","world-fare":"World Fare"}},welcome:{title:"Welcome",welcome:"Welcome! This walkthrough will teach you the basics of editing on OpenStreetMap.",practice:"All of the data in this walkthrough is just for practicing, and any edits that you make in the walkthrough will not be saved.",words:"This walkthrough will introduce some new words and concepts. When we introduce a new word, we'll use *italics*.",mouse:"You can use any input device to edit the map, but this walkthrough assumes you have a mouse with left and right buttons. **If you want to attach a mouse, do so now, then click OK.**",leftclick:"When this tutorial asks you to click or double-click, we mean with the left button. On a trackpad it might be a single-click or single-finger tap. **Left-click {num} times.**",rightclick:"Sometimes we'll also ask you to right-click. This might be the same as control-click, or two-finger tap on a trackpad. Your keyboard might even have a 'menu' key that works like right-click. **Right-click {num} times.**",chapters:"So far, so good! You can use the buttons below to skip chapters at any time or to restart a chapter if you get stuck. Let's begin! **Click '{next}' to continue.**"},navigation:{title:"Navigation",drag:"The main map area shows OpenStreetMap data on top of a background.{br}You can drag the map by pressing and holding the left mouse button while moving the mouse around. You can also use the arrow keys on your keyboard. **Drag the map!**",zoom:"You can zoom in or out by scrolling with the mouse wheel or trackpad, or by clicking the {plus} / {minus} buttons. **Zoom the map!**",features:"We use the word *features* to describe the things that appear on the map. Anything in the real world can be mapped as a feature on OpenStreetMap.",points_lines_areas:"Map features are represented using *points, lines, or areas.*",nodes_ways:"In OpenStreetMap, points are sometimes called *nodes*, and lines and areas are sometimes called *ways*.",click_townhall:"All features on the map can be selected by clicking on them. **Click on the point to select it.**",selected_townhall:"Great! The point is now selected. Selected features are drawn with a pulsing glow.",editor_townhall:"When a feature is selected, the *feature editor* is displayed alongside the map.",preset_townhall:"The top part of the feature editor shows the feature's type. This point is a {preset}.",fields_townhall:"The middle part of the feature editor contains *fields* showing the feature's attributes, such as its name and address.",close_townhall:"**Close the feature editor by hitting escape or pressing the {button} button in the upper corner.**",search_street:"You can also search for features in the current view, or worldwide. **Search for '{name}'.**",choose_street:"**Choose {name} from the list to select it.**",selected_street:"Great! {name} is now selected.",editor_street:"The fields shown for a street are different than the fields that were shown for the town hall.{br}For this selected street, the feature editor shows fields like '{field1}' and '{field2}'. **Close the feature editor by hitting escape or pressing the {button} button.**",play:"Try moving the map and clicking on some other features to see what kinds of things can be added to OpenStreetMap. **When you are ready to continue to the next chapter, click '{next}'.**"},points:{title:"Points",add_point:"*Points* can be used to represent features such as shops, restaurants, and monuments.{br}They mark a specific location, and describe what's there. **Click the {button} Point button to add a new point.**",place_point:"To place the new point on the map, position your mouse cursor where the point should go, then left-click or press the spacebar. **Move the mouse pointer over this building, then left-click or press the spacebar.**",search_cafe:"There are many different features that can be represented by points. The point you just added is a cafe. **Search for '{preset}'.**",choose_cafe:"**Choose {preset} from the list.**",feature_editor:"The point is now marked as a cafe. Using the feature editor, we can add more information about the cafe.",add_name:"In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.{br}Let's pretend that you have local knowledge of this cafe, and you know its name. **Add a name for the cafe.**",add_close:"The feature editor will remember all of your changes automatically. **When you are finished adding the name, hit escape, enter, or click the {button} button to close the feature editor.**",reselect:"Often points will already exist, but have mistakes or be incomplete. We can edit existing points. **Click to select the cafe you just created.**",update:"Let's fill in some more details for this cafe. You can change its name, add a cuisine, or add an address. **Change the cafe details.**",update_close:"**When you are finished updating the cafe, hit escape, enter, or click the {button} button to close the feature editor.**",rightclick:"You can right-click on any feature to see the *edit menu*, which shows a list of editing operations that can be performed. **Right-click to select the point you created and show the edit menu.**","delete":"It's OK to delete features that don't exist in the real world.{br}Deleting a feature from OpenStreetMap removes it from the map that everyone uses, so you should make sure a feature is really gone before you delete it. **Click on the {button} button to delete the point.**",undo:"You can always undo any changes up until you save your edits to OpenStreetMap. **Click on the {button} button to undo the delete and get the point back.**",play:"Now that you know how to create and edit points, try creating a few more points for practice! **When you are ready to continue to the next chapter, click '{next}'.**"},areas:{title:"Areas",add_playground:"*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas.{br}They can also be used for more detailed mapping of many features you might normally map as points. **Click the {button} Area button to add a new area.**",start_playground:"Let's add this playground to the map by drawing an area. Areas are drawn by placing *nodes* along the outer edge of the feature. **Click or press spacebar to place a starting node on one of the corners of the playground.**",continue_playground:"Continue drawing the area by placing more nodes along the playground's edge. It is OK to connect the area to the existing walking paths.{br}Tip: You can hold down the '{alt}' key to prevent nodes from connecting to other features. **Continue drawing an area for the playground.**",finish_playground:"Finish the area by pressing enter, or clicking again on either the first or last node. **Finish drawing an area for the playground.**",search_playground:"**Search for '{preset}'.**",choose_playground:"**Choose {preset} from the list.**",add_field:"This playground doesn't have an official name, so we won't add anything in the Name field.{br}Instead let's add some additional details about the playground to the Description field. **Open the Add Field list.**",choose_field:"**Choose {field} from the list.**",retry_add_field:"You didn't select the {field} field. Let's try again.",describe_playground:"**Add a description, then click the {button} button to close the feature editor.**",play:"Good job! Try drawing a few more areas, and see what other kinds of area features you can add to OpenStreetMap. **When you are ready to continue to the next chapter, click '{next}'.**"},lines:{title:"Lines",add_line:"*Lines* are used to represent features such as roads, railroads, and rivers. **Click the {button} Line button to add a new line.**",start_line:"Here is a road that is missing. Let's add it!{br}In OpenStreetMap, lines should be drawn down the center of the road. You can drag and zoom the map while drawing if necessary. **Start a new line by clicking at the top end of this missing road.**",intersect:"Click or press spacebar to add more nodes to the line.{br}Roads, and many other types of lines, are part of a larger network. It is important for these lines to be connected properly in order for routing applications to work. **Click on {name} to create an intersection connecting the two lines.**",retry_intersect:"The road needs to intersect {name}. Let's try again!",continue_line:"Continue drawing the line for the new road. Remember that you can drag and zoom the map if needed.{br}When you are finished drawing, click on the last node again. **Finish drawing the road.**",choose_category_road:"**Select {category} from the list.**",choose_preset_residential:"There are many different types of roads, but this one is a residential road. **Choose the {preset} type.**",retry_preset_residential:"You didn't select the {preset} type. **Click here to choose again.**",name_road:"**Give this road a name, then hit escape, enter, or click the {button} button to close the feature editor.**",did_name_road:"Looks good! Next we will learn how to update the shape of a line.",update_line:"Sometimes you will need to change the shape of an existing line. Here is a road that doesn't look quite right.",add_node:"We can add some nodes to this line to improve its shape. One way to add a node is to double-click the line where you want to add a node. **Double-click on the line to create a new node.**",start_drag_endpoint:"When a line is selected, you can drag any of its nodes by clicking and holding down the left mouse button while you drag. **Drag the endpoint to the place where these roads should intersect.**",finish_drag_endpoint:"This spot looks good. **Release the left mouse button to finish dragging.**",start_drag_midpoint:"Small triangles are drawn at the *midpoints* between nodes. Another way to create a new node is to drag a midpoint to a new location. **Drag the midpoint triangle to create a new node along the curve of the road.**",continue_drag_midpoint:"This line is looking much better! Continue to adjust this line by double-clicking or dragging midpoints until the curve matches the road shape. **When you're happy with how the line looks, click OK.**",delete_lines:"It's OK to delete lines for roads that don't exist in the real world.{br}Here's an example where the city planned a {street} but never built it. We can improve this part of the map by deleting the extra lines.",rightclick_intersection:"The last real street is {street1}, so we will *split* {street2} at this intersection and remove everything above it. **Right click on the intersection node.**",split_intersection:"**Click on the {button} button to split {street}.**",retry_split:"You didn't click the Split button. Try again.",did_split_multi:"Good job! {street1} is now split into two pieces. The top part can be removed. **Click the top part of {street2} to select it.**",did_split_single:"**Click the top part of {street2} to select it.**",multi_select:"{selected} is now selected. Let's also select {other1}. You can shift-click to select multiple things. **Shift-click on {other2}.**",multi_rightclick:"Good! Both lines to delete are now selected. **Right-click on one of the lines to show the edit menu.**",multi_delete:"**Click on the {button} button to delete the extra lines.**",retry_delete:"You didn't click the Delete button. Try again.",play:"Great! Use the skills that you've learned in this chapter to practice editing some more lines. **When you are ready to continue to the next chapter, click '{next}'.**"},buildings:{title:"Buildings",add_building:"OpenStreetMap is the world's largest database of buildings.{br}You can help improve this database by tracing buildings that aren't already mapped. **Click the {button} Area button to add a new area.**",start_building:"Let's add this house to the map by tracing its outline.{br}Buildings should be traced around their footprint as accurately as possible. **Click or press spacebar to place a starting node on one of the corners of the building.**",continue_building:"Continue adding more nodes to trace the outline of the building. Remember that you can zoom in if you want to add more details.{br}Finish the building by pressing enter, or clicking again on either the first or last node. **Finish tracing the building.**",retry_building:"It looks like you had some trouble placing the nodes at the building corners. Try again!",choose_category_building:"**Choose {category} from the list.**",choose_preset_house:"There are many different types of buildings, but this one is clearly a house.{br}If you're not sure of the type, it's OK to just choose the generic Building type. **Choose the {preset} type.**",close:"**Hit escape or click the {button} button to close the feature editor.**",rightclick_building:"**Right-click to select the building you created and show the edit menu.**",square_building:"The house that you just added will look even better with perfectly square corners. **Click on the {button} button to square the building shape.**",retry_square:"You didn't click the Square button. Try again.",done_square:"See how the corners of the building moved into place? Let's learn another useful trick.",add_tank:"Next we'll trace this circular storage tank. **Click the {button} Area button to add a new area.**",start_tank:"Don't worry, you won't need to draw a perfect circle. Just draw an area inside the tank that touches its edge. **Click or press spacebar to place a starting node on the edge of the tank.**",continue_tank:"Add a few more nodes around the edge. The circle will be created outside the nodes that you draw.{br}Finish the area by pressing enter, or clicking again on either the first or last node. **Finish tracing the tank.**",search_tank:"**Search for '{preset}'.**",choose_tank:"**Choose {preset} from the list.**",rightclick_tank:"**Right-click to select the storage tank you created and show the edit menu.**",circle_tank:"**Click on the {button} button to make the tank a circle.**",retry_circle:"You didn't click the Circularize button. Try again.",play:"Great Job! Practice tracing a few more buildings, and try some of the other commands on the edit menu. **When you are ready to continue to the next chapter, click '{next}'.**"},startediting:{title:"Start Editing",help:"You're now ready to edit OpenStreetMap!{br}You can replay this walkthrough anytime or view more documentation by clicking the {button} Help button or pressing the '{key}' key.",shortcuts:"You can view a list of commands along with their keyboard shortcuts by pressing the '{key}' key.",save:"Don't forget to regularly save your changes!",start:"Start mapping!"}},shortcuts:{title:"Keyboard shortcuts",tooltip:"Show the keyboard shortcuts screen.",toggle:{key:"?"},key:{alt:"Alt",backspace:"Backspace",cmd:"Cmd",ctrl:"Ctrl","delete":"Delete",del:"Del",end:"End",enter:"Enter",esc:"Esc",home:"Home",option:"Option",pause:"Pause",pgdn:"PgDn",pgup:"PgUp","return":"Return",shift:"Shift",space:"Space"},gesture:{drag:"drag"},or:"-or-",browsing:{title:"Browsing",navigation:{title:"Navigation",pan:"Pan map",pan_more:"Pan map by one screenful",zoom:"Zoom in / Zoom out",zoom_more:"Zoom in / Zoom out by a lot"},help:{title:"Help",help:"Show help/documentation",keyboard:"Show keyboard shortcuts"},display_options:{title:"Display options",background:"Toggle background imagery pane",background_switch:"Switch back to last background",map_data:"Toggle map data pane",issues:"Toggle validation issues pane",preferences:"Toggle user preferences pane",fullscreen:"Enter full screen mode",sidebar:"Toggle sidebar",wireframe:"Toggle wireframe mode",osm_data:"Toggle OpenStreetMap data",minimap:"Toggle minimap",highlight_edits:"Highlight unsaved edits"},selecting:{title:"Selecting features",select_one:"Select a single feature",select_multi:"Select multiple features",lasso:"Draw a selection lasso around features",search:"Find features matching search text"},with_selected:{title:"With features selected",edit_menu:"Toggle edit menu",zoom_to:"Zoom to selected features"},vertex_selected:{title:"With node selected",previous:"Jump to previous node",next:"Jump to next node",first:"Jump to first node",last:"Jump to last node",change_parent:"Switch parent way"}},editing:{title:"Editing",drawing:{title:"Drawing",add_point:"'Add point' mode",add_line:"'Add line' mode",add_area:"'Add area' mode",add_note:"'Add note' mode",place_point:"Place a point or note",disable_snap:"Hold to disable point snapping",stop_line:"Finish drawing a line or area"},operations:{title:"Operations",continue_line:"Continue a line at the selected node",merge:"Combine (merge) selected features",disconnect:"Disconnect features at the selected node",extract:"Extract a point from a feature",split:"Split a line into two at the selected node",reverse:"Reverse selected features",move:"Move selected features",rotate:"Rotate selected features",orthogonalize:"Square corners of a line or area",straighten:"Straighten a line or points",circularize:"Circularize a closed line or area",reflect_long:"Reflect features across the longer axis",reflect_short:"Reflect features across the shorter axis","delete":"Delete selected features"},commands:{title:"Commands",copy:"Copy selected features",paste:"Paste copied features",undo:"Undo last action",redo:"Redo last action",save:"Save changes"}},tools:{title:"Tools",info:{title:"Information",all:"Toggle all information panels",background:"Toggle background panel",history:"Toggle history panel",location:"Toggle location panel",measurement:"Toggle measurement panel"}}},units:{feet:"{quantity} ft",miles:"{quantity} mi",square_feet:"{quantity} sq ft",square_miles:"{quantity} sq mi",acres:"{quantity} ac",meters:"{quantity} m",kilometers:"{quantity} km",square_meters:"{quantity} m²",square_kilometers:"{quantity} km²",hectares:"{quantity} ha",area_pair:"{area1} ({area2})",arcdegrees:"{quantity}°",arcminutes:"{quantity}′",arcseconds:"{quantity}″",north:"N",south:"S",east:"E",west:"W",coordinate:"{coordinate}{direction}",coordinate_pair:"{latitude}, {longitude}"},wikidata:{identifier:"Identifier",label:"Label",description:"Description"},presets:{categories:{"category-barrier":{name:"Barrier Features"},"category-building":{name:"Building Features"},"category-golf":{name:"Golf Features"},"category-landuse":{name:"Land Use Features"},"category-natural":{name:"Natural Features"},"category-path":{name:"Paths"},"category-rail":{name:"Rails"},"category-restriction":{name:"Restriction Features"},"category-road_major":{name:"Major Roads"},"category-road_minor":{name:"Minor Roads"},"category-road_service":{name:"Service Roads"},"category-route":{name:"Route Features"},"category-utility":{name:"Utility Features"},"category-water":{name:"Water Bodies"},"category-waterway":{name:"Waterways"}},fields:{access_aisle:{label:"Type"},access_simple:{label:"Allowed Access",terms:"permitted,private,public"},access:{label:"Allowed Access",terms:"",placeholder:"Not Specified",types:{access:"All",foot:"Foot",motor_vehicle:"Motor Vehicles",bicycle:"Bicycles",horse:"Horses"},options:{yes:{title:"Allowed",description:"Access allowed by law; a right of way"},no:{title:"Prohibited",description:"Access not allowed to the general public"},permissive:{title:"Permissive",description:"Access allowed until such time as the owner revokes the permission"},"private":{title:"Private",description:"Access allowed only with permission of the owner on an individual basis"},designated:{title:"Designated",description:"Access allowed according to signs or specific local laws"},destination:{title:"Destination",description:"Access allowed only to reach a destination"},dismount:{title:"Dismount",description:"Access allowed but rider must dismount"},permit:{title:"Permit",description:"Access allowed only with a valid permit or license"}}},"addr/interpolation":{label:"Type",options:{all:"All",even:"Even",odd:"Odd",alphabetic:"Alphabetic"}},address:{label:"Address",terms:"location",placeholders:{block_number:"Block Number","block_number!jp":"Block No.",city:"City","city!cn":"City/Prefecture/League","city!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town",conscriptionnumber:"123",country:"Country",county:"County","county!jp":"District",district:"District","district!cn":"District/County/Banner","district!vn":"Arrondissement/Town/District",floor:"Floor",hamlet:"Hamlet",housename:"Housename",housenumber:"123","housenumber!jp":"Building No./Lot No.",neighbourhood:"Neighbourhood","neighbourhood!jp":"Chōme/Aza/Koaza",place:"Place",postcode:"Postcode",province:"Province","province!cn":"Province/Municipality/AR/SAR","province!jp":"Prefecture",quarter:"Quarter","quarter!jp":"Ōaza/Machi",state:"State",street:"Street",subdistrict:"Subdistrict","subdistrict!vn":"Ward/Commune/Townlet",suburb:"Suburb","suburb!jp":"Ward",unit:"Unit"}},admin_level:{label:"Admin Level"},aerialway:{label:"Type"},"aerialway/access":{label:"Access",options:{entry:"Entry",exit:"Exit",both:"Both"}},"aerialway/bubble":{label:"Bubble"},"aerialway/capacity":{label:"Capacity (per hour)",placeholder:"500, 2500, 5000..."},"aerialway/duration":{label:"Duration (minutes)",placeholder:"1, 2, 3..."},"aerialway/heating":{label:"Heated"},"aerialway/occupancy":{label:"Occupancy",placeholder:"2, 4, 8..."},"aerialway/summer/access":{label:"Access (summer)",options:{entry:"Entry",exit:"Exit",both:"Both"}},aeroway:{label:"Type"},agrarian:{label:"Products"},air_conditioning:{label:"Air Conditioning",terms:"cooling system,refrigeration"},amenity:{label:"Type"},animal_boarding:{label:"For Animals"},animal_breeding:{label:"For Animals"},animal_shelter:{label:"For Animals"},architect:{label:"Architect",terms:"building designer"},"area/highway":{label:"Type"},artist:{label:"Artist"},artwork_type:{label:"Type"},atm:{label:"ATM"},attraction:{label:"Type"},baby_feeding:{label:"Baby Nursing Area",terms:"baby feeding,breastfeeding,lactation,mothers,nursing",options:{room:"Dedicated Room",yes:"Marked Space",no:"None"}},baby_seat:{label:"Baby Seat"},backcountry:{label:"Backcountry",terms:""},backrest:{label:"Backrest"},bar:{label:"Bar",terms:""},barrier:{label:"Type"},basin:{label:"Type"},"bath/open_air":{label:"Open Air"},"bath/sand_bath":{label:"Sand Bath"},"bath/type":{label:"Specialty",options:{onsen:"Japanese Onsen",foot_bath:"Foot Bath",hot_spring:"Hot Spring"}},beauty:{label:"Beauty Specialty"},bench:{label:"Bench",terms:"seating"},bicycle_parking:{label:"Type"},bin:{label:"Waste Bin",terms:"garbage can,trash can"},blind:{label:"Blind Person Access",terms:"sight impairment,vision impairment",options:{yes:"Yes",limited:"Limited",no:"No"}},blood_components:{label:"Blood Components",options:{whole:"whole blood",plasma:"plasma",platelets:"platelets",stemcells:"stem cell samples"}},board_type:{label:"Type"},bollard:{label:"Type"},booth:{label:"Booth"},bottle:{label:"Bottle Filling"},boules:{label:"Type"},boundary:{label:"Type"},brand:{label:"Brand",terms:""},brewery:{label:"Draft Beers",terms:"on tap"},bridge:{label:"Type",placeholder:"Default"},"bridge/support":{label:"Type"},building_area:{label:"Building",terms:""},building:{label:"Building",terms:"structure"},"building/levels_building":{label:"Building Levels",terms:"",placeholder:"2, 4, 6..."},"building/levels":{label:"Levels",terms:"",placeholder:"2, 4, 6..."},"building/levels/underground":{label:"Underground Levels",terms:"basement levels",placeholder:"2, 4, 6..."},"building/material":{label:"Material",terms:""},bunker_type:{label:"Type"},cables:{label:"Cables",placeholder:"1, 2, 3..."},"camera/direction":{label:"Direction (Degrees Clockwise)",placeholder:"45, 90, 180, 270"},"camera/mount":{label:"Camera Mount"},"camera/type":{label:"Camera Type",options:{fixed:"Fixed",panning:"Panning",dome:"Dome"}},capacity:{label:"Capacity",terms:"",placeholder:"50, 100, 200..."},cash_in:{label:"Cash In"},castle_type:{label:"Type"},changing_table:{label:"Diaper Changing Table"},charge_fee:{label:"Fee Amount",terms:"",placeholder:"1 EUR, 5 USD, 10 JPY…"},charge_toll:{label:"Toll Amount",terms:"",placeholder:"1 EUR, 5 USD, 10 JPY…"},check_date:{label:"Last Checked Date"},clothes:{label:"Clothes"},club:{label:"Type"},collection_times:{label:"Collection Times"},colour:{label:"Color",terms:""},comment:{label:"Changeset Comment",placeholder:"Brief description of your contributions (required)"},communication_multi:{label:"Communication Types",terms:""},connectivity:{label:"Connectivity"},construction:{label:"Type"},consulate:{label:"Type"},consulting:{label:"Expertise"},"contact/webcam":{label:"Webcam URL",placeholder:"http://example.com/"},content:{label:"Content"},conveying_escalator:{label:"Escalator"},conveying:{label:"Movement Direction",options:{forward:"Forward",backward:"Backward",reversible:"Reversible"}},country_flag:{label:"Flag Country"},country:{label:"Country"},couplings:{label:"Couplings",placeholder:"1, 2, 3..."},covered:{label:"Covered",terms:""},craft:{label:"Type"},"crane/type":{label:"Crane Type",options:{portal_crane:"Portal Crane","floor-mounted_crane":"Floor-mounted Crane",travel_lift:"Travel Lift"}},crop:{label:"Crops"},crossing:{label:"Type"},"crossing/island":{label:"Refuge Island"},cuisine:{label:"Cuisines",terms:"fare,food types"},currency_multi:{label:"Currency Types",terms:"bills,cash,coins,money"},cutting:{label:"Type",placeholder:"Default"},cycle_network:{label:"Network"},cycleway:{label:"Bike Lanes",terms:"",placeholder:"none",types:{"cycleway:left":"Left side","cycleway:right":"Right side"},options:{none:{title:"None",description:"No bike lane"},lane:{title:"Standard bike lane",description:"A bike lane separated from auto traffic by a painted line"},shared_lane:{title:"Shared bike lane",description:"A bike lane with no separation from auto traffic"},track:{title:"Bike track",description:"A bike lane separated from traffic by a physical barrier"},share_busway:{title:"Bike lane shared with bus",description:"A bike lane shared with a bus lane"},opposite_lane:{title:"Opposite bike lane",description:"A bike lane that travels in the opposite direction of traffic"},opposite:{title:"Contraflow bike lane",description:"A bike lane that travels in both directions on a one-way street"}}},"dance/style":{label:"Dance Styles"},date:{label:"Date"},delivery:{label:"Delivery",terms:""},denomination:{label:"Denomination",terms:""},denotation:{label:"Denotation"},departures_board:{label:"Departures Board",options:{yes:"Yes",timetable:"Timetable",realtime:"Realtime",no:"None"}},description:{label:"Description",terms:"summary"},design:{label:"Design"},destination_oneway:{label:"Destinations"},"destination/ref_oneway":{label:"Destination Road Numbers"},"destination/symbol_oneway":{label:"Destination Symbols",terms:""},devices:{label:"Devices",placeholder:"1, 2, 3..."},diameter:{label:"Diameter",placeholder:"5 mm, 10 cm, 15 in…"},diet_multi:{label:"Diet Types",terms:"gluten free,fruitarian,halal,kosher,lactose free,meat,pescatarian,raw,vegan,vegetarian"},diplomatic:{label:"Type"},"diplomatic/services":{label:"Services"},direction_cardinal:{label:"Direction",options:{N:"North",E:"East",S:"South",W:"West",NE:"Northeast",SE:"Southeast",SW:"Southwest",NW:"Northwest",NNE:"North-northeast",ENE:"East-northeast",ESE:"East-southeast",SSE:"South-southeast",SSW:"South-southwest",WSW:"West-southwest",WNW:"West-northwest",NNW:"North-northwest"}},direction_clock:{label:"Direction",options:{clockwise:"Clockwise",anticlockwise:"Counterclockwise"}},direction_vertex:{label:"Direction Affected",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},direction:{label:"Direction (Degrees Clockwise)",placeholder:"45, 90, 180, 270"},dispensing:{label:"Dispenses Prescriptions"},display:{label:"Display"},distance:{label:"Distance"},"disused/railway":{label:"Type"},dock:{label:"Type"},dog:{label:"Dogs",terms:"animals,pets",options:{yes:"Allowed",leashed:"Leashed Only",no:"Not Allowed"}},door_type:{label:"Type"},door:{label:"Door"},drink_multi:{label:"Drinks"},drinking_water:{label:"Drinkable",terms:"drinkworthy,potable"},drive_through:{label:"Drive-Through",terms:""},duration:{label:"Duration",terms:"",placeholder:"00:00"},electrified:{label:"Electrification",placeholder:"Contact Line, Electrified Rail...",options:{contact_line:"Contact Line",rail:"Electrified Rail",yes:"Yes (unspecified)",no:"No"}},elevation:{label:"Elevation",terms:"altitude"},email:{label:"Email",terms:"",placeholder:"example@example.com"},embankment:{label:"Type",placeholder:"Default"},embassy:{label:"Type"},emergency_combo:{label:"Type"},emergency:{label:"Emergency"},enforcement:{label:"Type"},entrance:{label:"Type"},except:{label:"Exceptions"},expected_rcn_route_relations:{label:"Adjacent Cycling Nodes"},expected_rwn_route_relations:{label:"Adjacent Walking Nodes"},faces:{label:"Faces"},fax:{label:"Fax",terms:"",placeholder:"+31 42 123 4567"},fee:{label:"Fee",terms:""},fence_type:{label:"Type"},"fire_hydrant/diameter":{label:"Diameter (mm, in, or letters)",terms:""},"fire_hydrant/pressure":{label:"Pressure (bar)",terms:""},"fire_hydrant/type":{label:"Shape",options:{pillar:"Pillar/Aboveground",underground:"Underground",wall:"Wall",pipe:"Capped Pipe"}},fireplace:{label:"Fireplace"},fishing:{label:"Fishing",terms:""},fitness_station:{label:"Equipment Type"},fixme:{label:"Fix Me",terms:"help request"},"flag/type":{label:"Flag Type"},floating:{label:"Floating"},flood_prone:{label:"Flood Prone",terms:""},ford:{label:"Type",placeholder:"Default"},fountain:{label:"Type"},frequency_electrified:{label:"Operating Frequency",terms:""},frequency:{label:"Operating Frequency",terms:""},from:{label:"From"},fuel_multi:{label:"Fuel Types"},fuel:{label:"Fuel"},gambling:{label:"Games"},gauge:{label:"Gauge"},gender:{label:"Gender",terms:"access,female,male,unisex",placeholder:"Unknown",options:{male:"Male",female:"Female",unisex:"Unisex"}},"generator/method":{label:"Method"},"generator/output/electricity":{label:"Power Output",placeholder:"50 MW, 100 MW, 200 MW..."},"generator/source":{label:"Source"},"generator/type":{label:"Type"},"geyser/height":{label:"Eruption Height"},"gnis/feature_id":{label:"GNIS Feature ID",terms:"Federal Geographic Names Information Service,United States Board on Geographic Names,USA"},government:{label:"Type"},grape_variety:{label:"Grape Varieties"},group_only:{label:"Groups Only",terms:""},guest_house:{label:"Type"},handicap:{label:"Handicap",placeholder:"1-18"},handrail:{label:"Handrail",terms:""},hashtags:{label:"Hashtags",placeholder:"#example"},healthcare:{label:"Type"},"healthcare/speciality":{label:"Specialties"},height_building:{label:"Building Height (Meters)",terms:""},height:{label:"Height (Meters)",terms:""},highspeed:{label:"High-Speed",terms:""},highway:{label:"Type"},historic:{label:"Type"},"historic/civilization":{label:"Historic Civilization"},"historic/wreck/date_sunk":{label:"Date Sunk"},"historic/wreck/visible_at_high_tide":{label:"Visible At High Tide"},"historic/wreck/visible_at_low_tide":{label:"Visible At Low Tide"},hoops:{label:"Hoops",placeholder:"1, 2, 4..."},horse_dressage:{label:"Dressage Riding",options:{"undefined":"No",equestrian:"Yes"}},horse_riding:{label:"Horseback Riding",options:{"undefined":"No",horse_riding:"Yes"}},horse_scale:{label:"Horseback Riding Difficulty",terms:"",placeholder:"Difficult, Dangerous...",options:{common:"Easy: No problems or difficulties. (default)",demanding:"Use with caution: Uneven way, occasional difficult passages.",difficult:"Difficult: Way narrow and exposed. May contain obstacles to step over and narrow passages.",critical:"Borderline: Passable only for experienced riders and horses. Major obstacles. Bridges should be examined carefully.",dangerous:"Dangerous: Passable only for very experienced riders and horses and only in good weather. Dismount.",impossible:"Impassable: Way or bridge not passable for horses. Too narrow, insuffient support, obstacles like ladders. Danger of life."}},horse_stables:{label:"Riding Stable",options:{"undefined":"No",stables:"Yes"}},hot_water:{label:"Hot Water"},iata:{label:"IATA Airport Code"},icao:{label:"ICAO Airport Code"},incline_steps:{label:"Incline",options:{up:"Up",down:"Down"}},incline:{label:"Incline",terms:""},indoor_type:{label:"Type"},indoor:{label:"Indoor",terms:""},industrial:{label:"Type"},informal:{label:"Informal",terms:""},information:{label:"Type"},inscription:{label:"Inscription",terms:""},intermittent_yes:{label:"Intermittent"},intermittent:{label:"Intermittent",terms:""},internet_access:{label:"Internet Access",terms:"wifi,wlan",options:{yes:"Yes",no:"No",wlan:"Wifi",wired:"Wired",terminal:"Terminal"}},"internet_access/fee":{label:"Internet Access Fee",terms:"wifi fee"},"internet_access/ssid":{label:"Wifi Network Name",terms:"ssid"},interval:{label:"Interval",terms:""},junction_line:{label:"Junction",terms:"",options:{roundabout:"Roundabout",circular:"Traffic Circle",jughandle:"Jughandle"}},"junction/ref_oneway":{label:"Junction Number",terms:""},kerb:{label:"Curb"},"kerb/height":{label:"Height"},label:{label:"Label"},lamp_type:{label:"Type"},landuse:{label:"Type"},lanes:{label:"Lanes",terms:"",placeholder:"1, 2, 3..."},language_multi:{label:"Languages"},layer:{label:"Layer",terms:"",placeholder:"0"},leaf_cycle_singular:{label:"Leaf Cycle",options:{evergreen:"Evergreen",deciduous:"Deciduous",semi_evergreen:"Semi-Evergreen",semi_deciduous:"Semi-Deciduous"}},leaf_cycle:{label:"Leaf Cycle",options:{evergreen:"Evergreen",deciduous:"Deciduous",semi_evergreen:"Semi-Evergreen",semi_deciduous:"Semi-Deciduous",mixed:"Mixed"}},leaf_type_singular:{label:"Leaf Type",options:{broadleaved:"Broadleaved",needleleaved:"Needleleaved",leafless:"Leafless"}},leaf_type:{label:"Leaf Type",options:{broadleaved:"Broadleaved",needleleaved:"Needleleaved",mixed:"Mixed",leafless:"Leafless"}},leisure:{label:"Type"},length:{label:"Length (Meters)"},level_semi:{label:"Levels",terms:"building floors,decks,stories,storeys,storys"},level:{label:"Level",terms:"building floor,deck,storey,story"},liaison:{label:"Type"},line_attachment:{label:"Line Attachment"},lit:{label:"Lit",terms:"lamp,lighting"},location_pool:{label:"Location",options:{outdoor:"Outdoor",indoor:"Indoor",roof:"Rooftop"}},location:{label:"Location",terms:""},lock:{label:"Lock"},lockable:{label:"Lockable",terms:""},man_made:{label:"Type"},manhole:{label:"Type"},manufacturer:{label:"Manufacturer",terms:""},map_size:{label:"Coverage"},map_type:{label:"Type"},mapillary:{label:"Mapillary Image ID",terms:""},marker:{label:"Type"},material:{label:"Material",terms:""},max_age:{label:"Maximum Age",terms:"upper age limit"},maxheight:{label:"Max Height",terms:"",placeholder:"4, 4.5, 5, 14'0\", 14'6\", 15'0\""},maxspeed:{label:"Speed Limit",terms:"",placeholder:"40, 50, 60..."},"maxspeed/advisory":{label:"Advisory Speed Limit",terms:"",placeholder:"40, 50, 60..."},maxstay:{label:"Max Stay",terms:""},maxweight_bridge:{label:"Max Weight",terms:""},maxweight:{label:"Max Weight",terms:""},memorial:{label:"Type"},microbrewery:{label:"Microbrewery",terms:"brewpub,craft beer"},min_age:{label:"Minimum Age",terms:"lower age limit"},minspeed:{label:"Minimum Speed Limit",terms:"",placeholder:"20, 30, 40..."},monitoring_multi:{label:"Monitoring"},"mtb/scale":{label:"Mountain Biking Difficulty",terms:"",placeholder:"0, 1, 2, 3...",options:{"0":"0: Solid gravel/packed earth, no obstacles, wide curves","1":"1: Some loose surface, small obstacles, wide curves","2":"2: Much loose surface, large obstacles, easy hairpins","3":"3: Slippery surface, large obstacles, tight hairpins","4":"4: Loose surface or boulders, dangerous hairpins","5":"5: Maximum difficulty, boulder fields, landslides","6":"6: Not rideable except by the very best mountain bikers"}},"mtb/scale/imba":{label:"IMBA Trail Difficulty",terms:"",placeholder:"Easy, Medium, Difficult...",options:{"0":"Easiest (white circle)","1":"Easy (green circle)","2":"Medium (blue square)","3":"Difficult (black diamond)","4":"Extremely Difficult (double black diamond)"}},"mtb/scale/uphill":{label:"Mountain Biking Uphill Difficulty",terms:"",placeholder:"0, 1, 2, 3...",options:{"0":"0: Avg. incline <10%, gravel/packed earth, no obstacles","1":"1: Avg. incline <15%, gravel/packed earth, few small objects","2":"2: Avg. incline <20%, stable surface, fistsize rocks/roots","3":"3: Avg. incline <25%, variable surface, fistsize rocks/branches","4":"4: Avg. incline <30%, poor condition, big rocks/branches","5":"5: Very steep, bike generally needs to be pushed or carried"}},museum:{label:"Type"},name:{label:"Name",terms:"label,title",placeholder:"Common name (if any)"},natural:{label:"Natural"},network_bicycle:{label:"Network Class",placeholder:"Local, Regional, National, International",options:{lcn:"Local",rcn:"Regional",ncn:"National",icn:"International"}},network_foot:{label:"Network Class",placeholder:"Local, Regional, National, International",options:{lwn:"Local",rwn:"Regional",nwn:"National",iwn:"International"}},network_horse:{label:"Network Class",placeholder:"Local, Regional, National, International",options:{lhn:"Local",rhn:"Regional",nhn:"National",ihn:"International"}},network_road:{label:"Network"},network:{label:"Network",terms:""},"network/type":{label:"Network Type",terms:""},"not/name":{label:"Incorrect Names",terms:"common mistake names,wrong names"},note:{label:"Note",terms:"comment"},office:{label:"Type"},oneway_yes:{label:"One Way",options:{"undefined":"Assumed to be Yes",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}},oneway:{label:"One Way",options:{"undefined":"Assumed to be No",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}},"oneway/bicycle":{label:"One Way (Bicycles)",terms:""},openfire:{label:"Open Fires Allowed",terms:""},opening_date:{label:"Expected Opening Date"},opening_hours:{label:"Hours",terms:"",placeholder:"Unknown"},operator:{label:"Operator",terms:""},"operator/type":{label:"Operator Type"},outdoor_seating:{label:"Outdoor Seating",terms:""},par:{label:"Par",placeholder:"3, 4, 5..."},park_ride:{label:"Park and Ride",terms:""},parking:{label:"Type",options:{surface:"Surface","multi-storey":"Multilevel",underground:"Underground",sheds:"Sheds",carports:"Carports",garage_boxes:"Garage Boxes",lane:"Roadside Lane"}},payment_multi_fee:{label:"Payment Types",terms:""},payment_multi:{label:"Payment Types",terms:""},phases:{label:"Phases",placeholder:"1, 2, 3..."},phone:{label:"Telephone",terms:"phone number",placeholder:"+31 42 123 4567"},"piste/difficulty_downhill":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice (instructional)",easy:"Easy (green circle)",intermediate:"Intermediate (blue square)",advanced:"Advanced (black diamond)",expert:"Expert (double black diamond)",freeride:"Freeride (off-piste)",extreme:"Extreme (climbing equipment required)"}},"piste/difficulty_nordic":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice - Flat, no effort needed",easy:"Easy - Soft hills, short steep section",intermediate:"Intermediate - Steep section",advanced:"Advanced - Narrow, steep or icy section, sharp turn",expert:"Expert - Dangerous terrain around"}},"piste/difficulty_skitour":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice - L: <30° incline",easy:"Easy - WS: 30-35° incline",intermediate:"Intermediate - ZS: 35-40° incline",advanced:"Advanced - S: 40-45° incline",expert:"Expert - SS: 45–50° incline",freeride:"Freeride - AS: 50–55° incline",extreme:"Extreme - EX: >55° incline"}},"piste/difficulty":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice",easy:"Easy",intermediate:"Intermediate",advanced:"Advanced",expert:"Expert",freeride:"Freeride",extreme:"Extreme"}},"piste/grooming_downhill":{label:"Grooming",options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry - no grooming"}},"piste/grooming_hike":{label:"Grooming",options:{classic:"Classic - Winter Hiking",backcountry:"Backcountry - Snowshoeing"}},"piste/grooming_nordic":{label:"Grooming",options:{classic:"Classic",backcountry:"Backcountry, no grooming","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}},"piste/grooming":{label:"Grooming",options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}},"piste/type":{label:"Type",options:{downhill:"Downhill",nordic:"Nordic",skitour:"Skitour",sled:"Sled",hike:"Hike",sleigh:"Sleigh",ice_skate:"Ice Skate",snow_park:"Snow Park",playground:"Playground",connection:"Connection"}},place:{label:"Type"},plant:{label:"Plant"},"plant/method":{label:"Generation Method"},"plant/output/electricity":{label:"Power Output",placeholder:"500 MW, 1000 MW, 2000 MW..."},"plant/source":{label:"Energy Source"},playground:{label:"Type"},"playground/theme":{label:"Theme"},polling_station:{label:"Polling Place",terms:"voting place"},population:{label:"Population"},post:{label:"Delivery Address"},power_supply:{label:"Power Supply",terms:""},power:{label:"Type"},preschool:{label:"Preschool"},produce:{label:"Produce"},product:{label:"Products",terms:""},"public_bookcase/type":{label:"Type"},pump:{label:"Pump",options:{yes:"Yes",manual:"Manual Hand Pump",powered:"Machine-Powered Pump",no:"None"}},railway:{label:"Type"},"railway/position":{label:"Milestone Position",placeholder:"Distance to one decimal (123.4)"},"railway/signal/direction":{label:"Direction Affected",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},rating:{label:"Power Rating"},rcn_ref:{label:"Cycling Code"},recycling_accepts:{label:"Accepts"},recycling_type:{label:"Type",placeholder:"Container, Center",options:{container:"Container",centre:"Center"}},ref_aeroway_gate:{label:"Gate Number"},ref_golf_hole:{label:"Hole Number",placeholder:"1-18"},ref_highway_junction:{label:"Junction Number"},ref_platform:{label:"Platform Number"},ref_road_number:{label:"Road Number",terms:""},ref_room_number:{label:"Room Number"},ref_route:{label:"Route Number",terms:""},ref_runway:{label:"Runway Number",placeholder:"e.g. 01L/19R"},ref_stop_position:{label:"Stop Number"},ref_taxiway:{label:"Taxiway Name",placeholder:"e.g. A5"},ref:{label:"Reference Code",terms:""},"ref/isil":{label:"ISIL Code"},"ref/vatin":{label:"VAT ID Number",terms:"value added tax identification number,vatin"},relation:{label:"Type"},religion:{label:"Religion",terms:""},reservation:{label:"Reservations",terms:"",options:{yes:"Accepted",no:"Not Accepted",required:"Required",recommended:"Recommended"}},residential:{label:"Type"},resort:{label:"Type"},resource:{label:"Resources"},restriction:{label:"Type"},restrictions:{label:"Turn Restrictions"},"roof/colour":{label:"Roof Color",terms:""},room:{label:"Type"},rooms:{label:"Rooms"},route_master:{label:"Type"},route:{label:"Type"},rwn_ref:{label:"Walking Code"},sac_scale:{label:"Hiking Difficulty",terms:"",placeholder:"Mountain Hiking, Alpine Hiking...",options:{hiking:"T1: Hiking",mountain_hiking:"T2: Mountain Hiking",demanding_mountain_hiking:"T3: Demanding Mountain Hiking",alpine_hiking:"T4: Alpine Hiking",demanding_alpine_hiking:"T5: Demanding Alpine Hiking",difficult_alpine_hiking:"T6: Difficult Alpine Hiking"}},salt:{label:"Salt",terms:"saline,salinated"},sanitary_dump_station:{label:"Toilet Disposal",terms:""},screen:{label:"Screens",placeholder:"1, 4, 8…"},scuba_diving:{label:"Services"},"seamark/beacon_isolated_danger/shape":{label:"Shape"},"seamark/beacon_lateral/category":{label:"Category",options:{port:"Port",starboard:"Starboard",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right"}},"seamark/beacon_lateral/colour":{label:"Color",options:{red:"Red",green:"Green",grey:"Grey"}},"seamark/beacon_lateral/shape":{label:"Shape"},"seamark/beacon_lateral/system":{label:"System",options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}},"seamark/buoy_lateral/category":{label:"Category",options:{port:"Port",starboard:"Starboard",channel_left:"Channel Left",channel_right:"Channel Right",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right",preferred_channel_port:"Preferred Channel Port",preferred_channel_starboard:"Preferred Channel Starboard"}},"seamark/buoy_lateral/colour":{label:"Color",options:{red:"Red",green:"Green","red;white;red;white":"Red-White-Red-White","green;white;green;white":"Green-White-Green-White","red;green;red":"Red-Green-Red","green;red;green":"Green-Red-Green",white:"White",yellow:"Yellow"}},"seamark/buoy_lateral/shape":{label:"Shape"},"seamark/buoy_lateral/system":{label:"System",options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}},"seamark/mooring/category":{label:"Category"},"seamark/type":{label:"Seamark",terms:"marine"},"seamark/wreck/category":{label:"Category"},seasonal:{label:"Seasonal"},seats:{label:"Seats",placeholder:"2, 4, 6..."},second_hand:{label:"Sells Used",terms:"",placeholder:"Yes, No, Only",options:{yes:"Yes",no:"No",only:"Only"}},segregated:{label:"Bicycle-Pedestrian Separation"},self_service:{label:"Self-Service"},service_rail:{label:"Service Type",terms:"",options:{spur:"Spur",yard:"Yard",siding:"Siding",crossover:"Crossover"}},service_times:{label:"Service Times"},service:{label:"Type"},"service/bicycle":{label:"Services"},"service/vehicle":{label:"Services"},shelter_type:{label:"Type"},shelter:{label:"Shelter"},shop:{label:"Type"},shower:{label:"Showers",terms:""},"siren/purpose":{label:"Purpose"},"siren/type":{label:"Type",options:{pneumatic:"Pneumatic",electronic:"Electronic",other:"Other"}},site_type:{label:"Site Type"},site:{label:"Type"},smoking:{label:"Smoking",terms:"",placeholder:"No, Separated, Yes...",options:{no:"No smoking anywhere",separated:"In smoking areas, not physically isolated",isolated:"In smoking areas, physically isolated",outside:"Allowed outside",yes:"Allowed everywhere",dedicated:"Dedicated to smokers (e.g. smokers' club)"}},smoothness:{label:"Smoothness",terms:"",placeholder:"Thin Rollers, Wheels, Off-Road...",options:{excellent:"Thin Rollers: rollerblade, skateboard",good:"Thin Wheels: racing bike",intermediate:"Wheels: city bike, wheelchair, scooter",bad:"Robust Wheels: trekking bike, car, rickshaw",very_bad:"High Clearance: light duty off-road vehicle",horrible:"Off-Road: heavy duty off-road vehicle",very_horrible:"Specialized off-road: tractor, ATV",impassable:"Impassable / No wheeled vehicle"}},sms:{label:"SMS",terms:""},social_facility_for:{label:"People Served"},social_facility:{label:"Type"},source:{label:"Sources",terms:"reference"},"species/wikidata":{label:"Species Wikidata",terms:""},sport_ice:{label:"Sports"},sport_racing_motor:{label:"Sports"},sport_racing_nonmotor:{label:"Sports"},sport:{label:"Sports"},stars:{label:"Stars",terms:"rating"},start_date:{label:"Start Date",terms:"inception"},step_count:{label:"Number of Steps",terms:""},stile:{label:"Type"},stop:{label:"Stop Type",options:{all:"All Ways",minor:"Minor Road"}},street_cabinet:{label:"Type"},stroller:{label:"Stroller Access",terms:"baby carriage,perambulator,pram,pushchair",options:{yes:"Yes",limited:"Limited",no:"No"}},structure_waterway:{label:"Structure",placeholder:"Unknown",options:{tunnel:"Tunnel"}},structure:{label:"Structure",terms:"",placeholder:"Unknown",options:{bridge:"Bridge",tunnel:"Tunnel",embankment:"Embankment",cutting:"Cutting",ford:"Ford"}},studio:{label:"Type"},substance:{label:"Substance"},substation:{label:"Type"},supervised:{label:"Supervised",terms:"guarded,manned"},support:{label:"Support"},surface:{label:"Surface",terms:""},surveillance:{label:"Surveillance Kind"},"surveillance/type":{label:"Surveillance Type",options:{camera:"Camera",guard:"Guard",ALPR:"Automatic License Plate Reader"}},"surveillance/zone":{label:"Surveillance Zone"},"survey/date":{label:"Last Survey Date",terms:""},swimming_pool:{label:"Type"},"switch":{label:"Type",options:{mechanical:"Mechanical",circuit_breaker:"Circuit Breaker",disconnector:"Disconnector",earthing:"Earthing"}},tactile_paving:{label:"Tactile Paving",terms:""},takeaway:{label:"Takeaway",terms:"take out,takeout",placeholder:"Yes, No, Takeaway Only...",options:{yes:"Yes",no:"No",only:"Takeaway Only"}},target:{label:"Target"},tidal:{label:"Tidal",terms:""},to:{label:"To"},toilets:{label:"Toilets",terms:""},"toilets/disposal":{label:"Disposal",options:{flush:"Flush",pitlatrine:"Pit Latrine",chemical:"Chemical",bucket:"Bucket"}},"toilets/handwashing":{label:"Handwashing",terms:""},"toilets/position":{label:"Positions",terms:""},toll:{label:"Toll",terms:""},tomb:{label:"Type"},tourism:{label:"Type"},"tower/construction":{label:"Construction",placeholder:"Guyed, Lattice, Concealed, ..."},"tower/type":{label:"Type"},"townhall/type":{label:"Type"},tracktype:{label:"Track Type",placeholder:"Solid, Mostly Solid, Soft...",options:{grade1:"Solid: paved or heavily compacted hardcore surface",grade2:"Mostly Solid: gravel/rock with some soft material mixed in",grade3:"Even mixture of hard and soft materials",grade4:"Mostly Soft: soil/sand/grass with some hard material mixed in",grade5:"Soft: soil/sand/grass"}},trade:{label:"Type"},traffic_calming:{label:"Type"},traffic_sign:{label:"Traffic Sign"},"traffic_sign/direction":{label:"Direction Affected",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},traffic_signals:{label:"Type"},"traffic_signals/direction":{label:"Direction Affected",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},trail_visibility:{label:"Trail Visibility",terms:"",placeholder:"Excellent, Good, Bad...",options:{excellent:"Excellent: unambiguous path or markers everywhere",good:"Good: markers visible, sometimes require searching",intermediate:"Intermediate: few markers, path mostly visible",bad:"Bad: no markers, path sometimes invisible/pathless",horrible:"Horrible: often pathless, some orientation skills required",no:"No: pathless, excellent orientation skills required"}},transformer:{label:"Type",options:{distribution:"Distribution",generator:"Generator",converter:"Converter",traction:"Traction",auto:"Autotransformer",phase_angle_regulator:"Phase Angle Regulator",auxiliary:"Auxiliary",yes:"Unknown"}},trees:{label:"Trees"},trench:{label:"Type"},trolley_wire:{label:"Overhead Trolley Wires",terms:""},tunnel:{label:"Type",placeholder:"Default"},usage_rail:{label:"Usage Type",terms:"",options:{main:"Main",branch:"Branch",industrial:"Industrial",military:"Military",test:"Test",tourism:"Tourism"}},utility_semi:{label:"Utilities"},utility:{label:"Utility"},valve:{label:"Type"},vending:{label:"Types of Goods"},video_calls:{label:"Video Calls",terms:""},visibility:{label:"Visibility",options:{house:"Up to 5m (16ft)",street:"5 to 20m (16 to 65ft)",area:"Over 20m (65ft)"}},"volcano/status":{label:"Volcano Status",options:{active:"Active",dormant:"Dormant",extinct:"Extinct"}},"volcano/type":{label:"Volcano Type",options:{stratovolcano:"Stratovolcano",shield:"Shield",scoria:"Scoria"}},voltage_electrified:{label:"Voltage",terms:""},voltage:{label:"Voltage"},"voltage/primary":{label:"Primary Voltage",terms:""},"voltage/secondary":{label:"Secondary Voltage",terms:""},"voltage/tertiary":{label:"Tertiary Voltage",terms:""},wall:{label:"Type"},waste:{label:"Waste"},water_point:{label:"Water Point"},water_source:{label:"Water Source"},water_volume:{label:"Water Reserve Volume (m³)",terms:""},water:{label:"Type"},waterway:{label:"Type"},website:{label:"Website",terms:"internet presence,uri,url,webpage",placeholder:"https://example.com"},wetland:{label:"Type"},wheelchair:{label:"Wheelchair Access",terms:"handicap access",options:{yes:"Yes",limited:"Limited",no:"No"}},wholesale:{label:"Wholesale"},width:{label:"Width (Meters)",terms:""},wikidata:{label:"Wikidata",terms:""},wikimedia_commons:{label:"Wikimedia Commons Page",terms:"",placeholder:"File:Example.jpg"},wikipedia:{label:"Wikipedia",terms:""},windings:{label:"Windings",terms:"",placeholder:"1, 2, 3..."},"windings/configuration":{label:"Windings Configuration",terms:"",options:{star:"Star / Wye",delta:"Delta","open-delta":"Open Delta",zigzag:"Zig Zag",open:"Open",scott:"Scott",leblanc:"Leblanc"}}},presets:{aerialway:{name:"Aerialway"},aeroway:{name:"Aeroway"},amenity:{name:"Amenity"},attraction:{name:"Attraction"},boundary:{name:"Boundary"},building_point:{name:"Building"},embankment:{name:"Embankment"},emergency:{name:"Emergency Feature"},ford_line:{name:"Ford"},highway:{name:"Highway Feature"},indoor:{name:"Indoor Feature"},landuse:{name:"Land Use Feature"},leisure:{name:"Leisure Feature"},man_made:{name:"Man Made Feature"},natural:{name:"Natural Feature"},place:{name:"Place"},playground:{name:"Playground Equipment"},power:{name:"Power Feature"},railway:{name:"Railway Feature"},seamark:{name:"Seamark"},tourism:{name:"Tourism Feature"},waterway:{name:"Waterway Feature"},"addr/interpolation":{name:"Address Interpolation"},address:{name:"Address",terms:""},"advertising/billboard":{name:"Billboard",terms:""},"advertising/board":{name:"Notice Board",terms:""},"advertising/column":{name:"Advertising Column",terms:""},"advertising/poster_box":{name:"Poster Box",terms:""},"advertising/totem":{name:"Advertising Totem",terms:""},"aerialway/cable_car":{name:"Cable Car",terms:"aerial cable,lift,ropeway,skiing,snowboarding,tramway"},"aerialway/chair_lift":{name:"Chair Lift",terms:"aerial cable,skiing,snowboarding"},"aerialway/drag_lift":{name:"Drag Lift",terms:"skiing,snowboarding,surface cable"},"aerialway/gondola":{name:"Gondola",terms:"aerial cable,lift,skiing,snowboarding"},"aerialway/goods":{name:"Goods Aerialway",terms:"aerial cable"},"aerialway/j-bar":{name:"J-Bar Lift",terms:"drag lift,skiing,snowboarding,surface cable,jaybar,jbar"},"aerialway/magic_carpet":{name:"Magic Carpet Lift",terms:"conveyor belt,skiing,snowboarding,surface lift"},"aerialway/mixed_lift":{name:"Mixed Lift",terms:"aerial cable,skiing,snowboarding"},"aerialway/platter":{name:"Platter Lift",terms:"button lift,disc lift,drag lift,poma lift,skiing,snowboarding,surface cable"},"aerialway/pylon":{name:"Aerialway Pylon",terms:"chair lift pole,skiing,snowboarding,lift tower"},"aerialway/rope_tow":{name:"Rope Tow Lift",terms:"bugel lift,drag lift,handle tow,skiing,snowboarding,surface cable"},"aerialway/t-bar":{name:"T-Bar Lift",terms:"drag lift,skiing,surface cable,tbar"},"aerialway/zip_line":{name:"Zip Line",terms:"aerial runway,canopy,flying fox,foefie slide,gravity propelled aerial ropeslide,Tyrolean traverse,zip wire,zip-line,zipline,zipwire"},"aeroway/aerodrome":{name:"Airport",terms:"aerodrome,aeroway,airplane,airport,jet,plane"},"aeroway/apron":{name:"Apron",terms:"ramp"},"aeroway/gate":{name:"Airport Gate",terms:""},"aeroway/hangar":{name:"Hangar",terms:""},"aeroway/helipad":{name:"Helipad",terms:"helicopter,helipad,heliport"},"aeroway/holding_position":{name:"Aircraft Holding Position",terms:""},"aeroway/jet_bridge":{name:"Jet Bridge",terms:"aerobridge,air jetty,airbridge,finger,gangway,jet way,jetway,passenger boarding bridge,PBB,portal,skybridge,terminal gate connector"},"aeroway/parking_position":{name:"Aircraft Parking Position",terms:""},"aeroway/runway":{name:"Runway",terms:"landing strip"},"aeroway/spaceport":{name:"Spaceport",terms:"cosmodrome,rocket launch center,rocket launch complex,rocket launch site,rocket range,space port"},"aeroway/taxiway":{name:"Taxiway",terms:""},"aeroway/terminal":{name:"Airport Terminal",terms:"airport,aerodrome"},"aeroway/windsock":{name:"Windsock",terms:""},"allotments/plot":{name:"Community Garden Plot",terms:""},"amenity/bus_station":{name:"Bus Station / Terminal"},"amenity/coworking_space":{name:"Coworking Space"},"amenity/embassy":{name:"Embassy"},"amenity/ferry_terminal":{name:"Ferry Station / Terminal"},"amenity/nursing_home":{name:"Nursing Home"},"amenity/recycling":{name:"Recycling"},"amenity/register_office":{name:"Register Office"},"amenity/scrapyard":{name:"Scrap Yard"},"amenity/swimming_pool":{name:"Swimming Pool"},"amenity/animal_boarding":{name:"Animal Boarding Facility",terms:"boarding,cat,cattery,dog,horse,kennel,kitten,pet,pet boarding,pet care,pet hotel,puppy,reptile"},"amenity/animal_breeding":{name:"Animal Breeding Facility",terms:"breeding,bull,cat,cow,dog,horse,husbandry,kitten,livestock,pet breeding,puppy,reptile"},"amenity/animal_shelter":{name:"Animal Shelter",terms:"adoption,aspca,cat,dog,horse,kitten,pet care,pet rescue,puppy,raptor,reptile,rescue,spca,pound"},"amenity/arts_centre":{name:"Arts Center",terms:""},"amenity/atm":{name:"ATM",terms:"money,cash,machine"},"amenity/bank":{name:"Bank",terms:"credit union,check,deposit,fund,investment,repository,reserve,safe,savings,stock,treasury,trust,vault"},"amenity/bar":{name:"Bar",terms:"dive,beer,bier,booze"},"amenity/bar/lgbtq":{name:"LGBTQ+ Bar",terms:"gay bar,lesbian bar,lgbtq bar,lgbt bar,lgb bar"},"amenity/bbq":{name:"Barbecue/Grill",terms:"bbq,grill"},"amenity/bench":{name:"Bench",terms:"seat,chair"},"amenity/bicycle_parking":{name:"Bicycle Parking",terms:"bike,cycle parking,cycling"},"amenity/bicycle_parking/building":{name:"Bicycle Parking Garage",terms:"Bike Parking Station,cycle parking,cycling,Multi-Storey Bicycle Park,Multi-Storey Bike Park"},"amenity/bicycle_parking/lockers":{name:"Bicycle Lockers",terms:"cycle locker,cycling,Bike Lockers"},"amenity/bicycle_parking/shed":{name:"Bicycle Shed",terms:"cycle shed,cycling,Bike Shed"},"amenity/bicycle_rental":{name:"Bicycle Rental",terms:"bike,bicycle,bikeshare,bike share,bicycle share,cycle dock,cycle hub,cycleshare,cycling"},"amenity/bicycle_repair_station":{name:"Bicycle Repair Tool Stand",terms:"bike chain,bike multitool,bike repair,bike tools,cycle pump,cycle repair,cycling"},"amenity/biergarten":{name:"Biergarten",terms:"beer,bier,booze"},"amenity/boat_rental":{name:"Boat Rental",terms:""},"amenity/bureau_de_change":{name:"Currency Exchange",terms:"bureau de change,money changer"},"amenity/cafe":{name:"Cafe",terms:"bistro,coffee,tea"},"amenity/car_pooling":{name:"Car Pooling Station",terms:"car sharing,carpooling,lift sharing,ride sharing"},"amenity/car_rental":{name:"Car Rental",terms:""},"amenity/car_sharing":{name:"Car Sharing Station",terms:""},"amenity/car_wash":{name:"Car Wash",terms:""},"amenity/casino":{name:"Casino",terms:"gambling,roulette,craps,poker,blackjack"},"amenity/charging_station":{name:"Charging Station",terms:"EV,Electric Vehicle,Supercharger"},"amenity/childcare":{name:"Nursery/Childcare",terms:"daycare,orphanage,playgroup"},"amenity/cinema":{name:"Cinema",terms:"drive-in,film,flick,movie,theater,picture,show,screen"},"amenity/clinic":{name:"Clinic",terms:"medical,urgentcare"},"amenity/clinic/abortion":{name:"Abortion Clinic",terms:""},"amenity/clinic/fertility":{name:"Fertility Clinic",terms:"egg,fertility,reproductive,sperm,ovulation"},"amenity/clock":{name:"Clock",terms:"time"},"amenity/clock/sundial":{name:"Sundial",terms:"gnomon,shadow"},"amenity/college":{name:"College Grounds",terms:"university,undergraduate school"},"amenity/community_centre":{name:"Community Center",terms:"event,hall"},"amenity/community_centre/lgbtq":{name:"LGBTQ+ Community Center",terms:"lgbtq event,lgbtq hall,lgbt event,lgbt hall,lgb event,lgb hall"},"amenity/compressed_air":{name:"Compressed Air",terms:""},"amenity/conference_centre":{name:"Convention Center",terms:"auditorium,conference,exhibition,exposition,lecture"},"amenity/courthouse":{name:"Courthouse",terms:""},"amenity/crematorium":{name:"Crematorium",terms:"cemetery,funeral"},"amenity/dentist":{name:"Dentist",terms:"tooth,teeth"},"amenity/dive_centre":{name:"Dive Center",terms:"diving,scuba"},"amenity/doctors":{name:"Doctor",terms:"medic*,physician"},"amenity/dojo":{name:"Dojo / Martial Arts Academy",terms:"martial arts,dojang"},"amenity/dressing_room":{name:"Changing Room",terms:"changeroom,dressing room,fitting room,locker room"},"amenity/drinking_water":{name:"Drinking Water",terms:"potable water source,water fountain,drinking fountain,bubbler,water tap"},"amenity/driving_school":{name:"Driving School",terms:""},"amenity/events_venue":{name:"Events Venue",terms:"banquet hall,baptism,Bar Mitzvah,Bat Mitzvah,birthdays,celebrations,conferences,confirmation,meetings,parties,party,quinceañera,reunions,weddings"},"amenity/fast_food":{name:"Fast Food",terms:"restaurant,takeaway"},"amenity/fast_food/ice_cream":{name:"Ice Cream Fast Food"},"amenity/fast_food/burger":{name:"Burger Fast Food",terms:"breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fast_food/chicken":{name:"Chicken Fast Food",terms:"breakfast,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fast_food/donut":{name:"Donut Fast Food",terms:"breakfast,brunch,cafe,canteen,coffee,dine,diner,donut,doughnut,dining,eat,lunch,table"},"amenity/fast_food/fish_and_chips":{name:"Fish & Chips Fast Food",terms:"breakfast,cafe,café,dine,dining,dinner,drive-in,eat,grill,lunch,table,french fries"},"amenity/fast_food/hot_dog":{name:"Hot Dog Fast Food",terms:"ballpark,frankfurter,frank,hotdog stand,sandwich,sausage,wiener"},"amenity/fast_food/kebab":{name:"Kebab Fast Food",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fast_food/mexican":{name:"Mexican Fast Food",terms:"breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table,tacos,burritos,enchiladas,fajitas,nachos,tortillas,salsa,tamales,quesadillas"},"amenity/fast_food/pizza":{name:"Pizza Fast Food",terms:"dine,dining,dinner,drive-in,eat,lunch,table,deep dish,thin crust,slice"},"amenity/fast_food/sandwich":{name:"Sandwich Fast Food",terms:"breakfast,cafe,café,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fire_station":{name:"Fire Station",terms:""},"amenity/food_court":{name:"Food Court",terms:"fast food,restaurant,food"},"amenity/fountain":{name:"Fountain",terms:"basin,water"},"amenity/fuel":{name:"Gas Station",terms:"petrol,fuel,gasoline,propane,diesel,lng,cng,biodiesel"},"amenity/gambling":{name:"Gambling Hall",terms:"betting,bingo,blackjack,casino,craps,gamble,gambling,keno,lottery,pachinko,poker,roulette,slot machines,slots"},"amenity/grave_yard":{name:"Graveyard",terms:"burial ground,cemetary,cemetery,churchyard,columbarium,grave yard,graveyard,mausoleum,tomb"},"amenity/grit_bin":{name:"Grit Bin",terms:"salt,sand"},"amenity/hospital":{name:"Hospital Grounds",terms:"clinic,doctor,emergency room,health,infirmary,institution,sanatorium,sanitarium,sick,surgery,ward"},"amenity/hunting_stand":{name:"Hunting Stand",terms:"game,gun,lookout,rifle,shoot*,wild,watch"},"amenity/ice_cream":{name:"Ice Cream Shop",terms:"gelato,sorbet,sherbet,frozen,yogurt"},"amenity/internet_cafe":{name:"Internet Cafe",terms:"cybercafe,taxiphone,teleboutique,coffee,cafe,net,lanhouse"},"amenity/karaoke_box":{name:"Karaoke Box",terms:"karaoke club,karaoke room,karaoke television,KTV"},"amenity/kindergarten":{name:"Preschool / Kindergarten Grounds",terms:"kindergarden,pre-school"},"amenity/language_school":{name:"Language School",terms:"esl"},"amenity/lavoir":{name:"Lavoir",terms:"clothing,laundry,washing"},"amenity/letter_box":{name:"Letter Box",terms:"curbside delivery box,home delivery box,direct-to-door delivery box,letter hole,letter plate,letter slot,letterbox,letterhole,letterplate,letterslot,mail box,mail hole,mail slot,mailbox,mailhole,mailslot,through-door delivery box"},"amenity/library":{name:"Library",terms:"book"},"amenity/loading_dock":{name:"Loading Dock",terms:"door,loading bay,shipping,unloading,warehouse"},"amenity/love_hotel":{name:"Love Hotel",terms:""},"amenity/marketplace":{name:"Marketplace",terms:""},"amenity/monastery":{name:"Monastery Grounds",terms:"abbey,basilica,bethel,cathedral,chancel,chantry,chapel,church,fold,house of God,house of prayer,house of worship,minster,mission,monastery,mosque,oratory,parish,sacellum,sanctuary,shrine,synagogue,tabernacle,temple"},"amenity/money_transfer":{name:"Money Transfer Station",terms:"money order,check,bill,currency,finance,wire transfer,cable,person to person,cash to cash,exchange"},"amenity/motorcycle_parking":{name:"Motorcycle Parking",terms:""},"amenity/music_school":{name:"Music School",terms:"school of music"},"amenity/nightclub":{name:"Nightclub",terms:"disco*,night club,dancing,dance club"},"amenity/nightclub/lgbtq":{name:"LGBTQ+ Nightclub",terms:"gay nightclub,lesbian nightclub,lgbtq nightclub,lgbt nightclub,lgb nightclub"},"amenity/parking_entrance":{name:"Parking Garage Entrance / Exit",terms:""},"amenity/parking_space":{name:"Parking Space",terms:""},"amenity/parking":{name:"Parking Lot",terms:"automobile parking,car lot,car parking,rv parking,truck parking,vehicle parking"},"amenity/parking/multi-storey":{name:"Multilevel Parking Garage",terms:"car,indoor parking,multistorey car park,parkade,parking building,parking deck,parking garage,parking ramp,parking structure"},"amenity/parking/park_ride":{name:"Park & Ride Lot",terms:"commuter parking lot,incentive parking lot,metro parking lot,park and pool lot,park and ride lot,P+R,public transport parking lot,public transit parking lot,train parking lot"},"amenity/parking/underground":{name:"Underground Parking",terms:"automobile parking,car lot,car parking,rv parking,subsurface parking,truck parking,vehicle parking"},"amenity/payment_centre":{name:"Payment Center",terms:"check,tax pay,bill pay,currency,finance,cash,money"},"amenity/payment_terminal":{name:"Payment Terminal",terms:"interactive kiosk,ekiosk,atm,bill pay,tax pay,phone pay,finance,cash,money transfer,card"},"amenity/pharmacy":{name:"Pharmacy Counter",terms:"apothecary,drug store,drugstore,med*,prescription"},"amenity/photo_booth":{name:"Photo Booth",terms:"photobooth,photo,booth,kiosk,camera"},"amenity/place_of_worship":{name:"Place of Worship",terms:"abbey,basilica,bethel,cathedral,chancel,chantry,chapel,church,fold,house of God,house of prayer,house of worship,minster,mission,mosque,oratory,parish,sacellum,sanctuary,shrine,synagogue,tabernacle,temple"},"amenity/place_of_worship/buddhist":{name:"Buddhist Temple",terms:"stupa,vihara,monastery,temple,pagoda,zendo,dojo"},"amenity/place_of_worship/christian":{name:"Christian Church",terms:"christian,abbey,basilica,bethel,cathedral,chancel,chantry,chapel,fold,house of God,house of prayer,house of worship,minster,mission,oratory,parish,sacellum,sanctuary,shrine,tabernacle,temple"},"amenity/place_of_worship/christian/jehovahs_witness":{name:"Kingdom Hall of Jehovah's Witnesses",terms:"christian,church,house of God,house of prayer,house of worship"},"amenity/place_of_worship/christian/la_luz_del_mundo":{name:"La Luz del Mundo Temple",terms:"christian,church,house of God,house of prayer,house of worship,the light of the world church"},"amenity/place_of_worship/christian/quaker":{name:"Quaker Friends Meeting House",terms:"christian,church,house of God,house of prayer,house of worship"},"amenity/place_of_worship/hindu":{name:"Hindu Temple",terms:"kovil,devasthana,mandir,kshetram,alayam,shrine,temple"},"amenity/place_of_worship/jewish":{name:"Jewish Synagogue",terms:"jewish"},"amenity/place_of_worship/muslim":{name:"Muslim Mosque",terms:"islam,islamic center,muslim"},"amenity/place_of_worship/shinto":{name:"Shinto Shrine",terms:"kami,torii"},"amenity/place_of_worship/sikh":{name:"Sikh Temple",terms:"gurudwara,temple"},"amenity/place_of_worship/taoist":{name:"Taoist Temple",terms:"daoist,monastery,temple"},"amenity/planetarium":{name:"Planetarium",terms:"museum,astronomy,observatory"},"amenity/police":{name:"Police",terms:"badge,constable,constabulary,cop,detective,fed,law,enforcement,officer,patrol"},"amenity/polling_station":{name:"Permanent Polling Place",terms:"ballot box,ballot drop,democracy,elections,polling place,vote,voting booth,voting machine"},"amenity/post_box":{name:"Mail Drop Box",terms:"drop box,dropbox,letter drop,mail box,mail collection box,mail drop,mail dropoff,mailbox,package drop,pillar box,pillarbox,post box,postal box,postbox"},"amenity/post_depot":{name:"Post Sorting Office",terms:"mail processing and distribution center,post depot"},"amenity/post_office":{name:"Post Office",terms:"letter,mail"},"amenity/prep_school":{name:"Test Prep / Tutoring School",terms:"academic,ACT,SAT,homework,math,reading,test prep,tutoring,writing"},"amenity/prison":{name:"Prison Grounds",terms:"cell,jail,correction"},"amenity/pub":{name:"Pub",terms:"alcohol,drink,dive,beer,bier,booze"},"amenity/pub/lgbtq":{name:"LGBTQ+ Pub",terms:"gay pub,lesbian pub,lgbtq pub,lgbt pub,lgb pub"},"amenity/pub/microbrewery":{name:"Brewpub",terms:"alcohol,drink,dive,beer,bier,booze,craft brewery,microbrewery,small batch brewery"},"amenity/public_bath":{name:"Public Bath",terms:"onsen,foot bath,hot springs"},"amenity/public_bookcase":{name:"Public Bookcase",terms:"library,bookcrossing"},"amenity/ranger_station":{name:"Ranger Station",terms:"visitor center,visitor centre,permit center,permit centre,backcountry office,warden office,warden center"},"amenity/recycling_centre":{name:"Recycling Center",terms:"bottle,can,dump,glass,garbage,rubbish,scrap,trash"},"amenity/recycling_container":{name:"Recycling Container",terms:"bin,can,bottle,glass,garbage,rubbish,scrap,trash"},"amenity/recycling/container/electrical_items":{name:"E-Waste Container",terms:"computers,electronic waste,electronics recycling,ewaste bin,phones,tablets"},"amenity/recycling/container/green_waste":{name:"Green Waste Container",terms:"biodegradable,biological,compost,decomposable,garbage bin,garden waste,organic,rubbish,food scrap"},"amenity/research_institute":{name:"Research Institute Grounds",terms:"applied research,experimentation,r&d,r & d,r and d,research and development,research institution,research laboratory,research labs"},"amenity/restaurant":{name:"Restaurant",terms:"bar,breakfast,cafe,café,canteen,coffee,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/american":{name:"American Restaurant",terms:"bar,breakfast,cafe,café,canteen,coffee,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/asian":{name:"Asian Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/chinese":{name:"Chinese Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/french":{name:"French Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/german":{name:"German Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/greek":{name:"Greek Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table,gyros,pitas,olives"},"amenity/restaurant/indian":{name:"Indian Restaurant",terms:"bar,breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table,curry"},"amenity/restaurant/italian":{name:"Italian Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table,pasta,pizza"},"amenity/restaurant/japanese":{name:"Japanese Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/mexican":{name:"Mexican Restaurant",terms:"bar,breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table,tacos,burritos,enchiladas,fajitas,nachos,tortillas,salsa,tamales,quesadillas"},"amenity/restaurant/noodle":{name:"Noodle Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table,ramen noodles,soup,soba noodles,cellophane noodles,rice noodles"},"amenity/restaurant/pizza":{name:"Pizza Restaurant",terms:"bar,dine,dining,dinner,drive-in,eat,lunch,table,deep dish,thin crust,slice"},"amenity/restaurant/seafood":{name:"Seafood Restaurant",terms:"bar,breakfast,cafe,café,dine,dining,dinner,drive-in,eat,grill,lunch,table,fish,shellfish,molluscs,crustaceans,clams,oysters,lobsters,crab,shrimp,squid,octopus"},"amenity/restaurant/steakhouse":{name:"Steakhouse",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table,steak house,chop house,beef"},"amenity/restaurant/sushi":{name:"Sushi Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/thai":{name:"Thai Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/turkish":{name:"Turkish Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/vietnamese":{name:"Vietnamese Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/sanitary_dump_station":{name:"RV Toilet Disposal",terms:"Motor Home,Camper,Sanitary,Dump Station,Elsan,CDP,CTDP,Chemical Toilet"},"amenity/school":{name:"School Grounds",terms:"academy,elementary school,middle school,high school"},"amenity/shelter":{name:"Shelter",terms:"lean-to,gazebo,picnic"},"amenity/shelter/gazebo":{name:"Gazebo",terms:""},"amenity/shelter/lean_to":{name:"Lean-To",terms:"alpine hut,cabin,leanto,lodging,overnight accommodations,sleeping shelter,wilderness hut"},"amenity/shelter/picnic_shelter":{name:"Picnic Shelter",terms:"pavilion"},"amenity/shelter/public_transport":{name:"Transit Shelter",terms:"bus stop,metro stop,public transit shelter,public transport shelter,tram stop shelter,waiting"},"amenity/shower":{name:"Shower",terms:"rain closet"},"amenity/smoking_area":{name:"Smoking Area",terms:""},"amenity/social_centre":{name:"Social Center",terms:"event,fraternal,fraternity,hall,organization,professional,society,sorority,union,vetern"},"amenity/social_facility":{name:"Social Facility",terms:""},"amenity/social_facility/ambulatory_care":{name:"Ambulatory Care",terms:""},"amenity/social_facility/food_bank":{name:"Food Bank",terms:""},"amenity/social_facility/group_home":{name:"Elderly Group Home",terms:"old,senior,living,care home,assisted living"},"amenity/social_facility/homeless_shelter":{name:"Homeless Shelter",terms:"houseless,unhoused,displaced"},"amenity/social_facility/nursing_home":{name:"Nursing Home",terms:"elderly,living,nursing,old,senior,assisted living"},"amenity/studio":{name:"Studio",terms:"recording,radio,television"},"amenity/studio/audio":{name:"Recording Studio",terms:"audio mixing,audio production,audio recording,audio studio"},"amenity/studio/radio":{name:"Radio Station",terms:"am radio,fm radio,radio broadcast,radio studio"},"amenity/studio/television":{name:"Television Station",terms:"television broadcast,television studio,tv broadcast,tv station,tv studio"},"amenity/studio/video":{name:"Film Studio",terms:"movie production,movie studio,video production,video recording,video studio"},"amenity/taxi":{name:"Taxi Stand",terms:"cab"},"amenity/telephone":{name:"Telephone",terms:"phone"},"amenity/theatre":{name:"Theater",terms:"theatre,performance,play,musical"},"amenity/theatre/type/amphi":{name:"Amphitheatre",terms:"open air,outdoor,greek,ampi"},"amenity/toilets":{name:"Toilets",terms:"bathroom,restroom,outhouse,privy,head,lavatory,latrine,water closet,WC,W.C."},"amenity/toilets/disposal/flush":{name:"Flush Toilets",terms:"bathroom,head,lavatory,privy,restroom,water closet,WC,W.C."},"amenity/toilets/disposal/pitlatrine":{name:"Pit Latrine",terms:"head,lavatory,long drop,outhouse,pit toilet,privy"},"amenity/townhall":{name:"Town Hall",terms:"village,city,government,courthouse,municipal"},"amenity/townhall/city":{name:"City Hall",terms:"council,courthouse,government,mayor,municipality"},"amenity/toy_library":{name:"Toy Library",terms:"game,toy"},"amenity/university":{name:"University Grounds",terms:"college,graduate school,PhD program,master's degree program"},"amenity/vehicle_inspection":{name:"Vehicle Inspection",terms:"car inspection"},"amenity/vending_machine":{name:"Vending Machine",terms:""},"amenity/vending_machine/bottle_return":{name:"Bottle Return Machine",terms:"bottle return"},"amenity/vending_machine/bread":{name:"Bread Vending Machine",terms:"baguette,bread"},"amenity/vending_machine/cigarettes":{name:"Cigarette Vending Machine",terms:"cigarette"},"amenity/vending_machine/coffee":{name:"Coffee Vending Machine",terms:"coffee"},"amenity/vending_machine/condoms":{name:"Condom Vending Machine",terms:"condom"},"amenity/vending_machine/drinks":{name:"Drink Vending Machine",terms:"drink,soda,beverage,juice,pop"},"amenity/vending_machine/eggs":{name:"Egg Vending Machine",terms:"egg"},"amenity/vending_machine/electronics":{name:"Electronics Vending Machine",terms:"cable,charger,earbud,headphone,phone,tablet"},"amenity/vending_machine/elongated_coin":{name:"Flat Coin Vending Machine",terms:"coin,crush,elongated,flatten,penny,souvenir"},"amenity/vending_machine/excrement_bags":{name:"Excrement Bag Dispenser",terms:"excrement bags,poop,waste,dog,animal"},"amenity/vending_machine/feminine_hygiene":{name:"Feminine Hygiene Vending Machine",terms:"condom,tampon,pad,woman,women,menstrual hygiene products,personal care"},"amenity/vending_machine/food":{name:"Food Vending Machine",terms:"food"},"amenity/vending_machine/fuel":{name:"Gas Pump",terms:"petrol,fuel,gasoline,propane,diesel,lng,cng,biodiesel"},"amenity/vending_machine/ice_cream":{name:"Ice Cream Vending Machine",terms:"chocolate,ice cream,frozen,popsicle,vanilla"},"amenity/vending_machine/ice_cubes":{name:"Ice Vending Machine",terms:"cubes,ice"},"amenity/vending_machine/newspapers":{name:"Newspaper Vending Machine",terms:"newspaper"},"amenity/vending_machine/parcel_pickup_dropoff":{name:"Parcel Pickup/Dropoff Locker",terms:"mail,packstation,parcel,pickup"},"amenity/vending_machine/parcel_pickup":{name:"Parcel Pickup Locker",terms:"amazon,locker,mail,packstation,parcel,pickup"},"amenity/vending_machine/parking_tickets":{name:"Parking Ticket Vending Machine",terms:"parking,ticket"},"amenity/vending_machine/public_transport_tickets":{name:"Transit Ticket Vending Machine",terms:"bus,train,ferry,rail,ticket,transportation"},"amenity/vending_machine/stamps":{name:"Postage Vending Machine",terms:"mail,postage,stamp"},"amenity/vending_machine/sweets":{name:"Snack Vending Machine",terms:"candy,gum,chip,pretzel,cookie,cracker"},"amenity/veterinary":{name:"Veterinary",terms:"pet clinic,veterinarian,animal hospital,pet doctor"},"amenity/waste_basket":{name:"Waste Basket",terms:"bin,garbage,rubbish,litter,trash"},"amenity/waste_disposal":{name:"Garbage Dumpster",terms:"garbage,rubbish,litter,trash"},"amenity/waste_transfer_station":{name:"Waste Transfer Station",terms:"dump,garbage,recycling,rubbish,scrap,trash"},"amenity/waste/dog_excrement":{name:"Dog Excrement Bin",terms:"bin,garbage,rubbish,litter,trash,poo,dog"},"amenity/water_point":{name:"RV Drinking Water",terms:"water faucet,water point,water tap,water source,water spigot"},"amenity/watering_place":{name:"Animal Watering Place",terms:""},"amenity/weighbridge":{name:"Truck Scale",terms:"weigh station,weighbridge"},area:{name:"Area",terms:"polygon"},"area/highway":{name:"Road Area",terms:"area:highway,edge of pavement,highway area,highway shape,pavement,road shape,street area"},"attraction/amusement_ride":{name:"Amusement Ride",terms:"theme park,carnival ride"},"attraction/animal":{name:"Animal Enclosure",terms:"amphibian,animal park,aquarium,bear,bird,fish,insect,lion,mammal,monkey,penguin,reptile,safari,theme park,tiger,zoo"},"attraction/big_wheel":{name:"Big Wheel",terms:"ferris wheel,theme park,amusement ride"},"attraction/bumper_car":{name:"Bumper Cars",terms:"theme park,dodgem cars,autoscooter"},"attraction/bungee_jumping":{name:"Bungee Jumping",terms:"theme park,bungy jumping,jumping platform"},"attraction/carousel":{name:"Carousel",terms:"theme park,roundabout,merry-go-round,galloper,jumper,horseabout,flying horses"},"attraction/dark_ride":{name:"Dark Ride",terms:"theme park,ghost train"},"attraction/drop_tower":{name:"Drop Tower Ride",terms:"theme park,amusement ride,gondola,tower,big drop"},"attraction/kiddie_ride":{name:"Kiddie Ride",terms:""},"attraction/log_flume":{name:"Log Flume",terms:"theme park,amusement ride,flume"},"attraction/maze":{name:"Maze",terms:"theme park,amusement ride,labyrinth"},"attraction/pirate_ship":{name:"Pirate Ship Ride",terms:"theme park,carnival ride,amusement ride"},"attraction/river_rafting":{name:"River Rapids Ride",terms:"theme park,aquatic park,water park,rafting simulator,river rafting ride,river rapids ride"},"attraction/roller_coaster":{name:"Roller Coaster",terms:"theme park,amusement ride"},"attraction/summer_toboggan":{name:"Summer Toboggan",terms:"alpine slide,mountain coaster"},"attraction/swing_carousel":{name:"Swing Carousel",terms:"theme park,amusement ride,carousel,tower,carousel tower"},"attraction/train":{name:"Tourist Train",terms:"theme park,rackless train,road train,Tschu-Tschu train,dotto train,park train"},"attraction/water_slide":{name:"Water Slide",terms:"theme park,aquatic park,water park,flumes,water chutes,hydroslides"},barrier:{name:"Barrier",terms:""},"barrier/entrance":{name:"Entrance"},"barrier/block":{name:"Block",terms:""},"barrier/bollard_line":{name:"Bollard Row",terms:""},"barrier/bollard":{name:"Bollard",terms:""},"barrier/border_control":{name:"Border Control",terms:""},"barrier/cattle_grid":{name:"Cattle Grid",terms:"cattle guard,cattle stop,livestock grid,stock gate,stock grid,stock stop,Texas gate,vehicle pass"},"barrier/chain":{name:"Chain",terms:""},"barrier/city_wall":{name:"City Wall",terms:""},"barrier/cycle_barrier":{name:"Cycle Barrier",terms:"bicycle barrier,bicycling barrier,bike gates,cycling barrier"},"barrier/ditch":{name:"Trench",terms:""},"barrier/fence":{name:"Fence",terms:""},"barrier/fence/railing":{name:"Railing",terms:"railing,handrail,guard rail"},"barrier/gate":{name:"Gate",terms:""},"barrier/guard_rail":{name:"Guard Rail",terms:"guardrail,traffic barrier,crash barrier,median barrier,roadside barrier,Armco barrier"},"barrier/hedge":{name:"Hedge",terms:""},"barrier/height_restrictor":{name:"Height Restrictor",terms:""},"barrier/kerb":{name:"Curb",terms:""},"barrier/kerb/flush":{name:"Flush Curb",terms:"even curb,level curb,tactile curb"},"barrier/kerb/lowered":{name:"Lowered Curb",terms:"curb cut,curb ramp,kerb ramp,dropped kerb,pram ramp"},"barrier/kerb/raised":{name:"Raised Curb",terms:""},"barrier/kerb/rolled":{name:"Rolled Curb",terms:"gutter"},"barrier/kissing_gate":{name:"Kissing Gate",terms:""},"barrier/lift_gate":{name:"Lift Gate",terms:""},"barrier/retaining_wall":{name:"Retaining Wall",terms:""},"barrier/sally_port":{name:"Sally Port",terms:"Postern,castle side gate"},"barrier/stile":{name:"Stile",terms:""},"barrier/swing_gate":{name:"Swing Gate",terms:""},"barrier/toll_booth":{name:"Toll Booth",terms:""},"barrier/turnstile":{name:"Turnstile",terms:"baffle gate,turnstyle"},"barrier/wall":{name:"Wall",terms:""},"barrier/wall/noise_barrier":{name:"Noise Barrier",terms:"acoustical barrier,noise wall,noisewall,sound barrier,sound berm,sound wall,soundberm,soundwall"},"boundary/administrative":{name:"Administrative Boundary",terms:""},"bridge/support":{name:"Bridge Support",terms:""},"bridge/support/pier":{name:"Bridge Pier",terms:""},building_part:{name:"Building Part",terms:"roof,simple 3D buildings"},building:{name:"Building",terms:""},"building/bunker":{name:"Bunker"},"building/entrance":{name:"Entrance/Exit"},"building/train_station":{name:"Train Station Building"},"building/apartments":{name:"Apartment Building",terms:""},"building/barn":{name:"Barn",terms:""},"building/boathouse":{name:"Boathouse",terms:""},"building/bungalow":{name:"Bungalow",terms:"home,detached"},"building/cabin":{name:"Cabin",terms:""},"building/carport":{name:"Carport",terms:"covered parking space,garage,car,porch"},"building/cathedral":{name:"Cathedral Building",terms:""},"building/chapel":{name:"Chapel Building",terms:""},"building/church":{name:"Church Building",terms:""},"building/civic":{name:"Civic Building",terms:""},"building/college":{name:"College Building",terms:"university"},"building/commercial":{name:"Commercial Building",terms:""},"building/construction":{name:"Building Under Construction",terms:""},"building/detached":{name:"Detached House",terms:"home,single,family,residence,dwelling"},"building/dormitory":{name:"Dormitory",terms:""},"building/farm_auxiliary":{name:"Farm Building",terms:""},"building/farm":{name:"Farm House",terms:""},"building/garage":{name:"Garage",terms:""},"building/garages":{name:"Garages",terms:""},"building/grandstand":{name:"Grandstand",terms:"tribune,stand,stands,bleachers"},"building/greenhouse":{name:"Greenhouse",terms:""},"building/hangar":{name:"Hangar Building",terms:""},"building/hospital":{name:"Hospital Building",terms:""},"building/hotel":{name:"Hotel Building",terms:""},"building/house":{name:"House",terms:"home,family,residence,dwelling"},"building/houseboat":{name:"Houseboat",terms:"home,family,residence,dwelling"},"building/hut":{name:"Hut",terms:""},"building/industrial":{name:"Industrial Building",terms:""},"building/kindergarten":{name:"Preschool / Kindergarten Building",terms:"kindergarden,pre-school"},"building/mosque":{name:"Mosque Building",terms:""},"building/pavilion":{name:"Pavilion Building",terms:"sports"},"building/public":{name:"Public Building",terms:""},"building/residential":{name:"Residential Building",terms:""},"building/retail":{name:"Retail Building",terms:""},"building/roof":{name:"Roof",terms:""},"building/ruins":{name:"Building Ruins",terms:""},"building/school":{name:"School Building",terms:"academy,elementary school,middle school,high school"},"building/semidetached_house":{name:"Semi-Detached House",terms:"home,double,duplex,twin,family,residence,dwelling"},"building/service":{name:"Service Building",terms:""},"building/shed":{name:"Shed",terms:""},"building/stable":{name:"Stable",terms:"horse shelter"},"building/stadium":{name:"Stadium Building",terms:""},"building/static_caravan":{name:"Static Mobile Home",terms:""},"building/temple":{name:"Temple Building",terms:""},"building/terrace":{name:"Row Houses",terms:"home,terrace,brownstone,family,residence,dwelling"},"building/transportation":{name:"Transportation Building",terms:""},"building/university":{name:"University Building",terms:"college"},"building/warehouse":{name:"Warehouse",terms:""},club:{name:"Club",terms:"social"},"club/sport":{name:"Sports Club",terms:"athletics club,sporting club,sports association,sports society"},craft:{name:"Craft",terms:""},"craft/locksmith":{name:"Locksmith"},"craft/tailor":{name:"Tailor"},"craft/agricultural_engines":{name:"Argricultural Engines Mechanic",terms:""},"craft/basket_maker":{name:"Basket Maker",terms:""},"craft/beekeeper":{name:"Beekeeper",terms:""},"craft/blacksmith":{name:"Blacksmith",terms:""},"craft/boatbuilder":{name:"Boat Builder",terms:""},"craft/bookbinder":{name:"Bookbinder",terms:"book repair"},"craft/brewery":{name:"Brewery",terms:"alcohol,beer,beverage,bier,booze,cider"},"craft/carpenter":{name:"Carpenter",terms:"woodworker"},"craft/carpet_layer":{name:"Carpet Layer",terms:""},"craft/caterer":{name:"Caterer",terms:""},"craft/chimney_sweeper":{name:"Chimney Sweeper",terms:""},"craft/cleaning":{name:"Cleaning Service",terms:""},"craft/clockmaker":{name:"Clockmaker",terms:""},"craft/confectionery":{name:"Candy Maker",terms:"sweet,candy"},"craft/distillery":{name:"Distillery",terms:"alcohol,beverage,bourbon,booze,brandy,gin,hooch,liquor,mezcal,moonshine,rum,scotch,spirits,still,tequila,vodka,whiskey,whisky"},"craft/dressmaker":{name:"Dressmaker",terms:"seamstress"},"craft/electrician":{name:"Electrician",terms:"power,wire"},"craft/electronics_repair":{name:"Electronics Repair Shop",terms:""},"craft/floorer":{name:"Floorer",terms:""},"craft/gardener":{name:"Gardener",terms:"landscaper,grounds keeper"},"craft/glaziery":{name:"Glaziery",terms:"glass,stained-glass,window"},"craft/handicraft":{name:"Handicraft",terms:""},"craft/hvac":{name:"HVAC",terms:"heat*,vent*,air conditioning"},"craft/insulator":{name:"Insulator",terms:""},"craft/joiner":{name:"Joiner",terms:"furniture"},"craft/key_cutter":{name:"Key Cutter",terms:""},"craft/metal_construction":{name:"Metal Construction",terms:""},"craft/painter":{name:"Painter",terms:""},"craft/parquet_layer":{name:"Parquet Layer",terms:""},"craft/photographer":{name:"Photographer",terms:""},"craft/photographic_laboratory":{name:"Photographic Laboratory",terms:"film"},"craft/plasterer":{name:"Plasterer",terms:""},"craft/plumber":{name:"Plumber",terms:"pipe"},"craft/pottery":{name:"Pottery Maker",terms:"ceramic,kiln,pot,vase"},"craft/rigger":{name:"Rigger",terms:""},"craft/roofer":{name:"Roofer",terms:""},"craft/saddler":{name:"Saddler",terms:""},"craft/sailmaker":{name:"Sailmaker",terms:""},"craft/sawmill":{name:"Sawmill",terms:"lumber"},"craft/scaffolder":{name:"Scaffolder",terms:""},"craft/sculptor":{name:"Sculptor",terms:""},"craft/shoemaker":{name:"Shoemaker",terms:"cobbler"},"craft/signmaker":{name:"Signmaker",terms:""},"craft/stonemason":{name:"Stonemason",terms:"masonry"},"craft/tiler":{name:"Tiler",terms:""},"craft/tinsmith":{name:"Tinsmith",terms:""},"craft/upholsterer":{name:"Upholsterer",terms:""},"craft/watchmaker":{name:"Watchmaker",terms:""},"craft/window_construction":{name:"Window Construction",terms:"glass"},"craft/winery":{name:"Winery",terms:""},"cycleway/asl":{name:"Advanced Stop Line",terms:"advanced stop box,asl,bicycle box,bike box,bikebox,cycle box,cycle stop marking"},"demolished/building":{name:"Recently Demolished Building"},"disused/railway":{name:"Disused Railway Feature"},"emergency/designated":{name:"Emergency Access Designated"},"emergency/destination":{name:"Emergency Access Destination"},"emergency/no":{name:"Emergency Access No"},"emergency/official":{name:"Emergency Access Official"},"emergency/private":{name:"Emergency Access Private"},"emergency/yes":{name:"Emergency Access Yes"},"emergency/ambulance_station":{name:"Ambulance Station",terms:"EMS,EMT,rescue"},"emergency/defibrillator":{name:"Defibrillator",terms:"AED"},"emergency/fire_alarm":{name:"Fire Alarm Call Box",terms:""},"emergency/fire_extinguisher":{name:"Fire Extinguisher",terms:""},"emergency/fire_hose":{name:"Fire Hose",terms:""},"emergency/fire_hydrant":{name:"Fire Hydrant",terms:"fire plug,fire water well,hydrant"},"emergency/first_aid_kit":{name:"First Aid Kit",terms:"bandage,first aid,med,med kit,medic*,medkit"},"emergency/landing_site":{name:"Emergency Landing Site",terms:"helicopter,helipad,heliport"},"emergency/life_ring":{name:"Life Ring",terms:"life buoy,kisby ring,kisbie ring,perry buoy"},"emergency/lifeguard":{name:"Lifeguard",terms:"CPR,rescue"},"emergency/phone":{name:"Emergency Phone",terms:""},"emergency/siren":{name:"Siren",terms:"air raid,loud,noise,storm,tornado,warning"},"emergency/water_tank":{name:"Emergency Water Tank",terms:"water tank,cistern,reservoir"},entrance:{name:"Entrance / Exit",terms:"entrance,exit,door"},"entrance/emergency":{name:"Emergency Exit",terms:"fire exit,door"},ford:{name:"Ford",terms:""},"golf/bunker":{name:"Sand Trap",terms:"hazard,bunker"},"golf/cartpath":{name:"Golf Cartpath",terms:""},"golf/driving_range":{name:"Driving Range",terms:""},"golf/fairway":{name:"Fairway",terms:""},"golf/green":{name:"Putting Green",terms:""},"golf/hole":{name:"Golf Hole",terms:""},"golf/lateral_water_hazard":{name:"Lateral Water Hazard",terms:""},"golf/path":{name:"Golf Walking Path",terms:""},"golf/rough":{name:"Rough",terms:""},"golf/tee":{name:"Tee Box",terms:"teeing ground"},"golf/water_hazard":{name:"Water Hazard",terms:""},healthcare:{name:"Healthcare Facility",terms:"clinic,doctor,disease,health,institution,sick,surgery,wellness"},"healthcare/alternative":{name:"Alternative Medicine",terms:"acupuncture,anthroposophical,applied kinesiology,aromatherapy,ayurveda,herbalism,homeopathy,hydrotherapy,hypnosis,naturopathy,osteopathy,reflexology,reiki,shiatsu,traditional,tuina,unani"},"healthcare/alternative/chiropractic":{name:"Chiropractor",terms:"back,pain,spine"},"healthcare/audiologist":{name:"Audiologist",terms:"ear,hearing,sound"},"healthcare/birthing_center":{name:"Birthing Center",terms:"baby,childbirth,delivery,labour,labor,pregnancy"},"healthcare/blood_donation":{name:"Blood Donor Center",terms:"blood bank,blood donation,blood transfusion,apheresis,plasmapheresis,plateletpheresis,stem cell donation"},"healthcare/counselling":{name:"Counselling Center",terms:""},"healthcare/hospice":{name:"Hospice",terms:"terminal,illness"},"healthcare/laboratory":{name:"Medical Laboratory",terms:"medical_laboratory,medical_lab,blood_check"},"healthcare/midwife":{name:"Midwife",terms:"baby,childbirth,delivery,labour,labor,pregnancy"},"healthcare/occupational_therapist":{name:"Occupational Therapist",terms:"therapist,therapy"},"healthcare/optometrist":{name:"Optometrist",terms:"eye,glasses,lasik,lenses,vision"},"healthcare/physiotherapist":{name:"Physiotherapist",terms:"physical,therapist,therapy"},"healthcare/podiatrist":{name:"Podiatrist",terms:"foot,feet,nails"},"healthcare/psychotherapist":{name:"Psychotherapist",terms:"anxiety,counselor,depression,mental health,mind,suicide,therapist,therapy"},"healthcare/rehabilitation":{name:"Rehabilitation Facility",terms:"rehab,therapist,therapy"},"healthcare/speech_therapist":{name:"Speech Therapist",terms:"speech,therapist,therapy,voice"},"highway/bus_stop":{name:"Bus Stop"},"highway/crossing":{name:"Crossing"},"highway/bridleway":{name:"Bridle Path",terms:"bridleway,equestrian,horse,trail"},"highway/bus_guideway":{name:"Bus Guideway",terms:""},"highway/construction":{name:"Road Closed",terms:"closed,closure,construction"},"highway/corridor":{name:"Indoor Corridor",terms:"gallery,hall,hallway,indoor,passage,passageway"},"highway/crossing/zebra-raised":{name:"Marked Crosswalk (Raised)"},"highway/crossing/zebra":{name:"Marked Crosswalk"},"highway/crossing/marked-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/crossing/marked":{name:"Marked Crosswalk",terms:"zebra crossing,marked crossing,crosswalk"},"highway/crossing/unmarked-raised":{name:"Unmarked Crossing (Raised)",terms:"flat top,hump,speed,slow"},"highway/crossing/unmarked":{name:"Unmarked Crossing",terms:""},"highway/cycleway":{name:"Cycle Path",terms:"bicyle path,bike path,cycling path"},"highway/cycleway/crossing":{name:"Cycle Crossing"},"highway/cycleway/bicycle_foot":{name:"Cycle & Foot Path",terms:"bicycle and foot path,bike and pedestrian path,green way,greenway,mixed-use trail,multi-use trail,segregated trail,rail trail"},"highway/cycleway/crossing/marked":{name:"Marked Cycle Crossing",terms:"cycle crosswalk,cycle path crossing,cycleway crossing,bicycle crossing,bike crossing"},"highway/cycleway/crossing/unmarked":{name:"Unmarked Cycle Crossing",terms:"cycle path crossing,cycleway crossing,bicycle crossing,bike crossing"},"highway/elevator":{name:"Elevator",terms:"lift"},"highway/emergency_bay":{name:"Emergency Stopping Place",terms:"Highway Emergency Bay"},"highway/footway":{name:"Foot Path",terms:"hike,hiking,promenade,trackway,trail,walk"},"highway/footway/crossing":{name:"Pedestrian Crossing"},"highway/footway/zebra-raised":{name:"Marked Crosswalk (Raised)"},"highway/footway/zebra":{name:"Marked Crosswalk"},"highway/footway/access_aisle":{name:"Access Aisle",terms:"accessible van loading zone,disabled parking access zone,handicap parking access zone,parking lot aisle,striped zone,tow zone,tow-away zone,towaway zone,wheelchair aisle"},"highway/footway/conveying":{name:"Moving Walkway",terms:"moving sidewalk,autwalk,skywalk,travolator,travelator,travellator,conveyor"},"highway/footway/marked-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/footway/marked":{name:"Marked Crosswalk",terms:"marked foot path crossing,marked crossing,marked pedestrian crosswalk,zebra crossing"},"highway/footway/sidewalk":{name:"Sidewalk",terms:"pavement,sidepath"},"highway/footway/unmarked-raised":{name:"Unmarked Crossing (Raised)",terms:"flat top,hump,speed,slow"},"highway/footway/unmarked":{name:"Unmarked Crossing",terms:"unmarked foot path crossing,unmarked crosswalk,unmarked pedestrian crossing"},"highway/give_way":{name:"Yield Sign",terms:"give way,yield,sign"},"highway/living_street":{name:"Living Street",terms:""},"highway/milestone":{name:"Highway Milestone",terms:"mile marker,mile post,mile stone,mileage marker,milemarker,milepost"},"highway/mini_roundabout":{name:"Mini-Roundabout",terms:"traffic circle"},"highway/motorway_junction":{name:"Motorway Junction / Exit",terms:"exit"},"highway/motorway_link":{name:"Motorway Link",terms:"exit,ramp,road,street,on ramp,off ramp"},"highway/motorway":{name:"Motorway",terms:"autobahn,expressway,freeway,highway,interstate,parkway,road,street,thruway,turnpike"},"highway/passing_place":{name:"Passing Place",terms:"turnout, pullout"},"highway/path":{name:"Path",terms:"hike,hiking,trackway,trail,walk"},"highway/path/informal":{name:"Informal Path",terms:"bootleg trail,cow path,desire line,desire path,desireline,desirepath,elephant path,game trail,goat track,herd path,pig trail,shortcut,social trail,use trail"},"highway/pedestrian_area":{name:"Pedestrian Area",terms:"center,centre,plaza,quad,square,walkway"},"highway/pedestrian_line":{name:"Pedestrian Street",terms:"center,centre,plaza,quad,square,walkway"},"highway/primary_link":{name:"Primary Link",terms:"on ramp,off ramp,ramp,road,street"},"highway/primary":{name:"Primary Road",terms:"road,street"},"highway/raceway":{name:"Motorsport Racetrack",terms:"auto*,formula one,kart,motocross,nascar,race*,track"},"highway/raceway/karting":{name:"Karting Racetrack",terms:"carting,go carts,go karts,go-karts,gokarts,kart racing,karting track,motorsports,shifter karts,superkarts"},"highway/raceway/motocross":{name:"Motocross Racetrack",terms:"off-road racing,offroad moto racing,motocross circuit,motorcycle track,motorsports"},"highway/residential":{name:"Residential Road",terms:"road,street"},"highway/rest_area":{name:"Rest Area",terms:"rest stop"},"highway/road":{name:"Unknown Road",terms:"road,street"},"highway/secondary_link":{name:"Secondary Link",terms:"on ramp,off ramp,ramp,road,street"},"highway/secondary":{name:"Secondary Road",terms:"road,street"},"highway/service":{name:"Service Road",terms:"road,street"},"highway/service/alley":{name:"Alley",terms:""},"highway/service/drive-through":{name:"Drive-Through",terms:""},"highway/service/driveway":{name:"Driveway",terms:""},"highway/service/emergency_access":{name:"Emergency Access",terms:""},"highway/service/parking_aisle":{name:"Parking Aisle",terms:""},"highway/services":{name:"Service Area",terms:"services,travel plaza,service station"},"highway/speed_camera":{name:"Speed Camera",terms:""},"highway/steps":{name:"Steps",terms:"stairs,staircase,stairway"},"highway/steps/conveying":{name:"Escalator",terms:"moving staircase,moving stairway,people mover"},"highway/stop":{name:"Stop Sign",terms:"stop,halt,sign"},"highway/street_lamp":{name:"Street Lamp",terms:"streetlight,street light,lamp,light,gaslight"},"highway/tertiary_link":{name:"Tertiary Link",terms:"on ramp,off ramp,ramp,road,street"},"highway/tertiary":{name:"Tertiary Road",terms:"road,street"},"highway/track":{name:"Unmaintained Track Road",terms:"woods road,forest road,logging road,fire road,farm road,agricultural road,ranch road,carriage road,primitive,unmaintained,rut,offroad,4wd,4x4,four wheel drive,atv,quad,jeep,double track,two track"},"highway/traffic_mirror":{name:"Traffic Mirror",terms:"blind spot,convex,corner,curved,roadside,round,safety,sphere,visibility"},"highway/traffic_signals":{name:"Traffic Signals",terms:"light,stoplight,traffic light"},"highway/trailhead":{name:"Trailhead",terms:"hiking,mile zero,mountain biking,mountaineering,trail endpoint,trail start,staging area,trekking"},"highway/trunk_link":{name:"Trunk Link",terms:"on ramp,off ramp,ramp,road,street"},"highway/trunk":{name:"Trunk Road",terms:"road,street"},"highway/turning_circle":{name:"Turning Circle",terms:"cul-de-sac"},"highway/turning_loop":{name:"Turning Loop (Island)",terms:"cul-de-sac"},"highway/unclassified":{name:"Minor/Unclassified Road",terms:"road,street"},historic:{name:"Historic Site",terms:""},"historic/archaeological_site":{name:"Archaeological Site",terms:""},"historic/boundary_stone":{name:"Boundary Stone",terms:""},"historic/building":{name:"Historic Building",terms:""},"historic/castle":{name:"Castle",terms:""},"historic/castle/fortress":{name:"Historic Fortress",terms:"citadel,military"},"historic/castle/palace":{name:"Palace",terms:"Royal Residence,royal,king,queen"},"historic/castle/stately":{name:"Château",terms:"Historic Country House,Stately Home,nobility,gentry,representative"},"historic/city_gate":{name:"City Gate",terms:"Town Gate"},"historic/fort":{name:"Historic Fort",terms:"military"},"historic/manor":{name:"Manor House",terms:"Mansion,gentry,nobility,estate"},"historic/memorial":{name:"Memorial",terms:"dedicatory,epitaph,remember,remembrance,memory,monument,stolperstein"},"historic/memorial/plaque":{name:"Commemorative Plaque",terms:"dedicatory,epitaph,historical marker,remember,remembrance,memory"},"historic/monument":{name:"Monument",terms:""},"historic/ruins":{name:"Ruins",terms:""},"historic/tomb":{name:"Tomb",terms:""},"historic/wayside_cross":{name:"Wayside Cross",terms:""},"historic/wayside_shrine":{name:"Wayside Shrine",terms:""},"historic/wreck":{name:"Shipwreck",terms:"hull,mast,maritime,remains,ship,boat"},"indoor/corridor_line":{name:"Indoor Corridor"},"indoor/area":{name:"Indoor Area",terms:"indoor space"},"indoor/corridor":{name:"Indoor Corridor",terms:"concourse,foyer,hallway,passageway"},"indoor/door":{name:"Indoor Door",terms:"doorframe,doorway,portal,room access,threshold"},"indoor/elevator":{name:"Indoor Elevator Shaft",terms:"elevator,lift"},"indoor/room":{name:"Room",terms:"antechamber,anteroom,atrium,cell,chamber,concourse,foyer,indoor room,lobby,vestibule"},"indoor/stairs":{name:"Indoor Stairwell",terms:"stair,stairs,staircase,stairway,stairwell,steps"},"indoor/wall":{name:"Indoor Wall",terms:"indoor barrier,room divider,room partition"},"internet_access/wlan":{name:"Wi-Fi Hotspot",terms:"wi-fi,wifi,hotspot"},junction:{name:"Junction",terms:""},"landuse/basin":{name:"Basin"},"landuse/churchyard":{name:"Churchyard"},"landuse/farm":{name:"Farmland"},"landuse/pond":{name:"Pond"},"landuse/reservoir":{name:"Reservoir"},"landuse/allotments":{name:"Community Garden",terms:"allotment,garden"},"landuse/aquaculture":{name:"Aquaculture",terms:"fish farm,crustacean,algae,aquafarming,shrimp farm,oyster farm,mariculture,algaculture"},"landuse/brownfield":{name:"Brownfield",terms:""},"landuse/cemetery":{name:"Cemetery",terms:"burial ground,cemetary,cemetery,churchyard,columbarium,grave yard,graveyard,mausoleum,tomb"},"landuse/commercial":{name:"Commercial Area",terms:""},"landuse/construction":{name:"Construction Area",terms:"building,bulldozer,construction site,construction zone,crane,demolition,development,infrastructure"},"landuse/farmland":{name:"Farmland",terms:"crop,grow,plant"},"landuse/farmyard":{name:"Farmyard",terms:"crop,grow,plant"},"landuse/flowerbed":{name:"Flowerbed",terms:"floral garden,flower garden"},"landuse/forest":{name:"Managed Forest",terms:"boreal,cut,forest,forestry,forrest,lumber,silviculture,taiga,tree,trees,woodlands,woods"},"landuse/garages":{name:"Garage Landuse",terms:""},"landuse/grass":{name:"Grass",terms:"field,green,lawn,managed grass,mown grass,turf"},"landuse/greenfield":{name:"Greenfield",terms:""},"landuse/greenhouse_horticulture":{name:"Greenhouse Horticulture",terms:"flower,greenhouse,horticulture,grow,vivero"},"landuse/harbour":{name:"Harbor",terms:"boat"},"landuse/industrial":{name:"Industrial Area",terms:""},"landuse/industrial/scrap_yard":{name:"Scrap Yard",terms:"car,junk,metal,salvage,scrap,u-pull-it,vehicle,wreck,yard"},"landuse/industrial/slaughterhouse":{name:"Slaughterhouse",terms:"abattoir,beef,butchery,calf,chicken,cow,killing house,meat,pig,pork,poultry,shambles,stockyard"},"landuse/landfill":{name:"Landfill",terms:"dump"},"landuse/meadow":{name:"Meadow",terms:"grazing,hay field,pasture"},"landuse/military":{name:"Military Area",terms:""},"landuse/military/airfield":{name:"Military Airfield",terms:"aerodrome,aeroway,air force,airplane,airport,army,base,bomb,fight,force,guard,heli*,jet,marine,navy,plane,troop,war"},"landuse/military/barracks":{name:"Barracks",terms:"air force,army,base,fight,force,guard,marine,navy,troop,war"},"landuse/military/danger_area":{name:"Danger Area",terms:"air force,army,base,blast,bomb,explo*,force,guard,mine,marine,navy,troop,war"},"landuse/military/naval_base":{name:"Naval Base",terms:"base,fight,force,guard,marine,navy,ship,sub,troop,war"},"landuse/military/obstacle_course":{name:"Obstacle Course",terms:"army,base,force,guard,marine,navy,troop,war"},"landuse/military/range":{name:"Military Range",terms:"air force,army,base,fight,fire,force,guard,gun,marine,navy,rifle,shoot*,snip*,train,troop,war"},"landuse/military/training_area":{name:"Training Area",terms:"air force,army,base,fight,fire,force,guard,gun,marine,navy,rifle,shoot*,snip*,train,troop,war"},"landuse/orchard":{name:"Orchard",terms:"fruit"},"landuse/plant_nursery":{name:"Plant Nursery",terms:"flower,garden,grow,vivero"},"landuse/quarry":{name:"Quarry",terms:""},"landuse/railway":{name:"Railway Corridor",terms:"rail,train,track"},"landuse/recreation_ground":{name:"Recreation Ground",terms:"playing fields"},"landuse/religious":{name:"Religious Area",terms:"christian,churchyard,hindu,jewish,mosque,muslim,place of worship,shinto,sikh,taoist,temple,shrine,synagogue"},"landuse/residential":{name:"Residential Area",terms:""},"landuse/residential/apartments":{name:"Apartment Complex",terms:"flat,residence,tenement"},"landuse/retail":{name:"Retail Area",terms:""},"landuse/vineyard":{name:"Vineyard",terms:"grape,wine"},"landuse/winter_sports":{name:"Winter Sports Area",terms:"piste area,ski area,ski hill,ski mountain,ski resort,snow board area,snowboard area"},"leisure/adult_gaming_centre":{name:"Adult Gaming Center",terms:"gambling,slot machine"},"leisure/amusement_arcade":{name:"Amusement Arcade",terms:"pay-to-play games,video games,driving simulators,pinball machines"},"leisure/bandstand":{name:"Bandstand",terms:""},"leisure/beach_resort":{name:"Beach Resort",terms:""},"leisure/bird_hide":{name:"Bird Hide",terms:"machan,ornithology"},"leisure/bleachers":{name:"Bleachers",terms:"crowd,bench,sports,stand,stands,seat,seating"},"leisure/bowling_alley":{name:"Bowling Alley",terms:"bowling center"},"leisure/common":{name:"Common",terms:"open space"},"leisure/dance":{name:"Dance Hall",terms:"ballroom,jive,swing,tango,waltz"},"leisure/dancing_school":{name:"Dance School",terms:"jive,swing,tango,waltz,dance teaching"},"leisure/disc_golf_course":{name:"Disc Golf Course",terms:"disk golf,frisbee golf,flying disc golf,frolf,ultimate"},"leisure/dog_park":{name:"Dog Park",terms:""},"leisure/escape_game":{name:"Escape Room",terms:"escape game,escape the room,puzzle room,quest room"},"leisure/firepit":{name:"Fire Pit",terms:"bonfire,campfire,fire circle,fire hole,fire place,fire ring,firepit,fireplace,firering"},"leisure/fishing":{name:"Fishing Spot",terms:"angler"},"leisure/fitness_centre":{name:"Gym / Fitness Center",terms:"health,gym,leisure,pilates,studio"},"leisure/fitness_centre/yoga":{name:"Yoga Studio",terms:"asanas,meditation,modern yoga,studio"},"leisure/fitness_station":{name:"Outdoor Fitness Station",terms:"exercise,fitness,gym,trim trail"},"leisure/fitness_station/balance_beam":{name:"Exercise Balance Beam",terms:"balance,exercise,fitness,gym,trim trail"},"leisure/fitness_station/box":{name:"Exercise Box",terms:"box,exercise,fitness,gym,jump,trim trail"},"leisure/fitness_station/horizontal_bar":{name:"Exercise Horizontal Bar",terms:"bar,chinup,chin up,exercise,fitness,gym,pullup,pull up,trim trail"},"leisure/fitness_station/horizontal_ladder":{name:"Exercise Monkey Bars",terms:"bar,chinup,chin up,exercise,fitness,gym,ladder,monkey bars,pullup,pull up,trim trail"},"leisure/fitness_station/hyperextension":{name:"Hyperextension Station",terms:"back,exercise,extension,fitness,gym,roman chair,trim trail"},"leisure/fitness_station/parallel_bars":{name:"Parallel Bars",terms:"bar,dip,exercise,fitness,gym,trim trail"},"leisure/fitness_station/push-up":{name:"Push-Up Station",terms:"bar,exercise,fitness,gym,pushup,push up,trim trail"},"leisure/fitness_station/rings":{name:"Exercise Rings",terms:"exercise,fitness,gym,muscle up,pullup,pull up,trim trail"},"leisure/fitness_station/sign":{name:"Exercise Instruction Sign",terms:"exercise,fitness,gym,trim trail"},"leisure/fitness_station/sit-up":{name:"Sit-Up Station",terms:"crunch,exercise,fitness,gym,situp,sit up,trim trail"},"leisure/fitness_station/stairs":{name:"Exercise Stairs",terms:"exercise,fitness,gym,steps,trim trail"},"leisure/garden":{name:"Garden",terms:""},"leisure/golf_course":{name:"Golf Course",terms:"links"},"leisure/hackerspace":{name:"Hackerspace",terms:"makerspace,hackspace,hacklab"},"leisure/horse_riding":{name:"Horseback Riding Facility",terms:"equestrian,stable"},"leisure/ice_rink":{name:"Ice Rink",terms:"hockey,skating,curling"},"leisure/marina":{name:"Marina",terms:"boat"},"leisure/miniature_golf":{name:"Miniature Golf",terms:"crazy golf,mini golf,putt-putt"},"leisure/nature_reserve":{name:"Nature Reserve",terms:"protected,wildlife"},"leisure/outdoor_seating":{name:"Outdoor Seating Area",terms:"al fresco,beer garden,dining,cafe,restaurant,pub,bar,patio"},"leisure/park":{name:"Park",terms:"esplanade,estate,forest,garden,grass,green,grounds,lawn,lot,meadow,parkland,place,playground,plaza,pleasure garden,recreation area,square,tract,village green,woodland"},"leisure/picnic_table":{name:"Picnic Table",terms:"bench"},"leisure/picnic_table/chess":{name:"Chess Table",terms:"bench,chess board,checkerboard,checkers,chequerboard,game table"},"leisure/pitch":{name:"Sport Pitch",terms:"field"},"leisure/pitch/american_football":{name:"American Football Field",terms:"football,gridiron"},"leisure/pitch/australian_football":{name:"Australian Football Field",terms:"Aussie,AFL,football"},"leisure/pitch/badminton":{name:"Badminton Court",terms:""},"leisure/pitch/baseball":{name:"Baseball Field",terms:""},"leisure/pitch/basketball":{name:"Basketball Court",terms:""},"leisure/pitch/beachvolleyball":{name:"Beach Volleyball Court",terms:"volleyball"},"leisure/pitch/boules":{name:"Boules/Bocce Court",terms:"bocce,lyonnaise,pétanque"},"leisure/pitch/bowls":{name:"Bowling Green",terms:""},"leisure/pitch/chess":{name:"Giant Chess Board",terms:"chessboard,checkerboard,checkers,chequerboard,garden chess,large chess,oversize chess"},"leisure/pitch/cricket":{name:"Cricket Field",terms:""},"leisure/pitch/equestrian":{name:"Riding Arena",terms:"dressage,equestrian,horse,horseback,riding"},"leisure/pitch/field_hockey":{name:"Field Hockey Pitch",terms:"landhockey"},"leisure/pitch/horseshoes":{name:"Horseshoes Pit",terms:"horse shoes"},"leisure/pitch/netball":{name:"Netball Court",terms:""},"leisure/pitch/rugby_league":{name:"Rugby League Field",terms:""},"leisure/pitch/rugby_union":{name:"Rugby Union Field",terms:""},"leisure/pitch/shuffleboard":{name:"Shuffleboard Court",terms:"deck shuffleboard,floor shuffleboard"},"leisure/pitch/skateboard":{name:"Skate Park",terms:""},"leisure/pitch/soccer":{name:"Soccer Field",terms:"football"},"leisure/pitch/softball":{name:"Softball Field",terms:"softball,diamond"},"leisure/pitch/table_tennis":{name:"Ping Pong Table",terms:"table tennis,ping pong"},"leisure/pitch/tennis":{name:"Tennis Court",terms:""},"leisure/pitch/volleyball":{name:"Volleyball Court",terms:""},"leisure/playground":{name:"Playground",terms:"jungle gym,play area"},"leisure/resort":{name:"Resort",terms:"recreation center,sanatorium,ski and snowboard resort,vacation resort,winter sports resort"},"leisure/sauna":{name:"Sauna",terms:""},"leisure/slipway_point":{name:"Slipway",terms:"boat launch,boat ramp,boat landing"},"leisure/slipway":{name:"Slipway",terms:"boat launch,boat ramp,boat landing"},"leisure/sports_centre":{name:"Sports Center / Complex",terms:""},"leisure/sports_centre/climbing":{name:"Climbing Gym",terms:"abseiling,artificial climbing wall,belaying,bouldering,rock climbing facility,indoor rock wall,rappeling,rock gym,ropes"},"leisure/sports_centre/swimming":{name:"Swimming Pool Facility",terms:"dive,water"},"leisure/stadium":{name:"Stadium",terms:""},"leisure/swimming_area":{name:"Natural Swimming Area",terms:"dive,water,aquatics"},"leisure/swimming_pool":{name:"Swimming Pool",terms:"dive,water,aquatics"},"leisure/track":{name:"Racetrack (Non-Motorsport)",terms:"cycle,dog,greyhound,horse,race*,track"},"leisure/track/cycling_point":{name:"Cycling Track",terms:"bicycle track,bicycling track,cycle racetrack,velodrome"},"leisure/track/cycling":{name:"Cycling Track",terms:"bicycle track,bicycling track,cycle racetrack,velodrome"},"leisure/track/horse_racing_point":{name:"Horse Racing Track",terms:"equestrian race track,horse race betting,horseracing,horsetrack,horse racetrack"},"leisure/track/horse_racing":{name:"Horse Racing Track",terms:"equestrian race track,horse race betting,horseracing,horsetrack,horse racetrack"},"leisure/track/running_point":{name:"Running Track",terms:"athletics track,decathlon,foot race,long distance running,marathon,middle distance running,racetrack,running,sprint,track,walking"},"leisure/track/running":{name:"Running Track",terms:"athletics track,decathlon,foot race,long distance running,marathon,middle distance running,racetrack,running,sprint,track,walking"},"leisure/water_park":{name:"Water Park",terms:"swim,pool,dive"},line:{name:"Line",terms:"polyline"},"man_made/adit":{name:"Adit",terms:"cave,horizontal mine entrance,tunnel,underground"},"man_made/antenna":{name:"Antenna",terms:"broadcast,cell phone,cell,communication,mobile phone,radio,television,transmission,tv"},"man_made/beacon":{name:"Beacon",terms:""},"man_made/beehive":{name:"Beehive",terms:"apiary,beekeeper,farm,honey,pollination"},"man_made/breakwater":{name:"Breakwater",terms:""},"man_made/bridge":{name:"Bridge Area",terms:""},"man_made/bunker_silo":{name:"Bunker Silo",terms:"Silage,Storage"},"man_made/cairn":{name:"Cairn",terms:"rock pile,stone stack,stone pile,càrn"},"man_made/chimney":{name:"Chimney",terms:""},"man_made/clearcut":{name:"Clearcut Forest",terms:"cut,forest,lumber,tree,wood"},"man_made/crane":{name:"Crane",terms:""},"man_made/cross":{name:"Summit Cross",terms:""},"man_made/cutline":{name:"Cut line",terms:""},"man_made/dyke":{name:"Levee",terms:"Dike,Dyke,Floodbank,Stopbank"},"man_made/embankment":{name:"Embankment",terms:""},"man_made/flagpole":{name:"Flagpole",terms:""},"man_made/gasometer":{name:"Gasometer",terms:"gas holder"},"man_made/groyne":{name:"Groyne",terms:""},"man_made/lighthouse":{name:"Lighthouse",terms:""},"man_made/manhole":{name:"Manhole",terms:"cover,hole,sewer,sewage,telecom"},"man_made/manhole/drain":{name:"Storm Drain",terms:"cover,drain,hole,rain,sewer,sewage,storm"},"man_made/manhole/gas":{name:"Gas Utility Manhole",terms:"cover,gas,heat,hole,utility"},"man_made/manhole/power":{name:"Power Utility Manhole",terms:"cover,hole,electric,hole,power,utility"},"man_made/manhole/sewer":{name:"Sewer Utility Manhole",terms:"cover,drain,hole,sewer,sewage,utility"},"man_made/manhole/telecom":{name:"Telecom Utility Manhole",terms:"bt,cable,cover,phone,hole,telecom,telephone,utility"},"man_made/manhole/water":{name:"Water Utility Manhole",terms:"cover,drinking,hole,utility,water"},"man_made/mast":{name:"Mast",terms:"antenna,broadcast tower,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,radio mast,radio tower,television tower,transmission mast,transmission tower,tv tower"},"man_made/mast/communication":{name:"Communication Mast",terms:"antenna,broadcast tower,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,radio mast,radio tower,television tower,transmission mast,transmission tower,tv tower"},"man_made/mast/communication/mobile_phone":{name:"Mobile Phone Mast",terms:"antenna,cell mast,cell phone mast,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,transmission mast,transmission tower"},"man_made/mast/communication/radio":{name:"Radio Broadcast Mast",terms:"antenna,broadcast tower,communication mast,communication tower,guyed tower,radio mast,radio tower,transmission mast,transmission tower"},"man_made/mast/communication/television":{name:"Television Broadcast Mast",terms:"antenna,broadcast tower,communication mast,communication tower,guyed tower,television mast,television tower,transmission mast,transmission tower,tv mast,tv tower"},"man_made/mineshaft":{name:"Mineshaft",terms:"cave,mine shaft,tunnel,underground,vertical mine entrance"},"man_made/monitoring_station":{name:"Monitoring Station",terms:"weather,earthquake,seismology,air,gps"},"man_made/obelisk":{name:"Obelisk",terms:""},"man_made/observatory":{name:"Observatory",terms:"astronomical,meteorological"},"man_made/petroleum_well":{name:"Oil Well",terms:"drilling rig,oil derrick,oil drill,oil horse,oil rig,oil pump,petroleum well,pumpjack"},"man_made/pier":{name:"Pier",terms:"berth,dock,jetty,landing,promenade,wharf"},"man_made/pier/floating":{name:"Floating Pier",terms:"berth,dock,jetty,landing,promenade,wharf"},"man_made/pipeline":{name:"Pipeline",terms:"oil,natural gas,water,sewer,sewage"},"man_made/pipeline/underground":{name:"Underground Pipeline",terms:"oil,natural gas,water,sewer,sewage"},"man_made/pipeline/valve":{name:"Pipeline Valve",terms:"oil,natural gas,water,sewer,sewage"},"man_made/pumping_station":{name:"Pumping Station",terms:""},"man_made/silo":{name:"Silo",terms:"grain,corn,wheat"},"man_made/storage_tank":{name:"Storage Tank",terms:"water,oil,gas,petrol"},"man_made/storage_tank/water":{name:"Water Tank",terms:"cistern,water tower"},"man_made/street_cabinet":{name:"Street Cabinet",terms:"cable tv,monitoring box,technical box,telecommunications,traffic signal controls"},"man_made/surveillance":{name:"Surveillance",terms:"anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam"},"man_made/surveillance/camera":{name:"Surveillance Camera",terms:"anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam"},"man_made/survey_point":{name:"Survey Point",terms:"trig point,triangulation pillar,trigonometrical station"},"man_made/torii":{name:"Torii",terms:"Japanese gate,Shinto shrine"},"man_made/tower":{name:"Tower",terms:""},"man_made/tower/bell_tower":{name:"Bell Tower",terms:"belfry,bell gable,campanile,church tower,klockstapel"},"man_made/tower/communication":{name:"Communication Tower",terms:"antenna,broadcast tower,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,radio mast,radio tower,television tower,transmission mast,transmission tower,tv tower"},"man_made/tower/defensive":{name:"Fortified Tower",terms:"Defensive Tower,Castle Tower"},"man_made/tower/minaret":{name:"Minaret",terms:"Islam,mosque,Muezzin,Muslim"},"man_made/tower/observation":{name:"Observation Tower",terms:"lookout tower,fire tower"},"man_made/tunnel":{name:"Tunnel Area",terms:"bore,dig,shaft,underground passage,underpass"},"man_made/utility_pole":{name:"Utility Pole",terms:""},"man_made/wastewater_plant":{name:"Wastewater Plant",terms:"sewage*,water treatment plant,reclamation plant"},"man_made/water_tap":{name:"Water Tap",terms:"drinking water,water faucet,water point,water source,water spigot"},"man_made/water_tower":{name:"Water Tower",terms:""},"man_made/water_well":{name:"Water Well",terms:"aquifer,drinking water,water pump,water point,water source"},"man_made/water_works":{name:"Water Works",terms:""},"man_made/watermill":{name:"Watermill",terms:"water,wheel,mill"},"man_made/windmill":{name:"Windmill",terms:"wind,wheel,mill"},"man_made/works":{name:"Factory",terms:"assembly,build,brewery,car,plant,plastic,processing,manufacture,refinery"},marker:{name:"Marker",terms:"identifier,marking,plate,pole,post,sign"},"marker/utility":{name:"Utility Marker",terms:"gas line marker,identifier,marking,oil marker,pipline marker,plate,pole,post,sign"},"marker/utility/power":{name:"Power Marker",terms:"electric line,identifier,marking,plate,pole,post,power cable,power line,sign"},"military/bunker":{name:"Military Bunker",terms:"air force,army,base,fight,force,guard,marine,navy,troop,war"},"military/checkpoint":{name:"Checkpoint",terms:"air force,army,base,force,guard,marine,navy,troop,war"},"military/nuclear_explosion_site":{name:"Nuclear Explosion Site",terms:"atom,blast,bomb,detonat*,nuke,site,test"},"military/office":{name:"Military Office",terms:"air force,army,base,enlist,fight,force,guard,marine,navy,recruit,troop,war"},"military/trench":{name:"Military Trench",terms:"dugout,firestep,fox hole,infantry trench,war trench"},"natural/bare_rock":{name:"Bare Rock",terms:"rock"},"natural/bay":{name:"Bay",terms:""},"natural/beach":{name:"Beach",terms:"shore"},"natural/cape":{name:"Cape",terms:"bay,coastline,erosion,headland,promontory"},"natural/cave_entrance":{name:"Cave Entrance",terms:"cavern,hollow,grotto,shelter,cavity"},"natural/cliff":{name:"Cliff",terms:"crag,escarpment,rock face,scarp"},"natural/coastline":{name:"Coastline",terms:"shore"},"natural/fell":{name:"Fell",terms:""},"natural/geyser":{name:"Geyser",terms:"erupting spring,geiser,gieser,guyser,hot water,hydrogeology,hydrothermal explosion,steam"},"natural/glacier":{name:"Glacier",terms:"ice,snow"},"natural/grassland":{name:"Grassland",terms:"field,prairie,savanna"},"natural/heath":{name:"Heath",terms:""},"natural/mud":{name:"Mud",terms:"wetland"},"natural/peak":{name:"Peak",terms:"acme,aiguille,alp,climax,crest,crown,hill,mount,mountain,pinnacle,summit,tip,top"},"natural/reef":{name:"Reef",terms:"barrier,coral,ocean,sand,shoal"},"natural/ridge":{name:"Ridge",terms:"crest"},"natural/rock":{name:"Attached Rock / Boulder",terms:"boulder,stone,rock"},"natural/saddle":{name:"Saddle",terms:"pass,mountain pass,top"},"natural/sand":{name:"Sand",terms:"desert"},"natural/scree":{name:"Scree",terms:"loose rocks"},"natural/scrub":{name:"Scrub",terms:"bush,shrubs"},"natural/shingle":{name:"Shingle",terms:"beach,gravel,pebbles,riverbed,rounded rock fragments"},"natural/spring":{name:"Spring",terms:"aquifer,hydro,seep,water source"},"natural/stone":{name:"Unattached Stone / Boulder",terms:"boulder,stone,rock"},"natural/tree_row":{name:"Tree Row",terms:""},"natural/tree":{name:"Tree",terms:""},"natural/valley":{name:"Valley",terms:"canyon,dale,dell,dene,depression,glen,gorge,gully,gulley,gultch,hollow,ravine,rift,vale"},"natural/volcano":{name:"Volcano",terms:"mountain,crater"},"natural/water":{name:"Water",terms:""},"natural/water/basin":{name:"Basin",terms:"detention,drain,overflow,rain,retention"},"natural/water/canal":{name:"Canal Area",terms:""},"natural/water/lake":{name:"Lake",terms:"lakelet,loch,mere"},"natural/water/moat":{name:"Moat",terms:""},"natural/water/pond":{name:"Pond",terms:"lakelet,millpond,tarn,pool,mere"},"natural/water/reservoir":{name:"Reservoir",terms:""},"natural/water/river":{name:"River Area",terms:"beck,branch,brook,course,creek,estuary,rill,riverbank,rivulet,run,runnel,stream,tributary,watercourse"},"natural/water/stream":{name:"Stream Area",terms:"beck,branch,brook,burn,course,creek,current,drift,flood,flow,freshet,race,rill,rindle,rivulet,run,runnel,rush,spate,spritz,surge,tide,torrent,tributary,watercourse"},"natural/water/wastewater":{name:"Wastewater Basin",terms:"excrement,shit,sewage,wastewater,Settling Basin,Clarifier Basin"},"natural/wetland":{name:"Wetland",terms:"bog,fen,marsh,mire,moor,muskeg,peatland,quagmire,reedbed,saltmarsh,swamp,tidalflat,wet meadow"},"natural/wood":{name:"Natural Wood",terms:"boreal,forest,forrest,taiga,tree,trees,woodlands,woods"},"network/type/node_network":{name:"Recreational Network Node",terms:"node network,rcn,rwn"},"noexit/yes":{name:"No Exit",terms:"no exit,road end,dead end"},office:{name:"Office",terms:""},"office/administrative":{name:"Administrative Office"},"office/physician":{name:"Physician"},"office/travel_agent":{name:"Travel Agency"},"office/accountant":{name:"Accountant Office",terms:""},"office/adoption_agency":{name:"Adoption Agency",terms:""},"office/advertising_agency":{name:"Advertising Agency",terms:"ad,ad agency,advert agency,advertising,marketing"},"office/architect":{name:"Architect Office",terms:""},"office/association":{name:"Nonprofit Organization Office",terms:"association,non-profit,nonprofit,organization,society"},"office/bail_bond_agent":{name:"Bail Bond Agent",terms:"bail bond dealer,bail bond man,bail bondsman,bail bondsperson"},"office/charity":{name:"Charity Office",terms:"charitable organization"},"office/company":{name:"Corporate Office",terms:""},"office/consulting":{name:"Consultancy Office",terms:"consulting firm office"},"office/coworking":{name:"Coworking Space",terms:"coworking,office"},"office/diplomatic":{name:"Diplomatic Office",terms:""},"office/diplomatic/consulate":{name:"Consulate",terms:""},"office/diplomatic/embassy":{name:"Embassy",terms:""},"office/diplomatic/liaison":{name:"Liaison Office",terms:""},"office/educational_institution":{name:"Educational Institution",terms:""},"office/employment_agency":{name:"Employment Agency",terms:"job"},"office/energy_supplier":{name:"Energy Supplier Office",terms:"electricity,energy company,energy utility,gas utility"},"office/estate_agent":{name:"Real Estate Office",terms:"real estate"},"office/financial_advisor":{name:"Financial Advisor",terms:"401k,inheritance,savings,stocks,retirement,wealth management"},"office/financial":{name:"Financial Office",terms:""},"office/forestry":{name:"Forestry Office",terms:"forest,ranger"},"office/foundation":{name:"Foundation Office",terms:""},"office/government":{name:"Government Office",terms:""},"office/government/prosecutor":{name:"Public Prosecutor's Office",terms:"attorney general,district attorney,prosecution"},"office/government/register_office":{name:"Register Office",terms:"clerk,marriage,death,birth,certificate"},"office/government/tax":{name:"Tax and Revenue Office",terms:"fiscal authorities,revenue office,tax office"},"office/guide":{name:"Tour Guide Office",terms:"dive guide,mountain guide,tour guide"},"office/insurance":{name:"Insurance Office",terms:""},"office/it":{name:"Information Technology Office",terms:"computer,information,software,technology"},"office/lawyer":{name:"Law Office",terms:"advocate,attorney,barrister,counsellor,counselor,defender,lawyer,legal,prosecutor"},"office/lawyer/notary":{name:"Notary Office"},"office/moving_company":{name:"Moving Company Office",terms:"relocation"},"office/newspaper":{name:"Newspaper Office",terms:""},"office/ngo":{name:"NGO Office",terms:"ngo,non government,non-government,organization,organisation"},"office/notary":{name:"Notary Office",terms:"clerk,deeds,estate,signature,wills"},"office/political_party":{name:"Political Party Office",terms:""},"office/private_investigator":{name:"Private Investigator Office",terms:"PI,private eye,private detective"},"office/quango":{name:"Quasi-NGO Office",terms:"ngo,non government,non-government,organization,organisation,quasi autonomous,quasi-autonomous"},"office/religion":{name:"Religious Office",terms:""},"office/research":{name:"Research Office",terms:"R and D,research and development,research lab"},"office/surveyor":{name:"Surveyor Office",terms:""},"office/tax_advisor":{name:"Tax Advisor Office",terms:"tax,tax consultant"},"office/telecommunication":{name:"Telecom Office",terms:"communication,internet service provider,isp,network,telephone,voice"},"office/therapist":{name:"Therapist Office",terms:"therapy"},"office/water_utility":{name:"Water Utility Office",terms:"water board,utility"},"piste/downhill":{name:"Downhill Ski Run",terms:"alpine skiing,piste,ski hill,skiing,snowboarding"},"piste/downhill/halfpipe":{name:"Snowsports Half-Pipe",terms:"ski,alpine,halfpipe,half pipe,snowboard,downhill,piste"},"piste/hike":{name:"Snowshoeing / Winter Hiking Trail",terms:"hike,nordic walking,piste,show shoeing,snowshoe,snowshoeing"},"piste/ice_skate":{name:"Ice Skating Trail",terms:"ice rink,ice track,iceskating,piste,skates"},"piste/nordic":{name:"Cross-Country Ski Trail",terms:"crosscountry,nordic skiing,piste,skate skiing,skiing,xc"},"piste/piste":{name:"Snowsports Trail / Piste",terms:"ski,nordic,crosscountry,downhill,alpine,snowboard,skitour,ski touring,sled,luge,sleigh,sledge,ski-joring,husky,horse,winter hiking,snowshoe,snowshoeing,ice,skating"},"piste/skitour":{name:"Ski Touring Trail",terms:"ski,skitour,crosscountry,ski touring,piste"},"piste/sled":{name:"Sled Run",terms:"bobsled,luge,piste,skeleton,sledge,sleigh,toboggan"},"piste/sleigh":{name:"Sleigh Trail",terms:"dogsledding,husky,horse,piste,sled,sledge,ski-joring,skijoring"},"place/farm":{name:"Farm"},"place/city_block":{name:"City Block",terms:""},"place/city":{name:"City",terms:""},"place/hamlet":{name:"Hamlet",terms:""},"place/island":{name:"Island",terms:"archipelago,atoll,bar,cay,isle,islet,key,reef"},"place/islet":{name:"Islet",terms:"archipelago,atoll,bar,cay,isle,islet,key,reef"},"place/isolated_dwelling":{name:"Isolated Dwelling",terms:""},"place/locality":{name:"Locality",terms:""},"place/neighbourhood":{name:"Neighborhood",terms:"neighbourhood"},"place/plot":{name:"Plot",terms:"tract,land,lot,parcel"},"place/quarter":{name:"Sub-Borough / Quarter",terms:"boro,borough,quarter"},"place/square":{name:"Square",terms:""},"place/suburb":{name:"Borough / Suburb",terms:"boro,borough,quarter"},"place/town":{name:"Town",terms:""},"place/village":{name:"Village",terms:""},"playground/balance_beam":{name:"Play Balance Beam",terms:""},"playground/basket_spinner":{name:"Basket Spinner",terms:"basket rotator"},"playground/basket_swing":{name:"Basket Swing",terms:""},"playground/climbing_frame":{name:"Climbing Frame",terms:""},"playground/cushion":{name:"Bouncy Cushion",terms:""},"playground/horizontal_bar":{name:"Play Horizontal Bar",terms:"chin-up bar,high bar,pull-up bar"},"playground/rocker":{name:"Spring Rider",terms:"spring rocker,springy rocker"},"playground/roundabout":{name:"Play Roundabout",terms:"merry-go-round"},"playground/sandpit":{name:"Sandpit",terms:"sandbox"},"playground/seesaw":{name:"Seesaw",terms:""},"playground/slide":{name:"Slide",terms:""},"playground/structure":{name:"Play Structure",terms:"jungle gym"},"playground/swing":{name:"Swing",terms:""},"playground/zipwire":{name:"Zip Wire",terms:""},point:{name:"Point",terms:"node,other,vertex,vertices"},polling_station:{name:"Temporary Polling Place",terms:"ballot box,ballot drop,democracy,elections,polling place,vote,voting booth,voting machine"},"power/cable/underground":{name:"Underground Power Cable",terms:""},"power/generator":{name:"Power Generator",terms:"hydro,solar,turbine,wind"},"power/generator/method/photovoltaic":{name:"Solar Panel",terms:"photovoltaic module,PV module,sunlight"},"power/generator/source/hydro":{name:"Water Turbine",terms:"dam,generator,francis turbine,hydroelectricity,kaplan turbine,pelton turbine"},"power/generator/source/nuclear":{name:"Nuclear Reactor",terms:"fission,generator,nuclear,nuke,reactor"},"power/generator/source/wind":{name:"Wind Turbine",terms:"generator,turbine,windmill,wind"},"power/line":{name:"Power Line",terms:"electric power transmission line,high voltage line,high tension line"},"power/minor_line":{name:"Minor Power Line",terms:""},"power/plant":{name:"Power Station Grounds",terms:"coal,gas,generat*,hydro,nuclear,power,station"},"power/plant/source/coal":{name:"Coal-Fired Power Plant",terms:"carbon,combustion,fossil fuel,coalfired,power station"},"power/plant/source/gas":{name:"Gas-Fired Power Plant",terms:"carbon,combustion,fossil fuel,gasfired,power station,natural gas"},"power/plant/source/hydro":{name:"Hydroelectric Power Station",terms:"dam,power plant,run-of-the-river,tidal,water turbine"},"power/plant/source/nuclear":{name:"Nuclear Power Plant",terms:"atomic,fission,power station,nuclear reactor"},"power/plant/source/solar":{name:"Solar Farm",terms:"photovoltaic power station,solar panels,solar park,utility-scale solar"},"power/plant/source/wind":{name:"Wind Farm",terms:"offshore wind,wind park,wind power plant,wind power station,wind turbines,windmills"},"power/pole":{name:"Power Pole",terms:""},"power/substation":{name:"Substation",terms:""},"power/switch":{name:"Power Switch",terms:""},"power/tower":{name:"High-Voltage Tower",terms:"power"},"power/transformer":{name:"Transformer",terms:""},"public_transport/platform_point":{name:"Transit Stop / Platform",terms:"platform,public transit,public transportation,transit,transportation"},"public_transport/platform":{name:"Transit Platform",terms:"platform,public transit,public transportation,transit,transportation"},"public_transport/platform/aerialway_point":{name:"Aerialway Stop / Platform"},"public_transport/platform/ferry_point":{name:"Ferry Stop / Platform"},"public_transport/platform/light_rail_point":{name:"Light Rail Stop / Platform"},"public_transport/platform/monorail_point":{name:"Monorail Stop / Platform"},"public_transport/platform/subway_point":{name:"Subway Stop / Platform"},"public_transport/platform/train_point":{name:"Train Stop / Platform"},"public_transport/platform/aerialway":{name:"Aerialway Platform",terms:"aerialway,cable car,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/bus_point":{name:"Bus Stop",terms:"bus,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/bus":{name:"Bus Platform",terms:"bus,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/ferry":{name:"Ferry Platform",terms:"boat,dock,ferry,pier,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/light_rail":{name:"Light Rail Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/platform/monorail":{name:"Monorail Platform",terms:"monorail,platform,public transit,public transportation,rail,transit,transportation"},"public_transport/platform/subway":{name:"Subway Platform",terms:"metro,platform,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/platform/train":{name:"Train Platform",terms:"platform,public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/platform/tram_point":{name:"Tram Stop / Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/platform/tram":{name:"Tram Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/platform/trolleybus_point":{name:"Trolleybus Stop",terms:"bus,electric,platform,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/platform/trolleybus":{name:"Trolleybus Platform",terms:"bus,electric,platform,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/station_aerialway":{name:"Aerialway Station",terms:"aerialway,cable car,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_bus":{name:"Bus Station / Terminal",terms:"bus,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_ferry":{name:"Ferry Station / Terminal",terms:"boat,dock,ferry,pier,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_light_rail":{name:"Light Rail Station",terms:"electric,light rail,public transit,public transportation,rail,station,terminal,track,tram,trolley,transit,transportation"},"public_transport/station_monorail":{name:"Monorail Station",terms:"monorail,public transit,public transportation,rail,station,terminal,transit,transportation"},"public_transport/station_subway":{name:"Subway Station",terms:"metro,public transit,public transportation,rail,station,subway,terminal,track,transit,transportation,underground"},"public_transport/station_train_halt":{name:"Train Station (Halt / Request)",terms:"halt,public transit,public transportation,rail,station,track,train,transit,transportation,whistle stop"},"public_transport/station_train":{name:"Train Station",terms:"public transit,public transportation,rail,station,terminal,track,train,transit,transportation"},"public_transport/station_tram":{name:"Tram Station",terms:"electric,light rail,public transit,public transportation,rail,station,streetcar,terminal,track,tram,trolley,transit,transportation"},"public_transport/station_trolleybus":{name:"Trolleybus Station / Terminal",terms:"bus,electric,public transit,public transportation,station,streetcar,terminal,trackless,tram,trolley,transit,transportation"},"public_transport/station":{name:"Transit Station",terms:"public transit,public transportation,station,terminal,transit,transportation"},"public_transport/stop_area":{name:"Transit Stop Area",terms:""},"public_transport/stop_position_aerialway":{name:"Aerialway Stopping Location",terms:"aerialway,cable car,public transit,public transportation,transit,transportation"},"public_transport/stop_position_bus":{name:"Bus Stopping Location",terms:"bus,public transit,public transportation,transit,transportation"},"public_transport/stop_position_ferry":{name:"Ferry Stopping Location",terms:"boat,dock,ferry,pier,public transit,public transportation,transit,transportation"},"public_transport/stop_position_light_rail":{name:"Light Rail Stopping Location",terms:"electric,light rail,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/stop_position_monorail":{name:"Monorail Stopping Location",terms:"monorail,public transit,public transportation,rail,transit,transportation"},"public_transport/stop_position_subway":{name:"Subway Stopping Location",terms:"metro,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/stop_position_train":{name:"Train Stopping Location",terms:"public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/stop_position_tram":{name:"Tram Stopping Location",terms:"electric,light rail,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/stop_position_trolleybus":{name:"Trolleybus Stopping Location",terms:"bus,electric,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/stop_position":{name:"Transit Stopping Location",terms:"public transit,public transportation,transit,transportation"},"railway/halt":{name:"Train Station (Halt / Request)"},"railway/platform":{name:"Train Platform"},"railway/station":{name:"Train Station"},"railway/tram_stop":{name:"Tram Stopping Position"},"railway/abandoned":{name:"Abandoned Railway",terms:""},"railway/buffer_stop":{name:"Buffer Stop",terms:"stop,halt,buffer"},"railway/construction":{name:"Railway Under Construction",terms:""},"railway/crossing":{name:"Railway Crossing (Path)",terms:"crossing,pedestrian crossing,railroad crossing,level crossing,grade crossing,path through railroad,train crossing"},"railway/derail":{name:"Railway Derailer",terms:"derailer"},"railway/disused":{name:"Disused Railway",terms:""},"railway/funicular":{name:"Funicular",terms:"venicular,cliff railway,cable car,cable railway,funicular railway"},"railway/level_crossing":{name:"Railway Crossing (Road)",terms:"crossing,railroad crossing,level crossing,grade crossing,road through railroad,train crossing"},"railway/light_rail":{name:"Light Rail",terms:"light rail,streetcar,trolley"},"railway/milestone":{name:"Railway Milestone",terms:"milestone,marker"},"railway/miniature":{name:"Miniature Railway",terms:"rideable miniature railway,narrow gauge railway,minimum gauge railway"},"railway/monorail":{name:"Monorail",terms:""},"railway/narrow_gauge":{name:"Narrow Gauge Rail",terms:"narrow gauge railway,narrow gauge railroad"},"railway/rail":{name:"Rail",terms:"rail line,railroad track,train track"},"railway/rail/highspeed":{name:"High-Speed Rail",terms:"bullet train,fast rail,high speed rail,highspeed rail,HSR"},"railway/signal":{name:"Railway Signal",terms:"signal,lights"},"railway/subway_entrance":{name:"Subway Entrance",terms:"metro,transit"},"railway/subway":{name:"Subway",terms:"metro,transit"},"railway/switch":{name:"Railway Switch",terms:"switch,points"},"railway/train_wash":{name:"Train Wash",terms:"wash,clean"},"railway/tram":{name:"Tram",terms:"light rail,streetcar,tram,trolley"},"railway/yard":{name:"Rail Yard",terms:"freight car stop,freight train station,rail freight station,railroad yard,railway yard"},relation:{name:"Relation",terms:""},"route/ferry":{name:"Ferry Route",terms:"boat,merchant vessel,ship,water bus,water shuttle,water taxi"},"seamark/beacon_isolated_danger":{name:"Danger Beacon",terms:"beacon isolated danger,isolated danger beacon,iala"},"seamark/beacon_lateral":{name:"Channel Beacon",terms:"lateral beacon,beacon lateral,cevni,channel marker,iala,lateral mark"},"seamark/buoy_lateral":{name:"Channel Buoy",terms:"lateral buoy,buoy lateral,cevni,channel marker,iala,lateral mark"},"seamark/buoy_lateral/green":{name:"Green Buoy",terms:"lateral buoy,buoy lateral,cevni,channel marker,iala,lateral mark"},"seamark/buoy_lateral/red":{name:"Red Buoy",terms:"lateral buoy,buoy lateral,cevni,channel marker,iala,lateral mark"},"seamark/mooring":{name:"Mooring",terms:"dolphin,pile,bollard,buoy,post"},shop:{name:"Shop",terms:""},"shop/boutique":{name:"Boutique"},"shop/fashion":{name:"Fashion Store"},"shop/fishmonger":{name:"Fishmonger"},"shop/furnace":{name:"Furnace Store"},"shop/vacant":{name:"Vacant Shop"},"shop/agrarian":{name:"Farm Supply Shop",terms:"agricultural inputs,agricultural machines,seeds,pesticides,fertilizer,agricultural tools"},"shop/alcohol":{name:"Liquor Store",terms:"alcohol,beer,booze,wine"},"shop/anime":{name:"Anime / Manga Shop",terms:"manga,japan,cosplay,figurine,dakimakura"},"shop/antiques":{name:"Antiques Shop",terms:""},"shop/appliance":{name:"Appliance Store",terms:"air conditioner,appliance,dishwasher,dryer,freezer,fridge,grill,kitchen,oven,refrigerator,stove,washer,washing machine"},"shop/art":{name:"Art Store",terms:"art*,exhibit*,gallery"},"shop/baby_goods":{name:"Baby Goods Store",terms:""},"shop/bag":{name:"Bag/Luggage Store",terms:"handbag,purse"},"shop/bakery":{name:"Bakery",terms:"bread,cakes,rolls"},"shop/bathroom_furnishing":{name:"Bathroom Furnishing Store",terms:""},"shop/beauty":{name:"Beauty Shop",terms:"spa,salon,tanning"},"shop/beauty/nails":{name:"Nail Salon",terms:"manicure,pedicure"},"shop/beauty/tanning":{name:"Tanning Salon",terms:""},"shop/bed":{name:"Bedding/Mattress Store",terms:""},"shop/beverages":{name:"Beverage Store",terms:"drinks"},"shop/bicycle":{name:"Bicycle Shop",terms:"bike,repair,tricycle,unicycle"},"shop/boat":{name:"Boat Store",terms:"fishing boat,jetski,motorboat,rowboat,sailboat,vessel,watercraft"},"shop/bookmaker":{name:"Bookmaker",terms:"betting,bookie,gamble,gambling,turf accountant"},"shop/books":{name:"Book Store",terms:""},"shop/brewing_supplies":{name:"Brewing Supply Store",terms:"brew shop,homebrew supply store"},"shop/butcher":{name:"Butcher",terms:"chicken,beef,lamb,meat,pork"},"shop/camera":{name:"Camera Equipment Store",terms:"camera,film,lens,photo"},"shop/candles":{name:"Candle Shop",terms:"wax"},"shop/cannabis":{name:"Cannabis Shop",terms:"420,marijuana,pot,reefer,weed"},"shop/car_parts":{name:"Car Parts Store",terms:"automobile,automotive"},"shop/car_repair":{name:"Car Repair Shop",terms:"automobile,automotive,garage,service"},"shop/car":{name:"Car Dealership",terms:"automobile,automotive"},"shop/car/second_hand":{name:"Used Car Dealership",terms:"automobile,automotive"},"shop/caravan":{name:"RV Dealership",terms:"auto,camper,recreational vehicle"},"shop/carpet":{name:"Carpet Store",terms:"rug"},"shop/catalogue":{name:"Catalog Shop",terms:""},"shop/charity":{name:"Charity Store",terms:"thrift,op shop,nonprofit"},"shop/cheese":{name:"Cheese Store",terms:""},"shop/chemist":{name:"Drugstore",terms:"apothecary,beauty,drug store,drugstore,gift,hair,med*,pharmacy,prescription,tooth"},"shop/chocolate":{name:"Chocolate Store",terms:"cocoa"},"shop/clothes":{name:"Clothing Store",terms:"blouses,boutique,bras,clothes,dresses,fashion,pants,shirts,shorts,skirts,slacks,socks,suits,underwear"},"shop/clothes/second_hand":{name:"Secondhand Clothing Store",terms:"blouses,clothes,consignment,dresses,pants,second hand,shirts,shorts,skirts,slacks,suits,used"},"shop/clothes/underwear":{name:"Underwear Store",terms:"boutique,bras,brassieres,briefs,boxers,fashion,lingerie,panties,slips,socks,stockings,underclothes,undergarments,underpants,undies"},"shop/clothes/wedding":{name:"Wedding Clothes Store",terms:"boutique,bridal,bride,bridegroom,bridesmaid,groom,groomsman,tuxedo,wedding dress,wedding gown"},"shop/coffee":{name:"Coffee Store",terms:""},"shop/computer":{name:"Computer Store",terms:"desktop,laptop,hardware,operating system,software"},"shop/confectionery":{name:"Candy Store",terms:"sweet"},"shop/convenience":{name:"Convenience Store",terms:""},"shop/copyshop":{name:"Copy Store",terms:"print,scan"},"shop/cosmetics":{name:"Cosmetics Store",terms:"make-up,makeup"},"shop/country_store":{name:"Country Store",terms:""},"shop/craft":{name:"Arts & Crafts Store",terms:"art*,paint*,frame"},"shop/curtain":{name:"Curtain Store",terms:"drape*,window"},"shop/dairy":{name:"Dairy Store",terms:"milk,egg,cheese"},"shop/deli":{name:"Deli",terms:"lunch,meat,sandwich"},"shop/department_store":{name:"Department Store",terms:""},"shop/doityourself":{name:"DIY Store",terms:""},"shop/doors":{name:"Door Shop",terms:""},"shop/dry_cleaning":{name:"Dry Cleaner",terms:""},"shop/e-cigarette":{name:"E-Cigarette Shop",terms:"electronic,vape,vaping,vapor"},"shop/electrical":{name:"Electrical Equipment Store",terms:"cable,electric,fan,LED,lighting,power,wire"},"shop/electronics":{name:"Electronics Store",terms:"appliance,audio,blueray,camera,computer,dvd,home theater,radio,speaker,tv,video"},"shop/erotic":{name:"Erotic Store",terms:"sex,porn"},"shop/erotic/lgbtq":{name:"LGBTQ+ Erotic Store",terms:"sex,porn"},"shop/fabric":{name:"Fabric Store",terms:"sew"},"shop/farm":{name:"Produce Stand",terms:"baked goods,farm shop,farm stand,fresh food,fruits,greengrocer,organics,vegetables"},"shop/fashion_accessories":{name:"Fashion Accessories Store",terms:"bag,cologne,fragrance,hat,jewellery,purfume,purse,scarf,sunglasses,umbrella,wallet,watch"},"shop/fireplace":{name:"Fireplace Store",terms:"fireplace,stove,masonry heater"},"shop/fishing":{name:"Fishing Shop",terms:"bait,fishing line,flies,fly,lure,reel,rod,tackle"},"shop/flooring":{name:"Flooring Supply Shop",terms:"tile"},"shop/florist":{name:"Florist",terms:"flower"},"shop/frame":{name:"Framing Shop",terms:"art*,paint*,photo*,frame"},"shop/frozen_food":{name:"Frozen Food",terms:""},"shop/fuel":{name:"Fuel Shop",terms:""},"shop/funeral_directors":{name:"Funeral Home",terms:"undertaker,memorial home"},"shop/furniture":{name:"Furniture Store",terms:"chair,sofa,table"},"shop/games":{name:"Tabletop Game Store",terms:"board game,card game,dice game,game shop,live action role-playing game,miniatures wargame,strategy game"},"shop/garden_centre":{name:"Garden Center",terms:"landscape,mulch,shrub,tree"},"shop/gas":{name:"Bottled Gas Shop",terms:"cng,lpg,natural gas,propane,refill,tank"},"shop/general":{name:"General Store",terms:"village shop"},"shop/gift":{name:"Gift Shop",terms:"souvenir"},"shop/greengrocer":{name:"Greengrocer",terms:"fruit,produce,vegetable"},"shop/hairdresser_supply":{name:"Hairdresser Supply Store",terms:"barber,shampoo,conditioner"},"shop/hairdresser":{name:"Hairdresser",terms:"barber"},"shop/hardware":{name:"Hardware Store",terms:""},"shop/health_food":{name:"Health Food Shop",terms:"wholefood,vitamins,vegetarian,vegan"},"shop/hearing_aids":{name:"Hearing Aids Store",terms:""},"shop/herbalist":{name:"Herbalist",terms:""},"shop/hifi":{name:"Hifi Store",terms:"audio,hi-fi,high fidelity,stereo,video"},"shop/hobby":{name:"Hobby Shop",terms:"manga,figurine,model"},"shop/houseware":{name:"Houseware Store",terms:"home,household,kitchenware"},"shop/hunting":{name:"Hunting Shop",terms:"arrows,bows,bullets,crossbows,rifles,traps"},"shop/interior_decoration":{name:"Interior Decoration Store",terms:""},"shop/jewelry":{name:"Jewelry Store",terms:"bracelet,diamond,earrings,gem,gold,jeweler,jewellery,jeweller,necklace,pins,ring,silver"},"shop/kiosk":{name:"Kiosk",terms:""},"shop/kitchen":{name:"Kitchen Design Store",terms:"cabinets,countertops,sinks"},"shop/laundry":{name:"Laundry",terms:""},"shop/laundry/self_service":{name:"Self-Service Laundry",terms:"Coin Laundry,Laundromat,Coin Wash,Launderette,Washateria"},"shop/leather":{name:"Leather Store",terms:""},"shop/lighting":{name:"Lighting Store",terms:"fluorescent lighting,lamps,LEDs,light fixtures,lightbulbs"},"shop/locksmith":{name:"Locksmith",terms:"key,lockpick"},"shop/lottery":{name:"Lottery Shop",terms:"lotto tickets,gamble,gambling,scratch-offs"},"shop/mall":{name:"Mall",terms:"shopping"},"shop/massage":{name:"Massage Shop",terms:""},"shop/medical_supply":{name:"Medical Supply Store",terms:""},"shop/military_surplus":{name:"Military Surplus Store",terms:"armor,army-navy store,army surplus,navy surplus,tactical gear,war surplus shop,weapons"},"shop/mobile_phone":{name:"Mobile Phone Store",terms:""},"shop/money_lender":{name:"Money Lender",terms:""},"shop/motorcycle_repair":{name:"Motorcycle Repair Shop",terms:"auto,bike,garage,motorcycle,repair,service"},"shop/motorcycle":{name:"Motorcycle Dealership",terms:"bike"},"shop/music":{name:"Music Store",terms:"tape casettes,CDs,compact discs,vinyl records"},"shop/musical_instrument":{name:"Musical Instrument Store",terms:"guitar"},"shop/newsagent":{name:"Newspaper/Magazine Shop",terms:""},"shop/nutrition_supplements":{name:"Nutrition Supplements Store",terms:"health,supplement,vitamin"},"shop/optician":{name:"Optician",terms:"eye,glasses"},"shop/organic":{name:"Organic Goods Store",terms:""},"shop/outdoor":{name:"Outdoors Store",terms:"camping,climbing,hiking,outfitter,outdoor equipment,outdoor supplies"},"shop/outpost":{name:"Online Retailer Outpost",terms:"online,pick up,pickup"},"shop/paint":{name:"Paint Store",terms:""},"shop/party":{name:"Party Supply Store",terms:"balloons,costumes,decorations,invitations"},"shop/pastry":{name:"Pastry Shop",terms:"patisserie,cake shop,cakery"},"shop/pawnbroker":{name:"Pawn Shop",terms:""},"shop/perfumery":{name:"Perfume Store",terms:"cologne,fragrance,purfume"},"shop/pet_grooming":{name:"Pet Grooming Store",terms:"cat,dog"},"shop/pet":{name:"Pet Store",terms:"animal,cat,dog,fish,kitten,puppy,reptile"},"shop/photo":{name:"Photography Store",terms:"camera,film,lens,photo"},"shop/pottery":{name:"Pottery Store",terms:"ceramic,pot,vase"},"shop/printer_ink":{name:"Printer Ink Store",terms:"copier ink,fax ink,ink cartridges,toner"},"shop/psychic":{name:"Psychic",terms:"astrology,crystal ball,divination,fortune teller,seer,spirit"},"shop/pyrotechnics":{name:"Fireworks Store",terms:"fireworks"},"shop/radiotechnics":{name:"Radio/Electronic Component Store",terms:"antenna,transistor"},"shop/religion":{name:"Religious Store",terms:""},"shop/rental":{name:"Rental Shop",terms:""},"shop/scuba_diving":{name:"Scuba Diving Shop",terms:"diving,scuba"},"shop/seafood":{name:"Seafood Shop",terms:"fishmonger"},"shop/second_hand":{name:"Consignment/Thrift Store",terms:"secondhand,second hand,resale,thrift,used"},"shop/sewing":{name:"Sewing Supply Shop",terms:"haberdashery"},"shop/shoes":{name:"Shoe Store",terms:"boots,cleats,clogs,heels,loafers,oxfords,sneakers"},"shop/spices":{name:"Spice Shop",terms:"chili,cinnamon,curry,ginger,herbs,pepper,saffron,salt,spice store,spices,turmeric,wasabi"},"shop/sports":{name:"Sporting Goods Store",terms:"athletics"},"shop/stationery":{name:"Stationery Store",terms:"card,paper"},"shop/storage_rental":{name:"Storage Rental",terms:"garages"},"shop/supermarket":{name:"Supermarket",terms:"grocery,store,shop"},"shop/swimming_pool":{name:"Pool Supply Store",terms:"hot tub equipment store,hot tub maintenance store,hot tub supply store,pool shop,pool store,swimming pool equipment store,swimming pool installation store,swimming pool maintenance store,swimming pool supply shop"},"shop/tailor":{name:"Tailor",terms:"clothes,suit"},"shop/tattoo":{name:"Tattoo Parlor",terms:"ink"},"shop/tea":{name:"Tea Store",terms:""},"shop/telecommunication":{name:"Telecom Retail Store",terms:"communication,internet service provider,isp,network,telephone,voice"},"shop/ticket":{name:"Ticket Seller",terms:"box office"},"shop/tiles":{name:"Tile Shop",terms:""},"shop/tobacco":{name:"Tobacco Shop",terms:"cigarettes,cigars"},"shop/tool_hire":{name:"Tool Rental",terms:""},"shop/toys":{name:"Toy Store",terms:"games"},"shop/trade":{name:"Trade Shop",terms:""},"shop/travel_agency":{name:"Travel Agency",terms:"cruises,flights,hotels,tickets,travel packages"},"shop/tyres":{name:"Tire Store",terms:""},"shop/vacuum_cleaner":{name:"Vacuum Cleaner Store",terms:""},"shop/variety_store":{name:"Variety Store",terms:""},"shop/video_games":{name:"Video Game Store",terms:""},"shop/video":{name:"Video Store",terms:"DVD,VHS,video casette"},"shop/watches":{name:"Watches Shop",terms:""},"shop/water_sports":{name:"Watersport/Swim Shop",terms:""},"shop/water":{name:"Drinking Water Shop",terms:""},"shop/weapons":{name:"Weapon Shop",terms:"ammo,gun,knife,knives"},"shop/wholesale":{name:"Wholesale Store",terms:"warehouse club,cash and carry"},"shop/window_blind":{name:"Window Blind Store",terms:""},"shop/wine":{name:"Wine Shop",terms:""},"telecom/data_center":{name:"Data Center",terms:"computer systems storage,information technology,server farm,the cloud,telecommunications"},"tourism/alpine_hut":{name:"Alpine Hut",terms:"cabin,climbing hut,lodge,lodging,overnight accommodations,wilderness hut"},"tourism/apartment":{name:"Guest Apartment / Condo",terms:"bnb,holiday rental,lodging,overnight accommodations,vacation rental"},"tourism/aquarium":{name:"Aquarium",terms:"fish,sea,water"},"tourism/artwork":{name:"Artwork",terms:"mural,sculpture,statue"},"tourism/artwork/bust":{name:"Bust",terms:"figure"},"tourism/artwork/graffiti":{name:"Graffiti",terms:"Street Artwork,Guerilla Artwork,Graffiti Artwork"},"tourism/artwork/installation":{name:"Art Installation",terms:"interactive art,intervention art,modern art"},"tourism/artwork/mural":{name:"Mural",terms:"fresco,wall painting"},"tourism/artwork/sculpture":{name:"Sculpture",terms:"statue,figure,carving"},"tourism/artwork/statue":{name:"Statue",terms:"sculpture,figure,carving"},"tourism/attraction":{name:"Tourist Attraction",terms:""},"tourism/camp_pitch":{name:"Camp Pitch",terms:"tent,rv"},"tourism/camp_site":{name:"Campground",terms:"caravans,camp ground,camp pitch,camp site,campers,campground,campsite,mobile homes,recreational vehicles,rv,tenting"},"tourism/camp_site/backcountry":{name:"Backcountry Camping Area",terms:"alpine camping,backpacking site,backwoods camping,camp ground,camp pitch,camp site,campground,campsite,informal camping,primitive camping"},"tourism/camp_site/group_only":{name:"Group Camping Area",terms:"camp ground,camp pitch,camp site,campground,campsite,scout camping,youth camping"},"tourism/caravan_site":{name:"RV Park",terms:"Motor Home,Camper"},"tourism/chalet":{name:"Holiday Cottage",terms:"chalet,holiday cabin,holiday cottage,holiday home,lodge,lodging,overnight accommodations,vacation cabin,vacation home"},"tourism/gallery":{name:"Art Gallery",terms:"art*,exhibit*,paint*,photo*,sculpt*"},"tourism/guest_house":{name:"Guest House",terms:"b & b,b and b,B&B,Bed and Breakfast,bnb,lodging,overnight accommodations"},"tourism/hostel":{name:"Hostel",terms:"bunk beds,dormitories,dorms,lodging,overnight accommodations"},"tourism/hotel":{name:"Hotel",terms:"concierge,lodge,lodging,overnight accommodations"},"tourism/information":{name:"Information",terms:""},"tourism/information/board":{name:"Information Board",terms:""},"tourism/information/guidepost":{name:"Guidepost",terms:"signpost"},"tourism/information/map":{name:"Map",terms:""},"tourism/information/office":{name:"Tourist Information Office",terms:""},"tourism/information/route_marker":{name:"Trail Marker",terms:"cairn,painted blaze,route flag,route marker,stone pile,trail blaze,trail post,way marker"},"tourism/information/terminal":{name:"Information Terminal",terms:""},"tourism/motel":{name:"Motel",terms:"lodging,motor hotel,overnight accommodations"},"tourism/museum":{name:"Museum",terms:"art*,exhibit*,gallery,foundation,hall,institution,paint*,photo*,sculpt*"},"tourism/museum/history":{name:"History Museum",terms:"artifacts,dioramas,exhibits,exhibitions,foundation,hall,institution"},"tourism/picnic_site":{name:"Picnic Site",terms:"camp"},"tourism/theme_park":{name:"Theme Park",terms:""},"tourism/trail_riding_station":{name:"Trail Riding Station",terms:""},"tourism/viewpoint":{name:"Viewpoint",terms:""},"tourism/wilderness_hut":{name:"Wilderness Hut",terms:"alpine hut,cabin,backcountry hut,bothy,lodge,lodging,overnight accommodations,sleeping shelter,wilderness hut"},"tourism/zoo":{name:"Zoo",terms:"animal"},"tourism/zoo/petting":{name:"Petting Zoo",terms:"Children's Zoo,Children's Farm,Petting Farm,farm animals"},"tourism/zoo/safari":{name:"Safari Park",terms:"Drive-Through Zoo,Drive-In Zoo"},"tourism/zoo/wildlife":{name:"Wildlife Park",terms:"indigenous animals"},traffic_calming:{name:"Traffic Calming",terms:"bump,hump,slow,speed"},"traffic_calming/bump":{name:"Speed Bump",terms:"hump,speed,slow"},"traffic_calming/chicane":{name:"Traffic Chicane",terms:"driveway link,speed,slow"},"traffic_calming/choker":{name:"Traffic Choker",terms:"speed,slow"},"traffic_calming/cushion":{name:"Speed Cushion",terms:"bump,hump,speed,slow"},"traffic_calming/dip":{name:"Dip",terms:"speed,slow"},"traffic_calming/hump":{name:"Speed Hump",terms:"bump,speed,slow"},"traffic_calming/island":{name:"Traffic Island",terms:"circle,roundabout,slow"},"traffic_calming/rumble_strip":{name:"Rumble Strip",terms:"audible lines,sleeper lines,growlers"},"traffic_calming/table":{name:"Speed Table",terms:"flat top,hump,speed,slow"},traffic_sign_vertex:{name:"Traffic Sign",terms:"road,highway"},traffic_sign:{name:"Traffic Sign",terms:"road,highway"},"traffic_sign/city_limit_vertex":{name:"City Limit Sign",terms:"town,village,hamlet,boundary,edge,border,road,highway"},"traffic_sign/city_limit":{name:"City Limit Sign",terms:"town,village,hamlet,boundary,edge,border,road,highway"},"traffic_sign/maxspeed_vertex":{name:"Speed Limit Sign",terms:"max speed,maximum speed,road,highway"},"traffic_sign/maxspeed":{name:"Speed Limit Sign",terms:"max speed,maximum speed,road,highway"},"type/multipolygon":{name:"Multipolygon"},"type/boundary":{name:"Boundary",terms:""},"type/boundary/administrative":{name:"Administrative Boundary",terms:""},"type/connectivity":{name:"Lane Connectivity",terms:""},"type/enforcement":{name:"Enforcement",terms:""},"type/enforcement/maxspeed":{name:"Speed Limit Enforcement",terms:"maxspeed,radar,speed camera"},"type/public_transport/stop_area_group":{name:"Transit Stop Area Group",terms:""},"type/restriction":{name:"Restriction",terms:""},"type/restriction/no_left_turn":{name:"No Left Turn",terms:""},"type/restriction/no_right_turn":{name:"No Right Turn",terms:""},"type/restriction/no_straight_on":{name:"No Straight On",terms:""},"type/restriction/no_u_turn":{name:"No U-turn",terms:""},"type/restriction/only_left_turn":{name:"Only Left Turn",terms:""},"type/restriction/only_right_turn":{name:"Only Right Turn",terms:""},"type/restriction/only_straight_on":{name:"Only Straight On",terms:""},"type/restriction/only_u_turn":{name:"Only U-turn",terms:""},"type/route_master":{name:"Route Master",terms:""},"type/route":{name:"Route",terms:""},"type/route/bicycle":{name:"Cycle Route",terms:""},"type/route/bus":{name:"Bus Route",terms:""},"type/route/detour":{name:"Detour Route",terms:""},"type/route/ferry":{name:"Ferry Route",terms:""},"type/route/foot":{name:"Foot Route",terms:""},"type/route/hiking":{name:"Hiking Route",terms:""},"type/route/horse":{name:"Riding Route",terms:""},"type/route/light_rail":{name:"Light Rail Route",terms:""},"type/route/monorail":{name:"Monorail Route",terms:""},"type/route/pipeline":{name:"Pipeline Route",terms:""},"type/route/piste":{name:"Piste/Ski Route",terms:""},"type/route/power":{name:"Power Route",terms:""},"type/route/road":{name:"Road Route",terms:""},"type/route/subway":{name:"Subway Route",terms:""},"type/route/train":{name:"Train Route",terms:""},"type/route/tram":{name:"Tram Route",terms:""},"type/site":{name:"Site",terms:""},"type/waterway":{name:"Waterway",terms:""},"waterway/riverbank":{name:"Riverbank"},"waterway/boatyard":{name:"Boatyard",terms:""},"waterway/canal":{name:"Canal",terms:""},"waterway/canal/lock":{name:"Canal Lock",terms:""},"waterway/dam":{name:"Dam",terms:""},"waterway/ditch":{name:"Ditch",terms:""},"waterway/dock":{name:"Wet Dock / Dry Dock",terms:"boat,ship,vessel,marine"},"waterway/drain":{name:"Drain",terms:""},"waterway/fish_pass":{name:"Fish Pass",terms:"eel ladder,eel pass,fish ladder,fish migration,fish passage,fish siphon,fish steps,fish way,fishladder,fishpass,fishsteps,fishway"},"waterway/fuel":{name:"Marine Fuel Station",terms:"petrol,gas,diesel,boat"},"waterway/lock_gate":{name:"Lock Gate",terms:"canal"},"waterway/milestone":{name:"Waterway Milestone",terms:"milestone,marker"},"waterway/river":{name:"River",terms:"beck,branch,brook,course,creek,estuary,rill,rivulet,run,runnel,stream,tributary,watercourse"},"waterway/sanitary_dump_station":{name:"Marine Toilet Disposal",terms:"Boat,Watercraft,Sanitary,Dump Station,Pumpout,Pump out,Elsan,CDP,CTDP,Chemical Toilet"},"waterway/stream_intermittent":{name:"Intermittent Stream",terms:"arroyo,beck,branch,brook,burn,course,creek,drift,flood,flow,gully,run,runnel,rush,spate,spritz,tributary,wadi,wash,watercourse"},"waterway/stream":{name:"Stream",terms:"beck,branch,brook,burn,course,creek,current,drift,flood,flow,freshet,race,rill,rindle,rivulet,run,runnel,rush,spate,spritz,surge,tide,torrent,tributary,watercourse"},"waterway/tidal_channel":{name:"Tidal Channel",terms:"coastal,pill,intertidal,mangroves,marine,salt marsh,tidal creek,tidal flat,tidal inlet,waterway"},"waterway/water_point":{name:"Marine Drinking Water",terms:"water faucet,water point,water tap,water source,water spigot"},"waterway/waterfall":{name:"Waterfall",terms:"fall"},"waterway/weir":{name:"Weir",terms:"low-head dam,low-rise dam,wier"}}},imagery:{AGIV:{attribution:{text:"© agentschap Informatie Vlaanderen"},name:"AIV Flanders most recent aerial imagery"},AGIV10cm:{attribution:{text:"© agentschap Informatie Vlaanderen"},name:"AIV Flanders 2013-2015 aerial imagery 10cm"},AGIVFlandersGRB:{attribution:{text:"© agentschap Informatie Vlaanderen"},name:"AIV Flanders GRB"},AIV_DHMV_II_HILL_25cm:{attribution:{text:"© agentschap Informatie Vlaanderen"},name:"AIV Digitaal Hoogtemodel Vlaanderen II, multidirectionale hillshade 0,25 m"},AIV_DHMV_II_SVF_25cm:{attribution:{text:"© agentschap Informatie Vlaanderen"},name:"AIV Digitaal Hoogtemodel Vlaanderen II, Skyview factor 0,25 m"},Bing:{description:"Satellite and aerial imagery.",name:"Bing aerial imagery"},EOXAT2018CLOUDLESS:{attribution:{text:"Sentinel-2 cloudless - https://s2maps.eu by EOX IT Services GmbH (Contains modified Copernicus Sentinel data 2017 & 2018)"},description:"Post-processed Sentinel Satellite imagery.",name:"eox.at 2018 cloudless"},EsriWorldImagery:{attribution:{text:"Terms & Feedback"},description:"Esri world imagery.",name:"Esri World Imagery"},EsriWorldImageryClarity:{attribution:{text:"Terms & Feedback"},description:"Esri archive imagery that may be clearer and more accurate than the default layer.",name:"Esri World Imagery (Clarity) Beta"},MAPNIK:{attribution:{text:"© OpenStreetMap contributors, CC-BY-SA"},description:"The default OpenStreetMap layer.",name:"OpenStreetMap (Standard)"},Mapbox:{attribution:{text:"Terms & Feedback"},description:"Satellite and aerial imagery.",name:"Mapbox Satellite"},"OSM_Inspector-Addresses":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Addresses"},"OSM_Inspector-Geometry":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Geometry"},"OSM_Inspector-Highways":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Highways"},"OSM_Inspector-Multipolygon":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Area"},"OSM_Inspector-Places":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Places"},"OSM_Inspector-Routing":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Routing"},"OSM_Inspector-Tagging":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Tagging"},SPW_ORTHO_LAST:{name:"SPW(allonie) most recent aerial imagery"},SPW_PICC:{name:"SPW(allonie) PICC numerical imagery"},"US-TIGER-Roads-2014":{description:"At zoom level 16+, public domain map data from the US Census. At lower zooms, only changes since 2006 minus changes already incorporated into OpenStreetMap",name:"TIGER Roads 2014"},"US-TIGER-Roads-2017":{description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",name:"TIGER Roads 2017"},"US-TIGER-Roads-2018":{description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",name:"TIGER Roads 2018"},"US-TIGER-Roads-2019":{description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",name:"TIGER Roads 2019"},"USDA-NAIP":{description:"The most recent year of DOQQs from the National Agriculture Imagery Program (NAIP) for each state in the contiguous United States.",name:"National Agriculture Imagery Program"},US_Forest_Service_roads_overlay:{description:"Highway: Green casing = unclassified. Brown casing = track. Surface: gravel = light brown fill, Asphalt = black, paved = gray, ground =white, concrete = blue, grass = green. Seasonal = white bars",name:"U.S. Forest Roads Overlay"},UrbISOrtho2016:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2016"},UrbISOrtho2017:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2017"},UrbISOrtho2018:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2018"},UrbISOrtho2019:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2019"},UrbisAdmFR:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbisAdm FR"},UrbisAdmNL:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbisAdm NL"},"Waymarked_Trails-Cycling":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Cycling"},"Waymarked_Trails-Hiking":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Hiking"},"Waymarked_Trails-MTB":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: MTB"},"Waymarked_Trails-Skating":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Skating"},"Waymarked_Trails-Winter_Sports":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Winter Sports"},"basemap.at":{attribution:{text:"basemap.at"},description:"Basemap of Austria, based on government data.",name:"basemap.at"},"basemap.at-orthofoto":{attribution:{text:"basemap.at"},description:"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery.",name:"basemap.at Orthofoto"},"basemap.at-overlay":{attribution:{text:"basemap.at"},description:"Annotation overlay provided by basemap.at.",name:"basemap.at Overlay"},"basemap.at-surface":{attribution:{text:"basemap.at"},description:"Surface layer provided by basemap.at.",name:"basemap.at Surface"},"basemap.at-terrain":{attribution:{text:"basemap.at"},description:"Terrain layer provided by basemap.at.",name:"basemap.at Terrain"},"eufar-balaton":{attribution:{text:"EUFAR Balaton ortofotó 2010"},description:"1940 geo-tagged photography from Balaton Limnological Institute.",name:"EUFAR Balaton orthophotos"},"finds.jp_KBN_2500":{attribution:{text:"GSI KIBAN 2500"},description:"GSI Kiban 2500 via finds.jp. Good for tracing, but a bit older.",name:"Japan GSI KIBAN 2500"},"gothenburg-citymap":{attribution:{text:"© Gothenburg municipality, CC0"},description:"The city map is an overview map that describes Gothenburg. It contains general information about land, communications, hydrography, buildings, address numbers and street names, administrative division and other orientation text.",name:"Gothenburg City map"},"gsi.go.jp":{attribution:{text:"GSI Japan"},description:"Japan GSI ortho Imagery. Usually better than bing, but a bit older.",name:"Japan GSI ortho Imagery"},"gsi.go.jp_airphoto":{attribution:{text:"GSI Japan"},description:"Japan GSI airphoto Imagery. Not fully orthorectified, but a bit newer and/or differently covered than GSI ortho Imagery.",name:"Japan GSI airphoto Imagery"},"gsi.go.jp_seamlessphoto":{attribution:{text:"GSI Japan seamless photo"},description:"Japan GSI seamlessphoto Imagery. The collection of latest imageries of GSI ortho, airphoto, post disaster and others.",name:"Japan GSI seamlessphoto Imagery"},"gsi.go.jp_std_map":{attribution:{text:"GSI Japan"},description:"Japan GSI Standard Map. Widely covered.",name:"Japan GSI Standard Map"},"helsingborg-orto":{attribution:{text:"© Helsingborg municipality"},description:"Orthophotos from the municipality of Helsingborg 2016, public domain",name:"Helsingborg Orthophoto"},"kalmar-orto-2014":{attribution:{text:"© Kalmar municipality"},description:"Orthophotos for the north coast of the municipality of Kalmar 2014",name:"Kalmar North Orthophoto 2014"},"kalmar-orto-2016":{attribution:{text:"© Kalmar municipality"},description:"Orthophotos for the south coast of the municipality of Kalmar 2016",name:"Kalmar South Orthophoto 2016"},"kalmar-orto-2018":{attribution:{text:"© Kalmar municipality"},description:"Orthophotos for urban areas of the municipality of Kalmar 2018",name:"Kalmar Urban Orthophoto 2018"},kelkkareitit:{attribution:{text:"© Kelkkareitit.fi"},description:"Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)",name:"Nordic snowmobile overlay"},"lantmateriet-orto1960":{attribution:{text:"© Lantmäteriet, CC0"},description:"Mosaic of Swedish orthophotos from the period 1955–1965. Older and younger pictures may occur.",name:"Lantmäteriet Historic Orthophoto 1960"},"lantmateriet-orto1975":{attribution:{text:"© Lantmäteriet, CC0"},description:"Mosaic of Swedish orthophotos from the period 1970–1980. Is under construction.",name:"Lantmäteriet Historic Orthophoto 1975"},"lantmateriet-topowebb":{attribution:{text:"© Lantmäteriet, CC0"},description:"Topographic map of Sweden 1:50 000",name:"Lantmäteriet Topographic Map"},"linkoping-orto":{attribution:{text:"© Linköping municipality"},description:"Orthophotos from the municipality of Linköping 2010, open data",name:"Linköping Orthophoto"},mapbox_locator_overlay:{attribution:{text:"Terms & Feedback"},description:"Shows major features to help orient you.",name:"Locator Overlay"},openpt_map:{attribution:{text:"© OpenStreetMap contributors, CC-BY-SA"},name:"OpenPT Map (overlay)"},"osm-gps":{attribution:{text:"© OpenStreetMap contributors"},description:"Public GPS traces uploaded to OpenStreetMap.",name:"OpenStreetMap GPS traces"},"osm-mapnik-black_and_white":{attribution:{text:"© OpenStreetMap contributors, CC-BY-SA"},name:"OpenStreetMap (Standard Black & White)"},"osm-mapnik-german_style":{attribution:{text:"© OpenStreetMap contributors, CC-BY-SA"},name:"OpenStreetMap (German Style)"},"osmse-ekonomiska":{attribution:{text:"© Lantmäteriet"},description:"Scan of \"Economic maps\" ca. 1950–1980",name:"Lantmäteriet Economic Map 1950–1980"},qa_no_address:{attribution:{text:"Simon Poole, Data ©OpenStreetMap contributors"},name:"QA No Address"},skobbler:{attribution:{text:"© Tiles: skobbler Map data: OpenStreetMap contributors"},name:"skobbler"},skoterleder:{attribution:{text:"© Skoterleder.org"},description:"Snowmobile trails",name:"Snowmobile map Sweden"},"stamen-terrain-background":{attribution:{text:"Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under ODbL"},name:"Stamen Terrain"},"stockholm-orto":{attribution:{text:"© Stockholm municipality, CC0"},description:"Orthophotos from the municipality of Stockholm 2016, CC0 license",name:"Stockholm Orthophoto"},"tf-cycle":{attribution:{text:"Maps © Thunderforest, Data © OpenStreetMap contributors"},name:"Thunderforest OpenCycleMap"},"tf-landscape":{attribution:{text:"Maps © Thunderforest, Data © OpenStreetMap contributors"},name:"Thunderforest Landscape"},"trafikverket-baninfo":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish railway network, including sidings",name:"Trafikverket Railway Network"},"trafikverket-baninfo-option":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish railway network with several options for map layers",name:"Trafikverket Railway Network options"},"trafikverket-vagnat":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish NVDB road network",name:"Trafikverket Road Network"},"trafikverket-vagnat-extra":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish NVDB extra details: Highway reference, traffic calming, rest area, bus stop, bridge, tunnel, speed camera",name:"Trafikverket Road Network extra"},"trafikverket-vagnat-navn":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish NVDB street names",name:"Trafikverket Street Names"},"trafikverket-vagnat-option":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish NVDB road network with several options for map layers",name:"Trafikverket Road Network options"}},community:{"Bahia-telegram":{name:"OpenStreetMap Bahia Telegram Group",description:"Join the OpenStreetMap Bahia community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"Bay-Area-OpenStreetMappers":{name:"Bay Area OpenStreetMappers",description:"Improve OpenStreetMap in the Bay Area",extendedDescription:"This group is about growing the OpenStreetMap community here in the Bay Area. Our events are open to everyone, from open source enthusiasts, cyclists, GIS professionals, geocachers, and beyond. Anyone and everyone who is interested in maps, map making and free map data is welcome to join our group as well as attend our events."},"Central-Pennsylvania-OSM":{name:"Central Pennsylvania OSM",description:"Online mapping community based out of State College, PA"},"Code-for-San-Jose-Slack":{name:"Code for San Jose Slack",description:"All are welcome! Sign up at {signupUrl}, then join the #osm channel."},"DF-telegram":{name:"OpenStreetMap Brasília Telegram Group",description:"Join the OpenStreetMap Brasília community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"Dallas-Fort-Worth-OSM":{name:"Dallas-Fort Worth OSM",description:"The OpenStreetMap user group for Dallas-Fort Worth",extendedDescription:"Dallas, Fort Worth, and all the cities in between are abounding with creative and tech-savvy people. The vision for this usergroup is to find new ways to use the amazing resource of OSM."},"Galicia-Telegram":{name:"OpenStreetMap Galicia Telegram",description:"OpenStreetMap Telegram for Galicia"},"Galicia-Twitter":{name:"OpenStreetMap Galicia Twitter",description:"Follow us on Twitter at {url}"},GeoPhilly:{name:"GeoPhilly",description:"Meetup for map enthusiasts in the Philadelphia area",extendedDescription:"GeoPhilly unites developers, geographers, data geeks, open source enthusiasts, civic hackers and map addicts in our shared love of maps and the stories they tell. If you use maps as part of your work or just want to learn more, this is the meetup for you!  Our events aim to be open, friendly, educational and social and range from happy hours to lightning talks or even workshops. Come create a diverse, inspiring geospatial community in the Philadelphia with us!"},"MapColabora-mailinglist":{name:"Mapeado Colaborativo / Geoinquietos Zaragoza",description:"Mapeado Colaborativo / Geoinquietos Zaragoza Mailing list"},"MapColabora-meetup":{name:"Mapeado Colaborativo / Geoinquietos Zaragoza",description:"Mapeado Colaborativo / Geoinquietos Zaragoza Meetup page"},"MapColabora-twitter":{name:"Mapeado Colaborativo / Geoinquietos Zaragoza",description:"Mapeado Colaborativo / Geoinquietos Zaragoza Twitter Account"},MapMinnesota:{name:"MapMinnesota",description:"Mappers and OpenStreetMap enthusiasts in the Twin Cities area",extendedDescription:"Connecting OpenStreetMap enthusiasts in Minnesota and the Twin Cities!"},"Mapping-DC-meetup":{name:"Mapping DC",description:"Improve OpenStreetMap in the DC area",extendedDescription:"We are a group of volunteer mappers who aim to improve the OpenStreetMap in the DC area. We also aim to teach others about the OSM ecosystem, data analytics, cartography, and GIS. We gather every other month at meetups to focus on one area of our city."},MappingWR:{name:"MappingWR",description:"Making low carbon routes around Waterloo Region easy to find."},"Maptime-Bogota":{name:"Maptime Bogotá",description:"We're a group of mappers interested in mapping in OpenStreetMap around Bogotá.",extendedDescription:"Learn to collect data in the field and digitize onto OpenStreetMap.  It is not necessary to have previous knowledge! You just need the desire to participate, learn, and have fun."},"Maptime-ME-meetup":{name:"MaptimeME",description:"Mappers and OpenStreetMap users, around Portland, ME",extendedDescription:"Maptime is, rather literally, time for mapmaking.  Our mission is to open the doors of cartographic possibility to anyone interested by creating a time and space for collaborative learning, exploration, and map creation using mapping tools and technologies."},"Maptime-Oceania-Slack":{name:"Maptime Oceania Slack",description:"Sign up at {signupUrl}"},"MaptimeHRVA-twitter":{name:"MaptimeHRVA Twitter",description:"Follow us on Twitter at {url}"},"Nottingham-OSM-pub-meetup":{name:"East Midlands (Nottingham) Monthly pub meet-up",description:"Social gathering for East Midlands mappers and users",extendedDescription:"A group have been meeting since March 2011, initially in Nottingham, and, more recently in Derby, and from time to time elsewhere in the East Midlands. These are social gatherings, but are an excellent place to come and ask specific questions about OSM either in the area or in general. In the summer months we usually do some light mapping for an hour in the vicinity of our meeting place. The group as a whole has a special interest in mapping public rights of way and from time to time has mapping meetings for this purpose."},"OSM-AR-facebook":{name:"OpenStreetMap Argentina Facebook",description:"Join the OpenStreetMap Argentina community on Facebook",extendedDescription:"News from the local community"},"OSM-AR-forum":{name:"OpenStreetMap Argentina web forum",description:"Join the OpenStreetMap Argentina web forum",extendedDescription:"Ideal for long or important discussions. Slow response time."},"OSM-AR-irc":{name:"OpenStreetMap Argentina IRC",description:"Join #osm-ar on irc.oftc.net (port 6667)",extendedDescription:"You may find the most geeky user in the community."},"OSM-AR-mailinglist":{name:"Talk-ar Mailing List",description:"Historic mailing list. Almost unused today."},"OSM-AR-telegram":{name:"OpenStreetMap Argentina Telegram",description:"Join the OpenStreetMap Argentina community on Telegram",extendedDescription:"The most active channel in the community, ideal for chatting and getting answers to your questions instantly. Everyone is welcome!"},"OSM-AR-twitter":{name:"OpenStreetMap Argentina Twitter",description:"Follow us on Twitter at {url}",extendedDescription:"News from the local community and OpenStreetMap in general."},"OSM-Asia-mailinglist":{name:"OpenStreetMap Asia Mailinglist",description:"Talk-asia is the official Mailinglist for Asian Community"},"OSM-BGD-facebook":{name:"OpenStreetMap Bangladesh",description:"Improve OpenStreetMap in Bangladesh",extendedDescription:"Mapping in Bangladesh? Have questions, want to connect with the community here? Join us at {url}. All are welcome!",events:{sotmasia2019:{name:"State of the Map Asia 2019",description:"Join the 2019 OpenStreetMap region-wide event at State of the Map Asia in Dhaka",where:"Krishibid Institution Bangladesh (KIB), Dhaka, Bangladesh"}}},"OSM-BO-mailinglist":{name:"Talk-bo Mailing List",description:"Talk-bo is the official mailing list for the Bolivian OpenStreetMap community",extendedDescription:"Mapping in Bolivia? Have questions, want to connect with the community here? Join us at {url}. All are welcome!"},"OSM-BiH-telegram":{name:"OpenStreetMap BiH Telegram",description:"A Telegram group for the OSM Bosnia and Herzegovina community: {url}"},"OSM-Boston":{name:"OpenStreetMap Boston",description:"Mappers and OpenStreetMap users in the Boston area",extendedDescription:"OpenStreetMap is the free and open, wiki-style map of the world, with hundreds of thousands of contributions every day from people like you. Editing the map is simple, and fun! Join us both indoors and outdoors in our effort to create the best map of the Boston area and the rest of the world!"},"OSM-CA-Slack":{name:"OSM-CA Slack",description:"All are welcome! Sign up at {signupUrl}."},"OSM-CA-mailinglist":{name:"OSM-CA mailing list",description:"A mailing list to discuss OpenStreetMap in Canada."},"OSM-CA-telegram":{name:"@osmca on Telegram",description:"OpenStreetMap Canada Telegram chat"},"OSM-CL-facebook":{name:"OpenStreetMap Chile Facebook",description:"Join the OpenStreetMap Chile community on Facebook",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-CL-mailinglist":{name:"Talk-cl Mailing List",description:"A mailing list to discuss OpenStreetMap in Chile"},"OSM-CL-telegram":{name:"OpenStreetMap Chile Telegram",description:"Join the OpenStreetMap Chile community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-CL-twitter":{name:"OpenStreetMap Chile Twitter",description:"Follow us on Twitter at {url}"},"OSM-CN-telegram":{name:"OpenStreetMap China Telegram",description:"A Telegram group for the OSM Chinese community: {url}"},"OSM-CO":{name:"OpenStreetMap Colombia",description:"News of the OpenStreetMap Colombia community and the OSMCo Foundation"},"OSM-CO-facebook":{name:"OpenStreetMap Colombia Facebook",description:"Join the OpenStreetMap Colombia community on Facebook",extendedDescription:"Join the community to learn more about OpenStreetMap. Everyone is welcome!"},"OSM-CO-mailinglist":{name:"Talk-co Mailing List",description:"A mailing list to discuss OpenStreetMap in Colombia"},"OSM-CO-telegram":{name:"OSM Colombia on Telegram",description:"OpenStreetMap Colombia Telegram chat"},"OSM-CO-twitter":{name:"OpenStreetMap Colombia Twitter",description:"Follow us on Twitter at {url}"},"OSM-CU-telegram":{name:"OSM Cuba on Telegram",description:"OpenStreetMap Cuba Telegram chat"},"OSM-CZ-telegram":{name:"OpenStreetMap CZ Telegram",description:"A Telegram group for the OSM Czech community: {url}"},"OSM-Central-Salish-Sea":{name:"OpenStreetMap Central Salish Sea",description:"Mappers and OpenStreetMap users around Mount Vernon, WA",extendedDescription:"OpenStreetMap is an map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more. We meet all the time to talk maps, make maps and have fun!"},"OSM-Chattanooga":{name:"OSM Chattanooga",description:"The OpenStreetMap user group for Chattanooga"},"OSM-Colorado":{name:"OpenStreetMap Colorado",description:"Mappers and OpenStreetMap users in the state of Colorado, USA",extendedDescription:"OpenStreetMap (OSM) Colorado is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties."},"OSM-Discord":{name:"OpenStreetMap Discord",description:"Get in touch with other mappers via Discord"},"OSM-EC-telegram":{name:"OSM Ecuador on Telegram",description:"OpenStreetMap Ecuador Telegram chat"},"OSM-ES-mailinglist":{name:"Talk-es mailing list",description:"A mailing list to discuss OpenStreetMap in Spain"},"OSM-ES-telegram":{name:"@OSMes on Telegram",description:"OpenStreetMap Spain Telegram chat"},"OSM-Facebook":{name:"OpenStreetMap on Facebook",description:"Like us on Facebook for news and updates about OpenStreetMap."},"OSM-IDN-facebook":{name:"OpenStreetMap Indonesia",description:"Improve OpenStreetMap in Indonesia",extendedDescription:"Mapping in Indonesia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-IRC":{name:"OpenStreetMap IRC",description:"Join #osm on irc.oftc.net (port 6667)"},"OSM-India-Puducherry-Facebook":{name:"Free Software Hardware Movement - Facebook",description:"FSHM Facebook page to know about community events, activities",extendedDescription:"FSHM organizes events relating to free software/hardware, technology, activism and OpenStreetMap. Its FB page is the best way to keep in contact with its events."},"OSM-India-Puducherry-Matrix":{name:"Free Software Hardware Movement - Matrix",description:"FSHM Riot group to discuss, share and update mapping activities, events in and around Puducherry",extendedDescription:"FSHM community members share their OSM mapping updates / experiences through the Riot.im group, this group is also used to discuss things related to free software / hardware, technology and activism."},"OSM-India-facebook":{name:"OpenStreetMap India - Participatory neighborhood mapping",description:"Improve OpenStreetMap in India",extendedDescription:"Mapping in India? Have questions, want to connect with the community here? Join us at {url}. All are welcome!"},"OSM-Japan-telegram":{name:"OpenStreetMap Japan Telegram",description:"A Telegram group for the OSM Japan community: {url}"},"OSM-Kerala-facebook":{name:"OpenStreetMap Kerala - Participatory neighborhood mapping",description:"Improve OpenStreetMap in Kerala",extendedDescription:"Mapping in Kerala ? Have questions, want to connect with the community here? Join us at {url}. All are welcome!"},"OSM-Korea-mailinglist":{name:"OpenStreetMap Korea Mailinglist",description:"Talk-ko is an Official Mailinglist for the Communities to dicuss matters about Korea"},"OSM-Korea-telegram":{name:"OSM Korea Telegram",description:"Unofficial Group for OpenStreetMap contributors, communities, and users in Korea to share and discuss."},"OSM-MMR-facebook":{name:"OpenStreetMap Myanmar",description:"Improve OpenStreetMap in Myanmar",extendedDescription:"Mapping in Myanmar? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-MNG-facebook":{name:"OpenStreetMap Mongolia",description:"Improve OpenStreetMap in Mongolia",extendedDescription:"Mapping in Mongolia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-MY-facebook":{name:"OpenStreetMap Malaysia on Facebook",description:"For chat about anything related to OpenStreetMap!"},"OSM-MY-forum":{name:"OpenStreetMap Malaysia Forum",description:"Official OpenStreetMap Malaysia Forum"},"OSM-MY-matrix":{name:"OpenStreetMap Malaysia Riot channel",description:"All mappers are welcome! Sign up at {signupUrl}"},"OSM-Nepal-facebook":{name:"OpenStreetMap Nepal",description:"Improve OpenStreetMap in Nepal",extendedDescription:"Mapping in Nepal? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-Ottawa-meetup":{name:"OpenStreetMap Ottawa",description:"Mappers and OpenStreetMap users in the Ottawa area"},"OSM-PE":{name:"OpenStreetMap Peru",description:"News and resources for the OpenStreetMap Peru community"},"OSM-PE-facebook":{name:"OpenStreetMap Peru Facebook",description:"Join the OpenStreetMap Peru community on Facebook"},"OSM-PE-mailinglist":{name:"Talk-pe Mailing List",description:"The official mailing list for the OpenStreetMap Peru community"},"OSM-PE-matrix":{name:"OpenStreetMap Peru Matrix Chat",description:"Chat with other members of the OpenStreetMap Peru community in Matrix."},"OSM-PE-telegram":{name:"OpenStreetMap Peru Telegram",description:"Join the OpenStreetMap Peru community on Telegram"},"OSM-PE-twitter":{name:"OpenStreetMap Peru Twitter",description:"Follow us on Twitter at {url}"},"OSM-PH-facebook":{name:"OpenStreetMap PH Facebook",description:"Welcome to OpenStreetMap Philippines, where we encourage all fellow Filipinos to contribute to the OpenStreetMap project."},"OSM-PH-mailinglist":{name:"Talk-ph Mailing List",description:"A mailing list to discuss OpenStreetMap in the Philippines"},"OSM-PH-slack":{name:"OpenStreetMap PH Slack",description:"All are welcome! Sign up at {signupUrl}"},"OSM-PH-telegram":{name:"OpenStreetMap PH Telegram",description:"Un-official, Telegram local community of OpenStreetMap contributors and friends in the Philippines"},"OSM-PL-facebook-group":{name:"OpenStreetMap Poland Facebook group",description:"Group for mappers and users of OpenStreetMap in Poland"},"OSM-PL-forum":{name:"OpenStreetMap Poland Forum",description:"Forum of Polish OpenStreetMap community"},"OSM-PY-telegram":{name:"OSM Paraguay on Telegram",description:"OpenStreetMap Paraguay Telegram chat"},"OSM-Portland":{name:"OpenStreetMap Portland",description:"Mappers and OpenStreetMap users in the Portland area",extendedDescription:"OpenStreetMap (OSM) is a map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more, and come join us at a meetup to talk maps, contribute to OSM, and have fun!"},"OSM-Portland-forum":{name:"OpenStreetMap PDX Google Group",description:"Forum and mailing list for OpenStreetMap users in the Portland area",extendedDescription:"This group is to facilitate improvements to OpenStreetMap in the Portland, Oregon area to support applications such as the Open Trip Planner."},"OSM-Puducherry-Mailing-List":{name:"Free Software Hardware Movement - Mailing List",description:"FSHM Puducherry mailing list to discuss mapping in Puducherry and other things.",extendedDescription:"FSHM organizes events relating to free software/hardware, technology, activism and OpenStreetMap."},"OSM-RU-forum":{name:"OpenStreetMap RU forum",description:"OpenStreetMap Russia web forum"},"OSM-RU-telegram":{name:"OpenStreetMap RU telegram",description:"OpenStreetMap Russia telegram chat"},"OSM-Reddit":{name:"OpenStreetMap on Reddit",description:"/r/openstreetmap/ is a great place to learn more about OpenStreetMap.  Ask us anything!"},"OSM-Rome-meetup":{name:"Incontro Mappatori Romani",description:"Improve OpenStreetMap in the Rome area",extendedDescription:"We aim to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Lazio."},"OSM-Seattle":{name:"OpenStreetMap Seattle",description:"Mappers and OpenStreetMap users in the Seattle area"},"OSM-SoCal":{name:"OpenStreetMap Southern California",description:"Let's have some fun, contribute something to Los Angeles, and learn about mapping!",extendedDescription:"OpenStreetMap (OSM) Southern California is for anyone interested in mapping to get together to work with OpenStreetMap.  OpenStreetMap, the Wikipedia of maps, is a free open-source map of the world being created by more than 1,000,000 volunteers around the globe.  Everyone is welcome.  If you don't know OpenStreetMap, we'll teach you. If you have an idea for a mapping project or even a field trip that the group can do, great!"},"OSM-South-Bay":{name:"OSM South Bay",description:"Map Nights hosted by Code for San Jose",extendedDescription:"Code for San Jose, the local Code for America brigade, hosts monthly Map Nights on Thursday nights in downtown San José. Meet fellow South Bay mappers, help out with local mapping projects, and hear about other civic tech projects. Programming and GIS skills are not required."},"OSM-TH-CNX-meetup":{name:"OSM Meetup Chiang Mai",description:"Irregular meeting of the OpenStreetMap community in Chiang Mai",extendedDescription:"Members of the OpenStreetMap community meet every few months in Chiang Mai. Get in contact and check out {url} to see when the next meetup is scheduled"},"OSM-TH-facebook":{name:"OpenStreetMap TH Facebook group",description:"Facebook group for OpenStreetMappers in Thailand"},"OSM-TH-forum":{name:"OpenStreetMap TH forum",description:"OpenStreetMap Thailand web forum"},"OSM-TW-facebook":{name:"OpenStreetMap Taiwan Community",description:"Facebook Group for Mappers and OpenStreetMap users to discuss matters about Taiwan."},"OSM-TW-mailinglist":{name:"OpenStreetMap Taiwan Mailinglist",description:"Talk-tw is an Official Mailinglist for the Communities to dicuss matters about Taiwan"},"OSM-TW-telegram":{name:"OpenStreetMap Taiwan Telegram",description:"A Telegram group for the OSM Taiwan community: {url}"},"OSM-Tampa-Bay":{name:"OpenStreetMap Tampa Bay",description:"Mappers and OpenStreetMap users in the Tampa Bay area",extendedDescription:"OSM Tampa Bay group for local residents to get together and build out the definitive map of Tampa Bay with OpenStreetMap, the free and editable map of the world.  If you're into maps, data, open source, GPS, hiking, cycling, et cetera, you'll love working with OpenStreetMap -- so join in! We'll get together and map and talk about new topics once-a-month or so."},"OSM-Telegram":{name:"OpenStreetMap Telegram",description:"Join the OpenStreetMap Telegram global supergroup at {url}"},"OSM-Twitter":{name:"OpenStreetMap Twitter",description:"Follow us on Twitter at {url}"},"OSM-US":{name:"OpenStreetMap US",description:"We help grow and improve OpenStreetMap in the United States.",extendedDescription:"We support OpenStreetMap by holding annual conferences, providing community resources, building partnerships, and by spreading the word. Join OpenStreetMap US here: {signupUrl}"},"OSM-US-Slack":{name:"OpenStreetMap US Slack",description:"All are welcome! Sign up at {signupUrl}"},"OSM-Utah":{name:"OpenStreetMap Utah",description:"Mappers and OpenStreetMap users in the Salt Lake City area",extendedDescription:"Activities may include things like Learn To Map workshops, mapping parties and outdoor data collection. The events will take place in the SLC area, at least initially.  We are looking for seasoned mappers as well as people new to OSM. Join and let's do some mapping!"},"OSM-Vancouver-meetup":{name:"OpenStreetMap Vancouver",description:"Mappers and OpenStreetMap users in the Vancouver, BC area"},"OSM-Wyoming":{name:"OpenStreetMap Wyoming",description:"Mappers and OpenStreetMap users in the state of Wyoming",extendedDescription:"OpenStreetMap (OSM) Wyoming is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties."},"OSM-br-discord":{name:"OpenStreetMap Brasil Discord",description:"Join the OpenStreetMap Brasil community on Discord"},"OSM-br-mailinglist":{name:"Talk-br Mailing List",description:"A mailing list to discuss OpenStreetMap in Brazil"},"OSM-br-telegram":{name:"OpenStreetMap Brasil Telegram",description:"Join the OpenStreetMap Brasil community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-br-twitter":{name:"OpenStreetMap Brasil Twitter",description:"Follow us on Twitter at {url}"},"OSM-help":{name:"OpenStreetMap Help",description:"Ask a question and get answers on OSM's community-driven question and answer site.",extendedDescription:"{url} is for everyone who needs help with OpenStreetMap.  Whether you are a beginner mapper or have a technical question, we're here to help!"},"OSM-india-mailinglist":{name:"OpenStreetMap India Mailinglist",description:"Talk-in is the official Mailinglist for Indian Community"},"OSM-india-twitter":{name:"OpenStreetMap India Twitter",description:"We are just a tweet away: {url}"},"OSM-japan-facebook":{name:"OpenStreetMap Japan Community",description:"Mappers and OpenStreetMap users in Japan"},"OSM-japan-mailinglist":{name:"OpenStreetMap Japan Mailinglist",description:"Talk-ja is an Official Mailinglist for Japanese Community"},"OSM-japan-twitter":{name:"OpenStreetMap Japan Twitter",description:"Hashtag on Twitter: {url}"},"OSM-japan-website":{name:"OpenStreetMap Japan",description:"Mappers and OpenStreetMap users in Japan"},"OSM-sri-lanka-facebook":{name:"OpenStreetMap Sri Lanka",description:"Improve OpenStreetMap in Sri Lanka",extendedDescription:"Mapping in Sri Lanka? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},OSMF:{name:"OpenStreetMap Foundation",description:"OSMF is a UK-based not-for-profit that supports the OpenStreetMap Project",extendedDescription:"OSMF supports the OpenStreetMap by fundraising, maintaining the servers which power OSM, organizing the annual State of the Map conference, and coordinating the volunteers who keep OSM running. You can show your support and have a voice in the direction of OpenStreetMap by joining as an OSMF member here: {signupUrl}",events:{sotm2020:{name:"State of the Map 2020",description:"Join us for 3 days in Cape Town, South Africa for the annual worldwide OpenStreetMap conference, bringing together everyone in the community to socialize, share, and learn.",where:"Cape Town, South Africa"}}},"OpenCleveland-meetup":{name:"Open Cleveland",description:"Improve OpenStreetMap in the Cleveland area",extendedDescription:"Open Geo Cleveland aims to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Northeast Ohio. We're also a maptime chapter =)"},"PHXGeo-meetup":{name:"PHXGeo Meetup",description:"Mappers and OpenStreetMap users in the Phoenix, AZ area",extendedDescription:"This is a meetup group for those in the Phoenix area who like maps, GIS, OpenStreetMap, cartography and anything in between."},"PHXGeo-twitter":{name:"PHXGeo Twitter",description:"Follow us on Twitter at {url}"},"RS-telegram":{name:"OpenStreetMap Rio Grande do Sul Telegram Group",description:"Join the OpenStreetMap Rio Grande do Sul community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"South-Tyrol-Mailing-List":{name:"OpenStreetMap mailing list for South Tyrol",description:"OpenStreetMap Italy regional talk list for South Tyrol"},"Trentino-Mailing-List":{name:"OpenStreetMap mailing list for Trentino",description:"OpenStreetMap Italy regional talk list for Trentino"},"Western-Slope-facebook":{name:"Western Slope OSM Facebook",description:"Mappers and OpenStreetMap users around Grand Junction, CO"},"Western-Slope-meetup":{name:"Western Slope OSM Meetup",description:"Mappers and OpenStreetMap users around Grand Junction, CO",extendedDescription:"The goal of this group is to introduce OpenStreetMap to the community, develop a community of mappers, create the most amazing geodata possible using whatever method we can and finally strategize in order to get this data out into our community. Imagine accurate trail signage! Imagine further development of bike paths! Imagine anything you want, that's the joy of OpenStreetMap!"},"al-forum":{name:"OSM Albania Forum",description:"OpenStreetMap Albania Forum"},"al-maptime-tirana":{name:"Maptime Tirana",description:"Social events organized around mapping - beginners most welcome!",extendedDescription:"Maptime is an open learning environment for all levels and degrees of knowledge, offering intentional educational support for the beginner. Maptime is simultaneously flexible and structured, creating space for mapping tutorials, workshops, ongoing projects with a shared goal, and independent/collaborative work time."},"al-telegram":{name:"OSM Albania Telegram channel",description:"OpenStreetMap Albania Telegram channel"},"al-twitter":{name:"OpenStreetMap Albania Twitter",description:"Follow us on Twitter at {url}"},"at-forum":{name:"OpenStreetMap Austria Forum",description:"The official forum for OpenStreetMap questions in and around Austria"},"at-mailinglist":{name:"Talk-at Mailing List",description:"Talk-at is the official mailing list for the Austrian OSM community"},"at-twitter":{name:"OpenStreetMap Austria Twitter",description:"OpenStreetMap Austria On Twitter: {url}"},"be-chapter":{name:"OpenStreetMap Belgium Local Chapter",description:"We help grow and improve OpenStreetMap in Belgium.",extendedDescription:"If you want to help to improve and grow the mapping community in Belgium, to make even more people crazy about mapping, OpenStreetMap Belgium is the right place for you!"},"be-facebook":{name:"OpenStreetMap BE Facebook Community",description:"Mappers and OpenStreetMap on Facebook in Belgium"},"be-forum":{name:"OpenStreetMap BE forum",description:"OpenStreetMap Belgium web forum"},"be-irc":{name:"OpenStreetMap Belgium IRC",description:"Join #osmbe on irc.oftc.net (port 6667)",extendedDescription:"Join #osmbe on irc.oftc.net (port 6667), it is bridged with the Matrix chat channel"},"be-mailinglist":{name:"Talk-be Mailing List",description:"Talk-be is the official mailing list for the Belgian OSM community"},"be-matrix":{name:"OpenStreetMap BE Matrix channel",description:"All mappers are welcome!",extendedDescription:"Most talk is happening at the \"OpenStreetMap Belgium\" channel. You can ask anything there! The other rooms are for specific subjects."},"be-meetup":{name:"OpenStreetMap Belgium Meetup",description:"Real life meetups of everyone who is interested in OpenStreetMap",extendedDescription:"Physical meetups are great to meet other mappers, ask them questions and to learn a lot. Especially new contributors are very welcome!"},"be-twitter":{name:"OpenStreetMap Belgium Twitter",description:"OSM Belgium on Twitter: @osm_be"},"bg-forum":{name:"OpenStreetMap Bulgaria Forum",description:"Forum of OpenStreetMap community in Bulgaria"},"bg-wiki":{name:"OpenStreetMap Wikiproject Bulgaria",description:"Wikiproject page for Bulgaria"},"bi-vc-cvl_wiki":{name:"OSMers BI-VC-CVL",description:"Mappers of northern Piedmont",extendedDescription:"In addition to the monthly meetings, we also have a WhatsApp group."},"bw-facebook":{name:"Mapping Botswana on Facebook",description:"Page of OpenStreetMap in Botswana"},"bw-twitter":{name:"Mapping Botswana on Twitter",description:"Twitter of OpenStreetMap in Botswana"},byosm:{name:"OpenStreetMap Belarus",description:"OpenStreetMap Belarus telegram chat"},"cape-coast-youthmappers":{name:"University of Cape Coast YouthMappers",description:"Follow us on Twitter: {url}",extendedDescription:"This is the official handle for the Youth Mappers chapter of the University of Cape Coast, Ghana. we love maps, open data and helping the vulnerable."},"ch-irc":{name:"OpenStreetMap Switzerland IRC",description:"Join #osm-ch on irc.oftc.net (port 6667)"},"ch-mailinglist":{name:"Openstreetmap Schweiz/Suisse/Svizzera/Svizra Mailing List",description:"Mailing list for Switzerland"},"ch-twitter":{name:"OpenStreetMap Switzerland Twitter",description:"Follow us on Twitter: {url}"},"cuneo-telegram":{name:"OpenStreetMap Cuneo Mappers",description:"OpenStreetMap Cuneo Telegram chat"},"czech-community":{name:"Czech OSM community",description:"Map portal, website and contacts on OSM members in Czechia"},"de-berlin-mailinglist":{name:"Berlin Mailing List",description:"This is the mailing list for the Berlin OSM community"},"de-berlin-meetup":{name:"OpenStreetMap Berlin-Brandenburg Meetup",description:"Mappers and OpenStreetMap users in the Berlin area"},"de-berlin-telegram":{name:"@osmberlin on Telegram",description:"OpenStreetMap Berlin Telegram chat"},"de-berlin-twitter":{name:"OpenStreetMap Berlin Twitter",description:"Follow us on Twitter: {url}"},"de-forum":{name:"OpenStreetMap DE forum",description:"OpenStreetMap Germany web forum"},"de-hamburg-telegram":{name:"OSM Hamburg on Telegram",description:"OpenStreetMap Hamburg Telegram chat: {url}"},"de-irc":{name:"OpenStreetMap Germany IRC",description:"Join #osm-de on irc.oftc.net (port 6667)"},"de-mailinglist":{name:"Talk-de Mailing List",description:"Talk-de is the official mailing list for the German OSM community"},"de-matrix":{name:"OpenStreetMap Germany Matrix",description:"Join #osm-de:matrix.org at https://riot.im/app/#/room/%23osm-de:matrix.org"},"de-ostwestfalen-lippe-mailinglist":{name:"OWL Mailing List",description:"This is the mailing list for the Ostwestfalen-Lippe OSM community"},"de-telegram":{name:"OpenStreetMap Germany Telegram",description:"Join the OpenStreetMap Germany Telegram supergroup at {url}"},"de-viersen-meetup":{name:"OpenStreetMap Viersen Meetup",description:"OSM community and users meetup Kreis Viersen and Mönchengladbach"},"dk-forum":{name:"OpenStreetMap Denmark Web Forum",description:"OpenStreetMap Denmark web forum"},"dk-irc":{name:"OpenStreetMap Denmark IRC",description:"Join #osm-dk on irc.oftc.net (port 6667)"},"dk-mailinglist":{name:"Talk-dk Mailing List",description:"A mailing list to discuss OpenStreetMap in Denmark"},"es-twitter":{name:"OpenStreetMap España Twitter",description:"Follow us on Twitter at {url}"},"et-telegram":{name:"@OpenStreetMapEthiopia on Telegram",description:"OpenStreetMap Ethiopia Telegram chat"},"fi-forum":{name:"OpenStreetMap FI forum",description:"OpenStreetMap Finland web forum"},"fi-irc":{name:"OpenStreetMap Finland IRC",description:"Join #osm-fi on irc.oftc.net (port 6667)"},"fi-mailinglist":{name:"Talk-fi Mailing List",description:"Talk-fi is the official mailing list for the Finnish OSM community"},"fr-chapter":{name:"OpenStreetMap France Local Chapter",description:"We help grow and improve OpenStreetMap in France."},"fr-facebook":{name:"OpenStreetMap France Facebook page",description:"OpenStreetMap France Facebook page"},"fr-forum":{name:"OpenStreetMap France web forum",description:"OpenStreetMap France web forum"},"fr-irc":{name:"OpenStreetMap France on IRC",description:"Join #osm-fr on irc.oftc.net (port 6667)"},"fr-mailinglist":{name:"Talk-fr Mailing List",description:"Talk-fr mailing list"},"fr-telegram":{name:"OpenStreetMap France on Telegram",description:"A Telegram group for the OSM France community: {url}"},"fr-twitter":{name:"OpenStreetMap France on Twitter",description:"OpenStreetMap France on Twitter: {url}"},"galicia-wiki":{name:"OpenStreetMap Wikiproject Galicia",description:"Everything you need to know about mapping in Galicia: {url}"},"gb-irc":{name:"OpenStreetMap United Kingdom IRC",description:"Join #osm-gb on irc.oftc.net (port 6667)",extendedDescription:"Join #osm-gb on irc.oftc.net (port 6667), please be patient and wait for a few minutes if you ask a question"},"gb-mailinglist":{name:"Talk-gb Mailing List",description:"Talk-gb is the main communication forum list for the UK (including Northern Ireland) OSM community"},geogeeks_perth_meetup:{name:"GeoGeeks Perth Meetup",description:"Perth-based meetup group for people interested in mapping, geospatial data, and open source. We'll be working on anything that involves a sense of place."},"guatemala-telegram":{name:"OSM Guatemala on Telegram",description:"OpenStreetMap Guatemala Telegram chat"},"hr-facebook":{name:"OpenStreetMap Croatia Facebook group",description:"OpenStreetMap Croatia Facebook group"},"hr-irc":{name:"OpenStreetMap Croatia on IRC",description:"Join #osm-hr on irc.freenode.org (port 6667)"},"hr-mailinglist":{name:"Talk-hr Mailing List",description:"Talk-hr mailing list"},"hu-facebook":{name:"OpenStreetMap HU on Facebook",description:"Mappers and OpenStreetMap Facebook in Hungary"},"hu-forum":{name:"OpenStreetMap HU forum",description:"OpenStreetMap Hungary web forum"},"hu-matrix":{name:"OpenStreetMap HU matrix room",description:"OpenStreetMap Hungary matrix chat",extendedDescription:"OpenStreetMap chat on map topics. One of the OSM community support forums."},"hu-meetup":{name:"OpenStreetMap Hungary Meetup",description:"The platform for organizing meetups in Hungary"},"il-telegram":{name:"OSM Israel on Telegram",description:"A Telegram group for the OpenStreetMap community in Israel: {url}"},"ireland-chapter":{name:"OpenStreetMap Ireland Local Chapter",description:"We help grow and improve OpenStreetMap in Ireland.",extendedDescription:"OpenStreetMap Ireland provides an advocate voice for the OpenStreetMap project on the island of Ireland, in addition to interacting with other open initiatives."},"ireland-facebook":{name:"OpenStreetMap Ireland Facebook group",description:"OpenStreetMap Ireland Facebook page"},"ireland-irc":{name:"OpenStreetMap Ireland IRC",description:"Join #osm-ie on irc.oftc.net (port 6667)",extendedDescription:"Join #osm-ie on irc.oftc.net (port 6667), please be patient and wait for a few minutes if you ask a question"},"ireland-mailinglist":{name:"Talk-ie Mailing List",description:"Talk-ie is the mailing list for the Irish OSM community"},"ireland-telegram":{name:"OSM Ireland on Telegram",description:"OpenStreetMap Ireland Telegram chat"},"ireland-twitter":{name:"OpenStreetMap IE on Twitter",description:"OpenStreetMap IE on Twitter: {url}"},"is-chapter":{name:"OpenStreetMap Iceland Local Chapter",description:"We help grow and improve OpenStreetMap in Iceland."},"is-facebook":{name:"OSM Iceland on Facebook",description:"Page of OpenStreetMap in Iceland"},"is-mailinglist":{name:"Talk-is Mailing List",description:"Talk-is is the official mailing list for the Icelandic OSM community"},"is-twitter":{name:"OSM Iceland on Twitter",description:"Twitter of OpenStreetMap in Iceland"},"it-chapter":{name:"OpenStreetMap Italy Local Chapter",description:"We help grow and improve OpenStreetMap in Italy."},"it-facebook":{name:"OpenStreetMap Italy Facebook",description:"Join the OpenStreetMap Italy community on Facebook"},"it-irc":{name:"OpenStreetMap Italy IRC",description:"Join #osm-it on irc.oftc.net (port 6667)"},"it-mailinglist":{name:"Talk-it Mailing List",description:"Talk-it is the official mailing list for the Italian OSM community"},"it-telegram":{name:"@OpenStreetMapItalia on Telegram",description:"OpenStreetMap Italy Telegram chat"},"it-twitter":{name:"OpenStreetMap Italy Twitter",description:"Follow us on Twitter at {url}"},"kazakhstan-telegram":{name:"OSM Kazakhstan on Telegram",description:"OpenStreetMap Kazakhstan Telegram chat"},"kosovo-matrix":{name:"OpenStreetMap Kosovo on Matrix (bridged with the one in Telegram)",description:"Semi-official all-Kosovo public group. We welcome all mappers from anywhere in any language."},"kosovo-telegram":{name:"OpenStreetMap Kosovo on Telegram",description:"Semi-official all-Kosovo Telegram public group. We welcome all mappers from anywhere in any language."},"latam-facebook":{name:"OpenStreetMap Latin America Facebook",description:"Mappers and OpenStreetMap on Facebook in Latin America"},"latam-irc":{name:"OpenStreetMap Latin America IRC",description:"Join #osm-latam on irc.oftc.net (port 6667)"},"latam-mailinglist":{name:"Talk-latam Mailing List",description:"Talk-latam is the official mailing list for the Latinamerican OpenStreetMap community"},"latam-matrix":{name:"OpenStreetMap Latin America Matrix",description:"Chat with other members of the Latinamerican OSM community, it is bridged with the Telegram chat"},"latam-telegram":{name:"OpenStreetMap Latin America Telegram",description:"Chat with other members of the Latinamerican OSM community, it is bridged with the Matrix chat"},"latam-twitter":{name:"OpenStreetMap Latin America Twitter",description:"OpenStreetMap Latin America on Twitter: {url}"},"latam-wiki":{name:"OpenStreetMap Wikiproject Latin America",description:"Everything you need to know about mapping in Latin America"},"lu-mailinglist":{name:"Talk-lu Mailing List",description:"Official mailing list for the Luxembourgish OSM community"},"mailinglist-sk-googlegroups":{name:"Slovak mailing list on google groups",description:"Official mailing list for Slovak community"},"map-kibera":{name:"Map Kibera Trust",description:"Map Kibera is a registered organization working in Kenya",extendedDescription:"Map Kibera Trust’s mission is to increase influence and representation of marginalized communities through the creative use of digital tools for action."},"mappa-mercia-group":{name:"Mappa Mercia local group",description:"A home for OpenStreetMap enthusiasts in the Midlands",extendedDescription:"Mappa Mercia is a project to grow OpenStreetMap in the West Midlands, UK. We run community events, provide training and support local organisations wishing to open up their data."},"md-googlegroup":{name:"OSM Moldova Google Group",description:"OpenStreetMap Moldova Google Group"},"md-telegram":{name:"@OSMMoldova on Telegram",description:"OpenStreetMap Moldova Telegram chat"},"ni-facebook":{name:"OpenStreetMap NI Community",description:"Mappers and OpenStreetMap on Facebook in Nicaragua"},"ni-mailinglist":{name:"Talk-ni Mailing List",description:"Talk-ni is the official mailing list for the Nicaraguan OSM community"},"ni-telegram":{name:"OSM Nicaragua on Telegram",description:"OpenStreetMap Nicaragua Telegram chat"},"ni-twitter":{name:"OpenStreetMap Nicaragua Twitter",description:"OSM Nicaragua on Twitter: @osm_ni"},"nl-forum":{name:"Netherlands OpenStreetMap forum",description:"OpenStreetMap Netherlands web forum"},"nl-telegram":{name:"Netherlands OpenStreetMap Telegram",description:"A Telegram group for the OSM Netherlands community: {url}"},"no-forum":{name:"OpenStreetMap Norway Web Forum",description:"OpenStreetMap Norway web forum"},"no-irc":{name:"OpenStreetMap Norway on IRC",description:"Chat room for mappers and OpenStreetMap users, developers and enthusiasts in Norway"},"no-mailinglist":{name:"OpenStreetMap Norway mailing list",description:"Mailing list for mappers and OpenStreetMap users, developers and enthusiasts in Norway"},"no-telegram":{name:"@OSM_no on Telegram",description:"OpenStreetMap Norway Telegram chat"},"osm-afghanistan-facebook":{name:"OpenStreetMap Afghanistan",description:"Improve OpenStreetMap in Afghanistan"},"osm-africa-telegram":{name:"OpenStreetMap Africa Telegram",description:"OpenStreetMap Telegram for Africa"},"osm-asia-telegram":{name:"OpenStreetMap Asia Telegram",description:"Join our family: {url}"},"osm-at":{name:"OpenStreetMap Austria",description:"The platform for information on OpenStreetMap in Austria"},"osm-ch":{name:"OpenStreetMap Switzerland",description:"The platform for information on OpenStreetMap in Switzerland"},"osm-de":{name:"OpenStreetMap Germany",description:"The platform for information on OpenStreetMap in Germany"},"osm-gh-facebook":{name:"OpenStreetMap Ghana on Facebook",description:"Facebook group for people interested in OpenStreetMap.",extendedDescription:"Mappers in Ghana community, promoting OpenStreetMap and Humanitarian OpenStreetMap Team (HOT) projects in Ghana. Join us."},"osm-gh-telegram":{name:"OpenStreetMap Ghana Telegram",description:"OpenStreetMap Ghana community on Telegram"},"osm-gh-twitter":{name:"OpenStreetMap Ghana on Twitter",description:"Follow us on Twitter: {url}"},"osm-india-forum":{name:"OpenStreetMap India forum",description:"OpenStreetMap India web forum"},"osm-india-github":{name:"OpenStreetMap India GitHub",description:"Code with us: {url}"},"osm-india-telegram":{name:"OpenStreetMap India Telegram",description:"Join our family: {url}"},"osm-india-website":{name:"OpenStreetMap India",description:"Mappers and OpenStreetMap users in India"},"osm-india-wiki":{name:"OpenStreetMap Wikiproject India",description:"Everything you need to know about mapping in India: {url}"},"osm-india-youtube":{name:"OpenStreetMap India Youtube",description:"Subscribe to our channel: {url}"},"osm-iran-aparat":{name:"OpenStreetMap Iran Aparat",description:"Subscribe to our channel at {url}",extendedDescription:"A good resource of videos about anything related to OpenStreetMap. Mainly in Persian."},"osm-iran-forum":{name:"OpenStreetMap Iran web forum",description:"OpenStreetMap Iran web forum",extendedDescription:"A web forum for OpenStreetMap users in Iran. Feel free to ask questions and discuss with others!"},"osm-iran-telegram":{name:"OpenStreetMap Iran Telegram",description:"You're welcome to join our Telegram channel at {url}. We also have a supergroup of many OSMers interested in Iran. Find its link in bio of channel."},"osm-kenya":{name:"OSM Kenya",description:"OSM Kenya is a community of OSM contributors and users",extendedDescription:"OSM is a local community for individuals interested in OpenStreetMap including organizations, developers, and YouthMappers chapters in the country."},"osm-kerala-telegram":{name:"OpenStreetMap Kerala Telegram",description:"We map Kerala together. Join our telegram group. {url}"},"osm-kerala-wiki":{name:"OpenStreetMap Kerala",description:"Want to know more about Kerala Mapping: {url}"},"osm-mg-facebook":{name:"OpenStreetMap Madagascar Facebook Group",description:"Malagasy Facebook group for people interested in OpenStreetMap."},"osm-ni":{name:"MapaNica.net",description:"Provide OSM services and information for the local community in Nicaragua"},"osm-se":{name:"OpenStreetMap.se",description:"Provide OSM services and information for the local community in Sweden"},"osm-za-twitter":{name:"OpenStreetMap South Africa on Twitter",description:"Follow us on Twitter: {url}"},"osmcz-facebook":{name:"OpenStreetMap CZ on Facebook",description:"Follow Czech community on Facebook - including translated WeeklyOSM!"},"osmcz-twitter":{name:"Czech twitter @osmcz",description:"Follow czech community on Twitter - including translated WeeklyOSM!"},"osmgraz-meetup":{name:"OSM community meetup Graz",description:"Monthly meetup of the OpenStreetMap community in Graz"},"osmgraz-twitter":{name:"OSM community Graz on twitter",description:"OpenStreetMap community in Graz on twitter"},"panama-telegram":{name:"OSM Panama on Telegram",description:"OpenStreetMap Panama Telegram chat"},"pt-mailinglist":{name:"Talk-pt Mailing List",description:"Talk-pt is the official mailing list for the Portuguese OSM community"},"pt-telegram":{name:"OpenStreetMap Portugal on Telegram",description:"Telegram Group of the Portuguese OpenStreetMap community {url}"},"romania-facebook":{name:"OpenStreetMap Romania Facebook group",description:"Group for mappers and users of OpenStreetMap in Romania"},"romania-telegram":{name:"@OSMRomania on Telegram",description:"OpenStreetMap Romania Telegram chat"},"sa-telegram":{name:"OSM Saudi Arabia on Telegram",description:"A Telegram group for the OpenStreetMap community in Saudi Arabia: {url}"},"scotland-twitter":{name:"OpenStreetMap Alba on Twitter",description:"OpenStreetMap Alba on Twitter: {url}"},"se-facebook":{name:"OpenStreetMap Sweden Facebook",description:"OpenStreetMap Sweden on Facebook"},"se-forum":{name:"OpenStreetMap Sweden Web Forum",description:"OpenStreetMap Sweden web forum"},"se-irc":{name:"OpenStreetMap Sweden IRC",description:"Join #osm.se on irc.oftc.net (port 6667)"},"se-mailinglist":{name:"Talk-se Mailing List",description:"A mailing list to discuss OpenStreetMap in Sweden"},"se-telegram":{name:"OSM Sweden on Telegram",description:"OpenStreetMap Sweden Telegram chat"},"se-twitter":{name:"OpenStreetMap Sweden on Twitter",description:"Follow us on Twitter: {url}"},"si-forum":{name:"OpenStreetMap Slovenia Forum",description:"Forum of OpenStreetMap community in Slovenia"},"si-mailinglist":{name:"OpenStreetMap Slovenia mailing list",description:"Mailing list of OpenStreetMap community in Slovenia"},"si-twitter":{name:"OpenStreetMap Slovenia Twitter",description:"Follow OpenStreetMap Slovenia On Twitter: {url}"},"sk-facebook":{name:"Freemap.sk Slovakia community Facebook page",description:"Freemap.sk Slovakia community Facebook page"},"sk-freemap":{name:"OpenStreetMap Website Freemap Slovakia",description:"OpenStreetMap map website with tools in Slovakia and surrounding regions"},"sk-freemap-wiki":{name:"OpenStreetMap Freemap Slovakia Wiki",description:"OpenStreetMap wiki for Slovak mappers and community"},"sk-twitter":{name:"OpenStreetMap Freemap Slovensko on Twitter",description:"OpenStreetMap Freemap Slovensko on Twitter: {url}"},"talk-au":{name:"Talk-au Mailing List",description:"Place for Aussie mappers to chat"},"talk-cz-mailinglist":{name:"Czech mailing list (talk-cz)",description:"Talk-cz is the official mailing list for Czech community"},"talk-gh":{name:"Talk-gh Mailing List",description:"Talk-gh is the official mailing list for Ghana OSM community."},"talk-it-lazio":{name:"OpenStreetMap IT Lazio",description:"All are welcome! Sign up at {signupUrl}",extendedDescription:"Mailinglist for Rome and Lazio area."},"talk-it-piemonte_mailinglist":{name:"OSM Italy regional talk list for Piemonte",description:"All are welcome! Sign up at {signupUrl}",extendedDescription:"Mailinglist for Piemonte region."},"talk-mg":{name:"Talk-mg Mailing List",description:"Place for OpenStreetMap contributors, communities and users in Madagascar to share and discuss."},"talk-nz":{name:"Talk-nz Mailing List",description:"New Zealand's OSM community talk"},"talk-za":{name:"Talk-za Mailing List",description:"Talk-za is the official mailing list for South African OSM community."},"ua-facebook":{name:"OpenStreetMap Ukraine Facebook group",description:"Join the OpenStreetMap Ukraine community on Facebook"},"ua-forum":{name:"OpenStreetMap Ukraine Forum",description:"Forum of OpenStreetMap community in Ukraine"},"ua-github":{name:"OpenStreetMap Ukraine on GitHub",description:"OpenStreetMap Ukraine GitHub"},"ua-osm":{name:"OpenStreetMap Website Ukraine",description:"OpenStreetMap website in Ukraine"},"ua-slack":{name:"OpenStreetMap Ukraine Slack",description:"Join the OpenStreetMap Ukraine community on Slack"},"ua-telegram":{name:"@osmUA on Telegram",description:"OpenStreetMap Ukraine Telegram chat"},"ua-twitter":{name:"OpenStreetMap UA Twitter",description:"OpenStreetMap Ukraine on Twitter: {url}"},"uk-localchapter":{name:"OpenStreetMap UK",description:"The official Local Chapter for the UK (including Northern Ireland).",extendedDescription:"We support OpenStreetMap by holding events, providing community resources, building partnerships, and by spreading the word. Join OpenStreetMap UK here: {signupUrl}"},"uk-london-twitter":{name:"OpenStreetMap London on Twitter",description:"OpenStreetMap London on Twitter: {url}"},"uk-twitter":{name:"OpenStreetMap UK on Twitter",description:"OpenStreetMap UK on Twitter: {url}"},"us-ma-mailinglist":{name:"Talk-us-massachusetts Mailing List",description:"Email mailing list for the Massachusetts OSM community"},"uy-forum":{name:"OpenStreetMap UY forum",description:"OpenStreetMap Uruguay web forum"},"uy-irc":{name:"OpenStreetMap Uruguay on IRC",description:"Join #osmuruguay on irc.freenode.org (port 6667)",extendedDescription:"Join #osmuruguay on irc.freenode.org"},"uy-mailinglist":{name:"Talk-uy Mailing List",description:"Talk-uy is the official mailing list for the Uruguayan OSM community"},"uzbekistan-telegram":{name:"OSM Uzbekistan on Telegram",description:"OpenStreetMap Uzbekistan Telegram chat"},"ve-forum":{name:"OpenStreetMap VE Forum",description:"OpenStreetMap Venezuela web forum"},"ve-mailinglist":{name:"Talk-ve Mailing List",description:"Talk-ve is the official mailing list for the Venezuelan OSM community"},"ve-telegram":{name:"OpenStreetMap Venezuela Telegram",description:"Join the OpenStreetMap Venezuela community on Telegram"},"ym-AASTU":{name:"AASTU Youth Mappers",description:"YouthMappers chapter at Addis Ababa Science and Technology University",extendedDescription:"The Association of Geomatics Engineering Students (AGES), aims at promoting GIS products and services as well as training students on the use of the same. It not only promotes socialization between the students and practicing professionals, but also provides a platform for exchanging new ideas for holding new GIS and surveying events and training at the university."},"ym-Abia-State-University":{name:"AbsuMappersTeam",description:"YouthMappers chapter at Abia State University",extendedDescription:"AbsuMappersTeam is  voluntary team of map enthusiast ,using openstreetmap,GIS and other open source geospatial techno;ogy to solve problems.It is a dedicated for disaster response using OpenStreetMap.It is a  professional mentoring  and empowerment platform for  those with passion for GIS and Mapping.It is a community of  volunteers for geospatial data creation,field data collection and mapping.The team was co-founded by Victor N.Sunday(the Team mentor) and Professor J.U.Ogbonna ,the team coordinator and faculty Advisor. AbsuMapperTeam is an affiliate of UniiqueMappersTeam-Port Harcourt.The team stands to support sustainable development using geospatial  technology"},"ym-African-Methodist-Episcopal-University":{name:"YouthMappers-AMEU",description:"YouthMappers chapter at African Methodist Episcopal University"},"ym-Ahmadu-Bello-University":{name:"ABU Geomappers",description:"YouthMappers chapter at Ahmadu Bello University",extendedDescription:"We are a group of Data driven Humanitarian mappers, who are dedicated to rendering humanitarian service in response to disaster and mitigation. We are glad to contribute our expertise and knowledge through mapping, and helping to spread #OpenEvangelism through Training, and collaboration."},"ym-Ardhi-University":{name:"ARU Mapper",description:"YouthMappers chapter at Ardhi University",extendedDescription:"As upcoming geospatial data consultants we seek to educate and provide advice to the society on how they can use spatial data not only as a form of location but a tool of decision making and predict different hazardous and climatical changes which may harm them or future genarations."},"ym-Asian-University-for-Women":{name:"YouthMappers at AUW",description:"YouthMappers chapter at Asian University for Women",extendedDescription:"The Asian University for Women seeks to graduate women who will be skilled and innovative professionals, service-oriented leaders in the businesses and communities in which they will work and live, and promoters of intercultural understanding and sustainable human and economic development in Asia and throughout the world."},"ym-Ball-State-University":{name:"Gamma Theta Upsilon- Iota Omega Chapter",description:"YouthMappers chapter at Ball State University",extendedDescription:"Our chapter is a very active one. We primarily focus on community events, fundraising, and field trips. We are currently looking to develop more mapping-related activities to draw in other students from campus who may be interested in contributing."},"ym-Busitema-University":{name:"Good Mappers",description:"YouthMappers chapter at Busitema University",extendedDescription:"Good mappers is a team of students in Busitema University. Its main objective is to create a community of experienced mappers who can contribute to the world map."},"ym-California-University-of-Pennsylvania":{name:"CalU PA GIS Club",description:"YouthMappers chapter at California University of Pennsylvania",extendedDescription:"GIS Students at Cal U learn to apply spatial theory to the real world. The university degree program focuses on geography as well as utilizing GIS in emergency management."},"ym-Central-Washington-University":{name:"Geography Club",description:"YouthMappers chapter at Central Washington University",extendedDescription:"Our goal teaming up with Youthmappers is to bring relief to areas that are in need of humanitarian mapping. By doing so, we are serving our fellow brothers and sisters around the world as well as furthering our own cartography skills."},"ym-Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny":{name:"YouthMappers CURAT",description:"YouthMappers chapter at Centre Universitaire de Recherche et d'Application en Télédétection (CURAT) de l'Université Felix Houphouet Boigny",extendedDescription:"Our chapter aim is to promote the use of collaborative free mapping and the use of openstreetmap data in the field of research and their application in the implementation of tools for decision-making. Help students produce their own data of their research."},"ym-Clemson-University":{name:"Clemson Mappers",description:"YouthMappers chapter at Clemson University",extendedDescription:"Students in Clemson are supported by the Center for Geospatial Technologies, a community of interdisciplinary geospatial science practitioners supporting research, teaching, and outreach activities using technologies that enable the collection, analysis, and application of geospatial data. Students integrate geospatial technologies within their scholarly activities across all disciplines and build connections throughout the world."},"ym-College-of-William-and-Mary":{name:"All over the map!",description:"YouthMappers chapter at College of William and Mary",extendedDescription:"The students who are all over the map are supported by the Center for Geospatial Analysis, a group integrating GIS across the curriculum and providing student and faculty with hardware, software, and expertise.  Students of all backgrounds utilize GIS across campus, including environmental science and policy, geology, history, business, sociology, biology, anthropology, public policy, and marine sciences."},"ym-Cornell-University":{name:"Mapping Society",description:"YouthMappers chapter at Cornell University",extendedDescription:"Cornell students and faculty use open data and open source software to address challenges at local, national, and global scales. In doing so, we advance our academic and personal goals of developing our own skills around GIS and spatial literacy."},"ym-Cuttington-University":{name:"Cuttington University YouthMappers",description:"YouthMappers chapter at Cuttington University",extendedDescription:"The YouthMappers at Cuttington University, Suakoko, and Bong County comprised of Students from three different departments; namely, the Department of Natural Resources Management “DONRM”, Department of Environmental Sciences, and the Department of Natural Sciences. Since the establishment of the Chapter in February 2017, the overall membership is  20 students, with each department containing 5 students."},"ym-Dedan-Kimathi-University-of-Technology":{name:"GDEV",description:"YouthMappers chapter at Dedan Kimathi University of Technology",extendedDescription:"GDEV is a group of enthusiastic GIS group at DeKUT that aims at helping students share, engage and learn from each other in matters geospatial"},"ym-Dhaka-College":{name:"YouthMappers Daka College",description:"YouthMappers chapter at Dhaka College",extendedDescription:"YouthMappers DhakaCollege is an approach by students to help mapping vulnerable areas of the world as a part of Humanitarian Action. YouthMappers  gives the opportunity to the students for helping people and using mapping for humanitarian purposes. This open geographic data can be used for educational, navigational and other humanitarian purposes. Happy mapping."},"ym-Dhaka-University":{name:"Openstreetmap YouthMappers",description:"YouthMappers chapter at Dhaka University",extendedDescription:"It's a great privilege for the students of University of Dhaka to map for humanitarian purposes. Our chapter gives the opportunity to the students for helping people and use mapping for humanitarian purposes."},"ym-Eastern-University":{name:"YouthMappers at Eastern University",description:"YouthMappers chapter at Eastern University",extendedDescription:"YouthMappers at Eastern University, Bangladesh has been formed with a view to assisting people during humanitarian crisis. The students, likewise other mappers of the world, are promised to assist people in using the map for educational, navigational and other humanitarian purposes."},"ym-Far-Eastern-University-Institute-of-Technology":{name:"Junior Philippines Computer Society",description:"YouthMappers chapter at Far Eastern University -Institute of Technology",extendedDescription:"FEU has been recognized as one of the leading universities in the Philippines. Its mission centers on producing graduates who have contributed to the advancement of the country. The university continuously challenges itself to raise the bar of excellence to achieve a top-tier status not only in the Philippines but also in the South East Asian region"},"ym-Federal-School-of-Surveys":{name:"OyoMappersTeam (OMT) Oyo",description:"YouthMappers chapter at Federal School of Surveys"},"ym-Federal-University-of-Technology-Akure":{name:"YouthMappers Futa Space Club",description:"YouthMappers chapter at Federal University of Technology, Akure",extendedDescription:"Our mission is to raise the next generation of Space Leaders. Activities include research and capacity building in Remote Sensing, GIS, Climate Change, Astronomy, Cosmology, Space Engineering, Global Navigation, Robotics and Space Education."},"ym-Fourah-Bay-College":{name:"Student's Geographical Association",description:"YouthMappers chapter at Fourah Bay College",extendedDescription:"The Student's Geographical Association- YouthMappers is an association of Fourah Bay College Students with the common goals of mapping out vulnerable places in Sierra Leone and the world at large for relief and other beneficial purposes,carry out Research and other educative endeavors. The chapter consists of young people with great ideas, development oriented with the capacity to relate with each other, comprehend and implement sustainable developmental projects as a team."},"ym-General-Lansana-Conte-University":{name:"YouthMappers General Lansana Conte University",description:"YouthMappers chapter at General Lansana Conte University",extendedDescription:"The YouthMappers of the University General Lansana Conté is a non profit community willing to contribute to Map Guinea and others part of the world. We are promoting the use of GIS and Open data to build decision support tools. We also work to build capacities among the students and local communities."},"ym-George-Mason-University":{name:"Mason Mappers",description:"YouthMappers chapter at George Mason University",extendedDescription:"Mason Mappers Student Society is a humanitarian mapping student organization in the George Mason University GGS Department, and its goal is to promote education and knowledge in geo-technologies, geo-info science, to foster good global stewardship and engage in professional development while building a positive, interactive geo-community, as well as shaping students into leaders of tomorrow."},"ym-Grand-Gedeh-County-Community-College":{name:"YouthMappers at Grand Gedeh County Community College",description:"YouthMappers chapter at Grand Gedeh County Community College",extendedDescription:"The Youth Mappers of GGCCC sole intent is to put  places in and around Liberia  that are not on the map. We gather youths from the college within the Grand Gedeh Community College to make it their duties to unite and bring these places to the spot light geographically."},"ym-Gujarat-University":{name:"CCIM at Ahmedabad",description:"YouthMappers chapter at Gujarat University"},"ym-Gulu-University":{name:"CSGU Mappers",description:"YouthMappers chapter at Gulu University",extendedDescription:"The CSGU Mappers are the Computing Society at Gulu University. This chapter is creative, passionate, innovative and ready to map Uganda and the world at large, beyond other people's imagination."},"ym-Heidelberg-University":{name:"disastermappers heidelberg",description:"YouthMappers chapter at Heidelberg University",extendedDescription:"Disastermappers Heidelberg was founded in 2014 as a student initiative to build a platform for exchange between students, researchers and humanitarian actors. Disastermappers are a member of Missing Maps and are organizing mapathons, workshops and webinars in Heidelberg and beyond and support HOT and Missing Maps through research and applications."},"ym-Ignatius-Ajuru-University-of-Education":{name:"IgnatiusMappersTeam (IMT)",description:"YouthMappers chapter at Ignatius Ajuru University of Education",extendedDescription:"We are a YouthMappers Chapter of Ignatius Ajuru University of Education involved in crowdsourced mapping of our environment and remote mapping of resilient communities.We are a team of volunteers using openstreetmap and other open Geospatial source for mapping."},"ym-Indiana-University-of-Pennsylvania":{name:"Geospatial Science Club",description:"YouthMappers chapter at Indiana University of Pennsylvania"},"ym-Insititue-d-Enseignement-Superieur-de-Ruhengeri":{name:"YouthMappers at INES Ruhengeri",description:"YouthMappers chapter at Insititue d' Enseignement Superieur de Ruhengeri",extendedDescription:"We are students from Land Administration and Management and Land survey Departments from INES-Ruhengeri. We are engaged in mapping activities that create the changes toward sustainable development in our community."},"ym-Institut-Suprieur-de-Management-Kolda":{name:"Les Femmes Leaders de ISM/Kolda",description:"YouthMappers chapter at Institut Supérieur de Management Kolda",extendedDescription:"Les Femmes Leaders de ISM/Kolda is an all-female mapping group in southern Senegal looking to put Kolda and surrounding villages on the map and better understand how to use OSM."},"ym-Institute-of-Crisis-Management-Studies":{name:"Institute of Crisis Management Studies YouthMappers",description:"YouthMappers chapter at Institute of Crisis Management Studies",extendedDescription:"To develop Crisis Mappers to assist during disaster situations."},"ym-Institute-of-Finance-Management":{name:"IFM mappers",description:"YouthMappers chapter at Institute of Finance Management",extendedDescription:"This is a new  chapter at out institute and we are looking forward to use our financial education that we are receiving here at the campus  and link ig with the environment in order to develop our sustainable environment towards helping the community  with the effects of our environment in a financial ways by converting them into numbers. this is widely explained in ecosystem accounting and environmental accounts"},"ym-Institute-of-Rural-Development-Planning":{name:"Mipango YouthMappers Chapter",description:"YouthMappers chapter at Institute of Rural Development Planning",extendedDescription:"Mipango YouthMappers Chapter was introduced at IRDP on 3rd July, 2017 by Dr.Domitilla Bashemera. The founding members were  300 (190 males and 110 female) Bachelor Degree students, who were registered as members of the Chapter. Gerald Zacharia is the president of the chapter and Juster Lugira is Vice President."},"ym-Institute-of-Rural-Development-Planning-Mwanza":{name:"Youth Mappers Chapter at Institute of Rural Development Planning - Lake Zone Centre",description:"YouthMappers chapter at Institute of Rural Development Planning Mwanza"},"ym-Institute-of-Science-and-Veterinary-Medicine":{name:"YouthMappers ISSMV Dalaba",description:"YouthMappers chapter at Institute of Science and Veterinary Medicine",extendedDescription:"YouthMappers ISSMV Dabala is a non profit organisation working to promote humanitarian mapping and the use of open sources and open data to build decision making tools in Guinea."},"ym-Istanbul-Technical-University":{name:"YouthMappers ITU",description:"YouthMappers chapter at Istanbul Technical University",extendedDescription:"YouthMappers ITU is an interdisciplinary and collaborative student community to promote humanitarian mapping for vulnerable settlements and aims to develop and share strategic and innovative spatial information for the future cities by using geographical information systems and open data."},"ym-Jacksonville-State-University":{name:"JSU Disaster Mapping Team",description:"YouthMappers chapter at Jacksonville State University",extendedDescription:"The JSU Disaster Mapping Team is a program at Jacksonville State University dedicated to assisting disaster response in times of emergencies. This includes tornadoes, severe thunderstorms, floods, etc. The team is intended to be a valuable asset to surrounding counties and a conduit for the JSU Geoscience Department students to apply what they have learned in an academic setting to support emergency services. Our goal is to streamline disaster response and recovery operations while utilizing student skill sets"},"ym-Jahangirnagar-University":{name:"YouthMappers at IRS, Jahangirnagar University",description:"YouthMappers chapter at Jahangirnagar University"},"ym-Jomo-Kenyatta-University-of-Agriculture-and-Technology":{name:"Association of Geomatics Engineering Students",description:"YouthMappers chapter at Jomo Kenyatta University of Agriculture and Technology",extendedDescription:"The Association of Geomatics Engineering Students (AGES), aims at promoting GIS products and services as well as training students on the use of the same. It not only promotes socialization between the students and practicing professionals, but also provides a platform for exchanging new ideas for holding new GIS and surveying events and training at the university."},"ym-Kansas-State-University":{name:"Gamma Theta Upsilon: Beta Psi Chapter",description:"YouthMappers chapter at Kansas State University",extendedDescription:"We are the Kansas State University Chapter of Gamma Theta Upsilon, an international geography honor society with affiliation to YouthMappers. We have been active with mapping for OSM and conducted a mapathon called \"Map for Nepal,\" in which we used OpenStreetMap to digitize unmapped areas of Nepal after the earthquake in 2015."},"ym-Karatina-University":{name:"Nature Club Karatina University",description:"YouthMappers chapter at Karatina University",extendedDescription:"This chapter aims to bring together all GIS enthusiasts.They include environment experts, wildlife experts, aquatic and tourism officers, just to mention a few. Its main aim is to provide a platform where students can learn from each other and, in the process, understand how to integrate the GIS skills in their various career paths as well as provide solutions to various environmental related challenges."},"ym-Kathmandu-University":{name:"Geomatics Engineering Society,GES",description:"YouthMappers chapter at Kathmandu University",extendedDescription:"Geomatics Engineering Society (GES) established in 2008 A.D is a departmental club under Department of Civil and Geomatics Engineering (DCGE) at Kathmandu University. GES acts as a platform to develop the skills of students apart from their educational activities by focusing on activities like technical trainings, seminars, talk programs and interaction with experts from related field, sports activities etc."},"ym-Kenyatta-University":{name:"Kenyatta University GIS Club",description:"YouthMappers chapter at Kenyatta University",extendedDescription:"Kenyatta University GIS Club (KUGISC) was founded on 28th October 2016, with more than 200 students and staff from all faculty within campus as members. We are committed to empower members with spatial knowledge, skills and expertise required in understanding the Earth. We help in mapping resources within the university by incorporating geospatial data in their projects as well as fieldwork data collection."},"ym-Khulna-University":{name:"Khulna University YouthMappers",description:"YouthMappers chapter at Khulna University",extendedDescription:"KU students and faculty from multiple disciplines are experienced at creating open data for OSM to address local challenges of development, including food security and other topics."},"ym-Kumi-University":{name:"Ever Last YouthMappers",description:"YouthMappers chapter at Kumi University",extendedDescription:"This energetic group of students organizes within the faculty of Science and Information Technology."},"ym-Kwame-Nkrumah-University-of-Science-and-Technology":{name:"Kwame Nkrumah University of Science and Technology YouthMappers",description:"YouthMappers chapter at Kwame Nkrumah University of Science and Technology"},"ym-Makerere-University":{name:"Geo YouthMappers",description:"YouthMappers chapter at Makerere University",extendedDescription:"Geo YouthMappers is a Makerere University based mapping chapter esteemed to apply the spatial conception to the real world.We have collaborated on various mapping events with OSM. Our main aim is the desire to simplify data and make it readily available mostly for disaster preparedness.\"We map the world and change lives."},"ym-Mbarara-University-of-Science-and-Technology":{name:"MUST Street Mappers",description:"YouthMappers chapter at Mbarara University of Science and Technology",extendedDescription:"MUST Street Mappers is a Youth Mappers chapter at the Mbarara University of Science and Technology that is based on making our country and the world at large a better place through mapping. We base on collected information to notice patterns and data mine to present relevant and beneficial information to society."},"ym-McGill-University":{name:"Open Mapping Group McGill: A Member of the McGill Undergraduate Geography Society",description:"YouthMappers chapter at McGill University",extendedDescription:"The Open Mapping Group McGill: A Member of McGill Undergraduate Geography Society (OMG McGill) aims to connect students with open geospatial data and technologies to enhance resilience, community-building, and learning through mapping–on campus, in Montreal, in Canada, and abroad."},"ym-Miami-University":{name:"Geography and Planning Society",description:"YouthMappers chapter at Miami University",extendedDescription:"GPS at Miami University aims to create a close-knit community of planners and geographers who want to have fun, learn more about careers and higher education in their field, network, and work alongside professionals for real experience."},"ym-Moi-University":{name:"Geography Students Association",description:"YouthMappers chapter at Moi University",extendedDescription:"The Geography Students Association at Moi University (GEOSAMU) explores, discovers and aims at developing the entire world through the young Geo-Spatial analysts.  GEOSAMU is part of the Department of Geography."},"ym-Monroe-Community-College":{name:"MCC Mapping Corps",description:"YouthMappers chapter at Monroe Community College"},"ym-Montgomery-College":{name:"GeoMC",description:"YouthMappers chapter at Montgomery College",extendedDescription:"GeoMC’s mission is to provide students with hands-on experience in applying geospatial tools, collecting data, and project management. Most of our students come with a background in GIS and are geography majors. Our chapter’s members come from diverse backgrounds and we all work together to make a positive impact in the world live in."},"ym-Namibia-University-of-Science-and-Technology":{name:"Geoinformation Technology Student Society",description:"YouthMappers chapter at Namibia University of Science and Technology"},"ym-New-York-University":{name:"NYU mHealth Initiative Mapping Corps",description:"YouthMappers chapter at New York University",extendedDescription:"The NYU mobile health or “mHealth” research initiative focuses on development of systems that link people - usually via their phones - to the places that they live and traverse, and thus supports novel research on the way phones and maps can be leveraged to understand behavioral decision making and ultimately health outcomes."},"ym-Nimba-County-Community-College":{name:"Nimba County Community College Youth Mappers",description:"YouthMappers chapter at Nimba County Community College"},"ym-Njala-University-Freetown-Campus":{name:"Njala Freetown YouthMappers",description:"YouthMappers chapter at Njala University, Freetown Campus",extendedDescription:"We are students of Njala University Freetown Campus, studying Information Technology under the department of Physics and Computer Science. and we are located at Henry Street Freetown, Sierra Leone."},"ym-Njala-University-Njala-Campus":{name:"YouthMappers Njala University, Njala Campus",description:"YouthMappers chapter at Njala University, Njala Campus"},"ym-Ohio-Wesleyan-University":{name:"Environment and Wildlife Club",description:"YouthMappers chapter at Ohio Wesleyan University",extendedDescription:"Environment and Wildlife Club looks at environmental issues on campus, in Delaware, and even nationally! We create campus and community projects, explore and enjoy the outdoors, volunteer, and try to promote environmentalism in every aspect of our lives."},"ym-Oklahoma-State-University":{name:"Geography Club",description:"YouthMappers chapter at Oklahoma State University"},"ym-Open-University-of-Tanzania":{name:"Youth Mappers at Open University of Tanzania",description:"YouthMappers chapter at Open University of Tanzania",extendedDescription:"Youth Mappers at Open University of Tanzania\n\nHad been founded by members and students of Open University of Tanzania in Department of Geography who are mainly need to improve their career and help young community through joint and partnership projects with local community groups such as Mikoko Scout Group (www.msg.or.tz) and start cooperation with international colleges and universities for exchange programs in relation to Geography Studies as some programs prepared by Mikoko Scout Group which will link local university and other universities of the same interest through International Nature & Environmental Youth Camp 2019 (www.campsite.msg.or.tz/nature.html )\n\nOur chapter will soon be recognized as youth network program that will open opportunity for students to study and conduct research studies at a local levels."},"ym-Politecnico-di-Milano":{name:"PoliMappers",description:"YouthMappers chapter at Politecnico di Milano",extendedDescription:"PoliMappers is a volunteer students’ association based at Politecnico di Milano. The mission of the group is to train and motivate the next generation of volunteer mappers and to do mapping using free and open source software within the university as well as primary and secondary schools."},"ym-Queen-Mary-University-of-London":{name:"Queen Mary YouthMappers",description:"YouthMappers chapter at Queen Mary University of London",extendedDescription:"This chapter will be part of the activities of the Queen Mary Geography Society."},"ym-Rajshahi-University-of-Engineering-Technology":{name:"YouthMappers at RUET",description:"YouthMappers chapter at Rajshahi University of Engineering & Technology",extendedDescription:"The \"YouthMappers at RUET\" is a humanitarian mapping group of students of Rajshahi University of Engineering & Technology (RUET) to share, develop and practice the knowledge of GIS.  This group encourages using open source geospatial data and platform to make solution to reach the most vulnerable group of the world."},"ym-SUNY-at-Fredonia":{name:"Geoventurers",description:"YouthMappers chapter at SUNY at Fredonia",extendedDescription:"GeoVenturers is a group of students joining together across a number of majors on our campus that see geospatial technologies as a tool to serve others and to bring people together. Mentoring for the group brings in science education from the department of curriculum and instruction. We hope that we can bring our skills to play in helping make people's lives better."},"ym-Sacred-Heart-Junior-College":{name:"Youth Mappers at Sacred Heart Junior College",description:"YouthMappers chapter at Sacred Heart Junior College"},"ym-Sherubtse-College":{name:"Geographical Society",description:"YouthMappers chapter at Sherubtse College",extendedDescription:"The Geographical Society, in the Department of Geography & Planning, Sherubtse College, Royal University of Bhutan, with support from the Center for Climate Change and Spatial Information, has made several efforts to create awareness and address important issues at the local and national level. We now join hands with the international student-centered YouthMappers network on \"Mapping for Resilience\" and contributing to a global 'Happiness'!"},"ym-Sokoine-University-of-Agriculture":{name:"SMCoSE YouthMappers",description:"YouthMappers chapter at Sokoine University of Agriculture",extendedDescription:"A Chapter comprising of Environmental sciences and management students and Geography studies under the dept. of Geography and  we will be using mapping techniques, based on systems concepts and theories, can be used to facilitate, explore, and capture the different understandings of the relationships, perspectives, and boundaries involved in environmental sustainability to obtain a more complete comprehension of the concept and develop plans for action."},"ym-St.-Augustine-International-University":{name:"YouthMappers at St Augustine International University",description:"YouthMappers chapter at St. Augustine International University"},"ym-St.-Mawaggali-Trades-Training-Institute":{name:"MawaggaliMappers",description:"YouthMappers chapter at St. Mawaggali Trades Training Institute",extendedDescription:"We are the youthappers chapter at St. Mawaggali trades in choma who are want to contribute the different humantarian tasks to serve lives through mapping."},"ym-State-University-of-New-York-Geneseo":{name:"SUNY Geneseo GIS Association",description:"YouthMappers chapter at State University of New York Geneseo",extendedDescription:"We spread awareness, support, education, volunteerism, and career advancement opportunities in geographic information systems, across disciplines and departments, in the context of SUNY Geneseo, the local community, and global community."},"ym-Stella-Maris-Polytechnic":{name:"YouthMappers-SMP",description:"YouthMappers chapter at Stella Maris Polytechnic"},"ym-Technical-University-of-Kenya":{name:"Geospatial Science Student Association",description:"YouthMappers chapter at Technical University of Kenya",extendedDescription:"It's a geographical information based group with very passionate students in the relevant fields of study. We do training to members on emerging trends in the market and keep up with technological advancements"},"ym-Texas-Tech-University":{name:"YouthMappers at TTU",description:"YouthMappers chapter at Texas Tech University",extendedDescription:"As one of the co-founding chapters of the network, the TTU YouthMappers are enthusiastic to serve as interdisciplinary leaders to help create open geographic data and analyses that address locally defined development challenges worldwide. The chapter strives to exchange and collaborate with other chapters around the globe while also offering themselves as a local resource and service to Texas Tech student organizations in ways that add value to their respecitive campus activities through mapping."},"ym-The-Citadel":{name:"YouthMappers at The Citadel",description:"YouthMappers chapter at The Citadel",extendedDescription:"This chapter is also a Rotaract Club, which is an affiliate of Rotary International. Multiple members, as well as leadership have expressed an interest in YouthMappers and we would like to affiliate our Citadel Rotaract Club with YouthMappers."},"ym-The-Gambia-YMCA-University-of-the-Gambia":{name:"Connected YouthMappers",description:"YouthMappers chapter at The Gambia YMCA / University of the Gambia",extendedDescription:"Connected YouthMappers is comprised of dedicated young Gambians who aspire to change and aid national development."},"ym-The-George-Washington-University":{name:"Humanitarian Mapping Society",description:"YouthMappers chapter at The George Washington University",extendedDescription:"Models of leadership and engagement, HMS seeks to render aid and better the world through humanitarian Geographic Information Systems (GIS) projects. This co-founding affiliated chapter on the campus of GWU has a plethora of experience to share, and frequently partners directly with USAID, the American Red Cross, and the US Department of State in their DC area to expand student-led efforts and serve the global community."},"ym-The-Johns-Hopkins-University-SAIS":{name:"SAIS YouthMappers",description:"YouthMappers chapter at The Johns Hopkins University, SAIS",extendedDescription:"The mission of SAIS Youth Mappers is to provide students at the Johns Hopkins University SAIS with the opportunity to become highly skilled humanitarian mappers. As a group within the South Asia Club, its primary focus is on supporting humanitarian mapping projects in the Indo-Pacific Region."},"ym-The-Pennsylvania-State-University":{name:"Penn State GIS Coalition",description:"YouthMappers chapter at The Pennsylvania State University",extendedDescription:"The Penn State Geospatial Information Science (GIS) Coalition is an organization that offers students majoring, minoring, or sharing an interest in GIS opportunities to develop supplementary knowledge and skills necessary to succeed in the professional GIS industry."},"ym-The-University-of-Zambia":{name:"YouthMappers Unza",description:"YouthMappers chapter at The University of Zambia"},"ym-Tribhuvan-University":{name:"Geomatics Engineering Students Association",description:"YouthMappers chapter at Tribhuvan University",extendedDescription:"This organization is the student forum of Geomatics Engineering students of Tribhuvan University , Institute of Engineering on the Pashchimanchal campus. Established since the beginning of the degree program, students have been active in mapping and leadership and are thrilled to be a part of the YouthMappers network."},"ym-UW-Madison":{name:"BadgerMaps",description:"YouthMappers chapter at UW-Madison",extendedDescription:"BadgerMaps is the UW campus chapter of Youthmappers, an organization dedicated to humanitarian and community mapping services. We connect our volunteer network with opportunities to create GIS data for projects that need it."},"ym-Uganda-Christian-University-Mbale-Campus":{name:"Mappers for Life",description:"YouthMappers chapter at Uganda Christian University Mbale Campus",extendedDescription:"We are Team Mappers for life! Please come and join us as we map together!\" This group works from the Department of Information Technology at the UCU."},"ym-Uganda-Pentecostal-University":{name:"HiTech Youth Mappers",description:"YouthMappers chapter at Uganda Pentecostal University",extendedDescription:"A new Youthmappers Chapter in Western Uganda. Ready to map and provide open data with OpenStreetMap for development purposes."},"ym-Universidad-Autonoma-de-Madrid":{name:"YouthMappers at UAM",description:"YouthMappers chapter at Universidad Autonoma de Madrid"},"ym-Universidad-Distrital-Francisco-Jose-de-Caldas":{name:"YouthMappers at Bogota",description:"YouthMappers chapter at Universidad Distrital Francisco Jose de Caldas",extendedDescription:"The Universidad Distrital Francisco José de Caldas is a public, coeducational, research university based in Bogotá, Colombia with a population of 26,140 students."},"ym-Universidad-Nacional-Autnoma-de-Honduras":{name:"PumaGis Hn",description:"YouthMappers chapter at Universidad Nacional Autónoma de Honduras"},"ym-Universidad-Nacional-de-Colombia":{name:"Grupo UN",description:"YouthMappers chapter at Universidad Nacional de Colombia",extendedDescription:"Students are uniting to map and network with university students across the country of Colombia and across the globe.  Geographic specialties include affiliation with microbiology and health disciplines."},"ym-Universidad-Nacional-de-Ingenieria":{name:"Yeka Street MGA",description:"YouthMappers chapter at Universidad Nacional de Ingenieria",extendedDescription:"YEKA STREET is a work team constituted by students from Universidad Nacional de Ingenieria at Managua, Nicaragua. With the principal purpose of apply our knowledge and skills using many tools and apps to map areas in our cities and contribute to the development community projects and disasters relieve plans. We want to lead the way adding more students from all careers and universities in our country to join us at this cause, increasing in this way the life level and reducing the population vulnerability."},"ym-Universidad-Politcnica-de-Madrid":{name:"Mapeo Humanitario",description:"YouthMappers chapter at Universidad Politécnica de Madrid",extendedDescription:"Geo-volunteering group formed at Moncloa Campus on November 2017. Around 20 members from three Universities (Complutense, CEU and UPM). Undergraduate students, MSc and PhD students collaborate together with organizations (MSF, Acción contra el Hambre,...) supported by trainers from Geoinquietos. Official recognition by UPM as Educative Innovation Project (Code  IE1718.0411)"},"ym-Universidad-de-Antioquia":{name:"Geomatica UDEA",description:"YouthMappers chapter at Universidad de Antioquia",extendedDescription:"We are a group interested in geospatial data, voluntary cartography, and participating in mapping with others in our country and within the YouthMappers network."},"ym-Universidad-de-Costa-Rica":{name:"YouthMappers de Universidad de Costa Rica",description:"YouthMappers chapter at Universidad de Costa Rica",extendedDescription:"YouthMappers de Universidad de Costa Rica nace en función de acción social para y por miembros de comunidades distintas según temáticas de involucramiento, interacción y representación de variables dentro de un espacio geográfico definido (un territorio) Gracias a las herramientas de OpenStreetMaps tenemos la viabilidad de poder obtener, validar y compartir la información generada para comprobación y uso destinadas a las comunidades o el interesado en tales temáticas objetivas."},"ym-Universidad-de-La-Guajira":{name:"Grupo Mesh",description:"YouthMappers chapter at Universidad de La Guajira",extendedDescription:"Grupo Mesh is a student organization at the Universidad de la Guajira in Colombia, including students from the program of Environmental Engineering who learn cartography and open mapping."},"ym-Universidad-de-Los-Andes":{name:"Cartografos Uniandes",description:"YouthMappers chapter at Universidad de Los Andes",extendedDescription:"We are a circle of student participation that seeks to use mapping and spatial reasoning as a means to create bonds of cooperation and integration between the university and society by addressing different spatial, social, political , economic and cultural dynamics."},"ym-Universidad-de-Puerto-Rico-Rio-Piedras":{name:"UPR YouthMappers",description:"YouthMappers chapter at Universidad de Puerto Rico - Rio Piedras"},"ym-Universidad-de-San-Buenaventura":{name:"YouthMappers San Buenaventura",description:"YouthMappers chapter at Universidad de San Buenaventura",extendedDescription:"We are pleased to join YouthMappers mapping for a better world and community."},"ym-Universidade-Eduardo-Mondlane":{name:"Comunidade YouthMappers Moçambique",description:"YouthMappers chapter at Universidade Eduardo Mondlane",extendedDescription:"We are a student group that intends to join Mozambican society to create a resilient community of humanitarian mapping. The community intend to map the physical occupation of our Country and create open geographic data, accessible to the public and able to be used in several areas without associated costs."},"ym-Universit-Gaston-Berger":{name:"YouthMappers at UGB",description:"YouthMappers chapter at Université Gaston Berger",extendedDescription:"YouthMappers UGB is made up of young students and researchers who are passionate about mapping. Our aim is to improve students' skills in the field of cartography and to participate in the creation of open geographic data that responds to development challenges around the world and particularly in Africa."},"ym-Universit-Mohammed-V-Rabat":{name:"Brahmapoutre at Rabat",description:"YouthMappers chapter at Université Mohammed V Rabat",extendedDescription:"This chapter sees participation in the YouthMappers program as an oppourtunity to share our knowlege create new working relationships with other chapters in different countries"},"ym-Universit-de-NZrkor":{name:"Youthmappers à N'Zérékoré",description:"YouthMappers chapter at Université de N'Zérékoré",extendedDescription:"YouthMappers est un groupe qui permet de faire la cartographie des communautés enclavées et à la prise des décisions en cas de catastrophes ou épidémies. Elle permet aussi la production et l'utilisation des données en accès gratuit."},"ym-Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako":{name:"Etudiant au Laboratoire HoPE",description:"YouthMappers chapter at Université des Sciences Sociale et de Gestion de Bamako"},"ym-Universitas-Negeri-Makassar":{name:"Kontur Geografi",description:"YouthMappers chapter at Universitas Negeri Makassar"},"ym-University-Muhammadiyah-Surakarta":{name:"SpaceTime",description:"YouthMappers chapter at University Muhammadiyah Surakarta",extendedDescription:"SpaceTime is a community mapping in the Faculty of Geography of Muhammadiyah University of Surakarta. SpaceTime was founded by Bruce Maldy Pratama, Mukhlis Akbar and Irfandi Fauzi. They are active students in the Faculty of Geography University Muhammadiyah Surakarta."},"ym-University-of-California-Davis":{name:"Mapping Club",description:"YouthMappers chapter at University of California, Davis"},"ym-University-of-Cape-Coast":{name:"UCC Geographical Society",description:"YouthMappers chapter at University of Cape Coast",extendedDescription:"We are a society that encompasses all students who are reading and read geography in the Department of Geography and Regional Planning at the University of Cape Coast. Our main aim is to promote interest in the discipline inside and outside of the classroom. Our motto is “We comprehend the Earth and its inhabitants.”"},"ym-University-of-Central-Florida":{name:"Geospatial Information Society",description:"YouthMappers chapter at University of Central Florida",extendedDescription:"Our mission is to foster a social and educational environment for all majors who are interested in the discussion and application of GIS. Group and community events throughout the academic year organize students to volunteer to help local and regional communities by using community-based GIS projects and educating local middle and high school students on the use and application of GIS."},"ym-University-of-Chicago":{name:"Tobler Society",description:"YouthMappers chapter at University of Chicago"},"ym-University-of-Dar-es-Salaam":{name:"YouthMappers at University of Dar es Salaam",description:"YouthMappers chapter at University of Dar es Salaam",extendedDescription:"The purpose of the University of Dar es Salaam YouthMappers  is to use and promote open source data and GIS technologies to map potential disaster areas, provide resources for emergency management, connect its members with open source and GIS organizations in the city of Dar es Salaam, and serve any upcoming needs of our project partners ."},"ym-University-of-Energy-and-Natural-Resources":{name:"Eco-Club",description:"YouthMappers chapter at University of Energy and Natural Resources",extendedDescription:"To provide a sound education to all citizens about the deteriorating environment and provide utmost use of recreation of the environment for human survival."},"ym-University-of-Exeter":{name:"University of Exeter British Red Cross Missing Maps",description:"YouthMappers chapter at University of Exeter",extendedDescription:"We are a team of enthusiastic Geographers with comprehensive knowledge of GIS. We are passionate about supporting the British Red Cross Society with various humanitarian aid efforts. We are also important teachers of the significance of mapping remotely sensed data and how this helps on the ground. Our mapathons have themed academic focuses that highlight the different GIS research in our geography department, while also functioning as employability awareness events which we use to invite speakers in to talk about their GIS/British Red Cross careers."},"ym-University-of-Ghana":{name:"University of Ghana YouthMappers",description:"YouthMappers chapter at University of Ghana",extendedDescription:"UG YouthMappers consists of both graduate and undergraduate students possessing knowledge and skills in GIS and Remote Sensing. The club is composed of an energetic team that is poised to address social issues and mitigate environmental problems through mapping. Our fundamental principles are capacity building, empowerment and teamwork."},"ym-University-of-Liberia-YouthMappers":{name:"University of Liberia YouthMappers",description:"YouthMappers chapter at University of Liberia YouthMappers",extendedDescription:"The University of Liberia YouthMappers is a chapter organization of the Global YouthMappers. We are a nonprofit student mapping organization focus on mapping for Liberia’s development and the World at large. The purpose of this organization shall be to utilize technology and geospatial knowledge as means of creating and developing maps; collecting and analyzing data that will address local and worldwide challenges. Our aim is to support and create opportunity for students to develop interest and skills in the fields of mapping. We envision a united student community that are collaborative, active and are willing to work with the University of Liberia YouthMappers in order to better the lives of others."},"ym-University-of-Malawi":{name:"Chanco Malawi YouthMappers",description:"YouthMappers chapter at University of Malawi",extendedDescription:"Chanco Malawi YouthMappers is the student mapping organization for the University of Malawi's Chancellor College. The students in this chapter focus on mapping for Malawi's development and science needs."},"ym-University-of-Maryland-College-Park":{name:"Geography Club",description:"YouthMappers chapter at University of Maryland - College Park",extendedDescription:"The mission of the Geography Club at the University of Maryland College Park is to engage and encourage students to explore geographic interests within the campus and the community."},"ym-University-of-Mines-and-Technology":{name:"UMaT YouthMappers",description:"YouthMappers chapter at University of Mines and Technology",extendedDescription:"UMaT YouthMappers is a group of volunteer students who seek to grant students the opportunity to improve skills in the field of mapping & creating open geographic data and analyses that address locally defined development challenges worldwide."},"ym-University-of-Nairobi":{name:"Geospatial Engineering Students Association",description:"YouthMappers chapter at University of Nairobi",extendedDescription:"UN students are working with the local OSM community, Map Kibera, and GrouthTruth to learn about open mapping and contribute data for needs in their urban communities."},"ym-University-of-Nigeria-Enugu-Campus":{name:"LionMappersTeam (LMT) Enugu",description:"YouthMappers chapter at University of Nigeria, Enugu Campus",extendedDescription:"The LionMappersTeam(LMT)Enugu Campus is an affiliate of YouthMappers Network, with the sole aim of providing members the opportunity to learn and improve their skills in the field of Geoinformatics and to create open geographic data and analysis that addresses locally defined challenges globally. It is a team of volunteers for Crowdsourced Mapping and Geographic Information provision using Openstreetmap, Citizen Science and other Geospatial Technology for research, training and response to resilient community challenges. We are involved in Web-Cartography, GIS and Remote Sensing Applications and ResearchWe are passionate about Volunteered Geographic Information.Paticipatory GIS and Citizen Science.Our major activities include online crowdsourced-Cartography, Field Mapping ,Training workshops and outreaches to High School as well as Humanitarian/Disaster Response Mapping."},"ym-University-of-Nigeria-Nsukka":{name:"LionMappersTeam (LMT) Nsukka",description:"YouthMappers chapter at University of Nigeria, Nsukka",extendedDescription:"The LionMappersTeam is an affiliate of YouthMappers Network, with the sole aim of providing members the opportunity to learn and improve their skills in the field of mapping science and to create open geographic data and analysis that addresses locally defined challenges globally. It is a team of volunteers for crowdsourced mapping and geographic information provision using Openstreetmap, citizen science  and other geospatial  technology for research, training and response to resilient community challenges. We are involved in GIS and Remote Sensing Applications and Research.Paticipatory GIS and Citizen Science,field mapping ,training workshops and outreaches to High Schools."},"ym-University-of-North-Texas":{name:"UNT Geography Club",description:"YouthMappers chapter at University of North Texas",extendedDescription:"The Geography Club is a student organization at University of North Texas that welcomes all students who are interested in geography. The objective of the Geography Club is to promote interest in Geography, the Major and the Geography Department along with fellowship among students and faculty. The club also seeks to represent student needs and wants in regard to the study of geography and to provide a forum for the presentation of innovative ideas to the benefit of the University community."},"ym-University-of-Northern-Colorado":{name:"UNCO Geography and GIS Club",description:"YouthMappers chapter at University of Northern Colorado",extendedDescription:"Official Geography and GIS Club chapter affiliated with the University of Northern Colorado where our aim is to learn, share and connect with those around us. #MakingSenseOfTheWorld"},"ym-University-of-Oregon":{name:"Map by Northwest",description:"YouthMappers chapter at University of Oregon",extendedDescription:"Map By Northwest aims to engage undergraduate students at the University of Oregon in mapping projects to assist in humanitarian causes and for conducting geographic research. We welcome students from all disciplines to join us in our mapping adventures."},"ym-University-of-Panama":{name:"YouthMappers UP",description:"YouthMappers chapter at University of Panama",extendedDescription:"Student mappers in Panama work with open spatial data to help identify, define, address, and create meaning about locally defined development challenges. They collaborate with students from other countries on community mapping topics from ecotourism to food security, from biodiversity to indigenous issues, promoting a humanistic vision through scientific perspectives."},"ym-University-of-Port-Harcourt":{name:"UniqueMappersTeam (UMT) Port Harcourt",description:"YouthMappers chapter at University of Port Harcourt",extendedDescription:"UniqueMappersTeam(UMT)Port Harcourt  is an action group and a team of volunteers for a collaborative online mapping targeted at training and empowering members with trending mapping skills  to create open geospatial data and analysis that addresses locally defined challenges for geoinformation and to provide humanitarian mapping  services to resilient communities in Niger Delta,Nigeria and elsewhere.We promote Crowdsoucred Mapping and Geographic information volunteering using OpenStreetMap(OSM) platform and other accessible platforms for Rapid Response Mapping,Disaster Mapping,Geo-intelligence Mapping,Map updates and training.Its an affiliate Campus chapter of Humanitarian OpenStreetMap Team(HOT).It is a project-task team of YouthMappers that provide opportunity for members to learn and improve their skills in Geoinformatics so as to explore global opportunities in the field of Mapping and Geoinformation."},"ym-University-of-Pretoria":{name:"Centre for Geoinformation Science",description:"YouthMappers chapter at University of Pretoria",extendedDescription:"The students who map Pretoria are supported by the University of Pretoria's Centre for Geoinformation Science, a platform from where the excellence of UP individuals and teams involved in geographic information science (GISc) research, education and training, professional development and community engagement is encouraged and strengthened through collaborations, education and training and  alliances within South Africa and abroad."},"ym-University-of-Redlands":{name:"URSpatial Geo-Thinkers",description:"YouthMappers chapter at University of Redlands",extendedDescription:"To build upon the members' GIS skills and knowledge of the tools and methods through applied social engagement as well as to educate the campus community about the power of mapping and spatial analysis through community service events."},"ym-University-of-Rwanda-Huye-Campus":{name:"Rwanda YouthMappers",description:"YouthMappers chapter at University of Rwanda - Huye Campus",extendedDescription:"Based on the commitment and the purpose of promoting mapping, and the information from YouthMappers public talks, we have organized as students in Geography department who are committed in mapping to found a chapter of our Campus. We have supported by our Facilitator Dr. Gaspard Rwanyiziri (Director of CGIS-Rwanda) and various lecturer mentors."},"ym-University-of-South-Carolina":{name:"Geography Graduate Student Association",description:"YouthMappers chapter at University of South Carolina",extendedDescription:"The GGSA is a fully student-run organization, designed to serve as an advocate and resource for all geography graduate students by filling the role of liaison between the department and students. Our goal is to further professional, academic, and personal development of graduate students interested in the field of geography and its sub disciplines."},"ym-University-of-Southern-California":{name:"SC Mappers",description:"YouthMappers chapter at University of Southern California",extendedDescription:"We see the world differently: we view it through a spatial lens. With the power of spatial thinking, we connect place and space to help address global challenges. Collaborate with us!"},"ym-University-of-Vermont":{name:"University of Vermont Humanitarian Mapping Club",description:"YouthMappers chapter at University of Vermont"},"ym-University-of-Victoria":{name:"Society of Geography Students",description:"YouthMappers chapter at University of Victoria",extendedDescription:"SOGS seeks to promote and represent social and academic interests within the Department of Geography. This is expressed by four key goals: To provide a forum for the discussion of matters concerning the quality and accessibility of education within geography; to provide a means of expressing a consensus of student opinion to deparhnental faculty through representation at deparkrnental meetings and on departrnental committees; to undertake anangements for such activities as are for the benefit of students and are seen to be within the field of interest of students in geography; to act as a liaison through the UVSS and the Course Union Council with other student groups on campus"},"ym-University-of-Warwick":{name:"University of Warwick Resilience Mapping Society",description:"YouthMappers chapter at University of Warwick",extendedDescription:"We are a group of enthusiastic mappers based at Warwick University. Our aim is to get people excited about humanitarian mapping and help them understand the impact this activity has on the field. We are closely aligned with Missing Maps and Doctors Without Borders UK and focus on HOT tasks in our mapping activities and workshops. Our mapathons are listed on the Missing Maps page whenever they are scheduled."},"ym-University-of-Wyoming":{name:"Gamma Theta Upsilon/Geography Club",description:"YouthMappers chapter at University of Wyoming"},"ym-University-of-Zimbabwe":{name:"UZMappers",description:"YouthMappers chapter at University of Zimbabwe",extendedDescription:"UzMappersTeam Zimbabwe is a team of Volunteers using OpenStreetMap for Open Data Mapping and Humanitarian Disaster response mapping .The team empowers its members with open source geospatial technology skills."},"ym-University-of-the-Philippines-Resilience-Institute":{name:"YouthMappers UP Resilience Institute",description:"YouthMappers chapter at University of the Philippines Resilience Institute",extendedDescription:"The UP Resilience Institute was established in 2016 with a mission statement to empower local communities through multidisciplinary research and actions toward resilience. Through UP NOAH Center, and the help of different organizations, we have provided building exposure maps for 17 provinces out of the 82 and uploaded more than 4 million footprints to Open Street Maps."},"ym-University-of-the-West-Indies-Mona-Campus":{name:"Libraries Outreach - ODL",description:"YouthMappers chapter at University of the West Indies, Mona Campus",extendedDescription:"The UWI, Mona Campus Library engages in public, outreach and special projects. This will allow our library the means to be a catalyst for spatial literacy and advocate for spatial data sharing and access to Jamaican and Caribbean interests. We have disaster relief and communication needs and   extensive earth science and geo-hazards needs to better serve our campus and community. Specifically, we hace a Science Library to showcase such to all faculty and students."},"ym-Vassar-College":{name:"Hudson Valley Mappers",description:"YouthMappers chapter at Vassar College",extendedDescription:"Our mission is to provide a multi-disciplinary platform for peers, educators, and community organizations to engage in local mapping projects with a focus on strengthening our local ecosystems, our built environment, and the health of our community. We also seek to contribute geospatial support for global humanitarian aid and development efforts."},"ym-Villanova-University":{name:"The Villanova Globeplotters",description:"YouthMappers chapter at Villanova University",extendedDescription:"The Villanova Globeplotters is built on Villanova’s Augustinian principle of selfless-service to the global community. Mixed with relaxed social interaction, we strive to provide geospatial outreach to those in need regardless of participating students’ race, academic major, student group association, or college career level."},"ym-West-Virginia-University":{name:"Maptime Morgantown",description:"YouthMappers chapter at West Virginia University",extendedDescription:"Working as a collaborative team, this co-founding chapter focuses on providing an open learning environment for those interested in working on projects that intersect international development, emergency response, and geographic information science.\nThey connect beginners and experts by providing technical training and experience in building meaningful and useful geographic infrastructure data, while connecting to sister cities around the world."},"ym-Western-Michigan-University":{name:"Geography Club",description:"YouthMappers chapter at Western Michigan University"},"ym-Yarmouk-University":{name:"YouthMappers at YU",description:"YouthMappers chapter at Yarmouk University",extendedDescription:"YouthMappers chapter at YU is the first mapping group in the Middle East and North Africa region where refugees, drought, and poverty are rising crises and in urgent need for humanitarian mapping  activities to mitigate the consequences of such crises. YU Mappers are encouraged to use open data to address challenges in MENA region to bring relief and development to target areas within the region."}}};
26820
26821         var features = [{type:"Feature",id:"cape_coast_gh.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-1.6,5],[-1.6,5.4],[-1,5.4],[-1,5],[-1.6,5]]]}},{type:"Feature",id:"india_andhrapradesh.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[76.76365,14.98503],[76.78952,15.01589],[76.77614,15.05336],[76.80034,15.09466],[76.86072,15.05669],[76.87678,15.02859],[76.94279,15.02725],[76.98159,15.0103],[77.00077,15.02948],[77.04671,15.02904],[77.07882,15.00004],[77.1096,15.02859],[77.12744,15.09371],[77.14751,15.10753],[77.16873,15.17462],[77.14554,15.22413],[77.15223,15.29148],[77.12118,15.29418],[77.11387,15.3334],[77.07705,15.32577],[77.0421,15.36103],[77.027,15.44075],[76.97414,15.50807],[77.02697,15.5037],[77.03509,15.63815],[77.08728,15.65733],[77.08192,15.69524],[77.05293,15.72914],[77.05561,15.82458],[77.03333,15.85326],[77.07659,15.90991],[77.14448,15.94265],[77.2479,15.96378],[77.3564,15.95008],[77.42745,15.94836],[77.46652,15.93453],[77.61152,15.91691],[77.6536,15.88393],[77.72205,15.89199],[77.80554,15.87083],[77.8616,15.88138],[77.89376,15.90154],[78.00803,15.86506],[78.03641,15.90188],[78.06997,15.85048],[78.10755,15.83401],[78.17153,15.85511],[78.17371,15.89569],[78.20995,15.9197],[78.2507,15.96993],[78.2682,16.02857],[78.29785,16.01169],[78.40727,16.0756],[78.45394,16.07503],[78.55814,16.04517],[78.59917,16.08361],[78.64311,16.08312],[78.68277,16.03346],[78.73718,16.0097],[78.78267,16.02125],[78.8419,16.08707],[78.83228,16.13919],[78.87606,16.13902],[78.88876,16.0879],[78.92138,16.10307],[78.9049,16.17711],[78.92807,16.19871],[78.98352,16.21074],[79.01236,16.24173],[79.09802,16.2236],[79.12305,16.23187],[79.1593,16.20893],[79.22111,16.23251],[79.23438,16.32518],[79.21143,16.35493],[79.21112,16.44396],[79.22091,16.51631],[79.25265,16.57381],[79.37802,16.58412],[79.41773,16.57986],[79.44409,16.61796],[79.49421,16.63408],[79.53884,16.63046],[79.60613,16.67239],[79.63566,16.6594],[79.68544,16.69755],[79.72286,16.68966],[79.74673,16.72106],[79.79256,16.72485],[79.81796,16.69098],[79.84286,16.70561],[79.88555,16.68642],[79.90723,16.63408],[79.95306,16.63621],[80.00576,16.70857],[80.05536,16.74833],[80.07093,16.81323],[80.0332,16.85233],[79.99173,16.86303],[80.04569,16.96517],[80.08405,16.96339],[80.134,16.98524],[80.18217,17.04501],[80.19555,17.01825],[80.26201,17.01066],[80.28877,16.97677],[80.31553,16.91254],[80.3191,16.87106],[80.35879,16.85501],[80.37306,16.8113],[80.41856,16.84252],[80.45647,16.78989],[80.56262,16.76268],[80.6041,16.78766],[80.55593,16.81843],[80.56485,16.86883],[80.59027,16.91165],[80.53184,16.95001],[80.44264,16.9451],[80.35835,16.97052],[80.38778,17.0071],[80.36682,17.0566],[80.39001,17.07623],[80.42034,17.02494],[80.48234,17.05036],[80.49616,17.10789],[80.56039,17.13822],[80.68393,17.06865],[80.82309,17.03787],[80.85877,17.05081],[80.87714,17.10478],[80.88011,17.1644],[80.91689,17.15439],[80.91892,17.22003],[80.99838,17.19012],[81.03576,17.19196],[81.05653,17.22041],[81.16295,17.23278],[81.18035,17.25463],[81.17053,17.29656],[81.19016,17.32733],[81.26732,17.3202],[81.31385,17.37576],[81.24132,17.40667],[81.22725,17.43762],[81.17746,17.45203],[81.15755,17.47938],[81.11343,17.49477],[81.08374,17.45957],[81.01198,17.49248],[80.99962,17.53013],[80.95671,17.58749],[80.85431,17.59347],[80.86444,17.62914],[80.90266,17.63912],[80.90684,17.67993],[80.89153,17.74125],[80.94636,17.76025],[81.03556,17.74495],[81.07481,17.76038],[81.08891,17.81081],[81.15938,17.85273],[81.19194,17.84694],[81.25394,17.81215],[81.40915,17.80501],[81.47025,17.8233],[81.48096,17.80278],[81.5541,17.81616],[81.61119,17.81527],[81.66293,17.87682],[81.70307,17.86121],[81.78246,17.90982],[81.80119,17.93614],[81.89932,17.9687],[82.0019,18.02356],[82.03316,18.06597],[82.08072,18.07378],[82.14091,18.0439],[82.17228,18.04993],[82.25028,17.9883],[82.27583,17.995],[82.2667,18.04332],[82.29628,18.06899],[82.34354,18.07485],[82.33329,18.1422],[82.30608,18.19572],[82.33284,18.21579],[82.33685,18.26619],[82.37209,18.27421],[82.39305,18.30633],[82.33462,18.31703],[82.38458,18.36922],[82.36138,18.4098],[82.43513,18.48477],[82.48969,18.52285],[82.53139,18.51177],[82.54422,18.41638],[82.60918,18.37427],[82.59758,18.26516],[82.64005,18.23708],[82.67329,18.29908],[82.70644,18.30476],[82.77538,18.33958],[82.79251,18.36262],[82.78448,18.42803],[82.80742,18.44772],[82.89919,18.40074],[82.91103,18.36453],[82.98471,18.36362],[83.0002,18.38368],[83.04775,18.37883],[83.07472,18.401],[83.04552,18.44345],[83.05997,18.48603],[83.09665,18.54123],[83.05931,18.54334],[83.0336,18.57266],[83.05776,18.62215],[83.09414,18.63021],[83.15495,18.70089],[83.23099,18.75616],[83.27407,18.76523],[83.28745,18.79777],[83.36791,18.81557],[83.40661,18.84174],[83.39569,18.87914],[83.35554,18.92896],[83.36892,18.96132],[83.32119,18.97447],[83.3428,19.01449],[83.41665,19.00408],[83.45049,18.95576],[83.48237,19.00825],[83.46716,19.07746],[83.51314,19.07262],[83.52143,19.03271],[83.61209,19.10076],[83.62679,19.14969],[83.69206,19.05202],[83.71342,18.99346],[83.73398,18.98382],[83.79596,19.01607],[83.84255,18.9178],[83.85136,18.86003],[83.87788,18.82716],[84.05557,18.79246],[84.0894,18.75373],[84.16689,18.78415],[84.22422,18.79642],[84.2535,18.78262],[84.2914,18.8],[84.33966,18.80123],[84.39349,18.89211],[84.43671,18.92277],[84.42292,18.94711],[84.47894,18.99017],[84.51711,19.04634],[84.62687,19.08543],[84.61653,19.12624],[84.66828,19.13065],[84.6721,19.16552],[84.71352,19.1524],[84.70468,19.11772],[84.76857,19.08003],[85.15481,18.87834],[80.22545,13.48346],[80.14774,13.49443],[80.08045,13.49111],[80.08,13.52565],[80.00213,13.53964],[80.01841,13.50074],[79.97441,13.46419],[79.96622,13.38714],[79.93821,13.34898],[79.86379,13.31632],[79.8129,13.31712],[79.79245,13.29487],[79.73437,13.27843],[79.79598,13.24103],[79.75102,13.21106],[79.68369,13.24845],[79.68102,13.29448],[79.57781,13.26176],[79.54809,13.32329],[79.42941,13.33391],[79.41957,13.24971],[79.43293,13.1966],[79.39666,13.19679],[79.36005,13.17504],[79.36244,13.13752],[79.31106,13.1268],[79.28351,13.14994],[79.23853,13.1464],[79.20549,13.10147],[79.16498,13.01908],[79.06532,13.04951],[78.99361,13.08754],[78.95768,13.07478],[78.81243,13.08649],[78.75104,13.05634],[78.71387,13.06691],[78.70525,13.01518],[78.6625,13.02861],[78.63167,12.98455],[78.63629,12.92494],[78.60313,12.84933],[78.59178,12.77804],[78.55737,12.73938],[78.55312,12.69582],[78.50595,12.74103],[78.50517,12.68031],[78.46933,12.67292],[78.47136,12.62811],[78.3799,12.62235],[78.30177,12.66322],[78.27563,12.70205],[78.23857,12.6994],[78.23025,12.75702],[78.2528,12.82236],[78.25198,12.85741],[78.31411,12.85733],[78.32741,12.90272],[78.35638,12.93819],[78.38944,12.90542],[78.41213,12.94302],[78.46924,12.97546],[78.46092,13.03126],[78.5219,13.06638],[78.54509,13.11098],[78.57956,13.21461],[78.57797,13.28201],[78.51185,13.28722],[78.44649,13.30825],[78.43949,13.327],[78.36546,13.36503],[78.38151,13.40071],[78.37259,13.46181],[78.38241,13.52477],[78.40574,13.57659],[78.39268,13.5915],[78.32632,13.59445],[78.25894,13.58461],[78.20436,13.60369],[78.16645,13.65721],[78.11784,13.65587],[78.12295,13.71405],[78.09423,13.74251],[78.12795,13.78565],[78.11441,13.8625],[78.04999,13.89494],[78.04642,13.86104],[78.00476,13.87355],[77.95566,13.82664],[77.95098,13.88825],[77.98752,13.89784],[77.97015,13.95827],[77.92868,13.90698],[77.89567,13.93954],[77.83858,13.93508],[77.81494,13.91679],[77.83635,13.86863],[77.79261,13.8211],[77.6267,13.76984],[77.53033,13.69514],[77.45805,13.68671],[77.47014,13.7502],[77.45855,13.79212],[77.41662,13.80595],[77.43223,13.84163],[77.32787,13.83226],[77.31449,13.86393],[77.25829,13.84609],[77.21904,13.86794],[77.18236,13.8682],[77.15308,13.84278],[77.18088,13.78098],[77.17444,13.76135],[77.10308,13.76759],[77.06516,13.74405],[77.0277,13.77651],[77.00003,13.74482],[76.97723,13.81547],[77.01323,13.85558],[77.04239,13.9332],[76.99574,13.96114],[77.00108,13.98729],[76.93324,14.03009],[76.97878,14.07002],[76.89779,14.16518],[76.96469,14.18169],[77.02696,14.17477],[77.02154,14.13052],[77.03389,14.05587],[77.13014,14.04533],[77.1441,14.00245],[77.28518,14.01342],[77.31997,14.03126],[77.3503,13.95767],[77.35476,13.90325],[77.39713,13.90415],[77.42702,13.98353],[77.39,14.01386],[77.33291,14.02947],[77.40204,14.1102],[77.38331,14.13607],[77.39624,14.17175],[77.51711,14.17844],[77.49659,14.23419],[77.50284,14.27834],[77.45021,14.28414],[77.44887,14.31625],[77.37617,14.33081],[77.38984,14.26937],[77.28608,14.2828],[77.28786,14.33766],[77.23835,14.31759],[77.1661,14.34301],[77.13845,14.33721],[77.11838,14.29395],[77.11539,14.22104],[77.0818,14.2159],[77.05638,14.24623],[76.9426,14.2444],[76.92967,14.27651],[76.94748,14.31179],[76.9038,14.32379],[76.88373,14.35055],[76.88774,14.3947],[76.97828,14.48256],[76.91138,14.48836],[76.87481,14.47275],[76.83244,14.52761],[76.80434,14.53207],[76.76554,14.60075],[76.77639,14.68002],[76.80359,14.7398],[76.78371,14.78455],[76.83756,14.78968],[76.86771,14.96792],[76.76736,14.97267],[76.76365,14.98503]]]}},{type:"Feature",id:"india_karnataka.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[73.87267,14.75312],[74.17989,14.95708],[74.2532,14.95804],[74.29821,15.04123],[74.31574,15.18805],[74.27607,15.27727],[74.32187,15.34414],[74.28027,15.38891],[74.27464,15.54999],[74.24074,15.66684],[74.11652,15.65308],[74.16212,15.75075],[74.28923,15.73953],[74.36893,15.78648],[74.34579,15.84959],[74.43203,15.95338],[74.46484,16.0421],[74.37226,16.07692],[74.48045,16.14527],[74.50509,16.22265],[74.31843,16.32588],[74.33806,16.40125],[74.26427,16.53936],[74.33986,16.54825],[74.54427,16.63407],[74.6313,16.57831],[74.68877,16.71489],[74.91203,16.7883],[74.99259,16.95146],[75.09075,16.95064],[75.18186,16.84374],[75.26705,16.86247],[75.28311,16.95524],[75.46783,16.98524],[75.51065,16.94733],[75.66898,16.97766],[75.67389,17.11369],[75.62834,17.18928],[75.65739,17.27069],[75.58469,17.34963],[75.63468,17.47651],[75.77995,17.37683],[75.89432,17.40292],[75.93159,17.32197],[76.11996,17.37007],[76.22917,17.36301],[76.38171,17.31172],[76.37153,17.4341],[76.33086,17.46872],[76.41561,17.60431],[76.48659,17.66155],[76.48652,17.71358],[76.56488,17.76523],[76.66314,17.68771],[76.8094,17.8693],[76.92164,17.94103],[76.9513,18.05843],[76.92422,18.14531],[77.14325,18.20848],[77.20119,18.27828],[77.24726,18.41311],[77.31257,18.43674],[77.41407,18.39352],[77.3672,18.30846],[77.46332,18.26219],[77.57345,18.24294],[77.59821,18.0861],[77.64737,17.99934],[77.6208,17.9031],[77.5709,17.86625],[77.53999,17.72825],[77.45138,17.69052],[77.44541,17.58272],[77.6912,17.50865],[77.53911,17.44295],[77.52471,17.36431],[77.45747,17.34038],[77.3772,17.14285],[77.46328,17.11129],[77.50069,17.01255],[77.45223,16.91995],[77.47617,16.7804],[77.46008,16.61106],[77.37653,16.48644],[77.25617,16.47308],[77.28927,16.408],[77.41673,16.36775],[77.52418,16.3753],[77.59655,16.31743],[77.49303,16.25534],[77.51178,15.92828],[77.2479,15.96378],[77.07659,15.90991],[77.03509,15.63815],[77.027,15.44075],[77.0421,15.36103],[77.15223,15.29148],[77.16873,15.17462],[77.1096,15.02859],[76.98159,15.0103],[76.87678,15.02859],[76.80034,15.09466],[76.76736,14.97267],[76.86771,14.96792],[76.83756,14.78968],[76.77639,14.68002],[76.76554,14.60075],[76.87481,14.47275],[76.88373,14.35055],[76.94748,14.31179],[76.9426,14.2444],[77.05638,14.24623],[77.1661,14.34301],[77.28608,14.2828],[77.38984,14.26937],[77.44887,14.31625],[77.50284,14.27834],[77.51711,14.17844],[77.39624,14.17175],[77.40204,14.1102],[77.33291,14.02947],[77.42702,13.98353],[77.35476,13.90325],[77.31997,14.03126],[77.1441,14.00245],[77.03389,14.05587],[77.02696,14.17477],[76.89779,14.16518],[76.97878,14.07002],[76.93324,14.03009],[77.04239,13.9332],[76.97723,13.81547],[77.06516,13.74405],[77.17444,13.76135],[77.18236,13.8682],[77.32787,13.83226],[77.43223,13.84163],[77.47014,13.7502],[77.53033,13.69514],[77.6267,13.76984],[77.79261,13.8211],[77.89567,13.93954],[77.95098,13.88825],[78.04999,13.89494],[78.11441,13.8625],[78.11784,13.65587],[78.20436,13.60369],[78.40574,13.57659],[78.37068,13.46984],[78.40217,13.31113],[78.58854,13.26912],[78.5219,13.06638],[78.46924,12.97546],[78.35684,12.94022],[78.31447,12.8595],[78.25248,12.85994],[78.23196,12.76495],[78.08636,12.80344],[77.99036,12.80553],[77.93327,12.8876],[77.81099,12.8303],[77.74108,12.67162],[77.60006,12.6661],[77.58743,12.51473],[77.63575,12.48605],[77.61553,12.36799],[77.52722,12.27746],[77.51993,12.19264],[77.60853,12.20409],[77.73432,12.17555],[77.77447,12.12033],[77.67932,11.97287],[77.60217,11.93627],[77.49513,11.94251],[77.42332,11.77259],[77.29576,11.80871],[77.11315,11.77337],[77.01458,11.81306],[76.90977,11.79343],[76.8262,11.60485],[76.56305,11.62046],[76.51399,11.70565],[76.41621,11.67255],[76.20482,11.86247],[76.1155,11.8579],[76.11204,11.97862],[76.00455,11.93123],[75.86924,11.95161],[75.79654,12.0533],[75.63883,12.14712],[75.5804,12.1556],[75.4863,12.29074],[75.43456,12.29653],[75.37427,12.46113],[75.22345,12.56714],[75.1619,12.66883],[75.06067,12.66842],[75.00958,12.79255],[74.8591,12.76032],[74.64061,12.65899],[74.51827,12.99543],[74.32397,13.82179],[73.87267,14.75312]]]}},{type:"Feature",id:"india_kerala.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[74.64061,12.65899],[74.8591,12.76032],[74.88399,12.75347],[74.95843,12.78474],[75.00958,12.79255],[74.99766,12.73819],[75.05297,12.71899],[75.06067,12.66842],[75.11342,12.67842],[75.1619,12.66883],[75.14362,12.63805],[75.18287,12.63181],[75.22345,12.56714],[75.23683,12.56625],[75.28071,12.61847],[75.29121,12.59649],[75.27114,12.55367],[75.28095,12.51799],[75.33492,12.49034],[75.3573,12.46234],[75.39003,12.49736],[75.41661,12.49293],[75.4241,12.46603],[75.39599,12.45143],[75.37427,12.46113],[75.36747,12.41202],[75.38331,12.39011],[75.42333,12.37233],[75.41374,12.34763],[75.43456,12.29653],[75.4863,12.29074],[75.51484,12.25818],[75.53759,12.20064],[75.5804,12.1556],[75.63883,12.14712],[75.66604,12.09583],[75.68727,12.10816],[75.73047,12.07283],[75.75506,12.08318],[75.79833,12.08006],[75.79654,12.0533],[75.82391,12.01308],[75.82999,11.98372],[75.86924,11.95161],[76.00455,11.93123],[76.03621,11.9406],[76.07903,11.96914],[76.11204,11.97862],[76.1155,11.8579],[76.15528,11.87128],[76.20482,11.86247],[76.22662,11.80542],[76.27964,11.81018],[76.30774,11.78297],[76.31799,11.75041],[76.34252,11.73748],[76.41129,11.75913],[76.42399,11.72006],[76.40338,11.70748],[76.41621,11.67255],[76.44345,11.63744],[76.42497,11.62329],[76.37992,11.6224],[76.37056,11.59341],[76.29786,11.56442],[76.2711,11.59296],[76.2256,11.56442],[76.24255,11.52874],[76.24478,11.49439],[76.32105,11.44489],[76.33354,11.45871],[76.39063,11.42794],[76.44861,11.38155],[76.53826,11.35167],[76.54532,11.30094],[76.52349,11.27236],[76.45271,11.23905],[76.44934,11.20462],[76.51048,11.21163],[76.53385,11.19671],[76.60091,11.20654],[76.62971,11.19413],[76.69784,11.23906],[76.72537,11.22534],[76.72765,11.19388],[76.69301,11.17193],[76.69124,11.14472],[76.73852,11.12108],[76.74788,11.07514],[76.73718,11.04749],[76.69507,11.02252],[76.68644,10.98934],[76.66047,10.96052],[76.64932,10.92395],[76.73272,10.88113],[76.77286,10.88158],[76.81746,10.86195],[76.85983,10.79996],[76.88838,10.79996],[76.8973,10.77096],[76.875,10.70674],[76.85537,10.67507],[76.87277,10.62958],[76.80497,10.62646],[76.80854,10.59434],[76.82995,10.58498],[76.81746,10.43869],[76.8072,10.41505],[76.83932,10.35974],[76.82944,10.30749],[76.9018,10.26001],[76.90974,10.23668],[76.93976,10.23927],[76.98194,10.22077],[77.04075,10.25298],[77.06496,10.29751],[77.11964,10.31782],[77.17683,10.35777],[77.23655,10.35242],[77.21441,10.30577],[77.25054,10.25359],[77.25544,10.22549],[77.28042,10.20721],[77.26769,10.12222],[77.23784,10.12768],[77.20426,10.11207],[77.21976,10.07801],[77.26184,10.03015],[77.25908,9.9945],[77.27231,9.96404],[77.24834,9.95177],[77.21305,9.87549],[77.23646,9.85946],[77.22277,9.82317],[77.24656,9.80841],[77.20553,9.69439],[77.17963,9.65641],[77.16816,9.61495],[77.21264,9.60207],[77.23711,9.58089],[77.27684,9.57498],[77.3042,9.59951],[77.36511,9.54996],[77.3997,9.49683],[77.39331,9.45986],[77.36661,9.46037],[77.33693,9.40901],[77.33713,9.36507],[77.32506,9.33664],[77.28329,9.30039],[77.28844,9.27469],[77.26509,9.18184],[77.26714,9.15394],[77.24693,9.12483],[77.21199,9.101],[77.18667,9.04329],[77.16025,9.03584],[77.14986,9.01008],[77.17354,8.99121],[77.19759,8.95104],[77.19567,8.9236],[77.2559,8.8781],[77.25798,8.83758],[77.2292,8.78679],[77.19607,8.74588],[77.17517,8.73703],[77.20586,8.68645],[77.21552,8.64836],[77.27872,8.56521],[77.26344,8.50713],[77.20618,8.47859],[77.22506,8.44602],[77.18854,8.43476],[77.15375,8.37722],[77.14974,8.32192],[77.12209,8.32281],[77.09077,8.2973],[76.92132,8.09605],[76.6728,8.34299],[76.46487,8.59279],[76.22556,8.95652],[75.91159,10.04616],[75.68288,10.55908],[75.58764,10.89204],[75.55244,11.04304],[75.25797,11.51227],[75.53645,11.69255],[75.53089,11.70357],[75.25113,11.52458],[74.97117,11.94518],[74.71236,12.49398],[74.64061,12.65899]]]}},{type:"Feature",id:"india_maharashtra.geojson",properties:{name:"Maharashtra"},geometry:{type:"Polygon",coordinates:[[[72.53789,20.1498],[72.80202,20.12516],[72.87472,20.22596],[72.97061,20.21213],[72.97329,20.13096],[73.18604,20.05291],[73.29353,20.15371],[73.31137,20.20723],[73.43,20.20634],[73.41484,20.38162],[73.47594,20.49491],[73.51787,20.67019],[73.62224,20.62514],[73.63428,20.58232],[73.74801,20.56716],[73.84658,20.62336],[73.88538,20.72951],[73.93846,20.76073],[73.94515,20.84012],[73.79279,21.06787],[73.68111,21.15233],[73.82249,21.17195],[73.83231,21.2674],[73.94827,21.29773],[73.96879,21.39228],[74.10883,21.44803],[74.30776,21.48014],[74.2917,21.55864],[73.97926,21.54124],[73.86085,21.49576],[73.82294,21.60057],[73.88583,21.64517],[73.89029,21.71073],[73.83231,21.81064],[74.04684,21.92259],[74.14585,21.95425],[74.28991,21.93597],[74.38848,22.02026],[74.52764,21.90876],[74.50578,21.78254],[74.59053,21.66435],[74.83048,21.61038],[74.86438,21.63402],[75.05795,21.56489],[75.11504,21.45963],[75.21985,21.41101],[75.38443,21.38559],[75.46828,21.39406],[75.83267,21.38336],[75.95934,21.39629],[76.05255,21.35259],[76.09849,21.37399],[76.15915,21.25892],[76.16851,21.08587],[76.3826,21.07963],[76.45262,21.11486],[76.48741,21.19604],[76.61676,21.19871],[76.66091,21.28256],[76.62434,21.33519],[76.73227,21.40878],[76.79159,21.48996],[76.79516,21.59745],[76.90131,21.60101],[76.9972,21.68174],[77.1212,21.72545],[77.20728,21.69423],[77.27998,21.76113],[77.47756,21.77005],[77.57122,21.62688],[77.56721,21.52965],[77.45749,21.55641],[77.41869,21.52073],[77.48692,21.37756],[77.93873,21.38693],[78.16932,21.49843],[78.21526,21.55374],[78.3,21.58496],[78.41329,21.57782],[78.43024,21.50155],[78.50874,21.52831],[78.58501,21.48683],[78.932,21.48728],[78.91327,21.59254],[79.1278,21.62822],[79.22102,21.69646],[79.48862,21.67416],[79.50602,21.59031],[79.57604,21.54348],[79.73259,21.60235],[79.85703,21.53099],[80.06665,21.55686],[80.18842,21.63402],[80.26022,21.62019],[80.36905,21.52296],[80.41142,21.43822],[80.51936,21.3896],[80.63532,21.25],[80.45736,21.17284],[80.42391,21.0096],[80.46539,20.92709],[80.54166,20.93378],[80.54344,20.79195],[80.57823,20.67866],[80.50776,20.65458],[80.51177,20.585],[80.62239,20.60373],[80.58581,20.39544],[80.61659,20.32587],[80.38288,20.24157],[80.4141,20.19028],[80.54032,20.11],[80.54567,19.98734],[80.46048,19.82812],[80.66476,19.69075],[80.65673,19.61225],[80.82755,19.56274],[80.88553,19.50922],[80.84271,19.36605],[80.74905,19.28666],[80.67864,19.33089],[80.60751,19.31353],[80.58732,19.39674],[80.48071,19.3355],[80.39329,19.24591],[80.39154,19.1836],[80.3302,19.13746],[80.26929,18.94468],[80.35176,18.84592],[80.24684,18.70149],[80.10826,18.68928],[79.94712,18.78372],[79.95979,18.85795],[79.93945,19.0406],[79.85699,19.09508],[79.94349,19.16387],[79.92836,19.24777],[79.97469,19.38922],[79.92536,19.49855],[79.87599,19.5041],[79.75713,19.60733],[79.63608,19.57639],[79.60249,19.51309],[79.5317,19.55241],[79.42494,19.53529],[79.22736,19.61468],[79.22023,19.5286],[79.1725,19.46081],[79.08018,19.53261],[79.00213,19.54198],[78.89954,19.66954],[78.84245,19.65839],[78.82963,19.75513],[78.60098,19.81809],[78.48728,19.79375],[78.28109,19.90236],[78.3514,19.78327],[78.32909,19.71548],[78.26933,19.69184],[78.29475,19.60621],[78.29564,19.46794],[78.20778,19.43583],[78.16318,19.3551],[78.16675,19.2436],[78.03473,19.2436],[77.92412,19.3444],[77.84428,19.30426],[77.81484,19.13745],[77.74304,19.06118],[77.75106,18.98357],[77.83714,18.95414],[77.90751,18.8295],[77.83749,18.80764],[77.74829,18.60515],[77.65541,18.5316],[77.59709,18.54762],[77.54937,18.3875],[77.55171,18.29114],[77.46332,18.26219],[77.3672,18.30846],[77.41407,18.39352],[77.31257,18.43674],[77.2452,18.41278],[77.19913,18.27795],[77.14119,18.20815],[77.03495,18.18076],[76.95329,18.18881],[76.92422,18.14531],[76.9513,18.05843],[76.9075,18.00923],[76.92164,17.94103],[76.8094,17.8693],[76.66314,17.68771],[76.56488,17.76523],[76.48652,17.71358],[76.48659,17.66155],[76.41561,17.60431],[76.33086,17.46872],[76.37153,17.4341],[76.38171,17.31172],[76.22917,17.36301],[76.11996,17.37007],[75.93159,17.32197],[75.89432,17.40292],[75.77995,17.37683],[75.63468,17.47651],[75.58469,17.34963],[75.65739,17.27069],[75.62834,17.18928],[75.67389,17.11369],[75.66898,16.97766],[75.51065,16.94733],[75.46783,16.98524],[75.28311,16.95524],[75.26705,16.86247],[75.18186,16.84374],[75.09075,16.95064],[74.99259,16.95146],[74.96287,16.87942],[74.90306,16.86241],[74.91203,16.7883],[74.68877,16.71489],[74.6313,16.57831],[74.56843,16.55445],[74.54427,16.63407],[74.33986,16.54825],[74.26427,16.53936],[74.33806,16.40125],[74.31843,16.32588],[74.50509,16.22265],[74.48045,16.14527],[74.37226,16.07692],[74.46484,16.0421],[74.43203,15.95338],[74.34579,15.84959],[74.36893,15.78648],[74.28923,15.73953],[74.16212,15.75075],[74.11652,15.65308],[74.02811,15.60433],[73.97592,15.62887],[73.94515,15.74126],[73.88226,15.74929],[73.68072,15.72057],[73.32871,15.60794],[72.98859,16.57559],[72.71294,17.97077],[72.60935,19.26366],[72.53789,20.1498]]]}},{type:"Feature",id:"india_tamilnadu.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[76.23882,11.52666],[76.42497,11.62329],[76.48321,11.69182],[76.56305,11.62046],[76.8262,11.60485],[76.90977,11.79343],[77.01458,11.81306],[77.11315,11.77337],[77.29576,11.80871],[77.33679,11.76902],[77.42332,11.77259],[77.49513,11.94251],[77.60217,11.93627],[77.67932,11.97287],[77.77447,12.12033],[77.73432,12.17555],[77.60853,12.20409],[77.51993,12.19264],[77.52722,12.27746],[77.61553,12.36799],[77.63575,12.48605],[77.58743,12.51473],[77.60006,12.6661],[77.74108,12.67162],[77.79267,12.74643],[77.81099,12.8303],[77.93327,12.8876],[77.99036,12.80553],[78.08636,12.80344],[78.23196,12.76495],[78.2273,12.71513],[78.36824,12.61165],[78.54754,12.68569],[78.62559,12.9194],[78.61355,12.97872],[78.70231,13.05633],[78.80801,13.07774],[78.97973,13.0764],[79.15278,13.00727],[79.1889,13.08443],[79.25625,13.13661],[79.34679,13.13482],[79.45292,13.33852],[79.53513,13.33423],[79.58006,13.24544],[79.68442,13.25659],[79.92572,13.33598],[79.96184,13.45149],[80.06933,13.53757],[80.15229,13.4787],[80.25978,13.44748],[80.68273,13.45353],[80.58546,12.88895],[80.57389,12.78634],[80.43092,12.33305],[80.32877,12.14],[80.20563,11.84284],[79.85031,11.95606],[79.74742,12.0054],[79.69629,11.95142],[79.76493,11.85315],[80.17499,11.74816],[80.13891,11.5158],[80.22104,11.03359],[80.22222,10.98402],[79.85413,10.97539],[79.73705,10.98906],[79.70405,10.91904],[79.85166,10.82788],[80.22599,10.82479],[80.03964,10.09642],[79.66744,9.97318],[79.55982,9.92323],[79.37812,9.6665],[79.42037,9.35343],[79.56652,9.25796],[79.57134,9.08722],[79.49634,8.89762],[79.37403,8.97879],[79.06914,9.02225],[78.73928,8.93257],[78.54484,8.84743],[78.46298,8.3509],[78.36123,8.16045],[78.10363,8.04096],[77.66766,7.85864],[76.92132,8.09605],[77.09077,8.2973],[77.14974,8.32192],[77.20618,8.47859],[77.27872,8.56521],[77.21552,8.64836],[77.19607,8.74588],[77.25798,8.83758],[77.14986,9.01008],[77.26714,9.15394],[77.28844,9.27469],[77.33693,9.40901],[77.3997,9.49683],[77.3042,9.59951],[77.27684,9.57498],[77.16816,9.61495],[77.24656,9.80841],[77.21305,9.87549],[77.26184,10.03015],[77.28042,10.20721],[77.17683,10.35777],[77.06496,10.29751],[76.98194,10.22077],[76.82944,10.30749],[76.81746,10.43869],[76.82995,10.58498],[76.8973,10.77096],[76.81746,10.86195],[76.64932,10.92395],[76.73718,11.04749],[76.72765,11.19388],[76.44934,11.20462],[76.52349,11.27236],[76.53826,11.35167],[76.39063,11.42794],[76.25772,11.47343],[76.23882,11.52666]]]}},{type:"Feature",id:"india_telengana.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[77.23521,16.47123],[77.29413,16.47453],[77.37516,16.48768],[77.37501,16.50885],[77.41861,16.51735],[77.42586,16.57007],[77.46147,16.58589],[77.45871,16.61229],[77.47627,16.64839],[77.43775,16.64241],[77.42132,16.66752],[77.46657,16.6772],[77.47337,16.71709],[77.42692,16.72829],[77.44309,16.76259],[77.4748,16.78164],[77.45754,16.82843],[77.46322,16.84476],[77.45223,16.91995],[77.48061,16.97751],[77.478,17.00152],[77.50069,17.01255],[77.49527,17.04601],[77.46328,17.11129],[77.40575,17.12751],[77.3772,17.14285],[77.36157,17.16669],[77.37179,17.19944],[77.39294,17.1981],[77.40662,17.2372],[77.45894,17.28058],[77.43826,17.29144],[77.45747,17.34038],[77.45274,17.37335],[77.50349,17.35735],[77.52471,17.36431],[77.53972,17.40645],[77.53911,17.44295],[77.57779,17.43051],[77.60849,17.44332],[77.61732,17.47261],[77.65946,17.48011],[77.69188,17.47463],[77.6912,17.50865],[77.66304,17.5217],[77.59762,17.53374],[77.59603,17.56309],[77.55361,17.55007],[77.52751,17.57308],[77.49462,17.56675],[77.44541,17.58272],[77.45732,17.63263],[77.45138,17.69052],[77.49398,17.7153],[77.53999,17.72825],[77.56532,17.74838],[77.55654,17.76872],[77.50997,17.78724],[77.51604,17.80424],[77.55572,17.81934],[77.5709,17.86625],[77.6208,17.9031],[77.61974,17.93865],[77.65529,17.97047],[77.64737,17.99934],[77.5862,18.01459],[77.55377,18.03572],[77.54914,18.06475],[77.59821,18.0861],[77.59705,18.15205],[77.57179,18.19195],[77.58611,18.21875],[77.57345,18.24294],[77.60614,18.28059],[77.57018,18.29238],[77.56676,18.31792],[77.51948,18.34914],[77.54937,18.3875],[77.56007,18.43522],[77.59709,18.54762],[77.64035,18.55386],[77.65775,18.5271],[77.71216,18.55431],[77.73669,18.55476],[77.74829,18.60515],[77.72956,18.64262],[77.73268,18.67607],[77.74963,18.6899],[77.78664,18.6841],[77.83749,18.80764],[77.90751,18.8295],[77.90895,18.86137],[77.88264,18.86984],[77.86524,18.91043],[77.82421,18.9131],[77.83714,18.95414],[77.79611,18.95146],[77.80057,18.98447],[77.75106,18.98357],[77.74081,19.03041],[77.74304,19.06118],[77.77693,19.07322],[77.78942,19.10534],[77.83179,19.09195],[77.81484,19.13745],[77.84205,19.18294],[77.82822,19.19008],[77.85097,19.25743],[77.88398,19.25832],[77.88442,19.27928],[77.84562,19.28597],[77.84428,19.30426],[77.89602,19.31987],[77.92412,19.3444],[77.96916,19.31095],[78.00172,19.29846],[78.02938,19.27304],[78.03473,19.2436],[78.1101,19.24851],[78.1333,19.232],[78.16675,19.2436],[78.16675,19.28106],[78.18057,19.33369],[78.16318,19.3551],[78.17121,19.39747],[78.20778,19.43583],[78.23543,19.43182],[78.25684,19.4559],[78.29564,19.46794],[78.2787,19.5393],[78.29475,19.57365],[78.29475,19.60621],[78.27111,19.65661],[78.26933,19.69184],[78.29966,19.69273],[78.32909,19.71548],[78.3514,19.78327],[78.3224,19.84125],[78.2778,19.85151],[78.27921,19.88196],[78.3679,19.8814],[78.38128,19.83858],[78.41205,19.8252],[78.45978,19.81851],[78.47762,19.79531],[78.50973,19.82386],[78.5686,19.8136],[78.58734,19.8194],[78.67966,19.79175],[78.70018,19.769],[78.72203,19.78149],[78.76842,19.7806],[78.79116,19.76008],[78.82774,19.76097],[78.84691,19.69898],[78.84245,19.65839],[78.87457,19.65705],[78.89954,19.66954],[78.9379,19.66553],[78.95262,19.65125],[78.94637,19.61914],[78.97626,19.56384],[79.00213,19.54198],[79.03513,19.54733],[79.08018,19.53261],[79.08821,19.51477],[79.12389,19.50318],[79.1725,19.46081],[79.2064,19.46973],[79.19034,19.49381],[79.22023,19.5286],[79.23361,19.57945],[79.22736,19.61468],[79.35492,19.56339],[79.39729,19.53529],[79.42494,19.53529],[79.45394,19.49961],[79.4972,19.52013],[79.5317,19.55241],[79.55367,19.52413],[79.60249,19.51309],[79.61596,19.55941],[79.63608,19.57639],[79.71198,19.58528],[79.75713,19.60733],[79.81825,19.57293],[79.82378,19.55743],[79.87599,19.5041],[79.92536,19.49855],[79.97171,19.42013],[79.97469,19.38922],[79.94937,19.29163],[79.9293,19.24996],[79.92636,19.20252],[79.94349,19.16387],[79.88262,19.13295],[79.85699,19.09508],[79.8741,19.04152],[79.92544,19.05312],[79.93945,19.0406],[79.9397,18.98616],[79.95302,18.96934],[79.95979,18.85795],[79.91056,18.82565],[79.94712,18.78372],[79.99276,18.76905],[80.03276,18.74654],[80.10826,18.68928],[80.24684,18.70149],[80.27513,18.72272],[80.30656,18.68345],[80.33809,18.59903],[80.379,18.60937],[80.38851,18.5972],[80.45022,18.62656],[80.48858,18.62656],[80.514,18.61318],[80.53184,18.58598],[80.59562,18.54896],[80.63264,18.51863],[80.65093,18.47224],[80.6991,18.43612],[80.74281,18.32194],[80.74459,18.30231],[80.7883,18.24968],[80.73344,18.21891],[80.73478,18.17163],[80.79811,18.16628],[80.81774,18.18724],[80.81729,18.22515],[80.85922,18.22605],[80.84807,18.1975],[80.86189,18.13283],[80.9007,18.13461],[80.95422,18.16717],[80.9725,18.14353],[80.94931,18.12302],[80.94396,18.08109],[80.96225,18.03158],[80.98455,17.92276],[80.99436,17.91428],[81.00417,17.83846],[81.03227,17.78985],[81.07375,17.78628],[81.08891,17.81081],[81.15938,17.85273],[81.19194,17.84694],[81.25394,17.81215],[81.40915,17.80501],[81.47025,17.8233],[81.48096,17.80278],[81.5541,17.81616],[81.56882,17.82776],[81.61119,17.81527],[81.64286,17.83935],[81.66293,17.87682],[81.68835,17.88485],[81.70307,17.86121],[81.75838,17.89332],[81.79272,17.85273],[81.78246,17.83177],[81.72939,17.81928],[81.68478,17.77067],[81.62323,17.76264],[81.5764,17.72607],[81.57105,17.68771],[81.50281,17.59003],[81.52377,17.57264],[81.50147,17.53919],[81.49345,17.44865],[81.44171,17.38175],[81.41584,17.36168],[81.37168,17.35722],[81.32262,17.38933],[81.28917,17.33759],[81.26732,17.3202],[81.19016,17.32733],[81.17053,17.29656],[81.18035,17.25463],[81.16295,17.23278],[81.11835,17.22475],[81.02603,17.18684],[80.99124,17.1797],[80.93058,17.20513],[80.90516,17.20111],[80.91318,17.14581],[80.87037,17.14625],[80.8552,17.11146],[80.86412,17.09585],[80.85877,17.05081],[80.82309,17.03787],[80.72586,17.06463],[80.68393,17.06865],[80.65673,17.08782],[80.56039,17.13822],[80.51936,17.10834],[80.49616,17.10789],[80.48234,17.05036],[80.42034,17.02494],[80.39001,17.07623],[80.36682,17.0566],[80.38778,17.0071],[80.35835,16.97052],[80.44264,16.9451],[80.48769,16.91745],[80.49126,16.94822],[80.53184,16.95001],[80.59027,16.91165],[80.5867,16.87374],[80.56485,16.86883],[80.55593,16.81843],[80.6041,16.78766],[80.56262,16.76268],[80.51088,16.76982],[80.45647,16.78989],[80.45245,16.81531],[80.41856,16.84252],[80.37306,16.8113],[80.35879,16.85501],[80.3191,16.87106],[80.31553,16.91254],[80.28877,16.97677],[80.26201,17.01066],[80.23569,17.00219],[80.19555,17.01825],[80.18217,17.04501],[80.134,16.98524],[80.08405,16.96339],[80.04569,16.96517],[80.03722,16.93663],[80.00957,16.90719],[79.99173,16.86303],[80.0332,16.85233],[80.04168,16.82602],[80.07093,16.81323],[80.054,16.74194],[80.02722,16.71251],[80.00576,16.70857],[79.95306,16.63621],[79.90723,16.63408],[79.88555,16.68642],[79.84286,16.70561],[79.81796,16.69098],[79.79256,16.72485],[79.74673,16.72106],[79.72286,16.68966],[79.68544,16.69755],[79.6621,16.68835],[79.63566,16.6594],[79.60613,16.67239],[79.53884,16.63046],[79.49421,16.63408],[79.44409,16.61796],[79.41773,16.57986],[79.37802,16.58412],[79.31162,16.57554],[79.27926,16.5816],[79.24543,16.57009],[79.24388,16.53515],[79.22091,16.51631],[79.21526,16.4846],[79.23202,16.46035],[79.21112,16.44396],[79.21143,16.35493],[79.23438,16.32518],[79.22111,16.23251],[79.1593,16.20893],[79.12305,16.23187],[79.09802,16.2236],[79.05373,16.23827],[79.01236,16.24173],[78.98352,16.21074],[78.92807,16.19871],[78.9049,16.17711],[78.92481,16.13259],[78.92138,16.10307],[78.88876,16.0879],[78.87606,16.13902],[78.83228,16.13919],[78.8419,16.08707],[78.82164,16.05227],[78.78267,16.02125],[78.73718,16.0097],[78.68277,16.03346],[78.64311,16.08312],[78.59917,16.08361],[78.55814,16.04517],[78.45394,16.07503],[78.40727,16.0756],[78.36075,16.04605],[78.32341,16.033],[78.29785,16.01169],[78.2682,16.02857],[78.25445,16.01627],[78.2507,15.96993],[78.20995,15.9197],[78.17371,15.89569],[78.17153,15.85511],[78.13252,15.8549],[78.10755,15.83401],[78.06997,15.85048],[78.03641,15.90188],[78.00803,15.86506],[77.97903,15.87982],[77.93428,15.88216],[77.89376,15.90154],[77.8616,15.88138],[77.80554,15.87083],[77.72205,15.89199],[77.689,15.87914],[77.6536,15.88393],[77.61152,15.91691],[77.58504,15.91532],[77.51178,15.92828],[77.52058,15.95112],[77.51562,16.00803],[77.49612,16.03679],[77.50848,16.07885],[77.49242,16.12134],[77.48889,16.16443],[77.50036,16.1925],[77.49303,16.25534],[77.59655,16.31743],[77.58991,16.33381],[77.54011,16.35849],[77.52418,16.3753],[77.4865,16.38299],[77.41673,16.36775],[77.37791,16.38517],[77.35761,16.3815],[77.28927,16.408],[77.26056,16.45344],[77.23521,16.47123]]]}},{type:"Feature",id:"thailand_cnx.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[98.4375,18.2319],[98.4375,19.2255],[99.5306,19.2255],[99.5306,18.2319],[98.4375,18.2319]]]}},{type:"Feature",id:"flanders.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[2.52239,51.10172],[3.12606,51.34118],[3.17493,51.38246],[3.37615,51.38784],[3.41065,51.3304],[3.40202,51.28548],[3.49114,51.2567],[3.48251,51.30345],[3.57737,51.32322],[3.81309,51.27289],[3.82172,51.23691],[3.93095,51.23691],[4.05456,51.27469],[4.20116,51.35195],[4.16954,51.38067],[4.34202,51.39502],[4.36502,51.46491],[4.53749,51.50072],[4.57199,51.47924],[4.56049,51.44879],[4.63811,51.45058],[4.75022,51.52397],[4.83645,51.50787],[5.0808,51.49893],[5.13541,51.447],[5.10667,51.39143],[5.26477,51.31783],[5.26477,51.28727],[5.4085,51.29267],[5.48612,51.32501],[5.58098,51.28368],[5.58385,51.23511],[5.76783,51.2045],[5.87706,51.16125],[5.70459,50.80293],[5.90581,50.78657],[5.93743,50.73202],[5.90293,50.70108],[5.81382,50.69379],[5.61547,50.76112],[5.50049,50.712],[5.2044,50.7029],[5.16416,50.67558],[5.03768,50.70108],[4.98881,50.75021],[4.91694,50.72656],[4.79046,50.76658],[4.68122,50.77021],[4.66973,50.73566],[4.2874,50.67922],[3.91083,50.6774],[3.71823,50.75203],[3.65499,50.712],[3.53426,50.71018],[3.51413,50.74112],[3.45664,50.74384],[3.37328,50.69562],[3.31004,50.70745],[3.28991,50.73657],[3.16487,50.74294],[3.13181,50.77203],[3.08007,50.76021],[2.87453,50.7393],[2.89609,50.71109],[2.87453,50.69562],[2.79692,50.7029],[2.69918,50.8002],[2.62013,50.79747],[2.56982,50.8583],[2.56695,50.92358],[2.60288,50.94985],[2.5497,50.99601],[2.52239,51.10172]]]}},{type:"Feature",id:"wallonia.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]]]}},{type:"Feature",id:"de-berlin-brandenburg.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[11.32141,53.11711],[12.09595,53.36694],[12.88147,53.20274],[13.78235,53.50765],[14.16687,53.41608],[14.10645,53.28164],[14.29871,53.27507],[14.41956,53.32431],[14.19434,52.93871],[14.19434,52.82932],[14.57336,52.60972],[14.57336,52.36218],[14.71619,52.05249],[14.61182,51.84257],[14.76563,51.54975],[14.36462,51.519],[14.1449,51.54975],[13.99109,51.36835],[13.2605,51.39578],[13.07373,51.65211],[13.13965,51.86971],[12.67273,52.01532],[12.40356,52.03222],[12.22229,52.14697],[12.32117,52.50619],[12.16736,52.51956],[12.23877,52.87245],[11.60156,52.96849],[11.32141,53.11711]]]}},{type:"Feature",id:"de-hamburg.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[9.6,53.8],[10.4,53.8],[10.4,53.3],[9.6,53.3],[9.6,53.8]]]}},{type:"Feature",id:"de-ostwestfalen-lippe.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[8.04337,52.05756],[8.42583,52.19919],[8.43846,52.35394],[8.30866,52.39929],[8.28438,52.4581],[8.67096,52.56967],[9.22028,52.49616],[9.06097,52.28328],[9.47365,51.86716],[9.46266,51.64103],[9.26285,51.46641],[9.15648,51.43569],[8.80348,51.43218],[8.54444,51.46003],[8.42239,51.55658],[8.31076,51.72252],[8.12645,51.86844],[8.04337,52.05756]]]}},{type:"Feature",id:"bi-vc-cvl.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[7.36633,45.32125],[7.89917,45.57752],[8.91541,45.58521],[9.01154,45.24202],[7.65472,45.07352],[7.36633,45.32125]]]}},{type:"Feature",id:"cuneo.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[7.66022,45.06382],[7.90741,44.93953],[8.04474,44.35921],[7.14661,44.2865],[7.1521,44.91036],[7.66022,45.06382]]]}},{type:"Feature",id:"lazio.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[13.23814,42.1301],[13.19363,42.15923],[13.17062,42.15169],[13.12434,42.17797],[13.08798,42.17886],[13.08575,42.14318],[13.0317,42.12309],[13.01946,42.07634],[13.05545,42.01736],[13.10194,42.00898],[13.10589,42.02698],[13.36437,41.92475],[13.384,41.90419],[13.35751,41.8694],[13.38052,41.81709],[13.4169,41.83467],[13.50508,41.8016],[13.52044,41.77297],[13.57182,41.7543],[13.66214,41.81144],[13.70555,41.78747],[13.72956,41.7989],[13.7629,41.7488],[13.81162,41.75426],[13.85645,41.73124],[13.89541,41.73405],[13.98311,41.66238],[14.01182,41.60835],[13.99895,41.57448],[14.02596,41.55567],[14.00526,41.53875],[14.0275,41.52321],[13.97291,41.49404],[13.99278,41.48208],[13.9779,41.46249],[13.90257,41.42273],[13.86123,41.41763],[13.8886,41.40081],[13.8688,41.36272],[13.88974,41.29748],[13.82898,41.28154],[13.83083,41.2502],[13.77126,41.24136],[13.45667,40.77769],[11.52381,41.03693],[11.44922,42.37798],[11.48889,42.43937],[11.61771,42.43604],[11.61626,42.48862],[11.56011,42.51595],[11.58852,42.54226],[11.57917,42.56803],[11.61401,42.55723],[11.64337,42.56635],[11.71111,42.61091],[11.73597,42.60666],[11.74975,42.63965],[11.80478,42.644],[11.77554,42.70951],[11.80156,42.70719],[11.81949,42.74543],[11.74602,42.78576],[11.77424,42.82107],[11.80685,42.79485],[11.8137,42.82267],[11.84851,42.84008],[11.90558,42.8325],[11.92743,42.78092],[11.97948,42.76459],[11.96293,42.72669],[11.9301,42.71295],[11.94133,42.6833],[12.03,42.64324],[12.10666,42.66464],[12.12406,42.64929],[12.16101,42.67691],[12.20434,42.66046],[12.24292,42.62906],[12.22819,42.61077],[12.24626,42.60256],[12.23866,42.57218],[12.27504,42.55991],[12.26676,42.53347],[12.29027,42.51904],[12.27477,42.50921],[12.30735,42.4973],[12.29041,42.49164],[12.32537,42.49476],[12.35123,42.47365],[12.39017,42.49819],[12.41905,42.49765],[12.41244,42.46756],[12.43038,42.45802],[12.41368,42.45517],[12.41365,42.4256],[12.4636,42.42909],[12.44469,42.39882],[12.51169,42.40311],[12.52874,42.36445],[12.60642,42.40245],[12.61481,42.46511],[12.64109,42.4678],[12.6495,42.44331],[12.67465,42.44242],[12.74156,42.47053],[12.71114,42.50079],[12.89273,42.5635],[12.88052,42.60935],[13.00524,42.61622],[13.02522,42.64],[13.06423,42.62427],[13.13,42.66053],[13.14645,42.64714],[13.17506,42.66707],[13.19025,42.73363],[13.25415,42.72145],[13.2645,42.74019],[13.28589,42.74049],[13.35851,42.69533],[13.35059,42.66968],[13.37022,42.6507],[13.4092,42.64383],[13.39493,42.59223],[13.29421,42.5705],[13.28454,42.58349],[13.24686,42.57367],[13.19228,42.58849],[13.15673,42.54102],[13.17934,42.48031],[13.11708,42.44489],[13.19508,42.39017],[13.15427,42.35797],[13.22737,42.32031],[13.23563,42.27871],[13.28229,42.23874],[13.33653,42.22338],[13.34238,42.19939],[13.3808,42.18142],[13.34871,42.17689],[13.35488,42.16769],[13.32819,42.16483],[13.30621,42.13923],[13.23814,42.1301]]]}},{type:"Feature",id:"piemonte.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[8.45947,46.46057],[8.47046,46.44164],[8.47046,46.26724],[8.70117,46.09609],[8.58032,45.77135],[8.84949,45.38302],[8.90442,45.04636],[9.36584,44.67647],[9.29443,44.59047],[8.94287,44.64521],[8.66272,44.54742],[8.25623,44.42201],[7.75085,44.13097],[7.36633,44.13491],[6.98181,44.24913],[6.85547,44.52001],[7.08069,44.67647],[6.84448,44.85976],[6.68518,45.09291],[7.05322,45.22461],[7.17407,45.41002],[7.04773,45.46398],[6.97083,45.63709],[6.89392,45.67548],[6.80054,45.84793],[7.08069,45.87471],[7.58057,45.97024],[7.84973,45.92441],[8.15735,46.157],[8.15186,46.28622],[8.45947,46.46057]]]}},{type:"Feature",id:"roma-capitale.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[11.6,42.16],[12.28,42.2],[12.52,42.31],[13.27,41.92],[13.15,41.58],[12.6,41.16],[11.6,42.16]]]}},{type:"Feature",id:"south-tyrol.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[10.45624,46.86582],[10.73639,46.89211],[10.82977,46.80946],[10.96161,46.81322],[11.1319,46.99149],[11.49067,47.01233],[11.68121,47.04018],[11.7691,47.01023],[12.16736,47.115],[12.28546,47.08322],[12.18384,46.98213],[12.30469,46.85831],[12.37335,46.73421],[12.49969,46.67017],[12.34039,46.61737],[12.08771,46.64944],[12.0163,46.52297],[11.8515,46.49272],[11.66336,46.48657],[11.56929,46.34077],[11.399,46.25585],[11.18958,46.21072],[11.13739,46.2867],[11.20193,46.44732],[10.91904,46.42603],[10.61966,46.43833],[10.44113,46.49036],[10.36766,46.68854],[10.45624,46.86582]]]}},{type:"Feature",id:"trentino.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[10.49332,46.35641],[10.59219,46.46624],[10.76317,46.49697],[10.84076,46.45536],[11.07971,46.54469],[11.23627,46.50123],[11.21086,46.32559],[11.1779,46.27341],[11.23352,46.2473],[11.32416,46.30235],[11.5583,46.40378],[11.62628,46.5069],[11.83502,46.54233],[11.91399,46.44306],[11.85356,46.34124],[11.99158,46.18363],[11.84464,46.08466],[11.72791,46.07704],[11.69907,45.95592],[11.51093,45.97979],[11.28845,45.8814],[11.21567,45.76273],[11.16074,45.68316],[10.90256,45.66013],[10.82016,45.71097],[10.84076,45.81827],[10.51529,45.76752],[10.41504,46.00269],[10.51941,46.2112],[10.49332,46.35641]]]}},{type:"Feature",id:"galicia.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-7.17133,43.43198],[-7.17545,43.38808],[-7.13837,43.3811],[-7.12807,43.33567],[-7.09511,43.3017],[-7.06627,43.30519],[-7.06764,43.2457],[-6.96808,43.18966],[-6.98181,43.16512],[-6.95297,43.13507],[-6.86096,43.17564],[-6.81908,43.13657],[-6.91315,43.07441],[-6.94405,43.07842],[-6.97083,43.03678],[-6.83556,42.95894],[-6.83281,42.91772],[-6.86783,42.87345],[-6.84174,42.82462],[-7.04224,42.69758],[-7.00584,42.64457],[-7.04361,42.63547],[-7.03949,42.58797],[-7.07726,42.50956],[-6.82182,42.49438],[-6.80603,42.46602],[-6.84105,42.40318],[-6.73325,42.35854],[-6.77307,42.25648],[-6.93649,42.16646],[-7.04361,42.06],[-6.96877,42.05082],[-6.96465,42.02583],[-6.99623,41.96664],[-7.07382,41.94979],[-7.14729,41.99063],[-7.18781,41.9697],[-7.19055,41.88439],[-7.42264,41.81124],[-7.70142,41.90125],[-8.16833,41.81943],[-8.22739,41.91045],[-8.09143,42.01869],[-8.19855,42.14508],[-8.23168,42.13248],[-8.24232,42.13884],[-8.25657,42.13349],[-8.25932,42.12191],[-8.27391,42.12356],[-8.30154,42.10535],[-8.32266,42.10064],[-8.32558,42.09045],[-8.33347,42.08434],[-8.3606,42.09032],[-8.37055,42.08752],[-8.38188,42.07631],[-8.39081,42.07593],[-8.39167,42.07924],[-8.41158,42.0772],[-8.43063,42.07211],[-8.44265,42.08294],[-8.47801,42.0809],[-8.48419,42.08204],[-8.5017,42.07797],[-8.52608,42.07771],[-8.52591,42.06331],[-8.55251,42.05337],[-8.58667,42.05222],[-8.59594,42.05592],[-8.64023,42.04713],[-8.64607,42.03667],[-8.65791,42.03081],[-8.65826,42.0155],[-8.66392,42.00109],[-8.67268,41.99637],[-8.70632,41.98208],[-8.74718,41.96409],[-8.74838,41.94302],[-8.76,41.9311],[-8.9,41.85],[-9.6,43.2],[-7.5,44],[-7.02885,43.55178],[-7.04807,43.50698],[-7.04807,43.47684],[-7.06181,43.47335],[-7.09099,43.45242],[-7.08858,43.4437],[-7.11983,43.42525],[-7.17133,43.43198]]]}},{type:"Feature",id:"east_midlands.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-0.37,53.85],[0.2,53.5],[0.55,53.1],[-1.1222,52.36367],[-1.95817,53.27605],[-1.88,53.86],[-0.96,54.06]]]}},{type:"Feature",id:"england-west-midlands.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-3.28493,52.44175],[-3.12706,52.96995],[-1.95817,53.27605],[-1.1222,52.36367],[-1.59859,51.90733],[-2.65611,51.7761],[-3.10848,51.95414],[-3.28493,52.44175]]]}},{type:"Feature",id:"london.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[0.23926,51.43251],[0.23923,51.43329],[0.23926,51.43251],[0.23717,51.4241],[0.205,51.39919],[0.18385,51.37628],[0.16188,51.36621],[0.15614,51.3539],[0.1603,51.31026],[0.14958,51.30173],[0.14213,51.29098],[0.06692,51.27361],[-0.01594,51.26864],[-0.05766,51.2586],[-0.10949,51.25943],[-0.16628,51.26848],[-0.19872,51.25854],[-0.22666,51.2587],[-0.27352,51.28757],[-0.31813,51.30077],[-0.33644,51.31532],[-0.40313,51.30581],[-0.44436,51.31987],[-0.47985,51.3302],[-0.50762,51.37142],[-0.53414,51.39494],[-0.54109,51.42774],[-0.53264,51.43923],[-0.5152,51.46248],[-0.49617,51.48894],[-0.50203,51.53945],[-0.5278,51.55474],[-0.53166,51.5611],[-0.53569,51.57289],[-0.53596,51.5778],[-0.53455,51.58275],[-0.53376,51.58792],[-0.51516,51.6337],[-0.49776,51.65205],[-0.4901,51.66912],[-0.45924,51.67692],[-0.44684,51.69442],[-0.42579,51.71213],[-0.39306,51.715],[-0.38079,51.71654],[-0.34459,51.70948],[-0.2838,51.71515],[-0.26707,51.71395],[-0.23509,51.69056],[-0.22093,51.68445],[-0.17729,51.68441],[-0.10644,51.69165],[-0.05899,51.68257],[0.02324,51.678],[0.0691,51.68854],[0.10856,51.68336],[0.19863,51.65015],[0.25714,51.61353],[0.28187,51.57813],[0.29039,51.55903],[0.26811,51.50265],[0.26882,51.49783],[0.26782,51.49042],[0.2659,51.47443],[0.25509,51.46053],[0.23586,51.44791],[0.23926,51.43251]]]}},{type:"Feature",id:"scotland.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-3.05969,54.98352],[-3.12904,54.95199],[-3.21625,54.96579],[-5,54.4],[-6.1,55.5],[-14.78497,57.60709],[-0.3751,61.32236],[0,56.6],[-2.08637,55.79086],[-2.08569,55.7619],[-2.10251,55.76132],[-2.24258,55.64505],[-2.32979,55.64079],[-2.16019,55.46095],[-2.56805,55.31274],[-2.70401,55.1773],[-2.96082,55.05084],[-3.04939,55.05517],[-3.03017,55.03314],[-3.05969,54.98352]]]}},{type:"Feature",id:"ottawa_gatineau.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-76.23413,45.50827],[-76.12839,45.55829],[-75.26184,45.58041],[-75.13412,45.39652],[-75.42938,45.32512],[-75.35385,45.17816],[-75.82489,44.93564],[-76.34537,45.36855],[-76.23413,45.50827]]]}},{type:"Feature",id:"vancouver_metro.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-123.32,49],[-123.45,49.38],[-123.26,49.47],[-122.24,49.27],[-122.2,49],[-123.32,49]]]}},{type:"Feature",id:"boston_metro.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-70.5,41.91],[-71,41.91],[-71.42,42.05],[-71.57,42.18],[-71.64,42.4],[-71.57,42.52],[-71.35,42.64],[-71.1,42.7],[-70.5,42.7],[-70.5,41.91]]]}},{type:"Feature",id:"central_pa.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-78.7,41.5],[-77,41.5],[-76,40],[-76,39.72],[-79.3,39.72],[-78.7,41.5]]]}},{type:"Feature",id:"chattanooga.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-85.634,34.743],[-85.634,35.282],[-84.933,35.282],[-84.933,34.743],[-85.634,34.743]]]}},{type:"Feature",id:"cleveland.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-82.5,41.5],[-80.95,42],[-80.95,41],[-82.5,41],[-82.5,41.5]]]}},{type:"Feature",id:"colorado.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-109.05,37],[-109.05,41],[-102.05,41],[-102.05,37],[-109.05,37]]]}},{type:"Feature",id:"dc_metro.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.04437,38.70266],[-77.27783,38.69409],[-77.57172,38.91668],[-77.61017,39.1258],[-77.27509,39.21523],[-77.08694,39.21204],[-76.87546,39.05119],[-76.69968,38.97863],[-76.71066,38.77657],[-76.84662,38.7048],[-77.04437,38.70266]]]}},{type:"Feature",id:"dfw_metro.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-97.75,32.25],[-97.75,33.4],[-96,33.4],[-96,32.25],[-97.75,32.25]]]}},{type:"Feature",id:"grand_junction_co.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-109,39.4],[-108.1,39.4],[-107.8,39.16],[-107.8,38.7],[-108.1,38.5],[-109,39],[-109,39.4]]]}},{type:"Feature",id:"hrva.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-76.85486,36.53392],[-76.85486,37.35488],[-75.8194,37.35488],[-75.8194,36.53392],[-76.85486,36.53392]]]}},{type:"Feature",id:"la_metro.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-118.5,33.7],[-118.68,34.23],[-118.5,34.35],[-118,34.2],[-117.3,34.2],[-117.2,34.1],[-117.37,33.9],[-117.74,33.5],[-118.5,33.7]]]}},{type:"Feature",id:"massachusetts.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-73.53149,42.9725],[-69.40063,42.9725],[-69.40063,40.98819],[-71.55396,41.04622],[-71.53198,41.91863],[-73.70728,41.91045],[-73.53149,42.9725]]]}},{type:"Feature",id:"minneapolis_st_paul_metro.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-93.801,44.578],[-93.801,45.348],[-92.666,45.348],[-92.666,44.578],[-93.801,44.578]]]}},{type:"Feature",id:"mt_vernon_wa.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-123.3,49],[-122,49],[-122,48],[-123.2,48.4],[-123.3,49]]]}},{type:"Feature",id:"nyc_metro.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.73,40.64],[-73.95,41.38],[-73.6,40.95],[-73.25,41],[-73.25,40.6],[-74.43,40.43],[-74.73,40.64]]]}},{type:"Feature",id:"philly_metro.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-75.7,40.3],[-75.3,40.4],[-74.7,40.3],[-74.45,40.1],[-74.9,39.55],[-75.5,39.55],[-75.8,39.7218],[-76.23,39.7211],[-75.7,40.3]]]}},{type:"Feature",id:"phoenix.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-113,32.7],[-113,34],[-111.1,34],[-111.1,32.7],[-113,32.7]]]}},{type:"Feature",id:"portland_me.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-70.5,42.9],[-71,43.3],[-71,44.2],[-69.6,44.5],[-69,44],[-70.5,42.9]]]}},{type:"Feature",id:"portland_or.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-124.4,44.8],[-124.4,46.3],[-121.5,46.3],[-121.5,44.8],[-124.4,44.8]]]}},{type:"Feature",id:"salt_lake_city.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-112.6,40.75],[-112.3,41.4],[-111.5,41.4],[-111.1,40.3],[-112,39.75],[-112.6,40.75]]]}},{type:"Feature",id:"seattle.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-122.15,47.26],[-122.33,47.26],[-122.54,47.33],[-122.52,47.46],[-122.45,47.55],[-122.45,47.8],[-121.2,47.8],[-121.43,47.38],[-121.43,47.14],[-121.94,47.14],[-122,47.17],[-122,47.17],[-122.1,47.19],[-122.15,47.26]]]}},{type:"Feature",id:"sf_bay_area.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-123.5,38.5],[-122.8,38.8],[-121.7,38.2],[-121.5,36.9],[-123,36.9],[-123.5,38.5]]]}},{type:"Feature",id:"south_sf_bay_area.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-121.4566,37.48249],[-121.21628,37.17673],[-121.20529,36.95757],[-121.49368,36.95757],[-121.5596,36.8928],[-121.98257,37.12419],[-122.27234,37.39635],[-122.13501,37.48903],[-121.4566,37.48249]]]}},{type:"Feature",id:"st_louis.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-90.28,39.1],[-89.57,39.05],[-89.57,38.18],[-90.58,38],[-91.37,38.2],[-91.37,38.75],[-90.28,39.1]]]}},{type:"Feature",id:"tampa_bay.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-83,28.2],[-82.2,28.2],[-82.2,27.55],[-83,27.55],[-83,28.2]]]}},{type:"Feature",id:"wyoming.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-111.05,41],[-111.05,45],[-104.05,45],[-104.05,41],[-111.05,41]]]}},{type:"Feature",id:"western_australia.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[129.1402,-11.59709],[129.09732,-32.56637],[108.80859,-39.16414],[103.18359,-27.60567],[95.27344,-24.04646],[96.30615,-11.15685],[106.25977,-9.92557],[116.47705,-13.98738],[122.77222,-11.65224],[126.43066,-11.48002],[129.1402,-11.59709]]]}},{type:"Feature",id:"bahia.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-46.26343,-11.52309],[-46.40625,-11.53923],[-46.51062,-11.50425],[-46.604,-11.3481],[-46.61224,-11.25653],[-46.46668,-11.1811],[-46.42822,-11.02208],[-46.32935,-10.9331],[-46.19751,-10.65521],[-45.84045,-10.47701],[-45.82672,-10.35275],[-45.74707,-10.34194],[-45.70038,-10.26087],[-45.72784,-10.15815],[-45.59326,-10.09326],[-45.41199,-10.43379],[-45.45593,-10.55262],[-45.37903,-10.72538],[-45.15381,-10.8387],[-44.90112,-10.90883],[-44.60999,-10.66601],[-44.34631,-10.54182],[-44.13757,-10.63362],[-44.05518,-10.39057],[-43.96179,-10.42839],[-43.78601,-10.15275],[-43.69263,-10.03918],[-43.69812,-9.95262],[-43.64868,-9.82274],[-43.76404,-9.76861],[-43.8794,-9.54117],[-43.68713,-9.41655],[-43.4729,-9.24851],[-43.3081,-9.37861],[-43.04443,-9.36235],[-42.8302,-9.60617],[-42.33581,-9.31899],[-41.90735,-9.23767],[-41.7865,-9.09125],[-41.40198,-8.71136],[-41.14929,-8.70593],[-41.03943,-8.83351],[-41.01471,-8.82808],[-40.92407,-8.83894],[-40.8197,-9.07226],[-40.68237,-9.14277],[-40.66864,-9.26478],[-40.7428,-9.30002],[-40.75653,-9.42197],[-40.62744,-9.47615],[-40.53131,-9.41384],[-40.47363,-9.39758],[-40.42694,-9.34338],[-40.36102,-9.37319],[-40.29785,-9.09396],[-40.23468,-9.04243],[-40.14679,-9.10481],[-40.07813,-9.05057],[-39.98749,-9.05599],[-39.8996,-8.95833],[-39.90509,-8.82808],[-39.68262,-8.77923],[-39.70459,-8.67063],[-39.65241,-8.65977],[-39.41345,-8.50769],[-39.2926,-8.54843],[-39.23492,-8.6299],[-38.96576,-8.76837],[-38.86963,-8.76837],[-38.71307,-8.83622],[-38.68835,-8.90678],[-38.66913,-8.98275],[-38.61694,-8.96376],[-38.60596,-8.86065],[-38.5675,-8.81723],[-38.47687,-8.84708],[-38.50983,-8.94205],[-38.42194,-9.037],[-38.33679,-8.97461],[-38.28461,-9.00716],[-38.31757,-9.06684],[-38.21045,-9.36235],[-38.04565,-9.4599],[-38.02368,-9.8498],[-37.89185,-9.96885],[-37.74902,-10.31492],[-37.8479,-10.37977],[-37.78198,-10.64981],[-37.93579,-10.73617],[-38.13354,-10.6822],[-38.26538,-10.79014],[-38.02368,-11.31848],[-37.73804,-11.57691],[-37.3645,-11.48002],[-38.50159,-18.11975],[-39.65515,-18.35453],[-40.25391,-17.96828],[-40.23193,-17.79053],[-40.61646,-17.38209],[-40.51758,-16.89917],[-40.13306,-16.45716],[-39.90234,-16.04581],[-40.68237,-15.68651],[-41.08887,-15.73939],[-41.35254,-15.73939],[-41.37451,-15.49603],[-41.80298,-15.09334],[-42.04468,-15.18878],[-43.24219,-14.67925],[-43.50586,-14.78551],[-43.92334,-14.63674],[-43.7915,-14.31761],[-44.35181,-14.24309],[-44.65942,-14.38148],[-45.78003,-15.13576],[-46.10962,-15.29478],[-46.06567,-14.87047],[-45.92285,-14.38148],[-46.24146,-14.14723],[-46.32935,-13.11158],[-46.38428,-12.02858],[-46.26343,-11.52309]]]}},{type:"Feature",id:"brasilia_df.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-48.20114,-15.49868],[-47.42111,-15.5],[-47.38953,-15.56484],[-47.32361,-15.58865],[-47.33047,-15.63891],[-47.31125,-15.73278],[-47.36755,-15.83189],[-47.3703,-15.927],[-47.36893,-15.99698],[-47.30988,-16.04317],[-48.27805,-16.04713],[-48.24921,-15.94152],[-48.2753,-15.93096],[-48.29041,-15.83189],[-48.22998,-15.77772],[-48.21899,-15.71163],[-48.24097,-15.70898],[-48.23547,-15.66535],[-48.22449,-15.63097],[-48.20251,-15.62568],[-48.20114,-15.49868]]]}},{type:"Feature",id:"riograndedosul.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-53.8,-26.3],[-48.6,-28.9],[-53.1,-34],[-57.7,-30.2]]]}},{type:"Feature",id:"bogota.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.38,4.7],[-74.17,5],[-73.75,5],[-73.9,4.37],[-74.25,4.31],[-74.38,4.7]]]}}];
26822
26823         var resources = {"Bahia-telegram":{id:"Bahia-telegram",type:"telegram",locationSet:{include:["bahia.geojson"]},languageCodes:["pt"],name:"OpenStreetMap Bahia Telegram Group",description:"Join the OpenStreetMap Bahia community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!",url:"https://t.me/OSMBA",contacts:[{name:"Wille Marcel",email:"wille@wille.blog.br"}]},"Bay-Area-OpenStreetMappers":{id:"Bay-Area-OpenStreetMappers",type:"meetup",locationSet:{include:["sf_bay_area.geojson"]},languageCodes:["en"],name:"Bay Area OpenStreetMappers",description:"Improve OpenStreetMap in the Bay Area",extendedDescription:"This group is about growing the OpenStreetMap community here in the Bay Area. Our events are open to everyone, from open source enthusiasts, cyclists, GIS professionals, geocachers, and beyond. Anyone and everyone who is interested in maps, map making and free map data is welcome to join our group as well as attend our events.",url:"https://www.meetup.com/Bay-Area-OpenStreetMappers/",contacts:[{name:"Ben Discoe",email:"bdiscoe@gmail.com"}],order:5},"Central-Pennsylvania-OSM":{id:"Central-Pennsylvania-OSM",type:"facebook",locationSet:{include:["central_pa.geojson"]},languageCodes:["en"],name:"Central Pennsylvania OSM",description:"Online mapping community based out of State College, PA",url:"https://www.facebook.com/CentralPennsylvaniaOSM",contacts:[{name:"Sterling Quinn",email:"sdq107@psu.edu"}],order:3},"Code-for-San-Jose-Slack":{id:"Code-for-San-Jose-Slack",type:"slack",locationSet:{include:["south_sf_bay_area.geojson"]},languageCodes:["en"],name:"Code for San Jose Slack",description:"All are welcome! Sign up at {signupUrl}, then join the #osm channel.",url:"https://codeforsanjose.slack.com/",signupUrl:"https://slackin-c4sj.herokuapp.com/",contacts:[{name:"OSM Bay Area mailing list",email:"talk-us-sfbay@openstreetmap.org"}],order:4},"DF-telegram":{id:"DF-telegram",type:"telegram",locationSet:{include:["brasilia_df.geojson"]},languageCodes:["pt"],name:"OpenStreetMap Brasília Telegram Group",description:"Join the OpenStreetMap Brasília community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!",url:"https://t.me/osmbsb",contacts:[{name:"Wille Marcel",email:"wille@wille.blog.br"}]},"Dallas-Fort-Worth-OSM":{id:"Dallas-Fort-Worth-OSM",type:"osm",locationSet:{include:["dfw_metro.geojson"]},languageCodes:["en"],name:"Dallas-Fort Worth OSM",description:"The OpenStreetMap user group for Dallas-Fort Worth",extendedDescription:"Dallas, Fort Worth, and all the cities in between are abounding with creative and tech-savvy people. The vision for this usergroup is to find new ways to use the amazing resource of OSM.",url:"http://dfwosm.org/",contacts:[{name:"Andrew Matheny",email:"andrewdmatheny@gmail.com"}]},"Galicia-Telegram":{id:"Galicia-Telegram",type:"telegram",locationSet:{include:["galicia.geojson"]},languageCodes:["es","gl"],name:"OpenStreetMap Galicia Telegram",description:"OpenStreetMap Telegram for Galicia",url:"https://t.me/joinchat/AAHZsRBs-mY3hrquk2kpig"},"Galicia-Twitter":{id:"Galicia-Twitter",type:"twitter",locationSet:{include:["galicia.geojson"]},languageCodes:["es","gl"],name:"OpenStreetMap Galicia Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/osmgalicia"},GeoPhilly:{id:"GeoPhilly",type:"meetup",locationSet:{include:["philly_metro.geojson"]},languageCodes:["en"],name:"GeoPhilly",description:"Meetup for map enthusiasts in the Philadelphia area",extendedDescription:"GeoPhilly unites developers, geographers, data geeks, open source enthusiasts, civic hackers and map addicts in our shared love of maps and the stories they tell. If you use maps as part of your work or just want to learn more, this is the meetup for you!  Our events aim to be open, friendly, educational and social and range from happy hours to lightning talks or even workshops. Come create a diverse, inspiring geospatial community in the Philadelphia with us!",url:"https://www.meetup.com/GeoPhilly/",contacts:[{name:"Dan Ford",email:"dford@azavea.com"}],order:5},"MapColabora-mailinglist":{id:"MapColabora-mailinglist",type:"mailinglist",locationSet:{include:[[-0.8860231,41.6568048]]},name:"Mapeado Colaborativo / Geoinquietos Zaragoza",description:"Mapeado Colaborativo / Geoinquietos Zaragoza Mailing list",url:"https://groups.google.com/forum/#%21forum/mapeado-colaborativo",contacts:[{name:"Organizer",email:"mapeadocolaborativo@gmail.com"}],order:1},"MapColabora-meetup":{id:"MapColabora-meetup",type:"meetup",locationSet:{include:[[-0.8860231,41.6568048]]},name:"Mapeado Colaborativo / Geoinquietos Zaragoza",description:"Mapeado Colaborativo / Geoinquietos Zaragoza Meetup page",url:"https://www.meetup.com/mapcolabora/",contacts:[{name:"Organizer",email:"mapeadocolaborativo@gmail.com"}],order:5},"MapColabora-twitter":{id:"MapColabora-twitter",type:"twitter",locationSet:{include:[[-0.8860231,41.6568048]]},name:"Mapeado Colaborativo / Geoinquietos Zaragoza",description:"Mapeado Colaborativo / Geoinquietos Zaragoza Twitter Account",url:"https://www.twitter.com/MapColabora",contacts:[{name:"Organizer",email:"mapeadocolaborativo@gmail.com"}],order:4},MapMinnesota:{id:"MapMinnesota",type:"meetup",locationSet:{include:["minneapolis_st_paul_metro.geojson"]},languageCodes:["en"],name:"MapMinnesota",description:"Mappers and OpenStreetMap enthusiasts in the Twin Cities area",extendedDescription:"Connecting OpenStreetMap enthusiasts in Minnesota and the Twin Cities!",url:"https://www.meetup.com/Map-Minnesota/",contacts:[{name:"Ian Dees",email:"ian.dees@gmail.com"}],order:5},"Mapping-DC-meetup":{id:"Mapping-DC-meetup",type:"meetup",locationSet:{include:["dc_metro.geojson"]},languageCodes:["en"],name:"Mapping DC",description:"Improve OpenStreetMap in the DC area",extendedDescription:"We are a group of volunteer mappers who aim to improve the OpenStreetMap in the DC area. We also aim to teach others about the OSM ecosystem, data analytics, cartography, and GIS. We gather every other month at meetups to focus on one area of our city.",url:"https://mappingdc.org/",contacts:[{name:"Brian DeRocher",email:"brian@derocher.org"}],order:5},MappingWR:{id:"MappingWR",type:"slack",locationSet:{include:[[-80.4925,43.4518]]},name:"MappingWR",description:"Making low carbon routes around Waterloo Region easy to find.",url:"https://mappingwr.slack.com/",signupUrl:"https://docs.google.com/forms/d/e/1FAIpQLSeUswpQfyzwQugdLugtYh4WTMTce0EEjrnOS6xhQ416V4BFHg/viewform",contacts:[{name:"David Trueman",email:"dwtrueman@gmail.com"}]},"Maptime-Bogota":{id:"Maptime-Bogota",type:"meetup",locationSet:{include:["bogota.geojson"]},languageCodes:["es"],name:"Maptime Bogotá",description:"We're a group of mappers interested in mapping in OpenStreetMap around Bogotá.",extendedDescription:"Learn to collect data in the field and digitize onto OpenStreetMap.  It is not necessary to have previous knowledge! You just need the desire to participate, learn, and have fun.",url:"https://www.meetup.com/Maptime-Colombia-OSM/",contacts:[{name:"Andrés Gómez Casanova",email:"angoca@gmail.com"}],order:5},"Maptime-ME-meetup":{id:"Maptime-ME-meetup",type:"meetup",locationSet:{include:["portland_me.geojson"]},languageCodes:["en"],name:"MaptimeME",description:"Mappers and OpenStreetMap users, around Portland, ME",extendedDescription:"Maptime is, rather literally, time for mapmaking.  Our mission is to open the doors of cartographic possibility to anyone interested by creating a time and space for collaborative learning, exploration, and map creation using mapping tools and technologies.",url:"https://www.meetup.com/MaptimeME/",contacts:[{name:"Malcolm Toon",email:"malcolm@foreflight.com"}],order:5},"Maptime-Oceania-Slack":{id:"Maptime-Oceania-Slack",type:"slack",locationSet:{include:["009"]},languageCodes:["en"],name:"Maptime Oceania Slack",description:"Sign up at {signupUrl}",url:"https://maptimeoceania.slack.com",signupUrl:"https://bit.ly/maptimeau",contacts:[{name:"David Dean",email:"ddean@ieee.org"},{name:"Philip Mallis",email:"philip.mallis@unimelb.edu.au"},{name:"Edoardo Neerhut",email:"ed@mapillary.com"}],order:3},"MaptimeHRVA-twitter":{id:"MaptimeHRVA-twitter",type:"twitter",locationSet:{include:["hrva.geojson"]},languageCodes:["en"],name:"MaptimeHRVA Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/maptimehrva",contacts:[{name:"Jonah Adkins",email:"jonahadkins@gmail.com"}]},"Nottingham-OSM-pub-meetup":{id:"Nottingham-OSM-pub-meetup",type:"group",locationSet:{include:["east_midlands.geojson"]},languageCodes:["en"],name:"East Midlands (Nottingham) Monthly pub meet-up",description:"Social gathering for East Midlands mappers and users",extendedDescription:"A group have been meeting since March 2011, initially in Nottingham, and, more recently in Derby, and from time to time elsewhere in the East Midlands. These are social gatherings, but are an excellent place to come and ask specific questions about OSM either in the area or in general. In the summer months we usually do some light mapping for an hour in the vicinity of our meeting place. The group as a whole has a special interest in mapping public rights of way and from time to time has mapping meetings for this purpose.",url:"https://wiki.openstreetmap.org/wiki/Nottingham/Pub_Meetup",contacts:[{name:"Jerry Clough",email:"SK53.osm@gmail.com"}],order:5},"OSM-AR-facebook":{id:"OSM-AR-facebook",type:"facebook",locationSet:{include:["ar"]},languageCodes:["es"],name:"OpenStreetMap Argentina Facebook",description:"Join the OpenStreetMap Argentina community on Facebook",extendedDescription:"News from the local community",url:"https://www.facebook.com/OpenStreetMapArgentina/",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}],order:3},"OSM-AR-forum":{id:"OSM-AR-forum",type:"forum",locationSet:{include:["ar"]},languageCodes:["es"],name:"OpenStreetMap Argentina web forum",description:"Join the OpenStreetMap Argentina web forum",extendedDescription:"Ideal for long or important discussions. Slow response time.",url:"https://forum.openstreetmap.org/viewforum.php?id=49",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}],order:-2},"OSM-AR-irc":{id:"OSM-AR-irc",type:"irc",locationSet:{include:["ar"]},languageCodes:["es"],name:"OpenStreetMap Argentina IRC",description:"Join #osm-ar on irc.oftc.net (port 6667)",extendedDescription:"You may find the most geeky user in the community.",url:"https://webchat.oftc.net/?channels=osm-ar",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}],order:-4},"OSM-AR-mailinglist":{id:"OSM-AR-mailinglist",type:"mailinglist",locationSet:{include:["ar"]},languageCodes:["es"],name:"Talk-ar Mailing List",description:"Historic mailing list. Almost unused today.",url:"https://lists.openstreetmap.org/pipermail/talk-ar/",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}],order:-3},"OSM-AR-telegram":{id:"OSM-AR-telegram",type:"telegram",locationSet:{include:["ar"]},languageCodes:["es"],name:"OpenStreetMap Argentina Telegram",description:"Join the OpenStreetMap Argentina community on Telegram",extendedDescription:"The most active channel in the community, ideal for chatting and getting answers to your questions instantly. Everyone is welcome!",url:"https://telegram.me/osm_ar",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}]},"OSM-AR-twitter":{id:"OSM-AR-twitter",type:"twitter",locationSet:{include:["ar"]},languageCodes:["es"],name:"OpenStreetMap Argentina Twitter",description:"Follow us on Twitter at {url}",extendedDescription:"News from the local community and OpenStreetMap in general.",url:"https://twitter.com/OpenStreetMapAr",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}]},"OSM-Asia-mailinglist":{id:"OSM-Asia-mailinglist",type:"mailinglist",locationSet:{include:["142"]},name:"OpenStreetMap Asia Mailinglist",description:"Talk-asia is the official Mailinglist for Asian Community",url:"https://lists.openstreetmap.org/listinfo/talk-asia",contacts:[{name:"Erwin Olario",email:"govvin@gmail.com"}],order:-3},"OSM-BGD-facebook":{id:"OSM-BGD-facebook",type:"facebook",locationSet:{include:["bd"]},name:"OpenStreetMap Bangladesh",description:"Improve OpenStreetMap in Bangladesh",extendedDescription:"Mapping in Bangladesh? Have questions, want to connect with the community here? Join us at {url}. All are welcome!",url:"https://www.facebook.com/groups/osmbd/",contacts:[{name:"Ahasanul Hoque",email:"hoque.ahasan@gmail.com"}],order:3,events:[{id:"sotmasia2019",i18n:true,name:"State of the Map Asia 2019",description:"Join the 2019 OpenStreetMap region-wide event at State of the Map Asia in Dhaka",where:"Krishibid Institution Bangladesh (KIB), Dhaka, Bangladesh",when:"2019-11-01",url:"http://stateofthemap.asia/"}]},"OSM-BO-mailinglist":{id:"OSM-BO-mailinglist",type:"mailinglist",locationSet:{include:["bo"]},languageCodes:["es"],name:"Talk-bo Mailing List",description:"Talk-bo is the official mailing list for the Bolivian OpenStreetMap community",extendedDescription:"Mapping in Bolivia? Have questions, want to connect with the community here? Join us at {url}. All are welcome!",url:"https://lists.openstreetmap.org/pipermail/talk-bo/",contacts:[{name:"Marco Antonio",email:"marcoantoniofrias@gmail.com"}],order:-3},"OSM-BiH-telegram":{id:"OSM-BiH-telegram",type:"telegram",locationSet:{include:["ba"]},name:"OpenStreetMap BiH Telegram",description:"A Telegram group for the OSM Bosnia and Herzegovina community: {url}",url:"https://t.me/osmbih",order:5},"OSM-Boston":{id:"OSM-Boston",type:"meetup",locationSet:{include:["boston_metro.geojson"]},languageCodes:["en"],name:"OpenStreetMap Boston",description:"Mappers and OpenStreetMap users in the Boston area",extendedDescription:"OpenStreetMap is the free and open, wiki-style map of the world, with hundreds of thousands of contributions every day from people like you. Editing the map is simple, and fun! Join us both indoors and outdoors in our effort to create the best map of the Boston area and the rest of the world!",url:"https://www.meetup.com/OpenStreetMap-Boston/",contacts:[{name:"Lars Ahlzen",email:"lars@ahlzen.com"}],order:5},"OSM-CA-Slack":{id:"OSM-CA-Slack",type:"slack",locationSet:{include:["ca"]},languageCodes:["en","fr"],name:"OSM-CA Slack",description:"All are welcome! Sign up at {signupUrl}.",url:"https://osm-ca.slack.com/",signupUrl:"https://slackinviteosmcanada.herokuapp.com/",contacts:[{name:"Denis Carriere",email:"carriere.denis@gmail.com"}],order:4},"OSM-CA-mailinglist":{id:"OSM-CA-mailinglist",type:"mailinglist",locationSet:{include:["ca"]},languageCodes:["en","fr"],name:"OSM-CA mailing list",description:"A mailing list to discuss OpenStreetMap in Canada.",url:"https://lists.openstreetmap.org/listinfo/talk-ca"},"OSM-CA-telegram":{id:"OSM-CA-telegram",type:"telegram",locationSet:{include:["ca"]},languageCodes:["en","fr"],name:"@osmca on Telegram",description:"OpenStreetMap Canada Telegram chat",url:"https://t.me/osmca"},"OSM-CL-facebook":{id:"OSM-CL-facebook",type:"facebook",locationSet:{include:["cl"]},languageCodes:["es"],name:"OpenStreetMap Chile Facebook",description:"Join the OpenStreetMap Chile community on Facebook",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!",url:"https://www.facebook.com/OpenStreetMap-Chile-145127198882915/",contacts:[{name:"Julio Costa",email:"julio.costa@openstreetmap.cl"}],order:3},"OSM-CL-mailinglist":{id:"OSM-CL-mailinglist",type:"mailinglist",locationSet:{include:["cl"]},languageCodes:["es"],name:"Talk-cl Mailing List",description:"A mailing list to discuss OpenStreetMap in Chile",url:"https://lists.openstreetmap.org/pipermail/talk-cl/",contacts:[{name:"Julio Costa",email:"julio.costa@openstreetmap.cl"}],order:-3},"OSM-CL-telegram":{id:"OSM-CL-telegram",type:"telegram",locationSet:{include:["cl"]},languageCodes:["es"],name:"OpenStreetMap Chile Telegram",description:"Join the OpenStreetMap Chile community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!",url:"https://t.me/OSMcl",contacts:[{name:"Julio Costa",email:"julio.costa@openstreetmap.cl"}]},"OSM-CL-twitter":{id:"OSM-CL-twitter",type:"twitter",locationSet:{include:["cl"]},languageCodes:["es"],name:"OpenStreetMap Chile Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/osmCL",contacts:[{name:"Julio Costa",email:"julio.costa@openstreetmap.cl"}]},"OSM-CN-telegram":{id:"OSM-CN-telegram",type:"telegram",locationSet:{include:["cn"]},languageCodes:["zh"],name:"OpenStreetMap China Telegram",description:"A Telegram group for the OSM Chinese community: {url}",url:"https://t.me/osmchina",order:5},"OSM-CO":{id:"OSM-CO",type:"group",locationSet:{include:["co"]},languageCodes:["es"],name:"OpenStreetMap Colombia",description:"News of the OpenStreetMap Colombia community and the OSMCo Foundation",url:"https://blog.openstreetmap.co/s657",contacts:[{name:"Fredy Rivera",email:"fredyrivera@gmail.com"}]},"OSM-CO-facebook":{id:"OSM-CO-facebook",type:"facebook",locationSet:{include:["co"]},languageCodes:["es"],name:"OpenStreetMap Colombia Facebook",description:"Join the OpenStreetMap Colombia community on Facebook",extendedDescription:"Join the community to learn more about OpenStreetMap. Everyone is welcome!",url:"https://www.facebook.com/groups/OsmCol/",contacts:[{name:"Fredy Rivera",email:"fredyrivera@gmail.com"}],order:3},"OSM-CO-mailinglist":{id:"OSM-CO-mailinglist",type:"mailinglist",locationSet:{include:["co"]},languageCodes:["es"],name:"Talk-co Mailing List",description:"A mailing list to discuss OpenStreetMap in Colombia",url:"https://lists.openstreetmap.org/pipermail/talk-co/",contacts:[{name:"Fredy Rivera",email:"fredyrivera@gmail.com"}],order:-3},"OSM-CO-telegram":{id:"OSM-CO-telegram",type:"telegram",locationSet:{include:["co"]},languageCodes:["es"],name:"OSM Colombia on Telegram",description:"OpenStreetMap Colombia Telegram chat",url:"https://telegram.me/osmco",contacts:[{name:"Fredy Rivera",email:"fredyrivera@gmail.com"}]},"OSM-CO-twitter":{id:"OSM-CO-twitter",type:"twitter",locationSet:{include:["co"]},languageCodes:["es"],name:"OpenStreetMap Colombia Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/OpenStreetMapCo",contacts:[{name:"Fredy Rivera",email:"fredyrivera@gmail.com"}]},"OSM-CU-telegram":{id:"OSM-CU-telegram",type:"telegram",locationSet:{include:["cu"]},languageCodes:["es"],name:"OSM Cuba on Telegram",description:"OpenStreetMap Cuba Telegram chat",url:"https://telegram.me/OSM_Cuba",contacts:[{name:"Talk-cu Owner",email:"talk-cu-owner@openstreetmap.org"}]},"OSM-CZ-telegram":{id:"OSM-CZ-telegram",type:"telegram",locationSet:{include:["cz"]},languageCodes:["cs","en","sk"],name:"OpenStreetMap CZ Telegram",description:"A Telegram group for the OSM Czech community: {url}",url:"https://t.me/OSM_cz",order:5},"OSM-Central-Salish-Sea":{id:"OSM-Central-Salish-Sea",type:"meetup",locationSet:{include:["mt_vernon_wa.geojson"]},languageCodes:["en"],name:"OpenStreetMap Central Salish Sea",description:"Mappers and OpenStreetMap users around Mount Vernon, WA",extendedDescription:"OpenStreetMap is an map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more. We meet all the time to talk maps, make maps and have fun!",url:"https://www.meetup.com/OpenStreetMap-Central-Salish-Sea/",contacts:[{name:"Clifford Snow",email:"clifford@snowandsnow.us"}],order:5},"OSM-Chattanooga":{id:"OSM-Chattanooga",type:"facebook",locationSet:{include:["chattanooga.geojson"]},languageCodes:["en"],name:"OSM Chattanooga",description:"The OpenStreetMap user group for Chattanooga",url:"https://www.facebook.com/groups/123483951073256",contacts:[{name:"Jenny Park",email:"tennessee@tpl.org"},{name:"Randal Hale",email:"rjhale@northrivergeographic.com"}],order:3},"OSM-Colorado":{id:"OSM-Colorado",type:"meetup",locationSet:{include:["colorado.geojson"]},languageCodes:["en"],name:"OpenStreetMap Colorado",description:"Mappers and OpenStreetMap users in the state of Colorado, USA",extendedDescription:"OpenStreetMap (OSM) Colorado is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties.",url:"https://www.meetup.com/OSM-Colorado/",contacts:[{name:"Russell Deffner",email:"russdeffner@gmail.com"}],order:5},"OSM-Discord":{id:"OSM-Discord",type:"discord",locationSet:{include:["001"]},languageCodes:["en"],name:"OpenStreetMap Discord",description:"Get in touch with other mappers via Discord",url:"https://discord.gg/SRZUYUz",contacts:[{name:"Austin Harrison",email:"jaustinharrison@gmail.com"}]},"OSM-EC-telegram":{id:"OSM-EC-telegram",type:"telegram",locationSet:{include:["ec"]},languageCodes:["es"],name:"OSM Ecuador on Telegram",description:"OpenStreetMap Ecuador Telegram chat",url:"https://telegram.me/MappingEcuador",contacts:[{name:"Talk-ec Owner",email:"talk-ec-owner@openstreetmap.org"}]},"OSM-ES-mailinglist":{id:"OSM-ES-mailinglist",type:"mailinglist",locationSet:{include:["es"]},languageCodes:["es"],name:"Talk-es mailing list",description:"A mailing list to discuss OpenStreetMap in Spain",url:"https://lists.openstreetmap.org/listinfo/talk-es",contacts:[{name:"Iván Sánchez",email:"ivansanchez@escomposlinux.org"}],order:-3},"OSM-ES-telegram":{id:"OSM-ES-telegram",type:"telegram",locationSet:{include:["es"]},languageCodes:["es"],name:"@OSMes on Telegram",description:"OpenStreetMap Spain Telegram chat",url:"https://t.me/OSMes",contacts:[{name:"Jorge Sanz",email:"sanchi2@gmail.com"}]},"OSM-Facebook":{id:"OSM-Facebook",type:"facebook",locationSet:{include:["001"]},languageCodes:["en"],name:"OpenStreetMap on Facebook",description:"Like us on Facebook for news and updates about OpenStreetMap.",url:"https://www.facebook.com/OpenStreetMap",contacts:[{name:"Harry Wood",email:"mail@harrywood.co.uk"}],order:3},"OSM-IDN-facebook":{id:"OSM-IDN-facebook",type:"facebook",locationSet:{include:["id"]},name:"OpenStreetMap Indonesia",description:"Improve OpenStreetMap in Indonesia",extendedDescription:"Mapping in Indonesia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!",url:"https://www.facebook.com/groups/osm.id/",contacts:[{name:"Yantisa Akhadi",email:"yantisa.akhadi@hotosm.org"}],order:3},"OSM-IRC":{id:"OSM-IRC",type:"irc",locationSet:{include:["001"]},languageCodes:["en"],name:"OpenStreetMap IRC",description:"Join #osm on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm",contacts:[{name:"Harry Wood",email:"mail@harrywood.co.uk"}],order:-4},"OSM-India-Puducherry-Facebook":{id:"OSM-India-Puducherry-Facebook",type:"facebook",locationSet:{include:[[79.7324,11.9142]]},name:"Free Software Hardware Movement - Facebook",description:"FSHM Facebook page to know about community events, activities",extendedDescription:"FSHM organizes events relating to free software/hardware, technology, activism and OpenStreetMap. Its FB page is the best way to keep in contact with its events.",url:"https://www.facebook.com/FSHMP",contacts:[{name:"Kamalavelan",email:"sskamalavelan@gmail.com",osm:"demonshreder"},{name:"Prasanna",email:"prasmailme@gmail.com",osm:"Prashere"}],order:3},"OSM-India-Puducherry-Matrix":{id:"OSM-India-Puducherry-Matrix",type:"matrix",locationSet:{include:[[79.7324,11.9142]]},name:"Free Software Hardware Movement - Matrix",description:"FSHM Riot group to discuss, share and update mapping activities, events in and around Puducherry",extendedDescription:"FSHM community members share their OSM mapping updates / experiences through the Riot.im group, this group is also used to discuss things related to free software / hardware, technology and activism.",url:"https://riot.im/app/#/room/#fshm:matrix.org",contacts:[{name:"Kamalavelan",email:"sskamalavelan@gmail.com",osm:"demonshreder"},{name:"Prasanna",email:"prasmailme@gmail.com",osm:"Prashere"}]},"OSM-India-facebook":{id:"OSM-India-facebook",type:"facebook",locationSet:{include:["in"]},name:"OpenStreetMap India - Participatory neighborhood mapping",description:"Improve OpenStreetMap in India",extendedDescription:"Mapping in India? Have questions, want to connect with the community here? Join us at {url}. All are welcome!",url:"https://www.facebook.com/groups/mappingindia/",contacts:[{name:"Jinal Foflia",email:"fofliajinal@gmail.com"},{name:"Arun Ganesh",email:"arun.planemad@gmail.com"}],order:3},"OSM-Japan-telegram":{id:"OSM-Japan-telegram",type:"telegram",locationSet:{include:["jp"]},languageCodes:["ja"],name:"OpenStreetMap Japan Telegram",description:"A Telegram group for the OSM Japan community: {url}",url:"https://t.me/osmjapan",contacts:[{name:"OSMF Japan",email:"info@osmf.jp"}],order:5},"OSM-Kerala-facebook":{id:"OSM-Kerala-facebook",type:"facebook",locationSet:{include:["india_kerala.geojson"]},name:"OpenStreetMap Kerala - Participatory neighborhood mapping",description:"Improve OpenStreetMap in Kerala",extendedDescription:"Mapping in Kerala ? Have questions, want to connect with the community here? Join us at {url}. All are welcome!",url:"https://facebook.com/osmkerala/",contacts:[{name:"Manoj Karingamadathil",email:"dartermanoj@gmail.com"},{name:"Jaisen Nedumpala",email:"jaisuvyas@gmail.com"}]},"OSM-Korea-mailinglist":{id:"OSM-Korea-mailinglist",type:"mailinglist",locationSet:{include:["kp","kr"]},languageCodes:["en","ko"],name:"OpenStreetMap Korea Mailinglist",description:"Talk-ko is an Official Mailinglist for the Communities to dicuss matters about Korea",url:"https://lists.openstreetmap.org/listinfo/talk-ko",contacts:[{name:"Talk-ko-owner",email:"talk-ko-owner@openstreetmap.org"}],order:-3},"OSM-Korea-telegram":{id:"OSM-Korea-telegram",type:"telegram",locationSet:{include:["kp","kr"]},languageCodes:["en","ko"],name:"OSM Korea Telegram",description:"Unofficial Group for OpenStreetMap contributors, communities, and users in Korea to share and discuss.",url:"https://t.me/osmKorea",contacts:[{name:"Yongmin Hong",email:"revi@pobox.com"},{name:"Max N",email:"abonnements@revolwear.com"}]},"OSM-MMR-facebook":{id:"OSM-MMR-facebook",type:"facebook",locationSet:{include:["mm"]},name:"OpenStreetMap Myanmar",description:"Improve OpenStreetMap in Myanmar",extendedDescription:"Mapping in Myanmar? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!",url:"https://www.facebook.com/groups/osmmm/",contacts:[{name:"Yan Naung Oak",email:"yan@phandeeyar.org"},{name:"Patrick Oswald",email:"patrickoswald.omm@gmail.com"},{name:"Set Khaing Oo",email:"setkhaing@phandeeyar.org"}],order:3},"OSM-MNG-facebook":{id:"OSM-MNG-facebook",type:"facebook",locationSet:{include:["mn"]},name:"OpenStreetMap Mongolia",description:"Improve OpenStreetMap in Mongolia",extendedDescription:"Mapping in Mongolia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!",url:"https://www.facebook.com/groups/OSM.Mongolia/",contacts:[{name:" ",email:"talk-mn@openstreetmap.org"}],order:3},"OSM-MY-facebook":{id:"OSM-MY-facebook",type:"facebook",locationSet:{include:["my"]},languageCodes:["en","ms"],name:"OpenStreetMap Malaysia on Facebook",description:"For chat about anything related to OpenStreetMap!",url:"https://www.facebook.com/groups/openstreetmapMY/",contacts:[{name:"Mohd Saidin",email:"projekopenstreetmap@hotmail.com"}],order:3},"OSM-MY-forum":{id:"OSM-MY-forum",type:"forum",locationSet:{include:["my"]},languageCodes:["en","ms"],name:"OpenStreetMap Malaysia Forum",description:"Official OpenStreetMap Malaysia Forum",url:"https://forum.openstreetmap.org/viewforum.php?id=60",contacts:[{name:"Mohd Saidin",email:"projekopenstreetmap@hotmail.com"}],order:-2},"OSM-MY-matrix":{id:"OSM-MY-matrix",type:"matrix",locationSet:{include:["my"]},languageCodes:["en","ms"],name:"OpenStreetMap Malaysia Riot channel",description:"All mappers are welcome! Sign up at {signupUrl}",url:"https://riot.im/app/#/room/#OpenstreetmapMalaysia:matrix.org",signupUrl:"https://riot.im/app/#/register",contacts:[{name:"Ahmad Amsyar",email:"OfficiallyAhmad@protonmail.ch"}]},"OSM-Nepal-facebook":{id:"OSM-Nepal-facebook",type:"facebook",locationSet:{include:["np"]},name:"OpenStreetMap Nepal",description:"Improve OpenStreetMap in Nepal",extendedDescription:"Mapping in Nepal? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!",url:"https://www.facebook.com/groups/mapkathmandu/",contacts:[{name:"Kshitiz Khanal",email:"khanal1990@gmail.com"}],order:3},"OSM-Ottawa-meetup":{id:"OSM-Ottawa-meetup",type:"meetup",locationSet:{include:["ottawa_gatineau.geojson"]},languageCodes:["en","fr"],name:"OpenStreetMap Ottawa",description:"Mappers and OpenStreetMap users in the Ottawa area",url:"https://www.meetup.com/openstreetmap-ottawa/",contacts:[{name:"Denis Carriere",email:"carriere.denis@gmail.com"},{name:"John Marshall",email:"rps333@gmail.com"}]},"OSM-PE":{id:"OSM-PE",type:"osm",locationSet:{include:["pe"]},languageCodes:["es"],name:"OpenStreetMap Peru",description:"News and resources for the OpenStreetMap Peru community",url:"http://osmpe.ourproject.org/",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}]},"OSM-PE-facebook":{id:"OSM-PE-facebook",type:"facebook",locationSet:{include:["pe"]},languageCodes:["es"],name:"OpenStreetMap Peru Facebook",description:"Join the OpenStreetMap Peru community on Facebook",url:"https://www.facebook.com/Osmpe",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}],order:3},"OSM-PE-mailinglist":{id:"OSM-PE-mailinglist",type:"mailinglist",locationSet:{include:["pe"]},languageCodes:["es"],name:"Talk-pe Mailing List",description:"The official mailing list for the OpenStreetMap Peru community",url:"https://lists.openstreetmap.org/pipermail/talk-pe/",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}],order:-3},"OSM-PE-matrix":{id:"OSM-PE-matrix",type:"matrix",locationSet:{include:["pe"]},languageCodes:["es"],name:"OpenStreetMap Peru Matrix Chat",description:"Chat with other members of the OpenStreetMap Peru community in Matrix.",url:"https://matrix.to/#/#osmpe:matrix.org",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}]},"OSM-PE-telegram":{id:"OSM-PE-telegram",type:"telegram",locationSet:{include:["pe"]},languageCodes:["es"],name:"OpenStreetMap Peru Telegram",description:"Join the OpenStreetMap Peru community on Telegram",url:"https://telegram.me/osmPe",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}]},"OSM-PE-twitter":{id:"OSM-PE-twitter",type:"twitter",locationSet:{include:["pe"]},languageCodes:["es"],name:"OpenStreetMap Peru Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/osmpe",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}]},"OSM-PH-facebook":{id:"OSM-PH-facebook",type:"facebook",locationSet:{include:["ph"]},name:"OpenStreetMap PH Facebook",description:"Welcome to OpenStreetMap Philippines, where we encourage all fellow Filipinos to contribute to the OpenStreetMap project.",url:"https://www.facebook.com/OSMPH/",contacts:[{name:"Maning Sambale",email:"emmanuel.sambale@gmail.com"},{name:"OSM PH Group",email:"osm.pilipinas@gmail.com"}],order:3},"OSM-PH-mailinglist":{id:"OSM-PH-mailinglist",type:"mailinglist",locationSet:{include:["ph"]},name:"Talk-ph Mailing List",description:"A mailing list to discuss OpenStreetMap in the Philippines",url:"https://lists.openstreetmap.org/pipermail/talk-ph/",contacts:[{name:"Maning Sambale",email:"emmanuel.sambale@gmail.com"},{name:"OSM PH Group",email:"osm.pilipinas@gmail.com"}],order:-3},"OSM-PH-slack":{id:"OSM-PH-slack",type:"slack",locationSet:{include:["ph"]},name:"OpenStreetMap PH Slack",description:"All are welcome! Sign up at {signupUrl}",url:"https://osmph.slack.com",signupUrl:"https://osmph-chat.herokuapp.com/",contacts:[{name:"Maning Sambale",email:"emmanuel.sambale@gmail.com"},{name:"OSM PH Group",email:"osm.pilipinas@gmail.com"}],order:4},"OSM-PH-telegram":{id:"OSM-PH-telegram",type:"telegram",locationSet:{include:["ph"]},languageCodes:["en","tl"],name:"OpenStreetMap PH Telegram",description:"Un-official, Telegram local community of OpenStreetMap contributors and friends in the Philippines",url:"https://t.me/osmph",contacts:[{name:"Erwin Olario",email:"govvin@gmail.com"},{name:"OSM PH Group",email:"osm.pilipinas@gmail.com"}]},"OSM-PL-facebook-group":{id:"OSM-PL-facebook-group",type:"facebook",locationSet:{include:["pl"]},languageCodes:["pl"],name:"OpenStreetMap Poland Facebook group",description:"Group for mappers and users of OpenStreetMap in Poland",url:"https://www.facebook.com/groups/500589303317858/",contacts:[{name:"Michał Brzozowski",email:"www.haxor@gmail.com"}],order:3},"OSM-PL-forum":{id:"OSM-PL-forum",type:"forum",locationSet:{include:["pl"]},languageCodes:["en","pl"],name:"OpenStreetMap Poland Forum",description:"Forum of Polish OpenStreetMap community",url:"https://forum.openstreetmap.org/viewforum.php?id=23",contacts:[{name:"Daniel Koć",email:"daniel@xn--ko-wla.pl"},{name:"Ryszard Mikke",email:"ryszard.mikke@gmail.com"}],order:10},"OSM-PY-telegram":{id:"OSM-PY-telegram",type:"telegram",locationSet:{include:["py"]},languageCodes:["es"],name:"OSM Paraguay on Telegram",description:"OpenStreetMap Paraguay Telegram chat",url:"https://telegram.me/osm_py",contacts:[{name:"Talk-py Owner",email:"talk-py-owner@openstreetmap.org"}]},"OSM-Portland":{id:"OSM-Portland",type:"meetup",locationSet:{include:["portland_or.geojson"]},languageCodes:["en"],name:"OpenStreetMap Portland",description:"Mappers and OpenStreetMap users in the Portland area",extendedDescription:"OpenStreetMap (OSM) is a map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more, and come join us at a meetup to talk maps, contribute to OSM, and have fun!",url:"https://www.meetup.com/OpenStreetMap-Portland/",contacts:[{name:"Madeline Steele",email:"madeline.steele@gmail.com"}],order:5},"OSM-Portland-forum":{id:"OSM-Portland-forum",type:"forum",locationSet:{include:["portland_or.geojson"]},languageCodes:["en"],name:"OpenStreetMap PDX Google Group",description:"Forum and mailing list for OpenStreetMap users in the Portland area",extendedDescription:"This group is to facilitate improvements to OpenStreetMap in the Portland, Oregon area to support applications such as the Open Trip Planner.",url:"https://groups.google.com/group/osm-pdx",contacts:[{name:"Madeline Steele",email:"madeline.steele@gmail.com"}],order:-2},"OSM-Puducherry-Mailing-List":{id:"OSM-Puducherry-Mailing-List",type:"mailinglist",locationSet:{include:[[79.7324,11.9142]]},name:"Free Software Hardware Movement - Mailing List",description:"FSHM Puducherry mailing list to discuss mapping in Puducherry and other things.",extendedDescription:"FSHM organizes events relating to free software/hardware, technology, activism and OpenStreetMap.",url:"https://www.freelists.org/archive/puduvailug/",signupUrl:"https://www.freelists.org/list/puduvailug",contacts:[{name:"Kamalavelan",email:"sskamalavelan@gmail.com",osm:"demonshreder"},{name:"Prasanna",email:"prasmailme@gmail.com",osm:"Prashere"}],order:-3},"OSM-RU-forum":{id:"OSM-RU-forum",type:"forum",locationSet:{include:["ru"]},languageCodes:["ru"],name:"OpenStreetMap RU forum",description:"OpenStreetMap Russia web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=21",contacts:[{name:"Ilya Zverev",email:"ilya@zverev.info"}],order:-2},"OSM-RU-telegram":{id:"OSM-RU-telegram",type:"telegram",locationSet:{include:["ru"]},languageCodes:["ru"],name:"OpenStreetMap RU telegram",description:"OpenStreetMap Russia telegram chat",url:"https://t.me/ruosm",contacts:[{name:"Ilya Zverev",email:"ilya@zverev.info"}]},"OSM-Reddit":{id:"OSM-Reddit",type:"reddit",locationSet:{include:["001"]},languageCodes:["en"],name:"OpenStreetMap on Reddit",description:"/r/openstreetmap/ is a great place to learn more about OpenStreetMap.  Ask us anything!",url:"https://www.reddit.com/r/openstreetmap/",contacts:[{name:"Serge Wroclawski",email:"emacsen@gmail.com"}],order:2},"OSM-Rome-meetup":{id:"OSM-Rome-meetup",type:"group",locationSet:{include:["roma-capitale.geojson"]},languageCodes:["it"],name:"Incontro Mappatori Romani",description:"Improve OpenStreetMap in the Rome area",extendedDescription:"We aim to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Lazio.",url:"https://wiki.openstreetmap.org/wiki/Rome/Incontro",contacts:[{name:"Martin Koppenhoefer",email:"dieterdreist@gmail.com"}]},"OSM-Seattle":{id:"OSM-Seattle",type:"meetup",locationSet:{include:["seattle.geojson"]},languageCodes:["en"],name:"OpenStreetMap Seattle",description:"Mappers and OpenStreetMap users in the Seattle area",url:"https://www.meetup.com/OpenStreetMap-Seattle/",contacts:[{name:"Clifford Snow",email:"clifford@snowandsnow.us"},{name:"Chase Stephens",email:"seattlefyi@gmail.com"},{name:"Paul McCombs",email:"pablo@imperium.org"}],order:5},"OSM-SoCal":{id:"OSM-SoCal",type:"meetup",locationSet:{include:["la_metro.geojson"]},languageCodes:["en"],name:"OpenStreetMap Southern California",description:"Let's have some fun, contribute something to Los Angeles, and learn about mapping!",extendedDescription:"OpenStreetMap (OSM) Southern California is for anyone interested in mapping to get together to work with OpenStreetMap.  OpenStreetMap, the Wikipedia of maps, is a free open-source map of the world being created by more than 1,000,000 volunteers around the globe.  Everyone is welcome.  If you don't know OpenStreetMap, we'll teach you. If you have an idea for a mapping project or even a field trip that the group can do, great!",url:"https://www.meetup.com/OSM-Southern-California/",contacts:[{name:"Charlotte Wolter",email:"techlady@techlady.com"}],order:5},"OSM-South-Bay":{id:"OSM-South-Bay",type:"meetup",locationSet:{include:["south_sf_bay_area.geojson"]},languageCodes:["en"],name:"OSM South Bay",description:"Map Nights hosted by Code for San Jose",extendedDescription:"Code for San Jose, the local Code for America brigade, hosts monthly Map Nights on Thursday nights in downtown San José. Meet fellow South Bay mappers, help out with local mapping projects, and hear about other civic tech projects. Programming and GIS skills are not required.",url:"https://www.meetup.com/Code-for-San-Jose/",contacts:[{name:"OSM Bay Area mailing list",email:"talk-us-sfbay@openstreetmap.org"}],order:5},"OSM-TH-CNX-meetup":{id:"OSM-TH-CNX-meetup",type:"meetup",locationSet:{include:["thailand_cnx.geojson"]},languageCodes:["en"],name:"OSM Meetup Chiang Mai",description:"Irregular meeting of the OpenStreetMap community in Chiang Mai",extendedDescription:"Members of the OpenStreetMap community meet every few months in Chiang Mai. Get in contact and check out {url} to see when the next meetup is scheduled",url:"https://forum.openstreetmap.org/viewforum.php?id=46",contacts:[{name:"Team Chiang Mai",email:"meetup-cnx@openstreetmap.in.th"}],order:5},"OSM-TH-facebook":{id:"OSM-TH-facebook",type:"facebook",locationSet:{include:["th"]},languageCodes:["en","th"],name:"OpenStreetMap TH Facebook group",description:"Facebook group for OpenStreetMappers in Thailand",url:"https://www.facebook.com/groups/thaiosm/",contacts:[{name:"Theppitak Karoonboonyanan",email:"theppitak@gmail.com"}],order:3},"OSM-TH-forum":{id:"OSM-TH-forum",type:"forum",locationSet:{include:["th"]},languageCodes:["en","th"],name:"OpenStreetMap TH forum",description:"OpenStreetMap Thailand web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=46",contacts:[{name:"Stephan Knauss",email:"osm@stephans-server.de"}],order:-2},"OSM-TW-facebook":{id:"OSM-TW-facebook",type:"facebook",locationSet:{include:["tw"]},languageCodes:["zh-tw"],name:"OpenStreetMap Taiwan Community",description:"Facebook Group for Mappers and OpenStreetMap users to discuss matters about Taiwan.",url:"https://www.facebook.com/groups/OpenStreetMap.TW/",contacts:[{name:"Nobody 沒有人 (Public mail)",email:"hiboard@openstreetmap.tw"}],order:3},"OSM-TW-mailinglist":{id:"OSM-TW-mailinglist",type:"mailinglist",locationSet:{include:["tw"]},languageCodes:["en","zh-tw"],name:"OpenStreetMap Taiwan Mailinglist",description:"Talk-tw is an Official Mailinglist for the Communities to dicuss matters about Taiwan",url:"https://lists.openstreetmap.org/listinfo/talk-tw",contacts:[{name:"Nobody 沒有人 (Public email)",email:"hiboard@openstreetmap.tw"}],order:-3},"OSM-TW-telegram":{id:"OSM-TW-telegram",type:"telegram",locationSet:{include:["tw"]},languageCodes:["zh-tw"],name:"OpenStreetMap Taiwan Telegram",description:"A Telegram group for the OSM Taiwan community: {url}",url:"https://t.me/OSMTaiwan",contacts:[{name:"Nobody 沒有人 (Public mail)",email:"hiboard@openstreetmap.tw"}],order:5},"OSM-Tampa-Bay":{id:"OSM-Tampa-Bay",type:"meetup",locationSet:{include:["tampa_bay.geojson"]},languageCodes:["en"],name:"OpenStreetMap Tampa Bay",description:"Mappers and OpenStreetMap users in the Tampa Bay area",extendedDescription:"OSM Tampa Bay group for local residents to get together and build out the definitive map of Tampa Bay with OpenStreetMap, the free and editable map of the world.  If you're into maps, data, open source, GPS, hiking, cycling, et cetera, you'll love working with OpenStreetMap -- so join in! We'll get together and map and talk about new topics once-a-month or so.",url:"https://www.meetup.com/osmtampabay/",contacts:[{name:"Coleman McCormick",email:"cmccormick@gmail.com"}],order:5},"OSM-Telegram":{id:"OSM-Telegram",type:"telegram",locationSet:{include:["001"]},languageCodes:["en"],name:"OpenStreetMap Telegram",description:"Join the OpenStreetMap Telegram global supergroup at {url}",url:"https://t.me/OpenStreetMapOrg",contacts:[{name:"Max N",email:"abonnements@revolwear.com"}]},"OSM-Twitter":{id:"OSM-Twitter",type:"twitter",locationSet:{include:["001"]},languageCodes:["en"],name:"OpenStreetMap Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/openstreetmap",contacts:[{name:"Harry Wood",email:"mail@harrywood.co.uk"}]},"OSM-US":{id:"OSM-US",type:"group",locationSet:{include:["us"]},languageCodes:["en"],name:"OpenStreetMap US",description:"We help grow and improve OpenStreetMap in the United States.",extendedDescription:"We support OpenStreetMap by holding annual conferences, providing community resources, building partnerships, and by spreading the word. Join OpenStreetMap US here: {signupUrl}",url:"https://www.openstreetmap.us/",signupUrl:"https://www.openstreetmap.us/join",contacts:[{name:"Ian Dees",email:"ian@openstreetmap.us"},{name:"Bryan Housel",email:"bryan@openstreetmap.us"}]},"OSM-US-Slack":{id:"OSM-US-Slack",type:"slack",locationSet:{include:["us"]},languageCodes:["en"],name:"OpenStreetMap US Slack",description:"All are welcome! Sign up at {signupUrl}",url:"https://osmus.slack.com",signupUrl:"https://slack.openstreetmap.us/",contacts:[{name:"Ian Dees",email:"ian@openstreetmap.us"},{name:"Clifford Snow",email:"clifford@snowandsnow.us"}],order:4},"OSM-Utah":{id:"OSM-Utah",type:"meetup",locationSet:{include:["salt_lake_city.geojson"]},languageCodes:["en"],name:"OpenStreetMap Utah",description:"Mappers and OpenStreetMap users in the Salt Lake City area",extendedDescription:"Activities may include things like Learn To Map workshops, mapping parties and outdoor data collection. The events will take place in the SLC area, at least initially.  We are looking for seasoned mappers as well as people new to OSM. Join and let's do some mapping!",url:"https://www.meetup.com/OpenStreetMap-Utah/",contacts:[{name:"Martijn van Exel",email:"m@rtijn.org"}],order:5},"OSM-Vancouver-meetup":{id:"OSM-Vancouver-meetup",type:"meetup",locationSet:{include:["vancouver_metro.geojson"]},languageCodes:["en"],name:"OpenStreetMap Vancouver",description:"Mappers and OpenStreetMap users in the Vancouver, BC area",url:"https://www.meetup.com/OpenStreetMap-Vancouver/",contacts:[{name:"Paul Norman",email:"penorman@mac.com"},{name:"Peter Chin",email:"bpchin@gmail.com"}],order:5},"OSM-Wyoming":{id:"OSM-Wyoming",type:"meetup",locationSet:{include:["wyoming.geojson"]},languageCodes:["en"],name:"OpenStreetMap Wyoming",description:"Mappers and OpenStreetMap users in the state of Wyoming",extendedDescription:"OpenStreetMap (OSM) Wyoming is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties.",url:"https://www.meetup.com/OSM-Wyoming/",contacts:[{name:"Russell Deffner",email:"russdeffner@gmail.com"}],order:5},"OSM-br-discord":{id:"OSM-br-discord",type:"discord",locationSet:{include:["br"]},languageCodes:["pt"],name:"OpenStreetMap Brasil Discord",description:"Join the OpenStreetMap Brasil community on Discord",url:"https://discord.gg/bQn4aCm",contacts:[{name:"Eduardo Addad de Oliveira",email:"duduaddad@gmail.com"}]},"OSM-br-mailinglist":{id:"OSM-br-mailinglist",type:"mailinglist",locationSet:{include:["br"]},languageCodes:["pt"],name:"Talk-br Mailing List",description:"A mailing list to discuss OpenStreetMap in Brazil",url:"https://lists.openstreetmap.org/pipermail/talk-br/",contacts:[{name:"Arlindo Pereira",email:"nighto@gmail.com"}],order:-3},"OSM-br-telegram":{id:"OSM-br-telegram",type:"telegram",locationSet:{include:["br"]},languageCodes:["pt"],name:"OpenStreetMap Brasil Telegram",description:"Join the OpenStreetMap Brasil community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!",url:"https://t.me/OSMBrasil_Comunidade",contacts:[{name:"Vitor George",email:"vitor.george@gmail.com"}]},"OSM-br-twitter":{id:"OSM-br-twitter",type:"twitter",locationSet:{include:["br"]},languageCodes:["pt"],name:"OpenStreetMap Brasil Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/OpenStreetMapBR",contacts:[{name:"Wille Marcel",email:"wille@wille.blog.br"}]},"OSM-help":{id:"OSM-help",type:"forum",locationSet:{include:["001"]},languageCodes:["en"],name:"OpenStreetMap Help",description:"Ask a question and get answers on OSM's community-driven question and answer site.",extendedDescription:"{url} is for everyone who needs help with OpenStreetMap.  Whether you are a beginner mapper or have a technical question, we're here to help!",url:"https://help.openstreetmap.org/",contacts:[{name:"OSMF Operations",email:"operations@osmfoundation.org"}],order:-2},"OSM-india-mailinglist":{id:"OSM-india-mailinglist",type:"mailinglist",locationSet:{include:["in"]},name:"OpenStreetMap India Mailinglist",description:"Talk-in is the official Mailinglist for Indian Community",url:"https://lists.openstreetmap.org/listinfo/talk-in",contacts:[{name:"Arun Ganesh",email:"arun.planemad@gmail.com"}],order:-3},"OSM-india-twitter":{id:"OSM-india-twitter",type:"twitter",locationSet:{include:["in"]},name:"OpenStreetMap India Twitter",description:"We are just a tweet away: {url}",url:"https://twitter.com/osm_in",contacts:[{name:"Jinal Foflia",email:"fofliajinal@gmail.com"}]},"OSM-japan-facebook":{id:"OSM-japan-facebook",type:"facebook",locationSet:{include:["jp"]},languageCodes:["ja"],name:"OpenStreetMap Japan Community",description:"Mappers and OpenStreetMap users in Japan",url:"https://www.facebook.com/groups/osmjapan/",contacts:[{name:"Satoshi IIDA",email:"nyampire@gmail.com"}],order:3},"OSM-japan-mailinglist":{id:"OSM-japan-mailinglist",type:"mailinglist",locationSet:{include:["jp"]},languageCodes:["ja"],name:"OpenStreetMap Japan Mailinglist",description:"Talk-ja is an Official Mailinglist for Japanese Community",url:"https://lists.openstreetmap.org/listinfo/talk-ja",contacts:[{name:"OSMF Japan",email:"info@osmf.jp"}],order:-3},"OSM-japan-twitter":{id:"OSM-japan-twitter",type:"twitter",locationSet:{include:["jp"]},languageCodes:["ja"],name:"OpenStreetMap Japan Twitter",description:"Hashtag on Twitter: {url}",url:"https://twitter.com/hashtag/osmjp",contacts:[{name:"Satoshi IIDA",email:"nyampire@gmail.com"}]},"OSM-japan-website":{id:"OSM-japan-website",type:"osm",locationSet:{include:["jp"]},languageCodes:["ja"],name:"OpenStreetMap Japan",description:"Mappers and OpenStreetMap users in Japan",url:"https://openstreetmap.jp/",contacts:[{name:"Satoshi IIDA",email:"nyampire@gmail.com"}]},"OSM-sri-lanka-facebook":{id:"OSM-sri-lanka-facebook",type:"facebook",locationSet:{include:["lk"]},name:"OpenStreetMap Sri Lanka",description:"Improve OpenStreetMap in Sri Lanka",extendedDescription:"Mapping in Sri Lanka? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!",url:"https://www.facebook.com/groups/142058222659672/",contacts:[{name:"Karan Suthakaran",email:"karansuthakaran@yahoo.com"}],order:3},OSMF:{id:"OSMF",type:"osm",locationSet:{include:["001"]},languageCodes:["en","fr","it","ja","nl","ru"],name:"OpenStreetMap Foundation",description:"OSMF is a UK-based not-for-profit that supports the OpenStreetMap Project",extendedDescription:"OSMF supports the OpenStreetMap by fundraising, maintaining the servers which power OSM, organizing the annual State of the Map conference, and coordinating the volunteers who keep OSM running. You can show your support and have a voice in the direction of OpenStreetMap by joining as an OSMF member here: {signupUrl}",url:"https://wiki.osmfoundation.org/wiki/Main_Page",signupUrl:"https://join.osmfoundation.org/",contacts:[{name:"OSMF Board",email:"board@osmfoundation.org"}],events:[{id:"sotm2020",i18n:true,name:"State of the Map 2020",description:"Join us for 3 days in Cape Town, South Africa for the annual worldwide OpenStreetMap conference, bringing together everyone in the community to socialize, share, and learn.",where:"Cape Town, South Africa",when:"2020-jul-03",url:"https://2020.stateofthemap.org/"}]},"OpenCleveland-meetup":{id:"OpenCleveland-meetup",type:"meetup",locationSet:{include:["cleveland.geojson"]},languageCodes:["en"],name:"Open Cleveland",description:"Improve OpenStreetMap in the Cleveland area",extendedDescription:"Open Geo Cleveland aims to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Northeast Ohio. We're also a maptime chapter =)",url:"https://www.meetup.com/open-cleveland/",contacts:[{name:"Will Skora",email:"skorasaurus@gmail.com"},{name:"Anastasia Diamond-Ortiz",email:"anastasia.diamond@gmail.com"}],order:5},"PHXGeo-meetup":{id:"PHXGeo-meetup",type:"meetup",locationSet:{include:["phoenix.geojson"]},languageCodes:["en"],name:"PHXGeo Meetup",description:"Mappers and OpenStreetMap users in the Phoenix, AZ area",extendedDescription:"This is a meetup group for those in the Phoenix area who like maps, GIS, OpenStreetMap, cartography and anything in between.",url:"https://www.meetup.com/PHXGeo/",contacts:[{name:"Ryan Arp",email:"ryan@arpconsultinggroup.com"}],order:5},"PHXGeo-twitter":{id:"PHXGeo-twitter",type:"twitter",locationSet:{include:["phoenix.geojson"]},languageCodes:["en"],name:"PHXGeo Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/phxgeo",contacts:[{name:"Ryan Arp",email:"ryan@arpconsultinggroup.com"}]},"RS-telegram":{id:"RS-telegram",type:"telegram",locationSet:{include:["riograndedosul.geojson"]},languageCodes:["pt"],name:"OpenStreetMap Rio Grande do Sul Telegram Group",description:"Join the OpenStreetMap Rio Grande do Sul community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!",url:"https://t.me/osmrs"},"South-Tyrol-Mailing-List":{id:"South-Tyrol-Mailing-List",type:"mailinglist",locationSet:{include:["south-tyrol.geojson"]},languageCodes:["de","en","it","lld"],name:"OpenStreetMap mailing list for South Tyrol",description:"OpenStreetMap Italy regional talk list for South Tyrol",url:"https://lists.openstreetmap.org/listinfo/talk-it-southtyrol",contacts:[{name:"Martin Raifer",email:"tyr.asd@gmail.com"}],order:-3},"Trentino-Mailing-List":{id:"Trentino-Mailing-List",type:"mailinglist",locationSet:{include:["trentino.geojson"]},languageCodes:["it"],name:"OpenStreetMap mailing list for Trentino",description:"OpenStreetMap Italy regional talk list for Trentino",url:"https://lists.openstreetmap.org/listinfo/talk-it-trentino",contacts:[{name:"Luca Delucchi",email:"lucadeluge@gmail.com"}],order:-3},"Western-Slope-facebook":{id:"Western-Slope-facebook",type:"facebook",locationSet:{include:["grand_junction_co.geojson"]},languageCodes:["en"],name:"Western Slope OSM Facebook",description:"Mappers and OpenStreetMap users around Grand Junction, CO",url:"https://www.facebook.com/wsosm/",contacts:[{name:"Aaron Young",email:"aaron@kaartgroup.com"}],order:3},"Western-Slope-meetup":{id:"Western-Slope-meetup",type:"meetup",locationSet:{include:["grand_junction_co.geojson"]},languageCodes:["en"],name:"Western Slope OSM Meetup",description:"Mappers and OpenStreetMap users around Grand Junction, CO",extendedDescription:"The goal of this group is to introduce OpenStreetMap to the community, develop a community of mappers, create the most amazing geodata possible using whatever method we can and finally strategize in order to get this data out into our community. Imagine accurate trail signage! Imagine further development of bike paths! Imagine anything you want, that's the joy of OpenStreetMap!",url:"https://www.meetup.com/Western-Slope-OpenStreetMap/",contacts:[{name:"Aaron Young",email:"aaron@kaartgroup.com"}],order:5},"al-forum":{id:"al-forum",type:"forum",locationSet:{include:["al"]},languageCodes:["en","sq"],name:"OSM Albania Forum",description:"OpenStreetMap Albania Forum",url:"https://forum.openstreetmap.org/viewforum.php?id=91",contacts:[{name:"Jonathan Beliën",email:"dev@jbelien.be"},{name:"Amanti Lulo",email:"amanti.lulo@gmail.com"}],order:-2},"al-maptime-tirana":{id:"al-maptime-tirana",type:"group",locationSet:{include:[[19.8156,41.3305]]},languageCodes:["en","sq"],name:"Maptime Tirana",description:"Social events organized around mapping - beginners most welcome!",extendedDescription:"Maptime is an open learning environment for all levels and degrees of knowledge, offering intentional educational support for the beginner. Maptime is simultaneously flexible and structured, creating space for mapping tutorials, workshops, ongoing projects with a shared goal, and independent/collaborative work time.",url:"http://maptime.io/tirana/",contacts:[{name:"Jonathan Beliën",email:"dev@jbelien.be"},{name:"Amanti Lulo",email:"amanti.lulo@gmail.com"}]},"al-telegram":{id:"al-telegram",type:"telegram",locationSet:{include:["al"]},languageCodes:["en","sq"],name:"OSM Albania Telegram channel",description:"OpenStreetMap Albania Telegram channel",url:"https://telegram.me/OpenStreetMapAL",contacts:[{name:"Jonathan Beliën",email:"dev@jbelien.be"},{name:"Amanti Lulo",email:"amanti.lulo@gmail.com"}]},"al-twitter":{id:"al-twitter",type:"twitter",locationSet:{include:["al"]},languageCodes:["en","sq"],name:"OpenStreetMap Albania Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/Osm_Albania"},"at-forum":{id:"at-forum",type:"forum",locationSet:{include:["at"]},languageCodes:["de","en"],name:"OpenStreetMap Austria Forum",description:"The official forum for OpenStreetMap questions in and around Austria",url:"https://forum.openstreetmap.org/viewforum.php?id=89",contacts:[{name:"emga",email:"emgaosm@gmail.com"}],order:-2},"at-mailinglist":{id:"at-mailinglist",type:"mailinglist",locationSet:{include:["at"]},languageCodes:["de"],name:"Talk-at Mailing List",description:"Talk-at is the official mailing list for the Austrian OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-at",contacts:[{name:"AT community",email:"info@openstreetmap.at"}],order:-3},"at-twitter":{id:"at-twitter",type:"twitter",locationSet:{include:["at"]},languageCodes:["de"],name:"OpenStreetMap Austria Twitter",description:"OpenStreetMap Austria On Twitter: {url}",url:"https://twitter.com/osm_at",contacts:[{name:"AT Community",email:"info@openstreetmap.at"}]},"be-chapter":{id:"be-chapter",type:"osm-lc",locationSet:{include:["be"]},languageCodes:["de","en","fr","nl"],name:"OpenStreetMap Belgium Local Chapter",description:"We help grow and improve OpenStreetMap in Belgium.",extendedDescription:"If you want to help to improve and grow the mapping community in Belgium, to make even more people crazy about mapping, OpenStreetMap Belgium is the right place for you!",url:"https://openstreetmap.be/",contacts:[{name:"BE community",email:"community@osm.be"}],order:1},"be-facebook":{id:"be-facebook",type:"facebook",locationSet:{include:["be"]},languageCodes:["de","en","fr","nl"],name:"OpenStreetMap BE Facebook Community",description:"Mappers and OpenStreetMap on Facebook in Belgium",url:"https://www.facebook.com/groups/1419016881706058/",contacts:[{name:"BE community",email:"community@osm.be"}]},"be-forum":{id:"be-forum",type:"forum",locationSet:{include:["be"]},languageCodes:["de","en","fr","nl"],name:"OpenStreetMap BE forum",description:"OpenStreetMap Belgium web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=29",contacts:[{name:"BE community",email:"community@osm.be"}],order:3},"be-irc":{id:"be-irc",type:"irc",locationSet:{include:["be"]},languageCodes:["de","en","fr","nl"],name:"OpenStreetMap Belgium IRC",description:"Join #osmbe on irc.oftc.net (port 6667)",extendedDescription:"Join #osmbe on irc.oftc.net (port 6667), it is bridged with the Matrix chat channel",url:"https://webchat.oftc.net/?channels=osmbe",contacts:[{name:"BE community",email:"community@osm.be"}],order:2},"be-mailinglist":{id:"be-mailinglist",type:"mailinglist",locationSet:{include:["be"]},languageCodes:["de","en","fr","nl"],name:"Talk-be Mailing List",description:"Talk-be is the official mailing list for the Belgian OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-be",contacts:[{name:"BE community",email:"community@osm.be"}],order:4},"be-matrix":{id:"be-matrix",type:"matrix",locationSet:{include:["be"]},languageCodes:["de","en","fr","nl"],name:"OpenStreetMap BE Matrix channel",description:"All mappers are welcome!",extendedDescription:"Most talk is happening at the \"OpenStreetMap Belgium\" channel. You can ask anything there! The other rooms are for specific subjects.",url:"https://riot.im/app/#/group/+osmbe:matrix.org",contacts:[{name:"BE community",email:"community@osm.be"}],order:6},"be-meetup":{id:"be-meetup",type:"meetup",locationSet:{include:["be"]},languageCodes:["de","en","fr","nl"],name:"OpenStreetMap Belgium Meetup",description:"Real life meetups of everyone who is interested in OpenStreetMap",extendedDescription:"Physical meetups are great to meet other mappers, ask them questions and to learn a lot. Especially new contributors are very welcome!",url:"https://meetup.com/OpenStreetMap-Belgium/",contacts:[{name:"BE community",email:"community@osm.be"}],order:5},"be-twitter":{id:"be-twitter",type:"twitter",locationSet:{include:["be"]},languageCodes:["de","en","fr","nl"],name:"OpenStreetMap Belgium Twitter",description:"OSM Belgium on Twitter: @osm_be",url:"https://twitter.com/osm_be",contacts:[{name:"BE community",email:"community@osm.be"}],order:4},"bg-forum":{id:"bg-forum",type:"forum",locationSet:{include:["bg"]},languageCodes:["bg","en"],name:"OpenStreetMap Bulgaria Forum",description:"Forum of OpenStreetMap community in Bulgaria",url:"https://forum.openstreetmap.org/viewforum.php?id=57"},"bg-wiki":{id:"bg-wiki",type:"wiki",locationSet:{include:["bg"]},languageCodes:["bg","en"],name:"OpenStreetMap Wikiproject Bulgaria",description:"Wikiproject page for Bulgaria",url:"https://wiki.openstreetmap.org/wiki/WikiProject_Bulgaria",order:10},"bi-vc-cvl_wiki":{id:"bi-vc-cvl_wiki",type:"osm",locationSet:{include:["bi-vc-cvl.geojson"]},languageCodes:["it"],name:"OSMers BI-VC-CVL",description:"Mappers of northern Piedmont",extendedDescription:"In addition to the monthly meetings, we also have a WhatsApp group.",url:"https://wiki.openstreetmap.org/wiki/OSMers_BI-VC-CVL",contacts:[{name:"Andrea Musuruane",email:"musuruan@gmail.com"},{name:"Marco Brancolini",email:"mbranco2@gmail.com"}],order:3},"bw-facebook":{id:"bw-facebook",type:"facebook",locationSet:{include:["bw"]},languageCodes:["en","tn"],name:"Mapping Botswana on Facebook",description:"Page of OpenStreetMap in Botswana",url:"https://www.facebook.com/MappingBotswana/",contacts:[{name:"info@openstreetmap.org.bw",email:"info@openstreetmap.org.bw"}],order:3},"bw-twitter":{id:"bw-twitter",type:"twitter",locationSet:{include:["bw"]},languageCodes:["en","tn"],name:"Mapping Botswana on Twitter",description:"Twitter of OpenStreetMap in Botswana",url:"https://twitter.com/mappingbotswana",contacts:[{name:"info@openstreetmap.org.bw",email:"info@openstreetmap.org.bw"}]},byosm:{id:"byosm",type:"telegram",locationSet:{include:["by"]},languageCodes:["be","en","ru"],name:"OpenStreetMap Belarus",description:"OpenStreetMap Belarus telegram chat",url:"https://t.me/byosm",contacts:[{name:"Darafei Praliaskouski",email:"me@komzpa.net"}]},"cape-coast-youthmappers":{id:"cape-coast-youthmappers",type:"twitter",locationSet:{include:["cape_coast_gh.geojson"]},languageCodes:["en"],name:"University of Cape Coast YouthMappers",description:"Follow us on Twitter: {url}",extendedDescription:"This is the official handle for the Youth Mappers chapter of the University of Cape Coast, Ghana. we love maps, open data and helping the vulnerable.",url:"https://twitter.com/YouthmappersUCC",contacts:[{name:"Enock Seth Nyamador",email:"kwadzo459@gmail.com"}]},"ch-irc":{id:"ch-irc",type:"irc",locationSet:{include:["ch"]},languageCodes:["de","en","fr","it"],name:"OpenStreetMap Switzerland IRC",description:"Join #osm-ch on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-ch",contacts:[{name:"Swiss OpenStreetMap Association",email:"board@sosm.ch"}],order:-2},"ch-mailinglist":{id:"ch-mailinglist",type:"mailinglist",locationSet:{include:["ch"]},name:"Openstreetmap Schweiz/Suisse/Svizzera/Svizra Mailing List",description:"Mailing list for Switzerland",url:"http://lists.openstreetmap.ch/mailman/listinfo/talk-ch",order:1},"ch-twitter":{id:"ch-twitter",type:"twitter",locationSet:{include:["ch"]},languageCodes:["de","en","fr","it"],name:"OpenStreetMap Switzerland Twitter",description:"Follow us on Twitter: {url}",url:"https://twitter.com/SwissOSM",contacts:[{name:"Swiss OpenStreetMap Association",email:"board@sosm.ch"}]},"cuneo-telegram":{id:"cuneo-telegram",type:"telegram",locationSet:{include:["cuneo.geojson"]},languageCodes:["it"],name:"OpenStreetMap Cuneo Mappers",description:"OpenStreetMap Cuneo Telegram chat",url:"https://t.me/OSMCuneo",contacts:[{name:"Francesco Ansanelli",email:"francians@gmail.com"},{name:"Marco Brancolini",email:"mbranco2@gmail.com"}],order:3},"czech-community":{id:"czech-community",type:"osm",locationSet:{include:["cz"]},languageCodes:["cs","en","sk"],name:"Czech OSM community",description:"Map portal, website and contacts on OSM members in Czechia",url:"https://openstreetmap.cz/komunita",contacts:[{name:"osmcz",email:"dev@openstreetmap.cz"}]},"de-berlin-mailinglist":{id:"de-berlin-mailinglist",type:"mailinglist",locationSet:{include:["de-berlin-brandenburg.geojson"]},languageCodes:["de"],name:"Berlin Mailing List",description:"This is the mailing list for the Berlin OSM community",url:"https://lists.openstreetmap.de/listinfo/berlin",contacts:[{name:"FOSSGIS e.V.",email:"info@fossgis.de"}],order:-3},"de-berlin-meetup":{id:"de-berlin-meetup",type:"meetup",locationSet:{include:["de-berlin-brandenburg.geojson"]},languageCodes:["de"],name:"OpenStreetMap Berlin-Brandenburg Meetup",description:"Mappers and OpenStreetMap users in the Berlin area",url:"https://www.meetup.com/OSM-Berlin-Brandenburg/",contacts:[{name:"Christopher Lorenz",email:"osm@lorenz.lu"}],order:5},"de-berlin-telegram":{id:"de-berlin-telegram",type:"telegram",locationSet:{include:["de-berlin-brandenburg.geojson"]},languageCodes:["de"],name:"@osmberlin on Telegram",description:"OpenStreetMap Berlin Telegram chat",url:"https://t.me/osmberlin",contacts:[{name:"Christopher Lorenz",email:"osm@lorenz.lu"}]},"de-berlin-twitter":{id:"de-berlin-twitter",type:"twitter",locationSet:{include:["de-berlin-brandenburg.geojson"]},languageCodes:["de"],name:"OpenStreetMap Berlin Twitter",description:"Follow us on Twitter: {url}",url:"https://twitter.com/osmberlin",contacts:[{name:"Christopher Lorenz",email:"osm@lorenz.lu"}]},"de-forum":{id:"de-forum",type:"forum",locationSet:{include:["de"]},languageCodes:["de"],name:"OpenStreetMap DE forum",description:"OpenStreetMap Germany web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=14",contacts:[{name:"FOSSGIS e.V.",email:"info@fossgis.de"}],order:-2},"de-hamburg-telegram":{id:"de-hamburg-telegram",type:"telegram",locationSet:{include:["de-hamburg.geojson"]},languageCodes:["de"],name:"OSM Hamburg on Telegram",description:"OpenStreetMap Hamburg Telegram chat: {url}",url:"https://t.me/osm_de_hh"},"de-irc":{id:"de-irc",type:"irc",locationSet:{include:["de"]},languageCodes:["de"],name:"OpenStreetMap Germany IRC",description:"Join #osm-de on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-de",contacts:[{name:"FOSSGIS e.V.",email:"info@fossgis.de"}],order:-4},"de-mailinglist":{id:"de-mailinglist",type:"mailinglist",locationSet:{include:["de"]},languageCodes:["de"],name:"Talk-de Mailing List",description:"Talk-de is the official mailing list for the German OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-de",contacts:[{name:"FOSSGIS e.V.",email:"info@fossgis.de"}],order:-3},"de-matrix":{id:"de-matrix",type:"matrix",locationSet:{include:["de"]},languageCodes:["de"],name:"OpenStreetMap Germany Matrix",description:"Join #osm-de:matrix.org at https://riot.im/app/#/room/%23osm-de:matrix.org",url:"https://riot.im/app/#/room/%23osm-de:matrix.org",contacts:[{name:"Christopher Rossbach",email:"public.cr@protonmail.ch"}],order:4},"de-ostwestfalen-lippe-mailinglist":{id:"de-ostwestfalen-lippe-mailinglist",type:"mailinglist",locationSet:{include:["de-ostwestfalen-lippe.geojson"]},languageCodes:["de"],name:"OWL Mailing List",description:"This is the mailing list for the Ostwestfalen-Lippe OSM community",url:"https://gt.owl.de/mailman/listinfo/osm",contacts:[{name:"Florian Lohoff",email:"osm-owner@gt.owl.de"}],order:-3},"de-telegram":{id:"de-telegram",type:"telegram",locationSet:{include:["de"]},languageCodes:["de"],name:"OpenStreetMap Germany Telegram",description:"Join the OpenStreetMap Germany Telegram supergroup at {url}",url:"https://t.me/OSM_de",contacts:[{name:"Max N",email:"abonnements@revolwear.com"}]},"de-viersen-meetup":{id:"de-viersen-meetup",type:"osm",locationSet:{include:[[6.354282,51.264137]]},languageCodes:["de"],name:"OpenStreetMap Viersen Meetup",description:"OSM community and users meetup Kreis Viersen and Mönchengladbach",url:"https://wiki.openstreetmap.org/wiki/Niederrhein/Viersen/Stammtisch",order:5},"dk-forum":{id:"dk-forum",type:"forum",locationSet:{include:["dk"]},languageCodes:["da"],name:"OpenStreetMap Denmark Web Forum",description:"OpenStreetMap Denmark web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=48",contacts:[{name:"Talk-dk-owner",email:"talk-dk-owner@openstreetmap.org"}],order:-2},"dk-irc":{id:"dk-irc",type:"irc",locationSet:{include:["dk"]},languageCodes:["da"],name:"OpenStreetMap Denmark IRC",description:"Join #osm-dk on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-dk",contacts:[{name:"Talk-dk-owner",email:"talk-dk-owner@openstreetmap.org"}],order:-4},"dk-mailinglist":{id:"dk-mailinglist",type:"mailinglist",locationSet:{include:["dk"]},languageCodes:["da"],name:"Talk-dk Mailing List",description:"A mailing list to discuss OpenStreetMap in Denmark",url:"https://lists.openstreetmap.org/listinfo/talk-dk",contacts:[{name:"Talk-dk-owner",email:"talk-dk-owner@openstreetmap.org"}],order:-3},"es-twitter":{id:"es-twitter",type:"twitter",locationSet:{include:["es"]},languageCodes:["es"],name:"OpenStreetMap España Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/openstreetmapes"},"et-telegram":{id:"et-telegram",type:"telegram",locationSet:{include:["et"]},name:"@OpenStreetMapEthiopia on Telegram",description:"OpenStreetMap Ethiopia Telegram chat",url:"https://t.me/openstreetmapethiopia",contacts:[{name:"Ben Jamin",email:"benjazben10@gmail.com"}]},"fi-forum":{id:"fi-forum",type:"forum",locationSet:{include:["fi"]},languageCodes:["fi"],name:"OpenStreetMap FI forum",description:"OpenStreetMap Finland web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=15",contacts:[{name:"Talk-fi administrator",email:"talk-fi-owner@openstreetmap.org"}],order:-2},"fi-irc":{id:"fi-irc",type:"irc",locationSet:{include:["fi"]},languageCodes:["fi"],name:"OpenStreetMap Finland IRC",description:"Join #osm-fi on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-fi",contacts:[{name:"Talk-fi administrator",email:"talk-fi-owner@openstreetmap.org"}],order:-4},"fi-mailinglist":{id:"fi-mailinglist",type:"mailinglist",locationSet:{include:["fi"]},languageCodes:["fi"],name:"Talk-fi Mailing List",description:"Talk-fi is the official mailing list for the Finnish OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-fi",contacts:[{name:"Talk-fi administrator",email:"talk-fi-owner@openstreetmap.org"}],order:-3},"fr-chapter":{id:"fr-chapter",type:"osm-lc",locationSet:{include:["fr"]},languageCodes:["fr"],name:"OpenStreetMap France Local Chapter",description:"We help grow and improve OpenStreetMap in France.",url:"https://www.openstreetmap.fr/",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}],order:1},"fr-facebook":{id:"fr-facebook",type:"facebook",locationSet:{include:["fr"]},languageCodes:["fr"],name:"OpenStreetMap France Facebook page",description:"OpenStreetMap France Facebook page",url:"https://www.facebook.com/osmfr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}],order:3},"fr-forum":{id:"fr-forum",type:"forum",locationSet:{include:["fr"]},languageCodes:["fr"],name:"OpenStreetMap France web forum",description:"OpenStreetMap France web forum",url:"https://forum.openstreetmap.fr/",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}],order:-2},"fr-irc":{id:"fr-irc",type:"irc",locationSet:{include:["fr"]},languageCodes:["fr"],name:"OpenStreetMap France on IRC",description:"Join #osm-fr on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-fr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}],order:-4},"fr-mailinglist":{id:"fr-mailinglist",type:"mailinglist",locationSet:{include:["fr"]},languageCodes:["fr"],name:"Talk-fr Mailing List",description:"Talk-fr mailing list",url:"https://lists.openstreetmap.org/listinfo/talk-fr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}],order:-3},"fr-telegram":{id:"fr-telegram",type:"telegram",locationSet:{include:["fr"]},name:"OpenStreetMap France on Telegram",description:"A Telegram group for the OSM France community: {url}",url:"https://t.me/osmfr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}],order:5},"fr-twitter":{id:"fr-twitter",type:"twitter",locationSet:{include:["fr"]},languageCodes:["fr"],name:"OpenStreetMap France on Twitter",description:"OpenStreetMap France on Twitter: {url}",url:"https://twitter.com/osm_fr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}]},"galicia-wiki":{id:"galicia-wiki",type:"wiki",locationSet:{include:["galicia.geojson"]},name:"OpenStreetMap Wikiproject Galicia",description:"Everything you need to know about mapping in Galicia: {url}",url:"https://wiki.openstreetmap.org/wiki/Gl:P%C3%A1xina_principal"},"gb-irc":{id:"gb-irc",type:"irc",locationSet:{include:["gb"]},languageCodes:["cy","en"],name:"OpenStreetMap United Kingdom IRC",description:"Join #osm-gb on irc.oftc.net (port 6667)",extendedDescription:"Join #osm-gb on irc.oftc.net (port 6667), please be patient and wait for a few minutes if you ask a question",url:"https://webchat.oftc.net/?channels=osm-gb",contacts:[{name:"UK mailing list",email:"talk-gb-owner@lists.openstreetmap.org"}],order:2},"gb-mailinglist":{id:"gb-mailinglist",type:"mailinglist",locationSet:{include:["gb"]},languageCodes:["en"],name:"Talk-gb Mailing List",description:"Talk-gb is the main communication forum list for the UK (including Northern Ireland) OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-gb",contacts:[{name:"UK mailing list",email:"talk-gb-owner@lists.openstreetmap.org"}],order:4},geogeeks_perth_meetup:{id:"geogeeks_perth_meetup",type:"group",locationSet:{include:["western_australia.geojson"]},languageCodes:["en"],name:"GeoGeeks Perth Meetup",description:"Perth-based meetup group for people interested in mapping, geospatial data, and open source. We'll be working on anything that involves a sense of place.",url:"https://geogeeks.org",contacts:[{name:"GeoGeeks Perth",email:"geogeeks.perth@gmail.com"}]},"guatemala-telegram":{id:"guatemala-telegram",type:"telegram",locationSet:{include:["gt"]},languageCodes:["es"],name:"OSM Guatemala on Telegram",description:"OpenStreetMap Guatemala Telegram chat",url:"https://telegram.me/openstreetmapGT"},"hr-facebook":{id:"hr-facebook",type:"facebook",locationSet:{include:["hr"]},languageCodes:["hr"],name:"OpenStreetMap Croatia Facebook group",description:"OpenStreetMap Croatia Facebook group",url:"https://www.facebook.com/groups/541098862671461",contacts:[{name:"OpenStreetMap Croatia",email:"info@osm-hr.org"}],order:3},"hr-irc":{id:"hr-irc",type:"irc",locationSet:{include:["hr"]},languageCodes:["hr"],name:"OpenStreetMap Croatia on IRC",description:"Join #osm-hr on irc.freenode.org (port 6667)",url:"https://webchat.freenode.net/?url=irc://irc.freenode.net/osm-hr",contacts:[{name:"OpenStreetMap Croatia",email:"info@osm-hr.org"}],order:-4},"hr-mailinglist":{id:"hr-mailinglist",type:"mailinglist",locationSet:{include:["hr"]},languageCodes:["hr"],name:"Talk-hr Mailing List",description:"Talk-hr mailing list",url:"https://lists.openstreetmap.org/listinfo/talk-hr",contacts:[{name:"OpenStreetMap Croatia",email:"info@osm-hr.org"}],order:-3},"hu-facebook":{id:"hu-facebook",type:"facebook",locationSet:{include:["hu"]},languageCodes:["hu"],name:"OpenStreetMap HU on Facebook",description:"Mappers and OpenStreetMap Facebook in Hungary",url:"https://www.facebook.com/groups/osm.hu/",contacts:[{name:"Ferenc Veres",email:"info@openstreetmap.hu"}],order:3},"hu-forum":{id:"hu-forum",type:"forum",locationSet:{include:["hu"]},languageCodes:["hu"],name:"OpenStreetMap HU forum",description:"OpenStreetMap Hungary web forum",url:"https://groups.google.com/forum/#!forum/openstreetmap-hungary",contacts:[{name:"Ferenc Veres",email:"info@openstreetmap.hu"}],order:-2},"hu-matrix":{id:"hu-matrix",type:"matrix",locationSet:{include:["hu"]},languageCodes:["en","hu"],name:"OpenStreetMap HU matrix room",description:"OpenStreetMap Hungary matrix chat",extendedDescription:"OpenStreetMap chat on map topics. One of the OSM community support forums.",url:"https://riot.grin.hu/#/room/#osm:grin.hu",contacts:[{name:"Peter 'grin' Gervai",email:"grin@grin.hu"}]},"hu-meetup":{id:"hu-meetup",type:"meetup",locationSet:{include:["hu"]},languageCodes:["hu"],name:"OpenStreetMap Hungary Meetup",description:"The platform for organizing meetups in Hungary",url:"https://www.meetup.com/OpenStreetMap-Hungary",contacts:[{name:"Ferenc Veres",email:"info@openstreetmap.hu"}],order:5},"il-telegram":{id:"il-telegram",type:"telegram",locationSet:{include:["il"]},name:"OSM Israel on Telegram",description:"A Telegram group for the OpenStreetMap community in Israel: {url}",url:"https://t.me/OSM_Israel",order:5},"ireland-chapter":{id:"ireland-chapter",type:"osm-lc",locationSet:{include:["ie"]},languageCodes:["en"],name:"OpenStreetMap Ireland Local Chapter",description:"We help grow and improve OpenStreetMap in Ireland.",extendedDescription:"OpenStreetMap Ireland provides an advocate voice for the OpenStreetMap project on the island of Ireland, in addition to interacting with other open initiatives.",url:"https://www.openstreetmap.ie/",order:1},"ireland-facebook":{id:"ireland-facebook",type:"facebook",locationSet:{include:["ie"]},languageCodes:["en"],name:"OpenStreetMap Ireland Facebook group",description:"OpenStreetMap Ireland Facebook page",url:"https://www.facebook.com/groups/OpenStreetMapIreland",order:3},"ireland-irc":{id:"ireland-irc",type:"irc",locationSet:{include:["ie"]},languageCodes:["en"],name:"OpenStreetMap Ireland IRC",description:"Join #osm-ie on irc.oftc.net (port 6667)",extendedDescription:"Join #osm-ie on irc.oftc.net (port 6667), please be patient and wait for a few minutes if you ask a question",url:"https://webchat.oftc.net/?channels=osm-ie",order:-1},"ireland-mailinglist":{id:"ireland-mailinglist",type:"mailinglist",locationSet:{include:["ie"]},languageCodes:["en"],name:"Talk-ie Mailing List",description:"Talk-ie is the mailing list for the Irish OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-ie",order:2},"ireland-telegram":{id:"ireland-telegram",type:"telegram",locationSet:{include:["ie"]},languageCodes:["en"],name:"OSM Ireland on Telegram",description:"OpenStreetMap Ireland Telegram chat",url:"https://t.me/joinchat/BDLI7w9jCWm7Bwm2T06jwQ?fbclid=IwAR1ltY85Y7_4_CZhhwLOsLLppzis1MOVRRy897epT99JuZ9ZHZF8wpDRIfk",order:4},"ireland-twitter":{id:"ireland-twitter",type:"twitter",locationSet:{include:["ie"]},languageCodes:["en"],name:"OpenStreetMap IE on Twitter",description:"OpenStreetMap IE on Twitter: {url}",url:"https://twitter.com/osm_ie",order:5},"is-chapter":{id:"is-chapter",type:"osm-lc",locationSet:{include:["is"]},languageCodes:["en","is"],name:"OpenStreetMap Iceland Local Chapter",description:"We help grow and improve OpenStreetMap in Iceland.",url:"https://www.hlidskjalf.is/",contacts:[{name:"Talk-is-owner",email:"talk-is-owner@openstreetmap.org"}],order:1},"is-facebook":{id:"is-facebook",type:"facebook",locationSet:{include:["is"]},languageCodes:["en","is"],name:"OSM Iceland on Facebook",description:"Page of OpenStreetMap in Iceland",url:"https://www.facebook.com/osmiceland/",contacts:[{name:"Talk-is-owner",email:"talk-is-owner@openstreetmap.org"}],order:3},"is-mailinglist":{id:"is-mailinglist",type:"mailinglist",locationSet:{include:["is"]},languageCodes:["en","is"],name:"Talk-is Mailing List",description:"Talk-is is the official mailing list for the Icelandic OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-is",contacts:[{name:"Talk-is-owner",email:"talk-is-owner@openstreetmap.org"}],order:-3},"is-twitter":{id:"is-twitter",type:"twitter",locationSet:{include:["is"]},languageCodes:["en","is"],name:"OSM Iceland on Twitter",description:"Twitter of OpenStreetMap in Iceland",url:"https://twitter.com/openstreetmapis",contacts:[{name:"Talk-is-owner",email:"talk-is-owner@openstreetmap.org"}]},"it-chapter":{id:"it-chapter",type:"osm-lc",locationSet:{include:["it"]},languageCodes:["it"],name:"OpenStreetMap Italy Local Chapter",description:"We help grow and improve OpenStreetMap in Italy.",url:"https://www.wikimedia.it/",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}],order:1},"it-facebook":{id:"it-facebook",type:"facebook",locationSet:{include:["it"]},languageCodes:["it"],name:"OpenStreetMap Italy Facebook",description:"Join the OpenStreetMap Italy community on Facebook",url:"https://www.facebook.com/OpenStreetMap.Italia/",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}],order:3},"it-irc":{id:"it-irc",type:"irc",locationSet:{include:["it"]},languageCodes:["it"],name:"OpenStreetMap Italy IRC",description:"Join #osm-it on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-it",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}],order:-4},"it-mailinglist":{id:"it-mailinglist",type:"mailinglist",locationSet:{include:["it"]},languageCodes:["it"],name:"Talk-it Mailing List",description:"Talk-it is the official mailing list for the Italian OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-it",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}],order:-3},"it-telegram":{id:"it-telegram",type:"telegram",locationSet:{include:["it"]},languageCodes:["it"],name:"@OpenStreetMapItalia on Telegram",description:"OpenStreetMap Italy Telegram chat",url:"https://t.me/OpenStreetMapItalia",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}],order:4},"it-twitter":{id:"it-twitter",type:"twitter",locationSet:{include:["it"]},languageCodes:["it"],name:"OpenStreetMap Italy Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/OpenStreetMapIt",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}],order:2},"kazakhstan-telegram":{id:"kazakhstan-telegram",type:"telegram",locationSet:{include:["kz"]},name:"OSM Kazakhstan on Telegram",description:"OpenStreetMap Kazakhstan Telegram chat",url:"https://t.me/osm_kz"},"kosovo-matrix":{id:"kosovo-matrix",type:"matrix",locationSet:{include:["xk"]},languageCodes:["en","sq","sr"],name:"OpenStreetMap Kosovo on Matrix (bridged with the one in Telegram)",description:"Semi-official all-Kosovo public group. We welcome all mappers from anywhere in any language.",url:"https://riot.im/app/#/room/#osmkosovo:matrix.org"},"kosovo-telegram":{id:"kosovo-telegram",type:"telegram",locationSet:{include:["xk"]},languageCodes:["en","sq","sr"],name:"OpenStreetMap Kosovo on Telegram",description:"Semi-official all-Kosovo Telegram public group. We welcome all mappers from anywhere in any language.",url:"https://t.me/osmkosovo",contacts:[{name:"Guillaume Rischard",email:"guillaumenospam@openstreetmapnospam.lu"}],order:1},"latam-facebook":{id:"latam-facebook",type:"facebook",locationSet:{include:["419"]},languageCodes:["en","es","pt"],name:"OpenStreetMap Latin America Facebook",description:"Mappers and OpenStreetMap on Facebook in Latin America",url:"https://www.facebook.com/osmlatam",contacts:[{name:"OSM LATAM Community",email:"info@osmlatam.org"}],order:1},"latam-irc":{id:"latam-irc",type:"irc",locationSet:{include:["419"]},languageCodes:["en","es","pt"],name:"OpenStreetMap Latin America IRC",description:"Join #osm-latam on irc.oftc.net (port 6667)",url:"http://webchat.oftc.net/?channels=osm-latam",contacts:[{name:"OSM LATAM Community",email:"info@osmlatam.org"}],order:3},"latam-mailinglist":{id:"latam-mailinglist",type:"mailinglist",locationSet:{include:["419"]},languageCodes:["en","es","pt"],name:"Talk-latam Mailing List",description:"Talk-latam is the official mailing list for the Latinamerican OpenStreetMap community",url:"https://lists.openstreetmap.org/listinfo/talk-latam",contacts:[{name:"OSM LATAM Community",email:"info@osmlatam.org"}],order:2},"latam-matrix":{id:"latam-matrix",type:"matrix",locationSet:{include:["419"]},languageCodes:["en","es","pt"],name:"OpenStreetMap Latin America Matrix",description:"Chat with other members of the Latinamerican OSM community, it is bridged with the Telegram chat",url:"https://matrix.to/#/#osm-latam:matrix.org",contacts:[{name:"OSM LATAM Community",email:"info@osmlatam.org"}],order:3},"latam-telegram":{id:"latam-telegram",type:"telegram",locationSet:{include:["419"]},languageCodes:["en","es","pt"],name:"OpenStreetMap Latin America Telegram",description:"Chat with other members of the Latinamerican OSM community, it is bridged with the Matrix chat",url:"https://t.me/osmlatam",contacts:[{name:"OSM LATAM Community",email:"info@osmlatam.org"}],order:3},"latam-twitter":{id:"latam-twitter",type:"twitter",locationSet:{include:["419"]},languageCodes:["en","es","pt"],name:"OpenStreetMap Latin America Twitter",description:"OpenStreetMap Latin America on Twitter: {url}",url:"https://twitter.com/osmlatam",contacts:[{name:"OSM LATAM Community",email:"info@osmlatam.org"}],order:3},"latam-wiki":{id:"latam-wiki",type:"wiki",locationSet:{include:["419"]},languageCodes:["en","es","pt"],name:"OpenStreetMap Wikiproject Latin America",description:"Everything you need to know about mapping in Latin America",url:"https://wiki.openstreetmap.org/wiki/ES:OSM_Latam",contacts:[{name:"OSM LATAM Community",email:"info@osmlatam.org"}],order:2},"lu-mailinglist":{id:"lu-mailinglist",type:"mailinglist",locationSet:{include:["lu"]},languageCodes:["de","en","fr","lb"],name:"Talk-lu Mailing List",description:"Official mailing list for the Luxembourgish OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-lu",contacts:[{name:"David Morais Ferreira",email:"contact@openstreetmap.lu"}],order:-3},"mailinglist-sk-googlegroups":{id:"mailinglist-sk-googlegroups",type:"mailinglist",locationSet:{include:["sk"]},languageCodes:["cz","en","sk"],name:"Slovak mailing list on google groups",description:"Official mailing list for Slovak community",url:"https://groups.google.com/forum/#!forum/osm_sk",contacts:[{name:"OpenStreetMap Slovakia",email:"osm_sk@googlegroups.com"}],order:-3},"map-kibera":{id:"map-kibera",type:"group",locationSet:{include:[[36.8196,-1.2904]]},languageCodes:["en"],name:"Map Kibera Trust",description:"Map Kibera is a registered organization working in Kenya",extendedDescription:"Map Kibera Trust’s mission is to increase influence and representation of marginalized communities through the creative use of digital tools for action.",url:"https://mapkibera.org/",contacts:[{name:"Map Kibera",email:"contact@mapkibera.org"}],order:4},"mappa-mercia-group":{id:"mappa-mercia-group",type:"group",locationSet:{include:["england-west-midlands.geojson"]},languageCodes:["en"],name:"Mappa Mercia local group",description:"A home for OpenStreetMap enthusiasts in the Midlands",extendedDescription:"Mappa Mercia is a project to grow OpenStreetMap in the West Midlands, UK. We run community events, provide training and support local organisations wishing to open up their data.",url:"http://www.mappa-mercia.org/",contacts:[{name:"Brian Prangle",email:"community@mappa-mercia.org"}],order:5},"md-googlegroup":{id:"md-googlegroup",type:"forum",locationSet:{include:["md"]},languageCodes:["mo","ro","ru"],name:"OSM Moldova Google Group",description:"OpenStreetMap Moldova Google Group",url:"https://groups.google.com/forum/#!forum/openstreetmap-moldova",contacts:[{name:"Ion Moldovan",email:"6yhxhs7t7huf@inbox.ru"}],order:1},"md-telegram":{id:"md-telegram",type:"telegram",locationSet:{include:["md"]},languageCodes:["mo","ro","ru"],name:"@OSMMoldova on Telegram",description:"OpenStreetMap Moldova Telegram chat",url:"https://t.me/OSMMoldova",contacts:[{name:"Ion Moldovan",email:"6yhxhs7t7huf@inbox.ru"}],order:2},"ni-facebook":{id:"ni-facebook",type:"facebook",locationSet:{include:["ni"]},languageCodes:["es"],name:"OpenStreetMap NI Community",description:"Mappers and OpenStreetMap on Facebook in Nicaragua",url:"https://www.facebook.com/mapanica/",contacts:[{name:"NI Community",email:"talk-ni-owner@openstreetmap.org"}],order:3},"ni-mailinglist":{id:"ni-mailinglist",type:"mailinglist",locationSet:{include:["ni"]},languageCodes:["es"],name:"Talk-ni Mailing List",description:"Talk-ni is the official mailing list for the Nicaraguan OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-ni",contacts:[{name:"NI Community",email:"talk-ni-owner@openstreetmap.org"}],order:-3},"ni-telegram":{id:"ni-telegram",type:"telegram",locationSet:{include:["ni"]},languageCodes:["es"],name:"OSM Nicaragua on Telegram",description:"OpenStreetMap Nicaragua Telegram chat",url:"https://telegram.me/mapanica",contacts:[{name:"NI Community",email:"talk-ni-owner@openstreetmap.org"}]},"ni-twitter":{id:"ni-twitter",type:"twitter",locationSet:{include:["ni"]},languageCodes:["es"],name:"OpenStreetMap Nicaragua Twitter",description:"OSM Nicaragua on Twitter: @osm_ni",url:"https://twitter.com/osm_ni",contacts:[{name:"NI Community",email:"talk-ni-owner@openstreetmap.org"}]},"nl-forum":{id:"nl-forum",type:"forum",locationSet:{include:["nl"]},languageCodes:["nl"],name:"Netherlands OpenStreetMap forum",description:"OpenStreetMap Netherlands web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=12",contacts:[{name:"Peter Elderson",email:"pelderson@gmail.com"}],order:3},"nl-telegram":{id:"nl-telegram",type:"telegram",locationSet:{include:["nl"]},languageCodes:["nl"],name:"Netherlands OpenStreetMap Telegram",description:"A Telegram group for the OSM Netherlands community: {url}",url:"https://t.me/osm_nl",contacts:[{name:"Peter Elderson",email:"pelderson@gmail.com"}],order:5},"no-forum":{id:"no-forum",type:"forum",locationSet:{include:["no"]},languageCodes:["no"],name:"OpenStreetMap Norway Web Forum",description:"OpenStreetMap Norway web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=68",contacts:[{name:"OpenStreetMap Norway",email:"kart@nuug.no"}],order:-2},"no-irc":{id:"no-irc",type:"irc",locationSet:{include:["no"]},languageCodes:["no"],name:"OpenStreetMap Norway on IRC",description:"Chat room for mappers and OpenStreetMap users, developers and enthusiasts in Norway",url:"https://webchat.oftc.net/?channels=osm-no",contacts:[{name:"OpenStreetMap Norway",email:"kart@nuug.no"}],order:-4},"no-mailinglist":{id:"no-mailinglist",type:"mailinglist",locationSet:{include:["no"]},languageCodes:["no"],name:"OpenStreetMap Norway mailing list",description:"Mailing list for mappers and OpenStreetMap users, developers and enthusiasts in Norway",url:"https://lists.nuug.no/mailman/listinfo/kart",contacts:[{name:"OpenStreetMap Norway",email:"kart@nuug.no"}],order:-3},"no-telegram":{id:"no-telegram",type:"telegram",locationSet:{include:["no"]},languageCodes:["no"],name:"@OSM_no on Telegram",description:"OpenStreetMap Norway Telegram chat",url:"https://t.me/OSM_no",contacts:[{name:"Syver Stensholt",email:"sssandum@gmail.com"}]},"osm-afghanistan-facebook":{id:"osm-afghanistan-facebook",type:"facebook",locationSet:{include:["af"]},languageCodes:["en","fa","ps"],name:"OpenStreetMap Afghanistan",description:"Improve OpenStreetMap in Afghanistan",url:"https://www.facebook.com/groups/321292812113316/",contacts:[{name:"Walker Kosmidou-Bradley",email:"walker.t.bradley@gmail.com"}],order:3},"osm-africa-telegram":{id:"osm-africa-telegram",type:"telegram",locationSet:{include:["002"]},name:"OpenStreetMap Africa Telegram",description:"OpenStreetMap Telegram for Africa",url:"https://t.me/OSMAfrica",contacts:[{name:"OSM Africa",email:"info@openstreetmap.africa"}]},"osm-asia-telegram":{id:"osm-asia-telegram",type:"telegram",locationSet:{include:["142"]},name:"OpenStreetMap Asia Telegram",description:"Join our family: {url}",url:"https://t.me/OpenStreetMapAsia",contacts:[{name:"Erwin Olario",email:"govvin@gmail.com"}]},"osm-at":{id:"osm-at",type:"osm",locationSet:{include:["at"]},languageCodes:["de"],name:"OpenStreetMap Austria",description:"The platform for information on OpenStreetMap in Austria",url:"https://www.openstreetmap.at/",contacts:[{name:"AT community",email:"info@openstreetmap.at"}]},"osm-ch":{id:"osm-ch",type:"osm-lc",locationSet:{include:["ch"]},languageCodes:["de","en","fr","it"],name:"OpenStreetMap Switzerland",description:"The platform for information on OpenStreetMap in Switzerland",url:"https://osm.ch/",contacts:[{name:"Swiss OpenStreetMap Association",email:"board@sosm.ch"}]},"osm-de":{id:"osm-de",type:"osm-lc",locationSet:{include:["de"]},languageCodes:["de"],name:"OpenStreetMap Germany",description:"The platform for information on OpenStreetMap in Germany",url:"https://www.openstreetmap.de/",contacts:[{name:"FOSSGIS e.V.",email:"info@fossgis.de"}]},"osm-gh-facebook":{id:"osm-gh-facebook",type:"facebook",locationSet:{include:["gh"]},languageCodes:["en"],name:"OpenStreetMap Ghana on Facebook",description:"Facebook group for people interested in OpenStreetMap.",extendedDescription:"Mappers in Ghana community, promoting OpenStreetMap and Humanitarian OpenStreetMap Team (HOT) projects in Ghana. Join us.",url:"https://www.facebook.com/OSMGhana/",contacts:[{name:"Enock Seth Nyamador",email:"enock@osmghana.org"}],order:3},"osm-gh-telegram":{id:"osm-gh-telegram",type:"telegram",locationSet:{include:["gh"]},languageCodes:["en"],name:"OpenStreetMap Ghana Telegram",description:"OpenStreetMap Ghana community on Telegram",url:"https://t.me/osmghana",contacts:[{name:"Enock Seth Nyamador",email:"enock@osmghana.org"}]},"osm-gh-twitter":{id:"osm-gh-twitter",type:"twitter",locationSet:{include:["gh"]},languageCodes:["en"],name:"OpenStreetMap Ghana on Twitter",description:"Follow us on Twitter: {url}",url:"https://twitter.com/osmghana",contacts:[{name:"Enock Seth Nyamador",email:"enock@osmghana.org"}]},"osm-india-forum":{id:"osm-india-forum",type:"forum",locationSet:{include:["in"]},name:"OpenStreetMap India forum",description:"OpenStreetMap India web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=65",contacts:[{name:"OpenStreetMap India",email:"openstreetmapindia@gmail.com"}],order:-2},"osm-india-github":{id:"osm-india-github",type:"github",locationSet:{include:["in"]},name:"OpenStreetMap India GitHub",description:"Code with us: {url}",url:"https://github.com/osm-in",contacts:[{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"osm-india-telegram":{id:"osm-india-telegram",type:"telegram",locationSet:{include:["in"]},name:"OpenStreetMap India Telegram",description:"Join our family: {url}",url:"https://t.me/OSMIndia",contacts:[{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"osm-india-website":{id:"osm-india-website",type:"osm",locationSet:{include:["in"]},name:"OpenStreetMap India",description:"Mappers and OpenStreetMap users in India",url:"https://openstreetmap.in/",contacts:[{name:" OpenStreetMap India",email:"openstreetmapindia@gmail.com"}]},"osm-india-wiki":{id:"osm-india-wiki",type:"wiki",locationSet:{include:["in"]},name:"OpenStreetMap Wikiproject India",description:"Everything you need to know about mapping in India: {url}",url:"https://wiki.openstreetmap.org/wiki/WikiProject_India",contacts:[{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"osm-india-youtube":{id:"osm-india-youtube",type:"youtube",locationSet:{include:["in"]},name:"OpenStreetMap India Youtube",description:"Subscribe to our channel: {url}",url:"https://www.youtube.com/channel/UCu5sKaPU04x0RJkgGkoFORw",contacts:[{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"osm-iran-aparat":{id:"osm-iran-aparat",type:"aparat",locationSet:{include:["ir"]},languageCodes:["fa"],name:"OpenStreetMap Iran Aparat",description:"Subscribe to our channel at {url}",extendedDescription:"A good resource of videos about anything related to OpenStreetMap. Mainly in Persian.",url:"https://www.aparat.com/osm_iran",contacts:[{name:"Iman",email:"iriman@chmail.ir"}]},"osm-iran-forum":{id:"osm-iran-forum",type:"forum",locationSet:{include:["ir"]},languageCodes:["fa"],name:"OpenStreetMap Iran web forum",description:"OpenStreetMap Iran web forum",extendedDescription:"A web forum for OpenStreetMap users in Iran. Feel free to ask questions and discuss with others!",url:"https://forum.openstreetmap.org/viewforum.php?id=103",contacts:[{name:"Iman",email:"iriman@chmail.ir"}],order:-2},"osm-iran-telegram":{id:"osm-iran-telegram",type:"telegram",locationSet:{include:["ir"]},languageCodes:["fa"],name:"OpenStreetMap Iran Telegram",description:"You're welcome to join our Telegram channel at {url}. We also have a supergroup of many OSMers interested in Iran. Find its link in bio of channel.",url:"https://t.me/openstreetmapir",contacts:[{name:"Iman",email:"iriman@chmail.ir"}]},"osm-kenya":{id:"osm-kenya",type:"twitter",locationSet:{include:["ke"]},languageCodes:["en"],name:"OSM Kenya",description:"OSM Kenya is a community of OSM contributors and users",extendedDescription:"OSM is a local community for individuals interested in OpenStreetMap including organizations, developers, and YouthMappers chapters in the country.",url:"https://twitter.com/OSMKenya",contacts:[{name:"OSM Kenya",email:"osmkenya@gmail.com"}],order:4},"osm-kerala-telegram":{id:"osm-kerala-telegram",type:"telegram",locationSet:{include:["india_kerala.geojson"]},name:"OpenStreetMap Kerala Telegram",description:"We map Kerala together. Join our telegram group. {url}",url:"https://t.me/osmkerala",contacts:[{name:"Jaisen Nedumpala",email:"jaisuvyas@gmail.com"},{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"osm-kerala-wiki":{id:"osm-kerala-wiki",type:"wiki",locationSet:{include:["india_kerala.geojson"]},name:"OpenStreetMap Kerala",description:"Want to know more about Kerala Mapping: {url}",url:"https://wiki.openstreetmap.org/wiki/Kerala",contacts:[{name:"Kevin",email:"muzirian@gmail.com"},{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"osm-mg-facebook":{id:"osm-mg-facebook",type:"facebook",locationSet:{include:["mg"]},languageCodes:["fr","mg"],name:"OpenStreetMap Madagascar Facebook Group",description:"Malagasy Facebook group for people interested in OpenStreetMap.",url:"https://www.facebook.com/groups/1601381123461284/",contacts:[{name:"Brice Ramamonjy",email:"rafaby21@gmail.com"},{name:"Dolly Andriatsiferana",email:"privatemajory@gmail.com"}],order:3},"osm-ni":{id:"osm-ni",type:"group",locationSet:{include:["ni"]},languageCodes:["es"],name:"MapaNica.net",description:"Provide OSM services and information for the local community in Nicaragua",url:"https://www.mapanica.net/",contacts:[{name:"NI Community",email:"talk-ni-owner@openstreetmap.org"}]},"osm-se":{id:"osm-se",type:"osm",locationSet:{include:["se"]},languageCodes:["sv"],name:"OpenStreetMap.se",description:"Provide OSM services and information for the local community in Sweden",url:"http://openstreetmap.se/",order:1},"osm-za-twitter":{id:"osm-za-twitter",type:"twitter",locationSet:{include:["za"]},languageCodes:["en"],name:"OpenStreetMap South Africa on Twitter",description:"Follow us on Twitter: {url}",url:"https://twitter.com/OpenStreetMapZA",contacts:[{name:"Grant Slater",email:"osm@firefishy.com"}]},"osmcz-facebook":{id:"osmcz-facebook",type:"facebook",locationSet:{include:["cz"]},languageCodes:["cs","en","sk"],name:"OpenStreetMap CZ on Facebook",description:"Follow Czech community on Facebook - including translated WeeklyOSM!",url:"https://www.facebook.com/osmcz",contacts:[{name:"osmcz",email:"dev@openstreetmap.cz"}],order:3},"osmcz-twitter":{id:"osmcz-twitter",type:"twitter",locationSet:{include:["cz"]},languageCodes:["cs","en","sk"],name:"Czech twitter @osmcz",description:"Follow czech community on Twitter - including translated WeeklyOSM!",url:"https://twitter.com/osmcz",contacts:[{name:"osmcz",email:"dev@openstreetmap.cz"}]},"osmgraz-meetup":{id:"osmgraz-meetup",type:"meetup",locationSet:{include:[[15.4461,47.0556]]},languageCodes:["de","en"],name:"OSM community meetup Graz",description:"Monthly meetup of the OpenStreetMap community in Graz",url:"https://wiki.openstreetmap.org/wiki/Graz/Stammtisch",contacts:[{name:"Michael Maier",email:"michael.maier@secure.mailbox.org"}],order:5},"osmgraz-twitter":{id:"osmgraz-twitter",type:"twitter",locationSet:{include:[[15.4461,47.0556]]},languageCodes:["de","en"],name:"OSM community Graz on twitter",description:"OpenStreetMap community in Graz on twitter",url:"https://twitter.com/osmgraz",contacts:[{name:"Michael Maier",email:"michael.maier@secure.mailbox.org"}]},"panama-telegram":{id:"panama-telegram",type:"telegram",locationSet:{include:["pa"]},languageCodes:["es"],name:"OSM Panama on Telegram",description:"OpenStreetMap Panama Telegram chat",url:"https://telegram.me/Comunidad_OSM_Panama"},"pt-mailinglist":{id:"pt-mailinglist",type:"mailinglist",locationSet:{include:["pt"]},languageCodes:["pt"],name:"Talk-pt Mailing List",description:"Talk-pt is the official mailing list for the Portuguese OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-pt",contacts:[{name:"Nuno Caldeira",email:"hello@iamnunocaldeira.com"}],order:-3},"pt-telegram":{id:"pt-telegram",type:"telegram",locationSet:{include:["pt"]},languageCodes:["pt"],name:"OpenStreetMap Portugal on Telegram",description:"Telegram Group of the Portuguese OpenStreetMap community {url}",url:"https://t.me/OSMPortugal",contacts:[{name:"Nuno Caldeira",email:"hello@iamnunocaldeira.com"}]},"romania-facebook":{id:"romania-facebook",type:"facebook",locationSet:{include:["ro"]},name:"OpenStreetMap Romania Facebook group",description:"Group for mappers and users of OpenStreetMap in Romania",url:"https://www.facebook.com/groups/1487443198159793/",order:1},"romania-telegram":{id:"romania-telegram",type:"telegram",locationSet:{include:["ro"]},name:"@OSMRomania on Telegram",description:"OpenStreetMap Romania Telegram chat",url:"https://t.me/OSMRomania",order:2},"sa-telegram":{id:"sa-telegram",type:"telegram",locationSet:{include:["sa"]},name:"OSM Saudi Arabia on Telegram",description:"A Telegram group for the OpenStreetMap community in Saudi Arabia: {url}",url:"https://t.me/OSMSaudi",order:5},"scotland-twitter":{id:"scotland-twitter",type:"twitter",locationSet:{include:["scotland.geojson"]},languageCodes:["en"],name:"OpenStreetMap Alba on Twitter",description:"OpenStreetMap Alba on Twitter: {url}",url:"https://twitter.com/OSMScotland",order:4},"se-facebook":{id:"se-facebook",type:"facebook",locationSet:{include:["se"]},languageCodes:["sv"],name:"OpenStreetMap Sweden Facebook",description:"OpenStreetMap Sweden on Facebook",url:"https://www.facebook.com/groups/osmsweden/",order:3},"se-forum":{id:"se-forum",type:"forum",locationSet:{include:["se"]},languageCodes:["sv"],name:"OpenStreetMap Sweden Web Forum",description:"OpenStreetMap Sweden web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=4",order:-2},"se-irc":{id:"se-irc",type:"irc",locationSet:{include:["se"]},languageCodes:["sv"],name:"OpenStreetMap Sweden IRC",description:"Join #osm.se on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm.se",order:-4},"se-mailinglist":{id:"se-mailinglist",type:"mailinglist",locationSet:{include:["se"]},languageCodes:["sv"],name:"Talk-se Mailing List",description:"A mailing list to discuss OpenStreetMap in Sweden",url:"https://lists.openstreetmap.org/listinfo/talk-se",contacts:[{name:"Talk-se-owner",email:"talk-se-owner@openstreetmap.org"}],order:-3},"se-telegram":{id:"se-telegram",type:"telegram",locationSet:{include:["se"]},languageCodes:["sv"],name:"OSM Sweden on Telegram",description:"OpenStreetMap Sweden Telegram chat",url:"https://t.me/osmSE",order:4},"se-twitter":{id:"se-twitter",type:"twitter",locationSet:{include:["se"]},languageCodes:["sv"],name:"OpenStreetMap Sweden on Twitter",description:"Follow us on Twitter: {url}",url:"https://twitter.com/openstreetmapse",order:2},"si-forum":{id:"si-forum",type:"forum",locationSet:{include:["si"]},languageCodes:["en","sl"],name:"OpenStreetMap Slovenia Forum",description:"Forum of OpenStreetMap community in Slovenia",url:"https://forum.openstreetmap.org/viewforum.php?id=58",contacts:[{name:"OpenStreetMap Slovenia",email:"talk-si@openstreetmap.org"}],order:-2},"si-mailinglist":{id:"si-mailinglist",type:"mailinglist",locationSet:{include:["si"]},languageCodes:["en","sl"],name:"OpenStreetMap Slovenia mailing list",description:"Mailing list of OpenStreetMap community in Slovenia",url:"https://lists.openstreetmap.org/listinfo/talk-si",contacts:[{name:"OpenStreetMap Slovenia",email:"talk-si@openstreetmap.org"}],order:-3},"si-twitter":{id:"si-twitter",type:"twitter",locationSet:{include:["si"]},languageCodes:["en","sl"],name:"OpenStreetMap Slovenia Twitter",description:"Follow OpenStreetMap Slovenia On Twitter: {url}",url:"https://twitter.com/OpenStreetMapSi",contacts:[{name:"OpenStreetMap Slovenia",email:"talk-si@openstreetmap.org"}]},"sk-facebook":{id:"sk-facebook",type:"facebook",locationSet:{include:["sk"]},languageCodes:["sk"],name:"Freemap.sk Slovakia community Facebook page",description:"Freemap.sk Slovakia community Facebook page",url:"https://www.facebook.com/FreemapSlovakia",contacts:[{name:"OpenStreetMap Freemap Slovakia",email:"podpora@freemap.sk"}],order:3},"sk-freemap":{id:"sk-freemap",type:"osm",locationSet:{include:["sk"]},languageCodes:["cz","hu","sk"],name:"OpenStreetMap Website Freemap Slovakia",description:"OpenStreetMap map website with tools in Slovakia and surrounding regions",url:"https://www.freemap.sk",contacts:[{name:"osm_sk",email:"osm_sk@googlegroups.com"}]},"sk-freemap-wiki":{id:"sk-freemap-wiki",type:"wiki",locationSet:{include:["sk"]},languageCodes:["sk"],name:"OpenStreetMap Freemap Slovakia Wiki",description:"OpenStreetMap wiki for Slovak mappers and community",url:"http://wiki.freemap.sk",contacts:[{name:"osm_sk",email:"osm_sk@googlegroups.com"}]},"sk-twitter":{id:"sk-twitter",type:"twitter",locationSet:{include:["sk"]},languageCodes:["sk"],name:"OpenStreetMap Freemap Slovensko on Twitter",description:"OpenStreetMap Freemap Slovensko on Twitter: {url}",url:"https://twitter.com/FreemapSlovakia",contacts:[{name:"OpenStreetMap Freemap Slovensko",email:"podpora@freemap.sk"}]},"talk-au":{id:"talk-au",type:"mailinglist",locationSet:{include:["au"]},languageCodes:["en"],name:"Talk-au Mailing List",description:"Place for Aussie mappers to chat",url:"https://lists.openstreetmap.org/listinfo/talk-au",contacts:[{name:"Ben Kelley",email:"ben.kelley@gmail.com"},{name:"Steve Bennett",email:"stevagewp@gmail.com"},{name:"Ian Sergeant",email:"inas66+osm@gmail.com"}],order:4},"talk-cz-mailinglist":{id:"talk-cz-mailinglist",type:"mailinglist",locationSet:{include:["cz"]},languageCodes:["cs","en","sk"],name:"Czech mailing list (talk-cz)",description:"Talk-cz is the official mailing list for Czech community",url:"https://openstreetmap.cz/talkcz",contacts:[{name:"osmcz",email:"dev@openstreetmap.cz"}],order:-3},"talk-gh":{id:"talk-gh",type:"mailinglist",locationSet:{include:["gh"]},languageCodes:["en"],name:"Talk-gh Mailing List",description:"Talk-gh is the official mailing list for Ghana OSM community.",url:"https://lists.openstreetmap.org/listinfo/talk-gh",contacts:[{name:"Enock Seth Nyamador",email:"kwadzo459@gmail.com"}],order:-3},"talk-it-lazio":{id:"talk-it-lazio",type:"mailinglist",locationSet:{include:["lazio.geojson"]},languageCodes:["it"],name:"OpenStreetMap IT Lazio",description:"All are welcome! Sign up at {signupUrl}",extendedDescription:"Mailinglist for Rome and Lazio area.",url:"https://lists.openstreetmap.org/listinfo/talk-it-lazio",signupUrl:"https://lists.openstreetmap.org/listinfo/talk-it-lazio",contacts:[{name:"Martin Koppenhoefer",email:"dieterdreist@gmail.com"}],order:-3},"talk-it-piemonte_mailinglist":{id:"talk-it-piemonte_mailinglist",type:"mailinglist",locationSet:{include:["piemonte.geojson"]},languageCodes:["it"],name:"OSM Italy regional talk list for Piemonte",description:"All are welcome! Sign up at {signupUrl}",extendedDescription:"Mailinglist for Piemonte region.",url:"https://lists.openstreetmap.org/listinfo/talk-it-piemonte",signupUrl:"https://lists.openstreetmap.org/listinfo/talk-it-piemonte",contacts:[{name:"Marco Brancolini",email:"mbranco2@gmail.com"},{name:"Andrea Musuruane",email:"musuruan@gmail.com"}],order:2},"talk-mg":{id:"talk-mg",type:"mailinglist",locationSet:{include:["mg"]},languageCodes:["fr","mg"],name:"Talk-mg Mailing List",description:"Place for OpenStreetMap contributors, communities and users in Madagascar to share and discuss.",url:"https://lists.openstreetmap.org/listinfo/talk-mg",contacts:[{name:"Brice Ramamonjy",email:"rafaby21@gmail.com"},{name:"Dolly Andriatsiferana",email:"privatemajory@gmail.com"}],order:-3},"talk-nz":{id:"talk-nz",type:"mailinglist",locationSet:{include:["nz"]},languageCodes:["en"],name:"Talk-nz Mailing List",description:"New Zealand's OSM community talk",url:"https://lists.openstreetmap.org/listinfo/talk-nz",contacts:[{name:"Talk NZ Owner",email:"talk-nz-owner@openstreetmap.org"}],order:-3},"talk-za":{id:"talk-za",type:"mailinglist",locationSet:{include:["za"]},languageCodes:["en"],name:"Talk-za Mailing List",description:"Talk-za is the official mailing list for South African OSM community.",url:"https://lists.openstreetmap.org/listinfo/talk-za",contacts:[{name:"Grant Slater",email:"osm@firefishy.com"}]},"ua-facebook":{id:"ua-facebook",type:"facebook",locationSet:{include:["ua"]},languageCodes:["uk"],name:"OpenStreetMap Ukraine Facebook group",description:"Join the OpenStreetMap Ukraine community on Facebook",url:"https://www.facebook.com/openstreetmapua/",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}],order:3},"ua-forum":{id:"ua-forum",type:"forum",locationSet:{include:["ua"]},languageCodes:["en","ru","uk"],name:"OpenStreetMap Ukraine Forum",description:"Forum of OpenStreetMap community in Ukraine",url:"https://forum.openstreetmap.org/viewforum.php?id=40",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}],order:2},"ua-github":{id:"ua-github",type:"github",locationSet:{include:["ua"]},languageCodes:["en","uk"],name:"OpenStreetMap Ukraine on GitHub",description:"OpenStreetMap Ukraine GitHub",url:"https://github.com/osm-ua/",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}]},"ua-osm":{id:"ua-osm",type:"osm",locationSet:{include:["ua"]},languageCodes:["uk"],name:"OpenStreetMap Website Ukraine",description:"OpenStreetMap website in Ukraine",url:"https://openstreetmap.org.ua/",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}],order:4},"ua-slack":{id:"ua-slack",type:"slack",locationSet:{include:["ua"]},languageCodes:["en","ru","uk"],name:"OpenStreetMap Ukraine Slack",description:"Join the OpenStreetMap Ukraine community on Slack",url:"https://osmukraine.slack.com/",signupUrl:"http://bit.ly/SlackOsmUa",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}],order:5},"ua-telegram":{id:"ua-telegram",type:"telegram",locationSet:{include:["ua"]},languageCodes:["en","ru","uk"],name:"@osmUA on Telegram",description:"OpenStreetMap Ukraine Telegram chat",url:"https://t.me/osmUA",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}]},"ua-twitter":{id:"ua-twitter",type:"twitter",locationSet:{include:["ua"]},languageCodes:["uk"],name:"OpenStreetMap UA Twitter",description:"OpenStreetMap Ukraine on Twitter: {url}",url:"https://twitter.com/osm_ua",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}],order:1},"uk-localchapter":{id:"uk-localchapter",type:"osm-lc",locationSet:{include:["gb"]},languageCodes:["en"],name:"OpenStreetMap UK",description:"The official Local Chapter for the UK (including Northern Ireland).",extendedDescription:"We support OpenStreetMap by holding events, providing community resources, building partnerships, and by spreading the word. Join OpenStreetMap UK here: {signupUrl}",url:"https://osmuk.org/",signupUrl:"https://osmuk.org/become-member/",contacts:[{name:"OpenStreetMap UK",email:"board@osmuk.org"}],order:3},"uk-london-twitter":{id:"uk-london-twitter",type:"twitter",locationSet:{include:["london.geojson"]},languageCodes:["en"],name:"OpenStreetMap London on Twitter",description:"OpenStreetMap London on Twitter: {url}",url:"https://twitter.com/OSMLondon",contacts:[{name:"Harry Wood",email:"mail@harrywood.co.uk"}],order:4},"uk-twitter":{id:"uk-twitter",type:"twitter",locationSet:{include:["gb"]},languageCodes:["en"],name:"OpenStreetMap UK on Twitter",description:"OpenStreetMap UK on Twitter: {url}",url:"https://twitter.com/osmuk",contacts:[{name:"OpenStreetMap UK",email:"board@osmuk.org"}],order:2},"us-ma-mailinglist":{id:"us-ma-mailinglist",type:"mailinglist",locationSet:{include:["massachusetts.geojson"]},languageCodes:["en"],name:"Talk-us-massachusetts Mailing List",description:"Email mailing list for the Massachusetts OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-us-massachusetts",contacts:[{name:"Alan Bragg",email:"alan.ruth.bragg@gmail.com"}],order:-3},"uy-forum":{id:"uy-forum",type:"forum",locationSet:{include:["uy"]},languageCodes:["es"],name:"OpenStreetMap UY forum",description:"OpenStreetMap Uruguay web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=78",contacts:[{name:"UY community",email:"talk-uy-owner@openstreetmap.org"}],order:-2},"uy-irc":{id:"uy-irc",type:"irc",locationSet:{include:["uy"]},languageCodes:["es"],name:"OpenStreetMap Uruguay on IRC",description:"Join #osmuruguay on irc.freenode.org (port 6667)",extendedDescription:"Join #osmuruguay on irc.freenode.org",url:"https://webchat.freenode.net/?url=irc://irc.freenode.net/osmuruguay",contacts:[{name:"UY community",email:"talk-uy-owner@openstreetmap.org"}],order:-4},"uy-mailinglist":{id:"uy-mailinglist",type:"mailinglist",locationSet:{include:["uy"]},languageCodes:["es"],name:"Talk-uy Mailing List",description:"Talk-uy is the official mailing list for the Uruguayan OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-uy",contacts:[{name:"UY community",email:"talk-uy-owner@openstreetmap.org"}],order:-3},"uzbekistan-telegram":{id:"uzbekistan-telegram",type:"telegram",locationSet:{include:["uz"]},name:"OSM Uzbekistan on Telegram",description:"OpenStreetMap Uzbekistan Telegram chat",url:"https://t.me/osm_uz"},"ve-forum":{id:"ve-forum",type:"forum",locationSet:{include:["ve"]},languageCodes:["es"],name:"OpenStreetMap VE Forum",description:"OpenStreetMap Venezuela web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=50",contacts:[{name:"VE Community",email:"talk-ve-owner@openstreetmap.org"}],order:-2},"ve-mailinglist":{id:"ve-mailinglist",type:"mailinglist",locationSet:{include:["ve"]},languageCodes:["es"],name:"Talk-ve Mailing List",description:"Talk-ve is the official mailing list for the Venezuelan OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-ve",contacts:[{name:"VE Community",email:"talk-ve-owner@openstreetmap.org"}],order:-3},"ve-telegram":{id:"ve-telegram",type:"telegram",locationSet:{include:["ve"]},languageCodes:["es"],name:"OpenStreetMap Venezuela Telegram",description:"Join the OpenStreetMap Venezuela community on Telegram",url:"https://telegram.me/OSMve",contacts:[{name:"VE Community",email:"talk-ve-owner@openstreetmap.org"}]},"ym-AASTU":{id:"ym-AASTU",type:"youthmappers",locationSet:{include:[[38.8092,8.889]]},name:"AASTU Youth Mappers",description:"YouthMappers chapter at Addis Ababa Science and Technology University",extendedDescription:"The Association of Geomatics Engineering Students (AGES), aims at promoting GIS products and services as well as training students on the use of the same. It not only promotes socialization between the students and practicing professionals, but also provides a platform for exchanging new ideas for holding new GIS and surveying events and training at the university.",url:"https://t.me/aastumappers",contacts:[{name:"Ben Jamin",email:"benjazben10@gmail.com"}]},"ym-Abia-State-University":{id:"ym-Abia-State-University",type:"youthmappers",locationSet:{include:[[7.41909,5.8308]]},name:"AbsuMappersTeam",description:"YouthMappers chapter at Abia State University",extendedDescription:"AbsuMappersTeam is  voluntary team of map enthusiast ,using openstreetmap,GIS and other open source geospatial techno;ogy to solve problems.It is a dedicated for disaster response using OpenStreetMap.It is a  professional mentoring  and empowerment platform for  those with passion for GIS and Mapping.It is a community of  volunteers for geospatial data creation,field data collection and mapping.The team was co-founded by Victor N.Sunday(the Team mentor) and Professor J.U.Ogbonna ,the team coordinator and faculty Advisor. AbsuMapperTeam is an affiliate of UniiqueMappersTeam-Port Harcourt.The team stands to support sustainable development using geospatial  technology",url:"https://www.facebook.com/Absumappersteam-1709186109157466",contacts:[{name:"Organizer",email:"absumappersteam@gmail.com"}]},"ym-African-Methodist-Episcopal-University":{id:"ym-African-Methodist-Episcopal-University",type:"youthmappers",locationSet:{include:[[-10.80063,6.31073]]},name:"YouthMappers-AMEU",description:"YouthMappers chapter at African Methodist Episcopal University",url:"mailto:youthmapper.ameu@gmail.com",contacts:[{name:"Organizer",email:"youthmapper.ameu@gmail.com"}]},"ym-Ahmadu-Bello-University":{id:"ym-Ahmadu-Bello-University",type:"youthmappers",locationSet:{include:[[7.64648,11.17836]]},name:"ABU Geomappers",description:"YouthMappers chapter at Ahmadu Bello University",extendedDescription:"We are a group of Data driven Humanitarian mappers, who are dedicated to rendering humanitarian service in response to disaster and mitigation. We are glad to contribute our expertise and knowledge through mapping, and helping to spread #OpenEvangelism through Training, and collaboration.",url:"https://web.facebook.com/abugeomappers/",contacts:[{name:"Organizer",email:"abugeomappers@gmail.com"}]},"ym-Ardhi-University":{id:"ym-Ardhi-University",type:"youthmappers",locationSet:{include:[[39.21541,-6.76613]]},name:"ARU Mapper",description:"YouthMappers chapter at Ardhi University",extendedDescription:"As upcoming geospatial data consultants we seek to educate and provide advice to the society on how they can use spatial data not only as a form of location but a tool of decision making and predict different hazardous and climatical changes which may harm them or future genarations.",url:"mailto:bayonakennedy@gmail.com",contacts:[{name:"Organizer",email:"bayonakennedy@gmail.com"}]},"ym-Asian-University-for-Women":{id:"ym-Asian-University-for-Women",type:"youthmappers",locationSet:{include:[[91.8457,22.34998]]},name:"YouthMappers at AUW",description:"YouthMappers chapter at Asian University for Women",extendedDescription:"The Asian University for Women seeks to graduate women who will be skilled and innovative professionals, service-oriented leaders in the businesses and communities in which they will work and live, and promoters of intercultural understanding and sustainable human and economic development in Asia and throughout the world.",url:"http://www.auw.edu.bd/",contacts:[{name:"Organizer",email:"harunur.rashid@auw.edu.bd"}]},"ym-Ball-State-University":{id:"ym-Ball-State-University",type:"youthmappers",locationSet:{include:[[-85.40688,40.20588]]},name:"Gamma Theta Upsilon- Iota Omega Chapter",description:"YouthMappers chapter at Ball State University",extendedDescription:"Our chapter is a very active one. We primarily focus on community events, fundraising, and field trips. We are currently looking to develop more mapping-related activities to draw in other students from campus who may be interested in contributing.",url:"https://www.facebook.com/BallState.GammaThetaUpsilon/",contacts:[{name:"Organizer",email:"gtu@bsu.edu"}]},"ym-Busitema-University":{id:"ym-Busitema-University",type:"youthmappers",locationSet:{include:[[34.01367,0.52733]]},name:"Good Mappers",description:"YouthMappers chapter at Busitema University",extendedDescription:"Good mappers is a team of students in Busitema University. Its main objective is to create a community of experienced mappers who can contribute to the world map.",url:"https://m.facebook.com/HOTBusitemaUniv/",contacts:[{name:"Organizer",email:"mulindwasteven82@gmail.com"}]},"ym-California-University-of-Pennsylvania":{id:"ym-California-University-of-Pennsylvania",type:"youthmappers",locationSet:{include:[[-79.89258,40.04425]]},name:"CalU PA GIS Club",description:"YouthMappers chapter at California University of Pennsylvania",extendedDescription:"GIS Students at Cal U learn to apply spatial theory to the real world. The university degree program focuses on geography as well as utilizing GIS in emergency management.",url:"https://www.facebook.com/CalUGisClub/",contacts:[{name:"Organizer",email:"mueller@calu.edu"}]},"ym-Central-Washington-University":{id:"ym-Central-Washington-University",type:"youthmappers",locationSet:{include:[[-120.49805,46.98002]]},name:"Geography Club",description:"YouthMappers chapter at Central Washington University",extendedDescription:"Our goal teaming up with Youthmappers is to bring relief to areas that are in need of humanitarian mapping. By doing so, we are serving our fellow brothers and sisters around the world as well as furthering our own cartography skills.",url:"https://www.cwu.edu/geography/geography-club",contacts:[{name:"Organizer",email:"valkoc@cwu.edu"}]},"ym-Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny":{id:"ym-Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny",type:"youthmappers",locationSet:{include:[[-3.98799,5.344]]},name:"YouthMappers CURAT",description:"YouthMappers chapter at Centre Universitaire de Recherche et d'Application en Télédétection (CURAT) de l'Université Felix Houphouet Boigny",extendedDescription:"Our chapter aim is to promote the use of collaborative free mapping and the use of openstreetmap data in the field of research and their application in the implementation of tools for decision-making. Help students produce their own data of their research.",url:"mailto:gpcome@gmail.com",contacts:[{name:"Organizer",email:"gpcome@gmail.com"}]},"ym-Clemson-University":{id:"ym-Clemson-University",type:"youthmappers",locationSet:{include:[[-82.79297,34.66921]]},name:"Clemson Mappers",description:"YouthMappers chapter at Clemson University",extendedDescription:"Students in Clemson are supported by the Center for Geospatial Technologies, a community of interdisciplinary geospatial science practitioners supporting research, teaching, and outreach activities using technologies that enable the collection, analysis, and application of geospatial data. Students integrate geospatial technologies within their scholarly activities across all disciplines and build connections throughout the world.",url:"http://www.clemsongis.org/#!clemson-mappers/i9w6t",contacts:[{name:"Organizer",email:"clemsonmappers@gmail.com"}]},"ym-College-of-William-and-Mary":{id:"ym-College-of-William-and-Mary",type:"youthmappers",locationSet:{include:[[-76.72852,37.30011]]},name:"All over the map!",description:"YouthMappers chapter at College of William and Mary",extendedDescription:"The students who are all over the map are supported by the Center for Geospatial Analysis, a group integrating GIS across the curriculum and providing student and faculty with hardware, software, and expertise.  Students of all backgrounds utilize GIS across campus, including environmental science and policy, geology, history, business, sociology, biology, anthropology, public policy, and marine sciences.",url:"mailto:lnseitz@email.wm.edu",contacts:[{name:"Organizer",email:"lnseitz@email.wm.edu"}]},"ym-Cornell-University":{id:"ym-Cornell-University",type:"youthmappers",locationSet:{include:[[-76.4735,42.4532]]},name:"Mapping Society",description:"YouthMappers chapter at Cornell University",extendedDescription:"Cornell students and faculty use open data and open source software to address challenges at local, national, and global scales. In doing so, we advance our academic and personal goals of developing our own skills around GIS and spatial literacy.",url:"mailto:mappingsocietycornell@gmail.com?subject=Youth%20Mappers%20and%20Mapping%20Society%20at%20Cornell%20University",contacts:[{name:"Organizer",email:"mappingsocietycornell@gmail.com"}]},"ym-Cuttington-University":{id:"ym-Cuttington-University",type:"youthmappers",locationSet:{include:[[-9.5539,7.04037]]},name:"Cuttington University YouthMappers",description:"YouthMappers chapter at Cuttington University",extendedDescription:"The YouthMappers at Cuttington University, Suakoko, and Bong County comprised of Students from three different departments; namely, the Department of Natural Resources Management “DONRM”, Department of Environmental Sciences, and the Department of Natural Sciences. Since the establishment of the Chapter in February 2017, the overall membership is  20 students, with each department containing 5 students.",url:"mailto:youthmappers.cu@gmail.com",contacts:[{name:"Organizer",email:"youthmappers.cu@gmail.com"}]},"ym-Dedan-Kimathi-University-of-Technology":{id:"ym-Dedan-Kimathi-University-of-Technology",type:"youthmappers",locationSet:{include:[[37.00195,-0.43945]]},name:"GDEV",description:"YouthMappers chapter at Dedan Kimathi University of Technology",extendedDescription:"GDEV is a group of enthusiastic GIS group at DeKUT that aims at helping students share, engage and learn from each other in matters geospatial",url:"https://plus.google.com/u/0/communities/102367719061492681269/stream/e376a295-1246-4e19-9f66-fa6077719f32",contacts:[{name:"Organizer",email:"gdevkenya@gmail.com"}]},"ym-Dhaka-College":{id:"ym-Dhaka-College",type:"youthmappers",locationSet:{include:[[90.35156,23.72492]]},name:"YouthMappers Daka College",description:"YouthMappers chapter at Dhaka College",extendedDescription:"YouthMappers DhakaCollege is an approach by students to help mapping vulnerable areas of the world as a part of Humanitarian Action. YouthMappers  gives the opportunity to the students for helping people and using mapping for humanitarian purposes. This open geographic data can be used for educational, navigational and other humanitarian purposes. Happy mapping.",url:"https://www.facebook.com/groups/321220498214124/",contacts:[{name:"Organizer",email:"youthmappersdc@gmail.com"}]},"ym-Dhaka-University":{id:"ym-Dhaka-University",type:"youthmappers",locationSet:{include:[[90.35156,23.72492]]},name:"Openstreetmap YouthMappers",description:"YouthMappers chapter at Dhaka University",extendedDescription:"It's a great privilege for the students of University of Dhaka to map for humanitarian purposes. Our chapter gives the opportunity to the students for helping people and use mapping for humanitarian purposes.",url:"https://www.facebook.com/groups/osmDU/1773150346233538/?notif_t=group_activity&notif_id=1472953820177890",contacts:[{name:"Organizer",email:"hoque.ahasan@gmail.com"}]},"ym-Eastern-University":{id:"ym-Eastern-University",type:"youthmappers",locationSet:{include:[[90.38063,23.74236]]},name:"YouthMappers at Eastern University",description:"YouthMappers chapter at Eastern University",extendedDescription:"YouthMappers at Eastern University, Bangladesh has been formed with a view to assisting people during humanitarian crisis. The students, likewise other mappers of the world, are promised to assist people in using the map for educational, navigational and other humanitarian purposes.",url:"mailto:infolimon@gmail.com",contacts:[{name:"Organizer",email:"infolimon@gmail.com"}]},"ym-Far-Eastern-University-Institute-of-Technology":{id:"ym-Far-Eastern-University-Institute-of-Technology",type:"youthmappers",locationSet:{include:[[120.98854,14.60403]]},name:"Junior Philippines Computer Society",description:"YouthMappers chapter at Far Eastern University -Institute of Technology",extendedDescription:"FEU has been recognized as one of the leading universities in the Philippines. Its mission centers on producing graduates who have contributed to the advancement of the country. The university continuously challenges itself to raise the bar of excellence to achieve a top-tier status not only in the Philippines but also in the South East Asian region",url:"mailto:jpcsfeutech@outlook.com?subject=YouthMappers%20and%20Junior%20Philippines%20Computer%20Society",contacts:[{name:"Organizer",email:"jpcsfeutech@outlook.com"}]},"ym-Federal-School-of-Surveys":{id:"ym-Federal-School-of-Surveys",type:"youthmappers",locationSet:{include:[[3.95129,7.84218]]},name:"OyoMappersTeam (OMT) Oyo",description:"YouthMappers chapter at Federal School of Surveys",url:"https://web.facebook.com/Oyomappersteam-omt-oyo-1432864713415765/",contacts:[{name:"Organizer",email:"oyomappersteam@gmail.com"}]},"ym-Federal-University-of-Technology-Akure":{id:"ym-Federal-University-of-Technology-Akure",type:"youthmappers",locationSet:{include:[[5.18555,7.27527]]},name:"YouthMappers Futa Space Club",description:"YouthMappers chapter at Federal University of Technology, Akure",extendedDescription:"Our mission is to raise the next generation of Space Leaders. Activities include research and capacity building in Remote Sensing, GIS, Climate Change, Astronomy, Cosmology, Space Engineering, Global Navigation, Robotics and Space Education.",url:"http://spaceclubfuta.com.ng/",contacts:[{name:"Organizer",email:"denironyx@gmail.com"}]},"ym-Fourah-Bay-College":{id:"ym-Fourah-Bay-College",type:"youthmappers",locationSet:{include:[[-13.18359,8.49407]]},name:"Student's Geographical Association",description:"YouthMappers chapter at Fourah Bay College",extendedDescription:"The Student's Geographical Association- YouthMappers is an association of Fourah Bay College Students with the common goals of mapping out vulnerable places in Sierra Leone and the world at large for relief and other beneficial purposes,carry out Research and other educative endeavors. The chapter consists of young people with great ideas, development oriented with the capacity to relate with each other, comprehend and implement sustainable developmental projects as a team.",url:"mailto:sgayouthmappers@gmail.com?subject=YouthMappers%20at%20Fourah%20Bay%20College",contacts:[{name:"Organizer",email:"sgayouthmappers@gmail.com"}]},"ym-General-Lansana-Conte-University":{id:"ym-General-Lansana-Conte-University",type:"youthmappers",locationSet:{include:[[-13.62305,9.70902]]},name:"YouthMappers General Lansana Conte University",description:"YouthMappers chapter at General Lansana Conte University",extendedDescription:"The YouthMappers of the University General Lansana Conté is a non profit community willing to contribute to Map Guinea and others part of the world. We are promoting the use of GIS and Open data to build decision support tools. We also work to build capacities among the students and local communities.",url:"www.uglc.org",contacts:[{name:"Organizer",email:"condefa3@gmail.com"}]},"ym-George-Mason-University":{id:"ym-George-Mason-University",type:"youthmappers",locationSet:{include:[[-77.34375,38.82241]]},name:"Mason Mappers",description:"YouthMappers chapter at George Mason University",extendedDescription:"Mason Mappers Student Society is a humanitarian mapping student organization in the George Mason University GGS Department, and its goal is to promote education and knowledge in geo-technologies, geo-info science, to foster good global stewardship and engage in professional development while building a positive, interactive geo-community, as well as shaping students into leaders of tomorrow.",url:"Facebook.com/MasonMappers",contacts:[{name:"Organizer",email:"masonmappers@gmail.com"}]},"ym-Grand-Gedeh-County-Community-College":{id:"ym-Grand-Gedeh-County-Community-College",type:"youthmappers",locationSet:{include:[[-8.11817,6.06392]]},name:"YouthMappers at Grand Gedeh County Community College",description:"YouthMappers chapter at Grand Gedeh County Community College",extendedDescription:"The Youth Mappers of GGCCC sole intent is to put  places in and around Liberia  that are not on the map. We gather youths from the college within the Grand Gedeh Community College to make it their duties to unite and bring these places to the spot light geographically.",url:"mailto:yimodaxzibitallison@gmail.com",contacts:[{name:"Organizer",email:"yimodaxzibitallison@gmail.com"}]},"ym-Gujarat-University":{id:"ym-Gujarat-University",type:"youthmappers",locationSet:{include:[[72.50977,22.99876]]},name:"CCIM at Ahmedabad",description:"YouthMappers chapter at Gujarat University",url:"mailto:Coolmulls@gmail.com",contacts:[{name:"Organizer",email:"coolmulls@gmail.com"}]},"ym-Gulu-University":{id:"ym-Gulu-University",type:"youthmappers",locationSet:{include:[[32.34375,2.81136]]},name:"CSGU Mappers",description:"YouthMappers chapter at Gulu University",extendedDescription:"The CSGU Mappers are the Computing Society at Gulu University. This chapter is creative, passionate, innovative and ready to map Uganda and the world at large, beyond other people's imagination.",url:"mailto:git445@gmail.com?subject=YouthMappers%20at%20Gulu%20University",contacts:[{name:"Organizer",email:"git445@gmail.com"}]},"ym-Heidelberg-University":{id:"ym-Heidelberg-University",type:"youthmappers",locationSet:{include:[[8.67039,49.41882]]},name:"disastermappers heidelberg",description:"YouthMappers chapter at Heidelberg University",extendedDescription:"Disastermappers Heidelberg was founded in 2014 as a student initiative to build a platform for exchange between students, researchers and humanitarian actors. Disastermappers are a member of Missing Maps and are organizing mapathons, workshops and webinars in Heidelberg and beyond and support HOT and Missing Maps through research and applications.",url:"https://disastermappers.wordpress.com/",contacts:[{name:"Organizer",email:"disastermappers@posteo.de"}]},"ym-Ignatius-Ajuru-University-of-Education":{id:"ym-Ignatius-Ajuru-University-of-Education",type:"youthmappers",locationSet:{include:[[6.93364,4.80651]]},name:"IgnatiusMappersTeam (IMT)",description:"YouthMappers chapter at Ignatius Ajuru University of Education",extendedDescription:"We are a YouthMappers Chapter of Ignatius Ajuru University of Education involved in crowdsourced mapping of our environment and remote mapping of resilient communities.We are a team of volunteers using openstreetmap and other open Geospatial source for mapping.",url:"https://fb.me/ignatiusmappersteam",contacts:[{name:"Organizer",email:"ignatiusmappersteam@gmail.com"}]},"ym-Indiana-University-of-Pennsylvania":{id:"ym-Indiana-University-of-Pennsylvania",type:"youthmappers",locationSet:{include:[[-79.16139,40.61395]]},name:"Geospatial Science Club",description:"YouthMappers chapter at Indiana University of Pennsylvania",url:"mailto:rhoch@iup.edu",contacts:[{name:"Organizer",email:"rhoch@iup.edu"}]},"ym-Insititue-d-Enseignement-Superieur-de-Ruhengeri":{id:"ym-Insititue-d-Enseignement-Superieur-de-Ruhengeri",type:"youthmappers",locationSet:{include:[[29.6112,-1.50091]]},name:"YouthMappers at INES Ruhengeri",description:"YouthMappers chapter at Insititue d' Enseignement Superieur de Ruhengeri",extendedDescription:"We are students from Land Administration and Management and Land survey Departments from INES-Ruhengeri. We are engaged in mapping activities that create the changes toward sustainable development in our community.",url:"www.ines.ac.rw",contacts:[{name:"Organizer",email:"dufitesaie91@yahoo.com"}]},"ym-Institut-Suprieur-de-Management-Kolda":{id:"ym-Institut-Suprieur-de-Management-Kolda",type:"youthmappers",locationSet:{include:[[-14.94108,12.88982]]},name:"Les Femmes Leaders de ISM/Kolda",description:"YouthMappers chapter at Institut Supérieur de Management Kolda",extendedDescription:"Les Femmes Leaders de ISM/Kolda is an all-female mapping group in southern Senegal looking to put Kolda and surrounding villages on the map and better understand how to use OSM.",url:"mailto:koldaym@gmail.com",contacts:[{name:"Organizer",email:"koldaym@gmail.com"}]},"ym-Institute-of-Crisis-Management-Studies":{id:"ym-Institute-of-Crisis-Management-Studies",type:"youthmappers",locationSet:{include:[[85.34173,27.72759]]},name:"Institute of Crisis Management Studies YouthMappers",description:"YouthMappers chapter at Institute of Crisis Management Studies",extendedDescription:"To develop Crisis Mappers to assist during disaster situations.",url:"mailto:deepakadhikari@tuicms.edu.np",contacts:[{name:"Organizer",email:"deepakadhikari@tuicms.edu.np"}]},"ym-Institute-of-Finance-Management":{id:"ym-Institute-of-Finance-Management",type:"youthmappers",locationSet:{include:[[39.2935,-6.13779]]},name:"IFM mappers",description:"YouthMappers chapter at Institute of Finance Management",extendedDescription:"This is a new  chapter at out institute and we are looking forward to use our financial education that we are receiving here at the campus  and link ig with the environment in order to develop our sustainable environment towards helping the community  with the effects of our environment in a financial ways by converting them into numbers. this is widely explained in ecosystem accounting and environmental accounts",url:"mailto:supermalik95@gmail.com",contacts:[{name:"Organizer",email:"supermalik95@gmail.com"}]},"ym-Institute-of-Rural-Development-Planning":{id:"ym-Institute-of-Rural-Development-Planning",type:"youthmappers",locationSet:{include:[[35.74578,-6.12215]]},name:"Mipango YouthMappers Chapter",description:"YouthMappers chapter at Institute of Rural Development Planning",extendedDescription:"Mipango YouthMappers Chapter was introduced at IRDP on 3rd July, 2017 by Dr.Domitilla Bashemera. The founding members were  300 (190 males and 110 female) Bachelor Degree students, who were registered as members of the Chapter. Gerald Zacharia is the president of the chapter and Juster Lugira is Vice President.",url:"mailto:msmapperschapter@gmail.com",contacts:[{name:"Organizer",email:"msmapperschapter@gmail.com"}]},"ym-Institute-of-Rural-Development-Planning-Mwanza":{id:"ym-Institute-of-Rural-Development-Planning-Mwanza",type:"youthmappers",locationSet:{include:[[32.89851,-2.51658]]},name:"Youth Mappers Chapter at Institute of Rural Development Planning - Lake Zone Centre",description:"YouthMappers chapter at Institute of Rural Development Planning Mwanza",url:"www.facebook.com/IYMLZC/",contacts:[{name:"Organizer",email:"shabanimagawila@gmail.com"}]},"ym-Institute-of-Science-and-Veterinary-Medicine":{id:"ym-Institute-of-Science-and-Veterinary-Medicine",type:"youthmappers",locationSet:{include:[[-12.1175,10.68652]]},name:"YouthMappers ISSMV Dalaba",description:"YouthMappers chapter at Institute of Science and Veterinary Medicine",extendedDescription:"YouthMappers ISSMV Dabala is a non profit organisation working to promote humanitarian mapping and the use of open sources and open data to build decision making tools in Guinea.",url:"mailto:bvloua45@gmail.com",contacts:[{name:"Organizer",email:"bvloua45@gmail.com"}]},"ym-Istanbul-Technical-University":{id:"ym-Istanbul-Technical-University",type:"youthmappers",locationSet:{include:[[29.02465,41.10542]]},name:"YouthMappers ITU",description:"YouthMappers chapter at Istanbul Technical University",extendedDescription:"YouthMappers ITU is an interdisciplinary and collaborative student community to promote humanitarian mapping for vulnerable settlements and aims to develop and share strategic and innovative spatial information for the future cities by using geographical information systems and open data.",url:"https://www.facebook.com/YouthMappers-ITU-226489641442744/?modal=admin_todo_tour",contacts:[{name:"Organizer",email:"youthmappersitu@gmail.com"}]},"ym-Jacksonville-State-University":{id:"ym-Jacksonville-State-University",type:"youthmappers",locationSet:{include:[[-85.76795,33.82283]]},name:"JSU Disaster Mapping Team",description:"YouthMappers chapter at Jacksonville State University",extendedDescription:"The JSU Disaster Mapping Team is a program at Jacksonville State University dedicated to assisting disaster response in times of emergencies. This includes tornadoes, severe thunderstorms, floods, etc. The team is intended to be a valuable asset to surrounding counties and a conduit for the JSU Geoscience Department students to apply what they have learned in an academic setting to support emergency services. Our goal is to streamline disaster response and recovery operations while utilizing student skill sets",url:"mailto:ltatum@stu.jsu.edu",contacts:[{name:"Organizer",email:"ltatum@stu.jsu.edu"}]},"ym-Jahangirnagar-University":{id:"ym-Jahangirnagar-University",type:"youthmappers",locationSet:{include:[[90.26753,23.88222]]},name:"YouthMappers at IRS, Jahangirnagar University",description:"YouthMappers chapter at Jahangirnagar University",url:"mailto:s.t.islam@juniv.edu",contacts:[{name:"Organizer",email:"s.t.islam@juniv.edu"}]},"ym-Jomo-Kenyatta-University-of-Agriculture-and-Technology":{id:"ym-Jomo-Kenyatta-University-of-Agriculture-and-Technology",type:"youthmappers",locationSet:{include:[[37.0105,-1.08909]]},name:"Association of Geomatics Engineering Students",description:"YouthMappers chapter at Jomo Kenyatta University of Agriculture and Technology",extendedDescription:"The Association of Geomatics Engineering Students (AGES), aims at promoting GIS products and services as well as training students on the use of the same. It not only promotes socialization between the students and practicing professionals, but also provides a platform for exchanging new ideas for holding new GIS and surveying events and training at the university.",url:"mailto:laurahmugeha36@gmail.com",contacts:[{name:"Organizer",email:"laurahmugeha36@gmail.com"}]},"ym-Kansas-State-University":{id:"ym-Kansas-State-University",type:"youthmappers",locationSet:{include:[[-96.5918,39.16396]]},name:"Gamma Theta Upsilon: Beta Psi Chapter",description:"YouthMappers chapter at Kansas State University",extendedDescription:"We are the Kansas State University Chapter of Gamma Theta Upsilon, an international geography honor society with affiliation to YouthMappers. We have been active with mapping for OSM and conducted a mapathon called \"Map for Nepal,\" in which we used OpenStreetMap to digitize unmapped areas of Nepal after the earthquake in 2015.",url:"https://www.facebook.com/kstate.gtu?fref=ts",contacts:[{name:"Organizer",email:"tblarsen@ksu.edu"}]},"ym-Karatina-University":{id:"ym-Karatina-University",type:"youthmappers",locationSet:{include:[[37.12789,-0.48134]]},name:"Nature Club Karatina University",description:"YouthMappers chapter at Karatina University",extendedDescription:"This chapter aims to bring together all GIS enthusiasts.They include environment experts, wildlife experts, aquatic and tourism officers, just to mention a few. Its main aim is to provide a platform where students can learn from each other and, in the process, understand how to integrate the GIS skills in their various career paths as well as provide solutions to various environmental related challenges.",url:"https://twitter.com/karunature",contacts:[{name:"Organizer",email:"karunatureclub@gmail.com"}]},"ym-Kathmandu-University":{id:"ym-Kathmandu-University",type:"youthmappers",locationSet:{include:[[85.53873,27.62025]]},name:"Geomatics Engineering Society,GES",description:"YouthMappers chapter at Kathmandu University",extendedDescription:"Geomatics Engineering Society (GES) established in 2008 A.D is a departmental club under Department of Civil and Geomatics Engineering (DCGE) at Kathmandu University. GES acts as a platform to develop the skills of students apart from their educational activities by focusing on activities like technical trainings, seminars, talk programs and interaction with experts from related field, sports activities etc.",url:"ku.edu.np/ges",contacts:[{name:"Organizer",email:"ges@ku.edu.np"}]},"ym-Kenyatta-University":{id:"ym-Kenyatta-University",type:"youthmappers",locationSet:{include:[[36.93493,-1.17996]]},name:"Kenyatta University GIS Club",description:"YouthMappers chapter at Kenyatta University",extendedDescription:"Kenyatta University GIS Club (KUGISC) was founded on 28th October 2016, with more than 200 students and staff from all faculty within campus as members. We are committed to empower members with spatial knowledge, skills and expertise required in understanding the Earth. We help in mapping resources within the university by incorporating geospatial data in their projects as well as fieldwork data collection.",url:"mailto:jamesmagige24@gmail.com",contacts:[{name:"Organizer",email:"jamesmagige24@gmail.com"}]},"ym-Khulna-University":{id:"ym-Khulna-University",type:"youthmappers",locationSet:{include:[[89.56055,22.83685]]},name:"Khulna University YouthMappers",description:"YouthMappers chapter at Khulna University",extendedDescription:"KU students and faculty from multiple disciplines are experienced at creating open data for OSM to address local challenges of development, including food security and other topics.",url:"https://www.facebook.com/groups/osmku/",contacts:[{name:"Organizer",email:"hoque.ahasan@gmail.com"}]},"ym-Kumi-University":{id:"ym-Kumi-University",type:"youthmappers",locationSet:{include:[[33.83789,1.49396]]},name:"Ever Last YouthMappers",description:"YouthMappers chapter at Kumi University",extendedDescription:"This energetic group of students organizes within the faculty of Science and Information Technology.",url:"mailto:kumiuniversityeverlastyouthmap@gmail.com?subject=YouthMappers%20at%20Kumi%20University",contacts:[{name:"Organizer",email:"kumiuniversityeverlastyouthmap@gmail.com"}]},"ym-Kwame-Nkrumah-University-of-Science-and-Technology":{id:"ym-Kwame-Nkrumah-University-of-Science-and-Technology",type:"youthmappers",locationSet:{include:[[-1.56831,6.67234]]},name:"Kwame Nkrumah University of Science and Technology YouthMappers",description:"YouthMappers chapter at Kwame Nkrumah University of Science and Technology",url:"https://www.facebook.com/KNUSTMappers/",contacts:[{name:"Organizer",email:"knustyouthmappers@outlook.com"}]},"ym-Makerere-University":{id:"ym-Makerere-University",type:"youthmappers",locationSet:{include:[[32.60742,0.35156]]},name:"Geo YouthMappers",description:"YouthMappers chapter at Makerere University",extendedDescription:"Geo YouthMappers is a Makerere University based mapping chapter esteemed to apply the spatial conception to the real world.We have collaborated on various mapping events with OSM. Our main aim is the desire to simplify data and make it readily available mostly for disaster preparedness.\"We map the world and change lives.",url:"https://www.facebook.com/groups/1742657446017065/",contacts:[{name:"Organizer",email:"geo-youthmappers@googlegroups.com"}]},"ym-Mbarara-University-of-Science-and-Technology":{id:"ym-Mbarara-University-of-Science-and-Technology",type:"youthmappers",locationSet:{include:[[30.65679,-0.61644]]},name:"MUST Street Mappers",description:"YouthMappers chapter at Mbarara University of Science and Technology",extendedDescription:"MUST Street Mappers is a Youth Mappers chapter at the Mbarara University of Science and Technology that is based on making our country and the world at large a better place through mapping. We base on collected information to notice patterns and data mine to present relevant and beneficial information to society.",url:"https://web.facebook.com/muststreetmappers/",contacts:[{name:"Organizer",email:"muststreetmappers@gmail.com"}]},"ym-McGill-University":{id:"ym-McGill-University",type:"youthmappers",locationSet:{include:[[-73.5787,45.50608]]},name:"Open Mapping Group McGill: A Member of the McGill Undergraduate Geography Society",description:"YouthMappers chapter at McGill University",extendedDescription:"The Open Mapping Group McGill: A Member of McGill Undergraduate Geography Society (OMG McGill) aims to connect students with open geospatial data and technologies to enhance resilience, community-building, and learning through mapping–on campus, in Montreal, in Canada, and abroad.",url:"mailto:omg.mcgill@gmail.com",contacts:[{name:"Organizer",email:"omg.mcgill@gmail.com"}]},"ym-Miami-University":{id:"ym-Miami-University",type:"youthmappers",locationSet:{include:[[-84.73174,39.5109]]},name:"Geography and Planning Society",description:"YouthMappers chapter at Miami University",extendedDescription:"GPS at Miami University aims to create a close-knit community of planners and geographers who want to have fun, learn more about careers and higher education in their field, network, and work alongside professionals for real experience.",url:"mailto:GPSMiamiOH@gmail.com",contacts:[{name:"Organizer",email:"gpsmiamioh@gmail.com"}]},"ym-Moi-University":{id:"ym-Moi-University",type:"youthmappers",locationSet:{include:[[35.50781,-0.35156]]},name:"Geography Students Association",description:"YouthMappers chapter at Moi University",extendedDescription:"The Geography Students Association at Moi University (GEOSAMU) explores, discovers and aims at developing the entire world through the young Geo-Spatial analysts.  GEOSAMU is part of the Department of Geography.",url:"mailto:geosamu44@gmail.com?subject=YouthMappers%20at%20Moi%20University",contacts:[{name:"Organizer",email:"geosamu44@gmail.com"}]},"ym-Monroe-Community-College":{id:"ym-Monroe-Community-College",type:"youthmappers",locationSet:{include:[[-77.61025,43.10138]]},name:"MCC Mapping Corps",description:"YouthMappers chapter at Monroe Community College",url:"mailto:GIST@monroecc.edu",contacts:[{name:"Organizer",email:"gist@monroecc.edu"}]},"ym-Montgomery-College":{id:"ym-Montgomery-College",type:"youthmappers",locationSet:{include:[[-77.15782,39.09718]]},name:"GeoMC",description:"YouthMappers chapter at Montgomery College",extendedDescription:"GeoMC’s mission is to provide students with hands-on experience in applying geospatial tools, collecting data, and project management. Most of our students come with a background in GIS and are geography majors. Our chapter’s members come from diverse backgrounds and we all work together to make a positive impact in the world live in.",url:"mailto:stephanie.calderon@montgomerycollege.edu",contacts:[{name:"Organizer",email:"stephanie.calderon@montgomerycollege.edu"}]},"ym-Namibia-University-of-Science-and-Technology":{id:"ym-Namibia-University-of-Science-and-Technology",type:"youthmappers",locationSet:{include:[[17.07709,-22.56572]]},name:"Geoinformation Technology Student Society",description:"YouthMappers chapter at Namibia University of Science and Technology",url:"mailto:patriciasem87@gmail.com",contacts:[{name:"Organizer",email:"patriciasem87@gmail.com"}]},"ym-New-York-University":{id:"ym-New-York-University",type:"youthmappers",locationSet:{include:[[-74.00391,40.71377]]},name:"NYU mHealth Initiative Mapping Corps",description:"YouthMappers chapter at New York University",extendedDescription:"The NYU mobile health or “mHealth” research initiative focuses on development of systems that link people - usually via their phones - to the places that they live and traverse, and thus supports novel research on the way phones and maps can be leveraged to understand behavioral decision making and ultimately health outcomes.",url:"http://www.nyumhealth.org/",contacts:[{name:"Organizer",email:"mhealth@nyu.edu"}]},"ym-Nimba-County-Community-College":{id:"ym-Nimba-County-Community-College",type:"youthmappers",locationSet:{include:[[-8.71645,7.35208]]},name:"Nimba County Community College Youth Mappers",description:"YouthMappers chapter at Nimba County Community College",url:"mailto:ncccyouthmappers@yahoo.com",contacts:[{name:"Organizer",email:"ncccyouthmappers@yahoo.com"}]},"ym-Njala-University-Freetown-Campus":{id:"ym-Njala-University-Freetown-Campus",type:"youthmappers",locationSet:{include:[[-13.23673,8.47959]]},name:"Njala Freetown YouthMappers",description:"YouthMappers chapter at Njala University, Freetown Campus",extendedDescription:"We are students of Njala University Freetown Campus, studying Information Technology under the department of Physics and Computer Science. and we are located at Henry Street Freetown, Sierra Leone.",url:"mailto:Njalafreetownmappers@gmail.com",contacts:[{name:"Organizer",email:"njalafreetownmappers@gmail.com"}]},"ym-Njala-University-Njala-Campus":{id:"ym-Njala-University-Njala-Campus",type:"youthmappers",locationSet:{include:[[-11.76548,7.93596]]},name:"YouthMappers Njala University, Njala Campus",description:"YouthMappers chapter at Njala University, Njala Campus",url:"mailto:youthmappersnu2017@gmail.com",contacts:[{name:"Organizer",email:"youthmappersnu2017@gmail.com"}]},"ym-Ohio-Wesleyan-University":{id:"ym-Ohio-Wesleyan-University",type:"youthmappers",locationSet:{include:[[-83.06823,40.29605]]},name:"Environment and Wildlife Club",description:"YouthMappers chapter at Ohio Wesleyan University",extendedDescription:"Environment and Wildlife Club looks at environmental issues on campus, in Delaware, and even nationally! We create campus and community projects, explore and enjoy the outdoors, volunteer, and try to promote environmentalism in every aspect of our lives.",url:"mailto:envirowild@owu.edu",contacts:[{name:"Organizer",email:"envirowild@owu.edu"}]},"ym-Oklahoma-State-University":{id:"ym-Oklahoma-State-University",type:"youthmappers",locationSet:{include:[[-97.07253,36.12077]]},name:"Geography Club",description:"YouthMappers chapter at Oklahoma State University",url:"mailto:hhayden@okstate.edu",contacts:[{name:"Organizer",email:"hhayden@okstate.edu"}]},"ym-Open-University-of-Tanzania":{id:"ym-Open-University-of-Tanzania",type:"youthmappers",locationSet:{include:[[39.26466,-6.7835]]},name:"Youth Mappers at Open University of Tanzania",description:"YouthMappers chapter at Open University of Tanzania",extendedDescription:"Youth Mappers at Open University of Tanzania\n\nHad been founded by members and students of Open University of Tanzania in Department of Geography who are mainly need to improve their career and help young community through joint and partnership projects with local community groups such as Mikoko Scout Group (www.msg.or.tz) and start cooperation with international colleges and universities for exchange programs in relation to Geography Studies as some programs prepared by Mikoko Scout Group which will link local university and other universities of the same interest through International Nature & Environmental Youth Camp 2019 (www.campsite.msg.or.tz/nature.html )\n\nOur chapter will soon be recognized as youth network program that will open opportunity for students to study and conduct research studies at a local levels.",url:"mailto:youthmapout@gmail.com",contacts:[{name:"Organizer",email:"youthmapout@gmail.com"}]},"ym-Politecnico-di-Milano":{id:"ym-Politecnico-di-Milano",type:"youthmappers",locationSet:{include:[[9.22852,45.45991]]},name:"PoliMappers",description:"YouthMappers chapter at Politecnico di Milano",extendedDescription:"PoliMappers is a volunteer students’ association based at Politecnico di Milano. The mission of the group is to train and motivate the next generation of volunteer mappers and to do mapping using free and open source software within the university as well as primary and secondary schools.",url:"https://polimappers.github.io/",contacts:[{name:"Organizer",email:"polimappers@gmail.com"}]},"ym-Queen-Mary-University-of-London":{id:"ym-Queen-Mary-University-of-London",type:"youthmappers",locationSet:{include:[[-0.04049,51.52382]]},name:"Queen Mary YouthMappers",description:"YouthMappers chapter at Queen Mary University of London",extendedDescription:"This chapter will be part of the activities of the Queen Mary Geography Society.",url:"https://www.facebook.com/groups/qmulgeographysociety/",contacts:[{name:"Organizer",email:"youthmappers@qmul.ac.uk"}]},"ym-Rajshahi-University-of-Engineering-Technology":{id:"ym-Rajshahi-University-of-Engineering-Technology",type:"youthmappers",locationSet:{include:[[88.62839,24.36373]]},name:"YouthMappers at RUET",description:"YouthMappers chapter at Rajshahi University of Engineering & Technology",extendedDescription:"The \"YouthMappers at RUET\" is a humanitarian mapping group of students of Rajshahi University of Engineering & Technology (RUET) to share, develop and practice the knowledge of GIS.  This group encourages using open source geospatial data and platform to make solution to reach the most vulnerable group of the world.",url:"mailto:ruetmappers@gmail.com",contacts:[{name:"Organizer",email:"ruetmappers@gmail.com"}]},"ym-SUNY-at-Fredonia":{id:"ym-SUNY-at-Fredonia",type:"youthmappers",locationSet:{include:[[-79.36523,42.42325]]},name:"Geoventurers",description:"YouthMappers chapter at SUNY at Fredonia",extendedDescription:"GeoVenturers is a group of students joining together across a number of majors on our campus that see geospatial technologies as a tool to serve others and to bring people together. Mentoring for the group brings in science education from the department of curriculum and instruction. We hope that we can bring our skills to play in helping make people's lives better.",url:"mailto:amw30@geneseo.edu?subject=GeoVenturers%20and%20the%20YouthMappers%20network",contacts:[{name:"Organizer",email:"amw30@geneseo.edu"}]},"ym-Sacred-Heart-Junior-College":{id:"ym-Sacred-Heart-Junior-College",type:"youthmappers",locationSet:{include:[[-89.07411,17.161]]},name:"Youth Mappers at Sacred Heart Junior College",description:"YouthMappers chapter at Sacred Heart Junior College",url:"mailto:jtzib18@gmail.com",contacts:[{name:"Organizer",email:"jtzib18@gmail.com"}]},"ym-Sherubtse-College":{id:"ym-Sherubtse-College",type:"youthmappers",locationSet:{include:[[91.52369,27.2866]]},name:"Geographical Society",description:"YouthMappers chapter at Sherubtse College",extendedDescription:"The Geographical Society, in the Department of Geography & Planning, Sherubtse College, Royal University of Bhutan, with support from the Center for Climate Change and Spatial Information, has made several efforts to create awareness and address important issues at the local and national level. We now join hands with the international student-centered YouthMappers network on \"Mapping for Resilience\" and contributing to a global 'Happiness'!",url:"mailto:gsscbhutan@gmail.com?subject=About%20the%20Royal%20University%20of%20Bhutan%20Geographical%20Society%20and%20Youth%20Mappers",contacts:[{name:"Organizer",email:"gsscbhutan@gmail.com"}]},"ym-Sokoine-University-of-Agriculture":{id:"ym-Sokoine-University-of-Agriculture",type:"youthmappers",locationSet:{include:[[37.65636,-6.85251]]},name:"SMCoSE YouthMappers",description:"YouthMappers chapter at Sokoine University of Agriculture",extendedDescription:"A Chapter comprising of Environmental sciences and management students and Geography studies under the dept. of Geography and  we will be using mapping techniques, based on systems concepts and theories, can be used to facilitate, explore, and capture the different understandings of the relationships, perspectives, and boundaries involved in environmental sustainability to obtain a more complete comprehension of the concept and develop plans for action.",url:"mailto:SMCoSEyouthmappers@gmail.com",contacts:[{name:"Organizer",email:"smcoseyouthmappers@gmail.com"}]},"ym-St.-Augustine-International-University":{id:"ym-St.-Augustine-International-University",type:"youthmappers",locationSet:{include:[[32.62161,0.27237]]},name:"YouthMappers at St Augustine International University",description:"YouthMappers chapter at St. Augustine International University",url:"mailto:youthmapperssaiu@gmail.com",contacts:[{name:"Organizer",email:"youthmapperssaiu@gmail.com"}]},"ym-St.-Mawaggali-Trades-Training-Institute":{id:"ym-St.-Mawaggali-Trades-Training-Institute",type:"youthmappers",locationSet:{include:[[26.9671,-16.81484]]},name:"MawaggaliMappers",description:"YouthMappers chapter at St. Mawaggali Trades Training Institute",extendedDescription:"We are the youthappers chapter at St. Mawaggali trades in choma who are want to contribute the different humantarian tasks to serve lives through mapping.",url:"mailto:mawaggalimappers@gmail.com",contacts:[{name:"Organizer",email:"mawaggalimappers@gmail.com"}]},"ym-State-University-of-New-York-Geneseo":{id:"ym-State-University-of-New-York-Geneseo",type:"youthmappers",locationSet:{include:[[-77.7832,42.81132]]},name:"SUNY Geneseo GIS Association",description:"YouthMappers chapter at State University of New York Geneseo",extendedDescription:"We spread awareness, support, education, volunteerism, and career advancement opportunities in geographic information systems, across disciplines and departments, in the context of SUNY Geneseo, the local community, and global community.",url:"http://www.facebook.com/GeneseoGIS",contacts:[{name:"Organizer",email:"bb18@geneseo.edu"}]},"ym-Stella-Maris-Polytechnic":{id:"ym-Stella-Maris-Polytechnic",type:"youthmappers",locationSet:{include:[[-10.7944,6.28997]]},name:"YouthMappers-SMP",description:"YouthMappers chapter at Stella Maris Polytechnic",url:"mailto:youthmappers.smp@gmail.com",contacts:[{name:"Organizer",email:"youthmappers.smp@gmail.com"}]},"ym-Technical-University-of-Kenya":{id:"ym-Technical-University-of-Kenya",type:"youthmappers",locationSet:{include:[[36.82449,-1.2916]]},name:"Geospatial Science Student Association",description:"YouthMappers chapter at Technical University of Kenya",extendedDescription:"It's a geographical information based group with very passionate students in the relevant fields of study. We do training to members on emerging trends in the market and keep up with technological advancements",url:"mailto:youthmappers.tuk@gmail.com",contacts:[{name:"Organizer",email:"youthmappers.tuk@gmail.com"}]},"ym-Texas-Tech-University":{id:"ym-Texas-Tech-University",type:"youthmappers",locationSet:{include:[[-101.86523,33.57787]]},name:"YouthMappers at TTU",description:"YouthMappers chapter at Texas Tech University",extendedDescription:"As one of the co-founding chapters of the network, the TTU YouthMappers are enthusiastic to serve as interdisciplinary leaders to help create open geographic data and analyses that address locally defined development challenges worldwide. The chapter strives to exchange and collaborate with other chapters around the globe while also offering themselves as a local resource and service to Texas Tech student organizations in ways that add value to their respecitive campus activities through mapping.",url:"https://www.facebook.com/youthmapperstexastech/",contacts:[{name:"Organizer",email:"emily.glaeser@ttu.edu"}]},"ym-The-Citadel":{id:"ym-The-Citadel",type:"youthmappers",locationSet:{include:[[-79.96064,32.79693]]},name:"YouthMappers at The Citadel",description:"YouthMappers chapter at The Citadel",extendedDescription:"This chapter is also a Rotaract Club, which is an affiliate of Rotary International. Multiple members, as well as leadership have expressed an interest in YouthMappers and we would like to affiliate our Citadel Rotaract Club with YouthMappers.",url:"Mailto:cstokes5@citadel.edu",contacts:[{name:"Organizer",email:"cstokes5@citadel.edu"}]},"ym-The-Gambia-YMCA-University-of-the-Gambia":{id:"ym-The-Gambia-YMCA-University-of-the-Gambia",type:"youthmappers",locationSet:{include:[[-16.6763,13.4579]]},name:"Connected YouthMappers",description:"YouthMappers chapter at The Gambia YMCA / University of the Gambia",extendedDescription:"Connected YouthMappers is comprised of dedicated young Gambians who aspire to change and aid national development.",url:"mailto:connectedyouthmappers@gmail.com",contacts:[{name:"Organizer",email:"connectedyouthmappers@gmail.com"}]},"ym-The-George-Washington-University":{id:"ym-The-George-Washington-University",type:"youthmappers",locationSet:{include:[[-77.04812,38.89966]]},name:"Humanitarian Mapping Society",description:"YouthMappers chapter at The George Washington University",extendedDescription:"Models of leadership and engagement, HMS seeks to render aid and better the world through humanitarian Geographic Information Systems (GIS) projects. This co-founding affiliated chapter on the campus of GWU has a plethora of experience to share, and frequently partners directly with USAID, the American Red Cross, and the US Department of State in their DC area to expand student-led efforts and serve the global community.",url:"https://www.facebook.com/GWHMS/",contacts:[{name:"Organizer",email:"hms.gwu@gmail.com"}]},"ym-The-Johns-Hopkins-University-SAIS":{id:"ym-The-Johns-Hopkins-University-SAIS",type:"youthmappers",locationSet:{include:[[-77.04027,38.90797]]},name:"SAIS YouthMappers",description:"YouthMappers chapter at The Johns Hopkins University, SAIS",extendedDescription:"The mission of SAIS Youth Mappers is to provide students at the Johns Hopkins University SAIS with the opportunity to become highly skilled humanitarian mappers. As a group within the South Asia Club, its primary focus is on supporting humanitarian mapping projects in the Indo-Pacific Region.",url:"mailto:saisyouthmappers@gmail.com",contacts:[{name:"Organizer",email:"saisyouthmappers@gmail.com"}]},"ym-The-Pennsylvania-State-University":{id:"ym-The-Pennsylvania-State-University",type:"youthmappers",locationSet:{include:[[-77.85976,40.798]]},name:"Penn State GIS Coalition",description:"YouthMappers chapter at The Pennsylvania State University",extendedDescription:"The Penn State Geospatial Information Science (GIS) Coalition is an organization that offers students majoring, minoring, or sharing an interest in GIS opportunities to develop supplementary knowledge and skills necessary to succeed in the professional GIS industry.",url:"mailto:advising@geog.psu.edu",contacts:[{name:"Organizer",email:"advising@geog.psu.edu"}]},"ym-The-University-of-Zambia":{id:"ym-The-University-of-Zambia",type:"youthmappers",locationSet:{include:[[28.33027,-15.39189]]},name:"YouthMappers Unza",description:"YouthMappers chapter at The University of Zambia",url:"https://www.facebook.com/search/posts/?q=youth%20mappers%20unza",contacts:[{name:"Organizer",email:"chombachishala13@gmail.com"}]},"ym-Tribhuvan-University":{id:"ym-Tribhuvan-University",type:"youthmappers",locationSet:{include:[[83.97645,28.2538]]},name:"Geomatics Engineering Students Association",description:"YouthMappers chapter at Tribhuvan University",extendedDescription:"This organization is the student forum of Geomatics Engineering students of Tribhuvan University , Institute of Engineering on the Pashchimanchal campus. Established since the beginning of the degree program, students have been active in mapping and leadership and are thrilled to be a part of the YouthMappers network.",url:"http://gesanwrc.wordpress.com/",contacts:[{name:"Organizer",email:"gesan.nepal@gmail.com"}]},"ym-UW-Madison":{id:"ym-UW-Madison",type:"youthmappers",locationSet:{include:[[-89.41268,43.07645]]},name:"BadgerMaps",description:"YouthMappers chapter at UW-Madison",extendedDescription:"BadgerMaps is the UW campus chapter of Youthmappers, an organization dedicated to humanitarian and community mapping services. We connect our volunteer network with opportunities to create GIS data for projects that need it.",url:"https://www.facebook.com/UW-BadgerMaps-197746270811951/",contacts:[{name:"Organizer",email:"uwbadgermaps@gmail.com"}]},"ym-Uganda-Christian-University-Mbale-Campus":{id:"ym-Uganda-Christian-University-Mbale-Campus",type:"youthmappers",locationSet:{include:[[34.17487,1.07587]]},name:"Mappers for Life",description:"YouthMappers chapter at Uganda Christian University Mbale Campus",extendedDescription:"We are Team Mappers for life! Please come and join us as we map together!\" This group works from the Department of Information Technology at the UCU.",url:"mailto:munhilll@gmail.com?subject=YouthMappers%20and%20the%20Uganda%20Christian%20University%20Mappers%20for%20Life",contacts:[{name:"Organizer",email:"munhilll@gmail.com"}]},"ym-Uganda-Pentecostal-University":{id:"ym-Uganda-Pentecostal-University",type:"youthmappers",locationSet:{include:[[30.26621,0.66206]]},name:"HiTech Youth Mappers",description:"YouthMappers chapter at Uganda Pentecostal University",extendedDescription:"A new Youthmappers Chapter in Western Uganda. Ready to map and provide open data with OpenStreetMap for development purposes.",url:"mailto:hitechyouthmappers@gmail.com",contacts:[{name:"Organizer",email:"hitechyouthmappers@gmail.com"}]},"ym-Universidad-Autonoma-de-Madrid":{id:"ym-Universidad-Autonoma-de-Madrid",type:"youthmappers",locationSet:{include:[[-3.69437,40.54647]]},name:"YouthMappers at UAM",description:"YouthMappers chapter at Universidad Autonoma de Madrid",url:"mailto:youthmappersatuam@gmail.com",contacts:[{name:"Organizer",email:"youthmappersatuam@gmail.com"}]},"ym-Universidad-Distrital-Francisco-Jose-de-Caldas":{id:"ym-Universidad-Distrital-Francisco-Jose-de-Caldas",type:"youthmappers",locationSet:{include:[[-74.0918,4.65306]]},name:"YouthMappers at Bogota",description:"YouthMappers chapter at Universidad Distrital Francisco Jose de Caldas",extendedDescription:"The Universidad Distrital Francisco José de Caldas is a public, coeducational, research university based in Bogotá, Colombia with a population of 26,140 students.",url:"mailto:lrocha@selper.org.co",contacts:[{name:"Organizer",email:"lrocha@selper.org.co"}]},"ym-Universidad-Nacional-Autnoma-de-Honduras":{id:"ym-Universidad-Nacional-Autnoma-de-Honduras",type:"youthmappers",locationSet:{include:[[-87.16598,14.08505]]},name:"PumaGis Hn",description:"YouthMappers chapter at Universidad Nacional Autónoma de Honduras",url:"mailto:pumagishn@gmail.com",contacts:[{name:"Organizer",email:"pumagishn@gmail.com"}]},"ym-Universidad-Nacional-de-Colombia":{id:"ym-Universidad-Nacional-de-Colombia",type:"youthmappers",locationSet:{include:[[-74.0918,4.65306]]},name:"Grupo UN",description:"YouthMappers chapter at Universidad Nacional de Colombia",extendedDescription:"Students are uniting to map and network with university students across the country of Colombia and across the globe.  Geographic specialties include affiliation with microbiology and health disciplines.",url:"mailto:raknudsono@unal.edu.co?subject=Youth%20Mappers%20y%20Grupo%20UN%20Colombia",contacts:[{name:"Organizer",email:"raknudsono@unal.edu.co"}]},"ym-Universidad-Nacional-de-Ingenieria":{id:"ym-Universidad-Nacional-de-Ingenieria",type:"youthmappers",locationSet:{include:[[-86.27051,12.1316]]},name:"Yeka Street MGA",description:"YouthMappers chapter at Universidad Nacional de Ingenieria",extendedDescription:"YEKA STREET is a work team constituted by students from Universidad Nacional de Ingenieria at Managua, Nicaragua. With the principal purpose of apply our knowledge and skills using many tools and apps to map areas in our cities and contribute to the development community projects and disasters relieve plans. We want to lead the way adding more students from all careers and universities in our country to join us at this cause, increasing in this way the life level and reducing the population vulnerability.",url:"https://www.facebook.com/yekastreetmga/",contacts:[{name:"Organizer",email:"yeka.street.mga@gmail.com"}]},"ym-Universidad-Politcnica-de-Madrid":{id:"ym-Universidad-Politcnica-de-Madrid",type:"youthmappers",locationSet:{include:[[-3.7173,40.44782]]},name:"Mapeo Humanitario",description:"YouthMappers chapter at Universidad Politécnica de Madrid",extendedDescription:"Geo-volunteering group formed at Moncloa Campus on November 2017. Around 20 members from three Universities (Complutense, CEU and UPM). Undergraduate students, MSc and PhD students collaborate together with organizations (MSF, Acción contra el Hambre,...) supported by trainers from Geoinquietos. Official recognition by UPM as Educative Innovation Project (Code  IE1718.0411)",url:"https://blogs.upm.es/mapeo-humanitario/",contacts:[{name:"Organizer",email:"lab.topografia@gmail.com"}]},"ym-Universidad-de-Antioquia":{id:"ym-Universidad-de-Antioquia",type:"youthmappers",locationSet:{include:[[-75.58594,6.22791]]},name:"Geomatica UDEA",description:"YouthMappers chapter at Universidad de Antioquia",extendedDescription:"We are a group interested in geospatial data, voluntary cartography, and participating in mapping with others in our country and within the YouthMappers network.",url:"mailto:geomatica.ing.udea@gmail.com?subject=YouthMappers%20y%20Universidad%20de%20Antioquia",contacts:[{name:"Organizer",email:"geomatica.ing.udea@gmail.com"}]},"ym-Universidad-de-Costa-Rica":{id:"ym-Universidad-de-Costa-Rica",type:"youthmappers",locationSet:{include:[[-84.05105,9.93721]]},name:"YouthMappers de Universidad de Costa Rica",description:"YouthMappers chapter at Universidad de Costa Rica",extendedDescription:"YouthMappers de Universidad de Costa Rica nace en función de acción social para y por miembros de comunidades distintas según temáticas de involucramiento, interacción y representación de variables dentro de un espacio geográfico definido (un territorio) Gracias a las herramientas de OpenStreetMaps tenemos la viabilidad de poder obtener, validar y compartir la información generada para comprobación y uso destinadas a las comunidades o el interesado en tales temáticas objetivas.",url:"https://www.facebook.com/ucr.asege/",contacts:[{name:"Organizer",email:"youthmappersucr@gmail.com"}]},"ym-Universidad-de-La-Guajira":{id:"ym-Universidad-de-La-Guajira",type:"youthmappers",locationSet:{include:[[-72.86133,11.52304]]},name:"Grupo Mesh",description:"YouthMappers chapter at Universidad de La Guajira",extendedDescription:"Grupo Mesh is a student organization at the Universidad de la Guajira in Colombia, including students from the program of Environmental Engineering who learn cartography and open mapping.",url:"mailto:zoviedo@uniguajira.edu.co?subject=Grupo%20Mesh%20y%20YouthMappers",contacts:[{name:"Organizer",email:"zoviedo@uniguajira.edu.co"}]},"ym-Universidad-de-Los-Andes":{id:"ym-Universidad-de-Los-Andes",type:"youthmappers",locationSet:{include:[[-74.0918,4.56545]]},name:"Cartografos Uniandes",description:"YouthMappers chapter at Universidad de Los Andes",extendedDescription:"We are a circle of student participation that seeks to use mapping and spatial reasoning as a means to create bonds of cooperation and integration between the university and society by addressing different spatial, social, political , economic and cultural dynamics.",url:"mailto:geografia@uniandes.edu.co?subject=Youth%20Mappers%20Chapter%20y%20la%20Universidad%20de%20los%20Andes",contacts:[{name:"Organizer",email:"geografia@uniandes.edu.co"}]},"ym-Universidad-de-Puerto-Rico-Rio-Piedras":{id:"ym-Universidad-de-Puerto-Rico-Rio-Piedras",type:"youthmappers",locationSet:{include:[[-66.04978,18.40277]]},name:"UPR YouthMappers",description:"YouthMappers chapter at Universidad de Puerto Rico - Rio Piedras",url:"mailto:carlosguilbe@gmail.com",contacts:[{name:"Organizer",email:"carlosguilbe@gmail.com"}]},"ym-Universidad-de-San-Buenaventura":{id:"ym-Universidad-de-San-Buenaventura",type:"youthmappers",locationSet:{include:[[-75.58594,6.22791]]},name:"YouthMappers San Buenaventura",description:"YouthMappers chapter at Universidad de San Buenaventura",extendedDescription:"We are pleased to join YouthMappers mapping for a better world and community.",url:"https://www.facebook.com/groups/1742657446017065/",contacts:[{name:"Organizer",email:"ingenieria.sistemas@usbmed.edu.co"}]},"ym-Universidade-Eduardo-Mondlane":{id:"ym-Universidade-Eduardo-Mondlane",type:"youthmappers",locationSet:{include:[[32.60357,-25.95208]]},name:"Comunidade YouthMappers Moçambique",description:"YouthMappers chapter at Universidade Eduardo Mondlane",extendedDescription:"We are a student group that intends to join Mozambican society to create a resilient community of humanitarian mapping. The community intend to map the physical occupation of our Country and create open geographic data, accessible to the public and able to be used in several areas without associated costs.",url:"www.facebook.com/Moz-YouthMappers",contacts:[{name:"Organizer",email:"moz.youthmappers1@hotmail.com"}]},"ym-Universit-Gaston-Berger":{id:"ym-Universit-Gaston-Berger",type:"youthmappers",locationSet:{include:[[-16.42556,16.06284]]},name:"YouthMappers at UGB",description:"YouthMappers chapter at Université Gaston Berger",extendedDescription:"YouthMappers UGB is made up of young students and researchers who are passionate about mapping. Our aim is to improve students' skills in the field of cartography and to participate in the creation of open geographic data that responds to development challenges around the world and particularly in Africa.",url:"https://web.facebook.com/youthmappersugb/",contacts:[{name:"Organizer",email:"youthmappers.ugb@gmail.com"}]},"ym-Universit-Mohammed-V-Rabat":{id:"ym-Universit-Mohammed-V-Rabat",type:"youthmappers",locationSet:{include:[[-6.84395,33.99862]]},name:"Brahmapoutre at Rabat",description:"YouthMappers chapter at Université Mohammed V Rabat",extendedDescription:"This chapter sees participation in the YouthMappers program as an oppourtunity to share our knowlege create new working relationships with other chapters in different countries",url:"mailto:khmichasma@gmail.com",contacts:[{name:"Organizer",email:"khmichasma@gmail.com"}]},"ym-Universit-de-NZrkor":{id:"ym-Universit-de-NZrkor",type:"youthmappers",locationSet:{include:[[-8.83716,7.7324]]},name:"Youthmappers à N'Zérékoré",description:"YouthMappers chapter at Université de N'Zérékoré",extendedDescription:"YouthMappers est un groupe qui permet de faire la cartographie des communautés enclavées et à la prise des décisions en cas de catastrophes ou épidémies. Elle permet aussi la production et l'utilisation des données en accès gratuit.",url:"mailto:donpaul1974@gmail.com",contacts:[{name:"Organizer",email:"donpaul1974@gmail.com"}]},"ym-Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako":{id:"ym-Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako",type:"youthmappers",locationSet:{include:[[-7.98832,12.61531]]},name:"Etudiant au Laboratoire HoPE",description:"YouthMappers chapter at Université des Sciences Sociale et de Gestion de Bamako",url:"mailto:youthmappersfhg@gmail.com",contacts:[{name:"Organizer",email:"youthmappersfhg@gmail.com"}]},"ym-Universitas-Negeri-Makassar":{id:"ym-Universitas-Negeri-Makassar",type:"youthmappers",locationSet:{include:[[119.4292,-5.18613]]},name:"Kontur Geografi",description:"YouthMappers chapter at Universitas Negeri Makassar",url:"https://tentangkontur.blogspot.co.id",contacts:[{name:"Organizer",email:"konturgeografi@gmail.com"}]},"ym-University-Muhammadiyah-Surakarta":{id:"ym-University-Muhammadiyah-Surakarta",type:"youthmappers",locationSet:{include:[[110.76899,-7.55758]]},name:"SpaceTime",description:"YouthMappers chapter at University Muhammadiyah Surakarta",extendedDescription:"SpaceTime is a community mapping in the Faculty of Geography of Muhammadiyah University of Surakarta. SpaceTime was founded by Bruce Maldy Pratama, Mukhlis Akbar and Irfandi Fauzi. They are active students in the Faculty of Geography University Muhammadiyah Surakarta.",url:"mailto:spacetime1717@gmail.com",contacts:[{name:"Organizer",email:"spacetime1717@gmail.com"}]},"ym-University-of-California-Davis":{id:"ym-University-of-California-Davis",type:"youthmappers",locationSet:{include:[[-121.72852,38.54799]]},name:"Mapping Club",description:"YouthMappers chapter at University of California, Davis",url:"mailto:ucdmappingclub@ucdavis.edu?subject=YouthMappers%20and%20UC%20Davis%20Mapping%20Club",contacts:[{name:"Organizer",email:"ucdmappingclub@ucdavis.edu"}]},"ym-University-of-Cape-Coast":{id:"ym-University-of-Cape-Coast",type:"youthmappers",locationSet:{include:[[-1.23047,5.09092]]},name:"UCC Geographical Society",description:"YouthMappers chapter at University of Cape Coast",extendedDescription:"We are a society that encompasses all students who are reading and read geography in the Department of Geography and Regional Planning at the University of Cape Coast. Our main aim is to promote interest in the discipline inside and outside of the classroom. Our motto is “We comprehend the Earth and its inhabitants.”",url:"https://www.facebook.com/Geographical-Society-Ucc-105157196204838/info/?tab=page_info",contacts:[{name:"Organizer",email:"geosoc_ucc@yahoo.com"}]},"ym-University-of-Central-Florida":{id:"ym-University-of-Central-Florida",type:"youthmappers",locationSet:{include:[[-81.38672,28.45891]]},name:"Geospatial Information Society",description:"YouthMappers chapter at University of Central Florida",extendedDescription:"Our mission is to foster a social and educational environment for all majors who are interested in the discussion and application of GIS. Group and community events throughout the academic year organize students to volunteer to help local and regional communities by using community-based GIS projects and educating local middle and high school students on the use and application of GIS.",url:"mailto:rsouth@knights.ucf.edu",contacts:[{name:"Organizer",email:"rsouth@knights.ucf.edu"}]},"ym-University-of-Chicago":{id:"ym-University-of-Chicago",type:"youthmappers",locationSet:{include:[[-87.59878,41.78872]]},name:"Tobler Society",description:"YouthMappers chapter at University of Chicago",url:"mailto:toblersociety@uchicago.edu",contacts:[{name:"Organizer",email:"toblersociety@uchicago.edu"}]},"ym-University-of-Dar-es-Salaam":{id:"ym-University-of-Dar-es-Salaam",type:"youthmappers",locationSet:{include:[[39.20531,-6.78035]]},name:"YouthMappers at University of Dar es Salaam",description:"YouthMappers chapter at University of Dar es Salaam",extendedDescription:"The purpose of the University of Dar es Salaam YouthMappers  is to use and promote open source data and GIS technologies to map potential disaster areas, provide resources for emergency management, connect its members with open source and GIS organizations in the city of Dar es Salaam, and serve any upcoming needs of our project partners .",url:"https://www.facebook.com/UDSMYouthMappers/",contacts:[{name:"Organizer",email:"godluckur@gmail.com"}]},"ym-University-of-Energy-and-Natural-Resources":{id:"ym-University-of-Energy-and-Natural-Resources",type:"youthmappers",locationSet:{include:[[-2.343,7.35021]]},name:"Eco-Club",description:"YouthMappers chapter at University of Energy and Natural Resources",extendedDescription:"To provide a sound education to all citizens about the deteriorating environment and provide utmost use of recreation of the environment for human survival.",url:"mailto:james.agyei-ohemeng@uenr.edu.gh",contacts:[{name:"Organizer",email:"james.agyei-ohemeng@uenr.edu.gh"}]},"ym-University-of-Exeter":{id:"ym-University-of-Exeter",type:"youthmappers",locationSet:{include:[[-3.53515,50.73664]]},name:"University of Exeter British Red Cross Missing Maps",description:"YouthMappers chapter at University of Exeter",extendedDescription:"We are a team of enthusiastic Geographers with comprehensive knowledge of GIS. We are passionate about supporting the British Red Cross Society with various humanitarian aid efforts. We are also important teachers of the significance of mapping remotely sensed data and how this helps on the ground. Our mapathons have themed academic focuses that highlight the different GIS research in our geography department, while also functioning as employability awareness events which we use to invite speakers in to talk about their GIS/British Red Cross careers.",url:"https://www.facebook.com/EUMissingMaps/",contacts:[{name:"Organizer",email:"uniofexemissingmaps@gmail.com"}]},"ym-University-of-Ghana":{id:"ym-University-of-Ghana",type:"youthmappers",locationSet:{include:[[-0.19624,5.65113]]},name:"University of Ghana YouthMappers",description:"YouthMappers chapter at University of Ghana",extendedDescription:"UG YouthMappers consists of both graduate and undergraduate students possessing knowledge and skills in GIS and Remote Sensing. The club is composed of an energetic team that is poised to address social issues and mitigate environmental problems through mapping. Our fundamental principles are capacity building, empowerment and teamwork.",url:"https://twitter.com/UGYouthMappers",contacts:[{name:"Organizer",email:"mawulikaf@gmail.com"}]},"ym-University-of-Liberia-YouthMappers":{id:"ym-University-of-Liberia-YouthMappers",type:"youthmappers",locationSet:{include:[[-10.61986,6.37704]]},name:"University of Liberia YouthMappers",description:"YouthMappers chapter at University of Liberia YouthMappers",extendedDescription:"The University of Liberia YouthMappers is a chapter organization of the Global YouthMappers. We are a nonprofit student mapping organization focus on mapping for Liberia’s development and the World at large. The purpose of this organization shall be to utilize technology and geospatial knowledge as means of creating and developing maps; collecting and analyzing data that will address local and worldwide challenges. Our aim is to support and create opportunity for students to develop interest and skills in the fields of mapping. We envision a united student community that are collaborative, active and are willing to work with the University of Liberia YouthMappers in order to better the lives of others.",url:"mailto:ulym2017@gmail.com",contacts:[{name:"Organizer",email:"ulym2017@gmail.com"}]},"ym-University-of-Malawi":{id:"ym-University-of-Malawi",type:"youthmappers",locationSet:{include:[[35.33203,-15.36889]]},name:"Chanco Malawi YouthMappers",description:"YouthMappers chapter at University of Malawi",extendedDescription:"Chanco Malawi YouthMappers is the student mapping organization for the University of Malawi's Chancellor College. The students in this chapter focus on mapping for Malawi's development and science needs.",url:"mailto:zolamanyungwa@gmail.com",contacts:[{name:"Organizer",email:"zolamanyungwa@gmail.com"}]},"ym-University-of-Maryland-College-Park":{id:"ym-University-of-Maryland-College-Park",type:"youthmappers",locationSet:{include:[[-76.94332,38.98672]]},name:"Geography Club",description:"YouthMappers chapter at University of Maryland - College Park",extendedDescription:"The mission of the Geography Club at the University of Maryland College Park is to engage and encourage students to explore geographic interests within the campus and the community.",url:"https://www.facebook.com/UMDGeographyClub/?fref=ts",contacts:[{name:"Organizer",email:"geogclubumd@gmail.com"}]},"ym-University-of-Mines-and-Technology":{id:"ym-University-of-Mines-and-Technology",type:"youthmappers",locationSet:{include:[[-2.00125,5.29878]]},name:"UMaT YouthMappers",description:"YouthMappers chapter at University of Mines and Technology",extendedDescription:"UMaT YouthMappers is a group of volunteer students who seek to grant students the opportunity to improve skills in the field of mapping & creating open geographic data and analyses that address locally defined development challenges worldwide.",url:"http://umatyouthmappers.wordpress.com/",contacts:[{name:"Organizer",email:"kwadzo459@gmail.com"}]},"ym-University-of-Nairobi":{id:"ym-University-of-Nairobi",type:"youthmappers",locationSet:{include:[[36.82617,-1.31824]]},name:"Geospatial Engineering Students Association",description:"YouthMappers chapter at University of Nairobi",extendedDescription:"UN students are working with the local OSM community, Map Kibera, and GrouthTruth to learn about open mapping and contribute data for needs in their urban communities.",url:"www.geospatial.uonbi.ac.ke",contacts:[{name:"Organizer",email:"contact@mapkibera.org"}]},"ym-University-of-Nigeria-Enugu-Campus":{id:"ym-University-of-Nigeria-Enugu-Campus",type:"youthmappers",locationSet:{include:[[7.50373,6.42639]]},name:"LionMappersTeam (LMT) Enugu",description:"YouthMappers chapter at University of Nigeria, Enugu Campus",extendedDescription:"The LionMappersTeam(LMT)Enugu Campus is an affiliate of YouthMappers Network, with the sole aim of providing members the opportunity to learn and improve their skills in the field of Geoinformatics and to create open geographic data and analysis that addresses locally defined challenges globally. It is a team of volunteers for Crowdsourced Mapping and Geographic Information provision using Openstreetmap, Citizen Science and other Geospatial Technology for research, training and response to resilient community challenges. We are involved in Web-Cartography, GIS and Remote Sensing Applications and ResearchWe are passionate about Volunteered Geographic Information.Paticipatory GIS and Citizen Science.Our major activities include online crowdsourced-Cartography, Field Mapping ,Training workshops and outreaches to High School as well as Humanitarian/Disaster Response Mapping.",url:"https://web.facebook.com/Lionmappersteam-enugu-Campus-361221567667528/",contacts:[{name:"Organizer",email:"lmtenugucampus@gmail.com"}]},"ym-University-of-Nigeria-Nsukka":{id:"ym-University-of-Nigeria-Nsukka",type:"youthmappers",locationSet:{include:[[7.40821,6.86461]]},name:"LionMappersTeam (LMT) Nsukka",description:"YouthMappers chapter at University of Nigeria, Nsukka",extendedDescription:"The LionMappersTeam is an affiliate of YouthMappers Network, with the sole aim of providing members the opportunity to learn and improve their skills in the field of mapping science and to create open geographic data and analysis that addresses locally defined challenges globally. It is a team of volunteers for crowdsourced mapping and geographic information provision using Openstreetmap, citizen science  and other geospatial  technology for research, training and response to resilient community challenges. We are involved in GIS and Remote Sensing Applications and Research.Paticipatory GIS and Citizen Science,field mapping ,training workshops and outreaches to High Schools.",url:"http://fb.me/LionMappersTeamNsukka;and send messages to our Page at m.me/LionMappersTeamNsukka",contacts:[{name:"Organizer",email:"lionmappersteam@gmail.com"}]},"ym-University-of-North-Texas":{id:"ym-University-of-North-Texas",type:"youthmappers",locationSet:{include:[[-97.15255,33.20735]]},name:"UNT Geography Club",description:"YouthMappers chapter at University of North Texas",extendedDescription:"The Geography Club is a student organization at University of North Texas that welcomes all students who are interested in geography. The objective of the Geography Club is to promote interest in Geography, the Major and the Geography Department along with fellowship among students and faculty. The club also seeks to represent student needs and wants in regard to the study of geography and to provide a forum for the presentation of innovative ideas to the benefit of the University community.",url:"Mailto:reeseramsey@my.unt.edu",contacts:[{name:"Organizer",email:"reeseramsey@my.unt.edu"}]},"ym-University-of-Northern-Colorado":{id:"ym-University-of-Northern-Colorado",type:"youthmappers",locationSet:{include:[[-104.69563,40.40395]]},name:"UNCO Geography and GIS Club",description:"YouthMappers chapter at University of Northern Colorado",extendedDescription:"Official Geography and GIS Club chapter affiliated with the University of Northern Colorado where our aim is to learn, share and connect with those around us. #MakingSenseOfTheWorld",url:"www.facebook.com/groups/476365076071166/",contacts:[{name:"Organizer",email:"uncogeoggisclub@gmail.com"}]},"ym-University-of-Oregon":{id:"ym-University-of-Oregon",type:"youthmappers",locationSet:{include:[[-123.04688,44.02421]]},name:"Map by Northwest",description:"YouthMappers chapter at University of Oregon",extendedDescription:"Map By Northwest aims to engage undergraduate students at the University of Oregon in mapping projects to assist in humanitarian causes and for conducting geographic research. We welcome students from all disciplines to join us in our mapping adventures.",url:"http://blogs.uoregon.edu/mxnw/",contacts:[{name:"Organizer",email:"cbone@uoregon.edu"}]},"ym-University-of-Panama":{id:"ym-University-of-Panama",type:"youthmappers",locationSet:{include:[[-79.54102,9.01527]]},name:"YouthMappers UP",description:"YouthMappers chapter at University of Panama",extendedDescription:"Student mappers in Panama work with open spatial data to help identify, define, address, and create meaning about locally defined development challenges. They collaborate with students from other countries on community mapping topics from ecotourism to food security, from biodiversity to indigenous issues, promoting a humanistic vision through scientific perspectives.",url:"mailto:Youthmappers.up@gmail.com",contacts:[{name:"Organizer",email:"youthmappers.up@gmail.com"}]},"ym-University-of-Port-Harcourt":{id:"ym-University-of-Port-Harcourt",type:"youthmappers",locationSet:{include:[[6.92037,4.90173]]},name:"UniqueMappersTeam (UMT) Port Harcourt",description:"YouthMappers chapter at University of Port Harcourt",extendedDescription:"UniqueMappersTeam(UMT)Port Harcourt  is an action group and a team of volunteers for a collaborative online mapping targeted at training and empowering members with trending mapping skills  to create open geospatial data and analysis that addresses locally defined challenges for geoinformation and to provide humanitarian mapping  services to resilient communities in Niger Delta,Nigeria and elsewhere.We promote Crowdsoucred Mapping and Geographic information volunteering using OpenStreetMap(OSM) platform and other accessible platforms for Rapid Response Mapping,Disaster Mapping,Geo-intelligence Mapping,Map updates and training.Its an affiliate Campus chapter of Humanitarian OpenStreetMap Team(HOT).It is a project-task team of YouthMappers that provide opportunity for members to learn and improve their skills in Geoinformatics so as to explore global opportunities in the field of Mapping and Geoinformation.",url:"https://web.facebook.com/uniquemappersteamportharcourt/",contacts:[{name:"Organizer",email:"victor.sunday@uniport.edu.ng"}]},"ym-University-of-Pretoria":{id:"ym-University-of-Pretoria",type:"youthmappers",locationSet:{include:[[28.21289,-25.72063]]},name:"Centre for Geoinformation Science",description:"YouthMappers chapter at University of Pretoria",extendedDescription:"The students who map Pretoria are supported by the University of Pretoria's Centre for Geoinformation Science, a platform from where the excellence of UP individuals and teams involved in geographic information science (GISc) research, education and training, professional development and community engagement is encouraged and strengthened through collaborations, education and training and  alliances within South Africa and abroad.",url:"http://www.up.ac.za/cgis",contacts:[{name:"Organizer",email:"cgis-info@kendy.up.ac.za"}]},"ym-University-of-Redlands":{id:"ym-University-of-Redlands",type:"youthmappers",locationSet:{include:[[-117.16339,34.06295]]},name:"URSpatial Geo-Thinkers",description:"YouthMappers chapter at University of Redlands",extendedDescription:"To build upon the members' GIS skills and knowledge of the tools and methods through applied social engagement as well as to educate the campus community about the power of mapping and spatial analysis through community service events.",url:"mailto:nathan_strout@redlands.edu",contacts:[{name:"Organizer",email:"nathan_strout@redlands.edu"}]},"ym-University-of-Rwanda-Huye-Campus":{id:"ym-University-of-Rwanda-Huye-Campus",type:"youthmappers",locationSet:{include:[[29.7397,-2.61509]]},name:"Rwanda YouthMappers",description:"YouthMappers chapter at University of Rwanda - Huye Campus",extendedDescription:"Based on the commitment and the purpose of promoting mapping, and the information from YouthMappers public talks, we have organized as students in Geography department who are committed in mapping to found a chapter of our Campus. We have supported by our Facilitator Dr. Gaspard Rwanyiziri (Director of CGIS-Rwanda) and various lecturer mentors.",url:"https://www.facebook.com/Rwanda-YouthMappers",contacts:[{name:"Organizer",email:"erneruz@gmail.com"}]},"ym-University-of-South-Carolina":{id:"ym-University-of-South-Carolina",type:"youthmappers",locationSet:{include:[[-81.03516,34.01609]]},name:"Geography Graduate Student Association",description:"YouthMappers chapter at University of South Carolina",extendedDescription:"The GGSA is a fully student-run organization, designed to serve as an advocate and resource for all geography graduate students by filling the role of liaison between the department and students. Our goal is to further professional, academic, and personal development of graduate students interested in the field of geography and its sub disciplines.",url:"https://carolinaggsa.wordpress.com/",contacts:[{name:"Organizer",email:"carolina_ggsa@gmail.com"}]},"ym-University-of-Southern-California":{id:"ym-University-of-Southern-California",type:"youthmappers",locationSet:{include:[[-118.30078,34.01609]]},name:"SC Mappers",description:"YouthMappers chapter at University of Southern California",extendedDescription:"We see the world differently: we view it through a spatial lens. With the power of spatial thinking, we connect place and space to help address global challenges. Collaborate with us!",url:"mailto:scmappers@gmail.com?subject=YouthMappers%20at%20USC",contacts:[{name:"Organizer",email:"scmappers@gmail.com"}]},"ym-University-of-Vermont":{id:"ym-University-of-Vermont",type:"youthmappers",locationSet:{include:[[-73.21289,44.46493]]},name:"University of Vermont Humanitarian Mapping Club",description:"YouthMappers chapter at University of Vermont",url:"https://www.facebook.com/UVMHMC",contacts:[{name:"Organizer",email:"uvm.hmc@gmail.com"}]},"ym-University-of-Victoria":{id:"ym-University-of-Victoria",type:"youthmappers",locationSet:{include:[[-123.31186,48.46321]]},name:"Society of Geography Students",description:"YouthMappers chapter at University of Victoria",extendedDescription:"SOGS seeks to promote and represent social and academic interests within the Department of Geography. This is expressed by four key goals: To provide a forum for the discussion of matters concerning the quality and accessibility of education within geography; to provide a means of expressing a consensus of student opinion to deparhnental faculty through representation at deparkrnental meetings and on departrnental committees; to undertake anangements for such activities as are for the benefit of students and are seen to be within the field of interest of students in geography; to act as a liaison through the UVSS and the Course Union Council with other student groups on campus",url:"https://www.facebook.com/SOGSUVic/",contacts:[{name:"Organizer",email:"sogsmappers@gmail.com"}]},"ym-University-of-Warwick":{id:"ym-University-of-Warwick",type:"youthmappers",locationSet:{include:[[-1.56119,52.37905]]},name:"University of Warwick Resilience Mapping Society",description:"YouthMappers chapter at University of Warwick",extendedDescription:"We are a group of enthusiastic mappers based at Warwick University. Our aim is to get people excited about humanitarian mapping and help them understand the impact this activity has on the field. We are closely aligned with Missing Maps and Doctors Without Borders UK and focus on HOT tasks in our mapping activities and workshops. Our mapathons are listed on the Missing Maps page whenever they are scheduled.",url:"mailto:p.ulbrich@warwick.ac.uk",contacts:[{name:"Organizer",email:"p.ulbrich@warwick.ac.uk"}]},"ym-University-of-Wyoming":{id:"ym-University-of-Wyoming",type:"youthmappers",locationSet:{include:[[-105.56651,41.31476]]},name:"Gamma Theta Upsilon/Geography Club",description:"YouthMappers chapter at University of Wyoming",url:"http://www.uwyo.edu/geography/geographyclub/",contacts:[{name:"Organizer",email:"gtu-geography@uwyo.edu"}]},"ym-University-of-Zimbabwe":{id:"ym-University-of-Zimbabwe",type:"youthmappers",locationSet:{include:[[31.05466,-17.78467]]},name:"UZMappers",description:"YouthMappers chapter at University of Zimbabwe",extendedDescription:"UzMappersTeam Zimbabwe is a team of Volunteers using OpenStreetMap for Open Data Mapping and Humanitarian Disaster response mapping .The team empowers its members with open source geospatial technology skills.",url:"https://www.facebook.com/Uzmappersteam-Zimbabwe-246038666256392/",contacts:[{name:"Organizer",email:"uzmappersteam@gmail.com"}]},"ym-University-of-the-Philippines-Resilience-Institute":{id:"ym-University-of-the-Philippines-Resilience-Institute",type:"youthmappers",locationSet:{include:[[121.06,14.65]]},name:"YouthMappers UP Resilience Institute",description:"YouthMappers chapter at University of the Philippines Resilience Institute",extendedDescription:"The UP Resilience Institute was established in 2016 with a mission statement to empower local communities through multidisciplinary research and actions toward resilience. Through UP NOAH Center, and the help of different organizations, we have provided building exposure maps for 17 provinces out of the 82 and uploaded more than 4 million footprints to Open Street Maps.",url:"https://www.facebook.com/UP-Resillience-Institute-Youth-Mappers-123477508533225",contacts:[{name:"Organizer",email:"llnguyen@up.edu.ph"}]},"ym-University-of-the-West-Indies-Mona-Campus":{id:"ym-University-of-the-West-Indies-Mona-Campus",type:"youthmappers",locationSet:{include:[[-76.74601,18.00629]]},name:"Libraries Outreach - ODL",description:"YouthMappers chapter at University of the West Indies, Mona Campus",extendedDescription:"The UWI, Mona Campus Library engages in public, outreach and special projects. This will allow our library the means to be a catalyst for spatial literacy and advocate for spatial data sharing and access to Jamaican and Caribbean interests. We have disaster relief and communication needs and   extensive earth science and geo-hazards needs to better serve our campus and community. Specifically, we hace a Science Library to showcase such to all faculty and students.",url:"mailto:benjamin.branch@uwimona.edu.jm",contacts:[{name:"Organizer",email:"benjamin.branch@uwimona.edu.jm"}]},"ym-Vassar-College":{id:"ym-Vassar-College",type:"youthmappers",locationSet:{include:[[-73.89515,41.68658]]},name:"Hudson Valley Mappers",description:"YouthMappers chapter at Vassar College",extendedDescription:"Our mission is to provide a multi-disciplinary platform for peers, educators, and community organizations to engage in local mapping projects with a focus on strengthening our local ecosystems, our built environment, and the health of our community. We also seek to contribute geospatial support for global humanitarian aid and development efforts.",url:"http://pages.vassar.edu/gis/vassar-youthmappers/",contacts:[{name:"Organizer",email:"geo@vassar.edu"}]},"ym-Villanova-University":{id:"ym-Villanova-University",type:"youthmappers",locationSet:{include:[[-75.34361,40.03714]]},name:"The Villanova Globeplotters",description:"YouthMappers chapter at Villanova University",extendedDescription:"The Villanova Globeplotters is built on Villanova’s Augustinian principle of selfless-service to the global community. Mixed with relaxed social interaction, we strive to provide geospatial outreach to those in need regardless of participating students’ race, academic major, student group association, or college career level.",url:"mailto:villanova.globeplotters@gmail.com",contacts:[{name:"Organizer",email:"villanova.globeplotters@gmail.com"}]},"ym-West-Virginia-University":{id:"ym-West-Virginia-University",type:"youthmappers",locationSet:{include:[[-79.98047,39.63936]]},name:"Maptime Morgantown",description:"YouthMappers chapter at West Virginia University",extendedDescription:"Working as a collaborative team, this co-founding chapter focuses on providing an open learning environment for those interested in working on projects that intersect international development, emergency response, and geographic information science.\nThey connect beginners and experts by providing technical training and experience in building meaningful and useful geographic infrastructure data, while connecting to sister cities around the world.",url:"mailto:MaptimeMorgantown@gmail.com?subject=Maptime%20Morgantown%20from%20YouthMappers%20website",contacts:[{name:"Organizer",email:"maptimemorgantown@gmail.com"}]},"ym-Western-Michigan-University":{id:"ym-Western-Michigan-University",type:"youthmappers",locationSet:{include:[[-85.61042,42.28342]]},name:"Geography Club",description:"YouthMappers chapter at Western Michigan University",url:"http://www.facebook.com/groups/WMUGeographyClub/",contacts:[{name:"Organizer",email:"wmu.geog.club@gmail.com"}]},"ym-Yarmouk-University":{id:"ym-Yarmouk-University",type:"youthmappers",locationSet:{include:[[35.85811,32.53652]]},name:"YouthMappers at YU",description:"YouthMappers chapter at Yarmouk University",extendedDescription:"YouthMappers chapter at YU is the first mapping group in the Middle East and North Africa region where refugees, drought, and poverty are rising crises and in urgent need for humanitarian mapping  activities to mitigate the consequences of such crises. YU Mappers are encouraged to use open data to address challenges in MENA region to bring relief and development to target areas within the region.",url:"mailto:rnjawarneh@yu.edu.jo",contacts:[{name:"Organizer",email:"rnjawarneh@yu.edu.jo"}]}};
26824
26825         var dataImagery = [{id:"sjcgis.org-Aerials_2013_WM",name:"2013 aerial imagery for San Juan County WA",type:"tms",template:"https://sjcgis.org/arcgis/rest/services/Basemaps/Aerials_2013_WM/MapServer/tile/{zoom}/{y}/{x}",endDate:"2013-06-01T00:00:00.000Z",startDate:"2013-05-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-123.02167,48.44667],[-122.94666,48.44781],[-122.90151,48.41307],[-122.80263,48.40771],[-122.79199,48.4428],[-122.80881,48.47866],[-122.73912,48.49572],[-122.78547,48.62161],[-122.73088,48.63613],[-122.7556,48.71208],[-122.95747,48.71593],[-122.97086,48.69577],[-122.9997,48.6978],[-123.00348,48.73427],[-123.0433,48.7431],[-123.07626,48.70528],[-123.08485,48.66335],[-123.12845,48.6638],[-123.22698,48.70302],[-123.24655,48.68353],[-123.17445,48.64702],[-123.21514,48.60107],[-123.21393,48.57336],[-123.1808,48.56575],[-123.16621,48.52006],[-123.10235,48.47684],[-123.02167,48.44667]],[[-122.98339,48.78214],[-122.93498,48.76653],[-122.91181,48.73858],[-122.80229,48.73982],[-122.81946,48.75499],[-122.9343,48.79572],[-122.98374,48.79436],[-122.98339,48.78214]]],terms_url:"https://www.arcgis.com/home/item.html?id=7bf69831861d438d8365cf9f46662523",terms_text:"Pictometry Inc, San Juan County GIS",description:"Public domain aerial imagery taken in May/June 2013 from San Juan County, WA. Resolution is 9 inch."},{id:"sjcgis.org-Aerials_2016_WM",name:"2016 aerial imagery for San Juan County WA",type:"tms",template:"https://sjcgis.org/arcgis/rest/services/Basemaps/Aerials_2016_WM/MapServer/tile/{zoom}/{y}/{x}",endDate:"2016-07-01T00:00:00.000Z",startDate:"2016-05-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-123.02167,48.44667],[-122.94666,48.44781],[-122.90151,48.41307],[-122.80263,48.40771],[-122.79199,48.4428],[-122.80881,48.47866],[-122.73912,48.49572],[-122.78547,48.62161],[-122.73088,48.63613],[-122.7556,48.71208],[-122.95747,48.71593],[-122.97086,48.69577],[-122.9997,48.6978],[-123.00348,48.73427],[-123.0433,48.7431],[-123.07626,48.70528],[-123.08485,48.66335],[-123.12845,48.6638],[-123.22698,48.70302],[-123.24655,48.68353],[-123.17445,48.64702],[-123.21514,48.60107],[-123.21393,48.57336],[-123.1808,48.56575],[-123.16621,48.52006],[-123.10235,48.47684],[-123.02167,48.44667]],[[-122.98339,48.78214],[-122.93498,48.76653],[-122.91181,48.73858],[-122.80229,48.73982],[-122.81946,48.75499],[-122.9343,48.79572],[-122.98374,48.79436],[-122.98339,48.78214]]],best:true,description:"Public domain aerial imagery taken in May, June, and July from San Juan County, WA. Resolution is 6 inch countywide."},{id:"ACT2017",name:"ACTmapi Imagery 2017",type:"wms",template:"https://data.actmapi.act.gov.au/arcgis/rest/services/actmapi/imagery2017mga/ImageServer/exportImage?f=image&format=jpeg&imageSR=3857&bboxSR=3857&bbox={bbox}&size={width},{height}&foo={proj}",projection:"EPSG:3857",endDate:"2017-05-01T00:00:00.000Z",startDate:"2017-05-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[149.085,-35.1171],[149.1509,-35.1157],[149.1509,-35.1335],[149.1736,-35.1335],[149.1739,-35.1512],[149.1957,-35.1512],[149.1962,-35.1689],[149.2177,-35.1683],[149.2192,-35.2048],[149.241,-35.2043],[149.2419,-35.2223],[149.2632,-35.2222],[149.2644,-35.2575],[149.3085,-35.2571],[149.309,-35.2751],[149.3531,-35.2742],[149.3536,-35.2921],[149.3974,-35.2917],[149.3988,-35.3452],[149.3777,-35.3457],[149.3772,-35.3641],[149.3341,-35.3648],[149.3385,-35.5451],[149.1624,-35.5487],[149.1727,-35.9271],[149.0175,-35.9294],[149.0172,-35.9113],[148.9506,-35.9125],[148.9499,-35.8946],[148.9277,-35.8949],[148.9272,-35.8768],[148.9053,-35.8768],[148.9042,-35.8586],[148.8826,-35.859],[148.8805,-35.7695],[148.8361,-35.7698],[148.8359,-35.7521],[148.8138,-35.7524],[148.8131,-35.7343],[148.7909,-35.7347],[148.7911,-35.7167],[148.7688,-35.7167],[148.7617,-35.3924],[148.7839,-35.3921],[148.7822,-35.3022],[148.8041,-35.302],[148.8033,-35.2836],[148.8474,-35.2832],[148.8469,-35.2652],[148.8689,-35.2643],[148.8687,-35.2466],[148.9128,-35.246],[148.9123,-35.2282],[148.9341,-35.228],[148.9329,-35.1919],[148.999,-35.1904],[148.9986,-35.1724],[149.0206,-35.172],[149.0204,-35.154],[149.0637,-35.1532],[149.0635,-35.1355],[149.0857,-35.1348],[149.085,-35.1171]]],terms_url:"https://actmapi-actgov.opendata.arcgis.com/datasets/884456bde6fd46d68e0c05479f55d548",terms_text:"© Jacobs Group (Australia) Pty Ltd and Australian Capital Territory",icon:"http://actmapi.act.gov.au/img/apple-touch-icon.png"},{id:"ACT2018",name:"ACTmapi Imagery 2018",type:"wms",template:"https://data.actmapi.act.gov.au/arcgis/rest/services/actmapi/imagery2018mga/ImageServer/exportImage?f=image&format=jpeg&imageSR=3857&bboxSR=3857&bbox={bbox}&size={width},{height}&foo={proj}",projection:"EPSG:3857",endDate:"2018-03-19T00:00:00.000Z",startDate:"2018-03-19T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[149.2695,-35.4381],[149.2669,-35.348],[149.3329,-35.3468],[149.3334,-35.3648],[149.3774,-35.364],[149.3769,-35.3459],[149.3989,-35.3455],[149.3984,-35.3275],[149.4094,-35.3273],[149.4088,-35.3092],[149.3978,-35.3095],[149.3973,-35.2914],[149.3533,-35.2923],[149.3528,-35.2743],[149.3089,-35.2751],[149.3084,-35.2571],[149.2644,-35.2579],[149.2634,-35.2219],[149.2415,-35.2223],[149.241,-35.2043],[149.219,-35.2047],[149.218,-35.1687],[149.1961,-35.1691],[149.1956,-35.151],[149.1737,-35.1514],[149.1732,-35.1334],[149.1512,-35.1338],[149.1508,-35.1158],[149.085,-35.1169],[149.0854,-35.135],[149.0635,-35.1353],[149.0639,-35.1534],[149.0201,-35.1541],[149.0205,-35.1721],[148.9985,-35.1725],[148.999,-35.1905],[148.9331,-35.1916],[148.934,-35.2276],[148.912,-35.228],[148.9124,-35.246],[148.8685,-35.2467],[148.8689,-35.2647],[148.8469,-35.265],[148.8473,-35.2831],[148.8034,-35.2837],[148.8038,-35.3018],[148.7818,-35.3021],[148.7838,-35.3922],[148.8058,-35.3919],[148.8086,-35.5181],[148.7976,-35.5182],[148.7994,-35.5993],[148.8766,-35.5982],[148.8747,-35.517],[148.8527,-35.5174],[148.8508,-35.4363],[148.8398,-35.4364],[148.8388,-35.3914],[149.0039,-35.3888],[149.0048,-35.4248],[149.0268,-35.4244],[149.0277,-35.4605],[149.0497,-35.4601],[149.0511,-35.5142],[149.1613,-35.5122],[149.1594,-35.4402],[149.2695,-35.4381]]],terms_text:"© Jacobs Group (Australia) Pty Ltd and Australian Capital Territory",icon:"http://actmapi.act.gov.au/img/apple-touch-icon.png"},{id:"ACT2019",name:"ACTmapi Imagery Feb 2019",type:"wms",template:"https://data.actmapi.act.gov.au/arcgis/rest/services/actmapi/imagery2019mga/ImageServer/exportImage?f=image&format=jpeg&imageSR=3857&bboxSR=3857&bbox={bbox}&size={width},{height}&foo={proj}",projection:"EPSG:3857",endDate:"2019-02-01T00:00:00.000Z",startDate:"2019-02-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[149.04053,-35.09056],[149.20498,-35.08747],[149.20618,-35.1237],[149.24944,-35.12314],[149.2515,-35.19499],[149.29596,-35.19429],[149.29716,-35.23861],[149.34111,-35.23847],[149.34196,-35.27435],[149.42986,-35.27253],[149.43226,-35.36288],[149.42127,-35.36316],[149.42179,-35.37239],[149.3224,-35.37435],[149.3224,-35.36498],[149.30042,-35.36512],[149.30094,-35.37435],[149.28995,-35.37449],[149.29201,-35.4376],[149.15932,-35.44039],[149.16121,-35.51197],[149.03984,-35.51448],[149.03984,-35.47829],[148.99504,-35.4794],[148.99315,-35.37995],[149.00396,-35.37981],[149.0007,-35.26272],[148.95641,-35.26286],[148.95435,-35.16399],[148.99864,-35.16342],[148.99796,-35.12721],[149.04156,-35.12665],[149.04053,-35.09056]]],terms_url:"http://actmapi.act.gov.au/terms.html",terms_text:"Aerial Imagery from ACTMapi ©ACT Government",icon:"http://actmapi.act.gov.au/img/apple-touch-icon.png"},{id:"ACT201906",name:"ACTmapi Imagery Jun 2019",type:"wms",template:"https://data.actmapi.act.gov.au/arcgis/rest/services/actmapi/imagery201906mga/ImageServer/exportImage?f=image&format=jpeg&imageSR=3857&bboxSR=3857&bbox={bbox}&size={width},{height}&foo={proj}",projection:"EPSG:3857",endDate:"2019-06-01T00:00:00.000Z",startDate:"2019-06-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[148.97478,-35.10074],[149.22712,-35.09632],[149.22811,-35.13237],[149.24983,-35.13198],[149.25025,-35.14107],[149.27223,-35.14062],[149.27416,-35.21263],[149.31806,-35.21184],[149.31905,-35.248],[149.40694,-35.24632],[149.40805,-35.28227],[149.45191,-35.28129],[149.45509,-35.38044],[149.41089,-35.38135],[149.41166,-35.39927],[149.40042,-35.39955],[149.40093,-35.41752],[149.31287,-35.41934],[149.3139,-35.44634],[149.2697,-35.44718],[149.2709,-35.48325],[149.22678,-35.48402],[149.22772,-35.52007],[149.18378,-35.52084],[149.18464,-35.55709],[149.01855,-35.55974],[149.01701,-35.48807],[148.97324,-35.48863],[148.97203,-35.44333],[148.98319,-35.44333],[148.9807,-35.34419],[148.93676,-35.34461],[148.93187,-35.13753],[148.97581,-35.1369],[148.97478,-35.10074]]],terms_url:"http://actmapi.act.gov.au/terms.html",terms_text:"Aerial Imagery from ACTMapi ©ACT Government and Spookfish Australia Pty Ltd",best:true,icon:"http://actmapi.act.gov.au/img/apple-touch-icon.png"},{id:"AGRI-black_and_white-2.5m",name:"AGRI black-and-white 2.5m",type:"tms",template:"https://{switch:a,b,c}.agri.openstreetmap.org/layer/au_ga_agri/{zoom}/{x}/{y}.png",endDate:"2011-01-01T00:00:00.000Z",startDate:"2006-01-01T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[112.28778,-28.78459],[112.71488,-31.13894],[114.11263,-34.17829],[113.60788,-37.39012],[117.17992,-37.45179],[119.31538,-37.42096],[121.72262,-36.70839],[123.81925,-35.76893],[125.9547,-34.3066],[127.97368,-33.7274],[130.07031,-33.24166],[130.10913,-33.8887],[131.00214,-34.04971],[131.0798,-34.72257],[132.28342,-35.39],[134.18591,-35.61126],[133.8753,-37.1119],[134.8459,-37.6365],[139.7769,-37.82075],[139.93223,-39.4283],[141.6017,-39.8767],[142.3783,-39.36829],[142.3783,-40.64702],[142.49478,-42.07487],[144.009,-44.06013],[147.23161,-44.03222],[149.05645,-42.53431],[149.52237,-40.99959],[149.9494,-40.85292],[150.8036,-38.09627],[151.81313,-38.12682],[156.20052,-22.66771],[156.20052,-20.10109],[156.62761,-17.41763],[155.26869,-17.19521],[154.14272,-19.51662],[153.5215,-18.34139],[153.05558,-16.5636],[152.78379,-15.25677],[152.27905,-13.4135],[151.3472,-12.39177],[149.48354,-12.05024],[146.9598,-9.99241],[135.9719,-9.99241],[130.3032,-10.33636],[128.09016,-12.16414],[125.91588,-12.31591],[124.3239,-11.86033],[122.03323,-11.97429],[118.26706,-16.9353],[115.93747,-19.11357],[114.0738,-21.11863],[113.49141,-22.59603],[112.28778,-28.78459]]],terms_url:"https://data.gov.au/dataset/agri-the-australian-geographic-reference-image",terms_text:"AGRI, Geoscience Australia"},{id:"AIV_DHMV_II_HILL_25cm",name:"AIV Digitaal Hoogtemodel Vlaanderen II, multidirectionale hillshade 0,25 m",type:"wms",template:"https://geoservices.informatievlaanderen.be/raadpleegdiensten/dhmv/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=DHMV_II_HILL_25cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[5.98494,50.70723],[5.98494,50.7672],[5.91079,50.82275],[5.75561,50.83533],[5.75423,50.86264],[5.8332,50.93323],[5.85517,51.02661],[5.90941,51.07754],[5.91216,51.18225],[5.87851,51.20807],[5.77414,51.23689],[5.68419,51.24075],[5.62308,51.26998],[5.62308,51.29789],[5.54,51.34724],[5.4473,51.34853],[5.39855,51.32107],[5.31203,51.32322],[5.26671,51.36182],[5.19942,51.37254],[5.18294,51.39611],[5.15891,51.4924],[5.08338,51.53086],[5.03257,51.53983],[4.95566,51.50522],[4.90142,51.50565],[4.83825,51.54367],[4.77096,51.55862],[4.7119,51.54709],[4.64049,51.49667],[4.6144,51.4971],[4.56565,51.53171],[4.48256,51.53043],[4.42626,51.52189],[4.3006,51.46974],[4.29511,51.42566],[4.18113,51.42437],[4.13718,51.39525],[4.13856,51.35067],[4.05204,51.30047],[3.93325,51.27298],[3.86527,51.27084],[3.86321,51.29016],[3.76296,51.32407],[3.59336,51.35925],[3.47732,51.33137],[3.42582,51.39739],[3.23562,51.35153],[3.226,51.36568],[3.17794,51.36182],[3.16009,51.33223],[3.06258,51.30219],[2.75084,51.1702],[2.47001,51.07452],[2.49267,50.99378],[2.53112,50.95573],[2.50915,50.91159],[2.53043,50.82145],[2.5991,50.76416],[2.66501,50.76459],[2.77007,50.66677],[2.8971,50.65894],[2.99186,50.72549],[3.11339,50.72636],[3.23699,50.70592],[3.36265,50.6585],[3.47114,50.70201],[3.63936,50.66721],[3.69842,50.68156],[3.72794,50.71245],[3.81858,50.68418],[3.87488,50.64152],[4.09255,50.64283],[4.15023,50.66329],[4.20653,50.64413],[4.31365,50.64283],[4.45235,50.68766],[4.53475,50.67808],[4.61303,50.69549],[4.67689,50.69592],[4.72701,50.73201],[4.78057,50.73201],[4.79979,50.71288],[4.86228,50.71288],[4.88563,50.69549],[4.96116,50.69549],[5.03119,50.65763],[5.10741,50.65023],[5.2008,50.64892],[5.23581,50.66546],[5.32508,50.6659],[5.36696,50.682],[5.42121,50.66416],[5.52215,50.6746],[5.6224,50.72418],[5.67527,50.69853],[5.73981,50.69723],[5.77277,50.67199],[5.8126,50.66024],[5.90804,50.65981],[5.98494,50.70723]]],terms_text:"© agentschap Informatie Vlaanderen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"AIV_DHMV_II_SVF_25cm",name:"AIV Digitaal Hoogtemodel Vlaanderen II, Skyview factor 0,25 m",type:"wms",template:"https://geoservices.informatievlaanderen.be/raadpleegdiensten/dhmv/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=DHMV_II_SVF_25cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[5.98494,50.70723],[5.98494,50.7672],[5.91079,50.82275],[5.75561,50.83533],[5.75423,50.86264],[5.8332,50.93323],[5.85517,51.02661],[5.90941,51.07754],[5.91216,51.18225],[5.87851,51.20807],[5.77414,51.23689],[5.68419,51.24075],[5.62308,51.26998],[5.62308,51.29789],[5.54,51.34724],[5.4473,51.34853],[5.39855,51.32107],[5.31203,51.32322],[5.26671,51.36182],[5.19942,51.37254],[5.18294,51.39611],[5.15891,51.4924],[5.08338,51.53086],[5.03257,51.53983],[4.95566,51.50522],[4.90142,51.50565],[4.83825,51.54367],[4.77096,51.55862],[4.7119,51.54709],[4.64049,51.49667],[4.6144,51.4971],[4.56565,51.53171],[4.48256,51.53043],[4.42626,51.52189],[4.3006,51.46974],[4.29511,51.42566],[4.18113,51.42437],[4.13718,51.39525],[4.13856,51.35067],[4.05204,51.30047],[3.93325,51.27298],[3.86527,51.27084],[3.86321,51.29016],[3.76296,51.32407],[3.59336,51.35925],[3.47732,51.33137],[3.42582,51.39739],[3.23562,51.35153],[3.226,51.36568],[3.17794,51.36182],[3.16009,51.33223],[3.06258,51.30219],[2.75084,51.1702],[2.47001,51.07452],[2.49267,50.99378],[2.53112,50.95573],[2.50915,50.91159],[2.53043,50.82145],[2.5991,50.76416],[2.66501,50.76459],[2.77007,50.66677],[2.8971,50.65894],[2.99186,50.72549],[3.11339,50.72636],[3.23699,50.70592],[3.36265,50.6585],[3.47114,50.70201],[3.63936,50.66721],[3.69842,50.68156],[3.72794,50.71245],[3.81858,50.68418],[3.87488,50.64152],[4.09255,50.64283],[4.15023,50.66329],[4.20653,50.64413],[4.31365,50.64283],[4.45235,50.68766],[4.53475,50.67808],[4.61303,50.69549],[4.67689,50.69592],[4.72701,50.73201],[4.78057,50.73201],[4.79979,50.71288],[4.86228,50.71288],[4.88563,50.69549],[4.96116,50.69549],[5.03119,50.65763],[5.10741,50.65023],[5.2008,50.64892],[5.23581,50.66546],[5.32508,50.6659],[5.36696,50.682],[5.42121,50.66416],[5.52215,50.6746],[5.6224,50.72418],[5.67527,50.69853],[5.73981,50.69723],[5.77277,50.67199],[5.8126,50.66024],[5.90804,50.65981],[5.98494,50.70723]]],terms_text:"© agentschap Informatie Vlaanderen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"AGIV10cm",name:"AIV Flanders 2013-2015 aerial imagery 10cm",type:"wms",template:"https://geoservices.informatievlaanderen.be/raadpleegdiensten/OGW/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OGWRGB13_15VL&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[5.98494,50.70723],[5.98494,50.7672],[5.91079,50.82275],[5.75561,50.83533],[5.75423,50.86264],[5.8332,50.93323],[5.85517,51.02661],[5.90941,51.07754],[5.91216,51.18225],[5.87851,51.20807],[5.77414,51.23689],[5.68419,51.24075],[5.62308,51.26998],[5.62308,51.29789],[5.54,51.34724],[5.4473,51.34853],[5.39855,51.32107],[5.31203,51.32322],[5.26671,51.36182],[5.19942,51.37254],[5.18294,51.39611],[5.15891,51.4924],[5.08338,51.53086],[5.03257,51.53983],[4.95566,51.50522],[4.90142,51.50565],[4.83825,51.54367],[4.77096,51.55862],[4.7119,51.54709],[4.64049,51.49667],[4.6144,51.4971],[4.56565,51.53171],[4.48256,51.53043],[4.42626,51.52189],[4.3006,51.46974],[4.29511,51.42566],[4.18113,51.42437],[4.13718,51.39525],[4.13856,51.35067],[4.05204,51.30047],[3.93325,51.27298],[3.86527,51.27084],[3.86321,51.29016],[3.76296,51.32407],[3.59336,51.35925],[3.47732,51.33137],[3.42582,51.39739],[3.23562,51.35153],[3.226,51.36568],[3.17794,51.36182],[3.16009,51.33223],[3.06258,51.30219],[2.75084,51.1702],[2.47001,51.07452],[2.49267,50.99378],[2.53112,50.95573],[2.50915,50.91159],[2.53043,50.82145],[2.5991,50.76416],[2.66501,50.76459],[2.77007,50.66677],[2.8971,50.65894],[2.99186,50.72549],[3.11339,50.72636],[3.23699,50.70592],[3.36265,50.6585],[3.47114,50.70201],[3.63936,50.66721],[3.69842,50.68156],[3.72794,50.71245],[3.81858,50.68418],[3.87488,50.64152],[4.09255,50.64283],[4.15023,50.66329],[4.20653,50.64413],[4.31365,50.64283],[4.45235,50.68766],[4.53475,50.67808],[4.61303,50.69549],[4.67689,50.69592],[4.72701,50.73201],[4.78057,50.73201],[4.79979,50.71288],[4.86228,50.71288],[4.88563,50.69549],[4.96116,50.69549],[5.03119,50.65763],[5.10741,50.65023],[5.2008,50.64892],[5.23581,50.66546],[5.32508,50.6659],[5.36696,50.682],[5.42121,50.66416],[5.52215,50.6746],[5.6224,50.72418],[5.67527,50.69853],[5.73981,50.69723],[5.77277,50.67199],[5.8126,50.66024],[5.90804,50.65981],[5.98494,50.70723]]],terms_text:"© agentschap Informatie Vlaanderen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"AGIVFlandersGRB",name:"AIV Flanders GRB",type:"tms",template:"https://tile.informatievlaanderen.be/ws/raadpleegdiensten/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=grb_bsk&STYLE=&FORMAT=image/png&tileMatrixSet=GoogleMapsVL&tileMatrix={zoom}&tileRow={y}&tileCol={x}",zoomExtent:[0,21],polygon:[[[4.40434,50.78177],[4.45538,50.79328],[4.40268,50.8961],[4.331,50.90094],[4.27142,50.82002],[4.30648,50.81244],[4.36348,50.77251],[4.40434,50.78177],[4.43104,50.73831],[4.31859,50.72022],[4.29031,50.69402],[4.14853,50.72834],[3.95877,50.68947],[3.9097,50.69245],[3.89113,50.74333],[3.77568,50.74789],[3.75857,50.78045],[3.67752,50.77062],[3.64047,50.72242],[3.54139,50.73377],[3.54062,50.76307],[3.46005,50.76556],[3.3522,50.70614],[3.30562,50.75466],[3.17839,50.75609],[3.15329,50.78564],[3.02008,50.77312],[2.99943,50.81035],[2.91648,50.75356],[2.85476,50.75745],[2.86521,50.70565],[2.78473,50.7369],[2.713,50.81534],[2.63518,50.8129],[2.59909,50.85306],[2.59031,50.91893],[2.63262,50.94575],[2.57372,51.00842],[2.54165,51.09345],[3.15582,51.32714],[3.18307,51.37128],[3.23443,51.34669],[3.36356,51.37228],[3.38101,51.27446],[3.44201,51.24313],[3.52759,51.24604],[3.51511,51.28753],[3.58984,51.30577],[3.7783,51.26235],[3.79088,51.21429],[3.92412,51.21938],[4.16613,51.2929],[4.26163,51.37647],[4.42065,51.36473],[4.39108,51.45149],[4.54747,51.48571],[4.53541,51.42303],[4.64953,51.42758],[4.76359,51.5088],[4.84188,51.48074],[4.8383,51.42174],[4.89366,51.41698],[4.92785,51.39544],[5.02894,51.48789],[5.08018,51.46948],[5.10202,51.42892],[5.07117,51.3935],[5.13109,51.35137],[5.13448,51.31547],[5.20031,51.32172],[5.24189,51.30534],[5.23036,51.26436],[5.34828,51.27492],[5.41741,51.26229],[5.4863,51.30197],[5.5556,51.26986],[5.56045,51.22233],[5.76027,51.18505],[5.85578,51.14463],[5.75909,51.03588],[5.72665,50.91307],[5.64522,50.8372],[5.68732,50.804],[5.47863,50.72352],[5.41196,50.72368],[5.38908,50.74775],[5.30912,50.71802],[5.16984,50.72257],[5.16508,50.6957],[5.05642,50.71567],[5.00339,50.76594],[4.92545,50.74275],[4.90869,50.76968],[4.83106,50.77028],[4.76014,50.80544],[4.64309,50.79755],[4.65486,50.7552],[4.62021,50.74348],[4.59727,50.76359],[4.52399,50.72724],[4.49455,50.75679],[4.43104,50.73831],[4.40434,50.78177]],[[5.67393,50.75373],[5.88438,50.70114],[5.94172,50.76524],[5.76662,50.78761],[5.67393,50.75373]],[[4.91171,51.43492],[4.93711,51.42614],[4.95891,51.45471],[4.92801,51.46049],[4.91171,51.43492]]],terms_text:"© agentschap Informatie Vlaanderen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"AGIV",name:"AIV Flanders most recent aerial imagery",type:"tms",template:"https://tile.informatievlaanderen.be/ws/raadpleegdiensten/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=omwrgbmrvl&STYLE=&FORMAT=image/png&tileMatrixSet=GoogleMapsVL&tileMatrix={zoom}&tileRow={y}&tileCol={x}",zoomExtent:[0,21],polygon:[[[4.7737,50.79368],[4.8379,50.75916],[4.92511,50.73483],[4.98862,50.76264],[5.036,50.73527],[5.0645,50.69875],[5.1644,50.69005],[5.19393,50.71179],[5.3086,50.71245],[5.36422,50.74396],[5.43391,50.70766],[5.54378,50.74396],[5.61141,50.73527],[5.71166,50.73505],[5.77105,50.74092],[5.81946,50.70484],[5.89568,50.70614],[5.9204,50.72831],[5.91971,50.74504],[5.89843,50.77675],[5.81569,50.76351],[5.77517,50.79216],[5.69552,50.79737],[5.69072,50.82319],[5.66325,50.82904],[5.65467,50.86481],[5.72368,50.9012],[5.77174,50.95443],[5.75114,50.97368],[5.78273,51.00048],[5.78032,51.0523],[5.80848,51.05338],[5.80951,51.07668],[5.84315,51.09372],[5.84418,51.1101],[5.82599,51.11851],[5.86959,51.14953],[5.8277,51.17365],[5.792,51.16891],[5.7738,51.19344],[5.666,51.1928],[5.64059,51.21065],[5.5709,51.22829],[5.56231,51.27535],[5.49811,51.30605],[5.47099,51.30219],[5.45794,51.2893],[5.43048,51.28823],[5.41434,51.27363],[5.36593,51.282],[5.33641,51.28265],[5.32577,51.26718],[5.24337,51.27406],[5.24989,51.31335],[5.20972,51.32794],[5.14174,51.31914],[5.14209,51.35367],[5.08647,51.39482],[5.11565,51.43615],[5.08853,51.47508],[5.05214,51.47636],[5.04561,51.4939],[5.02364,51.4939],[5.01609,51.48663],[4.82966,51.48663],[4.83001,51.50009],[4.76855,51.51099],[4.74727,51.50394],[4.658,51.4492],[4.65663,51.43144],[4.53956,51.43379],[4.55466,51.48171],[4.5296,51.48748],[4.46368,51.48235],[4.37167,51.45562],[4.37751,51.40553],[4.4139,51.37511],[4.39776,51.36118],[4.34798,51.36675],[4.34627,51.38497],[4.20344,51.38111],[4.2213,51.3511],[4.15641,51.29832],[4.05101,51.25193],[4.00638,51.25279],[3.95144,51.22205],[3.88484,51.22936],[3.81926,51.21797],[3.80038,51.22872],[3.80107,51.26074],[3.74442,51.28007],[3.63593,51.29746],[3.58615,51.31378],[3.5065,51.28308],[3.51371,51.25021],[3.43921,51.25064],[3.39766,51.27513],[3.37329,51.31678],[3.39114,51.34274],[3.3623,51.37961],[3.24283,51.35474],[3.20266,51.37039],[3.15631,51.35196],[3.14223,51.33051],[2.53318,51.09092],[2.56476,50.9968],[2.61832,50.9527],[2.57781,50.91852],[2.5936,50.88431],[2.58948,50.85051],[2.6245,50.80757],[2.71033,50.8054],[2.78449,50.71853],[2.87375,50.69983],[2.86483,50.74765],[2.92525,50.75156],[2.97263,50.77024],[2.97332,50.79889],[3.00078,50.79759],[3.01383,50.76676],[3.09863,50.76611],[3.13537,50.78196],[3.16832,50.75004],[3.30428,50.74613],[3.31561,50.71484],[3.3678,50.70179],[3.44848,50.75091],[3.53293,50.75156],[3.53328,50.72549],[3.63902,50.7131],[3.69086,50.7672],[3.75163,50.76177],[3.7712,50.73874],[3.87729,50.73983],[3.87969,50.70418],[3.9202,50.68352],[3.99951,50.682],[4.06749,50.68961],[4.16018,50.72049],[4.17632,50.70331],[4.24739,50.68222],[4.31708,50.69418],[4.31846,50.70962],[4.38403,50.71027],[4.38437,50.72353],[4.47226,50.74743],[4.52617,50.71853],[4.55226,50.73766],[4.64908,50.73722],[4.6532,50.78717],[4.72426,50.78218],[4.73731,50.79585],[4.7737,50.79368]]],terms_text:"© agentschap Informatie Vlaanderen",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"alagoas_litoral",name:"Alagoas Litoral 2006",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Ortofotos%202006&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-35.52384,-9.48089],[-35.5236,-9.44515],[-35.51572,-9.44518],[-35.51584,-9.44229],[-35.50542,-9.44238],[-35.50518,-9.43064],[-35.49334,-9.43073],[-35.49304,-9.3982],[-35.4893,-9.39817],[-35.48921,-9.38628],[-35.4854,-9.38634],[-35.48525,-9.37809],[-35.48127,-9.37812],[-35.48114,-9.36987],[-35.47698,-9.36996],[-35.47686,-9.36385],[-35.47459,-9.36388],[-35.47447,-9.36153],[-35.47212,-9.36141],[-35.47206,-9.35917],[-35.46976,-9.3592],[-35.46967,-9.35682],[-35.46653,-9.35676],[-35.46641,-9.35289],[-35.46387,-9.35277],[-35.46387,-9.35119],[-35.44135,-9.35131],[-35.44125,-9.34541],[-35.43177,-9.34538],[-35.43171,-9.33602],[-35.39463,-9.33632],[-35.39442,-9.30125],[-35.38165,-9.30143],[-35.38147,-9.28638],[-35.37799,-9.28626],[-35.37796,-9.2811],[-35.36942,-9.28122],[-35.36921,-9.27261],[-35.35966,-9.27276],[-35.35969,-9.26465],[-35.35051,-9.26474],[-35.35036,-9.25562],[-35.34115,-9.25565],[-35.34118,-9.24501],[-35.31775,-9.24519],[-35.3176,-9.22567],[-35.30292,-9.22579],[-35.30283,-9.2113],[-35.30794,-9.21136],[-35.30785,-9.19979],[-35.29103,-9.19988],[-35.29091,-9.1966],[-35.29018,-9.19669],[-35.28997,-9.16516],[-35.27759,-9.16522],[-35.2775,-9.16417],[-35.27541,-9.1642],[-35.27535,-9.16152],[-35.27375,-9.16149],[-35.27366,-9.15839],[-35.27182,-9.15842],[-35.27185,-9.15729],[-35.27149,-9.15729],[-35.27143,-9.15469],[-35.26965,-9.15463],[-35.26959,-9.15362],[-35.26919,-9.15362],[-35.26907,-9.13159],[-35.26403,-9.13165],[-35.264,-9.12318],[-35.26056,-9.12321],[-35.26053,-9.11781],[-35.256,-9.11784],[-35.25573,-9.08946],[-35.25114,-9.08955],[-35.25108,-9.08651],[-35.25026,-9.08648],[-35.25029,-9.08475],[-35.24449,-9.08478],[-35.24449,-9.07989],[-35.24093,-9.07997],[-35.24081,-9.07312],[-35.23734,-9.07312],[-35.23719,-9.06322],[-35.23655,-9.06322],[-35.23652,-9.04655],[-35.23323,-9.04652],[-35.23332,-9.04345],[-35.2306,-9.04348],[-35.2306,-9.04014],[-35.22897,-9.04008],[-35.229,-9.03835],[-35.22505,-9.03826],[-35.22502,-9.03167],[-35.2223,-9.03161],[-35.22233,-9.02012],[-35.21834,-9.02009],[-35.21831,-9.01341],[-35.21671,-9.01341],[-35.21668,-9.00998],[-35.21176,-9.00998],[-35.21173,-9.00647],[-35.20971,-9.00653],[-35.20974,-9.00438],[-35.20765,-9.00432],[-35.20768,-9.00226],[-35.20566,-9.00226],[-35.20563,-8.99987],[-35.20391,-8.99987],[-35.20394,-8.99785],[-35.20213,-8.99791],[-35.20213,-8.99579],[-35.19844,-8.99582],[-35.19844,-8.99361],[-35.19434,-8.99361],[-35.19428,-8.99122],[-35.19065,-8.99131],[-35.19062,-8.98833],[-35.18766,-8.98842],[-35.18763,-8.98544],[-35.18473,-8.98541],[-35.18467,-8.98255],[-35.18238,-8.98252],[-35.18235,-8.98052],[-35.17951,-8.98061],[-35.17948,-8.97742],[-35.17809,-8.97745],[-35.17803,-8.97306],[-35.17558,-8.97303],[-35.17549,-8.96912],[-35.17293,-8.96909],[-35.17284,-8.96292],[-35.17063,-8.96289],[-35.17048,-8.95579],[-35.16852,-8.95564],[-35.16852,-8.94806],[-35.16794,-8.948],[-35.16791,-8.93995],[-35.16245,-8.93995],[-35.16242,-8.92978],[-35.1587,-8.92981],[-35.15873,-8.92662],[-35.15547,-8.92668],[-35.1555,-8.92378],[-35.15348,-8.92381],[-35.15339,-8.92065],[-35.15131,-8.92062],[-35.15122,-8.91194],[-35.15263,-8.91194],[-35.15263,-8.90821],[-35.15439,-8.90824],[-35.1543,-8.90215],[-35.15593,-8.90212],[-35.15593,-8.90051],[-35.15768,-8.90048],[-35.15774,-8.89905],[-35.15958,-8.89908],[-35.15955,-8.89747],[-35.16139,-8.8975],[-35.16133,-8.89625],[-35.16363,-8.89625],[-35.1636,-8.89526],[-35.16553,-8.89526],[-35.1655,-8.89315],[-35.16794,-8.89315],[-35.16791,-8.89147],[-35.17024,-8.89153],[-35.17027,-8.8904],[-35.17302,-8.89043],[-35.17302,-8.88876],[-35.17791,-8.88876],[-35.17794,-8.88795],[-35.17894,-8.88792],[-35.17894,-8.88891],[-35.17966,-8.88894],[-35.17978,-8.88858],[-35.18099,-8.88861],[-35.18099,-8.88816],[-35.18519,-8.88816],[-35.18519,-8.88897],[-35.18591,-8.889],[-35.18591,-8.88971],[-35.18932,-8.88971],[-35.18947,-8.8893],[-35.19014,-8.88927],[-35.19017,-8.88831],[-35.19071,-8.88831],[-35.19077,-8.88789],[-35.19153,-8.88792],[-35.19156,-8.88619],[-35.19754,-8.88607],[-35.19757,-8.8873],[-35.19968,-8.8873],[-35.19974,-8.88777],[-35.2008,-8.88777],[-35.2008,-8.88822],[-35.2033,-8.88822],[-35.20337,-8.8887],[-35.20563,-8.88861],[-35.20557,-8.88983],[-35.20741,-8.8898],[-35.20744,-8.89022],[-35.21125,-8.89025],[-35.21128,-8.88769],[-35.21245,-8.88777],[-35.21248,-8.88861],[-35.21623,-8.88858],[-35.21623,-8.88748],[-35.21871,-8.88745],[-35.21871,-8.88897],[-35.22136,-8.88897],[-35.22263,-8.88792],[-35.22402,-8.88748],[-35.22453,-8.88763],[-35.22644,-8.88718],[-35.22707,-8.88598],[-35.23311,-8.88446],[-35.23933,-8.88339],[-35.24129,-8.88416],[-35.25011,-8.88515],[-35.25624,-8.88506],[-35.26168,-8.88294],[-35.26161,-8.88094],[-35.26406,-8.88109],[-35.26877,-8.8793],[-35.27421,-8.87748],[-35.2781,-8.87518],[-35.28499,-8.87507],[-35.28502,-8.87581],[-35.2881,-8.87578],[-35.29405,-8.87545],[-35.30782,-8.87208],[-35.31757,-8.86961],[-35.32784,-8.86716],[-35.33206,-8.86614],[-35.34103,-8.86376],[-35.3471,-8.86244],[-35.3522,-8.86113],[-35.35257,-8.86391],[-35.34903,-8.86611],[-35.34496,-8.87205],[-35.34327,-8.87489],[-35.34318,-8.87569],[-35.34381,-8.87668],[-35.34481,-8.8768],[-35.34888,-8.87721],[-35.35042,-8.87781],[-35.35254,-8.87891],[-35.35399,-8.88011],[-35.35577,-8.88252],[-35.35755,-8.88396],[-35.36036,-8.88512],[-35.36114,-8.88509],[-35.3612,-8.88587],[-35.36175,-8.8859],[-35.36178,-8.88777],[-35.36253,-8.88783],[-35.36247,-8.891],[-35.36311,-8.89112],[-35.36311,-8.89482],[-35.3644,-8.89488],[-35.36507,-8.8967],[-35.36637,-8.90022],[-35.36754,-8.90427],[-35.36794,-8.90782],[-35.36863,-8.90917],[-35.37207,-8.91155],[-35.3741,-8.91349],[-35.37277,-8.916],[-35.37262,-8.91817],[-35.37084,-8.92229],[-35.37062,-8.92486],[-35.37235,-8.93038],[-35.37153,-8.93193],[-35.37153,-8.93363],[-35.37171,-8.93387],[-35.37171,-8.94362],[-35.36818,-8.94377],[-35.36815,-8.94505],[-35.36927,-8.94511],[-35.36921,-8.94863],[-35.37078,-8.94872],[-35.37081,-8.95182],[-35.37219,-8.95176],[-35.37222,-8.95528],[-35.37319,-8.95531],[-35.37313,-8.95737],[-35.3744,-8.95737],[-35.37446,-8.96012],[-35.37567,-8.96018],[-35.3757,-8.96205],[-35.37688,-8.96208],[-35.37694,-8.96444],[-35.37781,-8.96444],[-35.37775,-8.96617],[-35.38074,-8.96617],[-35.38074,-8.96331],[-35.38288,-8.96328],[-35.38291,-8.95982],[-35.38542,-8.95985],[-35.38542,-8.95722],[-35.38723,-8.95722],[-35.3872,-8.95406],[-35.38947,-8.95409],[-35.38947,-8.95084],[-35.39158,-8.95087],[-35.39158,-8.94792],[-35.39587,-8.94792],[-35.39581,-8.94651],[-35.3972,-8.94654],[-35.39711,-8.94472],[-35.39838,-8.94469],[-35.39838,-8.93915],[-35.40107,-8.93915],[-35.40106,-8.93895],[-35.40167,-8.93894],[-35.40173,-8.93688],[-35.40236,-8.93688],[-35.40236,-8.93628],[-35.40324,-8.9364],[-35.4033,-8.93583],[-35.40426,-8.9358],[-35.4042,-8.93363],[-35.40574,-8.9336],[-35.40577,-8.93124],[-35.4081,-8.93133],[-35.40804,-8.92927],[-35.40937,-8.9293],[-35.40928,-8.92739],[-35.41085,-8.92742],[-35.41085,-8.92542],[-35.41239,-8.92545],[-35.41236,-8.9239],[-35.41335,-8.92387],[-35.41329,-8.92193],[-35.41523,-8.92196],[-35.41523,-8.91999],[-35.41655,-8.92002],[-35.41655,-8.91755],[-35.4196,-8.91755],[-35.41966,-8.91964],[-35.42184,-8.91964],[-35.42187,-8.92265],[-35.42389,-8.92268],[-35.42392,-8.92513],[-35.42537,-8.92513],[-35.42537,-8.92766],[-35.42724,-8.92766],[-35.42727,-8.92987],[-35.42815,-8.92984],[-35.42818,-8.9316],[-35.42987,-8.93154],[-35.4299,-8.93407],[-35.43141,-8.93407],[-35.43141,-8.9356],[-35.43226,-8.93557],[-35.43229,-8.93586],[-35.4334,-8.93583],[-35.4334,-8.94001],[-35.43434,-8.94004],[-35.43434,-8.94097],[-35.43531,-8.94097],[-35.43534,-8.94261],[-35.43567,-8.94264],[-35.4357,-8.94329],[-35.43627,-8.94332],[-35.43624,-8.94422],[-35.4373,-8.94422],[-35.43727,-8.9452],[-35.43823,-8.9452],[-35.43827,-8.94684],[-35.43902,-8.94687],[-35.43902,-8.94798],[-35.44026,-8.94798],[-35.44032,-8.94953],[-35.44159,-8.94956],[-35.44165,-8.95152],[-35.44273,-8.95152],[-35.44273,-8.95334],[-35.44436,-8.95334],[-35.44436,-8.95498],[-35.44569,-8.95501],[-35.44563,-8.95674],[-35.4472,-8.9568],[-35.44717,-8.95865],[-35.44895,-8.95871],[-35.44892,-8.96],[-35.45101,-8.95994],[-35.45098,-8.96101],[-35.45469,-8.96095],[-35.45466,-8.96235],[-35.46049,-8.96235],[-35.46055,-8.96557],[-35.46653,-8.96548],[-35.46659,-8.96885],[-35.46771,-8.96883],[-35.46774,-8.97053],[-35.4739,-8.97053],[-35.47399,-8.9753],[-35.47791,-8.97521],[-35.47797,-8.97816],[-35.4841,-8.97813],[-35.48416,-8.98201],[-35.49084,-8.98195],[-35.49084,-8.98562],[-35.49721,-8.98562],[-35.49721,-8.99069],[-35.50225,-8.99057],[-35.50234,-8.99567],[-35.50648,-8.99567],[-35.50651,-8.99856],[-35.51204,-8.9985],[-35.51207,-9.00163],[-35.51663,-9.00166],[-35.51666,-9.00617],[-35.52119,-9.00614],[-35.52122,-9.00739],[-35.53127,-9.00733],[-35.53127,-9.01064],[-35.54818,-9.01049],[-35.54818,-9.01359],[-35.56968,-9.01344],[-35.56974,-9.01738],[-35.58575,-9.01732],[-35.58578,-9.01995],[-35.60957,-9.01983],[-35.60954,-9.02302],[-35.62911,-9.02287],[-35.62905,-9.02508],[-35.65221,-9.0249],[-35.65224,-9.02758],[-35.67552,-9.0274],[-35.67555,-9.03056],[-35.68295,-9.03056],[-35.68298,-9.03435],[-35.69128,-9.03432],[-35.69128,-9.03766],[-35.6995,-9.0376],[-35.6995,-9.04034],[-35.70668,-9.04031],[-35.70671,-9.04518],[-35.71115,-9.04518],[-35.71133,-9.06691],[-35.70871,-9.06691],[-35.70877,-9.07869],[-35.70656,-9.07872],[-35.70656,-9.08653],[-35.7043,-9.08653],[-35.70433,-9.09104],[-35.69992,-9.09107],[-35.69989,-9.0956],[-35.69536,-9.09557],[-35.69542,-9.10001],[-35.69092,-9.10013],[-35.69101,-9.10207],[-35.63367,-9.10246],[-35.6337,-9.10541],[-35.62585,-9.10553],[-35.62591,-9.10964],[-35.62231,-9.10964],[-35.62234,-9.11203],[-35.6199,-9.112],[-35.6199,-9.11501],[-35.61473,-9.11507],[-35.61473,-9.11707],[-35.61177,-9.11701],[-35.61181,-9.1182],[-35.6096,-9.11826],[-35.60963,-9.12571],[-35.59976,-9.12583],[-35.59979,-9.12923],[-35.59634,-9.12926],[-35.5964,-9.13502],[-35.59197,-9.13507],[-35.59209,-9.149],[-35.59018,-9.14897],[-35.59015,-9.15108],[-35.6016,-9.15105],[-35.60154,-9.14912],[-35.60552,-9.14912],[-35.60549,-9.14557],[-35.61184,-9.14554],[-35.61184,-9.14235],[-35.6176,-9.14238],[-35.61757,-9.13853],[-35.624,-9.13853],[-35.62397,-9.13466],[-35.63177,-9.13466],[-35.63164,-9.13063],[-35.63922,-9.1306],[-35.63919,-9.12878],[-35.66386,-9.12869],[-35.6638,-9.1261],[-35.71278,-9.12577],[-35.71275,-9.12407],[-35.72426,-9.12401],[-35.71964,-9.15323],[-35.72112,-9.1532],[-35.72124,-9.17258],[-35.72066,-9.17255],[-35.72082,-9.18558],[-35.71212,-9.18566],[-35.7133,-9.34416],[-35.69041,-9.34433],[-35.69065,-9.37189],[-35.68899,-9.37189],[-35.68902,-9.37598],[-35.68757,-9.37598],[-35.68766,-9.38232],[-35.68497,-9.38235],[-35.68503,-9.39093],[-35.68168,-9.39099],[-35.68177,-9.39936],[-35.67715,-9.39933],[-35.67724,-9.4089],[-35.67292,-9.40893],[-35.67301,-9.41754],[-35.66972,-9.4176],[-35.66978,-9.42498],[-35.66722,-9.42498],[-35.66728,-9.4327],[-35.66075,-9.43288],[-35.66075,-9.43705],[-35.6513,-9.43708],[-35.65142,-9.44211],[-35.64514,-9.44217],[-35.64523,-9.44652],[-35.63645,-9.44661],[-35.63645,-9.44992],[-35.62711,-9.45],[-35.62727,-9.46505],[-35.62086,-9.46511],[-35.62092,-9.4722],[-35.60939,-9.47222],[-35.60939,-9.47529],[-35.59674,-9.47535],[-35.59674,-9.47351],[-35.57844,-9.47371],[-35.57847,-9.47595],[-35.57267,-9.47604],[-35.5727,-9.48042],[-35.56823,-9.48048],[-35.56826,-9.48881],[-35.54169,-9.48893],[-35.54163,-9.48071],[-35.52384,-9.48089]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"arapiraca_al",name:"Arapiraca AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Arapiraca&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.60875,-9.83072],[-36.60784,-9.74047],[-36.61718,-9.74051],[-36.61631,-9.65075],[-36.70737,-9.64977],[-36.70832,-9.74043],[-36.69898,-9.74047],[-36.69997,-9.82968],[-36.60875,-9.83072]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"CRAIG-Auvergne-2013",name:"Auvergne 2013 25cm CRAIG",type:"tms",template:"https://tiles.craig.fr/osm/wmts/1.0.0/ortho_2013/webmercator/{zoom}/{x}/{y}.jpeg",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[2.94012,44.63388],[2.99719,44.63393],[2.99717,44.64734],[3.01597,44.64735],[3.01593,44.67412],[3.03495,44.67413],[3.0349,44.70152],[3.05363,44.70154],[3.05357,44.7419],[3.07233,44.74191],[3.07222,44.80917],[3.09216,44.80919],[3.09214,44.82213],[3.13014,44.82216],[3.13005,44.87707],[3.14856,44.87709],[3.14858,44.8637],[3.16823,44.86371],[3.16825,44.85003],[3.2064,44.85006],[3.20638,44.86284],[3.24395,44.86287],[3.24393,44.87679],[3.26315,44.87681],[3.26308,44.91752],[3.32004,44.91757],[3.32002,44.93033],[3.33908,44.93035],[3.33906,44.9442],[3.377,44.94423],[3.37702,44.93029],[3.39603,44.9303],[3.39612,44.87627],[3.41483,44.87629],[3.41489,44.83553],[3.43334,44.83554],[3.43338,44.80828],[3.45255,44.80829],[3.45258,44.79463],[3.50893,44.79468],[3.5089,44.80815],[3.60426,44.80823],[3.60422,44.83482],[3.62361,44.83484],[3.62357,44.86166],[3.64248,44.86167],[3.64255,44.8211],[3.66101,44.82112],[3.66103,44.80777],[3.6993,44.8078],[3.69928,44.82099],[3.73611,44.82102],[3.73618,44.77971],[3.77511,44.77974],[3.77515,44.75223],[3.81184,44.75226],[3.81186,44.7392],[3.83118,44.73922],[3.83121,44.72468],[3.88782,44.72472],[3.8878,44.73818],[3.92563,44.73821],[3.9256,44.75167],[3.94541,44.75168],[3.94537,44.77847],[3.96437,44.77848],[3.96435,44.79193],[4.00332,44.79196],[4.0033,44.80526],[4.02169,44.80527],[4.02167,44.81857],[4.05965,44.8186],[4.05961,44.84492],[4.07981,44.84494],[4.07979,44.85735],[4.17388,44.85743],[4.17386,44.87055],[4.19326,44.87056],[4.19323,44.88427],[4.21404,44.88429],[4.214,44.91002],[4.23241,44.91004],[4.23237,44.93731],[4.27155,44.93734],[4.27153,44.9503],[4.32887,44.95034],[4.32878,45.00367],[4.34893,45.00368],[4.3489,45.01707],[4.40608,45.01711],[4.40599,45.071],[4.38847,45.07099],[4.38845,45.0846],[4.40794,45.08461],[4.40792,45.09663],[4.48436,45.09669],[4.48429,45.13705],[4.46636,45.13703],[4.46634,45.1502],[4.48645,45.15022],[4.4864,45.17724],[4.50655,45.17726],[4.50644,45.24501],[4.48813,45.24499],[4.48811,45.25921],[4.46986,45.25919],[4.46984,45.27298],[4.45088,45.27297],[4.45086,45.28642],[4.39368,45.28637],[4.39363,45.31352],[4.37509,45.3135],[4.37507,45.32741],[4.39507,45.32742],[4.39503,45.35458],[4.37679,45.35457],[4.37676,45.36855],[4.35766,45.36853],[4.35763,45.38234],[4.28146,45.38227],[4.28143,45.39688],[4.24446,45.39685],[4.24443,45.41079],[4.14812,45.41071],[4.14814,45.39807],[4.12919,45.39805],[4.12921,45.38409],[4.09021,45.38406],[4.09024,45.37121],[4.01355,45.37115],[4.01353,45.3861],[3.91709,45.38602],[3.91707,45.39974],[3.93757,45.39975],[3.93755,45.41311],[3.97528,45.41315],[3.97526,45.42621],[3.99537,45.42622],[3.9957,45.52096],[3.97778,45.52094],[3.97769,45.57439],[3.95818,45.57437],[3.95815,45.58837],[3.9396,45.58835],[3.93958,45.60262],[3.92023,45.60261],[3.9202,45.61646],[3.88189,45.61643],[3.88185,45.64328],[3.84413,45.64325],[3.84411,45.65709],[3.82617,45.65707],[3.82612,45.68389],[3.80722,45.68387],[3.80713,45.73758],[3.78821,45.73756],[3.78819,45.7518],[3.76885,45.75178],[3.7688,45.77897],[3.75072,45.77895],[3.75058,45.86066],[3.76967,45.86067],[3.76958,45.91433],[3.75166,45.91432],[3.75164,45.92809],[3.7329,45.92807],[3.73285,45.95472],[3.81018,45.95478],[3.81016,45.96823],[3.8496,45.96826],[3.84951,46.02162],[3.83188,46.0216],[3.83179,46.07591],[3.8505,46.07592],[3.85046,46.10295],[3.83247,46.10294],[3.83234,46.18456],[3.81422,46.18455],[3.81415,46.22442],[3.83369,46.22444],[3.83366,46.2381],[3.85289,46.23812],[3.85287,46.25147],[3.89314,46.25151],[3.89312,46.26447],[3.91306,46.26448],[3.91303,46.27793],[3.95189,46.27796],[3.95187,46.29082],[3.97152,46.29084],[3.9715,46.30369],[4.0105,46.30373],[4.01048,46.31776],[4.02983,46.31778],[4.02978,46.34428],[4.0116,46.34427],[4.01146,46.42534],[4.03153,46.42536],[4.03146,46.4658],[4.01324,46.46578],[4.01322,46.47938],[3.99437,46.47936],[3.99435,46.49361],[3.9746,46.4936],[3.97457,46.50753],[3.87754,46.50745],[3.8775,46.53478],[3.85836,46.53476],[3.85833,46.54832],[3.81869,46.54828],[3.81871,46.53553],[3.79924,46.53552],[3.79922,46.54907],[3.76104,46.54904],[3.76092,46.61681],[3.74233,46.61679],[3.74228,46.64396],[3.72286,46.64395],[3.72281,46.67104],[3.70387,46.67102],[3.70385,46.68467],[3.68411,46.68466],[3.68406,46.712],[3.66484,46.71198],[3.66479,46.73904],[3.64576,46.73902],[3.64572,46.76634],[3.62575,46.76632],[3.62573,46.77971],[3.56723,46.77966],[3.56725,46.76631],[3.54715,46.76629],[3.54719,46.73928],[3.52716,46.73927],[3.52723,46.6989],[3.48774,46.69887],[3.48776,46.68594],[3.46796,46.68593],[3.46794,46.69941],[3.46792,46.71279],[3.44865,46.71278],[3.44863,46.72679],[3.35043,46.72671],[3.35048,46.6999],[3.33039,46.69988],[3.33034,46.7272],[3.23272,46.72712],[3.23274,46.71351],[3.2129,46.7135],[3.21293,46.70013],[3.17354,46.7001],[3.1735,46.72751],[3.15412,46.72749],[3.1541,46.74073],[3.11478,46.7407],[3.11475,46.75428],[3.07534,46.75424],[3.0753,46.78135],[3.05597,46.78134],[3.05592,46.80831],[2.99704,46.80826],[2.99702,46.82196],[2.93794,46.82191],[2.93797,46.80826],[2.89866,46.80823],[2.89869,46.79424],[2.87899,46.79422],[2.87901,46.78104],[2.85942,46.78103],[2.85944,46.76771],[2.84004,46.76769],[2.84007,46.75447],[2.7414,46.75439],[2.74138,46.76682],[2.70234,46.76679],[2.70236,46.75389],[2.68266,46.75387],[2.68268,46.74048],[2.66349,46.74046],[2.66351,46.7259],[2.64342,46.72588],[2.64344,46.71309],[2.62414,46.71308],[2.62417,46.69981],[2.60397,46.69979],[2.60399,46.68584],[2.56512,46.68581],[2.56515,46.67261],[2.54593,46.6726],[2.546,46.63215],[2.56592,46.63217],[2.56595,46.61811],[2.54564,46.61809],[2.54569,46.59072],[2.56642,46.59074],[2.56644,46.57754],[2.5855,46.57756],[2.58552,46.56472],[2.56613,46.5647],[2.56616,46.55062],[2.46828,46.55055],[2.4683,46.53582],[2.33212,46.53571],[2.33217,46.50886],[2.31265,46.50884],[2.31267,46.49534],[2.29288,46.49533],[2.2929,46.48182],[2.27487,46.4818],[2.27492,46.45442],[2.25539,46.4544],[2.25553,46.37349],[2.27595,46.37351],[2.27604,46.32087],[2.31456,46.32091],[2.31458,46.30704],[2.35371,46.30707],[2.35373,46.29297],[2.39384,46.293],[2.39389,46.26729],[2.45157,46.26733],[2.4516,46.25349],[2.47094,46.25351],[2.47098,46.22656],[2.49151,46.22657],[2.49155,46.19933],[2.51088,46.19934],[2.51093,46.17278],[2.53117,46.1728],[2.53138,46.05135],[2.55163,46.05137],[2.55166,46.03777],[2.57056,46.03778],[2.57068,45.96994],[2.55144,45.96993],[2.55146,45.95662],[2.53226,45.9566],[2.53228,45.94301],[2.51307,45.94299],[2.51313,45.90203],[2.47494,45.902],[2.47496,45.88882],[2.43619,45.88879],[2.43622,45.87533],[2.41721,45.87531],[2.41725,45.84794],[2.37847,45.84791],[2.3785,45.83397],[2.35952,45.83396],[2.35956,45.80708],[2.37873,45.8071],[2.37875,45.79358],[2.3987,45.79359],[2.39872,45.78035],[2.41825,45.78036],[2.41832,45.74],[2.45722,45.74003],[2.45724,45.7267],[2.47589,45.72671],[2.47591,45.71324],[2.49533,45.71325],[2.49542,45.65913],[2.45769,45.6591],[2.45776,45.61834],[2.43912,45.61833],[2.43919,45.57766],[2.4585,45.57768],[2.45855,45.55053],[2.47809,45.55055],[2.47811,45.53725],[2.49755,45.53726],[2.49759,45.51068],[2.47855,45.51066],[2.47864,45.45613],[2.45978,45.45612],[2.45987,45.40176],[2.42249,45.40173],[2.42247,45.41528],[2.40232,45.41527],[2.40229,45.42882],[2.3256,45.42876],[2.32567,45.38796],[2.34562,45.38798],[2.34566,45.36111],[2.32626,45.36109],[2.32628,45.34721],[2.30738,45.3472],[2.3074,45.3336],[2.28811,45.33358],[2.28813,45.32082],[2.26963,45.3208],[2.26966,45.30621],[2.25066,45.3062],[2.25068,45.29251],[2.23169,45.2925],[2.23171,45.27924],[2.213,45.27922],[2.21305,45.25204],[2.19374,45.25202],[2.19376,45.23811],[2.17561,45.2381],[2.17574,45.15768],[2.15735,45.15767],[2.15744,45.10295],[2.12024,45.10292],[2.12026,45.08955],[2.10067,45.08953],[2.10069,45.07544],[2.08246,45.07543],[2.08255,45.0216],[2.10255,45.02161],[2.1026,44.99445],[2.04574,44.99441],[2.04585,44.92753],[2.06578,44.92755],[2.06589,44.85969],[2.0857,44.8597],[2.08572,44.84581],[2.10556,44.84583],[2.1056,44.81933],[2.12474,44.81934],[2.12477,44.80551],[2.14351,44.80553],[2.14355,44.7786],[2.12561,44.77858],[2.1257,44.72427],[2.10665,44.72426],[2.10671,44.68423],[2.12634,44.68424],[2.12636,44.67074],[2.14598,44.67075],[2.14607,44.61644],[2.18396,44.61648],[2.18398,44.60378],[2.24042,44.60383],[2.24037,44.63095],[2.25948,44.63097],[2.25946,44.64493],[2.31668,44.64498],[2.3167,44.63088],[2.33615,44.6309],[2.33617,44.61758],[2.37242,44.61761],[2.3724,44.63158],[2.41105,44.63161],[2.41107,44.61907],[2.44922,44.61911],[2.4492,44.63232],[2.50486,44.63237],[2.50481,44.65976],[2.52461,44.65977],[2.52457,44.68717],[2.54225,44.68719],[2.54223,44.70122],[2.58071,44.70125],[2.5806,44.76834],[2.61769,44.76837],[2.61762,44.80884],[2.63676,44.80885],[2.63669,44.84929],[2.67331,44.84933],[2.67329,44.86252],[2.69338,44.86253],[2.69333,44.88943],[2.73052,44.88946],[2.73048,44.91645],[2.74992,44.91646],[2.75005,44.83647],[2.80733,44.83652],[2.80731,44.8491],[2.82638,44.84912],[2.8264,44.83628],[2.8457,44.8363],[2.84577,44.79571],[2.86422,44.79573],[2.86426,44.76865],[2.88399,44.76866],[2.88403,44.74197],[2.90203,44.74198],[2.90214,44.67432],[2.92198,44.67434],[2.92202,44.6473],[2.9401,44.64731],[2.94012,44.63388]]],terms_url:"http://ids.craig.fr/geocat/srv/fre/catalog.search?node=srv#/metadata/8cabc987-829c-4c9f-943b-6a0e255cd73",terms_text:"Orthophotographie CRAIG/Sintegra/IGN 2013"},{id:"CRAIG-Auvergne-2016",name:"Auvergne 2016 25cm CRAIG",type:"tms",template:"https://tiles.craig.fr/ortho/wmts/1.0.0/ortho_2016/webmercator/{zoom}/{x}/{y}.jpeg",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[2.49389,46.66829],[2.71362,46.84141],[3.64746,46.80758],[4.04846,46.48327],[4.03747,46.24825],[4.46044,46.25965],[4.4934,46.14559],[4.38354,46.09229],[4.45495,45.69084],[4.76257,45.57176],[4.81201,45.34443],[4.22424,44.84419],[3.86169,44.696],[3.37829,44.80523],[3.33435,44.89091],[3.18054,44.82471],[3.03222,44.60612],[2.92785,44.60221],[2.71911,44.85198],[2.51037,44.60221],[2.12585,44.58265],[2.005,44.97257],[2.30712,45.46784],[2.43347,45.44087],[2.41149,45.72919],[2.34558,45.82402],[2.54882,45.97979],[2.46093,46.22166],[2.21374,46.33935],[2.27828,46.53903],[2.54882,46.56642],[2.49389,46.66829]]],terms_url:"http://ids.craig.fr/geocat/srv/fre/catalog.search?node=srv#/metadata/e37c057b-5884-429b-8bec-5db0baef0ee",terms_text:"CRAIG - IGN -TopoGEODIS - Feder Auvergne-Rhône-Alpes 2016"},{id:"BANO",name:"BANO",type:"tms",template:"https://{switch:a,b,c}.layers.openstreetmap.fr/bano/{zoom}/{x}/{y}.png",zoomExtent:[12,20],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]]],terms_url:"https://wiki.openstreetmap.org/wiki/FR:WikiProject_France/WikiProject_Base_Adresses_Nationale_Ouverte_(BANO)#Licence_du_r.C3.A9sultat",terms_text:"Tiles © cquest@Openstreetmap France, data © OpenStreetMap contributors, ODBL",description:"French address registry or Base Adresses Nationale Ouverte",overlay:true},{id:"lu.geoportail.opendata.basemap",name:"Basemap geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/basemap/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png",endDate:"2010-07-20T00:00:00.000Z",startDate:"2013-07-19T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/carte-de-base-webservices-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"basemap.at",name:"basemap.at",type:"tms",template:"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/geolandbasemap/normal/google3857/{zoom}/{y}/{x}.png",zoomExtent:[0,19],polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"https://basemap.at",terms_text:"basemap.at",description:"Basemap of Austria, based on government data.",icon:"https://www.basemap.at/images/logo_basemap.jpg"},{id:"basemap.at-orthofoto",name:"basemap.at Orthofoto",type:"tms",template:"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/bmaporthofoto30cm/normal/google3857/{zoom}/{y}/{x}.jpeg",zoomExtent:[0,19],polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"https://basemap.at",terms_text:"basemap.at",best:true,description:"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery.",icon:"https://www.basemap.at/images/logo_basemap.jpg"},{id:"basemap.at-overlay",name:"basemap.at Overlay",type:"tms",template:"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/bmapoverlay/normal/google3857/{zoom}/{y}/{x}.png",zoomExtent:[0,19],polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"https://basemap.at",terms_text:"basemap.at",description:"Annotation overlay provided by basemap.at.",icon:"https://www.basemap.at/images/logo_basemap.jpg",overlay:true},{id:"basemap.at-surface",name:"basemap.at Surface",type:"tms",template:"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/bmapoberflaeche/grau/google3857/{zoom}/{y}/{x}.jpeg",zoomExtent:[0,19],polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"https://basemap.at",terms_text:"basemap.at",description:"Surface layer provided by basemap.at.",icon:"https://www.basemap.at/images/logo_basemap.jpg"},{id:"basemap.at-terrain",name:"basemap.at Terrain",type:"tms",template:"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/bmapgelaende/grau/google3857/{zoom}/{y}/{x}.jpeg",zoomExtent:[0,19],polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"https://basemap.at",terms_text:"basemap.at",description:"Terrain layer provided by basemap.at.",icon:"https://www.basemap.at/images/logo_basemap.jpg"},{id:"bavaria-80cm",name:"Bavaria (80 cm)",type:"wms",template:"https://geoservices.bayern.de/wms/v2/ogc_dop80_oa.cgi?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=by_dop80c&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[7,18],polygon:[[[10.12359,50.56846],[10.14286,50.55078],[10.20281,50.55742],[10.25205,50.51796],[10.32698,50.49345],[10.41048,50.41848],[10.60317,50.33109],[10.62244,50.2271],[10.72521,50.21066],[10.72949,50.24765],[10.85153,50.24354],[10.71879,50.32015],[10.71236,50.36524],[10.85581,50.39664],[10.93717,50.39664],[10.99069,50.36661],[11.12772,50.36661],[11.1791,50.31332],[11.16197,50.29417],[11.24119,50.2928],[11.24975,50.37344],[11.24119,50.47982],[11.35895,50.5234],[11.43816,50.50979],[11.44244,50.48936],[11.42532,50.4771],[11.42532,50.44166],[11.48955,50.42257],[11.49169,50.39801],[11.51952,50.39801],[11.52594,50.37617],[11.59874,50.40347],[11.63727,50.38845],[11.79357,50.4212],[11.83639,50.39255],[11.92203,50.42802],[11.98626,50.38709],[11.98412,50.35705],[12.04835,50.33109],[12.09331,50.32972],[12.1297,50.29828],[12.14041,50.27228],[12.10615,50.25586],[12.11258,50.23532],[12.14897,50.23669],[12.19822,50.20107],[12.22391,50.16406],[12.20464,50.14348],[12.20678,50.10779],[12.24318,50.09955],[12.27743,50.07208],[12.49367,49.98543],[12.49796,49.94136],[12.55576,49.92206],[12.54934,49.86827],[12.48083,49.78817],[12.41018,49.75775],[12.46156,49.70655],[12.5472,49.68023],[12.58788,49.55261],[12.65425,49.53455],[12.66281,49.43302],[12.75274,49.41073],[12.7977,49.34661],[12.90475,49.35638],[12.99681,49.33685],[13.05462,49.27543],[13.13169,49.21952],[13.19164,49.14395],[13.2366,49.12153],[13.29655,49.12293],[13.37148,49.08088],[13.4143,49.02897],[13.4143,48.97981],[13.57916,48.96997],[13.63483,48.94326],[13.67765,48.88698],[13.73759,48.89261],[13.7847,48.83346],[13.84036,48.77423],[13.81681,48.70646],[13.84464,48.70081],[13.8425,48.60038],[13.76543,48.5423],[13.75258,48.50401],[13.67122,48.50543],[13.64339,48.54371],[13.45712,48.5508],[13.45712,48.41598],[13.40574,48.36053],[13.2837,48.27511],[13.09315,48.26941],[12.95827,48.19097],[12.87691,48.18526],[12.772,48.09382],[12.86407,48.01368],[12.89832,47.95492],[12.94543,47.95636],[12.99681,47.88461],[13.01394,47.83434],[12.93472,47.7322],[13.0589,47.72499],[13.11885,47.63851],[13.06532,47.56922],[13.05676,47.47379],[13.00323,47.45208],[12.76772,47.55044],[12.76986,47.63274],[12.73989,47.67312],[12.6671,47.67024],[12.57503,47.6212],[12.48083,47.61975],[12.41446,47.67024],[12.24318,47.67745],[12.2132,47.69186],[12.19179,47.68177],[12.2132,47.66591],[12.21106,47.60388],[12.17467,47.59521],[12.13827,47.60388],[11.89205,47.60388],[11.85137,47.57933],[11.63942,47.58222],[11.59445,47.54899],[11.59017,47.51285],[11.51738,47.49839],[11.4403,47.50417],[11.39534,47.47524],[11.42746,47.44484],[11.3461,47.44339],[11.27973,47.39559],[11.21336,47.38834],[11.24761,47.43181],[11.10203,47.39269],[10.965,47.38979],[10.97785,47.43615],[10.9179,47.47524],[10.8708,47.47524],[10.85581,47.49405],[10.90077,47.5143],[10.87294,47.53598],[10.81085,47.51285],[10.64385,47.54899],[10.59461,47.55477],[10.57962,47.52876],[10.46187,47.54032],[10.46615,47.48392],[10.48756,47.47813],[10.48756,47.41298],[10.45973,47.40283],[10.45973,47.37529],[10.41048,47.37384],[10.40834,47.34339],[10.32056,47.28678],[10.28202,47.27806],[10.28416,47.26208],[10.14714,47.26208],[10.1921,47.30275],[10.19424,47.37384],[10.16641,47.37384],[10.16641,47.34629],[10.10004,47.34339],[10.0615,47.36369],[10.06792,47.41877],[10.09361,47.42601],[10.09576,47.44194],[9.978,47.48537],[9.95659,47.52731],[9.8945,47.52876],[9.85596,47.50851],[9.81743,47.54465],[9.82171,47.57644],[9.77461,47.58222],[9.73821,47.52586],[9.67398,47.53454],[9.58406,47.56488],[9.63972,47.60532],[9.7168,47.60388],[9.85596,47.676],[9.978,47.65582],[10.02938,47.68177],[10.10004,47.66735],[10.13215,47.676],[10.14286,47.70195],[10.0615,47.7725],[10.11288,47.8099],[10.08291,47.85302],[10.1086,47.90902],[10.07649,47.96496],[10.13001,48.02084],[10.13429,48.10669],[10.10004,48.12813],[10.05508,48.26228],[9.96944,48.36765],[10.03153,48.42593],[10.02938,48.46144],[10.12359,48.47705],[10.15356,48.4515],[10.23492,48.51252],[10.31628,48.51678],[10.29915,48.61878],[10.24563,48.6683],[10.27346,48.70646],[10.3698,48.68385],[10.43189,48.69939],[10.45116,48.72765],[10.40192,48.746],[10.44046,48.84896],[10.43403,48.95873],[10.33769,49.02055],[10.24991,49.03599],[10.24991,49.07387],[10.20066,49.10331],[10.25205,49.13274],[10.12359,49.19714],[10.11931,49.26285],[10.15142,49.28939],[10.10432,49.34522],[10.14072,49.39401],[10.1086,49.44555],[10.11074,49.50537],[10.0722,49.53316],[10.01654,49.47616],[9.92662,49.47894],[9.92448,49.55678],[9.89878,49.58177],[9.85596,49.53872],[9.80672,49.55678],[9.86667,49.60675],[9.85382,49.6442],[9.81743,49.66083],[9.83455,49.68993],[9.79602,49.72039],[9.75748,49.70793],[9.74035,49.68577],[9.70609,49.71624],[9.67826,49.71624],[9.68254,49.68854],[9.62045,49.69131],[9.64615,49.78955],[9.55836,49.77434],[9.57121,49.73561],[9.50698,49.75222],[9.49199,49.77987],[9.46844,49.76051],[9.42562,49.77849],[9.40421,49.76466],[9.33356,49.7702],[9.32928,49.73423],[9.4085,49.72593],[9.42776,49.69824],[9.41492,49.6442],[9.38066,49.63865],[9.35925,49.64974],[9.33998,49.63727],[9.31215,49.64836],[9.27789,49.62617],[9.28432,49.60814],[9.2415,49.57483],[9.09805,49.57205],[9.06594,49.60814],[9.10019,49.65113],[9.09163,49.6927],[9.13017,49.71208],[9.13873,49.74253],[9.10876,49.75637],[9.13659,49.79093],[9.10019,49.78955],[9.07236,49.82824],[9.03596,49.83514],[9.01669,50.02671],[8.96317,50.03084],[8.95674,50.05971],[9.00171,50.0707],[9.02097,50.11054],[9.1216,50.12289],[9.15586,50.11328],[9.19654,50.11878],[9.18583,50.13525],[9.23507,50.1476],[9.37638,50.12701],[9.4085,50.0817],[9.52197,50.09543],[9.50484,50.14211],[9.53267,50.16406],[9.48985,50.16954],[9.49413,50.24354],[9.61403,50.22163],[9.66541,50.23532],[9.63544,50.24901],[9.66756,50.27228],[9.74249,50.30922],[9.72964,50.35841],[9.77032,50.42939],[9.86881,50.40074],[9.91805,50.40893],[10.03581,50.47982],[10.03795,50.51115],[10.12359,50.56846]]],terms_url:"https://www.ldbv.bayern.de/",terms_text:"Bayerische Vermessungsverwaltung",best:true},{id:"bavaria-DOP80",name:"Bavaria DOP 80cm",type:"tms",template:"https://mapproxy.osm.ch/tiles/BAYERNDOP80/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",zoomExtent:[7,18],polygon:[[[10.12359,50.56846],[10.14286,50.55078],[10.20281,50.55742],[10.25205,50.51796],[10.32698,50.49345],[10.41048,50.41848],[10.60317,50.33109],[10.62244,50.2271],[10.72521,50.21066],[10.72949,50.24765],[10.85153,50.24354],[10.71879,50.32015],[10.71236,50.36524],[10.85581,50.39664],[10.93717,50.39664],[10.99069,50.36661],[11.12772,50.36661],[11.1791,50.31332],[11.16197,50.29417],[11.24119,50.2928],[11.24975,50.37344],[11.24119,50.47982],[11.35895,50.5234],[11.43816,50.50979],[11.44244,50.48936],[11.42532,50.4771],[11.42532,50.44166],[11.48955,50.42257],[11.49169,50.39801],[11.51952,50.39801],[11.52594,50.37617],[11.59874,50.40347],[11.63727,50.38845],[11.79357,50.4212],[11.83639,50.39255],[11.92203,50.42802],[11.98626,50.38709],[11.98412,50.35705],[12.04835,50.33109],[12.09331,50.32972],[12.1297,50.29828],[12.14041,50.27228],[12.10615,50.25586],[12.11258,50.23532],[12.14897,50.23669],[12.19822,50.20107],[12.22391,50.16406],[12.20464,50.14348],[12.20678,50.10779],[12.24318,50.09955],[12.27743,50.07208],[12.49367,49.98543],[12.49796,49.94136],[12.55576,49.92206],[12.54934,49.86827],[12.48083,49.78817],[12.41018,49.75775],[12.46156,49.70655],[12.5472,49.68023],[12.58788,49.55261],[12.65425,49.53455],[12.66281,49.43302],[12.75274,49.41073],[12.7977,49.34661],[12.90475,49.35638],[12.99681,49.33685],[13.05462,49.27543],[13.13169,49.21952],[13.19164,49.14395],[13.2366,49.12153],[13.29655,49.12293],[13.37148,49.08088],[13.4143,49.02897],[13.4143,48.97981],[13.57916,48.96997],[13.63483,48.94326],[13.67765,48.88698],[13.73759,48.89261],[13.7847,48.83346],[13.84036,48.77423],[13.81681,48.70646],[13.84464,48.70081],[13.8425,48.60038],[13.76543,48.5423],[13.75258,48.50401],[13.67122,48.50543],[13.64339,48.54371],[13.45712,48.5508],[13.45712,48.41598],[13.40574,48.36053],[13.2837,48.27511],[13.09315,48.26941],[12.95827,48.19097],[12.87691,48.18526],[12.772,48.09382],[12.86407,48.01368],[12.89832,47.95492],[12.94543,47.95636],[12.99681,47.88461],[13.01394,47.83434],[12.93472,47.7322],[13.0589,47.72499],[13.11885,47.63851],[13.06532,47.56922],[13.05676,47.47379],[13.00323,47.45208],[12.76772,47.55044],[12.76986,47.63274],[12.73989,47.67312],[12.6671,47.67024],[12.57503,47.6212],[12.48083,47.61975],[12.41446,47.67024],[12.24318,47.67745],[12.2132,47.69186],[12.19179,47.68177],[12.2132,47.66591],[12.21106,47.60388],[12.17467,47.59521],[12.13827,47.60388],[11.89205,47.60388],[11.85137,47.57933],[11.63942,47.58222],[11.59445,47.54899],[11.59017,47.51285],[11.51738,47.49839],[11.4403,47.50417],[11.39534,47.47524],[11.42746,47.44484],[11.3461,47.44339],[11.27973,47.39559],[11.21336,47.38834],[11.24761,47.43181],[11.10203,47.39269],[10.965,47.38979],[10.97785,47.43615],[10.9179,47.47524],[10.8708,47.47524],[10.85581,47.49405],[10.90077,47.5143],[10.87294,47.53598],[10.81085,47.51285],[10.64385,47.54899],[10.59461,47.55477],[10.57962,47.52876],[10.46187,47.54032],[10.46615,47.48392],[10.48756,47.47813],[10.48756,47.41298],[10.45973,47.40283],[10.45973,47.37529],[10.41048,47.37384],[10.40834,47.34339],[10.32056,47.28678],[10.28202,47.27806],[10.28416,47.26208],[10.14714,47.26208],[10.1921,47.30275],[10.19424,47.37384],[10.16641,47.37384],[10.16641,47.34629],[10.10004,47.34339],[10.0615,47.36369],[10.06792,47.41877],[10.09361,47.42601],[10.09576,47.44194],[9.978,47.48537],[9.95659,47.52731],[9.8945,47.52876],[9.85596,47.50851],[9.81743,47.54465],[9.82171,47.57644],[9.77461,47.58222],[9.73821,47.52586],[9.67398,47.53454],[9.58406,47.56488],[9.63972,47.60532],[9.7168,47.60388],[9.85596,47.676],[9.978,47.65582],[10.02938,47.68177],[10.10004,47.66735],[10.13215,47.676],[10.14286,47.70195],[10.0615,47.7725],[10.11288,47.8099],[10.08291,47.85302],[10.1086,47.90902],[10.07649,47.96496],[10.13001,48.02084],[10.13429,48.10669],[10.10004,48.12813],[10.05508,48.26228],[9.96944,48.36765],[10.03153,48.42593],[10.02938,48.46144],[10.12359,48.47705],[10.15356,48.4515],[10.23492,48.51252],[10.31628,48.51678],[10.29915,48.61878],[10.24563,48.6683],[10.27346,48.70646],[10.3698,48.68385],[10.43189,48.69939],[10.45116,48.72765],[10.40192,48.746],[10.44046,48.84896],[10.43403,48.95873],[10.33769,49.02055],[10.24991,49.03599],[10.24991,49.07387],[10.20066,49.10331],[10.25205,49.13274],[10.12359,49.19714],[10.11931,49.26285],[10.15142,49.28939],[10.10432,49.34522],[10.14072,49.39401],[10.1086,49.44555],[10.11074,49.50537],[10.0722,49.53316],[10.01654,49.47616],[9.92662,49.47894],[9.92448,49.55678],[9.89878,49.58177],[9.85596,49.53872],[9.80672,49.55678],[9.86667,49.60675],[9.85382,49.6442],[9.81743,49.66083],[9.83455,49.68993],[9.79602,49.72039],[9.75748,49.70793],[9.74035,49.68577],[9.70609,49.71624],[9.67826,49.71624],[9.68254,49.68854],[9.62045,49.69131],[9.64615,49.78955],[9.55836,49.77434],[9.57121,49.73561],[9.50698,49.75222],[9.49199,49.77987],[9.46844,49.76051],[9.42562,49.77849],[9.40421,49.76466],[9.33356,49.7702],[9.32928,49.73423],[9.4085,49.72593],[9.42776,49.69824],[9.41492,49.6442],[9.38066,49.63865],[9.35925,49.64974],[9.33998,49.63727],[9.31215,49.64836],[9.27789,49.62617],[9.28432,49.60814],[9.2415,49.57483],[9.09805,49.57205],[9.06594,49.60814],[9.10019,49.65113],[9.09163,49.6927],[9.13017,49.71208],[9.13873,49.74253],[9.10876,49.75637],[9.13659,49.79093],[9.10019,49.78955],[9.07236,49.82824],[9.03596,49.83514],[9.01669,50.02671],[8.96317,50.03084],[8.95674,50.05971],[9.00171,50.0707],[9.02097,50.11054],[9.1216,50.12289],[9.15586,50.11328],[9.19654,50.11878],[9.18583,50.13525],[9.23507,50.1476],[9.37638,50.12701],[9.4085,50.0817],[9.52197,50.09543],[9.50484,50.14211],[9.53267,50.16406],[9.48985,50.16954],[9.49413,50.24354],[9.61403,50.22163],[9.66541,50.23532],[9.63544,50.24901],[9.66756,50.27228],[9.74249,50.30922],[9.72964,50.35841],[9.77032,50.42939],[9.86881,50.40074],[9.91805,50.40893],[10.03581,50.47982],[10.03795,50.51115],[10.12359,50.56846]]],terms_url:"https://www.ldbv.bayern.de/",terms_text:"Bayerische Vermessungsverwaltung",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"route500hydro",name:"BD Carthage",type:"tms",template:"https://{switch:a,b,c}.tile.openstreetmap.fr/route500hydro/{zoom}/{x}/{y}.png",zoomExtent:[6,20],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]]],terms_url:"http://www.sandre.eaufrance.fr/actualite/la-bd-carthage-en-licence-ouverte-open-licence",terms_text:"Tiles © cquest@Openstreetmap France, data © Onema - IGN, LO/OL",description:"Réseau hydrographique: cours et plans d'eau et POI",overlay:true},{id:"fr.ign.bdortho",name:"BDOrtho IGN",type:"tms",template:"https://proxy-ign.openstreetmap.fr/94GjiyqD/bdortho/{zoom}/{x}/{y}.jpg",zoomExtent:[2,21],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]],[[-61.27501,14.90218],[-60.72368,14.90101],[-60.72489,14.36686],[-61.27622,14.36803],[-61.27501,14.90218]],[[-61.92802,16.58618],[-61.92686,15.7394],[-60.88128,15.74072],[-60.88243,16.5875],[-61.92802,16.58618]],[[-53.89344,6.004],[-52.46522,5.4465],[-51.52039,4.51072],[-51.53687,4.11633],[-52.2345,3.10213],[-52.641,2.25162],[-52.92664,2.07597],[-53.72864,2.21869],[-54.20106,2.03205],[-54.8053,2.27358],[-54.31092,2.80589],[-54.31641,3.20085],[-54.12415,3.46408],[-54.12964,3.59567],[-54.42078,4.00127],[-54.58008,4.95962],[-53.89344,6.004]],[[55.08816,-20.77935],[55.95959,-20.77281],[55.96576,-21.49],[55.09434,-21.49651],[55.08816,-20.77935]],[[44.92054,-12.57363],[45.34826,-12.57029],[45.35274,-13.1163],[44.92502,-13.11963],[44.92054,-12.57363]],[[-178.57728,-14.70582],[-178.42568,-14.00334],[-176.34156,-12.83858],[-175.71534,-12.9189],[-175.91858,-13.58726],[-177.84638,-14.64983],[-178.57728,-14.70582]]],terms_url:"https://openstreetmap.fr/bdortho",terms_text:"BDOrtho IGN",best:true,icon:"http://www.ign.fr/institut/sites/all/themes/ign_institut/logo.png"},{id:"Benin_cotonou_pleiade_2016",name:"Benin: Cotonou Pleiade 2016",type:"tms",template:"https://geoxxx.agrocampus-ouest.fr/owsifl/gwc/service/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=Benin:cotonou_pleiade_2016&STYLE=&FORMAT=image/jpeg&tileMatrixSet=EPSG:3857&tileMatrix=EPSG:3857:{zoom}&tileRow={y}&tileCol={x}",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[2.31954,6.55745],[2.33645,6.56024],[2.36377,6.56211],[2.36738,6.56068],[2.37777,6.5494],[2.37779,6.53485],[2.36994,6.49332],[2.37038,6.45527],[2.36958,6.45269],[2.36188,6.44177],[2.35392,6.40545],[2.36749,6.4015],[2.39526,6.40072],[2.40128,6.40374],[2.40588,6.40341],[2.42046,6.39383],[2.42485,6.39794],[2.42949,6.39887],[2.43625,6.39628],[2.43958,6.40042],[2.44439,6.40189],[2.45376,6.39899],[2.47145,6.39632],[2.48162,6.39106],[2.49453,6.3874],[2.50893,6.38888],[2.50719,6.39229],[2.5012,6.39162],[2.4963,6.39521],[2.4951,6.40123],[2.49543,6.40401],[2.4983,6.41022],[2.50191,6.41282],[2.51087,6.41321],[2.52219,6.40849],[2.53352,6.40517],[2.5381,6.40961],[2.54111,6.4109],[2.54651,6.41099],[2.54654,6.40651],[2.57639,6.40724],[2.57642,6.41177],[2.58576,6.41196],[2.58868,6.41095],[2.60877,6.39414],[2.6257,6.39488],[2.64555,6.39729],[2.65039,6.39339],[2.65367,6.36823],[2.64312,6.36659],[2.61251,6.36289],[2.56868,6.3607],[2.54683,6.36055],[2.54687,6.35546],[2.50207,6.35461],[2.47064,6.35596],[2.46777,6.35203],[2.46423,6.3502],[2.45254,6.35006],[2.45113,6.34813],[2.44737,6.34629],[2.43757,6.34654],[2.43298,6.33841],[2.43016,6.33707],[2.42245,6.33707],[2.39236,6.34115],[2.39315,6.34115],[2.36528,6.34445],[2.35386,6.3453],[2.34377,6.34458],[2.34094,6.34534],[2.31086,6.36567],[2.28435,6.37465],[2.28147,6.37762],[2.27599,6.39517],[2.27612,6.3982],[2.31529,6.49261],[2.3158,6.55307],[2.31954,6.55745]],[[1.69563,6.25076],[1.7001,6.24712],[1.70418,6.24697],[1.75875,6.25836],[1.77079,6.25995],[1.81712,6.27161],[1.84457,6.27657],[1.85768,6.27945],[1.88843,6.28326],[1.90482,6.28595],[1.90618,6.29435],[1.90083,6.29721],[1.89881,6.29954],[1.89404,6.30085],[1.89048,6.2997],[1.88748,6.29636],[1.88344,6.29622],[1.8697,6.29227],[1.8564,6.29198],[1.85207,6.28675],[1.84991,6.28906],[1.84691,6.29203],[1.84353,6.29333],[1.84041,6.29315],[1.83627,6.29129],[1.8341,6.28733],[1.83417,6.2852],[1.8323,6.28456],[1.82786,6.28644],[1.82182,6.29084],[1.81563,6.28998],[1.81211,6.29143],[1.80758,6.29571],[1.80472,6.29693],[1.80074,6.2971],[1.79776,6.29612],[1.79625,6.29492],[1.7949,6.28965],[1.79641,6.28608],[1.80098,6.28338],[1.79567,6.28013],[1.79156,6.28174],[1.78499,6.28122],[1.78092,6.27753],[1.77588,6.2755],[1.76745,6.27696],[1.75653,6.27496],[1.74833,6.27239],[1.74762,6.27726],[1.74572,6.27938],[1.73948,6.27985],[1.7368,6.27761],[1.73572,6.27892],[1.72902,6.27911],[1.72435,6.27422],[1.72449,6.26786],[1.72556,6.26683],[1.69934,6.26159],[1.69573,6.25726],[1.69563,6.25076]]],best:true},{id:"Berlin-2011",name:"Berlin aerial photography 2011",type:"wms",template:"https://fbinter.stadt-berlin.de/fb/wms/senstadt/k_luftbild2011_20?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[13.48699,52.68076],[13.52584,52.65196],[13.5299,52.64437],[13.54209,52.60921],[13.58109,52.58134],[13.59674,52.55936],[13.63477,52.55121],[13.66547,52.52854],[13.67199,52.50379],[13.65806,52.50372],[13.65796,52.49324],[13.7547,52.4565],[13.76644,52.43884],[13.76627,52.42973],[13.74494,52.39909],[13.65235,52.33133],[13.6417,52.33103],[13.62609,52.35491],[13.59432,52.37455],[13.53198,52.38376],[13.51948,52.39236],[13.48536,52.39227],[13.43552,52.38016],[13.42885,52.37401],[13.38689,52.37388],[13.38642,52.38667],[13.36857,52.38728],[13.37045,52.39349],[13.33968,52.40887],[13.31243,52.39775],[13.30557,52.40452],[13.23622,52.40342],[13.18886,52.40417],[13.17719,52.39067],[13.14859,52.38971],[13.14868,52.38421],[13.11889,52.38385],[13.11935,52.40025],[13.10487,52.40723],[13.07371,52.40668],[13.07367,52.41403],[13.10516,52.47897],[13.11685,52.47881],[13.112,52.55915],[13.11865,52.59156],[13.15251,52.60489],[13.16282,52.60462],[13.21264,52.6321],[13.22139,52.63215],[13.27292,52.66444],[13.31376,52.66442],[13.32714,52.64692],[13.36783,52.6468],[13.39158,52.65382],[13.42728,52.6549],[13.47594,52.68122],[13.48699,52.68076]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2011"},{id:"Berlin-2014",name:"Berlin aerial photography 2014",type:"tms",template:"https://tiles.codefor.de/berlin-2014/{zoom}/{x}/{y}.png",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",polygon:[[[13.19746,52.64206],[13.25639,52.64285],[13.2558,52.66101],[13.31391,52.66185],[13.31476,52.64353],[13.37431,52.64462],[13.37386,52.66269],[13.4026,52.663],[13.40332,52.64501],[13.4334,52.64555],[13.43227,52.68001],[13.49082,52.68111],[13.49147,52.66428],[13.52092,52.66457],[13.5216,52.6465],[13.55096,52.6469],[13.55147,52.62938],[13.52219,52.62898],[13.52335,52.59248],[13.58263,52.59329],[13.58307,52.57535],[13.61246,52.57582],[13.61324,52.55784],[13.64268,52.55813],[13.64296,52.5401],[13.67253,52.54048],[13.67375,52.50475],[13.64413,52.5045],[13.64476,52.48608],[13.7037,52.48683],[13.70415,52.46901],[13.73362,52.4692],[13.73399,52.45121],[13.76358,52.45156],[13.76447,52.40209],[13.73546,52.39753],[13.73611,52.37963],[13.70678,52.37935],[13.70731,52.36136],[13.67785,52.36104],[13.67898,52.33017],[13.62102,52.32946],[13.61999,52.36033],[13.59046,52.36007],[13.5901,52.37806],[13.53116,52.37735],[13.53064,52.39525],[13.47168,52.39459],[13.47149,52.4125],[13.44101,52.41219],[13.44257,52.37604],[13.35487,52.37498],[13.35427,52.39306],[13.23667,52.39114],[13.23609,52.40922],[13.17635,52.40836],[13.17752,52.39029],[13.14791,52.38987],[13.14876,52.37459],[13.11971,52.37422],[13.11941,52.38955],[13.08981,52.38899],[13.08938,52.40707],[13.0618,52.40662],[13.06075,52.42408],[13.08842,52.42449],[13.086,52.47853],[13.11546,52.47896],[13.11462,52.49695],[13.1441,52.49729],[13.14332,52.5157],[13.1137,52.51528],[13.11077,52.6047],[13.19862,52.6062],[13.19746,52.64206]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2014"},{id:"Berlin-2015",name:"Berlin aerial photography 2015",type:"tms",template:"https://tiles.codefor.de/berlin-2015/{zoom}/{x}/{y}.png",endDate:"2015-08-03T00:00:00.000Z",startDate:"2015-08-02T00:00:00.000Z",polygon:[[[13.11068,52.59538],[13.13975,52.60527],[13.18355,52.61488],[13.21262,52.63315],[13.24167,52.64282],[13.256,52.65201],[13.27004,52.67021],[13.31368,52.67072],[13.32914,52.66204],[13.32948,52.6529],[13.43284,52.65414],[13.44733,52.6816],[13.50561,52.68244],[13.50654,52.65531],[13.53605,52.65572],[13.5376,52.61991],[13.52229,52.61977],[13.52304,52.60165],[13.59776,52.58469],[13.59865,52.55769],[13.62817,52.55805],[13.64303,52.5492],[13.65813,52.54042],[13.67312,52.53144],[13.67356,52.51358],[13.65913,52.51344],[13.65998,52.48643],[13.68931,52.48687],[13.73386,52.46933],[13.73405,52.46034],[13.76362,52.46068],[13.76431,52.42464],[13.74941,52.42474],[13.75045,52.39778],[13.73585,52.39762],[13.70661,52.37944],[13.707,52.3614],[13.67782,52.36125],[13.66405,52.33395],[13.62073,52.33337],[13.62031,52.36042],[13.58986,52.3781],[13.53149,52.37748],[13.53133,52.38641],[13.44223,52.38484],[13.42813,52.3667],[13.38464,52.3662],[13.35432,52.39301],[13.29537,52.39209],[13.29531,52.40103],[13.19171,52.39957],[13.19222,52.39056],[13.14774,52.38996],[13.14839,52.38095],[13.11964,52.38041],[13.0744,52.40683],[13.07392,52.42426],[13.10275,52.43374],[13.10123,52.47874],[13.11558,52.47897],[13.11068,52.59538]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2015"},{id:"Berlin-2016",name:"Berlin aerial photography 2016",type:"tms",template:"https://tiles.codefor.de/berlin-2016/{zoom}/{x}/{y}.png",endDate:"2016-04-03T00:00:00.000Z",startDate:"2016-04-02T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2016"},{id:"Berlin-2016-infrared",name:"Berlin aerial photography 2016 (infrared)",type:"tms",template:"https://tiles.codefor.de/berlin-2016i/{zoom}/{x}/{y}.png",endDate:"2016-04-03T00:00:00.000Z",startDate:"2016-04-02T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale Color-Infrarot-Orthophotos 2016"},{id:"Berlin-2017",name:"Berlin aerial photography 2017",type:"tms",template:"https://tiles.codefor.de/berlin-2017/{zoom}/{x}/{y}.png",endDate:"2017-03-28T00:00:00.000Z",startDate:"2017-03-27T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2017"},{id:"Berlin-2018",name:"Berlin aerial photography 2018",type:"tms",template:"https://tiles.codefor.de/berlin-2018/{zoom}/{x}/{y}.png",endDate:"2018-04-07T00:00:00.000Z",startDate:"2018-03-19T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2018"},{id:"Berlin-2019",name:"Berlin aerial photography 2019",type:"tms",template:"https://tiles.codefor.de/berlin-2019/{zoom}/{x}/{y}.png",endDate:"2019-04-06T00:00:00.000Z",startDate:"2019-04-01T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2019 (DOP20RGB)",best:true},{id:"Bing",name:"Bing aerial imagery",type:"bing",template:"https://www.bing.com/maps",zoomExtent:[1,22],"default":true,description:"Satellite and aerial imagery.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/Bing.png"},{id:"Bologna-Orthophoto-2017",name:"Bologna ortofoto 2017",type:"tms",template:"https://sitmappe.comune.bologna.it/tms/tileserver/Ortofoto2017/{zoom}/{x}/{y}.png",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[11.22962,44.53077],[11.23184,44.52461],[11.24123,44.52167],[11.23251,44.50893],[11.23572,44.50323],[11.25009,44.50116],[11.24765,44.49644],[11.25708,44.49765],[11.25653,44.49294],[11.29461,44.48981],[11.29676,44.4857],[11.28807,44.47586],[11.29226,44.4609],[11.28447,44.45459],[11.28228,44.42572],[11.29347,44.4276],[11.29254,44.43377],[11.31339,44.42103],[11.32504,44.42274],[11.33695,44.42772],[11.33765,44.43167],[11.3315,44.43273],[11.33453,44.43867],[11.34466,44.43594],[11.34498,44.44093],[11.36235,44.45099],[11.37312,44.44935],[11.37498,44.45897],[11.39499,44.46368],[11.4011,44.46122],[11.39464,44.46803],[11.41577,44.48376],[11.42559,44.4845],[11.42717,44.48921],[11.41727,44.4906],[11.43363,44.51312],[11.42692,44.51532],[11.43034,44.5196],[11.42466,44.51959],[11.41987,44.52934],[11.4143,44.52564],[11.40739,44.52851],[11.41487,44.53999],[11.38871,44.54145],[11.39082,44.54553],[11.36474,44.55253],[11.36414,44.55609],[11.3573,44.5519],[11.34375,44.55333],[11.33589,44.54299],[11.33145,44.54734],[11.31349,44.54722],[11.30929,44.5295],[11.29104,44.53581],[11.28179,44.54851],[11.26911,44.53248],[11.25118,44.55578],[11.24499,44.55569],[11.22962,44.53077]]],terms_url:"http://dati.comune.bologna.it/node/3449",terms_text:"© Comune di Bologna cc-by 4.0 ODbL compliant",best:true},{id:"Bonvillars-2013",name:"Bonvillars Orthophoto 2013",type:"tms",template:"https://osmdata.asitvd.ch/tiles/bonvillars2013/{zoom}/{x}/{y}.png",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[6.66713,46.83358],[6.66313,46.83833],[6.67213,46.84191],[6.6749,46.84226],[6.67843,46.83807],[6.66713,46.83358]]],terms_url:"https://osmdata.asitvd.ch/",terms_text:"Bonvillars - Orthophoto technique 2013"},{id:"Bordeaux_2012",name:"Bordeaux - 2012",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/bordeaux_2012/{zoom}/{x}/{y}",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-0.59923,45.04193],[-0.54231,45.02757],[-0.50979,45.00601],[-0.47727,45.00206],[-0.47066,44.97367],[-0.45542,44.95102],[-0.46456,44.91792],[-0.4732,44.91936],[-0.48794,44.90928],[-0.4981,44.89057],[-0.48946,44.87797],[-0.4666,44.87076],[-0.47625,44.84735],[-0.49505,44.83978],[-0.49099,44.83186],[-0.46965,44.82537],[-0.49709,44.80446],[-0.52453,44.80013],[-0.5103,44.76767],[-0.53469,44.76515],[-0.56213,44.75107],[-0.5601,44.74169],[-0.5728,44.74133],[-0.59465,44.7601],[-0.63429,44.73989],[-0.65004,44.77705],[-0.67901,44.77489],[-0.68816,44.77922],[-0.71509,44.76839],[-0.75168,44.7471],[-0.76336,44.75577],[-0.73846,44.77561],[-0.74202,44.78571],[-0.72779,44.81239],[-0.73999,44.82861],[-0.76438,44.82933],[-0.803,44.82176],[-0.8401,44.82753],[-0.83908,44.84014],[-0.87567,44.85023],[-0.88532,44.85852],[-0.88685,44.88769],[-0.86601,44.88697],[-0.84569,44.89669],[-0.83349,44.92764],[-0.81825,44.92764],[-0.80198,44.92224],[-0.79843,44.9485],[-0.78725,44.94814],[-0.75574,44.97007],[-0.72169,44.95785],[-0.69578,44.93087],[-0.68866,44.93447],[-0.67139,44.93267],[-0.66935,44.94095],[-0.62514,44.95066],[-0.63226,44.95893],[-0.63124,44.9672],[-0.60024,44.96756],[-0.55146,44.97834],[-0.54079,44.97726],[-0.55451,44.99739],[-0.59364,45.01751],[-0.60787,45.03403],[-0.59923,45.04193]]],terms_text:"Communauté urbaine de Bordeaux - 2012"},{id:"Bordeaux_2016",name:"Bordeaux 2016",type:"tms",template:"http://tms.bordeaux.inria.fr/bdx2016/{zoom}/{x}/{y}.jpg",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[-0.59923,45.04193],[-0.54231,45.02757],[-0.50979,45.00601],[-0.47727,45.00206],[-0.47066,44.97367],[-0.45542,44.95102],[-0.46456,44.91792],[-0.4732,44.91936],[-0.48794,44.90928],[-0.4981,44.89057],[-0.48946,44.87797],[-0.4666,44.87076],[-0.47625,44.84735],[-0.49505,44.83978],[-0.49099,44.83186],[-0.46965,44.82537],[-0.49709,44.80446],[-0.52453,44.80013],[-0.5103,44.76767],[-0.53469,44.76515],[-0.56213,44.75107],[-0.5601,44.74169],[-0.5728,44.74133],[-0.59465,44.7601],[-0.63429,44.73989],[-0.65004,44.77705],[-0.67901,44.77489],[-0.68816,44.77922],[-0.71509,44.76839],[-0.75168,44.7471],[-0.76336,44.75577],[-0.73846,44.77561],[-0.74202,44.78571],[-0.72779,44.81239],[-0.73999,44.82861],[-0.76438,44.82933],[-0.803,44.82176],[-0.8401,44.82753],[-0.83908,44.84014],[-0.87567,44.85023],[-0.88532,44.85852],[-0.88685,44.88769],[-0.86601,44.88697],[-0.84569,44.89669],[-0.83349,44.92764],[-0.81825,44.92764],[-0.80198,44.92224],[-0.79843,44.9485],[-0.78725,44.94814],[-0.75574,44.97007],[-0.72169,44.95785],[-0.69578,44.93087],[-0.68866,44.93447],[-0.67139,44.93267],[-0.66935,44.94095],[-0.62514,44.95066],[-0.63226,44.95893],[-0.63124,44.9672],[-0.60024,44.96756],[-0.55146,44.97834],[-0.54079,44.97726],[-0.55451,44.99739],[-0.59364,45.01751],[-0.60787,45.03403],[-0.59923,45.04193]]],terms_text:"Bordeaux Métropole - 2016"},{id:"branquinha_al",name:"Branquinha AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?service=WMS&version=1.1.0&request=GetMap&layers=Branquinha&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-35.96968,-9.2928],[-35.97063,-9.20261],[-35.97727,-9.20264],[-35.98365,-9.2027],[-35.98765,-9.20266],[-35.99159,-9.20274],[-36.00498,-9.20284],[-36.01473,-9.20293],[-36.01651,-9.20296],[-36.01871,-9.20293],[-36.02487,-9.20286],[-36.02892,-9.20297],[-36.03308,-9.20289],[-36.03769,-9.20294],[-36.04581,-9.203],[-36.05161,-9.20305],[-36.05457,-9.20301],[-36.06022,-9.20304],[-36.06191,-9.20304],[-36.0618,-9.21319],[-36.06167,-9.21806],[-36.06156,-9.21915],[-36.06163,-9.22156],[-36.06144,-9.22277],[-36.06139,-9.22716],[-36.06134,-9.23227],[-36.0614,-9.23391],[-36.06145,-9.23494],[-36.06131,-9.23646],[-36.06133,-9.23773],[-36.06142,-9.23905],[-36.06145,-9.24133],[-36.06136,-9.2423],[-36.06141,-9.24358],[-36.06139,-9.2453],[-36.06126,-9.24726],[-36.06123,-9.24949],[-36.06127,-9.25107],[-36.06121,-9.25517],[-36.06119,-9.25795],[-36.06107,-9.25945],[-36.06109,-9.26183],[-36.06106,-9.26493],[-36.06086,-9.27146],[-36.06083,-9.2751],[-36.06074,-9.28274],[-36.0608,-9.29234],[-36.06074,-9.29363],[-36.05477,-9.29357],[-36.04621,-9.29349],[-36.03941,-9.29348],[-36.03501,-9.29339],[-36.02979,-9.29341],[-36.02167,-9.29332],[-36.01278,-9.29328],[-36.00468,-9.29321],[-35.99678,-9.29314],[-35.98969,-9.29312],[-35.98483,-9.29305],[-35.98305,-9.29289],[-35.98173,-9.29294],[-35.97884,-9.29282],[-35.96968,-9.2928]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"British_Columbia_Mosaic",name:"British Columbia Mosaic",type:"tms",template:"http://{switch:a,b,c,d}.imagery.paulnorman.ca/tiles/bc_mosaic/{zoom}/{x}/{y}.png",endDate:"2013-06-01T00:00:00.000Z",startDate:"2009-01-01T00:00:00.000Z",zoomExtent:[9,20],polygon:[[[-123.3176,49.32726],[-123.44053,49.32682],[-123.44072,49.33844],[-123.43984,49.34304],[-123.44013,49.34354],[-123.44011,49.34399],[-123.44063,49.34445],[-123.44047,49.34558],[-123.43978,49.34606],[-123.43897,49.34613],[-123.43729,49.35672],[-123.43748,49.37108],[-123.43353,49.37094],[-123.43304,49.37373],[-123.43327,49.37512],[-123.43228,49.3761],[-123.43175,49.37917],[-123.43143,49.37959],[-123.43078,49.38239],[-123.43134,49.38274],[-123.43121,49.38385],[-123.43004,49.38459],[-123.41899,49.38471],[-123.41922,49.41352],[-123.39725,49.41357],[-123.39728,49.42435],[-123.40069,49.42433],[-123.40077,49.57035],[-123.40008,49.57035],[-123.40108,49.59338],[-123.37604,49.59328],[-123.37698,49.67561],[-123.35073,49.67564],[-123.3508,49.70868],[-123.33289,49.70872],[-123.33279,49.72563],[-123.30071,49.72556],[-123.30092,49.73754],[-123.2886,49.73764],[-123.28878,49.82492],[-123.2998,49.82492],[-123.30117,49.84978],[-123.32182,49.85067],[-123.32733,49.85777],[-123.32767,49.97589],[-123.30083,49.97522],[-123.30072,50.0997],[-123.25017,50.10074],[-123.25091,50.27549],[-123.02243,50.27556],[-123.02249,50.32549],[-123.00093,50.32547],[-123.00078,50.34239],[-122.9775,50.34234],[-122.97748,50.35043],[-122.95081,50.3505],[-122.95079,50.3712],[-122.93252,50.37115],[-122.9321,50.39979],[-122.88742,50.39997],[-122.88734,50.42561],[-122.66202,50.4257],[-122.66231,50.39945],[-122.59903,50.39924],[-122.59883,50.37552],[-122.57248,50.37537],[-122.57356,50.24939],[-122.59904,50.24946],[-122.59915,50.22657],[-122.6185,50.22664],[-122.61857,50.22441],[-122.64906,50.22451],[-122.64922,50.19935],[-122.73086,50.19938],[-122.73116,50.12443],[-122.74904,50.12451],[-122.74905,50.0903],[-122.76878,50.09034],[-122.76898,49.94945],[-122.99905,49.94947],[-122.99912,49.87546],[-122.97759,49.87546],[-122.97781,49.69951],[-122.99924,49.69948],[-122.99925,49.65165],[-123.02215,49.65165],[-123.02212,49.59951],[-123.04919,49.59946],[-123.04919,49.59405],[-123.06646,49.59404],[-123.06636,49.54519],[-123.06999,49.54512],[-123.0699,49.54132],[-123.07068,49.53928],[-123.07089,49.53799],[-123.07115,49.53688],[-123.07111,49.53581],[-123.07138,49.53282],[-123.07165,49.53211],[-123.07171,49.53139],[-123.07203,49.53042],[-123.07396,49.53035],[-123.0748,49.5295],[-123.07482,49.52881],[-123.07434,49.52806],[-123.07353,49.52746],[-123.07337,49.52704],[-123.07329,49.52559],[-123.07371,49.52496],[-123.07362,49.52449],[-123.09926,49.52449],[-123.09916,49.47545],[-123.07105,49.47553],[-123.07109,49.4663],[-123.07392,49.46631],[-123.07422,49.4505],[-123.07463,49.45009],[-123.07465,49.44933],[-123.0746,49.44902],[-123.07446,49.44869],[-123.07433,49.44799],[-123.07424,49.44777],[-123.07431,49.44475],[-123.07471,49.44476],[-123.07464,49.43773],[-122.99965,49.43774],[-122.99965,49.43692],[-122.86062,49.44153],[-122.81026,49.4424],[-122.8099,49.37667],[-122.40361,49.37666],[-122.40363,49.37719],[-122.26474,49.3773],[-122.26354,49.23601],[-122.21557,49.23614],[-122.0581,49.23588],[-121.95383,49.29665],[-121.94009,49.30454],[-121.92358,49.31423],[-121.89909,49.32254],[-121.88834,49.32598],[-121.8553,49.33636],[-121.8327,49.34415],[-121.76713,49.36544],[-121.67367,49.36546],[-121.64042,49.37438],[-121.5962,49.38605],[-121.58612,49.38792],[-121.52137,49.39946],[-121.51174,49.40384],[-121.46793,49.4229],[-121.44168,49.43456],[-121.42243,49.43458],[-121.34629,49.39323],[-121.34801,49.34124],[-121.5135,49.32058],[-121.60317,49.27717],[-121.65841,49.18561],[-121.67995,49.16541],[-121.78158,49.07026],[-121.80762,49.06225],[-121.9394,49.06362],[-121.97255,49.04242],[-121.99214,49.03329],[-122.00353,49.02734],[-122.01786,49.02411],[-122.11086,48.99928],[-122.14931,48.99953],[-122.14927,48.99915],[-122.19914,48.9996],[-122.19918,48.9992],[-122.23436,48.99948],[-122.23436,49.00017],[-122.39947,49.00124],[-122.45213,49.00163],[-122.45213,49.00088],[-122.45841,49.00093],[-122.45848,48.99931],[-122.49925,48.9995],[-122.49925,48.99929],[-122.54926,48.99951],[-122.54926,48.99932],[-122.65808,48.99942],[-122.65811,48.9954],[-122.70676,48.99553],[-122.75198,48.99564],[-122.79221,48.99572],[-122.79219,48.99943],[-123.03504,48.99957],[-123.03504,49.0001],[-123.03971,49.00005],[-123.03974,49.00018],[-123.04855,49.00013],[-123.04853,49.00047],[-123.05571,49.00045],[-123.05563,49.00023],[-123.06414,49.00013],[-123.06416,48.99994],[-123.0749,48.99969],[-123.07507,49.00062],[-123.08996,49.00037],[-123.10923,48.99994],[-123.12712,49.0003],[-123.136,48.99987],[-123.13627,49.00058],[-123.15385,48.99981],[-123.15405,49.00068],[-123.171,49.00013],[-123.20009,48.99968],[-123.20034,49.04978],[-123.21088,49.04972],[-123.21122,49.05199],[-123.20705,49.05209],[-123.20789,49.06079],[-123.21917,49.0601],[-123.21896,49.06127],[-123.22518,49.06127],[-123.22539,49.06224],[-123.22971,49.06203],[-123.22981,49.06859],[-123.23319,49.06873],[-123.2335,49.07059],[-123.24931,49.07025],[-123.24973,49.08026],[-123.27514,49.0804],[-123.27514,49.08709],[-123.29948,49.0873],[-123.29944,49.08025],[-123.32545,49.08039],[-123.32544,49.11547],[-123.2751,49.15033],[-123.27518,49.18733],[-123.27881,49.18711],[-123.27889,49.19107],[-123.30048,49.19107],[-123.30042,49.26229],[-123.31262,49.26224],[-123.3126,49.27149],[-123.31543,49.27147],[-123.31566,49.28189],[-123.31747,49.28188],[-123.3175,49.29185],[-123.31904,49.29185],[-123.31907,49.2986],[-123.32023,49.29857],[-123.32028,49.30197],[-123.32227,49.30196],[-123.32239,49.31183],[-123.3254,49.31181],[-123.32539,49.32017],[-123.31927,49.3202],[-123.31922,49.32467],[-123.31794,49.32466],[-123.31799,49.32541],[-123.3176,49.32726]]],terms_url:"http://imagery.paulnorman.ca/tiles/about.html",terms_text:"Copyright Province of British Columbia, City of Surrey"},{id:"Budapest_XI_2015",name:"Budapest district XI orthophoto 2015",type:"wms",template:"http://terinfo.ujbuda.hu/mapproxy/service?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=orto2015_20160304&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[19.04767,47.48789],[19.05157,47.4899],[19.06434,47.4792],[19.0665,47.47632],[19.06766,47.47343],[19.06837,47.47077],[19.06846,47.46876],[19.06722,47.46501],[19.05683,47.45259],[19.0549,47.44906],[19.05176,47.43499],[19.04863,47.429],[19.04384,47.42968],[19.04023,47.42932],[19.03509,47.43818],[19.03221,47.43779],[19.0252,47.442],[19.0207,47.44576],[19.01915,47.44658],[19.01545,47.44759],[19.01347,47.44361],[19.01266,47.44271],[19.01178,47.44247],[19.0119,47.44188],[19.0098,47.43944],[19.0057,47.43111],[19.00046,47.43097],[18.99534,47.42821],[18.97545,47.42818],[18.97343,47.42904],[18.97361,47.42998],[18.97548,47.43067],[18.97719,47.43402],[18.97823,47.43817],[18.97733,47.44657],[18.97004,47.44988],[18.96861,47.45142],[18.97568,47.45506],[18.97586,47.45556],[18.97625,47.45584],[18.97658,47.45594],[18.97763,47.45597],[18.98017,47.45605],[18.98162,47.46067],[18.97793,47.46857],[18.96867,47.47643],[18.97745,47.48194],[18.98035,47.48169],[18.98565,47.4782],[18.98907,47.47838],[18.99117,47.47898],[18.99177,47.48102],[18.99288,47.48182],[18.99836,47.48238],[18.99902,47.483],[19.004,47.48189],[19.00416,47.48399],[19.01027,47.48535],[19.01237,47.48404],[19.0138,47.48351],[19.01674,47.48465],[19.0163,47.48539],[19.01689,47.48595],[19.01808,47.48605],[19.02108,47.48492],[19.02124,47.48612],[19.02301,47.48741],[19.02637,47.48885],[19.02995,47.48904],[19.03135,47.48855],[19.03189,47.48759],[19.03286,47.48712],[19.03364,47.48702],[19.03514,47.48725],[19.03585,47.48729],[19.03616,47.48751],[19.03665,47.48767],[19.03748,47.48774],[19.03847,47.48737],[19.03918,47.48679],[19.04105,47.48649],[19.04181,47.48737],[19.04387,47.4881],[19.04542,47.48817],[19.04695,47.4881],[19.04767,47.48789]]],terms_url:"http://terinfo.ujbuda.hu",terms_text:"Budapest XI. kerület önkormányzata",description:"5 cm resolution bald image"},{id:"Budapest_XI_2017",name:"Budapest district XI orthophoto 2017",type:"wms",template:"http://terinfo.ujbuda.hu/mapproxy/service?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=orto_2017&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2017-03-01T00:00:00.000Z",startDate:"2017-03-01T00:00:00.000Z",polygon:[[[19.04767,47.48789],[19.05157,47.4899],[19.06434,47.4792],[19.0665,47.47632],[19.06766,47.47343],[19.06837,47.47077],[19.06846,47.46876],[19.06722,47.46501],[19.05683,47.45259],[19.0549,47.44906],[19.05176,47.43499],[19.04863,47.429],[19.04384,47.42968],[19.04023,47.42932],[19.03509,47.43818],[19.03221,47.43779],[19.0252,47.442],[19.0207,47.44576],[19.01915,47.44658],[19.01545,47.44759],[19.01347,47.44361],[19.01266,47.44271],[19.01178,47.44247],[19.0119,47.44188],[19.0098,47.43944],[19.0057,47.43111],[19.00046,47.43097],[18.99534,47.42821],[18.97545,47.42818],[18.97343,47.42904],[18.97361,47.42998],[18.97548,47.43067],[18.97719,47.43402],[18.97823,47.43817],[18.97733,47.44657],[18.97004,47.44988],[18.96861,47.45142],[18.97568,47.45506],[18.97586,47.45556],[18.97625,47.45584],[18.97658,47.45594],[18.97763,47.45597],[18.98017,47.45605],[18.98162,47.46067],[18.97793,47.46857],[18.96867,47.47643],[18.97745,47.48194],[18.98035,47.48169],[18.98565,47.4782],[18.98907,47.47838],[18.99117,47.47898],[18.99177,47.48102],[18.99288,47.48182],[18.99836,47.48238],[18.99902,47.483],[19.004,47.48189],[19.00416,47.48399],[19.01027,47.48535],[19.01237,47.48404],[19.0138,47.48351],[19.01674,47.48465],[19.0163,47.48539],[19.01689,47.48595],[19.01808,47.48605],[19.02108,47.48492],[19.02124,47.48612],[19.02301,47.48741],[19.02637,47.48885],[19.02995,47.48904],[19.03135,47.48855],[19.03189,47.48759],[19.03286,47.48712],[19.03364,47.48702],[19.03514,47.48725],[19.03585,47.48729],[19.03616,47.48751],[19.03665,47.48767],[19.03748,47.48774],[19.03847,47.48737],[19.03918,47.48679],[19.04105,47.48649],[19.04181,47.48737],[19.04387,47.4881],[19.04542,47.48817],[19.04695,47.4881],[19.04767,47.48789]]],terms_url:"http://terinfo.ujbuda.hu",terms_text:"Budapest XI. kerület önkormányzata",best:true,description:"5 cm resolution bald image"},{id:"Cadastre",name:"Cadastre",type:"tms",template:"http://tms.cadastre.openstreetmap.fr/*/tout/{zoom}/{x}/{y}.png",zoomExtent:[12,22],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]]],terms_url:"https://wiki.openstreetmap.org/wiki/WikiProject_Cadastre_Fran%C3%A7ais/Conditions_d%27utilisation",terms_text:"cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2019",description:"French land registry",icon:"https://svn.openstreetmap.org/applications/editors/josm/plugins/cadastre-fr/images/cadastre_small.png"},{id:"lu.geoportail.opendata.cadastre",name:"Cadastre geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/cadastre/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/plan-cadastral-numerise-pcn-webservices-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"cajueiro_al",name:"Cajueiro AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Cajueiro&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.10753,-9.43884],[-36.10752,-9.43421],[-36.10767,-9.42959],[-36.10779,-9.42361],[-36.10769,-9.41927],[-36.10781,-9.41391],[-36.10803,-9.41094],[-36.1081,-9.40965],[-36.10811,-9.40747],[-36.10816,-9.40693],[-36.10819,-9.40418],[-36.10811,-9.40176],[-36.10817,-9.40002],[-36.10827,-9.39952],[-36.10827,-9.39646],[-36.10833,-9.39475],[-36.10832,-9.39273],[-36.10836,-9.3904],[-36.10841,-9.38447],[-36.10847,-9.38165],[-36.10846,-9.37767],[-36.10835,-9.37573],[-36.10845,-9.37432],[-36.10849,-9.37234],[-36.10845,-9.3697],[-36.10867,-9.36278],[-36.10863,-9.36102],[-36.10873,-9.35928],[-36.10874,-9.35736],[-36.10855,-9.35479],[-36.1087,-9.3523],[-36.10871,-9.34996],[-36.10873,-9.34893],[-36.11269,-9.34908],[-36.11726,-9.34912],[-36.12138,-9.34905],[-36.12806,-9.3491],[-36.13217,-9.34906],[-36.13694,-9.34915],[-36.14025,-9.34914],[-36.14134,-9.34932],[-36.14458,-9.34916],[-36.14684,-9.34914],[-36.14842,-9.34905],[-36.15276,-9.34907],[-36.154,-9.34922],[-36.15627,-9.34923],[-36.16026,-9.34921],[-36.16086,-9.34929],[-36.166,-9.34933],[-36.16938,-9.34942],[-36.17176,-9.34936],[-36.17628,-9.34945],[-36.18028,-9.34937],[-36.18227,-9.34946],[-36.18826,-9.34938],[-36.19039,-9.34945],[-36.19354,-9.34946],[-36.19552,-9.34941],[-36.19918,-9.34951],[-36.19926,-9.35146],[-36.19913,-9.35234],[-36.19912,-9.35353],[-36.19919,-9.35646],[-36.19922,-9.35771],[-36.1993,-9.35832],[-36.19933,-9.36112],[-36.19922,-9.36177],[-36.19918,-9.36258],[-36.19931,-9.364],[-36.19926,-9.36499],[-36.19922,-9.36563],[-36.19928,-9.3666],[-36.19917,-9.36796],[-36.19917,-9.36868],[-36.19922,-9.36911],[-36.19912,-9.37017],[-36.19887,-9.37149],[-36.19886,-9.37264],[-36.19902,-9.37322],[-36.19915,-9.37504],[-36.19911,-9.37688],[-36.19896,-9.37747],[-36.19899,-9.37915],[-36.19917,-9.38053],[-36.19919,-9.38124],[-36.19926,-9.38175],[-36.19928,-9.38302],[-36.19913,-9.38374],[-36.19908,-9.38592],[-36.19879,-9.38787],[-36.19881,-9.38935],[-36.19902,-9.39092],[-36.19904,-9.392],[-36.19899,-9.39348],[-36.1988,-9.39451],[-36.19867,-9.39705],[-36.19845,-9.39949],[-36.19864,-9.40313],[-36.19866,-9.40476],[-36.19865,-9.40836],[-36.19875,-9.40902],[-36.19857,-9.41058],[-36.19859,-9.41273],[-36.19874,-9.41446],[-36.19868,-9.41711],[-36.1986,-9.41902],[-36.19846,-9.41965],[-36.1985,-9.42235],[-36.19871,-9.42429],[-36.19858,-9.42697],[-36.1984,-9.42895],[-36.19857,-9.43412],[-36.19871,-9.4347],[-36.19865,-9.43595],[-36.19857,-9.43626],[-36.19859,-9.43667],[-36.19876,-9.43749],[-36.19889,-9.43905],[-36.19882,-9.43995],[-36.1785,-9.43977],[-36.17718,-9.43968],[-36.17265,-9.43967],[-36.17099,-9.43971],[-36.16396,-9.43963],[-36.15386,-9.4395],[-36.13983,-9.4393],[-36.12875,-9.43913],[-36.11497,-9.43892],[-36.10753,-9.43884]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"osm-cambodia_laos_thailand_vietnam-bilingual",name:"Cambodia, Laos, Thailand, Vietnam, Malaysia, Myanmar bilingual",type:"tms",template:"https://{switch:a,b,c,d}.tile.osm-tools.org/osm/{zoom}/{x}/{y}.png",zoomExtent:[0,20],polygon:[[[92.10238,20.81356],[93.56905,24.09755],[94.1733,23.92695],[95.19503,26.70727],[96.75509,27.52867],[97.58456,28.5806],[98.73812,27.51405],[98.74362,25.87992],[97.67794,24.75774],[97.96359,24.04238],[98.82052,24.16272],[99.52364,22.95934],[100.36959,21.50514],[101.79232,22.48305],[105.36288,23.33311],[106.81857,22.84801],[108.19735,21.36197],[107.43895,18.85398],[117.14537,7.46562],[119.6173,5.28754],[118.12315,4.05023],[117.25523,4.36249],[115.86546,4.34606],[115.50841,3.02498],[114.5526,1.5101],[113.54186,1.25748],[112.96507,1.5705],[112.24547,1.5101],[111.67418,1.01583],[110.4547,0.90049],[109.49889,1.9219],[103.22569,1.12568],[100.46263,3.23889],[97.6721,8.05888],[93.89281,15.93987],[92.10238,20.81356]]],terms_url:"http://www.osm-tools.org",terms_text:"© osm-tools.org & OpenStreetMap contributors, CC-BY-SA"},{id:"campo_alegre_al",name:"Campo Alegre AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Campo%20Alegre&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.30643,-9.82332],[-36.30603,-9.78597],[-36.30602,-9.78263],[-36.30609,-9.78168],[-36.30604,-9.78081],[-36.3059,-9.77531],[-36.30586,-9.76496],[-36.30545,-9.73336],[-36.39634,-9.73248],[-36.39627,-9.73744],[-36.39636,-9.74336],[-36.39644,-9.75535],[-36.3966,-9.75856],[-36.39665,-9.75979],[-36.39655,-9.76244],[-36.39661,-9.76489],[-36.39658,-9.76648],[-36.39661,-9.76684],[-36.39659,-9.7696],[-36.3967,-9.77896],[-36.39675,-9.78464],[-36.39684,-9.79067],[-36.39693,-9.79681],[-36.39703,-9.80298],[-36.39719,-9.82033],[-36.39722,-9.82234],[-36.39392,-9.82233],[-36.35375,-9.82279],[-36.34822,-9.82286],[-36.31697,-9.82317],[-36.31191,-9.82324],[-36.30879,-9.82327],[-36.30643,-9.82332]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"canaan_drone_red_cross_201712",name:"Canaan - American Red Cross, Dec-2017",type:"tms",template:"https://tiles.openaerialmap.org/5ac65a9f91b5310010e0d489/0/5ac65a9f91b5310010e0d48a/{zoom}/{x}/{y}.png",endDate:"2017-12-20T00:00:00.000Z",startDate:"2017-12-11T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[-72.26734,18.63561],[-72.2636,18.6373],[-72.26116,18.64141],[-72.25983,18.64588],[-72.25811,18.64742],[-72.24502,18.64795],[-72.23433,18.64807],[-72.22734,18.6482],[-72.21953,18.65438],[-72.2161,18.65446],[-72.21584,18.66222],[-72.21725,18.66739],[-72.21889,18.67019],[-72.22309,18.66958],[-72.22343,18.67312],[-72.22502,18.6732],[-72.22545,18.67609],[-72.23288,18.67597],[-72.23339,18.67877],[-72.23674,18.67857],[-72.23854,18.67975],[-72.24,18.68129],[-72.24463,18.68207],[-72.24682,18.6817],[-72.24605,18.67698],[-72.25094,18.67698],[-72.25511,18.67902],[-72.25961,18.67898],[-72.26081,18.67743],[-72.27038,18.67711],[-72.27901,18.67682],[-72.28373,18.67893],[-72.28613,18.68154],[-72.29665,18.68178],[-72.30184,18.68568],[-72.3012,18.68824],[-72.30802,18.69324],[-72.30948,18.69308],[-72.31699,18.69682],[-72.32806,18.70528],[-72.3384,18.69902],[-72.34012,18.69666],[-72.33961,18.69426],[-72.33377,18.68357],[-72.33135,18.68192],[-72.32551,18.68093],[-72.32027,18.67741],[-72.31626,18.67477],[-72.31167,18.672],[-72.308,18.66995],[-72.30534,18.66926],[-72.30068,18.66499],[-72.29796,18.66479],[-72.29609,18.66129],[-72.29315,18.65999],[-72.29519,18.65497],[-72.28414,18.64962],[-72.27804,18.64523],[-72.27487,18.64212],[-72.27352,18.64057],[-72.2706,18.63901],[-72.26734,18.63561]]],terms_url:"http://americanredcross.github.io/",terms_text:"American Red Cross",description:"Drone imagery collected December 2017 for Canaan, Haiti by American Red Cross in coordination with the Haitian Red Cross."},{id:"Geneve-SITG-2011",name:"Canton de Génève 5cm (SITG 2011)",type:"wms",template:"https://ge.ch/ags2/services/Orthophotos_2011/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[6.18221,46.22618],[6.18348,46.22772],[6.18929,46.23329],[6.19196,46.23858],[6.19253,46.24239],[6.19061,46.24397],[6.19046,46.24654],[6.19256,46.25045],[6.19186,46.25262],[6.19325,46.256],[6.19287,46.25776],[6.19543,46.26181],[6.1979,46.26454],[6.20045,46.26569],[6.20917,46.26634],[6.21716,46.27388],[6.22046,46.27895],[6.2275,46.28649],[6.23433,46.28955],[6.23643,46.2932],[6.24074,46.29774],[6.23958,46.30396],[6.2413,46.30529],[6.2432,46.30453],[6.24513,46.30492],[6.24627,46.30372],[6.24983,46.3027],[6.25032,46.3014],[6.24938,46.30018],[6.25146,46.29647],[6.25063,46.29451],[6.25223,46.29382],[6.25429,46.2907],[6.25231,46.28735],[6.25032,46.2868],[6.24974,46.28574],[6.24636,46.28433],[6.24323,46.28428],[6.23985,46.28098],[6.23934,46.27627],[6.24372,46.27356],[6.25113,46.26258],[6.26244,46.2553],[6.26301,46.25457],[6.262,46.25215],[6.26736,46.24887],[6.27732,46.25211],[6.27725,46.25298],[6.2832,46.25503],[6.28231,46.25568],[6.28278,46.25677],[6.28868,46.26046],[6.29154,46.2644],[6.29457,46.26556],[6.29729,46.26489],[6.29783,46.2631],[6.29541,46.25827],[6.29663,46.2566],[6.3024,46.2558],[6.30678,46.25753],[6.311,46.25666],[6.30768,46.25184],[6.31046,46.25057],[6.31011,46.24749],[6.31156,46.24386],[6.29606,46.22501],[6.29012,46.22241],[6.27773,46.21493],[6.26707,46.21276],[6.25668,46.20926],[6.25089,46.20574],[6.25076,46.20456],[6.2495,46.20404],[6.24643,46.20454],[6.24251,46.20364],[6.23594,46.20541],[6.23347,46.20509],[6.22889,46.20172],[6.22323,46.20005],[6.22355,46.19881],[6.22257,46.19791],[6.21935,46.19765],[6.21688,46.19448],[6.21259,46.19189],[6.20727,46.19137],[6.20588,46.18908],[6.2034,46.18806],[6.20282,46.18642],[6.20035,46.18504],[6.19905,46.18296],[6.19615,46.18288],[6.1885,46.17967],[6.18751,46.17539],[6.18982,46.16584],[6.1748,46.15694],[6.1688,46.15624],[6.15829,46.15195],[6.15434,46.15141],[6.14952,46.14933],[6.14805,46.14748],[6.14832,46.14619],[6.14561,46.14417],[6.14244,46.14493],[6.13768,46.14217],[6.13692,46.14071],[6.13074,46.13946],[6.12598,46.13966],[6.12014,46.14181],[6.1077,46.14203],[6.10537,46.14313],[6.09746,46.14325],[6.09151,46.15095],[6.07476,46.14795],[6.07188,46.14908],[6.05295,46.15046],[6.04973,46.1468],[6.04862,46.14153],[6.04571,46.13916],[6.04287,46.14006],[6.04013,46.13894],[6.03783,46.13716],[6.03647,46.13381],[6.03531,46.13344],[6.03,46.13816],[6.02079,46.14024],[6.01693,46.14191],[6.01282,46.14119],[6.00814,46.14171],[6.00364,46.14088],[5.99338,46.1432],[5.98728,46.14171],[5.98464,46.14232],[5.98309,46.13712],[5.97603,46.1319],[5.97314,46.13081],[5.97037,46.13108],[5.96536,46.12882],[5.96163,46.12976],[5.9573,46.12767],[5.95575,46.12836],[5.95484,46.13214],[5.9589,46.13553],[5.96446,46.13738],[5.96517,46.13845],[5.9631,46.14241],[5.96383,46.14656],[5.97157,46.1558],[5.97884,46.16721],[5.98022,46.17354],[5.98322,46.17507],[5.98537,46.17478],[5.98754,46.17306],[5.99029,46.17955],[5.9936,46.18203],[5.98976,46.18692],[5.98287,46.18822],[5.98068,46.1904],[5.96282,46.1963],[5.96225,46.19719],[5.96465,46.20022],[5.97164,46.20302],[5.96985,46.20383],[5.96794,46.20675],[5.97227,46.21418],[5.97364,46.21563],[5.97897,46.21821],[6.00857,46.24444],[6.01422,46.24855],[6.06593,46.28345],[6.11511,46.31511],[6.12573,46.31843],[6.12972,46.31568],[6.12978,46.31407],[6.13604,46.30896],[6.14179,46.30555],[6.15393,46.30014],[6.17157,46.29507],[6.17125,46.29223],[6.17277,46.28629],[6.17018,46.28533],[6.16834,46.28109],[6.17201,46.27554],[6.1722,46.27301],[6.1691,46.26785],[6.16746,46.26217],[6.16531,46.26195],[6.16455,46.26274],[6.15943,46.25898],[6.15532,46.25216],[6.15387,46.25212],[6.15273,46.25037],[6.15311,46.2477],[6.15494,46.24591],[6.1521,46.23878],[6.15217,46.23273],[6.15034,46.22659],[6.15454,46.22191],[6.15483,46.22044],[6.15296,46.21738],[6.154,46.21355],[6.1571,46.21097],[6.16263,46.21043],[6.16387,46.2097],[6.16911,46.21191],[6.16867,46.21318],[6.17073,46.21478],[6.17471,46.21603],[6.18221,46.22618]],[[6.18834,46.34901],[6.18696,46.34862],[6.18195,46.35015],[6.17961,46.352],[6.17142,46.35444],[6.17022,46.35911],[6.17415,46.36036],[6.17272,46.36189],[6.17348,46.36288],[6.17999,46.36547],[6.1877,46.36132],[6.19447,46.36175],[6.19905,46.36086],[6.20113,46.35634],[6.20258,46.35567],[6.20791,46.35583],[6.21374,46.35379],[6.21247,46.35085],[6.20846,46.34665],[6.2086,46.33991],[6.20659,46.33792],[6.20493,46.33861],[6.20348,46.33793],[6.19181,46.34333],[6.19318,46.34787],[6.19076,46.3477],[6.18834,46.34901]],[[6.18182,46.34281],[6.18016,46.34318],[6.1752,46.34532],[6.17341,46.34398],[6.17324,46.34054],[6.1714,46.33952],[6.16588,46.34254],[6.16564,46.34339],[6.17091,46.35054],[6.17341,46.35029],[6.17458,46.35192],[6.17587,46.35205],[6.18579,46.34593],[6.18182,46.34281]]],terms_url:"http://ge.ch/sitg/donnees/conditions-d-utilisation/open-data",terms_text:"Orthophotos du SITG 2011"},{id:"CTFRIBOURG2016",name:"Canton Fribourg 2016",type:"tms",template:"https://mapproxy.osm.ch/tiles/fribourg_2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[1,21],polygon:[[[6.79478,46.57542],[6.79949,46.57407],[6.80256,46.57491],[6.80336,46.57687],[6.80427,46.57664],[6.80489,46.57792],[6.80794,46.57761],[6.8094,46.57885],[6.81084,46.57896],[6.81322,46.57823],[6.81153,46.58099],[6.8142,46.58396],[6.81411,46.58567],[6.8206,46.58368],[6.82371,46.57747],[6.82693,46.57796],[6.82927,46.57637],[6.83485,46.57533],[6.83744,46.57677],[6.83691,46.57748],[6.83982,46.57896],[6.84239,46.58244],[6.84532,46.58276],[6.84644,46.58394],[6.84857,46.58331],[6.85087,46.58113],[6.85262,46.58197],[6.85996,46.57987],[6.86554,46.57725],[6.86507,46.57623],[6.8679,46.57515],[6.87446,46.56497],[6.8845,46.56195],[6.88686,46.56341],[6.89214,46.5679],[6.89918,46.56671],[6.89885,46.56499],[6.89393,46.55991],[6.88822,46.55815],[6.86839,46.54164],[6.86498,46.53896],[6.86015,46.53597],[6.85563,46.54086],[6.85501,46.54144],[6.85087,46.54111],[6.8407,46.53819],[6.83032,46.53744],[6.82783,46.54298],[6.82553,46.54357],[6.81278,46.52707],[6.81088,46.52513],[6.81534,46.52139],[6.8181,46.5165],[6.82263,46.51411],[6.82429,46.51207],[6.83034,46.51246],[6.83239,46.50544],[6.83503,46.50231],[6.84126,46.49706],[6.84294,46.49632],[6.84554,46.49667],[6.84775,46.49369],[6.84891,46.49337],[6.85729,46.49305],[6.86276,46.49384],[6.86634,46.50079],[6.87244,46.50431],[6.88168,46.51257],[6.8967,46.52044],[6.89773,46.52005],[6.89711,46.51766],[6.89767,46.51483],[6.89522,46.51079],[6.89572,46.50773],[6.89974,46.51039],[6.90142,46.51233],[6.92517,46.50769],[6.92759,46.50467],[6.93363,46.50167],[6.93674,46.50096],[6.95614,46.49949],[6.97239,46.48879],[6.97581,46.4784],[6.97783,46.47289],[6.97815,46.46833],[6.97906,46.46107],[6.98016,46.45896],[6.99212,46.44891],[6.98361,46.43873],[6.98394,46.43799],[6.98746,46.43794],[7.01786,46.44707],[7.02103,46.45729],[7.06583,46.48904],[7.0724,46.4864],[7.10037,46.48699],[7.12279,46.49869],[7.1264,46.50317],[7.13096,46.50466],[7.13624,46.50861],[7.13704,46.51308],[7.14005,46.51688],[7.14044,46.51988],[7.14318,46.52183],[7.1437,46.52475],[7.1453,46.52701],[7.14835,46.52846],[7.15834,46.52681],[7.16346,46.52855],[7.16709,46.53101],[7.18234,46.53837],[7.19218,46.54656],[7.20081,46.54169],[7.20108,46.543],[7.20765,46.53291],[7.21417,46.53762],[7.21811,46.54211],[7.22171,46.54481],[7.22311,46.5476],[7.22543,46.54923],[7.2322,46.55123],[7.23614,46.554],[7.24047,46.55424],[7.24705,46.55623],[7.25574,46.56029],[7.26385,46.56752],[7.2681,46.57369],[7.28136,46.58411],[7.2992,46.5791],[7.30805,46.58132],[7.31254,46.58917],[7.3207,46.59183],[7.31479,46.60042],[7.3162,46.60937],[7.31826,46.61615],[7.3178,46.61856],[7.31213,46.6217],[7.31327,46.63662],[7.32284,46.63731],[7.32684,46.63873],[7.32975,46.64171],[7.32787,46.64616],[7.321,46.65465],[7.32345,46.65526],[7.32914,46.65459],[7.33116,46.65522],[7.33403,46.65471],[7.34549,46.6553],[7.34756,46.65307],[7.35063,46.65164],[7.35079,46.64799],[7.35456,46.64669],[7.3558,46.64533],[7.35528,46.64193],[7.35714,46.63927],[7.35877,46.64418],[7.36209,46.64683],[7.36229,46.64791],[7.36608,46.64898],[7.37747,46.65636],[7.36933,46.65564],[7.36953,46.65748],[7.37103,46.65907],[7.37083,46.66085],[7.37187,46.66283],[7.37122,46.66375],[7.37252,46.66757],[7.37108,46.66942],[7.37649,46.67503],[7.37293,46.68012],[7.37777,46.68357],[7.37587,46.68645],[7.376,46.6878],[7.38027,46.69018],[7.37693,46.69272],[7.3686,46.69265],[7.3649,46.69505],[7.36261,46.69928],[7.3598,46.69802],[7.34598,46.69895],[7.34604,46.7019],[7.34939,46.70555],[7.35037,46.70874],[7.35021,46.71119],[7.34903,46.71249],[7.34065,46.71464],[7.33277,46.71491],[7.32868,46.71641],[7.31011,46.71815],[7.30785,46.71717],[7.30002,46.72247],[7.29683,46.72737],[7.29685,46.73565],[7.29834,46.74013],[7.30304,46.74517],[7.30454,46.74816],[7.30486,46.75026],[7.30335,46.7514],[7.30309,46.75261],[7.30359,46.75919],[7.29987,46.76375],[7.29881,46.76513],[7.29307,46.77136],[7.29532,46.77537],[7.29639,46.77729],[7.30081,46.77905],[7.30053,46.78064],[7.30113,46.78134],[7.30447,46.78321],[7.30447,46.78415],[7.30207,46.78638],[7.30351,46.78887],[7.30201,46.79079],[7.30159,46.79283],[7.30732,46.79872],[7.31044,46.80823],[7.31537,46.81246],[7.32028,46.8149],[7.32047,46.81564],[7.32072,46.82011],[7.31981,46.82515],[7.32891,46.829],[7.3302,46.82968],[7.33123,46.83177],[7.33103,46.8328],[7.32926,46.83563],[7.32333,46.84041],[7.30755,46.84704],[7.30775,46.84808],[7.30613,46.84999],[7.31207,46.85557],[7.31351,46.85936],[7.31739,46.8606],[7.32087,46.86154],[7.32576,46.85681],[7.323,46.85476],[7.32603,46.85163],[7.33181,46.8512],[7.33536,46.85043],[7.33678,46.84979],[7.33821,46.84946],[7.34726,46.85375],[7.34934,46.85331],[7.35167,46.85502],[7.35444,46.85875],[7.35772,46.86065],[7.35925,46.86311],[7.35794,46.86513],[7.35838,46.8688],[7.35738,46.8701],[7.35386,46.87129],[7.35253,46.87555],[7.35339,46.88676],[7.34843,46.88934],[7.32573,46.89373],[7.30935,46.89152],[7.29618,46.89377],[7.28938,46.89377],[7.28639,46.89269],[7.28245,46.8898],[7.2802,46.8896],[7.27259,46.89249],[7.26634,46.89361],[7.25931,46.89797],[7.24433,46.90037],[7.24314,46.89792],[7.23633,46.89809],[7.23203,46.90029],[7.2309,46.9024],[7.23032,46.90394],[7.22351,46.90276],[7.21755,46.89735],[7.21244,46.90173],[7.2088,46.9026],[7.20781,46.90913],[7.20578,46.91477],[7.20692,46.92481],[7.2111,46.92527],[7.21854,46.92434],[7.2342,46.92939],[7.23411,46.93669],[7.23477,46.93827],[7.2302,46.93995],[7.2282,46.93881],[7.22555,46.93633],[7.2174,46.93307],[7.2093,46.93334],[7.20823,46.93323],[7.2058,46.94023],[7.2055,46.94112],[7.20951,46.94188],[7.21027,46.94302],[7.21044,46.94569],[7.21011,46.94781],[7.20885,46.95435],[7.21102,46.95652],[7.20838,46.95768],[7.20742,46.95967],[7.19764,46.96065],[7.19459,46.96135],[7.19463,46.9629],[7.19552,46.96416],[7.19633,46.96365],[7.19794,46.96445],[7.1993,46.9638],[7.20646,46.96413],[7.20745,46.96751],[7.21422,46.96692],[7.21467,46.97133],[7.21739,46.97147],[7.21686,46.97271],[7.22247,46.97454],[7.22163,46.97556],[7.22821,46.97836],[7.23569,46.98456],[7.23486,46.98675],[7.22594,46.9924],[7.22625,46.99868],[7.22575,46.99915],[7.21779,47.00641],[7.21299,47.0068],[7.09058,46.978],[7.03295,46.98265],[6.73785,46.81195],[6.73908,46.71021],[6.81908,46.65533],[6.82741,46.65982],[6.82089,46.65179],[6.81729,46.64923],[6.81851,46.6478],[6.81458,46.64747],[6.81344,46.64953],[6.81194,46.6492],[6.81081,46.65038],[6.80674,46.65059],[6.80203,46.64889],[6.79891,46.64914],[6.79879,46.64781],[6.80367,46.64567],[6.80325,46.6448],[6.8038,46.64451],[6.80321,46.64376],[6.80171,46.64421],[6.79895,46.63959],[6.79692,46.63314],[6.79838,46.63016],[6.80043,46.62991],[6.80065,46.62843],[6.80172,46.62854],[6.80228,46.62775],[6.80197,46.62507],[6.80355,46.62124],[6.80244,46.61877],[6.80296,46.61615],[6.80185,46.61555],[6.80389,46.60903],[6.80239,46.60142],[6.79833,46.59986],[6.8002,46.59362],[6.80124,46.5925],[6.79848,46.58616],[6.79948,46.58559],[6.79894,46.58205],[6.79611,46.57932],[6.79626,46.57728],[6.79478,46.57542]]],terms_text:"Canton Fribourg 2016 'orthophoto technique'",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Canvec",name:"Canvec - English",type:"wms",template:"https://maps.geogratis.gc.ca/wms/canvec_en?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=canvec&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{id:"Canvec_French",name:"Canvec - French",type:"wms",template:"https://maps.geogratis.gc.ca/wms/canvec_fr?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=canvec&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{id:"capela_al",name:"Capela AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Capela&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.03321,-9.45741],[-36.03322,-9.45581],[-36.03336,-9.45483],[-36.0334,-9.45291],[-36.03327,-9.45141],[-36.03336,-9.44287],[-36.0335,-9.43821],[-36.03353,-9.42881],[-36.03363,-9.42027],[-36.03389,-9.41091],[-36.03389,-9.40032],[-36.03401,-9.3888],[-36.03413,-9.38528],[-36.03428,-9.38265],[-36.03417,-9.37849],[-36.03444,-9.36688],[-36.05246,-9.3671],[-36.05791,-9.36711],[-36.0716,-9.36727],[-36.08622,-9.36731],[-36.103,-9.3675],[-36.11652,-9.36755],[-36.12515,-9.36768],[-36.12522,-9.37473],[-36.12521,-9.37721],[-36.12511,-9.38038],[-36.12514,-9.38529],[-36.12505,-9.39026],[-36.12504,-9.39477],[-36.12506,-9.40172],[-36.12499,-9.40382],[-36.1248,-9.40679],[-36.12463,-9.41123],[-36.12474,-9.4136],[-36.12456,-9.4163],[-36.12459,-9.42461],[-36.12466,-9.42691],[-36.12465,-9.42925],[-36.12457,-9.4297],[-36.12464,-9.43538],[-36.12438,-9.44109],[-36.12446,-9.44387],[-36.12452,-9.44579],[-36.12438,-9.44736],[-36.12448,-9.44856],[-36.12448,-9.45095],[-36.12436,-9.45392],[-36.12434,-9.45791],[-36.11758,-9.45783],[-36.1089,-9.45778],[-36.10419,-9.4578],[-36.10116,-9.45773],[-36.0953,-9.45773],[-36.08461,-9.45767],[-36.07361,-9.45757],[-36.05726,-9.45741],[-36.04816,-9.45747],[-36.04177,-9.45739],[-36.03767,-9.45739],[-36.03321,-9.45741]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"COS2010_v1.0",name:"Carta de Uso do Solo 2010 (WMS)",type:"wms",template:"http://mapas.dgterritorio.pt/wms-inspire/cos2010v1?language=por&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=COS2010_v1.0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2010-01-01T00:00:00.000Z",startDate:"2010-01-01T00:00:00.000Z",zoomExtent:[14,18],polygon:[[[-7.31278,36.98391],[-7.44461,37.5718],[-7.1933,37.97019],[-6.97357,38.00807],[-6.90628,38.24142],[-7.06627,38.20743],[-7.27158,38.45628],[-7.20429,38.72356],[-7.0134,38.85468],[-6.91315,39.03839],[-6.97357,39.13113],[-7.17957,39.23651],[-7.28668,39.48497],[-7.44873,39.61838],[-7.34162,39.60886],[-6.99692,39.64906],[-6.81839,40.0192],[-7.01065,40.19986],[-6.85272,40.24285],[-6.76209,40.35073],[-6.77994,40.8886],[-6.88637,41.01151],[-6.79642,41.01721],[-6.63849,41.21689],[-6.4531,41.24116],[-6.29311,41.38763],[-6.15715,41.5908],[-6.31165,41.68932],[-6.51215,41.71188],[-6.49841,41.88081],[-6.56296,41.97991],[-6.80191,42.00951],[-7.20497,42.00135],[-7.22763,41.8849],[-7.36908,41.87058],[-7.72751,41.92885],[-7.92526,41.94009],[-8.07907,41.84706],[-8.1601,41.91812],[-8.01796,42.05031],[-8.19924,42.18681],[-8.39356,42.1023],[-8.66066,42.07886],[-8.88382,41.88081],[-9.17084,41.86956],[-9.04175,41.43655],[-9.01978,40.65981],[-9.15711,40.26695],[-9.81903,39.52099],[-9.74213,38.6512],[-9.12964,37.88136],[-9.27246,36.99378],[-9.09394,36.68604],[-7.80579,36.74989],[-7.31278,36.98391]]],terms_url:"http://www.dgterritorio.pt/dados_abertos/cos/",terms_text:"Direcção-Geral do Território",icon:"http://www.igeo.pt/favicon.ico"},{id:"BDGEx_ctm_multi",name:"Cartas Topográficas do Exército Brasileiro",type:"wms",template:"https://bdgex.eb.mil.br/mapcache?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ctmmultiescalas_mercator&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[1,22],polygon:[[[-69.94793,-4.23168],[-69.45659,-1.49119],[-69.3973,-1.36508],[-69.42989,-1.22173],[-69.39523,-1.12555],[-69.44292,-1.03351],[-69.41861,-0.99827],[-69.528,-0.92514],[-69.52577,-0.86807],[-69.62491,-0.74667],[-69.56179,-0.63692],[-69.60783,-0.5008],[-69.8446,-0.33732],[-69.92054,-0.32573],[-70.04323,-0.18998],[-70.04302,0.56359],[-69.80272,0.57162],[-69.6711,0.66759],[-69.60529,0.61328],[-69.59701,0.6542],[-69.48002,0.73577],[-69.35277,0.61416],[-69.28914,0.64997],[-69.29484,0.60389],[-69.19975,0.60591],[-69.19425,0.64982],[-69.11563,0.64484],[-69.19001,0.74056],[-69.14881,0.76751],[-69.13576,0.87204],[-69.18846,0.91324],[-69.1646,0.94156],[-69.21679,0.97245],[-69.19773,0.99974],[-69.24494,1.05655],[-69.37641,1.08794],[-69.42312,1.04265],[-69.60989,1.09826],[-69.67718,1.06994],[-69.70963,1.11817],[-69.84266,1.07272],[-69.83972,1.71893],[-69.78236,1.69244],[-69.53464,1.77691],[-69.39109,1.72935],[-68.1645,1.72945],[-68.19207,1.7797],[-68.23954,1.77044],[-68.22688,1.82918],[-68.28555,1.83084],[-68.19583,2.03479],[-68.18033,1.9767],[-68.14417,1.97854],[-68.09043,1.89774],[-67.90162,1.81165],[-67.76942,2.00924],[-67.55095,2.04769],[-67.49519,2.16312],[-67.39404,2.22894],[-67.32672,2.06387],[-67.33083,1.94158],[-67.22831,1.84127],[-67.15384,1.8315],[-67.15922,1.67504],[-67.08017,1.38546],[-67.13923,1.32002],[-67.08675,1.16704],[-66.85119,1.22896],[-66.31032,0.74494],[-66.19737,0.78161],[-66.07783,0.76174],[-66.07024,0.8123],[-65.96712,0.81511],[-65.88369,0.94159],[-65.77261,0.95859],[-65.7421,1.00125],[-65.58894,1.00471],[-65.49624,0.87415],[-65.60623,0.70748],[-65.54116,0.64881],[-65.44499,0.68921],[-65.39213,0.75692],[-65.41198,0.82415],[-65.32734,0.93596],[-65.21302,0.90282],[-65.1749,0.94131],[-65.15831,1.1246],[-65.07232,1.15303],[-65.06317,1.11205],[-65.01361,1.10905],[-64.97445,1.20288],[-64.90439,1.25153],[-64.86966,1.22713],[-64.80053,1.31527],[-64.74446,1.22569],[-64.5789,1.34041],[-64.52608,1.44322],[-64.43586,1.47006],[-64.3939,1.52901],[-64.35111,1.52921],[-64.34777,1.49508],[-64.41019,1.40301],[-64.33791,1.36134],[-64.3136,1.45617],[-64.19707,1.52071],[-64.0735,1.64902],[-64.05781,1.92899],[-63.97219,1.99194],[-63.83555,1.96644],[-63.71155,2.04645],[-63.66501,2.01861],[-63.6268,2.11222],[-63.56474,2.13571],[-63.44059,2.126],[-63.36742,2.26864],[-63.37088,2.41121],[-63.42123,2.45102],[-63.46036,2.39684],[-63.56398,2.44573],[-63.76805,2.43994],[-63.84358,2.4916],[-64.01914,2.46135],[-64.0573,2.49752],[-63.98033,2.7237],[-64.07709,2.87262],[-64.07156,2.92142],[-64.12349,2.99048],[-64.15754,2.98243],[-64.14592,3.03459],[-64.22642,3.12356],[-64.19795,3.20121],[-64.2444,3.43036],[-64.17437,3.56841],[-64.281,3.70928],[-64.54357,3.85713],[-64.72239,4.11775],[-64.80203,4.17422],[-64.81123,4.27048],[-64.69522,4.25323],[-64.623,4.135],[-64.5565,4.10529],[-64.164,4.127],[-63.964,3.868],[-63.928,3.925],[-63.85,3.95],[-63.682,3.908],[-63.676,4.019],[-63.591,3.886],[-63.497,3.84],[-63.489,3.874],[-63.434,3.865],[-63.428,3.977],[-63.204,3.952],[-63.226,3.836],[-63.103,3.794],[-63.059,3.748],[-63.081,3.694],[-62.96,3.608],[-62.835,3.739],[-62.743,3.674],[-62.729,3.805],[-62.788,3.894],[-62.753,4.032],[-62.555,4.019],[-62.552,4.109],[-62.437,4.183],[-62.14308,4.07768],[-62.071,4.126],[-62.076,4.154],[-61.982,4.181],[-61.93175,4.12009],[-61.92213,4.16126],[-61.824,4.164],[-61.802,4.229],[-61.724,4.27],[-61.56,4.252],[-61.508,4.322],[-61.513,4.406],[-61.288,4.458],[-61.323,4.535],[-61.217,4.536],[-61.14559,4.48016],[-61.095,4.522],[-60.994,4.519],[-60.932,4.587],[-60.949,4.653],[-60.899,4.717],[-60.751,4.756],[-60.591,4.927],[-60.661,5.164],[-60.73197,5.21203],[-60.434,5.182],[-60.20825,5.28346],[-60.172,5.227],[-60.135,5.249],[-60.094,5.14],[-59.96984,5.06334],[-60.02524,4.7065],[-60.0705,4.61688],[-60.15725,4.57247],[-60.16114,4.51773],[-59.79503,4.46554],[-59.66948,4.37629],[-59.7319,4.28587],[-59.73069,4.18076],[-59.61818,4.13166],[-59.65406,4.06943],[-59.58417,3.96851],[-59.5153,3.94493],[-59.59279,3.88538],[-59.59631,3.79386],[-59.66555,3.78126],[-59.66842,3.70277],[-59.86728,3.57776],[-59.80205,3.50156],[-59.8408,3.43174],[-59.80488,3.35695],[-59.907,3.212],[-59.98944,2.88185],[-59.99,2.686],[-59.895,2.482],[-59.89872,2.36245],[-59.72315,2.27614],[-59.751,1.859],[-59.677,1.839],[-59.663,1.871],[-59.69,1.757],[-59.539,1.723],[-59.381,1.507],[-59.329,1.514],[-59.327,1.464],[-59.284,1.45],[-59.253,1.389],[-58.978,1.302],[-58.918,1.317],[-58.886,1.261],[-58.912,1.239],[-58.82512,1.17127],[-58.73956,1.1999],[-58.69456,1.29732],[-58.49622,1.26796],[-58.45787,1.37145],[-58.50511,1.40317],[-58.50873,1.46295],[-58.38559,1.46999],[-58.39472,1.52651],[-58.32237,1.59702],[-58.236,1.54669],[-58.16064,1.56011],[-58.12942,1.4989],[-58.00423,1.50303],[-57.99009,1.65844],[-57.85206,1.66782],[-57.77431,1.72973],[-57.70509,1.73093],[-57.65042,1.68237],[-57.5376,1.7005],[-57.50187,1.78609],[-57.43776,1.82681],[-57.43343,1.90598],[-57.36768,1.92372],[-57.36912,1.95638],[-57.30712,1.99665],[-57.22923,1.93759],[-57.08668,2.02644],[-57.01421,1.91489],[-56.91971,1.93036],[-56.79793,1.85336],[-56.72096,1.92582],[-56.62145,1.94588],[-56.57976,1.90588],[-56.45126,1.95614],[-56.24404,1.87808],[-56.1709,1.90048],[-56.11762,1.85097],[-55.95638,1.84509],[-55.90385,1.88803],[-55.93635,1.98647],[-55.9031,2.04108],[-56.00307,2.1676],[-56.05505,2.18464],[-56.04288,2.22778],[-56.13887,2.26574],[-56.09012,2.37228],[-56.02181,2.34247],[-55.97052,2.52931],[-55.76663,2.45524],[-55.71028,2.39917],[-55.49971,2.44324],[-55.38533,2.41836],[-55.32019,2.51537],[-55.23474,2.50338],[-55.1234,2.56762],[-55.10302,2.52564],[-54.95424,2.58359],[-54.86846,2.43989],[-54.68917,2.45389],[-54.68861,2.32472],[-54.54667,2.31833],[-54.53778,2.26556],[-54.46861,2.21306],[-54.24917,2.14667],[-54.18056,2.1725],[-54.11083,2.11222],[-54.06139,2.19167],[-53.94083,2.21917],[-53.93194,2.27194],[-53.88667,2.26778],[-53.745,2.37389],[-53.73389,2.31222],[-53.52972,2.24917],[-53.45861,2.2575],[-53.32833,2.35333],[-53.21667,2.25333],[-53.27899,2.18603],[-53.11861,2.2225],[-52.99472,2.17528],[-52.90972,2.19583],[-52.84722,2.28556],[-52.67528,2.37389],[-52.59444,2.47389],[-52.54028,2.57028],[-52.56417,2.63944],[-52.43944,2.87778],[-52.39583,2.90222],[-52.33187,3.16938],[-52.21472,3.26833],[-51.97104,3.70696],[-51.92148,3.72422],[-51.922,3.7792],[-51.79731,3.88888],[-51.77783,3.97406],[-51.65867,4.05276],[-51.61325,4.17437],[-51.63716,4.50834],[-51.49427,4.67426],[-51.11466,4.42286],[-50.94232,4.20165],[-50.85475,3.92491],[-50.85507,3.45573],[-50.75331,2.94057],[-50.29908,2.33079],[-49.73896,1.79143],[-48.23746,-0.07449],[-44.84728,-1.07246],[-43.54602,-2.04705],[-43.24389,-2.12403],[-42.78189,-2.33053],[-41.78084,-2.51859],[-41.5085,-2.68486],[-40.66365,-2.63829],[-40.50396,-2.57531],[-39.8907,-2.65328],[-39.15187,-3.04444],[-38.57151,-3.48047],[-38.34306,-3.54434],[-38.21421,-3.74103],[-38.12555,-3.80544],[-37.90182,-4.07265],[-37.77934,-4.18046],[-37.63401,-4.24454],[-37.51218,-4.41535],[-37.22122,-4.51045],[-37.07874,-4.71355],[-36.91716,-4.71372],[-36.62299,-4.85815],[-36.18969,-4.88505],[-35.93627,-4.83327],[-35.56471,-4.90758],[-35.33677,-4.99239],[-35.17659,-5.12497],[-34.79469,-6.33583],[-34.71587,-6.74615],[-34.62306,-6.90323],[-34.59953,-7.11133],[-34.64374,-7.98735],[-34.81497,-8.62472],[-35.0253,-9.13761],[-35.55848,-9.81261],[-35.69663,-9.90026],[-35.96401,-10.31281],[-36.06155,-10.37447],[-36.26639,-10.64593],[-36.61764,-10.81082],[-36.78725,-10.95151],[-36.99511,-11.29602],[-37.11368,-11.41261],[-37.46002,-12.10275],[-37.89668,-12.75844],[-38.22146,-13.09717],[-38.61146,-13.26537],[-38.85337,-14.65508],[-38.74388,-15.60089],[-38.66456,-15.74741],[-38.64697,-15.88327],[-38.8013,-16.24838],[-38.92933,-16.80775],[-38.53193,-17.80026],[-38.49171,-18.0046],[-38.53661,-18.09683],[-38.67053,-18.16855],[-39.35288,-18.10892],[-39.4675,-18.30359],[-39.54529,-18.78548],[-39.49227,-19.40134],[-39.63477,-19.74403],[-39.86353,-19.88681],[-40.17827,-20.75426],[-40.81442,-21.67672],[-40.76948,-21.87786],[-40.81442,-22.09702],[-41.5086,-22.52638],[-41.59666,-22.83627],[-41.79292,-23.08823],[-41.91484,-23.18527],[-43.19603,-23.26703],[-44.07735,-23.40501],[-45.13508,-24.12014],[-46.61368,-24.67512],[-47.85376,-25.47012],[-48.2801,-26.23036],[-48.34897,-26.75081],[-48.11076,-27.28208],[-48.21148,-27.85592],[-48.40713,-28.43255],[-48.68615,-28.76016],[-48.9156,-28.86305],[-49.1579,-29.02871],[-49.52748,-29.42005],[-49.82565,-29.86559],[-50.17344,-30.64282],[-50.60441,-31.24135],[-51.18785,-31.77646],[-51.74211,-32.10539],[-51.89236,-32.29596],[-52.06117,-32.38504],[-52.27087,-32.92102],[-52.45986,-33.25369],[-52.61505,-33.42291],[-53.18109,-33.86891],[-53.43053,-33.73947],[-53.43951,-33.69347],[-53.53228,-33.6888],[-53.51819,-33.15342],[-53.44438,-33.05296],[-53.24468,-32.93489],[-53.31008,-32.91875],[-53.29454,-32.89931],[-53.18496,-32.85043],[-53.14569,-32.79202],[-53.0858,-32.78835],[-53.07558,-32.74088],[-53.24992,-32.6041],[-53.39137,-32.58573],[-53.46423,-32.48446],[-53.58321,-32.45192],[-53.74599,-32.07848],[-53.83375,-32.05524],[-53.84978,-32.00064],[-53.96073,-31.95532],[-53.96972,-31.91765],[-54.10019,-31.92825],[-54.4549,-31.65295],[-54.4528,-31.59959],[-54.58676,-31.45656],[-54.8367,-31.442],[-54.88623,-31.3773],[-54.94087,-31.38068],[-55.00723,-31.26692],[-55.07446,-31.33216],[-55.24003,-31.26062],[-55.29118,-31.14226],[-55.34037,-31.13144],[-55.34981,-31.03922],[-55.42306,-31.01823],[-55.57742,-30.83309],[-55.65834,-30.864],[-55.66621,-30.95395],[-55.723,-30.943],[-55.727,-30.979],[-55.882,-31.077],[-56.00989,-31.08267],[-56.02241,-30.78565],[-56.12508,-30.73871],[-56.17074,-30.61517],[-56.26095,-30.58509],[-56.29193,-30.51967],[-56.38177,-30.49956],[-56.46126,-30.38486],[-56.54706,-30.35946],[-56.54115,-30.31291],[-56.6187,-30.30054],[-56.64628,-30.20346],[-56.77662,-30.1633],[-56.80777,-30.10301],[-57.07113,-30.08671],[-57.22081,-30.28928],[-57.31303,-30.25785],[-57.39229,-30.30474],[-57.46574,-30.26589],[-57.52431,-30.28569],[-57.56087,-30.21134],[-57.64744,-30.19483],[-57.48047,-30.12315],[-57.33713,-29.99284],[-57.294,-29.831],[-57.121,-29.765],[-56.89888,-29.53179],[-56.81905,-29.48816],[-56.76618,-29.37768],[-56.70164,-29.35913],[-56.59315,-29.12516],[-56.418,-29.075],[-56.40775,-28.9748],[-56.29995,-28.89614],[-56.29652,-28.8027],[-56.17858,-28.75922],[-56.00984,-28.60718],[-56.01249,-28.50873],[-55.88357,-28.47923],[-55.87739,-28.36159],[-55.75157,-28.37095],[-55.69433,-28.42204],[-55.67047,-28.33218],[-55.77415,-28.27414],[-55.7757,-28.24481],[-55.63167,-28.17719],[-55.60747,-28.11604],[-55.55957,-28.16523],[-55.4952,-28.07682],[-55.44611,-28.09787],[-55.368,-28.029],[-55.38299,-27.97948],[-55.343,-27.972],[-55.32706,-27.92664],[-55.26574,-27.92969],[-55.196,-27.856],[-55.133,-27.897],[-55.106,-27.846],[-55.035,-27.858],[-55.081,-27.779],[-54.936,-27.772],[-54.90617,-27.63871],[-54.85,-27.624],[-54.814,-27.533],[-54.775,-27.586],[-54.67926,-27.57394],[-54.67709,-27.508],[-54.621,-27.541],[-54.574,-27.453],[-54.5246,-27.5059],[-54.444,-27.472],[-54.47081,-27.42674],[-54.41,-27.405],[-54.35466,-27.46528],[-54.34067,-27.40311],[-54.28484,-27.44819],[-54.261,-27.397],[-54.21736,-27.38603],[-54.172,-27.254],[-54.15619,-27.29619],[-54.08872,-27.30149],[-54.01026,-27.19978],[-53.96219,-27.19698],[-53.95195,-27.15169],[-53.79879,-27.14629],[-53.80233,-27.04028],[-53.76087,-27.06543],[-53.78585,-27.02674],[-53.7473,-27.03218],[-53.7092,-26.93414],[-53.67125,-26.94222],[-53.69684,-26.86015],[-53.66059,-26.85814],[-53.75814,-26.72045],[-53.7205,-26.65099],[-53.75864,-26.64113],[-53.63739,-26.24968],[-53.742,-26.108],[-53.73409,-26.04333],[-53.83619,-25.97166],[-53.82214,-25.79377],[-53.89113,-25.62286],[-53.94895,-25.6117],[-53.95638,-25.64628],[-54.01,-25.567],[-54.07592,-25.55766],[-54.098,-25.619],[-54.099,-25.495],[-54.206,-25.541],[-54.178,-25.584],[-54.23,-25.562],[-54.25,-25.597],[-54.28,-25.556],[-54.38395,-25.59747],[-54.43288,-25.69756],[-54.4927,-25.6181],[-54.59354,-25.59275],[-54.61941,-25.45312],[-54.4295,-25.15915],[-54.43548,-24.94769],[-54.32437,-24.66059],[-54.32714,-24.47073],[-54.25877,-24.36377],[-54.34537,-24.14705],[-54.28223,-24.07336],[-54.43984,-23.90446],[-54.66978,-23.81262],[-54.70533,-23.86452],[-54.89,-23.898],[-54.924,-23.959],[-55.06223,-23.99335],[-55.107,-23.961],[-55.22907,-24.01383],[-55.30415,-23.96504],[-55.34542,-23.99458],[-55.41423,-23.9645],[-55.44167,-23.70084],[-55.47306,-23.64834],[-55.53989,-23.625],[-55.52356,-23.19733],[-55.54199,-23.1561],[-55.59635,-23.14993],[-55.66578,-22.85274],[-55.61432,-22.65521],[-55.72364,-22.55166],[-55.74302,-22.39266],[-55.78939,-22.3846],[-55.84304,-22.28725],[-56.20983,-22.27805],[-56.36485,-22.16949],[-56.39404,-22.07434],[-56.50711,-22.09561],[-56.63705,-22.26341],[-56.70344,-22.21693],[-56.72026,-22.26479],[-56.79344,-22.24238],[-56.84285,-22.30155],[-56.88343,-22.24755],[-56.9967,-22.22246],[-57.3744,-22.23204],[-57.5804,-22.17534],[-57.6106,-22.09462],[-57.70751,-22.09111],[-57.80183,-22.15072],[-57.99384,-22.09023],[-58.00946,-22.04038],[-57.91281,-21.88266],[-57.96603,-21.85045],[-57.90866,-21.77355],[-57.94714,-21.74413],[-57.88329,-21.68903],[-57.93436,-21.65037],[-57.91387,-21.59021],[-57.96795,-21.52432],[-57.8535,-21.33109],[-57.92019,-21.27655],[-57.85066,-21.22407],[-57.86834,-21.04417],[-57.81919,-20.94066],[-57.92836,-20.90036],[-57.8552,-20.83403],[-57.89863,-20.78872],[-57.96183,-20.7916],[-57.93478,-20.74565],[-57.86732,-20.73265],[-57.92414,-20.66392],[-57.98848,-20.69879],[-57.99847,-20.43551],[-58.09339,-20.35554],[-58.09596,-20.25445],[-58.16216,-20.25953],[-58.12152,-20.19246],[-58.16932,-20.1694],[-57.95347,-20.02094],[-57.90248,-20.04207],[-57.85796,-19.9703],[-58.131,-19.758],[-57.784,-19.033],[-57.694,-19.011],[-57.719,-18.899],[-57.766,-18.899],[-57.557,-18.24],[-57.453,-18.231],[-57.574,-18.131],[-57.72302,-17.83074],[-57.68472,-17.8306],[-57.70991,-17.72702],[-57.783,-17.639],[-57.73696,-17.5583],[-57.883,-17.449],[-57.996,-17.515],[-58.06,-17.45],[-58.116,-17.451],[-58.151,-17.384],[-58.263,-17.344],[-58.396,-17.181],[-58.423,-16.989],[-58.474,-16.935],[-58.47,-16.703],[-58.436,-16.592],[-58.333,-16.49],[-58.32227,-16.26559],[-58.388,-16.261],[-58.43059,-16.32264],[-60.17335,-16.26672],[-60.238,-15.473],[-60.57543,-15.09677],[-60.244,-15.096],[-60.272,-14.62],[-60.321,-14.608],[-60.492,-14.188],[-60.479,-14.097],[-60.38066,-13.9888],[-60.45062,-13.9364],[-60.45599,-13.85422],[-60.49068,-13.85782],[-60.46776,-13.79446],[-60.76755,-13.68329],[-60.87678,-13.62149],[-60.91857,-13.54334],[-61.0056,-13.552],[-61.0129,-13.48925],[-61.0938,-13.49081],[-61.10314,-13.53056],[-61.18155,-13.50557],[-61.19236,-13.53695],[-61.29954,-13.47718],[-61.46527,-13.55427],[-61.57927,-13.48711],[-61.852,-13.538],[-61.892,-13.431],[-61.96968,-13.40759],[-61.97592,-13.36695],[-62.11498,-13.25932],[-62.115,-13.163],[-62.15254,-13.15993],[-62.16703,-13.11346],[-62.19,-13.153],[-62.214,-13.111],[-62.27269,-13.15687],[-62.39178,-13.13471],[-62.453,-13.064],[-62.612,-13.041],[-62.65,-12.965],[-62.729,-13.02],[-62.779,-13.009],[-62.89672,-12.8539],[-63.01134,-12.83602],[-63.08186,-12.72323],[-63.06163,-12.68584],[-63.15726,-12.6138],[-63.24621,-12.66222],[-63.23713,-12.69043],[-63.30125,-12.68138],[-63.44052,-12.608],[-63.43627,-12.56526],[-63.50641,-12.56562],[-63.55295,-12.50598],[-63.7848,-12.42871],[-63.88957,-12.44745],[-63.89949,-12.50204],[-63.95144,-12.53179],[-64.13464,-12.47732],[-64.16781,-12.51503],[-64.17504,-12.46675],[-64.22945,-12.45419],[-64.29018,-12.50313],[-64.29452,-12.4582],[-64.41057,-12.44436],[-64.51217,-12.3551],[-64.51256,-12.22562],[-64.70406,-12.1827],[-64.70719,-12.08684],[-64.75486,-12.15762],[-64.7688,-12.09356],[-64.83747,-12.11786],[-64.80954,-12.05633],[-64.84077,-12.01027],[-65.03548,-11.99408],[-65.01398,-11.90303],[-65.0727,-11.86587],[-65.08672,-11.7082],[-65.18953,-11.72353],[-65.18216,-11.75609],[-65.2593,-11.71053],[-65.21178,-11.52857],[-65.3074,-11.49957],[-65.33276,-11.33986],[-65.29053,-11.32275],[-65.34347,-11.3082],[-65.35834,-11.26834],[-65.35938,-11.22067],[-65.31294,-11.19578],[-65.35387,-11.18419],[-65.36177,-11.14031],[-65.28269,-11.09009],[-65.30071,-11.03142],[-65.25053,-10.98506],[-65.27476,-10.87302],[-65.35376,-10.78881],[-65.34667,-10.68155],[-65.40569,-10.63935],[-65.43011,-10.48505],[-65.288,-10.219],[-65.333,-9.965],[-65.28588,-9.84413],[-65.39313,-9.68683],[-65.44394,-9.66957],[-65.4883,-9.71015],[-65.55611,-9.84498],[-65.627,-9.83804],[-65.66963,-9.78129],[-65.71023,-9.80857],[-65.68395,-9.74992],[-65.7432,-9.78296],[-65.77013,-9.73442],[-65.79437,-9.79295],[-65.79962,-9.75663],[-65.86532,-9.79533],[-65.87184,-9.75307],[-65.91976,-9.75314],[-65.98222,-9.81011],[-66.151,-9.785],[-66.426,-9.899],[-66.435,-9.866],[-66.61995,-9.89353],[-66.63701,-9.94983],[-66.8751,-10.08268],[-66.9528,-10.18886],[-66.99683,-10.20017],[-67.01537,-10.25919],[-67.17745,-10.33923],[-67.31545,-10.31932],[-67.31155,-10.37716],[-67.40717,-10.37386],[-67.44361,-10.45492],[-67.57925,-10.5028],[-67.64028,-10.59807],[-67.67631,-10.60484],[-67.70825,-10.71083],[-67.86386,-10.64067],[-68.03289,-10.65486],[-68.10456,-10.71426],[-68.10333,-10.77541],[-68.27819,-10.98926],[-68.71576,-11.14483],[-68.75767,-11.00079],[-68.9118,-11.02192],[-69.41453,-10.92575],[-69.73653,-10.97445],[-69.76903,-10.92972],[-69.93442,-10.9219],[-70.15869,-11.04096],[-70.30672,-11.06983],[-70.43675,-11.03923],[-70.53033,-10.93465],[-70.62103,-10.99982],[-70.62338,-9.82054],[-70.53663,-9.76584],[-70.59972,-9.56264],[-70.55282,-9.57093],[-70.56894,-9.53127],[-70.50506,-9.50557],[-70.49665,-9.42489],[-70.59581,-9.4425],[-70.6632,-9.52601],[-70.75067,-9.56043],[-70.79332,-9.63846],[-70.96337,-9.74891],[-70.99391,-9.81721],[-71.13974,-9.85702],[-71.22052,-9.96968],[-72.1804,-9.99967],[-72.15136,-9.79742],[-72.26296,-9.75085],[-72.25282,-9.61633],[-72.28821,-9.60316],[-72.2829,-9.53995],[-72.35688,-9.4946],[-72.51954,-9.49128],[-72.71676,-9.4122],[-73.2038,-9.40715],[-73.07352,-9.23461],[-73.0093,-9.22236],[-73.02612,-9.17786],[-72.9582,-9.14302],[-72.94091,-8.98494],[-72.99931,-8.91778],[-73.05901,-8.90561],[-73.14992,-8.6839],[-73.20907,-8.6857],[-73.28745,-8.61948],[-73.3055,-8.47197],[-73.38956,-8.46878],[-73.41286,-8.41099],[-73.53744,-8.34587],[-73.62739,-8.02187],[-73.73175,-7.9684],[-73.7725,-7.90237],[-73.76164,-7.85803],[-73.69706,-7.86527],[-73.6843,-7.77644],[-73.82217,-7.71788],[-73.99094,-7.53635],[-73.948,-7.52661],[-73.91981,-7.46568],[-73.96394,-7.34764],[-73.87014,-7.37882],[-73.7003,-7.30429],[-73.79842,-7.11306],[-73.71046,-6.84019],[-73.53639,-6.6834],[-73.39115,-6.64193],[-73.35281,-6.59327],[-73.22741,-6.58884],[-73.18797,-6.52302],[-73.13523,-6.51046],[-73.10473,-6.40666],[-73.24664,-6.14963],[-73.23821,-6.04399],[-73.1868,-6.00512],[-73.15207,-5.86796],[-73.05303,-5.79517],[-72.95912,-5.65689],[-72.95888,-5.46613],[-72.86052,-5.27117],[-72.88725,-5.16307],[-72.73986,-5.08859],[-72.72765,-5.05199],[-72.6212,-5.0518],[-72.598,-4.98386],[-72.38202,-4.87296],[-72.36895,-4.80387],[-72.12601,-4.73454],[-72.04335,-4.62384],[-72.00689,-4.64622],[-71.99464,-4.60996],[-71.94743,-4.60877],[-71.91909,-4.5298],[-71.88549,-4.53803],[-71.9073,-4.51644],[-71.76637,-4.50446],[-71.75109,-4.46887],[-71.70817,-4.51165],[-71.65479,-4.47246],[-71.65032,-4.50395],[-71.61548,-4.4687],[-71.6335,-4.51524],[-71.59625,-4.52928],[-71.53703,-4.46442],[-71.49428,-4.48701],[-71.50716,-4.43909],[-71.43438,-4.42882],[-71.42562,-4.47058],[-71.35026,-4.42728],[-71.30752,-4.46288],[-71.32091,-4.42009],[-71.27782,-4.44217],[-71.26975,-4.385],[-71.20263,-4.37987],[-71.19422,-4.42471],[-71.14478,-4.38158],[-71.11491,-4.41119],[-71.10616,-4.37764],[-70.99389,-4.38654],[-70.99595,-4.34632],[-70.9357,-4.38432],[-70.84483,-4.27905],[-70.86447,-4.25245],[-70.81677,-4.23005],[-70.8458,-4.21872],[-70.75901,-4.15944],[-70.68147,-4.20791],[-70.64256,-4.12805],[-70.62521,-4.19151],[-70.56118,-4.1775],[-70.57357,-4.21169],[-70.54796,-4.13671],[-70.51036,-4.14824],[-70.50417,-4.20098],[-70.48535,-4.16132],[-70.43435,-4.16266],[-70.43146,-4.13217],[-70.33892,-4.17997],[-70.32281,-4.14206],[-70.28769,-4.16555],[-70.29141,-4.28709],[-70.21457,-4.29749],[-70.19194,-4.36179],[-70.15508,-4.27308],[-70.11749,-4.28585],[-70.10881,-4.25454],[-70.04189,-4.29409],[-70.07948,-4.31428],[-70.02826,-4.3703],[-69.99182,-4.37482],[-69.94793,-4.23168]]],terms_text:"BDGEx",icon:"https://osmlab.github.io/editor-layer-index/sources/south-america/br/Exercito.png"},{id:"Cartoriviera-2012",name:"Cartoriviera - Orthophoto 2012",type:"tms",template:"https://osmdata.asitvd.ch/tiles/cartoriviera2012/{zoom}/{x}/{y}.png",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[7.02235,46.42856],[7.0224,46.42045],[7.02176,46.41955],[7.02225,46.41954],[7.02161,46.41749],[7.02242,46.4174],[7.02242,46.41681],[7.02113,46.41443],[7.02164,46.41259],[7.0216,46.41188],[7.01918,46.41055],[7.01896,46.41004],[7.01757,46.40826],[7.01426,46.40696],[7.00948,46.40695],[7.00952,46.40451],[7.00368,46.40153],[6.97052,46.40139],[6.97056,46.39354],[6.96507,46.38333],[6.89379,46.383],[6.89327,46.39209],[6.8968,46.4],[6.89678,46.40097],[6.89395,46.401],[6.89768,46.40888],[6.89246,46.41386],[6.89237,46.41807],[6.8949,46.4193],[6.89285,46.41948],[6.89395,46.42312],[6.89225,46.42339],[6.89219,46.42802],[6.88743,46.428],[6.87652,46.43163],[6.86624,46.43633],[6.84003,46.44591],[6.83504,46.44934],[6.827,46.45204],[6.82695,46.45379],[6.81953,46.45655],[6.80361,46.45993],[6.78775,46.46253],[6.78697,46.5246],[6.82604,46.5248],[6.82609,46.52662],[6.83907,46.5267],[6.83888,46.55006],[6.90658,46.55042],[6.912,46.54301],[6.91083,46.53983],[6.90979,46.53512],[6.90931,46.53517],[6.90867,46.53373],[6.91195,46.53297],[6.91335,46.53604],[6.9268,46.53364],[6.92723,46.5349],[6.93714,46.53311],[6.93691,46.5327],[6.94028,46.53196],[6.94164,46.53477],[6.94309,46.53455],[6.94345,46.53528],[6.95641,46.53003],[6.95632,46.52733],[6.95111,46.52725],[6.95301,46.52611],[6.94341,46.52605],[6.94343,46.52546],[7.01629,46.52568],[7.02158,46.52211],[7.02196,46.47355],[7.07099,46.47368],[7.07402,46.4719],[7.07383,46.4326],[7.05947,46.43233],[7.05278,46.42879],[7.02235,46.42856]]],terms_url:"https://map.cartoriviera.ch/?baselayer_ref=orthos_2012_mobile&baselayer_opacity=100",terms_text:"Cartoriviera"},{id:"Catastro-Spain",name:"Catastro Spain",type:"wms",template:"http://ovc.catastro.meh.es/Cartografia/WMS/ServidorWMS.aspx?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=Catastro&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-17.88463,28.44606],[-17.89395,28.52255],[-18.02125,28.74819],[-18.02241,28.80384],[-17.9424,28.87261],[-17.89118,28.87371],[-17.89033,28.85151],[-17.76759,28.85378],[-17.76698,28.83122],[-17.74127,28.832],[-17.73949,28.76422],[-17.71398,28.76497],[-17.71293,28.73037],[-17.75744,28.69318],[-17.75708,28.67413],[-17.74579,28.67435],[-17.74573,28.61656],[-17.75197,28.58337],[-17.76225,28.5592],[-17.78331,28.54167],[-17.78316,28.49366],[-17.80861,28.4925],[-17.80601,28.4469],[-17.88463,28.44606]],[[-18.1661,27.78516],[-18.16349,27.69492],[-18.08898,27.69634],[-18.08734,27.67387],[-18.03641,27.67537],[-18.03501,27.63026],[-17.959,27.6324],[-17.86033,27.7926],[-17.86303,27.83688],[-17.8884,27.83649],[-17.88913,27.85905],[-17.99065,27.85675],[-18.03868,27.76558],[-18.11464,27.76379],[-18.11546,27.78636],[-18.1661,27.78516]],[[-17.36038,28.06398],[-17.36297,28.17572],[-17.33756,28.17637],[-17.33846,28.2213],[-17.18579,28.22388],[-17.08208,28.13518],[-17.08084,28.068],[-17.13154,28.06681],[-17.15633,28.02146],[-17.23211,28.02037],[-17.23199,27.99804],[-17.25768,27.99784],[-17.25785,28.01997],[-17.30867,28.01923],[-17.36038,28.06398]],[[-16.92782,28.32758],[-16.92866,28.37219],[-16.87767,28.37293],[-16.87807,28.39542],[-16.52143,28.42261],[-16.44571,28.49113],[-16.44625,28.53597],[-16.42059,28.53627],[-16.42092,28.55884],[-16.34433,28.55976],[-16.3446,28.58221],[-16.19125,28.58372],[-16.19162,28.60684],[-16.12793,28.60782],[-16.1278,28.59218],[-16.09951,28.5925],[-16.09934,28.51638],[-16.16481,28.51612],[-16.16475,28.49386],[-16.23858,28.44847],[-16.26535,28.44761],[-16.26586,28.403],[-16.31675,28.40176],[-16.31631,28.38019],[-16.34208,28.37951],[-16.34083,28.2893],[-16.41584,28.19761],[-16.4151,28.13113],[-16.51533,28.01648],[-16.61684,28.01532],[-16.61681,27.99305],[-16.71842,27.99192],[-16.7191,28.03714],[-16.7447,28.03679],[-16.74534,28.08181],[-16.7707,28.08161],[-16.8224,28.1259],[-16.82317,28.17087],[-16.8487,28.17075],[-16.85028,28.26079],[-16.87565,28.26055],[-16.87608,28.28322],[-16.90151,28.28277],[-16.90239,28.32793],[-16.92782,28.32758]],[[-15.85374,27.90089],[-15.8542,27.99018],[-15.82895,27.99066],[-15.82911,28.03558],[-15.7783,28.03632],[-15.75328,28.08143],[-15.72788,28.08157],[-15.72826,28.17186],[-15.49897,28.1728],[-15.49874,28.15041],[-15.44978,28.15075],[-15.45016,28.19614],[-15.39728,28.19614],[-15.39644,28.03836],[-15.37103,28.03802],[-15.37065,28.01532],[-15.34578,28.01532],[-15.34548,27.92544],[-15.3708,27.92524],[-15.37057,27.83521],[-15.39598,27.83474],[-15.421,27.78797],[-15.47181,27.78939],[-15.47188,27.76665],[-15.52277,27.76678],[-15.54771,27.72161],[-15.62361,27.72134],[-15.62415,27.74199],[-15.70075,27.74335],[-15.80167,27.81105],[-15.85374,27.90089]],[[-14.52156,28.04678],[-14.52244,28.11841],[-14.41575,28.11561],[-14.21688,28.22788],[-14.21537,28.33903],[-14.16417,28.45283],[-14.11151,28.4748],[-14.03358,28.72267],[-13.95652,28.74494],[-13.95617,28.76659],[-13.82902,28.76643],[-13.82896,28.78798],[-13.80007,28.78793],[-13.8013,28.71899],[-13.82757,28.71935],[-13.82786,28.6518],[-13.80258,28.6519],[-13.80339,28.53842],[-13.82885,28.53847],[-13.83151,28.39702],[-13.91582,28.22414],[-13.98564,28.22357],[-14.03696,28.17958],[-14.13871,28.17999],[-14.13866,28.15791],[-14.21537,28.15781],[-14.21472,28.11189],[-14.29132,28.04524],[-14.33197,28.03687],[-14.44578,28.04698],[-14.44666,28.0658],[-14.49628,28.06826],[-14.49593,28.04585],[-14.52156,28.04678]],[[-13.80066,28.84566],[-13.80093,28.82311],[-13.77569,28.82305],[-13.69729,28.88982],[-13.69729,28.91277],[-13.60725,28.9118],[-13.43886,29.00024],[-13.43746,29.13513],[-13.4117,29.13499],[-13.41056,29.22298],[-13.45928,29.25559],[-13.45974,29.2942],[-13.50913,29.29456],[-13.51006,29.31635],[-13.56354,29.31729],[-13.56406,29.27138],[-13.53892,29.2712],[-13.53897,29.25004],[-13.56613,29.25013],[-13.5666,29.203],[-13.51565,29.20223],[-13.51565,29.18206],[-13.5398,29.18278],[-13.54089,29.13753],[-13.65782,29.13685],[-13.71322,29.09351],[-13.76634,29.09345],[-13.85025,29.01659],[-13.85182,28.98343],[-13.85244,28.91486],[-13.90131,28.89245],[-13.9024,28.84698],[-13.80066,28.84566]],[[1.64799,38.99907],[1.73217,38.99936],[1.73147,39.04417],[1.64895,39.04319],[1.64816,39.12764],[1.39486,39.12657],[1.39544,39.08642],[1.22811,39.08526],[1.22911,39.0029],[1.14487,39.0018],[1.14528,38.832],[1.31136,38.83316],[1.31219,38.79065],[1.39469,38.79162],[1.39519,38.75296],[1.31128,38.75193],[1.31259,38.62388],[1.6489,38.62511],[1.64807,38.71115],[1.58456,38.71012],[1.58116,38.70054],[1.54915,38.70028],[1.51972,38.70921],[1.50355,38.72532],[1.48133,38.91551],[1.55189,38.92544],[1.56673,38.95666],[1.64874,38.95833],[1.64799,38.99907]],[[2.54507,39.41667],[2.43933,39.41611],[2.43871,39.48469],[2.43902,39.49934],[2.31223,39.49934],[2.31192,39.54179],[2.22907,39.541],[2.22835,39.62606],[2.34601,39.62709],[2.92704,39.96016],[3.14566,39.96005],[3.14608,40.00198],[3.23139,40.00198],[3.23129,39.83292],[3.14823,39.83316],[3.14844,39.79357],[3.48148,39.79318],[3.48035,39.5959],[3.31506,39.47846],[3.31462,39.37855],[3.08302,39.24994],[2.97986,39.25015],[2.97904,39.3335],[2.72874,39.33342],[2.72885,39.45814],[2.64569,39.45774],[2.64538,39.49966],[2.54528,39.49942],[2.54507,39.41667]],[[3.81204,40.04344],[3.72908,40.0438],[3.72862,39.95842],[3.81266,39.9576],[3.81228,39.91644],[3.9609,39.91598],[4.19381,39.79131],[4.31503,39.79058],[4.31599,39.83293],[4.39874,39.83204],[4.39737,39.91858],[4.3158,39.91933],[4.31619,40.0434],[4.2319,40.04436],[4.23248,40.08478],[4.14915,40.08611],[4.14906,40.12552],[4.0628,40.12722],[4.06242,40.08499],[3.81287,40.08529],[3.81204,40.04344]],[[-8.89106,41.82289],[-9.1092,42.57511],[-9.03655,42.73066],[-9.08834,42.72696],[-9.14661,42.77503],[-9.21855,42.90163],[-9.2761,42.86051],[-9.30991,42.93113],[-9.27898,42.9822],[-9.30991,43.06004],[-9.25236,43.10417],[-9.2315,43.17032],[-9.14733,43.21018],[-9.06748,43.19916],[-9.03367,43.24267],[-8.99842,43.24477],[-8.99986,43.29558],[-8.93727,43.30553],[-8.92936,43.32699],[-8.8639,43.32908],[-8.87613,43.37407],[-8.82217,43.37354],[-8.78548,43.31914],[-8.70635,43.305],[-8.60996,43.3296],[-8.55097,43.32332],[-8.52435,43.3364],[-8.52507,43.36465],[-8.45745,43.39184],[-8.36105,43.41118],[-8.36033,43.46342],[-8.33444,43.57974],[-8.27761,43.57088],[-8.06467,43.72392],[-7.99921,43.7234],[-7.9172,43.78264],[-7.85605,43.79146],[-7.83591,43.73743],[-7.66284,43.80982],[-7.31889,43.67827],[-7.19975,43.58308],[-6.24882,43.6075],[-6.12293,43.57901],[-5.85204,43.6799],[-5.60363,43.57087],[-5.28553,43.56191],[-5.17875,43.49916],[-4.90899,43.48367],[-4.61562,43.4192],[-4.18399,43.42492],[-3.80295,43.51954],[-3.74,43.48693],[-3.56128,43.54236],[-3.1083,43.38163],[-2.93857,43.46246],[-2.74524,43.47551],[-2.30462,43.31706],[-1.9854,43.3563],[-1.85528,43.39725],[-1.7698,43.39644],[-1.77005,43.37605],[-1.71005,43.37569],[-1.71135,43.33125],[-1.72259,43.31318],[-1.68904,43.31291],[-1.68811,43.33413],[-1.64467,43.33372],[-1.64498,43.31332],[-1.60299,43.31295],[-1.60344,43.29266],[-1.56359,43.29212],[-1.56305,43.31338],[-1.47799,43.31284],[-1.36677,43.27614],[-1.35688,43.23815],[-1.37037,43.1713],[-1.44231,43.08336],[-1.41983,43.06036],[-1.37307,43.05117],[-1.36407,43.11159],[-1.30203,43.13522],[-1.23549,43.13325],[-1.27955,43.07744],[-1.19232,43.06496],[-1.00619,43.00778],[-0.94234,42.9749],[-0.7562,42.98213],[-0.71484,42.96108],[-0.69685,42.90314],[-0.55118,42.82207],[-0.50442,42.84845],[-0.42889,42.82009],[-0.31648,42.86558],[-0.14563,42.81086],[-0.03143,42.71249],[0.18618,42.7541],[0.30218,42.71777],[0.36422,42.74287],[0.44875,42.71447],[0.62769,42.7224],[0.64118,42.85767],[0.71492,42.88272],[0.9676,42.81811],[1.10878,42.79898],[1.17532,42.73429],[1.36326,42.74155],[1.41137,42.70939],[1.48061,42.71034],[1.4813,42.50107],[1.64436,42.50203],[1.64328,42.54245],[1.73041,42.54342],[1.73164,42.50118],[2.06386,42.50164],[2.06456,42.45902],[2.39693,42.45994],[2.39768,42.41784],[2.48048,42.41797],[2.48098,42.37594],[2.64479,42.37626],[2.64448,42.45924],[2.81133,42.45961],[2.81126,42.50104],[3.06388,42.50085],[3.06388,42.45915],[3.23078,42.45934],[3.23049,42.37644],[3.31415,42.37604],[3.31412,42.33399],[3.39785,42.33404],[3.39739,42.29009],[3.31389,42.29084],[3.31397,42.20702],[3.14759,42.2073],[3.14759,42.12606],[3.23055,42.126],[3.24668,41.95294],[3.19452,41.85589],[3.06054,41.76474],[2.78358,41.63718],[2.26293,41.42716],[2.16492,41.29893],[1.86008,41.22322],[1.3763,41.11627],[1.17937,41.04646],[1.08585,41.04849],[0.75854,40.81956],[0.9114,40.73376],[0.87813,40.67514],[0.66502,40.53587],[0.55801,40.55022],[0.43392,40.37576],[0.26756,40.19192],[0.16415,40.06472],[0.07513,40.01447],[0.01039,39.89522],[-0.09392,39.81169],[-0.18474,39.63117],[-0.29085,39.50363],[-0.28636,39.33343],[-0.18564,39.17746],[-0.21352,39.15585],[-0.11101,38.97222],[0.00949,38.88268],[0.12189,38.87218],[0.23429,38.79864],[0.25587,38.72642],[0.09581,38.61338],[-0.0022,38.60706],[-0.05705,38.52691],[-0.27197,38.47624],[-0.37987,38.39312],[-0.38347,38.33813],[-0.45091,38.33108],[-0.50487,38.28309],[-0.48238,38.19481],[-0.42933,38.16583],[-0.45451,38.14886],[-0.584,38.17219],[-0.61367,38.11986],[-0.63705,37.96122],[-0.68111,37.94562],[-0.73237,37.88107],[-0.72158,37.78306],[-0.68831,37.734],[-0.66415,37.62315],[-0.71939,37.58784],[-0.91963,37.53758],[-1.11071,37.51641],[-1.33832,37.52867],[-1.44089,37.39037],[-1.6767,37.27652],[-1.85408,36.91229],[-2.06835,36.69291],[-2.21588,36.66192],[-2.37219,36.78018],[-2.68129,36.65911],[-2.92015,36.66756],[-3.09402,36.71263],[-3.46108,36.65488],[-3.72804,36.69291],[-4.37435,36.66333],[-4.65712,36.44042],[-4.9188,36.45313],[-5.16995,36.35135],[-5.28411,36.19702],[-5.26809,36.12418],[-5.35248,36.12247],[-5.35161,36.04014],[-5.43658,36.03889],[-5.43532,36.00344],[-5.68886,36.00365],[-5.68996,36.04053],[-5.85506,36.03856],[-5.85668,36.12421],[-5.93848,36.12215],[-5.94003,36.16556],[-5.99834,36.1645],[-6.03573,36.1781],[-6.07752,36.22241],[-6.15061,36.28646],[-6.23154,36.37701],[-6.33585,36.53106],[-6.32146,36.58163],[-6.40419,36.6235],[-6.47433,36.74897],[-6.41588,36.79939],[-6.49052,36.91738],[-6.62989,37.0194],[-6.87448,37.10838],[-7.04264,37.18507],[-7.26474,37.18435],[-7.37535,37.15354],[-7.40832,37.16822],[-7.42029,37.21183],[-7.42492,37.23505],[-7.43805,37.2452],[-7.44597,37.33261],[-7.4481,37.39094],[-7.46963,37.40758],[-7.4647,37.45305],[-7.50197,37.51641],[-7.51916,37.52292],[-7.52196,37.57237],[-7.45013,37.66958],[-7.4249,37.75992],[-7.31666,37.83997],[-7.26833,37.98895],[-7.15368,38.01552],[-7.11771,38.05536],[-7.0143,38.02438],[-6.99632,38.10756],[-6.96147,38.20125],[-7.08062,38.15708],[-7.34027,38.44024],[-7.26383,38.73807],[-7.04352,38.87297],[-7.06151,38.90796],[-6.96934,39.01983],[-7.00081,39.08879],[-7.15368,39.09577],[-7.15255,39.16029],[-7.24472,39.19689],[-7.25596,39.28133],[-7.33689,39.35351],[-7.3279,39.45599],[-7.51449,39.58865],[-7.55271,39.67954],[-7.05027,39.67522],[-6.99519,39.81954],[-6.92213,39.87909],[-6.88616,40.02299],[-7.04128,40.13479],[-7.01767,40.26615],[-6.8086,40.34501],[-6.86818,40.44516],[-6.85356,40.60664],[-6.83783,40.87576],[-6.9536,41.03704],[-6.80186,41.03959],[-6.76814,41.13871],[-6.64112,41.26556],[-6.56244,41.26303],[-6.21737,41.5791],[-6.31628,41.64465],[-6.51523,41.64129],[-6.58717,41.68832],[-6.54783,41.85597],[-6.62988,41.91121],[-7.13345,41.94048],[-7.16829,41.87188],[-7.42569,41.78477],[-7.95398,41.84593],[-8.13045,41.78058],[-8.25185,41.90786],[-8.12933,42.03488],[-8.24848,42.1008],[-8.36762,42.05575],[-8.60704,42.03405],[-8.89106,41.82289]]]},{id:"Chorzow-buildings",name:"Chorzów: Buildings",type:"wms",template:"http://e-odgik.chorzow.eu/services/wms/wms_funkcje_bud/MapServer/WMSServer?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=3,2,1,8,7,6&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[18.94562,50.31836],[18.94349,50.32385],[18.95466,50.32599],[18.96426,50.33307],[18.96521,50.33777],[18.98692,50.33621],[18.98468,50.32501],[18.99777,50.32204],[18.99686,50.31716],[18.98774,50.31736],[18.98695,50.30989],[18.99736,50.30031],[18.99744,50.29722],[19.00546,50.29548],[19.0073,50.28342],[19.00574,50.27871],[18.99236,50.27091],[18.96792,50.28661],[18.96215,50.27972],[18.96169,50.27337],[18.95824,50.27291],[18.95492,50.26193],[18.96014,50.24927],[18.95672,50.2452],[18.95555,50.23891],[18.94132,50.243],[18.93475,50.25314],[18.93324,50.26032],[18.93262,50.26588],[18.9296,50.26774],[18.92976,50.27131],[18.92669,50.27289],[18.92632,50.27623],[18.93071,50.27619],[18.93437,50.28729],[18.92383,50.29533],[18.92635,50.29986],[18.91905,50.30212],[18.91955,50.30576],[18.92463,50.31192],[18.9262,50.31883],[18.94562,50.31836]]],terms_text:"Urząd Miasta Chorzowa"},{id:"South_Africa-CapeTown-Aerial-2013",name:"City of Cape Town 2013 Aerial",type:"tms",template:"https://{switch:a,b,c}.coct.aerial.openstreetmap.org.za/layer/za_coct_aerial_2013/{zoom}/{x}/{y}.jpg",endDate:"2015-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[1,21],polygon:[[[18.44866,-33.89362],[18.44859,-33.90264],[18.4702,-33.90277],[18.48139,-33.84724],[18.44925,-33.80107],[18.42815,-33.73564],[18.43914,-33.71772],[18.40719,-33.65899],[18.33224,-33.57752],[18.33245,-33.55045],[18.354,-33.55059],[18.35425,-33.5236],[18.36524,-33.52366],[18.36503,-33.5148],[18.37601,-33.51477],[18.37605,-33.5058],[18.42966,-33.50594],[18.4297,-33.48785],[18.44049,-33.48789],[18.4406,-33.46988],[18.49437,-33.4701],[18.49433,-33.47916],[18.51583,-33.47917],[18.51574,-33.48819],[18.52647,-33.4883],[18.52632,-33.52435],[18.54793,-33.52443],[18.54795,-33.51539],[18.56937,-33.5155],[18.56937,-33.52448],[18.58012,-33.52453],[18.58007,-33.5426],[18.59078,-33.5426],[18.59074,-33.56064],[18.57995,-33.56053],[18.57988,-33.56962],[18.5907,-33.56962],[18.59065,-33.57868],[18.62301,-33.57873],[18.62292,-33.58773],[18.66597,-33.58789],[18.66593,-33.61493],[18.67672,-33.61497],[18.67658,-33.65103],[18.6873,-33.65102],[18.68734,-33.66004],[18.69807,-33.66009],[18.69807,-33.66907],[18.75204,-33.66925],[18.75208,-33.64219],[18.77364,-33.64225],[18.77371,-33.63319],[18.82746,-33.6333],[18.82752,-33.6603],[18.81667,-33.66029],[18.8166,-33.67832],[18.80581,-33.67831],[18.80581,-33.70539],[18.8274,-33.70544],[18.82733,-33.72347],[18.83812,-33.72343],[18.83804,-33.74139],[18.81652,-33.74137],[18.81637,-33.79551],[18.80559,-33.79551],[18.80551,-33.81357],[18.79476,-33.81355],[18.79472,-33.83154],[18.77311,-33.83152],[18.77313,-33.84052],[18.76236,-33.84052],[18.76227,-33.90359],[18.75146,-33.90352],[18.75108,-33.98478],[18.76191,-33.9848],[18.76178,-34.02988],[18.7726,-34.0299],[18.77258,-34.03891],[18.79403,-34.03894],[18.79388,-34.0407],[18.79845,-34.04119],[18.80324,-34.04118],[18.80341,-34.03892],[18.81594,-34.03897],[18.81634,-34.02993],[18.83798,-34.03165],[18.838,-34.03],[18.84842,-34.03001],[18.84847,-34.02185],[18.85993,-34.02347],[18.85986,-34.02101],[18.86827,-34.02208],[18.86819,-34.02117],[18.88546,-34.02343],[18.88518,-34.02132],[18.90252,-34.02103],[18.90258,-34.012],[18.91342,-34.012],[18.91348,-33.99396],[18.94588,-33.99403],[18.94586,-34.0031],[18.96743,-34.003],[18.96747,-34.01208],[18.97822,-34.01208],[18.97833,-34.02114],[18.98914,-34.02114],[18.98916,-34.03913],[19.00002,-34.03913],[19.00002,-34.05718],[19.01084,-34.05725],[19.01079,-34.08414],[19,-34.08413],[19.00002,-34.0932],[18.98915,-34.09317],[18.98918,-34.1022],[18.97832,-34.10218],[18.97832,-34.11123],[18.9675,-34.11121],[18.96749,-34.12925],[18.9566,-34.12924],[18.95656,-34.13824],[18.96742,-34.13831],[18.96742,-34.14732],[18.98918,-34.1473],[18.98918,-34.1653],[18.97827,-34.16529],[18.97832,-34.17429],[18.96742,-34.17427],[18.96746,-34.1833],[18.95656,-34.18332],[18.95656,-34.19236],[18.94574,-34.19232],[18.9457,-34.20132],[18.93487,-34.20137],[18.93489,-34.21933],[18.90236,-34.21935],[18.90176,-34.23626],[18.88784,-34.23735],[18.88942,-34.25541],[18.88059,-34.25534],[18.87927,-34.26443],[18.86969,-34.26441],[18.86971,-34.27344],[18.83714,-34.27342],[18.83712,-34.26438],[18.84802,-34.2644],[18.84803,-34.23739],[18.81549,-34.21028],[18.81565,-34.17413],[18.85488,-34.15627],[18.76176,-34.08405],[18.65337,-34.07748],[18.47974,-34.11012],[18.44637,-34.13423],[18.44445,-34.16409],[18.436,-34.16405],[18.43597,-34.18202],[18.44681,-34.18211],[18.44673,-34.19111],[18.46593,-34.19121],[18.48662,-34.24539],[18.47889,-34.25437],[18.486,-34.25437],[18.46771,-34.29941],[18.48922,-34.34458],[18.50011,-34.34458],[18.49992,-34.36262],[18.46743,-34.36251],[18.46737,-34.35349],[18.3916,-34.31707],[18.39177,-34.29002],[18.37016,-34.28087],[18.37068,-34.21789],[18.34923,-34.18162],[18.32747,-34.18149],[18.32767,-34.16346],[18.31187,-34.15438],[18.3114,-34.14353],[18.32367,-34.13469],[18.34993,-34.10421],[18.33932,-34.08828],[18.36125,-34.05972],[18.35505,-34.05538],[18.34275,-34.06433],[18.32,-34.06443],[18.29607,-34.04513],[18.30682,-34.02526],[18.32877,-34.0192],[18.32892,-34.00125],[18.33974,-34.00127],[18.3398,-33.98663],[18.36287,-33.97351],[18.36381,-33.92925],[18.37262,-33.92927],[18.37284,-33.91776],[18.39773,-33.89335],[18.44866,-33.89362]]],terms_url:"https://www.capetown.gov.za",terms_text:"City of Cape Town Aerial - OPENSTREETMAP USE ONLY",description:"OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the municipal area. 12cm ground sample distance"},{id:"South_Africa-CapeTown-Aerial",name:"City of Cape Town 2015 Aerial",type:"tms",template:"https://{switch:a,b,c}.coct.aerial.openstreetmap.org.za/layer/za_coct_aerial_2015/{zoom}/{x}/{y}.jpg",endDate:"2016-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[1,21],polygon:[[[18.44866,-33.89362],[18.44859,-33.90264],[18.4702,-33.90277],[18.48139,-33.84724],[18.44925,-33.80107],[18.42815,-33.73564],[18.43914,-33.71772],[18.40719,-33.65899],[18.33224,-33.57752],[18.33245,-33.55045],[18.354,-33.55059],[18.35425,-33.5236],[18.36524,-33.52366],[18.36503,-33.5148],[18.37601,-33.51477],[18.37605,-33.5058],[18.42966,-33.50594],[18.4297,-33.48785],[18.44049,-33.48789],[18.4406,-33.46988],[18.49437,-33.4701],[18.49433,-33.47916],[18.51583,-33.47917],[18.51574,-33.48819],[18.52647,-33.4883],[18.52632,-33.52435],[18.54793,-33.52443],[18.54795,-33.51539],[18.56937,-33.5155],[18.56937,-33.52448],[18.58012,-33.52453],[18.58007,-33.5426],[18.59078,-33.5426],[18.59074,-33.56064],[18.57995,-33.56053],[18.57988,-33.56962],[18.5907,-33.56962],[18.59065,-33.57868],[18.62301,-33.57873],[18.62292,-33.58773],[18.66597,-33.58789],[18.66593,-33.61493],[18.67672,-33.61497],[18.67658,-33.65103],[18.6873,-33.65102],[18.68734,-33.66004],[18.69807,-33.66009],[18.69807,-33.66907],[18.75204,-33.66925],[18.75208,-33.64219],[18.77364,-33.64225],[18.77371,-33.63319],[18.82746,-33.6333],[18.82752,-33.6603],[18.81667,-33.66029],[18.8166,-33.67832],[18.80581,-33.67831],[18.80581,-33.70539],[18.8274,-33.70544],[18.82733,-33.72347],[18.83812,-33.72343],[18.83804,-33.74139],[18.81652,-33.74137],[18.81637,-33.79551],[18.80559,-33.79551],[18.80551,-33.81357],[18.79476,-33.81355],[18.79472,-33.83154],[18.77311,-33.83152],[18.77313,-33.84052],[18.76236,-33.84052],[18.76227,-33.90359],[18.75146,-33.90352],[18.75108,-33.98478],[18.76191,-33.9848],[18.76178,-34.02988],[18.7726,-34.0299],[18.77258,-34.03891],[18.79403,-34.03894],[18.79388,-34.0407],[18.79845,-34.04119],[18.80324,-34.04118],[18.80341,-34.03892],[18.81594,-34.03897],[18.81634,-34.02993],[18.83798,-34.03165],[18.838,-34.03],[18.84842,-34.03001],[18.84847,-34.02185],[18.85993,-34.02347],[18.85986,-34.02101],[18.86827,-34.02208],[18.86819,-34.02117],[18.88546,-34.02343],[18.88518,-34.02132],[18.90252,-34.02103],[18.90258,-34.012],[18.91342,-34.012],[18.91348,-33.99396],[18.94588,-33.99403],[18.94586,-34.0031],[18.96743,-34.003],[18.96747,-34.01208],[18.97822,-34.01208],[18.97833,-34.02114],[18.98914,-34.02114],[18.98916,-34.03913],[19.00002,-34.03913],[19.00002,-34.05718],[19.01084,-34.05725],[19.01079,-34.08414],[19,-34.08413],[19.00002,-34.0932],[18.98915,-34.09317],[18.98918,-34.1022],[18.97832,-34.10218],[18.97832,-34.11123],[18.9675,-34.11121],[18.96749,-34.12925],[18.9566,-34.12924],[18.95656,-34.13824],[18.96742,-34.13831],[18.96742,-34.14732],[18.98918,-34.1473],[18.98918,-34.1653],[18.97827,-34.16529],[18.97832,-34.17429],[18.96742,-34.17427],[18.96746,-34.1833],[18.95656,-34.18332],[18.95656,-34.19236],[18.94574,-34.19232],[18.9457,-34.20132],[18.93487,-34.20137],[18.93489,-34.21933],[18.90236,-34.21935],[18.90176,-34.23626],[18.88784,-34.23735],[18.88942,-34.25541],[18.88059,-34.25534],[18.87927,-34.26443],[18.86969,-34.26441],[18.86971,-34.27344],[18.83714,-34.27342],[18.83712,-34.26438],[18.84802,-34.2644],[18.84803,-34.23739],[18.81549,-34.21028],[18.81565,-34.17413],[18.85488,-34.15627],[18.76176,-34.08405],[18.65337,-34.07748],[18.47974,-34.11012],[18.44637,-34.13423],[18.44445,-34.16409],[18.436,-34.16405],[18.43597,-34.18202],[18.44681,-34.18211],[18.44673,-34.19111],[18.46593,-34.19121],[18.48662,-34.24539],[18.47889,-34.25437],[18.486,-34.25437],[18.46771,-34.29941],[18.48922,-34.34458],[18.50011,-34.34458],[18.49992,-34.36262],[18.46743,-34.36251],[18.46737,-34.35349],[18.3916,-34.31707],[18.39177,-34.29002],[18.37016,-34.28087],[18.37068,-34.21789],[18.34923,-34.18162],[18.32747,-34.18149],[18.32767,-34.16346],[18.31187,-34.15438],[18.3114,-34.14353],[18.32367,-34.13469],[18.34993,-34.10421],[18.33932,-34.08828],[18.36125,-34.05972],[18.35505,-34.05538],[18.34275,-34.06433],[18.32,-34.06443],[18.29607,-34.04513],[18.30682,-34.02526],[18.32877,-34.0192],[18.32892,-34.00125],[18.33974,-34.00127],[18.3398,-33.98663],[18.36287,-33.97351],[18.36381,-33.92925],[18.37262,-33.92927],[18.37284,-33.91776],[18.39773,-33.89335],[18.44866,-33.89362]]],terms_url:"https://www.capetown.gov.za",terms_text:"City of Cape Town Aerial - OPENSTREETMAP USE ONLY",description:"OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the municipal area. 8cm ground sample distance"},{id:"City_of_Melbourne_Feb_2019",name:"City of Melbourne Feb 2019",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/openstreetmapau.melbourne190203/{zoom}/{x}/{y}.jpg?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcGF1IiwiYSI6ImNqbWl3bXZ6aDA0MTkzd21xdnV1d2k0azEifQ.HYkMOqH_E2fYd1b0oXRe6w",endDate:"2019-02-03T00:00:00.000Z",startDate:"2019-02-02T00:00:00.000Z",zoomExtent:[10,22],polygon:[[[144.9146,-37.7993],[144.9139,-37.7989],[144.9128,-37.7986],[144.9114,-37.7988],[144.9098,-37.7998],[144.906,-37.8064],[144.9043,-37.8126],[144.9042,-37.8142],[144.9056,-37.8209],[144.9043,-37.8224],[144.899,-37.8273],[144.8969,-37.8301],[144.896,-37.8335],[144.896,-37.8387],[144.897,-37.8419],[144.9011,-37.8469],[144.9052,-37.8502],[144.9068,-37.8506],[144.908,-37.8502],[144.9084,-37.8495],[144.907,-37.8477],[144.9076,-37.8469],[144.9045,-37.8416],[144.9053,-37.8414],[144.9081,-37.8458],[144.9118,-37.8502],[144.9127,-37.8504],[144.9155,-37.8489],[144.9155,-37.8481],[144.914,-37.8459],[144.9162,-37.8445],[144.914,-37.8413],[144.9163,-37.8399],[144.9165,-37.8384],[144.9151,-37.8344],[144.9183,-37.8331],[144.9195,-37.8326],[144.921,-37.8309],[144.9219,-37.83],[144.923,-37.8295],[144.9294,-37.8282],[144.9353,-37.827],[144.9411,-37.8269],[144.9418,-37.8268],[144.9458,-37.8275],[144.9471,-37.8279],[144.9478,-37.8278],[144.9579,-37.8295],[144.9592,-37.8294],[144.9613,-37.829],[144.9625,-37.8297],[144.9648,-37.8318],[144.9657,-37.8323],[144.9662,-37.8323],[144.9703,-37.8312],[144.9705,-37.8323],[144.9711,-37.8331],[144.9735,-37.8351],[144.9743,-37.836],[144.9794,-37.85],[144.9797,-37.8508],[144.9806,-37.8512],[144.9843,-37.8515],[144.9848,-37.8514],[144.9854,-37.8508],[144.9892,-37.8311],[144.9889,-37.8304],[144.9923,-37.8104],[144.9924,-37.8098],[144.9919,-37.809],[144.9745,-37.8071],[144.9768,-37.7933],[144.9767,-37.7928],[144.9764,-37.7923],[144.9759,-37.7922],[144.9698,-37.7915],[144.9708,-37.7857],[144.9704,-37.785],[144.9699,-37.7848],[144.9649,-37.7842],[144.9651,-37.7825],[144.9651,-37.782],[144.9642,-37.7814],[144.964,-37.7808],[144.9639,-37.7796],[144.9635,-37.7785],[144.9627,-37.7778],[144.9614,-37.7772],[144.9392,-37.7746],[144.9384,-37.7746],[144.938,-37.7749],[144.9373,-37.776],[144.9366,-37.7769],[144.9361,-37.7773],[144.936,-37.7779],[144.9378,-37.7814],[144.9383,-37.7842],[144.9391,-37.7865],[144.9389,-37.7867],[144.9388,-37.7873],[144.9377,-37.788],[144.9322,-37.7874],[144.9312,-37.7878],[144.9308,-37.7879],[144.93,-37.7874],[144.9218,-37.7864],[144.9149,-37.7794],[144.9143,-37.7787],[144.9137,-37.7785],[144.9129,-37.7786],[144.9082,-37.7813],[144.9072,-37.7821],[144.9057,-37.7845],[144.9053,-37.7864],[144.9043,-37.7866],[144.9037,-37.7872],[144.9032,-37.7883],[144.902,-37.7888],[144.9014,-37.7896],[144.9019,-37.791],[144.9026,-37.792],[144.9042,-37.7929],[144.9064,-37.7938],[144.9081,-37.7946],[144.9105,-37.7952],[144.9127,-37.796],[144.9143,-37.797],[144.9153,-37.7978],[144.9154,-37.7981],[144.9153,-37.7985],[144.9152,-37.7987],[144.9148,-37.7991],[144.9146,-37.7993]]],terms_url:"https://data.melbourne.vic.gov.au/Environment/2019-Aerial-Imagery/cwpe-ugri",terms_text:"City of Melbourne",best:true,icon:"https://www.melbourne.vic.gov.au/_catalogs/masterpage/android-icon.png"},{id:"City_of_Melbourne_May_2018",name:"City of Melbourne May 2018",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/openstreetmapau.gdbhzo3g/{zoom}/{x}/{y}.jpg?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcGF1IiwiYSI6ImNqbWl3bXZ6aDA0MTkzd21xdnV1d2k0azEifQ.HYkMOqH_E2fYd1b0oXRe6w",endDate:"2018-05-01T00:00:00.000Z",startDate:"2018-05-01T00:00:00.000Z",zoomExtent:[10,22],polygon:[[[144.9146,-37.7993],[144.9139,-37.7989],[144.9128,-37.7986],[144.9114,-37.7988],[144.9098,-37.7998],[144.906,-37.8064],[144.9043,-37.8126],[144.9042,-37.8142],[144.9056,-37.8209],[144.9043,-37.8224],[144.899,-37.8273],[144.8969,-37.8301],[144.896,-37.8335],[144.896,-37.8387],[144.897,-37.8419],[144.9011,-37.8469],[144.9052,-37.8502],[144.9068,-37.8506],[144.908,-37.8502],[144.9084,-37.8495],[144.907,-37.8477],[144.9076,-37.8469],[144.9045,-37.8416],[144.9053,-37.8414],[144.9081,-37.8458],[144.9118,-37.8502],[144.9127,-37.8504],[144.9155,-37.8489],[144.9155,-37.8481],[144.914,-37.8459],[144.9162,-37.8445],[144.914,-37.8413],[144.9163,-37.8399],[144.9165,-37.8384],[144.9151,-37.8344],[144.9183,-37.8331],[144.9195,-37.8326],[144.921,-37.8309],[144.9219,-37.83],[144.923,-37.8295],[144.9294,-37.8282],[144.9353,-37.827],[144.9411,-37.8269],[144.9418,-37.8268],[144.9458,-37.8275],[144.9471,-37.8279],[144.9478,-37.8278],[144.9579,-37.8295],[144.9592,-37.8294],[144.9613,-37.829],[144.9625,-37.8297],[144.9648,-37.8318],[144.9657,-37.8323],[144.9662,-37.8323],[144.9703,-37.8312],[144.9705,-37.8323],[144.9711,-37.8331],[144.9735,-37.8351],[144.9743,-37.836],[144.9794,-37.85],[144.9797,-37.8508],[144.9806,-37.8512],[144.9843,-37.8515],[144.9848,-37.8514],[144.9854,-37.8508],[144.9892,-37.8311],[144.9889,-37.8304],[144.9923,-37.8104],[144.9924,-37.8098],[144.9919,-37.809],[144.9745,-37.8071],[144.9768,-37.7933],[144.9767,-37.7928],[144.9764,-37.7923],[144.9759,-37.7922],[144.9698,-37.7915],[144.9708,-37.7857],[144.9704,-37.785],[144.9699,-37.7848],[144.9649,-37.7842],[144.9651,-37.7825],[144.9651,-37.782],[144.9642,-37.7814],[144.964,-37.7808],[144.9639,-37.7796],[144.9635,-37.7785],[144.9627,-37.7778],[144.9614,-37.7772],[144.9392,-37.7746],[144.9384,-37.7746],[144.938,-37.7749],[144.9373,-37.776],[144.9366,-37.7769],[144.9361,-37.7773],[144.936,-37.7779],[144.9378,-37.7814],[144.9383,-37.7842],[144.9391,-37.7865],[144.9389,-37.7867],[144.9388,-37.7873],[144.9377,-37.788],[144.9322,-37.7874],[144.9312,-37.7878],[144.9308,-37.7879],[144.93,-37.7874],[144.9218,-37.7864],[144.9149,-37.7794],[144.9143,-37.7787],[144.9137,-37.7785],[144.9129,-37.7786],[144.9082,-37.7813],[144.9072,-37.7821],[144.9057,-37.7845],[144.9053,-37.7864],[144.9043,-37.7866],[144.9037,-37.7872],[144.9032,-37.7883],[144.902,-37.7888],[144.9014,-37.7896],[144.9019,-37.791],[144.9026,-37.792],[144.9042,-37.7929],[144.9064,-37.7938],[144.9081,-37.7946],[144.9105,-37.7952],[144.9127,-37.796],[144.9143,-37.797],[144.9153,-37.7978],[144.9154,-37.7981],[144.9153,-37.7985],[144.9152,-37.7987],[144.9148,-37.7991],[144.9146,-37.7993]]],terms_url:"https://data.melbourne.vic.gov.au/Property-Planning/2018-Aerial-Imagery-True-Ortho-/qa5h-sfgh",terms_text:"City of Melbourne",icon:"https://www.melbourne.vic.gov.au/_catalogs/masterpage/android-icon.png"},{id:"Zuerich-aerial_2011",name:"City of Zürich Orthophoto 2011",type:"wms",template:"https://www.gis.stadt-zuerich.ch/maps/services/wms/WMS-ZH-STZH-OGD/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Luftbild_2011&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[8.44624,47.44143],[8.63178,47.43968],[8.62895,47.31377],[8.44381,47.31555],[8.44624,47.44143]]],terms_text:"Stadt Zürich Open Government Data"},{id:"Zuerich-overview",name:"City of Zürich Overview map (Steets, buildings, house numbers)",type:"wms",template:"https://www.gis.stadt-zuerich.ch/maps/services/wms/WMS-ZH-STZH-OGD/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Uebersichtsplan&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,21],polygon:[[[8.45788,47.44582],[8.57392,47.44477],[8.57362,47.43124],[8.60266,47.43096],[8.6023,47.41746],[8.6318,47.41716],[8.6295,47.33628],[8.57162,47.33678],[8.57152,47.32292],[8.54236,47.3236],[8.54212,47.31013],[8.48418,47.31062],[8.48478,47.33762],[8.45582,47.33787],[8.45609,47.35135],[8.42713,47.35161],[8.42864,47.43259],[8.45745,47.43231],[8.45788,47.44582]]],terms_text:"Stadt Zürich Open Government Data"},{id:"Czech_CUZK-KM",name:"Czech CUZK:KM",type:"wms",template:"https://wms.cuzk.cz/wms.asp?service=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&LAYERS=parcelni_cisla_i,obrazy_parcel_i,RST_KMD_I,hranice_parcel_i,DEF_BUDOVY,RST_KN_I,dalsi_p_mapy_i,prehledka_kat_prac,prehledka_kat_uz,prehledka_kraju-linie&FORMAT=image/png&transparent=TRUE&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[15.00637,49.01774],[15.15599,49.00138],[15.1909,48.94246],[15.31059,48.98829],[15.40535,48.9752],[15.54,48.91624],[15.71456,48.86706],[15.83425,48.88018],[15.9689,48.81782],[16.0886,48.74553],[16.39781,48.74553],[16.48758,48.81454],[16.6721,48.7784],[16.68208,48.73566],[16.90152,48.71263],[16.9464,48.6237],[17.11597,48.83752],[17.21072,48.88018],[17.40523,48.81782],[17.48004,48.85393],[17.52991,48.81782],[17.70446,48.86706],[17.81418,48.9359],[17.884,48.9359],[17.94385,49.02101],[18.06354,49.03409],[18.1184,49.09944],[18.1982,49.30473],[18.38771,49.33399],[18.57723,49.50917],[18.75677,49.49946],[18.84654,49.52536],[18.87646,49.57066],[18.79666,49.69341],[18.64206,49.70954],[18.5872,49.83515],[18.61214,49.88338],[18.56226,49.93477],[18.51239,49.90587],[18.36277,49.95403],[18.32786,49.92193],[18.26303,49.97328],[18.1184,50.00534],[18.06354,50.07581],[17.91392,49.97969],[17.77927,50.03098],[17.71444,50.12379],[17.60472,50.16534],[17.75932,50.21962],[17.73438,50.34391],[17.63963,50.28021],[17.38029,50.28021],[17.35037,50.34391],[17.28055,50.33754],[17.18579,50.40752],[16.90152,50.46152],[16.86661,50.41388],[16.96635,50.31844],[17.03617,50.23238],[16.83668,50.21962],[16.712,50.1046],[16.58233,50.15895],[16.56238,50.23876],[16.43272,50.33754],[16.35292,50.39163],[16.27811,50.39163],[16.20829,50.44565],[16.39781,50.53449],[16.44768,50.59785],[16.35292,50.6706],[16.23821,50.67692],[16.21827,50.63266],[16.1285,50.68324],[16.0487,50.60734],[15.98885,50.7022],[15.87415,50.68324],[15.82926,50.76533],[15.72952,50.74324],[15.45023,50.81577],[15.39039,50.77479],[15.38041,50.85987],[15.29563,50.88504],[15.29563,50.98876],[15.17095,51.02014],[14.99141,51.00131],[15.00637,50.88819],[14.84179,50.8756],[14.7969,50.82522],[14.63233,50.85672],[14.66225,50.93536],[14.57248,50.92278],[14.61238,50.98562],[14.49767,51.04837],[14.41788,51.02328],[14.30816,51.06717],[14.2533,51.00445],[14.40291,50.93221],[14.37299,50.89763],[14.24332,50.90706],[14.20841,50.84412],[14.03386,50.81262],[13.979,50.82522],[13.90419,50.79686],[13.87427,50.74009],[13.53514,50.7243],[13.53015,50.65796],[13.4703,50.61367],[13.39051,50.66428],[13.32567,50.58835],[13.25086,50.61051],[13.196,50.50595],[13.05137,50.52181],[12.96659,50.4107],[12.82695,50.47105],[12.70227,50.41388],[12.50777,50.40116],[12.34319,50.25471],[12.32324,50.18451],[12.24843,50.27384],[12.17362,50.33118],[12.09881,50.33436],[12.11876,50.25152],[12.22349,50.16534],[12.20354,50.12379],[12.50278,49.97328],[12.47784,49.93798],[12.54766,49.91551],[12.46787,49.80298],[12.40802,49.76111],[12.48283,49.68696],[12.5327,49.68696],[12.51774,49.62885],[12.60751,49.54155],[12.67234,49.43788],[12.81199,49.34699],[12.94664,49.34374],[13.23091,49.12882],[13.32567,49.10597],[13.43539,49.0439],[13.41544,48.99484],[13.50022,48.94901],[13.56506,48.98829],[13.68475,48.88346],[13.7446,48.90313],[13.82439,48.77511],[13.8992,48.77511],[14.05879,48.67642],[14.04383,48.63029],[14.14358,48.59072],[14.37299,48.56103],[14.48271,48.65007],[14.57747,48.60721],[14.62734,48.63359],[14.70713,48.58083],[14.74703,48.70276],[14.81187,48.73895],[14.81685,48.79483],[14.98642,48.76525],[15.00637,49.01774]]],overlay:true},{id:"Czech_CUZK-KM-tms",name:"Czech CUZK:KM tiles proxy",type:"tms",template:"https://osm-{switch:a,b,c}.zby.cz/tiles_cuzk.php/{zoom}/{x}/{y}.png",zoomExtent:[13,18],polygon:[[[15.00637,49.01774],[15.15599,49.00138],[15.1909,48.94246],[15.31059,48.98829],[15.40535,48.9752],[15.54,48.91624],[15.71456,48.86706],[15.83425,48.88018],[15.9689,48.81782],[16.0886,48.74553],[16.39781,48.74553],[16.48758,48.81454],[16.6721,48.7784],[16.68208,48.73566],[16.90152,48.71263],[16.9464,48.6237],[17.11597,48.83752],[17.21072,48.88018],[17.40523,48.81782],[17.48004,48.85393],[17.52991,48.81782],[17.70446,48.86706],[17.81418,48.9359],[17.884,48.9359],[17.94385,49.02101],[18.06354,49.03409],[18.1184,49.09944],[18.1982,49.30473],[18.38771,49.33399],[18.57723,49.50917],[18.75677,49.49946],[18.84654,49.52536],[18.87646,49.57066],[18.79666,49.69341],[18.64206,49.70954],[18.5872,49.83515],[18.61214,49.88338],[18.56226,49.93477],[18.51239,49.90587],[18.36277,49.95403],[18.32786,49.92193],[18.26303,49.97328],[18.1184,50.00534],[18.06354,50.07581],[17.91392,49.97969],[17.77927,50.03098],[17.71444,50.12379],[17.60472,50.16534],[17.75932,50.21962],[17.73438,50.34391],[17.63963,50.28021],[17.38029,50.28021],[17.35037,50.34391],[17.28055,50.33754],[17.18579,50.40752],[16.90152,50.46152],[16.86661,50.41388],[16.96635,50.31844],[17.03617,50.23238],[16.83668,50.21962],[16.712,50.1046],[16.58233,50.15895],[16.56238,50.23876],[16.43272,50.33754],[16.35292,50.39163],[16.27811,50.39163],[16.20829,50.44565],[16.39781,50.53449],[16.44768,50.59785],[16.35292,50.6706],[16.23821,50.67692],[16.21827,50.63266],[16.1285,50.68324],[16.0487,50.60734],[15.98885,50.7022],[15.87415,50.68324],[15.82926,50.76533],[15.72952,50.74324],[15.45023,50.81577],[15.39039,50.77479],[15.38041,50.85987],[15.29563,50.88504],[15.29563,50.98876],[15.17095,51.02014],[14.99141,51.00131],[15.00637,50.88819],[14.84179,50.8756],[14.7969,50.82522],[14.63233,50.85672],[14.66225,50.93536],[14.57248,50.92278],[14.61238,50.98562],[14.49767,51.04837],[14.41788,51.02328],[14.30816,51.06717],[14.2533,51.00445],[14.40291,50.93221],[14.37299,50.89763],[14.24332,50.90706],[14.20841,50.84412],[14.03386,50.81262],[13.979,50.82522],[13.90419,50.79686],[13.87427,50.74009],[13.53514,50.7243],[13.53015,50.65796],[13.4703,50.61367],[13.39051,50.66428],[13.32567,50.58835],[13.25086,50.61051],[13.196,50.50595],[13.05137,50.52181],[12.96659,50.4107],[12.82695,50.47105],[12.70227,50.41388],[12.50777,50.40116],[12.34319,50.25471],[12.32324,50.18451],[12.24843,50.27384],[12.17362,50.33118],[12.09881,50.33436],[12.11876,50.25152],[12.22349,50.16534],[12.20354,50.12379],[12.50278,49.97328],[12.47784,49.93798],[12.54766,49.91551],[12.46787,49.80298],[12.40802,49.76111],[12.48283,49.68696],[12.5327,49.68696],[12.51774,49.62885],[12.60751,49.54155],[12.67234,49.43788],[12.81199,49.34699],[12.94664,49.34374],[13.23091,49.12882],[13.32567,49.10597],[13.43539,49.0439],[13.41544,48.99484],[13.50022,48.94901],[13.56506,48.98829],[13.68475,48.88346],[13.7446,48.90313],[13.82439,48.77511],[13.8992,48.77511],[14.05879,48.67642],[14.04383,48.63029],[14.14358,48.59072],[14.37299,48.56103],[14.48271,48.65007],[14.57747,48.60721],[14.62734,48.63359],[14.70713,48.58083],[14.74703,48.70276],[14.81187,48.73895],[14.81685,48.79483],[14.98642,48.76525],[15.00637,49.01774]]],overlay:true},{id:"Czech_pLPIS",name:"Czech pLPIS",type:"wms",template:"https://eagri.cz/public/app/wms/plpis.fcgi?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=LPIS_FB4,LPIS_FB4_KOD&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&TRANSPARENT=true",projection:"EPSG:4326",polygon:[[[15.00637,49.01774],[15.15599,49.00138],[15.1909,48.94246],[15.31059,48.98829],[15.40535,48.9752],[15.54,48.91624],[15.71456,48.86706],[15.83425,48.88018],[15.9689,48.81782],[16.0886,48.74553],[16.39781,48.74553],[16.48758,48.81454],[16.6721,48.7784],[16.68208,48.73566],[16.90152,48.71263],[16.9464,48.6237],[17.11597,48.83752],[17.21072,48.88018],[17.40523,48.81782],[17.48004,48.85393],[17.52991,48.81782],[17.70446,48.86706],[17.81418,48.9359],[17.884,48.9359],[17.94385,49.02101],[18.06354,49.03409],[18.1184,49.09944],[18.1982,49.30473],[18.38771,49.33399],[18.57723,49.50917],[18.75677,49.49946],[18.84654,49.52536],[18.87646,49.57066],[18.79666,49.69341],[18.64206,49.70954],[18.5872,49.83515],[18.61214,49.88338],[18.56226,49.93477],[18.51239,49.90587],[18.36277,49.95403],[18.32786,49.92193],[18.26303,49.97328],[18.1184,50.00534],[18.06354,50.07581],[17.91392,49.97969],[17.77927,50.03098],[17.71444,50.12379],[17.60472,50.16534],[17.75932,50.21962],[17.73438,50.34391],[17.63963,50.28021],[17.38029,50.28021],[17.35037,50.34391],[17.28055,50.33754],[17.18579,50.40752],[16.90152,50.46152],[16.86661,50.41388],[16.96635,50.31844],[17.03617,50.23238],[16.83668,50.21962],[16.712,50.1046],[16.58233,50.15895],[16.56238,50.23876],[16.43272,50.33754],[16.35292,50.39163],[16.27811,50.39163],[16.20829,50.44565],[16.39781,50.53449],[16.44768,50.59785],[16.35292,50.6706],[16.23821,50.67692],[16.21827,50.63266],[16.1285,50.68324],[16.0487,50.60734],[15.98885,50.7022],[15.87415,50.68324],[15.82926,50.76533],[15.72952,50.74324],[15.45023,50.81577],[15.39039,50.77479],[15.38041,50.85987],[15.29563,50.88504],[15.29563,50.98876],[15.17095,51.02014],[14.99141,51.00131],[15.00637,50.88819],[14.84179,50.8756],[14.7969,50.82522],[14.63233,50.85672],[14.66225,50.93536],[14.57248,50.92278],[14.61238,50.98562],[14.49767,51.04837],[14.41788,51.02328],[14.30816,51.06717],[14.2533,51.00445],[14.40291,50.93221],[14.37299,50.89763],[14.24332,50.90706],[14.20841,50.84412],[14.03386,50.81262],[13.979,50.82522],[13.90419,50.79686],[13.87427,50.74009],[13.53514,50.7243],[13.53015,50.65796],[13.4703,50.61367],[13.39051,50.66428],[13.32567,50.58835],[13.25086,50.61051],[13.196,50.50595],[13.05137,50.52181],[12.96659,50.4107],[12.82695,50.47105],[12.70227,50.41388],[12.50777,50.40116],[12.34319,50.25471],[12.32324,50.18451],[12.24843,50.27384],[12.17362,50.33118],[12.09881,50.33436],[12.11876,50.25152],[12.22349,50.16534],[12.20354,50.12379],[12.50278,49.97328],[12.47784,49.93798],[12.54766,49.91551],[12.46787,49.80298],[12.40802,49.76111],[12.48283,49.68696],[12.5327,49.68696],[12.51774,49.62885],[12.60751,49.54155],[12.67234,49.43788],[12.81199,49.34699],[12.94664,49.34374],[13.23091,49.12882],[13.32567,49.10597],[13.43539,49.0439],[13.41544,48.99484],[13.50022,48.94901],[13.56506,48.98829],[13.68475,48.88346],[13.7446,48.90313],[13.82439,48.77511],[13.8992,48.77511],[14.05879,48.67642],[14.04383,48.63029],[14.14358,48.59072],[14.37299,48.56103],[14.48271,48.65007],[14.57747,48.60721],[14.62734,48.63359],[14.70713,48.58083],[14.74703,48.70276],[14.81187,48.73895],[14.81685,48.79483],[14.98642,48.76525],[15.00637,49.01774]]]},{id:"Czech_RUIAN-budovy",name:"Czech RUIAN budovy",type:"tms",template:"https://tile.poloha.net/budovy/{zoom}/{x}/{y}.png",zoomExtent:[12,20],polygon:[[[15.00637,49.01774],[15.15599,49.00138],[15.1909,48.94246],[15.31059,48.98829],[15.40535,48.9752],[15.54,48.91624],[15.71456,48.86706],[15.83425,48.88018],[15.9689,48.81782],[16.0886,48.74553],[16.39781,48.74553],[16.48758,48.81454],[16.6721,48.7784],[16.68208,48.73566],[16.90152,48.71263],[16.9464,48.6237],[17.11597,48.83752],[17.21072,48.88018],[17.40523,48.81782],[17.48004,48.85393],[17.52991,48.81782],[17.70446,48.86706],[17.81418,48.9359],[17.884,48.9359],[17.94385,49.02101],[18.06354,49.03409],[18.1184,49.09944],[18.1982,49.30473],[18.38771,49.33399],[18.57723,49.50917],[18.75677,49.49946],[18.84654,49.52536],[18.87646,49.57066],[18.79666,49.69341],[18.64206,49.70954],[18.5872,49.83515],[18.61214,49.88338],[18.56226,49.93477],[18.51239,49.90587],[18.36277,49.95403],[18.32786,49.92193],[18.26303,49.97328],[18.1184,50.00534],[18.06354,50.07581],[17.91392,49.97969],[17.77927,50.03098],[17.71444,50.12379],[17.60472,50.16534],[17.75932,50.21962],[17.73438,50.34391],[17.63963,50.28021],[17.38029,50.28021],[17.35037,50.34391],[17.28055,50.33754],[17.18579,50.40752],[16.90152,50.46152],[16.86661,50.41388],[16.96635,50.31844],[17.03617,50.23238],[16.83668,50.21962],[16.712,50.1046],[16.58233,50.15895],[16.56238,50.23876],[16.43272,50.33754],[16.35292,50.39163],[16.27811,50.39163],[16.20829,50.44565],[16.39781,50.53449],[16.44768,50.59785],[16.35292,50.6706],[16.23821,50.67692],[16.21827,50.63266],[16.1285,50.68324],[16.0487,50.60734],[15.98885,50.7022],[15.87415,50.68324],[15.82926,50.76533],[15.72952,50.74324],[15.45023,50.81577],[15.39039,50.77479],[15.38041,50.85987],[15.29563,50.88504],[15.29563,50.98876],[15.17095,51.02014],[14.99141,51.00131],[15.00637,50.88819],[14.84179,50.8756],[14.7969,50.82522],[14.63233,50.85672],[14.66225,50.93536],[14.57248,50.92278],[14.61238,50.98562],[14.49767,51.04837],[14.41788,51.02328],[14.30816,51.06717],[14.2533,51.00445],[14.40291,50.93221],[14.37299,50.89763],[14.24332,50.90706],[14.20841,50.84412],[14.03386,50.81262],[13.979,50.82522],[13.90419,50.79686],[13.87427,50.74009],[13.53514,50.7243],[13.53015,50.65796],[13.4703,50.61367],[13.39051,50.66428],[13.32567,50.58835],[13.25086,50.61051],[13.196,50.50595],[13.05137,50.52181],[12.96659,50.4107],[12.82695,50.47105],[12.70227,50.41388],[12.50777,50.40116],[12.34319,50.25471],[12.32324,50.18451],[12.24843,50.27384],[12.17362,50.33118],[12.09881,50.33436],[12.11876,50.25152],[12.22349,50.16534],[12.20354,50.12379],[12.50278,49.97328],[12.47784,49.93798],[12.54766,49.91551],[12.46787,49.80298],[12.40802,49.76111],[12.48283,49.68696],[12.5327,49.68696],[12.51774,49.62885],[12.60751,49.54155],[12.67234,49.43788],[12.81199,49.34699],[12.94664,49.34374],[13.23091,49.12882],[13.32567,49.10597],[13.43539,49.0439],[13.41544,48.99484],[13.50022,48.94901],[13.56506,48.98829],[13.68475,48.88346],[13.7446,48.90313],[13.82439,48.77511],[13.8992,48.77511],[14.05879,48.67642],[14.04383,48.63029],[14.14358,48.59072],[14.37299,48.56103],[14.48271,48.65007],[14.57747,48.60721],[14.62734,48.63359],[14.70713,48.58083],[14.74703,48.70276],[14.81187,48.73895],[14.81685,48.79483],[14.98642,48.76525],[15.00637,49.01774]]],terms_url:"https://poloha.net/",terms_text:"Czech RUIAN"},{id:"Czech_RUIAN-parcely",name:"Czech RUIAN parcely",type:"tms",template:"https://tile.poloha.net/parcely/{zoom}/{x}/{y}.png",zoomExtent:[12,20],polygon:[[[15.00637,49.01774],[15.15599,49.00138],[15.1909,48.94246],[15.31059,48.98829],[15.40535,48.9752],[15.54,48.91624],[15.71456,48.86706],[15.83425,48.88018],[15.9689,48.81782],[16.0886,48.74553],[16.39781,48.74553],[16.48758,48.81454],[16.6721,48.7784],[16.68208,48.73566],[16.90152,48.71263],[16.9464,48.6237],[17.11597,48.83752],[17.21072,48.88018],[17.40523,48.81782],[17.48004,48.85393],[17.52991,48.81782],[17.70446,48.86706],[17.81418,48.9359],[17.884,48.9359],[17.94385,49.02101],[18.06354,49.03409],[18.1184,49.09944],[18.1982,49.30473],[18.38771,49.33399],[18.57723,49.50917],[18.75677,49.49946],[18.84654,49.52536],[18.87646,49.57066],[18.79666,49.69341],[18.64206,49.70954],[18.5872,49.83515],[18.61214,49.88338],[18.56226,49.93477],[18.51239,49.90587],[18.36277,49.95403],[18.32786,49.92193],[18.26303,49.97328],[18.1184,50.00534],[18.06354,50.07581],[17.91392,49.97969],[17.77927,50.03098],[17.71444,50.12379],[17.60472,50.16534],[17.75932,50.21962],[17.73438,50.34391],[17.63963,50.28021],[17.38029,50.28021],[17.35037,50.34391],[17.28055,50.33754],[17.18579,50.40752],[16.90152,50.46152],[16.86661,50.41388],[16.96635,50.31844],[17.03617,50.23238],[16.83668,50.21962],[16.712,50.1046],[16.58233,50.15895],[16.56238,50.23876],[16.43272,50.33754],[16.35292,50.39163],[16.27811,50.39163],[16.20829,50.44565],[16.39781,50.53449],[16.44768,50.59785],[16.35292,50.6706],[16.23821,50.67692],[16.21827,50.63266],[16.1285,50.68324],[16.0487,50.60734],[15.98885,50.7022],[15.87415,50.68324],[15.82926,50.76533],[15.72952,50.74324],[15.45023,50.81577],[15.39039,50.77479],[15.38041,50.85987],[15.29563,50.88504],[15.29563,50.98876],[15.17095,51.02014],[14.99141,51.00131],[15.00637,50.88819],[14.84179,50.8756],[14.7969,50.82522],[14.63233,50.85672],[14.66225,50.93536],[14.57248,50.92278],[14.61238,50.98562],[14.49767,51.04837],[14.41788,51.02328],[14.30816,51.06717],[14.2533,51.00445],[14.40291,50.93221],[14.37299,50.89763],[14.24332,50.90706],[14.20841,50.84412],[14.03386,50.81262],[13.979,50.82522],[13.90419,50.79686],[13.87427,50.74009],[13.53514,50.7243],[13.53015,50.65796],[13.4703,50.61367],[13.39051,50.66428],[13.32567,50.58835],[13.25086,50.61051],[13.196,50.50595],[13.05137,50.52181],[12.96659,50.4107],[12.82695,50.47105],[12.70227,50.41388],[12.50777,50.40116],[12.34319,50.25471],[12.32324,50.18451],[12.24843,50.27384],[12.17362,50.33118],[12.09881,50.33436],[12.11876,50.25152],[12.22349,50.16534],[12.20354,50.12379],[12.50278,49.97328],[12.47784,49.93798],[12.54766,49.91551],[12.46787,49.80298],[12.40802,49.76111],[12.48283,49.68696],[12.5327,49.68696],[12.51774,49.62885],[12.60751,49.54155],[12.67234,49.43788],[12.81199,49.34699],[12.94664,49.34374],[13.23091,49.12882],[13.32567,49.10597],[13.43539,49.0439],[13.41544,48.99484],[13.50022,48.94901],[13.56506,48.98829],[13.68475,48.88346],[13.7446,48.90313],[13.82439,48.77511],[13.8992,48.77511],[14.05879,48.67642],[14.04383,48.63029],[14.14358,48.59072],[14.37299,48.56103],[14.48271,48.65007],[14.57747,48.60721],[14.62734,48.63359],[14.70713,48.58083],[14.74703,48.70276],[14.81187,48.73895],[14.81685,48.79483],[14.98642,48.76525],[15.00637,49.01774]]],terms_url:"https://poloha.net/",terms_text:"Czech RUIAN"},{id:"Czestochowa-buildings",name:"Częstochowa: Buildings",type:"wms",template:"http://geoportal.czestochowa.um.gov.pl/isdp/scripts/isdp.dll/wms?FORMAT=image/png&transparent=true&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ieg_budynek&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[19.08183,50.8554],[19.0888,50.86563],[19.11082,50.86616],[19.10961,50.86092],[19.11709,50.85933],[19.11531,50.86283],[19.11997,50.86327],[19.1227,50.85452],[19.12938,50.85519],[19.12566,50.86165],[19.13364,50.86147],[19.14318,50.86815],[19.1498,50.87916],[19.16507,50.8794],[19.16816,50.88501],[19.17265,50.88477],[19.18346,50.87706],[19.18084,50.86562],[19.18711,50.84712],[19.19973,50.84395],[19.19637,50.83678],[19.19358,50.83357],[19.19454,50.83145],[19.20696,50.82985],[19.20838,50.82484],[19.21831,50.82571],[19.22564,50.82475],[19.23075,50.82509],[19.2308,50.82666],[19.23351,50.82683],[19.23303,50.82335],[19.21868,50.80115],[19.21753,50.79272],[19.22592,50.78822],[19.20889,50.77561],[19.19891,50.76355],[19.19521,50.75182],[19.19074,50.75211],[19.18245,50.7545],[19.16504,50.7535],[19.16417,50.75586],[19.14559,50.75805],[19.14282,50.75543],[19.13021,50.75786],[19.127,50.75314],[19.1216,50.75363],[19.12066,50.74981],[19.10348,50.75228],[19.09598,50.75201],[19.0956,50.74912],[19.09351,50.7488],[19.09285,50.75027],[19.08442,50.74986],[19.08473,50.74349],[19.08382,50.73741],[19.07878,50.73668],[19.07503,50.73465],[19.07284,50.73708],[19.07153,50.74042],[19.0685,50.74339],[19.06632,50.74233],[19.06392,50.74554],[19.06595,50.7466],[19.06548,50.7496],[19.06202,50.75041],[19.06018,50.74455],[19.04257,50.74466],[19.0333,50.74827],[19.01869,50.76252],[19.01554,50.77044],[19.01101,50.7718],[19.01353,50.77766],[19.01159,50.78077],[19.01081,50.78759],[19.01362,50.79262],[19.01972,50.79555],[19.01896,50.80703],[19.03439,50.80116],[19.03453,50.804],[19.02593,50.80731],[19.02308,50.81499],[19.03154,50.81614],[19.02909,50.82435],[19.03787,50.82584],[19.03921,50.84083],[19.04676,50.84934],[19.05993,50.8532],[19.06209,50.8596],[19.06492,50.86134],[19.08183,50.8554]]],terms_text:"Urząd Miasta Częstochowy"},{id:"DCGIS-County-Imagery-2017-Fall-Leaf-Off-6-Inch",name:"Dakota County GIS 2017 Fall Leaf-Off 6-Inch",type:"wms",template:"https://gisimg.co.dakota.mn.us/arcgis/services/AerialPhotography/2017AirPhotoLeafOff6Inch/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=2017AirPhotoLeafOff6Inch:None&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[5,20],polygon:[[[-93.32967,44.79107],[-93.32964,44.63037],[-93.28189,44.63074],[-93.28169,44.47194],[-93.28176,44.47137],[-93.0395,44.47103],[-93.03924,44.51125],[-92.91932,44.51049],[-92.91899,44.54325],[-92.79268,44.54324],[-92.7926,44.62971],[-92.73207,44.62948],[-92.73122,44.71411],[-92.80342,44.74652],[-92.82767,44.75056],[-92.85209,44.74695],[-92.85959,44.75359],[-92.87724,44.77283],[-92.88149,44.77492],[-92.9049,44.77408],[-92.92808,44.78111],[-92.93969,44.77563],[-92.94843,44.76786],[-92.95859,44.76724],[-92.98604,44.77501],[-92.99291,44.77517],[-93.00306,44.77206],[-93.01685,44.77635],[-93.02153,44.79431],[-93.00523,44.81541],[-93.0119,44.83657],[-93.00859,44.85652],[-93.01041,44.86586],[-93.02074,44.89279],[-93.0309,44.8967],[-93.04083,44.90391],[-93.04445,44.91514],[-93.04725,44.9195],[-93.04724,44.92318],[-93.12863,44.92335],[-93.12882,44.91965],[-93.13257,44.91243],[-93.1641,44.89048],[-93.18289,44.8872],[-93.20075,44.86486],[-93.20325,44.85263],[-93.22179,44.83825],[-93.25188,44.81146],[-93.28177,44.80611],[-93.30453,44.7945],[-93.32645,44.79245],[-93.32961,44.79107],[-93.32967,44.79107]]],terms_url:"https://dakotacounty.us",terms_text:"Dakota County GIS",icon:"https://www.co.dakota.mn.us//SiteAssets/DakotaCountyLogo_W.png"},{id:"DCGIS-County-Imagery-2019-Spring-Leaf-Off-6-Inch",name:"Dakota County GIS 2019 Spring Leaf-Off 6-Inch",type:"wms",template:"https://gisimg.co.dakota.mn.us/arcgis/services/AerialPhotography/2019AirPhotoLeafOff6Inch_Spring/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=2019AirPhotoLeafOff6Inch_Spring:default&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2019-01-01T00:00:00.000Z",startDate:"2019-01-01T00:00:00.000Z",zoomExtent:[5,20],polygon:[[[-93.32967,44.79107],[-93.32964,44.63037],[-93.28189,44.63074],[-93.28169,44.47194],[-93.28176,44.47137],[-93.0395,44.47103],[-93.03924,44.51125],[-92.91932,44.51049],[-92.91899,44.54325],[-92.79268,44.54324],[-92.7926,44.62971],[-92.73207,44.62948],[-92.73122,44.71411],[-92.80342,44.74652],[-92.82767,44.75056],[-92.85209,44.74695],[-92.85959,44.75359],[-92.87724,44.77283],[-92.88149,44.77492],[-92.9049,44.77408],[-92.92808,44.78111],[-92.93969,44.77563],[-92.94843,44.76786],[-92.95859,44.76724],[-92.98604,44.77501],[-92.99291,44.77517],[-93.00306,44.77206],[-93.01685,44.77635],[-93.02153,44.79431],[-93.00523,44.81541],[-93.0119,44.83657],[-93.00859,44.85652],[-93.01041,44.86586],[-93.02074,44.89279],[-93.0309,44.8967],[-93.04083,44.90391],[-93.04445,44.91514],[-93.04725,44.9195],[-93.04724,44.92318],[-93.12863,44.92335],[-93.12882,44.91965],[-93.13257,44.91243],[-93.1641,44.89048],[-93.18289,44.8872],[-93.20075,44.86486],[-93.20325,44.85263],[-93.22179,44.83825],[-93.25188,44.81146],[-93.28177,44.80611],[-93.30453,44.7945],[-93.32645,44.79245],[-93.32961,44.79107],[-93.32967,44.79107]]],terms_url:"https://dakotacounty.us",terms_text:"Dakota County GIS",icon:"https://www.co.dakota.mn.us//SiteAssets/DakotaCountyLogo_W.png"},{id:"Duna_2013",name:"Danube flood orthophoto 2013",type:"tms",template:"http://e.tile.openstreetmap.hu/dunai-arviz-2013/{zoom}/{x}/{y}.jpg",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[10,20],polygon:[[[19.07732,47.69597],[19.07799,47.69598],[19.09462,47.69446],[19.08056,47.59587],[19.07434,47.58909],[19.07952,47.58883],[19.07717,47.57241],[19.05779,47.57209],[19.07732,47.69597]]],terms_url:"http://fototerkep.hu",terms_text:"Fotótérkép.hu",description:"Riverbank of Danube at Budapest, Szentendre and Szigetmonostor"},{id:"Delaware2012Orthophotography",name:"Delaware 2012 Orthophotography",type:"wms",template:"https://firstmap.delaware.gov/arcgis/services/DE_Imagery/DE_Imagery_2012/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[-75.01771,38.45189],[-75.74174,38.44996],[-75.807,39.73907],[-75.75559,39.80106],[-75.64692,39.85638],[-75.47115,39.84646],[-75.37726,39.81478],[-75.48746,39.67181],[-75.50901,39.43446],[-75.39327,39.27784],[-75.30707,39.01667],[-75.19317,38.82219],[-75.05341,38.80876],[-75.01771,38.45189]]],terms_url:"https://firstmap.delaware.gov/arcgis/rest/services/DE_Imagery/DE_Imagery_2012/ImageServer",terms_text:"Digital Aerial Solutions, LLC",description:"This data set consists of 0.3-meter pixel resolution (approximately 1-foot), 4-band true color and near infrared (R, G, B, IR) orthoimages covering New Castle, Kent and Sussex Counties in Delaware."},{id:"Delaware2017Orthophotography",name:"Delaware 2017 Orthophotography",type:"wms",template:"https://firstmap.delaware.gov/arcgis/services/DE_Imagery/DE_Imagery_2017/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",polygon:[[[-75.01771,38.45189],[-75.74174,38.44996],[-75.807,39.73907],[-75.75559,39.80106],[-75.64692,39.85638],[-75.47115,39.84646],[-75.37726,39.81478],[-75.48746,39.67181],[-75.50901,39.43446],[-75.39327,39.27784],[-75.30707,39.01667],[-75.19317,38.82219],[-75.05341,38.80876],[-75.01771,38.45189]]],terms_url:"https://firstmap.delaware.gov/arcgis/rest/services/DE_Imagery/DE_Imagery_2017/ImageServer",terms_text:"Digital Aerial Solutions, LLC",description:"This data set consists of 0.3-meter pixel resolution (approximately 1-foot), 4-band true color and near infrared (R, G, B, IR) orthoimages covering New Castle, Kent and Sussex Counties in Delaware."},{id:"delmiro_gouveia",name:"Delmiro Gouveia AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Delmiro%20Gouveia&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.94962,-9.42957],[-37.94834,-9.33972],[-38.03903,-9.33834],[-38.04034,-9.42846],[-37.94962,-9.42957]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"der-es",name:"DER-ES",type:"wms",template:"http://portal.der.es.gov.br/geoserver/wms?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=deres-ext:TRECHOINFO&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-40.94577,-21.31404],[-40.6231,-20.86278],[-40.38882,-20.65177],[-40.22209,-20.29831],[-39.80383,-19.66412],[-39.69603,-19.42573],[-39.67304,-19.30437],[-39.70538,-18.61384],[-39.65292,-18.33096],[-40.22281,-17.97587],[-40.34282,-17.9198],[-40.45278,-17.91502],[-40.46499,-17.92049],[-40.48368,-17.90408],[-40.50164,-17.90681],[-40.51602,-17.88903],[-40.53326,-17.88903],[-40.54548,-17.90134],[-40.58932,-17.91502],[-40.58932,-17.93211],[-40.61519,-17.93416],[-40.62956,-17.9868],[-40.64609,-17.9868],[-40.65903,-18.00731],[-40.68777,-18.00594],[-40.70574,-18.01756],[-40.71365,-18.00184],[-40.72155,-17.99774],[-40.75102,-18.00252],[-40.76754,-17.99842],[-40.76754,-17.98133],[-40.80923,-17.94852],[-40.82432,-17.96014],[-40.83151,-17.94989],[-40.86528,-17.9827],[-40.88397,-17.96766],[-40.90912,-17.98475],[-40.77761,-18.10775],[-40.77832,-18.15146],[-40.79054,-18.15351],[-40.8351,-18.14531],[-40.89547,-18.10365],[-40.93283,-18.12755],[-40.95583,-18.1255],[-40.95296,-18.14463],[-40.96014,-18.15009],[-40.96374,-18.14326],[-40.97955,-18.13643],[-40.99248,-18.15009],[-40.99105,-18.16307],[-41.00901,-18.16307],[-41.05788,-18.1658],[-41.05788,-18.17536],[-41.09597,-18.19243],[-41.09597,-18.2054],[-41.1089,-18.21291],[-41.09812,-18.22997],[-41.10531,-18.2327],[-41.09884,-18.25591],[-41.12903,-18.27502],[-41.16137,-18.30572],[-41.15059,-18.37394],[-41.16424,-18.37939],[-41.16424,-18.4019],[-41.15059,-18.40735],[-41.15849,-18.41144],[-41.17358,-18.41144],[-41.18868,-18.44485],[-41.02123,-18.46667],[-41.04638,-18.60362],[-41.03776,-18.61452],[-41.05788,-18.62678],[-41.0471,-18.64857],[-41.03488,-18.65402],[-40.99895,-18.67716],[-40.94505,-18.69418],[-40.94433,-18.76973],[-40.92134,-18.81055],[-40.93715,-18.82347],[-40.94721,-18.82143],[-40.97092,-18.83572],[-41.08375,-18.83232],[-41.10675,-18.83572],[-41.11753,-18.80783],[-41.13118,-18.79286],[-41.23611,-18.7949],[-41.2512,-18.81667],[-41.2476,-18.85544],[-41.2203,-18.87992],[-41.20808,-18.87992],[-41.20664,-18.86632],[-41.16424,-18.867],[-41.15634,-18.88876],[-41.12903,-18.9044],[-41.12112,-18.92412],[-41.0392,-18.98665],[-41.07585,-19.00567],[-41.06507,-19.06342],[-40.96877,-19.12726],[-40.96158,-19.15102],[-40.92996,-19.206],[-40.94649,-19.22296],[-40.94793,-19.24264],[-40.92565,-19.26299],[-40.94936,-19.2786],[-40.92277,-19.31048],[-40.94361,-19.35252],[-40.93427,-19.381],[-40.95727,-19.39184],[-40.9738,-19.42641],[-40.95439,-19.46165],[-40.97883,-19.50298],[-41.01332,-19.50298],[-41.04638,-19.48333],[-41.05429,-19.48401],[-41.04135,-19.56664],[-41.09238,-19.58966],[-41.14627,-19.656],[-41.16496,-19.65871],[-41.17933,-19.6939],[-41.19658,-19.74599],[-41.16999,-19.80618],[-41.18939,-19.82375],[-41.18868,-19.88526],[-41.21239,-19.89743],[-41.22964,-19.90216],[-41.24689,-19.93324],[-41.25479,-19.92919],[-41.26988,-19.93797],[-41.30653,-19.93392],[-41.31516,-19.96972],[-41.3245,-19.97647],[-41.313,-20.01226],[-41.33672,-20.05548],[-41.34822,-20.08653],[-41.3554,-20.12094],[-41.37768,-20.15805],[-41.38702,-20.18638],[-41.41074,-20.19448],[-41.4208,-20.20257],[-41.7636,-20.2046],[-41.78516,-20.28483],[-41.85055,-20.3246],[-41.86349,-20.37513],[-41.85127,-20.38187],[-41.84337,-20.40949],[-41.80887,-20.42498],[-41.80672,-20.47211],[-41.83115,-20.47885],[-41.81103,-20.54212],[-41.83115,-20.55086],[-41.86205,-20.61814],[-41.82109,-20.64437],[-41.85343,-20.68068],[-41.87139,-20.72102],[-41.8678,-20.73849],[-41.88002,-20.73984],[-41.88289,-20.76739],[-41.85415,-20.77478],[-41.83331,-20.7983],[-41.80887,-20.80905],[-41.78444,-20.80569],[-41.75138,-20.82382],[-41.74707,-20.87487],[-41.72335,-20.87554],[-41.74132,-20.92723],[-41.72335,-20.97757],[-41.74347,-21.09763],[-41.7291,-21.12579],[-41.594,-21.16332],[-41.57244,-21.18678],[-41.49051,-21.18879],[-41.48332,-21.20085],[-41.43948,-21.22095],[-41.41289,-21.20956],[-41.34965,-21.21291],[-41.27994,-21.2464],[-41.24473,-21.23234],[-41.17718,-21.25511],[-41.09238,-21.2243],[-41.04854,-21.25913],[-41.01548,-21.25578],[-41.00254,-21.28726],[-40.94577,-21.31404]]],terms_url:"https://der.es.gov.br",terms_text:"Departamento de Estradas de Rodagem do Estado do Espírito Santo",overlay:true},{id:"db-inspire-2013-11",name:"Deutsche Bahn VzG lines January 2017",type:"wms",template:"https://wms.michreichert.de/vzg-strecken-2017?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=vzg_strecken,station_codes,level_crossings&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-11-01T00:00:00.000Z",startDate:"2013-11-01T00:00:00.000Z",polygon:[[[8.19422,48.97504],[7.97355,49.02623],[7.94677,49.06313],[7.44328,49.18928],[7.05679,49.11163],[6.94302,49.21345],[6.81633,49.16389],[6.68209,49.24061],[6.3501,49.46202],[6.35353,49.57302],[6.42632,49.67177],[6.50254,49.71885],[6.45241,50.61258],[6.03871,50.71215],[6.00369,50.753],[6.05742,50.8559],[6.0787,50.90247],[6.0727,51.06792],[6.17123,51.33853],[6.22548,51.36554],[6.15715,51.5509],[6.12763,51.91069],[6.79985,51.86661],[7.02851,52.31255],[6.72947,52.64179],[7.07486,52.75269],[7.20532,53.18442],[7.04464,53.33106],[6.5173,53.65785],[8.23529,54.99001],[11.92257,54.52963],[14.1679,54.59631],[14.46591,53.24712],[14.14318,52.83946],[14.64375,52.58613],[14.57646,52.32756],[14.74537,52.06577],[14.66847,51.7353],[14.7234,51.53927],[15.03926,51.28745],[14.98845,51.09207],[14.88922,50.93856],[14.81593,50.87729],[14.63671,50.89116],[14.59311,50.91887],[14.57217,51.01076],[14.26283,51.06473],[14.28086,50.98024],[14.22816,50.85796],[13.69532,50.72883],[13.03442,50.50085],[12.49077,50.34582],[12.32632,50.29277],[12.35379,50.21462],[12.32701,50.16363],[12.1677,50.34889],[12.07707,50.2524],[12.18195,50.21136],[12.26014,50.09069],[12.53892,49.4164],[12.88808,49.3385],[13.21287,49.12439],[13.73952,48.83688],[13.45371,48.56222],[13.40555,48.37812],[13.03648,48.25986],[12.71376,48.10856],[12.93108,47.9376],[13.00455,47.84506],[12.90671,47.73249],[13.05228,47.59329],[12.15792,47.7087],[12.20393,47.61667],[12.17783,47.59815],[11.61753,47.60093],[11.26666,47.39124],[10.9247,47.46811],[10.91578,47.55623],[10.59031,47.5567],[10.29848,47.39937],[9.78144,47.61274],[9.74024,47.52842],[9.00278,47.69137],[8.68933,47.72371],[8.63809,47.70261],[8.63079,47.69359],[8.62127,47.69177],[8.62414,47.68221],[8.61243,47.68115],[8.35382,47.61367],[8.27485,47.619],[8.23709,47.61023],[8.22808,47.60583],[8.20284,47.61555],[8.10834,47.58251],[8.08568,47.5583],[8.06714,47.56444],[8.04981,47.55645],[8.02749,47.55112],[7.98097,47.55494],[7.91917,47.54787],[7.88862,47.58888],[7.81257,47.57122],[7.79455,47.55558],[7.71404,47.54063],[7.66043,47.54485],[7.65219,47.54702],[7.63439,47.56173],[7.61499,47.55669],[7.5834,47.57048],[7.58559,47.5845],[7.59366,47.60048],[7.58761,47.608],[7.51491,47.6652],[7.5434,47.81539],[7.57671,48.02454],[7.56812,48.06012],[7.80639,48.52438],[7.79987,48.58029],[7.80665,48.60106],[8.11014,48.84977],[8.19422,48.97504]]],terms_url:"https://data.deutschebahn.com/dataset/data-streckennetz",terms_text:"Data CC-BY 4.0 Deutsche Bahn AG",overlay:true},{id:"db-inspire-2015-11",name:"Deutsche Bahn VzG lines Nov 2015",type:"wms",template:"https://wms.michreichert.de/vzg-strecken-2015?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=vzg_strecken,station_codes,level_crossings&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-11-01T00:00:00.000Z",startDate:"2015-11-01T00:00:00.000Z",polygon:[[[8.19422,48.97504],[7.97355,49.02623],[7.94677,49.06313],[7.44328,49.18928],[7.05679,49.11163],[6.94302,49.21345],[6.81633,49.16389],[6.68209,49.24061],[6.3501,49.46202],[6.35353,49.57302],[6.42632,49.67177],[6.50254,49.71885],[6.45241,50.61258],[6.03871,50.71215],[6.00369,50.753],[6.05742,50.8559],[6.0787,50.90247],[6.0727,51.06792],[6.17123,51.33853],[6.22548,51.36554],[6.15715,51.5509],[6.12763,51.91069],[6.79985,51.86661],[7.02851,52.31255],[6.72947,52.64179],[7.07486,52.75269],[7.20532,53.18442],[7.04464,53.33106],[6.5173,53.65785],[8.23529,54.99001],[11.92257,54.52963],[14.1679,54.59631],[14.46591,53.24712],[14.14318,52.83946],[14.64375,52.58613],[14.57646,52.32756],[14.74537,52.06577],[14.66847,51.7353],[14.7234,51.53927],[15.03926,51.28745],[14.98845,51.09207],[14.88922,50.93856],[14.81593,50.87729],[14.63671,50.89116],[14.59311,50.91887],[14.57217,51.01076],[14.26283,51.06473],[14.28086,50.98024],[14.22816,50.85796],[13.69532,50.72883],[13.03442,50.50085],[12.49077,50.34582],[12.32632,50.29277],[12.35379,50.21462],[12.32701,50.16363],[12.1677,50.34889],[12.07707,50.2524],[12.18195,50.21136],[12.26014,50.09069],[12.53892,49.4164],[12.88808,49.3385],[13.21287,49.12439],[13.73952,48.83688],[13.45371,48.56222],[13.40555,48.37812],[13.03648,48.25986],[12.71376,48.10856],[12.93108,47.9376],[13.00455,47.84506],[12.90671,47.73249],[13.05228,47.59329],[12.15792,47.7087],[12.20393,47.61667],[12.17783,47.59815],[11.61753,47.60093],[11.26666,47.39124],[10.9247,47.46811],[10.91578,47.55623],[10.59031,47.5567],[10.29848,47.39937],[9.78144,47.61274],[9.74024,47.52842],[9.00278,47.69137],[8.68933,47.72371],[8.63809,47.70261],[8.63079,47.69359],[8.62127,47.69177],[8.62414,47.68221],[8.61243,47.68115],[8.35382,47.61367],[8.27485,47.619],[8.23709,47.61023],[8.22808,47.60583],[8.20284,47.61555],[8.10834,47.58251],[8.08568,47.5583],[8.06714,47.56444],[8.04981,47.55645],[8.02749,47.55112],[7.98097,47.55494],[7.91917,47.54787],[7.88862,47.58888],[7.81257,47.57122],[7.79455,47.55558],[7.71404,47.54063],[7.66043,47.54485],[7.65219,47.54702],[7.63439,47.56173],[7.61499,47.55669],[7.5834,47.57048],[7.58559,47.5845],[7.59366,47.60048],[7.58761,47.608],[7.51491,47.6652],[7.5434,47.81539],[7.57671,48.02454],[7.56812,48.06012],[7.80639,48.52438],[7.79987,48.58029],[7.80665,48.60106],[8.11014,48.84977],[8.19422,48.97504]]],terms_url:"https://data.deutschebahn.com/dataset/data-streckennetz",terms_text:"Data CC-BY 4.0 Deutsche Bahn AG",overlay:true},{id:"dgu-dof-2011",name:"dgu.hr: Croatia 2011 Aerial imagery",type:"wms",template:"http://geoportal.dgu.hr/services/dof/ows?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=DOF5_2011&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[16.2996,46.38154],[16.30063,46.38565],[16.2985,46.38985],[16.30063,46.39146],[16.30008,46.39566],[16.30213,46.39712],[16.29686,46.4008],[16.29515,46.40392],[16.28591,46.40689],[16.28208,46.41095],[16.27215,46.41194],[16.26825,46.41454],[16.26852,46.41869],[16.27003,46.42067],[16.26921,46.42699],[16.26236,46.437],[16.25839,46.44992],[16.2599,46.45275],[16.25469,46.46077],[16.25538,46.46746],[16.251,46.47227],[16.24648,46.47896],[16.23649,46.48339],[16.2369,46.4883],[16.2369,46.4981],[16.23881,46.50083],[16.24484,46.50262],[16.25825,46.50441],[16.26264,46.50799],[16.26168,46.5177],[16.26743,46.51911],[16.27112,46.52081],[16.27646,46.52109],[16.27783,46.51902],[16.28865,46.51939],[16.29672,46.51788],[16.30028,46.51581],[16.30288,46.51647],[16.30863,46.52307],[16.30918,46.52608],[16.32027,46.53154],[16.33232,46.53343],[16.33697,46.53192],[16.33684,46.53522],[16.3382,46.53795],[16.34094,46.53917],[16.33478,46.53974],[16.33163,46.54303],[16.33423,46.54689],[16.34546,46.54849],[16.34957,46.55094],[16.35326,46.55245],[16.35915,46.55009],[16.36203,46.54972],[16.36134,46.55452],[16.36449,46.55763],[16.3701,46.55838],[16.37394,46.5565],[16.37804,46.55602],[16.38434,46.55405],[16.38612,46.55141],[16.38667,46.54868],[16.38407,46.54557],[16.38804,46.54397],[16.38968,46.542],[16.39132,46.53917],[16.40022,46.54228],[16.40734,46.54162],[16.40844,46.5387],[16.40844,46.53691],[16.41268,46.53701],[16.41993,46.53333],[16.42568,46.53597],[16.43157,46.53569],[16.43527,46.53305],[16.44129,46.53107],[16.44554,46.52561],[16.44293,46.52099],[16.44334,46.51854],[16.45142,46.52156],[16.4569,46.52118],[16.45895,46.52297],[16.46251,46.52448],[16.46552,46.52467],[16.46958,46.52183],[16.47551,46.51842],[16.47648,46.51592],[16.48072,46.515],[16.48532,46.51267],[16.48544,46.51158],[16.49056,46.51044],[16.49337,46.50812],[16.49222,46.50562],[16.4921,46.50358],[16.49646,46.50012],[16.51184,46.49754],[16.51305,46.49516],[16.51662,46.49508],[16.52249,46.49112],[16.52327,46.48769],[16.52243,46.48295],[16.53499,46.48387],[16.54437,46.48076],[16.55592,46.4841],[16.57032,46.47695],[16.58004,46.47638],[16.59578,46.47995],[16.60968,46.47961],[16.61939,46.47165],[16.62559,46.47188],[16.63262,46.46934],[16.64719,46.46773],[16.66846,46.46184],[16.69994,46.42007],[16.70966,46.40541],[16.7192,46.40206],[16.73511,46.4046],[16.74231,46.40217],[16.74466,46.39848],[16.74466,46.38981],[16.75052,46.39224],[16.75789,46.39097],[16.7609,46.38566],[16.76509,46.38843],[16.77296,46.38877],[16.77899,46.38473],[16.78502,46.38947],[16.79624,46.39028],[16.80444,46.38739],[16.80896,46.3808],[16.81231,46.38011],[16.82069,46.37688],[16.82873,46.37768],[16.83743,46.37895],[16.84329,46.37399],[16.84329,46.36786],[16.85234,46.36451],[16.86172,46.35873],[16.86808,46.35769],[16.87361,46.35365],[16.86959,46.34775],[16.87277,46.34868],[16.88148,46.3407],[16.88583,46.33434],[16.87897,46.32544],[16.88198,46.32093],[16.88047,46.31364],[16.88365,46.306],[16.89019,46.30253],[16.89119,46.28633],[16.89119,46.28228],[16.90509,46.27789],[16.91263,46.26816],[16.91732,46.26434],[16.92519,46.26365],[16.93858,46.25774],[16.94344,46.25161],[16.95399,46.24442],[16.96287,46.24338],[16.96638,46.24547],[16.97559,46.24616],[16.98012,46.24049],[16.97777,46.2311],[16.97844,46.22821],[16.98983,46.22821],[16.99569,46.22612],[17.00641,46.22635],[17.05363,46.20631],[17.05748,46.20631],[17.06921,46.20492],[17.0749,46.19564],[17.07808,46.19286],[17.08327,46.19135],[17.08646,46.19344],[17.09902,46.1917],[17.10705,46.18857],[17.10722,46.18428],[17.11208,46.18185],[17.1238,46.18266],[17.13017,46.17918],[17.12866,46.17304],[17.13084,46.17234],[17.1377,46.17547],[17.15294,46.17617],[17.16198,46.17292],[17.16366,46.16167],[17.17153,46.16028],[17.18375,46.15227],[17.19179,46.13522],[17.19062,46.13092],[17.18342,46.12698],[17.18643,46.1199],[17.18392,46.11177],[17.21005,46.11699],[17.21624,46.11734],[17.22194,46.11398],[17.2231,46.10833],[17.21815,46.10213],[17.23366,46.10329],[17.23885,46.09946],[17.23751,46.09447],[17.22566,46.09251],[17.22386,46.08914],[17.22804,46.08377],[17.23785,46.08181],[17.24396,46.07774],[17.25602,46.07008],[17.26277,46.06307],[17.26908,46.06142],[17.27561,46.05758],[17.27594,46.05276],[17.26276,46.04585],[17.26464,46.04381],[17.26713,46.04103],[17.26673,46.03672],[17.28817,46.03556],[17.29813,46.03422],[17.30173,46.02643],[17.29629,46.02004],[17.27795,46.01771],[17.2762,46.01533],[17.26272,46.01265],[17.27092,46.01207],[17.2767,46.00759],[17.28356,46.00457],[17.29612,46.00643],[17.30182,46.00707],[17.30902,46.00335],[17.31011,45.99834],[17.30843,45.99154],[17.3153,45.99404],[17.32267,45.99439],[17.32912,45.99828],[17.33816,45.99951],[17.34377,45.99631],[17.34829,45.9863],[17.35231,45.97944],[17.35532,45.97792],[17.35591,45.98624],[17.35825,45.9927],[17.36194,45.99514],[17.36794,45.99616],[17.37366,45.99398],[17.37936,45.99119],[17.38053,45.9838],[17.37308,45.97583],[17.38162,45.97146],[17.38748,45.96867],[17.39694,45.9643],[17.39635,45.96093],[17.39317,45.95522],[17.39373,45.95228],[17.40598,45.94033],[17.41117,45.94306],[17.41445,45.93808],[17.42032,45.9457],[17.42507,45.95051],[17.43638,45.95377],[17.44835,45.95377],[17.4594,45.94905],[17.46778,45.94725],[17.49198,45.94556],[17.51517,45.94276],[17.53301,45.93793],[17.55947,45.9423],[17.57404,45.93991],[17.59313,45.92582],[17.61306,45.91586],[17.62863,45.90607],[17.6401,45.88701],[17.65249,45.86655],[17.65316,45.85507],[17.66053,45.84521],[17.67025,45.83833],[17.68565,45.84148],[17.70081,45.84072],[17.7106,45.83547],[17.72744,45.83477],[17.74937,45.83074],[17.75473,45.82438],[17.76394,45.81849],[17.77374,45.82],[17.78756,45.81971],[17.79585,45.81283],[17.8043,45.80833],[17.81075,45.80734],[17.8146,45.81172],[17.82339,45.81359],[17.83202,45.81131],[17.83629,45.80483],[17.83713,45.79339],[17.84341,45.78866],[17.85262,45.78702],[17.85655,45.78381],[17.85831,45.77762],[17.85957,45.77324],[17.86526,45.77067],[17.86811,45.77862],[17.88276,45.78755],[17.89457,45.79321],[17.90763,45.79537],[17.9196,45.7914],[17.92873,45.78948],[17.93518,45.79181],[17.94556,45.79485],[17.95352,45.7959],[17.9598,45.79461],[17.96901,45.79251],[17.97369,45.79269],[17.98282,45.79707],[18.00359,45.7973],[18.00719,45.79485],[18.01983,45.78422],[18.03465,45.77908],[18.04763,45.77762],[18.06028,45.77447],[18.08054,45.76834],[18.09335,45.76904],[18.10507,45.77435],[18.10951,45.78241],[18.1168,45.79],[18.12374,45.79257],[18.13538,45.79123],[18.14501,45.79175],[18.15757,45.78837],[18.1631,45.78183],[18.17055,45.77914],[18.17826,45.78767],[18.18763,45.79041],[18.19576,45.78977],[18.2048,45.78551],[18.21652,45.7837],[18.22933,45.78305],[18.2362,45.7792],[18.24633,45.76507],[18.24993,45.76547],[18.25906,45.76425],[18.27706,45.75852],[18.29054,45.76325],[18.29531,45.76372],[18.3,45.76296],[18.30871,45.75998],[18.31491,45.75952],[18.33249,45.75771],[18.34028,45.75291],[18.35033,45.76682],[18.35987,45.77511],[18.36506,45.77628],[18.3803,45.76781],[18.38533,45.76764],[18.39521,45.76466],[18.39864,45.75887],[18.40057,45.75952],[18.40475,45.75595],[18.403,45.74766],[18.41036,45.74222],[18.41849,45.74392],[18.42728,45.74479],[18.43599,45.7417],[18.44336,45.74187],[18.44344,45.75677],[18.44051,45.76033],[18.44922,45.77132],[18.45742,45.77248],[18.46504,45.76915],[18.47743,45.77003],[18.48028,45.78638],[18.48413,45.79491],[18.49401,45.79858],[18.50314,45.79736],[18.50858,45.7931],[18.5095,45.78854],[18.51612,45.78784],[18.52893,45.79561],[18.53278,45.79619],[18.53756,45.79567],[18.54308,45.79806],[18.54861,45.79683],[18.55212,45.79695],[18.55539,45.80442],[18.55757,45.80646],[18.57021,45.80425],[18.56829,45.8151],[18.58704,45.82129],[18.59885,45.82852],[18.59617,45.83576],[18.61719,45.84118],[18.61392,45.84696],[18.60906,45.85372],[18.62229,45.85938],[18.62334,45.87402],[18.62736,45.8792],[18.6333,45.87929],[18.63904,45.87186],[18.64775,45.87539],[18.63829,45.88288],[18.6372,45.88652],[18.63628,45.88972],[18.64402,45.89465],[18.6521,45.89812],[18.65708,45.89829],[18.65801,45.89963],[18.65587,45.90351],[18.6552,45.91536],[18.65566,45.91755],[18.65729,45.91935],[18.66462,45.91938],[18.67027,45.9149],[18.67299,45.91696],[18.68869,45.91895],[18.69954,45.92049],[18.70502,45.92093],[18.70703,45.92066],[18.70883,45.9183],[18.71365,45.91391],[18.72265,45.90788],[18.73852,45.90371],[18.74852,45.90272],[18.75137,45.90292],[18.75422,45.90211],[18.75438,45.89972],[18.75765,45.89951],[18.75962,45.89855],[18.76439,45.89447],[18.76393,45.89197],[18.77427,45.89136],[18.78034,45.88905],[18.78557,45.88378],[18.79064,45.88142],[18.79801,45.88151],[18.80609,45.88171],[18.80831,45.89101],[18.80814,45.89579],[18.80374,45.90144],[18.80274,45.90365],[18.81521,45.91536],[18.82036,45.91772],[18.82623,45.91743],[18.83033,45.90791],[18.86248,45.91303],[18.85984,45.91793],[18.86001,45.92116],[18.86257,45.92299],[18.86617,45.92296],[18.86918,45.9216],[18.87161,45.92017],[18.87237,45.91897],[18.87535,45.91744],[18.87849,45.91784],[18.88401,45.92121],[18.90217,45.92088],[18.90522,45.9185],[18.90664,45.91579],[18.90702,45.91314],[18.90512,45.91023],[18.90122,45.90712],[18.89675,45.90573],[18.87764,45.90004],[18.87412,45.89779],[18.87259,45.89554],[18.87288,45.89382],[18.87773,45.88687],[18.88039,45.88448],[18.88648,45.8821],[18.89742,45.87859],[18.90084,45.87634],[18.90322,45.87396],[18.90512,45.86959],[18.90522,45.86687],[18.90284,45.86356],[18.89846,45.86197],[18.89466,45.85912],[18.88543,45.85733],[18.87735,45.85753],[18.86812,45.85806],[18.86071,45.85998],[18.86128,45.85773],[18.86165,45.84448],[18.86005,45.83211],[18.85784,45.82581],[18.85291,45.81718],[18.85158,45.81307],[18.85272,45.80956],[18.8569,45.80969],[18.86337,45.8077],[18.87478,45.80936],[18.87887,45.81658],[18.87859,45.81996],[18.88172,45.82374],[18.88734,45.82593],[18.89314,45.82798],[18.89999,45.82732],[18.90807,45.82487],[18.91482,45.82209],[18.92176,45.81977],[18.92338,45.81566],[18.92576,45.80465],[18.92224,45.79663],[18.92214,45.78927],[18.92062,45.78781],[18.91682,45.78264],[18.90645,45.77892],[18.89475,45.77886],[18.89352,45.7772],[18.87764,45.78323],[18.87288,45.78264],[18.86527,45.77972],[18.85405,45.77335],[18.85747,45.76665],[18.86556,45.76247],[18.87792,45.75929],[18.89542,45.75351],[18.90769,45.74721],[18.91634,45.74661],[18.92376,45.74827],[18.93004,45.75225],[18.9366,45.75703],[18.94459,45.76114],[18.94687,45.76406],[18.9561,45.7691],[18.96085,45.7691],[18.96932,45.76765],[18.97265,45.76493],[18.97455,45.76008],[18.97293,45.75278],[18.97892,45.74966],[18.98168,45.74674],[18.98301,45.74223],[18.97968,45.73586],[18.97341,45.73061],[18.96313,45.72404],[18.96951,45.72318],[18.9755,45.72185],[18.97968,45.71594],[18.97987,45.70923],[18.9774,45.69881],[18.9716,45.69436],[18.95866,45.69243],[18.95049,45.69595],[18.94906,45.69847],[18.94459,45.70113],[18.9327,45.70233],[18.9289,45.70392],[18.92081,45.7012],[18.92719,45.69475],[18.93308,45.69083],[18.94059,45.6901],[18.94278,45.68897],[18.96447,45.6826],[18.96447,45.6713],[18.97131,45.67117],[18.97103,45.66904],[18.97284,45.66632],[18.97788,45.6594],[18.97826,45.65389],[18.97483,45.64983],[18.9676,45.64644],[18.95847,45.64558],[18.94944,45.64252],[18.94373,45.64192],[18.93841,45.63387],[18.94659,45.63593],[18.95106,45.63228],[18.95496,45.62755],[18.95419,45.6241],[18.94687,45.62064],[18.94735,45.61964],[18.94525,45.61432],[18.94782,45.60793],[18.94763,45.60321],[18.94193,45.59868],[18.92814,45.59562],[18.9249,45.59629],[18.91844,45.59728],[18.91748,45.59376],[18.91273,45.59056],[18.89979,45.57892],[18.90122,45.57133],[18.90731,45.56953],[18.91054,45.56893],[18.91406,45.57066],[18.9171,45.57046],[18.93127,45.56667],[18.93632,45.56114],[18.93527,45.55521],[18.93061,45.55062],[18.93185,45.54722],[18.93736,45.54336],[18.94487,45.54089],[18.94963,45.53863],[18.95733,45.53856],[18.97322,45.53996],[18.98187,45.54169],[18.99091,45.54516],[18.99946,45.55481],[19.00412,45.55987],[19.01059,45.56047],[19.02191,45.55954],[19.03247,45.55361],[19.03313,45.54649],[19.0377,45.53843],[19.04055,45.53663],[19.05624,45.53636],[19.07022,45.53543],[19.08106,45.53157],[19.09676,45.52424],[19.10208,45.52097],[19.10503,45.51651],[19.10712,45.51124],[19.10665,45.50338],[19.10284,45.49598],[19.08962,45.48478],[19.08297,45.48304],[19.06861,45.48231],[19.04892,45.48078],[19.03161,45.48278],[19.01925,45.48838],[19.00907,45.49311],[19.00346,45.49158],[19.00073,45.48768],[18.9988,45.48091],[18.99756,45.47438],[18.99775,45.47277],[18.99366,45.47284],[18.99271,45.4547],[18.99595,45.44796],[18.99965,45.44316],[19.00707,45.43828],[19.01287,45.43582],[19.01944,45.43375],[19.0259,45.43028],[19.03018,45.42547],[19.02952,45.41779],[19.03418,45.41766],[19.03342,45.40972],[19.02828,45.40397],[19.02258,45.40017],[19.01506,45.39843],[19.0007,45.3983],[18.98748,45.39496],[18.97873,45.39129],[18.97331,45.38815],[18.97303,45.38127],[18.97736,45.37577],[18.9832,45.37145],[18.99129,45.36797],[19.01335,45.35942],[19.02258,45.35507],[19.03037,45.35227],[19.05016,45.34993],[19.05577,45.34766],[19.06994,45.34679],[19.08915,45.34237],[19.09695,45.33749],[19.10227,45.33021],[19.10094,45.30821],[19.10513,45.30834],[19.1095,45.30091],[19.11661,45.29513],[19.12358,45.29175],[19.13147,45.28914],[19.15753,45.28104],[19.16818,45.27944],[19.17693,45.27529],[19.17636,45.27054],[19.19129,45.27027],[19.22001,45.26619],[19.22638,45.26746],[19.2378,45.27094],[19.24303,45.27388],[19.24683,45.27904],[19.25492,45.28185],[19.26129,45.28305],[19.26699,45.28238],[19.27384,45.2793],[19.27679,45.27542],[19.27717,45.27127],[19.27536,45.26672],[19.26747,45.26009],[19.26509,45.25675],[19.26176,45.25126],[19.26243,45.24597],[19.28383,45.24182],[19.32177,45.23753],[19.35934,45.23586],[19.42202,45.23666],[19.42439,45.22695],[19.42905,45.21924],[19.43799,45.20899],[19.44988,45.19546],[19.44284,45.19217],[19.43685,45.19177],[19.43666,45.18902],[19.434,45.18708],[19.43057,45.18654],[19.43771,45.1726],[19.43162,45.16858],[19.41821,45.16415],[19.41412,45.16542],[19.4048,45.16797],[19.40204,45.16831],[19.38749,45.17159],[19.38492,45.17039],[19.37484,45.17025],[19.37256,45.16878],[19.364,45.172],[19.36181,45.17153],[19.362,45.16878],[19.35658,45.16797],[19.35639,45.16308],[19.34736,45.16341],[19.34555,45.17099],[19.32748,45.17649],[19.32986,45.18138],[19.32682,45.18393],[19.31883,45.19975],[19.31769,45.20625],[19.29857,45.20397],[19.28602,45.20377],[19.28735,45.19881],[19.29125,45.19573],[19.2882,45.19217],[19.2844,45.19211],[19.29619,45.17964],[19.2961,45.17642],[19.298,45.1728],[19.298,45.16998],[19.29362,45.16965],[19.29144,45.17079],[19.28915,45.16938],[19.28459,45.16925],[19.27384,45.17045],[19.27137,45.17394],[19.24769,45.17099],[19.24626,45.17568],[19.23675,45.17374],[19.23,45.17991],[19.22619,45.18339],[19.21992,45.18453],[19.21364,45.18587],[19.20955,45.18922],[19.20365,45.19137],[19.18948,45.19955],[19.1852,45.20022],[19.17893,45.19854],[19.1756,45.20035],[19.17237,45.19807],[19.16837,45.19043],[19.17741,45.18788],[19.18749,45.18487],[19.19709,45.17897],[19.19034,45.1667],[19.16495,45.14537],[19.14222,45.12726],[19.13879,45.12894],[19.11835,45.13263],[19.10988,45.13719],[19.08905,45.14323],[19.09,45.13772],[19.08363,45.13356],[19.08401,45.13122],[19.08011,45.12732],[19.07888,45.11464],[19.08767,45.11224],[19.0881,45.11083],[19.0876,45.11014],[19.08715,45.10956],[19.08898,45.10956],[19.09046,45.10885],[19.09671,45.10227],[19.09659,45.10033],[19.09766,45.09888],[19.09785,45.09754],[19.09699,45.09516],[19.09533,45.09269],[19.09797,45.09007],[19.10142,45.08705],[19.10287,45.08504],[19.10727,45.08324],[19.10838,45.08193],[19.10857,45.08104],[19.10967,45.07943],[19.10929,45.07809],[19.10631,45.07087],[19.09961,45.06035],[19.10408,45.05765],[19.10513,45.05629],[19.1076,45.05431],[19.10929,45.05206],[19.10952,45.05083],[19.10869,45.04876],[19.10612,45.04467],[19.10256,45.04021],[19.0979,45.03685],[19.09856,45.03544],[19.10073,45.0349],[19.1017,45.03432],[19.10237,45.03334],[19.10237,45.03242],[19.10158,45.0303],[19.10275,45.0283],[19.10275,45.02754],[19.10194,45.02595],[19.1008,45.02523],[19.10075,45.02354],[19.10173,45.0218],[19.10303,45.01546],[19.1042,45.01444],[19.10496,45.01316],[19.10532,45.01217],[19.10586,45.01163],[19.10612,45.01045],[19.10555,45.00926],[19.09928,45.00411],[19.09583,44.99369],[19.09483,44.99266],[19.09407,44.99246],[19.08882,44.99147],[19.08822,44.99038],[19.08202,44.98463],[19.07413,44.9833],[19.06536,44.98083],[19.06192,44.98015],[19.05936,44.97872],[19.05765,44.97822],[19.05879,44.97795],[19.06143,44.97743],[19.06582,44.97561],[19.07001,44.9756],[19.07517,44.9743],[19.08218,44.97666],[19.08708,44.97669],[19.09003,44.97608],[19.0944,44.97351],[19.09925,44.974],[19.10253,44.9737],[19.10708,44.97282],[19.11347,44.97662],[19.11768,44.97884],[19.12353,44.97955],[19.13071,44.98231],[19.13375,44.98345],[19.14008,44.98338],[19.14369,44.98234],[19.14854,44.97985],[19.15235,44.97706],[19.15149,44.96067],[19.15491,44.96078],[19.15682,44.96014],[19.15858,44.9566],[19.16024,44.95324],[19.15929,44.95108],[19.15605,44.94954],[19.15092,44.94745],[19.14778,44.94361],[19.14726,44.94015],[19.14459,44.93755],[19.13789,44.93624],[19.12648,44.93587],[19.11749,44.93099],[19.10831,44.9287],[19.10089,44.9256],[19.09172,44.92308],[19.08877,44.92119],[19.09129,44.91981],[19.09204,44.9164],[19.09072,44.91415],[19.08767,44.91358],[19.0901,44.9122],[19.0911,44.91042],[19.08649,44.90499],[19.08368,44.90361],[19.07698,44.90281],[19.07384,44.90065],[19.07103,44.89893],[19.06566,44.89843],[19.05781,44.90176],[19.04935,44.90678],[19.04193,44.91021],[19.03711,44.9148],[19.03284,44.91841],[19.02513,44.91871],[19.00562,44.91331],[18.99675,44.90679],[18.99708,44.89801],[19.01031,44.88508],[19.02756,44.85927],[19.02647,44.85137],[18.996,44.84823],[18.96225,44.84597],[18.92499,44.8468],[18.87835,44.84817],[18.85055,44.849],[18.83925,44.8547],[18.81915,44.87339],[18.78942,44.88449],[18.7633,44.8992],[18.75635,44.90792],[18.76338,44.91978],[18.74655,44.9263],[18.74471,44.93786],[18.74764,44.9455],[18.76271,44.94894],[18.78398,44.93857],[18.79579,44.93987],[18.79813,44.94485],[18.78214,44.95469],[18.7782,44.97596],[18.78901,44.99224],[18.78214,44.99165],[18.77251,44.99485],[18.76163,44.99591],[18.74613,44.98987],[18.73659,44.98934],[18.72679,44.99017],[18.72026,44.99728],[18.72621,45.00622],[18.73282,45.01545],[18.71892,45.02054],[18.71155,45.03475],[18.70109,45.03439],[18.68861,45.03764],[18.66466,45.05817],[18.6588,45.05326],[18.64725,45.05421],[18.64063,45.05776],[18.60864,45.05805],[18.59935,45.06409],[18.59843,45.06971],[18.60856,45.07627],[18.60211,45.07645],[18.58771,45.08384],[18.58704,45.06846],[18.57691,45.06154],[18.56703,45.06551],[18.56401,45.07432],[18.55598,45.07065],[18.54434,45.06137],[18.54467,45.05539],[18.54057,45.0409],[18.53161,45.03995],[18.52474,45.04303],[18.526,45.05155],[18.52299,45.05634],[18.51419,45.05344],[18.48983,45.05516],[18.46814,45.05995],[18.44804,45.07639],[18.43749,45.08265],[18.43088,45.0985],[18.41924,45.10518],[18.40015,45.10547],[18.36875,45.10269],[18.33676,45.09808],[18.32169,45.09696],[18.3098,45.10376],[18.3021,45.11191],[18.28929,45.10996],[18.27631,45.11174],[18.2722,45.12781],[18.26718,45.13318],[18.25755,45.13614],[18.23561,45.13194],[18.21493,45.12202],[18.21309,45.11705],[18.2161,45.10919],[18.22473,45.10287],[18.22699,45.09856],[18.22046,45.08827],[18.21192,45.08177],[18.19994,45.07562],[18.18286,45.07343],[18.16695,45.07396],[18.15062,45.08153],[18.1394,45.08183],[18.12115,45.07621],[18.1106,45.07863],[18.10139,45.08484],[18.08967,45.09714],[18.07652,45.10057],[18.06856,45.10352],[18.06664,45.10772],[18.06856,45.1115],[18.08054,45.119],[18.07242,45.13182],[18.06597,45.13909],[18.05709,45.13962],[18.04822,45.13631],[18.04462,45.12385],[18.03733,45.12196],[18.02862,45.12432],[18.02126,45.13868],[18.01732,45.14618],[18.0097,45.14872],[17.9948,45.14488],[17.9824,45.13543],[17.98106,45.12414],[17.97202,45.11292],[17.96105,45.10843],[17.94146,45.10813],[17.93576,45.1037],[17.9366,45.09483],[17.94221,45.08626],[17.94171,45.08141],[17.93024,45.07438],[17.90654,45.05882],[17.88418,45.04794],[17.86593,45.04114],[17.85061,45.04019],[17.83545,45.04327],[17.80824,45.05663],[17.78848,45.07308],[17.78504,45.0768],[17.77709,45.08124],[17.76905,45.08112],[17.76528,45.0807],[17.75616,45.08254],[17.73238,45.09584],[17.71747,45.10394],[17.7091,45.11032],[17.70047,45.11138],[17.68808,45.11357],[17.6777,45.12426],[17.67225,45.12934],[17.66363,45.13094],[17.65341,45.1281],[17.63483,45.11971],[17.62989,45.1151],[17.62629,45.1102],[17.61599,45.10967],[17.61063,45.106],[17.6005,45.10181],[17.59045,45.10281],[17.58358,45.10843],[17.57839,45.11256],[17.57445,45.11286],[17.5696,45.10654],[17.55729,45.10417],[17.54992,45.10701],[17.55059,45.11321],[17.55277,45.12184],[17.5495,45.12663],[17.54414,45.12544],[17.54582,45.11835],[17.54372,45.11292],[17.53594,45.10665],[17.52187,45.10488],[17.51283,45.10494],[17.50362,45.11109],[17.49801,45.10837],[17.48821,45.10589],[17.47757,45.10795],[17.47347,45.11239],[17.47699,45.11894],[17.48746,45.12515],[17.48821,45.13283],[17.47456,45.12267],[17.4589,45.12249],[17.44768,45.12456],[17.44408,45.1281],[17.44425,45.13265],[17.45086,45.14399],[17.44827,45.15627],[17.44509,45.15769],[17.44098,45.15639],[17.43814,45.14582],[17.4275,45.13655],[17.41754,45.13253],[17.40607,45.13141],[17.38312,45.13407],[17.35968,45.13608],[17.3426,45.13809],[17.32644,45.14895],[17.32225,45.15604],[17.32752,45.16295],[17.30927,45.16159],[17.30525,45.16619],[17.30659,45.17375],[17.29554,45.17233],[17.28264,45.17186],[17.27318,45.18585],[17.26824,45.17404],[17.26422,45.17257],[17.26389,45.16619],[17.25903,45.15332],[17.25141,45.1444],[17.2463,45.14263],[17.23492,45.14376],[17.22244,45.14257],[17.2144,45.14381],[17.2031,45.14659],[17.19096,45.14328],[17.17932,45.14352],[17.16542,45.14694],[17.14055,45.16047],[17.13125,45.16295],[17.10957,45.17334],[17.10262,45.17475],[17.06619,45.18904],[17.0605,45.196],[17.0507,45.19736],[17.04065,45.20414],[17.03437,45.21983],[17.02382,45.21087],[17.01771,45.20951],[17.00992,45.21081],[17.00415,45.21399],[17.00314,45.21889],[17.00004,45.21783],[16.99201,45.21889],[16.9864,45.22066],[16.97911,45.22573],[16.97559,45.22443],[16.96923,45.22384],[16.96362,45.22644],[16.95943,45.22844],[16.95583,45.22886],[16.95031,45.22514],[16.94361,45.22431],[16.93875,45.22426],[16.93264,45.22703],[16.93088,45.23682],[16.93054,45.24206],[16.9344,45.24878],[16.94637,45.25321],[16.94897,45.25468],[16.94913,45.25668],[16.93699,45.26158],[16.93465,45.26965],[16.93331,45.27307],[16.9282,45.27307],[16.92351,45.27142],[16.92259,45.26723],[16.91782,45.26275],[16.91874,45.25975],[16.91681,45.25509],[16.91237,45.25061],[16.90442,45.24749],[16.89814,45.24713],[16.89429,45.24401],[16.88658,45.24295],[16.88809,45.24136],[16.88525,45.23428],[16.88742,45.23062],[16.88684,45.22644],[16.88432,45.22296],[16.88508,45.22137],[16.88181,45.21647],[16.87737,45.216],[16.8721,45.21718],[16.86833,45.21635],[16.86724,45.21193],[16.86322,45.20821],[16.85778,45.20225],[16.85292,45.20115],[16.84775,45.20171],[16.84623,45.1975],[16.84723,45.19526],[16.84706,45.19367],[16.84438,45.19148],[16.84116,45.18842],[16.83484,45.18547],[16.8286,45.18402],[16.82178,45.1824],[16.81516,45.18187],[16.80691,45.18254],[16.80273,45.18299],[16.79109,45.18603],[16.77706,45.18948],[16.77124,45.19119],[16.76329,45.1957],[16.75965,45.19703],[16.75328,45.19665],[16.74889,45.1975],[16.73972,45.20143],[16.7326,45.20461],[16.73051,45.20467],[16.72611,45.20258],[16.72063,45.20205],[16.71615,45.20184],[16.71121,45.19951],[16.70409,45.1947],[16.69911,45.1934],[16.69429,45.1934],[16.68939,45.19491],[16.68349,45.19727],[16.67809,45.19871],[16.67051,45.19857],[16.66649,45.19945],[16.66168,45.20208],[16.65628,45.20452],[16.65125,45.20441],[16.64543,45.20517],[16.6343,45.21163],[16.63015,45.21113],[16.62802,45.21116],[16.62509,45.2124],[16.62278,45.21467],[16.62107,45.21718],[16.61941,45.21939],[16.61709,45.22137],[16.61451,45.22243],[16.60744,45.22516],[16.60455,45.22697],[16.60028,45.22828],[16.59808,45.22881],[16.59699,45.22877],[16.59356,45.22654],[16.59218,45.22426],[16.58755,45.22213],[16.58255,45.22004],[16.5792,45.21948],[16.57514,45.21974],[16.57133,45.2196],[16.56785,45.21976],[16.56528,45.21976],[16.56237,45.21855],[16.55883,45.21705],[16.55559,45.21654],[16.55249,45.21641],[16.54954,45.21688],[16.54772,45.21712],[16.54445,45.21777],[16.54198,45.21876],[16.53884,45.22048],[16.53725,45.22206],[16.5366,45.22433],[16.53589,45.22452],[16.53308,45.22445],[16.53074,45.22431],[16.52186,45.22151],[16.51946,45.21977],[16.5151,45.21845],[16.51263,45.21647],[16.50999,45.21581],[16.50512,45.21274],[16.50163,45.21198],[16.49998,45.21198],[16.49992,45.20987],[16.49689,45.20907],[16.49491,45.20698],[16.49417,45.20094],[16.49086,45.19326],[16.48662,45.1876],[16.47863,45.18198],[16.47765,45.18004],[16.4782,45.17638],[16.48211,45.1696],[16.4831,45.16561],[16.48159,45.15965],[16.47876,45.15632],[16.47142,45.14842],[16.46679,45.14146],[16.46448,45.13997],[16.46184,45.13997],[16.46186,45.13855],[16.45391,45.13501],[16.45031,45.13174],[16.44722,45.13101],[16.44499,45.12871],[16.44087,45.12514],[16.43486,45.12272],[16.42988,45.12175],[16.42383,45.1219],[16.4237,45.12057],[16.41417,45.11902],[16.40499,45.11581],[16.39821,45.11157],[16.39752,45.10909],[16.39675,45.1063],[16.39744,45.10509],[16.40636,45.0997],[16.40645,45.09831],[16.40585,45.09661],[16.40233,45.09449],[16.39958,45.09255],[16.39915,45.08807],[16.39641,45.08485],[16.39057,45.08037],[16.3898,45.0771],[16.39152,45.07207],[16.39134,45.06613],[16.38817,45.06067],[16.38757,45.05236],[16.38165,45.04794],[16.37718,45.04842],[16.37315,45.0426],[16.3686,45.03969],[16.36362,45.03508],[16.3613,45.03023],[16.36311,45.02392],[16.36122,45.01706],[16.36268,45.01172],[16.35984,45.00693],[16.3583,45.00232],[16.35504,44.99959],[16.34706,44.99704],[16.33056,44.99762],[16.32583,44.99875],[16.32279,44.99882],[16.31546,44.99583],[16.3062,44.9957],[16.30148,44.99502],[16.29511,44.99478],[16.29188,44.99293],[16.28569,44.9923],[16.28427,44.99441],[16.28042,45.00406],[16.27552,45.00208],[16.26948,45.00393],[16.26777,45.01237],[16.26682,45.01324],[16.26468,45.01328],[16.26292,45.00958],[16.25802,45.00776],[16.25426,45.00796],[16.25155,45.01032],[16.24628,45.01139],[16.24152,45.01012],[16.22578,45.01489],[16.22497,45.02141],[16.22131,45.02161],[16.20971,45.02578],[16.20619,45.02924],[16.19625,45.02733],[16.19069,45.02823],[16.18707,45.03149],[16.18141,45.04477],[16.174,45.04836],[16.17124,45.05115],[16.17176,45.05656],[16.16962,45.06136],[16.16515,45.06626],[16.16715,45.07026],[16.16192,45.07231],[16.15322,45.07946],[16.14489,45.08081],[16.13857,45.0851],[16.13643,45.08524],[16.13472,45.08359],[16.13025,45.08332],[16.12573,45.08527],[16.12159,45.0893],[16.10628,45.08964],[16.09853,45.09705],[16.09282,45.10024],[16.08617,45.10185],[16.08065,45.10994],[16.08021,45.12308],[16.07989,45.13195],[16.07442,45.1393],[16.06672,45.14359],[16.05821,45.15315],[16.05136,45.15731],[16.0467,45.16804],[16.04199,45.17042],[16.04152,45.17619],[16.02321,45.17733],[16.01612,45.17582],[16.01137,45.178],[16.00914,45.18458],[16.02074,45.19412],[16.0224,45.19757],[16.01731,45.20001],[16.01122,45.21415],[16.00666,45.21352],[16.00209,45.21414],[15.99729,45.21784],[15.99299,45.21741],[15.98569,45.22062],[15.97876,45.2257],[15.97485,45.22537],[15.96924,45.219],[15.9602,45.21757],[15.9561,45.21445],[15.94777,45.21067],[15.91799,45.21049],[15.91602,45.21084],[15.91676,45.21425],[15.92107,45.22075],[15.92048,45.22437],[15.91837,45.22313],[15.91641,45.22182],[15.91103,45.22092],[15.90497,45.22186],[15.90076,45.22427],[15.89795,45.22354],[15.89976,45.21924],[15.89843,45.21553],[15.89596,45.21355],[15.88727,45.21269],[15.88478,45.21492],[15.87527,45.21472],[15.87009,45.21666],[15.8601,45.21395],[15.85538,45.21374],[15.84351,45.22157],[15.83464,45.21608],[15.83649,45.21177],[15.82967,45.20474],[15.82342,45.20258],[15.81405,45.20607],[15.81303,45.20303],[15.80651,45.20025],[15.80658,45.1968],[15.8047,45.19499],[15.79767,45.19164],[15.79069,45.19066],[15.78682,45.18517],[15.78216,45.18249],[15.78188,45.17495],[15.78039,45.17366],[15.77476,45.17354],[15.77487,45.16994],[15.77289,45.16881],[15.77021,45.16383],[15.77392,45.15274],[15.78071,45.14703],[15.78012,45.14014],[15.78483,45.1394],[15.7871,45.13525],[15.78302,45.1302],[15.78911,45.12464],[15.79444,45.12179],[15.79588,45.11433],[15.78558,45.10442],[15.78341,45.09297],[15.77534,45.09164],[15.77927,45.08366],[15.77597,45.08369],[15.776,45.08188],[15.77587,45.07994],[15.77589,45.07704],[15.77534,45.07382],[15.7611,45.06754],[15.75772,45.06344],[15.75122,45.06121],[15.75929,45.05309],[15.76032,45.04691],[15.77165,45.02161],[15.77654,45.01075],[15.78186,45.0096],[15.78701,45.00456],[15.79001,44.99352],[15.78572,44.98271],[15.78847,44.97482],[15.7871,44.96984],[15.781,44.96504],[15.77371,44.96583],[15.77182,44.96765],[15.75336,44.96619],[15.75113,44.95836],[15.75371,44.95083],[15.75113,44.94488],[15.74281,44.93655],[15.76487,44.88762],[15.76401,44.87071],[15.79834,44.84699],[15.79628,44.84419],[15.76143,44.82617],[15.73551,44.82288],[15.7477,44.80863],[15.74547,44.80121],[15.75972,44.78829],[15.76744,44.77794],[15.77465,44.77196],[15.77568,44.76758],[15.78289,44.75844],[15.7877,44.75051],[15.81242,44.74332],[15.81911,44.73686],[15.82615,44.72649],[15.8325,44.72393],[15.84726,44.7393],[15.85894,44.74003],[15.87147,44.73613],[15.87696,44.73564],[15.88005,44.74698],[15.89481,44.75271],[15.90631,44.74978],[15.90685,44.74324],[15.9156,44.73624],[15.92568,44.72287],[15.93043,44.71939],[15.93329,44.71273],[15.93666,44.71455],[15.95526,44.71499],[15.95896,44.71307],[15.96058,44.70783],[15.96139,44.70394],[15.95825,44.70009],[15.9622,44.69583],[15.96662,44.69482],[15.96914,44.69282],[15.97323,44.68336],[15.97256,44.67954],[15.97946,44.67328],[15.98431,44.67325],[15.9894,44.67156],[15.9932,44.66878],[15.9971,44.66608],[15.99957,44.66286],[16.01389,44.6586],[16.02287,44.66019],[16.03025,44.65833],[16.03586,44.65529],[16.03705,44.64872],[16.04423,44.64061],[16.04603,44.63739],[16.0476,44.63045],[16.04912,44.6293],[16.05274,44.62978],[16.05823,44.62811],[16.0592,44.627],[16.05963,44.61248],[16.06263,44.60805],[16.05868,44.60361],[16.05298,44.60341],[16.05084,44.60046],[16.05531,44.59799],[16.05564,44.59508],[16.04751,44.58986],[16.04499,44.58634],[16.03595,44.58438],[16.02497,44.58563],[16.02135,44.58329],[16.02316,44.5732],[16.02416,44.56754],[16.02335,44.56378],[16.04917,44.54877],[16.05778,44.54162],[16.08056,44.53881],[16.09458,44.53528],[16.11056,44.52942],[16.12673,44.51464],[16.12792,44.50341],[16.13543,44.49378],[16.13662,44.48788],[16.141,44.48581],[16.1458,44.48018],[16.14413,44.47424],[16.14033,44.47047],[16.14223,44.46243],[16.13748,44.45873],[16.13767,44.45734],[16.141,44.45727],[16.14423,44.45544],[16.14818,44.44916],[16.14713,44.4423],[16.14375,44.43918],[16.14594,44.42719],[16.14879,44.42542],[16.15559,44.42542],[16.16491,44.41802],[16.16858,44.41462],[16.17072,44.4098],[16.17599,44.4063],[16.17742,44.40236],[16.17571,44.39968],[16.16991,44.39747],[16.16092,44.39176],[16.15412,44.39111],[16.15108,44.39173],[16.14019,44.3886],[16.13367,44.39142],[16.134,44.3868],[16.13524,44.38112],[16.14608,44.3799],[16.14993,44.38085],[16.1536,44.3834],[16.15797,44.3834],[16.17276,44.37701],[16.17856,44.37018],[16.19915,44.3659],[16.20998,44.36191],[16.22406,44.3489],[16.22307,44.34118],[16.20923,44.33349],[16.20405,44.32822],[16.19963,44.31988],[16.19953,44.3143],[16.19368,44.30784],[16.1923,44.29936],[16.1923,44.29548],[16.19511,44.29218],[16.1972,44.28398],[16.19606,44.27162],[16.20077,44.26219],[16.20538,44.2582],[16.20495,44.25425],[16.209,44.25459],[16.21427,44.25177],[16.22269,44.24131],[16.22559,44.23409],[16.22412,44.22213],[16.22179,44.22032],[16.21908,44.21974],[16.21765,44.21695],[16.22307,44.21388],[16.22973,44.21207],[16.23192,44.20696],[16.23429,44.20488],[16.23722,44.20476],[16.23721,44.20365],[16.24017,44.20368],[16.24314,44.20014],[16.24685,44.19823],[16.24761,44.19602],[16.25488,44.19141],[16.25992,44.18586],[16.26577,44.18173],[16.26744,44.17852],[16.27395,44.17634],[16.27638,44.17307],[16.2934,44.16444],[16.29892,44.15594],[16.30916,44.14974],[16.31098,44.1463],[16.31266,44.14387],[16.31276,44.14256],[16.31157,44.12793],[16.31525,44.12639],[16.31598,44.125],[16.3168,44.12172],[16.32072,44.11655],[16.33606,44.11467],[16.3383,44.11357],[16.35283,44.10791],[16.36216,44.10334],[16.36388,44.10159],[16.36616,44.09926],[16.36664,44.09827],[16.36668,44.09748],[16.36514,44.09516],[16.37192,44.08445],[16.37753,44.08405],[16.37814,44.08379],[16.38276,44.08597],[16.38391,44.08599],[16.38536,44.08569],[16.38659,44.08507],[16.38961,44.08289],[16.39672,44.08247],[16.39834,44.08239],[16.40072,44.08215],[16.40256,44.08211],[16.42785,44.0856],[16.42923,44.08519],[16.4303,44.08448],[16.44441,44.0688],[16.44508,44.06805],[16.44565,44.06696],[16.44472,44.06462],[16.44389,44.06191],[16.43893,44.05434],[16.4396,44.049],[16.44177,44.04244],[16.44204,44.03718],[16.44144,44.03546],[16.43997,44.03188],[16.44156,44.03107],[16.44345,44.0311],[16.44897,44.03042],[16.45525,44.03049],[16.45923,44.03076],[16.46266,44.03126],[16.46731,44.03221],[16.46936,44.03212],[16.48295,44.0317],[16.50428,44.02631],[16.50539,44.02518],[16.5187,44.00519],[16.53769,43.98917],[16.53995,43.98722],[16.54742,43.97499],[16.54784,43.97359],[16.55289,43.9553],[16.58975,43.94507],[16.59094,43.94383],[16.59163,43.94198],[16.59304,43.93928],[16.60141,43.93673],[16.60252,43.93566],[16.6029,43.93479],[16.60614,43.9266],[16.61033,43.92476],[16.61114,43.92396],[16.61148,43.92265],[16.61232,43.92],[16.6123,43.91601],[16.61539,43.91597],[16.62603,43.90769],[16.62867,43.90324],[16.64786,43.88983],[16.64922,43.88855],[16.65117,43.88764],[16.65797,43.88589],[16.66067,43.88414],[16.66243,43.88224],[16.66266,43.88149],[16.66505,43.87972],[16.66869,43.87984],[16.67011,43.87971],[16.67173,43.87885],[16.67495,43.87646],[16.6753,43.87581],[16.68634,43.86798],[16.70704,43.86016],[16.70857,43.85933],[16.71315,43.85609],[16.7138,43.85502],[16.71809,43.84742],[16.71824,43.8464],[16.71843,43.8444],[16.72107,43.84185],[16.72161,43.84086],[16.72136,43.83616],[16.7236,43.83248],[16.72362,43.83172],[16.72335,43.83075],[16.72144,43.8294],[16.72347,43.82627],[16.72351,43.82517],[16.72268,43.82325],[16.72213,43.82148],[16.72148,43.81899],[16.72136,43.81635],[16.72215,43.80778],[16.72601,43.8053],[16.72799,43.80221],[16.72956,43.80045],[16.72977,43.7994],[16.72915,43.79709],[16.72868,43.79633],[16.7304,43.79518],[16.73067,43.79396],[16.7331,43.79121],[16.73685,43.78775],[16.74221,43.78312],[16.74761,43.77845],[16.7541,43.77221],[16.75707,43.77269],[16.76105,43.77219],[16.76113,43.77177],[16.76613,43.7717],[16.77987,43.77006],[16.80222,43.76488],[16.80474,43.7634],[16.81478,43.75664],[16.81822,43.75048],[16.81828,43.74988],[16.82743,43.73415],[16.83352,43.73241],[16.83664,43.7307],[16.85083,43.72098],[16.86975,43.71255],[16.87562,43.70733],[16.87926,43.70099],[16.87915,43.69905],[16.88031,43.69583],[16.88522,43.69357],[16.88617,43.6923],[16.88811,43.68718],[16.9022,43.68081],[16.91083,43.67631],[16.91177,43.67521],[16.91319,43.67263],[16.9151,43.67026],[16.91964,43.66446],[16.91987,43.66365],[16.9224,43.66007],[16.93025,43.65648],[16.93092,43.65531],[16.93161,43.65321],[16.9349,43.64722],[16.93502,43.6448],[16.96136,43.6273],[16.96701,43.62375],[16.97371,43.61948],[16.97438,43.61853],[16.98089,43.60728],[16.98424,43.6034],[16.98573,43.60235],[16.98596,43.6015],[16.98907,43.59903],[16.99,43.59768],[16.99288,43.59344],[16.99533,43.59303],[16.99672,43.59205],[16.99824,43.59048],[16.99849,43.58974],[17.00863,43.58314],[17.00982,43.58233],[17.01034,43.58107],[17.0107,43.58011],[17.01059,43.5779],[17.0165,43.5733],[17.02349,43.56986],[17.02745,43.56859],[17.0318,43.5659],[17.03477,43.56426],[17.03862,43.56096],[17.04442,43.55911],[17.05219,43.5578],[17.05378,43.55721],[17.05702,43.55681],[17.05702,43.55466],[17.06636,43.55462],[17.06808,43.55331],[17.06879,43.55202],[17.06852,43.55117],[17.07149,43.54991],[17.07346,43.54927],[17.07452,43.54838],[17.08097,43.54524],[17.08189,43.54413],[17.08518,43.54105],[17.08683,43.53952],[17.08861,43.53847],[17.09226,43.5361],[17.09602,43.53387],[17.09682,43.53308],[17.10538,43.53055],[17.10685,43.52958],[17.10814,43.52757],[17.10963,43.5258],[17.1252,43.52018],[17.12726,43.51848],[17.13247,43.5127],[17.13458,43.51098],[17.13502,43.51009],[17.13737,43.50974],[17.13969,43.50972],[17.14176,43.50901],[17.14208,43.5086],[17.14415,43.50792],[17.14524,43.50711],[17.14576,43.5059],[17.14771,43.50368],[17.15204,43.49746],[17.15583,43.49647],[17.16031,43.49604],[17.17436,43.49275],[17.17884,43.4963],[17.18005,43.49774],[17.18154,43.4982],[17.18405,43.49902],[17.18771,43.49984],[17.19003,43.49967],[17.19537,43.49993],[17.20701,43.49982],[17.2122,43.49881],[17.21509,43.49966],[17.21637,43.49946],[17.22093,43.49976],[17.22801,43.49976],[17.23196,43.49837],[17.23435,43.4967],[17.23701,43.49603],[17.23822,43.49496],[17.2404,43.49427],[17.24187,43.49351],[17.24561,43.49263],[17.24785,43.49156],[17.25275,43.48933],[17.25855,43.4861],[17.26052,43.48547],[17.26225,43.48455],[17.26728,43.48271],[17.26958,43.48124],[17.27243,43.47973],[17.27276,43.47849],[17.27632,43.47642],[17.27731,43.47519],[17.28139,43.47296],[17.28264,43.47171],[17.28532,43.46933],[17.28624,43.46797],[17.2866,43.46536],[17.28913,43.46188],[17.28899,43.45998],[17.28991,43.45711],[17.28926,43.4541],[17.28804,43.45238],[17.28972,43.44916],[17.28959,43.44726],[17.28865,43.4458],[17.28878,43.44351],[17.28788,43.44156],[17.28842,43.43857],[17.28733,43.43422],[17.28549,43.43054],[17.28216,43.42595],[17.27814,43.42043],[17.2745,43.41634],[17.27216,43.413],[17.26918,43.41219],[17.26382,43.40792],[17.26217,43.40486],[17.26075,43.40301],[17.25664,43.40208],[17.26104,43.3989],[17.26414,43.39479],[17.26516,43.39138],[17.26632,43.386],[17.26791,43.37838],[17.26885,43.3732],[17.27251,43.36888],[17.27391,43.36757],[17.27446,43.3659],[17.27438,43.36444],[17.27699,43.36022],[17.27712,43.35861],[17.27762,43.35677],[17.27756,43.35555],[17.27873,43.35526],[17.28313,43.34764],[17.29342,43.33131],[17.30111,43.31927],[17.30266,43.31749],[17.30441,43.31584],[17.30598,43.31389],[17.3095,43.30684],[17.31084,43.30487],[17.31178,43.30308],[17.31337,43.30084],[17.31383,43.29974],[17.31784,43.296],[17.32055,43.29333],[17.32438,43.28912],[17.32627,43.28879],[17.32901,43.28795],[17.33012,43.2867],[17.33138,43.28491],[17.33266,43.28267],[17.33254,43.28088],[17.3335,43.27866],[17.33408,43.27704],[17.33412,43.2747],[17.33478,43.27417],[17.33552,43.27283],[17.33602,43.2714],[17.33582,43.27005],[17.33559,43.26978],[17.33641,43.26898],[17.33653,43.26762],[17.33611,43.26646],[17.33564,43.26588],[17.3389,43.26232],[17.3407,43.25991],[17.341,43.25936],[17.34344,43.25777],[17.34447,43.25629],[17.34462,43.25537],[17.34752,43.25508],[17.35451,43.25395],[17.36082,43.25189],[17.36824,43.25169],[17.37011,43.25216],[17.37294,43.25218],[17.37646,43.252],[17.379,43.25122],[17.3817,43.25009],[17.38471,43.25012],[17.39222,43.24854],[17.39827,43.24763],[17.40078,43.24631],[17.40786,43.24182],[17.41663,43.23641],[17.42366,43.23203],[17.4234,43.22816],[17.42638,43.22814],[17.43036,43.22016],[17.43233,43.21821],[17.4327,43.21716],[17.43304,43.21537],[17.43274,43.21455],[17.43303,43.21187],[17.43455,43.21052],[17.43485,43.20942],[17.43455,43.20771],[17.43571,43.20556],[17.43552,43.20439],[17.43515,43.20269],[17.4345,43.19824],[17.43352,43.19711],[17.43303,43.19456],[17.43217,43.19342],[17.43154,43.19119],[17.43043,43.18933],[17.43053,43.18794],[17.43172,43.18519],[17.43346,43.18123],[17.43591,43.18263],[17.438,43.18288],[17.44028,43.18232],[17.44367,43.18111],[17.44761,43.18015],[17.45085,43.17971],[17.45279,43.17889],[17.4534,43.17815],[17.45524,43.17755],[17.45715,43.17643],[17.45855,43.1755],[17.45945,43.17458],[17.46034,43.17377],[17.46214,43.17318],[17.46327,43.17248],[17.46514,43.17164],[17.46668,43.17045],[17.46946,43.16877],[17.47561,43.16536],[17.47604,43.16418],[17.47869,43.1628],[17.48447,43.16096],[17.48814,43.16012],[17.49152,43.15872],[17.49323,43.15725],[17.49458,43.15644],[17.49585,43.15634],[17.49633,43.15603],[17.50096,43.15453],[17.50323,43.15328],[17.5041,43.15307],[17.5075,43.15153],[17.50916,43.1501],[17.51062,43.14917],[17.51568,43.14763],[17.52138,43.1462],[17.528,43.14377],[17.53268,43.14149],[17.53599,43.1394],[17.54105,43.13789],[17.54608,43.13624],[17.54735,43.1356],[17.54932,43.13385],[17.5514,43.13349],[17.55324,43.13339],[17.55662,43.1323],[17.55868,43.13126],[17.56014,43.13017],[17.56376,43.12737],[17.56486,43.12661],[17.5672,43.12577],[17.56843,43.12491],[17.5703,43.12428],[17.57361,43.12358],[17.57736,43.12229],[17.5818,43.12095],[17.58489,43.11943],[17.58694,43.11874],[17.58996,43.11716],[17.59436,43.11478],[17.59802,43.1129],[17.60069,43.11105],[17.60222,43.11094],[17.60363,43.11035],[17.60494,43.10942],[17.60589,43.1083],[17.61323,43.1047],[17.62194,43.10018],[17.62776,43.09777],[17.629,43.09757],[17.63049,43.09706],[17.63221,43.09613],[17.63334,43.09557],[17.63715,43.09477],[17.63904,43.09354],[17.64095,43.09229],[17.64304,43.09121],[17.64429,43.09027],[17.64522,43.08805],[17.65012,43.07925],[17.65267,43.07481],[17.65291,43.07368],[17.65295,43.07287],[17.65387,43.07064],[17.65413,43.07026],[17.65533,43.06911],[17.65625,43.06685],[17.65718,43.06482],[17.65969,43.06062],[17.66288,43.05543],[17.66398,43.05285],[17.66521,43.05078],[17.66695,43.04723],[17.669,43.04299],[17.67219,43.0381],[17.67612,43.03219],[17.67831,43.02874],[17.67986,43.0277],[17.68069,43.02618],[17.68167,43.0252],[17.68268,43.02425],[17.68431,43.02197],[17.68636,43.02069],[17.68689,43.01954],[17.68763,43.01635],[17.68846,43.01132],[17.69535,43.00363],[17.69763,43.00099],[17.69817,42.99964],[17.70499,42.98764],[17.70556,42.98527],[17.70669,42.98351],[17.7085,42.98023],[17.71408,42.97496],[17.71384,42.9707],[17.70105,42.96614],[17.68885,42.9633],[17.68698,42.96293],[17.68241,42.96273],[17.67891,42.96188],[17.67431,42.96167],[17.67178,42.96069],[17.67,42.95984],[17.66802,42.95943],[17.66662,42.95952],[17.66291,42.9585],[17.66149,42.95834],[17.66003,42.95843],[17.65517,42.95706],[17.65359,42.95674],[17.65131,42.95563],[17.64944,42.95519],[17.64297,42.95113],[17.64175,42.95083],[17.63991,42.95074],[17.63492,42.94772],[17.63317,42.94633],[17.63199,42.9452],[17.62938,42.94451],[17.62762,42.94357],[17.62611,42.9432],[17.62282,42.94183],[17.62121,42.94083],[17.61881,42.94012],[17.61537,42.93951],[17.60937,42.93868],[17.60543,42.93831],[17.6032,42.93825],[17.60213,42.93792],[17.59293,42.93768],[17.58964,42.93703],[17.58596,42.93632],[17.58424,42.93625],[17.58165,42.93547],[17.58002,42.93553],[17.57584,42.93452],[17.5649,42.93716],[17.56195,42.93632],[17.55758,42.9348],[17.55283,42.93751],[17.55068,42.9375],[17.54079,42.92978],[17.55227,42.92245],[17.57828,42.91352],[17.60211,42.9037],[17.61379,42.90241],[17.61921,42.89785],[17.62797,42.89436],[17.63398,42.88891],[17.64304,42.88436],[17.64799,42.88926],[17.66215,42.90753],[17.6643,42.91162],[17.67305,42.92048],[17.67683,42.92325],[17.68764,42.92563],[17.70404,42.92431],[17.72558,42.92174],[17.75631,42.91476],[17.76858,42.90992],[17.7879,42.89439],[17.80041,42.9114],[17.80532,42.91742],[17.80747,42.91947],[17.80994,42.91968],[17.81313,42.91834],[17.8145,42.91781],[17.81646,42.91693],[17.82294,42.9144],[17.83115,42.91166],[17.84137,42.90642],[17.84605,42.90453],[17.84684,42.90398],[17.84753,42.90304],[17.85276,42.89772],[17.85497,42.89507],[17.85905,42.88991],[17.86051,42.88881],[17.8618,42.88642],[17.86216,42.88405],[17.86074,42.88175],[17.8592,42.87944],[17.85757,42.8779],[17.8578,42.87662],[17.85961,42.86939],[17.86077,42.86793],[17.86188,42.8654],[17.86257,42.86362],[17.86613,42.85892],[17.86645,42.85802],[17.86733,42.85673],[17.87057,42.85152],[17.87315,42.84772],[17.87643,42.84496],[17.878,42.84334],[17.88046,42.83977],[17.88551,42.8398],[17.88933,42.83823],[17.89355,42.83672],[17.90126,42.83463],[17.90231,42.83418],[17.90334,42.8331],[17.90351,42.8322],[17.90241,42.82987],[17.90113,42.82794],[17.90003,42.82717],[17.8989,42.82512],[17.89754,42.82419],[17.89478,42.82156],[17.8933,42.82071],[17.89081,42.815],[17.89327,42.81196],[17.90171,42.81198],[17.90911,42.8131],[17.91046,42.81308],[17.91166,42.81273],[17.91362,42.81155],[17.91613,42.81011],[17.94119,42.80308],[17.95164,42.8011],[17.95338,42.79982],[17.96005,42.7946],[17.962,42.79191],[17.96683,42.78819],[17.96825,42.78757],[17.96921,42.78682],[17.96966,42.78627],[17.97529,42.78378],[17.97704,42.78202],[17.98146,42.78038],[17.98501,42.78065],[17.99464,42.77921],[17.99837,42.77783],[17.99975,42.77641],[17.99979,42.77518],[17.99975,42.7739],[18.00007,42.77231],[18.00018,42.76573],[18.00168,42.76442],[18.00219,42.76363],[18.00515,42.75962],[18.00663,42.75855],[18.01058,42.75648],[18.01161,42.75539],[18.0123,42.75465],[18.02601,42.75448],[18.02882,42.75358],[18.03268,42.75248],[18.03451,42.75242],[18.03698,42.7518],[18.04343,42.75042],[18.04496,42.74908],[18.05144,42.74422],[18.05339,42.74396],[18.05616,42.74279],[18.0588,42.74176],[18.06393,42.73857],[18.06562,42.73715],[18.06755,42.7354],[18.07105,42.73316],[18.07609,42.7296],[18.07667,42.7287],[18.07663,42.72749],[18.07691,42.7266],[18.07903,42.72698],[18.08019,42.72679],[18.08159,42.72632],[18.08416,42.72504],[18.0927,42.72184],[18.10032,42.71919],[18.10392,42.71713],[18.10843,42.71355],[18.10933,42.71193],[18.11045,42.70962],[18.11141,42.70663],[18.11131,42.7027],[18.11036,42.70155],[18.1107,42.69967],[18.11049,42.69906],[18.10873,42.69663],[18.10813,42.69359],[18.10592,42.68963],[18.1059,42.68878],[18.10976,42.68843],[18.1115,42.68857],[18.11246,42.68857],[18.11442,42.68876],[18.11626,42.68833],[18.11746,42.68747],[18.11948,42.68633],[18.12422,42.68545],[18.12667,42.68494],[18.12851,42.68472],[18.13373,42.68444],[18.13527,42.68384],[18.13813,42.68226],[18.14085,42.68261],[18.14253,42.68248],[18.14596,42.68086],[18.14686,42.67969],[18.14772,42.67676],[18.14931,42.67204],[18.15328,42.66798],[18.15613,42.66443],[18.15772,42.66199],[18.15828,42.65994],[18.15819,42.65896],[18.16598,42.66117],[18.17158,42.66197],[18.17261,42.66182],[18.17396,42.66295],[18.17501,42.66333],[18.17606,42.66339],[18.17913,42.66322],[18.18087,42.66254],[18.18338,42.66011],[18.18589,42.65781],[18.18772,42.65804],[18.19093,42.65757],[18.19327,42.65669],[18.1948,42.65524],[18.19497,42.65473],[18.19673,42.65381],[18.19782,42.65206],[18.19862,42.6508],[18.20424,42.64569],[18.20761,42.64051],[18.21389,42.63647],[18.21563,42.63405],[18.21844,42.63086],[18.22147,42.62796],[18.22422,42.62502],[18.22887,42.62202],[18.23381,42.62163],[18.23632,42.62041],[18.23728,42.61894],[18.23733,42.61801],[18.23911,42.6185],[18.24241,42.61822],[18.24368,42.61763],[18.24522,42.61563],[18.24619,42.61395],[18.2466,42.61106],[18.24679,42.60541],[18.24911,42.60547],[18.25844,42.60781],[18.26273,42.60892],[18.26477,42.61117],[18.27044,42.61342],[18.27312,42.61307],[18.2744,42.61517],[18.28073,42.61969],[18.28168,42.61995],[18.28503,42.61967],[18.28861,42.61945],[18.29249,42.61817],[18.31086,42.61733],[18.3235,42.61934],[18.33193,42.62142],[18.34811,42.6216],[18.36845,42.61827],[18.37062,42.61669],[18.37631,42.60993],[18.3824,42.60094],[18.38596,42.59811],[18.39259,42.59094],[18.40075,42.58794],[18.40066,42.586],[18.40545,42.58592],[18.41875,42.57781],[18.43351,42.56805],[18.43729,42.56658],[18.43954,42.56497],[18.44008,42.5637],[18.44096,42.5567],[18.44343,42.55112],[18.44341,42.54918],[18.44244,42.53503],[18.44201,42.52551],[18.44072,42.52124],[18.44021,42.52064],[18.446,42.5169],[18.45055,42.51001],[18.44931,42.50814],[18.44407,42.50121],[18.44394,42.49871],[18.44321,42.49754],[18.4433,42.4959],[18.44223,42.49397],[18.44171,42.49318],[18.44115,42.49026],[18.44175,42.48786],[18.44102,42.48631],[18.43987,42.48498],[18.44613,42.48264],[18.45077,42.47909],[18.45274,42.4765],[18.456,42.47482],[18.45815,42.47529],[18.46102,42.47444],[18.46634,42.47203],[18.47647,42.46665],[18.4787,42.46409],[18.48239,42.45883],[18.48673,42.45316],[18.49119,42.45006],[18.49437,42.4474],[18.49621,42.44357],[18.5069,42.43435],[18.50944,42.43283],[18.51866,42.42855],[18.52484,42.4237],[18.52851,42.42188],[18.52998,42.42174],[18.53683,42.39958],[18.53816,42.39319],[18.53787,42.39042],[18.53516,42.38933],[18.52931,42.3893],[18.52232,42.39066],[18.51919,42.39242],[18.51662,42.39288],[18.51248,42.39541],[18.50758,42.39839],[18.50435,42.40095],[18.50335,42.4065],[18.48793,42.4169],[18.48287,42.41931],[18.47862,42.42371],[18.47561,42.42659],[18.47261,42.42935],[18.47124,42.43261],[18.46591,42.43701],[18.46385,42.43961],[18.45969,42.4424],[18.44974,42.44683],[18.44562,42.44309],[18.4306,42.43708],[18.42236,42.44081],[18.42253,42.44582],[18.40219,42.45741],[18.40716,42.46456],[18.37051,42.48292],[18.35026,42.49159],[18.30503,42.5133],[18.26941,42.52582],[18.26348,42.53474],[18.24091,42.54979],[18.22254,42.56181],[18.21945,42.56775],[18.19851,42.56648],[18.18718,42.57255],[18.18443,42.57887],[18.16795,42.58532],[18.16915,42.5905],[18.19868,42.59998],[18.21327,42.59833],[18.21568,42.60453],[18.2016,42.61501],[18.18237,42.60983],[18.16401,42.61476],[18.14461,42.62524],[18.13379,42.62676],[18.1307,42.61792],[18.12178,42.61678],[18.10822,42.62171],[18.10444,42.6351],[18.03989,42.64873],[17.94891,42.64128],[17.06039,42.69152],[16.35138,42.37123],[16.23677,42.38453],[16.39023,42.73995],[15.43075,43.08152],[15.42676,43.10342],[15.63066,43.43802],[14.62071,44.3094],[14.29287,44.49332],[14.00808,44.80011],[13.9892,44.78854],[13.97152,44.78829],[13.95882,44.78768],[13.95367,44.7794],[13.95401,44.76916],[13.93564,44.75905],[13.88603,44.75271],[13.88535,44.76331],[13.89307,44.78049],[13.89153,44.8023],[13.86715,44.80388],[13.82578,44.82532],[13.81273,44.84467],[13.80363,44.85648],[13.78447,44.85757],[13.78601,44.88862],[13.77793,44.89044],[13.76604,44.88889],[13.7571,44.8829],[13.74901,44.88263],[13.7396,44.88856],[13.72724,44.90183],[13.72647,44.90823],[13.71639,44.90809],[13.70853,44.9134],[13.70926,44.91746],[13.71972,44.92473],[13.71925,44.92803],[13.71107,44.9351],[13.7123,44.94594],[13.72398,44.94888],[13.72443,44.94412],[13.74003,44.94462],[13.74596,44.94366],[13.77423,44.9216],[13.79362,44.92123],[13.7959,44.92877],[13.78487,44.93867],[13.77079,44.95919],[13.76178,44.96316],[13.76116,44.98088],[13.73532,44.98052],[13.72261,44.98289],[13.69926,44.98714],[13.69017,44.99661],[13.68347,45.00984],[13.68334,45.01524],[13.6745,45.01506],[13.64605,45.03605],[13.60777,45.03763],[13.60451,45.08431],[13.60193,45.12296],[13.57035,45.13967],[13.57754,45.15724],[13.56139,45.19789],[13.57374,45.22722],[13.58211,45.24115],[13.56651,45.25347],[13.56571,45.27271],[13.55416,45.30856],[13.55372,45.31784],[13.54537,45.31771],[13.52898,45.32753],[13.53379,45.36116],[13.52818,45.37418],[13.52383,45.39419],[13.51034,45.4124],[13.51013,45.42486],[13.50659,45.4248],[13.50447,45.44261],[13.50872,45.44279],[13.5076,45.46073],[13.50549,45.46079],[13.48227,45.48675],[13.48555,45.496],[13.49894,45.50731],[13.50564,45.50971],[13.5136,45.5099],[13.5443,45.4977],[13.56091,45.49377],[13.58344,45.48213],[13.58341,45.48066],[13.58734,45.48071],[13.62264,45.46586],[13.62274,45.46366],[13.63102,45.46387],[13.64511,45.46236],[13.65952,45.45616],[13.66785,45.45194],[13.67463,45.44773],[13.68073,45.44797],[13.68596,45.4511],[13.69643,45.45802],[13.70399,45.46013],[13.71042,45.46013],[13.71317,45.45688],[13.71969,45.45869],[13.72184,45.46133],[13.72699,45.46278],[13.74175,45.46453],[13.75248,45.46362],[13.76432,45.47054],[13.77308,45.46934],[13.77602,45.46747],[13.78933,45.46771],[13.80501,45.46386],[13.81119,45.4586],[13.81187,45.45483],[13.80913,45.45047],[13.80969,45.44577],[13.81865,45.4421],[13.819,45.43779],[13.83243,45.43803],[13.84217,45.43677],[13.85427,45.43439],[13.85827,45.42999],[13.86286,45.4305],[13.88238,45.429],[13.8859,45.43439],[13.89204,45.44297],[13.90762,45.45432],[13.91371,45.45664],[13.94096,45.45718],[13.94573,45.45938],[13.9595,45.45844],[13.9701,45.45233],[13.98027,45.45832],[13.98186,45.47094],[13.98663,45.47319],[13.99019,45.47328],[13.98087,45.48255],[13.98281,45.48451],[13.97113,45.49161],[13.96633,45.49335],[13.96186,45.49444],[13.95822,45.5071],[13.96337,45.5105],[13.96688,45.51465],[13.97414,45.51768],[13.97804,45.51738],[13.9816,45.51654],[13.98396,45.51432],[13.98937,45.51185],[13.99542,45.51104],[13.99336,45.51483],[13.99435,45.51756],[13.99804,45.52147],[14.00195,45.52298],[14.01465,45.52213],[14.03173,45.51173],[14.04495,45.50078],[14.04941,45.50117],[14.05375,45.50006],[14.07602,45.48728],[14.09147,45.48502],[14.10915,45.48586],[14.1267,45.48135],[14.14189,45.47795],[14.14872,45.48306],[14.15481,45.48385],[14.17172,45.48258],[14.18854,45.47864],[14.20335,45.47325],[14.20288,45.483],[14.21043,45.49459],[14.217,45.49654],[14.22047,45.50397],[14.23137,45.50845],[14.24884,45.50803],[14.26656,45.48715],[14.27695,45.49305],[14.28914,45.49296],[14.29467,45.48676],[14.30622,45.48345],[14.31733,45.48607],[14.31982,45.4846],[14.32179,45.4827],[14.32381,45.47413],[14.33656,45.48195],[14.34862,45.48791],[14.35282,45.48857],[14.36578,45.48821],[14.3869,45.49693],[14.39243,45.4975],[14.39462,45.50553],[14.41007,45.5099],[14.4138,45.51251],[14.42913,45.51215],[14.43346,45.51353],[14.43998,45.51931],[14.45299,45.52283],[14.47341,45.53756],[14.48749,45.54141],[14.49376,45.54991],[14.49238,45.56596],[14.49577,45.58008],[14.50058,45.58455],[14.50178,45.58852],[14.49311,45.59638],[14.49324,45.60041],[14.4953,45.60824],[14.49998,45.6084],[14.49993,45.61037],[14.50305,45.61087],[14.5112,45.61024],[14.51311,45.6103],[14.51569,45.61242],[14.52614,45.61357],[14.53247,45.61654],[14.54144,45.62448],[14.54242,45.62709],[14.54453,45.62895],[14.54779,45.63655],[14.56186,45.65401],[14.56487,45.6756],[14.56821,45.67686],[14.57954,45.67464],[14.58418,45.66912],[14.59748,45.67254],[14.61164,45.66673],[14.61345,45.65737],[14.61027,45.65065],[14.60522,45.62774],[14.62551,45.61817],[14.63212,45.61512],[14.63507,45.60761],[14.64061,45.60736],[14.6471,45.60249],[14.65359,45.59515],[14.6544,45.59372],[14.65441,45.59304],[14.66074,45.59309],[14.67618,45.59236],[14.68164,45.59083],[14.68697,45.58689],[14.6881,45.5847],[14.69134,45.58365],[14.69391,45.58134],[14.69629,45.57799],[14.70107,45.56974],[14.70367,45.56282],[14.70119,45.55836],[14.69821,45.55431],[14.6947,45.55291],[14.69452,45.54617],[14.69276,45.54485],[14.69175,45.54122],[14.69211,45.53837],[14.68957,45.53456],[14.69169,45.53064],[14.69859,45.52874],[14.69724,45.53345],[14.69989,45.53651],[14.70526,45.53816],[14.72508,45.53642],[14.73145,45.53258],[14.73729,45.53237],[14.74024,45.5301],[14.74343,45.52568],[14.75239,45.52068],[14.76183,45.51444],[14.76891,45.51502],[14.77298,45.51369],[14.77363,45.51026],[14.7882,45.50911],[14.79239,45.50555],[14.79516,45.50609],[14.79864,45.50514],[14.80766,45.49592],[14.80725,45.49385],[14.80389,45.4912],[14.80796,45.48889],[14.80949,45.48475],[14.80996,45.47995],[14.82011,45.47205],[14.82058,45.46316],[14.83309,45.46353],[14.84553,45.46519],[14.86034,45.46974],[14.86689,45.46895],[14.87249,45.47437],[14.87904,45.4752],[14.88895,45.47917],[14.90252,45.47822],[14.90782,45.4814],[14.90776,45.48314],[14.90664,45.48736],[14.90735,45.4922],[14.91083,45.49401],[14.90718,45.49848],[14.90859,45.50377],[14.91184,45.50514],[14.90894,45.51097],[14.9093,45.51593],[14.91001,45.52055],[14.9162,45.52444],[14.91667,45.52845],[14.92157,45.53097],[14.93136,45.53217],[14.93561,45.53072],[14.94953,45.52378],[14.97395,45.51006],[14.98516,45.50063],[14.99253,45.49927],[15.00798,45.50055],[15.0143,45.5003],[15.01872,45.49811],[15.03046,45.48897],[15.04119,45.49067],[15.04639,45.49654],[15.057,45.49707],[15.06078,45.49352],[15.06255,45.49033],[15.07258,45.49062],[15.0793,45.48541],[15.08738,45.48583],[15.09116,45.48368],[15.09181,45.47995],[15.08809,45.47689],[15.0888,45.46924],[15.09558,45.46622],[15.10443,45.46618],[15.11499,45.45819],[15.12679,45.44959],[15.14018,45.44719],[15.14525,45.44164],[15.15085,45.43249],[15.15846,45.42765],[15.16778,45.42529],[15.17427,45.42633],[15.17775,45.42479],[15.18566,45.42951],[15.18453,45.43552],[15.18772,45.43759],[15.19142,45.43844],[15.19617,45.4385],[15.19971,45.43634],[15.2043,45.4303],[15.2073,45.42827],[15.22158,45.42864],[15.22412,45.43067],[15.22417,45.43742],[15.22972,45.44363],[15.23562,45.45042],[15.24152,45.45633],[15.25385,45.46101],[15.26429,45.46469],[15.26912,45.46833],[15.2749,45.46903],[15.27968,45.46845],[15.29767,45.46241],[15.32298,45.45819],[15.32782,45.45555],[15.33832,45.46006],[15.3438,45.45993],[15.34575,45.46585],[15.34976,45.46949],[15.35548,45.47822],[15.36156,45.48157],[15.37766,45.48781],[15.37459,45.48996],[15.36881,45.49261],[15.36144,45.49186],[15.35707,45.49472],[15.34622,45.50154],[15.33082,45.50724],[15.32298,45.51402],[15.32227,45.51824],[15.31484,45.51915],[15.31177,45.52105],[15.30941,45.52576],[15.30938,45.52971],[15.30487,45.52969],[15.29879,45.53386],[15.29661,45.53841],[15.29691,45.5425],[15.29431,45.54807],[15.29372,45.56947],[15.29396,45.58243],[15.27414,45.59903],[15.27225,45.6053],[15.28122,45.61198],[15.29372,45.61578],[15.30233,45.61603],[15.29738,45.62139],[15.2975,45.63162],[15.30363,45.63575],[15.33112,45.63806],[15.34044,45.63682],[15.34669,45.63806],[15.34103,45.63888],[15.33702,45.64309],[15.33702,45.6468],[15.34292,45.64903],[15.3553,45.6501],[15.37335,45.64845],[15.37831,45.64408],[15.38657,45.64292],[15.38916,45.64086],[15.39836,45.64787],[15.39176,45.65183],[15.38904,45.65604],[15.3881,45.659],[15.38338,45.66667],[15.37276,45.67566],[15.37005,45.67912],[15.36734,45.68233],[15.36639,45.67516],[15.352,45.66585],[15.34575,45.66692],[15.34327,45.67129],[15.34598,45.6858],[15.35778,45.69124],[15.35896,45.69321],[15.35212,45.69791],[15.35424,45.7101],[15.34315,45.7087],[15.33808,45.70195],[15.329,45.69445],[15.32392,45.69404],[15.33136,45.67368],[15.32451,45.67005],[15.31413,45.67211],[15.31071,45.67714],[15.30387,45.6844],[15.29938,45.6825],[15.28287,45.69041],[15.28263,45.70409],[15.28004,45.70483],[15.27296,45.70112],[15.27308,45.69297],[15.26859,45.69132],[15.26437,45.69142],[15.25461,45.69799],[15.25213,45.70458],[15.25042,45.70792],[15.24647,45.71076],[15.24724,45.71377],[15.24541,45.71525],[15.24087,45.71579],[15.2401,45.71772],[15.23532,45.719],[15.23367,45.72238],[15.23656,45.72608],[15.25379,45.73028],[15.25904,45.72921],[15.2703,45.73807],[15.27042,45.74132],[15.27933,45.74696],[15.29059,45.74963],[15.29278,45.75428],[15.29903,45.7577],[15.30723,45.7584],[15.31643,45.76297],[15.3228,45.76309],[15.32982,45.76597],[15.3533,45.77655],[15.36197,45.77959],[15.36775,45.77963],[15.3725,45.78229],[15.37772,45.78234],[15.3804,45.78186],[15.38204,45.78291],[15.38291,45.7856],[15.39323,45.79224],[15.39851,45.79415],[15.40482,45.79528],[15.41276,45.79759],[15.4168,45.7975],[15.42025,45.79874],[15.44906,45.79833],[15.46384,45.79761],[15.47062,45.79902],[15.46703,45.80238],[15.4662,45.81097],[15.4626,45.81716],[15.46272,45.82041],[15.4662,45.82215],[15.47278,45.82067],[15.47455,45.82141],[15.47387,45.82458],[15.47602,45.82937],[15.48071,45.83111],[15.49316,45.83504],[15.49738,45.83374],[15.49897,45.83202],[15.50569,45.83101],[15.50729,45.8291],[15.50661,45.82499],[15.51015,45.82458],[15.5131,45.82577],[15.51914,45.82501],[15.52513,45.82641],[15.53144,45.83115],[15.5315,45.83329],[15.53536,45.83666],[15.53445,45.84085],[15.53438,45.84594],[15.53477,45.8477],[15.5364,45.85015],[15.53989,45.85055],[15.54429,45.84863],[15.55131,45.84846],[15.55369,45.84675],[15.55563,45.84103],[15.55871,45.83936],[15.55824,45.84189],[15.5599,45.8459],[15.56453,45.8489],[15.56666,45.85054],[15.56722,45.85191],[15.56902,45.85535],[15.57099,45.85595],[15.57316,45.85585],[15.57674,45.85445],[15.58208,45.8507],[15.58645,45.84938],[15.59155,45.84904],[15.5936,45.84878],[15.59706,45.84726],[15.60159,45.84556],[15.6061,45.84455],[15.61125,45.84251],[15.61172,45.84169],[15.61175,45.8384],[15.61794,45.83844],[15.62135,45.83665],[15.62662,45.83504],[15.6301,45.83508],[15.6328,45.8345],[15.63617,45.83193],[15.63715,45.8304],[15.63749,45.82716],[15.63986,45.82649],[15.64191,45.82462],[15.64389,45.82588],[15.64679,45.83072],[15.64819,45.83258],[15.65461,45.83693],[15.65905,45.83958],[15.66213,45.84285],[15.66478,45.84397],[15.66841,45.84418],[15.67124,45.84315],[15.67615,45.84369],[15.67829,45.84494],[15.68003,45.84534],[15.68771,45.84555],[15.69097,45.84555],[15.69081,45.84835],[15.69212,45.84996],[15.69403,45.85136],[15.69633,45.85186],[15.69817,45.85137],[15.69404,45.8549],[15.68885,45.85909],[15.68248,45.86067],[15.67953,45.86276],[15.67553,45.86715],[15.67431,45.86884],[15.67484,45.87033],[15.67659,45.87161],[15.67733,45.87335],[15.67618,45.87521],[15.67599,45.87739],[15.6773,45.87991],[15.67782,45.88346],[15.67984,45.88498],[15.68217,45.88501],[15.67997,45.8865],[15.67935,45.88766],[15.6767,45.88933],[15.67639,45.89149],[15.67723,45.89276],[15.67885,45.89367],[15.67887,45.8942],[15.67718,45.89569],[15.67698,45.89707],[15.67789,45.89907],[15.67649,45.90062],[15.67639,45.90182],[15.67547,45.90472],[15.6763,45.90599],[15.67991,45.90833],[15.68067,45.9085],[15.68251,45.91063],[15.68561,45.91093],[15.68793,45.91095],[15.68787,45.91501],[15.68927,45.91582],[15.69103,45.9161],[15.69245,45.91687],[15.69442,45.9174],[15.69554,45.91715],[15.69563,45.91873],[15.69681,45.92187],[15.7023,45.92368],[15.70256,45.92448],[15.70003,45.92579],[15.69988,45.92749],[15.70156,45.92934],[15.70171,45.93176],[15.7041,45.93322],[15.70463,45.93664],[15.70401,45.93896],[15.70548,45.94101],[15.70531,45.94214],[15.70501,45.94349],[15.70525,45.94534],[15.70404,45.94866],[15.70534,45.95092],[15.70563,45.95752],[15.70575,45.96322],[15.69991,45.98064],[15.69625,45.98753],[15.69643,45.99138],[15.69779,45.99196],[15.69619,45.994],[15.69584,45.99749],[15.6982,46.00261],[15.70327,46.00413],[15.70817,46.00667],[15.7074,46.00974],[15.70663,46.01093],[15.70374,46.01162],[15.70233,46.01339],[15.70209,46.01601],[15.70292,46.01818],[15.70793,46.02027],[15.70947,46.02232],[15.70947,46.02498],[15.71247,46.03038],[15.71194,46.03599],[15.71584,46.04017],[15.71902,46.04083],[15.71991,46.04345],[15.72315,46.04492],[15.72545,46.04492],[15.72026,46.04635],[15.7189,46.04844],[15.7189,46.04992],[15.71265,46.05536],[15.70274,46.05675],[15.68923,46.06003],[15.68103,46.06428],[15.67354,46.06772],[15.66812,46.06903],[15.66015,46.06719],[15.65596,46.06903],[15.65343,46.07112],[15.65213,46.07496],[15.65408,46.07852],[15.64594,46.08053],[15.64417,46.08213],[15.63726,46.07996],[15.63054,46.08057],[15.62323,46.08368],[15.61497,46.08994],[15.61432,46.09235],[15.61556,46.09423],[15.61886,46.09522],[15.61951,46.09677],[15.61373,46.09653],[15.6106,46.09845],[15.60748,46.10508],[15.60743,46.10826],[15.60466,46.10824],[15.6009,46.1108],[15.60143,46.11691],[15.60352,46.12515],[15.60677,46.13378],[15.60069,46.13729],[15.5922,46.14346],[15.59179,46.14731],[15.5945,46.15025],[15.60181,46.15303],[15.60789,46.15495],[15.6073,46.15666],[15.59928,46.15907],[15.59963,46.1632],[15.60317,46.1659],[15.60411,46.1688],[15.61432,46.1746],[15.62305,46.17615],[15.62671,46.17872],[15.63284,46.18252],[15.63178,46.18599],[15.63349,46.18791],[15.64192,46.19008],[15.6444,46.19281],[15.64251,46.19967],[15.64263,46.20351],[15.63833,46.20478],[15.63709,46.20743],[15.63844,46.21388],[15.64198,46.2158],[15.64329,46.21654],[15.64456,46.21655],[15.64451,46.21888],[15.64602,46.21958],[15.64847,46.21976],[15.65007,46.22006],[15.65216,46.22133],[15.65511,46.22198],[15.65664,46.22198],[15.66065,46.22327],[15.66505,46.22522],[15.66756,46.22561],[15.67045,46.22835],[15.67652,46.22955],[15.68242,46.22937],[15.68587,46.22845],[15.68917,46.22678],[15.69602,46.22614],[15.70286,46.225],[15.70846,46.22578],[15.71359,46.22578],[15.71787,46.22496],[15.72642,46.2259],[15.73032,46.22504],[15.73229,46.2238],[15.73321,46.222],[15.74094,46.22431],[15.74742,46.2238],[15.75185,46.22261],[15.75592,46.2221],[15.75798,46.22027],[15.75916,46.21765],[15.75792,46.21445],[15.75497,46.21186],[15.75601,46.21035],[15.75778,46.2098],[15.76893,46.21269],[15.77774,46.21586],[15.7832,46.21908],[15.78556,46.22143],[15.78491,46.22365],[15.78957,46.22906],[15.78925,46.23608],[15.79181,46.23891],[15.79529,46.24004],[15.79694,46.24269],[15.79223,46.25019],[15.78916,46.25376],[15.78742,46.2588],[15.78813,46.26088],[15.79102,46.2621],[15.79715,46.26272],[15.80205,46.263],[15.81013,46.26465],[15.81974,46.26461],[15.82313,46.26416],[15.82974,46.26549],[15.83874,46.26855],[15.84753,46.26877],[15.85219,46.26902],[15.86154,46.27034],[15.86384,46.27207],[15.86392,46.27348],[15.86221,46.27554],[15.86336,46.27735],[15.86652,46.27874],[15.8703,46.2811],[15.87487,46.28251],[15.87755,46.2832],[15.88327,46.28261],[15.89486,46.28614],[15.89537,46.28936],[15.89668,46.29014],[15.91594,46.29024],[15.91596,46.29077],[15.91918,46.28974],[15.92608,46.29051],[15.92855,46.29127],[15.93006,46.29121],[15.93211,46.29242],[15.93459,46.29274],[15.93863,46.2925],[15.94279,46.29335],[15.94636,46.29647],[15.95326,46.29747],[15.95595,46.29896],[15.96043,46.29937],[15.96264,46.3004],[15.96668,46.30778],[15.9727,46.31224],[15.97386,46.31387],[15.97615,46.31511],[15.97807,46.31491],[15.9847,46.31391],[15.98618,46.31693],[15.98913,46.31725],[15.99284,46.31713],[16.00352,46.31114],[16.01013,46.3131],[16.01284,46.3133],[16.0165,46.31522],[16.01709,46.31636],[16.01614,46.31852],[16.01361,46.32063],[16.01408,46.32292],[16.02222,46.3285],[16.02405,46.33265],[16.02812,46.33546],[16.03525,46.33998],[16.03962,46.34051],[16.04546,46.34006],[16.04758,46.33868],[16.05189,46.33795],[16.05484,46.34104],[16.05879,46.3441],[16.06357,46.34499],[16.07131,46.3449],[16.0713,46.34703],[16.07116,46.36293],[16.0691,46.3629],[16.06271,46.36942],[16.05136,46.37687],[16.04534,46.38216],[16.0467,46.38488],[16.05625,46.39644],[16.08799,46.39139],[16.13842,46.40811],[16.1501,46.40762],[16.15883,46.40457],[16.17045,46.3957],[16.17765,46.392],[16.17818,46.38838],[16.17989,46.38822],[16.18679,46.39066],[16.19181,46.38907],[16.1947,46.38728],[16.19405,46.38224],[16.20266,46.38378],[16.20827,46.38732],[16.21788,46.38793],[16.22042,46.38598],[16.22484,46.39005],[16.23204,46.3905],[16.23888,46.38769],[16.24106,46.38236],[16.24985,46.38289],[16.26507,46.37886],[16.27191,46.3813],[16.29863,46.38102],[16.29963,46.3815]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-dof-2014-2016",name:"dgu.hr: Croatia 2014-2016 Aerial imagery",type:"wms",template:"http://geoportal.dgu.hr/services/inspire/orthophoto_2014-2016/ows?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.OrthoImagery&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2016-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",polygon:[[[16.52249,46.49112],[16.52243,46.48295],[16.53499,46.48387],[16.54437,46.48076],[16.55592,46.4841],[16.57032,46.47695],[16.58004,46.47638],[16.59578,46.47995],[16.60968,46.47961],[16.61939,46.47165],[16.62559,46.47188],[16.63262,46.46934],[16.64719,46.46773],[16.66846,46.46184],[16.69994,46.42007],[16.70966,46.40541],[16.7192,46.40206],[16.73511,46.4046],[16.74231,46.40217],[16.74466,46.39848],[16.74466,46.38981],[16.75052,46.39224],[16.75789,46.39097],[16.7609,46.38566],[16.76509,46.38843],[16.77296,46.38877],[16.77899,46.38473],[16.78502,46.38947],[16.79624,46.39028],[16.80444,46.38739],[16.80896,46.3808],[16.81231,46.38011],[16.82069,46.37688],[16.82873,46.37768],[16.83743,46.37895],[16.84329,46.37399],[16.84329,46.36786],[16.85234,46.36451],[16.86172,46.35873],[16.86808,46.35769],[16.87361,46.35365],[16.86959,46.34775],[16.87277,46.34868],[16.88148,46.3407],[16.88583,46.33434],[16.87897,46.32544],[16.88198,46.32093],[16.88047,46.31364],[16.88365,46.306],[16.89019,46.30253],[16.89119,46.28633],[16.89119,46.28228],[16.90509,46.27789],[16.91263,46.26816],[16.91732,46.26434],[16.92519,46.26365],[16.93858,46.25774],[16.94344,46.25161],[16.95399,46.24442],[16.96287,46.24338],[16.96638,46.24547],[16.97559,46.24616],[16.98012,46.24049],[16.97777,46.2311],[16.97844,46.22821],[16.98983,46.22821],[16.99569,46.22612],[17.00641,46.22635],[17.05363,46.20631],[17.05748,46.20631],[17.06921,46.20492],[17.0749,46.19564],[17.07808,46.19286],[17.08327,46.19135],[17.08646,46.19344],[17.09902,46.1917],[17.10705,46.18857],[17.10722,46.18428],[17.11208,46.18185],[17.1238,46.18266],[17.13017,46.17918],[17.12866,46.17304],[17.13084,46.17234],[17.1377,46.17547],[17.15294,46.17617],[17.16198,46.17292],[17.16366,46.16167],[17.17153,46.16028],[17.18375,46.15227],[17.19179,46.13522],[17.19062,46.13092],[17.18342,46.12698],[17.18643,46.1199],[17.18392,46.11177],[17.21005,46.11699],[17.21624,46.11734],[17.22194,46.11398],[17.2231,46.10833],[17.21815,46.10213],[17.23366,46.10329],[17.23885,46.09946],[17.23751,46.09447],[17.22813,46.0904],[17.22529,46.08436],[17.23785,46.08181],[17.24396,46.07774],[17.24429,46.07071],[17.24488,46.06758],[17.25526,46.06764],[17.25669,46.06485],[17.25434,46.06183],[17.26908,46.06142],[17.27561,46.05758],[17.27594,46.05276],[17.26255,46.04282],[17.26673,46.03672],[17.28817,46.03556],[17.29813,46.03422],[17.30173,46.02643],[17.29629,46.02004],[17.27795,46.01771],[17.2762,46.01533],[17.26272,46.01265],[17.27092,46.01207],[17.2767,46.00759],[17.28356,46.00457],[17.29612,46.00643],[17.30182,46.00707],[17.30902,46.00335],[17.31011,45.99834],[17.30843,45.99154],[17.3153,45.99404],[17.32267,45.99439],[17.32912,45.99828],[17.33816,45.99951],[17.34377,45.99631],[17.34829,45.9863],[17.35231,45.97944],[17.35532,45.97792],[17.35591,45.98624],[17.35825,45.9927],[17.36194,45.99514],[17.37366,45.99398],[17.37936,45.99119],[17.38053,45.9838],[17.37308,45.97583],[17.38162,45.97146],[17.38748,45.96867],[17.39694,45.9643],[17.39635,45.96093],[17.39317,45.95522],[17.39049,45.9501],[17.39351,45.94428],[17.39024,45.93723],[17.39426,45.93514],[17.40657,45.94236],[17.41117,45.94306],[17.41511,45.9409],[17.41704,45.93403],[17.42566,45.93158],[17.43219,45.9324],[17.42474,45.93729],[17.42156,45.94498],[17.42507,45.95051],[17.43638,45.95377],[17.44835,45.95377],[17.4594,45.94905],[17.46778,45.94725],[17.49198,45.94556],[17.51517,45.94276],[17.53301,45.93793],[17.55947,45.9423],[17.57404,45.93991],[17.59313,45.92582],[17.61306,45.91586],[17.62863,45.90607],[17.6401,45.88701],[17.65249,45.86655],[17.65316,45.85507],[17.66053,45.84521],[17.67025,45.83833],[17.68565,45.84148],[17.70081,45.84072],[17.7106,45.83547],[17.72744,45.83477],[17.74937,45.83074],[17.75473,45.82438],[17.76394,45.81849],[17.77374,45.82],[17.78756,45.81971],[17.79585,45.81283],[17.8043,45.80833],[17.81075,45.80734],[17.8146,45.81172],[17.82339,45.81359],[17.83202,45.81131],[17.83629,45.80483],[17.83713,45.79339],[17.84341,45.78866],[17.85262,45.78702],[17.85655,45.78381],[17.85831,45.77762],[17.85957,45.77324],[17.86526,45.77067],[17.86811,45.77862],[17.88276,45.78755],[17.89457,45.79321],[17.90763,45.79537],[17.9196,45.7914],[17.92873,45.78948],[17.93518,45.79181],[17.94556,45.79485],[17.95352,45.7959],[17.9598,45.79461],[17.96901,45.79251],[17.97369,45.79269],[17.98282,45.79707],[18.00359,45.7973],[18.00719,45.79485],[18.01983,45.78422],[18.03465,45.77908],[18.04763,45.77762],[18.06028,45.77447],[18.08054,45.76834],[18.09335,45.76904],[18.10507,45.77435],[18.10951,45.78241],[18.1168,45.79],[18.12374,45.79257],[18.13538,45.79123],[18.14501,45.79175],[18.15757,45.78837],[18.1631,45.78183],[18.17055,45.77914],[18.17826,45.78767],[18.18763,45.79041],[18.19576,45.78977],[18.2048,45.78551],[18.21652,45.7837],[18.22933,45.78305],[18.2362,45.7792],[18.24633,45.76507],[18.24993,45.76547],[18.25906,45.76425],[18.27706,45.75852],[18.29054,45.76325],[18.29531,45.76372],[18.3,45.76296],[18.30871,45.75998],[18.31491,45.75952],[18.33249,45.75771],[18.34028,45.75291],[18.35033,45.76682],[18.35987,45.77511],[18.36506,45.77628],[18.3803,45.76781],[18.38533,45.76764],[18.39521,45.76466],[18.39864,45.75887],[18.40057,45.75952],[18.40475,45.75595],[18.403,45.74766],[18.41036,45.74222],[18.41849,45.74392],[18.42728,45.74479],[18.43599,45.7417],[18.44336,45.74187],[18.44344,45.75677],[18.44051,45.76033],[18.44922,45.77132],[18.45742,45.77248],[18.46504,45.76915],[18.47743,45.77003],[18.48028,45.78638],[18.48413,45.79491],[18.49401,45.79858],[18.50314,45.79736],[18.50858,45.7931],[18.5095,45.78854],[18.51612,45.78784],[18.52893,45.79561],[18.53278,45.79619],[18.53756,45.79567],[18.54308,45.79806],[18.54861,45.79683],[18.55212,45.79695],[18.55539,45.80442],[18.55757,45.80646],[18.57021,45.80425],[18.56829,45.8151],[18.58704,45.82129],[18.59885,45.82852],[18.59617,45.83576],[18.61719,45.84118],[18.61392,45.84696],[18.60906,45.85372],[18.62229,45.85938],[18.62334,45.87402],[18.62736,45.8792],[18.6333,45.87929],[18.63904,45.87186],[18.64775,45.87539],[18.63829,45.88288],[18.6372,45.88652],[18.63628,45.88972],[18.64402,45.89465],[18.6521,45.89812],[18.65708,45.89829],[18.65801,45.89963],[18.65587,45.90351],[18.6552,45.91536],[18.65566,45.91755],[18.65729,45.91935],[18.66462,45.91938],[18.67027,45.9149],[18.67299,45.91696],[18.68869,45.91895],[18.69954,45.92049],[18.70502,45.92093],[18.70703,45.92066],[18.70883,45.9183],[18.71365,45.91391],[18.72265,45.90788],[18.73852,45.90371],[18.74852,45.90272],[18.75137,45.90292],[18.75422,45.90211],[18.75438,45.89972],[18.75765,45.89951],[18.75962,45.89855],[18.76439,45.89447],[18.76393,45.89197],[18.77427,45.89136],[18.78034,45.88905],[18.78557,45.88378],[18.79064,45.88142],[18.79801,45.88151],[18.80609,45.88171],[18.80831,45.89101],[18.80814,45.89579],[18.80374,45.90144],[18.80274,45.90365],[18.81521,45.91536],[18.82036,45.91772],[18.82623,45.91743],[18.83033,45.90791],[18.86248,45.91303],[18.85984,45.91793],[18.86001,45.92116],[18.86257,45.92299],[18.86617,45.92296],[18.86918,45.9216],[18.87161,45.92017],[18.87237,45.91897],[18.87639,45.85638],[18.86651,45.85714],[18.86021,45.85912],[18.8592,45.85713],[18.86165,45.84448],[18.86005,45.83211],[18.85784,45.82581],[18.85114,45.81691],[18.85289,45.81577],[18.85373,45.81102],[18.8565,45.8114],[18.86248,45.80877],[18.87307,45.81026],[18.87617,45.8189],[18.87925,45.81794],[18.8774,45.78247],[18.87328,45.78159],[18.866,45.77791],[18.85574,45.7726],[18.85943,45.76673],[18.86592,45.76337],[18.87687,45.76008],[18.87611,45.74542],[18.90636,45.74482],[18.92405,45.74455],[18.92186,45.67243],[18.92709,45.66572],[18.92899,45.63999],[18.92814,45.59562],[18.92507,45.595],[18.91427,45.59755],[18.90833,45.59295],[18.90117,45.57833],[18.90242,45.57188],[18.90808,45.57012],[18.91084,45.56998],[18.91282,45.57206],[18.9171,45.57046],[18.92994,45.5682],[18.92709,45.55168],[18.9269,45.5301],[19.00355,45.53163],[19.00764,45.49465],[19.00317,45.49238],[19.00073,45.48768],[18.99591,45.48099],[18.99537,45.47391],[18.99524,45.47183],[18.99585,45.46597],[18.99509,45.46117],[18.99385,45.45303],[18.98625,45.4531],[18.98482,45.41993],[18.9852,45.4196],[18.9852,45.41719],[18.98758,45.41312],[18.98678,45.39609],[18.97879,45.39221],[18.97435,45.38718],[18.9741,45.38142],[18.97736,45.37577],[18.9832,45.37145],[18.98063,45.36516],[18.97769,45.36062],[18.97816,45.35728],[18.98187,45.3534],[18.97987,45.34745],[19.05577,45.34766],[19.05662,45.34565],[19.06927,45.34532],[19.06823,45.33161],[19.1036,45.33061],[19.10227,45.31021],[19.1079,45.30137],[19.11661,45.29513],[19.11739,45.28847],[19.13147,45.28914],[19.15525,45.27971],[19.1543,45.27328],[19.15905,45.22822],[19.15886,45.19398],[19.16038,45.18822],[19.15972,45.1844],[19.16324,45.18111],[19.16362,45.16268],[19.11207,45.16375],[19.11205,45.14601],[19.09091,45.14651],[19.07065,45.14698],[19.07503,45.14063],[19.09072,45.14058],[19.09117,45.1372],[19.0848,45.13299],[19.08456,45.13096],[19.08109,45.12669],[19.08045,45.11535],[19.08608,45.1136],[19.08767,45.11224],[19.0881,45.11083],[19.0876,45.11014],[19.08715,45.10956],[19.08898,45.10956],[19.09046,45.10885],[19.09671,45.10227],[19.09659,45.10033],[19.09766,45.09888],[19.09785,45.09754],[19.09699,45.09516],[19.09533,45.09269],[19.09797,45.09007],[19.10142,45.08705],[19.10287,45.08504],[19.10727,45.08324],[19.10838,45.08193],[19.10857,45.08104],[19.10967,45.07943],[19.10929,45.07809],[19.10631,45.07087],[19.09961,45.06035],[19.10408,45.05765],[19.10513,45.05629],[19.1076,45.05431],[19.10929,45.05206],[19.10952,45.05083],[19.10869,45.04876],[19.10612,45.04467],[19.10256,45.04021],[19.0979,45.03685],[19.09856,45.03544],[19.10073,45.0349],[19.1017,45.03432],[19.10237,45.03334],[19.10237,45.03242],[19.10158,45.0303],[19.10275,45.0283],[19.10275,45.02754],[19.10194,45.02595],[19.1008,45.02523],[19.10075,45.02354],[19.10173,45.0218],[19.10303,45.01546],[19.1042,45.01444],[19.10496,45.01316],[19.10532,45.01217],[19.10586,45.01163],[19.10612,45.01045],[19.10555,45.00926],[19.09928,45.00411],[19.09583,44.99369],[19.09483,44.99266],[19.09407,44.99246],[19.08882,44.99147],[19.08822,44.99038],[19.08202,44.98463],[19.07413,44.9833],[19.06536,44.98083],[19.06192,44.98015],[19.05936,44.97872],[19.05765,44.97822],[19.05879,44.97795],[19.06143,44.97743],[19.06582,44.97561],[19.07001,44.9756],[19.07517,44.9743],[19.08218,44.97666],[19.08708,44.97669],[19.09003,44.97608],[19.0944,44.97351],[19.09925,44.974],[19.10253,44.9737],[19.10708,44.97282],[19.11347,44.97662],[19.11768,44.97884],[19.12353,44.97955],[19.13071,44.98231],[19.13375,44.98345],[19.14008,44.98338],[19.14369,44.98234],[19.14854,44.97985],[19.15235,44.97706],[19.15149,44.96067],[19.15491,44.96078],[19.15682,44.96014],[19.15858,44.9566],[19.16024,44.95324],[19.15929,44.95108],[19.15605,44.94954],[19.15092,44.94745],[19.14778,44.94361],[19.14726,44.94015],[19.14459,44.93755],[19.13789,44.93624],[19.12648,44.93587],[19.11749,44.93099],[19.10831,44.9287],[19.10089,44.9256],[19.09172,44.92308],[19.08877,44.92119],[19.09129,44.91981],[19.09204,44.9164],[19.09072,44.91415],[19.08767,44.91358],[19.0901,44.9122],[19.0911,44.91042],[19.08649,44.90499],[19.08368,44.90361],[19.07698,44.90281],[19.07384,44.90065],[19.07103,44.89893],[19.06566,44.89843],[19.05781,44.90176],[19.04935,44.90678],[19.04193,44.91021],[19.03711,44.9148],[19.03284,44.91841],[19.02513,44.91871],[19.00562,44.91331],[18.99675,44.90679],[18.99708,44.89801],[19.01031,44.88508],[19.02756,44.85927],[19.02647,44.85137],[18.996,44.84823],[18.96225,44.84597],[18.92499,44.8468],[18.87835,44.84817],[18.85055,44.849],[18.83925,44.8547],[18.81915,44.87339],[18.78942,44.88449],[18.7633,44.8992],[18.75635,44.90792],[18.76338,44.91978],[18.74655,44.9263],[18.74471,44.93786],[18.74764,44.9455],[18.76271,44.94894],[18.78398,44.93857],[18.79579,44.93987],[18.79813,44.94485],[18.78214,44.95469],[18.7782,44.97596],[18.78901,44.99224],[18.78214,44.99165],[18.77251,44.99485],[18.76163,44.99591],[18.74613,44.98987],[18.73659,44.98934],[18.72679,44.99017],[18.72026,44.99728],[18.72621,45.00622],[18.73282,45.01545],[18.71892,45.02054],[18.71155,45.03475],[18.70109,45.03439],[18.68861,45.03764],[18.66466,45.05817],[18.6588,45.05326],[18.64725,45.05421],[18.64063,45.05776],[18.60864,45.05805],[18.59935,45.06409],[18.59843,45.06971],[18.60856,45.07627],[18.60211,45.07645],[18.58771,45.08384],[18.58704,45.06846],[18.57691,45.06154],[18.56703,45.06551],[18.56401,45.07432],[18.55598,45.07065],[18.54434,45.06137],[18.54467,45.05539],[18.54057,45.0409],[18.53161,45.03995],[18.52474,45.04303],[18.526,45.05155],[18.52299,45.05634],[18.51419,45.05344],[18.48983,45.05516],[18.46814,45.05995],[18.44804,45.07639],[18.43749,45.08265],[18.43088,45.0985],[18.41924,45.10518],[18.40015,45.10547],[18.36875,45.10269],[18.33676,45.09808],[18.32169,45.09696],[18.3098,45.10376],[18.3021,45.11191],[18.28929,45.10996],[18.27631,45.11174],[18.2722,45.12781],[18.26718,45.13318],[18.25755,45.13614],[18.23561,45.13194],[18.21493,45.12202],[18.21309,45.11705],[18.2161,45.10919],[18.22473,45.10287],[18.22699,45.09856],[18.22046,45.08827],[18.21192,45.08177],[18.19994,45.07562],[18.18286,45.07343],[18.16695,45.07396],[18.15062,45.08153],[18.1394,45.08183],[18.12115,45.07621],[18.1106,45.07863],[18.10139,45.08484],[18.08967,45.09714],[18.07652,45.10057],[18.06856,45.10352],[18.06664,45.10772],[18.06856,45.1115],[18.08054,45.119],[18.07242,45.13182],[18.06597,45.13909],[18.05709,45.13962],[18.04822,45.13631],[18.04462,45.12385],[18.03733,45.12196],[18.02862,45.12432],[18.02126,45.13868],[18.01732,45.14618],[18.0097,45.14872],[17.9948,45.14488],[17.9824,45.13543],[17.98106,45.12414],[17.97202,45.11292],[17.96105,45.10843],[17.94146,45.10813],[17.93576,45.1037],[17.9366,45.09483],[17.94221,45.08626],[17.94171,45.08141],[17.93024,45.07438],[17.90654,45.05882],[17.88418,45.04794],[17.86593,45.04114],[17.85061,45.04019],[17.83545,45.04327],[17.80824,45.05663],[17.78848,45.07308],[17.78504,45.0768],[17.77709,45.08124],[17.76905,45.08112],[17.76528,45.0807],[17.75616,45.08254],[17.73238,45.09584],[17.71747,45.10394],[17.7091,45.11032],[17.70047,45.11138],[17.68808,45.11357],[17.6777,45.12426],[17.67225,45.12934],[17.66363,45.13094],[17.65341,45.1281],[17.63483,45.11971],[17.62989,45.1151],[17.62629,45.1102],[17.61599,45.10967],[17.61063,45.106],[17.6005,45.10181],[17.59045,45.10281],[17.58358,45.10843],[17.57839,45.11256],[17.57445,45.11286],[17.5696,45.10654],[17.55729,45.10417],[17.54992,45.10701],[17.55059,45.11321],[17.55277,45.12184],[17.5495,45.12663],[17.54414,45.12544],[17.54582,45.11835],[17.54372,45.11292],[17.53594,45.10665],[17.52187,45.10488],[17.51283,45.10494],[17.50362,45.11109],[17.49801,45.10837],[17.48821,45.10589],[17.47757,45.10795],[17.47347,45.11239],[17.47699,45.11894],[17.48746,45.12515],[17.48821,45.13283],[17.47456,45.12267],[17.4589,45.12249],[17.44768,45.12456],[17.44408,45.1281],[17.44425,45.13265],[17.45086,45.14399],[17.44827,45.15627],[17.44509,45.15769],[17.44098,45.15639],[17.43814,45.14582],[17.4275,45.13655],[17.41754,45.13253],[17.40607,45.13141],[17.38312,45.13407],[17.35968,45.13608],[17.3426,45.13809],[17.32644,45.14895],[17.32225,45.15604],[17.32752,45.16295],[17.30927,45.16159],[17.30525,45.16619],[17.30659,45.17375],[17.29554,45.17233],[17.28264,45.17186],[17.27318,45.18585],[17.26824,45.17404],[17.26422,45.17257],[17.26389,45.16619],[17.25903,45.15332],[17.25141,45.1444],[17.2463,45.14263],[17.23492,45.14376],[17.22244,45.14257],[17.2144,45.14381],[17.2031,45.14659],[17.19096,45.14328],[17.17932,45.14352],[17.16542,45.14694],[17.14055,45.16047],[17.13125,45.16295],[17.10957,45.17334],[17.10262,45.17475],[17.06619,45.18904],[17.0605,45.196],[17.0507,45.19736],[17.04065,45.20414],[17.03437,45.21983],[17.02382,45.21087],[17.01771,45.20951],[17.00992,45.21081],[17.00415,45.21399],[17.00314,45.21889],[17.00004,45.21783],[16.99201,45.21889],[16.9864,45.22066],[16.97911,45.22573],[16.97559,45.22443],[16.96923,45.22384],[16.96362,45.22644],[16.95943,45.22844],[16.95583,45.22886],[16.95031,45.22514],[16.94361,45.22431],[16.93875,45.22426],[16.93264,45.22703],[16.93088,45.23682],[16.93054,45.24206],[16.9344,45.24878],[16.94637,45.25321],[16.94897,45.25468],[16.94913,45.25668],[16.93699,45.26158],[16.93465,45.26965],[16.93331,45.27307],[16.9282,45.27307],[16.92351,45.27142],[16.92259,45.26723],[16.91782,45.26275],[16.91874,45.25975],[16.91681,45.25509],[16.91237,45.25061],[16.90442,45.24749],[16.89814,45.24713],[16.89429,45.24401],[16.88658,45.24295],[16.88809,45.24136],[16.88525,45.23428],[16.88742,45.23062],[16.88684,45.22644],[16.88432,45.22296],[16.88508,45.22137],[16.88181,45.21647],[16.87737,45.216],[16.8721,45.21718],[16.86833,45.21635],[16.86724,45.21193],[16.86322,45.20821],[16.85778,45.20225],[16.85292,45.20115],[16.84775,45.20171],[16.84623,45.1975],[16.84723,45.19526],[16.84706,45.19367],[16.84438,45.19148],[16.84116,45.18842],[16.83484,45.18547],[16.8286,45.18402],[16.82178,45.1824],[16.81516,45.18187],[16.80691,45.18254],[16.80273,45.18299],[16.79109,45.18603],[16.77706,45.18948],[16.77124,45.19119],[16.76329,45.1957],[16.75965,45.19703],[16.75328,45.19665],[16.74889,45.1975],[16.73972,45.20143],[16.7326,45.20461],[16.73051,45.20467],[16.72611,45.20258],[16.72063,45.20205],[16.71615,45.20184],[16.71121,45.19951],[16.70409,45.1947],[16.69911,45.1934],[16.69429,45.1934],[16.68939,45.19491],[16.68349,45.19727],[16.67809,45.19871],[16.67051,45.19857],[16.66649,45.19945],[16.66168,45.20208],[16.65628,45.20452],[16.65125,45.20441],[16.64543,45.20517],[16.6343,45.21163],[16.63015,45.21113],[16.62802,45.21116],[16.62509,45.2124],[16.62278,45.21467],[16.62107,45.21718],[16.61941,45.21939],[16.61709,45.22137],[16.61451,45.22243],[16.60744,45.22516],[16.60455,45.22697],[16.60028,45.22828],[16.59808,45.22881],[16.59699,45.22877],[16.59356,45.22654],[16.59218,45.22426],[16.58755,45.22213],[16.58255,45.22004],[16.5792,45.21948],[16.57514,45.21974],[16.57133,45.2196],[16.56785,45.21976],[16.56528,45.21976],[16.56237,45.21855],[16.55883,45.21705],[16.55559,45.21654],[16.55249,45.21641],[16.54954,45.21688],[16.54772,45.21712],[16.54445,45.21777],[16.54198,45.21876],[16.53884,45.22048],[16.53725,45.22206],[16.5366,45.22433],[16.53589,45.22452],[16.53308,45.22445],[16.53074,45.22431],[16.52186,45.22151],[16.51946,45.21977],[16.5151,45.21845],[16.51263,45.21647],[16.50999,45.21581],[16.50512,45.21274],[16.50382,45.21198],[16.50337,45.2111],[16.50043,45.20883],[16.49773,45.2078],[16.49602,45.20668],[16.49455,45.20057],[16.49331,45.19698],[16.49086,45.19326],[16.48932,45.18999],[16.48662,45.1876],[16.47885,45.18086],[16.48026,45.17359],[16.48235,45.16972],[16.48439,45.16663],[16.48354,45.16026],[16.48149,45.15775],[16.47655,45.15548],[16.47612,45.15302],[16.47225,45.14839],[16.46768,45.13997],[16.46448,45.13997],[16.46184,45.13997],[16.46178,45.13692],[16.45031,45.13174],[16.44718,45.13001],[16.44457,45.12618],[16.43825,45.1231],[16.43392,45.12189],[16.42988,45.12175],[16.42383,45.1219],[16.42379,45.11924],[16.41105,45.11716],[16.3992,45.11095],[16.39792,45.10632],[16.40686,45.10061],[16.40786,45.09796],[16.40233,45.09449],[16.40087,45.09219],[16.4002,45.08792],[16.39641,45.08485],[16.39117,45.08037],[16.3924,45.07244],[16.39179,45.06563],[16.38817,45.06067],[16.38757,45.05236],[16.38594,45.04977],[16.38165,45.04794],[16.37718,45.04842],[16.37419,45.04278],[16.3686,45.03969],[16.36511,45.03522],[16.36345,45.03153],[16.3613,45.03023],[16.36354,45.02531],[16.36122,45.01706],[16.36268,45.01172],[16.36268,45.00928],[16.35984,45.00693],[16.3583,45.00232],[16.35817,45.00121],[16.35504,44.99959],[16.34706,44.99704],[16.3304,44.99691],[16.32583,44.99875],[16.32279,44.99882],[16.31546,44.99583],[16.3062,44.9957],[16.30148,44.99502],[16.29511,44.99478],[16.29188,44.99293],[16.28569,44.9923],[16.28427,44.99441],[16.28042,45.00406],[16.27552,45.00208],[16.26948,45.00393],[16.26777,45.01237],[16.26682,45.01324],[16.26468,45.01328],[16.26292,45.00958],[16.25802,45.00776],[16.25426,45.00796],[16.25155,45.01032],[16.24628,45.01139],[16.24152,45.01012],[16.22578,45.01489],[16.22497,45.02141],[16.22131,45.02161],[16.20971,45.02578],[16.20619,45.02924],[16.19625,45.02733],[16.19069,45.02823],[16.18707,45.03149],[16.18141,45.04477],[16.174,45.04836],[16.17124,45.05115],[16.17176,45.05656],[16.16962,45.06136],[16.16515,45.06626],[16.16715,45.07026],[16.16192,45.07231],[16.15322,45.07946],[16.14489,45.08081],[16.13857,45.0851],[16.13643,45.08524],[16.13472,45.08359],[16.13025,45.08332],[16.12573,45.08527],[16.12159,45.0893],[16.10628,45.08964],[16.09853,45.09705],[16.09282,45.10024],[16.08617,45.10185],[16.08065,45.10994],[16.08021,45.12308],[16.07989,45.13195],[16.07442,45.1393],[16.06672,45.14359],[16.05821,45.15315],[16.05136,45.15731],[16.0467,45.16804],[16.04199,45.17042],[16.04152,45.17619],[16.02321,45.17733],[16.01612,45.17582],[16.01137,45.178],[16.00914,45.18458],[16.02074,45.19412],[16.0224,45.19757],[16.01731,45.20001],[16.01122,45.21415],[16.00666,45.21352],[16.00209,45.21414],[15.99729,45.21784],[15.99299,45.21741],[15.98569,45.22062],[15.97876,45.2257],[15.97485,45.22537],[15.96924,45.219],[15.9602,45.21757],[15.9561,45.21445],[15.94777,45.21067],[15.91799,45.21049],[15.91602,45.21084],[15.91676,45.21425],[15.92107,45.22075],[15.92048,45.22437],[15.91837,45.22313],[15.91641,45.22182],[15.91103,45.22092],[15.90497,45.22186],[15.90076,45.22427],[15.89795,45.22354],[15.89976,45.21924],[15.89843,45.21553],[15.89596,45.21355],[15.88727,45.21269],[15.88478,45.21492],[15.87527,45.21472],[15.87009,45.21666],[15.8601,45.21395],[15.85538,45.21374],[15.84351,45.22157],[15.83464,45.21608],[15.83649,45.21177],[15.82967,45.20474],[15.82342,45.20258],[15.81405,45.20607],[15.81303,45.20303],[15.80651,45.20025],[15.80658,45.1968],[15.8047,45.19499],[15.79767,45.19164],[15.79069,45.19066],[15.78682,45.18517],[15.78216,45.18249],[15.78188,45.17495],[15.78039,45.17366],[15.77476,45.17354],[15.77487,45.16994],[15.77289,45.16881],[15.77021,45.16383],[15.77392,45.15274],[15.78071,45.14703],[15.78012,45.14014],[15.78483,45.1394],[15.7871,45.13525],[15.78302,45.1302],[15.78911,45.12464],[15.79444,45.12179],[15.79588,45.11433],[15.78558,45.10442],[15.78341,45.09297],[15.77534,45.09164],[15.77927,45.08366],[15.77597,45.08369],[15.776,45.08188],[15.77587,45.07994],[15.77589,45.07704],[15.77534,45.07382],[15.7611,45.06754],[15.75772,45.06344],[15.75122,45.06121],[15.75929,45.05309],[15.76032,45.04691],[15.77165,45.02161],[15.77654,45.01075],[15.78186,45.0096],[15.78701,45.00456],[15.79001,44.99352],[15.78572,44.98271],[15.78847,44.97482],[15.7871,44.96984],[15.781,44.96504],[15.77371,44.96583],[15.77182,44.96765],[15.75336,44.96619],[15.75113,44.95836],[15.75371,44.95083],[15.75113,44.94488],[15.74281,44.93655],[15.76487,44.88762],[15.76401,44.87071],[15.79834,44.84699],[15.79628,44.84419],[15.76143,44.82617],[15.73551,44.82288],[15.7477,44.80863],[15.74547,44.80121],[15.75972,44.78829],[15.76744,44.77794],[15.77465,44.77196],[15.77568,44.76758],[15.78289,44.75844],[15.7877,44.75051],[15.81242,44.74332],[15.81911,44.73686],[15.82615,44.72649],[15.8325,44.72393],[15.84726,44.7393],[15.85894,44.74003],[15.87147,44.73613],[15.87696,44.73564],[15.88005,44.74698],[15.89481,44.75271],[15.90631,44.74978],[15.90685,44.74324],[15.9156,44.73624],[15.92568,44.72287],[15.93043,44.71939],[15.93329,44.71273],[15.93666,44.71455],[15.95526,44.71499],[15.95896,44.71307],[15.96058,44.70783],[15.96139,44.70394],[15.95825,44.70009],[15.9622,44.69583],[15.96662,44.69482],[15.96914,44.69282],[15.97323,44.68336],[15.97256,44.67954],[15.97946,44.67328],[15.98431,44.67325],[15.9894,44.67156],[15.9932,44.66878],[15.9971,44.66608],[15.99957,44.66286],[16.01389,44.6586],[16.02287,44.66019],[16.03025,44.65833],[16.03586,44.65529],[16.03705,44.64872],[16.04423,44.64061],[16.04603,44.63739],[16.0476,44.63045],[16.04912,44.6293],[16.05274,44.62978],[16.05823,44.62811],[16.0592,44.627],[16.05963,44.61248],[16.06263,44.60805],[16.05868,44.60361],[16.05298,44.60341],[16.05084,44.60046],[16.05531,44.59799],[16.05564,44.59508],[16.04751,44.58986],[16.04499,44.58634],[16.03595,44.58438],[16.02497,44.58563],[16.02135,44.58329],[16.02316,44.5732],[16.02416,44.56754],[16.02335,44.56378],[16.04917,44.54877],[16.05778,44.54162],[16.08056,44.53881],[16.09458,44.53528],[16.11056,44.52942],[16.12673,44.51464],[16.12792,44.50341],[16.13543,44.49378],[16.13662,44.48788],[16.141,44.48581],[16.1458,44.48018],[16.14413,44.47424],[16.14033,44.47047],[16.14223,44.46243],[16.13748,44.45873],[16.13767,44.45734],[16.141,44.45727],[16.14423,44.45544],[16.14818,44.44916],[16.14713,44.4423],[16.14375,44.43918],[16.14594,44.42719],[16.14879,44.42542],[16.15559,44.42542],[16.16491,44.41802],[16.16858,44.41462],[16.17072,44.4098],[16.17599,44.4063],[16.17742,44.40236],[16.17571,44.39968],[16.16991,44.39747],[16.16092,44.39176],[16.15412,44.39111],[16.15108,44.39173],[16.14019,44.3886],[16.13367,44.39142],[16.134,44.3868],[16.13524,44.38112],[16.14608,44.3799],[16.14993,44.38085],[16.1536,44.3834],[16.15797,44.3834],[16.17276,44.37701],[16.17856,44.37018],[16.19915,44.3659],[16.20998,44.36191],[16.22406,44.3489],[16.22307,44.34118],[16.20923,44.33349],[16.20405,44.32822],[16.19963,44.31988],[16.19953,44.3143],[16.19368,44.30784],[16.1923,44.29936],[16.1923,44.29548],[16.19511,44.29218],[16.1972,44.28398],[16.19606,44.27162],[16.20077,44.26219],[16.20538,44.2582],[16.20495,44.25425],[16.209,44.25459],[16.21427,44.25177],[16.22269,44.24131],[16.22559,44.23409],[16.22412,44.22213],[16.22179,44.22032],[16.21908,44.21974],[16.21765,44.21695],[16.22307,44.21388],[16.22973,44.21207],[16.23192,44.20696],[16.23429,44.20488],[16.23722,44.20476],[16.23721,44.20365],[16.24017,44.20368],[16.24314,44.20014],[16.24685,44.19823],[16.24761,44.19602],[16.25488,44.19141],[16.25992,44.18586],[16.26577,44.18173],[16.26744,44.17852],[16.27395,44.17634],[16.27638,44.17307],[16.2934,44.16444],[16.29892,44.15594],[16.30915,44.14985],[16.31098,44.1463],[16.31266,44.14387],[16.31276,44.14256],[16.31157,44.12793],[16.31525,44.12639],[16.31598,44.125],[16.3168,44.12172],[16.32072,44.11655],[16.33606,44.11467],[16.3383,44.11357],[16.35283,44.10791],[16.36216,44.10334],[16.36388,44.10159],[16.36616,44.09926],[16.36664,44.09827],[16.36668,44.09748],[16.36514,44.09516],[16.37192,44.08445],[16.37753,44.08405],[16.37814,44.08379],[16.38276,44.08597],[16.38391,44.08599],[16.38536,44.08569],[16.38659,44.08507],[16.38961,44.08289],[16.39672,44.08247],[16.39834,44.08239],[16.40072,44.08215],[16.40256,44.08211],[16.42785,44.0856],[16.42923,44.08519],[16.4303,44.08448],[16.44441,44.0688],[16.44508,44.06805],[16.44565,44.06696],[16.44472,44.06462],[16.44389,44.06191],[16.43893,44.05434],[16.4396,44.049],[16.44177,44.04244],[16.44204,44.03718],[16.44144,44.03546],[16.43997,44.03188],[16.44156,44.03107],[16.44345,44.0311],[16.44897,44.03042],[16.45525,44.03049],[16.45923,44.03076],[16.46266,44.03126],[16.46731,44.03221],[16.46936,44.03212],[16.48295,44.0317],[16.50428,44.02631],[16.50539,44.02518],[16.5187,44.00519],[16.53769,43.98917],[16.53995,43.98722],[16.54742,43.97499],[16.54784,43.97359],[16.55289,43.9553],[16.58975,43.94507],[16.59094,43.94383],[16.59163,43.94198],[16.59304,43.93928],[16.60141,43.93673],[16.60252,43.93566],[16.6029,43.93479],[16.60614,43.9266],[16.61033,43.92476],[16.61114,43.92396],[16.61148,43.92265],[16.61203,43.92134],[16.60461,43.91569],[16.60504,43.91517],[16.60009,43.91158],[16.6014,43.91125],[16.60432,43.91125],[16.60489,43.91087],[16.60658,43.91063],[16.60727,43.91029],[16.60958,43.90902],[16.61027,43.90854],[16.61198,43.90866],[16.61426,43.90794],[16.62066,43.90334],[16.6217,43.90179],[16.62437,43.89994],[16.62781,43.89753],[16.65,43.88009],[16.65,43.87782],[16.65228,43.8744],[16.65913,43.86939],[16.67073,43.87631],[16.6752,43.87433],[16.71695,43.84072],[16.72161,43.84086],[16.72136,43.83616],[16.7236,43.83248],[16.72362,43.83172],[16.72335,43.83075],[16.72144,43.8294],[16.72347,43.82627],[16.72351,43.82517],[16.72268,43.82325],[16.72213,43.82148],[16.72148,43.81899],[16.72136,43.81635],[16.72215,43.80778],[16.72601,43.8053],[16.72799,43.80221],[16.72956,43.80045],[16.72977,43.7994],[16.72915,43.79709],[16.72868,43.79633],[16.7304,43.79518],[16.73067,43.79396],[16.7331,43.79121],[16.73685,43.78775],[16.74221,43.78312],[16.74761,43.77845],[16.7541,43.77221],[16.75707,43.77269],[16.76105,43.77219],[16.76113,43.77177],[16.76613,43.7717],[16.77987,43.77006],[16.80222,43.76488],[16.80474,43.7634],[16.81478,43.75664],[16.81822,43.75048],[16.81828,43.74988],[16.82743,43.73415],[16.83352,43.73241],[16.83664,43.7307],[16.85083,43.72098],[16.86975,43.71255],[16.87562,43.70733],[16.87926,43.70099],[16.87915,43.69905],[16.88031,43.69583],[16.88522,43.69357],[16.88617,43.6923],[16.88811,43.68718],[16.9022,43.68081],[16.91083,43.67631],[16.91177,43.67521],[16.91319,43.67263],[16.9151,43.67026],[16.91964,43.66446],[16.91987,43.66365],[16.9224,43.66007],[16.93025,43.65648],[16.93092,43.65531],[16.93161,43.65321],[16.9349,43.64722],[16.93502,43.6448],[16.96136,43.6273],[16.96701,43.62375],[16.97371,43.61948],[16.97438,43.61853],[16.98089,43.60728],[16.98424,43.6034],[16.98573,43.60235],[16.98596,43.6015],[16.98907,43.59903],[16.99,43.59768],[16.99288,43.59344],[16.99533,43.59303],[16.99672,43.59205],[16.99824,43.59048],[16.99849,43.58974],[17.00863,43.58314],[17.00982,43.58233],[17.01034,43.58107],[17.0107,43.58011],[17.01059,43.5779],[17.0165,43.5733],[17.02349,43.56986],[17.02745,43.56859],[17.0318,43.5659],[17.03477,43.56426],[17.03862,43.56096],[17.04442,43.55911],[17.05219,43.5578],[17.05378,43.55721],[17.05702,43.55681],[17.05702,43.55466],[17.06636,43.55462],[17.06808,43.55331],[17.06879,43.55202],[17.06852,43.55117],[17.07149,43.54991],[17.07346,43.54927],[17.07452,43.54838],[17.08097,43.54524],[17.08189,43.54413],[17.08518,43.54105],[17.08683,43.53952],[17.08861,43.53847],[17.09226,43.5361],[17.09602,43.53387],[17.09682,43.53308],[17.10538,43.53055],[17.10685,43.52958],[17.10814,43.52757],[17.10963,43.5258],[17.1252,43.52018],[17.12726,43.51848],[17.13247,43.5127],[17.13458,43.51098],[17.13502,43.51009],[17.13737,43.50974],[17.13969,43.50972],[17.14176,43.50901],[17.14208,43.5086],[17.14415,43.50792],[17.14524,43.50711],[17.14576,43.5059],[17.14771,43.50368],[17.15204,43.49746],[17.15583,43.49647],[17.16031,43.49604],[17.17436,43.49275],[17.17884,43.4963],[17.18005,43.49774],[17.18154,43.4982],[17.18405,43.49902],[17.18771,43.49984],[17.19003,43.49967],[17.19537,43.49993],[17.20701,43.49982],[17.2122,43.49881],[17.21509,43.49966],[17.21637,43.49946],[17.22093,43.49976],[17.22801,43.49976],[17.23196,43.49837],[17.23435,43.4967],[17.23701,43.49603],[17.23822,43.49496],[17.2404,43.49427],[17.24187,43.49351],[17.24561,43.49263],[17.24785,43.49156],[17.25275,43.48933],[17.25855,43.4861],[17.26052,43.48547],[17.26225,43.48455],[17.26728,43.48271],[17.26958,43.48124],[17.27243,43.47973],[17.27276,43.47849],[17.27632,43.47642],[17.27731,43.47519],[17.28139,43.47296],[17.28264,43.47171],[17.28532,43.46933],[17.28624,43.46797],[17.2866,43.46536],[17.28913,43.46188],[17.28899,43.45998],[17.28991,43.45711],[17.28926,43.4541],[17.28804,43.45238],[17.28972,43.44916],[17.28959,43.44726],[17.28865,43.4458],[17.28878,43.44351],[17.28788,43.44156],[17.28842,43.43857],[17.28733,43.43422],[17.28549,43.43054],[17.28216,43.42595],[17.27814,43.42043],[17.2745,43.41634],[17.27216,43.413],[17.26918,43.41219],[17.26382,43.40792],[17.26217,43.40486],[17.26075,43.40301],[17.25664,43.40208],[17.26104,43.3989],[17.26414,43.39479],[17.26516,43.39138],[17.26632,43.386],[17.26791,43.37838],[17.26885,43.3732],[17.27251,43.36888],[17.27391,43.36757],[17.27446,43.3659],[17.27438,43.36444],[17.27699,43.36022],[17.27712,43.35861],[17.27762,43.35677],[17.27756,43.35555],[17.27873,43.35526],[17.28313,43.34764],[17.29342,43.33131],[17.30111,43.31927],[17.30266,43.31749],[17.30441,43.31584],[17.30598,43.31389],[17.3095,43.30684],[17.31084,43.30487],[17.31178,43.30308],[17.31337,43.30084],[17.31383,43.29974],[17.31784,43.296],[17.32055,43.29333],[17.32438,43.28912],[17.32627,43.28879],[17.32901,43.28795],[17.33012,43.2867],[17.33138,43.28491],[17.33266,43.28267],[17.33254,43.28088],[17.3335,43.27866],[17.33408,43.27704],[17.33412,43.2747],[17.33478,43.27417],[17.33552,43.27283],[17.33602,43.2714],[17.33582,43.27005],[17.33559,43.26978],[17.33641,43.26898],[17.33653,43.26762],[17.33611,43.26646],[17.33564,43.26588],[17.3389,43.26232],[17.3407,43.25991],[17.341,43.25936],[17.34344,43.25777],[17.34447,43.25629],[17.34462,43.25537],[17.34752,43.25508],[17.35451,43.25395],[17.36082,43.25189],[17.36824,43.25169],[17.37011,43.25216],[17.37294,43.25218],[17.37646,43.252],[17.379,43.25122],[17.3817,43.25009],[17.38471,43.25012],[17.39222,43.24854],[17.39827,43.24763],[17.40078,43.24631],[17.40786,43.24182],[17.41663,43.23641],[17.42366,43.23203],[17.4234,43.22816],[17.42638,43.22814],[17.43036,43.22016],[17.43233,43.21821],[17.4327,43.21716],[17.43304,43.21537],[17.43274,43.21455],[17.43303,43.21187],[17.43455,43.21052],[17.43485,43.20942],[17.43455,43.20771],[17.43571,43.20556],[17.43552,43.20439],[17.43515,43.20269],[17.4345,43.19824],[17.43352,43.19711],[17.43303,43.19456],[17.43217,43.19342],[17.43154,43.19119],[17.43043,43.18933],[17.43053,43.18794],[17.43172,43.18519],[17.43346,43.18123],[17.43591,43.18263],[17.438,43.18288],[17.44028,43.18232],[17.44367,43.18111],[17.44761,43.18015],[17.45085,43.17971],[17.45279,43.17889],[17.4534,43.17815],[17.45524,43.17755],[17.45715,43.17643],[17.45855,43.1755],[17.45945,43.17458],[17.46034,43.17377],[17.46214,43.17318],[17.46327,43.17248],[17.46514,43.17164],[17.46668,43.17045],[17.46946,43.16877],[17.47561,43.16536],[17.47604,43.16418],[17.47869,43.1628],[17.48447,43.16096],[17.48814,43.16012],[17.49152,43.15872],[17.49323,43.15725],[17.49458,43.15644],[17.49585,43.15634],[17.49633,43.15603],[17.50096,43.15453],[17.50323,43.15328],[17.5041,43.15307],[17.5075,43.15153],[17.50916,43.1501],[17.51062,43.14917],[17.51568,43.14763],[17.52138,43.1462],[17.528,43.14377],[17.53268,43.14149],[17.53599,43.1394],[17.54105,43.13789],[17.54608,43.13624],[17.54735,43.1356],[17.54932,43.13385],[17.5514,43.13349],[17.55324,43.13339],[17.55662,43.1323],[17.55868,43.13126],[17.56014,43.13017],[17.56376,43.12737],[17.56486,43.12661],[17.5672,43.12577],[17.56843,43.12491],[17.5703,43.12428],[17.57361,43.12358],[17.57736,43.12229],[17.5818,43.12095],[17.58489,43.11943],[17.58694,43.11874],[17.58996,43.11716],[17.59436,43.11478],[17.59802,43.1129],[17.60069,43.11105],[17.60222,43.11094],[17.60363,43.11035],[17.60494,43.10942],[17.60589,43.1083],[17.61323,43.1047],[17.62194,43.10018],[17.62776,43.09777],[17.629,43.09757],[17.63049,43.09706],[17.63221,43.09613],[17.63334,43.09557],[17.63715,43.09477],[17.63904,43.09354],[17.64095,43.09229],[17.64304,43.09121],[17.64429,43.09027],[17.64522,43.08805],[17.65012,43.07925],[17.65267,43.07481],[17.65291,43.07368],[17.65295,43.07287],[17.65387,43.07064],[17.65413,43.07026],[17.65533,43.06911],[17.65625,43.06685],[17.65718,43.06482],[17.65969,43.06062],[17.66288,43.05543],[17.66398,43.05285],[17.66521,43.05078],[17.66695,43.04723],[17.669,43.04299],[17.67219,43.0381],[17.67612,43.03219],[17.67831,43.02874],[17.67986,43.0277],[17.68069,43.02618],[17.68167,43.0252],[17.68268,43.02425],[17.68431,43.02197],[17.68636,43.02069],[17.68689,43.01954],[17.68763,43.01635],[17.68846,43.01132],[17.69535,43.00363],[17.69763,43.00099],[17.69817,42.99964],[17.70499,42.98764],[17.70556,42.98527],[17.70669,42.98351],[17.7085,42.98023],[17.71408,42.97496],[17.71384,42.9707],[17.70105,42.96614],[17.68885,42.9633],[17.68698,42.96293],[17.68241,42.96273],[17.67891,42.96188],[17.67431,42.96167],[17.67178,42.96069],[17.67,42.95984],[17.66802,42.95943],[17.66662,42.95952],[17.66291,42.9585],[17.66149,42.95834],[17.66003,42.95843],[17.65517,42.95706],[17.65359,42.95674],[17.65131,42.95563],[17.64944,42.95519],[17.64297,42.95113],[17.64175,42.95083],[17.63991,42.95074],[17.63492,42.94772],[17.63317,42.94633],[17.63199,42.9452],[17.62938,42.94451],[17.62762,42.94357],[17.62611,42.9432],[17.62282,42.94183],[17.62121,42.94083],[17.61881,42.94012],[17.61537,42.93951],[17.60937,42.93868],[17.60543,42.93831],[17.6032,42.93825],[17.60213,42.93792],[17.59293,42.93768],[17.58964,42.93703],[17.58596,42.93632],[17.58424,42.93625],[17.58165,42.93547],[17.58002,42.93553],[17.57649,42.93745],[17.57444,42.9389],[17.56664,42.93852],[17.56426,42.93879],[17.54924,42.93892],[17.53481,42.93894],[17.52978,42.9424],[17.52028,42.92815],[17.52748,42.92702],[17.53375,42.92469],[17.54671,42.91709],[17.548,42.91583],[17.55298,42.91602],[17.56242,42.91338],[17.56697,42.91111],[17.57452,42.90822],[17.58096,42.90634],[17.58714,42.90407],[17.59512,42.90112],[17.60087,42.89785],[17.60774,42.89873],[17.61263,42.89772],[17.62113,42.89213],[17.62671,42.8871],[17.63263,42.88269],[17.63752,42.88137],[17.64361,42.88081],[17.6487,42.88431],[17.64423,42.88859],[17.66215,42.90753],[17.6643,42.91162],[17.67305,42.92048],[17.67683,42.92325],[17.68764,42.92563],[17.70404,42.92431],[17.72558,42.92174],[17.75631,42.91476],[17.76858,42.90992],[17.7879,42.89439],[17.80041,42.9114],[17.80532,42.91742],[17.80747,42.91947],[17.80994,42.91968],[17.81313,42.91834],[17.8145,42.91781],[17.81646,42.91693],[17.82294,42.9144],[17.83115,42.91166],[17.84137,42.90642],[17.84605,42.90453],[17.84684,42.90398],[17.84753,42.90304],[17.85276,42.89772],[17.85497,42.89507],[17.85905,42.88991],[17.86051,42.88881],[17.8618,42.88642],[17.86216,42.88405],[17.86074,42.88175],[17.8592,42.87944],[17.85757,42.8779],[17.8578,42.87662],[17.85961,42.86939],[17.86077,42.86793],[17.86188,42.8654],[17.86257,42.86362],[17.86613,42.85892],[17.86645,42.85802],[17.86733,42.85673],[17.87057,42.85152],[17.87315,42.84772],[17.87643,42.84496],[17.878,42.84334],[17.88046,42.83977],[17.88551,42.8398],[17.88933,42.83823],[17.89355,42.83672],[17.90126,42.83463],[17.90231,42.83418],[17.90334,42.8331],[17.90351,42.8322],[17.90241,42.82987],[17.90113,42.82794],[17.90003,42.82717],[17.8989,42.82512],[17.89754,42.82419],[17.89478,42.82156],[17.8933,42.82071],[17.89081,42.815],[17.89327,42.81196],[17.90171,42.81198],[17.90911,42.8131],[17.91046,42.81308],[17.91166,42.81273],[17.91362,42.81155],[17.91613,42.81011],[17.94119,42.80308],[17.95164,42.8011],[17.95338,42.79982],[17.96005,42.7946],[17.962,42.79191],[17.96683,42.78819],[17.96825,42.78757],[17.96921,42.78682],[17.96966,42.78627],[17.97529,42.78378],[17.97704,42.78202],[17.98146,42.78038],[17.98501,42.78065],[17.99464,42.77921],[17.99837,42.77783],[17.99975,42.77641],[17.99979,42.77518],[17.99975,42.7739],[18.00007,42.77231],[18.00018,42.76573],[18.00168,42.76442],[18.00219,42.76363],[18.00515,42.75962],[18.00663,42.75855],[18.01058,42.75648],[18.01161,42.75539],[18.0123,42.75465],[18.02601,42.75448],[18.02882,42.75358],[18.03268,42.75248],[18.03451,42.75242],[18.03698,42.7518],[18.04343,42.75042],[18.04496,42.74908],[18.05144,42.74422],[18.05339,42.74396],[18.05616,42.74279],[18.0588,42.74176],[18.06393,42.73857],[18.06562,42.73715],[18.06755,42.7354],[18.07105,42.73316],[18.07609,42.7296],[18.07667,42.7287],[18.07663,42.72749],[18.07691,42.7266],[18.07903,42.72698],[18.08019,42.72679],[18.08159,42.72632],[18.08416,42.72504],[18.0927,42.72184],[18.10032,42.71919],[18.10392,42.71713],[18.10843,42.71355],[18.10933,42.71193],[18.11045,42.70962],[18.11141,42.70663],[18.11131,42.7027],[18.11036,42.70155],[18.1107,42.69967],[18.11049,42.69906],[18.10873,42.69663],[18.10813,42.69359],[18.10592,42.68963],[18.1059,42.68878],[18.10976,42.68843],[18.1115,42.68857],[18.11246,42.68857],[18.11442,42.68876],[18.11626,42.68833],[18.11746,42.68747],[18.11948,42.68633],[18.12422,42.68545],[18.12667,42.68494],[18.12851,42.68472],[18.13373,42.68444],[18.13527,42.68384],[18.13813,42.68226],[18.14085,42.68261],[18.14253,42.68248],[18.14596,42.68086],[18.14686,42.67969],[18.14772,42.67676],[18.14931,42.67204],[18.15328,42.66798],[18.15613,42.66443],[18.15772,42.66199],[18.15828,42.65994],[18.15819,42.65896],[18.16598,42.66117],[18.17158,42.66197],[18.17261,42.66182],[18.17396,42.66295],[18.17501,42.66333],[18.17606,42.66339],[18.17913,42.66322],[18.18087,42.66254],[18.18338,42.66011],[18.18589,42.65781],[18.18772,42.65804],[18.19093,42.65757],[18.19327,42.65669],[18.1948,42.65524],[18.19497,42.65473],[18.19673,42.65381],[18.19782,42.65206],[18.19862,42.6508],[18.20424,42.64569],[18.20761,42.64051],[18.21389,42.63647],[18.21563,42.63405],[18.21844,42.63086],[18.22147,42.62796],[18.22422,42.62502],[18.22887,42.62202],[18.23381,42.62163],[18.23632,42.62041],[18.23728,42.61894],[18.23733,42.61801],[18.23911,42.6185],[18.24241,42.61822],[18.24368,42.61763],[18.24522,42.61563],[18.24619,42.61395],[18.2466,42.61106],[18.24679,42.60541],[18.24911,42.60547],[18.25844,42.60781],[18.26273,42.60892],[18.26477,42.61117],[18.27044,42.61342],[18.27312,42.61307],[18.2744,42.61517],[18.28073,42.61969],[18.28168,42.61995],[18.28503,42.61967],[18.28861,42.61945],[18.29249,42.61817],[18.31086,42.61733],[18.3235,42.61934],[18.33193,42.62142],[18.34811,42.6216],[18.36845,42.61827],[18.37062,42.61669],[18.37631,42.60993],[18.3824,42.60094],[18.38596,42.59811],[18.39259,42.59094],[18.40075,42.58794],[18.40066,42.586],[18.40545,42.58592],[18.41875,42.57781],[18.43351,42.56805],[18.43729,42.56658],[18.43954,42.56497],[18.44008,42.5637],[18.44096,42.5567],[18.44343,42.55112],[18.44341,42.54918],[18.44244,42.53503],[18.44201,42.52551],[18.44072,42.52124],[18.44021,42.52064],[18.446,42.5169],[18.45055,42.51001],[18.44931,42.50814],[18.44407,42.50121],[18.44394,42.49871],[18.44321,42.49754],[18.4433,42.4959],[18.44223,42.49397],[18.44171,42.49318],[18.44115,42.49026],[18.44175,42.48786],[18.44102,42.48631],[18.43987,42.48498],[18.44613,42.48264],[18.45077,42.47909],[18.45274,42.4765],[18.456,42.47482],[18.45815,42.47529],[18.46102,42.47444],[18.46634,42.47203],[18.47647,42.46665],[18.4787,42.46409],[18.48239,42.45883],[18.48673,42.45316],[18.49119,42.45006],[18.49437,42.4474],[18.49621,42.44357],[18.5069,42.43435],[18.50944,42.43283],[18.51866,42.42855],[18.52484,42.4237],[18.52851,42.42188],[18.52998,42.42174],[18.52979,42.41742],[18.52518,42.41753],[18.52247,42.41689],[18.5179,42.41746],[18.51614,42.41412],[18.51443,42.413],[18.51529,42.40784],[18.51976,42.40447],[18.52746,42.40018],[18.53293,42.3979],[18.53635,42.39597],[18.53816,42.39319],[18.53787,42.39042],[18.53516,42.38933],[18.52931,42.3893],[18.52232,42.39066],[18.51919,42.39242],[18.51662,42.39288],[18.51248,42.39541],[18.50758,42.39839],[18.50435,42.40095],[18.50335,42.4065],[18.48793,42.4169],[18.48287,42.41931],[18.47862,42.42371],[18.47561,42.42659],[18.47261,42.42935],[18.47124,42.43261],[18.46591,42.43701],[18.46385,42.43961],[18.45969,42.4424],[18.44974,42.44683],[18.44562,42.44309],[18.4306,42.43708],[18.42236,42.44081],[18.42253,42.44582],[18.40219,42.45741],[18.40716,42.46456],[18.37051,42.48292],[18.35026,42.49159],[18.30503,42.5133],[18.26941,42.52582],[18.26348,42.53474],[18.24091,42.54979],[18.22254,42.56181],[18.21945,42.56775],[18.19851,42.56648],[18.18718,42.57255],[18.18443,42.57887],[18.16795,42.58532],[18.16915,42.5905],[18.19868,42.59998],[18.21327,42.59833],[18.21568,42.60453],[18.2016,42.61501],[18.18237,42.60983],[18.16401,42.61476],[18.14461,42.62524],[18.13379,42.62676],[18.1307,42.61792],[18.12178,42.61678],[18.10822,42.62171],[18.10444,42.6351],[18.03989,42.64873],[17.94891,42.64128],[17.06039,42.69152],[16.35138,42.37123],[16.23677,42.38453],[16.39023,42.73995],[15.43075,43.08152],[15.42676,43.10342],[15.63066,43.43802],[14.62071,44.3094],[14.29287,44.49332],[13.99641,44.82337],[14.00894,44.80997],[14.00808,44.80011],[13.9892,44.78854],[13.97152,44.78829],[13.95882,44.78768],[13.95367,44.7794],[13.95401,44.76916],[13.93564,44.75905],[13.88603,44.75271],[13.88535,44.76331],[13.89307,44.78049],[13.89153,44.8023],[13.86715,44.80388],[13.82578,44.82532],[13.81273,44.84467],[13.80363,44.85648],[13.78447,44.85757],[13.78601,44.88862],[13.77793,44.89044],[13.76604,44.88889],[13.7571,44.8829],[13.74901,44.88263],[13.7396,44.88856],[13.72724,44.90183],[13.72647,44.90823],[13.71639,44.90809],[13.70853,44.9134],[13.70926,44.91746],[13.71972,44.92473],[13.71925,44.92803],[13.70279,44.94304],[13.70336,44.94822],[13.70945,44.95038],[13.72398,44.94888],[13.74596,44.94366],[13.76862,44.94342],[13.76178,44.96316],[13.76116,44.98088],[13.73532,44.98052],[13.72261,44.98289],[13.69926,44.98714],[13.69017,44.99661],[13.68347,45.00984],[13.68334,45.01524],[13.6745,45.01506],[13.64605,45.03605],[13.60777,45.03763],[13.60451,45.08431],[13.60193,45.12296],[13.57035,45.13967],[13.57754,45.15724],[13.56139,45.19789],[13.57374,45.22722],[13.58211,45.24115],[13.56651,45.25347],[13.56571,45.27271],[13.55416,45.30856],[13.55372,45.31784],[13.54537,45.31771],[13.52898,45.32753],[13.53379,45.36116],[13.52818,45.37418],[13.52383,45.39419],[13.51034,45.4124],[13.51013,45.42486],[13.50659,45.4248],[13.50167,45.44254],[13.50872,45.44279],[13.5076,45.46073],[13.50045,45.46072],[13.48227,45.48675],[13.48555,45.496],[13.49894,45.50731],[13.50564,45.50971],[13.50899,45.50995],[13.62167,45.43361],[13.8722,45.40671],[13.88661,45.40668],[13.91067,45.41026],[13.92956,45.41151],[13.96571,45.41603],[14.0013,45.41872],[14.03128,45.42045],[14.0718,45.42525],[14.14737,45.43227],[14.19625,45.43889],[14.21856,45.44014],[14.27031,45.44792],[14.36464,45.45647],[14.435,45.46377],[14.46156,45.46406],[14.49866,45.46924],[14.51701,45.47116],[14.54973,45.47174],[14.55,45.47356],[14.58984,45.47778],[14.59052,45.463],[14.60996,45.46146],[14.6253,45.4726],[14.64679,45.45762],[14.66828,45.4558],[14.68457,45.46713],[14.70662,45.45196],[14.72044,45.45119],[14.75097,45.44773],[14.77808,45.44341],[14.81121,45.44158],[14.84023,45.44072],[14.85324,45.43947],[14.88264,45.43426],[14.88818,45.43488],[14.89232,45.43383],[14.89691,45.43308],[14.89941,45.43219],[14.91881,45.42948],[14.95886,45.42631],[14.96303,45.42496],[14.97741,45.4229],[14.98843,45.42304],[15.00205,45.42223],[15.00917,45.42088],[15.02142,45.42011],[15.06324,45.41444],[15.07166,45.42021],[15.08289,45.41228],[15.10267,45.40997],[15.11068,45.41041],[15.12985,45.40723],[15.16346,45.40526],[15.19316,45.40185],[15.23197,45.41199],[15.26572,45.41867],[15.30337,45.42919],[15.3636,45.44264],[15.40276,45.47625],[15.42028,45.58175],[15.42959,45.65356],[15.43753,45.70368],[15.50187,45.69852],[15.50119,45.68934],[15.53001,45.68943],[15.51454,45.70727],[15.54445,45.72027],[15.52357,45.74392],[15.54959,45.75486],[15.57286,45.76708],[15.59189,45.77472],[15.60873,45.7837],[15.66048,45.80775],[15.68703,45.82082],[15.72324,45.8379],[15.72749,45.88175],[15.73036,45.90157],[15.73166,45.91977],[15.73372,45.92915],[15.73399,45.93605],[15.73577,45.95142],[15.73618,45.95547],[15.74104,45.98073],[15.74111,45.98506],[15.7459,46.01834],[15.75028,46.04942],[15.7522,46.05527],[15.75357,46.07778],[15.75679,46.09691],[15.76007,46.11836],[15.82209,46.11376],[15.82565,46.11362],[15.82339,46.10066],[15.83092,46.10071],[15.83126,46.11988],[15.82524,46.11793],[15.79957,46.15536],[15.81723,46.16076],[15.80066,46.18612],[15.83468,46.19773],[15.85864,46.20512],[15.903,46.22],[15.88479,46.24679],[15.93969,46.26445],[15.97199,46.27457],[16.1297,46.32763],[16.17091,46.34181],[16.18926,46.3143],[16.30466,46.35117],[16.30501,46.38145],[16.2996,46.38154],[16.30063,46.38565],[16.2985,46.38985],[16.30063,46.39146],[16.30008,46.39566],[16.30213,46.39712],[16.29686,46.4008],[16.29515,46.40392],[16.28591,46.40689],[16.28208,46.41095],[16.27215,46.41194],[16.26825,46.41454],[16.26852,46.41869],[16.27003,46.42067],[16.26921,46.42699],[16.26236,46.437],[16.25839,46.44992],[16.2599,46.45275],[16.25469,46.46077],[16.25538,46.46746],[16.251,46.47227],[16.24648,46.47896],[16.23649,46.48339],[16.2369,46.4883],[16.2369,46.4981],[16.23881,46.50083],[16.24484,46.50262],[16.25825,46.50441],[16.26264,46.50799],[16.26168,46.5177],[16.26743,46.51911],[16.27112,46.52081],[16.27646,46.52109],[16.27783,46.51902],[16.28865,46.51939],[16.29672,46.51788],[16.30028,46.51581],[16.30288,46.51647],[16.30863,46.52307],[16.30918,46.52608],[16.32027,46.53154],[16.33232,46.53343],[16.33697,46.53192],[16.33684,46.53522],[16.3382,46.53795],[16.34094,46.53917],[16.33478,46.53974],[16.33163,46.54303],[16.33423,46.54689],[16.34546,46.54849],[16.34957,46.55094],[16.35326,46.55245],[16.35915,46.55009],[16.36203,46.54972],[16.36134,46.55452],[16.36449,46.55763],[16.3701,46.55838],[16.37394,46.5565],[16.37804,46.55602],[16.38434,46.55405],[16.38612,46.55141],[16.38667,46.54868],[16.38407,46.54557],[16.38804,46.54397],[16.38968,46.542],[16.39132,46.53917],[16.40022,46.54228],[16.40734,46.54162],[16.40844,46.5387],[16.40844,46.53691],[16.41268,46.53701],[16.41993,46.53333],[16.42568,46.53597],[16.43157,46.53569],[16.43527,46.53305],[16.44129,46.53107],[16.44554,46.52561],[16.44293,46.52099],[16.44334,46.51854],[16.45142,46.52156],[16.4569,46.52118],[16.45895,46.52297],[16.46251,46.52448],[16.46552,46.52467],[16.46958,46.52183],[16.47551,46.51842],[16.47648,46.51592],[16.48072,46.515],[16.48532,46.51267],[16.48544,46.51158],[16.49056,46.51044],[16.49337,46.50812],[16.49222,46.50562],[16.4921,46.50358],[16.49646,46.50012],[16.51184,46.49754],[16.51305,46.49516],[16.51662,46.49508],[16.52249,46.49112]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-dof-2017",name:"dgu.hr: Croatia 2017 Aerial imagery",type:"wms",template:"http://geoportal.dgu.hr/services/inspire/orthophoto_2017/ows?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.OrthoImagery&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",polygon:[[[16.30898,45.22981],[16.5,45.22997],[16.50001,45.21197],[16.50382,45.21198],[16.50512,45.21274],[16.50999,45.21581],[16.51263,45.21647],[16.5151,45.21845],[16.51946,45.21977],[16.52186,45.22151],[16.53074,45.22431],[16.53308,45.22445],[16.53589,45.22452],[16.5366,45.22433],[16.53725,45.22206],[16.53884,45.22048],[16.54198,45.21876],[16.54445,45.21777],[16.54772,45.21712],[16.54954,45.21688],[16.55249,45.21641],[16.55559,45.21654],[16.55883,45.21705],[16.56237,45.21855],[16.56528,45.21976],[16.56785,45.21976],[16.57133,45.2196],[16.57514,45.21974],[16.5792,45.21948],[16.58255,45.22004],[16.58755,45.22213],[16.59218,45.22426],[16.59356,45.22654],[16.59699,45.22877],[16.59808,45.22881],[16.60028,45.22828],[16.60455,45.22697],[16.60744,45.22516],[16.61451,45.22243],[16.61709,45.22137],[16.61941,45.21939],[16.62107,45.21718],[16.62278,45.21467],[16.62509,45.2124],[16.62802,45.21116],[16.63015,45.21113],[16.6343,45.21163],[16.64543,45.20517],[16.65125,45.20441],[16.65628,45.20452],[16.66168,45.20208],[16.66649,45.19945],[16.67051,45.19857],[16.67809,45.19871],[16.68349,45.19727],[16.68939,45.19491],[16.69429,45.1934],[16.69911,45.1934],[16.70409,45.1947],[16.71121,45.19951],[16.71615,45.20184],[16.72063,45.20205],[16.72611,45.20258],[16.73051,45.20467],[16.7326,45.20461],[16.73972,45.20143],[16.74889,45.1975],[16.75328,45.19665],[16.75965,45.19703],[16.76329,45.1957],[16.77124,45.19119],[16.77706,45.18948],[16.79109,45.18603],[16.80273,45.18299],[16.80691,45.18254],[16.81516,45.18187],[16.82178,45.1824],[16.8286,45.18402],[16.83484,45.18547],[16.84116,45.18842],[16.84438,45.19148],[16.84706,45.19367],[16.84723,45.19526],[16.84623,45.1975],[16.84775,45.20171],[16.85292,45.20115],[16.85778,45.20225],[16.86322,45.20821],[16.86724,45.21193],[16.86833,45.21635],[16.8721,45.21718],[16.87737,45.216],[16.88181,45.21647],[16.88508,45.22137],[16.88432,45.22296],[16.88684,45.22644],[16.88742,45.23062],[16.88525,45.23428],[16.88809,45.24136],[16.88658,45.24295],[16.89429,45.24401],[16.89814,45.24713],[16.90442,45.24749],[16.91237,45.25061],[16.91681,45.25509],[16.91874,45.25975],[16.91782,45.26275],[16.92259,45.26723],[16.92351,45.27142],[16.9282,45.27307],[16.93331,45.27307],[16.93465,45.26965],[16.93699,45.26158],[16.94913,45.25668],[16.94897,45.25468],[16.94637,45.25321],[16.9344,45.24878],[16.93054,45.24206],[16.93088,45.23682],[16.93264,45.22703],[16.93875,45.22426],[16.94361,45.22431],[16.95031,45.22514],[16.95583,45.22886],[16.95943,45.22844],[16.96362,45.22644],[16.96923,45.22384],[16.97559,45.22443],[16.97911,45.22573],[16.9864,45.22066],[16.99201,45.21889],[17.00004,45.21783],[17.00314,45.21889],[17.00415,45.21399],[17.00992,45.21081],[17.01771,45.20951],[17.02382,45.21087],[17.03437,45.21983],[17.04065,45.20414],[17.0507,45.19736],[17.0605,45.196],[17.06619,45.18904],[17.10262,45.17475],[17.10957,45.17334],[17.13125,45.16295],[17.14055,45.16047],[17.16542,45.14694],[17.17932,45.14352],[17.19096,45.14328],[17.2031,45.14659],[17.2144,45.14381],[17.22244,45.14257],[17.23492,45.14376],[17.2463,45.14263],[17.25141,45.1444],[17.25903,45.15332],[17.26389,45.16619],[17.26422,45.17257],[17.26824,45.17404],[17.27318,45.18585],[17.28264,45.17186],[17.29554,45.17233],[17.30659,45.17375],[17.30525,45.16619],[17.30927,45.16159],[17.32752,45.16295],[17.32225,45.15604],[17.32644,45.14895],[17.3426,45.13809],[17.35968,45.13608],[17.38312,45.13407],[17.40607,45.13141],[17.41754,45.13253],[17.4275,45.13655],[17.43814,45.14582],[17.44098,45.15639],[17.44509,45.15769],[17.44827,45.15627],[17.45086,45.14399],[17.44425,45.13265],[17.44408,45.1281],[17.44768,45.12456],[17.4589,45.12249],[17.47456,45.12267],[17.48821,45.13283],[17.48746,45.12515],[17.47699,45.11894],[17.47347,45.11239],[17.47757,45.10795],[17.48821,45.10589],[17.49801,45.10837],[17.50362,45.11109],[17.51283,45.10494],[17.52187,45.10488],[17.53594,45.10665],[17.54372,45.11292],[17.54582,45.11835],[17.54414,45.12544],[17.5495,45.12663],[17.55277,45.12184],[17.55059,45.11321],[17.54992,45.10701],[17.55729,45.10417],[17.5696,45.10654],[17.57445,45.11286],[17.57839,45.11256],[17.58358,45.10843],[17.59045,45.10281],[17.6005,45.10181],[17.61063,45.106],[17.61599,45.10967],[17.62629,45.1102],[17.62989,45.1151],[17.63483,45.11971],[17.65341,45.1281],[17.66363,45.13094],[17.67225,45.12934],[17.6777,45.12426],[17.68808,45.11357],[17.70047,45.11138],[17.7091,45.11032],[17.71747,45.10394],[17.73238,45.09584],[17.75616,45.08254],[17.76528,45.0807],[17.76905,45.08112],[17.77709,45.08124],[17.78504,45.0768],[17.78848,45.07308],[17.80824,45.05663],[17.83545,45.04327],[17.85061,45.04019],[17.86593,45.04114],[17.88418,45.04794],[17.90654,45.05882],[17.93024,45.07438],[17.94171,45.08141],[17.94221,45.08626],[17.9366,45.09483],[17.93576,45.1037],[17.94146,45.10813],[17.96105,45.10843],[17.97202,45.11292],[17.98106,45.12414],[17.9824,45.13543],[17.9948,45.14488],[18.0097,45.14872],[18.01732,45.14618],[18.02126,45.13868],[18.02862,45.12432],[18.03733,45.12196],[18.04462,45.12385],[18.04822,45.13631],[18.05709,45.13962],[18.06597,45.13909],[18.07242,45.13182],[18.08054,45.119],[18.06856,45.1115],[18.06664,45.10772],[18.06856,45.10352],[18.07652,45.10057],[18.08967,45.09714],[18.10139,45.08484],[18.1106,45.07863],[18.12115,45.07621],[18.1394,45.08183],[18.15062,45.08153],[18.16695,45.07396],[18.18286,45.07343],[18.19994,45.07562],[18.21192,45.08177],[18.22046,45.08827],[18.22699,45.09856],[18.22473,45.10287],[18.2161,45.10919],[18.21309,45.11705],[18.21493,45.12202],[18.23561,45.13194],[18.25755,45.13614],[18.26718,45.13318],[18.2722,45.12781],[18.27631,45.11174],[18.28929,45.10996],[18.3021,45.11191],[18.3098,45.10376],[18.32169,45.09696],[18.33676,45.09808],[18.36875,45.10269],[18.40015,45.10547],[18.41924,45.10518],[18.43088,45.0985],[18.43749,45.08265],[18.44804,45.07639],[18.46814,45.05995],[18.48983,45.05516],[18.51419,45.05344],[18.52299,45.05634],[18.526,45.05155],[18.52474,45.04303],[18.53161,45.03995],[18.54057,45.0409],[18.54467,45.05539],[18.54434,45.06137],[18.55598,45.07065],[18.56401,45.07432],[18.56703,45.06551],[18.57691,45.06154],[18.58704,45.06846],[18.58771,45.08384],[18.60211,45.07645],[18.60856,45.07627],[18.59843,45.06971],[18.59935,45.06409],[18.60864,45.05805],[18.64063,45.05776],[18.64725,45.05421],[18.6588,45.05326],[18.66466,45.05817],[18.68861,45.03764],[18.70109,45.03439],[18.71155,45.03475],[18.71892,45.02054],[18.73282,45.01545],[18.72621,45.00622],[18.72026,44.99728],[18.72679,44.99017],[18.74613,44.98987],[18.76163,44.99591],[18.77251,44.99485],[18.78214,44.99165],[18.78901,44.99224],[18.7782,44.97596],[18.78214,44.95469],[18.79813,44.94485],[18.79579,44.93987],[18.78398,44.93857],[18.76271,44.94894],[18.74764,44.9455],[18.74471,44.93786],[18.74655,44.9263],[18.76338,44.91978],[18.75635,44.90792],[18.7633,44.8992],[18.78942,44.88449],[18.81915,44.87339],[18.83925,44.8547],[18.85055,44.849],[18.87835,44.84817],[18.92499,44.8468],[18.96225,44.84597],[18.996,44.84823],[19.02647,44.85137],[19.02756,44.85927],[19.01031,44.88508],[18.99708,44.89801],[18.99675,44.90679],[19.00562,44.91331],[19.02513,44.91871],[19.03284,44.91841],[19.03711,44.9148],[19.04021,44.91764],[19.09204,44.9164],[19.09514,44.97513],[19.08643,44.97779],[19.06357,44.97797],[19.08634,44.98608],[19.09656,44.99355],[19.09714,45.10453],[19.08325,45.11717],[19.08333,45.12745],[19.09354,45.1395],[19.11297,45.1343],[19.11908,45.12993],[19.13491,45.12692],[19.20164,45.17959],[19.21077,45.1852],[19.22609,45.18077],[19.23564,45.17127],[19.24803,45.17269],[19.27726,45.19446],[19.29434,45.19458],[19.29316,45.20196],[19.31561,45.20349],[19.31988,45.19252],[19.40162,45.19073],[19.40389,45.23548],[19.40191,45.23573],[19.3658,45.23519],[19.32988,45.23561],[19.2979,45.23909],[19.26369,45.24472],[19.26415,45.25153],[19.26478,45.25374],[19.25226,45.25438],[19.22676,45.2685],[19.20077,45.26891],[19.18444,45.27],[19.18113,45.27092],[19.17598,45.27395],[19.16773,45.27704],[19.1532,45.28096],[19.11661,45.29513],[19.1079,45.30137],[19.10133,45.31368],[19.102,45.32446],[19.10003,45.33149],[19.09426,45.33823],[19.07738,45.34462],[19.06097,45.34512],[19.05687,45.34571],[19.05377,45.34953],[19.04665,45.35233],[19.02472,45.35418],[19.01739,45.36021],[19.00923,45.36165],[19.00579,45.36083],[18.98825,45.36939],[18.97736,45.37577],[18.9741,45.38142],[18.97435,45.38718],[18.97879,45.39221],[18.98678,45.39609],[19.01345,45.39829],[19.01538,45.40732],[19.01597,45.42892],[19.0145,45.43459],[19.00508,45.43879],[18.997,45.44384],[18.99336,45.44854],[18.99248,45.45494],[18.99419,45.45823],[18.99524,45.47183],[18.99537,45.47391],[18.99591,45.48099],[19.00073,45.48768],[19.00596,45.49408],[19.01404,45.49226],[19.01957,45.48941],[19.03141,45.48422],[19.04184,45.48213],[19.05088,45.48204],[19.05766,45.48369],[19.07831,45.51814],[18.99206,45.54491],[18.98431,45.54081],[18.97196,45.5389],[18.94705,45.53685],[18.9306,45.54503],[18.92825,45.5489],[18.93474,45.55245],[18.93692,45.5567],[18.93642,45.56271],[18.93056,45.56409],[18.93144,45.56828],[18.91385,45.57112],[18.91084,45.56998],[18.90808,45.57012],[18.90242,45.57188],[18.90117,45.57833],[18.90833,45.59295],[18.91427,45.59755],[18.92507,45.595],[18.93152,45.59544],[18.93139,45.60889],[18.94923,45.60886],[18.94676,45.6141],[18.94957,45.62072],[18.95593,45.62403],[18.95626,45.62628],[18.95191,45.63325],[18.94643,45.6367],[18.94404,45.63679],[18.93981,45.63515],[18.93684,45.63869],[18.93751,45.64185],[18.94709,45.64071],[18.95451,45.64294],[18.95936,45.6454],[18.96012,45.68346],[18.9507,45.68846],[18.93391,45.69069],[18.92968,45.69402],[18.92583,45.69829],[18.92202,45.7023],[18.92805,45.70203],[18.92985,45.70311],[18.93424,45.70077],[18.94391,45.70162],[18.94709,45.70004],[18.9494,45.69604],[18.95241,45.69352],[18.95919,45.69186],[18.96062,45.70975],[18.96016,45.73185],[18.93328,45.73234],[18.93345,45.74777],[18.91691,45.74771],[18.90561,45.74766],[18.87927,45.74733],[18.87902,45.75969],[18.86592,45.76337],[18.85943,45.76673],[18.85574,45.7726],[18.866,45.77791],[18.87328,45.78159],[18.88061,45.78276],[18.88115,45.78419],[18.88203,45.82447],[18.88007,45.82348],[18.87617,45.8189],[18.87307,45.81026],[18.86248,45.80877],[18.8565,45.8114],[18.85373,45.81102],[18.85289,45.81577],[18.85114,45.81691],[18.85784,45.82581],[18.86005,45.83211],[18.86165,45.84448],[18.86056,45.85702],[18.87458,45.85609],[18.88233,45.85635],[18.88266,45.88468],[18.87902,45.88873],[18.87429,45.89488],[18.87793,45.89844],[18.88354,45.90118],[18.8835,45.92227],[18.87998,45.92087],[18.8758,45.91924],[18.87161,45.92017],[18.86918,45.9216],[18.86617,45.92296],[18.86257,45.92299],[18.86001,45.92116],[18.85984,45.91793],[18.86248,45.91303],[18.83033,45.90791],[18.82623,45.91743],[18.82036,45.91772],[18.81521,45.91536],[18.80274,45.90365],[18.80374,45.90144],[18.80814,45.89579],[18.80831,45.89101],[18.80609,45.88171],[18.79801,45.88151],[18.79064,45.88142],[18.78557,45.88378],[18.78034,45.88905],[18.77427,45.89136],[18.76393,45.89197],[18.76439,45.89447],[18.75962,45.89855],[18.75765,45.89951],[18.75438,45.89972],[18.75422,45.90211],[18.75137,45.90292],[18.74852,45.90272],[18.73852,45.90371],[18.72265,45.90788],[18.71365,45.91391],[18.70883,45.9183],[18.70703,45.92066],[18.70502,45.92093],[18.69954,45.92049],[18.68869,45.91895],[18.67299,45.91696],[18.67027,45.9149],[18.66462,45.91938],[18.65729,45.91935],[18.65566,45.91755],[18.6552,45.91536],[18.65587,45.90351],[18.65801,45.89963],[18.65708,45.89829],[18.6521,45.89812],[18.64402,45.89465],[18.63628,45.88972],[18.6372,45.88652],[18.63829,45.88288],[18.64775,45.87539],[18.63904,45.87186],[18.6333,45.87929],[18.62736,45.8792],[18.62334,45.87402],[18.62229,45.85938],[18.60906,45.85372],[18.61392,45.84696],[18.61719,45.84118],[18.59617,45.83576],[18.59885,45.82852],[18.58704,45.82129],[18.56829,45.8151],[18.57021,45.80425],[18.55757,45.80646],[18.55539,45.80442],[18.55212,45.79695],[18.54861,45.79683],[18.54308,45.79806],[18.53756,45.79567],[18.53278,45.79619],[18.52893,45.79561],[18.51612,45.78784],[18.5095,45.78854],[18.50858,45.7931],[18.50314,45.79736],[18.49401,45.79858],[18.48413,45.79491],[18.48028,45.78638],[18.47743,45.77003],[18.46504,45.76915],[18.45742,45.77248],[18.44922,45.77132],[18.44051,45.76033],[18.44344,45.75677],[18.44336,45.74187],[18.43599,45.7417],[18.42728,45.74479],[18.41849,45.74392],[18.41036,45.74222],[18.403,45.74766],[18.40475,45.75595],[18.40057,45.75952],[18.39864,45.75887],[18.39521,45.76466],[18.38533,45.76764],[18.3803,45.76781],[18.36506,45.77628],[18.35987,45.77511],[18.35033,45.76682],[18.34028,45.75291],[18.33249,45.75771],[18.31491,45.75952],[18.30871,45.75998],[18.3,45.76296],[18.29531,45.76372],[18.29054,45.76325],[18.27706,45.75852],[18.25906,45.76425],[18.24993,45.76547],[18.24633,45.76507],[18.2362,45.7792],[18.22933,45.78305],[18.21652,45.7837],[18.2048,45.78551],[18.19576,45.78977],[18.18763,45.79041],[18.17826,45.78767],[18.17055,45.77914],[18.1631,45.78183],[18.15757,45.78837],[18.14501,45.79175],[18.13538,45.79123],[18.12374,45.79257],[18.1168,45.79],[18.10951,45.78241],[18.10507,45.77435],[18.09335,45.76904],[18.08054,45.76834],[18.06028,45.77447],[18.04763,45.77762],[18.03465,45.77908],[18.01983,45.78422],[18.00719,45.79485],[18.00359,45.7973],[17.98282,45.79707],[17.97369,45.79269],[17.96901,45.79251],[17.9598,45.79461],[17.95352,45.7959],[17.94556,45.79485],[17.93518,45.79181],[17.92873,45.78948],[17.9196,45.7914],[17.90763,45.79537],[17.89457,45.79321],[17.88276,45.78755],[17.86811,45.77862],[17.86526,45.77067],[17.85957,45.77324],[17.85831,45.77762],[17.85655,45.78381],[17.85262,45.78702],[17.84341,45.78866],[17.83713,45.79339],[17.83629,45.80483],[17.83202,45.81131],[17.82339,45.81359],[17.8146,45.81172],[17.81075,45.80734],[17.8043,45.80833],[17.79585,45.81283],[17.78756,45.81971],[17.77374,45.82],[17.76394,45.81849],[17.75473,45.82438],[17.74937,45.83074],[17.72744,45.83477],[17.7106,45.83547],[17.70081,45.84072],[17.68565,45.84148],[17.67025,45.83833],[17.66053,45.84521],[17.65316,45.85507],[17.65249,45.86655],[17.6401,45.88701],[17.62863,45.90607],[17.61306,45.91586],[17.59313,45.92582],[17.57404,45.93991],[17.55947,45.9423],[17.53301,45.93793],[17.51517,45.94276],[17.49198,45.94556],[17.46778,45.94725],[17.4594,45.94905],[17.44835,45.95377],[17.43638,45.95377],[17.42507,45.95051],[17.42156,45.94498],[17.42474,45.93729],[17.43219,45.9324],[17.42566,45.93158],[17.41704,45.93403],[17.41511,45.9409],[17.41117,45.94306],[17.40657,45.94236],[17.39426,45.93514],[17.39024,45.93723],[17.39351,45.94428],[17.39049,45.9501],[17.39317,45.95522],[17.39635,45.96093],[17.39694,45.9643],[17.38748,45.96867],[17.38162,45.97146],[17.37308,45.97583],[17.38053,45.9838],[17.37936,45.99119],[17.37366,45.99398],[17.36194,45.99514],[17.35825,45.9927],[17.35591,45.98624],[17.35532,45.97792],[17.35231,45.97944],[17.34829,45.9863],[17.34377,45.99631],[17.33816,45.99951],[17.32912,45.99828],[17.32267,45.99439],[17.3153,45.99404],[17.30843,45.99154],[17.31011,45.99834],[17.30902,46.00335],[17.30182,46.00707],[17.29612,46.00643],[17.28356,46.00457],[17.2767,46.00759],[17.27092,46.01207],[17.26272,46.01265],[17.2762,46.01533],[17.27795,46.01771],[17.29629,46.02004],[17.30173,46.02643],[17.29813,46.03422],[17.28817,46.03556],[17.26673,46.03672],[17.26255,46.04282],[17.27594,46.05276],[17.27561,46.05758],[17.26908,46.06142],[17.25434,46.06183],[17.25669,46.06485],[17.25526,46.06764],[17.24488,46.06758],[17.24429,46.07071],[17.24396,46.07774],[17.23785,46.08181],[17.22529,46.08436],[17.22813,46.0904],[17.23751,46.09447],[17.23885,46.09946],[17.23366,46.10329],[17.22194,46.11398],[17.21624,46.11734],[17.21005,46.11699],[17.18392,46.11177],[17.18643,46.1199],[17.18342,46.12698],[17.19062,46.13092],[17.19179,46.13522],[17.18375,46.15227],[17.17153,46.16028],[17.16366,46.16167],[17.16198,46.17292],[17.15294,46.17617],[17.1377,46.17547],[17.13084,46.17234],[17.12866,46.17304],[17.13017,46.17918],[17.1238,46.18266],[17.11208,46.18185],[17.10722,46.18428],[17.10705,46.18857],[17.09902,46.1917],[17.08646,46.19344],[17.08327,46.19135],[17.07808,46.19286],[17.0749,46.19564],[17.06921,46.20492],[17.05748,46.20631],[17.05363,46.20631],[17.00641,46.22635],[16.99569,46.22612],[16.98983,46.22821],[16.97844,46.22821],[16.97777,46.2311],[16.98012,46.24049],[16.97559,46.24616],[16.96638,46.24547],[16.96287,46.24338],[16.95399,46.24442],[16.94344,46.25161],[16.93858,46.25774],[16.92519,46.26365],[16.91732,46.26434],[16.91263,46.26816],[16.90509,46.27789],[16.89119,46.28228],[16.89119,46.28633],[16.89019,46.30253],[16.88365,46.306],[16.88047,46.31364],[16.88198,46.32093],[16.87897,46.32544],[16.88583,46.33434],[16.88148,46.3407],[16.87277,46.34868],[16.86959,46.34775],[16.87361,46.35365],[16.86808,46.35769],[16.86172,46.35873],[16.85234,46.36451],[16.84329,46.36786],[16.84329,46.37399],[16.83743,46.37895],[16.82873,46.37768],[16.82069,46.37688],[16.81231,46.38011],[16.80896,46.3808],[16.80444,46.38739],[16.79624,46.39028],[16.78502,46.38947],[16.77899,46.38473],[16.77296,46.38877],[16.76509,46.38843],[16.7609,46.38566],[16.75789,46.39097],[16.75052,46.39224],[16.74466,46.38981],[16.74466,46.39848],[16.74231,46.40217],[16.73511,46.4046],[16.7192,46.40206],[16.70966,46.40541],[16.69994,46.42007],[16.66846,46.46184],[16.64719,46.46773],[16.63262,46.46934],[16.62559,46.47188],[16.61939,46.47165],[16.60968,46.47961],[16.59578,46.47995],[16.58004,46.47638],[16.57032,46.47695],[16.55592,46.4841],[16.54437,46.48076],[16.53499,46.48387],[16.52243,46.48295],[16.52377,46.49045],[16.51992,46.49517],[16.50987,46.49875],[16.49815,46.50001],[16.49295,46.5037],[16.49228,46.50981],[16.48592,46.51408],[16.46867,46.52237],[16.46532,46.52468],[16.45929,46.52422],[16.45561,46.52122],[16.44338,46.52018],[16.4459,46.52641],[16.43786,46.53274],[16.43032,46.53643],[16.41826,46.53597],[16.41073,46.53827],[16.40353,46.543],[16.39817,46.543],[16.3913,46.54012],[16.38695,46.5453],[16.38092,46.54461],[16.37137,46.53366],[16.35161,46.55198],[16.34609,46.55025],[16.33369,46.54622],[16.33219,46.54277],[16.33604,46.53297],[16.32432,46.5324],[16.31393,46.52952],[16.3074,46.52422],[16.30204,46.51661],[16.29467,46.51799],[16.28965,46.51938],[16.28144,46.51915],[16.27558,46.52122],[16.26972,46.52064],[16.26553,46.51707],[16.27391,46.51016],[16.25917,46.50428],[16.26319,46.49448],[16.24326,46.48837],[16.2374,46.48583],[16.2364,46.48318],[16.24544,46.47961],[16.25197,46.47026],[16.25465,46.46023],[16.25917,46.45377],[16.25934,46.44558],[16.26336,46.43415],[16.26721,46.42896],[16.26955,46.42122],[16.26738,46.41522],[16.26989,46.41129],[16.28044,46.41002],[16.29132,46.40425],[16.30054,46.39697],[16.29869,46.38762],[16.29869,46.38311],[16.2997,46.37942],[16.30489,46.3793],[16.30898,45.22981]],[[15.45776,43.0729],[15.43991,43.09697],[15.45639,43.10499],[16.30096,43.2312],[15.91713,43.51022],[15.8828,43.53461],[15.87353,43.56225],[15.86867,43.56547],[15.86851,43.58153],[15.87264,43.58117],[15.89619,43.57691],[15.91202,43.57501],[15.91561,43.58212],[15.90552,43.59036],[15.90545,43.59499],[15.91558,43.60086],[15.91328,43.60843],[16.12836,43.60933],[16.12499,44.14937],[16.3091,44.14984],[16.30916,44.14974],[16.31098,44.1463],[16.31266,44.14387],[16.31276,44.14256],[16.31157,44.12793],[16.31525,44.12639],[16.31598,44.125],[16.3168,44.12172],[16.32072,44.11655],[16.33606,44.11467],[16.3383,44.11357],[16.35283,44.10791],[16.36216,44.10334],[16.36388,44.10159],[16.36616,44.09926],[16.36664,44.09827],[16.36668,44.09748],[16.36514,44.09516],[16.37192,44.08445],[16.37753,44.08405],[16.37814,44.08379],[16.38276,44.08597],[16.38391,44.08599],[16.38536,44.08569],[16.38659,44.08507],[16.38961,44.08289],[16.39672,44.08247],[16.39834,44.08239],[16.40072,44.08215],[16.40256,44.08211],[16.42785,44.0856],[16.42923,44.08519],[16.4303,44.08448],[16.44441,44.0688],[16.44508,44.06805],[16.44565,44.06696],[16.44472,44.06462],[16.44389,44.06191],[16.43893,44.05434],[16.4396,44.049],[16.44177,44.04244],[16.44204,44.03718],[16.44144,44.03546],[16.43997,44.03188],[16.44156,44.03107],[16.44345,44.0311],[16.44897,44.03042],[16.45525,44.03049],[16.45923,44.03076],[16.46266,44.03126],[16.46731,44.03221],[16.46936,44.03212],[16.48295,44.0317],[16.50428,44.02631],[16.50539,44.02518],[16.5187,44.00519],[16.53769,43.98917],[16.53995,43.98722],[16.54742,43.97499],[16.54784,43.97359],[16.55289,43.9553],[16.58975,43.94507],[16.59094,43.94383],[16.59163,43.94198],[16.59304,43.93928],[16.60141,43.93673],[16.60252,43.93566],[16.6029,43.93479],[16.60614,43.9266],[16.61033,43.92476],[16.61114,43.92396],[16.61148,43.92265],[16.61232,43.92],[16.6123,43.91601],[16.61539,43.91597],[16.62603,43.90769],[16.62867,43.90324],[16.64786,43.88983],[16.64922,43.88855],[16.65117,43.88764],[16.65797,43.88589],[16.66067,43.88414],[16.66243,43.88224],[16.66266,43.88149],[16.66505,43.87972],[16.66869,43.87984],[16.67011,43.87971],[16.67173,43.87885],[16.67495,43.87646],[16.6753,43.87581],[16.68634,43.86798],[16.70704,43.86016],[16.70857,43.85933],[16.71315,43.85609],[16.7138,43.85502],[16.71809,43.84742],[16.71824,43.8464],[16.71843,43.8444],[16.72107,43.84185],[16.72161,43.84086],[16.72136,43.83616],[16.7236,43.83248],[16.72362,43.83172],[16.72335,43.83075],[16.72144,43.8294],[16.72347,43.82627],[16.72351,43.82517],[16.72268,43.82325],[16.72213,43.82148],[16.72148,43.81899],[16.72136,43.81635],[16.72215,43.80778],[16.72601,43.8053],[16.72799,43.80221],[16.72956,43.80045],[16.72977,43.7994],[16.72915,43.79709],[16.72868,43.79633],[16.7304,43.79518],[16.73067,43.79396],[16.7331,43.79121],[16.73685,43.78775],[16.74221,43.78312],[16.74761,43.77845],[16.7541,43.77221],[16.75707,43.77269],[16.76105,43.77219],[16.76113,43.77177],[16.76613,43.7717],[16.77987,43.77006],[16.80222,43.76488],[16.80474,43.7634],[16.81478,43.75664],[16.81822,43.75048],[16.81828,43.74988],[16.82743,43.73415],[16.83352,43.73241],[16.83664,43.7307],[16.85083,43.72098],[16.86975,43.71255],[16.87562,43.70733],[16.87926,43.70099],[16.87915,43.69905],[16.88031,43.69583],[16.88522,43.69357],[16.88617,43.6923],[16.88811,43.68718],[16.9022,43.68081],[16.91083,43.67631],[16.91177,43.67521],[16.91319,43.67263],[16.9151,43.67026],[16.91964,43.66446],[16.91987,43.66365],[16.9224,43.66007],[16.93025,43.65648],[16.93092,43.65531],[16.93161,43.65321],[16.9349,43.64722],[16.93502,43.6448],[16.96136,43.6273],[16.96701,43.62375],[16.97371,43.61948],[16.97438,43.61853],[16.98089,43.60728],[16.98424,43.6034],[16.98573,43.60235],[16.98596,43.6015],[16.98907,43.59903],[16.99,43.59768],[16.99288,43.59344],[16.99533,43.59303],[16.99672,43.59205],[16.99824,43.59048],[16.99849,43.58974],[17.00863,43.58314],[17.00982,43.58233],[17.01034,43.58107],[17.0107,43.58011],[17.01059,43.5779],[17.0165,43.5733],[17.02349,43.56986],[17.02745,43.56859],[17.0318,43.5659],[17.03477,43.56426],[17.03862,43.56096],[17.04442,43.55911],[17.05219,43.5578],[17.05378,43.55721],[17.05702,43.55681],[17.05702,43.55466],[17.06636,43.55462],[17.06808,43.55331],[17.06879,43.55202],[17.06852,43.55117],[17.07149,43.54991],[17.07346,43.54927],[17.07452,43.54838],[17.08097,43.54524],[17.08189,43.54413],[17.08518,43.54105],[17.08683,43.53952],[17.08861,43.53847],[17.09226,43.5361],[17.09602,43.53387],[17.09682,43.53308],[17.10538,43.53055],[17.10685,43.52958],[17.10814,43.52757],[17.10963,43.5258],[17.1252,43.52018],[17.12726,43.51848],[17.13247,43.5127],[17.13458,43.51098],[17.13502,43.51009],[17.13737,43.50974],[17.13969,43.50972],[17.14176,43.50901],[17.14208,43.5086],[17.14415,43.50792],[17.14524,43.50711],[17.14576,43.5059],[17.14771,43.50368],[17.15204,43.49746],[17.15583,43.49647],[17.16031,43.49604],[17.17436,43.49275],[17.17884,43.4963],[17.18005,43.49774],[17.18154,43.4982],[17.18405,43.49902],[17.18771,43.49984],[17.19003,43.49967],[17.19537,43.49993],[17.20701,43.49982],[17.2122,43.49881],[17.21509,43.49966],[17.21637,43.49946],[17.22093,43.49976],[17.22801,43.49976],[17.23196,43.49837],[17.23435,43.4967],[17.23701,43.49603],[17.23822,43.49496],[17.2404,43.49427],[17.24187,43.49351],[17.24561,43.49263],[17.24785,43.49156],[17.25275,43.48933],[17.25855,43.4861],[17.26052,43.48547],[17.26225,43.48455],[17.26728,43.48271],[17.26958,43.48124],[17.27243,43.47973],[17.27276,43.47849],[17.27632,43.47642],[17.27731,43.47519],[17.28139,43.47296],[17.28264,43.47171],[17.28532,43.46933],[17.28624,43.46797],[17.2866,43.46536],[17.28913,43.46188],[17.28899,43.45998],[17.28991,43.45711],[17.28926,43.4541],[17.28804,43.45238],[17.28972,43.44916],[17.28959,43.44726],[17.28865,43.4458],[17.28878,43.44351],[17.28788,43.44156],[17.28842,43.43857],[17.28733,43.43422],[17.28549,43.43054],[17.28216,43.42595],[17.27814,43.42043],[17.2745,43.41634],[17.27216,43.413],[17.26918,43.41219],[17.26382,43.40792],[17.26217,43.40486],[17.26075,43.40301],[17.25664,43.40208],[17.26104,43.3989],[17.26414,43.39479],[17.26516,43.39138],[17.26632,43.386],[17.26791,43.37838],[17.26885,43.3732],[17.27251,43.36888],[17.27391,43.36757],[17.27446,43.3659],[17.27438,43.36444],[17.27699,43.36022],[17.27712,43.35861],[17.27762,43.35677],[17.27756,43.35555],[17.27873,43.35526],[17.28313,43.34764],[17.29342,43.33131],[17.30111,43.31927],[17.30266,43.31749],[17.30441,43.31584],[17.30598,43.31389],[17.3095,43.30684],[17.31084,43.30487],[17.31178,43.30308],[17.31337,43.30084],[17.31383,43.29974],[17.31784,43.296],[17.32055,43.29333],[17.32438,43.28912],[17.32627,43.28879],[17.32901,43.28795],[17.33012,43.2867],[17.33138,43.28491],[17.33266,43.28267],[17.33254,43.28088],[17.3335,43.27866],[17.33408,43.27704],[17.33412,43.2747],[17.33478,43.27417],[17.33552,43.27283],[17.33602,43.2714],[17.33582,43.27005],[17.33559,43.26978],[17.33641,43.26898],[17.33653,43.26762],[17.33611,43.26646],[17.33564,43.26588],[17.3389,43.26232],[17.3407,43.25991],[17.341,43.25936],[17.34344,43.25777],[17.34447,43.25629],[17.34462,43.25537],[17.34752,43.25508],[17.35451,43.25395],[17.36082,43.25189],[17.36824,43.25169],[17.37011,43.25216],[17.37294,43.25218],[17.37646,43.252],[17.379,43.25122],[17.3817,43.25009],[17.38471,43.25012],[17.39222,43.24854],[17.39827,43.24763],[17.40078,43.24631],[17.40786,43.24182],[17.41663,43.23641],[17.42366,43.23203],[17.4234,43.22816],[17.42638,43.22814],[17.43036,43.22016],[17.43233,43.21821],[17.4327,43.21716],[17.43304,43.21537],[17.43274,43.21455],[17.43303,43.21187],[17.43455,43.21052],[17.43485,43.20942],[17.43455,43.20771],[17.43571,43.20556],[17.43552,43.20439],[17.43515,43.20269],[17.4345,43.19824],[17.43352,43.19711],[17.43303,43.19456],[17.43217,43.19342],[17.43154,43.19119],[17.43043,43.18933],[17.43053,43.18794],[17.43172,43.18519],[17.43346,43.18123],[17.43591,43.18263],[17.438,43.18288],[17.44028,43.18232],[17.44367,43.18111],[17.44761,43.18015],[17.45085,43.17971],[17.45279,43.17889],[17.4534,43.17815],[17.45524,43.17755],[17.45715,43.17643],[17.45855,43.1755],[17.45945,43.17458],[17.46034,43.17377],[17.46214,43.17318],[17.46327,43.17248],[17.46514,43.17164],[17.46668,43.17045],[17.46946,43.16877],[17.47561,43.16536],[17.47604,43.16418],[17.47869,43.1628],[17.48447,43.16096],[17.48814,43.16012],[17.49152,43.15872],[17.49323,43.15725],[17.49458,43.15644],[17.49585,43.15634],[17.49633,43.15603],[17.50096,43.15453],[17.50323,43.15328],[17.5041,43.15307],[17.5075,43.15153],[17.50916,43.1501],[17.51062,43.14917],[17.51568,43.14763],[17.52138,43.1462],[17.528,43.14377],[17.53268,43.14149],[17.53599,43.1394],[17.54105,43.13789],[17.54608,43.13624],[17.54735,43.1356],[17.54932,43.13385],[17.5514,43.13349],[17.55324,43.13339],[17.55662,43.1323],[17.55868,43.13126],[17.56014,43.13017],[17.56376,43.12737],[17.56486,43.12661],[17.5672,43.12577],[17.56843,43.12491],[17.5703,43.12428],[17.57361,43.12358],[17.57736,43.12229],[17.5818,43.12095],[17.58489,43.11943],[17.58694,43.11874],[17.58996,43.11716],[17.59436,43.11478],[17.59802,43.1129],[17.60069,43.11105],[17.60222,43.11094],[17.60363,43.11035],[17.60494,43.10942],[17.60589,43.1083],[17.61323,43.1047],[17.62194,43.10018],[17.62776,43.09777],[17.629,43.09757],[17.63049,43.09706],[17.63221,43.09613],[17.63334,43.09557],[17.63715,43.09477],[17.63904,43.09354],[17.64095,43.09229],[17.64304,43.09121],[17.64429,43.09027],[17.64522,43.08805],[17.65012,43.07925],[17.65267,43.07481],[17.65291,43.07368],[17.65295,43.07287],[17.65387,43.07064],[17.65413,43.07026],[17.65533,43.06911],[17.65625,43.06685],[17.65718,43.06482],[17.65969,43.06062],[17.66288,43.05543],[17.66398,43.05285],[17.66521,43.05078],[17.66695,43.04723],[17.669,43.04299],[17.67219,43.0381],[17.67612,43.03219],[17.67831,43.02874],[17.67986,43.0277],[17.68069,43.02618],[17.68167,43.0252],[17.68268,43.02425],[17.68431,43.02197],[17.68636,43.02069],[17.68689,43.01954],[17.68763,43.01635],[17.68846,43.01132],[17.69535,43.00363],[17.69763,43.00099],[17.69817,42.99964],[17.70499,42.98764],[17.70556,42.98527],[17.70669,42.98351],[17.7085,42.98023],[17.71408,42.97496],[17.71384,42.9707],[17.70105,42.96614],[17.68885,42.9633],[17.68698,42.96293],[17.68241,42.96273],[17.67891,42.96188],[17.67431,42.96167],[17.67178,42.96069],[17.67,42.95984],[17.66802,42.95943],[17.66662,42.95952],[17.66291,42.9585],[17.66149,42.95834],[17.66003,42.95843],[17.65517,42.95706],[17.65359,42.95674],[17.65131,42.95563],[17.64944,42.95519],[17.64297,42.95113],[17.64175,42.95083],[17.63991,42.95074],[17.63492,42.94772],[17.63317,42.94633],[17.63199,42.9452],[17.62938,42.94451],[17.62762,42.94357],[17.62611,42.9432],[17.62282,42.94183],[17.62121,42.94083],[17.61881,42.94012],[17.61537,42.93951],[17.60937,42.93868],[17.60543,42.93831],[17.6032,42.93825],[17.60213,42.93792],[17.59293,42.93768],[17.58964,42.93703],[17.58596,42.93632],[17.58424,42.93625],[17.58165,42.93547],[17.58002,42.93553],[17.57649,42.93745],[17.57444,42.9389],[17.56628,42.93853],[17.56426,42.93879],[17.56195,42.93632],[17.55993,42.93579],[17.55714,42.93584],[17.55358,42.9384],[17.54924,42.93892],[17.54776,42.93718],[17.54426,42.93619],[17.54064,42.93645],[17.53969,42.93831],[17.53589,42.93792],[17.5331,42.93936],[17.52978,42.9424],[17.52028,42.92815],[17.52748,42.92702],[17.53375,42.92469],[17.54671,42.91709],[17.548,42.91583],[17.55298,42.91602],[17.56242,42.91338],[17.56697,42.91111],[17.57452,42.90822],[17.58096,42.90634],[17.58714,42.90407],[17.59512,42.90112],[17.60087,42.89785],[17.60774,42.89873],[17.61263,42.89772],[17.62113,42.89213],[17.62671,42.8871],[17.63263,42.88269],[17.63752,42.88137],[17.64361,42.88081],[17.6467,42.88452],[17.64542,42.88942],[17.66215,42.90753],[17.6643,42.91162],[17.67305,42.92048],[17.67683,42.92325],[17.68764,42.92563],[17.70404,42.92431],[17.72558,42.92174],[17.75631,42.91476],[17.76858,42.90992],[17.7879,42.89439],[17.79974,42.91174],[17.80532,42.91742],[17.80648,42.91838],[17.81313,42.91834],[17.8145,42.91781],[17.81646,42.91693],[17.82294,42.9144],[17.83115,42.91166],[17.84137,42.90642],[17.84605,42.90453],[17.84684,42.90398],[17.84753,42.90304],[17.85276,42.89772],[17.85497,42.89507],[17.85905,42.88991],[17.85883,42.88178],[17.86074,42.88175],[17.8592,42.87944],[17.85757,42.8779],[17.8578,42.87662],[17.85961,42.86939],[17.86077,42.86793],[17.86188,42.8654],[17.86257,42.86362],[17.86613,42.85892],[17.86645,42.85802],[17.86733,42.85673],[17.87057,42.85152],[17.87315,42.84772],[17.87643,42.84496],[17.878,42.84334],[17.88046,42.83977],[17.88551,42.8398],[17.88933,42.83823],[17.89355,42.83672],[17.90126,42.83463],[17.90231,42.83418],[17.90334,42.8331],[17.90351,42.8322],[17.90241,42.82987],[17.90113,42.82794],[17.90003,42.82717],[17.8989,42.82512],[17.89754,42.82419],[17.89478,42.82156],[17.8933,42.82071],[17.89081,42.815],[17.89327,42.81196],[17.90171,42.81198],[17.90911,42.8131],[17.91046,42.81308],[17.91166,42.81273],[17.91362,42.81155],[17.91613,42.81011],[17.94119,42.80308],[17.95164,42.8011],[17.95338,42.79982],[17.96005,42.7946],[17.962,42.79191],[17.96683,42.78819],[17.96825,42.78757],[17.96921,42.78682],[17.96966,42.78627],[17.97529,42.78378],[17.97704,42.78202],[17.98146,42.78038],[17.98501,42.78065],[17.99464,42.77921],[17.99837,42.77783],[17.99975,42.77641],[17.99979,42.77518],[17.99975,42.7739],[18.00007,42.77231],[18.00018,42.76573],[18.00168,42.76442],[18.00219,42.76363],[18.00515,42.75962],[18.00663,42.75855],[18.01058,42.75648],[18.01161,42.75539],[18.0123,42.75465],[18.02601,42.75448],[18.02882,42.75358],[18.03268,42.75248],[18.03451,42.75242],[18.03698,42.7518],[18.04343,42.75042],[18.04496,42.74908],[18.05144,42.74422],[18.05339,42.74396],[18.05616,42.74279],[18.0588,42.74176],[18.06393,42.73857],[18.06562,42.73715],[18.06755,42.7354],[18.07105,42.73316],[18.07609,42.7296],[18.07667,42.7287],[18.07663,42.72749],[18.07691,42.7266],[18.07903,42.72698],[18.08019,42.72679],[18.08159,42.72632],[18.08416,42.72504],[18.0927,42.72184],[18.10032,42.71919],[18.10392,42.71713],[18.10843,42.71355],[18.10933,42.71193],[18.11045,42.70962],[18.11141,42.70663],[18.11131,42.7027],[18.11036,42.70155],[18.1107,42.69967],[18.11049,42.69906],[18.10873,42.69663],[18.10813,42.69359],[18.10592,42.68963],[18.1059,42.68878],[18.10976,42.68843],[18.1115,42.68857],[18.11246,42.68857],[18.11442,42.68876],[18.11626,42.68833],[18.11746,42.68747],[18.11948,42.68633],[18.12422,42.68545],[18.12667,42.68494],[18.12851,42.68472],[18.13373,42.68444],[18.13527,42.68384],[18.13813,42.68226],[18.14085,42.68261],[18.14253,42.68248],[18.14596,42.68086],[18.14686,42.67969],[18.14772,42.67676],[18.14931,42.67204],[18.15328,42.66798],[18.15613,42.66443],[18.15772,42.66199],[18.15828,42.65994],[18.15819,42.65896],[18.16598,42.66117],[18.17158,42.66197],[18.17261,42.66182],[18.17396,42.66295],[18.17501,42.66333],[18.17606,42.66339],[18.17913,42.66322],[18.18087,42.66254],[18.18338,42.66011],[18.18589,42.65781],[18.18772,42.65804],[18.19093,42.65757],[18.19327,42.65669],[18.1948,42.65524],[18.19497,42.65473],[18.19673,42.65381],[18.19782,42.65206],[18.19862,42.6508],[18.20424,42.64569],[18.20761,42.64051],[18.21389,42.63647],[18.21563,42.63405],[18.21844,42.63086],[18.22147,42.62796],[18.22422,42.62502],[18.22887,42.62202],[18.23381,42.62163],[18.23632,42.62041],[18.23728,42.61894],[18.23733,42.61801],[18.23911,42.6185],[18.24241,42.61822],[18.24368,42.61763],[18.24522,42.61563],[18.24619,42.61395],[18.2466,42.61106],[18.24679,42.60541],[18.24911,42.60547],[18.25844,42.60781],[18.26273,42.60892],[18.26477,42.61117],[18.27044,42.61342],[18.27312,42.61307],[18.2744,42.61517],[18.28073,42.61969],[18.28168,42.61995],[18.28503,42.61967],[18.28861,42.61945],[18.29249,42.61817],[18.31086,42.61733],[18.3235,42.61934],[18.33193,42.62142],[18.34811,42.6216],[18.36845,42.61827],[18.37062,42.61669],[18.37631,42.60993],[18.3824,42.60094],[18.38596,42.59811],[18.39259,42.59094],[18.40075,42.58794],[18.40066,42.586],[18.40545,42.58592],[18.41875,42.57781],[18.43351,42.56805],[18.43729,42.56658],[18.43954,42.56497],[18.44008,42.5637],[18.44096,42.5567],[18.44343,42.55112],[18.44341,42.54918],[18.44244,42.53503],[18.44201,42.52551],[18.44072,42.52124],[18.44021,42.52064],[18.446,42.5169],[18.45055,42.51001],[18.44931,42.50814],[18.44407,42.50121],[18.44394,42.49871],[18.44321,42.49754],[18.4433,42.4959],[18.44223,42.49397],[18.44171,42.49318],[18.44115,42.49026],[18.44175,42.48786],[18.44102,42.48631],[18.43987,42.48498],[18.44613,42.48264],[18.45077,42.47909],[18.45274,42.4765],[18.456,42.47482],[18.45815,42.47529],[18.46102,42.47444],[18.46634,42.47203],[18.47647,42.46665],[18.4787,42.46409],[18.48239,42.45883],[18.48673,42.45316],[18.49119,42.45006],[18.49437,42.4474],[18.49621,42.44357],[18.5069,42.43435],[18.48793,42.4169],[18.48287,42.41931],[18.47862,42.42371],[18.47561,42.42659],[18.47261,42.42935],[18.47124,42.43261],[18.46591,42.43701],[18.46385,42.43961],[18.45969,42.4424],[18.44974,42.44683],[18.44562,42.44309],[18.4306,42.43708],[18.42236,42.44081],[18.42253,42.44582],[18.40219,42.45741],[18.40716,42.46456],[18.37051,42.48292],[18.35026,42.49159],[18.30503,42.5133],[18.26941,42.52582],[18.26348,42.53474],[18.24091,42.54979],[18.22254,42.56181],[18.21945,42.56775],[18.19851,42.56648],[18.18718,42.57255],[18.18443,42.57887],[18.16795,42.58532],[18.16915,42.5905],[18.19868,42.59998],[18.21327,42.59833],[18.21568,42.60453],[18.2016,42.61501],[18.18237,42.60983],[18.16401,42.61476],[18.14461,42.62524],[18.13379,42.62676],[18.1307,42.61792],[18.12178,42.61678],[18.10822,42.62171],[18.10444,42.6351],[18.03989,42.64873],[17.94891,42.64128],[17.06039,42.69152],[16.34491,42.37123],[16.22612,42.3834],[16.39023,42.73995],[15.45776,43.0729]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-dof-2018",name:"dgu.hr: Croatia 2018 Aerial imagery",type:"wms",template:"https://geoportal.dgu.hr/services/inspire/orthophoto_2018/ows?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.OrthoImagery&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",polygon:[[[16.29963,46.3815],[16.30495,46.38151],[16.30862,45.22967],[16.49996,45.22994],[16.49997,45.20987],[16.49689,45.20907],[16.49491,45.20698],[16.49417,45.20094],[16.49086,45.19326],[16.48662,45.1876],[16.47863,45.18198],[16.47765,45.18004],[16.4782,45.17638],[16.48211,45.1696],[16.4831,45.16561],[16.48159,45.15965],[16.47876,45.15632],[16.47142,45.14842],[16.46679,45.14146],[16.46448,45.13997],[16.46184,45.13997],[16.46186,45.13855],[16.45391,45.13501],[16.45031,45.13174],[16.44722,45.13101],[16.44499,45.12871],[16.44087,45.12514],[16.43486,45.12272],[16.42988,45.12175],[16.42383,45.1219],[16.4237,45.12057],[16.41417,45.11902],[16.40499,45.11581],[16.39821,45.11157],[16.39752,45.10909],[16.39675,45.1063],[16.39744,45.10509],[16.40636,45.0997],[16.40645,45.09831],[16.40585,45.09661],[16.40233,45.09449],[16.39958,45.09255],[16.39915,45.08807],[16.39641,45.08485],[16.39057,45.08037],[16.3898,45.0771],[16.39152,45.07207],[16.39134,45.06613],[16.38817,45.06067],[16.38757,45.05236],[16.38165,45.04794],[16.37718,45.04842],[16.37315,45.0426],[16.3686,45.03969],[16.36362,45.03508],[16.3613,45.03023],[16.36311,45.02392],[16.36122,45.01706],[16.36268,45.01172],[16.35984,45.00693],[16.3583,45.00232],[16.35504,44.99959],[16.34706,44.99704],[16.3304,44.99691],[16.3062,44.9957],[16.28569,44.9923],[16.28191,44.99588],[16.27573,45.00001],[16.2541,45.00608],[16.22423,45.01567],[16.21599,45.02088],[16.17582,45.03205],[16.16707,45.05861],[16.16192,45.07231],[16.14407,45.08007],[16.10407,45.08891],[16.08175,45.10321],[16.08021,45.12308],[16.06441,45.14427],[16.04622,45.16074],[16.04158,45.17562],[16.01326,45.17683],[16.00914,45.18458],[16.02064,45.19631],[16.01395,45.20418],[16.00794,45.213],[15.99318,45.21651],[15.97876,45.2257],[15.97395,45.22316],[15.96605,45.21736],[15.9561,45.21445],[15.94429,45.2106],[15.91799,45.21049],[15.91619,45.21291],[15.92176,45.22222],[15.91837,45.22313],[15.90816,45.22098],[15.90099,45.22244],[15.89653,45.21288],[15.88537,45.21276],[15.85396,45.21397],[15.84108,45.21869],[15.83645,45.21615],[15.83611,45.20986],[15.82804,45.20345],[15.81842,45.20248],[15.80658,45.1968],[15.79216,45.18784],[15.77896,45.1736],[15.77476,45.17354],[15.77482,45.17128],[15.77087,45.16404],[15.77349,45.1522],[15.78109,45.14609],[15.7871,45.13525],[15.78564,45.12889],[15.79482,45.12108],[15.79516,45.11278],[15.78486,45.10321],[15.78341,45.09297],[15.77534,45.09164],[15.77785,45.08373],[15.77597,45.08369],[15.776,45.08188],[15.77439,45.08001],[15.77534,45.07382],[15.75122,45.06121],[15.75929,45.05309],[15.76032,45.04691],[15.77165,45.02161],[15.77654,45.01075],[15.78186,45.0096],[15.78701,45.00456],[15.79001,44.99352],[15.78572,44.98271],[15.78847,44.97482],[15.7871,44.96984],[15.781,44.96504],[15.77371,44.96583],[15.77182,44.96765],[15.75336,44.96619],[15.75113,44.95836],[15.75371,44.95083],[15.75113,44.94488],[15.74281,44.93655],[15.76487,44.88762],[15.76401,44.87071],[15.79834,44.84699],[15.79628,44.84419],[15.76143,44.82617],[15.73551,44.82288],[15.7477,44.80863],[15.74547,44.80121],[15.75972,44.78829],[15.76744,44.77794],[15.77465,44.77196],[15.77568,44.76758],[15.78289,44.75844],[15.7877,44.75051],[15.81242,44.74332],[15.81911,44.73686],[15.82615,44.72649],[15.8325,44.72393],[15.84726,44.7393],[15.85894,44.74003],[15.87147,44.73613],[15.87696,44.73564],[15.88005,44.74698],[15.89481,44.75271],[15.90631,44.74978],[15.93292,44.71734],[15.95884,44.71466],[15.96502,44.70807],[15.96605,44.69624],[15.97206,44.68525],[15.9767,44.6772],[15.99215,44.66902],[16.0251,44.66023],[16.0397,44.654],[16.0445,44.64081],[16.04828,44.63251],[16.05823,44.62811],[16.06167,44.622],[16.0651,44.60538],[16.0548,44.60122],[16.05617,44.59291],[16.04176,44.58387],[16.02562,44.58313],[16.02493,44.57506],[16.0294,44.56185],[16.05926,44.54253],[16.10287,44.53567],[16.12724,44.51585],[16.13377,44.49871],[16.1475,44.48132],[16.14269,44.45829],[16.15059,44.44432],[16.14716,44.43648],[16.14819,44.42716],[16.15711,44.42593],[16.17187,44.41318],[16.17977,44.4019],[16.16398,44.39135],[16.14578,44.38816],[16.13651,44.38816],[16.13754,44.38031],[16.15643,44.38399],[16.17634,44.37639],[16.20998,44.36191],[16.22406,44.3489],[16.22406,44.33809],[16.2038,44.3236],[16.19556,44.30592],[16.19797,44.272],[16.2244,44.24422],[16.22852,44.22355],[16.2347,44.20633],[16.23713,44.20428],[16.23721,44.20365],[16.23912,44.20362],[16.27178,44.17753],[16.29719,44.163],[16.30577,44.15084],[16.30509,44.14984],[16.12495,44.1494],[16.12815,43.60943],[15.92174,43.60849],[15.52195,43.61231],[14.78331,44.11942],[14.28198,44.49521],[13.88603,44.75271],[13.82578,44.82532],[13.81273,44.84467],[13.80363,44.85648],[13.78029,44.86633],[13.76638,44.87777],[13.73428,44.88604],[13.72673,44.90471],[13.72647,44.90823],[13.71858,44.90817],[13.70853,44.9134],[13.70544,44.92835],[13.70905,44.94646],[13.72398,44.94888],[13.74596,44.94366],[13.76862,44.94342],[13.76673,44.96128],[13.74956,44.98156],[13.72261,44.98289],[13.69926,44.98714],[13.69017,44.99661],[13.68347,45.00984],[13.68334,45.01524],[13.6745,45.01506],[13.64605,45.03605],[13.60777,45.03763],[13.60451,45.08431],[13.60193,45.12296],[13.57035,45.13967],[13.56262,45.20309],[13.56571,45.27271],[13.55421,45.3116],[13.55397,45.31264],[13.55372,45.31784],[13.54998,45.31787],[13.52898,45.32753],[13.52383,45.39773],[13.51044,45.4146],[13.50975,45.42779],[13.50357,45.44261],[13.50872,45.44279],[13.5076,45.46073],[13.5052,45.46085],[13.48331,45.48595],[13.48555,45.496],[13.49894,45.50731],[13.51439,45.51032],[13.5443,45.4977],[13.56091,45.49377],[13.58344,45.48213],[13.58341,45.48066],[13.58734,45.48071],[13.62264,45.46586],[13.62274,45.46366],[13.63102,45.46387],[13.64511,45.46236],[13.65952,45.45616],[13.66785,45.45194],[13.67463,45.44773],[13.68073,45.44797],[13.68596,45.4511],[13.69643,45.45802],[13.70399,45.46013],[13.71042,45.46013],[13.71317,45.45688],[13.71969,45.45869],[13.72184,45.46133],[13.72699,45.46278],[13.74175,45.46453],[13.75248,45.46362],[13.76432,45.47054],[13.77308,45.46934],[13.77602,45.46747],[13.78933,45.46771],[13.80501,45.46386],[13.81119,45.4586],[13.81187,45.45483],[13.80913,45.45047],[13.80969,45.44577],[13.81865,45.4421],[13.819,45.43779],[13.83243,45.43803],[13.84217,45.43677],[13.85427,45.43439],[13.85827,45.42999],[13.86286,45.4305],[13.88238,45.429],[13.8859,45.43439],[13.89204,45.44297],[13.90762,45.45432],[13.91371,45.45664],[13.94096,45.45718],[13.94573,45.45938],[13.9595,45.45844],[13.9701,45.45233],[13.98027,45.45832],[13.98186,45.47094],[13.98663,45.47319],[13.99019,45.47328],[13.98087,45.48255],[13.98281,45.48451],[13.97113,45.49161],[13.96633,45.49335],[13.96186,45.49444],[13.95822,45.5071],[13.96337,45.5105],[13.96688,45.51465],[13.97414,45.51768],[13.97804,45.51738],[13.9816,45.51654],[13.98396,45.51432],[13.98937,45.51185],[13.99542,45.51104],[13.99336,45.51483],[13.99435,45.51756],[13.99804,45.52147],[14.00195,45.52298],[14.01465,45.52213],[14.03173,45.51173],[14.04495,45.50078],[14.04941,45.50117],[14.05375,45.50006],[14.07602,45.48728],[14.09147,45.48502],[14.10915,45.48586],[14.1267,45.48135],[14.14189,45.47795],[14.14872,45.48306],[14.15481,45.48385],[14.17172,45.48258],[14.18854,45.47864],[14.20335,45.47325],[14.20288,45.483],[14.21043,45.49459],[14.217,45.49654],[14.22047,45.50397],[14.23137,45.50845],[14.24884,45.50803],[14.26656,45.48715],[14.27695,45.49305],[14.28914,45.49296],[14.29467,45.48676],[14.30622,45.48345],[14.31733,45.48607],[14.31982,45.4846],[14.32179,45.4827],[14.32381,45.47413],[14.33656,45.48195],[14.34862,45.48791],[14.35282,45.48857],[14.36578,45.48821],[14.3869,45.49693],[14.39243,45.4975],[14.39462,45.50553],[14.41007,45.5099],[14.4138,45.51251],[14.42913,45.51215],[14.43346,45.51353],[14.43998,45.51931],[14.45299,45.52283],[14.47341,45.53756],[14.48749,45.54141],[14.49376,45.54991],[14.49238,45.56596],[14.49577,45.58008],[14.50058,45.58455],[14.50178,45.58852],[14.49311,45.59638],[14.49324,45.60041],[14.4953,45.60824],[14.49998,45.6084],[14.49993,45.61037],[14.50305,45.61087],[14.5112,45.61024],[14.51311,45.6103],[14.51569,45.61242],[14.52614,45.61357],[14.53247,45.61654],[14.54144,45.62448],[14.54242,45.62709],[14.54453,45.62895],[14.54779,45.63655],[14.56186,45.65401],[14.56487,45.6756],[14.56821,45.67686],[14.57954,45.67464],[14.58418,45.66912],[14.59748,45.67254],[14.61164,45.66673],[14.61345,45.65737],[14.61027,45.65065],[14.60522,45.62774],[14.62551,45.61817],[14.63212,45.61512],[14.63507,45.60761],[14.64061,45.60736],[14.6471,45.60249],[14.65359,45.59515],[14.6544,45.59372],[14.65441,45.59304],[14.66074,45.59309],[14.67618,45.59236],[14.68164,45.59083],[14.68697,45.58689],[14.6881,45.5847],[14.69134,45.58365],[14.69391,45.58134],[14.69629,45.57799],[14.70107,45.56974],[14.70367,45.56282],[14.70119,45.55836],[14.69821,45.55431],[14.6947,45.55291],[14.69452,45.54617],[14.69276,45.54485],[14.69175,45.54122],[14.69211,45.53837],[14.68957,45.53456],[14.69169,45.53064],[14.69859,45.52874],[14.69724,45.53345],[14.69989,45.53651],[14.70526,45.53816],[14.72508,45.53642],[14.73145,45.53258],[14.73729,45.53237],[14.74024,45.5301],[14.74343,45.52568],[14.75239,45.52068],[14.76183,45.51444],[14.76891,45.51502],[14.77298,45.51369],[14.77363,45.51026],[14.7882,45.50911],[14.79239,45.50555],[14.79516,45.50609],[14.79864,45.50514],[14.80766,45.49592],[14.80725,45.49385],[14.80389,45.4912],[14.80796,45.48889],[14.80949,45.48475],[14.80996,45.47995],[14.82011,45.47205],[14.82058,45.46316],[14.83309,45.46353],[14.84553,45.46519],[14.86034,45.46974],[14.86689,45.46895],[14.87249,45.47437],[14.87904,45.4752],[14.88895,45.47917],[14.90252,45.47822],[14.90782,45.4814],[14.90776,45.48314],[14.90664,45.48736],[14.90735,45.4922],[14.91083,45.49401],[14.90718,45.49848],[14.90859,45.50377],[14.91184,45.50514],[14.90894,45.51097],[14.9093,45.51593],[14.91001,45.52055],[14.9162,45.52444],[14.91667,45.52845],[14.92157,45.53097],[14.93136,45.53217],[14.93561,45.53072],[14.94953,45.52378],[14.97395,45.51006],[14.98516,45.50063],[14.99253,45.49927],[15.00798,45.50055],[15.0143,45.5003],[15.01872,45.49811],[15.03046,45.48897],[15.04119,45.49067],[15.04639,45.49654],[15.057,45.49707],[15.06078,45.49352],[15.06255,45.49033],[15.07258,45.49062],[15.0793,45.48541],[15.08738,45.48583],[15.09116,45.48368],[15.09181,45.47995],[15.08809,45.47689],[15.0888,45.46924],[15.09558,45.46622],[15.10443,45.46618],[15.11499,45.45819],[15.12679,45.44959],[15.14018,45.44719],[15.14525,45.44164],[15.15085,45.43249],[15.15846,45.42765],[15.16778,45.42529],[15.17427,45.42633],[15.17775,45.42479],[15.18566,45.42951],[15.18453,45.43552],[15.18772,45.43759],[15.19142,45.43844],[15.19617,45.4385],[15.19971,45.43634],[15.2043,45.4303],[15.2073,45.42827],[15.22158,45.42864],[15.22412,45.43067],[15.22417,45.43742],[15.22972,45.44363],[15.23562,45.45042],[15.24152,45.45633],[15.25385,45.46101],[15.26429,45.46469],[15.26912,45.46833],[15.2749,45.46903],[15.27968,45.46845],[15.29767,45.46241],[15.32298,45.45819],[15.32782,45.45555],[15.33832,45.46006],[15.3438,45.45993],[15.34575,45.46585],[15.34976,45.46949],[15.35548,45.47822],[15.36156,45.48157],[15.37766,45.48781],[15.37459,45.48996],[15.36881,45.49261],[15.36144,45.49186],[15.35707,45.49472],[15.34622,45.50154],[15.33082,45.50724],[15.32298,45.51402],[15.32227,45.51824],[15.31484,45.51915],[15.31177,45.52105],[15.30941,45.52576],[15.30938,45.52971],[15.30487,45.52969],[15.29879,45.53386],[15.29661,45.53841],[15.29691,45.5425],[15.29431,45.54807],[15.29372,45.56947],[15.29396,45.58243],[15.27414,45.59903],[15.27225,45.6053],[15.28122,45.61198],[15.29372,45.61578],[15.30233,45.61603],[15.29738,45.62139],[15.2975,45.63162],[15.30363,45.63575],[15.33112,45.63806],[15.34044,45.63682],[15.34669,45.63806],[15.34103,45.63888],[15.33702,45.64309],[15.33702,45.6468],[15.34292,45.64903],[15.3553,45.6501],[15.37335,45.64845],[15.37831,45.64408],[15.38657,45.64292],[15.38916,45.64086],[15.39836,45.64787],[15.39176,45.65183],[15.38904,45.65604],[15.3881,45.659],[15.38338,45.66667],[15.37276,45.67566],[15.37005,45.67912],[15.36734,45.68233],[15.36639,45.67516],[15.352,45.66585],[15.34575,45.66692],[15.34327,45.67129],[15.34598,45.6858],[15.35778,45.69124],[15.35896,45.69321],[15.35212,45.69791],[15.35424,45.7101],[15.34315,45.7087],[15.33808,45.70195],[15.329,45.69445],[15.32392,45.69404],[15.33136,45.67368],[15.32451,45.67005],[15.31413,45.67211],[15.31071,45.67714],[15.30387,45.6844],[15.29938,45.6825],[15.28287,45.69041],[15.28263,45.70409],[15.28004,45.70483],[15.27296,45.70112],[15.27308,45.69297],[15.26859,45.69132],[15.26437,45.69142],[15.25461,45.69799],[15.25213,45.70458],[15.25042,45.70792],[15.24647,45.71076],[15.24724,45.71377],[15.24541,45.71525],[15.24087,45.71579],[15.2401,45.71772],[15.23532,45.719],[15.23367,45.72238],[15.23656,45.72608],[15.25379,45.73028],[15.25904,45.72921],[15.2703,45.73807],[15.27042,45.74132],[15.27933,45.74696],[15.29059,45.74963],[15.29278,45.75428],[15.29903,45.7577],[15.30723,45.7584],[15.31643,45.76297],[15.3228,45.76309],[15.32982,45.76597],[15.3533,45.77655],[15.36197,45.77959],[15.36775,45.77963],[15.3725,45.78229],[15.37772,45.78234],[15.3804,45.78186],[15.38204,45.78291],[15.38291,45.7856],[15.39323,45.79224],[15.39851,45.79415],[15.40482,45.79528],[15.41276,45.79759],[15.4168,45.7975],[15.42025,45.79874],[15.44906,45.79833],[15.46384,45.79761],[15.47062,45.79902],[15.46703,45.80238],[15.4662,45.81097],[15.4626,45.81716],[15.46272,45.82041],[15.4662,45.82215],[15.47278,45.82067],[15.47455,45.82141],[15.47387,45.82458],[15.47602,45.82937],[15.48071,45.83111],[15.49316,45.83504],[15.49738,45.83374],[15.49897,45.83202],[15.50569,45.83101],[15.50729,45.8291],[15.50661,45.82499],[15.51015,45.82458],[15.5131,45.82577],[15.51914,45.82501],[15.52513,45.82641],[15.53144,45.83115],[15.5315,45.83329],[15.53536,45.83666],[15.53445,45.84085],[15.53438,45.84594],[15.53477,45.8477],[15.5364,45.85015],[15.53989,45.85055],[15.54429,45.84863],[15.55131,45.84846],[15.55369,45.84675],[15.55563,45.84103],[15.55871,45.83936],[15.55824,45.84189],[15.5599,45.8459],[15.56453,45.8489],[15.56666,45.85054],[15.56722,45.85191],[15.56902,45.85535],[15.57099,45.85595],[15.57316,45.85585],[15.57674,45.85445],[15.58208,45.8507],[15.58645,45.84938],[15.59155,45.84904],[15.5936,45.84878],[15.59706,45.84726],[15.60159,45.84556],[15.6061,45.84455],[15.61125,45.84251],[15.61172,45.84169],[15.61175,45.8384],[15.61794,45.83844],[15.62135,45.83665],[15.62662,45.83504],[15.6301,45.83508],[15.6328,45.8345],[15.63617,45.83193],[15.63715,45.8304],[15.63749,45.82716],[15.63986,45.82649],[15.64191,45.82462],[15.64389,45.82588],[15.64679,45.83072],[15.64819,45.83258],[15.65461,45.83693],[15.65905,45.83958],[15.66213,45.84285],[15.66478,45.84397],[15.66841,45.84418],[15.67124,45.84315],[15.67615,45.84369],[15.67829,45.84494],[15.68003,45.84534],[15.68771,45.84555],[15.69097,45.84555],[15.69081,45.84835],[15.69212,45.84996],[15.69403,45.85136],[15.69633,45.85186],[15.69817,45.85137],[15.69404,45.8549],[15.68885,45.85909],[15.68248,45.86067],[15.67953,45.86276],[15.67553,45.86715],[15.67431,45.86884],[15.67484,45.87033],[15.67659,45.87161],[15.67733,45.87335],[15.67618,45.87521],[15.67599,45.87739],[15.6773,45.87991],[15.67782,45.88346],[15.67984,45.88498],[15.68217,45.88501],[15.67997,45.8865],[15.67935,45.88766],[15.6767,45.88933],[15.67639,45.89149],[15.67723,45.89276],[15.67885,45.89367],[15.67887,45.8942],[15.67718,45.89569],[15.67698,45.89707],[15.67789,45.89907],[15.67649,45.90062],[15.67639,45.90182],[15.67547,45.90472],[15.6763,45.90599],[15.67991,45.90833],[15.68067,45.9085],[15.68251,45.91063],[15.68561,45.91093],[15.68793,45.91095],[15.68787,45.91501],[15.68927,45.91582],[15.69103,45.9161],[15.69245,45.91687],[15.69442,45.9174],[15.69554,45.91715],[15.69563,45.91873],[15.69681,45.92187],[15.7023,45.92368],[15.70256,45.92448],[15.70003,45.92579],[15.69988,45.92749],[15.70156,45.92934],[15.70171,45.93176],[15.7041,45.93322],[15.70463,45.93664],[15.70401,45.93896],[15.70548,45.94101],[15.70531,45.94214],[15.70501,45.94349],[15.70525,45.94534],[15.70404,45.94866],[15.70534,45.95092],[15.70563,45.95752],[15.70575,45.96322],[15.69991,45.98064],[15.69625,45.98753],[15.69643,45.99138],[15.69779,45.99196],[15.69619,45.994],[15.69584,45.99749],[15.6982,46.00261],[15.70327,46.00413],[15.70817,46.00667],[15.7074,46.00974],[15.70663,46.01093],[15.70374,46.01162],[15.70233,46.01339],[15.70209,46.01601],[15.70292,46.01818],[15.70793,46.02027],[15.70947,46.02232],[15.70947,46.02498],[15.71247,46.03038],[15.71194,46.03599],[15.71584,46.04017],[15.71902,46.04083],[15.71991,46.04345],[15.72315,46.04492],[15.72545,46.04492],[15.72026,46.04635],[15.7189,46.04844],[15.7189,46.04992],[15.71265,46.05536],[15.70274,46.05675],[15.68923,46.06003],[15.68103,46.06428],[15.67354,46.06772],[15.66812,46.06903],[15.66015,46.06719],[15.65596,46.06903],[15.65343,46.07112],[15.65213,46.07496],[15.65408,46.07852],[15.64594,46.08053],[15.64417,46.08213],[15.63726,46.07996],[15.63054,46.08057],[15.62323,46.08368],[15.61497,46.08994],[15.61432,46.09235],[15.61556,46.09423],[15.61886,46.09522],[15.61951,46.09677],[15.61373,46.09653],[15.6106,46.09845],[15.60748,46.10508],[15.60743,46.10826],[15.60466,46.10824],[15.6009,46.1108],[15.60143,46.11691],[15.60352,46.12515],[15.60677,46.13378],[15.60069,46.13729],[15.5922,46.14346],[15.59179,46.14731],[15.5945,46.15025],[15.60181,46.15303],[15.60789,46.15495],[15.6073,46.15666],[15.59928,46.15907],[15.59963,46.1632],[15.60317,46.1659],[15.60411,46.1688],[15.61432,46.1746],[15.62305,46.17615],[15.62671,46.17872],[15.63284,46.18252],[15.63178,46.18599],[15.63349,46.18791],[15.64192,46.19008],[15.6444,46.19281],[15.64251,46.19967],[15.64263,46.20351],[15.63833,46.20478],[15.63709,46.20743],[15.63844,46.21388],[15.64198,46.2158],[15.64329,46.21654],[15.64456,46.21655],[15.64451,46.21888],[15.64602,46.21958],[15.64847,46.21976],[15.65007,46.22006],[15.65216,46.22133],[15.65511,46.22198],[15.65664,46.22198],[15.66065,46.22327],[15.66505,46.22522],[15.66756,46.22561],[15.67045,46.22835],[15.67652,46.22955],[15.68242,46.22937],[15.68587,46.22845],[15.68917,46.22678],[15.69602,46.22614],[15.70286,46.225],[15.70846,46.22578],[15.71359,46.22578],[15.71787,46.22496],[15.72642,46.2259],[15.73032,46.22504],[15.73229,46.2238],[15.73321,46.222],[15.74094,46.22431],[15.74742,46.2238],[15.75185,46.22261],[15.75592,46.2221],[15.75798,46.22027],[15.75916,46.21765],[15.75792,46.21445],[15.75497,46.21186],[15.75601,46.21035],[15.75778,46.2098],[15.76893,46.21269],[15.77774,46.21586],[15.7832,46.21908],[15.78556,46.22143],[15.78491,46.22365],[15.78957,46.22906],[15.78925,46.23608],[15.79181,46.23891],[15.79529,46.24004],[15.79694,46.24269],[15.79223,46.25019],[15.78916,46.25376],[15.78742,46.2588],[15.78813,46.26088],[15.79102,46.2621],[15.79715,46.26272],[15.80205,46.263],[15.81013,46.26465],[15.81974,46.26461],[15.82313,46.26416],[15.82974,46.26549],[15.83874,46.26855],[15.84753,46.26877],[15.85219,46.26902],[15.86154,46.27034],[15.86384,46.27207],[15.86392,46.27348],[15.86221,46.27554],[15.86336,46.27735],[15.86652,46.27874],[15.8703,46.2811],[15.87487,46.28251],[15.87755,46.2832],[15.88327,46.28261],[15.89486,46.28614],[15.89537,46.28936],[15.89668,46.29014],[15.91594,46.29024],[15.91596,46.29077],[15.91918,46.28974],[15.92608,46.29051],[15.92855,46.29127],[15.93006,46.29121],[15.93211,46.29242],[15.93459,46.29274],[15.93863,46.2925],[15.94279,46.29335],[15.94636,46.29647],[15.95326,46.29747],[15.95595,46.29896],[15.96043,46.29937],[15.96264,46.3004],[15.96668,46.30778],[15.9727,46.31224],[15.97386,46.31387],[15.97615,46.31511],[15.97807,46.31491],[15.9847,46.31391],[15.98618,46.31693],[15.98913,46.31725],[15.99284,46.31713],[16.00352,46.31114],[16.01013,46.3131],[16.01284,46.3133],[16.0165,46.31522],[16.01709,46.31636],[16.01614,46.31852],[16.01361,46.32063],[16.01408,46.32292],[16.02222,46.3285],[16.02405,46.33265],[16.02812,46.33546],[16.03525,46.33998],[16.03962,46.34051],[16.04546,46.34006],[16.04758,46.33868],[16.05189,46.33795],[16.05484,46.34104],[16.05879,46.3441],[16.06357,46.34499],[16.07131,46.3449],[16.0713,46.34703],[16.07116,46.36293],[16.0691,46.3629],[16.06271,46.36942],[16.05136,46.37687],[16.04534,46.38216],[16.0467,46.38488],[16.05625,46.39644],[16.08799,46.39139],[16.13842,46.40811],[16.1501,46.40762],[16.15883,46.40457],[16.17045,46.3957],[16.17765,46.392],[16.17818,46.38838],[16.17989,46.38822],[16.18679,46.39066],[16.19181,46.38907],[16.1947,46.38728],[16.19405,46.38224],[16.20266,46.38378],[16.20827,46.38732],[16.21788,46.38793],[16.22042,46.38598],[16.22484,46.39005],[16.23204,46.3905],[16.23888,46.38769],[16.24106,46.38236],[16.24985,46.38289],[16.26507,46.37886],[16.27191,46.3813],[16.29863,46.38102],[16.29963,46.3815]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-hok",name:"dgu.hr: HOK",type:"wms",template:"http://geoportal.dgu.hr/services/hok/ows?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=HOK5&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2009-01-01T00:00:00.000Z",startDate:"1954-01-01T00:00:00.000Z",polygon:[[[15.34155,45.63868],[15.34189,45.6658],[15.28409,45.66592],[15.28413,45.69284],[15.22636,45.69305],[15.22662,45.74698],[15.28451,45.74695],[15.2846,45.7739],[15.34236,45.77372],[15.34254,45.80068],[15.45841,45.80029],[15.45879,45.85439],[15.66157,45.85331],[15.66243,45.93435],[15.69152,45.93405],[15.6929,46.04211],[15.6638,46.04223],[15.66414,46.06921],[15.60599,46.06951],[15.60621,46.09654],[15.57707,46.09666],[15.57806,46.17763],[15.63625,46.17733],[15.63702,46.23139],[15.7828,46.23041],[15.78358,46.28441],[15.87117,46.28382],[15.8716,46.3108],[15.95914,46.31006],[15.95979,46.33703],[16.01811,46.33653],[16.01862,46.36357],[16.04789,46.36331],[16.04884,46.41724],[16.19531,46.41579],[16.19471,46.38889],[16.25311,46.38812],[16.25492,46.47124],[16.22578,46.47156],[16.22694,46.5235],[16.3147,46.52252],[16.31551,46.54945],[16.49498,46.54726],[16.49507,46.52025],[16.5285,46.52066],[16.52923,46.49372],[16.61721,46.49476],[16.61798,46.46787],[16.67639,46.46855],[16.67703,46.44152],[16.7063,46.44188],[16.70699,46.41487],[16.76552,46.41549],[16.76617,46.38853],[16.85389,46.38939],[16.85449,46.36248],[16.88367,46.36271],[16.88474,46.30879],[16.91401,46.30911],[16.91452,46.2821],[16.94362,46.28228],[16.94422,46.25534],[16.9734,46.25567],[16.97392,46.2286],[17.06134,46.22946],[17.0619,46.20241],[17.14931,46.20303],[17.14974,46.17606],[17.20798,46.17647],[17.20888,46.12257],[17.23786,46.1227],[17.23824,46.0957],[17.26734,46.09594],[17.2678,46.06891],[17.29669,46.06918],[17.29746,46.01514],[17.38458,46.01562],[17.38501,45.98861],[17.41389,45.98879],[17.41432,45.96183],[17.58847,45.96255],[17.58864,45.93557],[17.61761,45.93566],[17.61786,45.9087],[17.64683,45.90879],[17.647,45.88182],[17.67597,45.88185],[17.67619,45.85487],[17.76296,45.85505],[17.76318,45.82808],[17.85004,45.82823],[17.85012,45.80125],[18.05273,45.80131],[18.05268,45.77432],[18.11053,45.77426],[18.11058,45.80131],[18.25533,45.80104],[18.2552,45.77405],[18.39974,45.7736],[18.39961,45.74662],[18.42871,45.74656],[18.42879,45.77354],[18.45772,45.77333],[18.45793,45.80038],[18.54488,45.80014],[18.54509,45.82698],[18.57415,45.82689],[18.57436,45.85388],[18.60329,45.8537],[18.60354,45.88072],[18.63264,45.8806],[18.63316,45.93459],[18.72019,45.93399],[18.71984,45.90706],[18.80688,45.90643],[18.80726,45.93339],[18.83627,45.93318],[18.8355,45.87925],[18.86438,45.87904],[18.8631,45.79808],[18.89206,45.79793],[18.89172,45.77085],[18.97845,45.7701],[18.97609,45.60815],[18.94674,45.60836],[18.94635,45.58143],[19.06167,45.58044],[19.06145,45.55343],[19.08986,45.55325],[19.08952,45.52622],[19.1181,45.52595],[19.11716,45.47187],[19.00223,45.47295],[19.00167,45.44598],[19.05918,45.44556],[19.05823,45.39143],[19.00055,45.39197],[19.00014,45.36502],[19.08625,45.36421],[19.08573,45.33727],[19.11448,45.3371],[19.11397,45.31],[19.14267,45.30979],[19.14207,45.28274],[19.28549,45.28127],[19.28489,45.25415],[19.4568,45.25211],[19.45472,45.17123],[19.16856,45.17445],[19.16817,45.14748],[19.13939,45.14775],[19.13879,45.12072],[19.08165,45.12126],[19.08114,45.09439],[19.10975,45.09406],[19.10873,45.04013],[19.08016,45.04028],[19.07909,44.98637],[19.13611,44.98592],[19.13517,44.93186],[19.10656,44.9321],[19.10609,44.90514],[18.99209,44.90614],[18.99124,44.85213],[18.79191,44.85367],[18.79234,44.8808],[18.73541,44.88107],[18.73651,44.96209],[18.76496,44.96185],[18.76538,44.98887],[18.70828,44.98926],[18.70866,45.0163],[18.68009,45.01642],[18.6803,45.04344],[18.42323,45.04465],[18.42374,45.09866],[18.2236,45.09923],[18.22349,45.07223],[18.08061,45.07241],[18.08057,45.09944],[18.02342,45.09938],[18.02346,45.12646],[17.99489,45.12649],[17.99502,45.0995],[17.9377,45.09947],[17.93774,45.04546],[17.88064,45.04546],[17.88077,45.01844],[17.82362,45.01831],[17.82354,45.04528],[17.76635,45.04519],[17.76626,45.0722],[17.70911,45.07196],[17.70894,45.09908],[17.42317,45.09794],[17.42287,45.12498],[17.30845,45.12429],[17.3082,45.1513],[17.27945,45.15115],[17.27988,45.1242],[17.16546,45.12342],[17.16503,45.15034],[17.10789,45.14992],[17.10755,45.17694],[17.05014,45.17634],[17.04972,45.20347],[16.93521,45.20239],[16.93428,45.25649],[16.90553,45.25619],[16.9066,45.20233],[16.84932,45.20161],[16.84996,45.17466],[16.67818,45.1727],[16.6775,45.19975],[16.49516,45.19753],[16.49495,45.17051],[16.48371,45.17063],[16.48239,45.11675],[16.42516,45.11744],[16.42384,45.06345],[16.39526,45.06375],[16.39462,45.03685],[16.36605,45.03715],[16.36473,44.98321],[16.25065,44.98453],[16.2512,45.01145],[16.16557,45.01229],[16.16668,45.06634],[16.10953,45.06691],[16.11017,45.0925],[16.10689,45.094],[16.08143,45.09424],[16.08202,45.12129],[16.05341,45.12147],[16.05405,45.14847],[16.02539,45.1488],[16.02581,45.17571],[15.99724,45.17598],[15.99775,45.20305],[15.79723,45.20455],[15.79531,45.06961],[15.76665,45.06979],[15.7664,45.04278],[15.79489,45.04263],[15.79382,44.96167],[15.76529,44.9618],[15.76423,44.88077],[15.79271,44.88062],[15.79199,44.82667],[15.76355,44.82685],[15.7632,44.79982],[15.79156,44.79967],[15.79088,44.74562],[15.87618,44.74498],[15.87656,44.77185],[15.9049,44.77176],[15.90449,44.74477],[15.93273,44.74465],[15.93243,44.71754],[15.98923,44.71706],[15.98885,44.69012],[16.01713,44.68985],[16.01679,44.66278],[16.0451,44.6626],[16.04459,44.6356],[16.07287,44.6353],[16.07197,44.5814],[16.01525,44.58182],[16.01483,44.55486],[16.12797,44.55379],[16.12712,44.49979],[16.15522,44.49954],[16.15429,44.44558],[16.1826,44.44527],[16.1815,44.39122],[16.20964,44.39101],[16.20905,44.36395],[16.23741,44.36368],[16.23673,44.33664],[16.20858,44.33691],[16.207,44.25603],[16.2349,44.25572],[16.23396,44.20168],[16.29013,44.20104],[16.2897,44.17414],[16.31772,44.17379],[16.31663,44.11979],[16.37272,44.11914],[16.37225,44.09218],[16.45636,44.09113],[16.4552,44.0371],[16.5352,44.0371],[16.53597,44.0101],[16.56391,44.01041],[16.56528,43.95653],[16.62128,43.95714],[16.6218,43.93011],[16.62798,43.93014],[16.62875,43.90327],[16.67858,43.90383],[16.67918,43.87683],[16.7351,43.87739],[16.73686,43.79647],[16.76479,43.79672],[16.76535,43.76982],[16.82123,43.77041],[16.82174,43.74335],[16.84959,43.74366],[16.85019,43.71671],[16.90603,43.71718],[16.90646,43.69013],[16.93431,43.69047],[16.93508,43.66353],[16.96272,43.66368],[16.96323,43.63673],[16.99104,43.63698],[16.99169,43.60998],[17.01932,43.61026],[17.01993,43.58328],[17.04773,43.58347],[17.04829,43.55648],[17.10378,43.55688],[17.10421,43.52991],[17.15987,43.53038],[17.1603,43.50337],[17.27149,43.50415],[17.27192,43.47709],[17.29969,43.47728],[17.30055,43.39625],[17.27283,43.39607],[17.27325,43.36912],[17.30093,43.36928],[17.30149,43.31522],[17.3293,43.31544],[17.32995,43.28845],[17.35728,43.28855],[17.35758,43.26158],[17.44067,43.26202],[17.44148,43.18102],[17.4968,43.18121],[17.49706,43.15426],[17.58006,43.15454],[17.58023,43.12755],[17.60782,43.12758],[17.60808,43.1007],[17.66331,43.10079],[17.66361,43.04688],[17.69116,43.04688],[17.69142,43.01974],[17.71897,43.01993],[17.71927,42.93889],[17.77442,42.93902],[17.77459,42.91203],[17.80223,42.91215],[17.80197,42.93911],[17.82952,42.93918],[17.82969,42.91221],[17.88476,42.91221],[17.88488,42.85819],[17.91248,42.85826],[17.91248,42.8312],[17.93999,42.83116],[17.9399,42.80422],[17.995,42.80428],[17.995,42.77726],[18.05002,42.77716],[18.05002,42.75023],[18.105,42.75023],[18.105,42.72318],[18.13229,42.72309],[18.13233,42.69616],[18.1598,42.69619],[18.15976,42.66906],[18.21456,42.66899],[18.21443,42.64201],[18.24203,42.64191],[18.2419,42.61495],[18.26928,42.61489],[18.26941,42.64185],[18.37913,42.64156],[18.37897,42.61457],[18.40648,42.61444],[18.40635,42.58753],[18.46111,42.58718],[18.46025,42.47925],[18.48763,42.47909],[18.48746,42.45215],[18.54218,42.45187],[18.54149,42.37078],[18.51411,42.37097],[18.51424,42.39792],[16.48009,42.74046],[15.71251,42.99134],[13.71386,44.87631],[13.59592,45.03763],[13.56502,45.11763],[13.56067,45.30623],[13.53207,45.30586],[13.52983,45.38682],[13.50211,45.38736],[13.49885,45.46741],[13.47018,45.46705],[13.46956,45.49407],[13.49675,45.49442],[13.49658,45.49889],[13.49816,45.49892],[13.49761,45.52141],[13.55507,45.52207],[13.5558,45.49522],[13.61331,45.49597],[13.61403,45.46895],[13.84428,45.47145],[13.84488,45.44442],[13.90234,45.44505],[13.90182,45.47205],[13.98808,45.47289],[13.98757,45.49985],[14.10275,45.50081],[14.10305,45.47379],[14.33334,45.47533],[14.33308,45.50232],[14.39059,45.50268],[14.39042,45.52959],[14.44797,45.52995],[14.44771,45.55697],[14.47642,45.55712],[14.47625,45.58419],[14.50504,45.58422],[14.50487,45.61128],[14.53375,45.61137],[14.53354,45.63832],[14.56229,45.63844],[14.56186,45.69242],[14.59074,45.69257],[14.59109,45.66553],[14.61984,45.66568],[14.62014,45.63868],[14.64885,45.63871],[14.6492,45.61173],[14.70683,45.61194],[14.70713,45.5579],[14.7358,45.55793],[14.73601,45.531],[14.79378,45.53112],[14.79382,45.50415],[14.82236,45.50421],[14.82262,45.47717],[14.88004,45.47735],[14.88008,45.5043],[15.11036,45.50421],[15.11028,45.47735],[15.1392,45.4772],[15.13899,45.45029],[15.22533,45.45011],[15.22593,45.47704],[15.34056,45.47674],[15.34073,45.50379],[15.28314,45.50394],[15.28391,45.63895],[15.34155,45.63868]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-topo-25",name:"dgu.hr: Topo 25",type:"wms",template:"http://geoportal.dgu.hr/services/tk/ows?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=tk:TK25&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2011-01-01T00:00:00.000Z",startDate:"1996-01-01T00:00:00.000Z",polygon:[[[16.245,46.6248],[16.49546,46.62492],[16.49503,46.50016],[16.87019,46.49981],[16.86968,46.375],[16.99482,46.375],[16.99448,46.25003],[17.24459,46.25015],[17.24476,46.12501],[17.3699,46.12489],[17.37007,46.00018],[17.74498,45.99994],[17.74481,45.87483],[18.61994,45.87507],[18.61959,46.00018],[18.99485,45.99982],[18.99485,45.62499],[19.1199,45.62496],[19.11982,45.37476],[19.36984,45.37494],[19.3701,45.25012],[19.49507,45.25],[19.49524,45.12502],[19.12016,45.12466],[19.11982,44.99989],[19.24444,45.00013],[19.24496,44.87509],[19.11982,44.87485],[19.11982,44.75015],[18.74474,44.74978],[18.74508,44.9903],[18.72568,44.9903],[18.72568,44.99977],[17.37007,44.99965],[17.37024,45.12514],[16.49528,45.1249],[16.49546,45.00001],[16.31693,45.00013],[16.31676,44.99491],[16.28483,44.99491],[16.28534,44.99977],[15.99524,45.00013],[15.99506,45.12514],[15.87009,45.12502],[15.87044,44.75015],[16.1202,44.75015],[16.11986,44.51671],[16.1257,44.51646],[16.12553,44.50006],[16.245,44.49993],[16.24517,44.25012],[16.37014,44.25012],[16.3698,44.12506],[16.62043,44.1253],[16.62077,44.00035],[16.74488,43.99998],[16.7454,43.87587],[16.87054,43.87538],[16.87019,43.75039],[16.99482,43.75002],[16.99533,43.62551],[17.24493,43.62489],[17.24527,43.50013],[17.36973,43.50001],[17.37024,43.24995],[17.61967,43.25008],[17.62018,43.12517],[17.74498,43.12529],[17.74498,43.00038],[17.87012,43.00025],[17.86995,42.87546],[18.11989,42.87559],[18.12006,42.75016],[18.24503,42.75016],[18.2452,42.62512],[18.49462,42.62537],[18.49514,42.50058],[18.61994,42.50033],[18.62011,42.37491],[18.37017,42.37529],[18.37017,42.48919],[18.34528,42.48931],[18.34528,42.50045],[18.12023,42.50007],[18.12006,42.61817],[18.11079,42.6183],[18.11062,42.62512],[17.49487,42.62487],[17.49453,42.73831],[17.43324,42.73806],[17.43324,42.74991],[17.2451,42.75016],[17.2451,42.87521],[16.99516,42.87508],[16.99516,42.83368],[17.17043,42.83343],[17.17026,42.75016],[16.95345,42.75016],[16.95345,42.66716],[16.77887,42.66716],[16.77835,42.75016],[16.72832,42.7502],[16.72829,42.74769],[16.70636,42.74775],[16.70628,42.75026],[16.62008,42.75029],[16.62008,42.97947],[16.60605,42.9795],[16.60601,42.99109],[16.62013,42.99137],[16.61991,43.12523],[16.36989,43.12504],[16.36989,43.00006],[16.12003,43.00038],[16.12038,42.95831],[16.01266,42.95824],[16.0124,42.9502],[15.99515,42.95008],[15.99524,43.08356],[16.1202,43.08356],[16.1202,43.12529],[16.24552,43.12492],[16.24466,43.37486],[15.99524,43.37511],[15.99524,43.48902],[15.99309,43.48911],[15.99313,43.49558],[15.99524,43.49558],[15.99524,43.49848],[15.9827,43.49854],[15.98266,43.49042],[15.95648,43.49032],[15.95657,43.50007],[15.87018,43.50007],[15.87018,43.62508],[15.74555,43.62483],[15.74547,43.61949],[15.62011,43.61936],[15.62024,43.62085],[15.49544,43.62085],[15.49527,43.62508],[15.3703,43.62502],[15.37028,43.74428],[15.35541,43.74433],[15.35537,43.74996],[15.12019,43.74996],[15.12011,43.87507],[14.99539,43.87507],[14.99522,44.00004],[14.87051,44.00004],[14.87025,44.12487],[14.7452,44.12493],[14.74545,44.24557],[14.7331,44.24557],[14.73292,44.24999],[14.49543,44.24993],[14.49552,44.4913],[14.48419,44.49987],[14.31004,44.49987],[14.31004,44.49706],[14.29871,44.49709],[14.29871,44.49999],[14.24549,44.50006],[14.24515,44.61552],[14.22884,44.61577],[14.22884,44.62493],[14.12035,44.62444],[14.12052,44.7499],[14.24532,44.75003],[14.24515,44.87497],[14.00448,44.87497],[14.00499,44.7995],[13.99555,44.79938],[13.99538,44.75015],[13.74544,44.74978],[13.74561,44.87497],[13.62064,44.87509],[13.62039,45.04157],[13.60382,45.04139],[13.60391,45.12478],[13.4955,45.12478],[13.49567,45.46519],[13.48675,45.46519],[13.4864,45.49648],[13.49533,45.49648],[13.49516,45.50683],[13.53807,45.50719],[13.53807,45.49997],[13.87041,45.49985],[13.87058,45.62472],[14.11983,45.62472],[14.12052,45.49997],[14.20618,45.50033],[14.20618,45.5096],[14.27708,45.50996],[14.27725,45.50021],[14.36995,45.50009],[14.37012,45.62484],[14.49526,45.62472],[14.4956,45.7498],[14.62023,45.74992],[14.6204,45.62496],[14.99514,45.62484],[14.99548,45.50009],[15.24508,45.49997],[15.24525,45.71649],[15.23701,45.71661],[15.23701,45.72524],[15.24542,45.72524],[15.24559,45.87483],[15.61998,45.87507],[15.61981,45.9997],[15.49519,45.99947],[15.49484,46.25003],[15.74512,46.24979],[15.7453,46.37489],[15.99472,46.37512],[15.99472,46.49993],[16.24517,46.49981],[16.245,46.6248]],[[15.68264,42.95868],[15.80795,42.95818],[15.80761,43.08318],[15.68264,43.08368],[15.68264,42.95868]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-topo-25-new",name:"dgu.hr: Topo 25 new",type:"wms",template:"http://geoportal.dgu.hr/services/tk/ows?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=tk:TK25_NOVI&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[16.49987,42.70991],[17.04993,42.70902],[17.04963,42.7443],[17.17218,42.74374],[17.17218,42.77966],[17.04993,42.78022],[17.05023,42.79823],[17.00138,42.79873],[17.00138,42.82574],[16.96479,42.82585],[16.96456,42.79895],[16.49941,42.79968],[16.49987,42.7711],[16.4826,42.7711],[16.4826,42.74363],[16.50002,42.74363],[16.49987,42.70991]],[[13.42719,45.54859],[13.61807,45.55389],[13.62292,45.46386],[13.76198,45.4671],[13.76191,45.46936],[13.77081,45.46955],[13.77088,45.46742],[14.58109,45.48389],[14.58723,45.30405],[14.77841,45.30701],[14.78114,45.21712],[14.97186,45.21981],[14.97694,45.03983],[14.78659,45.03716],[14.78924,44.94727],[14.5992,44.94406],[14.6051,44.76444],[14.2263,44.75745],[14.21941,44.93719],[14.05163,44.93381],[14.05277,44.91124],[14.03103,44.91065],[14.03717,44.75352],[13.8478,44.74922],[13.845,44.81933],[13.82273,44.8189],[13.82175,44.83856],[13.65443,44.83453],[13.64534,45.01441],[13.45529,45.00943],[13.42719,45.54859]],[[15.44375,43.10094],[15.48034,43.10133],[15.48064,43.08341],[15.44383,43.08352],[15.44375,43.10094]],[[15.72242,46.21722],[15.91671,46.21827],[15.91962,45.94844],[15.7261,45.94721],[15.72242,46.21722]],[[15.57866,43.0662],[15.58047,42.97671],[15.76423,42.97704],[15.76438,42.99522],[15.81316,42.99588],[15.81347,43.01328],[15.7715,43.0135],[15.77181,43.04041],[15.76363,43.04041],[15.76393,43.06764],[15.57866,43.0662]],[[16.3049,46.48965],[16.49957,46.48986],[16.49972,46.39978],[16.30505,46.39967],[16.3049,46.48965]],[[15.53442,45.85567],[16.30679,45.85976],[16.30619,46.03979],[16.50032,46.04037],[16.49998,46.12978],[16.69404,46.12965],[16.6944,46.21962],[16.88874,46.21911],[16.88837,46.12915],[17.27626,46.12721],[17.27514,46.03719],[17.0814,46.0383],[17.08045,45.94841],[17.27391,45.94717],[17.27268,45.85726],[17.46569,45.8558],[17.46429,45.76578],[17.84972,45.762],[17.84113,45.40218],[18.03272,45.39968],[18.03778,45.57956],[18.22977,45.57683],[18.22707,45.48686],[18.41895,45.48394],[18.42194,45.57372],[18.806,45.56667],[18.7986,45.38682],[19.18132,45.37853],[19.17731,45.28839],[18.98605,45.29292],[18.97825,45.11311],[18.78775,45.11707],[18.78419,45.02731],[18.59384,45.03073],[18.60395,45.30056],[18.22152,45.30697],[18.22428,45.39693],[18.03286,45.39964],[18.02795,45.21976],[18.21887,45.2172],[18.21341,45.03721],[17.4521,45.04599],[17.45339,45.12428],[17.44581,45.12431],[17.44577,45.13107],[17.45339,45.13107],[17.45346,45.13599],[17.42309,45.13617],[17.42309,45.13131],[17.35944,45.13181],[17.35954,45.13676],[16.49994,45.13997],[16.50032,44.96003],[16.11978,44.95936],[16.11914,45.04937],[15.92881,45.04857],[15.92784,45.13855],[15.54639,45.13604],[15.54942,44.95604],[15.7395,44.95747],[15.74304,44.68753],[15.93235,44.68862],[15.93144,44.7785],[16.12088,44.77934],[16.1258,44.50938],[16.31126,44.50983],[16.3125,44.14984],[16.49991,44.14998],[16.50002,44.06],[16.68726,44.05983],[16.68669,43.87982],[16.87325,43.87936],[16.87221,43.70925],[16.87842,43.70922],[16.87837,43.69932],[17.05822,43.6986],[17.05747,43.6086],[17.24319,43.6075],[17.24217,43.51755],[17.42761,43.51622],[17.4236,43.24615],[17.60821,43.24448],[17.60668,43.15452],[17.791,43.15255],[17.78723,42.97258],[17.9711,42.97037],[17.96681,42.79042],[18.15005,42.78789],[18.14778,42.69789],[18.3307,42.6951],[18.32853,42.62021],[18.37964,42.61937],[18.37926,42.60432],[18.51071,42.60206],[18.50551,42.43715],[18.55404,42.43625],[18.55355,42.42127],[18.68705,42.41881],[18.68394,42.32883],[18.50215,42.33212],[18.50454,42.40708],[18.48025,42.40746],[18.48072,42.42256],[18.32286,42.42516],[18.32527,42.5084],[18.31006,42.50865],[18.31025,42.51538],[18.14308,42.51789],[18.14539,42.60794],[17.59706,42.61447],[17.59861,42.70448],[17.23248,42.7074],[17.23346,42.79734],[17.33863,42.79667],[17.33875,42.80837],[17.40722,42.80784],[17.40714,42.7962],[17.41691,42.79617],[17.41813,42.88612],[16.50006,42.88987],[16.49994,43.06991],[16.31585,43.06971],[16.31611,42.97987],[16.13228,42.9792],[16.13273,42.88914],[15.94913,42.88859],[15.94746,43.07965],[16.13152,43.08075],[16.13114,43.15921],[16.31573,43.15987],[16.31543,43.16694],[16.30505,43.167],[16.30498,43.17777],[16.31558,43.17788],[16.31497,43.33975],[16.13008,43.33926],[16.12955,43.41313],[16.11724,43.41305],[16.11717,43.42569],[16.10607,43.42567],[16.106,43.42923],[15.9442,43.42857],[15.94344,43.5087],[15.91625,43.50859],[15.91618,43.51839],[15.75789,43.51755],[15.75673,43.60747],[15.3852,43.6044],[15.38335,43.69456],[15.19751,43.69259],[15.19372,43.8618],[15.17509,43.86158],[15.17463,43.87207],[15.00701,43.87026],[15.00481,43.96046],[15.37823,43.9646],[15.37687,44.05438],[15.18963,44.05242],[15.18357,44.32247],[14.99572,44.32011],[14.98633,44.67999],[15.17548,44.68236],[15.16299,45.22216],[15.35396,45.22424],[15.35218,45.31423],[15.5434,45.31596],[15.53442,45.85567]],[[16.23264,42.36768],[16.35459,42.36858],[16.35413,42.4036],[16.23218,42.40349],[16.23264,42.36768]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"drone-imagery-2014",name:"Drone Imagery 2014 (Haiti)",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/haiti_2014/{zoom}/{x}/{y}",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",polygon:[[[-72.3286,18.69461],[-72.33034,18.69412],[-72.33117,18.69284],[-72.33413,18.68542],[-72.33452,18.68414],[-72.33443,18.68355],[-72.33375,18.68235],[-72.32147,18.67721],[-72.32027,18.67698],[-72.31909,18.67713],[-72.3183,18.67804],[-72.31508,18.68457],[-72.31394,18.689],[-72.31553,18.68993],[-72.3286,18.69461]],[[-72.34695,18.61833],[-72.34553,18.62166],[-72.34355,18.62447],[-72.34245,18.62553],[-72.34076,18.62658],[-72.33786,18.62639],[-72.33649,18.62597],[-72.33589,18.62504],[-72.33482,18.62559],[-72.33472,18.6255],[-72.33459,18.62513],[-72.33343,18.62438],[-72.33174,18.62469],[-72.3313,18.62457],[-72.33126,18.62321],[-72.33088,18.62276],[-72.33066,18.62277],[-72.32985,18.62345],[-72.32862,18.62186],[-72.32829,18.6218],[-72.32817,18.62193],[-72.32809,18.6218],[-72.32734,18.62261],[-72.32541,18.62101],[-72.32422,18.62122],[-72.32396,18.61869],[-72.32354,18.61815],[-72.32325,18.61818],[-72.32351,18.61877],[-72.32058,18.62031],[-72.32043,18.61993],[-72.31978,18.62066],[-72.31807,18.61907],[-72.31742,18.61958],[-72.31523,18.61782],[-72.31463,18.61844],[-72.31324,18.6165],[-72.31275,18.61677],[-72.31232,18.6172],[-72.31198,18.61704],[-72.31042,18.61764],[-72.31062,18.61564],[-72.30996,18.61526],[-72.30936,18.61623],[-72.30786,18.61542],[-72.30669,18.61623],[-72.30604,18.61704],[-72.30419,18.61545],[-72.30288,18.61688],[-72.30191,18.61637],[-72.30131,18.61552],[-72.30118,18.6158],[-72.30087,18.61546],[-72.30076,18.61567],[-72.30062,18.6156],[-72.30012,18.61609],[-72.29198,18.61365],[-72.29194,18.61347],[-72.29143,18.61342],[-72.29094,18.61323],[-72.29105,18.61199],[-72.29057,18.61152],[-72.28772,18.61145],[-72.28801,18.6096],[-72.2865,18.60968],[-72.28635,18.60799],[-72.28448,18.60844],[-72.28436,18.60789],[-72.283,18.60808],[-72.283,18.60658],[-72.2828,18.60676],[-72.2816,18.60537],[-72.28106,18.60533],[-72.27973,18.60682],[-72.27805,18.60525],[-72.27793,18.6053],[-72.2778,18.60524],[-72.2772,18.60638],[-72.27589,18.60564],[-72.27544,18.60629],[-72.27385,18.60508],[-72.27341,18.60508],[-72.27241,18.60593],[-72.27099,18.60442],[-72.27047,18.60429],[-72.27038,18.60446],[-72.27024,18.60427],[-72.27011,18.60433],[-72.26862,18.60368],[-72.26778,18.6037],[-72.26751,18.60429],[-72.2655,18.60318],[-72.26539,18.60336],[-72.26515,18.60309],[-72.26471,18.603],[-72.26436,18.60331],[-72.26312,18.60193],[-72.26258,18.60188],[-72.262,18.60251],[-72.26139,18.60184],[-72.26106,18.60182],[-72.26106,18.60148],[-72.26014,18.6005],[-72.25994,18.60049],[-72.25803,18.60079],[-72.2576,18.60054],[-72.25691,18.60094],[-72.25413,18.59992],[-72.25093,18.59739],[-72.25062,18.59676],[-72.25033,18.59701],[-72.24451,18.59231],[-72.24215,18.58872],[-72.24167,18.58756],[-72.24077,18.58654],[-72.24147,18.58592],[-72.2413,18.58543],[-72.2395,18.58424],[-72.24007,18.58358],[-72.2382,18.58197],[-72.23868,18.58157],[-72.2385,18.58119],[-72.23703,18.58054],[-72.23612,18.57894],[-72.23646,18.57825],[-72.23636,18.5777],[-72.23467,18.57684],[-72.2353,18.57562],[-72.235,18.57499],[-72.23335,18.57423],[-72.23399,18.57293],[-72.23182,18.57169],[-72.23188,18.57137],[-72.23175,18.57127],[-72.23198,18.5708],[-72.23072,18.5694],[-72.23097,18.56874],[-72.23082,18.56844],[-72.23046,18.56855],[-72.23009,18.56754],[-72.22942,18.56715],[-72.22972,18.56651],[-72.22961,18.566],[-72.22908,18.56612],[-72.22848,18.56396],[-72.22818,18.56395],[-72.22733,18.56421],[-72.2265,18.56179],[-72.22623,18.56191],[-72.22436,18.55908],[-72.22471,18.55882],[-72.22357,18.55689],[-72.22379,18.55675],[-72.22325,18.55579],[-72.22387,18.55544],[-72.22382,18.55528],[-72.22458,18.55483],[-72.22453,18.55439],[-72.22625,18.55408],[-72.22705,18.55349],[-72.22692,18.55333],[-72.2271,18.55324],[-72.22687,18.55273],[-72.22592,18.55308],[-72.22465,18.55027],[-72.22483,18.5501],[-72.22457,18.54956],[-72.22327,18.55014],[-72.22261,18.54869],[-72.2208,18.54918],[-72.22051,18.54852],[-72.22034,18.54865],[-72.2201,18.54845],[-72.21952,18.54876],[-72.21862,18.54755],[-72.2174,18.5478],[-72.21714,18.54733],[-72.21694,18.54734],[-72.21583,18.54517],[-72.21505,18.54533],[-72.21477,18.54494],[-72.21442,18.54218],[-72.21421,18.54233],[-72.21293,18.5401],[-72.21199,18.5404],[-72.21188,18.54025],[-72.21145,18.53781],[-72.21085,18.53797],[-72.21028,18.53545],[-72.20993,18.53465],[-72.20942,18.53478],[-72.20942,18.53456],[-72.20851,18.53472],[-72.2057,18.53039],[-72.20444,18.52693],[-72.20438,18.52643],[-72.20418,18.52637],[-72.20399,18.52572],[-72.20263,18.5222],[-72.20182,18.5197],[-72.20148,18.51742],[-72.20301,18.51606],[-72.20503,18.51506],[-72.20767,18.51432],[-72.20936,18.5142],[-72.2095,18.51448],[-72.21082,18.51416],[-72.21095,18.51444],[-72.21189,18.51412],[-72.21266,18.51403],[-72.21277,18.51417],[-72.21462,18.51393],[-72.21697,18.51569],[-72.21731,18.51648],[-72.21787,18.51642],[-72.21818,18.51975],[-72.21798,18.51984],[-72.21909,18.52189],[-72.22031,18.52152],[-72.22096,18.52382],[-72.22209,18.52355],[-72.22251,18.52685],[-72.22229,18.52693],[-72.22271,18.52726],[-72.22289,18.52707],[-72.2231,18.52722],[-72.22404,18.52681],[-72.22551,18.52936],[-72.22596,18.5297],[-72.22642,18.52964],[-72.2265,18.53018],[-72.2275,18.53118],[-72.22673,18.53171],[-72.22885,18.53383],[-72.22811,18.53435],[-72.22981,18.53623],[-72.22912,18.5367],[-72.22935,18.53731],[-72.23059,18.53875],[-72.23222,18.54189],[-72.23215,18.5421],[-72.23258,18.54324],[-72.23311,18.54304],[-72.2342,18.54558],[-72.23436,18.5455],[-72.23554,18.54776],[-72.23571,18.54779],[-72.23601,18.54899],[-72.23839,18.55165],[-72.23747,18.55231],[-72.23951,18.55397],[-72.23918,18.55413],[-72.2407,18.55661],[-72.24014,18.5568],[-72.24079,18.55824],[-72.24063,18.55835],[-72.24067,18.55845],[-72.24117,18.55815],[-72.24161,18.55898],[-72.24216,18.55882],[-72.24242,18.56062],[-72.24262,18.56101],[-72.24294,18.56089],[-72.24399,18.56371],[-72.24466,18.56356],[-72.24475,18.56413],[-72.24536,18.56445],[-72.2449,18.56525],[-72.24518,18.56549],[-72.245,18.56581],[-72.24499,18.56607],[-72.24543,18.56633],[-72.24559,18.56618],[-72.24588,18.56662],[-72.24687,18.56727],[-72.24662,18.56749],[-72.24781,18.56897],[-72.24728,18.56938],[-72.24859,18.57137],[-72.24894,18.57159],[-72.24865,18.57222],[-72.2488,18.57219],[-72.24885,18.5723],[-72.24945,18.57197],[-72.25068,18.57411],[-72.25147,18.5737],[-72.25251,18.57598],[-72.25339,18.57551],[-72.25491,18.57848],[-72.25462,18.57863],[-72.25467,18.57878],[-72.25505,18.57894],[-72.25495,18.57913],[-72.256,18.58074],[-72.2563,18.58054],[-72.25752,18.58237],[-72.25769,18.58227],[-72.2578,18.5824],[-72.25808,18.5823],[-72.25857,18.5821],[-72.25862,18.58222],[-72.25889,18.58219],[-72.25894,18.58302],[-72.25958,18.58445],[-72.25984,18.58472],[-72.26072,18.58443],[-72.26094,18.58565],[-72.2622,18.58722],[-72.26351,18.58643],[-72.2643,18.58738],[-72.26474,18.58708],[-72.26594,18.58862],[-72.26756,18.58877],[-72.26742,18.58917],[-72.27039,18.58893],[-72.27021,18.5903],[-72.2722,18.59048],[-72.27211,18.59145],[-72.27381,18.59188],[-72.27384,18.59168],[-72.27729,18.59169],[-72.28014,18.59129],[-72.28059,18.59048],[-72.28106,18.59071],[-72.28226,18.58989],[-72.28286,18.59047],[-72.28367,18.58966],[-72.28401,18.59014],[-72.28468,18.59029],[-72.2851,18.58997],[-72.2857,18.59062],[-72.28661,18.59068],[-72.28681,18.59014],[-72.28728,18.59032],[-72.28741,18.59013],[-72.28801,18.59052],[-72.28991,18.59071],[-72.29077,18.58997],[-72.29196,18.59186],[-72.2945,18.59148],[-72.29454,18.59361],[-72.29654,18.59322],[-72.29689,18.59586],[-72.2976,18.59675],[-72.29824,18.59722],[-72.29871,18.5962],[-72.30053,18.59733],[-72.30081,18.59675],[-72.30113,18.59691],[-72.30131,18.59676],[-72.30175,18.59721],[-72.30303,18.59774],[-72.3033,18.59729],[-72.30394,18.59761],[-72.30394,18.59736],[-72.30555,18.59794],[-72.30598,18.59756],[-72.30703,18.59838],[-72.30723,18.59799],[-72.30862,18.59833],[-72.30938,18.59752],[-72.31013,18.5981],[-72.31037,18.59739],[-72.3121,18.5983],[-72.3122,18.59807],[-72.31424,18.59902],[-72.31456,18.59873],[-72.31524,18.59922],[-72.31681,18.59952],[-72.31662,18.60004],[-72.31958,18.60072],[-72.31907,18.60202],[-72.32042,18.60247],[-72.32061,18.60242],[-72.32082,18.60267],[-72.3211,18.6027],[-72.32105,18.60298],[-72.32144,18.60347],[-72.32368,18.60322],[-72.32375,18.60432],[-72.32584,18.60436],[-72.32588,18.60522],[-72.32617,18.60585],[-72.32864,18.60525],[-72.32897,18.60527],[-72.32916,18.60727],[-72.33006,18.60812],[-72.3294,18.60867],[-72.33004,18.60959],[-72.33282,18.60949],[-72.33258,18.61058],[-72.33302,18.61005],[-72.3335,18.61054],[-72.33477,18.61035],[-72.33485,18.61167],[-72.33735,18.61174],[-72.33725,18.61237],[-72.33767,18.61298],[-72.34038,18.61306],[-72.34016,18.6138],[-72.34153,18.61384],[-72.34258,18.61457],[-72.3426,18.61512],[-72.34306,18.61499],[-72.34682,18.61792],[-72.34695,18.61833]],[[-72.72363,19.09461],[-72.72302,19.09518],[-72.72206,19.0965],[-72.72169,19.09612],[-72.72164,19.0962],[-72.72132,19.09609],[-72.72073,19.0967],[-72.7198,19.09587],[-72.71965,19.09591],[-72.7197,19.09601],[-72.71955,19.09602],[-72.71911,19.09623],[-72.71906,19.09627],[-72.71904,19.09625],[-72.71888,19.09631],[-72.71886,19.09626],[-72.71817,19.09643],[-72.71776,19.09679],[-72.71756,19.09657],[-72.71693,19.09705],[-72.71713,19.09735],[-72.71495,19.0988],[-72.71479,19.09852],[-72.71483,19.09849],[-72.7148,19.0984],[-72.71455,19.09859],[-72.71449,19.09851],[-72.71413,19.09877],[-72.71413,19.09893],[-72.71419,19.09891],[-72.71417,19.09978],[-72.71324,19.09971],[-72.71287,19.09974],[-72.71295,19.09967],[-72.71278,19.09968],[-72.71278,19.09977],[-72.71282,19.09976],[-72.71285,19.09988],[-72.71266,19.09989],[-72.71266,19.09987],[-72.71245,19.09987],[-72.71182,19.09991],[-72.71178,19.10012],[-72.71157,19.10009],[-72.71147,19.10102],[-72.71042,19.10086],[-72.71039,19.10119],[-72.7103,19.1012],[-72.71031,19.10151],[-72.7097,19.10156],[-72.7097,19.10162],[-72.70917,19.10169],[-72.70917,19.1021],[-72.70828,19.10211],[-72.70809,19.10289],[-72.70788,19.10284],[-72.70798,19.10367],[-72.70724,19.1038],[-72.70731,19.10501],[-72.70723,19.10501],[-72.70736,19.10565],[-72.70637,19.10584],[-72.7062,19.10714],[-72.70588,19.10706],[-72.70591,19.10747],[-72.7053,19.10757],[-72.7054,19.10813],[-72.70568,19.10809],[-72.70568,19.10928],[-72.70591,19.11013],[-72.70589,19.11022],[-72.70574,19.11025],[-72.70574,19.11116],[-72.70538,19.11114],[-72.70557,19.11247],[-72.70499,19.11256],[-72.70537,19.11361],[-72.7047,19.11388],[-72.70496,19.11563],[-72.70418,19.11564],[-72.70442,19.11762],[-72.70371,19.11764],[-72.70371,19.1178],[-72.70352,19.11779],[-72.70339,19.12227],[-72.70264,19.12205],[-72.70253,19.12301],[-72.70289,19.12592],[-72.70308,19.12595],[-72.70316,19.12864],[-72.70234,19.12997],[-72.70206,19.1301],[-72.69987,19.1305],[-72.69325,19.13064],[-72.687,19.13075],[-72.68456,19.13073],[-72.68338,19.13056],[-72.6828,19.1297],[-72.68203,19.1283],[-72.68201,19.12715],[-72.68158,19.12714],[-72.68187,19.12508],[-72.68185,19.12507],[-72.68215,19.12414],[-72.68253,19.12295],[-72.68265,19.12243],[-72.68263,19.12185],[-72.68302,19.12185],[-72.68301,19.12132],[-72.68286,19.12133],[-72.68293,19.11947],[-72.68251,19.11946],[-72.68256,19.11803],[-72.68265,19.11751],[-72.68265,19.11703],[-72.68318,19.11704],[-72.68319,19.11685],[-72.68371,19.11687],[-72.68384,19.11684],[-72.684,19.11685],[-72.68398,19.11689],[-72.68426,19.11688],[-72.68426,19.11679],[-72.68481,19.11674],[-72.68546,19.11667],[-72.68557,19.11664],[-72.68551,19.11664],[-72.6856,19.11662],[-72.68595,19.11658],[-72.68596,19.11654],[-72.68608,19.11654],[-72.68661,19.11663],[-72.68662,19.11656],[-72.68713,19.11665],[-72.68721,19.11666],[-72.68721,19.11663],[-72.6878,19.11666],[-72.68779,19.11659],[-72.68833,19.11663],[-72.68832,19.11658],[-72.68928,19.11657],[-72.6897,19.11656],[-72.68998,19.11644],[-72.6902,19.11644],[-72.69019,19.11615],[-72.69027,19.11563],[-72.69029,19.11541],[-72.69017,19.11543],[-72.69018,19.11493],[-72.69018,19.11458],[-72.69019,19.11445],[-72.69022,19.11433],[-72.6902,19.11406],[-72.68972,19.11398],[-72.68968,19.11397],[-72.68973,19.11415],[-72.68974,19.1142],[-72.68937,19.11417],[-72.68872,19.11412],[-72.688,19.11412],[-72.68758,19.11409],[-72.68759,19.11401],[-72.68736,19.11403],[-72.68711,19.11406],[-72.68682,19.11406],[-72.68677,19.11405],[-72.68591,19.11422],[-72.68554,19.11421],[-72.68557,19.11369],[-72.68554,19.11308],[-72.68533,19.11314],[-72.6852,19.11316],[-72.68519,19.1132],[-72.68504,19.11325],[-72.68495,19.1127],[-72.68474,19.11278],[-72.68468,19.11277],[-72.68446,19.11281],[-72.68416,19.1128],[-72.6836,19.11254],[-72.68353,19.11102],[-72.68363,19.11007],[-72.68338,19.11003],[-72.68344,19.10974],[-72.68295,19.1096],[-72.68305,19.10892],[-72.68111,19.10826],[-72.68112,19.1081],[-72.67965,19.10781],[-72.67968,19.10765],[-72.67923,19.10749],[-72.67916,19.10802],[-72.67838,19.10755],[-72.67779,19.10753],[-72.67775,19.10769],[-72.67623,19.10765],[-72.67606,19.10762],[-72.67621,19.10797],[-72.67549,19.10804],[-72.67548,19.1079],[-72.67431,19.10804],[-72.67432,19.10795],[-72.67398,19.10794],[-72.67382,19.10798],[-72.6739,19.10864],[-72.67319,19.10856],[-72.67307,19.10852],[-72.67284,19.10855],[-72.67276,19.10855],[-72.67286,19.10907],[-72.67284,19.10915],[-72.67251,19.10903],[-72.67236,19.10906],[-72.6723,19.10905],[-72.67224,19.10913],[-72.67179,19.10912],[-72.67051,19.10679],[-72.6704,19.10401],[-72.67048,19.10396],[-72.67032,19.10223],[-72.67034,19.1016],[-72.67062,19.09856],[-72.67121,19.09697],[-72.67278,19.09595],[-72.67277,19.09629],[-72.67364,19.09636],[-72.6736,19.09662],[-72.67484,19.09623],[-72.67489,19.09666],[-72.67566,19.09655],[-72.67566,19.09648],[-72.67655,19.09642],[-72.67772,19.09626],[-72.67786,19.09675],[-72.67784,19.09689],[-72.67826,19.09677],[-72.67837,19.09698],[-72.67858,19.09698],[-72.67853,19.09665],[-72.67878,19.09666],[-72.67861,19.09635],[-72.67927,19.09633],[-72.67973,19.0962],[-72.68015,19.09604],[-72.68058,19.09598],[-72.68029,19.09501],[-72.68072,19.095],[-72.68066,19.09474],[-72.68048,19.09418],[-72.68037,19.09335],[-72.68064,19.09335],[-72.68064,19.09266],[-72.67973,19.09263],[-72.67972,19.09269],[-72.67943,19.09266],[-72.67966,19.09132],[-72.67977,19.09107],[-72.68249,19.0892],[-72.68272,19.08907],[-72.68506,19.0888],[-72.68508,19.08888],[-72.68616,19.08873],[-72.6862,19.08887],[-72.68718,19.08866],[-72.68717,19.0886],[-72.68849,19.08844],[-72.68852,19.08847],[-72.69006,19.0884],[-72.69018,19.08871],[-72.69227,19.08828],[-72.69229,19.08887],[-72.69218,19.08924],[-72.69222,19.08928],[-72.69277,19.08923],[-72.69279,19.08933],[-72.69335,19.08934],[-72.69289,19.0888],[-72.69274,19.0883],[-72.69496,19.08857],[-72.69571,19.08831],[-72.69579,19.08892],[-72.69625,19.08904],[-72.69649,19.08889],[-72.69849,19.08845],[-72.69849,19.08866],[-72.6988,19.08858],[-72.69885,19.08895],[-72.69884,19.08903],[-72.69926,19.08895],[-72.70023,19.08884],[-72.70023,19.08893],[-72.70088,19.08892],[-72.7014,19.08887],[-72.70128,19.08828],[-72.70257,19.08859],[-72.70282,19.08874],[-72.70309,19.08883],[-72.70293,19.08855],[-72.70341,19.08862],[-72.70557,19.08863],[-72.70552,19.08906],[-72.70665,19.08889],[-72.70666,19.08938],[-72.70902,19.08917],[-72.70898,19.0891],[-72.71116,19.08894],[-72.71121,19.0892],[-72.71281,19.08912],[-72.71286,19.0898],[-72.71502,19.08882],[-72.71569,19.08838],[-72.71573,19.08847],[-72.7161,19.08824],[-72.71598,19.08795],[-72.71653,19.0877],[-72.71653,19.08761],[-72.71579,19.08781],[-72.71676,19.08727],[-72.71671,19.08717],[-72.71815,19.08638],[-72.71795,19.08602],[-72.71954,19.08518],[-72.71954,19.08511],[-72.72217,19.08467],[-72.72327,19.08506],[-72.72622,19.08712],[-72.72763,19.0891],[-72.72752,19.08973],[-72.72548,19.09295],[-72.72482,19.09403],[-72.72399,19.09495],[-72.72363,19.09461]],[[-72.06537,19.65239],[-72.06565,19.6518],[-72.06603,19.65128],[-72.06697,19.65109],[-72.0676,19.6511],[-72.07102,19.65223],[-72.0719,19.65254],[-72.07189,19.65255],[-72.07264,19.6528],[-72.07262,19.65284],[-72.07268,19.65286],[-72.07269,19.65283],[-72.0733,19.65305],[-72.07393,19.65327],[-72.07416,19.65347],[-72.07418,19.65351],[-72.07435,19.65395],[-72.07432,19.65425],[-72.07419,19.65495],[-72.07399,19.65583],[-72.07384,19.65648],[-72.07307,19.65805],[-72.07274,19.65866],[-72.0727,19.65869],[-72.07228,19.65915],[-72.07221,19.65917],[-72.07196,19.65916],[-72.0714,19.65909],[-72.07012,19.65866],[-72.07017,19.65856],[-72.06983,19.65852],[-72.06984,19.65848],[-72.06939,19.65841],[-72.06944,19.65823],[-72.06941,19.65823],[-72.06937,19.65836],[-72.06842,19.65807],[-72.06707,19.65759],[-72.06451,19.65663],[-72.06434,19.65632],[-72.06421,19.65547],[-72.06422,19.65541],[-72.06472,19.65379],[-72.06487,19.65351],[-72.06537,19.65239]],[[-72.23222,18.69173],[-72.23182,18.69172],[-72.23115,18.69168],[-72.23128,18.69161],[-72.23072,18.69152],[-72.23068,18.69147],[-72.23135,18.69159],[-72.23157,18.69149],[-72.23162,18.69137],[-72.23165,18.69134],[-72.23165,18.69164],[-72.23222,18.69173]],[[-72.2406,18.69192],[-72.23953,18.6921],[-72.23891,18.69207],[-72.23878,18.69207],[-72.23856,18.692],[-72.23818,18.69192],[-72.23186,18.69054],[-72.22977,18.69113],[-72.21709,18.68967],[-72.21618,18.68724],[-72.21599,18.68673],[-72.21602,18.68659],[-72.2159,18.68601],[-72.21581,18.68593],[-72.21561,18.68483],[-72.21569,18.6847],[-72.21578,18.68435],[-72.21595,18.68347],[-72.21629,18.68289],[-72.2164,18.68221],[-72.21633,18.68211],[-72.21641,18.68208],[-72.21642,18.68189],[-72.21694,18.6813],[-72.21685,18.68096],[-72.21693,18.68099],[-72.21722,18.68091],[-72.21734,18.6808],[-72.21731,18.67964],[-72.21749,18.67958],[-72.21749,18.67946],[-72.21747,18.67908],[-72.21743,18.67853],[-72.21739,18.6785],[-72.21718,18.6786],[-72.2171,18.67856],[-72.21708,18.67838],[-72.21724,18.67767],[-72.21724,18.67745],[-72.21721,18.67744],[-72.21681,18.67754],[-72.21671,18.67688],[-72.21662,18.67612],[-72.21642,18.67621],[-72.21601,18.67548],[-72.21596,18.67551],[-72.21589,18.67549],[-72.21552,18.6756],[-72.2154,18.67561],[-72.21529,18.6757],[-72.21521,18.67571],[-72.21491,18.67472],[-72.21464,18.67387],[-72.21456,18.6737],[-72.21447,18.67348],[-72.21413,18.67301],[-72.21427,18.67293],[-72.21413,18.67271],[-72.21383,18.67278],[-72.21339,18.67181],[-72.21178,18.67209],[-72.21169,18.67172],[-72.21135,18.67183],[-72.21116,18.67196],[-72.21077,18.67121],[-72.21058,18.67129],[-72.20984,18.66963],[-72.20972,18.6697],[-72.20966,18.66968],[-72.20918,18.66838],[-72.20895,18.66773],[-72.2093,18.66606],[-72.20937,18.66571],[-72.20974,18.66536],[-72.21031,18.66477],[-72.21021,18.66416],[-72.21042,18.66401],[-72.2111,18.66329],[-72.21167,18.66268],[-72.21179,18.66236],[-72.21206,18.66242],[-72.21193,18.66185],[-72.21188,18.66155],[-72.21199,18.66147],[-72.21239,18.66137],[-72.21331,18.66103],[-72.21393,18.66039],[-72.21376,18.65992],[-72.21355,18.65956],[-72.21376,18.65943],[-72.21349,18.65869],[-72.21296,18.65736],[-72.21357,18.6572],[-72.21312,18.65639],[-72.21281,18.65534],[-72.21317,18.6551],[-72.21308,18.65459],[-72.21347,18.65438],[-72.21374,18.65436],[-72.21382,18.65416],[-72.2135,18.65353],[-72.21304,18.65171],[-72.21345,18.65143],[-72.21341,18.65133],[-72.21364,18.65105],[-72.21418,18.65077],[-72.21378,18.65016],[-72.21364,18.64989],[-72.21372,18.64975],[-72.21429,18.64943],[-72.21379,18.64934],[-72.21362,18.64922],[-72.21382,18.64869],[-72.21354,18.64765],[-72.21331,18.64717],[-72.21366,18.64552],[-72.21389,18.64539],[-72.21377,18.6451],[-72.214,18.64399],[-72.21412,18.64378],[-72.21437,18.64347],[-72.2158,18.64222],[-72.21601,18.64217],[-72.21761,18.64218],[-72.21778,18.64272],[-72.21798,18.64256],[-72.21816,18.64236],[-72.21821,18.6422],[-72.22119,18.64222],[-72.22125,18.6423],[-72.22135,18.64224],[-72.2215,18.64223],[-72.22293,18.64229],[-72.22299,18.64235],[-72.22311,18.64227],[-72.22717,18.64249],[-72.22828,18.64281],[-72.22811,18.6432],[-72.22848,18.64325],[-72.22919,18.64258],[-72.2304,18.64263],[-72.23711,18.64295],[-72.23719,18.64317],[-72.23807,18.64322],[-72.23828,18.64298],[-72.23988,18.64306],[-72.24332,18.6434],[-72.24367,18.64387],[-72.24518,18.64437],[-72.2456,18.64364],[-72.24562,18.64372],[-72.24574,18.64363],[-72.24723,18.64378],[-72.24853,18.64441],[-72.24918,18.64397],[-72.25155,18.64418],[-72.25382,18.64516],[-72.2546,18.64564],[-72.25517,18.64642],[-72.2554,18.64807],[-72.25531,18.64812],[-72.2552,18.64828],[-72.2555,18.64881],[-72.25586,18.64847],[-72.25603,18.64856],[-72.25625,18.64848],[-72.25685,18.64755],[-72.25965,18.64494],[-72.26253,18.64336],[-72.26304,18.64362],[-72.26388,18.64308],[-72.26486,18.64445],[-72.26525,18.64373],[-72.26533,18.64378],[-72.26576,18.64259],[-72.26652,18.64289],[-72.26641,18.64135],[-72.26714,18.64137],[-72.26737,18.6407],[-72.26824,18.64023],[-72.26853,18.6403],[-72.26901,18.63988],[-72.26908,18.63978],[-72.26948,18.63958],[-72.27214,18.63895],[-72.27383,18.63988],[-72.27375,18.64004],[-72.27476,18.64088],[-72.27501,18.64054],[-72.27622,18.64161],[-72.27639,18.64131],[-72.27652,18.64138],[-72.27845,18.643],[-72.27896,18.64273],[-72.2823,18.64457],[-72.28387,18.64607],[-72.28384,18.64611],[-72.28412,18.64641],[-72.28401,18.64647],[-72.28455,18.6471],[-72.28538,18.64803],[-72.28569,18.64785],[-72.28642,18.64857],[-72.28724,18.64936],[-72.28775,18.65003],[-72.28724,18.65028],[-72.28768,18.65089],[-72.28708,18.65122],[-72.28656,18.65188],[-72.28736,18.6532],[-72.2872,18.65332],[-72.2873,18.65355],[-72.28905,18.65383],[-72.28882,18.65459],[-72.28889,18.6546],[-72.28878,18.65512],[-72.29013,18.65481],[-72.29084,18.65766],[-72.2902,18.65767],[-72.29076,18.66015],[-72.28998,18.66022],[-72.29045,18.66151],[-72.29022,18.66161],[-72.29033,18.66256],[-72.29138,18.66227],[-72.29155,18.66276],[-72.29368,18.66243],[-72.29377,18.663],[-72.29441,18.66289],[-72.29444,18.66273],[-72.29656,18.66246],[-72.29662,18.66262],[-72.29708,18.66261],[-72.29692,18.66184],[-72.30025,18.66195],[-72.30141,18.66311],[-72.30141,18.66397],[-72.30192,18.66392],[-72.30197,18.66454],[-72.30311,18.66471],[-72.30471,18.66632],[-72.30471,18.66668],[-72.30505,18.66666],[-72.30529,18.66692],[-72.30519,18.66768],[-72.30607,18.66759],[-72.30749,18.66901],[-72.30782,18.67109],[-72.30784,18.67216],[-72.30757,18.67405],[-72.30716,18.67526],[-72.30674,18.67537],[-72.30687,18.67599],[-72.30657,18.67612],[-72.30611,18.67602],[-72.30585,18.67705],[-72.30607,18.67726],[-72.3061,18.67744],[-72.30635,18.678],[-72.30609,18.67871],[-72.30587,18.67881],[-72.3059,18.67951],[-72.30556,18.68062],[-72.30395,18.68368],[-72.30377,18.68373],[-72.30139,18.68415],[-72.29912,18.68452],[-72.29899,18.68432],[-72.29826,18.6844],[-72.29828,18.6845],[-72.29502,18.68412],[-72.29419,18.68422],[-72.29408,18.68376],[-72.29202,18.68398],[-72.29191,18.68364],[-72.29101,18.68377],[-72.29095,18.68347],[-72.29037,18.68378],[-72.29035,18.68363],[-72.28936,18.68384],[-72.28913,18.68345],[-72.28766,18.6835],[-72.2877,18.68329],[-72.28538,18.68344],[-72.2849,18.68243],[-72.28449,18.68243],[-72.28376,18.68198],[-72.28268,18.68186],[-72.2822,18.68284],[-72.28268,18.68296],[-72.28164,18.68413],[-72.28111,18.68523],[-72.28129,18.68628],[-72.28089,18.68726],[-72.28036,18.68726],[-72.28036,18.68762],[-72.2715,18.688],[-72.2715,18.68774],[-72.27171,18.6875],[-72.27193,18.68611],[-72.2713,18.68611],[-72.27115,18.68635],[-72.27115,18.68735],[-72.26903,18.68805],[-72.26661,18.68821],[-72.26315,18.68817],[-72.25798,18.6868],[-72.25503,18.68501],[-72.25415,18.68242],[-72.25408,18.68278],[-72.25266,18.68732],[-72.25106,18.68819],[-72.24828,18.68927],[-72.24695,18.68917],[-72.24718,18.68966],[-72.24628,18.68966],[-72.24632,18.68997],[-72.24527,18.69032],[-72.24487,18.69045],[-72.24361,18.69036],[-72.24351,18.69029],[-72.24321,18.6903],[-72.24318,18.69051],[-72.24324,18.69061],[-72.24325,18.691],[-72.24303,18.69122],[-72.24166,18.69171],[-72.24149,18.69178],[-72.2406,18.69192]],[[-72.27545,18.56614],[-72.27419,18.56701],[-72.27356,18.56701],[-72.27297,18.56706],[-72.27227,18.56707],[-72.27191,18.56707],[-72.27178,18.56718],[-72.2709,18.56724],[-72.27064,18.56724],[-72.26998,18.56708],[-72.26875,18.56671],[-72.2684,18.56661],[-72.26809,18.56639],[-72.26781,18.56611],[-72.26744,18.5652],[-72.26739,18.56308],[-72.26738,18.5626],[-72.26742,18.56195],[-72.26799,18.56064],[-72.26822,18.56014],[-72.26856,18.55975],[-72.26871,18.55962],[-72.2702,18.55963],[-72.27181,18.55967],[-72.27491,18.55982],[-72.27579,18.55986],[-72.27588,18.55999],[-72.2758,18.56491],[-72.27578,18.56541],[-72.27575,18.56556],[-72.27552,18.56608],[-72.27545,18.56614]],[[-72.33318,18.56014],[-72.33166,18.55959],[-72.33021,18.55904],[-72.32919,18.55866],[-72.3292,18.55861],[-72.32887,18.55838],[-72.32868,18.55826],[-72.3282,18.55827],[-72.32815,18.55828],[-72.3261,18.55752],[-72.32604,18.5575],[-72.32604,18.55745],[-72.32589,18.55732],[-72.32551,18.5573],[-72.32437,18.55688],[-72.32411,18.55678],[-72.32379,18.55662],[-72.32348,18.55633],[-72.32315,18.55628],[-72.32174,18.55556],[-72.32143,18.55541],[-72.3205,18.55488],[-72.32019,18.5547],[-72.32007,18.55453],[-72.31984,18.55412],[-72.31984,18.55385],[-72.31998,18.55322],[-72.32046,18.55124],[-72.32056,18.55083],[-72.32066,18.55047],[-72.32068,18.55039],[-72.32111,18.54857],[-72.32127,18.54791],[-72.32147,18.54719],[-72.32153,18.54699],[-72.322,18.5458],[-72.32203,18.54575],[-72.32354,18.54486],[-72.3236,18.54483],[-72.3236,18.54481],[-72.32486,18.54407],[-72.32534,18.54378],[-72.32533,18.5439],[-72.32534,18.54392],[-72.32555,18.54416],[-72.32588,18.54452],[-72.3259,18.54453],[-72.32621,18.54452],[-72.3266,18.54452],[-72.32666,18.54398],[-72.32669,18.54367],[-72.32666,18.54361],[-72.32666,18.54356],[-72.32669,18.54356],[-72.32677,18.5436],[-72.32704,18.54363],[-72.32714,18.5432],[-72.32713,18.54314],[-72.32704,18.54317],[-72.32697,18.54316],[-72.32698,18.54296],[-72.32697,18.54293],[-72.32697,18.54281],[-72.32728,18.54263],[-72.32814,18.5424],[-72.32864,18.54226],[-72.3297,18.54228],[-72.32979,18.54228],[-72.33174,18.54279],[-72.33242,18.54298],[-72.33329,18.54319],[-72.33328,18.54321],[-72.33529,18.54372],[-72.33589,18.54387],[-72.33689,18.54504],[-72.33734,18.54555],[-72.33761,18.546],[-72.33783,18.54639],[-72.33788,18.54658],[-72.33791,18.54693],[-72.33792,18.54705],[-72.33763,18.54705],[-72.33749,18.54705],[-72.33751,18.54753],[-72.33751,18.54764],[-72.33747,18.54764],[-72.33748,18.54773],[-72.33742,18.54773],[-72.33739,18.54776],[-72.33735,18.54773],[-72.33734,18.54774],[-72.33726,18.54774],[-72.33725,18.54782],[-72.33725,18.54804],[-72.33728,18.548],[-72.3373,18.54798],[-72.3373,18.54796],[-72.33737,18.54788],[-72.33739,18.54789],[-72.33741,18.5478],[-72.33744,18.5478],[-72.33755,18.5477],[-72.33752,18.54764],[-72.33773,18.54741],[-72.33775,18.54741],[-72.33775,18.54737],[-72.33789,18.54721],[-72.3389,18.54828],[-72.33902,18.54842],[-72.34008,18.55026],[-72.34014,18.55034],[-72.34028,18.55068],[-72.34041,18.55099],[-72.34029,18.55156],[-72.34021,18.55185],[-72.33985,18.55283],[-72.33973,18.55315],[-72.33927,18.55425],[-72.33914,18.55457],[-72.33915,18.55458],[-72.3391,18.5547],[-72.33896,18.55506],[-72.33847,18.55626],[-72.33842,18.55625],[-72.33844,18.55631],[-72.33832,18.55661],[-72.33822,18.55686],[-72.33821,18.55687],[-72.33816,18.55699],[-72.33815,18.55698],[-72.33807,18.557],[-72.33803,18.557],[-72.33806,18.55726],[-72.338,18.55742],[-72.33716,18.5593],[-72.33709,18.55945],[-72.33843,18.55931],[-72.33929,18.55922],[-72.33982,18.55941],[-72.33983,18.55943],[-72.34028,18.55975],[-72.34092,18.5598],[-72.34096,18.5598],[-72.34413,18.5609],[-72.3446,18.56107],[-72.34472,18.56111],[-72.34472,18.56109],[-72.34829,18.5623],[-72.34912,18.5626],[-72.35035,18.56335],[-72.35302,18.56496],[-72.35333,18.56616],[-72.35351,18.56901],[-72.35337,18.56949],[-72.35156,18.57185],[-72.35042,18.57341],[-72.35036,18.57338],[-72.34849,18.57592],[-72.34815,18.57636],[-72.34756,18.57636],[-72.34753,18.57634],[-72.34746,18.57647],[-72.34745,18.57639],[-72.34705,18.57703],[-72.34659,18.57672],[-72.34649,18.57683],[-72.34544,18.57618],[-72.34365,18.57629],[-72.34361,18.57636],[-72.34354,18.57631],[-72.34258,18.5764],[-72.34252,18.57699],[-72.3428,18.57707],[-72.343,18.57715],[-72.3429,18.57737],[-72.34338,18.5774],[-72.34321,18.57803],[-72.34324,18.57803],[-72.3432,18.57816],[-72.3444,18.57852],[-72.34395,18.57972],[-72.34414,18.57976],[-72.34377,18.58067],[-72.34424,18.58074],[-72.34398,18.58155],[-72.34388,18.58181],[-72.34392,18.5818],[-72.34371,18.5823],[-72.34375,18.58229],[-72.34371,18.58237],[-72.34283,18.58355],[-72.3424,18.58413],[-72.34238,18.58411],[-72.34234,18.58411],[-72.34209,18.58403],[-72.34207,18.58434],[-72.342,18.58433],[-72.34192,18.58474],[-72.34192,18.58477],[-72.34118,18.58575],[-72.3408,18.58627],[-72.34024,18.58655],[-72.33983,18.58675],[-72.33542,18.58843],[-72.33539,18.58845],[-72.33539,18.58843],[-72.33517,18.58851],[-72.3346,18.58806],[-72.33372,18.58896],[-72.33361,18.58917],[-72.33295,18.58941],[-72.33253,18.58912],[-72.33252,18.58916],[-72.33168,18.58889],[-72.33157,18.5891],[-72.33152,18.58918],[-72.33153,18.58917],[-72.33152,18.5892],[-72.33158,18.58929],[-72.33161,18.58934],[-72.33136,18.58951],[-72.33134,18.58953],[-72.33135,18.58954],[-72.3313,18.58963],[-72.33132,18.58976],[-72.33112,18.58977],[-72.33118,18.58983],[-72.33097,18.59017],[-72.33011,18.5905],[-72.32965,18.59068],[-72.32418,18.59182],[-72.3238,18.59189],[-72.32228,18.59068],[-72.32079,18.58947],[-72.32076,18.58801],[-72.32078,18.588],[-72.32078,18.58706],[-72.32073,18.58691],[-72.32073,18.58626],[-72.32092,18.58625],[-72.32081,18.58589],[-72.32074,18.58593],[-72.3207,18.58531],[-72.32114,18.58437],[-72.32185,18.58274],[-72.32202,18.58277],[-72.3222,18.58276],[-72.32211,18.58251],[-72.32196,18.58249],[-72.32242,18.5815],[-72.32245,18.5815],[-72.32295,18.58034],[-72.32368,18.579],[-72.32465,18.57947],[-72.32575,18.57852],[-72.32661,18.5778],[-72.32721,18.57838],[-72.32824,18.57817],[-72.32848,18.57756],[-72.32855,18.5776],[-72.32938,18.57666],[-72.32907,18.57629],[-72.32936,18.57607],[-72.32877,18.57563],[-72.32975,18.57451],[-72.32968,18.57443],[-72.32989,18.57408],[-72.32994,18.57359],[-72.3296,18.57363],[-72.32997,18.57247],[-72.33009,18.57153],[-72.33017,18.57152],[-72.33047,18.57045],[-72.3314,18.57052],[-72.33167,18.56999],[-72.33027,18.56999],[-72.33025,18.57003],[-72.33006,18.57004],[-72.3297,18.57],[-72.32981,18.56877],[-72.32877,18.56765],[-72.32858,18.56749],[-72.32877,18.56711],[-72.32912,18.5668],[-72.32897,18.56664],[-72.32938,18.56572],[-72.32946,18.56554],[-72.33052,18.56424],[-72.33056,18.56424],[-72.33056,18.5642],[-72.33105,18.56367],[-72.33112,18.56374],[-72.33111,18.56376],[-72.33117,18.56377],[-72.33131,18.56391],[-72.33153,18.5641],[-72.33154,18.56385],[-72.33161,18.56365],[-72.33168,18.56329],[-72.33169,18.56322],[-72.33171,18.56319],[-72.33181,18.5628],[-72.33187,18.5626],[-72.33299,18.56123],[-72.33318,18.561],[-72.33365,18.56064],[-72.33393,18.56042],[-72.33367,18.56033],[-72.33367,18.56027],[-72.33332,18.56011],[-72.33318,18.56014]],[[-72.31173,18.56168],[-72.31195,18.56259],[-72.31221,18.56365],[-72.31259,18.56628],[-72.31254,18.5663],[-72.31264,18.56654],[-72.31266,18.56682],[-72.3127,18.56687],[-72.31276,18.56734],[-72.31256,18.56746],[-72.31232,18.56754],[-72.31229,18.56757],[-72.31199,18.5677],[-72.31216,18.56801],[-72.31227,18.56815],[-72.31231,18.56828],[-72.31239,18.56841],[-72.31291,18.56909],[-72.31281,18.56916],[-72.31306,18.56945],[-72.31309,18.56956],[-72.31323,18.57061],[-72.31325,18.57137],[-72.31325,18.57213],[-72.31234,18.57268],[-72.31117,18.57341],[-72.30971,18.5739],[-72.30911,18.5739],[-72.30894,18.57369],[-72.3086,18.57389],[-72.30712,18.57389],[-72.307,18.57357],[-72.30666,18.57388],[-72.30605,18.57389],[-72.30581,18.57367],[-72.30555,18.57388],[-72.3007,18.57387],[-72.30059,18.57369],[-72.30044,18.57386],[-72.29691,18.57388],[-72.29518,18.57386],[-72.295,18.57371],[-72.29473,18.57341],[-72.29387,18.5722],[-72.29341,18.57156],[-72.29338,18.57142],[-72.2933,18.57075],[-72.29338,18.57008],[-72.29349,18.56992],[-72.29361,18.56978],[-72.29361,18.56985],[-72.29378,18.56959],[-72.29364,18.56957],[-72.29345,18.56951],[-72.29358,18.56919],[-72.29389,18.56859],[-72.29373,18.56847],[-72.29359,18.56827],[-72.29359,18.5681],[-72.29379,18.5679],[-72.29403,18.56774],[-72.29387,18.56762],[-72.29368,18.56743],[-72.29396,18.56457],[-72.29411,18.56426],[-72.29401,18.56418],[-72.29402,18.5638],[-72.29412,18.56283],[-72.29451,18.56209],[-72.29462,18.56196],[-72.29767,18.5617],[-72.29849,18.56192],[-72.29864,18.56184],[-72.29857,18.56174],[-72.2988,18.56157],[-72.30144,18.56133],[-72.30181,18.56176],[-72.30228,18.56125],[-72.30275,18.56122],[-72.30427,18.56126],[-72.30505,18.56147],[-72.30522,18.5613],[-72.30609,18.56132],[-72.30821,18.56138],[-72.31173,18.56168]]]},{id:"DroneImageryCanaanHaitiNovember2015",name:"Drone Imagery Canaan(Haiti) November 2015",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/haiti_canaan_nov2015/{zoom}/{x}/{y}",endDate:"2015-11-01T00:00:00.000Z",startDate:"2015-11-01T00:00:00.000Z",polygon:[[[-72.23109,18.67676],[-72.23101,18.67675],[-72.23108,18.67675],[-72.23104,18.67669],[-72.23105,18.67665],[-72.23151,18.67663],[-72.23153,18.67665],[-72.23146,18.67676],[-72.23285,18.67669],[-72.23506,18.67641],[-72.23507,18.67638],[-72.23507,18.67635],[-72.23505,18.67635],[-72.23511,18.6762],[-72.23509,18.67614],[-72.23523,18.67613],[-72.23522,18.67611],[-72.23523,18.67606],[-72.2352,18.67598],[-72.23515,18.6758],[-72.23629,18.67565],[-72.23625,18.67553],[-72.23624,18.67551],[-72.23648,18.67548],[-72.23648,18.67565],[-72.23648,18.67581],[-72.23689,18.67575],[-72.2372,18.67571],[-72.23747,18.67567],[-72.23772,18.67563],[-72.23805,18.6756],[-72.23854,18.67555],[-72.23888,18.67552],[-72.239,18.67551],[-72.23897,18.67565],[-72.23897,18.67571],[-72.23901,18.67576],[-72.239,18.67576],[-72.23902,18.67584],[-72.23905,18.67589],[-72.23929,18.67587],[-72.23981,18.67581],[-72.24059,18.67571],[-72.24142,18.67561],[-72.24177,18.67556],[-72.24179,18.67553],[-72.2421,18.67551],[-72.24272,18.67545],[-72.24276,18.67536],[-72.24278,18.67537],[-72.24279,18.67537],[-72.24299,18.67536],[-72.24334,18.67535],[-72.24339,18.67535],[-72.2434,18.67534],[-72.24372,18.67532],[-72.24424,18.67525],[-72.24443,18.67509],[-72.2474,18.67253],[-72.24731,18.67233],[-72.24681,18.67157],[-72.2469,18.67061],[-72.24652,18.67055],[-72.24661,18.66991],[-72.24669,18.66991],[-72.24688,18.66884],[-72.24707,18.66789],[-72.24709,18.66749],[-72.24728,18.66743],[-72.24716,18.66691],[-72.24717,18.66642],[-72.24703,18.66644],[-72.24701,18.66616],[-72.24971,18.66598],[-72.24947,18.66475],[-72.24989,18.66489],[-72.24989,18.66507],[-72.25113,18.66515],[-72.25102,18.66548],[-72.25111,18.66548],[-72.25111,18.66559],[-72.25219,18.66551],[-72.25387,18.66554],[-72.25387,18.66563],[-72.25551,18.66559],[-72.25638,18.66484],[-72.25719,18.66359],[-72.25763,18.66208],[-72.25768,18.65694],[-72.25779,18.64996],[-72.25713,18.64563],[-72.25696,18.64517],[-72.25564,18.64352],[-72.2493,18.64358],[-72.2482,18.64361],[-72.24637,18.64397],[-72.24629,18.64462],[-72.24454,18.64436],[-72.24442,18.64527],[-72.24311,18.6455],[-72.24326,18.64639],[-72.24286,18.64794],[-72.24272,18.64801],[-72.24282,18.6482],[-72.24257,18.64894],[-72.24109,18.64902],[-72.24109,18.64918],[-72.2405,18.64906],[-72.24036,18.6495],[-72.2403,18.64863],[-72.23753,18.64915],[-72.23664,18.64899],[-72.23666,18.64883],[-72.23582,18.64888],[-72.23488,18.64878],[-72.23487,18.64893],[-72.2338,18.649],[-72.23384,18.64932],[-72.23262,18.64927],[-72.2325,18.64824],[-72.23028,18.64837],[-72.23028,18.64821],[-72.22743,18.64815],[-72.2263,18.64775],[-72.22608,18.64845],[-72.22583,18.64841],[-72.22576,18.64828],[-72.22417,18.64849],[-72.22417,18.64805],[-72.22166,18.64804],[-72.21921,18.6485],[-72.21767,18.64995],[-72.21719,18.6509],[-72.21637,18.65422],[-72.21633,18.65888],[-72.21633,18.66198],[-72.2171,18.66448],[-72.21737,18.66441],[-72.21814,18.66454],[-72.21864,18.66568],[-72.21837,18.66588],[-72.21881,18.66817],[-72.21881,18.66893],[-72.21846,18.66888],[-72.21884,18.67018],[-72.22015,18.67173],[-72.22175,18.67311],[-72.22175,18.67288],[-72.2225,18.67317],[-72.22257,18.67357],[-72.22241,18.67368],[-72.22489,18.67588],[-72.2287,18.67693],[-72.23073,18.6768],[-72.23111,18.67678],[-72.23109,18.67676]]]},{id:"drone-imagery-2016",name:"Drone Imagery Matthew(Haiti) October 2016",type:"tms",template:"https://imagery.openstreetmap.fr/tms/1.0.0/haiti_uav_201610/{zoom}/{x}/{y}",endDate:"2016-10-01T00:00:00.000Z",startDate:"2016-10-01T00:00:00.000Z",polygon:[[[-74.11291,18.64948],[-74.10903,18.64598],[-74.10873,18.64446],[-74.1095,18.64452],[-74.1095,18.64181],[-74.10968,18.64187],[-74.11053,18.64103],[-74.10988,18.64034],[-74.11005,18.64014],[-74.11005,18.64009],[-74.11011,18.64002],[-74.10949,18.63959],[-74.1095,18.63924],[-74.10904,18.63926],[-74.10894,18.63917],[-74.10905,18.63912],[-74.10898,18.63899],[-74.10782,18.63839],[-74.10823,18.63775],[-74.10812,18.63764],[-74.10786,18.63774],[-74.10768,18.63733],[-74.10748,18.63719],[-74.10722,18.63559],[-74.10901,18.63394],[-74.11678,18.62847],[-74.11952,18.62815],[-74.12251,18.63132],[-74.12731,18.63703],[-74.12684,18.6374],[-74.12731,18.63771],[-74.12768,18.63756],[-74.13403,18.64671],[-74.13401,18.64897],[-74.13087,18.65167],[-74.13076,18.65153],[-74.13053,18.65179],[-74.13054,18.65195],[-74.12878,18.65342],[-74.1274,18.65412],[-74.12514,18.65497],[-74.11997,18.65432],[-74.11938,18.65429],[-74.11291,18.64948]],[[-74.11305,18.4922],[-74.10884,18.49216],[-74.10118,18.49095],[-74.10105,18.49057],[-74.10131,18.4902],[-74.10101,18.48996],[-74.10142,18.48933],[-74.10099,18.48931],[-74.1009,18.48886],[-74.10166,18.48725],[-74.10108,18.48713],[-74.10133,18.48664],[-74.10058,18.48654],[-74.10048,18.48552],[-74.10062,18.4849],[-74.10037,18.48478],[-74.10012,18.4827],[-74.09994,18.48123],[-74.10033,18.48114],[-74.10242,18.48116],[-74.10492,18.48149],[-74.10771,18.48189],[-74.1099,18.48226],[-74.10987,18.48243],[-74.10992,18.48246],[-74.11018,18.48232],[-74.11196,18.48261],[-74.11247,18.48278],[-74.11316,18.48382],[-74.1134,18.48521],[-74.11349,18.48709],[-74.11338,18.48704],[-74.11336,18.48717],[-74.11349,18.48727],[-74.11355,18.48931],[-74.11349,18.48949],[-74.1135,18.48951],[-74.11349,18.48952],[-74.11347,18.48951],[-74.11334,18.48957],[-74.11336,18.48962],[-74.11341,18.48958],[-74.11344,18.48959],[-74.11349,18.48956],[-74.11352,18.48957],[-74.11355,18.48956],[-74.11357,18.48998],[-74.11359,18.49067],[-74.11354,18.49108],[-74.11322,18.492],[-74.11305,18.4922]],[[-74.10198,18.24954],[-74.09767,18.24744],[-74.09419,18.2474],[-74.09338,18.24885],[-74.09638,18.25292],[-74.09934,18.25335],[-74.10198,18.24954]],[[-74.02901,18.59744],[-74.02881,18.60255],[-74.00847,18.60182],[-74.00867,18.59671],[-74.02901,18.59744]],[[-73.91991,18.07466],[-73.91468,18.07482],[-73.91535,18.07742],[-73.91478,18.08009],[-73.91997,18.08014],[-73.91924,18.07802],[-73.91999,18.07637],[-73.91991,18.07466]],[[-74.22365,18.3081],[-74.22061,18.30272],[-74.21902,18.30278],[-74.21592,18.30364],[-74.21615,18.30804],[-74.22365,18.3081]],[[-74.00508,18.17646],[-74.00072,18.17657],[-74.00186,18.18175],[-74.00269,18.18344],[-74.00653,18.18336],[-74.00715,18.18218],[-74.00649,18.18056],[-74.0052,18.17922],[-74.00508,18.17646]],[[-74.0653,18.22881],[-74.06361,18.2268],[-74.06114,18.22672],[-74.05968,18.22853],[-74.06281,18.23083],[-74.06446,18.23034],[-74.0653,18.22881]],[[-74.11371,18.47184],[-74.11002,18.47177],[-74.10959,18.47536],[-74.11341,18.47497],[-74.11371,18.47184]],[[-73.95852,18.47452],[-73.95446,18.47465],[-73.95548,18.4794],[-73.95965,18.47878],[-73.95852,18.47452]],[[-74.16719,18.27229],[-74.16196,18.27232],[-74.16175,18.27303],[-74.16255,18.27452],[-74.16372,18.27542],[-74.16341,18.27749],[-74.16404,18.27854],[-74.16756,18.27868],[-74.16742,18.27592],[-74.16775,18.27416],[-74.16719,18.27229]],[[-74.11091,18.45286],[-74.10701,18.45258],[-74.10684,18.4586],[-74.11102,18.45781],[-74.11091,18.45286]],[[-73.76854,18.18022],[-73.75773,18.18006],[-73.73559,18.19311],[-73.73567,18.20143],[-73.74563,18.20191],[-73.74468,18.22311],[-73.77121,18.22417],[-73.77129,18.20844],[-73.76915,18.2064],[-73.76854,18.18022]],[[-74.13455,18.60914],[-74.1388,18.60929],[-74.13871,18.61165],[-74.13447,18.6115],[-74.13455,18.60914]],[[-74.04228,18.20945],[-74.042,18.20484],[-74.04155,18.20239],[-74.03959,18.20051],[-74.03836,18.20028],[-74.03764,18.20242],[-74.03792,18.20562],[-74.03918,18.20932],[-74.04228,18.20945]],[[-74.08668,18.61121],[-74.08669,18.61217],[-74.09146,18.61689],[-74.09211,18.61603],[-74.09313,18.61699],[-74.09603,18.62025],[-74.09627,18.6206],[-74.0967,18.62202],[-74.09337,18.62651],[-74.09237,18.62754],[-74.08862,18.62596],[-74.08863,18.62561],[-74.08778,18.62561],[-74.08661,18.6251],[-74.08662,18.62368],[-74.08514,18.62367],[-74.08462,18.62289],[-74.08463,18.62175],[-74.08339,18.62174],[-74.08261,18.62057],[-74.08262,18.61982],[-74.07659,18.6198],[-74.07658,18.61596],[-74.07255,18.61591],[-74.07259,18.61403],[-74.07062,18.61402],[-74.06858,18.6129],[-74.06855,18.61208],[-74.06614,18.61207],[-74.06414,18.61206],[-74.0625,18.61105],[-74.06254,18.61011],[-74.05927,18.61013],[-74.0545,18.60876],[-74.05451,18.60817],[-74.05168,18.60816],[-74.04932,18.60776],[-74.04647,18.60664],[-74.04646,18.6062],[-74.04243,18.6062],[-74.04133,18.60592],[-74.03625,18.60378],[-74.03597,18.60345],[-74.03642,18.60252],[-74.03719,18.6019],[-74.04003,18.60217],[-74.05608,18.60473],[-74.05851,18.6054],[-74.05861,18.60623],[-74.0611,18.60627],[-74.06481,18.60745],[-74.06518,18.60686],[-74.06679,18.60802],[-74.0696,18.60885],[-74.07142,18.60711],[-74.07239,18.60736],[-74.07515,18.61024],[-74.07701,18.61019],[-74.07798,18.61096],[-74.07901,18.61013],[-74.08109,18.61234],[-74.08234,18.60896],[-74.08383,18.60922],[-74.08513,18.60977],[-74.08668,18.61121]],[[-74.45922,18.4663],[-74.45589,18.46471],[-74.44779,18.47],[-74.44693,18.4713],[-74.44726,18.47934],[-74.44554,18.47915],[-74.44515,18.48326],[-74.43968,18.4839],[-74.439,18.48762],[-74.44299,18.49004],[-74.44906,18.49104],[-74.45382,18.49311],[-74.45571,18.49635],[-74.45786,18.49725],[-74.46052,18.49523],[-74.46241,18.49143],[-74.46198,18.48799],[-74.45537,18.48597],[-74.45526,18.47111],[-74.45944,18.46871],[-74.45922,18.4663]],[[-74.41888,18.57551],[-74.41499,18.57331],[-74.41045,18.57648],[-74.40824,18.58233],[-74.40954,18.58894],[-74.4112,18.59195],[-74.41081,18.59689],[-74.41663,18.60063],[-74.42178,18.59671],[-74.42146,18.59416],[-74.41745,18.59419],[-74.41753,18.59067],[-74.41538,18.59002],[-74.41533,18.58382],[-74.41652,18.58382],[-74.41756,18.5814],[-74.41756,18.57967],[-74.41924,18.57754],[-74.41888,18.57551]]]},{id:"Erlangen-2011",name:"Erlangen Luftbild (2011 5,0 cm)",type:"wms",template:"https://secure.erlangen.de/arcgiser/services/Luftbilder2011/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Erlangen_ratio10_5cm_gk4.jp2&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[10.92791,49.53196],[10.97194,49.52969],[10.97821,49.53568],[10.99934,49.53589],[11.03214,49.53089],[11.04425,49.54317],[11.03842,49.55239],[11.03663,49.57167],[11.04029,49.58572],[11.07287,49.58587],[11.07243,49.63486],[11.0054,49.6344],[11.00397,49.62599],[10.9748,49.62541],[10.94293,49.64563],[10.92532,49.64876],[10.91002,49.63793],[10.92235,49.60463],[10.91949,49.57823],[10.91135,49.57095],[10.91256,49.5606],[10.92907,49.55674],[10.92791,49.53196]]],terms_text:"© Stadt Erlangen | © Aerowest GmbH"},{id:"Erlangen-2013",name:"Erlangen Luftbild (2013 6,25 cm)",type:"wms",template:"https://secure.erlangen.de/arcgiser/services/Luftbilder2013/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Erlangen_ratio5_6.25cm.jp2&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[10.92791,49.53196],[10.9726,49.52939],[10.97909,49.53475],[10.99934,49.53589],[11.03214,49.53089],[11.04425,49.54317],[11.03842,49.55239],[11.03743,49.57873],[11.0568,49.592],[11.05748,49.61358],[11.04681,49.61447],[11.04788,49.6187],[11.00308,49.62367],[10.98107,49.62339],[10.98069,49.62617],[10.96737,49.62781],[10.96539,49.63415],[10.94293,49.64563],[10.92532,49.64876],[10.91002,49.63793],[10.92235,49.60463],[10.91949,49.57823],[10.91135,49.57095],[10.91256,49.5606],[10.92907,49.55674],[10.92791,49.53196]]],terms_text:"© Stadt Erlangen | © Aerowest GmbH"},{id:"Erlangen-2016",name:"Erlangen Luftbild (2016 5,0 cm)",type:"tms",template:"https://osm.rrze.fau.de/protected/YgktSWTTo6HS9nKi/lbe2016/{zoom}/{x}/{y}.jpg",endDate:"2016-03-18T00:00:00.000Z",startDate:"2016-03-18T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[10.97664,49.53765],[10.99101,49.53392],[10.99389,49.53835],[11.02784,49.53254],[11.0346,49.53462],[11.03407,49.53759],[11.04318,49.54321],[11.03557,49.55303],[11.0384,49.55842],[11.03508,49.56929],[11.03791,49.58659],[11.04797,49.5902],[11.04922,49.5937],[11.05749,49.59521],[11.05623,49.59905],[11.05127,49.6003],[11.05351,49.60904],[11.04309,49.61381],[11.04076,49.61823],[11.0285,49.61735],[11.01929,49.61896],[11.0152,49.61372],[11.00581,49.61448],[11.00639,49.61931],[11.00083,49.6221],[10.9856,49.61651],[10.97837,49.61753],[10.9737,49.62495],[10.96539,49.62557],[10.96063,49.62856],[10.96382,49.63176],[10.95474,49.6379],[10.94837,49.637],[10.94185,49.64377],[10.9273,49.64837],[10.92063,49.63963],[10.91136,49.63773],[10.92429,49.60505],[10.92205,49.58004],[10.91221,49.57008],[10.91441,49.5618],[10.92353,49.55842],[10.92712,49.55976],[10.93345,49.55892],[10.93071,49.54467],[10.93067,49.53225],[10.9406,49.53325],[10.95488,49.53021],[10.97199,49.53126],[10.97664,49.53765]]],terms_text:"© Stadt Erlangen | © GEOCART GmbH"},{id:"Erlangen-2018",name:"Erlangen Luftbild (2018 5,0 cm)",type:"tms",template:"https://osm.rrze.fau.de/protected/YgktSWTTo6HS9nKi/lbe2018/{zoom}/{x}/{y}.jpg",endDate:"2018-04-09T00:00:00.000Z",startDate:"2018-04-09T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[10.85157,49.55172],[10.93037,49.55272],[10.9326,49.55818],[10.91627,49.55882],[10.91144,49.56652],[10.92281,49.60584],[10.9108,49.63751],[10.92775,49.64838],[10.94444,49.64321],[10.96487,49.63317],[10.96384,49.62711],[10.9745,49.62483],[10.9786,49.61794],[10.98478,49.61694],[10.998,49.62228],[11.00813,49.62194],[11.0071,49.61449],[11.01448,49.61394],[11.02081,49.62292],[11.05757,49.63993],[11.08136,49.62614],[11.08312,49.62034],[11.10419,49.61524],[11.11767,49.61449],[11.11997,49.60377],[11.13132,49.60348],[11.1272,49.58815],[11.10271,49.58378],[11.08898,49.59124],[11.07988,49.60837],[11.05808,49.60971],[11.06049,49.59803],[11.06512,49.59614],[11.0689,49.58879],[11.06031,49.58556],[11.04469,49.58913],[11.03851,49.58556],[11.03577,49.57276],[11.03937,49.55785],[11.04272,49.5432],[11.03465,49.5324],[10.97531,49.53467],[10.97158,49.53084],[10.94279,49.52986],[10.94273,49.50582],[10.92163,49.50566],[10.91245,49.51829],[10.88818,49.52834],[10.87518,49.51725],[10.84872,49.52291],[10.84652,49.52797],[10.84637,49.53223],[10.85157,49.55172]]],terms_text:"© Stadt Erlangen | © Hansa Luftbild AG",best:true},{id:"EsriWorldImagery",name:"Esri World Imagery",type:"tms",template:"https://{switch:services,server}.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/Esri",terms_text:"Terms & Feedback","default":true,description:"Esri world imagery.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/EsriImageryClarity.png"},{id:"EsriWorldImageryClarity",name:"Esri World Imagery (Clarity) Beta",type:"tms",template:"https://clarity.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/Esri",terms_text:"Terms & Feedback","default":true,description:"Esri archive imagery that may be clearer and more accurate than the default layer.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/EsriImageryClarity.png"},{id:"maaamet.ee-pohi_vr2",name:"Estonia Basemap (Maaamet)",type:"wms",template:"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=pohi_vr2&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti põhikaart"},{id:"Maaamet-Estonia_Cadastre",name:"Estonia Cadastre (Maaamet)",type:"wms",template:"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=of10000,TOPOYKSUS_6569,TOPOYKSUS_6573&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti katastrikaart ortofoto alusel"},{id:"maaamet.ee-cir_ngr",name:"Estonia Forestry (Maaamet)",type:"wms",template:"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=cir_ngr&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti metsanduslik ortofoto"},{id:"maaamet.ee-reljeef",name:"Estonia Hillshading (Maaamet)",type:"wms",template:"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=reljeef&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti reljeefikaart"},{id:"maaamet.ee-orto",name:"Estonia Ortho (Maaamet)",type:"tms",template:"https://tiles.maaamet.ee/tm/tms/1.0.0/foto@GMC/{zoom}/{x}/{-y}.png",zoomExtent:[6,18],polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti ortofoto"},{id:"estrela_de_alagoas",name:"Estrela de Alagoas",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Estrela%20de%20Alagoas&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.71382,-9.43476],[-36.71477,-9.34443],[-36.80586,-9.34498],[-36.80525,-9.43542],[-36.71382,-9.43476]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"eufar-balaton",name:"EUFAR Balaton orthophotos",type:"tms",template:"http://e.tile.openstreetmap.hu/balaton/0/{zoom}/{x}/{y}.jpg",endDate:"2010-08-31T00:00:00.000Z",startDate:"2010-08-01T00:00:00.000Z",zoomExtent:[12,19],polygon:[[[18.17918,46.98502],[18.17773,47.01816],[18.08176,47.05643],[18.10281,47.06311],[18.08152,47.09344],[18.06436,47.09049],[18.03537,47.07983],[18.03344,47.08262],[17.9582,47.05567],[17.99436,47.00449],[17.86441,46.95517],[17.80274,47.0103],[17.67184,46.97207],[17.23875,46.77079],[17.22244,46.6796],[17.47175,46.70306],[18.16735,46.94133],[18.17918,46.98502]]],terms_url:"http://www.bli.okologia.mta.hu/",terms_text:"EUFAR Balaton ortofotó 2010",best:true,description:"1940 geo-tagged photography from Balaton Limnological Institute."},{id:"Fiez-2013",name:"Fiez Orthophoto 2013",type:"tms",template:"https://osmdata.asitvd.ch/tiles/fiez2013/{zoom}/{x}/{y}.png",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[6.62313,46.82339],[6.62899,46.82484],[6.62882,46.82674],[6.62531,46.83274],[6.62382,46.83317],[6.61839,46.83194],[6.62313,46.82339]]],terms_url:"https://osmdata.asitvd.ch/",terms_text:"Fiez - Orthophoto technique 2013"},{id:"fiskeridir-akvakultur",name:"Fiskeridirektoratet Aquaculture overlay",type:"wms",template:"https://ogc.fiskeridir.no/wms.ashx?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=layer_262&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[3,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.fiskeridir.no/Kart",terms_text:"© Fiskeridirektoratet",description:"Aquaculture/marine farms (licensed sites, may not yet have any installations)",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9c/Emblem_of_the_Norwegian_Directorate_of_Fisheries.svg/175px-Emblem_of_the_Norwegian_Directorate_of_Fisheries.svg.png",overlay:true},{id:"FOMI_2005",name:"FÖMI orthophoto 2005",type:"tms",template:"http://e.tile.openstreetmap.hu/ortofoto2005/{zoom}/{x}/{y}.jpg",endDate:"2005-01-01T00:00:00.000Z",startDate:"2005-01-01T00:00:00.000Z",zoomExtent:[0,17],polygon:[[[16.11391,46.8691],[16.17897,46.90662],[16.20004,46.94151],[16.22175,46.93554],[16.24628,46.94639],[16.25532,46.96421],[16.27647,46.96261],[16.29058,47.01398],[16.30162,46.99923],[16.34146,46.99652],[16.35052,47.01063],[16.3734,46.99859],[16.41277,47.00475],[16.43327,46.99274],[16.44781,47.00389],[16.48,46.99412],[16.5122,47.00117],[16.46356,47.03227],[16.44786,47.02275],[16.43912,47.02966],[16.44567,47.03887],[16.52032,47.0561],[16.47321,47.07362],[16.46372,47.09392],[16.5008,47.11006],[16.50004,47.12329],[16.52953,47.12874],[16.51716,47.14969],[16.45495,47.14259],[16.46487,47.16833],[16.45556,47.18756],[16.43056,47.1847],[16.4195,47.19491],[16.41892,47.21071],[16.43713,47.2097],[16.44263,47.23371],[16.43131,47.25276],[16.46715,47.25317],[16.48923,47.27989],[16.46463,47.33385],[16.4337,47.35281],[16.45851,47.36705],[16.44546,47.40702],[16.48317,47.40936],[16.49638,47.38927],[16.51709,47.41002],[16.57491,47.40542],[16.58073,47.41917],[16.66185,47.4556],[16.67064,47.47422],[16.65234,47.50034],[16.68956,47.51016],[16.71478,47.5402],[16.66354,47.56773],[16.6732,47.60495],[16.65953,47.6061],[16.65276,47.62285],[16.63142,47.62832],[16.57391,47.61967],[16.51474,47.6462],[16.49675,47.63931],[16.42546,47.66217],[16.44374,47.67421],[16.44805,47.69647],[16.4747,47.68116],[16.48722,47.69798],[16.55217,47.72255],[16.53638,47.73678],[16.54798,47.75154],[16.60952,47.76037],[16.63441,47.75908],[16.65729,47.74149],[16.72094,47.73536],[16.75341,47.68282],[16.83016,47.68106],[16.83943,47.70451],[16.86689,47.72115],[16.87668,47.68765],[17.09374,47.70777],[17.07066,47.72854],[17.0516,47.79385],[17.07495,47.8085],[17.04714,47.82856],[17.05195,47.83777],[17.01055,47.85818],[17.01639,47.86733],[17.08575,47.87462],[17.11317,47.92716],[17.09171,47.93429],[17.11838,47.96011],[17.09466,47.97088],[17.20103,48.01999],[17.24177,48.02247],[17.25795,47.99865],[17.33465,47.99312],[17.40299,47.94785],[17.45392,47.88526],[17.52674,47.86551],[17.56758,47.81513],[17.6084,47.82189],[17.70858,47.75668],[17.77987,47.73949],[17.8661,47.74575],[17.90013,47.73926],[17.94687,47.74467],[17.97087,47.75784],[18.00441,47.74634],[18.03806,47.75768],[18.29588,47.73146],[18.45407,47.76512],[18.49316,47.75276],[18.55908,47.766],[18.64609,47.75909],[18.72607,47.78904],[18.74118,47.81382],[18.792,47.82309],[18.84854,47.81672],[18.85588,47.82608],[18.82801,47.83429],[18.81357,47.85555],[18.76353,47.8716],[18.75686,47.89684],[18.77675,47.95509],[18.75525,47.97635],[18.81574,47.99344],[18.82,48.03968],[18.83327,48.04824],[18.87494,48.04707],[18.88667,48.05868],[18.90898,48.05114],[18.9439,48.05886],[18.98161,48.0536],[19.01486,48.07818],[19.05852,48.05735],[19.08436,48.07278],[19.1074,48.0656],[19.13529,48.07415],[19.24137,48.05365],[19.25578,48.07156],[19.30311,48.08871],[19.3866,48.09191],[19.40002,48.0823],[19.45405,48.10144],[19.46735,48.08393],[19.49442,48.10991],[19.49238,48.13966],[19.51282,48.15466],[19.50452,48.17344],[19.52897,48.19036],[19.52604,48.20313],[19.5775,48.21601],[19.63083,48.25007],[19.64452,48.23917],[19.66986,48.23921],[19.69122,48.20389],[19.72113,48.20147],[19.74618,48.21651],[19.78716,48.19253],[19.79873,48.19482],[19.80528,48.18373],[19.78242,48.16504],[19.79481,48.15353],[19.82133,48.16908],[19.84528,48.16274],[19.85517,48.17843],[19.86013,48.16941],[19.89875,48.16631],[19.91454,48.14686],[19.8983,48.1249],[19.93738,48.13112],[19.97439,48.166],[19.98871,48.16217],[20.02904,48.17768],[20.04945,48.1672],[20.07299,48.17961],[20.07004,48.1917],[20.13409,48.22518],[20.13319,48.25398],[20.20616,48.25098],[20.20383,48.26191],[20.22847,48.26278],[20.23495,48.27993],[20.28686,48.26164],[20.32571,48.27279],[20.33746,48.30167],[20.36566,48.31661],[20.38408,48.35118],[20.40983,48.36586],[20.40253,48.38256],[20.42053,48.40386],[20.41623,48.41854],[20.50793,48.48936],[20.50651,48.53442],[20.53747,48.52788],[20.54649,48.54429],[20.58659,48.53576],[20.65387,48.56141],[20.83636,48.58284],[20.8378,48.57421],[20.85044,48.58163],[20.84533,48.5665],[20.86815,48.55182],[20.92232,48.55945],[20.93463,48.53834],[20.95588,48.53396],[20.9562,48.52167],[20.98158,48.51777],[21.01511,48.53231],[21.06632,48.52589],[21.11745,48.49105],[21.16087,48.5215],[21.17963,48.51823],[21.22106,48.5375],[21.30549,48.52225],[21.31338,48.55084],[21.32688,48.55413],[21.31938,48.5612],[21.41545,48.55895],[21.42266,48.57882],[21.44061,48.5851],[21.51409,48.55107],[21.54202,48.5084],[21.61393,48.50942],[21.62019,48.46983],[21.66355,48.41796],[21.66456,48.39216],[21.70174,48.3807],[21.71187,48.35762],[21.81741,48.33279],[21.8352,48.33464],[21.83721,48.36325],[21.8843,48.35605],[21.88484,48.36754],[21.89788,48.36256],[21.8998,48.37022],[21.92819,48.3616],[21.92681,48.3709],[21.9492,48.37873],[21.99446,48.37732],[22.02133,48.39275],[22.0546,48.37753],[22.07649,48.38724],[22.08674,48.37156],[22.13591,48.38052],[22.13106,48.39123],[22.15277,48.39624],[22.15619,48.40931],[22.21257,48.42565],[22.23714,48.41004],[22.26549,48.40987],[22.23988,48.38701],[22.26757,48.36116],[22.31781,48.35454],[22.31329,48.32507],[22.33729,48.30791],[22.33843,48.27921],[22.38475,48.23396],[22.40064,48.2492],[22.43284,48.25252],[22.45639,48.24231],[22.4899,48.25342],[22.49722,48.23955],[22.51615,48.23797],[22.53111,48.20943],[22.57114,48.19614],[22.56164,48.18161],[22.59824,48.14476],[22.59028,48.10734],[22.67545,48.092],[22.73472,48.11985],[22.75762,48.12006],[22.77039,48.10902],[22.77232,48.12187],[22.80277,48.12211],[22.80253,48.10708],[22.82543,48.11751],[22.83644,48.08025],[22.86113,48.07503],[22.8678,48.05243],[22.88204,48.05481],[22.86597,48.01132],[22.83556,47.9906],[22.84076,47.98136],[22.87257,47.97527],[22.86973,47.96596],[22.89157,47.96724],[22.89744,47.95406],[22.84733,47.90776],[22.79281,47.89086],[22.75869,47.89414],[22.77775,47.84225],[22.71363,47.83609],[22.68019,47.78775],[22.61112,47.77175],[22.549,47.77222],[22.48121,47.81089],[22.45131,47.80339],[22.43133,47.73981],[22.35662,47.74862],[22.31777,47.76609],[22.31762,47.74337],[22.28514,47.72928],[22.26432,47.73107],[22.259,47.69791],[22.23068,47.6932],[22.17965,47.59161],[22.12892,47.5979],[22.09428,47.55836],[22.07826,47.56213],[22.05345,47.54748],[22.07122,47.53807],[22.06179,47.5288],[22.04513,47.53989],[22.03672,47.53267],[22.00719,47.48362],[22.03279,47.45084],[22.02388,47.39086],[22.01198,47.3758],[21.96274,47.38105],[21.93825,47.37253],[21.87779,47.28578],[21.88728,47.27305],[21.85349,47.23976],[21.85807,47.18736],[21.81248,47.16675],[21.79241,47.10598],[21.72683,47.09839],[21.6976,47.05792],[21.65042,47.04083],[21.68887,47.002],[21.66787,46.97123],[21.68149,46.96521],[21.6382,46.93305],[21.59845,46.92747],[21.61429,46.88673],[21.60167,46.86682],[21.52033,46.83737],[21.51861,46.80007],[21.48318,46.76502],[21.52634,46.73932],[21.52937,46.72097],[21.49233,46.68597],[21.47284,46.69591],[21.4299,46.69394],[21.43096,46.67814],[21.45467,46.66086],[21.41624,46.64262],[21.4098,46.62181],[21.3657,46.63795],[21.33005,46.63182],[21.31397,46.61767],[21.30124,46.59087],[21.32079,46.58286],[21.2743,46.54074],[21.26003,46.50216],[21.27442,46.47673],[21.29645,46.4763],[21.31743,46.45073],[21.28952,46.41548],[21.29633,46.40696],[21.22501,46.41369],[21.20642,46.40338],[21.19926,46.3479],[21.17623,46.33577],[21.1805,46.30445],[21.11554,46.30185],[21.10305,46.26246],[21.07088,46.2539],[21.06608,46.24294],[21.03662,46.24804],[21.02467,46.26653],[20.96082,46.2623],[20.94658,46.2793],[20.92507,46.27662],[20.92181,46.26181],[20.87327,46.28776],[20.77565,46.27596],[20.74905,46.25085],[20.76186,46.20456],[20.7274,46.20775],[20.73411,46.19394],[20.71405,46.16605],[20.68436,46.14478],[20.65492,46.14977],[20.63945,46.12676],[20.54505,46.17909],[20.50148,46.19033],[20.49494,46.17099],[20.45923,46.14288],[20.39751,46.15747],[20.36853,46.15286],[20.35571,46.16963],[20.29681,46.15215],[20.2549,46.11585],[20.24848,46.1301],[20.23301,46.12417],[20.18174,46.16011],[20.1365,46.14495],[20.10097,46.17728],[20.06362,46.14373],[20.03461,46.14589],[20.01581,46.17684],[19.93541,46.17642],[19.85335,46.15],[19.81797,46.12817],[19.75854,46.14798],[19.69821,46.18793],[19.68277,46.18004],[19.66151,46.19044],[19.63174,46.1693],[19.56765,46.17911],[19.5604,46.16658],[19.50266,46.14245],[19.52712,46.12103],[19.4645,46.09538],[19.46658,46.08204],[19.416,46.04605],[19.3804,46.03587],[19.36409,46.0523],[19.2819,46.0148],[19.29653,45.98812],[19.28565,45.9969],[19.14799,45.99634],[19.13384,46.0371],[19.10487,46.04017],[19.06604,46.0002],[19.07968,45.96364],[19.00598,45.95907],[19.00927,45.92366],[18.90613,45.93538],[18.87946,45.91668],[18.86471,45.92085],[18.86856,45.91134],[18.82768,45.90517],[18.822,45.91459],[18.80751,45.90361],[18.80925,45.87962],[18.79562,45.87845],[18.70489,45.91819],[18.67002,45.91084],[18.65966,45.91689],[18.66513,45.89928],[18.64128,45.88904],[18.65502,45.87424],[18.62777,45.87338],[18.61484,45.85314],[18.62367,45.83985],[18.57324,45.81376],[18.57498,45.80043],[18.55972,45.8038],[18.52235,45.78269],[18.49067,45.79472],[18.48219,45.7655],[18.45628,45.76952],[18.44508,45.76052],[18.44685,45.73713],[18.40763,45.73971],[18.39189,45.7617],[18.36423,45.77294],[18.33942,45.74716],[18.29682,45.76122],[18.24405,45.76123],[18.23073,45.77903],[18.19087,45.78788],[18.16819,45.77627],[18.12465,45.78963],[18.10681,45.77083],[18.08189,45.76452],[17.99588,45.79573],[17.93021,45.78633],[17.90668,45.79257],[17.86531,45.76701],[17.82627,45.81],[17.80898,45.8041],[17.78091,45.81749],[17.76034,45.81192],[17.74086,45.8296],[17.66329,45.83818],[17.62762,45.89794],[17.57007,45.93582],[17.43783,45.95038],[17.4259,45.92727],[17.41081,45.93997],[17.39215,45.93021],[17.38287,45.94757],[17.34762,45.94234],[17.34388,45.96053],[17.35377,45.9525],[17.39054,45.95819],[17.38742,45.96618],[17.35835,45.96427],[17.37549,45.96869],[17.37519,45.98811],[17.36357,45.99154],[17.35672,45.97358],[17.33396,45.99608],[17.33198,45.97289],[17.313,45.96653],[17.32365,45.98878],[17.29877,45.98387],[17.3042,46.00211],[17.25797,46.01103],[17.29632,46.02852],[17.25415,46.03001],[17.27096,46.05671],[17.23248,46.0592],[17.25251,46.06647],[17.23131,46.07903],[17.20199,46.07655],[17.23313,46.09896],[17.2104,46.10017],[17.21297,46.11386],[17.17593,46.10846],[17.17434,46.12876],[17.18652,46.13323],[17.1811,46.15055],[17.15623,46.15858],[17.15929,46.16968],[17.1261,46.16845],[17.12274,46.17898],[17.07525,46.18895],[17.06616,46.2023],[16.97354,46.2252],[16.97395,46.24311],[16.95041,46.24153],[16.88624,46.28146],[16.87137,46.32528],[16.88021,46.3357],[16.86154,46.34524],[16.86562,46.35565],[16.8522,46.35172],[16.84986,46.36262],[16.83529,46.36382],[16.83765,46.3748],[16.82617,46.3671],[16.79334,46.38739],[16.75921,46.37766],[16.72987,46.40149],[16.71821,46.38987],[16.67729,46.44945],[16.66318,46.4487],[16.66637,46.4583],[16.61879,46.46199],[16.60447,46.47608],[16.5236,46.50538],[16.53258,46.5314],[16.51767,46.53635],[16.50841,46.56527],[16.483,46.56604],[16.4834,46.5786],[16.44557,46.61095],[16.42486,46.61316],[16.38594,46.64425],[16.39154,46.66373],[16.41985,46.65848],[16.42863,46.69397],[16.36892,46.70401],[16.37983,46.71539],[16.37109,46.72229],[16.35706,46.71424],[16.3186,46.75414],[16.33054,46.77521],[16.31216,46.778],[16.31277,46.79731],[16.34064,46.80519],[16.35084,46.83006],[16.34033,46.84688],[16.3015,46.85951],[16.29139,46.87283],[16.23323,46.87667],[16.15609,46.85371],[16.12657,46.85691],[16.11391,46.8691]]],terms_url:"https://www.fomi.hu",terms_text:"Földmérési és Távérzékelési Intézet"},{id:"Freemap.sk-Car",name:"Freemap.sk Car",type:"tms",template:"https://{switch:a,b,c,d}.freemap.sk/A/{zoom}/{x}/{y}.jpeg",zoomExtent:[8,16],polygon:[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],terms_text:"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved.",icon:"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{id:"Freemap.sk-Cyclo",name:"Freemap.sk Cyclo",type:"tms",template:"https://{switch:a,b,c,d}.freemap.sk/C/{zoom}/{x}/{y}.jpeg",zoomExtent:[8,16],polygon:[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],terms_text:"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved.",icon:"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{id:"Freemap.sk-Hiking",name:"Freemap.sk Hiking",type:"tms",template:"https://{switch:a,b,c,d}.freemap.sk/T/{zoom}/{x}/{y}.jpeg",zoomExtent:[8,16],polygon:[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],terms_text:"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved.",icon:"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{id:"Freemap.sk-Ski",name:"Freemap.sk Ski",type:"tms",template:"https://{switch:a,b,c,d}.freemap.sk/K/{zoom}/{x}/{y}.jpeg",zoomExtent:[8,16],polygon:[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],terms_text:"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved.",icon:"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{id:"fta-digiroad-functional",name:"FTA Road Network",type:"wms",template:"https://extranet.liikennevirasto.fi/inspirepalvelu/beta/wms?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=dr_tielinkki_toim_lk&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[3,20],polygon:[[[27.96569,70.0988],[27.57431,70.07728],[27.10876,69.93548],[26.70913,69.97549],[26.45507,69.94207],[25.87142,69.6671],[25.94833,69.61024],[25.83023,69.55323],[25.66955,69.20794],[25.73822,69.01797],[25.60089,68.90309],[25.45806,68.91199],[25.11749,68.80699],[25.07354,68.64355],[24.88128,68.62003],[23.97491,68.84568],[23.74969,68.8308],[23.63433,68.71645],[23.18939,68.68053],[22.52197,68.7553],[21.63894,69.28191],[21.26953,69.31783],[20.94131,69.21622],[21.08963,69.09307],[21.05941,69.04352],[20.72296,69.12491],[20.54443,69.0558],[20.84655,68.97416],[20.81634,68.91742],[21.38754,68.68461],[22.04734,68.47066],[22.80212,68.35464],[23.12072,68.13169],[23.5437,67.9633],[23.44757,67.8393],[23.48602,67.59352],[23.36517,67.46545],[23.71124,67.41592],[23.72772,67.32186],[23.54644,67.26885],[23.53128,67.16724],[23.89251,66.86863],[23.84582,66.57775],[23.61843,66.44562],[23.67171,66.20303],[23.87191,66.14551],[24.09988,65.87247],[24.1658,65.66959],[24.11636,65.39143],[21.37939,63.68037],[20.17639,63.29787],[19.08325,60.16064],[20.22033,59.44786],[22.29125,59.44507],[25.82336,59.933],[27.52075,60.23435],[27.83386,60.53229],[29.29641,61.26165],[31.20803,62.44759],[31.62826,62.90585],[31.2635,63.22106],[29.99605,63.75387],[30.28656,63.81704],[30.58319,64.0782],[30.5104,64.26428],[30.09979,64.39218],[30.02563,64.58736],[30.16845,64.63329],[30.09429,64.79518],[29.78393,64.79811],[29.65347,64.89733],[29.65759,65.05939],[29.91027,65.09527],[29.93225,65.20895],[29.72076,65.27853],[29.91577,65.63788],[30.1863,65.66223],[29.9913,66.09771],[29.07119,66.91983],[30.11077,67.63431],[29.3486,68.08099],[28.67568,68.20166],[28.46547,68.54039],[28.72375,68.72642],[28.82675,68.87341],[28.44985,68.90792],[28.95996,69.05089],[28.83324,69.10563],[28.87207,69.22132],[29.36096,69.46526],[29.15634,69.69667],[28.38455,69.83488],[28.35845,69.88312],[28.17169,69.92511],[28.00415,70.01495],[27.96569,70.0988]]],terms_url:"https://www.liikennevirasto.fi/web/en/open-data/digiroad/",terms_text:"© Liikennevirasto",description:"Digiroad national road network from the Finnish Transport Agency, functional road classes.",icon:"https://www.liikennevirasto.fi/livi-theme/images/general/liikennevirasto_logo_2x.png",overlay:true},{id:"gaza_pleiades_20140706",name:"Gaza Strip - Pléiades - 2014/07/06",type:"tms",template:"https://imagery.openstreetmap.fr/tms/1.0.0/gaza_pleiades_20140706/{zoom}/{x}/{y}",endDate:"2014-07-06T00:00:00.000Z",startDate:"2014-07-06T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[34.49022,31.59487],[34.49339,31.59263],[34.5678,31.5401],[34.5653,31.53226],[34.55613,31.52552],[34.54729,31.5121],[34.53011,31.5066],[34.5255,31.50251],[34.51369,31.50067],[34.505,31.49543],[34.4887,31.48263],[34.48532,31.48028],[34.47962,31.47778],[34.47471,31.47207],[34.4674,31.46448],[34.46576,31.46275],[34.45308,31.45139],[34.44585,31.4441],[34.44216,31.44327],[34.43798,31.44112],[34.43226,31.43458],[34.43164,31.43265],[34.4268,31.42804],[34.42211,31.42437],[34.41326,31.41862],[34.41329,31.41758],[34.41174,31.41604],[34.40918,31.41542],[34.4067,31.41295],[34.40506,31.41295],[34.40197,31.4112],[34.40134,31.40986],[34.39492,31.40391],[34.39351,31.40113],[34.38824,31.39599],[34.38037,31.38951],[34.38074,31.38791],[34.37407,31.37915],[34.37338,31.37422],[34.37159,31.37209],[34.37214,31.37093],[34.37158,31.36972],[34.3704,31.36909],[34.36827,31.36992],[34.36685,31.36914],[34.36497,31.36137],[34.37438,31.30609],[34.36708,31.29074],[34.34339,31.27846],[34.33119,31.26149],[34.31931,31.25317],[34.29093,31.24009],[34.26762,31.21894],[34.25915,31.22131],[34.231,31.26295],[34.21113,31.32157],[34.2434,31.34554],[34.29954,31.39629],[34.34172,31.43251],[34.36439,31.45715],[34.41099,31.50162],[34.42619,31.52686],[34.44463,31.54193],[34.49022,31.59487]]],terms_url:"https://wiki.openstreetmap.org/wiki/2014_Gaza_Strip",terms_text:"Copyright CNES 2014, Distribution Airbus Defence and Space"},{id:"gaza_pleiades_20140706_nir",name:"Gaza Strip - Pléiades - 2014/07/06 (NIR)",type:"tms",template:"https://imagery.openstreetmap.fr/tms/1.0.0/gaza_pleiades_20140706_nir/{zoom}/{x}/{y}",endDate:"2014-07-06T00:00:00.000Z",startDate:"2014-07-06T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[34.49022,31.59487],[34.49339,31.59263],[34.5678,31.5401],[34.5653,31.53226],[34.55613,31.52552],[34.54729,31.5121],[34.53011,31.5066],[34.5255,31.50251],[34.51369,31.50067],[34.505,31.49543],[34.4887,31.48263],[34.48532,31.48028],[34.47962,31.47778],[34.47471,31.47207],[34.4674,31.46448],[34.46576,31.46275],[34.45308,31.45139],[34.44585,31.4441],[34.44216,31.44327],[34.43798,31.44112],[34.43226,31.43458],[34.43164,31.43265],[34.4268,31.42804],[34.42211,31.42437],[34.41326,31.41862],[34.41329,31.41758],[34.41174,31.41604],[34.40918,31.41542],[34.4067,31.41295],[34.40506,31.41295],[34.40197,31.4112],[34.40134,31.40986],[34.39492,31.40391],[34.39351,31.40113],[34.38824,31.39599],[34.38037,31.38951],[34.38074,31.38791],[34.37407,31.37915],[34.37338,31.37422],[34.37159,31.37209],[34.37214,31.37093],[34.37158,31.36972],[34.3704,31.36909],[34.36827,31.36992],[34.36685,31.36914],[34.36497,31.36137],[34.37438,31.30609],[34.36708,31.29074],[34.34339,31.27846],[34.33119,31.26149],[34.31931,31.25317],[34.29093,31.24009],[34.26762,31.21894],[34.25915,31.22131],[34.231,31.26295],[34.21113,31.32157],[34.2434,31.34554],[34.29954,31.39629],[34.34172,31.43251],[34.36439,31.45715],[34.41099,31.50162],[34.42619,31.52686],[34.44463,31.54193],[34.49022,31.59487]]],terms_url:"https://wiki.openstreetmap.org/wiki/2014_Gaza_Strip",terms_text:"Copyright CNES 2014, Distribution Airbus Defence and Space"},{id:"Geobase_Hydrography",name:"Geobase Hydrography - English",type:"wms",template:"https://maps.geogratis.gc.ca/wms/hydro_network_en?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=nhn:nhn&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]],overlay:true},{id:"Geobase_Hydrography_French",name:"Geobase Hydrography - French",type:"wms",template:"https://maps.geogratis.gc.ca/wms/hydro_network_fr?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=nhn:nhn&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]],overlay:true},{id:"Geobase_Roads",name:"Geobase Roads - English",type:"wms",template:"https://maps.geogratis.gc.ca/wms/roads_en?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=roads&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[4,20],polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{id:"Geobase_Roads_French",name:"Geobase Roads - French",type:"wms",template:"https://cartes.geogratis.gc.ca/wms/roads_fr?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=routes&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[4,20],polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{id:"geoimage.at",name:"Geoimage.at MaxRes",type:"wms",template:"https://gis.bmlfuw.gv.at/wmsgw/?key=4d80de696cd562a63ce463a58a61488d&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=Luftbild_MR,Luftbild_1m,Luftbild_8m,Satellitenbild_30m&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"http://geoimage.at",terms_text:"geoimage.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/GeoimageatMaxRes.png"},{id:"Geolittoral-Sentiers",name:"Géolittoral - Sentiers",type:"wms",template:"http://geolittoral.din.developpement-durable.gouv.fr/wxs?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=n_sentier_littoral_l&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-0.98385,46.18807],[-0.89497,46.15628],[-0.93455,46.10163],[-0.84388,46.06949],[-0.88241,46.01637],[-0.53787,45.89558],[-0.63498,45.76444],[-0.86666,45.8479],[-0.76264,45.6245],[-0.69695,45.62659],[-0.69397,45.60184],[-0.68755,45.60174],[-0.688,45.50986],[-0.63799,45.50892],[-0.63978,45.44747],[-0.61574,45.44695],[-0.61619,45.38586],[-0.58544,45.38596],[-0.58529,45.32334],[-0.55379,45.32344],[-0.55275,45.19661],[-0.49094,45.19577],[-0.49184,45.13315],[-0.45661,45.13325],[-0.45512,45.07161],[-0.41611,45.07089],[-0.41621,45.02696],[-0.2907,44.98278],[-0.22,45.06771],[-0.12252,45.02563],[-0.18925,44.94591],[-0.09266,44.91019],[-0.14521,44.8392],[-0.15491,44.84238],[-0.19387,44.78678],[-0.43541,44.87317],[-0.39048,44.68413],[-0.58798,44.66014],[-0.66628,44.99129],[-0.77838,44.99263],[-0.77764,45.05389],[-0.81584,45.05321],[-0.81838,45.11962],[-0.88393,45.12051],[-0.88171,45.18081],[-0.93438,45.18185],[-0.9328,45.24484],[-1.00163,45.24439],[-1.00247,45.30827],[-1.0524,45.31013],[-1.04828,45.36911],[-1.06412,45.36911],[-1.05039,45.18252],[-1.10761,44.80787],[-1.01514,44.80113],[-1.01946,44.76914],[-0.93365,44.76149],[-0.9404,44.7018],[-0.96035,44.56434],[-1.01408,44.56765],[-1.09916,44.1456],[-1.22689,44.14022],[-1.21853,44.03249],[-1.30762,44.029],[-1.39572,43.74301],[-1.31296,43.72951],[-1.37439,43.53109],[-1.34589,43.50606],[-1.59964,43.35423],[-1.76549,43.25548],[-1.79281,43.28038],[-1.80281,43.40425],[-1.72832,43.45033],[-1.58531,43.489],[-1.33584,44.22832],[-1.30744,44.41847],[-1.22511,45.44416],[-1.48685,46.06042],[-1.60176,46.17019],[-1.64442,46.22375],[-1.75643,46.42214],[-2.03483,46.61895],[-2.3466,46.62382],[-2.46561,46.71196],[-2.3233,46.83812],[-2.45286,46.93856],[-2.31733,47.16214],[-2.92848,47.28413],[-2.96742,47.22147],[-3.35602,47.32474],[-3.18803,47.48441],[-3.22791,47.61132],[-3.38912,47.59473],[-3.9162,47.67831],[-4.10163,47.70921],[-4.14314,47.78847],[-4.37619,47.71067],[-4.47962,47.9776],[-4.98565,47.99896],[-4.96938,48.08972],[-4.60147,48.11469],[-4.5921,48.14758],[-4.67101,48.2331],[-4.84243,48.3005],[-5.19867,48.44926],[-5.10346,48.51722],[-4.83515,48.54319],[-4.63117,48.66129],[-3.96692,48.77978],[-3.94939,48.74715],[-3.67013,48.89508],[-3.54444,48.90297],[-3.40954,48.91866],[-3.33344,48.90458],[-3.02769,48.9275],[-2.80207,48.79793],[-2.69353,48.76722],[-2.45786,48.70896],[-2.28475,48.71909],[-2.17543,48.65016],[-2.0137,48.73221],[-1.80953,48.73178],[-1.7243,48.75828],[-1.70557,48.84512],[-1.90304,48.86288],[-1.91027,48.92348],[-1.68714,48.93249],[-1.74277,49.24473],[-1.85748,49.3253],[-1.9262,49.65573],[-2.03908,49.67872],[-2.00445,49.76087],[-1.61759,49.68498],[-1.28373,49.76067],[-1.1492,49.63504],[-1.18545,49.54836],[-0.96463,49.42509],[-0.74429,49.36802],[-0.39014,49.3622],[-0.24976,49.3158],[-0.13342,49.31293],[0.02731,49.37619],[0.01801,49.54656],[0.12211,49.69292],[0.51713,49.86466],[1.05727,49.94904],[1.43908,50.11819],[1.53177,50.46437],[1.52549,50.85867],[1.64118,50.95919],[2.59712,51.17355],[2.66071,51.0196],[2.07124,50.92022],[2.05937,50.94709],[1.7976,50.89906],[1.68089,50.8717],[1.65569,50.59729],[1.75357,50.5932],[1.72295,50.24702],[1.82156,50.24262],[1.80149,50.05116],[1.54565,50.06311],[1.54155,50.01267],[1.42462,50.01747],[1.42667,50.05276],[1.03838,49.84609],[0.9827,49.88916],[0.57961,49.82133],[0.42063,49.76297],[0.4281,49.75445],[0.20831,49.67269],[0.14765,49.57767],[0.13461,49.5809],[0.11117,49.54365],[0.56598,49.52045],[0.5632,49.49989],[0.63001,49.49666],[0.61478,49.37441],[0.54825,49.37851],[0.54254,49.33461],[0.45741,49.33938],[0.45843,49.34492],[0.32597,49.35456],[0.32846,49.38128],[0.28011,49.38433],[0.27689,49.36334],[0.21095,49.36658],[0.20817,49.35084],[0.14326,49.35532],[0.13769,49.3115],[0.07204,49.31532],[0.0675,49.28713],[0.00274,49.29076],[0.00508,49.25711],[-0.02027,49.26036],[-0.03492,49.1973],[-0.19448,49.21463],[-0.38966,49.12726],[-0.45369,49.18792],[-0.3561,49.23214],[-0.82088,49.28331],[-0.99778,49.30149],[-1.16728,49.24545],[-1.19515,49.28183],[-1.26768,49.24099],[-1.34114,49.2975],[-1.24768,49.35025],[-1.44583,49.60689],[-1.81105,49.61757],[-1.77479,49.44333],[-1.72775,49.46509],[-1.5339,49.29098],[-1.47909,49.29233],[-1.47608,49.24027],[-1.43557,49.20326],[-1.47225,49.1822],[-1.45091,48.75725],[-1.31155,48.76408],[-1.30533,48.70216],[-1.2584,48.70421],[-1.25229,48.64353],[-1.23519,48.64435],[-1.2269,48.56824],[-1.85218,48.53086],[-1.84908,48.4975],[-1.92326,48.49187],[-1.92813,48.44096],[-2.04272,48.43601],[-2.03889,48.48191],[-2.2895,48.46102],[-2.3021,48.52433],[-2.40863,48.51618],[-2.42035,48.56954],[-2.43084,48.57852],[-2.49083,48.54924],[-2.47353,48.53326],[-2.54978,48.49647],[-2.54005,48.48747],[-2.70681,48.40746],[-3.02979,48.69115],[-4.01034,48.53179],[-4.05342,48.64412],[-4.38281,48.57349],[-4.35482,48.5118],[-4.38853,48.50473],[-4.13495,48.44868],[-4.16411,48.38936],[-4.01832,48.35685],[-4.04733,48.29918],[-3.98814,48.2867],[-4.0214,48.21606],[-4.03634,48.21958],[-4.06623,48.16028],[-4.16675,48.18247],[-4.18331,48.14934],[-4.17232,48.1065],[-4.20111,48.10285],[-4.18643,48.04389],[-4.18806,48.04061],[-4.35686,48.02305],[-4.25657,47.93997],[-4.23363,47.93497],[-4.21371,47.97598],[-4.21854,47.97726],[-4.1806,48.05569],[-3.6172,47.93124],[-2.17991,47.58642],[-2.25449,47.44501],[-2.30182,47.4568],[-2.32043,47.42092],[-2.30372,47.41755],[-2.34753,47.33499],[-2.36219,47.33837],[-2.38079,47.3039],[-2.35852,47.29854],[-2.29962,47.29784],[-2.29742,47.3618],[-2.13199,47.35852],[-2.13478,47.39107],[-2.01565,47.39623],[-2.01404,47.38095],[-1.92862,47.38254],[-1.92891,47.37956],[-1.8322,47.38184],[-1.82986,47.34165],[-1.73608,47.34304],[-1.73418,47.305],[-1.64084,47.30639],[-1.64011,47.29427],[-1.58355,47.29566],[-1.58531,47.33708],[-1.4612,47.33966],[-1.46003,47.32924],[-1.37211,47.33221],[-1.36054,47.11239],[-1.48567,47.11149],[-1.48582,47.11877],[-1.66897,47.11688],[-1.66971,47.12864],[-1.72553,47.12764],[-1.72612,47.13761],[-1.93975,47.13263],[-1.94019,47.1422],[-1.9925,47.14309],[-1.81066,47.00588],[-1.94723,46.92078],[-1.92891,46.90677],[-1.99529,46.86461],[-1.73652,46.66839],[-1.77535,46.64386],[-1.82678,46.64174],[-1.82473,46.62071],[-1.18192,46.39987],[-0.91261,46.3048],[-0.95481,46.2489],[-0.94235,46.24424],[-0.98385,46.18807]],[[3.14769,42.40072],[3.14949,42.40015],[3.15305,42.40052],[3.15804,42.40243],[3.1877,42.42805],[3.14227,42.5248],[3.06837,42.54635],[3.04884,42.6942],[3.0799,43.03073],[3.22641,43.18727],[3.40916,43.26032],[3.52104,43.25877],[3.66429,43.37628],[3.73841,43.39054],[4.00979,43.53607],[4.17692,43.45636],[4.54355,43.43349],[4.54943,43.35401],[4.83506,43.30891],[4.97506,43.38309],[5.03219,43.31928],[5.25919,43.31928],[5.31082,43.20504],[5.35682,43.18645],[5.36882,43.16785],[5.40232,43.16211],[5.41382,43.17123],[5.40919,43.19921],[5.54232,43.18827],[5.60582,43.14797],[5.6197,43.1529],[5.63832,43.17159],[5.67157,43.1674],[5.69095,43.13411],[5.77607,43.10637],[5.7762,43.09432],[5.75407,43.08328],[5.75707,43.0725],[5.77032,43.06465],[5.85933,43.03469],[5.8877,43.06273],[5.9567,43.06109],[5.96383,43.09277],[6.00033,43.09186],[6.01745,43.06849],[6.10233,43.07415],[6.10483,43.0526],[6.0666,43.04318],[6.06722,43.03785],[6.1427,43.00923],[6.15676,42.98715],[6.19635,42.97331],[6.22221,42.9801],[6.26891,42.99651],[6.25515,43.03627],[6.2019,43.02713],[6.18378,43.09188],[6.30153,43.09909],[6.32478,43.07974],[6.37778,43.08011],[6.38866,43.13395],[6.51341,43.14608],[6.57704,43.17881],[6.62291,43.14563],[6.69779,43.19969],[6.68016,43.23357],[6.72116,43.26007],[6.72241,43.27472],[6.67054,43.29192],[6.68741,43.33113],[6.72416,43.34267],[6.75291,43.409],[6.79104,43.39674],[6.90629,43.41672],[6.96767,43.50273],[6.96617,43.52812],[7.00617,43.53845],[7.03554,43.4982],[7.06892,43.5001],[7.09079,43.51642],[7.06267,43.53672],[7.08254,43.5456],[7.1238,43.53074],[7.1558,43.5437],[7.1433,43.62284],[7.16867,43.64636],[7.2138,43.63469],[7.25417,43.68497],[7.3403,43.66744],[7.36442,43.6894],[7.35305,43.7082],[7.4163,43.71091],[7.45405,43.74506],[7.4943,43.74524],[7.57943,43.78424],[7.60552,43.78603],[7.60368,43.78898],[7.59588,43.79528],[7.59628,43.79549],[7.53853,43.84195],[7.45996,43.79988],[7.44781,43.80934],[7.32353,43.74806],[7.30822,43.76357],[6.64878,43.3885],[6.66865,43.37178],[6.51003,43.27803],[6.56584,43.22509],[6.12681,43.10527],[5.48229,43.24939],[5.47267,43.2309],[5.41567,43.24657],[5.45267,43.3451],[4.80191,43.48158],[4.76416,43.39244],[4.65716,43.42368],[4.67228,43.45608],[4.43203,43.52419],[4.41453,43.49255],[4.16102,43.56433],[4.14452,43.57067],[4.14165,43.57393],[4.18677,43.59946],[4.10565,43.68196],[3.79689,43.52165],[3.77851,43.51313],[3.76464,43.50597],[3.76201,43.50334],[3.74226,43.49328],[3.71601,43.52075],[3.26213,43.28143],[3.24638,43.29735],[3.18388,43.28052],[3.10675,43.24083],[3.15475,43.19419],[2.90625,43.19383],[2.90675,42.76189],[2.94613,42.76208],[2.9465,42.61516],[2.99238,42.61497],[2.99238,42.5125],[3.041,42.51259],[3.04121,42.50093],[3.09086,42.50082],[3.14769,42.40072]],[[6.35945,43.02321],[6.42477,43.02444],[6.45244,43.03504],[6.46985,43.05461],[6.51121,43.05765],[6.52156,43.04318],[6.48364,43.02444],[6.47179,43.00725],[6.41178,42.9918],[6.39852,42.98048],[6.35178,42.99905],[6.35945,43.02321]]],terms_url:"https://wiki.openstreetmap.org/wiki/WikiProject_France/G%C3%A9oLittoral",terms_text:"Ortho littorale 2000"},{id:"GeolittoralV2-Orthophotos",name:"Géolittoral V2 - Orthophotos 2011-2014",type:"wms",template:"http://geolittoral.din.developpement-durable.gouv.fr/wxs?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortholittorale_v2_rvb&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[-0.98385,46.18807],[-0.89497,46.15628],[-0.93455,46.10163],[-0.84388,46.06949],[-0.88241,46.01637],[-0.53787,45.89558],[-0.63498,45.76444],[-0.86666,45.8479],[-0.76264,45.6245],[-0.69695,45.62659],[-0.69397,45.60184],[-0.68755,45.60174],[-0.688,45.50986],[-0.63799,45.50892],[-0.63978,45.44747],[-0.61574,45.44695],[-0.61619,45.38586],[-0.58544,45.38596],[-0.58529,45.32334],[-0.55379,45.32344],[-0.55275,45.19661],[-0.49094,45.19577],[-0.49184,45.13315],[-0.45661,45.13325],[-0.45512,45.07161],[-0.41611,45.07089],[-0.41621,45.02696],[-0.2907,44.98278],[-0.22,45.06771],[-0.12252,45.02563],[-0.18925,44.94591],[-0.09266,44.91019],[-0.14521,44.8392],[-0.15491,44.84238],[-0.19387,44.78678],[-0.43541,44.87317],[-0.39048,44.68413],[-0.58798,44.66014],[-0.66628,44.99129],[-0.77838,44.99263],[-0.77764,45.05389],[-0.81584,45.05321],[-0.81838,45.11962],[-0.88393,45.12051],[-0.88171,45.18081],[-0.93438,45.18185],[-0.9328,45.24484],[-1.00163,45.24439],[-1.00247,45.30827],[-1.0524,45.31013],[-1.04828,45.36911],[-1.06412,45.36911],[-1.05039,45.18252],[-1.10761,44.80787],[-1.01514,44.80113],[-1.01946,44.76914],[-0.93365,44.76149],[-0.9404,44.7018],[-0.96035,44.56434],[-1.01408,44.56765],[-1.09916,44.1456],[-1.22689,44.14022],[-1.21853,44.03249],[-1.30762,44.029],[-1.39572,43.74301],[-1.31296,43.72951],[-1.37439,43.53109],[-1.34589,43.50606],[-1.59964,43.35423],[-1.76549,43.25548],[-1.79281,43.28038],[-1.80281,43.40425],[-1.72832,43.45033],[-1.58531,43.489],[-1.33584,44.22832],[-1.30744,44.41847],[-1.22511,45.44416],[-1.48685,46.06042],[-1.60176,46.17019],[-1.64442,46.22375],[-1.75643,46.42214],[-2.03483,46.61895],[-2.3466,46.62382],[-2.46561,46.71196],[-2.3233,46.83812],[-2.45286,46.93856],[-2.31733,47.16214],[-2.92848,47.28413],[-2.96742,47.22147],[-3.35602,47.32474],[-3.18803,47.48441],[-3.22791,47.61132],[-3.38912,47.59473],[-3.9162,47.67831],[-4.10163,47.70921],[-4.14314,47.78847],[-4.37619,47.71067],[-4.47962,47.9776],[-4.98565,47.99896],[-4.96938,48.08972],[-4.60147,48.11469],[-4.5921,48.14758],[-4.67101,48.2331],[-4.84243,48.3005],[-5.19867,48.44926],[-5.10346,48.51722],[-4.83515,48.54319],[-4.63117,48.66129],[-3.96692,48.77978],[-3.94939,48.74715],[-3.67013,48.89508],[-3.54444,48.90297],[-3.40954,48.91866],[-3.33344,48.90458],[-3.02769,48.9275],[-2.80207,48.79793],[-2.69353,48.76722],[-2.45786,48.70896],[-2.28475,48.71909],[-2.17543,48.65016],[-2.0137,48.73221],[-1.80953,48.73178],[-1.7243,48.75828],[-1.70557,48.84512],[-1.90304,48.86288],[-1.91027,48.92348],[-1.68714,48.93249],[-1.74277,49.24473],[-1.85748,49.3253],[-1.9262,49.65573],[-2.03908,49.67872],[-2.00445,49.76087],[-1.61759,49.68498],[-1.28373,49.76067],[-1.1492,49.63504],[-1.18545,49.54836],[-0.96463,49.42509],[-0.74429,49.36802],[-0.39014,49.3622],[-0.24976,49.3158],[-0.13342,49.31293],[0.02731,49.37619],[0.01801,49.54656],[0.12211,49.69292],[0.51713,49.86466],[1.05727,49.94904],[1.43908,50.11819],[1.53177,50.46437],[1.52549,50.85867],[1.64118,50.95919],[2.59712,51.17355],[2.66071,51.0196],[2.07124,50.92022],[2.05937,50.94709],[1.7976,50.89906],[1.68089,50.8717],[1.65569,50.59729],[1.75357,50.5932],[1.72295,50.24702],[1.82156,50.24262],[1.80149,50.05116],[1.54565,50.06311],[1.54155,50.01267],[1.42462,50.01747],[1.42667,50.05276],[1.03838,49.84609],[0.9827,49.88916],[0.57961,49.82133],[0.42063,49.76297],[0.4281,49.75445],[0.20831,49.67269],[0.14765,49.57767],[0.13461,49.5809],[0.11117,49.54365],[0.56598,49.52045],[0.5632,49.49989],[0.63001,49.49666],[0.61478,49.37441],[0.54825,49.37851],[0.54254,49.33461],[0.45741,49.33938],[0.45843,49.34492],[0.32597,49.35456],[0.32846,49.38128],[0.28011,49.38433],[0.27689,49.36334],[0.21095,49.36658],[0.20817,49.35084],[0.14326,49.35532],[0.13769,49.3115],[0.07204,49.31532],[0.0675,49.28713],[0.00274,49.29076],[0.00508,49.25711],[-0.02027,49.26036],[-0.03492,49.1973],[-0.19448,49.21463],[-0.38966,49.12726],[-0.45369,49.18792],[-0.3561,49.23214],[-0.82088,49.28331],[-0.99778,49.30149],[-1.16728,49.24545],[-1.19515,49.28183],[-1.26768,49.24099],[-1.34114,49.2975],[-1.24768,49.35025],[-1.44583,49.60689],[-1.81105,49.61757],[-1.77479,49.44333],[-1.72775,49.46509],[-1.5339,49.29098],[-1.47909,49.29233],[-1.47608,49.24027],[-1.43557,49.20326],[-1.47225,49.1822],[-1.45091,48.75725],[-1.31155,48.76408],[-1.30533,48.70216],[-1.2584,48.70421],[-1.25229,48.64353],[-1.23519,48.64435],[-1.2269,48.56824],[-1.85218,48.53086],[-1.84908,48.4975],[-1.92326,48.49187],[-1.92813,48.44096],[-2.04272,48.43601],[-2.03889,48.48191],[-2.2895,48.46102],[-2.3021,48.52433],[-2.40863,48.51618],[-2.42035,48.56954],[-2.43084,48.57852],[-2.49083,48.54924],[-2.47353,48.53326],[-2.54978,48.49647],[-2.54005,48.48747],[-2.70681,48.40746],[-3.02979,48.69115],[-4.01034,48.53179],[-4.05342,48.64412],[-4.38281,48.57349],[-4.35482,48.5118],[-4.38853,48.50473],[-4.13495,48.44868],[-4.16411,48.38936],[-4.01832,48.35685],[-4.04733,48.29918],[-3.98814,48.2867],[-4.0214,48.21606],[-4.03634,48.21958],[-4.06623,48.16028],[-4.16675,48.18247],[-4.18331,48.14934],[-4.17232,48.1065],[-4.20111,48.10285],[-4.18643,48.04389],[-4.18806,48.04061],[-4.35686,48.02305],[-4.25657,47.93997],[-4.23363,47.93497],[-4.21371,47.97598],[-4.21854,47.97726],[-4.1806,48.05569],[-3.6172,47.93124],[-2.17991,47.58642],[-2.25449,47.44501],[-2.30182,47.4568],[-2.32043,47.42092],[-2.30372,47.41755],[-2.34753,47.33499],[-2.36219,47.33837],[-2.38079,47.3039],[-2.35852,47.29854],[-2.29962,47.29784],[-2.29742,47.3618],[-2.13199,47.35852],[-2.13478,47.39107],[-2.01565,47.39623],[-2.01404,47.38095],[-1.92862,47.38254],[-1.92891,47.37956],[-1.8322,47.38184],[-1.82986,47.34165],[-1.73608,47.34304],[-1.73418,47.305],[-1.64084,47.30639],[-1.64011,47.29427],[-1.58355,47.29566],[-1.58531,47.33708],[-1.4612,47.33966],[-1.46003,47.32924],[-1.37211,47.33221],[-1.36054,47.11239],[-1.48567,47.11149],[-1.48582,47.11877],[-1.66897,47.11688],[-1.66971,47.12864],[-1.72553,47.12764],[-1.72612,47.13761],[-1.93975,47.13263],[-1.94019,47.1422],[-1.9925,47.14309],[-1.81066,47.00588],[-1.94723,46.92078],[-1.92891,46.90677],[-1.99529,46.86461],[-1.73652,46.66839],[-1.77535,46.64386],[-1.82678,46.64174],[-1.82473,46.62071],[-1.18192,46.39987],[-0.91261,46.3048],[-0.95481,46.2489],[-0.94235,46.24424],[-0.98385,46.18807]],[[3.14769,42.40072],[3.14949,42.40015],[3.15305,42.40052],[3.15804,42.40243],[3.1877,42.42805],[3.14227,42.5248],[3.06837,42.54635],[3.04884,42.6942],[3.0799,43.03073],[3.22641,43.18727],[3.40916,43.26032],[3.52104,43.25877],[3.66429,43.37628],[3.73841,43.39054],[4.00979,43.53607],[4.17692,43.45636],[4.54355,43.43349],[4.54943,43.35401],[4.83506,43.30891],[4.97506,43.38309],[5.03219,43.31928],[5.25919,43.31928],[5.31082,43.20504],[5.35682,43.18645],[5.36882,43.16785],[5.40232,43.16211],[5.41382,43.17123],[5.40919,43.19921],[5.54232,43.18827],[5.60582,43.14797],[5.6197,43.1529],[5.63832,43.17159],[5.67157,43.1674],[5.69095,43.13411],[5.77607,43.10637],[5.7762,43.09432],[5.75407,43.08328],[5.75707,43.0725],[5.77032,43.06465],[5.85933,43.03469],[5.8877,43.06273],[5.9567,43.06109],[5.96383,43.09277],[6.00033,43.09186],[6.01745,43.06849],[6.10233,43.07415],[6.10483,43.0526],[6.0666,43.04318],[6.06722,43.03785],[6.1427,43.00923],[6.15676,42.98715],[6.19635,42.97331],[6.22221,42.9801],[6.26891,42.99651],[6.25515,43.03627],[6.2019,43.02713],[6.18378,43.09188],[6.30153,43.09909],[6.32478,43.07974],[6.37778,43.08011],[6.38866,43.13395],[6.51341,43.14608],[6.57704,43.17881],[6.62291,43.14563],[6.69779,43.19969],[6.68016,43.23357],[6.72116,43.26007],[6.72241,43.27472],[6.67054,43.29192],[6.68741,43.33113],[6.72416,43.34267],[6.75291,43.409],[6.79104,43.39674],[6.90629,43.41672],[6.96767,43.50273],[6.96617,43.52812],[7.00617,43.53845],[7.03554,43.4982],[7.06892,43.5001],[7.09079,43.51642],[7.06267,43.53672],[7.08254,43.5456],[7.1238,43.53074],[7.1558,43.5437],[7.1433,43.62284],[7.16867,43.64636],[7.2138,43.63469],[7.25417,43.68497],[7.3403,43.66744],[7.36442,43.6894],[7.35305,43.7082],[7.4163,43.71091],[7.45405,43.74506],[7.4943,43.74524],[7.57943,43.78424],[7.60552,43.78603],[7.60368,43.78898],[7.59588,43.79528],[7.59628,43.79549],[7.53853,43.84195],[7.45996,43.79988],[7.44781,43.80934],[7.32353,43.74806],[7.30822,43.76357],[6.64878,43.3885],[6.66865,43.37178],[6.51003,43.27803],[6.56584,43.22509],[6.12681,43.10527],[5.48229,43.24939],[5.47267,43.2309],[5.41567,43.24657],[5.45267,43.3451],[4.80191,43.48158],[4.76416,43.39244],[4.65716,43.42368],[4.67228,43.45608],[4.43203,43.52419],[4.41453,43.49255],[4.16102,43.56433],[4.14452,43.57067],[4.14165,43.57393],[4.18677,43.59946],[4.10565,43.68196],[3.79689,43.52165],[3.77851,43.51313],[3.76464,43.50597],[3.76201,43.50334],[3.74226,43.49328],[3.71601,43.52075],[3.26213,43.28143],[3.24638,43.29735],[3.18388,43.28052],[3.10675,43.24083],[3.15475,43.19419],[2.90625,43.19383],[2.90675,42.76189],[2.94613,42.76208],[2.9465,42.61516],[2.99238,42.61497],[2.99238,42.5125],[3.041,42.51259],[3.04121,42.50093],[3.09086,42.50082],[3.14769,42.40072]],[[6.35945,43.02321],[6.42477,43.02444],[6.45244,43.03504],[6.46985,43.05461],[6.51121,43.05765],[6.52156,43.04318],[6.48364,43.02444],[6.47179,43.00725],[6.41178,42.9918],[6.39852,42.98048],[6.35178,42.99905],[6.35945,43.02321]]],terms_url:"https://wiki.openstreetmap.org/wiki/WikiProject_France/G%C3%A9oLittoral",terms_text:"Ortho Littorale V2 - MEDDE"},{id:"lu.geoportail.opendata.ortho_10cm_proto_lidar",name:"geoportail.lu LIDAR prototype Nordstad 2017",type:"tms",template:"https://{switch:wmts1,wmts2}.geoportail.lu/opendata/wmts/ortho_10cm_proto_lidar/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg",endDate:"2017-04-09T00:00:00.000Z",startDate:"2017-04-09T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[6.05001,49.82175],[6.04979,49.91166],[6.18901,49.91172],[6.18897,49.82181],[6.05001,49.82175]]],terms_url:"https://act.public.lu/fr/cartographie/lidar",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"Geoportal2-PL-aerial_image",name:"Geoportal 2: Orthophotomap (aerial image)",type:"wms",template:"http://mapy.geoportal.gov.pl/wss/service/img/guest/ORTO/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Raster&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}{header(User-Agent,Mozilla/5.0 (JOSM)}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[15.9751,54.37092],[16.31116,54.55618],[17.13919,54.78457],[18.34485,54.90227],[19.66137,54.47372],[20.28152,54.42135],[21.46639,54.34064],[22.77599,54.37698],[22.8626,54.42336],[23.29567,54.26786],[23.53472,54.09553],[23.52086,53.97752],[23.71834,53.46296],[23.92968,53.18567],[23.92968,52.68873],[23.7322,52.60675],[23.5659,52.58781],[23.20905,52.33026],[23.19519,52.23701],[23.50354,52.18606],[23.69062,52.00301],[23.59708,51.7399],[23.66291,51.38886],[23.9366,50.98278],[24.16873,50.86048],[24.01975,50.80358],[24.10983,50.66105],[24.05786,50.41884],[23.61787,50.30834],[22.68244,49.51635],[22.73788,49.20949],[22.90417,49.07804],[22.8626,48.99401],[22.60969,49.03718],[22.07615,49.20044],[21.84749,49.37219],[21.37631,49.44883],[21.10262,49.37219],[20.91207,49.3022],[20.6453,49.39023],[20.18451,49.33156],[20.11869,49.20044],[19.942,49.13021],[19.76531,49.21176],[19.74798,49.39925],[19.60247,49.41503],[19.50893,49.58154],[19.42925,49.59052],[19.23177,49.41503],[18.99618,49.38798],[18.93382,49.4916],[18.83681,49.49386],[18.80216,49.66234],[18.6428,49.70941],[18.52154,49.89947],[18.08154,50.01092],[17.88753,49.98865],[17.73855,50.06877],[17.6069,50.17096],[17.74548,50.21532],[17.71084,50.3017],[17.41635,50.26407],[16.94864,50.44533],[16.89321,50.40339],[17.00061,50.31055],[17.01793,50.22419],[16.81352,50.18649],[16.64029,50.09767],[16.43242,50.28621],[16.19683,50.42767],[16.42203,50.58852],[16.33888,50.66324],[16.22802,50.63688],[16.05479,50.61271],[15.57322,50.76415],[15.26834,50.89764],[15.24409,50.9806],[15.02929,51.0133],[15.00157,50.85829],[14.81102,50.87359],[14.95653,51.07212],[15.01889,51.29146],[14.93921,51.46015],[14.72094,51.55718],[14.75212,51.62606],[14.59968,51.84276],[14.70362,52.07334],[14.55811,52.24974],[14.51654,52.42544],[14.60315,52.58781],[14.11465,52.82083],[14.15276,52.9734],[14.35024,53.07342],[14.42299,53.26656],[14.1978,53.87348],[14.22205,53.99585],[15.9751,54.37092]]],terms_url:"https://geoportal.gov.pl/web/guest/regulamin",terms_text:"Główny Urząd Geodezji i Kartografii",best:true,icon:"https://wiki.openstreetmap.org/w/images/2/25/Geoportal-josm.png"},{id:"Geoportal2-PL-prng",name:"Geoportal 2: PRNG (geo names)",type:"wms",template:"http://mapy.geoportal.gov.pl/wss/service/pub/guest/G2_PRNG_WMS/MapServer/WMSServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=PozostaleObiektyFizjograficzne,Hydrografia,PozostaleMiejscowosci,Wies,UksztaltowanieTerenu&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}{header(User-Agent,Mozilla/5.0 (JOSM)}",projection:"EPSG:4326",polygon:[[[15.9751,54.37092],[16.31116,54.55618],[17.13919,54.78457],[18.34485,54.90227],[19.66137,54.47372],[20.28152,54.42135],[21.46639,54.34064],[22.77599,54.37698],[22.8626,54.42336],[23.29567,54.26786],[23.53472,54.09553],[23.52086,53.97752],[23.71834,53.46296],[23.92968,53.18567],[23.92968,52.68873],[23.7322,52.60675],[23.5659,52.58781],[23.20905,52.33026],[23.19519,52.23701],[23.50354,52.18606],[23.69062,52.00301],[23.59708,51.7399],[23.66291,51.38886],[23.9366,50.98278],[24.16873,50.86048],[24.01975,50.80358],[24.10983,50.66105],[24.05786,50.41884],[23.61787,50.30834],[22.68244,49.51635],[22.73788,49.20949],[22.90417,49.07804],[22.8626,48.99401],[22.60969,49.03718],[22.07615,49.20044],[21.84749,49.37219],[21.37631,49.44883],[21.10262,49.37219],[20.91207,49.3022],[20.6453,49.39023],[20.18451,49.33156],[20.11869,49.20044],[19.942,49.13021],[19.76531,49.21176],[19.74798,49.39925],[19.60247,49.41503],[19.50893,49.58154],[19.42925,49.59052],[19.23177,49.41503],[18.99618,49.38798],[18.93382,49.4916],[18.83681,49.49386],[18.80216,49.66234],[18.6428,49.70941],[18.52154,49.89947],[18.08154,50.01092],[17.88753,49.98865],[17.73855,50.06877],[17.6069,50.17096],[17.74548,50.21532],[17.71084,50.3017],[17.41635,50.26407],[16.94864,50.44533],[16.89321,50.40339],[17.00061,50.31055],[17.01793,50.22419],[16.81352,50.18649],[16.64029,50.09767],[16.43242,50.28621],[16.19683,50.42767],[16.42203,50.58852],[16.33888,50.66324],[16.22802,50.63688],[16.05479,50.61271],[15.57322,50.76415],[15.26834,50.89764],[15.24409,50.9806],[15.02929,51.0133],[15.00157,50.85829],[14.81102,50.87359],[14.95653,51.07212],[15.01889,51.29146],[14.93921,51.46015],[14.72094,51.55718],[14.75212,51.62606],[14.59968,51.84276],[14.70362,52.07334],[14.55811,52.24974],[14.51654,52.42544],[14.60315,52.58781],[14.11465,52.82083],[14.15276,52.9734],[14.35024,53.07342],[14.42299,53.26656],[14.1978,53.87348],[14.22205,53.99585],[15.9751,54.37092]]],terms_url:"http://www.codgik.gov.pl/index.php/darmowe-dane/prng.html",terms_text:"Centralny Ośrodek Dokumentacji Geodezyjnej i Kartograficznej",icon:"https://wiki.openstreetmap.org/w/images/2/25/Geoportal-josm.png",overlay:true},{id:"Geoportal-PL-aerial_image",name:"Geoportal.gov.pl (Orthophotomap)",type:"tms",template:"https://wms.misek.pl/geoportal.orto/tms/{zoom}/{x}/{y}",zoomExtent:[6,24],polygon:[[[15.9751,54.37092],[16.31116,54.55618],[17.13919,54.78457],[18.34485,54.90227],[19.66137,54.47372],[20.28152,54.42135],[21.46639,54.34064],[22.77599,54.37698],[22.8626,54.42336],[23.29567,54.26786],[23.53472,54.09553],[23.52086,53.97752],[23.71834,53.46296],[23.92968,53.18567],[23.92968,52.68873],[23.7322,52.60675],[23.5659,52.58781],[23.20905,52.33026],[23.19519,52.23701],[23.50354,52.18606],[23.69062,52.00301],[23.59708,51.7399],[23.66291,51.38886],[23.9366,50.98278],[24.16873,50.86048],[24.01975,50.80358],[24.10983,50.66105],[24.05786,50.41884],[23.61787,50.30834],[22.68244,49.51635],[22.73788,49.20949],[22.90417,49.07804],[22.8626,48.99401],[22.60969,49.03718],[22.07615,49.20044],[21.84749,49.37219],[21.37631,49.44883],[21.10262,49.37219],[20.91207,49.3022],[20.6453,49.39023],[20.18451,49.33156],[20.11869,49.20044],[19.942,49.13021],[19.76531,49.21176],[19.74798,49.39925],[19.60247,49.41503],[19.50893,49.58154],[19.42925,49.59052],[19.23177,49.41503],[18.99618,49.38798],[18.93382,49.4916],[18.83681,49.49386],[18.80216,49.66234],[18.6428,49.70941],[18.52154,49.89947],[18.08154,50.01092],[17.88753,49.98865],[17.73855,50.06877],[17.6069,50.17096],[17.74548,50.21532],[17.71084,50.3017],[17.41635,50.26407],[16.94864,50.44533],[16.89321,50.40339],[17.00061,50.31055],[17.01793,50.22419],[16.81352,50.18649],[16.64029,50.09767],[16.43242,50.28621],[16.19683,50.42767],[16.42203,50.58852],[16.33888,50.66324],[16.22802,50.63688],[16.05479,50.61271],[15.57322,50.76415],[15.26834,50.89764],[15.24409,50.9806],[15.02929,51.0133],[15.00157,50.85829],[14.81102,50.87359],[14.95653,51.07212],[15.01889,51.29146],[14.93921,51.46015],[14.72094,51.55718],[14.75212,51.62606],[14.59968,51.84276],[14.70362,52.07334],[14.55811,52.24974],[14.51654,52.42544],[14.60315,52.58781],[14.11465,52.82083],[14.15276,52.9734],[14.35024,53.07342],[14.42299,53.26656],[14.1978,53.87348],[14.22205,53.99585],[15.9751,54.37092]]],terms_text:"Copyright © Główny Urząd Geodezji i Kartografii.",best:true,icon:"https://i.imgur.com/aFlvMpM.png"},{id:"girau_do_pnciano",name:"Girau do Ponciano",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Girau%20do%20Ponciano&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.78013,-9.92939],[-36.78087,-9.83892],[-36.87233,-9.83917],[-36.87173,-9.90542],[-36.87037,-9.92989],[-36.86156,-9.92994],[-36.85566,-9.92981],[-36.85146,-9.92973],[-36.84575,-9.92977],[-36.83213,-9.92967],[-36.81456,-9.9296],[-36.78013,-9.92939]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"Gliwice-buildings",name:"Gliwice: Buildings",type:"wms",template:"http://185.60.246.14:9090/isdp/gs/ows?FORMAT=image/png&transparent=true&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=default:EGIB_budynek,default:pkt_adr&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[18.57376,50.34828],[18.58723,50.35464],[18.58421,50.3601],[18.59264,50.37522],[18.65228,50.38297],[18.67384,50.37675],[18.67672,50.36174],[18.69218,50.34467],[18.70805,50.33799],[18.74154,50.3391],[18.75145,50.33046],[18.74679,50.31236],[18.75512,50.30193],[18.76358,50.29989],[18.76539,50.26873],[18.744,50.26541],[18.73482,50.25377],[18.72775,50.22843],[18.71439,50.22835],[18.71426,50.21978],[18.67522,50.21969],[18.67607,50.22562],[18.65098,50.23169],[18.6288,50.22539],[18.61744,50.24044],[18.62699,50.24369],[18.6315,50.25487],[18.61406,50.2576],[18.60319,50.25206],[18.56536,50.24763],[18.54841,50.2492],[18.55857,50.2826],[18.5459,50.29947],[18.52896,50.33687],[18.55118,50.35332],[18.57376,50.34828]]],terms_text:"Urząd Miasta Gliwice"},{id:"gothenburg-citymap",name:"Gothenburg City map",type:"wms",template:"https://opengeodata.goteborg.se/services/stadskarta.wms.v4/ows?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=stadskarta&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,21],polygon:[[[10.8078,58.34266],[13.0258,58.34266],[13.0258,57.0896],[11.70328,57.0896],[10.8078,58.34266]]],terms_url:"https://catalog.goteborg.se/catalog/6/datasets/718",terms_text:"© Gothenburg municipality, CC0",best:true,description:"The city map is an overview map that describes Gothenburg. It contains general information about land, communications, hydrography, buildings, address numbers and street names, administrative division and other orientation text.",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/G%C3%B6teborg_kommunvapen_-_Riksarkivet_Sverige.png/206px-G%C3%B6teborg_kommunvapen_-_Riksarkivet_Sverige.png"},{id:"GRAFCAN_Express-Canary_Islands",name:"GRAFCAN OrtoExpress - Canary Islands",type:"wms",template:"https://idecan1.grafcan.es/ServicioWMS/OrtoExpress?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=ortoexpress&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[-17.92917,28.89106],[-18.03334,28.79981],[-18.03743,28.73178],[-17.87811,28.43224],[-17.83113,28.41787],[-17.72696,28.56328],[-17.73105,28.67982],[-17.68407,28.73715],[-17.75352,28.86781],[-17.85768,28.86065],[-17.92917,28.89106]],[[-18.07818,27.77211],[-18.13707,27.78751],[-18.17054,27.76441],[-18.1779,27.70695],[-18.15782,27.68799],[-18.0581,27.6791],[-18.00656,27.62574],[-17.96105,27.62218],[-17.93896,27.70814],[-17.90751,27.7194],[-17.86199,27.80468],[-17.8727,27.84079],[-17.92558,27.86801],[-18.00522,27.83605],[-18.01392,27.8035],[-18.07818,27.77211]],[[-17.26878,28.23996],[-17.33403,28.21933],[-17.36331,28.1537],[-17.36666,28.08803],[-17.33069,28.04742],[-17.27296,28.00681],[-17.20017,28.00533],[-17.14412,28.02896],[-17.07803,28.0836],[-17.08723,28.1537],[-17.1826,28.2149],[-17.26878,28.23996]],[[-16.9358,28.37623],[-16.945,28.33574],[-16.71995,27.98317],[-16.62541,27.98317],[-16.52753,28.01641],[-16.39953,28.14632],[-16.33594,28.30922],[-16.33009,28.36445],[-16.10253,28.52408],[-16.09834,28.5814],[-16.14268,28.62547],[-16.33929,28.59609],[-16.43801,28.53143],[-16.53924,28.44025],[-16.83959,28.41229],[-16.9358,28.37623]],[[-15.68833,28.20585],[-15.47395,28.16437],[-15.42427,28.21046],[-15.36283,28.17244],[-15.38375,28.05598],[-15.33146,27.98444],[-15.3576,27.8042],[-15.5916,27.69777],[-15.7001,27.73365],[-15.79944,27.80305],[-15.87134,27.92439],[-15.84781,28.03637],[-15.74716,28.08943],[-15.73147,28.18396],[-15.68833,28.20585]],[[-14.50882,28.13448],[-14.41078,28.13448],[-14.24868,28.24278],[-14.23822,28.34637],[-14.03953,28.73911],[-13.89442,28.78265],[-13.78592,28.77692],[-13.82122,28.38433],[-13.91534,28.19095],[-14.18593,28.13563],[-14.30881,28.00529],[-14.54019,28.05144],[-14.50882,28.13448]],[[-13.5525,29.37727],[-13.50868,29.36824],[-13.47955,29.38728],[-13.47543,29.40963],[-13.5003,29.42807],[-13.5505,29.40712],[-13.5525,29.37727]],[[-13.3976,29.16102],[-13.42814,29.12157],[-13.44174,28.99084],[-13.53899,28.91947],[-13.70841,28.88468],[-13.77116,28.80865],[-13.90083,28.83522],[-13.90711,28.88926],[-13.85796,28.93686],[-13.85691,29.03657],[-13.67599,29.14988],[-13.56723,29.15719],[-13.55428,29.35073],[-13.39988,29.21806],[-13.3976,29.16102]],[[-13.33792,29.28667],[-13.35035,29.27436],[-13.3386,29.26533],[-13.32617,29.27765],[-13.33792,29.28667]]],terms_url:"https://catalogo.idecanarias.es/geonetwork/srv/spa/catalog.search#/metadata/spagrafcan_ORTOWMS_20160101",terms_text:"GRAFCAN OrtoExpress",description:"High resolution imagery covering the Canary Islands, 20 cm/pixel. More recent in some urban areas than the higher-resolution \"GRAFCAN OrtoExpress Urbana\"."},{id:"GRAFCAN-Canary_Islands",name:"GRAFCAN OrtoExpress Urbana - Canary Islands",type:"wms",template:"https://idecan1.grafcan.es/ServicioWMS/OrtoUrb?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OU&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[-17.92917,28.89106],[-18.03334,28.79981],[-18.03743,28.73178],[-17.87811,28.43224],[-17.83113,28.41787],[-17.72696,28.56328],[-17.73105,28.67982],[-17.68407,28.73715],[-17.75352,28.86781],[-17.85768,28.86065],[-17.92917,28.89106]],[[-18.07818,27.77211],[-18.13707,27.78751],[-18.17054,27.76441],[-18.1779,27.70695],[-18.15782,27.68799],[-18.0581,27.6791],[-18.00656,27.62574],[-17.96105,27.62218],[-17.93896,27.70814],[-17.90751,27.7194],[-17.86199,27.80468],[-17.8727,27.84079],[-17.92558,27.86801],[-18.00522,27.83605],[-18.01392,27.8035],[-18.07818,27.77211]],[[-17.26878,28.23996],[-17.33403,28.21933],[-17.36331,28.1537],[-17.36666,28.08803],[-17.33069,28.04742],[-17.27296,28.00681],[-17.20017,28.00533],[-17.14412,28.02896],[-17.07803,28.0836],[-17.08723,28.1537],[-17.1826,28.2149],[-17.26878,28.23996]],[[-16.9358,28.37623],[-16.945,28.33574],[-16.71995,27.98317],[-16.62541,27.98317],[-16.52753,28.01641],[-16.39953,28.14632],[-16.33594,28.30922],[-16.33009,28.36445],[-16.10253,28.52408],[-16.09834,28.5814],[-16.14268,28.62547],[-16.33929,28.59609],[-16.43801,28.53143],[-16.53924,28.44025],[-16.83959,28.41229],[-16.9358,28.37623]],[[-15.68833,28.20585],[-15.47395,28.16437],[-15.42427,28.21046],[-15.36283,28.17244],[-15.38375,28.05598],[-15.33146,27.98444],[-15.3576,27.8042],[-15.5916,27.69777],[-15.7001,27.73365],[-15.79944,27.80305],[-15.87134,27.92439],[-15.84781,28.03637],[-15.74716,28.08943],[-15.73147,28.18396],[-15.68833,28.20585]],[[-14.50882,28.13448],[-14.41078,28.13448],[-14.24868,28.24278],[-14.23822,28.34637],[-14.03953,28.73911],[-13.89442,28.78265],[-13.78592,28.77692],[-13.82122,28.38433],[-13.91534,28.19095],[-14.18593,28.13563],[-14.30881,28.00529],[-14.54019,28.05144],[-14.50882,28.13448]],[[-13.5525,29.37727],[-13.50868,29.36824],[-13.47955,29.38728],[-13.47543,29.40963],[-13.5003,29.42807],[-13.5505,29.40712],[-13.5525,29.37727]],[[-13.3976,29.16102],[-13.42814,29.12157],[-13.44174,28.99084],[-13.53899,28.91947],[-13.70841,28.88468],[-13.77116,28.80865],[-13.90083,28.83522],[-13.90711,28.88926],[-13.85796,28.93686],[-13.85691,29.03657],[-13.67599,29.14988],[-13.56723,29.15719],[-13.55428,29.35073],[-13.39988,29.21806],[-13.3976,29.16102]],[[-13.33792,29.28667],[-13.35035,29.27436],[-13.3386,29.26533],[-13.32617,29.27765],[-13.33792,29.28667]]],terms_url:"https://catalogo.idecanarias.es/geonetwork/srv/spa/catalog.search#/metadata/spagrafcan_ORTOURBANAWMS_20160101",terms_text:"GRAFCAN OrtoExpress Urbana",best:true,description:"High resolution imagery covering the Canary Islands, 12.5 or 10 cm/pixel in urban areas, and 20 cm/pixel elsewhere. Older in some urban areas than the lower-resolution \"GRAFCAN OrtoExpress\"."},{id:"GrandNancy_Orthophotographie_2012",name:"GrandNancy - Orthophoto - 2012",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/nancy_2012/{zoom}/{x}/{y}",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[6.06066,48.60554],[6.29717,48.59923],[6.30611,48.74077],[6.06896,48.7471],[6.06066,48.60554]]],terms_url:"https://wiki.openstreetmap.org/wiki/Nancy/Orthophotographie",terms_text:"GrandNancy Orthophotographie 2012"},{id:"GURS-buildings",name:"GURS: Building outlines",type:"tms",template:"https://wms.openstreetmap.de/tms/GURS-building-outlines/{zoom}/{x}/{y}.png",zoomExtent:[8,19],polygon:[[[15.17101,45.41273],[15.06731,45.4781],[14.98353,45.48726],[14.93027,45.51869],[14.91295,45.46869],[14.81398,45.45019],[14.77755,45.49724],[14.71885,45.52386],[14.68383,45.51924],[14.68367,45.57107],[14.58902,45.61966],[14.59477,45.65727],[14.51653,45.5974],[14.49636,45.52968],[14.32388,45.46048],[14.28251,45.47949],[14.26083,45.47352],[14.2367,45.49569],[14.21022,45.45962],[14.1328,45.46542],[14.06694,45.47615],[14.01187,45.50769],[13.98752,45.49945],[14.00668,45.4739],[13.99154,45.44854],[13.91789,45.44329],[13.88867,45.416],[13.81063,45.42531],[13.7856,45.45577],[13.67553,45.43241],[13.38,45.5666],[13.63822,45.64153],[13.72158,45.60472],[13.83759,45.59226],[13.89962,45.63295],[13.82754,45.67917],[13.82429,45.70266],[13.78961,45.73525],[13.66355,45.79008],[13.62279,45.78613],[13.58835,45.80154],[13.56531,45.85522],[13.62633,45.93894],[13.62975,45.97662],[13.59233,45.97929],[13.57124,45.9591],[13.52998,45.95627],[13.46729,46.00147],[13.49765,46.03741],[13.4896,46.06574],[13.58839,46.11268],[13.63712,46.14524],[13.65358,46.17505],[13.57147,46.17434],[13.54859,46.19982],[13.48189,46.21479],[13.42003,46.19662],[13.40026,46.21037],[13.40304,46.23284],[13.36653,46.30266],[13.43369,46.33243],[13.43247,46.36779],[13.56263,46.40895],[13.59357,46.44846],[13.68393,46.44947],[13.71321,46.53296],[13.79725,46.5164],[13.91305,46.53108],[14.00849,46.49169],[14.09406,46.49538],[14.12664,46.4852],[14.16569,46.44341],[14.28242,46.45347],[14.3259,46.44111],[14.43178,46.4568],[14.45113,46.43239],[14.52618,46.43623],[14.56677,46.38549],[14.58993,46.44479],[14.65658,46.45447],[14.71191,46.50954],[14.80818,46.51778],[14.81442,46.55093],[14.86094,46.61239],[14.9102,46.61569],[14.95398,46.64257],[14.98376,46.61868],[15.02973,46.65796],[15.10645,46.66965],[15.23727,46.64973],[15.41364,46.66553],[15.46237,46.64732],[15.47411,46.6226],[15.53427,46.64346],[15.53636,46.6761],[15.59201,46.69952],[15.62405,46.69039],[15.65624,46.71643],[15.767,46.70899],[15.83801,46.73237],[15.91476,46.71958],[16.02919,46.67033],[16.02955,46.68778],[15.99495,46.71178],[15.97505,46.74967],[15.98671,46.84189],[16.0553,46.85049],[16.11022,46.87912],[16.15425,46.86525],[16.23302,46.88667],[16.29431,46.8824],[16.34649,46.85476],[16.36058,46.8278],[16.34711,46.79707],[16.32245,46.79068],[16.33977,46.7799],[16.33186,46.75896],[16.38893,46.70785],[16.4383,46.69655],[16.42822,46.65301],[16.40159,46.6439],[16.51477,46.57299],[16.54136,46.53627],[16.5416,46.50887],[16.611,46.48393],[16.61889,46.46203],[16.52219,46.45842],[16.47451,46.50108],[16.36776,46.53371],[16.2582,46.489],[16.28533,46.42441],[16.3168,46.40141],[16.30574,46.36921],[16.18689,46.36804],[16.14548,46.39515],[16.06959,46.38154],[16.08614,46.34087],[16.04058,46.32708],[16.01819,46.29964],[15.80777,46.25091],[15.79649,46.21296],[15.77128,46.19937],[15.67996,46.21707],[15.65737,46.20838],[15.65639,46.18456],[15.62037,46.16163],[15.61899,46.11595],[15.63483,46.09529],[15.71869,46.06873],[15.74241,46.04578],[15.71612,45.99489],[15.71645,45.9178],[15.69237,45.90013],[15.69375,45.87111],[15.71776,45.8416],[15.6441,45.81058],[15.57467,45.83999],[15.52333,45.81155],[15.49115,45.82041],[15.47514,45.78666],[15.40343,45.78216],[15.28683,45.73391],[15.27435,45.72408],[15.29763,45.70782],[15.36329,45.72191],[15.41517,45.65443],[15.39705,45.62929],[15.31501,45.62356],[15.31503,45.60696],[15.29266,45.60163],[15.30852,45.58653],[15.31145,45.5423],[15.39496,45.48325],[15.34824,45.44665],[15.27515,45.45599],[15.22848,45.41683],[15.17101,45.41273]]],terms_url:"http://egp.gu.gov.si/",terms_text:"CC-BY ©2019 Geodetska uprava Republike Slovenije (gu.gov.si).",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/si/GURSRoadlines.png",overlay:true},{id:"GURS-roads",name:"GURS: Road lines",type:"tms",template:"https://wms.openstreetmap.de/tms/GURS-road-lines/{zoom}/{x}/{y}.png",zoomExtent:[8,19],polygon:[[[15.17101,45.41273],[15.06731,45.4781],[14.98353,45.48726],[14.93027,45.51869],[14.91295,45.46869],[14.81398,45.45019],[14.77755,45.49724],[14.71885,45.52386],[14.68383,45.51924],[14.68367,45.57107],[14.58902,45.61966],[14.59477,45.65727],[14.51653,45.5974],[14.49636,45.52968],[14.32388,45.46048],[14.28251,45.47949],[14.26083,45.47352],[14.2367,45.49569],[14.21022,45.45962],[14.1328,45.46542],[14.06694,45.47615],[14.01187,45.50769],[13.98752,45.49945],[14.00668,45.4739],[13.99154,45.44854],[13.91789,45.44329],[13.88867,45.416],[13.81063,45.42531],[13.7856,45.45577],[13.67553,45.43241],[13.38,45.5666],[13.63822,45.64153],[13.72158,45.60472],[13.83759,45.59226],[13.89962,45.63295],[13.82754,45.67917],[13.82429,45.70266],[13.78961,45.73525],[13.66355,45.79008],[13.62279,45.78613],[13.58835,45.80154],[13.56531,45.85522],[13.62633,45.93894],[13.62975,45.97662],[13.59233,45.97929],[13.57124,45.9591],[13.52998,45.95627],[13.46729,46.00147],[13.49765,46.03741],[13.4896,46.06574],[13.58839,46.11268],[13.63712,46.14524],[13.65358,46.17505],[13.57147,46.17434],[13.54859,46.19982],[13.48189,46.21479],[13.42003,46.19662],[13.40026,46.21037],[13.40304,46.23284],[13.36653,46.30266],[13.43369,46.33243],[13.43247,46.36779],[13.56263,46.40895],[13.59357,46.44846],[13.68393,46.44947],[13.71321,46.53296],[13.79725,46.5164],[13.91305,46.53108],[14.00849,46.49169],[14.09406,46.49538],[14.12664,46.4852],[14.16569,46.44341],[14.28242,46.45347],[14.3259,46.44111],[14.43178,46.4568],[14.45113,46.43239],[14.52618,46.43623],[14.56677,46.38549],[14.58993,46.44479],[14.65658,46.45447],[14.71191,46.50954],[14.80818,46.51778],[14.81442,46.55093],[14.86094,46.61239],[14.9102,46.61569],[14.95398,46.64257],[14.98376,46.61868],[15.02973,46.65796],[15.10645,46.66965],[15.23727,46.64973],[15.41364,46.66553],[15.46237,46.64732],[15.47411,46.6226],[15.53427,46.64346],[15.53636,46.6761],[15.59201,46.69952],[15.62405,46.69039],[15.65624,46.71643],[15.767,46.70899],[15.83801,46.73237],[15.91476,46.71958],[16.02919,46.67033],[16.02955,46.68778],[15.99495,46.71178],[15.97505,46.74967],[15.98671,46.84189],[16.0553,46.85049],[16.11022,46.87912],[16.15425,46.86525],[16.23302,46.88667],[16.29431,46.8824],[16.34649,46.85476],[16.36058,46.8278],[16.34711,46.79707],[16.32245,46.79068],[16.33977,46.7799],[16.33186,46.75896],[16.38893,46.70785],[16.4383,46.69655],[16.42822,46.65301],[16.40159,46.6439],[16.51477,46.57299],[16.54136,46.53627],[16.5416,46.50887],[16.611,46.48393],[16.61889,46.46203],[16.52219,46.45842],[16.47451,46.50108],[16.36776,46.53371],[16.2582,46.489],[16.28533,46.42441],[16.3168,46.40141],[16.30574,46.36921],[16.18689,46.36804],[16.14548,46.39515],[16.06959,46.38154],[16.08614,46.34087],[16.04058,46.32708],[16.01819,46.29964],[15.80777,46.25091],[15.79649,46.21296],[15.77128,46.19937],[15.67996,46.21707],[15.65737,46.20838],[15.65639,46.18456],[15.62037,46.16163],[15.61899,46.11595],[15.63483,46.09529],[15.71869,46.06873],[15.74241,46.04578],[15.71612,45.99489],[15.71645,45.9178],[15.69237,45.90013],[15.69375,45.87111],[15.71776,45.8416],[15.6441,45.81058],[15.57467,45.83999],[15.52333,45.81155],[15.49115,45.82041],[15.47514,45.78666],[15.40343,45.78216],[15.28683,45.73391],[15.27435,45.72408],[15.29763,45.70782],[15.36329,45.72191],[15.41517,45.65443],[15.39705,45.62929],[15.31501,45.62356],[15.31503,45.60696],[15.29266,45.60163],[15.30852,45.58653],[15.31145,45.5423],[15.39496,45.48325],[15.34824,45.44665],[15.27515,45.45599],[15.22848,45.41683],[15.17101,45.41273]]],terms_url:"http://egp.gu.gov.si/",terms_text:"CC-BY ©2019 Geodetska uprava Republike Slovenije (gu.gov.si).",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/si/GURSRoadlines.png",overlay:true},{id:"hamburg-20cm",name:"Hamburg (20 cm)",type:"wms",template:"https://geodienste.hamburg.de/HH_WMS_DOP20?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[8.4826,53.9356],[8.48274,53.90924],[8.5275,53.90941],[8.52792,53.93577],[8.4826,53.9356]],[[9.77232,53.54352],[9.77434,53.55433],[9.76314,53.55521],[9.73047,53.55787],[9.73465,53.56536],[9.75793,53.61828],[9.77129,53.63131],[9.7707,53.61607],[9.79634,53.6103],[9.78993,53.60386],[9.81817,53.58591],[9.83773,53.59198],[9.84498,53.59498],[9.85416,53.59805],[9.86814,53.6093],[9.86931,53.61323],[9.88505,53.62199],[9.88697,53.6252],[9.89356,53.63026],[9.89637,53.63122],[9.89688,53.63492],[9.90678,53.65231],[9.93115,53.65262],[9.94552,53.65276],[9.95024,53.65085],[9.95155,53.65065],[9.97795,53.64887],[9.98492,53.6483],[9.98739,53.65072],[9.9996,53.68153],[10.02282,53.68157],[10.04338,53.68198],[10.05148,53.67759],[10.06925,53.67955],[10.0604,53.68833],[10.071,53.69585],[10.0707,53.70996],[10.08198,53.72044],[10.11908,53.71324],[10.16939,53.73896],[10.19369,53.731],[10.1779,53.70992],[10.15694,53.70451],[10.15829,53.68944],[10.14342,53.68057],[10.14176,53.67744],[10.14473,53.67613],[10.14643,53.67588],[10.14955,53.67545],[10.17153,53.66869],[10.19885,53.64675],[10.18973,53.63838],[10.22202,53.63349],[10.18887,53.61316],[10.19236,53.59474],[10.20117,53.58392],[10.15169,53.57619],[10.15067,53.56973],[10.148,53.5639],[10.15308,53.56242],[10.15942,53.56091],[10.15189,53.5417],[10.15465,53.53657],[10.16874,53.5374],[10.16327,53.52185],[10.16611,53.52013],[10.16919,53.51965],[10.18951,53.51148],[10.21043,53.51996],[10.21828,53.49923],[10.2367,53.49629],[10.25008,53.47898],[10.26592,53.47079],[10.29043,53.45512],[10.30962,53.44309],[10.31223,53.45229],[10.32514,53.44979],[10.30799,53.43332],[10.25598,53.41623],[10.25089,53.41024],[10.24578,53.40261],[10.24155,53.39797],[10.16555,53.39933],[10.14506,53.41614],[10.10949,53.42649],[10.1068,53.42658],[10.07581,53.45436],[10.05155,53.46394],[10.03517,53.4469],[10.01449,53.44203],[10.02294,53.43228],[9.99754,53.42546],[9.98243,53.41478],[9.97873,53.4142],[9.9581,53.42708],[9.92953,53.42007],[9.92552,53.41924],[9.90667,53.41596],[9.92305,53.43631],[9.91704,53.44664],[9.90436,53.45707],[9.89493,53.45583],[9.86885,53.44462],[9.86211,53.42942],[9.84872,53.44111],[9.80663,53.46648],[9.80021,53.47372],[9.8028,53.49383],[9.78203,53.49236],[9.76885,53.5053],[9.77107,53.52185],[9.78105,53.51838],[9.77352,53.52796],[9.77232,53.54352]]],terms_url:"https://www.hamburg.de/bsw/landesbetrieb-geoinformation-und-vermessung",terms_text:"Freie und Hansestadt Hamburg, Landesbetrieb Geoinformation und Vermessung"},{id:"Hamburg-DK5",name:"Hamburg (DK5)",type:"wms",template:"https://geodienste.hamburg.de/HH_WMS_DK5?FORMAT=image/png&TRANSPARENT=false&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[8.4826,53.9356],[8.48274,53.90924],[8.5275,53.90941],[8.52792,53.93577],[8.4826,53.9356]],[[9.77232,53.54352],[9.77434,53.55433],[9.76314,53.55521],[9.73047,53.55787],[9.73465,53.56536],[9.75793,53.61828],[9.77129,53.63131],[9.7707,53.61607],[9.79634,53.6103],[9.78993,53.60386],[9.81817,53.58591],[9.83773,53.59198],[9.84498,53.59498],[9.85416,53.59805],[9.86814,53.6093],[9.86931,53.61323],[9.88505,53.62199],[9.88697,53.6252],[9.89356,53.63026],[9.89637,53.63122],[9.89688,53.63492],[9.90678,53.65231],[9.93115,53.65262],[9.94552,53.65276],[9.95024,53.65085],[9.95155,53.65065],[9.97795,53.64887],[9.98492,53.6483],[9.98739,53.65072],[9.9996,53.68153],[10.02282,53.68157],[10.04338,53.68198],[10.05148,53.67759],[10.06925,53.67955],[10.0604,53.68833],[10.071,53.69585],[10.0707,53.70996],[10.08198,53.72044],[10.11908,53.71324],[10.16939,53.73896],[10.19369,53.731],[10.1779,53.70992],[10.15694,53.70451],[10.15829,53.68944],[10.14342,53.68057],[10.14176,53.67744],[10.14473,53.67613],[10.14643,53.67588],[10.14955,53.67545],[10.17153,53.66869],[10.19885,53.64675],[10.18973,53.63838],[10.22202,53.63349],[10.18887,53.61316],[10.19236,53.59474],[10.20117,53.58392],[10.15169,53.57619],[10.15067,53.56973],[10.148,53.5639],[10.15308,53.56242],[10.15942,53.56091],[10.15189,53.5417],[10.15465,53.53657],[10.16874,53.5374],[10.16327,53.52185],[10.16611,53.52013],[10.16919,53.51965],[10.18951,53.51148],[10.21043,53.51996],[10.21828,53.49923],[10.2367,53.49629],[10.25008,53.47898],[10.26592,53.47079],[10.29043,53.45512],[10.30962,53.44309],[10.31223,53.45229],[10.32514,53.44979],[10.30799,53.43332],[10.25598,53.41623],[10.25089,53.41024],[10.24578,53.40261],[10.24155,53.39797],[10.16555,53.39933],[10.14506,53.41614],[10.10949,53.42649],[10.1068,53.42658],[10.07581,53.45436],[10.05155,53.46394],[10.03517,53.4469],[10.01449,53.44203],[10.02294,53.43228],[9.99754,53.42546],[9.98243,53.41478],[9.97873,53.4142],[9.9581,53.42708],[9.92953,53.42007],[9.92552,53.41924],[9.90667,53.41596],[9.92305,53.43631],[9.91704,53.44664],[9.90436,53.45707],[9.89493,53.45583],[9.86885,53.44462],[9.86211,53.42942],[9.84872,53.44111],[9.80663,53.46648],[9.80021,53.47372],[9.8028,53.49383],[9.78203,53.49236],[9.76885,53.5053],[9.77107,53.52185],[9.78105,53.51838],[9.77352,53.52796],[9.77232,53.54352]]],terms_url:"https://www.hamburg.de/bsw/landesbetrieb-geoinformation-und-vermessung",terms_text:"Freie und Hansestadt Hamburg, Landesbetrieb Geoinformation und Vermessung"},{id:"Hampshire-Aerial-FCIR",name:"Hampshire Aerial FCIR",type:"tms",template:"https://{switch:a,b,c}.hampshire.aerial.openstreetmap.org.uk/layer/gb_hampshire_aerial_fcir/{zoom}/{x}/{y}.png",endDate:"2014-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[8,20],polygon:[[[-1.31567,50.77809],[-1.49139,50.73027],[-1.57113,50.69041],[-1.68095,50.71748],[-1.69338,50.73484],[-1.69528,50.74065],[-1.68689,50.74999],[-1.71068,50.74812],[-1.7195,50.75261],[-1.746,50.74452],[-1.74845,50.75675],[-1.74287,50.76397],[-1.75101,50.77577],[-1.78525,50.76177],[-1.79911,50.77236],[-1.82256,50.77225],[-1.82678,50.78077],[-1.8225,50.79933],[-1.80732,50.80074],[-1.81566,50.80752],[-1.80889,50.81358],[-1.80579,50.83249],[-1.79816,50.83535],[-1.80649,50.84414],[-1.80988,50.86189],[-1.81378,50.85591],[-1.83052,50.85261],[-1.85271,50.85651],[-1.85655,50.86684],[-1.8492,50.87802],[-1.85082,50.89178],[-1.84077,50.90051],[-1.82693,50.89939],[-1.82006,50.90492],[-1.82151,50.91691],[-1.81689,50.92412],[-1.84114,50.92886],[-1.87446,50.91441],[-1.91129,50.9439],[-1.92339,50.95917],[-1.95751,50.97575],[-1.9591,50.99152],[-1.94907,50.98649],[-1.92879,51.00055],[-1.88709,51.0026],[-1.87393,51.0097],[-1.8717,50.99083],[-1.85433,51.00786],[-1.83567,51.01238],[-1.81502,50.9899],[-1.80031,50.99457],[-1.75184,50.98133],[-1.71927,50.98047],[-1.69142,50.95943],[-1.66829,50.95041],[-1.6526,50.95029],[-1.63536,50.96269],[-1.62397,50.95903],[-1.6089,50.97686],[-1.62172,50.98099],[-1.63115,50.99984],[-1.60984,51.01225],[-1.60173,51.01042],[-1.60787,51.01582],[-1.6057,51.02271],[-1.63542,51.03176],[-1.63858,51.04126],[-1.63107,51.07819],[-1.64025,51.09201],[-1.6306,51.10359],[-1.63408,51.11099],[-1.63067,51.11652],[-1.64109,51.12237],[-1.66525,51.12546],[-1.65724,51.15539],[-1.67474,51.177],[-1.67213,51.18708],[-1.69679,51.20233],[-1.69247,51.21617],[-1.65288,51.22301],[-1.63564,51.22019],[-1.62395,51.24136],[-1.61402,51.24467],[-1.60741,51.25513],[-1.57717,51.25863],[-1.54443,51.24826],[-1.5384,51.25085],[-1.53436,51.25919],[-1.54345,51.25957],[-1.54007,51.27602],[-1.54596,51.28095],[-1.53591,51.28978],[-1.52595,51.28975],[-1.53093,51.29948],[-1.53008,51.3111],[-1.53628,51.31596],[-1.52986,51.34057],[-1.51552,51.34219],[-1.49498,51.33228],[-1.43599,51.33861],[-1.44759,51.3464],[-1.4463,51.35699],[-1.43056,51.35941],[-1.41608,51.37517],[-1.34899,51.37045],[-1.31472,51.37627],[-1.27555,51.3707],[-1.25116,51.37511],[-1.24118,51.36938],[-1.22209,51.37271],[-1.17602,51.36102],[-1.14321,51.36028],[-1.11875,51.36156],[-1.12096,51.36859],[-1.11678,51.3767],[-1.08363,51.38712],[-1.04754,51.36122],[-0.9904,51.36619],[-0.97264,51.36297],[-0.92376,51.36937],[-0.87681,51.3555],[-0.86549,51.35947],[-0.82728,51.35574],[-0.81122,51.34418],[-0.78322,51.34084],[-0.76325,51.32721],[-0.76005,51.32013],[-0.74183,51.31112],[-0.72842,51.28238],[-0.72631,51.25653],[-0.73713,51.23126],[-0.74898,51.2277],[-0.77712,51.23901],[-0.80193,51.23628],[-0.80611,51.24056],[-0.82491,51.23137],[-0.82701,51.22315],[-0.84493,51.20998],[-0.82268,51.18268],[-0.83042,51.15022],[-0.81952,51.15047],[-0.80504,51.15847],[-0.79382,51.15491],[-0.78879,51.14141],[-0.77846,51.13664],[-0.77813,51.13063],[-0.76654,51.11946],[-0.74365,51.11491],[-0.74715,51.10131],[-0.75411,51.10116],[-0.75122,51.09547],[-0.75506,51.08987],[-0.75076,51.0852],[-0.7785,51.07715],[-0.78645,51.06467],[-0.79954,51.06078],[-0.82645,51.05881],[-0.83646,51.0664],[-0.84519,51.06052],[-0.8499,51.0436],[-0.89485,51.01978],[-0.89065,51.00194],[-0.90461,50.99327],[-0.91461,50.97806],[-0.91278,50.9708],[-0.93246,50.94278],[-0.92119,50.9232],[-0.93793,50.91615],[-0.95132,50.89178],[-0.92368,50.86513],[-0.92976,50.85365],[-0.92903,50.84245],[-0.94342,50.82191],[-0.9299,50.78445],[-0.93275,50.77435],[-0.95347,50.73682],[-1.31567,50.77809]]]},{id:"Hampshire-Aerial-RGB",name:"Hampshire Aerial RGB",type:"tms",template:"https://{switch:a,b,c}.hampshire.aerial.openstreetmap.org.uk/layer/gb_hampshire_aerial_rgb/{zoom}/{x}/{y}.png",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[8,20],polygon:[[[-1.31567,50.77809],[-1.49139,50.73027],[-1.57113,50.69041],[-1.68095,50.71748],[-1.69338,50.73484],[-1.69528,50.74065],[-1.68689,50.74999],[-1.71068,50.74812],[-1.7195,50.75261],[-1.746,50.74452],[-1.74845,50.75675],[-1.74287,50.76397],[-1.75101,50.77577],[-1.78525,50.76177],[-1.79911,50.77236],[-1.82256,50.77225],[-1.82678,50.78077],[-1.8225,50.79933],[-1.80732,50.80074],[-1.81566,50.80752],[-1.80889,50.81358],[-1.80579,50.83249],[-1.79816,50.83535],[-1.80649,50.84414],[-1.80988,50.86189],[-1.81378,50.85591],[-1.83052,50.85261],[-1.85271,50.85651],[-1.85655,50.86684],[-1.8492,50.87802],[-1.85082,50.89178],[-1.84077,50.90051],[-1.82693,50.89939],[-1.82006,50.90492],[-1.82151,50.91691],[-1.81689,50.92412],[-1.84114,50.92886],[-1.87446,50.91441],[-1.91129,50.9439],[-1.92339,50.95917],[-1.95751,50.97575],[-1.9591,50.99152],[-1.94907,50.98649],[-1.92879,51.00055],[-1.88709,51.0026],[-1.87393,51.0097],[-1.8717,50.99083],[-1.85433,51.00786],[-1.83567,51.01238],[-1.81502,50.9899],[-1.80031,50.99457],[-1.75184,50.98133],[-1.71927,50.98047],[-1.69142,50.95943],[-1.66829,50.95041],[-1.6526,50.95029],[-1.63536,50.96269],[-1.62397,50.95903],[-1.6089,50.97686],[-1.62172,50.98099],[-1.63115,50.99984],[-1.60984,51.01225],[-1.60173,51.01042],[-1.60787,51.01582],[-1.6057,51.02271],[-1.63542,51.03176],[-1.63858,51.04126],[-1.63107,51.07819],[-1.64025,51.09201],[-1.6306,51.10359],[-1.63408,51.11099],[-1.63067,51.11652],[-1.64109,51.12237],[-1.66525,51.12546],[-1.65724,51.15539],[-1.67474,51.177],[-1.67213,51.18708],[-1.69679,51.20233],[-1.69247,51.21617],[-1.65288,51.22301],[-1.63564,51.22019],[-1.62395,51.24136],[-1.61402,51.24467],[-1.60741,51.25513],[-1.57717,51.25863],[-1.54443,51.24826],[-1.5384,51.25085],[-1.53436,51.25919],[-1.54345,51.25957],[-1.54007,51.27602],[-1.54596,51.28095],[-1.53591,51.28978],[-1.52595,51.28975],[-1.53093,51.29948],[-1.53008,51.3111],[-1.53628,51.31596],[-1.52986,51.34057],[-1.51552,51.34219],[-1.49498,51.33228],[-1.43599,51.33861],[-1.44759,51.3464],[-1.4463,51.35699],[-1.43056,51.35941],[-1.41608,51.37517],[-1.34899,51.37045],[-1.31472,51.37627],[-1.27555,51.3707],[-1.25116,51.37511],[-1.24118,51.36938],[-1.22209,51.37271],[-1.17602,51.36102],[-1.14321,51.36028],[-1.11875,51.36156],[-1.12096,51.36859],[-1.11678,51.3767],[-1.08363,51.38712],[-1.04754,51.36122],[-0.9904,51.36619],[-0.97264,51.36297],[-0.92376,51.36937],[-0.87681,51.3555],[-0.86549,51.35947],[-0.82728,51.35574],[-0.81122,51.34418],[-0.78322,51.34084],[-0.76325,51.32721],[-0.76005,51.32013],[-0.74183,51.31112],[-0.72842,51.28238],[-0.72631,51.25653],[-0.73713,51.23126],[-0.74898,51.2277],[-0.77712,51.23901],[-0.80193,51.23628],[-0.80611,51.24056],[-0.82491,51.23137],[-0.82701,51.22315],[-0.84493,51.20998],[-0.82268,51.18268],[-0.83042,51.15022],[-0.81952,51.15047],[-0.80504,51.15847],[-0.79382,51.15491],[-0.78879,51.14141],[-0.77846,51.13664],[-0.77813,51.13063],[-0.76654,51.11946],[-0.74365,51.11491],[-0.74715,51.10131],[-0.75411,51.10116],[-0.75122,51.09547],[-0.75506,51.08987],[-0.75076,51.0852],[-0.7785,51.07715],[-0.78645,51.06467],[-0.79954,51.06078],[-0.82645,51.05881],[-0.83646,51.0664],[-0.84519,51.06052],[-0.8499,51.0436],[-0.89485,51.01978],[-0.89065,51.00194],[-0.90461,50.99327],[-0.91461,50.97806],[-0.91278,50.9708],[-0.93246,50.94278],[-0.92119,50.9232],[-0.93793,50.91615],[-0.95132,50.89178],[-0.92368,50.86513],[-0.92976,50.85365],[-0.92903,50.84245],[-0.94342,50.82191],[-0.9299,50.78445],[-0.93275,50.77435],[-0.95347,50.73682],[-1.31567,50.77809]]]},{id:"helsingborg-orto",name:"Helsingborg Orthophoto",type:"tms",template:"http://mapproxy.openstreetmap.se/tiles/1.0.0/hborg2016_EPSG3857/{zoom}/{x}/{y}.jpeg",zoomExtent:[5,20],polygon:[[[12.74345,55.94997],[12.93777,55.90804],[13.00369,55.96842],[12.79083,56.25022],[12.56698,56.1356],[12.74345,55.94997]]],terms_url:"https://helsingborg.opendatasoft.com/",terms_text:"© Helsingborg municipality",best:true,description:"Orthophotos from the municipality of Helsingborg 2016, public domain",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Helsingborg_vapen.svg/198px-Helsingborg_vapen.svg.png"},{id:"hri-orto",name:"Helsinki region orthophoto",type:"wms",template:"https://kartta.hsy.fi/geoserver/ows?SERVICE=WMS&FORMAT=image/jpeg&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=taustakartat_ja_aluejaot:Ortoilmakuva_2017&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,19],polygon:[[[24.26948,59.8593],[24.26674,60.22549],[24.55307,60.36703],[24.50363,60.49038],[24.76387,60.60079],[25.00625,60.54175],[24.90051,60.38197],[24.9884,60.35073],[25.06943,60.44096],[25.17517,60.45248],[25.18066,60.34122],[25.27954,60.2943],[25.19577,60.08813],[24.26948,59.8593]]],terms_url:"https://hri.fi/data/en_GB/dataset/paakaupunkiseudun-ortokuva-2017",terms_text:"© Espoon, Helsingin ja Vantaan kaupungit, Kirkkonummen ja Nurmijärven kunnat sekä HSL ja HSY",best:true,description:"Ortophotos from the municipalities of Espoo, Helsinki, Vantaa, Kirkkonummi and Nurmijärvi + HSL and HSY",icon:"https://raw.githubusercontent.com/osmlab/editor-layer-index/gh-pages/sources/europe/fi/hri_logo.png"},{id:"hu-hillshade",name:"Hillshade Hungary",type:"tms",template:"https://{switch:a,b,c}.map.turistautak.hu/tiles/shading/{zoom}/{x}/{y}.png",zoomExtent:[0,18],polygon:[[[15,45],[24,45],[24,49],[15,49],[15,45]]],terms_text:"SRTM",overlay:true},{id:"IBGE_DF_Addresses",name:"IBGE Distrito Federal",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/wille/cirnnxni1000jg8nfppc8g7pm/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoid2lsbGUiLCJhIjoicFNVWk5VWSJ9.hluCd0YGvYHNlFi_utWe2g",zoomExtent:[0,20],polygon:[[[-48.2444,-16.0508],[-48.2444,-15.5005],[-47.5695,-15.5005],[-47.5695,-16.0508],[-48.2444,-16.0508]]],terms_text:"IBGE",description:"Addresses data from IBGE",overlay:true},{id:"IBGE_Setores_Rurais",name:"IBGE Mapa de Setores Rurais",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/tmpsantos.i00mo1kj/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJjaml5MjVyb3MwMWV0M3hxYmUzdGdwbzE4In0.q548FjhsSJzvXsGlPsFxAQ",zoomExtent:[0,14],polygon:[[[-69.94793,-4.23168],[-69.45659,-1.49119],[-69.3973,-1.36508],[-69.42989,-1.22173],[-69.39523,-1.12555],[-69.44292,-1.03351],[-69.41861,-0.99827],[-69.528,-0.92514],[-69.52577,-0.86807],[-69.62491,-0.74667],[-69.56179,-0.63692],[-69.60783,-0.5008],[-69.8446,-0.33732],[-69.92054,-0.32573],[-70.04323,-0.18998],[-70.04302,0.56359],[-69.80272,0.57162],[-69.6711,0.66759],[-69.60529,0.61328],[-69.59701,0.6542],[-69.48002,0.73577],[-69.35277,0.61416],[-69.28914,0.64997],[-69.29484,0.60389],[-69.19975,0.60591],[-69.19425,0.64982],[-69.11563,0.64484],[-69.19001,0.74056],[-69.14881,0.76751],[-69.13576,0.87204],[-69.18846,0.91324],[-69.1646,0.94156],[-69.21679,0.97245],[-69.19773,0.99974],[-69.24494,1.05655],[-69.37641,1.08794],[-69.42312,1.04265],[-69.60989,1.09826],[-69.67718,1.06994],[-69.70963,1.11817],[-69.84266,1.07272],[-69.83972,1.71893],[-69.78236,1.69244],[-69.53464,1.77691],[-69.39109,1.72935],[-68.1645,1.72945],[-68.19207,1.7797],[-68.23954,1.77044],[-68.22688,1.82918],[-68.28555,1.83084],[-68.19583,2.03479],[-68.18033,1.9767],[-68.14417,1.97854],[-68.09043,1.89774],[-67.90162,1.81165],[-67.76942,2.00924],[-67.55095,2.04769],[-67.49519,2.16312],[-67.39404,2.22894],[-67.32672,2.06387],[-67.33083,1.94158],[-67.22831,1.84127],[-67.15384,1.8315],[-67.15922,1.67504],[-67.08017,1.38546],[-67.13923,1.32002],[-67.08675,1.16704],[-66.85119,1.22896],[-66.31032,0.74494],[-66.19737,0.78161],[-66.07783,0.76174],[-66.07024,0.8123],[-65.96712,0.81511],[-65.88369,0.94159],[-65.77261,0.95859],[-65.7421,1.00125],[-65.58894,1.00471],[-65.49624,0.87415],[-65.60623,0.70748],[-65.54116,0.64881],[-65.44499,0.68921],[-65.39213,0.75692],[-65.41198,0.82415],[-65.32734,0.93596],[-65.21302,0.90282],[-65.1749,0.94131],[-65.15831,1.1246],[-65.07232,1.15303],[-65.06317,1.11205],[-65.01361,1.10905],[-64.97445,1.20288],[-64.90439,1.25153],[-64.86966,1.22713],[-64.80053,1.31527],[-64.74446,1.22569],[-64.5789,1.34041],[-64.52608,1.44322],[-64.43586,1.47006],[-64.3939,1.52901],[-64.35111,1.52921],[-64.34777,1.49508],[-64.41019,1.40301],[-64.33791,1.36134],[-64.3136,1.45617],[-64.19707,1.52071],[-64.0735,1.64902],[-64.05781,1.92899],[-63.97219,1.99194],[-63.83555,1.96644],[-63.71155,2.04645],[-63.66501,2.01861],[-63.6268,2.11222],[-63.56474,2.13571],[-63.44059,2.126],[-63.36742,2.26864],[-63.37088,2.41121],[-63.42123,2.45102],[-63.46036,2.39684],[-63.56398,2.44573],[-63.76805,2.43994],[-63.84358,2.4916],[-64.01914,2.46135],[-64.0573,2.49752],[-63.98033,2.7237],[-64.07709,2.87262],[-64.07156,2.92142],[-64.12349,2.99048],[-64.15754,2.98243],[-64.14592,3.03459],[-64.22642,3.12356],[-64.19795,3.20121],[-64.2444,3.43036],[-64.17437,3.56841],[-64.281,3.70928],[-64.54357,3.85713],[-64.72239,4.11775],[-64.80203,4.17422],[-64.81123,4.27048],[-64.69522,4.25323],[-64.623,4.135],[-64.5565,4.10529],[-64.164,4.127],[-63.964,3.868],[-63.928,3.925],[-63.85,3.95],[-63.682,3.908],[-63.676,4.019],[-63.591,3.886],[-63.497,3.84],[-63.489,3.874],[-63.434,3.865],[-63.428,3.977],[-63.204,3.952],[-63.226,3.836],[-63.103,3.794],[-63.059,3.748],[-63.081,3.694],[-62.96,3.608],[-62.835,3.739],[-62.743,3.674],[-62.729,3.805],[-62.788,3.894],[-62.753,4.032],[-62.555,4.019],[-62.552,4.109],[-62.437,4.183],[-62.14308,4.07768],[-62.071,4.126],[-62.076,4.154],[-61.982,4.181],[-61.93175,4.12009],[-61.92213,4.16126],[-61.824,4.164],[-61.802,4.229],[-61.724,4.27],[-61.56,4.252],[-61.508,4.322],[-61.513,4.406],[-61.288,4.458],[-61.323,4.535],[-61.217,4.536],[-61.14559,4.48016],[-61.095,4.522],[-60.994,4.519],[-60.932,4.587],[-60.949,4.653],[-60.899,4.717],[-60.751,4.756],[-60.591,4.927],[-60.661,5.164],[-60.73197,5.21203],[-60.434,5.182],[-60.20825,5.28346],[-60.172,5.227],[-60.135,5.249],[-60.094,5.14],[-59.96984,5.06334],[-60.02524,4.7065],[-60.0705,4.61688],[-60.15725,4.57247],[-60.16114,4.51773],[-59.79503,4.46554],[-59.66948,4.37629],[-59.7319,4.28587],[-59.73069,4.18076],[-59.61818,4.13166],[-59.65406,4.06943],[-59.58417,3.96851],[-59.5153,3.94493],[-59.59279,3.88538],[-59.59631,3.79386],[-59.66555,3.78126],[-59.66842,3.70277],[-59.86728,3.57776],[-59.80205,3.50156],[-59.8408,3.43174],[-59.80488,3.35695],[-59.907,3.212],[-59.98944,2.88185],[-59.99,2.686],[-59.895,2.482],[-59.89872,2.36245],[-59.72315,2.27614],[-59.751,1.859],[-59.677,1.839],[-59.663,1.871],[-59.69,1.757],[-59.539,1.723],[-59.381,1.507],[-59.329,1.514],[-59.327,1.464],[-59.284,1.45],[-59.253,1.389],[-58.978,1.302],[-58.918,1.317],[-58.886,1.261],[-58.912,1.239],[-58.82512,1.17127],[-58.73956,1.1999],[-58.69456,1.29732],[-58.49622,1.26796],[-58.45787,1.37145],[-58.50511,1.40317],[-58.50873,1.46295],[-58.38559,1.46999],[-58.39472,1.52651],[-58.32237,1.59702],[-58.236,1.54669],[-58.16064,1.56011],[-58.12942,1.4989],[-58.00423,1.50303],[-57.99009,1.65844],[-57.85206,1.66782],[-57.77431,1.72973],[-57.70509,1.73093],[-57.65042,1.68237],[-57.5376,1.7005],[-57.50187,1.78609],[-57.43776,1.82681],[-57.43343,1.90598],[-57.36768,1.92372],[-57.36912,1.95638],[-57.30712,1.99665],[-57.22923,1.93759],[-57.08668,2.02644],[-57.01421,1.91489],[-56.91971,1.93036],[-56.79793,1.85336],[-56.72096,1.92582],[-56.62145,1.94588],[-56.57976,1.90588],[-56.45126,1.95614],[-56.24404,1.87808],[-56.1709,1.90048],[-56.11762,1.85097],[-55.95638,1.84509],[-55.90385,1.88803],[-55.93635,1.98647],[-55.9031,2.04108],[-56.00307,2.1676],[-56.05505,2.18464],[-56.04288,2.22778],[-56.13887,2.26574],[-56.09012,2.37228],[-56.02181,2.34247],[-55.97052,2.52931],[-55.76663,2.45524],[-55.71028,2.39917],[-55.49971,2.44324],[-55.38533,2.41836],[-55.32019,2.51537],[-55.23474,2.50338],[-55.1234,2.56762],[-55.10302,2.52564],[-54.95424,2.58359],[-54.86846,2.43989],[-54.68917,2.45389],[-54.68861,2.32472],[-54.54667,2.31833],[-54.53778,2.26556],[-54.46861,2.21306],[-54.24917,2.14667],[-54.18056,2.1725],[-54.11083,2.11222],[-54.06139,2.19167],[-53.94083,2.21917],[-53.93194,2.27194],[-53.88667,2.26778],[-53.745,2.37389],[-53.73389,2.31222],[-53.52972,2.24917],[-53.45861,2.2575],[-53.32833,2.35333],[-53.21667,2.25333],[-53.27899,2.18603],[-53.11861,2.2225],[-52.99472,2.17528],[-52.90972,2.19583],[-52.84722,2.28556],[-52.67528,2.37389],[-52.59444,2.47389],[-52.54028,2.57028],[-52.56417,2.63944],[-52.43944,2.87778],[-52.39583,2.90222],[-52.33187,3.16938],[-52.21472,3.26833],[-51.97104,3.70696],[-51.92148,3.72422],[-51.922,3.7792],[-51.79731,3.88888],[-51.77783,3.97406],[-51.65867,4.05276],[-51.61325,4.17437],[-51.63716,4.50834],[-51.49427,4.67426],[-51.11466,4.42286],[-50.94232,4.20165],[-50.85475,3.92491],[-50.85507,3.45573],[-50.75331,2.94057],[-50.29908,2.33079],[-49.73896,1.79143],[-48.23746,-0.07449],[-44.84728,-1.07246],[-43.54602,-2.04705],[-43.24389,-2.12403],[-42.78189,-2.33053],[-41.78084,-2.51859],[-41.5085,-2.68486],[-40.66365,-2.63829],[-40.50396,-2.57531],[-39.8907,-2.65328],[-39.15187,-3.04444],[-38.57151,-3.48047],[-38.34306,-3.54434],[-38.21421,-3.74103],[-38.12555,-3.80544],[-37.90182,-4.07265],[-37.77934,-4.18046],[-37.63401,-4.24454],[-37.51218,-4.41535],[-37.22122,-4.51045],[-37.07874,-4.71355],[-36.91716,-4.71372],[-36.62299,-4.85815],[-36.18969,-4.88505],[-35.93627,-4.83327],[-35.56471,-4.90758],[-35.33677,-4.99239],[-35.17659,-5.12497],[-34.79469,-6.33583],[-34.71587,-6.74615],[-34.62306,-6.90323],[-34.59953,-7.11133],[-34.64374,-7.98735],[-34.81497,-8.62472],[-35.0253,-9.13761],[-35.55848,-9.81261],[-35.69663,-9.90026],[-35.96401,-10.31281],[-36.06155,-10.37447],[-36.26639,-10.64593],[-36.61764,-10.81082],[-36.78725,-10.95151],[-36.99511,-11.29602],[-37.11368,-11.41261],[-37.46002,-12.10275],[-37.89668,-12.75844],[-38.22146,-13.09717],[-38.61146,-13.26537],[-38.85337,-14.65508],[-38.74388,-15.60089],[-38.66456,-15.74741],[-38.64697,-15.88327],[-38.8013,-16.24838],[-38.92933,-16.80775],[-38.53193,-17.80026],[-38.49171,-18.0046],[-38.53661,-18.09683],[-38.67053,-18.16855],[-39.35288,-18.10892],[-39.4675,-18.30359],[-39.54529,-18.78548],[-39.49227,-19.40134],[-39.63477,-19.74403],[-39.86353,-19.88681],[-40.17827,-20.75426],[-40.81442,-21.67672],[-40.76948,-21.87786],[-40.81442,-22.09702],[-41.5086,-22.52638],[-41.59666,-22.83627],[-41.79292,-23.08823],[-41.91484,-23.18527],[-43.19603,-23.26703],[-44.07735,-23.40501],[-45.13508,-24.12014],[-46.61368,-24.67512],[-47.85376,-25.47012],[-48.2801,-26.23036],[-48.34897,-26.75081],[-48.11076,-27.28208],[-48.21148,-27.85592],[-48.40713,-28.43255],[-48.68615,-28.76016],[-48.9156,-28.86305],[-49.1579,-29.02871],[-49.52748,-29.42005],[-49.82565,-29.86559],[-50.17344,-30.64282],[-50.60441,-31.24135],[-51.18785,-31.77646],[-51.74211,-32.10539],[-51.89236,-32.29596],[-52.06117,-32.38504],[-52.27087,-32.92102],[-52.45986,-33.25369],[-52.61505,-33.42291],[-53.18109,-33.86891],[-53.43053,-33.73947],[-53.43951,-33.69347],[-53.53228,-33.6888],[-53.51819,-33.15342],[-53.44438,-33.05296],[-53.24468,-32.93489],[-53.31008,-32.91875],[-53.29454,-32.89931],[-53.18496,-32.85043],[-53.14569,-32.79202],[-53.0858,-32.78835],[-53.07558,-32.74088],[-53.24992,-32.6041],[-53.39137,-32.58573],[-53.46423,-32.48446],[-53.58321,-32.45192],[-53.74599,-32.07848],[-53.83375,-32.05524],[-53.84978,-32.00064],[-53.96073,-31.95532],[-53.96972,-31.91765],[-54.10019,-31.92825],[-54.4549,-31.65295],[-54.4528,-31.59959],[-54.58676,-31.45656],[-54.8367,-31.442],[-54.88623,-31.3773],[-54.94087,-31.38068],[-55.00723,-31.26692],[-55.07446,-31.33216],[-55.24003,-31.26062],[-55.29118,-31.14226],[-55.34037,-31.13144],[-55.34981,-31.03922],[-55.42306,-31.01823],[-55.57742,-30.83309],[-55.65834,-30.864],[-55.66621,-30.95395],[-55.723,-30.943],[-55.727,-30.979],[-55.882,-31.077],[-56.00989,-31.08267],[-56.02241,-30.78565],[-56.12508,-30.73871],[-56.17074,-30.61517],[-56.26095,-30.58509],[-56.29193,-30.51967],[-56.38177,-30.49956],[-56.46126,-30.38486],[-56.54706,-30.35946],[-56.54115,-30.31291],[-56.6187,-30.30054],[-56.64628,-30.20346],[-56.77662,-30.1633],[-56.80777,-30.10301],[-57.07113,-30.08671],[-57.22081,-30.28928],[-57.31303,-30.25785],[-57.39229,-30.30474],[-57.46574,-30.26589],[-57.52431,-30.28569],[-57.56087,-30.21134],[-57.64744,-30.19483],[-57.48047,-30.12315],[-57.33713,-29.99284],[-57.294,-29.831],[-57.121,-29.765],[-56.89888,-29.53179],[-56.81905,-29.48816],[-56.76618,-29.37768],[-56.70164,-29.35913],[-56.59315,-29.12516],[-56.418,-29.075],[-56.40775,-28.9748],[-56.29995,-28.89614],[-56.29652,-28.8027],[-56.17858,-28.75922],[-56.00984,-28.60718],[-56.01249,-28.50873],[-55.88357,-28.47923],[-55.87739,-28.36159],[-55.75157,-28.37095],[-55.69433,-28.42204],[-55.67047,-28.33218],[-55.77415,-28.27414],[-55.7757,-28.24481],[-55.63167,-28.17719],[-55.60747,-28.11604],[-55.55957,-28.16523],[-55.4952,-28.07682],[-55.44611,-28.09787],[-55.368,-28.029],[-55.38299,-27.97948],[-55.343,-27.972],[-55.32706,-27.92664],[-55.26574,-27.92969],[-55.196,-27.856],[-55.133,-27.897],[-55.106,-27.846],[-55.035,-27.858],[-55.081,-27.779],[-54.936,-27.772],[-54.90617,-27.63871],[-54.85,-27.624],[-54.814,-27.533],[-54.775,-27.586],[-54.67926,-27.57394],[-54.67709,-27.508],[-54.621,-27.541],[-54.574,-27.453],[-54.5246,-27.5059],[-54.444,-27.472],[-54.47081,-27.42674],[-54.41,-27.405],[-54.35466,-27.46528],[-54.34067,-27.40311],[-54.28484,-27.44819],[-54.261,-27.397],[-54.21736,-27.38603],[-54.172,-27.254],[-54.15619,-27.29619],[-54.08872,-27.30149],[-54.01026,-27.19978],[-53.96219,-27.19698],[-53.95195,-27.15169],[-53.79879,-27.14629],[-53.80233,-27.04028],[-53.76087,-27.06543],[-53.78585,-27.02674],[-53.7473,-27.03218],[-53.7092,-26.93414],[-53.67125,-26.94222],[-53.69684,-26.86015],[-53.66059,-26.85814],[-53.75814,-26.72045],[-53.7205,-26.65099],[-53.75864,-26.64113],[-53.63739,-26.24968],[-53.742,-26.108],[-53.73409,-26.04333],[-53.83619,-25.97166],[-53.82214,-25.79377],[-53.89113,-25.62286],[-53.94895,-25.6117],[-53.95638,-25.64628],[-54.01,-25.567],[-54.07592,-25.55766],[-54.098,-25.619],[-54.099,-25.495],[-54.206,-25.541],[-54.178,-25.584],[-54.23,-25.562],[-54.25,-25.597],[-54.28,-25.556],[-54.38395,-25.59747],[-54.43288,-25.69756],[-54.4927,-25.6181],[-54.59354,-25.59275],[-54.61941,-25.45312],[-54.4295,-25.15915],[-54.43548,-24.94769],[-54.32437,-24.66059],[-54.32714,-24.47073],[-54.25877,-24.36377],[-54.34537,-24.14705],[-54.28223,-24.07336],[-54.43984,-23.90446],[-54.66978,-23.81262],[-54.70533,-23.86452],[-54.89,-23.898],[-54.924,-23.959],[-55.06223,-23.99335],[-55.107,-23.961],[-55.22907,-24.01383],[-55.30415,-23.96504],[-55.34542,-23.99458],[-55.41423,-23.9645],[-55.44167,-23.70084],[-55.47306,-23.64834],[-55.53989,-23.625],[-55.52356,-23.19733],[-55.54199,-23.1561],[-55.59635,-23.14993],[-55.66578,-22.85274],[-55.61432,-22.65521],[-55.72364,-22.55166],[-55.74302,-22.39266],[-55.78939,-22.3846],[-55.84304,-22.28725],[-56.20983,-22.27805],[-56.36485,-22.16949],[-56.39404,-22.07434],[-56.50711,-22.09561],[-56.63705,-22.26341],[-56.70344,-22.21693],[-56.72026,-22.26479],[-56.79344,-22.24238],[-56.84285,-22.30155],[-56.88343,-22.24755],[-56.9967,-22.22246],[-57.3744,-22.23204],[-57.5804,-22.17534],[-57.6106,-22.09462],[-57.70751,-22.09111],[-57.80183,-22.15072],[-57.99384,-22.09023],[-58.00946,-22.04038],[-57.91281,-21.88266],[-57.96603,-21.85045],[-57.90866,-21.77355],[-57.94714,-21.74413],[-57.88329,-21.68903],[-57.93436,-21.65037],[-57.91387,-21.59021],[-57.96795,-21.52432],[-57.8535,-21.33109],[-57.92019,-21.27655],[-57.85066,-21.22407],[-57.86834,-21.04417],[-57.81919,-20.94066],[-57.92836,-20.90036],[-57.8552,-20.83403],[-57.89863,-20.78872],[-57.96183,-20.7916],[-57.93478,-20.74565],[-57.86732,-20.73265],[-57.92414,-20.66392],[-57.98848,-20.69879],[-57.99847,-20.43551],[-58.09339,-20.35554],[-58.09596,-20.25445],[-58.16216,-20.25953],[-58.12152,-20.19246],[-58.16932,-20.1694],[-57.95347,-20.02094],[-57.90248,-20.04207],[-57.85796,-19.9703],[-58.131,-19.758],[-57.784,-19.033],[-57.694,-19.011],[-57.719,-18.899],[-57.766,-18.899],[-57.557,-18.24],[-57.453,-18.231],[-57.574,-18.131],[-57.72302,-17.83074],[-57.68472,-17.8306],[-57.70991,-17.72702],[-57.783,-17.639],[-57.73696,-17.5583],[-57.883,-17.449],[-57.996,-17.515],[-58.06,-17.45],[-58.116,-17.451],[-58.151,-17.384],[-58.263,-17.344],[-58.396,-17.181],[-58.423,-16.989],[-58.474,-16.935],[-58.47,-16.703],[-58.436,-16.592],[-58.333,-16.49],[-58.32227,-16.26559],[-58.388,-16.261],[-58.43059,-16.32264],[-60.17335,-16.26672],[-60.238,-15.473],[-60.57543,-15.09677],[-60.244,-15.096],[-60.272,-14.62],[-60.321,-14.608],[-60.492,-14.188],[-60.479,-14.097],[-60.38066,-13.9888],[-60.45062,-13.9364],[-60.45599,-13.85422],[-60.49068,-13.85782],[-60.46776,-13.79446],[-60.76755,-13.68329],[-60.87678,-13.62149],[-60.91857,-13.54334],[-61.0056,-13.552],[-61.0129,-13.48925],[-61.0938,-13.49081],[-61.10314,-13.53056],[-61.18155,-13.50557],[-61.19236,-13.53695],[-61.29954,-13.47718],[-61.46527,-13.55427],[-61.57927,-13.48711],[-61.852,-13.538],[-61.892,-13.431],[-61.96968,-13.40759],[-61.97592,-13.36695],[-62.11498,-13.25932],[-62.115,-13.163],[-62.15254,-13.15993],[-62.16703,-13.11346],[-62.19,-13.153],[-62.214,-13.111],[-62.27269,-13.15687],[-62.39178,-13.13471],[-62.453,-13.064],[-62.612,-13.041],[-62.65,-12.965],[-62.729,-13.02],[-62.779,-13.009],[-62.89672,-12.8539],[-63.01134,-12.83602],[-63.08186,-12.72323],[-63.06163,-12.68584],[-63.15726,-12.6138],[-63.24621,-12.66222],[-63.23713,-12.69043],[-63.30125,-12.68138],[-63.44052,-12.608],[-63.43627,-12.56526],[-63.50641,-12.56562],[-63.55295,-12.50598],[-63.7848,-12.42871],[-63.88957,-12.44745],[-63.89949,-12.50204],[-63.95144,-12.53179],[-64.13464,-12.47732],[-64.16781,-12.51503],[-64.17504,-12.46675],[-64.22945,-12.45419],[-64.29018,-12.50313],[-64.29452,-12.4582],[-64.41057,-12.44436],[-64.51217,-12.3551],[-64.51256,-12.22562],[-64.70406,-12.1827],[-64.70719,-12.08684],[-64.75486,-12.15762],[-64.7688,-12.09356],[-64.83747,-12.11786],[-64.80954,-12.05633],[-64.84077,-12.01027],[-65.03548,-11.99408],[-65.01398,-11.90303],[-65.0727,-11.86587],[-65.08672,-11.7082],[-65.18953,-11.72353],[-65.18216,-11.75609],[-65.2593,-11.71053],[-65.21178,-11.52857],[-65.3074,-11.49957],[-65.33276,-11.33986],[-65.29053,-11.32275],[-65.34347,-11.3082],[-65.35834,-11.26834],[-65.35938,-11.22067],[-65.31294,-11.19578],[-65.35387,-11.18419],[-65.36177,-11.14031],[-65.28269,-11.09009],[-65.30071,-11.03142],[-65.25053,-10.98506],[-65.27476,-10.87302],[-65.35376,-10.78881],[-65.34667,-10.68155],[-65.40569,-10.63935],[-65.43011,-10.48505],[-65.288,-10.219],[-65.333,-9.965],[-65.28588,-9.84413],[-65.39313,-9.68683],[-65.44394,-9.66957],[-65.4883,-9.71015],[-65.55611,-9.84498],[-65.627,-9.83804],[-65.66963,-9.78129],[-65.71023,-9.80857],[-65.68395,-9.74992],[-65.7432,-9.78296],[-65.77013,-9.73442],[-65.79437,-9.79295],[-65.79962,-9.75663],[-65.86532,-9.79533],[-65.87184,-9.75307],[-65.91976,-9.75314],[-65.98222,-9.81011],[-66.151,-9.785],[-66.426,-9.899],[-66.435,-9.866],[-66.61995,-9.89353],[-66.63701,-9.94983],[-66.8751,-10.08268],[-66.9528,-10.18886],[-66.99683,-10.20017],[-67.01537,-10.25919],[-67.17745,-10.33923],[-67.31545,-10.31932],[-67.31155,-10.37716],[-67.40717,-10.37386],[-67.44361,-10.45492],[-67.57925,-10.5028],[-67.64028,-10.59807],[-67.67631,-10.60484],[-67.70825,-10.71083],[-67.86386,-10.64067],[-68.03289,-10.65486],[-68.10456,-10.71426],[-68.10333,-10.77541],[-68.27819,-10.98926],[-68.71576,-11.14483],[-68.75767,-11.00079],[-68.9118,-11.02192],[-69.41453,-10.92575],[-69.73653,-10.97445],[-69.76903,-10.92972],[-69.93442,-10.9219],[-70.15869,-11.04096],[-70.30672,-11.06983],[-70.43675,-11.03923],[-70.53033,-10.93465],[-70.62103,-10.99982],[-70.62338,-9.82054],[-70.53663,-9.76584],[-70.59972,-9.56264],[-70.55282,-9.57093],[-70.56894,-9.53127],[-70.50506,-9.50557],[-70.49665,-9.42489],[-70.59581,-9.4425],[-70.6632,-9.52601],[-70.75067,-9.56043],[-70.79332,-9.63846],[-70.96337,-9.74891],[-70.99391,-9.81721],[-71.13974,-9.85702],[-71.22052,-9.96968],[-72.1804,-9.99967],[-72.15136,-9.79742],[-72.26296,-9.75085],[-72.25282,-9.61633],[-72.28821,-9.60316],[-72.2829,-9.53995],[-72.35688,-9.4946],[-72.51954,-9.49128],[-72.71676,-9.4122],[-73.2038,-9.40715],[-73.07352,-9.23461],[-73.0093,-9.22236],[-73.02612,-9.17786],[-72.9582,-9.14302],[-72.94091,-8.98494],[-72.99931,-8.91778],[-73.05901,-8.90561],[-73.14992,-8.6839],[-73.20907,-8.6857],[-73.28745,-8.61948],[-73.3055,-8.47197],[-73.38956,-8.46878],[-73.41286,-8.41099],[-73.53744,-8.34587],[-73.62739,-8.02187],[-73.73175,-7.9684],[-73.7725,-7.90237],[-73.76164,-7.85803],[-73.69706,-7.86527],[-73.6843,-7.77644],[-73.82217,-7.71788],[-73.99094,-7.53635],[-73.948,-7.52661],[-73.91981,-7.46568],[-73.96394,-7.34764],[-73.87014,-7.37882],[-73.7003,-7.30429],[-73.79842,-7.11306],[-73.71046,-6.84019],[-73.53639,-6.6834],[-73.39115,-6.64193],[-73.35281,-6.59327],[-73.22741,-6.58884],[-73.18797,-6.52302],[-73.13523,-6.51046],[-73.10473,-6.40666],[-73.24664,-6.14963],[-73.23821,-6.04399],[-73.1868,-6.00512],[-73.15207,-5.86796],[-73.05303,-5.79517],[-72.95912,-5.65689],[-72.95888,-5.46613],[-72.86052,-5.27117],[-72.88725,-5.16307],[-72.73986,-5.08859],[-72.72765,-5.05199],[-72.6212,-5.0518],[-72.598,-4.98386],[-72.38202,-4.87296],[-72.36895,-4.80387],[-72.12601,-4.73454],[-72.04335,-4.62384],[-72.00689,-4.64622],[-71.99464,-4.60996],[-71.94743,-4.60877],[-71.91909,-4.5298],[-71.88549,-4.53803],[-71.9073,-4.51644],[-71.76637,-4.50446],[-71.75109,-4.46887],[-71.70817,-4.51165],[-71.65479,-4.47246],[-71.65032,-4.50395],[-71.61548,-4.4687],[-71.6335,-4.51524],[-71.59625,-4.52928],[-71.53703,-4.46442],[-71.49428,-4.48701],[-71.50716,-4.43909],[-71.43438,-4.42882],[-71.42562,-4.47058],[-71.35026,-4.42728],[-71.30752,-4.46288],[-71.32091,-4.42009],[-71.27782,-4.44217],[-71.26975,-4.385],[-71.20263,-4.37987],[-71.19422,-4.42471],[-71.14478,-4.38158],[-71.11491,-4.41119],[-71.10616,-4.37764],[-70.99389,-4.38654],[-70.99595,-4.34632],[-70.9357,-4.38432],[-70.84483,-4.27905],[-70.86447,-4.25245],[-70.81677,-4.23005],[-70.8458,-4.21872],[-70.75901,-4.15944],[-70.68147,-4.20791],[-70.64256,-4.12805],[-70.62521,-4.19151],[-70.56118,-4.1775],[-70.57357,-4.21169],[-70.54796,-4.13671],[-70.51036,-4.14824],[-70.50417,-4.20098],[-70.48535,-4.16132],[-70.43435,-4.16266],[-70.43146,-4.13217],[-70.33892,-4.17997],[-70.32281,-4.14206],[-70.28769,-4.16555],[-70.29141,-4.28709],[-70.21457,-4.29749],[-70.19194,-4.36179],[-70.15508,-4.27308],[-70.11749,-4.28585],[-70.10881,-4.25454],[-70.04189,-4.29409],[-70.07948,-4.31428],[-70.02826,-4.3703],[-69.99182,-4.37482],[-69.94793,-4.23168]],[[-34.00035,-3.76654],[-34.01797,-3.84985],[-34.00664,-3.91809],[-33.98608,-3.95952],[-33.95923,-3.99217],[-33.8921,-4.03653],[-33.81658,-4.05077],[-33.72931,-4.03151],[-33.66638,-3.9838],[-33.62736,-3.9185],[-33.61519,-3.84985],[-33.63239,-3.76864],[-33.68693,-3.69537],[-33.74987,-3.65978],[-33.81658,-3.6489],[-33.89336,-3.66397],[-33.96007,-3.70877],[-34.00035,-3.76654]],[[-32.5538,-4.00884],[-32.59937,-3.9531],[-32.64061,-3.87309],[-32.61755,-3.73712],[-32.58338,-3.70527],[-32.54228,-3.65606],[-32.4592,-3.63029],[-32.35174,-3.63887],[-32.30049,-3.67684],[-32.24749,-3.75266],[-32.23155,-3.81889],[-32.2357,-3.90247],[-32.30194,-3.9883],[-32.42898,-4.0384],[-32.5538,-4.00884]],[[-29.50321,0.79391],[-29.54097,0.8689],[-29.54727,0.92553],[-29.52367,0.99422],[-29.48958,1.06134],[-29.43136,1.10224],[-29.35899,1.1206],[-29.29238,1.11378],[-29.22158,1.0776],[-29.16285,1.00314],[-29.14501,0.92605],[-29.14764,0.88358],[-29.17176,0.8196],[-29.24885,0.74357],[-29.29448,0.72521],[-29.36371,0.71892],[-29.43556,0.73937],[-29.50321,0.79391]],[[-29.09537,-20.42649],[-29.19756,-20.33509],[-29.3343,-20.28932],[-29.46741,-20.3288],[-29.54604,-20.42958],[-29.55396,-20.52706],[-29.51696,-20.62613],[-29.40995,-20.68955],[-29.27599,-20.72578],[-29.15968,-20.66209],[-29.07188,-20.57088],[-28.9712,-20.64769],[-28.83286,-20.69814],[-28.67968,-20.62099],[-28.63549,-20.49284],[-28.63412,-20.47146],[-28.7431,-20.30094],[-28.8683,-20.27288],[-29.0031,-20.32416],[-29.09537,-20.42649]]],terms_text:"IBGE",icon:"https://osmlab.github.io/editor-layer-index/sources/south-america/br/IBGE.png"},{id:"IBGE_Setores_Urbanos",name:"IBGE Mapa de Setores Urbanos",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/tmpsantos.hgda0m6h/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJjaml5MjVyb3MwMWV0M3hxYmUzdGdwbzE4In0.q548FjhsSJzvXsGlPsFxAQ",zoomExtent:[0,19],polygon:[[[-69.94793,-4.23168],[-69.45659,-1.49119],[-69.3973,-1.36508],[-69.42989,-1.22173],[-69.39523,-1.12555],[-69.44292,-1.03351],[-69.41861,-0.99827],[-69.528,-0.92514],[-69.52577,-0.86807],[-69.62491,-0.74667],[-69.56179,-0.63692],[-69.60783,-0.5008],[-69.8446,-0.33732],[-69.92054,-0.32573],[-70.04323,-0.18998],[-70.04302,0.56359],[-69.80272,0.57162],[-69.6711,0.66759],[-69.60529,0.61328],[-69.59701,0.6542],[-69.48002,0.73577],[-69.35277,0.61416],[-69.28914,0.64997],[-69.29484,0.60389],[-69.19975,0.60591],[-69.19425,0.64982],[-69.11563,0.64484],[-69.19001,0.74056],[-69.14881,0.76751],[-69.13576,0.87204],[-69.18846,0.91324],[-69.1646,0.94156],[-69.21679,0.97245],[-69.19773,0.99974],[-69.24494,1.05655],[-69.37641,1.08794],[-69.42312,1.04265],[-69.60989,1.09826],[-69.67718,1.06994],[-69.70963,1.11817],[-69.84266,1.07272],[-69.83972,1.71893],[-69.78236,1.69244],[-69.53464,1.77691],[-69.39109,1.72935],[-68.1645,1.72945],[-68.19207,1.7797],[-68.23954,1.77044],[-68.22688,1.82918],[-68.28555,1.83084],[-68.19583,2.03479],[-68.18033,1.9767],[-68.14417,1.97854],[-68.09043,1.89774],[-67.90162,1.81165],[-67.76942,2.00924],[-67.55095,2.04769],[-67.49519,2.16312],[-67.39404,2.22894],[-67.32672,2.06387],[-67.33083,1.94158],[-67.22831,1.84127],[-67.15384,1.8315],[-67.15922,1.67504],[-67.08017,1.38546],[-67.13923,1.32002],[-67.08675,1.16704],[-66.85119,1.22896],[-66.31032,0.74494],[-66.19737,0.78161],[-66.07783,0.76174],[-66.07024,0.8123],[-65.96712,0.81511],[-65.88369,0.94159],[-65.77261,0.95859],[-65.7421,1.00125],[-65.58894,1.00471],[-65.49624,0.87415],[-65.60623,0.70748],[-65.54116,0.64881],[-65.44499,0.68921],[-65.39213,0.75692],[-65.41198,0.82415],[-65.32734,0.93596],[-65.21302,0.90282],[-65.1749,0.94131],[-65.15831,1.1246],[-65.07232,1.15303],[-65.06317,1.11205],[-65.01361,1.10905],[-64.97445,1.20288],[-64.90439,1.25153],[-64.86966,1.22713],[-64.80053,1.31527],[-64.74446,1.22569],[-64.5789,1.34041],[-64.52608,1.44322],[-64.43586,1.47006],[-64.3939,1.52901],[-64.35111,1.52921],[-64.34777,1.49508],[-64.41019,1.40301],[-64.33791,1.36134],[-64.3136,1.45617],[-64.19707,1.52071],[-64.0735,1.64902],[-64.05781,1.92899],[-63.97219,1.99194],[-63.83555,1.96644],[-63.71155,2.04645],[-63.66501,2.01861],[-63.6268,2.11222],[-63.56474,2.13571],[-63.44059,2.126],[-63.36742,2.26864],[-63.37088,2.41121],[-63.42123,2.45102],[-63.46036,2.39684],[-63.56398,2.44573],[-63.76805,2.43994],[-63.84358,2.4916],[-64.01914,2.46135],[-64.0573,2.49752],[-63.98033,2.7237],[-64.07709,2.87262],[-64.07156,2.92142],[-64.12349,2.99048],[-64.15754,2.98243],[-64.14592,3.03459],[-64.22642,3.12356],[-64.19795,3.20121],[-64.2444,3.43036],[-64.17437,3.56841],[-64.281,3.70928],[-64.54357,3.85713],[-64.72239,4.11775],[-64.80203,4.17422],[-64.81123,4.27048],[-64.69522,4.25323],[-64.623,4.135],[-64.5565,4.10529],[-64.164,4.127],[-63.964,3.868],[-63.928,3.925],[-63.85,3.95],[-63.682,3.908],[-63.676,4.019],[-63.591,3.886],[-63.497,3.84],[-63.489,3.874],[-63.434,3.865],[-63.428,3.977],[-63.204,3.952],[-63.226,3.836],[-63.103,3.794],[-63.059,3.748],[-63.081,3.694],[-62.96,3.608],[-62.835,3.739],[-62.743,3.674],[-62.729,3.805],[-62.788,3.894],[-62.753,4.032],[-62.555,4.019],[-62.552,4.109],[-62.437,4.183],[-62.14308,4.07768],[-62.071,4.126],[-62.076,4.154],[-61.982,4.181],[-61.93175,4.12009],[-61.92213,4.16126],[-61.824,4.164],[-61.802,4.229],[-61.724,4.27],[-61.56,4.252],[-61.508,4.322],[-61.513,4.406],[-61.288,4.458],[-61.323,4.535],[-61.217,4.536],[-61.14559,4.48016],[-61.095,4.522],[-60.994,4.519],[-60.932,4.587],[-60.949,4.653],[-60.899,4.717],[-60.751,4.756],[-60.591,4.927],[-60.661,5.164],[-60.73197,5.21203],[-60.434,5.182],[-60.20825,5.28346],[-60.172,5.227],[-60.135,5.249],[-60.094,5.14],[-59.96984,5.06334],[-60.02524,4.7065],[-60.0705,4.61688],[-60.15725,4.57247],[-60.16114,4.51773],[-59.79503,4.46554],[-59.66948,4.37629],[-59.7319,4.28587],[-59.73069,4.18076],[-59.61818,4.13166],[-59.65406,4.06943],[-59.58417,3.96851],[-59.5153,3.94493],[-59.59279,3.88538],[-59.59631,3.79386],[-59.66555,3.78126],[-59.66842,3.70277],[-59.86728,3.57776],[-59.80205,3.50156],[-59.8408,3.43174],[-59.80488,3.35695],[-59.907,3.212],[-59.98944,2.88185],[-59.99,2.686],[-59.895,2.482],[-59.89872,2.36245],[-59.72315,2.27614],[-59.751,1.859],[-59.677,1.839],[-59.663,1.871],[-59.69,1.757],[-59.539,1.723],[-59.381,1.507],[-59.329,1.514],[-59.327,1.464],[-59.284,1.45],[-59.253,1.389],[-58.978,1.302],[-58.918,1.317],[-58.886,1.261],[-58.912,1.239],[-58.82512,1.17127],[-58.73956,1.1999],[-58.69456,1.29732],[-58.49622,1.26796],[-58.45787,1.37145],[-58.50511,1.40317],[-58.50873,1.46295],[-58.38559,1.46999],[-58.39472,1.52651],[-58.32237,1.59702],[-58.236,1.54669],[-58.16064,1.56011],[-58.12942,1.4989],[-58.00423,1.50303],[-57.99009,1.65844],[-57.85206,1.66782],[-57.77431,1.72973],[-57.70509,1.73093],[-57.65042,1.68237],[-57.5376,1.7005],[-57.50187,1.78609],[-57.43776,1.82681],[-57.43343,1.90598],[-57.36768,1.92372],[-57.36912,1.95638],[-57.30712,1.99665],[-57.22923,1.93759],[-57.08668,2.02644],[-57.01421,1.91489],[-56.91971,1.93036],[-56.79793,1.85336],[-56.72096,1.92582],[-56.62145,1.94588],[-56.57976,1.90588],[-56.45126,1.95614],[-56.24404,1.87808],[-56.1709,1.90048],[-56.11762,1.85097],[-55.95638,1.84509],[-55.90385,1.88803],[-55.93635,1.98647],[-55.9031,2.04108],[-56.00307,2.1676],[-56.05505,2.18464],[-56.04288,2.22778],[-56.13887,2.26574],[-56.09012,2.37228],[-56.02181,2.34247],[-55.97052,2.52931],[-55.76663,2.45524],[-55.71028,2.39917],[-55.49971,2.44324],[-55.38533,2.41836],[-55.32019,2.51537],[-55.23474,2.50338],[-55.1234,2.56762],[-55.10302,2.52564],[-54.95424,2.58359],[-54.86846,2.43989],[-54.68917,2.45389],[-54.68861,2.32472],[-54.54667,2.31833],[-54.53778,2.26556],[-54.46861,2.21306],[-54.24917,2.14667],[-54.18056,2.1725],[-54.11083,2.11222],[-54.06139,2.19167],[-53.94083,2.21917],[-53.93194,2.27194],[-53.88667,2.26778],[-53.745,2.37389],[-53.73389,2.31222],[-53.52972,2.24917],[-53.45861,2.2575],[-53.32833,2.35333],[-53.21667,2.25333],[-53.27899,2.18603],[-53.11861,2.2225],[-52.99472,2.17528],[-52.90972,2.19583],[-52.84722,2.28556],[-52.67528,2.37389],[-52.59444,2.47389],[-52.54028,2.57028],[-52.56417,2.63944],[-52.43944,2.87778],[-52.39583,2.90222],[-52.33187,3.16938],[-52.21472,3.26833],[-51.97104,3.70696],[-51.92148,3.72422],[-51.922,3.7792],[-51.79731,3.88888],[-51.77783,3.97406],[-51.65867,4.05276],[-51.61325,4.17437],[-51.63716,4.50834],[-51.49427,4.67426],[-51.11466,4.42286],[-50.94232,4.20165],[-50.85475,3.92491],[-50.85507,3.45573],[-50.75331,2.94057],[-50.29908,2.33079],[-49.73896,1.79143],[-48.23746,-0.07449],[-44.84728,-1.07246],[-43.54602,-2.04705],[-43.24389,-2.12403],[-42.78189,-2.33053],[-41.78084,-2.51859],[-41.5085,-2.68486],[-40.66365,-2.63829],[-40.50396,-2.57531],[-39.8907,-2.65328],[-39.15187,-3.04444],[-38.57151,-3.48047],[-38.34306,-3.54434],[-38.21421,-3.74103],[-38.12555,-3.80544],[-37.90182,-4.07265],[-37.77934,-4.18046],[-37.63401,-4.24454],[-37.51218,-4.41535],[-37.22122,-4.51045],[-37.07874,-4.71355],[-36.91716,-4.71372],[-36.62299,-4.85815],[-36.18969,-4.88505],[-35.93627,-4.83327],[-35.56471,-4.90758],[-35.33677,-4.99239],[-35.17659,-5.12497],[-34.79469,-6.33583],[-34.71587,-6.74615],[-34.62306,-6.90323],[-34.59953,-7.11133],[-34.64374,-7.98735],[-34.81497,-8.62472],[-35.0253,-9.13761],[-35.55848,-9.81261],[-35.69663,-9.90026],[-35.96401,-10.31281],[-36.06155,-10.37447],[-36.26639,-10.64593],[-36.61764,-10.81082],[-36.78725,-10.95151],[-36.99511,-11.29602],[-37.11368,-11.41261],[-37.46002,-12.10275],[-37.89668,-12.75844],[-38.22146,-13.09717],[-38.61146,-13.26537],[-38.85337,-14.65508],[-38.74388,-15.60089],[-38.66456,-15.74741],[-38.64697,-15.88327],[-38.8013,-16.24838],[-38.92933,-16.80775],[-38.53193,-17.80026],[-38.49171,-18.0046],[-38.53661,-18.09683],[-38.67053,-18.16855],[-39.35288,-18.10892],[-39.4675,-18.30359],[-39.54529,-18.78548],[-39.49227,-19.40134],[-39.63477,-19.74403],[-39.86353,-19.88681],[-40.17827,-20.75426],[-40.81442,-21.67672],[-40.76948,-21.87786],[-40.81442,-22.09702],[-41.5086,-22.52638],[-41.59666,-22.83627],[-41.79292,-23.08823],[-41.91484,-23.18527],[-43.19603,-23.26703],[-44.07735,-23.40501],[-45.13508,-24.12014],[-46.61368,-24.67512],[-47.85376,-25.47012],[-48.2801,-26.23036],[-48.34897,-26.75081],[-48.11076,-27.28208],[-48.21148,-27.85592],[-48.40713,-28.43255],[-48.68615,-28.76016],[-48.9156,-28.86305],[-49.1579,-29.02871],[-49.52748,-29.42005],[-49.82565,-29.86559],[-50.17344,-30.64282],[-50.60441,-31.24135],[-51.18785,-31.77646],[-51.74211,-32.10539],[-51.89236,-32.29596],[-52.06117,-32.38504],[-52.27087,-32.92102],[-52.45986,-33.25369],[-52.61505,-33.42291],[-53.18109,-33.86891],[-53.43053,-33.73947],[-53.43951,-33.69347],[-53.53228,-33.6888],[-53.51819,-33.15342],[-53.44438,-33.05296],[-53.24468,-32.93489],[-53.31008,-32.91875],[-53.29454,-32.89931],[-53.18496,-32.85043],[-53.14569,-32.79202],[-53.0858,-32.78835],[-53.07558,-32.74088],[-53.24992,-32.6041],[-53.39137,-32.58573],[-53.46423,-32.48446],[-53.58321,-32.45192],[-53.74599,-32.07848],[-53.83375,-32.05524],[-53.84978,-32.00064],[-53.96073,-31.95532],[-53.96972,-31.91765],[-54.10019,-31.92825],[-54.4549,-31.65295],[-54.4528,-31.59959],[-54.58676,-31.45656],[-54.8367,-31.442],[-54.88623,-31.3773],[-54.94087,-31.38068],[-55.00723,-31.26692],[-55.07446,-31.33216],[-55.24003,-31.26062],[-55.29118,-31.14226],[-55.34037,-31.13144],[-55.34981,-31.03922],[-55.42306,-31.01823],[-55.57742,-30.83309],[-55.65834,-30.864],[-55.66621,-30.95395],[-55.723,-30.943],[-55.727,-30.979],[-55.882,-31.077],[-56.00989,-31.08267],[-56.02241,-30.78565],[-56.12508,-30.73871],[-56.17074,-30.61517],[-56.26095,-30.58509],[-56.29193,-30.51967],[-56.38177,-30.49956],[-56.46126,-30.38486],[-56.54706,-30.35946],[-56.54115,-30.31291],[-56.6187,-30.30054],[-56.64628,-30.20346],[-56.77662,-30.1633],[-56.80777,-30.10301],[-57.07113,-30.08671],[-57.22081,-30.28928],[-57.31303,-30.25785],[-57.39229,-30.30474],[-57.46574,-30.26589],[-57.52431,-30.28569],[-57.56087,-30.21134],[-57.64744,-30.19483],[-57.48047,-30.12315],[-57.33713,-29.99284],[-57.294,-29.831],[-57.121,-29.765],[-56.89888,-29.53179],[-56.81905,-29.48816],[-56.76618,-29.37768],[-56.70164,-29.35913],[-56.59315,-29.12516],[-56.418,-29.075],[-56.40775,-28.9748],[-56.29995,-28.89614],[-56.29652,-28.8027],[-56.17858,-28.75922],[-56.00984,-28.60718],[-56.01249,-28.50873],[-55.88357,-28.47923],[-55.87739,-28.36159],[-55.75157,-28.37095],[-55.69433,-28.42204],[-55.67047,-28.33218],[-55.77415,-28.27414],[-55.7757,-28.24481],[-55.63167,-28.17719],[-55.60747,-28.11604],[-55.55957,-28.16523],[-55.4952,-28.07682],[-55.44611,-28.09787],[-55.368,-28.029],[-55.38299,-27.97948],[-55.343,-27.972],[-55.32706,-27.92664],[-55.26574,-27.92969],[-55.196,-27.856],[-55.133,-27.897],[-55.106,-27.846],[-55.035,-27.858],[-55.081,-27.779],[-54.936,-27.772],[-54.90617,-27.63871],[-54.85,-27.624],[-54.814,-27.533],[-54.775,-27.586],[-54.67926,-27.57394],[-54.67709,-27.508],[-54.621,-27.541],[-54.574,-27.453],[-54.5246,-27.5059],[-54.444,-27.472],[-54.47081,-27.42674],[-54.41,-27.405],[-54.35466,-27.46528],[-54.34067,-27.40311],[-54.28484,-27.44819],[-54.261,-27.397],[-54.21736,-27.38603],[-54.172,-27.254],[-54.15619,-27.29619],[-54.08872,-27.30149],[-54.01026,-27.19978],[-53.96219,-27.19698],[-53.95195,-27.15169],[-53.79879,-27.14629],[-53.80233,-27.04028],[-53.76087,-27.06543],[-53.78585,-27.02674],[-53.7473,-27.03218],[-53.7092,-26.93414],[-53.67125,-26.94222],[-53.69684,-26.86015],[-53.66059,-26.85814],[-53.75814,-26.72045],[-53.7205,-26.65099],[-53.75864,-26.64113],[-53.63739,-26.24968],[-53.742,-26.108],[-53.73409,-26.04333],[-53.83619,-25.97166],[-53.82214,-25.79377],[-53.89113,-25.62286],[-53.94895,-25.6117],[-53.95638,-25.64628],[-54.01,-25.567],[-54.07592,-25.55766],[-54.098,-25.619],[-54.099,-25.495],[-54.206,-25.541],[-54.178,-25.584],[-54.23,-25.562],[-54.25,-25.597],[-54.28,-25.556],[-54.38395,-25.59747],[-54.43288,-25.69756],[-54.4927,-25.6181],[-54.59354,-25.59275],[-54.61941,-25.45312],[-54.4295,-25.15915],[-54.43548,-24.94769],[-54.32437,-24.66059],[-54.32714,-24.47073],[-54.25877,-24.36377],[-54.34537,-24.14705],[-54.28223,-24.07336],[-54.43984,-23.90446],[-54.66978,-23.81262],[-54.70533,-23.86452],[-54.89,-23.898],[-54.924,-23.959],[-55.06223,-23.99335],[-55.107,-23.961],[-55.22907,-24.01383],[-55.30415,-23.96504],[-55.34542,-23.99458],[-55.41423,-23.9645],[-55.44167,-23.70084],[-55.47306,-23.64834],[-55.53989,-23.625],[-55.52356,-23.19733],[-55.54199,-23.1561],[-55.59635,-23.14993],[-55.66578,-22.85274],[-55.61432,-22.65521],[-55.72364,-22.55166],[-55.74302,-22.39266],[-55.78939,-22.3846],[-55.84304,-22.28725],[-56.20983,-22.27805],[-56.36485,-22.16949],[-56.39404,-22.07434],[-56.50711,-22.09561],[-56.63705,-22.26341],[-56.70344,-22.21693],[-56.72026,-22.26479],[-56.79344,-22.24238],[-56.84285,-22.30155],[-56.88343,-22.24755],[-56.9967,-22.22246],[-57.3744,-22.23204],[-57.5804,-22.17534],[-57.6106,-22.09462],[-57.70751,-22.09111],[-57.80183,-22.15072],[-57.99384,-22.09023],[-58.00946,-22.04038],[-57.91281,-21.88266],[-57.96603,-21.85045],[-57.90866,-21.77355],[-57.94714,-21.74413],[-57.88329,-21.68903],[-57.93436,-21.65037],[-57.91387,-21.59021],[-57.96795,-21.52432],[-57.8535,-21.33109],[-57.92019,-21.27655],[-57.85066,-21.22407],[-57.86834,-21.04417],[-57.81919,-20.94066],[-57.92836,-20.90036],[-57.8552,-20.83403],[-57.89863,-20.78872],[-57.96183,-20.7916],[-57.93478,-20.74565],[-57.86732,-20.73265],[-57.92414,-20.66392],[-57.98848,-20.69879],[-57.99847,-20.43551],[-58.09339,-20.35554],[-58.09596,-20.25445],[-58.16216,-20.25953],[-58.12152,-20.19246],[-58.16932,-20.1694],[-57.95347,-20.02094],[-57.90248,-20.04207],[-57.85796,-19.9703],[-58.131,-19.758],[-57.784,-19.033],[-57.694,-19.011],[-57.719,-18.899],[-57.766,-18.899],[-57.557,-18.24],[-57.453,-18.231],[-57.574,-18.131],[-57.72302,-17.83074],[-57.68472,-17.8306],[-57.70991,-17.72702],[-57.783,-17.639],[-57.73696,-17.5583],[-57.883,-17.449],[-57.996,-17.515],[-58.06,-17.45],[-58.116,-17.451],[-58.151,-17.384],[-58.263,-17.344],[-58.396,-17.181],[-58.423,-16.989],[-58.474,-16.935],[-58.47,-16.703],[-58.436,-16.592],[-58.333,-16.49],[-58.32227,-16.26559],[-58.388,-16.261],[-58.43059,-16.32264],[-60.17335,-16.26672],[-60.238,-15.473],[-60.57543,-15.09677],[-60.244,-15.096],[-60.272,-14.62],[-60.321,-14.608],[-60.492,-14.188],[-60.479,-14.097],[-60.38066,-13.9888],[-60.45062,-13.9364],[-60.45599,-13.85422],[-60.49068,-13.85782],[-60.46776,-13.79446],[-60.76755,-13.68329],[-60.87678,-13.62149],[-60.91857,-13.54334],[-61.0056,-13.552],[-61.0129,-13.48925],[-61.0938,-13.49081],[-61.10314,-13.53056],[-61.18155,-13.50557],[-61.19236,-13.53695],[-61.29954,-13.47718],[-61.46527,-13.55427],[-61.57927,-13.48711],[-61.852,-13.538],[-61.892,-13.431],[-61.96968,-13.40759],[-61.97592,-13.36695],[-62.11498,-13.25932],[-62.115,-13.163],[-62.15254,-13.15993],[-62.16703,-13.11346],[-62.19,-13.153],[-62.214,-13.111],[-62.27269,-13.15687],[-62.39178,-13.13471],[-62.453,-13.064],[-62.612,-13.041],[-62.65,-12.965],[-62.729,-13.02],[-62.779,-13.009],[-62.89672,-12.8539],[-63.01134,-12.83602],[-63.08186,-12.72323],[-63.06163,-12.68584],[-63.15726,-12.6138],[-63.24621,-12.66222],[-63.23713,-12.69043],[-63.30125,-12.68138],[-63.44052,-12.608],[-63.43627,-12.56526],[-63.50641,-12.56562],[-63.55295,-12.50598],[-63.7848,-12.42871],[-63.88957,-12.44745],[-63.89949,-12.50204],[-63.95144,-12.53179],[-64.13464,-12.47732],[-64.16781,-12.51503],[-64.17504,-12.46675],[-64.22945,-12.45419],[-64.29018,-12.50313],[-64.29452,-12.4582],[-64.41057,-12.44436],[-64.51217,-12.3551],[-64.51256,-12.22562],[-64.70406,-12.1827],[-64.70719,-12.08684],[-64.75486,-12.15762],[-64.7688,-12.09356],[-64.83747,-12.11786],[-64.80954,-12.05633],[-64.84077,-12.01027],[-65.03548,-11.99408],[-65.01398,-11.90303],[-65.0727,-11.86587],[-65.08672,-11.7082],[-65.18953,-11.72353],[-65.18216,-11.75609],[-65.2593,-11.71053],[-65.21178,-11.52857],[-65.3074,-11.49957],[-65.33276,-11.33986],[-65.29053,-11.32275],[-65.34347,-11.3082],[-65.35834,-11.26834],[-65.35938,-11.22067],[-65.31294,-11.19578],[-65.35387,-11.18419],[-65.36177,-11.14031],[-65.28269,-11.09009],[-65.30071,-11.03142],[-65.25053,-10.98506],[-65.27476,-10.87302],[-65.35376,-10.78881],[-65.34667,-10.68155],[-65.40569,-10.63935],[-65.43011,-10.48505],[-65.288,-10.219],[-65.333,-9.965],[-65.28588,-9.84413],[-65.39313,-9.68683],[-65.44394,-9.66957],[-65.4883,-9.71015],[-65.55611,-9.84498],[-65.627,-9.83804],[-65.66963,-9.78129],[-65.71023,-9.80857],[-65.68395,-9.74992],[-65.7432,-9.78296],[-65.77013,-9.73442],[-65.79437,-9.79295],[-65.79962,-9.75663],[-65.86532,-9.79533],[-65.87184,-9.75307],[-65.91976,-9.75314],[-65.98222,-9.81011],[-66.151,-9.785],[-66.426,-9.899],[-66.435,-9.866],[-66.61995,-9.89353],[-66.63701,-9.94983],[-66.8751,-10.08268],[-66.9528,-10.18886],[-66.99683,-10.20017],[-67.01537,-10.25919],[-67.17745,-10.33923],[-67.31545,-10.31932],[-67.31155,-10.37716],[-67.40717,-10.37386],[-67.44361,-10.45492],[-67.57925,-10.5028],[-67.64028,-10.59807],[-67.67631,-10.60484],[-67.70825,-10.71083],[-67.86386,-10.64067],[-68.03289,-10.65486],[-68.10456,-10.71426],[-68.10333,-10.77541],[-68.27819,-10.98926],[-68.71576,-11.14483],[-68.75767,-11.00079],[-68.9118,-11.02192],[-69.41453,-10.92575],[-69.73653,-10.97445],[-69.76903,-10.92972],[-69.93442,-10.9219],[-70.15869,-11.04096],[-70.30672,-11.06983],[-70.43675,-11.03923],[-70.53033,-10.93465],[-70.62103,-10.99982],[-70.62338,-9.82054],[-70.53663,-9.76584],[-70.59972,-9.56264],[-70.55282,-9.57093],[-70.56894,-9.53127],[-70.50506,-9.50557],[-70.49665,-9.42489],[-70.59581,-9.4425],[-70.6632,-9.52601],[-70.75067,-9.56043],[-70.79332,-9.63846],[-70.96337,-9.74891],[-70.99391,-9.81721],[-71.13974,-9.85702],[-71.22052,-9.96968],[-72.1804,-9.99967],[-72.15136,-9.79742],[-72.26296,-9.75085],[-72.25282,-9.61633],[-72.28821,-9.60316],[-72.2829,-9.53995],[-72.35688,-9.4946],[-72.51954,-9.49128],[-72.71676,-9.4122],[-73.2038,-9.40715],[-73.07352,-9.23461],[-73.0093,-9.22236],[-73.02612,-9.17786],[-72.9582,-9.14302],[-72.94091,-8.98494],[-72.99931,-8.91778],[-73.05901,-8.90561],[-73.14992,-8.6839],[-73.20907,-8.6857],[-73.28745,-8.61948],[-73.3055,-8.47197],[-73.38956,-8.46878],[-73.41286,-8.41099],[-73.53744,-8.34587],[-73.62739,-8.02187],[-73.73175,-7.9684],[-73.7725,-7.90237],[-73.76164,-7.85803],[-73.69706,-7.86527],[-73.6843,-7.77644],[-73.82217,-7.71788],[-73.99094,-7.53635],[-73.948,-7.52661],[-73.91981,-7.46568],[-73.96394,-7.34764],[-73.87014,-7.37882],[-73.7003,-7.30429],[-73.79842,-7.11306],[-73.71046,-6.84019],[-73.53639,-6.6834],[-73.39115,-6.64193],[-73.35281,-6.59327],[-73.22741,-6.58884],[-73.18797,-6.52302],[-73.13523,-6.51046],[-73.10473,-6.40666],[-73.24664,-6.14963],[-73.23821,-6.04399],[-73.1868,-6.00512],[-73.15207,-5.86796],[-73.05303,-5.79517],[-72.95912,-5.65689],[-72.95888,-5.46613],[-72.86052,-5.27117],[-72.88725,-5.16307],[-72.73986,-5.08859],[-72.72765,-5.05199],[-72.6212,-5.0518],[-72.598,-4.98386],[-72.38202,-4.87296],[-72.36895,-4.80387],[-72.12601,-4.73454],[-72.04335,-4.62384],[-72.00689,-4.64622],[-71.99464,-4.60996],[-71.94743,-4.60877],[-71.91909,-4.5298],[-71.88549,-4.53803],[-71.9073,-4.51644],[-71.76637,-4.50446],[-71.75109,-4.46887],[-71.70817,-4.51165],[-71.65479,-4.47246],[-71.65032,-4.50395],[-71.61548,-4.4687],[-71.6335,-4.51524],[-71.59625,-4.52928],[-71.53703,-4.46442],[-71.49428,-4.48701],[-71.50716,-4.43909],[-71.43438,-4.42882],[-71.42562,-4.47058],[-71.35026,-4.42728],[-71.30752,-4.46288],[-71.32091,-4.42009],[-71.27782,-4.44217],[-71.26975,-4.385],[-71.20263,-4.37987],[-71.19422,-4.42471],[-71.14478,-4.38158],[-71.11491,-4.41119],[-71.10616,-4.37764],[-70.99389,-4.38654],[-70.99595,-4.34632],[-70.9357,-4.38432],[-70.84483,-4.27905],[-70.86447,-4.25245],[-70.81677,-4.23005],[-70.8458,-4.21872],[-70.75901,-4.15944],[-70.68147,-4.20791],[-70.64256,-4.12805],[-70.62521,-4.19151],[-70.56118,-4.1775],[-70.57357,-4.21169],[-70.54796,-4.13671],[-70.51036,-4.14824],[-70.50417,-4.20098],[-70.48535,-4.16132],[-70.43435,-4.16266],[-70.43146,-4.13217],[-70.33892,-4.17997],[-70.32281,-4.14206],[-70.28769,-4.16555],[-70.29141,-4.28709],[-70.21457,-4.29749],[-70.19194,-4.36179],[-70.15508,-4.27308],[-70.11749,-4.28585],[-70.10881,-4.25454],[-70.04189,-4.29409],[-70.07948,-4.31428],[-70.02826,-4.3703],[-69.99182,-4.37482],[-69.94793,-4.23168]],[[-34.00035,-3.76654],[-34.01797,-3.84985],[-34.00664,-3.91809],[-33.98608,-3.95952],[-33.95923,-3.99217],[-33.8921,-4.03653],[-33.81658,-4.05077],[-33.72931,-4.03151],[-33.66638,-3.9838],[-33.62736,-3.9185],[-33.61519,-3.84985],[-33.63239,-3.76864],[-33.68693,-3.69537],[-33.74987,-3.65978],[-33.81658,-3.6489],[-33.89336,-3.66397],[-33.96007,-3.70877],[-34.00035,-3.76654]],[[-32.5538,-4.00884],[-32.59937,-3.9531],[-32.64061,-3.87309],[-32.61755,-3.73712],[-32.58338,-3.70527],[-32.54228,-3.65606],[-32.4592,-3.63029],[-32.35174,-3.63887],[-32.30049,-3.67684],[-32.24749,-3.75266],[-32.23155,-3.81889],[-32.2357,-3.90247],[-32.30194,-3.9883],[-32.42898,-4.0384],[-32.5538,-4.00884]],[[-29.50321,0.79391],[-29.54097,0.8689],[-29.54727,0.92553],[-29.52367,0.99422],[-29.48958,1.06134],[-29.43136,1.10224],[-29.35899,1.1206],[-29.29238,1.11378],[-29.22158,1.0776],[-29.16285,1.00314],[-29.14501,0.92605],[-29.14764,0.88358],[-29.17176,0.8196],[-29.24885,0.74357],[-29.29448,0.72521],[-29.36371,0.71892],[-29.43556,0.73937],[-29.50321,0.79391]],[[-29.09537,-20.42649],[-29.19756,-20.33509],[-29.3343,-20.28932],[-29.46741,-20.3288],[-29.54604,-20.42958],[-29.55396,-20.52706],[-29.51696,-20.62613],[-29.40995,-20.68955],[-29.27599,-20.72578],[-29.15968,-20.66209],[-29.07188,-20.57088],[-28.9712,-20.64769],[-28.83286,-20.69814],[-28.67968,-20.62099],[-28.63549,-20.49284],[-28.63412,-20.47146],[-28.7431,-20.30094],[-28.8683,-20.27288],[-29.0031,-20.32416],[-29.09537,-20.42649]]],terms_text:"IBGE",icon:"https://osmlab.github.io/editor-layer-index/sources/south-america/br/IBGE.png"},{id:"IBGE_Nomes_Ruas",name:"IBGE Nomes de Ruas",type:"tms",template:"https://api.maptiler.com/maps/b2037b15-5614-4fed-9608-9830b8dc574a/256/{zoom}/{x}/{y}.png?key=YmPoUxbTlEHlrASzv56Z",zoomExtent:[4,22],polygon:[[[-69.94793,-4.23168],[-69.45659,-1.49119],[-69.3973,-1.36508],[-69.42989,-1.22173],[-69.39523,-1.12555],[-69.44292,-1.03351],[-69.41861,-0.99827],[-69.528,-0.92514],[-69.52577,-0.86807],[-69.62491,-0.74667],[-69.56179,-0.63692],[-69.60783,-0.5008],[-69.8446,-0.33732],[-69.92054,-0.32573],[-70.04323,-0.18998],[-70.04302,0.56359],[-69.80272,0.57162],[-69.6711,0.66759],[-69.60529,0.61328],[-69.59701,0.6542],[-69.48002,0.73577],[-69.35277,0.61416],[-69.28914,0.64997],[-69.29484,0.60389],[-69.19975,0.60591],[-69.19425,0.64982],[-69.11563,0.64484],[-69.19001,0.74056],[-69.14881,0.76751],[-69.13576,0.87204],[-69.18846,0.91324],[-69.1646,0.94156],[-69.21679,0.97245],[-69.19773,0.99974],[-69.24494,1.05655],[-69.37641,1.08794],[-69.42312,1.04265],[-69.60989,1.09826],[-69.67718,1.06994],[-69.70963,1.11817],[-69.84266,1.07272],[-69.83972,1.71893],[-69.78236,1.69244],[-69.53464,1.77691],[-69.39109,1.72935],[-68.1645,1.72945],[-68.19207,1.7797],[-68.23954,1.77044],[-68.22688,1.82918],[-68.28555,1.83084],[-68.19583,2.03479],[-68.18033,1.9767],[-68.14417,1.97854],[-68.09043,1.89774],[-67.90162,1.81165],[-67.76942,2.00924],[-67.55095,2.04769],[-67.49519,2.16312],[-67.39404,2.22894],[-67.32672,2.06387],[-67.33083,1.94158],[-67.22831,1.84127],[-67.15384,1.8315],[-67.15922,1.67504],[-67.08017,1.38546],[-67.13923,1.32002],[-67.08675,1.16704],[-66.85119,1.22896],[-66.31032,0.74494],[-66.19737,0.78161],[-66.07783,0.76174],[-66.07024,0.8123],[-65.96712,0.81511],[-65.88369,0.94159],[-65.77261,0.95859],[-65.7421,1.00125],[-65.58894,1.00471],[-65.49624,0.87415],[-65.60623,0.70748],[-65.54116,0.64881],[-65.44499,0.68921],[-65.39213,0.75692],[-65.41198,0.82415],[-65.32734,0.93596],[-65.21302,0.90282],[-65.1749,0.94131],[-65.15831,1.1246],[-65.07232,1.15303],[-65.06317,1.11205],[-65.01361,1.10905],[-64.97445,1.20288],[-64.90439,1.25153],[-64.86966,1.22713],[-64.80053,1.31527],[-64.74446,1.22569],[-64.5789,1.34041],[-64.52608,1.44322],[-64.43586,1.47006],[-64.3939,1.52901],[-64.35111,1.52921],[-64.34777,1.49508],[-64.41019,1.40301],[-64.33791,1.36134],[-64.3136,1.45617],[-64.19707,1.52071],[-64.0735,1.64902],[-64.05781,1.92899],[-63.97219,1.99194],[-63.83555,1.96644],[-63.71155,2.04645],[-63.66501,2.01861],[-63.6268,2.11222],[-63.56474,2.13571],[-63.44059,2.126],[-63.36742,2.26864],[-63.37088,2.41121],[-63.42123,2.45102],[-63.46036,2.39684],[-63.56398,2.44573],[-63.76805,2.43994],[-63.84358,2.4916],[-64.01914,2.46135],[-64.0573,2.49752],[-63.98033,2.7237],[-64.07709,2.87262],[-64.07156,2.92142],[-64.12349,2.99048],[-64.15754,2.98243],[-64.14592,3.03459],[-64.22642,3.12356],[-64.19795,3.20121],[-64.2444,3.43036],[-64.17437,3.56841],[-64.281,3.70928],[-64.54357,3.85713],[-64.72239,4.11775],[-64.80203,4.17422],[-64.81123,4.27048],[-64.69522,4.25323],[-64.623,4.135],[-64.5565,4.10529],[-64.164,4.127],[-63.964,3.868],[-63.928,3.925],[-63.85,3.95],[-63.682,3.908],[-63.676,4.019],[-63.591,3.886],[-63.497,3.84],[-63.489,3.874],[-63.434,3.865],[-63.428,3.977],[-63.204,3.952],[-63.226,3.836],[-63.103,3.794],[-63.059,3.748],[-63.081,3.694],[-62.96,3.608],[-62.835,3.739],[-62.743,3.674],[-62.729,3.805],[-62.788,3.894],[-62.753,4.032],[-62.555,4.019],[-62.552,4.109],[-62.437,4.183],[-62.14308,4.07768],[-62.071,4.126],[-62.076,4.154],[-61.982,4.181],[-61.93175,4.12009],[-61.92213,4.16126],[-61.824,4.164],[-61.802,4.229],[-61.724,4.27],[-61.56,4.252],[-61.508,4.322],[-61.513,4.406],[-61.288,4.458],[-61.323,4.535],[-61.217,4.536],[-61.14559,4.48016],[-61.095,4.522],[-60.994,4.519],[-60.932,4.587],[-60.949,4.653],[-60.899,4.717],[-60.751,4.756],[-60.591,4.927],[-60.661,5.164],[-60.73197,5.21203],[-60.434,5.182],[-60.20825,5.28346],[-60.172,5.227],[-60.135,5.249],[-60.094,5.14],[-59.96984,5.06334],[-60.02524,4.7065],[-60.0705,4.61688],[-60.15725,4.57247],[-60.16114,4.51773],[-59.79503,4.46554],[-59.66948,4.37629],[-59.7319,4.28587],[-59.73069,4.18076],[-59.61818,4.13166],[-59.65406,4.06943],[-59.58417,3.96851],[-59.5153,3.94493],[-59.59279,3.88538],[-59.59631,3.79386],[-59.66555,3.78126],[-59.66842,3.70277],[-59.86728,3.57776],[-59.80205,3.50156],[-59.8408,3.43174],[-59.80488,3.35695],[-59.907,3.212],[-59.98944,2.88185],[-59.99,2.686],[-59.895,2.482],[-59.89872,2.36245],[-59.72315,2.27614],[-59.751,1.859],[-59.677,1.839],[-59.663,1.871],[-59.69,1.757],[-59.539,1.723],[-59.381,1.507],[-59.329,1.514],[-59.327,1.464],[-59.284,1.45],[-59.253,1.389],[-58.978,1.302],[-58.918,1.317],[-58.886,1.261],[-58.912,1.239],[-58.82512,1.17127],[-58.73956,1.1999],[-58.69456,1.29732],[-58.49622,1.26796],[-58.45787,1.37145],[-58.50511,1.40317],[-58.50873,1.46295],[-58.38559,1.46999],[-58.39472,1.52651],[-58.32237,1.59702],[-58.236,1.54669],[-58.16064,1.56011],[-58.12942,1.4989],[-58.00423,1.50303],[-57.99009,1.65844],[-57.85206,1.66782],[-57.77431,1.72973],[-57.70509,1.73093],[-57.65042,1.68237],[-57.5376,1.7005],[-57.50187,1.78609],[-57.43776,1.82681],[-57.43343,1.90598],[-57.36768,1.92372],[-57.36912,1.95638],[-57.30712,1.99665],[-57.22923,1.93759],[-57.08668,2.02644],[-57.01421,1.91489],[-56.91971,1.93036],[-56.79793,1.85336],[-56.72096,1.92582],[-56.62145,1.94588],[-56.57976,1.90588],[-56.45126,1.95614],[-56.24404,1.87808],[-56.1709,1.90048],[-56.11762,1.85097],[-55.95638,1.84509],[-55.90385,1.88803],[-55.93635,1.98647],[-55.9031,2.04108],[-56.00307,2.1676],[-56.05505,2.18464],[-56.04288,2.22778],[-56.13887,2.26574],[-56.09012,2.37228],[-56.02181,2.34247],[-55.97052,2.52931],[-55.76663,2.45524],[-55.71028,2.39917],[-55.49971,2.44324],[-55.38533,2.41836],[-55.32019,2.51537],[-55.23474,2.50338],[-55.1234,2.56762],[-55.10302,2.52564],[-54.95424,2.58359],[-54.86846,2.43989],[-54.68917,2.45389],[-54.68861,2.32472],[-54.54667,2.31833],[-54.53778,2.26556],[-54.46861,2.21306],[-54.24917,2.14667],[-54.18056,2.1725],[-54.11083,2.11222],[-54.06139,2.19167],[-53.94083,2.21917],[-53.93194,2.27194],[-53.88667,2.26778],[-53.745,2.37389],[-53.73389,2.31222],[-53.52972,2.24917],[-53.45861,2.2575],[-53.32833,2.35333],[-53.21667,2.25333],[-53.27899,2.18603],[-53.11861,2.2225],[-52.99472,2.17528],[-52.90972,2.19583],[-52.84722,2.28556],[-52.67528,2.37389],[-52.59444,2.47389],[-52.54028,2.57028],[-52.56417,2.63944],[-52.43944,2.87778],[-52.39583,2.90222],[-52.33187,3.16938],[-52.21472,3.26833],[-51.97104,3.70696],[-51.92148,3.72422],[-51.922,3.7792],[-51.79731,3.88888],[-51.77783,3.97406],[-51.65867,4.05276],[-51.61325,4.17437],[-51.63716,4.50834],[-51.49427,4.67426],[-51.11466,4.42286],[-50.94232,4.20165],[-50.85475,3.92491],[-50.85507,3.45573],[-50.75331,2.94057],[-50.29908,2.33079],[-49.73896,1.79143],[-48.23746,-0.07449],[-44.84728,-1.07246],[-43.54602,-2.04705],[-43.24389,-2.12403],[-42.78189,-2.33053],[-41.78084,-2.51859],[-41.5085,-2.68486],[-40.66365,-2.63829],[-40.50396,-2.57531],[-39.8907,-2.65328],[-39.15187,-3.04444],[-38.57151,-3.48047],[-38.34306,-3.54434],[-38.21421,-3.74103],[-38.12555,-3.80544],[-37.90182,-4.07265],[-37.77934,-4.18046],[-37.63401,-4.24454],[-37.51218,-4.41535],[-37.22122,-4.51045],[-37.07874,-4.71355],[-36.91716,-4.71372],[-36.62299,-4.85815],[-36.18969,-4.88505],[-35.93627,-4.83327],[-35.56471,-4.90758],[-35.33677,-4.99239],[-35.17659,-5.12497],[-34.79469,-6.33583],[-34.71587,-6.74615],[-34.62306,-6.90323],[-34.59953,-7.11133],[-34.64374,-7.98735],[-34.81497,-8.62472],[-35.0253,-9.13761],[-35.55848,-9.81261],[-35.69663,-9.90026],[-35.96401,-10.31281],[-36.06155,-10.37447],[-36.26639,-10.64593],[-36.61764,-10.81082],[-36.78725,-10.95151],[-36.99511,-11.29602],[-37.11368,-11.41261],[-37.46002,-12.10275],[-37.89668,-12.75844],[-38.22146,-13.09717],[-38.61146,-13.26537],[-38.85337,-14.65508],[-38.74388,-15.60089],[-38.66456,-15.74741],[-38.64697,-15.88327],[-38.8013,-16.24838],[-38.92933,-16.80775],[-38.53193,-17.80026],[-38.49171,-18.0046],[-38.53661,-18.09683],[-38.67053,-18.16855],[-39.35288,-18.10892],[-39.4675,-18.30359],[-39.54529,-18.78548],[-39.49227,-19.40134],[-39.63477,-19.74403],[-39.86353,-19.88681],[-40.17827,-20.75426],[-40.81442,-21.67672],[-40.76948,-21.87786],[-40.81442,-22.09702],[-41.5086,-22.52638],[-41.59666,-22.83627],[-41.79292,-23.08823],[-41.91484,-23.18527],[-43.19603,-23.26703],[-44.07735,-23.40501],[-45.13508,-24.12014],[-46.61368,-24.67512],[-47.85376,-25.47012],[-48.2801,-26.23036],[-48.34897,-26.75081],[-48.11076,-27.28208],[-48.21148,-27.85592],[-48.40713,-28.43255],[-48.68615,-28.76016],[-48.9156,-28.86305],[-49.1579,-29.02871],[-49.52748,-29.42005],[-49.82565,-29.86559],[-50.17344,-30.64282],[-50.60441,-31.24135],[-51.18785,-31.77646],[-51.74211,-32.10539],[-51.89236,-32.29596],[-52.06117,-32.38504],[-52.27087,-32.92102],[-52.45986,-33.25369],[-52.61505,-33.42291],[-53.18109,-33.86891],[-53.43053,-33.73947],[-53.43951,-33.69347],[-53.53228,-33.6888],[-53.51819,-33.15342],[-53.44438,-33.05296],[-53.24468,-32.93489],[-53.31008,-32.91875],[-53.29454,-32.89931],[-53.18496,-32.85043],[-53.14569,-32.79202],[-53.0858,-32.78835],[-53.07558,-32.74088],[-53.24992,-32.6041],[-53.39137,-32.58573],[-53.46423,-32.48446],[-53.58321,-32.45192],[-53.74599,-32.07848],[-53.83375,-32.05524],[-53.84978,-32.00064],[-53.96073,-31.95532],[-53.96972,-31.91765],[-54.10019,-31.92825],[-54.4549,-31.65295],[-54.4528,-31.59959],[-54.58676,-31.45656],[-54.8367,-31.442],[-54.88623,-31.3773],[-54.94087,-31.38068],[-55.00723,-31.26692],[-55.07446,-31.33216],[-55.24003,-31.26062],[-55.29118,-31.14226],[-55.34037,-31.13144],[-55.34981,-31.03922],[-55.42306,-31.01823],[-55.57742,-30.83309],[-55.65834,-30.864],[-55.66621,-30.95395],[-55.723,-30.943],[-55.727,-30.979],[-55.882,-31.077],[-56.00989,-31.08267],[-56.02241,-30.78565],[-56.12508,-30.73871],[-56.17074,-30.61517],[-56.26095,-30.58509],[-56.29193,-30.51967],[-56.38177,-30.49956],[-56.46126,-30.38486],[-56.54706,-30.35946],[-56.54115,-30.31291],[-56.6187,-30.30054],[-56.64628,-30.20346],[-56.77662,-30.1633],[-56.80777,-30.10301],[-57.07113,-30.08671],[-57.22081,-30.28928],[-57.31303,-30.25785],[-57.39229,-30.30474],[-57.46574,-30.26589],[-57.52431,-30.28569],[-57.56087,-30.21134],[-57.64744,-30.19483],[-57.48047,-30.12315],[-57.33713,-29.99284],[-57.294,-29.831],[-57.121,-29.765],[-56.89888,-29.53179],[-56.81905,-29.48816],[-56.76618,-29.37768],[-56.70164,-29.35913],[-56.59315,-29.12516],[-56.418,-29.075],[-56.40775,-28.9748],[-56.29995,-28.89614],[-56.29652,-28.8027],[-56.17858,-28.75922],[-56.00984,-28.60718],[-56.01249,-28.50873],[-55.88357,-28.47923],[-55.87739,-28.36159],[-55.75157,-28.37095],[-55.69433,-28.42204],[-55.67047,-28.33218],[-55.77415,-28.27414],[-55.7757,-28.24481],[-55.63167,-28.17719],[-55.60747,-28.11604],[-55.55957,-28.16523],[-55.4952,-28.07682],[-55.44611,-28.09787],[-55.368,-28.029],[-55.38299,-27.97948],[-55.343,-27.972],[-55.32706,-27.92664],[-55.26574,-27.92969],[-55.196,-27.856],[-55.133,-27.897],[-55.106,-27.846],[-55.035,-27.858],[-55.081,-27.779],[-54.936,-27.772],[-54.90617,-27.63871],[-54.85,-27.624],[-54.814,-27.533],[-54.775,-27.586],[-54.67926,-27.57394],[-54.67709,-27.508],[-54.621,-27.541],[-54.574,-27.453],[-54.5246,-27.5059],[-54.444,-27.472],[-54.47081,-27.42674],[-54.41,-27.405],[-54.35466,-27.46528],[-54.34067,-27.40311],[-54.28484,-27.44819],[-54.261,-27.397],[-54.21736,-27.38603],[-54.172,-27.254],[-54.15619,-27.29619],[-54.08872,-27.30149],[-54.01026,-27.19978],[-53.96219,-27.19698],[-53.95195,-27.15169],[-53.79879,-27.14629],[-53.80233,-27.04028],[-53.76087,-27.06543],[-53.78585,-27.02674],[-53.7473,-27.03218],[-53.7092,-26.93414],[-53.67125,-26.94222],[-53.69684,-26.86015],[-53.66059,-26.85814],[-53.75814,-26.72045],[-53.7205,-26.65099],[-53.75864,-26.64113],[-53.63739,-26.24968],[-53.742,-26.108],[-53.73409,-26.04333],[-53.83619,-25.97166],[-53.82214,-25.79377],[-53.89113,-25.62286],[-53.94895,-25.6117],[-53.95638,-25.64628],[-54.01,-25.567],[-54.07592,-25.55766],[-54.098,-25.619],[-54.099,-25.495],[-54.206,-25.541],[-54.178,-25.584],[-54.23,-25.562],[-54.25,-25.597],[-54.28,-25.556],[-54.38395,-25.59747],[-54.43288,-25.69756],[-54.4927,-25.6181],[-54.59354,-25.59275],[-54.61941,-25.45312],[-54.4295,-25.15915],[-54.43548,-24.94769],[-54.32437,-24.66059],[-54.32714,-24.47073],[-54.25877,-24.36377],[-54.34537,-24.14705],[-54.28223,-24.07336],[-54.43984,-23.90446],[-54.66978,-23.81262],[-54.70533,-23.86452],[-54.89,-23.898],[-54.924,-23.959],[-55.06223,-23.99335],[-55.107,-23.961],[-55.22907,-24.01383],[-55.30415,-23.96504],[-55.34542,-23.99458],[-55.41423,-23.9645],[-55.44167,-23.70084],[-55.47306,-23.64834],[-55.53989,-23.625],[-55.52356,-23.19733],[-55.54199,-23.1561],[-55.59635,-23.14993],[-55.66578,-22.85274],[-55.61432,-22.65521],[-55.72364,-22.55166],[-55.74302,-22.39266],[-55.78939,-22.3846],[-55.84304,-22.28725],[-56.20983,-22.27805],[-56.36485,-22.16949],[-56.39404,-22.07434],[-56.50711,-22.09561],[-56.63705,-22.26341],[-56.70344,-22.21693],[-56.72026,-22.26479],[-56.79344,-22.24238],[-56.84285,-22.30155],[-56.88343,-22.24755],[-56.9967,-22.22246],[-57.3744,-22.23204],[-57.5804,-22.17534],[-57.6106,-22.09462],[-57.70751,-22.09111],[-57.80183,-22.15072],[-57.99384,-22.09023],[-58.00946,-22.04038],[-57.91281,-21.88266],[-57.96603,-21.85045],[-57.90866,-21.77355],[-57.94714,-21.74413],[-57.88329,-21.68903],[-57.93436,-21.65037],[-57.91387,-21.59021],[-57.96795,-21.52432],[-57.8535,-21.33109],[-57.92019,-21.27655],[-57.85066,-21.22407],[-57.86834,-21.04417],[-57.81919,-20.94066],[-57.92836,-20.90036],[-57.8552,-20.83403],[-57.89863,-20.78872],[-57.96183,-20.7916],[-57.93478,-20.74565],[-57.86732,-20.73265],[-57.92414,-20.66392],[-57.98848,-20.69879],[-57.99847,-20.43551],[-58.09339,-20.35554],[-58.09596,-20.25445],[-58.16216,-20.25953],[-58.12152,-20.19246],[-58.16932,-20.1694],[-57.95347,-20.02094],[-57.90248,-20.04207],[-57.85796,-19.9703],[-58.131,-19.758],[-57.784,-19.033],[-57.694,-19.011],[-57.719,-18.899],[-57.766,-18.899],[-57.557,-18.24],[-57.453,-18.231],[-57.574,-18.131],[-57.72302,-17.83074],[-57.68472,-17.8306],[-57.70991,-17.72702],[-57.783,-17.639],[-57.73696,-17.5583],[-57.883,-17.449],[-57.996,-17.515],[-58.06,-17.45],[-58.116,-17.451],[-58.151,-17.384],[-58.263,-17.344],[-58.396,-17.181],[-58.423,-16.989],[-58.474,-16.935],[-58.47,-16.703],[-58.436,-16.592],[-58.333,-16.49],[-58.32227,-16.26559],[-58.388,-16.261],[-58.43059,-16.32264],[-60.17335,-16.26672],[-60.238,-15.473],[-60.57543,-15.09677],[-60.244,-15.096],[-60.272,-14.62],[-60.321,-14.608],[-60.492,-14.188],[-60.479,-14.097],[-60.38066,-13.9888],[-60.45062,-13.9364],[-60.45599,-13.85422],[-60.49068,-13.85782],[-60.46776,-13.79446],[-60.76755,-13.68329],[-60.87678,-13.62149],[-60.91857,-13.54334],[-61.0056,-13.552],[-61.0129,-13.48925],[-61.0938,-13.49081],[-61.10314,-13.53056],[-61.18155,-13.50557],[-61.19236,-13.53695],[-61.29954,-13.47718],[-61.46527,-13.55427],[-61.57927,-13.48711],[-61.852,-13.538],[-61.892,-13.431],[-61.96968,-13.40759],[-61.97592,-13.36695],[-62.11498,-13.25932],[-62.115,-13.163],[-62.15254,-13.15993],[-62.16703,-13.11346],[-62.19,-13.153],[-62.214,-13.111],[-62.27269,-13.15687],[-62.39178,-13.13471],[-62.453,-13.064],[-62.612,-13.041],[-62.65,-12.965],[-62.729,-13.02],[-62.779,-13.009],[-62.89672,-12.8539],[-63.01134,-12.83602],[-63.08186,-12.72323],[-63.06163,-12.68584],[-63.15726,-12.6138],[-63.24621,-12.66222],[-63.23713,-12.69043],[-63.30125,-12.68138],[-63.44052,-12.608],[-63.43627,-12.56526],[-63.50641,-12.56562],[-63.55295,-12.50598],[-63.7848,-12.42871],[-63.88957,-12.44745],[-63.89949,-12.50204],[-63.95144,-12.53179],[-64.13464,-12.47732],[-64.16781,-12.51503],[-64.17504,-12.46675],[-64.22945,-12.45419],[-64.29018,-12.50313],[-64.29452,-12.4582],[-64.41057,-12.44436],[-64.51217,-12.3551],[-64.51256,-12.22562],[-64.70406,-12.1827],[-64.70719,-12.08684],[-64.75486,-12.15762],[-64.7688,-12.09356],[-64.83747,-12.11786],[-64.80954,-12.05633],[-64.84077,-12.01027],[-65.03548,-11.99408],[-65.01398,-11.90303],[-65.0727,-11.86587],[-65.08672,-11.7082],[-65.18953,-11.72353],[-65.18216,-11.75609],[-65.2593,-11.71053],[-65.21178,-11.52857],[-65.3074,-11.49957],[-65.33276,-11.33986],[-65.29053,-11.32275],[-65.34347,-11.3082],[-65.35834,-11.26834],[-65.35938,-11.22067],[-65.31294,-11.19578],[-65.35387,-11.18419],[-65.36177,-11.14031],[-65.28269,-11.09009],[-65.30071,-11.03142],[-65.25053,-10.98506],[-65.27476,-10.87302],[-65.35376,-10.78881],[-65.34667,-10.68155],[-65.40569,-10.63935],[-65.43011,-10.48505],[-65.288,-10.219],[-65.333,-9.965],[-65.28588,-9.84413],[-65.39313,-9.68683],[-65.44394,-9.66957],[-65.4883,-9.71015],[-65.55611,-9.84498],[-65.627,-9.83804],[-65.66963,-9.78129],[-65.71023,-9.80857],[-65.68395,-9.74992],[-65.7432,-9.78296],[-65.77013,-9.73442],[-65.79437,-9.79295],[-65.79962,-9.75663],[-65.86532,-9.79533],[-65.87184,-9.75307],[-65.91976,-9.75314],[-65.98222,-9.81011],[-66.151,-9.785],[-66.426,-9.899],[-66.435,-9.866],[-66.61995,-9.89353],[-66.63701,-9.94983],[-66.8751,-10.08268],[-66.9528,-10.18886],[-66.99683,-10.20017],[-67.01537,-10.25919],[-67.17745,-10.33923],[-67.31545,-10.31932],[-67.31155,-10.37716],[-67.40717,-10.37386],[-67.44361,-10.45492],[-67.57925,-10.5028],[-67.64028,-10.59807],[-67.67631,-10.60484],[-67.70825,-10.71083],[-67.86386,-10.64067],[-68.03289,-10.65486],[-68.10456,-10.71426],[-68.10333,-10.77541],[-68.27819,-10.98926],[-68.71576,-11.14483],[-68.75767,-11.00079],[-68.9118,-11.02192],[-69.41453,-10.92575],[-69.73653,-10.97445],[-69.76903,-10.92972],[-69.93442,-10.9219],[-70.15869,-11.04096],[-70.30672,-11.06983],[-70.43675,-11.03923],[-70.53033,-10.93465],[-70.62103,-10.99982],[-70.62338,-9.82054],[-70.53663,-9.76584],[-70.59972,-9.56264],[-70.55282,-9.57093],[-70.56894,-9.53127],[-70.50506,-9.50557],[-70.49665,-9.42489],[-70.59581,-9.4425],[-70.6632,-9.52601],[-70.75067,-9.56043],[-70.79332,-9.63846],[-70.96337,-9.74891],[-70.99391,-9.81721],[-71.13974,-9.85702],[-71.22052,-9.96968],[-72.1804,-9.99967],[-72.15136,-9.79742],[-72.26296,-9.75085],[-72.25282,-9.61633],[-72.28821,-9.60316],[-72.2829,-9.53995],[-72.35688,-9.4946],[-72.51954,-9.49128],[-72.71676,-9.4122],[-73.2038,-9.40715],[-73.07352,-9.23461],[-73.0093,-9.22236],[-73.02612,-9.17786],[-72.9582,-9.14302],[-72.94091,-8.98494],[-72.99931,-8.91778],[-73.05901,-8.90561],[-73.14992,-8.6839],[-73.20907,-8.6857],[-73.28745,-8.61948],[-73.3055,-8.47197],[-73.38956,-8.46878],[-73.41286,-8.41099],[-73.53744,-8.34587],[-73.62739,-8.02187],[-73.73175,-7.9684],[-73.7725,-7.90237],[-73.76164,-7.85803],[-73.69706,-7.86527],[-73.6843,-7.77644],[-73.82217,-7.71788],[-73.99094,-7.53635],[-73.948,-7.52661],[-73.91981,-7.46568],[-73.96394,-7.34764],[-73.87014,-7.37882],[-73.7003,-7.30429],[-73.79842,-7.11306],[-73.71046,-6.84019],[-73.53639,-6.6834],[-73.39115,-6.64193],[-73.35281,-6.59327],[-73.22741,-6.58884],[-73.18797,-6.52302],[-73.13523,-6.51046],[-73.10473,-6.40666],[-73.24664,-6.14963],[-73.23821,-6.04399],[-73.1868,-6.00512],[-73.15207,-5.86796],[-73.05303,-5.79517],[-72.95912,-5.65689],[-72.95888,-5.46613],[-72.86052,-5.27117],[-72.88725,-5.16307],[-72.73986,-5.08859],[-72.72765,-5.05199],[-72.6212,-5.0518],[-72.598,-4.98386],[-72.38202,-4.87296],[-72.36895,-4.80387],[-72.12601,-4.73454],[-72.04335,-4.62384],[-72.00689,-4.64622],[-71.99464,-4.60996],[-71.94743,-4.60877],[-71.91909,-4.5298],[-71.88549,-4.53803],[-71.9073,-4.51644],[-71.76637,-4.50446],[-71.75109,-4.46887],[-71.70817,-4.51165],[-71.65479,-4.47246],[-71.65032,-4.50395],[-71.61548,-4.4687],[-71.6335,-4.51524],[-71.59625,-4.52928],[-71.53703,-4.46442],[-71.49428,-4.48701],[-71.50716,-4.43909],[-71.43438,-4.42882],[-71.42562,-4.47058],[-71.35026,-4.42728],[-71.30752,-4.46288],[-71.32091,-4.42009],[-71.27782,-4.44217],[-71.26975,-4.385],[-71.20263,-4.37987],[-71.19422,-4.42471],[-71.14478,-4.38158],[-71.11491,-4.41119],[-71.10616,-4.37764],[-70.99389,-4.38654],[-70.99595,-4.34632],[-70.9357,-4.38432],[-70.84483,-4.27905],[-70.86447,-4.25245],[-70.81677,-4.23005],[-70.8458,-4.21872],[-70.75901,-4.15944],[-70.68147,-4.20791],[-70.64256,-4.12805],[-70.62521,-4.19151],[-70.56118,-4.1775],[-70.57357,-4.21169],[-70.54796,-4.13671],[-70.51036,-4.14824],[-70.50417,-4.20098],[-70.48535,-4.16132],[-70.43435,-4.16266],[-70.43146,-4.13217],[-70.33892,-4.17997],[-70.32281,-4.14206],[-70.28769,-4.16555],[-70.29141,-4.28709],[-70.21457,-4.29749],[-70.19194,-4.36179],[-70.15508,-4.27308],[-70.11749,-4.28585],[-70.10881,-4.25454],[-70.04189,-4.29409],[-70.07948,-4.31428],[-70.02826,-4.3703],[-69.99182,-4.37482],[-69.94793,-4.23168]],[[-34.00035,-3.76654],[-34.01797,-3.84985],[-34.00664,-3.91809],[-33.98608,-3.95952],[-33.95923,-3.99217],[-33.8921,-4.03653],[-33.81658,-4.05077],[-33.72931,-4.03151],[-33.66638,-3.9838],[-33.62736,-3.9185],[-33.61519,-3.84985],[-33.63239,-3.76864],[-33.68693,-3.69537],[-33.74987,-3.65978],[-33.81658,-3.6489],[-33.89336,-3.66397],[-33.96007,-3.70877],[-34.00035,-3.76654]],[[-32.5538,-4.00884],[-32.59937,-3.9531],[-32.64061,-3.87309],[-32.61755,-3.73712],[-32.58338,-3.70527],[-32.54228,-3.65606],[-32.4592,-3.63029],[-32.35174,-3.63887],[-32.30049,-3.67684],[-32.24749,-3.75266],[-32.23155,-3.81889],[-32.2357,-3.90247],[-32.30194,-3.9883],[-32.42898,-4.0384],[-32.5538,-4.00884]],[[-29.50321,0.79391],[-29.54097,0.8689],[-29.54727,0.92553],[-29.52367,0.99422],[-29.48958,1.06134],[-29.43136,1.10224],[-29.35899,1.1206],[-29.29238,1.11378],[-29.22158,1.0776],[-29.16285,1.00314],[-29.14501,0.92605],[-29.14764,0.88358],[-29.17176,0.8196],[-29.24885,0.74357],[-29.29448,0.72521],[-29.36371,0.71892],[-29.43556,0.73937],[-29.50321,0.79391]],[[-29.09537,-20.42649],[-29.19756,-20.33509],[-29.3343,-20.28932],[-29.46741,-20.3288],[-29.54604,-20.42958],[-29.55396,-20.52706],[-29.51696,-20.62613],[-29.40995,-20.68955],[-29.27599,-20.72578],[-29.15968,-20.66209],[-29.07188,-20.57088],[-28.9712,-20.64769],[-28.83286,-20.69814],[-28.67968,-20.62099],[-28.63549,-20.49284],[-28.63412,-20.47146],[-28.7431,-20.30094],[-28.8683,-20.27288],[-29.0031,-20.32416],[-29.09537,-20.42649]]],terms_text:"IBGE, OSM Brasil",icon:"https://osmlab.github.io/editor-layer-index/sources/south-america/br/IBGE.png",overlay:true},{id:"IBGE_BC250_Aglomerado_Rural",name:"IBGE-BC250-Aglomerado Rural Isolado",type:"wms",template:"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Aglomerado_Rural_Isolado_P&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Pista_Pouso",name:"IBGE-BC250-Pista de Pouso",type:"wms",template:"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Pista_Ponto_Pouso_L&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Rios_Drenagem",name:"IBGE-BC250-Rios Drenagem",type:"wms",template:"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Trecho_Drenagem_L&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Terra_Indegina",name:"IBGE-BC250-Terra Indigena",type:"wms",template:"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Terra_Indigena_A&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Rodoviario",name:"IBGE-BC250-Trecho Rodoviario",type:"wms",template:"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Trecho_Rodoviario_L&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image/png&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Uso_Sustentavel",name:"IBGE-BC250-Unidade de Uso Sistentável - APA",type:"wms",template:"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Unidade_Uso_Sustentavel_A&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Villa",name:"IBGE-BC250-Villa",type:"wms",template:"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Vila_P&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BCIM_Gerador_Eletrica",name:"IBGE-BCIM-Estações Geradora de Energia Elétrica",type:"wms",template:"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BCIM_Est_Gerad_Energia_Eletrica_P&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BCIM_Municipio",name:"IBGE-BCIM-Município",type:"wms",template:"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BCIM_Municipio_A&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.83894],[-66.52331,-9.98587],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"ign-topografico-tms",name:"IGN topographical map (TMS)",type:"tms",template:"https://ide.ign.gob.ar/geoservicios/rest/services/Mapas_IGN/mapa_topografico/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[1,20],polygon:[[[-55.5438,-35.77219],[-64.31743,-49.44788],[-61.52546,-55.68296],[-66.04226,-55.24192],[-66.6896,-55.17191],[-66.86233,-55.04496],[-67.23387,-54.9245],[-67.47633,-54.92785],[-67.71808,-54.91261],[-67.96138,-54.88571],[-68.18753,-54.89288],[-68.61804,-54.92151],[-68.66375,-52.66716],[-68.51023,-52.39432],[-70.01629,-52.05707],[-72.05562,-52.01749],[-72.09055,-51.93758],[-72.02273,-51.88832],[-72.49598,-51.597],[-72.3623,-51.25935],[-72.46252,-51.08654],[-72.31217,-50.90093],[-72.39293,-50.69005],[-72.49148,-50.66866],[-72.59646,-50.73916],[-72.76983,-50.68829],[-73.22154,-50.87193],[-73.22709,-50.66897],[-73.39438,-50.58008],[-73.57703,-50.15788],[-73.53993,-50.01443],[-73.61453,-49.91795],[-73.52684,-49.7716],[-73.02779,-49.70085],[-73.02788,-49.23743],[-73.16148,-49.13062],[-72.96385,-48.89084],[-72.80952,-48.90039],[-72.59462,-48.77255],[-72.63621,-48.45823],[-72.46698,-48.45706],[-72.42158,-48.31422],[-72.3428,-48.29046],[-72.37166,-48.15995],[-72.57678,-47.96054],[-72.5731,-47.72062],[-72.3839,-47.57888],[-72.38448,-47.41759],[-72.07162,-47.2755],[-72.04726,-47.14867],[-71.93566,-47.15037],[-72.00956,-47.08473],[-72.00759,-46.78833],[-71.71488,-46.64453],[-71.7985,-46.26925],[-71.97019,-46.14972],[-71.63332,-45.97063],[-71.66595,-45.89232],[-71.77408,-45.85187],[-71.8548,-45.61169],[-71.7885,-45.50505],[-71.58354,-45.45607],[-71.58236,-45.36316],[-71.40574,-45.27206],[-71.61593,-45.03146],[-72.07949,-44.93988],[-72.11766,-44.73884],[-71.47444,-44.68048],[-71.2897,-44.75036],[-71.28469,-44.60892],[-71.20209,-44.5359],[-71.40536,-44.44891],[-71.86374,-44.44274],[-71.9047,-44.10354],[-71.70007,-43.98287],[-71.78725,-43.80985],[-71.63263,-43.65888],[-71.87866,-43.56195],[-71.95542,-43.44292],[-71.91512,-43.319],[-71.80268,-43.29535],[-71.73869,-43.19234],[-71.94149,-43.11061],[-72.18001,-42.8948],[-72.18733,-42.66619],[-72.06314,-42.53751],[-72.0441,-42.41231],[-72.14365,-42.40333],[-72.20024,-42.17229],[-72.17802,-42.13207],[-72.06032,-42.10593],[-71.78041,-42.12128],[-71.83133,-41.78089],[-71.94135,-41.60926],[-71.9023,-41.06778],[-72.02097,-40.73647],[-71.91507,-40.61832],[-71.87117,-40.38959],[-71.76665,-40.35676],[-71.87961,-40.24227],[-71.8856,-40.10093],[-71.67779,-39.92156],[-71.74365,-39.86164],[-71.77001,-39.61946],[-71.68665,-39.50983],[-71.58545,-39.55159],[-71.45202,-39.31025],[-71.47673,-38.89162],[-71.25594,-38.74909],[-70.95844,-38.70272],[-70.89411,-38.57644],[-71.03346,-38.45451],[-71.08724,-38.09054],[-71.23505,-37.86541],[-71.26668,-37.68295],[-71.18031,-37.4828],[-71.27241,-37.28686],[-71.17697,-37.1077],[-71.27586,-36.9637],[-71.20495,-36.91075],[-71.2345,-36.83303],[-71.07654,-36.43571],[-70.96469,-36.43366],[-70.90086,-36.34336],[-70.77062,-36.35412],[-70.59553,-36.12118],[-70.44219,-36.14876],[-70.42788,-35.73781],[-70.50607,-35.38014],[-70.59764,-35.34459],[-70.63128,-35.23712],[-70.42629,-35.12462],[-70.32933,-34.83081],[-70.35687,-34.72532],[-70.07752,-34.38253],[-70.06901,-34.24694],[-69.87771,-34.20233],[-69.95948,-33.77235],[-69.83371,-33.34911],[-70.02502,-33.37388],[-70.14906,-33.04145],[-70.06223,-33.01233],[-70.00981,-32.90747],[-70.19517,-32.75732],[-70.19589,-32.50891],[-70.28486,-32.45564],[-70.44343,-32.05325],[-70.41077,-31.9809],[-70.29402,-31.95849],[-70.5117,-31.85844],[-70.62295,-31.59949],[-70.59941,-31.29869],[-70.5377,-31.08557],[-70.35748,-31.0002],[-70.20264,-30.32249],[-69.97775,-30.32288],[-69.847,-30.16294],[-70.01824,-30.10003],[-69.95038,-29.73744],[-70.03755,-29.35428],[-69.97565,-29.18743],[-69.85112,-29.06923],[-69.70118,-28.37779],[-69.20484,-27.90816],[-68.84844,-27.13115],[-68.76133,-27.08588],[-68.60693,-27.09636],[-68.3489,-26.92771],[-68.64137,-26.50722],[-68.60352,-26.25391],[-68.45177,-26.1377],[-68.63052,-25.43524],[-68.55582,-25.14476],[-68.44595,-25.0658],[-68.62011,-24.81717],[-68.55162,-24.58836],[-68.28078,-24.34935],[-67.32648,-24.02538],[-66.99882,-23.00044],[-67.18775,-22.81375],[-67.08088,-22.62433],[-67.03366,-22.53815],[-66.84345,-22.39746],[-66.73734,-22.22282],[-66.38248,-22.07602],[-66.28978,-21.76554],[-66.21845,-21.72575],[-65.89675,-21.88263],[-65.71368,-22.09054],[-65.61493,-22.09152],[-65.60973,-22.09505],[-65.60607,-22.09358],[-65.60256,-22.09658],[-65.60015,-22.09543],[-65.59229,-22.09511],[-65.59015,-22.09735],[-65.58691,-22.09645],[-65.58512,-22.08432],[-65.57523,-22.07312],[-65.47487,-22.08487],[-64.99026,-22.06739],[-64.59768,-22.19269],[-64.52643,-22.29504],[-64.33114,-22.68517],[-64.10381,-22.34114],[-64.10712,-22.32023],[-64.06522,-22.23093],[-64.04702,-22.23757],[-64.03654,-22.19469],[-64.0029,-22.10735],[-63.99022,-22.07925],[-63.97147,-22.07619],[-63.94118,-21.99823],[-63.70932,-21.99896],[-63.68839,-22.01037],[-63.68079,-22.03116],[-63.68507,-22.04019],[-63.68156,-22.05185],[-63.67659,-22.03287],[-63.67201,-22.02293],[-63.66821,-22.01634],[-63.67191,-22.01399],[-63.66566,-21.99839],[-62.79606,-21.98778],[-62.74618,-22.10033],[-62.18511,-22.50843],[-61.93761,-22.97376],[-61.45605,-23.36182],[-61.05842,-23.56621],[-60.95137,-23.75997],[-60.28746,-24.01906],[-60.03728,-24.00408],[-59.46607,-24.33428],[-59.12256,-24.59772],[-58.46645,-24.84584],[-58.332,-24.98132],[-58.2349,-24.91756],[-57.8565,-25.08005],[-57.76981,-25.15013],[-57.75374,-25.17277],[-57.71597,-25.26456],[-57.71837,-25.27146],[-57.71111,-25.27265],[-57.71008,-25.28146],[-57.70692,-25.2845],[-57.70438,-25.28159],[-57.70273,-25.28239],[-57.70175,-25.28459],[-57.69741,-25.28283],[-57.69281,-25.28588],[-57.69733,-25.29337],[-57.70246,-25.29847],[-57.69612,-25.30832],[-57.69763,-25.3199],[-57.69143,-25.32127],[-57.67993,-25.33318],[-57.64822,-25.3679],[-57.63902,-25.38287],[-57.61504,-25.38841],[-57.59954,-25.39704],[-57.57673,-25.42029],[-57.56698,-25.43147],[-57.55477,-25.43999],[-57.55285,-25.44705],[-57.55811,-25.45717],[-57.55763,-25.46897],[-57.56523,-25.48014],[-57.56806,-25.49501],[-57.57722,-25.50575],[-57.57566,-25.52264],[-57.5661,-25.54112],[-57.56809,-25.55797],[-57.58142,-25.57145],[-57.59952,-25.57438],[-57.60444,-25.59855],[-57.6122,-25.61963],[-57.6367,-25.61807],[-57.66569,-25.60273],[-57.67006,-25.65579],[-57.67513,-25.66052],[-57.68626,-25.66287],[-57.69808,-25.65933],[-57.71855,-25.64914],[-57.72537,-25.71924],[-57.77786,-25.77559],[-57.84986,-26.01142],[-58.08597,-26.14202],[-58.13896,-26.66834],[-58.28224,-26.80127],[-58.32056,-26.82169],[-58.3167,-26.86081],[-58.32384,-26.87074],[-58.56858,-27.20629],[-57.90834,-27.24265],[-56.99114,-27.41858],[-56.60886,-27.36586],[-56.40607,-27.52701],[-56.32355,-27.36897],[-56.09353,-27.25219],[-55.76168,-27.38106],[-55.65541,-27.30153],[-55.67524,-27.17004],[-55.59643,-27.06538],[-55.40826,-26.91763],[-55.20788,-26.89214],[-54.97304,-26.63717],[-54.8532,-26.59894],[-54.72264,-26.31238],[-54.73235,-25.98554],[-54.65309,-25.84138],[-54.71357,-25.66721],[-54.62995,-25.55106],[-54.44288,-25.5795],[-54.11451,-25.4396],[-53.80059,-25.65093],[-53.766,-25.94301],[-53.59024,-26.19274],[-53.67264,-26.61495],[-53.61669,-26.95395],[-53.76351,-27.18917],[-54.15393,-27.36033],[-54.26461,-27.49923],[-54.79439,-27.6397],[-55.0044,-27.90341],[-55.19076,-27.92946],[-55.41589,-28.14304],[-55.66542,-28.26547],[-55.61633,-28.32205],[-55.65957,-28.46539],[-55.83413,-28.42136],[-55.87339,-28.49468],[-56.13558,-28.7265],[-56.37343,-29.10817],[-56.569,-29.13892],[-56.76306,-29.48638],[-57.05958,-29.72263],[-57.24463,-29.86452],[-57.3045,-30.03966],[-57.61942,-30.20517],[-57.60863,-30.32424],[-57.82983,-30.53118],[-57.75241,-30.68756],[-57.75273,-30.91942],[-57.93419,-31.27388],[-57.99,-31.36053],[-57.98302,-31.3734],[-57.97736,-31.38022],[-57.97778,-31.38599],[-57.98203,-31.39213],[-58.00944,-31.41341],[-58.06637,-31.47395],[-57.92613,-31.57745],[-57.98622,-31.77449],[-58.12179,-31.89772],[-58.11905,-32.14059],[-58.04227,-32.29153],[-58.14327,-32.45845],[-58.0758,-33.00587],[-58.18964,-33.09402],[-58.2723,-33.1061],[-58.31012,-33.1048],[-58.35418,-33.1221],[-58.37567,-33.17644],[-58.44465,-33.5853],[-58.43016,-33.71813],[-58.42434,-33.86887],[-58.41858,-33.91742],[-58.33697,-34.00477],[-58.241,-34.16246],[-57.84696,-34.50017],[-55.5438,-35.77219]]],terms_url:"http://www.ign.gob.ar/",terms_text:"Instituto Geográfico Nacional de la República Argentina",icon:"http://www.ign.gob.ar/sites/default/files/favicon.png"},{id:"Haiti-Drone",name:"Imagerie Drone (Haiti)",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/iomhaiti/{zoom}/{x}/{y}",zoomExtent:[0,21],polygon:[[[-72.15474,19.6879],[-72.15458,19.6878],[-72.15485,19.68776],[-72.15472,19.68685],[-72.15431,19.68707],[-72.15463,19.68544],[-72.15301,19.68499],[-72.15086,19.68435],[-72.15045,19.68479],[-72.15078,19.68315],[-72.15223,19.6833],[-72.15282,19.68066],[-72.15186,19.68051],[-72.15191,19.68034],[-72.15227,19.68035],[-72.15238,19.67972],[-72.15328,19.67965],[-72.15333,19.67698],[-72.15308,19.67694],[-72.15348,19.67638],[-72.14878,19.67107],[-72.13664,19.67081],[-72.13557,19.67408],[-72.13573,19.68351],[-72.13679,19.68407],[-72.13695,19.68559],[-72.13778,19.685],[-72.13782,19.68727],[-72.13888,19.68767],[-72.13881,19.69013],[-72.13853,19.68949],[-72.13806,19.68964],[-72.13869,19.69232],[-72.13825,19.69276],[-72.13948,19.69737],[-72.14101,19.7],[-72.1437,19.70112],[-72.14851,19.70015],[-72.14772,19.70268],[-72.14874,19.7029],[-72.1616,19.70357],[-72.16578,19.698],[-72.165,19.69324],[-72.16223,19.68901],[-72.15474,19.6879]],[[-72.13106,19.67189],[-72.12598,19.67728],[-72.12554,19.67762],[-72.12169,19.67764],[-72.11497,19.6726],[-72.11527,19.66872],[-72.11982,19.66275],[-72.12278,19.66257],[-72.1249,19.6627],[-72.12858,19.66454],[-72.13081,19.66617],[-72.13167,19.66879],[-72.13156,19.671],[-72.13106,19.67189]],[[-71.84579,19.67098],[-71.84294,19.67595],[-71.841,19.67595],[-71.83802,19.67553],[-71.83787,19.6745],[-71.83905,19.67439],[-71.83901,19.67411],[-71.83984,19.67395],[-71.83891,19.67361],[-71.83802,19.67209],[-71.83801,19.67263],[-71.83767,19.67272],[-71.83763,19.67254],[-71.83544,19.67321],[-71.83533,19.673],[-71.83312,19.67346],[-71.83267,19.67168],[-71.83216,19.67209],[-71.83072,19.66949],[-71.8306,19.66976],[-71.83022,19.66989],[-71.82918,19.66721],[-71.82907,19.66721],[-71.82891,19.66679],[-71.82895,19.66662],[-71.82883,19.66635],[-71.82856,19.66648],[-71.82887,19.66725],[-71.82876,19.66741],[-71.8278,19.66782],[-71.82771,19.66786],[-71.82783,19.66796],[-71.82718,19.66812],[-71.82718,19.66809],[-71.82644,19.66839],[-71.82641,19.66832],[-71.8262,19.66843],[-71.82618,19.66836],[-71.82589,19.66842],[-71.82589,19.66866],[-71.82516,19.66875],[-71.82545,19.66916],[-71.82293,19.66957],[-71.82271,19.66967],[-71.82277,19.66976],[-71.82018,19.67099],[-71.81985,19.67045],[-71.8198,19.6706],[-71.81947,19.67076],[-71.81825,19.67134],[-71.81814,19.67114],[-71.81758,19.67143],[-71.81696,19.67077],[-71.81764,19.6719],[-71.81714,19.67204],[-71.81582,19.6718],[-71.81384,19.67119],[-71.81233,19.6707],[-71.81218,19.67043],[-71.81243,19.67015],[-71.81192,19.67001],[-71.81188,19.67058],[-71.81117,19.67035],[-71.80959,19.66985],[-71.8078,19.66928],[-71.8056,19.66861],[-71.80514,19.66689],[-71.80512,19.66523],[-71.80523,19.66198],[-71.80656,19.65239],[-71.80734,19.64829],[-71.80997,19.64683],[-71.81475,19.64545],[-71.81477,19.64556],[-71.815,19.64551],[-71.81495,19.64538],[-71.81599,19.64502],[-71.81589,19.64489],[-71.81659,19.64461],[-71.81901,19.6438],[-71.82115,19.64345],[-71.82216,19.64333],[-71.8269,19.64321],[-71.82805,19.64322],[-71.83045,19.64408],[-71.83064,19.64486],[-71.82953,19.64504],[-71.82961,19.64561],[-71.82994,19.64557],[-71.83037,19.64517],[-71.83047,19.64535],[-71.83081,19.6452],[-71.83102,19.64511],[-71.83125,19.64585],[-71.83111,19.64582],[-71.83137,19.64659],[-71.83289,19.64619],[-71.83446,19.64571],[-71.83447,19.64631],[-71.83422,19.64619],[-71.8342,19.64655],[-71.83467,19.6463],[-71.83491,19.64639],[-71.8348,19.64622],[-71.83544,19.64585],[-71.8355,19.6458],[-71.83647,19.64613],[-71.83764,19.64727],[-71.83791,19.64789],[-71.83905,19.6508],[-71.84569,19.66962],[-71.84579,19.67098]],[[-72.09888,18.54843],[-72.09907,18.54838],[-72.09991,18.54809],[-72.10234,18.54813],[-72.10252,18.54814],[-72.10229,18.54826],[-72.10229,18.54828],[-72.10256,18.54815],[-72.10272,18.54814],[-72.10343,18.54871],[-72.10354,18.5489],[-72.10352,18.54974],[-72.10349,18.54974],[-72.10351,18.55003],[-72.10285,18.55018],[-72.1029,18.55025],[-72.10287,18.55031],[-72.10352,18.55024],[-72.1035,18.55152],[-72.10338,18.55152],[-72.10308,18.55161],[-72.10348,18.55162],[-72.10342,18.55435],[-72.10243,18.5555],[-72.10149,18.55562],[-72.10062,18.55559],[-72.0979,18.55521],[-72.09688,18.55466],[-72.09652,18.55421],[-72.09661,18.55417],[-72.09651,18.55417],[-72.09654,18.55398],[-72.09644,18.55355],[-72.09628,18.55357],[-72.09621,18.5532],[-72.09599,18.55337],[-72.09564,18.55267],[-72.09556,18.55185],[-72.09685,18.55035],[-72.09729,18.55032],[-72.09699,18.5502],[-72.09888,18.54843]],[[-72.25425,18.56826],[-72.25603,18.57178],[-72.25579,18.5748],[-72.2535,18.57555],[-72.25228,18.57555],[-72.24999,18.57409],[-72.24739,18.56983],[-72.24601,18.56673],[-72.24585,18.56295],[-72.24794,18.56254],[-72.25015,18.5628],[-72.25192,18.56508],[-72.25425,18.56826]],[[-72.30315,18.53327],[-72.30313,18.53318],[-72.30483,18.53111],[-72.30974,18.53111],[-72.31643,18.53243],[-72.32341,18.53661],[-72.32614,18.53878],[-72.32619,18.54264],[-72.31705,18.55406],[-72.31309,18.55406],[-72.29875,18.54533],[-72.29886,18.54073],[-72.2963,18.54047],[-72.29546,18.53952],[-72.29619,18.53386],[-72.29719,18.53322],[-72.3007,18.53328],[-72.30227,18.53423],[-72.30285,18.53352],[-72.3031,18.53334],[-72.30318,18.5334],[-72.30358,18.53356],[-72.30308,18.53465],[-72.30371,18.53399],[-72.30453,18.53441],[-72.3044,18.53451],[-72.30627,18.53526],[-72.30631,18.53527],[-72.30612,18.53576],[-72.30612,18.53582],[-72.30637,18.53589],[-72.30627,18.53549],[-72.30667,18.53509],[-72.3062,18.53497],[-72.30589,18.53494],[-72.30554,18.53468],[-72.30549,18.53461],[-72.30556,18.53451],[-72.30467,18.53423],[-72.30476,18.53388],[-72.30433,18.53375],[-72.30426,18.53363],[-72.30315,18.53327]],[[-72.29814,18.4775],[-72.29357,18.49486],[-72.29222,18.49643],[-72.29317,18.49725],[-72.28923,18.50571],[-72.28781,18.5081],[-72.28505,18.51199],[-72.28402,18.51132],[-72.28086,18.51588],[-72.27732,18.5176],[-72.27235,18.51752],[-72.26627,18.51446],[-72.26659,18.50668],[-72.26926,18.50462],[-72.2662,18.50298],[-72.26882,18.49652],[-72.26915,18.49594],[-72.27027,18.49615],[-72.27027,18.4956],[-72.26907,18.49557],[-72.26929,18.49377],[-72.2737,18.486],[-72.27467,18.48504],[-72.27518,18.4834],[-72.27654,18.48134],[-72.27735,18.4815],[-72.2783,18.48097],[-72.27785,18.4807],[-72.2771,18.48012],[-72.279,18.47758],[-72.27972,18.47729],[-72.28064,18.47764],[-72.28137,18.47716],[-72.28084,18.47698],[-72.28128,18.47584],[-72.28232,18.47518],[-72.28516,18.4751],[-72.28499,18.47637],[-72.28544,18.47698],[-72.28628,18.47563],[-72.28693,18.47547],[-72.2866,18.47519],[-72.2866,18.475],[-72.29098,18.47473],[-72.29466,18.47494],[-72.29739,18.47684],[-72.29814,18.4775]],[[-72.34667,18.52224],[-72.34683,18.52443],[-72.34753,18.52776],[-72.34555,18.52911],[-72.34031,18.52922],[-72.33833,18.52803],[-72.3369,18.53012],[-72.33381,18.52967],[-72.32893,18.52708],[-72.32865,18.52533],[-72.32921,18.52327],[-72.33041,18.52205],[-72.33216,18.52218],[-72.33225,18.5192],[-72.33692,18.51836],[-72.3382,18.51847],[-72.33815,18.51818],[-72.3412,18.51779],[-72.34549,18.5172],[-72.34926,18.51728],[-72.35043,18.51889],[-72.35035,18.52061],[-72.34968,18.52204],[-72.34667,18.52224]],[[-72.33031,18.54865],[-72.34297,18.55081],[-72.34332,18.55306],[-72.34131,18.56143],[-72.33906,18.56136],[-72.33847,18.56383],[-72.33753,18.56543],[-72.33484,18.56506],[-72.33118,18.56383],[-72.33121,18.56162],[-72.32321,18.56069],[-72.32124,18.5596],[-72.3208,18.5587],[-72.32088,18.55788],[-72.32595,18.55803],[-72.32662,18.5582],[-72.32592,18.55775],[-72.3251,18.55738],[-72.32338,18.55226],[-72.3246,18.54785],[-72.3289,18.54837],[-72.32998,18.54895],[-72.33031,18.54865]],[[-72.32314,18.52698],[-72.32234,18.52807],[-72.32096,18.52797],[-72.32078,18.52713],[-72.32085,18.52537],[-72.32146,18.52496],[-72.32257,18.52489],[-72.32285,18.52533],[-72.32324,18.52648],[-72.32314,18.52698]],[[-72.21608,18.64578],[-72.21596,18.65538],[-72.20303,18.65583],[-72.19471,18.65534],[-72.19222,18.65456],[-72.19206,18.65213],[-72.19348,18.64776],[-72.20125,18.63852],[-72.20693,18.63882],[-72.2121,18.64241],[-72.21181,18.64306],[-72.21217,18.64269],[-72.2128,18.64276],[-72.21347,18.64313],[-72.21356,18.64375],[-72.21542,18.64439],[-72.21589,18.64503],[-72.21608,18.64578]],[[-72.28677,18.6482],[-72.2901,18.65274],[-72.28981,18.65365],[-72.29007,18.65427],[-72.29072,18.65377],[-72.29103,18.65447],[-72.29125,18.65422],[-72.29168,18.65589],[-72.29122,18.65661],[-72.29227,18.65597],[-72.29269,18.65675],[-72.29307,18.65673],[-72.29413,18.65818],[-72.29602,18.66084],[-72.29597,18.66191],[-72.29329,18.66457],[-72.29067,18.666],[-72.28959,18.66613],[-72.28959,18.66657],[-72.2877,18.66647],[-72.28758,18.66766],[-72.28312,18.66972],[-72.27965,18.66965],[-72.27843,18.66908],[-72.2784,18.66877],[-72.27774,18.66917],[-72.27744,18.66914],[-72.27701,18.66832],[-72.27656,18.66811],[-72.27654,18.66806],[-72.27523,18.66852],[-72.27493,18.66746],[-72.27464,18.66743],[-72.27347,18.66821],[-72.27323,18.66827],[-72.27268,18.66716],[-72.27191,18.66743],[-72.27188,18.66734],[-72.26881,18.66819],[-72.26883,18.66718],[-72.26908,18.66682],[-72.26881,18.66679],[-72.26811,18.66707],[-72.26763,18.66738],[-72.26756,18.66669],[-72.26686,18.66695],[-72.26559,18.66736],[-72.26545,18.66701],[-72.26475,18.66741],[-72.26299,18.66819],[-72.26285,18.66818],[-72.26265,18.66761],[-72.2623,18.66771],[-72.26248,18.66792],[-72.26248,18.66823],[-72.26231,18.66826],[-72.2621,18.66797],[-72.26228,18.66892],[-72.26015,18.6689],[-72.25427,18.66879],[-72.25054,18.66835],[-72.25044,18.66954],[-72.24779,18.66989],[-72.24152,18.66979],[-72.24142,18.67419],[-72.23892,18.67398],[-72.23872,18.67346],[-72.23837,18.67331],[-72.2387,18.67395],[-72.23755,18.6739],[-72.23742,18.67351],[-72.23774,18.67334],[-72.23751,18.67326],[-72.23684,18.67349],[-72.23644,18.67241],[-72.23551,18.6726],[-72.2354,18.67242],[-72.2353,18.6729],[-72.23455,18.67269],[-72.23431,18.67246],[-72.23424,18.67347],[-72.23341,18.67346],[-72.23329,18.6733],[-72.23274,18.67329],[-72.23271,18.6735],[-72.2277,18.67253],[-72.22653,18.67165],[-72.2268,18.67157],[-72.2275,18.67159],[-72.22749,18.67145],[-72.22729,18.67146],[-72.22728,18.6713],[-72.22721,18.67136],[-72.22618,18.67137],[-72.2256,18.67088],[-72.22551,18.66945],[-72.22611,18.66969],[-72.22618,18.66959],[-72.22598,18.66955],[-72.22578,18.66914],[-72.22533,18.66946],[-72.22497,18.66947],[-72.22458,18.66788],[-72.22355,18.6677],[-72.22359,18.66759],[-72.22246,18.66763],[-72.22237,18.66702],[-72.22233,18.66709],[-72.22192,18.66703],[-72.22081,18.6669],[-72.22081,18.66653],[-72.22087,18.66636],[-72.2206,18.66681],[-72.22039,18.66664],[-72.21843,18.66505],[-72.21829,18.6641],[-72.21835,18.66084],[-72.21872,18.66065],[-72.21869,18.6606],[-72.21873,18.66045],[-72.21898,18.66032],[-72.21878,18.6602],[-72.2187,18.66024],[-72.21858,18.66004],[-72.21861,18.66],[-72.21878,18.66013],[-72.219,18.66002],[-72.21891,18.65991],[-72.21897,18.65979],[-72.21838,18.65958],[-72.21847,18.65397],[-72.2201,18.65116],[-72.2258,18.64695],[-72.2283,18.64573],[-72.23793,18.64586],[-72.23776,18.6447],[-72.24004,18.64325],[-72.2456,18.64335],[-72.24827,18.64504],[-72.24875,18.64367],[-72.25111,18.64298],[-72.25124,18.64334],[-72.25126,18.64316],[-72.25148,18.64314],[-72.25133,18.64297],[-72.25336,18.64235],[-72.25352,18.64268],[-72.25395,18.64254],[-72.25415,18.64293],[-72.25439,18.64287],[-72.25438,18.64275],[-72.25642,18.64232],[-72.25669,18.64314],[-72.25688,18.64286],[-72.25682,18.64253],[-72.25884,18.6421],[-72.25889,18.64225],[-72.25926,18.64223],[-72.25965,18.64241],[-72.25922,18.64069],[-72.25995,18.64048],[-72.26012,18.64063],[-72.26012,18.63994],[-72.26153,18.63947],[-72.26261,18.6391],[-72.26545,18.63873],[-72.27194,18.63868],[-72.2722,18.63886],[-72.27303,18.63942],[-72.27317,18.64126],[-72.27387,18.64103],[-72.27422,18.64161],[-72.27522,18.6417],[-72.27545,18.64157],[-72.27555,18.64169],[-72.27554,18.64175],[-72.27647,18.64186],[-72.27675,18.6419],[-72.2763,18.6426],[-72.27742,18.643],[-72.27798,18.64272],[-72.27858,18.64313],[-72.27857,18.64323],[-72.2789,18.64335],[-72.27985,18.64397],[-72.28587,18.64697],[-72.28677,18.6482]],[[-72.55572,18.53059],[-72.55559,18.5367],[-72.555,18.53797],[-72.5488,18.53792],[-72.54866,18.53728],[-72.54884,18.53063],[-72.54937,18.5301],[-72.55513,18.53012],[-72.55572,18.53059]],[[-72.62353,18.50799],[-72.62344,18.50952],[-72.62261,18.51043],[-72.62049,18.51185],[-72.61834,18.51075],[-72.61622,18.50832],[-72.61626,18.50647],[-72.61866,18.50444],[-72.6204,18.5045],[-72.62283,18.507],[-72.62353,18.50799]]]},{id:"osmim-imagicode-S2A_R119_N09_20160327T050917",name:"imagico.de: Adams Bridge",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R119_N09_20160327T050917&z={zoom}&x={x}&y={-y}",endDate:"2016-03-27T00:00:00.000Z",startDate:"2016-03-27T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[79.01779,8.82757],[79.01402,9.64678],[80.17642,9.65042],[80.17728,8.8313],[79.01779,8.82757]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Supplementing incomplete coverage in other sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80700162014211LGN00",name:"imagico.de: Alaska Range",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80700162014211LGN00&z={zoom}&x={x}&y={-y}",endDate:"2014-07-31T00:00:00.000Z",startDate:"2014-07-31T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[-152.70873,62.30357],[-152.70839,62.58153],[-152.00835,63.54646],[-148.99432,63.5333],[-148.99432,62.30357],[-152.70873,62.30357]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent summer image of the Alaska Range for mapping natural features (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-aral2",name:"imagico.de: Aral Sea (high water level)",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=aral2&z={zoom}&x={x}&y={-y}",endDate:"2016-03-03T00:00:00.000Z",startDate:"2016-03-03T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[58.049,43.2623],[58.049,46.7189],[58.1014,46.8645],[61.5524,46.8629],[61.5524,46.3896],[61.4675,45.3416],[60.6317,43.2623],[58.049,43.2623]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Water and wetland extents, dams etc. - some remaining winter ice in the north (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-aral1",name:"imagico.de: Aral Sea (low water level)",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=aral1&z={zoom}&x={x}&y={-y}",endDate:"2016-09-09T00:00:00.000Z",startDate:"2016-09-09T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[58.049,43.2623],[58.049,46.7334],[58.096,46.8645],[61.5524,46.8629],[61.5524,46.3896],[61.4685,45.3544],[60.6267,43.2623],[58.049,43.2623]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Water and wetland extents, dams etc. (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R067_S40_20170417T140051",name:"imagico.de: Bahía Blanca (high tide)",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R067_S40_20170417T140051&z={zoom}&x={x}&y={-y}",endDate:"2017-04-17T00:00:00.000Z",startDate:"2017-04-17T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-62.9988,-40.7327],[-62.9988,-37.9476],[-61.7505,-37.9474],[-61.7501,-40.7322],[-62.9988,-40.7327]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Tidal flats and islands at the coast (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R067_S40_20170127T140051",name:"imagico.de: Bahía Blanca (low tide)",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R067_S40_20170127T140051&z={zoom}&x={x}&y={-y}",endDate:"2017-01-27T00:00:00.000Z",startDate:"2017-01-27T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-62.9988,-40.7327],[-62.9988,-37.9476],[-61.7505,-37.9474],[-61.7501,-40.7322],[-62.9988,-40.7327]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Tidal flats and islands at the coast (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81190582014075LGN00",name:"imagico.de: Bakun Reservoir",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81190582014075LGN00&z={zoom}&x={x}&y={-y}",endDate:"2014-03-16T00:00:00.000Z",startDate:"2014-03-16T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[114.36,2.02846],[113.53448,2.03],[113.53619,3.07077],[114.76512,3.06751],[114.76254,2.08816],[114.36,2.02846]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in older pre-2011 images (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81250592016107LGN00",name:"imagico.de: Batam",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81250592016107LGN00&z={zoom}&x={x}&y={-y}",endDate:"2016-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[104.00155,-0.00008],[104.00137,1.45099],[104.91015,1.45116],[104.91015,-0.00008],[104.00155,-0.00008]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing Islands in OSM (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80770232017156LGN00",name:"imagico.de: Bogoslof Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80770232017156LGN00&z={zoom}&x={x}&y={-y}",endDate:"2017-06-05T00:00:00.000Z",startDate:"2017-06-05T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-168.2544,53.8749],[-168.2544,54.0213],[-167.8591,54.0213],[-167.8591,53.8749],[-168.2544,53.8749]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent image from after the eruption (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81800982013291LGN00",name:"imagico.de: Bouvet Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81800982013291LGN00&z={zoom}&x={x}&y={-y}",endDate:"2013-10-18T00:00:00.000Z",startDate:"2013-10-18T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[3.24653,-54.47047],[3.24653,-54.37539],[3.46385,-54.37539],[3.46385,-54.47047],[3.24653,-54.47047]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",best:true,description:"For more accurate coastline and glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R017_S67_20170223T022551",name:"imagico.de: Bunger Hills",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R017_S67_20170223T022551&z={zoom}&x={x}&y={-y}",endDate:"2017-02-23T00:00:00.000Z",startDate:"2017-02-23T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[96.1197,-67.6542],[96.1201,-67.1899],[98.7331,-65.044],[105.1028,-65.044],[105.1028,-65.7224],[103.3017,-67.6542],[96.1197,-67.6542]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Largest ice free area at the East Antarctic coast - shows considerable amounts of non-permanent ice. (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R065_N47_20160929T102022",name:"imagico.de: Central Alps in late September 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R065_N47_20160929T102022&z={zoom}&x={x}&y={-y}",endDate:"2016-09-29T00:00:00.000Z",startDate:"2016-09-29T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[10.55906,45.95485],[7.47396,45.95533],[7.55585,46.2708],[8.0547,47.66469],[11.75245,47.66481],[11.75245,46.81334],[11.38424,45.95509],[10.55906,45.95485]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date image for glacier mapping - beware of some fresh snow at higher altitudes (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82050982015344LGN00",name:"imagico.de: Clerke Rocks",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82050982015344LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-12-10T00:00:00.000Z",startDate:"2015-12-10T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-34.17701,-55.29693],[-35.19599,-55.28285],[-35.16664,-54.72097],[-34.12517,-54.73465],[-34.1401,-55.29693],[-34.17701,-55.29693]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in other image sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R086_N60_20160831T213532",name:"imagico.de: Cook Inlet",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R086_N60_20160831T213532&z={zoom}&x={x}&y={-y}",endDate:"2016-08-31T00:00:00.000Z",startDate:"2016-08-31T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-154.5102,59.4577],[-154.5097,60.6888],[-153.5403,62.1718],[-148.0423,62.1718],[-148.0445,61.5342],[-149.7291,59.4584],[-154.5102,59.4577]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Tidal flats and glaciers in surrounding mountains (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-EO1A0040712016264110KF",name:"imagico.de: Coropuna",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=EO1A0040712016264110KF&z={zoom}&x={x}&y={-y}",endDate:"2016-09-21T00:00:00.000Z",startDate:"2016-09-21T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-72.75945,-15.68684],[-72.75945,-15.4957],[-72.74434,-15.4263],[-72.41286,-15.4263],[-72.41286,-15.65296],[-72.42411,-15.68667],[-72.75945,-15.68684]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date image for glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R022_N06_20151221T103009",name:"imagico.de: Cotonou",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R022_N06_20151221T103009&z={zoom}&x={x}&y={-y}",endDate:"2015-12-21T00:00:00.000Z",startDate:"2015-12-21T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[1.83975,6.2578],[1.83975,7.11427],[2.5494,7.11427],[2.5494,6.48905],[2.49781,6.25806],[1.83975,6.2578]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Patchy and partly cloudy coverage in usual sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R040_N01_20160311T164128",name:"imagico.de: Darwin and Wolf islands, Galapagos",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R040_N01_20160311T164128&z={zoom}&x={x}&y={-y}",endDate:"2016-03-11T00:00:00.000Z",startDate:"2016-03-11T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-92.05216,1.3213],[-92.05216,1.72181],[-91.74849,1.72181],[-91.74849,1.3213],[-92.05216,1.3213]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent image, only old and poor images in other sources currently (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80360072014245LGN00",name:"imagico.de: Eastern Devon Island coast",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80360072014245LGN00&z={zoom}&x={x}&y={-y}",endDate:"2014-09-02T00:00:00.000Z",startDate:"2014-09-02T00:00:00.000Z",zoomExtent:[0,11],polygon:[[[-84.34799,74.38946],[-84.34799,75.8903],[-79.14871,75.8903],[-79.14871,74.38946],[-84.34799,74.38946]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Coastline mostly mapped meanwhile (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82160152013239LGN00",name:"imagico.de: Eastern Iceland",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82160152013239LGN00&z={zoom}&x={x}&y={-y}",endDate:"2013-08-27T00:00:00.000Z",startDate:"2013-08-27T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[-13.04701,64.21109],[-15.16496,64.22408],[-15.16805,64.81573],[-13.04357,64.8036],[-13.04701,64.21109]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing islets and inaccurate coast (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-AST_L1T_00302052007154424_20150518041444_91492",name:"imagico.de: El Altar",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=AST_L1T_00302052007154424_20150518041444_91492&z={zoom}&x={x}&y={-y}",endDate:"2012-02-05T00:00:00.000Z",startDate:"2012-02-05T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-78.532,-1.80509],[-78.532,-1.60811],[-78.33562,-1.60811],[-78.33562,-1.80509],[-78.532,-1.80509]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"2007 ASTER image offering better glacier coverage than common sources (true color with estimated blue)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R009_S61_20160109",name:"imagico.de: Elephant Island/Clarence Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R009_S61_20160109&z={zoom}&x={x}&y={-y}",endDate:"2016-01-09T00:00:00.000Z",startDate:"2016-01-09T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-56.13476,-61.63472],[-56.13476,-61.19936],[-55.83264,-60.84015],[-53.72343,-60.83982],[-53.72343,-61.63472],[-56.13476,-61.63472]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Fairly clear up-to-date image for updating glacier edges (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-enderby",name:"imagico.de: Enderby Land and Kemp Coast",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=enderby&z={zoom}&x={x}&y={-y}",endDate:"2017-03-27T00:00:00.000Z",startDate:"2017-01-25T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[45.4547,-68.5091],[45.4547,-67.5724],[49.7155,-65.7176],[59.2693,-65.7176],[67.3735,-67.3449],[67.3735,-68.2581],[67.088,-68.5091],[45.4547,-68.5091]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Sentinel-2 images of Enderby Land and Kemp Coast (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82100502015347LGN00",name:"imagico.de: Fogo, Cape Verde",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82100502015347LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-12-13T00:00:00.000Z",startDate:"2015-12-13T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-24.75878,14.74814],[-24.75878,15.09249],[-24.26706,15.09249],[-24.26706,14.74814],[-24.75878,14.74814]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Image from after the 2014/2015 eruption (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-greenland",name:"imagico.de: Greenland mosaic",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=greenland&z={zoom}&x={x}&y={-y}",endDate:"2015-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[-43.9774,59.7171],[-44.545,59.7302],[-44.9203,59.7672],[-45.3587,59.8218],[-45.763,59.8848],[-46.0859,59.9827],[-46.3381,60.119],[-46.577,60.2652],[-46.8114,60.4418],[-47.2635,60.5314],[-47.6937,60.5549],[-48.1457,60.6192],[-48.5771,60.7015],[-48.8689,60.8506],[-49.0578,61.0555],[-49.396,61.2957],[-49.7601,61.4934],[-50.2064,61.7324],[-50.4699,61.9539],[-50.8647,62.1596],[-51.0631,62.3869],[-51.2121,62.6001],[-51.3005,62.8389],[-51.4238,62.9979],[-51.6767,63.1944],[-51.9465,63.4079],[-52.0253,63.6377],[-52.2255,63.8378],[-52.3658,64.0705],[-52.4829,64.3792],[-52.4988,64.6788],[-52.789,64.9063],[-53.2046,65.1321],[-53.6649,65.4753],[-53.9977,65.8019],[-54.1348,66.1568],[-54.1441,66.5235],[-54.2285,66.8319],[-54.4519,67.303],[-54.5141,67.7648],[-54.604,68.2021],[-54.568,68.5698],[-54.598,68.8347],[-54.7606,69.1207],[-55.0028,69.4125],[-55.2735,69.6187],[-55.3808,69.8283],[-55.3945,70.0838],[-55.3094,70.2573],[-55.4307,70.479],[-55.5501,70.6707],[-55.7654,70.861],[-56.2489,71.2343],[-56.5018,71.5429],[-56.5867,71.9015],[-56.5189,72.2355],[-56.5085,72.5258],[-56.8923,72.8144],[-57.4027,73.1054],[-57.8066,73.4566],[-58.1461,73.7696],[-58.3554,74.0972],[-58.5125,74.3783],[-58.7336,74.6328],[-59.3551,74.8869],[-60.1412,75.102],[-61.0067,75.2763],[-61.911,75.3886],[-62.4706,75.5595],[-62.9776,75.7454],[-64.1463,75.779],[-65.4481,75.7235],[-66.7068,75.6792],[-67.8379,75.6525],[-69.0456,75.6195],[-70.055,75.5344],[-71.0898,75.4705],[-72.1119,75.4476],[-74.2311,76.4102],[-74.5601,76.5328],[-74.5601,82.6959],[-14.4462,82.6959],[-14.3994,82.5997],[-13.5339,82.4379],[-12.0312,82.3426],[-10.7796,82.3196],[-10.7796,80.1902],[-11.2123,80.069],[-11.136,79.8103],[-10.7796,79.5176],[-10.7796,79.0441],[-11.2626,78.7128],[-12.2579,78.3558],[-13.2398,78.1272],[-13.7649,77.9279],[-14.1169,77.6779],[-14.7129,77.5278],[-15.5507,77.3655],[-16.0936,77.0771],[-16.0586,76.5548],[-15.838,75.9611],[-15.6879,75.4726],[-16.253,75.058],[-17.0427,74.6425],[-18.3155,74.2702],[-19.4463,73.9378],[-19.8329,73.632],[-20.2938,73.3524],[-20.7831,73.0446],[-21.01,72.6766],[-20.8774,72.2926],[-20.7672,71.8726],[-20.7765,71.4304],[-20.9411,70.9802],[-21.219,70.6126],[-21.5326,70.3001],[-21.8039,70.0911],[-22.166,69.8947],[-22.4831,69.7539],[-22.9027,69.6585],[-23.3545,69.544],[-23.9177,69.4036],[-24.1794,69.3088],[-24.6745,69.1084],[-25.1222,68.9555],[-25.6659,68.7995],[-26.0994,68.583],[-26.6316,68.4043],[-27.7638,68.2813],[-28.4575,68.0023],[-29.353,67.8135],[-30.6456,67.4911],[-31.7673,67.0005],[-32.9783,66.2596],[-33.9313,66.0156],[-34.8956,65.7403],[-35.5914,65.5208],[-36.1483,65.372],[-36.7532,65.2559],[-37.1858,65.1349],[-37.6032,64.9727],[-38.0624,64.4901],[-38.5304,64.1244],[-39.0545,63.7213],[-39.3131,63.4405],[-39.5739,62.7506],[-39.9532,62.2739],[-40.2757,61.8547],[-40.714,61.3365],[-41.2091,60.8495],[-41.821,60.5526],[-42.4368,60.3264],[-42.8643,60.0299],[-43.1131,59.9147],[-43.3282,59.83],[-43.5459,59.7695],[-43.797,59.7284],[-43.9774,59.7171]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Landsat mosaic of Greenland (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R047_S54_20160411T044330",name:"imagico.de: Heard Island coast",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R047_S54_20160411T044330&z={zoom}&x={x}&y={-y}",endDate:"2016-04-12T00:00:00.000Z",startDate:"2016-04-12T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[73.06897,-53.27059],[73.06897,-52.87549],[73.67338,-52.87673],[74.08863,-52.9495],[74.08863,-53.27059],[73.06897,-53.27059]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent image of Heard island with interior mostly cloud covered but mostly well visible coast (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82280982013259LGN00",name:"imagico.de: Isla Londonderry",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82280982013259LGN00&z={zoom}&x={x}&y={-y}",endDate:"2013-09-16T00:00:00.000Z",startDate:"2013-09-16T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[-69.8568,-55.55949],[-72.26521,-55.14943],[-72.26521,-54.51089],[-72.08531,-54.17909],[-69.49116,-54.17889],[-69.4915,-55.28379],[-69.62231,-55.5591],[-69.8568,-55.55949]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"A lot of very coarse coastlines could be improved here, much snow cover though so no use for glacier mapping (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-dms_kangerlussuaq_20151008",name:"imagico.de: Kangerlussuaq Autumn",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=dms_kangerlussuaq_20151008&z={zoom}&x={x}&y={-y}",endDate:"2015-10-08T00:00:00.000Z",startDate:"2015-10-08T00:00:00.000Z",zoomExtent:[0,17],polygon:[[[-50.6992,66.9888],[-50.721,67.0017],[-50.7341,67.0125],[-50.7396,67.0193],[-50.7396,67.0212],[-50.7158,67.0265],[-50.7017,67.0265],[-50.6829,67.0176],[-50.6686,67.0077],[-50.6638,66.998],[-50.6642,66.9946],[-50.6891,66.9888],[-50.6992,66.9888]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS image of the airport and settlement - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-dms_kangerlussuaq_20160518",name:"imagico.de: Kangerlussuaq Spring",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=dms_kangerlussuaq_20160518&z={zoom}&x={x}&y={-y}",endDate:"2016-05-18T00:00:00.000Z",startDate:"2016-05-18T00:00:00.000Z",zoomExtent:[0,18],polygon:[[[-50.7519,66.9996],[-50.7555,67.0023],[-50.7555,67.0033],[-50.6395,67.0297],[-50.6162,67.0339],[-50.6097,67.0281],[-50.6331,67.022],[-50.7323,66.9996],[-50.7519,66.9996]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS image of the airport and roads - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R021_N44_20160807T083013",name:"imagico.de: Kerch Strait",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R021_N44_20160807T083013&z={zoom}&x={x}&y={-y}",endDate:"2016-08-07T00:00:00.000Z",startDate:"2016-08-07T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[35.93259,44.96237],[35.93259,45.55926],[37.36991,45.55926],[37.36991,44.96237],[35.93259,44.96237]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"State of bridge construction in August 2016 (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R021_N44_20180429T082601",name:"imagico.de: Kerch Strait 2018",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R021_N44_20180429T082601&z={zoom}&x={x}&y={-y}",endDate:"2018-04-29T00:00:00.000Z",startDate:"2018-04-29T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[35.8787,45.0348],[35.8787,45.6095],[36.9208,45.6095],[36.9208,45.0348],[35.8787,45.0348]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Bridge and surrounding after completion in April 2018 (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-ls_polar2",name:"imagico.de: Landsat off-nadir July 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=ls_polar2&z={zoom}&x={x}&y={-y}",endDate:"2016-07-17T00:00:00.000Z",startDate:"2016-07-17T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-79.05175,81.91484],[-79.05175,83.43339],[-73.6039,83.80225],[-26.42449,83.80225],[-21.493,83.50352],[-16.88835,83.15095],[-16.88835,81.91484],[-79.05175,81.91484]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Latest images north of the regular Landsat limit (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-larsen_2018",name:"imagico.de: Larsen C ice shelf after calving",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=larsen_2018&z={zoom}&x={x}&y={-y}",endDate:"2018-01-06T00:00:00.000Z",startDate:"2018-01-06T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[-62.7282,-68.9652],[-64.0489,-68.7318],[-64.0486,-68.5373],[-60.8845,-65.9399],[-59.9187,-65.9389],[-59.1088,-66.0775],[-59.1088,-68.8359],[-59.2544,-68.9652],[-62.7282,-68.9652]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"For updating the ice edge after the 2017 iceberg calving (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-AST_L1T_00311162013112731_20150618142416_109190",name:"imagico.de: Leskov Island ASTER",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=AST_L1T_00311162013112731_20150618142416_109190&z={zoom}&x={x}&y={-y}",endDate:"2013-11-16T00:00:00.000Z",startDate:"2013-11-16T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-28.21075,-56.72108],[-28.21075,-56.62498],[-27.96956,-56.62498],[-27.96956,-56.72108],[-28.21075,-56.72108]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in other image sources (true color with estimated blue)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81991002015286LGN00",name:"imagico.de: Leskov Island Landsat",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81991002015286LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-10-13T00:00:00.000Z",startDate:"2015-10-13T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-27.99293,-56.73479],[-28.22776,-56.73262],[-28.22416,-56.60075],[-27.96975,-56.60283],[-27.97319,-56.73479],[-27.99293,-56.73479]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in other image sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2B_R005_S69_20180222T061749",name:"imagico.de: Lützow-Holm Bay",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2B_R005_S69_20180222T061749&z={zoom}&x={x}&y={-y}",endDate:"2018-02-22T00:00:00.000Z",startDate:"2018-02-22T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[35.124,-70.3693],[35.1241,-69.2795],[36.3864,-68.4765],[42.2208,-68.4762],[42.2208,-70.3651],[35.124,-70.3693]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date late season image or an area poorly mapped in OSM at the moment - lots of sea ice, be careful with distinguishing sea ice from ice shelves and floating glacier tongues. (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-ls_polar",name:"imagico.de: May 2013 off-nadir Landsat",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=ls_polar&z={zoom}&x={x}&y={-y}",endDate:"2013-05-17T00:00:00.000Z",startDate:"2013-05-17T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-85.76109,81.39333],[-89.83016,82.14952],[-89.83153,82.24405],[-84.99342,82.73099],[-79.95207,83.13108],[-74.55641,83.46267],[-69.35851,83.70451],[-28.20784,83.70451],[-23.06624,83.46532],[-17.96584,83.15518],[-17.96721,82.72386],[-22.78197,81.4419],[-85.76109,81.39333]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"First available image north of the regular Landsat limit, mostly with seasonal snow cover so difficult to interpret (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R042_S78_20170214T202521",name:"imagico.de: McMurdo Sound and Dry Valleys",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R042_S78_20170214T202521&z={zoom}&x={x}&y={-y}",endDate:"2017-02-14T00:00:00.000Z",startDate:"2017-02-14T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[162.9125,-78.4514],[162.6595,-78.4257],[159.2712,-77.6013],[159.2712,-77.4108],[164.157,-76.477],[169.7813,-76.4764],[169.7813,-78.4514],[162.9125,-78.4514]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date late season image - not ice minimum, be careful with distinguishing sea ice from ice shelves. (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R092_S02_20160613T075613",name:"imagico.de: Mount Kenya 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R092_S02_20160613T075613&z={zoom}&x={x}&y={-y}",endDate:"2016-06-13T00:00:00.000Z",startDate:"2016-06-13T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[37.20666,-0.26685],[37.20666,-0.01193],[37.56552,-0.01193],[37.56552,-0.26685],[37.20666,-0.26685]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date image for glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R092_S05_20160802T075556",name:"imagico.de: Mount Kilimanjaro 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R092_S05_20160802T075556&z={zoom}&x={x}&y={-y}",endDate:"2016-08-02T00:00:00.000Z",startDate:"2016-08-02T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[37.24769,-3.22921],[37.24769,-2.96816],[37.61581,-2.96816],[37.61581,-3.22921],[37.24769,-3.22921]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date image for glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80940622015159LGN00",name:"imagico.de: New Ireland",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80940622015159LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-06-08T00:00:00.000Z",startDate:"2015-06-08T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[150.38853,-2.80053],[150.38853,-2.3834],[150.83348,-2.3834],[150.83348,-2.80053],[150.38853,-2.80053]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Many missing islands in OSM (mostly mapped meanwhile) (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-northsea_s2_2016",name:"imagico.de: North Sea Coast 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=northsea_s2_2016&z={zoom}&x={x}&y={-y}",endDate:"2016-09-25T00:00:00.000Z",startDate:"2016-09-25T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[5.1562,52.8755],[5.1615,53.0325],[6.4155,55.7379],[9.8813,55.7459],[9.8813,53.2428],[9.6846,52.8877],[5.1562,52.8755]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-northsea_s2_2017",name:"imagico.de: North Sea Coast 2017",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=northsea_s2_2017&z={zoom}&x={x}&y={-y}",endDate:"2017-06-02T00:00:00.000Z",startDate:"2017-06-02T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[5.1713,53.0918],[6.477,55.8973],[9.8813,55.8973],[9.8813,53.2761],[9.7789,53.0918],[5.1713,53.0918]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-northsea_s2_2018",name:"imagico.de: North Sea Coast spring 2018",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=northsea_s2_2018&z={zoom}&x={x}&y={-y}",endDate:"2018-05-08T00:00:00.000Z",startDate:"2018-05-08T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[5.3179,53.0918],[5.322,53.4418],[6.7023,56.3572],[9.8813,56.3578],[9.8813,53.2819],[9.7758,53.0921],[5.3179,53.0918]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-caspian_2018",name:"imagico.de: Northeast Caspian Sea 2018",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=caspian_2018&z={zoom}&x={x}&y={-y}",endDate:"2018-05-16T00:00:00.000Z",startDate:"2018-05-16T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[51.0243,45.0729],[51.0243,46.569],[52.4259,46.5687],[53.6471,46.3177],[53.6474,45.0729],[51.0243,45.0729]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Coastal contruction and Kashagan oil field in Kazakhstan in May 2018 (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-ural_s2_2016",name:"imagico.de: Northern and Polar Ural mountains August 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=ural_s2_2016&z={zoom}&x={x}&y={-y}",endDate:"2016-08-12T00:00:00.000Z",startDate:"2016-08-12T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[59.19898,64.89205],[59.19898,66.91656],[60.73329,68.44289],[67.73295,68.44327],[67.73295,67.74883],[64.21647,64.91957],[59.19898,64.89205]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date late summer imagery with few clouds - caution: not all visible snow is glaciers (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-ndvina",name:"imagico.de: Northern Dvina delta at low tide",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=ndvina&z={zoom}&x={x}&y={-y}",endDate:"2015-09-13T00:00:00.000Z",startDate:"2015-09-13T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[37.7291,64.1971],[37.7291,65.1161],[37.8592,65.2705],[41.3223,65.2705],[41.3223,64.3142],[41.2114,64.1973],[37.7291,64.1971]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Beaches, tidal flats and other costal forms (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-nellesmere_ast",name:"imagico.de: Northern Ellesmere Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=nellesmere_ast&z={zoom}&x={x}&y={-y}",endDate:"2012-07-09T00:00:00.000Z",startDate:"2012-07-09T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-81.62923,82.4597],[-83.03136,82.47986],[-83.03136,83.05876],[-72.80309,83.09567],[-65.65786,83.03232],[-65.81167,82.4597],[-81.62923,82.4597]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Assembled from July 2012 ASTER imagery (true color with estimated blue)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-nellesmere_ast_2016",name:"imagico.de: Northern Ellesmere Island July 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=nellesmere_ast_2016&z={zoom}&x={x}&y={-y}",endDate:"2012-07-15T00:00:00.000Z",startDate:"2012-07-08T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-78.89729,82.17577],[-82.64501,82.19426],[-82.64501,83.08067],[-66.58986,83.08497],[-63.78011,82.98908],[-63.78011,82.72198],[-65.0092,82.17577],[-78.89729,82.17577]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Assembled from July 2016 ASTER imagery (true color with estimated blue)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81960222015233LGN00vis",name:"imagico.de: Northern German west coast tidalflats",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81960222015233LGN00vis&z={zoom}&x={x}&y={-y}",endDate:"2015-08-21T00:00:00.000Z",startDate:"2015-08-21T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[7.63568,53.28027],[7.63568,53.6677],[8.49433,55.50246],[9.20775,55.48106],[9.20775,53.28027],[7.63568,53.28027]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81960222015233LGN00ir",name:"imagico.de: Northern German west coast tidalflats (infrared)",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81960222015233LGN00ir&z={zoom}&x={x}&y={-y}",endDate:"2015-08-21T00:00:00.000Z",startDate:"2015-08-21T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[7.63568,53.28027],[7.63568,53.66811],[8.49433,55.50246],[9.20775,55.48106],[9.20775,53.28027],[7.63568,53.28027]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-ngreenland_ast",name:"imagico.de: Northern Greenland ASTER",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=ngreenland_ast&z={zoom}&x={x}&y={-y}",endDate:"2012-08-13T00:00:00.000Z",startDate:"2005-06-21T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-52.49222,82.48972],[-52.49222,82.94295],[-49.28696,83.47312],[-44.5285,83.73214],[-29.5253,83.73214],[-25.26398,83.58271],[-21.18393,83.39776],[-21.18393,82.74312],[-23.40454,82.48972],[-52.49222,82.48972]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Assembled from mostly 2012 ASTER imagery, some 2005 images mainly in the northeast (true color with estimated blue)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-EO1A1350972013086110KF",name:"imagico.de: Northwest Heard Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=EO1A1350972013086110KF&z={zoom}&x={x}&y={-y}",endDate:"2013-03-13T00:00:00.000Z",startDate:"2013-03-13T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[73.2279,-53.20333],[73.2279,-53.01073],[73.25949,-52.94944],[73.78992,-52.94944],[73.78992,-53.06048],[73.71783,-53.20333],[73.2279,-53.20333]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Glaciers of Northwest Heard Island (mapped meanwhile) (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R111_N09_20160604T154554",name:"imagico.de: Panama Canal",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R111_N09_20160604T154554&z={zoom}&x={x}&y={-y}",endDate:"2016-06-07T00:00:00.000Z",startDate:"2016-06-07T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-80.01654,8.84898],[-80.01654,9.41481],[-79.46859,9.41481],[-79.46859,8.84898],[-80.01654,8.84898]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Images of the new locks (but partly cloudy) (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-EO1A0120532016364110KF",name:"imagico.de: Panama Canal - Pacific side",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=EO1A0120532016364110KF&z={zoom}&x={x}&y={-y}",endDate:"2016-12-30T00:00:00.000Z",startDate:"2016-12-30T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-79.62539,8.77083],[-79.68684,8.82197],[-79.68667,8.93705],[-79.65363,9.09294],[-79.26816,9.09294],[-79.32833,8.77083],[-79.62539,8.77083]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"New locks with less clouds than in the Sentinel-2 image - make sure to check image alignment (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R078_N68_20160930T081002",name:"imagico.de: Pechora Sea Coast",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R078_N68_20160930T081002&z={zoom}&x={x}&y={-y}",endDate:"2016-09-30T00:00:00.000Z",startDate:"2016-09-30T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[53.1802,67.5344],[53.1821,68.414],[54.2107,69.3367],[55.3584,70.2786],[59.004,70.2786],[60.6947,69.977],[61.9837,69.7161],[61.9823,68.9395],[59.9153,67.5344],[53.1802,67.5344]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Sentinel-2 image of the Pechora Sea coast in autumn 2016 (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81511242016033LGN00",name:"imagico.de: Pensacola Mountains",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81511242016033LGN00&z={zoom}&x={x}&y={-y}",endDate:"2016-02-02T00:00:00.000Z",startDate:"2016-02-02T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-53.20922,-84.12525],[-60.61538,-83.78609],[-60.61538,-82.29969],[-48.72405,-82.29987],[-44.52178,-82.43683],[-44.51354,-84.12525],[-53.20922,-84.12525]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Outside regular Landsat coverage and therefore not in LIMA and Bing/Mapbox (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R136_N41_20150831T093006",name:"imagico.de: Prokletije Mountains",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R136_N41_20150831T093006&z={zoom}&x={x}&y={-y}",endDate:"2015-08-31T00:00:00.000Z",startDate:"2015-08-31T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[19.11233,42.15316],[19.08426,43.08074],[20.63299,43.09603],[20.63788,42.16779],[19.11233,42.15316]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Late summer imagery where usual sources are severely limited by clouds and snow (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-DMS_1142622_03746_20110415_17533956",name:"imagico.de: Qasigiannguit",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=DMS_1142622_03746_20110415_17533956&z={zoom}&x={x}&y={-y}",endDate:"2011-04-15T00:00:00.000Z",startDate:"2011-04-15T00:00:00.000Z",zoomExtent:[0,15],polygon:[[[-51.23857,68.79972],[-51.24334,68.85303],[-51.15167,68.85303],[-51.14038,68.80116],[-51.23857,68.79972]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS image of the settlement - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81510432015030LGN00",name:"imagico.de: Rann of Kutch",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81510432015030LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[67.9684,22.36265],[67.86231,22.38392],[67.86231,24.88693],[71.48986,24.88693],[71.48986,22.36265],[67.9684,22.36265]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Land/water distinction difficult to properly map based on Bing/Mapbox images (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R093_N41_20150828T092005",name:"imagico.de: Rila and Pirin Mountains",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R093_N41_20150828T092005&z={zoom}&x={x}&y={-y}",endDate:"2015-08-28T00:00:00.000Z",startDate:"2015-08-28T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[23.80811,41.58488],[22.99238,41.60195],[23.01186,42.29984],[23.99402,42.28339],[23.96561,41.58488],[23.80811,41.58488]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Late summer imagery where usual sources are severely limited by clouds and snow (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81730602015040LGN00",name:"imagico.de: Rwenzori Mountains",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81730602015040LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-02-09T00:00:00.000Z",startDate:"2015-02-09T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[29.7663,0.20689],[29.7663,0.50918],[30.0346,0.50918],[30.0346,0.20689],[29.7663,0.20689]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent image of most of the remaining Rwenzori Mountains glaciers (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R078_N01_20160702T082522",name:"imagico.de: Rwenzori Mountains 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R078_N01_20160702T082522&z={zoom}&x={x}&y={-y}",endDate:"2016-07-02T00:00:00.000Z",startDate:"2016-07-02T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[29.80514,0.23586],[29.80514,0.46709],[30.02503,0.46709],[30.02503,0.23586],[29.80514,0.23586]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date image for glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80611072014036LGN00",name:"imagico.de: Scott Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80611072014036LGN00&z={zoom}&x={x}&y={-y}",endDate:"2014-02-05T00:00:00.000Z",startDate:"2014-02-05T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-180,-67.42635],[-180,-67.32544],[-179.82473,-67.32538],[-179.82473,-67.42635],[-180,-67.42635]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in other image sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82100972015347LGN00",name:"imagico.de: Shag Rocks",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82100972015347LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-12-13T00:00:00.000Z",startDate:"2015-12-13T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-42.12875,-53.7205],[-42.14626,-53.45782],[-41.67573,-53.44586],[-41.65582,-53.70872],[-42.12875,-53.7205]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in other image sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81130622013270LGN00",name:"imagico.de: Southeastern Sulawesi",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81130622013270LGN00&z={zoom}&x={x}&y={-y}",endDate:"2013-09-27T00:00:00.000Z",startDate:"2013-09-27T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[120.84382,-3.59545],[120.84382,-3.15985],[120.98184,-2.51468],[122.62618,-2.51468],[122.62618,-3.00215],[122.5007,-3.59545],[120.84382,-3.59545]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing islands and coarse coastline due to cloud cover in Bing, lakes could also use additional detail (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80281222016035LGN00",name:"imagico.de: Southern Transantarctic Mountains",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80281222016035LGN00&z={zoom}&x={x}&y={-y}",endDate:"2016-02-04T00:00:00.000Z",startDate:"2016-02-04T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[156.96951,-84.50098],[154.50858,-84.46255],[154.50858,-82.60681],[175.46774,-82.58505],[177.00583,-83.52807],[177.00583,-84.19262],[171.93839,-84.34633],[166.83798,-84.4437],[161.67029,-84.50045],[156.96951,-84.50098]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Outside regular Landsat coverage and therefore not in LIMA and Bing/Mapbox (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81030632015286LGN00",name:"imagico.de: Sudirman Range 2015",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81030632015286LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-10-13T00:00:00.000Z",startDate:"2015-10-13T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[136.4226,-4.2853],[136.4226,-3.6447],[137.7971,-3.6447],[137.7971,-4.2853],[136.4226,-4.2853]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Older image of the Sudirman Range with no fresh snow showing glacier extent (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R088_S05_20160812T011732",name:"imagico.de: Sudirman Range 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R088_S05_20160812T011732&z={zoom}&x={x}&y={-y}",endDate:"2016-08-12T00:00:00.000Z",startDate:"2016-08-12T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[136.8044,-4.2585],[136.8044,-3.7836],[137.7701,-3.7836],[137.7701,-4.2585],[136.8044,-4.2585]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Cloud free image of the Sudirman Range but with fresh snow (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-s2sval",name:"imagico.de: Svalbard mosaic",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=s2sval&z={zoom}&x={x}&y={-y}",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[16.6108,76.4137],[16.4731,76.4268],[16.3788,76.4589],[14.4124,77.1324],[14.0784,77.2536],[10.9875,78.4054],[10.631,78.5605],[10.2314,78.8392],[10.3952,79.6074],[10.516,79.7731],[10.9632,79.8707],[20.2294,80.849],[20.4702,80.8493],[25.1752,80.6817],[33.4391,80.3438],[33.7809,80.3016],[34.0395,80.239],[33.977,80.1527],[25.5722,76.5917],[25.2739,76.481],[25.1416,76.4327],[24.937,76.4176],[16.6108,76.4137]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Sentinel-2 mosaic of Svalbard (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-DMS_1142636_160xx_20110507_1822xxxx",name:"imagico.de: Thule Air Base",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=DMS_1142636_160xx_20110507_1822xxxx&z={zoom}&x={x}&y={-y}",endDate:"2011-05-07T00:00:00.000Z",startDate:"2011-05-07T00:00:00.000Z",zoomExtent:[0,15],polygon:[[[-68.93977,76.51133],[-68.93977,76.5499],[-68.76635,76.55176],[-68.50993,76.55176],[-68.50744,76.51612],[-68.67897,76.51194],[-68.93977,76.51133]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS image - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-dms_thule2_2015.09.25",name:"imagico.de: Thule Airbase DMS low altitude overflight September 2015",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=dms_thule2_2015.09.25&z={zoom}&x={x}&y={-y}",endDate:"2015-09-25T00:00:00.000Z",startDate:"2015-09-25T00:00:00.000Z",zoomExtent:[0,17],polygon:[[[-68.74292,76.52636],[-68.74446,76.5284],[-68.74807,76.54939],[-68.74615,76.56017],[-68.72276,76.56022],[-68.72017,76.55775],[-68.71853,76.52921],[-68.71978,76.52637],[-68.74292,76.52636]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS aerial images from Thule Airbase - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-dms_thule_2015.10.06",name:"imagico.de: Thule Airbase DMS overflight October 2015",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=dms_thule_2015.10.06&z={zoom}&x={x}&y={-y}",endDate:"2015-10-06T00:00:00.000Z",startDate:"2015-10-06T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[-68.81924,76.5251],[-68.82651,76.54177],[-68.77345,76.5439],[-68.7021,76.54545],[-68.59177,76.5456],[-68.59183,76.52793],[-68.6597,76.5251],[-68.81924,76.5251]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS aerial images from Thule Airbase - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-dms_thule_2015.09.25",name:"imagico.de: Thule Airbase DMS overflight September 2015",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=dms_thule_2015.09.25&z={zoom}&x={x}&y={-y}",endDate:"2015-09-25T00:00:00.000Z",startDate:"2015-09-25T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[-68.77771,76.50688],[-68.77662,76.57064],[-68.68115,76.57065],[-68.6763,76.55384],[-68.6762,76.53074],[-68.68523,76.50688],[-68.77771,76.50688]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS aerial images from Thule Airbase - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R094_N79_20160812T105622",name:"imagico.de: Ushakov Island August 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R094_N79_20160812T105622&z={zoom}&x={x}&y={-y}",endDate:"2016-08-12T00:00:00.000Z",startDate:"2016-08-12T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[78.45886,80.72643],[78.45886,80.9099],[80.48892,80.9099],[80.48892,80.72643],[78.45886,80.72643]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date late summer imagery with few clouds (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80910682014358LGN00",name:"imagico.de: Vanatinai",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80910682014358LGN00&z={zoom}&x={x}&y={-y}",endDate:"2014-12-24T00:00:00.000Z",startDate:"2014-12-24T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[153.06138,-11.78923],[153.06138,-11.28869],[153.10927,-11.07229],[154.41201,-11.07229],[154.41201,-11.78923],[153.06138,-11.78923]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Coarse coastline due to cloud cover in Bing/Mapbox (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82330892016031LGN00",name:"imagico.de: Volcán Calbuco",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82330892016031LGN00&z={zoom}&x={x}&y={-y}",endDate:"2016-01-31T00:00:00.000Z",startDate:"2016-01-31T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-72.86696,-41.51741],[-72.86696,-41.04527],[-72.23181,-41.04527],[-71.8751,-41.10829],[-72.00007,-41.51741],[-72.86696,-41.51741]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Image from after the 2015 eruption (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R089_N52_20160623T024048",name:"imagico.de: Vostochny Cosmodrome",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R089_N52_20160623T024048&z={zoom}&x={x}&y={-y}",endDate:"2016-06-23T00:00:00.000Z",startDate:"2016-06-23T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[126.36143,51.37553],[126.34804,52.33932],[128.60762,52.3409],[128.61174,51.37553],[126.36143,51.37553]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent image showing newest features (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-walps_autumn_2017",name:"imagico.de: Western Alps autumn colors 2017",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=walps_autumn_2017&z={zoom}&x={x}&y={-y}",endDate:"2017-10-17T00:00:00.000Z",startDate:"2017-10-17T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[4.6412,43.2493],[4.3118,43.2653],[4.3118,44.2167],[5.2562,46.965],[5.9151,48.7177],[7.3866,48.7467],[10.088,48.7467],[10.088,48.7032],[7.7819,43.2813],[7.76,43.2653],[7.3646,43.2493],[4.6412,43.2493]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Autumn colors in the Alps, Jura and southwestern Germany  (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81490352013282LGN00",name:"imagico.de: Western Karakoram",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81490352013282LGN00&z={zoom}&x={x}&y={-y}",endDate:"2013-10-09T00:00:00.000Z",startDate:"2013-10-09T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[75.98364,34.97851],[73.96164,35.36957],[74.44281,37.09391],[76.50601,36.70267],[75.98364,34.97851]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Represents approximately minimum snow cover so can be well used for glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R039_S15_20160510T145731",name:"imagico.de: Willkanuta Mountains and Quelccaya Ice Cap",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R039_S15_20160510T145731&z={zoom}&x={x}&y={-y}",endDate:"2016-05-10T00:00:00.000Z",startDate:"2016-05-10T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-71.18071,-14.49785],[-71.17976,-13.71029],[-70.55637,-13.71263],[-70.55637,-14.49785],[-71.18071,-14.49785]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Poor and outdated imagery in other sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"IndianaMap2016",name:"IndianaMap Orthoimagery 2016",type:"wms",template:"https://maps.indiana.edu/arcgis/services/Imagery/Orthos_2016/MapServer/WmsServer?FORMAT=image/jpeg&TRANSPARENT=FALSE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[4,20],polygon:[[[-86.93095,41.086],[-86.93041,40.99844],[-86.92929,40.9136],[-86.69579,40.91281],[-86.57968,40.91095],[-86.58017,40.82402],[-86.58133,40.73508],[-86.69536,40.73677],[-86.75238,40.73713],[-86.75719,40.72441],[-86.74927,40.71899],[-86.75651,40.709],[-86.75831,40.70082],[-86.7528,40.68632],[-86.75884,40.68177],[-86.74611,40.67998],[-86.7455,40.67817],[-86.75688,40.66457],[-86.7743,40.66412],[-86.7711,40.56207],[-86.69544,40.56209],[-86.69619,40.17853],[-86.24242,40.18069],[-86.24065,39.94074],[-86.24067,39.92607],[-86.32632,39.92421],[-86.6937,39.92283],[-86.69294,39.86434],[-86.68456,39.86481],[-86.68529,39.68845],[-86.68574,39.62997],[-86.66543,39.63046],[-86.64035,39.63049],[-86.64033,39.62006],[-86.65224,39.60871],[-86.65462,39.6001],[-86.65276,39.56656],[-86.64915,39.55523],[-86.67058,39.53389],[-86.68607,39.52616],[-86.68604,39.51438],[-86.68593,39.46995],[-86.63229,39.46957],[-86.63088,39.34809],[-86.64755,39.35578],[-86.65112,39.35623],[-86.65585,39.34353],[-86.65345,39.33402],[-86.66534,39.33173],[-86.68439,39.33715],[-86.6849,39.00994],[-86.68529,38.99402],[-86.31766,38.99358],[-86.27858,38.99352],[-86.27876,38.93414],[-86.27518,38.763],[-86.25877,38.76964],[-86.25766,38.76989],[-86.25632,38.76464],[-86.25595,38.76412],[-86.2429,38.7655],[-86.24046,38.76564],[-86.22518,38.77887],[-86.22435,38.77922],[-86.2209,38.77188],[-86.22004,38.77071],[-86.2156,38.77862],[-86.21476,38.77934],[-86.20226,38.77383],[-86.19747,38.77366],[-86.1851,38.7837],[-86.1836,38.78391],[-86.17766,38.77509],[-86.173,38.77274],[-86.13588,38.76259],[-86.13545,38.76235],[-86.10381,38.76552],[-86.10252,38.76556],[-86.0931,38.78364],[-86.09219,38.78371],[-86.07581,38.77482],[-86.07469,38.77421],[-86.062,38.77849],[-86.06126,38.77817],[-86.02771,38.75574],[-86.02649,38.75529],[-86.0218,38.76733],[-86.02092,38.76757],[-86.01255,38.75668],[-86.01133,38.75667],[-85.98508,38.76808],[-85.98354,38.76793],[-85.98577,38.75933],[-85.98563,38.75823],[-85.97835,38.7528],[-85.97723,38.75239],[-85.96239,38.76394],[-85.96129,38.76424],[-85.95064,38.76109],[-85.95026,38.76081],[-85.94987,38.75358],[-85.94931,38.75345],[-85.93697,38.76276],[-85.93642,38.76271],[-85.93698,38.75636],[-85.93658,38.7555],[-85.91801,38.74601],[-85.91691,38.74554],[-85.91924,38.75314],[-85.91903,38.75375],[-85.91141,38.7472],[-85.91054,38.74747],[-85.91027,38.75725],[-85.90966,38.75713],[-85.90954,38.75157],[-85.90878,38.75108],[-85.89661,38.75053],[-85.8963,38.75027],[-85.89425,38.7303],[-85.89408,38.72998],[-85.88619,38.73486],[-85.88581,38.73485],[-85.88175,38.72502],[-85.88146,38.72485],[-85.84755,38.73477],[-85.84734,38.73492],[-85.82006,38.77551],[-85.81989,38.77593],[-85.8048,38.77951],[-85.80465,38.77961],[-85.8074,38.78896],[-85.80736,38.7892],[-85.79512,38.80755],[-85.79493,38.8078],[-85.79893,39.12907],[-85.688,39.13067],[-85.68507,39.3387],[-85.68494,39.35049],[-85.94282,39.34752],[-85.95215,39.3473],[-85.954,39.86768],[-85.95401,39.86965],[-85.94827,39.86972],[-85.93807,39.86981],[-85.93738,39.92643],[-85.93759,39.92714],[-85.86955,39.92885],[-85.86242,39.92894],[-85.86218,40.40686],[-85.86405,40.56663],[-86.01292,40.56503],[-86.16541,40.56325],[-86.16901,40.96017],[-86.16763,40.99646],[-86.01846,40.9978],[-85.94662,40.99932],[-85.94044,40.7008],[-85.93961,40.65272],[-85.67424,40.65399],[-85.6385,40.65421],[-85.64054,40.78532],[-85.64402,41.00129],[-85.68359,41.00155],[-85.68562,41.08958],[-85.68764,41.17898],[-85.65224,41.17875],[-85.65887,41.69895],[-85.6598,41.7591],[-86.51946,41.75968],[-86.52422,41.75966],[-86.52661,41.6516],[-86.52664,41.65022],[-86.49012,41.64955],[-86.48727,41.64952],[-86.48627,41.58005],[-86.48617,41.57768],[-86.49511,41.56343],[-86.49809,41.56109],[-86.49811,41.52928],[-86.4982,41.52832],[-86.50521,41.51995],[-86.52484,41.51999],[-86.52465,41.43601],[-86.52467,41.43287],[-86.58209,41.43339],[-86.64151,41.4338],[-86.69839,41.40422],[-86.70206,41.40058],[-86.73794,41.32927],[-86.73914,41.32246],[-86.77633,41.29335],[-86.78424,41.28516],[-86.8465,41.26731],[-86.87032,41.26452],[-86.92821,41.23801],[-86.93004,41.2371],[-86.93095,41.086]],[[-86.33109,38.18099],[-86.28777,38.15805],[-86.2718,38.13787],[-86.27866,38.09851],[-86.27872,38.0893],[-86.26689,38.05712],[-86.26127,38.05272],[-86.19093,38.01644],[-86.17898,38.01131],[-86.10023,38.01074],[-86.09466,38.00864],[-86.04537,37.95884],[-86.04352,37.95869],[-86.03632,37.96156],[-86.03517,37.96327],[-86.03106,37.99164],[-86.02831,37.99322],[-85.94916,38.00484],[-85.94706,38.00508],[-85.92644,38.02085],[-85.925,38.02259],[-85.90524,38.08899],[-85.90505,38.09007],[-85.90893,38.14231],[-85.90882,38.14497],[-85.90039,38.17904],[-85.89986,38.17988],[-85.89992,38.18561],[-85.95077,38.18574],[-85.9549,38.26055],[-85.97366,38.26063],[-85.97355,38.27558],[-85.99466,38.27522],[-85.99564,38.30242],[-86.0144,38.30249],[-86.01481,38.33059],[-86.033,38.33067],[-86.03244,38.41768],[-86.25445,38.4224],[-86.25917,38.41516],[-86.26447,38.412],[-86.25802,38.41017],[-86.25215,38.40699],[-86.24927,38.39066],[-86.24576,38.38794],[-86.25517,38.38433],[-86.26163,38.38117],[-86.2593,38.37754],[-86.25816,38.36666],[-86.24819,38.36301],[-86.2482,38.36029],[-86.25291,38.35577],[-86.25703,38.35442],[-86.26405,38.36123],[-86.2705,38.3617],[-86.27353,38.3243],[-86.27306,38.32159],[-86.28346,38.33154],[-86.28605,38.33195],[-86.28451,38.32105],[-86.28941,38.31641],[-86.28263,38.31106],[-86.27581,38.30841],[-86.27864,38.30298],[-86.27444,38.29991],[-86.27136,38.30714],[-86.26773,38.30867],[-86.25894,38.30638],[-86.26423,38.30413],[-86.26485,38.29461],[-86.25253,38.29504],[-86.25313,38.29142],[-86.26959,38.27831],[-86.27486,38.27832],[-86.27612,38.25294],[-86.27737,38.2271],[-86.27972,38.22348],[-86.28442,38.22077],[-86.29319,38.22487],[-86.29788,38.2217],[-86.29848,38.21944],[-86.28912,38.21398],[-86.29557,38.20946],[-86.29032,38.20175],[-86.30627,38.20273],[-86.30848,38.20087],[-86.31671,38.18955],[-86.31847,38.18819],[-86.3097,38.18183],[-86.31264,38.17822],[-86.33109,38.18099]]],terms_text:"Indiana Office of Information Technology, Indiana University Spatial Data Portal, UITS, Woolpert Inc.",description:"Orthophotography for 24 counties in central Indiana, collected during leaf-off conditions in 2016. One-foot resolution for Bartholomew, Boon, Brown, Carroll, Cass, Clinton, Elkhart, Hamilton, Hendricks, Howard, Johnson, Marion, Marshall, Pulaski, St. Joseph, Starke, and Tipton counties. Six-inch resolution for Fulton, Harrison, Jackson, Kosciusko, Monroe, Morgan, and Wabash counties.",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/in/IU.gif"},{id:"IndianaMap2017",name:"IndianaMap Orthoimagery 2017",type:"wms",template:"https://maps.indiana.edu/arcgis/services/Imagery/Orthos_2017/MapServer/WmsServer?FORMAT=image/jpeg&TRANSPARENT=FALSE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[4,20],polygon:[[[-86.68529,38.99402],[-86.67996,38.27838],[-86.67992,38.26342],[-86.66644,38.26344],[-86.57149,38.26445],[-86.57202,38.20824],[-86.46132,38.20826],[-86.46253,38.12986],[-86.46293,38.11943],[-86.43208,38.12614],[-86.43175,38.12612],[-86.40507,38.1058],[-86.40141,38.10504],[-86.38722,38.12463],[-86.37977,38.12927],[-86.336,38.1292],[-86.33514,38.12924],[-86.32345,38.13903],[-86.32091,38.1471],[-86.33079,38.15764],[-86.33553,38.15941],[-86.36675,38.1634],[-86.37038,38.16528],[-86.37546,38.18741],[-86.37402,38.19055],[-86.36106,38.19673],[-86.35711,38.19649],[-86.31732,38.17822],[-86.31264,38.17822],[-86.31591,38.18524],[-86.31847,38.18819],[-86.30919,38.19754],[-86.30848,38.20087],[-86.29384,38.2013],[-86.29032,38.20175],[-86.29557,38.20946],[-86.2903,38.21081],[-86.28912,38.21398],[-86.29848,38.21944],[-86.29788,38.2217],[-86.27972,38.22348],[-86.27737,38.2271],[-86.27551,38.25702],[-86.27486,38.27832],[-86.25313,38.29142],[-86.25253,38.29504],[-86.26015,38.29733],[-86.26485,38.29461],[-86.25895,38.30503],[-86.25894,38.30638],[-86.27136,38.30714],[-86.27444,38.29991],[-86.28263,38.31106],[-86.28941,38.31641],[-86.28451,38.32105],[-86.28307,38.32473],[-86.28754,38.32958],[-86.28605,38.33195],[-86.27594,38.32018],[-86.27306,38.32159],[-86.27345,38.35627],[-86.2705,38.3617],[-86.25291,38.35577],[-86.2482,38.36029],[-86.2593,38.37754],[-86.26163,38.38117],[-86.24635,38.38613],[-86.24576,38.38794],[-86.25334,38.402],[-86.25215,38.40699],[-86.26272,38.40973],[-86.26447,38.412],[-86.25917,38.41516],[-86.25445,38.4224],[-86.03244,38.41768],[-86.033,38.33067],[-86.01481,38.33059],[-86.0144,38.30249],[-85.99564,38.30242],[-85.99466,38.27522],[-85.97355,38.27558],[-85.97359,38.27054],[-85.97366,38.26063],[-85.9549,38.26055],[-85.95077,38.18574],[-85.89992,38.18561],[-85.89986,38.17988],[-85.84499,38.23024],[-85.84422,38.23109],[-85.82696,38.27839],[-85.82559,38.2794],[-85.78149,38.28825],[-85.78098,38.28829],[-85.74553,38.26698],[-85.74392,38.2671],[-85.67667,38.29986],[-85.67558,38.30067],[-85.65256,38.32841],[-85.65165,38.3301],[-85.63191,38.3978],[-85.63166,38.39877],[-85.60737,38.43805],[-85.60677,38.43869],[-85.58381,38.45058],[-85.58123,38.45136],[-85.50038,38.46755],[-85.49931,38.46799],[-85.46866,38.50867],[-85.46682,38.51025],[-85.42008,38.53466],[-85.41957,38.53503],[-85.41566,38.56235],[-85.41566,38.56312],[-85.43759,38.60284],[-85.43824,38.60468],[-85.43837,38.65779],[-85.43854,38.65896],[-85.45673,38.68734],[-85.4569,38.68851],[-85.45197,38.70988],[-85.45184,38.7102],[-85.43609,38.7285],[-85.43532,38.729],[-85.41644,38.73643],[-85.41489,38.73677],[-85.36507,38.73034],[-85.3636,38.73037],[-85.27859,38.74159],[-85.2767,38.74135],[-85.24937,38.73348],[-85.24859,38.73314],[-85.21096,38.69444],[-85.20967,38.69367],[-85.16501,38.6898],[-85.16321,38.69019],[-84.9939,38.77765],[-84.99229,38.77815],[-84.94286,38.77541],[-84.94121,38.77565],[-84.88761,38.79478],[-84.88724,38.7948],[-84.81562,38.78393],[-84.8149,38.78428],[-84.8131,38.79745],[-84.81339,38.79851],[-84.83,38.82966],[-84.82993,38.83037],[-84.79418,38.85753],[-84.79354,38.85784],[-84.78486,38.87357],[-84.78461,38.87498],[-84.8015,38.89171],[-84.80298,38.89227],[-84.86245,38.89789],[-84.8637,38.89809],[-84.87596,38.90778],[-84.87702,38.90901],[-84.87765,38.92059],[-84.87706,38.92147],[-84.83422,38.95885],[-84.83363,38.95943],[-84.82995,38.97142],[-84.83003,38.97305],[-84.89728,39.05471],[-84.89739,39.05548],[-84.82239,39.10457],[-84.81993,39.10544],[-84.80397,40.30267],[-84.80358,40.31025],[-84.80292,40.92236],[-84.80292,40.92257],[-85.3224,40.91703],[-85.33597,40.91703],[-85.33847,41.12909],[-85.3389,41.15113],[-85.33818,41.17286],[-85.31331,41.17316],[-85.30997,41.1732],[-85.30921,41.25112],[-85.30777,41.26413],[-84.84755,41.27],[-84.80356,41.27116],[-84.80613,41.74312],[-84.80588,41.76022],[-85.65074,41.7591],[-85.6598,41.7591],[-85.65224,41.17875],[-85.68764,41.17898],[-85.68359,41.00155],[-85.64402,41.00129],[-85.64014,40.76899],[-85.6385,40.65421],[-85.90024,40.65254],[-85.93961,40.65272],[-85.94663,40.99751],[-85.94662,40.99932],[-86.12927,40.99726],[-86.16763,40.99646],[-86.16805,40.64354],[-86.16541,40.56325],[-85.89975,40.56636],[-85.86405,40.56663],[-85.86211,40.37841],[-85.86144,40.21908],[-86.12848,40.21759],[-86.2435,40.21516],[-86.24065,39.94074],[-86.24067,39.92607],[-85.93779,39.92712],[-85.93759,39.92714],[-85.93807,39.87702],[-85.93807,39.86981],[-85.95364,39.86965],[-85.95401,39.86965],[-85.95269,39.36098],[-85.95215,39.3473],[-85.79977,39.35073],[-85.68494,39.35049],[-85.688,39.13067],[-85.79893,39.12907],[-85.79535,38.82447],[-85.79493,38.8078],[-85.80719,38.78942],[-85.80736,38.7892],[-85.80444,38.78003],[-85.80451,38.77981],[-85.81957,38.77608],[-85.81989,38.77593],[-85.84718,38.73514],[-85.84734,38.73492],[-85.88015,38.72487],[-85.88046,38.72479],[-85.88555,38.73468],[-85.88581,38.73485],[-85.89381,38.72974],[-85.89408,38.72998],[-85.89621,38.74987],[-85.8963,38.75027],[-85.90901,38.75661],[-85.90966,38.75713],[-85.9097,38.74805],[-85.91054,38.74747],[-85.91869,38.75411],[-85.91903,38.75375],[-85.91605,38.7457],[-85.91691,38.74554],[-85.9358,38.75504],[-85.93658,38.7555],[-85.9361,38.76235],[-85.93642,38.76271],[-85.94798,38.75356],[-85.94931,38.75345],[-85.96056,38.7641],[-85.96129,38.76424],[-85.97598,38.75232],[-85.97723,38.75239],[-85.985,38.75764],[-85.98563,38.75823],[-85.98233,38.76692],[-85.98256,38.76759],[-86.01028,38.75687],[-86.01133,38.75667],[-86.01902,38.76736],[-86.02092,38.76757],[-86.02585,38.75538],[-86.02649,38.75529],[-86.06023,38.7775],[-86.06126,38.77817],[-86.0734,38.77417],[-86.07469,38.77421],[-86.09118,38.7835],[-86.09219,38.78371],[-86.10176,38.76589],[-86.10252,38.76556],[-86.13481,38.76227],[-86.13545,38.76235],[-86.17165,38.77244],[-86.173,38.77274],[-86.18176,38.78289],[-86.1836,38.78391],[-86.19724,38.77408],[-86.19747,38.77366],[-86.21178,38.77945],[-86.21476,38.77934],[-86.21851,38.7705],[-86.22004,38.77071],[-86.22363,38.77925],[-86.22435,38.77922],[-86.23696,38.76775],[-86.24046,38.76564],[-86.27167,38.76451],[-86.27518,38.763],[-86.27875,38.986],[-86.27858,38.99352],[-86.68529,38.99402]],[[-87.9869,38.25738],[-87.98177,38.23376],[-87.9843,38.2304],[-87.79945,38.22857],[-87.79978,38.21407],[-87.79955,38.20092],[-87.68887,38.20204],[-87.68891,38.1685],[-87.46706,38.16543],[-87.46665,38.19389],[-87.46633,38.20354],[-87.35565,38.20482],[-87.31699,38.20508],[-87.31686,38.24588],[-87.31599,38.37733],[-87.33482,38.38173],[-87.34541,38.38347],[-87.40584,38.38032],[-87.40759,38.3794],[-87.40712,38.43606],[-87.44473,38.43623],[-87.44453,38.46706],[-87.46394,38.4669],[-87.46401,38.51722],[-87.4642,38.53217],[-87.47051,38.51988],[-87.47047,38.51626],[-87.47569,38.51123],[-87.49091,38.50567],[-87.49255,38.49704],[-87.49548,38.49566],[-87.50017,38.49517],[-87.51323,38.50367],[-87.52786,38.49857],[-87.5314,38.49899],[-87.52985,38.51442],[-87.53637,38.51844],[-87.54693,38.51654],[-87.5498,38.51153],[-87.54139,38.49936],[-87.54069,38.49166],[-87.55772,38.4897],[-87.57302,38.49093],[-87.57962,38.49948],[-87.58373,38.49945],[-87.58059,38.48588],[-87.57997,38.48362],[-87.59023,38.46222],[-87.59888,38.45082],[-87.63108,38.44282],[-87.63579,38.44323],[-87.6371,38.45228],[-87.64069,38.45587],[-87.65128,38.45714],[-87.656,38.458],[-87.6723,38.44833],[-87.67345,38.4465],[-87.66273,38.43799],[-87.66206,38.43256],[-87.7433,38.41401],[-87.74413,38.4141],[-87.77157,38.37799],[-87.77267,38.37656],[-87.80361,38.36406],[-87.80768,38.36175],[-87.82237,38.34582],[-87.82357,38.34448],[-87.83209,38.29841],[-87.83227,38.29745],[-87.84315,38.27932],[-87.84663,38.27702],[-87.86249,38.28335],[-87.86305,38.28425],[-87.8684,38.31254],[-87.87073,38.31296],[-87.90788,38.27006],[-87.90916,38.26955],[-87.91712,38.27358],[-87.91753,38.27531],[-87.9074,38.2931],[-87.90796,38.29582],[-87.93145,38.29737],[-87.93436,38.29517],[-87.9475,38.27861],[-87.94981,38.27675],[-87.94382,38.26401],[-87.94385,38.2622],[-87.95967,38.24218],[-87.96045,38.24177],[-87.97899,38.25866],[-87.97997,38.25958],[-87.9869,38.25738]]],terms_text:"Indiana Office of Information Technology, Indiana University Spatial Data Portal, UITS, Woolpert Inc.",description:"Orthophotography for 39 counties in eastern Indiana, collected during leaf-off conditions in 2017. One-foot resolution for Adams, Blackford, Clark, Crawford, Decatur, Delaware, Fayette, Floyd, Franklin, Grant, Hamilton, Hancock, Henry, Huntington, Jay, Jefferson, Jennings, Lagrange, Lawrence, Madison, Miami, Noble, Ohio, Orange, Randolph, Ripley, Rush, Scott, Switzerland, Union, and Washington counties. Six-inch resolution for Dearborn, Dekalb, Gibson, Shelby, Steuben, Wayne, Wells, and Whitley counties. Three-inch resolution for Hamilton County and Shelbyville.",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/in/IU.gif"},{id:"IndianaMap2018",name:"IndianaMap Orthoimagery 2018",type:"wms",template:"https://maps.indiana.edu/arcgis/services/Imagery/Orthos_2018/MapServer/WmsServer?FORMAT=image/jpeg&TRANSPARENT=FALSE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[4,20],polygon:[[[-88.0997,37.90441],[-88.06863,37.85773],[-88.06288,37.85102],[-88.02672,37.8371],[-88.02543,37.83344],[-88.03865,37.82239],[-88.04431,37.82151],[-88.07796,37.83094],[-88.08182,37.83114],[-88.09143,37.81819],[-88.08912,37.815],[-88.06783,37.79988],[-88.06397,37.799],[-88.03556,37.81121],[-88.03118,37.8108],[-88.02509,37.80253],[-88.02502,37.7999],[-88.00471,37.80015],[-87.9971,37.79767],[-87.95948,37.77311],[-87.95259,37.77174],[-87.93323,37.79697],[-87.93255,37.79767],[-87.90681,37.80762],[-87.9046,37.81253],[-87.90777,37.83761],[-87.91028,37.84342],[-87.94102,37.87917],[-87.94084,37.88334],[-87.89616,37.9284],[-87.89614,37.9284],[-87.87326,37.92145],[-87.87254,37.921],[-87.8381,37.87977],[-87.83388,37.87732],[-87.78517,37.87216],[-87.76563,37.86662],[-87.73176,37.88574],[-87.72678,37.89148],[-87.6765,37.90216],[-87.67573,37.90193],[-87.66286,37.88558],[-87.66282,37.88145],[-87.6754,37.86595],[-87.68163,37.85592],[-87.68069,37.84062],[-87.67919,37.83632],[-87.66718,37.82764],[-87.66652,37.82746],[-87.62501,37.82908],[-87.6154,37.83197],[-87.58873,37.86098],[-87.58843,37.86879],[-87.59037,37.88013],[-87.59158,37.88719],[-87.61988,37.90665],[-87.62027,37.90692],[-87.62842,37.92145],[-87.62896,37.92671],[-87.61082,37.9446],[-87.60622,37.94964],[-87.60051,37.97291],[-87.60035,37.97314],[-87.58818,37.97603],[-87.58795,37.97617],[-87.57576,37.96872],[-87.5755,37.9684],[-87.57705,37.95222],[-87.57749,37.95173],[-87.56396,37.93533],[-87.56188,37.9331],[-87.5115,37.90643],[-87.51077,37.90615],[-87.44949,37.94181],[-87.44779,37.94243],[-87.42852,37.94481],[-87.41858,37.94476],[-87.38051,37.93567],[-87.38025,37.9356],[-87.25525,37.86733],[-87.22094,37.84913],[-87.16486,37.84121],[-87.16232,37.84016],[-87.13291,37.7933],[-87.13094,37.78801],[-87.11433,37.78253],[-87.11113,37.78251],[-87.09197,37.78699],[-87.08835,37.78889],[-87.06805,37.80576],[-87.06784,37.80606],[-87.04926,37.85974],[-87.04385,37.8708],[-87.04535,37.8929],[-87.0451,37.89377],[-87.03589,37.90429],[-87.03344,37.90659],[-86.97896,37.9302],[-86.96904,37.93286],[-86.91963,37.9366],[-86.91933,37.93666],[-86.86322,37.9825],[-86.85595,37.98729],[-86.82349,37.99894],[-86.82007,37.99939],[-86.8037,37.99345],[-86.79498,37.98898],[-86.76733,37.93617],[-86.76505,37.93251],[-86.73445,37.89641],[-86.73146,37.89434],[-86.71846,37.89312],[-86.71614,37.89407],[-86.68601,37.91308],[-86.68093,37.91501],[-86.64773,37.90905],[-86.64708,37.90862],[-86.64404,37.8982],[-86.64475,37.89481],[-86.6625,37.85695],[-86.66158,37.84942],[-86.6553,37.84251],[-86.65252,37.84164],[-86.63351,37.84415],[-86.62576,37.84727],[-86.60462,37.85827],[-86.59811,37.86738],[-86.59595,37.91445],[-86.58858,37.92116],[-86.54072,37.91687],[-86.53416,37.91701],[-86.50783,37.92883],[-86.50662,37.93072],[-86.52383,37.96217],[-86.52517,37.96823],[-86.52183,38.03833],[-86.5194,38.04124],[-86.4719,38.04622],[-86.45219,38.05049],[-86.43135,38.07334],[-86.43052,38.0783],[-86.45991,38.09656],[-86.46386,38.10118],[-86.46253,38.12986],[-86.46132,38.20826],[-86.57202,38.20824],[-86.57149,38.26445],[-86.66644,38.26344],[-86.67992,38.26342],[-86.68299,39.25374],[-86.68439,39.33715],[-86.66059,39.33355],[-86.65582,39.33129],[-86.65527,39.34942],[-86.65112,39.35623],[-86.63088,39.34809],[-86.63229,39.46957],[-86.68593,39.46995],[-86.68604,39.51438],[-86.68607,39.52616],[-86.65331,39.54752],[-86.64915,39.55523],[-86.65459,39.5865],[-86.6552,39.59647],[-86.64033,39.62006],[-86.64035,39.63049],[-86.66543,39.63046],[-86.68574,39.62997],[-86.6952,40.4751],[-86.69544,40.56209],[-86.7711,40.56207],[-86.7743,40.66412],[-86.75688,40.66457],[-86.75336,40.67271],[-86.7455,40.67817],[-86.75702,40.67951],[-86.75884,40.68177],[-86.7528,40.68632],[-86.74978,40.68859],[-86.75526,40.69493],[-86.75831,40.70082],[-86.7541,40.71308],[-86.74927,40.71899],[-86.75719,40.72441],[-86.75236,40.73304],[-86.75238,40.73713],[-86.69536,40.73677],[-86.58133,40.73508],[-86.58017,40.82402],[-86.57968,40.91095],[-86.81376,40.91303],[-86.92929,40.9136],[-86.93,41.22984],[-86.93004,41.2371],[-86.87763,41.25996],[-86.87032,41.26452],[-86.81414,41.27329],[-86.78424,41.28516],[-86.74584,41.31701],[-86.73914,41.32246],[-86.70206,41.40058],[-86.69839,41.40422],[-86.64314,41.43266],[-86.64151,41.4338],[-86.58209,41.43339],[-86.52467,41.43287],[-86.52485,41.50529],[-86.52484,41.51999],[-86.50521,41.51995],[-86.50383,41.52024],[-86.49845,41.528],[-86.4982,41.52832],[-86.49511,41.56343],[-86.48648,41.57047],[-86.4872,41.64648],[-86.48727,41.64952],[-86.51944,41.65012],[-86.52664,41.65022],[-86.52427,41.75785],[-86.52422,41.75966],[-86.82433,41.76024],[-86.82569,41.76025],[-86.91273,41.72327],[-86.91638,41.71645],[-87.13327,41.64289],[-87.17696,41.63272],[-87.26141,41.62887],[-87.28612,41.62704],[-87.40469,41.65019],[-87.41161,41.64876],[-87.42034,41.65341],[-87.39377,41.67733],[-87.42266,41.69573],[-87.4622,41.68529],[-87.50542,41.70611],[-87.51756,41.71643],[-87.52398,41.71348],[-87.52495,41.64461],[-87.52517,41.63248],[-87.53086,40.16985],[-87.53141,40.15046],[-87.4896,40.15077],[-87.49052,40.13081],[-87.40632,40.13009],[-87.41637,40.06971],[-87.41627,40.062],[-87.42097,40.0538],[-87.43171,40.04738],[-87.42439,40.03927],[-87.43152,40.03287],[-87.4356,40.02377],[-87.43012,39.97076],[-87.44019,39.96117],[-87.4209,39.95405],[-87.41967,39.95225],[-87.43444,39.93446],[-87.4332,39.93084],[-87.41218,39.92873],[-87.40677,39.92831],[-87.41325,39.91874],[-87.40958,39.91333],[-87.38431,39.90625],[-87.37827,39.90267],[-87.3728,39.89681],[-87.36787,39.88551],[-87.37917,39.87773],[-87.37914,39.87592],[-87.35564,39.86474],[-87.35381,39.86203],[-87.37149,39.83788],[-87.38166,39.83691],[-87.37382,39.78301],[-87.37377,39.77938],[-87.38338,39.72232],[-87.38432,39.7199],[-87.38166,39.69371],[-87.38183,39.69264],[-87.39542,39.6557],[-87.39557,39.6536],[-87.38127,39.61559],[-87.3821,39.60935],[-87.46069,39.60964],[-87.53206,39.60904],[-87.53114,39.41882],[-87.53138,39.34771],[-87.54333,39.35256],[-87.54374,39.35272],[-87.55371,39.34081],[-87.55413,39.34031],[-87.58799,39.33415],[-87.58881,39.33365],[-87.58942,39.33253],[-87.60013,39.31272],[-87.60001,39.29311],[-87.60978,39.28205],[-87.60535,39.26125],[-87.60554,39.26112],[-87.57916,39.23296],[-87.57456,39.2184],[-87.58573,39.20114],[-87.58861,39.19782],[-87.63518,39.16889],[-87.64043,39.16673],[-87.62796,39.15734],[-87.62772,39.15661],[-87.64313,39.15614],[-87.64599,39.1449],[-87.63073,39.10478],[-87.63038,39.1043],[-87.58251,39.06661],[-87.57259,39.05729],[-87.56982,39.01975],[-87.5697,39.01941],[-87.57839,38.98994],[-87.57832,38.98879],[-87.54369,38.97683],[-87.5295,38.97192],[-87.51409,38.95634],[-87.51219,38.95442],[-87.51847,38.92486],[-87.51883,38.92321],[-87.5294,38.9054],[-87.54409,38.89509],[-87.54737,38.87561],[-87.55338,38.86334],[-87.53059,38.8524],[-87.52943,38.85148],[-87.52191,38.83086],[-87.52129,38.82818],[-87.52648,38.81994],[-87.52614,38.81894],[-87.50008,38.79001],[-87.49925,38.78843],[-87.4976,38.7807],[-87.49825,38.7796],[-87.51401,38.77245],[-87.51449,38.77092],[-87.49978,38.76894],[-87.49805,38.76756],[-87.4977,38.74539],[-87.49708,38.74313],[-87.53062,38.68451],[-87.53275,38.68272],[-87.58724,38.67109],[-87.58973,38.67018],[-87.61753,38.64294],[-87.61936,38.64117],[-87.62656,38.60785],[-87.62711,38.60467],[-87.61356,38.59212],[-87.61383,38.59099],[-87.63633,38.59383],[-87.63694,38.5937],[-87.64997,38.56972],[-87.65233,38.5682],[-87.6507,38.55624],[-87.66073,38.54109],[-87.6538,38.51738],[-87.65417,38.51191],[-87.67837,38.49844],[-87.69319,38.48804],[-87.73536,38.4768],[-87.73952,38.47507],[-87.74345,38.46584],[-87.74317,38.45902],[-87.73551,38.45273],[-87.73013,38.44652],[-87.74071,38.43581],[-87.74104,38.43558],[-87.74397,38.41707],[-87.74413,38.4141],[-87.67257,38.42883],[-87.66206,38.43256],[-87.67159,38.44108],[-87.67345,38.4465],[-87.65833,38.45707],[-87.656,38.458],[-87.64537,38.45493],[-87.64069,38.45587],[-87.63818,38.44593],[-87.63579,38.44323],[-87.61116,38.44663],[-87.59888,38.45082],[-87.58917,38.46994],[-87.57997,38.48362],[-87.58717,38.49353],[-87.58373,38.49945],[-87.55772,38.4897],[-87.54069,38.49166],[-87.54682,38.50883],[-87.5498,38.51153],[-87.54049,38.51841],[-87.53637,38.51844],[-87.52985,38.51442],[-87.53322,38.50351],[-87.5314,38.49899],[-87.51852,38.50409],[-87.51323,38.50367],[-87.50017,38.49517],[-87.49548,38.49566],[-87.49255,38.49704],[-87.49091,38.50567],[-87.47569,38.51123],[-87.47047,38.51626],[-87.46538,38.53171],[-87.4642,38.53217],[-87.46412,38.48095],[-87.46394,38.4669],[-87.44453,38.46706],[-87.44423,38.44349],[-87.44473,38.43623],[-87.40712,38.43606],[-87.40759,38.3794],[-87.35772,38.38158],[-87.34541,38.38347],[-87.31834,38.37776],[-87.31599,38.37733],[-87.3167,38.23137],[-87.31699,38.20508],[-87.35565,38.20482],[-87.46633,38.20354],[-87.46706,38.16543],[-87.68891,38.1685],[-87.68887,38.20204],[-87.79955,38.20092],[-87.79945,38.22857],[-87.9843,38.2304],[-87.97637,38.19939],[-87.96938,38.19044],[-87.94213,38.17786],[-87.94012,38.17625],[-87.93557,38.16283],[-87.9352,38.16233],[-87.92312,38.17009],[-87.92184,38.17035],[-87.91494,38.16256],[-87.91499,38.16029],[-87.94197,38.13351],[-87.94518,38.13085],[-87.96801,38.13066],[-87.96912,38.12987],[-87.97701,38.11149],[-87.97929,38.11004],[-88.01454,38.10034],[-88.01575,38.09854],[-88.00958,38.08532],[-88.00784,38.08484],[-87.96303,38.10202],[-87.96098,38.10165],[-87.95486,38.08812],[-87.95458,38.08708],[-87.95876,38.07453],[-87.9613,38.07156],[-87.98943,38.05671],[-87.99203,38.05557],[-88.02368,38.05286],[-88.03012,38.05248],[-88.04168,38.04467],[-88.04258,38.04311],[-88.03739,38.03544],[-88.03444,38.03411],[-88.01109,38.03342],[-88.00921,38.03129],[-88.02389,38.01342],[-88.02512,38.01026],[-88.01063,37.97518],[-88.01099,37.97319],[-88.03123,37.96013],[-88.03206,37.95901],[-88.02998,37.93083],[-88.03258,37.92876],[-88.05756,37.93455],[-88.0598,37.93452],[-88.06862,37.92726],[-88.06884,37.92489],[-88.02204,37.91462],[-88.01733,37.91183],[-88.0125,37.89012],[-88.01421,37.88565],[-88.0282,37.89127],[-88.03129,37.89472],[-88.04966,37.89086],[-88.05696,37.89181],[-88.08425,37.90482],[-88.08957,37.90732],[-88.0997,37.90441]],[[-85.3389,41.15113],[-85.33593,40.9349],[-85.33597,40.91703],[-84.87996,40.92059],[-84.80292,40.92257],[-84.80353,41.25256],[-84.80356,41.27116],[-85.19291,41.26426],[-85.30777,41.26413],[-85.30938,41.24972],[-85.30997,41.1732],[-85.31331,41.17316],[-85.33818,41.17286],[-85.3389,41.15113]]],terms_text:"Indiana Office of Information Technology, Indiana University Spatial Data Portal, UITS, Woolpert Inc.",description:"Orthophotography for 19 counties and one city in western Indiana, collected during leaf-off conditions in 2018. One-foot resolution for Benton, Clay, Fountain, Greene, Jasper, LaPorte, Montogomery, Newton, Owen, Parke, Sullivan, Tippecanoe, Vigo, Warren, and White counties. Six-inch resolution for Allen, Lake, Porter, and Putnam counties. Three-inch resolution for Huntingburg.",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/in/IU.gif"},{id:"IPR-orotofoto-last-tms",name:"IPR ortofoto LAST (tmsproxy)",type:"tms",template:"https://osm-{switch:a,b,c}.zby.cz/tiles_ipr_last.php/{zoom}/{x}/{y}.jpg",zoomExtent:[1,20],polygon:[[[14.81232,49.93089],[14.18755,49.87687],[14.12025,50.19882],[14.74502,50.25247],[14.81232,49.93089]]]},{id:"IPR-orotofoto-vege-tms",name:"IPR ortofoto Low-Vegetation (tmsproxy)",type:"tms",template:"https://osm-{switch:a,b,c}.zby.cz/tiles_ipr_vege.php/{zoom}/{x}/{y}.jpg",zoomExtent:[1,20],polygon:[[[14.30454,49.99538],[14.31604,49.94205],[14.35,49.94508],[14.35384,49.92726],[14.42385,49.93352],[14.42009,49.95097],[14.48865,49.95709],[14.48479,49.97501],[14.55386,49.98117],[14.55012,49.99852],[14.58455,50.00159],[14.5883,49.98424],[14.69168,49.99346],[14.67634,50.06453],[14.71279,50.06777],[14.70115,50.12158],[14.6647,50.11834],[14.661,50.13543],[14.62755,50.13246],[14.61965,50.16895],[14.58543,50.16591],[14.58163,50.18344],[14.40776,50.168],[14.41156,50.15045],[14.37765,50.14744],[14.3738,50.16524],[14.33893,50.16214],[14.34278,50.14434],[14.27368,50.1382],[14.27749,50.12058],[14.2088,50.11447],[14.21289,50.09557],[14.24656,50.09857],[14.25417,50.06336],[14.21987,50.0603],[14.2237,50.04259],[14.258,50.04565],[14.26953,49.99226],[14.30454,49.99538]]]},{id:"GSGS3906",name:"Ireland British War Office 1:25k GSGS 3906",type:"tms",template:"https://mapwarper.net/layers/tile/101/{zoom}/{x}/{y}.png",zoomExtent:[0,18],polygon:[[[-9.31139,51.43828],[-7.36131,51.99302],[-7.33934,52.13149],[-6.9658,52.06231],[-6.23796,52.1534],[-6.21049,52.52928],[-5.98253,52.80079],[-5.96056,53.67037],[-6.20775,53.67851],[-6.22423,53.95255],[-5.86442,54.12513],[-5.85893,54.20392],[-5.53483,54.23122],[-5.39476,54.44739],[-5.50188,54.70052],[-6.21873,55.38194],[-6.86418,55.2162],[-7.25145,55.46455],[-7.53435,55.30853],[-8.25395,55.26787],[-8.61101,54.97259],[-8.49016,54.89369],[-8.83897,54.68306],[-8.42699,54.52397],[-8.75108,54.31302],[-9.29765,54.38985],[-10.05296,54.37866],[-10.30015,54.05747],[-10.02275,53.79386],[-10.30565,53.55142],[-9.99803,53.24354],[-9.09166,53.19256],[-9.81676,53.1102],[-9.48167,52.96984],[-9.70415,52.68107],[-10.00627,52.63608],[-9.78929,52.52426],[-9.99803,52.32663],[-10.64348,52.1753],[-10.39629,51.9761],[-10.16832,51.64668],[-10.28642,51.57334],[-9.88542,51.57163],[-9.79204,51.44684],[-9.31139,51.43828]]],terms_url:"https://wiki.openstreetmap.org/wiki/Ireland/Background_Imagery#Trinity_College_Dublin",terms_text:"Glucksman Map Library, Trinity College Dublin",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/ie/IrelandBritishWarOffice-GSGS3906.png"},{id:"Israel_Hiking",name:"Israel Hiking",type:"tms",template:"https://israelhiking.osm.org.il/Tiles/{zoom}/{x}/{y}.png",zoomExtent:[7,16],polygon:[[[34.64563,32.92073],[34.98374,33.13352],[35.15662,33.09994],[35.31781,33.11463],[35.36541,33.06285],[35.46229,33.09994],[35.51741,33.12652],[35.5266,33.21531],[35.53893,33.25442],[35.56446,33.2969],[35.61264,33.27918],[35.67429,33.30627],[35.70785,33.34269],[35.75363,33.35091],[35.81509,33.3392],[35.91531,32.9406],[35.80834,32.772],[35.77835,32.72446],[35.59491,32.62828],[35.5729,32.36541],[35.59461,32.21856],[35.55452,32.02901],[35.57225,31.75415],[35.48771,31.41951],[35.4209,31.25116],[35.47936,31.1783],[35.42771,30.95172],[35.3321,30.77107],[35.20709,30.53307],[35.17202,30.11204],[35.07514,29.83713],[35.02336,29.64569],[34.93992,29.39946],[34.89517,29.37711],[34.84785,29.59084],[34.69667,30.10714],[34.52423,30.40912],[34.48879,30.64515],[34.07929,31.52265],[34.64563,32.92073]]],terms_url:"https://israelhiking.osm.org.il/",terms_text:"Tiles © IsraelHiking, CC BY-SA-NC 3.0. Data by OpenStreetMap under ODbL.",description:"Israel Hiking map",icon:"https://israelhiking.osm.org.il/content/favicons/favicon.ico"},{id:"Israel_MTB",name:"Israel MTB",type:"tms",template:"https://israelhiking.osm.org.il/MTBTiles/{zoom}/{x}/{y}.png",zoomExtent:[7,16],polygon:[[[34.64563,32.92073],[34.98374,33.13352],[35.15662,33.09994],[35.31781,33.11463],[35.36541,33.06285],[35.46229,33.09994],[35.51741,33.12652],[35.5266,33.21531],[35.53893,33.25442],[35.56446,33.2969],[35.61264,33.27918],[35.67429,33.30627],[35.70785,33.34269],[35.75363,33.35091],[35.81509,33.3392],[35.91531,32.9406],[35.80834,32.772],[35.77835,32.72446],[35.59491,32.62828],[35.5729,32.36541],[35.59461,32.21856],[35.55452,32.02901],[35.57225,31.75415],[35.48771,31.41951],[35.4209,31.25116],[35.47936,31.1783],[35.42771,30.95172],[35.3321,30.77107],[35.20709,30.53307],[35.17202,30.11204],[35.07514,29.83713],[35.02336,29.64569],[34.93992,29.39946],[34.89517,29.37711],[34.84785,29.59084],[34.69667,30.10714],[34.52423,30.40912],[34.48879,30.64515],[34.07929,31.52265],[34.64563,32.92073]]],terms_url:"https://israelhiking.osm.org.il/",terms_text:"Tiles © IsraelHiking, CC BY-SA-NC 3.0. Data by OpenStreetMap under ODbL.",description:"Israel MTB map",icon:"https://israelhiking.osm.org.il/content/favicons/favicon.ico"},{id:"ITACyL-Castile-and-Leon",name:"ITACyL - Castile and León",type:"wms",template:"http://orto.wms.itacyl.es/WMS?REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&LAYERS=Ortofoto_CyL&SRS={proj}&FORMAT=image/jpeg&STYLES=Default&TRANSPARENT=TRUE&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[-1.9358,41.43834],[-1.89601,41.43869],[-1.89536,41.39687],[-1.9767,41.39616],[-1.97639,41.37623],[-2.06201,41.37548],[-2.06262,41.41471],[-2.10458,41.41434],[-2.10363,41.35367],[-2.14448,41.35331],[-2.1419,41.18683],[-2.06204,41.18753],[-2.06171,41.16624],[-2.02046,41.16661],[-2.01887,41.06334],[-2.10083,41.06262],[-2.10114,41.08296],[-2.22733,41.08185],[-2.22704,41.0635],[-2.26912,41.06313],[-2.2688,41.04257],[-2.35325,41.04182],[-2.35356,41.06148],[-2.39487,41.06112],[-2.39457,41.04206],[-2.43722,41.04168],[-2.43756,41.06315],[-2.47928,41.06278],[-2.47991,41.10369],[-2.52078,41.10333],[-2.5211,41.12429],[-2.60415,41.12357],[-2.60481,41.16628],[-2.6471,41.16591],[-2.64808,41.22931],[-2.72874,41.2286],[-2.72907,41.24974],[-2.89552,41.24828],[-2.89649,41.31063],[-2.9363,41.31028],[-2.93571,41.27231],[-3.14692,41.27046],[-3.14723,41.29045],[-3.22828,41.28974],[-3.22767,41.25008],[-3.39581,41.2486],[-3.39518,41.20808],[-3.43492,41.20773],[-3.43429,41.16696],[-3.47877,41.16657],[-3.47844,41.14556],[-3.60336,41.14446],[-3.6027,41.10169],[-3.64539,41.10131],[-3.64508,41.08159],[-3.68735,41.08122],[-3.68673,41.04104],[-3.72866,41.04067],[-3.72803,40.9998],[-3.76896,40.99944],[-3.76864,40.97886],[-3.85473,40.97811],[-3.8544,40.95653],[-3.89857,40.95615],[-3.89764,40.89575],[-3.93906,40.89539],[-3.93716,40.77204],[-4.06198,40.77093],[-4.06133,40.72926],[-4.10372,40.72888],[-4.10311,40.68918],[-4.14628,40.6888],[-4.14498,40.60421],[-4.19025,40.60381],[-4.18994,40.58362],[-4.22946,40.58327],[-4.22979,40.60487],[-4.27054,40.60451],[-4.26958,40.54211],[-4.31384,40.54171],[-4.31163,40.39758],[-4.39376,40.39685],[-4.39345,40.37677],[-4.43723,40.37638],[-4.43623,40.31123],[-4.52192,40.31046],[-4.52037,40.20897],[-4.56131,40.2086],[-4.56099,40.18763],[-4.68895,40.18649],[-4.68933,40.21101],[-4.73192,40.21063],[-4.73252,40.24966],[-4.76838,40.24934],[-4.76809,40.23035],[-4.81104,40.22996],[-4.81147,40.20726],[-4.8542,40.18414],[-4.85264,40.12563],[-4.93699,40.12488],[-4.93638,40.08529],[-5.35538,40.08155],[-5.35606,40.12562],[-5.44027,40.12487],[-5.44091,40.16673],[-5.60382,40.16527],[-5.60448,40.20881],[-5.68646,40.20808],[-5.68712,40.25131],[-6.02166,40.24834],[-6.02295,40.33257],[-6.10433,40.33184],[-6.1056,40.41451],[-6.18951,40.41376],[-6.19018,40.45745],[-6.26971,40.45675],[-6.26909,40.41653],[-6.35192,40.41579],[-6.35128,40.37422],[-6.43325,40.37349],[-6.43264,40.33361],[-6.52245,40.33281],[-6.52116,40.24849],[-6.59942,40.24779],[-6.59886,40.21128],[-6.85568,40.20899],[-6.85634,40.25257],[-6.93622,40.25186],[-6.93751,40.33657],[-6.85111,40.33734],[-6.86001,40.91672],[-6.93544,40.91605],[-6.93741,41.0435],[-6.85482,41.04423],[-6.85548,41.08706],[-6.77015,41.08781],[-6.77245,41.23623],[-6.68379,41.23701],[-6.60436,41.2377],[-6.60524,41.29474],[-6.5193,41.29549],[-6.51991,41.33479],[-6.43673,41.33552],[-6.43801,41.41814],[-6.35318,41.41888],[-6.35447,41.50141],[-6.26889,41.50216],[-6.2708,41.6245],[-6.35661,41.62375],[-6.35724,41.66401],[-6.43548,41.66333],[-6.4349,41.62651],[-6.52279,41.62575],[-6.52343,41.66635],[-6.6034,41.66565],[-6.60733,41.9166],[-7.02209,41.913],[-7.02406,42.03872],[-7.1054,42.03801],[-7.10613,42.08421],[-7.0208,42.08495],[-7.02276,42.2094],[-6.93699,42.21014],[-6.93763,42.25087],[-6.8548,42.25159],[-6.85545,42.29329],[-6.77342,42.294],[-6.77403,42.33244],[-6.85325,42.33176],[-6.85523,42.4569],[-7.10341,42.45477],[-7.10811,42.75115],[-7.02199,42.75189],[-7.02241,42.77825],[-6.93976,42.77896],[-6.94199,42.91962],[-6.77302,42.92106],[-6.77363,42.95958],[-6.52329,42.96172],[-6.52391,43.00095],[-6.43893,43.00167],[-6.44024,43.08361],[-5.93782,43.08789],[-5.93708,43.04189],[-5.85421,43.0426],[-5.85357,43.00258],[-5.77236,43.00327],[-5.77363,43.08308],[-5.6027,43.08453],[-5.60202,43.04222],[-5.52161,43.04291],[-5.52226,43.08409],[-5.4376,43.08481],[-5.43827,43.12651],[-5.10444,43.12935],[-5.10573,43.2099],[-5.02386,43.2106],[-5.02451,43.25117],[-4.90017,43.25222],[-4.89941,43.20501],[-4.81126,43.20576],[-4.80966,43.10538],[-4.76975,43.10571],[-4.76937,43.08168],[-4.72945,43.08202],[-4.72881,43.04219],[-4.56322,43.0436],[-4.56353,43.06296],[-4.39599,43.06438],[-4.39566,43.04336],[-4.3537,43.04371],[-4.35266,42.97836],[-4.23013,42.9794],[-4.22913,42.91625],[-4.18774,42.9166],[-4.18706,42.87407],[-4.10552,42.87476],[-4.10486,42.83348],[-3.97801,42.83457],[-3.97733,42.79214],[-3.9375,42.79248],[-3.93781,42.81183],[-3.85397,42.81254],[-3.85427,42.83193],[-3.89573,42.83158],[-3.89607,42.85343],[-3.93821,42.85307],[-3.93889,42.89577],[-3.9806,42.89542],[-3.98093,42.91627],[-4.0222,42.91591],[-4.0229,42.96014],[-3.97851,42.96052],[-3.97946,43.01999],[-3.93883,43.02034],[-3.93918,43.04239],[-3.89704,43.04275],[-3.89738,43.06414],[-3.85424,43.06451],[-3.8549,43.10583],[-3.77086,43.10654],[-3.77116,43.12515],[-3.72819,43.12551],[-3.72853,43.14656],[-3.68713,43.14691],[-3.68778,43.18786],[-3.60365,43.18858],[-3.60331,43.16747],[-3.52278,43.16815],[-3.52243,43.14619],[-3.39669,43.14726],[-3.39699,43.16601],[-3.35444,43.16637],[-3.35479,43.18837],[-3.31268,43.18873],[-3.31299,43.20828],[-3.22993,43.20899],[-3.22959,43.18768],[-3.10343,43.18875],[-3.10274,43.14562],[-3.14546,43.14526],[-3.14516,43.1271],[-3.10617,43.12743],[-3.10445,43.01915],[-3.02075,43.01987],[-3.0201,42.97903],[-2.9811,42.97936],[-2.97977,42.8958],[-3.10476,42.89473],[-3.10276,42.76928],[-3.02199,42.76997],[-3.02168,42.74983],[-2.98024,42.75019],[-2.97988,42.7275],[-2.89613,42.72822],[-2.89679,42.76967],[-2.8534,42.77004],[-2.85405,42.81087],[-2.68577,42.81231],[-2.68544,42.79159],[-2.64523,42.79194],[-2.64489,42.77024],[-2.52005,42.7713],[-2.51936,42.72827],[-2.5607,42.72791],[-2.56038,42.7076],[-2.51944,42.70795],[-2.5181,42.62357],[-2.60404,42.62283],[-2.60439,42.64497],[-2.77154,42.64353],[-2.77188,42.66544],[-2.81176,42.6651],[-2.8121,42.68624],[-2.85469,42.68588],[-2.85337,42.60302],[-2.89413,42.60267],[-2.89379,42.58159],[-3.0619,42.58015],[-3.06031,42.47952],[-3.02191,42.47985],[-3.0199,42.3525],[-3.06255,42.35213],[-3.06029,42.20906],[-3.1012,42.20871],[-3.10086,42.18682],[-3.06175,42.18716],[-3.0611,42.14559],[-3.02029,42.14594],[-3.01963,42.10375],[-2.89602,42.10482],[-2.89501,42.04071],[-2.81222,42.04143],[-2.81353,42.1246],[-2.76871,42.12499],[-2.76905,42.14674],[-2.72695,42.14711],[-2.7266,42.12485],[-2.68706,42.12519],[-2.68605,42.06109],[-2.72804,42.06073],[-2.72739,42.0193],[-2.60343,42.02037],[-2.60376,42.04135],[-2.561,42.04173],[-2.56198,42.10411],[-2.52266,42.10445],[-2.52299,42.12577],[-2.47933,42.12615],[-2.47963,42.145],[-2.35517,42.14608],[-2.3555,42.16747],[-2.31184,42.16785],[-2.3115,42.14605],[-2.2699,42.14641],[-2.26924,42.1048],[-2.2295,42.10515],[-2.22981,42.12514],[-2.14467,42.12587],[-2.14432,42.10386],[-2.10385,42.10421],[-2.10156,41.95811],[-1.97689,41.95919],[-1.97655,41.93765],[-1.93473,41.93801],[-1.93504,41.95776],[-1.89453,41.95811],[-1.89483,41.97715],[-1.854,41.97751],[-1.85304,41.91638],[-1.81381,41.91672],[-1.81151,41.76984],[-1.7706,41.77019],[-1.76866,41.64582],[-1.85335,41.64508],[-1.85305,41.62567],[-1.89471,41.6253],[-1.89403,41.58215],[-1.97716,41.58142],[-1.97683,41.56021],[-1.9377,41.56055],[-1.9358,41.43834]]],terms_text:"ITACyL"},{id:"gsi.go.jp_airphoto",name:"Japan GSI airphoto Imagery",type:"tms",template:"http://cyberjapandata.gsi.go.jp/xyz/airphoto/{zoom}/{x}/{y}.png",zoomExtent:[14,18],polygon:[[[140.88867,45.67548],[140.71289,45.41388],[141.04248,43.80282],[139.96582,43.35714],[138.99902,42.01665],[139.04297,41.26129],[137.5708,38.58253],[132.69287,36.86204],[130.84717,34.93999],[129.74854,34.994],[129.02344,34.56086],[128.36426,33.21112],[127.90283,31.87756],[128.4082,29.89781],[125.8374,26.78485],[123.33252,25.0657],[122.58545,24.42715],[123.53027,23.44309],[125.88135,24.10665],[129.96826,26.31311],[132.1875,30.20211],[134.42871,32.43561],[136.82373,33.28462],[137.85645,34.21634],[138.64746,33.24788],[138.58154,32.00808],[139.6582,28.67131],[141.65771,29.66896],[142.0752,32.06396],[141.21826,33.37641],[141.56982,35.44277],[141.43799,36.52729],[142.82227,39.16414],[143.04199,40.89691],[145.92041,42.40723],[146.18408,43.03678],[145.74463,43.54855],[145.32715,43.67582],[145.30518,43.91372],[145.61279,44.2452],[145.41504,44.62175],[144.38232,44.52784],[142.31689,45.53714],[141.3501,45.70618],[140.88867,45.67548]]],terms_url:"http://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html",terms_text:"GSI Japan",description:"Japan GSI airphoto Imagery. Not fully orthorectified, but a bit newer and/or differently covered than GSI ortho Imagery."},{id:"finds.jp_KBN_2500",name:"Japan GSI KIBAN 2500",type:"tms",template:"http://www.finds.jp/ws/tmc/1.0.0/KBN2500FN-900913-L/{zoom}/{x}/{y}.png",zoomExtent:[15,20],polygon:[[[140.88867,45.67548],[140.71289,45.41388],[141.04248,43.80282],[139.96582,43.35714],[138.99902,42.01665],[139.04297,41.26129],[137.5708,38.58253],[132.69287,36.86204],[130.84717,34.93999],[129.74854,34.994],[129.02344,34.56086],[128.36426,33.21112],[127.90283,31.87756],[128.4082,29.89781],[125.8374,26.78485],[123.33252,25.0657],[122.58545,24.42715],[123.53027,23.44309],[125.88135,24.10665],[129.96826,26.31311],[132.1875,30.20211],[134.42871,32.43561],[136.82373,33.28462],[137.85645,34.21634],[138.64746,33.24788],[138.58154,32.00808],[139.6582,28.67131],[141.65771,29.66896],[142.0752,32.06396],[141.21826,33.37641],[141.56982,35.44277],[141.43799,36.52729],[142.82227,39.16414],[143.04199,40.89691],[145.92041,42.40723],[146.18408,43.03678],[145.74463,43.54855],[145.32715,43.67582],[145.30518,43.91372],[145.61279,44.2452],[145.41504,44.62175],[144.38232,44.52784],[142.31689,45.53714],[141.3501,45.70618],[140.88867,45.67548]]],terms_url:"http://www.finds.jp/siteinfo/c_tou.html.ja",terms_text:"GSI KIBAN 2500",description:"GSI Kiban 2500 via finds.jp. Good for tracing, but a bit older."},{id:"gsi.go.jp",name:"Japan GSI ortho Imagery",type:"tms",template:"https://cyberjapandata.gsi.go.jp/xyz/ort/{zoom}/{x}/{y}.jpg",zoomExtent:[5,19],polygon:[[[130.35021,31.45741],[130.26851,31.45817],[130.20875,31.44939],[130.1002,31.44996],[130.09237,31.3919],[130.13355,31.37528],[130.35043,31.37528],[130.35021,31.45741]],[[130.4193,31.41715],[130.417,31.41672],[130.41677,31.47525],[130.34179,31.47506],[130.34179,31.48374],[130.33362,31.48374],[130.33329,31.50044],[130.36675,31.49997],[130.36664,31.52458],[130.35019,31.52544],[130.35041,31.54986],[130.32523,31.55024],[130.32501,31.60029],[130.31661,31.63336],[130.31634,31.65084],[130.3752,31.65084],[130.31164,31.67599],[130.29194,31.69179],[130.29105,31.73235],[130.2521,31.73387],[130.24986,31.71693],[130.24427,31.71712],[130.21629,31.75804],[130.17533,31.75919],[130.17422,31.78259],[130.18384,31.79096],[130.23644,31.79096],[130.26911,31.77003],[130.36334,31.75785],[130.42668,31.70893],[130.62409,31.7076],[130.62588,31.68627],[130.61088,31.62245],[130.55582,31.50249],[130.54239,31.41715],[130.42158,31.41715],[130.4193,31.41715]],[[130.52516,31.24184],[130.54441,31.24107],[130.56858,31.21715],[130.59924,31.21657],[130.59924,31.26633],[130.57641,31.26633],[130.57351,31.31625],[130.6308,31.28393],[130.68989,31.27666],[130.66706,31.26059],[130.66594,31.21925],[130.64401,31.18135],[130.59007,31.14688],[130.54239,31.17503],[130.54239,31.1913],[130.50009,31.19207],[130.50009,31.21581],[130.52494,31.21715],[130.52516,31.24184]],[[130.74987,31.16622],[130.74965,31.24107],[130.77449,31.25887],[130.77718,31.33307],[130.75122,31.37455],[130.74898,31.41658],[130.67557,31.46852],[130.67489,31.50077],[131.40006,31.5002],[131.40834,31.45916],[131.36694,31.40932],[131.3656,31.35142],[131.31703,31.34206],[131.29957,31.36595],[131.24317,31.36633],[131.19952,31.43358],[131.14782,31.45019],[131.13394,31.45],[131.1326,31.42899],[131.10059,31.42536],[131.05091,31.41639],[131.04912,31.39155],[131.08403,31.35085],[131.11626,31.35085],[131.11783,31.33422],[130.99943,31.33365],[130.99965,31.25102],[130.87521,31.25064],[130.87454,31.16679],[130.74987,31.16622]],[[130.86625,30.47468],[130.86602,30.49937],[130.93362,30.57493],[130.93227,30.61597],[131.00636,30.61655],[131.04933,30.59112],[131.04933,30.54275],[130.99203,30.50843],[130.99114,30.47526],[130.86625,30.47468]],[[137.87486,36.37519],[138.00005,36.37494],[138.00005,36.30839],[138.04159,36.30827],[138.04191,36.29175],[138.08306,36.29162],[138.08353,36.2499],[138.13307,36.24996],[138.13354,36.16677],[138.16654,36.1667],[138.16694,36.12485],[138.04167,36.12491],[138.04144,36.04158],[137.87479,36.04152],[137.87486,36.37519]],[[138.37446,35.83393],[138.4998,35.83285],[138.4998,35.75042],[138.74936,35.7506],[138.7507,35.58332],[138.62447,35.58386],[138.62536,35.49991],[138.37491,35.49972],[138.37446,35.83393]],[[135.79179,35.64165],[135.8006,35.64923],[135.834,35.65052],[135.8916,35.62003],[135.89271,35.6091],[135.95776,35.60858],[135.9834,35.6172],[135.98435,35.641],[135.95095,35.6419],[135.95048,35.68305],[135.94225,35.69204],[135.94178,35.73239],[136.00809,35.77516],[136.03167,35.77503],[136.05018,35.75012],[136.05003,35.66646],[136.0084,35.65836],[136.00856,35.61694],[136.03404,35.60022],[136.06664,35.59996],[136.06617,35.61656],[136.1002,35.62492],[136.1002,35.69127],[136.07598,35.69166],[136.07503,35.74922],[136.08342,35.76694],[136.12441,35.76605],[136.15021,35.7004],[136.15875,35.64216],[136.17442,35.62492],[136.17553,35.58342],[136.1749,35.55813],[136.15859,35.55832],[136.15875,35.56701],[136.1165,35.56675],[136.11626,35.52555],[136.04045,35.5247],[136.01684,35.50311],[136.01661,35.48334],[135.97543,35.48334],[135.94141,35.50885],[135.94186,35.56641],[135.93358,35.57487],[135.90873,35.57514],[135.90851,35.59953],[135.83185,35.59972],[135.7928,35.62519],[135.79179,35.64165]],[[135.80916,35.47505],[135.77044,35.53345],[135.7579,35.53326],[135.74168,35.51641],[135.70072,35.51705],[135.67464,35.53363],[135.67543,35.56659],[135.6996,35.58333],[135.81654,35.58343],[135.81654,35.56804],[135.85817,35.54956],[135.85851,35.52543],[135.8509,35.5247],[135.85012,35.47514],[135.80916,35.47505]],[[135.58333,35.44132],[135.61656,35.44989],[135.64163,35.47496],[135.71639,35.47478],[135.71728,35.46703],[135.81442,35.46539],[135.86668,35.44187],[135.86679,35.40868],[135.81722,35.40822],[135.81677,35.38496],[135.77548,35.3835],[135.75835,35.40804],[135.59183,35.4084],[135.58322,35.42536],[135.58333,35.44132]],[[135.40011,35.43312],[135.42496,35.44189],[135.45803,35.45008],[135.45899,35.49164],[135.46642,35.49184],[135.46619,35.50807],[135.44181,35.51709],[135.43968,35.53293],[135.45843,35.55804],[135.52324,35.55811],[135.52498,35.5091],[135.54152,35.50008],[135.54152,35.4834],[135.57515,35.48366],[135.57491,35.49164],[135.60878,35.49171],[135.60894,35.46684],[135.59208,35.45826],[135.53305,35.45826],[135.50029,35.45008],[135.50045,35.4415],[135.50789,35.42506],[135.53337,35.42513],[135.53297,35.38346],[135.5416,35.38333],[135.54176,35.36688],[135.5086,35.35836],[135.50892,35.34216],[135.50013,35.34164],[135.50013,35.41662],[135.39987,35.41655],[135.40011,35.43312]],[[133.70822,35.45816],[133.70822,35.33319],[133.12484,35.33328],[133.12495,35.3749],[132.95877,35.37508],[132.95821,35.4578],[132.87506,35.45853],[132.87461,35.52504],[132.95015,35.52522],[132.9497,35.55819],[133.01674,35.55855],[133.01685,35.56675],[133.03352,35.56693],[133.03308,35.59205],[133.06687,35.59187],[133.06654,35.6168],[133.14135,35.61671],[133.14151,35.59181],[133.36667,35.59186],[133.36689,35.57484],[133.34216,35.57447],[133.34194,35.558],[133.33321,35.55026],[133.28363,35.55017],[133.28341,35.49178],[133.33354,35.4916],[133.33354,35.47529],[133.41714,35.47492],[133.41714,35.37516],[133.49995,35.37534],[133.49973,35.45806],[133.45854,35.45806],[133.45854,35.51629],[133.49212,35.5335],[133.54136,35.54161],[133.58343,35.54197],[133.58355,35.45843],[133.70822,35.45816]],[[133.84174,35.46646],[133.84158,35.58367],[133.975,35.58329],[133.97532,35.5086],[134.00823,35.50834],[134.0334,35.49971],[134.0421,35.47497],[134.04432,35.45834],[134.08357,35.4586],[134.08309,35.53359],[134.13326,35.54969],[134.23328,35.55999],[134.27491,35.58342],[134.33299,35.58367],[134.33521,35.49172],[134.36654,35.49224],[134.36654,35.49997],[134.41718,35.49971],[134.41592,35.5417],[134.6253,35.54157],[134.62514,35.37554],[134.70839,35.37463],[134.70823,35.33398],[134.41655,35.33359],[134.41592,35.37528],[134.39218,35.37541],[134.39155,35.35011],[134.37477,35.33346],[134.20005,35.33359],[134.19939,35.35874],[134.24997,35.39971],[134.27515,35.39962],[134.27504,35.39205],[134.35819,35.39314],[134.35852,35.3999],[134.3752,35.39999],[134.37441,35.42489],[134.33256,35.42507],[134.33278,35.41659],[134.04954,35.41659],[134.05077,35.39178],[134.0661,35.39187],[134.06711,35.39999],[134.14187,35.40017],[134.14164,35.36678],[134.18339,35.35847],[134.18372,35.33337],[133.78309,35.33364],[133.78331,35.34159],[133.82472,35.3592],[133.82505,35.38311],[133.84173,35.40838],[133.89981,35.40893],[133.89981,35.41677],[133.85829,35.41659],[133.8574,35.46646],[133.84174,35.46646]],[[133.24987,33.66667],[133.41786,33.66674],[133.52485,33.66674],[133.52493,33.79178],[133.64157,33.79185],[133.64188,33.66681],[133.75006,33.66687],[133.75029,33.62517],[133.79152,33.62498],[133.79168,33.5084],[133.73336,33.5084],[133.73328,33.51658],[133.64196,33.51671],[133.60833,33.48346],[133.52493,33.46682],[133.47492,33.41935],[133.43313,33.38321],[133.37497,33.38334],[133.37497,33.49157],[133.20817,33.49191],[133.20824,33.55827],[133.24947,33.55833],[133.24987,33.66667]],[[134.3501,33.73355],[134.4832,33.73368],[134.48336,33.66732],[134.43366,33.65033],[134.43287,33.63412],[134.35279,33.63347],[134.3501,33.73355]],[[140.31656,36.21656],[140.31671,36.44984],[140.34973,36.44994],[140.35012,36.51668],[140.47467,36.51671],[140.47483,36.59159],[140.62489,36.59204],[140.62467,36.63354],[140.64974,36.6348],[140.65041,36.71684],[140.69912,36.81554],[140.71006,36.91306],[140.70838,36.95687],[140.74956,36.95866],[140.75323,37.06176],[140.75001,37.16671],[141.00832,37.16666],[141.00837,37.0917],[140.98331,37.05828],[140.98333,36.95834],[140.90834,36.90002],[140.81672,36.89999],[140.80828,36.87498],[140.80833,36.85],[140.81655,36.85004],[140.81669,36.8415],[140.81669,36.81816],[140.79988,36.80832],[140.7834,36.79992],[140.775,36.79523],[140.77498,36.78339],[140.75836,36.775],[140.75825,36.75837],[140.75002,36.75831],[140.74689,36.71939],[140.73336,36.65048],[140.69167,36.58337],[140.65003,36.51336],[140.64998,36.38351],[140.59986,36.27483],[140.57499,36.24796],[140.57463,36.21729],[140.31656,36.21656]],[[141.2166,41.24992],[141.41662,41.24971],[141.39858,41.17052],[141.40426,41.0968],[141.39503,41.04046],[141.39858,40.97185],[141.40625,40.91003],[141.41136,40.83011],[141.41307,40.80204],[141.42245,40.74987],[141.34161,40.75084],[141.3149,40.74556],[141.29203,40.74169],[141.23322,40.7419],[141.23307,40.85837],[141.25026,40.85858],[141.24941,40.91647],[141.17412,40.9169],[141.22498,40.9948],[141.23819,41.0696],[141.2497,41.1258],[141.27143,41.15875],[141.23336,41.22995],[141.2166,41.24992]],[[141.25854,41.3166],[141.15015,41.31672],[141.1499,41.39163],[141.18877,41.39205],[141.21625,41.37916],[141.25849,41.36012],[141.25854,41.3166]],[[141.05841,45.2584],[141.03453,45.25833],[141.00874,45.25815],[141.0083,45.27495],[140.99994,45.27495],[141.00002,45.30371],[140.99999,45.30828],[140.99196,45.30846],[140.99171,45.34162],[140.98351,45.34172],[140.98336,45.34998],[140.97477,45.35008],[140.97502,45.3667],[140.96664,45.36675],[140.96685,45.39818],[140.9665,45.42499],[140.9584,45.42484],[140.95816,45.43314],[140.95012,45.4335],[140.94967,45.51651],[140.97443,45.51672],[140.97448,45.50014],[140.98307,45.50042],[140.98332,45.46697],[140.99045,45.46704],[140.99135,45.45876],[141.00019,45.45813],[141.00035,45.45002],[141.01627,45.4502],[141.01637,45.47496],[141.04992,45.47532],[141.04992,45.46676],[141.06614,45.46679],[141.0665,45.4502],[141.07463,45.44999],[141.07498,45.34178],[141.0666,45.34168],[141.06418,45.30611],[141.06644,45.30565],[141.06629,45.28484],[141.05906,45.28357],[141.05841,45.2584]],[[144.27488,42.96671],[144.27502,42.99155],[144.25861,42.99145],[144.25805,42.98314],[144.20818,42.98319],[144.20854,42.97472],[144.16684,42.97503],[144.16684,43.00496],[144.16642,43.04178],[144.07486,43.04188],[144.07493,43.10025],[144.24988,43.1],[144.24988,43.1168],[144.29179,43.11675],[144.292,43.0919],[144.4168,43.09185],[144.4168,43.1168],[144.56654,43.1168],[144.56675,42.99171],[144.50005,42.9915],[144.5002,42.92481],[144.46653,42.92501],[144.31739,42.96675],[144.27488,42.96671]],[[140.69973,42.57513],[140.70015,42.61647],[140.84451,42.61673],[140.99961,42.61669],[141.00006,42.54168],[141.24984,42.54168],[141.24994,42.58336],[141.29163,42.58332],[141.29158,42.6251],[141.37501,42.62498],[141.37501,42.66662],[141.49992,42.66666],[141.49992,42.8165],[141.47496,42.8165],[141.47511,42.83341],[141.81236,42.83357],[141.95752,42.83328],[141.94355,42.77977],[141.95762,42.77896],[141.95832,42.7502],[141.99991,42.75086],[141.9992,42.71493],[142.00031,42.67632],[142.01799,42.65076],[142.09082,42.65002],[142.09122,42.5251],[142.02472,42.5251],[141.96033,42.52495],[141.8665,42.52518],[141.8656,42.57713],[141.83577,42.58519],[141.80482,42.57417],[141.74646,42.57705],[141.73069,42.61477],[141.61707,42.61055],[141.52134,42.60331],[141.45615,42.57587],[141.3562,42.52866],[141.27523,42.48822],[141.19507,42.43791],[141.10476,42.3914],[141.05393,42.33165],[141.0254,42.29161],[140.95187,42.29146],[140.9147,42.32682],[140.89451,42.37174],[140.88426,42.42723],[140.85041,42.46096],[140.76643,42.49978],[140.76663,42.52821],[140.69973,42.57513]],[[140.75005,43.23374],[140.82762,43.2135],[140.88245,43.22531],[140.97338,43.24601],[141.02139,43.24311],[141.04213,43.20211],[141.08346,43.18205],[141.17267,43.16382],[141.25678,43.19366],[141.37528,43.33327],[141.62491,43.33335],[141.62451,43.4168],[141.79146,43.4168],[141.79197,43.83339],[142.12487,43.83332],[142.12487,43.75022],[142.16656,43.74993],[142.16656,43.83317],[142.24954,43.83325],[142.24984,43.8581],[142.27465,43.8581],[142.27465,43.87425],[142.26671,43.8749],[142.26651,43.91688],[142.24994,43.9171],[142.25001,44.5],[142.49997,44.50013],[142.49977,43.88366],[142.51674,43.88344],[142.51644,43.83346],[142.62473,43.83346],[142.62473,43.58331],[142.54176,43.58403],[142.54196,43.50008],[142.50057,43.50022],[142.50037,43.25006],[142.25054,43.25014],[142.25004,43.45838],[142.00031,43.45816],[142.00001,43.41724],[141.91703,43.41688],[141.91703,43.33342],[141.87494,43.33327],[141.87454,43.17487],[141.93351,43.17473],[141.93391,43.15868],[141.99137,43.15802],[141.99207,43.1334],[141.87524,43.13332],[141.87484,43.00012],[141.49984,43.00027],[141.50015,42.91683],[141.25021,42.91631],[141.25001,42.9999],[141.12505,43.00005],[141.12525,43.08323],[140.99988,43.0836],[141.00008,43.16638],[140.75086,43.1666],[140.75005,43.23374]],[[140.59121,41.78353],[140.58382,41.8334],[140.58453,41.87732],[140.59092,41.91613],[140.60797,41.94403],[140.57544,41.95914],[140.58439,41.99979],[140.7104,42.00011],[140.86894,42.00011],[140.91724,42.00053],[140.99041,41.91909],[141.04737,41.90693],[141.12722,41.88398],[141.17552,41.83732],[141.20194,41.81488],[141.18418,41.78321],[141.11301,41.76711],[141.05689,41.71559],[140.99382,41.69968],[140.94267,41.70414],[140.89238,41.73563],[140.84806,41.74326],[140.80018,41.75672],[140.73299,41.74634],[140.69705,41.73234],[140.6881,41.76986],[140.59121,41.78353]],[[140.2418,42.2338],[140.24159,42.25827],[140.21005,42.25797],[140.20804,42.27485],[140.26611,42.27514],[140.2651,42.29179],[140.29001,42.2912],[140.29182,42.26779],[140.33914,42.24139],[140.34145,42.21662],[140.29323,42.21662],[140.2418,42.2338]],[[140.55007,42.08447],[140.54977,42.11387],[140.58066,42.11193],[140.62636,42.12069],[140.63365,42.12136],[140.6336,42.10061],[140.60853,42.09964],[140.60848,42.08327],[140.54972,42.08312],[140.55007,42.08447]],[[140.6583,41.06668],[140.67117,40.91974],[140.84492,40.91652],[140.91726,40.91688],[140.91712,40.87597],[140.9846,40.87533],[140.98503,40.79278],[141.13391,40.79192],[141.13972,40.68034],[141.17424,40.68174],[141.18504,40.60057],[141.43351,40.60078],[141.43308,40.51757],[141.18305,40.51649],[141.18362,40.58223],[141.16714,40.59172],[141.04397,40.59237],[141.04283,40.65825],[140.98402,40.65836],[140.72646,40.65857],[140.72589,40.57521],[140.66849,40.57467],[140.60883,40.57489],[140.60925,40.48311],[140.55058,40.483],[140.54888,40.51757],[140.40028,40.51692],[140.40013,40.5832],[140.25665,40.58233],[140.24898,40.63292],[140.33251,40.63292],[140.33251,40.66687],[140.41676,40.66698],[140.41704,40.73311],[140.33194,40.73375],[140.33351,40.75851],[140.28421,40.75818],[140.28037,40.85679],[140.30254,40.98507],[140.31845,41.00019],[140.42443,41.0004],[140.42443,40.90029],[140.55044,40.89975],[140.54994,41.06668],[140.6583,41.06668]],[[140.01669,40.33381],[140.25252,40.33381],[140.25006,39.33298],[139.98341,39.3332],[140.05622,39.72433],[140.00614,39.77043],[139.94073,39.88023],[139.94158,40.01081],[139.94055,40.08509],[139.94116,40.10876],[140.01669,40.33381]],[[139.85814,39.04176],[139.87552,39.04137],[139.87703,39.00009],[139.91671,39.00001],[139.9167,38.79173],[139.75493,38.79165],[139.7502,38.79386],[139.79376,38.89687],[139.79014,38.9254],[139.83615,38.99102],[139.85814,39.04176]],[[139.37551,38.1174],[139.38053,37.95893],[139.417,37.95845],[139.417,37.87413],[139.37571,37.8746],[139.37611,37.83296],[139.29234,37.83145],[139.30007,37.78074],[139.29173,37.68357],[139.29193,37.66473],[139.22935,37.6594],[139.18113,37.61024],[139.14537,37.60769],[139.12367,37.62671],[139.09816,37.65018],[139.08831,37.6664],[138.99951,37.66656],[138.99942,37.79171],[138.81261,37.79199],[138.86834,37.84689],[138.9915,37.91333],[139.08231,37.9775],[139.27679,38.03417],[139.37551,38.1174]],[[139.96008,38.49993],[140.50033,38.50009],[140.50023,38.16654],[140.37496,38.16654],[140.37536,38.08348],[140.2504,38.08293],[140.21705,38.07407],[140.22136,38.0422],[140.2512,38.04196],[140.2504,38.00017],[140.23372,37.99962],[140.23352,37.94197],[140.20861,37.9411],[140.20841,37.90013],[140.19253,37.89965],[140.19123,37.88372],[140.15838,37.883],[140.15828,37.85811],[140.0753,37.85945],[140.0741,37.87476],[140.05019,37.87571],[140.05019,37.89252],[140.05762,37.89355],[140.05813,37.92541],[140.0741,37.92573],[140.0742,37.94197],[140.09871,37.95369],[140.09821,37.99234],[140.10182,38.00041],[140.12282,38.00081],[140.11549,38.01806],[140.08977,38.02795],[140.0747,38.04133],[140.06727,38.03492],[140.06707,37.99186],[140.01634,37.9917],[140.01584,38.066],[139.99805,38.06656],[139.99966,38.13739],[139.99956,38.17514],[139.99795,38.3337],[139.95787,38.33378],[139.95837,38.50028],[139.96008,38.49993]],[[140.70822,38.7833],[140.70837,39.15023],[141.04194,39.14957],[141.04167,39.50008],[141.00147,39.49986],[140.99893,39.91638],[141.25077,39.91692],[141.25037,39.5007],[141.16709,39.50008],[141.16699,39.45627],[141.16669,39.40273],[141.16689,39.25073],[141.20798,39.24996],[141.20898,38.87471],[141.03399,38.8751],[141.03339,38.78354],[140.86794,38.78315],[140.70822,38.7833]],[[141.3759,38.36972],[141.37476,38.49992],[141.24904,38.50025],[141.25134,38.66886],[141.52524,38.66653],[141.54981,38.63369],[141.55052,38.55563],[141.55549,38.47938],[141.56558,38.39559],[141.54626,38.37398],[141.55919,38.32429],[141.59854,38.31226],[141.59527,38.26063],[141.50762,38.23664],[141.46983,38.24479],[141.39226,38.27725],[141.41158,38.34781],[141.3759,38.36972]],[[131.04175,33.7381],[131.0413,33.70887],[130.99956,33.70858],[131.00035,33.68392],[131.04959,33.68392],[131.05014,33.64171],[131.0751,33.64201],[131.07588,33.61683],[131.10039,33.61666],[131.10084,33.60082],[131.17448,33.60007],[131.19999,33.58422],[131.20066,33.55868],[131.2405,33.55868],[131.28258,33.54207],[131.33137,33.52528],[131.41821,33.55065],[131.51625,33.55084],[131.51692,33.5667],[131.63353,33.56688],[131.63308,33.47545],[131.7423,33.47452],[131.74946,33.45939],[131.75014,33.33289],[131.60756,33.33401],[131.60801,33.37421],[131.52565,33.37458],[131.52467,33.26691],[131.5769,33.25843],[131.64942,33.28332],[131.71634,33.28388],[131.77497,33.26687],[131.78385,33.25028],[131.83291,33.25015],[131.88403,33.2745],[131.90825,33.2749],[131.90809,33.25849],[131.87517,33.20607],[131.84985,33.18276],[131.85032,33.14964],[131.87525,33.15038],[131.90777,33.14129],[131.9171,33.13332],[131.91733,33.10858],[131.9505,33.09967],[131.95019,33.08349],[131.98279,33.08336],[131.98279,33.10007],[132.00036,33.1169],[132.0252,33.1169],[132.02473,33.0998],[132.00843,33.09172],[132.00843,33.06718],[132.01745,33.06705],[132.01715,33.04988],[131.99181,33.04211],[131.92518,33.04092],[131.9255,33.025],[131.95003,33.025],[131.95045,33.01347],[131.95034,32.97482],[131.98326,32.97536],[131.98492,32.95941],[132.0261,32.95922],[132.05828,32.95862],[132.05844,32.99142],[132.07198,32.9917],[132.08297,32.98332],[132.09168,32.92635],[132.02473,32.92542],[132.02473,32.90058],[132.03349,32.88294],[132.00795,32.88357],[131.98326,32.85871],[131.99988,32.8498],[132.01715,32.8429],[132.01603,32.82654],[131.97551,32.78396],[131.93411,32.76746],[131.8992,32.76614],[131.89179,32.71661],[131.83317,32.6507],[131.78369,32.64894],[131.78415,32.58396],[131.74185,32.58283],[131.7082,32.56669],[131.70773,32.54294],[131.74159,32.50852],[131.74141,32.45129],[131.70804,32.44216],[131.70112,32.40878],[131.65787,32.39219],[131.64226,32.33355],[131.59948,32.27572],[131.57492,32.18338],[131.54184,32.08474],[131.542,32.00009],[131.49975,32.00023],[131.50038,31.74971],[131.4586,31.75011],[131.45876,31.79182],[131.24969,31.79169],[131.24969,32.16704],[131.37488,32.16717],[131.37504,32.25046],[131.49991,32.25019],[131.49991,32.33341],[131.54137,32.33341],[131.54167,32.62506],[131.66645,32.62515],[131.66633,32.66662],[131.74993,32.66652],[131.75006,32.91664],[131.5977,32.91688],[131.25044,32.91663],[131.24902,33.00042],[131.49971,33.00002],[131.49987,33.06345],[131.50018,33.13915],[131.4804,33.16631],[131.284,33.16618],[131.26706,33.20035],[131.26627,33.25039],[131.29966,33.26985],[131.29951,33.31999],[131.24427,33.34114],[131.17511,33.34154],[131.17527,33.35806],[131.07525,33.35806],[131.07572,33.33347],[131.00055,33.33321],[131.00007,33.2496],[130.91445,33.2496],[130.7497,33.25013],[130.7497,33.08374],[130.62546,33.08321],[130.62546,33.00002],[130.72796,33.00171],[130.87492,33.00018],[130.8753,32.79131],[130.96677,32.79185],[130.96709,32.85808],[130.92531,32.85781],[130.92531,32.95029],[130.96679,32.95831],[131.00012,32.91683],[131.00017,32.50007],[130.66647,32.50046],[130.66669,32.33306],[130.62506,32.33306],[130.62461,32.24943],[130.49972,32.25037],[130.50039,32.12517],[130.33275,32.12498],[130.3437,32.16133],[130.34954,32.20815],[130.42748,32.29423],[130.46637,32.40054],[130.4939,32.40073],[130.523,32.43304],[130.54941,32.44456],[130.54986,32.4659],[130.48383,32.46647],[130.47421,32.47535],[130.4751,32.50064],[130.5089,32.54197],[130.62439,32.62571],[130.62484,32.6666],[130.52569,32.66679],[130.52524,32.68337],[130.55859,32.71671],[130.55903,32.7745],[130.57493,32.78372],[130.57493,32.82172],[130.50935,32.84185],[130.50778,32.86986],[130.44155,32.89158],[130.41624,32.94258],[130.41579,32.97488],[130.37438,33.00098],[130.37528,33.08315],[130.24927,33.08372],[130.24905,33.16076],[130.15863,33.09741],[130.17775,33.07174],[130.18369,33.06684],[130.18369,33.03401],[130.19958,33.025],[130.19977,33.00001],[130.12479,33.00001],[130.12457,32.96678],[130.0409,32.9407],[130.02501,32.94164],[130.02456,32.91647],[130.12457,32.9172],[130.12457,32.86739],[130.15031,32.86683],[130.19578,32.8661],[130.23334,32.89183],[130.29198,32.89183],[130.29243,32.84991],[130.29153,32.7916],[130.2922,32.71725],[130.18343,32.65791],[130.15034,32.65002],[130.11539,32.64962],[130.11744,32.70014],[130.15903,32.71706],[130.24856,32.75867],[130.24968,32.79085],[130.1333,32.79235],[130.12569,32.76751],[130.00147,32.74963],[129.9294,32.67317],[129.80048,32.57459],[129.80003,32.54704],[129.77425,32.54749],[129.71767,32.54987],[129.71632,32.59043],[129.7499,32.67487],[129.75012,32.72459],[129.80025,32.72553],[129.74161,32.77523],[129.62411,32.8501],[129.62646,32.91787],[129.83159,32.91738],[129.87121,32.91644],[129.89269,32.94105],[129.93343,33.00827],[129.967,33.07469],[130.05809,33.12025],[130.05876,33.21693],[130.24946,33.21674],[130.2499,33.33331],[130.21566,33.3335],[130.0422,33.33331],[129.92559,33.33294],[129.90836,33.35837],[129.90791,33.38304],[129.86695,33.38285],[129.86697,33.36012],[129.83338,33.34079],[129.80093,33.34098],[129.80003,33.31592],[129.75057,33.31686],[129.75034,33.27533],[129.72572,33.27477],[129.6917,33.30807],[129.69237,33.25025],[129.87479,33.25025],[129.8759,33.21299],[129.87521,33.11856],[129.87523,33.03323],[129.80831,33.03305],[129.7499,33.05031],[129.734,33.058],[129.72658,33.08172],[129.69842,33.09982],[129.62413,33.09928],[129.62374,33.12377],[129.62501,33.24201],[129.59255,33.24108],[129.59255,33.29928],[129.54197,33.3004],[129.50012,33.31761],[129.49989,33.41686],[129.59949,33.41593],[129.66753,33.40864],[129.66775,33.43274],[129.8336,33.56656],[129.93208,33.56787],[129.93522,33.40827],[130.04131,33.3836],[130.04108,33.48428],[130.24901,33.48465],[130.25057,33.61681],[130.28504,33.63405],[130.28303,33.69151],[130.30888,33.69151],[130.32365,33.66712],[130.39225,33.69179],[130.41777,33.72484],[130.43388,33.77546],[130.39024,33.87047],[130.39113,33.92509],[130.50774,33.92621],[130.60555,33.89166],[130.66665,33.9496],[130.74991,34.00844],[130.84973,34.00825],[130.8504,34.14155],[130.88308,34.19192],[130.85801,34.27519],[130.83228,34.36706],[130.97127,34.45052],[131.08608,34.43336],[131.19307,34.44166],[131.29356,34.44092],[131.36518,34.44591],[131.37548,34.5328],[131.44934,34.55013],[131.57445,34.69176],[131.62526,34.69158],[131.78596,34.70078],[131.86989,34.77435],[131.99545,34.88146],[132.37594,35.16739],[132.74972,35.16684],[132.75084,35.08318],[132.6255,35.08337],[132.62505,34.91671],[132.3755,34.91689],[132.37527,34.83426],[132.12482,34.83298],[132.12482,34.75008],[132.00038,34.7499],[132.00038,34.5833],[131.74989,34.58326],[131.75139,34.37954],[131.75147,34.1671],[132.12497,34.16683],[132.12481,34.2914],[132.25016,34.29193],[132.24929,34.40917],[132.25016,34.49983],[132.37249,34.49996],[132.37503,34.58339],[132.49167,34.58339],[132.49182,34.70831],[132.59177,34.70824],[132.58365,34.5417],[132.84148,34.54133],[132.84193,34.66623],[133.08343,34.66678],[133.08365,34.76631],[133.20743,34.76687],[133.20787,34.66678],[133.49973,34.66642],[133.50026,34.83314],[133.7012,34.83357],[133.69941,34.87526],[133.74984,34.87535],[133.74984,34.9999],[133.8751,35.00003],[133.87518,35.12504],[133.97425,35.12517],[133.97546,35.00097],[134.0585,34.99997],[134.05816,35.07464],[134.16654,35.0748],[134.1667,35.00016],[134.75338,35.00016],[134.83324,34.99997],[134.8333,35.04176],[135.24494,35.04176],[135.37472,35.04153],[135.37535,35.0836],[135.74948,35.08335],[135.75066,35.25004],[135.87474,35.2503],[135.87529,35.33388],[136.00001,35.33356],[136.00024,35.2587],[135.98331,35.24255],[135.93361,35.20027],[135.93306,35.1667],[135.97539,35.16664],[135.97523,35.15597],[136.04993,35.15829],[136.04993,35.21663],[136.05895,35.22484],[136.12455,35.23344],[136.12536,35.25011],[136.16667,35.24997],[136.16651,35.36441],[136.16664,35.45873],[136.33347,35.45857],[136.37478,35.33382],[136.49981,35.33356],[136.49965,35.49981],[136.74991,35.58365],[137.00003,35.58344],[136.99984,35.41254],[136.99999,35.33351],[137.24995,35.33357],[137.24998,34.91665],[137.6249,34.91658],[137.62516,35.00034],[137.69186,35.00052],[137.69182,35.06711],[137.74199,35.06668],[137.74222,35.10789],[137.77489,35.10844],[137.77474,35.15015],[138.16671,35.15021],[138.16666,35.2918],[138.38224,35.29138],[138.50029,35.29187],[138.50119,35.33333],[138.38256,35.33369],[138.38319,35.44169],[138.49985,35.44208],[138.49988,35.4584],[138.66644,35.45855],[138.66704,35.37476],[138.70818,35.37519],[138.70818,35.33348],[138.8334,35.33357],[138.83329,35.40832],[139.0082,35.40836],[139.00858,35.39192],[139.1243,35.39228],[139.12498,35.41668],[139.25001,35.41667],[139.24995,35.49996],[139.12487,35.50005],[139.12492,35.5833],[138.99999,35.58333],[138.99999,35.6667],[139.1249,35.66678],[139.12504,35.8092],[139.12474,35.91713],[139.00053,35.91713],[139.00006,36.00001],[139.12492,36.00012],[139.12547,36.11894],[139.12495,36.16664],[139,36.16668],[138.99941,36.25031],[138.95831,36.25002],[138.95822,36.29127],[138.91663,36.29166],[138.91678,36.37496],[138.95845,36.37565],[138.95836,36.45832],[139.08379,36.45868],[139.08334,36.5],[139.25009,36.50012],[139.2496,36.54136],[139.37464,36.54189],[139.37505,36.62499],[139.45022,36.62528],[139.44999,36.66667],[139.66374,36.66671],[139.75002,36.66665],[139.75005,36.75003],[140,36.75001],[139.99998,36.62209],[140.00001,36.41668],[140.25001,36.41666],[140.24999,36.04158],[140.50004,36.04158],[140.49989,35.83349],[140.41632,35.83374],[140.4168,35.7919],[140.45874,35.79113],[140.45874,35.72461],[140.51666,35.72486],[140.51691,35.7417],[140.59144,35.74174],[140.5915,35.94177],[140.65002,35.94164],[140.64994,36.00837],[140.67503,36.00834],[140.71403,35.92326],[140.77327,35.83877],[140.81532,35.78508],[140.89133,35.7501],[140.89211,35.71717],[140.86632,35.67853],[140.80694,35.70622],[140.72767,35.6761],[140.68235,35.68891],[140.60194,35.63074],[140.48545,35.54409],[140.4095,35.42897],[140.40816,35.33353],[140.30722,35.33371],[140.30767,35.41748],[140.30946,35.45851],[140.20762,35.45905],[140.20829,35.37478],[140.12503,35.37478],[140.12436,35.33408],[140.29155,35.33316],[140.29245,35.20909],[140.31707,35.20836],[140.31662,35.18422],[140.35042,35.18257],[140.3431,35.13152],[140.23201,35.10096],[140.13697,35.09271],[140.05542,35.03643],[139.98865,34.98849],[139.96379,34.91688],[139.91222,34.88262],[139.82272,34.89218],[139.78337,34.93633],[139.73961,34.95322],[139.7443,34.99303],[139.81476,35.00932],[139.7963,35.05283],[139.80169,35.09108],[139.80766,35.1529],[139.80866,35.19667],[139.85153,35.24127],[139.8325,35.29189],[139.74927,35.2961],[139.76149,35.33517],[139.79232,35.35267],[139.81035,35.49933],[140.0035,35.49988],[140.03349,35.53668],[140.06639,35.58384],[139.79714,35.58311],[139.80005,35.50079],[139.77087,35.47343],[139.70992,35.44207],[139.6987,35.40282],[139.66887,35.36715],[139.68478,35.30781],[139.73549,35.2728],[139.75069,35.25934],[139.73734,35.23092],[139.74388,35.20852],[139.69714,35.18971],[139.67426,35.1702],[139.68932,35.15394],[139.68151,35.13477],[139.62355,35.12199],[139.59783,35.1285],[139.60224,35.17253],[139.58363,35.18959],[139.59033,35.24164],[139.5496,35.28403],[139.49879,35.30084],[139.42314,35.30942],[139.29131,35.30066],[139.23074,35.27778],[139.15546,35.23542],[139.15031,35.17507],[139.16665,35.13316],[139.12502,35.13298],[139.09436,35.13335],[139.05832,35.13316],[139.05671,35.00443],[139.03348,34.98385],[138.99968,34.98367],[139.00057,34.88274],[139.14136,34.88348],[139.11002,34.84602],[139.08129,34.79529],[139.01691,34.74107],[138.9999,34.64151],[138.90044,34.6097],[138.87367,34.59159],[138.80026,34.59988],[138.75773,34.65881],[138.72528,34.67575],[138.72528,34.72506],[138.83316,34.72598],[138.83383,34.74952],[138.7419,34.75106],[138.7338,34.8136],[138.74985,34.90057],[138.76065,34.93773],[138.75028,34.98313],[138.77855,35.04352],[138.87546,35.03316],[138.87703,35.04929],[138.85845,35.04984],[138.76804,35.12107],[138.68294,35.12223],[138.61873,35.09015],[138.55409,35.05201],[138.54926,34.99442],[138.49996,34.95392],[138.39142,34.91129],[138.35562,34.86759],[138.33929,34.80042],[138.27635,34.72246],[138.24467,34.66616],[138.24396,34.58503],[138.12662,34.58573],[138.01467,34.62561],[137.88184,34.65541],[137.79532,34.63718],[137.68991,34.65307],[137.57654,34.66441],[137.38135,34.64618],[137.18402,34.58409],[137.03187,34.5662],[137.00794,34.57573],[137.0254,34.61792],[137.0599,34.66613],[137.17517,34.66686],[137.30767,34.75996],[137.29894,34.77595],[137.29088,34.79231],[137.25037,34.79213],[137.21635,34.76768],[137.15816,34.74911],[137.08318,34.75076],[137.03215,34.76345],[136.94061,34.80848],[136.93456,34.77522],[136.98335,34.72575],[137.06751,34.74212],[137.06773,34.70183],[137.02454,34.70809],[137.01581,34.64937],[136.98179,34.65029],[136.82601,34.74911],[136.84884,34.82319],[136.79266,34.82521],[136.79132,35.00048],[136.75081,35.00012],[136.74991,34.95849],[136.68277,34.96069],[136.6624,34.89701],[136.59078,34.80003],[136.53863,34.72704],[136.58294,34.62506],[136.75682,34.54181],[136.85798,34.54126],[136.93945,34.54347],[136.91675,34.49231],[136.94081,34.46687],[136.94113,34.40866],[136.92404,34.35876],[136.90742,34.30209],[136.90045,34.2666],[136.84981,34.23416],[136.81693,34.1923],[136.79948,34.19254],[136.79996,34.22906],[136.74203,34.25863],[136.73325,34.28285],[136.70896,34.28334],[136.64264,34.25902],[136.5594,34.22605],[136.53564,34.22167],[136.50068,34.20864],[136.44007,34.20053],[136.38325,34.16675],[136.3334,34.14802],[136.31583,34.08487],[136.2674,34.08316],[136.12497,34.08343],[136.12449,34.16688],[136.24968,34.16688],[136.24984,34.25012],[136.37486,34.25025],[136.37468,34.33331],[136.50021,34.33302],[136.49973,34.49192],[136.45843,34.49127],[136.45811,34.5416],[136.4168,34.54186],[136.41664,34.62516],[136.37494,34.62464],[136.37469,34.68106],[136.37485,34.74974],[136.33402,34.75026],[136.33354,34.79109],[136.37485,34.79213],[136.37533,34.95858],[136.33323,34.95858],[136.33323,34.83345],[136.29239,34.83371],[136.29208,34.792],[136.24966,34.79213],[136.24998,34.70838],[136.29192,34.70851],[136.2916,34.62475],[136.12487,34.62512],[136.12498,34.66674],[136.04161,34.66655],[136.04094,34.7499],[136.00023,34.75009],[135.99991,34.65993],[135.99975,34.58387],[136.04153,34.58374],[136.04185,34.50017],[136.04989,34.49997],[136.05005,34.42503],[135.91674,34.425],[135.91667,34.35836],[135.81665,34.35837],[135.81661,34.31668],[135.74991,34.31672],[135.75007,34.29167],[135.64152,34.29176],[135.64186,34.27512],[135.53325,34.27489],[135.53348,34.25834],[135.475,34.25834],[135.47511,34.22498],[135.37507,34.22512],[135.3749,34.20814],[135.50001,34.20837],[135.50001,33.66652],[135.87502,33.66661],[135.87558,33.74983],[136.03371,33.75021],[136.01272,33.71062],[135.99681,33.67327],[135.97948,33.63389],[135.97195,33.61271],[135.95831,33.56798],[135.85332,33.50522],[135.85353,33.48302],[135.87591,33.4814],[135.86057,33.44051],[135.77718,33.42558],[135.7418,33.42534],[135.74163,33.4665],[135.68498,33.47915],[135.59008,33.49633],[135.47373,33.52819],[135.3902,33.5752],[135.37485,33.61633],[135.37533,33.64967],[135.33371,33.6498],[135.32468,33.66653],[135.45794,33.66666],[135.45842,33.74987],[135.41727,33.75],[135.41663,33.78802],[135.41743,33.83273],[135.37517,33.83326],[135.37517,33.79171],[135.3284,33.78999],[135.28777,33.75622],[135.21503,33.7698],[135.14371,33.85113],[135.12013,33.87826],[135.05776,33.87991],[135.05947,33.96479],[135.07709,34.00837],[135.11345,34.05029],[135.06515,34.06759],[135.07041,34.121],[135.15522,34.16286],[135.1163,34.18742],[135.06316,34.25849],[135.04915,34.27082],[134.99554,34.27152],[134.9955,34.29122],[134.99945,34.29894],[135.00904,34.30357],[135.1457,34.34721],[135.20804,34.35108],[135.24174,34.39165],[135.19145,34.42482],[135.25012,34.46056],[135.29487,34.42658],[135.30902,34.44119],[135.36647,34.53277],[135.39147,34.53394],[135.38308,34.63128],[135.36409,34.66669],[135.29161,34.66695],[135.29061,34.6245],[135.08349,34.62463],[135.04725,34.61643],[134.92905,34.64799],[134.826,34.69662],[134.75874,34.74267],[134.71632,34.74982],[134.52561,34.74969],[134.41657,34.70885],[134.31671,34.66669],[134.25055,34.66656],[134.24992,34.68309],[134.15797,34.68348],[134.15781,34.70013],[134.12505,34.7],[134.12474,34.58386],[134.11666,34.55845],[134.02519,34.55024],[134.02535,34.44785],[134.02788,34.41639],[134.19168,34.41678],[134.19152,34.38401],[134.28347,34.38296],[134.28347,34.33371],[134.38082,34.29415],[134.40952,34.26539],[134.43268,34.24648],[134.56265,34.25055],[134.66663,34.24963],[134.64146,34.04963],[134.70809,33.96554],[134.74006,33.92825],[134.71221,33.86773],[134.76918,33.86691],[134.76712,33.82524],[134.66742,33.7754],[134.63102,33.77487],[134.50018,33.77493],[134.49978,33.95855],[134.4582,33.95874],[134.45816,34.00006],[134.34679,33.99889],[134.06047,33.99988],[133.74955,34.00047],[133.74998,34.33337],[133.875,34.33342],[133.87494,34.41668],[133.95888,34.41683],[133.95843,34.44157],[133.85055,34.44157],[133.84966,34.46621],[133.82537,34.46704],[133.81642,34.44222],[133.84205,34.43326],[133.84194,34.41656],[133.75822,34.41715],[133.74122,34.44175],[133.6913,34.44152],[133.69085,34.45739],[133.69097,34.46639],[133.70004,34.48346],[133.61655,34.48355],[133.61689,34.45827],[133.53351,34.45887],[133.53329,34.41752],[133.4897,34.41743],[133.46642,34.43313],[133.46631,34.44992],[133.4503,34.45002],[133.45008,34.4166],[133.41713,34.41696],[133.41668,34.35786],[133.34174,34.3583],[133.30304,34.37515],[133.2748,34.35876],[133.21655,34.35],[133.16694,34.35007],[133.16662,34.36659],[133.09184,34.36659],[133.09176,34.3417],[133.05837,34.34164],[133.05829,34.32491],[132.90003,34.32517],[132.89148,34.29164],[132.7917,34.29164],[132.79133,34.28281],[132.792,34.24212],[132.77492,34.22513],[132.71629,34.22499],[132.71652,34.21655],[132.75854,34.21636],[132.775,34.20877],[132.79218,34.20095],[132.79223,34.14177],[132.74138,34.14173],[132.70838,34.16655],[132.63354,34.16665],[132.61664,34.1917],[132.59185,34.1916],[132.5749,34.1666],[132.54155,34.16674],[132.54178,34.14196],[132.42515,34.14165],[132.42503,34.16657],[132.3749,34.16663],[132.37515,34.18348],[132.40833,34.18343],[132.3752,34.2168],[132.34991,34.23331],[132.35014,34.25834],[132.35814,34.25843],[132.35819,34.27503],[132.33922,34.25834],[132.29166,34.22494],[132.24992,34.22494],[132.25003,34.2043],[132.25809,34.18324],[132.28327,34.18352],[132.28321,34.19995],[132.29183,34.20837],[132.32501,34.20847],[132.31684,34.1753],[132.25843,34.17533],[132.25843,34.14171],[132.2502,34.11675],[132.21669,34.11684],[132.21685,34.0585],[132.22491,34.05827],[132.22502,33.99163],[132.21669,33.99177],[132.21652,33.97516],[132.25037,33.97526],[132.25014,33.91622],[131.95761,33.91733],[131.95783,33.92512],[131.91755,33.92495],[131.91586,33.95863],[131.88699,33.96671],[131.87569,33.95891],[131.84973,33.92502],[131.80049,33.92439],[131.79948,33.95046],[131.7752,33.95057],[131.75058,33.9668],[131.70828,33.97508],[131.70918,33.92551],[131.68366,33.92513],[131.68321,33.95056],[131.6916,33.96717],[131.69988,33.98323],[131.68332,33.99937],[131.68354,34.01681],[131.69999,34.017],[131.70011,34.03314],[131.68209,34.03352],[131.67515,34.02581],[131.62513,34.02488],[131.59122,33.97515],[131.38721,33.97497],[131.29981,33.91685],[131.16675,33.91667],[131.1172,33.97473],[131.06078,34.02462],[131.03349,34.02557],[131.04198,34.00848],[131.04175,33.7381]],[[135.98583,35.86595],[135.93905,35.95517],[135.95723,36.1316],[136.15271,36.29666],[136.6596,36.75695],[136.65846,37.00603],[136.66642,37.33477],[136.85167,37.42328],[137.11307,37.5288],[137.31877,37.54953],[137.39151,37.50356],[137.34765,37.35791],[137.20218,37.24762],[137.09307,37.06828],[137.0223,36.83795],[137.09532,36.80133],[137.22971,36.77368],[137.35387,36.80451],[137.39706,36.90966],[137.50588,36.95883],[137.72267,37.01579],[137.95199,37.10656],[138.053,37.16975],[138.18626,37.18254],[138.28854,37.24861],[138.43501,37.34512],[138.54909,37.41229],[138.61842,37.49225],[138.73903,37.51536],[138.78378,37.5674],[138.82185,37.62796],[138.91491,37.63009],[138.924,37.6032],[139.01321,37.59757],[139.01421,37.53507],[139.03452,37.52325],[139.03793,37.45798],[139.04887,37.42358],[139.13027,37.42312],[139.23881,37.4326],[139.26282,37.33326],[139.12289,37.32784],[139.11408,37.26354],[139.11422,37.16748],[139.05555,37.16658],[138.82825,37.17133],[138.87072,37.2338],[138.89104,37.31316],[138.72965,37.33259],[138.71403,37.29474],[138.71715,37.1642],[138.53517,37.16533],[138.39907,37.16692],[138.37478,37.13261],[138.3725,36.99907],[138.08823,36.99839],[138.08596,36.91586],[137.89233,36.91768],[137.87798,36.83517],[137.66517,36.8321],[137.52111,36.83142],[137.51216,36.74222],[137.39482,36.74427],[137.37138,36.58325],[137.29367,36.58371],[137.18016,36.55028],[137.21383,36.53133],[137.26384,36.33176],[136.63321,36.33496],[136.50436,36.29227],[136.39412,36.29444],[136.38034,36.25493],[136.37778,36.17665],[136.38218,36.09507],[136.38758,36.00065],[136.2593,35.99399],[136.25532,35.90923],[136.24992,35.83337],[136.12207,35.82876],[136.11184,35.88725],[136.05984,35.91165],[136.01793,35.86676],[135.98583,35.86595]],[[140.03281,37.29986],[140.03344,37.34643],[140.03344,37.47427],[140.03407,37.48281],[139.99973,37.48356],[140.00036,37.44198],[139.94212,37.44173],[139.94197,37.35007],[139.89116,37.35007],[139.89116,37.41698],[139.81725,37.41647],[139.81266,37.57468],[139.74192,37.57556],[139.74224,37.79174],[139.81789,37.79162],[139.98296,37.79112],[139.98359,37.58334],[140.0412,37.58334],[140.04151,37.47502],[140.1591,37.47528],[140.15815,37.63311],[140.3745,37.63399],[140.37481,37.83338],[140.5,37.83525],[140.49989,37.91662],[140.53144,37.9168],[140.62489,37.9167],[140.62489,37.84641],[140.62534,37.33359],[140.57502,37.33284],[140.57486,37.25881],[140.4579,37.25855],[140.45774,37.2084],[140.2501,37.20866],[140.24994,37.29998],[140.03281,37.29986]],[[141.00075,38.16707],[140.84264,38.16752],[140.68779,38.16405],[140.70788,38.09499],[140.70868,38.03346],[140.61627,38.03362],[140.53369,38.11364],[140.5359,38.14478],[140.61948,38.14478],[140.62471,38.2048],[140.6231,38.27376],[140.63073,38.33902],[140.81255,38.33698],[141.00362,38.33398],[141.00075,38.16707]],[[129.44454,34.73675],[129.52524,34.65452],[129.35703,34.19046],[129.23088,34.06063],[129.15132,34.11616],[129.27179,34.63488],[129.44454,34.73675]]],terms_url:"http://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html",terms_text:"GSI Japan",description:"Japan GSI ortho Imagery. Usually better than bing, but a bit older."},{id:"gsi.go.jp_seamlessphoto",name:"Japan GSI seamlessphoto Imagery",type:"tms",template:"https://cyberjapandata.gsi.go.jp/xyz/seamlessphoto/{zoom}/{x}/{y}.jpg",zoomExtent:[14,18],polygon:[[[140.88867,45.67548],[140.71289,45.41388],[141.04248,43.80282],[139.96582,43.35714],[138.99902,42.01665],[139.04297,41.26129],[137.5708,38.58253],[132.69287,36.86204],[130.84717,34.93999],[129.74854,34.994],[129.02344,34.56086],[128.36426,33.21112],[127.90283,31.87756],[128.4082,29.89781],[125.8374,26.78485],[123.33252,25.0657],[122.58545,24.42715],[123.53027,23.44309],[125.88135,24.10665],[129.96826,26.31311],[132.1875,30.20211],[134.42871,32.43561],[136.82373,33.28462],[137.85645,34.21634],[138.64746,33.24788],[138.58154,32.00808],[139.6582,28.67131],[141.65771,29.66896],[142.0752,32.06396],[141.21826,33.37641],[141.56982,35.44277],[141.43799,36.52729],[142.82227,39.16414],[143.04199,40.89691],[145.92041,42.40723],[146.18408,43.03678],[145.74463,43.54855],[145.32715,43.67582],[145.30518,43.91372],[145.61279,44.2452],[145.41504,44.62175],[144.38232,44.52784],[142.31689,45.53714],[141.3501,45.70618],[140.88867,45.67548]]],terms_url:"http://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html",terms_text:"GSI Japan seamless photo",description:"Japan GSI seamlessphoto Imagery. The collection of latest imageries of GSI ortho, airphoto, post disaster and others."},{id:"gsi.go.jp_std_map",name:"Japan GSI Standard Map",type:"tms",template:"https://cyberjapandata.gsi.go.jp/xyz/std/{zoom}/{x}/{y}.png",zoomExtent:[5,18],polygon:[[[141.85547,44.64912],[140.22949,43.9691],[138.95508,41.80408],[139.48242,40.17887],[138.86719,38.30718],[136.31836,37.19533],[132.14355,35.13788],[128.93555,33.35806],[129.50684,32.4727],[129.77051,31.69078],[130.20996,30.90223],[131.2207,30.78904],[131.66016,32.32428],[132.71484,32.87959],[133.76953,33.17434],[136.75781,33.87042],[139.30664,35.06597],[140.88867,35.17381],[141.15234,36.5626],[142.11914,39.94344],[141.76758,42.68243],[141.85547,44.64912]]],terms_url:"https://maps.gsi.go.jp/help/use.html",terms_text:"GSI Japan",description:"Japan GSI Standard Map. Widely covered."},{id:"juno-gps",name:"Juno GPS traces",type:"tms",template:"https://gps-tile.junolab.net/{zoom}/{x}/{y}.png",startDate:"2019-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-74.337,40.484],[-73.572,40.484],[-73.572,40.957],[-74.337,40.957],[-74.337,40.484]]],terms_url:"https://gps-tile.junolab.net/about.html",terms_text:"© 2019 Juno",description:"Juno drivers' GPS traces from two days ago, updated daily",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/ny/Juno-GPS.png",overlay:true},{id:"kalmar-orto-2014",name:"Kalmar North Orthophoto 2014",type:"wms",template:"https://kartportal.kalmar.se/arcgisserver/services/Ortofoto/Kalmar_2014/ImageServer/WMSServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[9,22],polygon:[[[16.28473,56.70827],[16.38856,56.70798],[16.40843,56.7615],[16.46269,56.75672],[16.47753,56.76023],[16.48815,56.77023],[16.48754,56.79231],[16.48254,56.79547],[16.47667,56.8223],[16.4687,56.82614],[16.48584,56.86271],[16.48809,56.87369],[16.45694,56.87786],[16.46288,56.88769],[16.42696,56.88757],[16.39809,56.89604],[16.36791,56.8952],[16.36717,56.85985],[16.36431,56.84636],[16.36001,56.83657],[16.34423,56.82532],[16.32675,56.79284],[16.26114,56.74422],[16.28473,56.70827]]],terms_url:"http://data-kalmar.opendata.arcgis.com/",terms_text:"© Kalmar municipality",best:true,description:"Orthophotos for the north coast of the municipality of Kalmar 2014",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Kalmarvapen_1a.svg/206px-Kalmarvapen_1a.svg.png"},{id:"kalmar-orto-2016",name:"Kalmar South Orthophoto 2016",type:"wms",template:"https://kartportal.kalmar.se/arcgisserver/services/Ortofoto/Kalmar_2016/ImageServer/WMSServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[9,22],polygon:[[[16.156,56.45834],[16.11389,56.46083],[16.09246,56.46633],[16.0724,56.4662],[16.07126,56.51153],[16.08516,56.56847],[16.14417,56.63933],[16.21168,56.68491],[16.28412,56.71655],[16.25135,56.74358],[16.25045,56.75062],[16.29558,56.7512],[16.33516,56.72511],[16.38922,56.71885],[16.41137,56.67602],[16.4053,56.66294],[16.33101,56.625],[16.28048,56.613],[16.21561,56.51967],[16.156,56.45834]]],terms_url:"http://data-kalmar.opendata.arcgis.com/",terms_text:"© Kalmar municipality",best:true,description:"Orthophotos for the south coast of the municipality of Kalmar 2016",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Kalmarvapen_1a.svg/206px-Kalmarvapen_1a.svg.png"},{id:"kalmar-orto-2018",name:"Kalmar Urban Orthophoto 2018",type:"wms",template:"https://kartportal.kalmar.se/arcgisserver/services/Ortofoto/Kalmar_2018/ImageServer/WMSServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[9,22],polygon:[[[16.3416,56.81756],[16.32773,56.7973],[16.36692,56.78706],[16.37105,56.79153],[16.36978,56.80511],[16.35645,56.8133],[16.3416,56.81756]],[[16.39207,56.79339],[16.4608,56.78944],[16.48817,56.79067],[16.4833,56.76986],[16.46612,56.76711],[16.45409,56.76774],[16.43173,56.77309],[16.43178,56.77663],[16.40554,56.77214],[16.39325,56.77349],[16.39207,56.79339]],[[16.29836,56.79102],[16.28796,56.7883],[16.27727,56.78367],[16.27623,56.77952],[16.2862,56.7761],[16.3108,56.77696],[16.3118,56.78086],[16.30364,56.78883],[16.29836,56.79102]],[[16.20686,56.63637],[16.22098,56.62389],[16.2453,56.62467],[16.26751,56.62951],[16.28724,56.63831],[16.37871,56.65462],[16.38806,56.6897],[16.38664,56.72867],[16.31586,56.72879],[16.29956,56.7219],[16.29331,56.70021],[16.26799,56.66889],[16.23945,56.66991],[16.2266,56.6624],[16.21411,56.64972],[16.20686,56.63637]],[[16.15172,56.67843],[16.15712,56.69334],[16.15268,56.70297],[16.13274,56.71254],[16.10987,56.71964],[16.08638,56.7112],[16.07969,56.70056],[16.08149,56.69566],[16.09534,56.69599],[16.12877,56.67766],[16.15172,56.67843]],[[15.97369,56.62759],[16.00164,56.63215],[16.04126,56.62999],[16.05658,56.62489],[16.06201,56.61794],[16.09186,56.60378],[16.10527,56.5926],[16.09581,56.58161],[16.03481,56.60405],[16.0305,56.61252],[16.0088,56.60223],[15.98755,56.59742],[15.98449,56.57141],[15.94887,56.57264],[15.91878,56.55184],[15.90892,56.55393],[15.89921,56.56867],[15.9188,56.57287],[15.94612,56.57491],[15.96371,56.59004],[15.9496,56.59724],[15.94308,56.60903],[15.95726,56.61598],[15.97589,56.62005],[15.97369,56.62759]]],terms_url:"http://data-kalmar.opendata.arcgis.com/",terms_text:"© Kalmar municipality",best:true,description:"Orthophotos for urban areas of the municipality of Kalmar 2018",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Kalmarvapen_1a.svg/206px-Kalmarvapen_1a.svg.png"},{id:"Aargau-AGIS-2014",name:"Kanton Aargau 25cm (AGIS 2014)",type:"tms",template:"https://mapproxy.osm.ch/tiles/AGIS2014/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,19],polygon:[[[8.09602,47.57882],[8.10323,47.57879],[8.10323,47.58583],[8.10591,47.58732],[8.11019,47.58878],[8.11589,47.5893],[8.12168,47.58916],[8.12546,47.58873],[8.12959,47.58888],[8.13023,47.59122],[8.132,47.59358],[8.13506,47.59546],[8.13831,47.59698],[8.14161,47.59939],[8.14534,47.60076],[8.14961,47.60144],[8.15438,47.60127],[8.15751,47.60063],[8.16119,47.59914],[8.16255,47.59976],[8.16438,47.60148],[8.16653,47.60399],[8.17087,47.60673],[8.17608,47.60838],[8.17912,47.60868],[8.18153,47.6118],[8.18304,47.61489],[8.18498,47.6176],[8.18953,47.62151],[8.19212,47.62321],[8.22261,47.623],[8.22561,47.6212],[8.22849,47.61842],[8.22959,47.61621],[8.23008,47.61501],[8.23261,47.61686],[8.23657,47.61803],[8.24,47.61835],[8.24351,47.61783],[8.24749,47.61877],[8.25066,47.61988],[8.25708,47.6208],[8.26104,47.62069],[8.26491,47.61935],[8.26732,47.61769],[8.26902,47.61531],[8.27579,47.61702],[8.28106,47.61707],[8.28772,47.61626],[8.29421,47.61442],[8.29947,47.61221],[8.30311,47.60977],[8.30287,47.59447],[8.30438,47.59227],[8.30591,47.59109],[8.30791,47.59019],[8.31236,47.58917],[8.31655,47.58713],[8.32049,47.58436],[8.32598,47.57888],[8.32864,47.57716],[8.33219,47.57604],[8.33902,47.57577],[8.34702,47.57628],[8.35962,47.57552],[8.36475,47.57436],[8.37207,47.57377],[8.38002,47.57233],[8.38194,47.57496],[8.38387,47.57686],[8.38879,47.58027],[8.39232,47.58174],[8.39611,47.58247],[8.40013,47.58255],[8.40432,47.58158],[8.41158,47.57928],[8.418,47.57602],[8.42381,47.57452],[8.43039,47.57228],[8.43275,47.57035],[8.4336,47.56849],[8.43353,47.56669],[8.4319,47.56444],[8.4286,47.56217],[8.42575,47.56121],[8.4259,47.55854],[8.42498,47.55624],[8.42353,47.55469],[8.42296,47.5537],[8.4246,47.5517],[8.42492,47.54981],[8.42434,47.54836],[8.42539,47.54679],[8.425,47.54418],[8.4233,47.5422],[8.421,47.54106],[8.41832,47.54049],[8.41551,47.54062],[8.4139,47.53924],[8.41283,47.5372],[8.41194,47.53626],[8.41241,47.53415],[8.41185,47.53237],[8.41117,47.53158],[8.40143,47.53169],[8.40124,47.52443],[8.39936,47.5222],[8.39666,47.52082],[8.39385,47.51988],[8.39085,47.51973],[8.38877,47.52014],[8.38809,47.5146],[8.38551,47.51075],[8.38366,47.50944],[8.36776,47.50953],[8.36739,47.48709],[8.3751,47.48689],[8.37889,47.4853],[8.38196,47.48188],[8.38184,47.47521],[8.38328,47.47192],[8.38244,47.46879],[8.37943,47.46643],[8.37751,47.4659],[8.37787,47.46496],[8.38238,47.46423],[8.38671,47.46097],[8.39171,47.45743],[8.39315,47.45349],[8.39514,47.45031],[8.39418,47.44722],[8.39171,47.44535],[8.3896,47.44449],[8.38996,47.44339],[8.39111,47.4416],[8.39213,47.43924],[8.39339,47.4359],[8.39249,47.43411],[8.39369,47.43143],[8.39568,47.42854],[8.39959,47.42463],[8.39953,47.41954],[8.449,47.41897],[8.45369,47.41233],[8.45369,47.40451],[8.44858,47.39649],[8.40362,47.39685],[8.40483,47.39392],[8.4029,47.38903],[8.4035,47.38553],[8.40314,47.38304],[8.40483,47.37905],[8.40844,47.37575],[8.41379,47.37338],[8.4159,47.37016],[8.41584,47.36539],[8.4144,47.36327],[8.41494,47.35912],[8.41722,47.35573],[8.41632,47.35231],[8.41355,47.34913],[8.41367,47.34688],[8.41476,47.3448],[8.41885,47.34244],[8.42264,47.34052],[8.42469,47.33718],[8.42421,47.33163],[8.42914,47.33286],[8.4351,47.33192],[8.43763,47.33281],[8.44328,47.33506],[8.44527,47.33746],[8.45213,47.3402],[8.45761,47.33975],[8.46212,47.33649],[8.46278,47.33322],[8.46043,47.32829],[8.45797,47.32457],[8.45556,47.32005],[8.44918,47.31495],[8.44713,47.31217],[8.44021,47.30948],[8.43624,47.29817],[8.43311,47.29593],[8.42806,47.29397],[8.42318,47.29001],[8.41656,47.28789],[8.41024,47.28728],[8.4035,47.28409],[8.40188,47.2805],[8.40862,47.27593],[8.41066,47.2716],[8.40892,47.26613],[8.41235,47.2618],[8.41235,47.25873],[8.41109,47.25608],[8.41698,47.25142],[8.41885,47.2475],[8.41801,47.24305],[8.4144,47.23904],[8.41373,47.23565],[8.4106,47.23226],[8.40435,47.22797],[8.40296,47.2256],[8.40398,47.22127],[8.40856,47.21718],[8.40928,47.21326],[8.40844,47.20945],[8.41012,47.20258],[8.41319,47.19678],[8.41271,47.1924],[8.4088,47.18799],[8.40814,47.18475],[8.4091,47.1812],[8.41518,47.17915],[8.41915,47.17563],[8.42294,47.16553],[8.42294,47.15747],[8.42011,47.15325],[8.42246,47.14838],[8.42276,47.14392],[8.42053,47.13954],[8.41584,47.13524],[8.40898,47.13274],[8.40386,47.13201],[8.40116,47.13258],[8.39532,47.1327],[8.38437,47.1345],[8.37895,47.13385],[8.37245,47.13442],[8.36908,47.13659],[8.368,47.13876],[8.35656,47.14228],[8.35409,47.14564],[8.35331,47.14916],[8.3506,47.15161],[8.3503,47.15419],[8.34772,47.15669],[8.34561,47.15923],[8.34086,47.16164],[8.33935,47.16512],[8.3373,47.16896],[8.33315,47.17154],[8.33261,47.17351],[8.33062,47.17792],[8.33002,47.18717],[8.32924,47.18786],[8.32936,47.19494],[8.32292,47.19514],[8.32148,47.19854],[8.32196,47.20115],[8.31835,47.21043],[8.31413,47.21178],[8.31089,47.2153],[8.31107,47.21857],[8.31221,47.2198],[8.30884,47.22433],[8.30932,47.22646],[8.30715,47.23042],[8.30727,47.2321],[8.30595,47.23582],[8.30607,47.23949],[8.30378,47.24366],[8.30144,47.24677],[8.29554,47.24836],[8.29187,47.25293],[8.28814,47.25869],[8.28766,47.26143],[8.28627,47.26519],[8.28723,47.26805],[8.28838,47.26964],[8.2823,47.27478],[8.27718,47.27576],[8.27273,47.27531],[8.26749,47.27593],[8.26533,47.27719],[8.2616,47.27695],[8.25793,47.27781],[8.25576,47.27887],[8.25317,47.27678],[8.25034,47.27548],[8.2501,47.27348],[8.24956,47.27017],[8.24559,47.26715],[8.24095,47.26678],[8.23452,47.26727],[8.23145,47.26278],[8.2309,47.25931],[8.22663,47.24942],[8.222,47.24713],[8.21526,47.24431],[8.21363,47.24203],[8.21309,47.23602],[8.21123,47.23246],[8.21285,47.22548],[8.21117,47.22266],[8.20689,47.22053],[8.19762,47.22065],[8.19149,47.21861],[8.16976,47.21865],[8.16543,47.22315],[8.16085,47.22405],[8.15351,47.2294],[8.15171,47.2332],[8.14822,47.23647],[8.14798,47.241],[8.14635,47.24203],[8.13823,47.24166],[8.13558,47.23941],[8.12673,47.23606],[8.1218,47.23631],[8.11614,47.23872],[8.10675,47.23945],[8.10266,47.24113],[8.09983,47.24436],[8.09766,47.2493],[8.09797,47.25069],[8.09339,47.25567],[8.08852,47.2569],[8.08485,47.25583],[8.08323,47.25405],[8.07995,47.25246],[8.0769,47.25054],[8.06854,47.24284],[8.06325,47.24098],[8.05134,47.23865],[8.04857,47.23886],[8.03575,47.23747],[8.0322,47.23555],[8.02714,47.23534],[8.01139,47.23967],[8.00927,47.24116],[8.00791,47.24312],[8.00783,47.24821],[8.00857,47.25042],[8.0084,47.25769],[8.00712,47.25922],[8.00299,47.26162],[8.00052,47.26486],[7.99759,47.26789],[7.99627,47.27271],[7.99474,47.27369],[7.98993,47.27121],[7.97278,47.26907],[7.96857,47.27008],[7.96737,47.27098],[7.95861,47.27112],[7.9601,47.26748],[7.96274,47.26396],[7.96576,47.26171],[7.96699,47.25879],[7.96695,47.25001],[7.95963,47.24582],[7.95112,47.23918],[7.94469,47.236],[7.93733,47.23106],[7.93405,47.23051],[7.9298,47.23077],[7.9178,47.23305],[7.90784,47.23837],[7.89793,47.2377],[7.8695,47.23207],[7.85478,47.22719],[7.85137,47.22713],[7.83958,47.22947],[7.83584,47.22976],[7.83082,47.23259],[7.82707,47.23505],[7.82431,47.23831],[7.82129,47.24042],[7.82014,47.24264],[7.81822,47.24562],[7.81771,47.24917],[7.81822,47.25082],[7.81835,47.25371],[7.81988,47.25587],[7.82116,47.2568],[7.82112,47.25778],[7.8192,47.26058],[7.81912,47.26154],[7.81686,47.26486],[7.8175,47.26731],[7.81958,47.26982],[7.82439,47.27158],[7.82805,47.2721],[7.83592,47.27837],[7.83707,47.28342],[7.84005,47.2872],[7.84201,47.29067],[7.84588,47.29427],[7.84763,47.2982],[7.85137,47.30299],[7.8529,47.30741],[7.85571,47.31032],[7.86065,47.31254],[7.86422,47.31349],[7.87018,47.31672],[7.87631,47.31736],[7.88082,47.31716],[7.88337,47.31667],[7.88588,47.31941],[7.88886,47.32131],[7.88805,47.32443],[7.88907,47.3287],[7.8915,47.33262],[7.8978,47.34014],[7.9001,47.34156],[7.90005,47.3432],[7.90222,47.34557],[7.90635,47.34704],[7.90963,47.34735],[7.91359,47.34626],[7.91618,47.34456],[7.91699,47.34303],[7.92401,47.33899],[7.93839,47.33792],[7.94929,47.33784],[7.95431,47.33596],[7.95593,47.33317],[7.95691,47.32968],[7.95571,47.32535],[7.96993,47.32797],[7.97308,47.33017],[7.98333,47.33432],[7.98563,47.33692],[7.98954,47.33818],[7.99248,47.33827],[7.99784,47.34017],[7.99635,47.34257],[7.99601,47.34588],[7.99733,47.34859],[8.00116,47.35081],[8.00137,47.3569],[8.00261,47.3577],[8.00418,47.36044],[8.00976,47.36419],[8.01125,47.36598],[8.01746,47.36926],[8.01912,47.37157],[8.0198,47.37376],[8.02023,47.37598],[8.02172,47.37837],[8.02193,47.38093],[8.02282,47.38286],[8.02078,47.38857],[8.01606,47.38929],[8.01265,47.38897],[8.00772,47.39012],[8.00367,47.39205],[8.00163,47.39479],[8.00155,47.39998],[8.00023,47.40306],[7.99801,47.40453],[7.99261,47.40551],[7.98776,47.40637],[7.98418,47.40839],[7.98027,47.4081],[7.9732,47.41127],[7.96963,47.41383],[7.95695,47.41893],[7.95529,47.4218],[7.95593,47.42402],[7.95746,47.42621],[7.96274,47.42828],[7.97746,47.43254],[7.97567,47.43732],[7.97614,47.44138],[7.97431,47.44368],[7.95129,47.45111],[7.94861,47.4539],[7.94818,47.4566],[7.94678,47.45755],[7.94039,47.45669],[7.93588,47.45738],[7.93631,47.47625],[7.9318,47.47605],[7.92469,47.47717],[7.91571,47.47743],[7.90903,47.47947],[7.90316,47.47967],[7.90295,47.48965],[7.8969,47.4898],[7.8918,47.49405],[7.89086,47.49765],[7.8878,47.49931],[7.88631,47.5023],[7.87999,47.50397],[7.87403,47.50787],[7.86994,47.50944],[7.87006,47.51239],[7.86435,47.51245],[7.85851,47.51543],[7.8558,47.51854],[7.85625,47.52147],[7.8549,47.52474],[7.85183,47.5285],[7.84647,47.52714],[7.84148,47.52777],[7.8413,47.52406],[7.84015,47.51587],[7.83943,47.51259],[7.83688,47.51256],[7.83679,47.51049],[7.83352,47.50949],[7.83156,47.50765],[7.82981,47.50552],[7.82522,47.50354],[7.82049,47.5004],[7.81475,47.49491],[7.81181,47.49261],[7.80645,47.4914],[7.80403,47.49146],[7.80049,47.49014],[7.77977,47.49028],[7.77871,47.49304],[7.7796,47.496],[7.78386,47.5004],[7.78203,47.50368],[7.78088,47.5073],[7.78109,47.51018],[7.77977,47.51265],[7.77969,47.51529],[7.77045,47.51802],[7.75905,47.52003],[7.75266,47.52009],[7.74781,47.51957],[7.73368,47.52291],[7.72781,47.52719],[7.71985,47.52978],[7.71262,47.53095],[7.70764,47.5344],[7.70551,47.53917],[7.70696,47.54279],[7.71415,47.54627],[7.72245,47.54756],[7.749,47.54977],[7.75428,47.55339],[7.76654,47.55615],[7.77168,47.55761],[7.78007,47.55836],[7.78577,47.55982],[7.7902,47.5616],[7.79398,47.56634],[7.80492,47.57237],[7.80611,47.57989],[7.81173,47.58954],[7.81577,47.59218],[7.82211,47.59352],[7.83645,47.59163],[7.83952,47.59045],[7.84305,47.58778],[7.84875,47.58899],[7.85624,47.59189],[7.86488,47.59393],[7.87126,47.5943],[7.87726,47.59367],[7.88535,47.59424],[7.89343,47.59301],[7.90109,47.58976],[7.90833,47.58514],[7.91386,47.57923],[7.91867,47.57194],[7.91956,47.56772],[7.91875,47.56433],[7.9156,47.56008],[7.91577,47.55715],[7.91841,47.55405],[7.92126,47.55261],[7.92552,47.55227],[7.93471,47.55221],[7.9405,47.55078],[7.94326,47.54968],[7.94356,47.55052],[7.94458,47.55589],[7.94841,47.55979],[7.95394,47.56229],[7.96003,47.56333],[7.96577,47.56272],[7.97203,47.5612],[7.97833,47.56057],[7.98624,47.56094],[7.99718,47.56212],[8.0045,47.56137],[8.01114,47.55974],[8.01641,47.55701],[8.02046,47.55574],[8.0262,47.55741],[8.03799,47.55876],[8.04254,47.56028],[8.0485,47.56333],[8.05454,47.56798],[8.05931,47.56921],[8.0622,47.56895],[8.06693,47.57002],[8.07242,47.56973],[8.07739,47.56795],[8.08182,47.56436],[8.08522,47.56281],[8.08791,47.56298],[8.09259,47.56559],[8.09395,47.56809],[8.09484,47.57587],[8.09602,47.57882]]],terms_text:"AGIS OF2014",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Aargau-AGIS-2016",name:"Kanton Aargau 25cm (AGIS 2016)",type:"tms",template:"https://mapproxy.osm.ch/tiles/AGIS2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[8,19],polygon:[[[7.70438,47.55794],[7.77076,47.55772],[7.77103,47.58025],[7.80408,47.58017],[7.80433,47.60248],[7.93713,47.60217],[7.93703,47.57962],[8.00374,47.57917],[8.00338,47.55687],[8.0364,47.55665],[8.03681,47.57928],[8.10313,47.57881],[8.10387,47.60112],[8.17011,47.60086],[8.17036,47.6235],[8.30311,47.62235],[8.30305,47.59988],[8.3362,47.59927],[8.33585,47.5771],[8.36913,47.57694],[8.36943,47.59931],[8.43564,47.59877],[8.43454,47.53133],[8.40144,47.53162],[8.40096,47.50926],[8.3678,47.50959],[8.3675,47.48698],[8.40042,47.48666],[8.39939,47.41929],[8.46558,47.4187],[8.46515,47.39647],[8.43206,47.39654],[8.43125,47.3516],[8.46434,47.35128],[8.46327,47.28387],[8.42997,47.28421],[8.42714,47.12676],[8.3293,47.12753],[8.32937,47.13007],[8.32833,47.13007],[8.3285,47.14529],[8.3294,47.19502],[8.2964,47.19526],[8.29714,47.24022],[8.2641,47.24046],[8.26446,47.26297],[8.23141,47.26316],[8.23075,47.21822],[8.09886,47.21912],[8.09874,47.24135],[8.066,47.24176],[8.06552,47.2192],[7.99993,47.21952],[8.00003,47.26433],[7.96735,47.26462],[7.96675,47.21961],[7.80153,47.22029],[7.80244,47.28791],[7.83518,47.28772],[7.83543,47.31017],[7.86837,47.31017],[7.86885,47.35542],[8.00097,47.3543],[8.00156,47.39928],[7.9353,47.39976],[7.93607,47.46716],[7.90278,47.46729],[7.90303,47.48981],[7.86987,47.48998],[7.86993,47.5125],[7.83689,47.51258],[7.83665,47.4901],[7.77027,47.49026],[7.77045,47.51274],[7.70452,47.51307],[7.70438,47.55794]]],terms_text:"AGIS OF2016",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Aargau-AGIS-2017",name:"Kanton Aargau 25cm (AGIS 2017)",type:"tms",template:"https://mapproxy.osm.ch/tiles/AGIS2017/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[8,19],polygon:[[[7.70438,47.55794],[7.77076,47.55772],[7.77103,47.58025],[7.80408,47.58017],[7.80433,47.60248],[7.93713,47.60217],[7.93703,47.57962],[8.00374,47.57917],[8.00338,47.55687],[8.0364,47.55665],[8.03681,47.57928],[8.10313,47.57881],[8.10387,47.60112],[8.17011,47.60086],[8.17036,47.6235],[8.30311,47.62235],[8.30305,47.59988],[8.3362,47.59927],[8.33585,47.5771],[8.36913,47.57694],[8.36943,47.59931],[8.43564,47.59877],[8.43454,47.53133],[8.40144,47.53162],[8.40096,47.50926],[8.3678,47.50959],[8.3675,47.48698],[8.40042,47.48666],[8.39939,47.41929],[8.46558,47.4187],[8.46515,47.39647],[8.43206,47.39654],[8.43125,47.3516],[8.46434,47.35128],[8.46327,47.28387],[8.42997,47.28421],[8.42714,47.12676],[8.3293,47.12753],[8.32937,47.13007],[8.32833,47.13007],[8.3285,47.14529],[8.3294,47.19502],[8.2964,47.19526],[8.29714,47.24022],[8.2641,47.24046],[8.26446,47.26297],[8.23141,47.26316],[8.23075,47.21822],[8.09886,47.21912],[8.09874,47.24135],[8.066,47.24176],[8.06552,47.2192],[7.99993,47.21952],[8.00003,47.26433],[7.96735,47.26462],[7.96675,47.21961],[7.80153,47.22029],[7.80244,47.28791],[7.83518,47.28772],[7.83543,47.31017],[7.86837,47.31017],[7.86885,47.35542],[8.00097,47.3543],[8.00156,47.39928],[7.9353,47.39976],[7.93607,47.46716],[7.90278,47.46729],[7.90303,47.48981],[7.86987,47.48998],[7.86993,47.5125],[7.83689,47.51258],[7.83665,47.4901],[7.77027,47.49026],[7.77045,47.51274],[7.70452,47.51307],[7.70438,47.55794]]],terms_text:"AGIS OF2017",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Aargau-AGIS-2019",name:"Kanton Aargau 25cm (AGIS 2019)",type:"tms",template:"https://mapproxy.osm.ch/tiles/AGIS2019/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2019-01-01T00:00:00.000Z",startDate:"2019-01-01T00:00:00.000Z",zoomExtent:[8,19],polygon:[[[7.70438,47.55794],[7.77076,47.55772],[7.77103,47.58025],[7.80408,47.58017],[7.80433,47.60248],[7.93713,47.60217],[7.93703,47.57962],[8.00374,47.57917],[8.00338,47.55687],[8.0364,47.55665],[8.03681,47.57928],[8.10313,47.57881],[8.10387,47.60112],[8.17011,47.60086],[8.17036,47.6235],[8.30311,47.62235],[8.30305,47.59988],[8.3362,47.59927],[8.33585,47.5771],[8.36913,47.57694],[8.36943,47.59931],[8.43564,47.59877],[8.43454,47.53133],[8.40144,47.53162],[8.40096,47.50926],[8.3678,47.50959],[8.3675,47.48698],[8.40042,47.48666],[8.39939,47.41929],[8.46558,47.4187],[8.46515,47.39647],[8.43206,47.39654],[8.43125,47.3516],[8.46434,47.35128],[8.46327,47.28387],[8.42997,47.28421],[8.42714,47.12676],[8.3293,47.12753],[8.32937,47.13007],[8.32833,47.13007],[8.3285,47.14529],[8.3294,47.19502],[8.2964,47.19526],[8.29714,47.24022],[8.2641,47.24046],[8.26446,47.26297],[8.23141,47.26316],[8.23075,47.21822],[8.09886,47.21912],[8.09874,47.24135],[8.066,47.24176],[8.06552,47.2192],[7.99993,47.21952],[8.00003,47.26433],[7.96735,47.26462],[7.96675,47.21961],[7.80153,47.22029],[7.80244,47.28791],[7.83518,47.28772],[7.83543,47.31017],[7.86837,47.31017],[7.86885,47.35542],[8.00097,47.3543],[8.00156,47.39928],[7.9353,47.39976],[7.93607,47.46716],[7.90278,47.46729],[7.90303,47.48981],[7.86987,47.48998],[7.86993,47.5125],[7.83689,47.51258],[7.83665,47.4901],[7.77027,47.49026],[7.77045,47.51274],[7.70452,47.51307],[7.70438,47.55794]]],terms_text:"AGIS OF2019",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Aargau-AGIS-2014-Hillshade",name:"Kanton Aargau 50cm DTM/Hillshade",type:"tms",template:"https://mapproxy.osm.ch/tiles/AGIS2014HILLSHADE/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,19],polygon:[[[7.70438,47.55794],[7.77076,47.55772],[7.77103,47.58025],[7.80408,47.58017],[7.80433,47.60248],[7.93713,47.60217],[7.93703,47.57962],[8.00374,47.57917],[8.00338,47.55687],[8.0364,47.55665],[8.03681,47.57928],[8.10313,47.57881],[8.10387,47.60112],[8.17011,47.60086],[8.17036,47.6235],[8.30311,47.62235],[8.30305,47.59988],[8.3362,47.59927],[8.33585,47.5771],[8.36913,47.57694],[8.36943,47.59931],[8.43564,47.59877],[8.43454,47.53133],[8.40144,47.53162],[8.40096,47.50926],[8.3678,47.50959],[8.3675,47.48698],[8.40042,47.48666],[8.39939,47.41929],[8.46558,47.4187],[8.46515,47.39647],[8.43206,47.39654],[8.43125,47.3516],[8.46434,47.35128],[8.46327,47.28387],[8.42997,47.28421],[8.42714,47.12676],[8.3293,47.12753],[8.32937,47.13007],[8.32833,47.13007],[8.3285,47.14529],[8.3294,47.19502],[8.2964,47.19526],[8.29714,47.24022],[8.2641,47.24046],[8.26446,47.26297],[8.23141,47.26316],[8.23075,47.21822],[8.09886,47.21912],[8.09874,47.24135],[8.066,47.24176],[8.06552,47.2192],[7.99993,47.21952],[8.00003,47.26433],[7.96735,47.26462],[7.96675,47.21961],[7.80153,47.22029],[7.80244,47.28791],[7.83518,47.28772],[7.83543,47.31017],[7.86837,47.31017],[7.86885,47.35542],[8.00097,47.3543],[8.00156,47.39928],[7.9353,47.39976],[7.93607,47.46716],[7.90278,47.46729],[7.90303,47.48981],[7.86987,47.48998],[7.86993,47.5125],[7.83689,47.51258],[7.83665,47.4901],[7.77027,47.49026],[7.77045,47.51274],[7.70452,47.51307],[7.70438,47.55794]]],terms_text:"AGIS 2014 50cm DTM/Hillshade",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Basel-Landschaft-2015",name:"Kanton Basel-Landschaft 10cm (2015)",type:"tms",template:"https://mapproxy.osm.ch/tiles/KTBASELLANDSCHAFT2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[18,21],polygon:[[[7.37028,47.41368],[7.35758,47.41508],[7.35792,47.41827],[7.35354,47.41961],[7.34488,47.42402],[7.33973,47.42971],[7.33269,47.43024],[7.32685,47.43192],[7.32528,47.43489],[7.3305,47.44176],[7.33899,47.44109],[7.34496,47.43608],[7.35266,47.43436],[7.3812,47.43208],[7.37599,47.41431],[7.37815,47.414],[7.38204,47.41331],[7.38839,47.41398],[7.41371,47.41093],[7.42074,47.4111],[7.42748,47.41448],[7.43811,47.41274],[7.4484,47.41507],[7.45558,47.42792],[7.45062,47.43534],[7.43784,47.44632],[7.42542,47.44328],[7.4209,47.44594],[7.42242,47.45072],[7.4288,47.45388],[7.43003,47.45949],[7.44577,47.46197],[7.44717,47.45696],[7.45651,47.44926],[7.49236,47.45897],[7.53068,47.46119],[7.52745,47.47391],[7.53633,47.48383],[7.53623,47.49105],[7.5326,47.49097],[7.53179,47.4974],[7.52004,47.49678],[7.51223,47.49892],[7.50935,47.50888],[7.49908,47.51628],[7.49787,47.52125],[7.50228,47.51491],[7.51746,47.51728],[7.5222,47.51409],[7.53096,47.52905],[7.51935,47.53472],[7.51075,47.52899],[7.5023,47.5284],[7.49804,47.53615],[7.50545,47.54438],[7.51676,47.54541],[7.52732,47.55278],[7.55466,47.56437],[7.56458,47.55704],[7.56124,47.55172],[7.55875,47.55235],[7.55588,47.54434],[7.56479,47.54569],[7.58726,47.5419],[7.58269,47.53247],[7.58948,47.52792],[7.59025,47.51979],[7.59478,47.51929],[7.61378,47.53925],[7.6223,47.53977],[7.62285,47.55004],[7.61774,47.55437],[7.61762,47.55865],[7.63273,47.56149],[7.63997,47.55816],[7.649,47.5483],[7.66131,47.54483],[7.66586,47.53746],[7.67467,47.53375],[7.69494,47.5325],[7.71347,47.53978],[7.71596,47.53582],[7.72362,47.53675],[7.72716,47.53293],[7.73322,47.53275],[7.73797,47.52732],[7.74902,47.52498],[7.75786,47.52605],[7.78763,47.52012],[7.79014,47.51864],[7.78887,47.50683],[7.7928,47.50068],[7.78663,47.49312],[7.79889,47.49565],[7.79816,47.4994],[7.7994,47.49748],[7.80742,47.49714],[7.81471,47.5048],[7.83198,47.51474],[7.83321,47.53382],[7.84653,47.53266],[7.85233,47.53524],[7.86257,47.52692],[7.86396,47.51931],[7.87666,47.52269],[7.87567,47.51319],[7.89399,47.50606],[7.90477,47.49218],[7.90482,47.48491],[7.93329,47.48141],[7.94702,47.48489],[7.94003,47.46202],[7.94885,47.46378],[7.95761,47.45881],[7.95785,47.45128],[7.94678,47.44319],[7.95003,47.43172],[7.96183,47.42183],[7.95657,47.41968],[7.95504,47.41561],[7.94839,47.41627],[7.93493,47.41177],[7.93672,47.40806],[7.93266,47.40527],[7.90974,47.39852],[7.89022,47.40714],[7.88333,47.4061],[7.88344,47.4012],[7.8777,47.40126],[7.86914,47.39551],[7.87943,47.38799],[7.87881,47.38351],[7.86265,47.38198],[7.84012,47.37476],[7.83055,47.36512],[7.80217,47.3611],[7.79637,47.35347],[7.79356,47.33905],[7.78529,47.33788],[7.76896,47.33891],[7.76642,47.34273],[7.75152,47.34433],[7.73415,47.35776],[7.72791,47.36886],[7.70195,47.37245],[7.6442,47.36721],[7.64176,47.38047],[7.63558,47.38059],[7.63332,47.38291],[7.63331,47.38534],[7.63725,47.38607],[7.63272,47.41003],[7.66405,47.41002],[7.6798,47.41751],[7.68658,47.43366],[7.68297,47.43872],[7.68485,47.44784],[7.69227,47.45421],[7.69883,47.45586],[7.69993,47.46191],[7.70988,47.46938],[7.69976,47.48063],[7.66833,47.48635],[7.66612,47.49687],[7.65217,47.49581],[7.64865,47.49183],[7.65539,47.49021],[7.65051,47.48826],[7.65593,47.48739],[7.64442,47.48564],[7.64097,47.48273],[7.6073,47.4894],[7.60885,47.48353],[7.60563,47.47936],[7.60815,47.47521],[7.60449,47.47045],[7.61887,47.46745],[7.62607,47.46291],[7.62217,47.46195],[7.61646,47.44523],[7.6158,47.43275],[7.59207,47.43271],[7.58121,47.42878],[7.57842,47.43491],[7.5689,47.4369],[7.5683,47.42233],[7.58074,47.4147],[7.52524,47.41163],[7.53117,47.40353],[7.51862,47.38822],[7.5113,47.38974],[7.50226,47.38481],[7.49233,47.38523],[7.47841,47.39056],[7.47747,47.40128],[7.46448,47.40251],[7.46092,47.40068],[7.45002,47.40393],[7.44951,47.39976],[7.4434,47.40231],[7.44131,47.40018],[7.44357,47.3889],[7.43732,47.38089],[7.41169,47.38057],[7.41628,47.38479],[7.41449,47.3943],[7.39894,47.39684],[7.39592,47.40338],[7.38869,47.40302],[7.38405,47.41236],[7.37968,47.41281],[7.37584,47.41401],[7.37028,47.41368]]],terms_url:"https://www.geo.bl.ch/fileadmin/user_upload/Geodaten/Nutzungsbedingungen_GBD_BL_V3p2.pdf",terms_text:"Geodaten des Kantons Basel-Landschaft 2015",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"KTBASELSTADT2015",name:"Kanton Basel-Stadt 2015",type:"tms",template:"https://mapproxy.osm.ch/tiles/KTBASELSTADT2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[8,21],polygon:[[[7.492,47.4817],[7.492,47.6342],[7.784,47.6342],[7.784,47.4817],[7.492,47.4817]]],terms_text:"Kanton Basel-Stadt OF 2015",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"KTBASELSTADT2017",name:"Kanton Basel-Stadt 2017",type:"tms",template:"https://mapproxy.osm.ch/tiles/KTBASELSTADT2017/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[8,21],polygon:[[[7.67138,47.59522],[7.67996,47.60078],[7.68451,47.60182],[7.69438,47.60171],[7.69395,47.59667],[7.68708,47.59355],[7.67884,47.58712],[7.68571,47.58538],[7.68906,47.57612],[7.69412,47.5734],[7.6924,47.56691],[7.6847,47.5617],[7.66425,47.56164],[7.64872,47.55689],[7.63035,47.55869],[7.62357,47.55666],[7.62786,47.55145],[7.62738,47.53658],[7.61833,47.53662],[7.61335,47.53262],[7.59962,47.51911],[7.58503,47.51917],[7.58409,47.52636],[7.57713,47.53163],[7.58125,47.53986],[7.5719,47.54148],[7.55387,47.54148],[7.55379,47.55122],[7.55653,47.55828],[7.5537,47.56031],[7.55379,47.57473],[7.56434,47.58122],[7.57936,47.57988],[7.58331,47.59019],[7.58563,47.59233],[7.59207,47.59239],[7.59851,47.59071],[7.60915,47.58643],[7.60923,47.5811],[7.6191,47.58046],[7.63687,47.59314],[7.63782,47.59557],[7.64168,47.59887],[7.64528,47.60026],[7.66494,47.59618],[7.67138,47.59522]]],terms_text:"Kanton Basel-Stadt OF 2017",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Bern-dsm-hillshade-2015",name:"Kanton Bern, Digitales Oberflaechenmodell 50cm, Relief",type:"wms",template:"https://www.geoservice.apps.be.ch/geoservice2/services/a42geo/a42geo_hoehenwms_d_fk/MapServer/WmsServer?LAYERS=GEODB.LDOM50CM_LORELIEF&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&STYLES=default&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[6.82526,47.07901],[7.28497,46.74221],[7.06335,46.27329],[8.20129,46.43975],[8.44334,46.59001],[8.47595,46.76315],[8.41244,46.79841],[8.13984,46.7869],[7.96543,46.80687],[7.90089,46.8914],[7.97676,47.00414],[7.88784,47.05609],[7.90363,47.17665],[7.81952,47.29413],[7.55859,47.33231],[7.16583,47.31183],[6.82388,47.18131],[6.82526,47.07901]]],terms_text:"Digitales Oberflächenmodell LIDAR 50cm © Amt für Wald des Kantons Bern"},{id:"Bern-dtm-hillshade-2015",name:"Kanton Bern, Digitales Terrainmodell 50cm, Relief",type:"wms",template:"https://www.geoservice.apps.be.ch/geoservice2/services/a42geo/a42geo_hoehenwms_d_fk/MapServer/WmsServer?LAYERS=GEODB.LDTM50CM_LTRELIEF&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&STYLES=default&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[6.82526,47.07901],[7.28497,46.74221],[7.06335,46.27329],[8.20129,46.43975],[8.44334,46.59001],[8.47595,46.76315],[8.41244,46.79841],[8.13984,46.7869],[7.96543,46.80687],[7.90089,46.8914],[7.97676,47.00414],[7.88784,47.05609],[7.90363,47.17665],[7.81952,47.29413],[7.55859,47.33231],[7.16583,47.31183],[6.82388,47.18131],[6.82526,47.07901]]],terms_text:"Digitales Terrainmodell LIDAR 50cm © Amt für Wald des Kantons Bern"},{id:"KTGL_ORTHO_2013",name:"Kanton Glarus Orthophoto 2013",type:"wms",template:"https://wms.geo.gl.ch?LAYERS=ch.gl.imagery.orthofoto2013&STYLES=default&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[8.99094,47.18505],[8.94836,47.13462],[8.93738,47.05609],[8.87421,47.03363],[8.9415,46.93807],[8.86597,46.84423],[8.86459,46.80852],[8.91815,46.78596],[9.04587,46.80758],[9.245,46.8968],[9.26147,46.92213],[9.25186,47.01865],[9.2189,47.04673],[9.19693,47.12154],[9.06235,47.1505],[8.99094,47.18505]]],terms_text:"Kanton Glarus, Luftbild Orthofoto 2013"},{id:"KTGL_ORTHO_2015",name:"Kanton Glarus Orthophoto 2015",type:"wms",template:"https://wms.geo.gl.ch?LAYERS=ch.gl.imagery.orthofoto2015&STYLES=default&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[8.99094,47.18505],[8.94836,47.13462],[8.93738,47.05609],[8.87421,47.03363],[8.9415,46.93807],[8.86597,46.84423],[8.86459,46.80852],[8.91815,46.78596],[9.04587,46.80758],[9.245,46.8968],[9.26147,46.92213],[9.25186,47.01865],[9.2189,47.04673],[9.19693,47.12154],[9.06235,47.1505],[8.99094,47.18505]]],terms_text:"Kanton Glarus, Luftbild Orthofoto 2015"},{id:"KTGL_ORTHO_2017",name:"Kanton Glarus Orthophoto 2017",type:"wms",template:"https://wms.geo.gl.ch?LAYERS=ch.gl.imagery.orthofoto2017&STYLES=default&FORMAT=image/jpeg&CRS={proj}&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[8.99094,47.18505],[8.94836,47.13462],[8.93738,47.05609],[8.87421,47.03363],[8.9415,46.93807],[8.86597,46.84423],[8.86459,46.80852],[8.91815,46.78596],[9.04587,46.80758],[9.245,46.8968],[9.26147,46.92213],[9.25186,47.01865],[9.2189,47.04673],[9.19693,47.12154],[9.06235,47.1505],[8.99094,47.18505]]],terms_text:"Kanton Glarus, Luftbild Orthofoto 2017",best:true},{id:"Solothurn-sogis2014-tms",name:"Kanton Solothurn (SOGIS)",type:"tms",template:"https://mapproxy.osm.ch/tiles/sogis2014/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2017-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[15,19],polygon:[[[7.95595,47.47162],[7.98239,47.47155],[7.98239,47.45353],[7.99553,47.45353],[7.99521,47.41747],[8.0218,47.41743],[8.02155,47.39935],[8.03456,47.39926],[8.03468,47.39028],[8.04788,47.39022],[8.04769,47.37224],[8.03456,47.37232],[8.03437,47.3544],[8.02117,47.35427],[8.02072,47.32739],[7.99445,47.32747],[7.99426,47.31857],[7.96773,47.31866],[7.96767,47.30966],[7.94122,47.30978],[7.94133,47.32778],[7.91486,47.32786],[7.91467,47.30988],[7.9016,47.31005],[7.9014,47.30097],[7.87501,47.3011],[7.87501,47.29223],[7.86165,47.29212],[7.86154,47.27409],[7.84832,47.27416],[7.8483,47.26523],[7.83502,47.2652],[7.83502,47.25624],[7.79535,47.25636],[7.7953,47.24741],[7.72924,47.24756],[7.72929,47.25652],[7.71623,47.25667],[7.71618,47.26559],[7.70304,47.26559],[7.70304,47.27461],[7.68975,47.27467],[7.68989,47.28368],[7.66341,47.28371],[7.66332,47.2747],[7.61055,47.27476],[7.61041,47.24787],[7.62352,47.24777],[7.62356,47.23879],[7.64986,47.23876],[7.64999,47.22977],[7.6499,47.22083],[7.66308,47.22073],[7.6631,47.21178],[7.66297,47.20273],[7.67617,47.2027],[7.67623,47.19372],[7.68938,47.19369],[7.68924,47.17572],[7.70243,47.1756],[7.70234,47.14869],[7.66267,47.14881],[7.66281,47.13978],[7.63633,47.1399],[7.63647,47.14869],[7.5968,47.14893],[7.59684,47.13996],[7.57041,47.13999],[7.57042,47.15792],[7.55736,47.15795],[7.55732,47.14888],[7.54421,47.14895],[7.54417,47.13991],[7.53098,47.13991],[7.53095,47.13097],[7.51767,47.13097],[7.51765,47.12196],[7.51769,47.11292],[7.49131,47.11301],[7.49135,47.10403],[7.4782,47.104],[7.47813,47.07705],[7.46493,47.07708],[7.46498,47.06807],[7.42552,47.06801],[7.42543,47.08601],[7.37279,47.08598],[7.37288,47.10403],[7.3596,47.10403],[7.35955,47.131],[7.41228,47.131],[7.41223,47.14901],[7.42538,47.14901],[7.42552,47.15801],[7.3727,47.15796],[7.3727,47.18498],[7.34627,47.18492],[7.34636,47.20287],[7.33307,47.2029],[7.33307,47.22096],[7.34614,47.22096],[7.34614,47.22991],[7.37256,47.22991],[7.3727,47.2389],[7.399,47.23896],[7.39913,47.24792],[7.41228,47.24792],[7.41228,47.26592],[7.45186,47.26589],[7.45195,47.2749],[7.46505,47.27493],[7.4651,47.28385],[7.47829,47.28385],[7.47834,47.29293],[7.5046,47.29288],[7.50473,47.30183],[7.5312,47.30181],[7.53129,47.31979],[7.54448,47.31985],[7.54453,47.3288],[7.55768,47.32883],[7.55768,47.33786],[7.53125,47.33786],[7.53133,47.35586],[7.51801,47.35583],[7.5181,47.36483],[7.3988,47.36484],[7.39889,47.39182],[7.38564,47.39181],[7.38564,47.4008],[7.37234,47.4008],[7.37234,47.40978],[7.34584,47.40978],[7.34584,47.41878],[7.31925,47.41878],[7.31925,47.44578],[7.4121,47.44578],[7.4121,47.49078],[7.42535,47.49078],[7.42535,47.49981],[7.43856,47.49981],[7.43856,47.50876],[7.49177,47.50876],[7.49178,47.63468],[7.7845,47.63428],[7.78415,47.57123],[7.81074,47.57114],[7.81074,47.56216],[7.82395,47.56206],[7.82387,47.54414],[7.86368,47.54397],[7.86363,47.53498],[7.87679,47.53495],[7.87675,47.52599],[7.8901,47.52596],[7.89006,47.51695],[7.90319,47.51692],[7.9031,47.49886],[7.91649,47.49883],[7.91645,47.48976],[7.95612,47.48967],[7.95595,47.47162]]],terms_text:"Orthofoto WMS Solothurn",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/ch/KantonSolothurn-SOGIS-wms.png"},{id:"Solothurn-infrared-SOGIS",name:"Kanton Solothurn Infrarot (SOGIS)",type:"wms",template:"https://geo.so.ch/api/wms?LAYERS=ch.so.agi.orthofoto_2015.cir&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",endDate:"2017-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[15,19],polygon:[[[7.57042,47.15792],[7.55736,47.15795],[7.55732,47.14888],[7.54421,47.14895],[7.54417,47.13991],[7.53098,47.13991],[7.53093,47.12196],[7.51765,47.12196],[7.51769,47.11292],[7.49131,47.11301],[7.49135,47.10403],[7.4782,47.104],[7.47816,47.09496],[7.49144,47.09499],[7.4914,47.07702],[7.47816,47.07705],[7.4782,47.06804],[7.42552,47.06801],[7.42543,47.08601],[7.37279,47.08598],[7.37288,47.10403],[7.3596,47.10403],[7.35955,47.131],[7.41228,47.131],[7.41223,47.14901],[7.42538,47.14901],[7.42552,47.15801],[7.39913,47.15804],[7.39913,47.14901],[7.3727,47.14898],[7.3727,47.18498],[7.34627,47.18492],[7.34636,47.19391],[7.33307,47.19394],[7.33307,47.22991],[7.37256,47.22991],[7.3727,47.2389],[7.399,47.23896],[7.39913,47.24792],[7.41228,47.24792],[7.41228,47.26592],[7.45186,47.26589],[7.45195,47.2749],[7.46505,47.27493],[7.4651,47.28385],[7.47829,47.28385],[7.47834,47.29293],[7.49149,47.29289],[7.49162,47.30184],[7.5312,47.30181],[7.53129,47.31979],[7.54448,47.31985],[7.54453,47.3288],[7.55768,47.32883],[7.55768,47.33786],[7.53125,47.33786],[7.53133,47.35586],[7.51801,47.35583],[7.5181,47.36483],[7.43862,47.36492],[7.43867,47.37389],[7.42538,47.37395],[7.42543,47.40081],[7.38558,47.4009],[7.38567,47.4098],[7.35915,47.4098],[7.35915,47.41878],[7.37239,47.41884],[7.37247,47.43682],[7.38571,47.43682],[7.38571,47.44104],[7.39563,47.44016],[7.3963,47.44258],[7.40761,47.4411],[7.40793,47.44225],[7.40313,47.44246],[7.39738,47.44331],[7.39832,47.44583],[7.41214,47.44583],[7.41228,47.45478],[7.43867,47.45488],[7.4388,47.47053],[7.45007,47.46941],[7.45007,47.47223],[7.44647,47.47223],[7.44647,47.47381],[7.44293,47.4739],[7.44288,47.47553],[7.43921,47.4756],[7.43921,47.4772],[7.43557,47.47729],[7.43548,47.47899],[7.4174,47.47896],[7.41744,47.48573],[7.42099,47.48573],[7.42108,47.49082],[7.42763,47.49073],[7.42852,47.49349],[7.43099,47.49643],[7.43485,47.49889],[7.4419,47.49552],[7.44665,47.49455],[7.45011,47.49176],[7.45087,47.4907],[7.46451,47.49073],[7.46456,47.48903],[7.46819,47.489],[7.46819,47.48566],[7.47187,47.48573],[7.47192,47.48233],[7.48269,47.48239],[7.48264,47.48388],[7.48623,47.48397],[7.48637,47.48566],[7.48991,47.48566],[7.49,47.4907],[7.4997,47.49073],[7.49965,47.4914],[7.49175,47.49194],[7.49175,47.49513],[7.49822,47.49479],[7.49889,47.49585],[7.49566,47.49628],[7.49171,47.49625],[7.4918,47.49973],[7.50504,47.4997],[7.50504,47.50874],[7.5448,47.50871],[7.54474,47.45482],[7.49169,47.45469],[7.49175,47.44581],[7.46529,47.44577],[7.46522,47.40983],[7.49156,47.40979],[7.49175,47.39192],[7.50489,47.39183],[7.50489,47.40068],[7.51821,47.40077],[7.51834,47.41876],[7.55794,47.41872],[7.55813,47.44581],[7.58453,47.44572],[7.58441,47.43667],[7.61094,47.43662],[7.611,47.4637],[7.59767,47.4637],[7.59793,47.49964],[7.62433,47.49969],[7.62445,47.4906],[7.63778,47.49055],[7.63784,47.4996],[7.67757,47.49947],[7.67745,47.49047],[7.70385,47.49043],[7.70391,47.48146],[7.71711,47.48129],[7.71711,47.45452],[7.70397,47.45452],[7.70385,47.44559],[7.69046,47.44551],[7.69033,47.40957],[7.67713,47.40949],[7.67713,47.40068],[7.65066,47.40068],[7.65047,47.37365],[7.67706,47.37357],[7.67706,47.38251],[7.71667,47.38251],[7.71679,47.37344],[7.74307,47.3734],[7.74307,47.35538],[7.7562,47.35534],[7.75633,47.3464],[7.78261,47.34627],[7.78292,47.36433],[7.79612,47.36428],[7.79619,47.37327],[7.82265,47.37314],[7.82271,47.38229],[7.84912,47.38212],[7.84924,47.39106],[7.86251,47.39097],[7.86263,47.40906],[7.8759,47.40897],[7.87602,47.41803],[7.90242,47.41795],[7.90242,47.40897],[7.92889,47.4088],[7.92914,47.41782],[7.94215,47.41769],[7.94266,47.46276],[7.95592,47.46259],[7.95612,47.47164],[7.98239,47.47155],[7.98239,47.45353],[7.99553,47.45353],[7.99521,47.41747],[8.0218,47.41743],[8.02155,47.39935],[8.03456,47.39926],[8.03468,47.39028],[8.04788,47.39015],[8.04769,47.37224],[8.03456,47.37232],[8.03437,47.3544],[8.02117,47.35427],[8.02072,47.32739],[7.99445,47.32747],[7.99426,47.31857],[7.96773,47.31866],[7.96767,47.30966],[7.9412,47.30992],[7.94133,47.32778],[7.91486,47.32786],[7.91467,47.30988],[7.9016,47.31005],[7.9014,47.30097],[7.87501,47.3011],[7.87501,47.29223],[7.86165,47.29212],[7.86154,47.27409],[7.84843,47.27415],[7.8483,47.26523],[7.83502,47.2652],[7.83502,47.25624],[7.79535,47.25636],[7.7953,47.24741],[7.72924,47.24756],[7.72929,47.25652],[7.71623,47.25667],[7.71618,47.26559],[7.70304,47.26559],[7.70304,47.27461],[7.68975,47.27467],[7.68989,47.28368],[7.66341,47.28371],[7.66332,47.2747],[7.61055,47.27476],[7.61041,47.24787],[7.62352,47.24765],[7.62356,47.23879],[7.64986,47.23876],[7.64999,47.22977],[7.66305,47.22971],[7.6631,47.21178],[7.67621,47.21169],[7.67623,47.19372],[7.68938,47.19369],[7.68924,47.17572],[7.70243,47.1756],[7.70248,47.16663],[7.71567,47.16663],[7.71558,47.15769],[7.70239,47.15766],[7.70234,47.14869],[7.66267,47.14881],[7.66281,47.13978],[7.63633,47.1399],[7.63647,47.14869],[7.5968,47.14893],[7.59684,47.13996],[7.57041,47.13999],[7.57042,47.15792]]],terms_text:"Orthofoto WMS Solothurn",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/ch/KantonSolothurn-SOGIS-wms.png"},{id:"Solothurn-sogis2014-dom-wms",name:"Kanton Solothurn, DOM Relief 2014 50cm",type:"wms",template:"https://geo.so.ch/api/wms?LAYERS=ch.so.agi.lidar_2014.dom_relief&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[7.95595,47.47162],[7.98239,47.47155],[7.98239,47.45353],[7.99553,47.45353],[7.99521,47.41747],[8.0218,47.41743],[8.02155,47.39935],[8.03456,47.39926],[8.03468,47.39028],[8.04788,47.39022],[8.04769,47.37224],[8.03456,47.37232],[8.03437,47.3544],[8.02117,47.35427],[8.02072,47.32739],[7.99445,47.32747],[7.99426,47.31857],[7.96773,47.31866],[7.96767,47.30966],[7.94122,47.30978],[7.94133,47.32778],[7.91486,47.32786],[7.91467,47.30988],[7.9016,47.31005],[7.9014,47.30097],[7.87501,47.3011],[7.87501,47.29223],[7.86165,47.29212],[7.86154,47.27409],[7.84832,47.27416],[7.8483,47.26523],[7.83502,47.2652],[7.83502,47.25624],[7.79535,47.25636],[7.7953,47.24741],[7.72924,47.24756],[7.72929,47.25652],[7.71623,47.25667],[7.71618,47.26559],[7.70304,47.26559],[7.70304,47.27461],[7.68975,47.27467],[7.68989,47.28368],[7.66341,47.28371],[7.66332,47.2747],[7.61055,47.27476],[7.61041,47.24787],[7.62352,47.24777],[7.62356,47.23879],[7.64986,47.23876],[7.64999,47.22977],[7.6499,47.22083],[7.66308,47.22073],[7.6631,47.21178],[7.66297,47.20273],[7.67617,47.2027],[7.67623,47.19372],[7.68938,47.19369],[7.68924,47.17572],[7.70243,47.1756],[7.70234,47.14869],[7.66267,47.14881],[7.66281,47.13978],[7.63633,47.1399],[7.63647,47.14869],[7.5968,47.14893],[7.59684,47.13996],[7.57041,47.13999],[7.57042,47.15792],[7.55736,47.15795],[7.55732,47.14888],[7.54421,47.14895],[7.54417,47.13991],[7.53098,47.13991],[7.53095,47.13097],[7.51767,47.13097],[7.51765,47.12196],[7.51769,47.11292],[7.49131,47.11301],[7.49135,47.10403],[7.4782,47.104],[7.47813,47.07705],[7.46493,47.07708],[7.46498,47.06807],[7.42552,47.06801],[7.42543,47.08601],[7.37279,47.08598],[7.37288,47.10403],[7.3596,47.10403],[7.35955,47.131],[7.41228,47.131],[7.41223,47.14901],[7.42538,47.14901],[7.42552,47.15801],[7.3727,47.15796],[7.3727,47.18498],[7.34627,47.18492],[7.34636,47.20287],[7.33307,47.2029],[7.33307,47.22096],[7.34614,47.22096],[7.34614,47.22991],[7.37256,47.22991],[7.3727,47.2389],[7.399,47.23896],[7.39913,47.24792],[7.41228,47.24792],[7.41228,47.26592],[7.45186,47.26589],[7.45195,47.2749],[7.46505,47.27493],[7.4651,47.28385],[7.47829,47.28385],[7.47834,47.29293],[7.5046,47.29288],[7.50473,47.30183],[7.5312,47.30181],[7.53129,47.31979],[7.54448,47.31985],[7.54453,47.3288],[7.55768,47.32883],[7.55768,47.33786],[7.53125,47.33786],[7.53133,47.35586],[7.51801,47.35583],[7.5181,47.36483],[7.3988,47.36484],[7.39889,47.39182],[7.38564,47.39181],[7.38564,47.4008],[7.37234,47.4008],[7.37234,47.40978],[7.34584,47.40978],[7.34584,47.41878],[7.31925,47.41878],[7.31925,47.44578],[7.4121,47.44578],[7.4121,47.49078],[7.42535,47.49078],[7.42535,47.49981],[7.43856,47.49981],[7.43856,47.50876],[7.49177,47.50876],[7.49178,47.63468],[7.7845,47.63428],[7.78415,47.57123],[7.81074,47.57114],[7.81074,47.56216],[7.82395,47.56206],[7.82387,47.54414],[7.86368,47.54397],[7.86363,47.53498],[7.87679,47.53495],[7.87675,47.52599],[7.8901,47.52596],[7.89006,47.51695],[7.90319,47.51692],[7.9031,47.49886],[7.91649,47.49883],[7.91645,47.48976],[7.95612,47.48967],[7.95595,47.47162]]],terms_text:"DOM Relief 2014 - Auflösung 50cm, WMS Solothurn (SOGIS)"},{id:"Solothurn-sogis2014-dtm-wms",name:"Kanton Solothurn, DTM Relief 2014 50cm",type:"wms",template:"https://geo.so.ch/api/wms?LAYERS=ch.so.agi.lidar_2014.dtm_relief&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[7.95595,47.47162],[7.98239,47.47155],[7.98239,47.45353],[7.99553,47.45353],[7.99521,47.41747],[8.0218,47.41743],[8.02155,47.39935],[8.03456,47.39926],[8.03468,47.39028],[8.04788,47.39022],[8.04769,47.37224],[8.03456,47.37232],[8.03437,47.3544],[8.02117,47.35427],[8.02072,47.32739],[7.99445,47.32747],[7.99426,47.31857],[7.96773,47.31866],[7.96767,47.30966],[7.94122,47.30978],[7.94133,47.32778],[7.91486,47.32786],[7.91467,47.30988],[7.9016,47.31005],[7.9014,47.30097],[7.87501,47.3011],[7.87501,47.29223],[7.86165,47.29212],[7.86154,47.27409],[7.84832,47.27416],[7.8483,47.26523],[7.83502,47.2652],[7.83502,47.25624],[7.79535,47.25636],[7.7953,47.24741],[7.72924,47.24756],[7.72929,47.25652],[7.71623,47.25667],[7.71618,47.26559],[7.70304,47.26559],[7.70304,47.27461],[7.68975,47.27467],[7.68989,47.28368],[7.66341,47.28371],[7.66332,47.2747],[7.61055,47.27476],[7.61041,47.24787],[7.62352,47.24777],[7.62356,47.23879],[7.64986,47.23876],[7.64999,47.22977],[7.6499,47.22083],[7.66308,47.22073],[7.6631,47.21178],[7.66297,47.20273],[7.67617,47.2027],[7.67623,47.19372],[7.68938,47.19369],[7.68924,47.17572],[7.70243,47.1756],[7.70234,47.14869],[7.66267,47.14881],[7.66281,47.13978],[7.63633,47.1399],[7.63647,47.14869],[7.5968,47.14893],[7.59684,47.13996],[7.57041,47.13999],[7.57042,47.15792],[7.55736,47.15795],[7.55732,47.14888],[7.54421,47.14895],[7.54417,47.13991],[7.53098,47.13991],[7.53095,47.13097],[7.51767,47.13097],[7.51765,47.12196],[7.51769,47.11292],[7.49131,47.11301],[7.49135,47.10403],[7.4782,47.104],[7.47813,47.07705],[7.46493,47.07708],[7.46498,47.06807],[7.42552,47.06801],[7.42543,47.08601],[7.37279,47.08598],[7.37288,47.10403],[7.3596,47.10403],[7.35955,47.131],[7.41228,47.131],[7.41223,47.14901],[7.42538,47.14901],[7.42552,47.15801],[7.3727,47.15796],[7.3727,47.18498],[7.34627,47.18492],[7.34636,47.20287],[7.33307,47.2029],[7.33307,47.22096],[7.34614,47.22096],[7.34614,47.22991],[7.37256,47.22991],[7.3727,47.2389],[7.399,47.23896],[7.39913,47.24792],[7.41228,47.24792],[7.41228,47.26592],[7.45186,47.26589],[7.45195,47.2749],[7.46505,47.27493],[7.4651,47.28385],[7.47829,47.28385],[7.47834,47.29293],[7.5046,47.29288],[7.50473,47.30183],[7.5312,47.30181],[7.53129,47.31979],[7.54448,47.31985],[7.54453,47.3288],[7.55768,47.32883],[7.55768,47.33786],[7.53125,47.33786],[7.53133,47.35586],[7.51801,47.35583],[7.5181,47.36483],[7.3988,47.36484],[7.39889,47.39182],[7.38564,47.39181],[7.38564,47.4008],[7.37234,47.4008],[7.37234,47.40978],[7.34584,47.40978],[7.34584,47.41878],[7.31925,47.41878],[7.31925,47.44578],[7.4121,47.44578],[7.4121,47.49078],[7.42535,47.49078],[7.42535,47.49981],[7.43856,47.49981],[7.43856,47.50876],[7.49177,47.50876],[7.49178,47.63468],[7.7845,47.63428],[7.78415,47.57123],[7.81074,47.57114],[7.81074,47.56216],[7.82395,47.56206],[7.82387,47.54414],[7.86368,47.54397],[7.86363,47.53498],[7.87679,47.53495],[7.87675,47.52599],[7.8901,47.52596],[7.89006,47.51695],[7.90319,47.51692],[7.9031,47.49886],[7.91649,47.49883],[7.91645,47.48976],[7.95612,47.48967],[7.95595,47.47162]]],terms_text:"DTM Relief 2014 - Auflösung 50cm, WMS Solothurn (SOGIS)"},{id:"kt_tg_dtm_hillshade",name:"Kanton Thurgau Relief DTM",type:"wms",template:"https://ows-raster.geo.tg.ch/geofy_access_proxy/reliefschattierung?LAYERS=DTMRelief&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,21],polygon:[[[8.63768,47.70041],[8.78328,47.6988],[8.78304,47.68533],[8.87027,47.68427],[8.86997,47.6709],[8.89901,47.67047],[8.89867,47.65698],[8.9277,47.65661],[8.92828,47.67015],[8.95726,47.66973],[8.95774,47.68327],[9.19061,47.67994],[9.19027,47.66645],[9.21922,47.66603],[9.21899,47.65256],[9.24784,47.6521],[9.24747,47.63864],[9.3057,47.63765],[9.30526,47.6242],[9.33417,47.62371],[9.33348,47.59674],[9.39151,47.59577],[9.39114,47.58235],[9.42007,47.58176],[9.4186,47.54139],[9.44754,47.54084],[9.44717,47.5273],[9.47605,47.52681],[9.47519,47.49986],[9.50414,47.49935],[9.5031,47.47242],[9.41596,47.47392],[9.41554,47.46045],[9.3576,47.46141],[9.35818,47.47498],[9.32896,47.47534],[9.32864,47.46188],[9.18361,47.4642],[9.18411,47.47769],[9.15492,47.4781],[9.15466,47.46463],[9.06736,47.46583],[9.06718,47.45234],[9.09609,47.45193],[9.09582,47.43853],[9.06663,47.43883],[9.06642,47.42537],[9.00829,47.4262],[9.00714,47.38573],[8.97811,47.38616],[8.9774,47.35913],[8.9194,47.35989],[8.92032,47.38697],[8.89136,47.38725],[8.89286,47.44117],[8.86398,47.44149],[8.86604,47.52251],[8.80784,47.52317],[8.80894,47.56373],[8.77985,47.56403],[8.78024,47.57751],[8.72209,47.57814],[8.72337,47.63213],[8.6652,47.63273],[8.6658,47.6598],[8.63674,47.66],[8.63768,47.70041]]],terms_url:"https://opendata.swiss/dataset/reliefschattierung",terms_text:"Kanton Thurgau, DTM Relief 2014",description:"Digitale Repräsentation des Geländes"},{id:"kt_tg_av",name:"Kanton Thurgau, Basisplan-AV",type:"wms",template:"https://ows.geo.tg.ch/geofy_access_proxy/basisplanf?LAYERS=Basisplan_farbig&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",zoomExtent:[8,21],polygon:[[[8.63768,47.70041],[8.78328,47.6988],[8.78304,47.68533],[8.87027,47.68427],[8.86997,47.6709],[8.89901,47.67047],[8.89867,47.65698],[8.9277,47.65661],[8.92828,47.67015],[8.95726,47.66973],[8.95774,47.68327],[9.19061,47.67994],[9.19027,47.66645],[9.21922,47.66603],[9.21899,47.65256],[9.24784,47.6521],[9.24747,47.63864],[9.3057,47.63765],[9.30526,47.6242],[9.33417,47.62371],[9.33348,47.59674],[9.39151,47.59577],[9.39114,47.58235],[9.42007,47.58176],[9.4186,47.54139],[9.44754,47.54084],[9.44717,47.5273],[9.47605,47.52681],[9.47519,47.49986],[9.50414,47.49935],[9.5031,47.47242],[9.41596,47.47392],[9.41554,47.46045],[9.3576,47.46141],[9.35818,47.47498],[9.32896,47.47534],[9.32864,47.46188],[9.18361,47.4642],[9.18411,47.47769],[9.15492,47.4781],[9.15466,47.46463],[9.06736,47.46583],[9.06718,47.45234],[9.09609,47.45193],[9.09582,47.43853],[9.06663,47.43883],[9.06642,47.42537],[9.00829,47.4262],[9.00714,47.38573],[8.97811,47.38616],[8.9774,47.35913],[8.9194,47.35989],[8.92032,47.38697],[8.89136,47.38725],[8.89286,47.44117],[8.86398,47.44149],[8.86604,47.52251],[8.80784,47.52317],[8.80894,47.56373],[8.77985,47.56403],[8.78024,47.57751],[8.72209,47.57814],[8.72337,47.63213],[8.6652,47.63273],[8.6658,47.6598],[8.63674,47.66],[8.63768,47.70041]]],terms_url:"https://opendata.swiss/dataset/basisplan-av",terms_text:"Kanton Thurgau, Basisplan-AV",description:"Basisplan-AV des Kantons Thurgau farbig & schwarzweiss mit Liegenschaften, Nomenklatur, Landes-, Kantons- und Gemeindegrenzen, Einzelobjekten, Bodenbedeckung, Strassennamen, Höhenkurven und Geländemodell"},{id:"kt_tg_ortho_2017",name:"Kanton Thurgau, Orthofoto2017 RGB",type:"wms",template:"https://ows-raster.geo.tg.ch/geofy_access_proxy/orthofoto2017?LAYERS=Orthofoto2017_RGB&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[8,21],polygon:[[[8.63768,47.70041],[8.78328,47.6988],[8.78304,47.68533],[8.87027,47.68427],[8.86997,47.6709],[8.89901,47.67047],[8.89867,47.65698],[8.9277,47.65661],[8.92828,47.67015],[8.95726,47.66973],[8.95774,47.68327],[9.19061,47.67994],[9.19027,47.66645],[9.21922,47.66603],[9.21899,47.65256],[9.24784,47.6521],[9.24747,47.63864],[9.3057,47.63765],[9.30526,47.6242],[9.33417,47.62371],[9.33348,47.59674],[9.39151,47.59577],[9.39114,47.58235],[9.42007,47.58176],[9.4186,47.54139],[9.44754,47.54084],[9.44717,47.5273],[9.47605,47.52681],[9.47519,47.49986],[9.50414,47.49935],[9.5031,47.47242],[9.41596,47.47392],[9.41554,47.46045],[9.3576,47.46141],[9.35818,47.47498],[9.32896,47.47534],[9.32864,47.46188],[9.18361,47.4642],[9.18411,47.47769],[9.15492,47.4781],[9.15466,47.46463],[9.06736,47.46583],[9.06718,47.45234],[9.09609,47.45193],[9.09582,47.43853],[9.06663,47.43883],[9.06642,47.42537],[9.00829,47.4262],[9.00714,47.38573],[8.97811,47.38616],[8.9774,47.35913],[8.9194,47.35989],[8.92032,47.38697],[8.89136,47.38725],[8.89286,47.44117],[8.86398,47.44149],[8.86604,47.52251],[8.80784,47.52317],[8.80894,47.56373],[8.77985,47.56403],[8.78024,47.57751],[8.72209,47.57814],[8.72337,47.63213],[8.6652,47.63273],[8.6658,47.6598],[8.63674,47.66],[8.63768,47.70041]]],terms_url:"https://opendata.swiss/en/dataset/orthofoto-2017-dop17",terms_text:"Kanton Thurgau, Orthofoto2017 RGB",best:true,description:"Digitales multispektrales Orthofotomosaik des Kantons Thurgau"},{id:"kt_tg_radrouten",name:"Kanton Thurgau, Rad-Routen",type:"wms",template:"https://ows.geo.tg.ch/geofy_access_proxy/radwege?LAYERS=Radwege&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",zoomExtent:[8,21],polygon:[[[8.63768,47.70041],[8.78328,47.6988],[8.78304,47.68533],[8.87027,47.68427],[8.86997,47.6709],[8.89901,47.67047],[8.89867,47.65698],[8.9277,47.65661],[8.92828,47.67015],[8.95726,47.66973],[8.95774,47.68327],[9.19061,47.67994],[9.19027,47.66645],[9.21922,47.66603],[9.21899,47.65256],[9.24784,47.6521],[9.24747,47.63864],[9.3057,47.63765],[9.30526,47.6242],[9.33417,47.62371],[9.33348,47.59674],[9.39151,47.59577],[9.39114,47.58235],[9.42007,47.58176],[9.4186,47.54139],[9.44754,47.54084],[9.44717,47.5273],[9.47605,47.52681],[9.47519,47.49986],[9.50414,47.49935],[9.5031,47.47242],[9.41596,47.47392],[9.41554,47.46045],[9.3576,47.46141],[9.35818,47.47498],[9.32896,47.47534],[9.32864,47.46188],[9.18361,47.4642],[9.18411,47.47769],[9.15492,47.4781],[9.15466,47.46463],[9.06736,47.46583],[9.06718,47.45234],[9.09609,47.45193],[9.09582,47.43853],[9.06663,47.43883],[9.06642,47.42537],[9.00829,47.4262],[9.00714,47.38573],[8.97811,47.38616],[8.9774,47.35913],[8.9194,47.35989],[8.92032,47.38697],[8.89136,47.38725],[8.89286,47.44117],[8.86398,47.44149],[8.86604,47.52251],[8.80784,47.52317],[8.80894,47.56373],[8.77985,47.56403],[8.78024,47.57751],[8.72209,47.57814],[8.72337,47.63213],[8.6652,47.63273],[8.6658,47.6598],[8.63674,47.66],[8.63768,47.70041]]],terms_url:"https://opendata.swiss/dataset/rad-routen",terms_text:"Kanton Thurgau, Rad-Routen",description:"Langsamverkehr: Radweg-Netz (Routen) signalisiert durch Wegweiser"},{id:"kt_tg_ww",name:"Kanton Thurgau, Wanderwege",type:"wms",template:"https://ows.geo.tg.ch/geofy_access_proxy/wanderwege?LAYERS=Wanderwege&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",zoomExtent:[8,21],polygon:[[[8.63768,47.70041],[8.78328,47.6988],[8.78304,47.68533],[8.87027,47.68427],[8.86997,47.6709],[8.89901,47.67047],[8.89867,47.65698],[8.9277,47.65661],[8.92828,47.67015],[8.95726,47.66973],[8.95774,47.68327],[9.19061,47.67994],[9.19027,47.66645],[9.21922,47.66603],[9.21899,47.65256],[9.24784,47.6521],[9.24747,47.63864],[9.3057,47.63765],[9.30526,47.6242],[9.33417,47.62371],[9.33348,47.59674],[9.39151,47.59577],[9.39114,47.58235],[9.42007,47.58176],[9.4186,47.54139],[9.44754,47.54084],[9.44717,47.5273],[9.47605,47.52681],[9.47519,47.49986],[9.50414,47.49935],[9.5031,47.47242],[9.41596,47.47392],[9.41554,47.46045],[9.3576,47.46141],[9.35818,47.47498],[9.32896,47.47534],[9.32864,47.46188],[9.18361,47.4642],[9.18411,47.47769],[9.15492,47.4781],[9.15466,47.46463],[9.06736,47.46583],[9.06718,47.45234],[9.09609,47.45193],[9.09582,47.43853],[9.06663,47.43883],[9.06642,47.42537],[9.00829,47.4262],[9.00714,47.38573],[8.97811,47.38616],[8.9774,47.35913],[8.9194,47.35989],[8.92032,47.38697],[8.89136,47.38725],[8.89286,47.44117],[8.86398,47.44149],[8.86604,47.52251],[8.80784,47.52317],[8.80894,47.56373],[8.77985,47.56403],[8.78024,47.57751],[8.72209,47.57814],[8.72337,47.63213],[8.6652,47.63273],[8.6658,47.6598],[8.63674,47.66],[8.63768,47.70041]]],terms_url:"https://opendata.swiss/dataset/wanderwege",terms_text:"Kanton Thurgau, Wanderwege",description:"Langsamverkehr: Verlauf der Wanderwege mit symbolischer Darstellung der Wegweiser, Unterführungen, Treppen und Brücken. Informationen über die Wegoberfläche und Rollstuhlgängigkeit."},{id:"Zug-2011",name:"Kanton Zug 2011",type:"wms",template:"https://services.geo.zg.ch:443/ows/Orthofotos?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=zg.orthofoto_2011_kt_zg&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[10,21],polygon:[[[8.38726,47.10908],[8.38983,47.25303],[8.42944,47.25265],[8.42894,47.22567],[8.60057,47.22407],[8.60037,47.21507],[8.61357,47.21495],[8.61338,47.20594],[8.62658,47.20582],[8.62618,47.18783],[8.63934,47.18769],[8.63914,47.1787],[8.66555,47.17844],[8.66534,47.16943],[8.7049,47.16899],[8.70427,47.14203],[8.69105,47.14215],[8.69046,47.11516],[8.67731,47.1153],[8.67706,47.10634],[8.66389,47.10647],[8.66371,47.0975],[8.65052,47.09761],[8.65031,47.08863],[8.59764,47.08915],[8.59746,47.08015],[8.49204,47.0812],[8.49245,47.09917],[8.43969,47.09967],[8.43996,47.10863],[8.38726,47.10908]]],terms_text:"GIS Kanton Zug",best:true},{id:"Zug-2018",name:"Kanton Zug Gemeinde Zug Süd 2018",type:"wms",template:"https://services.geo.zg.ch:443/ows/Orthofotos?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=zg.orthofoto_2018_kt_zg&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[10,21],polygon:[[[8.50052,47.11291],[8.49638,47.11761],[8.49451,47.12364],[8.49538,47.12653],[8.50462,47.13724],[8.50322,47.13933],[8.50466,47.14722],[8.51099,47.15916],[8.56415,47.15299],[8.5652,47.14929],[8.54924,47.13843],[8.55098,47.12132],[8.50052,47.11291]]],terms_text:"GIS Kanton Zug",best:true},{id:"Zug-2016",name:"Kanton Zug Nord 2016",type:"wms",template:"https://services.geo.zg.ch:443/ows/Orthofotos?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=zg.orthofoto_2016_kt_zg&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[10,21],polygon:[[[8.41093,47.16521],[8.40759,47.16918],[8.40754,47.23725],[8.419,47.23722],[8.42336,47.22958],[8.43891,47.22945],[8.48056,47.2125],[8.5294,47.22688],[8.57951,47.22275],[8.57946,47.17083],[8.57535,47.14926],[8.56428,47.14944],[8.53594,47.15205],[8.50658,47.15268],[8.50686,47.162],[8.44723,47.16256],[8.41093,47.16521]]],terms_text:"GIS Kanton Zug",best:true},{id:"OGDLidarZH-DOM",name:"Kanton Zurich, Oberflächenschummerung 50cm",type:"wms",template:"https://wms.zh.ch/OGDLidarZH?FORMAT=image/jpeg&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap&LAYERS=dom2014hillshade&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[8.71338,47.21388],[8.7137,47.22737],[8.8117,47.22626],[8.80337,47.23858],[8.80866,47.2431],[8.82448,47.24656],[8.82971,47.24539],[8.83652,47.24257],[8.84568,47.24253],[8.84837,47.24322],[8.85232,47.24034],[8.86206,47.23882],[8.86472,47.23966],[8.86863,47.23968],[8.87339,47.24125],[8.87882,47.24476],[8.88054,47.24791],[8.89878,47.24976],[8.90281,47.25094],[8.91025,47.25003],[8.92735,47.25406],[8.93644,47.25499],[8.94233,47.25849],[8.94423,47.26173],[8.94882,47.26536],[8.95094,47.2686],[8.95068,47.27108],[8.953,47.27285],[8.95411,47.27505],[8.95504,47.28251],[8.95171,47.28527],[8.94664,47.28647],[8.95258,47.28844],[8.95454,47.28982],[8.96141,47.30098],[8.97552,47.30245],[8.98006,47.30416],[8.99153,47.31893],[8.99069,47.32183],[8.98637,47.32542],[8.98548,47.32778],[8.98364,47.32931],[8.98592,47.33815],[8.98464,47.34061],[8.98079,47.34237],[8.98088,47.34835],[8.97785,47.35437],[8.9759,47.35606],[8.97002,47.35843],[8.96572,47.3589],[8.96238,47.36252],[8.95665,47.37432],[8.9521,47.37836],[8.94778,47.37971],[8.95023,47.38346],[8.95018,47.38596],[8.9488,47.38836],[8.9397,47.39403],[8.93637,47.39496],[8.93251,47.39871],[8.92801,47.40148],[8.92278,47.4038],[8.91388,47.40569],[8.91924,47.41213],[8.92049,47.41915],[8.91829,47.42323],[8.92094,47.42544],[8.92107,47.42828],[8.92571,47.42695],[8.93437,47.42796],[8.93877,47.43173],[8.93974,47.43411],[8.93889,47.43725],[8.93511,47.43973],[8.92349,47.43953],[8.91973,47.44081],[8.91322,47.44119],[8.91162,47.44347],[8.91527,47.44628],[8.91499,47.45004],[8.91196,47.45378],[8.90517,47.45791],[8.90183,47.46435],[8.89735,47.46898],[8.89581,47.47219],[8.89135,47.4738],[8.89143,47.47821],[8.90142,47.48133],[8.90428,47.48449],[8.90314,47.48928],[8.90001,47.49187],[8.89967,47.49885],[8.90357,47.50404],[8.90413,47.50745],[8.90322,47.51948],[8.90497,47.52447],[8.90365,47.52691],[8.89982,47.52965],[8.88423,47.53392],[8.87883,47.53277],[8.87061,47.53477],[8.8602,47.53488],[8.85674,47.53594],[8.84782,47.5358],[8.84614,47.54087],[8.8403,47.54654],[8.83728,47.55278],[8.84275,47.5537],[8.84648,47.5562],[8.85269,47.55645],[8.8562,47.55792],[8.85775,47.56141],[8.85728,47.56489],[8.85511,47.56721],[8.85079,47.56818],[8.84763,47.57023],[8.84538,47.57061],[8.8448,47.57309],[8.84211,47.57513],[8.83326,47.57769],[8.82962,47.57778],[8.82661,47.57662],[8.82137,47.57756],[8.81432,47.57598],[8.81234,47.5778],[8.81222,47.58473],[8.81067,47.58639],[8.80812,47.58738],[8.76818,47.59674],[8.7543,47.59729],[8.75529,47.60108],[8.75416,47.60273],[8.74883,47.60588],[8.74829,47.60874],[8.7507,47.60981],[8.75255,47.61292],[8.75575,47.61217],[8.76102,47.61335],[8.78169,47.60634],[8.78165,47.60345],[8.78467,47.59993],[8.80168,47.5966],[8.80512,47.59686],[8.80895,47.59938],[8.81074,47.60981],[8.81866,47.61372],[8.82001,47.61526],[8.82089,47.62058],[8.82015,47.62415],[8.82415,47.6256],[8.83079,47.63206],[8.83448,47.64099],[8.83182,47.64945],[8.82695,47.65206],[8.81168,47.65599],[8.81112,47.6621],[8.81192,47.66454],[8.81041,47.66752],[8.80881,47.66857],[8.80293,47.66978],[8.79299,47.66919],[8.78685,47.66978],[8.78453,47.66899],[8.78216,47.66659],[8.77921,47.65695],[8.77763,47.65563],[8.77398,47.65435],[8.76623,47.65438],[8.76108,47.65257],[8.75852,47.65033],[8.75464,47.64883],[8.7534,47.64733],[8.74839,47.64613],[8.74329,47.64749],[8.73882,47.64651],[8.72376,47.64753],[8.72063,47.64664],[8.71492,47.64885],[8.70826,47.64764],[8.70481,47.65039],[8.70053,47.65199],[8.69427,47.65307],[8.69242,47.65581],[8.68632,47.66094],[8.68485,47.66413],[8.68574,47.66799],[8.68326,47.67315],[8.68056,47.67561],[8.67521,47.6776],[8.67642,47.68177],[8.67561,47.68661],[8.67427,47.68799],[8.67227,47.68891],[8.66273,47.69029],[8.64644,47.69847],[8.63968,47.69877],[8.6355,47.69743],[8.62162,47.69554],[8.61818,47.69279],[8.61744,47.69087],[8.62007,47.68134],[8.61478,47.68308],[8.60917,47.68188],[8.60199,47.67451],[8.59954,47.66923],[8.60275,47.66132],[8.60979,47.6568],[8.6141,47.6564],[8.61574,47.65557],[8.62231,47.65104],[8.62227,47.65024],[8.62048,47.64758],[8.61939,47.65043],[8.61521,47.65452],[8.6093,47.65677],[8.60324,47.65654],[8.60069,47.65541],[8.59788,47.65276],[8.59645,47.64876],[8.59092,47.64623],[8.58937,47.6444],[8.58874,47.63936],[8.59116,47.62755],[8.59325,47.62233],[8.59838,47.61587],[8.59854,47.6145],[8.59114,47.60917],[8.58937,47.60682],[8.58796,47.60319],[8.58788,47.59909],[8.58203,47.59793],[8.57398,47.59329],[8.57146,47.58988],[8.57035,47.58633],[8.57203,47.57985],[8.56771,47.57799],[8.56506,47.57524],[8.56117,47.56407],[8.55707,47.55947],[8.55616,47.56336],[8.55206,47.56904],[8.55334,47.57146],[8.5526,47.57599],[8.55007,47.57806],[8.54666,47.57923],[8.5435,47.58228],[8.54319,47.5851],[8.54888,47.5879],[8.55175,47.58777],[8.55764,47.58963],[8.56114,47.59151],[8.56265,47.5946],[8.56668,47.59565],[8.56902,47.59748],[8.56953,47.60049],[8.57237,47.60386],[8.57308,47.60641],[8.57562,47.60676],[8.579,47.60845],[8.58076,47.61031],[8.58125,47.61203],[8.58025,47.61456],[8.57712,47.61636],[8.57525,47.61957],[8.57277,47.6211],[8.56785,47.62164],[8.56341,47.62697],[8.56105,47.62838],[8.54803,47.62998],[8.54558,47.63122],[8.54498,47.63297],[8.54288,47.63458],[8.53995,47.63565],[8.52769,47.63634],[8.52112,47.63887],[8.51478,47.6385],[8.50932,47.63559],[8.50829,47.62942],[8.50161,47.62597],[8.5007,47.62421],[8.50149,47.62154],[8.49253,47.61893],[8.48884,47.61953],[8.47669,47.61937],[8.47439,47.61838],[8.47154,47.61495],[8.47129,47.61307],[8.46785,47.61272],[8.46446,47.61109],[8.46173,47.60659],[8.45519,47.60676],[8.45061,47.60411],[8.4499,47.60164],[8.4507,47.59584],[8.45382,47.59343],[8.45428,47.5866],[8.4563,47.5848],[8.46014,47.58382],[8.46332,47.58044],[8.46881,47.5795],[8.46219,47.57653],[8.45419,47.57668],[8.43642,47.57154],[8.43161,47.57102],[8.42476,47.57231],[8.41477,47.56879],[8.41304,47.56745],[8.41034,47.56194],[8.41039,47.55972],[8.40789,47.55465],[8.40846,47.55018],[8.39964,47.54444],[8.39609,47.543],[8.39469,47.54094],[8.39495,47.53674],[8.39136,47.53568],[8.38835,47.53305],[8.38525,47.53316],[8.38113,47.53219],[8.3774,47.52969],[8.37518,47.52679],[8.37279,47.51651],[8.36579,47.51663],[8.35666,47.51348],[8.35439,47.51104],[8.35103,47.50314],[8.3524,47.49957],[8.35163,47.4973],[8.35274,47.49484],[8.3545,47.49355],[8.3557,47.48979],[8.35533,47.48525],[8.35698,47.47931],[8.35891,47.47743],[8.36187,47.47645],[8.36722,47.47654],[8.36702,47.47487],[8.36073,47.47222],[8.35903,47.46604],[8.35996,47.46381],[8.36326,47.46204],[8.3673,47.45653],[8.36975,47.45504],[8.37393,47.45472],[8.37754,47.45201],[8.37583,47.45068],[8.37441,47.44614],[8.37623,47.43818],[8.37168,47.43675],[8.36855,47.43406],[8.3681,47.43158],[8.36904,47.42863],[8.37222,47.42603],[8.38283,47.42346],[8.38371,47.42251],[8.38073,47.42207],[8.37555,47.4178],[8.37598,47.41378],[8.37441,47.40906],[8.36067,47.40664],[8.35789,47.40542],[8.35629,47.40377],[8.35661,47.39961],[8.36195,47.39516],[8.36577,47.39429],[8.37601,47.3947],[8.37743,47.39218],[8.38036,47.39048],[8.38761,47.39035],[8.38832,47.38012],[8.39034,47.37527],[8.39355,47.3719],[8.39387,47.36945],[8.39574,47.3671],[8.39902,47.36608],[8.39836,47.36408],[8.40012,47.36094],[8.40103,47.35433],[8.39728,47.34677],[8.39779,47.34475],[8.40186,47.3391],[8.40931,47.33409],[8.4061,47.32975],[8.40578,47.32667],[8.40689,47.32447],[8.41295,47.3205],[8.41611,47.31996],[8.42948,47.32227],[8.43556,47.32083],[8.43437,47.31954],[8.43155,47.31851],[8.42609,47.31375],[8.42276,47.30706],[8.42311,47.30368],[8.41745,47.3015],[8.41372,47.29824],[8.40012,47.29564],[8.39768,47.29392],[8.39518,47.29516],[8.39108,47.29552],[8.38602,47.29437],[8.38272,47.29225],[8.38198,47.29034],[8.38255,47.2881],[8.38508,47.28565],[8.38977,47.27507],[8.39563,47.271],[8.39407,47.26672],[8.39415,47.26361],[8.39756,47.25986],[8.39614,47.25481],[8.39742,47.25189],[8.40647,47.24452],[8.40826,47.24118],[8.40761,47.23957],[8.4096,47.23585],[8.41073,47.22799],[8.41248,47.22433],[8.41695,47.22014],[8.41959,47.21902],[8.42269,47.21886],[8.42977,47.22],[8.43936,47.21937],[8.45,47.21363],[8.4546,47.21334],[8.45625,47.21081],[8.4591,47.20934],[8.46447,47.20928],[8.46609,47.20862],[8.46868,47.20533],[8.47329,47.20398],[8.47693,47.20458],[8.48399,47.20392],[8.49489,47.20738],[8.504,47.20768],[8.51538,47.21152],[8.51753,47.21271],[8.51906,47.21495],[8.5306,47.21306],[8.53307,47.21325],[8.5415,47.21778],[8.54456,47.21707],[8.55407,47.21726],[8.55858,47.21517],[8.56984,47.2139],[8.57491,47.21255],[8.57749,47.20771],[8.58044,47.2064],[8.58408,47.20603],[8.59012,47.20714],[8.58965,47.2046],[8.59074,47.20195],[8.59358,47.1986],[8.59581,47.19753],[8.60168,47.19722],[8.60653,47.1992],[8.60725,47.19885],[8.61097,47.19387],[8.61128,47.19059],[8.61391,47.18838],[8.61522,47.18515],[8.61938,47.18045],[8.61976,47.17918],[8.61721,47.17359],[8.6196,47.1698],[8.62292,47.16821],[8.6339,47.16715],[8.63561,47.16578],[8.63965,47.16459],[8.64287,47.16443],[8.65216,47.16598],[8.65425,47.16552],[8.6549,47.15967],[8.65649,47.15783],[8.65882,47.15658],[8.66853,47.15492],[8.67847,47.15558],[8.68241,47.15759],[8.69361,47.15898],[8.69804,47.16134],[8.69886,47.16303],[8.6977,47.17033],[8.69599,47.17232],[8.68919,47.17566],[8.6872,47.17959],[8.6879,47.18229],[8.69186,47.18485],[8.69824,47.19205],[8.70323,47.19326],[8.70852,47.19602],[8.71423,47.19693],[8.71692,47.19893],[8.74212,47.2071],[8.74218,47.21355],[8.71338,47.21388]]],terms_text:"Geographisches Informationssystem des Kantons Zürich (GIS-ZH), Oberflächenschummerung"},{id:"OGDOrthoZH2016",name:"Kanton Zurich, Orthofoto ZH Frühjahr 2015/16 RGB 10cm",type:"wms",template:"https://wms.zh.ch/OGDOrthoZH?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&LAYERS=ortho_w_15&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[8.71338,47.21388],[8.7137,47.22737],[8.8117,47.22626],[8.80337,47.23858],[8.80866,47.2431],[8.82448,47.24656],[8.82971,47.24539],[8.83652,47.24257],[8.84568,47.24253],[8.84837,47.24322],[8.85232,47.24034],[8.86206,47.23882],[8.86472,47.23966],[8.86863,47.23968],[8.87339,47.24125],[8.87882,47.24476],[8.88054,47.24791],[8.89878,47.24976],[8.90281,47.25094],[8.91025,47.25003],[8.92735,47.25406],[8.93644,47.25499],[8.94233,47.25849],[8.94423,47.26173],[8.94882,47.26536],[8.95094,47.2686],[8.95068,47.27108],[8.953,47.27285],[8.95411,47.27505],[8.95504,47.28251],[8.95171,47.28527],[8.94664,47.28647],[8.95258,47.28844],[8.95454,47.28982],[8.96141,47.30098],[8.97552,47.30245],[8.98006,47.30416],[8.99153,47.31893],[8.99069,47.32183],[8.98637,47.32542],[8.98548,47.32778],[8.98364,47.32931],[8.98592,47.33815],[8.98464,47.34061],[8.98079,47.34237],[8.98088,47.34835],[8.97785,47.35437],[8.9759,47.35606],[8.97002,47.35843],[8.96572,47.3589],[8.96238,47.36252],[8.95665,47.37432],[8.9521,47.37836],[8.94778,47.37971],[8.95023,47.38346],[8.95018,47.38596],[8.9488,47.38836],[8.9397,47.39403],[8.93637,47.39496],[8.93251,47.39871],[8.92801,47.40148],[8.92278,47.4038],[8.91388,47.40569],[8.91924,47.41213],[8.92049,47.41915],[8.91829,47.42323],[8.92094,47.42544],[8.92107,47.42828],[8.92571,47.42695],[8.93437,47.42796],[8.93877,47.43173],[8.93974,47.43411],[8.93889,47.43725],[8.93511,47.43973],[8.92349,47.43953],[8.91973,47.44081],[8.91322,47.44119],[8.91162,47.44347],[8.91527,47.44628],[8.91499,47.45004],[8.91196,47.45378],[8.90517,47.45791],[8.90183,47.46435],[8.89735,47.46898],[8.89581,47.47219],[8.89135,47.4738],[8.89143,47.47821],[8.90142,47.48133],[8.90428,47.48449],[8.90314,47.48928],[8.90001,47.49187],[8.89967,47.49885],[8.90357,47.50404],[8.90413,47.50745],[8.90322,47.51948],[8.90497,47.52447],[8.90365,47.52691],[8.89982,47.52965],[8.88423,47.53392],[8.87883,47.53277],[8.87061,47.53477],[8.8602,47.53488],[8.85674,47.53594],[8.84782,47.5358],[8.84614,47.54087],[8.8403,47.54654],[8.83728,47.55278],[8.84275,47.5537],[8.84648,47.5562],[8.85269,47.55645],[8.8562,47.55792],[8.85775,47.56141],[8.85728,47.56489],[8.85511,47.56721],[8.85079,47.56818],[8.84763,47.57023],[8.84538,47.57061],[8.8448,47.57309],[8.84211,47.57513],[8.83326,47.57769],[8.82962,47.57778],[8.82661,47.57662],[8.82137,47.57756],[8.81432,47.57598],[8.81234,47.5778],[8.81222,47.58473],[8.81067,47.58639],[8.80812,47.58738],[8.76818,47.59674],[8.7543,47.59729],[8.75529,47.60108],[8.75416,47.60273],[8.74883,47.60588],[8.74829,47.60874],[8.7507,47.60981],[8.75255,47.61292],[8.75575,47.61217],[8.76102,47.61335],[8.78169,47.60634],[8.78165,47.60345],[8.78467,47.59993],[8.80168,47.5966],[8.80512,47.59686],[8.80895,47.59938],[8.81074,47.60981],[8.81866,47.61372],[8.82001,47.61526],[8.82089,47.62058],[8.82015,47.62415],[8.82415,47.6256],[8.83079,47.63206],[8.83448,47.64099],[8.83182,47.64945],[8.82695,47.65206],[8.81168,47.65599],[8.81112,47.6621],[8.81192,47.66454],[8.81041,47.66752],[8.80881,47.66857],[8.80293,47.66978],[8.79299,47.66919],[8.78685,47.66978],[8.78453,47.66899],[8.78216,47.66659],[8.77921,47.65695],[8.77763,47.65563],[8.77398,47.65435],[8.76623,47.65438],[8.76108,47.65257],[8.75852,47.65033],[8.75464,47.64883],[8.7534,47.64733],[8.74839,47.64613],[8.74329,47.64749],[8.73882,47.64651],[8.72376,47.64753],[8.72063,47.64664],[8.71492,47.64885],[8.70826,47.64764],[8.70481,47.65039],[8.70053,47.65199],[8.69427,47.65307],[8.69242,47.65581],[8.68632,47.66094],[8.68485,47.66413],[8.68574,47.66799],[8.68326,47.67315],[8.68056,47.67561],[8.67521,47.6776],[8.67642,47.68177],[8.67561,47.68661],[8.67427,47.68799],[8.67227,47.68891],[8.66273,47.69029],[8.64644,47.69847],[8.63968,47.69877],[8.6355,47.69743],[8.62162,47.69554],[8.61818,47.69279],[8.61744,47.69087],[8.62007,47.68134],[8.61478,47.68308],[8.60917,47.68188],[8.60199,47.67451],[8.59954,47.66923],[8.60275,47.66132],[8.60979,47.6568],[8.6141,47.6564],[8.61574,47.65557],[8.62231,47.65104],[8.62227,47.65024],[8.62048,47.64758],[8.61939,47.65043],[8.61521,47.65452],[8.6093,47.65677],[8.60324,47.65654],[8.60069,47.65541],[8.59788,47.65276],[8.59645,47.64876],[8.59092,47.64623],[8.58937,47.6444],[8.58874,47.63936],[8.59116,47.62755],[8.59325,47.62233],[8.59838,47.61587],[8.59854,47.6145],[8.59114,47.60917],[8.58937,47.60682],[8.58796,47.60319],[8.58788,47.59909],[8.58203,47.59793],[8.57398,47.59329],[8.57146,47.58988],[8.57035,47.58633],[8.57203,47.57985],[8.56771,47.57799],[8.56506,47.57524],[8.56117,47.56407],[8.55707,47.55947],[8.55616,47.56336],[8.55206,47.56904],[8.55334,47.57146],[8.5526,47.57599],[8.55007,47.57806],[8.54666,47.57923],[8.5435,47.58228],[8.54319,47.5851],[8.54888,47.5879],[8.55175,47.58777],[8.55764,47.58963],[8.56114,47.59151],[8.56265,47.5946],[8.56668,47.59565],[8.56902,47.59748],[8.56953,47.60049],[8.57237,47.60386],[8.57308,47.60641],[8.57562,47.60676],[8.579,47.60845],[8.58076,47.61031],[8.58125,47.61203],[8.58025,47.61456],[8.57712,47.61636],[8.57525,47.61957],[8.57277,47.6211],[8.56785,47.62164],[8.56341,47.62697],[8.56105,47.62838],[8.54803,47.62998],[8.54558,47.63122],[8.54498,47.63297],[8.54288,47.63458],[8.53995,47.63565],[8.52769,47.63634],[8.52112,47.63887],[8.51478,47.6385],[8.50932,47.63559],[8.50829,47.62942],[8.50161,47.62597],[8.5007,47.62421],[8.50149,47.62154],[8.49253,47.61893],[8.48884,47.61953],[8.47669,47.61937],[8.47439,47.61838],[8.47154,47.61495],[8.47129,47.61307],[8.46785,47.61272],[8.46446,47.61109],[8.46173,47.60659],[8.45519,47.60676],[8.45061,47.60411],[8.4499,47.60164],[8.4507,47.59584],[8.45382,47.59343],[8.45428,47.5866],[8.4563,47.5848],[8.46014,47.58382],[8.46332,47.58044],[8.46881,47.5795],[8.46219,47.57653],[8.45419,47.57668],[8.43642,47.57154],[8.43161,47.57102],[8.42476,47.57231],[8.41477,47.56879],[8.41304,47.56745],[8.41034,47.56194],[8.41039,47.55972],[8.40789,47.55465],[8.40846,47.55018],[8.39964,47.54444],[8.39609,47.543],[8.39469,47.54094],[8.39495,47.53674],[8.39136,47.53568],[8.38835,47.53305],[8.38525,47.53316],[8.38113,47.53219],[8.3774,47.52969],[8.37518,47.52679],[8.37279,47.51651],[8.36579,47.51663],[8.35666,47.51348],[8.35439,47.51104],[8.35103,47.50314],[8.3524,47.49957],[8.35163,47.4973],[8.35274,47.49484],[8.3545,47.49355],[8.3557,47.48979],[8.35533,47.48525],[8.35698,47.47931],[8.35891,47.47743],[8.36187,47.47645],[8.36722,47.47654],[8.36702,47.47487],[8.36073,47.47222],[8.35903,47.46604],[8.35996,47.46381],[8.36326,47.46204],[8.3673,47.45653],[8.36975,47.45504],[8.37393,47.45472],[8.37754,47.45201],[8.37583,47.45068],[8.37441,47.44614],[8.37623,47.43818],[8.37168,47.43675],[8.36855,47.43406],[8.3681,47.43158],[8.36904,47.42863],[8.37222,47.42603],[8.38283,47.42346],[8.38371,47.42251],[8.38073,47.42207],[8.37555,47.4178],[8.37598,47.41378],[8.37441,47.40906],[8.36067,47.40664],[8.35789,47.40542],[8.35629,47.40377],[8.35661,47.39961],[8.36195,47.39516],[8.36577,47.39429],[8.37601,47.3947],[8.37743,47.39218],[8.38036,47.39048],[8.38761,47.39035],[8.38832,47.38012],[8.39034,47.37527],[8.39355,47.3719],[8.39387,47.36945],[8.39574,47.3671],[8.39902,47.36608],[8.39836,47.36408],[8.40012,47.36094],[8.40103,47.35433],[8.39728,47.34677],[8.39779,47.34475],[8.40186,47.3391],[8.40931,47.33409],[8.4061,47.32975],[8.40578,47.32667],[8.40689,47.32447],[8.41295,47.3205],[8.41611,47.31996],[8.42948,47.32227],[8.43556,47.32083],[8.43437,47.31954],[8.43155,47.31851],[8.42609,47.31375],[8.42276,47.30706],[8.42311,47.30368],[8.41745,47.3015],[8.41372,47.29824],[8.40012,47.29564],[8.39768,47.29392],[8.39518,47.29516],[8.39108,47.29552],[8.38602,47.29437],[8.38272,47.29225],[8.38198,47.29034],[8.38255,47.2881],[8.38508,47.28565],[8.38977,47.27507],[8.39563,47.271],[8.39407,47.26672],[8.39415,47.26361],[8.39756,47.25986],[8.39614,47.25481],[8.39742,47.25189],[8.40647,47.24452],[8.40826,47.24118],[8.40761,47.23957],[8.4096,47.23585],[8.41073,47.22799],[8.41248,47.22433],[8.41695,47.22014],[8.41959,47.21902],[8.42269,47.21886],[8.42977,47.22],[8.43936,47.21937],[8.45,47.21363],[8.4546,47.21334],[8.45625,47.21081],[8.4591,47.20934],[8.46447,47.20928],[8.46609,47.20862],[8.46868,47.20533],[8.47329,47.20398],[8.47693,47.20458],[8.48399,47.20392],[8.49489,47.20738],[8.504,47.20768],[8.51538,47.21152],[8.51753,47.21271],[8.51906,47.21495],[8.5306,47.21306],[8.53307,47.21325],[8.5415,47.21778],[8.54456,47.21707],[8.55407,47.21726],[8.55858,47.21517],[8.56984,47.2139],[8.57491,47.21255],[8.57749,47.20771],[8.58044,47.2064],[8.58408,47.20603],[8.59012,47.20714],[8.58965,47.2046],[8.59074,47.20195],[8.59358,47.1986],[8.59581,47.19753],[8.60168,47.19722],[8.60653,47.1992],[8.60725,47.19885],[8.61097,47.19387],[8.61128,47.19059],[8.61391,47.18838],[8.61522,47.18515],[8.61938,47.18045],[8.61976,47.17918],[8.61721,47.17359],[8.6196,47.1698],[8.62292,47.16821],[8.6339,47.16715],[8.63561,47.16578],[8.63965,47.16459],[8.64287,47.16443],[8.65216,47.16598],[8.65425,47.16552],[8.6549,47.15967],[8.65649,47.15783],[8.65882,47.15658],[8.66853,47.15492],[8.67847,47.15558],[8.68241,47.15759],[8.69361,47.15898],[8.69804,47.16134],[8.69886,47.16303],[8.6977,47.17033],[8.69599,47.17232],[8.68919,47.17566],[8.6872,47.17959],[8.6879,47.18229],[8.69186,47.18485],[8.69824,47.19205],[8.70323,47.19326],[8.70852,47.19602],[8.71423,47.19693],[8.71692,47.19893],[8.74212,47.2071],[8.74218,47.21355],[8.71338,47.21388]]],terms_text:"Geographisches Informationssystem des Kantons Zürich (GIS-ZH), Orthofoto ZH Frühjahr 2015/16 RGB"},{id:"OGDOrthoZH2015",name:"Kanton Zurich, Orthofoto ZH Sommer 2014/15 RGB 10cm",type:"wms",template:"https://wms.zh.ch/OGDOrthoZH?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&LAYERS=ortho_s_14&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[8.71338,47.21388],[8.7137,47.22737],[8.8117,47.22626],[8.80337,47.23858],[8.80866,47.2431],[8.82448,47.24656],[8.82971,47.24539],[8.83652,47.24257],[8.84568,47.24253],[8.84837,47.24322],[8.85232,47.24034],[8.86206,47.23882],[8.86472,47.23966],[8.86863,47.23968],[8.87339,47.24125],[8.87882,47.24476],[8.88054,47.24791],[8.89878,47.24976],[8.90281,47.25094],[8.91025,47.25003],[8.92735,47.25406],[8.93644,47.25499],[8.94233,47.25849],[8.94423,47.26173],[8.94882,47.26536],[8.95094,47.2686],[8.95068,47.27108],[8.953,47.27285],[8.95411,47.27505],[8.95504,47.28251],[8.95171,47.28527],[8.94664,47.28647],[8.95258,47.28844],[8.95454,47.28982],[8.96141,47.30098],[8.97552,47.30245],[8.98006,47.30416],[8.99153,47.31893],[8.99069,47.32183],[8.98637,47.32542],[8.98548,47.32778],[8.98364,47.32931],[8.98592,47.33815],[8.98464,47.34061],[8.98079,47.34237],[8.98088,47.34835],[8.97785,47.35437],[8.9759,47.35606],[8.97002,47.35843],[8.96572,47.3589],[8.96238,47.36252],[8.95665,47.37432],[8.9521,47.37836],[8.94778,47.37971],[8.95023,47.38346],[8.95018,47.38596],[8.9488,47.38836],[8.9397,47.39403],[8.93637,47.39496],[8.93251,47.39871],[8.92801,47.40148],[8.92278,47.4038],[8.91388,47.40569],[8.91924,47.41213],[8.92049,47.41915],[8.91829,47.42323],[8.92094,47.42544],[8.92107,47.42828],[8.92571,47.42695],[8.93437,47.42796],[8.93877,47.43173],[8.93974,47.43411],[8.93889,47.43725],[8.93511,47.43973],[8.92349,47.43953],[8.91973,47.44081],[8.91322,47.44119],[8.91162,47.44347],[8.91527,47.44628],[8.91499,47.45004],[8.91196,47.45378],[8.90517,47.45791],[8.90183,47.46435],[8.89735,47.46898],[8.89581,47.47219],[8.89135,47.4738],[8.89143,47.47821],[8.90142,47.48133],[8.90428,47.48449],[8.90314,47.48928],[8.90001,47.49187],[8.89967,47.49885],[8.90357,47.50404],[8.90413,47.50745],[8.90322,47.51948],[8.90497,47.52447],[8.90365,47.52691],[8.89982,47.52965],[8.88423,47.53392],[8.87883,47.53277],[8.87061,47.53477],[8.8602,47.53488],[8.85674,47.53594],[8.84782,47.5358],[8.84614,47.54087],[8.8403,47.54654],[8.83728,47.55278],[8.84275,47.5537],[8.84648,47.5562],[8.85269,47.55645],[8.8562,47.55792],[8.85775,47.56141],[8.85728,47.56489],[8.85511,47.56721],[8.85079,47.56818],[8.84763,47.57023],[8.84538,47.57061],[8.8448,47.57309],[8.84211,47.57513],[8.83326,47.57769],[8.82962,47.57778],[8.82661,47.57662],[8.82137,47.57756],[8.81432,47.57598],[8.81234,47.5778],[8.81222,47.58473],[8.81067,47.58639],[8.80812,47.58738],[8.76818,47.59674],[8.7543,47.59729],[8.75529,47.60108],[8.75416,47.60273],[8.74883,47.60588],[8.74829,47.60874],[8.7507,47.60981],[8.75255,47.61292],[8.75575,47.61217],[8.76102,47.61335],[8.78169,47.60634],[8.78165,47.60345],[8.78467,47.59993],[8.80168,47.5966],[8.80512,47.59686],[8.80895,47.59938],[8.81074,47.60981],[8.81866,47.61372],[8.82001,47.61526],[8.82089,47.62058],[8.82015,47.62415],[8.82415,47.6256],[8.83079,47.63206],[8.83448,47.64099],[8.83182,47.64945],[8.82695,47.65206],[8.81168,47.65599],[8.81112,47.6621],[8.81192,47.66454],[8.81041,47.66752],[8.80881,47.66857],[8.80293,47.66978],[8.79299,47.66919],[8.78685,47.66978],[8.78453,47.66899],[8.78216,47.66659],[8.77921,47.65695],[8.77763,47.65563],[8.77398,47.65435],[8.76623,47.65438],[8.76108,47.65257],[8.75852,47.65033],[8.75464,47.64883],[8.7534,47.64733],[8.74839,47.64613],[8.74329,47.64749],[8.73882,47.64651],[8.72376,47.64753],[8.72063,47.64664],[8.71492,47.64885],[8.70826,47.64764],[8.70481,47.65039],[8.70053,47.65199],[8.69427,47.65307],[8.69242,47.65581],[8.68632,47.66094],[8.68485,47.66413],[8.68574,47.66799],[8.68326,47.67315],[8.68056,47.67561],[8.67521,47.6776],[8.67642,47.68177],[8.67561,47.68661],[8.67427,47.68799],[8.67227,47.68891],[8.66273,47.69029],[8.64644,47.69847],[8.63968,47.69877],[8.6355,47.69743],[8.62162,47.69554],[8.61818,47.69279],[8.61744,47.69087],[8.62007,47.68134],[8.61478,47.68308],[8.60917,47.68188],[8.60199,47.67451],[8.59954,47.66923],[8.60275,47.66132],[8.60979,47.6568],[8.6141,47.6564],[8.61574,47.65557],[8.62231,47.65104],[8.62227,47.65024],[8.62048,47.64758],[8.61939,47.65043],[8.61521,47.65452],[8.6093,47.65677],[8.60324,47.65654],[8.60069,47.65541],[8.59788,47.65276],[8.59645,47.64876],[8.59092,47.64623],[8.58937,47.6444],[8.58874,47.63936],[8.59116,47.62755],[8.59325,47.62233],[8.59838,47.61587],[8.59854,47.6145],[8.59114,47.60917],[8.58937,47.60682],[8.58796,47.60319],[8.58788,47.59909],[8.58203,47.59793],[8.57398,47.59329],[8.57146,47.58988],[8.57035,47.58633],[8.57203,47.57985],[8.56771,47.57799],[8.56506,47.57524],[8.56117,47.56407],[8.55707,47.55947],[8.55616,47.56336],[8.55206,47.56904],[8.55334,47.57146],[8.5526,47.57599],[8.55007,47.57806],[8.54666,47.57923],[8.5435,47.58228],[8.54319,47.5851],[8.54888,47.5879],[8.55175,47.58777],[8.55764,47.58963],[8.56114,47.59151],[8.56265,47.5946],[8.56668,47.59565],[8.56902,47.59748],[8.56953,47.60049],[8.57237,47.60386],[8.57308,47.60641],[8.57562,47.60676],[8.579,47.60845],[8.58076,47.61031],[8.58125,47.61203],[8.58025,47.61456],[8.57712,47.61636],[8.57525,47.61957],[8.57277,47.6211],[8.56785,47.62164],[8.56341,47.62697],[8.56105,47.62838],[8.54803,47.62998],[8.54558,47.63122],[8.54498,47.63297],[8.54288,47.63458],[8.53995,47.63565],[8.52769,47.63634],[8.52112,47.63887],[8.51478,47.6385],[8.50932,47.63559],[8.50829,47.62942],[8.50161,47.62597],[8.5007,47.62421],[8.50149,47.62154],[8.49253,47.61893],[8.48884,47.61953],[8.47669,47.61937],[8.47439,47.61838],[8.47154,47.61495],[8.47129,47.61307],[8.46785,47.61272],[8.46446,47.61109],[8.46173,47.60659],[8.45519,47.60676],[8.45061,47.60411],[8.4499,47.60164],[8.4507,47.59584],[8.45382,47.59343],[8.45428,47.5866],[8.4563,47.5848],[8.46014,47.58382],[8.46332,47.58044],[8.46881,47.5795],[8.46219,47.57653],[8.45419,47.57668],[8.43642,47.57154],[8.43161,47.57102],[8.42476,47.57231],[8.41477,47.56879],[8.41304,47.56745],[8.41034,47.56194],[8.41039,47.55972],[8.40789,47.55465],[8.40846,47.55018],[8.39964,47.54444],[8.39609,47.543],[8.39469,47.54094],[8.39495,47.53674],[8.39136,47.53568],[8.38835,47.53305],[8.38525,47.53316],[8.38113,47.53219],[8.3774,47.52969],[8.37518,47.52679],[8.37279,47.51651],[8.36579,47.51663],[8.35666,47.51348],[8.35439,47.51104],[8.35103,47.50314],[8.3524,47.49957],[8.35163,47.4973],[8.35274,47.49484],[8.3545,47.49355],[8.3557,47.48979],[8.35533,47.48525],[8.35698,47.47931],[8.35891,47.47743],[8.36187,47.47645],[8.36722,47.47654],[8.36702,47.47487],[8.36073,47.47222],[8.35903,47.46604],[8.35996,47.46381],[8.36326,47.46204],[8.3673,47.45653],[8.36975,47.45504],[8.37393,47.45472],[8.37754,47.45201],[8.37583,47.45068],[8.37441,47.44614],[8.37623,47.43818],[8.37168,47.43675],[8.36855,47.43406],[8.3681,47.43158],[8.36904,47.42863],[8.37222,47.42603],[8.38283,47.42346],[8.38371,47.42251],[8.38073,47.42207],[8.37555,47.4178],[8.37598,47.41378],[8.37441,47.40906],[8.36067,47.40664],[8.35789,47.40542],[8.35629,47.40377],[8.35661,47.39961],[8.36195,47.39516],[8.36577,47.39429],[8.37601,47.3947],[8.37743,47.39218],[8.38036,47.39048],[8.38761,47.39035],[8.38832,47.38012],[8.39034,47.37527],[8.39355,47.3719],[8.39387,47.36945],[8.39574,47.3671],[8.39902,47.36608],[8.39836,47.36408],[8.40012,47.36094],[8.40103,47.35433],[8.39728,47.34677],[8.39779,47.34475],[8.40186,47.3391],[8.40931,47.33409],[8.4061,47.32975],[8.40578,47.32667],[8.40689,47.32447],[8.41295,47.3205],[8.41611,47.31996],[8.42948,47.32227],[8.43556,47.32083],[8.43437,47.31954],[8.43155,47.31851],[8.42609,47.31375],[8.42276,47.30706],[8.42311,47.30368],[8.41745,47.3015],[8.41372,47.29824],[8.40012,47.29564],[8.39768,47.29392],[8.39518,47.29516],[8.39108,47.29552],[8.38602,47.29437],[8.38272,47.29225],[8.38198,47.29034],[8.38255,47.2881],[8.38508,47.28565],[8.38977,47.27507],[8.39563,47.271],[8.39407,47.26672],[8.39415,47.26361],[8.39756,47.25986],[8.39614,47.25481],[8.39742,47.25189],[8.40647,47.24452],[8.40826,47.24118],[8.40761,47.23957],[8.4096,47.23585],[8.41073,47.22799],[8.41248,47.22433],[8.41695,47.22014],[8.41959,47.21902],[8.42269,47.21886],[8.42977,47.22],[8.43936,47.21937],[8.45,47.21363],[8.4546,47.21334],[8.45625,47.21081],[8.4591,47.20934],[8.46447,47.20928],[8.46609,47.20862],[8.46868,47.20533],[8.47329,47.20398],[8.47693,47.20458],[8.48399,47.20392],[8.49489,47.20738],[8.504,47.20768],[8.51538,47.21152],[8.51753,47.21271],[8.51906,47.21495],[8.5306,47.21306],[8.53307,47.21325],[8.5415,47.21778],[8.54456,47.21707],[8.55407,47.21726],[8.55858,47.21517],[8.56984,47.2139],[8.57491,47.21255],[8.57749,47.20771],[8.58044,47.2064],[8.58408,47.20603],[8.59012,47.20714],[8.58965,47.2046],[8.59074,47.20195],[8.59358,47.1986],[8.59581,47.19753],[8.60168,47.19722],[8.60653,47.1992],[8.60725,47.19885],[8.61097,47.19387],[8.61128,47.19059],[8.61391,47.18838],[8.61522,47.18515],[8.61938,47.18045],[8.61976,47.17918],[8.61721,47.17359],[8.6196,47.1698],[8.62292,47.16821],[8.6339,47.16715],[8.63561,47.16578],[8.63965,47.16459],[8.64287,47.16443],[8.65216,47.16598],[8.65425,47.16552],[8.6549,47.15967],[8.65649,47.15783],[8.65882,47.15658],[8.66853,47.15492],[8.67847,47.15558],[8.68241,47.15759],[8.69361,47.15898],[8.69804,47.16134],[8.69886,47.16303],[8.6977,47.17033],[8.69599,47.17232],[8.68919,47.17566],[8.6872,47.17959],[8.6879,47.18229],[8.69186,47.18485],[8.69824,47.19205],[8.70323,47.19326],[8.70852,47.19602],[8.71423,47.19693],[8.71692,47.19893],[8.74212,47.2071],[8.74218,47.21355],[8.71338,47.21388]]],terms_text:"Geographisches Informationssystem des Kantons Zürich (GIS-ZH), Orthofoto ZH Sommer 2014/15 RGB"},{id:"OGDOrthoZH2018",name:"Kanton Zurich, Orthofoto ZH Sommer 2018 RGB 10cm",type:"wms",template:"https://wms.zh.ch/OGDOrthoZH?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&LAYERS=ortho&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[8.71338,47.21388],[8.7137,47.22737],[8.8117,47.22626],[8.80337,47.23858],[8.80866,47.2431],[8.82448,47.24656],[8.82971,47.24539],[8.83652,47.24257],[8.84568,47.24253],[8.84837,47.24322],[8.85232,47.24034],[8.86206,47.23882],[8.86472,47.23966],[8.86863,47.23968],[8.87339,47.24125],[8.87882,47.24476],[8.88054,47.24791],[8.89878,47.24976],[8.90281,47.25094],[8.91025,47.25003],[8.92735,47.25406],[8.93644,47.25499],[8.94233,47.25849],[8.94423,47.26173],[8.94882,47.26536],[8.95094,47.2686],[8.95068,47.27108],[8.953,47.27285],[8.95411,47.27505],[8.95504,47.28251],[8.95171,47.28527],[8.94664,47.28647],[8.95258,47.28844],[8.95454,47.28982],[8.96141,47.30098],[8.97552,47.30245],[8.98006,47.30416],[8.99153,47.31893],[8.99069,47.32183],[8.98637,47.32542],[8.98548,47.32778],[8.98364,47.32931],[8.98592,47.33815],[8.98464,47.34061],[8.98079,47.34237],[8.98088,47.34835],[8.97785,47.35437],[8.9759,47.35606],[8.97002,47.35843],[8.96572,47.3589],[8.96238,47.36252],[8.95665,47.37432],[8.9521,47.37836],[8.94778,47.37971],[8.95023,47.38346],[8.95018,47.38596],[8.9488,47.38836],[8.9397,47.39403],[8.93637,47.39496],[8.93251,47.39871],[8.92801,47.40148],[8.92278,47.4038],[8.91388,47.40569],[8.91924,47.41213],[8.92049,47.41915],[8.91829,47.42323],[8.92094,47.42544],[8.92107,47.42828],[8.92571,47.42695],[8.93437,47.42796],[8.93877,47.43173],[8.93974,47.43411],[8.93889,47.43725],[8.93511,47.43973],[8.92349,47.43953],[8.91973,47.44081],[8.91322,47.44119],[8.91162,47.44347],[8.91527,47.44628],[8.91499,47.45004],[8.91196,47.45378],[8.90517,47.45791],[8.90183,47.46435],[8.89735,47.46898],[8.89581,47.47219],[8.89135,47.4738],[8.89143,47.47821],[8.90142,47.48133],[8.90428,47.48449],[8.90314,47.48928],[8.90001,47.49187],[8.89967,47.49885],[8.90357,47.50404],[8.90413,47.50745],[8.90322,47.51948],[8.90497,47.52447],[8.90365,47.52691],[8.89982,47.52965],[8.88423,47.53392],[8.87883,47.53277],[8.87061,47.53477],[8.8602,47.53488],[8.85674,47.53594],[8.84782,47.5358],[8.84614,47.54087],[8.8403,47.54654],[8.83728,47.55278],[8.84275,47.5537],[8.84648,47.5562],[8.85269,47.55645],[8.8562,47.55792],[8.85775,47.56141],[8.85728,47.56489],[8.85511,47.56721],[8.85079,47.56818],[8.84763,47.57023],[8.84538,47.57061],[8.8448,47.57309],[8.84211,47.57513],[8.83326,47.57769],[8.82962,47.57778],[8.82661,47.57662],[8.82137,47.57756],[8.81432,47.57598],[8.81234,47.5778],[8.81222,47.58473],[8.81067,47.58639],[8.80812,47.58738],[8.76818,47.59674],[8.7543,47.59729],[8.75529,47.60108],[8.75416,47.60273],[8.74883,47.60588],[8.74829,47.60874],[8.7507,47.60981],[8.75255,47.61292],[8.75575,47.61217],[8.76102,47.61335],[8.78169,47.60634],[8.78165,47.60345],[8.78467,47.59993],[8.80168,47.5966],[8.80512,47.59686],[8.80895,47.59938],[8.81074,47.60981],[8.81866,47.61372],[8.82001,47.61526],[8.82089,47.62058],[8.82015,47.62415],[8.82415,47.6256],[8.83079,47.63206],[8.83448,47.64099],[8.83182,47.64945],[8.82695,47.65206],[8.81168,47.65599],[8.81112,47.6621],[8.81192,47.66454],[8.81041,47.66752],[8.80881,47.66857],[8.80293,47.66978],[8.79299,47.66919],[8.78685,47.66978],[8.78453,47.66899],[8.78216,47.66659],[8.77921,47.65695],[8.77763,47.65563],[8.77398,47.65435],[8.76623,47.65438],[8.76108,47.65257],[8.75852,47.65033],[8.75464,47.64883],[8.7534,47.64733],[8.74839,47.64613],[8.74329,47.64749],[8.73882,47.64651],[8.72376,47.64753],[8.72063,47.64664],[8.71492,47.64885],[8.70826,47.64764],[8.70481,47.65039],[8.70053,47.65199],[8.69427,47.65307],[8.69242,47.65581],[8.68632,47.66094],[8.68485,47.66413],[8.68574,47.66799],[8.68326,47.67315],[8.68056,47.67561],[8.67521,47.6776],[8.67642,47.68177],[8.67561,47.68661],[8.67427,47.68799],[8.67227,47.68891],[8.66273,47.69029],[8.64644,47.69847],[8.63968,47.69877],[8.6355,47.69743],[8.62162,47.69554],[8.61818,47.69279],[8.61744,47.69087],[8.62007,47.68134],[8.61478,47.68308],[8.60917,47.68188],[8.60199,47.67451],[8.59954,47.66923],[8.60275,47.66132],[8.60979,47.6568],[8.6141,47.6564],[8.61574,47.65557],[8.62231,47.65104],[8.62227,47.65024],[8.62048,47.64758],[8.61939,47.65043],[8.61521,47.65452],[8.6093,47.65677],[8.60324,47.65654],[8.60069,47.65541],[8.59788,47.65276],[8.59645,47.64876],[8.59092,47.64623],[8.58937,47.6444],[8.58874,47.63936],[8.59116,47.62755],[8.59325,47.62233],[8.59838,47.61587],[8.59854,47.6145],[8.59114,47.60917],[8.58937,47.60682],[8.58796,47.60319],[8.58788,47.59909],[8.58203,47.59793],[8.57398,47.59329],[8.57146,47.58988],[8.57035,47.58633],[8.57203,47.57985],[8.56771,47.57799],[8.56506,47.57524],[8.56117,47.56407],[8.55707,47.55947],[8.55616,47.56336],[8.55206,47.56904],[8.55334,47.57146],[8.5526,47.57599],[8.55007,47.57806],[8.54666,47.57923],[8.5435,47.58228],[8.54319,47.5851],[8.54888,47.5879],[8.55175,47.58777],[8.55764,47.58963],[8.56114,47.59151],[8.56265,47.5946],[8.56668,47.59565],[8.56902,47.59748],[8.56953,47.60049],[8.57237,47.60386],[8.57308,47.60641],[8.57562,47.60676],[8.579,47.60845],[8.58076,47.61031],[8.58125,47.61203],[8.58025,47.61456],[8.57712,47.61636],[8.57525,47.61957],[8.57277,47.6211],[8.56785,47.62164],[8.56341,47.62697],[8.56105,47.62838],[8.54803,47.62998],[8.54558,47.63122],[8.54498,47.63297],[8.54288,47.63458],[8.53995,47.63565],[8.52769,47.63634],[8.52112,47.63887],[8.51478,47.6385],[8.50932,47.63559],[8.50829,47.62942],[8.50161,47.62597],[8.5007,47.62421],[8.50149,47.62154],[8.49253,47.61893],[8.48884,47.61953],[8.47669,47.61937],[8.47439,47.61838],[8.47154,47.61495],[8.47129,47.61307],[8.46785,47.61272],[8.46446,47.61109],[8.46173,47.60659],[8.45519,47.60676],[8.45061,47.60411],[8.4499,47.60164],[8.4507,47.59584],[8.45382,47.59343],[8.45428,47.5866],[8.4563,47.5848],[8.46014,47.58382],[8.46332,47.58044],[8.46881,47.5795],[8.46219,47.57653],[8.45419,47.57668],[8.43642,47.57154],[8.43161,47.57102],[8.42476,47.57231],[8.41477,47.56879],[8.41304,47.56745],[8.41034,47.56194],[8.41039,47.55972],[8.40789,47.55465],[8.40846,47.55018],[8.39964,47.54444],[8.39609,47.543],[8.39469,47.54094],[8.39495,47.53674],[8.39136,47.53568],[8.38835,47.53305],[8.38525,47.53316],[8.38113,47.53219],[8.3774,47.52969],[8.37518,47.52679],[8.37279,47.51651],[8.36579,47.51663],[8.35666,47.51348],[8.35439,47.51104],[8.35103,47.50314],[8.3524,47.49957],[8.35163,47.4973],[8.35274,47.49484],[8.3545,47.49355],[8.3557,47.48979],[8.35533,47.48525],[8.35698,47.47931],[8.35891,47.47743],[8.36187,47.47645],[8.36722,47.47654],[8.36702,47.47487],[8.36073,47.47222],[8.35903,47.46604],[8.35996,47.46381],[8.36326,47.46204],[8.3673,47.45653],[8.36975,47.45504],[8.37393,47.45472],[8.37754,47.45201],[8.37583,47.45068],[8.37441,47.44614],[8.37623,47.43818],[8.37168,47.43675],[8.36855,47.43406],[8.3681,47.43158],[8.36904,47.42863],[8.37222,47.42603],[8.38283,47.42346],[8.38371,47.42251],[8.38073,47.42207],[8.37555,47.4178],[8.37598,47.41378],[8.37441,47.40906],[8.36067,47.40664],[8.35789,47.40542],[8.35629,47.40377],[8.35661,47.39961],[8.36195,47.39516],[8.36577,47.39429],[8.37601,47.3947],[8.37743,47.39218],[8.38036,47.39048],[8.38761,47.39035],[8.38832,47.38012],[8.39034,47.37527],[8.39355,47.3719],[8.39387,47.36945],[8.39574,47.3671],[8.39902,47.36608],[8.39836,47.36408],[8.40012,47.36094],[8.40103,47.35433],[8.39728,47.34677],[8.39779,47.34475],[8.40186,47.3391],[8.40931,47.33409],[8.4061,47.32975],[8.40578,47.32667],[8.40689,47.32447],[8.41295,47.3205],[8.41611,47.31996],[8.42948,47.32227],[8.43556,47.32083],[8.43437,47.31954],[8.43155,47.31851],[8.42609,47.31375],[8.42276,47.30706],[8.42311,47.30368],[8.41745,47.3015],[8.41372,47.29824],[8.40012,47.29564],[8.39768,47.29392],[8.39518,47.29516],[8.39108,47.29552],[8.38602,47.29437],[8.38272,47.29225],[8.38198,47.29034],[8.38255,47.2881],[8.38508,47.28565],[8.38977,47.27507],[8.39563,47.271],[8.39407,47.26672],[8.39415,47.26361],[8.39756,47.25986],[8.39614,47.25481],[8.39742,47.25189],[8.40647,47.24452],[8.40826,47.24118],[8.40761,47.23957],[8.4096,47.23585],[8.41073,47.22799],[8.41248,47.22433],[8.41695,47.22014],[8.41959,47.21902],[8.42269,47.21886],[8.42977,47.22],[8.43936,47.21937],[8.45,47.21363],[8.4546,47.21334],[8.45625,47.21081],[8.4591,47.20934],[8.46447,47.20928],[8.46609,47.20862],[8.46868,47.20533],[8.47329,47.20398],[8.47693,47.20458],[8.48399,47.20392],[8.49489,47.20738],[8.504,47.20768],[8.51538,47.21152],[8.51753,47.21271],[8.51906,47.21495],[8.5306,47.21306],[8.53307,47.21325],[8.5415,47.21778],[8.54456,47.21707],[8.55407,47.21726],[8.55858,47.21517],[8.56984,47.2139],[8.57491,47.21255],[8.57749,47.20771],[8.58044,47.2064],[8.58408,47.20603],[8.59012,47.20714],[8.58965,47.2046],[8.59074,47.20195],[8.59358,47.1986],[8.59581,47.19753],[8.60168,47.19722],[8.60653,47.1992],[8.60725,47.19885],[8.61097,47.19387],[8.61128,47.19059],[8.61391,47.18838],[8.61522,47.18515],[8.61938,47.18045],[8.61976,47.17918],[8.61721,47.17359],[8.6196,47.1698],[8.62292,47.16821],[8.6339,47.16715],[8.63561,47.16578],[8.63965,47.16459],[8.64287,47.16443],[8.65216,47.16598],[8.65425,47.16552],[8.6549,47.15967],[8.65649,47.15783],[8.65882,47.15658],[8.66853,47.15492],[8.67847,47.15558],[8.68241,47.15759],[8.69361,47.15898],[8.69804,47.16134],[8.69886,47.16303],[8.6977,47.17033],[8.69599,47.17232],[8.68919,47.17566],[8.6872,47.17959],[8.6879,47.18229],[8.69186,47.18485],[8.69824,47.19205],[8.70323,47.19326],[8.70852,47.19602],[8.71423,47.19693],[8.71692,47.19893],[8.74212,47.2071],[8.74218,47.21355],[8.71338,47.21388]]],terms_text:"Geographisches Informationssystem des Kantons Zürich (GIS-ZH), Orthofoto ZH Sommer 2018 RGB",best:true},{id:"OGDLidarZH-DTM",name:"Kanton Zurich, Terrainschummerung 50cm",type:"wms",template:"https://wms.zh.ch/OGDLidarZH?FORMAT=image/jpeg&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap&LAYERS=dtm2014hillshade&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[8.71338,47.21388],[8.7137,47.22737],[8.8117,47.22626],[8.80337,47.23858],[8.80866,47.2431],[8.82448,47.24656],[8.82971,47.24539],[8.83652,47.24257],[8.84568,47.24253],[8.84837,47.24322],[8.85232,47.24034],[8.86206,47.23882],[8.86472,47.23966],[8.86863,47.23968],[8.87339,47.24125],[8.87882,47.24476],[8.88054,47.24791],[8.89878,47.24976],[8.90281,47.25094],[8.91025,47.25003],[8.92735,47.25406],[8.93644,47.25499],[8.94233,47.25849],[8.94423,47.26173],[8.94882,47.26536],[8.95094,47.2686],[8.95068,47.27108],[8.953,47.27285],[8.95411,47.27505],[8.95504,47.28251],[8.95171,47.28527],[8.94664,47.28647],[8.95258,47.28844],[8.95454,47.28982],[8.96141,47.30098],[8.97552,47.30245],[8.98006,47.30416],[8.99153,47.31893],[8.99069,47.32183],[8.98637,47.32542],[8.98548,47.32778],[8.98364,47.32931],[8.98592,47.33815],[8.98464,47.34061],[8.98079,47.34237],[8.98088,47.34835],[8.97785,47.35437],[8.9759,47.35606],[8.97002,47.35843],[8.96572,47.3589],[8.96238,47.36252],[8.95665,47.37432],[8.9521,47.37836],[8.94778,47.37971],[8.95023,47.38346],[8.95018,47.38596],[8.9488,47.38836],[8.9397,47.39403],[8.93637,47.39496],[8.93251,47.39871],[8.92801,47.40148],[8.92278,47.4038],[8.91388,47.40569],[8.91924,47.41213],[8.92049,47.41915],[8.91829,47.42323],[8.92094,47.42544],[8.92107,47.42828],[8.92571,47.42695],[8.93437,47.42796],[8.93877,47.43173],[8.93974,47.43411],[8.93889,47.43725],[8.93511,47.43973],[8.92349,47.43953],[8.91973,47.44081],[8.91322,47.44119],[8.91162,47.44347],[8.91527,47.44628],[8.91499,47.45004],[8.91196,47.45378],[8.90517,47.45791],[8.90183,47.46435],[8.89735,47.46898],[8.89581,47.47219],[8.89135,47.4738],[8.89143,47.47821],[8.90142,47.48133],[8.90428,47.48449],[8.90314,47.48928],[8.90001,47.49187],[8.89967,47.49885],[8.90357,47.50404],[8.90413,47.50745],[8.90322,47.51948],[8.90497,47.52447],[8.90365,47.52691],[8.89982,47.52965],[8.88423,47.53392],[8.87883,47.53277],[8.87061,47.53477],[8.8602,47.53488],[8.85674,47.53594],[8.84782,47.5358],[8.84614,47.54087],[8.8403,47.54654],[8.83728,47.55278],[8.84275,47.5537],[8.84648,47.5562],[8.85269,47.55645],[8.8562,47.55792],[8.85775,47.56141],[8.85728,47.56489],[8.85511,47.56721],[8.85079,47.56818],[8.84763,47.57023],[8.84538,47.57061],[8.8448,47.57309],[8.84211,47.57513],[8.83326,47.57769],[8.82962,47.57778],[8.82661,47.57662],[8.82137,47.57756],[8.81432,47.57598],[8.81234,47.5778],[8.81222,47.58473],[8.81067,47.58639],[8.80812,47.58738],[8.76818,47.59674],[8.7543,47.59729],[8.75529,47.60108],[8.75416,47.60273],[8.74883,47.60588],[8.74829,47.60874],[8.7507,47.60981],[8.75255,47.61292],[8.75575,47.61217],[8.76102,47.61335],[8.78169,47.60634],[8.78165,47.60345],[8.78467,47.59993],[8.80168,47.5966],[8.80512,47.59686],[8.80895,47.59938],[8.81074,47.60981],[8.81866,47.61372],[8.82001,47.61526],[8.82089,47.62058],[8.82015,47.62415],[8.82415,47.6256],[8.83079,47.63206],[8.83448,47.64099],[8.83182,47.64945],[8.82695,47.65206],[8.81168,47.65599],[8.81112,47.6621],[8.81192,47.66454],[8.81041,47.66752],[8.80881,47.66857],[8.80293,47.66978],[8.79299,47.66919],[8.78685,47.66978],[8.78453,47.66899],[8.78216,47.66659],[8.77921,47.65695],[8.77763,47.65563],[8.77398,47.65435],[8.76623,47.65438],[8.76108,47.65257],[8.75852,47.65033],[8.75464,47.64883],[8.7534,47.64733],[8.74839,47.64613],[8.74329,47.64749],[8.73882,47.64651],[8.72376,47.64753],[8.72063,47.64664],[8.71492,47.64885],[8.70826,47.64764],[8.70481,47.65039],[8.70053,47.65199],[8.69427,47.65307],[8.69242,47.65581],[8.68632,47.66094],[8.68485,47.66413],[8.68574,47.66799],[8.68326,47.67315],[8.68056,47.67561],[8.67521,47.6776],[8.67642,47.68177],[8.67561,47.68661],[8.67427,47.68799],[8.67227,47.68891],[8.66273,47.69029],[8.64644,47.69847],[8.63968,47.69877],[8.6355,47.69743],[8.62162,47.69554],[8.61818,47.69279],[8.61744,47.69087],[8.62007,47.68134],[8.61478,47.68308],[8.60917,47.68188],[8.60199,47.67451],[8.59954,47.66923],[8.60275,47.66132],[8.60979,47.6568],[8.6141,47.6564],[8.61574,47.65557],[8.62231,47.65104],[8.62227,47.65024],[8.62048,47.64758],[8.61939,47.65043],[8.61521,47.65452],[8.6093,47.65677],[8.60324,47.65654],[8.60069,47.65541],[8.59788,47.65276],[8.59645,47.64876],[8.59092,47.64623],[8.58937,47.6444],[8.58874,47.63936],[8.59116,47.62755],[8.59325,47.62233],[8.59838,47.61587],[8.59854,47.6145],[8.59114,47.60917],[8.58937,47.60682],[8.58796,47.60319],[8.58788,47.59909],[8.58203,47.59793],[8.57398,47.59329],[8.57146,47.58988],[8.57035,47.58633],[8.57203,47.57985],[8.56771,47.57799],[8.56506,47.57524],[8.56117,47.56407],[8.55707,47.55947],[8.55616,47.56336],[8.55206,47.56904],[8.55334,47.57146],[8.5526,47.57599],[8.55007,47.57806],[8.54666,47.57923],[8.5435,47.58228],[8.54319,47.5851],[8.54888,47.5879],[8.55175,47.58777],[8.55764,47.58963],[8.56114,47.59151],[8.56265,47.5946],[8.56668,47.59565],[8.56902,47.59748],[8.56953,47.60049],[8.57237,47.60386],[8.57308,47.60641],[8.57562,47.60676],[8.579,47.60845],[8.58076,47.61031],[8.58125,47.61203],[8.58025,47.61456],[8.57712,47.61636],[8.57525,47.61957],[8.57277,47.6211],[8.56785,47.62164],[8.56341,47.62697],[8.56105,47.62838],[8.54803,47.62998],[8.54558,47.63122],[8.54498,47.63297],[8.54288,47.63458],[8.53995,47.63565],[8.52769,47.63634],[8.52112,47.63887],[8.51478,47.6385],[8.50932,47.63559],[8.50829,47.62942],[8.50161,47.62597],[8.5007,47.62421],[8.50149,47.62154],[8.49253,47.61893],[8.48884,47.61953],[8.47669,47.61937],[8.47439,47.61838],[8.47154,47.61495],[8.47129,47.61307],[8.46785,47.61272],[8.46446,47.61109],[8.46173,47.60659],[8.45519,47.60676],[8.45061,47.60411],[8.4499,47.60164],[8.4507,47.59584],[8.45382,47.59343],[8.45428,47.5866],[8.4563,47.5848],[8.46014,47.58382],[8.46332,47.58044],[8.46881,47.5795],[8.46219,47.57653],[8.45419,47.57668],[8.43642,47.57154],[8.43161,47.57102],[8.42476,47.57231],[8.41477,47.56879],[8.41304,47.56745],[8.41034,47.56194],[8.41039,47.55972],[8.40789,47.55465],[8.40846,47.55018],[8.39964,47.54444],[8.39609,47.543],[8.39469,47.54094],[8.39495,47.53674],[8.39136,47.53568],[8.38835,47.53305],[8.38525,47.53316],[8.38113,47.53219],[8.3774,47.52969],[8.37518,47.52679],[8.37279,47.51651],[8.36579,47.51663],[8.35666,47.51348],[8.35439,47.51104],[8.35103,47.50314],[8.3524,47.49957],[8.35163,47.4973],[8.35274,47.49484],[8.3545,47.49355],[8.3557,47.48979],[8.35533,47.48525],[8.35698,47.47931],[8.35891,47.47743],[8.36187,47.47645],[8.36722,47.47654],[8.36702,47.47487],[8.36073,47.47222],[8.35903,47.46604],[8.35996,47.46381],[8.36326,47.46204],[8.3673,47.45653],[8.36975,47.45504],[8.37393,47.45472],[8.37754,47.45201],[8.37583,47.45068],[8.37441,47.44614],[8.37623,47.43818],[8.37168,47.43675],[8.36855,47.43406],[8.3681,47.43158],[8.36904,47.42863],[8.37222,47.42603],[8.38283,47.42346],[8.38371,47.42251],[8.38073,47.42207],[8.37555,47.4178],[8.37598,47.41378],[8.37441,47.40906],[8.36067,47.40664],[8.35789,47.40542],[8.35629,47.40377],[8.35661,47.39961],[8.36195,47.39516],[8.36577,47.39429],[8.37601,47.3947],[8.37743,47.39218],[8.38036,47.39048],[8.38761,47.39035],[8.38832,47.38012],[8.39034,47.37527],[8.39355,47.3719],[8.39387,47.36945],[8.39574,47.3671],[8.39902,47.36608],[8.39836,47.36408],[8.40012,47.36094],[8.40103,47.35433],[8.39728,47.34677],[8.39779,47.34475],[8.40186,47.3391],[8.40931,47.33409],[8.4061,47.32975],[8.40578,47.32667],[8.40689,47.32447],[8.41295,47.3205],[8.41611,47.31996],[8.42948,47.32227],[8.43556,47.32083],[8.43437,47.31954],[8.43155,47.31851],[8.42609,47.31375],[8.42276,47.30706],[8.42311,47.30368],[8.41745,47.3015],[8.41372,47.29824],[8.40012,47.29564],[8.39768,47.29392],[8.39518,47.29516],[8.39108,47.29552],[8.38602,47.29437],[8.38272,47.29225],[8.38198,47.29034],[8.38255,47.2881],[8.38508,47.28565],[8.38977,47.27507],[8.39563,47.271],[8.39407,47.26672],[8.39415,47.26361],[8.39756,47.25986],[8.39614,47.25481],[8.39742,47.25189],[8.40647,47.24452],[8.40826,47.24118],[8.40761,47.23957],[8.4096,47.23585],[8.41073,47.22799],[8.41248,47.22433],[8.41695,47.22014],[8.41959,47.21902],[8.42269,47.21886],[8.42977,47.22],[8.43936,47.21937],[8.45,47.21363],[8.4546,47.21334],[8.45625,47.21081],[8.4591,47.20934],[8.46447,47.20928],[8.46609,47.20862],[8.46868,47.20533],[8.47329,47.20398],[8.47693,47.20458],[8.48399,47.20392],[8.49489,47.20738],[8.504,47.20768],[8.51538,47.21152],[8.51753,47.21271],[8.51906,47.21495],[8.5306,47.21306],[8.53307,47.21325],[8.5415,47.21778],[8.54456,47.21707],[8.55407,47.21726],[8.55858,47.21517],[8.56984,47.2139],[8.57491,47.21255],[8.57749,47.20771],[8.58044,47.2064],[8.58408,47.20603],[8.59012,47.20714],[8.58965,47.2046],[8.59074,47.20195],[8.59358,47.1986],[8.59581,47.19753],[8.60168,47.19722],[8.60653,47.1992],[8.60725,47.19885],[8.61097,47.19387],[8.61128,47.19059],[8.61391,47.18838],[8.61522,47.18515],[8.61938,47.18045],[8.61976,47.17918],[8.61721,47.17359],[8.6196,47.1698],[8.62292,47.16821],[8.6339,47.16715],[8.63561,47.16578],[8.63965,47.16459],[8.64287,47.16443],[8.65216,47.16598],[8.65425,47.16552],[8.6549,47.15967],[8.65649,47.15783],[8.65882,47.15658],[8.66853,47.15492],[8.67847,47.15558],[8.68241,47.15759],[8.69361,47.15898],[8.69804,47.16134],[8.69886,47.16303],[8.6977,47.17033],[8.69599,47.17232],[8.68919,47.17566],[8.6872,47.17959],[8.6879,47.18229],[8.69186,47.18485],[8.69824,47.19205],[8.70323,47.19326],[8.70852,47.19602],[8.71423,47.19693],[8.71692,47.19893],[8.74212,47.2071],[8.74218,47.21355],[8.71338,47.21388]]],terms_text:"Geographisches Informationssystem des Kantons Zürich (GIS-ZH), Terrainschummerung"},{id:"kartverket-abas",name:"Kartverket Administrative Boundaries overlay",type:"wms",template:"https://openwms.statkart.no/skwms1/wms.adm_enheter?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=avtaltavgrensningslinje,territorialgrense,riksgrense,fylker,kommuner&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.kartverket.no/data/Kartdata/Grenser/",terms_text:"© Kartverket",description:"Official administrative boundaries at the national, county and municipality levels",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-luftfartshindre",name:"Kartverket Aviation Obstructions overlay",type:"wms",template:"https://openwms.statkart.no/skwms1/wms.nrl?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=nrl3_wms&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[7,20],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://kartverket.no/kart/Nasjonalt-register-over-luftfartshindre/",terms_text:"© Kartverket",description:"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in urban areas (e.g. masts, towers, high buildings, power lines)",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-matrikkel",name:"Kartverket Cadastral overlay",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.matrikkel?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=matrikkel_WMS&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[14,20],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"http://www.seeiendom.no/",terms_text:"© Kartverket",description:"Real estate boundaries from the official land register (`matrikkelen´). Monthly update.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-hoydekurver",name:"Kartverket Contour Lines overlay",type:"wms",template:"https://openwms.statkart.no/skwms1/wms.topo4?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=hoydetall5linje,hoydetall5punkt,hoydepunkt,vannpunkt,hoydekurver_1m,hoydekurver_5m,N50Hoydekurver,N250Hoydekurver,N500Hoydekurver,N1000Hoydekurver,N2000Hoydekurver&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[9,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.kartverket.no/Prosjekter/Nasjonal-detaljert-hoydemodell/",terms_text:"© Kartverket",description:"Contours for Norway",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-dom-skygge",name:"Kartverket DOM Digital Surface Model",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.hoyde-dom_somlos_skyggerelieff?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=las_dom_skyggerelieff_somlos&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,24],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://hoydedata.no/",terms_text:"© Kartverket",description:"Shaded relief representation of the Norwegian digital surface model (DOM), i.e. earth surface including trees, buildings and other objects on top of it.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-dtm-skygge",name:"Kartverket DTM Digital Terrain Model",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.hoyde-dtm_somlos_skyggerelieff?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=las_dtm_skyggerelieff_somlos&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,24],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://hoydedata.no/",terms_text:"© Kartverket",description:"Shaded relief representation of the Norwegian digital terrain model (DTM), i.e. earth surface without trees, buildings and other objects.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-ok-1st",name:"Kartverket Economic Maps (historic)",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.n5raster2?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=n5raster_foerstegang_metadata,n5raster_foerstegang&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[11,20],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.kartverket.no/kunnskap/historie/kartverkets-historiske-arkiv/",terms_text:"© Kartverket",description:"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk kartverk´). Available from zoom 16. Please correct local imagery offset.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-friluft",name:"Kartverket Hiking Trails",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.friluftsruter2?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Fotrute&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,24],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://kartverket.no/geodataarbeid/temadata/nasjonal-database-for-tur--og-friluftsruter/",terms_text:"© Kartverket",description:"Hiking trails from the Norwegian database `Tur- og Friluftsruter´, including DNT routes.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-fjellskygge",name:"Kartverket Hillshade overlay",type:"tms",template:"https://opencache{switch:,2,3}.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=fjellskygge&zoom={zoom}&x={x}&y={y}",zoomExtent:[9,15],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://kartkatalog.geonorge.no/metadata/kartverket/fjellskygge-cache/cca7c129-fe66-4c96-9091-40d92290dd81",terms_text:"© Kartverket",description:"Hillshade for Norway",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-historic",name:"Kartverket Historic maps",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.historiskekart?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=amt1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,15],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.kartverket.no/kart/historiske-kart/",terms_text:"© Kartverket",description:"Historic maps - for the time being `Amtskartserien´ 1826-1917.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-topo4",name:"Kartverket N50 topo",type:"tms",template:"https://opencache{switch:,2,3}.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo4&zoom={zoom}&x={x}&y={y}",zoomExtent:[3,15],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://wiki.openstreetmap.org/wiki/No:Kartverket_import",terms_text:"© Kartverket",description:"Topographic map N50, equivalent to Norway 1:50.000 paper map series.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-sjokart",name:"Kartverket Nautical Charts",type:"tms",template:"https://opencache{switch:,2,3}.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=sjokartraster&zoom={zoom}&x={x}&y={y}",zoomExtent:[3,20],polygon:[[[-15.01273,-60.16205],[33.3326,-60.17016],[33.32144,-73.0009],[-15.0239,-72.99613],[-15.01273,-60.16205]],[[-173.00076,-70.54952],[-125.00321,-70.54878],[-125.00167,-78.99977],[-172.99922,-79.0002],[-173.00076,-70.54952]],[[3.24857,56.08599],[2.60924,56.59428],[1.47215,58.45924],[1.77704,61.36251],[-0.49301,63.88665],[-13.73292,69.76376],[-12.43655,72.58741],[-5.11965,74.39626],[-3.60356,79.12998],[5.85587,82.34863],[34.98861,82.3401],[37.96874,78.62784],[37.99619,75.79673],[36.95796,73.68962],[32.07458,70.27336],[30.3511,69.56882],[21.46179,69.57098],[18.3032,68.36681],[14.47997,66.2558],[11.50266,63.28307],[11.50166,58.95444],[11.08246,58.96771],[10.03051,58.25173],[8.88244,57.69534],[3.24857,56.08599]]],terms_url:"https://www.kartverket.no/Kart/Sjokart/",terms_text:"© Kartverket",description:"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). Raster representation of paper charts. Updated biweekly.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-vegnett",name:"Kartverket Road Network",type:"wms",template:"https://openwms.statkart.no/skwms1/wms.vegnett?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=all&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[3,24],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://www.kartverket.no/data/kartdata/vegdata/",terms_text:"© Kartverket",description:"Norwegian road network from the National Road database (NVDB). Colours represent national, county, municipal, private and forest roads + footways/cycleways.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"Katowice-buildings",name:"Katowice: Buildings",type:"wms",template:"http://mapserver.um.katowice.pl/services/ortowms/MapServer/WMSServer?FORMAT=image/png&transparent=true&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=4,5,6&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[18.90884,50.24006],[18.90851,50.23542],[18.94279,50.23515],[18.94399,50.27138],[18.95469,50.27485],[18.95571,50.2894],[18.96692,50.29364],[18.98752,50.2848],[18.99888,50.2847],[18.99907,50.29368],[18.98892,50.29377],[18.98934,50.30244],[19.0094,50.30196],[19.03401,50.28842],[19.05533,50.30139],[19.07901,50.30087],[19.07908,50.29297],[19.12296,50.27784],[19.12267,50.25523],[19.11079,50.2428],[19.1098,50.17946],[19.12065,50.17936],[19.11957,50.14359],[19.10777,50.14386],[19.0973,50.13916],[19.09656,50.12786],[19.06379,50.12786],[19.02985,50.14009],[19.03007,50.16177],[19.01909,50.16698],[19.00848,50.16707],[18.96329,50.1498],[18.92907,50.15008],[18.92915,50.15426],[18.91854,50.15419],[18.91878,50.20421],[18.90792,50.20429],[18.90808,50.21297],[18.88588,50.21314],[18.88639,50.24024],[18.90884,50.24006]]],terms_text:"Urząd Miasta Katowic"},{id:"Katowice-aerial_image",name:"Katowice: Orthophotomap (aerial image)",type:"wms",template:"http://mapserver.um.katowice.pl/services/ortowms/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=2&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[18.90884,50.24006],[18.90851,50.23542],[18.94279,50.23515],[18.94399,50.27138],[18.95469,50.27485],[18.95571,50.2894],[18.96692,50.29364],[18.98752,50.2848],[18.99888,50.2847],[18.99907,50.29368],[18.98892,50.29377],[18.98934,50.30244],[19.0094,50.30196],[19.03401,50.28842],[19.05533,50.30139],[19.07901,50.30087],[19.07908,50.29297],[19.12296,50.27784],[19.12267,50.25523],[19.11079,50.2428],[19.1098,50.17946],[19.12065,50.17936],[19.11957,50.14359],[19.10777,50.14386],[19.0973,50.13916],[19.09656,50.12786],[19.06379,50.12786],[19.02985,50.14009],[19.03007,50.16177],[19.01909,50.16698],[19.00848,50.16707],[18.96329,50.1498],[18.92907,50.15008],[18.92915,50.15426],[18.91854,50.15419],[18.91878,50.20421],[18.90792,50.20429],[18.90808,50.21297],[18.88588,50.21314],[18.88639,50.24024],[18.90884,50.24006]]],terms_text:"Urząd Miasta Katowic"},{id:"kelowna_2012",name:"Kelowna 2012",type:"tms",template:"http://{switch:a,b,c,d}.tile.paulnorman.ca/kelowna2012/{zoom}/{x}/{y}.png",endDate:"2012-05-14T00:00:00.000Z",startDate:"2012-05-13T00:00:00.000Z",zoomExtent:[9,20],polygon:[[[-119.58673,49.79281],[-119.54657,49.79281],[-119.54657,49.80138],[-119.53434,49.80138],[-119.53434,49.80473],[-119.52962,49.80473],[-119.52962,49.81196],[-119.51045,49.81196],[-119.51157,49.87443],[-119.51089,49.87449],[-119.51141,49.88433],[-119.51141,49.92218],[-119.49386,49.92235],[-119.49405,49.9313],[-119.48039,49.93175],[-119.48046,49.94075],[-119.46667,49.94099],[-119.46928,49.99137],[-119.45513,49.99161],[-119.45567,50.01212],[-119.44167,50.01239],[-119.44173,50.01363],[-119.42215,50.01404],[-119.4221,50.01193],[-119.41213,50.01217],[-119.41261,50.02169],[-119.41234,50.02169],[-119.41248,50.02508],[-119.41209,50.02508],[-119.4122,50.02708],[-119.41261,50.02707],[-119.41283,50.03219],[-119.39363,50.03264],[-119.39353,50.03078],[-119.37957,50.03101],[-119.37954,50.02876],[-119.37358,50.02886],[-119.37154,49.97936],[-119.35735,49.97936],[-119.35484,49.92561],[-119.32681,49.92572],[-119.32566,49.88041],[-119.31389,49.88065],[-119.31371,49.87717],[-119.31322,49.87722],[-119.31315,49.87497],[-119.31245,49.87491],[-119.31223,49.87236],[-119.31176,49.87233],[-119.3116,49.86961],[-119.31122,49.86942],[-119.31092,49.86324],[-119.31037,49.86327],[-119.30951,49.85124],[-119.31064,49.85123],[-119.31039,49.84626],[-119.32453,49.846],[-119.3246,49.84507],[-119.3367,49.84488],[-119.33675,49.84351],[-119.33794,49.84347],[-119.3378,49.83821],[-119.33836,49.8381],[-119.33837,49.83512],[-119.33909,49.83511],[-119.3388,49.83212],[-119.33915,49.83206],[-119.33917,49.82933],[-119.33946,49.82933],[-119.33959,49.82679],[-119.35001,49.82658],[-119.34937,49.81806],[-119.4047,49.81638],[-119.40457,49.8099],[-119.41016,49.8099],[-119.41029,49.80728],[-119.43195,49.80691],[-119.43226,49.7908],[-119.44598,49.79055],[-119.44529,49.78202],[-119.49674,49.78116],[-119.49661,49.77849],[-119.54184,49.77751],[-119.54159,49.77183],[-119.55603,49.77149],[-119.55612,49.77184],[-119.57157,49.77151],[-119.57162,49.77173],[-119.58192,49.77149],[-119.58201,49.77177],[-119.5923,49.77152],[-119.59234,49.77181],[-119.60038,49.7716],[-119.60119,49.78391],[-119.58644,49.78439],[-119.58673,49.79281]]],description:"High quality aerial imagery taken for the City of Kelowna"},{id:"kelowna_roads",name:"Kelowna Roads overlay",type:"tms",template:"http://{switch:a,b,c,d}.tile.paulnorman.ca/kelowna_overlay/{zoom}/{x}/{y}.png",zoomExtent:[9,20],polygon:[[[-119.58673,49.79281],[-119.54657,49.79281],[-119.54657,49.80138],[-119.53434,49.80138],[-119.53434,49.80473],[-119.52962,49.80473],[-119.52962,49.81196],[-119.51045,49.81196],[-119.51157,49.87443],[-119.51089,49.87449],[-119.51141,49.88433],[-119.51141,49.92218],[-119.49386,49.92235],[-119.49405,49.9313],[-119.48039,49.93175],[-119.48046,49.94075],[-119.46667,49.94099],[-119.46928,49.99137],[-119.45513,49.99161],[-119.45567,50.01212],[-119.44167,50.01239],[-119.44173,50.01363],[-119.42215,50.01404],[-119.4221,50.01193],[-119.41213,50.01217],[-119.41261,50.02169],[-119.41234,50.02169],[-119.41248,50.02508],[-119.41209,50.02508],[-119.4122,50.02708],[-119.41261,50.02707],[-119.41283,50.03219],[-119.39363,50.03264],[-119.39353,50.03078],[-119.37957,50.03101],[-119.37954,50.02876],[-119.37358,50.02886],[-119.37154,49.97936],[-119.35735,49.97936],[-119.35484,49.92561],[-119.32681,49.92572],[-119.32566,49.88041],[-119.31389,49.88065],[-119.31371,49.87717],[-119.31322,49.87722],[-119.31315,49.87497],[-119.31245,49.87491],[-119.31223,49.87236],[-119.31176,49.87233],[-119.3116,49.86961],[-119.31122,49.86942],[-119.31092,49.86324],[-119.31037,49.86327],[-119.30951,49.85124],[-119.31064,49.85123],[-119.31039,49.84626],[-119.32453,49.846],[-119.3246,49.84507],[-119.3367,49.84488],[-119.33675,49.84351],[-119.33794,49.84347],[-119.3378,49.83821],[-119.33836,49.8381],[-119.33837,49.83512],[-119.33909,49.83511],[-119.3388,49.83212],[-119.33915,49.83206],[-119.33917,49.82933],[-119.33946,49.82933],[-119.33959,49.82679],[-119.35001,49.82658],[-119.34937,49.81806],[-119.4047,49.81638],[-119.40457,49.8099],[-119.41016,49.8099],[-119.41029,49.80728],[-119.43195,49.80691],[-119.43226,49.7908],[-119.44598,49.79055],[-119.44529,49.78202],[-119.49674,49.78116],[-119.49661,49.77849],[-119.54184,49.77751],[-119.54159,49.77183],[-119.55603,49.77149],[-119.55612,49.77184],[-119.57157,49.77151],[-119.57162,49.77173],[-119.58192,49.77149],[-119.58201,49.77177],[-119.5923,49.77152],[-119.59234,49.77181],[-119.60038,49.7716],[-119.60119,49.78391],[-119.58644,49.78439],[-119.58673,49.79281]]],overlay:true},{id:"kystverket-navigasjon",name:"Kystverket Navigational Aid overlay",type:"wms",template:"https://nfs.kystverket.no/arcgis/services/nfs/NFSSistOperativ/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=17,16,15,14,12,10,9,8,7,4&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[12,19],polygon:[[[3.24857,56.08599],[2.60924,56.59428],[1.47215,58.45924],[1.77704,61.36251],[-0.49301,63.88665],[-13.73292,69.76376],[-12.43655,72.58741],[-5.11965,74.39626],[-3.60356,79.12998],[5.85587,82.34863],[34.98861,82.3401],[37.96874,78.62784],[37.99619,75.79673],[36.95796,73.68962],[32.07458,70.27336],[30.3511,69.56882],[21.46179,69.57098],[18.3032,68.36681],[14.47997,66.2558],[11.50266,63.28307],[11.50166,58.95444],[11.08246,58.96771],[10.03051,58.25173],[8.88244,57.69534],[3.24857,56.08599]]],terms_url:"http://kystverket.no/Maritim-infrastruktur/Fyr-og-merker-/",terms_text:"© Kystverket",description:"Beacons, buoys, lights and fairways maintained by the Norwegian Coastal Administration",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/68/Coat_of_arms_of_the_Norwegian_Coastal_Administration.svg/143px-Coat_of_arms_of_the_Norwegian_Coastal_Administration.svg.png",overlay:true},{id:"landsat_233055",name:"Landsat 233055",type:"tms",template:"http://{switch:a,b,c,d}.tile.paulnorman.ca/landsat_233055/{zoom}/{x}/{y}.png",endDate:"2013-09-03T00:00:00.000Z",startDate:"2013-09-03T00:00:00.000Z",zoomExtent:[5,14],polygon:[[[-60.855,6.1765],[-60.47626,7.91883],[-62.16169,8.27787],[-62.53225,6.53755],[-60.855,6.1765]]],description:"Recent Landsat imagery"},{id:"osmse-ekonomiska",name:"Lantmäteriet Economic Map 1950–1980",type:"tms",template:"https://mapproxy.openstreetmap.se/tms/1.0.0/ek_EPSG3857/{zoom}/{x}/{-y}.jpeg",zoomExtent:[3,17],polygon:[[[12.71117,55.2666],[14.38109,55.29163],[19.65453,57.24934],[19.85228,59.75087],[17.77587,61.13794],[18.06151,62.27815],[20.97289,63.5779],[24.35668,65.60842],[23.96117,66.79191],[20.61034,66.45189],[17.13866,63.96632],[11.99706,61.03702],[12.29369,60.31607],[10.70067,58.81375],[12.71117,55.2666]]],terms_url:"https://www.lantmateriet.se",terms_text:"© Lantmäteriet",description:"Scan of \"Economic maps\" ca. 1950–1980",icon:"https://raw.githubusercontent.com/osmlab/editor-layer-index/gh-pages/sources/europe/se/lantmateriet_icon.png"},{id:"lantmateriet-orto1960",name:"Lantmäteriet Historic Orthophoto 1960",type:"wms",template:"https://api.lantmateriet.se/historiska-ortofoton/wms/v1/token/9b342b7d9f12d4ddb92277be9869d860/?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.Histortho_60&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,19],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.lantmateriet.se/",terms_text:"© Lantmäteriet, CC0",description:"Mosaic of Swedish orthophotos from the period 1955–1965. Older and younger pictures may occur.",icon:"https://raw.githubusercontent.com/osmlab/editor-layer-index/gh-pages/sources/europe/se/lantmateriet_icon.png"},{id:"lantmateriet-orto1975",name:"Lantmäteriet Historic Orthophoto 1975",type:"wms",template:"https://api.lantmateriet.se/historiska-ortofoton/wms/v1/token/9b342b7d9f12d4ddb92277be9869d860/?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.Histortho_75&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,19],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[17.85131,60.87407],[14.74558,60.53889],[11.60239,59.56416],[10.51799,58.66559],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.lantmateriet.se/",terms_text:"© Lantmäteriet, CC0",description:"Mosaic of Swedish orthophotos from the period 1970–1980. Is under construction.",icon:"https://raw.githubusercontent.com/osmlab/editor-layer-index/gh-pages/sources/europe/se/lantmateriet_icon.png"},{id:"lantmateriet-topowebb",name:"Lantmäteriet Topographic Map",type:"tms",template:"https://api.lantmateriet.se/open/topowebb-ccby/v1/wmts/token/9b342b7d9f12d4ddb92277be9869d860/1.0.0/topowebb/default/3857/{zoom}/{y}/{x}.png",zoomExtent:[3,15],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.lantmateriet.se/",terms_text:"© Lantmäteriet, CC0",description:"Topographic map of Sweden 1:50 000",icon:"https://raw.githubusercontent.com/osmlab/editor-layer-index/gh-pages/sources/europe/se/lantmateriet_icon.png"},{id:"lu.geoportail.opendata.ortholatest",name:"Latest available ortho geoportail.lu",type:"tms",template:"https://{switch:wmts1,wmts2}.geoportail.lu/opendata/wmts/ortho_latest/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg",endDate:"2017-06-22T00:00:00.000Z",startDate:"2017-06-14T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",best:true,icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"landsat_047026",name:"Latest southwest British Columbia Landsat",type:"tms",template:"http://{switch:a,b,c,d}.tile.paulnorman.ca/landsat_047026/{zoom}/{x}/{y}.png",endDate:"2013-09-12T00:00:00.000Z",startDate:"2013-09-12T00:00:00.000Z",zoomExtent:[5,13],polygon:[[[-121.93555,47.78206],[-121.57206,48.64101],[-121.20155,49.48462],[-121.83755,49.60232],[-122.4767,49.71617],[-123.11891,49.82688],[-123.76023,49.93358],[-124.08877,49.08705],[-124.41289,48.22526],[-123.79277,48.11973],[-123.17279,48.01096],[-122.55355,47.89823],[-121.93555,47.78206]]],description:"Recent lower-resolution landsat imagery for southwest British Columbia"},{id:"CityOfLaunceston_2008",name:"Launceston OrthoPhoto 2008",type:"tms",template:"https://mapping.launceston.tas.gov.au/arcgis/rest/services/Public/OrthoPhoto_Dec2008/MapServer/tile/{zoom}/{y}/{x}",endDate:"2008-12-01T00:00:00.000Z",startDate:"2008-12-01T00:00:00.000Z",zoomExtent:[12,20],polygon:[[[147.06513,-41.50279],[147.0647,-41.34563],[147.02213,-41.34614],[147.02248,-41.33558],[147.00119,-41.33506],[147.00119,-41.32346],[146.95827,-41.32346],[146.95827,-41.27316],[146.98196,-41.27265],[146.98299,-41.25277],[146.99879,-41.25226],[146.99913,-41.23883],[147.02969,-41.23858],[147.03003,-41.23006],[147.0393,-41.2298],[147.03964,-41.22128],[147.0623,-41.22102],[147.06608,-41.20656],[147.08084,-41.20578],[147.08221,-41.18951],[147.11998,-41.18899],[147.1217,-41.12695],[147.14504,-41.12618],[147.14539,-41.12049],[147.16289,-41.12023],[147.16221,-41.10962],[147.18418,-41.10911],[147.18487,-41.08297],[147.2065,-41.08272],[147.20581,-41.07909],[147.26383,-41.08142],[147.26761,-41.11273],[147.28821,-41.11506],[147.28924,-41.19261],[147.30846,-41.19261],[147.30949,-41.23935],[147.41112,-41.24322],[147.4094,-41.27626],[147.43343,-41.26413],[147.47189,-41.26981],[147.47326,-41.27961],[147.50416,-41.28193],[147.53094,-41.29071],[147.53265,-41.31547],[147.55154,-41.31727],[147.55394,-41.32862],[147.57214,-41.3299],[147.57523,-41.34898],[147.59273,-41.35053],[147.59857,-41.36985],[147.61505,-41.3714],[147.61436,-41.39613],[147.63462,-41.39767],[147.63874,-41.44633],[147.66037,-41.44581],[147.6614,-41.45405],[147.65522,-41.45508],[147.65625,-41.50163],[147.6384,-41.50086],[147.63496,-41.5132],[147.61539,-41.50986],[147.61299,-41.5204],[147.59479,-41.5204],[147.59411,-41.52554],[147.579,-41.52477],[147.57729,-41.51706],[147.55531,-41.51783],[147.55497,-41.5222],[147.53506,-41.52297],[147.53712,-41.5443],[147.45266,-41.54482],[147.45266,-41.55946],[147.34795,-41.56023],[147.3476,-41.54019],[147.24461,-41.54122],[147.17045,-41.50755],[147.06513,-41.50279]]],terms_text:"© City of Launceston",icon:"https://www.launceston.tas.gov.au/files/assets/public/templateimages/favicons/favicon-196x196.png"},{id:"CityOfLaunceston_2011",name:"Launceston OrthoPhoto 2011",type:"tms",template:"https://mapping.launceston.tas.gov.au/arcgis/rest/services/Public/OrthoPhoto_Dec2011_10cm/MapServer/tile/{zoom}/{y}/{x}",endDate:"2011-12-01T00:00:00.000Z",startDate:"2011-12-01T00:00:00.000Z",zoomExtent:[10,20],polygon:[[[147.10456,-41.3946],[147.10541,-41.47525],[147.17433,-41.47514],[147.17428,-41.45584],[147.17533,-41.45584],[147.17501,-41.39451],[147.10456,-41.3946]]],terms_text:"© City of Launceston",icon:"https://www.launceston.tas.gov.au/files/assets/public/templateimages/favicons/favicon-196x196.png"},{id:"CityOfLaunceston_2013",name:"Launceston OrthoPhoto 2013",type:"tms",template:"https://mapping.launceston.tas.gov.au/arcgis/rest/services/Public/OrthoPhoto_Feb2013_10cm/MapServer/tile/{zoom}/{y}/{x}",endDate:"2013-02-15T00:00:00.000Z",startDate:"2013-02-15T00:00:00.000Z",zoomExtent:[12,20],polygon:[[[147.06561,-41.5081],[147.06547,-41.36487],[147.23734,-41.36464],[147.23786,-41.50787],[147.06561,-41.5081]]],terms_text:"© City of Launceston",icon:"https://www.launceston.tas.gov.au/files/assets/public/templateimages/favicons/favicon-196x196.png"},{id:"Lausanne-2016",name:"Lausanne - Orthophoto 2016",type:"tms",template:"https://osmdata.asitvd.ch/tiles/lausanne2016/{zoom}/{x}/{y}.png",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[10,20],polygon:[[[6.66668,46.49441],[6.61637,46.49406],[6.61636,46.49836],[6.60135,46.49825],[6.60131,46.50227],[6.55923,46.50194],[6.55773,46.59687],[6.72895,46.59805],[6.7304,46.49004],[6.67702,46.48978],[6.67703,46.49011],[6.67345,46.49006],[6.67347,46.49041],[6.66672,46.49036],[6.66668,46.49441]]],terms_url:"http://carto.lausanne.ch/lausanne-gc/",terms_text:"Ville de Lausanne - Orthophoto 2016"},{id:"linkoping-orto",name:"Linköping Orthophoto",type:"wms",template:"http://kartan.linkoping.se/wms?servicename=wms_ortofoto&FORMAT=image/jpeg&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Kommun_2010_25cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[13,20],polygon:[[[15.36884,58.6305],[15.41279,58.65623],[15.46635,58.6339],[15.54291,58.64408],[15.54119,58.60672],[15.58376,58.6414],[15.7592,58.55267],[15.76675,58.52006],[15.91438,58.51755],[16.08089,58.37148],[15.82718,58.30588],[15.84915,58.21449],[15.65861,58.15513],[15.56763,58.19134],[15.55939,58.14661],[15.50171,58.07679],[15.37777,58.05881],[15.28713,58.1031],[15.27203,58.13483],[15.35889,58.16455],[15.32387,58.38012],[15.24971,58.40027],[15.3582,58.47288],[15.36884,58.6305]]],terms_url:"https://www.linkoping.se/open/",terms_text:"© Linköping municipality",best:true,description:"Orthophotos from the municipality of Linköping 2010, open data",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Linköping_vapen.svg/198px-Linköping_vapen.svg.png"},{id:"LINZ_NZ_Aerial_Imagery",name:"LINZ NZ Aerial Imagery",type:"tms",template:"https://map.cazzaserver.com/linz_aerial/{zoom}/{x}/{y}.png",zoomExtent:[0,21],polygon:[[[167.25037,-47.21957],[167.24487,-47.28016],[167.50305,-47.37975],[168.25012,-47.1561],[168.74451,-46.7963],[169.32678,-46.75492],[169.78271,-46.60417],[170.42542,-46.11133],[170.80444,-45.95115],[170.95276,-45.44086],[171.30981,-44.91036],[171.40869,-44.39062],[172.56226,-43.92955],[172.90283,-43.9691],[173.16101,-43.90977],[173.25989,-43.69568],[172.97424,-43.5366],[172.76001,-43.37711],[173.15002,-43.17714],[173.70483,-42.63396],[174.36401,-41.7836],[174.32007,-41.40978],[174.84741,-41.52914],[175.07263,-41.70573],[175.50659,-41.67291],[176.2262,-41.10833],[176.83044,-40.42604],[177.17102,-39.67337],[177.03918,-39.39375],[177.44568,-39.18118],[177.60498,-39.33005],[177.97852,-39.36828],[178.33557,-38.65978],[178.70911,-37.74466],[178.62671,-37.54458],[178.3136,-37.43125],[177.62146,-37.37889],[177.03918,-37.39635],[176.56128,-37.37016],[176.33606,-37.05956],[176.00647,-36.29742],[175.67688,-36.05354],[174.67163,-35.1783],[173.19397,-34.28445],[172.67761,-34.23451],[172.38647,-34.40238],[172.47986,-34.71904],[172.98523,-35.32185],[173.56201,-36.14231],[174.30908,-37.07709],[174.55627,-38.05242],[174.47937,-38.65549],[174.32556,-38.86537],[173.79822,-38.95941],[173.60596,-39.23225],[173.69934,-39.56335],[174.58923,-39.95607],[174.98474,-40.21664],[174.98474,-40.49292],[174.72107,-40.80549],[174.14978,-40.65147],[173.28186,-40.4344],[172.58972,-40.35073],[172.08435,-40.53468],[171.76575,-40.82628],[171.57349,-41.39742],[171.28235,-41.65239],[170.87585,-42.53284],[170.354,-42.87194],[168.27759,-43.92955],[167.6239,-44.47691],[166.55273,-45.38688],[166.27258,-45.91677],[166.48132,-46.22545],[167.67883,-46.47192],[167.25037,-47.21957]]],terms_url:"https://www.linz.govt.nz/data/licensing-and-using-data/attributing-elevation-or-aerial-imagery-data",terms_text:"Sourced from LINZ CC-BY 4.0",best:true,icon:"https://koordinates.a.ssl.fastly.net/media/settings/branding/favicon-lds.ico"},{id:"LINZ_NZ_Topo50_Gridless_Maps",name:"LINZ NZ Topo50 Gridless Maps",type:"tms",template:"https://map.cazzaserver.com/linz_topo/{zoom}/{x}/{y}.png",zoomExtent:[0,21],polygon:[[[167.25037,-47.21957],[167.24487,-47.28016],[167.50305,-47.37975],[168.25012,-47.1561],[168.74451,-46.7963],[169.32678,-46.75492],[169.78271,-46.60417],[170.42542,-46.11133],[170.80444,-45.95115],[170.95276,-45.44086],[171.30981,-44.91036],[171.40869,-44.39062],[172.56226,-43.92955],[172.90283,-43.9691],[173.16101,-43.90977],[173.25989,-43.69568],[172.97424,-43.5366],[172.76001,-43.37711],[173.15002,-43.17714],[173.70483,-42.63396],[174.36401,-41.7836],[174.32007,-41.40978],[174.84741,-41.52914],[175.07263,-41.70573],[175.50659,-41.67291],[176.2262,-41.10833],[176.83044,-40.42604],[177.17102,-39.67337],[177.03918,-39.39375],[177.44568,-39.18118],[177.60498,-39.33005],[177.97852,-39.36828],[178.33557,-38.65978],[178.70911,-37.74466],[178.62671,-37.54458],[178.3136,-37.43125],[177.62146,-37.37889],[177.03918,-37.39635],[176.56128,-37.37016],[176.33606,-37.05956],[176.00647,-36.29742],[175.67688,-36.05354],[174.67163,-35.1783],[173.19397,-34.28445],[172.67761,-34.23451],[172.38647,-34.40238],[172.47986,-34.71904],[172.98523,-35.32185],[173.56201,-36.14231],[174.30908,-37.07709],[174.55627,-38.05242],[174.47937,-38.65549],[174.32556,-38.86537],[173.79822,-38.95941],[173.60596,-39.23225],[173.69934,-39.56335],[174.58923,-39.95607],[174.98474,-40.21664],[174.98474,-40.49292],[174.72107,-40.80549],[174.14978,-40.65147],[173.28186,-40.4344],[172.58972,-40.35073],[172.08435,-40.53468],[171.76575,-40.82628],[171.57349,-41.39742],[171.28235,-41.65239],[170.87585,-42.53284],[170.354,-42.87194],[168.27759,-43.92955],[167.6239,-44.47691],[166.55273,-45.38688],[166.27258,-45.91677],[166.48132,-46.22545],[167.67883,-46.47192],[167.25037,-47.21957]]],terms_url:"https://data.linz.govt.nz/layer/2343-nz-mainland-topo50-gridless-maps",terms_text:"CC BY 4.0 Land Information New Zealand",icon:"https://koordinates.a.ssl.fastly.net/media/settings/branding/favicon-lds.ico"},{id:"ORT10LT",name:"Lithuania - NŽT ORT10LT",type:"tms",template:"https://ort10lt.openmap.lt/g16/{zoom}/{x}/{y}.jpeg",endDate:"2016-01-01T00:00:00.000Z",startDate:"2010-01-01T00:00:00.000Z",zoomExtent:[4,18],polygon:[[[26.21384,55.85075],[26.38583,55.70453],[26.63036,55.68067],[26.62053,55.56892],[26.52422,55.50992],[26.55415,55.38883],[26.43993,55.34794],[26.79197,55.3212],[26.82913,55.27635],[26.74346,55.25399],[26.67648,55.15883],[26.46112,55.12856],[26.35774,55.15054],[26.22963,55.10732],[26.27138,55.07759],[26.20851,54.99741],[26.06191,54.94161],[25.85782,54.9276],[25.74298,54.81506],[25.76261,54.5769],[25.53194,54.34182],[25.67716,54.32381],[25.78573,54.23362],[25.78588,54.15506],[25.55508,54.14619],[25.51095,54.17503],[25.58967,54.22858],[25.51362,54.30785],[25.26893,54.27447],[25.0706,54.13363],[24.95737,54.17206],[24.81338,54.14486],[24.77902,54.09991],[24.87128,54.0349],[24.81957,53.99772],[24.68459,53.96211],[24.69787,54.01714],[24.62591,54.0105],[24.43426,53.90144],[24.35206,53.89679],[24.20161,53.97001],[23.96833,53.9267],[23.91302,53.96968],[23.77812,53.89892],[23.70977,53.93945],[23.53704,53.94307],[23.48224,53.98938],[23.52734,54.04735],[23.48586,54.15323],[23.38679,54.22484],[23.04212,54.31597],[23.01021,54.3828],[22.85469,54.4104],[22.792,54.36332],[22.70234,54.4529],[22.68386,54.58597],[22.74897,54.63198],[22.74297,54.72682],[22.88668,54.8135],[22.8204,54.91198],[22.6424,54.97134],[22.58924,55.07024],[22.0806,55.02448],[22.03241,55.0841],[21.91307,55.08168],[21.64919,55.18081],[21.50151,55.18682],[21.38437,55.2937],[21.27098,55.24501],[21.09836,55.25639],[20.94217,55.28245],[21.08635,55.56183],[21.03995,55.83636],[21.06403,56.06995],[21.20478,56.08117],[21.2308,56.16233],[21.5021,56.2955],[21.72359,56.31382],[21.83566,56.37162],[21.96954,56.37665],[22.0153,56.42428],[22.43727,56.4064],[22.68,56.35159],[22.91917,56.37902],[22.94668,56.41465],[23.09325,56.30464],[23.17034,56.36677],[23.30645,56.38305],[23.55717,56.33382],[23.7648,56.37332],[23.76669,56.32381],[24.019,56.32976],[24.12146,56.2489],[24.28574,56.30064],[24.45415,56.25816],[24.57947,56.28824],[24.62841,56.37533],[24.90238,56.48053],[25.12774,56.20591],[25.57714,56.18241],[25.67312,56.14937],[26.21384,55.85075]]],terms_url:"https://www.geoportal.lt",terms_text:"NŽT ORT10LT",best:true},{id:"mapbox_locator_overlay",name:"Locator Overlay",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/openstreetmap.map-inh76ba2/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJjaml5MjVyb3MwMWV0M3hxYmUzdGdwbzE4In0.q548FjhsSJzvXsGlPsFxAQ",zoomExtent:[0,16],overzoom:false,terms_url:"https://www.mapbox.com/about/maps",terms_text:"Terms & Feedback","default":true,description:"Shows major features to help orient you.",overlay:true},{id:"Lodz-buildings",name:"Łódź: Buildings",type:"wms",template:"http://gis.mapa.lodz.pl/awiskts/services/WMS_publikowane/LODZ/MapServer/WMSServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Budynki,Ulice,Adresy&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[19.55046,51.68509],[19.53843,51.68518],[19.53858,51.68067],[19.50381,51.68085],[19.50351,51.68564],[19.48084,51.68589],[19.48063,51.6815],[19.43517,51.68168],[19.43517,51.67754],[19.41155,51.67791],[19.41214,51.68703],[19.37723,51.68739],[19.37723,51.69172],[19.34216,51.692],[19.34291,51.70544],[19.33132,51.70572],[19.33176,51.71474],[19.31988,51.71493],[19.32077,51.74612],[19.33206,51.74612],[19.33251,51.75513],[19.32107,51.75532],[19.32225,51.79108],[19.31052,51.79126],[19.31141,51.81387],[19.323,51.81359],[19.32389,51.82709],[19.33488,51.82718],[19.33473,51.84481],[19.39342,51.84444],[19.39342,51.84022],[19.42789,51.83985],[19.42834,51.85738],[19.4634,51.85701],[19.4634,51.86133],[19.47499,51.86133],[19.47529,51.86601],[19.52194,51.86509],[19.52238,51.85619],[19.568,51.85582],[19.56785,51.85105],[19.57944,51.85105],[19.57825,51.82397],[19.63649,51.82342],[19.63411,51.76488],[19.65759,51.7647],[19.65714,51.74676],[19.64496,51.74695],[19.64421,51.7152],[19.63337,51.7152],[19.63322,51.70167],[19.62059,51.70167],[19.62044,51.68868],[19.55032,51.68942],[19.55046,51.68509]]],terms_text:"Urząd Miasta Łodzi",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/dOrthophotomap2017(aerialimage).png"},{id:"Lodz-2015",name:"Łódź: Orthophotomap 2015 (aerial image)",type:"wms",template:"http://gis.mapa.lodz.pl/awiskts/services/Ortofotomapa/Ortofotomapa/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[19.55046,51.68509],[19.53843,51.68518],[19.53858,51.68067],[19.50381,51.68085],[19.50351,51.68564],[19.48084,51.68589],[19.48063,51.6815],[19.43517,51.68168],[19.43517,51.67754],[19.41155,51.67791],[19.41214,51.68703],[19.37723,51.68739],[19.37723,51.69172],[19.34216,51.692],[19.34291,51.70544],[19.33132,51.70572],[19.33176,51.71474],[19.31988,51.71493],[19.32077,51.74612],[19.33206,51.74612],[19.33251,51.75513],[19.32107,51.75532],[19.32225,51.79108],[19.31052,51.79126],[19.31141,51.81387],[19.323,51.81359],[19.32389,51.82709],[19.33488,51.82718],[19.33473,51.84481],[19.39342,51.84444],[19.39342,51.84022],[19.42789,51.83985],[19.42834,51.85738],[19.4634,51.85701],[19.4634,51.86133],[19.47499,51.86133],[19.47529,51.86601],[19.52194,51.86509],[19.52238,51.85619],[19.568,51.85582],[19.56785,51.85105],[19.57944,51.85105],[19.57825,51.82397],[19.63649,51.82342],[19.63411,51.76488],[19.65759,51.7647],[19.65714,51.74676],[19.64496,51.74695],[19.64421,51.7152],[19.63337,51.7152],[19.63322,51.70167],[19.62059,51.70167],[19.62044,51.68868],[19.55032,51.68942],[19.55046,51.68509]]],terms_text:"Urząd Miasta Łodzi",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/dOrthophotomap2017(aerialimage).png"},{id:"Lodz-2017",name:"Łódź: Orthophotomap 2017 (aerial image)",type:"wms",template:"https://mapa.lodz.pl/3/services/OGC/Ortofotomapa/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[19.55046,51.68509],[19.53843,51.68518],[19.53858,51.68067],[19.50381,51.68085],[19.50351,51.68564],[19.48084,51.68589],[19.48063,51.6815],[19.43517,51.68168],[19.43517,51.67754],[19.41155,51.67791],[19.41214,51.68703],[19.37723,51.68739],[19.37723,51.69172],[19.34216,51.692],[19.34291,51.70544],[19.33132,51.70572],[19.33176,51.71474],[19.31988,51.71493],[19.32077,51.74612],[19.33206,51.74612],[19.33251,51.75513],[19.32107,51.75532],[19.32225,51.79108],[19.31052,51.79126],[19.31141,51.81387],[19.323,51.81359],[19.32389,51.82709],[19.33488,51.82718],[19.33473,51.84481],[19.39342,51.84444],[19.39342,51.84022],[19.42789,51.83985],[19.42834,51.85738],[19.4634,51.85701],[19.4634,51.86133],[19.47499,51.86133],[19.47529,51.86601],[19.52194,51.86509],[19.52238,51.85619],[19.568,51.85582],[19.56785,51.85105],[19.57944,51.85105],[19.57825,51.82397],[19.63649,51.82342],[19.63411,51.76488],[19.65759,51.7647],[19.65714,51.74676],[19.64496,51.74695],[19.64421,51.7152],[19.63337,51.7152],[19.63322,51.70167],[19.62059,51.70167],[19.62044,51.68868],[19.55032,51.68942],[19.55046,51.68509]]],terms_text:"Urząd Miasta Łodzi",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/dOrthophotomap2017(aerialimage).png"},{id:"Loire_Atlantique-Orthophotos-2012",name:"Loire-Atlantique - Orthophotos 2012 - 20 cm",type:"tms",template:"http://{switch:a,b,c,d,e,f,g,h}.tiles.cg44.makina-corpus.net/ortho-2012/{zoom}/{x}/{-y}.jpg",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-1.48638,46.87691],[-1.54437,46.84873],[-1.73468,46.87246],[-1.89276,46.94234],[-1.95475,46.98084],[-2.07067,47.08521],[-2.2678,47.12656],[-2.22627,47.17124],[-2.19217,47.16914],[-2.19341,47.25546],[-2.29694,47.22769],[-2.41658,47.25336],[-2.54862,47.28575],[-2.63913,47.41678],[-2.50573,47.50812],[-2.31063,47.53021],[-2.24836,47.52384],[-2.23223,47.51499],[-2.12109,47.54674],[-2.11783,47.60126],[-2.1001,47.61123],[-2.09981,47.62005],[-2.11141,47.62873],[-2.10055,47.65141],[-2.08121,47.66578],[-1.98016,47.70751],[-1.83077,47.72419],[-1.67455,47.72544],[-1.63735,47.77463],[-1.49601,47.81752],[-1.49911,47.84166],[-1.38133,47.84415],[-1.346,47.81086],[-1.23007,47.78587],[-1.21643,47.75838],[-1.22635,47.73628],[-1.21086,47.7317],[-1.18668,47.73462],[-1.15196,47.69332],[-1.13151,47.63654],[-1.09121,47.6332],[-0.99265,47.6027],[-0.98459,47.58598],[-1.0317,47.55001],[-1.13585,47.55628],[-1.13275,47.5161],[-1.0317,47.51778],[-0.94863,47.50103],[-0.93686,47.47715],[-0.93376,47.43859],[-0.9009,47.39874],[-0.92694,47.37482],[-0.97157,47.35845],[-1.28339,47.32736],[-1.23379,47.26093],[-1.20032,47.26935],[-1.16498,47.24957],[-1.14143,47.1763],[-1.1563,47.15818],[-1.20652,47.12402],[-1.20838,47.10968],[-1.15568,47.10504],[-1.14081,47.08056],[-1.09431,47.0717],[-1.09989,47.03199],[-1.14453,47.01636],[-1.21582,47.02904],[-1.26727,47.06325],[-1.28524,47.02185],[-1.34972,47.02397],[-1.33918,46.969],[-1.3491,46.94446],[-1.45014,46.91186],[-1.47504,46.9176],[-1.48775,46.93063],[-1.49235,46.98433],[-1.48644,46.99943],[-1.49213,47.02722],[-1.52764,47.00541],[-1.52961,46.97252],[-1.50507,46.94439],[-1.50222,46.92973],[-1.51142,46.91371],[-1.48622,46.89724],[-1.48638,46.87691]]],terms_url:"http://data2.loire-atlantique.fr/licences/",terms_text:"Département de Loire-Atlantique"},{id:"Loire_Atlantique-Orthophotos-2016",name:"Loire-Atlantique - Orthophotos 2016 - 10 cm",type:"wms",template:"https://wms-vuduciel2.makina-corpus.net/geoserver/wms?SERVICE=WMS&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=cg44:ortho44-2016&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-1.48638,46.87691],[-1.54437,46.84873],[-1.73468,46.87246],[-1.89276,46.94234],[-1.95475,46.98084],[-2.07067,47.08521],[-2.2678,47.12656],[-2.22627,47.17124],[-2.19217,47.16914],[-2.19341,47.25546],[-2.29694,47.22769],[-2.41658,47.25336],[-2.54862,47.28575],[-2.63913,47.41678],[-2.50573,47.50812],[-2.31063,47.53021],[-2.24836,47.52384],[-2.23223,47.51499],[-2.12109,47.54674],[-2.11783,47.60126],[-2.1001,47.61123],[-2.09981,47.62005],[-2.11141,47.62873],[-2.10055,47.65141],[-2.08121,47.66578],[-1.98016,47.70751],[-1.83077,47.72419],[-1.67455,47.72544],[-1.63735,47.77463],[-1.49601,47.81752],[-1.49911,47.84166],[-1.38133,47.84415],[-1.346,47.81086],[-1.23007,47.78587],[-1.21643,47.75838],[-1.22635,47.73628],[-1.21086,47.7317],[-1.18668,47.73462],[-1.15196,47.69332],[-1.13151,47.63654],[-1.09121,47.6332],[-0.99265,47.6027],[-0.98459,47.58598],[-1.0317,47.55001],[-1.13585,47.55628],[-1.13275,47.5161],[-1.0317,47.51778],[-0.94863,47.50103],[-0.93686,47.47715],[-0.93376,47.43859],[-0.9009,47.39874],[-0.92694,47.37482],[-0.97157,47.35845],[-1.28339,47.32736],[-1.23379,47.26093],[-1.20032,47.26935],[-1.16498,47.24957],[-1.14143,47.1763],[-1.1563,47.15818],[-1.20652,47.12402],[-1.20838,47.10968],[-1.15568,47.10504],[-1.14081,47.08056],[-1.09431,47.0717],[-1.09989,47.03199],[-1.14453,47.01636],[-1.21582,47.02904],[-1.26727,47.06325],[-1.28524,47.02185],[-1.34972,47.02397],[-1.33918,46.969],[-1.3491,46.94446],[-1.45014,46.91186],[-1.47504,46.9176],[-1.48775,46.93063],[-1.49235,46.98433],[-1.48644,46.99943],[-1.49213,47.02722],[-1.52764,47.00541],[-1.52961,46.97252],[-1.50507,46.94439],[-1.50222,46.92973],[-1.51142,46.91371],[-1.48622,46.89724],[-1.48638,46.87691]]],terms_url:"http://data2.loire-atlantique.fr/licences/",terms_text:"© Loire-Atlantique ouverture des données publiques"},{id:"Lombardia-Italy-CTR-DBT",name:"Lombardia - Italy (CTR DBT)",type:"wms",template:"https://www.cartografia.servizirl.it/arcgis/services/wms/ctr_wms/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Sfondo%20C.T.R.%2010000&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[8.4816,45.28938],[8.63085,45.01372],[8.78009,44.98189],[8.86775,45.02712],[9.07148,44.80063],[9.14966,44.79055],[9.19467,44.67106],[9.31549,44.65758],[9.36997,44.698],[9.37945,44.82752],[9.33207,44.91483],[9.41025,45.03716],[9.78692,45.04386],[9.78692,45.00032],[9.93853,45.002],[9.93379,45.08903],[10.00013,45.09071],[10.00013,44.99697],[10.20149,45.002],[10.20149,44.95004],[10.40523,44.9534],[10.40523,44.90476],[10.49288,44.90308],[10.49288,44.8628],[10.6516,44.85776],[10.64686,44.90308],[11.35282,44.89469],[11.35519,44.93663],[11.45706,44.93328],[11.44758,44.97351],[11.3623,45.00032],[11.35282,45.09238],[11.25806,45.09572],[11.25806,45.13752],[11.16094,45.14253],[11.16094,45.18262],[11.05196,45.19097],[11.05196,45.23436],[10.9572,45.23269],[10.9572,45.28605],[10.8577,45.28438],[10.85534,45.32271],[10.74636,45.32937],[10.75347,45.47408],[10.64686,45.48073],[10.60301,45.51074],[10.57636,45.47379],[10.53549,45.50036],[10.59116,45.53148],[10.61666,45.61304],[10.87429,45.84001],[10.82217,45.85982],[10.67529,45.85817],[10.57342,45.8103],[10.58624,46.00773],[10.5016,46.01596],[10.59325,46.11529],[10.60896,46.35583],[10.65634,46.38688],[10.64686,46.46037],[10.4147,46.57285],[10.32705,46.56797],[10.25124,46.65422],[10.07357,46.62494],[10.02382,46.53212],[10.02855,46.43588],[10.07357,46.39832],[10.12095,46.39669],[10.0783,46.32802],[10.14464,46.26582],[10.10436,46.24781],[9.97407,46.40812],[9.71111,46.3689],[9.68742,46.32312],[9.61872,46.30675],[9.55712,46.32475],[9.50264,46.39015],[9.47895,46.5256],[9.25626,46.51582],[9.22546,46.44078],[9.27284,46.34438],[9.17098,46.19044],[9.04305,46.12808],[9.062,46.09195],[8.97435,46.04593],[8.98856,46.00152],[8.93882,45.97354],[9.04068,45.8961],[9.01936,45.84827],[8.84879,46.0081],[8.89854,46.07059],[8.8251,46.11823],[8.70902,46.11659],[8.67823,46.07552],[8.7185,46.01468],[8.55504,45.90434],[8.59768,45.83836],[8.53372,45.79378],[8.6877,45.49235],[8.78009,45.41591],[8.68533,45.37931],[8.71139,45.34103],[8.69481,45.32104],[8.62848,45.37765],[8.5124,45.35768],[8.4816,45.28938]]],terms_url:"https://www.dati.gov.it/content/italian-open-data-license-v20",terms_text:"CTR DBT 10000 Regione Lombardia"},{id:"Lombardia-Italy-CTR",name:"Lombardia - Italy (CTR)",type:"wms",template:"https://www.cartografia.regione.lombardia.it/ArcGIS10/services/wms/ctr_wms/MapServer/WMSServer?STYLES=&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[8.4816,45.28938],[8.63085,45.01372],[8.78009,44.98189],[8.86775,45.02712],[9.07148,44.80063],[9.14966,44.79055],[9.19467,44.67106],[9.31549,44.65758],[9.36997,44.698],[9.37945,44.82752],[9.33207,44.91483],[9.41025,45.03716],[9.78692,45.04386],[9.78692,45.00032],[9.93853,45.002],[9.93379,45.08903],[10.00013,45.09071],[10.00013,44.99697],[10.20149,45.002],[10.20149,44.95004],[10.40523,44.9534],[10.40523,44.90476],[10.49288,44.90308],[10.49288,44.8628],[10.6516,44.85776],[10.64686,44.90308],[11.35282,44.89469],[11.35519,44.93663],[11.45706,44.93328],[11.44758,44.97351],[11.3623,45.00032],[11.35282,45.09238],[11.25806,45.09572],[11.25806,45.13752],[11.16094,45.14253],[11.16094,45.18262],[11.05196,45.19097],[11.05196,45.23436],[10.9572,45.23269],[10.9572,45.28605],[10.8577,45.28438],[10.85534,45.32271],[10.74636,45.32937],[10.75347,45.47408],[10.64686,45.48073],[10.60301,45.51074],[10.57636,45.47379],[10.53549,45.50036],[10.59116,45.53148],[10.61666,45.61304],[10.87429,45.84001],[10.82217,45.85982],[10.67529,45.85817],[10.57342,45.8103],[10.58624,46.00773],[10.5016,46.01596],[10.59325,46.11529],[10.60896,46.35583],[10.65634,46.38688],[10.64686,46.46037],[10.4147,46.57285],[10.32705,46.56797],[10.25124,46.65422],[10.07357,46.62494],[10.02382,46.53212],[10.02855,46.43588],[10.07357,46.39832],[10.12095,46.39669],[10.0783,46.32802],[10.14464,46.26582],[10.10436,46.24781],[9.97407,46.40812],[9.71111,46.3689],[9.68742,46.32312],[9.61872,46.30675],[9.55712,46.32475],[9.50264,46.39015],[9.47895,46.5256],[9.25626,46.51582],[9.22546,46.44078],[9.27284,46.34438],[9.17098,46.19044],[9.04305,46.12808],[9.062,46.09195],[8.97435,46.04593],[8.98856,46.00152],[8.93882,45.97354],[9.04068,45.8961],[9.01936,45.84827],[8.84879,46.0081],[8.89854,46.07059],[8.8251,46.11823],[8.70902,46.11659],[8.67823,46.07552],[8.7185,46.01468],[8.55504,45.90434],[8.59768,45.83836],[8.53372,45.79378],[8.6877,45.49235],[8.78009,45.41591],[8.68533,45.37931],[8.71139,45.34103],[8.69481,45.32104],[8.62848,45.37765],[8.5124,45.35768],[8.4816,45.28938]]],terms_url:"https://www.dati.gov.it/content/italian-open-data-license-v20",terms_text:"Regione Lombardia - Infrastruttura per l'informazione territoriale"},{id:"londrina2011",name:"Londrina Ortofoto 2011",type:"tms",template:"https://siglon.londrina.pr.gov.br/arcgis/rest/services/Imagens/Ortofotos_2011_Paranacidade/MapServer/WMTS/tile/1.0.0/Imagens_Ortofotos_2011_Paranacidade/default/GoogleMapsCompatible/{zoom}/{y}/{x}",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-51.10903,-23.39275],[-51.11015,-23.39112],[-51.11198,-23.3896],[-51.11358,-23.38977],[-51.121,-23.38593],[-51.12225,-23.38511],[-51.12483,-23.3835],[-51.12538,-23.38187],[-51.12482,-23.3777],[-51.12446,-23.37505],[-51.12437,-23.3723],[-51.12244,-23.37033],[-51.12302,-23.36643],[-51.12856,-23.36548],[-51.12832,-23.35884],[-51.12477,-23.35476],[-51.12703,-23.35091],[-51.12412,-23.3468],[-51.12025,-23.34781],[-51.11765,-23.33969],[-51.11265,-23.34129],[-51.1094,-23.33489],[-51.10756,-23.33409],[-51.10486,-23.33398],[-51.10253,-23.33419],[-51.09987,-23.33102],[-51.09801,-23.32936],[-51.09999,-23.32831],[-51.10323,-23.32532],[-51.10473,-23.32319],[-51.10466,-23.32129],[-51.10515,-23.31844],[-51.10636,-23.31575],[-51.10661,-23.31467],[-51.1105,-23.31167],[-51.11158,-23.30842],[-51.0995,-23.30947],[-51.0974,-23.30863],[-51.09512,-23.30745],[-51.09202,-23.30494],[-51.09036,-23.30371],[-51.09205,-23.29875],[-51.09269,-23.2975],[-51.09408,-23.29295],[-51.10074,-23.29332],[-51.10102,-23.28871],[-51.10068,-23.28837],[-51.10085,-23.28778],[-51.09938,-23.28664],[-51.09632,-23.27791],[-51.10285,-23.27302],[-51.10836,-23.27034],[-51.1131,-23.2684],[-51.1316,-23.26534],[-51.13188,-23.26201],[-51.13173,-23.25506],[-51.1329,-23.25468],[-51.13296,-23.25075],[-51.13474,-23.25127],[-51.13534,-23.25133],[-51.13517,-23.24359],[-51.13535,-23.24118],[-51.13752,-23.24219],[-51.13885,-23.2435],[-51.14109,-23.24521],[-51.14717,-23.24318],[-51.14761,-23.23828],[-51.14908,-23.23588],[-51.14977,-23.23681],[-51.15139,-23.23854],[-51.15289,-23.23884],[-51.15384,-23.23895],[-51.1582,-23.23814],[-51.16045,-23.23816],[-51.16035,-23.24658],[-51.15912,-23.24783],[-51.16131,-23.24777],[-51.16659,-23.24594],[-51.17193,-23.24582],[-51.17205,-23.24956],[-51.17424,-23.2484],[-51.17514,-23.24932],[-51.17686,-23.24816],[-51.17947,-23.25169],[-51.18135,-23.25381],[-51.18274,-23.25363],[-51.18379,-23.25326],[-51.18496,-23.2533],[-51.18627,-23.25215],[-51.18665,-23.24748],[-51.19118,-23.24914],[-51.19142,-23.25286],[-51.19369,-23.25278],[-51.19384,-23.26074],[-51.20097,-23.26055],[-51.20127,-23.2426],[-51.20994,-23.24278],[-51.2109,-23.26988],[-51.21969,-23.27222],[-51.22597,-23.27453],[-51.22934,-23.2786],[-51.23452,-23.2816],[-51.23498,-23.28325],[-51.23507,-23.28544],[-51.23371,-23.2859],[-51.23216,-23.28802],[-51.2287,-23.29229],[-51.2274,-23.2946],[-51.22679,-23.29548],[-51.2256,-23.29657],[-51.22393,-23.29721],[-51.22048,-23.30073],[-51.21864,-23.3013],[-51.21668,-23.30212],[-51.21424,-23.30441],[-51.21097,-23.30697],[-51.22328,-23.3183],[-51.22439,-23.31459],[-51.22521,-23.31289],[-51.22512,-23.31258],[-51.22521,-23.31251],[-51.22553,-23.31253],[-51.22595,-23.31239],[-51.22617,-23.31183],[-51.22936,-23.31489],[-51.22802,-23.31661],[-51.22789,-23.31902],[-51.22767,-23.32023],[-51.22723,-23.32151],[-51.22739,-23.32223],[-51.22725,-23.32285],[-51.23033,-23.32558],[-51.23046,-23.32671],[-51.22954,-23.32789],[-51.22916,-23.3305],[-51.22929,-23.33178],[-51.22681,-23.33447],[-51.22602,-23.33657],[-51.22473,-23.33839],[-51.2221,-23.34023],[-51.22257,-23.34196],[-51.22381,-23.34339],[-51.22384,-23.34531],[-51.22441,-23.347],[-51.22454,-23.34829],[-51.22404,-23.34968],[-51.22351,-23.35011],[-51.22382,-23.35077],[-51.22305,-23.35174],[-51.2226,-23.35296],[-51.22587,-23.35481],[-51.2265,-23.36706],[-51.22354,-23.36915],[-51.22367,-23.37968],[-51.22038,-23.38163],[-51.21647,-23.3817],[-51.21416,-23.37995],[-51.20928,-23.37395],[-51.20738,-23.36814],[-51.20629,-23.36723],[-51.20472,-23.36627],[-51.19823,-23.36668],[-51.19297,-23.36651],[-51.18986,-23.36544],[-51.18806,-23.36464],[-51.18718,-23.36453],[-51.1858,-23.36374],[-51.18304,-23.36359],[-51.18071,-23.36376],[-51.17907,-23.36158],[-51.17764,-23.35836],[-51.16684,-23.35626],[-51.16614,-23.35854],[-51.16476,-23.36039],[-51.16077,-23.35922],[-51.15983,-23.3666],[-51.16204,-23.36861],[-51.16276,-23.37416],[-51.15845,-23.3758],[-51.15505,-23.37631],[-51.15396,-23.37903],[-51.15299,-23.38105],[-51.15119,-23.38208],[-51.14917,-23.38251],[-51.14722,-23.38216],[-51.14518,-23.38259],[-51.1441,-23.38376],[-51.14512,-23.38808],[-51.1418,-23.3894],[-51.14031,-23.3888],[-51.14068,-23.39161],[-51.14127,-23.39354],[-51.14094,-23.39443],[-51.14046,-23.39536],[-51.13939,-23.3951],[-51.13739,-23.39315],[-51.13609,-23.3898],[-51.13429,-23.38976],[-51.13216,-23.39007],[-51.13172,-23.39286],[-51.12259,-23.38864],[-51.12228,-23.39166],[-51.11883,-23.39317],[-51.11568,-23.39335],[-51.10903,-23.39275]],[[-51.13829,-23.41601],[-51.13331,-23.41867],[-51.13209,-23.41644],[-51.13002,-23.41829],[-51.12869,-23.41901],[-51.12824,-23.42103],[-51.12696,-23.42186],[-51.12533,-23.42269],[-51.12445,-23.42097],[-51.12151,-23.42411],[-51.12063,-23.42327],[-51.11971,-23.42312],[-51.11977,-23.42157],[-51.1188,-23.42155],[-51.11643,-23.42084],[-51.11943,-23.41917],[-51.11787,-23.41678],[-51.11655,-23.41731],[-51.1157,-23.4157],[-51.11512,-23.41309],[-51.11908,-23.41111],[-51.1196,-23.4117],[-51.12052,-23.41489],[-51.12148,-23.41714],[-51.12309,-23.41863],[-51.12755,-23.41654],[-51.12803,-23.4174],[-51.1312,-23.41557],[-51.1308,-23.41477],[-51.13279,-23.41264],[-51.13522,-23.41106],[-51.13586,-23.41096],[-51.13682,-23.41119],[-51.13721,-23.41158],[-51.1373,-23.41324],[-51.13743,-23.41471],[-51.13829,-23.41601]],[[-51.18929,-23.61469],[-51.18869,-23.61385],[-51.18818,-23.61339],[-51.18731,-23.61302],[-51.18629,-23.61314],[-51.18402,-23.61396],[-51.18349,-23.61397],[-51.18183,-23.61284],[-51.1814,-23.61344],[-51.18063,-23.61314],[-51.18001,-23.61409],[-51.17866,-23.61329],[-51.18065,-23.6106],[-51.17972,-23.61018],[-51.18062,-23.60849],[-51.18212,-23.6085],[-51.18261,-23.60775],[-51.1832,-23.60804],[-51.18415,-23.60628],[-51.18511,-23.60666],[-51.18649,-23.6047],[-51.18902,-23.6061],[-51.18821,-23.60742],[-51.18919,-23.60802],[-51.1889,-23.60953],[-51.18962,-23.60993],[-51.19119,-23.61119],[-51.19015,-23.61245],[-51.19054,-23.61276],[-51.19029,-23.61378],[-51.18929,-23.61469]],[[-51.08006,-23.52984],[-51.07962,-23.52205],[-51.08468,-23.52194],[-51.08582,-23.52404],[-51.08589,-23.52704],[-51.08579,-23.52777],[-51.0853,-23.52806],[-51.08514,-23.52857],[-51.08512,-23.52982],[-51.08471,-23.53024],[-51.08343,-23.53024],[-51.0833,-23.52978],[-51.08006,-23.52984]]],terms_url:"http://siglon.londrina.pr.gov.br",terms_text:"Prefeitura do Londrinas, PR"},{id:"LPI_NSW_Administrative_Boundaries_County",name:"LPI NSW Administrative Boundaries County",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=4&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico",overlay:true},{id:"LPI_NSW_Administrative_Boundaries_LGA",name:"LPI NSW Administrative Boundaries LGA",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=6&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico",overlay:true},{id:"LPI_NSW_Administrative_Boundaries_NPWS_Reserve",name:"LPI NSW Administrative Boundaries NPWS Reserve",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=1&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico",overlay:true},{id:"LPI_NSW_Administrative_Boundaries_Parish",name:"LPI NSW Administrative Boundaries Parish",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=3&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico",overlay:true},{id:"LPI_NSW_Administrative_Boundaries_StateForest",name:"LPI NSW Administrative Boundaries State Forest",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=2&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico",overlay:true},{id:"LPI_NSW_Administrative_Boundaries_Suburb",name:"LPI NSW Administrative Boundaries Suburb",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=7&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico",overlay:true},{id:"NSW_LPI_BaseMap",name:"LPI NSW Base Map",type:"tms",template:"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Base_Map/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[1,19],polygon:[[[140.99486,-28.95297],[148.96114,-28.89977],[148.98701,-28.48623],[151.01361,-28.47865],[151.10847,-28.70329],[151.87599,-28.68312],[151.93348,-28.40788],[152.25544,-28.23327],[153.06608,-28.21047],[153.14082,-28.1091],[153.47351,-28.11648],[153.35765,-27.69361],[159.49383,-27.69925],[159.4857,-37.84741],[149.52569,-37.82815],[149.91596,-37.487],[148.04859,-36.81317],[147.9681,-36.15679],[146.71477,-36.28666],[145.30046,-36.15679],[144.53007,-36.14751],[142.8398,-35.02543],[142.35686,-34.78025],[141.97741,-34.40162],[140.99503,-34.13718],[140.99486,-28.95297]]],terms_url:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico"},{id:"NSW_LPI_Imagery",name:"LPI NSW Imagery",type:"tms",template:"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Imagery/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[1,21],polygon:[[[140.98687,-28.98878],[148.99515,-28.97275],[148.99667,-28.49151],[151.0029,-28.49307],[151.0029,-28.72617],[151.49151,-28.73239],[151.49187,-28.71553],[151.92282,-28.71964],[151.92516,-28.48971],[151.99559,-28.48987],[151.99899,-28.11927],[152.49676,-28.12209],[152.49682,-28.11464],[153.00446,-28.11544],[153.00446,-28.1204],[153.50386,-28.11934],[153.50393,-28.12271],[153.59194,-28.12236],[153.59266,-28.17769],[153.61112,-28.17579],[153.61139,-28.18252],[153.74268,-28.21621],[153.77873,-28.71091],[152.6238,-32.58772],[152.3124,-32.63288],[151.41419,-33.57904],[150.89299,-35.26487],[150.46207,-35.77773],[150.01565,-37.51036],[149.99181,-37.51268],[149.51978,-37.51307],[149.51996,-37.52169],[149.4463,-37.53537],[149.06334,-37.5358],[148.98366,-37.52176],[148.98169,-37.5192],[148.98638,-37.2585],[148.48754,-37.26585],[148.48248,-37.00927],[147.99439,-37.01434],[147.98829,-36.53322],[147.95297,-36.52607],[147.94865,-36.0686],[147.5035,-36.07168],[147.50477,-36.2651],[146.492,-36.26613],[146.49225,-36.2565],[145.99298,-36.25343],[145.99659,-36.01881],[145.98316,-36.01871],[145.96245,-36.0219],[145.94624,-36.01209],[145.94543,-36.00603],[145.50415,-36.00136],[145.50379,-36.01091],[145.0072,-36.00362],[145.00354,-36.15204],[144.48608,-36.14231],[144.48741,-36.01375],[143.98747,-36.00241],[143.99329,-35.57238],[143.49717,-35.58371],[143.4918,-35.40656],[143.46134,-35.36749],[143.45856,-35.35559],[143.48978,-35.33965],[143.48955,-35.33221],[143.4317,-35.25706],[143.25055,-35.26066],[143.24384,-35.01327],[142.99333,-35.01772],[142.99198,-34.79619],[142.49714,-34.80323],[142.49732,-34.80076],[142.42114,-34.80176],[142.42092,-34.78383],[142.23309,-34.78592],[142.23077,-34.78075],[142.227,-34.50613],[141.99753,-34.50837],[141.9946,-34.25267],[141.49823,-34.25569],[141.49817,-34.25228],[140.99454,-34.25284],[140.98687,-28.98878]],[[159.22678,-31.74407],[159.26398,-31.74399],[159.28989,-31.77428],[159.28993,-31.79393],[159.26157,-31.79395],[159.22682,-31.75483],[159.22678,-31.74407]],[[159.03784,-31.49819],[159.04448,-31.5006],[159.04619,-31.49734],[159.04888,-31.49829],[159.04884,-31.48423],[159.06882,-31.48423],[159.06991,-31.482],[159.08317,-31.48203],[159.08203,-31.48434],[159.08205,-31.49567],[159.08564,-31.49703],[159.08383,-31.50058],[159.09007,-31.5026],[159.08682,-31.50859],[159.09433,-31.51136],[159.09174,-31.51585],[159.09537,-31.51724],[159.10276,-31.52611],[159.1161,-31.53006],[159.11422,-31.5342],[159.11875,-31.53417],[159.1193,-31.54888],[159.12618,-31.55796],[159.11841,-31.56323],[159.11553,-31.55983],[159.1115,-31.55983],[159.11154,-31.60158],[159.08954,-31.6016],[159.08626,-31.60845],[159.07954,-31.60611],[159.07714,-31.61149],[159.05943,-31.61155],[159.05296,-31.60369],[159.05893,-31.59087],[159.05891,-31.57897],[159.05541,-31.57773],[159.05735,-31.57387],[159.05585,-31.57333],[159.05038,-31.57335],[159.05035,-31.56329],[159.0463,-31.5619],[159.04847,-31.55793],[159.04237,-31.55601],[159.04533,-31.55038],[159.03783,-31.54763],[159.03802,-31.54723],[159.03487,-31.54724],[159.03487,-31.54383],[159.03244,-31.54297],[159.03461,-31.53808],[159.02754,-31.53554],[159.02964,-31.53159],[159.02305,-31.52935],[159.03784,-31.49819]]],terms_url:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",best:true,icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico"},{id:"NSW_LPI_Imagery_Dates",name:"LPI NSW Imagery Dates",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Imagery_Dates/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=0&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[0,21],polygon:[[[140.98687,-28.98878],[148.99515,-28.97275],[148.99667,-28.49151],[151.0029,-28.49307],[151.0029,-28.72617],[151.49151,-28.73239],[151.49187,-28.71553],[151.92282,-28.71964],[151.92516,-28.48971],[151.99559,-28.48987],[151.99899,-28.11927],[152.49676,-28.12209],[152.49682,-28.11464],[153.00446,-28.11544],[153.00446,-28.1204],[153.50386,-28.11934],[153.50393,-28.12271],[153.59194,-28.12236],[153.59266,-28.17769],[153.61112,-28.17579],[153.61139,-28.18252],[153.74268,-28.21621],[153.77873,-28.71091],[152.6238,-32.58772],[152.3124,-32.63288],[151.41419,-33.57904],[150.89299,-35.26487],[150.46207,-35.77773],[150.01565,-37.51036],[149.99181,-37.51268],[149.51978,-37.51307],[149.51996,-37.52169],[149.4463,-37.53537],[149.06334,-37.5358],[148.98366,-37.52176],[148.98169,-37.5192],[148.98638,-37.2585],[148.48754,-37.26585],[148.48248,-37.00927],[147.99439,-37.01434],[147.98829,-36.53322],[147.95297,-36.52607],[147.94865,-36.0686],[147.5035,-36.07168],[147.50477,-36.2651],[146.492,-36.26613],[146.49225,-36.2565],[145.99298,-36.25343],[145.99659,-36.01881],[145.98316,-36.01871],[145.96245,-36.0219],[145.94624,-36.01209],[145.94543,-36.00603],[145.50415,-36.00136],[145.50379,-36.01091],[145.0072,-36.00362],[145.00354,-36.15204],[144.48608,-36.14231],[144.48741,-36.01375],[143.98747,-36.00241],[143.99329,-35.57238],[143.49717,-35.58371],[143.4918,-35.40656],[143.46134,-35.36749],[143.45856,-35.35559],[143.48978,-35.33965],[143.48955,-35.33221],[143.4317,-35.25706],[143.25055,-35.26066],[143.24384,-35.01327],[142.99333,-35.01772],[142.99198,-34.79619],[142.49714,-34.80323],[142.49732,-34.80076],[142.42114,-34.80176],[142.42092,-34.78383],[142.23309,-34.78592],[142.23077,-34.78075],[142.227,-34.50613],[141.99753,-34.50837],[141.9946,-34.25267],[141.49823,-34.25569],[141.49817,-34.25228],[140.99454,-34.25284],[140.98687,-28.98878]],[[159.22678,-31.74407],[159.26398,-31.74399],[159.28989,-31.77428],[159.28993,-31.79393],[159.26157,-31.79395],[159.22682,-31.75483],[159.22678,-31.74407]],[[159.03784,-31.49819],[159.04448,-31.5006],[159.04619,-31.49734],[159.04888,-31.49829],[159.04884,-31.48423],[159.06882,-31.48423],[159.06991,-31.482],[159.08317,-31.48203],[159.08203,-31.48434],[159.08205,-31.49567],[159.08564,-31.49703],[159.08383,-31.50058],[159.09007,-31.5026],[159.08682,-31.50859],[159.09433,-31.51136],[159.09174,-31.51585],[159.09537,-31.51724],[159.10276,-31.52611],[159.1161,-31.53006],[159.11422,-31.5342],[159.11875,-31.53417],[159.1193,-31.54888],[159.12618,-31.55796],[159.11841,-31.56323],[159.11553,-31.55983],[159.1115,-31.55983],[159.11154,-31.60158],[159.08954,-31.6016],[159.08626,-31.60845],[159.07954,-31.60611],[159.07714,-31.61149],[159.05943,-31.61155],[159.05296,-31.60369],[159.05893,-31.59087],[159.05891,-31.57897],[159.05541,-31.57773],[159.05735,-31.57387],[159.05585,-31.57333],[159.05038,-31.57335],[159.05035,-31.56329],[159.0463,-31.5619],[159.04847,-31.55793],[159.04237,-31.55601],[159.04533,-31.55038],[159.03783,-31.54763],[159.03802,-31.54723],[159.03487,-31.54724],[159.03487,-31.54383],[159.03244,-31.54297],[159.03461,-31.53808],[159.02754,-31.53554],[159.02964,-31.53159],[159.02305,-31.52935],[159.03784,-31.49819]]],terms_url:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico",overlay:true},{id:"NSW_LPI_TopographicMap",name:"LPI NSW Topographic Map",type:"tms",template:"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Topo_Map/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[1,16],polygon:[[[140.99884,-28.99924],[140.99652,-34.13858],[142.03614,-34.37588],[142.40976,-34.76694],[143.33826,-35.23318],[143.99654,-35.98105],[144.49912,-36.0211],[144.50725,-36.24765],[145.01541,-36.25421],[145.00118,-36.00795],[146.50426,-36.12639],[146.49564,-36.24471],[146.98863,-36.25283],[146.99725,-36.12755],[147.38221,-36.13103],[147.38939,-36.01137],[147.81483,-36.00556],[147.99306,-36.138],[148.06846,-36.80624],[149.98571,-37.508],[163,-32],[153.76465,-28.11075],[153.25003,-28.12497],[153.24999,-28.23324],[153.16672,-28.23316],[153.16663,-28.25001],[153.11659,-28.24986],[153.1165,-28.2834],[152.9999,-28.28324],[152.99972,-28.24986],[152.24994,-28.25001],[152.24997,-28.37507],[151.99986,-28.37496],[151.99989,-28.50023],[151.93341,-28.50007],[151.93313,-28.62475],[151.98317,-28.62491],[151.98299,-28.64139],[151.99988,-28.64163],[152.00007,-28.68335],[152.03322,-28.6832],[152.0334,-28.71661],[151.99998,-28.71645],[151.99998,-28.74953],[151.03383,-28.75054],[151.03293,-28.74188],[151.02413,-28.74188],[151.02395,-28.73274],[151.00059,-28.73258],[151.00005,-28.50052],[148.99982,-28.50003],[148.99985,-28.74974],[149.0997,-28.74885],[149.10007,-28.81658],[149.00009,-28.81658],[148.99983,-28.96653],[148.94988,-28.96653],[148.95024,-28.99937],[140.99884,-28.99924]]],terms_url:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico"},{id:"Arenda_OAM",name:"Lupang Arenda, Taytay Drone Imagery",type:"tms",template:"https://tiles.openaerialmap.org/5d25d7bf161a790005c03e6e/0/5d25d7bf161a790005c03e6f/{zoom}/{x}/{y}.png",zoomExtent:[16,22],polygon:[[[121.11444,14.5407],[121.11236,14.54131],[121.10965,14.54186],[121.10884,14.54093],[121.10824,14.53808],[121.10841,14.53675],[121.1079,14.53542],[121.10779,14.53295],[121.10792,14.5312],[121.1089,14.53069],[121.11431,14.53035],[121.1153,14.53085],[121.11541,14.53166],[121.11528,14.53388],[121.1145,14.53395],[121.1138,14.53366],[121.1135,14.5343],[121.11435,14.53631],[121.11457,14.53796],[121.11472,14.53901],[121.11459,14.53985],[121.11444,14.5407]]],best:true},{id:"orthophoto_lyon_2012",name:"Lyon Orthophoto 2012-03 10cm",type:"wms",template:"https://download.data.grandlyon.com/wms/grandlyon?language=fre&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1830_5150_10cm_CC46,1830_5155_10cm_CC46,1830_5160_10cm_CC46,1830_5165_10cm_CC46,1830_5170_10cm_CC46,1830_5175_10cm_CC46,1830_5180_10cm_CC46,1830_5185_10cm_CC46,1830_5190_10cm_CC46,1835_5150_10cm_CC46,1835_5155_10cm_CC46,1835_5160_10cm_CC46,1835_5165_10cm_CC46,1835_5170_10cm_CC46,1835_5175_10cm_CC46,1835_5180_10cm_CC46,1835_5185_10cm_CC46,1835_5190_10cm_CC46,1840_5150_10cm_CC46,1840_5155_10cm_CC46,1840_5160_10cm_CC46,1840_5165_10cm_CC46,1840_5170_10cm_CC46,1840_5175_10cm_CC46,1840_5180_10cm_CC46,1840_5185_10cm_CC46,1840_5190_10cm_CC46,1845_5150_10cm_CC46,1845_5155_10cm_CC46,1845_5160_10cm_CC46,1845_5165_10cm_CC46,1845_5170_10cm_CC46,1845_5175_10cm_CC46,1845_5180_10cm_CC46,1845_5185_10cm_CC46,1845_5190_10cm_CC46,1850_5155_10cm_CC46,1850_5160_10cm_CC46,1850_5165_10cm_CC46,1850_5170_10cm_CC46,1850_5175_10cm_CC46,1850_5180_10cm_CC46,1850_5185_10cm_CC46,1855_5155_10cm_CC46,1855_5165_10cm_CC46,1855_5170_10cm_CC46,1855_5175_10cm_CC46,1855_5180_10cm_CC46,1855_5185_10cm_CC46,1860_5155_10cm_CC46,1860_5160_10cm_CC46,1860_5165_10cm_CC46,1860_5170_10cm_CC46,1860_5175_10cm_CC46,1860_5180_10cm_CC46,1860_5185_10cm_CC46,1865_5155_10cm_CC46,1865_5160_10cm_CC46,1865_5165_10cm_CC46,1865_5170_10cm_CC46&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-03-01T00:00:00.000Z",startDate:"2012-03-01T00:00:00.000Z",polygon:[[[4.69049,45.54652],[4.83131,45.54652],[4.83131,45.57131],[4.88344,45.57131],[4.88344,45.59745],[5.16622,45.59745],[5.16622,45.74533],[5.10793,45.74533],[5.10793,45.88145],[4.90698,45.88145],[4.90698,45.92107],[4.84377,45.92107],[4.84377,45.94011],[4.71543,45.94011],[4.71543,45.87018],[4.67458,45.87018],[4.67458,45.7178],[4.69567,45.7178],[4.69049,45.54652]]],terms_url:"https://data.grandlyon.com/imagerie/orthophotographie-2012-du-grand-lyon",terms_text:"Grand Lyon Smart Data DSIT"},{id:"orthophoto_lyon",name:"Lyon Orthophoto 8cm",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/lyon/{zoom}/{x}/{y}",endDate:"2018-01-01T00:00:00.000Z",startDate:"2015-05-01T00:00:00.000Z",zoomExtent:[2,22],polygon:[[[4.66489,45.54688],[4.88253,45.54348],[4.88435,45.59745],[5.16623,45.59242],[5.17217,45.74532],[5.10793,45.74653],[5.11305,45.88145],[4.90698,45.88508],[4.90822,45.92106],[4.84377,45.92212],[4.84497,45.9581],[4.67729,45.96069],[4.66489,45.54688]]],terms_url:"https://data.grandlyon.com/imagerie/orthophotographie-2015-du-grand-lyon/",terms_text:"Métropole de Lyon DINSI"},{id:"MainRoadsWA_Road_Hierarchy",name:"Main Roads WA Road Hierarchy",type:"wms",template:"https://services.slip.wa.gov.au/public/services/SLIP_Public_Services/Transport/MapServer/WMSServer?LAYERS=8&TRANSPARENT=TRUE&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image%2Fpng&SRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}",projection:"EPSG:3857",zoomExtent:[0,21],polygon:[[[129.00009,-31.68764],[128.99872,-14.58225],[127.08984,-12.29707],[124.76074,-12.98315],[121.24512,-15.70766],[119.0918,-17.60214],[115.53223,-18.85431],[112.41211,-20.46819],[111.24756,-22.83695],[111.00586,-25.62172],[111.64307,-29.66896],[111.68701,-32.3614],[112.14844,-34.47034],[113.35693,-36.10238],[116.98242,-36.70366],[119.44336,-36.94989],[122.27783,-36.61553],[125.99121,-35.40696],[127.59521,-34.57895],[128.86963,-33.59632],[129.00009,-31.68764]]],terms_url:"https://catalogue.data.wa.gov.au/dataset/clss-road-hierarchy",terms_text:"Main Roads Western Australia",overlay:true},{id:"mainzlatestaerialimagery",name:"Mainz latest aerial imagery",type:"wms",template:"https://geodaten.mainz.de/map/service?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho_2018&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[12,22],polygon:[[[8.10355,49.865],[8.38356,49.865],[8.38356,50.0466],[8.10355,50.0466],[8.10355,49.865]]],terms_url:"https://www.mainz.de/vv/oe/100140100000035141.php#tab-infos",terms_text:"Vermessung und Geoinformation Mainz",icon:"https://www.mainz.de/configuration.inc.php.media/27432/Logo-72px.png"},{id:"major_isidoro",name:"Major Isidoro AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Major%20Isidoro&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.94048,-9.57588],[-36.94106,-9.48536],[-37.03215,-9.48606],[-37.03164,-9.57639],[-36.94048,-9.57588]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"Mapbox",name:"Mapbox Satellite",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/mapbox.satellite/{zoom}/{x}/{y}@2x.jpg?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJjaml5MjVyb3MwMWV0M3hxYmUzdGdwbzE4In0.q548FjhsSJzvXsGlPsFxAQ",tileSize:512,zoomExtent:[0,22],terms_url:"https://www.mapbox.com/about/maps",terms_text:"Terms & Feedback","default":true,description:"Satellite and aerial imagery.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/MapBoxSatellite.png"},{id:"Maps4BW-LGL_BW",name:"Maps4BW (LGL-BW, www.lgl-bw.de)",type:"wms",template:"https://owsproxy.lgl-bw.de/owsproxy/ows/WMS_Maps4BW?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=webatlasde&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[9.06954,49.57679],[9.10577,49.57952],[9.16079,49.58263],[9.24212,49.58402],[9.27192,49.63515],[9.30454,49.65561],[9.36753,49.65893],[9.38253,49.64341],[9.41191,49.66033],[9.39602,49.67143],[9.41828,49.69706],[9.40378,49.71957],[9.37769,49.70357],[9.35828,49.70334],[9.29438,49.73958],[9.31467,49.76859],[9.42435,49.79099],[9.50417,49.78962],[9.51808,49.78214],[9.65623,49.79286],[9.65317,49.73944],[9.63435,49.70076],[9.67054,49.69515],[9.67721,49.71846],[9.71079,49.72918],[9.8014,49.73429],[9.83728,49.70237],[9.87656,49.61362],[9.83362,49.55607],[9.84954,49.54793],[9.87463,49.5836],[9.91419,49.58955],[9.93066,49.56097],[9.92482,49.48951],[10.01787,49.48673],[10.03352,49.52978],[10.06372,49.55129],[10.09052,49.54218],[10.12792,49.51192],[10.11027,49.49272],[10.16753,49.38589],[10.12627,49.3809],[10.14385,49.32772],[10.16061,49.27043],[10.13569,49.26189],[10.14311,49.20387],[10.25161,49.15031],[10.26279,49.12959],[10.26869,49.05202],[10.36527,49.02557],[10.45894,48.93581],[10.46208,48.83947],[10.42886,48.74973],[10.46648,48.73627],[10.49761,48.68581],[10.45007,48.66277],[10.3553,48.65068],[10.32297,48.68241],[10.26028,48.67842],[10.32542,48.60763],[10.31448,48.52323],[10.17973,48.45977],[10.12892,48.45301],[10.10938,48.47445],[10.06355,48.45381],[10.03918,48.45125],[10.04492,48.43158],[10.0152,48.40323],[9.98709,48.38565],[9.97328,48.37944],[9.97549,48.36558],[9.99071,48.3734],[10.00265,48.3632],[9.99992,48.35572],[10.06698,48.28172],[10.08111,48.2253],[10.11306,48.12632],[10.13966,48.11307],[10.14695,48.07455],[10.13763,48.01938],[10.11725,47.9755],[10.11359,47.93422],[10.10709,47.86711],[10.14174,47.80956],[10.0732,47.78686],[10.11825,47.76126],[10.14213,47.70165],[10.13262,47.67678],[10.07445,47.63472],[10.06303,47.66923],[10.00359,47.67526],[9.95808,47.64376],[9.84481,47.67533],[9.83488,47.66042],[9.74926,47.60206],[9.70817,47.60007],[9.65788,47.60599],[9.64742,47.58931],[9.61389,47.57809],[9.56602,47.53274],[9.51199,47.53246],[9.25717,47.65752],[9.18684,47.65697],[9.17591,47.65379],[9.17028,47.65474],[9.15555,47.666],[9.1494,47.66713],[9.13947,47.66367],[9.02005,47.68616],[8.94127,47.65569],[8.89825,47.64821],[8.88263,47.65327],[8.87474,47.6545],[8.87235,47.66971],[8.84949,47.68089],[8.84993,47.70233],[8.81816,47.71242],[8.80108,47.72811],[8.77231,47.71606],[8.81295,47.6959],[8.79373,47.67216],[8.7533,47.68997],[8.72575,47.6917],[8.71002,47.68829],[8.68937,47.69318],[8.67046,47.68235],[8.65783,47.68883],[8.66161,47.71454],[8.70596,47.71584],[8.70932,47.73275],[8.73033,47.75527],[8.72003,47.76273],[8.68871,47.75314],[8.67898,47.78306],[8.64981,47.79435],[8.65592,47.76948],[8.63132,47.75749],[8.61918,47.76216],[8.61351,47.78451],[8.61686,47.79705],[8.568,47.79977],[8.57611,47.79015],[8.57847,47.78102],[8.56315,47.77654],[8.48889,47.76458],[8.45742,47.74126],[8.4623,47.72909],[8.44929,47.71663],[8.41471,47.69991],[8.4273,47.68562],[8.41061,47.6743],[8.46839,47.6568],[8.52474,47.64677],[8.5269,47.66373],[8.56441,47.67261],[8.57853,47.66373],[8.60454,47.6751],[8.63333,47.65212],[8.62386,47.63922],[8.60395,47.63193],[8.61281,47.61327],[8.57951,47.59306],[8.5602,47.59867],[8.56765,47.61442],[8.53394,47.62984],[8.51208,47.61641],[8.46581,47.60137],[8.46631,47.58666],[8.48985,47.59139],[8.5,47.58062],[8.43414,47.5629],[8.39882,47.57559],[8.38525,47.56408],[8.32701,47.56893],[8.29483,47.59077],[8.2948,47.60497],[8.26293,47.60823],[8.22435,47.60446],[8.18644,47.60508],[8.16904,47.59394],[8.13615,47.58246],[8.10503,47.56795],[8.09873,47.55933],[8.08261,47.55624],[8.07095,47.56299],[8.0274,47.54931],[7.94632,47.54209],[7.90966,47.54825],[7.90676,47.5603],[7.88681,47.58765],[7.83987,47.58122],[7.79648,47.55517],[7.69208,47.53137],[7.66583,47.53403],[7.63159,47.56044],[7.63879,47.56619],[7.68607,47.57205],[7.65278,47.59418],[7.62247,47.57767],[7.60473,47.57822],[7.58771,47.59015],[7.52156,47.65161],[7.50399,47.70235],[7.52096,47.77685],[7.55712,47.84839],[7.54946,47.8792],[7.57461,47.93028],[7.61318,47.96804],[7.6119,47.9871],[7.56124,48.03836],[7.57491,48.1258],[7.59534,48.15977],[7.63305,48.19717],[7.66275,48.22473],[7.68466,48.30305],[7.76346,48.49158],[7.80046,48.5126],[7.79958,48.5878],[7.83409,48.64439],[7.91211,48.68899],[7.96723,48.75716],[8.02069,48.78879],[8.04302,48.7956],[8.08647,48.81306],[8.13644,48.89782],[8.19706,48.96021],[8.28161,48.9949],[8.29967,49.02597],[8.31243,49.05996],[8.38654,49.23497],[8.46083,49.28407],[8.48783,49.29326],[8.47577,49.3079],[8.44839,49.31693],[8.45152,49.33135],[8.46288,49.3869],[8.49407,49.40186],[8.49762,49.41583],[8.50721,49.43414],[8.49834,49.44187],[8.47977,49.44391],[8.46414,49.44151],[8.44696,49.44516],[8.43947,49.45214],[8.44407,49.46085],[8.45992,49.46498],[8.46312,49.47135],[8.4554,49.48107],[8.44184,49.49297],[8.41194,49.55852],[8.42193,49.5843],[8.44117,49.59081],[8.45482,49.59157],[8.47738,49.5874],[8.56161,49.52237],[8.61486,49.54175],[8.59165,49.59179],[8.58706,49.61156],[8.65189,49.6209],[8.69494,49.62762],[8.70105,49.59869],[8.68726,49.57096],[8.72597,49.53085],[8.78493,49.51775],[8.81467,49.53187],[8.88863,49.51091],[8.90168,49.50363],[8.90315,49.486],[8.87995,49.46561],[8.83117,49.42147],[8.80845,49.40981],[8.82075,49.39647],[8.83009,49.41316],[8.85107,49.39663],[8.90247,49.44632],[8.93863,49.48179],[8.95154,49.50562],[8.98498,49.51153],[9.03553,49.50079],[9.05731,49.532],[9.10023,49.52728],[9.11009,49.51213],[9.12424,49.51722],[9.11286,49.53337],[9.08284,49.54211],[9.06694,49.56433],[9.06954,49.57679]]],terms_url:"https://www.lgl-bw.de/",terms_text:"Datengrundlage: LGL, www.lgl-bw.de"},{id:"mar_vermelho_al",name:"Mar Vermelho AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Mar%20Vermelho&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.34201,-9.49289],[-36.3422,-9.47533],[-36.34275,-9.4029],[-36.34473,-9.4029],[-36.34537,-9.40279],[-36.34702,-9.40293],[-36.3508,-9.40291],[-36.359,-9.40307],[-36.36109,-9.403],[-36.36289,-9.40307],[-36.3659,-9.40305],[-36.36713,-9.40301],[-36.37571,-9.40307],[-36.38049,-9.40308],[-36.38663,-9.4032],[-36.38852,-9.40312],[-36.39286,-9.40325],[-36.39656,-9.40322],[-36.40309,-9.40327],[-36.41973,-9.40338],[-36.43368,-9.4034],[-36.43355,-9.41685],[-36.43344,-9.42386],[-36.43338,-9.43753],[-36.43329,-9.45012],[-36.433,-9.49359],[-36.40839,-9.4935],[-36.40442,-9.49354],[-36.40008,-9.49351],[-36.39787,-9.49342],[-36.39168,-9.49328],[-36.38757,-9.49331],[-36.38536,-9.49341],[-36.37673,-9.49331],[-36.37427,-9.49319],[-36.36707,-9.49299],[-36.36502,-9.493],[-36.36043,-9.49299],[-36.35955,-9.49295],[-36.35895,-9.49304],[-36.35703,-9.49294],[-36.35665,-9.493],[-36.3526,-9.493],[-36.34767,-9.49297],[-36.34201,-9.49289]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"MassGIS-L3-Parcels",name:"MassGIS L3 Parcels",type:"tms",template:"https://tiles.arcgis.com/tiles/hGdibHYSPO59RG1h/arcgis/rest/services/MassGIS_Level3_Parcels/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[15,20],polygon:[[[-72.13569,42.03025],[-72.53156,42.03458],[-72.57278,42.03022],[-72.58216,42.02474],[-72.60717,42.02515],[-72.60797,42.03108],[-72.64019,42.03205],[-72.69933,42.03696],[-72.75714,42.03635],[-72.75868,42.02439],[-72.76572,42.02276],[-72.76673,42.00327],[-72.81705,41.99769],[-72.81378,42.03674],[-73.03678,42.03929],[-73.43281,42.05059],[-73.49688,42.04968],[-73.50814,42.08626],[-73.26496,42.74594],[-72.6872,42.73348],[-71.97286,42.71307],[-71.69663,42.70572],[-71.29464,42.69704],[-71.27894,42.71136],[-71.26787,42.72603],[-71.25526,42.73659],[-71.24598,42.74231],[-71.23732,42.74491],[-71.22391,42.74643],[-71.18181,42.73732],[-71.18617,42.79088],[-71.16667,42.80891],[-71.13277,42.82145],[-71.06442,42.80626],[-71.05395,42.83337],[-71.04483,42.84869],[-71.03128,42.85924],[-70.96702,42.86887],[-70.94967,42.87588],[-70.92973,42.88504],[-70.91465,42.88661],[-70.90348,42.88671],[-70.88566,42.88288],[-70.84776,42.86088],[-70.82963,42.86875],[-70.81567,42.87204],[-70.45842,42.67694],[-70.8759,42.35302],[-69.88713,42.0519],[-69.89537,41.21643],[-70.81959,41.23192],[-71.09996,41.43386],[-71.12047,41.49717],[-71.13131,41.59231],[-71.14059,41.6051],[-71.14047,41.62389],[-71.13569,41.6284],[-71.13291,41.6601],[-71.17605,41.6681],[-71.17588,41.67154],[-71.1954,41.67514],[-71.26139,41.7523],[-71.32885,41.7811],[-71.33407,41.79455],[-71.34156,41.79817],[-71.33914,41.80842],[-71.3472,41.8231],[-71.3449,41.828],[-71.3352,41.8355],[-71.3422,41.8448],[-71.33392,41.86229],[-71.34086,41.87872],[-71.33865,41.89865],[-71.38174,41.8932],[-71.38127,42.01885],[-71.49744,42.01725],[-71.52888,42.01499],[-71.79925,42.00807],[-71.80067,42.02351],[-72.0635,42.02735],[-72.13569,42.03025]]],overlay:true},{id:"geodata.md.gov-MD_SixInchImagery",name:"MD Latest 6 Inch Aerial Imagery",type:"wms",template:"https://geodata.md.gov/imap/services/Imagery/MD_SixInchImagery/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=MD_SixInchImagery&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-76.23413,37.92037],[-76.59805,38.15832],[-76.94,38.27053],[-77.03819,38.41379],[-77.23526,38.33627],[-77.31216,38.41056],[-77.26273,38.56642],[-77.043,38.71338],[-77.04987,38.7937],[-76.92627,38.8925],[-77.04094,38.9845],[-77.12162,38.92523],[-77.15012,38.95514],[-77.25243,38.97543],[-77.25929,39.02425],[-77.34581,39.05492],[-77.46185,39.07038],[-77.53738,39.13965],[-77.47421,39.22481],[-77.57275,39.30428],[-77.72347,39.32899],[-77.77702,39.46323],[-77.86148,39.51622],[-77.84088,39.60886],[-77.95624,39.59299],[-78.16635,39.69556],[-78.27003,39.62156],[-78.3387,39.64007],[-78.46641,39.52364],[-78.6628,39.54006],[-78.79875,39.60622],[-78.9814,39.4468],[-79.06723,39.47649],[-79.48505,39.19954],[-79.48557,39.72158],[-75.78836,39.72181],[-75.69099,38.46058],[-75.04924,38.45816],[-75.04984,38.40222],[-75.08151,38.32321],[-75.09773,38.30907],[-75.187,38.09755],[-75.23798,38.0224],[-75.61821,37.98967],[-75.86369,37.90953],[-76.23413,37.92037]]],terms_url:"http://imap.maryland.gov/Pages/imagery-products.aspx",terms_text:"DoIT, MD iMap, MDP",description:"Six Inch resolution aerial imagery for the State of Maryland"},{id:"geodata.md.gov-MD_ThreeInchImagery",name:"MD Three Inch Aerial Imagery",type:"wms",template:"https://geodata.md.gov/imap/services/Imagery/MD_ThreeInchImagery/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=MD_ThreeInchImagery&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,20],polygon:[[[-76.46299,38.9808],[-76.46326,38.94779],[-76.49499,38.9369],[-76.51617,38.93697],[-76.54763,38.9591],[-76.54745,38.98667],[-76.51559,39.00306],[-76.4839,39.00292],[-76.46299,38.9808]],[[-76.09548,38.84133],[-76.0428,38.8409],[-76.04289,38.8298],[-76.03229,38.8297],[-76.03277,38.79667],[-76.02545,38.79664],[-76.02541,38.77462],[-76.03308,38.77472],[-76.03366,38.73073],[-76.05462,38.73094],[-76.0548,38.72005],[-76.10753,38.72043],[-76.10714,38.75338],[-76.11754,38.75346],[-76.11701,38.79731],[-76.09601,38.79715],[-76.09548,38.84133]],[[-77.23397,39.16838],[-77.25516,39.14647],[-77.25496,39.11343],[-77.18093,39.05337],[-77.14907,39.0477],[-77.12798,39.04779],[-77.10683,39.05325],[-77.10688,39.0917],[-77.11775,39.10827],[-77.16011,39.12485],[-77.15975,39.15214],[-77.17048,39.16302],[-77.21284,39.17272],[-77.23397,39.16838]]],terms_url:"http://imap.maryland.gov/Pages/imagery-products.aspx",terms_text:"DoIT, MD iMap, MDP",description:"Three Inch Resolution Imagery for the cities of Rockville, Gaithersburg and Annapolis"},{id:"geodata.md.gov-MD_ColorBasemap",name:"MD Transportation Basemap",type:"wms",template:"https://geodata.md.gov/imap/services/Transportation/MD_ColorBasemap/MapServer/WmsServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=MD_ColorBasemap&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-76.23413,37.92037],[-76.59805,38.15832],[-76.94,38.27053],[-77.03819,38.41379],[-77.23526,38.33627],[-77.31216,38.41056],[-77.26273,38.56642],[-77.043,38.71338],[-77.04987,38.7937],[-76.92627,38.8925],[-77.04094,38.9845],[-77.12162,38.92523],[-77.15012,38.95514],[-77.25243,38.97543],[-77.25929,39.02425],[-77.34581,39.05492],[-77.46185,39.07038],[-77.53738,39.13965],[-77.47421,39.22481],[-77.57275,39.30428],[-77.72347,39.32899],[-77.77702,39.46323],[-77.86148,39.51622],[-77.84088,39.60886],[-77.95624,39.59299],[-78.16635,39.69556],[-78.27003,39.62156],[-78.3387,39.64007],[-78.46641,39.52364],[-78.6628,39.54006],[-78.79875,39.60622],[-78.9814,39.4468],[-79.06723,39.47649],[-79.48505,39.19954],[-79.48557,39.72158],[-75.78836,39.72181],[-75.69099,38.46058],[-75.04924,38.45816],[-75.04984,38.40222],[-75.08151,38.32321],[-75.09773,38.30907],[-75.187,38.09755],[-75.23798,38.0224],[-75.61821,37.98967],[-75.86369,37.90953],[-76.23413,37.92037]]],terms_url:"http://imap.maryland.gov/Pages/imagery-products.aspx",terms_text:"DoIT, MD iMap, MDP",description:"Maryland State Highway Administration road features and additional Maryland focused landmarks"},{id:"MCGIS-County-NAIP-Imagery-2015",name:"Mesa County GIS NAIP 2015",type:"wms",template:"https://mcgis.mesacounty.us/image/services/Mosaic_Datasets/MesaCounty_2015/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-109.06765,39.37875],[-107.37012,39.37962],[-107.36995,39.18422],[-107.49574,39.18416],[-107.49568,39.12133],[-107.62081,39.12126],[-107.62076,39.05974],[-107.68231,39.05971],[-107.68226,38.99652],[-107.81774,38.99645],[-107.81779,39.05859],[-107.86948,39.05856],[-107.86943,38.99769],[-108.05698,38.99759],[-108.05688,38.87126],[-108.18204,38.8712],[-108.18198,38.8081],[-108.37142,38.808],[-108.3711,38.43452],[-109.06685,38.43416],[-109.06765,39.37875]]],terms_url:"http://gis.mesacounty.us/",terms_text:"Mesa County GIS",icon:"https://gis.mesacounty.us/globalassets/images/county-logos/mesa-county-logo.png"},{id:"MCGIS-County-NAIP-Imagery-2017",name:"Mesa County GIS NAIP 2017",type:"wms",template:"https://mcgis.mesacounty.us/image/services/Mosaic_Datasets/NAIP_2017/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2017-10-24T00:00:00.000Z",startDate:"2017-08-26T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-109.06765,39.37875],[-107.37012,39.37962],[-107.36995,39.18422],[-107.49574,39.18416],[-107.49568,39.12133],[-107.62081,39.12126],[-107.62076,39.05974],[-107.68231,39.05971],[-107.68226,38.99652],[-107.81774,38.99645],[-107.81779,39.05859],[-107.86948,39.05856],[-107.86943,38.99769],[-108.05698,38.99759],[-108.05688,38.87126],[-108.18204,38.8712],[-108.18198,38.8081],[-108.37142,38.808],[-108.3711,38.43452],[-109.06685,38.43416],[-109.06765,39.37875]]],terms_url:"http://gis.mesacounty.us/",terms_text:"Mesa County GIS",icon:"https://gis.mesacounty.us/globalassets/images/county-logos/mesa-county-logo.png"},{id:"MCGIS-County-Valleywide-Imagery-2018",name:"Mesa County GIS Valleywide 2018",type:"wms",template:"https://mcgis.mesacounty.us/image/services/Mosaic_Datasets/City_Color_2018/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-108.93915,39.23931],[-108.86841,39.23846],[-108.86843,39.23734],[-108.81245,39.23666],[-108.81274,39.22256],[-108.79405,39.22234],[-108.79432,39.20857],[-108.70096,39.20745],[-108.70123,39.1939],[-108.60764,39.19277],[-108.60791,39.17906],[-108.58915,39.17884],[-108.58943,39.1649],[-108.53332,39.16422],[-108.53361,39.14993],[-108.51461,39.14971],[-108.51489,39.13611],[-108.44076,39.13522],[-108.44104,39.12109],[-108.42192,39.12086],[-108.42201,39.1163],[-108.3984,39.11602],[-108.39798,39.13708],[-108.32446,39.13619],[-108.32416,39.15107],[-108.30718,39.15087],[-108.3066,39.18],[-108.28866,39.17979],[-108.28807,39.20939],[-108.26868,39.20916],[-108.26957,39.16484],[-108.2864,39.16505],[-108.28699,39.13571],[-108.30312,39.13591],[-108.3038,39.10194],[-108.32335,39.10218],[-108.32328,39.10574],[-108.32914,39.10581],[-108.32943,39.09121],[-108.34736,39.09142],[-108.34764,39.07715],[-108.36637,39.07738],[-108.36666,39.06268],[-108.38569,39.06291],[-108.38599,39.04799],[-108.42216,39.04843],[-108.42245,39.03377],[-108.44051,39.03399],[-108.44137,38.99101],[-108.42193,38.99077],[-108.42252,38.96127],[-108.44162,38.9615],[-108.44133,38.97595],[-108.46034,38.97618],[-108.46006,38.99024],[-108.47877,38.99047],[-108.47848,39.00485],[-108.51515,39.0053],[-108.51519,39.00287],[-108.51825,39.00291],[-108.51821,39.00517],[-108.53414,39.00536],[-108.53397,39.0139],[-108.54342,39.01401],[-108.54336,39.01733],[-108.5455,39.01735],[-108.54548,39.01855],[-108.65864,39.01991],[-108.65778,39.06287],[-108.67867,39.06313],[-108.67837,39.07793],[-108.69699,39.07816],[-108.69671,39.09203],[-108.71557,39.09225],[-108.71529,39.10619],[-108.7388,39.10648],[-108.73853,39.12033],[-108.75744,39.12056],[-108.75686,39.14927],[-108.79422,39.14972],[-108.79393,39.16386],[-108.83224,39.16432],[-108.83196,39.17845],[-108.85061,39.17868],[-108.85033,39.19302],[-108.86938,39.19325],[-108.86906,39.20925],[-108.90237,39.20965],[-108.90208,39.22384],[-108.93946,39.22429],[-108.93915,39.23931]]],terms_url:"http://gis.mesacounty.us/",terms_text:"Mesa County GIS",icon:"https://gis.mesacounty.us/globalassets/images/county-logos/mesa-county-logo.png"},{id:"Metropole_Ruhr_RVR-DOP10",name:"Metropole Ruhr: Luftbilder (10 cm)",type:"wms",template:"https://geodaten.metropoleruhr.de/dop/dop?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=DOP&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[6.51691,51.81714],[6.52258,51.81469],[6.52281,51.81041],[6.52834,51.81053],[6.53991,51.80134],[6.5511,51.799],[6.56818,51.78992],[6.57476,51.79606],[6.58457,51.79369],[6.59102,51.8024],[6.60911,51.80019],[6.61081,51.79423],[6.63264,51.79981],[6.65946,51.7892],[6.66837,51.77738],[6.7138,51.78084],[6.70876,51.77131],[6.72131,51.76899],[6.7475,51.77035],[6.74862,51.77551],[6.75824,51.77656],[6.7698,51.76649],[6.77219,51.74596],[6.78862,51.74884],[6.79861,51.74217],[6.81927,51.74341],[6.81956,51.73741],[6.82683,51.72983],[6.8403,51.73694],[6.84995,51.73712],[6.85551,51.73636],[6.8586,51.72956],[6.9103,51.74592],[6.90861,51.75275],[6.91511,51.76144],[6.9157,51.7786],[6.93527,51.7738],[6.95606,51.77245],[6.97559,51.79936],[6.98794,51.80129],[6.99485,51.80141],[6.99497,51.79884],[7.02118,51.80014],[7.0244,51.7899],[7.03141,51.78745],[7.0316,51.78317],[7.03847,51.78414],[7.05392,51.77839],[7.06079,51.77936],[7.0609,51.77679],[7.07333,51.777],[7.07867,51.78137],[7.11433,51.78795],[7.13435,51.80542],[7.1616,51.81528],[7.16419,51.8196],[7.19177,51.82174],[7.2141,51.81694],[7.22121,51.81191],[7.23658,51.80785],[7.23668,51.80528],[7.24916,51.80461],[7.2535,51.79953],[7.26179,51.79966],[7.26485,51.79198],[7.26245,51.78252],[7.27229,51.77838],[7.26002,51.77391],[7.26012,51.77134],[7.2688,51.76118],[7.27577,51.75957],[7.27889,51.75019],[7.31079,51.74636],[7.3151,51.74214],[7.31519,51.73957],[7.31102,51.74036],[7.3125,51.73781],[7.32081,51.73707],[7.31169,51.72237],[7.29963,51.71277],[7.2985,51.70589],[7.31069,51.71207],[7.30825,51.70346],[7.32762,51.70202],[7.33057,51.69692],[7.34427,51.69969],[7.34599,51.69028],[7.33919,51.68761],[7.35589,51.68356],[7.35877,51.68017],[7.3781,51.67959],[7.39086,51.66947],[7.40617,51.6654],[7.41031,51.66545],[7.4101,51.67145],[7.43089,51.6683],[7.43892,51.67527],[7.44854,51.67625],[7.44933,51.69341],[7.44094,51.69673],[7.43792,51.7044],[7.42406,51.70593],[7.42245,51.71277],[7.43451,51.72321],[7.44825,51.72511],[7.46718,51.7365],[7.47273,51.73572],[7.4771,51.72892],[7.4826,51.72985],[7.47877,51.72037],[7.48435,51.71872],[7.48449,51.71444],[7.49119,51.72053],[7.49947,51.72063],[7.50214,51.72324],[7.51738,51.72172],[7.51788,51.70629],[7.53035,51.70473],[7.52922,51.69701],[7.53349,51.69277],[7.54458,51.6912],[7.5378,51.68768],[7.54477,51.6852],[7.5528,51.69301],[7.56651,51.69575],[7.56642,51.69832],[7.58706,51.70029],[7.59379,51.70551],[7.6048,51.7065],[7.60743,51.71082],[7.6143,51.71176],[7.61419,51.71518],[7.62663,51.71447],[7.62814,51.7102],[7.64321,51.71381],[7.6531,51.70621],[7.65428,51.71308],[7.668,51.71581],[7.66915,51.72353],[7.68832,51.72889],[7.69283,51.71608],[7.7012,51.71275],[7.71352,51.71631],[7.71481,51.71976],[7.71899,51.71809],[7.71749,51.72236],[7.72163,51.7224],[7.72555,51.73016],[7.73659,51.73028],[7.73638,51.73799],[7.75154,51.73901],[7.7699,51.72378],[7.77119,51.72722],[7.78908,51.72912],[7.79037,51.73256],[7.80282,51.73183],[7.80137,51.73439],[7.80825,51.73531],[7.81228,51.73964],[7.82058,51.73887],[7.82457,51.74491],[7.83287,51.74413],[7.83314,51.73385],[7.83739,51.72961],[7.85815,51.72724],[7.85822,51.72467],[7.86374,51.72472],[7.87187,51.7308],[7.87745,51.72828],[7.88038,51.72145],[7.88875,51.7181],[7.88912,51.70267],[7.90148,51.70536],[7.90568,51.70283],[7.91249,51.70632],[7.92768,51.7056],[7.92912,51.70305],[7.94014,51.704],[7.93746,51.70055],[7.94296,51.70146],[7.96108,51.69305],[7.97631,51.69061],[7.97779,51.68633],[7.9875,51.68385],[7.98761,51.67871],[7.99732,51.67622],[7.9974,51.67279],[7.98365,51.67096],[7.96286,51.67592],[7.95466,51.67242],[7.95366,51.65612],[7.94689,51.65092],[7.94984,51.64237],[7.94443,51.63804],[7.93477,51.6388],[7.93224,51.62935],[7.92406,51.62585],[7.92414,51.62242],[7.91195,51.61374],[7.91632,51.60349],[7.91378,51.59489],[7.87529,51.59282],[7.86837,51.59446],[7.85742,51.59179],[7.85889,51.58837],[7.82749,51.57863],[7.84327,51.55307],[7.83262,51.53925],[7.83277,51.53325],[7.84115,51.52819],[7.8345,51.51955],[7.83755,51.50758],[7.83212,51.50496],[7.83912,51.49988],[7.83923,51.4956],[7.84474,51.49479],[7.8506,51.48028],[7.83418,51.4784],[7.82198,51.47228],[7.80819,51.47471],[7.79876,51.46776],[7.78906,51.47109],[7.76169,51.46823],[7.74785,51.47237],[7.7425,51.46717],[7.73567,51.46623],[7.72864,51.47216],[7.69838,51.4744],[7.67525,51.46728],[7.65606,51.46621],[7.65347,51.46103],[7.63843,51.45914],[7.63589,51.45226],[7.62083,51.45122],[7.61407,51.44772],[7.61977,51.44092],[7.62525,51.44099],[7.62127,51.43666],[7.62825,51.43245],[7.62561,51.42899],[7.63125,51.42391],[7.61633,51.41859],[7.62183,51.4178],[7.62196,51.41352],[7.63313,51.40679],[7.61322,51.38512],[7.60485,51.39017],[7.60609,51.39447],[7.59647,51.39521],[7.58704,51.38995],[7.59,51.38313],[7.58465,51.37878],[7.58644,51.36509],[7.59234,51.35144],[7.59934,51.34638],[7.59257,51.34373],[7.59407,51.33946],[7.58186,51.33588],[7.58334,51.33247],[7.57655,51.33067],[7.57816,51.32298],[7.58373,51.31962],[7.57837,51.31612],[7.58134,51.30844],[7.58547,51.30763],[7.58305,51.29732],[7.56826,51.28942],[7.56582,51.27996],[7.55089,51.27635],[7.54977,51.26862],[7.52923,51.27008],[7.52797,51.26663],[7.51302,51.26387],[7.51049,51.25784],[7.50371,51.25604],[7.50385,51.25175],[7.49563,51.2525],[7.49438,51.24906],[7.49708,51.24995],[7.50271,51.24488],[7.50143,51.24229],[7.48262,51.23262],[7.469,51.23158],[7.46505,51.22724],[7.45129,51.23049],[7.44191,51.22522],[7.44478,51.22098],[7.43534,51.21742],[7.43816,51.21489],[7.43413,51.21312],[7.42995,51.21563],[7.42962,51.22506],[7.42408,51.22756],[7.41182,51.22653],[7.41342,51.2197],[7.39824,51.22463],[7.39521,51.23317],[7.40319,51.23928],[7.3934,51.246],[7.38793,51.24593],[7.38672,51.24162],[7.37853,51.24151],[7.37289,51.24657],[7.35526,51.2429],[7.35405,51.23859],[7.34849,51.24109],[7.339,51.23924],[7.33872,51.24695],[7.32904,51.25024],[7.3238,51.24417],[7.31284,51.24487],[7.31027,51.24054],[7.30481,51.24046],[7.29643,51.24549],[7.29764,51.24979],[7.28262,51.24957],[7.27541,51.25975],[7.2715,51.25455],[7.26734,51.25621],[7.26578,51.26133],[7.27623,51.27434],[7.26764,51.2845],[7.25531,51.28518],[7.26537,51.30847],[7.26521,51.31276],[7.25974,51.31268],[7.26511,51.31533],[7.26365,51.31788],[7.23393,51.308],[7.22973,51.31051],[7.2271,51.3079],[7.22296,51.3087],[7.22309,51.30527],[7.20682,51.30159],[7.20026,51.29463],[7.18792,51.2953],[7.18232,51.29864],[7.16869,51.29757],[7.18065,51.30633],[7.16674,51.31211],[7.16924,51.31815],[7.16503,51.32066],[7.1662,51.32582],[7.15645,51.32996],[7.15351,51.33505],[7.14807,51.33411],[7.14927,51.33842],[7.14513,51.33921],[7.15292,51.34962],[7.14882,51.34956],[7.14731,51.35296],[7.15665,51.35911],[7.15911,51.36601],[7.15189,51.37532],[7.14634,51.37695],[7.13957,51.37513],[7.13802,51.37939],[7.13262,51.37759],[7.127,51.38093],[7.12163,51.37827],[7.12153,51.38084],[7.11742,51.38078],[7.11626,51.37561],[7.11215,51.37555],[7.11205,51.37812],[7.1039,51.37627],[7.09853,51.37361],[7.10004,51.37021],[7.0919,51.36836],[7.08765,51.37172],[7.08088,51.3699],[7.07796,51.37414],[7.0552,51.36176],[7.04973,51.36167],[7.04404,51.36671],[7.03604,51.36144],[7.01944,51.36544],[7.01,51.36185],[7.00745,51.35752],[6.98689,51.35803],[6.98301,51.35282],[6.97743,51.35529],[6.97621,51.35184],[6.96545,51.34737],[6.95033,51.34882],[6.94748,51.35134],[6.9257,51.34839],[6.92422,51.35093],[6.92825,51.35272],[6.92137,51.35346],[6.92391,51.35779],[6.90565,51.36775],[6.90022,51.3668],[6.8904,51.37176],[6.87848,51.36297],[6.86745,51.36449],[6.85115,51.36162],[6.84552,51.36495],[6.84991,51.35903],[6.83385,51.35101],[6.82295,51.34995],[6.81731,51.35328],[6.81615,51.34897],[6.80939,51.34713],[6.80649,51.3505],[6.7941,51.35198],[6.79314,51.34339],[6.77673,51.34308],[6.7475,51.35281],[6.73831,51.34492],[6.72749,51.34214],[6.71287,51.33328],[6.69193,51.34144],[6.66428,51.3469],[6.65435,51.35356],[6.65789,51.36477],[6.67409,51.36938],[6.67794,51.3746],[6.67511,51.37626],[6.6684,51.37356],[6.67309,51.38908],[6.66081,51.38798],[6.65693,51.38362],[6.64602,51.38254],[6.64443,51.3868],[6.63626,51.38577],[6.63586,51.39348],[6.611,51.39726],[6.59479,51.39265],[6.57148,51.39302],[6.56618,51.38948],[6.55797,51.38931],[6.55496,51.39439],[6.54679,51.39337],[6.54505,51.40019],[6.53816,51.4009],[6.52939,51.41101],[6.52596,51.42379],[6.5149,51.42527],[6.51453,51.43213],[6.51987,51.43481],[6.52092,51.44084],[6.51119,51.4432],[6.50821,51.44743],[6.50273,51.44731],[6.50198,51.46101],[6.50709,51.46798],[6.49868,51.47123],[6.49698,51.4772],[6.49012,51.47705],[6.48714,51.48127],[6.4818,51.47859],[6.47608,51.48275],[6.47404,51.49471],[6.46699,51.49799],[6.46245,51.50561],[6.45407,51.508],[6.45497,51.51659],[6.44796,51.51901],[6.45326,51.52255],[6.44876,51.52931],[6.45562,51.52946],[6.47816,51.51966],[6.47499,51.52731],[6.48673,51.53871],[6.46262,51.55191],[6.49612,51.56806],[6.46176,51.56732],[6.42276,51.5759],[6.41912,51.56725],[6.40847,51.56101],[6.38918,51.56144],[6.37657,51.56545],[6.36951,51.56872],[6.36916,51.57471],[6.37726,51.57747],[6.37284,51.58251],[6.37372,51.59111],[6.35235,51.60349],[6.33482,51.59709],[6.32362,51.60026],[6.32067,51.60363],[6.33275,51.60905],[6.33392,51.6125],[6.30035,51.62117],[6.30143,51.62633],[6.29113,51.63725],[6.29225,51.64156],[6.29903,51.64343],[6.32563,51.63632],[6.32819,51.63981],[6.35403,51.64554],[6.35313,51.66095],[6.36553,51.66123],[6.36262,51.66374],[6.37069,51.66735],[6.38091,51.6813],[6.38062,51.68643],[6.37195,51.6931],[6.35808,51.6945],[6.35482,51.703],[6.3682,51.71016],[6.37642,51.7112],[6.38041,51.71387],[6.37731,51.7198],[6.38829,51.7209],[6.38789,51.72775],[6.40932,51.73937],[6.41055,51.74197],[6.40346,51.74524],[6.40597,51.74959],[6.40178,51.75035],[6.40287,51.75552],[6.41405,51.75319],[6.42134,51.7465],[6.42188,51.73708],[6.40877,51.72478],[6.40921,51.71708],[6.4164,51.71209],[6.44839,51.70765],[6.46246,51.70281],[6.47677,51.71855],[6.48908,51.72053],[6.48418,51.73414],[6.48942,51.7394],[6.48908,51.74539],[6.48171,51.75381],[6.53363,51.76434],[6.52478,51.77444],[6.50784,51.78094],[6.4898,51.80714],[6.48961,51.81056],[6.51162,51.81274],[6.51691,51.81714]]],terms_url:"https://www.metropoleruhr.de/regionalverband-ruhr.html",terms_text:"Datengrundlage: Regionalverband Ruhr"},{id:"miljodirektoratet-vern",name:"Miljødirektoratet Protected Areas overlay",type:"wms",template:"https://kart.miljodirektoratet.no/arcgis/services/vern/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=naturvern_klasser_omrade&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,22],polygon:[[[-10.95725,71.60964],[-6.16765,71.62095],[-6.13756,70.30991],[-10.92717,70.29784],[-10.95725,71.60964]],[[16.81947,74.9482],[21.25771,74.94213],[21.23712,73.8918],[16.79889,73.89828],[16.81947,74.9482]],[[4.04288,79.93593],[20.65421,81.54417],[36.6503,80.40108],[26.76265,75.8129],[13.88667,75.79135],[4.04288,79.93593]],[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://kart.naturbase.no",terms_text:"© Miljødirektoratet",description:"Norwegian national parks, nature reserves and other protected areas and objects from Naturbase, including Svalbard/Spitsbergen",icon:"https://www.miljodirektoratet.no/globalassets/profilbank/profilbank-bilder/m_logo_hoved_pos_rgb_thumb2.png",overlay:true},{id:"miljodirektoratet-friluftsomrader",name:"Miljødirektoratet Public Recreation Areas overlay",type:"wms",template:"https://kart.miljodirektoratet.no/arcgis/services/friluftsliv_statlig_sikra/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=friluftsliv_statlig_sikra&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"http://www.miljostatus.no/tema/friluftsliv/statlig-sikra-friluftlivsomrader/",terms_text:"© Miljødirektoratet",description:"Public recreation areas with State ownership (\"friluftsområder\").",icon:"https://www.miljodirektoratet.no/globalassets/profilbank/profilbank-bilder/m_logo_hoved_pos_rgb_thumb2.png",overlay:true},{id:"minador_do_negrao",name:"Minador do Negrão",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Minador%20do%20Negrao&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.8196,-9.35174],[-36.82017,-9.26142],[-36.82465,-9.26133],[-36.83064,-9.26147],[-36.83673,-9.2615],[-36.84228,-9.26148],[-36.84562,-9.2616],[-36.85564,-9.2616],[-36.86214,-9.26159],[-36.8659,-9.26147],[-36.86724,-9.2615],[-36.86952,-9.26149],[-36.87127,-9.26157],[-36.87476,-9.26153],[-36.87816,-9.26163],[-36.88321,-9.2617],[-36.88565,-9.26167],[-36.88857,-9.26148],[-36.89217,-9.26151],[-36.89383,-9.26163],[-36.8974,-9.26175],[-36.91122,-9.26183],[-36.9111,-9.26651],[-36.91112,-9.28542],[-36.91121,-9.29066],[-36.91118,-9.29368],[-36.91099,-9.29929],[-36.91091,-9.30729],[-36.9109,-9.3123],[-36.91083,-9.31597],[-36.91084,-9.32013],[-36.91098,-9.32395],[-36.91099,-9.32587],[-36.91079,-9.32964],[-36.91079,-9.33523],[-36.91074,-9.33944],[-36.91092,-9.34311],[-36.91084,-9.34471],[-36.91066,-9.35229],[-36.89277,-9.35225],[-36.87735,-9.35212],[-36.86463,-9.35203],[-36.85761,-9.35194],[-36.84344,-9.35191],[-36.83115,-9.3518],[-36.8196,-9.35174]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"mml-tausta",name:"MML Background Map",type:"tms",template:"http://tiles.kartat.kapsi.fi/taustakartta/{zoom}/{x}/{y}.jpg",zoomExtent:[2,19],polygon:[[[27.96569,70.0988],[27.57431,70.07728],[27.10876,69.93548],[26.70913,69.97549],[26.45507,69.94207],[25.87142,69.6671],[25.94833,69.61024],[25.83023,69.55323],[25.66955,69.20794],[25.73822,69.01797],[25.60089,68.90309],[25.45806,68.91199],[25.11749,68.80699],[25.07354,68.64355],[24.88128,68.62003],[23.97491,68.84568],[23.74969,68.8308],[23.63433,68.71645],[23.18939,68.68053],[22.52197,68.7553],[21.63894,69.28191],[21.26953,69.31783],[20.94131,69.21622],[21.08963,69.09307],[21.05941,69.04352],[20.72296,69.12491],[20.54443,69.0558],[20.84655,68.97416],[20.81634,68.91742],[21.38754,68.68461],[22.04734,68.47066],[22.80212,68.35464],[23.12072,68.13169],[23.5437,67.9633],[23.44757,67.8393],[23.48602,67.59352],[23.36517,67.46545],[23.71124,67.41592],[23.72772,67.32186],[23.54644,67.26885],[23.53128,67.16724],[23.89251,66.86863],[23.84582,66.57775],[23.61843,66.44562],[23.67171,66.20303],[23.87191,66.14551],[24.09988,65.87247],[24.1658,65.66959],[24.11636,65.39143],[21.37939,63.68037],[20.17639,63.29787],[19.08325,60.16064],[20.22033,59.44786],[22.29125,59.44507],[25.82336,59.933],[27.52075,60.23435],[27.83386,60.53229],[29.29641,61.26165],[31.20803,62.44759],[31.62826,62.90585],[31.2635,63.22106],[29.99605,63.75387],[30.28656,63.81704],[30.58319,64.0782],[30.5104,64.26428],[30.09979,64.39218],[30.02563,64.58736],[30.16845,64.63329],[30.09429,64.79518],[29.78393,64.79811],[29.65347,64.89733],[29.65759,65.05939],[29.91027,65.09527],[29.93225,65.20895],[29.72076,65.27853],[29.91577,65.63788],[30.1863,65.66223],[29.9913,66.09771],[29.07119,66.91983],[30.11077,67.63431],[29.3486,68.08099],[28.67568,68.20166],[28.46547,68.54039],[28.72375,68.72642],[28.82675,68.87341],[28.44985,68.90792],[28.95996,69.05089],[28.83324,69.10563],[28.87207,69.22132],[29.36096,69.46526],[29.15634,69.69667],[28.38455,69.83488],[28.35845,69.88312],[28.17169,69.92511],[28.00415,70.01495],[27.96569,70.0988]]],terms_url:"https://www.maanmittauslaitos.fi/en/",terms_text:"© Maanmittauslaitos",description:"Background map from the National Land Survey of Finland",icon:"https://www.maanmittauslaitos.fi/apple-touch-icon.png"},{id:"mml-orto",name:"MML Orthophoto",type:"tms",template:"http://tiles.kartat.kapsi.fi/ortokuva/{zoom}/{x}/{y}.jpg",zoomExtent:[2,19],polygon:[[[27.96569,70.0988],[27.57431,70.07728],[27.10876,69.93548],[26.70913,69.97549],[26.45507,69.94207],[25.87142,69.6671],[25.94833,69.61024],[25.83023,69.55323],[25.66955,69.20794],[25.73822,69.01797],[25.60089,68.90309],[25.45806,68.91199],[25.11749,68.80699],[25.07354,68.64355],[24.88128,68.62003],[23.97491,68.84568],[23.74969,68.8308],[23.63433,68.71645],[23.18939,68.68053],[22.52197,68.7553],[21.63894,69.28191],[21.26953,69.31783],[20.94131,69.21622],[21.08963,69.09307],[21.05941,69.04352],[20.72296,69.12491],[20.54443,69.0558],[20.84655,68.97416],[20.81634,68.91742],[21.38754,68.68461],[22.04734,68.47066],[22.80212,68.35464],[23.12072,68.13169],[23.5437,67.9633],[23.44757,67.8393],[23.48602,67.59352],[23.36517,67.46545],[23.71124,67.41592],[23.72772,67.32186],[23.54644,67.26885],[23.53128,67.16724],[23.89251,66.86863],[23.84582,66.57775],[23.61843,66.44562],[23.67171,66.20303],[23.87191,66.14551],[24.09988,65.87247],[24.1658,65.66959],[24.11636,65.39143],[21.37939,63.68037],[20.17639,63.29787],[19.08325,60.16064],[20.22033,59.44786],[22.29125,59.44507],[25.82336,59.933],[27.52075,60.23435],[27.83386,60.53229],[29.29641,61.26165],[31.20803,62.44759],[31.62826,62.90585],[31.2635,63.22106],[29.99605,63.75387],[30.28656,63.81704],[30.58319,64.0782],[30.5104,64.26428],[30.09979,64.39218],[30.02563,64.58736],[30.16845,64.63329],[30.09429,64.79518],[29.78393,64.79811],[29.65347,64.89733],[29.65759,65.05939],[29.91027,65.09527],[29.93225,65.20895],[29.72076,65.27853],[29.91577,65.63788],[30.1863,65.66223],[29.9913,66.09771],[29.07119,66.91983],[30.11077,67.63431],[29.3486,68.08099],[28.67568,68.20166],[28.46547,68.54039],[28.72375,68.72642],[28.82675,68.87341],[28.44985,68.90792],[28.95996,69.05089],[28.83324,69.10563],[28.87207,69.22132],[29.36096,69.46526],[29.15634,69.69667],[28.38455,69.83488],[28.35845,69.88312],[28.17169,69.92511],[28.00415,70.01495],[27.96569,70.0988]]],terms_url:"https://www.maanmittauslaitos.fi/en/",terms_text:"© Maanmittauslaitos",best:true,description:"Ortophotos from the National Land Survey of Finland",icon:"https://www.maanmittauslaitos.fi/apple-touch-icon.png"},{id:"mml-topo",name:"MML Topographic Map",type:"tms",template:"http://tiles.kartat.kapsi.fi/peruskartta/{zoom}/{x}/{y}.jpg",zoomExtent:[2,19],polygon:[[[27.96569,70.0988],[27.57431,70.07728],[27.10876,69.93548],[26.70913,69.97549],[26.45507,69.94207],[25.87142,69.6671],[25.94833,69.61024],[25.83023,69.55323],[25.66955,69.20794],[25.73822,69.01797],[25.60089,68.90309],[25.45806,68.91199],[25.11749,68.80699],[25.07354,68.64355],[24.88128,68.62003],[23.97491,68.84568],[23.74969,68.8308],[23.63433,68.71645],[23.18939,68.68053],[22.52197,68.7553],[21.63894,69.28191],[21.26953,69.31783],[20.94131,69.21622],[21.08963,69.09307],[21.05941,69.04352],[20.72296,69.12491],[20.54443,69.0558],[20.84655,68.97416],[20.81634,68.91742],[21.38754,68.68461],[22.04734,68.47066],[22.80212,68.35464],[23.12072,68.13169],[23.5437,67.9633],[23.44757,67.8393],[23.48602,67.59352],[23.36517,67.46545],[23.71124,67.41592],[23.72772,67.32186],[23.54644,67.26885],[23.53128,67.16724],[23.89251,66.86863],[23.84582,66.57775],[23.61843,66.44562],[23.67171,66.20303],[23.87191,66.14551],[24.09988,65.87247],[24.1658,65.66959],[24.11636,65.39143],[21.37939,63.68037],[20.17639,63.29787],[19.08325,60.16064],[20.22033,59.44786],[22.29125,59.44507],[25.82336,59.933],[27.52075,60.23435],[27.83386,60.53229],[29.29641,61.26165],[31.20803,62.44759],[31.62826,62.90585],[31.2635,63.22106],[29.99605,63.75387],[30.28656,63.81704],[30.58319,64.0782],[30.5104,64.26428],[30.09979,64.39218],[30.02563,64.58736],[30.16845,64.63329],[30.09429,64.79518],[29.78393,64.79811],[29.65347,64.89733],[29.65759,65.05939],[29.91027,65.09527],[29.93225,65.20895],[29.72076,65.27853],[29.91577,65.63788],[30.1863,65.66223],[29.9913,66.09771],[29.07119,66.91983],[30.11077,67.63431],[29.3486,68.08099],[28.67568,68.20166],[28.46547,68.54039],[28.72375,68.72642],[28.82675,68.87341],[28.44985,68.90792],[28.95996,69.05089],[28.83324,69.10563],[28.87207,69.22132],[29.36096,69.46526],[29.15634,69.69667],[28.38455,69.83488],[28.35845,69.88312],[28.17169,69.92511],[28.00415,70.01495],[27.96569,70.0988]]],terms_url:"https://www.maanmittauslaitos.fi/en/",terms_text:"© Maanmittauslaitos",description:"Topographic map from the National Land Survey of Finland",icon:"https://www.maanmittauslaitos.fi/apple-touch-icon.png"},{id:"mtbmap-no",name:"MTBmap.no",type:"tms",template:"https://mtbmap.no/tiles/osm/mtbmap/{zoom}/{x}/{y}.jpg",tileSize:512,zoomExtent:[3,14],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.mtbmap.no/",terms_text:"© MTBmap.no",description:"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/no/MTBmapno.png"},{id:"Mulhouse_2018",name:"Mulhouse - 2018",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/mulhouse_2018/{zoom}/{x}/{y}",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[7.53731,47.78041],[7.57439,47.84128],[7.57301,47.85602],[7.55035,47.86201],[7.53525,47.84588],[7.5016,47.85141],[7.45972,47.84174],[7.4556,47.83252],[7.4453,47.83114],[7.43088,47.84128],[7.41549,47.83831],[7.39174,47.84727],[7.38007,47.83851],[7.33475,47.83989],[7.34024,47.89563],[7.31758,47.91082],[7.28737,47.89977],[7.28462,47.88412],[7.24686,47.88228],[7.23724,47.87629],[7.23312,47.86431],[7.2139,47.86524],[7.183,47.85786],[7.17613,47.84819],[7.21115,47.82284],[7.18986,47.81085],[7.19948,47.78179],[7.16789,47.77025],[7.183,47.73517],[7.17682,47.72362],[7.19467,47.69451],[7.21802,47.68527],[7.24548,47.68527],[7.25166,47.69497],[7.2448,47.70376],[7.2551,47.71392],[7.27844,47.713],[7.27982,47.70237],[7.26814,47.69405],[7.26883,47.68434],[7.28531,47.67094],[7.30247,47.66308],[7.32376,47.65984],[7.33337,47.66724],[7.3732,47.65383],[7.39242,47.65475],[7.40822,47.6603],[7.39723,47.67648],[7.42744,47.68666],[7.47551,47.69821],[7.5222,47.69636],[7.55104,47.71531],[7.56134,47.73517],[7.53731,47.78041]]],terms_url:"https://data.mulhouse-alsace.fr/explore/dataset/m2a_orthophotographie-2018/information/",terms_text:"Mulhouse Alsace Agglomération 2018"},{id:"MunichLatestAerialImagery",name:"Munich latest aerial imagery 60cm",type:"wms",template:"https://ogc.muenchen.de/wms/opendata_luftbild?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=bgl0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[11,22],polygon:[[[11.48878,48.053],[11.55589,48.05323],[11.55583,48.06224],[11.56915,48.06229],[11.56908,48.07128],[11.64986,48.07155],[11.64993,48.06256],[11.70326,48.06274],[11.70313,48.08074],[11.71673,48.08079],[11.71667,48.08968],[11.7299,48.08972],[11.72963,48.12566],[11.74313,48.1257],[11.74292,48.15276],[11.72943,48.15271],[11.72936,48.16152],[11.71612,48.16147],[11.71592,48.18859],[11.7027,48.18855],[11.70263,48.19752],[11.67558,48.19743],[11.67537,48.22446],[11.66176,48.22441],[11.66169,48.23355],[11.64863,48.2335],[11.64857,48.24246],[11.54064,48.2421],[11.54058,48.25093],[11.52735,48.25088],[11.52728,48.26001],[11.47335,48.25983],[11.47356,48.23291],[11.46014,48.23287],[11.46021,48.22373],[11.43336,48.22364],[11.43343,48.21439],[11.3798,48.21421],[11.37987,48.20518],[11.36607,48.20514],[11.36621,48.18741],[11.35259,48.18737],[11.35266,48.17817],[11.33946,48.17813],[11.33973,48.14216],[11.36684,48.14225],[11.36697,48.12443],[11.38083,48.12448],[11.3809,48.11558],[11.44769,48.1158],[11.44804,48.07087],[11.46186,48.07091],[11.46193,48.06193],[11.48872,48.06202],[11.48878,48.053]]],terms_url:"http://www.geodatenservice-muenchen.de/",terms_text:"Datenquelle: dl-de/by-2-0: Landeshauptstadt München – Kommunalreferat – GeodatenService – www.geodatenservice-muenchen.de",icon:"https://www.muenchen.de/media/css/images/favicon_114x114.png"},{id:"openlabs-geoportal-public-transport",name:"Municipality of Tirana - Public Transport (Open Labs GeoPortal) (overlay)",type:"tms",template:"https://geoportal.openlabs.cc/mapcache/tms/1.0.0/public-transport@GoogleMapsCompatibleExtended/{zoom}/{x}/{-y}.png",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[19.73762,41.30154],[19.88628,41.27213],[19.86877,41.38582],[19.68338,41.3732],[19.73762,41.30154]]],terms_url:"https://geoportal.openlabs.cc/",terms_text:"Data provided by the Muncipality of Tirana hosted by Open Labs",description:"Bus stops & lines provided by the Muncipality of Tirana hosted by Open Labs",overlay:true},{id:"openlabs-geoportal-tirana",name:"Municipality of Tirana (Open Labs GeoPortal)",type:"tms",template:"https://geoportal.openlabs.cc/mapcache/tms/1.0.0/tirana@GoogleMapsCompatibleExtended/{zoom}/{x}/{-y}.png",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[19.70226,41.1404],[19.77573,41.11868],[19.86431,41.12126],[20.24986,41.3495],[20.03082,41.41184],[19.92577,41.5204],[19.88869,41.50755],[19.88937,41.42265],[19.81659,41.46177],[19.7335,41.43037],[19.74174,41.37887],[19.65797,41.37475],[19.57214,41.24322],[19.61815,41.22567],[19.67171,41.22722],[19.70226,41.1404]]],terms_url:"https://geoportal.openlabs.cc",terms_text:"Data provided by the Muncipality of Tirana hosted by Open Labs",description:"Streets & Builings provided by the Muncipality of Tirana hosted by Open Labs"},{id:"USDA-NAIP",name:"National Agriculture Imagery Program",type:"wms",template:"https://gis.apfo.usda.gov/arcgis/services/NAIP/USDA_CONUS_PRIME/ImageServer/WMSServer?FORMAT=image/jpeg&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[12,20],polygon:[[[-123.25493,48.7529],[-123.25493,48.55923],[-123.19222,48.55923],[-123.19222,48.43484],[-122.94196,48.43484],[-122.94196,48.37208],[-122.88062,48.37208],[-122.88062,48.30948],[-122.81676,48.30948],[-122.81676,48.19046],[-123.00411,48.19046],[-123.00411,48.12759],[-123.05842,48.12759],[-123.05842,48.19051],[-123.25411,48.19051],[-123.25411,48.1275],[-123.37066,48.1275],[-123.37066,48.19084],[-124.05826,48.19084],[-124.05826,48.25344],[-124.18152,48.25344],[-124.18152,48.31647],[-124.43191,48.31647],[-124.43191,48.37826],[-124.55646,48.37826],[-124.55646,48.44083],[-124.75551,48.44083],[-124.75551,48.1915],[-124.81853,48.1915],[-124.81853,48.12284],[-124.7553,48.12284],[-124.7553,47.55353],[-124.38121,47.55353],[-124.38121,47.12187],[-124.19289,47.12187],[-124.19289,43.75694],[-124.44434,43.75694],[-124.44434,43.14256],[-124.63989,43.14256],[-124.63989,42.61945],[-124.44385,42.61945],[-124.44385,39.80807],[-123.88157,39.80807],[-123.88157,39.11028],[-123.75805,39.11028],[-123.75805,38.49688],[-123.27028,38.49688],[-123.27028,37.93319],[-122.81481,37.93319],[-122.81481,37.80196],[-122.56643,37.80196],[-122.56643,36.93196],[-121.8784,36.93196],[-121.8784,36.68976],[-122.00347,36.68976],[-122.00347,36.43411],[-121.94142,36.43411],[-121.94142,35.92976],[-121.5041,35.92976],[-121.5041,35.81003],[-121.37903,35.81003],[-121.37903,35.42392],[-120.94265,35.42392],[-120.94265,35.18497],[-120.8172,35.18497],[-120.8172,35.12199],[-120.69184,35.12199],[-120.69184,34.49668],[-120.50459,34.49668],[-120.50459,34.43397],[-120.00788,34.43397],[-120.00788,34.36826],[-119.52835,34.36826],[-119.52835,34.05764],[-119.0061,34.05764],[-119.0061,33.99753],[-118.50463,33.99753],[-118.50463,33.86946],[-118.44132,33.86946],[-118.44132,33.68653],[-118.06691,33.68653],[-118.06691,33.30638],[-117.503,33.30638],[-117.503,33.05003],[-117.31882,33.05003],[-117.31882,32.62059],[-117.1917,32.62059],[-117.1917,32.49746],[-116.7465,32.49746],[-116.7465,32.56092],[-115.99701,32.56092],[-115.99701,32.62649],[-114.88081,32.62649],[-114.88081,32.43408],[-114.62945,32.43408],[-114.62945,32.37316],[-114.44474,32.37316],[-114.44474,32.30754],[-114.25576,32.30754],[-114.25576,32.24446],[-114.06803,32.24446],[-114.06803,32.18291],[-113.81665,32.18291],[-113.81665,32.12076],[-113.63074,32.12076],[-113.63074,32.05651],[-113.44175,32.05651],[-113.44175,31.99844],[-113.2546,31.99844],[-113.2546,31.93254],[-113.06807,31.93254],[-113.06807,31.87181],[-112.81611,31.87181],[-112.81611,31.81042],[-112.63088,31.81042],[-112.63088,31.74647],[-112.44189,31.74647],[-112.44189,31.6856],[-112.25719,31.6856],[-112.25719,31.62104],[-112.00338,31.62104],[-112.00338,31.55958],[-111.81562,31.55958],[-111.81562,31.49702],[-111.62786,31.49702],[-111.62786,31.43399],[-111.4419,31.43399],[-111.4419,31.37339],[-111.25597,31.37339],[-111.25597,31.31132],[-108.18458,31.31132],[-108.18458,31.74595],[-106.50651,31.74595],[-106.50651,31.68423],[-106.37973,31.68423],[-106.37973,31.62175],[-106.31743,31.62175],[-106.31743,31.49682],[-106.25518,31.49682],[-106.25518,31.43449],[-106.19247,31.43449],[-106.19247,31.37213],[-106.00392,31.37213],[-106.00392,31.30933],[-105.94166,31.30933],[-105.94166,31.24575],[-105.87982,31.24575],[-105.87982,31.18362],[-105.81623,31.18362],[-105.81623,31.12072],[-105.69212,31.12072],[-105.69212,31.05848],[-105.63029,31.05848],[-105.63029,30.93283],[-105.50444,30.93283],[-105.50444,30.87159],[-105.4413,30.87159],[-105.4413,30.80846],[-105.37815,30.80846],[-105.37815,30.74718],[-105.19047,30.74718],[-105.19047,30.68432],[-105.12862,30.68432],[-105.12862,30.61997],[-105.00365,30.61997],[-105.00365,30.55891],[-104.9418,30.55891],[-104.9418,30.49632],[-104.8782,30.49632],[-104.8782,30.30983],[-104.81553,30.30983],[-104.81553,30.24783],[-104.75361,30.24783],[-104.75361,29.93539],[-104.69095,29.93539],[-104.69095,29.80902],[-104.62913,29.80902],[-104.62913,29.68436],[-104.56599,29.68436],[-104.56599,29.62235],[-104.50372,29.62235],[-104.50372,29.55954],[-104.44101,29.55954],[-104.44101,29.49748],[-104.25376,29.49748],[-104.25376,29.37167],[-104.1292,29.37167],[-104.1292,29.30916],[-104.06887,29.30916],[-104.06887,29.24673],[-103.81873,29.24673],[-103.81873,29.18431],[-103.75574,29.18431],[-103.75574,29.12232],[-103.56675,29.12232],[-103.56675,29.05981],[-103.50498,29.05981],[-103.50498,28.99675],[-103.31658,28.99675],[-103.31658,28.93469],[-103.05976,28.93469],[-103.05976,29.0593],[-102.99797,29.0593],[-102.99797,29.12129],[-102.93314,29.12129],[-102.93314,29.18486],[-102.8096,29.18486],[-102.8096,29.25262],[-102.87013,29.25262],[-102.87013,29.3081],[-102.80967,29.3081],[-102.80967,29.37155],[-102.74757,29.37155],[-102.74757,29.55819],[-102.68455,29.55819],[-102.68455,29.68477],[-102.49678,29.68477],[-102.49678,29.74577],[-102.30866,29.74577],[-102.30866,29.80866],[-102.19093,29.80866],[-102.19093,29.74601],[-101.50499,29.74601],[-101.50499,29.68468],[-101.38058,29.68468],[-101.38058,29.55945],[-101.31751,29.55945],[-101.31751,29.49589],[-101.19101,29.49589],[-101.19101,29.43261],[-101.0675,29.43261],[-101.0675,29.30881],[-100.94189,29.30881],[-100.94189,29.24562],[-100.81673,29.24562],[-100.81673,29.11904],[-100.75227,29.11904],[-100.75227,29.05782],[-100.69254,29.05782],[-100.69254,28.87204],[-100.62902,28.87204],[-100.62902,28.80954],[-100.56799,28.80954],[-100.56799,28.62255],[-100.50404,28.62255],[-100.50404,28.55838],[-100.44218,28.55838],[-100.44218,28.49683],[-100.37943,28.49683],[-100.37943,28.30929],[-100.31719,28.30929],[-100.31719,28.18357],[-100.25448,28.18357],[-100.25448,28.12139],[-100.12823,28.12139],[-100.12823,28.05921],[-100.06595,28.05921],[-100.06595,27.99661],[-100.00239,27.99661],[-100.00239,27.93322],[-99.94265,27.93322],[-99.94265,27.74547],[-99.81685,27.74547],[-99.81685,27.68343],[-99.75413,27.68343],[-99.75413,27.62215],[-99.62916,27.62215],[-99.62916,27.5589],[-99.56728,27.5589],[-99.56728,27.43538],[-99.50418,27.43538],[-99.50418,27.3774],[-99.56718,27.3774],[-99.56718,27.24637],[-99.50498,27.24637],[-99.50498,26.99656],[-99.44274,26.99656],[-99.44274,26.8728],[-99.38006,26.8728],[-99.38006,26.80682],[-99.31907,26.80682],[-99.31907,26.74736],[-99.25375,26.74736],[-99.25375,26.62101],[-99.19106,26.62101],[-99.19106,26.49567],[-99.13006,26.49567],[-99.13006,26.37138],[-99.00295,26.37138],[-99.00295,26.30938],[-98.81657,26.30938],[-98.81657,26.24578],[-98.69201,26.24578],[-98.69201,26.18371],[-98.44409,26.18371],[-98.44409,26.12172],[-98.38232,26.12172],[-98.38232,26.05965],[-98.25327,26.05965],[-98.25327,25.99869],[-98.01091,25.99869],[-98.01091,25.99323],[-97.69323,25.99323],[-97.69323,25.93341],[-97.63139,25.93341],[-97.63139,25.86959],[-97.50468,25.86959],[-97.50468,25.80735],[-97.30834,25.80735],[-97.30834,25.87312],[-97.24563,25.87312],[-97.24563,25.93537],[-97.11389,25.93537],[-97.11389,27.68092],[-97.0571,27.68092],[-97.0571,27.81082],[-95.58108,27.81082],[-95.58108,28.74688],[-94.27104,28.74688],[-94.27104,29.55941],[-92.50299,29.55941],[-92.50299,29.49748],[-91.87762,29.49748],[-91.87762,29.3727],[-91.37842,29.3727],[-91.37842,29.24683],[-91.3154,29.24683],[-91.3154,29.18443],[-91.12947,29.18443],[-91.12947,29.12326],[-91.00526,29.12326],[-91.00526,28.99684],[-89.45002,28.99684],[-89.45002,28.86774],[-88.81043,28.86774],[-88.81043,30.18419],[-85.87915,30.18419],[-85.87915,29.5455],[-84.83681,29.5455],[-84.83681,29.62252],[-84.74828,29.62252],[-84.74828,29.68362],[-84.68589,29.68362],[-84.68589,29.74684],[-83.6297,29.74684],[-83.6297,29.43244],[-83.31749,29.43244],[-83.31749,29.05794],[-82.87966,29.05794],[-82.87966,27.74535],[-82.81828,27.74535],[-82.81828,26.92909],[-82.37968,26.92909],[-82.37968,26.36942],[-81.87771,26.36942],[-81.87771,25.80597],[-81.50369,25.80597],[-81.50369,25.74748],[-81.44055,25.74748],[-81.44055,25.68515],[-81.31559,25.68515],[-81.31559,25.5601],[-81.25385,25.5601],[-81.25385,25.43424],[-81.1902,25.43424],[-81.1902,25.12343],[-81.12881,25.12343],[-81.12881,25.06194],[-81.06492,25.06194],[-81.06492,24.81578],[-81.62895,24.81578],[-81.62895,24.75384],[-81.69072,24.75384],[-81.69072,24.68994],[-81.81732,24.68994],[-81.81732,24.62792],[-82.191,24.62792],[-82.191,24.49629],[-81.62166,24.49629],[-81.62166,24.55948],[-81.37201,24.55948],[-81.37201,24.62207],[-81.05933,24.62207],[-81.05933,24.68483],[-80.93471,24.68483],[-80.93471,24.74748],[-80.74711,24.74748],[-80.74711,24.81006],[-80.36299,24.81006],[-80.36299,25.11759],[-80.12234,25.11759],[-80.12234,25.74724],[-80.05885,25.74724],[-80.05885,26.37083],[-79.99584,26.37083],[-79.99584,26.9398],[-80.05873,26.9398],[-80.05873,27.12775],[-80.12263,27.12775],[-80.12263,27.25343],[-80.1847,27.25343],[-80.1847,27.37812],[-80.24617,27.37812],[-80.24617,27.56587],[-80.30948,27.56587],[-80.30948,27.75303],[-80.37215,27.75303],[-80.37215,27.87745],[-80.43515,27.87745],[-80.43515,28.00334],[-80.49661,28.00334],[-80.49661,28.12773],[-80.55872,28.12773],[-80.55872,28.37235],[-80.49663,28.37235],[-80.49663,29.51603],[-81.12136,29.51603],[-81.12136,31.6847],[-80.60187,31.6847],[-80.60187,32.24753],[-79.4921,32.24753],[-79.4921,32.99703],[-79.11165,32.99703],[-79.11165,33.37295],[-78.61536,33.37295],[-78.61536,33.80976],[-77.9317,33.80976],[-77.9317,33.87182],[-77.86923,33.87182],[-77.86923,34.05525],[-77.68264,34.05525],[-77.68264,34.29746],[-77.24535,34.29746],[-77.24535,34.55986],[-76.49733,34.55986],[-76.49733,34.6228],[-76.43376,34.6228],[-76.43376,34.68493],[-76.37321,34.68493],[-76.37321,34.74677],[-76.30594,34.74677],[-76.30594,34.80855],[-76.2468,34.80855],[-76.2468,34.87284],[-76.18259,34.87284],[-76.18259,34.93353],[-76.12081,34.93353],[-76.12081,34.99524],[-75.9979,34.99524],[-75.9979,35.05782],[-75.87034,35.05782],[-75.87034,35.12191],[-75.74622,35.12191],[-75.74622,35.18189],[-75.49297,35.18189],[-75.49297,35.3083],[-75.43257,35.3083],[-75.43257,35.75425],[-75.49699,35.75425],[-75.49699,37.81056],[-75.3083,37.81056],[-75.3083,37.87201],[-75.2456,37.87201],[-75.2456,37.99548],[-75.18288,37.99548],[-75.18288,38.05851],[-75.11848,38.05851],[-75.11848,38.24691],[-75.05921,38.24691],[-75.05921,38.37043],[-74.99481,38.37043],[-74.99481,38.87184],[-74.48783,38.87184],[-74.48783,39.30894],[-74.17663,39.30894],[-74.17663,39.62247],[-74.0567,39.62247],[-74.0567,39.93318],[-73.9959,39.93318],[-73.9959,40.18549],[-73.93416,40.18549],[-73.93416,40.49595],[-73.8723,40.49595],[-73.8723,40.55271],[-71.80745,40.55271],[-71.80745,41.3088],[-70.88251,41.3088],[-70.88251,41.18498],[-70.74619,41.18498],[-70.74619,41.30919],[-70.43376,41.30919],[-70.43376,41.49639],[-69.93343,41.49639],[-69.93343,41.62308],[-69.86986,41.62308],[-69.86986,41.87769],[-69.93579,41.87769],[-69.93579,42.00323],[-69.99758,42.00323],[-69.99758,42.06502],[-70.06061,42.06502],[-70.06061,42.12943],[-70.55729,42.12943],[-70.55729,43.24871],[-70.49741,43.24871],[-70.49741,43.30922],[-70.37042,43.30922],[-70.37042,43.37196],[-70.30857,43.37196],[-70.30857,43.49699],[-70.18392,43.49699],[-70.18392,43.62235],[-70.05758,43.62235],[-70.05758,43.68502],[-69.74552,43.68502],[-69.74552,43.74766],[-69.24728,43.74766],[-69.24728,43.8107],[-69.05607,43.8107],[-69.05607,43.87172],[-68.99505,43.87172],[-68.99505,43.9982],[-68.49637,43.9982],[-68.49637,44.05974],[-68.3081,44.05974],[-68.3081,44.12214],[-68.18518,44.12214],[-68.18518,44.30814],[-67.9956,44.30814],[-67.9956,44.37275],[-67.8103,44.37275],[-67.8103,44.43518],[-67.49653,44.43518],[-67.49653,44.49688],[-67.37102,44.49688],[-67.37102,44.56006],[-67.18488,44.56006],[-67.18488,44.62133],[-67.12212,44.62133],[-67.12212,44.68679],[-67.05936,44.68679],[-67.05936,44.74737],[-66.93111,44.74737],[-66.93111,44.94066],[-66.99468,44.94066],[-66.99468,45.00245],[-67.05958,45.00245],[-67.05958,45.12734],[-67.1202,45.12734],[-67.1202,45.19101],[-67.24698,45.19101],[-67.24698,45.25344],[-67.31775,45.25344],[-67.31775,45.18984],[-67.37075,45.18984],[-67.37075,45.2534],[-67.43269,45.2534],[-67.43269,45.30834],[-67.37086,45.30834],[-67.37086,45.4397],[-67.43056,45.4397],[-67.43056,45.49501],[-67.37099,45.49501],[-67.37099,45.62645],[-67.6215,45.62645],[-67.6215,45.68961],[-67.68383,45.68961],[-67.68383,45.75326],[-67.74621,45.75326],[-67.74621,47.12682],[-67.87001,47.12682],[-67.87001,47.19003],[-67.93238,47.19003],[-67.93238,47.25397],[-67.99594,47.25397],[-67.99594,47.31497],[-68.12067,47.31497],[-68.12067,47.37808],[-68.44232,47.37808],[-68.44232,47.31661],[-68.63143,47.31661],[-68.63143,47.25447],[-68.9978,47.25447],[-68.9978,47.43989],[-69.06072,47.43989],[-69.06072,47.50476],[-69.25381,47.50476],[-69.25381,47.43981],[-69.31793,47.43981],[-69.31793,47.3786],[-69.44385,47.3786],[-69.44385,47.31563],[-69.50382,47.31563],[-69.50382,47.25258],[-69.56678,47.25258],[-69.56678,47.19109],[-69.63035,47.19109],[-69.63035,47.1287],[-69.69331,47.1287],[-69.69331,47.06543],[-69.75571,47.06543],[-69.75571,47.00428],[-69.81804,47.00428],[-69.81804,46.94153],[-69.8804,46.94153],[-69.8804,46.87925],[-69.94217,46.87925],[-69.94217,46.81774],[-70.00631,46.81774],[-70.00631,46.69203],[-70.07043,46.69203],[-70.07043,46.44259],[-70.19459,46.44259],[-70.19459,46.37859],[-70.2562,46.37859],[-70.2562,46.31526],[-70.32037,46.31526],[-70.32037,46.06512],[-70.3815,46.06512],[-70.3815,45.93552],[-70.32016,45.93552],[-70.32016,45.87948],[-70.44931,45.87948],[-70.44931,45.75387],[-70.507,45.75387],[-70.507,45.69169],[-70.63166,45.69169],[-70.63166,45.62916],[-70.75755,45.62916],[-70.75755,45.44147],[-70.88099,45.44147],[-70.88099,45.37806],[-71.13328,45.37806],[-71.13328,45.31515],[-71.38303,45.31515],[-71.38303,45.25342],[-71.50764,45.25342],[-71.50764,45.06557],[-73.94189,45.06557],[-73.94189,45.00312],[-74.74697,45.00312],[-74.74697,45.0649],[-74.8801,45.0649],[-74.8801,45.0029],[-75.06625,45.0029],[-75.06625,44.94152],[-75.25394,44.94152],[-75.25394,44.8776],[-75.37896,44.8776],[-75.37896,44.81535],[-75.44313,44.81535],[-75.44313,44.75361],[-75.56666,44.75361],[-75.56666,44.69099],[-75.62902,44.69099],[-75.62902,44.6285],[-75.75405,44.6285],[-75.75405,44.56638],[-75.81731,44.56638],[-75.81731,44.50289],[-75.87995,44.50289],[-75.87995,44.37849],[-76.13003,44.37849],[-76.13003,44.31592],[-76.1927,44.31592],[-76.1927,44.25344],[-76.31826,44.25344],[-76.31826,44.19167],[-76.3793,44.19167],[-76.3793,44.06537],[-76.44276,44.06537],[-76.44276,43.99638],[-76.31703,43.99638],[-76.31703,43.94146],[-76.50766,43.94146],[-76.50766,43.87233],[-76.383,43.87233],[-76.383,43.80919],[-76.25341,43.80919],[-76.25341,43.56652],[-76.50648,43.56652],[-76.50648,43.50339],[-76.63312,43.50339],[-76.63312,43.44323],[-76.69511,43.44323],[-76.69511,43.37869],[-76.81778,43.37869],[-76.81778,43.31807],[-77.682,43.31807],[-77.682,43.37894],[-78.05659,43.37894],[-78.05659,43.43969],[-78.43897,43.43969],[-78.43897,43.37944],[-78.88034,43.37944],[-78.88034,43.31497],[-79.12989,43.31497],[-79.12989,43.24293],[-79.06696,43.24293],[-79.06696,43.12999],[-79.12989,43.12999],[-79.12989,43.05773],[-79.07126,43.05773],[-79.07126,42.92949],[-78.94326,42.92949],[-78.94326,42.75422],[-79.06944,42.75422],[-79.06944,42.69416],[-79.13344,42.69416],[-79.13344,42.6297],[-79.19475,42.6297],[-79.19475,42.56635],[-79.37868,42.56635],[-79.37868,42.50334],[-79.4443,42.50334],[-79.4443,42.44106],[-79.56799,42.44106],[-79.56799,42.37753],[-79.69062,42.37753],[-79.69062,42.31711],[-79.81646,42.31711],[-79.81646,42.25345],[-80.00524,42.25345],[-80.00524,42.19092],[-80.19168,42.19092],[-80.19168,42.12726],[-80.3168,42.12726],[-80.3168,42.06699],[-80.50632,42.06699],[-80.50632,42.00343],[-80.69305,42.00343],[-80.69305,41.94151],[-80.94404,41.94151],[-80.94404,41.87812],[-81.19427,41.87812],[-81.19427,41.81665],[-81.31901,41.81665],[-81.31901,41.75455],[-81.44184,41.75455],[-81.44184,41.69096],[-81.50535,41.69096],[-81.50535,41.63016],[-82.74701,41.63016],[-82.74701,41.75369],[-82.88391,41.75369],[-82.88391,41.56561],[-82.99572,41.56561],[-82.99572,41.62704],[-83.12578,41.62704],[-83.12578,41.68784],[-83.24747,41.68784],[-83.24747,41.75369],[-83.37373,41.75369],[-83.37373,41.80928],[-83.3106,41.80928],[-83.3106,41.87161],[-83.24747,41.87161],[-83.24747,41.93614],[-83.18434,41.93614],[-83.18434,41.99609],[-83.12077,41.99609],[-83.12077,42.24648],[-83.05892,42.24648],[-83.05892,42.30896],[-82.86853,42.30896],[-82.86853,42.37177],[-82.80722,42.37177],[-82.80722,42.55855],[-82.75537,42.55855],[-82.75537,42.49549],[-82.5599,42.49549],[-82.5599,42.55855],[-82.49678,42.55855],[-82.49678,42.68336],[-82.43289,42.68336],[-82.43289,42.93422],[-82.37006,42.93422],[-82.37006,43.06481],[-82.43289,43.06481],[-82.43289,43.19176],[-82.49475,43.19176],[-82.49475,43.50346],[-82.55713,43.50346],[-82.55713,43.81609],[-82.61979,43.81609],[-82.61979,43.94221],[-82.68395,43.94221],[-82.68395,44.00226],[-82.74653,44.00226],[-82.74653,44.06705],[-82.87087,44.06705],[-82.87087,44.12919],[-83.00852,44.12919],[-83.00852,44.06648],[-83.13361,44.06648],[-83.13361,44.00539],[-83.24145,44.00539],[-83.24145,44.9962],[-83.18061,44.9962],[-83.18061,45.0673],[-83.24552,45.0673],[-83.24552,45.12874],[-83.30659,45.12874],[-83.30659,45.25515],[-83.37061,45.25515],[-83.37061,45.31659],[-83.43256,45.31659],[-83.43256,45.37921],[-83.61784,45.37921],[-83.61784,45.44197],[-83.80843,45.44197],[-83.80843,45.50362],[-84.05507,45.50362],[-84.05507,45.56479],[-84.12352,45.56479],[-84.12352,45.62878],[-84.18075,45.62878],[-84.18075,45.69147],[-84.31116,45.69147],[-84.31116,45.93371],[-83.821,45.93371],[-83.821,45.87251],[-83.49681,45.87251],[-83.49681,45.93371],[-83.43381,45.93371],[-83.43381,46.00169],[-83.49627,46.00169],[-83.49627,46.06682],[-83.56,46.06682],[-83.56,46.12616],[-83.99546,46.12616],[-83.99546,46.19317],[-84.05918,46.19317],[-84.05918,46.3815],[-84.11526,46.3815],[-84.11526,46.49536],[-84.05918,46.49536],[-84.05918,46.56827],[-84.25795,46.56827],[-84.25795,46.50512],[-84.30719,46.50512],[-84.30719,46.56827],[-84.44154,46.56827],[-84.44154,46.50453],[-84.99657,46.50453],[-84.99657,46.68429],[-84.92982,46.68429],[-84.92982,46.81808],[-85.31659,46.81808],[-85.31659,46.75358],[-87.55626,46.75358],[-87.55626,47.44074],[-87.68254,47.44074],[-87.68254,47.50356],[-88.25607,47.50356],[-88.25607,47.44337],[-88.44174,47.44337],[-88.44174,47.37899],[-88.50683,47.37899],[-88.50683,47.31539],[-88.63128,47.31539],[-88.63128,47.25398],[-88.75696,47.25398],[-88.75696,47.19347],[-88.88383,47.19347],[-88.88383,47.12847],[-88.94342,47.12847],[-88.94342,47.06621],[-89.07087,47.06621],[-89.07087,47.00268],[-89.25656,47.00268],[-89.25656,46.94108],[-90.36777,46.94108],[-90.36777,47.68448],[-90.307,47.68448],[-90.307,47.74602],[-89.99486,47.74602],[-89.99486,47.80827],[-89.80486,47.80827],[-89.80486,47.87006],[-89.67977,47.87006],[-89.67977,47.93396],[-89.49338,47.93396],[-89.49338,47.9958],[-89.42847,47.9958],[-89.42847,48.06564],[-89.99327,48.06564],[-89.99327,48.1283],[-90.74559,48.1283],[-90.74559,48.18931],[-90.80873,48.18931],[-90.80873,48.25221],[-91.06776,48.25221],[-91.06776,48.19167],[-91.19462,48.19167],[-91.19462,48.1279],[-91.68142,48.1279],[-91.68142,48.2526],[-91.93219,48.2526],[-91.93219,48.31425],[-91.99297,48.31425],[-91.99297,48.37808],[-92.31894,48.37808],[-92.31894,48.25291],[-92.37322,48.25291],[-92.37322,48.31534],[-92.43223,48.31534],[-92.43223,48.44114],[-92.49772,48.44114],[-92.49772,48.50178],[-92.56794,48.50178],[-92.56794,48.43958],[-92.62105,48.43958],[-92.62105,48.56508],[-92.80868,48.56508],[-92.80868,48.62869],[-92.80868,48.62674],[-92.93318,48.62674],[-92.93318,48.69221],[-93.00517,48.69221],[-93.00517,48.6283],[-93.12259,48.6283],[-93.12259,48.69221],[-93.31908,48.69221],[-93.31908,48.62674],[-93.50495,48.62674],[-93.50495,48.56352],[-93.74746,48.56352],[-93.74746,48.62674],[-93.81355,48.62674],[-93.81355,48.68988],[-94.24531,48.68988],[-94.24531,48.75543],[-94.61832,48.75543],[-94.61832,48.94104],[-94.6809,48.94104],[-94.6809,49.00297],[-94.74415,49.00297],[-94.74415,49.25361],[-94.80841,49.25361],[-94.80841,49.37841],[-95.11924,49.37841],[-95.11924,49.44253],[-95.19343,49.44253],[-95.19343,49.00353],[-96.87069,49.00353],[-96.87069,49.06561],[-99.00493,49.06561],[-99.00493,49.00507],[-109.36993,49.00507],[-109.36993,49.06682],[-109.50587,49.06682],[-109.50587,49.00507],[-114.183,49.00507],[-114.183,49.06873],[-114.75787,49.06873],[-114.75787,49.00507],[-115.43373,49.00507],[-115.43373,49.06714],[-116.50627,49.06714],[-116.50627,49.00507],[-117.30895,49.00507],[-117.30895,49.06598],[-119.88295,49.06598],[-119.88295,49.00507],[-120.12086,49.00507],[-120.12086,49.06784],[-121.44516,49.06784],[-121.44516,49.00507],[-121.93118,49.00507],[-121.93118,49.06561],[-122.81748,49.06561],[-122.81748,49.00291],[-122.87952,49.00291],[-122.87952,48.9347],[-122.81746,48.9347],[-122.81746,48.8102],[-122.75389,48.8102],[-122.75389,48.75338],[-122.87129,48.75338],[-122.87129,48.81539],[-123.00554,48.81539],[-123.00554,48.75295],[-123.12969,48.75295],[-123.12969,48.69022],[-123.18382,48.69022],[-123.18382,48.7529],[-123.25493,48.7529]],[[-122.93417,37.75215],[-122.93475,37.6842],[-123.0679,37.6849],[-123.06737,37.74753],[-123.12926,37.74785],[-123.12869,37.81569],[-123.05907,37.81532],[-123.05959,37.75281],[-122.93417,37.75215]],[[-71.62995,41.25409],[-71.49665,41.25414],[-71.49656,41.12297],[-71.62986,41.12291],[-71.62995,41.25409]],[[-70.31843,41.37752],[-70.31834,41.24482],[-70.19066,41.24487],[-70.19062,41.1886],[-69.9336,41.1887],[-69.93373,41.37919],[-69.99507,41.37917],[-69.99511,41.44316],[-70.07078,41.44313],[-70.0707,41.31449],[-70.24617,41.31443],[-70.24621,41.37755],[-70.31843,41.37752]],[[-68.94034,43.94041],[-68.68569,43.9405],[-68.68565,43.87218],[-68.74654,43.87216],[-68.7465,43.81025],[-68.80908,43.81023],[-68.80903,43.74673],[-68.87731,43.7467],[-68.87735,43.81178],[-68.94025,43.81176],[-68.94034,43.94041]],[[-123.12915,49.06451],[-122.99542,49.06451],[-122.99542,48.93432],[-123.12915,48.93432],[-123.12915,49.06451]],[[-82.94071,24.75359],[-82.87194,24.75359],[-82.87194,24.69057],[-82.74462,24.69057],[-82.74462,24.62146],[-82.8088,24.62146],[-82.8088,24.55949],[-82.94071,24.55949],[-82.94071,24.75359]]],description:"The most recent year of DOQQs from the National Agriculture Imagery Program (NAIP) for each state in the contiguous United States.",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/USDA.png"},{id:"NC-US",name:"NC Latest Orthoimagery",type:"wms",template:"https://services.nconemap.gov/secure/services/Imagery/Orthoimagery_Latest/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2010-01-01T00:00:00.000Z",polygon:[[[-81.6792,36.5974],[-80.25359,36.54793],[-75.8409,36.5671],[-75.4323,35.6441],[-75.50475,35.18806],[-75.70525,35.17684],[-76.14745,34.94077],[-76.53472,34.55487],[-76.69676,34.66789],[-77.27904,34.53224],[-77.68828,34.26482],[-77.9435,33.8269],[-78.21288,33.89402],[-78.5301,33.8304],[-79.6693,34.7916],[-80.8122,34.8085],[-80.84685,34.96329],[-80.95122,35.05552],[-81.06383,35.01729],[-81.07482,35.13417],[-82.3632,35.1805],[-82.9989,34.9919],[-84.3333,34.9767],[-84.27184,35.28229],[-84.09056,35.27332],[-83.91478,35.53301],[-83.55498,35.5911],[-83.2556,35.73392],[-82.98644,35.81414],[-82.92327,35.96767],[-82.67882,36.0854],[-82.60192,36.08984],[-82.536,35.96989],[-82.35472,36.14752],[-82.04436,36.14309],[-81.90428,36.33803],[-81.74224,36.37342],[-81.6792,36.5974]]],description:"Most recent true color imagery for the state of North Carolina. The imagery has a pixel resolution of 6 inches and is comprised of imagery flown in 2010, 2012, 2013, and 2014"},{id:"landsat-niger-2012_10",name:"Niger Delta Oct 2012 Landsat",type:"tms",template:"http://{switch:a,b,c,d}.imagery.paulnorman.ca/tiles/niger_oct_2012_321/{zoom}/{x}/{y}.png",endDate:"2012-10-01T00:00:00.000Z",startDate:"2012-10-01T00:00:00.000Z",zoomExtent:[1,13],polygon:[[[-6.92922,13.78574],[-5.13295,13.51884],[-5.07802,13.74039],[-3.60036,13.52418],[-3.54543,13.74039],[-2.06227,13.52685],[-1.3564,16.58454],[-3.17464,16.85285],[-3.22408,16.62665],[-4.72371,16.85022],[-4.76766,16.63455],[-6.27553,16.84759],[-6.92922,13.78574]]]},{id:"img.nj.gov-Infrared2015",name:"NJ 2015 Aerial Imagery (Infrared)",type:"wms",template:"https://img.nj.gov/imagerywms/Infrared2015?FORMAT=image/png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&WIDTH={width}&HEIGHT={height}&LAYERS=Infrared2015&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-05-03T00:00:00.000Z",startDate:"2015-03-29T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-74.86599,40.08543],[-74.93534,40.07256],[-75.05653,40.00868],[-75.14236,39.95791],[-75.14456,39.88322],[-75.18515,39.88042],[-75.24499,39.85486],[-75.33339,39.8495],[-75.41531,39.80156],[-75.45131,39.78304],[-75.57744,39.62346],[-75.54245,39.56827],[-75.57847,39.48183],[-74.91678,38.84647],[-74.31702,39.38739],[-74.06708,39.75155],[-73.92141,40.49222],[-74.2382,40.49378],[-74.23859,40.54916],[-74.20211,40.54924],[-74.20228,40.57648],[-74.18406,40.57609],[-74.18436,40.63146],[-74.07587,40.63078],[-74.07532,40.64457],[-74.02124,40.65811],[-74.02081,40.69919],[-74.00265,40.69929],[-74.00247,40.74037],[-73.98434,40.74026],[-73.98402,40.78145],[-73.96591,40.78158],[-73.96597,40.80868],[-73.94777,40.80861],[-73.94769,40.82232],[-73.92966,40.82225],[-73.92906,40.86355],[-73.91104,40.86329],[-73.91061,40.91838],[-73.8923,40.91831],[-73.89215,40.95961],[-73.87413,40.95942],[-73.87386,40.99251],[-74.70601,41.36513],[-74.75716,41.34769],[-74.79801,41.32268],[-74.84024,41.27864],[-74.90547,41.17038],[-74.98152,41.1126],[-75.03902,41.03819],[-75.13515,40.99441],[-75.13773,40.97309],[-75.05705,40.86757],[-75.06846,40.85037],[-75.09687,40.85096],[-75.10099,40.83927],[-75.09018,40.82238],[-75.1367,40.77729],[-75.1724,40.78067],[-75.19833,40.75389],[-75.20506,40.69131],[-75.20373,40.61832],[-75.19764,40.57367],[-75.16777,40.55907],[-75.10237,40.56702],[-75.06906,40.5365],[-75.07421,40.45505],[-75.06134,40.4165],[-75.02684,40.40252],[-74.9671,40.3952],[-74.94461,40.33817],[-74.86839,40.29157],[-74.84402,40.24796],[-74.77552,40.21428],[-74.76334,40.19172],[-74.72918,40.16392],[-74.72609,40.14949],[-74.78805,40.12468],[-74.8229,40.13033],[-74.86599,40.08543]]],terms_url:"https://njgin.state.nj.us/NJ_NJGINExplorer/ShowMetadata.jsp?docId=188471FF-2803-4145-A5AD-605DE86D3B4D",terms_text:"NJ Office of Information Technology (NJOIT), Office of Geographic Information Systems (OGIS)",description:"Digital orthophotography of New Jersey, Near Infrared, 1 foot resolution"},{id:"img.nj.gov-Natural2015",name:"NJ 2015 Aerial Imagery (Natural Color)",type:"wms",template:"https://img.nj.gov/imagerywms/Natural2015?FORMAT=image/png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&WIDTH={width}&HEIGHT={height}&LAYERS=Natural2015&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-05-03T00:00:00.000Z",startDate:"2015-03-29T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-74.86599,40.08543],[-74.93534,40.07256],[-75.05653,40.00868],[-75.14236,39.95791],[-75.14456,39.88322],[-75.18515,39.88042],[-75.24499,39.85486],[-75.33339,39.8495],[-75.41531,39.80156],[-75.45131,39.78304],[-75.57744,39.62346],[-75.54245,39.56827],[-75.57847,39.48183],[-74.91678,38.84647],[-74.31702,39.38739],[-74.06708,39.75155],[-73.92141,40.49222],[-74.2382,40.49378],[-74.23859,40.54916],[-74.20211,40.54924],[-74.20228,40.57648],[-74.18406,40.57609],[-74.18436,40.63146],[-74.07587,40.63078],[-74.07532,40.64457],[-74.02124,40.65811],[-74.02081,40.69919],[-74.00265,40.69929],[-74.00247,40.74037],[-73.98434,40.74026],[-73.98402,40.78145],[-73.96591,40.78158],[-73.96597,40.80868],[-73.94777,40.80861],[-73.94769,40.82232],[-73.92966,40.82225],[-73.92906,40.86355],[-73.91104,40.86329],[-73.91061,40.91838],[-73.8923,40.91831],[-73.89215,40.95961],[-73.87413,40.95942],[-73.87386,40.99251],[-74.70601,41.36513],[-74.75716,41.34769],[-74.79801,41.32268],[-74.84024,41.27864],[-74.90547,41.17038],[-74.98152,41.1126],[-75.03902,41.03819],[-75.13515,40.99441],[-75.13773,40.97309],[-75.05705,40.86757],[-75.06846,40.85037],[-75.09687,40.85096],[-75.10099,40.83927],[-75.09018,40.82238],[-75.1367,40.77729],[-75.1724,40.78067],[-75.19833,40.75389],[-75.20506,40.69131],[-75.20373,40.61832],[-75.19764,40.57367],[-75.16777,40.55907],[-75.10237,40.56702],[-75.06906,40.5365],[-75.07421,40.45505],[-75.06134,40.4165],[-75.02684,40.40252],[-74.9671,40.3952],[-74.94461,40.33817],[-74.86839,40.29157],[-74.84402,40.24796],[-74.77552,40.21428],[-74.76334,40.19172],[-74.72918,40.16392],[-74.72609,40.14949],[-74.78805,40.12468],[-74.8229,40.13033],[-74.86599,40.08543]]],terms_url:"https://njgin.state.nj.us/NJ_NJGINExplorer/ShowMetadata.jsp?docId=188471FF-2803-4145-A5AD-605DE86D3B4D",terms_text:"NJ Office of Information Technology (NJOIT), Office of Geographic Information Systems (OGIS)",description:"Digital orthophotography of New Jersey, Natural Color, 1 foot resolution"},{id:"NLSC-EMAP5",name:"NLSC General Map with Contour line",type:"tms",template:"https://wmts.nlsc.gov.tw/wmts/EMAP5_OPENDATA/default/EPSG:3857/{zoom}/{y}/{x}",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,15],polygon:[[[121.2237,25.76997],[122.2251,26.60305],[122.9312,22.57058],[120.6771,20.72799],[118.2509,23.26265],[118.3036,23.30751],[118.1978,24.34453],[118.1036,24.36172],[118.2283,24.49486],[118.4416,24.55302],[118.6024,24.46068],[120.0474,25.38843],[119.8935,25.78169],[119.787,26.2048],[120.4578,26.53253],[121.2237,25.76997]]],terms_url:"https://maps.nlsc.gov.tw",terms_text:"© National Land Surveying and Mapping Center, Taiwan OGDL 1.0",description:"The emap from Taiwan National Land Surveying and Mapping Center",icon:"https://osmlab.github.io/editor-layer-index/sources/asia/tw/Taiwane-MapOpenData.png"},{id:"IBGE_Salvador_Streets",name:"Nomes de Ruas IBGE Salvador-BA",type:"tms",template:"https://api.mapbox.com/styles/v1/wille/cj8lp78dn62wl2rquim47qo0g/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoid2lsbGUiLCJhIjoicFNVWk5VWSJ9.hluCd0YGvYHNlFi_utWe2g",zoomExtent:[0,20],polygon:[[[-38.48974,-12.81113],[-38.54485,-13.01392],[-38.47755,-13.03466],[-38.33473,-12.94685],[-38.30006,-12.90669],[-38.33954,-12.90435],[-38.35482,-12.83021],[-38.38091,-12.82184],[-38.40717,-12.86754],[-38.46537,-12.81599],[-38.48974,-12.81113]]],description:"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - IBGE.",overlay:true},{id:"kelkkareitit",name:"Nordic snowmobile overlay",type:"tms",template:"https://tiles.kelkkareitit.fi/kelkkareitit/{zoom}/{x}/{y}.png",zoomExtent:[3,18],polygon:[[[27.53173,60.21799],[31.35496,62.51233],[31.63513,62.90773],[30.09154,64.91889],[30.21239,65.87473],[29.13573,66.90422],[30.19041,67.67609],[28.70726,68.42748],[29.02587,68.9505],[31.04735,69.53452],[31.78344,70.44784],[28.32274,71.32192],[23.76342,71.29023],[17.1826,69.99806],[12.10691,68.01581],[9.97556,64.85828],[4.13084,61.95963],[4.57029,59.00664],[6.21826,57.95859],[8.14086,57.8506],[10.41502,58.75682],[12.63702,56.0383],[12.7716,55.25095],[14.2932,55.19769],[18.58886,56.84297],[20.69823,59.3444],[27.53173,60.21799]]],terms_url:"https://kelkkareitit.fi/",terms_text:"© Kelkkareitit.fi",description:"Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)",icon:"https://kelkkareitit.fi/img/favicon.png",overlay:true},{id:"geovekst-nib",name:"Norway Orthophoto",type:"tms",template:"https://waapi.webatlas.no/maptiles/tiles/webatlas-orto-newup/wa_grid/{zoom}/{x}/{y}.jpeg?api_key=b8e36d51-119a-423b-b156-d744d54123d5",zoomExtent:[0,21],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://www.norgeibilder.no",terms_text:"© Geovekst",best:true,description:"Norwegian orthophotos (max zoom 21), courtesy of Geovekst and Norkart.",icon:"https://register.geonorge.no/data/organizations/_L_norgeibilder96x96.png"},{id:"geovekst-nib2",name:"Norway Orthophoto (more recent, less zoom)",type:"tms",template:"https://opencache{switch:,2,3}.statkart.no/gatekeeper/gk/gk.open_nib_web_mercator_wmts_v2?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=Nibcache_web_mercator_v2&STYLE=default&FORMAT=image/jpgpng&tileMatrixSet=default028mm&tileMatrix={zoom}&tileRow={y}&tileCol={x}",zoomExtent:[0,19],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://www.norgeibilder.no",terms_text:"© Geovekst",best:true,description:"Most recent Norwegian orthophotos (max zoom 19), courtesy of Geovekst and Kartverket.",icon:"https://register.geonorge.no/data/organizations/_L_norgeibilder96x96.png"},{id:"npd-offshore",name:"NPD Offshore Installations overlay",type:"wms",template:"http://gis.npd.no/ogc/factmaps/2_0?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=fclFixed,pplAll,fldByStatus&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,20],polygon:[[[8.51989,57.6454],[3.25195,56.08737],[2.61185,56.59434],[1.96321,57.90482],[1.48178,58.42936],[1.98303,60.31063],[1.78802,61.35659],[-0.49061,63.88725],[1.36226,67.01603],[14.99771,74.50082],[36.99371,74.50155],[36.99989,73.68633],[32.06909,70.27429],[23.97215,70.47356],[16.25974,68.58447],[12.12888,64.81157],[5.38328,61.92862],[5.7678,58.85355],[8.51989,57.6454]]],terms_url:"http://www.npd.no/no/Kart/Faktakart/",terms_text:"© Oljedirektoratet",description:"Production platforms and oil/natural gas fields on the Norwegian continental shelf",icon:"https://register.geonorge.no/data/organizations/870917732_od_liten.png",overlay:true},{id:"nve-snoskred",name:"NVE Avalanche Danger Areas overlay",type:"wms",template:"https://gis3.nve.no/map/services/SkredSnoAktR/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Snoskred-Aktsomhetsomrader&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,13],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.nve.no/flaum-og-skred/kartlegging/aktsemdkart/aktsomhetskart-for-snoskred/",terms_text:"© NVE",description:"Potential snowslide areas, computed from theoretical height model. Valid for drops higher than 20-50 meters. Dark red=trigger area.",icon:"https://kommunikasjon.ntb.no/data/images/00525/e8799776-4b69-4ec4-906d-46285ccb3dbe-w_300_h_100.png",overlay:true},{id:"nve-nettanlegg",name:"NVE Electricity Network overlay",type:"wms",template:"https://gis3.nve.no/map/services/Nettanlegg2/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Sentralnett,Regionalnett,Distribusjonsnett,Sjokabler,Master og stolper,Transformatorstasjoner&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.nve.no/karttjenester/",terms_text:"© NVE",description:"Power lines (high voltage network) including transformers, submarine cables and pylons. Local distribution network is not included.",icon:"https://kommunikasjon.ntb.no/data/images/00525/e8799776-4b69-4ec4-906d-46285ccb3dbe-w_300_h_100.png",overlay:true},{id:"nve-vannkraft",name:"NVE Hydropower Plants overlay",type:"wms",template:"https://gis3.nve.no/map/services/Vannkraft1/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vannkraftverk,Vannvei,Dam&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.nve.no/karttjenester/",terms_text:"© NVE",description:"Hydropower plants including waterways (tunnel, canal, pipeline) and dams",icon:"https://kommunikasjon.ntb.no/data/images/00525/e8799776-4b69-4ec4-906d-46285ccb3dbe-w_300_h_100.png",overlay:true},{id:"nve-vindkraft",name:"NVE Wind Power Plants overlay",type:"wms",template:"https://gis3.nve.no/map/services/Vindkraft2/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vindkraft_konsesjon_gitt_ikke_utbygd,Vindkraft_under_bygging,Vindkraft_utbygd,Vindkraftomrade,Vindturbin&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.nve.no/karttjenester/",terms_text:"© NVE",description:"Wind power turbines, farms and concession areas (blue: planned, light green: construction, dark green: built).",icon:"https://kommunikasjon.ntb.no/data/images/00525/e8799776-4b69-4ec4-906d-46285ccb3dbe-w_300_h_100.png",overlay:true},{id:"orthos.dhses.ny.gov_latest",name:"NYS Orthos Online",type:"wms",template:"https://orthos.dhses.ny.gov/arcgis/services/Latest/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0,1,2,3,4&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-74.91231,45.03606],[-73.47788,45.02996],[-73.33846,45.03098],[-73.31978,45.00558],[-73.32265,44.98525],[-73.34852,44.9283],[-73.36721,44.8397],[-73.34277,44.81727],[-73.34565,44.77647],[-73.37296,44.73463],[-73.37008,44.67946],[-73.39739,44.64471],[-73.39308,44.60276],[-73.39739,44.54543],[-73.34996,44.51264],[-73.34565,44.49521],[-73.37871,44.4706],[-73.30828,44.43572],[-73.30397,44.41827],[-73.33271,44.33917],[-73.30828,44.27128],[-73.30828,44.25172],[-73.38014,44.14868],[-73.40458,44.04133],[-73.3399,43.79596],[-73.28097,43.64222],[-73.2091,43.54957],[-73.21342,43.51206],[-73.24647,42.67557],[-73.45919,42.14284],[-73.47069,42.03938],[-73.48794,41.73764],[-73.49944,41.64319],[-73.47788,41.62708],[-73.43189,41.57979],[-73.42614,41.56366],[-73.42685,41.45926],[-73.43979,41.40322],[-73.44985,41.38328],[-73.43835,41.37033],[-73.42757,41.35901],[-73.41751,41.3439],[-73.41895,41.27642],[-73.43045,41.24455],[-73.46566,41.19752],[-73.52962,41.14505],[-73.55477,41.13368],[-73.61586,41.13531],[-73.62664,41.10878],[-73.62736,41.05407],[-73.63958,40.99118],[-73.61873,40.98195],[-73.59933,40.96568],[-73.59933,40.93474],[-73.63455,40.91682],[-73.68054,40.89183],[-73.69851,40.87988],[-73.68629,40.87064],[-73.66257,40.87934],[-73.63814,40.90541],[-73.59789,40.91193],[-73.57562,40.9179],[-73.52675,40.92388],[-73.50159,40.94288],[-73.4901,40.95374],[-73.41751,40.96079],[-73.38374,40.96133],[-73.33702,40.95591],[-73.30828,40.93637],[-73.27091,40.92659],[-73.2091,40.91953],[-73.18682,40.92714],[-73.16814,40.93148],[-73.16598,40.95971],[-73.16886,40.97002],[-73.12933,40.98195],[-73.10777,40.98195],[-73.06681,40.9749],[-72.8584,40.97436],[-72.71826,40.98195],[-72.65574,41.00528],[-72.64424,41.00473],[-72.62628,40.99226],[-72.54148,41.03889],[-72.4768,41.06328],[-72.45811,41.08928],[-72.41859,41.09308],[-72.36612,41.13856],[-72.36037,41.1418],[-72.32229,41.15479],[-72.29067,41.16399],[-72.21449,41.18238],[-72.20083,41.19157],[-72.04848,41.25914],[-72.02548,41.2937],[-71.93924,41.30774],[-71.92343,41.30666],[-71.90259,41.2991],[-71.90187,41.28939],[-71.99458,41.24509],[-72.10453,41.19806],[-72.18287,41.16723],[-72.18934,41.16237],[-72.25186,41.12232],[-72.30432,41.10445],[-72.31582,41.09524],[-72.27917,41.08441],[-72.2727,41.08062],[-72.26839,41.04973],[-72.21736,41.04811],[-72.19652,41.04215],[-72.18646,41.05298],[-72.17137,41.0584],[-72.14981,41.05895],[-72.15628,41.09633],[-72.15268,41.1077],[-72.14909,41.14667],[-72.134,41.14505],[-72.07076,41.10553],[-72.07435,41.05678],[-72.08657,41.03185],[-72.10957,41.0069],[-72.08729,41.01287],[-72.06213,41.02534],[-72.04561,41.03239],[-72.01902,41.03293],[-72.00895,41.04215],[-72.00177,41.05136],[-71.96368,41.07737],[-71.922,41.08874],[-71.88966,41.08766],[-71.85588,41.08062],[-71.84582,41.07466],[-71.85588,41.05298],[-71.89038,41.03727],[-71.91625,41.03022],[-71.99099,41.00365],[-72.07938,40.97273],[-72.31941,40.88205],[-72.4423,40.8402],[-72.62771,40.7869],[-72.76569,40.75043],[-72.88499,40.71286],[-72.95973,40.68671],[-73.03735,40.66],[-73.08118,40.64855],[-73.22994,40.61637],[-73.32193,40.6131],[-73.35211,40.61855],[-73.55477,40.56944],[-73.75959,40.57708],[-73.88248,40.54815],[-73.9335,40.53449],[-73.945,40.53395],[-73.94572,40.56289],[-74.08227,40.56234],[-74.08011,40.54924],[-74.12251,40.52084],[-74.15772,40.51373],[-74.18719,40.50117],[-74.22887,40.48696],[-74.26121,40.48532],[-74.2763,40.4957],[-74.27918,40.54378],[-74.26983,40.56671],[-74.25834,40.57217],[-74.22528,40.57217],[-74.226,40.58309],[-74.25115,40.59564],[-74.25259,40.62237],[-74.24324,40.64091],[-74.2339,40.64909],[-74.20228,40.654],[-74.12538,40.65673],[-74.11532,40.69107],[-74.09951,40.68998],[-74.07795,40.71068],[-74.06286,40.7183],[-74.05208,40.7439],[-74.02549,40.79288],[-73.98094,40.86901],[-73.96225,40.92551],[-73.94931,40.96459],[-73.94644,40.99877],[-73.98165,41.01612],[-74.04561,41.04323],[-74.18072,41.09524],[-74.30792,41.14938],[-74.44087,41.21537],[-74.52783,41.25914],[-74.61335,41.30234],[-74.65791,41.31098],[-74.70246,41.33581],[-74.76714,41.38975],[-74.79661,41.41023],[-74.85338,41.42263],[-74.90728,41.43179],[-74.99783,41.47111],[-75.04167,41.52708],[-75.08479,41.59323],[-75.08407,41.61848],[-75.07329,41.66467],[-75.08766,41.70278],[-75.08766,41.71351],[-75.12144,41.76177],[-75.11928,41.79232],[-75.13078,41.81696],[-75.18755,41.83838],[-75.25295,41.84962],[-75.28745,41.85497],[-75.29823,41.88227],[-75.30613,41.9304],[-75.34063,41.94003],[-75.3665,41.9566],[-75.37225,41.97744],[-75.58066,41.97957],[-75.58137,41.92399],[-75.78906,41.92666],[-75.78691,41.98278],[-79.77687,41.98118],[-79.7819,42.20994],[-79.77184,42.28017],[-79.72153,42.29824],[-79.57349,42.36731],[-79.42976,42.46599],[-79.3737,42.49991],[-79.25728,42.54546],[-79.18973,42.5624],[-79.16529,42.56981],[-79.12074,42.62483],[-79.0963,42.64598],[-79.06899,42.6967],[-79.03162,42.71043],[-78.98851,42.72311],[-78.88358,42.77693],[-78.88646,42.8149],[-78.93964,42.88655],[-78.93964,42.93603],[-79.04887,42.96969],[-79.04743,43.05167],[-79.09343,43.05272],[-79.09199,43.09262],[-79.08624,43.26556],[-79.06468,43.27602],[-78.84909,43.33041],[-78.72979,43.35237],[-78.63924,43.37013],[-78.54869,43.37953],[-78.47826,43.38789],[-77.95508,43.38476],[-77.73158,43.34714],[-77.71146,43.34034],[-77.66259,43.31159],[-77.61516,43.28387],[-77.55336,43.253],[-77.5282,43.25509],[-77.45634,43.27864],[-77.42256,43.28492],[-77.16385,43.29433],[-77.0503,43.29381],[-76.94178,43.29329],[-76.91447,43.30793],[-76.85051,43.3163],[-76.80236,43.32832],[-76.75996,43.35184],[-76.64785,43.42809],[-76.54509,43.48026],[-76.51993,43.49486],[-76.44304,43.52717],[-76.4222,43.53811],[-76.28206,43.53863],[-76.23822,43.55686],[-76.24038,43.74147],[-76.30649,43.82915],[-76.31152,43.8675],[-76.34602,43.8618],[-76.40064,43.86128],[-76.47178,43.88408],[-76.46675,43.90893],[-76.4186,43.93119],[-76.37189,43.93223],[-76.36974,43.90272],[-76.33308,43.92964],[-76.27847,43.92964],[-76.27847,43.90427],[-76.26697,43.89599],[-76.23607,43.91204],[-76.19295,43.93326],[-76.19007,43.95086],[-76.21523,43.96017],[-76.25044,43.94982],[-76.31224,43.94775],[-76.30578,43.9762],[-76.33093,44.00464],[-76.39561,44.0248],[-76.39848,44.06251],[-76.37548,44.06457],[-76.3762,44.0909],[-76.47107,44.09297],[-76.46604,44.10948],[-76.44232,44.1296],[-76.39848,44.13218],[-76.39776,44.20435],[-76.3762,44.21671],[-76.23966,44.21929],[-76.23966,44.22804],[-76.21738,44.22856],[-76.21523,44.3479],[-76.11893,44.37103],[-76.04634,44.39157],[-75.93423,44.43418],[-75.83721,44.50341],[-75.76822,44.55823],[-75.69923,44.60379],[-75.63168,44.64829],[-75.56772,44.70501],[-75.50448,44.74586],[-75.45274,44.78157],[-75.31763,44.8723],[-75.15378,44.93745],[-75.09054,44.97305],[-74.97411,45.02793],[-74.91985,45.03682],[-74.91231,45.03606]]],terms_url:"https://gis.ny.gov/gateway/orthoprogram/index.cfm",terms_text:"New York State Statewide Digital Orthoimagery Program",description:"New York State High Resolution Digital Orthoimagery, 1 foot resolution",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/ny/NYS_Orthos_Online.png"},{id:"olho_dagua_do_casado",name:"Olho d'Agua do Casado AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Olho%20Dagua%20do%20Casado&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.7822,-9.54444],[-37.7826,-9.45388],[-37.81147,-9.45412],[-37.81735,-9.45451],[-37.82057,-9.45416],[-37.87394,-9.45428],[-37.87358,-9.54475],[-37.7822,-9.54444]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"osmbe-nl",name:"OpenStreetMap (Belgian Style - Dutch)",type:"tms",template:"https://tile.openstreetmap.be/osmbe-nl/{zoom}/{x}/{y}.png",zoomExtent:[0,18],polygon:[[[5.47007,49.49196],[5.44409,49.51409],[5.46213,49.53677],[5.43766,49.54766],[5.42566,49.59145],[5.40775,49.60448],[5.35207,49.62396],[5.34232,49.61192],[5.30544,49.60645],[5.3026,49.63608],[5.32535,49.6575],[5.27025,49.68827],[5.24458,49.67985],[5.16215,49.6918],[5.16164,49.71172],[5.12622,49.70442],[5.09058,49.75946],[5.06262,49.75724],[5.01261,49.77534],[4.9921,49.79533],[4.95485,49.79586],[4.94404,49.78583],[4.90589,49.78055],[4.84827,49.78972],[4.86599,49.81918],[4.84266,49.86913],[4.85659,49.86973],[4.87961,49.91078],[4.84433,49.94482],[4.78844,49.95381],[4.78535,49.97018],[4.79004,49.98569],[4.81194,49.99563],[4.81579,50.02853],[4.83599,50.04069],[4.82339,50.04664],[4.81641,50.06702],[4.83456,50.06856],[4.83709,50.09442],[4.84472,50.10023],[4.85447,50.1029],[4.866,50.09623],[4.86587,50.12038],[4.8776,50.13223],[4.89443,50.13779],[4.88043,50.1403],[4.87725,50.15205],[4.8529,50.15168],[4.83169,50.1526],[4.82334,50.15923],[4.78067,50.14092],[4.76486,50.13634],[4.75217,50.11158],[4.71293,50.09598],[4.70278,50.09336],[4.68851,50.06595],[4.70309,50.05587],[4.68731,50.01802],[4.69495,49.99662],[4.69461,49.99504],[4.63074,49.98584],[4.58965,49.98336],[4.55981,49.96757],[4.54315,49.9679],[4.52365,49.94973],[4.51156,49.94579],[4.47953,49.94584],[4.44588,49.93656],[4.40593,49.94785],[4.39149,49.94697],[4.38072,49.95088],[4.34921,49.95202],[4.3137,49.96541],[4.19616,49.9536],[4.19304,49.95746],[4.19582,49.96629],[4.13704,49.97691],[4.15996,49.99544],[4.13683,50.00786],[4.13272,50.01973],[4.16174,50.05032],[4.17458,50.04772],[4.22857,50.06873],[4.19529,50.10571],[4.19766,50.12037],[4.19566,50.13394],[4.15448,50.12716],[4.13656,50.12909],[4.12568,50.13511],[4.13677,50.15213],[4.14989,50.1647],[4.14686,50.17314],[4.15567,50.19785],[4.14799,50.21344],[4.15979,50.21579],[4.19179,50.24106],[4.21836,50.25492],[4.20676,50.27068],[4.17487,50.27492],[4.16567,50.28779],[4.155,50.27742],[4.16937,50.26848],[4.16851,50.25626],[4.13426,50.25572],[4.13228,50.26754],[4.12086,50.27276],[4.12139,50.29732],[4.10928,50.30112],[4.0977,50.31201],[4.08017,50.30809],[4.07339,50.31754],[4.03817,50.33987],[4.02738,50.35491],[3.98611,50.34137],[3.96482,50.34012],[3.96355,50.34742],[3.90223,50.3257],[3.88419,50.32554],[3.88429,50.33511],[3.85645,50.34099],[3.84244,50.35243],[3.81321,50.34251],[3.80551,50.35098],[3.74124,50.34624],[3.73556,50.32532],[3.73175,50.30705],[3.70911,50.3021],[3.68231,50.31988],[3.66397,50.34724],[3.65542,50.37075],[3.66788,50.38597],[3.67276,50.40227],[3.66777,50.42262],[3.66743,50.43635],[3.65685,50.4464],[3.66129,50.45399],[3.64419,50.4618],[3.6099,50.4935],[3.58162,50.48917],[3.56897,50.4982],[3.49868,50.48577],[3.49448,50.49918],[3.51582,50.52075],[3.4742,50.53204],[3.44739,50.50415],[3.43663,50.5083],[3.42736,50.50327],[3.37405,50.48993],[3.35949,50.50325],[3.32767,50.50732],[3.31872,50.51788],[3.30319,50.51966],[3.28718,50.52552],[3.27549,50.53872],[3.27524,50.59381],[3.25497,50.62115],[3.24349,50.64031],[3.23893,50.65864],[3.24019,50.67023],[3.26029,50.67692],[3.25131,50.69091],[3.25881,50.69312],[3.24518,50.71225],[3.23779,50.71086],[3.22148,50.70958],[3.20498,50.71072],[3.18953,50.72603],[3.19445,50.7316],[3.14457,50.78871],[3.12547,50.78553],[3.11348,50.79278],[3.10455,50.78042],[3.08585,50.77064],[3.05758,50.77987],[3.04064,50.77484],[3.03691,50.77003],[3.02927,50.76813],[3.01945,50.77263],[2.99536,50.76043],[2.96822,50.74763],[2.9557,50.75181],[2.93962,50.74441],[2.94602,50.73167],[2.9349,50.72822],[2.92939,50.70786],[2.92206,50.70224],[2.91184,50.70267],[2.91281,50.69463],[2.90742,50.69209],[2.90017,50.69202],[2.88533,50.70547],[2.87992,50.70199],[2.86855,50.70242],[2.84646,50.72043],[2.81843,50.71386],[2.78869,50.72508],[2.77811,50.74686],[2.76469,50.75397],[2.75409,50.76251],[2.75922,50.77052],[2.73745,50.77967],[2.7236,50.79079],[2.71636,50.8123],[2.6788,50.81207],[2.67057,50.81562],[2.63543,50.80987],[2.61055,50.84419],[2.59427,50.84743],[2.60628,50.86565],[2.60151,50.90993],[2.58525,50.91825],[2.62479,50.94743],[2.62148,50.95406],[2.60263,50.98638],[2.56946,51.00113],[2.55892,51.06596],[2.34072,51.31453],[3.01078,51.59839],[3.32658,51.43728],[3.37581,51.3584],[3.38739,51.33392],[3.36094,51.31523],[3.3789,51.30251],[3.36832,51.29778],[3.38177,51.28732],[3.38342,51.27485],[3.38922,51.27329],[3.41852,51.25984],[3.43471,51.24621],[3.45031,51.24219],[3.527,51.24651],[3.51433,51.28799],[3.54179,51.29123],[3.56145,51.29637],[3.57559,51.29428],[3.58905,51.30652],[3.63839,51.29078],[3.6582,51.29056],[3.69139,51.28043],[3.71763,51.27428],[3.77605,51.26777],[3.79652,51.25635],[3.79031,51.24163],[3.78934,51.22711],[3.79294,51.21546],[3.85827,51.21334],[3.88901,51.22423],[3.89467,51.21743],[3.88782,51.20283],[3.91256,51.20837],[3.91482,51.21509],[3.9281,51.22508],[3.93751,51.2174],[3.95603,51.22117],[4.01551,51.24825],[4.0551,51.24402],[4.1651,51.2938],[4.23804,51.35274],[4.21772,51.36206],[4.21546,51.37487],[4.33535,51.37775],[4.34197,51.36012],[4.38556,51.35574],[4.39906,51.35785],[4.42462,51.3668],[4.42309,51.37577],[4.38147,51.41805],[4.39426,51.44251],[4.37771,51.44595],[4.38055,51.45075],[4.4768,51.47912],[4.53739,51.48358],[4.54967,51.47364],[4.53097,51.44965],[4.53758,51.42456],[4.57427,51.43404],[4.6431,51.42478],[4.64951,51.42741],[4.66744,51.42777],[4.66465,51.44625],[4.69115,51.45283],[4.70175,51.46691],[4.72792,51.48435],[4.74476,51.48977],[4.74945,51.49905],[4.75827,51.50302],[4.7766,51.50625],[4.81666,51.49552],[4.82318,51.48441],[4.84355,51.48177],[4.83884,51.46588],[4.84529,51.45817],[4.82521,51.44674],[4.83103,51.42488],[4.88072,51.4166],[4.91431,51.45952],[4.95767,51.4548],[4.94134,51.42928],[4.93775,51.40655],[4.96007,51.42194],[4.99955,51.44324],[5.00816,51.47134],[5.01937,51.48074],[5.03235,51.48827],[5.04093,51.4876],[5.04722,51.47217],[5.08032,51.47226],[5.10643,51.43135],[5.0727,51.39365],[5.11662,51.36118],[5.13225,51.3472],[5.13581,51.31594],[5.15592,51.31278],[5.20039,51.32325],[5.24326,51.3057],[5.22742,51.26844],[5.238,51.26255],[5.26216,51.26778],[5.335,51.26474],[5.34493,51.27681],[5.41551,51.2639],[5.44065,51.28246],[5.48215,51.30064],[5.51628,51.29599],[5.55816,51.26613],[5.56283,51.22287],[5.65253,51.19899],[5.65947,51.19052],[5.71011,51.18671],[5.74598,51.19455],[5.76873,51.18843],[5.78118,51.18082],[5.78447,51.15925],[5.82594,51.16827],[5.85709,51.14477],[5.83976,51.12993],[5.81435,51.11524],[5.83555,51.10842],[5.8338,51.09577],[5.82291,51.09124],[5.8119,51.0943],[5.79816,51.09023],[5.80612,51.07955],[5.80458,51.05888],[5.77731,51.05804],[5.76027,51.03223],[5.77383,51.02859],[5.77829,51.02399],[5.76759,51.00526],[5.76846,50.9985],[5.76419,50.99502],[5.74816,50.98087],[5.72174,50.96128],[5.73469,50.95683],[5.7426,50.96113],[5.74604,50.96209],[5.75617,50.95898],[5.76011,50.95227],[5.73223,50.9221],[5.72625,50.9059],[5.70051,50.90955],[5.69711,50.8958],[5.68051,50.88068],[5.64516,50.86533],[5.64337,50.84974],[5.64049,50.84701],[5.64576,50.83961],[5.64567,50.83789],[5.65094,50.83431],[5.65568,50.82591],[5.70296,50.80821],[5.69338,50.79687],[5.70259,50.78396],[5.69204,50.75629],[5.7218,50.76538],[5.73762,50.75842],[5.73912,50.76522],[5.76476,50.7837],[5.77748,50.78344],[5.78519,50.7684],[5.7927,50.77138],[5.80759,50.75681],[5.84525,50.76609],[5.84901,50.75975],[5.88667,50.77108],[5.89689,50.75501],[5.95896,50.76308],[6.02001,50.75521],[6.04208,50.74557],[6.03953,50.7295],[6.11623,50.72364],[6.1491,50.68465],[6.16312,50.67169],[6.17755,50.65576],[6.18715,50.6505],[6.18348,50.6457],[6.18205,50.63583],[6.26822,50.62829],[6.27251,50.62033],[6.24102,50.58657],[6.22795,50.58535],[6.18304,50.55597],[6.1833,50.54646],[6.19789,50.53715],[6.22586,50.49832],[6.26954,50.50961],[6.35349,50.49244],[6.34706,50.46422],[6.37423,50.45989],[6.3825,50.43975],[6.37408,50.40637],[6.35129,50.38206],[6.40305,50.34866],[6.41162,50.32769],[6.40783,50.31893],[6.38558,50.31658],[6.36388,50.30021],[6.32792,50.3186],[6.31289,50.31636],[6.29335,50.2909],[6.29547,50.27422],[6.28111,50.26236],[6.23624,50.25692],[6.21151,50.24816],[6.1981,50.23275],[6.18166,50.23125],[6.1789,50.22147],[6.19337,50.20761],[6.19683,50.17988],[6.15231,50.16841],[6.15923,50.14002],[6.13978,50.12527],[6.10856,50.1326],[6.11273,50.16093],[6.10156,50.16551],[6.08452,50.16697],[6.0821,50.15275],[6.06344,50.14834],[6.03055,50.15829],[6.02136,50.17685],[5.96932,50.16795],[5.96515,50.12813],[5.90347,50.11172],[5.89064,50.07554],[5.86237,50.06368],[5.8749,50.04624],[5.86392,50.02594],[5.82586,50.00934],[5.82665,50.00135],[5.8448,49.99123],[5.83952,49.9756],[5.80883,49.95773],[5.78215,49.957],[5.76822,49.91307],[5.74481,49.89975],[5.78087,49.88794],[5.78897,49.87213],[5.77636,49.86265],[5.75667,49.8703],[5.76191,49.85693],[5.75803,49.84287],[5.74291,49.83555],[5.75151,49.81985],[5.75473,49.79514],[5.7909,49.79765],[5.8179,49.75977],[5.83544,49.74713],[5.82702,49.72616],[5.86996,49.72777],[5.88817,49.70952],[5.86372,49.68213],[5.91262,49.66488],[5.90382,49.65192],[5.90876,49.63876],[5.89899,49.63401],[5.89117,49.63469],[5.87663,49.60771],[5.84953,49.59399],[5.87403,49.58991],[5.8736,49.57435],[5.84053,49.55222],[5.82582,49.54931],[5.81858,49.5461],[5.79504,49.55029],[5.77149,49.55832],[5.76226,49.554],[5.76126,49.53952],[5.74792,49.53452],[5.73009,49.53954],[5.6987,49.53744],[5.66008,49.55039],[5.64371,49.54565],[5.6228,49.5283],[5.62589,49.51698],[5.61175,49.50102],[5.59116,49.51734],[5.55638,49.52373],[5.54257,49.5105],[5.47007,49.49196]]],terms_url:"https://openstreetmap.org/",terms_text:"© OpenStreetMap contributors, CC-BY-SA; Tiles courtesy of GEO-6",icon:"https://osmlab.github.io/editor-layer-index/sources/world/OpenStreetMap-GPS.png"},{id:"osmbe-fr",name:"OpenStreetMap (Belgian Style - French)",type:"tms",template:"https://tile.openstreetmap.be/osmbe-fr/{zoom}/{x}/{y}.png",zoomExtent:[0,18],polygon:[[[5.47007,49.49196],[5.44409,49.51409],[5.46213,49.53677],[5.43766,49.54766],[5.42566,49.59145],[5.40775,49.60448],[5.35207,49.62396],[5.34232,49.61192],[5.30544,49.60645],[5.3026,49.63608],[5.32535,49.6575],[5.27025,49.68827],[5.24458,49.67985],[5.16215,49.6918],[5.16164,49.71172],[5.12622,49.70442],[5.09058,49.75946],[5.06262,49.75724],[5.01261,49.77534],[4.9921,49.79533],[4.95485,49.79586],[4.94404,49.78583],[4.90589,49.78055],[4.84827,49.78972],[4.86599,49.81918],[4.84266,49.86913],[4.85659,49.86973],[4.87961,49.91078],[4.84433,49.94482],[4.78844,49.95381],[4.78535,49.97018],[4.79004,49.98569],[4.81194,49.99563],[4.81579,50.02853],[4.83599,50.04069],[4.82339,50.04664],[4.81641,50.06702],[4.83456,50.06856],[4.83709,50.09442],[4.84472,50.10023],[4.85447,50.1029],[4.866,50.09623],[4.86587,50.12038],[4.8776,50.13223],[4.89443,50.13779],[4.88043,50.1403],[4.87725,50.15205],[4.8529,50.15168],[4.83169,50.1526],[4.82334,50.15923],[4.78067,50.14092],[4.76486,50.13634],[4.75217,50.11158],[4.71293,50.09598],[4.70278,50.09336],[4.68851,50.06595],[4.70309,50.05587],[4.68731,50.01802],[4.69495,49.99662],[4.69461,49.99504],[4.63074,49.98584],[4.58965,49.98336],[4.55981,49.96757],[4.54315,49.9679],[4.52365,49.94973],[4.51156,49.94579],[4.47953,49.94584],[4.44588,49.93656],[4.40593,49.94785],[4.39149,49.94697],[4.38072,49.95088],[4.34921,49.95202],[4.3137,49.96541],[4.19616,49.9536],[4.19304,49.95746],[4.19582,49.96629],[4.13704,49.97691],[4.15996,49.99544],[4.13683,50.00786],[4.13272,50.01973],[4.16174,50.05032],[4.17458,50.04772],[4.22857,50.06873],[4.19529,50.10571],[4.19766,50.12037],[4.19566,50.13394],[4.15448,50.12716],[4.13656,50.12909],[4.12568,50.13511],[4.13677,50.15213],[4.14989,50.1647],[4.14686,50.17314],[4.15567,50.19785],[4.14799,50.21344],[4.15979,50.21579],[4.19179,50.24106],[4.21836,50.25492],[4.20676,50.27068],[4.17487,50.27492],[4.16567,50.28779],[4.155,50.27742],[4.16937,50.26848],[4.16851,50.25626],[4.13426,50.25572],[4.13228,50.26754],[4.12086,50.27276],[4.12139,50.29732],[4.10928,50.30112],[4.0977,50.31201],[4.08017,50.30809],[4.07339,50.31754],[4.03817,50.33987],[4.02738,50.35491],[3.98611,50.34137],[3.96482,50.34012],[3.96355,50.34742],[3.90223,50.3257],[3.88419,50.32554],[3.88429,50.33511],[3.85645,50.34099],[3.84244,50.35243],[3.81321,50.34251],[3.80551,50.35098],[3.74124,50.34624],[3.73556,50.32532],[3.73175,50.30705],[3.70911,50.3021],[3.68231,50.31988],[3.66397,50.34724],[3.65542,50.37075],[3.66788,50.38597],[3.67276,50.40227],[3.66777,50.42262],[3.66743,50.43635],[3.65685,50.4464],[3.66129,50.45399],[3.64419,50.4618],[3.6099,50.4935],[3.58162,50.48917],[3.56897,50.4982],[3.49868,50.48577],[3.49448,50.49918],[3.51582,50.52075],[3.4742,50.53204],[3.44739,50.50415],[3.43663,50.5083],[3.42736,50.50327],[3.37405,50.48993],[3.35949,50.50325],[3.32767,50.50732],[3.31872,50.51788],[3.30319,50.51966],[3.28718,50.52552],[3.27549,50.53872],[3.27524,50.59381],[3.25497,50.62115],[3.24349,50.64031],[3.23893,50.65864],[3.24019,50.67023],[3.26029,50.67692],[3.25131,50.69091],[3.25881,50.69312],[3.24518,50.71225],[3.23779,50.71086],[3.22148,50.70958],[3.20498,50.71072],[3.18953,50.72603],[3.19445,50.7316],[3.14457,50.78871],[3.12547,50.78553],[3.11348,50.79278],[3.10455,50.78042],[3.08585,50.77064],[3.05758,50.77987],[3.04064,50.77484],[3.03691,50.77003],[3.02927,50.76813],[3.01945,50.77263],[2.99536,50.76043],[2.96822,50.74763],[2.9557,50.75181],[2.93962,50.74441],[2.94602,50.73167],[2.9349,50.72822],[2.92939,50.70786],[2.92206,50.70224],[2.91184,50.70267],[2.91281,50.69463],[2.90742,50.69209],[2.90017,50.69202],[2.88533,50.70547],[2.87992,50.70199],[2.86855,50.70242],[2.84646,50.72043],[2.81843,50.71386],[2.78869,50.72508],[2.77811,50.74686],[2.76469,50.75397],[2.75409,50.76251],[2.75922,50.77052],[2.73745,50.77967],[2.7236,50.79079],[2.71636,50.8123],[2.6788,50.81207],[2.67057,50.81562],[2.63543,50.80987],[2.61055,50.84419],[2.59427,50.84743],[2.60628,50.86565],[2.60151,50.90993],[2.58525,50.91825],[2.62479,50.94743],[2.62148,50.95406],[2.60263,50.98638],[2.56946,51.00113],[2.55892,51.06596],[2.34072,51.31453],[3.01078,51.59839],[3.32658,51.43728],[3.37581,51.3584],[3.38739,51.33392],[3.36094,51.31523],[3.3789,51.30251],[3.36832,51.29778],[3.38177,51.28732],[3.38342,51.27485],[3.38922,51.27329],[3.41852,51.25984],[3.43471,51.24621],[3.45031,51.24219],[3.527,51.24651],[3.51433,51.28799],[3.54179,51.29123],[3.56145,51.29637],[3.57559,51.29428],[3.58905,51.30652],[3.63839,51.29078],[3.6582,51.29056],[3.69139,51.28043],[3.71763,51.27428],[3.77605,51.26777],[3.79652,51.25635],[3.79031,51.24163],[3.78934,51.22711],[3.79294,51.21546],[3.85827,51.21334],[3.88901,51.22423],[3.89467,51.21743],[3.88782,51.20283],[3.91256,51.20837],[3.91482,51.21509],[3.9281,51.22508],[3.93751,51.2174],[3.95603,51.22117],[4.01551,51.24825],[4.0551,51.24402],[4.1651,51.2938],[4.23804,51.35274],[4.21772,51.36206],[4.21546,51.37487],[4.33535,51.37775],[4.34197,51.36012],[4.38556,51.35574],[4.39906,51.35785],[4.42462,51.3668],[4.42309,51.37577],[4.38147,51.41805],[4.39426,51.44251],[4.37771,51.44595],[4.38055,51.45075],[4.4768,51.47912],[4.53739,51.48358],[4.54967,51.47364],[4.53097,51.44965],[4.53758,51.42456],[4.57427,51.43404],[4.6431,51.42478],[4.64951,51.42741],[4.66744,51.42777],[4.66465,51.44625],[4.69115,51.45283],[4.70175,51.46691],[4.72792,51.48435],[4.74476,51.48977],[4.74945,51.49905],[4.75827,51.50302],[4.7766,51.50625],[4.81666,51.49552],[4.82318,51.48441],[4.84355,51.48177],[4.83884,51.46588],[4.84529,51.45817],[4.82521,51.44674],[4.83103,51.42488],[4.88072,51.4166],[4.91431,51.45952],[4.95767,51.4548],[4.94134,51.42928],[4.93775,51.40655],[4.96007,51.42194],[4.99955,51.44324],[5.00816,51.47134],[5.01937,51.48074],[5.03235,51.48827],[5.04093,51.4876],[5.04722,51.47217],[5.08032,51.47226],[5.10643,51.43135],[5.0727,51.39365],[5.11662,51.36118],[5.13225,51.3472],[5.13581,51.31594],[5.15592,51.31278],[5.20039,51.32325],[5.24326,51.3057],[5.22742,51.26844],[5.238,51.26255],[5.26216,51.26778],[5.335,51.26474],[5.34493,51.27681],[5.41551,51.2639],[5.44065,51.28246],[5.48215,51.30064],[5.51628,51.29599],[5.55816,51.26613],[5.56283,51.22287],[5.65253,51.19899],[5.65947,51.19052],[5.71011,51.18671],[5.74598,51.19455],[5.76873,51.18843],[5.78118,51.18082],[5.78447,51.15925],[5.82594,51.16827],[5.85709,51.14477],[5.83976,51.12993],[5.81435,51.11524],[5.83555,51.10842],[5.8338,51.09577],[5.82291,51.09124],[5.8119,51.0943],[5.79816,51.09023],[5.80612,51.07955],[5.80458,51.05888],[5.77731,51.05804],[5.76027,51.03223],[5.77383,51.02859],[5.77829,51.02399],[5.76759,51.00526],[5.76846,50.9985],[5.76419,50.99502],[5.74816,50.98087],[5.72174,50.96128],[5.73469,50.95683],[5.7426,50.96113],[5.74604,50.96209],[5.75617,50.95898],[5.76011,50.95227],[5.73223,50.9221],[5.72625,50.9059],[5.70051,50.90955],[5.69711,50.8958],[5.68051,50.88068],[5.64516,50.86533],[5.64337,50.84974],[5.64049,50.84701],[5.64576,50.83961],[5.64567,50.83789],[5.65094,50.83431],[5.65568,50.82591],[5.70296,50.80821],[5.69338,50.79687],[5.70259,50.78396],[5.69204,50.75629],[5.7218,50.76538],[5.73762,50.75842],[5.73912,50.76522],[5.76476,50.7837],[5.77748,50.78344],[5.78519,50.7684],[5.7927,50.77138],[5.80759,50.75681],[5.84525,50.76609],[5.84901,50.75975],[5.88667,50.77108],[5.89689,50.75501],[5.95896,50.76308],[6.02001,50.75521],[6.04208,50.74557],[6.03953,50.7295],[6.11623,50.72364],[6.1491,50.68465],[6.16312,50.67169],[6.17755,50.65576],[6.18715,50.6505],[6.18348,50.6457],[6.18205,50.63583],[6.26822,50.62829],[6.27251,50.62033],[6.24102,50.58657],[6.22795,50.58535],[6.18304,50.55597],[6.1833,50.54646],[6.19789,50.53715],[6.22586,50.49832],[6.26954,50.50961],[6.35349,50.49244],[6.34706,50.46422],[6.37423,50.45989],[6.3825,50.43975],[6.37408,50.40637],[6.35129,50.38206],[6.40305,50.34866],[6.41162,50.32769],[6.40783,50.31893],[6.38558,50.31658],[6.36388,50.30021],[6.32792,50.3186],[6.31289,50.31636],[6.29335,50.2909],[6.29547,50.27422],[6.28111,50.26236],[6.23624,50.25692],[6.21151,50.24816],[6.1981,50.23275],[6.18166,50.23125],[6.1789,50.22147],[6.19337,50.20761],[6.19683,50.17988],[6.15231,50.16841],[6.15923,50.14002],[6.13978,50.12527],[6.10856,50.1326],[6.11273,50.16093],[6.10156,50.16551],[6.08452,50.16697],[6.0821,50.15275],[6.06344,50.14834],[6.03055,50.15829],[6.02136,50.17685],[5.96932,50.16795],[5.96515,50.12813],[5.90347,50.11172],[5.89064,50.07554],[5.86237,50.06368],[5.8749,50.04624],[5.86392,50.02594],[5.82586,50.00934],[5.82665,50.00135],[5.8448,49.99123],[5.83952,49.9756],[5.80883,49.95773],[5.78215,49.957],[5.76822,49.91307],[5.74481,49.89975],[5.78087,49.88794],[5.78897,49.87213],[5.77636,49.86265],[5.75667,49.8703],[5.76191,49.85693],[5.75803,49.84287],[5.74291,49.83555],[5.75151,49.81985],[5.75473,49.79514],[5.7909,49.79765],[5.8179,49.75977],[5.83544,49.74713],[5.82702,49.72616],[5.86996,49.72777],[5.88817,49.70952],[5.86372,49.68213],[5.91262,49.66488],[5.90382,49.65192],[5.90876,49.63876],[5.89899,49.63401],[5.89117,49.63469],[5.87663,49.60771],[5.84953,49.59399],[5.87403,49.58991],[5.8736,49.57435],[5.84053,49.55222],[5.82582,49.54931],[5.81858,49.5461],[5.79504,49.55029],[5.77149,49.55832],[5.76226,49.554],[5.76126,49.53952],[5.74792,49.53452],[5.73009,49.53954],[5.6987,49.53744],[5.66008,49.55039],[5.64371,49.54565],[5.6228,49.5283],[5.62589,49.51698],[5.61175,49.50102],[5.59116,49.51734],[5.55638,49.52373],[5.54257,49.5105],[5.47007,49.49196]]],terms_url:"https://openstreetmap.org/",terms_text:"© OpenStreetMap contributors, CC-BY-SA; Tiles courtesy of GEO-6",icon:"https://osmlab.github.io/editor-layer-index/sources/world/OpenStreetMap-GPS.png"},{id:"MAPNIK",name:"OpenStreetMap (Standard)",type:"tms",template:"https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png",zoomExtent:[0,19],terms_url:"https://www.openstreetmap.org",terms_text:"© OpenStreetMap contributors, CC-BY-SA","default":true,description:"The default OpenStreetMap layer.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/OpenStreetMap-GPS.png"},{id:"osm-gps",name:"OpenStreetMap GPS traces",type:"tms",template:"https://{switch:a,b,c}.gps-tile.openstreetmap.org/lines/{zoom}/{x}/{y}.png",zoomExtent:[0,20],terms_url:"https://www.openstreetmap.org/copyright",terms_text:"© OpenStreetMap contributors",terms_html:"<span style='display: inline-block; padding: 0 8px; background-color: rgba(0,0,0,0.5);'><span style='color: #eee;'>GPS Direction:</span> <span style='font-size: 15px; padding-left: 2px; font-weight: bold;'> <span style='color: #0ee;'>&larr;</span> <span style='color: #96f;'>&darr;</span> <span style='color: #6e0;'>&uarr;</span> <span style='color: #f63;'>&rarr;</span> </span></span> © <a href='https://www.openstreetmap.org/copyright'>OpenStreetMap contributors</a>.",description:"Public GPS traces uploaded to OpenStreetMap.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/OpenStreetMap-GPS.png",overlay:true},{id:"osm-hu-ortho",name:"openstreetmap.hu orthophotos",type:"tms",template:"http://adam.openstreetmap.hu/mapproxy/tiles/1.0.0/openstreetmap.hu.orthophotos/mercator/{zoom}/{x}/{y}.png",zoomExtent:[0,21],polygon:[[[18.8577,47.44553],[18.86169,47.44883],[18.86491,47.44704],[18.8609,47.44373],[18.8577,47.44553]],[[18.80614,47.59304],[18.81376,47.5974],[18.82295,47.59011],[18.81533,47.58574],[18.80614,47.59304]],[[17.66691,46.92167],[17.66369,46.93033],[17.67207,46.93178],[17.67529,46.92312],[17.66691,46.92167]],[[17.6725,46.93546],[17.67529,46.92708],[17.68409,46.92845],[17.68129,46.93683],[17.6725,46.93546]],[[17.82155,46.96075],[17.82507,46.9547],[17.83347,46.95701],[17.82995,46.96304],[17.82155,46.96075]],[[18.62796,47.19818],[18.63943,47.20324],[18.64953,47.1926],[18.63806,47.18753],[18.62796,47.19818]],[[17.51223,46.8789],[17.51406,46.88166],[17.5214,46.87939],[17.51957,46.87662],[17.51223,46.8789]],[[17.67724,46.91844],[17.68718,46.92344],[17.70594,46.90603],[17.69249,46.89926],[17.68144,46.90951],[17.68275,46.90595],[17.68198,46.90582],[17.68667,46.89926],[17.67947,46.89686],[17.67405,46.90445],[17.67131,46.90398],[17.66666,46.91662],[17.67724,46.91844]],[[18.80776,47.55615],[18.81638,47.55969],[18.81351,47.56305],[18.80473,47.55949],[18.80776,47.55615]],[[18.98706,47.46989],[18.97962,47.47042],[18.98056,47.47648],[18.988,47.47595],[18.98706,47.46989]],[[18.98356,47.41149],[19.00839,47.42511],[19.01568,47.41932],[18.9907,47.40518],[18.98356,47.41149]],[[19.02652,47.87563],[19.03163,47.87613],[19.03305,47.86957],[19.02793,47.86907],[19.02652,47.87563]],[[18.00803,46.86674],[18.01095,46.86028],[18.01323,46.86064],[18.01626,46.8536],[18.01682,46.85371],[18.01852,46.84948],[18.02021,46.84631],[18.02961,46.84829],[18.02742,46.85392],[18.03388,46.85534],[18.03056,46.86395],[18.03367,46.86456],[18.03058,46.87154],[18.00803,46.86674]],[[17.99509,46.87632],[17.98585,46.87595],[17.98535,46.88397],[17.98599,46.88412],[17.98531,46.88537],[17.95829,46.87876],[17.96077,46.87351],[17.92868,46.86631],[17.92467,46.87372],[17.93136,46.87535],[17.92995,46.87822],[17.9553,46.88415],[17.9946,46.89341],[17.99786,46.88671],[17.98771,46.88443],[17.98774,46.88411],[17.99415,46.88442],[17.99509,46.87632]],[[18.86533,47.42808],[18.87291,47.42455],[18.87701,47.42871],[18.86799,47.43238],[18.86774,47.43208],[18.86517,47.43317],[18.86477,47.4327],[18.86441,47.43285],[18.86288,47.43108],[18.86328,47.43092],[18.86288,47.43046],[18.86516,47.42947],[18.86448,47.42875],[18.86553,47.42829],[18.86533,47.42808]],[[19.16232,47.59776],[19.16893,47.59033],[19.17815,47.59512],[19.17291,47.60068],[19.16232,47.59776]],[[18.13162,47.02619],[18.14103,47.02111],[18.13923,47.01957],[18.15704,47.01044],[18.16271,47.00242],[18.16463,46.99571],[18.16639,46.9959],[18.16702,46.99363],[18.17101,46.99454],[18.1722,46.99571],[18.16977,47.00416],[18.17656,47.00709],[18.1761,47.00771],[18.17639,47.00781],[18.17057,47.01414],[18.1748,47.01815],[18.17782,47.01428],[18.18518,47.01746],[18.17933,47.0239],[18.17589,47.02268],[18.17277,47.02434],[18.17219,47.02377],[18.17159,47.02407],[18.16938,47.0221],[18.16216,47.02596],[18.16485,47.02832],[18.16245,47.02947],[18.16323,47.03025],[18.1521,47.03554],[18.15156,47.03498],[18.1503,47.03563],[18.14513,47.03112],[18.14337,47.0322],[18.1454,47.03419],[18.14441,47.03467],[18.14522,47.03539],[18.14168,47.03697],[18.13111,47.02745],[18.13226,47.0269],[18.13162,47.02619]],[[17.79852,46.81745],[17.79178,46.81585],[17.79601,46.80664],[17.7948,46.80598],[17.79693,46.80056],[17.80109,46.79993],[17.80736,46.80225],[17.79852,46.81745]],[[17.7788,46.81461],[17.78446,46.80714],[17.79083,46.80925],[17.7853,46.81683],[17.7788,46.81461]]],terms_text:"openstreetmap.hu"},{id:"OpenTopoMap",name:"OpenTopoMap",type:"tms",template:"https://{switch:a,b,c}.tile.opentopomap.org/{zoom}/{x}/{y}.png",zoomExtent:[3,17],terms_url:"https://tile.opentopomap.org/about#verwendung",terms_text:"Kartendaten: © OpenStreetMap-Mitwirkende, SRTM | Kartendarstellung: © OpenTopoMap (CC-BY-SA)",icon:"https://osmlab.github.io/editor-layer-index/sources/world/OpenTopoMap.png"},{id:"lu.geoportail.opendata.ortho2010",name:"Ortho 2010 geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2010/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg",endDate:"2010-07-02T00:00:00.000Z",startDate:"2010-06-24T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"lu.geoportail.opendata.ortho2013",name:"Ortho 2013 geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2013/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg",endDate:"2013-07-20T00:00:00.000Z",startDate:"2013-07-19T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"lu.geoportail.opendata.ortho2016",name:"Ortho 2016 geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2016/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg",endDate:"2016-08-16T00:00:00.000Z",startDate:"2013-08-30T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"lu.geoportail.opendata.ortho2017",name:"Ortho 2017 geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2017/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg",endDate:"2017-06-22T00:00:00.000Z",startDate:"2017-06-14T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"ORTOFOTO_V1",name:"Orthophoto 1st cycle (1994-1999) - Latvia",type:"wms",template:"https://services.lgia.gov.lv/arcfree/services/Ortofoto_v1/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[27.66415,55.75354],[27.68475,55.93319],[28.26703,56.1908],[28.23682,56.49827],[27.82757,56.94886],[27.90997,57.37037],[27.58313,57.56387],[26.93219,57.63598],[26.5202,57.58596],[26.0368,57.87192],[25.1991,58.10487],[24.31744,57.90258],[24.31744,57.19669],[23.93567,56.9788],[23.55115,56.98479],[23.23804,57.10283],[23.14465,57.37333],[22.60632,57.60215],[22.60083,57.76953],[21.66699,57.56681],[21.40057,57.29625],[21.38409,57.0177],[21.04626,56.80026],[20.99133,56.36615],[21.0545,56.0392],[21.28796,56.05608],[21.29895,56.1908],[22.11743,56.41936],[24.44379,56.24425],[24.81183,56.3996],[25.15515,56.1694],[25.58087,56.12962],[26.53668,55.66146],[26.91296,55.66766],[27.0805,55.80991],[27.66415,55.75354]]],terms_text:"Latvijas Ģeotelpiskās informācijas aģentūras brīvais WMS serviss 1994 - 1999.gada Latvijas ortofotokarte"},{id:"ORTOS_DGRF_2004_06",name:"Ortofotos DGRF 2004-2006 (WMS)",type:"wms",template:"http://mapas.dgterritorio.pt:8888/wms/produtos?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Ortos&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2006-01-01T00:00:00.000Z",startDate:"2004-01-01T00:00:00.000Z",zoomExtent:[14,19],polygon:[[[-7.31278,36.98391],[-7.44461,37.5718],[-7.1933,37.97019],[-6.97357,38.00807],[-6.90628,38.24142],[-7.06627,38.20743],[-7.27158,38.45628],[-7.20429,38.72356],[-7.0134,38.85468],[-6.91315,39.03839],[-6.97357,39.13113],[-7.17957,39.23651],[-7.28668,39.48497],[-7.44873,39.61838],[-7.34162,39.60886],[-6.99692,39.64906],[-6.81839,40.0192],[-7.01065,40.19986],[-6.85272,40.24285],[-6.76209,40.35073],[-6.77994,40.8886],[-6.88637,41.01151],[-6.79642,41.01721],[-6.63849,41.21689],[-6.4531,41.24116],[-6.29311,41.38763],[-6.15715,41.5908],[-6.31165,41.68932],[-6.51215,41.71188],[-6.49841,41.88081],[-6.56296,41.97991],[-6.80191,42.00951],[-7.20497,42.00135],[-7.22763,41.8849],[-7.36908,41.87058],[-7.72751,41.92885],[-7.92526,41.94009],[-8.07907,41.84706],[-8.1601,41.91812],[-8.01796,42.05031],[-8.19924,42.18681],[-8.39356,42.1023],[-8.66066,42.07886],[-8.88382,41.88081],[-9.17084,41.86956],[-9.04175,41.43655],[-9.01978,40.65981],[-9.15711,40.26695],[-9.81903,39.52099],[-9.74213,38.6512],[-9.12964,37.88136],[-9.27246,36.99378],[-9.09394,36.68604],[-7.80579,36.74989],[-7.31278,36.98391]]],terms_url:"http://www.dgterritorio.pt/dados_abertos/ortofotos/",terms_text:"Direcção-Geral do Território",icon:"http://www.igeo.pt/favicon.ico"},{id:"ORTOS_DGT_2014_15",name:"Ortofotos Litoral DGT 2014-2015 (WMS)",type:"wms",template:"http://ows.dgterritorio.pt/wss/service/ortos2014-2015-wms/guest?language=por&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Ortoimagens_2014-2015_Litoral&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[1,20],polygon:[[[-7.38968,37.19205],[-7.52426,37.18002],[-7.89505,36.98171],[-8.15186,37.10886],[-8.65036,37.14062],[-8.95111,37.03545],[-8.78632,37.34833],[-8.76434,37.55111],[-8.7561,38.38258],[-8.47664,38.33466],[-8.47183,38.40141],[-8.66066,38.46596],[-8.66959,38.60882],[-9.142,38.53689],[-8.81104,38.67372],[-8.79318,38.85468],[-8.95935,38.9829],[-9.18732,38.84934],[-9.2395,38.72838],[-9.37821,38.74659],[-9.38233,39.07891],[-9.29169,39.2514],[-9.31915,39.33642],[-9.17084,39.38526],[-9.06372,39.48815],[-9.02252,39.69662],[-8.78632,40.14529],[-8.86322,40.2093],[-8.72589,40.53155],[-8.64075,40.50858],[-8.62427,40.63063],[-8.53089,40.6004],[-8.535,40.71292],[-8.61466,40.89275],[-8.61878,41.10419],[-8.53089,41.16728],[-8.66959,41.21689],[-8.72315,41.41081],[-8.76984,41.65958],[-8.66547,41.73955],[-8.81104,41.72316],[-8.81104,41.85217],[-8.74649,41.9125],[-8.83576,41.93089],[-8.91815,41.84501],[-8.89343,41.70778],[-8.82065,41.50755],[-8.73139,41.16315],[-8.67508,41.069],[-8.68469,40.90729],[-8.93326,40.17573],[-8.88107,40.12219],[-9.11453,39.64694],[-9.11865,39.5623],[-9.3013,39.40543],[-9.43039,39.37571],[-9.34799,39.23864],[-9.45099,39.04799],[-9.45786,38.89317],[-9.53201,38.78835],[-9.50043,38.68551],[-9.28894,38.663],[-9.19418,38.54172],[-9.25324,38.38473],[-9.03488,38.42347],[-8.92502,38.46757],[-8.81241,38.35997],[-8.7973,38.14968],[-8.91953,37.95286],[-8.84262,37.8651],[-8.83988,37.40617],[-9.02664,37.01023],[-8.92914,36.97513],[-8.61466,37.099],[-8.15048,37.05956],[-7.8923,36.93672],[-7.48993,37.15156],[-7.39105,37.15813],[-7.38968,37.19205]]],terms_url:"http://www.dgterritorio.pt/",terms_text:"Direcção-Geral do Território",icon:"http://www.igeo.pt/favicon.ico"},{id:"OS-OpenData_Locator",name:"OS OpenData Locator",type:"tms",template:"http://tiles.itoworld.com/os_locator/{zoom}/{x}/{y}.png",zoomExtent:[0,22],polygon:[[[-0.88639,61.11666],[-9.24009,57.92465],[-6.61235,55.46835],[-6.1039,55.40191],[-5.61358,55.06607],[-5.40088,54.90562],[-5.29371,54.77201],[-5.11832,54.5911],[-4.92368,54.38599],[-4.94067,53.59884],[-5.44172,52.27725],[-6.03376,51.6012],[-7.54473,49.33762],[-2.59721,50.2588],[0.65674,50.64047],[1.32419,50.83256],[1.87586,51.19234],[2.05883,52.88863],[-1.61452,56.47933],[-1.21085,57.64972],[-1.69525,59.08903],[0.21543,60.43058],[-0.88639,61.11666]]],overlay:true},{id:"OS-OpenData_StreetView",name:"OS OpenData StreetView",type:"tms",template:"https://{switch:a,b,c}.os.openstreetmap.org/sv/{zoom}/{x}/{y}.png",zoomExtent:[1,18],polygon:[[[-5.82929,50.02297],[-5.82929,50.25482],[-5.37336,50.25482],[-5.37336,50.35306],[-5.1756,50.35306],[-5.1756,50.59254],[-4.99707,50.59254],[-4.99707,50.69356],[-4.79657,50.69356],[-4.79657,50.78221],[-4.69495,50.78221],[-4.69495,50.96074],[-4.60431,50.96074],[-4.60431,51.06921],[-4.37922,51.06921],[-4.37922,51.25218],[-3.90393,51.25218],[-3.90393,51.2917],[-3.71717,51.2917],[-3.71717,51.2453],[-3.14862,51.2453],[-3.14862,51.36207],[-3.74463,51.36207],[-3.74463,51.43404],[-3.82978,51.43404],[-3.82978,51.52982],[-4.08521,51.52982],[-4.08521,51.49393],[-4.37922,51.49393],[-4.37922,51.54272],[-5.14442,51.54272],[-5.14442,51.6296],[-5.73871,51.6296],[-5.73871,51.77404],[-5.50954,51.77404],[-5.50954,51.98026],[-5.1988,51.98026],[-5.1988,52.09734],[-4.88806,52.09734],[-4.88806,52.18316],[-4.49575,52.18316],[-4.49575,52.29257],[-4.30154,52.29257],[-4.30154,52.36853],[-4.18112,52.36853],[-4.18112,52.79337],[-4.44137,52.79337],[-4.44137,52.73696],[-4.85698,52.73696],[-4.85698,52.93173],[-4.7288,52.93173],[-4.7288,53.50386],[-4.15782,53.50386],[-4.15782,53.41135],[-3.31105,53.41135],[-3.31105,53.50386],[-3.23337,53.50386],[-3.23337,54.01592],[-3.39262,54.01592],[-3.39262,54.1981],[-3.55964,54.1981],[-3.55964,54.43373],[-3.7189,54.43373],[-3.7189,54.7219],[-4.30154,54.7219],[-4.30154,54.61407],[-5.04731,54.61407],[-5.04731,54.75329],[-5.22987,54.75329],[-5.22987,55.21908],[-5.65326,55.21908],[-5.65326,55.25009],[-5.89796,55.25009],[-5.89796,55.48225],[-6.59332,55.48225],[-6.59332,56.30134],[-7.17277,56.30134],[-7.17277,56.56018],[-6.81717,56.56018],[-6.81717,56.69917],[-6.53153,56.69917],[-6.53153,56.9067],[-6.81168,56.9067],[-6.81168,57.37166],[-6.8721,57.37166],[-6.8721,57.55189],[-7.09732,57.55189],[-7.09732,57.24111],[-7.17423,57.24111],[-7.17423,56.9067],[-7.37198,56.9067],[-7.37198,56.80759],[-7.5203,56.80759],[-7.5203,56.71425],[-7.83068,56.71425],[-7.83068,56.89946],[-7.64941,56.89946],[-7.64941,57.47396],[-7.83068,57.47396],[-7.83068,57.79156],[-7.47362,57.79156],[-7.47362,58.08606],[-7.18798,58.08606],[-7.18798,58.3672],[-6.80346,58.3672],[-6.80346,58.41558],[-6.63866,58.41558],[-6.63866,58.46733],[-6.51781,58.46733],[-6.51781,58.56256],[-6.05362,58.56256],[-6.05362,58.15688],[-6.14701,58.15688],[-6.14701,58.11059],[-6.27998,58.11059],[-6.27998,57.71227],[-6.15913,57.71227],[-6.15913,57.66676],[-5.93391,57.66676],[-5.93391,57.88925],[-5.80643,57.88925],[-5.80643,57.96218],[-5.61417,57.96218],[-5.61417,58.09112],[-5.49082,58.09112],[-5.49082,58.37333],[-5.31991,58.37333],[-5.31991,58.75015],[-3.572,58.75015],[-3.572,59.20918],[-3.19445,59.20918],[-3.19445,59.47592],[-2.24358,59.47592],[-2.24358,59.13887],[-2.4611,59.13887],[-2.4611,58.81859],[-2.74077,58.81859],[-2.74077,58.58047],[-2.91167,58.58047],[-2.91167,58.11575],[-3.48654,58.11575],[-3.48654,57.74039],[-1.71532,57.74039],[-1.71532,57.22256],[-1.97945,57.22256],[-1.97945,56.87607],[-2.1659,56.87607],[-2.1659,56.63332],[-2.36011,56.63332],[-2.36011,56.04775],[-1.97945,56.04775],[-1.97945,55.86509],[-1.4745,55.86509],[-1.4745,55.24999],[-1.3222,55.24999],[-1.3222,54.82217],[-1.055,54.82217],[-1.055,54.67466],[-0.66188,54.67466],[-0.66188,54.55275],[-0.32476,54.55275],[-0.32476,54.28652],[0.00928,54.28652],[0.00928,53.79385],[0.2082,53.79385],[0.2082,53.52177],[0.41635,53.52177],[0.41635,53.02989],[1.42734,53.02989],[1.42734,52.92021],[1.83339,52.92021],[1.83339,52.04249],[1.52355,52.04249],[1.52355,51.82613],[1.2697,51.82613],[1.2697,51.69675],[1.11665,51.69675],[1.11665,51.44035],[1.52355,51.44035],[1.52355,51.33318],[1.45076,51.33318],[1.45076,51.02076],[1.06999,51.02076],[1.06999,50.90084],[0.77881,50.90084],[0.77881,50.72984],[-0.7256,50.72984],[-0.7256,50.70384],[-1.00744,50.70384],[-1.00744,50.57363],[-2.36253,50.57363],[-2.36253,50.48464],[-2.49878,50.48464],[-2.49878,50.57363],[-3.40964,50.57363],[-3.40964,50.20578],[-3.69224,50.20578],[-3.69224,50.13477],[-5.00547,50.13477],[-5.00547,49.94745],[-5.28395,49.94745],[-5.28395,50.02297],[-5.82929,50.02297]],[[-6.45807,49.86736],[-6.45807,49.94999],[-6.39788,49.94999],[-6.39788,50.00538],[-6.17996,50.00538],[-6.17996,49.91686],[-6.25402,49.91686],[-6.25402,49.86736],[-6.45807,49.86736]],[[-5.83432,49.93216],[-5.83432,49.97546],[-5.76833,49.97546],[-5.76833,49.93216],[-5.83432,49.93216]],[[-1.94838,60.68857],[-1.94838,60.30588],[-1.75431,60.30588],[-1.75431,60.12844],[-1.57549,60.12844],[-1.57549,59.79792],[-1.0317,59.79792],[-1.0317,60.03545],[-0.66269,60.03545],[-0.66269,60.91039],[-1.10344,60.91039],[-1.10344,60.804],[-1.35063,60.804],[-1.35063,60.68857],[-1.94838,60.68857]],[[-2.20338,60.19686],[-2.20338,60.09294],[-1.9864,60.09294],[-1.9864,60.19686],[-2.20338,60.19686]],[[-1.75431,59.56983],[-1.75431,59.46394],[-1.53733,59.46394],[-1.53733,59.56983],[-1.75431,59.56983]],[[-4.5586,59.13705],[-4.5586,58.95691],[-4.2867,58.95691],[-4.2867,59.13705],[-4.5586,59.13705]],[[-6.27877,59.20257],[-6.27877,59.02278],[-5.66506,59.02278],[-5.66506,59.20257],[-6.27877,59.20257]],[[-8.71635,57.94406],[-8.71635,57.73059],[-8.35929,57.73059],[-8.35929,57.94406],[-8.71635,57.94406]],[[-7.6077,50.4021],[-7.6077,50.26887],[-7.39072,50.26887],[-7.39072,50.4021],[-7.6077,50.4021]],[[-7.73043,58.35799],[-7.73043,58.24831],[-7.51345,58.24831],[-7.51345,58.35799],[-7.73043,58.35799]]]},{id:"OSIP_1ft",name:"OSIP 1ft Imagery Most Current Available",type:"wms",template:"https://geo1.oit.ohio.gov/arcgis/services/OSIP/osip_best_avail_1ft/ImageServer/WMSServer?FORMAT=image/jpeg&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2014-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[8,20],polygon:[[[-83.1356,41.75081],[-83.08101,41.7511],[-83.0796,41.62936],[-82.95011,41.54404],[-82.89032,41.54404],[-82.89032,41.69462],[-82.8494,41.7463],[-82.76758,41.73925],[-82.75184,41.63584],[-82.64799,41.62408],[-82.68575,41.50634],[-82.49063,41.40492],[-82.0217,41.53462],[-81.72901,41.52048],[-81.39541,41.7369],[-81.10587,41.84484],[-80.50161,41.99939],[-80.51105,40.62127],[-80.6275,40.59021],[-80.58344,40.49933],[-80.58973,40.2812],[-80.85095,39.625],[-81.19399,39.37974],[-81.38912,39.31159],[-81.45521,39.38704],[-81.515,39.35054],[-81.54333,39.26288],[-81.72586,39.19461],[-81.73216,38.9258],[-81.9021,38.85477],[-81.95875,38.89397],[-81.9084,38.93315],[-82.02799,38.99922],[-82.11611,38.92336],[-82.12555,38.8278],[-82.19794,38.78856],[-82.16647,38.72475],[-82.16017,38.58712],[-82.26718,38.57236],[-82.29865,38.43198],[-82.57875,38.39745],[-82.73925,38.53545],[-82.8494,38.56006],[-82.91235,38.73212],[-83.00676,38.71002],[-83.14524,38.59942],[-83.30575,38.58466],[-83.39387,38.64368],[-83.46625,38.64614],[-83.54178,38.69283],[-83.65193,38.61172],[-83.74635,38.63385],[-83.9635,38.76403],[-84.08624,38.75421],[-84.22157,38.7812],[-84.34117,38.99922],[-84.49223,39.07255],[-84.64015,39.05545],[-84.74086,39.11164],[-84.84471,39.08477],[-84.82898,41.70637],[-83.44737,41.76038],[-83.13438,41.64959],[-83.1356,41.75081]]],terms_url:"https://ogrip.oit.ohio.gov/ProjectsInitiatives/StatewideImagery.aspx",terms_text:"Ohio Statewide Imagery Program",description:"Most recent available 1-foot orthoimagery from the Ohio Statewide Imagery Program."},{id:"OSIP_6in",name:"OSIP 6in Imagery Most Current Available",type:"wms",template:"https://geo1.oit.ohio.gov/arcgis/services/OSIP/OSIP_6in_best_avail/ImageServer/WMSServer?FORMAT=image/jpeg&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2018-01-01T00:00:00.000Z",startDate:"2010-01-01T00:00:00.000Z",zoomExtent:[8,20],polygon:[[[-83.1356,41.75081],[-83.08101,41.7511],[-83.0796,41.62936],[-82.95011,41.54404],[-82.89032,41.54404],[-82.89032,41.69462],[-82.8494,41.7463],[-82.76758,41.73925],[-82.75184,41.63584],[-82.64799,41.62408],[-82.68575,41.50634],[-82.49063,41.40492],[-82.0217,41.53462],[-81.72901,41.52048],[-81.39541,41.7369],[-81.10587,41.84484],[-80.50161,41.99939],[-80.51105,40.62127],[-80.6275,40.59021],[-80.58344,40.49933],[-80.58973,40.2812],[-80.85095,39.625],[-81.19399,39.37974],[-81.38912,39.31159],[-81.45521,39.38704],[-81.515,39.35054],[-81.54333,39.26288],[-81.72586,39.19461],[-81.73216,38.9258],[-81.9021,38.85477],[-81.95875,38.89397],[-81.9084,38.93315],[-82.02799,38.99922],[-82.11611,38.92336],[-82.12555,38.8278],[-82.19794,38.78856],[-82.16647,38.72475],[-82.16017,38.58712],[-82.26718,38.57236],[-82.29865,38.43198],[-82.57875,38.39745],[-82.73925,38.53545],[-82.8494,38.56006],[-82.91235,38.73212],[-83.00676,38.71002],[-83.14524,38.59942],[-83.30575,38.58466],[-83.39387,38.64368],[-83.46625,38.64614],[-83.54178,38.69283],[-83.65193,38.61172],[-83.74635,38.63385],[-83.9635,38.76403],[-84.08624,38.75421],[-84.22157,38.7812],[-84.34117,38.99922],[-84.49223,39.07255],[-84.64015,39.05545],[-84.74086,39.11164],[-84.84471,39.08477],[-84.82898,41.70637],[-83.44737,41.76038],[-83.13438,41.64959],[-83.1356,41.75081]]],terms_url:"https://ogrip.oit.ohio.gov/ProjectsInitiatives/StatewideImagery.aspx",terms_text:"Ohio Statewide Imagery Program",description:"Most recent available 6-inch orthoimagery from the Ohio Statewide Imagery Program."},{id:"osm-hr-knin-2007",name:"osm-hr: Knin 2007 Aerial imagery",type:"tms",template:"https://tms.osm-hr.org/knin-2007/{zoom}/{x}/{-y}.png",endDate:"2007-01-01T00:00:00.000Z",startDate:"2007-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[16.21712,44.08054],[16.22916,44.08041],[16.22938,44.06055],[16.2303,44.05757],[16.23715,44.04213],[16.23715,44.03615],[16.23041,44.03599],[16.22494,44.03627],[16.2243,44.03599],[16.22404,44.03504],[16.21608,44.02178],[16.21286,44.01661],[16.20391,44.01672],[16.19269,44.02601],[16.18003,44.03662],[16.18011,44.03772],[16.21129,44.06685],[16.21712,44.08054]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/osm-hr.png"},{id:"osm-hr-orbview",name:"osm-hr: Orbview",type:"tms",template:"https://tms.osm-hr.org/orbview/{zoom}/{x}/{-y}.png",endDate:"2007-01-01T00:00:00.000Z",startDate:"2003-01-01T00:00:00.000Z",zoomExtent:[0,17],polygon:[[[19.59394,45.00171],[19.70329,45.00547],[19.70441,43.01839],[19.77633,43.02304],[19.77427,42.11507],[19.66935,42.11019],[19.66656,42.98104],[19.59377,42.97665],[19.59394,45.00171]],[[21.49434,44.00064],[21.60243,44.00519],[21.60273,41.98521],[21.49527,41.97908],[21.49434,44.00064]],[[15.48386,45.51525],[15.59338,45.5102],[15.59355,44.51169],[15.66994,44.5156],[15.672,45.25531],[15.77499,45.25411],[15.77568,44.47642],[15.75886,44.47618],[15.75611,44.24569],[15.82169,44.2452],[15.82203,44.51156],[15.92279,44.51046],[15.92245,44.2618],[15.98837,44.26094],[15.98614,44.51022],[16.09531,44.5156],[16.09016,43.4736],[15.9918,43.4746],[15.98991,43.99825],[15.92365,43.99924],[15.92674,43.48132],[15.64453,43.46987],[15.65277,43.97898],[15.48385,43.97602],[15.48042,44.2393],[15.56145,44.24274],[15.55904,44.4725],[15.48489,44.47201],[15.48386,45.51525]],[[18.79237,44.00158],[18.90404,44.00813],[18.8994,42.19012],[18.79864,42.18821],[18.79237,44.00158]],[[19.39593,42.03272],[19.50138,42.03734],[19.50056,44.59982],[19.39748,44.59838],[19.39593,42.03272]],[[21.35021,45.06504],[21.46076,45.04982],[21.21554,44.33975],[21.11795,44.35651],[21.35021,45.06504]],[[16.90521,45.22606],[17.02057,45.22606],[17.01713,46.01461],[16.92238,46.02128],[16.92032,46.16889],[17.01096,46.16937],[17.01507,46.7963],[16.92169,46.79677],[16.92169,47.01397],[16.53511,47.01818],[16.53717,46.48397],[16.45889,46.48705],[16.46061,47.01561],[15.98305,47.01608],[15.98339,46.95542],[15.90031,46.95143],[15.90752,45.84399],[16.00965,45.84339],[16.00914,45.97334],[16.37031,45.97549],[16.36825,46.23258],[16.44379,46.23305],[16.44722,45.96452],[16.64978,45.95736],[16.64978,45.97358],[16.90315,45.97072],[16.90521,45.22606]],[[15.29674,45.59698],[15.40112,45.59795],[15.39974,45.00632],[15.2988,45.00632],[15.29674,45.59698]],[[15.97412,45.78345],[16.13153,45.78446],[16.13814,45.69833],[15.97936,45.69959],[15.97412,45.78345]],[[20.4847,44.95994],[20.67661,44.96091],[20.67541,44.65815],[20.48658,44.65937],[20.4847,44.95994]],[[18.98403,47.01631],[19.27586,47.01631],[19.27654,45.97788],[19.16977,45.97549],[19.17114,46.48965],[19.09098,46.48906],[19.09115,46.23329],[18.98678,46.23246],[18.98403,47.01631]],[[13.59695,45.63229],[14.01031,45.61884],[14.01581,44.96893],[13.70441,44.96796],[13.70407,44.87461],[13.59283,44.87242],[13.59695,45.63229]],[[16.30663,45.51074],[16.51623,45.51429],[16.51211,44.73015],[16.4043,44.73417],[16.4043,45.24903],[16.30955,45.25],[16.30663,45.51074]],[[20.33295,44.96067],[20.44933,44.9597],[20.4483,44.65449],[20.33535,44.65937],[20.33295,44.96067]],[[19.35362,47.01502],[19.46005,47.01549],[19.46056,45.96845],[19.35379,45.96666],[19.35362,47.01502]],[[16.15505,44.50899],[16.26595,44.51585],[16.26217,44.24077],[16.32465,44.24151],[16.32397,44.5112],[16.4352,44.51658],[16.42997,43.47553],[16.24535,43.47385],[16.24466,43.72707],[16.16055,43.72794],[16.15505,44.50899]],[[19.92714,43.97651],[20.03632,43.98244],[20.03717,46.00686],[20.0116,46.00573],[20.02052,47.02474],[19.533,47.01397],[19.53953,45.97382],[19.73556,45.97096],[19.73848,46.73951],[19.81007,46.7361],[19.81676,45.97442],[19.92336,45.97334],[19.92714,43.97651]],[[21.98055,42.96107],[21.98038,44.79377],[22.08801,44.79329],[22.08681,44.5868],[22.1517,44.58594],[22.14809,45.01542],[22.25933,45.01967],[22.25281,44.12407],[22.31872,44.12358],[22.31666,44.75697],[22.39357,44.75844],[22.39494,45.0022],[22.59484,45.01606],[22.5927,43.60377],[22.49382,43.60526],[22.49382,43.76961],[22.4231,43.7701],[22.42378,43.53312],[22.49794,43.53212],[22.50069,43.31818],[22.58789,43.31619],[22.5872,43.27521],[22.60368,43.27371],[22.603,42.97602],[22.5872,42.97451],[22.58446,42.88502],[22.48764,42.88603],[22.48695,42.97099],[22.22465,42.94587],[22.22603,42.97501],[21.98055,42.96107]],[[15.90666,45.64165],[16.00965,45.64201],[16.01352,44.96404],[15.90314,44.95927],[15.90666,45.64165]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/osm-hr.png"},{id:"osm-hr-ustopo50",name:"osm-hr: US Topo 50",type:"tms",template:"https://tms.osm-hr.org/ustopo/{zoom}/{x}/{y}.png",endDate:"2002-01-01T00:00:00.000Z",startDate:"1992-01-01T00:00:00.000Z",zoomExtent:[0,15],polygon:[[[14.70005,45.75004],[15.00046,45.75004],[15.00046,45.50081],[14.70005,45.50033],[14.70005,45.75004]],[[20.99995,42.00004],[20.99899,41.49932],[21.90262,41.49932],[21.8985,41.7498],[22.19993,41.75004],[22.19959,41.50061],[22.80006,41.50086],[22.79938,41.99982],[22.50069,42.00084],[22.49931,42.24987],[22.19994,42.24987],[22.19788,42.00186],[21.59912,42.00084],[21.59981,42.24987],[21.30043,42.24987],[21.29974,42.00033],[20.99995,42.00004]],[[13.49962,46.50217],[13.49945,45.50009],[14.09958,45.50105],[14.09958,45.75028],[13.79883,45.75028],[13.8002,45.99982],[14.39964,46.0003],[14.40102,46.2492],[14.09958,46.24967],[14.10026,46.49981],[13.49962,46.50217]],[[15.89996,46.75115],[16.19968,46.75048],[16.19917,46.5004],[15.89979,46.5004],[15.89996,46.75115]],[[15.59964,45.25006],[16.80084,45.25],[16.80016,45.49985],[16.50009,45.50009],[16.49975,45.75004],[16.79981,45.75004],[16.80018,45.50012],[17.0997,45.50009],[17.10005,45.24988],[18.89854,45.25193],[18.89992,45.75052],[18.6002,45.75052],[18.60054,45.99982],[19.49936,45.99887],[19.49867,46.24944],[20.39921,46.24896],[20.39886,46.00006],[20.69893,45.99959],[20.69824,45.50009],[20.99899,45.50009],[21.00037,45.25024],[21.29837,45.25169],[21.297,45.00171],[21.60187,45.00171],[21.59912,44.74673],[21.89438,44.74673],[21.89987,44.50238],[22.1965,44.49944],[22.20062,44.75064],[22.49863,44.74868],[22.49863,43.50075],[22.798,43.49876],[22.79938,43.25021],[23.09875,43.2492],[23.1015,43.00164],[22.49588,42.99963],[22.49863,42.50045],[21.89712,42.50045],[21.90262,42.74903],[21.59775,42.74802],[21.59775,42.50147],[21.30112,42.50147],[21.29837,42.74903],[20.99762,42.75105],[20.99899,43.00063],[20.69961,43.00063],[20.69961,42.75105],[19.80148,42.75206],[19.80423,42.50248],[19.49936,42.49944],[19.50073,42.00237],[18.88962,42.00033],[18.88824,42.24987],[18.29773,42.24784],[18.2991,42.49944],[17.70035,42.50147],[17.69897,42.74903],[17.3996,42.75004],[17.40234,43.00164],[17.10022,43.00063],[17.10022,43.50075],[16.79947,43.50275],[16.80084,43.74927],[16.50284,43.74828],[16.49872,43.50374],[16.20209,43.50075],[16.19797,43.74927],[16.49803,43.75082],[16.49872,44.00121],[15.90134,43.99973],[15.89928,44.49993],[15.60059,44.49944],[15.59964,45.25006]],[[14.40033,45.25024],[14.69902,45.25024],[14.70002,44.99997],[14.4017,45.00074],[14.40033,45.25024]],[[21.59997,41.25002],[21.89996,41.25052],[21.90056,41.00218],[21.60118,41.00115],[21.59997,41.25002]],[[14.69996,46.49996],[14.99984,46.50017],[14.99951,46.25039],[14.69962,46.25005],[14.69996,46.49996]],[[13.7996,45.25018],[14.09992,45.25048],[14.10027,44.74966],[13.80089,44.75063],[13.7996,45.25018]],[[20.39886,41.75185],[20.40024,41.00218],[21.29974,41.00011],[21.29837,41.25045],[20.7003,41.25097],[20.69824,41.74929],[20.39886,41.75185]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/osm-hr.png"},{id:"osm-hr-zagreb-2012",name:"osm-hr: Zagreb 2012 Aerial imagery",type:"tms",template:"https://tms.osm-hr.org/zagreb-2012/{zoom}/{x}/{-y}.png",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[16.15334,45.96857],[16.17462,45.94041],[16.17599,45.91796],[16.18595,45.90793],[16.18423,45.89789],[16.19728,45.8924],[16.22578,45.86085],[16.22097,45.85248],[16.22938,45.84638],[16.22921,45.84148],[16.24088,45.83645],[16.21719,45.83885],[16.20655,45.82784],[16.19865,45.77638],[16.1602,45.79554],[16.12827,45.80224],[16.13033,45.79434],[16.12278,45.78716],[16.10081,45.7862],[16.07677,45.77303],[16.0572,45.75746],[16.03901,45.76082],[16.03695,45.7577],[16.03935,45.75411],[16.02699,45.75507],[16.01772,45.74453],[16.01772,45.71936],[15.98785,45.71601],[15.96554,45.69131],[15.96725,45.67236],[15.95077,45.65125],[15.95077,45.63589],[15.94768,45.62989],[15.94288,45.63109],[15.93395,45.62172],[15.92606,45.61932],[15.92125,45.6138],[15.90031,45.62244],[15.90717,45.63229],[15.89619,45.63565],[15.87421,45.65557],[15.83885,45.66517],[15.81722,45.67044],[15.8131,45.67716],[15.77568,45.68915],[15.77396,45.7081],[15.78941,45.73398],[15.79285,45.73159],[15.80898,45.7383],[15.81001,45.73063],[15.82237,45.72344],[15.83473,45.72871],[15.85155,45.71673],[15.87078,45.73159],[15.84434,45.73159],[15.84469,45.76465],[15.83834,45.76764],[15.81276,45.76764],[15.80555,45.77543],[15.80538,45.80403],[15.8325,45.80391],[15.82993,45.80762],[15.83319,45.81062],[15.82289,45.82581],[15.82186,45.83837],[15.82975,45.84136],[15.84074,45.83992],[15.8452,45.84112],[15.84434,45.84459],[15.84984,45.84805],[15.85052,45.85236],[15.85979,45.85511],[15.86031,45.85308],[15.86477,45.85272],[15.87301,45.85451],[15.87378,45.85755],[15.87328,45.86081],[15.87816,45.8621],[15.87782,45.86563],[15.88263,45.8618],[15.88649,45.86306],[15.88529,45.86545],[15.89026,45.87603],[15.89709,45.88143],[15.9082,45.88642],[15.92125,45.88953],[15.9288,45.88762],[15.93876,45.89359],[15.92194,45.89431],[15.91988,45.89789],[15.92983,45.90339],[15.94768,45.90434],[15.95352,45.90554],[15.95524,45.91223],[15.97412,45.91271],[15.99918,45.92369],[16.00811,45.9299],[16.02802,45.93324],[16.03043,45.93611],[16.04313,45.93969],[16.05206,45.93563],[16.05171,45.94447],[16.06476,45.94661],[16.06579,45.95115],[16.0778,45.95569],[16.09325,45.95903],[16.09497,45.95449],[16.10767,45.95688],[16.11317,45.96165],[16.11282,45.96762],[16.12038,45.96905],[16.13205,45.96475],[16.1372,45.96523],[16.13823,45.96786],[16.15334,45.96857]]],terms_url:"https://geoportal.zagreb.hr/",terms_text:"Grad Zagreb, Gradski ured za strategijsko planiranje i razvoj Grada",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/osm-hr.png"},{id:"osm-hr-zagreb-2018",name:"osm-hr: Zagreb 2018 Aerial imagery",type:"tms",template:"https://tms.osm-hr.org/zagreb-2018/{zoom}/{x}/{-y}.png",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[15.87649,45.87423],[15.87739,45.87821],[15.88087,45.88248],[15.88503,45.8849],[15.88773,45.88741],[15.89112,45.88953],[15.89357,45.89019],[15.89773,45.89311],[15.90151,45.8944],[15.90687,45.89527],[15.91116,45.89652],[15.91455,45.89691],[15.91953,45.89837],[15.92378,45.89891],[15.92786,45.89849],[15.93035,45.90133],[15.9343,45.90408],[15.93854,45.90599],[15.94155,45.90817],[15.94567,45.9096],[15.9509,45.91008],[15.95326,45.91166],[15.95605,45.91378],[15.96138,45.9159],[15.96507,45.92053],[15.96923,45.92298],[15.97734,45.92536],[15.98232,45.92814],[15.9873,45.9305],[15.99047,45.93104],[15.99463,45.93405],[16.00287,45.93802],[16.00687,45.93924],[16.01219,45.93945],[16.01648,45.93996],[16.01789,45.94056],[16.0191,45.94262],[16.02219,45.9447],[16.02579,45.94605],[16.03141,45.94721],[16.03618,45.94834],[16.04103,45.94849],[16.04352,45.95094],[16.04759,45.95267],[16.05025,45.95339],[16.05326,45.95401],[16.05609,45.95673],[16.06008,45.95876],[16.06536,45.9598],[16.06819,45.96252],[16.07167,45.96407],[16.07549,45.96493],[16.07931,45.96508],[16.08141,45.96538],[16.08411,45.96669],[16.08707,45.96744],[16.09076,45.96762],[16.0936,45.96729],[16.09566,45.96657],[16.09755,45.96562],[16.09922,45.96463],[16.10034,45.96475],[16.10089,45.96565],[16.10098,45.96693],[16.10132,45.97027],[16.1027,45.97281],[16.10527,45.97504],[16.10827,45.97648],[16.11205,45.9774],[16.11407,45.97755],[16.11669,45.97803],[16.11948,45.97815],[16.12334,45.97758],[16.12707,45.97633],[16.12939,45.97603],[16.13179,45.9754],[16.13402,45.97618],[16.13703,45.97683],[16.13892,45.97698],[16.14145,45.97743],[16.14428,45.9774],[16.14557,45.97722],[16.1481,45.97767],[16.15145,45.97761],[16.15415,45.97797],[16.15724,45.97797],[16.1599,45.97734],[16.16235,45.97663],[16.16458,45.97525],[16.16651,45.97334],[16.16793,45.9712],[16.16844,45.9689],[16.16896,45.96726],[16.16913,45.96529],[16.17123,45.96443],[16.17376,45.96264],[16.17621,45.96076],[16.1778,45.95888],[16.17866,45.95664],[16.17866,45.95524],[16.17956,45.95321],[16.17964,45.95082],[16.17986,45.94945],[16.18278,45.94736],[16.18462,45.94521],[16.18582,45.94276],[16.18595,45.94065],[16.18578,45.93874],[16.18509,45.93727],[16.18582,45.93506],[16.18617,45.93256],[16.18578,45.93059],[16.18608,45.92721],[16.18728,45.92548],[16.18771,45.9228],[16.19067,45.92077],[16.1923,45.91856],[16.19308,45.91644],[16.19329,45.91515],[16.19535,45.91309],[16.19698,45.91059],[16.19741,45.90784],[16.19737,45.90605],[16.19647,45.90378],[16.19651,45.90279],[16.19951,45.9027],[16.20359,45.90163],[16.20625,45.90022],[16.20827,45.89822],[16.2117,45.89365],[16.21505,45.88854],[16.21664,45.88553],[16.21977,45.88338],[16.22204,45.8806],[16.22591,45.87531],[16.2338,45.86969],[16.2359,45.86862],[16.23874,45.86626],[16.24032,45.86327],[16.24071,45.85983],[16.2405,45.85855],[16.24002,45.85598],[16.23904,45.85409],[16.23779,45.85281],[16.23972,45.85122],[16.24093,45.84949],[16.2417,45.84737],[16.24487,45.84641],[16.24779,45.84474],[16.25041,45.84231],[16.25191,45.8401],[16.25247,45.83795],[16.25204,45.83517],[16.26826,45.83511],[16.26831,45.8236],[16.22974,45.82356],[16.2299,45.78591],[16.21109,45.78616],[16.21101,45.78447],[16.21243,45.7827],[16.21333,45.78039],[16.21333,45.77797],[16.2123,45.77558],[16.2099,45.77309],[16.20788,45.77129],[16.20543,45.76977],[16.20217,45.76878],[16.19934,45.76827],[16.19552,45.76851],[16.19174,45.7695],[16.17531,45.77818],[16.16934,45.78081],[16.1578,45.78497],[16.1508,45.78692],[16.14394,45.78701],[16.14368,45.77965],[16.11181,45.69503],[16.07629,45.69513],[16.07624,45.69708],[16.02624,45.69689],[16.01491,45.70991],[16.01129,45.70996],[16.00871,45.71028],[16.00373,45.71008],[15.99841,45.70879],[15.99472,45.70513],[15.99386,45.70237],[15.99172,45.69914],[15.9888,45.69698],[15.98657,45.69581],[15.98369,45.69365],[15.97949,45.69185],[15.97923,45.68954],[15.97803,45.68739],[15.98022,45.68427],[15.98077,45.68091],[15.98043,45.67911],[15.9797,45.67755],[15.97944,45.6756],[15.97858,45.67314],[15.97906,45.6711],[15.97871,45.66844],[15.97704,45.66604],[15.97459,45.66379],[15.97305,45.66196],[15.97052,45.65968],[15.97034,45.65614],[15.96846,45.6526],[15.96627,45.65023],[15.96215,45.64795],[15.96223,45.64567],[15.96288,45.64225],[15.96271,45.64],[15.96335,45.63724],[15.96279,45.63478],[15.95987,45.63049],[15.95944,45.6273],[15.95768,45.62454],[15.95429,45.62211],[15.95163,45.62118],[15.94803,45.62061],[15.94494,45.61761],[15.94082,45.61515],[15.93799,45.61389],[15.93408,45.61305],[15.93099,45.60935],[15.92764,45.60704],[15.92322,45.60542],[15.91816,45.605],[15.91352,45.60596],[15.91181,45.60671],[15.90885,45.6074],[15.90387,45.6083],[15.90074,45.60989],[15.89812,45.6114],[15.89464,45.61263],[15.89194,45.61431],[15.8885,45.61665],[15.8864,45.61911],[15.88554,45.62199],[15.88584,45.6246],[15.88747,45.62697],[15.88816,45.62808],[15.88464,45.63013],[15.88224,45.63256],[15.88134,45.63436],[15.88095,45.63577],[15.87778,45.63718],[15.87554,45.63859],[15.87215,45.64033],[15.86984,45.64267],[15.86821,45.64525],[15.86666,45.64738],[15.86318,45.64744],[15.85962,45.64807],[15.85696,45.64912],[15.85413,45.6502],[15.85138,45.65014],[15.84731,45.65104],[15.84426,45.65242],[15.84224,45.65395],[15.83967,45.65515],[15.83417,45.6562],[15.83027,45.65755],[15.82709,45.65923],[15.8246,45.66118],[15.82044,45.66112],[15.81563,45.66136],[15.81048,45.66271],[15.80641,45.66514],[15.80435,45.66796],[15.80306,45.67008],[15.79851,45.67149],[15.79529,45.67338],[15.7928,45.6735],[15.78817,45.6747],[15.78349,45.67632],[15.77521,45.67992],[15.76791,45.6837],[15.76525,45.68649],[15.76431,45.68909],[15.76427,45.69158],[15.76379,45.69539],[15.76405,45.69944],[15.76281,45.70246],[15.76079,45.70606],[15.7607,45.70957],[15.76221,45.71289],[15.76598,45.71652],[15.76856,45.72287],[15.77143,45.72748],[15.77345,45.73264],[15.77748,45.73713],[15.77989,45.73985],[15.78371,45.74183],[15.78787,45.74282],[15.79169,45.74255],[15.79551,45.74387],[15.79808,45.74474],[15.8013,45.74617],[15.80615,45.74716],[15.80438,45.87573],[15.83911,45.87594],[15.84298,45.8754],[15.84322,45.85968],[15.84542,45.86074],[15.84866,45.86191],[15.85106,45.86268],[15.85246,45.86304],[15.85518,45.86382],[15.85733,45.86421],[15.8599,45.86422],[15.8617,45.86397],[15.8637,45.86682],[15.86499,45.86781],[15.86726,45.87077],[15.87035,45.87286],[15.87301,45.8737],[15.87649,45.87423]]],terms_url:"https://geoportal.zagreb.hr/",terms_text:"Grad Zagreb, Gradski ured za strategijsko planiranje i razvoj Grada",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/osm-hr.png"},{id:"osmie_barony",name:"OSMIE Baronies",type:"tms",template:"https://tile.openstreetmap.ie/barony/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_cps",name:"OSMIE Civil Parishes",type:"tms",template:"https://tile.openstreetmap.ie/civilparish/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_dail_ea",name:"OSMIE Dail Election Areas",type:"tms",template:"https://tile.openstreetmap.ie/dail_ea/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_eds",name:"OSMIE EDs",type:"tms",template:"https://tile.openstreetmap.ie/ed/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_local_ea",name:"OSMIE Local Election Areas",type:"tms",template:"https://tile.openstreetmap.ie/local_ea/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_tie_not_counties",name:"OSMIE T.ie Land not in Counties",type:"tms",template:"https://www.townlands.ie/tiles/not_counties/{zoom}/{x}/{y}.png",zoomExtent:[2,19],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_tds",name:"OSMIE Townlands",type:"tms",template:"https://tile.openstreetmap.ie/townland/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"al_palestina",name:"Palestina AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Palestina&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.28907,-9.71916],[-37.28904,-9.71114],[-37.28911,-9.7022],[-37.28915,-9.69175],[-37.28919,-9.68886],[-37.28927,-9.68069],[-37.28926,-9.67732],[-37.28936,-9.66999],[-37.28936,-9.66599],[-37.28931,-9.66133],[-37.28941,-9.65526],[-37.28946,-9.64556],[-37.2895,-9.63489],[-37.28954,-9.62926],[-37.2964,-9.62885],[-37.31188,-9.62897],[-37.32762,-9.62914],[-37.33181,-9.62919],[-37.34338,-9.62917],[-37.35876,-9.62923],[-37.37175,-9.6293],[-37.37839,-9.62913],[-37.38051,-9.62922],[-37.38061,-9.63143],[-37.38054,-9.63785],[-37.38043,-9.63895],[-37.38053,-9.64147],[-37.38051,-9.64876],[-37.3805,-9.6543],[-37.38043,-9.656],[-37.38024,-9.66028],[-37.38022,-9.66551],[-37.38019,-9.67054],[-37.38016,-9.67896],[-37.38013,-9.68781],[-37.38009,-9.70116],[-37.38003,-9.71053],[-37.3801,-9.71743],[-37.38005,-9.71959],[-37.37932,-9.71954],[-37.37392,-9.71956],[-37.36582,-9.71945],[-37.35849,-9.71946],[-37.35334,-9.71938],[-37.34414,-9.71937],[-37.33423,-9.71923],[-37.32933,-9.71927],[-37.3218,-9.71924],[-37.31983,-9.71927],[-37.31094,-9.7192],[-37.29589,-9.71921],[-37.28907,-9.71916]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"palmeira_dos_indios",name:"Palmeira dos Indios AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Palmeira%20dos%20Indios&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.58664,-9.46124],[-36.58665,-9.45851],[-36.58619,-9.41968],[-36.58604,-9.41452],[-36.58596,-9.40593],[-36.58585,-9.39509],[-36.58579,-9.39163],[-36.58565,-9.38983],[-36.58549,-9.38249],[-36.58529,-9.37965],[-36.58511,-9.37744],[-36.58503,-9.37059],[-36.5889,-9.37058],[-36.59064,-9.37065],[-36.59389,-9.3706],[-36.60037,-9.37073],[-36.61046,-9.37049],[-36.62288,-9.37021],[-36.63377,-9.37002],[-36.63835,-9.36986],[-36.64743,-9.36997],[-36.65141,-9.36994],[-36.65534,-9.36972],[-36.65647,-9.36974],[-36.66111,-9.37024],[-36.66276,-9.37026],[-36.66704,-9.36973],[-36.67052,-9.36966],[-36.67325,-9.36966],[-36.67602,-9.36987],[-36.67593,-9.3726],[-36.67597,-9.37679],[-36.67639,-9.38138],[-36.67654,-9.38464],[-36.67663,-9.39265],[-36.67675,-9.39829],[-36.67689,-9.40875],[-36.67707,-9.41887],[-36.67717,-9.43179],[-36.67724,-9.43395],[-36.67718,-9.43753],[-36.67728,-9.44311],[-36.6773,-9.44933],[-36.67741,-9.45528],[-36.6774,-9.45938],[-36.67735,-9.46017],[-36.67568,-9.46021],[-36.66625,-9.4603],[-36.66224,-9.4603],[-36.65736,-9.46042],[-36.6504,-9.46047],[-36.63543,-9.46065],[-36.61979,-9.46083],[-36.61433,-9.46083],[-36.61029,-9.46097],[-36.60647,-9.46097],[-36.60186,-9.46099],[-36.59426,-9.46112],[-36.58664,-9.46124]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"Pangasinan_Bulacan_HiRes",name:"Pangasinán/Bulacan (Philippines HiRes)",type:"tms",template:"https://gravitystorm.dev.openstreetmap.org/imagery/philippines/{zoom}/{x}/{y}.png",zoomExtent:[12,19],polygon:[[[120.33659,15.98577],[120.44599,15.984],[120.44613,15.97446],[120.47646,15.97459],[120.59425,15.94683],[120.59806,16.09079],[120.59654,16.198],[120.36854,16.21853],[120.34758,16.04231],[120.33659,15.98577]],[[120.8268,15.3658],[121.2684,15.2602],[121.2699,14.7025],[120.695,14.8423],[120.8268,15.3658]]]},{id:"pao_de_acucar",name:"Pão de Açucar AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Pao%20de%20Acucar&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.39003,-9.78589],[-37.39019,-9.7762],[-37.38993,-9.76575],[-37.38991,-9.75256],[-37.39015,-9.74102],[-37.39003,-9.73201],[-37.39012,-9.72254],[-37.39015,-9.71289],[-37.39019,-9.70341],[-37.3902,-9.69548],[-37.40377,-9.6955],[-37.41728,-9.6956],[-37.43224,-9.69569],[-37.44319,-9.69573],[-37.44723,-9.69582],[-37.45682,-9.69585],[-37.47062,-9.69591],[-37.47373,-9.69591],[-37.47586,-9.69604],[-37.48128,-9.69605],[-37.48131,-9.6989],[-37.48122,-9.70087],[-37.48121,-9.70239],[-37.48135,-9.70545],[-37.48138,-9.71046],[-37.48134,-9.71617],[-37.4812,-9.71875],[-37.48125,-9.72035],[-37.48136,-9.72134],[-37.48134,-9.7241],[-37.4813,-9.72506],[-37.48103,-9.72732],[-37.48102,-9.73088],[-37.48127,-9.73462],[-37.48131,-9.73638],[-37.48131,-9.73893],[-37.48131,-9.74388],[-37.4813,-9.74989],[-37.48122,-9.75315],[-37.48102,-9.75855],[-37.48084,-9.7642],[-37.48085,-9.76526],[-37.48094,-9.76675],[-37.48093,-9.76881],[-37.48084,-9.7721],[-37.48087,-9.77486],[-37.48076,-9.77993],[-37.48081,-9.7863],[-37.46382,-9.78623],[-37.45353,-9.7862],[-37.43979,-9.78611],[-37.42998,-9.78607],[-37.4208,-9.786],[-37.40853,-9.78596],[-37.39545,-9.78593],[-37.39003,-9.78589]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"PCN-Italy-2006",name:"PCN 2006 - Italy",type:"wms",template:"http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_06.map&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OI.ORTOIMMAGINI.2006.33,OI.ORTOIMMAGINI.2006.32&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2006-01-01T00:00:00.000Z",startDate:"2006-01-01T00:00:00.000Z",polygon:[[[7.54795,43.73118],[8.10697,43.86701],[8.73593,44.38944],[10.18338,43.85116],[9.55016,43.13605],[10.27725,42.27515],[11.69748,42.08118],[12.90059,40.84897],[14.97466,40.20869],[16.04773,38.8953],[13.1086,38.74113],[11.77717,37.93605],[14.40624,36.74299],[15.13467,36.59364],[15.42867,37.027],[15.21993,37.43376],[15.4836,37.92936],[16.01644,37.8036],[17.21669,38.87425],[17.21669,39.40468],[16.55477,39.78775],[17.05464,40.45144],[18.32906,39.70539],[18.68773,40.0587],[18.04964,40.67064],[16.00545,41.52122],[16.38448,41.85964],[15.51837,42.1537],[14.57997,42.2461],[13.56099,43.65128],[12.57889,44.0867],[12.28795,44.62204],[12.56398,44.97092],[12.34151,45.17458],[12.41696,45.40557],[13.09252,45.62826],[13.69549,45.70806],[13.78445,45.5825],[13.9191,45.6322],[13.8235,45.7176],[13.59784,45.8072],[13.64307,45.98326],[13.52963,45.96588],[13.47474,46.00546],[13.66472,46.17392],[13.47587,46.22725],[13.42218,46.20758],[13.37671,46.29668],[13.59777,46.44137],[13.68684,46.43881],[13.7148,46.5222],[12.9151,46.60953],[12.38708,46.71529],[12.27591,46.88651],[12.17486,46.90895],[12.11675,47.01241],[12.21781,47.03996],[12.19254,47.09331],[11.74789,46.98484],[11.33355,46.99862],[11.10618,46.92966],[11.00764,46.76896],[10.72974,46.78972],[10.75753,46.82258],[10.66405,46.87614],[10.47197,46.85698],[10.38659,46.67847],[10.49375,46.62049],[10.46136,46.53164],[10.25309,46.57432],[10.23674,46.63484],[10.10307,46.61003],[10.03715,46.44479],[10.165,46.41051],[10.10506,46.3372],[10.17862,46.25626],[10.07055,46.21668],[9.95249,46.38045],[9.73086,46.35071],[9.71273,46.29266],[9.57015,46.2958],[9.46117,46.37481],[9.45936,46.50873],[9.40487,46.46621],[9.36128,46.5081],[9.28136,46.49685],[9.24503,46.23616],[8.95601,45.96503],[9.09065,45.89906],[9.0298,45.82127],[8.90992,45.8333],[8.9408,45.86682],[8.88904,45.95465],[8.78551,45.99063],[8.85617,46.0748],[8.62242,46.12112],[8.45032,46.26869],[8.42464,46.46367],[8.08814,46.26692],[8.15493,46.1834],[8.11383,46.11577],[8.02906,46.10331],[7.98881,45.99867],[7.9049,45.99945],[7.85949,45.91485],[7.56343,45.97421],[7.10685,45.85653],[7.04151,45.92435],[6.95315,45.85163],[6.80785,45.83265],[6.80785,45.71864],[6.98948,45.63869],[7.00037,45.509],[7.18019,45.40071],[7.10572,45.32924],[7.13115,45.25386],[6.85144,45.13226],[6.7697,45.16044],[6.62803,45.11175],[6.66981,45.02324],[6.74791,45.01939],[6.75518,44.89915],[7.02217,44.82519],[7.07484,44.68073],[6.95133,44.66264],[6.85507,44.53072],[6.94504,44.43112],[6.88784,44.42043],[6.89171,44.36637],[7.00764,44.23736],[7.36364,44.11882],[7.68694,44.17487],[7.72508,44.07578],[7.49355,43.86551],[7.54795,43.73118]],[[8.17134,39.14848],[8.62453,38.75119],[9.09831,39.03764],[9.03102,39.13144],[9.26585,39.18575],[9.64076,39.0227],[9.89894,40.67991],[9.50068,41.39257],[8.30317,40.91071],[8.41304,41.16139],[8.21254,41.13864],[8.07521,40.59862],[8.36154,40.35],[8.27914,39.98585],[8.38283,39.6536],[8.17134,39.14848]],[[12.51489,35.53423],[12.64054,35.5306],[12.63861,35.48641],[12.51296,35.49005],[12.51489,35.53423]],[[11.91218,36.85688],[12.08179,36.85523],[12.07958,36.70974],[11.90998,36.71139],[11.91218,36.85688]],[[12.84019,35.88131],[12.89186,35.88145],[12.89198,35.85003],[12.84031,35.84989],[12.84019,35.88131]]]},{id:"PCN-Lazio_Umbria-2008",name:"PCN 2008 - IT Lazio+Umbria",type:"wms",template:"http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_08.map&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OI.ORTOIMMAGINI.2008.33&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2008-01-01T00:00:00.000Z",startDate:"2008-01-01T00:00:00.000Z",polygon:[[[12.33149,41.64637],[12.41178,41.64791],[12.41499,41.54635],[12.49574,41.54789],[12.4985,41.49619],[12.57948,41.49843],[12.58062,41.42932],[12.60632,41.4288],[12.60746,41.39663],[12.8293,41.39818],[12.83159,41.34688],[12.9128,41.34843],[12.9151,41.29726],[12.99585,41.2983],[12.99791,41.19636],[13.1679,41.19808],[13.16721,41.24692],[13.41337,41.24829],[13.4152,41.19705],[13.8341,41.19808],[13.83341,41.2476],[13.91737,41.24847],[13.91668,41.39749],[14.0011,41.39784],[13.99996,41.49774],[14.08415,41.49826],[14.08346,41.65014],[14.00087,41.6498],[13.99973,41.75051],[13.83433,41.74965],[13.83364,41.80047],[13.75151,41.79978],[13.7499,41.84987],[13.41841,41.8497],[13.41681,41.95027],[13.33445,41.94959],[13.3333,42.00041],[13.25141,41.99973],[13.25003,42.05051],[13.08509,42.04966],[13.08394,42.097],[13.33399,42.09819],[13.33376,42.1472],[13.41772,42.14822],[13.41635,42.25052],[13.33399,42.24984],[13.33353,42.30094],[13.25141,42.29992],[13.25003,42.54699],[13.41795,42.54817],[13.41589,42.75065],[13.33468,42.74947],[13.33307,42.90056],[13.16836,42.89938],[13.16721,42.95079],[12.96419,42.95012],[12.96258,43.0003],[12.91877,42.9998],[12.91601,43.25078],[12.83526,43.24994],[12.83228,43.50107],[12.66321,43.4994],[12.66482,43.45112],[12.58567,43.44996],[12.58246,43.5508],[12.50171,43.5498],[12.49987,43.65131],[12.16242,43.64915],[12.16494,43.60132],[12.07891,43.5995],[12.0819,43.45196],[11.99541,43.44913],[11.99862,43.34661],[12.07891,43.34795],[12.08075,43.30189],[11.9961,43.29955],[11.99862,43.20214],[11.91237,43.19929],[11.91466,43.15212],[11.83207,43.14944],[11.8323,43.09653],[11.91099,43.09837],[11.91466,42.90191],[11.82909,42.89922],[11.83139,42.85231],[11.74582,42.84945],[11.74811,42.65236],[11.6731,42.64966],[11.67493,42.6105],[11.49485,42.59936],[11.49852,42.49593],[11.57812,42.49796],[11.58156,42.45244],[11.41226,42.44872],[11.41524,42.34656],[11.49599,42.34792],[11.49921,42.29636],[11.57835,42.29822],[11.58225,42.24628],[11.66185,42.24832],[11.66621,42.09649],[11.74536,42.09819],[11.74903,41.99666],[11.91443,41.99922],[11.91535,41.98626],[11.99403,41.98745],[11.99862,41.89685],[12.07868,41.89907],[12.08144,41.84594],[12.16311,41.84799],[12.16563,41.6964],[12.3292,41.69863],[12.33149,41.64637]]]},{id:"PCN-Italy-2012",name:"PCN 2012 - Italy",type:"wms",template:"http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_12.map&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.ORTOIMMAGINI.2012&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[7.54795,43.73118],[8.10697,43.86701],[8.73593,44.38944],[10.18338,43.85116],[9.55016,43.13605],[10.27725,42.27515],[11.69748,42.08118],[12.90059,40.84897],[14.97466,40.20869],[16.04773,38.8953],[13.1086,38.74113],[11.77717,37.93605],[14.40624,36.74299],[15.13467,36.59364],[15.42867,37.027],[15.21993,37.43376],[15.4836,37.92936],[16.01644,37.8036],[17.21669,38.87425],[17.21669,39.40468],[16.55477,39.78775],[17.05464,40.45144],[18.32906,39.70539],[18.68773,40.0587],[18.04964,40.67064],[16.00545,41.52122],[16.38448,41.85964],[15.51837,42.1537],[14.57997,42.2461],[13.56099,43.65128],[12.57889,44.0867],[12.28795,44.62204],[12.56398,44.97092],[12.34151,45.17458],[12.41696,45.40557],[13.09252,45.62826],[13.69549,45.70806],[13.78445,45.5825],[13.9191,45.6322],[13.8235,45.7176],[13.59784,45.8072],[13.64307,45.98326],[13.52963,45.96588],[13.47474,46.00546],[13.66472,46.17392],[13.47587,46.22725],[13.42218,46.20758],[13.37671,46.29668],[13.59777,46.44137],[13.68684,46.43881],[13.7148,46.5222],[12.9151,46.60953],[12.38708,46.71529],[12.27591,46.88651],[12.17486,46.90895],[12.11675,47.01241],[12.21781,47.03996],[12.19254,47.09331],[11.74789,46.98484],[11.33355,46.99862],[11.10618,46.92966],[11.00764,46.76896],[10.72974,46.78972],[10.75753,46.82258],[10.66405,46.87614],[10.47197,46.85698],[10.38659,46.67847],[10.49375,46.62049],[10.46136,46.53164],[10.25309,46.57432],[10.23674,46.63484],[10.10307,46.61003],[10.03715,46.44479],[10.165,46.41051],[10.10506,46.3372],[10.17862,46.25626],[10.07055,46.21668],[9.95249,46.38045],[9.73086,46.35071],[9.71273,46.29266],[9.57015,46.2958],[9.46117,46.37481],[9.45936,46.50873],[9.40487,46.46621],[9.36128,46.5081],[9.28136,46.49685],[9.24503,46.23616],[8.95601,45.96503],[9.09065,45.89906],[9.0298,45.82127],[8.90992,45.8333],[8.9408,45.86682],[8.88904,45.95465],[8.78551,45.99063],[8.85617,46.0748],[8.62242,46.12112],[8.45032,46.26869],[8.42464,46.46367],[8.08814,46.26692],[8.15493,46.1834],[8.11383,46.11577],[8.02906,46.10331],[7.98881,45.99867],[7.9049,45.99945],[7.85949,45.91485],[7.56343,45.97421],[7.10685,45.85653],[7.04151,45.92435],[6.95315,45.85163],[6.80785,45.83265],[6.80785,45.71864],[6.98948,45.63869],[7.00037,45.509],[7.18019,45.40071],[7.10572,45.32924],[7.13115,45.25386],[6.85144,45.13226],[6.7697,45.16044],[6.62803,45.11175],[6.66981,45.02324],[6.74791,45.01939],[6.75518,44.89915],[7.02217,44.82519],[7.07484,44.68073],[6.95133,44.66264],[6.85507,44.53072],[6.94504,44.43112],[6.88784,44.42043],[6.89171,44.36637],[7.00764,44.23736],[7.36364,44.11882],[7.68694,44.17487],[7.72508,44.07578],[7.49355,43.86551],[7.54795,43.73118]],[[8.17134,39.14848],[8.62453,38.75119],[9.09831,39.03764],[9.03102,39.13144],[9.26585,39.18575],[9.64076,39.0227],[9.89894,40.67991],[9.50068,41.39257],[8.30317,40.91071],[8.41304,41.16139],[8.21254,41.13864],[8.07521,40.59862],[8.36154,40.35],[8.27914,39.98585],[8.38283,39.6536],[8.17134,39.14848]],[[12.51489,35.53423],[12.64054,35.5306],[12.63861,35.48641],[12.51296,35.49005],[12.51489,35.53423]],[[11.91218,36.85688],[12.08179,36.85523],[12.07958,36.70974],[11.90998,36.71139],[11.91218,36.85688]],[[12.84019,35.88131],[12.89186,35.88145],[12.89198,35.85003],[12.84031,35.84989],[12.84019,35.88131]]]},{id:"Actueel_ortho25_WMS",name:"PDOK aerial imagery Beeldmateriaal.nl 25cm latest",type:"tms",template:"https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts?FORMAT=image/jpeg&SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=Actueel_ortho25&STYLE=&FORMAT=image/jpeg&tileMatrixSet=OGC:1.0:GoogleMapsCompatible&tileMatrix={zoom}&tileRow={y}&tileCol={x}",zoomExtent:[0,19],polygon:[[[3.14377,51.35984],[3.1575,51.24113],[3.33878,51.11544],[3.91281,51.05851],[4.65714,51.28067],[4.89334,51.26348],[5.17899,51.12579],[5.38498,51.13096],[5.54428,51.05678],[5.42069,50.85956],[5.46738,50.70326],[5.65689,50.61926],[6.14853,50.62143],[6.30234,50.85782],[6.29959,50.95438],[6.26389,51.01835],[6.37238,51.09259],[6.40122,51.20114],[6.37375,51.25102],[6.44516,51.31587],[6.42044,51.5496],[6.34354,51.67922],[6.79672,51.76429],[7.04666,51.91024],[7.07138,52.04559],[7.27188,52.17041],[7.30759,52.38551],[7.20596,52.53195],[7.28287,52.61458],[7.29935,52.77853],[7.44217,52.97827],[7.43393,53.28314],[7.04392,53.55159],[6.78299,53.63635],[6.23917,53.54016],[5.6871,53.51241],[5.17349,53.43885],[4.81644,53.23384],[4.65164,53.06583],[4.54178,52.48598],[4.32205,52.19568],[4.08104,52.01369],[4.02199,52.01623],[3.93684,51.96379],[3.95195,51.88079],[3.84483,51.84942],[3.62373,51.70752],[3.65532,51.66069],[3.63335,51.62746],[3.54683,51.62234],[3.39577,51.56091],[3.38203,51.51735],[3.49876,51.43267],[3.32985,51.38556],[3.14377,51.35984]]],terms_url:"https://www.nationaalgeoregister.nl/geonetwork/srv/dut/catalog.search#/search?facet.q=license%2FCC-BY&isChild=%27false%27&resultType=details&any_OR_title_OR_keyword=luchtfoto&fast=index&_content_type=json&from=1&to=20&sortBy=relevance",terms_text:"Kadaster / Beeldmateriaal.nl, CC BY 4.0",best:true,description:"Nationwide data set 25cm resolution color aerial imagery of the most recent year.",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/nl/PDOK-Luchtfoto-Beeldmateriaal-25cm-latest.png"},{id:"al_piranhas",name:"Piranhas AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Piranhas&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.71918,-9.65236],[-37.71918,-9.63874],[-37.71914,-9.6321],[-37.71924,-9.62114],[-37.71929,-9.61023],[-37.71934,-9.59988],[-37.7194,-9.58891],[-37.71945,-9.57802],[-37.71944,-9.57173],[-37.71952,-9.56684],[-37.71956,-9.56225],[-37.71998,-9.56218],[-37.72258,-9.56195],[-37.72818,-9.56203],[-37.73254,-9.562],[-37.74107,-9.56206],[-37.74845,-9.56202],[-37.75926,-9.56216],[-37.76972,-9.56227],[-37.78036,-9.56244],[-37.78537,-9.56236],[-37.78907,-9.56233],[-37.79562,-9.56245],[-37.79771,-9.56237],[-37.81006,-9.56243],[-37.81061,-9.56241],[-37.81053,-9.56531],[-37.81049,-9.57629],[-37.81046,-9.58742],[-37.81038,-9.59757],[-37.81031,-9.61798],[-37.81018,-9.65197],[-37.81018,-9.6523],[-37.81024,-9.65259],[-37.80664,-9.65245],[-37.80206,-9.65253],[-37.79597,-9.65237],[-37.79179,-9.65252],[-37.78815,-9.65246],[-37.78723,-9.65242],[-37.78035,-9.65241],[-37.77865,-9.65223],[-37.77625,-9.6523],[-37.77475,-9.65219],[-37.77234,-9.65223],[-37.7696,-9.65245],[-37.76623,-9.65251],[-37.76345,-9.65246],[-37.7604,-9.6525],[-37.75102,-9.65237],[-37.75012,-9.65249],[-37.74155,-9.65248],[-37.7403,-9.65239],[-37.73785,-9.65246],[-37.73443,-9.65238],[-37.73106,-9.65243],[-37.72651,-9.65237],[-37.72195,-9.65225],[-37.71992,-9.65228],[-37.71918,-9.65236]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"PNOA-Spain-TMS",name:"PNOA Spain",type:"tms",template:"https://www.ign.es/wmts/pnoa-ma?request=GetTile&service=WMTS&VERSION=1.0.0&Layer=OI.OrthoimageCoverage&Style=default&Format=image/png&TileMatrixSet=GoogleMapsCompatible&TileMatrix={zoom}&TileRow={y}&TileCol={x}",zoomExtent:[0,20],polygon:[[[-17.88463,28.44606],[-17.89395,28.52255],[-18.02125,28.74819],[-18.02241,28.80384],[-17.9424,28.87261],[-17.89118,28.87371],[-17.89033,28.85151],[-17.76759,28.85378],[-17.76698,28.83122],[-17.74127,28.832],[-17.73949,28.76422],[-17.71398,28.76497],[-17.71293,28.73037],[-17.75744,28.69318],[-17.75708,28.67413],[-17.74579,28.67435],[-17.74573,28.61656],[-17.75197,28.58337],[-17.76225,28.5592],[-17.78331,28.54167],[-17.78316,28.49366],[-17.80861,28.4925],[-17.80601,28.4469],[-17.88463,28.44606]],[[-18.1661,27.78516],[-18.16349,27.69492],[-18.08898,27.69634],[-18.08734,27.67387],[-18.03641,27.67537],[-18.03501,27.63026],[-17.959,27.6324],[-17.86033,27.7926],[-17.86303,27.83688],[-17.8884,27.83649],[-17.88913,27.85905],[-17.99065,27.85675],[-18.03868,27.76558],[-18.11464,27.76379],[-18.11546,27.78636],[-18.1661,27.78516]],[[-17.36038,28.06398],[-17.36297,28.17572],[-17.33756,28.17637],[-17.33846,28.2213],[-17.18579,28.22388],[-17.08208,28.13518],[-17.08084,28.068],[-17.13154,28.06681],[-17.15633,28.02146],[-17.23211,28.02037],[-17.23199,27.99804],[-17.25768,27.99784],[-17.25785,28.01997],[-17.30867,28.01923],[-17.36038,28.06398]],[[-16.92782,28.32758],[-16.92866,28.37219],[-16.87767,28.37293],[-16.87807,28.39542],[-16.52143,28.42261],[-16.44571,28.49113],[-16.44625,28.53597],[-16.42059,28.53627],[-16.42092,28.55884],[-16.34433,28.55976],[-16.3446,28.58221],[-16.19125,28.58372],[-16.19162,28.60684],[-16.12793,28.60782],[-16.1278,28.59218],[-16.09951,28.5925],[-16.09934,28.51638],[-16.16481,28.51612],[-16.16475,28.49386],[-16.23858,28.44847],[-16.26535,28.44761],[-16.26586,28.403],[-16.31675,28.40176],[-16.31631,28.38019],[-16.34208,28.37951],[-16.34083,28.2893],[-16.41584,28.19761],[-16.4151,28.13113],[-16.51533,28.01648],[-16.61684,28.01532],[-16.61681,27.99305],[-16.71842,27.99192],[-16.7191,28.03714],[-16.7447,28.03679],[-16.74534,28.08181],[-16.7707,28.08161],[-16.8224,28.1259],[-16.82317,28.17087],[-16.8487,28.17075],[-16.85028,28.26079],[-16.87565,28.26055],[-16.87608,28.28322],[-16.90151,28.28277],[-16.90239,28.32793],[-16.92782,28.32758]],[[-15.85374,27.90089],[-15.8542,27.99018],[-15.82895,27.99066],[-15.82911,28.03558],[-15.7783,28.03632],[-15.75328,28.08143],[-15.72788,28.08157],[-15.72826,28.17186],[-15.49897,28.1728],[-15.49874,28.15041],[-15.44978,28.15075],[-15.45016,28.19614],[-15.39728,28.19614],[-15.39644,28.03836],[-15.37103,28.03802],[-15.37065,28.01532],[-15.34578,28.01532],[-15.34548,27.92544],[-15.3708,27.92524],[-15.37057,27.83521],[-15.39598,27.83474],[-15.421,27.78797],[-15.47181,27.78939],[-15.47188,27.76665],[-15.52277,27.76678],[-15.54771,27.72161],[-15.62361,27.72134],[-15.62415,27.74199],[-15.70075,27.74335],[-15.80167,27.81105],[-15.85374,27.90089]],[[-14.52156,28.04678],[-14.52244,28.11841],[-14.41575,28.11561],[-14.21688,28.22788],[-14.21537,28.33903],[-14.16417,28.45283],[-14.11151,28.4748],[-14.03358,28.72267],[-13.95652,28.74494],[-13.95617,28.76659],[-13.82902,28.76643],[-13.82896,28.78798],[-13.80007,28.78793],[-13.8013,28.71899],[-13.82757,28.71935],[-13.82786,28.6518],[-13.80258,28.6519],[-13.80339,28.53842],[-13.82885,28.53847],[-13.83151,28.39702],[-13.91582,28.22414],[-13.98564,28.22357],[-14.03696,28.17958],[-14.13871,28.17999],[-14.13866,28.15791],[-14.21537,28.15781],[-14.21472,28.11189],[-14.29132,28.04524],[-14.33197,28.03687],[-14.44578,28.04698],[-14.44666,28.0658],[-14.49628,28.06826],[-14.49593,28.04585],[-14.52156,28.04678]],[[-13.80066,28.84566],[-13.80093,28.82311],[-13.77569,28.82305],[-13.69729,28.88982],[-13.69729,28.91277],[-13.60725,28.9118],[-13.43886,29.00024],[-13.43746,29.13513],[-13.4117,29.13499],[-13.41056,29.22298],[-13.45928,29.25559],[-13.45974,29.2942],[-13.50913,29.29456],[-13.51006,29.31635],[-13.56354,29.31729],[-13.56406,29.27138],[-13.53892,29.2712],[-13.53897,29.25004],[-13.56613,29.25013],[-13.5666,29.203],[-13.51565,29.20223],[-13.51565,29.18206],[-13.5398,29.18278],[-13.54089,29.13753],[-13.65782,29.13685],[-13.71322,29.09351],[-13.76634,29.09345],[-13.85025,29.01659],[-13.85182,28.98343],[-13.85244,28.91486],[-13.90131,28.89245],[-13.9024,28.84698],[-13.80066,28.84566]],[[1.64799,38.99907],[1.73217,38.99936],[1.73147,39.04417],[1.64895,39.04319],[1.64816,39.12764],[1.39486,39.12657],[1.39544,39.08642],[1.22811,39.08526],[1.22911,39.0029],[1.14487,39.0018],[1.14528,38.832],[1.31136,38.83316],[1.31219,38.79065],[1.39469,38.79162],[1.39519,38.75296],[1.31128,38.75193],[1.31259,38.62388],[1.6489,38.62511],[1.64807,38.71115],[1.58456,38.71012],[1.58116,38.70054],[1.54915,38.70028],[1.51972,38.70921],[1.50355,38.72532],[1.48133,38.91551],[1.55189,38.92544],[1.56673,38.95666],[1.64874,38.95833],[1.64799,38.99907]],[[2.54507,39.41667],[2.43933,39.41611],[2.43871,39.48469],[2.43902,39.49934],[2.31223,39.49934],[2.31192,39.54179],[2.22907,39.541],[2.22835,39.62606],[2.34601,39.62709],[2.92704,39.96016],[3.14566,39.96005],[3.14608,40.00198],[3.23139,40.00198],[3.23129,39.83292],[3.14823,39.83316],[3.14844,39.79357],[3.48148,39.79318],[3.48035,39.5959],[3.31506,39.47846],[3.31462,39.37855],[3.08302,39.24994],[2.97986,39.25015],[2.97904,39.3335],[2.72874,39.33342],[2.72885,39.45814],[2.64569,39.45774],[2.64538,39.49966],[2.54528,39.49942],[2.54507,39.41667]],[[3.81204,40.04344],[3.72908,40.0438],[3.72862,39.95842],[3.81266,39.9576],[3.81228,39.91644],[3.9609,39.91598],[4.19381,39.79131],[4.31503,39.79058],[4.31599,39.83293],[4.39874,39.83204],[4.39737,39.91858],[4.3158,39.91933],[4.31619,40.0434],[4.2319,40.04436],[4.23248,40.08478],[4.14915,40.08611],[4.14906,40.12552],[4.0628,40.12722],[4.06242,40.08499],[3.81287,40.08529],[3.81204,40.04344]],[[-8.89106,41.82289],[-9.1092,42.57511],[-9.03655,42.73066],[-9.08834,42.72696],[-9.14661,42.77503],[-9.21855,42.90163],[-9.2761,42.86051],[-9.30991,42.93113],[-9.27898,42.9822],[-9.30991,43.06004],[-9.25236,43.10417],[-9.2315,43.17032],[-9.14733,43.21018],[-9.06748,43.19916],[-9.03367,43.24267],[-8.99842,43.24477],[-8.99986,43.29558],[-8.93727,43.30553],[-8.92936,43.32699],[-8.8639,43.32908],[-8.87613,43.37407],[-8.82217,43.37354],[-8.78548,43.31914],[-8.70635,43.305],[-8.60996,43.3296],[-8.55097,43.32332],[-8.52435,43.3364],[-8.52507,43.36465],[-8.45745,43.39184],[-8.36105,43.41118],[-8.36033,43.46342],[-8.33444,43.57974],[-8.27761,43.57088],[-8.06467,43.72392],[-7.99921,43.7234],[-7.9172,43.78264],[-7.85605,43.79146],[-7.83591,43.73743],[-7.66284,43.80982],[-7.31889,43.67827],[-7.19975,43.58308],[-6.24882,43.6075],[-6.12293,43.57901],[-5.85204,43.6799],[-5.60363,43.57087],[-5.28553,43.56191],[-5.17875,43.49916],[-4.90899,43.48367],[-4.61562,43.4192],[-4.18399,43.42492],[-3.80295,43.51954],[-3.74,43.48693],[-3.56128,43.54236],[-3.1083,43.38163],[-2.93857,43.46246],[-2.74524,43.47551],[-2.30462,43.31706],[-1.9854,43.3563],[-1.85528,43.39725],[-1.7698,43.39644],[-1.77005,43.37605],[-1.71005,43.37569],[-1.71135,43.33125],[-1.72259,43.31318],[-1.68904,43.31291],[-1.68811,43.33413],[-1.64467,43.33372],[-1.64498,43.31332],[-1.60299,43.31295],[-1.60344,43.29266],[-1.56359,43.29212],[-1.56305,43.31338],[-1.47799,43.31284],[-1.36677,43.27614],[-1.35688,43.23815],[-1.37037,43.1713],[-1.44231,43.08336],[-1.41983,43.06036],[-1.37307,43.05117],[-1.36407,43.11159],[-1.30203,43.13522],[-1.23549,43.13325],[-1.27955,43.07744],[-1.19232,43.06496],[-1.00619,43.00778],[-0.94234,42.9749],[-0.7562,42.98213],[-0.71484,42.96108],[-0.69685,42.90314],[-0.55118,42.82207],[-0.50442,42.84845],[-0.42889,42.82009],[-0.31648,42.86558],[-0.14563,42.81086],[-0.03143,42.71249],[0.18618,42.7541],[0.30218,42.71777],[0.36422,42.74287],[0.44875,42.71447],[0.62769,42.7224],[0.64118,42.85767],[0.71492,42.88272],[0.9676,42.81811],[1.10878,42.79898],[1.17532,42.73429],[1.36326,42.74155],[1.41137,42.70939],[1.48061,42.71034],[1.4813,42.50107],[1.64436,42.50203],[1.64328,42.54245],[1.73041,42.54342],[1.73164,42.50118],[2.06386,42.50164],[2.06456,42.45902],[2.39693,42.45994],[2.39768,42.41784],[2.48048,42.41797],[2.48098,42.37594],[2.64479,42.37626],[2.64448,42.45924],[2.81133,42.45961],[2.81126,42.50104],[3.06388,42.50085],[3.06388,42.45915],[3.23078,42.45934],[3.23049,42.37644],[3.31415,42.37604],[3.31412,42.33399],[3.39785,42.33404],[3.39739,42.29009],[3.31389,42.29084],[3.31397,42.20702],[3.14759,42.2073],[3.14759,42.12606],[3.23055,42.126],[3.24668,41.95294],[3.19452,41.85589],[3.06054,41.76474],[2.78358,41.63718],[2.26293,41.42716],[2.16492,41.29893],[1.86008,41.22322],[1.3763,41.11627],[1.17937,41.04646],[1.08585,41.04849],[0.75854,40.81956],[0.9114,40.73376],[0.87813,40.67514],[0.66502,40.53587],[0.55801,40.55022],[0.43392,40.37576],[0.26756,40.19192],[0.16415,40.06472],[0.07513,40.01447],[0.01039,39.89522],[-0.09392,39.81169],[-0.18474,39.63117],[-0.29085,39.50363],[-0.28636,39.33343],[-0.18564,39.17746],[-0.21352,39.15585],[-0.11101,38.97222],[0.00949,38.88268],[0.12189,38.87218],[0.23429,38.79864],[0.25587,38.72642],[0.09581,38.61338],[-0.0022,38.60706],[-0.05705,38.52691],[-0.27197,38.47624],[-0.37987,38.39312],[-0.38347,38.33813],[-0.45091,38.33108],[-0.50487,38.28309],[-0.48238,38.19481],[-0.42933,38.16583],[-0.45451,38.14886],[-0.584,38.17219],[-0.61367,38.11986],[-0.63705,37.96122],[-0.68111,37.94562],[-0.73237,37.88107],[-0.72158,37.78306],[-0.68831,37.734],[-0.66415,37.62315],[-0.71939,37.58784],[-0.91963,37.53758],[-1.11071,37.51641],[-1.33832,37.52867],[-1.44089,37.39037],[-1.6767,37.27652],[-1.85408,36.91229],[-2.06835,36.69291],[-2.21588,36.66192],[-2.37219,36.78018],[-2.68129,36.65911],[-2.92015,36.66756],[-3.09402,36.71263],[-3.46108,36.65488],[-3.72804,36.69291],[-4.37435,36.66333],[-4.65712,36.44042],[-4.9188,36.45313],[-5.16995,36.35135],[-5.28411,36.19702],[-5.26809,36.12418],[-5.35248,36.12247],[-5.35161,36.04014],[-5.43658,36.03889],[-5.43532,36.00344],[-5.68886,36.00365],[-5.68996,36.04053],[-5.85506,36.03856],[-5.85668,36.12421],[-5.93848,36.12215],[-5.94003,36.16556],[-5.99834,36.1645],[-6.03573,36.1781],[-6.07752,36.22241],[-6.15061,36.28646],[-6.23154,36.37701],[-6.33585,36.53106],[-6.32146,36.58163],[-6.40419,36.6235],[-6.47433,36.74897],[-6.41588,36.79939],[-6.49052,36.91738],[-6.62989,37.0194],[-6.87448,37.10838],[-7.04264,37.18507],[-7.26474,37.18435],[-7.37535,37.15354],[-7.40832,37.16822],[-7.42029,37.21183],[-7.42492,37.23505],[-7.43805,37.2452],[-7.44597,37.33261],[-7.4481,37.39094],[-7.46963,37.40758],[-7.4647,37.45305],[-7.50197,37.51641],[-7.51916,37.52292],[-7.52196,37.57237],[-7.45013,37.66958],[-7.4249,37.75992],[-7.31666,37.83997],[-7.26833,37.98895],[-7.15368,38.01552],[-7.11771,38.05536],[-7.0143,38.02438],[-6.99632,38.10756],[-6.96147,38.20125],[-7.08062,38.15708],[-7.34027,38.44024],[-7.26383,38.73807],[-7.04352,38.87297],[-7.06151,38.90796],[-6.96934,39.01983],[-7.00081,39.08879],[-7.15368,39.09577],[-7.15255,39.16029],[-7.24472,39.19689],[-7.25596,39.28133],[-7.33689,39.35351],[-7.3279,39.45599],[-7.51449,39.58865],[-7.55271,39.67954],[-7.05027,39.67522],[-6.99519,39.81954],[-6.92213,39.87909],[-6.88616,40.02299],[-7.04128,40.13479],[-7.01767,40.26615],[-6.8086,40.34501],[-6.86818,40.44516],[-6.85356,40.60664],[-6.83783,40.87576],[-6.9536,41.03704],[-6.80186,41.03959],[-6.76814,41.13871],[-6.64112,41.26556],[-6.56244,41.26303],[-6.21737,41.5791],[-6.31628,41.64465],[-6.51523,41.64129],[-6.58717,41.68832],[-6.54783,41.85597],[-6.62988,41.91121],[-7.13345,41.94048],[-7.16829,41.87188],[-7.42569,41.78477],[-7.95398,41.84593],[-8.13045,41.78058],[-8.25185,41.90786],[-8.12933,42.03488],[-8.24848,42.1008],[-8.36762,42.05575],[-8.60704,42.03405],[-8.89106,41.82289]]],terms_text:"PNOA",best:true},{id:"poco_das_trincheiras",name:"Poço das Trincheiras AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Poco%20das%20Trincheiras&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.23942,-9.35157],[-37.23947,-9.34387],[-37.23942,-9.33792],[-37.23954,-9.33022],[-37.23973,-9.32791],[-37.23974,-9.3228],[-37.23964,-9.32085],[-37.23971,-9.31864],[-37.2398,-9.31706],[-37.23982,-9.31561],[-37.24053,-9.30933],[-37.24051,-9.30004],[-37.24008,-9.29687],[-37.23998,-9.29546],[-37.23992,-9.29319],[-37.23989,-9.28978],[-37.23995,-9.28818],[-37.24008,-9.28641],[-37.24036,-9.28212],[-37.24038,-9.27897],[-37.24051,-9.27557],[-37.24004,-9.26979],[-37.24018,-9.26721],[-37.24018,-9.26612],[-37.23995,-9.26455],[-37.23983,-9.26151],[-37.24333,-9.26136],[-37.24936,-9.26146],[-37.26445,-9.26161],[-37.28016,-9.26172],[-37.28294,-9.26171],[-37.29581,-9.26178],[-37.30685,-9.26178],[-37.31419,-9.26189],[-37.32437,-9.26192],[-37.33078,-9.26175],[-37.33057,-9.27275],[-37.33048,-9.28007],[-37.33054,-9.28117],[-37.33069,-9.28427],[-37.3307,-9.28535],[-37.33064,-9.28617],[-37.33071,-9.28717],[-37.33064,-9.28769],[-37.33062,-9.29027],[-37.33043,-9.29308],[-37.33038,-9.29655],[-37.33034,-9.30591],[-37.3304,-9.31203],[-37.33038,-9.32194],[-37.33041,-9.3342],[-37.33035,-9.34185],[-37.3303,-9.34783],[-37.33035,-9.35202],[-37.31509,-9.35194],[-37.30011,-9.3519],[-37.29531,-9.35183],[-37.28899,-9.35171],[-37.28497,-9.35182],[-37.27851,-9.35173],[-37.27431,-9.35181],[-37.27115,-9.3517],[-37.26351,-9.35168],[-37.26046,-9.35164],[-37.25402,-9.35177],[-37.24705,-9.35163],[-37.23942,-9.35157]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"e-mapa.net-buildings",name:"polska.e-mapa.net: Buildings",type:"wms",template:"http://integracja02.gugik.gov.pl/cgi-bin/KrajowaIntegracjaEwidencjiGruntow?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,19],polygon:[[[15.9751,54.37092],[16.31116,54.55618],[17.13919,54.78457],[18.34485,54.90227],[19.66137,54.47372],[20.28152,54.42135],[21.46639,54.34064],[22.77599,54.37698],[22.8626,54.42336],[23.29567,54.26786],[23.53472,54.09553],[23.52086,53.97752],[23.71834,53.46296],[23.92968,53.18567],[23.92968,52.68873],[23.7322,52.60675],[23.5659,52.58781],[23.20905,52.33026],[23.19519,52.23701],[23.50354,52.18606],[23.69062,52.00301],[23.59708,51.7399],[23.66291,51.38886],[23.9366,50.98278],[24.16873,50.86048],[24.01975,50.80358],[24.10983,50.66105],[24.05786,50.41884],[23.61787,50.30834],[22.68244,49.51635],[22.73788,49.20949],[22.90417,49.07804],[22.8626,48.99401],[22.60969,49.03718],[22.07615,49.20044],[21.84749,49.37219],[21.37631,49.44883],[21.10262,49.37219],[20.91207,49.3022],[20.6453,49.39023],[20.18451,49.33156],[20.11869,49.20044],[19.942,49.13021],[19.76531,49.21176],[19.74798,49.39925],[19.60247,49.41503],[19.50893,49.58154],[19.42925,49.59052],[19.23177,49.41503],[18.99618,49.38798],[18.93382,49.4916],[18.83681,49.49386],[18.80216,49.66234],[18.6428,49.70941],[18.52154,49.89947],[18.08154,50.01092],[17.88753,49.98865],[17.73855,50.06877],[17.6069,50.17096],[17.74548,50.21532],[17.71084,50.3017],[17.41635,50.26407],[16.94864,50.44533],[16.89321,50.40339],[17.00061,50.31055],[17.01793,50.22419],[16.81352,50.18649],[16.64029,50.09767],[16.43242,50.28621],[16.19683,50.42767],[16.42203,50.58852],[16.33888,50.66324],[16.22802,50.63688],[16.05479,50.61271],[15.57322,50.76415],[15.26834,50.89764],[15.24409,50.9806],[15.02929,51.0133],[15.00157,50.85829],[14.81102,50.87359],[14.95653,51.07212],[15.01889,51.29146],[14.93921,51.46015],[14.72094,51.55718],[14.75212,51.62606],[14.59968,51.84276],[14.70362,52.07334],[14.55811,52.24974],[14.51654,52.42544],[14.60315,52.58781],[14.11465,52.82083],[14.15276,52.9734],[14.35024,53.07342],[14.42299,53.26656],[14.1978,53.87348],[14.22205,53.99585],[15.9751,54.37092]]],terms_url:"https://polska.e-mapa.net/",terms_text:"polska.e-mapa.net - Geoportal otwartych danych przestrzennych",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/polskae-mapanetBuildings.png"},{id:"debicki-buildings",name:"Powiat dębicki: Buildings",type:"wms",template:"https://debica.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki,adresy,EBU,EBT,S&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[21.53768,50.01085],[21.51944,50.05423],[21.58099,50.1233],[21.48804,50.18059],[21.13725,50.14835],[21.13939,50.12721],[21.18058,50.12101],[21.14315,50.05965],[21.15356,49.92854],[21.27892,49.92554],[21.22448,49.8861],[21.22362,49.84258],[21.35177,49.8349],[21.36368,49.86838],[21.41585,49.82003],[21.47943,49.8398],[21.52679,49.88911],[21.47689,50.00135],[21.53768,50.01085]]],terms_text:"Powiat dębicki",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"lancucki-buildings",name:"Powiat łańcucki: Buildings",type:"wms",template:"https://lancut.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=EBT,budynki,adresy&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.17224,50.10121],[22.12574,50.1079],[22.0823,50.17206],[22.13591,50.1867],[22.173,50.18117],[22.18418,50.22914],[22.235,50.24718],[22.3856,50.16031],[22.40346,50.13331],[22.45275,50.12745],[22.45275,50.10676],[22.41768,50.08997],[22.38364,50.08915],[22.38542,50.05393],[22.35315,50.05067],[22.3562,50.00627],[22.31478,49.99451],[22.32139,49.94614],[22.29979,49.92455],[22.24161,49.92847],[22.20901,49.93728],[22.22382,49.96085],[22.16683,50.00412],[22.1387,50.00251],[22.12015,50.04626],[22.17224,50.10121]]],terms_text:"Powiat łańcucki",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"lubaczowski-buildings",name:"Powiat lubaczowski: Buildings",type:"wms",template:"https://lubaczow.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=S,EBT,adresy,budynki_ewid&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[23.29224,50.09693],[23.55763,50.25704],[23.51394,50.26643],[23.522,50.29892],[23.40991,50.3083],[23.44482,50.35653],[23.38072,50.3699],[23.38829,50.4058],[23.35821,50.41105],[23.2527,50.36601],[23.19379,50.40529],[23.01962,50.2928],[22.84161,50.30574],[22.83572,50.27037],[22.82426,50.26923],[22.79651,50.20933],[22.86603,50.18949],[22.87414,50.13786],[22.93233,50.1678],[22.88954,50.11501],[22.95351,50.07178],[23.05556,50.04967],[22.99884,49.99028],[23.14951,49.97563],[23.29224,50.09693]]],terms_text:"Powiat lubaczowski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"poznanski-buildings",name:"Powiat poznański: Buildings",type:"wms",template:"http://wms.podgik.poznan.pl/cgi-bin/poznan?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[16.9585,52.46312],[17.03946,52.33605],[16.84291,52.36501],[16.78596,52.46566],[16.70022,52.53819],[16.6415,52.5288],[16.44898,52.36793],[16.47775,52.2696],[16.5659,52.26813],[16.58375,52.17007],[17.08099,52.14981],[17.37124,52.34522],[17.39853,52.44037],[17.35338,52.53949],[17.13689,52.57783],[17.13126,52.6419],[17.01608,52.68366],[16.9158,52.65079],[16.85814,52.58191],[16.7367,52.57459],[16.70022,52.53824],[16.78598,52.46567],[16.9585,52.46312]]],terms_text:"PODGIK Poznań",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatpoznaskiOrthophotomap(aerialimage).png"},{id:"sropczyce-buildings",name:"Powiat ropczycko-sędziszowski: Buildings",type:"wms",template:"https://spropczyce.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[21.60041,50.21025],[21.74199,50.16538],[21.792,50.17829],[21.81459,50.15264],[21.78741,50.10859],[21.82597,50.09149],[21.82552,50.02925],[21.78666,49.97585],[21.70632,49.96022],[21.683,49.92431],[21.60062,49.91793],[21.54249,49.8862],[21.5188,49.89119],[21.45315,49.99268],[21.50364,50.0198],[21.49298,50.07161],[21.55535,50.11909],[21.50429,50.16559],[21.59816,50.17866],[21.60041,50.21025]]],terms_text:"Powiat ropczycko-sędziszowski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"rzeszowski-buildings",name:"Powiat rzeszowski: Buildings",type:"wms",template:"https://powiatrzeszowski.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki,EBT,EBU&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.18219,50.17339],[22.09834,50.17176],[22.18016,50.09784],[22.13779,50.00695],[22.09444,50.00841],[22.02839,50.06668],[21.9354,50.06636],[21.98164,49.94977],[22.05278,50.0097],[22.1771,50.00555],[22.23319,49.96829],[22.31144,49.87008],[22.34961,49.72826],[21.99951,49.82808],[21.84961,49.95739],[21.7495,49.96981],[21.78503,50.14212],[21.93307,50.24748],[22.08291,50.26471],[21.98553,50.31545],[22.0901,50.37369],[22.19821,50.35265],[22.2536,50.2647],[22.18219,50.17339]]],terms_text:"Powiat rzeszowski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"rzeszowski-aerial",name:"Powiat rzeszowski: Orthophotomap (aerial image)",type:"wms",template:"https://powiatrzeszowski.geoportal2.pl/map/wms/wms.php?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.18219,50.17339],[22.09834,50.17176],[22.18016,50.09784],[22.13779,50.00695],[22.09444,50.00841],[22.02839,50.06668],[21.9354,50.06636],[21.98164,49.94977],[22.05278,50.0097],[22.1771,50.00555],[22.23319,49.96829],[22.31144,49.87008],[22.34961,49.72826],[21.99951,49.82808],[21.84961,49.95739],[21.7495,49.96981],[21.78503,50.14212],[21.93307,50.24748],[22.08291,50.26471],[21.98553,50.31545],[22.0901,50.37369],[22.19821,50.35265],[22.2536,50.2647],[22.18219,50.17339]]],terms_text:"Powiat rzeszowski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"stalowowolski-buildings",name:"Powiat stalowowolski: Buildings",type:"wms",template:"https://stalowawola.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=EBT,adresy,budynki,centroidy&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.017,50.35811],[22.09292,50.44916],[22.06785,50.51434],[22.09722,50.54302],[22.16347,50.52686],[22.23795,50.5503],[22.26768,50.60465],[22.22757,50.6653],[22.16235,50.66969],[22.20843,50.75403],[22.16239,50.80039],[22.0546,50.82234],[21.94394,50.77639],[21.86228,50.80439],[21.83413,50.75035],[21.87465,50.70066],[21.84046,50.65749],[21.97582,50.53164],[21.84797,50.47196],[21.88045,50.3913],[22.017,50.35811]]],terms_text:"Powiat stalowowolski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"poznan-buildings",name:"Poznań: Buildings",type:"wms",template:"http://wms2.geopoz.poznan.pl:8080/geoserver/sip/wms?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki_ewidencyjne_sql&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[16.72794,52.48838],[16.86925,52.48982],[16.86879,52.50779],[16.93948,52.50845],[16.93926,52.51743],[16.98639,52.51784],[16.98784,52.45494],[17.03491,52.45534],[17.0353,52.43736],[17.08235,52.43774],[17.0831,52.4018],[17.0596,52.40161],[17.06129,52.32075],[17.01438,52.32035],[17.01518,52.28441],[16.96829,52.28401],[16.96787,52.30198],[16.89752,52.30134],[16.89662,52.33728],[16.80273,52.33638],[16.80176,52.37232],[16.77828,52.3721],[16.77603,52.45294],[16.72897,52.45244],[16.72794,52.48838]]],terms_text:"Zarząd Geodezji i Katastru Miejskiego GEOPOZ"},{id:"poznan-ortofotomapa2014",name:"Poznań: Orthophotomap 2014 (aerial image)",type:"wms",template:"http://wms1.geopoz.poznan.pl:6080/arcgis/services/sip/ortofotomapa_2014/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa_2014_image&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[16.72794,52.48838],[16.86925,52.48982],[16.86879,52.50779],[16.93948,52.50845],[16.93926,52.51743],[16.98639,52.51784],[16.98784,52.45494],[17.03491,52.45534],[17.0353,52.43736],[17.08235,52.43774],[17.0831,52.4018],[17.0596,52.40161],[17.06129,52.32075],[17.01438,52.32035],[17.01518,52.28441],[16.96829,52.28401],[16.96787,52.30198],[16.89752,52.30134],[16.89662,52.33728],[16.80273,52.33638],[16.80176,52.37232],[16.77828,52.3721],[16.77603,52.45294],[16.72897,52.45244],[16.72794,52.48838]]],terms_text:"Zarząd Geodezji i Katastru Miejskiego GEOPOZ"},{id:"poznan-ortofotomapa2016",name:"Poznań: Orthophotomap 2016 (aerial image)",type:"wms",template:"http://wms1.geopoz.poznan.pl:6080/arcgis/services/sip/ortofotomapy/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa_2016_image&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[16.72794,52.48838],[16.86925,52.48982],[16.86879,52.50779],[16.93948,52.50845],[16.93926,52.51743],[16.98639,52.51784],[16.98784,52.45494],[17.03491,52.45534],[17.0353,52.43736],[17.08235,52.43774],[17.0831,52.4018],[17.0596,52.40161],[17.06129,52.32075],[17.01438,52.32035],[17.01518,52.28441],[16.96829,52.28401],[16.96787,52.30198],[16.89752,52.30134],[16.89662,52.33728],[16.80273,52.33638],[16.80176,52.37232],[16.77828,52.3721],[16.77603,52.45294],[16.72897,52.45244],[16.72794,52.48838]]],terms_text:"Zarząd Geodezji i Katastru Miejskiego GEOPOZ"},{id:"PrahaIPRlatestorthophoto",name:"Praha IPR latest orthophoto",type:"wms",template:"http://giswa1.mag.mepnet.cz/arcgis/services/MAP/letecke_snimky_posledni_snimkovani_cache/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[1,20],polygon:[[[14.81232,49.93089],[14.18755,49.87687],[14.12025,50.19882],[14.74502,50.25247],[14.81232,49.93089]]]},{id:"PrahaIPRlow-vegetationorthophoto",name:"Praha IPR low-vegetation orthophoto",type:"wms",template:"http://giswa1.mag.mepnet.cz/arcgis/services/MAP/mimovegetacni_snimkovani_cache/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[1,20],polygon:[[[14.30454,49.99538],[14.31604,49.94205],[14.35,49.94508],[14.35384,49.92726],[14.42385,49.93352],[14.42009,49.95097],[14.48865,49.95709],[14.48479,49.97501],[14.55386,49.98117],[14.55012,49.99852],[14.58455,50.00159],[14.5883,49.98424],[14.69168,49.99346],[14.67634,50.06453],[14.71279,50.06777],[14.70115,50.12158],[14.6647,50.11834],[14.661,50.13543],[14.62755,50.13246],[14.61965,50.16895],[14.58543,50.16591],[14.58163,50.18344],[14.40776,50.168],[14.41156,50.15045],[14.37765,50.14744],[14.3738,50.16524],[14.33893,50.16214],[14.34278,50.14434],[14.27368,50.1382],[14.27749,50.12058],[14.2088,50.11447],[14.21289,50.09557],[14.24656,50.09857],[14.25417,50.06336],[14.21987,50.0603],[14.2237,50.04259],[14.258,50.04565],[14.26953,49.99226],[14.30454,49.99538]]]},{id:"przemysl-buildings",name:"Przemyśl: Buildings",type:"wms",template:"http://przemysl.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=adresy,budynki&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.72268,49.76885],[22.73002,49.76787],[22.73097,49.77612],[22.72027,49.77662],[22.71787,49.78062],[22.73104,49.78553],[22.7244,49.79043],[22.73458,49.80441],[22.73167,49.81429],[22.7261,49.8165],[22.72762,49.82124],[22.74395,49.8187],[22.75952,49.80939],[22.79042,49.81462],[22.81169,49.80571],[22.79738,49.80146],[22.80384,49.79247],[22.83118,49.79664],[22.85752,49.78561],[22.84549,49.76746],[22.82485,49.77105],[22.82004,49.75674],[22.77358,49.74439],[22.73838,49.75895],[22.72205,49.74644],[22.71065,49.76288],[22.72268,49.76885]]],terms_text:"Miasto Przemyśl",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"przemysl-aerial",name:"Przemyśl: Ortophotomap (aerial image)",type:"wms",template:"http://przemysl.geoportal2.pl/map/wms/wms.php?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[22.72268,49.76885],[22.73002,49.76787],[22.73097,49.77612],[22.72027,49.77662],[22.71787,49.78062],[22.73104,49.78553],[22.7244,49.79043],[22.73458,49.80441],[22.73167,49.81429],[22.7261,49.8165],[22.72762,49.82124],[22.74395,49.8187],[22.75952,49.80939],[22.79042,49.81462],[22.81169,49.80571],[22.79738,49.80146],[22.80384,49.79247],[22.83118,49.79664],[22.85752,49.78561],[22.84549,49.76746],[22.82485,49.77105],[22.82004,49.75674],[22.77358,49.74439],[22.73838,49.75895],[22.72205,49.74644],[22.71065,49.76288],[22.72268,49.76885]]],terms_text:"Miasto Przemyśl",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"RABA-KGZ-3000",name:"RABA-KGZ: Slovenia built-up areas",type:"tms",template:"https://wms.openstreetmap.de/tms/RABA3000/{zoom}/{x}/{y}.png",zoomExtent:[8,19],polygon:[[[15.17101,45.41273],[15.06731,45.4781],[14.98353,45.48726],[14.93027,45.51869],[14.91295,45.46869],[14.81398,45.45019],[14.77755,45.49724],[14.71885,45.52386],[14.68383,45.51924],[14.68367,45.57107],[14.58902,45.61966],[14.59477,45.65727],[14.51653,45.5974],[14.49636,45.52968],[14.32388,45.46048],[14.28251,45.47949],[14.26083,45.47352],[14.2367,45.49569],[14.21022,45.45962],[14.1328,45.46542],[14.06694,45.47615],[14.01187,45.50769],[13.98752,45.49945],[14.00668,45.4739],[13.99154,45.44854],[13.91789,45.44329],[13.88867,45.416],[13.81063,45.42531],[13.7856,45.45577],[13.67553,45.43241],[13.38,45.5666],[13.63822,45.64153],[13.72158,45.60472],[13.83759,45.59226],[13.89962,45.63295],[13.82754,45.67917],[13.82429,45.70266],[13.78961,45.73525],[13.66355,45.79008],[13.62279,45.78613],[13.58835,45.80154],[13.56531,45.85522],[13.62633,45.93894],[13.62975,45.97662],[13.59233,45.97929],[13.57124,45.9591],[13.52998,45.95627],[13.46729,46.00147],[13.49765,46.03741],[13.4896,46.06574],[13.58839,46.11268],[13.63712,46.14524],[13.65358,46.17505],[13.57147,46.17434],[13.54859,46.19982],[13.48189,46.21479],[13.42003,46.19662],[13.40026,46.21037],[13.40304,46.23284],[13.36653,46.30266],[13.43369,46.33243],[13.43247,46.36779],[13.56263,46.40895],[13.59357,46.44846],[13.68393,46.44947],[13.71321,46.53296],[13.79725,46.5164],[13.91305,46.53108],[14.00849,46.49169],[14.09406,46.49538],[14.12664,46.4852],[14.16569,46.44341],[14.28242,46.45347],[14.3259,46.44111],[14.43178,46.4568],[14.45113,46.43239],[14.52618,46.43623],[14.56677,46.38549],[14.58993,46.44479],[14.65658,46.45447],[14.71191,46.50954],[14.80818,46.51778],[14.81442,46.55093],[14.86094,46.61239],[14.9102,46.61569],[14.95398,46.64257],[14.98376,46.61868],[15.02973,46.65796],[15.10645,46.66965],[15.23727,46.64973],[15.41364,46.66553],[15.46237,46.64732],[15.47411,46.6226],[15.53427,46.64346],[15.53636,46.6761],[15.59201,46.69952],[15.62405,46.69039],[15.65624,46.71643],[15.767,46.70899],[15.83801,46.73237],[15.91476,46.71958],[16.02919,46.67033],[16.02955,46.68778],[15.99495,46.71178],[15.97505,46.74967],[15.98671,46.84189],[16.0553,46.85049],[16.11022,46.87912],[16.15425,46.86525],[16.23302,46.88667],[16.29431,46.8824],[16.34649,46.85476],[16.36058,46.8278],[16.34711,46.79707],[16.32245,46.79068],[16.33977,46.7799],[16.33186,46.75896],[16.38893,46.70785],[16.4383,46.69655],[16.42822,46.65301],[16.40159,46.6439],[16.51477,46.57299],[16.54136,46.53627],[16.5416,46.50887],[16.611,46.48393],[16.61889,46.46203],[16.52219,46.45842],[16.47451,46.50108],[16.36776,46.53371],[16.2582,46.489],[16.28533,46.42441],[16.3168,46.40141],[16.30574,46.36921],[16.18689,46.36804],[16.14548,46.39515],[16.06959,46.38154],[16.08614,46.34087],[16.04058,46.32708],[16.01819,46.29964],[15.80777,46.25091],[15.79649,46.21296],[15.77128,46.19937],[15.67996,46.21707],[15.65737,46.20838],[15.65639,46.18456],[15.62037,46.16163],[15.61899,46.11595],[15.63483,46.09529],[15.71869,46.06873],[15.74241,46.04578],[15.71612,45.99489],[15.71645,45.9178],[15.69237,45.90013],[15.69375,45.87111],[15.71776,45.8416],[15.6441,45.81058],[15.57467,45.83999],[15.52333,45.81155],[15.49115,45.82041],[15.47514,45.78666],[15.40343,45.78216],[15.28683,45.73391],[15.27435,45.72408],[15.29763,45.70782],[15.36329,45.72191],[15.41517,45.65443],[15.39705,45.62929],[15.31501,45.62356],[15.31503,45.60696],[15.29266,45.60163],[15.30852,45.58653],[15.31145,45.5423],[15.39496,45.48325],[15.34824,45.44665],[15.27515,45.45599],[15.22848,45.41683],[15.17101,45.41273]]],terms_url:"https://wiki.openstreetmap.org/wiki/Slovenia_Landcover_Import_-_RABA-KGZ",terms_text:"Copyright ©2019 Ministrstvo za kmetijstvo, gozdarstvo in prehrano (mkgp.gov.si). Some rights reserved.",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/si/RABA-KGZSloveniafarmlanduse.png"},{id:"RABA-KGZ",name:"RABA-KGZ: Slovenia farmland use",type:"tms",template:"https://wms.openstreetmap.de/tms/RABA/{zoom}/{x}/{y}.png",zoomExtent:[8,19],polygon:[[[15.17101,45.41273],[15.06731,45.4781],[14.98353,45.48726],[14.93027,45.51869],[14.91295,45.46869],[14.81398,45.45019],[14.77755,45.49724],[14.71885,45.52386],[14.68383,45.51924],[14.68367,45.57107],[14.58902,45.61966],[14.59477,45.65727],[14.51653,45.5974],[14.49636,45.52968],[14.32388,45.46048],[14.28251,45.47949],[14.26083,45.47352],[14.2367,45.49569],[14.21022,45.45962],[14.1328,45.46542],[14.06694,45.47615],[14.01187,45.50769],[13.98752,45.49945],[14.00668,45.4739],[13.99154,45.44854],[13.91789,45.44329],[13.88867,45.416],[13.81063,45.42531],[13.7856,45.45577],[13.67553,45.43241],[13.38,45.5666],[13.63822,45.64153],[13.72158,45.60472],[13.83759,45.59226],[13.89962,45.63295],[13.82754,45.67917],[13.82429,45.70266],[13.78961,45.73525],[13.66355,45.79008],[13.62279,45.78613],[13.58835,45.80154],[13.56531,45.85522],[13.62633,45.93894],[13.62975,45.97662],[13.59233,45.97929],[13.57124,45.9591],[13.52998,45.95627],[13.46729,46.00147],[13.49765,46.03741],[13.4896,46.06574],[13.58839,46.11268],[13.63712,46.14524],[13.65358,46.17505],[13.57147,46.17434],[13.54859,46.19982],[13.48189,46.21479],[13.42003,46.19662],[13.40026,46.21037],[13.40304,46.23284],[13.36653,46.30266],[13.43369,46.33243],[13.43247,46.36779],[13.56263,46.40895],[13.59357,46.44846],[13.68393,46.44947],[13.71321,46.53296],[13.79725,46.5164],[13.91305,46.53108],[14.00849,46.49169],[14.09406,46.49538],[14.12664,46.4852],[14.16569,46.44341],[14.28242,46.45347],[14.3259,46.44111],[14.43178,46.4568],[14.45113,46.43239],[14.52618,46.43623],[14.56677,46.38549],[14.58993,46.44479],[14.65658,46.45447],[14.71191,46.50954],[14.80818,46.51778],[14.81442,46.55093],[14.86094,46.61239],[14.9102,46.61569],[14.95398,46.64257],[14.98376,46.61868],[15.02973,46.65796],[15.10645,46.66965],[15.23727,46.64973],[15.41364,46.66553],[15.46237,46.64732],[15.47411,46.6226],[15.53427,46.64346],[15.53636,46.6761],[15.59201,46.69952],[15.62405,46.69039],[15.65624,46.71643],[15.767,46.70899],[15.83801,46.73237],[15.91476,46.71958],[16.02919,46.67033],[16.02955,46.68778],[15.99495,46.71178],[15.97505,46.74967],[15.98671,46.84189],[16.0553,46.85049],[16.11022,46.87912],[16.15425,46.86525],[16.23302,46.88667],[16.29431,46.8824],[16.34649,46.85476],[16.36058,46.8278],[16.34711,46.79707],[16.32245,46.79068],[16.33977,46.7799],[16.33186,46.75896],[16.38893,46.70785],[16.4383,46.69655],[16.42822,46.65301],[16.40159,46.6439],[16.51477,46.57299],[16.54136,46.53627],[16.5416,46.50887],[16.611,46.48393],[16.61889,46.46203],[16.52219,46.45842],[16.47451,46.50108],[16.36776,46.53371],[16.2582,46.489],[16.28533,46.42441],[16.3168,46.40141],[16.30574,46.36921],[16.18689,46.36804],[16.14548,46.39515],[16.06959,46.38154],[16.08614,46.34087],[16.04058,46.32708],[16.01819,46.29964],[15.80777,46.25091],[15.79649,46.21296],[15.77128,46.19937],[15.67996,46.21707],[15.65737,46.20838],[15.65639,46.18456],[15.62037,46.16163],[15.61899,46.11595],[15.63483,46.09529],[15.71869,46.06873],[15.74241,46.04578],[15.71612,45.99489],[15.71645,45.9178],[15.69237,45.90013],[15.69375,45.87111],[15.71776,45.8416],[15.6441,45.81058],[15.57467,45.83999],[15.52333,45.81155],[15.49115,45.82041],[15.47514,45.78666],[15.40343,45.78216],[15.28683,45.73391],[15.27435,45.72408],[15.29763,45.70782],[15.36329,45.72191],[15.41517,45.65443],[15.39705,45.62929],[15.31501,45.62356],[15.31503,45.60696],[15.29266,45.60163],[15.30852,45.58653],[15.31145,45.5423],[15.39496,45.48325],[15.34824,45.44665],[15.27515,45.45599],[15.22848,45.41683],[15.17101,45.41273]]],terms_url:"https://wiki.openstreetmap.org/wiki/Slovenia_Landcover_Import_-_RABA-KGZ",terms_text:"Copyright ©2019 Ministrstvo za kmetijstvo, gozdarstvo in prehrano (mkgp.gov.si). Some rights reserved.",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/si/RABA-KGZSloveniafarmlanduse.png"},{id:"riksantikvaren-kulturminner",name:"Riksantikvaren Heritage Sites overlay",type:"wms",template:"https://kart.ra.no/arcgis/services/Distribusjon/Kulturminner/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=3,6&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[13,22],polygon:[[[-10.95725,71.60964],[-6.16765,71.62095],[-6.13756,70.30991],[-10.92717,70.29784],[-10.95725,71.60964]],[[16.81947,74.9482],[21.25771,74.94213],[21.23712,73.8918],[16.79889,73.89828],[16.81947,74.9482]],[[4.04288,79.93593],[20.65421,81.54417],[36.6503,80.40108],[26.76265,75.8129],[13.88667,75.79135],[4.04288,79.93593]],[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.riksantikvaren.no/Veiledning/Data-og-tjenester/Karttjenester",terms_text:"© Riksantikvaren",description:"Archeological and architectural monuments/sites and cultural environments protected by law (''enkeltminner'') from the Norwegian Directorate for Cultural Heritage",icon:"https://www.riksantikvaren.no/extension/riksantikvaren/design/internetsite/images/logo_na.png",overlay:true},{id:"rio2013",name:"Rio Mosaic 2013",type:"wms",template:"http://geo.rio.rj.gov.br/ArcGIS/services/Imagens/Mosaico_2013/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[-43.17709,-22.96971],[-43.14586,-22.96959],[-43.14605,-22.92719],[-43.15625,-22.92731],[-43.15647,-22.87557],[-43.17739,-22.87494],[-43.17742,-22.88553],[-43.19804,-22.88571],[-43.19804,-22.85429],[-43.21875,-22.85444],[-43.21901,-22.83365],[-43.22937,-22.83365],[-43.22934,-22.82371],[-43.19869,-22.82353],[-43.19856,-22.83413],[-43.18826,-22.83398],[-43.18804,-22.84448],[-43.16667,-22.84442],[-43.16683,-22.83404],[-43.15638,-22.83407],[-43.15654,-22.81336],[-43.10436,-22.81306],[-43.10446,-22.80288],[-43.09387,-22.80276],[-43.0941,-22.73998],[-43.13599,-22.73992],[-43.13569,-22.75067],[-43.12573,-22.75055],[-43.12556,-22.77118],[-43.14595,-22.77109],[-43.14612,-22.76055],[-43.17771,-22.76088],[-43.17758,-22.77115],[-43.18807,-22.7713],[-43.18807,-22.78166],[-43.25067,-22.78163],[-43.25057,-22.79198],[-43.28054,-22.79282],[-43.30343,-22.79312],[-43.33353,-22.79297],[-43.33347,-22.80258],[-43.38574,-22.8024],[-43.38542,-22.81255],[-43.41691,-22.81285],[-43.41675,-22.82341],[-43.42717,-22.82335],[-43.4274,-22.83374],[-43.45844,-22.83362],[-43.45864,-22.81276],[-43.48984,-22.813],[-43.48994,-22.7965],[-43.50208,-22.79746],[-43.51543,-22.79737],[-43.52078,-22.79591],[-43.54169,-22.79603],[-43.54179,-22.80234],[-43.54653,-22.80246],[-43.54666,-22.81189],[-43.55251,-22.81279],[-43.56991,-22.81294],[-43.56998,-22.8197],[-43.57361,-22.82326],[-43.58348,-22.82329],[-43.58352,-22.83347],[-43.59391,-22.83374],[-43.59394,-22.85468],[-43.66099,-22.85459],[-43.66099,-22.85983],[-43.70852,-22.86019],[-43.70836,-22.86503],[-43.72206,-22.86488],[-43.72213,-22.86847],[-43.75015,-22.86859],[-43.75009,-22.8753],[-43.76038,-22.87527],[-43.75992,-22.8785],[-43.75976,-22.88457],[-43.76132,-22.88586],[-43.78129,-22.8858],[-43.78126,-22.89591],[-43.80213,-22.89621],[-43.80135,-22.91137],[-43.80119,-22.92758],[-43.79213,-22.92776],[-43.7922,-22.93822],[-43.78191,-22.93799],[-43.78184,-22.94869],[-43.75067,-22.94845],[-43.7506,-22.95909],[-43.72986,-22.95886],[-43.72966,-22.97984],[-43.70904,-22.97966],[-43.70891,-22.99033],[-43.69846,-22.99006],[-43.69836,-23.00065],[-43.66735,-23.00044],[-43.66726,-23.01117],[-43.63125,-23.00937],[-43.63131,-23.02079],[-43.63586,-23.02091],[-43.63602,-23.03164],[-43.67771,-23.03164],[-43.67765,-23.04233],[-43.67086,-23.0423],[-43.67109,-23.0631],[-43.64599,-23.06304],[-43.64605,-23.05276],[-43.60475,-23.05255],[-43.60452,-23.06307],[-43.58381,-23.06289],[-43.58368,-23.08404],[-43.54186,-23.08383],[-43.54195,-23.06319],[-43.52147,-23.06301],[-43.5213,-23.07352],[-43.50043,-23.07337],[-43.50043,-23.04218],[-43.45877,-23.04221],[-43.4587,-23.03194],[-43.43782,-23.03182],[-43.43776,-23.02154],[-43.3235,-23.02121],[-43.3233,-23.04212],[-43.31291,-23.04195],[-43.31275,-23.05267],[-43.30239,-23.05258],[-43.30236,-23.04227],[-43.29194,-23.04215],[-43.29197,-23.03194],[-43.27109,-23.03182],[-43.27119,-23.01093],[-43.26061,-23.01087],[-43.26067,-23.00059],[-43.25057,-23.00047],[-43.25054,-23.01126],[-43.23989,-23.01102],[-43.23986,-23.00062],[-43.21908,-23.0005],[-43.21904,-22.99021],[-43.20901,-22.99009],[-43.20862,-23.08389],[-43.18768,-23.08377],[-43.18761,-23.07334],[-43.13582,-23.07337],[-43.13589,-23.05249],[-43.17732,-23.05255],[-43.17709,-22.96971]]],terms_url:"https://pgeo3.rio.rj.gov.br/arcgis/rest/services/Imagens/Mosaico_2013_UTM/MapServer",terms_text:"Instituto Pereira Passos - Prefeitura da Cidade do Rio de Janeiro."},{id:"rio2015",name:"Rio Mosaic 2015",type:"wms",template:"https://pgeo3.rio.rj.gov.br/arcgis/services/Imagens/Mosaico_2015_UTM/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-42.30363,-22.43698],[-44.10842,-22.06579],[-44.5313,-23.7863],[-42.70469,-24.16178],[-42.30363,-22.43698]]],terms_url:"https://pgeo3.rio.rj.gov.br/arcgis/rest/services/Imagens/Mosaico_2015_UTM/MapServer",terms_text:"Instituto Pereira Passos - Prefeitura da Cidade do Rio de Janeiro."},{id:"route500",name:"Route 500",type:"tms",template:"https://{switch:a,b,c}.tile.openstreetmap.fr/route500/{zoom}/{x}/{y}.png",zoomExtent:[12,20],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]]],terms_url:"https://wiki.openstreetmap.org/wiki/FR:Servers/tile.openstreetmap.fr#Route500.E2.84.A2.C2.A9.C2.AE",terms_text:"Tiles © cquest@Openstreetmap France, data © IGN, LO/OL",description:"Routes du réseau classé (autoroutes, nationales, départementales)",overlay:true},{id:"Ruda_Slaska-aerial_image",name:"Ruda Śląska: Orthophotomap (aerial image)",type:"wms",template:"https://rudaslaska.geoportal2.pl/map/wmsorto/wms.php?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[18.84294,50.32508],[18.84008,50.33091],[18.85132,50.33437],[18.86262,50.3305],[18.88693,50.333],[18.89493,50.3319],[18.90045,50.32562],[18.89713,50.31146],[18.89312,50.31149],[18.89114,50.30778],[18.8972,50.2999],[18.89073,50.29586],[18.90211,50.29204],[18.90706,50.28637],[18.90853,50.27823],[18.93583,50.27379],[18.94106,50.25859],[18.93848,50.25317],[18.95086,50.24267],[18.96531,50.24084],[18.94611,50.22907],[18.89932,50.22516],[18.90251,50.21749],[18.89075,50.21557],[18.89292,50.20913],[18.86474,50.20512],[18.85673,50.22078],[18.85258,50.22331],[18.84619,50.21761],[18.83341,50.21715],[18.83533,50.22307],[18.83051,50.23099],[18.82411,50.23055],[18.81641,50.23709],[18.81619,50.24125],[18.80635,50.24596],[18.80344,50.24293],[18.78831,50.24456],[18.79552,50.2768],[18.81681,50.27732],[18.81919,50.28794],[18.83893,50.29795],[18.83849,50.3004],[18.82699,50.30342],[18.82691,50.32073],[18.83007,50.32371],[18.84294,50.32508]]],terms_text:"Urząd Miasta Ruda Śląska"},{id:"Rzeszow-buildings",name:"Rzeszów: Buildings",type:"wms",template:"http://wms.erzeszow.pl/?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=komunikacja,budynki,adresy&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.09538,50.08157],[22.0947,50.05584],[22.08892,50.05589],[22.08874,50.03671],[22.09505,50.03682],[22.09435,49.98723],[22.0609,49.98754],[22.0605,49.96525],[22.04757,49.96509],[22.04724,49.95792],[22.03139,49.95845],[22.0312,49.9574],[22.0014,49.95833],[22.00019,49.9375],[22.0014,49.93746],[22.00029,49.92047],[21.96799,49.92088],[21.969,49.93683],[21.95393,49.93706],[21.95441,49.94373],[21.94192,49.94378],[21.94253,49.96646],[21.93676,49.9665],[21.93776,49.97828],[21.92898,49.97858],[21.92951,49.98858],[21.91606,49.9888],[21.9165,50.01192],[21.90572,50.01195],[21.90653,50.04136],[21.87425,50.04183],[21.87546,50.06072],[21.90465,50.06083],[21.90672,50.0835],[22.09538,50.08157]]],terms_text:"Urząd Miasta Rzeszowa"},{id:"Rzeszow-aerial_image",name:"Rzeszów: Orthophotomap (aerial image)",type:"wms",template:"http://wms.erzeszow.pl/?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=rastry&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[22.09538,50.08157],[22.0947,50.05584],[22.08892,50.05589],[22.08874,50.03671],[22.09505,50.03682],[22.09435,49.98723],[22.0609,49.98754],[22.0605,49.96525],[22.04757,49.96509],[22.04724,49.95792],[22.03139,49.95845],[22.0312,49.9574],[22.0014,49.95833],[22.00019,49.9375],[22.0014,49.93746],[22.00029,49.92047],[21.96799,49.92088],[21.969,49.93683],[21.95393,49.93706],[21.95441,49.94373],[21.94192,49.94378],[21.94253,49.96646],[21.93676,49.9665],[21.93776,49.97828],[21.92898,49.97858],[21.92951,49.98858],[21.91606,49.9888],[21.9165,50.01192],[21.90572,50.01195],[21.90653,50.04136],[21.87425,50.04183],[21.87546,50.06072],[21.90465,50.06083],[21.90672,50.0835],[22.09538,50.08157]]],terms_text:"Urząd Miasta Rzeszowa"},{id:"SanJuanMetroAreaUSACEOrthophotos",name:"San Juan Metro Area: 2013 USACE Orthophotos",type:"tms",template:"http://imagery-pr-usace-2013.s3-website-us-east-1.amazonaws.com/tiles/{zoom}/{x}/{y}.jpg",endDate:"2013-03-15T00:00:00.000Z",startDate:"2013-03-13T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-66.15007,18.35002],[-66.03337,18.35002],[-66.03328,18.45634],[-66.05464,18.45636],[-66.05463,18.46542],[-66.08303,18.46544],[-66.08302,18.47451],[-66.13034,18.47455],[-66.13034,18.4796],[-66.13983,18.47961],[-66.13984,18.46557],[-66.14995,18.46558],[-66.15007,18.35002]]]},{id:"santana_do_ipanema",name:"Santana do Ipanema AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Santana%20do%20Ipanema&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.20224,-9.41356],[-37.20188,-9.37768],[-37.20208,-9.37455],[-37.20192,-9.36733],[-37.20169,-9.36045],[-37.20172,-9.35501],[-37.20195,-9.35101],[-37.20191,-9.34773],[-37.20175,-9.33835],[-37.2017,-9.33505],[-37.20171,-9.33301],[-37.20142,-9.32833],[-37.20121,-9.32469],[-37.20117,-9.32351],[-37.21425,-9.32346],[-37.21537,-9.3234],[-37.22078,-9.32328],[-37.23727,-9.32313],[-37.25181,-9.32293],[-37.2656,-9.32276],[-37.2803,-9.32259],[-37.29191,-9.32245],[-37.29205,-9.33522],[-37.29304,-9.4122],[-37.28357,-9.41235],[-37.27789,-9.4125],[-37.2716,-9.41249],[-37.26506,-9.41262],[-37.26165,-9.41274],[-37.25499,-9.41276],[-37.24991,-9.41296],[-37.24616,-9.41297],[-37.24108,-9.41303],[-37.23461,-9.41321],[-37.2284,-9.41325],[-37.22165,-9.41335],[-37.21686,-9.41346],[-37.21292,-9.41343],[-37.20224,-9.41356]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"Sao_miguel_dos_campos",name:"São Miguel dos Campos AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Sao_miguel_dos_campos&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.1415,-9.83171],[-36.05047,-9.83246],[-36.04959,-9.74246],[-36.14059,-9.74166],[-36.1415,-9.83171]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"GEOSN-DOP-2005",name:"Saxony historical aerial imagery 2005",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dop-2005/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=dop_2005&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2005-01-01T00:00:00.000Z",startDate:"2005-01-01T00:00:00.000Z",polygon:[[[13.86571,50.71509],[13.86683,50.73012],[13.90116,50.73012],[13.90184,50.74446],[13.91043,50.74446],[13.91043,50.77378],[13.95266,50.77486],[13.95197,50.78897],[13.99969,50.78941],[13.999,50.79831],[14.16715,50.79762],[14.1747,50.8462],[14.32851,50.84534],[14.33503,50.87643],[14.41674,50.876],[14.41674,50.95025],[14.33263,50.95133],[14.3364,50.99802],[14.58188,50.99608],[14.57742,50.94895],[14.54068,50.95003],[14.54446,50.89831],[14.60557,50.89116],[14.60454,50.83439],[14.6605,50.83352],[14.65673,50.79578],[14.83422,50.79469],[14.84727,50.89138],[14.9204,50.88943],[14.9331,50.99478],[14.99902,50.99673],[15.00142,51.09709],[15.04159,51.09709],[15.04228,51.35317],[14.99696,51.35317],[15.00314,51.49959],[14.91593,51.50301],[14.91662,51.55043],[14.74908,51.55129],[14.75114,51.60121],[14.41056,51.59993],[14.41125,51.55129],[14.07891,51.54915],[14.07479,51.49831],[13.99446,51.50002],[13.99446,51.39817],[13.53921,51.39989],[13.53852,51.42516],[13.50041,51.42505],[13.50179,51.44945],[13.41596,51.45094],[13.41699,51.50013],[13.3315,51.50055],[13.33047,51.44966],[13.24945,51.44987],[13.25116,51.60036],[13.16773,51.60057],[13.16739,51.65023],[13.08328,51.65066],[13.08362,51.69941],[12.66202,51.70027],[12.66065,51.64832],[12.4162,51.65045],[12.41345,51.60057],[12.16146,51.60015],[12.16146,51.50109],[12.07631,51.50023],[12.07974,51.39625],[12.16008,51.39753],[12.16214,51.34995],[12.07906,51.35253],[12.07906,51.24562],[12.16214,51.24691],[12.16352,51.0958],[12.24317,51.09709],[12.2454,51.04813],[12.49688,51.04883],[12.49894,50.89966],[12.33346,50.89923],[12.32797,50.84984],[12.20712,50.8494],[12.20506,50.69829],[12.24694,50.69744],[12.24694,50.65023],[11.91529,50.64849],[11.91598,50.59839],[11.83221,50.59817],[11.83255,50.39922],[11.91495,50.39922],[11.91461,50.34886],[11.99486,50.34659],[11.99838,50.29897],[12.16506,50.29912],[12.16549,50.24904],[12.23673,50.24871],[12.24823,50.24212],[12.24772,50.14904],[12.33149,50.14893],[12.33852,50.19335],[12.33286,50.23927],[12.3538,50.23619],[12.35998,50.24926],[12.41457,50.24948],[12.41594,50.29906],[12.49851,50.29874],[12.49834,50.34948],[12.58142,50.34915],[12.58125,50.39896],[12.69489,50.39962],[12.70622,50.39426],[12.71257,50.39875],[13.0813,50.39907],[13.0813,50.4992],[13.24816,50.49898],[13.24884,50.54809],[13.33124,50.54918],[13.33056,50.59911],[13.50908,50.59759],[13.50462,50.62656],[13.5393,50.62635],[13.53827,50.65481],[13.54633,50.65547],[13.54599,50.66983],[13.5544,50.67027],[13.55457,50.68908],[13.54736,50.68887],[13.54582,50.69969],[13.63886,50.69947],[13.63955,50.71425],[13.86571,50.71509]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=3f38c3f3-03db-4a2a-b6da-2704b9a1d5f0",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-DOP-2012_2014",name:"Saxony historical aerial imagery 2012-2014",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dop_2012_2014/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=dop_2012_2014_rgb&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[13.86571,50.71509],[13.86683,50.73012],[13.90116,50.73012],[13.90184,50.74446],[13.91043,50.74446],[13.91043,50.77378],[13.95266,50.77486],[13.95197,50.78897],[13.99969,50.78941],[13.999,50.79831],[14.16715,50.79762],[14.1747,50.8462],[14.32851,50.84534],[14.33503,50.87643],[14.41674,50.876],[14.41674,50.95025],[14.33263,50.95133],[14.3364,50.99802],[14.58188,50.99608],[14.57742,50.94895],[14.54068,50.95003],[14.54446,50.89831],[14.60557,50.89116],[14.60454,50.83439],[14.6605,50.83352],[14.65673,50.79578],[14.83422,50.79469],[14.84727,50.89138],[14.9204,50.88943],[14.9331,50.99478],[14.99902,50.99673],[15.00142,51.09709],[15.04159,51.09709],[15.04228,51.35317],[14.99696,51.35317],[15.00314,51.49959],[14.91593,51.50301],[14.91662,51.55043],[14.74908,51.55129],[14.75114,51.60121],[14.41056,51.59993],[14.41125,51.55129],[14.07891,51.54915],[14.07479,51.49831],[13.99446,51.50002],[13.99446,51.39817],[13.53921,51.39989],[13.53852,51.42516],[13.50041,51.42505],[13.50179,51.44945],[13.41596,51.45094],[13.41699,51.50013],[13.3315,51.50055],[13.33047,51.44966],[13.24945,51.44987],[13.25116,51.60036],[13.16773,51.60057],[13.16739,51.65023],[13.08328,51.65066],[13.08362,51.69941],[12.66202,51.70027],[12.66065,51.64832],[12.4162,51.65045],[12.41345,51.60057],[12.16146,51.60015],[12.16146,51.50109],[12.07631,51.50023],[12.07974,51.39625],[12.16008,51.39753],[12.16214,51.34995],[12.07906,51.35253],[12.07906,51.24562],[12.16214,51.24691],[12.16352,51.0958],[12.24317,51.09709],[12.2454,51.04813],[12.49688,51.04883],[12.49894,50.89966],[12.33346,50.89923],[12.32797,50.84984],[12.20712,50.8494],[12.20506,50.69829],[12.24694,50.69744],[12.24694,50.65023],[11.91529,50.64849],[11.91598,50.59839],[11.83221,50.59817],[11.83255,50.39922],[11.91495,50.39922],[11.91461,50.34886],[11.99486,50.34659],[11.99838,50.29897],[12.16506,50.29912],[12.16549,50.24904],[12.23673,50.24871],[12.24823,50.24212],[12.24772,50.14904],[12.33149,50.14893],[12.33852,50.19335],[12.33286,50.23927],[12.3538,50.23619],[12.35998,50.24926],[12.41457,50.24948],[12.41594,50.29906],[12.49851,50.29874],[12.49834,50.34948],[12.58142,50.34915],[12.58125,50.39896],[12.69489,50.39962],[12.70622,50.39426],[12.71257,50.39875],[13.0813,50.39907],[13.0813,50.4992],[13.24816,50.49898],[13.24884,50.54809],[13.33124,50.54918],[13.33056,50.59911],[13.50908,50.59759],[13.50462,50.62656],[13.5393,50.62635],[13.53827,50.65481],[13.54633,50.65547],[13.54599,50.66983],[13.5544,50.67027],[13.55457,50.68908],[13.54736,50.68887],[13.54582,50.69969],[13.63886,50.69947],[13.63955,50.71425],[13.86571,50.71509]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=8c276e3c-88af-462f-8128-6900bc7dd4f8",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-DOP-RGB",name:"Saxony latest aerial imagery",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dop-rgb/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=sn_dop_020&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[13.54901,50.69792],[13.84251,50.71126],[13.93239,50.74504],[14.04614,50.79389],[14.25257,50.85953],[14.40002,50.88966],[14.42671,50.9357],[14.35649,50.97197],[14.32559,50.99319],[14.27504,50.99054],[14.31577,51.04266],[14.41547,51.01263],[14.51939,51.0038],[14.5882,50.9817],[14.54467,50.91977],[14.57977,50.90649],[14.64718,50.92243],[14.64437,50.90915],[14.60505,50.85687],[14.7202,50.81785],[14.81008,50.81341],[14.85642,50.89055],[14.91259,50.94721],[14.99685,51.08679],[15.05303,51.24793],[15.05583,51.29274],[14.99264,51.34452],[14.98843,51.398],[14.97719,51.45754],[14.90979,51.49603],[14.73986,51.5371],[14.73986,51.59122],[14.70054,51.60605],[14.67948,51.5982],[14.68369,51.57813],[14.67386,51.55806],[14.61769,51.55718],[14.58399,51.59035],[14.51939,51.56941],[14.43513,51.5598],[14.327,51.52574],[14.13461,51.55544],[14.0672,51.49952],[14.02788,51.47854],[14.04333,51.45229],[13.99558,51.39274],[13.95767,51.40588],[13.88886,51.38836],[13.72455,51.37434],[13.55463,51.39274],[13.40437,51.45929],[13.35241,51.43916],[13.3159,51.44354],[13.28641,51.41815],[13.22602,51.40063],[13.21339,51.46104],[13.219,51.52661],[13.17406,51.5982],[13.00274,51.67751],[12.90584,51.65312],[12.90303,51.66619],[12.85388,51.69318],[12.76401,51.65922],[12.68817,51.67054],[12.64324,51.62959],[12.57723,51.63046],[12.42557,51.61041],[12.23037,51.57028],[12.17701,51.53011],[12.13909,51.46017],[12.16718,51.41727],[12.1742,51.33487],[12.13207,51.3182],[12.18684,51.21364],[12.15875,51.18812],[12.22054,51.09296],[12.49017,51.05414],[12.52106,50.99319],[12.60532,50.97286],[12.62639,50.91889],[12.50281,50.91092],[12.23739,50.81874],[12.21352,50.72993],[12.28654,50.665],[12.21773,50.6463],[12.13347,50.6276],[12.05343,50.56342],[12.01972,50.64719],[11.85963,50.54825],[11.87649,50.50808],[11.92704,50.5054],[11.93687,50.48664],[11.87087,50.44194],[11.93406,50.39989],[11.96917,50.33987],[12.12083,50.29773],[12.17279,50.3067],[12.18543,50.26094],[12.21212,50.25375],[12.25705,50.21603],[12.28233,50.15668],[12.35535,50.15848],[12.35535,50.22142],[12.41433,50.28158],[12.51123,50.34705],[12.53791,50.38735],[12.67835,50.40257],[12.71205,50.38646],[12.7289,50.39631],[12.75699,50.42584],[12.78648,50.43389],[12.81737,50.41779],[12.84686,50.43657],[12.94797,50.38735],[13.00976,50.41421],[13.04627,50.44999],[13.0561,50.48753],[13.21479,50.49289],[13.27517,50.56609],[13.34118,50.56877],[13.39173,50.61334],[13.47739,50.58571],[13.54761,50.63473],[13.56867,50.67212],[13.54901,50.69792]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=cd01c334-7e32-482f-bd43-af286707178a",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-DOP-CIR",name:"Saxony latest aerial imagery infrared",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dop-cir/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=sn_dop_020_cir&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[13.54901,50.69792],[13.84251,50.71126],[13.93239,50.74504],[14.04614,50.79389],[14.25257,50.85953],[14.40002,50.88966],[14.42671,50.9357],[14.35649,50.97197],[14.32559,50.99319],[14.27504,50.99054],[14.31577,51.04266],[14.41547,51.01263],[14.51939,51.0038],[14.5882,50.9817],[14.54467,50.91977],[14.57977,50.90649],[14.64718,50.92243],[14.64437,50.90915],[14.60505,50.85687],[14.7202,50.81785],[14.81008,50.81341],[14.85642,50.89055],[14.91259,50.94721],[14.99685,51.08679],[15.05303,51.24793],[15.05583,51.29274],[14.99264,51.34452],[14.98843,51.398],[14.97719,51.45754],[14.90979,51.49603],[14.73986,51.5371],[14.73986,51.59122],[14.70054,51.60605],[14.67948,51.5982],[14.68369,51.57813],[14.67386,51.55806],[14.61769,51.55718],[14.58399,51.59035],[14.51939,51.56941],[14.43513,51.5598],[14.327,51.52574],[14.13461,51.55544],[14.0672,51.49952],[14.02788,51.47854],[14.04333,51.45229],[13.99558,51.39274],[13.95767,51.40588],[13.88886,51.38836],[13.72455,51.37434],[13.55463,51.39274],[13.40437,51.45929],[13.35241,51.43916],[13.3159,51.44354],[13.28641,51.41815],[13.22602,51.40063],[13.21339,51.46104],[13.219,51.52661],[13.17406,51.5982],[13.00274,51.67751],[12.90584,51.65312],[12.90303,51.66619],[12.85388,51.69318],[12.76401,51.65922],[12.68817,51.67054],[12.64324,51.62959],[12.57723,51.63046],[12.42557,51.61041],[12.23037,51.57028],[12.17701,51.53011],[12.13909,51.46017],[12.16718,51.41727],[12.1742,51.33487],[12.13207,51.3182],[12.18684,51.21364],[12.15875,51.18812],[12.22054,51.09296],[12.49017,51.05414],[12.52106,50.99319],[12.60532,50.97286],[12.62639,50.91889],[12.50281,50.91092],[12.23739,50.81874],[12.21352,50.72993],[12.28654,50.665],[12.21773,50.6463],[12.13347,50.6276],[12.05343,50.56342],[12.01972,50.64719],[11.85963,50.54825],[11.87649,50.50808],[11.92704,50.5054],[11.93687,50.48664],[11.87087,50.44194],[11.93406,50.39989],[11.96917,50.33987],[12.12083,50.29773],[12.17279,50.3067],[12.18543,50.26094],[12.21212,50.25375],[12.25705,50.21603],[12.28233,50.15668],[12.35535,50.15848],[12.35535,50.22142],[12.41433,50.28158],[12.51123,50.34705],[12.53791,50.38735],[12.67835,50.40257],[12.71205,50.38646],[12.7289,50.39631],[12.75699,50.42584],[12.78648,50.43389],[12.81737,50.41779],[12.84686,50.43657],[12.94797,50.38735],[13.00976,50.41421],[13.04627,50.44999],[13.0561,50.48753],[13.21479,50.49289],[13.27517,50.56609],[13.34118,50.56877],[13.39173,50.61334],[13.47739,50.58571],[13.54761,50.63473],[13.56867,50.67212],[13.54901,50.69792]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=ba87bbed-4cb5-4539-a9f5-f863de752f52",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-DTK",name:"Saxony topographic map",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dtk-pg-color/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=sn_dtk_pg_color&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[13.54901,50.69792],[13.84251,50.71126],[13.93239,50.74504],[14.04614,50.79389],[14.25257,50.85953],[14.40002,50.88966],[14.42671,50.9357],[14.35649,50.97197],[14.32559,50.99319],[14.27504,50.99054],[14.31577,51.04266],[14.41547,51.01263],[14.51939,51.0038],[14.5882,50.9817],[14.54467,50.91977],[14.57977,50.90649],[14.64718,50.92243],[14.64437,50.90915],[14.60505,50.85687],[14.7202,50.81785],[14.81008,50.81341],[14.85642,50.89055],[14.91259,50.94721],[14.99685,51.08679],[15.05303,51.24793],[15.05583,51.29274],[14.99264,51.34452],[14.98843,51.398],[14.97719,51.45754],[14.90979,51.49603],[14.73986,51.5371],[14.73986,51.59122],[14.70054,51.60605],[14.67948,51.5982],[14.68369,51.57813],[14.67386,51.55806],[14.61769,51.55718],[14.58399,51.59035],[14.51939,51.56941],[14.43513,51.5598],[14.327,51.52574],[14.13461,51.55544],[14.0672,51.49952],[14.02788,51.47854],[14.04333,51.45229],[13.99558,51.39274],[13.95767,51.40588],[13.88886,51.38836],[13.72455,51.37434],[13.55463,51.39274],[13.40437,51.45929],[13.35241,51.43916],[13.3159,51.44354],[13.28641,51.41815],[13.22602,51.40063],[13.21339,51.46104],[13.219,51.52661],[13.17406,51.5982],[13.00274,51.67751],[12.90584,51.65312],[12.90303,51.66619],[12.85388,51.69318],[12.76401,51.65922],[12.68817,51.67054],[12.64324,51.62959],[12.57723,51.63046],[12.42557,51.61041],[12.23037,51.57028],[12.17701,51.53011],[12.13909,51.46017],[12.16718,51.41727],[12.1742,51.33487],[12.13207,51.3182],[12.18684,51.21364],[12.15875,51.18812],[12.22054,51.09296],[12.49017,51.05414],[12.52106,50.99319],[12.60532,50.97286],[12.62639,50.91889],[12.50281,50.91092],[12.23739,50.81874],[12.21352,50.72993],[12.28654,50.665],[12.21773,50.6463],[12.13347,50.6276],[12.05343,50.56342],[12.01972,50.64719],[11.85963,50.54825],[11.87649,50.50808],[11.92704,50.5054],[11.93687,50.48664],[11.87087,50.44194],[11.93406,50.39989],[11.96917,50.33987],[12.12083,50.29773],[12.17279,50.3067],[12.18543,50.26094],[12.21212,50.25375],[12.25705,50.21603],[12.28233,50.15668],[12.35535,50.15848],[12.35535,50.22142],[12.41433,50.28158],[12.51123,50.34705],[12.53791,50.38735],[12.67835,50.40257],[12.71205,50.38646],[12.7289,50.39631],[12.75699,50.42584],[12.78648,50.43389],[12.81737,50.41779],[12.84686,50.43657],[12.94797,50.38735],[13.00976,50.41421],[13.04627,50.44999],[13.0561,50.48753],[13.21479,50.49289],[13.27517,50.56609],[13.34118,50.56877],[13.39173,50.61334],[13.47739,50.58571],[13.54761,50.63473],[13.56867,50.67212],[13.54901,50.69792]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=d6d24c6d-94ea-447d-8a0c-40afdedeb5c6",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-WebAtlas",name:"Saxony WebAtlasSN",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_webatlas-sn/guest?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vegetation,Siedlung,Gewaesser,Verkehr,Administrative_Einheiten,Beschriftung&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[13.54901,50.69792],[13.84251,50.71126],[13.93239,50.74504],[14.04614,50.79389],[14.25257,50.85953],[14.40002,50.88966],[14.42671,50.9357],[14.35649,50.97197],[14.32559,50.99319],[14.27504,50.99054],[14.31577,51.04266],[14.41547,51.01263],[14.51939,51.0038],[14.5882,50.9817],[14.54467,50.91977],[14.57977,50.90649],[14.64718,50.92243],[14.64437,50.90915],[14.60505,50.85687],[14.7202,50.81785],[14.81008,50.81341],[14.85642,50.89055],[14.91259,50.94721],[14.99685,51.08679],[15.05303,51.24793],[15.05583,51.29274],[14.99264,51.34452],[14.98843,51.398],[14.97719,51.45754],[14.90979,51.49603],[14.73986,51.5371],[14.73986,51.59122],[14.70054,51.60605],[14.67948,51.5982],[14.68369,51.57813],[14.67386,51.55806],[14.61769,51.55718],[14.58399,51.59035],[14.51939,51.56941],[14.43513,51.5598],[14.327,51.52574],[14.13461,51.55544],[14.0672,51.49952],[14.02788,51.47854],[14.04333,51.45229],[13.99558,51.39274],[13.95767,51.40588],[13.88886,51.38836],[13.72455,51.37434],[13.55463,51.39274],[13.40437,51.45929],[13.35241,51.43916],[13.3159,51.44354],[13.28641,51.41815],[13.22602,51.40063],[13.21339,51.46104],[13.219,51.52661],[13.17406,51.5982],[13.00274,51.67751],[12.90584,51.65312],[12.90303,51.66619],[12.85388,51.69318],[12.76401,51.65922],[12.68817,51.67054],[12.64324,51.62959],[12.57723,51.63046],[12.42557,51.61041],[12.23037,51.57028],[12.17701,51.53011],[12.13909,51.46017],[12.16718,51.41727],[12.1742,51.33487],[12.13207,51.3182],[12.18684,51.21364],[12.15875,51.18812],[12.22054,51.09296],[12.49017,51.05414],[12.52106,50.99319],[12.60532,50.97286],[12.62639,50.91889],[12.50281,50.91092],[12.23739,50.81874],[12.21352,50.72993],[12.28654,50.665],[12.21773,50.6463],[12.13347,50.6276],[12.05343,50.56342],[12.01972,50.64719],[11.85963,50.54825],[11.87649,50.50808],[11.92704,50.5054],[11.93687,50.48664],[11.87087,50.44194],[11.93406,50.39989],[11.96917,50.33987],[12.12083,50.29773],[12.17279,50.3067],[12.18543,50.26094],[12.21212,50.25375],[12.25705,50.21603],[12.28233,50.15668],[12.35535,50.15848],[12.35535,50.22142],[12.41433,50.28158],[12.51123,50.34705],[12.53791,50.38735],[12.67835,50.40257],[12.71205,50.38646],[12.7289,50.39631],[12.75699,50.42584],[12.78648,50.43389],[12.81737,50.41779],[12.84686,50.43657],[12.94797,50.38735],[13.00976,50.41421],[13.04627,50.44999],[13.0561,50.48753],[13.21479,50.49289],[13.27517,50.56609],[13.34118,50.56877],[13.39173,50.61334],[13.47739,50.58571],[13.54761,50.63473],[13.56867,50.67212],[13.54901,50.69792]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=475a9197-620f-4dcb-b8aa-7f71b626443f",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"Geodatastyrelsen_Denmark",name:"SDFE aerial imagery",type:"tms",template:"https://osmtools.septima.dk/mapproxy/tiles/1.0.0/kortforsyningen_ortoforaar/EPSG3857/{zoom}/{x}/{y}.jpeg",zoomExtent:[0,21],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_url:"https://download.kortforsyningen.dk/content/vilkaar-og-betingelser",terms_text:"Geodatastyrelsen og Danske Kommuner",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"Geodatastyrelsen_Cadastral_Parcels_INSPIRE_View",name:"SDFE Cadastral Parcels INSPIRE View",type:"wms",template:"https://kortforsyningen.kms.dk/cp_inspire?login=OpenStreetMapDK2015&password=Gall4Peters&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=CP.CadastralParcel&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,20],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"Geodatastyrelsen_DTK_Kort25",name:"SDFE DTK Kort25",type:"wms",template:"https://kortforsyningen.kms.dk/topo25?FORMAT=image/png&VERSION=1.1.1&login=OpenStreetMapDK2015&password=Gall4Peters&SERVICE=WMS&REQUEST=GetMap&Layers=topo25_klassisk&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,19],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"Geodatastyrelsen_Skaermkort",name:"SDFE Skærmkort",type:"wms",template:"https://kortforsyningen.kms.dk/topo_skaermkort?FORMAT=image/png&VERSION=1.1.1&login=OpenStreetMapDK2015&password=Gall4Peters&SERVICE=WMS&REQUEST=GetMap&Layers=dtk_skaermkort&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,19],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"SDFE_Overflade_Skyggekort_40cm",name:"SDFE Surface Shadow Map (40 cm)",type:"wms",template:"https://kortforsyningen.kms.dk/dhm?login=OpenStreetMapDK2015&password=Gall4Peters&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=dhm_overflade_skyggekort&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,20],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"SDFE_Terraen_Skyggekort_40cm",name:"SDFE Terrain Shadow Map (40 cm)",type:"wms",template:"https://kortforsyningen.kms.dk/dhm?login=OpenStreetMapDK2015&password=Gall4Peters&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=dhm_terraen_skyggekort&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,20],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"Sicily-ATA2007",name:"Sicily - Italy",type:"wms",template:"http://map.sitr.regione.sicilia.it/ArcGIS/services/WGS84_F33/Ortofoto_ATA20072008_f33/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&STYLES=default&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[15.71165,38.25894],[15.23718,38.81938],[14.27124,38.55246],[13.15063,38.75408],[11.96411,37.97451],[12.52441,37.54022],[11.87897,36.79609],[12.49695,35.47409],[12.68921,35.46962],[14.57336,36.66401],[15.29709,36.62875],[15.39854,37.42171],[15.71165,38.25894]]]},{id:"Siemianowice_Slaskie-buildings",name:"Siemianowice Śląskie: Buildings",type:"wms",template:"https://siemianowice.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&transparent=true&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki,drogi,adresy,ulice&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[19.03103,50.33933],[19.0316,50.35413],[19.0656,50.35373],[19.06529,50.34219],[19.06118,50.33749],[19.06069,50.31967],[19.05603,50.31975],[19.05562,50.30155],[19.06432,50.3015],[19.06366,50.27175],[19.04379,50.27179],[19.04375,50.27478],[19.0213,50.27505],[19.02156,50.28398],[19.01027,50.28856],[18.98791,50.28871],[18.98822,50.3022],[18.98143,50.30226],[18.98213,50.33977],[19.03103,50.33933]]],terms_text:"Urząd Miasta Siemianowice Śląskie"},{id:"Siemianowice_Slaskie-aerial_image",name:"Siemianowice Śląskie: Orthophotomap (aerial image)",type:"wms",template:"https://siemianowice.geoportal2.pl/map/wms/wms.php?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[19.03103,50.33933],[19.0316,50.35413],[19.0656,50.35373],[19.06529,50.34219],[19.06118,50.33749],[19.06069,50.31967],[19.05603,50.31975],[19.05562,50.30155],[19.06432,50.3015],[19.06366,50.27175],[19.04379,50.27179],[19.04375,50.27478],[19.0213,50.27505],[19.02156,50.28398],[19.01027,50.28856],[18.98791,50.28871],[18.98822,50.3022],[18.98143,50.30226],[18.98213,50.33977],[19.03103,50.33933]]],terms_text:"Urząd Miasta Siemianowice Śląskie"},{id:"sc2012",name:"SIG Santa Catarina OrtoRGB 2012",type:"wms",template:"http://sigsc.sc.gov.br/sigserver/SIGSC/wms?SERVICE=WMS&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OrtoRGB-Landsat-2012&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[-48.62488,-26.91624],[-48.62416,-26.83409],[-48.56163,-26.83412],[-48.56165,-26.74919],[-48.62675,-26.74918],[-48.62715,-26.73276],[-48.64126,-26.733],[-48.64174,-26.70912],[-48.62414,-26.70913],[-48.62418,-26.50079],[-48.57099,-26.50077],[-48.57155,-26.47415],[-48.55418,-26.47381],[-48.5545,-26.45736],[-48.56155,-26.45747],[-48.56161,-26.41746],[-48.4991,-26.41747],[-48.49909,-26.25081],[-48.43664,-26.25079],[-48.43661,-26.20752],[-48.4601,-26.20751],[-48.46195,-26.1242],[-48.56161,-26.12419],[-48.56163,-25.95753],[-48.62411,-25.95753],[-48.62411,-25.94507],[-48.68838,-25.94607],[-48.6884,-25.95752],[-49.25089,-25.95752],[-49.2509,-25.9992],[-49.31339,-25.9992],[-49.31338,-26.0825],[-49.37591,-26.0825],[-49.37591,-26.12419],[-49.50093,-26.12418],[-49.50092,-26.16586],[-49.68661,-26.16585],[-49.68661,-26.12417],[-49.74907,-26.08246],[-49.74908,-26.04084],[-49.8116,-26.04085],[-49.81159,-25.99918],[-49.93657,-25.99915],[-49.93661,-25.98244],[-50.00091,-25.98288],[-50.00094,-25.99915],[-50.31338,-25.99916],[-50.31342,-26.04083],[-50.37411,-26.04084],[-50.3741,-25.9992],[-50.49914,-25.99918],[-50.49911,-25.98414],[-50.62593,-25.98452],[-50.62595,-26.04084],[-50.6884,-26.04161],[-50.68845,-26.12416],[-50.75094,-26.12414],[-50.75095,-26.20752],[-51.12595,-26.20747],[-51.12595,-26.24913],[-51.18848,-26.24918],[-51.31344,-26.33245],[-51.31347,-26.62414],[-51.4366,-26.62415],[-51.43659,-26.56476],[-51.62409,-26.5641],[-51.62411,-26.5408],[-51.99907,-26.5408],[-52.06158,-26.49911],[-52.06158,-26.45747],[-52.12408,-26.45749],[-52.12406,-26.41579],[-52.37407,-26.4158],[-52.37409,-26.39133],[-52.56156,-26.3894],[-52.56158,-26.37415],[-52.62408,-26.37417],[-52.62409,-26.33247],[-53.12408,-26.33247],[-53.1241,-26.31707],[-53.1618,-26.3165],[-53.16136,-26.29082],[-53.18656,-26.29083],[-53.24907,-26.24911],[-53.24906,-26.23919],[-53.31159,-26.23824],[-53.3741,-26.22882],[-53.43845,-26.22777],[-53.43843,-26.24914],[-53.5616,-26.24916],[-53.56159,-26.23983],[-53.65501,-26.23814],[-53.65623,-26.29263],[-53.67011,-26.31684],[-53.68846,-26.33242],[-53.70322,-26.3741],[-53.70929,-26.38449],[-53.7098,-26.39568],[-53.70619,-26.40722],[-53.70721,-26.45927],[-53.71438,-26.46168],[-53.71476,-26.48118],[-53.73047,-26.49913],[-53.73146,-26.54081],[-53.75096,-26.5408],[-53.75095,-26.62417],[-53.7602,-26.62414],[-53.76125,-26.6675],[-53.75098,-26.66751],[-53.75096,-26.74298],[-53.72737,-26.7434],[-53.72133,-26.74905],[-53.72141,-26.75093],[-53.74571,-26.75943],[-53.74612,-26.77704],[-53.71948,-26.77755],[-53.72084,-26.83416],[-53.70047,-26.83414],[-53.70277,-26.93108],[-53.71168,-26.93091],[-53.71224,-26.95557],[-53.751,-26.95479],[-53.75092,-26.99915],[-53.76467,-26.99915],[-53.8037,-27.03751],[-53.80454,-27.07258],[-53.80809,-27.07249],[-53.80862,-27.09613],[-53.8269,-27.09577],[-53.82762,-27.12414],[-53.84644,-27.12413],[-53.84765,-27.17014],[-53.83506,-27.18932],[-53.83536,-27.20054],[-53.68847,-27.20284],[-53.68849,-27.22789],[-53.43654,-27.23246],[-53.43655,-27.16751],[-53.37598,-27.16751],[-53.37601,-27.23352],[-53.24905,-27.23564],[-53.24905,-27.20922],[-53.06344,-27.20918],[-53.06345,-27.2334],[-52.81348,-27.23685],[-52.81346,-27.27653],[-52.75096,-27.27732],[-52.75096,-27.29249],[-52.4385,-27.29252],[-52.43848,-27.32689],[-52.37603,-27.32753],[-52.37599,-27.3342],[-52.25098,-27.33418],[-52.25099,-27.34669],[-52.18655,-27.34728],[-52.18657,-27.33419],[-52.12598,-27.3342],[-52.12599,-27.36413],[-52.02979,-27.36489],[-52.03036,-27.42442],[-51.97534,-27.42479],[-51.97603,-27.50088],[-51.93845,-27.50085],[-51.93845,-27.54252],[-51.68846,-27.54247],[-51.68847,-27.55742],[-51.59903,-27.5579],[-51.59923,-27.59481],[-51.56351,-27.59498],[-51.56348,-27.62586],[-51.50088,-27.62586],[-51.50095,-27.66754],[-51.43937,-27.6675],[-51.43954,-27.70932],[-51.37597,-27.7095],[-51.37601,-27.75089],[-51.31349,-27.7509],[-51.31346,-27.79253],[-51.18847,-27.79251],[-51.18848,-27.87586],[-51.12598,-27.87586],[-51.12597,-27.91752],[-51.06348,-27.9175],[-51.06347,-27.95919],[-51.00095,-28.00086],[-50.9385,-28.00086],[-50.93849,-28.16755],[-50.81346,-28.16752],[-50.81345,-28.29253],[-50.75096,-28.29251],[-50.68845,-28.33418],[-50.68849,-28.41754],[-50.626,-28.41752],[-50.56352,-28.44094],[-50.43848,-28.44051],[-50.43847,-28.45917],[-50.37597,-28.45921],[-50.37598,-28.47554],[-50.18844,-28.47454],[-50.18849,-28.51143],[-50.12398,-28.51104],[-50.12402,-28.50086],[-49.87597,-28.50085],[-49.87601,-28.5142],[-49.81347,-28.51369],[-49.81347,-28.58255],[-49.83003,-28.58251],[-49.82951,-28.62597],[-49.8759,-28.66572],[-50.001,-28.74915],[-50.001,-29.04083],[-50.03319,-29.04081],[-50.03219,-29.14711],[-50.12602,-29.14774],[-50.12598,-29.16579],[-50.13613,-29.16581],[-50.1885,-29.19623],[-50.1885,-29.31905],[-50.1422,-29.31873],[-50.14208,-29.33422],[-50.126,-29.33418],[-50.12599,-29.36238],[-49.99906,-29.36153],[-49.99904,-29.24031],[-49.93848,-29.23986],[-49.93851,-29.25087],[-49.87601,-29.25087],[-49.876,-29.30098],[-49.82262,-29.30052],[-49.82227,-29.33419],[-49.81347,-29.33422],[-49.81354,-29.3411],[-49.68654,-29.33991],[-49.68651,-29.29255],[-49.62399,-29.29252],[-49.62398,-29.25085],[-49.56149,-29.25083],[-49.56145,-29.16749],[-49.49901,-29.16746],[-49.49902,-29.08419],[-49.4365,-29.08418],[-49.43651,-29.04251],[-49.37405,-29.04248],[-49.37402,-28.9592],[-49.31153,-28.95917],[-49.31152,-28.91749],[-49.24898,-28.9175],[-49.24897,-28.87582],[-49.18655,-28.87585],[-49.18653,-28.83414],[-49.12402,-28.83418],[-49.12401,-28.7925],[-49.06149,-28.79247],[-49.06146,-28.75084],[-48.99903,-28.75085],[-48.99903,-28.70919],[-48.93658,-28.70918],[-48.93658,-28.66752],[-48.87405,-28.66751],[-48.87404,-28.62585],[-48.74912,-28.62585],[-48.74912,-28.54254],[-48.68656,-28.54253],[-48.68658,-28.33417],[-48.62408,-28.33416],[-48.62406,-28.08418],[-48.5616,-28.08418],[-48.56159,-27.95919],[-48.49905,-27.95916],[-48.49904,-27.91581],[-48.56157,-27.9158],[-48.5616,-27.87584],[-48.49902,-27.87586],[-48.49902,-27.83422],[-48.43657,-27.83418],[-48.43661,-27.62583],[-48.37406,-27.62585],[-48.37405,-27.50086],[-48.31157,-27.50086],[-48.31153,-27.24913],[-48.43657,-27.24913],[-48.43654,-27.20916],[-48.37402,-27.2092],[-48.37405,-27.1658],[-48.43656,-27.1658],[-48.43656,-27.12415],[-48.49906,-27.12413],[-48.49907,-27.08667],[-48.50022,-27.08666],[-48.50031,-27.08247],[-48.5616,-27.08248],[-48.56159,-27.04252],[-48.49906,-27.04252],[-48.49906,-26.99913],[-48.56156,-26.99913],[-48.56157,-26.91579],[-48.62488,-26.91624]]],terms_url:"http://sigsc.sds.sc.gov.br/download/termo_sigsc.pdf",terms_text:"Sistema de Informações Geográficas - Governo de Santa Catarina"},{id:"SIGIP-2012",name:"SIGIP - Orthophoto 2012",type:"tms",template:"https://osmdata.asitvd.ch/tiles/sigip2012/{zoom}/{x}/{y}.png",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[6.71057,46.54396],[6.72968,46.54408],[6.72995,46.52605],[6.71085,46.52596],[6.71113,46.50796],[6.6922,46.50788],[6.6923,46.49883],[6.63531,46.49847],[6.63488,46.52547],[6.65381,46.52558],[6.65361,46.54358],[6.69163,46.54384],[6.69155,46.55284],[6.71047,46.55293],[6.71057,46.54396]]],terms_url:"https://www.sigip.ch/",terms_text:"SIGIP"},{id:"Singapore-Landlot",name:"Singapore Landlot",type:"wms",template:"https://mapservices.onemap.sg/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=singapore_landlot_wmts&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[103.564,1.189],[103.7453,1.12465],[104.1284,1.28255],[104.08035,1.3457],[104.1229,1.49123],[103.6615,1.49123],[103.564,1.189]]],terms_url:"https://www.onemap.sg/legal/opendatalicence.html",terms_text:"©OneMap Singapore ODL v1.0",icon:"https://osmlab.github.io/editor-layer-index/sources/asia/sg/OM2_logo.png"},{id:"Singapore-OneMap",name:"Singapore OneMap",type:"wms",template:"https://mapservices.onemap.sg/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=singapore_3414_wms&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[103.564,1.189],[103.7453,1.12465],[104.1284,1.28255],[104.08035,1.3457],[104.1229,1.49123],[103.6615,1.49123],[103.564,1.189]]],terms_url:"https://www.onemap.sg/legal/opendatalicence.html",terms_text:"©OneMap Singapore ODL v1.0",icon:"https://osmlab.github.io/editor-layer-index/sources/asia/sg/OM2_logo.png"},{id:"Slovakia-Historic-Maps",name:"Slovakia Historic Maps",type:"tms",template:"http://tms.freemap.sk/historicke/{zoom}/{x}/{y}.png",zoomExtent:[0,12],polygon:[[[16.81969,47.49272],[16.81969,49.50303],[22.83883,49.50303],[22.83883,47.49272],[16.81969,47.49272]]],icon:"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{id:"skoterleder",name:"Snowmobile map Sweden",type:"tms",template:"https://tiles.skoterleder.org/tiles/{zoom}/{x}/{y}.png",zoomExtent:[5,14],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[23.87328,65.21069],[30.14647,65.19226],[30.19042,67.62596],[29.43236,69.62651],[27.93822,70.14037],[20.73119,69.2756],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://skoterleder.org/",terms_text:"© Skoterleder.org",description:"Snowmobile trails",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8f/Sweden_road_sign_D9.svg/200px-Sweden_road_sign_D9.svg.png"},{id:"Soskut_Pusztazamor_Tarnok_Diosd_orto_2017",name:"Sóskút, Pusztazámor, Tárnok, Diósd ortophoto 2017",type:"tms",template:"http://adam.openstreetmap.hu/mapproxy/tiles/1.0.0/Soskut-Tarnok-Pusztazamor-Diosd/mercator/{zoom}/{x}/{y}.png",endDate:"2017-03-01T00:00:00.000Z",startDate:"2017-03-01T00:00:00.000Z",zoomExtent:[11,20],polygon:[[[18.79273,47.37079],[18.79194,47.37048],[18.79139,47.37063],[18.79011,47.37176],[18.78916,47.37345],[18.78722,47.37566],[18.78603,47.37765],[18.78498,47.37905],[18.7837,47.38032],[18.78267,47.38195],[18.7814,47.38368],[18.77934,47.38713],[18.77666,47.3894],[18.76472,47.3967],[18.7617,47.39966],[18.75631,47.40328],[18.75837,47.40653],[18.7588,47.40776],[18.762,47.41217],[18.76304,47.41315],[18.76593,47.41471],[18.77041,47.41766],[18.77247,47.41809],[18.77248,47.4203],[18.8086,47.44041],[18.81742,47.43539],[18.82092,47.43572],[18.82804,47.43755],[18.83021,47.43526],[18.83585,47.43754],[18.84049,47.43346],[18.84765,47.43572],[18.851,47.43281],[18.869,47.43961],[18.87361,47.43597],[18.87499,47.43342],[18.87386,47.43248],[18.87604,47.42797],[18.8605,47.423],[18.86621,47.41798],[18.87243,47.41086],[18.8663,47.40773],[18.86964,47.40471],[18.86777,47.40207],[18.86509,47.40052],[18.87081,47.39838],[18.86772,47.39699],[18.86992,47.39655],[18.87649,47.39478],[18.87749,47.39495],[18.87867,47.39462],[18.88358,47.38996],[18.88291,47.38967],[18.88539,47.3853],[18.87748,47.38339],[18.88181,47.37605],[18.87914,47.37393],[18.88638,47.36923],[18.88206,47.36773],[18.87973,47.36641],[18.8747,47.36252],[18.87282,47.36137],[18.87028,47.36063],[18.86688,47.35853],[18.86234,47.35637],[18.85567,47.35199],[18.84874,47.34728],[18.83192,47.33841],[18.82497,47.34258],[18.8162,47.34925],[18.81079,47.35357],[18.80823,47.356],[18.80645,47.35854],[18.80708,47.35902],[18.80635,47.36021],[18.80465,47.36175],[18.80381,47.36335],[18.80055,47.36545],[18.79988,47.36617],[18.79416,47.36975],[18.79273,47.37079]],[[18.91871,47.40938],[18.91826,47.40998],[18.92067,47.41156],[18.9251,47.41372],[18.93473,47.41917],[18.94063,47.42241],[18.94982,47.41938],[18.95155,47.4175],[18.9569,47.41923],[18.9577,47.41878],[18.95755,47.41435],[18.96211,47.40507],[18.96266,47.40118],[18.96316,47.39903],[18.95446,47.39673],[18.95276,47.39526],[18.95202,47.39362],[18.95119,47.39356],[18.94692,47.39799],[18.94411,47.39845],[18.94161,47.39869],[18.93735,47.39633],[18.93617,47.39683],[18.93122,47.4],[18.9312,47.40023],[18.92924,47.40205],[18.92561,47.40605],[18.92466,47.40635],[18.92293,47.40926],[18.91871,47.40938]]],terms_url:"http://fototerkep.hu",terms_text:"Fototerkep.hu",best:true,description:"5 cm resolution bald image of 4 settlement"},{id:"South_Africa-CD_NGI-Aerial",name:"South Africa CD:NGI Aerial",type:"tms",template:"http://{switch:a,b,c}.aerial.openstreetmap.org.za/ngi-aerial/{zoom}/{x}/{y}.jpg",zoomExtent:[1,22],polygon:[[[17.83968,-32.79834],[17.88935,-32.69728],[18.00364,-32.69822],[18.09917,-32.74853],[18.28987,-32.55266],[18.29302,-32.04871],[18.10545,-31.6455],[17.85293,-31.3444],[17.548,-30.90217],[17.40445,-30.63747],[17.24937,-30.39917],[16.9937,-29.65436],[16.7988,-29.19437],[16.54941,-28.84159],[16.44987,-28.69188],[16.4491,-28.55158],[16.60026,-28.48257],[16.75141,-28.4487],[16.74622,-28.2459],[16.88551,-28.04729],[16.99295,-28.0244],[17.05297,-28.02571],[17.10076,-28.03388],[17.20115,-28.09305],[17.20263,-28.23284],[17.24746,-28.23382],[17.2508,-28.19889],[17.35119,-28.19759],[17.35156,-28.24427],[17.40158,-28.24524],[17.41491,-28.34898],[17.40083,-28.548],[17.4527,-28.54897],[17.45121,-28.64951],[17.49836,-28.68721],[17.60282,-28.683],[17.64997,-28.69679],[17.65259,-28.73815],[17.80139,-28.73815],[17.99943,-28.75606],[18.00027,-28.79562],[18.15745,-28.87181],[18.50638,-28.87181],[18.61536,-28.82959],[18.90875,-28.82775],[19.1047,-28.94885],[19.19691,-28.93785],[19.24301,-28.85162],[19.23149,-28.80296],[19.25873,-28.70099],[19.44315,-28.69732],[19.55003,-28.49583],[19.69673,-28.49399],[19.69882,-28.44794],[19.85076,-28.44333],[19.84971,-28.40278],[19.99536,-28.39909],[19.98937,-24.74979],[20.29167,-24.91923],[20.47246,-25.15017],[20.65324,-25.45294],[20.73326,-25.6802],[20.8281,-25.89635],[20.84292,-26.21585],[20.65028,-26.48409],[20.65324,-26.82049],[21.08891,-26.84693],[21.67277,-26.839],[21.7765,-26.66963],[21.97211,-26.64314],[22.28034,-26.32747],[22.57078,-26.1334],[22.77528,-25.67752],[23.00052,-25.27619],[23.46583,-25.27351],[23.88372,-25.59737],[24.2364,-25.6134],[24.60391,-25.78966],[25.1107,-25.73894],[25.50784,-25.68554],[25.64418,-25.48238],[25.84193,-24.78054],[25.84664,-24.75385],[26.39285,-24.63329],[26.47391,-24.56533],[26.509,-24.48424],[26.58619,-24.40758],[26.73006,-24.30145],[26.85674,-24.24995],[26.85744,-24.10269],[26.92155,-23.8991],[26.93183,-23.84619],[26.97148,-23.69943],[27.00061,-23.63676],[27.0578,-23.60526],[27.13605,-23.52034],[27.33396,-23.39738],[27.51441,-23.35939],[27.59581,-23.20855],[27.80986,-23.0995],[27.88285,-23.06205],[27.93829,-22.94965],[28.04076,-22.82551],[28.20568,-22.65529],[28.33972,-22.56394],[28.49061,-22.5607],[28.61088,-22.54002],[28.82818,-22.45502],[28.92853,-22.42323],[28.95941,-22.30901],[29.01626,-22.20834],[29.23241,-22.16935],[29.35312,-22.18429],[29.6549,-22.11864],[29.77771,-22.1362],[29.9293,-22.18494],[30.11668,-22.28303],[30.25634,-22.29148],[30.30336,-22.33952],[30.50618,-22.30576],[30.83743,-22.28498],[31.00586,-22.30771],[31.18342,-22.32329],[31.29306,-22.36746],[31.56806,-23.19034],[31.55683,-23.44308],[31.69311,-23.61752],[31.71197,-23.74114],[31.77747,-23.88006],[31.88863,-23.94811],[31.91444,-24.17467],[31.99483,-24.30409],[32.01667,-24.4406],[32.00773,-24.65366],[32.01964,-24.91407],[32.03552,-25.08498],[32.01964,-25.38214],[31.99285,-25.44938],[31.99979,-25.51657],[32.00575,-25.6079],[32.00575,-25.66248],[31.93627,-25.84037],[31.98094,-25.95465],[31.86878,-26.00373],[31.41621,-25.72777],[31.32291,-25.74386],[31.25046,-25.82965],[31.1393,-25.91627],[31.11647,-25.99124],[30.96561,-26.26658],[30.89217,-26.32797],[30.85346,-26.40356],[30.82269,-26.44888],[30.80226,-26.52407],[30.80384,-26.80821],[30.90209,-26.78075],[30.91003,-26.84895],[30.98249,-26.90826],[30.97653,-27.00292],[31.00344,-27.04416],[31.15433,-27.19804],[31.50156,-27.31112],[31.97002,-27.31112],[31.97002,-27.12047],[31.97697,-27.05066],[32.00025,-26.79839],[32.10698,-26.79846],[32.31145,-26.84795],[32.89999,-26.85161],[32.88609,-26.9817],[32.70943,-27.47854],[32.62407,-27.77751],[32.5814,-28.07479],[32.53872,-28.2288],[32.42756,-28.50216],[32.36404,-28.59457],[32.07026,-28.84698],[31.98788,-28.90695],[31.77648,-28.96949],[31.46385,-29.28593],[31.35963,-29.38543],[31.16808,-29.63074],[31.06486,-29.78935],[31.05345,-29.84705],[31.06699,-29.86403],[31.04555,-29.9502],[30.95186,-30.00339],[30.86518,-30.10241],[30.72447,-30.3925],[30.35563,-30.93089],[30.09724,-31.24583],[29.86731,-31.43043],[29.74094,-31.50147],[29.48131,-31.69787],[28.89432,-32.28989],[28.54971,-32.58946],[28.14365,-32.83207],[28.07487,-32.94169],[27.84509,-33.08287],[27.3758,-33.38607],[26.88054,-33.6459],[26.59169,-33.74808],[26.45273,-33.79358],[26.20675,-33.75489],[26.00779,-33.7224],[25.80555,-33.75243],[25.75111,-33.80065],[25.65291,-33.85436],[25.65291,-33.94698],[25.71958,-34.00401],[25.72028,-34.05112],[25.55089,-34.06315],[25.35046,-34.05026],[25.28106,-34.00203],[25.04763,-33.99946],[24.95472,-34.00436],[24.94966,-34.10104],[24.87704,-34.15065],[24.87629,-34.20053],[24.85326,-34.21896],[24.76453,-34.20179],[24.50014,-34.20033],[24.34867,-34.11638],[24.19888,-34.1019],[23.99634,-34.05144],[23.80175,-34.05243],[23.74936,-34.01119],[23.49735,-34.00901],[23.41552,-34.04346],[23.41543,-34.11404],[22.90009,-34.0993],[22.84124,-34.05479],[22.64703,-34.05026],[22.64598,-34.00728],[22.57002,-34.00641],[22.50505,-34.06459],[22.252,-34.06459],[22.22213,-34.10147],[22.16212,-34.1057],[22.17124,-34.15218],[22.15769,-34.21809],[22.00156,-34.21722],[21.9497,-34.322],[21.86115,-34.40071],[21.56147,-34.40201],[21.5468,-34.36612],[21.50174,-34.36699],[21.5007,-34.40201],[21.41949,-34.44652],[21.19787,-34.44782],[21.09882,-34.39913],[21.00337,-34.37539],[20.89319,-34.39971],[20.89766,-34.4854],[20.74468,-34.48281],[20.5042,-34.48626],[20.25272,-34.70148],[20.08035,-34.83619],[19.99233,-34.83791],[19.89907,-34.82758],[19.89383,-34.7936],[19.5973,-34.79618],[19.39297,-34.64202],[19.28771,-34.64048],[19.28614,-34.59866],[19.34744,-34.52445],[19.32853,-34.45344],[19.098,-34.44998],[19.07256,-34.38024],[19.00235,-34.35256],[18.95206,-34.39494],[18.7975,-34.39364],[18.79842,-34.10164],[18.50175,-34.10153],[18.49995,-34.36169],[18.44773,-34.362],[18.44799,-34.35227],[18.39744,-34.3514],[18.39717,-34.3023],[18.35657,-34.30056],[18.34793,-34.20204],[18.29721,-34.19503],[18.29511,-33.99371],[18.33745,-33.99141],[18.34766,-33.84924],[18.34793,-33.78155],[18.41247,-33.74488],[18.36155,-33.65016],[18.2992,-33.58559],[18.21668,-33.44887],[18.13899,-33.39741],[17.94735,-33.16026],[17.88552,-33.05757],[17.84859,-32.96685],[17.83968,-32.85073],[17.83968,-32.79834]]],best:true},{id:"South-Tyrol-Orthofoto2011-20cm",name:"South Tyrol Orthofoto 2011 (highres)",type:"wms",template:"https://geoservices.buergernetz.bz.it/geoserver/ows?SERVICE=WMS&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=P_BZ_OF_2011_EPSG3857,P_BZ_OF_2011_20cm_EPSG3857&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],terms_url:"https://geoservices.buergernetz.bz.it/geokatalog",terms_text:"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 3.0",description:"Orthophoto of South Tyrol from 2011 with up to 20cm resolution (larger valleys)"},{id:"South-Tyrol-Orthofoto2014",name:"South Tyrol Orthofoto 2014",type:"tms",template:"https://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_OF_2014_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[0,18],polygon:[[[11.71495,46.51227],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.61936,46.43957],[11.62508,46.43957],[11.62508,46.44797],[11.63349,46.44587],[11.63769,46.45846],[11.64399,46.45846],[11.6608,46.44587],[11.66711,46.44587],[11.66711,46.47525],[11.69442,46.47735],[11.69652,46.48575],[11.70913,46.49624],[11.70913,46.50254],[11.71333,46.50254],[11.71495,46.51227]],[[11.61435,46.41535],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20644,46.4156],[11.20485,46.3997],[11.17754,46.3997],[11.17543,46.3871],[11.16703,46.38081],[11.16703,46.36821],[11.16283,46.36821],[11.16283,46.29895],[11.12501,46.29895],[11.12291,46.25488],[11.13131,46.25278],[11.12711,46.24858],[11.16283,46.24858],[11.16283,46.215],[11.24898,46.2129],[11.25108,46.2234],[11.2889,46.2234],[11.2889,46.24019],[11.3015,46.25278],[11.30991,46.25278],[11.31201,46.24858],[11.33722,46.25068],[11.34143,46.26747],[11.34563,46.26747],[11.34773,46.25698],[11.35613,46.24858],[11.41707,46.25278],[11.41917,46.32414],[11.49271,46.32204],[11.48851,46.33044],[11.49901,46.32834],[11.50111,46.34723],[11.52423,46.34723],[11.53894,46.34513],[11.53894,46.32834],[11.55995,46.32414],[11.58306,46.34932],[11.58306,46.37241],[11.60407,46.37241],[11.60617,46.38291],[11.61458,46.38291],[11.62508,46.3934],[11.62508,46.41229],[11.61435,46.41535]],[[11.20663,46.41745],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.96285,46.47718],[10.96952,46.45217],[10.98423,46.45217],[10.98843,46.44587],[10.99894,46.44587],[11.01154,46.42068],[11.04096,46.42068],[11.08088,46.43537],[11.08298,46.47525],[11.15232,46.47525],[11.18804,46.48365],[11.19014,46.47525],[11.20695,46.47315],[11.20485,46.44587],[11.19855,46.44167],[11.19435,46.42698],[11.19014,46.42698],[11.19014,46.42068],[11.20695,46.42068],[11.20663,46.41745]],[[10.47433,46.55501],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.46952,46.62628],[10.47785,46.61797],[10.47785,46.59069],[10.47365,46.59069],[10.47155,46.5676],[10.46314,46.55501],[10.47433,46.55501]],[[10.46925,46.62643],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43626,46.79843],[10.43373,46.81106],[10.42532,46.80686],[10.42532,46.79847],[10.42112,46.79847],[10.41692,46.78587],[10.41692,46.75229],[10.3938,46.7376],[10.3896,46.72081],[10.3854,46.72081],[10.3791,46.69353],[10.3791,46.66834],[10.3833,46.66414],[10.3812,46.64735],[10.3896,46.64525],[10.3938,46.63056],[10.42532,46.62846],[10.44843,46.63476],[10.46925,46.62643]]],terms_url:"https://geoservices.buergernetz.bz.it/geokatalog/",terms_text:"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 3.0"},{id:"South-Tyrol-Orthofoto-2014-2015",name:"South Tyrol Orthofoto 2014/2015",type:"tms",template:"https://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_OF_2014_2015_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg",endDate:"2015-11-01T00:00:00.000Z",startDate:"2014-07-01T00:00:00.000Z",zoomExtent:[0,18],polygon:[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],terms_url:"https://geoservices.buergernetz.bz.it/geokatalog",terms_text:"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 4.0",best:true},{id:"South-Tyrol-Orthofoto-2017",name:"South Tyrol Orthofoto 2017",type:"tms",template:"https://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=p_bz-orthoimagery:P_BZ_OF_2017_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg",endDate:"2017-10-01T00:00:00.000Z",startDate:"2017-07-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[11.37851,46.30096],[11.38516,46.30241],[11.39571,46.30998],[11.39893,46.30771],[11.40047,46.30835],[11.39922,46.30922],[11.39641,46.31043],[11.39752,46.3114],[11.39759,46.31529],[11.40432,46.32512],[11.41239,46.3245],[11.41531,46.32568],[11.41956,46.32559],[11.45325,46.33531],[11.4632,46.35096],[11.48003,46.35439],[11.47676,46.36434],[11.52706,46.3557],[11.54972,46.34515],[11.55762,46.34977],[11.5638,46.38164],[11.59641,46.3872],[11.61907,46.4252],[11.62525,46.47109],[11.64705,46.48445],[11.63315,46.49875],[11.63847,46.5017],[11.66456,46.49804],[11.70632,46.51086],[11.70362,46.62244],[11.39677,46.62433],[11.38982,46.61077],[11.38124,46.61248],[11.3742,46.6172],[11.3736,46.62351],[11.33308,46.62445],[11.3324,46.66169],[11.28639,46.65415],[11.27008,46.72256],[11.18099,46.71845],[11.1779,46.73045],[11.15988,46.72433],[11.1331,46.72321],[11.11404,46.71539],[11.03371,46.70832],[10.99869,46.69655],[10.92607,46.69632],[10.89226,46.68431],[10.81879,46.67159],[10.76729,46.6697],[10.74531,46.66452],[10.54001,46.64237],[10.5098,46.63247],[10.46448,46.63341],[10.49143,46.61407],[10.47546,46.56476],[10.47787,46.55756],[10.47049,46.54257],[10.45916,46.5408],[10.45057,46.52863],[10.45504,46.50879],[10.48199,46.49296],[10.48851,46.49567],[10.55065,46.49071],[10.57966,46.47369],[10.60181,46.4692],[10.62138,46.44779],[10.63992,46.44555],[10.67116,46.45252],[10.67888,46.4485],[10.6933,46.45737],[10.71562,46.46104],[10.74188,46.48386],[10.76385,46.48539],[10.77913,46.4705],[10.7975,46.4446],[10.86205,46.43656],[10.88333,46.45099],[10.91183,46.44401],[10.93191,46.45335],[10.93809,46.4666],[10.95491,46.47014],[10.96075,46.4744],[10.96556,46.48232],[10.98753,46.48362],[11.00573,46.47735],[11.01002,46.47121],[11.02993,46.46116],[11.03525,46.453],[11.03903,46.45276],[11.04177,46.44708],[11.04675,46.44661],[11.05482,46.45016],[11.06409,46.4459],[11.0677,46.44294],[11.07336,46.44129],[11.07731,46.44354],[11.07868,46.44862],[11.06787,46.46577],[11.0622,46.48835],[11.0586,46.48917],[11.05001,46.50643],[11.03525,46.51399],[11.04366,46.51741],[11.05619,46.51635],[11.0828,46.53171],[11.08829,46.50312],[11.10512,46.49615],[11.11044,46.49709],[11.13035,46.4822],[11.15919,46.48917],[11.1858,46.50855],[11.20794,46.49473],[11.21241,46.48208],[11.21962,46.46021],[11.20717,46.41668],[11.21524,46.4065],[11.20073,46.37204],[11.20597,46.36695],[11.19472,46.3647],[11.19275,46.36043],[11.20348,46.34515],[11.18923,46.3234],[11.17816,46.30319],[11.16477,46.29731],[11.16271,46.29044],[11.14391,46.28812],[11.13928,46.28415],[11.15001,46.27991],[11.15838,46.26834],[11.16653,46.2619],[11.17477,46.25914],[11.18301,46.25864],[11.18599,46.25755],[11.19397,46.25715],[11.19719,46.2581],[11.19996,46.25626],[11.1958,46.25092],[11.19508,46.249],[11.19183,46.24901],[11.19168,46.25283],[11.18932,46.25395],[11.18704,46.25405],[11.1826,46.25209],[11.18116,46.24865],[11.19484,46.24838],[11.20756,46.24807],[11.20683,46.21877],[11.2073,46.21773],[11.20923,46.21948],[11.24657,46.23109],[11.25433,46.23872],[11.25966,46.24089],[11.26365,46.24199],[11.27442,46.25184],[11.27652,46.25181],[11.28266,46.2565],[11.28631,46.26107],[11.29429,46.26086],[11.30313,46.25929],[11.31042,46.26599],[11.30888,46.2676],[11.31145,46.26872],[11.31485,46.27341],[11.31334,46.27943],[11.31025,46.2816],[11.31073,46.28367],[11.31575,46.28596],[11.32317,46.29224],[11.32291,46.29319],[11.33167,46.29479],[11.33201,46.29708],[11.3333,46.2982],[11.33566,46.29776],[11.33815,46.29951],[11.34017,46.29838],[11.3375,46.29432],[11.33858,46.29195],[11.33583,46.29067],[11.34158,46.28207],[11.34562,46.28023],[11.3475,46.28026],[11.356,46.2765],[11.35733,46.27409],[11.35729,46.27252],[11.35664,46.2697],[11.35823,46.26582],[11.36527,46.26469],[11.36986,46.26255],[11.373,46.26398],[11.37763,46.26226],[11.38857,46.26166],[11.39308,46.26499],[11.39789,46.26472],[11.39565,46.27282],[11.38917,46.27863],[11.38643,46.27988],[11.38505,46.2813],[11.38441,46.28705],[11.38093,46.29127],[11.37887,46.29221],[11.37102,46.29324],[11.35862,46.29613],[11.35896,46.29889],[11.36025,46.3009],[11.36458,46.30191],[11.36797,46.30072],[11.36815,46.3017],[11.37851,46.30096]]],terms_url:"https://geoservices.buergernetz.bz.it/geokatalog",terms_text:"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC0-1.0",best:true},{id:"South-Tyrol-Topomap",name:"South Tyrol Topomap",type:"tms",template:"https://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_BASEMAP_TOPO&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg",zoomExtent:[0,20],polygon:[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],terms_url:"https://geoservices.buergernetz.bz.it/geokatalog",terms_text:"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano",description:"Topographical basemap of South Tyrol"},{id:"SPW2009",name:"SPW(allonie) 2009-2010 aerial imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/IMAGERIE/ORTHO_2009_2010/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2010-01-01T00:00:00.000Z",startDate:"2009-01-01T00:00:00.000Z",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPW2012",name:"SPW(allonie) 2012-2013 aerial imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/IMAGERIE/ORTHO_2012_2013/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPW2015",name:"SPW(allonie) 2015 aerial imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/IMAGERIE/ORTHO_2015/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPW2016",name:"SPW(allonie) 2016 aerial imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/IMAGERIE/ORTHO_2016/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPW_ORTHO_LAST",name:"SPW(allonie) most recent aerial imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/IMAGERIE/ORTHO_LAST/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPW_PICC",name:"SPW(allonie) PICC numerical imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/TOPOGRAPHIE/PICC_VDIFF/MapServer/WmsServer?SERVICE=WMS&VERSION=1.1.1&FORMAT=image/png8&TRANSPARENT=FALSE&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&LAYERS=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",projection:"EPSG:3857",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPWrelief2014",name:"SPW(allonie) shaded relief",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/RELIEF/WALLONIE_MNT_2013_2014_HILLSHADE/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"ssb-sentrum",name:"SSB City Centres overlay",type:"wms",template:"https://ogc.ssb.no/wms.ashx?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=layer_193&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.ssb.no/arealsentrum/",terms_text:"© SSB",description:"Downtown areas with significant commercial and service activities.",icon:"http://www.fosterhjemsforening.no/wp-content/uploads/2015/06/SSB_logo1.png",overlay:true},{id:"ssb-tettsteder",name:"SSB Urban Areas overlay",type:"wms",template:"https://ogc.ssb.no/wms.ashx?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=layer_198&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.ssb.no/beftett",terms_text:"© SSB",description:"Human settlements of at least 200 people with less than 200 meters between households",icon:"http://www.fosterhjemsforening.no/wp-content/uploads/2015/06/SSB_logo1.png",overlay:true},{id:"Bern-bern2016-tms",name:"Stadt Bern 10cm (2016)",type:"tms",template:"https://mapproxy.osm.ch/tiles/bern2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[8,21],polygon:[[[7.29431,46.92376],[7.29827,46.92747],[7.30616,46.93095],[7.30433,46.93623],[7.30686,46.94037],[7.32464,46.94328],[7.32845,46.94641],[7.34141,46.94608],[7.34385,46.94737],[7.34346,46.94879],[7.35136,46.94855],[7.35056,46.95021],[7.35309,46.95193],[7.3582,46.95118],[7.3685,46.95662],[7.37151,46.96073],[7.37503,46.95983],[7.37851,46.96147],[7.38062,46.96547],[7.38321,46.9663],[7.3938,46.96693],[7.40005,46.96918],[7.40829,46.96869],[7.42817,46.9738],[7.43271,46.97269],[7.43536,46.96843],[7.43785,46.96843],[7.44125,46.97679],[7.44569,46.97479],[7.44838,46.97564],[7.4477,46.97901],[7.44405,46.97807],[7.44127,46.97982],[7.45067,46.99015],[7.45221,46.98968],[7.45465,46.97782],[7.46804,46.97583],[7.47079,46.97],[7.47019,46.96741],[7.47816,46.97118],[7.48452,46.97016],[7.48613,46.9679],[7.48579,46.96468],[7.47847,46.9629],[7.48029,46.96068],[7.47893,46.95878],[7.47978,46.9566],[7.47701,46.95446],[7.48405,46.94999],[7.48339,46.9452],[7.49556,46.93962],[7.49351,46.93766],[7.4908,46.93876],[7.4895,46.93687],[7.47667,46.93695],[7.47811,46.93625],[7.4747,46.93392],[7.47535,46.93299],[7.4691,46.92924],[7.47077,46.9255],[7.45857,46.93484],[7.44764,46.93043],[7.43542,46.93497],[7.4338,46.93312],[7.43764,46.93074],[7.41469,46.93682],[7.41384,46.93157],[7.40708,46.93038],[7.40806,46.92563],[7.40213,46.9242],[7.40148,46.92119],[7.38757,46.93045],[7.38231,46.92728],[7.38002,46.92989],[7.38087,46.93241],[7.37487,46.93143],[7.37489,46.93271],[7.36807,46.93239],[7.36831,46.93043],[7.36041,46.92859],[7.36056,46.9272],[7.33878,46.92454],[7.33937,46.91967],[7.32746,46.91903],[7.32692,46.9236],[7.32437,46.92519],[7.30823,46.92229],[7.29431,46.92376]]],terms_text:"Orthophoto 2016, Vermessungsamt Stadt Bern",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Bern-2012",name:"Stadt Bern 10cm/25cm (2012)",type:"tms",template:"https://mapproxy.osm.ch/tiles/bern2012/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[14,19],polygon:[[[7.3807,47.00952],[7.38073,47.02301],[7.43853,47.02303],[7.43865,47.01408],[7.45174,47.014],[7.45172,47.00503],[7.54111,47.005],[7.54111,46.99873],[7.54378,46.99871],[7.54375,46.98696],[7.55682,46.987],[7.55685,46.96003],[7.51744,46.96001],[7.51744,46.95108],[7.53051,46.95106],[7.53051,46.92407],[7.51741,46.92405],[7.51738,46.91505],[7.53042,46.91507],[7.53048,46.9061],[7.54358,46.90602],[7.54358,46.87905],[7.55659,46.87903],[7.55662,46.8611],[7.54349,46.86104],[7.5434,46.85212],[7.49095,46.85212],[7.49107,46.87907],[7.47794,46.87909],[7.47797,46.89707],[7.45168,46.89713],[7.45171,46.88808],[7.43855,46.88814],[7.43858,46.87015],[7.41233,46.87015],[7.41236,46.87907],[7.39917,46.87911],[7.3992,46.86108],[7.38613,46.86114],[7.3861,46.85218],[7.373,46.85216],[7.37303,46.86112],[7.34677,46.8611],[7.3468,46.88808],[7.25488,46.88796],[7.25485,46.90596],[7.24172,46.90592],[7.24169,46.91497],[7.22856,46.91493],[7.22833,46.96887],[7.24146,46.96891],[7.24149,46.98688],[7.26769,46.98694],[7.26777,46.99593],[7.28078,46.99595],[7.2809,47.0094],[7.3807,47.00952]]],terms_text:"Orthophoto 2012, Vermessungsamt Stadt Bern",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Uster-2008",name:"Stadt Uster Orthophoto 2008 10cm",type:"tms",template:"https://mapproxy.osm.ch/tiles/uster/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2008-01-01T00:00:00.000Z",startDate:"2008-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[8.68,47.32],[8.74,47.32],[8.74,47.365],[8.68,47.365],[8.68,47.32]]],terms_text:"Stadt Uster Vermessung Orthophoto 2008",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Zuerich-zh_luftbild2011-tms",name:"Stadt Zürich Luftbild 2011",type:"tms",template:"https://mapproxy.osm.ch/tiles/zh_luftbild2011/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[8.44624,47.44143],[8.63178,47.43968],[8.62895,47.31377],[8.44381,47.31555],[8.44624,47.44143]]],terms_text:"Stadt Zürich Luftbild 2011",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Zuerich-city_map",name:"Stadtplan Zürich",type:"tms",template:"https://mapproxy.osm.ch/tiles/zh_stadtplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",zoomExtent:[0,21],polygon:[[[8.56681,47.34713],[8.56665,47.34706],[8.56563,47.34684],[8.56575,47.34666],[8.56509,47.34645],[8.54207,47.33502],[8.54073,47.33376],[8.5403,47.33396],[8.54019,47.33372],[8.54042,47.33358],[8.5388,47.33208],[8.53642,47.33076],[8.53622,47.33018],[8.53345,47.32992],[8.5318,47.3295],[8.53145,47.32846],[8.53102,47.32789],[8.52974,47.32777],[8.52969,47.32687],[8.52899,47.32698],[8.52813,47.32685],[8.52802,47.32635],[8.52755,47.32639],[8.52762,47.32616],[8.52579,47.32619],[8.52563,47.32575],[8.52426,47.32608],[8.5242,47.32486],[8.52372,47.32416],[8.52304,47.32433],[8.52193,47.32436],[8.52194,47.32394],[8.51932,47.32401],[8.51868,47.32386],[8.51768,47.3232],[8.51642,47.32308],[8.5156,47.32315],[8.51472,47.32272],[8.51295,47.3229],[8.51162,47.32222],[8.50957,47.32202],[8.5095,47.32165],[8.50788,47.32203],[8.50735,47.32173],[8.50529,47.32144],[8.50476,47.32121],[8.5043,47.32074],[8.50317,47.32022],[8.50241,47.32053],[8.50227,47.32082],[8.50152,47.32129],[8.50102,47.32198],[8.50095,47.32259],[8.5006,47.32278],[8.50078,47.3237],[8.50066,47.32451],[8.50098,47.32595],[8.5015,47.3265],[8.50159,47.32732],[8.50188,47.32765],[8.50132,47.32883],[8.5014,47.32903],[8.50069,47.32979],[8.50087,47.33053],[8.50063,47.3311],[8.50112,47.33183],[8.50075,47.33202],[8.50078,47.33224],[8.50106,47.3326],[8.50191,47.33303],[8.5022,47.33364],[8.50177,47.33412],[8.50152,47.33504],[8.50199,47.33666],[8.50161,47.33728],[8.49877,47.33968],[8.49808,47.34169],[8.49702,47.34247],[8.49709,47.34326],[8.49798,47.34365],[8.4981,47.34387],[8.49817,47.34453],[8.49773,47.34521],[8.49636,47.34648],[8.4951,47.34691],[8.49467,47.3476],[8.49285,47.34828],[8.49206,47.3495],[8.49145,47.34964],[8.49128,47.34983],[8.49089,47.35067],[8.49,47.35056],[8.48813,47.352],[8.48691,47.35203],[8.4868,47.3522],[8.48728,47.35311],[8.4871,47.3534],[8.48501,47.35469],[8.48463,47.35536],[8.48463,47.3567],[8.48426,47.35737],[8.48321,47.35814],[8.48272,47.35907],[8.48205,47.35954],[8.47879,47.36078],[8.47698,47.36029],[8.47365,47.36081],[8.47275,47.36079],[8.47169,47.36132],[8.47053,47.36166],[8.46951,47.36438],[8.4664,47.36574],[8.46583,47.3661],[8.46545,47.36664],[8.46485,47.36681],[8.46427,47.36728],[8.46418,47.36838],[8.4649,47.36897],[8.46482,47.36911],[8.46938,47.37136],[8.47042,47.3726],[8.47022,47.37395],[8.46868,47.37382],[8.46761,47.37357],[8.46544,47.37444],[8.46288,47.37603],[8.45995,47.3775],[8.45638,47.37801],[8.45116,47.37817],[8.45047,47.37836],[8.44847,47.37967],[8.44801,47.38025],[8.45174,47.38062],[8.45371,47.38027],[8.45614,47.38072],[8.45669,47.38094],[8.45673,47.38244],[8.45745,47.38222],[8.45843,47.38231],[8.45841,47.38263],[8.45745,47.38325],[8.45767,47.3834],[8.45756,47.38371],[8.45807,47.38388],[8.46004,47.38594],[8.46088,47.38704],[8.46121,47.38795],[8.46104,47.38803],[8.46381,47.39053],[8.46518,47.39132],[8.46556,47.39113],[8.46618,47.39113],[8.46727,47.39065],[8.46697,47.39131],[8.46739,47.3929],[8.4671,47.39334],[8.46607,47.39378],[8.4651,47.39453],[8.46484,47.39481],[8.46488,47.39508],[8.46535,47.39492],[8.46854,47.39461],[8.47018,47.39401],[8.47066,47.39439],[8.47191,47.39388],[8.47208,47.39408],[8.47152,47.3943],[8.47151,47.3949],[8.4721,47.39517],[8.47301,47.39506],[8.47349,47.396],[8.46516,47.39829],[8.46568,47.39922],[8.46759,47.39873],[8.46806,47.39957],[8.46615,47.40006],[8.4677,47.403],[8.4699,47.40298],[8.47551,47.40381],[8.47815,47.40387],[8.47819,47.40508],[8.47738,47.40517],[8.47705,47.40619],[8.47729,47.40914],[8.47703,47.40935],[8.47543,47.40971],[8.47583,47.41077],[8.47605,47.41072],[8.47628,47.41102],[8.47665,47.41097],[8.47725,47.41194],[8.47488,47.41241],[8.47394,47.41222],[8.47303,47.41146],[8.47268,47.41058],[8.47101,47.41094],[8.47113,47.41137],[8.47085,47.41167],[8.47044,47.41159],[8.47031,47.41253],[8.46876,47.41225],[8.46801,47.41334],[8.46863,47.41363],[8.46857,47.41408],[8.46955,47.41484],[8.47007,47.41557],[8.46913,47.41649],[8.46913,47.41693],[8.46962,47.41752],[8.47158,47.41763],[8.4772,47.41974],[8.47688,47.42016],[8.47783,47.42212],[8.47895,47.42172],[8.47937,47.42113],[8.47972,47.42141],[8.48131,47.42134],[8.48171,47.423],[8.48294,47.42266],[8.48292,47.42222],[8.48609,47.42155],[8.48658,47.42164],[8.48683,47.42186],[8.48796,47.42201],[8.48851,47.42271],[8.49019,47.42234],[8.491,47.4239],[8.49006,47.42435],[8.49007,47.42532],[8.49027,47.42536],[8.49017,47.42578],[8.48552,47.42712],[8.48481,47.42784],[8.48466,47.42873],[8.48437,47.42896],[8.48445,47.42979],[8.48579,47.43103],[8.49562,47.43281],[8.50027,47.43442],[8.50207,47.43467],[8.50364,47.43402],[8.50997,47.43213],[8.51155,47.43116],[8.51274,47.43085],[8.516,47.43174],[8.51628,47.43175],[8.51681,47.43133],[8.51872,47.4319],[8.51979,47.43167],[8.52463,47.43126],[8.52549,47.43316],[8.5303,47.43207],[8.53063,47.43266],[8.533,47.43228],[8.53374,47.43251],[8.53467,47.432],[8.53521,47.43188],[8.53606,47.43187],[8.5374,47.4314],[8.53964,47.43126],[8.5401,47.4311],[8.54033,47.43186],[8.54363,47.43143],[8.54284,47.43289],[8.54311,47.43288],[8.54451,47.4325],[8.54459,47.43262],[8.54607,47.43207],[8.54858,47.43142],[8.55009,47.43128],[8.55098,47.43102],[8.55199,47.43104],[8.55535,47.43066],[8.5561,47.42803],[8.55684,47.42624],[8.55783,47.42554],[8.55697,47.4249],[8.55736,47.42472],[8.5569,47.42424],[8.55723,47.4241],[8.55419,47.4208],[8.56082,47.41817],[8.56129,47.41829],[8.56235,47.41632],[8.56282,47.41643],[8.56323,47.41565],[8.56622,47.41632],[8.56692,47.41629],[8.56735,47.41649],[8.5678,47.41684],[8.56875,47.41855],[8.56903,47.41871],[8.5696,47.41868],[8.56944,47.41926],[8.57223,47.41893],[8.57367,47.42004],[8.57378,47.4178],[8.57342,47.41711],[8.57386,47.41438],[8.57384,47.41324],[8.57331,47.41257],[8.5726,47.41207],[8.573,47.41144],[8.58806,47.40797],[8.58894,47.40756],[8.59312,47.40704],[8.59728,47.40631],[8.59722,47.406],[8.59608,47.40612],[8.59378,47.40222],[8.59622,47.40154],[8.5948,47.39918],[8.59725,47.39851],[8.59644,47.39715],[8.59637,47.39663],[8.59623,47.39646],[8.59453,47.39712],[8.59392,47.39647],[8.59335,47.39614],[8.59208,47.39691],[8.59172,47.39681],[8.59148,47.397],[8.58828,47.3958],[8.58905,47.39501],[8.58995,47.39478],[8.58818,47.39351],[8.58752,47.39321],[8.58747,47.39297],[8.58619,47.3928],[8.58442,47.39195],[8.58369,47.39008],[8.58305,47.38905],[8.58316,47.38831],[8.58437,47.38834],[8.58432,47.38894],[8.58492,47.39011],[8.58528,47.3904],[8.58696,47.39017],[8.5869,47.38977],[8.58765,47.38905],[8.58698,47.38793],[8.59181,47.38638],[8.59307,47.38565],[8.59299,47.38523],[8.59354,47.38522],[8.59274,47.38417],[8.59082,47.38476],[8.59013,47.38381],[8.58966,47.384],[8.58956,47.38373],[8.59217,47.38311],[8.59151,47.38244],[8.59384,47.38081],[8.59407,47.38061],[8.59406,47.38029],[8.59556,47.3796],[8.59574,47.37927],[8.59721,47.37849],[8.59674,47.37782],[8.59702,47.37716],[8.5976,47.37661],[8.59705,47.37589],[8.59778,47.37557],[8.59828,47.3751],[8.59855,47.37473],[8.59813,47.37447],[8.6002,47.37331],[8.60053,47.3734],[8.60096,47.37312],[8.60194,47.37198],[8.60192,47.37171],[8.60324,47.37131],[8.60607,47.36871],[8.60745,47.36816],[8.60812,47.36761],[8.61067,47.3673],[8.612,47.36684],[8.61308,47.36776],[8.61344,47.36779],[8.61366,47.36802],[8.61549,47.3677],[8.61645,47.36841],[8.61665,47.36828],[8.61764,47.36681],[8.61709,47.36626],[8.61682,47.36535],[8.61565,47.36466],[8.61495,47.36458],[8.61557,47.36342],[8.61566,47.36273],[8.61482,47.36263],[8.6147,47.36151],[8.61929,47.36121],[8.61996,47.36104],[8.62174,47.36007],[8.62257,47.35983],[8.62187,47.35946],[8.62133,47.35746],[8.62351,47.35592],[8.62352,47.35561],[8.62544,47.35466],[8.62416,47.35397],[8.62245,47.35364],[8.62209,47.35334],[8.61989,47.35367],[8.61976,47.35385],[8.61844,47.35382],[8.61839,47.35425],[8.61708,47.35414],[8.61569,47.35442],[8.6152,47.3541],[8.61386,47.35402],[8.61255,47.35437],[8.61156,47.35394],[8.61107,47.35352],[8.61042,47.35337],[8.60946,47.35352],[8.60776,47.35333],[8.60607,47.35363],[8.60506,47.35359],[8.6038,47.353],[8.60305,47.35219],[8.6032,47.35207],[8.60294,47.35175],[8.603,47.35076],[8.60262,47.35073],[8.6016,47.35073],[8.60104,47.35105],[8.60026,47.35112],[8.5996,47.35145],[8.59859,47.35145],[8.59824,47.35165],[8.59689,47.3514],[8.59666,47.35161],[8.59596,47.35169],[8.59564,47.3519],[8.59494,47.35161],[8.59454,47.35175],[8.5939,47.35161],[8.5935,47.35211],[8.59229,47.3523],[8.59189,47.35278],[8.59118,47.35321],[8.59047,47.35271],[8.59014,47.35286],[8.58846,47.35289],[8.58797,47.35307],[8.58748,47.35267],[8.5863,47.35288],[8.58591,47.35231],[8.5853,47.35201],[8.58462,47.35141],[8.58417,47.35129],[8.58438,47.35116],[8.58398,47.35085],[8.58348,47.35104],[8.58335,47.35087],[8.58221,47.35101],[8.58246,47.35062],[8.57851,47.34873],[8.57827,47.34888],[8.57786,47.34865],[8.57686,47.34878],[8.57688,47.34859],[8.57625,47.34839],[8.57308,47.34751],[8.573,47.34765],[8.57214,47.34744],[8.57163,47.34728],[8.5717,47.34712],[8.57029,47.34672],[8.56968,47.3476],[8.56741,47.34674],[8.56681,47.34713]]],terms_text:"Stadt Zürich Open Government Data",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"stamen-terrain-background",name:"Stamen Terrain",type:"tms",template:"https://stamen-tiles-{switch:a,b,c,d}.a.ssl.fastly.net/terrain-background/{zoom}/{x}/{y}.jpg",zoomExtent:[4,18],terms_url:"http://maps.stamen.com/#terrain",terms_text:"Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under ODbL",icon:"https://stamen.com/wp-content/uploads/2016/07/stamen_compass_rose_small-01.png"},{id:"stockholm-orto",name:"Stockholm Orthophoto",type:"wms",template:"https://openmap.stockholm.se/bios/wms/app/baggis/web/WMS_STHLM_ORTOFOTO_2016?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=p_1002630&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,21],polygon:[[[17.8755,59.2625],[17.94411,59.27307],[18.09551,59.22603],[18.19582,59.22786],[18.20297,59.24886],[18.12538,59.30779],[18.1786,59.32566],[18.09876,59.3721],[18.04264,59.37816],[18.00796,59.34334],[17.93655,59.37641],[17.97483,59.40246],[17.90882,59.4417],[17.8854,59.43792],[17.88918,59.41382],[17.84077,59.38568],[17.81708,59.40054],[17.77725,59.39984],[17.75622,59.3916],[17.79899,59.36204],[17.94993,59.31121],[17.85622,59.28412],[17.8755,59.2625]]],terms_url:"http://dataportalen.stockholm.se/dataportalen/",terms_text:"© Stockholm municipality, CC0",best:true,description:"Orthophotos from the municipality of Stockholm 2016, CC0 license",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/4/4d/Stockholm_vapen_bra.svg/196px-Stockholm_vapen_bra.svg.png"},{id:"Surrey-Air_Survey",name:"Surrey Air Survey",type:"tms",template:"https://{switch:a,b,c}.surrey.aerial.openstreetmap.org.uk/layer/gb_surrey_aerial/{zoom}/{x}/{y}.png",endDate:"2009-01-01T00:00:00.000Z",startDate:"2007-01-01T00:00:00.000Z",zoomExtent:[8,21],polygon:[[[-0.75248,51.08219],[-0.75952,51.08563],[-0.80143,51.14579],[-0.83989,51.14407],[-0.83577,51.18024],[-0.85295,51.20113],[-0.85227,51.20962],[-0.84952,51.2179],[-0.82669,51.24037],[-0.8121,51.24692],[-0.77365,51.24596],[-0.75442,51.23811],[-0.75408,51.23392],[-0.74464,51.23338],[-0.74307,51.28472],[-0.7515,51.30695],[-0.76644,51.3121],[-0.78206,51.32702],[-0.78154,51.33881],[-0.73743,51.37205],[-0.71923,51.37697],[-0.67958,51.3848],[-0.68078,51.39015],[-0.65314,51.39176],[-0.63014,51.39058],[-0.62911,51.39701],[-0.62344,51.39776],[-0.61314,51.42956],[-0.60025,51.44591],[-0.58671,51.44454],[-0.57624,51.4532],[-0.56268,51.45235],[-0.54774,51.447],[-0.53727,51.44486],[-0.5371,51.45267],[-0.54396,51.45459],[-0.54053,51.46989],[-0.53092,51.47609],[-0.50912,51.47448],[-0.5086,51.46957],[-0.49006,51.46828],[-0.45264,51.46069],[-0.44869,51.44293],[-0.44148,51.44186],[-0.44183,51.43694],[-0.41127,51.43801],[-0.40149,51.42795],[-0.38071,51.42624],[-0.38054,51.41617],[-0.34913,51.41382],[-0.3275,51.40375],[-0.30398,51.39904],[-0.30192,51.37547],[-0.30948,51.36969],[-0.31119,51.35297],[-0.29557,51.35415],[-0.29231,51.36733],[-0.2851,51.36808],[-0.27875,51.37719],[-0.26553,51.38372],[-0.24115,51.3848],[-0.21231,51.36283],[-0.21077,51.34986],[-0.19086,51.35029],[-0.15429,51.33388],[-0.14966,51.30577],[-0.10743,51.29665],[-0.08872,51.30996],[-0.08786,51.32208],[-0.0652,51.32154],[-0.06417,51.32648],[-0.05198,51.32637],[-0.05284,51.33463],[-0.03308,51.34309],[0.00192,51.33763],[0.01188,51.3282],[0.01393,51.29944],[0.02029,51.29944],[0.02406,51.30727],[0.03316,51.30867],[0.04552,51.30545],[0.05239,51.28774],[0.06166,51.25778],[0.06406,51.24155],[0.04621,51.21263],[0.04071,51.21091],[0.04483,51.19898],[0.04947,51.19973],[0.05582,51.19446],[0.06114,51.17907],[0.06234,51.15421],[0.05771,51.14171],[0.02046,51.13654],[-0.0446,51.13364],[-0.1567,51.13525],[-0.15721,51.129],[-0.22879,51.11834],[-0.24733,51.11834],[-0.25008,51.12114],[-0.29935,51.1137],[-0.32218,51.11198],[-0.32235,51.10584],[-0.3596,51.10196],[-0.35891,51.11133],[-0.38638,51.11176],[-0.3869,51.10625],[-0.4281,51.09472],[-0.48568,51.09516],[-0.48713,51.08723],[-0.52974,51.08654],[-0.53023,51.07899],[-0.61046,51.07655],[-0.60997,51.08067],[-0.6578,51.07922],[-0.65828,51.07434],[-0.68365,51.07075],[-0.6998,51.07083],[-0.72966,51.07449],[-0.75248,51.08219]]]},{id:"Swietochlowice-2008",name:"Świętochłowice: Orthophotomap 2008 (aerial image)",type:"wms",template:"https://swietochlowice.geoportal2.pl/map/wms/wms.php?SERVICE=WMS&REQUEST=GetMap&VERSION=1.1.1&LAYERS=ortofotomapa2008&STYLES=&FORMAT=image/jpeg&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&SRS={proj}",projection:"EPSG:4326",endDate:"2008-01-01T00:00:00.000Z",startDate:"2008-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[18.92818,50.32151],[18.93028,50.31766],[18.93402,50.31392],[18.93193,50.31119],[18.92556,50.30575],[18.92429,50.30354],[18.92964,50.30206],[18.93083,50.3004],[18.9283,50.2961],[18.93573,50.29356],[18.93885,50.28965],[18.9371,50.28727],[18.93966,50.28206],[18.93402,50.27553],[18.92953,50.27543],[18.93037,50.27338],[18.93413,50.27104],[18.93239,50.26883],[18.92716,50.26926],[18.90447,50.27371],[18.89758,50.27612],[18.89569,50.28028],[18.89783,50.28566],[18.89712,50.2878],[18.88292,50.29258],[18.88031,50.29473],[18.88311,50.29894],[18.88819,50.30164],[18.88326,50.30717],[18.88444,50.31183],[18.89149,50.31809],[18.89306,50.32558],[18.89568,50.32704],[18.92818,50.32151]]],terms_text:"Urząd Miasta Świętochłowice"},{id:"Swietochlowice-2009",name:"Świętochłowice: Orthophotomap 2009 (aerial image)",type:"wms",template:"https://swietochlowice.geoportal2.pl/map/wms/wms.php?SERVICE=WMS&REQUEST=GetMap&VERSION=1.1.1&LAYERS=ortofotomapa2009&STYLES=&FORMAT=image/jpeg&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&SRS={proj}",projection:"EPSG:4326",endDate:"2009-01-01T00:00:00.000Z",startDate:"2009-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[18.92818,50.32151],[18.93028,50.31766],[18.93402,50.31392],[18.93193,50.31119],[18.92556,50.30575],[18.92429,50.30354],[18.92964,50.30206],[18.93083,50.3004],[18.9283,50.2961],[18.93573,50.29356],[18.93885,50.28965],[18.9371,50.28727],[18.93966,50.28206],[18.93402,50.27553],[18.92953,50.27543],[18.93037,50.27338],[18.93413,50.27104],[18.93239,50.26883],[18.92716,50.26926],[18.90447,50.27371],[18.89758,50.27612],[18.89569,50.28028],[18.89783,50.28566],[18.89712,50.2878],[18.88292,50.29258],[18.88031,50.29473],[18.88311,50.29894],[18.88819,50.30164],[18.88326,50.30717],[18.88444,50.31183],[18.89149,50.31809],[18.89306,50.32558],[18.89568,50.32704],[18.92818,50.32151]]],terms_text:"Urząd Miasta Świętochłowice"},{id:"Swietochlowice-2012",name:"Świętochłowice: Orthophotomap 2012 (aerial image)",type:"wms",template:"https://swietochlowice.geoportal2.pl/map/wms/wms.php?SERVICE=WMS&REQUEST=GetMap&VERSION=1.1.1&LAYERS=ortofotomapa2012&STYLES=&FORMAT=image/jpeg&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&SRS={proj}",projection:"EPSG:4326",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[18.92818,50.32151],[18.93028,50.31766],[18.93402,50.31392],[18.93193,50.31119],[18.92556,50.30575],[18.92429,50.30354],[18.92964,50.30206],[18.93083,50.3004],[18.9283,50.2961],[18.93573,50.29356],[18.93885,50.28965],[18.9371,50.28727],[18.93966,50.28206],[18.93402,50.27553],[18.92953,50.27543],[18.93037,50.27338],[18.93413,50.27104],[18.93239,50.26883],[18.92716,50.26926],[18.90447,50.27371],[18.89758,50.27612],[18.89569,50.28028],[18.89783,50.28566],[18.89712,50.2878],[18.88292,50.29258],[18.88031,50.29473],[18.88311,50.29894],[18.88819,50.30164],[18.88326,50.30717],[18.88444,50.31183],[18.89149,50.31809],[18.89306,50.32558],[18.89568,50.32704],[18.92818,50.32151]]],terms_text:"Urząd Miasta Świętochłowice"},{id:"Szeged_2011",name:"Szeged orthophoto 2011",type:"tms",template:"http://e.tile.openstreetmap.hu/szeged-2011-10cm/{zoom}/{x}/{y}.png",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[10,22],polygon:[[[20.14599,46.22811],[20.13323,46.22904],[20.12584,46.22987],[20.12233,46.23099],[20.12085,46.23175],[20.11897,46.23351],[20.11312,46.24136],[20.11203,46.2433],[20.11157,46.245],[20.11119,46.24709],[20.11129,46.24877],[20.11159,46.25097],[20.11222,46.2528],[20.11299,46.25427],[20.11354,46.25535],[20.11477,46.2568],[20.13523,46.27685],[20.13664,46.27751],[20.13789,46.27803],[20.13939,46.27835],[20.14088,46.27846],[20.16115,46.27816],[20.16211,46.27816],[20.16359,46.2777],[20.16618,46.27615],[20.16878,46.27386],[20.16961,46.27144],[20.16959,46.27045],[20.17009,46.27044],[20.17399,46.26433],[20.17662,46.25829],[20.1948,46.25492],[20.18587,46.24481],[20.18466,46.24531],[20.17804,46.23831],[20.17818,46.23771],[20.17953,46.2371],[20.17257,46.23002],[20.16983,46.23504],[20.16877,46.23629],[20.16703,46.23785],[20.16594,46.23873],[20.16544,46.239],[20.16548,46.239],[20.16352,46.24014],[20.16021,46.2412],[20.15927,46.24153],[20.15927,46.24158],[20.15835,46.24185],[20.15495,46.24229],[20.15108,46.23515],[20.14938,46.23246],[20.14599,46.22811]]],terms_url:"http://www.geo.u-szeged.hu",terms_text:"SZTE TFGT - University of Szeged",best:true,description:"Inner part of Szeged"},{id:"TW_NLSC_WMS_EMAP6",name:"Taiwan e-Map Open Data",type:"tms",template:"https://wmts.nlsc.gov.tw/wmts/EMAP6_OPENDATA/default/GoogleMapsCompatible/{zoom}/{y}/{x}",zoomExtent:[0,15],polygon:[[[121.2237,25.76997],[122.2251,26.60305],[122.9312,22.57058],[120.6771,20.72799],[118.2509,23.26265],[118.3036,23.30751],[118.1978,24.34453],[118.1036,24.36172],[118.2283,24.49486],[118.4416,24.55302],[118.6024,24.46068],[120.0474,25.38843],[119.8935,25.78169],[119.787,26.2048],[120.4578,26.53253],[121.2237,25.76997]]],terms_url:"https://maps.nlsc.gov.tw/",terms_text:"© National Land Surveying and Mapping Center, Taiwan OGDL 1.0",icon:"https://osmlab.github.io/editor-layer-index/sources/asia/tw/Taiwane-MapOpenData.png"},{id:"TW_NLSC_WMS_LANDSECT",name:"Taiwan Land-Section Data",type:"wms",template:"https://wms.nlsc.gov.tw/wms?VERSION=1.1.1&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=LANDSECT&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[121.2237,25.76997],[122.2251,26.60305],[122.9312,22.57058],[120.6771,20.72799],[118.2509,23.26265],[118.3036,23.30751],[118.1978,24.34453],[118.1036,24.36172],[118.2283,24.49486],[118.4416,24.55302],[118.6024,24.46068],[120.0474,25.38843],[119.8935,25.78169],[119.787,26.2048],[120.4578,26.53253],[121.2237,25.76997]]],terms_url:"https://maps.nlsc.gov.tw/",terms_text:"© National Land Surveying and Mapping Center, Taiwan OGDL 1.0",icon:"https://osmlab.github.io/editor-layer-index/sources/asia/tw/Taiwane-MapOpenData.png"},{id:"TW_NLSC_WMS_Village",name:"Taiwan Village Boundaries",type:"wms",template:"https://wms.nlsc.gov.tw/wms?VERSION=1.1.1&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Village&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[121.2237,25.76997],[122.2251,26.60305],[122.9312,22.57058],[120.6771,20.72799],[118.2509,23.26265],[118.3036,23.30751],[118.1978,24.34453],[118.1036,24.36172],[118.2283,24.49486],[118.4416,24.55302],[118.6024,24.46068],[120.0474,25.38843],[119.8935,25.78169],[119.787,26.2048],[120.4578,26.53253],[121.2237,25.76997]]],terms_url:"https://maps.nlsc.gov.tw/",terms_text:"© National Land Surveying and Mapping Center, Taiwan OGDL 1.0",icon:"https://osmlab.github.io/editor-layer-index/sources/asia/tw/Taiwane-MapOpenData.png"},{id:"TEClines",name:"TEC bus lines",type:"wms",template:"https://geodata.tec-wl.be/arcgis/services/Lignes/MapServer/WMSServer?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[5.40236,49.50688],[5.81984,49.54253],[6.1714,49.62089],[5.85829,49.68846],[5.7704,49.85343],[5.894,50.11832],[6.15492,50.13593],[6.39662,50.36775],[6.28126,50.46576],[6.11372,50.7933],[5.72646,50.77941],[5.70998,50.85229],[5.61385,50.80024],[5.46278,50.79677],[5.21284,50.70119],[4.94917,50.80371],[4.75966,50.80718],[4.72121,50.88869],[4.60585,50.77941],[4.48775,50.85749],[4.36964,50.85056],[4.15266,50.72728],[3.59236,50.76725],[3.29848,50.76377],[3.04579,50.80024],[2.86177,50.72728],[2.89748,50.68553],[3.0815,50.76725],[3.19685,50.68031],[3.28749,50.52691],[3.67201,50.47625],[3.68574,50.31692],[3.99062,50.27305],[4.14992,50.17465],[4.24055,50.08661],[4.15266,49.99842],[4.18562,49.96486],[4.55366,49.94542],[4.69923,50.03372],[4.81184,50.0919],[4.84206,50.01607],[4.86677,49.90475],[4.85854,49.80382],[5.08925,49.7648],[5.34743,49.60843],[5.40236,49.50688]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/TECbusstops.png",overlay:true},{id:"TECstops",name:"TEC bus stops",type:"wms",template:"https://geodata.tec-wl.be/arcgis/services/Poteaux/MapServer/WMSServer?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[5.40236,49.50688],[5.81984,49.54253],[6.1714,49.62089],[5.85829,49.68846],[5.7704,49.85343],[5.894,50.11832],[6.15492,50.13593],[6.39662,50.36775],[6.28126,50.46576],[6.11372,50.7933],[5.72646,50.77941],[5.70998,50.85229],[5.61385,50.80024],[5.46278,50.79677],[5.21284,50.70119],[4.94917,50.80371],[4.75966,50.80718],[4.72121,50.88869],[4.60585,50.77941],[4.48775,50.85749],[4.36964,50.85056],[4.15266,50.72728],[3.59236,50.76725],[3.29848,50.76377],[3.04579,50.80024],[2.86177,50.72728],[2.89748,50.68553],[3.0815,50.76725],[3.19685,50.68031],[3.28749,50.52691],[3.67201,50.47625],[3.68574,50.31692],[3.99062,50.27305],[4.14992,50.17465],[4.24055,50.08661],[4.15266,49.99842],[4.18562,49.96486],[4.55366,49.94542],[4.69923,50.03372],[4.81184,50.0919],[4.84206,50.01607],[4.86677,49.90475],[4.85854,49.80382],[5.08925,49.7648],[5.34743,49.60843],[5.40236,49.50688]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/TECbusstops.png",overlay:true},{id:"teotonio_vilela",name:"Teotonio Vilela AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Teotonio%20Vilela&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.31164,-9.95468],[-36.31158,-9.94382],[-36.31145,-9.93197],[-36.31127,-9.92436],[-36.31123,-9.91848],[-36.31119,-9.91637],[-36.31141,-9.91324],[-36.3111,-9.90922],[-36.31108,-9.90318],[-36.31099,-9.89379],[-36.31089,-9.8842],[-36.31078,-9.87412],[-36.31068,-9.86457],[-36.3318,-9.86432],[-36.34001,-9.86437],[-36.3478,-9.86425],[-36.35917,-9.8642],[-36.37047,-9.86404],[-36.38448,-9.86386],[-36.40164,-9.86364],[-36.40221,-9.9225],[-36.40249,-9.93177],[-36.40259,-9.94183],[-36.40248,-9.94804],[-36.40266,-9.9537],[-36.3855,-9.95384],[-36.38283,-9.95392],[-36.37096,-9.95399],[-36.36232,-9.95423],[-36.34747,-9.95422],[-36.33287,-9.95446],[-36.3291,-9.95456],[-36.32089,-9.95459],[-36.31164,-9.95468]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"tnris.org",name:"Texas Orthophoto",type:"tms",template:"https://txgi.tnris.org/login/path/ecology-fiona-poem-romeo/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=texas&STYLE=&FORMAT=image/png&tileMatrixSet=0to20&tileMatrix=0to20:{zoom}&tileRow={y}&tileCol={x}",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-99.99854,34.56018],[-95.55655,33.99257],[-93.89679,33.61039],[-93.98468,32.04103],[-93.41614,31.02505],[-93.74531,29.57268],[-96.50492,28.23159],[-97.36942,26.95467],[-97.04867,25.8053],[-99.07342,26.32559],[-100.76599,29.02532],[-102.33154,29.84339],[-103.13355,28.88112],[-104.28879,29.28831],[-104.72698,29.94816],[-104.72697,30.23535],[-106.5345,31.78457],[-106.75767,31.78457],[-106.75766,32.04386],[-106.61848,32.04385],[-103.11949,32.04376],[-103.09544,36.50046],[-103.05798,36.54269],[-100.00042,36.54222],[-99.99854,34.56018]]],terms_url:"https://tnris.org/maps-and-data/online-mapping-services",terms_text:"Texas Natural Resources Information System"},{id:"US-TIGER-Roads-2017",name:"TIGER Roads 2017",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/openstreetmapus/cj8dftc3q1ecn2tnx9qhwyj0c/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcHVzIiwiYSI6ImNpcnF4Ym43dDBoOXZmYW04bWhlNWdrY2EifQ.4SFexuTUuKkZeerO3dgtmw",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[-124.76179,48.41301],[-124.60595,45.90245],[-124.99343,40.05576],[-122.53697,36.85661],[-119.97759,33.00641],[-117.67593,32.46302],[-114.86123,32.47999],[-111.00893,31.33601],[-108.19927,31.326],[-108.18711,31.77551],[-106.53072,31.78209],[-106.48421,31.74645],[-106.42932,31.75206],[-106.28689,31.56133],[-106.20525,31.4467],[-105.02053,30.5361],[-104.58819,29.69979],[-103.25189,28.89087],[-102.71736,29.39206],[-102.1514,29.74757],[-101.25529,29.48105],[-100.00624,28.00822],[-99.23511,26.4476],[-98.01091,25.9928],[-97.43502,25.8266],[-96.95553,25.98216],[-96.80617,27.79782],[-95.55633,28.58761],[-93.74053,29.47421],[-90.90285,28.85645],[-88.01567,28.99443],[-88.01625,30.00389],[-86.02775,30.00475],[-84.01879,28.99618],[-81.9972,25.98268],[-81.99666,25.01349],[-84.01656,25.01258],[-84.01601,24.00527],[-80.02,24.0071],[-79.89011,26.85507],[-80.02453,32.01613],[-75.41474,35.05319],[-74.02112,39.57279],[-72.00202,40.99125],[-69.87974,40.99205],[-69.84893,43.26199],[-66.94528,44.71049],[-67.75966,47.099],[-69.25051,47.51223],[-70.46149,46.21766],[-71.41227,45.25488],[-72.02225,45.00598],[-75.07988,44.98029],[-76.90231,43.80246],[-78.76239,43.62496],[-79.15798,43.44626],[-79.00601,42.80053],[-82.66248,41.68895],[-82.17616,43.58854],[-83.2814,46.13885],[-87.50645,48.01427],[-88.34922,48.29633],[-89.43531,47.98378],[-93.99811,49.00671],[-95.11054,49.412],[-96.01312,49.00605],[-123.32289,49.00429],[-123.22752,48.18499],[-124.76179,48.41301]],[[-160.57876,22.50629],[-160.57822,21.49846],[-158.74706,21.24398],[-157.50832,20.9958],[-155.99619,18.77902],[-154.62178,18.7587],[-154.68902,19.88057],[-156.29276,21.22259],[-157.50474,21.9985],[-159.00937,22.50702],[-160.57876,22.50629]],[[-167.1572,68.722],[-164.8554,67.0255],[-168.0022,66.0018],[-169.0087,66.0015],[-169.0075,64.9988],[-172.5143,63.8767],[-173.8197,59.7401],[-178.0001,52.2446],[-177.9993,51.2554],[-171.4689,51.8215],[-162.4025,53.9567],[-159.0076,55.0025],[-158.0191,55.0028],[-151.9963,55.9992],[-151.5003,57.9988],[-151.5013,58.992],[-138.516,58.9953],[-138.515,57.9986],[-133.9948,54.0032],[-130.0044,54.0043],[-130.0071,57.0001],[-131.9759,56.9995],[-135.123,59.7566],[-138.0072,59.9918],[-139.1716,60.4127],[-140.9874,61.0119],[-140.9684,69.9535],[-156.1769,71.5633],[-160.4136,70.7398],[-163.0218,69.9707],[-164.9717,68.9947],[-167.1572,68.722]],[[-68.2,17.8],[-64.32,17.38],[-64.64,18.36],[-65.33,18.57],[-67.9,18.67],[-68.2,17.8]],[[146.2,15.4],[145.7,15.6],[144.2,13.2],[144.8,12.9],[146.2,15.4]],[[179.99,52.2],[172,53.5],[172,52.5],[179.99,51],[179.99,52.2]]],description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/TIGER2017RoadsOverlay.png",overlay:true},{id:"US-TIGER-Roads-2018",name:"TIGER Roads 2018",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/openstreetmapus/cjo1wbulo3ub82ro1c9onlzmh/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcHVzIiwiYSI6ImNpcnF4Ym43dDBoOXZmYW04bWhlNWdrY2EifQ.4SFexuTUuKkZeerO3dgtmw",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[-124.76179,48.41301],[-124.60595,45.90245],[-124.99343,40.05576],[-122.53697,36.85661],[-119.97759,33.00641],[-117.67593,32.46302],[-114.86123,32.47999],[-111.00893,31.33601],[-108.19927,31.326],[-108.18711,31.77551],[-106.53072,31.78209],[-106.48421,31.74645],[-106.42932,31.75206],[-106.28689,31.56133],[-106.20525,31.4467],[-105.02053,30.5361],[-104.58819,29.69979],[-103.25189,28.89087],[-102.71736,29.39206],[-102.1514,29.74757],[-101.25529,29.48105],[-100.00624,28.00822],[-99.23511,26.4476],[-98.01091,25.9928],[-97.43502,25.8266],[-96.95553,25.98216],[-96.80617,27.79782],[-95.55633,28.58761],[-93.74053,29.47421],[-90.90285,28.85645],[-88.01567,28.99443],[-88.01625,30.00389],[-86.02775,30.00475],[-84.01879,28.99618],[-81.9972,25.98268],[-81.99666,25.01349],[-84.01656,25.01258],[-84.01601,24.00527],[-80.02,24.0071],[-79.89011,26.85507],[-80.02453,32.01613],[-75.41474,35.05319],[-74.02112,39.57279],[-72.00202,40.99125],[-69.87974,40.99205],[-69.84893,43.26199],[-66.94528,44.71049],[-67.75966,47.099],[-69.25051,47.51223],[-70.46149,46.21766],[-71.41227,45.25488],[-72.02225,45.00598],[-75.07988,44.98029],[-76.90231,43.80246],[-78.76239,43.62496],[-79.15798,43.44626],[-79.00601,42.80053],[-82.66248,41.68895],[-82.17616,43.58854],[-83.2814,46.13885],[-87.50645,48.01427],[-88.34922,48.29633],[-89.43531,47.98378],[-93.99811,49.00671],[-95.11054,49.412],[-96.01312,49.00605],[-123.32289,49.00429],[-123.22752,48.18499],[-124.76179,48.41301]],[[-160.57876,22.50629],[-160.57822,21.49846],[-158.74706,21.24398],[-157.50832,20.9958],[-155.99619,18.77902],[-154.62178,18.7587],[-154.68902,19.88057],[-156.29276,21.22259],[-157.50474,21.9985],[-159.00937,22.50702],[-160.57876,22.50629]],[[-167.1572,68.722],[-164.8554,67.0255],[-168.0022,66.0018],[-169.0087,66.0015],[-169.0075,64.9988],[-172.5143,63.8767],[-173.8197,59.7401],[-178.0001,52.2446],[-177.9993,51.2554],[-171.4689,51.8215],[-162.4025,53.9567],[-159.0076,55.0025],[-158.0191,55.0028],[-151.9963,55.9992],[-151.5003,57.9988],[-151.5013,58.992],[-138.516,58.9953],[-138.515,57.9986],[-133.9948,54.0032],[-130.0044,54.0043],[-130.0071,57.0001],[-131.9759,56.9995],[-135.123,59.7566],[-138.0072,59.9918],[-139.1716,60.4127],[-140.9874,61.0119],[-140.9684,69.9535],[-156.1769,71.5633],[-160.4136,70.7398],[-163.0218,69.9707],[-164.9717,68.9947],[-167.1572,68.722]],[[-68.2,17.8],[-64.32,17.38],[-64.64,18.36],[-65.33,18.57],[-67.9,18.67],[-68.2,17.8]],[[146.2,15.4],[145.7,15.6],[144.2,13.2],[144.8,12.9],[146.2,15.4]],[[179.99,52.2],[172,53.5],[172,52.5],[179.99,51],[179.99,52.2]]],description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/TIGER2017RoadsOverlay.png",overlay:true},{id:"US-TIGER-Roads-2019",name:"TIGER Roads 2019",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/openstreetmapus/ck0dxfa7602e61cmjk7p86749/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcHVzIiwiYSI6ImNpcnF4Ym43dDBoOXZmYW04bWhlNWdrY2EifQ.4SFexuTUuKkZeerO3dgtmw",endDate:"2019-01-01T00:00:00.000Z",startDate:"2019-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[-124.76179,48.41301],[-124.60595,45.90245],[-124.99343,40.05576],[-122.53697,36.85661],[-119.97759,33.00641],[-117.67593,32.46302],[-114.86123,32.47999],[-111.00893,31.33601],[-108.19927,31.326],[-108.18711,31.77551],[-106.53072,31.78209],[-106.48421,31.74645],[-106.42932,31.75206],[-106.28689,31.56133],[-106.20525,31.4467],[-105.02053,30.5361],[-104.58819,29.69979],[-103.25189,28.89087],[-102.71736,29.39206],[-102.1514,29.74757],[-101.25529,29.48105],[-100.00624,28.00822],[-99.23511,26.4476],[-98.01091,25.9928],[-97.43502,25.8266],[-96.95553,25.98216],[-96.80617,27.79782],[-95.55633,28.58761],[-93.74053,29.47421],[-90.90285,28.85645],[-88.01567,28.99443],[-88.01625,30.00389],[-86.02775,30.00475],[-84.01879,28.99618],[-81.9972,25.98268],[-81.99666,25.01349],[-84.01656,25.01258],[-84.01601,24.00527],[-80.02,24.0071],[-79.89011,26.85507],[-80.02453,32.01613],[-75.41474,35.05319],[-74.02112,39.57279],[-72.00202,40.99125],[-69.87974,40.99205],[-69.84893,43.26199],[-66.94528,44.71049],[-67.75966,47.099],[-69.25051,47.51223],[-70.46149,46.21766],[-71.41227,45.25488],[-72.02225,45.00598],[-75.07988,44.98029],[-76.90231,43.80246],[-78.76239,43.62496],[-79.15798,43.44626],[-79.00601,42.80053],[-82.66248,41.68895],[-82.17616,43.58854],[-83.2814,46.13885],[-87.50645,48.01427],[-88.34922,48.29633],[-89.43531,47.98378],[-93.99811,49.00671],[-95.11054,49.412],[-96.01312,49.00605],[-123.32289,49.00429],[-123.22752,48.18499],[-124.76179,48.41301]],[[-160.57876,22.50629],[-160.57822,21.49846],[-158.74706,21.24398],[-157.50832,20.9958],[-155.99619,18.77902],[-154.62178,18.7587],[-154.68902,19.88057],[-156.29276,21.22259],[-157.50474,21.9985],[-159.00937,22.50702],[-160.57876,22.50629]],[[-167.1572,68.722],[-164.8554,67.0255],[-168.0022,66.0018],[-169.0087,66.0015],[-169.0075,64.9988],[-172.5143,63.8767],[-173.8197,59.7401],[-178.0001,52.2446],[-177.9993,51.2554],[-171.4689,51.8215],[-162.4025,53.9567],[-159.0076,55.0025],[-158.0191,55.0028],[-151.9963,55.9992],[-151.5003,57.9988],[-151.5013,58.992],[-138.516,58.9953],[-138.515,57.9986],[-133.9948,54.0032],[-130.0044,54.0043],[-130.0071,57.0001],[-131.9759,56.9995],[-135.123,59.7566],[-138.0072,59.9918],[-139.1716,60.4127],[-140.9874,61.0119],[-140.9684,69.9535],[-156.1769,71.5633],[-160.4136,70.7398],[-163.0218,69.9707],[-164.9717,68.9947],[-167.1572,68.722]],[[-68.2,17.8],[-64.32,17.38],[-64.64,18.36],[-65.33,18.57],[-67.9,18.67],[-68.2,17.8]],[[146.2,15.4],[145.7,15.6],[144.2,13.2],[144.8,12.9],[146.2,15.4]],[[179.99,52.2],[172,53.5],[172,52.5],[179.99,51],[179.99,52.2]]],description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/TIGER2017RoadsOverlay.png",overlay:true},{id:"tirol.gv.at-contourlines",name:"Tiris: contour lines",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Hoehenschichtlinien_20m&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[15,22],polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif",overlay:true},{id:"tirol.gv.at-DGM",name:"Tiris: DGM (Terrain model)",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Schummerung_Gelaendemodell&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{id:"tirol.gv.at-DOM",name:"Tiris: DOM (Surface model)",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Schummerung_Oberflaechenmodell&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{id:"tirol.gv.at-orthofoto",name:"Tiris: orthophoto",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/orthofoto/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Aktuell_RGB&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{id:"tirol.gv.at-orthofoto-cir",name:"Tiris: orthophoto infrared",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/orthofoto/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Aktuell_CIR&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{id:"lu.geoportail.opendata.topo",name:"Topographical Map geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/topo/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png",endDate:"2010-07-20T00:00:00.000Z",startDate:"2013-07-19T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/cartes-topographiques-services-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"Torokbalint-orthophoto-2013",name:"Törökbálint orthophoto 2013",type:"wms",template:"https://terkep.torokbalint.hu/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ORTO_2013_5CM_2013SZEPT_TAKARASSAL_512_512&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&TRANSPARENT=true",projection:"EPSG:3857",endDate:"2013-09-01T00:00:00.000Z",startDate:"2013-09-01T00:00:00.000Z",polygon:[[[18.91731,47.40854],[18.91691,47.40849],[18.91606,47.40885],[18.91565,47.40905],[18.91458,47.40938],[18.91385,47.4097],[18.91376,47.40976],[18.91314,47.41038],[18.9122,47.41098],[18.91041,47.41175],[18.90932,47.41258],[18.90841,47.41317],[18.90676,47.41443],[18.90481,47.41568],[18.90362,47.41597],[18.90317,47.41616],[18.90062,47.41742],[18.90042,47.41755],[18.89968,47.41797],[18.89888,47.41818],[18.89814,47.41835],[18.89752,47.41855],[18.89666,47.41901],[18.8958,47.41954],[18.89421,47.4205],[18.89055,47.42209],[18.88743,47.42332],[18.88554,47.42424],[18.88436,47.42476],[18.88189,47.42553],[18.88085,47.42598],[18.8801,47.42629],[18.87956,47.42649],[18.87741,47.42738],[18.87602,47.42789],[18.87508,47.42836],[18.87281,47.42934],[18.87164,47.42968],[18.8714,47.43001],[18.87259,47.4323],[18.87273,47.43278],[18.87274,47.43324],[18.87244,47.43482],[18.87206,47.43526],[18.86891,47.43712],[18.86561,47.4375],[18.86466,47.43774],[18.86404,47.43809],[18.86378,47.43791],[18.8634,47.43784],[18.863,47.43798],[18.85195,47.44715],[18.85217,47.44847],[18.8593,47.45387],[18.85839,47.45512],[18.85777,47.45568],[18.85718,47.456],[18.8572,47.45636],[18.86015,47.45839],[18.86194,47.4595],[18.86099,47.46071],[18.85979,47.46201],[18.85929,47.46236],[18.85859,47.46272],[18.85713,47.46333],[18.85634,47.4636],[18.85628,47.46403],[18.85719,47.46528],[18.85663,47.46551],[18.85653,47.4658],[18.85693,47.46656],[18.85836,47.46953],[18.85826,47.4698],[18.85827,47.46991],[18.85838,47.47019],[18.85844,47.47027],[18.85852,47.47033],[18.85862,47.47036],[18.85873,47.47038],[18.8589,47.47036],[18.86146,47.46973],[18.86277,47.46929],[18.86617,47.46785],[18.86794,47.46656],[18.86997,47.46524],[18.8708,47.46457],[18.87268,47.46333],[18.87536,47.46113],[18.87687,47.45927],[18.88943,47.45987],[18.89024,47.45988],[18.90371,47.45534],[18.90427,47.4552],[18.90493,47.45506],[18.90542,47.4551],[18.90567,47.45505],[18.90629,47.45477],[18.90648,47.45453],[18.9066,47.45447],[18.90678,47.45439],[18.90811,47.45399],[18.90837,47.45395],[18.9089,47.45384],[18.90954,47.4537],[18.91326,47.45317],[18.91353,47.4532],[18.91372,47.45317],[18.91386,47.45307],[18.91431,47.45294],[18.91598,47.453],[18.91807,47.45317],[18.91846,47.453],[18.91903,47.45161],[18.92173,47.4508],[18.92246,47.45069],[18.92418,47.45025],[18.92756,47.44989],[18.92972,47.44951],[18.93221,47.44922],[18.93347,47.44932],[18.93921,47.44935],[18.94229,47.44903],[18.94549,47.4489],[18.94826,47.4487],[18.95003,47.44824],[18.9547,47.44722],[18.95749,47.44692],[18.95802,47.44715],[18.95844,47.44708],[18.95877,47.44666],[18.96145,47.4393],[18.96368,47.4358],[18.96598,47.43288],[18.96899,47.4297],[18.9701,47.42704],[18.97009,47.42679],[18.96695,47.4246],[18.95735,47.41842],[18.95676,47.4184],[18.95606,47.41813],[18.95385,47.41739],[18.95144,47.41665],[18.95131,47.41664],[18.9327,47.41703],[18.93257,47.41696],[18.93201,47.41674],[18.93149,47.4164],[18.93114,47.41612],[18.92123,47.41091],[18.91957,47.40987],[18.91927,47.40961],[18.91731,47.40854]]],terms_url:"http://www.torokbalint.hu",terms_text:"Törökbálint",description:"5 cm resolution bald image"},{id:"Torokbalint-orthophoto-2015",name:"Törökbálint orthophoto 2015",type:"wms",template:"https://terkep.torokbalint.hu/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=TBORTO_2015_20160218&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&TRANSPARENT=true",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[18.91731,47.40854],[18.91691,47.40849],[18.91606,47.40885],[18.91565,47.40905],[18.91458,47.40938],[18.91385,47.4097],[18.91376,47.40976],[18.91314,47.41038],[18.9122,47.41098],[18.91041,47.41175],[18.90932,47.41258],[18.90841,47.41317],[18.90676,47.41443],[18.90481,47.41568],[18.90362,47.41597],[18.90317,47.41616],[18.90062,47.41742],[18.90042,47.41755],[18.89968,47.41797],[18.89888,47.41818],[18.89814,47.41835],[18.89752,47.41855],[18.89666,47.41901],[18.8958,47.41954],[18.89421,47.4205],[18.89055,47.42209],[18.88743,47.42332],[18.88554,47.42424],[18.88436,47.42476],[18.88189,47.42553],[18.88085,47.42598],[18.8801,47.42629],[18.87956,47.42649],[18.87741,47.42738],[18.87602,47.42789],[18.87508,47.42836],[18.87281,47.42934],[18.87164,47.42968],[18.8714,47.43001],[18.87259,47.4323],[18.87273,47.43278],[18.87274,47.43324],[18.87244,47.43482],[18.87206,47.43526],[18.86891,47.43712],[18.86561,47.4375],[18.86466,47.43774],[18.86404,47.43809],[18.86378,47.43791],[18.8634,47.43784],[18.863,47.43798],[18.85195,47.44715],[18.85217,47.44847],[18.8593,47.45387],[18.85839,47.45512],[18.85777,47.45568],[18.85718,47.456],[18.8572,47.45636],[18.86015,47.45839],[18.86194,47.4595],[18.86099,47.46071],[18.85979,47.46201],[18.85929,47.46236],[18.85859,47.46272],[18.85713,47.46333],[18.85634,47.4636],[18.85628,47.46403],[18.85719,47.46528],[18.85663,47.46551],[18.85653,47.4658],[18.85693,47.46656],[18.85836,47.46953],[18.85826,47.4698],[18.85827,47.46991],[18.85838,47.47019],[18.85844,47.47027],[18.85852,47.47033],[18.85862,47.47036],[18.85873,47.47038],[18.8589,47.47036],[18.86146,47.46973],[18.86277,47.46929],[18.86617,47.46785],[18.86794,47.46656],[18.86997,47.46524],[18.8708,47.46457],[18.87268,47.46333],[18.87536,47.46113],[18.87687,47.45927],[18.88943,47.45987],[18.89024,47.45988],[18.90371,47.45534],[18.90427,47.4552],[18.90493,47.45506],[18.90542,47.4551],[18.90567,47.45505],[18.90629,47.45477],[18.90648,47.45453],[18.9066,47.45447],[18.90678,47.45439],[18.90811,47.45399],[18.90837,47.45395],[18.9089,47.45384],[18.90954,47.4537],[18.91326,47.45317],[18.91353,47.4532],[18.91372,47.45317],[18.91386,47.45307],[18.91431,47.45294],[18.91598,47.453],[18.91807,47.45317],[18.91846,47.453],[18.91903,47.45161],[18.92173,47.4508],[18.92246,47.45069],[18.92418,47.45025],[18.92756,47.44989],[18.92972,47.44951],[18.93221,47.44922],[18.93347,47.44932],[18.93921,47.44935],[18.94229,47.44903],[18.94549,47.4489],[18.94826,47.4487],[18.95003,47.44824],[18.9547,47.44722],[18.95749,47.44692],[18.95802,47.44715],[18.95844,47.44708],[18.95877,47.44666],[18.96145,47.4393],[18.96368,47.4358],[18.96598,47.43288],[18.96899,47.4297],[18.9701,47.42704],[18.97009,47.42679],[18.96695,47.4246],[18.95735,47.41842],[18.95676,47.4184],[18.95606,47.41813],[18.95385,47.41739],[18.95144,47.41665],[18.95131,47.41664],[18.9327,47.41703],[18.93257,47.41696],[18.93201,47.41674],[18.93149,47.4164],[18.93114,47.41612],[18.92123,47.41091],[18.91957,47.40987],[18.91927,47.40961],[18.91731,47.40854]]],terms_url:"http://www.torokbalint.hu/",terms_text:"Törökbálint",best:true,description:"5 cm resolution bald image"},{id:"Toulouse-Orthophotoplan-2007",name:"Toulouse - Orthophotoplan 2007",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2007&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2007-01-01T00:00:00.000Z",startDate:"2007-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.192,43.63288],[1.20154,43.63297],[1.20111,43.65549],[1.2228,43.6557],[1.22262,43.66534],[1.22753,43.66538],[1.22754,43.66564],[1.23376,43.66569],[1.23376,43.66502],[1.23512,43.66503],[1.23509,43.66707],[1.24436,43.66716],[1.24416,43.67439],[1.2494,43.67443],[1.2494,43.67466],[1.25557,43.67472],[1.25557,43.67445],[1.25695,43.67447],[1.25688,43.67853],[1.28749,43.67883],[1.28708,43.70132],[1.30882,43.70146],[1.30865,43.71277],[1.33033,43.71295],[1.33002,43.73052],[1.33671,43.73058],[1.33673,43.73122],[1.37343,43.73105],[1.37358,43.72458],[1.46045,43.72529],[1.46078,43.7028],[1.48249,43.70295],[1.48298,43.66921],[1.50468,43.66936],[1.50484,43.65812],[1.52655,43.65827],[1.52669,43.64703],[1.54837,43.64716],[1.54854,43.63594],[1.57022,43.63608],[1.57051,43.61358],[1.54882,43.61343],[1.5491,43.59095],[1.57077,43.59107],[1.57094,43.57983],[1.57937,43.57989],[1.57948,43.57377],[1.58091,43.57378],[1.58109,43.55738],[1.57123,43.55731],[1.57165,43.52355],[1.39848,43.52226],[1.39865,43.51101],[1.3121,43.51025],[1.3119,43.52152],[1.29026,43.52131],[1.28986,43.54382],[1.31152,43.54401],[1.31133,43.55526],[1.30369,43.55519],[1.30361,43.55951],[1.29554,43.55943],[1.29554,43.55955],[1.28956,43.55945],[1.28929,43.57754],[1.26757,43.57736],[1.2674,43.58861],[1.25355,43.5885],[1.25338,43.59563],[1.2518,43.59563],[1.2518,43.59494],[1.23504,43.59478],[1.23504,43.5946],[1.22396,43.5946],[1.22394,43.59947],[1.21397,43.5993],[1.21388,43.60464],[1.20206,43.60448],[1.20195,43.61048],[1.19243,43.61037],[1.192,43.63288]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole"},{id:"Toulouse-Orthophotoplan-2011",name:"Toulouse - Orthophotoplan 2011",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2011&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.11351,43.68676],[1.13518,43.68708],[1.13489,43.69835],[1.17829,43.69903],[1.17799,43.71028],[1.19966,43.71061],[1.19934,43.72187],[1.24274,43.72253],[1.24243,43.73375],[1.26415,43.73409],[1.26383,43.74536],[1.28553,43.74565],[1.28525,43.75693],[1.30692,43.75723],[1.30664,43.76848],[1.32834,43.76879],[1.32808,43.78003],[1.43673,43.78158],[1.43731,43.7591],[1.45901,43.75937],[1.45933,43.74815],[1.48103,43.7484],[1.48133,43.73718],[1.50303,43.73741],[1.50359,43.71497],[1.52531,43.71518],[1.52561,43.70401],[1.54727,43.70426],[1.54757,43.69304],[1.5692,43.69329],[1.56957,43.68203],[1.5912,43.68227],[1.59174,43.6598],[1.61342,43.66003],[1.61372,43.64883],[1.63538,43.64908],[1.63841,43.51407],[1.29216,43.50947],[1.29186,43.5207],[1.27021,43.5204],[1.26988,43.53164],[1.24823,43.53133],[1.2476,43.55378],[1.22596,43.55349],[1.22568,43.56472],[1.20398,43.56442],[1.20331,43.5869],[1.18162,43.58656],[1.18102,43.60904],[1.15928,43.60869],[1.15896,43.61995],[1.13726,43.61962],[1.13659,43.64209],[1.11491,43.64176],[1.11351,43.68676]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole"},{id:"Toulouse-Orthophotoplan-2013",name:"Toulouse - Orthophotoplan 2013",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2013&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.11351,43.68676],[1.13518,43.68708],[1.13489,43.69835],[1.17829,43.69903],[1.17799,43.71028],[1.19966,43.71061],[1.19934,43.72187],[1.24274,43.72253],[1.24243,43.73375],[1.26415,43.73409],[1.26383,43.74536],[1.28553,43.74565],[1.28525,43.75693],[1.30692,43.75723],[1.30664,43.76848],[1.32834,43.76879],[1.32808,43.78003],[1.43673,43.78158],[1.43731,43.7591],[1.45901,43.75937],[1.45933,43.74815],[1.48103,43.7484],[1.48133,43.73718],[1.50303,43.73741],[1.50359,43.71497],[1.52531,43.71518],[1.52561,43.70401],[1.54727,43.70426],[1.54757,43.69304],[1.5692,43.69329],[1.56957,43.68203],[1.5912,43.68227],[1.59174,43.6598],[1.61342,43.66003],[1.61372,43.64883],[1.63538,43.64908],[1.63841,43.51407],[1.29216,43.50947],[1.29186,43.5207],[1.27021,43.5204],[1.26988,43.53164],[1.24823,43.53133],[1.2476,43.55378],[1.22596,43.55349],[1.22568,43.56472],[1.20398,43.56442],[1.20331,43.5869],[1.18162,43.58656],[1.18102,43.60904],[1.15928,43.60869],[1.15896,43.61995],[1.13726,43.61962],[1.13659,43.64209],[1.11491,43.64176],[1.11351,43.68676]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole"},{id:"Toulouse-Orthophotoplan-2015",name:"Toulouse - Orthophotoplan 2015",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2015&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.11351,43.68676],[1.13518,43.68708],[1.13489,43.69835],[1.17829,43.69903],[1.17799,43.71028],[1.19966,43.71061],[1.19934,43.72187],[1.24274,43.72253],[1.24243,43.73375],[1.26415,43.73409],[1.26383,43.74536],[1.28553,43.74565],[1.28525,43.75693],[1.30692,43.75723],[1.30664,43.76848],[1.32834,43.76879],[1.32808,43.78003],[1.43673,43.78158],[1.43731,43.7591],[1.45901,43.75937],[1.45933,43.74815],[1.48103,43.7484],[1.48133,43.73718],[1.50303,43.73741],[1.50359,43.71497],[1.52531,43.71518],[1.52561,43.70401],[1.54727,43.70426],[1.54757,43.69304],[1.5692,43.69329],[1.56957,43.68203],[1.5912,43.68227],[1.59174,43.6598],[1.61342,43.66003],[1.61372,43.64883],[1.63538,43.64908],[1.63841,43.51407],[1.29216,43.50947],[1.29186,43.5207],[1.27021,43.5204],[1.26988,43.53164],[1.24823,43.53133],[1.2476,43.55378],[1.22596,43.55349],[1.22568,43.56472],[1.20398,43.56442],[1.20331,43.5869],[1.18162,43.58656],[1.18102,43.60904],[1.15928,43.60869],[1.15896,43.61995],[1.13726,43.61962],[1.13659,43.64209],[1.11491,43.64176],[1.11351,43.68676]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole"},{id:"Toulouse-Orthophotoplan-2017",name:"Toulouse - Orthophotoplan 2017",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2017&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.11351,43.68676],[1.13518,43.68708],[1.13489,43.69835],[1.17829,43.69903],[1.17799,43.71028],[1.19966,43.71061],[1.19934,43.72187],[1.24274,43.72253],[1.24243,43.73375],[1.26415,43.73409],[1.26383,43.74536],[1.28553,43.74565],[1.28525,43.75693],[1.30692,43.75723],[1.30664,43.76848],[1.32834,43.76879],[1.32808,43.78003],[1.43673,43.78158],[1.43731,43.7591],[1.45901,43.75937],[1.45933,43.74815],[1.48103,43.7484],[1.48133,43.73718],[1.50303,43.73741],[1.50359,43.71497],[1.52531,43.71518],[1.52561,43.70401],[1.54727,43.70426],[1.54757,43.69304],[1.5692,43.69329],[1.56957,43.68203],[1.5912,43.68227],[1.59174,43.6598],[1.61342,43.66003],[1.61372,43.64883],[1.63538,43.64908],[1.63841,43.51407],[1.29216,43.50947],[1.29186,43.5207],[1.27021,43.5204],[1.26988,43.53164],[1.24823,43.53133],[1.2476,43.55378],[1.22596,43.55349],[1.22568,43.56472],[1.20398,43.56442],[1.20331,43.5869],[1.18162,43.58656],[1.18102,43.60904],[1.15928,43.60869],[1.15896,43.61995],[1.13726,43.61962],[1.13659,43.64209],[1.11491,43.64176],[1.11351,43.68676]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole",best:true},{id:"Tours-Orthophoto-2008_2010",name:"Tours - Orthophotos 2008-2010",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/tours/{zoom}/{x}/{y}",endDate:"2011-01-01T00:00:00.000Z",startDate:"2008-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[0.54575,47.46526],[0.54585,47.46082],[0.53922,47.4607],[0.53935,47.45624],[0.5328,47.4561],[0.5329,47.45157],[0.52619,47.4514],[0.52659,47.44249],[0.50009,47.44207],[0.50024,47.43758],[0.4936,47.43743],[0.4937,47.43293],[0.46061,47.43246],[0.46072,47.42798],[0.4541,47.42781],[0.45493,47.40539],[0.46154,47.40545],[0.46191,47.39649],[0.46843,47.3966],[0.46913,47.37864],[0.47571,47.37876],[0.47621,47.3652],[0.48283,47.36535],[0.48296,47.36083],[0.47635,47.36074],[0.47665,47.35173],[0.47005,47.35162],[0.4702,47.34713],[0.46375,47.34701],[0.45714,47.34241],[0.45729,47.33791],[0.45067,47.33781],[0.45084,47.33331],[0.44422,47.3332],[0.44438,47.32871],[0.43114,47.3285],[0.43163,47.315],[0.43824,47.31511],[0.43838,47.31062],[0.47145,47.31114],[0.47131,47.31566],[0.47789,47.31575],[0.47807,47.31128],[0.48468,47.31136],[0.48486,47.30687],[0.49144,47.30698],[0.49174,47.29797],[0.48516,47.29787],[0.48543,47.28887],[0.47885,47.28877],[0.47916,47.27978],[0.48578,47.2799],[0.48591,47.27539],[0.49254,47.2755],[0.49267,47.27101],[0.4993,47.27111],[0.49943,47.26661],[0.51927,47.26692],[0.51942,47.26242],[0.52602,47.26252],[0.52587,47.26702],[0.5457,47.26734],[0.54555,47.27183],[0.55877,47.27204],[0.55863,47.27652],[0.56523,47.27663],[0.56508,47.28112],[0.57168,47.28123],[0.57152,47.28572],[0.57814,47.28583],[0.57799,47.29033],[0.5846,47.29043],[0.58431,47.29942],[0.5975,47.29961],[0.59766,47.29514],[0.65716,47.296],[0.6573,47.29151],[0.6705,47.29172],[0.67035,47.29621],[0.68362,47.29637],[0.68343,47.30089],[0.69006,47.30096],[0.68992,47.30547],[0.7362,47.30612],[0.73608,47.31061],[0.7559,47.31089],[0.75577,47.31539],[0.76238,47.31547],[0.76223,47.31999],[0.77549,47.32015],[0.77497,47.33882],[0.77458,47.35163],[0.76804,47.35159],[0.76759,47.36053],[0.77424,47.36062],[0.77335,47.39213],[0.76674,47.39202],[0.76644,47.40108],[0.77306,47.40111],[0.77289,47.41013],[0.76618,47.41002],[0.76603,47.4145],[0.75276,47.4143],[0.75298,47.40981],[0.74624,47.4097],[0.74594,47.42322],[0.73923,47.42315],[0.73887,47.43661],[0.73233,47.43652],[0.73219,47.44106],[0.7255,47.44098],[0.72542,47.44535],[0.73188,47.44548],[0.73185,47.45011],[0.73845,47.45023],[0.73831,47.45463],[0.74494,47.45474],[0.74432,47.4772],[0.73107,47.47697],[0.7309,47.48154],[0.71762,47.48126],[0.71779,47.47684],[0.69777,47.4765],[0.69805,47.47198],[0.69145,47.47189],[0.69173,47.46302],[0.6851,47.46293],[0.68494,47.46735],[0.67826,47.46733],[0.67798,47.47622],[0.67141,47.47616],[0.67104,47.4882],[0.65773,47.48797],[0.65782,47.48504],[0.65119,47.48483],[0.65147,47.47586],[0.64482,47.47572],[0.64493,47.47126],[0.6118,47.47075],[0.61188,47.46631],[0.60528,47.46612],[0.60542,47.46166],[0.59888,47.46155],[0.59902,47.45709],[0.57249,47.45669],[0.57218,47.46565],[0.54575,47.46526]]],terms_url:"https://wiki.openstreetmap.org/wiki/Tours/Orthophoto",terms_text:"Orthophoto Tour(s) Plus 2008"},{id:"Tours-Orthophoto-2013",name:"Tours - Orthophotos 2013",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/tours_2013/{zoom}/{x}/{y}",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[0.77512,47.32983],[0.77427,47.35617],[0.77053,47.35611],[0.77024,47.36512],[0.77398,47.36517],[0.7728,47.40148],[0.7904,47.40147],[0.78988,47.4103],[0.79117,47.41047],[0.79108,47.41942],[0.79392,47.41942],[0.79319,47.43733],[0.79834,47.43742],[0.79808,47.45544],[0.80044,47.45541],[0.80138,47.46426],[0.80074,47.46899],[0.79396,47.47331],[0.78405,47.47323],[0.78387,47.47871],[0.77606,47.47859],[0.77585,47.48204],[0.77066,47.48219],[0.77044,47.4859],[0.76096,47.49092],[0.75718,47.49092],[0.73753,47.50336],[0.7259,47.50588],[0.71113,47.50576],[0.70418,47.50408],[0.69109,47.50038],[0.69045,47.49718],[0.67757,47.49683],[0.67757,47.49353],[0.66427,47.49301],[0.6635,47.48953],[0.65088,47.48958],[0.65133,47.48032],[0.64734,47.4803],[0.64747,47.47852],[0.64474,47.47846],[0.64479,47.47575],[0.64238,47.47578],[0.64225,47.47302],[0.63835,47.47294],[0.63792,47.47131],[0.60513,47.47079],[0.60513,47.46632],[0.59852,47.46603],[0.59878,47.46156],[0.592,47.46156],[0.59226,47.45976],[0.58084,47.45971],[0.58007,47.46145],[0.57234,47.46139],[0.57222,47.46512],[0.55874,47.46489],[0.5466,47.46052],[0.53269,47.45355],[0.52677,47.45315],[0.52677,47.45152],[0.52231,47.45123],[0.52256,47.44804],[0.51977,47.44776],[0.52007,47.44247],[0.4975,47.4416],[0.49716,47.44049],[0.49355,47.44015],[0.49355,47.43573],[0.47943,47.43575],[0.46171,47.42819],[0.45643,47.42088],[0.45489,47.41229],[0.45506,47.40218],[0.46149,47.40193],[0.46167,47.39641],[0.46879,47.39602],[0.47016,47.35173],[0.45677,47.3515],[0.45729,47.34254],[0.43085,47.34196],[0.43196,47.30602],[0.47154,47.3067],[0.47257,47.28004],[0.48527,47.28004],[0.48578,47.27084],[0.49935,47.27107],[0.49917,47.26245],[0.55273,47.26304],[0.55222,47.27201],[0.56561,47.27224],[0.56526,47.28156],[0.59118,47.28156],[0.59067,47.29099],[0.66912,47.29169],[0.6832,47.29564],[0.6832,47.30077],[0.69658,47.30123],[0.69641,47.3024],[0.71006,47.30245],[0.72293,47.30589],[0.72285,47.31043],[0.74165,47.31084],[0.75426,47.31392],[0.7625,47.31815],[0.76207,47.32013],[0.76619,47.32009],[0.76956,47.32207],[0.77233,47.32508],[0.77336,47.3267],[0.77512,47.32983]]],terms_url:"https://wiki.openstreetmap.org/wiki/Tours/Orthophoto",terms_text:"Orthophoto Tour(s)plus 2013"},{id:"trafikverket-baninfo",name:"Trafikverket Railway Network",type:"wms",template:"https://geo-baninfo.trafikverket.se/mapservice/wms.axd/BanInfo?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Spar_Huvud_och_sidospar&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[7,20],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.trafikverket.se",terms_text:"© Trafikverket, CC0",description:"Swedish railway network, including sidings",icon:"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png",overlay:true},{id:"trafikverket-vagnat",name:"Trafikverket Road Network",type:"wms",template:"https://geo-netinfo.trafikverket.se/mapservice/wms.axd/NetInfo?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vagtrafiknat,Funkvagklass,Farjeled&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[13,20],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.trafikverket.se",terms_text:"© Trafikverket, CC0",description:"Swedish NVDB road network",icon:"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png",overlay:true},{id:"trafikverket-vagnat-extra",name:"Trafikverket Road Network extra",type:"wms",template:"https://geo-netinfo.trafikverket.se/mapservice/wms.axd/NetInfo?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vagnummer,Vaghinder,Rastplats,Rastficka,Hallplats,Farthinder,BroTunnel,ATK_Matplats&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[3,20],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.trafikverket.se",terms_text:"© Trafikverket, CC0",description:"Swedish NVDB extra details: Highway reference, traffic calming, rest area, bus stop, bridge, tunnel, speed camera",icon:"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png",overlay:true},{id:"trafikverket-vagnat-navn",name:"Trafikverket Street Names",type:"tms",template:"https://mapproxy.openstreetmap.se/tiles/1.0.0/nvdb_names/EPSG3857/{zoom}/{x}/{y}.png",zoomExtent:[15,19],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.trafikverket.se",terms_text:"© Trafikverket, CC0",description:"Swedish NVDB street names",icon:"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png",overlay:true},{id:"US_Forest_Service_roads_overlay",name:"U.S. Forest Roads Overlay",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/glassman/cjf4qjmps0tgv2qpahj977mvz/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1IjoiZ2xhc3NtYW4iLCJhIjoiRjk3dWdwYyJ9.Tg_fMJWxygeKBgVTrZHmGA",zoomExtent:[0,20],polygon:[[[-124.76179,48.41301],[-124.60595,45.90245],[-124.99343,40.05576],[-122.53697,36.85661],[-119.97759,33.00641],[-117.67593,32.46302],[-114.86123,32.47999],[-111.00893,31.33601],[-108.19927,31.326],[-108.18711,31.77551],[-106.53072,31.78209],[-106.48421,31.74645],[-106.42932,31.75206],[-106.28689,31.56133],[-106.20525,31.4467],[-105.02053,30.5361],[-104.58819,29.69979],[-103.25189,28.89087],[-102.71736,29.39206],[-102.1514,29.74757],[-101.25529,29.48105],[-100.00624,28.00822],[-99.23511,26.4476],[-98.01091,25.9928],[-97.43502,25.8266],[-96.95553,25.98216],[-96.80617,27.79782],[-95.55633,28.58761],[-93.74053,29.47421],[-90.90285,28.85645],[-88.01567,28.99443],[-88.01625,30.00389],[-86.02775,30.00475],[-84.01879,28.99618],[-81.9972,25.98268],[-81.99666,25.01349],[-84.01656,25.01258],[-84.01601,24.00527],[-80.02,24.0071],[-79.89011,26.85507],[-80.02453,32.01613],[-75.41474,35.05319],[-74.02112,39.57279],[-72.00202,40.99125],[-69.87974,40.99205],[-69.84893,43.26199],[-66.94528,44.71049],[-67.75966,47.099],[-69.25051,47.51223],[-70.46149,46.21766],[-71.41227,45.25488],[-72.02225,45.00598],[-75.07988,44.98029],[-76.90231,43.80246],[-78.76239,43.62496],[-79.15798,43.44626],[-79.00601,42.80053],[-82.66248,41.68895],[-82.17616,43.58854],[-83.2814,46.13885],[-87.50645,48.01427],[-88.34922,48.29633],[-89.43531,47.98378],[-93.99811,49.00671],[-95.11054,49.412],[-96.01312,49.00605],[-123.32289,49.00429],[-123.22752,48.18499],[-124.76179,48.41301]],[[-160.57876,22.50629],[-160.57822,21.49846],[-158.74706,21.24398],[-157.50832,20.9958],[-155.99619,18.77902],[-154.62178,18.7587],[-154.68902,19.88057],[-156.29276,21.22259],[-157.50474,21.9985],[-159.00937,22.50702],[-160.57876,22.50629]],[[-167.15715,68.72197],[-164.8554,67.02551],[-168.0022,66.00175],[-169.00874,66.00155],[-169.00754,64.99877],[-172.51433,63.87673],[-173.8197,59.74014],[-162.50181,58.00058],[-160.0159,58.00124],[-160.01497,57.00003],[-160.50548,56.9999],[-165.80926,54.82485],[-178.0001,52.24465],[-177.9993,51.25543],[-171.46891,51.82153],[-162.40251,53.95666],[-159.00757,55.0025],[-158.01907,55.00278],[-151.99632,55.99919],[-151.50034,57.99879],[-151.50129,58.99198],[-138.516,58.99532],[-138.51505,57.99864],[-133.99482,54.00317],[-130.00444,54.00434],[-130.00708,57.00005],[-131.97588,56.99952],[-135.12299,59.7566],[-138.00718,59.9918],[-139.17159,60.41272],[-140.9874,61.01186],[-140.9684,69.95351],[-156.17689,71.56333],[-160.41363,70.73977],[-163.02183,69.97074],[-164.9717,68.99469],[-167.15715,68.72197]]],description:"Highway: Green casing = unclassified. Brown casing = track. Surface: gravel = light brown fill, Asphalt = black, paved = gray, ground =white, concrete = blue, grass = green. Seasonal = white bars",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/USForestService-overlay.png",overlay:true},{id:"US_Forest_Service_roads",name:"U.S. Forest Service roads",type:"tms",template:"https://osm.cycle.travel/forest/{zoom}/{x}/{y}.png",zoomExtent:[0,19],polygon:[[[-124.76179,48.41301],[-124.60595,45.90245],[-124.99343,40.05576],[-122.53697,36.85661],[-119.97759,33.00641],[-117.67593,32.46302],[-114.86123,32.47999],[-111.00893,31.33601],[-108.19927,31.326],[-108.18711,31.77551],[-106.53072,31.78209],[-106.48421,31.74645],[-106.42932,31.75206],[-106.28689,31.56133],[-106.20525,31.4467],[-105.02053,30.5361],[-104.58819,29.69979],[-103.25189,28.89087],[-102.71736,29.39206],[-102.1514,29.74757],[-101.25529,29.48105],[-100.00624,28.00822],[-99.23511,26.4476],[-98.01091,25.9928],[-97.43502,25.8266],[-96.95553,25.98216],[-96.80617,27.79782],[-95.55633,28.58761],[-93.74053,29.47421],[-90.90285,28.85645],[-88.01567,28.99443],[-88.01625,30.00389],[-86.02775,30.00475],[-84.01879,28.99618],[-81.9972,25.98268],[-81.99666,25.01349],[-84.01656,25.01258],[-84.01601,24.00527],[-80.02,24.0071],[-79.89011,26.85507],[-80.02453,32.01613],[-75.41474,35.05319],[-74.02112,39.57279],[-72.00202,40.99125],[-69.87974,40.99205],[-69.84893,43.26199],[-66.94528,44.71049],[-67.75966,47.099],[-69.25051,47.51223],[-70.46149,46.21766],[-71.41227,45.25488],[-72.02225,45.00598],[-75.07988,44.98029],[-76.90231,43.80246],[-78.76239,43.62496],[-79.15798,43.44626],[-79.00601,42.80053],[-82.66248,41.68895],[-82.17616,43.58854],[-83.2814,46.13885],[-87.50645,48.01427],[-88.34922,48.29633],[-89.43531,47.98378],[-93.99811,49.00671],[-95.11054,49.412],[-96.01312,49.00605],[-123.32289,49.00429],[-123.22752,48.18499],[-124.76179,48.41301]],[[-160.57876,22.50629],[-160.57822,21.49846],[-158.74706,21.24398],[-157.50832,20.9958],[-155.99619,18.77902],[-154.62178,18.7587],[-154.68902,19.88057],[-156.29276,21.22259],[-157.50474,21.9985],[-159.00937,22.50702],[-160.57876,22.50629]],[[-167.15715,68.72197],[-164.8554,67.02551],[-168.0022,66.00175],[-169.00874,66.00155],[-169.00754,64.99877],[-172.51433,63.87673],[-173.8197,59.74014],[-162.50181,58.00058],[-160.0159,58.00124],[-160.01497,57.00003],[-160.50548,56.9999],[-165.80926,54.82485],[-178.0001,52.24465],[-177.9993,51.25543],[-171.46891,51.82153],[-162.40251,53.95666],[-159.00757,55.0025],[-158.01907,55.00278],[-151.99632,55.99919],[-151.50034,57.99879],[-151.50129,58.99198],[-138.516,58.99532],[-138.51505,57.99864],[-133.99482,54.00317],[-130.00444,54.00434],[-130.00708,57.00005],[-131.97588,56.99952],[-135.12299,59.7566],[-138.00718,59.9918],[-139.17159,60.41272],[-140.9874,61.01186],[-140.9684,69.95351],[-156.17689,71.56333],[-160.41363,70.73977],[-163.02183,69.97074],[-164.9717,68.99469],[-167.15715,68.72197]]]},{id:"Zuerich-zh_uebersichtsplan-tms",name:"Übersichtsplan Zürich",type:"tms",template:"https://mapproxy.osm.ch/tiles/zh_uebersichtsplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",zoomExtent:[0,21],polygon:[[[8.45788,47.44582],[8.57392,47.44477],[8.57362,47.43124],[8.60266,47.43096],[8.60231,47.41746],[8.6318,47.41716],[8.6295,47.33628],[8.57162,47.33679],[8.57152,47.32292],[8.54236,47.3236],[8.54212,47.31013],[8.48418,47.31062],[8.48478,47.33762],[8.45582,47.33787],[8.45609,47.35135],[8.42713,47.35161],[8.42864,47.43259],[8.45745,47.43231],[8.45788,47.44582]]],terms_text:"Stadt Zürich Open Government Data",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"UkraineKyiv2014DZK",name:"Ukraine - Kyiv 2014 (DZK)",type:"tms",template:"http://map.land.gov.ua/map/ortho_kiev/{zoom}/{x}/{-y}.jpg",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[30.30752,50.57184],[30.33155,50.57402],[30.37687,50.57925],[30.42288,50.58143],[30.4318,50.58579],[30.44416,50.58797],[30.45515,50.58754],[30.46545,50.58449],[30.46819,50.57751],[30.49085,50.57489],[30.51351,50.57489],[30.52519,50.57402],[30.55608,50.55221],[30.58424,50.53869],[30.5966,50.53781],[30.60896,50.5365],[30.64329,50.5352],[30.65496,50.53563],[30.65496,50.54305],[30.66045,50.54916],[30.66801,50.55439],[30.67762,50.55876],[30.68792,50.56137],[30.70783,50.55614],[30.71127,50.56356],[30.71127,50.57838],[30.72157,50.58231],[30.71882,50.58972],[30.72981,50.59103],[30.74011,50.58841],[30.76208,50.58536],[30.77306,50.58274],[30.78336,50.57795],[30.80259,50.57141],[30.81014,50.56617],[30.82182,50.55439],[30.82525,50.53956],[30.81701,50.53432],[30.79504,50.52909],[30.78474,50.52559],[30.76276,50.51992],[30.76208,50.5125],[30.75315,50.50769],[30.74354,50.50376],[30.73805,50.49721],[30.74629,50.49197],[30.75521,50.48847],[30.74835,50.48236],[30.75178,50.47537],[30.75315,50.46794],[30.74835,50.46138],[30.75178,50.45439],[30.78886,50.43646],[30.7971,50.43165],[30.80328,50.41765],[30.8225,50.40846],[30.82044,50.40102],[30.82319,50.39358],[30.81289,50.39095],[30.80122,50.39139],[30.78954,50.39314],[30.77787,50.3927],[30.77856,50.3857],[30.77169,50.38001],[30.76208,50.37519],[30.75109,50.37256],[30.73873,50.37256],[30.72775,50.37475],[30.71813,50.37957],[30.71539,50.36512],[30.71127,50.35855],[30.70577,50.35241],[30.69753,50.34716],[30.68586,50.34453],[30.65084,50.34058],[30.63848,50.34014],[30.62681,50.33795],[30.62887,50.3305],[30.64947,50.29279],[30.66663,50.28314],[30.67144,50.27656],[30.6632,50.27085],[30.65153,50.26997],[30.64535,50.27612],[30.63368,50.27787],[30.62132,50.27656],[30.61857,50.2691],[30.62956,50.25637],[30.6378,50.25154],[30.64535,50.23792],[30.64398,50.2309],[30.63917,50.22387],[30.62956,50.21992],[30.6069,50.2164],[30.59591,50.2186],[30.59042,50.23353],[30.5863,50.241],[30.57531,50.25505],[30.56501,50.25944],[30.5657,50.2669],[30.56432,50.29718],[30.56638,50.30463],[30.5657,50.31209],[30.55677,50.31691],[30.54441,50.31735],[30.52587,50.32699],[30.51489,50.3305],[30.50253,50.33182],[30.48055,50.33664],[30.47163,50.34146],[30.46957,50.34935],[30.47025,50.35679],[30.46201,50.36205],[30.4524,50.35679],[30.44004,50.35548],[30.43661,50.36512],[30.43111,50.37212],[30.43661,50.37826],[30.43455,50.3857],[30.40914,50.39883],[30.39678,50.40014],[30.3906,50.40671],[30.37069,50.41546],[30.36314,50.42159],[30.3597,50.42902],[30.3597,50.43646],[30.35696,50.44389],[30.3446,50.44477],[30.32056,50.44258],[30.29585,50.44477],[30.28349,50.44477],[30.27799,50.43864],[30.27525,50.43165],[30.26563,50.42771],[30.25396,50.42902],[30.24572,50.42377],[30.23542,50.42771],[30.2416,50.43427],[30.2416,50.44214],[30.23679,50.4487],[30.23885,50.45613],[30.24297,50.46313],[30.24915,50.46968],[30.25671,50.47493],[30.26083,50.48192],[30.26563,50.48847],[30.26907,50.49983],[30.26151,50.50595],[30.26357,50.51381],[30.26975,50.51992],[30.28898,50.52821],[30.29722,50.53345],[30.30271,50.54],[30.30203,50.54741],[30.30477,50.55483],[30.32743,50.55221],[30.33086,50.55919],[30.32262,50.56486],[30.31233,50.56835],[30.30752,50.57184]]],description:"Works only from within Ukraine or with an Ukrainian proxy server."},{id:"Ukraine-orto10000-2012",name:"Ukraine - Orthophotomaps 2012",type:"tms",template:"http://212.26.144.110/tile2/orto_10000/{zoom}/{x}/{-y}.jpg",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[23.6193,51.65491],[24.09803,51.64047],[24.39723,51.89353],[25.19178,51.95913],[26.12263,51.92224],[26.49829,51.80933],[27.09005,51.77026],[27.62861,51.62603],[28.02422,51.59093],[28.28021,51.68172],[28.37662,51.5806],[28.82542,51.5682],[29.19111,51.64253],[29.41718,51.4399],[29.67316,51.51238],[29.82276,51.47512],[30.21837,51.50824],[30.54417,51.30709],[30.63726,51.38599],[30.51425,51.63634],[30.983,52.09005],[31.2822,52.07984],[31.48832,52.13497],[32.11,52.05531],[32.31279,52.11864],[32.43912,52.32434],[32.93114,52.28368],[33.29683,52.39337],[33.75561,52.35277],[34.35734,51.78055],[34.14457,51.76409],[34.05813,51.67965],[34.22103,51.47098],[34.25095,51.30085],[34.7197,51.19056],[35.11199,51.21139],[35.1818,51.08626],[35.38792,51.03402],[35.40787,50.62878],[35.62063,50.38563],[36.06944,50.4513],[36.21571,50.41106],[36.31212,50.28802],[36.4717,50.32624],[36.59138,50.2519],[37.46571,50.45977],[37.735,50.11353],[38.05747,49.9384],[38.19377,49.95765],[38.19045,50.07514],[38.35002,50.08154],[38.41651,49.98972],[38.73899,49.97476],[39.00827,49.83344],[39.14457,49.89987],[39.27755,49.78195],[39.54018,49.74544],[39.79949,49.58406],[40.18845,49.6013],[40.0588,49.50424],[40.20508,49.24666],[39.93247,49.06185],[39.71638,49.01608],[40.08872,48.85448],[39.79617,48.78443],[39.69311,48.65283],[39.86266,48.5693],[39.99231,48.31348],[39.83274,47.92287],[39.74297,47.83144],[39.57675,47.81135],[38.86532,47.85153],[38.77555,47.68618],[38.38327,47.60106],[38.30348,47.52704],[38.30016,47.23891],[38.13393,47.05577],[37.5455,47.05124],[37.31279,46.87654],[37.20973,46.92651],[36.96039,46.83107],[36.7443,46.61685],[36.72436,46.7719],[36.4451,46.72407],[36.10601,46.4728],[36.20574,46.66022],[35.92316,46.64424],[35.43114,46.39948],[35.10202,45.97138],[35.0455,45.75145],[35.47436,45.33],[35.86,45.53297],[35.9963,45.43274],[36.11598,45.51899],[36.66452,45.4514],[36.65454,45.34168],[36.50494,45.31363],[36.47502,45.24111],[36.48832,45.04884],[35.81013,44.98539],[35.5076,45.11222],[35.42782,44.93364],[35.12196,44.76394],[34.67649,44.75686],[33.985,44.37078],[33.68912,44.38504],[33.38327,44.50608],[33.35002,44.589],[33.55282,44.93128],[33.42981,45.1263],[33.19377,45.14271],[32.83141,45.33935],[32.60534,45.30896],[32.44577,45.3557],[32.50893,45.47005],[32.87795,45.68181],[33.57941,45.90665],[33.58938,46.02681],[33.25694,46.07065],[33.02422,45.97138],[31.61133,46.19506],[31.27555,46.61457],[30.87662,46.56887],[30.43446,45.98756],[29.69643,45.55159],[29.79284,45.46306],[29.73965,45.15913],[29.47369,45.41407],[29.18114,45.38373],[28.74896,45.22004],[28.56611,45.23409],[28.29018,45.33],[28.23367,45.49103],[28.31678,45.56789],[28.483,45.54228],[28.47303,45.73753],[28.95175,46.03143],[29.02489,46.18125],[28.9318,46.49569],[29.18779,46.57116],[29.59337,46.45448],[29.81944,46.46593],[29.95574,46.68759],[29.8959,46.8197],[29.56013,46.96963],[29.54683,47.29982],[29.14789,47.50234],[29.23101,47.77562],[29.17117,47.934],[28.86864,47.99411],[28.63593,48.16513],[28.44311,48.06525],[28.36332,48.17178],[28.25694,48.15404],[27.735,48.43494],[27.55547,48.45258],[26.92383,48.34884],[26.36532,48.17178],[26.1193,47.97408],[25.3846,47.91618],[24.91585,47.70408],[24.52024,47.94291],[24.18446,47.90058],[23.58274,48.00523],[23.43646,47.96963],[23.15388,48.10522],[23.07077,47.98743],[22.858,47.9585],[22.76824,48.09856],[22.58539,48.103],[22.51558,48.2161],[22.11332,48.4217],[22.49896,49.06621],[22.58872,49.11193],[22.87795,49.04006],[22.7217,49.18151],[22.71837,49.64652],[23.24364,50.105],[24.04484,50.49785],[24.05813,50.68779],[23.9451,50.81399],[24.10135,50.85388],[23.62928,51.29462],[23.6193,51.65491]]],description:"Works only from within Ukraine or with an Ukrainian proxy server."},{id:"uniao_dos_palmares",name:"União dos Palmares AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Uniao%20dos%20Palmares&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-35.97725,-9.20752],[-35.9772,-9.19398],[-35.97694,-9.19053],[-35.97678,-9.18607],[-35.97702,-9.18208],[-35.97704,-9.17968],[-35.97682,-9.17734],[-35.97664,-9.17517],[-35.97701,-9.17518],[-35.97696,-9.1707],[-35.97674,-9.17066],[-35.97661,-9.16645],[-35.97618,-9.16222],[-35.9761,-9.16026],[-35.97661,-9.16026],[-35.97672,-9.14608],[-35.97654,-9.14122],[-35.97666,-9.1332],[-35.97653,-9.12184],[-35.97648,-9.11748],[-35.98618,-9.11755],[-35.98947,-9.11733],[-36.00561,-9.11733],[-36.01859,-9.11736],[-36.04601,-9.11722],[-36.06734,-9.11698],[-36.06756,-9.16134],[-36.06771,-9.16405],[-36.06745,-9.16408],[-36.06756,-9.16657],[-36.06777,-9.16654],[-36.06798,-9.20701],[-36.0498,-9.20711],[-36.04671,-9.20698],[-36.02941,-9.20709],[-36.01355,-9.20718],[-35.99318,-9.20733],[-35.97725,-9.20752]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"URBIS2009",name:"URBIS 2009 aerial imagery",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2009&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2009-01-01T00:00:00.000Z",startDate:"2009-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBIS2012",name:"URBIS 2012 aerial imagery",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2012&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBIS2014",name:"URBIS 2014 aerial imagery",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2014&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",polygon:[[[4.4001,50.76373],[4.43093,50.77254],[4.43586,50.77237],[4.46549,50.78373],[4.48189,50.78835],[4.48269,50.79849],[4.46363,50.80686],[4.46407,50.81546],[4.48204,50.81699],[4.48103,50.82343],[4.47465,50.83505],[4.47403,50.84587],[4.46712,50.85447],[4.45257,50.85797],[4.45017,50.86151],[4.42968,50.86764],[4.43423,50.87384],[4.44147,50.87513],[4.44381,50.88004],[4.43534,50.88977],[4.43968,50.89475],[4.43287,50.90363],[4.42096,50.90917],[4.42023,50.91387],[4.38315,50.91381],[4.37879,50.90637],[4.37334,50.90289],[4.36241,50.906],[4.34824,50.90611],[4.33955,50.90685],[4.32771,50.90515],[4.31471,50.89842],[4.30413,50.89498],[4.2871,50.89192],[4.28725,50.88532],[4.29293,50.88265],[4.27948,50.8736],[4.27347,50.86822],[4.27364,50.85871],[4.27688,50.85575],[4.27644,50.84376],[4.26664,50.8405],[4.25488,50.83992],[4.24755,50.83453],[4.24799,50.82866],[4.24357,50.82599],[4.24376,50.81356],[4.25233,50.81268],[4.25649,50.80711],[4.27025,50.8073],[4.27222,50.80537],[4.28414,50.80241],[4.28885,50.80434],[4.29544,50.8043],[4.30046,50.79506],[4.31076,50.79299],[4.31444,50.78372],[4.32628,50.77221],[4.34194,50.76891],[4.34474,50.77029],[4.37535,50.76577],[4.3755,50.76381],[4.4001,50.76373]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBIS2015",name:"URBIS 2015 aerial imagery",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2015&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbISOrtho2016",name:"UrbIS-Ortho 2016",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2016&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbISOrtho2017",name:"UrbIS-Ortho 2017",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2017&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbISOrtho2018",name:"UrbIS-Ortho 2018",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2018&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbISOrtho2019",name:"UrbIS-Ortho 2019",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2019&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2019-01-01T00:00:00.000Z",startDate:"2019-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbisAdmFR",name:"UrbisAdm FR",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=urbisFR&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[4.4347,50.77647],[4.45427,50.78367],[4.4635,50.78798],[4.48273,50.79313],[4.44715,50.80821],[4.44831,50.81147],[4.45788,50.81646],[4.45466,50.81838],[4.4768,50.82036],[4.46552,50.83549],[4.46835,50.83744],[4.46037,50.85218],[4.44578,50.85522],[4.44466,50.85809],[4.43891,50.86042],[4.43719,50.85868],[4.42612,50.86296],[4.42037,50.86789],[4.42973,50.87764],[4.43736,50.87867],[4.42681,50.89026],[4.43307,50.89464],[4.42277,50.90298],[4.41187,50.90753],[4.41376,50.91159],[4.4032,50.91381],[4.38758,50.9098],[4.37771,50.89713],[4.36303,50.90119],[4.34183,50.9026],[4.33093,50.90119],[4.31651,50.89389],[4.3057,50.8908],[4.29334,50.88847],[4.29428,50.88658],[4.29737,50.8849],[4.29918,50.87975],[4.28587,50.87201],[4.27858,50.86556],[4.28064,50.85944],[4.28999,50.85625],[4.28304,50.85354],[4.28793,50.84833],[4.28291,50.8479],[4.28158,50.83785],[4.27399,50.8392],[4.27184,50.8363],[4.25793,50.83571],[4.2545,50.83289],[4.25523,50.82839],[4.2509,50.82419],[4.24382,50.81928],[4.2566,50.81743],[4.25995,50.81106],[4.27274,50.81212],[4.2757,50.81087],[4.27708,50.80835],[4.28454,50.80732],[4.29274,50.80911],[4.2951,50.80881],[4.30162,50.81299],[4.3066,50.81239],[4.30205,50.80445],[4.30501,50.7987],[4.31527,50.79661],[4.31845,50.79403],[4.3193,50.78722],[4.32201,50.7832],[4.33089,50.7758],[4.3408,50.77354],[4.34677,50.77574],[4.3551,50.77354],[4.36527,50.77284],[4.38243,50.76917],[4.38303,50.76375],[4.43312,50.77802],[4.4347,50.77647]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbisAdmNL",name:"UrbisAdm NL",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=urbisNL&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[4.4347,50.77647],[4.45427,50.78367],[4.4635,50.78798],[4.48273,50.79313],[4.44715,50.80821],[4.44831,50.81147],[4.45788,50.81646],[4.45466,50.81838],[4.4768,50.82036],[4.46552,50.83549],[4.46835,50.83744],[4.46037,50.85218],[4.44578,50.85522],[4.44466,50.85809],[4.43891,50.86042],[4.43719,50.85868],[4.42612,50.86296],[4.42037,50.86789],[4.42973,50.87764],[4.43736,50.87867],[4.42681,50.89026],[4.43307,50.89464],[4.42277,50.90298],[4.41187,50.90753],[4.41376,50.91159],[4.4032,50.91381],[4.38758,50.9098],[4.37771,50.89713],[4.36303,50.90119],[4.34183,50.9026],[4.33093,50.90119],[4.31651,50.89389],[4.3057,50.8908],[4.29334,50.88847],[4.29428,50.88658],[4.29737,50.8849],[4.29918,50.87975],[4.28587,50.87201],[4.27858,50.86556],[4.28064,50.85944],[4.28999,50.85625],[4.28304,50.85354],[4.28793,50.84833],[4.28291,50.8479],[4.28158,50.83785],[4.27399,50.8392],[4.27184,50.8363],[4.25793,50.83571],[4.2545,50.83289],[4.25523,50.82839],[4.2509,50.82419],[4.24382,50.81928],[4.2566,50.81743],[4.25995,50.81106],[4.27274,50.81212],[4.2757,50.81087],[4.27708,50.80835],[4.28454,50.80732],[4.29274,50.80911],[4.2951,50.80881],[4.30162,50.81299],[4.3066,50.81239],[4.30205,50.80445],[4.30501,50.7987],[4.31527,50.79661],[4.31845,50.79403],[4.3193,50.78722],[4.32201,50.7832],[4.33089,50.7758],[4.3408,50.77354],[4.34677,50.77574],[4.3551,50.77354],[4.36527,50.77284],[4.38243,50.76917],[4.38303,50.76375],[4.43312,50.77802],[4.4347,50.77647]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBISfr2013",name:"URBISfr numerical imagery (2013)",type:"wms",template:"https://gis.irisnet.be/arcgis/rest/services/basemap/urbisFR/MapServer/export?f=image&format=png8&transparent=False&SRS={proj}&bboxSR=3857&imageSR=3857&bbox={bbox}&size={width},{height}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[4.4347,50.77647],[4.45427,50.78367],[4.4635,50.78798],[4.48273,50.79313],[4.44715,50.80821],[4.44831,50.81147],[4.45788,50.81646],[4.45466,50.81838],[4.4768,50.82036],[4.46552,50.83549],[4.46835,50.83744],[4.46037,50.85218],[4.44578,50.85522],[4.44466,50.85809],[4.43891,50.86042],[4.43719,50.85868],[4.42612,50.86296],[4.42037,50.86789],[4.42973,50.87764],[4.43736,50.87867],[4.42681,50.89026],[4.43307,50.89464],[4.42277,50.90298],[4.41187,50.90753],[4.41376,50.91159],[4.4032,50.91381],[4.38758,50.9098],[4.37771,50.89713],[4.36303,50.90119],[4.34183,50.9026],[4.33093,50.90119],[4.31651,50.89389],[4.3057,50.8908],[4.29334,50.88847],[4.29428,50.88658],[4.29737,50.8849],[4.29918,50.87975],[4.28587,50.87201],[4.27858,50.86556],[4.28064,50.85944],[4.28999,50.85625],[4.28304,50.85354],[4.28793,50.84833],[4.28291,50.8479],[4.28158,50.83785],[4.27399,50.8392],[4.27184,50.8363],[4.25793,50.83571],[4.2545,50.83289],[4.25523,50.82839],[4.2509,50.82419],[4.24382,50.81928],[4.2566,50.81743],[4.25995,50.81106],[4.27274,50.81212],[4.2757,50.81087],[4.27708,50.80835],[4.28454,50.80732],[4.29274,50.80911],[4.2951,50.80881],[4.30162,50.81299],[4.3066,50.81239],[4.30205,50.80445],[4.30501,50.7987],[4.31527,50.79661],[4.31845,50.79403],[4.3193,50.78722],[4.32201,50.7832],[4.33089,50.7758],[4.3408,50.77354],[4.34677,50.77574],[4.3551,50.77354],[4.36527,50.77284],[4.38243,50.76917],[4.38303,50.76375],[4.43312,50.77802],[4.4347,50.77647]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBISnl2013",name:"URBISnl numerical imagery (2013)",type:"wms",template:"https://gis.irisnet.be/arcgis/rest/services/basemap/urbisNL/MapServer/export?f=image&format=png8&transparent=False&SRS={proj}&bboxSR=3857&imageSR=3857&bbox={bbox}&size={width},{height}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[4.4347,50.77647],[4.45427,50.78367],[4.4635,50.78798],[4.48273,50.79313],[4.44715,50.80821],[4.44831,50.81147],[4.45788,50.81646],[4.45466,50.81838],[4.4768,50.82036],[4.46552,50.83549],[4.46835,50.83744],[4.46037,50.85218],[4.44578,50.85522],[4.44466,50.85809],[4.43891,50.86042],[4.43719,50.85868],[4.42612,50.86296],[4.42037,50.86789],[4.42973,50.87764],[4.43736,50.87867],[4.42681,50.89026],[4.43307,50.89464],[4.42277,50.90298],[4.41187,50.90753],[4.41376,50.91159],[4.4032,50.91381],[4.38758,50.9098],[4.37771,50.89713],[4.36303,50.90119],[4.34183,50.9026],[4.33093,50.90119],[4.31651,50.89389],[4.3057,50.8908],[4.29334,50.88847],[4.29428,50.88658],[4.29737,50.8849],[4.29918,50.87975],[4.28587,50.87201],[4.27858,50.86556],[4.28064,50.85944],[4.28999,50.85625],[4.28304,50.85354],[4.28793,50.84833],[4.28291,50.8479],[4.28158,50.83785],[4.27399,50.8392],[4.27184,50.8363],[4.25793,50.83571],[4.2545,50.83289],[4.25523,50.82839],[4.2509,50.82419],[4.24382,50.81928],[4.2566,50.81743],[4.25995,50.81106],[4.27274,50.81212],[4.2757,50.81087],[4.27708,50.80835],[4.28454,50.80732],[4.29274,50.80911],[4.2951,50.80881],[4.30162,50.81299],[4.3066,50.81239],[4.30205,50.80445],[4.30501,50.7987],[4.31527,50.79661],[4.31845,50.79403],[4.3193,50.78722],[4.32201,50.7832],[4.33089,50.7758],[4.3408,50.77354],[4.34677,50.77574],[4.3551,50.77354],[4.36527,50.77284],[4.38243,50.76917],[4.38303,50.76375],[4.43312,50.77802],[4.4347,50.77647]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"USGS-Imagery",name:"USGS Imagery",type:"tms",template:"https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[12,20],polygon:[[[-79.12989,43.31497],[-79.12989,43.24293],[-79.06696,43.24293],[-79.06696,43.13],[-79.12989,43.13],[-79.12989,43.05773],[-79.07126,43.05773],[-79.07126,42.92949],[-78.94326,42.92949],[-78.94326,42.75422],[-82.67886,41.67159],[-82.88391,41.75369],[-83.12077,41.99609],[-83.12077,42.24648],[-83.05892,42.24648],[-83.05892,42.30896],[-82.86853,42.30896],[-82.86853,42.37177],[-82.5599,42.49549],[-82.5599,42.55855],[-82.49678,42.55855],[-82.49678,42.68336],[-82.43289,42.68336],[-82.43289,42.93422],[-82.37006,42.93422],[-82.37006,43.06481],[-82.51953,45.33698],[-83.49681,45.87251],[-83.49681,45.93371],[-83.43381,45.93371],[-83.43381,46.00169],[-83.56,46.12616],[-83.99546,46.12616],[-83.99546,46.19317],[-84.05918,46.19317],[-84.05918,46.3815],[-84.11526,46.3815],[-84.11526,46.49536],[-84.05918,46.49536],[-84.05918,46.56827],[-84.25795,46.56827],[-84.25795,46.50512],[-84.30719,46.50512],[-84.30719,46.56827],[-84.44154,46.56827],[-84.44154,46.50453],[-84.60983,46.50453],[-84.76227,46.63341],[-84.86115,46.88929],[-88.3882,48.30154],[-89.42847,48.06564],[-89.99327,48.06564],[-89.99327,48.1283],[-90.74559,48.1283],[-90.74559,48.18931],[-90.80873,48.18931],[-90.80873,48.25221],[-91.06776,48.25221],[-91.06776,48.19167],[-91.19462,48.19167],[-91.19462,48.1279],[-91.68142,48.1279],[-91.68142,48.2526],[-91.93219,48.2526],[-91.93219,48.31425],[-91.99297,48.31425],[-91.99297,48.37808],[-92.31894,48.37808],[-92.31894,48.25291],[-92.37322,48.25291],[-92.37322,48.31534],[-92.43223,48.31534],[-92.43223,48.44114],[-92.49772,48.44114],[-92.49772,48.50178],[-92.56794,48.50178],[-92.56794,48.43958],[-92.62105,48.43958],[-92.62105,48.56508],[-92.80868,48.56508],[-92.80868,48.62674],[-92.93318,48.62674],[-92.93318,48.69221],[-93.00517,48.69221],[-93.00517,48.6283],[-93.12259,48.6283],[-93.12259,48.69221],[-93.31908,48.69221],[-93.31908,48.62674],[-93.50495,48.62674],[-93.50495,48.56352],[-93.74746,48.56352],[-93.74746,48.62674],[-93.81355,48.62674],[-93.81355,48.68988],[-94.24531,48.68988],[-94.24531,48.75543],[-94.61832,48.75543],[-94.61832,48.94104],[-94.6809,48.94104],[-94.6809,49.00297],[-94.74415,49.00297],[-94.74415,49.25361],[-94.80841,49.25361],[-94.80841,49.37841],[-95.11924,49.37841],[-95.11924,49.44253],[-95.19343,49.44253],[-95.19343,49.00353],[-96.87069,49.00353],[-96.87069,49.06561],[-99.00493,49.06561],[-99.00493,49.00507],[-109.36993,49.00507],[-109.36993,49.06682],[-109.50587,49.06682],[-109.50587,49.00507],[-114.183,49.00507],[-114.183,49.06873],[-114.75787,49.06873],[-114.75787,49.00507],[-115.43373,49.00507],[-115.43373,49.06714],[-116.50627,49.06714],[-116.50627,49.00507],[-117.30895,49.00507],[-117.30895,49.06598],[-119.88295,49.06598],[-119.88295,49.00507],[-120.12086,49.00507],[-120.12086,49.06784],[-121.44516,49.06784],[-121.44516,49.00507],[-121.93118,49.00507],[-121.93118,49.06561],[-123.12915,49.06451],[-123.12915,48.93432],[-123.00554,48.75295],[-123.12969,48.75295],[-123.12969,48.69022],[-123.18382,48.69022],[-123.18382,48.7529],[-123.25493,48.7529],[-123.25493,48.55923],[-123.19222,48.55923],[-123.19222,48.43484],[-123.25411,48.19051],[-124.05826,48.19084],[-124.05826,48.25344],[-124.18152,48.25344],[-124.18152,48.31647],[-124.43191,48.31647],[-124.43191,48.37826],[-124.55646,48.37826],[-124.55646,48.44083],[-124.75551,48.44083],[-139,48.45],[-139,32.5],[-117.18748,32.5],[-116.7465,32.49746],[-116.7465,32.56092],[-115.99701,32.56092],[-115.99701,32.62649],[-115.12495,32.62474],[-115.12495,32.68749],[-114.81241,32.68749],[-114.81261,32.62524],[-114.87531,32.62557],[-114.88081,32.43408],[-114.62945,32.43408],[-114.62945,32.37316],[-114.44474,32.37316],[-114.44474,32.30754],[-114.25576,32.30754],[-114.25576,32.24446],[-114.06803,32.24446],[-114.06803,32.18291],[-113.81665,32.18291],[-113.81665,32.12076],[-113.63074,32.12076],[-113.63074,32.05651],[-113.44175,32.05651],[-113.44175,31.99844],[-113.2546,31.99844],[-113.2546,31.93254],[-113.06807,31.93254],[-113.06807,31.87181],[-112.81611,31.87181],[-112.81611,31.81042],[-112.63088,31.81042],[-112.63088,31.74647],[-112.44189,31.74647],[-112.44189,31.6856],[-112.25719,31.6856],[-112.25719,31.62104],[-112.00338,31.62104],[-112.00338,31.55958],[-111.81562,31.55958],[-111.81562,31.49702],[-111.62786,31.49702],[-111.62786,31.434],[-111.4419,31.434],[-111.4419,31.37339],[-111.25597,31.37339],[-111.25597,31.31132],[-108.18458,31.31132],[-108.18458,31.74595],[-106.50651,31.74595],[-106.50651,31.68423],[-106.37973,31.68423],[-106.37973,31.62175],[-106.31743,31.62175],[-106.31743,31.49682],[-106.25518,31.49682],[-106.25518,31.43449],[-106.19247,31.43449],[-106.19247,31.37213],[-106.00392,31.37213],[-106.00392,31.30933],[-105.94166,31.30933],[-105.94166,31.24575],[-105.87982,31.24575],[-105.87982,31.18362],[-105.81623,31.18362],[-105.81623,31.12072],[-105.69212,31.12072],[-105.69212,31.05848],[-105.63029,31.05848],[-105.63029,30.93283],[-105.50444,30.93283],[-105.50444,30.87159],[-105.4413,30.87159],[-105.4413,30.80846],[-105.37815,30.80846],[-105.37815,30.74718],[-105.19047,30.74718],[-105.19047,30.68432],[-105.12862,30.68432],[-105.12862,30.61997],[-105.00365,30.61997],[-105.00365,30.55891],[-104.9418,30.55891],[-104.9418,30.49632],[-104.8782,30.49632],[-104.8782,30.30983],[-104.81553,30.30983],[-104.81553,30.24783],[-104.75361,30.24783],[-104.75361,29.93539],[-104.69095,29.93539],[-104.69095,29.80902],[-104.62913,29.80902],[-104.62913,29.68436],[-104.56599,29.68436],[-104.56599,29.62235],[-104.50372,29.62235],[-104.50372,29.55954],[-104.44101,29.55954],[-104.44101,29.49748],[-104.25376,29.49748],[-104.25376,29.37167],[-104.1292,29.37167],[-104.1292,29.30916],[-104.06887,29.30916],[-104.06887,29.24673],[-103.81873,29.24673],[-103.81873,29.18431],[-103.75574,29.18431],[-103.75574,29.12232],[-103.56675,29.12232],[-103.56675,29.05981],[-103.50498,29.05981],[-103.50498,28.99675],[-103.31658,28.99675],[-103.31658,28.93469],[-103.05976,28.93469],[-103.05976,29.0593],[-102.99797,29.0593],[-102.99797,29.12129],[-102.93314,29.12129],[-102.93314,29.18486],[-102.8096,29.18486],[-102.8096,29.25262],[-102.87013,29.25262],[-102.87013,29.3081],[-102.80967,29.3081],[-102.80967,29.37155],[-102.74757,29.37155],[-102.74757,29.55819],[-102.68455,29.55819],[-102.68455,29.68477],[-102.49678,29.68477],[-102.49678,29.74577],[-102.30866,29.74577],[-102.30866,29.80866],[-102.19093,29.80866],[-102.19093,29.74601],[-101.50499,29.74601],[-101.50499,29.68468],[-101.38058,29.68468],[-101.38058,29.55945],[-101.31751,29.55945],[-101.31751,29.49589],[-101.19101,29.49589],[-101.19101,29.43261],[-101.0675,29.43261],[-101.0675,29.30881],[-100.94189,29.30881],[-100.94189,29.24562],[-100.81673,29.24562],[-100.81673,29.11904],[-100.75227,29.11904],[-100.75227,29.05782],[-100.69254,29.05782],[-100.69254,28.87204],[-100.62902,28.87204],[-100.62902,28.80954],[-100.56799,28.80954],[-100.56799,28.62255],[-100.50404,28.62255],[-100.50404,28.55838],[-100.44218,28.55838],[-100.44218,28.49683],[-100.37943,28.49683],[-100.37943,28.30929],[-100.31719,28.30929],[-100.31719,28.18357],[-100.25448,28.18357],[-100.25448,28.12139],[-100.12823,28.12139],[-100.12823,28.05921],[-100.06595,28.05921],[-100.06595,27.99661],[-100.00239,27.99661],[-100.00239,27.93322],[-99.94265,27.93322],[-99.94265,27.74547],[-99.81685,27.74547],[-99.81685,27.68343],[-99.75413,27.68343],[-99.75413,27.62215],[-99.62916,27.62215],[-99.62916,27.5589],[-99.56728,27.5589],[-99.56728,27.43538],[-99.50418,27.43538],[-99.50418,27.3774],[-99.56718,27.3774],[-99.56718,27.24637],[-99.50498,27.24637],[-99.50498,26.99656],[-99.44274,26.99656],[-99.44274,26.8728],[-99.38006,26.8728],[-99.38006,26.80682],[-99.31907,26.80682],[-99.31907,26.74736],[-99.25375,26.74736],[-99.25375,26.62101],[-99.19106,26.62101],[-99.19106,26.49567],[-99.13006,26.49567],[-99.13006,26.37138],[-99.00295,26.37138],[-99.00295,26.30938],[-98.81657,26.30938],[-98.81657,26.24578],[-98.69201,26.24578],[-98.69201,26.18371],[-98.44409,26.18371],[-98.44409,26.12172],[-98.38232,26.12172],[-98.38232,26.05965],[-98.25327,26.05965],[-98.25327,25.99869],[-98.01091,25.99869],[-98.01091,25.99323],[-97.69323,25.99323],[-97.69323,25.93341],[-97.63139,25.93341],[-97.63139,25.86959],[-97.50468,25.86959],[-97.50468,25.80735],[-97.30834,25.80735],[-97.30834,25.87312],[-97.24563,25.87312],[-97.24563,25.93537],[-97.11389,25.93537],[-80.7,24],[-79.314,27.108],[-66.93111,44.74737],[-66.93111,44.94066],[-66.99468,44.94066],[-66.99468,45.00245],[-67.05958,45.00245],[-67.05958,45.12734],[-67.1202,45.12734],[-67.1202,45.19101],[-67.24698,45.19101],[-67.24698,45.25344],[-67.31775,45.25344],[-67.31775,45.18984],[-67.37075,45.18984],[-67.37075,45.2534],[-67.43269,45.2534],[-67.43269,45.30834],[-67.37086,45.30834],[-67.37086,45.4397],[-67.43056,45.4397],[-67.43056,45.49501],[-67.37099,45.49501],[-67.37099,45.62645],[-67.6215,45.62645],[-67.6215,45.68961],[-67.68383,45.68961],[-67.68383,45.75326],[-67.74621,45.75326],[-67.74621,47.12682],[-67.87001,47.12682],[-67.87001,47.19003],[-67.93238,47.19003],[-67.93238,47.25397],[-67.99594,47.25397],[-67.99594,47.31497],[-68.12067,47.31497],[-68.12067,47.37808],[-68.44232,47.37808],[-68.44232,47.31661],[-68.63143,47.31661],[-68.63143,47.25447],[-68.9978,47.25447],[-68.9978,47.43989],[-69.06072,47.43989],[-69.06072,47.50476],[-69.25381,47.50476],[-69.25381,47.43981],[-69.31793,47.43981],[-69.31793,47.3786],[-69.44385,47.3786],[-69.44385,47.31563],[-69.50382,47.31563],[-69.50382,47.25258],[-69.56678,47.25258],[-69.56678,47.19109],[-69.63035,47.19109],[-69.63035,47.1287],[-69.69331,47.1287],[-69.69331,47.06543],[-69.75571,47.06543],[-69.75571,47.00428],[-69.81804,47.00428],[-69.81804,46.94153],[-69.8804,46.94153],[-69.8804,46.87925],[-69.94217,46.87925],[-69.94217,46.81774],[-70.00631,46.81774],[-70.00631,46.69203],[-70.07043,46.69203],[-70.07043,46.44259],[-70.19459,46.44259],[-70.19459,46.37859],[-70.2562,46.37859],[-70.2562,46.31526],[-70.32037,46.31526],[-70.32037,46.06512],[-70.3815,46.06512],[-70.3815,45.93552],[-70.32016,45.93552],[-70.32016,45.87948],[-70.44931,45.87948],[-70.44931,45.75387],[-70.507,45.75387],[-70.507,45.69169],[-70.63166,45.69169],[-70.63166,45.62916],[-70.75755,45.62916],[-70.75755,45.44147],[-70.88099,45.44147],[-70.88099,45.37806],[-71.13328,45.37806],[-71.13328,45.31515],[-71.38303,45.31515],[-71.38303,45.25342],[-71.50764,45.25342],[-71.50764,45.06557],[-73.94189,45.06557],[-73.94189,45.00312],[-74.74697,45.00312],[-74.74697,45.0649],[-74.8801,45.0649],[-74.8801,45.0029],[-75.06625,45.0029],[-75.06625,44.94152],[-75.25394,44.94152],[-75.25394,44.8776],[-75.37896,44.8776],[-75.37896,44.81535],[-75.44313,44.81535],[-75.44313,44.75361],[-75.56666,44.75361],[-75.56666,44.691],[-75.62902,44.691],[-75.62902,44.6285],[-75.75405,44.6285],[-75.75405,44.56638],[-75.81731,44.56638],[-75.81731,44.50289],[-75.87995,44.50289],[-75.87995,44.37849],[-76.13003,44.37849],[-76.13003,44.31592],[-76.1927,44.31592],[-76.1927,44.25344],[-76.31826,44.25344],[-76.31826,44.19167],[-76.3793,44.19167],[-76.3793,44.06537],[-76.80375,43.64253],[-79.12989,43.31497]]],description:"Public domain aerial imagery, mostly NAIP",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/USGSTopographicMaps.png"},{id:"USGS-Scanned_Topographic",name:"USGS Topographic Maps",type:"tms",template:"https://caltopo.s3.amazonaws.com/topo/{zoom}/{x}/{y}.png",zoomExtent:[0,16],polygon:[[[-55.99594,52.00107],[-112.02896,52.00107],[-112.03995,56.01308],[-120.00494,56.00592],[-120.01712,60.01202],[-132.00197,60.00239],[-132.01208,63.00193],[-133.96883,63.0005],[-133.9724,63.99225],[-141.04429,63.98726],[-141.06879,69.92046],[-156.24893,71.51583],[-160.44571,70.83527],[-167.08145,68.42906],[-164.08218,67.03914],[-169.01504,65.68269],[-166.57608,64.50778],[-161.82999,64.05006],[-165.08194,63.2603],[-168.02628,59.78623],[-162.53311,59.73089],[-162.35733,58.55905],[-157.83096,58.31753],[-158.00674,57.52404],[-168.22403,53.51022],[-166.55411,53.14277],[-158.77579,54.88541],[-158.6824,55.74964],[-156.55106,56.00848],[-156.15555,56.77466],[-154.70535,56.14337],[-152.07413,57.37035],[-151.62918,58.22653],[-152.00821,58.98056],[-145.9877,60.24741],[-140.38467,59.48634],[-136.53946,57.8061],[-133.79288,54.83483],[-133.33145,53.14277],[-131.46378,51.69838],[-128.52493,51.74602],[-129.79385,50.90159],[-124.56436,47.49786],[-124.03702,45.48627],[-124.6962,42.90428],[-124.49844,40.34146],[-122.80655,37.53929],[-119.99405,33.37085],[-117.24747,32.5412],[-111.13907,31.1977],[-106.70059,31.23529],[-103.20694,28.64618],[-101.84463,29.8158],[-99.20792,26.28744],[-96.79092,25.75432],[-96.92276,27.96911],[-93.47305,29.68226],[-88.94669,28.87732],[-88.6171,30.17736],[-86.2001,30.36713],[-84.96963,29.43379],[-84.09073,30.06333],[-82.97012,28.95426],[-82.97012,27.26824],[-81.25626,25.07956],[-82.09122,24.56105],[-80.06973,24.76073],[-79.85001,27.11188],[-81.27823,30.70777],[-78.99307,33.20554],[-75.03799,35.5983],[-75.85098,37.24252],[-73.74161,40.4586],[-69.89639,41.60224],[-70.68741,43.17629],[-66.93008,44.69516],[-66.53458,43.08007],[-64.20547,43.35229],[-59.50333,45.73221],[-59.51431,46.24762],[-60.0032,46.25901],[-59.99222,47.24506],[-59.00894,47.2376],[-58.99796,47.50267],[-56.51504,47.50267],[-56.52603,46.7477],[-53.99918,46.7477],[-53.9772,46.48358],[-52.49405,46.46354],[-52.50504,48.75361],[-52.99667,48.75451],[-53.01315,49.99551],[-55.00168,50.0061],[-55.03738,53.74721],[-56.00418,53.73421],[-55.99594,52.00107]],[[-59.50127,43.74954],[-60.5024,43.74954],[-60.5024,44],[-59.9984,44],[-59.9984,44.2494],[-59.50127,44.2494],[-59.50127,43.74954]],[[-155.95024,20.49523],[-157.32675,20.49153],[-157.32903,21.23181],[-155.95251,21.23549],[-155.95024,20.49523]],[[-157.64488,21.24845],[-158.28534,21.24674],[-158.2869,21.74996],[-157.64643,21.75167],[-157.64488,21.24845]],[[-156.12602,20.3247],[-154.74617,20.32841],[-154.74174,18.87578],[-156.1216,18.87203],[-156.12602,20.3247]],[[-159.29077,22.24504],[-159.2893,21.76857],[-160.28917,21.76591],[-160.29064,22.24239],[-159.29077,22.24504]]],terms_url:"https://caltopo.com",terms_text:"© Caltopo",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/USGSTopographicMaps.png"},{id:"USSR-Latvia",name:"USSR - Latvia",type:"wms",template:"http://www.gisnet.lv/cgi-bin/topo?FORMAT=image/jpeg&VERSION=1.1.1&service=WMS&REQUEST=GetMap&LAYERS=DTO,DTC,DIVDPTC,PD,VS,DS,PS,M&SRS={proj}&WIDTH={width}&height={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[26.63086,57.56889],[25.16968,58.04882],[22.54395,57.76866],[21.54419,57.53352],[21.01685,56.81892],[21.01685,56.03523],[22.03857,56.38958],[24.71924,56.33481],[26.75171,55.66519],[28.19092,56.13943],[27.78442,57.40946],[26.63086,57.56889]]]},{id:"sjcgis.org-General_Basemap_WM",name:"Vector Streetmap for San Juan County WA",type:"tms",template:"https://sjcgis.org/arcgis/rest/services/Basemaps/General_Basemap_WM/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[0,19],polygon:[[[-123.27402,48.69297],[-123.00773,48.76726],[-123.00762,48.83158],[-122.7835,48.75842],[-122.6934,48.65852],[-122.76745,48.60361],[-122.74484,48.38708],[-123.24822,48.28353],[-123.11452,48.42261],[-123.21904,48.54857],[-123.27402,48.69297]]],best:true,description:"Public domain street and address data from the San Juan County, WA. Updated at least quarterly."},{id:"vicosa_al",name:"Viçosa AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Vicosa&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.198,-9.42067],[-36.19777,-9.41789],[-36.1978,-9.41528],[-36.19801,-9.41074],[-36.19789,-9.40857],[-36.19793,-9.40637],[-36.19797,-9.40561],[-36.19793,-9.40405],[-36.19799,-9.40312],[-36.19827,-9.40028],[-36.19829,-9.39496],[-36.19789,-9.39169],[-36.19844,-9.38932],[-36.19837,-9.3862],[-36.19794,-9.38167],[-36.19801,-9.37972],[-36.19834,-9.37867],[-36.19832,-9.37698],[-36.19817,-9.37586],[-36.19852,-9.37139],[-36.19822,-9.36239],[-36.19862,-9.35319],[-36.19849,-9.35097],[-36.19857,-9.34852],[-36.1988,-9.34668],[-36.1986,-9.34349],[-36.19877,-9.34084],[-36.19895,-9.33301],[-36.19877,-9.33039],[-36.28958,-9.33114],[-36.28938,-9.33319],[-36.2895,-9.33538],[-36.28925,-9.34124],[-36.28945,-9.34291],[-36.28928,-9.34521],[-36.28897,-9.37311],[-36.28915,-9.37481],[-36.28892,-9.37708],[-36.2889,-9.38541],[-36.28872,-9.38633],[-36.28872,-9.39343],[-36.28887,-9.39558],[-36.28877,-9.40129],[-36.28862,-9.40652],[-36.28872,-9.40715],[-36.28877,-9.42133],[-36.198,-9.42067]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"wien.gv.at-labels",name:"Vienna: Beschriftungen (annotations)",type:"tms",template:"https://maps.wien.gv.at/wmts/beschriftung/normal/google3857/{zoom}/{y}/{x}.png",zoomExtent:[12,19],polygon:[[[16.54475,48.17286],[16.54103,48.17657],[16.54978,48.17675],[16.54665,48.17162],[16.55629,48.16171],[16.55567,48.16446],[16.56161,48.16037],[16.57306,48.16319],[16.57603,48.13522],[16.54301,48.14333],[16.51377,48.15893],[16.4777,48.15744],[16.45536,48.13951],[16.43313,48.13788],[16.43701,48.11994],[16.42291,48.12306],[16.4083,48.11791],[16.40511,48.12198],[16.3246,48.13779],[16.31181,48.11945],[16.29806,48.12896],[16.2711,48.13385],[16.23607,48.13001],[16.2189,48.12377],[16.2181,48.12807],[16.23861,48.13205],[16.23843,48.13716],[16.22081,48.13555],[16.20986,48.14762],[16.22321,48.15318],[16.19798,48.15454],[16.19619,48.16396],[16.18183,48.17112],[16.19981,48.18616],[16.20739,48.20235],[16.20194,48.20479],[16.20962,48.20963],[16.1976,48.21479],[16.19778,48.22288],[16.18517,48.2232],[16.19911,48.22858],[16.19251,48.23671],[16.20677,48.26483],[16.24105,48.24837],[16.24154,48.23832],[16.25662,48.23988],[16.27043,48.25193],[16.26406,48.25492],[16.28556,48.25832],[16.29412,48.26395],[16.28617,48.2667],[16.28901,48.27051],[16.32741,48.27721],[16.34813,48.29048],[16.35351,48.28369],[16.3706,48.2817],[16.36714,48.28685],[16.37787,48.28832],[16.37557,48.29592],[16.37982,48.30201],[16.38536,48.30146],[16.38043,48.31507],[16.39518,48.32257],[16.39412,48.31926],[16.40287,48.31676],[16.41682,48.32253],[16.43803,48.31628],[16.44041,48.29192],[16.47547,48.27501],[16.48123,48.27343],[16.4835,48.27971],[16.48132,48.29351],[16.49645,48.29249],[16.51491,48.28554],[16.5067,48.2736],[16.51285,48.26784],[16.53263,48.2621],[16.54697,48.263],[16.53941,48.24284],[16.55274,48.239],[16.53627,48.20044],[16.54184,48.18206],[16.53631,48.17755],[16.54475,48.17286]]],terms_url:"https://data.wien.gv.at",terms_text:"Stadt Wien",icon:"https://www.wien.gv.at/layout-a/logo/wappen-klein.gif",overlay:true},{id:"wien.gv.at-gp",name:"Vienna: Mehrzweckkarte (general purpose)",type:"tms",template:"https://maps.wien.gv.at/wmts/fmzk/pastell/google3857/{zoom}/{y}/{x}.jpeg",zoomExtent:[10,19],polygon:[[[16.54475,48.17286],[16.54103,48.17657],[16.54978,48.17675],[16.54665,48.17162],[16.55629,48.16171],[16.55567,48.16446],[16.56161,48.16037],[16.57306,48.16319],[16.57603,48.13522],[16.54301,48.14333],[16.51377,48.15893],[16.4777,48.15744],[16.45536,48.13951],[16.43313,48.13788],[16.43701,48.11994],[16.42291,48.12306],[16.4083,48.11791],[16.40511,48.12198],[16.3246,48.13779],[16.31181,48.11945],[16.29806,48.12896],[16.2711,48.13385],[16.23607,48.13001],[16.2189,48.12377],[16.2181,48.12807],[16.23861,48.13205],[16.23843,48.13716],[16.22081,48.13555],[16.20986,48.14762],[16.22321,48.15318],[16.19798,48.15454],[16.19619,48.16396],[16.18183,48.17112],[16.19981,48.18616],[16.20739,48.20235],[16.20194,48.20479],[16.20962,48.20963],[16.1976,48.21479],[16.19778,48.22288],[16.18517,48.2232],[16.19911,48.22858],[16.19251,48.23671],[16.20677,48.26483],[16.24105,48.24837],[16.24154,48.23832],[16.25662,48.23988],[16.27043,48.25193],[16.26406,48.25492],[16.28556,48.25832],[16.29412,48.26395],[16.28617,48.2667],[16.28901,48.27051],[16.32741,48.27721],[16.34813,48.29048],[16.35351,48.28369],[16.3706,48.2817],[16.36714,48.28685],[16.37787,48.28832],[16.37557,48.29592],[16.37982,48.30201],[16.38536,48.30146],[16.38043,48.31507],[16.39518,48.32257],[16.39412,48.31926],[16.40287,48.31676],[16.41682,48.32253],[16.43803,48.31628],[16.44041,48.29192],[16.47547,48.27501],[16.48123,48.27343],[16.4835,48.27971],[16.48132,48.29351],[16.49645,48.29249],[16.51491,48.28554],[16.5067,48.2736],[16.51285,48.26784],[16.53263,48.2621],[16.54697,48.263],[16.53941,48.24284],[16.55274,48.239],[16.53627,48.20044],[16.54184,48.18206],[16.53631,48.17755],[16.54475,48.17286]]],terms_url:"https://data.wien.gv.at",terms_text:"Stadt Wien",icon:"https://www.wien.gv.at/layout-a/logo/wappen-klein.gif"},{id:"wien.gv.at-aerial_image",name:"Vienna: Orthofoto (aerial image)",type:"tms",template:"https://maps.wien.gv.at/wmts/lb/farbe/google3857/{zoom}/{y}/{x}.jpeg",zoomExtent:[10,19],polygon:[[[16.14995,48.10832],[16.14989,48.33315],[16.61873,48.33296],[16.61749,48.10813],[16.46644,48.10819],[16.46644,48.10744],[16.18104,48.10756],[16.18104,48.10831],[16.14995,48.10832]]],terms_url:"https://data.wien.gv.at",terms_text:"Stadt Wien",icon:"https://www.wien.gv.at/layout-a/logo/wappen-klein.gif"},{id:"Ville_de_Nyon-HD-2010",name:"Ville de Nyon - Orthophoto 2010 HD 5cm/pi",type:"tms",template:"https://osmdata.asitvd.ch/tiles/nyon2010/{zoom}/{x}/{y}.png",endDate:"2010-01-01T00:00:00.000Z",startDate:"2010-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[6.24859,46.38252],[6.24848,46.38715],[6.24378,46.38944],[6.24182,46.39109],[6.2414,46.39159],[6.23919,46.39222],[6.23973,46.39373],[6.2379,46.3946],[6.23713,46.39698],[6.23071,46.40107],[6.22789,46.39903],[6.22326,46.40219],[6.22066,46.40189],[6.21582,46.40462],[6.21393,46.40698],[6.20989,46.40563],[6.20928,46.40528],[6.20985,46.40434],[6.20501,46.40332],[6.20527,46.40104],[6.20906,46.40131],[6.20951,46.4013],[6.2149,46.4008],[6.21154,46.39808],[6.21057,46.3968],[6.20954,46.39449],[6.21229,46.39243],[6.21374,46.39168],[6.21639,46.39079],[6.21296,46.38736],[6.21532,46.38514],[6.21403,46.38424],[6.2126,46.38232],[6.21211,46.38102],[6.21212,46.37992],[6.21231,46.37901],[6.21318,46.37697],[6.21454,46.37494],[6.21359,46.37463],[6.21365,46.37276],[6.22133,46.3699],[6.22752,46.36555],[6.22752,46.36541],[6.23738,46.37356],[6.24404,46.37842],[6.24859,46.38252]]],terms_url:"http://www.nyon.ch/fr/officiel/services-offices/informatique-et-population-776-3911",terms_text:"Ville de Nyon"},{id:"VGIN-BuildingFootprints_WM",name:"Virginia Building Footprints",type:"tms",template:"http://tileify-ags.herokuapp.com/tiles/{zoom}/{x}/{y}?url=https%3A%2F%2Fgismaps.vita.virginia.gov%2Farcgis%2Frest%2Fservices%2FVA_Base_layers%2FVA_Building_Footprints%2FMapServer&transparent=true&layers=show%3A20",endDate:"2018-06-01T00:00:00.000Z",startDate:"2015-05-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-83.64853,36.6023],[-79.9118,36.55819],[-75.90179,36.56701],[-75.8606,36.985],[-75.19867,38.0178],[-76.15448,37.99183],[-76.25336,37.92253],[-76.62689,38.1648],[-76.90704,38.22524],[-77.05536,38.42132],[-77.19818,38.37396],[-77.28333,38.3675],[-77.31628,38.45789],[-77.25586,38.58253],[-77.15698,38.61043],[-77.11853,38.68337],[-77.0636,38.69409],[-77.05811,38.82259],[-77.07458,38.88462],[-77.20367,38.99357],[-77.3822,39.07038],[-77.47833,39.09809],[-77.53876,39.16627],[-77.4646,39.23651],[-77.59918,39.30455],[-77.74475,39.33005],[-77.84637,39.14284],[-78.36273,39.45528],[-78.3847,39.36616],[-78.36548,39.32792],[-78.4671,39.19182],[-78.60168,39.03199],[-78.69232,38.94659],[-78.89282,38.76479],[-78.99719,38.8504],[-79.13727,38.68551],[-79.31854,38.42993],[-79.5108,38.46004],[-79.56299,38.54817],[-79.65637,38.58253],[-79.71954,38.50519],[-79.70856,38.44068],[-79.94476,38.16911],[-80.00519,38.0243],[-80.21942,37.83148],[-80.32379,37.67513],[-80.22766,37.62511],[-80.36224,37.56417],[-80.32928,37.52498],[-80.49408,37.42907],[-80.53253,37.48794],[-80.78522,37.37889],[-80.86487,37.43561],[-80.9198,37.39635],[-80.88135,37.36143],[-81.02692,37.28935],[-81.26038,37.25219],[-81.37024,37.34396],[-81.47736,37.26312],[-81.55426,37.22595],[-81.71906,37.20189],[-81.98273,37.42689],[-81.96899,37.55329],[-82.40845,37.26531],[-82.74078,37.13186],[-82.73529,37.05299],[-82.90283,36.985],[-82.87811,36.90818],[-83.02643,36.85765],[-83.07587,36.85765],[-83.16101,36.74989],[-83.44666,36.69265],[-83.61145,36.64418],[-83.63892,36.63592],[-83.69385,36.61222],[-83.70003,36.6023],[-83.64853,36.6023]]],terms_url:"https://vgin.maps.arcgis.com/home/item.html?id=bcd049dfcdc342a7a08ec81644eeb339",terms_text:"Virginia Geographic Information Network (VGIN)",description:"Virginia Building Footprint Map Service",overlay:true},{id:"VGIN-Imagery_WM",name:"Virginia Imagery Service - Most Recent",type:"tms",template:"http://tileify-ags.herokuapp.com/tiles/{zoom}/{x}/{y}?url=https%3A%2F%2Fgismaps.vita.virginia.gov%2Farcgis%2Frest%2Fservices%2FMostRecentImagery%2FMostRecentImagery_WGS%2FMapServer&transparent=true&layers=show%3A0",endDate:"2018-08-01T00:00:00.000Z",startDate:"2013-04-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-83.64853,36.6023],[-79.9118,36.55819],[-75.90179,36.56701],[-75.8606,36.985],[-75.19867,38.0178],[-76.15448,37.99183],[-76.25336,37.92253],[-76.62689,38.1648],[-76.90704,38.22524],[-77.05536,38.42132],[-77.19818,38.37396],[-77.28333,38.3675],[-77.31628,38.45789],[-77.25586,38.58253],[-77.15698,38.61043],[-77.11853,38.68337],[-77.0636,38.69409],[-77.05811,38.82259],[-77.07458,38.88462],[-77.20367,38.99357],[-77.3822,39.07038],[-77.47833,39.09809],[-77.53876,39.16627],[-77.4646,39.23651],[-77.59918,39.30455],[-77.74475,39.33005],[-77.84637,39.14284],[-78.36273,39.45528],[-78.3847,39.36616],[-78.36548,39.32792],[-78.4671,39.19182],[-78.60168,39.03199],[-78.69232,38.94659],[-78.89282,38.76479],[-78.99719,38.8504],[-79.13727,38.68551],[-79.31854,38.42993],[-79.5108,38.46004],[-79.56299,38.54817],[-79.65637,38.58253],[-79.71954,38.50519],[-79.70856,38.44068],[-79.94476,38.16911],[-80.00519,38.0243],[-80.21942,37.83148],[-80.32379,37.67513],[-80.22766,37.62511],[-80.36224,37.56417],[-80.32928,37.52498],[-80.49408,37.42907],[-80.53253,37.48794],[-80.78522,37.37889],[-80.86487,37.43561],[-80.9198,37.39635],[-80.88135,37.36143],[-81.02692,37.28935],[-81.26038,37.25219],[-81.37024,37.34396],[-81.47736,37.26312],[-81.55426,37.22595],[-81.71906,37.20189],[-81.98273,37.42689],[-81.96899,37.55329],[-82.40845,37.26531],[-82.74078,37.13186],[-82.73529,37.05299],[-82.90283,36.985],[-82.87811,36.90818],[-83.02643,36.85765],[-83.07587,36.85765],[-83.16101,36.74989],[-83.44666,36.69265],[-83.61145,36.64418],[-83.63892,36.63592],[-83.69385,36.61222],[-83.70003,36.6023],[-83.64853,36.6023]]],terms_url:"https://vgin.maps.arcgis.com/home/item.html?id=36386a7e7dae4032a33cb0b83a1711f1",terms_text:"Virginia Geographic Information Network (VGIN)",description:"The most recently available VBMP orthoimagery for all of Virginia."},{id:"VGIN-PropertyLines_WM",name:"Virginia Property Lines",type:"tms",template:"http://tileify-ags.herokuapp.com/tiles/{zoom}/{x}/{y}?url=http%3A%2F%2Fgismaps.vita.virginia.gov%2Farcgis%2Frest%2Fservices%2FVA_Base_layers%2FVA_Parcels%2FMapServer&transparent=true",endDate:"2018-06-01T00:00:00.000Z",startDate:"2015-05-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-83.64853,36.6023],[-79.9118,36.55819],[-75.90179,36.56701],[-75.8606,36.985],[-75.19867,38.0178],[-76.15448,37.99183],[-76.25336,37.92253],[-76.62689,38.1648],[-76.90704,38.22524],[-77.05536,38.42132],[-77.19818,38.37396],[-77.28333,38.3675],[-77.31628,38.45789],[-77.25586,38.58253],[-77.15698,38.61043],[-77.11853,38.68337],[-77.0636,38.69409],[-77.05811,38.82259],[-77.07458,38.88462],[-77.20367,38.99357],[-77.3822,39.07038],[-77.47833,39.09809],[-77.53876,39.16627],[-77.4646,39.23651],[-77.59918,39.30455],[-77.74475,39.33005],[-77.84637,39.14284],[-78.36273,39.45528],[-78.3847,39.36616],[-78.36548,39.32792],[-78.4671,39.19182],[-78.60168,39.03199],[-78.69232,38.94659],[-78.89282,38.76479],[-78.99719,38.8504],[-79.13727,38.68551],[-79.31854,38.42993],[-79.5108,38.46004],[-79.56299,38.54817],[-79.65637,38.58253],[-79.71954,38.50519],[-79.70856,38.44068],[-79.94476,38.16911],[-80.00519,38.0243],[-80.21942,37.83148],[-80.32379,37.67513],[-80.22766,37.62511],[-80.36224,37.56417],[-80.32928,37.52498],[-80.49408,37.42907],[-80.53253,37.48794],[-80.78522,37.37889],[-80.86487,37.43561],[-80.9198,37.39635],[-80.88135,37.36143],[-81.02692,37.28935],[-81.26038,37.25219],[-81.37024,37.34396],[-81.47736,37.26312],[-81.55426,37.22595],[-81.71906,37.20189],[-81.98273,37.42689],[-81.96899,37.55329],[-82.40845,37.26531],[-82.74078,37.13186],[-82.73529,37.05299],[-82.90283,36.985],[-82.87811,36.90818],[-83.02643,36.85765],[-83.07587,36.85765],[-83.16101,36.74989],[-83.44666,36.69265],[-83.61145,36.64418],[-83.63892,36.63592],[-83.69385,36.61222],[-83.70003,36.6023],[-83.64853,36.6023]]],terms_url:"https://vgin.maps.arcgis.com/home/item.html?id=f1dccaf1f42e40cbba791feae2e23690",terms_text:"Virginia Geographic Information Network (VGIN)",description:"A statewide Parcel service showing property ownership outlines where available",overlay:true},{id:"vogis.cnv.at-DGM",name:"VoGIS: DGM (Terrain model)",type:"wms",template:"http://vogis.cnv.at/mapserver/mapserv?map=i_hoehen_und_gelaende_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=schummerung_50cm_terrain&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[9.96805,47.54631],[9.96809,47.54627],[9.97125,47.54425],[9.96484,47.53803],[9.9684,47.52802],[9.96526,47.52089],[9.99569,47.50278],[9.98736,47.49847],[10.00076,47.48211],[10.02301,47.48411],[10.03743,47.48918],[10.04477,47.48762],[10.05413,47.47589],[10.05347,47.46686],[10.06468,47.46364],[10.06999,47.45595],[10.08057,47.45536],[10.08857,47.46029],[10.09164,47.45893],[10.09385,47.44046],[10.10559,47.42872],[10.09374,47.41688],[10.07418,47.41472],[10.06914,47.41018],[10.08624,47.39952],[10.08284,47.39381],[10.09984,47.35476],[10.11934,47.37561],[10.14169,47.36718],[10.16587,47.36887],[10.16958,47.3713],[10.1694,47.38583],[10.1813,47.38725],[10.18185,47.39243],[10.19508,47.38935],[10.19988,47.38334],[10.21259,47.38039],[10.22705,47.38889],[10.23619,47.38192],[10.23168,47.37897],[10.23716,47.37357],[10.21699,47.35436],[10.2171,47.34988],[10.20424,47.33675],[10.20742,47.33232],[10.19951,47.32646],[10.21113,47.31898],[10.21597,47.31106],[10.21236,47.31122],[10.19913,47.29754],[10.18964,47.29394],[10.17961,47.29603],[10.17208,47.27908],[10.17404,47.27025],[10.17834,47.27011],[10.17449,47.2637],[10.21884,47.25533],[10.22343,47.24983],[10.21087,47.2478],[10.19776,47.23666],[10.20791,47.2328],[10.21428,47.21684],[10.21269,47.20432],[10.19963,47.19539],[10.19951,47.18525],[10.21151,47.17124],[10.2092,47.16537],[10.20851,47.15948],[10.21321,47.1577],[10.2222,47.15323],[10.22166,47.14925],[10.21481,47.14352],[10.20333,47.14215],[10.20887,47.13164],[10.18629,47.12886],[10.18652,47.11946],[10.17288,47.12033],[10.16299,47.11361],[10.15766,47.11426],[10.15442,47.10578],[10.13243,47.08122],[10.13459,47.06392],[10.15085,47.06184],[10.15693,47.04883],[10.14418,47.03355],[10.12326,47.02209],[10.13284,47.01204],[10.15447,47.00545],[10.15961,46.99882],[10.15442,46.99299],[10.16001,46.984],[10.14463,46.98301],[10.13492,46.96584],[10.13501,46.95483],[10.12684,46.9435],[10.09772,46.92676],[10.09954,46.91712],[10.10921,46.90834],[10.10908,46.89431],[10.12497,46.88014],[10.14147,46.87468],[10.13967,46.86217],[10.14506,46.8511],[10.13941,46.84738],[10.12309,46.84848],[10.11912,46.84417],[10.10518,46.8409],[10.09195,46.85143],[10.09265,46.85818],[10.08712,46.86128],[10.05488,46.8617],[10.0509,46.86442],[10.05192,46.87405],[10.03891,46.88611],[10.03221,46.88802],[10.01782,46.90161],[10.00494,46.89889],[9.98243,46.9062],[9.97793,46.91603],[9.96657,46.91222],[9.95907,46.91602],[9.94612,46.91235],[9.93758,46.91324],[9.92153,46.91882],[9.91231,46.92606],[9.90632,46.9253],[9.89449,46.93164],[9.87613,46.93463],[9.88071,46.94011],[9.87657,46.94071],[9.87488,46.95039],[9.87872,46.95707],[9.87073,46.96321],[9.88482,46.98546],[9.8923,46.99036],[9.88878,47.00072],[9.8707,47.00965],[9.87115,47.01306],[9.88035,47.01722],[9.87779,47.02055],[9.85974,47.02321],[9.85273,47.01641],[9.83612,47.01253],[9.82353,47.01986],[9.80756,47.02356],[9.78491,47.03849],[9.74808,47.03692],[9.74185,47.04268],[9.71821,47.04337],[9.70701,47.04805],[9.7076,47.05381],[9.69756,47.05239],[9.68392,47.05765],[9.68184,47.0621],[9.67743,47.06141],[9.65821,47.05818],[9.64506,47.05978],[9.64158,47.05598],[9.63654,47.0517],[9.62633,47.05133],[9.60705,47.06077],[9.6134,47.0695],[9.61153,47.0794],[9.61869,47.07817],[9.62339,47.08258],[9.63346,47.08344],[9.63564,47.09553],[9.62858,47.10756],[9.62083,47.11032],[9.63503,47.12813],[9.62467,47.13265],[9.62258,47.14135],[9.62587,47.1459],[9.62059,47.15164],[9.6089,47.14775],[9.59679,47.16294],[9.57946,47.17116],[9.56456,47.17029],[9.57302,47.1756],[9.57259,47.19079],[9.58032,47.19578],[9.58477,47.20532],[9.5687,47.21968],[9.55851,47.22416],[9.55176,47.22377],[9.56679,47.24288],[9.53073,47.27058],[9.54619,47.28005],[9.55634,47.29829],[9.58805,47.3173],[9.59966,47.3455],[9.61073,47.35571],[9.62446,47.36615],[9.65876,47.36946],[9.67255,47.38021],[9.67311,47.39194],[9.65162,47.40463],[9.64551,47.4312],[9.64512,47.4378],[9.65799,47.44779],[9.65898,47.4522],[9.62234,47.45747],[9.60904,47.47054],[9.60292,47.46198],[9.59514,47.46331],[9.58217,47.48276],[9.5622,47.49592],[9.55057,47.53718],[9.5827,47.53592],[9.60465,47.52952],[9.73478,47.53396],[9.73517,47.54661],[9.74164,47.55499],[9.7471,47.55569],[9.74337,47.55867],[9.75207,47.56747],[9.74806,47.57052],[9.75632,47.57262],[9.75633,47.57963],[9.76197,47.58096],[9.76553,47.58912],[9.76933,47.58739],[9.77697,47.59544],[9.79151,47.59352],[9.79999,47.59611],[9.81414,47.58807],[9.82381,47.5871],[9.82728,47.57997],[9.82079,47.57076],[9.82562,47.55922],[9.8171,47.55333],[9.81579,47.54767],[9.85023,47.54164],[9.85839,47.53388],[9.87451,47.52854],[9.87804,47.53876],[9.87515,47.54343],[9.88125,47.54814],[9.8891,47.54399],[9.89935,47.54475],[9.90666,47.54217],[9.91358,47.53255],[9.92189,47.52964],[9.93352,47.53265],[9.94108,47.53822],[9.9637,47.53472],[9.95883,47.54313],[9.96318,47.54229],[9.96805,47.54631]]],terms_url:"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm",terms_text:"Datenquelle: Land Vorarlberg – data.vorarlberg.gv.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/VoGISFlchenwidmungsplan.png"},{id:"vogis.cnv.at-DOM",name:"VoGIS: DOM (Surface model)",type:"wms",template:"http://vogis.cnv.at/mapserver/mapserv?map=i_hoehen_und_gelaende_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=schummerung_50cm_surface&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[9.96805,47.54631],[9.96809,47.54627],[9.97125,47.54425],[9.96484,47.53803],[9.9684,47.52802],[9.96526,47.52089],[9.99569,47.50278],[9.98736,47.49847],[10.00076,47.48211],[10.02301,47.48411],[10.03743,47.48918],[10.04477,47.48762],[10.05413,47.47589],[10.05347,47.46686],[10.06468,47.46364],[10.06999,47.45595],[10.08057,47.45536],[10.08857,47.46029],[10.09164,47.45893],[10.09385,47.44046],[10.10559,47.42872],[10.09374,47.41688],[10.07418,47.41472],[10.06914,47.41018],[10.08624,47.39952],[10.08284,47.39381],[10.09984,47.35476],[10.11934,47.37561],[10.14169,47.36718],[10.16587,47.36887],[10.16958,47.3713],[10.1694,47.38583],[10.1813,47.38725],[10.18185,47.39243],[10.19508,47.38935],[10.19988,47.38334],[10.21259,47.38039],[10.22705,47.38889],[10.23619,47.38192],[10.23168,47.37897],[10.23716,47.37357],[10.21699,47.35436],[10.2171,47.34988],[10.20424,47.33675],[10.20742,47.33232],[10.19951,47.32646],[10.21113,47.31898],[10.21597,47.31106],[10.21236,47.31122],[10.19913,47.29754],[10.18964,47.29394],[10.17961,47.29603],[10.17208,47.27908],[10.17404,47.27025],[10.17834,47.27011],[10.17449,47.2637],[10.21884,47.25533],[10.22343,47.24983],[10.21087,47.2478],[10.19776,47.23666],[10.20791,47.2328],[10.21428,47.21684],[10.21269,47.20432],[10.19963,47.19539],[10.19951,47.18525],[10.21151,47.17124],[10.2092,47.16537],[10.20851,47.15948],[10.21321,47.1577],[10.2222,47.15323],[10.22166,47.14925],[10.21481,47.14352],[10.20333,47.14215],[10.20887,47.13164],[10.18629,47.12886],[10.18652,47.11946],[10.17288,47.12033],[10.16299,47.11361],[10.15766,47.11426],[10.15442,47.10578],[10.13243,47.08122],[10.13459,47.06392],[10.15085,47.06184],[10.15693,47.04883],[10.14418,47.03355],[10.12326,47.02209],[10.13284,47.01204],[10.15447,47.00545],[10.15961,46.99882],[10.15442,46.99299],[10.16001,46.984],[10.14463,46.98301],[10.13492,46.96584],[10.13501,46.95483],[10.12684,46.9435],[10.09772,46.92676],[10.09954,46.91712],[10.10921,46.90834],[10.10908,46.89431],[10.12497,46.88014],[10.14147,46.87468],[10.13967,46.86217],[10.14506,46.8511],[10.13941,46.84738],[10.12309,46.84848],[10.11912,46.84417],[10.10518,46.8409],[10.09195,46.85143],[10.09265,46.85818],[10.08712,46.86128],[10.05488,46.8617],[10.0509,46.86442],[10.05192,46.87405],[10.03891,46.88611],[10.03221,46.88802],[10.01782,46.90161],[10.00494,46.89889],[9.98243,46.9062],[9.97793,46.91603],[9.96657,46.91222],[9.95907,46.91602],[9.94612,46.91235],[9.93758,46.91324],[9.92153,46.91882],[9.91231,46.92606],[9.90632,46.9253],[9.89449,46.93164],[9.87613,46.93463],[9.88071,46.94011],[9.87657,46.94071],[9.87488,46.95039],[9.87872,46.95707],[9.87073,46.96321],[9.88482,46.98546],[9.8923,46.99036],[9.88878,47.00072],[9.8707,47.00965],[9.87115,47.01306],[9.88035,47.01722],[9.87779,47.02055],[9.85974,47.02321],[9.85273,47.01641],[9.83612,47.01253],[9.82353,47.01986],[9.80756,47.02356],[9.78491,47.03849],[9.74808,47.03692],[9.74185,47.04268],[9.71821,47.04337],[9.70701,47.04805],[9.7076,47.05381],[9.69756,47.05239],[9.68392,47.05765],[9.68184,47.0621],[9.67743,47.06141],[9.65821,47.05818],[9.64506,47.05978],[9.64158,47.05598],[9.63654,47.0517],[9.62633,47.05133],[9.60705,47.06077],[9.6134,47.0695],[9.61153,47.0794],[9.61869,47.07817],[9.62339,47.08258],[9.63346,47.08344],[9.63564,47.09553],[9.62858,47.10756],[9.62083,47.11032],[9.63503,47.12813],[9.62467,47.13265],[9.62258,47.14135],[9.62587,47.1459],[9.62059,47.15164],[9.6089,47.14775],[9.59679,47.16294],[9.57946,47.17116],[9.56456,47.17029],[9.57302,47.1756],[9.57259,47.19079],[9.58032,47.19578],[9.58477,47.20532],[9.5687,47.21968],[9.55851,47.22416],[9.55176,47.22377],[9.56679,47.24288],[9.53073,47.27058],[9.54619,47.28005],[9.55634,47.29829],[9.58805,47.3173],[9.59966,47.3455],[9.61073,47.35571],[9.62446,47.36615],[9.65876,47.36946],[9.67255,47.38021],[9.67311,47.39194],[9.65162,47.40463],[9.64551,47.4312],[9.64512,47.4378],[9.65799,47.44779],[9.65898,47.4522],[9.62234,47.45747],[9.60904,47.47054],[9.60292,47.46198],[9.59514,47.46331],[9.58217,47.48276],[9.5622,47.49592],[9.55057,47.53718],[9.5827,47.53592],[9.60465,47.52952],[9.73478,47.53396],[9.73517,47.54661],[9.74164,47.55499],[9.7471,47.55569],[9.74337,47.55867],[9.75207,47.56747],[9.74806,47.57052],[9.75632,47.57262],[9.75633,47.57963],[9.76197,47.58096],[9.76553,47.58912],[9.76933,47.58739],[9.77697,47.59544],[9.79151,47.59352],[9.79999,47.59611],[9.81414,47.58807],[9.82381,47.5871],[9.82728,47.57997],[9.82079,47.57076],[9.82562,47.55922],[9.8171,47.55333],[9.81579,47.54767],[9.85023,47.54164],[9.85839,47.53388],[9.87451,47.52854],[9.87804,47.53876],[9.87515,47.54343],[9.88125,47.54814],[9.8891,47.54399],[9.89935,47.54475],[9.90666,47.54217],[9.91358,47.53255],[9.92189,47.52964],[9.93352,47.53265],[9.94108,47.53822],[9.9637,47.53472],[9.95883,47.54313],[9.96318,47.54229],[9.96805,47.54631]]],terms_url:"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm",terms_text:"Datenquelle: Land Vorarlberg – data.vorarlberg.gv.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/VoGISFlchenwidmungsplan.png"},{id:"vogis.cnv.at-ef2012_12cm",name:"VoGIS: Echtfarbenbild 2012 (12cm)",type:"wms",template:"http://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ef2012_12cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[9.54367,47.48479],[9.61451,47.45058],[9.61359,47.38272],[9.44246,47.24798],[9.44614,47.096],[9.42866,47.08911],[9.42498,47.01513],[9.85281,47.00196],[9.85741,46.89896],[9.9669,46.88952],[10.04511,46.8499],[10.15828,46.83353],[10.1592,46.89204],[10.14718,46.89248],[10.15115,46.94331],[10.16317,46.94287],[10.1647,46.96238],[10.17852,46.96681],[10.17576,47.10351],[10.22912,47.10226],[10.22084,47.24361],[10.26133,47.41261],[10.12423,47.40576],[10.09387,47.47795],[10.00462,47.50717],[9.98622,47.56121],[9.84361,47.56245],[9.84085,47.60714],[9.53999,47.60652],[9.54367,47.48479]]],terms_url:"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm",terms_text:"Datenquelle: Land Vorarlberg – data.vorarlberg.gv.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/VoGISFlchenwidmungsplan.png"},{id:"vogis.cnv.at-ef2015_10cm",name:"VoGIS: Echtfarbenbild 2015 (10cm)",type:"wms",template:"http://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ef2015_10cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[9.54367,47.48479],[9.61451,47.45058],[9.61359,47.38272],[9.44246,47.24798],[9.44614,47.096],[9.42866,47.08911],[9.42498,47.01513],[9.85281,47.00196],[9.85741,46.89896],[9.9669,46.88952],[10.04511,46.8499],[10.15828,46.83353],[10.1592,46.89204],[10.14718,46.89248],[10.15115,46.94331],[10.16317,46.94287],[10.1647,46.96238],[10.17852,46.96681],[10.17576,47.10351],[10.22912,47.10226],[10.22084,47.24361],[10.26133,47.41261],[10.12423,47.40576],[10.09387,47.47795],[10.00462,47.50717],[9.98622,47.56121],[9.84361,47.56245],[9.84085,47.60714],[9.53999,47.60652],[9.54367,47.48479]]],terms_url:"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm",terms_text:"Datenquelle: Land Vorarlberg – data.vorarlberg.gv.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/VoGISFlchenwidmungsplan.png"},{id:"vogis.cnv.at-ef2018_10cm",name:"VoGIS: Echtfarbenbild 2018 (10cm)",type:"wms",template:"http://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ef2018_10cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",polygon:[[[9.54367,47.48479],[9.61451,47.45058],[9.61359,47.38272],[9.44246,47.24798],[9.44614,47.096],[9.42866,47.08911],[9.42498,47.01513],[9.85281,47.00196],[9.85741,46.89896],[9.9669,46.88952],[10.04511,46.8499],[10.15828,46.83353],[10.1592,46.89204],[10.14718,46.89248],[10.15115,46.94331],[10.16317,46.94287],[10.1647,46.96238],[10.17852,46.96681],[10.17576,47.10351],[10.22912,47.10226],[10.22084,47.24361],[10.26133,47.41261],[10.12423,47.40576],[10.09387,47.47795],[10.00462,47.50717],[9.98622,47.56121],[9.84361,47.56245],[9.84085,47.60714],[9.53999,47.60652],[9.54367,47.48479]]],terms_url:"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm",terms_text:"Datenquelle: Land Vorarlberg – data.vorarlberg.gv.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/VoGISFlchenwidmungsplan.png"},{id:"vogis.cnv.at-wi2015_20cm",name:"VoGIS: Echtfarbenbild Winter 2015 (20cm)",type:"wms",template:"http://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=wi2015_20cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[10.17039,46.82979],[10.17108,46.93644],[10.18413,46.94113],[10.1855,47.10157],[10.23906,47.10437],[10.24283,47.15611],[10.25691,47.18704],[10.24558,47.27597],[10.25313,47.32347],[10.26893,47.32626],[10.26446,47.41102],[10.13194,47.4087],[10.13434,47.46107],[10.11752,47.46153],[10.11889,47.47337],[10.08731,47.47429],[10.08491,47.50724],[10.06843,47.507],[10.0674,47.5215],[10.02345,47.52428],[10.00079,47.57943],[9.84904,47.57757],[9.85042,47.61462],[9.72751,47.61277],[9.7203,47.59089],[9.70347,47.58915],[9.70313,47.54491],[9.68219,47.54491],[9.68047,47.55348],[9.56391,47.54931],[9.56202,47.53958],[9.55172,47.53958],[9.55172,47.53402],[9.52168,47.53471],[9.52701,47.30497],[9.50503,47.30264],[9.50091,47.23368],[9.52357,47.23228],[9.52426,47.16557],[9.54486,47.16405],[9.54383,47.15448],[9.57232,47.15401],[9.57026,47.12809],[9.59018,47.12867],[9.59189,47.10029],[9.57232,47.10017],[9.57713,47.02861],[9.72407,47.03048],[9.72304,47.01749],[9.77454,47.01562],[9.77626,47.00555],[9.79274,47.00391],[9.7948,46.99127],[9.83874,46.99314],[9.84012,46.90349],[9.89024,46.90725],[9.88543,46.88707],[9.95925,46.89141],[9.962,46.87675],[10.0001,46.87862],[9.99667,46.85715],[10.01864,46.85656],[10.02345,46.83073],[10.17039,46.82979]]],terms_url:"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm",terms_text:"Datenquelle: Land Vorarlberg – data.vorarlberg.gv.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/VoGISFlchenwidmungsplan.png"},{id:"wroclaw-orto2015",name:"Wrocław: Orthophotomap 2015 (aerial image)",type:"wms",template:"http://gis1.um.wroc.pl/arcgis/services/ogc/OGC_ortofoto_2015/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[17.14217,51.12846],[17.15659,51.1499],[17.15933,51.16056],[17.15899,51.17886],[17.14371,51.18155],[17.13024,51.18128],[17.12466,51.17396],[17.11436,51.17746],[17.0778,51.17746],[17.07642,51.1766],[17.07548,51.16825],[17.06698,51.16745],[17.04698,51.17493],[17.03376,51.17729],[17.02741,51.17729],[17.02733,51.18246],[17.02252,51.18816],[17.01299,51.18816],[17.0093,51.18499],[17.00312,51.18504],[17.00261,51.20016],[16.99162,51.20559],[16.97008,51.20763],[16.96424,51.20989],[16.95394,51.20968],[16.94656,51.20586],[16.9233,51.2001],[16.90811,51.21043],[16.89927,51.21027],[16.89292,51.2071],[16.88322,51.2071],[16.88073,51.20489],[16.88047,51.19666],[16.88322,51.19048],[16.87403,51.18719],[16.87026,51.18203],[16.85455,51.18031],[16.8421,51.18488],[16.82434,51.18467],[16.82056,51.17875],[16.82099,51.16373],[16.82502,51.15647],[16.80915,51.15194],[16.80657,51.14613],[16.80648,51.1366],[16.80769,51.13595],[16.81687,51.13601],[16.8161,51.13337],[16.81636,51.12459],[16.82932,51.12329],[16.83266,51.11834],[16.82923,51.11386],[16.82923,51.10993],[16.83215,51.10869],[16.84949,51.10826],[16.85661,51.09899],[16.87901,51.09252],[16.88862,51.09258],[16.89197,51.09667],[16.92107,51.09662],[16.9209,51.09263],[16.91661,51.0812],[16.91686,51.07942],[16.93514,51.07948],[16.93849,51.0736],[16.95248,51.06686],[16.95068,51.05806],[16.95454,51.05369],[16.96188,51.0473],[16.96879,51.04568],[16.98072,51.04584],[16.98424,51.05197],[16.99969,51.04668],[17.00776,51.04422],[17.01973,51.04169],[17.03286,51.0419],[17.03415,51.04673],[17.04509,51.04339],[17.06363,51.04339],[17.07037,51.05286],[17.08363,51.04428],[17.095,51.04368],[17.10633,51.04376],[17.10835,51.04684],[17.10822,51.05377],[17.10226,51.05868],[17.11136,51.0716],[17.12341,51.07179],[17.12299,51.07856],[17.15088,51.07861],[17.17277,51.09344],[17.17277,51.09956],[17.17697,51.10303],[17.17676,51.1092],[17.16363,51.1203],[17.14217,51.12846]]],terms_text:"Urząd Miasta Wrocław",icon:"https://i.imgur.com/PRqROXB.png"},{id:"Zabrze-2011",name:"Zabrze: Orthophotomap 2011 (aerial image)",type:"wms",template:"http://siot.um.zabrze.pl/arcgis/services/UMZ_Ortofoto_2011/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[18.74396,50.2753],[18.75586,50.27523],[18.75578,50.27633],[18.74516,50.28105],[18.74609,50.28886],[18.75084,50.28948],[18.74832,50.2957],[18.73379,50.29618],[18.73208,50.31571],[18.73613,50.31646],[18.73882,50.32763],[18.73725,50.33016],[18.73121,50.33169],[18.73054,50.3344],[18.73422,50.3371],[18.73428,50.34097],[18.73866,50.34308],[18.75419,50.34182],[18.75982,50.34624],[18.75438,50.34744],[18.75119,50.34979],[18.74603,50.36876],[18.75705,50.3692],[18.7639,50.36754],[18.77263,50.37628],[18.78436,50.37077],[18.78713,50.37295],[18.79821,50.37048],[18.80466,50.37561],[18.80165,50.37718],[18.80164,50.38222],[18.80509,50.38317],[18.81527,50.38167],[18.81446,50.37515],[18.82183,50.36883],[18.81737,50.36802],[18.82104,50.35843],[18.8159,50.35336],[18.81687,50.35076],[18.82294,50.35156],[18.83281,50.34962],[18.83474,50.3443],[18.84615,50.34448],[18.86293,50.32852],[18.8607,50.32776],[18.85088,50.33191],[18.84578,50.32923],[18.84891,50.32352],[18.83179,50.32028],[18.83192,50.30483],[18.84451,50.30286],[18.84429,50.29627],[18.82282,50.28615],[18.82845,50.28482],[18.82745,50.27972],[18.82322,50.27994],[18.8214,50.27414],[18.81392,50.27309],[18.79981,50.27351],[18.7987,50.2613],[18.7923,50.24641],[18.78261,50.24583],[18.76416,50.25145],[18.75396,50.25669],[18.75004,50.26402],[18.73991,50.26738],[18.73421,50.27084],[18.74396,50.2753]]],terms_text:"Urząd Miasta Zabrza"}];
26826
26827         var presets = {aerialway:{fields:["name","aerialway"],moreFields:["layer"],geometry:["point","vertex","line"],tags:{aerialway:"*"},searchable:false,name:"Aerialway"},aeroway:{icon:"maki-airport",fields:["aeroway"],geometry:["point","vertex","line","area"],tags:{aeroway:"*"},searchable:false,name:"Aeroway"},amenity:{fields:["amenity"],geometry:["point","vertex","line","area"],tags:{amenity:"*"},searchable:false,name:"Amenity"},attraction:{icon:"maki-star",fields:["name","attraction","operator","opening_hours","fee","charge_fee"],moreFields:["address","email","fax","opening_hours","payment_multi","phone","website"],geometry:["point","vertex","line","area"],tags:{attraction:"*"},searchable:false,name:"Attraction"},boundary:{fields:["boundary"],geometry:["line"],tags:{boundary:"*"},searchable:false,name:"Boundary",matchScore:0.45},building_point:{icon:"maki-home",fields:["{building}"],moreFields:["{building}"],geometry:["point"],tags:{building:"*"},matchScore:0.6,searchable:false,name:"Building"},embankment:{geometry:["line"],tags:{embankment:"yes"},name:"Embankment",matchScore:0.2,searchable:false},emergency:{fields:["emergency_combo"],geometry:["point","vertex","area"],tags:{emergency:"*"},searchable:false,name:"Emergency Feature"},ford_line:{geometry:["line"],tags:{ford:"*"},name:"Ford",searchable:false},highway:{fields:["name","highway"],geometry:["point","vertex","line","area"],tags:{highway:"*"},searchable:false,name:"Highway Feature"},indoor:{fields:["level","indoor_type"],geometry:["point","vertex","line","area"],tags:{indoor:"*"},matchScore:0.8,searchable:false,name:"Indoor Feature"},landuse:{fields:["name","landuse"],geometry:["area"],tags:{landuse:"*"},matchScore:0.9,searchable:false,name:"Land Use Feature"},leisure:{icon:"maki-pitch",fields:["name","leisure"],geometry:["point","vertex","line","area"],tags:{leisure:"*"},searchable:false,name:"Leisure Feature"},man_made:{icon:"temaki-storage_tank",fields:["name","man_made"],moreFields:["material"],geometry:["point","vertex","line","area"],tags:{man_made:"*"},matchScore:0.95,searchable:false,name:"Man Made Feature"},natural:{icon:"maki-natural",fields:["name","natural"],moreFields:["gnis/feature_id"],geometry:["point","vertex","line","area"],tags:{natural:"*"},searchable:false,name:"Natural Feature"},place:{fields:["name","place"],moreFields:["gnis/feature_id"],geometry:["point","vertex","area"],tags:{place:"*"},searchable:false,name:"Place"},playground:{icon:"maki-playground",fields:["playground","playground/theme","min_age","max_age","wheelchair","blind","height"],moreFields:["access_simple","colour","ref"],geometry:["point","vertex","line","area"],tags:{playground:"*"},searchable:false,name:"Playground Equipment"},power:{geometry:["point","vertex","line","area"],tags:{power:"*"},fields:["power"],moreFields:["material"],searchable:false,name:"Power Feature"},railway:{fields:["railway"],geometry:["point","vertex","line","area"],tags:{railway:"*"},searchable:false,name:"Railway Feature"},seamark:{icon:"maki-harbor",fields:["seamark/type"],geometry:["point","vertex","line","area"],tags:{"seamark:type":"*"},searchable:false,name:"Seamark"},tourism:{icon:"maki-attraction",fields:["name","tourism"],geometry:["point","vertex","line","area"],tags:{tourism:"*"},searchable:false,name:"Tourism Feature"},waterway:{fields:["name","waterway"],geometry:["point","vertex","line","area"],tags:{waterway:"*"},searchable:false,name:"Waterway Feature"},"addr/interpolation":{fields:["addr/interpolation"],geometry:["line"],tags:{"addr:interpolation":"*"},name:"Address Interpolation",searchable:false,matchScore:0.2},address:{fields:["address"],geometry:["point","vertex","area"],tags:{"addr:*":"*"},addTags:{},removeTags:{},reference:{key:"addr"},name:"Address",matchScore:0.15},"advertising/billboard":{icon:"temaki-billboard",fields:["direction","lit"],geometry:["point","vertex","line"],tags:{advertising:"billboard"},name:"Billboard"},"advertising/board":{fields:["lit","support","height"],geometry:["point"],tags:{advertising:"board"},name:"Notice Board"},"advertising/column":{icon:"temaki-storage_tank",fields:["lit"],geometry:["point","area"],tags:{advertising:"column"},name:"Advertising Column"},"advertising/poster_box":{fields:["lit","height"],geometry:["point"],tags:{advertising:"poster_box"},name:"Poster Box"},"advertising/totem":{fields:["operator","lit","visibility","direction","height"],geometry:["point"],tags:{advertising:"totem"},name:"Advertising Totem"},"aerialway/cable_car":{icon:"fas-tram",geometry:["line"],fields:["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/heating"],tags:{aerialway:"cable_car"},terms:["aerial cable","lift","ropeway","skiing","snowboarding","tramway"],name:"Cable Car"},"aerialway/chair_lift":{icon:"temaki-chairlift",geometry:["line"],fields:["name","oneway_yes","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],tags:{aerialway:"chair_lift"},terms:["aerial cable","skiing","snowboarding"],name:"Chair Lift"},"aerialway/drag_lift":{icon:"temaki-drag_lift",geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"drag_lift"},terms:["skiing","snowboarding","surface cable"],name:"Drag Lift"},"aerialway/gondola":{icon:"maki-aerialway",geometry:["line"],fields:["name","oneway","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],tags:{aerialway:"gondola"},terms:["aerial cable","lift","skiing","snowboarding"],name:"Gondola"},"aerialway/goods":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"goods"},terms:["aerial cable"],name:"Goods Aerialway"},"aerialway/j-bar":{icon:"temaki-j_bar_lift",geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"j-bar"},terms:["drag lift","skiing","snowboarding","surface cable","jaybar","jbar"],name:"J-Bar Lift"},"aerialway/magic_carpet":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration","aerialway/heating"],tags:{aerialway:"magic_carpet"},terms:["conveyor belt","skiing","snowboarding","surface lift"],name:"Magic Carpet Lift"},"aerialway/mixed_lift":{icon:"maki-aerialway",geometry:["line"],fields:["name","oneway_yes","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],tags:{aerialway:"mixed_lift"},terms:["aerial cable","skiing","snowboarding"],name:"Mixed Lift"},"aerialway/platter":{icon:"temaki-platter_lift",geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"platter"},terms:["button lift","disc lift","drag lift","poma lift","skiing","snowboarding","surface cable"],name:"Platter Lift"},"aerialway/pylon":{icon:"temaki-aerialway_pole",geometry:["point","vertex"],fields:["ref"],tags:{aerialway:"pylon"},terms:["chair lift pole","skiing","snowboarding","lift tower"],name:"Aerialway Pylon"},"aerialway/rope_tow":{geometry:["line"],fields:["name","oneway_yes","aerialway/capacity","aerialway/duration"],tags:{aerialway:"rope_tow"},terms:["bugel lift","drag lift","handle tow","skiing","snowboarding","surface cable"],name:"Rope Tow Lift"},"aerialway/t-bar":{icon:"temaki-t_bar_lift",geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"t-bar"},terms:["drag lift","skiing","surface cable","tbar"],name:"T-Bar Lift"},"aerialway/zip_line":{geometry:["line"],fields:["name","oneway_yes","aerialway/duration","maxweight","access_simple"],tags:{aerialway:"zip_line"},terms:["aerial runway","canopy","flying fox","foefie slide","gravity propelled aerial ropeslide","Tyrolean traverse","zip wire","zip-line","zipline","zipwire"],name:"Zip Line"},"aeroway/aerodrome":{icon:"maki-airport",geometry:["area","point"],fields:["name","iata","icao","operator","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["gnis/feature_id"],terms:["aerodrome","aeroway","airplane","airport","jet","plane"],tags:{aeroway:"aerodrome"},matchScore:0.9,name:"Airport"},"aeroway/apron":{icon:"maki-airport",geometry:["area"],terms:["ramp"],fields:["ref","surface"],tags:{aeroway:"apron"},name:"Apron"},"aeroway/gate":{icon:"maki-airport",geometry:["point"],fields:["ref_aeroway_gate"],tags:{aeroway:"gate"},name:"Airport Gate"},"aeroway/hangar":{icon:"fas-warehouse",geometry:["area"],fields:["name","building_area"],tags:{aeroway:"hangar"},addTags:{building:"hangar",aeroway:"hangar"},name:"Hangar"},"aeroway/helipad":{icon:"maki-heliport",geometry:["area","point"],fields:["name","ref","operator","surface","lit"],moreFields:["access_simple","address","charge_fee","fee","opening_hours"],terms:["helicopter","helipad","heliport"],tags:{aeroway:"helipad"},name:"Helipad"},"aeroway/holding_position":{icon:"maki-airport",geometry:["vertex"],fields:["ref"],tags:{aeroway:"holding_position"},name:"Aircraft Holding Position"},"aeroway/jet_bridge":{icon:"temaki-pedestrian_walled",geometry:["line"],fields:["ref_aeroway_gate","width","access_simple","wheelchair"],moreFields:["manufacturer"],terms:["aerobridge","air jetty","airbridge","finger","gangway","jet way","jetway","passenger boarding bridge","PBB","portal","skybridge","terminal gate connector"],tags:{aeroway:"jet_bridge"},addTags:{aeroway:"jet_bridge",highway:"corridor"},matchScore:1.05,name:"Jet Bridge"},"aeroway/parking_position":{icon:"maki-airport",geometry:["vertex","point","line"],fields:["ref"],tags:{aeroway:"parking_position"},name:"Aircraft Parking Position"},"aeroway/runway":{icon:"fas-plane-departure",geometry:["line","area"],terms:["landing strip"],fields:["ref_runway","surface","length","width"],tags:{aeroway:"runway"},name:"Runway"},"aeroway/spaceport":{icon:"fas-space-shuttle",geometry:["area","point"],fields:["name","operator","access_simple","website","wikidata"],moreFields:["email","fax","internet_access","internet_access/fee","internet_access/ssid","phone"],terms:["cosmodrome","rocket launch center","rocket launch complex","rocket launch site","rocket range","space port"],tags:{aeroway:"spaceport"},name:"Spaceport"},"aeroway/taxiway":{icon:"fas-plane",geometry:["line"],fields:["ref_taxiway","surface"],tags:{aeroway:"taxiway"},name:"Taxiway"},"aeroway/terminal":{icon:"maki-airport",geometry:["point","area"],terms:["airport","aerodrome"],fields:["name","operator","building_area","wheelchair","baby_feeding"],moreFields:["smoking"],tags:{aeroway:"terminal"},name:"Airport Terminal"},"aeroway/windsock":{icon:"fas-wind",geometry:["point","vertex"],fields:["ref","lit","height"],moreFields:["manufacturer"],tags:{aeroway:"windsock"},name:"Windsock"},"allotments/plot":{geometry:["area"],fields:["name","ref"],tags:{allotments:"plot"},reference:{key:"allotments",value:"plot"},name:"Community Garden Plot"},"amenity/bus_station":{icon:"maki-bus",fields:["name","building_area","operator","internet_access","internet_access/fee","internet_access/ssid"],geometry:["point","area"],tags:{amenity:"bus_station"},name:"Bus Station / Terminal",searchable:false,replacement:"public_transport/station_bus"},"amenity/coworking_space":{icon:"maki-commercial",fields:["name","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],geometry:["point","area"],tags:{amenity:"coworking_space"},name:"Coworking Space",searchable:false},"amenity/embassy":{icon:"temaki-embassy",fields:["name","country","address","building_area"],moreFields:["email","fax","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"embassy"},searchable:false,name:"Embassy"},"amenity/ferry_terminal":{icon:"maki-ferry",fields:["name","network","operator","address","building_area"],geometry:["point","vertex","area"],tags:{amenity:"ferry_terminal"},matchScore:0.95,name:"Ferry Station / Terminal",searchable:false,replacement:"public_transport/station_ferry"},"amenity/nursing_home":{icon:"maki-wheelchair",fields:["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],geometry:["point","area"],tags:{amenity:"nursing_home"},reference:{key:"social_facility",value:"nursing_home"},name:"Nursing Home",searchable:false},"amenity/recycling":{icon:"maki-recycling",fields:["recycling_type","recycling_accepts","collection_times"],geometry:["point","area"],tags:{amenity:"recycling"},name:"Recycling",searchable:false},"amenity/register_office":{icon:"maki-town-hall",fields:["name","address","building_area","opening_hours","operator"],geometry:["point","area"],tags:{amenity:"register_office"},reference:{key:"government",value:"register_office"},name:"Register Office",searchable:false},"amenity/scrapyard":{icon:"temaki-junk_car",fields:["name","operator","address","opening_hours"],geometry:["point","area"],tags:{amenity:"scrapyard"},reference:{key:"industrial",value:"scrap_yard"},name:"Scrap Yard",searchable:false},"amenity/swimming_pool":{icon:"fas-swimmer",geometry:["point","vertex","area"],tags:{amenity:"swimming_pool"},reference:{key:"leisure",value:"swimming_pool"},name:"Swimming Pool",searchable:false},"amenity/animal_boarding":{icon:"maki-veterinary",fields:["name","operator","address","building_area","opening_hours","animal_boarding"],moreFields:["email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["boarding","cat","cattery","dog","horse","kennel","kitten","pet","pet boarding","pet care","pet hotel","puppy","reptile"],tags:{amenity:"animal_boarding"},name:"Animal Boarding Facility"},"amenity/animal_breeding":{icon:"maki-veterinary",fields:["name","operator","address","building_area","opening_hours","animal_breeding"],moreFields:["email","fax","gnis/feature_id","level","phone","website","wheelchair"],geometry:["point","area"],terms:["breeding","bull","cat","cow","dog","horse","husbandry","kitten","livestock","pet breeding","puppy","reptile"],tags:{amenity:"animal_breeding"},name:"Animal Breeding Facility"},"amenity/animal_shelter":{icon:"maki-veterinary",fields:["name","operator","address","building_area","opening_hours","animal_shelter"],moreFields:["email","fax","gnis/feature_id","level","phone","website","wheelchair"],geometry:["point","area"],terms:["adoption","aspca","cat","dog","horse","kitten","pet care","pet rescue","puppy","raptor","reptile","rescue","spca","pound"],tags:{amenity:"animal_shelter"},name:"Animal Shelter"},"amenity/arts_centre":{icon:"maki-theatre",fields:["name","address","building_area","opening_hours","website"],moreFields:["charge_fee","email","fax","fee","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:[],tags:{amenity:"arts_centre"},name:"Arts Center"},"amenity/atm":{icon:"maki-bank",fields:["operator","network","cash_in","currency_multi","drive_through"],moreFields:["brand","covered","height","indoor","level","lit","manufacturer","name","opening_hours","wheelchair"],geometry:["point","vertex"],terms:["money","cash","machine"],tags:{amenity:"atm"},name:"ATM"},"amenity/bank":{icon:"maki-bank",fields:["name","operator","address","building_area","opening_hours","atm","drive_through"],moreFields:["air_conditioning","brand","currency_multi","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","phone","ref/vatin","website","wheelchair"],geometry:["point","area"],terms:["credit union","check","deposit","fund","investment","repository","reserve","safe","savings","stock","treasury","trust","vault"],tags:{amenity:"bank"},name:"Bank"},"amenity/bar":{icon:"maki-bar",fields:["name","address","building_area","opening_hours","min_age","brewery"],moreFields:["air_conditioning","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","microbrewery","operator","outdoor_seating","payment_multi","phone","ref/vatin","smoking","website","wheelchair"],geometry:["point","area"],terms:["dive","beer","bier","booze"],tags:{amenity:"bar"},name:"Bar"},"amenity/bar/lgbtq":{icon:"maki-bar",geometry:["point","area"],terms:["gay bar","lesbian bar","lgbtq bar","lgbt bar","lgb bar"],tags:{amenity:"bar",lgbtq:"primary"},name:"LGBTQ+ Bar"},"amenity/bbq":{icon:"maki-bbq",fields:["covered","fuel","access_simple"],moreFields:["lit"],geometry:["point"],terms:["bbq","grill"],tags:{amenity:"bbq"},name:"Barbecue/Grill"},"amenity/bench":{icon:"temaki-bench",fields:["backrest","material","seats","colour"],moreFields:["access_simple","height","inscription","level","lit","manufacturer","operator"],geometry:["point","vertex","line"],terms:["seat","chair"],tags:{amenity:"bench"},name:"Bench"},"amenity/bicycle_parking":{icon:"maki-bicycle",fields:["bicycle_parking","capacity","operator","operator/type","covered","access_simple","fee","payment_multi_fee","charge_fee"],moreFields:["colour","indoor","level","lit"],geometry:["point","vertex","area"],terms:["bike","cycle parking","cycling"],tags:{amenity:"bicycle_parking"},name:"Bicycle Parking"},"amenity/bicycle_parking/building":{icon:"temaki-bicycle_structure",fields:["{amenity/bicycle_parking}","opening_hours","building_area"],geometry:["point","vertex","area"],tags:{amenity:"bicycle_parking",bicycle_parking:"building"},reference:{key:"bicycle_parking"},terms:["Bike Parking Station","cycle parking","cycling","Multi-Storey Bicycle Park","Multi-Storey Bike Park"],name:"Bicycle Parking Garage"},"amenity/bicycle_parking/lockers":{icon:"temaki-bicycle_box",geometry:["point","vertex","area"],tags:{amenity:"bicycle_parking",bicycle_parking:"lockers"},reference:{key:"bicycle_parking"},terms:["cycle locker","cycling","Bike Lockers"],name:"Bicycle Lockers"},"amenity/bicycle_parking/shed":{icon:"maki-bicycle",fields:["{amenity/bicycle_parking}","building_area"],geometry:["point","vertex","area"],tags:{amenity:"bicycle_parking",bicycle_parking:"shed"},reference:{key:"bicycle_parking"},terms:["cycle shed","cycling","Bike Shed"],name:"Bicycle Shed"},"amenity/bicycle_rental":{icon:"temaki-bicycle_rental",fields:["capacity","network","operator","operator/type","fee","payment_multi_fee"],moreFields:["address","covered","email","fax","level","opening_hours","phone","website","wheelchair"],geometry:["point","vertex","area"],terms:["bike","bicycle","bikeshare","bike share","bicycle share","cycle dock","cycle hub","cycleshare","cycling"],tags:{amenity:"bicycle_rental"},name:"Bicycle Rental"},"amenity/bicycle_repair_station":{icon:"temaki-bicycle_repair",fields:["operator","brand","opening_hours","fee","payment_multi_fee","charge_fee","service/bicycle"],moreFields:["colour","covered","indoor","level","manufacturer"],geometry:["point","vertex"],terms:["bike chain","bike multitool","bike repair","bike tools","cycle pump","cycle repair","cycling"],tags:{amenity:"bicycle_repair_station"},name:"Bicycle Repair Tool Stand"},"amenity/biergarten":{icon:"fas-beer",fields:["name","address","opening_hours","outdoor_seating","brewery"],moreFields:["{amenity/bar}","building_area","cuisine"],geometry:["point","area"],tags:{amenity:"biergarten"},terms:["beer","bier","booze"],name:"Biergarten"},"amenity/boat_rental":{icon:"temaki-boat_rental",fields:["name","operator","operator/type","opening_hours","fee","payment_multi_fee","charge_fee"],moreFields:["access_simple","address","email","fax","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"boat_rental"},name:"Boat Rental"},"amenity/bureau_de_change":{icon:"temaki-money_hand",fields:["name","operator","payment_multi","currency_multi","address","building_area"],moreFields:["email","fax","level","opening_hours","phone","website","wheelchair"],geometry:["point","area"],terms:["bureau de change","money changer"],tags:{amenity:"bureau_de_change"},name:"Currency Exchange"},"amenity/cafe":{icon:"maki-cafe",fields:["name","cuisine","address","building_area","opening_hours","outdoor_seating","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["air_conditioning","bar","brand","capacity","delivery","diet_multi","email","fax","gnis/feature_id","level","min_age","not/name","payment_multi","phone","ref/vatin","reservation","smoking","takeaway","website","wheelchair"],geometry:["point","area"],terms:["bistro","coffee","tea"],tags:{amenity:"cafe"},name:"Cafe"},"amenity/car_pooling":{icon:"temaki-car_pool",fields:["name","operator","operator/type","capacity","address","opening_hours","lit"],moreFields:["email","fax","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"car_pooling"},terms:["car sharing","carpooling","lift sharing","ride sharing"],name:"Car Pooling Station"},"amenity/car_rental":{icon:"maki-car-rental",fields:["name","operator","address","opening_hours","payment_multi"],moreFields:["brand","email","fax","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"car_rental"},name:"Car Rental"},"amenity/car_sharing":{icon:"temaki-sign_and_car",fields:["name","operator","operator/type","capacity","address","payment_multi","supervised"],moreFields:["brand","email","fax","lit","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"car_sharing"},name:"Car Sharing Station"},"amenity/car_wash":{icon:"temaki-car_wash",fields:["name","operator","address","building_area","opening_hours","payment_multi","self_service"],moreFields:["email","fax","gnis/feature_id","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"car_wash"},name:"Car Wash"},"amenity/casino":{icon:"maki-casino",fields:["name","operator","address","building_area","opening_hours","gambling","smoking"],moreFields:["air_conditioning","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","min_age","payment_multi","phone","ref/vatin","website","wheelchair"],geometry:["point","area"],terms:["gambling","roulette","craps","poker","blackjack"],tags:{amenity:"casino"},name:"Casino"},"amenity/charging_station":{icon:"fas-charging-station",fields:["name","operator","capacity","access_simple","fee","payment_multi_fee","charge_fee"],moreFields:["brand","covered","level","manufacturer"],geometry:["point"],tags:{amenity:"charging_station"},terms:["EV","Electric Vehicle","Supercharger"],name:"Charging Station"},"amenity/childcare":{icon:"fas-child",fields:["name","operator","operator/type","address","building_area","opening_hours","website"],moreFields:["baby_feeding","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","max_age","min_age","not/name","payment_multi","phone","wheelchair"],geometry:["point","area"],terms:["daycare","orphanage","playgroup"],tags:{amenity:"childcare"},name:"Nursery/Childcare"},"amenity/cinema":{icon:"maki-cinema",fields:["name","address","screen","building_area","opening_hours","payment_multi"],moreFields:["air_conditioning","brand","email","fax","gnis/feature_id","level","min_age","phone","website","wheelchair"],geometry:["point","area"],terms:["drive-in","film","flick","movie","theater","picture","show","screen"],tags:{amenity:"cinema"},name:"Cinema"},"amenity/clinic":{icon:"maki-doctor",fields:["name","operator","operator/type","healthcare/speciality","address","building_area","opening_hours"],moreFields:["air_conditioning","brand","email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["medical","urgentcare"],tags:{amenity:"clinic"},addTags:{amenity:"clinic",healthcare:"clinic"},reference:{key:"amenity",value:"clinic"},name:"Clinic"},"amenity/clinic/abortion":{icon:"maki-hospital",geometry:["point","area"],terms:[],tags:{amenity:"clinic",healthcare:"clinic","healthcare:speciality":"abortion"},reference:{key:"amenity",value:"clinic"},name:"Abortion Clinic"},"amenity/clinic/fertility":{icon:"maki-hospital",geometry:["point","area"],terms:["egg","fertility","reproductive","sperm","ovulation"],tags:{amenity:"clinic",healthcare:"clinic","healthcare:speciality":"fertility"},reference:{key:"amenity",value:"clinic"},name:"Fertility Clinic"},"amenity/clock":{icon:"temaki-clock",fields:["name","support","display","visibility","date","faces"],moreFields:["covered","height","indoor","level","lit","manufacturer"],geometry:["point","vertex"],terms:["time"],tags:{amenity:"clock"},name:"Clock"},"amenity/clock/sundial":{icon:"temaki-clock",fields:["name","support","visibility","inscription"],moreFields:[],geometry:["point","vertex"],terms:["gnomon","shadow"],tags:{amenity:"clock",display:"sundial"},reference:{key:"display",value:"sundial"},name:"Sundial"},"amenity/college":{icon:"maki-college",fields:["name","operator","operator/type","address","website","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["denomination","email","fax","gnis/feature_id","not/name","phone","religion","wheelchair"],geometry:["area","point"],terms:["university","undergraduate school"],tags:{amenity:"college"},name:"College Grounds"},"amenity/community_centre":{icon:"maki-town-hall",fields:["name","operator","operator/type","address","building_area","opening_hours","website"],moreFields:["air_conditioning","baby_feeding","email","fax","gnis/feature_id","phone","polling_station","wheelchair"],geometry:["point","area"],terms:["event","hall"],tags:{amenity:"community_centre"},name:"Community Center"},"amenity/community_centre/lgbtq":{icon:"maki-town-hall",geometry:["point","area"],terms:["lgbtq event","lgbtq hall","lgbt event","lgbt hall","lgb event","lgb hall"],tags:{amenity:"community_centre",lgbtq:"primary"},name:"LGBTQ+ Community Center"},"amenity/compressed_air":{icon:"fas-tachometer-alt",fields:["operator","access_simple","fee","payment_multi_fee","charge_fee","covered","lit"],moreFields:["brand","manufacturer"],geometry:["point","area"],tags:{amenity:"compressed_air"},name:"Compressed Air"},"amenity/conference_centre":{icon:"fas-user-tie",fields:["name","operator","operator/type","building_area","address","website","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["air_conditioning","email","fax","gnis/feature_id","not/name","phone","smoking","wheelchair"],geometry:["point","area"],tags:{amenity:"conference_centre"},terms:["auditorium","conference","exhibition","exposition","lecture"],name:"Convention Center"},"amenity/courthouse":{icon:"fas-gavel",fields:["name","operator","address","building_area"],moreFields:["email","fax","gnis/feature_id","level","phone","polling_station","smoking","website","wheelchair"],geometry:["point","area"],tags:{amenity:"courthouse"},name:"Courthouse"},"amenity/crematorium":{icon:"maki-cemetery",fields:["name","website","phone","opening_hours","wheelchair"],moreFields:["address","email","fax","gnis/feature_id","level","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"crematorium"},terms:["cemetery","funeral"],name:"Crematorium"},"amenity/dentist":{icon:"maki-dentist",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],moreFields:["email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["tooth","teeth"],tags:{amenity:"dentist"},addTags:{amenity:"dentist",healthcare:"dentist"},reference:{key:"amenity",value:"dentist"},name:"Dentist"},"amenity/dive_centre":{icon:"temaki-scuba_diving",fields:["name","operator","address","building_area","opening_hours","scuba_diving"],moreFields:["email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["diving","scuba"],tags:{amenity:"dive_centre"},name:"Dive Center"},"amenity/doctors":{icon:"maki-doctor",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],moreFields:["email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["medic*","physician"],tags:{amenity:"doctors"},addTags:{amenity:"doctors",healthcare:"doctor"},reference:{key:"amenity",value:"doctors"},name:"Doctor"},"amenity/dojo":{icon:"maki-pitch",fields:["name","sport","address","building_area","opening_hours"],moreFields:["email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["martial arts","dojang"],tags:{amenity:"dojo"},name:"Dojo / Martial Arts Academy"},"amenity/dressing_room":{icon:"maki-clothing-store",fields:["operator","access_simple","gender","wheelchair","building_area"],moreFields:["charge_fee","fee","level","opening_hours","payment_multi_fee","ref"],geometry:["point","area"],terms:["changeroom","dressing room","fitting room","locker room"],tags:{amenity:"dressing_room"},name:"Changing Room"},"amenity/drinking_water":{icon:"maki-drinking-water",fields:["operator","access_simple","fee","payment_multi_fee","charge_fee","wheelchair","bottle"],moreFields:["covered","indoor","level","lit"],geometry:["point"],tags:{amenity:"drinking_water"},terms:["potable water source","water fountain","drinking fountain","bubbler","water tap"],name:"Drinking Water"},"amenity/driving_school":{icon:"maki-car",fields:["name","operator","operator/type","address","building_area","opening_hours"],moreFields:["email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"driving_school"},name:"Driving School"},"amenity/events_venue":{icon:"fas-users",fields:["name","operator","building_area","address","website","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["air_conditioning","email","fax","gnis/feature_id","level","min_age","phone","smoking","wheelchair"],geometry:["point","area"],tags:{amenity:"events_venue"},terms:["banquet hall","baptism","Bar Mitzvah","Bat Mitzvah","birthdays","celebrations","conferences","confirmation","meetings","parties","party","quinceañera","reunions","weddings"],name:"Events Venue"},"amenity/fast_food":{icon:"maki-fast-food",fields:["name","cuisine","operator","address","building_area","opening_hours","drive_through"],moreFields:["air_conditioning","brand","capacity","delivery","diet_multi","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","opening_hours","outdoor_seating","payment_multi","phone","ref/vatin","smoking","takeaway","website","wheelchair"],geometry:["point","area"],tags:{amenity:"fast_food"},terms:["restaurant","takeaway"],name:"Fast Food"},"amenity/fast_food/ice_cream":{icon:"fas-ice-cream",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"ice_cream"},reference:{key:"cuisine",value:"ice_cream"},name:"Ice Cream Fast Food",searchable:false},"amenity/fast_food/burger":{icon:"maki-fast-food",geometry:["point","area"],terms:["breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"burger"},reference:{key:"cuisine",value:"burger"},name:"Burger Fast Food"},"amenity/fast_food/chicken":{icon:"fas-drumstick-bite",geometry:["point","area"],terms:["breakfast","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"chicken"},reference:{key:"cuisine",value:"chicken"},name:"Chicken Fast Food"},"amenity/fast_food/donut":{icon:"temaki-donut",geometry:["point","area"],terms:["breakfast","brunch","cafe","canteen","coffee","dine","diner","donut","doughnut","dining","eat","lunch","table"],tags:{amenity:"fast_food",cuisine:"donut"},reference:{key:"cuisine",value:"donut"},name:"Donut Fast Food"},"amenity/fast_food/fish_and_chips":{icon:"fas-fish",geometry:["point","area"],terms:["breakfast","cafe","café","dine","dining","dinner","drive-in","eat","grill","lunch","table","french fries"],tags:{amenity:"fast_food",cuisine:"fish_and_chips"},reference:{key:"cuisine",value:"fish_and_chips"},name:"Fish & Chips Fast Food"},"amenity/fast_food/hot_dog":{icon:"fas-hotdog",geometry:["point","area"],terms:["ballpark","frankfurter","frank","hotdog stand","sandwich","sausage","wiener"],tags:{amenity:"fast_food",cuisine:"hot_dog"},reference:{key:"cuisine",value:"hot_dog"},name:"Hot Dog Fast Food"},"amenity/fast_food/kebab":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"kebab"},reference:{key:"cuisine",value:"kebab"},name:"Kebab Fast Food"},"amenity/fast_food/mexican":{icon:"fas-pepper-hot",geometry:["point","area"],terms:["breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table","tacos","burritos","enchiladas","fajitas","nachos","tortillas","salsa","tamales","quesadillas"],tags:{amenity:"fast_food",cuisine:"mexican"},reference:{key:"cuisine",value:"mexican"},name:"Mexican Fast Food"},"amenity/fast_food/pizza":{icon:"maki-restaurant-pizza",geometry:["point","area"],terms:["dine","dining","dinner","drive-in","eat","lunch","table","deep dish","thin crust","slice"],tags:{amenity:"fast_food",cuisine:"pizza"},reference:{key:"cuisine",value:"pizza"},name:"Pizza Fast Food"},"amenity/fast_food/sandwich":{icon:"temaki-sandwich",geometry:["point","area"],terms:["breakfast","cafe","café","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"sandwich"},reference:{key:"cuisine",value:"sandwich"},name:"Sandwich Fast Food"},"amenity/fire_station":{icon:"maki-fire-station",fields:["name","operator","address","building_area"],moreFields:["email","fax","gnis/feature_id","phone","polling_station","smoking","website","wheelchair"],geometry:["point","area"],terms:[],tags:{amenity:"fire_station"},name:"Fire Station"},"amenity/food_court":{icon:"maki-restaurant",fields:["name","operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["capacity","diet_multi","email","fax","gnis/feature_id","level","not/name","outdoor_seating","phone","smoking","website","wheelchair"],geometry:["point","area"],terms:["fast food","restaurant","food"],tags:{amenity:"food_court"},name:"Food Court"},"amenity/fountain":{icon:"temaki-fountain",fields:["name","operator","fountain","drinking_water","height","lit"],moreFields:["covered","indoor","level","manufacturer"],geometry:["point","area"],tags:{amenity:"fountain"},terms:["basin","water"],name:"Fountain"},"amenity/fuel":{icon:"maki-fuel",fields:["name","brand","operator","address","fuel_multi","self_service"],moreFields:["brand","building","email","fax","gnis/feature_id","opening_hours","payment_multi","phone","ref/vatin","website","wheelchair"],geometry:["point","area"],terms:["petrol","fuel","gasoline","propane","diesel","lng","cng","biodiesel"],tags:{amenity:"fuel"},name:"Gas Station"},"amenity/gambling":{icon:"fas-coins",fields:["{amenity/casino}"],moreFields:["{amenity/casino}"],geometry:["point","area"],terms:["betting","bingo","blackjack","casino","craps","gamble","gambling","keno","lottery","pachinko","poker","roulette","slot machines","slots"],tags:{amenity:"gambling"},name:"Gambling Hall"},"amenity/grave_yard":{icon:"maki-cemetery",fields:["religion","address"],moreFields:["email","fax","gnis/feature_id","phone","website"],geometry:["point","area"],tags:{amenity:"grave_yard"},terms:["burial ground","cemetary","cemetery","churchyard","columbarium","grave yard","graveyard","mausoleum","tomb"],name:"Graveyard"},"amenity/grit_bin":{icon:"fas-box",fields:["operator","access_simple","material","collection_times"],moreFields:["colour","height","lit"],geometry:["point","vertex"],tags:{amenity:"grit_bin"},terms:["salt","sand"],name:"Grit Bin"},"amenity/hospital":{icon:"maki-hospital",fields:["name","operator","operator/type","healthcare/speciality","address","emergency"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","phone","website","wheelchair"],geometry:["area","point"],terms:["clinic","doctor","emergency room","health","infirmary","institution","sanatorium","sanitarium","sick","surgery","ward"],tags:{amenity:"hospital"},addTags:{amenity:"hospital",healthcare:"hospital"},reference:{key:"amenity",value:"hospital"},name:"Hospital Grounds"},"amenity/hunting_stand":{icon:"temaki-binoculars",fields:["access_simple","lockable"],geometry:["point","vertex","area"],terms:["game","gun","lookout","rifle","shoot*","wild","watch"],tags:{amenity:"hunting_stand"},name:"Hunting Stand"},"amenity/ice_cream":{icon:"fas-ice-cream",fields:["name","address","building_area","opening_hours","outdoor_seating"],moreFields:["delivery","diet_multi","drive_through","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi","phone","takeaway","website","wheelchair"],geometry:["point","area"],terms:["gelato","sorbet","sherbet","frozen","yogurt"],tags:{amenity:"ice_cream"},name:"Ice Cream Shop"},"amenity/internet_cafe":{icon:"temaki-antenna",fields:["name","operator","operator/type","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["air_conditioning","email","fax","gnis/feature_id","level","min_age","opening_hours","outdoor_seating","payment_multi","phone","ref/vatin","smoking","website","wheelchair"],geometry:["point","area"],terms:["cybercafe","taxiphone","teleboutique","coffee","cafe","net","lanhouse"],tags:{amenity:"internet_cafe"},name:"Internet Cafe"},"amenity/karaoke_box":{icon:"maki-karaoke",fields:["name","operator","address","building_area","opening_hours","website"],moreFields:["air_conditioning","email","fax","gnis/feature_id","level","min_age","payment_multi","phone","ref/vatin","smoking","wheelchair"],geometry:["point","area"],terms:["karaoke club","karaoke room","karaoke television","KTV"],tags:{amenity:"karaoke_box"},name:"Karaoke Box"},"amenity/kindergarten":{icon:"temaki-school",fields:["name","operator","address","phone","preschool"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","max_age","min_age","not/name","opening_hours","payment_multi","website","wheelchair"],geometry:["area","point"],terms:["kindergarden","pre-school"],tags:{amenity:"kindergarten"},name:"Preschool / Kindergarten Grounds"},"amenity/language_school":{icon:"temaki-school",fields:["name","operator","operator/type","address","building_area","opening_hours","language_multi"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["esl"],tags:{amenity:"language_school"},name:"Language School"},"amenity/lavoir":{icon:"tnp-4310",fields:["name","operator","operator/type","address","access_simple","building_area"],moreFields:["gnis/feature_id","smoking","wheelchair"],geometry:["point","area"],tags:{amenity:"lavoir"},terms:["clothing","laundry","washing"],name:"Lavoir"},"amenity/letter_box":{icon:"temaki-letter_box",fields:["post","access_simple","collection_times","height"],moreFields:["covered","indoor","level","lit","lockable","manufacturer","material","operator","wheelchair"],geometry:["point","vertex"],tags:{amenity:"letter_box"},terms:["curbside delivery box","home delivery box","direct-to-door delivery box","letter hole","letter plate","letter slot","letterbox","letterhole","letterplate","letterslot","mail box","mail hole","mail slot","mailbox","mailhole","mailslot","through-door delivery box"],name:"Letter Box"},"amenity/library":{icon:"maki-library",fields:["name","operator","operator/type","building_area","address","ref/isil","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["access_simple","air_conditioning","baby_feeding","email","fax","gnis/feature_id","level","not/name","opening_hours","payment_multi","phone","polling_station","website","wheelchair"],geometry:["point","area"],terms:["book"],tags:{amenity:"library"},name:"Library"},"amenity/loading_dock":{icon:"fas-truck-loading",fields:["ref","operator","access_simple","door","width","height"],moreFields:["address","colour","level","lit","wheelchair"],geometry:["vertex"],terms:["door","loading bay","shipping","unloading","warehouse"],tags:{amenity:"loading_dock"},name:"Loading Dock"},"amenity/love_hotel":{icon:"maki-heart",fields:["name","operator","address","building_area","rooms","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["email","fax","gnis/feature_id","min_age","payment_multi","phone","ref/vatin","smoking","website","wheelchair"],geometry:["point","area"],tags:{amenity:"love_hotel"},name:"Love Hotel"},"amenity/marketplace":{icon:"maki-shop",fields:["name","operator","address","building","opening_hours"],moreFields:["email","fax","gnis/feature_id","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"marketplace"},name:"Marketplace"},"amenity/monastery":{icon:"maki-place-of-worship",fields:["name","religion","denomination","address","building_area"],moreFields:["email","fax","gnis/feature_id","phone","website","wheelchair"],geometry:["area","point"],terms:["abbey","basilica","bethel","cathedral","chancel","chantry","chapel","church","fold","house of God","house of prayer","house of worship","minster","mission","monastery","mosque","oratory","parish","sacellum","sanctuary","shrine","synagogue","tabernacle","temple"],tags:{amenity:"monastery"},name:"Monastery Grounds"},"amenity/money_transfer":{icon:"temaki-money_hand",fields:["name","brand","address","building_area","payment_multi","currency_multi"],moreFields:["email","fax","level","opening_hours","phone","website","wheelchair"],geometry:["point","area"],terms:["money order","check","bill","currency","finance","wire transfer","cable","person to person","cash to cash","exchange"],tags:{amenity:"money_transfer"},name:"Money Transfer Station"},"amenity/motorcycle_parking":{icon:"fas-motorcycle",fields:["capacity","operator","covered","access_simple"],geometry:["point","vertex","area"],tags:{amenity:"motorcycle_parking"},name:"Motorcycle Parking"},"amenity/music_school":{icon:"fas-music",fields:["name","operator","address","building_area","opening_hours"],moreFields:["email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["school of music"],tags:{amenity:"music_school"},name:"Music School"},"amenity/nightclub":{icon:"maki-bar",fields:["name","operator","address","building_area","opening_hours","min_age","smoking"],moreFields:["air_conditioning","email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"nightclub"},terms:["disco*","night club","dancing","dance club"],name:"Nightclub"},"amenity/nightclub/lgbtq":{icon:"maki-bar",geometry:["point","area"],tags:{amenity:"nightclub",lgbtq:"primary"},terms:["gay nightclub","lesbian nightclub","lgbtq nightclub","lgbt nightclub","lgb nightclub"],name:"LGBTQ+ Nightclub"},"amenity/parking_entrance":{icon:"maki-entrance-alt1",fields:["ref","access_simple","address","level"],geometry:["vertex"],tags:{amenity:"parking_entrance"},name:"Parking Garage Entrance / Exit"},"amenity/parking_space":{fields:["capacity"],geometry:["area","point","vertex"],terms:[],tags:{amenity:"parking_space"},matchScore:0.95,name:"Parking Space"},"amenity/parking":{icon:"temaki-car_parked",fields:["operator","operator/type","parking","capacity","access_simple","fee","payment_multi_fee","charge_fee","surface"],moreFields:["address","covered","email","fax","maxstay","name","opening_hours","park_ride","phone","ref","supervised","website","wheelchair"],geometry:["area","point","vertex"],tags:{amenity:"parking"},terms:["automobile parking","car lot","car parking","rv parking","truck parking","vehicle parking"],name:"Parking Lot"},"amenity/parking/multi-storey":{icon:"temaki-car_structure",fields:["name","{amenity/parking}","building"],moreFields:["{amenity/parking}","height","building/levels"],geometry:["area"],tags:{amenity:"parking",parking:"multi-storey"},addTags:{building:"parking",amenity:"parking",parking:"multi-storey"},reference:{key:"parking",value:"multi-storey"},terms:["car","indoor parking","multistorey car park","parkade","parking building","parking deck","parking garage","parking ramp","parking structure"],name:"Multilevel Parking Garage"},"amenity/parking/park_ride":{icon:"temaki-sign_and_car",geometry:["area","point","vertex"],tags:{amenity:"parking",park_ride:"yes"},reference:{key:"park_ride",value:"yes"},terms:["commuter parking lot","incentive parking lot","metro parking lot","park and pool lot","park and ride lot","P+R","public transport parking lot","public transit parking lot","train parking lot"],matchScore:0.95,name:"Park & Ride Lot"},"amenity/parking/underground":{icon:"temaki-car_structure",fields:["{amenity/parking}","layer"],geometry:["area","point","vertex"],tags:{amenity:"parking",parking:"underground"},addTags:{amenity:"parking",parking:"underground",layer:"-1"},reference:{key:"parking",value:"underground"},terms:["automobile parking","car lot","car parking","rv parking","subsurface parking","truck parking","vehicle parking"],name:"Underground Parking"},"amenity/payment_centre":{icon:"temaki-money_hand",fields:["name","brand","address","building_area","opening_hours","payment_multi"],moreFields:["currency_multi","email","fax","level","phone","website","wheelchair"],geometry:["point","area"],terms:["check","tax pay","bill pay","currency","finance","cash","money"],tags:{amenity:"payment_centre"},name:"Payment Center"},"amenity/payment_terminal":{icon:"far-credit-card",fields:["name","brand","address","opening_hours","payment_multi"],moreFields:["covered","currency_multi","indoor","level","wheelchair"],geometry:["point"],terms:["interactive kiosk","ekiosk","atm","bill pay","tax pay","phone pay","finance","cash","money transfer","card"],tags:{amenity:"payment_terminal"},name:"Payment Terminal"},"amenity/pharmacy":{icon:"maki-pharmacy",fields:["name","operator","address","building_area","opening_hours","dispensing","drive_through"],moreFields:["brand","email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"pharmacy"},addTags:{amenity:"pharmacy",healthcare:"pharmacy"},reference:{key:"amenity",value:"pharmacy"},terms:["apothecary","drug store","drugstore","med*","prescription"],name:"Pharmacy Counter"},"amenity/photo_booth":{icon:"fas-person-booth",fields:["name","operator","payment_multi","wheelchair"],moreFields:["brand","indoor","level"],geometry:["point","area"],terms:["photobooth","photo","booth","kiosk","camera"],tags:{amenity:"photo_booth"},name:"Photo Booth"},"amenity/place_of_worship":{icon:"maki-place-of-worship",fields:["name","religion","denomination","address","building_area","service_times"],moreFields:["air_conditioning","baby_feeding","email","fax","gnis/feature_id","internet_access","internet_access/ssid","level","opening_hours","phone","polling_station","website","wheelchair"],geometry:["point","area"],terms:["abbey","basilica","bethel","cathedral","chancel","chantry","chapel","church","fold","house of God","house of prayer","house of worship","minster","mission","mosque","oratory","parish","sacellum","sanctuary","shrine","synagogue","tabernacle","temple"],tags:{amenity:"place_of_worship"},name:"Place of Worship"},"amenity/place_of_worship/buddhist":{icon:"maki-religious-buddhist",fields:["name","religion","denomination","{amenity/place_of_worship}"],geometry:["point","area"],terms:["stupa","vihara","monastery","temple","pagoda","zendo","dojo"],tags:{amenity:"place_of_worship",religion:"buddhist"},reference:{key:"amenity",value:"place_of_worship"},name:"Buddhist Temple"},"amenity/place_of_worship/christian":{icon:"maki-religious-christian",fields:["name","religion","denomination","{amenity/place_of_worship}"],geometry:["point","area"],terms:["christian","abbey","basilica","bethel","cathedral","chancel","chantry","chapel","fold","house of God","house of prayer","house of worship","minster","mission","oratory","parish","sacellum","sanctuary","shrine","tabernacle","temple"],tags:{amenity:"place_of_worship",religion:"christian"},reference:{key:"amenity",value:"place_of_worship"},name:"Christian Church"},"amenity/place_of_worship/christian/jehovahs_witness":{icon:"maki-place-of-worship",geometry:["point","area"],terms:["christian","church","house of God","house of prayer","house of worship"],tags:{amenity:"place_of_worship",religion:"christian",denomination:"jehovahs_witness"},reference:{key:"denomination",value:"jehovahs_witness"},name:"Kingdom Hall of Jehovah's Witnesses"},"amenity/place_of_worship/christian/la_luz_del_mundo":{icon:"maki-place-of-worship",geometry:["point","area"],terms:["christian","church","house of God","house of prayer","house of worship","the light of the world church"],tags:{amenity:"place_of_worship",religion:"christian",denomination:"la_luz_del_mundo"},reference:{key:"denomination",value:"la_luz_del_mundo"},name:"La Luz del Mundo Temple"},"amenity/place_of_worship/christian/quaker":{icon:"maki-place-of-worship",geometry:["point","area"],terms:["christian","church","house of God","house of prayer","house of worship"],tags:{amenity:"place_of_worship",religion:"christian",denomination:"quaker"},reference:{key:"denomination",value:"quaker"},name:"Quaker Friends Meeting House"},"amenity/place_of_worship/hindu":{icon:"temaki-hinduism",fields:["name","religion","denomination","{amenity/place_of_worship}"],geometry:["point","area"],terms:["kovil","devasthana","mandir","kshetram","alayam","shrine","temple"],tags:{amenity:"place_of_worship",religion:"hindu"},reference:{key:"amenity",value:"place_of_worship"},name:"Hindu Temple"},"amenity/place_of_worship/jewish":{icon:"maki-religious-jewish",fields:["name","religion","denomination","{amenity/place_of_worship}"],geometry:["point","area"],terms:["jewish"],tags:{amenity:"place_of_worship",religion:"jewish"},reference:{key:"amenity",value:"place_of_worship"},name:"Jewish Synagogue"},"amenity/place_of_worship/muslim":{icon:"maki-religious-muslim",fields:["name","religion","denomination","{amenity/place_of_worship}"],geometry:["point","area"],terms:["islam","islamic center","muslim"],tags:{amenity:"place_of_worship",religion:"muslim"},reference:{key:"amenity",value:"place_of_worship"},name:"Muslim Mosque"},"amenity/place_of_worship/shinto":{icon:"temaki-shinto",fields:["name","religion","denomination","{amenity/place_of_worship}"],geometry:["point","area"],terms:["kami","torii"],tags:{amenity:"place_of_worship",religion:"shinto"},reference:{key:"amenity",value:"place_of_worship"},name:"Shinto Shrine"},"amenity/place_of_worship/sikh":{icon:"temaki-sikhism",fields:["name","religion","denomination","{amenity/place_of_worship}"],geometry:["point","area"],terms:["gurudwara","temple"],tags:{amenity:"place_of_worship",religion:"sikh"},reference:{key:"amenity",value:"place_of_worship"},name:"Sikh Temple"},"amenity/place_of_worship/taoist":{icon:"temaki-taoism",fields:["name","religion","denomination","{amenity/place_of_worship}"],geometry:["point","area"],terms:["daoist","monastery","temple"],tags:{amenity:"place_of_worship",religion:"taoist"},reference:{key:"amenity",value:"place_of_worship"},name:"Taoist Temple"},"amenity/planetarium":{icon:"maki-globe",fields:["name","operator","address","building_area","opening_hours"],moreFields:["air_conditioning","charge_fee","email","fax","fee","gnis/feature_id","payment_multi_fee","phone","website","wheelchair"],geometry:["point","area"],terms:["museum","astronomy","observatory"],tags:{amenity:"planetarium"},name:"Planetarium"},"amenity/police":{icon:"maki-police",fields:["name","operator","address","building_area","opening_hours"],moreFields:["email","fax","gnis/feature_id","level","phone","polling_station","website","wheelchair"],geometry:["point","area"],terms:["badge","constable","constabulary","cop","detective","fed","law","enforcement","officer","patrol"],tags:{amenity:"police"},name:"Police"},"amenity/polling_station":{icon:"fas-vote-yea",fields:["name","ref","operator","address","opening_hours","building_area"],moreFields:["air_conditioning","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","phone","website","wheelchair"],geometry:["point","area"],terms:["ballot box","ballot drop","democracy","elections","polling place","vote","voting booth","voting machine"],tags:{amenity:"polling_station"},addTags:{amenity:"polling_station",polling_station:"yes"},name:"Permanent Polling Place"},"amenity/post_box":{icon:"temaki-post_box",fields:["operator","collection_times","drive_through","ref"],moreFields:["access_simple","brand","covered","gnis/feature_id","height","indoor","level","manufacturer","wheelchair"],geometry:["point","vertex"],tags:{amenity:"post_box"},terms:["drop box","dropbox","letter drop","mail box","mail collection box","mail drop","mail dropoff","mailbox","package drop","pillar box","pillarbox","post box","postal box","postbox"],name:"Mail Drop Box"},"amenity/post_depot":{icon:"fas-mail-bulk",fields:["name","operator","address","building_area","phone"],moreFields:["email","fax","gnis/feature_id","opening_hours","website","wheelchair"],geometry:["point","area"],terms:["mail processing and distribution center","post depot"],tags:{amenity:"post_depot"},name:"Post Sorting Office"},"amenity/post_office":{icon:"maki-post",fields:["name","operator","address","building_area","opening_hours"],moreFields:["brand","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi","phone","polling_station","website","wheelchair"],geometry:["point","area"],terms:["letter","mail"],tags:{amenity:"post_office"},name:"Post Office"},"amenity/prep_school":{icon:"temaki-school",fields:["name","operator","address","building_area","opening_hours"],moreFields:["email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["academic","ACT","SAT","homework","math","reading","test prep","tutoring","writing"],tags:{amenity:"prep_school"},name:"Test Prep / Tutoring School"},"amenity/prison":{icon:"maki-prison",fields:["name","operator","operator/type","address"],moreFields:["email","fax","gnis/feature_id","phone","website","wheelchair"],geometry:["area","point"],terms:["cell","jail","correction"],tags:{amenity:"prison"},name:"Prison Grounds"},"amenity/pub":{icon:"maki-beer",fields:["name","address","building_area","opening_hours","smoking","brewery"],moreFields:["air_conditioning","cuisine","diet_multi","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","microbrewery","min_age","outdoor_seating","payment_multi","phone","ref/vatin","website","wheelchair"],geometry:["point","area"],tags:{amenity:"pub"},terms:["alcohol","drink","dive","beer","bier","booze"],name:"Pub"},"amenity/pub/lgbtq":{icon:"maki-beer",geometry:["point","area"],tags:{amenity:"pub",lgbtq:"primary"},terms:["gay pub","lesbian pub","lgbtq pub","lgbt pub","lgb pub"],name:"LGBTQ+ Pub"},"amenity/pub/microbrewery":{icon:"maki-beer",geometry:["point","area"],tags:{amenity:"pub",microbrewery:"yes"},reference:{key:"microbrewery"},terms:["alcohol","drink","dive","beer","bier","booze","craft brewery","microbrewery","small batch brewery"],name:"Brewpub"},"amenity/public_bath":{icon:"maki-water",fields:["name","bath/type","bath/open_air","bath/sand_bath","address","building_area","fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","opening_hours","payment_multi_fee","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"public_bath"},terms:["onsen","foot bath","hot springs"],name:"Public Bath"},"amenity/public_bookcase":{icon:"maki-library",fields:["name","public_bookcase/type","operator","opening_hours","capacity","website","lit"],moreFields:["access_simple","address","brand","email","level","location","phone","website","wheelchair"],geometry:["point","area"],terms:["library","bookcrossing"],tags:{amenity:"public_bookcase"},name:"Public Bookcase"},"amenity/ranger_station":{icon:"maki-ranger-station",fields:["name","operator","address","building_area","opening_hours"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","phone","website","wheelchair"],geometry:["point","area"],terms:["visitor center","visitor centre","permit center","permit centre","backcountry office","warden office","warden center"],tags:{amenity:"ranger_station"},name:"Ranger Station"},"amenity/recycling_centre":{icon:"maki-recycling",fields:["name","operator","operator/type","address","building","opening_hours","recycling_accepts"],moreFields:["charge_fee","email","fax","fee","payment_multi_fee","phone","website","wheelchair"],geometry:["point","area"],terms:["bottle","can","dump","glass","garbage","rubbish","scrap","trash"],tags:{amenity:"recycling",recycling_type:"centre"},reference:{key:"recycling_type",value:"*"},name:"Recycling Center"},"amenity/recycling_container":{icon:"maki-recycling",fields:["operator","recycling_accepts","collection_times"],moreFields:["colour","covered","indoor","level","manufacturer","material","opening_hours"],geometry:["point","area"],terms:["bin","can","bottle","glass","garbage","rubbish","scrap","trash"],tags:{amenity:"recycling",recycling_type:"container"},reference:{key:"amenity",value:"recycling"},name:"Recycling Container"},"amenity/recycling/container/electrical_items":{icon:"maki-recycling",fields:["{amenity/recycling_container}"],moreFields:["{amenity/recycling_container}"],geometry:["point","area"],terms:["computers","electronic waste","electronics recycling","ewaste bin","phones","tablets"],tags:{amenity:"recycling",recycling_type:"container","recycling:electrical_items":"yes"},reference:{key:"recycling:electrical_items",value:"yes"},name:"E-Waste Container"},"amenity/recycling/container/green_waste":{icon:"maki-recycling",fields:["{amenity/recycling_container}"],moreFields:["{amenity/recycling_container}"],geometry:["point","area"],terms:["biodegradable","biological","compost","decomposable","garbage bin","garden waste","organic","rubbish","food scrap"],tags:{amenity:"recycling",recycling_type:"container","recycling:green_waste":"yes"},reference:{key:"recycling:green_waste",value:"yes"},name:"Green Waste Container"},"amenity/research_institute":{icon:"fas-flask",fields:["name","operator","operator/type","address","website","internet_access","internet_access/fee"],moreFields:["email","fax","gnis/feature_id","internet_access/ssid","phone","wheelchair"],geometry:["point","area"],terms:["applied research","experimentation","r&d","r & d","r and d","research and development","research institution","research laboratory","research labs"],tags:{amenity:"research_institute"},name:"Research Institute Grounds"},"amenity/restaurant":{icon:"maki-restaurant",fields:["name","cuisine","address","building_area","opening_hours","phone","website"],moreFields:["air_conditioning","bar","brand","brewery","capacity","delivery","diet_multi","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","microbrewery","min_age","not/name","outdoor_seating","ref/vatin","reservation","smoking","stars","takeaway","wheelchair"],geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","coffee","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant"},name:"Restaurant"},"amenity/restaurant/american":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","coffee","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"american"},reference:{key:"cuisine",value:"american"},name:"American Restaurant"},"amenity/restaurant/asian":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"asian"},reference:{key:"cuisine",value:"asian"},name:"Asian Restaurant"},"amenity/restaurant/chinese":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"chinese"},reference:{key:"cuisine",value:"chinese"},name:"Chinese Restaurant"},"amenity/restaurant/french":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"french"},reference:{key:"cuisine",value:"french"},name:"French Restaurant"},"amenity/restaurant/german":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"german"},reference:{key:"cuisine",value:"german"},name:"German Restaurant"},"amenity/restaurant/greek":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table","gyros","pitas","olives"],tags:{amenity:"restaurant",cuisine:"greek"},reference:{key:"cuisine",value:"greek"},name:"Greek Restaurant"},"amenity/restaurant/indian":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table","curry"],tags:{amenity:"restaurant",cuisine:"indian"},reference:{key:"cuisine",value:"indian"},name:"Indian Restaurant"},"amenity/restaurant/italian":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table","pasta","pizza"],tags:{amenity:"restaurant",cuisine:"italian"},reference:{key:"cuisine",value:"italian"},name:"Italian Restaurant"},"amenity/restaurant/japanese":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"japanese"},reference:{key:"cuisine",value:"japanese"},name:"Japanese Restaurant"},"amenity/restaurant/mexican":{icon:"fas-pepper-hot",geometry:["point","area"],terms:["bar","breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table","tacos","burritos","enchiladas","fajitas","nachos","tortillas","salsa","tamales","quesadillas"],tags:{amenity:"restaurant",cuisine:"mexican"},reference:{key:"cuisine",value:"mexican"},name:"Mexican Restaurant"},"amenity/restaurant/noodle":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table","ramen noodles","soup","soba noodles","cellophane noodles","rice noodles"],tags:{amenity:"restaurant",cuisine:"noodle"},reference:{key:"cuisine",value:"noodle"},name:"Noodle Restaurant"},"amenity/restaurant/pizza":{icon:"maki-restaurant-pizza",geometry:["point","area"],terms:["bar","dine","dining","dinner","drive-in","eat","lunch","table","deep dish","thin crust","slice"],tags:{amenity:"restaurant",cuisine:"pizza"},reference:{key:"cuisine",value:"pizza"},name:"Pizza Restaurant"},"amenity/restaurant/seafood":{icon:"maki-restaurant-seafood",geometry:["point","area"],terms:["bar","breakfast","cafe","café","dine","dining","dinner","drive-in","eat","grill","lunch","table","fish","shellfish","molluscs","crustaceans","clams","oysters","lobsters","crab","shrimp","squid","octopus"],tags:{amenity:"restaurant",cuisine:"seafood"},reference:{key:"cuisine",value:"seafood"},name:"Seafood Restaurant"},"amenity/restaurant/steakhouse":{icon:"maki-slaughterhouse",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table","steak house","chop house","beef"],tags:{amenity:"restaurant",cuisine:"steak_house"},reference:{key:"cuisine",value:"steak_house"},name:"Steakhouse"},"amenity/restaurant/sushi":{icon:"temaki-temaki",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"sushi"},reference:{key:"cuisine",value:"sushi"},name:"Sushi Restaurant"},"amenity/restaurant/thai":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"thai"},reference:{key:"cuisine",value:"thai"},name:"Thai Restaurant"},"amenity/restaurant/turkish":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"turkish"},reference:{key:"cuisine",value:"turkish"},name:"Turkish Restaurant"},"amenity/restaurant/vietnamese":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"vietnamese"},reference:{key:"cuisine",value:"vietnamese"},name:"Vietnamese Restaurant"},"amenity/sanitary_dump_station":{icon:"temaki-storage_tank",fields:["operator","access_simple","fee","payment_multi_fee","charge_fee","water_point"],moreFields:["opening_hours"],geometry:["point","vertex","area"],terms:["Motor Home","Camper","Sanitary","Dump Station","Elsan","CDP","CTDP","Chemical Toilet"],tags:{amenity:"sanitary_dump_station"},name:"RV Toilet Disposal"},"amenity/school":{icon:"temaki-school",fields:["name","operator","operator/type","address","religion","denomination","website"],moreFields:["charge_fee","email","fax","fee","gnis/feature_id","internet_access","internet_access/ssid","level","phone","polling_station","wheelchair"],geometry:["area","point"],terms:["academy","elementary school","middle school","high school"],tags:{amenity:"school"},name:"School Grounds"},"amenity/shelter":{icon:"maki-shelter",fields:["name","shelter_type","building_area","bench","bin"],moreFields:["gnis/feature_id","lit","lockable","wheelchair"],geometry:["point","vertex","area"],terms:["lean-to","gazebo","picnic"],tags:{amenity:"shelter"},name:"Shelter"},"amenity/shelter/gazebo":{icon:"maki-shelter",fields:["name","building_area","bench","lit"],geometry:["point","area"],tags:{amenity:"shelter",shelter_type:"gazebo"},name:"Gazebo"},"amenity/shelter/lean_to":{icon:"temaki-sleep_shelter",fields:["name","operator","building_area"],geometry:["point","area"],tags:{amenity:"shelter",shelter_type:"lean_to"},terms:["alpine hut","cabin","leanto","lodging","overnight accommodations","sleeping shelter","wilderness hut"],name:"Lean-To"},"amenity/shelter/picnic_shelter":{icon:"temaki-picnic_shelter",fields:["name","shelter_type","building_area","lit","bin"],geometry:["point","area"],tags:{amenity:"shelter",shelter_type:"picnic_shelter"},reference:{key:"shelter_type",value:"picnic_shelter"},terms:["pavilion"],name:"Picnic Shelter"},"amenity/shelter/public_transport":{icon:"temaki-transit_shelter",fields:["name","shelter_type","building_area","bench","lit"],geometry:["point","area"],terms:["bus stop","metro stop","public transit shelter","public transport shelter","tram stop shelter","waiting"],tags:{amenity:"shelter",shelter_type:"public_transport"},reference:{key:"shelter_type",value:"public_transport"},name:"Transit Shelter"},"amenity/shower":{icon:"temaki-shower",fields:["opening_hours","access_simple","fee","payment_multi_fee","charge_fee","supervised","building_area","hot_water","wheelchair"],moreFields:["address","gender","level","operator"],geometry:["point","vertex","area"],terms:["rain closet"],tags:{amenity:"shower"},name:"Shower"},"amenity/smoking_area":{icon:"fas-smoking",fields:["name","shelter","bin","bench","opening_hours"],moreFields:["covered","level","lit","wheelchair"],geometry:["point","vertex","area"],terms:[],tags:{amenity:"smoking_area"},name:"Smoking Area"},"amenity/social_centre":{icon:"fas-handshake",fields:["name","brand","operator","operator/type","address","building_area"],moreFields:["air_conditioning","baby_feeding","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","phone","polling_station","website","wheelchair"],geometry:["point","area"],terms:["event","fraternal","fraternity","hall","organization","professional","society","sorority","union","vetern"],tags:{amenity:"social_centre"},name:"Social Center"},"amenity/social_facility":{icon:"temaki-social_facility",fields:["name","operator","operator/type","address","building_area","social_facility","social_facility_for"],moreFields:["baby_feeding","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","opening_hours","phone","website","wheelchair"],geometry:["point","area"],terms:[],tags:{amenity:"social_facility"},name:"Social Facility"},"amenity/social_facility/ambulatory_care":{icon:"maki-wheelchair",geometry:["point","area"],tags:{amenity:"social_facility",social_facility:"ambulatory_care"},reference:{key:"social_facility",value:"ambulatory_care"},name:"Ambulatory Care"},"amenity/social_facility/food_bank":{icon:"temaki-social_facility",geometry:["point","area"],terms:[],tags:{amenity:"social_facility",social_facility:"food_bank"},reference:{key:"social_facility",value:"food_bank"},name:"Food Bank"},"amenity/social_facility/group_home":{icon:"maki-wheelchair",fields:["{amenity/social_facility}","wheelchair"],geometry:["point","area"],terms:["old","senior","living","care home","assisted living"],tags:{amenity:"social_facility",social_facility:"group_home","social_facility:for":"senior"},reference:{key:"social_facility",value:"group_home"},name:"Elderly Group Home"},"amenity/social_facility/homeless_shelter":{icon:"temaki-social_facility",geometry:["point","area"],terms:["houseless","unhoused","displaced"],tags:{amenity:"social_facility",social_facility:"shelter","social_facility:for":"homeless"},reference:{key:"social_facility",value:"shelter"},name:"Homeless Shelter"},"amenity/social_facility/nursing_home":{icon:"maki-wheelchair",fields:["{amenity/social_facility}","wheelchair"],geometry:["point","area"],terms:["elderly","living","nursing","old","senior","assisted living"],tags:{amenity:"social_facility",social_facility:"nursing_home","social_facility:for":"senior"},reference:{key:"social_facility",value:"nursing_home"},name:"Nursing Home"},"amenity/studio":{icon:"fas-microphone",fields:["name","studio","address","building_area","website"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","phone","wheelchair"],geometry:["point","area"],terms:["recording","radio","television"],tags:{amenity:"studio"},name:"Studio"},"amenity/studio/audio":{icon:"fas-microphone",geometry:["point","area"],terms:["audio mixing","audio production","audio recording","audio studio"],tags:{amenity:"studio",studio:"audio"},reference:{key:"studio",value:"audio"},name:"Recording Studio"},"amenity/studio/radio":{icon:"fas-microphone",geometry:["point","area"],terms:["am radio","fm radio","radio broadcast","radio studio"],tags:{amenity:"studio",studio:"radio"},reference:{key:"studio",value:"radio"},name:"Radio Station"},"amenity/studio/television":{icon:"fas-video",geometry:["point","area"],terms:["television broadcast","television studio","tv broadcast","tv station","tv studio"],tags:{amenity:"studio",studio:"television"},reference:{key:"studio",value:"television"},name:"Television Station"},"amenity/studio/video":{icon:"fas-video",geometry:["point","area"],terms:["movie production","movie studio","video production","video recording","video studio"],tags:{amenity:"studio",studio:"video"},reference:{key:"studio",value:"video"},name:"Film Studio"},"amenity/taxi":{icon:"fas-taxi",fields:["name","operator","capacity","address"],moreFields:["access_simple","brand","opening_hours","wheelchair"],geometry:["point","vertex","area"],terms:["cab"],tags:{amenity:"taxi"},name:"Taxi Stand"},"amenity/telephone":{icon:"maki-telephone",fields:["operator","phone","fee","payment_multi_fee","charge_fee","booth"],moreFields:["covered","indoor","internet_access","internet_access/fee","internet_access/ssid","level","lit","ref","sms","video_calls","wheelchair"],geometry:["point","vertex"],tags:{amenity:"telephone"},terms:["phone"],name:"Telephone"},"amenity/theatre":{icon:"maki-theatre",fields:["name","operator","address","building_area","website"],moreFields:["air_conditioning","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","min_age","payment_multi","phone","wheelchair"],geometry:["point","area"],terms:["theatre","performance","play","musical"],tags:{amenity:"theatre"},name:"Theater"},"amenity/theatre/type/amphi":{icon:"maki-theatre",fields:["name","operator","address","lit"],geometry:["point","area"],terms:["open air","outdoor","greek","ampi"],tags:{amenity:"theatre","theatre:type":"amphi"},name:"Amphitheatre"},"amenity/toilets":{icon:"maki-toilet",fields:["toilets/disposal","access_simple","gender","changing_table","wheelchair","building_area"],moreFields:["charge_fee","fee","level","opening_hours","operator","payment_multi_fee","toilets/handwashing","toilets/position"],geometry:["point","vertex","area"],terms:["bathroom","restroom","outhouse","privy","head","lavatory","latrine","water closet","WC","W.C."],tags:{amenity:"toilets"},name:"Toilets"},"amenity/toilets/disposal/flush":{icon:"fas-toilet",fields:["toilets/disposal","{amenity/toilets}"],moreFields:["{amenity/toilets}"],geometry:["point","vertex","area"],terms:["bathroom","head","lavatory","privy","restroom","water closet","WC","W.C."],tags:{amenity:"toilets","toilets:disposal":"flush"},reference:{key:"toilets:disposal",value:"flush"},name:"Flush Toilets"},"amenity/toilets/disposal/pitlatrine":{icon:"tnp-2009541",fields:["toilets/disposal","{amenity/toilets}","toilets/handwashing"],moreFields:["{amenity/toilets}"],geometry:["point","vertex","area"],terms:["head","lavatory","long drop","outhouse","pit toilet","privy"],tags:{amenity:"toilets","toilets:disposal":"pitlatrine"},reference:{key:"toilets:disposal",value:"pitlatrine"},name:"Pit Latrine"},"amenity/townhall":{icon:"maki-town-hall",fields:["name","operator","townhall/type","address","building_area"],moreFields:["baby_feeding","email","fax","gnis/feature_id","phone","polling_station","smoking","website","wheelchair"],geometry:["point","area"],terms:["village","city","government","courthouse","municipal"],tags:{amenity:"townhall"},name:"Town Hall"},"amenity/townhall/city":{icon:"maki-town-hall",geometry:["point","area"],terms:["council","courthouse","government","mayor","municipality"],tags:{amenity:"townhall","townhall:type":"city"},name:"City Hall"},"amenity/toy_library":{icon:"fas-chess-knight",fields:["operator","address","building_area","opening_hours"],moreFields:["level","website","wheelchair"],geometry:["point","area"],terms:["game","toy"],tags:{amenity:"toy_library"},name:"Toy Library"},"amenity/university":{icon:"maki-college",fields:["{amenity/college}"],moreFields:["{amenity/college}"],geometry:["area","point"],terms:["college","graduate school","PhD program","master's degree program"],tags:{amenity:"university"},name:"University Grounds"},"amenity/vehicle_inspection":{icon:"maki-car",fields:["name","operator","address","building_area","opening_hours"],moreFields:["email","fax","gnis/feature_id","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["car inspection"],tags:{amenity:"vehicle_inspection"},name:"Vehicle Inspection"},"amenity/vending_machine":{icon:"temaki-vending_machine",fields:["vending","ref","operator","payment_multi","currency_multi"],moreFields:["blind","brand","covered","height","indoor","level","manufacturer"],geometry:["point","vertex"],terms:[],tags:{amenity:"vending_machine"},matchScore:0.9,name:"Vending Machine"},"amenity/vending_machine/bottle_return":{icon:"temaki-vending_machine",fields:["vending","operator"],geometry:["point","vertex"],terms:["bottle return"],tags:{amenity:"vending_machine",vending:"bottle_return"},reference:{key:"vending",value:"bottle_return"},name:"Bottle Return Machine"},"amenity/vending_machine/bread":{icon:"temaki-vending_bread",geometry:["point","vertex"],terms:["baguette","bread"],tags:{amenity:"vending_machine",vending:"bread"},reference:{key:"vending",value:"bread"},name:"Bread Vending Machine"},"amenity/vending_machine/cigarettes":{icon:"temaki-vending_cigarettes",moreFields:["{amenity/vending_machine}","min_age"],geometry:["point","vertex"],terms:["cigarette"],tags:{amenity:"vending_machine",vending:"cigarettes"},reference:{key:"vending",value:"cigarettes"},name:"Cigarette Vending Machine"},"amenity/vending_machine/coffee":{icon:"temaki-vending_hot_drink",geometry:["point","vertex"],terms:["coffee"],tags:{amenity:"vending_machine",vending:"coffee"},reference:{key:"vending",value:"coffee"},name:"Coffee Vending Machine"},"amenity/vending_machine/condoms":{icon:"temaki-vending_love",geometry:["point","vertex"],terms:["condom"],tags:{amenity:"vending_machine",vending:"condoms"},reference:{key:"vending",value:"condoms"},name:"Condom Vending Machine"},"amenity/vending_machine/drinks":{icon:"temaki-vending_cold_drink",fields:["vending","drink_multi","{amenity/vending_machine}"],geometry:["point","vertex"],terms:["drink","soda","beverage","juice","pop"],tags:{amenity:"vending_machine",vending:"drinks"},reference:{key:"vending",value:"drinks"},name:"Drink Vending Machine"},"amenity/vending_machine/eggs":{icon:"temaki-vending_eggs",geometry:["point","vertex"],terms:["egg"],tags:{amenity:"vending_machine",vending:"eggs"},reference:{key:"vending",value:"eggs"},name:"Egg Vending Machine"},"amenity/vending_machine/electronics":{icon:"temaki-vending_machine",geometry:["point","vertex"],terms:["cable","charger","earbud","headphone","phone","tablet"],tags:{amenity:"vending_machine",vending:"electronics"},reference:{key:"vending",value:"electronics"},name:"Electronics Vending Machine"},"amenity/vending_machine/elongated_coin":{icon:"temaki-vending_flat_coin",geometry:["point","vertex"],terms:["coin","crush","elongated","flatten","penny","souvenir"],tags:{amenity:"vending_machine",vending:"elongated_coin"},reference:{key:"vending",value:"elongated_coin"},name:"Flat Coin Vending Machine"},"amenity/vending_machine/excrement_bags":{icon:"temaki-vending_pet_waste",geometry:["point","vertex"],terms:["excrement bags","poop","waste","dog","animal"],tags:{amenity:"vending_machine",vending:"excrement_bags"},reference:{key:"vending",value:"excrement_bags"},name:"Excrement Bag Dispenser"},"amenity/vending_machine/feminine_hygiene":{icon:"temaki-vending_venus",geometry:["point","vertex"],terms:["condom","tampon","pad","woman","women","menstrual hygiene products","personal care"],tags:{amenity:"vending_machine",vending:"feminine_hygiene"},reference:{key:"vending",value:"feminine_hygiene"},name:"Feminine Hygiene Vending Machine"},"amenity/vending_machine/food":{icon:"temaki-vending_machine",geometry:["point","vertex"],terms:["food"],tags:{amenity:"vending_machine",vending:"food"},reference:{key:"vending",value:"food"},name:"Food Vending Machine"},"amenity/vending_machine/fuel":{icon:"maki-fuel",geometry:["point","vertex"],terms:["petrol","fuel","gasoline","propane","diesel","lng","cng","biodiesel"],tags:{amenity:"vending_machine",vending:"fuel"},reference:{key:"vending",value:"fuel"},name:"Gas Pump",matchScore:0.5},"amenity/vending_machine/ice_cream":{icon:"temaki-vending_ice_cream",geometry:["point","vertex"],terms:["chocolate","ice cream","frozen","popsicle","vanilla"],tags:{amenity:"vending_machine",vending:"ice_cream"},reference:{key:"vending",value:"ice_cream"},name:"Ice Cream Vending Machine"},"amenity/vending_machine/ice_cubes":{icon:"temaki-vending_ice",geometry:["point","vertex"],terms:["cubes","ice"],tags:{amenity:"vending_machine",vending:"ice_cubes"},reference:{key:"vending",value:"ice_cubes"},name:"Ice Vending Machine"},"amenity/vending_machine/newspapers":{icon:"temaki-vending_newspaper",fields:["vending","ref","operator","fee","payment_multi_fee","charge_fee","currency_multi"],geometry:["point","vertex"],terms:["newspaper"],tags:{amenity:"vending_machine",vending:"newspapers"},reference:{key:"vending",value:"newspapers"},name:"Newspaper Vending Machine"},"amenity/vending_machine/parcel_pickup_dropoff":{icon:"temaki-vending_lockers",fields:["vending","operator","payment_multi","currency_multi"],geometry:["point","vertex"],terms:["mail","packstation","parcel","pickup"],tags:{amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in"},reference:{key:"vending",value:"parcel_pickup;parcel_mail_in"},name:"Parcel Pickup/Dropoff Locker"},"amenity/vending_machine/parcel_pickup":{icon:"temaki-vending_lockers",fields:["vending","operator"],geometry:["point","vertex"],terms:["amazon","locker","mail","packstation","parcel","pickup"],tags:{amenity:"vending_machine",vending:"parcel_pickup"},reference:{key:"vending",value:"parcel_pickup"},name:"Parcel Pickup Locker"},"amenity/vending_machine/parking_tickets":{icon:"temaki-vending_tickets",geometry:["point","vertex"],terms:["parking","ticket"],tags:{amenity:"vending_machine",vending:"parking_tickets"},reference:{key:"vending",value:"parking_tickets"},matchScore:0.94,name:"Parking Ticket Vending Machine"},"amenity/vending_machine/public_transport_tickets":{icon:"temaki-vending_tickets",geometry:["point","vertex"],terms:["bus","train","ferry","rail","ticket","transportation"],tags:{amenity:"vending_machine",vending:"public_transport_tickets"},reference:{key:"vending",value:"public_transport_tickets"},name:"Transit Ticket Vending Machine"},"amenity/vending_machine/stamps":{icon:"temaki-vending_stamps",geometry:["point","vertex"],terms:["mail","postage","stamp"],tags:{amenity:"vending_machine",vending:"stamps"},reference:{key:"vending",value:"stamps"},name:"Postage Vending Machine"},"amenity/vending_machine/sweets":{icon:"temaki-vending_machine",geometry:["point","vertex"],terms:["candy","gum","chip","pretzel","cookie","cracker"],tags:{amenity:"vending_machine",vending:"sweets"},reference:{key:"vending",value:"sweets"},name:"Snack Vending Machine"},"amenity/veterinary":{icon:"temaki-veterinary_care",fields:["name","operator","address","building_area","opening_hours"],moreFields:["charge_fee","email","fax","fee","gnis/feature_id","level","payment_multi_fee","phone","website","wheelchair"],geometry:["point","area"],terms:["pet clinic","veterinarian","animal hospital","pet doctor"],tags:{amenity:"veterinary"},name:"Veterinary"},"amenity/waste_basket":{icon:"maki-waste-basket",fields:["operator","waste","collection_times","material","colour"],moreFields:["covered","indoor","manufacturer"],geometry:["point","vertex"],tags:{amenity:"waste_basket"},terms:["bin","garbage","rubbish","litter","trash"],name:"Waste Basket"},"amenity/waste_disposal":{icon:"fas-dumpster",fields:["operator","waste","collection_times","access_simple"],moreFields:["brand","colour","height","manufacturer","material"],geometry:["point","vertex","area"],tags:{amenity:"waste_disposal"},terms:["garbage","rubbish","litter","trash"],name:"Garbage Dumpster"},"amenity/waste_transfer_station":{icon:"maki-waste-basket",fields:["name","operator","operator/type","waste","address","opening_hours","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","phone","website","wheelchair"],geometry:["point","area"],terms:["dump","garbage","recycling","rubbish","scrap","trash"],tags:{amenity:"waste_transfer_station"},name:"Waste Transfer Station"},"amenity/waste/dog_excrement":{icon:"maki-waste-basket",fields:["collection_times"],geometry:["point","vertex","area"],tags:{amenity:"waste_basket",waste:"dog_excrement"},reference:{key:"waste",value:"dog_excrement"},terms:["bin","garbage","rubbish","litter","trash","poo","dog"],name:"Dog Excrement Bin"},"amenity/water_point":{icon:"maki-drinking-water",fields:["operator","access_simple","fee","payment_multi_fee","charge_fee","opening_hours"],moreFields:["covered","drinking_water","lit","ref"],geometry:["point","vertex","area"],tags:{amenity:"water_point"},terms:["water faucet","water point","water tap","water source","water spigot"],name:"RV Drinking Water"},"amenity/watering_place":{icon:"maki-drinking-water",fields:["operator","fee","payment_multi_fee","charge_fee","opening_hours"],geometry:["point","vertex","area"],tags:{amenity:"watering_place"},name:"Animal Watering Place"},"amenity/weighbridge":{icon:"fas-weight",fields:["ref","operator","access_simple","maxweight"],moreFields:["address","colour","lit","manufacturer","material","wheelchair"],geometry:["point","vertex"],terms:["weigh station","weighbridge"],tags:{amenity:"weighbridge"},name:"Truck Scale"},area:{fields:["name"],geometry:["area"],tags:{area:"yes"},terms:["polygon"],name:"Area",matchScore:0.1},"area/highway":{fields:["name","area/highway","surface"],geometry:["area"],terms:["area:highway","edge of pavement","highway area","highway shape","pavement","road shape","street area"],tags:{"area:highway":"*"},name:"Road Area"},"attraction/amusement_ride":{icon:"maki-amusement-park",moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","carnival ride"],tags:{attraction:"amusement_ride"},name:"Amusement Ride"},"attraction/animal":{icon:"maki-zoo",fields:["name","operator","species/wikidata"],geometry:["point","area"],terms:["amphibian","animal park","aquarium","bear","bird","fish","insect","lion","mammal","monkey","penguin","reptile","safari","theme park","tiger","zoo"],tags:{attraction:"animal"},name:"Animal Enclosure"},"attraction/big_wheel":{icon:"maki-amusement-park",fields:["{attraction}","height"],moreFields:["{attraction}","max_age","min_age"],geometry:["point"],terms:["ferris wheel","theme park","amusement ride"],tags:{attraction:"big_wheel"},name:"Big Wheel"},"attraction/bumper_car":{icon:"fas-car-crash",moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","dodgem cars","autoscooter"],tags:{attraction:"bumper_car"},name:"Bumper Cars"},"attraction/bungee_jumping":{icon:"maki-pitch",fields:["{attraction}","height"],moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","bungy jumping","jumping platform"],tags:{attraction:"bungee_jumping"},name:"Bungee Jumping"},"attraction/carousel":{icon:"temaki-amusement_park",fields:["{attraction}","building_area"],moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","roundabout","merry-go-round","galloper","jumper","horseabout","flying horses"],tags:{attraction:"carousel"},name:"Carousel"},"attraction/dark_ride":{icon:"maki-rail-metro",fields:["{attraction}","building_area"],moreFields:["{attraction}","max_age","min_age"],geometry:["point","line","area"],terms:["theme park","ghost train"],tags:{attraction:"dark_ride"},name:"Dark Ride"},"attraction/drop_tower":{icon:"temaki-tower",fields:["{attraction}","height"],moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","amusement ride","gondola","tower","big drop"],tags:{attraction:"drop_tower"},name:"Drop Tower Ride"},"attraction/kiddie_ride":{icon:"temaki-amusement_park",fields:["{attraction}","fee","payment_multi_fee","charge_fee"],moreFields:["{attraction}","max_age","min_age"],geometry:["point"],tags:{attraction:"kiddie_ride"},name:"Kiddie Ride"},"attraction/log_flume":{icon:"maki-ferry",fields:["{attraction}","height"],moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","amusement ride","flume"],tags:{attraction:"log_flume"},name:"Log Flume"},"attraction/maze":{icon:"maki-amusement-park",moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","amusement ride","labyrinth"],tags:{attraction:"maze"},name:"Maze"},"attraction/pirate_ship":{icon:"maki-danger",moreFields:["{attraction}","max_age","min_age"],geometry:["point"],terms:["theme park","carnival ride","amusement ride"],tags:{attraction:"pirate_ship"},name:"Pirate Ship Ride"},"attraction/river_rafting":{icon:"maki-ferry",moreFields:["{attraction}","max_age","min_age"],geometry:["point","line"],terms:["theme park","aquatic park","water park","rafting simulator","river rafting ride","river rapids ride"],tags:{attraction:"river_rafting"},name:"River Rapids Ride"},"attraction/roller_coaster":{icon:"temaki-roller_coaster",moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","amusement ride"],tags:{attraction:"roller_coaster"},name:"Roller Coaster"},"attraction/summer_toboggan":{icon:"temaki-sledding",moreFields:["{attraction}","max_age","min_age"],geometry:["line"],terms:["alpine slide","mountain coaster"],tags:{attraction:"summer_toboggan"},name:"Summer Toboggan"},"attraction/swing_carousel":{icon:"temaki-tower",fields:["{attraction}","height"],moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","amusement ride","carousel","tower","carousel tower"],tags:{attraction:"swing_carousel"},name:"Swing Carousel"},"attraction/train":{icon:"maki-rail",fields:["{attraction}","fee","charge_fee"],geometry:["point","line"],terms:["theme park","rackless train","road train","Tschu-Tschu train","dotto train","park train"],tags:{attraction:"train"},name:"Tourist Train"},"attraction/water_slide":{icon:"temaki-slide",fields:["{attraction}","height"],moreFields:["{attraction}","max_age","min_age"],geometry:["line","area"],terms:["theme park","aquatic park","water park","flumes","water chutes","hydroslides"],tags:{attraction:"water_slide"},name:"Water Slide"},barrier:{icon:"maki-roadblock",geometry:["point","vertex","line","area"],tags:{barrier:"*"},fields:["barrier"],moreFields:["level"],name:"Barrier",matchScore:0.4},"barrier/entrance":{icon:"maki-entrance-alt1",geometry:["vertex"],tags:{barrier:"entrance"},name:"Entrance",searchable:false},"barrier/block":{icon:"fas-cube",fields:["access","material"],geometry:["point","vertex"],tags:{barrier:"block"},name:"Block"},"barrier/bollard_line":{icon:"temaki-silo",fields:["access","bollard","height","material","colour"],geometry:["line"],tags:{barrier:"bollard"},name:"Bollard Row"},"barrier/bollard":{icon:"temaki-silo",fields:["access","bollard","height","width","material","colour"],geometry:["point","vertex"],tags:{barrier:"bollard"},name:"Bollard"},"barrier/border_control":{icon:"maki-roadblock",fields:["access","building_area"],moreFields:["address","email","fax","phone","website"],geometry:["vertex","area"],tags:{barrier:"border_control"},name:"Border Control"},"barrier/cattle_grid":{icon:"temaki-cattle_grid",geometry:["vertex"],tags:{barrier:"cattle_grid"},terms:["cattle guard","cattle stop","livestock grid","stock gate","stock grid","stock stop","Texas gate","vehicle pass"],name:"Cattle Grid"},"barrier/chain":{icon:"temaki-rope_fence",fields:["access"],geometry:["vertex","line"],tags:{barrier:"chain"},name:"Chain"},"barrier/city_wall":{icon:"temaki-wall",fields:["height","material"],geometry:["line","area"],tags:{barrier:"city_wall"},name:"City Wall"},"barrier/cycle_barrier":{icon:"maki-roadblock",fields:["access"],geometry:["vertex"],tags:{barrier:"cycle_barrier"},terms:["bicycle barrier","bicycling barrier","bike gates","cycling barrier"],name:"Cycle Barrier"},"barrier/ditch":{icon:"maki-roadblock",geometry:["line","area"],tags:{barrier:"ditch"},name:"Trench",matchScore:0.25},"barrier/fence":{icon:"maki-fence",fields:["fence_type","height","material"],geometry:["line"],tags:{barrier:"fence"},name:"Fence",matchScore:0.25},"barrier/fence/railing":{icon:"temaki-railing",geometry:["line"],tags:{barrier:"fence",fence_type:"railing"},terms:["railing","handrail","guard rail"],name:"Railing",matchScore:0.5},"barrier/gate":{icon:"temaki-gate",fields:["access","wheelchair","opening_hours","height","material"],moreFields:["colour","manufacturer","operator","ref"],geometry:["vertex","line"],tags:{barrier:"gate"},name:"Gate"},"barrier/guard_rail":{icon:"temaki-guard_rail",fields:["material"],geometry:["line"],tags:{barrier:"guard_rail"},name:"Guard Rail",terms:["guardrail","traffic barrier","crash barrier","median barrier","roadside barrier","Armco barrier"],matchScore:0.75},"barrier/hedge":{fields:["height"],geometry:["line","area"],tags:{barrier:"hedge"},name:"Hedge",matchScore:0.25},"barrier/height_restrictor":{icon:"temaki-height_restrictor",fields:["maxheight"],geometry:["vertex"],tags:{barrier:"height_restrictor"},name:"Height Restrictor"},"barrier/kerb":{icon:"temaki-kerb-raised",fields:["kerb","tactile_paving","wheelchair"],moreFields:["material"],geometry:["vertex","line"],tags:{barrier:"kerb"},matchScore:0.5,name:"Curb"},"barrier/kerb/flush":{icon:"temaki-kerb-flush",fields:["kerb","{barrier/kerb}"],geometry:["vertex","line"],tags:{kerb:"flush"},addTags:{barrier:"kerb",kerb:"flush"},reference:{key:"kerb",value:"flush"},terms:["even curb","level curb","tactile curb"],matchScore:0.55,name:"Flush Curb"},"barrier/kerb/lowered":{icon:"temaki-kerb-lowered",fields:["kerb","{barrier/kerb}","kerb/height"],geometry:["vertex","line"],tags:{kerb:"lowered"},addTags:{barrier:"kerb",kerb:"lowered"},reference:{key:"kerb",value:"lowered"},terms:["curb cut","curb ramp","kerb ramp","dropped kerb","pram ramp"],matchScore:0.55,name:"Lowered Curb"},"barrier/kerb/raised":{icon:"temaki-kerb-raised",fields:["kerb","{barrier/kerb}","kerb/height"],geometry:["vertex","line"],tags:{kerb:"raised"},addTags:{barrier:"kerb",kerb:"raised"},reference:{key:"kerb",value:"raised"},terms:[],matchScore:0.55,name:"Raised Curb"},"barrier/kerb/rolled":{icon:"temaki-kerb-rolled",fields:["kerb","{barrier/kerb}","kerb/height"],geometry:["vertex","line"],tags:{kerb:"rolled"},addTags:{barrier:"kerb",kerb:"rolled"},reference:{key:"kerb",value:"rolled"},terms:["gutter"],matchScore:0.55,name:"Rolled Curb"},"barrier/kissing_gate":{icon:"temaki-gate",fields:["access"],geometry:["vertex"],tags:{barrier:"kissing_gate"},name:"Kissing Gate"},"barrier/lift_gate":{icon:"temaki-lift_gate",fields:["access","opening_hours"],geometry:["vertex","line"],tags:{barrier:"lift_gate"},name:"Lift Gate"},"barrier/retaining_wall":{icon:"temaki-wall",fields:["height","material"],geometry:["line","area"],tags:{barrier:"retaining_wall"},name:"Retaining Wall"},"barrier/sally_port":{icon:"fas-dungeon",geometry:["vertex"],tags:{barrier:"sally_port"},terms:["Postern","castle side gate"],name:"Sally Port"},"barrier/stile":{icon:"maki-roadblock",fields:["access","stile","material"],geometry:["vertex"],tags:{barrier:"stile"},name:"Stile"},"barrier/swing_gate":{icon:"temaki-gate",fields:["{barrier/gate}"],moreFields:["{barrier/gate}"],geometry:["vertex"],tags:{barrier:"swing_gate"},name:"Swing Gate"},"barrier/toll_booth":{icon:"maki-roadblock",fields:["access","building_area","payment_multi","currency_multi"],moreFields:["address","email","fax","opening_hours","phone","website"],geometry:["vertex","area"],tags:{barrier:"toll_booth"},name:"Toll Booth"},"barrier/turnstile":{icon:"temaki-turnstile",fields:["access"],geometry:["vertex"],terms:["baffle gate","turnstyle"],tags:{barrier:"turnstile"},name:"Turnstile"},"barrier/wall":{icon:"temaki-wall",fields:["wall","height","material"],geometry:["line","area"],tags:{barrier:"wall"},name:"Wall",matchScore:0.25},"barrier/wall/noise_barrier":{icon:"temaki-wall",geometry:["line","area"],tags:{barrier:"wall",wall:"noise_barrier"},terms:["acoustical barrier","noise wall","noisewall","sound barrier","sound berm","sound wall","soundberm","soundwall"],name:"Noise Barrier",matchScore:0.27},"boundary/administrative":{fields:["name","admin_level"],geometry:["line"],tags:{boundary:"administrative"},name:"Administrative Boundary",matchScore:0.5},"bridge/support":{icon:"fas-archway",fields:["bridge/support","height","layer","material"],moreFields:["colour","seamark/type"],geometry:["point","vertex","area"],tags:{"bridge:support":"*"},name:"Bridge Support"},"bridge/support/pier":{icon:"fas-archway",fields:["bridge/support","{bridge/support}"],geometry:["point","vertex","area"],tags:{"bridge:support":"pier"},name:"Bridge Pier"},building_part:{icon:"maki-building",fields:["building/levels","height","building/material","roof/colour"],moreFields:["layer"],geometry:["area"],tags:{"building:part":"*"},matchScore:0.5,terms:["roof","simple 3D buildings"],name:"Building Part"},building:{icon:"maki-home",fields:["name","building","building/levels","height","address"],moreFields:["architect","building/levels/underground","building/material","gnis/feature_id","layer","not/name","operator","roof/colour","smoking","wheelchair"],geometry:["area"],tags:{building:"*"},matchScore:0.6,terms:[],name:"Building"},"building/bunker":{icon:"temaki-bunker",geometry:["area"],tags:{building:"bunker"},matchScore:0.5,name:"Bunker",searchable:false},"building/entrance":{icon:"maki-entrance-alt1",fields:[],moreFields:[],geometry:["vertex"],tags:{building:"entrance"},name:"Entrance/Exit",searchable:false},"building/train_station":{icon:"maki-building",geometry:["point","vertex","area"],tags:{building:"train_station"},matchScore:0.5,name:"Train Station Building",searchable:false},"building/apartments":{icon:"maki-building",geometry:["area"],tags:{building:"apartments"},matchScore:0.5,name:"Apartment Building"},"building/barn":{icon:"temaki-barn",geometry:["area"],tags:{building:"barn"},matchScore:0.5,name:"Barn"},"building/boathouse":{icon:"maki-harbor",geometry:["area"],tags:{building:"boathouse"},matchScore:0.5,terms:[],name:"Boathouse"},"building/bungalow":{icon:"maki-home",geometry:["area"],tags:{building:"bungalow"},terms:["home","detached"],matchScore:0.5,name:"Bungalow"},"building/cabin":{icon:"temaki-cabin",geometry:["area"],tags:{building:"cabin"},matchScore:0.5,name:"Cabin"},"building/carport":{icon:"fas-warehouse",fields:["{building}","capacity"],geometry:["area"],tags:{building:"carport"},matchScore:0.5,terms:["covered parking space","garage","car","porch"],name:"Carport"},"building/cathedral":{icon:"fas-church",geometry:["area"],tags:{building:"cathedral"},matchScore:0.5,name:"Cathedral Building"},"building/chapel":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"chapel"},matchScore:0.5,name:"Chapel Building"},"building/church":{icon:"fas-church",geometry:["area"],tags:{building:"church"},matchScore:0.5,name:"Church Building"},"building/civic":{icon:"maki-building",fields:["{building}","smoking"],moreFields:["{building}","polling_station"],geometry:["area"],tags:{building:"civic"},matchScore:0.5,name:"Civic Building"},"building/college":{icon:"fas-school",moreFields:["{building}","polling_station"],geometry:["area"],terms:["university"],tags:{building:"college"},matchScore:0.5,name:"College Building"},"building/commercial":{icon:"maki-suitcase",fields:["{building}","smoking"],geometry:["area"],tags:{building:"commercial"},matchScore:0.5,name:"Commercial Building"},"building/construction":{icon:"maki-building",geometry:["area"],tags:{building:"construction"},matchScore:0.5,name:"Building Under Construction"},"building/detached":{icon:"maki-home",geometry:["area"],tags:{building:"detached"},terms:["home","single","family","residence","dwelling"],matchScore:0.5,name:"Detached House"},"building/dormitory":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"dormitory"},matchScore:0.5,name:"Dormitory"},"building/farm_auxiliary":{icon:"maki-farm",geometry:["area"],tags:{building:"farm_auxiliary"},matchScore:0.5,name:"Farm Building"},"building/farm":{icon:"maki-farm",geometry:["area"],tags:{building:"farm"},matchScore:0.5,name:"Farm House"},"building/garage":{icon:"fas-warehouse",fields:["{building}","capacity"],geometry:["area"],tags:{building:"garage"},matchScore:0.5,name:"Garage"},"building/garages":{icon:"fas-warehouse",fields:["{building}","capacity"],geometry:["area"],tags:{building:"garages"},matchScore:0.5,name:"Garages"},"building/grandstand":{icon:"maki-building",geometry:["area"],tags:{building:"grandstand"},terms:["tribune","stand","stands","bleachers"],matchScore:0.5,name:"Grandstand"},"building/greenhouse":{icon:"maki-garden-centre",geometry:["area"],tags:{building:"greenhouse"},matchScore:0.5,name:"Greenhouse"},"building/hangar":{icon:"fas-warehouse",fields:["name"],geometry:["area"],tags:{building:"hangar"},matchScore:0.5,name:"Hangar Building"},"building/hospital":{icon:"fas-hospital-alt",geometry:["area"],tags:{building:"hospital"},matchScore:0.5,name:"Hospital Building"},"building/hotel":{icon:"fas-hotel",fields:["{building}","smoking"],geometry:["area"],tags:{building:"hotel"},matchScore:0.5,name:"Hotel Building"},"building/house":{icon:"maki-home",geometry:["area"],tags:{building:"house"},terms:["home","family","residence","dwelling"],matchScore:0.5,name:"House"},"building/houseboat":{icon:"temaki-houseboat",geometry:["area"],tags:{building:"houseboat"},terms:["home","family","residence","dwelling"],matchScore:0.5,name:"Houseboat"},"building/hut":{icon:"maki-home",geometry:["area"],tags:{building:"hut"},matchScore:0.5,name:"Hut"},"building/industrial":{icon:"maki-industry",geometry:["area"],tags:{building:"industrial"},matchScore:0.5,name:"Industrial Building"},"building/kindergarten":{icon:"fas-school",geometry:["area"],terms:["kindergarden","pre-school"],tags:{building:"kindergarten"},matchScore:0.5,name:"Preschool / Kindergarten Building"},"building/mosque":{icon:"fas-mosque",geometry:["area"],tags:{building:"mosque"},matchScore:0.5,name:"Mosque Building"},"building/pavilion":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],terms:["sports"],tags:{building:"pavilion"},matchScore:0.5,name:"Pavilion Building"},"building/public":{icon:"maki-building",fields:["{building}","smoking"],moreFields:["{building}","polling_station"],geometry:["area"],tags:{building:"public"},matchScore:0.5,name:"Public Building"},"building/residential":{icon:"maki-residential-community",geometry:["area"],tags:{building:"residential"},matchScore:0.5,name:"Residential Building"},"building/retail":{icon:"maki-commercial",fields:["{building}","smoking"],geometry:["area"],tags:{building:"retail"},matchScore:0.5,name:"Retail Building"},"building/roof":{icon:"maki-shelter",fields:["{building}","layer"],geometry:["area"],tags:{building:"roof"},matchScore:0.5,name:"Roof"},"building/ruins":{icon:"temaki-ruins",geometry:["area"],tags:{building:"ruins"},matchScore:0.5,name:"Building Ruins"},"building/school":{icon:"fas-school",moreFields:["{building}","polling_station"],geometry:["area"],terms:["academy","elementary school","middle school","high school"],tags:{building:"school"},matchScore:0.5,name:"School Building"},"building/semidetached_house":{icon:"maki-home",geometry:["area"],tags:{building:"semidetached_house"},terms:["home","double","duplex","twin","family","residence","dwelling"],matchScore:0.5,name:"Semi-Detached House"},"building/service":{icon:"maki-building",geometry:["area"],tags:{building:"service"},matchScore:0.5,name:"Service Building"},"building/shed":{icon:"fas-warehouse",fields:["{building}","lockable"],geometry:["area"],tags:{building:"shed"},matchScore:0.5,name:"Shed"},"building/stable":{icon:"temaki-horse_shelter",geometry:["area"],tags:{building:"stable"},terms:["horse shelter"],matchScore:0.5,name:"Stable"},"building/stadium":{icon:"maki-stadium",fields:["{building}","smoking"],geometry:["area"],tags:{building:"stadium"},matchScore:0.5,name:"Stadium Building"},"building/static_caravan":{icon:"maki-home",geometry:["area"],tags:{building:"static_caravan"},matchScore:0.5,name:"Static Mobile Home"},"building/temple":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"temple"},matchScore:0.5,name:"Temple Building"},"building/terrace":{icon:"temaki-row_houses",geometry:["area"],tags:{building:"terrace"},terms:["home","terrace","brownstone","family","residence","dwelling"],matchScore:0.5,name:"Row Houses"},"building/transportation":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"transportation"},matchScore:0.5,name:"Transportation Building"},"building/university":{icon:"fas-school",moreFields:["{building}","polling_station"],geometry:["area"],terms:["college"],tags:{building:"university"},matchScore:0.5,name:"University Building"},"building/warehouse":{icon:"maki-warehouse",geometry:["area"],tags:{building:"warehouse"},matchScore:0.5,name:"Warehouse"},club:{icon:"fas-handshake",fields:["name","club","operator","address","building_area","opening_hours"],moreFields:["access_simple","building/levels_building","email","fax","gnis/feature_id","height_building","internet_access","internet_access/fee","internet_access/ssid","level","max_age","min_age","phone","website","wheelchair"],geometry:["point","area"],tags:{club:"*"},terms:["social"],name:"Club"},"club/sport":{icon:"maki-pitch",fields:["name","sport","{club}"],geometry:["point","area"],tags:{club:"sport"},terms:["athletics club","sporting club","sports association","sports society"],name:"Sports Club"},craft:{icon:"temaki-tools",fields:["name","craft","operator","address","building_area","opening_hours"],moreFields:["air_conditioning","building/levels_building","email","fax","gnis/feature_id","height_building","internet_access","internet_access/fee","internet_access/ssid","level","phone","product","ref/vatin","website","wheelchair"],geometry:["point","area"],tags:{craft:"*"},terms:[],name:"Craft"},"craft/locksmith":{icon:"maki-marker-stroked",geometry:["point","area"],tags:{craft:"locksmith"},reference:{key:"shop",value:"locksmith"},name:"Locksmith",searchable:false},"craft/tailor":{icon:"temaki-needle_and_spool",geometry:["point","area"],tags:{craft:"tailor"},reference:{key:"shop",value:"tailor"},name:"Tailor",searchable:false},"craft/agricultural_engines":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"agricultural_engines"},name:"Argricultural Engines Mechanic"},"craft/basket_maker":{icon:"temaki-vase",geometry:["point","area"],tags:{craft:"basket_maker"},name:"Basket Maker"},"craft/beekeeper":{icon:"maki-farm",geometry:["point","area"],tags:{craft:"beekeeper"},name:"Beekeeper"},"craft/blacksmith":{icon:"temaki-anvil_and_hammer",geometry:["point","area"],tags:{craft:"blacksmith"},name:"Blacksmith"},"craft/boatbuilder":{icon:"temaki-boat_repair",geometry:["point","area"],tags:{craft:"boatbuilder"},matchScore:0.6,name:"Boat Builder"},"craft/bookbinder":{icon:"maki-library",geometry:["point","area"],terms:["book repair"],tags:{craft:"bookbinder"},name:"Bookbinder"},"craft/brewery":{icon:"temaki-storage_fermenter",fields:["{craft}","product"],moreFields:["{craft}","min_age"],geometry:["point","area"],terms:["alcohol","beer","beverage","bier","booze","cider"],tags:{craft:"brewery"},name:"Brewery"},"craft/carpenter":{icon:"temaki-tools",geometry:["point","area"],terms:["woodworker"],tags:{craft:"carpenter"},name:"Carpenter"},"craft/carpet_layer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"carpet_layer"},name:"Carpet Layer"},"craft/caterer":{icon:"maki-restaurant",fields:["name","cuisine","{craft}"],geometry:["point","area"],tags:{craft:"caterer"},name:"Caterer"},"craft/chimney_sweeper":{icon:"temaki-chimney",geometry:["point","area"],tags:{craft:"chimney_sweeper"},name:"Chimney Sweeper"},"craft/cleaning":{icon:"temaki-vacuum",geometry:["point","area"],tags:{craft:"cleaning"},name:"Cleaning Service"},"craft/clockmaker":{icon:"temaki-clock",geometry:["point","area"],tags:{craft:"clockmaker"},name:"Clockmaker"},"craft/confectionery":{icon:"maki-confectionery",geometry:["point","area"],terms:["sweet","candy"],tags:{craft:"confectionery"},name:"Candy Maker"},"craft/distillery":{icon:"temaki-storage_fermenter",fields:["{craft}","product"],moreFields:["{craft}","min_age"],geometry:["point","area"],terms:["alcohol","beverage","bourbon","booze","brandy","gin","hooch","liquor","mezcal","moonshine","rum","scotch","spirits","still","tequila","vodka","whiskey","whisky"],tags:{craft:"distillery"},name:"Distillery"},"craft/dressmaker":{icon:"temaki-dress",geometry:["point","area"],terms:["seamstress"],tags:{craft:"dressmaker"},name:"Dressmaker"},"craft/electrician":{icon:"temaki-power",geometry:["point","area"],terms:["power","wire"],tags:{craft:"electrician"},name:"Electrician"},"craft/electronics_repair":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"electronics_repair"},name:"Electronics Repair Shop"},"craft/floorer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"floorer"},name:"Floorer"},"craft/gardener":{icon:"maki-garden-centre",geometry:["point","area"],terms:["landscaper","grounds keeper"],tags:{craft:"gardener"},name:"Gardener"},"craft/glaziery":{icon:"temaki-window",geometry:["point","area"],terms:["glass","stained-glass","window"],tags:{craft:"glaziery"},name:"Glaziery"},"craft/handicraft":{icon:"temaki-vase",geometry:["point","area"],tags:{craft:"handicraft"},name:"Handicraft"},"craft/hvac":{icon:"temaki-tools",geometry:["point","area"],terms:["heat*","vent*","air conditioning"],tags:{craft:"hvac"},name:"HVAC"},"craft/insulator":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"insulation"},name:"Insulator"},"craft/joiner":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"joiner"},terms:["furniture"],name:"Joiner"},"craft/key_cutter":{icon:"fas-key",geometry:["point","area"],tags:{craft:"key_cutter"},name:"Key Cutter"},"craft/metal_construction":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"metal_construction"},name:"Metal Construction"},"craft/painter":{icon:"fas-paint-roller",geometry:["point","area"],tags:{craft:"painter"},name:"Painter"},"craft/parquet_layer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"parquet_layer"},name:"Parquet Layer"},"craft/photographer":{icon:"maki-attraction",geometry:["point","area"],tags:{craft:"photographer"},name:"Photographer"},"craft/photographic_laboratory":{icon:"fas-film",geometry:["point","area"],terms:["film"],tags:{craft:"photographic_laboratory"},name:"Photographic Laboratory"},"craft/plasterer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"plasterer"},name:"Plasterer"},"craft/plumber":{icon:"temaki-plumber",geometry:["point","area"],terms:["pipe"],tags:{craft:"plumber"},name:"Plumber"},"craft/pottery":{icon:"temaki-vase",geometry:["point","area"],terms:["ceramic","kiln","pot","vase"],tags:{craft:"pottery"},name:"Pottery Maker"},"craft/rigger":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"rigger"},name:"Rigger"},"craft/roofer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"roofer"},name:"Roofer"},"craft/saddler":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"saddler"},name:"Saddler"},"craft/sailmaker":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"sailmaker"},name:"Sailmaker"},"craft/sawmill":{icon:"maki-logging",geometry:["point","area"],terms:["lumber"],tags:{craft:"sawmill"},name:"Sawmill"},"craft/scaffolder":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"scaffolder"},name:"Scaffolder"},"craft/sculptor":{icon:"maki-art-gallery",geometry:["point","area"],tags:{craft:"sculptor"},name:"Sculptor"},"craft/shoemaker":{icon:"maki-shoe",geometry:["point","area"],terms:["cobbler"],tags:{craft:"shoemaker"},name:"Shoemaker"},"craft/signmaker":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"signmaker"},name:"Signmaker"},"craft/stonemason":{icon:"temaki-tools",geometry:["point","area"],terms:["masonry"],tags:{craft:"stonemason"},name:"Stonemason"},"craft/tiler":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"tiler"},name:"Tiler"},"craft/tinsmith":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"tinsmith"},name:"Tinsmith"},"craft/upholsterer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"upholsterer"},name:"Upholsterer"},"craft/watchmaker":{icon:"maki-watch",geometry:["point","area"],tags:{craft:"watchmaker"},name:"Watchmaker"},"craft/window_construction":{icon:"temaki-window",geometry:["point","area"],terms:["glass"],tags:{craft:"window_construction"},name:"Window Construction"},"craft/winery":{icon:"maki-alcohol-shop",moreFields:["{craft}","min_age"],geometry:["point","area"],tags:{craft:"winery"},name:"Winery"},"cycleway/asl":{icon:"maki-bicycle",fields:["ref","direction_vertex","width"],geometry:["vertex"],tags:{cycleway:"asl"},terms:["advanced stop box","asl","bicycle box","bike box","bikebox","cycle box","cycle stop marking"],name:"Advanced Stop Line"},"demolished/building":{icon:"fas-house-damage",fields:["name","address"],geometry:["area"],tags:{"demolished:building":"*"},name:"Recently Demolished Building",searchable:false},"disused/railway":{fields:["disused/railway"],geometry:["point","vertex","line","area"],tags:{"disused:railway":"*"},matchScore:0.05,searchable:false,name:"Disused Railway Feature"},"emergency/designated":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"designated"},name:"Emergency Access Designated",searchable:false,matchScore:0.01},"emergency/destination":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"destination"},name:"Emergency Access Destination",searchable:false,matchScore:0.01},"emergency/no":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"no"},name:"Emergency Access No",searchable:false,matchScore:0.01},"emergency/official":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"official"},name:"Emergency Access Official",searchable:false,matchScore:0.01},"emergency/private":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"private"},name:"Emergency Access Private",searchable:false,matchScore:0.01},"emergency/yes":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"yes"},name:"Emergency Access Yes",searchable:false,matchScore:0.01},"emergency/ambulance_station":{icon:"fas-ambulance",fields:["name","operator","building_area","address"],moreFields:["email","fax","gnis/feature_id","phone","website","wheelchair"],geometry:["point","area"],terms:["EMS","EMT","rescue"],tags:{emergency:"ambulance_station"},name:"Ambulance Station"},"emergency/defibrillator":{icon:"maki-defibrillator",fields:["indoor","ref","operator"],moreFields:["level"],geometry:["point","vertex"],terms:["AED"],tags:{emergency:"defibrillator"},name:"Defibrillator"},"emergency/fire_alarm":{icon:"fas-bell",fields:["indoor","ref","operator"],moreFields:["level"],geometry:["point","vertex"],tags:{emergency:"fire_alarm_box"},name:"Fire Alarm Call Box"},"emergency/fire_extinguisher":{icon:"fas-fire-extinguisher",fields:["indoor","ref","operator"],moreFields:["level"],geometry:["point","vertex"],tags:{emergency:"fire_extinguisher"},name:"Fire Extinguisher"},"emergency/fire_hose":{icon:"fas-tape",fields:["indoor","ref","operator"],moreFields:["level"],geometry:["point","vertex"],tags:{emergency:"fire_hose"},name:"Fire Hose"},"emergency/fire_hydrant":{icon:"temaki-fire_hydrant",fields:["ref","fire_hydrant/type","colour","water_source","couplings"],moreFields:["fire_hydrant/diameter","fire_hydrant/pressure","level","survey/date","water_volume"],geometry:["point","vertex"],terms:["fire plug","fire water well","hydrant"],tags:{emergency:"fire_hydrant"},name:"Fire Hydrant"},"emergency/first_aid_kit":{icon:"fas-medkit",fields:["indoor","ref","operator"],moreFields:["level"],geometry:["point","vertex"],terms:["bandage","first aid","med","med kit","medic*","medkit"],tags:{emergency:"first_aid_kit"},name:"First Aid Kit"},"emergency/landing_site":{icon:"maki-heliport",fields:["name","operator","surface"],geometry:["point","area"],terms:["helicopter","helipad","heliport"],tags:{emergency:"landing_site"},name:"Emergency Landing Site"},"emergency/life_ring":{icon:"fas-life-ring",fields:["ref","operator"],geometry:["point","vertex"],terms:["life buoy","kisby ring","kisbie ring","perry buoy"],tags:{emergency:"life_ring"},name:"Life Ring"},"emergency/lifeguard":{icon:"fas-life-ring",fields:["ref","operator","building_area","opening_hours"],geometry:["point","area"],terms:["CPR","rescue"],tags:{emergency:"lifeguard"},name:"Lifeguard"},"emergency/phone":{icon:"maki-emergency-phone",fields:["ref","operator","covered","indoor","booth"],moreFields:["level"],geometry:["point","vertex"],tags:{emergency:"phone"},name:"Emergency Phone"},"emergency/siren":{icon:"fas-volume-up",fields:["siren/purpose","siren/type","ref","operator"],geometry:["point","vertex"],terms:["air raid","loud","noise","storm","tornado","warning"],tags:{emergency:"siren"},name:"Siren"},"emergency/water_tank":{icon:"maki-water",fields:["name","ref","operator"],geometry:["point","vertex"],terms:["water tank","cistern","reservoir"],tags:{emergency:"water_tank"},name:"Emergency Water Tank"},entrance:{icon:"maki-entrance-alt1",fields:["ref","entrance","door","access_simple","wheelchair","level","address"],geometry:["vertex"],tags:{entrance:"*"},terms:["entrance","exit","door"],matchScore:0.8,name:"Entrance / Exit"},"entrance/emergency":{icon:"maki-entrance-alt1",fields:["ref","door","access_simple","level"],geometry:["vertex"],tags:{entrance:"emergency"},terms:["fire exit","door"],matchScore:0.8,name:"Emergency Exit"},ford:{icon:"temaki-pedestrian",fields:["name","access","seasonal"],moreFields:["gnis/feature_id"],geometry:["vertex"],tags:{ford:"yes"},name:"Ford"},"golf/bunker":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"bunker"},addTags:{golf:"bunker",natural:"sand"},terms:["hazard","bunker"],name:"Sand Trap"},"golf/cartpath":{icon:"temaki-golf_cart",fields:["{golf/path}","maxspeed"],geometry:["line"],tags:{golf:"cartpath"},addTags:{golf:"cartpath",golf_cart:"designated",highway:"service"},name:"Golf Cartpath"},"golf/driving_range":{icon:"maki-golf",fields:["name","capacity"],geometry:["area"],tags:{golf:"driving_range"},addTags:{golf:"driving_range",landuse:"grass"},name:"Driving Range"},"golf/fairway":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"fairway"},addTags:{golf:"fairway",landuse:"grass"},name:"Fairway"},"golf/green":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"green"},addTags:{golf:"green",landuse:"grass"},name:"Putting Green"},"golf/hole":{icon:"maki-golf",fields:["name","ref_golf_hole","par","handicap"],geometry:["line"],tags:{golf:"hole"},name:"Golf Hole"},"golf/lateral_water_hazard":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"lateral_water_hazard"},addTags:{golf:"lateral_water_hazard",natural:"water"},name:"Lateral Water Hazard"},"golf/path":{icon:"maki-golf",fields:["name","surface","width","structure","incline"],geometry:["line"],tags:{golf:"path"},addTags:{golf:"path",highway:"path",foot:"designated"},name:"Golf Walking Path"},"golf/rough":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"rough"},addTags:{golf:"rough",landuse:"grass"},name:"Rough"},"golf/tee":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"tee"},addTags:{golf:"tee",landuse:"grass"},terms:["teeing ground"],name:"Tee Box"},"golf/water_hazard":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"water_hazard"},addTags:{golf:"water_hazard",natural:"water"},name:"Water Hazard"},healthcare:{icon:"maki-hospital",fields:["name","healthcare","operator","healthcare/speciality","address","building_area"],moreFields:["brand","building/levels_building","email","fax","gnis/feature_id","height_building","level","opening_hours","payment_multi","phone","website","wheelchair"],geometry:["point","area"],tags:{healthcare:"*"},terms:["clinic","doctor","disease","health","institution","sick","surgery","wellness"],name:"Healthcare Facility"},"healthcare/alternative":{icon:"maki-hospital",geometry:["point","area"],terms:["acupuncture","anthroposophical","applied kinesiology","aromatherapy","ayurveda","herbalism","homeopathy","hydrotherapy","hypnosis","naturopathy","osteopathy","reflexology","reiki","shiatsu","traditional","tuina","unani"],tags:{healthcare:"alternative"},name:"Alternative Medicine"},"healthcare/alternative/chiropractic":{icon:"maki-hospital",geometry:["point","area"],terms:["back","pain","spine"],tags:{healthcare:"alternative","healthcare:speciality":"chiropractic"},name:"Chiropractor"},"healthcare/audiologist":{icon:"maki-hospital",geometry:["point","area"],terms:["ear","hearing","sound"],tags:{healthcare:"audiologist"},name:"Audiologist"},"healthcare/birthing_center":{icon:"fas-baby",geometry:["point","area"],terms:["baby","childbirth","delivery","labour","labor","pregnancy"],tags:{healthcare:"birthing_center"},name:"Birthing Center"},"healthcare/blood_donation":{icon:"maki-blood-bank",fields:["{healthcare}","blood_components"],geometry:["point","area"],terms:["blood bank","blood donation","blood transfusion","apheresis","plasmapheresis","plateletpheresis","stem cell donation"],tags:{healthcare:"blood_donation"},name:"Blood Donor Center"},"healthcare/counselling":{icon:"fas-comments",geometry:["point","area"],tags:{healthcare:"counselling"},name:"Counselling Center"},"healthcare/hospice":{icon:"maki-hospital",geometry:["point","area"],terms:["terminal","illness"],tags:{healthcare:"hospice"},name:"Hospice"},"healthcare/laboratory":{icon:"fas-vial",fields:["name","operator","website","ref","address","opening_hours"],geometry:["point","area"],terms:["medical_laboratory","medical_lab","blood_check"],tags:{healthcare:"laboratory"},name:"Medical Laboratory"},"healthcare/midwife":{icon:"fas-baby",geometry:["point","area"],terms:["baby","childbirth","delivery","labour","labor","pregnancy"],tags:{healthcare:"midwife"},name:"Midwife"},"healthcare/occupational_therapist":{icon:"maki-hospital",geometry:["point","area"],terms:["therapist","therapy"],tags:{healthcare:"occupational_therapist"},name:"Occupational Therapist"},"healthcare/optometrist":{icon:"fas-eye",geometry:["point","area"],terms:["eye","glasses","lasik","lenses","vision"],tags:{healthcare:"optometrist"},name:"Optometrist"},"healthcare/physiotherapist":{icon:"temaki-physiotherapist",geometry:["point","area"],terms:["physical","therapist","therapy"],tags:{healthcare:"physiotherapist"},name:"Physiotherapist"},"healthcare/podiatrist":{icon:"maki-hospital",geometry:["point","area"],terms:["foot","feet","nails"],tags:{healthcare:"podiatrist"},name:"Podiatrist"},"healthcare/psychotherapist":{icon:"maki-hospital",geometry:["point","area"],terms:["anxiety","counselor","depression","mental health","mind","suicide","therapist","therapy"],tags:{healthcare:"psychotherapist"},name:"Psychotherapist"},"healthcare/rehabilitation":{icon:"maki-hospital",geometry:["point","area"],terms:["rehab","therapist","therapy"],tags:{healthcare:"rehabilitation"},name:"Rehabilitation Facility"},"healthcare/speech_therapist":{icon:"fas-comment",geometry:["point","area"],terms:["speech","therapist","therapy","voice"],tags:{healthcare:"speech_therapist"},name:"Speech Therapist"},"highway/bus_stop":{icon:"maki-bus",fields:["name","network","operator","bench","shelter"],geometry:["point","vertex"],tags:{highway:"bus_stop"},matchScore:0.95,name:"Bus Stop",searchable:false,replacement:"public_transport/platform/bus_point"},"highway/crossing":{fields:["crossing"],geometry:["vertex"],tags:{highway:"crossing"},searchable:false,matchScore:0.95,name:"Crossing"},"highway/bridleway":{fields:["name","surface","width","structure","access","incline","horse_scale"],moreFields:["covered","dog","lit","maxweight_bridge","smoothness","stroller","wheelchair"],icon:"maki-horse-riding",geometry:["line"],tags:{highway:"bridleway"},terms:["bridleway","equestrian","horse","trail"],name:"Bridle Path"},"highway/bus_guideway":{icon:"maki-bus",fields:["name","operator","oneway","structure","covered"],moreFields:["trolley_wire","width"],geometry:["line"],tags:{highway:"bus_guideway"},addTags:{highway:"bus_guideway",access:"no",bus:"designated"},terms:[],name:"Bus Guideway"},"highway/construction":{icon:"maki-barrier",fields:["name","opening_date","check_date","note","oneway","structure","access"],geometry:["line"],tags:{highway:"construction",access:"no"},terms:["closed","closure","construction"],name:"Road Closed"},"highway/corridor":{icon:"temaki-pedestrian_walled",fields:["name","width","level","access_simple","wheelchair"],moreFields:["covered","indoor","maxheight","stroller"],geometry:["line"],tags:{highway:"corridor"},addTags:{highway:"corridor",indoor:"yes"},terms:["gallery","hall","hallway","indoor","passage","passageway"],name:"Indoor Corridor"},"highway/crossing/zebra-raised":{icon:"temaki-pedestrian_crosswalk",fields:["crossing","tactile_paving","crossing/island"],geometry:["vertex"],tags:{highway:"crossing",crossing:"zebra",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},name:"Marked Crosswalk (Raised)",searchable:false},"highway/crossing/zebra":{icon:"temaki-pedestrian_crosswalk",fields:["crossing","tactile_paving","crossing/island"],geometry:["vertex"],tags:{highway:"crossing",crossing:"zebra"},reference:{key:"highway",value:"crossing"},name:"Marked Crosswalk",searchable:false},"highway/crossing/marked-raised":{icon:"temaki-pedestrian_crosswalk",fields:["crossing","tactile_paving","crossing/island"],geometry:["vertex"],tags:{highway:"crossing",crossing:"marked",traffic_calming:"table"},addTags:{highway:"crossing",crossing:"marked",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["zebra crossing","marked crossing","crosswalk","flat top","hump","speed","slow"],name:"Marked Crosswalk (Raised)"},"highway/crossing/marked":{icon:"temaki-pedestrian_crosswalk",fields:["crossing","tactile_paving","crossing/island"],geometry:["vertex"],tags:{highway:"crossing",crossing:"marked"},addTags:{highway:"crossing",crossing:"marked"},reference:{key:"highway",value:"crossing"},terms:["zebra crossing","marked crossing","crosswalk"],name:"Marked Crosswalk"},"highway/crossing/unmarked-raised":{icon:"temaki-pedestrian",fields:["crossing","tactile_paving","crossing/island"],geometry:["vertex"],tags:{highway:"crossing",crossing:"unmarked",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["flat top","hump","speed","slow"],name:"Unmarked Crossing (Raised)"},"highway/crossing/unmarked":{icon:"temaki-pedestrian",fields:["crossing","tactile_paving","crossing/island"],geometry:["vertex"],tags:{highway:"crossing",crossing:"unmarked"},addTags:{highway:"crossing",crossing:"unmarked"},reference:{key:"crossing",value:"unmarked"},terms:[],name:"Unmarked Crossing"},"highway/cycleway":{icon:"fas-biking",fields:["name","oneway","surface","width","structure","access","incline"],moreFields:["covered","dog","lit","maxspeed","maxweight_bridge","not/name","smoothness","stroller","wheelchair"],geometry:["line"],tags:{highway:"cycleway"},terms:["bicyle path","bike path","cycling path"],name:"Cycle Path"},"highway/cycleway/crossing":{icon:"temaki-cyclist_crosswalk",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{cycleway:"crossing"},addTags:{highway:"cycleway",cycleway:"crossing"},reference:{key:"cycleway",value:"crossing"},searchable:false,matchScore:0.95,name:"Cycle Crossing"},"highway/cycleway/bicycle_foot":{notCountryCodes:["fr","lt","pl"],icon:"temaki-pedestrian_and_cyclist",geometry:["line"],tags:{highway:"cycleway",foot:"designated"},addTags:{highway:"cycleway",foot:"designated",bicycle:"designated"},terms:["bicycle and foot path","bike and pedestrian path","green way","greenway","mixed-use trail","multi-use trail","segregated trail","rail trail"],fields:["name","segregated","oneway","surface","width","structure","access","incline"],matchScore:0.9,name:"Cycle & Foot Path"},"highway/cycleway/crossing/marked":{icon:"temaki-cyclist_crosswalk",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{cycleway:"crossing",crossing:"marked"},addTags:{highway:"cycleway",cycleway:"crossing",crossing:"marked"},reference:{key:"cycleway",value:"crossing"},terms:["cycle crosswalk","cycle path crossing","cycleway crossing","bicycle crossing","bike crossing"],matchScore:0.95,name:"Marked Cycle Crossing"},"highway/cycleway/crossing/unmarked":{icon:"fas-biking",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{cycleway:"crossing",crossing:"unmarked"},addTags:{highway:"cycleway",cycleway:"crossing",crossing:"unmarked"},reference:{key:"cycleway",value:"crossing"},terms:["cycle path crossing","cycleway crossing","bicycle crossing","bike crossing"],matchScore:0.95,name:"Unmarked Cycle Crossing"},"highway/elevator":{icon:"temaki-elevator",fields:["ref","level_semi","access_simple","wheelchair","maxweight"],moreFields:["maxheight","opening_hours"],geometry:["vertex"],tags:{highway:"elevator"},terms:["lift"],name:"Elevator"},"highway/emergency_bay":{icon:"maki-car",geometry:["vertex"],tags:{highway:"emergency_bay"},terms:["Highway Emergency Bay"],name:"Emergency Stopping Place"},"highway/footway":{icon:"temaki-pedestrian",fields:["name","surface","width","structure","access","incline"],moreFields:["covered","dog","lit","maxweight_bridge","not/name","smoothness","stroller","tactile_paving","wheelchair"],geometry:["line"],terms:["hike","hiking","promenade","trackway","trail","walk"],tags:{highway:"footway"},name:"Foot Path"},"highway/footway/crossing":{fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{footway:"crossing"},addTags:{highway:"footway",footway:"crossing"},reference:{key:"footway",value:"crossing"},searchable:false,name:"Pedestrian Crossing"},"highway/footway/zebra-raised":{icon:"temaki-pedestrian_crosswalk",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{highway:"footway",footway:"crossing",crossing:"zebra",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},name:"Marked Crosswalk (Raised)",searchable:false},"highway/footway/zebra":{icon:"temaki-pedestrian_crosswalk",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{highway:"footway",footway:"crossing",crossing:"zebra"},reference:{key:"footway",value:"crossing"},name:"Marked Crosswalk",searchable:false},"highway/footway/access_aisle":{icon:"temaki-striped_way",fields:["access_aisle","width","surface","tactile_paving","access","wheelchair"],moreFields:["covered","dog","incline","lit","maxweight_bridge","name","ref","smoothness","stroller","structure"],geometry:["line"],terms:["accessible van loading zone","disabled parking access zone","handicap parking access zone","parking lot aisle","striped zone","tow zone","tow-away zone","towaway zone","wheelchair aisle"],tags:{highway:"footway",footway:"access_aisle"},reference:{key:"footway",value:"access_aisle"},name:"Access Aisle"},"highway/footway/conveying":{icon:"temaki-pedestrian",fields:["name","conveying","access_simple","lit","width","wheelchair"],geometry:["line"],terms:["moving sidewalk","autwalk","skywalk","travolator","travelator","travellator","conveyor"],tags:{highway:"footway",conveying:"*"},name:"Moving Walkway"},"highway/footway/marked-raised":{icon:"temaki-pedestrian_crosswalk",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{footway:"crossing",crossing:"marked",traffic_calming:"table"},addTags:{highway:"footway",footway:"crossing",crossing:"marked",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["zebra crossing","marked crossing","crosswalk","flat top","hump","speed","slow"],name:"Marked Crosswalk (Raised)"},"highway/footway/marked":{icon:"temaki-pedestrian_crosswalk",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{footway:"crossing",crossing:"marked"},addTags:{highway:"footway",footway:"crossing",crossing:"marked"},reference:{key:"footway",value:"crossing"},terms:["marked foot path crossing","marked crossing","marked pedestrian crosswalk","zebra crossing"],name:"Marked Crosswalk"},"highway/footway/sidewalk":{icon:"temaki-pedestrian",geometry:["line"],tags:{footway:"sidewalk"},addTags:{highway:"footway",footway:"sidewalk"},reference:{key:"footway",value:"sidewalk"},terms:["pavement","sidepath"],name:"Sidewalk"},"highway/footway/unmarked-raised":{icon:"temaki-pedestrian",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{footway:"crossing",crossing:"unmarked",traffic_calming:"table"},addTags:{highway:"footway",footway:"crossing",crossing:"unmarked",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["flat top","hump","speed","slow"],name:"Unmarked Crossing (Raised)"},"highway/footway/unmarked":{icon:"temaki-pedestrian",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{footway:"crossing",crossing:"unmarked"},addTags:{highway:"footway",footway:"crossing",crossing:"unmarked"},reference:{key:"footway",value:"crossing"},terms:["unmarked foot path crossing","unmarked crosswalk","unmarked pedestrian crossing"],name:"Unmarked Crossing"},"highway/give_way":{icon:"temaki-yield",fields:["direction_vertex"],geometry:["vertex"],tags:{highway:"give_way"},terms:["give way","yield","sign"],name:"Yield Sign"},"highway/living_street":{icon:"iD-highway-living-street",fields:["name","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["covered","cycleway","flood_prone","junction_line","lit","maxheight","maxweight_bridge","oneway/bicycle","smoothness","trolley_wire","width"],geometry:["line"],tags:{highway:"living_street"},name:"Living Street"},"highway/milestone":{icon:"temaki-milestone",geometry:["point","vertex"],fields:["distance","direction_vertex"],tags:{highway:"milestone"},terms:["mile marker","mile post","mile stone","mileage marker","milemarker","milepost"],name:"Highway Milestone"},"highway/mini_roundabout":{icon:"maki-circle-stroked",geometry:["vertex"],terms:["traffic circle"],tags:{highway:"mini_roundabout"},fields:["direction_clock"],name:"Mini-Roundabout"},"highway/motorway_junction":{icon:"temaki-junction",fields:["ref_highway_junction","name"],geometry:["vertex"],tags:{highway:"motorway_junction"},terms:["exit"],name:"Motorway Junction / Exit"},"highway/motorway_link":{icon:"iD-highway-motorway-link",fields:["destination_oneway","destination/ref_oneway","junction/ref_oneway","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["charge_toll","covered","destination/symbol_oneway","incline","junction_line","lit","maxheight","maxspeed/advisory","maxweight_bridge","name","ref_road_number","smoothness","toll","width"],geometry:["line"],tags:{highway:"motorway_link"},terms:["exit","ramp","road","street","on ramp","off ramp"],name:"Motorway Link"},"highway/motorway":{icon:"iD-highway-motorway",fields:["name","ref_road_number","oneway_yes","maxspeed","lanes","surface","structure","access"],moreFields:["charge_toll","covered","incline","junction_line","lit","maxheight","maxweight_bridge","minspeed","not/name","smoothness","toll","width"],geometry:["line"],tags:{highway:"motorway"},terms:["autobahn","expressway","freeway","highway","interstate","parkway","road","street","thruway","turnpike"],name:"Motorway"},"highway/passing_place":{icon:"maki-circle-stroked",geometry:["vertex"],tags:{highway:"passing_place"},terms:["turnout, pullout"],name:"Passing Place"},"highway/path":{icon:"iD-other-line",fields:["name","surface","width","structure","access","incline"],moreFields:["covered","dog","gnis/feature_id","horse_scale","informal","lit","maxweight_bridge","mtb/scale","mtb/scale/imba","mtb/scale/uphill","not/name","ref","sac_scale","smoothness","stroller","trail_visibility","wheelchair"],geometry:["line"],terms:["hike","hiking","trackway","trail","walk"],tags:{highway:"path"},name:"Path"},"highway/path/informal":{icon:"iD-other-line",fields:["surface","width","access","trail_visibility","smoothness","incline"],moreFields:["covered","dog","horse_scale","informal","lit","maxweight_bridge","mtb/scale","mtb/scale/imba","mtb/scale/uphill","sac_scale","stroller","structure","wheelchair"],geometry:["line"],terms:["bootleg trail","cow path","desire line","desire path","desireline","desirepath","elephant path","game trail","goat track","herd path","pig trail","shortcut","social trail","use trail"],tags:{highway:"path",informal:"yes"},reference:{key:"informal"},name:"Informal Path"},"highway/pedestrian_area":{icon:"temaki-pedestrian",fields:["name","surface","lit","width","structure","access"],geometry:["area"],tags:{highway:"pedestrian",area:"yes"},terms:["center","centre","plaza","quad","square","walkway"],name:"Pedestrian Area"},"highway/pedestrian_line":{icon:"temaki-pedestrian",fields:["name","surface","lit","width","oneway","structure","access"],moreFields:["covered","incline","maxweight_bridge","smoothness"],geometry:["line"],tags:{highway:"pedestrian"},terms:["center","centre","plaza","quad","square","walkway"],name:"Pedestrian Street"},"highway/primary_link":{icon:"iD-highway-primary-link",fields:["destination_oneway","destination/ref_oneway","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["charge_toll","covered","cycleway","destination/symbol_oneway","flood_prone","incline","junction_line","junction/ref_oneway","lit","maxheight","maxspeed/advisory","maxweight_bridge","name","oneway/bicycle","ref_road_number","smoothness","toll","trolley_wire","width"],geometry:["line"],tags:{highway:"primary_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Primary Link"},"highway/primary":{icon:"iD-highway-primary",fields:["name","oneway","maxspeed","lanes","surface","structure","ref_road_number","access"],moreFields:["charge_toll","covered","cycleway","flood_prone","incline","junction_line","lit","maxheight","maxspeed/advisory","maxweight_bridge","not/name","oneway/bicycle","smoothness","toll","trolley_wire","width"],geometry:["line"],tags:{highway:"primary"},terms:["road","street"],name:"Primary Road"},"highway/raceway":{icon:"fas-flag-checkered",fields:["name","oneway","surface","sport_racing_motor","lit","width","lanes","structure"],geometry:["line","area"],tags:{highway:"raceway"},addTags:{highway:"raceway",sport:"motor"},terms:["auto*","formula one","kart","motocross","nascar","race*","track"],name:"Motorsport Racetrack"},"highway/raceway/karting":{icon:"fas-flag-checkered",geometry:["line","area"],tags:{highway:"raceway",sport:"karting"},terms:["carting","go carts","go karts","go-karts","gokarts","kart racing","karting track","motorsports","shifter karts","superkarts"],name:"Karting Racetrack"},"highway/raceway/motocross":{icon:"fas-motorcycle",geometry:["line","area"],tags:{highway:"raceway",sport:"motocross"},terms:["off-road racing","offroad moto racing","motocross circuit","motorcycle track","motorsports"],name:"Motocross Racetrack"},"highway/residential":{icon:"iD-highway-residential",fields:["name","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["covered","cycleway","flood_prone","incline","junction_line","lit","maxheight","maxspeed/advisory","maxweight_bridge","not/name","oneway/bicycle","smoothness","trolley_wire","width"],geometry:["line"],tags:{highway:"residential"},terms:["road","street"],name:"Residential Road"},"highway/rest_area":{icon:"maki-car",fields:["name","operator","opening_hours"],moreFields:["address","email","fax","phone","website","wheelchair"],geometry:["point","vertex","area"],tags:{highway:"rest_area"},terms:["rest stop"],name:"Rest Area"},"highway/road":{icon:"iD-other-line",fields:["highway","{highway/residential}"],moreFields:["{highway/residential}"],geometry:["line"],tags:{highway:"road"},terms:["road","street"],name:"Unknown Road"},"highway/secondary_link":{icon:"iD-highway-secondary-link",fields:["{highway/primary_link}"],moreFields:["{highway/primary_link}"],geometry:["line"],tags:{highway:"secondary_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Secondary Link"},"highway/secondary":{icon:"iD-highway-secondary",fields:["{highway/primary}"],moreFields:["{highway/primary}"],geometry:["line"],tags:{highway:"secondary"},terms:["road","street"],name:"Secondary Road"},"highway/service":{icon:"iD-highway-service",fields:["name","service","oneway","maxspeed","surface","covered","structure","access"],moreFields:["flood_prone","incline","lanes","lit","maxheight","maxspeed/advisory","maxweight_bridge","oneway/bicycle","trolley_wire","width"],geometry:["line"],tags:{highway:"service"},terms:["road","street"],matchScore:0.9,name:"Service Road"},"highway/service/alley":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"alley"},reference:{key:"service",value:"alley"},name:"Alley"},"highway/service/drive-through":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"drive-through"},reference:{key:"service",value:"drive-through"},name:"Drive-Through"},"highway/service/driveway":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"driveway"},reference:{key:"service",value:"driveway"},name:"Driveway"},"highway/service/emergency_access":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"emergency_access"},reference:{key:"service",value:"emergency_access"},name:"Emergency Access"},"highway/service/parking_aisle":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"parking_aisle"},reference:{key:"service",value:"parking_aisle"},name:"Parking Aisle"},"highway/services":{icon:"maki-car",fields:["{highway/rest_area}"],moreFields:["{highway/rest_area}"],geometry:["point","vertex","area"],tags:{highway:"services"},terms:["services","travel plaza","service station"],name:"Service Area"},"highway/speed_camera":{icon:"temaki-security_camera",geometry:["point","vertex"],fields:["direction","ref","maxspeed"],tags:{highway:"speed_camera"},terms:[],name:"Speed Camera"},"highway/steps":{icon:"iD-highway-steps",fields:["incline_steps","access_simple","handrail","step_count","tactile_paving","surface","width"],moreFields:["covered","dog","indoor","level_semi","lit","name","ref","stroller","wheelchair"],geometry:["line"],tags:{highway:"steps"},terms:["stairs","staircase","stairway"],name:"Steps"},"highway/steps/conveying":{icon:"maki-entrance",fields:["incline_steps","conveying","access_simple","indoor","level_semi","width"],moreFields:["{highway/steps}","handrail","step_count","surface"],geometry:["line"],terms:["moving staircase","moving stairway","people mover"],tags:{highway:"steps",conveying:"*"},name:"Escalator"},"highway/stop":{icon:"temaki-stop",fields:["stop","direction_vertex"],geometry:["vertex"],tags:{highway:"stop"},terms:["stop","halt","sign"],name:"Stop Sign"},"highway/street_lamp":{icon:"temaki-street_lamp_arm",geometry:["point","vertex"],tags:{highway:"street_lamp"},fields:["lamp_type","direction","ref"],terms:["streetlight","street light","lamp","light","gaslight"],name:"Street Lamp"},"highway/tertiary_link":{icon:"iD-highway-tertiary-link",fields:["{highway/primary_link}"],moreFields:["{highway/primary_link}"],geometry:["line"],tags:{highway:"tertiary_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Tertiary Link"},"highway/tertiary":{icon:"iD-highway-tertiary",fields:["{highway/primary}"],moreFields:["{highway/primary}"],geometry:["line"],tags:{highway:"tertiary"},terms:["road","street"],name:"Tertiary Road"},"highway/track":{icon:"fas-truck-monster",fields:["name","tracktype","surface","width","structure","access","incline","smoothness"],moreFields:["covered","flood_prone","horse_scale","maxweight_bridge","mtb/scale","mtb/scale/imba","mtb/scale/uphill","stroller","wheelchair"],geometry:["line"],tags:{highway:"track"},terms:["woods road","forest road","logging road","fire road","farm road","agricultural road","ranch road","carriage road","primitive","unmaintained","rut","offroad","4wd","4x4","four wheel drive","atv","quad","jeep","double track","two track"],name:"Unmaintained Track Road"},"highway/traffic_mirror":{icon:"maki-circle-stroked",geometry:["point","vertex"],fields:["direction"],tags:{highway:"traffic_mirror"},terms:["blind spot","convex","corner","curved","roadside","round","safety","sphere","visibility"],name:"Traffic Mirror"},"highway/traffic_signals":{icon:"temaki-traffic_signals",geometry:["vertex"],tags:{highway:"traffic_signals"},fields:["traffic_signals","traffic_signals/direction"],terms:["light","stoplight","traffic light"],name:"Traffic Signals"},"highway/trailhead":{icon:"fas-hiking",fields:["name","operator","elevation","address","access_simple","fee","payment_multi_fee","charge_fee"],moreFields:["gnis/feature_id","opening_hours"],geometry:["vertex"],tags:{highway:"trailhead"},terms:["hiking","mile zero","mountain biking","mountaineering","trail endpoint","trail start","staging area","trekking"],name:"Trailhead"},"highway/trunk_link":{icon:"iD-highway-trunk-link",fields:["{highway/motorway_link}"],moreFields:["{highway/motorway_link}"],geometry:["line"],tags:{highway:"trunk_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Trunk Link"},"highway/trunk":{icon:"iD-highway-trunk",fields:["name","ref_road_number","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["charge_toll","covered","incline","junction_line","lit","maxheight","maxweight_bridge","minspeed","not/name","smoothness","toll","width"],geometry:["line"],tags:{highway:"trunk"},terms:["road","street"],name:"Trunk Road"},"highway/turning_circle":{icon:"maki-circle-stroked",geometry:["vertex"],tags:{highway:"turning_circle"},terms:["cul-de-sac"],name:"Turning Circle"},"highway/turning_loop":{icon:"maki-circle",geometry:["vertex"],tags:{highway:"turning_loop"},terms:["cul-de-sac"],name:"Turning Loop (Island)"},"highway/unclassified":{icon:"iD-highway-unclassified",fields:["{highway/residential}"],moreFields:["{highway/residential}"],geometry:["line"],tags:{highway:"unclassified"},terms:["road","street"],name:"Minor/Unclassified Road"},historic:{icon:"temaki-ruins",fields:["historic","inscription"],moreFields:["gnis/feature_id"],geometry:["point","vertex","line","area"],tags:{historic:"*"},matchScore:0.5,name:"Historic Site"},"historic/archaeological_site":{icon:"temaki-ruins",fields:["name","site_type","historic/civilization","inscription","access_simple"],geometry:["point","vertex","area"],tags:{historic:"archaeological_site"},name:"Archaeological Site"},"historic/boundary_stone":{icon:"temaki-milestone",fields:["name","inscription"],moreFields:["{historic}","material"],geometry:["point","vertex"],tags:{historic:"boundary_stone"},name:"Boundary Stone"},"historic/building":{icon:"maki-home",fields:["{building}","start_date"],moreFields:["{building}","access_simple"],geometry:["area"],tags:{historic:"building"},addTags:{historic:"building",building:"*"},reference:{key:"historic",value:"building"},matchScore:0.5,name:"Historic Building"},"historic/castle":{icon:"maki-castle",fields:["name","castle_type","building_area","historic/civilization","access_simple","start_date"],geometry:["point","area"],tags:{historic:"castle"},name:"Castle"},"historic/castle/fortress":{icon:"maki-castle",fields:["name","building_area","access_simple","start_date"],geometry:["point","area"],reference:{key:"castle_type",value:"fortress"},tags:{historic:"castle",castle_type:"fortress"},terms:["citadel","military"],name:"Historic Fortress"},"historic/castle/palace":{icon:"fas-crown",fields:["name","building_area","access_simple","start_date"],geometry:["point","area"],reference:{key:"castle_type",value:"palace"},tags:{historic:"castle",castle_type:"palace"},terms:["Royal Residence","royal","king","queen"],name:"Palace"},"historic/castle/stately":{icon:"fas-crown",fields:["name","building_area","access_simple","start_date"],geometry:["point","area"],reference:{key:"castle_type",value:"stately"},tags:{historic:"castle",castle_type:"stately"},terms:["Historic Country House","Stately Home","nobility","gentry","representative"],name:"Château"},"historic/city_gate":{icon:"maki-castle",fields:["name","building_area","historic/civilization","start_date"],geometry:["point","area"],tags:{historic:"city_gate"},terms:["Town Gate"],name:"City Gate"},"historic/fort":{icon:"maki-castle",fields:["name","building_area","access_simple","start_date"],geometry:["point","area"],tags:{historic:"fort"},terms:["military"],name:"Historic Fort"},"historic/manor":{icon:"maki-castle",fields:["name","building_area","access_simple","start_date"],geometry:["point","area"],tags:{historic:"manor"},terms:["Mansion","gentry","nobility","estate"],name:"Manor House"},"historic/memorial":{icon:"maki-monument",fields:["name","memorial","inscription","material"],moreFields:["{historic}","website"],geometry:["point","vertex","area"],terms:["dedicatory","epitaph","remember","remembrance","memory","monument","stolperstein"],tags:{historic:"memorial"},name:"Memorial"},"historic/memorial/plaque":{icon:"temaki-plaque",fields:["{historic/memorial}","direction"],geometry:["point","vertex"],terms:["dedicatory","epitaph","historical marker","remember","remembrance","memory"],tags:{historic:"memorial",memorial:"plaque"},reference:{key:"memorial",value:"plaque"},name:"Commemorative Plaque"},"historic/monument":{icon:"maki-monument",fields:["name","inscription","access_simple"],moreFields:["{historic}","material"],geometry:["point","vertex","area"],tags:{historic:"monument"},name:"Monument"},"historic/ruins":{icon:"temaki-ruins",fields:["name","historic/civilization","inscription","access_simple"],geometry:["point","vertex","area"],tags:{historic:"ruins"},name:"Ruins"},"historic/tomb":{icon:"maki-cemetery",fields:["name","tomb","building_area","inscription","access_simple"],geometry:["point","area"],tags:{historic:"tomb"},name:"Tomb"},"historic/wayside_cross":{icon:"maki-religious-christian",fields:["name","inscription"],moreFields:["{historic}","material"],geometry:["point","vertex","area"],tags:{historic:"wayside_cross"},name:"Wayside Cross"},"historic/wayside_shrine":{icon:"maki-landmark",fields:["name","religion","denomination","inscription","access_simple"],geometry:["point","vertex","area"],tags:{historic:"wayside_shrine"},name:"Wayside Shrine"},"historic/wreck":{icon:"temaki-ruins",fields:["name","access_simple","seamark/wreck/category","historic/wreck/date_sunk","historic/wreck/visible_at_low_tide","historic/wreck/visible_at_high_tide"],moreFields:["{historic}","seamark/type"],geometry:["point","area"],tags:{historic:"wreck"},addTags:{historic:"wreck","seamark:type":"wreck"},terms:["hull","mast","maritime","remains","ship","boat"],name:"Shipwreck"},"indoor/corridor_line":{fields:["level","name"],geometry:["line"],tags:{indoor:"corridor"},searchable:false,matchScore:1.1,name:"Indoor Corridor",replacement:"highway/corridor"},"indoor/area":{fields:["level","name","ref_room_number","height"],geometry:["area"],tags:{indoor:"area"},terms:["indoor space"],matchScore:0.8,name:"Indoor Area"},"indoor/corridor":{icon:"temaki-pedestrian",fields:["level","name","ref","height"],geometry:["area"],tags:{indoor:"corridor"},terms:["concourse","foyer","hallway","passageway"],matchScore:0.8,name:"Indoor Corridor"},"indoor/door":{icon:"maki-entrance-alt1",fields:["level","ref","door_type","access_simple","width","height"],moreFields:["wheelchair"],geometry:["vertex"],tags:{indoor:"door"},addTags:{indoor:"door",door:"yes"},removeTags:{indoor:"door",door:"*"},terms:["doorframe","doorway","portal","room access","threshold"],name:"Indoor Door"},"indoor/elevator":{icon:"temaki-elevator",fields:["ref","level_semi"],geometry:["area"],tags:{indoor:"room",elevator:"yes"},terms:["elevator","lift"],matchScore:0.8,name:"Indoor Elevator Shaft"},"indoor/room":{fields:["level","name","ref_room_number","room","height"],geometry:["area"],tags:{indoor:"room"},terms:["antechamber","anteroom","atrium","cell","chamber","concourse","foyer","indoor room","lobby","vestibule"],matchScore:0.8,name:"Room"},"indoor/stairs":{icon:"iD-highway-steps",fields:["ref","level_semi","conveying_escalator"],geometry:["area"],tags:{indoor:"room",stairs:"yes"},terms:["stair","stairs","staircase","stairway","stairwell","steps"],matchScore:0.8,name:"Indoor Stairwell"},"indoor/wall":{icon:"temaki-wall",fields:["level","height"],geometry:["line"],tags:{indoor:"wall"},terms:["indoor barrier","room divider","room partition"],name:"Indoor Wall"},"internet_access/wlan":{icon:"fas-wifi",geometry:["point","area"],fields:["internet_access/ssid","internet_access/fee"],moreFields:["level"],terms:["wi-fi","wifi","hotspot"],tags:{internet_access:"wlan"},matchScore:0.25,name:"Wi-Fi Hotspot"},junction:{icon:"temaki-junction",fields:["name"],geometry:["vertex","area"],tags:{junction:"yes"},name:"Junction"},"landuse/basin":{icon:"maki-water",fields:["name","basin","intermittent_yes"],geometry:["area"],tags:{landuse:"basin"},name:"Basin",searchable:false},"landuse/churchyard":{icon:"maki-religious-christian",fields:["{landuse/religious}"],moreFields:["{landuse/religious}"],geometry:["area"],tags:{landuse:"churchyard"},searchable:false,name:"Churchyard"},"landuse/farm":{icon:"maki-farm",fields:["name","operator","crop"],geometry:["point","area"],tags:{landuse:"farm"},name:"Farmland",searchable:false},"landuse/pond":{icon:"maki-water",fields:["name","intermittent"],geometry:["area"],tags:{landuse:"pond"},name:"Pond",searchable:false},"landuse/reservoir":{icon:"maki-water",fields:["name","intermittent"],geometry:["area"],tags:{landuse:"reservoir"},name:"Reservoir",searchable:false},"landuse/allotments":{icon:"maki-garden-centre",geometry:["area"],fields:["name"],moreFields:["address","email","fax","phone","website"],tags:{landuse:"allotments"},terms:["allotment","garden"],name:"Community Garden"},"landuse/aquaculture":{icon:"maki-aquarium",fields:["name","operator","produce"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"aquaculture"},terms:["fish farm","crustacean","algae","aquafarming","shrimp farm","oyster farm","mariculture","algaculture"],name:"Aquaculture"},"landuse/brownfield":{icon:"temaki-bulldozer",geometry:["area"],fields:["name"],tags:{landuse:"brownfield"},terms:[],matchScore:0.9,name:"Brownfield"},"landuse/cemetery":{icon:"maki-cemetery",fields:["name","religion","denomination"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"cemetery"},terms:["burial ground","cemetary","cemetery","churchyard","columbarium","grave yard","graveyard","mausoleum","tomb"],name:"Cemetery"},"landuse/commercial":{icon:"maki-suitcase",fields:["name"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"commercial"},terms:[],matchScore:0.9,name:"Commercial Area"},"landuse/construction":{icon:"temaki-bulldozer",fields:["name","construction","operator","opening_date","check_date","note"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"construction"},terms:["building","bulldozer","construction site","construction zone","crane","demolition","development","infrastructure"],name:"Construction Area"},"landuse/farmland":{icon:"fas-tractor",fields:["name","operator","crop","produce"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"farmland"},terms:["crop","grow","plant"],name:"Farmland"},"landuse/farmyard":{icon:"maki-farm",fields:["name","operator","crop"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"farmyard"},terms:["crop","grow","plant"],name:"Farmyard"},"landuse/flowerbed":{icon:"maki-garden",fields:["operator"],moreFields:["address","name"],geometry:["area"],tags:{landuse:"flowerbed"},terms:["floral garden","flower garden"],name:"Flowerbed"},"landuse/forest":{icon:"maki-park-alt1",fields:["name","leaf_type","leaf_cycle","produce"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"forest"},terms:["boreal","cut","forest","forestry","forrest","lumber","silviculture","taiga","tree","trees","woodlands","woods"],name:"Managed Forest"},"landuse/garages":{icon:"fas-warehouse",geometry:["area"],fields:["name"],moreFields:["address","email","fax","phone","website"],tags:{landuse:"garages"},terms:[],name:"Garage Landuse"},"landuse/grass":{icon:"temaki-lawn",geometry:["area"],tags:{landuse:"grass"},terms:["field","green","lawn","managed grass","mown grass","turf"],name:"Grass"},"landuse/greenfield":{icon:"temaki-bulldozer",geometry:["area"],fields:["name"],tags:{landuse:"greenfield"},terms:[],matchScore:0.9,name:"Greenfield"},"landuse/greenhouse_horticulture":{icon:"maki-garden",fields:["name","operator"],moreFields:["address","email","fax","phone","website"],geometry:["area"],terms:["flower","greenhouse","horticulture","grow","vivero"],tags:{landuse:"greenhouse_horticulture"},matchScore:0.9,name:"Greenhouse Horticulture"},"landuse/harbour":{icon:"maki-harbor",fields:["name","operator"],moreFields:["address","email","fax","phone","website"],geometry:["area"],terms:["boat"],tags:{landuse:"harbour"},name:"Harbor"},"landuse/industrial":{icon:"maki-industry",fields:["name","industrial"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"industrial"},terms:[],matchScore:0.9,name:"Industrial Area"},"landuse/industrial/scrap_yard":{icon:"temaki-junk_car",fields:["name","operator","address","opening_hours"],geometry:["point","area"],tags:{industrial:"scrap_yard"},addTags:{landuse:"industrial",industrial:"scrap_yard"},reference:{key:"industrial",value:"scrap_yard"},terms:["car","junk","metal","salvage","scrap","u-pull-it","vehicle","wreck","yard"],name:"Scrap Yard"},"landuse/industrial/slaughterhouse":{icon:"maki-slaughterhouse",fields:["name","operator","address","building_area","opening_hours"],geometry:["point","area"],tags:{industrial:"slaughterhouse"},addTags:{landuse:"industrial",industrial:"slaughterhouse"},reference:{key:"industrial",value:"slaughterhouse"},terms:["abattoir","beef","butchery","calf","chicken","cow","killing house","meat","pig","pork","poultry","shambles","stockyard"],name:"Slaughterhouse"},"landuse/landfill":{icon:"temaki-bulldozer",geometry:["area"],fields:["name"],moreFields:["address","email","fax","phone","website"],tags:{landuse:"landfill"},terms:["dump"],name:"Landfill"},"landuse/meadow":{icon:"maki-garden",geometry:["area"],fields:["name"],tags:{landuse:"meadow"},terms:["grazing","hay field","pasture"],name:"Meadow"},"landuse/military":{icon:"temaki-military",fields:["name"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"military"},terms:[],matchScore:0.9,name:"Military Area"},"landuse/military/airfield":{icon:"tnp-2009265",fields:["name","iata","icao"],geometry:["point","area"],tags:{military:"airfield"},addTags:{aeroway:"aerodrome",landuse:"military",military:"airfield"},reference:{key:"military",value:"airfield"},terms:["aerodrome","aeroway","air force","airplane","airport","army","base","bomb","fight","force","guard","heli*","jet","marine","navy","plane","troop","war"],name:"Military Airfield"},"landuse/military/barracks":{icon:"temaki-military",fields:["name","building_area"],geometry:["point","area"],tags:{military:"barracks"},addTags:{landuse:"military",military:"barracks"},terms:["air force","army","base","fight","force","guard","marine","navy","troop","war"],name:"Barracks"},"landuse/military/danger_area":{icon:"maki-danger",fields:["name"],geometry:["point","vertex","area"],tags:{military:"danger_area"},addTags:{landuse:"military",military:"danger_area"},terms:["air force","army","base","blast","bomb","explo*","force","guard","mine","marine","navy","troop","war"],name:"Danger Area"},"landuse/military/naval_base":{icon:"temaki-military",fields:["name"],geometry:["point","area"],tags:{military:"naval_base"},addTags:{landuse:"military",military:"naval_base"},terms:["base","fight","force","guard","marine","navy","ship","sub","troop","war"],name:"Naval Base"},"landuse/military/obstacle_course":{icon:"temaki-military",geometry:["point","area"],tags:{military:"obstacle_course"},addTags:{landuse:"military",military:"obstacle_course"},terms:["army","base","force","guard","marine","navy","troop","war"],name:"Obstacle Course"},"landuse/military/range":{icon:"temaki-military",fields:["name"],geometry:["point","area"],tags:{military:"range"},addTags:{landuse:"military",military:"range"},terms:["air force","army","base","fight","fire","force","guard","gun","marine","navy","rifle","shoot*","snip*","train","troop","war"],name:"Military Range"},"landuse/military/training_area":{icon:"temaki-military",fields:["name"],geometry:["point","area"],tags:{military:"training_area"},addTags:{landuse:"military",military:"training_area"},terms:["air force","army","base","fight","fire","force","guard","gun","marine","navy","rifle","shoot*","snip*","train","troop","war"],name:"Training Area"},"landuse/orchard":{icon:"maki-park",fields:["name","operator","trees"],moreFields:["address","email","fax","phone","species/wikidata","website"],geometry:["area"],tags:{landuse:"orchard"},terms:["fruit"],name:"Orchard"},"landuse/plant_nursery":{icon:"maki-garden",fields:["name","operator","plant"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"plant_nursery"},terms:["flower","garden","grow","vivero"],name:"Plant Nursery"},"landuse/quarry":{geometry:["area"],fields:["name","operator","resource"],moreFields:["address","email","fax","phone","website"],tags:{landuse:"quarry"},terms:[],name:"Quarry"},"landuse/railway":{icon:"maki-rail",fields:["operator"],geometry:["area"],tags:{landuse:"railway"},terms:["rail","train","track"],name:"Railway Corridor"},"landuse/recreation_ground":{icon:"maki-pitch",geometry:["area"],fields:["name"],moreFields:["address","email","fax","phone","website"],tags:{landuse:"recreation_ground"},terms:["playing fields"],name:"Recreation Ground"},"landuse/religious":{icon:"maki-place-of-worship",geometry:["area"],fields:["name","religion","denomination"],moreFields:["address","email","fax","phone","website"],tags:{landuse:"religious"},terms:["christian","churchyard","hindu","jewish","mosque","muslim","place of worship","shinto","sikh","taoist","temple","shrine","synagogue"],name:"Religious Area"},"landuse/residential":{icon:"maki-residential-community",fields:["name","residential"],geometry:["area"],tags:{landuse:"residential"},terms:[],matchScore:0.9,name:"Residential Area"},"landuse/residential/apartments":{icon:"maki-residential-community",fields:["name","operator","address"],geometry:["point","area"],tags:{residential:"apartments"},addTags:{landuse:"residential",residential:"apartments"},reference:{key:"residential",value:"apartments"},terms:["flat","residence","tenement"],name:"Apartment Complex"},"landuse/retail":{icon:"maki-commercial",geometry:["area"],fields:["name"],moreFields:["address","email","fax","phone","website"],tags:{landuse:"retail"},matchScore:0.9,name:"Retail Area"},"landuse/vineyard":{icon:"temaki-grapes",fields:["name","operator","grape_variety"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"vineyard"},addTags:{landuse:"vineyard",crop:"grape"},removeTags:{landuse:"vineyard",crop:"grape",grape_variety:"*"},terms:["grape","wine"],name:"Vineyard"},"landuse/winter_sports":{icon:"fas-skiing",geometry:["area"],fields:["name","operator"],moreFields:["access_simple","address","opening_hours"],tags:{landuse:"winter_sports"},terms:["piste area","ski area","ski hill","ski mountain","ski resort","snow board area","snowboard area"],name:"Winter Sports Area"},"leisure/adult_gaming_centre":{icon:"temaki-casino",fields:["{amenity/casino}"],moreFields:["{amenity/casino}"],geometry:["point","area"],terms:["gambling","slot machine"],tags:{leisure:"adult_gaming_centre"},name:"Adult Gaming Center"},"leisure/amusement_arcade":{icon:"maki-gaming",fields:["name","operator","address","building_area"],moreFields:["air_conditioning","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","max_age","min_age","opening_hours","payment_multi","phone","smoking","website","wheelchair"],geometry:["point","area"],terms:["pay-to-play games","video games","driving simulators","pinball machines"],tags:{leisure:"amusement_arcade"},name:"Amusement Arcade"},"leisure/bandstand":{icon:"fas-music",fields:["name","building_area","operator"],moreFields:["gnis/feature_id","website"],geometry:["point","area"],tags:{leisure:"bandstand"},name:"Bandstand"},"leisure/beach_resort":{icon:"fas-umbrella-beach",fields:["name","address","opening_hours","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","phone","smoking","website"],geometry:["point","area"],tags:{leisure:"beach_resort"},name:"Beach Resort"},"leisure/bird_hide":{icon:"temaki-binoculars",fields:["name","building_area","address","opening_hours"],moreFields:["website"],geometry:["point","area"],tags:{leisure:"bird_hide"},terms:["machan","ornithology"],name:"Bird Hide"},"leisure/bleachers":{icon:"temaki-bleachers",geometry:["area"],tags:{leisure:"bleachers"},terms:["crowd","bench","sports","stand","stands","seat","seating"],name:"Bleachers"},"leisure/bowling_alley":{icon:"temaki-bowling",fields:["name","operator","address","building_area"],moreFields:["air_conditioning","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","min_age","opening_hours","payment_multi","phone","smoking","website","wheelchair"],geometry:["point","area"],terms:["bowling center"],tags:{leisure:"bowling_alley"},name:"Bowling Alley"},"leisure/common":{icon:"temaki-pedestrian",fields:["name","access_simple"],moreFields:["gnis/feature_id","website"],geometry:["area","point"],terms:["open space"],tags:{leisure:"common"},name:"Common"},"leisure/dance":{icon:"fas-music",fields:["name","operator","address","building_area","dance/style"],moreFields:["email","fax","gnis/feature_id","level","opening_hours","payment_multi","phone","website"],geometry:["point","area"],terms:["ballroom","jive","swing","tango","waltz"],tags:{leisure:"dance"},name:"Dance Hall"},"leisure/dancing_school":{icon:"fas-music",fields:["name","operator","address","building_area","dance/style"],moreFields:["email","fax","gnis/feature_id","level","opening_hours","payment_multi","phone","website"],geometry:["point","area"],terms:["jive","swing","tango","waltz","dance teaching"],tags:{leisure:"dance","dance:teaching":"yes"},reference:{key:"leisure",value:"dance"},name:"Dance School"},"leisure/disc_golf_course":{icon:"temaki-disc_golf_basket",fields:["name","operator","access_simple","fee","payment_multi_fee","charge_fee","opening_hours"],moreFields:["address","dog","email","fax","gnis/feature_id","lit","phone","website","wheelchair"],geometry:["area","point"],tags:{leisure:"disc_golf_course"},addTags:{leisure:"disc_golf_course",sport:"disc_golf"},terms:["disk golf","frisbee golf","flying disc golf","frolf","ultimate"],name:"Disc Golf Course"},"leisure/dog_park":{icon:"maki-dog-park",fields:["name","operator","operator/type","address","access_simple","website"],moreFields:["dog","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","phone","ref"],geometry:["area","point"],tags:{leisure:"dog_park"},terms:[],name:"Dog Park"},"leisure/escape_game":{icon:"fas-puzzle-piece",fields:["name","address","building_area","opening_hours","website","fee","payment_multi_fee","charge_fee","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["air_conditioning","email","fax","level","phone","smoking","wheelchair"],geometry:["point","area"],terms:["escape game","escape the room","puzzle room","quest room"],tags:{leisure:"escape_game"},name:"Escape Room"},"leisure/firepit":{icon:"temaki-campfire",fields:["access_simple","seasonal","width"],moreFields:["ref"],geometry:["point","area"],tags:{leisure:"firepit"},terms:["bonfire","campfire","fire circle","fire hole","fire place","fire ring","firepit","fireplace","firering"],name:"Fire Pit"},"leisure/fishing":{icon:"fas-fish",fields:["name","access_simple","fishing"],geometry:["vertex","point","area"],tags:{leisure:"fishing"},terms:["angler"],name:"Fishing Spot"},"leisure/fitness_centre":{icon:"fas-dumbbell",fields:["name","sport","address","building_area","opening_hours","phone","website"],moreFields:["brand","charge_fee","email","fax","fee","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","payment_multi"],geometry:["point","area"],tags:{leisure:"fitness_centre"},terms:["health","gym","leisure","pilates","studio"],name:"Gym / Fitness Center"},"leisure/fitness_centre/yoga":{icon:"maki-pitch",geometry:["point","area"],terms:["asanas","meditation","modern yoga","studio"],tags:{leisure:"fitness_centre",sport:"yoga"},reference:{key:"sport",value:"yoga"},name:"Yoga Studio"},"leisure/fitness_station":{icon:"maki-pitch",fields:["fitness_station","ref","wheelchair","blind"],moreFields:["access_simple","opening_hours"],geometry:["point","area"],tags:{leisure:"fitness_station"},addTags:{leisure:"fitness_station",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","trim trail"],name:"Outdoor Fitness Station"},"leisure/fitness_station/balance_beam":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"balance_beam"},addTags:{leisure:"fitness_station",fitness_station:"balance_beam",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["balance","exercise","fitness","gym","trim trail"],name:"Exercise Balance Beam"},"leisure/fitness_station/box":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"box"},addTags:{leisure:"fitness_station",fitness_station:"box",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["box","exercise","fitness","gym","jump","trim trail"],name:"Exercise Box"},"leisure/fitness_station/horizontal_bar":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"horizontal_bar"},addTags:{leisure:"fitness_station",fitness_station:"horizontal_bar",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","chinup","chin up","exercise","fitness","gym","pullup","pull up","trim trail"],name:"Exercise Horizontal Bar"},"leisure/fitness_station/horizontal_ladder":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"horizontal_ladder"},addTags:{leisure:"fitness_station",fitness_station:"horizontal_ladder",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","chinup","chin up","exercise","fitness","gym","ladder","monkey bars","pullup","pull up","trim trail"],name:"Exercise Monkey Bars"},"leisure/fitness_station/hyperextension":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"hyperextension"},addTags:{leisure:"fitness_station",fitness_station:"hyperextension",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["back","exercise","extension","fitness","gym","roman chair","trim trail"],name:"Hyperextension Station"},"leisure/fitness_station/parallel_bars":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"parallel_bars"},addTags:{leisure:"fitness_station",fitness_station:"parallel_bars",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","dip","exercise","fitness","gym","trim trail"],name:"Parallel Bars"},"leisure/fitness_station/push-up":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"push-up"},addTags:{leisure:"fitness_station",fitness_station:"push-up",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","exercise","fitness","gym","pushup","push up","trim trail"],name:"Push-Up Station"},"leisure/fitness_station/rings":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"rings"},addTags:{leisure:"fitness_station",fitness_station:"rings",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","muscle up","pullup","pull up","trim trail"],name:"Exercise Rings"},"leisure/fitness_station/sign":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"sign"},addTags:{leisure:"fitness_station",fitness_station:"sign",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","trim trail"],name:"Exercise Instruction Sign"},"leisure/fitness_station/sit-up":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"sit-up"},addTags:{leisure:"fitness_station",fitness_station:"sit-up",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["crunch","exercise","fitness","gym","situp","sit up","trim trail"],name:"Sit-Up Station"},"leisure/fitness_station/stairs":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"stairs"},addTags:{leisure:"fitness_station",fitness_station:"stairs",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","steps","trim trail"],name:"Exercise Stairs"},"leisure/garden":{icon:"maki-garden",fields:["name","operator","access_simple","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","phone","website"],geometry:["point","vertex","area"],tags:{leisure:"garden"},name:"Garden"},"leisure/golf_course":{icon:"maki-golf",fields:["name","operator","address","opening_hours"],moreFields:["email","fax","gnis/feature_id","payment_multi","phone","website"],geometry:["area","point"],terms:["links"],tags:{leisure:"golf_course"},name:"Golf Course"},"leisure/hackerspace":{icon:"fas-code",fields:["name","address","building_area","opening_hours","website","fee","payment_multi_fee","charge_fee","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["air_conditioning","email","fax","gnis/feature_id","level","phone","smoking","wheelchair"],geometry:["point","area"],terms:["makerspace","hackspace","hacklab"],tags:{leisure:"hackerspace"},name:"Hackerspace"},"leisure/horse_riding":{icon:"maki-horse-riding",fields:["name","access_simple","operator","address","building"],moreFields:["email","fax","gnis/feature_id","opening_hours","payment_multi","phone","website"],geometry:["point","area"],terms:["equestrian","stable"],tags:{leisure:"horse_riding"},name:"Horseback Riding Facility"},"leisure/ice_rink":{icon:"fas-skating",fields:["name","seasonal","sport_ice","operator","address","building"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","opening_hours","payment_multi","phone","website"],geometry:["area","point"],terms:["hockey","skating","curling"],tags:{leisure:"ice_rink"},name:"Ice Rink"},"leisure/marina":{icon:"tnp-2009223",fields:["name","operator","capacity","fee","payment_multi_fee","charge_fee","sanitary_dump_station","power_supply"],moreFields:["address","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","phone","seamark/type","website"],geometry:["area","point","vertex"],terms:["boat"],tags:{leisure:"marina"},name:"Marina"},"leisure/miniature_golf":{icon:"maki-golf",fields:["name","operator","address","opening_hours","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","phone","website"],geometry:["area","point"],terms:["crazy golf","mini golf","putt-putt"],tags:{leisure:"miniature_golf"},name:"Miniature Golf"},"leisure/nature_reserve":{icon:"maki-park",geometry:["area","point"],fields:["name","operator","address","opening_hours"],moreFields:["dog","email","fax","gnis/feature_id","phone","website"],tags:{leisure:"nature_reserve"},terms:["protected","wildlife"],name:"Nature Reserve"},"leisure/outdoor_seating":{icon:"maki-picnic-site",geometry:["point","area"],fields:["name","operator"],moreFields:["level"],terms:["al fresco","beer garden","dining","cafe","restaurant","pub","bar","patio"],tags:{leisure:"outdoor_seating"},name:"Outdoor Seating Area"},"leisure/park":{icon:"temaki-tree_and_bench",fields:["name","operator","address","opening_hours"],moreFields:["dog","email","fax","gnis/feature_id","phone","smoking","website"],geometry:["area","point"],terms:["esplanade","estate","forest","garden","grass","green","grounds","lawn","lot","meadow","parkland","place","playground","plaza","pleasure garden","recreation area","square","tract","village green","woodland"],tags:{leisure:"park"},name:"Park"},"leisure/picnic_table":{icon:"maki-picnic-site",fields:["material","lit","bench"],moreFields:["level"],geometry:["point"],tags:{leisure:"picnic_table"},terms:["bench"],name:"Picnic Table"},"leisure/picnic_table/chess":{icon:"fas-chess-pawn",geometry:["point"],tags:{leisure:"picnic_table",sport:"chess"},reference:{key:"sport",value:"chess"},terms:["bench","chess board","checkerboard","checkers","chequerboard","game table"],name:"Chess Table"},"leisure/pitch":{icon:"maki-pitch",fields:["name","sport","access_simple","surface","lit"],moreFields:["charge_fee","covered","fee","gnis/feature_id","indoor","payment_multi_fee"],geometry:["area","point"],tags:{leisure:"pitch"},terms:["field"],name:"Sport Pitch"},"leisure/pitch/american_football":{icon:"maki-american-football",geometry:["area","point"],tags:{leisure:"pitch",sport:"american_football"},reference:{key:"sport",value:"american_football"},terms:["football","gridiron"],name:"American Football Field"},"leisure/pitch/australian_football":{icon:"maki-american-football",geometry:["area","point"],tags:{leisure:"pitch",sport:"australian_football"},reference:{key:"sport",value:"australian_football"},terms:["Aussie","AFL","football"],name:"Australian Football Field"},"leisure/pitch/badminton":{icon:"maki-tennis",fields:["{leisure/pitch}","access_simple"],geometry:["area","point"],tags:{leisure:"pitch",sport:"badminton"},reference:{key:"sport",value:"badminton"},terms:[],name:"Badminton Court"},"leisure/pitch/baseball":{icon:"maki-baseball",geometry:["area","point"],tags:{leisure:"pitch",sport:"baseball"},reference:{key:"sport",value:"baseball"},terms:[],name:"Baseball Field"},"leisure/pitch/basketball":{icon:"maki-basketball",fields:["name","surface","hoops","lit","access_simple"],geometry:["area","point"],tags:{leisure:"pitch",sport:"basketball"},reference:{key:"sport",value:"basketball"},terms:[],name:"Basketball Court"},"leisure/pitch/beachvolleyball":{icon:"maki-volleyball",geometry:["area","point"],tags:{leisure:"pitch",sport:"beachvolleyball"},addTags:{leisure:"pitch",sport:"beachvolleyball",surface:"sand"},reference:{key:"sport",value:"beachvolleyball"},terms:["volleyball"],name:"Beach Volleyball Court"},"leisure/pitch/boules":{icon:"maki-pitch",fields:["name","boules","{leisure/pitch}"],geometry:["area","point"],tags:{leisure:"pitch",sport:"boules"},reference:{key:"sport",value:"boules"},terms:["bocce","lyonnaise","pétanque"],name:"Boules/Bocce Court"},"leisure/pitch/bowls":{icon:"maki-pitch",geometry:["area","point"],tags:{leisure:"pitch",sport:"bowls"},reference:{key:"sport",value:"bowls"},terms:[],name:"Bowling Green"},"leisure/pitch/chess":{icon:"fas-chess-bishop",geometry:["area","point"],tags:{leisure:"pitch",sport:"chess"},reference:{key:"sport",value:"chess"},terms:["chessboard","checkerboard","checkers","chequerboard","garden chess","large chess","oversize chess"],name:"Giant Chess Board"},"leisure/pitch/cricket":{icon:"maki-cricket",geometry:["area","point"],tags:{leisure:"pitch",sport:"cricket"},reference:{key:"sport",value:"cricket"},terms:[],name:"Cricket Field"},"leisure/pitch/equestrian":{icon:"maki-horse-riding",fields:["{leisure/pitch}","building"],geometry:["area","point"],tags:{leisure:"pitch",sport:"equestrian"},reference:{key:"sport",value:"equestrian"},terms:["dressage","equestrian","horse","horseback","riding"],name:"Riding Arena"},"leisure/pitch/field_hockey":{icon:"maki-pitch",geometry:["area","point"],tags:{leisure:"pitch",sport:"field_hockey"},reference:{key:"sport",value:"field_hockey"},terms:["landhockey"],name:"Field Hockey Pitch"},"leisure/pitch/horseshoes":{icon:"temaki-horseshoes",geometry:["area","point"],tags:{leisure:"pitch",sport:"horseshoes"},reference:{key:"sport",value:"horseshoes"},terms:["horse shoes"],name:"Horseshoes Pit"},"leisure/pitch/netball":{icon:"maki-volleyball",geometry:["area","point"],tags:{leisure:"pitch",sport:"netball"},reference:{key:"sport",value:"netball"},terms:[],name:"Netball Court"},"leisure/pitch/rugby_league":{icon:"maki-american-football",geometry:["area","point"],tags:{leisure:"pitch",sport:"rugby_league"},reference:{key:"sport",value:"rugby_league"},terms:[],name:"Rugby League Field"},"leisure/pitch/rugby_union":{icon:"maki-american-football",geometry:["area","point"],tags:{leisure:"pitch",sport:"rugby_union"},reference:{key:"sport",value:"rugby_union"},terms:[],name:"Rugby Union Field"},"leisure/pitch/shuffleboard":{icon:"temaki-shuffleboard",geometry:["area","point"],tags:{leisure:"pitch",sport:"shuffleboard"},reference:{key:"sport",value:"shuffleboard"},terms:["deck shuffleboard","floor shuffleboard"],name:"Shuffleboard Court"},"leisure/pitch/skateboard":{icon:"maki-skateboard",geometry:["area","point"],tags:{leisure:"pitch",sport:"skateboard"},reference:{key:"sport",value:"skateboard"},terms:[],name:"Skate Park"},"leisure/pitch/soccer":{icon:"maki-soccer",geometry:["area","point"],tags:{leisure:"pitch",sport:"soccer"},reference:{key:"sport",value:"soccer"},terms:["football"],name:"Soccer Field"},"leisure/pitch/softball":{icon:"maki-baseball",geometry:["area","point"],tags:{leisure:"pitch",sport:"softball"},reference:{key:"sport",value:"softball"},terms:["softball","diamond"],name:"Softball Field"},"leisure/pitch/table_tennis":{icon:"maki-tennis",fields:["name","lit","access_simple"],geometry:["area","point"],tags:{leisure:"pitch",sport:"table_tennis"},reference:{key:"sport",value:"table_tennis"},terms:["table tennis","ping pong"],name:"Ping Pong Table"},"leisure/pitch/tennis":{icon:"maki-tennis",fields:["{leisure/pitch}","access_simple"],geometry:["area","point"],tags:{leisure:"pitch",sport:"tennis"},reference:{key:"sport",value:"tennis"},terms:[],name:"Tennis Court"},"leisure/pitch/volleyball":{icon:"maki-volleyball",geometry:["area","point"],tags:{leisure:"pitch",sport:"volleyball"},reference:{key:"sport",value:"volleyball"},terms:[],name:"Volleyball Court"},"leisure/playground":{icon:"maki-playground",fields:["name","operator","playground/theme","surface","access_simple","min_age","max_age"],moreFields:["blind","dog","gnis/feature_id","wheelchair"],geometry:["area","point"],terms:["jungle gym","play area"],tags:{leisure:"playground"},name:"Playground"},"leisure/resort":{icon:"maki-lodging",fields:["name","operator","resort","address","opening_hours"],moreFields:["access_simple","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","website"],geometry:["point","area"],tags:{leisure:"resort"},terms:["recreation center","sanatorium","ski and snowboard resort","vacation resort","winter sports resort"],name:"Resort"},"leisure/sauna":{icon:"fas-thermometer-three-quarters",fields:["name","operator","address","opening_hours","access_simple","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","level","phone","website"],geometry:["point","area"],tags:{leisure:"sauna"},name:"Sauna"},"leisure/slipway_point":{icon:"maki-slipway",fields:["{leisure/slipway}"],moreFields:["{leisure/slipway}"],geometry:["point","vertex"],terms:["boat launch","boat ramp","boat landing"],tags:{leisure:"slipway"},name:"Slipway"},"leisure/slipway":{icon:"maki-slipway",fields:["name","surface","access_simple","fee","payment_multi_fee","charge_fee","lanes"],moreFields:["lit","opening_hours","seamark/type","width"],geometry:["line"],terms:["boat launch","boat ramp","boat landing"],tags:{leisure:"slipway"},addTags:{leisure:"slipway",highway:"service",service:"slipway"},matchScore:1.1,name:"Slipway"},"leisure/sports_centre":{icon:"maki-pitch",fields:["name","sport","building","address","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","opening_hours","phone","website"],geometry:["point","area"],tags:{leisure:"sports_centre"},terms:[],name:"Sports Center / Complex"},"leisure/sports_centre/climbing":{icon:"temaki-abseiling",geometry:["point","area"],terms:["abseiling","artificial climbing wall","belaying","bouldering","rock climbing facility","indoor rock wall","rappeling","rock gym","ropes"],tags:{leisure:"sports_centre",sport:"climbing"},reference:{key:"sport",value:"climbing"},name:"Climbing Gym"},"leisure/sports_centre/swimming":{icon:"fas-swimmer",geometry:["area","point"],terms:["dive","water"],tags:{leisure:"sports_centre",sport:"swimming"},reference:{key:"sport",value:"swimming"},name:"Swimming Pool Facility"},"leisure/stadium":{icon:"maki-pitch",fields:["name","operator","sport","address"],moreFields:["email","fax","gnis/feature_id","phone","website"],geometry:["point","area"],tags:{leisure:"stadium"},name:"Stadium"},"leisure/swimming_area":{icon:"fas-swimmer",fields:["name","access_simple","supervised","fee","payment_multi_fee","charge_fee","lit"],moreFields:["opening_hours","operator"],geometry:["area"],terms:["dive","water","aquatics"],tags:{leisure:"swimming_area"},name:"Natural Swimming Area"},"leisure/swimming_pool":{icon:"fas-swimming-pool",fields:["name","access_simple","lit","location_pool","length","swimming_pool"],moreFields:["address","level","gnis/feature_id","opening_hours","operator"],geometry:["area","point"],terms:["dive","water","aquatics"],tags:{leisure:"swimming_pool"},name:"Swimming Pool"},"leisure/track":{icon:"iD-other-line",fields:["surface","sport_racing_nonmotor","lit","width","lanes"],moreFields:["access","covered","gnis/feature_id","indoor","level"],geometry:["line","point","area"],tags:{leisure:"track"},terms:["cycle","dog","greyhound","horse","race*","track"],name:"Racetrack (Non-Motorsport)"},"leisure/track/cycling_point":{icon:"fas-biking",fields:["{leisure/track/cycling}"],geometry:["point"],tags:{leisure:"track",sport:"cycling"},terms:["bicycle track","bicycling track","cycle racetrack","velodrome"],name:"Cycling Track"},"leisure/track/cycling":{icon:"fas-biking",fields:["name","surface","sport_racing_nonmotor","lit","width","lanes"],geometry:["line","area"],tags:{leisure:"track",sport:"cycling"},terms:["bicycle track","bicycling track","cycle racetrack","velodrome"],name:"Cycling Track"},"leisure/track/horse_racing_point":{icon:"maki-horse-riding",fields:["{leisure/track/horse_racing}"],geometry:["point"],tags:{leisure:"track",sport:"horse_racing"},terms:["equestrian race track","horse race betting","horseracing","horsetrack","horse racetrack"],name:"Horse Racing Track"},"leisure/track/horse_racing":{icon:"maki-horse-riding",fields:["name","surface","sport_racing_nonmotor","lit","width","lanes"],geometry:["line","area"],tags:{leisure:"track",sport:"horse_racing"},terms:["equestrian race track","horse race betting","horseracing","horsetrack","horse racetrack"],name:"Horse Racing Track"},"leisure/track/running_point":{icon:"maki-pitch",fields:["{leisure/track/running}"],geometry:["point"],tags:{leisure:"track",sport:"running"},terms:["athletics track","decathlon","foot race","long distance running","marathon","middle distance running","racetrack","running","sprint","track","walking"],name:"Running Track"},"leisure/track/running":{icon:"maki-pitch",fields:["name","surface","sport_racing_nonmotor","lit","width","lanes"],geometry:["line","area"],tags:{leisure:"track",sport:"running"},terms:["athletics track","decathlon","foot race","long distance running","marathon","middle distance running","racetrack","running","sprint","track","walking"],name:"Running Track"},"leisure/water_park":{icon:"fas-swimmer",fields:["name","operator","address"],moreFields:["brand","email","fax","gnis/feature_id","payment_multi","phone","website"],geometry:["area","point"],terms:["swim","pool","dive"],tags:{leisure:"water_park"},name:"Water Park"},line:{fields:["name"],geometry:["line"],tags:{},terms:["polyline"],name:"Line",matchScore:0.1},"man_made/adit":{icon:"maki-triangle",geometry:["point","area"],fields:["name","operator","resource","direction"],moreFields:["gnis/feature_id"],terms:["cave","horizontal mine entrance","tunnel","underground"],tags:{man_made:"adit"},name:"Adit"},"man_made/antenna":{icon:"temaki-antenna",fields:["communication_multi","operator","manufacturer","height"],geometry:["point"],terms:["broadcast","cell phone","cell","communication","mobile phone","radio","television","transmission","tv"],tags:{man_made:"antenna"},name:"Antenna"},"man_made/beacon":{icon:"maki-communications-tower",fields:["name","height"],moreFields:["seamark/type"],geometry:["point","area"],tags:{man_made:"beacon"},name:"Beacon",matchScore:0.5},"man_made/beehive":{icon:"fas-archive",geometry:["point","area"],fields:["ref","operator","seasonal","height","colour"],moreFields:["manufacturer"],terms:["apiary","beekeeper","farm","honey","pollination"],tags:{man_made:"beehive"},name:"Beehive"},"man_made/breakwater":{fields:["material","seamark/type"],geometry:["line","area"],tags:{man_made:"breakwater"},name:"Breakwater"},"man_made/bridge":{icon:"maki-bridge",fields:["name","bridge","layer","maxweight"],moreFields:["gnis/feature_id","manufacturer","material","seamark/type"],geometry:["area"],tags:{man_made:"bridge"},addTags:{man_made:"bridge",layer:"1"},removeTags:{man_made:"bridge",layer:"*"},reference:{key:"man_made",value:"bridge"},name:"Bridge Area",matchScore:0.85},"man_made/bunker_silo":{icon:"temaki-silo",fields:["content"],moreFields:["gnis/feature_id"],geometry:["point","area"],terms:["Silage","Storage"],tags:{man_made:"bunker_silo"},name:"Bunker Silo"},"man_made/cairn":{icon:"temaki-cairn",geometry:["point","area"],terms:["rock pile","stone stack","stone pile","càrn"],tags:{man_made:"cairn"},name:"Cairn"},"man_made/chimney":{icon:"temaki-chimney",fields:["operator","material","height"],geometry:["point","area"],tags:{man_made:"chimney"},name:"Chimney"},"man_made/clearcut":{icon:"maki-logging",geometry:["area"],tags:{man_made:"clearcut"},terms:["cut","forest","lumber","tree","wood"],name:"Clearcut Forest"},"man_made/crane":{icon:"temaki-crane",fields:["operator","manufacturer","height","crane/type"],geometry:["point","line","vertex","area"],tags:{man_made:"crane"},name:"Crane"},"man_made/cross":{icon:"maki-religious-christian",fields:["name","material","height","elevation","inscription","direction"],geometry:["point","vertex"],tags:{man_made:"cross"},name:"Summit Cross"},"man_made/cutline":{icon:"maki-logging",geometry:["line"],tags:{man_made:"cutline"},name:"Cut line"},"man_made/dyke":{geometry:["line"],tags:{man_made:"dyke"},terms:["Dike","Dyke","Floodbank","Stopbank"],name:"Levee"},"man_made/embankment":{geometry:["line"],tags:{man_made:"embankment"},name:"Embankment"},"man_made/flagpole":{icon:"maki-embassy",fields:["operator","flag/type","country_flag","lit","height"],moreFields:["manufacturer","material"],geometry:["point","vertex"],tags:{man_made:"flagpole"},name:"Flagpole"},"man_made/gasometer":{icon:"temaki-storage_tank",fields:["content","building_area"],geometry:["point","area"],terms:["gas holder"],tags:{man_made:"gasometer"},name:"Gasometer"},"man_made/groyne":{fields:["material","seamark/type"],geometry:["line","area"],tags:{man_made:"groyne"},name:"Groyne"},"man_made/lighthouse":{icon:"maki-lighthouse",fields:["name","operator","building_area","height"],moreFields:["address","email","fax","gnis/feature_id","phone","seamark/type","website"],geometry:["point","area"],tags:{man_made:"lighthouse"},addTags:{man_made:"lighthouse","seamark:type":"light_major"},removeTags:{man_made:"lighthouse","seamark:type":"*"},name:"Lighthouse"},"man_made/manhole":{icon:"temaki-manhole",fields:["manhole","operator","label","ref"],geometry:["point","vertex"],tags:{manhole:"*"},addTags:{man_made:"manhole",manhole:"*"},terms:["cover","hole","sewer","sewage","telecom"],name:"Manhole"},"man_made/manhole/drain":{icon:"temaki-manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"drain"},addTags:{man_made:"manhole",manhole:"drain"},terms:["cover","drain","hole","rain","sewer","sewage","storm"],name:"Storm Drain"},"man_made/manhole/gas":{icon:"temaki-gas_manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"gas"},addTags:{man_made:"manhole",manhole:"gas"},terms:["cover","gas","heat","hole","utility"],name:"Gas Utility Manhole"},"man_made/manhole/power":{icon:"temaki-power_manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"power"},addTags:{man_made:"manhole",manhole:"power"},terms:["cover","hole","electric","hole","power","utility"],name:"Power Utility Manhole"},"man_made/manhole/sewer":{icon:"temaki-waste_manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"sewer"},addTags:{man_made:"manhole",manhole:"sewer"},terms:["cover","drain","hole","sewer","sewage","utility"],name:"Sewer Utility Manhole"},"man_made/manhole/telecom":{icon:"temaki-cable_manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"telecom"},addTags:{man_made:"manhole",manhole:"telecom"},terms:["bt","cable","cover","phone","hole","telecom","telephone","utility"],name:"Telecom Utility Manhole"},"man_made/manhole/water":{icon:"temaki-waste_manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"water"},addTags:{man_made:"manhole",manhole:"water"},terms:["cover","drinking","hole","utility","water"],name:"Water Utility Manhole"},"man_made/mast":{icon:"temaki-mast",fields:["tower/type","tower/construction","height"],moreFields:["communication_multi","gnis/feature_id","manufacturer","material"],geometry:["point"],terms:["antenna","broadcast tower","cell phone tower","cell tower","communication mast","communication tower","guyed tower","mobile phone tower","radio mast","radio tower","television tower","transmission mast","transmission tower","tv tower"],tags:{man_made:"mast"},name:"Mast"},"man_made/mast/communication":{icon:"temaki-mast_communication",fields:["{man_made/mast}","communication_multi"],geometry:["point"],terms:["antenna","broadcast tower","cell phone tower","cell tower","communication mast","communication tower","guyed tower","mobile phone tower","radio mast","radio tower","television tower","transmission mast","transmission tower","tv tower"],tags:{man_made:"mast","tower:type":"communication"},reference:{key:"tower:type",value:"communication"},name:"Communication Mast"},"man_made/mast/communication/mobile_phone":{icon:"temaki-mast_communication",geometry:["point"],terms:["antenna","cell mast","cell phone mast","cell phone tower","cell tower","communication mast","communication tower","guyed tower","mobile phone tower","transmission mast","transmission tower"],tags:{man_made:"mast","tower:type":"communication","communication:mobile_phone":"yes"},reference:{key:"communication:mobile_phone",value:"yes"},name:"Mobile Phone Mast"},"man_made/mast/communication/radio":{icon:"temaki-mast_communication",geometry:["point"],terms:["antenna","broadcast tower","communication mast","communication tower","guyed tower","radio mast","radio tower","transmission mast","transmission tower"],tags:{man_made:"mast","tower:type":"communication","communication:radio":"yes"},reference:{key:"communication:radio",value:"yes"},name:"Radio Broadcast Mast"},"man_made/mast/communication/television":{icon:"temaki-mast_communication",geometry:["point"],terms:["antenna","broadcast tower","communication mast","communication tower","guyed tower","television mast","television tower","transmission mast","transmission tower","tv mast","tv tower"],tags:{man_made:"mast","tower:type":"communication","communication:television":"yes"},reference:{key:"communication:television",value:"yes"},name:"Television Broadcast Mast"},"man_made/mineshaft":{icon:"maki-triangle",geometry:["point","area"],fields:["name","operator","resource"],moreFields:["gnis/feature_id"],terms:["cave","mine shaft","tunnel","underground","vertical mine entrance"],tags:{man_made:"mineshaft"},name:"Mineshaft"},"man_made/monitoring_station":{icon:"temaki-antenna",geometry:["point","vertex","area"],fields:["monitoring_multi","operator","manufacturer"],terms:["weather","earthquake","seismology","air","gps"],tags:{man_made:"monitoring_station"},name:"Monitoring Station"},"man_made/obelisk":{icon:"maki-monument",fields:["name","inscription","height","material","colour"],geometry:["point","vertex","area"],tags:{man_made:"obelisk"},name:"Obelisk"},"man_made/observatory":{fields:["name","operator","address","access_simple","building_area"],moreFields:["email","fax","gnis/feature_id","phone","website"],geometry:["point","area"],terms:["astronomical","meteorological"],tags:{man_made:"observatory"},name:"Observatory"},"man_made/petroleum_well":{icon:"temaki-oil_well",fields:["name","ref","operator","substance"],moreFields:["gnis/feature_id"],geometry:["point"],terms:["drilling rig","oil derrick","oil drill","oil horse","oil rig","oil pump","petroleum well","pumpjack"],tags:{man_made:"petroleum_well"},name:"Oil Well"},"man_made/pier":{icon:"temaki-pier_fixed",fields:["name","surface","floating","width","access","lit"],moreFields:["{highway/footway}","access","fishing","gnis/feature_id","incline"],geometry:["line","area"],terms:["berth","dock","jetty","landing","promenade","wharf"],tags:{man_made:"pier"},name:"Pier"},"man_made/pier/floating":{icon:"temaki-pier_floating",geometry:["line","area"],terms:["berth","dock","jetty","landing","promenade","wharf"],tags:{man_made:"pier",floating:"yes"},name:"Floating Pier"},"man_made/pipeline":{icon:"iD-pipeline-line",fields:["operator","location","substance","layer","diameter"],geometry:["line"],terms:["oil","natural gas","water","sewer","sewage"],tags:{man_made:"pipeline"},name:"Pipeline"},"man_made/pipeline/underground":{icon:"iD-pipeline-line",geometry:["line"],terms:["oil","natural gas","water","sewer","sewage"],tags:{man_made:"pipeline",location:"underground"},addTags:{man_made:"pipeline",location:"underground",layer:"-1"},name:"Underground Pipeline"},"man_made/pipeline/valve":{icon:"temaki-wheel",geometry:["vertex"],fields:["ref","operator","valve","location","diameter"],moreFields:["colour","manufacturer","material"],terms:["oil","natural gas","water","sewer","sewage"],tags:{pipeline:"valve"},name:"Pipeline Valve"},"man_made/pumping_station":{icon:"maki-water",geometry:["point","area"],moreFields:["gnis/feature_id"],tags:{man_made:"pumping_station"},name:"Pumping Station"},"man_made/silo":{icon:"temaki-silo",fields:["crop","building_area"],moreFields:["gnis/feature_id"],geometry:["point","area"],terms:["grain","corn","wheat"],tags:{man_made:"silo"},name:"Silo"},"man_made/storage_tank":{icon:"temaki-storage_tank",fields:["content","operator","material","building_area","height","capacity"],moreFields:["layer","location","manufacturer"],geometry:["area","point"],terms:["water","oil","gas","petrol"],tags:{man_made:"storage_tank"},name:"Storage Tank"},"man_made/storage_tank/water":{icon:"temaki-storage_tank",geometry:["point","area"],terms:["cistern","water tower"],tags:{man_made:"storage_tank",content:"water"},name:"Water Tank"},"man_made/street_cabinet":{icon:"fas-door-closed",geometry:["point","area"],fields:["ref","operator","street_cabinet","utility_semi","height","colour"],terms:["cable tv","monitoring box","technical box","telecommunications","traffic signal controls"],tags:{man_made:"street_cabinet"},name:"Street Cabinet"},"man_made/surveillance":{icon:"temaki-security_camera",geometry:["point","vertex"],fields:["surveillance","surveillance/type","surveillance/zone","direction"],terms:["anpr","alpr","camera","car plate recognition","cctv","guard","license plate recognition","monitoring","number plate recognition","security","video","webcam"],tags:{man_made:"surveillance"},name:"Surveillance"},"man_made/surveillance/camera":{icon:"temaki-security_camera",geometry:["point","vertex"],fields:["surveillance","surveillance/type","camera/type","camera/mount","camera/direction","surveillance/zone","contact/webcam"],moreFields:["manufacturer"],terms:["anpr","alpr","camera","car plate recognition","cctv","guard","license plate recognition","monitoring","number plate recognition","security","video","webcam"],tags:{man_made:"surveillance","surveillance:type":"camera"},name:"Surveillance Camera"},"man_made/survey_point":{icon:"maki-monument",fields:["ref"],geometry:["point","vertex"],terms:["trig point","triangulation pillar","trigonometrical station"],tags:{man_made:"survey_point"},name:"Survey Point"},"man_made/torii":{icon:"temaki-shinto",fields:["height","material","colour","lit"],moreFields:["name","operator","ref"],geometry:["point","vertex","line"],terms:["Japanese gate","Shinto shrine"],tags:{man_made:"torii"},name:"Torii"},"man_made/tower":{icon:"temaki-tower",fields:["tower/type","tower/construction","height","building_area"],moreFields:["architect","gnis/feature_id"],geometry:["point","area"],tags:{man_made:"tower"},name:"Tower"},"man_made/tower/bell_tower":{icon:"fas-bell",moreFields:["{man_made/tower}","opening_hours"],geometry:["point","area"],terms:["belfry","bell gable","campanile","church tower","klockstapel"],tags:{man_made:"tower","tower:type":"bell_tower"},reference:{key:"tower:type",value:"bell_tower"},name:"Bell Tower"},"man_made/tower/communication":{icon:"temaki-tower_communication",fields:["{man_made/tower}","communication_multi"],geometry:["point","area"],terms:["antenna","broadcast tower","cell phone tower","cell tower","communication mast","communication tower","guyed tower","mobile phone tower","radio mast","radio tower","television tower","transmission mast","transmission tower","tv tower"],tags:{man_made:"tower","tower:type":"communication"},reference:{key:"tower:type",value:"communication"},name:"Communication Tower"},"man_made/tower/defensive":{icon:"maki-castle",geometry:["point","area"],tags:{man_made:"tower","tower:type":"defensive"},reference:{key:"tower:type",value:"defensive"},terms:["Defensive Tower","Castle Tower"],name:"Fortified Tower"},"man_made/tower/minaret":{icon:"temaki-domed_tower",geometry:["point","area"],terms:["Islam","mosque","Muezzin","Muslim"],tags:{man_made:"tower","tower:type":"minaret"},reference:{key:"tower:type",value:"minaret"},name:"Minaret"},"man_made/tower/observation":{icon:"temaki-tower",moreFields:["{man_made/tower}","opening_hours"],geometry:["point","area"],terms:["lookout tower","fire tower"],tags:{man_made:"tower","tower:type":"observation"},reference:{key:"tower:type",value:"observation"},name:"Observation Tower"},"man_made/tunnel":{icon:"temaki-tunnel",fields:["name","tunnel","layer","width","length","height"],moreFields:["gnis/feature_id"],geometry:["area"],tags:{man_made:"tunnel"},addTags:{man_made:"tunnel",layer:"-1"},removeTags:{man_made:"tunnel",layer:"*"},reference:{key:"man_made",value:"tunnel"},terms:["bore","dig","shaft","underground passage","underpass"],name:"Tunnel Area"},"man_made/utility_pole":{icon:"temaki-utility_pole",fields:["ref","operator","utility_semi","height","material"],moreFields:["colour","manufacturer"],geometry:["point","vertex"],tags:{man_made:"utility_pole"},name:"Utility Pole"},"man_made/wastewater_plant":{icon:"temaki-waste",fields:["name","operator","address"],moreFields:["email","fax","gnis/feature_id","phone","website"],geometry:["point","area"],terms:["sewage*","water treatment plant","reclamation plant"],tags:{man_made:"wastewater_plant"},name:"Wastewater Plant"},"man_made/water_tap":{icon:"temaki-water_tap",fields:["ref","operator","drinking_water","access_simple"],geometry:["point","vertex"],tags:{man_made:"water_tap"},terms:["drinking water","water faucet","water point","water source","water spigot"],name:"Water Tap"},"man_made/water_tower":{icon:"temaki-water_tower",fields:["operator","height"],moreFields:["gnis/feature_id"],geometry:["area","point"],tags:{man_made:"water_tower"},name:"Water Tower"},"man_made/water_well":{icon:"temaki-well_pump_manual",fields:["ref","operator","drinking_water","pump","access_simple"],moreFields:["gnis/feature_id"],geometry:["point","area"],tags:{man_made:"water_well"},terms:["aquifer","drinking water","water pump","water point","water source"],name:"Water Well"},"man_made/water_works":{icon:"maki-water",fields:["name","operator","address"],moreFields:["gnis/feature_id"],geometry:["point","area"],tags:{man_made:"water_works"},name:"Water Works"},"man_made/watermill":{icon:"maki-watermill",fields:["building_area"],moreFields:["gnis/feature_id"],geometry:["point","area"],terms:["water","wheel","mill"],tags:{man_made:"watermill"},name:"Watermill"},"man_made/windmill":{icon:"maki-windmill",fields:["building_area"],moreFields:["gnis/feature_id"],geometry:["point","area"],terms:["wind","wheel","mill"],tags:{man_made:"windmill"},name:"Windmill"},"man_made/works":{icon:"maki-industry",fields:["name","operator","address","building_area","product"],moreFields:["email","fax","gnis/feature_id","phone","website"],geometry:["point","area"],terms:["assembly","build","brewery","car","plant","plastic","processing","manufacture","refinery"],tags:{man_made:"works"},name:"Factory"},marker:{icon:"temaki-silo",fields:["ref","operator","marker","utility","inscription","colour"],moreFields:["height","location","manufacturer","material"],geometry:["point"],terms:["identifier","marking","plate","pole","post","sign"],tags:{marker:"*"},name:"Marker"},"marker/utility":{icon:"temaki-silo",fields:["ref","operator","marker","utility","{marker}"],geometry:["point"],terms:["gas line marker","identifier","marking","oil marker","pipline marker","plate","pole","post","sign"],tags:{marker:"*",utility:"*"},name:"Utility Marker"},"marker/utility/power":{icon:"temaki-silo",fields:["ref","operator","marker","{marker}"],geometry:["point"],terms:["electric line","identifier","marking","plate","pole","post","power cable","power line","sign"],tags:{marker:"*",utility:"power"},name:"Power Marker"},"military/bunker":{icon:"temaki-bunker",fields:["name","bunker_type","building_area"],moreFields:["gnis/feature_id"],geometry:["point","area"],tags:{military:"bunker"},addTags:{building:"bunker",military:"bunker"},terms:["air force","army","base","fight","force","guard","marine","navy","troop","war"],name:"Military Bunker"},"military/checkpoint":{icon:"maki-barrier",fields:["name"],geometry:["point","vertex","area"],tags:{military:"checkpoint"},terms:["air force","army","base","force","guard","marine","navy","troop","war"],name:"Checkpoint"},"military/nuclear_explosion_site":{icon:"maki-danger",fields:["name"],moreFields:["gnis/feature_id"],geometry:["point","vertex","area"],tags:{military:"nuclear_explosion_site"},terms:["atom","blast","bomb","detonat*","nuke","site","test"],name:"Nuclear Explosion Site"},"military/office":{icon:"temaki-military",fields:["name","building_area"],moreFields:["gnis/feature_id","level"],geometry:["point","area"],tags:{military:"office"},terms:["air force","army","base","enlist","fight","force","guard","marine","navy","recruit","troop","war"],name:"Military Office"},"military/trench":{icon:"temaki-military",fields:["name","trench"],geometry:["point","line"],tags:{military:"trench"},terms:["dugout","firestep","fox hole","infantry trench","war trench"],name:"Military Trench"},"natural/bare_rock":{geometry:["area"],tags:{natural:"bare_rock"},terms:["rock"],name:"Bare Rock"},"natural/bay":{icon:"temaki-beach",geometry:["point","line","area"],fields:["name"],tags:{natural:"bay"},terms:[],name:"Bay"},"natural/beach":{icon:"temaki-beach",fields:["surface"],geometry:["point","area"],tags:{natural:"beach"},terms:["shore"],name:"Beach"},"natural/cape":{icon:"temaki-beach",fields:["name","elevation","description"],geometry:["point","vertex"],tags:{natural:"cape"},terms:["bay","coastline","erosion","headland","promontory"],name:"Cape"},"natural/cave_entrance":{icon:"maki-triangle",geometry:["point","area"],fields:["name","elevation","access_simple","direction","fee","payment_multi_fee","charge_fee"],tags:{natural:"cave_entrance"},terms:["cavern","hollow","grotto","shelter","cavity"],name:"Cave Entrance"},"natural/cliff":{icon:"maki-triangle",fields:["name","height"],geometry:["point","vertex","line","area"],tags:{natural:"cliff"},terms:["crag","escarpment","rock face","scarp"],name:"Cliff"},"natural/coastline":{icon:"temaki-beach",geometry:["line"],tags:{natural:"coastline"},terms:["shore"],name:"Coastline"},"natural/fell":{geometry:["area"],tags:{natural:"fell"},terms:[],name:"Fell"},"natural/geyser":{icon:"maki-water",fields:["name","geyser/height","elevation"],geometry:["point"],tags:{natural:"geyser"},terms:["erupting spring","geiser","gieser","guyser","hot water","hydrogeology","hydrothermal explosion","steam"],name:"Geyser"},"natural/glacier":{icon:"temaki-snow",geometry:["area"],tags:{natural:"glacier"},terms:["ice","snow"],name:"Glacier"},"natural/grassland":{icon:"temaki-grass",geometry:["area"],tags:{natural:"grassland"},terms:["field","prairie","savanna"],name:"Grassland"},"natural/heath":{geometry:["area"],tags:{natural:"heath"},terms:[],name:"Heath"},"natural/mud":{geometry:["area"],tags:{natural:"mud"},terms:["wetland"],name:"Mud"},"natural/peak":{icon:"maki-mountain",fields:["name","elevation"],geometry:["point","vertex"],tags:{natural:"peak"},terms:["acme","aiguille","alp","climax","crest","crown","hill","mount","mountain","pinnacle","summit","tip","top"],name:"Peak"},"natural/reef":{icon:"temaki-beach",geometry:["area","point"],tags:{natural:"reef"},terms:["barrier","coral","ocean","sand","shoal"],name:"Reef"},"natural/ridge":{geometry:["line"],tags:{natural:"ridge"},terms:["crest"],name:"Ridge"},"natural/rock":{icon:"temaki-boulder2",fields:["name"],geometry:["point","area"],tags:{natural:"rock"},terms:["boulder","stone","rock"],name:"Attached Rock / Boulder"},"natural/saddle":{icon:"maki-triangle-stroked",fields:["elevation"],geometry:["point","vertex"],tags:{natural:"saddle"},terms:["pass","mountain pass","top"],name:"Saddle"},"natural/sand":{geometry:["area"],tags:{natural:"sand"},terms:["desert"],name:"Sand"},"natural/scree":{geometry:["area"],tags:{natural:"scree"},terms:["loose rocks"],name:"Scree"},"natural/scrub":{geometry:["area"],tags:{natural:"scrub"},terms:["bush","shrubs"],name:"Scrub"},"natural/shingle":{geometry:["area"],tags:{natural:"shingle"},terms:["beach","gravel","pebbles","riverbed","rounded rock fragments"],name:"Shingle"},"natural/spring":{icon:"maki-water",fields:["name","drinking_water","intermittent"],geometry:["point","vertex"],tags:{natural:"spring"},terms:["aquifer","hydro","seep","water source"],name:"Spring"},"natural/stone":{icon:"temaki-boulder1",fields:["name"],geometry:["point","area"],tags:{natural:"stone"},terms:["boulder","stone","rock"],name:"Unattached Stone / Boulder"},"natural/tree_row":{icon:"temaki-tree_row",fields:["leaf_type","leaf_cycle","denotation"],geometry:["line"],tags:{natural:"tree_row"},terms:[],name:"Tree Row"},"natural/tree":{icon:"maki-park",fields:["leaf_type_singular","leaf_cycle_singular","denotation","diameter"],moreFields:["species/wikidata"],geometry:["point","vertex"],tags:{natural:"tree"},terms:[],name:"Tree"},"natural/valley":{icon:"maki-triangle-stroked",fields:["name","elevation","description"],geometry:["vertex","point","line"],tags:{natural:"valley"},terms:["canyon","dale","dell","dene","depression","glen","gorge","gully","gulley","gultch","hollow","ravine","rift","vale"],name:"Valley"},"natural/volcano":{icon:"maki-volcano",fields:["name","elevation","volcano/status","volcano/type"],geometry:["point","vertex"],tags:{natural:"volcano"},terms:["mountain","crater"],name:"Volcano"},"natural/water":{icon:"maki-water",fields:["name","water","intermittent"],moreFields:["fishing","gnis/feature_id","salt","tidal"],geometry:["area"],tags:{natural:"water"},name:"Water"},"natural/water/basin":{icon:"maki-water",fields:["name","basin","intermittent_yes"],geometry:["area"],tags:{natural:"water",water:"basin"},reference:{key:"water",value:"basin"},terms:["detention","drain","overflow","rain","retention"],name:"Basin"},"natural/water/canal":{icon:"iD-waterway-canal",fields:["{natural/water}","salt"],geometry:["area"],tags:{natural:"water",water:"canal"},reference:{key:"water",value:"canal"},name:"Canal Area"},"natural/water/lake":{icon:"maki-water",fields:["{natural/water}","salt","tidal"],geometry:["area"],tags:{natural:"water",water:"lake"},reference:{key:"water",value:"lake"},terms:["lakelet","loch","mere"],name:"Lake"},"natural/water/moat":{icon:"maki-water",fields:["{natural/water}","salt"],geometry:["area"],tags:{natural:"water",water:"moat"},name:"Moat"},"natural/water/pond":{icon:"maki-water",fields:["{natural/water}","salt"],geometry:["area"],tags:{natural:"water",water:"pond"},reference:{key:"water",value:"pond"},terms:["lakelet","millpond","tarn","pool","mere"],name:"Pond"},"natural/water/reservoir":{icon:"maki-water",geometry:["area"],tags:{natural:"water",water:"reservoir"},reference:{key:"water",value:"reservoir"},name:"Reservoir"},"natural/water/river":{icon:"iD-waterway-river",fields:["{natural/water}","tidal"],geometry:["area"],tags:{natural:"water",water:"river"},reference:{key:"water",value:"river"},terms:["beck","branch","brook","course","creek","estuary","rill","riverbank","rivulet","run","runnel","stream","tributary","watercourse"],name:"River Area"},"natural/water/stream":{icon:"iD-waterway-stream",fields:["{natural/water}"],geometry:["area"],tags:{natural:"water",water:"stream"},reference:{key:"water",value:"stream"},terms:["beck","branch","brook","burn","course","creek","current","drift","flood","flow","freshet","race","rill","rindle","rivulet","run","runnel","rush","spate","spritz","surge","tide","torrent","tributary","watercourse"],name:"Stream Area"},"natural/water/wastewater":{icon:"temaki-waste",geometry:["area"],tags:{natural:"water",water:"wastewater"},reference:{key:"water",value:"wastewater"},terms:["excrement","shit","sewage","wastewater","Settling Basin","Clarifier Basin"],name:"Wastewater Basin"},"natural/wetland":{icon:"maki-wetland",fields:["wetland","salt","tidal"],geometry:["point","area"],tags:{natural:"wetland"},terms:["bog","fen","marsh","mire","moor","muskeg","peatland","quagmire","reedbed","saltmarsh","swamp","tidalflat","wet meadow"],name:"Wetland"},"natural/wood":{icon:"maki-park-alt1",fields:["name","leaf_type","leaf_cycle"],geometry:["area","point"],tags:{natural:"wood"},terms:["boreal","forest","forrest","taiga","tree","trees","woodlands","woods"],name:"Natural Wood"},"network/type/node_network":{fields:["name","rwn_ref","expected_rwn_route_relations","rcn_ref","expected_rcn_route_relations"],geometry:["vertex"],tags:{"network:type":"node_network"},terms:["node network","rcn","rwn"],countryCodes:["be","de","lu","nl"],matchScore:0.2,name:"Recreational Network Node"},"noexit/yes":{icon:"maki-barrier",geometry:["vertex"],terms:["no exit","road end","dead end"],tags:{noexit:"yes"},reference:{key:"noexit",value:"*"},name:"No Exit"},office:{icon:"maki-suitcase",fields:["name","office","address","building_area","opening_hours"],moreFields:["air_conditioning","baby_feeding","building/levels_building","email","fax","gnis/feature_id","height_building","internet_access","internet_access/fee","internet_access/ssid","level","not/name","operator","phone","ref/vatin","smoking","website","wheelchair"],geometry:["point","vertex","area"],tags:{office:"*"},terms:[],name:"Office"},"office/administrative":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"administrative"},searchable:false,name:"Administrative Office"},"office/physician":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"physician"},searchable:false,name:"Physician"},"office/travel_agent":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"travel_agent"},reference:{key:"shop",value:"travel_agency"},name:"Travel Agency",searchable:false},"office/accountant":{icon:"temaki-accounting",geometry:["point","area"],tags:{office:"accountant"},terms:[],name:"Accountant Office"},"office/adoption_agency":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"adoption_agency"},terms:[],name:"Adoption Agency"},"office/advertising_agency":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"advertising_agency"},terms:["ad","ad agency","advert agency","advertising","marketing"],name:"Advertising Agency"},"office/architect":{icon:"fas-drafting-compass",geometry:["point","area"],tags:{office:"architect"},terms:[],name:"Architect Office"},"office/association":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"association"},terms:["association","non-profit","nonprofit","organization","society"],name:"Nonprofit Organization Office"},"office/bail_bond_agent":{icon:"maki-bank",moreFields:["{office}","currency_multi","payment_multi"],geometry:["point","area"],tags:{office:"bail_bond_agent"},terms:["bail bond dealer","bail bond man","bail bondsman","bail bondsperson"],name:"Bail Bond Agent"},"office/charity":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"charity"},terms:["charitable organization"],name:"Charity Office"},"office/company":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"company"},terms:[],name:"Corporate Office"},"office/consulting":{icon:"maki-suitcase",fields:["name","consulting","{office}"],geometry:["point","area"],tags:{office:"consulting"},terms:["consulting firm office"],name:"Consultancy Office"},"office/coworking":{icon:"maki-suitcase",fields:["{office}","internet_access"],moreFields:["internet_access/fee","internet_access/ssid"],geometry:["point","area"],terms:["coworking","office"],tags:{office:"coworking"},reference:{key:"amenity",value:"coworking_space"},name:"Coworking Space"},"office/diplomatic":{icon:"temaki-embassy",fields:["name","diplomatic","country","target","diplomatic/services","{office}"],geometry:["point","area"],tags:{office:"diplomatic"},terms:[],name:"Diplomatic Office"},"office/diplomatic/consulate":{icon:"temaki-embassy",fields:["name","consulate","{office/diplomatic}"],geometry:["point","area"],tags:{office:"diplomatic",diplomatic:"consulate"},reference:{key:"diplomatic",value:"consulate"},terms:[],name:"Consulate"},"office/diplomatic/embassy":{icon:"temaki-embassy",fields:["name","embassy","{office/diplomatic}"],geometry:["point","area"],tags:{office:"diplomatic",diplomatic:"embassy"},reference:{key:"diplomatic",value:"embassy"},terms:[],name:"Embassy"},"office/diplomatic/liaison":{icon:"temaki-embassy",fields:["name","liaison","{office/diplomatic}"],geometry:["point","area"],tags:{office:"diplomatic",diplomatic:"liaison"},reference:{key:"diplomatic",value:"liaison"},terms:[],name:"Liaison Office"},"office/educational_institution":{icon:"maki-school",geometry:["point","area"],tags:{office:"educational_institution"},terms:[],name:"Educational Institution"},"office/employment_agency":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"employment_agency"},terms:["job"],name:"Employment Agency"},"office/energy_supplier":{icon:"temaki-briefcase_bolt",geometry:["point","area"],tags:{office:"energy_supplier"},terms:["electricity","energy company","energy utility","gas utility"],name:"Energy Supplier Office"},"office/estate_agent":{icon:"temaki-real_estate_agency",moreFields:["brand","{office}"],geometry:["point","area"],tags:{office:"estate_agent"},terms:["real estate"],name:"Real Estate Office"},"office/financial_advisor":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"financial_advisor"},terms:["401k","inheritance","savings","stocks","retirement","wealth management"],name:"Financial Advisor"},"office/financial":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"financial"},terms:[],name:"Financial Office"},"office/forestry":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"forestry"},terms:["forest","ranger"],name:"Forestry Office"},"office/foundation":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"foundation"},terms:[],name:"Foundation Office"},"office/government":{icon:"maki-town-hall",fields:["name","government","{office}"],geometry:["point","area"],tags:{office:"government"},terms:[],name:"Government Office"},"office/government/prosecutor":{icon:"maki-suitcase",fields:["{office}","operator"],geometry:["point","area"],terms:["attorney general","district attorney","prosecution"],tags:{office:"government",government:"prosecutor"},reference:{key:"government",value:"prosecutor"},name:"Public Prosecutor's Office"},"office/government/register_office":{icon:"maki-town-hall",fields:["{office}","operator"],geometry:["point","area"],terms:["clerk","marriage","death","birth","certificate"],tags:{office:"government",government:"register_office"},reference:{key:"government",value:"register_office"},name:"Register Office"},"office/government/tax":{icon:"maki-town-hall",fields:["{office}","operator"],geometry:["point","area"],terms:["fiscal authorities","revenue office","tax office"],tags:{office:"government",government:"tax"},reference:{key:"government",value:"tax"},name:"Tax and Revenue Office"},"office/guide":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"guide"},terms:["dive guide","mountain guide","tour guide"],name:"Tour Guide Office"},"office/insurance":{icon:"temaki-briefcase_shield",moreFields:["brand","{office}"],geometry:["point","area"],tags:{office:"insurance"},terms:[],name:"Insurance Office"},"office/it":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"it"},terms:["computer","information","software","technology"],name:"Information Technology Office"},"office/lawyer":{icon:"fas-balance-scale",geometry:["point","area"],tags:{office:"lawyer"},terms:["advocate","attorney","barrister","counsellor","counselor","defender","lawyer","legal","prosecutor"],name:"Law Office"},"office/lawyer/notary":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"lawyer",lawyer:"notary"},reference:{key:"office",value:"notary"},searchable:false,name:"Notary Office"},"office/moving_company":{icon:"fas-people-carry",geometry:["point","area"],tags:{office:"moving_company"},terms:["relocation"],name:"Moving Company Office"},"office/newspaper":{icon:"fas-newspaper",geometry:["point","area"],tags:{office:"newspaper"},terms:[],name:"Newspaper Office"},"office/ngo":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"ngo"},terms:["ngo","non government","non-government","organization","organisation"],name:"NGO Office"},"office/notary":{icon:"fas-stamp",geometry:["point","area"],tags:{office:"notary"},terms:["clerk","deeds","estate","signature","wills"],name:"Notary Office"},"office/political_party":{icon:"maki-town-hall",geometry:["point","area"],tags:{office:"political_party"},terms:[],name:"Political Party Office"},"office/private_investigator":{icon:"fas-user-secret",geometry:["point","area"],tags:{office:"private_investigator"},terms:["PI","private eye","private detective"],name:"Private Investigator Office"},"office/quango":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"quango"},terms:["ngo","non government","non-government","organization","organisation","quasi autonomous","quasi-autonomous"],name:"Quasi-NGO Office"},"office/religion":{icon:"maki-suitcase",fields:["{office}","religion","denomination"],geometry:["point","area"],tags:{office:"religion"},terms:[],name:"Religious Office"},"office/research":{icon:"fas-flask",geometry:["point","area"],tags:{office:"research"},terms:["R and D","research and development","research lab"],name:"Research Office"},"office/surveyor":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"surveyor"},terms:[],name:"Surveyor Office"},"office/tax_advisor":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"tax_advisor"},terms:["tax","tax consultant"],name:"Tax Advisor Office"},"office/telecommunication":{icon:"maki-telephone",geometry:["point","area"],tags:{office:"telecommunication"},terms:["communication","internet service provider","isp","network","telephone","voice"],name:"Telecom Office"},"office/therapist":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"therapist"},terms:["therapy"],name:"Therapist Office"},"office/water_utility":{icon:"maki-suitcase",fields:["{office}","operator"],geometry:["point","area"],tags:{office:"water_utility"},terms:["water board","utility"],name:"Water Utility Office"},"piste/downhill":{icon:"fas-skiing",fields:["name","piste/type","piste/difficulty_downhill","piste/grooming_downhill","oneway","lit"],geometry:["line","area"],tags:{"piste:type":"downhill"},terms:["alpine skiing","piste","ski hill","skiing","snowboarding"],name:"Downhill Ski Run"},"piste/downhill/halfpipe":{icon:"fas-snowboarding",geometry:["line","area"],tags:{"piste:type":"downhill",man_made:"piste:halfpipe"},reference:{key:"man_made",value:"piste:halfpipe"},terms:["ski","alpine","halfpipe","half pipe","snowboard","downhill","piste"],name:"Snowsports Half-Pipe"},"piste/hike":{icon:"temaki-snow_shoeing",fields:["name","piste/type","piste/difficulty","piste/grooming_hike","oneway","lit"],geometry:["line","area"],tags:{"piste:type":"hike"},terms:["hike","nordic walking","piste","show shoeing","snowshoe","snowshoeing"],name:"Snowshoeing / Winter Hiking Trail"},"piste/ice_skate":{icon:"fas-skating",fields:["name","piste/type","sport_ice","oneway","lit"],geometry:["line","area"],tags:{"piste:type":"ice_skate"},terms:["ice rink","ice track","iceskating","piste","skates"],name:"Ice Skating Trail"},"piste/nordic":{icon:"fas-skiing-nordic",fields:["name","piste/type","piste/difficulty_nordic","piste/grooming_nordic","oneway","lit"],geometry:["line","area"],tags:{"piste:type":"nordic"},terms:["crosscountry","nordic skiing","piste","skate skiing","skiing","xc"],name:"Cross-Country Ski Trail"},"piste/piste":{icon:"fas-skiing",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],tags:{"piste:type":"*"},terms:["ski","nordic","crosscountry","downhill","alpine","snowboard","skitour","ski touring","sled","luge","sleigh","sledge","ski-joring","husky","horse","winter hiking","snowshoe","snowshoeing","ice","skating"],name:"Snowsports Trail / Piste"},"piste/skitour":{icon:"fas-skiing-nordic",fields:["name","piste/type","piste/difficulty_skitour","piste/grooming","oneway","lit"],geometry:["line","area"],tags:{"piste:type":"skitour"},terms:["ski","skitour","crosscountry","ski touring","piste"],name:"Ski Touring Trail"},"piste/sled":{icon:"temaki-sledding",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],tags:{"piste:type":"sled"},terms:["bobsled","luge","piste","skeleton","sledge","sleigh","toboggan"],name:"Sled Run"},"piste/sleigh":{icon:"fas-sleigh",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],tags:{"piste:type":"sleigh"},terms:["dogsledding","husky","horse","piste","sled","sledge","ski-joring","skijoring"],name:"Sleigh Trail"},"place/farm":{icon:"maki-farm",geometry:["point","area"],tags:{place:"farm"},name:"Farm",searchable:false},"place/city_block":{icon:"maki-triangle-stroked",moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"city_block"},name:"City Block"},"place/city":{icon:"maki-city",fields:["name","population"],moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"city"},name:"City"},"place/hamlet":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"hamlet"},name:"Hamlet"},"place/island":{icon:"temaki-island_trees_building",geometry:["point","area"],terms:["archipelago","atoll","bar","cay","isle","islet","key","reef"],tags:{place:"island"},name:"Island"},"place/islet":{icon:"temaki-islet_tree",geometry:["point","area"],terms:["archipelago","atoll","bar","cay","isle","islet","key","reef"],tags:{place:"islet"},name:"Islet"},"place/isolated_dwelling":{icon:"maki-home",geometry:["point","area"],tags:{place:"isolated_dwelling"},name:"Isolated Dwelling"},"place/locality":{icon:"maki-triangle-stroked",moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"locality"},name:"Locality"},"place/neighbourhood":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["gnis/feature_id","website"],geometry:["point","area"],tags:{place:"neighbourhood"},terms:["neighbourhood"],name:"Neighborhood"},"place/plot":{icon:"maki-triangle-stroked",geometry:["point","area"],tags:{place:"plot"},terms:["tract","land","lot","parcel"],name:"Plot"},"place/quarter":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"quarter"},terms:["boro","borough","quarter"],name:"Sub-Borough / Quarter"},"place/square":{icon:"temaki-pedestrian",moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"square"},name:"Square"},"place/suburb":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"suburb"},terms:["boro","borough","quarter"],name:"Borough / Suburb"},"place/town":{icon:"maki-town",fields:["name","population"],moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"town"},name:"Town"},"place/village":{icon:"maki-village",fields:["name","population"],moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"village"},name:"Village"},"playground/balance_beam":{icon:"maki-playground",geometry:["point","line"],tags:{playground:"balancebeam"},name:"Play Balance Beam"},"playground/basket_spinner":{icon:"maki-playground",geometry:["point"],terms:["basket rotator"],tags:{playground:"basketrotator"},name:"Basket Spinner"},"playground/basket_swing":{icon:"maki-playground",geometry:["point"],tags:{playground:"basketswing"},name:"Basket Swing"},"playground/climbing_frame":{icon:"maki-playground",geometry:["point","area"],tags:{playground:"climbingframe"},name:"Climbing Frame"},"playground/cushion":{icon:"maki-playground",geometry:["point","area"],tags:{playground:"cushion"},name:"Bouncy Cushion"},"playground/horizontal_bar":{icon:"maki-pitch",geometry:["point"],terms:["chin-up bar","high bar","pull-up bar"],tags:{playground:"horizontal_bar"},name:"Play Horizontal Bar"},"playground/rocker":{icon:"maki-playground",geometry:["point"],tags:{playground:"springy"},name:"Spring Rider",terms:["spring rocker","springy rocker"]},"playground/roundabout":{icon:"maki-stadium",fields:["{playground}","bench"],geometry:["point","area"],tags:{playground:"roundabout"},name:"Play Roundabout",terms:["merry-go-round"]},"playground/sandpit":{icon:"maki-playground",geometry:["point","area"],tags:{playground:"sandpit"},terms:["sandbox"],name:"Sandpit"},"playground/seesaw":{icon:"maki-playground",geometry:["point"],tags:{playground:"seesaw"},name:"Seesaw"},"playground/slide":{icon:"temaki-slide",geometry:["point","line"],tags:{playground:"slide"},name:"Slide"},"playground/structure":{icon:"temaki-play_structure",geometry:["point","area"],tags:{playground:"structure"},terms:["jungle gym"],name:"Play Structure"},"playground/swing":{icon:"maki-playground",fields:["capacity","baby_seat","wheelchair","blind"],geometry:["point"],tags:{playground:"swing"},name:"Swing"},"playground/zipwire":{icon:"maki-playground",geometry:["point","line"],tags:{playground:"zipwire"},name:"Zip Wire"},point:{fields:["name"],geometry:["vertex","point"],tags:{},terms:["node","other","vertex","vertices"],name:"Point",matchScore:0.1},polling_station:{icon:"fas-vote-yea",fields:["name","ref","operator","address","opening_hours","building_area"],moreFields:["air_conditioning","email","fax","internet_access","internet_access/fee","internet_access/ssid","level","phone","website","wheelchair"],geometry:["point","area"],terms:["ballot box","ballot drop","democracy","elections","polling place","vote","voting booth","voting machine"],tags:{polling_station:"*"},matchScore:0.75,name:"Temporary Polling Place"},"power/cable/underground":{icon:"temaki-cable",fields:["name","operator","voltage","ref","layer"],geometry:["line"],tags:{power:"cable",location:"underground"},addTags:{power:"cable",location:"underground",layer:"-1"},name:"Underground Power Cable"},"power/generator":{icon:"temaki-power",fields:["ref","operator","generator/source","generator/method","generator/type","generator/output/electricity"],moreFields:["colour","height","level","manufacturer","material"],geometry:["point","vertex","area"],terms:["hydro","solar","turbine","wind"],tags:{power:"generator"},name:"Power Generator"},"power/generator/method/photovoltaic":{icon:"fas-solar-panel",fields:["ref","operator","generator/output/electricity"],moreFields:["{power/generator}"],geometry:["area","point","vertex"],tags:{power:"generator","generator:method":"photovoltaic"},addTags:{power:"generator","generator:source":"solar","generator:method":"photovoltaic","generator:type":"solar_photovoltaic_panel","generator:output:electricity":"*"},reference:{key:"generator:method",value:"photovoltaic"},terms:["photovoltaic module","PV module","sunlight"],name:"Solar Panel"},"power/generator/source/hydro":{icon:"temaki-power",fields:["ref","operator","generator/method","generator/type","generator/output/electricity"],moreFields:["{power/generator}"],geometry:["point","vertex","area"],tags:{power:"generator","generator:source":"hydro"},addTags:{power:"generator","generator:source":"hydro","generator:output:electricity":"yes"},reference:{key:"generator:source",value:"hydro"},terms:["dam","generator","francis turbine","hydroelectricity","kaplan turbine","pelton turbine"],name:"Water Turbine"},"power/generator/source/nuclear":{icon:"temaki-radiation",fields:["ref","operator","generator/method","generator/type","generator/output/electricity"],moreFields:["{power/generator}"],geometry:["point","vertex","area"],tags:{power:"generator","generator:source":"nuclear","generator:method":"fission"},reference:{key:"generator:source",value:"nuclear"},terms:["fission","generator","nuclear","nuke","reactor"],name:"Nuclear Reactor"},"power/generator/source/wind":{icon:"temaki-wind_turbine",fields:["ref","operator","generator/type","generator/output/electricity"],moreFields:["{power/generator}"],geometry:["point","vertex","area"],tags:{power:"generator","generator:source":"wind","generator:method":"wind_turbine"},reference:{key:"generator:source",value:"wind"},terms:["generator","turbine","windmill","wind"],name:"Wind Turbine"},"power/line":{icon:"temaki-power_tower",fields:["name","operator","voltage","ref","layer"],geometry:["line"],terms:["electric power transmission line","high voltage line","high tension line"],tags:{power:"line"},name:"Power Line"},"power/minor_line":{icon:"iD-power-line",fields:["name","operator","voltage","ref","layer"],geometry:["line"],tags:{power:"minor_line"},name:"Minor Power Line"},"power/plant":{icon:"maki-industry",fields:["name","operator","address","plant/source","plant/method","plant/output/electricity","start_date"],moreFields:["gnis/feature_id"],geometry:["area"],tags:{power:"plant"},addTags:{power:"plant",landuse:"industrial"},terms:["coal","gas","generat*","hydro","nuclear","power","station"],name:"Power Station Grounds"},"power/plant/source/coal":{icon:"maki-industry",fields:["name","operator","address","plant/output/electricity","start_date"],moreFields:["{power/plant}"],geometry:["area"],tags:{power:"plant","plant:source":"coal"},addTags:{power:"plant",landuse:"industrial","plant:source":"coal","plant:method":"combustion","plant:output:electricity":"*"},reference:{key:"plant:source",value:"coal"},terms:["carbon","combustion","fossil fuel","coalfired","power station"],name:"Coal-Fired Power Plant"},"power/plant/source/gas":{icon:"temaki-gas",fields:["name","operator","address","plant/output/electricity","start_date"],moreFields:["{power/plant}"],geometry:["area"],tags:{power:"plant","plant:source":"gas"},addTags:{power:"plant",landuse:"industrial","plant:source":"gas","plant:method":"combustion","plant:output:electricity":"*"},reference:{key:"plant:source",value:"gas"},terms:["carbon","combustion","fossil fuel","gasfired","power station","natural gas"],name:"Gas-Fired Power Plant"},"power/plant/source/hydro":{icon:"maki-dam",fields:["{power/plant}"],moreFields:["{power/plant}"],geometry:["area"],tags:{power:"plant","plant:source":"hydro"},addTags:{power:"plant",landuse:"industrial","plant:source":"hydro","plant:output:electricity":"*"},reference:{key:"plant:source",value:"hydro"},terms:["dam","power plant","run-of-the-river","tidal","water turbine"],name:"Hydroelectric Power Station"},"power/plant/source/nuclear":{icon:"temaki-radiation",fields:["{power/plant}"],moreFields:["{power/plant}"],geometry:["area"],tags:{power:"plant","plant:source":"nuclear"},addTags:{power:"plant",landuse:"industrial","plant:source":"nuclear","plant:method":"fission","plant:output:electricity":"*"},reference:{key:"plant:source",value:"nuclear"},terms:["atomic","fission","power station","nuclear reactor"],name:"Nuclear Power Plant"},"power/plant/source/solar":{icon:"fas-solar-panel",fields:["{power/plant}"],moreFields:["{power/plant}"],geometry:["area"],tags:{power:"plant","plant:source":"solar"},addTags:{power:"plant","plant:source":"solar","plant:method":"photovoltaic","plant:output:electricity":"*"},removeTags:{power:"plant","plant:method":"*","plant:source":"solar","plant:output:electricity":"*",landuse:"industrial"},reference:{key:"plant:method",value:"photovoltaic"},terms:["photovoltaic power station","solar panels","solar park","utility-scale solar"],name:"Solar Farm"},"power/plant/source/wind":{icon:"temaki-wind_turbine",fields:["name","operator","address","plant/output/electricity","start_date"],moreFields:["{power/plant}"],geometry:["area"],tags:{power:"plant","plant:source":"wind"},addTags:{power:"plant","plant:source":"wind","plant:method":"wind_turbine","plant:output:electricity":"*"},removeTags:{power:"plant","plant:method":"*","plant:source":"wind","plant:output:electricity":"*",landuse:"industrial"},reference:{key:"plant:source",value:"wind"},terms:["offshore wind","wind park","wind power plant","wind power station","wind turbines","windmills"],name:"Wind Farm"},"power/pole":{icon:"temaki-utility_pole",fields:["ref","operator","height","material","line_attachment"],moreFields:["manufacturer"],geometry:["point","vertex"],tags:{power:"pole"},name:"Power Pole"},"power/substation":{icon:"temaki-power",fields:["substation","operator","building","ref"],moreFields:["gnis/feature_id"],geometry:["area","point"],tags:{power:"substation"},name:"Substation"},"power/switch":{icon:"temaki-power_switch",fields:["switch","operator","location","cables","voltage","ref"],geometry:["point","vertex"],tags:{power:"switch"},name:"Power Switch"},"power/tower":{icon:"temaki-power_tower",fields:["ref","operator","design","height","material","line_attachment"],moreFields:["manufacturer"],geometry:["point","vertex"],terms:["power"],tags:{power:"tower"},matchScore:1.05,name:"High-Voltage Tower"},"power/transformer":{icon:"temaki-power_transformer",fields:["ref","operator","transformer","location","rating","devices","phases"],moreFields:["frequency","manufacturer","voltage/primary","voltage/secondary","voltage/tertiary","windings","windings/configuration"],geometry:["point","vertex"],tags:{power:"transformer"},name:"Transformer"},"public_transport/platform_point":{icon:"temaki-sign_and_bench",fields:["name","network","operator","departures_board","shelter"],moreFields:["bench","bin","gnis/feature_id","level","lit","wheelchair"],geometry:["point"],tags:{public_transport:"platform"},terms:["platform","public transit","public transportation","transit","transportation"],name:"Transit Stop / Platform",matchScore:0.6},"public_transport/platform":{icon:"temaki-sign_and_pedestrian",fields:["ref_platform","network","operator","departures_board","surface"],moreFields:["access","covered","indoor","layer","level","lit","wheelchair"],geometry:["line","area"],tags:{public_transport:"platform"},terms:["platform","public transit","public transportation","transit","transportation"],name:"Transit Platform",matchScore:0.6},"public_transport/platform/aerialway_point":{icon:"maki-aerialway",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",aerialway:"yes"},reference:{key:"public_transport",value:"platform"},searchable:false,name:"Aerialway Stop / Platform"},"public_transport/platform/ferry_point":{icon:"maki-ferry",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",ferry:"yes"},reference:{key:"public_transport",value:"platform"},searchable:false,name:"Ferry Stop / Platform"},"public_transport/platform/light_rail_point":{icon:"temaki-light_rail",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",light_rail:"yes"},reference:{key:"railway",value:"platform"},searchable:false,name:"Light Rail Stop / Platform"},"public_transport/platform/monorail_point":{icon:"temaki-monorail",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",monorail:"yes"},reference:{key:"railway",value:"platform"},searchable:false,name:"Monorail Stop / Platform"},"public_transport/platform/subway_point":{icon:"temaki-subway",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",subway:"yes"},reference:{key:"railway",value:"platform"},searchable:false,name:"Subway Stop / Platform"},"public_transport/platform/train_point":{icon:"maki-rail",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",train:"yes"},reference:{key:"railway",value:"platform"},searchable:false,name:"Train Stop / Platform"},"public_transport/platform/aerialway":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",aerialway:"yes"},reference:{key:"public_transport",value:"platform"},terms:["aerialway","cable car","platform","public transit","public transportation","transit","transportation"],name:"Aerialway Platform"},"public_transport/platform/bus_point":{icon:"maki-bus",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point","vertex"],tags:{public_transport:"platform",bus:"yes"},addTags:{public_transport:"platform",bus:"yes",highway:"bus_stop"},reference:{key:"public_transport",value:"platform"},terms:["bus","platform","public transit","public transportation","transit","transportation"],name:"Bus Stop"},"public_transport/platform/bus":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",bus:"yes"},reference:{key:"public_transport",value:"platform"},terms:["bus","platform","public transit","public transportation","transit","transportation"],name:"Bus Platform"},"public_transport/platform/ferry":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",ferry:"yes"},reference:{key:"public_transport",value:"platform"},terms:["boat","dock","ferry","pier","platform","public transit","public transportation","transit","transportation"],name:"Ferry Platform"},"public_transport/platform/light_rail":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",light_rail:"yes"},addTags:{public_transport:"platform",light_rail:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["electric","light rail","platform","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],name:"Light Rail Platform"},"public_transport/platform/monorail":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",monorail:"yes"},addTags:{public_transport:"platform",monorail:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["monorail","platform","public transit","public transportation","rail","transit","transportation"],name:"Monorail Platform"},"public_transport/platform/subway":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",subway:"yes"},addTags:{public_transport:"platform",subway:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["metro","platform","public transit","public transportation","rail","subway","track","transit","transportation","underground"],name:"Subway Platform"},"public_transport/platform/train":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",train:"yes"},addTags:{public_transport:"platform",train:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["platform","public transit","public transportation","rail","track","train","transit","transportation"],name:"Train Platform"},"public_transport/platform/tram_point":{icon:"temaki-tram",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",tram:"yes"},reference:{key:"public_transport",value:"platform"},terms:["electric","light rail","platform","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],name:"Tram Stop / Platform"},"public_transport/platform/tram":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",tram:"yes"},addTags:{public_transport:"platform",tram:"yes",railway:"platform"},reference:{key:"public_transport",value:"platform"},terms:["electric","light rail","platform","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],name:"Tram Platform"},"public_transport/platform/trolleybus_point":{icon:"temaki-trolleybus",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point","vertex"],tags:{public_transport:"platform",trolleybus:"yes"},addTags:{public_transport:"platform",trolleybus:"yes",highway:"bus_stop"},reference:{key:"public_transport",value:"platform"},terms:["bus","electric","platform","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Stop"},"public_transport/platform/trolleybus":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",trolleybus:"yes"},reference:{key:"public_transport",value:"platform"},terms:["bus","electric","platform","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Platform"},"public_transport/station_aerialway":{icon:"maki-aerialway",fields:["{public_transport/station}","aerialway/access","aerialway/summer/access"],moreFields:["{public_transport/station}"],geometry:["point","vertex","area"],tags:{aerialway:"station"},addTags:{public_transport:"station",aerialway:"station"},reference:{key:"aerialway",value:"station"},terms:["aerialway","cable car","public transit","public transportation","station","terminal","transit","transportation"],name:"Aerialway Station"},"public_transport/station_bus":{icon:"maki-bus",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",bus:"yes"},addTags:{public_transport:"station",bus:"yes",amenity:"bus_station"},reference:{key:"amenity",value:"bus_station"},terms:["bus","public transit","public transportation","station","terminal","transit","transportation"],name:"Bus Station / Terminal"},"public_transport/station_ferry":{icon:"maki-ferry",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["vertex","point","area"],tags:{public_transport:"station",ferry:"yes"},addTags:{public_transport:"station",ferry:"yes",amenity:"ferry_terminal"},reference:{key:"amenity",value:"ferry_terminal"},terms:["boat","dock","ferry","pier","public transit","public transportation","station","terminal","transit","transportation"],name:"Ferry Station / Terminal"},"public_transport/station_light_rail":{icon:"temaki-light_rail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",light_rail:"yes"},addTags:{public_transport:"station",light_rail:"yes",railway:"station",station:"light_rail"},reference:{key:"station",value:"light_rail"},terms:["electric","light rail","public transit","public transportation","rail","station","terminal","track","tram","trolley","transit","transportation"],name:"Light Rail Station"},"public_transport/station_monorail":{icon:"temaki-monorail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",monorail:"yes"},addTags:{public_transport:"station",monorail:"yes",railway:"station"},reference:{key:"railway",value:"station"},terms:["monorail","public transit","public transportation","rail","station","terminal","transit","transportation"],name:"Monorail Station"},"public_transport/station_subway":{icon:"temaki-subway",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",subway:"yes"},addTags:{public_transport:"station",subway:"yes",railway:"station",station:"subway"},reference:{key:"station",value:"subway"},terms:["metro","public transit","public transportation","rail","station","subway","terminal","track","transit","transportation","underground"],name:"Subway Station"},"public_transport/station_train_halt":{icon:"maki-rail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",train:"yes",railway:"halt"},reference:{key:"railway",value:"halt"},terms:["halt","public transit","public transportation","rail","station","track","train","transit","transportation","whistle stop"],name:"Train Station (Halt / Request)"},"public_transport/station_train":{icon:"maki-rail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["vertex","point","area"],tags:{public_transport:"station",train:"yes"},addTags:{public_transport:"station",train:"yes",railway:"station"},reference:{key:"railway",value:"station"},terms:["public transit","public transportation","rail","station","terminal","track","train","transit","transportation"],name:"Train Station"},"public_transport/station_tram":{icon:"temaki-tram",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",tram:"yes"},reference:{key:"public_transport",value:"station"},terms:["electric","light rail","public transit","public transportation","rail","station","streetcar","terminal","track","tram","trolley","transit","transportation"],name:"Tram Station"},"public_transport/station_trolleybus":{icon:"temaki-trolleybus",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",trolleybus:"yes"},addTags:{public_transport:"station",trolleybus:"yes",amenity:"bus_station"},reference:{key:"amenity",value:"bus_station"},terms:["bus","electric","public transit","public transportation","station","streetcar","terminal","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Station / Terminal"},"public_transport/station":{icon:"maki-rail",fields:["name","network","operator","address","building_area","internet_access"],moreFields:["air_conditioning","baby_feeding","email","fax","gnis/feature_id","internet_access/fee","internet_access/ssid","level","phone","website","wheelchair"],geometry:["point","area"],tags:{public_transport:"station"},terms:["public transit","public transportation","station","terminal","transit","transportation"],name:"Transit Station",matchScore:0.2},"public_transport/stop_area":{icon:"iD-relation",fields:["name","ref","network","operator"],geometry:["relation"],tags:{type:"public_transport",public_transport:"stop_area"},reference:{key:"public_transport",value:"stop_area"},name:"Transit Stop Area"},"public_transport/stop_position_aerialway":{icon:"maki-aerialway",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",aerialway:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["aerialway","cable car","public transit","public transportation","transit","transportation"],name:"Aerialway Stopping Location"},"public_transport/stop_position_bus":{icon:"maki-bus",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",bus:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["bus","public transit","public transportation","transit","transportation"],name:"Bus Stopping Location"},"public_transport/stop_position_ferry":{icon:"maki-ferry",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",ferry:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["boat","dock","ferry","pier","public transit","public transportation","transit","transportation"],name:"Ferry Stopping Location"},"public_transport/stop_position_light_rail":{icon:"temaki-light_rail",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",light_rail:"yes"},addTags:{public_transport:"stop_position",light_rail:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["electric","light rail","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],name:"Light Rail Stopping Location"},"public_transport/stop_position_monorail":{icon:"temaki-monorail",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",monorail:"yes"},addTags:{public_transport:"stop_position",monorail:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["monorail","public transit","public transportation","rail","transit","transportation"],name:"Monorail Stopping Location"},"public_transport/stop_position_subway":{icon:"temaki-subway",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",subway:"yes"},addTags:{public_transport:"stop_position",subway:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["metro","public transit","public transportation","rail","subway","track","transit","transportation","underground"],name:"Subway Stopping Location"},"public_transport/stop_position_train":{icon:"maki-rail",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",train:"yes"},addTags:{public_transport:"stop_position",train:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["public transit","public transportation","rail","track","train","transit","transportation"],name:"Train Stopping Location"},"public_transport/stop_position_tram":{icon:"temaki-tram",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",tram:"yes"},addTags:{public_transport:"stop_position",tram:"yes",railway:"tram_stop"},reference:{key:"public_transport",value:"stop_position"},terms:["electric","light rail","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],name:"Tram Stopping Location"},"public_transport/stop_position_trolleybus":{icon:"temaki-trolleybus",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",trolleybus:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["bus","electric","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Stopping Location"},"public_transport/stop_position":{icon:"maki-bus",fields:["name","ref_stop_position","network","operator"],moreFields:["level"],geometry:["vertex"],tags:{public_transport:"stop_position"},terms:["public transit","public transportation","transit","transportation"],name:"Transit Stopping Location",matchScore:0.2},"railway/halt":{icon:"maki-rail",geometry:["point","vertex"],tags:{railway:"halt"},name:"Train Station (Halt / Request)",searchable:false},"railway/platform":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{railway:"platform"},name:"Train Platform",searchable:false},"railway/station":{icon:"maki-rail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","vertex","area"],tags:{railway:"station"},matchScore:0.95,name:"Train Station",searchable:false},"railway/tram_stop":{icon:"temaki-tram",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{railway:"tram_stop"},name:"Tram Stopping Position",searchable:false},"railway/abandoned":{icon:"iD-railway-abandoned",fields:["name","structure","service_rail","usage_rail"],moreFields:["covered"],geometry:["line"],tags:{railway:"abandoned"},terms:[],matchScore:0.85,name:"Abandoned Railway"},"railway/buffer_stop":{icon:"temaki-buffer_stop",geometry:["vertex"],tags:{railway:"buffer_stop"},terms:["stop","halt","buffer"],name:"Buffer Stop"},"railway/construction":{icon:"iD-railway-rail",fields:["name","opening_date","check_date","note","structure","gauge","electrified"],moreFields:["covered","frequency_electrified","highspeed","maxspeed","service_rail","usage_rail","voltage_electrified"],geometry:["line"],tags:{railway:"construction"},name:"Railway Under Construction"},"railway/crossing":{icon:"temaki-pedestrian",geometry:["vertex"],tags:{railway:"crossing"},terms:["crossing","pedestrian crossing","railroad crossing","level crossing","grade crossing","path through railroad","train crossing"],name:"Railway Crossing (Path)"},"railway/derail":{icon:"maki-roadblock",geometry:["vertex"],tags:{railway:"derail"},terms:["derailer"],name:"Railway Derailer"},"railway/disused":{icon:"iD-railway-disused",fields:["operator","structure","service_rail","usage_rail"],moreFields:["covered"],geometry:["line"],tags:{railway:"disused"},terms:[],name:"Disused Railway"},"railway/funicular":{icon:"iD-railway-rail",fields:["name","operator","structure","gauge","service_rail"],moreFields:["covered"],geometry:["line"],terms:["venicular","cliff railway","cable car","cable railway","funicular railway"],tags:{railway:"funicular"},name:"Funicular"},"railway/level_crossing":{icon:"maki-cross",geometry:["vertex"],tags:{railway:"level_crossing"},terms:["crossing","railroad crossing","level crossing","grade crossing","road through railroad","train crossing"],name:"Railway Crossing (Road)"},"railway/light_rail":{icon:"temaki-light_rail",fields:["{railway/rail}"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"light_rail"},terms:["light rail","streetcar","trolley"],name:"Light Rail"},"railway/milestone":{icon:"temaki-milestone",geometry:["point","vertex"],fields:["railway/position","direction_vertex"],tags:{railway:"milestone"},terms:["milestone","marker"],name:"Railway Milestone"},"railway/miniature":{icon:"iD-railway-rail",fields:["name","structure","gauge","electrified","service_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"miniature"},terms:["rideable miniature railway","narrow gauge railway","minimum gauge railway"],name:"Miniature Railway"},"railway/monorail":{icon:"temaki-monorail",fields:["name","operator","structure","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"monorail"},terms:[],name:"Monorail"},"railway/narrow_gauge":{icon:"iD-railway-rail",fields:["{railway/rail}"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"narrow_gauge"},terms:["narrow gauge railway","narrow gauge railroad"],name:"Narrow Gauge Rail"},"railway/rail":{icon:"iD-railway-rail",fields:["name","operator","structure","gauge","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","highspeed","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"rail"},terms:["rail line","railroad track","train track"],name:"Rail"},"railway/rail/highspeed":{icon:"iD-railway-rail",geometry:["line"],tags:{railway:"rail",highspeed:"yes"},reference:{key:"highspeed"},terms:["bullet train","fast rail","high speed rail","highspeed rail","HSR"],name:"High-Speed Rail"},"railway/signal":{icon:"temaki-railway_signals",geometry:["point","vertex"],fields:["railway/position","railway/signal/direction","ref"],tags:{railway:"signal"},terms:["signal","lights"],name:"Railway Signal"},"railway/subway_entrance":{icon:"maki-entrance",geometry:["point","vertex"],fields:["name","level","wheelchair"],tags:{railway:"subway_entrance"},terms:["metro","transit"],name:"Subway Entrance"},"railway/subway":{icon:"temaki-subway",fields:["{railway/rail}"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"subway"},terms:["metro","transit"],name:"Subway"},"railway/switch":{icon:"temaki-junction",geometry:["vertex"],tags:{railway:"switch"},terms:["switch","points"],name:"Railway Switch"},"railway/train_wash":{icon:"maki-rail",geometry:["point","vertex","area"],fields:["operator","building_area"],tags:{railway:"wash"},terms:["wash","clean"],name:"Train Wash"},"railway/tram":{icon:"temaki-tram",fields:["{railway/rail}"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"tram"},terms:["light rail","streetcar","tram","trolley"],name:"Tram"},"railway/yard":{icon:"maki-rail",fields:["name","operator"],moreFields:["gnis/feature_id"],geometry:["point"],tags:{railway:"yard"},terms:["freight car stop","freight train station","rail freight station","railroad yard","railway yard"],name:"Rail Yard"},relation:{icon:"iD-relation",fields:["name","relation"],geometry:["relation"],tags:{},name:"Relation"},"route/ferry":{icon:"maki-ferry",geometry:["line"],fields:["name","operator","duration","access","toll","to","from"],moreFields:["charge_toll","dog","interval","maxheight","maxweight","network","network/type","opening_hours","ref_route","wheelchair"],tags:{route:"ferry"},terms:["boat","merchant vessel","ship","water bus","water shuttle","water taxi"],name:"Ferry Route"},"seamark/beacon_isolated_danger":{fields:["ref","operator","seamark/beacon_isolated_danger/shape","seamark/type"],geometry:["point","vertex"],terms:["beacon isolated danger","isolated danger beacon","iala"],tags:{"seamark:type":"beacon_isolated_danger"},name:"Danger Beacon"},"seamark/beacon_lateral":{fields:["ref","operator","seamark/beacon_lateral/colour","seamark/beacon_lateral/category","seamark/beacon_lateral/shape","seamark/beacon_lateral/system","seamark/type"],geometry:["point","vertex"],terms:["lateral beacon","beacon lateral","cevni","channel marker","iala","lateral mark"],tags:{"seamark:type":"beacon_lateral"},name:"Channel Beacon"},"seamark/buoy_lateral":{icon:"temaki-buoy",fields:["ref","operator","seamark/buoy_lateral/colour","seamark/buoy_lateral/category","seamark/buoy_lateral/shape","seamark/buoy_lateral/system","seamark/type"],geometry:["point","vertex"],terms:["lateral buoy","buoy lateral","cevni","channel marker","iala","lateral mark"],tags:{"seamark:type":"buoy_lateral"},name:"Channel Buoy"},"seamark/buoy_lateral/green":{icon:"temaki-buoy",geometry:["point","vertex"],terms:["lateral buoy","buoy lateral","cevni","channel marker","iala","lateral mark"],tags:{"seamark:type":"buoy_lateral","seamark:buoy_lateral:colour":"green"},name:"Green Buoy"},"seamark/buoy_lateral/red":{icon:"temaki-buoy",geometry:["point","vertex"],terms:["lateral buoy","buoy lateral","cevni","channel marker","iala","lateral mark"],tags:{"seamark:type":"buoy_lateral","seamark:buoy_lateral:colour":"red"},name:"Red Buoy"},"seamark/mooring":{icon:"temaki-buoy",fields:["ref","operator","seamark/mooring/category","seamark/type"],geometry:["point"],terms:["dolphin","pile","bollard","buoy","post"],tags:{"seamark:type":"mooring"},name:"Mooring"},shop:{icon:"maki-shop",fields:["name","shop","operator","address","building_area","opening_hours","payment_multi"],moreFields:["air_conditioning","brand","building/levels_building","currency_multi","email","fax","gnis/feature_id","height_building","internet_access","internet_access/fee","internet_access/ssid","level","not/name","phone","ref/vatin","second_hand","stroller","website","wheelchair"],geometry:["point","area"],tags:{shop:"*"},terms:[],name:"Shop"},"shop/boutique":{icon:"maki-shop",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"boutique"},searchable:false,name:"Boutique"},"shop/fashion":{icon:"maki-shop",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"fashion"},searchable:false,name:"Fashion Store"},"shop/fishmonger":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"fishmonger"},reference:{key:"shop",value:"seafood"},name:"Fishmonger",searchable:false},"shop/furnace":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"furnace"},name:"Furnace Store",searchable:false},"shop/vacant":{icon:"maki-shop",fields:["name","address","building_area"],geometry:["point","area"],tags:{shop:"vacant"},name:"Vacant Shop",searchable:false},"shop/agrarian":{icon:"fas-tractor",fields:["{shop}","agrarian"],geometry:["point","area"],terms:["agricultural inputs","agricultural machines","seeds","pesticides","fertilizer","agricultural tools"],tags:{shop:"agrarian"},name:"Farm Supply Shop"},"shop/alcohol":{icon:"fas-wine-bottle",fields:["{shop}","drive_through"],moreFields:["{shop}","min_age"],geometry:["point","area"],terms:["alcohol","beer","booze","wine"],tags:{shop:"alcohol"},name:"Liquor Store"},"shop/anime":{icon:"fas-dragon",geometry:["point","area"],tags:{shop:"anime"},terms:["manga","japan","cosplay","figurine","dakimakura"],name:"Anime / Manga Shop"},"shop/antiques":{icon:"temaki-furniture",geometry:["point","area"],tags:{shop:"antiques"},name:"Antiques Shop"},"shop/appliance":{icon:"temaki-laundry",geometry:["point","area"],terms:["air conditioner","appliance","dishwasher","dryer","freezer","fridge","grill","kitchen","oven","refrigerator","stove","washer","washing machine"],tags:{shop:"appliance"},name:"Appliance Store"},"shop/art":{icon:"maki-shop",geometry:["point","area"],terms:["art*","exhibit*","gallery"],tags:{shop:"art"},name:"Art Store"},"shop/baby_goods":{icon:"fas-baby-carriage",geometry:["point","area"],tags:{shop:"baby_goods"},name:"Baby Goods Store"},"shop/bag":{icon:"fas-suitcase-rolling",geometry:["point","area"],terms:["handbag","purse"],tags:{shop:"bag"},name:"Bag/Luggage Store"},"shop/bakery":{icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery"},terms:["bread","cakes","rolls"],name:"Bakery"},"shop/bathroom_furnishing":{icon:"fas-bath",geometry:["point","area"],tags:{shop:"bathroom_furnishing"},name:"Bathroom Furnishing Store"},"shop/beauty":{icon:"temaki-lipstick",fields:["{shop}","beauty"],geometry:["point","area"],terms:["spa","salon","tanning"],tags:{shop:"beauty"},name:"Beauty Shop"},"shop/beauty/nails":{icon:"maki-shop",geometry:["point","area"],terms:["manicure","pedicure"],tags:{shop:"beauty",beauty:"nails"},reference:{key:"shop",value:"beauty"},name:"Nail Salon"},"shop/beauty/tanning":{icon:"temaki-tanning",geometry:["point","area"],tags:{shop:"beauty",beauty:"tanning"},reference:{key:"leisure",value:"tanning_salon"},name:"Tanning Salon"},"shop/bed":{icon:"maki-lodging",geometry:["point","area"],tags:{shop:"bed"},name:"Bedding/Mattress Store"},"shop/beverages":{icon:"temaki-bottles",geometry:["point","area"],tags:{shop:"beverages"},terms:["drinks"],name:"Beverage Store"},"shop/bicycle":{icon:"maki-bicycle",fields:["{shop}","service/bicycle"],geometry:["point","area"],terms:["bike","repair","tricycle","unicycle"],tags:{shop:"bicycle"},name:"Bicycle Shop"},"shop/boat":{icon:"temaki-boat",geometry:["point","area"],terms:["fishing boat","jetski","motorboat","rowboat","sailboat","vessel","watercraft"],tags:{shop:"boat"},name:"Boat Store"},"shop/bookmaker":{icon:"temaki-money_hand",moreFields:["{shop}","min_age"],geometry:["point","area"],tags:{shop:"bookmaker"},terms:["betting","bookie","gamble","gambling","turf accountant"],name:"Bookmaker"},"shop/books":{icon:"fas-book",fields:["{shop}","internet_access"],moreFields:["{shop}","internet_access/fee","internet_access/ssid"],geometry:["point","area"],tags:{shop:"books"},name:"Book Store"},"shop/brewing_supplies":{icon:"temaki-storage_fermenter",geometry:["point","area"],terms:["brew shop","homebrew supply store"],tags:{shop:"brewing_supplies"},name:"Brewing Supply Store"},"shop/butcher":{icon:"temaki-cleaver",geometry:["point","area"],terms:["chicken","beef","lamb","meat","pork"],tags:{shop:"butcher"},name:"Butcher"},"shop/camera":{icon:"fas-camera-retro",geometry:["point","area"],terms:["camera","film","lens","photo"],tags:{shop:"camera"},name:"Camera Equipment Store"},"shop/candles":{icon:"fas-burn",geometry:["point","area"],tags:{shop:"candles"},terms:["wax"],name:"Candle Shop"},"shop/cannabis":{icon:"fas-cannabis",moreFields:["{shop}","min_age"],geometry:["point","area"],terms:["420","marijuana","pot","reefer","weed"],tags:{shop:"cannabis"},name:"Cannabis Shop"},"shop/car_parts":{icon:"fas-car-battery",geometry:["point","area"],terms:["automobile","automotive"],tags:{shop:"car_parts"},name:"Car Parts Store"},"shop/car_repair":{icon:"maki-car-repair",fields:["{shop}","service/vehicle"],geometry:["point","area"],terms:["automobile","automotive","garage","service"],tags:{shop:"car_repair"},name:"Car Repair Shop"},"shop/car":{icon:"maki-car",fields:["name","brand","{shop}","second_hand","service/vehicle"],geometry:["point","area"],terms:["automobile","automotive"],tags:{shop:"car"},name:"Car Dealership"},"shop/car/second_hand":{icon:"maki-car",geometry:["point","area"],terms:["automobile","automotive"],tags:{shop:"car",second_hand:"only"},name:"Used Car Dealership"},"shop/caravan":{icon:"temaki-rv_park",fields:["name","brand","{shop}","second_hand","service/vehicle"],geometry:["point","area"],tags:{shop:"caravan"},terms:["auto","camper","recreational vehicle"],name:"RV Dealership"},"shop/carpet":{icon:"fas-tape",geometry:["point","area"],terms:["rug"],tags:{shop:"carpet"},name:"Carpet Store"},"shop/catalogue":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"catalogue"},name:"Catalog Shop"},"shop/charity":{icon:"maki-shop",fields:["{shop}","second_hand"],geometry:["point","area"],terms:["thrift","op shop","nonprofit"],tags:{shop:"charity"},name:"Charity Store"},"shop/cheese":{icon:"fas-cheese",geometry:["point","area"],tags:{shop:"cheese"},name:"Cheese Store"},"shop/chemist":{icon:"fas-shopping-basket",geometry:["point","area"],tags:{shop:"chemist"},terms:["apothecary","beauty","drug store","drugstore","gift","hair","med*","pharmacy","prescription","tooth"],name:"Drugstore"},"shop/chocolate":{icon:"maki-confectionery",geometry:["point","area"],tags:{shop:"chocolate"},terms:["cocoa"],name:"Chocolate Store"},"shop/clothes":{icon:"maki-clothing-store",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"clothes"},terms:["blouses","boutique","bras","clothes","dresses","fashion","pants","shirts","shorts","skirts","slacks","socks","suits","underwear"],name:"Clothing Store"},"shop/clothes/second_hand":{icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes",second_hand:"only"},terms:["blouses","clothes","consignment","dresses","pants","second hand","shirts","shorts","skirts","slacks","suits","used"],name:"Secondhand Clothing Store"},"shop/clothes/underwear":{icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes",clothes:"underwear"},reference:{key:"clothes",value:"underwear"},terms:["boutique","bras","brassieres","briefs","boxers","fashion","lingerie","panties","slips","socks","stockings","underclothes","undergarments","underpants","undies"],name:"Underwear Store"},"shop/clothes/wedding":{icon:"temaki-gown",geometry:["point","area"],tags:{shop:"clothes",clothes:"wedding"},reference:{key:"clothes",value:"wedding"},terms:["boutique","bridal","bride","bridegroom","bridesmaid","groom","groomsman","tuxedo","wedding dress","wedding gown"],name:"Wedding Clothes Store"},"shop/coffee":{icon:"temaki-coffee",geometry:["point","area"],tags:{shop:"coffee"},name:"Coffee Store"},"shop/computer":{icon:"fas-laptop",geometry:["point","area"],tags:{shop:"computer"},terms:["desktop","laptop","hardware","operating system","software"],name:"Computer Store"},"shop/confectionery":{icon:"maki-confectionery",geometry:["point","area"],terms:["sweet"],tags:{shop:"confectionery"},name:"Candy Store"},"shop/convenience":{icon:"fas-shopping-basket",geometry:["point","area"],tags:{shop:"convenience"},name:"Convenience Store"},"shop/copyshop":{icon:"fas-print",geometry:["point","area"],tags:{shop:"copyshop"},terms:["print","scan"],name:"Copy Store"},"shop/cosmetics":{icon:"temaki-lipstick",geometry:["point","area"],tags:{shop:"cosmetics"},terms:["make-up","makeup"],name:"Cosmetics Store"},"shop/country_store":{icon:"fas-hat-cowboy-side",geometry:["point","area"],tags:{shop:"country_store"},name:"Country Store"},"shop/craft":{icon:"fas-cut",geometry:["point","area"],tags:{shop:"craft"},terms:["art*","paint*","frame"],name:"Arts & Crafts Store"},"shop/curtain":{icon:"maki-shop",geometry:["point","area"],terms:["drape*","window"],tags:{shop:"curtain"},name:"Curtain Store"},"shop/dairy":{icon:"fas-cheese",geometry:["point","area"],terms:["milk","egg","cheese"],tags:{shop:"dairy"},name:"Dairy Store"},"shop/deli":{icon:"maki-restaurant",geometry:["point","area"],terms:["lunch","meat","sandwich"],tags:{shop:"deli"},name:"Deli"},"shop/department_store":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store"},name:"Department Store"},"shop/doityourself":{icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself"},name:"DIY Store"},"shop/doors":{icon:"fas-door-open",geometry:["point","area"],tags:{shop:"doors"},name:"Door Shop"},"shop/dry_cleaning":{icon:"temaki-clothes_hanger",geometry:["point","area"],tags:{shop:"dry_cleaning"},name:"Dry Cleaner"},"shop/e-cigarette":{icon:"maki-shop",moreFields:["{shop}","min_age"],geometry:["point","area"],tags:{shop:"e-cigarette"},terms:["electronic","vape","vaping","vapor"],name:"E-Cigarette Shop"},"shop/electrical":{icon:"temaki-power",geometry:["point","area"],terms:["cable","electric","fan","LED","lighting","power","wire"],tags:{shop:"electrical"},name:"Electrical Equipment Store"},"shop/electronics":{icon:"fas-plug",geometry:["point","area"],terms:["appliance","audio","blueray","camera","computer","dvd","home theater","radio","speaker","tv","video"],tags:{shop:"electronics"},name:"Electronics Store"},"shop/erotic":{icon:"maki-shop",fields:["{shop}","min_age"],geometry:["point","area"],terms:["sex","porn"],tags:{shop:"erotic"},name:"Erotic Store"},"shop/erotic/lgbtq":{icon:"maki-shop",geometry:["point","area"],terms:["sex","porn"],tags:{shop:"erotic",lgbtq:"primary"},name:"LGBTQ+ Erotic Store"},"shop/fabric":{icon:"fas-tape",geometry:["point","area"],terms:["sew"],tags:{shop:"fabric"},name:"Fabric Store"},"shop/farm":{icon:"fas-apple-alt",geometry:["point","area"],terms:["baked goods","farm shop","farm stand","fresh food","fruits","greengrocer","organics","vegetables"],tags:{shop:"farm"},name:"Produce Stand"},"shop/fashion_accessories":{icon:"temaki-fashion_accessories",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"fashion_accessories"},terms:["bag","cologne","fragrance","hat","jewellery","purfume","purse","scarf","sunglasses","umbrella","wallet","watch"],name:"Fashion Accessories Store"},"shop/fireplace":{icon:"maki-shop",geometry:["point","area"],terms:["fireplace","stove","masonry heater"],tags:{shop:"fireplace"},name:"Fireplace Store"},"shop/fishing":{icon:"temaki-ice_fishing",geometry:["point","area"],tags:{shop:"fishing"},terms:["bait","fishing line","flies","fly","lure","reel","rod","tackle"],name:"Fishing Shop"},"shop/flooring":{icon:"temaki-tools",geometry:["point","area"],tags:{shop:"flooring"},terms:["tile"],name:"Flooring Supply Shop"},"shop/florist":{icon:"maki-florist",geometry:["point","area"],terms:["flower"],tags:{shop:"florist"},name:"Florist"},"shop/frame":{icon:"fas-vector-square",geometry:["point","area"],tags:{shop:"frame"},terms:["art*","paint*","photo*","frame"],name:"Framing Shop"},"shop/frozen_food":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"frozen_food"},name:"Frozen Food"},"shop/fuel":{icon:"temaki-propane_tank",fields:["{shop}","fuel_multi"],geometry:["point","area"],tags:{shop:"fuel"},name:"Fuel Shop",matchScore:0.5},"shop/funeral_directors":{icon:"maki-cemetery",fields:["{shop}","religion","denomination"],geometry:["point","area"],terms:["undertaker","memorial home"],tags:{shop:"funeral_directors"},name:"Funeral Home"},"shop/furniture":{icon:"fas-couch",geometry:["point","area"],terms:["chair","sofa","table"],tags:{shop:"furniture"},name:"Furniture Store"},"shop/games":{icon:"fas-dice",geometry:["point","area"],tags:{shop:"games"},terms:["board game","card game","dice game","game shop","live action role-playing game","miniatures wargame","strategy game"],name:"Tabletop Game Store"},"shop/garden_centre":{icon:"maki-garden-centre",geometry:["point","area"],terms:["landscape","mulch","shrub","tree"],tags:{shop:"garden_centre"},name:"Garden Center"},"shop/gas":{icon:"temaki-propane_tank",geometry:["point","area"],terms:["cng","lpg","natural gas","propane","refill","tank"],tags:{shop:"gas"},name:"Bottled Gas Shop"},"shop/general":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"general"},terms:["village shop"],name:"General Store"},"shop/gift":{icon:"maki-gift",geometry:["point","area"],terms:["souvenir"],tags:{shop:"gift"},name:"Gift Shop"},"shop/greengrocer":{icon:"fas-carrot",geometry:["point","area"],terms:["fruit","produce","vegetable"],tags:{shop:"greengrocer"},name:"Greengrocer"},"shop/hairdresser_supply":{icon:"temaki-hair_care",geometry:["point","area"],terms:["barber","shampoo","conditioner"],tags:{shop:"hairdresser_supply"},name:"Hairdresser Supply Store"},"shop/hairdresser":{icon:"temaki-beauty_salon",geometry:["point","area"],terms:["barber"],tags:{shop:"hairdresser"},name:"Hairdresser"},"shop/hardware":{icon:"temaki-tools",geometry:["point","area"],tags:{shop:"hardware"},name:"Hardware Store"},"shop/health_food":{icon:"maki-shop",geometry:["point","area"],terms:["wholefood","vitamins","vegetarian","vegan"],tags:{shop:"health_food"},name:"Health Food Shop"},"shop/hearing_aids":{icon:"temaki-hearing_aid",geometry:["point","area"],tags:{shop:"hearing_aids"},name:"Hearing Aids Store"},"shop/herbalist":{icon:"fas-leaf",geometry:["point","area"],tags:{shop:"herbalist"},name:"Herbalist"},"shop/hifi":{icon:"temaki-speaker",geometry:["point","area"],terms:["audio","hi-fi","high fidelity","stereo","video"],tags:{shop:"hifi"},name:"Hifi Store"},"shop/hobby":{icon:"fas-dragon",geometry:["point","area"],tags:{shop:"hobby"},terms:["manga","figurine","model"],name:"Hobby Shop"},"shop/houseware":{icon:"fas-blender",geometry:["point","area"],terms:["home","household","kitchenware"],tags:{shop:"houseware"},name:"Houseware Store"},"shop/hunting":{icon:"temaki-binoculars",geometry:["point","area"],tags:{shop:"hunting"},terms:["arrows","bows","bullets","crossbows","rifles","traps"],name:"Hunting Shop"},"shop/interior_decoration":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"interior_decoration"},name:"Interior Decoration Store"},"shop/jewelry":{icon:"maki-jewelry-store",geometry:["point","area"],terms:["bracelet","diamond","earrings","gem","gold","jeweler","jewellery","jeweller","necklace","pins","ring","silver"],tags:{shop:"jewelry"},name:"Jewelry Store"},"shop/kiosk":{icon:"fas-store",geometry:["point","area"],tags:{shop:"kiosk"},name:"Kiosk"},"shop/kitchen":{icon:"temaki-kitchen_sink",geometry:["point","area"],tags:{shop:"kitchen"},terms:["cabinets","countertops","sinks"],name:"Kitchen Design Store"},"shop/laundry":{icon:"temaki-laundry",fields:["{shop}","self_service"],geometry:["point","area"],tags:{shop:"laundry"},name:"Laundry"},"shop/laundry/self_service":{icon:"temaki-laundry",geometry:["point","area"],tags:{shop:"laundry",self_service:"yes"},terms:["Coin Laundry","Laundromat","Coin Wash","Launderette","Washateria"],name:"Self-Service Laundry"},"shop/leather":{icon:"temaki-handbag",geometry:["point","area"],tags:{shop:"leather"},name:"Leather Store"},"shop/lighting":{icon:"temaki-desk_lamp",geometry:["point","area"],terms:["fluorescent lighting","lamps","LEDs","light fixtures","lightbulbs"],tags:{shop:"lighting"},name:"Lighting Store"},"shop/locksmith":{icon:"fas-key",geometry:["point","area"],terms:["key","lockpick"],tags:{shop:"locksmith"},name:"Locksmith"},"shop/lottery":{icon:"fas-ticket-alt",moreFields:["{shop}","min_age"],geometry:["point","area"],tags:{shop:"lottery"},terms:["lotto tickets","gamble","gambling","scratch-offs"],name:"Lottery Shop"},"shop/mall":{icon:"maki-shop",geometry:["point","area"],terms:["shopping"],tags:{shop:"mall"},name:"Mall"},"shop/massage":{icon:"temaki-spa",geometry:["point","area"],tags:{shop:"massage"},name:"Massage Shop"},"shop/medical_supply":{icon:"fas-crutch",geometry:["point","area"],tags:{shop:"medical_supply"},name:"Medical Supply Store"},"shop/military_surplus":{icon:"temaki-military",geometry:["point","area"],terms:["armor","army-navy store","army surplus","navy surplus","tactical gear","war surplus shop","weapons"],tags:{shop:"military_surplus"},name:"Military Surplus Store"},"shop/mobile_phone":{icon:"fas-mobile-alt",geometry:["point","area"],tags:{shop:"mobile_phone"},name:"Mobile Phone Store"},"shop/money_lender":{icon:"temaki-money_hand",fields:["{shop}","currency_multi"],geometry:["point","area"],tags:{shop:"money_lender"},name:"Money Lender"},"shop/motorcycle_repair":{icon:"temaki-motorcycle_repair",fields:["{shop}","service/vehicle"],geometry:["point","area"],terms:["auto","bike","garage","motorcycle","repair","service"],tags:{shop:"motorcycle_repair"},name:"Motorcycle Repair Shop"},"shop/motorcycle":{icon:"fas-motorcycle",fields:["name","brand","{shop}"],geometry:["point","area"],terms:["bike"],tags:{shop:"motorcycle"},name:"Motorcycle Dealership"},"shop/music":{icon:"fas-compact-disc",geometry:["point","area"],terms:["tape casettes","CDs","compact discs","vinyl records"],tags:{shop:"music"},name:"Music Store"},"shop/musical_instrument":{icon:"fas-guitar",geometry:["point","area"],terms:["guitar"],tags:{shop:"musical_instrument"},name:"Musical Instrument Store"},"shop/newsagent":{icon:"fas-newspaper",geometry:["point","area"],tags:{shop:"newsagent"},name:"Newspaper/Magazine Shop"},"shop/nutrition_supplements":{icon:"fas-pills",geometry:["point","area"],terms:["health","supplement","vitamin"],tags:{shop:"nutrition_supplements"},name:"Nutrition Supplements Store"},"shop/optician":{icon:"maki-optician",geometry:["point","area"],terms:["eye","glasses"],tags:{shop:"optician"},name:"Optician"},"shop/organic":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"supermarket",organic:"only"},name:"Organic Goods Store"},"shop/outdoor":{icon:"temaki-compass",fields:["{shop}","clothes"],geometry:["point","area"],terms:["camping","climbing","hiking","outfitter","outdoor equipment","outdoor supplies"],tags:{shop:"outdoor"},name:"Outdoors Store"},"shop/outpost":{icon:"maki-shop",geometry:["point","area"],terms:["online","pick up","pickup"],tags:{shop:"outpost"},name:"Online Retailer Outpost"},"shop/paint":{icon:"fas-paint-roller",geometry:["point","area"],tags:{shop:"paint"},name:"Paint Store"},"shop/party":{icon:"temaki-balloon",geometry:["point","area"],terms:["balloons","costumes","decorations","invitations"],tags:{shop:"party"},name:"Party Supply Store"},"shop/pastry":{icon:"maki-bakery",geometry:["point","area"],tags:{shop:"pastry"},terms:["patisserie","cake shop","cakery"],name:"Pastry Shop"},"shop/pawnbroker":{icon:"temaki-money_hand",geometry:["point","area"],tags:{shop:"pawnbroker"},name:"Pawn Shop"},"shop/perfumery":{icon:"temaki-perfume",geometry:["point","area"],tags:{shop:"perfumery"},terms:["cologne","fragrance","purfume"],name:"Perfume Store"},"shop/pet_grooming":{icon:"maki-dog-park",geometry:["point","area"],terms:["cat","dog"],tags:{shop:"pet_grooming"},name:"Pet Grooming Store"},"shop/pet":{icon:"maki-dog-park",geometry:["point","area"],terms:["animal","cat","dog","fish","kitten","puppy","reptile"],tags:{shop:"pet"},name:"Pet Store"},"shop/photo":{icon:"fas-camera-retro",geometry:["point","area"],terms:["camera","film","lens","photo"],tags:{shop:"photo"},name:"Photography Store"},"shop/pottery":{icon:"temaki-vase",geometry:["point","area"],terms:["ceramic","pot","vase"],tags:{shop:"pottery"},name:"Pottery Store"},"shop/printer_ink":{icon:"fas-print",geometry:["point","area"],terms:["copier ink","fax ink","ink cartridges","toner"],tags:{shop:"printer_ink"},name:"Printer Ink Store"},"shop/psychic":{icon:"temaki-psychic",geometry:["point","area"],tags:{shop:"psychic"},terms:["astrology","crystal ball","divination","fortune teller","seer","spirit"],name:"Psychic"},"shop/pyrotechnics":{icon:"temaki-rocket_firework",geometry:["point","area"],tags:{shop:"pyrotechnics"},terms:["fireworks"],name:"Fireworks Store"},"shop/radiotechnics":{icon:"fas-microchip",geometry:["point","area"],tags:{shop:"radiotechnics"},terms:["antenna","transistor"],name:"Radio/Electronic Component Store"},"shop/religion":{icon:"maki-shop",fields:["{shop}","religion","denomination"],geometry:["point","area"],tags:{shop:"religion"},name:"Religious Store"},"shop/rental":{icon:"fas-dolly",geometry:["point","area"],tags:{shop:"rental"},name:"Rental Shop"},"shop/scuba_diving":{icon:"temaki-scuba_diving",fields:["{shop}","scuba_diving"],geometry:["point","area"],terms:["diving","scuba"],tags:{shop:"scuba_diving"},name:"Scuba Diving Shop"},"shop/seafood":{icon:"temaki-fish_cleaning",geometry:["point","area"],terms:["fishmonger"],tags:{shop:"seafood"},name:"Seafood Shop"},"shop/second_hand":{icon:"maki-shop",fields:["{shop}","second_hand"],geometry:["point","area"],terms:["secondhand","second hand","resale","thrift","used"],tags:{shop:"second_hand"},name:"Consignment/Thrift Store"},"shop/sewing":{icon:"temaki-needle_and_spool",geometry:["point","area"],terms:["haberdashery"],tags:{shop:"sewing"},name:"Sewing Supply Shop"},"shop/shoes":{icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes"},terms:["boots","cleats","clogs","heels","loafers","oxfords","sneakers"],name:"Shoe Store"},"shop/spices":{icon:"maki-shop",geometry:["point","area"],terms:["chili","cinnamon","curry","ginger","herbs","pepper","saffron","salt","spice store","spices","turmeric","wasabi"],tags:{shop:"spices"},name:"Spice Shop"},"shop/sports":{icon:"fas-futbol",fields:["name","operator","sport","{shop}"],geometry:["point","area"],tags:{shop:"sports"},terms:["athletics"],name:"Sporting Goods Store"},"shop/stationery":{icon:"fas-paperclip",geometry:["point","area"],terms:["card","paper"],tags:{shop:"stationery"},name:"Stationery Store"},"shop/storage_rental":{icon:"temaki-storage_rental",geometry:["point","area"],tags:{shop:"storage_rental"},terms:["garages"],name:"Storage Rental"},"shop/supermarket":{icon:"maki-grocery",moreFields:["{shop}","diet_multi"],geometry:["point","area"],terms:["grocery","store","shop"],tags:{shop:"supermarket"},name:"Supermarket"},"shop/swimming_pool":{icon:"fas-swimmer",geometry:["point","area"],terms:["hot tub equipment store","hot tub maintenance store","hot tub supply store","pool shop","pool store","swimming pool equipment store","swimming pool installation store","swimming pool maintenance store","swimming pool supply shop"],tags:{shop:"swimming_pool"},name:"Pool Supply Store"},"shop/tailor":{icon:"temaki-needle_and_spool",geometry:["point","area"],terms:["clothes","suit"],tags:{shop:"tailor"},name:"Tailor"},"shop/tattoo":{icon:"maki-shop",moreFields:["{shop}","min_age"],geometry:["point","area"],tags:{shop:"tattoo"},terms:["ink"],name:"Tattoo Parlor"},"shop/tea":{icon:"maki-teahouse",geometry:["point","area"],tags:{shop:"tea"},name:"Tea Store"},"shop/telecommunication":{icon:"maki-telephone",geometry:["point","area"],terms:["communication","internet service provider","isp","network","telephone","voice"],tags:{shop:"telecommunication"},name:"Telecom Retail Store"},"shop/ticket":{icon:"fas-ticket-alt",geometry:["point","area"],tags:{shop:"ticket"},terms:["box office"],name:"Ticket Seller"},"shop/tiles":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"tiles"},name:"Tile Shop"},"shop/tobacco":{icon:"temaki-pipe",moreFields:["{shop}","min_age"],geometry:["point","area"],tags:{shop:"tobacco"},terms:["cigarettes","cigars"],name:"Tobacco Shop"},"shop/tool_hire":{icon:"temaki-tools",geometry:["point","area"],tags:{shop:"tool_hire"},name:"Tool Rental"},"shop/toys":{icon:"fas-rocket",geometry:["point","area"],tags:{shop:"toys"},terms:["games"],name:"Toy Store"},"shop/trade":{icon:"temaki-tools",fields:["name","trade","{shop}"],geometry:["point","area"],tags:{shop:"trade"},name:"Trade Shop"},"shop/travel_agency":{icon:"fas-suitcase",geometry:["point","area"],tags:{shop:"travel_agency"},terms:["cruises","flights","hotels","tickets","travel packages"],name:"Travel Agency"},"shop/tyres":{icon:"temaki-tire",geometry:["point","area"],tags:{shop:"tyres"},name:"Tire Store"},"shop/vacuum_cleaner":{icon:"temaki-vacuum",geometry:["point","area"],tags:{shop:"vacuum_cleaner"},name:"Vacuum Cleaner Store"},"shop/variety_store":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store"},name:"Variety Store"},"shop/video_games":{icon:"maki-gaming",geometry:["point","area"],tags:{shop:"video_games"},name:"Video Game Store"},"shop/video":{icon:"temaki-movie_rental",moreFields:["{shop}","min_age"],geometry:["point","area"],terms:["DVD","VHS","video casette"],tags:{shop:"video"},name:"Video Store"},"shop/watches":{icon:"maki-watch",geometry:["point","area"],tags:{shop:"watches"},name:"Watches Shop"},"shop/water_sports":{icon:"fas-swimmer",geometry:["point","area"],tags:{shop:"water_sports"},name:"Watersport/Swim Shop"},"shop/water":{icon:"tnp-2009234",geometry:["point","area"],tags:{shop:"water"},name:"Drinking Water Shop"},"shop/weapons":{icon:"maki-shop",geometry:["point","area"],terms:["ammo","gun","knife","knives"],tags:{shop:"weapons"},name:"Weapon Shop"},"shop/wholesale":{icon:"maki-warehouse",fields:["{shop}","wholesale"],geometry:["point","area"],terms:["warehouse club","cash and carry"],tags:{shop:"wholesale"},name:"Wholesale Store"},"shop/window_blind":{icon:"temaki-window",geometry:["point","area"],tags:{shop:"window_blind"},name:"Window Blind Store"},"shop/wine":{icon:"maki-alcohol-shop",moreFields:["{shop}","min_age"],geometry:["point","area"],tags:{shop:"wine"},name:"Wine Shop"},"telecom/data_center":{icon:"fas-server",fields:["name","ref","operator","building_area"],moreFields:["address","gnis/feature_id","phone","website"],geometry:["point","area"],tags:{telecom:"data_center"},terms:["computer systems storage","information technology","server farm","the cloud","telecommunications"],name:"Data Center"},"tourism/alpine_hut":{icon:"temaki-cabin",fields:["name","operator","address","building_area","internet_access","internet_access/fee","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","internet_access/ssid","phone","reservation","website","wheelchair"],geometry:["point","area"],terms:["cabin","climbing hut","lodge","lodging","overnight accommodations","wilderness hut"],tags:{tourism:"alpine_hut"},name:"Alpine Hut"},"tourism/apartment":{icon:"maki-lodging",fields:["name","operator","address","building_area","rooms","internet_access","internet_access/fee"],moreFields:["building/levels_building","email","fax","height_building","internet_access/ssid","level","payment_multi","phone","reservation","smoking","website","wheelchair"],geometry:["point","area"],tags:{tourism:"apartment"},terms:["bnb","holiday rental","lodging","overnight accommodations","vacation rental"],name:"Guest Apartment / Condo"},"tourism/aquarium":{icon:"maki-aquarium",fields:["name","operator","address","building_area","opening_hours"],moreFields:["charge_fee","email","fax","fee","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","payment_multi_fee","phone","ref/vatin","smoking","website","wheelchair"],geometry:["point","area"],terms:["fish","sea","water"],tags:{tourism:"aquarium"},name:"Aquarium"},"tourism/artwork":{icon:"maki-art-gallery",fields:["name","artwork_type","artist"],moreFields:["level","material","website"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork"},terms:["mural","sculpture","statue"],name:"Artwork"},"tourism/artwork/bust":{icon:"fas-user-alt",fields:["name","artist","material"],geometry:["point","vertex"],tags:{tourism:"artwork",artwork_type:"bust"},reference:{key:"artwork_type"},terms:["figure"],name:"Bust"},"tourism/artwork/graffiti":{icon:"maki-art-gallery",fields:["name","artist"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"graffiti"},reference:{key:"artwork_type"},terms:["Street Artwork","Guerilla Artwork","Graffiti Artwork"],name:"Graffiti"},"tourism/artwork/installation":{icon:"temaki-sculpture",fields:["name","artist"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"installation"},reference:{key:"artwork_type"},terms:["interactive art","intervention art","modern art"],name:"Art Installation"},"tourism/artwork/mural":{icon:"maki-art-gallery",fields:["name","artist"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"mural"},reference:{key:"artwork_type",value:"mural"},terms:["fresco","wall painting"],name:"Mural"},"tourism/artwork/sculpture":{icon:"temaki-sculpture",fields:["name","artist","material"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"sculpture"},reference:{key:"artwork_type",value:"sculpture"},terms:["statue","figure","carving"],name:"Sculpture"},"tourism/artwork/statue":{icon:"temaki-statue",fields:["name","artist","material"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"statue"},reference:{key:"artwork_type",value:"statue"},terms:["sculpture","figure","carving"],name:"Statue"},"tourism/attraction":{icon:"maki-star",fields:["name","operator","address"],moreFields:["gnis/feature_id"],geometry:["point","vertex","line","area"],tags:{tourism:"attraction"},matchScore:0.75,name:"Tourist Attraction"},"tourism/camp_pitch":{icon:"maki-campsite",fields:["name","ref"],geometry:["point","area"],terms:["tent","rv"],tags:{tourism:"camp_pitch"},name:"Camp Pitch"},"tourism/camp_site":{icon:"maki-campsite",fields:["name","operator","address","access_simple","capacity","fee","payment_multi_fee","charge_fee"],moreFields:["backcountry","dog","email","fax","gnis/feature_id","group_only","internet_access","internet_access/fee","internet_access/ssid","openfire","opening_hours","phone","power_supply","ref/vatin","reservation","sanitary_dump_station","shower","stars","toilets","website","wheelchair"],geometry:["point","vertex","area"],tags:{tourism:"camp_site"},terms:["caravans","camp ground","camp pitch","camp site","campers","campground","campsite","mobile homes","recreational vehicles","rv","tenting"],name:"Campground"},"tourism/camp_site/backcountry":{icon:"maki-campsite",geometry:["point","vertex","area"],tags:{tourism:"camp_site",backcountry:"yes"},reference:{key:"backcountry"},terms:["alpine camping","backpacking site","backwoods camping","camp ground","camp pitch","camp site","campground","campsite","informal camping","primitive camping"],name:"Backcountry Camping Area"},"tourism/camp_site/group_only":{icon:"maki-campsite",geometry:["point","vertex","area"],tags:{tourism:"camp_site",group_only:"yes"},reference:{key:"group_only"},terms:["camp ground","camp pitch","camp site","campground","campsite","scout camping","youth camping"],name:"Group Camping Area"},"tourism/caravan_site":{icon:"temaki-rv_park",fields:["name","address","capacity","sanitary_dump_station","power_supply","internet_access","internet_access/fee"],moreFields:["charge_fee","email","fax","fee","gnis/feature_id","internet_access/ssid","operator","payment_multi_fee","phone","reservation","smoking","website","wheelchair"],geometry:["point","vertex","area"],terms:["Motor Home","Camper"],tags:{tourism:"caravan_site"},name:"RV Park"},"tourism/chalet":{icon:"temaki-cabin",fields:["name","operator","address","building_area","internet_access","internet_access/fee"],moreFields:["air_conditioning","building/levels_building","email","fax","gnis/feature_id","height_building","internet_access/ssid","payment_multi","phone","reservation","smoking","website","wheelchair"],geometry:["point","area"],terms:["chalet","holiday cabin","holiday cottage","holiday home","lodge","lodging","overnight accommodations","vacation cabin","vacation home"],tags:{tourism:"chalet"},name:"Holiday Cottage"},"tourism/gallery":{icon:"maki-art-gallery",fields:["name","operator","address","building_area","opening_hours"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","ref/vatin","website","wheelchair"],geometry:["point","area"],terms:["art*","exhibit*","paint*","photo*","sculpt*"],tags:{tourism:"gallery"},name:"Art Gallery"},"tourism/guest_house":{icon:"maki-lodging",fields:["name","operator","guest_house","address","building_area","rooms","internet_access","internet_access/fee"],moreFields:["air_conditioning","building/levels_building","email","fax","gnis/feature_id","height_building","internet_access/ssid","payment_multi","phone","ref/vatin","reservation","smoking","website","wheelchair"],geometry:["point","area"],tags:{tourism:"guest_house"},terms:["b & b","b and b","B&B","Bed and Breakfast","bnb","lodging","overnight accommodations"],name:"Guest House"},"tourism/hostel":{icon:"temaki-bunk_beds",fields:["{tourism/guest_house}"],moreFields:["{tourism/guest_house}"],geometry:["point","area"],tags:{tourism:"hostel"},terms:["bunk beds","dormitories","dorms","lodging","overnight accommodations"],name:"Hostel"},"tourism/hotel":{icon:"fas-concierge-bell",fields:["{tourism/motel}"],moreFields:["{tourism/motel}","bar","stars"],geometry:["point","area"],tags:{tourism:"hotel"},terms:["concierge","lodge","lodging","overnight accommodations"],name:"Hotel"},"tourism/information":{icon:"maki-information",fields:["information","operator","address","building_area"],moreFields:["level"],geometry:["point","vertex","area"],tags:{tourism:"information"},name:"Information"},"tourism/information/board":{icon:"maki-information",fields:["name","operator","board_type","direction"],geometry:["point","vertex"],tags:{tourism:"information",information:"board"},reference:{key:"information",value:"board"},name:"Information Board"},"tourism/information/guidepost":{icon:"fas-map-signs",fields:["name","elevation","operator","ref"],moreFields:["material"],geometry:["point","vertex"],terms:["signpost"],tags:{tourism:"information",information:"guidepost"},reference:{key:"information",value:"guidepost"},name:"Guidepost"},"tourism/information/map":{icon:"fas-map",fields:["operator","map_type","map_size","direction"],geometry:["point","vertex"],tags:{tourism:"information",information:"map"},reference:{key:"information",value:"map"},name:"Map"},"tourism/information/office":{icon:"maki-information",fields:["name","operator","address","building_area","internet_access","internet_access/fee"],moreFields:["building/levels_building","email","fax","gnis/feature_id","height_building","internet_access/ssid","phone","website","wheelchair"],geometry:["point","vertex","area"],tags:{tourism:"information",information:"office"},reference:{key:"information",value:"office"},name:"Tourist Information Office"},"tourism/information/route_marker":{icon:"maki-information",fields:["ref","operator","colour","material","elevation"],geometry:["point","vertex"],terms:["cairn","painted blaze","route flag","route marker","stone pile","trail blaze","trail post","way marker"],tags:{tourism:"information",information:"route_marker"},reference:{key:"information",value:"route_marker"},name:"Trail Marker"},"tourism/information/terminal":{icon:"maki-information",fields:["operator"],geometry:["point","vertex"],tags:{tourism:"information",information:"terminal"},reference:{key:"information",value:"terminal"},name:"Information Terminal"},"tourism/motel":{icon:"maki-lodging",fields:["name","brand","address","building_area","rooms","internet_access","internet_access/fee"],moreFields:["air_conditioning","brand","building/levels_building","email","fax","gnis/feature_id","height_building","internet_access/ssid","operator","payment_multi","phone","ref/vatin","reservation","smoking","website","wheelchair"],geometry:["point","area"],tags:{tourism:"motel"},terms:["lodging","motor hotel","overnight accommodations"],name:"Motel"},"tourism/museum":{icon:"temaki-museum",fields:["name","operator","operator/type","museum","address","building_area","opening_hours"],moreFields:["air_conditioning","building/levels_building","charge_fee","email","fax","fee","gnis/feature_id","height_building","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["art*","exhibit*","gallery","foundation","hall","institution","paint*","photo*","sculpt*"],tags:{tourism:"museum"},name:"Museum"},"tourism/museum/history":{icon:"temaki-museum",geometry:["point","area"],terms:["artifacts","dioramas","exhibits","exhibitions","foundation","hall","institution"],tags:{tourism:"museum",museum:"history"},reference:{key:"museum",value:"history"},name:"History Museum"},"tourism/picnic_site":{icon:"maki-picnic-site",fields:["name","operator","address","access_simple","capacity"],moreFields:["charge_fee","fee","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi_fee","phone","reservation","smoking","website","wheelchair"],geometry:["point","vertex","area"],terms:["camp"],tags:{tourism:"picnic_site"},name:"Picnic Site"},"tourism/theme_park":{icon:"maki-amusement-park",fields:["name","operator","address","opening_hours"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","website","wheelchair"],geometry:["point","area"],tags:{tourism:"theme_park"},name:"Theme Park"},"tourism/trail_riding_station":{icon:"maki-horse-riding",fields:["name","horse_stables","horse_riding","horse_dressage"],moreFields:["address","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","opening_hours","phone","website"],geometry:["point","area"],tags:{tourism:"trail_riding_station"},name:"Trail Riding Station",matchScore:2},"tourism/viewpoint":{icon:"temaki-binoculars",geometry:["point","vertex"],fields:["direction"],moreFields:["level"],tags:{tourism:"viewpoint"},name:"Viewpoint"},"tourism/wilderness_hut":{icon:"temaki-cabin",fields:["name","operator","address","building_area","fee","payment_multi_fee","charge_fee","fireplace"],moreFields:["gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","reservation","wheelchair"],geometry:["point","area"],terms:["alpine hut","cabin","backcountry hut","bothy","lodge","lodging","overnight accommodations","sleeping shelter","wilderness hut"],tags:{tourism:"wilderness_hut"},name:"Wilderness Hut"},"tourism/zoo":{icon:"temaki-zoo",fields:["name","operator","address","opening_hours","fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","ref/vatin","website","wheelchair"],geometry:["point","area"],terms:["animal"],tags:{tourism:"zoo"},name:"Zoo"},"tourism/zoo/petting":{icon:"fas-horse",geometry:["point","area"],tags:{tourism:"zoo",zoo:"petting_zoo"},reference:{key:"zoo",value:"petting_zoo"},terms:["Children's Zoo","Children's Farm","Petting Farm","farm animals"],name:"Petting Zoo"},"tourism/zoo/safari":{icon:"temaki-zoo",geometry:["point","area"],tags:{tourism:"zoo",zoo:"safari_park"},reference:{key:"zoo",value:"safari_park"},terms:["Drive-Through Zoo","Drive-In Zoo"],name:"Safari Park"},"tourism/zoo/wildlife":{icon:"fas-frog",geometry:["point","area"],tags:{tourism:"zoo",zoo:"wildlife_park"},reference:{key:"zoo",value:"wildlife_park"},terms:["indigenous animals"],name:"Wildlife Park"},traffic_calming:{icon:"temaki-diamond",fields:["traffic_calming","surface","direction_vertex"],geometry:["vertex","line","area"],tags:{traffic_calming:"*"},terms:["bump","hump","slow","speed"],name:"Traffic Calming"},"traffic_calming/bump":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["hump","speed","slow"],tags:{traffic_calming:"bump"},name:"Speed Bump"},"traffic_calming/chicane":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line","area"],terms:["driveway link","speed","slow"],tags:{traffic_calming:"chicane"},name:"Traffic Chicane"},"traffic_calming/choker":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line","area"],terms:["speed","slow"],tags:{traffic_calming:"choker"},name:"Traffic Choker"},"traffic_calming/cushion":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["bump","hump","speed","slow"],tags:{traffic_calming:"cushion"},name:"Speed Cushion"},"traffic_calming/dip":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["speed","slow"],tags:{traffic_calming:"dip"},name:"Dip"},"traffic_calming/hump":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["bump","speed","slow"],tags:{traffic_calming:"hump"},name:"Speed Hump"},"traffic_calming/island":{icon:"temaki-diamond",fields:["surface"],geometry:["vertex","line","area"],terms:["circle","roundabout","slow"],tags:{traffic_calming:"island"},name:"Traffic Island"},"traffic_calming/rumble_strip":{icon:"temaki-diamond",fields:["direction_vertex"],geometry:["vertex","line"],terms:["audible lines","sleeper lines","growlers"],tags:{traffic_calming:"rumble_strip"},name:"Rumble Strip"},"traffic_calming/table":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex"],tags:{traffic_calming:"table"},terms:["flat top","hump","speed","slow"],name:"Speed Table"},traffic_sign_vertex:{icon:"maki-square-stroked",fields:["traffic_sign","traffic_sign/direction"],geometry:["vertex"],tags:{traffic_sign:"*"},terms:["road","highway"],name:"Traffic Sign"},traffic_sign:{icon:"fas-directions",fields:["traffic_sign","direction"],geometry:["point"],tags:{traffic_sign:"*"},terms:["road","highway"],name:"Traffic Sign"},"traffic_sign/city_limit_vertex":{icon:"maki-square-stroked",fields:["traffic_sign","traffic_sign/direction","name"],geometry:["vertex"],tags:{traffic_sign:"city_limit"},terms:["town","village","hamlet","boundary","edge","border","road","highway"],name:"City Limit Sign"},"traffic_sign/city_limit":{icon:"maki-square-stroked",fields:["traffic_sign","direction","name"],geometry:["point"],tags:{traffic_sign:"city_limit"},terms:["town","village","hamlet","boundary","edge","border","road","highway"],name:"City Limit Sign"},"traffic_sign/maxspeed_vertex":{icon:"maki-square-stroked",fields:["traffic_sign","traffic_sign/direction","maxspeed"],geometry:["vertex"],tags:{traffic_sign:"maxspeed"},terms:["max speed","maximum speed","road","highway"],name:"Speed Limit Sign"},"traffic_sign/maxspeed":{icon:"maki-square-stroked",fields:["traffic_sign","direction","maxspeed"],geometry:["point"],tags:{traffic_sign:"maxspeed"},terms:["max speed","maximum speed","road","highway"],name:"Speed Limit Sign"},"type/multipolygon":{icon:"iD-multipolygon",geometry:["area","relation"],tags:{type:"multipolygon"},removeTags:{},name:"Multipolygon",searchable:false,matchScore:0.1},"type/boundary":{icon:"iD-boundary",fields:["name","boundary"],geometry:["relation"],tags:{type:"boundary"},name:"Boundary"},"type/boundary/administrative":{icon:"iD-boundary",fields:["name","admin_level"],moreFields:["gnis/feature_id"],geometry:["relation"],tags:{type:"boundary",boundary:"administrative"},reference:{key:"boundary",value:"administrative"},name:"Administrative Boundary"},"type/connectivity":{icon:"iD-relation",fields:["connectivity"],geometry:["relation"],tags:{type:"connectivity"},name:"Lane Connectivity"},"type/enforcement":{icon:"iD-relation",fields:["enforcement"],geometry:["relation"],tags:{type:"enforcement"},name:"Enforcement"},"type/enforcement/maxspeed":{icon:"iD-relation",fields:["maxspeed"],geometry:["relation"],tags:{type:"enforcement",enforcement:"maxspeed"},reference:{key:"enforcement",value:"maxspeed"},terms:["maxspeed","radar","speed camera"],name:"Speed Limit Enforcement"},"type/public_transport/stop_area_group":{icon:"iD-relation",fields:["name","ref","network","operator"],geometry:["relation"],tags:{type:"public_transport",public_transport:"stop_area_group"},reference:{key:"public_transport",value:"stop_area_group"},name:"Transit Stop Area Group"},"type/restriction":{icon:"iD-restriction",fields:["restriction","except"],geometry:["relation"],tags:{type:"restriction"},name:"Restriction"},"type/restriction/no_left_turn":{icon:"iD-restriction-no-left-turn",geometry:["relation"],tags:{type:"restriction",restriction:"no_left_turn"},name:"No Left Turn"},"type/restriction/no_right_turn":{icon:"iD-restriction-no-right-turn",geometry:["relation"],tags:{type:"restriction",restriction:"no_right_turn"},name:"No Right Turn"},"type/restriction/no_straight_on":{icon:"iD-restriction-no-straight-on",geometry:["relation"],tags:{type:"restriction",restriction:"no_straight_on"},name:"No Straight On"},"type/restriction/no_u_turn":{icon:"iD-restriction-no-u-turn",geometry:["relation"],tags:{type:"restriction",restriction:"no_u_turn"},name:"No U-turn"},"type/restriction/only_left_turn":{icon:"iD-restriction-only-left-turn",geometry:["relation"],tags:{type:"restriction",restriction:"only_left_turn"},name:"Only Left Turn"},"type/restriction/only_right_turn":{icon:"iD-restriction-only-right-turn",geometry:["relation"],tags:{type:"restriction",restriction:"only_right_turn"},name:"Only Right Turn"},"type/restriction/only_straight_on":{icon:"iD-restriction-only-straight-on",geometry:["relation"],tags:{type:"restriction",restriction:"only_straight_on"},name:"Only Straight On"},"type/restriction/only_u_turn":{icon:"iD-restriction-only-u-turn",geometry:["relation"],tags:{type:"restriction",restriction:"only_u_turn"},name:"Only U-turn"},"type/route_master":{icon:"iD-route-master",fields:["name","route_master","ref","operator","network"],moreFields:["colour","interval","opening_hours","wheelchair"],geometry:["relation"],tags:{type:"route_master"},name:"Route Master"},"type/route":{icon:"iD-route",fields:["name","route","ref_route","operator","network","network/type"],geometry:["relation"],tags:{type:"route"},name:"Route"},"type/route/bicycle":{icon:"maki-bicycle",fields:["name","ref_route","network_bicycle","cycle_network","network/type","to","from"],geometry:["relation"],tags:{type:"route",route:"bicycle"},name:"Cycle Route"},"type/route/bus":{icon:"maki-bus",fields:["{type/route/train}"],moreFields:["{type/route/train}"],geometry:["relation"],tags:{type:"route",route:"bus"},name:"Bus Route"},"type/route/detour":{icon:"iD-route-detour",fields:["name","ref_route","to","from"],geometry:["relation"],tags:{type:"route",route:"detour"},name:"Detour Route"},"type/route/ferry":{icon:"maki-ferry",fields:["{route/ferry}"],moreFields:["{route/ferry}"],geometry:["relation"],tags:{type:"route",route:"ferry"},name:"Ferry Route"},"type/route/foot":{icon:"temaki-pedestrian",fields:["name","ref_route","operator","network_foot","network/type","to","from"],geometry:["relation"],tags:{type:"route",route:"foot"},name:"Foot Route"},"type/route/hiking":{icon:"fas-hiking",fields:["name","ref_route","operator","network_foot","network/type","description","distance","to","from"],geometry:["relation"],tags:{type:"route",route:"hiking"},name:"Hiking Route"},"type/route/horse":{icon:"maki-horse-riding",fields:["name","ref_route","operator","network_horse","network/type","description","distance","to","from"],geometry:["relation"],tags:{type:"route",route:"horse"},name:"Riding Route"},"type/route/light_rail":{icon:"temaki-light_rail",fields:["{type/route/train}"],moreFields:["{type/route/train}"],geometry:["relation"],tags:{type:"route",route:"light_rail"},name:"Light Rail Route"},"type/route/monorail":{icon:"temaki-monorail",fields:["{type/route/train}"],moreFields:["{type/route/train}"],geometry:["relation"],tags:{type:"route",route:"monorail"},name:"Monorail Route"},"type/route/pipeline":{icon:"iD-pipeline-line",fields:["name","ref_route","operator","to","from"],geometry:["relation"],tags:{type:"route",route:"pipeline"},name:"Pipeline Route"},"type/route/piste":{icon:"fas-skiing",fields:["name","piste/type","colour","ref_route","operator","to","from"],geometry:["relation"],tags:{type:"route",route:"piste"},name:"Piste/Ski Route"},"type/route/power":{icon:"iD-power-line",fields:["name","ref_route","operator","to","from"],geometry:["relation"],tags:{type:"route",route:"power"},name:"Power Route"},"type/route/road":{icon:"iD-highway-unclassified",fields:["name","ref_route","network_road","network/type","to","from"],geometry:["relation"],tags:{type:"route",route:"road"},name:"Road Route"},"type/route/subway":{icon:"temaki-subway",fields:["{type/route/train}"],moreFields:["{type/route/train}"],geometry:["relation"],tags:{type:"route",route:"subway"},name:"Subway Route"},"type/route/train":{icon:"iD-railway-rail",fields:["name","ref_route","operator","network","network/type","to","from"],moreFields:["colour","duration","interval","opening_hours","wheelchair"],geometry:["relation"],tags:{type:"route",route:"train"},name:"Train Route"},"type/route/tram":{icon:"temaki-tram",fields:["{type/route/train}"],moreFields:["{type/route/train}"],geometry:["relation"],tags:{type:"route",route:"tram"},name:"Tram Route"},"type/site":{icon:"iD-relation",fields:["name","site"],geometry:["relation"],tags:{type:"site"},name:"Site"},"type/waterway":{icon:"iD-waterway-stream",fields:["name","waterway","ref"],geometry:["relation"],tags:{type:"waterway"},name:"Waterway"},"waterway/riverbank":{icon:"maki-water",geometry:["area"],tags:{waterway:"riverbank"},name:"Riverbank",searchable:false},"waterway/boatyard":{icon:"temaki-boat",fields:["name","operator"],moreFields:["address","email","fax","gnis/feature_id","phone","website","wheelchair"],geometry:["area","vertex","point"],tags:{waterway:"boatyard"},name:"Boatyard"},"waterway/canal":{icon:"iD-waterway-canal",fields:["name","structure_waterway","width","intermittent","lock"],moreFields:["fishing","gnis/feature_id","salt","tidal"],geometry:["line"],tags:{waterway:"canal"},name:"Canal"},"waterway/canal/lock":{icon:"iD-waterway-canal",fields:["name","width","lock"],moreFields:["gnis/feature_id","intermittent","salt","tidal"],geometry:["line"],tags:{waterway:"canal",lock:"yes"},name:"Canal Lock"},"waterway/dam":{icon:"maki-dam",geometry:["point","vertex","line","area"],fields:["name","operator","gnis/feature_id","height","material"],moreFields:["seamark/type","website"],tags:{waterway:"dam"},name:"Dam"},"waterway/ditch":{icon:"iD-waterway-ditch",fields:["{waterway/drain}"],moreFields:["{waterway/drain}"],geometry:["line"],tags:{waterway:"ditch"},name:"Ditch"},"waterway/dock":{icon:"maki-harbor",fields:["name","dock","operator"],geometry:["area","vertex","point"],terms:["boat","ship","vessel","marine"],tags:{waterway:"dock"},name:"Wet Dock / Dry Dock"},"waterway/drain":{icon:"iD-waterway-ditch",fields:["structure_waterway","intermittent"],moreFields:["covered"],geometry:["line"],tags:{waterway:"drain"},name:"Drain"},"waterway/fish_pass":{icon:"temaki-fish_ladder",fields:["name","structure_waterway","width","seasonal"],moreFields:["covered","gnis/feature_id","salt"],geometry:["line"],terms:["eel ladder","eel pass","fish ladder","fish migration","fish passage","fish siphon","fish steps","fish way","fishladder","fishpass","fishsteps","fishway"],tags:{waterway:"fish_pass"},name:"Fish Pass"},"waterway/fuel":{icon:"maki-fuel",fields:["name","operator","address","opening_hours","fuel_multi"],moreFields:["brand","building","email","fax","payment_multi","phone","seamark/type","website","wheelchair"],geometry:["point","area"],terms:["petrol","gas","diesel","boat"],tags:{waterway:"fuel"},name:"Marine Fuel Station"},"waterway/lock_gate":{icon:"maki-dam",geometry:["vertex","line"],fields:["name","ref","height","material"],tags:{waterway:"lock_gate"},addTags:{waterway:"lock_gate","seamark:type":"gate"},terms:["canal"],name:"Lock Gate"},"waterway/milestone":{icon:"temaki-milestone",fields:["distance","direction_vertex"],moreFields:["seamark/type"],geometry:["point","vertex"],tags:{waterway:"milestone"},terms:["milestone","marker"],name:"Waterway Milestone"},"waterway/river":{icon:"iD-waterway-river",fields:["name","structure_waterway","width","intermittent","tidal"],moreFields:["covered","fishing","gnis/feature_id","salt"],geometry:["line"],terms:["beck","branch","brook","course","creek","estuary","rill","rivulet","run","runnel","stream","tributary","watercourse"],tags:{waterway:"river"},name:"River"},"waterway/sanitary_dump_station":{icon:"temaki-storage_tank",fields:["name","operator","access_simple","fee","payment_multi_fee","charge_fee","water_point"],moreFields:["opening_hours","seamark/type"],geometry:["point","vertex","area"],terms:["Boat","Watercraft","Sanitary","Dump Station","Pumpout","Pump out","Elsan","CDP","CTDP","Chemical Toilet"],tags:{waterway:"sanitary_dump_station"},name:"Marine Toilet Disposal"},"waterway/stream_intermittent":{icon:"iD-waterway-stream",fields:["{waterway/stream}"],moreFields:["{waterway/stream}"],geometry:["line"],terms:["arroyo","beck","branch","brook","burn","course","creek","drift","flood","flow","gully","run","runnel","rush","spate","spritz","tributary","wadi","wash","watercourse"],tags:{waterway:"stream",intermittent:"yes"},reference:{key:"waterway",value:"stream"},name:"Intermittent Stream"},"waterway/stream":{icon:"iD-waterway-stream",fields:["name","structure_waterway","width","intermittent"],moreFields:["covered","fishing","gnis/feature_id","salt","tidal"],geometry:["line"],terms:["beck","branch","brook","burn","course","creek","current","drift","flood","flow","freshet","race","rill","rindle","rivulet","run","runnel","rush","spate","spritz","surge","tide","torrent","tributary","watercourse"],tags:{waterway:"stream"},name:"Stream"},"waterway/tidal_channel":{icon:"iD-waterway-stream",fields:["name","structure_waterway","width","salt","tidal","intermittent"],moreFields:["covered","fishing","gnis/feature_id"],geometry:["line"],terms:["coastal","pill","intertidal","mangroves","marine","salt marsh","tidal creek","tidal flat","tidal inlet","waterway"],tags:{waterway:"tidal_channel"},addTags:{waterway:"tidal_channel",tidal:"yes"},name:"Tidal Channel"},"waterway/water_point":{icon:"maki-drinking-water",fields:["{amenity/water_point}"],moreFields:["{amenity/water_point}"],geometry:["point","vertex","area"],tags:{waterway:"water_point"},terms:["water faucet","water point","water tap","water source","water spigot"],name:"Marine Drinking Water"},"waterway/waterfall":{icon:"maki-waterfall",fields:["name","height","width","intermittent"],moreFields:["gnis/feature_id"],geometry:["vertex"],terms:["fall"],tags:{waterway:"waterfall"},name:"Waterfall"},"waterway/weir":{icon:"maki-dam",fields:["name","operator","height","material"],moreFields:["gnis/feature_id","seamark/type"],geometry:["vertex","line"],terms:["low-head dam","low-rise dam","wier"],tags:{waterway:"weir"},name:"Weir"},"amenity/animal_boarding/PetsHotel":{name:"PetsHotel",icon:"maki-veterinary",imageURL:"https://graph.facebook.com/PetSmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q67141961",amenity:"animal_boarding"},addTags:{amenity:"animal_boarding",animal_boarding:"dog;cat",brand:"PetsHotel","brand:wikidata":"Q67141961",name:"PetsHotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ABANCA":{name:"ABANCA",icon:"maki-bank",imageURL:"https://graph.facebook.com/SomosAbanca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9598744",amenity:"bank"},addTags:{amenity:"bank",brand:"ABANCA","brand:wikidata":"Q9598744","brand:wikipedia":"es:Abanca",name:"ABANCA",official_name:"ABANCA Corporación Bancaria"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ABN AMRO":{name:"ABN AMRO",icon:"maki-bank",imageURL:"https://graph.facebook.com/abnamro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q287471",amenity:"bank"},addTags:{amenity:"bank",brand:"ABN AMRO","brand:wikidata":"Q287471","brand:wikipedia":"nl:ABN AMRO Group",name:"ABN AMRO",official_name:"ABN AMRO Bank N.V."},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ABSA":{name:"ABSA",icon:"maki-bank",imageURL:"https://graph.facebook.com/AbsaSouthAfrica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58641733",amenity:"bank"},addTags:{amenity:"bank",brand:"ABSA","brand:wikidata":"Q58641733","brand:wikipedia":"en:Absa Group Limited",name:"ABSA"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"amenity/bank/AIB":{name:"AIB",icon:"maki-bank",imageURL:"https://graph.facebook.com/aib/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1642179",amenity:"bank"},addTags:{amenity:"bank",brand:"AIB","brand:wikidata":"Q1642179","brand:wikipedia":"en:Allied Irish Banks",name:"AIB",official_name:"Allied Irish Banks"},countryCodes:["gb","ie"],terms:["aib bank","allied irish bank"],matchScore:2,suggestion:true},"amenity/bank/AMP":{name:"AMP",icon:"maki-bank",imageURL:"https://graph.facebook.com/AMPaustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q295261",amenity:"bank"},addTags:{amenity:"bank",brand:"AMP","brand:wikidata":"Q295261","brand:wikipedia":"en:AMP Limited",name:"AMP",official_name:"AMP Limited"},countryCodes:["au","nz"],terms:["amp bank"],matchScore:2,suggestion:true},"amenity/bank/ANZ":{name:"ANZ",icon:"maki-bank",imageURL:"https://graph.facebook.com/ANZAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714641",amenity:"bank"},addTags:{amenity:"bank",brand:"ANZ","brand:wikidata":"Q714641","brand:wikipedia":"en:Australia and New Zealand Banking Group",name:"ANZ",official_name:"Australia and New Zealand Banking Group Limited"},countryCodes:["au","nz"],terms:["anz bank"],matchScore:2,suggestion:true},"amenity/bank/ASB Bank":{name:"ASB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/ASBBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q297214",amenity:"bank"},addTags:{amenity:"bank",brand:"ASB Bank","brand:wikidata":"Q297214","brand:wikipedia":"en:ASB Bank",name:"ASB Bank"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ATB Financial":{name:"ATB Financial",icon:"maki-bank",imageURL:"https://graph.facebook.com/ATBFinancial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q298762",amenity:"bank"},addTags:{amenity:"bank",brand:"ATB Financial","brand:wikidata":"Q298762","brand:wikipedia":"en:ATB Financial",name:"ATB Financial",official_name:"Alberta Treasury Branches"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/AXA":{name:"AXA",icon:"maki-bank",imageURL:"https://graph.facebook.com/axainsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q160054",amenity:"bank"},addTags:{amenity:"bank",brand:"AXA","brand:wikidata":"Q160054","brand:wikipedia":"en:AXA",name:"AXA"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Access Bank":{name:"Access Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AccessBankPlc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4672418",amenity:"bank"},addTags:{amenity:"bank",brand:"Access Bank","brand:wikidata":"Q4672418","brand:wikipedia":"en:Access Bank plc",name:"Access Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/ActivoBank":{name:"ActivoBank",icon:"maki-bank",imageURL:"https://graph.facebook.com/ActivoBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9581725",amenity:"bank"},addTags:{amenity:"bank",brand:"ActivoBank","brand:wikidata":"Q9581725","brand:wikipedia":"pt:ActivoBank",name:"ActivoBank"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Addiko Bank":{name:"Addiko Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/addiko.ba/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27926559",amenity:"bank"},addTags:{amenity:"bank",brand:"Addiko Bank","brand:wikidata":"Q27926559","brand:wikipedia":"en:Addiko Bank",name:"Addiko Bank"},countryCodes:["ba","hr","me","rs","si"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Affinity Credit Union":{name:"Affinity Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/affinitycu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4688969",amenity:"bank"},addTags:{amenity:"bank",brand:"Affinity Credit Union","brand:wikidata":"Q4688969","brand:wikipedia":"en:Affinity Credit Union",name:"Affinity Credit Union"},countryCodes:["ca"],terms:["affinity"],matchScore:2,suggestion:true},"amenity/bank/Agribank (USA)":{name:"Agribank (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/63806221089/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4693829",amenity:"bank"},addTags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q4693829","brand:wikipedia":"en:AgriBank",name:"Agribank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Agribank (Vietnam)":{name:"Agribank (Vietnam)",icon:"maki-bank",imageURL:"https://graph.facebook.com/AgribankVN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1924723",amenity:"bank"},addTags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q1924723","brand:wikipedia":"vi:Ngân hàng Nông nghiệp và Phát triển Nông thôn Việt Nam",name:"Agribank",official_name:"Ngân hàng Nông nghiệp và Phát triển Nông thôn Việt Nam","official_name:en":"Vietnam Bank for Agriculture and Rural Development"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Agribank (Zimbabwe)":{name:"Agribank (Zimbabwe)",icon:"maki-bank",imageURL:"https://graph.facebook.com/agribankzim/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4693887",amenity:"bank"},addTags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q4693887","brand:wikipedia":"en:Agricultural Development Bank of Zimbabwe",name:"Agribank"},countryCodes:["zw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Akbank":{name:"Akbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Akbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q416624",amenity:"bank"},addTags:{amenity:"bank",brand:"Akbank","brand:wikidata":"Q416624","brand:wikipedia":"tr:Akbank",name:"Akbank"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Aktia":{name:"Aktia",icon:"maki-bank",imageURL:"https://graph.facebook.com/aktia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4353753",amenity:"bank"},addTags:{amenity:"bank",brand:"Aktia","brand:wikidata":"Q4353753","brand:wikipedia":"fi:Aktia Pankki",name:"Aktia"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Alior Bank":{name:"Alior Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AliorBankSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9148395",amenity:"bank"},addTags:{amenity:"bank",brand:"Alior Bank","brand:wikidata":"Q9148395","brand:wikipedia":"pl:Alior Bank",name:"Alior Bank"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Allahabad Bank":{name:"Allahabad Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AllahabadBankOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2018840",amenity:"bank"},addTags:{amenity:"bank",brand:"Allahabad Bank","brand:wikidata":"Q2018840","brand:wikipedia":"en:Allahabad Bank",name:"Allahabad Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Allied Bank (Pakistan)":{name:"Allied Bank (Pakistan)",icon:"maki-bank",imageURL:"https://graph.facebook.com/alliedbankpk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4732553",amenity:"bank"},addTags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732553","brand:wikipedia":"en:Allied Bank Limited",name:"Allied Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Allied Bank (defunct bank in Philipiness)":{name:"Allied Bank (defunct bank in Philipiness)",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAllied%20Bank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4732555",amenity:"bank"},addTags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732555","brand:wikipedia":"en:Allied Banking Corporation",name:"Allied Bank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Alpha Bank":{name:"Alpha Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/125297404838251/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q747394",amenity:"bank"},addTags:{amenity:"bank",brand:"Alpha Bank","brand:wikidata":"Q747394","brand:wikipedia":"en:Alpha Bank",name:"Alpha Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Alterna Savings":{name:"Alterna Savings",icon:"maki-bank",imageURL:"https://graph.facebook.com/alternasavings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4736322",amenity:"bank"},addTags:{amenity:"bank",brand:"Alterna Savings","brand:wikidata":"Q4736322","brand:wikipedia":"en:Alterna Savings",name:"Alterna Savings"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/America First Credit Union":{name:"America First Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/americafirstcu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4742758",amenity:"bank"},addTags:{amenity:"bank",brand:"America First Credit Union","brand:wikidata":"Q4742758","brand:wikipedia":"en:America First Credit Union",name:"America First Credit Union",short_name:"AFCU"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Andhra Bank":{name:"Andhra Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/official.andhrabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003476",amenity:"bank"},addTags:{amenity:"bank",brand:"Andhra Bank","brand:wikidata":"Q2003476","brand:wikipedia":"en:Andhra Bank",name:"Andhra Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Antonveneta":{name:"Antonveneta",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3633689",amenity:"bank"},addTags:{amenity:"bank",brand:"Antonveneta","brand:wikidata":"Q3633689","brand:wikipedia":"en:Banca Antonveneta",name:"Antonveneta"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Apple Bank":{name:"Apple Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AppleBankfan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4781125",amenity:"bank"},addTags:{amenity:"bank",brand:"Apple Bank","brand:wikidata":"Q4781125","brand:wikipedia":"en:Apple Bank for Savings",name:"Apple Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Argenta":{name:"Argenta",icon:"maki-bank",imageURL:"https://graph.facebook.com/argenta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q932856",amenity:"bank"},addTags:{amenity:"bank",brand:"Argenta","brand:wikidata":"Q932856","brand:wikipedia":"nl:Argenta Groep",name:"Argenta"},countryCodes:["be","lu","nl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Arvest Bank":{name:"Arvest Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/ArvestBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4802393",amenity:"bank"},addTags:{amenity:"bank",brand:"Arvest Bank","brand:wikidata":"Q4802393","brand:wikipedia":"en:Arvest Bank",name:"Arvest Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Asia United Bank":{name:"Asia United Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AUB.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4806482",amenity:"bank"},addTags:{amenity:"bank",brand:"Asia United Bank","brand:wikidata":"Q4806482","brand:wikipedia":"tl:Asia United Bank",name:"Asia United Bank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Askari Bank":{name:"Askari Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/askaribankpakistan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4807137",amenity:"bank"},addTags:{amenity:"bank",brand:"Askari Bank","brand:wikidata":"Q4807137","brand:wikipedia":"en:Askari Bank",name:"Askari Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Associated Bank":{name:"Associated Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/associatedbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4809155",amenity:"bank"},addTags:{amenity:"bank",brand:"Associated Bank","brand:wikidata":"Q4809155","brand:wikipedia":"en:Associated Banc-Corp",name:"Associated Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Attijariwafa Bank":{name:"Attijariwafa Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AttijariWB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q758052",amenity:"bank"},addTags:{amenity:"bank",brand:"Attijariwafa Bank","brand:wikidata":"Q758052","brand:wikipedia":"en:Attijariwafa Bank",name:"Attijariwafa Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Axis Bank":{name:"Axis Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/axisbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003549",amenity:"bank"},addTags:{amenity:"bank",brand:"Axis Bank","brand:wikidata":"Q2003549","brand:wikipedia":"en:Axis Bank",name:"Axis Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BAC Credomatic":{name:"BAC Credomatic",icon:"maki-bank",imageURL:"https://graph.facebook.com/BACCredomaticSV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5715556",amenity:"bank"},addTags:{amenity:"bank",brand:"BAC Credomatic","brand:wikidata":"Q5715556","brand:wikipedia":"en:BAC Credomatic",name:"BAC Credomatic"},terms:["bac"],matchScore:2,suggestion:true},"amenity/bank/BAI":{name:"BAI",icon:"maki-bank",imageURL:"https://graph.facebook.com/bai.angola/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806172",amenity:"bank"},addTags:{amenity:"bank",brand:"BAI","brand:wikidata":"Q806172","brand:wikipedia":"en:Banco Angolano de Investimentos",name:"BAI",official_name:"Banco Angolano de Investimentos"},countryCodes:["ao"],terms:["banco africano de investimentos"],matchScore:2,suggestion:true},"amenity/bank/BAWAG PSK":{name:"BAWAG PSK",icon:"maki-bank",imageURL:"https://graph.facebook.com/bawag.psk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q379938",amenity:"bank"},addTags:{amenity:"bank",brand:"BAWAG PSK","brand:wikidata":"Q379938","brand:wikipedia":"en:BAWAG P.S.K.",name:"BAWAG PSK"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BB&T":{name:"BB&T",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBTBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q795486",amenity:"bank"},addTags:{amenity:"bank",brand:"BB&T","brand:wikidata":"Q795486","brand:wikipedia":"en:BB&T",name:"BB&T",official_name:"Branch Banking and Trust Company"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BBBank":{name:"BBBank",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBBank.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q795504",amenity:"bank"},addTags:{amenity:"bank",brand:"BBBank","brand:wikidata":"Q795504","brand:wikipedia":"en:BBBank",name:"BBBank"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BBVA":{name:"BBVA",icon:"maki-bank",imageURL:"https://graph.facebook.com/GrupoBBVA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806189",amenity:"bank"},addTags:{amenity:"bank",brand:"BBVA","brand:wikidata":"Q806189","brand:wikipedia":"en:Banco Bilbao Vizcaya Argentaria",name:"BBVA",official_name:"Banco Bilbao Vizcaya Argentaria"},terms:[],matchScore:2,suggestion:true},"amenity/bank/BBVA Bancomer":{name:"BBVA Bancomer",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBVASeguros.mx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2876794",amenity:"bank"},addTags:{amenity:"bank",brand:"BBVA Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"BBVA Bancomer"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BBVA Compass":{name:"BBVA Compass",icon:"maki-bank",imageURL:"https://graph.facebook.com/bbvaintheusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835088",amenity:"bank"},addTags:{amenity:"bank",brand:"BBVA Compass","brand:wikidata":"Q4835088","brand:wikipedia":"en:BBVA Compass",name:"BBVA Compass",official_name:"BBVA Compass Bancshares"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BBVA Continental":{name:"BBVA Continental",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBVAenPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835089",amenity:"bank"},addTags:{amenity:"bank",brand:"BBVA Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"BBVA Continental"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BBVA Francés":{name:"BBVA Francés",icon:"maki-bank",imageURL:"https://graph.facebook.com/bbva.argentina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2876788",amenity:"bank"},addTags:{amenity:"bank",brand:"BBVA Francés","brand:en":"BBVA France","brand:fr":"BBVA France","brand:wikidata":"Q2876788","brand:wikipedia":"en:BBVA Francés",name:"BBVA Francés","name:en":"BBVA France","name:fr":"BBVA Francés"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BCA":{name:"BCA",icon:"maki-bank",imageURL:"https://graph.facebook.com/316954705121733/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806626",amenity:"bank"},addTags:{amenity:"bank",brand:"BCA","brand:wikidata":"Q806626","brand:wikipedia":"id:Bank Central Asia",name:"BCA",official_name:"Bank Central Asia"},terms:["bank bca"],matchScore:2,suggestion:true},"amenity/bank/BCEE":{name:"BCEE",icon:"maki-bank",imageURL:"https://graph.facebook.com/spuerkeess/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q668996",amenity:"bank"},addTags:{amenity:"bank",brand:"BCEE","brand:wikidata":"Q668996","brand:wikipedia":"fr:Banque et caisse d'épargne de l'État",name:"BCEE",official_name:"Banque et Caisse d'Épargne de l'État"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BCI":{name:"BCI",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoBci/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882083",amenity:"bank"},addTags:{amenity:"bank",brand:"BCI","brand:wikidata":"Q2882083","brand:wikipedia":"es:Banco de Crédito e Inversiones",name:"BCI",official_name:"Banco de Crédito e Inversiones","official_name:en":"Bank of Credit and Investments","official_name:es":"Banco de Crédito e Inversiones"},terms:["banco bci"],matchScore:2,suggestion:true},"amenity/bank/BCP (Bolivia)":{name:"BCP (Bolivia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancodeCreditoBolivia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16826675",amenity:"bank"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q16826675","brand:wikipedia":"es:Banco de Crédito de Bolivia",name:"BCP",official_name:"Banco de Crédito de Bolivia","official_name:en":"Credit Bank of Bolivia","official_name:es":"Banco de Crédito de Bolivia"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BCP (France)":{name:"BCP (France)",icon:"maki-bank",imageURL:"https://graph.facebook.com/millenniumbcp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118581",amenity:"bank"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"},countryCodes:["fr"],terms:["banque bcp","bcp"],matchScore:2,suggestion:true},"amenity/bank/BCP (Luxembourg)":{name:"BCP (Luxembourg)",icon:"maki-bank",imageURL:"https://graph.facebook.com/millenniumbcp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118581",amenity:"bank"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"},countryCodes:["lu"],terms:["banque bcp","bcp"],matchScore:2,suggestion:true},"amenity/bank/BCP (Peru)":{name:"BCP (Peru)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancodecreditobcp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854124",amenity:"bank"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q4854124","brand:wikipedia":"es:Banco de Crédito del Perú",name:"BCP",official_name:"Banco de Crédito del Perú","official_name:en":"Credit Bank of Peru","official_name:es":"Banco de Crédito del Perú"},countryCodes:["pe"],terms:["banco de crédito del perú"],matchScore:2,suggestion:true},"amenity/bank/BCR (Banca Comercială Română)":{name:"BCR (Banca Comercială Română)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BCRRomania/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806149",amenity:"bank"},addTags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q806149","brand:wikipedia":"ro:Banca Comercială Română",name:"BCR",official_name:"Banca Comercială Română","official_name:en":"Romanian Commercial Bank","official_name:ro":"Banca Comercială Română"},countryCodes:["ro"],terms:["banca comercială română"],matchScore:2,suggestion:true},"amenity/bank/BCR (Costa Rica)":{name:"BCR (Costa Rica)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoBCR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6951632",amenity:"bank"},addTags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q6951632","brand:wikipedia":"es:Banco de Costa Rica",name:"BCR",official_name:"Banco de Costa Rica","official_name:en":"Bank of Costa Rica","official_name:es":"Banco de Costa Rica"},countryCodes:["cr"],terms:["banco de costa rica"],matchScore:2,suggestion:true},"amenity/bank/BDM":{name:"BDM",icon:"maki-bank",imageURL:"https://graph.facebook.com/bdmbot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883022",amenity:"bank"},addTags:{amenity:"bank",brand:"BDM","brand:wikidata":"Q2883022","brand:wikipedia":"fr:Banque de développement du Mali",name:"BDM",official_name:"Banque du Développement du Mali","official_name:en":"Mali Development Bank","official_name:fr":"Banque du Développement du Mali"},countryCodes:["ml"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BDO":{name:"BDO",icon:"maki-bank",imageURL:"https://graph.facebook.com/BDOUnibank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854129",amenity:"bank"},addTags:{alt_name:"Banco de Oro",amenity:"bank",brand:"BDO","brand:wikidata":"Q4854129","brand:wikipedia":"en:Banco de Oro",name:"BDO"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BECU":{name:"BECU",icon:"maki-bank",imageURL:"https://graph.facebook.com/becu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835409",amenity:"bank"},addTags:{amenity:"bank",brand:"BECU","brand:wikidata":"Q4835409","brand:wikipedia":"en:BECU",name:"BECU"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BGL BNP Paribas":{name:"BGL BNP Paribas",icon:"maki-bank",imageURL:"https://graph.facebook.com/BGL.BNP.Paribas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q795898",amenity:"bank"},addTags:{amenity:"bank",brand:"BGL BNP Paribas","brand:wikidata":"Q795898","brand:wikipedia":"fr:BGL BNP Paribas",name:"BGL BNP Paribas"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BGŻ BNP Paribas":{name:"BGŻ BNP Paribas",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNPParibasBankPolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20744004",amenity:"bank"},addTags:{amenity:"bank",brand:"BGŻ BNP Paribas","brand:wikidata":"Q20744004","brand:wikipedia":"pl:BNP Paribas Bank Polska",name:"BGŻ BNP Paribas"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BIAT":{name:"BIAT",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanqueInternationaleArabedeTunisie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q690739",amenity:"bank"},addTags:{amenity:"bank",brand:"BIAT","brand:wikidata":"Q690739","brand:wikipedia":"fr:Banque internationale arabe de Tunisie",name:"BIAT",official_name:"Banque internationale arabe de Tunisie","official_name:en":"Arab International Bank of Tunisia","official_name:fr":"Banque internationale arabe de Tunisie"},countryCodes:["tn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BIDV":{name:"BIDV",icon:"maki-bank",imageURL:"https://graph.facebook.com/BIDVbankvietnam/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1003180",amenity:"bank"},addTags:{amenity:"bank",brand:"BIDV","brand:wikidata":"Q1003180","brand:wikipedia":"vi:Ngân hàng Đầu tư và Phát triển Việt Nam",name:"BIDV",official_name:"Ngân hàng Đầu tư và Phát triển Việt Nam","official_name:en":"Bank for Investment and Development of Vietnam","official_name:vi":"Ngân hàng Đầu tư và Phát triển Việt Nam"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BIL":{name:"BIL",icon:"maki-bank",imageURL:"https://graph.facebook.com/BIL1856/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883404",amenity:"bank"},addTags:{amenity:"bank",brand:"BIL","brand:wikidata":"Q2883404","brand:wikipedia":"en:Banque Internationale à Luxembourg",name:"BIL",official_name:"Banque Internationale à Luxembourg","official_name:en":"International Bank in Luxembourg","official_name:fr":"Banque Internationale à Luxembourg"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BMCE Bank":{name:"BMCE Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/BMCEBankOfAfrica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2300433",amenity:"bank"},addTags:{amenity:"bank",brand:"BMCE Bank","brand:wikidata":"Q2300433","brand:wikipedia":"ar:البنك المغربي للتجارة الخارجية",name:"BMCE Bank",official_name:"البنك المغربي للتجارة الخارجية‎","official_name:ar":"البنك المغربي للتجارة الخارجية‎","official_name:en":"Moroccan Bank of Foreign Commerce"},countryCodes:["ma"],terms:["bmce"],matchScore:2,suggestion:true},"amenity/bank/BMCI":{name:"BMCI",icon:"maki-bank",imageURL:"https://graph.facebook.com/bmcigroupebnpparibas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883409",amenity:"bank"},addTags:{amenity:"bank",brand:"BMCI","brand:wikidata":"Q2883409","brand:wikipedia":"ar:البنك المغربي للتجارة والصناعة",name:"BMCI"},countryCodes:["ma"],terms:["bmci bank"],matchScore:2,suggestion:true},"amenity/bank/BMN":{name:"BMN",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBMN%20nuevo%20logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3754900",amenity:"bank"},addTags:{amenity:"bank",brand:"BMN","brand:wikidata":"Q3754900","brand:wikipedia":"es:Banco Mare Nostrum",name:"BMN",official_name:"Banco Mare Nostrum"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BMO Harris Bank (USA)":{name:"BMO Harris Bank (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bmoharrisbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835981",amenity:"bank"},addTags:{amenity:"bank",brand:"BMO Harris Bank","brand:wikidata":"Q4835981","brand:wikipedia":"en:BMO Harris Bank",name:"BMO Harris Bank"},countryCodes:["us"],terms:["bank of montreal","bmo","bmo bank of montreal","bmo harris bank","harris bank"],matchScore:2,suggestion:true},"amenity/bank/BMO (Canada)":{name:"BMO (Canada)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BMOcommunity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806693",amenity:"bank"},addTags:{amenity:"bank",brand:"BMO","brand:wikidata":"Q806693","brand:wikipedia":"en:Bank of Montreal",name:"BMO",official_name:"Bank of Montreal"},countryCodes:["ca"],terms:["bank of montreal","banque de montréal","bmo","bmo bank of montreal","bmo banque de montréal"],matchScore:2,suggestion:true},"amenity/bank/BNA (Algeria)":{name:"BNA (Algeria)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bnalgerie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883410",amenity:"bank"},addTags:{amenity:"bank",brand:"BNA","brand:wikidata":"Q2883410","brand:wikipedia":"fr:Banque nationale d'Algérie",name:"BNA",official_name:"Banque nationale d'Algérie","official_name:en":"National Bank of Algeria","official_name:fr":"Banque nationale d'Algérie"},countryCodes:["dz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BNA (Tunisia)":{name:"BNA (Tunisia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanqueNationaleAgricole/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883413",amenity:"bank"},addTags:{amenity:"bank",brand:"BNA","brand:wikidata":"Q2883413","brand:wikipedia":"fr:Banque nationale agricole",name:"BNA"},countryCodes:["tn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BNDA":{name:"BNDA",icon:"maki-bank",imageURL:"https://graph.facebook.com/MaliBNDA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30594734",amenity:"bank"},addTags:{amenity:"bank",brand:"BNDA","brand:wikidata":"Q30594734","brand:wikipedia":"en:Banque Nationale de Développement Agricole",name:"BNDA",official_name:"Banque Nationale de Développement Agricole"},countryCodes:["ml"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BNI":{name:"BNI",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882611",amenity:"bank"},addTags:{amenity:"bank",brand:"BNI","brand:wikidata":"Q2882611","brand:wikipedia":"id:Bank Negara Indonesia",name:"BNI",official_name:"Bank Negara Indonesia","official_name:en":"State Bank of Indonesia","official_name:id":"Bank Negara Indonesia"},terms:["bank bni"],matchScore:2,suggestion:true},"amenity/bank/BNL":{name:"BNL",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNLBNPParibas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2201225",amenity:"bank"},addTags:{amenity:"bank",brand:"BNL","brand:wikidata":"Q2201225","brand:wikipedia":"it:Banca Nazionale del Lavoro",name:"BNL",official_name:"Banca Nazionale del Lavoro","official_name:en":"National Labor Bank","official_name:it":"Banca Nazionale del Lavoro"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BNP Paribas":{name:"BNP Paribas",icon:"maki-bank",imageURL:"https://graph.facebook.com/mabanque.bnpparibas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q499707",amenity:"bank"},addTags:{amenity:"bank",brand:"BNP Paribas","brand:wikidata":"Q499707","brand:wikipedia":"en:BNP Paribas",name:"BNP Paribas"},terms:[],matchScore:2,suggestion:true},"amenity/bank/BNP Paribas Fortis":{name:"BNP Paribas Fortis",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNPParibasFortisBelgique/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q796827",amenity:"bank"},addTags:{amenity:"bank",brand:"BNP Paribas Fortis","brand:wikidata":"Q796827","brand:wikipedia":"en:BNP Paribas Fortis",name:"BNP Paribas Fortis"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BOC":{name:"BOC",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankofchina.cn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q790068",amenity:"bank"},addTags:{amenity:"bank",brand:"BOC","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"BOC",official_name:"Bank of China"},terms:[],matchScore:2,suggestion:true},"amenity/bank/BOM":{name:"BOM",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankofMelbourne/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856151",amenity:"bank"},addTags:{amenity:"bank",brand:"BOM","brand:wikidata":"Q4856151","brand:wikipedia":"en:Bank of Melbourne (2011)",name:"BOM",official_name:"Bank of Melbourne"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BOQ":{name:"BOQ",icon:"maki-bank",imageURL:"https://graph.facebook.com/BOQOnline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856173",amenity:"bank"},addTags:{amenity:"bank",brand:"BOQ","brand:wikidata":"Q4856173","brand:wikipedia":"en:Bank of Queensland",name:"BOQ",official_name:"Bank of Queensland"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BPC":{name:"BPC",icon:"maki-bank",imageURL:"https://graph.facebook.com/BpcBancoDePoupancaECredito/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854132",amenity:"bank"},addTags:{amenity:"bank",brand:"BPC","brand:wikidata":"Q4854132","brand:wikipedia":"en:Banco de Poupança e Crédito",name:"BPC",official_name:"Banco de Poupança e Crédito"},countryCodes:["ao"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BPER Banca":{name:"BPER Banca",icon:"maki-bank",imageURL:"https://graph.facebook.com/BPERbanca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806167",amenity:"bank"},addTags:{amenity:"bank",brand:"BPER Banca","brand:wikidata":"Q806167","brand:wikipedia":"it:BPER Banca",name:"BPER Banca",official_name:"Banca Popolare dell'Emilia Romagna"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BPI (Global)":{name:"BPI (Global)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bpi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2501256",amenity:"bank"},addTags:{amenity:"bank",brand:"BPI","brand:wikidata":"Q2501256","brand:wikipedia":"en:Bank of the Philippine Islands",name:"BPI",official_name:"Bank of the Philippine Islands"},terms:["bpi family savings bank"],matchScore:2,suggestion:true},"amenity/bank/BRD":{name:"BRD",icon:"maki-bank",imageURL:"https://graph.facebook.com/BRDGroupeSocieteGenerale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q796927",amenity:"bank"},addTags:{amenity:"bank",brand:"BRD","brand:wikidata":"Q796927","brand:wikipedia":"ro:BRD - Groupe Société Générale",name:"BRD"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BRED":{name:"BRED",icon:"maki-bank",imageURL:"https://graph.facebook.com/BRED.Banque.Populaire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2877455",amenity:"bank"},addTags:{amenity:"bank",brand:"BRED","brand:wikidata":"Q2877455","brand:wikipedia":"fr:BRED Banque populaire",name:"BRED",official_name:"Banque régionale d'escompte et de dépôts","official_name:en":"Regional Discount and Deposit Bank","official_name:fr":"Banque régionale d'escompte et de dépôts"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BRI":{name:"BRI",icon:"maki-bank",imageURL:"https://graph.facebook.com/BRIofficialpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q623042",amenity:"bank"},addTags:{amenity:"bank",brand:"BRI","brand:wikidata":"Q623042","brand:wikipedia":"id:Bank Rakyat Indonesia",name:"BRI",official_name:"Bank Rakyat Indonesia","official_name:en":"People's Bank of Indonesia","official_name:id":"Bank Rakyat Indonesia"},countryCodes:["id"],terms:["bank bri"],matchScore:2,suggestion:true},"amenity/bank/BTN":{name:"BTN",icon:"maki-bank",imageURL:"https://graph.facebook.com/www.btn.co.id/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12474534",amenity:"bank"},addTags:{amenity:"bank",brand:"BTN","brand:en":"BTN","brand:id":"BTN","brand:wikidata":"Q12474534","brand:wikipedia":"id:Bank Tabungan Negara",name:"BTN","name:en":"BTN","name:id":"BTN",official_name:"Bank Tabungan Negara","official_name:en":"State Savings Bank","official_name:id":"Bank Tabungan Negara"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BW-Bank":{name:"BW-Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/LBBW.Stuttgart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q798891",amenity:"bank"},addTags:{amenity:"bank",brand:"BW-Bank","brand:de":"BW-Bank","brand:en":"BW-Bank","brand:wikidata":"Q798891","brand:wikipedia":"de:Baden-Württembergische Bank",name:"BW-Bank","name:de":"BW-Bank","name:en":"BW-Bank"},countryCodes:["de"],terms:["baden-württembergische bank"],matchScore:2,suggestion:true},"amenity/bank/Banamex":{name:"Banamex",icon:"maki-bank",imageURL:"https://graph.facebook.com/Citibanamex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q749474",amenity:"bank"},addTags:{amenity:"bank",brand:"Banamex","brand:wikidata":"Q749474","brand:wikipedia":"en:Grupo Financiero Banamex",name:"Banamex",official_name:"Grupo Financiero Banamex","official_name:en":"Banamex Financial Group","official_name:es":"Grupo Financiero Banamex"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Intesa":{name:"Banca Intesa",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancaintesa.rs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q647092",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Intesa","brand:wikidata":"Q647092","brand:wikipedia":"en:Banca Intesa",name:"Banca Intesa","name:en":"Intesa Bank","name:it":"Banca Intesa"},countryCodes:["it","rs"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca March":{name:"Banca March",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/529243270367309824/JFWCTY94_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q578252",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca March","brand:wikidata":"Q578252","brand:wikipedia":"en:Banca March",name:"Banca March"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Mediolanum":{name:"Banca Mediolanum",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancaMediolanum/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3633712",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Mediolanum","brand:wikidata":"Q3633712","brand:wikipedia":"en:Banca Mediolanum",name:"Banca Mediolanum"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Bari":{name:"Banca Popolare di Bari",icon:"maki-bank",imageURL:"https://graph.facebook.com/popolarebari/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3633730",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Bari","brand:wikidata":"Q3633730","brand:wikipedia":"en:Banca Popolare di Bari",name:"Banca Popolare di Bari"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Milano":{name:"Banca Popolare di Milano",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoBPM/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806154",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Milano","brand:en":"Popular Bank of Milan","brand:it":"Banca Popolare di Milano","brand:wikidata":"Q806154","brand:wikipedia":"en:Banca Popolare di Milano",name:"Banca Popolare di Milano","name:en":"Popular Bank of Milan","name:it":"Banca Popolare di Milano"},countryCodes:["it"],terms:["bpm"],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Novara":{name:"Banca Popolare di Novara",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3633742",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Novara","brand:en":"Popular Bank of Novara","brand:it":"Banca Popolare di Novara","brand:wikidata":"Q3633742","brand:wikipedia":"en:Banca Popolare di Novara",name:"Banca Popolare di Novara","name:en":"Popular Bank of Novara","name:it":"Banca Popolare di Novara"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Sondrio":{name:"Banca Popolare di Sondrio",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q686176",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Sondrio","brand:en":"Popular Bank of Sandrio","brand:it":"Banca Popolare di Sondrio","brand:wikidata":"Q686176","brand:wikipedia":"en:Banca Popolare di Sondrio",name:"Banca Popolare di Sondrio","name:en":"Popular Bank of Sandrio","name:it":"Banca Popolare di Sondrio"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Verona":{name:"Banca Popolare di Verona",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3167468",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Verona","brand:en":"Popular Bank of Verona","brand:it":"Banca Popolare di Verona","brand:wikidata":"Q3167468","brand:wikipedia":"en:Banca Popolare di Verona",name:"Banca Popolare di Verona","name:en":"Popular Bank of Verona","name:it":"Banca Popolare di Verona"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Vicenza":{name:"Banca Popolare di Vicenza",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3127200",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Vicenza","brand:en":"Popular Bank of Vicenza","brand:it":"Banca Popolare di Vicenza","brand:wikidata":"Q3127200","brand:wikipedia":"en:Banca Popolare di Vicenza",name:"Banca Popolare di Vicenza","name:en":"Popular Bank of Vicena","name:it":"Banca Popolare di Vicenza"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Românească":{name:"Banca Românească",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancaRomaneascaOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854052",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Românească","brand:en":"Romanian Bank","brand:ro":"Banca Românească","brand:wikidata":"Q4854052","brand:wikipedia":"ro:Banca Românească",name:"Banca Românească","name:en":"Popular Bank of Vicena","name:ro":"Banca Românească"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Sella":{name:"Banca Sella",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancasella/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3633749",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Sella","brand:en":"Sella Bank","brand:it":"Banca Sella","brand:wikidata":"Q3633749","brand:wikipedia":"en:Banca Sella Group",name:"Banca Sella","name:en":"Sella Bank","name:it":"Banca Sella"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Transilvania":{name:"Banca Transilvania",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancaTransilvania/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806161",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Transilvania","brand:en":"Transilvania Bank","brand:ro":"Banca Transilvania","brand:wikidata":"Q806161","brand:wikipedia":"en:Banca Transilvania",name:"Banca Transilvania","name:en":"Transilvania Bank","name:ro":"Banca Transilvania"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bancaribe":{name:"Bancaribe",icon:"maki-bank",imageURL:"https://graph.facebook.com/Bancaribe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5717827",amenity:"bank"},addTags:{amenity:"bank",brand:"Bancaribe","brand:wikidata":"Q5717827","brand:wikipedia":"en:Bancaribe",name:"Bancaribe"},countryCodes:["ve"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco AV Villas":{name:"Banco AV Villas",icon:"maki-bank",imageURL:"https://graph.facebook.com/AVVillas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854068",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco AV Villas","brand:en":"Bank of Villas","brand:es":"Banco AV Villas","brand:wikidata":"Q4854068","brand:wikipedia":"en:Banco AV Villas",name:"Banco AV Villas","name:en":"Bank of Villas","name:es":"Banco AV Villas"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Agrario":{name:"Banco Agrario",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancoagrario/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20013358",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Agrario","brand:en":"Agrarian Bank","brand:wikidata":"Q20013358","brand:wikipedia":"es:Banco Agrario de Colombia",name:"Banco Agrario","name:en":"Agrarian Bank","name:es":"Banco Agrario",official_name:"Banco Agrario de Colombia","official_name:en":"Agrarian Bank of Colombia","official_name:es":"Banco Agrario de Colombia"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Azteca":{name:"Banco Azteca",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoAzteca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854076",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Azteca","brand:en":"Aztec Bank","brand:es":"Banco Azteca","brand:wikidata":"Q4854076","brand:wikipedia":"en:Banco Azteca",name:"Banco Azteca","name:en":"Aztec Bank","name:es":"Banco Azteca"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco BPI (Portugal)":{name:"Banco BPI (Portugal)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancobpi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q537886",amenity:"bank"},addTags:{amenity:"bank",brand:"Branco BPI","brand:wikidata":"Q537886","brand:wikipedia":"en:Banco Português de Investimento",name:"Banco BPI",official_name:"Banco Português de Investimento",short_name:"BPI"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco BPM":{name:"Banco BPM",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoBPM/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27331643",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco BPM","brand:en":"BPM Bank","brand:es":"Banco BPM","brand:wikidata":"Q27331643","brand:wikipedia":"en:Banco BPM",name:"Banco BPM","name:en":"BPM Bank","name:es":"Banco BPM"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco CTT":{name:"Banco CTT",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q65161642",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco CTT","brand:wikidata":"Q65161642","brand:wikipedia":"pt:Banco CTT",name:"Banco CTT"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Caja Social":{name:"Banco Caja Social",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoCajaSocial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5717869",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Caja Social","brand:en":"Social Housing Bank","brand:es":"Banco Caja Social","brand:wikidata":"Q5717869","brand:wikipedia":"es:Banco Caja Social",name:"Banco Caja Social","name:en":"Social Housing Bank","name:es":"Banco Caja Social"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Ciudad":{name:"Banco Ciudad",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancociudad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856204",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Ciudad","brand:en":"City Bank","brand:es":"Banco Ciudad","brand:wikidata":"Q4856204","brand:wikipedia":"en:Bank of the City of Buenos Aires",name:"Banco Ciudad","name:en":"City Bank","name:es":"Banco Ciudad",official_name:"Banco Ciudad de Buenos Aires","official_name:en":"Bank of the City of Buenos Aires","official_name:es":"Banco Ciudad de Buenos Aires"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Continental (Paraguay)":{name:"Banco Continental (Paraguay)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bcontinentalpy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62054564",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Continental","brand:en":"Continental Bank","brand:es":"Banco Continental","brand:wikidata":"Q62054564",name:"Banco Continental","name:en":"Continental Bank","name:es":"Banco Continental"},countryCodes:["py"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Continental (Peru)":{name:"Banco Continental (Peru)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBVAenPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835089",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Continental","brand:en":"Continental Bank","brand:es":"Banco Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"Banco Continental","name:en":"Continental Bank","name:es":"Banco Continental"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Estado":{name:"Banco Estado",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoEstado/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5718188",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Estado","brand:en":"State Bank","brand:es":"Banco Estado","brand:wikidata":"Q5718188","brand:wikipedia":"es:Banco del Estado de Chile",name:"Banco Estado","name:en":"State Bank","name:es":"Banco Estado",official_name:"Banco del Estado de Chile","official_name:en":"Bank of the State of Chile","official_name:es":"Banco del Estado de Chile"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Falabella":{name:"Banco Falabella",icon:"maki-bank",imageURL:"https://graph.facebook.com/248982132664061/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854088",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Falabella","brand:en":"Falabella Bank","brand:es":"Banco Falabella","brand:wikidata":"Q4854088","brand:wikipedia":"en:Banco Falabella",name:"Banco Falabella","name:en":"Falabella Bank","name:es":"Banco Falabella"},countryCodes:["cl","co","pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Fassil":{name:"Banco Fassil",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancofassil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118592",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Fassil","brand:en":"Fassil Bank","brand:es":"Banco Fassil","brand:wikidata":"Q62118592",name:"Banco Fassil","name:en":"Fassil Bank","name:es":"Banco Fassil"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco G&T Continental":{name:"Banco G&T Continental",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoGTC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5717949",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco G&T Continental","brand:en":"G&T Continental Bank","brand:es":"Banco G&T Continental","brand:wikidata":"Q5717949","brand:wikipedia":"es:Banco GYT Continental, S.A.",name:"Banco G&T Continental","name:en":"G&T Continental Bank","name:es":"Banco G&T Continental"},countryCodes:["gt","sv"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco General":{name:"Banco General",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancogeneral/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27618271",amenity:"bank"},addTags:{amenity:"bank",brand:"BW-Bank","brand:en":"BW-Bank","brand:es":"BW-Bank","brand:wikidata":"Q27618271","brand:wikipedia":"es:Banco General (Panamá)",name:"Banco General","name:en":"General Bank","name:es":"Banco General"},countryCodes:["cr","pa"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Industrial":{name:"Banco Industrial",icon:"maki-bank",imageURL:"https://graph.facebook.com/bindARG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16489444",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Industrial","brand:en":"Industrial Bank","brand:es":"Banco Industrial","brand:wikidata":"Q16489444","brand:wikipedia":"es:Banco Industrial",name:"Banco Industrial","name:en":"Industrial Bank","name:es":"Banco Industrial"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Internacional (Chile)":{name:"Banco Internacional (Chile)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/438324350148571136/fCNvpo-F_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q56605586",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Internacional","brand:en":"International Bank","brand:es":"Banco Internacional","brand:wikidata":"Q56605586","brand:wikipedia":"es:Banco Internacional (Chile)",name:"Banco Internacional","name:en":"International Bank","name:es":"Banco Internacional"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Internacional (Ecuador)":{name:"Banco Internacional (Ecuador)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/986297558493487104/4Y3z4QEF_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q806187",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Internacional","brand:en":"International Bank","brand:es":"Banco Internacional","brand:wikidata":"Q806187","brand:wikipedia":"es:Banco Internacional",name:"Banco Internacional","name:en":"International Bank","name:es":"Banco Internacional"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Metropolitano":{name:"Banco Metropolitano",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanmetCuba/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118612",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Metropolitano","brand:en":"Metroplitan Bank","brand:es":"Banco Metropolitano","brand:wikidata":"Q62118612",name:"Banco Metropolitano","name:en":"Metropolitan Bank","name:es":"Banco Metropolitano"},countryCodes:["cu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Nacional":{name:"Banco Nacional",icon:"maki-bank",imageURL:"https://graph.facebook.com/bnmascerca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2917708",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Nacional de Costa Rica","brand:en":"National Bank of Costa Rica","brand:es":"Banco Nacional de Costa Rica","brand:wikidata":"Q2917708","brand:wikipedia":"es:Banco Nacional de Costa Rica",name:"Banco Nacional","name:en":"National Bank","name:es":"Banco Nacional",official_name:"Banco Nacional de Costa Rica","official_name:en":"National Bank of Costa Rica","official_name:es":"Banco Nacional de Costa Rica",short_name:"BNCR"},countryCodes:["cr","pa"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Nación":{name:"Banco Nación",icon:"maki-bank",imageURL:"https://graph.facebook.com/banconacion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883376",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Nación","brand:en":"Nation Bank","brand:es":"Banco Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco Nación","name:en":"Nation Bank","name:es":"Banco Nación",official_name:"Banco de la Nación Argentina","official_name:en":"Bank of the Argentine Nation","official_name:es":"Banco de la Nación Argentina"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Pastor":{name:"Banco Pastor",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancosantander/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806193",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Pastor","brand:en":"Shepherd Bank","brand:es":"Banco Pastor","brand:wikidata":"Q806193","brand:wikipedia":"en:Banco Pastor",name:"Banco Pastor","name:en":"Shepherd Bank","name:es":"Banco Pastor",official_name:"Banco Popular Pastor","official_name:en":"Popular Shepherd Bank","official_name:es":"Banco Popular Pastor"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Pichincha":{name:"Banco Pichincha",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoPichinchaEcuador/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854135",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Pichincha","brand:en":"Pichincha Bank","brand:es":"Banco Pichincha","brand:wikidata":"Q4854135","brand:wikipedia":"en:Banco Pichincha",name:"Banco Pichincha","name:en":"Pichincha Bank","name:es":"Banco Pichincha"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Popular de Ahorro":{name:"Banco Popular de Ahorro",icon:"maki-bank",imageURL:"https://graph.facebook.com/bpa.cu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118626",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Popular de Ahorro","brand:en":"Popular Saving Bank","brand:es":"Banco Popular de Ahorro","brand:wikidata":"Q62118626",name:"Banco Popular de Ahorro","name:en":"Popular Saving Bank","name:es":"Banco Popular de Ahorro"},countryCodes:["cu"],terms:["bpa"],matchScore:2,suggestion:true},"amenity/bank/Banco Provincia":{name:"Banco Provincia",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancoprovincia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856209",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Provincia","brand:en":"Province Bank","brand:es":"Banco Provincia","brand:wikidata":"Q4856209","brand:wikipedia":"es:Banco de la Provincia de Buenos Aires",name:"Banco Provincia","name:en":"Province Bank","name:es":"Banco Provincia",official_name:"Banco de la Provincia de Buenos Aires","official_name:en":"Bank of the Province of Buenos Aires","official_name:es":"Banco de la Provincia de Buenos Aires"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Sabadell":{name:"Banco Sabadell",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancosabadell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q762330",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Sabadell","brand:ca":"Banc Sabadell","brand:es":"Banco Sabadell","brand:wikidata":"Q762330","brand:wikipedia":"es:Banco Sabadell",name:"Banco Sabadell","name:ca":"Banc Sabadell","name:es":"Banco Sabadell",official_name:"Banco de Sabadell, S.A."},countryCodes:["es"],terms:["banc sabadell","sabadell"],matchScore:2,suggestion:true},"amenity/bank/Banco Santa Fe":{name:"Banco Santa Fe",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoSantaFe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6046871",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Santa Fe","brand:en":"Santa Fe Bank","brand:es":"Banco Santa Fe","brand:wikidata":"Q6046871","brand:wikipedia":"es:Nuevo Banco de Santa Fe",name:"Banco Santa Fe","name:en":"Santa Fe Bank","name:es":"Banco Santa Fe",official_name:"Nuevo Banco de Santa Fe","official_name:en":"New Bank of Santa Fe","official_name:es":"Nuevo Banco de Santa Fe"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Santander":{name:"Banco Santander",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancosantander/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6496310",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Santander","brand:en":"Santander Bank","brand:es":"Banco Santander","brand:wikidata":"Q6496310","brand:wikipedia":"es:Banco Santander",name:"Banco Santander","name:en":"Santander Bank","name:es":"Banco Santander",official_name:"Santander Group"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Sol (Angola)":{name:"Banco Sol (Angola)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancosolangola/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118744",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Sol","brand:en":"Sol Bank","brand:pt":"Banco Sol","brand:wikidata":"Q62118744",name:"Banco Sol","name:en":"Sol Bank","name:pt":"Banco Sol"},countryCodes:["ao"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Sol (Bolivia)":{name:"Banco Sol (Bolivia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoSolidarioBolivia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118746",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Sol","brand:en":"Sol Bank","brand:pt":"Banco Sol","brand:wikidata":"Q62118746",name:"Banco Sol","name:en":"Sol Bank","name:pt":"Banco Sol"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Unión":{name:"Banco Unión",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoUnionSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72315494",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Unión","brand:en":"Union Bank","brand:es":"Banco Unión","brand:wikidata":"Q72315494",name:"Banco Unión","name:en":"Union Bank","name:es":"Banco Unión"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Bogotá":{name:"Banco de Bogotá",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancodeBogota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854122",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Bogotá","brand:en":"Bank of Bogota","brand:es":"Banco de Bogotá","brand:wikidata":"Q4854122","brand:wikipedia":"es:Banco de Bogotá",name:"Banco de Bogotá","name:en":"Bank of Bogota","name:es":"Banco de Bogotá"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Chile":{name:"Banco de Chile",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancochile.cl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882085",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Chile","brand:en":"Bank of Chile","brand:es":"Banco de Chile","brand:wikidata":"Q2882085","brand:wikipedia":"es:Banco de Chile",name:"Banco de Chile","name:en":"Bank of Chile","name:es":"Banco de Chile"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Desarrollo Banrural":{name:"Banco de Desarrollo Banrural",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanruralHonduras/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5719130",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Desarrollo Banrural","brand:en":"Bank of Banrural Development","brand:es":"Banco de Desarrollo Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banco de Desarrollo Banrural","name:en":"Bank of Banrural Development","name:es":"Banco de Desarrollo Banrural"},countryCodes:["gt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Fomento Angola (BFA)":{name:"Banco de Fomento Angola (BFA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/Banco.BFA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806197",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Fomento Angola (BFA)","brand:en":"Angola Development Bank (BFA)","brand:es":"Banco de Fomento Angola (BFA)","brand:wikidata":"Q806197","brand:wikipedia":"de:Banco de Fomento Angola",name:"Banco de Fomento Angola (BFA)","name:en":"Angola Development Bank (BFA)","name:es":"Banco de Fomento Angola (BFA)"},countryCodes:["ao"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Occidente":{name:"Banco de Occidente",icon:"maki-bank",imageURL:"https://graph.facebook.com/BcoOccidente/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854127",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Occidente","brand:wikidata":"Q4854127","brand:wikipedia":"es:Banco de Occidente (Colombia)",name:"Banco de Occidente"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Venezuela":{name:"Banco de Venezuela",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancodeVenezuelaOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q517093",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Venezuela","brand:wikidata":"Q517093","brand:wikipedia":"es:Banco de Venezuela",name:"Banco de Venezuela"},countryCodes:["ve"],terms:["de venezuela"],matchScore:2,suggestion:true},"amenity/bank/Banco de la Nación (Argentina)":{name:"Banco de la Nación (Argentina)",icon:"maki-bank",imageURL:"https://graph.facebook.com/banconacion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883376",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de la Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco de la Nación"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de la Nación (Peru)":{name:"Banco de la Nación (Peru)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancodelaNacion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856206",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de la Nación","brand:wikidata":"Q4856206","brand:wikipedia":"en:Bank of the Nation (Peru)",name:"Banco de la Nación"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco del Austro":{name:"Banco del Austro",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancodelaustro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122344",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco del Austro","brand:wikidata":"Q62122344",name:"Banco del Austro"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco di Napoli":{name:"Banco di Napoli",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3633835",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco di Napoli","brand:wikidata":"Q3633835","brand:wikipedia":"en:Banco di Napoli",name:"Banco di Napoli"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco di Sardegna":{name:"Banco di Sardegna",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q806205",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco di Sardegna","brand:wikidata":"Q806205","brand:wikipedia":"en:Banco di Sardegna",name:"Banco di Sardegna"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco do Brasil":{name:"Banco do Brasil",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancodobrasil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q610817",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco do Brasil","brand:wikidata":"Q610817","brand:wikipedia":"en:Banco do Brasil",name:"Banco do Brasil"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco do Nordeste":{name:"Banco do Nordeste",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancodonordeste/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854137",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco do Nordeste","brand:wikidata":"Q4854137","brand:wikipedia":"en:Banco do Nordeste",name:"Banco do Nordeste"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bancolombia":{name:"Bancolombia",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancolombia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806206",amenity:"bank"},addTags:{amenity:"bank",brand:"Bancolombia","brand:wikidata":"Q806206","brand:wikipedia":"en:Bancolombia",name:"Bancolombia"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bancomer":{name:"Bancomer",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBVASeguros.mx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2876794",amenity:"bank"},addTags:{amenity:"bank",brand:"Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"Bancomer"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bancpost":{name:"Bancpost",icon:"maki-bank",imageURL:"https://graph.facebook.com/1408419985932200/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854143",amenity:"bank"},addTags:{amenity:"bank",brand:"Bancpost","brand:wikidata":"Q4854143","brand:wikipedia":"ro:Bancpost",name:"Bancpost"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banesco":{name:"Banesco",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanescoBancoUniversal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854841",amenity:"bank"},addTags:{amenity:"bank",brand:"Banesco","brand:wikidata":"Q4854841","brand:wikipedia":"en:Banesco",name:"Banesco"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bangkok Bank":{name:"Bangkok Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/924817393049677824/zctRzkcO_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q806483",amenity:"bank"},addTags:{amenity:"bank",brand:"Bangkok Bank","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"Bangkok Bank"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Al Habib":{name:"Bank Al Habib",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankalhabiblimited/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4034833",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Al Habib","brand:wikidata":"Q4034833","brand:wikipedia":"ur:بينک الحبيب لمیٹڈ",name:"Bank Al Habib"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Alfalah":{name:"Bank Alfalah",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankAlfalahOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855895",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Alfalah","brand:wikidata":"Q4855895","brand:wikipedia":"en:Bank Alfalah",name:"Bank Alfalah"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Austria":{name:"Bank Austria",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/941602537043525632/UALD6dxn_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q697619",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Austria","brand:wikidata":"Q697619","brand:wikipedia":"en:Bank Austria",name:"Bank Austria"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Danamon":{name:"Bank Danamon",icon:"maki-bank",imageURL:"https://graph.facebook.com/DanamonIndonesia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855913",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Danamon","brand:wikidata":"Q4855913","brand:wikipedia":"en:Bank Danamon",name:"Bank Danamon"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Islam":{name:"Bank Islam",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankIslamFB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4115279",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Islam","brand:wikidata":"Q4115279","brand:wikipedia":"en:Bank Islam Malaysia",name:"Bank Islam"},countryCodes:["my"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Mandiri":{name:"Bank Mandiri",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankmandiricare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806639",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Mandiri","brand:wikidata":"Q806639","brand:wikipedia":"en:Bank Mandiri",name:"Bank Mandiri"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Mandiri Syariah":{name:"Bank Mandiri Syariah",icon:"maki-bank",imageURL:"https://graph.facebook.com/syariahmandiri/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12474533",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Mandiri Syariah","brand:wikidata":"Q12474533","brand:wikipedia":"id:Bank Syariah Mandiri",name:"Bank Mandiri Syariah"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Mega":{name:"Bank Mega",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankMegaID/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12474504",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Mega","brand:wikidata":"Q12474504","brand:wikipedia":"id:Bank Mega",name:"Bank Mega"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Muamalat":{name:"Bank Muamalat",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankMuamalatIndonesia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855949",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Muamalat","brand:wikidata":"Q4855949","brand:wikipedia":"en:Bank Muamalat",name:"Bank Muamalat"},countryCodes:["id","my"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Pekao":{name:"Bank Pekao",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankpekaosa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806642",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Pekao","brand:wikidata":"Q806642","brand:wikipedia":"pl:Bank Polska Kasa Opieki",name:"Bank Pekao"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Rakyat":{name:"Bank Rakyat",icon:"maki-bank",imageURL:"https://graph.facebook.com/myBANKRAKYAT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855964",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Rakyat","brand:wikidata":"Q4855964","brand:wikipedia":"ms:Bank Rakyat",name:"Bank Rakyat"},countryCodes:["my"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Africa":{name:"Bank of Africa",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankofafrica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882627",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Africa","brand:wikidata":"Q2882627","brand:wikipedia":"en:Bank of Africa Group",name:"Bank of Africa",short_name:"BOA"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of America":{name:"Bank of America",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankofAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487907",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of America","brand:wikidata":"Q487907","brand:wikipedia":"en:Bank of America",name:"Bank of America"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Baroda":{name:"Bank of Baroda",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankofbaroda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003797",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Baroda","brand:wikidata":"Q2003797","brand:wikipedia":"en:Bank of Baroda",name:"Bank of Baroda"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Ceylon":{name:"Bank of Ceylon",icon:"maki-bank",imageURL:"https://graph.facebook.com/BANKOFCEYLON/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882652",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Ceylon","brand:wikidata":"Q2882652","brand:wikipedia":"en:Bank of Ceylon",name:"Bank of Ceylon"},countryCodes:["lk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Commerce":{name:"Bank of Commerce",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4856092",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Commerce","brand:wikidata":"Q4856092","brand:wikipedia":"en:Bank of Commerce",name:"Bank of Commerce"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Cyprus":{name:"Bank of Cyprus",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankofCyprusOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806678",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Cyprus","brand:wikidata":"Q806678","brand:wikipedia":"en:Bank of Cyprus",name:"Bank of Cyprus"},countryCodes:["cy","gr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of India":{name:"Bank of India",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankOfIndia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2004439",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of India","brand:wikidata":"Q2004439","brand:wikipedia":"en:Bank of India",name:"Bank of India"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Ireland":{name:"Bank of Ireland",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankofIreland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806689",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Ireland","brand:wikidata":"Q806689","brand:wikipedia":"en:Bank of Ireland",name:"Bank of Ireland"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Maharashtra":{name:"Bank of Maharashtra",icon:"maki-bank",imageURL:"https://graph.facebook.com/BOM1685/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2004304",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Maharashtra","brand:wikidata":"Q2004304","brand:wikipedia":"en:Bank of Maharashtra",name:"Bank of Maharashtra"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of New Zealand":{name:"Bank of New Zealand",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNZBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806687",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of New Zealand","brand:wikidata":"Q806687","brand:wikipedia":"en:Bank of New Zealand",name:"Bank of New Zealand"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Scotland":{name:"Bank of Scotland",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankofscotland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q627381",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Scotland","brand:wikidata":"Q627381","brand:wikipedia":"en:Bank of Scotland",name:"Bank of Scotland"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of the West":{name:"Bank of the West",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankoftheWest/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2881919",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of the West","brand:wikidata":"Q2881919","brand:wikipedia":"en:Bank of the West",name:"Bank of the West"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bankia":{name:"Bankia",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankia.es/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806807",amenity:"bank"},addTags:{amenity:"bank",brand:"Bankia","brand:wikidata":"Q806807","brand:wikipedia":"en:Bankia",name:"Bankia"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bankinter":{name:"Bankinter",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankinter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806808",amenity:"bank"},addTags:{amenity:"bank",brand:"Bankinter","brand:wikidata":"Q806808","brand:wikipedia":"es:Bankinter",name:"Bankinter"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bankwest":{name:"Bankwest",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankwest/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856817",amenity:"bank"},addTags:{amenity:"bank",brand:"Bankwest","brand:wikidata":"Q4856817","brand:wikipedia":"en:Bankwest",name:"Bankwest"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banner Bank":{name:"Banner Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/bannerbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856910",amenity:"bank"},addTags:{amenity:"bank",brand:"Banner Bank","brand:wikidata":"Q4856910","brand:wikipedia":"en:Banner Bank",name:"Banner Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banorte":{name:"Banorte",icon:"maki-bank",imageURL:"https://graph.facebook.com/banorte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806914",amenity:"bank"},addTags:{amenity:"bank",brand:"Banorte","brand:wikidata":"Q806914","brand:wikipedia":"en:Banorte",name:"Banorte"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banque Atlantique":{name:"Banque Atlantique",icon:"maki-bank",imageURL:"https://graph.facebook.com/BqAtlantiqueOfficiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882890",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque Atlantique","brand:wikidata":"Q2882890","brand:wikipedia":"en:Atlantic Bank Group",name:"Banque Atlantique"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banque Laurentienne":{name:"Banque Laurentienne",icon:"maki-bank",imageURL:"https://graph.facebook.com/BLaurentienne/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1360087",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque Laurentienne","brand:wikidata":"Q1360087","brand:wikipedia":"en:Laurentian Bank of Canada",name:"Banque Laurentienne"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banque Populaire (France)":{name:"Banque Populaire (France)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1044103146405064704/MNLRD2Pq_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q846647",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque Populaire","brand:wikidata":"Q846647","brand:wikipedia":"fr:Banque populaire",name:"Banque Populaire"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banque Populaire (Maroc)":{name:"Banque Populaire (Maroc)",icon:"maki-bank",imageURL:"https://graph.facebook.com/PopulaireEtDigitale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883441",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque Populaire","brand:wikidata":"Q2883441","brand:wikipedia":"en:Banque Populaire du Maroc",name:"Banque Populaire"},countryCodes:["de","es","fr","gb","it","ma","nl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banque de France":{name:"Banque de France",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanquedeFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806950",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque de France","brand:wikidata":"Q806950","brand:wikipedia":"en:Bank of France",name:"Banque de France"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banque de l'Habitat du Mali":{name:"Banque de l'Habitat du Mali",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4857076",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque de l'Habitat du Mali","brand:wikidata":"Q4857076","brand:wikipedia":"en:Banque de l'Habitat du Mali",name:"Banque de l'Habitat du Mali"},countryCodes:["ml"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banrisul":{name:"Banrisul",icon:"maki-bank",imageURL:"https://graph.facebook.com/banrisul/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4857098",amenity:"bank"},addTags:{amenity:"bank",brand:"Banrisul","brand:wikidata":"Q4857098","brand:wikipedia":"en:Banrisul",name:"Banrisul"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banrural":{name:"Banrural",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanruralHonduras/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5719130",amenity:"bank"},addTags:{amenity:"bank",brand:"Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banrural"},countryCodes:["gt","hn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Barclays":{name:"Barclays",icon:"maki-bank",imageURL:"https://graph.facebook.com/BarclaysUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q245343",amenity:"bank"},addTags:{amenity:"bank",brand:"Barclays","brand:wikidata":"Q245343","brand:wikipedia":"en:Barclays",name:"Barclays"},terms:["barclays bank"],matchScore:2,suggestion:true},"amenity/bank/Bcc":{name:"Bcc",icon:"maki-bank",imageURL:"https://graph.facebook.com/BCCRomaOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25060394",amenity:"bank"},addTags:{amenity:"bank",brand:"Bcc","brand:wikidata":"Q25060394","brand:wikipedia":"en:Banca di Credito Cooperativo di Roma",name:"Bcc"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Belfius":{name:"Belfius",icon:"maki-bank",imageURL:"https://graph.facebook.com/belfius/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1956014",amenity:"bank"},addTags:{amenity:"bank",brand:"Belfius","brand:wikidata":"Q1956014","brand:wikipedia":"en:Belfius",name:"Belfius"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bendigo Bank":{name:"Bendigo Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/BendigoBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4887077",amenity:"bank"},addTags:{amenity:"bank",brand:"Bendigo Bank","brand:wikidata":"Q4887077","brand:wikipedia":"en:Bendigo and Adelaide Bank",name:"Bendigo Bank"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Berliner Volksbank":{name:"Berliner Volksbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/BerlinerVolksbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q821855",amenity:"bank"},addTags:{amenity:"bank",brand:"Berliner Volksbank","brand:wikidata":"Q821855","brand:wikipedia":"de:Berliner Volksbank",name:"Berliner Volksbank"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bicentenario":{name:"Bicentenario",icon:"maki-bank",imageURL:"https://graph.facebook.com/BicentenarioBU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5728123",amenity:"bank"},addTags:{amenity:"bank",brand:"Bicentenario","brand:wikidata":"Q5728123","brand:wikipedia":"es:Bicentenario Banco Universal",name:"Bicentenario"},countryCodes:["ve"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bicici":{name:"Bicici",icon:"maki-bank",imageURL:"https://graph.facebook.com/BICICIGroupeBNPParibas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1667302",amenity:"bank"},addTags:{amenity:"bank",brand:"Bicici","brand:wikidata":"Q1667302","brand:wikipedia":"fr:Banque internationale pour le commerce et l'industrie de la Côte d'Ivoire",name:"Bicici"},countryCodes:["ci"],terms:["agence bicici"],matchScore:2,suggestion:true},"amenity/bank/Bradesco":{name:"Bradesco",icon:"maki-bank",imageURL:"https://graph.facebook.com/bradesco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806181",amenity:"bank"},addTags:{amenity:"bank",brand:"Bradesco","brand:wikidata":"Q806181","brand:wikipedia":"en:Banco Bradesco",name:"Bradesco"},countryCodes:["br"],terms:["banco bradesco"],matchScore:2,suggestion:true},"amenity/bank/Budapest Bank":{name:"Budapest Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/budapestbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27493463",amenity:"bank"},addTags:{amenity:"bank",brand:"Budapest Bank","brand:wikidata":"Q27493463","brand:wikipedia":"en:Budapest Bank",name:"Budapest Bank"},countryCodes:["hu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CBAO":{name:"CBAO",icon:"maki-bank",imageURL:"https://graph.facebook.com/161410284020244/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q532104",amenity:"bank"},addTags:{amenity:"bank",brand:"CBAO","brand:wikidata":"Q532104","brand:wikipedia":"fr:CBAO Groupe Attijariwafa bank",name:"CBAO"},countryCodes:["sn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CEC Bank":{name:"CEC Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/521658591374182/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1023306",amenity:"bank"},addTags:{amenity:"bank",brand:"CEC Bank","brand:wikidata":"Q1023306","brand:wikipedia":"en:CEC Bank",name:"CEC Bank"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CIB Bank":{name:"CIB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/with.cib.hu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q839566",amenity:"bank"},addTags:{amenity:"bank",brand:"CIB Bank","brand:wikidata":"Q839566","brand:wikipedia":"en:CIB Bank",name:"CIB Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/CIBC":{name:"CIBC",icon:"maki-bank",imageURL:"https://graph.facebook.com/CIBC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q666694",amenity:"bank"},addTags:{amenity:"bank",brand:"CIBC","brand:wikidata":"Q666694","brand:wikipedia":"en:Canadian Imperial Bank of Commerce",name:"CIBC"},countryCodes:["ca"],terms:["cibc banking centre"],matchScore:2,suggestion:true},"amenity/bank/CIC":{name:"CIC",icon:"maki-bank",imageURL:"https://graph.facebook.com/cic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q746525",amenity:"bank"},addTags:{amenity:"bank",brand:"CIC","brand:wikidata":"Q746525","brand:wikipedia":"en:Crédit Industriel et Commercial",name:"CIC"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CIH Bank":{name:"CIH Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/cihbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3006220",amenity:"bank"},addTags:{amenity:"bank",brand:"CIH Bank","brand:wikidata":"Q3006220","brand:wikipedia":"en:CIH Bank",name:"CIH Bank"},countryCodes:["ma"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CIMB Bank":{name:"CIMB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/CIMBMalaysia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3045976",amenity:"bank"},addTags:{amenity:"bank",brand:"CIMB Bank","brand:wikidata":"Q3045976","brand:wikipedia":"en:CIMB",name:"CIMB Bank"},countryCodes:["my"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CIMB Niaga":{name:"CIMB Niaga",icon:"maki-bank",imageURL:"https://graph.facebook.com/CIMBIndonesia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5011747",amenity:"bank"},addTags:{amenity:"bank",brand:"CIMB Niaga","brand:wikidata":"Q5011747","brand:wikipedia":"en:CIMB Niaga",name:"CIMB Niaga"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CNEP":{name:"CNEP",icon:"maki-bank",imageURL:"https://graph.facebook.com/CNEPOfficielle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2931752",amenity:"bank"},addTags:{amenity:"bank",brand:"CNEP","brand:wikidata":"Q2931752","brand:wikipedia":"fr:CNEP-Banque",name:"CNEP"},countryCodes:["dz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CRDB Bank":{name:"CRDB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/crdbbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5013848",amenity:"bank"},addTags:{amenity:"bank",brand:"CRDB Bank","brand:wikidata":"Q5013848","brand:wikipedia":"en:CRDB Bank",name:"CRDB Bank"},countryCodes:["tz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caisse d'Épargne":{name:"Caisse d'Épargne",icon:"maki-bank",imageURL:"https://graph.facebook.com/Caisse.Epargne/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1547738",amenity:"bank"},addTags:{amenity:"bank",brand:"Caisse d'Épargne","brand:wikidata":"Q1547738","brand:wikipedia":"fr:Caisse d'épargne (banque)",name:"Caisse d'Épargne"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Caixa Econômica Federal (Brazil)":{name:"Caixa Econômica Federal (Brazil)",icon:"maki-bank",imageURL:"https://graph.facebook.com/caixa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q835283",amenity:"bank"},addTags:{amenity:"bank",brand:"Caixa Econômica Federal","brand:wikidata":"Q835283","brand:wikipedia":"pt:Caixa Econômica Federal",name:"Caixa Econômica Federal"},countryCodes:["br"],terms:["caixa","caixabank"],matchScore:2,suggestion:true},"amenity/bank/Caixa Geral de Depósitos":{name:"Caixa Geral de Depósitos",icon:"maki-bank",imageURL:"https://graph.facebook.com/anossacaixa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1026044",amenity:"bank"},addTags:{amenity:"bank",brand:"Caixa Geral de Depósitos","brand:wikidata":"Q1026044","brand:wikipedia":"pt:Caixa Geral de Depósitos",name:"Caixa Geral de Depósitos"},countryCodes:["es","fr","pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caixabank (Spain)":{name:"Caixabank (Spain)",icon:"maki-bank",imageURL:"https://graph.facebook.com/CaixaBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q847225",amenity:"bank"},addTags:{amenity:"bank",brand:"Caixabank","brand:wikidata":"Q847225","brand:wikipedia":"en:CaixaBank",name:"Caixabank"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caja Duero":{name:"Caja Duero",icon:"maki-bank",imageURL:"https://graph.facebook.com/222871461403445/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3821055",amenity:"bank"},addTags:{amenity:"bank",brand:"Caja Duero","brand:wikidata":"Q3821055","brand:wikipedia":"es:Caja Duero",name:"Caja Duero"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caja España":{name:"Caja España",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q966985",amenity:"bank"},addTags:{amenity:"bank",brand:"Caja España","brand:wikidata":"Q966985","brand:wikipedia":"es:Caja España",name:"Caja España"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caja Rural":{name:"Caja Rural",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCaja%20Rural.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3649971",amenity:"bank"},addTags:{amenity:"bank",brand:"Caja Rural","brand:wikidata":"Q3649971","brand:wikipedia":"es:Caja Rural",name:"Caja Rural"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caja Rural de Jaén":{name:"Caja Rural de Jaén",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCaja%20Rural.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q18720350",amenity:"bank"},addTags:{amenity:"bank",brand:"Caja Rural de Jaén","brand:wikidata":"Q18720350","brand:wikipedia":"es:Caja Rural de Jaén",name:"Caja Rural de Jaén"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CajaSur":{name:"CajaSur",icon:"maki-bank",imageURL:"https://graph.facebook.com/Cajasur/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3751637",amenity:"bank"},addTags:{amenity:"bank",brand:"CajaSur","brand:wikidata":"Q3751637","brand:wikipedia":"en:CajaSur",name:"CajaSur"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Cajamar":{name:"Cajamar",icon:"maki-bank",imageURL:"https://graph.facebook.com/cajamar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8254971",amenity:"bank"},addTags:{amenity:"bank",brand:"Cajamar","brand:wikidata":"Q8254971","brand:wikipedia":"es:Cajamar",name:"Cajamar"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/California Coast Credit Union":{name:"California Coast Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/CalCoastCU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25025281",amenity:"bank"},addTags:{amenity:"bank",brand:"California Coast Credit Union","brand:wikidata":"Q25025281","brand:wikipedia":"en:California Coast Credit Union",name:"California Coast Credit Union"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Canara Bank":{name:"Canara Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/canarabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003777",amenity:"bank"},addTags:{amenity:"bank",brand:"Canara Bank","brand:wikidata":"Q2003777","brand:wikipedia":"en:Canara Bank",name:"Canara Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Capital Bank":{name:"Capital Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5035481",amenity:"bank"},addTags:{amenity:"bank",brand:"Capital Bank","brand:wikidata":"Q5035481","brand:wikipedia":"en:Capital Bank Financial",name:"Capital Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Capital One":{name:"Capital One",icon:"maki-bank",imageURL:"https://graph.facebook.com/capitalone/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1034654",amenity:"bank"},addTags:{amenity:"bank",brand:"Capital One","brand:wikidata":"Q1034654","brand:wikipedia":"en:Capital One",name:"Capital One"},countryCodes:["us"],terms:["capital one bank"],matchScore:2,suggestion:true},"amenity/bank/Carige":{name:"Carige",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/608212417395499008/oUMlcP6e_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3633695",amenity:"bank"},addTags:{amenity:"bank",brand:"Carige","brand:wikidata":"Q3633695","brand:wikipedia":"en:Banca Carige",name:"Carige"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Cariparma":{name:"Cariparma",icon:"maki-bank",imageURL:"https://graph.facebook.com/CreditAgricoleItalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2938832",amenity:"bank"},addTags:{amenity:"bank",brand:"Cariparma","brand:wikidata":"Q2938832","brand:wikipedia":"en:Crédit Agricole Italia",name:"Cariparma"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Carisbo":{name:"Carisbo",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3661937",amenity:"bank"},addTags:{amenity:"bank",brand:"Carisbo","brand:wikidata":"Q3661937","brand:wikipedia":"en:Cassa di Risparmio in Bologna",name:"Carisbo"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Casden":{name:"Casden",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2930976",amenity:"bank"},addTags:{amenity:"bank",brand:"Casden","brand:wikidata":"Q2930976","brand:wikipedia":"fr:CASDEN Banque populaire",name:"Casden"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Cassa di Risparmio del Veneto":{name:"Cassa di Risparmio del Veneto",icon:"maki-bank",imageURL:"https://graph.facebook.com/CassadiRisparmiodelVeneto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3661909",amenity:"bank"},addTags:{amenity:"bank",brand:"Cassa di Risparmio del Veneto","brand:wikidata":"Q3661909","brand:wikipedia":"en:Cassa di Risparmio del Veneto",name:"Cassa di Risparmio del Veneto"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CatalunyaCaixa":{name:"CatalunyaCaixa",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20cx%20original.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3750952",amenity:"bank"},addTags:{amenity:"bank",brand:"CatalunyaCaixa","brand:wikidata":"Q3750952","brand:wikipedia":"en:CatalunyaCaixa",name:"CatalunyaCaixa"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Cathay Bank":{name:"Cathay Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/cathaybank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4189507",amenity:"bank"},addTags:{amenity:"bank",brand:"Cathay Bank","brand:wikidata":"Q4189507","brand:wikipedia":"en:Cathay Bank",name:"Cathay Bank"},countryCodes:["cn","tw","us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Central Bank of India":{name:"Central Bank of India",icon:"maki-bank",imageURL:"https://graph.facebook.com/CentralBankofIndia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2007090",amenity:"bank"},addTags:{amenity:"bank",brand:"Central Bank of India","brand:wikidata":"Q2007090","brand:wikipedia":"en:Central Bank of India",name:"Central Bank of India"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Chase":{name:"Chase",icon:"maki-bank",imageURL:"https://graph.facebook.com/chase/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q524629",amenity:"bank"},addTags:{amenity:"bank",brand:"Chase","brand:wikidata":"Q524629","brand:wikipedia":"en:Chase Bank",name:"Chase"},terms:["chase bank"],matchScore:2,suggestion:true},"amenity/bank/China Bank":{name:"China Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/chinabank.ph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5100080",amenity:"bank"},addTags:{amenity:"bank",brand:"China Bank","brand:wikidata":"Q5100080","brand:wikipedia":"en:Chinabank",name:"China Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/China Bank Savings":{name:"China Bank Savings",icon:"maki-bank",imageURL:"https://graph.facebook.com/cbschinabanksavings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18387359",amenity:"bank"},addTags:{amenity:"bank",brand:"China Bank Savings","brand:wikidata":"Q18387359","brand:wikipedia":"en:China Bank Savings",name:"China Bank Savings"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/China Construction Bank":{name:"China Construction Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/225342697629586/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26299",amenity:"bank"},addTags:{amenity:"bank",brand:"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"China Construction Bank",short_name:"CCB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Citibank":{name:"Citibank",icon:"maki-bank",imageURL:"https://graph.facebook.com/citi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q857063",amenity:"bank"},addTags:{amenity:"bank",brand:"Citibank","brand:wikidata":"Q857063","brand:wikipedia":"en:Citibank",name:"Citibank",short_name:"Citi"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Citizens Bank (Eastern USA)":{name:"Citizens Bank (Eastern USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/citizensbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5122694",amenity:"bank"},addTags:{amenity:"bank",brand:"Citizens Bank","brand:wikidata":"Q5122694","brand:wikipedia":"en:Citizens Financial Group",name:"Citizens Bank",short_name:"Citizens"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Citizens Bank (Kentucky)":{name:"Citizens Bank (Kentucky)",icon:"maki-bank",imageURL:"https://graph.facebook.com/citizensbankofkentucky/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5122711",amenity:"bank"},addTags:{alt_name:"Citizens Bank of Kentucky",amenity:"bank",brand:"Citizens Bank","brand:wikidata":"Q5122711","brand:wikipedia":"en:Citizens National Bank (Eastern Kentucky)",name:"Citizens Bank",official_name:"Citizens National Bank",short_name:"Citizens"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Citizens Bank (Nepal)":{name:"Citizens Bank (Nepal)",icon:"maki-bank",imageURL:"https://graph.facebook.com/ctznbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13186934",amenity:"bank"},addTags:{amenity:"bank",brand:"Citizens Bank International","brand:wikidata":"Q13186934","brand:wikipedia":"en:Citizens Bank International",name:"Citizens Bank",official_name:"Citizens Bank International Ltd.",short_name:"Citizens"},countryCodes:["np"],terms:[],matchScore:2,suggestion:true},"amenity/bank/City National Bank (California)":{name:"City National Bank (California)",icon:"maki-bank",imageURL:"https://graph.facebook.com/CityNationalBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5123314",amenity:"bank"},addTags:{amenity:"bank",brand:"City National Bank","brand:wikidata":"Q5123314","brand:wikipedia":"en:City National Bank (California)",name:"City National Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/City National Bank (Florida)":{name:"City National Bank (Florida)",icon:"maki-bank",imageURL:"https://graph.facebook.com/CityNationalBankFL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16958644",amenity:"bank"},addTags:{amenity:"bank",brand:"City National Bank","brand:wikidata":"Q16958644","brand:wikipedia":"en:City National Bank of Florida",name:"City National Bank",official_name:"City National Bank of Florida"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Clydesdale Bank":{name:"Clydesdale Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/clydesdalebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q971680",amenity:"bank"},addTags:{amenity:"bank",brand:"Clydesdale Bank","brand:wikidata":"Q971680","brand:wikipedia":"en:Clydesdale Bank",name:"Clydesdale Bank"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Coast Capital Savings":{name:"Coast Capital Savings",icon:"maki-bank",imageURL:"https://graph.facebook.com/coastcapitalsavings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5138088",amenity:"bank"},addTags:{amenity:"bank",brand:"Coast Capital Savings","brand:wikidata":"Q5138088","brand:wikipedia":"en:Coast Capital Savings",name:"Coast Capital Savings",official_name:"Coast Capital Savings Federal Credit Union"},countryCodes:["ca"],terms:["coast capital","coast capital savings credit union"],matchScore:2,suggestion:true},"amenity/bank/Columbia Bank (New Jersey)":{name:"Columbia Bank (New Jersey)",icon:"maki-bank",imageURL:"https://graph.facebook.com/columbiabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62084096",amenity:"bank"},addTags:{amenity:"bank",brand:"Columbia Bank","brand:wikidata":"Q62084096",name:"Columbia Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Columbia Bank (Washington)":{name:"Columbia Bank (Washington)",icon:"maki-bank",imageURL:"https://graph.facebook.com/columbiastatebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62084089",amenity:"bank"},addTags:{amenity:"bank",brand:"Columbia Bank","brand:wikidata":"Q62084089",name:"Columbia Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Comerica Bank":{name:"Comerica Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/comerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1114148",amenity:"bank"},addTags:{amenity:"bank",brand:"Comerica Bank","brand:wikidata":"Q1114148","brand:wikipedia":"en:Comerica",name:"Comerica Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Commerce Bank":{name:"Commerce Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/commercebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5152411",amenity:"bank"},addTags:{amenity:"bank",brand:"Commerce Bank","brand:wikidata":"Q5152411","brand:wikipedia":"en:Commerce Bancshares",name:"Commerce Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Commercial Bank of Ceylon PLC":{name:"Commercial Bank of Ceylon PLC",icon:"maki-bank",imageURL:"https://graph.facebook.com/combanksl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5152468",amenity:"bank"},addTags:{amenity:"bank",brand:"Commercial Bank of Ceylon PLC","brand:wikidata":"Q5152468","brand:wikipedia":"en:Commercial Bank of Ceylon",name:"Commercial Bank of Ceylon PLC"},countryCodes:["lk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Commerzbank":{name:"Commerzbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/commerzbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157617",amenity:"bank"},addTags:{amenity:"bank",brand:"Commerzbank","brand:wikidata":"Q157617","brand:wikipedia":"en:Commerzbank",name:"Commerzbank"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Commonwealth Bank":{name:"Commonwealth Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/commonwealthbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q285328",amenity:"bank"},addTags:{amenity:"bank",brand:"Commonwealth Bank","brand:wikidata":"Q285328","brand:wikipedia":"en:Commonwealth Bank",name:"Commonwealth Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Community Bank":{name:"Community Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/communitybankna/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5154635",amenity:"bank"},addTags:{amenity:"bank",brand:"Community Bank","brand:wikidata":"Q5154635","brand:wikipedia":"en:Community Bank, N.A.",name:"Community Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Corporation Bank":{name:"Corporation Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/corporationbank.co.in/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003387",amenity:"bank"},addTags:{amenity:"bank",brand:"Corporation Bank","brand:wikidata":"Q2003387","brand:wikipedia":"en:Corporation Bank",name:"Corporation Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Credem":{name:"Credem",icon:"maki-bank",imageURL:"https://graph.facebook.com/credem/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3696881",amenity:"bank"},addTags:{amenity:"bank",brand:"Credem","brand:wikidata":"Q3696881","brand:wikipedia":"en:Credito Emiliano",name:"Credem"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Credicoop":{name:"Credicoop",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancocredicoopcl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854086",amenity:"bank"},addTags:{amenity:"bank",brand:"Credicoop","brand:wikidata":"Q4854086","brand:wikipedia":"en:Banco Credicoop",name:"Credicoop"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Credit Suisse":{name:"Credit Suisse",icon:"maki-bank",imageURL:"https://graph.facebook.com/creditsuisse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q372657",amenity:"bank"},addTags:{amenity:"bank",brand:"Credit Suisse","brand:wikidata":"Q372657","brand:wikipedia":"en:Credit Suisse",name:"Credit Suisse"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Credito Valtellinese":{name:"Credito Valtellinese",icon:"maki-bank",imageURL:"https://graph.facebook.com/Creval/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3696888",amenity:"bank"},addTags:{amenity:"bank",brand:"Credito Valtellinese","brand:wikidata":"Q3696888","brand:wikipedia":"en:Credito Valtellinese",name:"Credito Valtellinese"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crelan":{name:"Crelan",icon:"maki-bank",imageURL:"https://graph.facebook.com/Crelan.Banque/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q389872",amenity:"bank"},addTags:{amenity:"bank",brand:"Crelan","brand:wikidata":"Q389872","brand:wikipedia":"en:Crelan",name:"Crelan"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit Agricole":{name:"Crédit Agricole",icon:"maki-bank",imageURL:"https://graph.facebook.com/CreditAgricole/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q590952",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit Agricole","brand:wikidata":"Q590952","brand:wikipedia":"fr:Crédit agricole",name:"Crédit Agricole"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit Maritime":{name:"Crédit Maritime",icon:"maki-bank",imageURL:"https://graph.facebook.com/CreditMaritimeGrandOuest/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17176866",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit Maritime","brand:wikidata":"Q17176866","brand:wikipedia":"fr:Crédit maritime",name:"Crédit Maritime"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit Mutuel":{name:"Crédit Mutuel",icon:"maki-bank",imageURL:"https://graph.facebook.com/creditmutuel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q642627",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit Mutuel","brand:wikidata":"Q642627","brand:wikipedia":"en:Crédit Mutuel",name:"Crédit Mutuel"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit Mutuel de Bretagne":{name:"Crédit Mutuel de Bretagne",icon:"maki-bank",imageURL:"https://graph.facebook.com/GroupeArkea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3006236",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit Mutuel de Bretagne","brand:wikidata":"Q3006236","brand:wikipedia":"fr:Crédit mutuel Arkéa",name:"Crédit Mutuel de Bretagne"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit du Nord":{name:"Crédit du Nord",icon:"maki-bank",imageURL:"https://graph.facebook.com/creditdunord/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3006209",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit du Nord","brand:wikidata":"Q3006209","brand:wikipedia":"en:Crédit du Nord",name:"Crédit du Nord"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédito Agrícola":{name:"Crédito Agrícola",icon:"maki-bank",imageURL:"https://graph.facebook.com/grupocreditoagricola/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10262017",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédito Agrícola","brand:wikidata":"Q10262017","brand:wikipedia":"pt:Crédito Agrícola",name:"Crédito Agrícola"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Danske Bank":{name:"Danske Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/DanskeBankDanmark/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1636974",amenity:"bank"},addTags:{amenity:"bank",brand:"Danske Bank","brand:wikidata":"Q1636974","brand:wikipedia":"en:Danske Bank",name:"Danske Bank"},countryCodes:["dk","fi","gb","lt","no","se"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Davivienda":{name:"Davivienda",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoDavivienda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5242054",amenity:"bank"},addTags:{amenity:"bank",brand:"Davivienda","brand:wikidata":"Q5242054","brand:wikipedia":"es:Davivienda",name:"Davivienda"},countryCodes:["co","cr","hn","pa","sv"],terms:["banco davivienda"],matchScore:2,suggestion:true},"amenity/bank/Denizbank":{name:"Denizbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/DenizBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1115064",amenity:"bank"},addTags:{amenity:"bank",brand:"Denizbank","brand:wikidata":"Q1115064","brand:wikipedia":"en:DenizBank",name:"Denizbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Desjardins":{name:"Desjardins",icon:"maki-bank",imageURL:"https://graph.facebook.com/desjardins/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2933350",amenity:"bank"},addTags:{amenity:"bank",brand:"Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Desjardins"},countryCodes:["ca"],terms:["caisse desjardins"],matchScore:2,suggestion:true},"amenity/bank/Deutsche Bank":{name:"Deutsche Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/DeutscheBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66048",amenity:"bank"},addTags:{amenity:"bank",brand:"Deutsche Bank","brand:wikidata":"Q66048","brand:wikipedia":"en:Deutsche Bank",name:"Deutsche Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Dollar Bank":{name:"Dollar Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/dollarbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5289205",amenity:"bank"},addTags:{amenity:"bank",brand:"Dollar Bank","brand:wikidata":"Q5289205","brand:wikipedia":"en:Dollar Bank",name:"Dollar Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Dubai Islamic Bank":{name:"Dubai Islamic Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/dib.uae/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5310570",amenity:"bank"},addTags:{amenity:"bank",brand:"Dubai Islamic Bank","brand:wikidata":"Q5310570","brand:wikipedia":"en:Dubai Islamic Bank",name:"Dubai Islamic Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/EastWest Unibank":{name:"EastWest Unibank",icon:"maki-bank",imageURL:"https://graph.facebook.com/EastWestBanker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5327595",amenity:"bank"},addTags:{amenity:"bank",brand:"EastWest Unibank","brand:wikidata":"Q5327595","brand:wikipedia":"en:EastWest Bank",name:"EastWest Unibank"},countryCodes:["ph"],terms:["eastwest bank"],matchScore:2,suggestion:true},"amenity/bank/Ecobank":{name:"Ecobank",icon:"maki-bank",imageURL:"https://graph.facebook.com/EcobankGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q930225",amenity:"bank"},addTags:{amenity:"bank",brand:"Ecobank","brand:wikidata":"Q930225","brand:wikipedia":"en:Ecobank",name:"Ecobank"},terms:["agence ecobank"],matchScore:2,suggestion:true},"amenity/bank/Emigrant Savings Bank":{name:"Emigrant Savings Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5371104",amenity:"bank"},addTags:{amenity:"bank",brand:"Emigrant Savings Bank","brand:wikidata":"Q5371104","brand:wikipedia":"en:Emigrant Savings Bank",name:"Emigrant Savings Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Emirates NBD":{name:"Emirates NBD",icon:"maki-bank",imageURL:"https://graph.facebook.com/EmiratesNBD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5372575",amenity:"bank"},addTags:{amenity:"bank",brand:"Emirates NBD","brand:wikidata":"Q5372575","brand:wikipedia":"en:Emirates NBD",name:"Emirates NBD"},countryCodes:["ae"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (Congo)":{name:"Equity Bank (Congo)",icon:"maki-bank",imageURL:"https://graph.facebook.com/www.equitybank.cd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21178738",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q21178738","brand:wikipedia":"en:Equity Bank Congo",name:"Equity Bank"},countryCodes:["cd"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (Kenya)":{name:"Equity Bank (Kenya)",icon:"maki-bank",imageURL:"https://graph.facebook.com/KeEquityBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5384664",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384664","brand:wikipedia":"en:Equity Bank Kenya Limited",name:"Equity Bank"},countryCodes:["ke"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (Rwanda)":{name:"Equity Bank (Rwanda)",icon:"maki-bank",imageURL:"https://graph.facebook.com/RwEquityBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5384665",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384665","brand:wikipedia":"en:Equity Bank Rwanda Limited",name:"Equity Bank"},countryCodes:["rw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (South Sudan)":{name:"Equity Bank (South Sudan)",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5384666",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384666","brand:wikipedia":"en:Equity Bank South Sudan Limited",name:"Equity Bank"},countryCodes:["ss"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (Tanzania)":{name:"Equity Bank (Tanzania)",icon:"maki-bank",imageURL:"https://graph.facebook.com/TzEquityBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5384667",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384667","brand:wikipedia":"en:Equity Bank Tanzania Limited",name:"Equity Bank"},countryCodes:["tz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (USA)":{name:"Equity Bank (USA)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/624655695741366272/12-izccG_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q62260414",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q62260414","brand:wikipedia":"en:Equity Bank USA",name:"Equity Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (Uganda)":{name:"Equity Bank (Uganda)",icon:"maki-bank",imageURL:"https://graph.facebook.com/UgEquityBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5384668",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384668","brand:wikipedia":"en:Equity Bank Uganda Limited",name:"Equity Bank"},countryCodes:["ug"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Erste Bank":{name:"Erste Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1008639007046107136/-MtFGuJT_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q696867",amenity:"bank"},addTags:{amenity:"bank",brand:"Erste Bank","brand:wikidata":"Q696867","brand:wikipedia":"de:Erste Bank",name:"Erste Bank"},countryCodes:["at","hr","hu","rs"],terms:[],matchScore:2,suggestion:true},"amenity/bank/EuroBic":{name:"EuroBic",icon:"maki-bank",imageURL:"https://graph.facebook.com/607149339334285/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806175",amenity:"bank"},addTags:{amenity:"bank",brand:"EuroBic","brand:wikidata":"Q806175","brand:wikipedia":"pt:EuroBic",name:"EuroBic",official_name:"Banco BIC Português"},countryCodes:["pt"],terms:["banco bic"],matchScore:2,suggestion:true},"amenity/bank/Eurobank (Greece)":{name:"Eurobank (Greece)",icon:"maki-bank",imageURL:"https://graph.facebook.com/319859041765749/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q951850",amenity:"bank"},addTags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q951850","brand:wikipedia":"el:Eurobank",name:"Eurobank"},countryCodes:["gr"],terms:["eurobank ergasias"],matchScore:2,suggestion:true},"amenity/bank/Eurobank (Poland)":{name:"Eurobank (Poland)",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q9256201",amenity:"bank"},addTags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q9256201","brand:wikipedia":"pl:Euro Bank",name:"Eurobank"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Eurobank (Serbia)":{name:"Eurobank (Serbia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/EurobankSrbija/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5411684",amenity:"bank"},addTags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q5411684","brand:wikipedia":"sr:Eurobanka",name:"Eurobank"},countryCodes:["rs"],terms:[],matchScore:2,suggestion:true},"amenity/bank/FNB (South Africa)":{name:"FNB (South Africa)",icon:"maki-bank",imageURL:"https://graph.facebook.com/FNBSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3072956",amenity:"bank"},addTags:{amenity:"bank",brand:"FNB","brand:wikidata":"Q3072956","brand:wikipedia":"en:First National Bank (South Africa)",name:"FNB",official_name:"First National Bank"},countryCodes:["bw","mz","na","us","za","zm"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Faysal Bank":{name:"Faysal Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/faysalbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5439099",amenity:"bank"},addTags:{amenity:"bank",brand:"Faysal Bank","brand:wikidata":"Q5439099","brand:wikipedia":"en:Faysal Bank",name:"Faysal Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Federal Bank":{name:"Federal Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/federalbankltd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2044983",amenity:"bank"},addTags:{amenity:"bank",brand:"Federal Bank","brand:wikidata":"Q2044983","brand:wikipedia":"en:Federal Bank",name:"Federal Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Fidelity Bank (Ghana)":{name:"Fidelity Bank (Ghana)",icon:"maki-bank",imageURL:"https://graph.facebook.com/fidelitybankgh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5446778",amenity:"bank"},addTags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q5446778","brand:wikipedia":"en:Fidelity Bank Ghana",name:"Fidelity Bank"},countryCodes:["gh"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Fidelity Bank (Nigeria)":{name:"Fidelity Bank (Nigeria)",icon:"maki-bank",imageURL:"https://graph.facebook.com/FidelityBankplc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5446777",amenity:"bank"},addTags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q5446777","brand:wikipedia":"en:Fidelity Bank Nigeria",name:"Fidelity Bank"},countryCodes:["ng"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Fidelity Bank (USA)":{name:"Fidelity Bank (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/fidelityinvestments/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1411292",amenity:"bank"},addTags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q1411292","brand:wikipedia":"en:Fidelity Investments",name:"Fidelity Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Fifth Third Bank":{name:"Fifth Third Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/FifthThirdBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1411810",amenity:"bank"},addTags:{amenity:"bank",brand:"Fifth Third Bank","brand:wikidata":"Q1411810","brand:wikipedia":"en:Fifth Third Bank",name:"Fifth Third Bank",short_name:"5/3 Bank"},countryCodes:["us"],terms:["5/3"],matchScore:2,suggestion:true},"amenity/bank/Finansbank":{name:"Finansbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/qnbfinansbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1416237",amenity:"bank"},addTags:{amenity:"bank",brand:"Finansbank","brand:wikidata":"Q1416237","brand:wikipedia":"en:Finansbank",name:"Finansbank"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/First Bank (North and South Carolina)":{name:"First Bank (North and South Carolina)",icon:"maki-bank",imageURL:"https://graph.facebook.com/localfirstbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5452332",amenity:"bank"},addTags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452332","brand:wikipedia":"en:First Bancorp",name:"First Bank"},countryCodes:["us"],terms:["1st bancorp","1st bank","first bancorp"],matchScore:2,suggestion:true},"amenity/bank/First Bank (Puerto Rico)":{name:"First Bank (Puerto Rico)",icon:"maki-bank",imageURL:"https://graph.facebook.com/firstbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5452333",amenity:"bank"},addTags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452333","brand:wikipedia":"en:First BanCorp",name:"First Bank"},countryCodes:["us"],terms:["1st bancorp","1st bank","first bancorp"],matchScore:2,suggestion:true},"amenity/bank/First Bank (Western USA)":{name:"First Bank (Western USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/efirstbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5452217",amenity:"bank"},addTags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452217","brand:wikipedia":"en:FirstBank Holding Co",name:"First Bank",short_name:"1STBank"},countryCodes:["us"],terms:["1st bank"],matchScore:2,suggestion:true},"amenity/bank/First Citizens Bank (Trinidad and Tobago)":{name:"First Citizens Bank (Trinidad and Tobago)",icon:"maki-bank",imageURL:"https://graph.facebook.com/FirstCitizens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5452734",amenity:"bank"},addTags:{amenity:"bank",brand:"First Citizens Bank","brand:wikidata":"Q5452734","brand:wikipedia":"en:First Citizens Bank (Trinidad and Tobago)",name:"First Citizens Bank"},countryCodes:["bb","tt"],terms:["1st citizens bank"],matchScore:2,suggestion:true},"amenity/bank/First Citizens Bank (USA)":{name:"First Citizens Bank (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/firstcitizensbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5452733",amenity:"bank"},addTags:{amenity:"bank",brand:"First Citizens Bank","brand:wikidata":"Q5452733","brand:wikipedia":"en:First Citizens BancShares",name:"First Citizens Bank"},countryCodes:["us"],terms:["1st citizens bank"],matchScore:2,suggestion:true},"amenity/bank/First Financial Bank":{name:"First Financial Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/FirstFinancialBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5453009",amenity:"bank"},addTags:{amenity:"bank",brand:"First Financial Bank","brand:wikidata":"Q5453009","brand:wikipedia":"en:First Financial Bank (Ohio)",name:"First Financial Bank"},countryCodes:["us"],terms:["1st financial bank"],matchScore:2,suggestion:true},"amenity/bank/First Interstate Bank":{name:"First Interstate Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/FirstInterstateBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5453107",amenity:"bank"},addTags:{amenity:"bank",brand:"First Interstate BancSystem","brand:wikidata":"Q5453107","brand:wikipedia":"en:First Interstate BancSystem",name:"First Interstate Bank"},countryCodes:["us"],terms:["1st interstate","1st interstate bancsystem","1st interstate bank","first interstate","first interstate bancsystem"],matchScore:2,suggestion:true},"amenity/bank/First Midwest Bank":{name:"First Midwest Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/FirstMidwest/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5453331",amenity:"bank"},addTags:{amenity:"bank",brand:"First Midwest Bank","brand:wikidata":"Q5453331","brand:wikipedia":"en:First Midwest Bank",name:"First Midwest Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/First National Bank (USA)":{name:"First National Bank (USA)",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5426765",amenity:"bank"},addTags:{amenity:"bank",brand:"First National Bank","brand:wikidata":"Q5426765","brand:wikipedia":"en:F.N.B. Corporation",name:"First National Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/First West Credit Union":{name:"First West Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/WebsterFirst/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5454073",amenity:"bank"},addTags:{alt_name:"First West",amenity:"bank",brand:"First West Credit Union","brand:wikidata":"Q5454073","brand:wikipedia":"en:First West Credit Union",name:"First West Credit Union"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Frost Bank":{name:"Frost Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/FrostBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5506152",amenity:"bank"},addTags:{amenity:"bank",brand:"Frost Bank","brand:wikidata":"Q5506152","brand:wikipedia":"en:Frost Bank",name:"Frost Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Fulton Bank":{name:"Fulton Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/605798444855197696/U70Uo44x_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16976594",amenity:"bank"},addTags:{amenity:"bank",brand:"Fulton Bank","brand:wikidata":"Q16976594",name:"Fulton Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/GCB Bank":{name:"GCB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/gcbbanklimited/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1521346",amenity:"bank"},addTags:{amenity:"bank",brand:"GCB Bank","brand:wikidata":"Q1521346","brand:wikipedia":"en:GCB Bank",name:"GCB Bank"},countryCodes:["gh"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Galicia":{name:"Galicia",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancogalicia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5717952",amenity:"bank"},addTags:{amenity:"bank",brand:"Galicia","brand:wikidata":"Q5717952","brand:wikipedia":"es:Banco Galicia",name:"Galicia"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Garanti":{name:"Garanti",icon:"maki-bank",imageURL:"https://graph.facebook.com/GarantiBBVA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q322962",amenity:"bank"},addTags:{amenity:"bank",brand:"Garanti","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Garanti Bankası":{name:"Garanti Bankası",icon:"maki-bank",imageURL:"https://graph.facebook.com/GarantiBBVA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q322962",amenity:"bank"},addTags:{amenity:"bank",brand:"Garanti Bankası","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti Bankası"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Getin Bank":{name:"Getin Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/GetinBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9267646",amenity:"bank"},addTags:{amenity:"bank",brand:"Getin Bank","brand:wikidata":"Q9267646","brand:wikipedia":"pl:Getin Bank",name:"Getin Bank"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Golden 1 Credit Union":{name:"Golden 1 Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/golden1cu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7736976",amenity:"bank"},addTags:{amenity:"bank",brand:"Golden 1 Credit Union","brand:wikidata":"Q7736976","brand:wikipedia":"en:Golden 1 Credit Union",name:"Golden 1 Credit Union"},countryCodes:["us"],terms:["golden 1","golden one","golden one credit union","the golden 1 credit union","the golden one credit union"],matchScore:2,suggestion:true},"amenity/bank/Great Western Bank":{name:"Great Western Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/500391873328778/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5600185",amenity:"bank"},addTags:{amenity:"bank",brand:"Great Western Bank","brand:wikidata":"Q5600185","brand:wikipedia":"en:Great Western Bank (1907–present)",name:"Great Western Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Groupama":{name:"Groupama",icon:"maki-bank",imageURL:"https://graph.facebook.com/groupama/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3083531",amenity:"bank"},addTags:{amenity:"bank",brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"en:Groupama",name:"Groupama"},terms:[],matchScore:2,suggestion:true},"amenity/bank/HBL Bank":{name:"HBL Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/HBLBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1566843",amenity:"bank"},addTags:{amenity:"bank",brand:"HBL Bank","brand:wikidata":"Q1566843","brand:wikipedia":"ur:ایچ بی ایل پاکستان",name:"HBL Bank"},countryCodes:["pk"],terms:["hbl"],matchScore:2,suggestion:true},"amenity/bank/HDFC Bank":{name:"HDFC Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/HDFC.bank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q631047",amenity:"bank"},addTags:{amenity:"bank",brand:"HDFC Bank","brand:wikidata":"Q631047","brand:wikipedia":"en:HDFC Bank",name:"HDFC Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/HNB":{name:"HNB",icon:"maki-bank",imageURL:"https://graph.facebook.com/HNBPLC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3532080",amenity:"bank"},addTags:{amenity:"bank",brand:"HNB","brand:wikidata":"Q3532080","brand:wikipedia":"en:Hatton National Bank",name:"HNB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/HSBC UK (UK)":{name:"HSBC UK (UK)",icon:"maki-bank",imageURL:"https://graph.facebook.com/hsbcuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64767453",amenity:"bank"},addTags:{amenity:"bank",brand:"HSBC UK","brand:wikidata":"Q64767453",name:"HSBC UK"},countryCodes:["gb"],terms:["hsbc"],matchScore:2,suggestion:true},"amenity/bank/HSBC (Global)":{name:"HSBC (Global)",icon:"maki-bank",imageURL:"https://graph.facebook.com/HSBC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q190464",amenity:"bank"},addTags:{amenity:"bank",brand:"HSBC","brand:wikidata":"Q190464","brand:wikipedia":"en:HSBC",name:"HSBC"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Halifax":{name:"Halifax",icon:"maki-bank",imageURL:"https://graph.facebook.com/halifax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3310164",amenity:"bank"},addTags:{amenity:"bank",brand:"Halifax","brand:wikidata":"Q3310164","brand:wikipedia":"en:Halifax (bank)",name:"Halifax"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Halkbank":{name:"Halkbank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3593818",amenity:"bank"},addTags:{amenity:"bank",brand:"Halkbank","brand:wikidata":"Q3593818","brand:wikipedia":"en:Halkbank a.d.",name:"Halkbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Hamburger Sparkasse":{name:"Hamburger Sparkasse",icon:"maki-bank",imageURL:"https://graph.facebook.com/haspa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1573140",amenity:"bank"},addTags:{amenity:"bank",brand:"Hamburger Sparkasse","brand:wikidata":"Q1573140","brand:wikipedia":"de:Hamburger Sparkasse",name:"Hamburger Sparkasse",short_name:"Haspa"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Handelsbanken":{name:"Handelsbanken",icon:"maki-bank",imageURL:"https://graph.facebook.com/Handelsbanken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1421630",amenity:"bank"},addTags:{amenity:"bank",brand:"Handelsbanken","brand:wikidata":"Q1421630","brand:wikipedia":"en:Handelsbanken",name:"Handelsbanken"},countryCodes:["dk","fi","gb","no","se"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Heritage Bank":{name:"Heritage Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/heritage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5738690",amenity:"bank"},addTags:{amenity:"bank",brand:"Heritage Bank","brand:wikidata":"Q5738690","brand:wikipedia":"en:Heritage Bank",name:"Heritage Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Hong Leong Bank":{name:"Hong Leong Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/HLBMalaysia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4383943",amenity:"bank"},addTags:{amenity:"bank",brand:"Hong Leong Bank","brand:wikidata":"Q4383943","brand:wikipedia":"en:Hong Leong Bank",name:"Hong Leong Bank"},countryCodes:["my"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Hrvatska poštanska banka":{name:"Hrvatska poštanska banka",icon:"maki-bank",imageURL:"https://graph.facebook.com/mojpunnovcanik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5923981",amenity:"bank"},addTags:{amenity:"bank",brand:"Hrvatska poštanska banka","brand:wikidata":"Q5923981","brand:wikipedia":"en:Hrvatska poštanska banka",name:"Hrvatska poštanska banka"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Huntington Bank":{name:"Huntington Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/HuntingtonBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q798819",amenity:"bank"},addTags:{amenity:"bank",brand:"Huntington Bank","brand:wikidata":"Q798819","brand:wikipedia":"en:Huntington Bancshares",name:"Huntington Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/HypoVereinsbank":{name:"HypoVereinsbank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/950681154906095618/sFON4jIk_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q220189",amenity:"bank"},addTags:{amenity:"bank",brand:"HypoVereinsbank","brand:wikidata":"Q220189","brand:wikipedia":"en:HypoVereinsbank",name:"HypoVereinsbank"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ICBC":{name:"ICBC",icon:"maki-bank",imageURL:"https://graph.facebook.com/icbcglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26463",amenity:"bank"},addTags:{amenity:"bank",brand:"ICBC","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"ICBC"},terms:[],matchScore:2,suggestion:true},"amenity/bank/ICICI Bank":{name:"ICICI Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/icicibank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1653258",amenity:"bank"},addTags:{amenity:"bank",brand:"ICICI Bank","brand:wikidata":"Q1653258","brand:wikipedia":"en:ICICI Bank",name:"ICICI Bank"},countryCodes:["ca","gb","in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/IDBI Bank":{name:"IDBI Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/IDBIBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3633485",amenity:"bank"},addTags:{amenity:"bank",brand:"IDBI Bank","brand:wikidata":"Q3633485","brand:wikipedia":"en:IDBI Bank",name:"IDBI Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ING":{name:"ING",icon:"maki-bank",imageURL:"https://graph.facebook.com/ING/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q645708",amenity:"bank"},addTags:{amenity:"bank",brand:"ING","brand:wikidata":"Q645708","brand:wikipedia":"en:ING Group",name:"ING"},terms:["ing bank"],matchScore:2,suggestion:true},"amenity/bank/ING Bank Śląski":{name:"ING Bank Śląski",icon:"maki-bank",imageURL:"https://graph.facebook.com/INGPolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1410383",amenity:"bank"},addTags:{amenity:"bank",brand:"ING Bank Śląski","brand:wikidata":"Q1410383","brand:wikipedia":"pl:ING Bank Śląski",name:"ING Bank Śląski"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Ibercaja":{name:"Ibercaja",icon:"maki-bank",imageURL:"https://graph.facebook.com/Ibercaja/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5907815",amenity:"bank"},addTags:{amenity:"bank",brand:"Ibercaja","brand:wikidata":"Q5907815","brand:wikipedia":"es:Ibercaja (banco)",name:"Ibercaja"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Indian Bank":{name:"Indian Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/MyIndianBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003789",amenity:"bank"},addTags:{amenity:"bank",brand:"Indian Bank","brand:wikidata":"Q2003789","brand:wikipedia":"en:Indian Bank",name:"Indian Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Indian Overseas Bank":{name:"Indian Overseas Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankiob/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003611",amenity:"bank"},addTags:{amenity:"bank",brand:"Indian Overseas Bank","brand:wikidata":"Q2003611","brand:wikipedia":"en:Indian Overseas Bank",name:"Indian Overseas Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Interbank":{name:"Interbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/InterbankPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2835558",amenity:"bank"},addTags:{amenity:"bank",brand:"Interbank","brand:wikidata":"Q2835558","brand:wikipedia":"es:Interbank",name:"Interbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Intesa Sanpaolo":{name:"Intesa Sanpaolo",icon:"maki-bank",imageURL:"https://graph.facebook.com/intesasanpaolo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1343118",amenity:"bank"},addTags:{amenity:"bank",brand:"Intesa Sanpaolo","brand:wikidata":"Q1343118","brand:wikipedia":"it:Intesa Sanpaolo",name:"Intesa Sanpaolo"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Investors Bank":{name:"Investors Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Investorsbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15109896",amenity:"bank"},addTags:{amenity:"bank",brand:"Investors Bank","brand:wikidata":"Q15109896","brand:wikipedia":"en:Investors Bank",name:"Investors Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Itaú (Brazil)":{name:"Itaú (Brazil)",icon:"maki-bank",imageURL:"https://graph.facebook.com/itau/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1424293",amenity:"bank"},addTags:{amenity:"bank",brand:"Itaú Unibanco","brand:wikidata":"Q1424293","brand:wikipedia":"pt:Itaú Unibanco",name:"Itaú"},countryCodes:["br"],terms:["banco itau"],matchScore:2,suggestion:true},"amenity/bank/Itaú (Chile)":{name:"Itaú (Chile)",icon:"maki-bank",imageURL:"https://graph.facebook.com/corpbanca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2423252",amenity:"bank"},addTags:{amenity:"bank",brand:"Itaú Corpbanca","brand:wikidata":"Q2423252","brand:wikipedia":"en:Itaú Corpbanca",name:"Itaú"},countryCodes:["cl"],terms:["banco itau"],matchScore:2,suggestion:true},"amenity/bank/JS Bank":{name:"JS Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/JSBankLtd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6108986",amenity:"bank"},addTags:{amenity:"bank",brand:"JS Bank","brand:wikidata":"Q6108986","brand:wikipedia":"en:JS Bank",name:"JS Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Jyske Bank":{name:"Jyske Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1062308131567517702/0I4wgGmc_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q136672",amenity:"bank"},addTags:{amenity:"bank",brand:"Jyske Bank","brand:wikidata":"Q136672","brand:wikipedia":"en:Jyske Bank",name:"Jyske Bank"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/K&H Bank":{name:"K&H Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/dontsokosan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6393834",amenity:"bank"},addTags:{amenity:"bank",brand:"K&H Bank","brand:wikidata":"Q6393834","brand:wikipedia":"en:K&H Bank",name:"K&H Bank"},countryCodes:["hu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/KBC":{name:"KBC",icon:"maki-bank",imageURL:"https://graph.facebook.com/KBCBankEnVerzekering/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q941020",amenity:"bank"},addTags:{amenity:"bank",brand:"KBC","brand:wikidata":"Q941020","brand:wikipedia":"en:KBC Bank",name:"KBC"},countryCodes:["be","ie"],terms:[],matchScore:2,suggestion:true},"amenity/bank/KBZ Bank":{name:"KBZ Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/KanbawzaBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6360949",amenity:"bank"},addTags:{amenity:"bank",brand:"KBZ Bank","brand:wikidata":"Q6360949","brand:wikipedia":"en:Kanbawza Bank",name:"KBZ Bank"},countryCodes:["mm"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Karnataka Bank":{name:"Karnataka Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/KarnatakaBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2042632",amenity:"bank"},addTags:{amenity:"bank",brand:"Karnataka Bank","brand:wikidata":"Q2042632","brand:wikipedia":"en:Karnataka Bank",name:"Karnataka Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Karur Vysya Bank":{name:"Karur Vysya Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/KVB100/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6373724",amenity:"bank"},addTags:{amenity:"bank",brand:"Karur Vysya Bank","brand:wikidata":"Q6373724","brand:wikipedia":"en:Karur Vysya Bank",name:"Karur Vysya Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Kasa Stefczyka":{name:"Kasa Stefczyka",icon:"maki-bank",imageURL:"https://graph.facebook.com/kasastefczykapl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57624461",amenity:"bank"},addTags:{amenity:"bank",brand:"Kasa Stefczyka","brand:wikidata":"Q57624461",name:"Kasa Stefczyka"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/KeyBank":{name:"KeyBank",icon:"maki-bank",imageURL:"https://graph.facebook.com/keybank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1740314",amenity:"bank"},addTags:{amenity:"bank",brand:"KeyBank","brand:wikidata":"Q1740314","brand:wikipedia":"en:KeyBank",name:"KeyBank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Komerční banka":{name:"Komerční banka",icon:"maki-bank",imageURL:"https://graph.facebook.com/komercni.banka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1541079",amenity:"bank"},addTags:{amenity:"bank",brand:"Komerční banka","brand:wikidata":"Q1541079","brand:wikipedia":"en:Komerční banka",name:"Komerční banka"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Kotak Mahindra Bank":{name:"Kotak Mahindra Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/KotakBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2040404",amenity:"bank"},addTags:{amenity:"bank",brand:"Kotak Mahindra Bank","brand:wikidata":"Q2040404","brand:wikipedia":"en:Kotak Mahindra Bank",name:"Kotak Mahindra Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Kutxabank":{name:"Kutxabank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Kutxabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5139377",amenity:"bank"},addTags:{amenity:"bank",brand:"Kutxabank","brand:wikidata":"Q5139377","brand:wikipedia":"en:Kutxabank",name:"Kutxabank"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Kuveyt Türk":{name:"Kuveyt Türk",icon:"maki-bank",imageURL:"https://graph.facebook.com/KuveytTurk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6036058",amenity:"bank"},addTags:{amenity:"bank",brand:"Kuveyt Türk","brand:wikidata":"Q6036058","brand:wikipedia":"tr:Kuveyt Türk",name:"Kuveyt Türk"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/LCL":{name:"LCL",icon:"maki-bank",imageURL:"https://graph.facebook.com/LCL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q779722",amenity:"bank"},addTags:{amenity:"bank",brand:"LCL","brand:wikidata":"Q779722","brand:wikipedia":"fr:Crédit lyonnais",name:"LCL"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/LCNB":{name:"LCNB",icon:"maki-bank",imageURL:"https://graph.facebook.com/LCNBNATBANK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65095575",amenity:"bank"},addTags:{alt_name:"Lebanon Citizens National Bank",amenity:"bank",brand:"LCNB","brand:wikidata":"Q65095575",name:"LCNB",official_name:"LCNB National Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/La Banque Postale":{name:"La Banque Postale",icon:"maki-bank",imageURL:"https://graph.facebook.com/labanquepostale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3206431",amenity:"bank"},addTags:{amenity:"bank",brand:"La Banque Postale","brand:wikidata":"Q3206431","brand:wikipedia":"en:La Banque postale",name:"La Banque Postale"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/La Caixa":{name:"La Caixa",icon:"maki-bank",imageURL:"https://graph.facebook.com/fundlacaixa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q287753",amenity:"bank"},addTags:{amenity:"bank",brand:"La Caixa","brand:wikidata":"Q287753","brand:wikipedia":"en:La Caixa",name:"La Caixa"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Laboral Kutxa":{name:"Laboral Kutxa",icon:"maki-bank",imageURL:"https://graph.facebook.com/laboralkutxa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12052386",amenity:"bank"},addTags:{amenity:"bank",brand:"Laboral Kutxa","brand:wikidata":"Q12052386","brand:wikipedia":"en:Laboral Kutxa",name:"Laboral Kutxa"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Lake Michigan Credit Union":{name:"Lake Michigan Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/LakeMichiganCreditUnion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6476906",amenity:"bank"},addTags:{amenity:"bank",brand:"Lake Michigan Credit Union","brand:wikidata":"Q6476906","brand:wikipedia":"en:Lake Michigan Credit Union",name:"Lake Michigan Credit Union",short_name:"LMCU"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Landbank":{name:"Landbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/landbankofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6483872",amenity:"bank"},addTags:{amenity:"bank",brand:"Landbank","brand:wikidata":"Q6483872","brand:wikipedia":"en:Land Bank of the Philippines",name:"Landbank"},countryCodes:["ph"],terms:["bangko sa lupa ng pilipinas","land bank of the philippines","lbp"],matchScore:2,suggestion:true},"amenity/bank/Leeds Building Society":{name:"Leeds Building Society",icon:"maki-bank",imageURL:"https://graph.facebook.com/LeedsBS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6515848",amenity:"bank"},addTags:{amenity:"bank",brand:"Leeds Building Society","brand:wikidata":"Q6515848","brand:wikipedia":"en:Leeds Building Society",name:"Leeds Building Society"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Liberbank":{name:"Liberbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/liberbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2891018",amenity:"bank"},addTags:{amenity:"bank",brand:"Liberbank","brand:wikidata":"Q2891018","brand:wikipedia":"en:Liberbank",name:"Liberbank"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Liberty Bank (Connecticut)":{name:"Liberty Bank (Connecticut)",icon:"maki-bank",imageURL:"https://graph.facebook.com/Liberty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6541584",amenity:"bank"},addTags:{amenity:"bank",brand:"Liberty Bank","brand:wikidata":"Q6541584","brand:wikipedia":"en:Liberty Bank",name:"Liberty Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Lloyds Bank":{name:"Lloyds Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/lloydsbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1152847",amenity:"bank"},addTags:{amenity:"bank",brand:"Lloyds Bank","brand:wikidata":"Q1152847","brand:wikipedia":"en:Lloyds Bank",name:"Lloyds Bank"},countryCodes:["gb","im"],terms:["lloyds","lloyds tsb"],matchScore:2,suggestion:true},"amenity/bank/M&T Bank":{name:"M&T Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/MandTBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3272257",amenity:"bank"},addTags:{amenity:"bank",brand:"M&T Bank","brand:wikidata":"Q3272257","brand:wikipedia":"en:M&T Bank",name:"M&T Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/MCB":{name:"MCB",icon:"maki-bank",imageURL:"https://graph.facebook.com/mcbbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15982510",amenity:"bank"},addTags:{amenity:"bank",brand:"MCB","brand:wikidata":"Q15982510","brand:wikipedia":"ur:ایم سی بی بینک لمیٹڈ",name:"MCB"},terms:["mcb bank"],matchScore:2,suggestion:true},"amenity/bank/MONETA Money Bank":{name:"MONETA Money Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/726534904452931588/E4dnojuF_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q24282966",amenity:"bank"},addTags:{amenity:"bank",brand:"MONETA Money Bank","brand:wikidata":"Q24282966","brand:wikipedia":"cs:Moneta Money Bank",name:"MONETA Money Bank"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Macro":{name:"Macro",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancomacro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2335199",amenity:"bank"},addTags:{amenity:"bank",brand:"Macro","brand:wikidata":"Q2335199","brand:wikipedia":"en:Banco Macro",name:"Macro"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Maybank":{name:"Maybank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Maybank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1364018",amenity:"bank"},addTags:{amenity:"bank",brand:"Maybank","brand:wikidata":"Q1364018","brand:wikipedia":"en:Maybank",name:"Maybank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Meezan Bank":{name:"Meezan Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/MeezanBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6807934",amenity:"bank"},addTags:{amenity:"bank",brand:"Meezan Bank","brand:wikidata":"Q6807934","brand:wikipedia":"en:Meezan Bank",name:"Meezan Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Mercantil":{name:"Mercantil",icon:"maki-bank",imageURL:"https://graph.facebook.com/mercantilbancooficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6818004",amenity:"bank"},addTags:{amenity:"bank",brand:"Mercantil","brand:wikidata":"Q6818004","brand:wikipedia":"en:Mercantil Servicios Financieros",name:"Mercantil"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Meridian Credit Union":{name:"Meridian Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/MeridianCreditUnion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6819303",amenity:"bank"},addTags:{alt_name:"Meridian",amenity:"bank",brand:"Meridian Credit Union","brand:wikidata":"Q6819303","brand:wikipedia":"en:Meridian Credit Union",name:"Meridian Credit Union"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Metro Bank (UK)":{name:"Metro Bank (UK)",icon:"maki-bank",imageURL:"https://graph.facebook.com/380904035384141/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6824499",amenity:"bank"},addTags:{amenity:"bank",brand:"Metro Bank","brand:wikidata":"Q6824499","brand:wikipedia":"en:Metro Bank (United Kingdom)",name:"Metro Bank"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Metrobank (Philippines)":{name:"Metrobank (Philippines)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1140117795809550338/ySSJStq-_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1925799",amenity:"bank"},addTags:{amenity:"bank",brand:"Metrobank","brand:wikidata":"Q1925799","brand:wikipedia":"en:Metrobank (Philippines)",name:"Metrobank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Mibanco":{name:"Mibanco",icon:"maki-bank",imageURL:"https://graph.facebook.com/MibancoOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5558589",amenity:"bank"},addTags:{amenity:"bank",brand:"Mibanco","brand:wikidata":"Q5558589",name:"Mibanco"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/MidFirst Bank":{name:"MidFirst Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1096428932889362432/-d2Y2wF4_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q17081131",amenity:"bank"},addTags:{amenity:"bank",brand:"MidFirst Bank","brand:wikidata":"Q17081131","brand:wikipedia":"en:MidFirst Bank",name:"MidFirst Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Millennium Bank":{name:"Millennium Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/684026097688817664/fg1i7QVc_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q4855947",amenity:"bank"},addTags:{amenity:"bank",brand:"Millennium Bank","brand:wikidata":"Q4855947","brand:wikipedia":"pl:Bank Millennium",name:"Millennium Bank"},countryCodes:["pl"],terms:["bank millennium"],matchScore:2,suggestion:true},"amenity/bank/Millennium bcp":{name:"Millennium bcp",icon:"maki-bank",imageURL:"https://graph.facebook.com/millenniumbcp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118581",amenity:"bank"},addTags:{amenity:"bank",brand:"Millennium bcp","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"Millennium bcp",official_name:"Banco Comercial Português","official_name:en":"Portuguese Commercial Bank","official_name:es":"Banco Comercial Português"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Mission Federal Credit Union":{name:"Mission Federal Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/missionfedcu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18345955",amenity:"bank"},addTags:{amenity:"bank",brand:"Mission Federal Credit Union","brand:wikidata":"Q18345955","brand:wikipedia":"en:Mission Federal Credit Union",name:"Mission Federal Credit Union"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Mittelbrandenburgische Sparkasse":{name:"Mittelbrandenburgische Sparkasse",icon:"maki-bank",imageURL:"https://graph.facebook.com/mbs.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1940058",amenity:"bank"},addTags:{amenity:"bank",brand:"Mittelbrandenburgische Sparkasse","brand:wikidata":"Q1940058","brand:wikipedia":"de:Mittelbrandenburgische Sparkasse",name:"Mittelbrandenburgische Sparkasse"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Monte dei Paschi di Siena":{name:"Monte dei Paschi di Siena",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancamps/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q46730",amenity:"bank"},addTags:{amenity:"bank",brand:"Monte dei Paschi di Siena","brand:wikidata":"Q46730","brand:wikipedia":"en:Banca Monte dei Paschi di Siena",name:"Monte dei Paschi di Siena"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Montepio":{name:"Montepio",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/303285168/logo_Montepio_259x248_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1946091",amenity:"bank"},addTags:{amenity:"bank",brand:"Montepio","brand:wikidata":"Q1946091","brand:wikipedia":"en:Montepio (bank)",name:"Montepio"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Mountain America Credit Union":{name:"Mountain America Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/MountainAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6924862",amenity:"bank"},addTags:{amenity:"bank",brand:"Mountain America Credit Union","brand:wikidata":"Q6924862","brand:wikipedia":"en:Mountain America Credit Union",name:"Mountain America Credit Union"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/NAB":{name:"NAB",icon:"maki-bank",imageURL:"https://graph.facebook.com/NAB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1430985",amenity:"bank"},addTags:{amenity:"bank",brand:"NAB","brand:wikidata":"Q1430985","brand:wikipedia":"en:National Australia Bank",name:"NAB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/NASA Federal Credit Union":{name:"NASA Federal Credit Union",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/458951842995503105/UQGjhMmT_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q6952409",amenity:"bank"},addTags:{amenity:"bank",brand:"NASA Federal Credit Union","brand:wikidata":"Q6952409","brand:wikipedia":"en:NASA Federal Credit Union",name:"NASA Federal Credit Union"},terms:[],matchScore:2,suggestion:true},"amenity/bank/NLB":{name:"NLB",icon:"maki-bank",imageURL:"https://graph.facebook.com/NLBdd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1481509",amenity:"bank"},addTags:{amenity:"bank",brand:"NLB","brand:wikidata":"Q1481509","brand:wikipedia":"en:NLB Group",name:"NLB"},countryCodes:["si"],terms:[],matchScore:2,suggestion:true},"amenity/bank/NSB":{name:"NSB",icon:"maki-bank",imageURL:"https://graph.facebook.com/NSBSLOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12500189",amenity:"bank"},addTags:{amenity:"bank",brand:"NSB","brand:wikidata":"Q12500189","brand:wikipedia":"en:National Savings Bank (Sri Lanka)",name:"NSB"},countryCodes:["lk"],terms:["national savings bank"],matchScore:2,suggestion:true},"amenity/bank/NatWest":{name:"NatWest",icon:"maki-bank",imageURL:"https://graph.facebook.com/NatWest/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2740021",amenity:"bank"},addTags:{amenity:"bank",brand:"NatWest","brand:wikidata":"Q2740021","brand:wikipedia":"en:NatWest",name:"NatWest"},countryCodes:["gb","gg"],terms:[],matchScore:2,suggestion:true},"amenity/bank/National Bank":{name:"National Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/banquenationale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q634298",amenity:"bank"},addTags:{amenity:"bank",brand:"National Bank","brand:en":"National Bank","brand:fr":"Banque Nationale","brand:wikidata":"Q634298","brand:wikipedia":"en:National Bank of Canada",name:"National Bank","name:en":"National Bank","name:fr":"Banque Nationale",official_name:"National Bank of Canada","official_name:en":"National Bank of Canada","official_name:fr":"Banque Nationale du Canada"},countryCodes:["ca"],terms:["banque nationale","banque nationale du canada"],matchScore:2,suggestion:true},"amenity/bank/Nationwide":{name:"Nationwide",icon:"maki-bank",imageURL:"https://graph.facebook.com/NationwideBuildingSociety/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q846735",amenity:"bank"},addTags:{amenity:"bank",brand:"Nationwide","brand:wikidata":"Q846735","brand:wikipedia":"en:Nationwide Building Society",name:"Nationwide"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Navy Federal Credit Union":{name:"Navy Federal Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/NavyFederal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6982632",amenity:"bank"},addTags:{amenity:"bank",brand:"Navy Federal Credit Union","brand:wikidata":"Q6982632","brand:wikipedia":"en:Navy Federal Credit Union",name:"Navy Federal Credit Union"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Nedbank":{name:"Nedbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Nedbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2751701",amenity:"bank"},addTags:{amenity:"bank",brand:"Nedbank","brand:wikidata":"Q2751701","brand:wikipedia":"en:Nedbank",name:"Nedbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Nordea":{name:"Nordea",icon:"maki-bank",imageURL:"https://graph.facebook.com/Nordea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1123823",amenity:"bank"},addTags:{amenity:"bank",brand:"Nordea","brand:wikidata":"Q1123823","brand:wikipedia":"en:Nordea",name:"Nordea"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Novo Banco":{name:"Novo Banco",icon:"maki-bank",imageURL:"https://graph.facebook.com/planetanovobanco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17488861",amenity:"bank"},addTags:{amenity:"bank",brand:"Novo Banco","brand:wikidata":"Q17488861","brand:wikipedia":"en:Novo Banco",name:"Novo Banco"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/OLB":{name:"OLB",icon:"maki-bank",imageURL:"https://graph.facebook.com/OLB.Bank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q879591",amenity:"bank"},addTags:{amenity:"bank",brand:"OLB","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"OLB"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/OTP":{name:"OTP",icon:"maki-bank",imageURL:"https://graph.facebook.com/otpbank.hu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q912778",amenity:"bank"},addTags:{amenity:"bank",brand:"OTP","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"OTP Bank"},terms:["otp bank"],matchScore:2,suggestion:true},"amenity/bank/Oberbank":{name:"Oberbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/oberbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2009139",amenity:"bank"},addTags:{amenity:"bank",brand:"Oberbank","brand:wikidata":"Q2009139","brand:wikipedia":"de:Oberbank",name:"Oberbank"},countryCodes:["at","cz","de","hu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Occidental de Descuento":{name:"Occidental de Descuento",icon:"maki-bank",imageURL:"https://graph.facebook.com/1086400904717496/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854108",amenity:"bank"},addTags:{amenity:"bank",brand:"Occidental de Descuento","brand:wikidata":"Q4854108","brand:wikipedia":"en:Banco Occidental de Descuento",name:"Occidental de Descuento"},countryCodes:["ve"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Oldenburgische Landesbank":{name:"Oldenburgische Landesbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/OLB.Bank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q879591",amenity:"bank"},addTags:{amenity:"bank",brand:"Oldenburgische Landesbank","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"Oldenburgische Landesbank"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/One Network Bank":{name:"One Network Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7093019",amenity:"bank"},addTags:{amenity:"bank",brand:"One Network Bank","brand:wikidata":"Q7093019","brand:wikipedia":"en:One Network Bank",name:"One Network Bank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Oriental":{name:"Oriental",icon:"maki-bank",imageURL:"https://graph.facebook.com/OrientalBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64887002",amenity:"bank"},addTags:{alt_name:"Oriental Bank",amenity:"bank",brand:"Oriental","brand:wikidata":"Q64887002",name:"Oriental"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Oriental Bank of Commerce":{name:"Oriental Bank of Commerce",icon:"maki-bank",imageURL:"https://graph.facebook.com/OBCIndOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q367008",amenity:"bank"},addTags:{amenity:"bank",brand:"Oriental Bank of Commerce","brand:wikidata":"Q367008","brand:wikipedia":"en:Oriental Bank of Commerce",name:"Oriental Bank of Commerce"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Osuuspankki":{name:"Osuuspankki",icon:"maki-bank",imageURL:"https://graph.facebook.com/OP.fi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4045597",amenity:"bank"},addTags:{amenity:"bank",brand:"Osuuspankki","brand:wikidata":"Q4045597","brand:wikipedia":"fi:OP (finanssiryhmä)",name:"Osuuspankki"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/bank/PBZ":{name:"PBZ",icon:"maki-bank",imageURL:"https://graph.facebook.com/privrednabankazagreb/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7246343",amenity:"bank"},addTags:{amenity:"bank",brand:"PBZ","brand:wikidata":"Q7246343","brand:wikipedia":"en:Privredna banka Zagreb",name:"PBZ"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/PKO BP":{name:"PKO BP",icon:"maki-bank",imageURL:"https://graph.facebook.com/PKOBankPolski/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q578832",amenity:"bank"},addTags:{amenity:"bank",brand:"PKO BP","brand:wikidata":"Q578832","brand:wikipedia":"pl:Powszechna Kasa Oszczędności Bank Polski",name:"PKO BP"},countryCodes:["pl"],terms:["pko bank polski"],matchScore:2,suggestion:true},"amenity/bank/PNB":{name:"PNB",icon:"maki-bank",imageURL:"https://graph.facebook.com/PNBph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1657971",amenity:"bank"},addTags:{amenity:"bank",brand:"PNB","brand:wikidata":"Q1657971","brand:wikipedia":"en:Philippine National Bank",name:"PNB",official_name:"Philippine National Bank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/PNC Bank":{name:"PNC Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/pncbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38928",amenity:"bank"},addTags:{amenity:"bank",brand:"PNC Bank","brand:wikidata":"Q38928","brand:wikipedia":"en:PNC Financial Services",name:"PNC Bank"},countryCodes:["us"],terms:["pnc"],matchScore:2,suggestion:true},"amenity/bank/PSBank":{name:"PSBank",icon:"maki-bank",imageURL:"https://graph.facebook.com/psbankofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7185203",amenity:"bank"},addTags:{amenity:"bank",brand:"PSBank","brand:wikidata":"Q7185203","brand:wikipedia":"en:Philippine Savings Bank",name:"PSBank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Panin Bank":{name:"Panin Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/paninbankfanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12502751",amenity:"bank"},addTags:{amenity:"bank",brand:"Panin Bank","brand:wikidata":"Q12502751","brand:wikipedia":"id:Panin Bank",name:"Panin Bank"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Patagonia":{name:"Patagonia",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoPatagonia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882078",amenity:"bank"},addTags:{amenity:"bank",brand:"Patagonia","brand:wikidata":"Q2882078","brand:wikipedia":"en:Banco Patagonia",name:"Patagonia"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Pekao SA":{name:"Pekao SA",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankpekaosa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806642",amenity:"bank"},addTags:{amenity:"bank",brand:"Pekao SA","brand:wikidata":"Q806642","brand:wikipedia":"pl:Bank Polska Kasa Opieki",name:"Pekao SA"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/PenFed Credit Union":{name:"PenFed Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/PenFed/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3374885",amenity:"bank"},addTags:{alt_name:"Pentagon Federal Credit Union",amenity:"bank",brand:"PenFed Credit Union","brand:wikidata":"Q3374885","brand:wikipedia":"en:Pentagon Federal Credit Union",name:"PenFed Credit Union",short_name:"PenFed"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/People's United Bank":{name:"People's United Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/peoplesunited/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7165802",amenity:"bank"},addTags:{amenity:"bank",brand:"People's United Bank","brand:wikidata":"Q7165802","brand:wikipedia":"en:People's United Financial",name:"People's United Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Peoples Bank (Ohio)":{name:"Peoples Bank (Ohio)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1196505714942005250/zxK84aT2_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q65716607",amenity:"bank"},addTags:{amenity:"bank",brand:"Peoples Bank","brand:wikidata":"Q65716607",name:"Peoples Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Peoples Bank (Washington)":{name:"Peoples Bank (Washington)",icon:"maki-bank",imageURL:"https://graph.facebook.com/peoplesbankwa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7166050",amenity:"bank"},addTags:{amenity:"bank",brand:"Peoples Bank","brand:wikidata":"Q7166050","brand:wikipedia":"en:Peoples Bank",name:"Peoples Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Piraeus Bank":{name:"Piraeus Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/piraeusbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3312",amenity:"bank"},addTags:{amenity:"bank",brand:"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Piraeus Bank"},countryCodes:["bg","cy","gr","ro","ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Popular":{name:"Popular",icon:"maki-bank",imageURL:"https://graph.facebook.com/PopularVI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7229656",amenity:"bank"},addTags:{alt_name:"Banco Popular","alt_name:en":"Popular Bank","alt_name:es":"Banco Popular",amenity:"bank",brand:"Popular","brand:en":"Popular","brand:es":"Popular","brand:wikidata":"Q7229656","brand:wikipedia":"en:Popular, Inc.",name:"Popular","name:en":"Popular","name:es":"Popular",official_name:"Banco Popular de Puerto Rico","official_name:es":"Banco Popular de Puerto Rico",short_name:"BPPR"},countryCodes:["us"],terms:["popular bank"],matchScore:2,suggestion:true},"amenity/bank/Postbank (Bulgaria)":{name:"Postbank (Bulgaria)",icon:"maki-bank",imageURL:"https://graph.facebook.com/PostbankBG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7234083",amenity:"bank"},addTags:{amenity:"bank",brand:"Postbank","brand:wikidata":"Q7234083","brand:wikipedia":"en:Bulgarian Postbank",name:"Postbank"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Postbank (Germany)":{name:"Postbank (Germany)",icon:"maki-bank",imageURL:"https://graph.facebook.com/postbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q708835",amenity:"bank"},addTags:{amenity:"bank",brand:"Postbank","brand:wikidata":"Q708835","brand:wikipedia":"en:Deutsche Postbank",name:"Postbank"},countryCodes:["de"],terms:["postbank finanzcenter"],matchScore:2,suggestion:true},"amenity/bank/Prima banka":{name:"Prima banka",icon:"maki-bank",imageURL:"https://graph.facebook.com/primabankaslovensko/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13538661",amenity:"bank"},addTags:{amenity:"bank",brand:"Prima banka","brand:wikidata":"Q13538661","brand:wikipedia":"sk:Prima banka Slovensko",name:"Prima banka"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Provincial":{name:"Provincial",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1151125571289718786/INihTiHa_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q4835087",amenity:"bank"},addTags:{amenity:"bank",brand:"Provincial","brand:wikidata":"Q4835087","brand:wikipedia":"es:BBVA Provincial",name:"Provincial"},countryCodes:["ve"],terms:["bbva provincial"],matchScore:2,suggestion:true},"amenity/bank/Public Bank (Malaysia)":{name:"Public Bank (Malaysia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/277915305558566/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3046561",amenity:"bank"},addTags:{amenity:"bank",brand:"Public Bank","brand:wikidata":"Q3046561","brand:wikipedia":"en:Public Bank Berhad",name:"Public Bank"},terms:["public bank berhad"],matchScore:2,suggestion:true},"amenity/bank/Punjab National Bank":{name:"Punjab National Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/pnbindia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2743499",amenity:"bank"},addTags:{amenity:"bank",brand:"Punjab National Bank","brand:wikidata":"Q2743499","brand:wikipedia":"en:Punjab National Bank",name:"Punjab National Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/RBC":{name:"RBC",icon:"maki-bank",imageURL:"https://graph.facebook.com/rbc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q735261",amenity:"bank"},addTags:{amenity:"bank",brand:"RBC","brand:wikidata":"Q735261","brand:wikipedia":"en:Royal Bank of Canada",name:"RBC",official_name:"Royal Bank of Canada"},terms:["rbc financial group","rbc royal bank","royal bank"],matchScore:2,suggestion:true},"amenity/bank/RBS":{name:"RBS",icon:"maki-bank",imageURL:"https://graph.facebook.com/royalbankofscotland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q160126",amenity:"bank"},addTags:{amenity:"bank",brand:"RBS","brand:wikidata":"Q160126","brand:wikipedia":"en:Royal Bank of Scotland",name:"RBS",official_name:"Royal Bank of Scotland"},countryCodes:["gb","je","ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/RCBC":{name:"RCBC",icon:"maki-bank",imageURL:"https://graph.facebook.com/RCBCGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7339070",amenity:"bank"},addTags:{amenity:"bank",brand:"RCBC","brand:wikidata":"Q7339070","brand:wikipedia":"en:Rizal Commercial Banking Corporation",name:"RCBC",official_name:"Rizal Commercial Banking Corporation"},countryCodes:["ph"],terms:["rcbc savings bank"],matchScore:2,suggestion:true},"amenity/bank/Rabobank":{name:"Rabobank",icon:"maki-bank",imageURL:"https://graph.facebook.com/rabobank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q252004",amenity:"bank"},addTags:{amenity:"bank",brand:"Rabobank","brand:wikidata":"Q252004","brand:wikipedia":"en:Rabobank",name:"Rabobank"},countryCodes:["au","id","nl","nz","us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Raiffeisen Polbank":{name:"Raiffeisen Polbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNPParibasBankPolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9303218",amenity:"bank"},addTags:{amenity:"bank",brand:"Raiffeisen Polbank","brand:wikidata":"Q9303218","brand:wikipedia":"pl:Raiffeisen Bank Polska",name:"Raiffeisen Polbank"},countryCodes:["de","pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Raiffeisenbank (Albania)":{name:"Raiffeisenbank (Albania)",icon:"maki-bank",imageURL:"https://graph.facebook.com/raiffeisenbankshqiperi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2127541",amenity:"bank"},addTags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q2127541","brand:wikipedia":"sq:Raiffeisen Bank Shqipëri",name:"Raiffeisenbank"},countryCodes:["al"],terms:["raiffeisen"],matchScore:2,suggestion:true},"amenity/bank/Raiffeisenbank (Bulgaria)":{name:"Raiffeisenbank (Bulgaria)",icon:"maki-bank",imageURL:"https://graph.facebook.com/RBB.bg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7283808",amenity:"bank"},addTags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q7283808","brand:wikipedia":"bg:Райфайзенбанк (България)",name:"Raiffeisenbank"},countryCodes:["bg"],terms:["raiffeisen"],matchScore:2,suggestion:true},"amenity/bank/Raiffeisenbank (Czech Republic)":{name:"Raiffeisenbank (Czech Republic)",icon:"maki-bank",imageURL:"https://graph.facebook.com/RaiffeisenbankCZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24282825",amenity:"bank"},addTags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q24282825","brand:wikipedia":"cs:Raiffeisenbank",name:"Raiffeisenbank"},countryCodes:["cz"],terms:["raiffeisen","raiffeisenkasse"],matchScore:2,suggestion:true},"amenity/bank/Raiffeisenbank (Romania)":{name:"Raiffeisenbank (Romania)",icon:"maki-bank",imageURL:"https://graph.facebook.com/RaiffeisenBankRomania/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7283806",amenity:"bank"},addTags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q7283806","brand:wikipedia":"ro:Raiffeisen Bank România",name:"Raiffeisenbank"},countryCodes:["ro"],terms:["raiffeisen"],matchScore:2,suggestion:true},"amenity/bank/Raiffeisenbank (Serbia)":{name:"Raiffeisenbank (Serbia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/RaiffeisenSrbija/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7283807",amenity:"bank"},addTags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q7283807","brand:wikipedia":"en:Raiffeisen Bank (Serbia)",name:"Raiffeisenbank"},countryCodes:["rs"],terms:["raiffeisen"],matchScore:2,suggestion:true},"amenity/bank/Raiffeisen (Luxembourg)":{name:"Raiffeisen (Luxembourg)",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBanque%20Raiffeisen%20Luxembourg%20Logo%20on%20Social%20Media.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11220162",amenity:"bank"},addTags:{amenity:"bank",brand:"Raiffeisen","brand:wikidata":"Q11220162","brand:wikipedia":"en:Banque Raiffeisen",name:"Raiffeisen"},countryCodes:["lu"],terms:["raiffeisen"],matchScore:2,suggestion:true},"amenity/bank/Regions Bank":{name:"Regions Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/RegionsBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q917131",amenity:"bank"},addTags:{amenity:"bank",brand:"Regions Bank","brand:wikidata":"Q917131","brand:wikipedia":"en:Regions Financial Corporation",name:"Regions Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Republic Bank (Eastern Caribbean)":{name:"Republic Bank (Eastern Caribbean)",icon:"maki-bank",imageURL:"https://graph.facebook.com/republicbanktnt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7314386",amenity:"bank"},addTags:{amenity:"bank",brand:"Republic Bank","brand:wikidata":"Q7314386","brand:wikipedia":"en:Republic Bank",name:"Republic Bank"},countryCodes:["bb","gd","gy","tt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Republic Bank (USA)":{name:"Republic Bank (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/republicbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7314387",amenity:"bank"},addTags:{amenity:"bank",brand:"Republic Bank","brand:wikidata":"Q7314387","brand:wikipedia":"en:Republic Bank & Trust Company",name:"Republic Bank",official_name:"Republic Bank & Trust Company"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/República":{name:"República",icon:"maki-bank",imageURL:"https://graph.facebook.com/BROU.uy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4077337",amenity:"bank"},addTags:{amenity:"bank",brand:"República","brand:wikidata":"Q4077337","brand:wikipedia":"en:Banco de la República Oriental del Uruguay",name:"República"},countryCodes:["uy"],terms:[],matchScore:2,suggestion:true},"amenity/bank/S-Pankki":{name:"S-Pankki",icon:"maki-bank",imageURL:"https://graph.facebook.com/kauppapankki/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7387053",amenity:"bank"},addTags:{amenity:"bank",brand:"S-Pankki","brand:wikidata":"Q7387053","brand:wikipedia":"fi:S-Pankki",name:"S-Pankki"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/bank/SC제일은행":{name:"SC제일은행",icon:"maki-bank",imageURL:"https://graph.facebook.com/StandardCharteredKR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q625531",amenity:"bank"},addTags:{amenity:"bank",brand:"SC제일은행","brand:ko":"SC제일은행","brand:wikidata":"Q625531","brand:wikipedia":"en:Standard Chartered Korea",name:"SC제일은행","name:ko":"SC제일은행"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/SEB":{name:"SEB",icon:"maki-bank",imageURL:"https://graph.facebook.com/sebsverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q975655",amenity:"bank"},addTags:{amenity:"bank",brand:"SEB","brand:wikidata":"Q975655","brand:wikipedia":"en:SEB Group",name:"SEB"},countryCodes:["de","ee","lt","lv","se"],terms:[],matchScore:2,suggestion:true},"amenity/bank/SMBC信託銀行":{name:"SMBC信託銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/smbc.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17218805",amenity:"bank"},addTags:{amenity:"bank",brand:"SMBC信託銀行","brand:en":"SMBC Trust Bank","brand:wikidata":"Q17218805","brand:wikipedia":"jp:SMBC信託銀行",name:"SMBC信託銀行","name:en":" SMBC Trust Bank "},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/SNS Bank":{name:"SNS Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/devolksbanknl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1857899",amenity:"bank"},addTags:{amenity:"bank",brand:"SNS Bank","brand:wikidata":"Q1857899","brand:wikipedia":"en:De Volksbank",name:"SNS Bank"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Sacombank":{name:"Sacombank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SacombankHome/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6123772",amenity:"bank"},addTags:{amenity:"bank",brand:"Sacombank","brand:wikidata":"Q6123772","brand:wikipedia":"vi:Ngân hàng thương mại cổ phần Sài Gòn Thương Tín",name:"Sacombank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Sampath Bank":{name:"Sampath Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Sampathbankplc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7410095",amenity:"bank"},addTags:{amenity:"bank",brand:"Sampath Bank","brand:wikidata":"Q7410095","brand:wikipedia":"en:Sampath Bank",name:"Sampath Bank"},countryCodes:["lk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/San Diego County Credit Union":{name:"San Diego County Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/SDCCU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7413628",amenity:"bank"},addTags:{amenity:"bank",brand:"San Diego County Credit Union","brand:wikidata":"Q7413628","brand:wikipedia":"en:San Diego County Credit Union",name:"San Diego County Credit Union",short_name:"SDCCU"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Santander":{name:"Santander",icon:"maki-bank",imageURL:"https://graph.facebook.com/SantanderBankUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5835668",amenity:"bank"},addTags:{amenity:"bank",brand:"Santander","brand:wikidata":"Q5835668","brand:wikipedia":"en:Santander Bank",name:"Santander"},terms:["santander consumer bank"],matchScore:2,suggestion:true},"amenity/bank/Santander Río":{name:"Santander Río",icon:"maki-bank",imageURL:"https://graph.facebook.com/Santander.Ar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3385268",amenity:"bank"},addTags:{amenity:"bank",brand:"Santander Río","brand:wikidata":"Q3385268","brand:wikipedia":"es:Banco Santander (Argentina)",name:"Santander Río"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Santander Totta":{name:"Santander Totta",icon:"maki-bank",imageURL:"https://graph.facebook.com/santanderpt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854116",amenity:"bank"},addTags:{amenity:"bank",brand:"Santander Totta","brand:wikidata":"Q4854116","brand:wikipedia":"pt:Banco Santander Portugal",name:"Santander Totta"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Sberbank":{name:"Sberbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/sberbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q205012",amenity:"bank"},addTags:{amenity:"bank",brand:"Sberbank","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Sberbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Scotiabank (Québec)":{name:"Scotiabank (Québec)",icon:"maki-bank",imageURL:"https://graph.facebook.com/scotiabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q451476",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque Scotia","brand:wikidata":"Q451476","brand:wikipedia":"fr:Banque Scotia",name:"Banque Scotia"},countryCodes:["ca"],terms:["scotia"],matchScore:2,suggestion:true},"amenity/bank/Scotiabank (non-Québec)":{name:"Scotiabank (non-Québec)",icon:"maki-bank",imageURL:"https://graph.facebook.com/scotiabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q451476",amenity:"bank"},addTags:{amenity:"bank",brand:"Scotiabank","brand:wikidata":"Q451476","brand:wikipedia":"en:Scotiabank",name:"Scotiabank"},terms:["scotia"],matchScore:2,suggestion:true},"amenity/bank/Security Bank":{name:"Security Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SecurityBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7444945",amenity:"bank"},addTags:{amenity:"bank",brand:"Security Bank","brand:wikidata":"Q7444945","brand:wikipedia":"en:Security Bank",name:"Security Bank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Security Service Federal Credit Union":{name:"Security Service Federal Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/ssfcu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7444993",amenity:"bank"},addTags:{amenity:"bank",brand:"Security Service Federal Credit Union","brand:wikidata":"Q7444993","brand:wikipedia":"en:Security Service Federal Credit Union",name:"Security Service Federal Credit Union",short_name:"SSFCU"},countryCodes:["us"],terms:["security service fcu"],matchScore:2,suggestion:true},"amenity/bank/Service Credit Union":{name:"Service Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/ServiceCreditUnion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7455675",amenity:"bank"},addTags:{amenity:"bank",brand:"Service Credit Union","brand:wikidata":"Q7455675","brand:wikipedia":"en:Service Credit Union",name:"Service Credit Union"},countryCodes:["de","us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Servus Credit Union":{name:"Servus Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/ServusCU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2274396",amenity:"bank"},addTags:{alt_name:"Servus",amenity:"bank",brand:"Servus Credit Union","brand:wikidata":"Q2274396","brand:wikipedia":"en:Servus Credit Union",name:"Servus Credit Union"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Seylan Bank":{name:"Seylan Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SeylanBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3532083",amenity:"bank"},addTags:{amenity:"bank",brand:"Seylan Bank","brand:wikidata":"Q3532083","brand:wikipedia":"en:Seylan Bank",name:"Seylan Bank"},countryCodes:["lk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Siam Commercial Bank":{name:"Siam Commercial Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/scb.thailand/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2038986",amenity:"bank"},addTags:{amenity:"bank",brand:"Siam Commercial Bank","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"Siam Commercial Bank"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Sicoob":{name:"Sicoob",icon:"maki-bank",imageURL:"https://graph.facebook.com/sicooboficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28679754",amenity:"bank"},addTags:{amenity:"bank",brand:"Sicoob","brand:wikidata":"Q28679754","brand:wikipedia":"pt:Sistema de Cooperativas de Crédito do Brasil",name:"Sicoob"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Sicredi":{name:"Sicredi",icon:"maki-bank",imageURL:"https://graph.facebook.com/Sicredi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3483060",amenity:"bank"},addTags:{amenity:"bank",brand:"Sicredi","brand:wikidata":"Q3483060","brand:wikipedia":"pt:Sistema de Crédito Cooperativo",name:"Sicredi"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Simmons Bank":{name:"Simmons Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/simmonsbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28402389",amenity:"bank"},addTags:{amenity:"bank",brand:"Simmons Bank","brand:wikidata":"Q28402389","brand:wikipedia":"en:Simmons Bank",name:"Simmons Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Skipton Building Society":{name:"Skipton Building Society",icon:"maki-bank",imageURL:"https://graph.facebook.com/skiptonbs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16931747",amenity:"bank"},addTags:{amenity:"bank",brand:"Skipton Building Society","brand:wikidata":"Q16931747","brand:wikipedia":"en:Skipton Building Society",name:"Skipton Building Society"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Slovenská sporiteľňa":{name:"Slovenská sporiteľňa",icon:"maki-bank",imageURL:"https://graph.facebook.com/SlovenskaSporitelna/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7541907",amenity:"bank"},addTags:{amenity:"bank",brand:"Slovenská sporiteľňa","brand:wikidata":"Q7541907","brand:wikipedia":"en:Slovenská sporiteľňa",name:"Slovenská sporiteľňa"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Société Générale":{name:"Société Générale",icon:"maki-bank",imageURL:"https://graph.facebook.com/societegenerale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q270363",amenity:"bank"},addTags:{amenity:"bank",brand:"Société Générale","brand:wikidata":"Q270363","brand:wikipedia":"en:Société Générale",name:"Société Générale"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Société Marseillaise de Crédit":{name:"Société Marseillaise de Crédit",icon:"maki-bank",imageURL:"https://graph.facebook.com/societemarseillaisedecredit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3488479",amenity:"bank"},addTags:{amenity:"bank",brand:"Société Marseillaise de Crédit","brand:wikidata":"Q3488479","brand:wikipedia":"fr:Société marseillaise de crédit",name:"Société Marseillaise de Crédit"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Société générale Côte d’Ivoire":{name:"Société générale Côte d’Ivoire",icon:"maki-bank",imageURL:"https://graph.facebook.com/societegenerale.cotedivoire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3488360",amenity:"bank"},addTags:{amenity:"bank",brand:"Société générale Côte d’Ivoire","brand:wikidata":"Q3488360","brand:wikipedia":"fr:Société générale Côte d'Ivoire",name:"Société générale Côte d’Ivoire","name:fr":"Société générale Côte d’Ivoire",old_name:"SGBCI"},countryCodes:["ci"],terms:["agence sgbci","sgbci"],matchScore:2,suggestion:true},"amenity/bank/South Indian Bank":{name:"South Indian Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/thesouthindianbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2044973",amenity:"bank"},addTags:{amenity:"bank",brand:"South Indian Bank","brand:wikidata":"Q2044973","brand:wikipedia":"en:South Indian Bank",name:"South Indian Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/South State Bank":{name:"South State Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SouthStateBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55633597",amenity:"bank"},addTags:{amenity:"bank",brand:"South State Bank","brand:wikidata":"Q55633597","brand:wikipedia":"en:South State Bank",name:"South State Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Southern Bank":{name:"Southern Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SouthernBank.Since1901/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7569660",amenity:"bank"},addTags:{amenity:"bank",brand:"Southern Bank","brand:wikidata":"Q7569660","brand:wikipedia":"en:Southern Bank",name:"Southern Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Sparda-Bank":{name:"Sparda-Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SpardaVerband/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2307136",amenity:"bank"},addTags:{amenity:"bank",brand:"Sparda-Bank","brand:wikidata":"Q2307136","brand:wikipedia":"en:Sparda-Bank",name:"Sparda-Bank"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Stanbic Bank":{name:"Stanbic Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/standardbankgrp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7597999",amenity:"bank"},addTags:{amenity:"bank",brand:"Stanbic Bank","brand:wikidata":"Q7597999","brand:wikipedia":"en:Stanbic Bank",name:"Stanbic Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Standard Bank":{name:"Standard Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/standardbankgrp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1576610",amenity:"bank"},addTags:{amenity:"bank",brand:"Standard Bank","brand:wikidata":"Q1576610","brand:wikipedia":"en:Standard Bank",name:"Standard Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Standard Chartered":{name:"Standard Chartered",icon:"maki-bank",imageURL:"https://graph.facebook.com/StandardChartered/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q548278",amenity:"bank"},addTags:{amenity:"bank",brand:"Standard Chartered","brand:wikidata":"Q548278","brand:wikipedia":"en:Standard Chartered",name:"Standard Chartered"},terms:["standard chartered bank"],matchScore:2,suggestion:true},"amenity/bank/State Bank of India":{name:"State Bank of India",icon:"maki-bank",imageURL:"https://graph.facebook.com/StateBankOfIndia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1340361",amenity:"bank"},addTags:{amenity:"bank",brand:"State Bank of India","brand:wikidata":"Q1340361","brand:wikipedia":"en:State Bank of India",name:"State Bank of India"},terms:[],matchScore:2,suggestion:true},"amenity/bank/State Employees Credit Union":{name:"State Employees Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/stateemployeescreditunion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7603196",amenity:"bank"},addTags:{amenity:"bank",brand:"State Employees Credit Union","brand:wikidata":"Q7603196","brand:wikipedia":"en:State Employees Credit Union",name:"State Employees Credit Union",short_name:"SECU"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Summit Bank":{name:"Summit Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SummitBankPK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7637775",amenity:"bank"},addTags:{amenity:"bank",brand:"Summit Bank","brand:wikidata":"Q7637775","brand:wikipedia":"en:Summit Bank",name:"Summit Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/SunTrust":{name:"SunTrust",icon:"maki-bank",imageURL:"https://graph.facebook.com/suntrust/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q181507",amenity:"bank"},addTags:{amenity:"bank",brand:"SunTrust","brand:wikidata":"Q181507","brand:wikipedia":"en:SunTrust Banks",name:"SunTrust"},countryCodes:["us"],terms:["suntrust bank"],matchScore:2,suggestion:true},"amenity/bank/Suncorp":{name:"Suncorp",icon:"maki-bank",imageURL:"https://graph.facebook.com/suncorpAUNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24189567",amenity:"bank"},addTags:{amenity:"bank",brand:"Suncorp","brand:wikidata":"Q24189567","brand:wikipedia":"en:Suncorp Bank",name:"Suncorp"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Supervielle":{name:"Supervielle",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoSupervielle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5718035",amenity:"bank"},addTags:{amenity:"bank",brand:"Supervielle","brand:wikidata":"Q5718035","brand:wikipedia":"es:Banco Supervielle",name:"Supervielle"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Swedbank":{name:"Swedbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/swedbanksverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1145493",amenity:"bank"},addTags:{amenity:"bank",brand:"Swedbank","brand:wikidata":"Q1145493","brand:wikipedia":"en:Swedbank",name:"Swedbank"},countryCodes:["ee","lt","lv","se"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Syndicate Bank":{name:"Syndicate Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/syndicatebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2004088",amenity:"bank"},addTags:{amenity:"bank",brand:"Syndicate Bank","brand:wikidata":"Q2004088","brand:wikipedia":"en:Syndicate Bank",name:"Syndicate Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Synovus":{name:"Synovus",icon:"maki-bank",imageURL:"https://graph.facebook.com/Synovus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3508889",amenity:"bank"},addTags:{amenity:"bank",brand:"Synovus","brand:wikidata":"Q3508889","brand:wikipedia":"en:Synovus",name:"Synovus"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/TCF Bank":{name:"TCF Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/TCFbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7669687",amenity:"bank"},addTags:{amenity:"bank",brand:"TCF Bank","brand:wikidata":"Q7669687","brand:wikipedia":"en:TCF Bank",name:"TCF Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/TD Bank":{name:"TD Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/TDBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7669891",amenity:"bank"},addTags:{amenity:"bank",brand:"TD Bank","brand:wikidata":"Q7669891","brand:wikipedia":"en:TD Bank, N.A.",name:"TD Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/TD Canada Trust":{name:"TD Canada Trust",icon:"maki-bank",imageURL:"https://graph.facebook.com/TDBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1080670",amenity:"bank"},addTags:{amenity:"bank",brand:"TD Canada Trust","brand:wikidata":"Q1080670","brand:wikipedia":"en:TD Canada Trust",name:"TD Canada Trust"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/TEB":{name:"TEB",icon:"maki-bank",imageURL:"https://graph.facebook.com/teb/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7862447",amenity:"bank"},addTags:{amenity:"bank",brand:"TEB","brand:wikidata":"Q7862447","brand:wikipedia":"en:Türk Ekonomi Bankası",name:"TEB"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/TSB":{name:"TSB",icon:"maki-bank",imageURL:"https://graph.facebook.com/TSBbankUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7671560",amenity:"bank"},addTags:{amenity:"bank",brand:"TSB","brand:wikidata":"Q7671560","brand:wikipedia":"en:TSB Bank (United Kingdom)",name:"TSB"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Takarékszövetkezet":{name:"Takarékszövetkezet",icon:"maki-bank",imageURL:"https://graph.facebook.com/takarekcsoport/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30324674",amenity:"bank"},addTags:{amenity:"bank",brand:"Takarékszövetkezet","brand:wikidata":"Q30324674","brand:wikipedia":"en:TakarékBank",name:"Takarékszövetkezet"},countryCodes:["hu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Tangerine":{name:"Tangerine",icon:"maki-bank",imageURL:"https://graph.facebook.com/TangerineBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15238797",amenity:"bank"},addTags:{amenity:"bank",brand:"Tangerine","brand:wikidata":"Q15238797","brand:wikipedia":"en:Tangerine Bank",name:"Tangerine"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Targobank":{name:"Targobank",icon:"maki-bank",imageURL:"https://graph.facebook.com/targobank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1455437",amenity:"bank"},addTags:{amenity:"bank",brand:"Targobank","brand:wikidata":"Q1455437","brand:wikipedia":"en:Targobank",name:"Targobank"},countryCodes:["de","es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Tatra banka":{name:"Tatra banka",icon:"maki-bank",imageURL:"https://graph.facebook.com/tatrabanka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1718069",amenity:"bank"},addTags:{amenity:"bank",brand:"Tatra banka","brand:wikidata":"Q1718069","brand:wikipedia":"en:Tatra banka",name:"Tatra banka"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Taytay sa Kauswagan":{name:"Taytay sa Kauswagan",icon:"maki-bank",imageURL:"https://graph.facebook.com/tskiofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72361196",amenity:"bank"},addTags:{amenity:"bank",brand:"Taytay sa Kauswagan","brand:wikidata":"Q72361196",name:"Taytay sa Kauswagan"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/The Co-operative Bank":{name:"The Co-operative Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/thecooperativebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3520318",amenity:"bank"},addTags:{amenity:"bank",brand:"The Co-operative Bank","brand:wikidata":"Q3520318","brand:wikipedia":"en:The Co-operative Bank",name:"The Co-operative Bank"},countryCodes:["gb"],terms:["co-op bank"],matchScore:2,suggestion:true},"amenity/bank/Türkiye İş Bankası":{name:"Türkiye İş Bankası",icon:"maki-bank",imageURL:"https://graph.facebook.com/isbankasi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q909613",amenity:"bank"},addTags:{amenity:"bank",brand:"Türkiye İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"Türkiye İş Bankası"},terms:[],matchScore:2,suggestion:true},"amenity/bank/U.S. Bank":{name:"U.S. Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/usbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q739084",amenity:"bank"},addTags:{amenity:"bank",brand:"U.S. Bank","brand:wikidata":"Q739084","brand:wikipedia":"en:U.S. Bancorp",name:"U.S. Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UBA":{name:"UBA",icon:"maki-bank",imageURL:"https://graph.facebook.com/ubagroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q513457",amenity:"bank"},addTags:{amenity:"bank",brand:"UBA","brand:wikidata":"Q513457","brand:wikipedia":"en:United Bank for Africa",name:"UBA",official_name:"United Bank for Africa"},terms:[],matchScore:2,suggestion:true},"amenity/bank/UBI Banca":{name:"UBI Banca",icon:"maki-bank",imageURL:"https://graph.facebook.com/UBIBanca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1476162",amenity:"bank"},addTags:{amenity:"bank",brand:"UBI Banca","brand:wikidata":"Q1476162","brand:wikipedia":"en:UBI Banca",name:"UBI Banca"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UBL":{name:"UBL",icon:"maki-bank",imageURL:"https://graph.facebook.com/UBLUnitedBankLtd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887504",amenity:"bank"},addTags:{amenity:"bank",brand:"UBL","brand:en":"United Bank Limited Pakistan","brand:wikidata":"Q7887504","brand:wikipedia":"ur:یونائیٹڈ بینک (پاکستان)",name:"UBL","name:en":"United Bank Limited Pakistan"},countryCodes:["pk"],terms:["ubl bank"],matchScore:2,suggestion:true},"amenity/bank/UBS":{name:"UBS",icon:"maki-bank",imageURL:"https://graph.facebook.com/UBSglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q193199",amenity:"bank"},addTags:{amenity:"bank",brand:"UBS","brand:wikidata":"Q193199","brand:wikipedia":"en:UBS",name:"UBS"},terms:[],matchScore:2,suggestion:true},"amenity/bank/UCO Bank":{name:"UCO Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/official.ucobank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2005310",amenity:"bank"},addTags:{amenity:"bank",brand:"UCO Bank","brand:wikidata":"Q2005310","brand:wikipedia":"en:UCO Bank",name:"UCO Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UCPB":{name:"UCPB",icon:"maki-bank",imageURL:"https://graph.facebook.com/UCPB.Connect/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887615",amenity:"bank"},addTags:{amenity:"bank",brand:"UCPB","brand:wikidata":"Q7887615","brand:wikipedia":"en:United Coconut Planters Bank",name:"UCPB"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UIB":{name:"UIB",icon:"maki-bank",imageURL:"https://graph.facebook.com/societegenerale.UIB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3550305",amenity:"bank"},addTags:{amenity:"bank",brand:"UIB","brand:wikidata":"Q3550305","brand:wikipedia":"ar:الاتحاد الدولي للبنوك",name:"UIB",official_name:"Union internationale de banques"},countryCodes:["tn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UMB Bank":{name:"UMB Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/504613260851564544/6xEseH7h_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q7865088",amenity:"bank"},addTags:{amenity:"bank",brand:"UMB Bank","brand:wikidata":"Q7865088","brand:wikipedia":"en:UMB Financial Corporation",name:"UMB Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/UNI":{name:"UNI",icon:"maki-bank",imageURL:"https://graph.facebook.com/unicooperation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2933348",amenity:"bank"},addTags:{amenity:"bank",brand:"UNI","brand:wikidata":"Q2933348","brand:wikipedia":"fr:UNI Coopération financière",name:"UNI",official_name:"UNI Coopération financière"},countryCodes:["ca"],terms:["caisse populaire","caisse populaire acadienne"],matchScore:2,suggestion:true},"amenity/bank/UOB":{name:"UOB",icon:"maki-bank",imageURL:"https://graph.facebook.com/uob.sg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2064074",amenity:"bank"},addTags:{amenity:"bank",brand:"UOB","brand:wikidata":"Q2064074","brand:wikipedia":"en:United Overseas Bank",name:"UOB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/USAA":{name:"USAA",icon:"maki-bank",imageURL:"https://graph.facebook.com/USAA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7865722",amenity:"bank"},addTags:{amenity:"bank",brand:"USAA","brand:wikidata":"Q7865722","brand:wikipedia":"en:USAA",name:"USAA",official_name:"United Services Automobile Association"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Ulster Bank":{name:"Ulster Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/UlsterBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2613366",amenity:"bank"},addTags:{amenity:"bank",brand:"Ulster Bank","brand:wikidata":"Q2613366","brand:wikipedia":"en:Ulster Bank",name:"Ulster Bank"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Umpqua Bank":{name:"Umpqua Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/umpquabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7881772",amenity:"bank"},addTags:{amenity:"bank",brand:"Umpqua Bank","brand:wikidata":"Q7881772","brand:wikipedia":"en:Umpqua Holdings Corporation",name:"Umpqua Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UniCredit Bank":{name:"UniCredit Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/938454142338596864/uYxN76cQ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q45568",amenity:"bank"},addTags:{amenity:"bank",brand:"UniCredit Bank","brand:wikidata":"Q45568","brand:wikipedia":"en:UniCredit",name:"UniCredit Bank"},terms:["unicredit","unicredit banca"],matchScore:2,suggestion:true},"amenity/bank/Unicaja Banco":{name:"Unicaja Banco",icon:"maki-bank",imageURL:"https://graph.facebook.com/unicajabanco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2543704",amenity:"bank"},addTags:{amenity:"bank",brand:"Unicaja Banco","brand:wikidata":"Q2543704","brand:wikipedia":"en:Unicaja",name:"Unicaja Banco",short_name:"Unicaja"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Union Bank of India":{name:"Union Bank of India",icon:"maki-bank",imageURL:"https://graph.facebook.com/UnionBankOfIndia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2004078",amenity:"bank"},addTags:{amenity:"bank",brand:"Union Bank of India","brand:wikidata":"Q2004078","brand:wikipedia":"en:Union Bank of India",name:"Union Bank of India"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Union Bank (USA)":{name:"Union Bank (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/unionbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1442804",amenity:"bank"},addTags:{alt_name:"UnionBank",amenity:"bank",brand:"Union Bank","brand:wikidata":"Q1442804","brand:wikipedia":"en:MUFG Union Bank",name:"Union Bank"},countryCodes:["us"],terms:["mufg union bank","union bank of california"],matchScore:2,suggestion:true},"amenity/bank/UnionBank (Philippines)":{name:"UnionBank (Philippines)",icon:"maki-bank",imageURL:"https://graph.facebook.com/unionbankph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7885403",amenity:"bank"},addTags:{amenity:"bank",brand:"UnionBank","brand:wikidata":"Q7885403","brand:wikipedia":"en:Union Bank of the Philippines",name:"UnionBank"},countryCodes:["ph"],terms:["union bank of the philippines"],matchScore:2,suggestion:true},"amenity/bank/United Bank (Connecticut)":{name:"United Bank (Connecticut)",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUnited%20Bank%20(Connecticut)%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q64825157",amenity:"bank"},addTags:{amenity:"bank",brand:"United Bank","brand:wikidata":"Q64825157",name:"United Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/United Bank (West Virginia)":{name:"United Bank (West Virginia)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/742722956263055361/O8MsoXoX_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16920636",amenity:"bank"},addTags:{amenity:"bank",brand:"United Bank","brand:wikidata":"Q16920636","brand:wikipedia":"en:United Bank (West Virginia)",name:"United Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/United Community Bank":{name:"United Community Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/unitedcommunitybank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887635",amenity:"bank"},addTags:{amenity:"bank",brand:"United Community Bank","brand:wikidata":"Q7887635","brand:wikipedia":"en:United Community Bank",name:"United Community Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Vakıfbank":{name:"Vakıfbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/vakifbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1148521",amenity:"bank"},addTags:{amenity:"bank",brand:"Vakıfbank","brand:wikidata":"Q1148521","brand:wikipedia":"en:VakıfBank",name:"Vakıfbank"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Vancity":{name:"Vancity",icon:"maki-bank",imageURL:"https://graph.facebook.com/Vancity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7914085",amenity:"bank"},addTags:{amenity:"bank",brand:"Vancity","brand:wikidata":"Q7914085","brand:wikipedia":"en:Vancity",name:"Vancity",official_name:"Vancouver City Savings Credit Union"},countryCodes:["ca"],terms:["vancouver city savings"],matchScore:2,suggestion:true},"amenity/bank/Veneto Banca":{name:"Veneto Banca",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3127221",amenity:"bank"},addTags:{amenity:"bank",brand:"Veneto Banca","brand:wikidata":"Q3127221","brand:wikipedia":"en:Veneto Banca",name:"Veneto Banca"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Vietcombank":{name:"Vietcombank",icon:"maki-bank",imageURL:"https://graph.facebook.com/ilovevcb/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6122995",amenity:"bank"},addTags:{amenity:"bank",brand:"Vietcombank","brand:wikidata":"Q6122995","brand:wikipedia":"en:Vietcombank",name:"Vietcombank"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/VietinBank":{name:"VietinBank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/282125983/logo_Vietinbank_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7928459",amenity:"bank"},addTags:{amenity:"bank",brand:"VietinBank","brand:wikidata":"Q7928459","brand:wikipedia":"en:Vietinbank",name:"VietinBank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Vijaya Bank":{name:"Vijaya Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Vijayabank.in/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003171",amenity:"bank"},addTags:{amenity:"bank",brand:"Vijaya Bank","brand:wikidata":"Q2003171","brand:wikipedia":"en:Vijaya Bank",name:"Vijaya Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Virgin Money":{name:"Virgin Money",icon:"maki-bank",imageURL:"https://graph.facebook.com/VirginMoneyUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2527746",amenity:"bank"},addTags:{amenity:"bank",brand:"Virgin Money","brand:wikidata":"Q2527746","brand:wikipedia":"en:Virgin Money UK",name:"Virgin Money"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Volksbank Köln Bonn eG":{name:"Volksbank Köln Bonn eG",icon:"maki-bank",imageURL:"https://graph.facebook.com/volksbankkoelnbonn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41680844",amenity:"bank"},addTags:{amenity:"bank",brand:"Volksbank Köln Bonn eG","brand:wikidata":"Q41680844","brand:wikipedia":"de:Volksbank Köln Bonn",name:"Volksbank Köln Bonn eG"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/VÚB":{name:"VÚB",icon:"maki-bank",imageURL:"https://graph.facebook.com/vub.banka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12778981",amenity:"bank"},addTags:{amenity:"bank",brand:"VÚB","brand:wikidata":"Q12778981","brand:wikipedia":"en:Všeobecná úverová banka",name:"VÚB"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Washington Federal":{name:"Washington Federal",icon:"maki-bank",imageURL:"https://graph.facebook.com/wafdbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7971859",amenity:"bank"},addTags:{amenity:"bank",brand:"Washington Federal","brand:wikidata":"Q7971859","brand:wikipedia":"en:Washington Federal",name:"Washington Federal"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Webster Bank":{name:"Webster Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/websterbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7978891",amenity:"bank"},addTags:{amenity:"bank",brand:"Webster Bank","brand:wikidata":"Q7978891","brand:wikipedia":"en:Webster Bank",name:"Webster Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Wells Fargo":{name:"Wells Fargo",icon:"maki-bank",imageURL:"https://graph.facebook.com/wellsfargo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q744149",amenity:"bank"},addTags:{amenity:"bank",brand:"Wells Fargo","brand:wikidata":"Q744149","brand:wikipedia":"en:Wells Fargo",name:"Wells Fargo"},countryCodes:["us"],terms:["wells fargo bank"],matchScore:2,suggestion:true},"amenity/bank/WesBanco":{name:"WesBanco",icon:"maki-bank",imageURL:"https://graph.facebook.com/WesBanco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7983629",amenity:"bank"},addTags:{amenity:"bank",brand:"WesBanco","brand:wikidata":"Q7983629","brand:wikipedia":"en:WesBanco",name:"WesBanco"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Western Union":{name:"Western Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/WesternUnion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q861042",amenity:"bank"},addTags:{amenity:"bank",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Westpac":{name:"Westpac",icon:"maki-bank",imageURL:"https://graph.facebook.com/Westpac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2031726",amenity:"bank"},addTags:{amenity:"bank",brand:"Westpac","brand:wikidata":"Q2031726","brand:wikipedia":"en:Westpac",name:"Westpac"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Wings Financial Credit Union":{name:"Wings Financial Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/WingsFinancial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8025267",amenity:"bank"},addTags:{amenity:"bank",brand:"Wings Financial Credit Union","brand:wikidata":"Q8025267","brand:wikipedia":"en:Wings Financial Credit Union",name:"Wings Financial Credit Union"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Yapı Kredi":{name:"Yapı Kredi",icon:"maki-bank",imageURL:"https://graph.facebook.com/YapiKrediAZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8049138",amenity:"bank"},addTags:{amenity:"bank",brand:"Yapı Kredi","brand:wikidata":"Q8049138","brand:wikipedia":"en:Yapı ve Kredi Bankası",name:"Yapı Kredi"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Yorkshire Bank":{name:"Yorkshire Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/yorkshirebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8055678",amenity:"bank"},addTags:{amenity:"bank",brand:"Yorkshire Bank","brand:wikidata":"Q8055678","brand:wikipedia":"en:Yorkshire Bank",name:"Yorkshire Bank"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Yorkshire Building Society":{name:"Yorkshire Building Society",icon:"maki-bank",imageURL:"https://graph.facebook.com/yorkshirebuildingsociety/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12073381",amenity:"bank"},addTags:{amenity:"bank",brand:"Yorkshire Building Society","brand:wikidata":"Q12073381","brand:wikipedia":"en:Yorkshire Building Society",name:"Yorkshire Building Society"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Zagrebačka banka":{name:"Zagrebačka banka",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/512220346951299072/bHCa2IWn_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q140381",amenity:"bank"},addTags:{amenity:"bank",brand:"Zagrebačka banka","brand:wikidata":"Q140381","brand:wikipedia":"en:Zagrebačka banka",name:"Zagrebačka banka"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Zenith Bank":{name:"Zenith Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Zenithbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5978240",amenity:"bank"},addTags:{amenity:"bank",brand:"Zenith Bank","brand:wikidata":"Q5978240","brand:wikipedia":"en:Zenith Bank",name:"Zenith Bank"},countryCodes:["gb","gh","gm","ng","sl","za"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Zions Bank":{name:"Zions Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/714566769550225408/Xem9Ei7E_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q8072576",amenity:"bank"},addTags:{amenity:"bank",brand:"Zions Bank","brand:wikidata":"Q8072576",name:"Zions Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Ziraat Bankası":{name:"Ziraat Bankası",icon:"maki-bank",imageURL:"https://graph.facebook.com/ziraatbankasi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q696003",amenity:"bank"},addTags:{amenity:"bank",brand:"Ziraat Bankası","brand:wikidata":"Q696003","brand:wikipedia":"en:Ziraat Bankası",name:"Ziraat Bankası"},terms:[],matchScore:2,suggestion:true},"amenity/bank/mBank":{name:"mBank",icon:"maki-bank",imageURL:"https://graph.facebook.com/mBank.Polska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1160928",amenity:"bank"},addTags:{amenity:"bank",brand:"mBank","brand:wikidata":"Q1160928","brand:wikipedia":"en:MBank",name:"mBank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/st.george":{name:"st.george",icon:"maki-bank",imageURL:"https://graph.facebook.com/stgeorgebankaus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1606050",amenity:"bank"},addTags:{amenity:"bank",brand:"st.george","brand:wikidata":"Q1606050","brand:wikipedia":"en:St.George Bank",name:"st.george"},countryCodes:["au"],terms:["st.george bank"],matchScore:2,suggestion:true},"amenity/bank/Ålandsbanken":{name:"Ålandsbanken",icon:"maki-bank",imageURL:"https://graph.facebook.com/alandsbankenaland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4349236",amenity:"bank"},addTags:{amenity:"bank",brand:"Ålandsbanken","brand:wikidata":"Q4349236","brand:wikipedia":"sv:Ålandsbanken",name:"Ålandsbanken"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ČSOB":{name:"ČSOB",icon:"maki-bank",imageURL:"https://graph.facebook.com/csob/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q340135",amenity:"bank"},addTags:{amenity:"bank",brand:"ČSOB","brand:wikidata":"Q340135","brand:wikipedia":"en:Československá obchodní banka",name:"ČSOB"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Česká spořitelna":{name:"Česká spořitelna",icon:"maki-bank",imageURL:"https://graph.facebook.com/ceskasporitelna/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q341100",amenity:"bank"},addTags:{amenity:"bank",brand:"Česká spořitelna","brand:wikidata":"Q341100","brand:wikipedia":"en:Česká spořitelna",name:"Česká spořitelna"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/İş Bankası":{name:"İş Bankası",icon:"maki-bank",imageURL:"https://graph.facebook.com/isbankasi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q909613",amenity:"bank"},addTags:{amenity:"bank",brand:"İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"İş Bankası"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Εθνική Τράπεζα":{name:"Εθνική Τράπεζα",icon:"maki-bank",imageURL:"https://graph.facebook.com/ibanknbg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1816028",amenity:"bank"},addTags:{amenity:"bank",brand:"Εθνική Τράπεζα","brand:el":"Εθνική Τράπεζα","brand:en":"National Bank of Greece","brand:wikidata":"Q1816028","brand:wikipedia":"en:National Bank of Greece",name:"Εθνική Τράπεζα","name:el":"Εθνική Τράπεζα","name:en":"National Bank of Greece"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Τράπεζα Πειραιώς":{name:"Τράπεζα Πειραιώς",icon:"maki-bank",imageURL:"https://graph.facebook.com/piraeusbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3312",amenity:"bank"},addTags:{amenity:"bank",brand:"Τράπεζα Πειραιώς","brand:el":"Τράπεζα Πειραιώς","brand:en":"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Τράπεζα Πειραιώς","name:el":"Τράπεζα Πειραιώς","name:en":"Piraeus Bank",short_name:"Πειραιώς","short_name:el":"Πειραιώς","short_name:en":"Piraeus"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/А-Банк":{name:"А-Банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/abank.dp.ua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28705400",amenity:"bank"},addTags:{amenity:"bank",brand:"А-Банк","brand:wikidata":"Q28705400","brand:wikipedia":"uk:А-Банк",name:"А-Банк"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Авангард":{name:"Авангард",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankavangard/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122617",amenity:"bank"},addTags:{amenity:"bank",brand:"Авангард","brand:wikidata":"Q62122617",name:"Авангард"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Альфа-Банк (Россия)":{name:"Альфа-Банк (Россия)",icon:"maki-bank",imageURL:"https://graph.facebook.com/alfabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1377835",amenity:"bank"},addTags:{amenity:"bank",brand:"Альфа-Банк","brand:en":"Alfa-Bank","brand:ru":"Альфа-Банк","brand:wikidata":"Q1377835","brand:wikipedia":"ru:Альфа-банк",name:"Альфа-Банк","name:en":"Alfa-Bank","name:ru":"Альфа-Банк"},countryCodes:["by","kz","ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Альфа-Банк (Украина)":{name:"Альфа-Банк (Украина)",icon:"maki-bank",imageURL:"https://graph.facebook.com/AlfaBankUkraine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16691757",amenity:"bank"},addTags:{amenity:"bank",brand:"Альфа-Банк","brand:en":"Alfa-Bank","brand:ru":"Альфа-Банк","brand:ua":"Альфа-Банк","brand:wikidata":"Q16691757","brand:wikipedia":"uk:Альфа-Банк (Україна)",name:"Альфа-Банк","name:en":"Alfa-Bank","name:ru":"Альфа-Банк"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/БПС-Сбербанк":{name:"БПС-Сбербанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/sberbank.bps/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2074915",amenity:"bank"},addTags:{amenity:"bank",brand:"БПС-Сбербанк","brand:wikidata":"Q2074915","brand:wikipedia":"be:БПС-Сбербанк",name:"БПС-Сбербанк"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Банк Дабрабыт":{name:"Банк Дабрабыт",icon:"maki-bank",imageURL:"https://graph.facebook.com/bank.dabrabyt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63981850",amenity:"bank"},addTags:{amenity:"bank",brand:"Банк Дабрабыт","brand:wikidata":"Q63981850",name:"Банк Дабрабыт"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Банка ДСК":{name:"Банка ДСК",icon:"maki-bank",imageURL:"https://graph.facebook.com/dskbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5206146",amenity:"bank"},addTags:{amenity:"bank",brand:"Банка ДСК","brand:bg":"Банка ДСК","brand:en":"DSK Bank","brand:wikidata":"Q5206146","brand:wikipedia":"en:DSK Bank",name:"Банка ДСК","name:bg":"Банка ДСК","name:en":"DSK Bank"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Белагропромбанк":{name:"Белагропромбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/belagroprombank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1991373",amenity:"bank"},addTags:{amenity:"bank",brand:"Белагропромбанк","brand:en":"Belagroprom Bank","brand:wikidata":"Q1991373","brand:wikipedia":"be:Белаграпрамбанк",name:"Белагропромбанк","name:en":"Belagroprom Bank"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Беларусбанк":{name:"Беларусбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/asb.belarusbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1997334",amenity:"bank"},addTags:{amenity:"bank",brand:"Беларусбанк","brand:en":"Belarusbank","brand:wikidata":"Q1997334","brand:wikipedia":"en:Belarusbank",name:"Беларусбанк","name:en":"Belarusbank"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Белинвестбанк":{name:"Белинвестбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/belinvestbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4081940",amenity:"bank"},addTags:{amenity:"bank",brand:"Белинвестбанк","brand:wikidata":"Q4081940","brand:wikipedia":"ru:Белинвестбанк",name:"Белинвестбанк"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Бинбанк":{name:"Бинбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/binbank.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4086829",amenity:"bank"},addTags:{amenity:"bank",brand:"Бинбанк","brand:en":"B&N Bank","brand:wikidata":"Q4086829","brand:wikipedia":"en:B&N Bank",name:"Бинбанк","name:en":"B&N Bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ВТБ (Россия)":{name:"ВТБ (Россия)",icon:"maki-bank",imageURL:"https://graph.facebook.com/vtbrussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1549389",amenity:"bank"},addTags:{amenity:"bank",brand:"ВТБ","brand:en":"VTB Bank","brand:wikidata":"Q1549389","brand:wikipedia":"en:VTB Bank",name:"ВТБ","name:en":"VTB Bank"},countryCodes:["ru"],terms:["втб банк москвы"],matchScore:2,suggestion:true},"amenity/bank/ВТБ (Украина)":{name:"ВТБ (Украина)",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F%D0%9B%D0%BE%D0%B3%D0%BE%D1%82%D0%B8%D0%BF%20%D0%92%D0%A2%D0%91.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q16628820",amenity:"bank"},addTags:{amenity:"bank",brand:"ВТБ","brand:en":"VTB Bank","brand:wikidata":"Q16628820","brand:wikipedia":"uk:ВТБ#ПАТ «ВТБ Банк (Україна)»",name:"ВТБ","name:en":"VTB Bank"},countryCodes:["ua"],terms:["втб банк"],matchScore:2,suggestion:true},"amenity/bank/Возрождение":{name:"Возрождение",icon:"maki-bank",imageURL:"https://graph.facebook.com/Vozrozhdenie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4114952",amenity:"bank"},addTags:{amenity:"bank",brand:"Возрождение","brand:wikidata":"Q4114952","brand:wikipedia":"ru:Возрождение (банк)",name:"Возрождение"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Газпромбанк":{name:"Газпромбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/gpbofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1924338",amenity:"bank"},addTags:{amenity:"bank",brand:"Газпромбанк","brand:en":"Gazprombank","brand:wikidata":"Q1924338","brand:wikipedia":"en:Gazprombank",name:"Газпромбанк","name:en":"Gazprombank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Генбанк":{name:"Генбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/GENBANK.Crimea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122630",amenity:"bank"},addTags:{amenity:"bank",brand:"Генбанк","brand:wikidata":"Q62122630",name:"Генбанк"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Зенит":{name:"Зенит",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankZENIT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4191388",amenity:"bank"},addTags:{amenity:"bank",brand:"Зенит","brand:en":"Zenit","brand:ru":"Зенит","brand:wikidata":"Q4191388","brand:wikipedia":"ru:Зенит (банк)",name:"Зенит","name:en":"Zenit","name:ru":"Зенит"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Казкоммерцбанк":{name:"Казкоммерцбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/halykbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1168179",amenity:"bank"},addTags:{amenity:"bank",brand:"Казкоммерцбанк","brand:en":"Kazkommertsbank","brand:wikidata":"Q1168179","brand:wikipedia":"en:Kazkommertsbank",name:"Казкоммерцбанк","name:en":"Kazkommertsbank"},countryCodes:["kz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Московский индустриальный банк":{name:"Московский индустриальный банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/Minbank.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4304145",amenity:"bank"},addTags:{amenity:"bank",brand:"Московский индустриальный банк","brand:en":"Moscow Industrial Bank","brand:wikidata":"Q4304145","brand:wikipedia":"ru:Московский индустриальный банк",name:"Московский индустриальный банк","name:en":"Moscow Industrial Bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Мособлбанк":{name:"Мособлбанк",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4304446",amenity:"bank"},addTags:{amenity:"bank",brand:"Мособлбанк","brand:en":"Mosobl Bank","brand:wikidata":"Q4304446","brand:wikipedia":"ru:Мособлбанк",name:"Мособлбанк","name:en":"Mosobl Bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Народный банк":{name:"Народный банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/halykbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1046186",amenity:"bank"},addTags:{amenity:"bank",brand:"Народный банк","brand:wikidata":"Q1046186","brand:wikipedia":"kk:Қазақстан Халық банкі",name:"Народный банк"},countryCodes:["kg","kz","uz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ОТП Банк":{name:"ОТП Банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/otpbank.hu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q912778",amenity:"bank"},addTags:{amenity:"bank",brand:"ОТП Банк","brand:en":"OTP Bank","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"ОТП Банк","name:en":"OTP Bank"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Обединена Българска Банка":{name:"Обединена Българска Банка",icon:"maki-bank",imageURL:"https://graph.facebook.com/UnitedBulgarianBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887555",amenity:"bank"},addTags:{amenity:"bank",brand:"Обединена Българска Банка","brand:en":"United Bulgarian Bank","brand:wikidata":"Q7887555","brand:wikipedia":"en:United Bulgarian Bank",name:"Обединена Българска Банка","name:en":"United Bulgarian Bank"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Открытие":{name:"Открытие",icon:"maki-bank",imageURL:"https://graph.facebook.com/otkritie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4327204",amenity:"bank"},addTags:{amenity:"bank",brand:"Открытие","brand:wikidata":"Q4327204","brand:wikipedia":"ru:Банк «Финансовая корпорация Открытие»",name:"Открытие"},countryCodes:["ru"],terms:["банк открытие"],matchScore:2,suggestion:true},"amenity/bank/Ощадбанк":{name:"Ощадбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/oschadbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4340839",amenity:"bank"},addTags:{amenity:"bank",brand:"Ощадбанк","brand:en":"State Savings Bank of Ukraine","brand:wikidata":"Q4340839","brand:wikipedia":"uk:Ощадбанк",name:"Ощадбанк","name:en":"State Savings Bank of Ukraine"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ПУМБ":{name:"ПУМБ",icon:"maki-bank",imageURL:"https://graph.facebook.com/pumbua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4341156",amenity:"bank"},addTags:{amenity:"bank",brand:"ПУМБ","brand:en":"First Ukrainian International Bank","brand:wikidata":"Q4341156","brand:wikipedia":"en:First Ukrainian International Bank",name:"ПУМБ","name:en":"First Ukrainian International Bank"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Почта Банк":{name:"Почта Банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/pochtabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24930461",amenity:"bank"},addTags:{amenity:"bank",brand:"Почта Банк","brand:en":"Post Bank","brand:wikidata":"Q24930461","brand:wikipedia":"en:Post Bank (Russia)",name:"Почта Банк","name:en":"Post Bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Пощенска банка":{name:"Пощенска банка",icon:"maki-bank",imageURL:"https://graph.facebook.com/PostbankBG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7234083",amenity:"bank"},addTags:{amenity:"bank",brand:"Пощенска банка","brand:wikidata":"Q7234083","brand:wikipedia":"bg:Пощенска банка",name:"Пощенска банка","name:en":"Postbank"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ПриватБанк":{name:"ПриватБанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/privatbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1515015",amenity:"bank"},addTags:{amenity:"bank",brand:"ПриватБанк","brand:en":"PrivatBank","brand:wikidata":"Q1515015","brand:wikipedia":"uk:ПриватБанк",name:"ПриватБанк","name:en":"PrivatBank"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Приднестровский Сбербанк":{name:"Приднестровский Сбербанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/pridnestrovskiy.sberbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4378147",amenity:"bank"},addTags:{amenity:"bank",brand:"Приднестровский Сбербанк","brand:en":"Pridnestrovian Savings Bank","brand:ru":"Приднестровский Сбербанк","brand:wikidata":"Q4378147","brand:wikipedia":"ru:Приднестровский Сбербанк",name:"Приднестровский Сбербанк","name:en":"Pridnestrovian Savings Bank","name:ru":"Приднестровский Сбербанк"},countryCodes:["md"],terms:["приднестровский cбербанк"],matchScore:2,suggestion:true},"amenity/bank/Приорбанк":{name:"Приорбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/Priorbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3919658",amenity:"bank"},addTags:{amenity:"bank",brand:"Приорбанк","brand:en":"PriorBank","brand:wikidata":"Q3919658","brand:wikipedia":"be:Пріорбанк",name:"Приорбанк","name:en":"PriorBank"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Промсвязьбанк":{name:"Промсвязьбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/psbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q649100",amenity:"bank"},addTags:{amenity:"bank",brand:"Промсвязьбанк","brand:en":"Promsvyazbank","brand:wikidata":"Q649100","brand:wikipedia":"en:Promsvyazbank",name:"Промсвязьбанк","name:en":"Promsvyazbank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/РНКБ":{name:"РНКБ",icon:"maki-bank",imageURL:"https://graph.facebook.com/rncb.crimea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16912944",amenity:"bank"},addTags:{amenity:"bank",brand:"РНКБ","brand:wikidata":"Q16912944","brand:wikipedia":"en:Russian National Commercial Bank",name:"РНКБ"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Райффайзен":{name:"Райффайзен",icon:"maki-bank",imageURL:"https://graph.facebook.com/raiffeisenbankrus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4389244",amenity:"bank"},addTags:{amenity:"bank",brand:"Райффайзен","brand:en":"Raiffeisenbank","brand:ru":"Райффайзен","brand:wikidata":"Q4389244","brand:wikipedia":"en:Raiffeisenbank (Russia)",name:"Райффайзен","name:en":"Raiffeisenbank","name:ru":"Райффайзен"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Райффайзен Банк Аваль":{name:"Райффайзен Банк Аваль",icon:"maki-bank",imageURL:"https://graph.facebook.com/raiffeisenua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4389243",amenity:"bank"},addTags:{amenity:"bank",brand:"Райффайзен Банк Аваль","brand:en":"Raiffeisen Bank Aval","brand:ru":"Райффайзен Банк Аваль","brand:ua":"Райффайзен Банк Аваль","brand:wikidata":"Q4389243","brand:wikipedia":"en:Raiffeisen Bank Aval",name:"Райффайзен Банк Аваль","name:en":"Raiffeisen Bank Aval","name:ru":"Райффайзен Банк Аваль","name:ua":"Райффайзен Банк Аваль"},countryCodes:["ua"],terms:["аваль","банк аваль"],matchScore:2,suggestion:true},"amenity/bank/Росбанк":{name:"Росбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/rosbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1119857",amenity:"bank"},addTags:{amenity:"bank",brand:"Росбанк","brand:en":"Rosbank","brand:ru":"Росбанк","brand:wikidata":"Q1119857","brand:wikipedia":"en:Rosbank",name:"Росбанк","name:en":"Rosbank","name:ru":"Росбанк"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Россельхозбанк":{name:"Россельхозбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/rshb.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3920226",amenity:"bank"},addTags:{amenity:"bank",brand:"Россельхозбанк","brand:en":"Rosselkhozbank","brand:ru":"Россельхозбанк","brand:wikidata":"Q3920226","brand:wikipedia":"en:Russian Agricultural Bank",name:"Россельхозбанк","name:en":"Rosselkhozbank","name:ru":"Россельхозбанк"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Русский Стандарт":{name:"Русский Стандарт",icon:"maki-bank",imageURL:"https://graph.facebook.com/rsbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4400854",amenity:"bank"},addTags:{amenity:"bank",brand:"Русский Стандарт","brand:en":"Russian Standard Bank","brand:ru":"Русский Стандарт","brand:wikidata":"Q4400854","brand:wikipedia":"en:Russian Standard Bank",name:"Русский Стандарт","name:en":"Russian Standard Bank","name:ru":"Русский Стандарт"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Сбербанк":{name:"Сбербанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/sberbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q205012",amenity:"bank"},addTags:{amenity:"bank",brand:"Сбербанк","brand:en":"Sberbank","brand:ru":"Сбербанк","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Сбербанк","name:en":"Sberbank","name:ru":"Сбербанк"},countryCodes:["kz","ru"],terms:["cбербанк","cбербанк россии","сбербанк россии"],matchScore:2,suggestion:true},"amenity/bank/Совкомбанк":{name:"Совкомбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/sovcombank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4426566",amenity:"bank"},addTags:{amenity:"bank",brand:"Совкомбанк","brand:en":"Sovcom Bank","brand:ru":"Совкомбанк","brand:wikidata":"Q4426566","brand:wikipedia":"ru:Совкомбанк",name:"Совкомбанк","name:en":"Sovcom Bank","name:ru":"Совкомбанк"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/УкрСиббанк":{name:"УкрСиббанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/UKRSIBBANK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1976290",amenity:"bank"},addTags:{amenity:"bank",brand:"УкрСиббанк","brand:en":"UkrSibbank","brand:uk":"УкрСиббанк","brand:wikidata":"Q1976290","brand:wikipedia":"uk:Ukrsibbank BNP Paribas Group",name:"УкрСиббанк","name:en":"UkrSibbank","name:uk":"УкрСиббанк"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Укргазбанк":{name:"Укргазбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/Ukrgasbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4470692",amenity:"bank"},addTags:{amenity:"bank",brand:"Укргазбанк","brand:en":"Ukrgasbank","brand:uk":"Укргазбанк","brand:wikidata":"Q4470692","brand:wikipedia":"uk:Укргазбанк",name:"Укргазбанк","name:en":"Ukrgasbank","name:uk":"Укргазбанк"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Укрсоцбанк":{name:"Укрсоцбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/Ukrsotsbankofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3547885",amenity:"bank"},addTags:{amenity:"bank",brand:"Укрсоцбанк","brand:en":"Ukrsotsbank","brand:uk":"Укрсоцбанк","brand:wikidata":"Q3547885","brand:wikipedia":"uk:Укрсоцбанк",name:"Укрсоцбанк","name:en":"Ukrsotsbank","name:uk":"Укрсоцбанк"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Уралсиб":{name:"Уралсиб",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankuralsib/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4476693",amenity:"bank"},addTags:{amenity:"bank",brand:"Уралсиб","brand:en":"Uralsib Bank","brand:ru":"Уралсиб","brand:wikidata":"Q4476693","brand:wikipedia":"ru:Уралсиб (банк)",name:"Уралсиб","name:en":"Uralsib Bank","name:ru":"Уралсиб"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Хаан банк":{name:"Хаан банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/KhanBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25632240",amenity:"bank"},addTags:{amenity:"bank",brand:"Хаан банк","brand:en":"Khan Bank","brand:mn":"Хаан банк","brand:wikidata":"Q25632240","brand:wikipedia":"mn:ХААН банк",name:"Хаан банк","name:en":"Khan Bank","name:mn":"Хаан банк"},countryCodes:["mn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Хоум Кредит":{name:"Хоум Кредит",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1202884588458184704/hGu1kfij_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4500466",amenity:"bank"},addTags:{amenity:"bank",brand:"Хоум Кредит","brand:en":"Home Credit & Finance Bank","brand:ru":"Хоум Кредит","brand:wikidata":"Q4500466","brand:wikipedia":"en:Home Credit & Finance Bank",name:"Хоум Кредит","name:en":"Home Credit & Finance Bank","name:ru":"Хоум Кредит"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק אגוד":{name:"בנק אגוד",icon:"maki-bank",imageURL:"https://graph.facebook.com/igudbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2903265",amenity:"bank"},addTags:{"alt_name:en":"Bank Igud",amenity:"bank",brand:"בנק אגוד","brand:en":"Union Bank of Israel","brand:he":"בנק אגוד","brand:wikidata":"Q2903265","brand:wikipedia":"en:Union Bank of Israel",name:"בנק אגוד","name:en":"Union Bank of Israel","name:he":"בנק אגוד"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק אוצר החייל":{name:"בנק אוצר החייל",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FOtsarLogoHE.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2900674",amenity:"bank"},addTags:{amenity:"bank",brand:"בנק אוצר החייל","brand:en":"Bank Otsar Ha-Hayal","brand:he":"בנק אוצר החייל","brand:wikidata":"Q2900674","brand:wikipedia":"en:Bank Otsar Ha-Hayal",name:"בנק אוצר החייל","name:en":"Bank Otsar Ha-Hayal","name:he":"בנק אוצר החייל"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק דיסקונט":{name:"בנק דיסקונט",icon:"maki-bank",imageURL:"https://graph.facebook.com/discountbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q250362",amenity:"bank"},addTags:{amenity:"bank",brand:"בנק דיסקונט לישראל","brand:en":"Israel Discount Bank","brand:he":"בנק דיסקונט לישראל","brand:wikidata":"Q250362","brand:wikipedia":"en:Israel Discount Bank",name:"בנק דיסקונט","name:en":"Bank Discount","name:he":"בנק דיסקונט"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק הפועלים":{name:"בנק הפועלים",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/950970103667052544/Ymilo1Mp_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2666775",amenity:"bank"},addTags:{amenity:"bank",brand:"בנק הפועלים","brand:en":"Bank Hapoalim","brand:he":"בנק הפועלים","brand:wikidata":"Q2666775","brand:wikipedia":"en:Bank Hapoalim",name:"בנק הפועלים","name:en":"Bank Hapoalim","name:he":"בנק הפועלים"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק יהד":{name:"בנק יהד",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7187611",amenity:"bank"},addTags:{amenity:"bank",brand:"בנק יהד","brand:en":"Bank Yahav","brand:he":"בנק יהד","brand:wikidata":"Q7187611","brand:wikipedia":"he:בנק יהב",name:"בנק יהד","name:en":"Bank Yahav","name:he":"בנק יהד"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק ירושלים":{name:"בנק ירושלים",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankjerusalem/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2900227",amenity:"bank"},addTags:{amenity:"bank",brand:"בנק ירושלים","brand:en":"Bank of Jerusalem","brand:he":"בנק ירושלים","brand:wikidata":"Q2900227","brand:wikipedia":"en:Bank of Jerusalem",name:"בנק ירושלים","name:en":"Bank of Jerusalem","name:he":"בנק ירושלים"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק לאומי":{name:"בנק לאומי",icon:"maki-bank",imageURL:"https://graph.facebook.com/LeumiDigital/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806641",amenity:"bank"},addTags:{amenity:"bank",brand:"בנק לאומי","brand:en":"Bank Leumi","brand:he":"בנק לאומי","brand:wikidata":"Q806641","brand:wikipedia":"en:Bank Leumi",name:"בנק לאומי","name:en":"Bank Leumi","name:he":"בנק לאומי"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק מסד":{name:"בנק מסד",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7187667",amenity:"bank"},addTags:{amenity:"bank",brand:"בנק מסד","brand:en":"Bank Massad","brand:he":"בנק מסד","brand:wikidata":"Q7187667","brand:wikipedia":"en:Bank Massad",name:"בנק מסד","name:en":"Bank Massad","name:he":"בנק מסד"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/הבנק הבינלאומי":{name:"הבנק הבינלאומי",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHaBank%20Hbinleumi%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2777497",amenity:"bank"},addTags:{amenity:"bank",brand:"הבנק הבינלאומי","brand:en":"First International Bank of Israel","brand:he":"הבנק הבינלאומי","brand:wikidata":"Q2777497","brand:wikipedia":"en:First International Bank of Israel",name:"הבנק הבינלאומי","name:en":"First International Bank of Israel","name:he":"הבנק הבינלאומי"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/מזרחי טפחות":{name:"מזרחי טפחות",icon:"maki-bank",imageURL:"https://graph.facebook.com/bank.mizrahi.tefahot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2777129",amenity:"bank"},addTags:{amenity:"bank",brand:"מזרחי טפחות","brand:en":"Mizrahi-Tefahot","brand:he":"מזרחי טפחות","brand:wikidata":"Q2777129","brand:wikipedia":"en:Bank Mizrahi-Tefahot",name:"בנק מזרחי טפחות","name:en":"Bank Mizrahi-Tefahot","name:he":"בנק מזרחי טפחות"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک آینده":{name:"بانک آینده",icon:"maki-bank",imageURL:"https://graph.facebook.com/AyandehBankIran/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5938144",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک آینده","brand:en":"Ayandeh Bank","brand:wikidata":"Q5938144","brand:wikipedia":"en:Ayandeh Bank",name:"بانک آینده","name:en":"Ayandeh Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک اقتصاد نوین":{name:"بانک اقتصاد نوین",icon:"maki-bank",imageURL:"https://graph.facebook.com/NewEconomyBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5323768",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک اقتصاد نوین","brand:en":"EN Bank","brand:wikidata":"Q5323768","brand:wikipedia":"en:EN Bank",name:"بانک اقتصاد نوین","name:en":"EN Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک انصار":{name:"بانک انصار",icon:"maki-bank",imageURL:"https://graph.facebook.com/bank.ansar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5862675",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک انصار","brand:wikidata":"Q5862675","brand:wikipedia":"fa:بانک انصار",name:"بانک انصار"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک ایران زمین":{name:"بانک ایران زمین",icon:"maki-bank",imageURL:"https://graph.facebook.com/503759579674794/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5934423",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک ایران زمین","brand:wikidata":"Q5934423","brand:wikipedia":"en:Iran Zamin Bank",name:"بانک ایران زمین"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک تجارت":{name:"بانک تجارت",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankTjart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7695198",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک تجارت","brand:wikidata":"Q7695198","brand:wikipedia":"en:Tejarat Bank",name:"بانک تجارت"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک توسعه تعاون":{name:"بانک توسعه تعاون",icon:"maki-bank",imageURL:"https://graph.facebook.com/ttbank.official1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5684450",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک توسعه تعاون","brand:wikidata":"Q5684450","brand:wikipedia":"fa:بانک توسعه تعاون",name:"بانک توسعه تعاون"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک رفاه":{name:"بانک رفاه",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRefah-Bank-Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7307083",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک رفاه","brand:en":"Refah Bank","brand:wikidata":"Q7307083","brand:wikipedia":"en:Refah Bank",name:"بانک رفاه","name:en":"Refah Bank"},countryCodes:["ir"],terms:["بانک رفاه کارگران"],matchScore:2,suggestion:true},"amenity/bank/بانک سامان":{name:"بانک سامان",icon:"maki-bank",imageURL:"https://graph.facebook.com/saman.bank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4117676",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک سامان","brand:en":"Saman Bank","brand:wikidata":"Q4117676","brand:wikipedia":"en:Saman Bank",name:"بانک سامان","name:en":"Saman Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک سرمایه":{name:"بانک سرمایه",icon:"maki-bank",imageURL:"https://graph.facebook.com/116484438378460/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7424291",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک سرمایه","brand:en":"Sarmayeh Bank","brand:wikidata":"Q7424291","brand:wikipedia":"en:Sarmayeh Bank",name:"بانک سرمایه","name:en":"Sarmayeh Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک سپه":{name:"بانک سپه",icon:"maki-bank",imageURL:"https://graph.facebook.com/SepahBankClub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882624",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک سپه","brand:en":"Bank Sepah","brand:wikidata":"Q2882624","brand:wikipedia":"en:Bank Sepah",name:"بانک سپه","name:en":"Bank Sepah"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک سینا":{name:"بانک سینا",icon:"maki-bank",imageURL:"https://graph.facebook.com/Esinabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10860246",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک سینا","brand:en":"Sina Bank","brand:wikidata":"Q10860246","brand:wikipedia":"en:Sina Bank",name:"بانک سینا","name:en":"Sina Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک شهر":{name:"بانک شهر",icon:"maki-bank",imageURL:"https://graph.facebook.com/217753181621178/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5941033",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک شهر","brand:en":"Shahr Bank","brand:wikidata":"Q5941033","brand:wikipedia":"fa:بانک شهر",name:"بانک شهر","name:en":"Shahr Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک صادرات":{name:"بانک صادرات",icon:"maki-bank",imageURL:"https://graph.facebook.com/bsi.ir/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882608",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک صادرات","brand:en":"Bank Saderat Iran","brand:wikidata":"Q2882608","brand:wikipedia":"en:Bank Saderat Iran",name:"بانک صادرات","name:en":"Bank Saderat Iran"},countryCodes:["ir"],terms:["بانک صادرات ایران","صادرات"],matchScore:2,suggestion:true},"amenity/bank/بانک قوامین":{name:"بانک قوامین",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10860253",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک قوامین","brand:en":"Ghavamin Bank","brand:wikidata":"Q10860253","brand:wikipedia":"en:Ghavamin Bank",name:"بانک قوامین","name:en":"Ghavamin Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک مسکن":{name:"بانک مسکن",icon:"maki-bank",imageURL:"https://graph.facebook.com/146073072233557/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855942",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک مسکن","brand:en":"Bank Maskan","brand:wikidata":"Q4855942","brand:wikipedia":"en:Bank Maskan",name:"بانک مسکن","name:en":"Bank Maskan"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک ملت":{name:"بانک ملت",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankMellatOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855944",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک ملت","brand:en":"Bank Mellat","brand:wikidata":"Q4855944","brand:wikipedia":"en:Bank Mellat",name:"بانک ملت","name:en":"Bank Mellat"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک ملی":{name:"بانک ملی",icon:"maki-bank",imageURL:"https://graph.facebook.com/www.bmi.ir/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806640",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک ملی","brand:en":"Bank Melli Iran","brand:wikidata":"Q806640","brand:wikipedia":"en:Bank Melli Iran",name:"بانک ملی","name:en":"Bank Melli Iran"},countryCodes:["ir"],terms:["بانک ملی ایران","ملی"],matchScore:2,suggestion:true},"amenity/bank/بانک مهر اقتصاد":{name:"بانک مهر اقتصاد",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5942921",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک مهر اقتصاد","brand:wikidata":"Q5942921","brand:wikipedia":"fa:بانک مهر اقتصاد",name:"بانک مهر اقتصاد","name:en":"Mehr Eqtesad Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک پارسیان":{name:"بانک پارسیان",icon:"maki-bank",imageURL:"https://graph.facebook.com/parsianbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2410404",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک پارسیان","brand:en":"Parsian Bank","brand:wikidata":"Q2410404","brand:wikipedia":"en:Parsian Bank",name:"بانک پارسیان","name:en":"Parsian Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک پاسارگاد":{name:"بانک پاسارگاد",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankpasargadofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855962",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک پاسارگاد","brand:en":"Bank Pasargad","brand:wikidata":"Q4855962","brand:wikipedia":"en:Bank Pasargad",name:"بانک پاسارگاد","name:en":"Bank Pasargad"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک کشاورزی":{name:"بانک کشاورزی",icon:"maki-bank",imageURL:"https://graph.facebook.com/277894095586473/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6395007",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک کشاورزی","brand:en":"Bank Keshavarzi Iran","brand:wikidata":"Q6395007","brand:wikipedia":"en:Bank Keshavarzi Iran",name:"بانک کشاورزی","name:en":"Bank Keshavarzi Iran"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/پست بانک":{name:"پست بانک",icon:"maki-bank",imageURL:"https://graph.facebook.com/149174395175600/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7233625",amenity:"bank"},addTags:{amenity:"bank",brand:"پست بانک","brand:en":"Post Bank of Iran","brand:wikidata":"Q7233625","brand:wikipedia":"en:Post Bank of Iran",name:"پست بانک","name:en":"Post Bank of Iran"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/অগ্রণী ব্যাংক":{name:"অগ্রণী ব্যাংক",icon:"maki-bank",imageURL:"https://graph.facebook.com/AgraniBankLimited/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q517050",amenity:"bank"},addTags:{amenity:"bank",brand:"অগ্রণী ব্যাংক","brand:bn":"অগ্রণী ব্যাংক","brand:en":"Agrani Bank","brand:wikidata":"Q517050","brand:wikipedia":"bn:অগ্রণী ব্যাংক",name:"অগ্রণী ব্যাংক","name:bn":"অগ্রণী ব্যাংক","name:en":"Agrani Bank"},countryCodes:["bd"],terms:["agrani bank","agrani bank limited","agrani bank limited অগ্রণী ব্যাংক লিমিটেড","agrani bank ltd","agrani bank ltd অগ্রণী ব্যাংক লিমিটেড","অগ্রণী ব্যাংক লিমিটেড"],matchScore:2,suggestion:true},"amenity/bank/গ্রামীণ ব্যাংক":{name:"গ্রামীণ ব্যাংক",icon:"maki-bank",imageURL:"https://graph.facebook.com/gramenbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q188567",amenity:"bank"},addTags:{amenity:"bank",brand:"গ্রামীণ ব্যাংক","brand:bn":"গ্রামীণ ব্যাংক","brand:en":"Grameen Bank","brand:wikidata":"Q188567","brand:wikipedia":"en:Grameen Bank",name:"গ্রামীণ ব্যাংক","name:bn":"গ্রামীণ ব্যাংক","name:en":"Grameen Bank"},countryCodes:["bd"],terms:[],matchScore:2,suggestion:true},"amenity/bank/জনতা ব্যাংক লিমিটেড":{name:"জনতা ব্যাংক লিমিটেড",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/901845891891568641/8L_3kxxa_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3347028",amenity:"bank"},addTags:{amenity:"bank",brand:"জনতা ব্যাংক লিমিটেড","brand:bn":"জনতা ব্যাংক লিমিটেড","brand:en":"Janata Bank Limited","brand:wikidata":"Q3347028","brand:wikipedia":"bn:জনতা ব্যাংক",name:"জনতা ব্যাংক লিমিটেড","name:bn":"জনতা ব্যাংক লিমিটেড","name:en":"Janata Bank Limited"},countryCodes:["bd"],terms:["janata bank","janata bank limited","janata bank limited জনতা ব্যাংক লিমিটেড"],matchScore:2,suggestion:true},"amenity/bank/বাংলাদেশ কৃষি ব্যাংক":{name:"বাংলাদেশ কৃষি ব্যাংক",icon:"maki-bank",imageURL:"https://graph.facebook.com/bangladeshkrishibank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16345932",amenity:"bank"},addTags:{amenity:"bank",brand:"বাংলাদেশ কৃষি ব্যাংক","brand:bn":"বাংলাদেশ কৃষি ব্যাংক","brand:en":"Bangladesh Krishi Bank","brand:wikidata":"Q16345932","brand:wikipedia":"en:Bangladesh Krishi Bank",name:"বাংলাদেশ কৃষি ব্যাংক","name:bn":"বাংলাদেশ কৃষি ব্যাংক","name:en":"Bangladesh Krishi Bank"},countryCodes:["bd"],terms:[],matchScore:2,suggestion:true},"amenity/bank/সোনালী ব্যাংক লিমিটেড":{name:"সোনালী ব্যাংক লিমিটেড",icon:"maki-bank",imageURL:"https://graph.facebook.com/sb.ltd.bd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3350382",amenity:"bank"},addTags:{amenity:"bank",brand:"সোনালী ব্যাংক লিমিটেড","brand:bn":"সোনালী ব্যাংক লিমিটেড","brand:en":"Sonali Bank","brand:wikidata":"Q3350382","brand:wikipedia":"en:Sonali Bank",name:"সোনালী ব্যাংক লিমিটেড","name:bn":"সোনালী ব্যাংক লিমিটেড","name:en":"Sonali Bank"},countryCodes:["bd"],terms:["sonali bank","sonali bank limited","sonali bank limited সোনালী ব্যাংক লিমিটেড"],matchScore:2,suggestion:true},"amenity/bank/ธนาคารกรุงเทพ":{name:"ธนาคารกรุงเทพ",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/924817393049677824/zctRzkcO_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q806483",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารกรุงเทพ","brand:en":"Bangkok Bank","brand:th":"ธนาคารกรุงเทพ","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"ธนาคารกรุงเทพ","name:en":"Bangkok Bank","name:th":"ธนาคารกรุงเทพ"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารกรุงไทย":{name:"ธนาคารกรุงไทย",icon:"maki-bank",imageURL:"https://graph.facebook.com/krungthaibank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q962865",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารกรุงไทย","brand:en":"Krung Thai Bank","brand:th":"ธนาคารกรุงไทย","brand:wikidata":"Q962865","brand:wikipedia":"en:Krung Thai Bank",name:"ธนาคารกรุงไทย","name:en":"Krung Thai Bank","name:th":"ธนาคารกรุงไทย"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารกสิกรไทย":{name:"ธนาคารกสิกรไทย",icon:"maki-bank",imageURL:"https://graph.facebook.com/KBankLive/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q276557",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารกสิกรไทย","brand:en":"Kasikornbank","brand:th":"ธนาคารกสิกรไทย","brand:wikidata":"Q276557","brand:wikipedia":"en:Kasikornbank",name:"ธนาคารกสิกรไทย","name:en":"Kasikornbank","name:th":"ธนาคารกสิกรไทย"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารออมสิน":{name:"ธนาคารออมสิน",icon:"maki-bank",imageURL:"https://graph.facebook.com/GSBSociety/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6579041",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารออมสิน","brand:en":"Government Savings Bank","brand:th":"ธนาคารออมสิน","brand:wikidata":"Q6579041","brand:wikipedia":"en:Government Savings Bank (Thailand)",name:"ธนาคารออมสิน","name:en":"Government Savings Bank","name:th":"ธนาคารออมสิน"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารไทยพาณิชย์":{name:"ธนาคารไทยพาณิชย์",icon:"maki-bank",imageURL:"https://graph.facebook.com/scb.thailand/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2038986",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารไทยพาณิชย์","brand:en":"Siam Commercial Bank","brand:th":"ธนาคารไทยพาณิชย์","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"ธนาคารไทยพาณิชย์","name:en":"Siam Commercial Bank","name:th":"ธนาคารไทยพาณิชย์"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/みずほ銀行":{name:"みずほ銀行",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/902036508672106496/L8rp7WY6_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2882956",amenity:"bank"},addTags:{amenity:"bank",brand:"みずほ銀行","brand:en":"Mizuho Bank","brand:ja":"みずほ銀行","brand:wikidata":"Q2882956","brand:wikipedia":"en:Mizuho Bank",name:"みずほ銀行","name:en":"Mizuho Bank","name:ja":"みずほ銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ゆうちょ銀行":{name:"ゆうちょ銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FJapan%20Post%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q907103",amenity:"bank"},addTags:{amenity:"bank",brand:"ゆうちょ銀行","brand:en":"Japan Post Bank","brand:ja":"ゆうちょ銀行","brand:wikidata":"Q907103","brand:wikipedia":"ja:ゆうちょ銀行",name:"ゆうちょ銀行","name:en":"Japan Post Bank","name:ja":"ゆうちょ銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/りそな銀行":{name:"りそな銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FResona%20Bank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11281447",amenity:"bank"},addTags:{amenity:"bank",brand:"りそな銀行","brand:en":"Resona Bank","brand:ja":"りそな銀行","brand:wikidata":"Q11281447","brand:wikipedia":"ja:りそな銀行",name:"りそな銀行","name:en":"Resona Bank","name:ja":"りそな銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/イオン銀行":{name:"イオン銀行",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1064359056909856774/mH1CT4mL_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11286327",amenity:"bank"},addTags:{amenity:"bank",brand:"イオン銀行","brand:en":"Aeon Bank","brand:ja":"イオン銀行","brand:wikidata":"Q11286327","brand:wikipedia":"ja:イオン銀行",name:"イオン銀行","name:en":"Aeon Bank","name:ja":"イオン銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/スルガ銀行":{name:"スルガ銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSuruga%20Bank%20Ltd.%20head%20office%20ac.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11313470",amenity:"bank"},addTags:{amenity:"bank",brand:"スルガ銀行","brand:en":"Suruga Bank","brand:ja":"スルガ銀行","brand:wikidata":"Q11313470","brand:wikipedia":"ja:スルガ銀行",name:"スルガ銀行","name:en":"Suruga Bank","name:ja":"スルガ銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/三井住友信託銀行":{name:"三井住友信託銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSumitomo%20Mitsui%20Trust%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5215421",amenity:"bank"},addTags:{amenity:"bank",brand:"三井住友信託銀行","brand:en":"Sumitomo Mitsui Trust Bank","brand:wikidata":"Q5215421","brand:wikipedia":"jp:三井住友信託銀行",name:"三井住友信託銀行","name:en":"Sumitomo Mitsui Trust Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/三井住友銀行":{name:"三井住友銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/smbc.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2660418",amenity:"bank"},addTags:{amenity:"bank",brand:"三井住友銀行","brand:en":"Sumitomo Mitsui Banking Corporation","brand:ja":"三井住友銀行","brand:wikidata":"Q2660418","brand:wikipedia":"en:Sumitomo Mitsui Banking Corporation",name:"三井住友銀行","name:en":"Sumitomo Mitsui Banking Corporation","name:ja":"三井住友銀行","short_name:en":"SMBC"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/三菱UFJ信託銀行":{name:"三菱UFJ信託銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FToyotb.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6883178",amenity:"bank"},addTags:{amenity:"bank",brand:"三菱UFJ信託銀行","brand:en":"Mitsubishi UFJ Trust and Banking Corporation","brand:ja":"三菱UFJ信託銀行","brand:wikidata":"Q6883178","brand:wikipedia":"en:Mitsubishi UFJ Trust and Banking Corporation",name:"三菱UFJ信託銀行","name:en":"Mitsubishi UFJ Trust and Banking Corporation","name:ja":"三菱UFJ信託銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/三菱UFJ銀行":{name:"三菱UFJ銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/bk.mufg.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q988284",amenity:"bank"},addTags:{amenity:"bank",brand:"三菱UFJ銀行","brand:en":"MUFG Bank","brand:ja":"三菱UFJ銀行","brand:wikidata":"Q988284","brand:wikipedia":"en:MUFG Bank",name:"三菱UFJ銀行","name:en":"MUFG Bank","name:ja":"三菱UFJ銀行"},terms:["三菱東京ufj銀行"],matchScore:2,suggestion:true},"amenity/bank/上海商業儲蓄銀行":{name:"上海商業儲蓄銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/SCSB.Pukii/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4207208",amenity:"bank"},addTags:{amenity:"bank",brand:"上海商業儲蓄銀行","brand:en":"Shanghai Commercial and Savings Bank","brand:wikidata":"Q4207208","brand:wikipedia":"en:Shanghai Commercial and Savings Bank",name:"上海商業儲蓄銀行","name:en":"Shanghai Commercial and Savings Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/上海浦东发展银行":{name:"上海浦东发展银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPSD%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1479076",amenity:"bank"},addTags:{amenity:"bank",brand:"上海浦东发展银行","brand:en":"Shanghai Pudong Development Bank","brand:wikidata":"Q1479076","brand:wikipedia":"zh:上海浦东发展银行",name:"上海浦东发展银行","name:en":"Shanghai Pudong Development Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/东亚银行":{name:"东亚银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20of%20East%20Asia%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q806679",amenity:"bank"},addTags:{amenity:"bank",brand:"东亚银行","brand:wikidata":"Q806679","brand:wikipedia":"en:Bank of East Asia",name:"东亚银行","name:en":"Bank of East Asia"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中信银行":{name:"中信银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/CITICFanPage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38960",amenity:"bank"},addTags:{amenity:"bank",brand:"中信银行","brand:en":"China CITIC Bank","brand:wikidata":"Q38960","brand:wikipedia":"en:China CITIC Bank",name:"中信银行","name:en":"China CITIC Bank"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中国光大银行":{name:"中国光大银行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10873167",amenity:"bank"},addTags:{amenity:"bank",brand:"中国光大银行","brand:en":"China Everbright Bank","brand:wikidata":"Q10873167","brand:wikipedia":"zh:中国光大银行",name:"中国光大银行","name:en":"China Everbright Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/中国农业银行":{name:"中国农业银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAgricultural%20Bank%20of%20China%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q26298",amenity:"bank"},addTags:{amenity:"bank",brand:"中国农业银行","brand:en":"Agricultural Bank of China","brand:wikidata":"Q26298","brand:wikipedia":"en:Agricultural Bank of China",name:"中国农业银行","name:en":"Agricultural Bank of China"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中国工商银行":{name:"中国工商银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/icbcglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26463",amenity:"bank"},addTags:{amenity:"bank",brand:"中国工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"中国工商银行","name:en":"Industrial and Commercial Bank of China"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中国建设银行":{name:"中国建设银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/225342697629586/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26299",amenity:"bank"},addTags:{amenity:"bank",brand:"中国建设银行","brand:en":"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"中国建设银行","name:en":"China Construction Bank"},countryCodes:["cn"],terms:["建设银行"],matchScore:2,suggestion:true},"amenity/bank/中国民生银行":{name:"中国民生银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/chinaminshengbanking/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q911543",amenity:"bank"},addTags:{amenity:"bank",brand:"中国民生银行","brand:en":"China Minsheng Bank","brand:wikidata":"Q911543","brand:wikipedia":"en:China Minsheng Bank",name:"中国民生银行","name:en":"China Minsheng Bank"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中国邮政储蓄银行":{name:"中国邮政储蓄银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/362173487941724/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q986744",amenity:"bank"},addTags:{amenity:"bank",brand:"中国邮政储蓄银行","brand:en":"Postal Savings Bank of China","brand:wikidata":"Q986744","brand:wikipedia":"en:Postal Savings Bank of China",name:"中国邮政储蓄银行","name:en":"Postal Savings Bank of China"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中国银行":{name:"中国银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankofchina.cn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q790068",amenity:"bank"},addTags:{amenity:"bank",brand:"中国银行","brand:en":"Bank of China","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"中国银行","name:en":"Bank of China"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中國信託商業銀行":{name:"中國信託商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/ctbcbankusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5100191",amenity:"bank"},addTags:{amenity:"bank",brand:"中國信託商業銀行","brand:en":"CTBC Bank","brand:wikidata":"Q5100191","brand:wikipedia":"en:CTBC Bank",name:"中國信託商業銀行","name:en":"CTBC Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/交通银行":{name:"交通银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankofcommunications/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806680",amenity:"bank"},addTags:{amenity:"bank",brand:"交通银行","brand:en":"Bank of Communications","brand:wikidata":"Q806680","brand:wikipedia":"en:Bank of Communications",name:"交通银行","name:en":"Bank of Communications"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/京城商業銀行":{name:"京城商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/ktb2809/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10883132",amenity:"bank"},addTags:{amenity:"bank",brand:"京城商業銀行","brand:wikidata":"Q10883132","brand:wikipedia":"zh:京城商業銀行",name:"京城商業銀行"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/京都中央信用金庫":{name:"京都中央信用金庫",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11374844",amenity:"bank"},addTags:{amenity:"bank",brand:"京都中央信用金庫","brand:en":"Kyoto Chuo Shinkin Bank","brand:wikidata":"Q11374844","brand:wikipedia":"ja:京都中央信用金庫",name:"京都中央信用金庫","name:en":"Kyoto Chuo Shinkin Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/京都銀行":{name:"京都銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11375713",amenity:"bank"},addTags:{amenity:"bank",brand:"京都銀行","brand:en":"Bank of Kyoto","brand:wikidata":"Q11375713","brand:wikipedia":"en:Bank of Kyoto",name:"京都銀行","name:en":"Bank of Kyoto"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/元大商業銀行":{name:"元大商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/yuantabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10889602",amenity:"bank"},addTags:{amenity:"bank",brand:"元大商業銀行","brand:en":"Yuanta Commercial Bank","brand:wikidata":"Q10889602","brand:wikipedia":"zh:元大商業銀行",name:"元大商業銀行","name:en":"Yuanta Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/兆豐國際商業銀行":{name:"兆豐國際商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q709757",amenity:"bank"},addTags:{amenity:"bank",brand:"兆豐國際商業銀行","brand:en":"Mega International Commercial Bank","brand:wikidata":"Q709757","brand:wikipedia":"en:Mega International Commercial Bank",name:"兆豐國際商業銀行","name:en":"Mega International Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/兴业银行":{name:"兴业银行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1410821",amenity:"bank"},addTags:{amenity:"bank",brand:"兴业银行","brand:wikidata":"Q1410821","brand:wikipedia":"zh:兴业银行",name:"兴业银行"},terms:[],matchScore:2,suggestion:true},"amenity/bank/农业银行":{name:"农业银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAgricultural%20Bank%20of%20China%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q26298",amenity:"bank"},addTags:{amenity:"bank",brand:"农业银行","brand:wikidata":"Q26298","brand:wikipedia":"zh:中国农业银行",name:"农业银行"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/北京银行":{name:"北京银行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q39146",amenity:"bank"},addTags:{amenity:"bank",brand:"北京银行","brand:wikidata":"Q39146","brand:wikipedia":"zh:北京银行",name:"北京银行"},terms:[],matchScore:2,suggestion:true},"amenity/bank/北洋銀行":{name:"北洋銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11402354",amenity:"bank"},addTags:{amenity:"bank",brand:"北洋銀行","brand:en":"North Pacific Bank","brand:wikidata":"Q11402354","brand:wikipedia":"ja:北洋銀行",name:"北洋銀行","name:en":"North Pacific Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/北海道銀行":{name:"北海道銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5878076",amenity:"bank"},addTags:{amenity:"bank",brand:"北海道銀行","brand:en":"Hokkaido Bank","brand:wikidata":"Q5878076","brand:wikipedia":"en:Hokkaido Bank",name:"北海道銀行","name:en":"Hokkaido Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/千葉銀行":{name:"千葉銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1071712",amenity:"bank"},addTags:{amenity:"bank",brand:"千葉銀行","brand:en":"The Chiba Bank","brand:ja":"千葉銀行","brand:wikidata":"Q1071712","brand:wikipedia":"en:Chiba Bank",name:"千葉銀行","name:en":"Chiba Bank","name:ja":"千葉銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/台中商業銀行":{name:"台中商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTcbbank%20headoffice.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6136958",amenity:"bank"},addTags:{amenity:"bank",brand:"台中商業銀行","brand:en":"Taichung Bank","brand:wikidata":"Q6136958","brand:wikipedia":"en:Taichung Bank",name:"台中商業銀行","name:en":"Taichung Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/台北富邦商業銀行":{name:"台北富邦商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q697293",amenity:"bank"},addTags:{amenity:"bank",brand:"台北富邦商業銀行","brand:en":"Taipei Fubon Bank","brand:wikidata":"Q697293","brand:wikipedia":"en:Taipei Fubon Bank",name:"台北富邦商業銀行","name:en":"Taipei Fubon Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/台新國際商業銀行":{name:"台新國際商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7676420",amenity:"bank"},addTags:{amenity:"bank",brand:"台新國際商業銀行","brand:en":"Taishin International Bank","brand:wikidata":"Q7676420","brand:wikipedia":"en:Taishin International Bank",name:"台新國際商業銀行","name:en":"Taishin International Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/合作金庫商業銀行":{name:"合作金庫商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDepartment%20of%20Business%2C%20Taiwan%20Cooperative%20Bank%2020171216.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q701540",amenity:"bank"},addTags:{amenity:"bank",brand:"合作金庫商業銀行","brand:en":"Taiwan Cooperative Bank","brand:wikidata":"Q701540","brand:wikipedia":"en:Taiwan Cooperative Bank",name:"合作金庫商業銀行","name:en":"Taiwan Cooperative Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/國泰世華商業銀行":{name:"國泰世華商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/cathayunitedbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q702656",amenity:"bank"},addTags:{amenity:"bank",brand:"國泰世華商業銀行","brand:en":"Cathay United Bank","brand:wikidata":"Q702656","brand:wikipedia":"en:Cathay United Bank",name:"國泰世華商業銀行","name:en":"Cathay United Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/埼玉りそな銀行":{name:"埼玉りそな銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSaitama%20Resona%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4671591",amenity:"bank"},addTags:{amenity:"bank",brand:"埼玉りそな銀行","brand:en":"Saitama Resona Bank","brand:ja":"埼玉りそな銀行","brand:wikidata":"Q4671591","brand:wikipedia":"ja:埼玉りそな銀行",name:"埼玉りそな銀行","name:en":"Saitama Resona Bank","name:ja":"埼玉りそな銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/大眾商業銀行":{name:"大眾商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10937047",amenity:"bank"},addTags:{amenity:"bank",brand:"大眾商業銀行","brand:en":"Ta Chong Commercial Bank","brand:wikidata":"Q10937047","brand:wikipedia":"zh:大眾商業銀行",name:"大眾商業銀行","name:en":"Ta Chong Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/安泰商業銀行":{name:"安泰商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10946952",amenity:"bank"},addTags:{amenity:"bank",brand:"安泰商業銀行","brand:en":"Entie Commercial Bank","brand:wikidata":"Q10946952","brand:wikipedia":"zh:安泰商業銀行",name:"安泰商業銀行","name:en":"Entie Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/工商银行":{name:"工商银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/icbcglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26463",amenity:"bank"},addTags:{amenity:"bank",brand:"工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"工商银行","name:en":"Industrial and Commercial Bank of China"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/常陽銀行":{name:"常陽銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q6297774",amenity:"bank"},addTags:{amenity:"bank",brand:"常陽銀行","brand:en":"Joyo Bank","brand:wikidata":"Q6297774","brand:wikipedia":"en:Joyo Bank",name:"常陽銀行","name:en":"Joyo Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/彰化商業銀行":{name:"彰化商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCentral%20Branch%2C%20Chang%20Hwa%20Bank%2020101213.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5071627",amenity:"bank"},addTags:{amenity:"bank",brand:"彰化商業銀行","brand:en":"Chang Hwa Bank","brand:wikidata":"Q5071627","brand:wikipedia":"en:Chang Hwa Bank",name:"彰化商業銀行","name:en":"Chang Hwa Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/招商银行":{name:"招商银行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1073327",amenity:"bank"},addTags:{amenity:"bank",brand:"招商银行","brand:en":"China Merchants Bank","brand:wikidata":"Q1073327","brand:wikipedia":"en:China Merchants Bank",name:"招商银行","name:en":"China Merchants Bank"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/新生銀行":{name:"新生銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q571997",amenity:"bank"},addTags:{amenity:"bank",brand:"新生銀行","brand:en":"Shinsei Bank","brand:ja":"新生銀行","brand:wikidata":"Q571997","brand:wikipedia":"ja:新生銀行",name:"新生銀行","name:en":"Shinsei Bank","name:ja":"新生銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/日本銀行":{name:"日本銀行",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1695643374/medama_moji_en_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q333101",amenity:"bank"},addTags:{amenity:"bank",brand:"日本銀行","brand:en":"Bank of Japan","brand:wikidata":"Q333101","brand:wikipedia":"ja:日本銀行",name:"日本銀行","name:en":"Bank of Japan"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/東亞銀行":{name:"東亞銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20of%20East%20Asia%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q806679",amenity:"bank"},addTags:{amenity:"bank",brand:"東亞銀行","brand:en":"Bank of East Asia","brand:wikidata":"Q806679","brand:wikipedia":"zh:東亞銀行","brand:zh-Hans":"东亚银行","brand:zh-Hant":"東亞銀行",name:"東亞銀行 BEA","name:en":"Bank of East Asia","name:zh-Hans":"东亚银行","name:zh-Hant":"東亞銀行"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/東日本銀行":{name:"東日本銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11527211",amenity:"bank"},addTags:{amenity:"bank",brand:"東日本銀行","brand:en":"Higashi-Nippon Bank","brand:ja":"東日本銀行","brand:wikidata":"Q11527211","brand:wikipedia":"ja:東日本銀行",name:"東日本銀行","name:en":"Higashi-Nippon Bank","name:ja":"東日本銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/板信商業銀行":{name:"板信商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11104946",amenity:"bank"},addTags:{amenity:"bank",brand:"板信商業銀行","brand:en":"Bank of Panshin","brand:wikidata":"Q11104946","brand:wikipedia":"zh:板信商業銀行",name:"板信商業銀行","name:en":"Bank of Panshin"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/横浜銀行":{name:"横浜銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2744340",amenity:"bank"},addTags:{amenity:"bank",brand:"横浜銀行","brand:en":"Bank of Yokohama","brand:wikidata":"Q2744340","brand:wikipedia":"en:Bank of Yokohama",name:"横浜銀行","name:en":"Bank of Yokohama"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/永豐商業銀行":{name:"永豐商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20SinoPac%20logo%2020121103.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4855976",amenity:"bank"},addTags:{amenity:"bank",brand:"永豐商業銀行","brand:en":"Bank SinoPac","brand:wikidata":"Q4855976","brand:wikipedia":"en:Bank SinoPac",name:"永豐商業銀行","name:en":"Bank SinoPac"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/渣打國際商業銀行":{name:"渣打國際商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/StandardCharteredTW/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62267023",amenity:"bank"},addTags:{amenity:"bank",brand:"渣打國際商業銀行","brand:wikidata":"Q62267023",name:"渣打國際商業銀行"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/玉山商業銀行":{name:"玉山商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FE.SUN%20Bank.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5321663",amenity:"bank"},addTags:{amenity:"bank",brand:"玉山商業銀行","brand:en":"E.SUN Commercial Bank","brand:wikidata":"Q5321663","brand:wikipedia":"en:E.SUN Commercial Bank",name:"玉山商業銀行","name:en":"E.SUN Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/第一商業銀行":{name:"第一商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/firsthaka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11602128",amenity:"bank"},addTags:{amenity:"bank",brand:"第一商業銀行","brand:en":"First Commercial Bank","brand:wikidata":"Q11602128","brand:wikipedia":"zh:第一商業銀行",name:"第一商業銀行","name:en":"First Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/聯邦商業銀行":{name:"聯邦商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/180081655368957/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15927195",amenity:"bank"},addTags:{amenity:"bank",brand:"聯邦商業銀行","brand:en":"Union Bank of Taiwan","brand:wikidata":"Q15927195","brand:wikipedia":"zh:聯邦商業銀行",name:"聯邦商業銀行","name:en":"Union Bank of Taiwan"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/臺灣中小企業銀行":{name:"臺灣中小企業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/tbbdreamplus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15913812",amenity:"bank"},addTags:{amenity:"bank",brand:"臺灣中小企業銀行","brand:en":"Taiwan Business Bank","brand:wikidata":"Q15913812","brand:wikipedia":"zh:臺灣中小企業銀行",name:"臺灣中小企業銀行","name:en":"Taiwan Business Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/臺灣土地銀行":{name:"臺灣土地銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/landbank.com.tw/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q717592",amenity:"bank"},addTags:{amenity:"bank",brand:"臺灣土地銀行","brand:en":"Land Bank of Taiwan","brand:wikidata":"Q717592","brand:wikipedia":"en:Land Bank of Taiwan",name:"臺灣土地銀行","name:en":"Land Bank of Taiwan"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/臺灣新光商業銀行":{name:"臺灣新光商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/SKBankTaiwan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15909616",amenity:"bank"},addTags:{amenity:"bank",brand:"臺灣新光商業銀行","brand:en":"Shin Kong Commercial Bank","brand:wikidata":"Q15909616","brand:wikipedia":"zh:臺灣新光商業銀行",name:"臺灣新光商業銀行","name:en":"Shin Kong Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/臺灣銀行":{name:"臺灣銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/botlion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q706533",amenity:"bank"},addTags:{amenity:"bank",brand:"臺灣銀行","brand:en":"Bank of Taiwan","brand:wikidata":"Q706533","brand:wikipedia":"en:Bank of Taiwan",name:"臺灣銀行","name:en":"Bank of Taiwan"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/芝信用金庫":{name:"芝信用金庫",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11614605",amenity:"bank"},addTags:{amenity:"bank",brand:"芝信用金庫","brand:en":"Shiba Shinkin Bank","brand:ja":"芝信用金庫","brand:wikidata":"Q11614605","brand:wikipedia":"ja:芝信用金庫",name:"芝信用金庫","name:en":"Shiba Shinkin Bank","name:ja":"芝信用金庫"},terms:[],matchScore:2,suggestion:true},"amenity/bank/華南商業銀行":{name:"華南商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/hncb008/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11620043",amenity:"bank"},addTags:{amenity:"bank",brand:"華南商業銀行","brand:en":"Hua Nan Commercial Bank","brand:wikidata":"Q11620043","brand:wikipedia":"zh:華南銀行",name:"華南商業銀行","name:en":"Hua Nan Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/近畿大阪銀行":{name:"近畿大阪銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11638628",amenity:"bank"},addTags:{amenity:"bank",brand:"近畿大阪銀行","brand:en":"The Kinki Osaka Bank","brand:ja":"近畿大阪銀行","brand:wikidata":"Q11638628","brand:wikipedia":"ja:近畿大阪銀行",name:"近畿大阪銀行","name:en":"Kinki Osaka Bank","name:ja":"近畿大阪銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/遠東國際商業銀行":{name:"遠東國際商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/feibHG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15911143",amenity:"bank"},addTags:{amenity:"bank",brand:"遠東國際商業銀行","brand:en":"Far Eastern International Bank","brand:wikidata":"Q15911143","brand:wikipedia":"zh:遠東國際商業銀行",name:"遠東國際商業銀行","name:en":"Far Eastern International Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/陽信商業銀行":{name:"陽信商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11658759",amenity:"bank"},addTags:{amenity:"bank",brand:"陽信商業銀行","brand:en":"Sunny Commercial Bank","brand:wikidata":"Q11658759","brand:wikipedia":"zh:陽信商業銀行",name:"陽信商業銀行","name:en":"Sunny Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/静岡銀行":{name:"静岡銀行",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1161550011710287883/klbYfRjt_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7499501",amenity:"bank"},addTags:{amenity:"bank",brand:"静岡銀行","brand:en":"Shizuoka Bank","brand:ja":"静岡銀行","brand:wikidata":"Q7499501","brand:wikipedia":"en:Shizuoka Bank",name:"静岡銀行","name:en":"Shizuoka Bank","name:ja":"静岡銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/국민은행":{name:"국민은행",icon:"maki-bank",imageURL:"https://graph.facebook.com/kb.financialgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q496606",amenity:"bank"},addTags:{amenity:"bank",brand:"국민은행","brand:en":"KB Kookmin Bank","brand:ko":"국민은행","brand:wikidata":"Q496606","brand:wikipedia":"en:KB Financial Group Inc",name:"국민은행","name:en":"KB Kookmin Bank","name:ko":"국민은행"},countryCodes:["kr"],terms:["국민은행 (gungmin bank)"],matchScore:2,suggestion:true},"amenity/bank/기업은행":{name:"기업은행",icon:"maki-bank",imageURL:"https://graph.facebook.com/SMART.IBK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483855",amenity:"bank"},addTags:{amenity:"bank",brand:"기업은행","brand:en":"Industrial Bank of Korea","brand:ko":"기업은행","brand:wikidata":"Q483855","brand:wikipedia":"en:Industrial Bank of Korea",name:"기업은행","name:en":"Industrial Bank of Korea","name:ko":"기업은행"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/농협":{name:"농협",icon:"maki-bank",imageURL:"https://graph.facebook.com/nhnonghyupbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15283673",amenity:"bank"},addTags:{amenity:"bank",brand:"농협","brand:en":"NH","brand:ko":"농협","brand:wikidata":"Q15283673","brand:wikipedia":"ko:NH농협은행",name:"농협","name:en":"NH","name:ko":"농협"},countryCodes:["kr"],terms:["nh농협은행"],matchScore:2,suggestion:true},"amenity/bank/새마을금고":{name:"새마을금고",icon:"maki-bank",imageURL:"https://graph.facebook.com/kfcc.kr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12600614",amenity:"bank"},addTags:{amenity:"bank",brand:"새마을금고","brand:ko":"새마을금고","brand:wikidata":"Q12600614","brand:wikipedia":"ko:새마을금고",name:"새마을금고","name:ko":"새마을금고"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/신한은행":{name:"신한은행",icon:"maki-bank",imageURL:"https://graph.facebook.com/ShinhanBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487230",amenity:"bank"},addTags:{amenity:"bank",brand:"신한은행","brand:en":"Sinhan Bank","brand:ko":"신한은행","brand:wikidata":"Q487230","brand:wikipedia":"en:Shinhan Bank",name:"신한은행","name:en":"Sinhan Bank","name:ko":"신한은행"},countryCodes:["kr"],terms:["신한은행 (sinhan bank)"],matchScore:2,suggestion:true},"amenity/bank/우리은행":{name:"우리은행",icon:"maki-bank",imageURL:"https://graph.facebook.com/wooribank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q494369",amenity:"bank"},addTags:{amenity:"bank",brand:"우리은행","brand:en":"Woori Bank","brand:ko":"우리은행","brand:wikidata":"Q494369","brand:wikipedia":"en:Woori Bank",name:"우리은행","name:en":"Woori Bank","name:ko":"우리은행"},countryCodes:["kr"],terms:["우리은행 (uri bank)"],matchScore:2,suggestion:true},"amenity/bank/하나은행":{name:"하나은행",icon:"maki-bank",imageURL:"https://graph.facebook.com/KEBHana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q484047",amenity:"bank"},addTags:{amenity:"bank",brand:"하나은행","brand:en":"Korea Exchange Bank","brand:ko":"하나은행","brand:wikidata":"Q484047","brand:wikipedia":"en:Korea Exchange Bank",name:"하나은행","name:en":"Korea Exchange Bank","name:ko":"하나은행"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/bar/All Bar One":{name:"All Bar One",icon:"maki-bar",imageURL:"https://pbs.twimg.com/profile_images/717013484467306497/vjG-lkGe_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4728624",amenity:"bar"},addTags:{amenity:"bar",brand:"All Bar One","brand:wikidata":"Q4728624","brand:wikipedia":"en:All Bar One",name:"All Bar One"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bar/Revolución de Cuba":{name:"Revolución de Cuba",icon:"maki-bar",imageURL:"https://pbs.twimg.com/profile_images/1001476884482396160/3NEm7OnI_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q64024691",amenity:"bar"},addTags:{amenity:"bar",brand:"Revolución de Cuba","brand:wikidata":"Q64024691",name:"Revolución de Cuba"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bar/Revolution":{name:"Revolution",icon:"maki-bar",imageURL:"https://graph.facebook.com/revolutionbars/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64024398",amenity:"bar"},addTags:{amenity:"bar",brand:"Revolution","brand:wikidata":"Q64024398",name:"Revolution"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/Call a Bike":{name:"Call a Bike",icon:"temaki-bicycle_rental",imageURL:"https://graph.facebook.com/callabikesharing/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q1060525",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"Call a Bike","brand:wikidata":"Q1060525","brand:wikipedia":"en:Call a Bike",name:"Call a Bike"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/Grid":{name:"Grid",icon:"temaki-bicycle_rental",imageURL:"https://graph.facebook.com/Gridbikes/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q62104168",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"Grid","brand:wikidata":"Q62104168",name:"Grid"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/MiBici":{name:"MiBici",icon:"temaki-bicycle_rental",imageURL:"https://graph.facebook.com/MiBiciPublica/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q60966987",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"MiBici","brand:wikidata":"Q60966987","brand:wikipedia":"es:MiBici",name:"MiBici"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/Swapfiets":{name:"Swapfiets",icon:"temaki-bicycle_rental",imageURL:"https://graph.facebook.com/Swapfiets/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q62104374",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"Swapfiets","brand:wikidata":"Q62104374",name:"Swapfiets"},countryCodes:["be","de","dk","nl"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/metropolradruhr":{name:"metropolradruhr",icon:"temaki-bicycle_rental",imageURL:"https://graph.facebook.com/nextbike/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q62104274",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"metropolradruhr","brand:wikidata":"Q62104274",name:"metropolradruhr"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bureau_de_change/CADECA":{name:"CADECA",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/CadecaCasasdeCambioOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122716",amenity:"bureau_de_change"},addTags:{amenity:"bureau_de_change",brand:"CADECA","brand:wikidata":"Q62122716",name:"CADECA"},countryCodes:["cu"],terms:[],matchScore:2,suggestion:true},"amenity/bureau_de_change/Travelex":{name:"Travelex",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/TravelexUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2337964",amenity:"bureau_de_change"},addTags:{amenity:"bureau_de_change",brand:"Travelex","brand:wikidata":"Q2337964","brand:wikipedia":"en:Travelex",name:"Travelex"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/85°C":{name:"85°C",icon:"maki-cafe",imageURL:"https://graph.facebook.com/85CBakeryCafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4644852",amenity:"cafe"},addTags:{alt_name:"85C",amenity:"cafe",brand:"85°C","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",cuisine:"coffee_shop;chinese",name:"85°C",takeaway:"yes"},countryCodes:["au","us"],terms:["85 cafe","85 degrees","85 degrees c","85 degrees celsius","85c bakery cafe","85c daily cafe","85oc"],matchScore:2,suggestion:true},"amenity/cafe/85度C":{name:"85度C",icon:"maki-cafe",imageURL:"https://graph.facebook.com/85CBakeryCafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4644852",amenity:"cafe"},addTags:{amenity:"cafe",brand:"85度C","brand:en":"85C Bakery Cafe","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",cuisine:"coffee_shop",name:"85度C","name:en":"85C Bakery Cafe",takeaway:"yes"},countryCodes:["cn","tw"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Aroma Espresso Bar":{name:"Aroma Espresso Bar",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Israel.Aroma/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2909872",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Aroma Espresso Bar","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",cuisine:"coffee_shop",name:"Aroma Espresso Bar",takeaway:"yes"},countryCodes:["ca","kz","ro","ua","us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Barista":{name:"Barista",icon:"maki-cafe",imageURL:"https://graph.facebook.com/BaristaCoffeeCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q644735",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Barista","brand:wikidata":"Q644735","brand:wikipedia":"en:Barista (company)",cuisine:"coffee_shop",name:"Barista",takeaway:"yes"},countryCodes:["in","lk","mv","np"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Beck's Coffee Shop":{name:"Beck's Coffee Shop",icon:"maki-cafe",imageURL:"https://pbs.twimg.com/profile_images/773289632230322180/YtO0yEVy_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11191008",amenity:"cafe"},addTags:{alt_name:"ベックス・コーヒーショップ",amenity:"cafe",brand:"Beck's Coffee Shop","brand:wikidata":"Q11191008","brand:wikipedia":"ja:BECK'S COFFEE SHOP",cuisine:"coffee_shop",name:"Beck's Coffee Shop",takeaway:"yes"},countryCodes:["jp"],terms:["beck's coffe shop"],matchScore:2,suggestion:true},"amenity/cafe/Biggby Coffee":{name:"Biggby Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/BiggbyCoffee.Bhappy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4906876",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Biggby Coffee","brand:wikidata":"Q4906876","brand:wikipedia":"en:Biggby Coffee",cuisine:"coffee_shop",name:"Biggby Coffee",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Black Rock Coffee":{name:"Black Rock Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/blackrockcoffeebar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64225934",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Black Rock Coffee","brand:wikidata":"Q64225934",cuisine:"coffee_shop",name:"Black Rock Coffee",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Blue Bottle Coffee":{name:"Blue Bottle Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/bluebottlecoffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4928917",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Blue Bottle Coffee","brand:wikidata":"Q4928917","brand:wikipedia":"en:Blue Bottle Coffee",cuisine:"coffee_shop",name:"Blue Bottle Coffee",takeaway:"yes"},countryCodes:["jp","kr","us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Bonafide":{name:"Bonafide",icon:"maki-cafe",imageURL:"https://graph.facebook.com/BonafideArgentina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122746",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Bonafide","brand:wikidata":"Q62122746",cuisine:"coffee_shop",name:"Bonafide",takeaway:"yes"},countryCodes:["ar","cl"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Boston Tea Party":{name:"Boston Tea Party",icon:"maki-cafe",imageURL:"https://graph.facebook.com/BTPCafes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23461358",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Boston Tea Party","brand:wikidata":"Q23461358","brand:wikipedia":"en:Boston Tea Party (café chain)",cuisine:"coffee_shop",name:"Boston Tea Party",takeaway:"yes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Bridgehead":{name:"Bridgehead",icon:"maki-cafe",imageURL:"https://graph.facebook.com/BridgeheadCoffeehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4966509",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Bridgehead","brand:wikidata":"Q4966509","brand:wikipedia":"en:Bridgehead Coffee",cuisine:"coffee_shop",name:"Bridgehead",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Cafe Coffee Day":{name:"Cafe Coffee Day",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafecoffeeday/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5017235",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Cafe Coffee Day","brand:wikidata":"Q5017235","brand:wikipedia":"en:Café Coffee Day",cuisine:"coffee_shop",name:"Cafe Coffee Day",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Caffè Nero":{name:"Caffè Nero",icon:"maki-cafe",imageURL:"https://graph.facebook.com/caffenerous/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q675808",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Caffè Nero","brand:wikidata":"Q675808","brand:wikipedia":"en:Caffè Nero",cuisine:"coffee_shop",name:"Caffè Nero",takeaway:"yes"},countryCodes:["gb","ie","tr","us"],terms:["cafe nero"],matchScore:2,suggestion:true},"amenity/cafe/Café Amazon":{name:"Café Amazon",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafeamazonofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q43247503",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Café Amazon","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",cuisine:"coffee_shop",name:"Café Amazon",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Café Dépôt":{name:"Café Dépôt",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafedepot.ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64924449",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Café Dépôt","brand:wikidata":"Q64924449",cuisine:"coffee_shop;cake;bagel;bistro",name:"Café Dépôt",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Café Martínez":{name:"Café Martínez",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CafeMartinezSitioOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16540032",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Café Martínez","brand:wikidata":"Q16540032","brand:wikipedia":"es:Café Martínez",cuisine:"coffee_shop",name:"Café Martínez",takeaway:"yes"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Caribou Coffee":{name:"Caribou Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cariboucoffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5039494",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Caribou Coffee","brand:wikidata":"Q5039494","brand:wikipedia":"en:Caribou Coffee",cuisine:"coffee_shop",name:"Caribou Coffee",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Chatime":{name:"Chatime",icon:"maki-cafe",imageURL:"https://graph.facebook.com/ChatimeCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16829306",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Chatime","brand:en":"Chatime","brand:wikidata":"Q16829306","brand:wikipedia":"en:Chatime","brand:zh":"日出茶太",cuisine:"bubble_tea",name:"Chatime","name:en":"Chatime","name:zh":"日出茶太",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/CoCo":{name:"CoCo",icon:"maki-cafe",imageURL:"https://pbs.twimg.com/profile_images/1143629340564963328/C8Axen7r_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q64827025",amenity:"cafe"},addTags:{amenity:"cafe",brand:"CoCo","brand:wikidata":"Q64827025",cuisine:"bubble_tea",name:"Coco",takeaway:"yes"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee Fellows":{name:"Coffee Fellows",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CoffeeFellowsDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23461429",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee Fellows","brand:wikidata":"Q23461429","brand:wikipedia":"en:Coffee Fellows",cuisine:"coffee_shop",name:"Coffee Fellows",takeaway:"yes"},countryCodes:["de","lu","nl"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee House (Finland)":{name:"Coffee House (Finland)",icon:"maki-cafe",imageURL:"https://graph.facebook.com/raflaamo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11855430",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee House","brand:wikidata":"Q11855430","brand:wikipedia":"fi:Coffee House",cuisine:"coffee_shop",name:"Coffee House",takeaway:"yes"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee Island":{name:"Coffee Island",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CoffeeIslandUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60867333",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee Island","brand:wikidata":"Q60867333","brand:wikipedia":"en:Coffee Island",cuisine:"coffee_shop",name:"Coffee Island",takeaway:"yes"},countryCodes:["cy","gr"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee Like":{name:"Coffee Like",icon:"maki-cafe",imageURL:"https://graph.facebook.com/coffeelikerus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55662627",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee Like","brand:wikidata":"Q55662627","brand:wikipedia":"ru:Coffee Like",cuisine:"coffee_shop",name:"Coffee Like",takeaway:"yes"},countryCodes:["kz","ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee Time":{name:"Coffee Time",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CoffeeTimeCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5140932",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee Time","brand:wikidata":"Q5140932","brand:wikipedia":"en:Coffee Time",cuisine:"coffee_shop",name:"Coffee Time",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee#1":{name:"Coffee#1",icon:"maki-cafe",imageURL:"https://graph.facebook.com/coffeenumber1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22032058",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee#1","brand:wikidata":"Q22032058","brand:wikipedia":"en:Coffee 1",cuisine:"coffee_shop",name:"Coffee#1",takeaway:"yes"},countryCodes:["gb"],terms:["coffee number 1","coffee number one"],matchScore:2,suggestion:true},"amenity/cafe/Cofix":{name:"Cofix",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Cofix.co.il/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16132717",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Cofix","brand:en":"Cofix","brand:he":"קפויקס","brand:wikidata":"Q16132717","brand:wikipedia":"he:קופיקס",cuisine:"coffee_shop",name:"Cofix","name:en":"Cofix","name:he":"קופיקס",takeaway:"yes"},countryCodes:["il","ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Cofizz":{name:"Cofizz",icon:"maki-cafe",imageURL:"https://graph.facebook.com/1253496538019194/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64606270",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Cofizz","brand:en":"Cofizz","brand:he":"קופיז","brand:wikidata":"Q64606270",cuisine:"coffee_shop",name:"Cofizz","name:en":"Cofizz","name:he":"קופיז",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Costa":{name:"Costa",icon:"maki-cafe",imageURL:"https://graph.facebook.com/costacoffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q608845",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Costa","brand:wikidata":"Q608845","brand:wikipedia":"en:Costa Coffee",cuisine:"coffee_shop",name:"Costa",takeaway:"yes"},terms:["costa coffee"],matchScore:2,suggestion:true},"amenity/cafe/Country Style":{name:"Country Style",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CountryStyleCDN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5177435",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Country Style","brand:wikidata":"Q5177435","brand:wikipedia":"en:Country Style",cuisine:"coffee_shop",name:"Country Style",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Cộng Cà Phê":{name:"Cộng Cà Phê",icon:"maki-cafe",imageURL:"https://graph.facebook.com/congcaphe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63864181",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Cộng Cà Phê","brand:wikidata":"Q63864181",cuisine:"coffee_shop;vietnamese",name:"Cộng Cà Phê","name:vi":"Cộng Cà Phê",takeaway:"yes"},countryCodes:["kr","vn"],terms:["cong"],matchScore:2,suggestion:true},"amenity/cafe/Dutch Bros. Coffee":{name:"Dutch Bros. Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/dutchbros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5317253",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Dutch Bros. Coffee","brand:wikidata":"Q5317253","brand:wikipedia":"en:Dutch Bros. Coffee",cuisine:"coffee_shop",name:"Dutch Bros. Coffee",takeaway:"only"},countryCodes:["us"],terms:["dutch bros","dutch brothers"],matchScore:2,suggestion:true},"amenity/cafe/Espresso House":{name:"Espresso House",icon:"maki-cafe",imageURL:"https://graph.facebook.com/196870344516819/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10489162",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Espresso House","brand:wikidata":"Q10489162","brand:wikipedia":"en:Espresso House",cuisine:"coffee_shop",name:"Espresso House",takeaway:"yes"},countryCodes:["dk","fi","no","se"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Fran's Café":{name:"Fran's Café",icon:"maki-cafe",imageURL:"https://graph.facebook.com/franscafeoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075645",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Fran's Café","brand:wikidata":"Q62075645",cuisine:"coffee_shop",name:"Fran's Café",takeaway:"yes"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Gloria Jean's":{name:"Gloria Jean's",icon:"maki-cafe",imageURL:"https://graph.facebook.com/gloriajeanscoffeesAUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2666365",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Gloria Jean's","brand:wikidata":"Q2666365","brand:wikipedia":"en:Gloria Jean's Coffees",cuisine:"coffee_shop",name:"Gloria Jean's",official_name:"Gloria Jean's Coffees",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Gong Cha (Vietnam)":{name:"Gong Cha (Vietnam)",icon:"maki-cafe",imageURL:"https://graph.facebook.com/GongChaTaiwan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5581670",amenity:"cafe"},addTags:{"alt_name:vi":"Cống Trà",amenity:"cafe",brand:"Gong Cha","brand:vi":"Gong Cha","brand:wikidata":"Q5581670","brand:wikipedia":"vi:Gong Cha","brand:zh":"貢茶",cuisine:"bubble_tea",name:"Gong Cha","name:vi":"Gong Cha","name:zh":"貢茶",takeaway:"yes"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Gong Cha (worldwide)":{name:"Gong Cha (worldwide)",icon:"maki-cafe",imageURL:"https://graph.facebook.com/GongChaTaiwan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5581670",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Gong Cha","brand:wikidata":"Q5581670","brand:wikipedia":"en:Gong Cha","brand:zh":"貢茶",cuisine:"bubble_tea",int_name:"Gong Cha",name:"Gong Cha","name:zh":"貢茶",takeaway:"yes"},countryCodes:["au","bn","ca","mm","mo","my","nz","ph","sg","us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Havanna":{name:"Havanna",icon:"maki-cafe",imageURL:"https://graph.facebook.com/havannaargentina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2900869",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Havanna","brand:wikidata":"Q2900869","brand:wikipedia":"es:Havanna",cuisine:"coffee_shop",name:"Havanna",takeaway:"yes"},countryCodes:["ar","pe"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Highlands Coffee":{name:"Highlands Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/highlandscoffeevietnam/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5759361",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Highlands Coffee","brand:wikidata":"Q5759361","brand:wikipedia":"vi:Highlands Coffee",cuisine:"coffee_shop;vietnamese",name:"Highlands Coffee","name:en":"Highlands Coffee",takeaway:"yes"},countryCodes:["vn"],terms:["highlands"],matchScore:2,suggestion:true},"amenity/cafe/Hudsons Coffee":{name:"Hudsons Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/HudsonsCoffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5929076",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Hudsons Coffee","brand:wikidata":"Q5929076","brand:wikipedia":"en:Hudsons Coffee",cuisine:"coffee_shop",name:"Hudsons Coffee",takeaway:"yes"},countryCodes:["au","sg"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Insomnia":{name:"Insomnia",icon:"maki-cafe",imageURL:"https://graph.facebook.com/InsomniaCoffeeCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6038271",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Insomnia","brand:wikidata":"Q6038271","brand:wikipedia":"en:Insomnia Coffee Company",cuisine:"coffee_shop",name:"Insomnia",takeaway:"yes"},countryCodes:["ie"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Jamaica Blue":{name:"Jamaica Blue",icon:"maki-cafe",imageURL:"https://graph.facebook.com/JamaicaBlueCafes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24965819",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Jamaica Blue","brand:wikidata":"Q24965819","brand:wikipedia":"en:Jamaica Blue",cuisine:"coffee_shop",name:"Jamaica Blue",takeaway:"yes"},countryCodes:["ae","au","cn","gb","my","nz","sg"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Joe & The Juice":{name:"Joe & The Juice",icon:"maki-cafe",imageURL:"https://graph.facebook.com/joeandthejuice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26221514",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Joe & The Juice","brand:wikidata":"Q26221514","brand:wikipedia":"en:Joe & The Juice",cuisine:"coffee_shop",name:"Joe & The Juice",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/La Colombe Coffee Roasters":{name:"La Colombe Coffee Roasters",icon:"maki-cafe",imageURL:"https://graph.facebook.com/lacolombecoffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23461663",amenity:"cafe"},addTags:{amenity:"cafe",brand:"La Colombe Coffee Roasters","brand:wikidata":"Q23461663","brand:wikipedia":"en:La Colombe Coffee Roasters",cuisine:"coffee_shop",name:"La Colombe Coffee Roasters",short_name:"La Colombe",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Le Pain Quotidien":{name:"Le Pain Quotidien",icon:"maki-cafe",imageURL:"https://graph.facebook.com/lepainquotidienusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2046903",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Le Pain Quotidien","brand:wikidata":"Q2046903","brand:wikipedia":"en:Le Pain Quotidien",cuisine:"coffee_shop",name:"Le Pain Quotidien",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Mado":{name:"Mado",icon:"maki-cafe",imageURL:"https://graph.facebook.com/MADOglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17116336",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Mado","brand:wikidata":"Q17116336","brand:wikipedia":"en:Mado (food company)",cuisine:"coffee_shop",name:"Mado",takeaway:"yes"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/McCafé":{name:"McCafé",icon:"maki-cafe",imageURL:"https://graph.facebook.com/276517512552782/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3114287",amenity:"cafe"},addTags:{amenity:"cafe",brand:"McCafé","brand:wikidata":"Q3114287","brand:wikipedia":"en:McCafé",cuisine:"coffee_shop",name:"McCafé",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Michel's Patisserie":{name:"Michel's Patisserie",icon:"maki-cafe",imageURL:"https://graph.facebook.com/MichelsCoffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6836235",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Michel's Patisserie","brand:wikidata":"Q6836235","brand:wikipedia":"en:Michel's Patisserie",cuisine:"coffee_shop",name:"Michel's Patisserie",takeaway:"yes"},countryCodes:["au","cn","id","nz"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Mikel":{name:"Mikel",icon:"maki-cafe",imageURL:"https://graph.facebook.com/MikelCoffeeCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16952021",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Mikel","brand:wikidata":"Q16952021","brand:wikipedia":"el:Mikel",cuisine:"coffee_shop",name:"Mikel",takeaway:"yes"},countryCodes:["ae","au","cy","de","eg","gb","gr","sa","us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Muffin Break":{name:"Muffin Break",icon:"maki-cafe",imageURL:"https://graph.facebook.com/MuffinBreakUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16964876",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Muffin Break","brand:wikidata":"Q16964876","brand:wikipedia":"en:Muffin Break",cuisine:"coffee_shop",name:"Muffin Break",takeaway:"yes"},countryCodes:["au","gb","in","nz"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Muzz Buzz":{name:"Muzz Buzz",icon:"maki-cafe",imageURL:"https://graph.facebook.com/MuzzBuzzAus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6944483",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Muzz Buzz","brand:wikidata":"Q6944483","brand:wikipedia":"en:Muzz Buzz",cuisine:"coffee_shop",name:"Muzz Buzz",takeaway:"yes"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Patisserie Valerie":{name:"Patisserie Valerie",icon:"maki-cafe",imageURL:"https://graph.facebook.com/patisserievalerie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22101966",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Patisserie Valerie","brand:wikidata":"Q22101966","brand:wikipedia":"en:Patisserie Valerie",cuisine:"coffee_shop",name:"Patisserie Valerie",takeaway:"yes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Peet's Coffee":{name:"Peet's Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/peets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1094101",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Peet's Coffee","brand:wikidata":"Q1094101","brand:wikipedia":"en:Peet's Coffee",cuisine:"coffee_shop",name:"Peet's Coffee",takeaway:"yes"},countryCodes:["us"],terms:["peets","peets coffee & tea"],matchScore:2,suggestion:true},"amenity/cafe/Pie Face":{name:"Pie Face",icon:"maki-cafe",imageURL:"https://graph.facebook.com/piefaceaus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18166370",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Pie Face","brand:wikidata":"Q18166370","brand:wikipedia":"en:Pie Face",cuisine:"coffee_shop",name:"Pie Face",takeaway:"yes"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Prime":{name:"Prime",icon:"maki-cafe",imageURL:"https://graph.facebook.com/PRIMENATURALFOOD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122839",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Prime","brand:wikidata":"Q62122839",cuisine:"coffee_shop",name:"Prime",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Pronto":{name:"Pronto",icon:"maki-cafe",imageURL:"https://pbs.twimg.com/profile_images/1002458417733120000/lQc9dDWQ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11336224",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Pronto","brand:wikidata":"Q11336224","brand:wikipedia":"ja:プロントコーポレーション",cuisine:"coffee_shop",name:"Pronto","name:ja":"プロント",takeaway:"yes"},countryCodes:["jp"],terms:["プロント"],matchScore:2,suggestion:true},"amenity/cafe/Pumpkin":{name:"Pumpkin",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q27825961",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Pumpkin","brand:wikidata":"Q27825961","brand:wikipedia":"en:Pumpkin Café Shop",cuisine:"coffee_shop",name:"Pumpkin",takeaway:"yes"},countryCodes:["gb"],terms:["pumpkin cafe","pumpkin cafe shop"],matchScore:2,suggestion:true},"amenity/cafe/Quickly":{name:"Quickly",icon:"maki-cafe",imageURL:"https://graph.facebook.com/quicklyphilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3771463",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Quickly","brand:en":"Quickly","brand:wikidata":"Q3771463","brand:wikipedia":"en:Quickly","brand:zh":"快可立",cuisine:"bubble_tea",name:"Quickly","name:en":"Quickly","name:zh":"快可立",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Second Cup":{name:"Second Cup",icon:"maki-cafe",imageURL:"https://graph.facebook.com/SecondCup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q862180",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Second Cup","brand:wikidata":"Q862180","brand:wikipedia":"en:Second Cup",cuisine:"coffee_shop",name:"Second Cup",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Segafredo":{name:"Segafredo",icon:"maki-cafe",imageURL:"https://graph.facebook.com/SegafredoZanettiItalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21282762",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Segafredo","brand:wikidata":"Q21282762","brand:wikipedia":"it:Segafredo Zanetti",cuisine:"coffee_shop",name:"Segafredo",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Sharetea":{name:"Sharetea",icon:"maki-cafe",imageURL:"https://graph.facebook.com/shareteaglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64827032",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Sharetea","brand:wikidata":"Q64827032",cuisine:"bubble_tea",name:"Sharetea","name:en":"Sharetea","name:zh":"歇腳亭",takeaway:"yes"},countryCodes:["au","us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Starbucks":{name:"Starbucks",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Starbucks",official_name:"Starbucks Coffee",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/The Coffee Bean & Tea Leaf":{name:"The Coffee Bean & Tea Leaf",icon:"maki-cafe",imageURL:"https://graph.facebook.com/thecoffeebean/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141384",amenity:"cafe"},addTags:{amenity:"cafe",brand:"The Coffee Bean & Tea Leaf","brand:wikidata":"Q1141384","brand:wikipedia":"en:The Coffee Bean & Tea Leaf",cuisine:"coffee_shop",name:"The Coffee Bean & Tea Leaf",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/The Coffee Club":{name:"The Coffee Club",icon:"maki-cafe",imageURL:"https://graph.facebook.com/tccau/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7726599",amenity:"cafe"},addTags:{amenity:"cafe",brand:"The Coffee Club","brand:wikidata":"Q7726599","brand:wikipedia":"en:The Coffee Club",cuisine:"coffee_shop",name:"The Coffee Club",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/The Coffee House (Vietnam)":{name:"The Coffee House (Vietnam)",icon:"maki-cafe",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FThe%20Coffee%20House%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q60775742",amenity:"cafe"},addTags:{amenity:"cafe",brand:"The Coffee House","brand:wikidata":"Q60775742","brand:wikipedia":"en:The Coffee House (coffeehouse chain)",cuisine:"coffee_shop;vietnamese",name:"The Coffee House","name:en":"The Coffee House",takeaway:"yes"},countryCodes:["vn"],terms:["coffee house"],matchScore:2,suggestion:true},"amenity/cafe/The Human Bean":{name:"The Human Bean",icon:"maki-cafe",imageURL:"https://graph.facebook.com/HumanBeanNoCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7740821",amenity:"cafe"},addTags:{amenity:"cafe",brand:"The Human Bean","brand:wikidata":"Q7740821","brand:wikipedia":"en:The Human Bean",cuisine:"coffee_shop",name:"The Human Bean",takeaway:"yes"},countryCodes:["us"],terms:["human bean"],matchScore:2,suggestion:true},"amenity/cafe/Tim Hortons":{name:"Tim Hortons",icon:"maki-cafe",imageURL:"https://graph.facebook.com/TimHortonsUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q175106",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Tim Hortons","brand:wikidata":"Q175106","brand:wikipedia":"en:Tim Hortons",cuisine:"coffee_shop",name:"Tim Hortons",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Timothy's":{name:"Timothy's",icon:"maki-cafe",imageURL:"https://graph.facebook.com/TimothysCafes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7807011",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Timothy's","brand:wikidata":"Q7807011","brand:wikipedia":"en:Timothy's World Coffee",cuisine:"coffee_shop",name:"Timothy's",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Tostao’":{name:"Tostao’",icon:"maki-cafe",imageURL:"https://graph.facebook.com/tostaocafeypan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60632476",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Tostao’","brand:wikidata":"Q60632476",cuisine:"coffee_shop",name:"Tostao’","name:es":"Tostao’",official_name:"TOSTAO’ Café & Pan",takeaway:"yes"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Traveler's Coffee":{name:"Traveler's Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/TravelersCoffeeMoscow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4051716",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Traveler's Coffee","brand:wikidata":"Q4051716","brand:wikipedia":"ru:Traveler’s Coffee",cuisine:"coffee_shop",name:"Traveler's Coffee",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Trung Nguyên Coffee":{name:"Trung Nguyên Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/trungnguyenlegend/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3541154",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Trung Nguyên","brand:wikidata":"Q3541154","brand:wikipedia":"vi:Trung Nguyên (công ty)",cuisine:"coffee_shop;vietnamese",name:"Trung Nguyên Coffee","name:en":"Trung Nguyen Coffee","name:vi":"Cà phê Trung Nguyên",takeaway:"yes"},countryCodes:["vn"],terms:["trung nguyen"],matchScore:2,suggestion:true},"amenity/cafe/Wayne's Coffee":{name:"Wayne's Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/WaynesCoffeeInternational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2637272",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Wayne's Coffee","brand:wikidata":"Q2637272","brand:wikipedia":"en:Wayne's Coffee",cuisine:"coffee_shop",name:"Wayne's Coffee",takeaway:"yes"},countryCodes:["fi","no","se"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Wild Bean Cafe":{name:"Wild Bean Cafe",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q61804826",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Wild Bean Cafe","brand:wikidata":"Q61804826",cuisine:"coffee_shop",name:"Wild Bean Cafe",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Ya Kun Kaya Toast":{name:"Ya Kun Kaya Toast",icon:"maki-cafe",imageURL:"https://graph.facebook.com/yakunkayatoastsg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8046237",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Ya Kun Kaya Toast","brand:wikidata":"Q8046237","brand:wikipedia":"en:Ya Kun Kaya Toast",cuisine:"coffee_shop",name:"Ya Kun Kaya Toast",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Zarraffa's Coffee":{name:"Zarraffa's Coffee",icon:"maki-cafe",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCffee.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q8066878",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Zarraffa's Coffee ","brand:wikidata":"Q8066878","brand:wikipedia":"en:Zarraffa's Coffee",cuisine:"coffee_shop",name:"Zarraffa's Coffee",takeaway:"yes"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Даблби":{name:"Даблби",icon:"maki-cafe",imageURL:"https://graph.facebook.com/DoubleBCoffeeTea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62501686",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Даблби","brand:en":"Double B","brand:wikidata":"Q62501686",cuisine:"coffee_shop",name:"Даблби","name:en":"Double B",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Старбакс":{name:"Старбакс",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Старбакс","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Старбакс","name:en":"Starbucks",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Шоколадница":{name:"Шоколадница",icon:"maki-cafe",imageURL:"https://graph.facebook.com/shoko.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30891188",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Шоколадница","brand:en":"Chocolate","brand:wikidata":"Q30891188","brand:wikipedia":"ru:Шоколадница (сеть кофеен)",cuisine:"coffee_shop",name:"Шоколадница","name:en":"Shokoladnitsa",takeaway:"yes"},countryCodes:["ru"],terms:["шоколад"],matchScore:2,suggestion:true},"amenity/cafe/Штолле":{name:"Штолле",icon:"maki-cafe",imageURL:"https://graph.facebook.com/stollerussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62502236",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Штолле","brand:en":"Stolle","brand:wikidata":"Q62502236",cuisine:"coffee_shop",name:"Штолле","name:en":"Stolle",takeaway:"yes"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/ארומה":{name:"ארומה",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Israel.Aroma/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2909872",amenity:"cafe"},addTags:{amenity:"cafe",brand:"ארומה","brand:en":"Aroma Espresso Bar","brand:he":"ארומה","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",cuisine:"coffee_shop",name:"ארומה","name:en":"Aroma Espresso Bar","name:he":"ארומה",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/לנדוור":{name:"לנדוור",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafelandwer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6485288",amenity:"cafe"},addTags:{amenity:"cafe",brand:"קפה לנדוור","brand:en":"Landwer Coffee","brand:he":"קפה לנדוור","brand:wikidata":"Q6485288","brand:wikipedia":"he:קפה לנדוור",cuisine:"coffee_shop",name:"לנדוור","name:en":"Landwer","name:he":"לנדוור",takeaway:"yes"},countryCodes:["il"],terms:["קפה לדנוור"],matchScore:2,suggestion:true},"amenity/cafe/סי קפה":{name:"סי קפה",icon:"maki-cafe",imageURL:"https://graph.facebook.com/242590255775924/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64606227",amenity:"cafe"},addTags:{alt_name:"סי אספרסו","alt_name:en":"Si Espresso","alt_name:he":"סי אספרסו",amenity:"cafe",brand:"סי קפה","brand:en":"Si Cafe","brand:he":"סי קפה","brand:wikidata":"Q64606227",cuisine:"coffee_shop",name:"סי קפה","name:en":"Si Cafe","name:he":"סי קפה",takeaway:"yes"},countryCodes:["il"],terms:["si cafe","si espresso"],matchScore:2,suggestion:true},"amenity/cafe/קפה ג'ו":{name:"קפה ג'ו",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafejoe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6774425",amenity:"cafe"},addTags:{alt_name:"קפה Joe",amenity:"cafe",brand:"קפה ג'ו","brand:en":"Cafe Joe","brand:he":"קפה ג'ו","brand:wikidata":"Q6774425","brand:wikipedia":"he:קפה ג'ו",cuisine:"coffee_shop",name:"קפה ג'ו","name:en":"Cafe Joe","name:he":"קפה ג'ו",takeaway:"yes"},countryCodes:["il"],terms:["ג'ו קפה"],matchScore:2,suggestion:true},"amenity/cafe/קפה גרג":{name:"קפה גרג",icon:"maki-cafe",imageURL:"https://graph.facebook.com/gregcafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q43295499",amenity:"cafe"},addTags:{amenity:"cafe",brand:"קפה גרג","brand:en":"Greg Cafe","brand:he":"קפה גרג","brand:wikidata":"Q43295499","brand:wikipedia":"he:קפה גרג",cuisine:"coffee_shop",name:"קפה גרג","name:en":"Greg Cafe","name:he":"קפה גרג",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/קפה נמרוד":{name:"קפה נמרוד",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafenimrod/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64606192",amenity:"cafe"},addTags:{amenity:"cafe",brand:"קפה נמרוד","brand:en":"Cafe Nimrod","brand:he":"קפה נמרוד","brand:wikidata":"Q64606192",cuisine:"coffee_shop",name:"קפה נמרוד","name:en":"Cafe Nimrod","name:he":"קפה נמרוד",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/קפה קפה":{name:"קפה קפה",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafe.cafe.il/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5017233",amenity:"cafe"},addTags:{amenity:"cafe",brand:"קפה קפה","brand:en":"Cafe Cafe","brand:he":"קפה קפה","brand:wikidata":"Q5017233","brand:wikipedia":"he:קפה קפה",cuisine:"coffee_shop",name:"קפה קפה","name:en":"Cafe Cafe","name:he":"קפה קפה",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/רולדין":{name:"רולדין",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q18390972",amenity:"cafe"},addTags:{amenity:"cafe",brand:"רולדין","brand:en":"Roladin","brand:he":"רולדין","brand:wikidata":"Q18390972","brand:wikipedia":"he:רולדין",cuisine:"coffee_shop",name:"רולדין","name:en":"Roladin","name:he":"רולדין",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/คาเฟ่ อเมซอน":{name:"คาเฟ่ อเมซอน",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafeamazonofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q43247503",amenity:"cafe"},addTags:{amenity:"cafe",brand:"คาเฟ่ อเมซอน","brand:en":"Café Amazon","brand:th":"คาเฟ่ อเมซอน","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",cuisine:"coffee_shop",name:"คาเฟ่ อเมซอน","name:en":"Café Amazon","name:th":"คาเฟ่ อเมซอน",takeaway:"yes"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/エクセルシオール カフェ":{name:"エクセルシオール カフェ",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q11289828",amenity:"cafe"},addTags:{amenity:"cafe",brand:"エクセルシオール カフェ","brand:en":"EXCELSIOR CAFFÉ","brand:ja":"エクセルシオール カフェ","brand:wikidata":"Q11289828","brand:wikipedia":"ja:エクセルシオール カフェ",cuisine:"coffee_shop",name:"エクセルシオール カフェ","name:ja":"エクセルシオール カフェ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/カフェ・ド・クリエ":{name:"カフェ・ド・クリエ",icon:"maki-cafe",imageURL:"https://graph.facebook.com/pokkacreate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17219077",amenity:"cafe"},addTags:{amenity:"cafe",brand:"カフェ・ド・クリエ","brand:en":"Cafe de CRIE","brand:ja":"カフェ・ド・クリエ","brand:wikidata":"Q17219077","brand:wikipedia":"ja:ポッカクリエイト",cuisine:"coffee_shop",name:"カフェ・ド・クリエ","name:en":"Cafe de CRIE","name:ja":"カフェ・ド・クリエ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/カフェ・ベローチェ":{name:"カフェ・ベローチェ",icon:"maki-cafe",imageURL:"https://graph.facebook.com/ChatnoirCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11294597",amenity:"cafe"},addTags:{amenity:"cafe",brand:"カフェ・ベローチェ","brand:en":"CAFFÈ VELOCE","brand:ja":"カフェ・ベローチェ","brand:wikidata":"Q11294597","brand:wikipedia":"ja:カフェ・ベローチェ",cuisine:"coffee_shop",name:"カフェ・ベローチェ","name:en":"CAFFÈ VELOCE","name:ja":"カフェ・ベローチェ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/コメダ珈琲店":{name:"コメダ珈琲店",icon:"maki-cafe",imageURL:"https://graph.facebook.com/komeda.coffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11302679",amenity:"cafe"},addTags:{amenity:"cafe",brand:"コメダ珈琲店","brand:en":"Komeda Coffee Shop","brand:ja":"コメダ珈琲店","brand:wikidata":"Q11302679","brand:wikipedia":"ja:コメダ",cuisine:"coffee_shop",name:"コメダ珈琲店","name:en":"Komeda Coffee Shop","name:ja":"コメダ珈琲店",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/サンマルクカフェ":{name:"サンマルクカフェ",icon:"maki-cafe",imageURL:"https://graph.facebook.com/saintmarccafephilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11305989",amenity:"cafe"},addTags:{"alt_name:en":"Saint Marc Café",amenity:"cafe",brand:"サンマルクカフェ","brand:en":"ST.MARC CAFÉ","brand:ja":"サンマルクカフェ","brand:wikidata":"Q11305989","brand:wikipedia":"ja:サンマルクホールディングス",cuisine:"coffee_shop",name:"サンマルクカフェ","name:en":"ST.MARC CAFÉ","name:ja":"サンマルクカフェ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/スターバックス":{name:"スターバックス",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"スターバックス","brand:en":"Starbucks","brand:ja":"スターバックス","brand:wikidata":"Q37158","brand:wikipedia":"ja:スターバックス",cuisine:"coffee_shop",name:"スターバックス","name:en":"Starbucks","name:ja":"スターバックス",official_name:"スターバックスコーヒー","official_name:en":"Starbucks Coffee","official_name:ja":"スターバックスコーヒー",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/タリーズコーヒー":{name:"タリーズコーヒー",icon:"maki-cafe",imageURL:"https://graph.facebook.com/TullysCoffeeShops/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3541983",amenity:"cafe"},addTags:{amenity:"cafe",brand:"タリーズコーヒー","brand:en":"Tully's Coffee","brand:ja":"タリーズコーヒー","brand:wikidata":"Q3541983","brand:wikipedia":"en:Tully's Coffee",cuisine:"coffee_shop",name:"タリーズコーヒー","name:en":"Tully's Coffee","name:ja":"タリーズコーヒー",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/ドトールコーヒーショップ":{name:"ドトールコーヒーショップ",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Fun.Doutor.Fan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11322732",amenity:"cafe"},addTags:{amenity:"cafe",brand:"ドトールコーヒーショップ","brand:en":"Doutor","brand:ja":"ドトールコーヒーショップ","brand:wikidata":"Q11322732","brand:wikipedia":"ja:ドトールコーヒーショップ",cuisine:"coffee_shop",name:"ドトールコーヒーショップ","name:en":"Doutor Coffee Shop","name:ja":"ドトールコーヒーショップ",takeaway:"yes"},countryCodes:["jp"],terms:["ドトールコーヒー"],matchScore:2,suggestion:true},"amenity/cafe/ルノアール":{name:"ルノアール",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q11649991",amenity:"cafe"},addTags:{amenity:"cafe",brand:"ルノアール","brand:en":"Renoir","brand:ja":"ルノアール","brand:wikidata":"Q11649991","brand:wikipedia":"ja:銀座ルノアール",cuisine:"coffee_shop",name:"ルノアール","name:en":"Renoir","name:ja":"ルノアール",official_name:"喫茶室ルノアール","official_name:en":"Ginza Renoir","official_name:ja":"喫茶室ルノアール",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/快可立":{name:"快可立",icon:"maki-cafe",imageURL:"https://graph.facebook.com/quicklyphilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3771463",amenity:"cafe"},addTags:{amenity:"cafe",brand:"快可立","brand:en":"Quickly","brand:wikidata":"Q3771463","brand:wikipedia":"zh:快可立","brand:zh":"快可立",cuisine:"bubble_tea",name:"快可立","name:en":"Quickly","name:zh":"快可立",takeaway:"yes"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/日出茶太":{name:"日出茶太",icon:"maki-cafe",imageURL:"https://graph.facebook.com/ChatimeCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16829306",amenity:"cafe"},addTags:{amenity:"cafe",brand:"日出茶太","brand:en":"Chatime","brand:wikidata":"Q16829306","brand:wikipedia":"zh:日出茶太","brand:zh":"日出茶太",cuisine:"bubble_tea",name:"日出茶太","name:en":"Chatime","name:zh":"日出茶太",takeaway:"yes"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/星巴克":{name:"星巴克",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"星巴克","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"zh:星巴克","brand:zh":"星巴克",cuisine:"coffee_shop",name:"星巴克","name:en":"Starbucks","name:zh":"星巴克",takeaway:"yes"},countryCodes:["cn","tw"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/珈琲館":{name:"珈琲館",icon:"maki-cafe",imageURL:"https://graph.facebook.com/kohikancorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11573290",amenity:"cafe"},addTags:{amenity:"cafe",brand:"珈琲館","brand:en":"Kohikan","brand:ja":"珈琲館","brand:wikidata":"Q11573290","brand:wikipedia":"ja:珈琲館",cuisine:"coffee_shop",name:"珈琲館","name:en":"Kohikan","name:ja":"珈琲館",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/貢茶 Gong Cha":{name:"貢茶 Gong Cha",icon:"maki-cafe",imageURL:"https://graph.facebook.com/GongChaTaiwan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5581670",amenity:"cafe"},addTags:{amenity:"cafe",brand:"貢茶 Gong Cha","brand:en":"Gong Cha","brand:wikidata":"Q5581670","brand:wikipedia":"zh:貢茶 (連鎖店)","brand:zh":"貢茶",cuisine:"bubble_tea",name:"貢茶 Gong Cha","name:en":"Gong Cha","name:zh":"貢茶",takeaway:"yes"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/貢茶 (Japan)":{name:"貢茶 (Japan)",icon:"maki-cafe",imageURL:"https://graph.facebook.com/GongChaTaiwan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5581670",amenity:"cafe"},addTags:{amenity:"cafe",brand:"貢茶","brand:ja":"貢茶","brand:wikidata":"Q5581670","brand:wikipedia":"ja:貢茶","brand:zh":"貢茶",cuisine:"bubble_tea",int_name:"Gong Cha",name:"貢茶","name:ja":"貢茶","name:zh":"貢茶",takeaway:"yes"},countryCodes:["ja"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/貢茶 (Taiwan)":{name:"貢茶 (Taiwan)",icon:"maki-cafe",imageURL:"https://graph.facebook.com/GongChaTaiwan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5581670",amenity:"cafe"},addTags:{amenity:"cafe",brand:"貢茶","brand:wikidata":"Q5581670","brand:wikipedia":"zh:貢茶 (連鎖店)",cuisine:"bubble_tea",int_name:"Gong Cha",name:"貢茶","name:zh":"貢茶",takeaway:"yes"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/贡茶 (China)":{name:"贡茶 (China)",icon:"maki-cafe",imageURL:"https://graph.facebook.com/GongChaTaiwan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5581670",amenity:"cafe"},addTags:{amenity:"cafe",brand:"贡茶","brand:wikidata":"Q5581670","brand:wikipedia":"zh:贡茶 (连锁店)","brand:zh-Hans":"贡茶","brand:zh-Hant":"貢茶",cuisine:"bubble_tea",int_name:"Gong Cha",name:"贡茶","name:zh-Hans":"贡茶","name:zh-Hant":"貢茶",takeaway:"yes"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/공차":{name:"공차",icon:"maki-cafe",imageURL:"https://graph.facebook.com/GongChaTaiwan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5581670",amenity:"cafe"},addTags:{amenity:"cafe",brand:"공차","brand:ko":"공차","brand:wikidata":"Q5581670","brand:wikipedia":"ko:공차","brand:zh":"貢茶",cuisine:"bubble_tea",int_name:"Gong Cha",name:"공차","name:ko":"공차","name:zh":"貢茶",takeaway:"yes"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/스타벅스":{name:"스타벅스",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"스타벅스","brand:en":"Starbucks","brand:ko":"스타벅스","brand:wikidata":"Q37158","brand:wikipedia":"ko:스타벅스",cuisine:"coffee_shop",name:"스타벅스","name:en":"Starbucks","name:ko":"스타벅스",takeaway:"yes"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Alamo":{name:"Alamo",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/AlamoRentACar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1429287",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Alamo","brand:wikidata":"Q1429287","brand:wikipedia":"en:Alamo Rent a Car",name:"Alamo"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Avis":{name:"Avis",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/avis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q791136",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Avis","brand:wikidata":"Q791136","brand:wikipedia":"en:Avis Car Rental",name:"Avis"},terms:["avis car rental"],matchScore:2,suggestion:true},"amenity/car_rental/Budget":{name:"Budget",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/Budget/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1001437",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Budget","brand:wikidata":"Q1001437","brand:wikipedia":"en:Budget Rent a Car",name:"Budget",official_name:"Budget Rent a Car"},terms:["budget car rental"],matchScore:2,suggestion:true},"amenity/car_rental/Dollar":{name:"Dollar",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/DollarCarRental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1235661",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Dollar","brand:wikidata":"Q1235661","brand:wikipedia":"en:Dollar Rent A Car",name:"Dollar",official_name:"Dollar Rent A Car"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Enterprise":{name:"Enterprise",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/Enterprise/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17085454",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Enterprise","brand:wikidata":"Q17085454","brand:wikipedia":"en:Enterprise Rent-A-Car",name:"Enterprise",official_name:"Enterprise Rent-A-Car"},terms:["enterprise car rental"],matchScore:2,suggestion:true},"amenity/car_rental/Europcar":{name:"Europcar",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/europcar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1376256",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Europcar","brand:wikidata":"Q1376256","brand:wikipedia":"en:Europcar",name:"Europcar"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Hertz":{name:"Hertz",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/hertz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1543874",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Hertz","brand:wikidata":"Q1543874","brand:wikipedia":"en:The Hertz Corporation",name:"Hertz"},terms:["hertz car rental"],matchScore:2,suggestion:true},"amenity/car_rental/Localiza":{name:"Localiza",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/localizahertz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10319490",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Localiza","brand:wikidata":"Q10319490","brand:wikipedia":"en:Localiza",name:"Localiza"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/National":{name:"National",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/NationalCarRental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1424142",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"National","brand:wikidata":"Q1424142","brand:wikipedia":"en:National Car Rental",name:"National",official_name:"National Car Rental"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Sixt":{name:"Sixt",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/sixt.rentacar.usa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q705664",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Sixt","brand:wikidata":"Q705664","brand:wikipedia":"en:Sixt",name:"Sixt"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Thrifty":{name:"Thrifty",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/ThriftyCarRental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2429546",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Thrifty","brand:wikidata":"Q2429546","brand:wikipedia":"en:Thrifty Car Rental",name:"Thrifty"},terms:["thrifty car rental"],matchScore:2,suggestion:true},"amenity/car_rental/オリックスレンタカー":{name:"オリックスレンタカー",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/227957351080226/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11123021",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"オリックスレンタカー","brand:en":"ORIX Car Rental","brand:ja":"オリックスレンタカー","brand:wikidata":"Q11123021","brand:wikipedia":"ja:オリックスレンタカー",name:"オリックスレンタカー","name:en":"ORIX Car Rental","name:ja":"オリックスレンタカー"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/car_rental/トヨタレンタカー":{name:"トヨタレンタカー",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/rentacarjapan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11321580",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"トヨタレンタカー","brand:en":"Toyota Rental Car","brand:ja":"トヨタレンタカー","brand:wikidata":"Q11321580","brand:wikipedia":"ja:トヨタレンタリース",name:"トヨタレンタカー","name:en":"Toyota Rental Car","name:ja":"トヨタレンタカー"},countryCodes:["jp"],terms:["トヨタレンタリース"],matchScore:2,suggestion:true},"amenity/car_rental/ニッポンレンタカー":{name:"ニッポンレンタカー",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/115494788561573/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11086533",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"ニッポンレンタカー","brand:en":"Nippon Car Rental","brand:ja":"ニッポンレンタカー","brand:wikidata":"Q11086533","brand:wikipedia":"ja:ニッポンレンタカー",name:"ニッポンレンタカー","name:en":"Nippon Car Rental","name:ja":"ニッポンレンタカー"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/car_rental/日産レンタカー":{name:"日産レンタカー",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/231926140196841/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11086838",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"日産レンタカー","brand:en":"Nissan Car Rental","brand:ja":"日産レンタカー","brand:wikidata":"Q11086838","brand:wikipedia":"ja:日産レンタカー",name:"日産レンタカー","name:en":"Nissan Car Rental","name:ja":"日産レンタカー"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/car_sharing/Bluely":{name:"Bluely",icon:"temaki-sign_and_car",imageURL:"https://graph.facebook.com/bluely.eu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16039715",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"Bluely","brand:wikidata":"Q16039715","brand:wikipedia":"fr:Bluely",name:"Bluely"},countryCodes:["fr"],terms:["station bluely"],matchScore:2,suggestion:true},"amenity/car_sharing/Enterprise Car Club":{name:"Enterprise Car Club",icon:"temaki-sign_and_car",imageURL:"https://graph.facebook.com/EnterpriseCarClub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5123055",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"Enterprise Car Club","brand:wikidata":"Q5123055","brand:wikipedia":"en:Enterprise Car Club",name:"Enterprise Car Club"},countryCodes:["gb"],terms:["city car club"],matchScore:2,suggestion:true},"amenity/car_sharing/Greenwheels":{name:"Greenwheels",icon:"temaki-sign_and_car",imageURL:"https://graph.facebook.com/Greenwheels.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q316782",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"Greenwheels","brand:wikidata":"Q316782","brand:wikipedia":"en:Greenwheels",name:"Greenwheels"},countryCodes:["de","nl"],terms:[],matchScore:2,suggestion:true},"amenity/car_sharing/Zipcar":{name:"Zipcar",icon:"temaki-sign_and_car",imageURL:"https://graph.facebook.com/zipcar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1069924",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"Zipcar","brand:wikidata":"Q1069924","brand:wikipedia":"en:Zipcar",name:"Zipcar"},terms:[],matchScore:2,suggestion:true},"amenity/car_sharing/stadtmobil":{name:"stadtmobil",icon:"temaki-sign_and_car",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FStadtmobil%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2327629",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"stadtmobil","brand:wikidata":"Q2327629","brand:wikipedia":"en:Stadtmobil",name:"stadtmobil"},countryCodes:["de"],terms:["stadtmobil carsharing-station"],matchScore:2,suggestion:true},"amenity/car_sharing/teilAuto":{name:"teilAuto",icon:"temaki-sign_and_car",imageURL:"https://graph.facebook.com/teilauto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2400658",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"teilAuto","brand:wikidata":"Q2400658","brand:wikipedia":"de:TeilAuto",name:"teilAuto"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/car_sharing/タイムズカーシェア":{name:"タイムズカーシェア",icon:"temaki-sign_and_car",imageURL:"https://graph.facebook.com/timescar.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17987881",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"タイムズカーシェア","brand:en":"Times Car Share","brand:ja":"タイムズカーシェア","brand:wikidata":"Q17987881","brand:wikipedia":"ja:タイムズカーシェア",name:"タイムズカーシェア","name:en":"Times Car Share","name:ja":"タイムズカーシェア"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/casino/Luckia":{name:"Luckia",icon:"maki-casino",imageURL:"https://pbs.twimg.com/profile_images/1186190309409148929/ySzAHaqd_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q42304308",amenity:"casino"},addTags:{amenity:"casino",brand:"Luckia","brand:wikidata":"Q42304308",name:"Luckia"},terms:[],matchScore:2,suggestion:true},"amenity/charging_station/Blink":{name:"Blink",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/blinkcharging/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q62065645",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Blink","brand:wikidata":"Q62065645",name:"Blink"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/charging_station/ChargePoint":{name:"ChargePoint",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/ChargePoint/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q5176149",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"ChargePoint","brand:wikidata":"Q5176149","brand:wikipedia":"en:ChargePoint",name:"ChargePoint"},terms:[],matchScore:2,suggestion:true},"amenity/charging_station/Chargy":{name:"Chargy",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/chargy.lu/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q62702950",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Chargy","brand:wikidata":"Q62702950","brand:wikipedia":"lb:Chargy",name:"Chargy"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"amenity/charging_station/Circuit électrique":{name:"Circuit électrique",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/lecircuitelectrique/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q24934590",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Circuit électrique","brand:en":"Electric Circuit","brand:fr":"Circuit électrique","brand:wikidata":"Q24934590","brand:wikipedia":"fr:Le Circuit électrique",name:"Circuit électrique","name:en":"Electric Circuit","name:fr":"Circuit électrique"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/charging_station/E-WALD":{name:"E-WALD",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/E.WALD.emobility/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q61804335",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"E-WALD","brand:wikidata":"Q61804335",name:"E-WALD"},countryCodes:["de"],terms:["e-wald ladestation"],matchScore:2,suggestion:true},"amenity/charging_station/Enel":{name:"Enel",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/enelsharing/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q651222",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Enel","brand:wikidata":"Q651222","brand:wikipedia":"en:Enel",name:"Enel"},countryCodes:["it"],terms:["enel - stazione di ricarica"],matchScore:2,suggestion:true},"amenity/charging_station/FLO":{name:"FLO",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/flonetwork/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q64971203",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"FLO","brand:wikidata":"Q64971203",name:"FLO"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/charging_station/InCharge":{name:"InCharge",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/InChargeSverige/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q71041027",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"InCharge","brand:wikidata":"Q71041027",name:"InCharge"},terms:["vattenfall"],matchScore:2,suggestion:true},"amenity/charging_station/Innogy":{name:"Innogy",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/innogized/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q2124721",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Innogy","brand:wikidata":"Q2124721","brand:wikipedia":"de:Innogy",name:"Innogy"},terms:["rwe"],matchScore:2,suggestion:true},"amenity/charging_station/Source London":{name:"Source London",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/SourceLondon/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q7565133",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Source London","brand:wikidata":"Q7565133","brand:wikipedia":"en:Source London",name:"Source London"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/charging_station/Tesla Supercharger":{name:"Tesla Supercharger",icon:"fas-charging-station",imageURL:"https://pbs.twimg.com/profile_images/489192650474414080/4RxZxsud_bigger.png",geometry:["point"],tags:{"brand:wikidata":"Q17089620",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Tesla Supercharger","brand:wikidata":"Q17089620","brand:wikipedia":"en:Tesla Supercharger",name:"Tesla Supercharger"},terms:[],matchScore:2,suggestion:true},"amenity/charging_station/bike-energy":{name:"bike-energy",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/bikeenergyaustria/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q67770877",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"bike-energy","brand:wikidata":"Q67770877",name:"bike-energy"},countryCodes:["at","ch","de","fr","it","lu"],terms:["bike-energy ladestation"],matchScore:2,suggestion:true},"amenity/charging_station/eVgo":{name:"eVgo",icon:"fas-charging-station",imageURL:"https://pbs.twimg.com/profile_images/1072541771777888256/E1Ma7jGm_bigger.jpg",geometry:["point"],tags:{"brand:wikidata":"Q61803820",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"eVgo","brand:wikidata":"Q61803820",name:"eVgo"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/childcare/Kids 'R' Kids":{name:"Kids 'R' Kids",icon:"fas-child",imageURL:"https://graph.facebook.com/kidsrkidscorporate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65560342",amenity:"childcare"},addTags:{after_school:"yes",amenity:"childcare",brand:"Kids 'R' Kids","brand:wikidata":"Q65560342",grades:"PK",name:"Kids 'R' Kids",nursery:"yes",official_name:"Kids 'R' Kids Learning Academies",preschool:"yes"},countryCodes:["us"],terms:["kids are kids"],matchScore:2,suggestion:true},"amenity/childcare/YMCA Child Care":{name:"YMCA Child Care",icon:"fas-child",imageURL:"https://graph.facebook.com/YMCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157169",amenity:"childcare"},addTags:{amenity:"childcare",brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",name:"YMCA Child Care"},countryCodes:["us"],terms:["ymca","ymca child care center"],matchScore:2,suggestion:true},"amenity/cinema/109シネマズ":{name:"109シネマズ",icon:"maki-cinema",imageURL:"https://graph.facebook.com/438297009664571/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10854269",amenity:"cinema"},addTags:{amenity:"cinema",brand:"109シネマズ","brand:en":"109 Cinemas","brand:ja":"109シネマズ","brand:wikidata":"Q10854269","brand:wikipedia":"ja:109シネマズ",name:"109シネマズ","name:en":"109 Cinemas","name:ja":"109シネマズ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/AMC":{name:"AMC",icon:"maki-cinema",imageURL:"https://graph.facebook.com/amctheatres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q294721",amenity:"cinema"},addTags:{amenity:"cinema",brand:"AMC","brand:wikidata":"Q294721","brand:wikipedia":"en:AMC Theatres",name:"AMC"},countryCodes:["us"],terms:["amc cinema","amc cinemas","amc theater","amc theaters","amc theatre","amc theatres"],matchScore:2,suggestion:true},"amenity/cinema/B&B Theatres":{name:"B&B Theatres",icon:"maki-cinema",imageURL:"https://pbs.twimg.com/profile_images/796752289859969025/6La-tnNc_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4833576",amenity:"cinema"},addTags:{amenity:"cinema",brand:"B&B Theatres","brand:wikidata":"Q4833576","brand:wikipedia":"en:B&B Theatres",name:"B&B Theatres",short_name:"B&B"},countryCodes:["us"],terms:["b&b theaters"],matchScore:2,suggestion:true},"amenity/cinema/CGR":{name:"CGR",icon:"maki-cinema",imageURL:"https://graph.facebook.com/CGRCinemas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2931406",amenity:"cinema"},addTags:{amenity:"cinema",brand:"CGR","brand:wikidata":"Q2931406","brand:wikipedia":"fr:Circuit Georges-Raymond",name:"CGR Cinémas"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Caribbean Cinemas":{name:"Caribbean Cinemas",icon:"maki-cinema",imageURL:"https://graph.facebook.com/caribbeancinemas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5039364",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Caribbean Cinemas","brand:wikidata":"Q5039364","brand:wikipedia":"en:Caribbean Cinemas",name:"Caribbean Cinemas"},countryCodes:["ag","do","fr","gy","kn","lc","nl","pa","tt","us"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Century Theatres":{name:"Century Theatres",icon:"maki-cinema",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCentury%20Theater.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2946307",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Century Theatres","brand:wikidata":"Q2946307","brand:wikipedia":"en:Century Theatres",name:"Century Theatres",short_name:"Century"},countryCodes:["us"],terms:["century theater","century theaters","century theatre"],matchScore:2,suggestion:true},"amenity/cinema/CineStar":{name:"CineStar",icon:"maki-cinema",imageURL:"https://graph.facebook.com/CineStarDE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q321889",amenity:"cinema"},addTags:{amenity:"cinema",brand:"CineStar","brand:wikidata":"Q321889","brand:wikipedia":"de:Cinestar",name:"CineStar"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinema City":{name:"Cinema City",icon:"maki-cinema",imageURL:"https://graph.facebook.com/CinemaCityPoland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q543651",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinema City","brand:wikidata":"Q543651","brand:wikipedia":"en:Cinema City International",name:"Cinema City"},countryCodes:["cz","hu","pl","ro"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinema NOS":{name:"Cinema NOS",icon:"maki-cinema",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLog%C3%B3tipo%20da%20NOS.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q8063259",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemas NOS","brand:wikidata":"Q8063259","brand:wikipedia":"en:NOS Audiovisuais",name:"Cinema NOS"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinemark":{name:"Cinemark",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cinemarkoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q707530",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemark","brand:wikidata":"Q707530","brand:wikipedia":"en:Cinemark Theatres",name:"Cinemark"},terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinemaxx (Europe)":{name:"Cinemaxx (Europe)",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cinemaxx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q881860",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemaxx","brand:wikidata":"Q881860","brand:wikipedia":"de:Cinemaxx",name:"Cinemaxx"},countryCodes:["de","dk"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinemaxx (Indonesia)":{name:"Cinemaxx (Indonesia)",icon:"maki-cinema",imageURL:"https://pbs.twimg.com/profile_images/1197244555726336001/2R2OJ6hQ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q19942740",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemaxx","brand:wikidata":"Q19942740","brand:wikipedia":"id:Cinemaxx",name:"Cinemaxx"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinemex":{name:"Cinemex",icon:"maki-cinema",imageURL:"https://graph.facebook.com/Cinemex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3333072",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemex","brand:wikidata":"Q3333072","brand:wikipedia":"en:Cinemex",name:"Cinemex"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cineplanet":{name:"Cineplanet",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cineplanet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5769680",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cineplanet","brand:wikidata":"Q5769680","brand:wikipedia":"es:Cineplanet",name:"Cineplanet"},countryCodes:["cl","pe"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cineplex":{name:"Cineplex",icon:"maki-cinema",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCineplex%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2972807",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cineplex","brand:wikidata":"Q2972807","brand:wikipedia":"en:Cineplex Entertainment",name:"Cineplex"},countryCodes:["ca"],terms:["cineplex cinema","cineplex cinemas","cineplex entertainment","cineplex odeon","cineplex theatre","cineplex theatres"],matchScore:2,suggestion:true},"amenity/cinema/Cineplexx":{name:"Cineplexx",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cineplexxAT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q873340",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cineplexx","brand:wikidata":"Q873340","brand:wikipedia":"en:Cineplexx Cinemas",name:"Cineplexx"},countryCodes:["at","si"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinepolis":{name:"Cinepolis",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cinepolisbrasil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5686673",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinepolis","brand:wikidata":"Q5686673","brand:wikipedia":"en:Cinépolis",name:"Cinepolis"},terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cineworld":{name:"Cineworld",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cineworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5120901",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cineworld","brand:wikidata":"Q5120901","brand:wikipedia":"en:Cineworld",name:"Cineworld"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Event":{name:"Event",icon:"maki-cinema",imageURL:"https://graph.facebook.com/EventCinemas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5416698",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Event","brand:wikidata":"Q5416698","brand:wikipedia":"en:Event Cinemas",name:"Event",official_name:"Event Cinemas"},countryCodes:["au","nz"],terms:["event cinema"],matchScore:2,suggestion:true},"amenity/cinema/Harkins Theatres":{name:"Harkins Theatres",icon:"maki-cinema",imageURL:"https://graph.facebook.com/harkinstheatres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5658199",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Harkins Theatres","brand:wikidata":"Q5658199","brand:wikipedia":"en:Harkins Theatres",name:"Harkins Theatres",short_name:"Harkins"},countryCodes:["us"],terms:["harkins theater","harkins theaters","harkins theatre"],matchScore:2,suggestion:true},"amenity/cinema/Hoyts":{name:"Hoyts",icon:"maki-cinema",imageURL:"https://graph.facebook.com/hoytsaustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5922976",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Hoyts","brand:wikidata":"Q5922976","brand:wikipedia":"en:Hoyts",name:"Hoyts"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Landmark Theatres":{name:"Landmark Theatres",icon:"maki-cinema",imageURL:"https://graph.facebook.com/LandmarkTheatres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6484805",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Landmark Theatres","brand:wikidata":"Q6484805","brand:wikipedia":"en:Landmark Theatres",name:"Landmark Theatres",short_name:"Landmark"},countryCodes:["us"],terms:["landmark theater","landmark theaters","landmark theatre"],matchScore:2,suggestion:true},"amenity/cinema/MOVIX":{name:"MOVIX",icon:"maki-cinema",geometry:["point","area"],tags:{"brand:wikidata":"Q11532184",amenity:"cinema"},addTags:{amenity:"cinema",brand:"MOVIX","brand:wikidata":"Q11532184","brand:wikipedia":"ja:松竹マルチプレックスシアターズ",name:"MOVIX",official_name:"松竹マルチプレックスシアターズ","official_name:en":"Shochiku Multiplex Theatres"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Marcus Cinema":{name:"Marcus Cinema",icon:"maki-cinema",imageURL:"https://graph.facebook.com/marcustheatres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64083352",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Marcus Cinema","brand:wikidata":"Q64083352",name:"Marcus Cinema",short_name:"Marcus"},countryCodes:["us"],terms:["marcus cinemas","marcus theater","marcus theaters","marcus theatre","marcus theatres"],matchScore:2,suggestion:true},"amenity/cinema/Movie Tavern":{name:"Movie Tavern",icon:"maki-cinema",imageURL:"https://graph.facebook.com/movietavern/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64083534",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Movie Tavern","brand:wikidata":"Q64083534",name:"Movie Tavern"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Multikino":{name:"Multikino",icon:"maki-cinema",imageURL:"https://graph.facebook.com/MultikinoPolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1144802",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Multikino","brand:wikidata":"Q1144802","brand:wikipedia":"pl:Multikino",name:"Multikino"},countryCodes:["lt","lv","pl"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Odeon":{name:"Odeon",icon:"maki-cinema",imageURL:"https://graph.facebook.com/ODEON/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6127470",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Odeon","brand:wikidata":"Q6127470","brand:wikipedia":"en:Odeon Cinemas",name:"Odeon"},countryCodes:["gb","gr","ie","it"],terms:["odeon cinema"],matchScore:2,suggestion:true},"amenity/cinema/Pathé Gaumont":{name:"Pathé Gaumont",icon:"maki-cinema",imageURL:"https://abs.twimg.com/sticky/default_profile_images/default_profile_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q3060526",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Pathé Gaumont","brand:wikidata":"Q3060526","brand:wikipedia":"fr:Les cinémas Gaumont Pathé",name:"Pathé Gaumont"},countryCodes:["be","ch","fr","nl"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Regal Cinemas":{name:"Regal Cinemas",icon:"maki-cinema",imageURL:"https://graph.facebook.com/RegalMovies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q835638",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Regal Cinemas","brand:wikidata":"Q835638","brand:wikipedia":"en:Regal Cinemas",name:"Regal Cinemas",short_name:"Regal"},countryCodes:["us"],terms:["regal cinema"],matchScore:2,suggestion:true},"amenity/cinema/Showcase Cinemas":{name:"Showcase Cinemas",icon:"maki-cinema",imageURL:"https://graph.facebook.com/ShowcaseUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7503170",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Showcase Cinemas","brand:wikidata":"Q7503170","brand:wikipedia":"en:Showcase Cinemas",name:"Showcase Cinemas",short_name:"Showcase"},countryCodes:["ar","gb","us"],terms:["showcase cinema"],matchScore:2,suggestion:true},"amenity/cinema/TOHOシネマズ":{name:"TOHOシネマズ",icon:"maki-cinema",imageURL:"https://graph.facebook.com/tohocinemasmagagine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11235261",amenity:"cinema"},addTags:{amenity:"cinema",brand:"TOHOシネマズ","brand:en":"TOHO CINEMAS","brand:ja":"TOHOシネマズ","brand:wikidata":"Q11235261","brand:wikipedia":"ja:TOHOシネマズ",name:"TOHOシネマズ","name:en":"Toho Cinemas","name:ja":"TOHOシネマズ",short_name:"TOHO"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/The Space Cinema":{name:"The Space Cinema",icon:"maki-cinema",imageURL:"https://graph.facebook.com/TheSpaceCinema/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3989406",amenity:"cinema"},addTags:{amenity:"cinema",brand:"The Space Cinema","brand:wikidata":"Q3989406","brand:wikipedia":"it:The Space Cinema",name:"The Space Cinema"},countryCodes:["it"],terms:["the space"],matchScore:2,suggestion:true},"amenity/cinema/UGC":{name:"UGC",icon:"maki-cinema",imageURL:"https://pbs.twimg.com/profile_images/966691384865558529/LlqCR8ga_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1643241",amenity:"cinema"},addTags:{amenity:"cinema",brand:"UGC","brand:wikidata":"Q1643241","brand:wikipedia":"fr:Union générale cinématographique",name:"UGC"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Vue (IrelandAndUK)":{name:"Vue (IrelandAndUK)",icon:"maki-cinema",imageURL:"https://graph.facebook.com/VueCinemas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2535134",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Vue","brand:wikidata":"Q2535134","brand:wikipedia":"en:Vue Cinemas",name:"Vue"},countryCodes:["gb","ie"],terms:["vue cinema","vue cinemas"],matchScore:2,suggestion:true},"amenity/cinema/Vue (Netherlands)":{name:"Vue (Netherlands)",icon:"maki-cinema",imageURL:"https://graph.facebook.com/vuecinemasnl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2421690",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Vue","brand:wikidata":"Q2421690","brand:wikipedia":"nl:Vue (bioscoopketen)",name:"Vue"},countryCodes:["nl"],terms:["vue cinema"],matchScore:2,suggestion:true},"amenity/cinema/イオンシネマ":{name:"イオンシネマ",icon:"maki-cinema",imageURL:"https://graph.facebook.com/aeoncinema/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17192792",amenity:"cinema"},addTags:{amenity:"cinema",brand:"イオンシネマ","brand:en":"AEON Cinema","brand:ja":"イオンシネマ","brand:wikidata":"Q17192792","brand:wikipedia":"ja:イオンエンターテイメント",name:"イオンシネマ","name:en":"AEON Cinema","name:ja":"イオンシネマ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/ユナイテッド・シネマ":{name:"ユナイテッド・シネマ",icon:"maki-cinema",imageURL:"https://graph.facebook.com/unitedcinemasgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11345629",amenity:"cinema"},addTags:{amenity:"cinema",brand:"ユナイテッド・シネマ","brand:en":"United Cinemas","brand:ja":"ユナイテッド・シネマ","brand:wikidata":"Q11345629","brand:wikipedia":"ja:ユナイテッド・シネマ",name:"ユナイテッド・シネマ","name:en":"United Cinemas","name:ja":"ユナイテッド・シネマ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/Asepeyo":{name:"Asepeyo",icon:"maki-doctor",imageURL:"https://graph.facebook.com/Asepeyo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11906879",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Asepeyo","brand:wikidata":"Q11906879","brand:wikipedia":"es:Asepeyo",healthcare:"clinic",name:"Asepeyo"},reference:{key:"amenity",value:"clinic"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/CityMD":{name:"CityMD",icon:"maki-doctor",imageURL:"https://graph.facebook.com/CityMD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22295471",amenity:"clinic"},addTags:{amenity:"clinic",brand:"CityMD","brand:wikidata":"Q22295471","brand:wikipedia":"en:CityMD",healthcare:"clinic",name:"CityMD"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/DaVita Dialysis":{name:"DaVita Dialysis",icon:"maki-doctor",imageURL:"https://graph.facebook.com/davitakidneycare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5207184",amenity:"clinic"},addTags:{amenity:"clinic",brand:"DaVita Dialysis","brand:wikidata":"Q5207184",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"DaVita Dialysis"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:["davita","davita dialysis center","davita kidney care"],matchScore:2,suggestion:true},"amenity/clinic/Dialysis Clinic":{name:"Dialysis Clinic",icon:"maki-doctor",imageURL:"https://graph.facebook.com/DialysisClinicInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5270633",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Dialysis Clinic","brand:wikidata":"Q5270633","brand:wikipedia":"en:Dialysis Clinic, Inc.",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Dialysis Clinic",short_name:"DCI"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:["dialysis clinic inc"],matchScore:2,suggestion:true},"amenity/clinic/Fresenius Kidney Care":{name:"Fresenius Kidney Care",icon:"maki-doctor",imageURL:"https://graph.facebook.com/freseniuskidneycare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q650259",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Fresenius Kidney Care","brand:wikidata":"Q650259","brand:wikipedia":"en:Fresenius Medical Care",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Fresenius Kidney Care"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/Fresenius Medical Care":{name:"Fresenius Medical Care",icon:"maki-doctor",imageURL:"https://graph.facebook.com/freseniuskidneycare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q650259",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Fresenius Medical Care","brand:wikidata":"Q650259","brand:wikipedia":"en:Fresenius Medical Care",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Fresenius Medical Care"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/Planned Parenthood":{name:"Planned Parenthood",icon:"maki-doctor",imageURL:"https://graph.facebook.com/PlannedParenthood/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2553262",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Planned Parenthood","brand:wikidata":"Q2553262","brand:wikipedia":"en:Planned Parenthood",healthcare:"counselling","healthcare:counselling":"antenatal;sexual",name:"Planned Parenthood"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/Satellite Healthcare":{name:"Satellite Healthcare",icon:"maki-doctor",imageURL:"https://graph.facebook.com/satellitehealthcare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q50039787",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Satellite Healthcare","brand:wikidata":"Q50039787",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Satellite Healthcare"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:["satellite","satellite dialysis"],matchScore:2,suggestion:true},"amenity/clinic/Terveystalo":{name:"Terveystalo",icon:"maki-doctor",imageURL:"https://graph.facebook.com/Terveystalo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11897034",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Terveystalo","brand:wikidata":"Q11897034","brand:wikipedia":"fi:Terveystalo",healthcare:"clinic",name:"Terveystalo"},reference:{key:"amenity",value:"clinic"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/VA Clinic":{name:"VA Clinic",icon:"maki-doctor",imageURL:"https://graph.facebook.com/VeteransHealth/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6580225",amenity:"clinic"},addTags:{amenity:"clinic",brand:"VA","brand:wikidata":"Q6580225","brand:wikipedia":"en:Veterans Health Administration",healthcare:"clinic","healthcare:for":"veterans",name:"VA Clinic",short_name:"VA"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:["department of veterans affairs clinic","veterans administration","veterans administration clinic","veterans affairs","veterans affairs clinic"],matchScore:2,suggestion:true},"amenity/clinic/ZoomCare":{name:"ZoomCare",icon:"maki-doctor",imageURL:"https://graph.facebook.com/ZOOMCare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64120374",amenity:"clinic"},addTags:{amenity:"clinic",brand:"ZoomCare","brand:wikidata":"Q64120374","brand:wikipedia":"en:ZoomCare",healthcare:"clinic",name:"ZoomCare",urgent_care:"yes"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Aspen Dental":{name:"Aspen Dental",icon:"maki-dentist",imageURL:"https://graph.facebook.com/AspenDental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4807808",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Aspen Dental","brand:wikidata":"Q4807808","brand:wikipedia":"en:Aspen Dental",healthcare:"dentist",name:"Aspen Dental"},reference:{key:"amenity",value:"dentist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Comfort Dental":{name:"Comfort Dental",icon:"maki-dentist",imageURL:"https://graph.facebook.com/comfortdental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22079521",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Comfort Dental","brand:wikidata":"Q22079521","brand:wikipedia":"en:Comfort Dental",healthcare:"dentist",name:"Comfort Dental"},reference:{key:"amenity",value:"dentist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Dentix":{name:"Dentix",icon:"maki-dentist",imageURL:"https://graph.facebook.com/dentixes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30505320",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Dentix","brand:wikidata":"Q30505320","brand:wikipedia":"es:Dentix",name:"Dentix"},reference:{key:"amenity",value:"dentist"},terms:[],matchScore:2,suggestion:true},"amenity/dentist/Folktandvården":{name:"Folktandvården",icon:"maki-dentist",imageURL:"https://graph.facebook.com/folktandvardenstockholm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10497476",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Folktandvården","brand:wikidata":"Q10497476","brand:wikipedia":"sv:Folktandvården",name:"Folktandvården"},reference:{key:"amenity",value:"dentist"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Kool Smiles":{name:"Kool Smiles",icon:"maki-dentist",imageURL:"https://graph.facebook.com/MyKoolSmiles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6430587",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Kool Smiles","brand:wikidata":"Q6430587","brand:wikipedia":"en:Kool Smiles",healthcare:"dentist",name:"Kool Smiles"},reference:{key:"amenity",value:"dentist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Vitaldent":{name:"Vitaldent",icon:"maki-dentist",imageURL:"https://graph.facebook.com/VitaldentEspana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5860599",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Vitaldent","brand:wikidata":"Q5860599","brand:wikipedia":"es:Vitaldent",name:"Vitaldent"},reference:{key:"amenity",value:"dentist"},countryCodes:["es","it"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Western Dental":{name:"Western Dental",icon:"maki-dentist",imageURL:"https://graph.facebook.com/WesternDental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64211989",amenity:"dentist"},addTags:{alt_name:"Western Dental & Orthodontics",amenity:"dentist",brand:"Western Dental","brand:wikidata":"Q64211989","brand:wikipedia":"en:Western Dental",healthcare:"dentist",name:"Western Dental"},reference:{key:"amenity",value:"dentist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/doctors/MinuteClinic":{name:"MinuteClinic",icon:"maki-doctor",imageURL:"https://graph.facebook.com/minuteclinic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6871141",amenity:"doctors"},addTags:{amenity:"doctors",brand:"MinuteClinic","brand:wikidata":"Q6871141","brand:wikipedia":"en:MinuteClinic",healthcare:"doctor","healthcare:speciality":"community",name:"MinuteClinic"},reference:{key:"amenity",value:"doctors"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/doctors/RediClinic":{name:"RediClinic",icon:"maki-doctor",imageURL:"https://graph.facebook.com/RediClinic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64138408",amenity:"doctors"},addTags:{amenity:"doctors",brand:"RediClinic","brand:wikidata":"Q64138408",healthcare:"doctor","healthcare:speciality":"community",name:"RediClinic"},reference:{key:"amenity",value:"doctors"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/doctors/The Little Clinic":{name:"The Little Clinic",icon:"maki-doctor",geometry:["point","area"],tags:{"brand:wikidata":"Q64138262",amenity:"doctors"},addTags:{amenity:"doctors",brand:"The Little Clinic","brand:wikidata":"Q64138262",healthcare:"doctor","healthcare:speciality":"community",name:"The Little Clinic"},reference:{key:"amenity",value:"doctors"},countryCodes:["us"],terms:["little clinic"],matchScore:2,suggestion:true},"amenity/doctors/Walgreens Healthcare Clinic":{name:"Walgreens Healthcare Clinic",icon:"maki-doctor",imageURL:"https://graph.facebook.com/walgreens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1591889",amenity:"doctors"},addTags:{amenity:"doctors",brand:"Walgreens","brand:wikidata":"Q1591889",healthcare:"doctor","healthcare:speciality":"community",name:"Walgreens Healthcare Clinic"},reference:{key:"amenity",value:"doctors"},countryCodes:["us"],terms:["healthcare clinic","takecare","takecare clinic","walgreens"],matchScore:2,suggestion:true},"amenity/fast_food/pizza/241 Pizza":{name:"241 Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/241PizzaCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4631768",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"241 Pizza","brand:wikidata":"Q4631768","brand:wikipedia":"en:241 Pizza",cuisine:"pizza",name:"241 Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/A&W (Canada)":{name:"A&W (Canada)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/405801939456462/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2818848",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q2818848","brand:wikipedia":"en:A&W (Canada)",cuisine:"burger",name:"A&W",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/A&W (USA)":{name:"A&W (USA)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/awrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q277641",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q277641","brand:wikipedia":"en:A&W Restaurants",cuisine:"burger",name:"A&W",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Andok's":{name:"Andok's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/andokslitsonmanok/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62267166",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Andok's","brand:wikidata":"Q62267166",cuisine:"chicken",name:"Andok's",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Angel's Burger":{name:"Angel's Burger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/angburgerngbayan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62267228",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Angel's Burger","brand:wikidata":"Q62267228",cuisine:"burger",name:"Angel's Burger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Arby's":{name:"Arby's",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/arbys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q630866",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Arby's","brand:wikidata":"Q630866","brand:wikipedia":"en:Arby's",cuisine:"sandwich",name:"Arby's",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ca","tr","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Arctic Circle":{name:"Arctic Circle",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ArcticCircle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4787501",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Arctic Circle","brand:wikidata":"Q4787501","brand:wikipedia":"en:Arctic Circle Restaurants",cuisine:"burger",name:"Arctic Circle",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Au Bon Pain":{name:"Au Bon Pain",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/aubonpain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4818942",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Au Bon Pain","brand:wikidata":"Q4818942","brand:wikipedia":"en:Au Bon Pain",cuisine:"sandwich",name:"Au Bon Pain",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["in","th","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Auntie Anne's":{name:"Auntie Anne's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/auntieannespretzels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4822010",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Auntie Anne's","brand:wikidata":"Q4822010","brand:wikipedia":"en:Auntie Anne's",cuisine:"pretzel",name:"Auntie Anne's",takeaway:"yes"},countryCodes:["us"],terms:["auntie annes pretzels"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Back Yard Burgers":{name:"Back Yard Burgers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/backyardburgers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2878376",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Back Yard Burgers","brand:wikidata":"Q2878376","brand:wikipedia":"en:Back Yard Burgers",cuisine:"burger",name:"Back Yard Burgers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Baja Fresh":{name:"Baja Fresh",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/bajafresh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2880019",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Baja Fresh","brand:wikidata":"Q2880019","brand:wikipedia":"en:Baja Fresh",cuisine:"mexican",name:"Baja Fresh",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Barburrito":{name:"Barburrito",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/BarburritoUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16983668",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Barburrito","brand:wikidata":"Q16983668","brand:wikipedia":"en:Barburrito",cuisine:"mexican",name:"Barburrito",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Bembos":{name:"Bembos",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/bembos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q466971",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Bembos","brand:wikidata":"Q466971","brand:wikipedia":"en:Bembos",cuisine:"burger",name:"Bembos",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Big Fernand":{name:"Big Fernand",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/bigfernand/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19521346",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Big Fernand","brand:wikidata":"Q19521346","brand:wikipedia":"fr:Big Fernand",cuisine:"burger",name:"Big Fernand",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ae","fr","lu"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Biscuitville":{name:"Biscuitville",icon:"maki-fast-food",geometry:["point","area"],tags:{"brand:wikidata":"Q4917274",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Biscuitville","brand:wikidata":"Q4917274","brand:wikipedia":"en:Biscuitville",cuisine:"american;breakfast",name:"Biscuitville",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Blackjack Pizza":{name:"Blackjack Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/BlackjackPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4923061",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Blackjack Pizza","brand:wikidata":"Q4923061","brand:wikipedia":"en:Blackjack Pizza",cuisine:"pizza",name:"Blackjack Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Blimpie":{name:"Blimpie",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/Blimpie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4926479",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Blimpie","brand:wikidata":"Q4926479","brand:wikipedia":"en:Blimpie",cuisine:"sandwich",name:"Blimpie",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Bob's":{name:"Bob's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/bobsbrasil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1392113",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Bob's","brand:wikidata":"Q1392113","brand:wikipedia":"en:Bob's",cuisine:"burger",name:"Bob's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ao","br","cl","pt"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Bojangles'":{name:"Bojangles'",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/Bojangles1977/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q891163",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Bojangles'","brand:wikidata":"Q891163","brand:wikipedia":"en:Bojangles' Famous Chicken 'n Biscuits",cuisine:"chicken",name:"Bojangles'",official_name:"Bojangles' Famous Chicken 'n Biscuits",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Booster Juice":{name:"Booster Juice",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/boosterjuice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4943796",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Booster Juice","brand:wikidata":"Q4943796","brand:wikipedia":"en:Booster Juice",cuisine:"juice",name:"Booster Juice",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Boston Market":{name:"Boston Market",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/BostonMarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q603617",amenity:"fast_food",cuisine:"american;chicken"},addTags:{amenity:"fast_food",brand:"Boston Market","brand:wikidata":"Q603617","brand:wikipedia":"en:Boston Market",cuisine:"american;chicken",name:"Boston Market",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ice_cream/Braum's":{name:"Braum's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/BraumsIceCreamandDairyStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4958263",amenity:"fast_food",cuisine:"ice_cream"},addTags:{amenity:"fast_food",brand:"Braum's","brand:wikidata":"Q4958263","brand:wikipedia":"en:Braum's",cuisine:"ice_cream",name:"Braum's",shop:"dairy",takeaway:"yes"},reference:{key:"cuisine",value:"ice_cream"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Bruegger's Bagels":{name:"Bruegger's Bagels",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Brueggers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4978656",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Bruegger's Bagels","brand:wikidata":"Q4978656","brand:wikipedia":"en:Bruegger's",cuisine:"bagel",name:"Bruegger's Bagels",short_name:"Bruegger's",takeaway:"yes"},countryCodes:["us"],terms:["breuger's","breugger's","bruger's","brugger's"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Burger Fuel":{name:"Burger Fuel",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1036730886979387392/F36y-pRf_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4998537",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Burger Fuel","brand:wikidata":"Q4998537","brand:wikipedia":"en:Burger Fuel",cuisine:"burger",name:"Burger Fuel",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ae","iq","nz","sa","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Burger King":{name:"Burger King",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBurger%20King%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q177054",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Burger King","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Burger King",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:["burguer king"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Burger Machine":{name:"Burger Machine",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/burgermachineofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4998549",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Burger Machine","brand:wikidata":"Q4998549","brand:wikipedia":"en:Burger Machine",cuisine:"burger",name:"Burger Machine",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/BurgerFi":{name:"BurgerFi",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/BurgerFi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q39045496",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"BurgerFi","brand:wikidata":"Q39045496","brand:wikipedia":"en:BurgerFi",cuisine:"burger",name:"BurgerFi",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Burgerim":{name:"Burgerim",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/iBurgerim/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760354",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Burgerim","brand:en":"Burgerim","brand:he":"בורגרים","brand:wikidata":"Q64760354",cuisine:"burger",name:"Burgerim","name:en":"Burgerim","name:he":"בורגרים",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Burgers Bar":{name:"Burgers Bar",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/BurgersBarIL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760337",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Burgers Bar","brand:en":"Burgers Bar","brand:he":"בורגרס בר","brand:wikidata":"Q64760337",cuisine:"burger","diet:kosher":"yes",name:"Burgers Bar","name:en":"Burgers Bar","name:he":"בורגרס בר",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Burgerville":{name:"Burgerville",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/burgerville/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4998570",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Burgerville","brand:wikidata":"Q4998570","brand:wikipedia":"en:Burgerville",cuisine:"burger",name:"Burgerville",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/California Fish Grill":{name:"California Fish Grill",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/CaliforniaFishGrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55606435",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"California Fish Grill","brand:wikidata":"Q55606435","brand:wikipedia":"en:California Fish Grill",cuisine:"seafood",name:"California Fish Grill",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Captain D's":{name:"Captain D's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/CaptainDs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5036616",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Captain D's","brand:wikidata":"Q5036616","brand:wikipedia":"en:Captain D's",cuisine:"seafood",name:"Captain D's",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Carl's Jr.":{name:"Carl's Jr.",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/carlsjr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1043486",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Carl's Jr.","brand:wikidata":"Q1043486","brand:wikipedia":"en:Carl's Jr.",cuisine:"burger",name:"Carl's Jr.",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Charleys Philly Steaks":{name:"Charleys Philly Steaks",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/CharleysPhillySteaks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1066777",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Charleys Philly Steaks","brand:wikidata":"Q1066777","brand:wikipedia":"en:Charleys Philly Steaks",cuisine:"sandwich",name:"Charleys Philly Steaks",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:["charleys"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Checkers":{name:"Checkers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/checkersrallys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63919315",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Checkers","brand:wikidata":"Q63919315",cuisine:"burger",name:"Checkers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Chester's":{name:"Chester's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/ChestersIntl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5093401",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Chester's","brand:wikidata":"Q5093401","brand:wikipedia":"en:Chester's International",cuisine:"chicken",name:"Chester's",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:["chesters chicken"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Chick-fil-A":{name:"Chick-fil-A",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/ChickfilA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q491516",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Chick-fil-A","brand:wikidata":"Q491516","brand:wikipedia":"en:Chick-fil-A",cuisine:"chicken",name:"Chick-fil-A",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Chicken Express":{name:"Chicken Express",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/chickenexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5096235",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Chicken Express","brand:wikidata":"Q5096235","brand:wikipedia":"en:Chicken Express",cuisine:"chicken",name:"Chicken Express",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Chicken Treat":{name:"Chicken Treat",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/ChickenTreat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5096274",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Chicken Treat","brand:wikidata":"Q5096274","brand:wikipedia":"en:Chicken Treat",cuisine:"chicken",name:"Chicken Treat",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/China Wok":{name:"China Wok",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ChinaWokPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5766542",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"China Wok","brand:wikidata":"Q5766542","brand:wikipedia":"es:China Wok",cuisine:"chinese",name:"China Wok",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Chipotle":{name:"Chipotle",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/chipotle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q465751",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Chipotle","brand:wikidata":"Q465751","brand:wikipedia":"en:Chipotle Mexican Grill",cuisine:"mexican",name:"Chipotle",official_name:"Chipotle Mexican Grill",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Chopt":{name:"Chopt",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/choptsalad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17509305",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Chopt","brand:wikidata":"Q17509305","brand:wikipedia":"en:Chopt",cuisine:"salad",name:"Chopt",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Chowking":{name:"Chowking",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/chowkingph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1076816",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Chowking","brand:wikidata":"Q1076816","brand:wikipedia":"en:Chowking",cuisine:"asian",name:"Chowking",takeaway:"yes"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Church's Chicken":{name:"Church's Chicken",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/churchschicken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1089932",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Church's Chicken","brand:wikidata":"Q1089932","brand:wikipedia":"en:Church's Chicken",cuisine:"chicken",name:"Church's Chicken",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Cinnabon":{name:"Cinnabon",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Cinnabon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1092539",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Cinnabon","brand:wikidata":"Q1092539","brand:wikipedia":"en:Cinnabon",cuisine:"dessert",name:"Cinnabon",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/CoCo壱番屋":{name:"CoCo壱番屋",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/cocoichicurry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5986105",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"CoCo壱番屋","brand:en":"CoCo Ichibanya","brand:ja":"CoCo壱番屋","brand:wikidata":"Q5986105","brand:wikipedia":"en:Ichibanya",cuisine:"japanese",name:"CoCo壱番屋","name:en":"CoCo Ichibanya","name:ja":"CoCo壱番屋",takeaway:"yes"},countryCodes:["cn","jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Cook Out":{name:"Cook Out",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/CookOut/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5166992",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Cook Out","brand:wikidata":"Q5166992","brand:wikipedia":"en:Cook Out (restaurant)",cuisine:"american",name:"Cook Out",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Così":{name:"Così",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/getcosi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5175243",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Così","brand:wikidata":"Q5175243","brand:wikipedia":"en:Così (restaurant)",cuisine:"sandwich",name:"Così",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Cultures":{name:"Cultures",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/culturesrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64876898",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Cultures","brand:wikidata":"Q64876898",cuisine:"sandwich",name:"Cultures",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Culver's":{name:"Culver's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/culvers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1143589",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Culver's","brand:wikidata":"Q1143589","brand:wikipedia":"en:Culver's",cuisine:"burger",name:"Culver's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ice_cream/DQ Grill & Chill":{name:"DQ Grill & Chill",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/dairyqueen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141226",amenity:"fast_food",cuisine:"ice_cream;burger"},addTags:{amenity:"fast_food",brand:"DQ Grill & Chill","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream;burger",name:"DQ Grill & Chill",takeaway:"yes"},reference:{key:"cuisine",value:"ice_cream"},countryCodes:["ca","us"],terms:["dairy queen chill & grill"],matchScore:2,suggestion:true},"amenity/fast_food/ice_cream/Dairy Queen":{name:"Dairy Queen",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/dairyqueen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141226",amenity:"fast_food",cuisine:"ice_cream;burger"},addTags:{amenity:"fast_food",brand:"Dairy Queen","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream;burger",name:"Dairy Queen",takeaway:"yes"},reference:{key:"cuisine",value:"ice_cream"},terms:["dq"],matchScore:2,suggestion:true},"amenity/fast_food/donut/Daylight Donuts":{name:"Daylight Donuts",icon:"temaki-donut",imageURL:"https://graph.facebook.com/DaylightDonutFlourCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48970508",amenity:"fast_food",cuisine:"donut"},addTags:{amenity:"fast_food",brand:"Daylight Donuts","brand:wikidata":"Q48970508","brand:wikipedia":"en:Daylight Donuts",cuisine:"donut",name:"Daylight Donuts",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Debonairs Pizza":{name:"Debonairs Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/DebonairsPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65079407",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Debonairs Pizza","brand:wikidata":"Q65079407","brand:wikipedia":"en:Debonairs Pizza",cuisine:"pizza",name:"Debonairs Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ae","bw","ke","ls","mu","mw","mz","na","ng","sd","ss","sz","za","zm"],terms:["debonairs"],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Del Taco":{name:"Del Taco",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/deltaco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1183818",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Del Taco","brand:wikidata":"Q1183818","brand:wikipedia":"en:Del Taco",cuisine:"mexican",name:"Del Taco",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Dig Inn":{name:"Dig Inn",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/diginnmarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28226241",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Dig Inn","brand:wikidata":"Q28226241","brand:wikipedia":"en:Dig Inn",cuisine:"regional",name:"Dig Inn",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Domino's":{name:"Domino's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Dominos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q839466",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Domino's","brand:wikidata":"Q839466","brand:wikipedia":"en:Domino's Pizza",cuisine:"pizza",name:"Domino's",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["dominos pizza"],matchScore:2,suggestion:true},"amenity/fast_food/donut/Donut King":{name:"Donut King",icon:"temaki-donut",imageURL:"https://graph.facebook.com/DonutKing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5296921",amenity:"fast_food",cuisine:"donut;coffee_shop"},addTags:{amenity:"fast_food",brand:"Donut King","brand:wikidata":"Q5296921","brand:wikipedia":"en:Donut King",cuisine:"donut;coffee_shop",name:"Donut King",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/donut/Dunkin' Donuts":{name:"Dunkin' Donuts",icon:"temaki-donut",imageURL:"https://graph.facebook.com/DunkinUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q847743",amenity:"fast_food",cuisine:"donut;coffee_shop"},addTags:{amenity:"fast_food",brand:"Dunkin' Donuts","brand:wikidata":"Q847743","brand:wikipedia":"en:Dunkin' Donuts",cuisine:"donut;coffee_shop",name:"Dunkin' Donuts",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},terms:["dunkin doughnuts"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/EAT.":{name:"EAT.",icon:"temaki-sandwich",imageURL:"https://pbs.twimg.com/profile_images/1169156289248862209/hO6pPROJ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5331219",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"EAT.","brand:wikidata":"Q5331219","brand:wikipedia":"en:Eat (restaurant)",cuisine:"sandwich",name:"EAT.",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Einstein Bros. Bagels":{name:"Einstein Bros. Bagels",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/einsteinbros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5349788",amenity:"fast_food"},addTags:{alt_name:"Einstein Brothers Bagels",amenity:"fast_food",brand:"Einstein Bros. Bagels","brand:wikidata":"Q5349788","brand:wikipedia":"en:Einstein Bros. Bagels",cuisine:"bagel",name:"Einstein Bros. Bagels",takeaway:"yes"},countryCodes:["us"],terms:["einstein bros","einstein brothers"],matchScore:2,suggestion:true},"amenity/fast_food/mexican/El Pollo Loco":{name:"El Pollo Loco",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/ElPolloLoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2353849",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"El Pollo Loco","brand:wikidata":"Q2353849","brand:wikipedia":"en:El Pollo Loco",cuisine:"mexican",name:"El Pollo Loco",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Elevation Burger":{name:"Elevation Burger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/elevationburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15291092",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Elevation Burger","brand:wikidata":"Q15291092","brand:wikipedia":"en:Elevation Burger",cuisine:"burger",name:"Elevation Burger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["bh","kw","qa","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Es Teler 77":{name:"Es Teler 77",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/esteler77/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5396630",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Es Teler 77","brand:wikidata":"Q5396630",cuisine:"indonesian",name:"Es Teler 77",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Everest":{name:"Everest",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/everest.gr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273299",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Everest","brand:wikidata":"Q62273299",cuisine:"burger",name:"Everest",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Extreme Pita":{name:"Extreme Pita",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/TheExtremePita/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5422367",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Extreme Pita","brand:wikidata":"Q5422367","brand:wikipedia":"en:Extreme Pita",cuisine:"pita",name:"Extreme Pita",takeaway:"yes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Extreme Pizza":{name:"Extreme Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/ExtremePizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5422364",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Extreme Pizza","brand:wikidata":"Q5422364","brand:wikipedia":"en:Extreme Pizza",cuisine:"pizza",name:"Extreme Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Fazoli's":{name:"Fazoli's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Fazolis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1399195",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Fazoli's","brand:wikidata":"Q1399195","brand:wikipedia":"en:Fazoli's",cuisine:"italian",name:"Fazoli's",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Figaro's Pizza":{name:"Figaro's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/figarospizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48802600",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Figaro's Pizza","brand:wikidata":"Q48802600","brand:wikipedia":"en:Figaro's Pizza",cuisine:"pizza",name:"Figaro's Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Firehouse Subs":{name:"Firehouse Subs",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/firehousesubs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5451873",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Firehouse Subs","brand:wikidata":"Q5451873","brand:wikipedia":"en:Firehouse Subs",cuisine:"sandwich",name:"Firehouse Subs",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Five Guys":{name:"Five Guys",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/fiveguys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1131810",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Five Guys","brand:wikidata":"Q1131810","brand:wikipedia":"en:Five Guys",cuisine:"burger",name:"Five Guys",official_name:"Five Guys Burgers and Fries",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ice_cream/Freddy's":{name:"Freddy's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/FreddysUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5496837",amenity:"fast_food",cuisine:"ice_cream;burger"},addTags:{amenity:"fast_food",brand:"Freddy's","brand:wikidata":"Q5496837","brand:wikipedia":"en:Freddy's Frozen Custard & Steakburgers",cuisine:"ice_cream;burger",name:"Freddy's",official_name:"Freddys Frozen Custard & Steakburgers",takeaway:"yes"},reference:{key:"cuisine",value:"ice_cream"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Freebirds":{name:"Freebirds",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/freebirdsworldburrito/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5500367",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Freebirds","brand:wikidata":"Q5500367","brand:wikipedia":"en:Freebirds World Burrito",cuisine:"mexican",name:"Freebirds",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Freshslice Pizza":{name:"Freshslice Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Freshslice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5503082",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Freshslice Pizza","brand:wikidata":"Q5503082","brand:wikipedia":"en:Freshslice Pizza",cuisine:"pizza",name:"Freshslice Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Gabriel Pizza":{name:"Gabriel Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/gabrielpizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5515791",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Gabriel Pizza","brand:wikidata":"Q5515791","brand:wikipedia":"en:Gabriel Pizza",cuisine:"pizza",name:"Gabriel Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Gino's Pizza":{name:"Gino's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://pbs.twimg.com/profile_images/1240550288/TwitterProfile_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5563205",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Gino's Pizza","brand:wikidata":"Q5563205","brand:wikipedia":"en:Gino's Pizza and Spaghetti",cuisine:"pizza",name:"Gino's Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Gold Star Chili":{name:"Gold Star Chili",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/goldstarchili/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16994254",amenity:"fast_food"},addTags:{alt_name:"Gold Star",amenity:"fast_food",brand:"Gold Star Chili","brand:wikidata":"Q16994254","brand:wikipedia":"en:Gold Star Chili",cuisine:"chili",name:"Gold Star Chili",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Golden Chick":{name:"Golden Chick",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/GoldenChick/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3772930",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Golden Chick","brand:wikidata":"Q3772930","brand:wikipedia":"en:Golden Chick",cuisine:"chicken",name:"Golden Chick",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Golden Krust Caribbean Bakery & Grill":{name:"Golden Krust Caribbean Bakery & Grill",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/GoldenKrust/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5579615",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Golden Krust Caribbean Bakery & Grill","brand:wikidata":"Q5579615","brand:wikipedia":"en:Golden Krust Caribbean Bakery & Grill",cuisine:"caribbean",name:"Golden Krust",takeaway:"yes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Good Times":{name:"Good Times",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/culvers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1143589",amenity:"fast_food",cuisine:"burger;ice_cream"},addTags:{amenity:"fast_food",brand:"Good Times","brand:wikidata":"Q1143589","brand:wikipedia":"en:Good Times Burgers & Frozen Custard",cuisine:"burger;ice_cream",name:"Good Times",official_name:"Good Times Burgers & Frozen Custard",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Great American Cookies":{name:"Great American Cookies",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/greatamericancookies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5598629",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Great American Cookies","brand:wikidata":"Q5598629","brand:wikipedia":"en:Great American Cookies",cuisine:"cookies",name:"Great American Cookies",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Greenwich":{name:"Greenwich",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/GreenwichPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2691308",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Greenwich","brand:wikidata":"Q2691308","brand:wikipedia":"en:Greenwich Pizza",cuisine:"pizza",name:"Greenwich",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Greggs":{name:"Greggs",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/greggsofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3403981",amenity:"fast_food",cuisine:"sandwich;bakery"},addTags:{amenity:"fast_food",brand:"Greggs","brand:wikidata":"Q3403981","brand:wikipedia":"en:Greggs",cuisine:"sandwich;bakery",name:"Greggs",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Grill'd":{name:"Grill'd",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/GrilldBurgers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18165852",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Grill'd","brand:wikidata":"Q18165852","brand:wikipedia":"en:Grill'd",cuisine:"burger",name:"Grill'd",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Habib's":{name:"Habib's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/habibsoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2504930",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Habib's","brand:wikidata":"Q2504930","brand:wikipedia":"en:Habib's",cuisine:"middle_eastern",name:"Habib's",takeaway:"yes"},countryCodes:["br","mx"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Hallo Pizza":{name:"Hallo Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Hallo.Pizza.Deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1571798",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Hallo Pizza","brand:wikidata":"Q1571798","brand:wikipedia":"de:Hallo Pizza",cuisine:"pizza",name:"Hallo Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Hardee's":{name:"Hardee's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hardees/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1585088",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Hardee's","brand:wikidata":"Q1585088","brand:wikipedia":"en:Hardee's",cuisine:"burger",name:"Hardee's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/fish_and_chips/Harry Ramsden's":{name:"Harry Ramsden's",icon:"fas-fish",imageURL:"https://graph.facebook.com/harryramsdensuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5671849",amenity:"fast_food",cuisine:"fish_and_chips"},addTags:{amenity:"fast_food",brand:"Harry Ramsden's","brand:wikidata":"Q5671849","brand:wikipedia":"en:Harry Ramsden's",cuisine:"fish_and_chips",name:"Harry Ramsden's",takeaway:"yes"},reference:{key:"cuisine",value:"fish_and_chips"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Harvey's":{name:"Harvey's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/HarveysCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1466184",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Harvey's","brand:wikidata":"Q1466184","brand:wikipedia":"en:Harvey's",cuisine:"burger",name:"Harvey's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Herfy":{name:"Herfy",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/herfyfscksa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5738371",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Herfy","brand:ar":"هرفي","brand:en":"Herfy","brand:wikidata":"Q5738371","brand:wikipedia":"en:Herfy",cuisine:"burger",name:"Herfy","name:ar":"هرفي","name:en":"Herfy",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ae","bd","bh","kw","sa"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Hero Certified Burgers":{name:"Hero Certified Burgers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/HeroBurgers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5742641",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Hero Certified Burgers","brand:wikidata":"Q5742641","brand:wikipedia":"en:Hero Certified Burgers",cuisine:"burger",name:"Hero Certified Burgers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Hesburger":{name:"Hesburger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hesburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1276832",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Hesburger","brand:wikidata":"Q1276832","brand:wikipedia":"en:Hesburger",cuisine:"burger",name:"Hesburger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Honey Baked Ham":{name:"Honey Baked Ham",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/HoneyBaked/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5893363",amenity:"fast_food"},addTags:{alt_name:"HoneyBaked Ham",amenity:"fast_food",brand:"Honey Baked Ham","brand:wikidata":"Q5893363","brand:wikipedia":"en:The Honey Baked Ham Company",cuisine:"american",name:"Honey Baked Ham",official_name:"The Honey Baked Ham Company",takeaway:"yes"},countryCodes:["us"],terms:["honey baked ham company"],matchScore:2,suggestion:true},"amenity/fast_food/hot_dog/Hot Dog on a Stick":{name:"Hot Dog on a Stick",icon:"fas-hotdog",imageURL:"https://graph.facebook.com/HotDogonaStick/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5909922",amenity:"fast_food",cuisine:"hot_dog"},addTags:{amenity:"fast_food",brand:"Hot Dog on a Stick","brand:wikidata":"Q5909922","brand:wikipedia":"en:Hot Dog on a Stick",cuisine:"hot_dog",name:"Hot Dog on a Stick",takeaway:"yes"},reference:{key:"cuisine",value:"hot_dog"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Hot Head Burritos":{name:"Hot Head Burritos",icon:"fas-pepper-hot",imageURL:"https://pbs.twimg.com/profile_images/956274820035022853/SBuliAdo_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5910008",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Hot Head Burritos","brand:wikidata":"Q5910008","brand:wikipedia":"en:Hot Head Burritos",cuisine:"mexican",name:"Hot Head Burritos",short_name:"Hot Head",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/HuHot":{name:"HuHot",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/huhot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5924606",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"HuHot","brand:wikidata":"Q5924606","brand:wikipedia":"en:HuHot Mongolian Grill",cuisine:"bbq",name:"HuHot",official_name:"HuHot Mongolian Grill",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Hungry Howie's":{name:"Hungry Howie's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/hungryhowies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16985303",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Hungry Howie's","brand:wikidata":"Q16985303","brand:wikipedia":"en:Hungry Howie's Pizza",cuisine:"pizza",name:"Hungry Howie's",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:["hungry howies pizza"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Hungry Jacks":{name:"Hungry Jacks",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/HungryJacks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3036373",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Hungry Jacks","brand:wikidata":"Q3036373","brand:wikipedia":"en:Hungry Jack's",cuisine:"burger",name:"Hungry Jacks",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/IKEA Restaurant":{name:"IKEA Restaurant",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/IKEA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q54078",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"IKEA","brand:wikidata":"Q54078","brand:wikipedia":"en:IKEA",cuisine:"swedish",name:"IKEA Restaurant",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Imo's Pizza":{name:"Imo's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/imospizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6005623",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Imo's Pizza","brand:wikidata":"Q6005623","brand:wikipedia":"en:Imo's Pizza",cuisine:"pizza",name:"Imo's Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/In-N-Out Burger":{name:"In-N-Out Burger",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FInNOut.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1205312",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"In-N-Out Burger","brand:wikidata":"Q1205312","brand:wikipedia":"en:In-N-Out Burger",cuisine:"burger",name:"In-N-Out Burger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Jack in the Box":{name:"Jack in the Box",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/jackinthebox/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1538507",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Jack in the Box","brand:wikidata":"Q1538507","brand:wikipedia":"en:Jack in the Box",cuisine:"burger",name:"Jack in the Box",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Jamba Juice":{name:"Jamba Juice",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/jambajuice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3088784",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Jamba Juice","brand:wikidata":"Q3088784","brand:wikipedia":"en:Jamba Juice",cuisine:"juice",name:"Jamba Juice",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Jersey Mike's Subs":{name:"Jersey Mike's Subs",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/jerseymikes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6184897",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Jersey Mike's Subs","brand:wikidata":"Q6184897","brand:wikipedia":"en:Jersey Mike's Subs",cuisine:"sandwich",name:"Jersey Mike's Subs",short_name:"Jersey Mike's",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Jimmy John's":{name:"Jimmy John's",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/jimmyjohns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1689380",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Jimmy John's","brand:wikidata":"Q1689380","brand:wikipedia":"en:Jimmy John's",cuisine:"sandwich",name:"Jimmy John's",official_name:"Jimmy John's Gourmet Sandwiches",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Jimmy the Greek":{name:"Jimmy the Greek",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/gimmejimmy.jtg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17077817",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Jimmy the Greek","brand:wikidata":"Q17077817","brand:wikipedia":"en:Jimmy the Greek (restaurant)",cuisine:"greek",name:"Jimmy the Greek",takeaway:"yes"},countryCodes:["ae","ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Jollibee":{name:"Jollibee",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/JollibeePhilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37614",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Jollibee","brand:wikidata":"Q37614","brand:wikipedia":"en:Jollibee",cuisine:"burger",name:"Jollibee",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Just Salad":{name:"Just Salad",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/justsalad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23091823",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Just Salad","brand:wikidata":"Q23091823","brand:wikipedia":"en:Just Salad",cuisine:"salad",name:"Just Salad",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/KFC":{name:"KFC",icon:"fas-drumstick-bite",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKFC%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q524757",amenity:"fast_food",cuisine:"chicken"},addTags:{alt_name:"Kentucky Fried Chicken",amenity:"fast_food",brand:"KFC","brand:wikidata":"Q524757","brand:wikipedia":"en:KFC",cuisine:"chicken",name:"KFC",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Kernels Popcorn":{name:"Kernels Popcorn",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/kernelspopcorn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64876684",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Kernels Popcorn","brand:wikidata":"Q64876684",cuisine:"popcorn",name:"Kernels Popcorn",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Kochlöffel":{name:"Kochlöffel",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Kochloeffel.Deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q315539",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Kochlöffel","brand:wikidata":"Q315539","brand:wikipedia":"en:Kochlöffel",cuisine:"burger",name:"Kochlöffel",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["de","tr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Kotipizza":{name:"Kotipizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/kotipizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1628625",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Kotipizza","brand:wikidata":"Q1628625","brand:wikipedia":"en:Kotipizza",cuisine:"pizza",name:"Kotipizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/donut/Krispy Kreme":{name:"Krispy Kreme",icon:"temaki-donut",imageURL:"https://graph.facebook.com/KrispyKreme/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1192805",amenity:"fast_food",cuisine:"donut"},addTags:{amenity:"fast_food",brand:"Krispy Kreme","brand:wikidata":"Q1192805","brand:wikipedia":"en:Krispy Kreme",cuisine:"donut",name:"Krispy Kreme",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},terms:["krispy kreme doughnuts"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Krispy Krunchy Chicken":{name:"Krispy Krunchy Chicken",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/Krispy.Krunchy.Foods.LLC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65087447",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Krispy Krunchy Chicken","brand:wikidata":"Q65087447","brand:wikipedia":"en:Krispy Krunchy Chicken",cuisine:"chicken",name:"Krispy Krunchy Chicken",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["mx","us"],terms:["crispy crunchy chicken"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Krystal":{name:"Krystal",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Krystal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q472195",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Krystal","brand:wikidata":"Q472195","brand:wikipedia":"en:Krystal (restaurant)",cuisine:"burger",name:"Krystal",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Kudu":{name:"Kudu",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/KuduRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6441777",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Kudu","brand:wikidata":"Q6441777","brand:wikipedia":"en:Kudu (restaurant)",cuisine:"sandwich",name:"Kudu",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["bh","jo","sa"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/L&L Drive-Inn (Hawaii)":{name:"L&L Drive-Inn (Hawaii)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hawaiianbarbecue/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6455441",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"L&L Drive-Inn","brand:wikidata":"Q6455441","brand:wikipedia":"en:L&L Hawaiian Barbecue",cuisine:"hawaiian",name:"L&L Drive-Inn",takeaway:"yes"},countryCodes:["us"],terms:["l&l","l&l drive-in"],matchScore:2,suggestion:true},"amenity/fast_food/L&L Hawaiian Barbecue":{name:"L&L Hawaiian Barbecue",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hawaiianbarbecue/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6455441",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"L&L Hawaiian Barbecue","brand:wikidata":"Q6455441","brand:wikipedia":"en:L&L Hawaiian Barbecue",cuisine:"hawaiian",name:"L&L Hawaiian Barbecue",takeaway:"yes"},countryCodes:["us"],terms:["l&l","l&l hawaiian bbq"],matchScore:2,suggestion:true},"amenity/fast_food/LEON":{name:"LEON",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1166629678184054784/oDbvI41-_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6524851",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"LEON","brand:wikidata":"Q6524851","brand:wikipedia":"en:Leon Restaurants",name:"LEON",takeaway:"yes"},countryCodes:["ch","gb","ie","nl","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/La Belle Province":{name:"La Belle Province",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/restolbp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3206579",amenity:"fast_food",cuisine:"burger;sandwich"},addTags:{amenity:"fast_food",brand:"La Belle Province","brand:wikidata":"Q3206579","brand:wikipedia":"fr:La Belle Province (restaurant)",cuisine:"burger;sandwich",name:"La Belle Province",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/La Salsa":{name:"La Salsa",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/lasalsa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48835190",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"La Salsa","brand:wikidata":"Q48835190","brand:wikipedia":"en:La Salsa",cuisine:"tex-mex",name:"La Salsa",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Lee's Famous Recipe Chicken":{name:"Lee's Famous Recipe Chicken",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/LeesFamousRecipeChicken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6512810",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Lee's Famous Recipe Chicken","brand:wikidata":"Q6512810","brand:wikipedia":"en:Lee's Famous Recipe Chicken",cuisine:"chicken",name:"Lee's Famous Recipe Chicken",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["ca","us"],terms:["lee's"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Lee's Sandwiches":{name:"Lee's Sandwiches",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/LeesSandwiches/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6512823",amenity:"fast_food",cuisine:"vietnamese;sandwich"},addTags:{amenity:"fast_food",brand:"Lee's Sandwiches","brand:wikidata":"Q6512823","brand:wikipedia":"en:Lee's Sandwiches",cuisine:"vietnamese;sandwich",name:"Lee's Sandwiches",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Little Caesars":{name:"Little Caesars",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/LittleCaesars/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1393809",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Little Caesars","brand:wikidata":"Q1393809","brand:wikipedia":"en:Little Caesars",cuisine:"pizza",name:"Little Caesars",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["little caesars pizza","little ceasars","little ceasars pizza"],matchScore:2,suggestion:true},"amenity/fast_food/Long John Silver's":{name:"Long John Silver's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/LongJohnSilvers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1535221",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Long John Silver's","brand:wikidata":"Q1535221","brand:wikipedia":"en:Long John Silver's",cuisine:"seafood",name:"Long John Silver's",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Lotteria":{name:"Lotteria",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ilovelotteria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q249525",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"en:Lotteria",cuisine:"burger",name:"Lotteria",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/MOD Pizza":{name:"MOD Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/MODPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19903469",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"MOD Pizza","brand:wikidata":"Q19903469","brand:wikipedia":"en:MOD Pizza",cuisine:"pizza",name:"MOD Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Manchu Wok":{name:"Manchu Wok",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ManchuWOKRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6747622",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Manchu Wok","brand:wikidata":"Q6747622","brand:wikipedia":"en:Manchu Wok",cuisine:"chinese",name:"Manchu Wok",takeaway:"yes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Mang Inasal":{name:"Mang Inasal",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/MangInasalPhilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6748573",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Mang Inasal","brand:wikidata":"Q6748573","brand:wikipedia":"en:Mang Inasal",cuisine:"barbecue",name:"Mang Inasal",takeaway:"yes"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Manhattan Bagel":{name:"Manhattan Bagel",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ManhattanBagel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64517333",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Manhattan Bagel","brand:wikidata":"Q64517333",cuisine:"bagel",name:"Manhattan Bagel",takeaway:"yes"},countryCodes:["us"],terms:["manhattan bagels"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Mary Brown's":{name:"Mary Brown's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/MaryBrowns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6779125",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Mary Brown's","brand:wikidata":"Q6779125","brand:wikipedia":"en:Mary Brown's",cuisine:"chicken",name:"Mary Brown's",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Max":{name:"Max",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/maxburgers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1912172",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Max","brand:wikidata":"Q1912172","brand:wikipedia":"en:Max Hamburgers",cuisine:"burger",name:"Max",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/McDonald's":{name:"McDonald's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"McDonald's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Meson Sandwiches":{name:"Meson Sandwiches",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/elmesonsandwiches/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5351585",amenity:"fast_food",cuisine:"sandwich"},addTags:{alt_name:"El Meson Sandwiches",amenity:"fast_food",brand:"Meson Sandwiches","brand:wikidata":"Q5351585","brand:wikipedia":"en:El Meson Sandwiches",cuisine:"sandwich",name:"Meson Sandwiches",short_name:"Meson",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:["el meson"],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Mighty Taco":{name:"Mighty Taco",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/MyMightyTaco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6844210",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Mighty Taco","brand:wikidata":"Q6844210","brand:wikipedia":"en:Mighty Taco",cuisine:"mexican",name:"Mighty Taco",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Minute Burger":{name:"Minute Burger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/MinuteBurger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273503",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Minute Burger","brand:wikidata":"Q62273503",cuisine:"burger",name:"Minute Burger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Moe's Southwest Grill":{name:"Moe's Southwest Grill",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/MoesSouthwestGrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6889938",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Moe's Southwest Grill","brand:wikidata":"Q6889938","brand:wikipedia":"en:Moe's Southwest Grill",cuisine:"mexican",name:"Moe's Southwest Grill",short_name:"Moe's",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Morley's":{name:"Morley's",icon:"fas-drumstick-bite",imageURL:"https://pbs.twimg.com/profile_images/845831830066659328/xY231QEy_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q21008528",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Morley's","brand:wikidata":"Q21008528","brand:wikipedia":"en:Morley's",cuisine:"chicken",name:"Morley's",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Mr. Sub":{name:"Mr. Sub",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/mrsub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6929225",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Mr. Sub","brand:wikidata":"Q6929225","brand:wikipedia":"en:Mr. Sub",cuisine:"sandwich",name:"Mr. Sub",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Mucho Burrito":{name:"Mucho Burrito",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/MuchoBurritoHQ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65148332",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Mucho Burrito","brand:wikidata":"Q65148332",cuisine:"mexican",name:"Mucho Burrito",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/hot_dog/Nathan's":{name:"Nathan's",icon:"fas-hotdog",imageURL:"https://graph.facebook.com/nathansfamous/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1319505",amenity:"fast_food",cuisine:"hot_dog"},addTags:{amenity:"fast_food",brand:"Nathan's","brand:wikidata":"Q1319505","brand:wikipedia":"en:Nathan's Famous",cuisine:"hot_dog",name:"Nathan's",takeaway:"yes"},reference:{key:"cuisine",value:"hot_dog"},countryCodes:["us"],terms:["nathans famous"],matchScore:2,suggestion:true},"amenity/fast_food/Nestlé Toll House Café":{name:"Nestlé Toll House Café",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1059491137700814848/KtzCuNTH_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6997922",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Nestlé Toll House Café","brand:wikidata":"Q6997922","brand:wikipedia":"en:Nestlé Toll House Café",cuisine:"dessert",name:"Nestlé Toll House Café",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/New York Fries":{name:"New York Fries",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/NewYorkFries/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7013558",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"New York Fries","brand:wikidata":"Q7013558","brand:wikipedia":"en:New York Fries",cuisine:"fries",name:"New York Fries",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/New York Pizza":{name:"New York Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/newyorkpizza.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2639128",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"New York Pizza","brand:wikidata":"Q2639128","brand:wikipedia":"nl:New York Pizza",cuisine:"pizza",name:"New York Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Noah's Bagels":{name:"Noah's Bagels",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/NoahsBagels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64517373",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Noah's Bagels","brand:wikidata":"Q64517373",cuisine:"bagel",name:"Noah's Bagels",official_name:"Noah's New York Bagels",takeaway:"yes"},countryCodes:["us"],terms:["noahs ny bagels"],matchScore:2,suggestion:true},"amenity/fast_food/Noodle Box":{name:"Noodle Box",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/NoodleBoxAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7049671",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Noodle Box","brand:wikidata":"Q7049671","brand:wikipedia":"en:Noodle Box",cuisine:"noodle",name:"Noodle Box",takeaway:"yes"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Nordsee":{name:"Nordsee",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/NORDSEEDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q74866",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Nordsee","brand:wikidata":"Q74866","brand:wikipedia":"en:Nordsee",cuisine:"seafood",name:"Nordsee",takeaway:"yes"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Num Pang":{name:"Num Pang",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/NumPangKitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62079702",amenity:"fast_food",cuisine:"cambodian;sandwich"},addTags:{amenity:"fast_food",brand:"Num Pang","brand:wikidata":"Q62079702","brand:wikipedia":"en:Num Pang",cuisine:"cambodian;sandwich",name:"Num Pang",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/O'Tacos":{name:"O'Tacos",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/Otacos.France/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28494040",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"O'Tacos","brand:wikidata":"Q28494040","brand:wikipedia":"en:O'Tacos",cuisine:"mexican",name:"O'Tacos",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Oporto":{name:"Oporto",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Oportos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4412342",amenity:"fast_food",cuisine:"burger;chicken"},addTags:{amenity:"fast_food",brand:"Oporto","brand:wikidata":"Q4412342","brand:wikipedia":"en:Oporto (restaurant)",cuisine:"burger;chicken",name:"Oporto",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Orange Julius":{name:"Orange Julius",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/OrangeJulius/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3355059",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Orange Julius","brand:wikidata":"Q3355059","brand:wikipedia":"en:Orange Julius",cuisine:"juice",name:"Orange Julius",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/P. Terry's":{name:"P. Terry's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/pterrys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19903521",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"P. Terry's","brand:wikidata":"Q19903521","brand:wikipedia":"en:P. Terry's",cuisine:"burger",name:"P. Terry's",official_name:"P. Terry's Burger Stand",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Pal's":{name:"Pal's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Palsweb/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7126094",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Pal's","brand:wikidata":"Q7126094","brand:wikipedia":"en:Pal's",cuisine:"burger",name:"Pal's",official_name:"Pal's Sudden Service",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Panago":{name:"Panago",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/panago/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17111672",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Panago","brand:wikidata":"Q17111672","brand:wikipedia":"en:Panago",cuisine:"pizza",name:"Panago",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Panda Express":{name:"Panda Express",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/PandaExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1358690",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Panda Express","brand:wikidata":"Q1358690","brand:wikipedia":"en:Panda Express",cuisine:"chinese",name:"Panda Express",takeaway:"yes"},terms:["panda"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Panera Bread":{name:"Panera Bread",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/panerabread/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7130852",amenity:"fast_food",cuisine:"sandwich;bakery"},addTags:{amenity:"fast_food",brand:"Panera Bread","brand:wikidata":"Q7130852","brand:wikipedia":"en:Panera Bread",cuisine:"sandwich;bakery",name:"Panera Bread",short_name:"Panera",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Panos":{name:"Panos",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/PanosBelgium/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3384496",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Panos","brand:wikidata":"Q3384496","brand:wikipedia":"nl:Panos",cuisine:"sandwich",name:"Panos",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ae","be","cz","nl","pl","sk","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Pans & Company":{name:"Pans & Company",icon:"temaki-sandwich",imageURL:"https://pbs.twimg.com/profile_images/1039055431996530688/bgRgkBHD_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11697586",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Pans & Company","brand:wikidata":"Q11697586","brand:wikipedia":"es:Pans & Company",cuisine:"sandwich",name:"Pans & Company",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["es","it","pt"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Papa John's":{name:"Papa John's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/papajohns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2759586",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"en:Papa John's Pizza",cuisine:"pizza",name:"Papa John's",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["papa john","papa john pizza","papa johns pizza"],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Papa Murphy's":{name:"Papa Murphy's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/papamurphyspizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7132349",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Papa Murphy's","brand:wikidata":"Q7132349","brand:wikipedia":"en:Papa Murphy's",cuisine:"pizza",name:"Papa Murphy's",official_name:"Papa Murphy's Take 'N' Bake Pizza",takeaway:"only"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca","us"],terms:["papa murphy","papa murphy pizza","papa murphys pizza"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Penn Station":{name:"Penn Station",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/pennstation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7163311",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Penn Station","brand:wikidata":"Q7163311","brand:wikipedia":"en:Penn Station (restaurant)",cuisine:"sandwich",name:"Penn Station",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Philly Pretzel Factory":{name:"Philly Pretzel Factory",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/PhillyPretzel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60097339",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Philly Pretzel Factory","brand:wikidata":"Q60097339",cuisine:"pretzel",name:"Philly Pretzel Factory",takeaway:"yes"},countryCodes:["us"],terms:["philadelphia pretzel factory","philadelphia soft pretzel factory","philly soft pretzel factory"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pinulito":{name:"Pinulito",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/elsabordenuestragente/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273613",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pinulito","brand:wikidata":"Q62273613",cuisine:"chicken",name:"Pinulito",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["gt"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Pita Pit":{name:"Pita Pit",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/pitapitusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7757289",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Pita Pit","brand:wikidata":"Q7757289","brand:wikipedia":"en:Pita Pit",cuisine:"pita",name:"Pita Pit",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza 73":{name:"Pizza 73",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{"brand:wikidata":"Q7199950",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza 73","brand:wikidata":"Q7199950","brand:wikipedia":"en:Pizza 73",cuisine:"pizza",name:"Pizza 73",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Hut Delivery":{name:"Pizza Hut Delivery",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzahutus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191615",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Delivery",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Hut Express":{name:"Pizza Hut Express",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzahutus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191615",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Express",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Inn":{name:"Pizza Inn",icon:"maki-restaurant-pizza",imageURL:"https://pbs.twimg.com/profile_images/959101899675901952/2SogbY41_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4118850",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Inn","brand:wikidata":"Q4118850","brand:wikipedia":"en:Pizza Inn",cuisine:"pizza",name:"Pizza Inn",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Móvil":{name:"Pizza Móvil",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzamovil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12397697",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Móvil","brand:wikidata":"Q12397697","brand:wikipedia":"gl:Pizza Móvil",cuisine:"pizza",name:"Pizza Móvil",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Nova":{name:"Pizza Nova",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/PizzaNova/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7199971",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Nova","brand:wikidata":"Q7199971","brand:wikipedia":"en:Pizza Nova",cuisine:"pizza",name:"Pizza Nova",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Pizza":{name:"Pizza Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/PizzaPizzaCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1194143",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Pizza","brand:wikidata":"Q1194143","brand:wikipedia":"en:Pizza Pizza",cuisine:"pizza",name:"Pizza Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Schmizza":{name:"Pizza Schmizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/schmizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7199979",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Schmizza","brand:wikidata":"Q7199979","brand:wikipedia":"en:Pizza Schmizza",cuisine:"pizza",name:"Pizza Schmizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Campero":{name:"Pollo Campero",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/CamperoUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q942741",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pollo Campero","brand:wikidata":"Q942741","brand:wikipedia":"en:Pollo Campero",cuisine:"chicken",name:"Pollo Campero",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Granjero (Costa Rica)":{name:"Pollo Granjero (Costa Rica)",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/PolloGranjeroCostaRica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273665",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pollo Granjero","brand:wikidata":"Q62273665",cuisine:"chicken",name:"Pollo Granjero",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["cr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Granjero (Guatemala)":{name:"Pollo Granjero (Guatemala)",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/PolloGranjeroGuatemala/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273652",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pollo Granjero","brand:wikidata":"Q62273652",cuisine:"chicken",name:"Pollo Granjero",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["gt"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Tropical":{name:"Pollo Tropical",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/PolloTropical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3395356",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pollo Tropical","brand:wikidata":"Q3395356","brand:wikipedia":"en:Pollo Tropical",cuisine:"chicken",name:"Pollo Tropical",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Popeyes":{name:"Popeyes",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/PopeyesLouisianaKitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1330910",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Popeyes","brand:wikidata":"Q1330910","brand:wikipedia":"en:Popeyes",cuisine:"chicken",name:"Popeyes",official_name:"Popeyes Louisiana Kitchen",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/hot_dog/Portillo's":{name:"Portillo's",icon:"fas-hotdog",imageURL:"https://graph.facebook.com/portillos.hotdog/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3399307",amenity:"fast_food",cuisine:"hot_dog;burger"},addTags:{amenity:"fast_food",brand:"Portillo's","brand:wikidata":"Q3399307","brand:wikipedia":"en:Portillo's Restaurants",cuisine:"hot_dog;burger",name:"Portillo's",takeaway:"yes"},reference:{key:"cuisine",value:"hot_dog"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Potbelly":{name:"Potbelly",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/potbellysandwichshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7234777",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Potbelly","brand:wikidata":"Q7234777","brand:wikipedia":"en:Potbelly Sandwich Shop",cuisine:"sandwich",name:"Potbelly",official_name:"Potbelly Sandwich Works",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:["potbelly sandwich shop"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Pret A Manger":{name:"Pret A Manger",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/pretamangerusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2109109",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Pret A Manger","brand:wikidata":"Q2109109","brand:wikipedia":"en:Pret a Manger",cuisine:"sandwich",name:"Pret A Manger",short_name:"Pret",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ae","cn","de","dk","fr","gb","hk","nl","sg","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Pretzelmaker":{name:"Pretzelmaker",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/pretzelmaker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7242321",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Pretzelmaker","brand:wikidata":"Q7242321","brand:wikipedia":"en:Pretzelmaker",cuisine:"pretzel",name:"Pretzelmaker",takeaway:"yes"},countryCodes:["us"],terms:["pretzel time"],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Qdoba":{name:"Qdoba",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/qdoba/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1363885",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Qdoba","brand:wikidata":"Q1363885","brand:wikipedia":"en:Qdoba",cuisine:"mexican",name:"Qdoba",official_name:"Qdoba Mexican Grill",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Quesada":{name:"Quesada",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/QuesadaBurritos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66070360",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Quesada","brand:wikidata":"Q66070360",cuisine:"mexican",name:"Quesada",official_name:"Quesada Burritos & Tacos",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Quick":{name:"Quick",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/QuickBelgium/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q286494",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Quick","brand:wikidata":"Q286494","brand:wikipedia":"en:Quick (restaurant)",cuisine:"burger",name:"Quick",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["be","fr","lu"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Quiznos":{name:"Quiznos",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/Quiznos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1936229",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Quiznos","brand:wikidata":"Q1936229","brand:wikipedia":"en:Quiznos",cuisine:"sandwich",name:"Quiznos",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:["quiznos sub","quiznos subs"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Raising Cane's":{name:"Raising Cane's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/RaisingCanesChickenFingers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7285144",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Raising Cane's","brand:wikidata":"Q7285144","brand:wikipedia":"en:Raising Cane's Chicken Fingers",cuisine:"chicken",name:"Raising Cane's",official_name:"Raising Cane's Chicken Fingers",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Rally's":{name:"Rally's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/checkersrallys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63919323",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Rally's","brand:wikidata":"Q63919323",cuisine:"burger",name:"Rally's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Red Rooster":{name:"Red Rooster",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/RedRoosterAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q376466",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Red Rooster","brand:wikidata":"Q376466","brand:wikipedia":"en:Red Rooster",cuisine:"chicken",name:"Red Rooster",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/donut/Robin's Donuts":{name:"Robin's Donuts",icon:"temaki-donut",imageURL:"https://graph.facebook.com/RobinsDonutsCAN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7352199",amenity:"fast_food",cuisine:"donut"},addTags:{amenity:"fast_food",brand:"Robin's Donuts","brand:wikidata":"Q7352199","brand:wikipedia":"en:Robin's Donuts",cuisine:"donut",name:"Robin's Donuts",short_name:"Robin's",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Roy Rogers":{name:"Roy Rogers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/RoyRogersRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7373311",amenity:"fast_food",cuisine:"burger;sandwich;chicken"},addTags:{amenity:"fast_food",brand:"Roy Rogers","brand:wikidata":"Q7373311","brand:wikipedia":"en:Roy Rogers Restaurants",cuisine:"burger;sandwich;chicken",name:"Roy Rogers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Rubio's":{name:"Rubio's",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/rubios/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7376154",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Rubio's","brand:wikidata":"Q7376154","brand:wikipedia":"en:Rubio's Coastal Grill",cuisine:"mexican",name:"Rubio's",official_name:"Rubio's Coastal Grill",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:["rubios fresh mexican grill"],matchScore:2,suggestion:true},"amenity/fast_food/burger/SUSU & Sons":{name:"SUSU & Sons",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/susuandsons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760081",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"SUSU & Sons","brand:en":"SUSU & Sons","brand:he":"סוסו אנד סאנס","brand:wikidata":"Q64760081",cuisine:"burger",name:"SUSU & Sons","name:en":"SUSU & Sons","name:he":"סוסו אנד סאנס",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["il"],terms:["סוסו ובניו"],matchScore:2,suggestion:true},"amenity/fast_food/Sarku Japan":{name:"Sarku Japan",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/SarkuJapanColombia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7424243",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Sarku Japan","brand:wikidata":"Q7424243",cuisine:"japanese",name:"Sarku Japan",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Sarpino's Pizzeria":{name:"Sarpino's Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/SarpinosPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28229116",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Sarpino's Pizzeria","brand:wikidata":"Q28229116","brand:wikipedia":"en:Sarpino's Pizzeria",cuisine:"pizza",name:"Sarpino's Pizzeria",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Sbarro":{name:"Sbarro",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Sbarro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2589409",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Sbarro","brand:wikidata":"Q2589409","brand:wikipedia":"en:Sbarro",cuisine:"pizza",name:"Sbarro",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["sbarro pizzeria"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Schlotzsky's":{name:"Schlotzsky's",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/Schlotzskys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2244796",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Schlotzsky's","brand:wikidata":"Q2244796","brand:wikipedia":"en:Schlotzsky's",cuisine:"sandwich",name:"Schlotzsky's",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:["schlotzskys deli"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Schnitz":{name:"Schnitz",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{"brand:wikidata":"Q48792277",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Schnitz","brand:wikidata":"Q48792277","brand:wikipedia":"en:Schnitz",cuisine:"chicken",name:"Schnitz",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Shake Shack":{name:"Shake Shack",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/shakeshack/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1058722",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Shake Shack","brand:wikidata":"Q1058722","brand:wikipedia":"en:Shake Shack",cuisine:"burger",name:"Shake Shack",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Sibylla":{name:"Sibylla",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/sibyllasverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q488643",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Sibylla","brand:wikidata":"Q488643","brand:wikipedia":"en:Sibylla (fast food)",cuisine:"burger",name:"Sibylla",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["fi","se"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Smashburger":{name:"Smashburger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/smashburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17061332",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Smashburger","brand:wikidata":"Q17061332","brand:wikipedia":"en:Smashburger",cuisine:"burger",name:"Smashburger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Smoothie King":{name:"Smoothie King",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/SmoothieKing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5491421",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Smoothie King","brand:wikidata":"Q5491421","brand:wikipedia":"en:Smoothie King",cuisine:"juice",name:"Smoothie King",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Sonic":{name:"Sonic",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/sonicdrivein/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7561808",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Sonic","brand:wikidata":"Q7561808","brand:wikipedia":"en:Sonic Drive-In",cuisine:"burger",drive_in:"yes",name:"Sonic",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:["sonic drive in"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Specialty's":{name:"Specialty's",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/specialtys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64339210",amenity:"fast_food",cuisine:"sandwich;bakery"},addTags:{amenity:"fast_food",brand:"Specialty's","brand:wikidata":"Q64339210",cuisine:"sandwich;bakery",name:"Specialty's",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/St-Hubert Express":{name:"St-Hubert Express",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/sthubert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3495225",amenity:"fast_food",cuisine:"chicken;barbecue"},addTags:{amenity:"fast_food",brand:"St-Hubert","brand:wikidata":"Q3495225","brand:wikipedia":"fr:St-Hubert (restaurant)",cuisine:"chicken;barbecue",name:"St-Hubert Express",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Steak 'n Shake":{name:"Steak 'n Shake",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/steaknshake/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7605233",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Steak 'n Shake","brand:wikidata":"Q7605233","brand:wikipedia":"en:Steak 'n Shake",cuisine:"burger",name:"Steak 'n Shake",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Steak Escape":{name:"Steak Escape",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/steakescape/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7605235",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Steak Escape","brand:wikidata":"Q7605235","brand:wikipedia":"en:Steak Escape",cuisine:"sandwich",name:"Steak Escape",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Steers":{name:"Steers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/OfficialSteers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56599145",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Steers","brand:wikidata":"Q56599145","brand:wikipedia":"en:Steers",cuisine:"burger",name:"Steers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Subway":{name:"Subway",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/subway/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q244457",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Subway","brand:wikidata":"Q244457","brand:wikipedia":"en:Subway (restaurant)",cuisine:"sandwich",name:"Subway",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:["subway sandwiches"],matchScore:2,suggestion:true},"amenity/fast_food/Sumo Salad":{name:"Sumo Salad",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/SumoSalad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16951700",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Sumo Salad","brand:wikidata":"Q16951700","brand:wikipedia":"en:Sumo Salad",cuisine:"salad",name:"Sumo Salad",takeaway:"yes"},countryCodes:["ae","au","br","nz","sg","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Supermac's":{name:"Supermac's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/supermacsofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7643750",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Supermac's","brand:wikidata":"Q7643750","brand:wikipedia":"en:Supermac's",cuisine:"burger",name:"Supermac's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Sushi Shop":{name:"Sushi Shop",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/sushishopboutique/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64840990",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Sushi Shop","brand:wikidata":"Q64840990",cuisine:"sushi",name:"Sushi Shop",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Taco Bell":{name:"Taco Bell",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/tacobell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q752941",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Taco Bell","brand:wikidata":"Q752941","brand:wikipedia":"en:Taco Bell",cuisine:"tex-mex",name:"Taco Bell",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Bueno":{name:"Taco Bueno",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/buenoheadquarters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7673958",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco Bueno","brand:wikidata":"Q7673958","brand:wikipedia":"en:Taco Bueno",cuisine:"mexican",name:"Taco Bueno",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Cabana":{name:"Taco Cabana",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/TacoCabana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12070488",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco Cabana","brand:wikidata":"Q12070488","brand:wikipedia":"en:Taco Cabana",cuisine:"mexican",name:"Taco Cabana",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Del Mar":{name:"Taco Del Mar",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/tacodelmarcorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7673972",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco Del Mar","brand:wikidata":"Q7673972","brand:wikipedia":"en:Taco del Mar",cuisine:"mexican",name:"Taco Del Mar",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco John's":{name:"Taco John's",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/tacojohns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7673962",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco John's","brand:wikidata":"Q7673962","brand:wikipedia":"en:Taco John's",cuisine:"mexican",name:"Taco John's",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Taco Mayo":{name:"Taco Mayo",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1014909415101624320/p-fzpv6u_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2386946",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Taco Mayo","brand:wikidata":"Q2386946","brand:wikipedia":"en:Taco Mayo",cuisine:"tex-mex",name:"Taco Mayo",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Time":{name:"Taco Time",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/tacotime/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7673969",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco Time","brand:wikidata":"Q7673969","brand:wikipedia":"en:Taco Time",cuisine:"mexican",name:"Taco Time",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/hot_dog/Ted's Hot Dogs":{name:"Ted's Hot Dogs",icon:"fas-hotdog",imageURL:"https://graph.facebook.com/TedsHotDogs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7692930",amenity:"fast_food",cuisine:"hot_dog"},addTags:{amenity:"fast_food",brand:"Ted's Hot Dogs","brand:wikidata":"Q7692930","brand:wikipedia":"en:Ted's Hot Dogs",cuisine:"hot_dog",name:"Ted's Hot Dogs",takeaway:"yes"},reference:{key:"cuisine",value:"hot_dog"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Telepizza":{name:"Telepizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/telepizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2699863",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Telepizza","brand:wikidata":"Q2699863","brand:wikipedia":"en:Telepizza",cuisine:"pizza",name:"Telepizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Teriyaki Experience":{name:"Teriyaki Experience",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/TeriyakiExperience/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7702453",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Teriyaki Experience","brand:wikidata":"Q7702453",cuisine:"japanese",name:"Teriyaki Experience",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Thai Express (Singapore)":{name:"Thai Express (Singapore)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ThaiExpressSG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7709119",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Thai Express","brand:wikidata":"Q7709119","brand:wikipedia":"en:Thai Express",cuisine:"thai",name:"Thai Express",takeaway:"yes"},countryCodes:["sg"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Thaï Express (North America)":{name:"Thaï Express (North America)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/EatThaiExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7711610",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Thaï Express","brand:wikidata":"Q7711610","brand:wikipedia":"en:Thaï Express",cuisine:"thai",name:"Thaï Express",takeaway:"yes"},countryCodes:["ca","us"],terms:["thai express"],matchScore:2,suggestion:true},"amenity/fast_food/burger/The Habit Burger Grill":{name:"The Habit Burger Grill",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/habitburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18158741",amenity:"fast_food",cuisine:"burger"},addTags:{alt_name:"Habit Burger Grill",amenity:"fast_food",brand:"The Habit Burger Grill","brand:wikidata":"Q18158741","brand:wikipedia":"en:The Habit Burger Grill",cuisine:"burger",name:"The Habit Burger Grill",short_name:"Habit Burger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:["the habit burger"],matchScore:2,suggestion:true},"amenity/fast_food/pizza/The Pizza Company":{name:"The Pizza Company",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/thepizzacompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2413520",amenity:"fast_food",cuisine:"pizza"},addTags:{alt_name:"Pizza Company",amenity:"fast_food",brand:"The Pizza Company","brand:wikidata":"Q2413520","brand:wikipedia":"en:The Pizza Company",cuisine:"pizza",name:"The Pizza Company",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ae","bh","cn","jo","kh","la","mm","my","sa","th","vn"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Togo's":{name:"Togo's",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/togossandwiches/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3530375",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Togo's","brand:wikidata":"Q3530375","brand:wikipedia":"en:Togo's",cuisine:"sandwich",name:"Togo's",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Tropical Smoothie Cafe":{name:"Tropical Smoothie Cafe",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/tropicalsmoothiecafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7845817",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Tropical Smoothie Cafe","brand:wikidata":"Q7845817","brand:wikipedia":"en:Tropical Smoothie Cafe",cuisine:"juice",name:"Tropical Smoothie Cafe",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Upper Crust":{name:"Upper Crust",icon:"temaki-sandwich",imageURL:"https://pbs.twimg.com/profile_images/1156194120324591619/0Wy7xKDd_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7898585",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Upper Crust","brand:wikidata":"Q7898585","brand:wikipedia":"en:Upper Crust (restaurant chain)",cuisine:"sandwich",name:"Upper Crust",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["de","dk","eg","es","fi","gb","ie","no","se"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Valentine":{name:"Valentine",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/valentineqc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3553635",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Valentine","brand:wikidata":"Q3553635","brand:wikipedia":"fr:Valentine (restaurant)",cuisine:"burger",name:"Valentine",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Veggie Grill":{name:"Veggie Grill",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/veggiegrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18636427",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Veggie Grill","brand:wikidata":"Q18636427","brand:wikipedia":"en:Veggie Grill",cuisine:"american","diet:vegan":"only",name:"Veggie Grill",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Villa Madina":{name:"Villa Madina",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/villamadinarestaurant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64876884",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Villa Madina","brand:wikidata":"Q64876884",cuisine:"mediterranean",name:"Villa Madina",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Wahoo's Fish Taco":{name:"Wahoo's Fish Taco",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/WahoosFishTaco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7959827",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Wahoo's Fish Taco","brand:wikidata":"Q7959827","brand:wikipedia":"en:Wahoo's Fish Taco",cuisine:"seafood",name:"Wahoo's Fish Taco",short_name:"Wahoo's",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Wayback Burgers":{name:"Wayback Burgers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/waybackburgers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997570",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Wayback Burgers","brand:wikidata":"Q16997570","brand:wikipedia":"en:Wayback Burgers",cuisine:"burger",name:"Wayback Burgers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Wendy's":{name:"Wendy's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/wendys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q550258",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Wendy's","brand:wikidata":"Q550258","brand:wikipedia":"en:Wendy's",cuisine:"burger",name:"Wendy's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/West Cornwall Pasty Co.":{name:"West Cornwall Pasty Co.",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1079670717074018304/juDTW6De_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7774268",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"West Cornwall Pasty Co.","brand:wikidata":"Q7774268","brand:wikipedia":"en:The West Cornwall Pasty Company",cuisine:"pasty",name:"West Cornwall Pasty Co.",takeaway:"yes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Wetzel's Pretzels":{name:"Wetzel's Pretzels",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/WetzelsPretzels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7990205",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Wetzel's Pretzels","brand:wikidata":"Q7990205","brand:wikipedia":"en:Wetzel's Pretzels",cuisine:"pretzel",name:"Wetzel's Pretzels",takeaway:"yes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Whataburger":{name:"Whataburger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/whataburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q376627",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Whataburger","brand:wikidata":"Q376627","brand:wikipedia":"en:Whataburger",cuisine:"burger",name:"Whataburger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Which Wich?":{name:"Which Wich?",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/whichwich/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7993556",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Which Wich?","brand:wikidata":"Q7993556","brand:wikipedia":"en:Which Wich?",cuisine:"sandwich",name:"Which Wich?",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ae","gb","gt","mx","om","qa","sa","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/White Castle":{name:"White Castle",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/WhiteCastle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1244034",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"White Castle","brand:wikidata":"Q1244034","brand:wikipedia":"en:White Castle (restaurant)",cuisine:"burger",name:"White Castle",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/hot_dog/Wienerschnitzel":{name:"Wienerschnitzel",icon:"fas-hotdog",imageURL:"https://graph.facebook.com/Wienerschnitzel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q324679",amenity:"fast_food",cuisine:"hot_dog"},addTags:{amenity:"fast_food",brand:"Wienerschnitzel","brand:wikidata":"Q324679","brand:wikipedia":"en:Wienerschnitzel",cuisine:"hot_dog",name:"Wienerschnitzel",takeaway:"yes"},reference:{key:"cuisine",value:"hot_dog"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Wimpy":{name:"Wimpy",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/wimpyrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2811992",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Wimpy","brand:wikidata":"Q2811992","brand:wikipedia":"en:Wimpy (restaurant)",cuisine:"burger",name:"Wimpy",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/WingStreet":{name:"WingStreet",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWingStreet.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q946630",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"WingStreet","brand:wikidata":"Q946630","brand:wikipedia":"en:WingStreet",cuisine:"wings",name:"WingStreet",takeaway:"yes"},countryCodes:["au","ca","cy","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Wingstop":{name:"Wingstop",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Wingstop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8025339",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Wingstop","brand:wikidata":"Q8025339","brand:wikipedia":"en:Wingstop",cuisine:"wings",name:"Wingstop",takeaway:"yes"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Xi'an Famous Foods":{name:"Xi'an Famous Foods",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/xianfoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8044020",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Xi'an Famous Foods","brand:wikidata":"Q8044020","brand:wikipedia":"en:Xi'an Famous Foods",cuisine:"chinese",name:"Xi'an Famous Foods",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Yellow Cab Pizza":{name:"Yellow Cab Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/YellowCabPizzaOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8051689",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Yellow Cab Pizza","brand:wikidata":"Q8051689","brand:wikipedia":"en:Yellow Cab Pizza",cuisine:"pizza",name:"Yellow Cab Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Zaxby's":{name:"Zaxby's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/Zaxbys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8067525",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Zaxby's","brand:wikidata":"Q8067525","brand:wikipedia":"en:Zaxby's",cuisine:"chicken",name:"Zaxby's",official_name:"Zaxby's Chicken Fingers & Buffalo Wings",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Zoës Kitchen":{name:"Zoës Kitchen",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ZoesKitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8074747",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Zoës Kitchen","brand:wikidata":"Q8074747","brand:wikipedia":"en:Zoës Kitchen",cuisine:"mediterranean",name:"Zoës Kitchen",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/immergrün":{name:"immergrün",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/mein.immergruen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62589254",amenity:"fast_food",cuisine:"sandwich;salad;juice"},addTags:{amenity:"fast_food",brand:"immergrün","brand:wikidata":"Q62589254",cuisine:"sandwich;salad;juice",name:"immergün",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["de"],terms:["immergün"],matchScore:2,suggestion:true},"amenity/fast_food/itsu":{name:"itsu",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1159375014875078656/IaKatTeE_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6094914",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"itsu","brand:wikidata":"Q6094914","brand:wikipedia":"en:Itsu",cuisine:"asian",name:"itsu",takeaway:"yes"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Γρηγόρης":{name:"Γρηγόρης",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/gregorys.gr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273834",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Γρηγόρης","brand:el":"Γρηγόρης","brand:en":"Gregorys","brand:wikidata":"Q62273834",cuisine:"sandwich",name:"Γρηγόρης","name:el":"Γρηγόρης","name:en":"Gregorys",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Бургер Кинг":{name:"Бургер Кинг",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBurger%20King%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q177054",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Бургер Кинг","brand:en":"Burger King","brand:ru":"Бургер Кинг","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Бургер Кинг","name:en":"Burger King","name:ru":"Бургер Кинг",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["by","kz","ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Домино'c":{name:"Домино'c",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Dominos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q839466",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Домино'c","brand:en":"Domino's","brand:ru":"Домино'c","brand:wikidata":"Q839466","brand:wikipedia":"ru:Domino’s Pizza",cuisine:"pizza",name:"Домино'c","name:en":"Domino's","name:ru":"Домино'c",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["доминоc пицца"],matchScore:2,suggestion:true},"amenity/fast_food/Крошка Картошка":{name:"Крошка Картошка",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/kartoshka.moscow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4241838",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Крошка Картошка","brand:en":"Kroshka Kartoshka","brand:ru":"Крошка Картошка","brand:wikidata":"Q4241838","brand:wikipedia":"ru:Крошка Картошка",cuisine:"potato",name:"Крошка Картошка","name:en":"Kroshka Kartoshka","name:ru":"Крошка Картошка",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Макдоналдс":{name:"Макдоналдс",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Макдоналдс","brand:en":"McDonald's","brand:ru":"Макдоналдс","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"Макдоналдс","name:en":"McDonald's","name:ru":"Макдоналдс",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Папа Джонс":{name:"Папа Джонс",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/papajohns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2759586",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Папа Джонс","brand:en":"Papa John's","brand:ru":"Папа Джонс","brand:wikidata":"Q2759586","brand:wikipedia":"ru:Papa John’s",cuisine:"pizza",name:"Папа Джонс","name:en":"Papa John's","name:ru":"Папа Джонс",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["by","ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Пузата хата":{name:"Пузата хата",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/puzatahata/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11832009",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Пузата Хата","brand:en":"Puzata hata","brand:ru":"Пузата Хата","brand:ua":"Пузата Хата","brand:wikidata":"Q11832009","brand:wikipedia":"uk:Пузата Хата",cuisine:"ukrainian;western",name:"Пузата Хата","name:en":"Puzata hata","name:ru":"Пузата Хата","name:ua":"Пузата Хата",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Робин Сдобин":{name:"Робин Сдобин",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/robinsdobin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273880",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Робин Сдобин","brand:en":"Robins Dobin","brand:ru":"Робин Сдобин","brand:wikidata":"Q62273880",cuisine:"burger",name:"Робин Сдобин","name:en":"Robins Dobin","name:ru":"Робин Сдобин",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Русский Аппетит":{name:"Русский Аппетит",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/1502979646622576/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62086063",amenity:"fast_food",cuisine:"sandwich;salad;regional"},addTags:{amenity:"fast_food",brand:"Русский Аппетит","brand:en":"Russkiy Appetit","brand:ru":"Русский Аппетит","brand:wikidata":"Q62086063",cuisine:"sandwich;salad;regional",name:"Русский Аппетит","name:en":"Russkiy Appetit","name:ru":"Русский Аппетит",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Стардог!s":{name:"Стардог!s",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/StardogsOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4439856",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Стардог!s","brand:en":"Stardog!s","brand:ru":"Стардог!s","brand:wikidata":"Q4439856","brand:wikipedia":"ru:Стардогс",cuisine:"sausage",name:"Стардог!s","name:en":"Stardog!s","name:ru":"Стардог!s",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Суши Wok":{name:"Суши Wok",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/sushiwokofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25444754",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Суши Wok","brand:en":"Sushi Wok","brand:ru":"Суши Wok","brand:wikidata":"Q25444754","brand:wikipedia":"uk:Суши Wok (мережа магазинів)",cuisine:"asian",name:"Суши Wok","name:en":"Sushi Wok","name:ru":"Суши Wok",takeaway:"yes"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Теремок":{name:"Теремок",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/teremok/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4455593",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Теремок","brand:en":"Teremok","brand:ru":"Теремок","brand:wikidata":"Q4455593","brand:wikipedia":"ru:Теремок (сеть быстрого питания)",cuisine:"crepe;russian",name:"Теремок","name:en":"Teremok","name:ru":"Теремок",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/אגדיר":{name:"אגדיר",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/agadirburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760070",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"אגדיר","brand:en":"Agadir","brand:he":"אגדיר","brand:wikidata":"Q64760070",cuisine:"burger",name:"אגדיר","name:en":"Agadir","name:he":"אגדיר",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/מקדונלד'ס":{name:"מקדונלד'ס",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/McDonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12061542",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"מקדונלד'ס","brand:en":"McDonald's","brand:he":"מקדונלד'ס","brand:wikidata":"Q12061542","brand:wikipedia":"en:McDonald's Israel",cuisine:"burger",name:"מקדונלד'ס","name:en":"McDonald's","name:he":"מקדונלד'ס",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/עד העצם אקספרס":{name:"עד העצם אקספרס",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/1793025004285088/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760165",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"עד העצם אקספרס","brand:en":"Ad Haetzem Express","brand:he":"עד העצם אקספרס","brand:wikidata":"Q64760165",cuisine:"burger",name:"עד העצם אקספרס","name:en":"Ad Haetzem Express","name:he":"עד העצם אקספרס",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/دجاج كنتاكي":{name:"دجاج كنتاكي",icon:"fas-drumstick-bite",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKFC%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q524757",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"دجاج كنتاكي","brand:ar":"دجاج كنتاكي","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"ar:دجاج كنتاكي",cuisine:"chicken",name:"دجاج كنتاكي","name:ar":"دجاج كنتاكي","name:en":"KFC",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/ماكدونالدز":{name:"ماكدونالدز",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"ماكدونالدز","brand:ar":"ماكدونالدز","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"ar:ماكدونالدز",cuisine:"burger",name:"ماكدونالدز","name:ar":"ماكدونالدز","name:en":"McDonald's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/هرفي":{name:"هرفي",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/herfyfscksa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5738371",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"هرفي","brand:ar":"هرفي","brand:en":"Herfy","brand:wikidata":"Q5738371","brand:wikipedia":"ar:هرفي",cuisine:"burger",name:"هرفي","name:ar":"هرفي","name:en":"Herfy",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ae","bh","kw","sa"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/かっぱ寿司":{name:"かっぱ寿司",icon:"maki-fast-food",imageURL:"https://abs.twimg.com/sticky/default_profile_images/default_profile_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q11263916",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"かっぱ寿司","brand:en":"Kappazushi","brand:ja":"かっぱ寿司","brand:wikidata":"Q11263916","brand:wikipedia":"ja:かっぱ寿司",cuisine:"sushi",name:"かっぱ寿司","name:en":"Kappazushi","name:ja":"かっぱ寿司",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/かつや":{name:"かつや",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1215226415383080960/YbJ7aSm7_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2855257",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"かつや","brand:en":"Katsuya","brand:ja":"かつや","brand:wikidata":"Q2855257","brand:wikipedia":"ja:かつや",cuisine:"fried_food",name:"かつや","name:en":"Katsuya","name:ja":"かつや","name:ko":"카쯔야","name:zh":"吉豚屋",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/くら寿司":{name:"くら寿司",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Kurasushi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6445491",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"くら寿司","brand:en":"Kurazushi","brand:ja":"くら寿司","brand:wikidata":"Q6445491","brand:wikipedia":"ja:くら寿司",cuisine:"sushi",name:"くら寿司","name:en":"Kurazushi","name:ja":"くら寿司",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/すき家":{name:"すき家",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1074928090885672960/nTgKn0jh_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6137375",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"すき家","brand:en":"Sukiya","brand:ja":"すき家","brand:wikidata":"Q6137375","brand:wikipedia":"ja:すき家",cuisine:"beef_bowl",name:"すき家","name:en":"Sukiya","name:ja":"すき家",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/てんや":{name:"てんや",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/TWtenya/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11319830",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"てんや","brand:en":"Tenya","brand:ja":"てんや","brand:wikidata":"Q11319830","brand:wikipedia":"ja:テンコーポレーション",cuisine:"fries",name:"てんや","name:en":"Tenya","name:ja":"てんや",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/なか卯":{name:"なか卯",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/107330239328355/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11274132",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"なか卯","brand:en":"Nakau","brand:ja":"なか卯","brand:wikidata":"Q11274132","brand:wikipedia":"ja:なか卯",cuisine:"udon",name:"なか卯","name:en":"Nakau","name:ja":"なか卯",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/はま寿司":{name:"はま寿司",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/1743876322501841/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17220385",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"はま寿司","brand:en":"Hamazushi","brand:ja":"はま寿司","brand:wikidata":"Q17220385","brand:wikipedia":"ja:はま寿司",cuisine:"sushi",name:"はま寿司","name:en":"Hamazushi","name:ja":"はま寿司",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ほっかほっか亭":{name:"ほっかほっか亭",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/516896005176524/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5878035",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"ほっかほっか亭","brand:en":"Hokka Hokka Tei","brand:ja":"ほっかほっか亭","brand:wikidata":"Q5878035","brand:wikipedia":"ja:ほっかほっか亭",cuisine:"japanese",name:"ほっかほっか亭","name:en":"Hokka Hokka Tei","name:ja":"ほっかほっか亭",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ほっともっと":{name:"ほっともっと",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hottomotto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10850949",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"ほっともっと","brand:en":"Hotto Motto","brand:ja":"ほっともっと","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",cuisine:"japanese",name:"ほっともっと","name:en":"Hotto Motto","name:ja":"ほっともっと",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ゆで太郎":{name:"ゆで太郎",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/273267212711878/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11280824",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"ゆで太郎","brand:en":"Yudetaro","brand:ja":"ゆで太郎","brand:wikidata":"Q11280824","brand:wikipedia":"ja:ゆで太郎",cuisine:"noodle",name:"ゆで太郎","name:en":"Yudetaro","name:ja":"ゆで太郎",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/ウェンディーズ":{name:"ウェンディーズ",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/wendys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q550258",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"ウェンディーズ","brand:en":"Wendy's","brand:ja":"ウェンディーズ","brand:wikidata":"Q550258","brand:wikipedia":"en:Wendy's",cuisine:"burger",name:"ウェンディーズ","name:en":"Wendy's","name:ja":"ウェンディーズ",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/オリジン弁当":{name:"オリジン弁当",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/152356971456128/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11292632",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"オリジン弁当","brand:en":"Origin Bentō","brand:ja":"オリジン弁当","brand:wikidata":"Q11292632","brand:wikipedia":"ja:オリジン東秀",cuisine:"japanese",name:"オリジン弁当","name:en":"Origin Bentō","name:ja":"オリジン弁当",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/ケンタッキーフライドチキン":{name:"ケンタッキーフライドチキン",icon:"fas-drumstick-bite",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKFC%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q524757",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"ケンタッキーフライドチキン","brand:en":"KFC","brand:ja":"ケンタッキーフライドチキン","brand:wikidata":"Q524757","brand:wikipedia":"ja:KFCコーポレーション",cuisine:"chicken",name:"ケンタッキーフライドチキン","name:en":"KFC","name:ja":"ケンタッキーフライドチキン",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ゴーゴーカレー":{name:"ゴーゴーカレー",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1983361461/___2__bigger.JPG",geometry:["point","area"],tags:{"brand:wikidata":"Q11303801",amenity:"fast_food"},addTags:{"alt_name:en":"Go Go Curry",amenity:"fast_food",brand:"ゴーゴーカレー","brand:en":"Go!Go!Curry","brand:ja":"ゴーゴーカレー","brand:wikidata":"Q11303801","brand:wikipedia":"ja:ゴーゴーカレー",cuisine:"curry",name:"ゴーゴーカレー","name:en":"Go!Go!Curry","name:ja":"ゴーゴーカレー",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/サブウェイ":{name:"サブウェイ",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/subway/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q244457",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"サブウェイ","brand:en":"Subway","brand:ja":"サブウェイ","brand:wikidata":"Q244457","brand:wikipedia":"ja:サブウェイ",cuisine:"sandwich",name:"サブウェイ","name:en":"Subway","name:ja":"サブウェイ",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/スシロー":{name:"スシロー",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/akindosushiro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11257037",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"スシロー","brand:en":"Sushiro","brand:ja":"スシロー","brand:wikidata":"Q11257037","brand:wikipedia":"ja:あきんどスシロー",cuisine:"sushi",name:"スシロー","name:en":"Sushiro","name:ja":"スシロー","name:zh":"壽司郎",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ドミノ":{name:"ドミノ",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Dominos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q839466",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ドミノ","brand:en":"Domino's","brand:ja":"ドミノ","brand:wikidata":"Q839466","brand:wikipedia":"ja:ドミノ・ピザ",cuisine:"pizza",name:"ドミノ","name:en":"Domino's","name:ja":"ドミノ",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:["ドミノ・ピザ"],matchScore:2,suggestion:true},"amenity/fast_food/burger/バーガーキング":{name:"バーガーキング",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBurger%20King%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q177054",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"バーガーキング","brand:en":"Burger King","brand:ja":"バーガーキング","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"バーガーキング","name:en":"Burger King","name:ja":"バーガーキング",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ピザハット":{name:"ピザハット",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzahutus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191615",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ピザハット","brand:en":"Pizza Hut","brand:ja":"ピザハット","brand:wikidata":"Q191615","brand:wikipedia":"ja:ピザハット",cuisine:"pizza",name:"ピザハット","name:en":"Pizza Hut","name:ja":"ピザハット",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ピザ・カリフォルニア":{name:"ピザ・カリフォルニア",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{"brand:wikidata":"Q75324",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ピザ・カリフォルニア","brand:en":"Pizza California","brand:ja":"ピザ・カリフォルニア","brand:wikidata":"Q75324","brand:wikipedia":"ja:ピザ・カリフォルニア",cuisine:"pizza",name:"ピザ・カリフォルニア","name:en":"Pizza California","name:ja":"ピザ・カリフォルニア",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ピザーラ":{name:"ピザーラ",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzala.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7199948",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ピザーラ","brand:en":"Pizza-La","brand:ja":"ピザーラ","brand:wikidata":"Q7199948","brand:wikipedia":"ja:ピザーラ",cuisine:"pizza",name:"ピザーラ","name:en":"Pizza-La","name:ja":"ピザーラ",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ファーストキッチン":{name:"ファーストキッチン",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/firstkitchen.offical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5453133",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ファーストキッチン","brand:en":"First Kitchen","brand:ja":"ファーストキッチン","brand:wikidata":"Q5453133","brand:wikipedia":"ja:ファーストキッチン",cuisine:"pizza",name:"ファーストキッチン","name:en":"First Kitchen","name:ja":"ファーストキッチン",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/フレッシュネスバーガー":{name:"フレッシュネスバーガー",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/freshness.burger.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5503087",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"フレッシュネスバーガー","brand:en":"Freshness Burger","brand:ja":"フレッシュネスバーガー","brand:wikidata":"Q5503087","brand:wikipedia":"ja:フレッシュネスバーガー",cuisine:"burger",name:"フレッシュネスバーガー","name:en":"Freshness Burger","name:ja":"フレッシュネスバーガー",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/マクドナルド":{name:"マクドナルド",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"マクドナルド","brand:en":"McDonald's","brand:ja":"マクドナルド","brand:wikidata":"Q38076","brand:wikipedia":"ja:マクドナルド",cuisine:"burger",name:"マクドナルド","name:en":"McDonald's","name:ja":"マクドナルド",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/donut/ミスタードーナツ":{name:"ミスタードーナツ",icon:"temaki-donut",imageURL:"https://graph.facebook.com/misdo.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1065819",amenity:"fast_food",cuisine:"donut"},addTags:{amenity:"fast_food",brand:"ミスタードーナツ","brand:en":"Mister Donut","brand:ja":"ミスタードーナツ","brand:wikidata":"Q1065819","brand:wikipedia":"en:Mister Donut",cuisine:"donut",name:"ミスタードーナツ","name:en":"Mister Donut","name:ja":"ミスタードーナツ",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/モスバーガー":{name:"モスバーガー",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mosburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1204169",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"モスバーガー","brand:en":"MOS Burger","brand:ja":"モスバーガー","brand:wikidata":"Q1204169","brand:wikipedia":"ja:モスバーガー",cuisine:"burger",name:"モスバーガー","name:en":"MOS Burger","name:ja":"モスバーガー",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ラーメン二郎":{name:"ラーメン二郎",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/jirolian/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11347765",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"ラーメン二郎","brand:en":"Ramen Jiro","brand:ja":"ラーメン二郎","brand:wikidata":"Q11347765","brand:wikipedia":"ja:ラーメン二郎",cuisine:"ramen",name:"ラーメン二郎","name:en":"Ramen Jiro","name:ja":"ラーメン二郎",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/ロッテリア":{name:"ロッテリア",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ilovelotteria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q249525",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"ロッテリア","brand:en":"Lotteria","brand:ja":"ロッテリア","brand:wikidata":"Q249525","brand:wikipedia":"ja:ロッテリア",cuisine:"burger",name:"ロッテリア","name:en":"Lotteria","name:ja":"ロッテリア",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/吉野家":{name:"吉野家",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/tw.yoshinoya/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q776272",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"吉野家","brand:en":"Yoshinoya","brand:ja":"吉野家","brand:wikidata":"Q776272","brand:wikipedia":"ja:吉野家",cuisine:"beef_bowl",name:"吉野家","name:en":"Yoshinoya","name:ja":"吉野家",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/富士そば":{name:"富士そば",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/fujisoba/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11414722",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"富士そば","brand:en":"Fuji Soba","brand:ja":"富士そば","brand:wikidata":"Q11414722","brand:wikipedia":"ja:名代富士そば",cuisine:"soba",name:"富士そば","name:en":"Fuji Soba","name:ja":"富士そば",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/幸楽苑":{name:"幸楽苑",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Kourakuen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11484003",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"幸楽苑","brand:en":"Kourakuen","brand:ja":"幸楽苑","brand:wikidata":"Q11484003","brand:wikipedia":"ja:幸楽苑",cuisine:"ramen",name:"幸楽苑","name:en":"Kourakuen","name:ja":"幸楽苑",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/摩斯漢堡":{name:"摩斯漢堡",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mosburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1204169",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"摩斯漢堡","brand:en":"MOS Burger","brand:wikidata":"Q1204169","brand:wikipedia":"zh:摩斯漢堡","brand:zh":"摩斯漢堡",cuisine:"burger",name:"摩斯漢堡","name:en":"MOS Burger","name:zh":"摩斯漢堡",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["cn","hk","mo","sg","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/日高屋":{name:"日高屋",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hidakayavietnam/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11326050",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"日高屋","brand:en":"Hidakaya","brand:wikidata":"Q11326050","brand:wikipedia":"ja:ハイデイ日高",cuisine:"noodle",name:"日高屋","name:en":"Hidakaya",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/松屋":{name:"松屋",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/matsuyafoods.matsuya/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q848773",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"松屋","brand:en":"Matsuya","brand:ja":"松屋","brand:wikidata":"Q848773","brand:wikipedia":"ja:松屋フーズ",cuisine:"japanese",name:"松屋","name:en":"Matsuya","name:ja":"松屋",official_name:"松屋フーズ","official_name:en":"Matsuya Foods","official_name:ja":"松屋フーズ",takeaway:"yes"},countryCodes:["cn","hk","jp","mo","sg","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/箱根そば":{name:"箱根そば",icon:"maki-fast-food",geometry:["point","area"],tags:{"brand:wikidata":"Q11603345",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"箱根そば","brand:en":"Hakone Soba","brand:ja":"箱根そば","brand:wikidata":"Q11603345","brand:wikipedia":"ja:箱根そば",cuisine:"soba",name:"箱根そば","name:en":"Hakone Soba","name:ja":"箱根そば",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/築地銀だこ":{name:"築地銀だこ",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/GindacoUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11603490",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"築地銀だこ","brand:en":"Gindaco","brand:ja":"築地銀だこ","brand:wikidata":"Q11603490","brand:wikipedia":"ja:築地銀だこ",cuisine:"takoyaki",name:"築地銀だこ","name:en":"Gindaco","name:ja":"築地銀だこ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/肯德基":{name:"肯德基",icon:"fas-drumstick-bite",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKFC%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q524757",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"肯德基","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"zh:肯德基",cuisine:"chicken",name:"肯德基","name:en":"KFC",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["cn","hk","mo","sg","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/麥當勞":{name:"麥當勞",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"麥當勞","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麥當勞","brand:zh":"麥當勞","brand:zh-Hant":"麥當勞",cuisine:"burger",name:"麥當勞","name:en":"McDonald's","name:zh":"麥當勞","name:zh-Hant":"麥當勞",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["hk","mo","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/麦当劳":{name:"麦当劳",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"麦当劳","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麦当劳","brand:zh":"麦当劳","brand:zh-Hans":"麦当劳",cuisine:"burger",name:"麦当劳","name:en":"McDonald's","name:zh":"麦当劳","name:zh-Hans":"麦当劳",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["cn","sg"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/롯데리아":{name:"롯데리아",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ilovelotteria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q249525",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"롯데리아","brand:en":"Lotteria","brand:ko":"롯데리아","brand:wikidata":"Q249525","brand:wikipedia":"ko:롯데리아",cuisine:"burger",name:"롯데리아","name:en":"Lotteria","name:ko":"롯데리아",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/맘스터치":{name:"맘스터치",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/momstouchmain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23044856",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"맘스터치","brand:ko":"맘스터치","brand:wikidata":"Q23044856","brand:wikipedia":"en:Mom's Touch",cuisine:"burger",name:"맘스터치","name:ko":"맘스터치",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/맥도날드":{name:"맥도날드",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"맥도날드","brand:en":"McDonald's","brand:ko":"맥도날드","brand:wikidata":"Q38076","brand:wikipedia":"ko:맥도날드",cuisine:"burger",name:"맥도날드","name:en":"McDonald's","name:ko":"맥도날드",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/1-2-3":{name:"1-2-3",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q4545742",amenity:"fuel"},addTags:{amenity:"fuel",brand:"1-2-3","brand:wikidata":"Q4545742","brand:wikipedia":"en:1-2-3 (fuel station)",name:"1-2-3"},countryCodes:["dk","pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/7-Eleven":{name:"7-Eleven",icon:"maki-fuel",imageURL:"https://graph.facebook.com/7ElevenMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q259340",amenity:"fuel"},addTags:{amenity:"fuel",brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven"},terms:["7-11","seven eleven"],matchScore:2,suggestion:true},"amenity/fuel/76":{name:"76",icon:"maki-fuel",imageURL:"https://graph.facebook.com/76gas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1658320",amenity:"fuel"},addTags:{amenity:"fuel",brand:"76","brand:wikidata":"Q1658320","brand:wikipedia":"en:76 (gas station)",name:"76"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/8 à Huit":{name:"8 à Huit",icon:"maki-fuel",imageURL:"https://graph.facebook.com/fashion8a8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2818601",amenity:"fuel"},addTags:{amenity:"fuel",brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ABC":{name:"ABC",icon:"maki-fuel",imageURL:"https://graph.facebook.com/abcasemat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10397504",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ABC","brand:wikidata":"Q10397504","brand:wikipedia":"fi:ABC-ketju",name:"ABC"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ADNOC":{name:"ADNOC",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ADNOCDistribution/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q166729",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ADNOC"},countryCodes:["ae"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ANCAP":{name:"ANCAP",icon:"maki-fuel",imageURL:"https://graph.facebook.com/EstacionesANCAP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2824522",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ANCAP","brand:wikidata":"Q2824522","brand:wikipedia":"es:Administración Nacional de Combustibles, Alcohol y Portland",name:"ANCAP",official_name:"Administración Nacional de Combustibles, Alcoholes y Portland"},countryCodes:["uy"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/AS 24":{name:"AS 24",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAS%2024%20Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2819394",amenity:"fuel"},addTags:{amenity:"fuel",brand:"AS 24","brand:wikidata":"Q2819394","brand:wikipedia":"fr:AS 24 (entreprise)",hgv:"only",name:"AS 24"},countryCodes:["at","be","bg","cz","de","dk","es","fr","gb","ge","gr","hr","hu","ie","it","lt","lu","mk","nl","pl","pt","ro","rs","se","si","sk","ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Aegean":{name:"Aegean",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AegeanOil.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28146598",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Aegean","brand:wikidata":"Q28146598","brand:wikipedia":"el:Aegean Oil",name:"Aegean"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Afriquia":{name:"Afriquia",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2829178",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Afriquia","brand:wikidata":"Q2829178","brand:wikipedia":"en:Akwa Group",name:"Afriquia"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Agip":{name:"Agip",icon:"maki-fuel",imageURL:"https://graph.facebook.com/agipoil888/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q377915",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Agip","brand:wikidata":"Q377915","brand:wikipedia":"en:Agip",name:"Agip"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Agrola":{name:"Agrola",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AGROLA.AG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q397351",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Agrola","brand:wikidata":"Q397351","brand:wikipedia":"de:Agrola",name:"Agrola"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Aloha Petroleum":{name:"Aloha Petroleum",icon:"maki-fuel",imageURL:"https://graph.facebook.com/alohagas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4734197",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Aloha Petroleum","brand:wikidata":"Q4734197","brand:wikipedia":"en:Aloha Petroleum",name:"Aloha Petroleum",official_name:"Aloha Petroleum Ltd"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Alon":{name:"Alon",icon:"maki-fuel",imageURL:"https://graph.facebook.com/alonbrands/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274304",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Alon","brand:wikidata":"Q62274304",name:"Alon"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Alpet":{name:"Alpet",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ALPETtr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62131561",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Alpet","brand:wikidata":"Q62131561",name:"Alpet"},countryCodes:["al","tr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Amoco":{name:"Amoco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Amoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q465952",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Amoco","brand:wikidata":"Q465952","brand:wikipedia":"en:Amoco",name:"Amoco"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Ampol":{name:"Ampol",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q4748528",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Ampol","brand:wikidata":"Q4748528","brand:wikipedia":"en:Ampol",name:"Ampol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Api":{name:"Api",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TheAmericanPetroleumInstitute/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q466043",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Api","brand:wikidata":"Q466043","brand:wikipedia":"en:American Petroleum Institute",name:"Api"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Aral":{name:"Aral",icon:"maki-fuel",imageURL:"https://graph.facebook.com/araldeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q565734",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral"},countryCodes:["de","lu"],terms:["aral tankstelle"],matchScore:2,suggestion:true},"amenity/fuel/Arco":{name:"Arco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/arco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q304769",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Arco","brand:wikidata":"Q304769","brand:wikipedia":"en:ARCO",name:"Arco"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Asda":{name:"Asda",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Asda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q297410",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Atem":{name:"Atem",icon:"maki-fuel",imageURL:"https://graph.facebook.com/postosatem/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62332255",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Atem","brand:wikidata":"Q62332255",name:"Atem"},countryCodes:["br"],terms:["posto atem"],matchScore:2,suggestion:true},"amenity/fuel/Auchan":{name:"Auchan",icon:"maki-fuel",imageURL:"https://graph.facebook.com/auchan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q758603",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Avanti":{name:"Avanti",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OMV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q168238",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Avanti","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"Avanti"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Avia":{name:"Avia",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AVIA.racing.team/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q300147",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Avia","brand:wikidata":"Q300147","brand:wikipedia":"de:Avia International",name:"Avia"},countryCodes:["at","be","bg","ch","cz","de","es","fr","hu","it","nl","pl","pt","rs","ua"],terms:["station avia"],matchScore:2,suggestion:true},"amenity/fuel/Avin":{name:"Avin",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q19903165",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Avin","brand:wikidata":"Q19903165","brand:wikipedia":"en:Avin International",name:"Avin"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Axion":{name:"Axion",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AXIONenergyOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62131749",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Axion","brand:wikidata":"Q62131749",name:"Axion"},countryCodes:["ar","py","uy"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Aytemiz":{name:"Aytemiz",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AytemizOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274352",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Aytemiz","brand:wikidata":"Q62274352",name:"Aytemiz"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Azpetrol":{name:"Azpetrol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/1029982540429881/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4034661",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Azpetrol","brand:wikidata":"Q4034661","brand:wikipedia":"az:Azpetrol",name:"Azpetrol"},countryCodes:["az"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/BEBECO":{name:"BEBECO",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62274373",amenity:"fuel"},addTags:{amenity:"fuel",brand:"BEBECO","brand:wikidata":"Q62274373",name:"BEBECO"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/BHPetrol":{name:"BHPetrol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/BHP.Petrol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274381",amenity:"fuel"},addTags:{amenity:"fuel",brand:"BHPetrol","brand:wikidata":"Q62274381",name:"BHPetrol"},countryCodes:["my"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/BP":{name:"BP",icon:"maki-fuel",imageURL:"https://graph.facebook.com/bp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q152057",amenity:"fuel"},addTags:{amenity:"fuel",brand:"BP","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP"},terms:["bp gas station"],matchScore:2,suggestion:true},"amenity/fuel/BR":{name:"BR",icon:"maki-fuel",imageURL:"https://graph.facebook.com/postospetrobras/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4836468",amenity:"fuel"},addTags:{amenity:"fuel",brand:"BR","brand:wikidata":"Q4836468","brand:wikipedia":"pt:Petrobras Distribuidora",name:"BR"},countryCodes:["br"],terms:["br petrobras","petrobras","posto br"],matchScore:2,suggestion:true},"amenity/fuel/BWOC":{name:"BWOC",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q4836845",amenity:"fuel"},addTags:{amenity:"fuel",brand:"BWOC","brand:wikidata":"Q4836845","brand:wikipedia":"en:BWOC",name:"BWOC",official_name:"Bob Wayne's Oil Company"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Bangchak":{name:"Bangchak",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Bangchak/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6579719",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Bangchak","brand:wikidata":"Q6579719","brand:wikipedia":"zh:曼差石油股份",name:"Bangchak"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Bapco":{name:"Bapco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Bapco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q803640",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Bapco","brand:wikidata":"Q803640","brand:wikipedia":"en:Bahrain Petroleum Company",name:"Bapco",official_name:"Bahrain Petroleum Company"},countryCodes:["bh"],terms:["bahrain petroleum"],matchScore:2,suggestion:true},"amenity/fuel/Benzina":{name:"Benzina",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBenzina%2B.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11130894",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Benzina","brand:wikidata":"Q11130894","brand:wikipedia":"cs:Benzina",name:"Benzina"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Bharat Petroleum":{name:"Bharat Petroleum",icon:"maki-fuel",imageURL:"https://graph.facebook.com/BharatPetroleumcorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q854826",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Bharat Petroleum","brand:wikidata":"Q854826","brand:wikipedia":"en:Bharat Petroleum",name:"Bharat Petroleum"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Biomax":{name:"Biomax",icon:"maki-fuel",imageURL:"https://graph.facebook.com/BiomaxColombia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274413",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Biomax","brand:wikidata":"Q62274413",name:"Biomax"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Bliska":{name:"Bliska",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q4016378",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Bliska","brand:wikidata":"Q4016378","brand:wikipedia":"pl:Bliska",name:"Bliska"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/CAMPSA":{name:"CAMPSA",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1031623",amenity:"fuel"},addTags:{amenity:"fuel",brand:"CAMPSA","brand:wikidata":"Q1031623","brand:wikipedia":"en:Campsa",name:"CAMPSA",official_name:"Compañía Arrendataria del Monopolio del Petróleo, S.A."},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Caltex":{name:"Caltex",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/582354948345634816/nzfEGDG1_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q277470",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q277470","brand:wikipedia":"en:Caltex",name:"Caltex"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Canadian Tire Gas+":{name:"Canadian Tire Gas+",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Canadiantire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1032400",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire"},terms:["canadian tire","canadian tire gas bar"],matchScore:2,suggestion:true},"amenity/fuel/Carrefour":{name:"Carrefour",icon:"maki-fuel",imageURL:"https://graph.facebook.com/carrefour/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q217599",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Carrefour","brand:wikidata":"Q217599","brand:wikipedia":"fr:Carrefour (enseigne)",name:"Carrefour"},terms:["carrefour market"],matchScore:2,suggestion:true},"amenity/fuel/Casey's General Store":{name:"Casey's General Store",icon:"maki-fuel",imageURL:"https://graph.facebook.com/caseys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2940968",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store"},terms:["caseys"],matchScore:2,suggestion:true},"amenity/fuel/Cenex":{name:"Cenex",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CenexStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5011381",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cenex","brand:wikidata":"Q5011381","brand:wikipedia":"en:CHS Inc.",name:"Cenex"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Cepsa":{name:"Cepsa",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CEPSAespana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q608819",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cepsa","brand:wikidata":"Q608819","brand:wikipedia":"en:Cepsa",name:"Cepsa",official_name:"Compañía Española de Petróleos, S.A.U."},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Ceypetco":{name:"Ceypetco",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q5065795",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Ceypetco","brand:wikidata":"Q5065795","brand:wikipedia":"en:Ceylon Petroleum Corporation",name:"Ceypetco"},countryCodes:["lk"],terms:["lanka filling station"],matchScore:2,suggestion:true},"amenity/fuel/Challenge":{name:"Challenge",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ChallengefuelNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5068888",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Challenge","brand:wikidata":"Q5068888","brand:wikipedia":"en:Challenge (gasoline)",name:"Challenge"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Chevron":{name:"Chevron",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Chevron/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q319642",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Chevron","brand:wikidata":"Q319642","brand:wikipedia":"en:Chevron Corporation",name:"Chevron"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Circle K":{name:"Circle K",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CircleKStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3268010",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Citgo":{name:"Citgo",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CITGOPetroleumCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2974437",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Citgo","brand:wikidata":"Q2974437","brand:wikipedia":"en:Citgo",name:"Citgo"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Clark":{name:"Clark",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ClarkCrownBrands/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5127157",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Clark","brand:wikidata":"Q5127157","brand:wikipedia":"en:Clark Brands",name:"Clark"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Co-op (Canada)":{name:"Co-op (Canada)",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CoopCRS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5440676",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op"},countryCodes:["ca"],terms:["coop"],matchScore:2,suggestion:true},"amenity/fuel/Coles Express":{name:"Coles Express",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ColesExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5144653",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Coles Express","brand:wikidata":"Q5144653","brand:wikipedia":"en:Coles Express",name:"Coles Express"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Conoco":{name:"Conoco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/conoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1126518",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Conoco","brand:wikidata":"Q1126518","brand:wikipedia":"en:Conoco",name:"Conoco"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Copec":{name:"Copec",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q11681461",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Copec","brand:wikidata":"Q11681461","brand:wikipedia":"en:Empresas Copec",name:"Copec"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Copetrol":{name:"Copetrol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Copetrol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274431",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Copetrol","brand:wikidata":"Q62274431",name:"Copetrol"},countryCodes:["py"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Cosan":{name:"Cosan",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CosanBrasil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2998228",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cosan","brand:wikidata":"Q2998228","brand:wikipedia":"pt:Cosan",name:"Cosan"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Cosmo":{name:"Cosmo",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCosmo%20Oil%20company%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2498318",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cosmo","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"Cosmo"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Costco Gasoline":{name:"Costco Gasoline",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Costco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q715583",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Costco Gasoline","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco Gasoline"},countryCodes:["au","ca","mx","us"],terms:["costco","costco gas","costco wholesale"],matchScore:2,suggestion:true},"amenity/fuel/Couche-Tard":{name:"Couche-Tard",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CoucheTardQc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2836957",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Couche-Tard","brand:wikidata":"Q2836957","brand:wikipedia":"en:Alimentation Couche-Tard",name:"Couche-Tard"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Crevier":{name:"Crevier",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GroupeCrevier/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61743451",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Crevier","brand:wikidata":"Q61743451",name:"Crevier"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Crodux":{name:"Crodux",icon:"maki-fuel",imageURL:"https://graph.facebook.com/croduxhr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274622",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Crodux","brand:wikidata":"Q62274622",name:"Crodux"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Cumberland Farms":{name:"Cumberland Farms",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CumberlandFarms/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1143685",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cumberland Farms","brand:wikidata":"Q1143685","brand:wikipedia":"en:Cumberland Farms",name:"Cumberland Farms"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Cupet":{name:"Cupet",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q3007579",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cupet","brand:wikidata":"Q3007579","brand:wikipedia":"en:Cuba Petróleo Union",name:"Cupet"},countryCodes:["cu"],terms:["cuba oil union","cuba petróleo union"],matchScore:2,suggestion:true},"amenity/fuel/Delek":{name:"Delek",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFlad%20of%20Delek%202000.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1184087",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Delek","brand:wikidata":"Q1184087","brand:wikipedia":"en:Delek",name:"Delek"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Delta (Panama & Costa Rica)":{name:"Delta (Panama & Costa Rica)",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetroleosDelta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274638",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Delta","brand:wikidata":"Q62274638",name:"Delta"},countryCodes:["cr","us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Delta (USA)":{name:"Delta (USA)",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62274661",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Delta","brand:wikidata":"Q62274661",name:"Delta"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Diamond Shamrock":{name:"Diamond Shamrock",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q16973722",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Diamond Shamrock","brand:wikidata":"Q16973722","brand:wikipedia":"en:Diamond Shamrock",name:"Diamond Shamrock"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Domo":{name:"Domo",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/924850916536107008/9ZCP6jwR_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5291326",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Domo","brand:wikidata":"Q5291326","brand:wikipedia":"en:Domo Gasoline",name:"Domo"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Dyneff":{name:"Dyneff",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q16630266",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Dyneff","brand:wikidata":"Q16630266","brand:wikipedia":"fr:Dyneff",name:"Dyneff"},countryCodes:["es","fr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/EKO (Canada)":{name:"EKO (Canada)",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q3045934",amenity:"fuel"},addTags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q3045934","brand:wikipedia":"fr:EKO",name:"EKO"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/EKO (Greece)":{name:"EKO (Greece)",icon:"maki-fuel",imageURL:"https://graph.facebook.com/HELPEgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q903198",amenity:"fuel"},addTags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q903198","brand:wikipedia":"el:Ελληνικά Πετρέλαια",name:"EKO"},countryCodes:["bg","cy","gr","me","mk","rs"],terms:["εκο"],matchScore:2,suggestion:true},"amenity/fuel/ENEOS":{name:"ENEOS",icon:"maki-fuel",imageURL:"https://graph.facebook.com/eneos.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1640290",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ENEOS","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"ENEOS"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Elan":{name:"Elan",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q57980752",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Elan","brand:wikidata":"Q57980752",name:"Elan"},countryCodes:["de","fr","nl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Engen":{name:"Engen",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/1014490248112373760/rL8smOvY_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3054251",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Engen","brand:wikidata":"Q3054251","brand:wikipedia":"en:Engen Petroleum",name:"Engen"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Eni":{name:"Eni",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/875644564459012097/fsDlSI7T_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q565594",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Eni","brand:wikidata":"Q565594","brand:wikipedia":"en:Eni",name:"Eni"},countryCodes:["at","ch","fr","it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Erg":{name:"Erg",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FERG%20logo2018.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q739503",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Erg","brand:wikidata":"Q739503","brand:wikipedia":"it:ERG (azienda)",name:"Erg"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Esso":{name:"Esso",icon:"maki-fuel",imageURL:"https://graph.facebook.com/EssoGB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q867662",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"Esso"},terms:["station esso"],matchScore:2,suggestion:true},"amenity/fuel/Esso Express":{name:"Esso Express",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2350336",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Esso Express","brand:wikidata":"Q2350336","brand:wikipedia":"nl:Esso Express",name:"Esso Express"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Exxon":{name:"Exxon",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ExxonandMobilStations/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4781944",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Exxon","brand:wikidata":"Q4781944","brand:wikipedia":"en:Exxon",name:"Exxon"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/F24":{name:"F24",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q12310853",amenity:"fuel"},addTags:{amenity:"fuel",brand:"F24","brand:wikidata":"Q12310853","brand:wikipedia":"da:F24",name:"F24"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Fas Gas":{name:"Fas Gas",icon:"maki-fuel",imageURL:"https://graph.facebook.com/FasGasPlusCorporate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61743505",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Fas Gas","brand:wikidata":"Q61743505","brand:wikipedia":"en:Parkland Fuel",name:"Fas Gas"},countryCodes:["ca"],terms:["fas gas plus"],matchScore:2,suggestion:true},"amenity/fuel/Firezone":{name:"Firezone",icon:"maki-fuel",imageURL:"https://graph.facebook.com/FirezoneNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q14628080",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Firezone","brand:wikidata":"Q14628080","brand:wikipedia":"nl:Firezone",name:"Firezone"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Flying J":{name:"Flying J",icon:"maki-fuel",imageURL:"https://graph.facebook.com/pilottravelcenters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64130592",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Flying J","brand:wikidata":"Q64130592",name:"Flying J"},countryCodes:["ca","us"],terms:["flying j travel plaza"],matchScore:2,suggestion:true},"amenity/fuel/Flying V":{name:"Flying V",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OfficialFlyingV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62275048",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Flying V","brand:wikidata":"Q62275048",name:"Flying V"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Freie Tankstelle":{name:"Freie Tankstelle",icon:"maki-fuel",imageURL:"https://graph.facebook.com/768624663275807/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1009104",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Freie Tankstelle","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"Freie Tankstelle"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/GALP":{name:"GALP",icon:"maki-fuel",imageURL:"https://graph.facebook.com/468503569977955/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1492739",amenity:"fuel"},addTags:{amenity:"fuel",brand:"GALP","brand:wikidata":"Q1492739","brand:wikipedia":"en:Galp Energia",name:"GALP"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Gazel":{name:"Gazel",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62529885",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Gazel","brand:wikidata":"Q62529885",name:"Gazel"},countryCodes:["co","mx","pe"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Gazprom":{name:"Gazprom",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GazpromNewsEn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q102673",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Gazprom","brand:wikidata":"Q102673","brand:wikipedia":"en:Gazprom",name:"Gazprom"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/GetGo":{name:"GetGo",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GiantEagleGetGo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5553766",amenity:"fuel"},addTags:{amenity:"fuel",brand:"GetGo","brand:wikidata":"Q5553766","brand:wikipedia":"en:GetGo",name:"GetGo"},countryCodes:["us"],terms:["giant eagle","giant eagle fuel"],matchScore:2,suggestion:true},"amenity/fuel/Giant (Carlisle)":{name:"Giant (Carlisle)",icon:"maki-fuel",imageURL:"https://graph.facebook.com/giantfoodstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5558332",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Giant","brand:wikidata":"Q5558332","brand:wikipedia":"en:Giant Food Stores",name:"Giant"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Glusco":{name:"Glusco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Glusco.Ukraine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62284719",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Glusco","brand:wikidata":"Q62284719",name:"Glusco"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Goil":{name:"Goil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GOIL.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5555383",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Goil","brand:wikidata":"Q5555383","brand:wikipedia":"en:Ghana Oil Company",name:"Goil"},countryCodes:["gh"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Gulf":{name:"Gulf",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGulf%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1296860",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Gulf","brand:wikidata":"Q1296860","brand:wikipedia":"en:Gulf Oil",name:"Gulf"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Gull":{name:"Gull",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GullNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5617739",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Gull","brand:wikidata":"Q5617739","brand:wikipedia":"en:Gull Petroleum",name:"Gull"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/H-E-B Fuel":{name:"H-E-B Fuel",icon:"maki-fuel",imageURL:"https://graph.facebook.com/HEB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q830621",amenity:"fuel"},addTags:{amenity:"fuel",brand:"H-E-B Fuel","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B Fuel"},countryCodes:["us"],terms:["h-e-b gas"],matchScore:2,suggestion:true},"amenity/fuel/HEM":{name:"HEM",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTamoil.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1563517",amenity:"fuel"},addTags:{amenity:"fuel",brand:"HEM","brand:wikidata":"Q1563517","brand:wikipedia":"de:Deutsche Tamoil",name:"HEM"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/HP":{name:"HP",icon:"maki-fuel",imageURL:"https://graph.facebook.com/hpcl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1619375",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Hindustan Petroleum","brand:wikidata":"Q1619375","brand:wikipedia":"en:Hindustan Petroleum",name:"HP",official_name:"Hindustan Petroleum"},countryCodes:["in"],terms:["hp petrol pump"],matchScore:2,suggestion:true},"amenity/fuel/Harnois":{name:"Harnois",icon:"maki-fuel",imageURL:"https://graph.facebook.com/harnoisenergies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61743558",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Harnois","brand:wikidata":"Q61743558",name:"Harnois"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Hess":{name:"Hess",icon:"maki-fuel",imageURL:"https://graph.facebook.com/HessCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1615684",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Hess","brand:wikidata":"Q1615684","brand:wikipedia":"en:Hess Corporation",name:"Hess"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Hofer":{name:"Hofer",icon:"maki-fuel",imageURL:"https://graph.facebook.com/HOFER.AT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15815751",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer"},countryCodes:["at","si"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Holiday":{name:"Holiday",icon:"maki-fuel",imageURL:"https://graph.facebook.com/holidaystations/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5880490",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Holiday","brand:wikidata":"Q5880490","brand:wikipedia":"en:Holiday Stationstores",name:"Holiday"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Huck's Food & Fuel":{name:"Huck's Food & Fuel",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GoToHucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56276328",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Huck's Food & Fuel","brand:wikidata":"Q56276328","brand:wikipedia":"en:Huck's Food & Fuel",name:"Huck's Food & Fuel",short_name:"Huck's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Husky":{name:"Husky",icon:"maki-fuel",imageURL:"https://graph.facebook.com/huskyenergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q702049",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Husky","brand:wikidata":"Q702049","brand:wikipedia":"en:Husky Energy",name:"Husky"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Hy-Vee Gas":{name:"Hy-Vee Gas",icon:"maki-fuel",imageURL:"https://graph.facebook.com/HyVee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1639719",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Hy-Vee Gas","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",name:"Hy-Vee Gas"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/IES":{name:"IES",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/512948242925891586/WqYuXs0m_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q62287387",amenity:"fuel"},addTags:{amenity:"fuel",brand:"IES","brand:wikidata":"Q62287387",name:"IES"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/IP":{name:"IP",icon:"maki-fuel",imageURL:"https://graph.facebook.com/IPperlitalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q646807",amenity:"fuel"},addTags:{amenity:"fuel",brand:"IP","brand:wikidata":"Q646807","brand:wikipedia":"en:Anonima Petroli Italiana",name:"IP"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Indian Oil":{name:"Indian Oil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/IndianOilCorpLimited/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1289348",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Indian Oil","brand:wikidata":"Q1289348","brand:wikipedia":"en:Indian Oil Corporation",name:"Indian Oil"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Ingo":{name:"Ingo",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ingosverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17048617",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Ingo","brand:wikidata":"Q17048617","brand:wikipedia":"en:Ingo (brand)",name:"Ingo"},countryCodes:["dk","se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Intermarché":{name:"Intermarché",icon:"maki-fuel",imageURL:"https://graph.facebook.com/tousuniscontrelaviechere/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3153200",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché"},terms:["intermarché super"],matchScore:2,suggestion:true},"amenity/fuel/Ipiranga":{name:"Ipiranga",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ipirangaoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2081136",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Ipiranga","brand:wikidata":"Q2081136","brand:wikipedia":"pt:Ipiranga (empresa)",name:"Ipiranga"},countryCodes:["br"],terms:["posto ipiranga"],matchScore:2,suggestion:true},"amenity/fuel/Irving":{name:"Irving",icon:"maki-fuel",imageURL:"https://graph.facebook.com/irvingoil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1673286",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Irving","brand:wikidata":"Q1673286","brand:wikipedia":"en:Irving Oil",name:"Irving"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/JA-SS":{name:"JA-SS",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q11225213",amenity:"fuel"},addTags:{amenity:"fuel",brand:"JA-SS","brand:wikidata":"Q11225213","brand:wikipedia":"ja:JA-SS",name:"JA-SS"},countryCodes:["jp"],terms:["ja"],matchScore:2,suggestion:true},"amenity/fuel/Jet":{name:"Jet",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q568940",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Jet","brand:wikidata":"Q568940","brand:wikipedia":"en:Jet (brand)",name:"Jet"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Jetti":{name:"Jetti",icon:"maki-fuel",imageURL:"https://graph.facebook.com/drivewithjetti/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62288720",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Jetti","brand:wikidata":"Q62288720",name:"Jetti"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Kangaroo Express":{name:"Kangaroo Express",icon:"maki-fuel",imageURL:"https://graph.facebook.com/KangarooExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61747408",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Kangaroo Express","brand:wikidata":"Q61747408",name:"Kangaroo Express",short_name:"Kangaroo"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Kobil":{name:"Kobil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/kenolkobil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22906119",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Kobil","brand:wikidata":"Q22906119","brand:wikipedia":"en:KenolKobil",name:"Kobil"},countryCodes:["bi","et","ke","rw","tz","ug","zm"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Krist":{name:"Krist",icon:"maki-fuel",imageURL:"https://graph.facebook.com/kristoil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q77885501",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Krist","brand:wikidata":"Q77885501",name:"Krist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Kroger":{name:"Kroger",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Kroger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q153417",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger"},terms:["kroger fuel","kroger gas"],matchScore:2,suggestion:true},"amenity/fuel/Kum & Go":{name:"Kum & Go",icon:"maki-fuel",imageURL:"https://graph.facebook.com/kumandgo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6443340",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Kum & Go","brand:wikidata":"Q6443340","brand:wikipedia":"en:Kum & Go",name:"Kum & Go"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Kwik Trip":{name:"Kwik Trip",icon:"maki-fuel",imageURL:"https://graph.facebook.com/KwikTrip/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6450420",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Lotos":{name:"Lotos",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GrupaLOTOS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1256909",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Lotos","brand:wikidata":"Q1256909","brand:wikipedia":"pl:Grupa Lotos",name:"Lotos"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Lotos Optima":{name:"Lotos Optima",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GrupaLOTOS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1256909",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Lotos Optima","brand:wikidata":"Q1256909","brand:wikipedia":"pl:Grupa Lotos",name:"Lotos Optima"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Love's":{name:"Love's",icon:"maki-fuel",imageURL:"https://graph.facebook.com/lovestravelstops/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1872496",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Love's","brand:wikidata":"Q1872496","brand:wikipedia":"en:Love's Travel Stops & Country Stores",name:"Love's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Lukoil":{name:"Lukoil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Lukoil.en/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q329347",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Lukoil","brand:wikidata":"Q329347","brand:wikipedia":"en:Lukoil",name:"Lukoil"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/MEROIL":{name:"MEROIL",icon:"maki-fuel",imageURL:"https://graph.facebook.com/meroilspain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62292559",amenity:"fuel"},addTags:{amenity:"fuel",brand:"MEROIL","brand:wikidata":"Q62292559",name:"MEROIL"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/MOL":{name:"MOL",icon:"maki-fuel",imageURL:"https://graph.facebook.com/molcesko/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q549181",amenity:"fuel"},addTags:{amenity:"fuel",brand:"MOL","brand:wikidata":"Q549181","brand:wikipedia":"en:MOL (company)",name:"MOL"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/MRS":{name:"MRS",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q56274919",amenity:"fuel"},addTags:{amenity:"fuel",brand:"MRS","brand:wikidata":"Q56274919","brand:wikipedia":"en:MRS Oil Nigeria Plc",name:"MRS"},countryCodes:["ng"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Mac's":{name:"Mac's",icon:"maki-fuel",imageURL:"https://graph.facebook.com/MacsBigBaypointRoad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4043527",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Mac's","brand:wikidata":"Q4043527","brand:wikipedia":"en:Mac's Convenience Stores",name:"Mac's"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/MacEwen":{name:"MacEwen",icon:"maki-fuel",imageURL:"https://graph.facebook.com/MacEwenServiceStation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61740335",amenity:"fuel"},addTags:{amenity:"fuel",brand:"MacEwen","brand:wikidata":"Q61740335",name:"MacEwen"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Marathon":{name:"Marathon",icon:"maki-fuel",imageURL:"https://graph.facebook.com/MarathonPetroleumCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q458363",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon"},terms:["marathon gas"],matchScore:2,suggestion:true},"amenity/fuel/Maverik":{name:"Maverik",icon:"maki-fuel",imageURL:"https://graph.facebook.com/maverikadventure/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64149010",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Maverik","brand:wikidata":"Q64149010","brand:wikipedia":"en:Maverik, Inc.",name:"Maverik"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Maxol":{name:"Maxol",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/1211959625710477313/3pwGBn8K_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3302837",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Maxol","brand:wikidata":"Q3302837","brand:wikipedia":"en:Maxol",name:"Maxol"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Meijer":{name:"Meijer",icon:"maki-fuel",imageURL:"https://graph.facebook.com/meijer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1917753",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Meijer","brand:wikidata":"Q1917753","brand:wikipedia":"en:Meijer",name:"Meijer"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Metano":{name:"Metano",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62294765",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Metano","brand:wikidata":"Q62294765",name:"Metano"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Migrol":{name:"Migrol",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Migrol.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1747771",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Migrol","brand:wikidata":"Q1747771","brand:wikipedia":"de:Migrol",name:"Migrol"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Mobil":{name:"Mobil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ExxonandMobilStations/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3088656",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Mobil","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil"},terms:["mobile"],matchScore:2,suggestion:true},"amenity/fuel/Mohawk":{name:"Mohawk",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q6893796",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Mohawk","brand:wikidata":"Q6893796","brand:wikipedia":"en:Mohawk Oil",name:"Mohawk"},countryCodes:["ca"],terms:["mohawk oil"],matchScore:2,suggestion:true},"amenity/fuel/Moil":{name:"Moil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/milanpetrol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62296914",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Moil","brand:wikidata":"Q62296914",name:"Moil"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Morrisons":{name:"Morrisons",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Morrisons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q922344",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Moya":{name:"Moya",icon:"maki-fuel",imageURL:"https://graph.facebook.com/moyastacja/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62297700",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Moya","brand:wikidata":"Q62297700",name:"Moya"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Murco":{name:"Murco",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q16998281",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Murco","brand:wikidata":"Q16998281","brand:wikipedia":"en:Murco Petroleum",name:"Murco"},countryCodes:["gb"],terms:["murco petroleum"],matchScore:2,suggestion:true},"amenity/fuel/Murphy USA":{name:"Murphy USA",icon:"maki-fuel",imageURL:"https://graph.facebook.com/MurphyUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19604459",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Murphy USA","brand:wikidata":"Q19604459","brand:wikipedia":"en:Murphy USA",name:"Murphy USA"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/NP":{name:"NP",icon:"maki-fuel",imageURL:"https://graph.facebook.com/trinidadnp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7842382",amenity:"fuel"},addTags:{amenity:"fuel",brand:"NP","brand:wikidata":"Q7842382","brand:wikipedia":"en:Trinidad & Tobago National Petroleum Marketing Company Limited",name:"NP"},countryCodes:["tt"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Neste":{name:"Neste",icon:"maki-fuel",imageURL:"https://graph.facebook.com/NesteUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q616376",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Neste","brand:wikidata":"Q616376","brand:wikipedia":"en:Neste",name:"Neste"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/OIL!":{name:"OIL!",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20OIL!.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2007561",amenity:"fuel"},addTags:{amenity:"fuel",brand:"OIL!","brand:wikidata":"Q2007561","brand:wikipedia":"de:OIL! Tankstellen",name:"OIL!"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/OK":{name:"OK",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OKenergi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12329785",amenity:"fuel"},addTags:{amenity:"fuel",brand:"OK","brand:wikidata":"Q12329785","brand:wikipedia":"da:OK a.m.b.a.",name:"OK"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/OKQ8":{name:"OKQ8",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OKQ8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1634762",amenity:"fuel"},addTags:{amenity:"fuel",brand:"OKQ8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"OKQ8"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/OMV":{name:"OMV",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OMV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q168238",amenity:"fuel"},addTags:{amenity:"fuel",brand:"OMV","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"OMV"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Oilibya":{name:"Oilibya",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OilibyaMisr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7081491",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Oilibya","brand:wikidata":"Q7081491","brand:wikipedia":"en:Oilibya",name:"Oilibya","name:ar":"أويليبيا"},terms:["oilibia","oilibiya","oillibia","oilliby","oillibya","oillybia","oilybia","olibya","olybia"],matchScore:2,suggestion:true},"amenity/fuel/Olerex":{name:"Olerex",icon:"maki-fuel",imageURL:"https://graph.facebook.com/as.olerex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16931205",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Olerex","brand:wikidata":"Q16931205","brand:wikipedia":"et:AS Olerex",name:"Olerex"},countryCodes:["ee"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Opet":{name:"Opet",icon:"maki-fuel",imageURL:"https://graph.facebook.com/opet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7072824",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Opet","brand:wikidata":"Q7072824","brand:wikipedia":"en:Opet",name:"Opet"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Orlen":{name:"Orlen",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ORLENOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q971649",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Orlen","brand:wikidata":"Q971649","brand:wikipedia":"en:PKN Orlen",name:"Orlen"},countryCodes:["lt","pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Oxxo":{name:"Oxxo",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OXXOTiendas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1342538",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/PSO":{name:"PSO",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PSOCL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2741455",amenity:"fuel"},addTags:{amenity:"fuel",brand:"PSO","brand:wikidata":"Q2741455","brand:wikipedia":"en:Pakistan State Oil",name:"PSO"},countryCodes:["pk"],terms:["pso petrol pump"],matchScore:2,suggestion:true},"amenity/fuel/PT":{name:"PT",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ptstation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62298612",amenity:"fuel"},addTags:{amenity:"fuel",brand:"PT","brand:wikidata":"Q62298612",name:"PT"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/PTT":{name:"PTT",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PTTNews/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1810389",amenity:"fuel"},addTags:{amenity:"fuel",brand:"PTT","brand:wikidata":"Q1810389","brand:wikipedia":"en:PTT Public Company Limited",name:"PTT"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/PV Oil":{name:"PV Oil",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2089536",amenity:"fuel"},addTags:{amenity:"fuel",brand:"PV Oil","brand:wikidata":"Q2089536","brand:wikipedia":"en:Petrovietnam",name:"PV Oil"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Pacific Pride":{name:"Pacific Pride",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PacificPrideUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7122637",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pacific Pride","brand:wikidata":"Q7122637","brand:wikipedia":"en:Pacific Pride",name:"Pacific Pride"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Pecsa":{name:"Pecsa",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PecsaPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62299262",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pecsa","brand:wikidata":"Q62299262",name:"Pecsa"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Pemex":{name:"Pemex",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Pemex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q871308",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pemex","brand:wikidata":"Q871308","brand:wikipedia":"en:Pemex",name:"Pemex"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Pertamina":{name:"Pertamina",icon:"maki-fuel",imageURL:"https://graph.facebook.com/pertamina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1641044",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pertamina","brand:wikidata":"Q1641044","brand:wikipedia":"en:Pertamina",name:"Pertamina"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petro":{name:"Petro",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TravelCentersOfAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64051305",amenity:"fuel"},addTags:{alt_name:"Petro Stopping Centers",amenity:"fuel",brand:"Petro","brand:wikidata":"Q64051305",name:"Petro"},countryCodes:["ca","us"],terms:["petro stopping center"],matchScore:2,suggestion:true},"amenity/fuel/Petro-Canada":{name:"Petro-Canada",icon:"maki-fuel",imageURL:"https://graph.facebook.com/petrocanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1208279",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petro-Canada","brand:wikidata":"Q1208279","brand:wikipedia":"en:Petro-Canada",name:"Petro-Canada"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petro-T":{name:"Petro-T",icon:"maki-fuel",imageURL:"https://graph.facebook.com/433867116736933/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61743540",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petro-T","brand:wikidata":"Q61743540",name:"Petro-T"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/PetroPerú":{name:"PetroPerú",icon:"maki-fuel",imageURL:"https://graph.facebook.com/petroperu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2506390",amenity:"fuel"},addTags:{amenity:"fuel",brand:"PetroPerú","brand:wikidata":"Q2506390","brand:wikipedia":"es:Petroperú",name:"PetroPerú"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petrochina":{name:"Petrochina",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetroChina.Ltd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q503182",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petrochina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina",name:"Petrochina"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petroecuador":{name:"Petroecuador",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetroecuadorEP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1812822",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petroecuador","brand:wikidata":"Q1812822","brand:wikipedia":"en:Petroecuador",name:"Petroecuador"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petrol Ofisi":{name:"Petrol Ofisi",icon:"maki-fuel",imageURL:"https://graph.facebook.com/petrolofisi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1278087",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petrol Ofisi","brand:wikidata":"Q1278087","brand:wikipedia":"en:Petrol Ofisi",name:"Petrol Ofisi"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petrolimex":{name:"Petrolimex",icon:"maki-fuel",imageURL:"https://graph.facebook.com/tapdoanxangdauvietnam/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10831598",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petrolimex","brand:wikidata":"Q10831598","brand:wikipedia":"en:Petrolimex",name:"Petrolimex"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petrolina":{name:"Petrolina",icon:"maki-fuel",imageURL:"https://graph.facebook.com/petrolinaholdings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17013948",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petrolina","brand:wikidata":"Q17013948","brand:wikipedia":"en:Petrolina (company)",name:"Petrolina"},countryCodes:["cy"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petrom":{name:"Petrom",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetromRo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1755034",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petrom","brand:wikidata":"Q1755034","brand:wikipedia":"en:Petrom",name:"Petrom"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petron":{name:"Petron",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetronCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7179011",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petron","brand:wikidata":"Q7179011","brand:wikipedia":"en:Petron Corporation",name:"Petron"},countryCodes:["my","ph"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petronas":{name:"Petronas",icon:"maki-fuel",imageURL:"https://graph.facebook.com/petronas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q221692",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petronas","brand:wikidata":"Q221692","brand:wikipedia":"en:Petronas",name:"Petronas"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petronor":{name:"Petronor",icon:"maki-fuel",imageURL:"https://graph.facebook.com/info.petronor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1726547",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petronor","brand:wikidata":"Q1726547","brand:wikipedia":"es:Petronor",name:"Petronor"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Phillips 66":{name:"Phillips 66",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Phillips66Co/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1656230",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Phillips 66","brand:wikidata":"Q1656230","brand:wikipedia":"en:Phillips 66",name:"Phillips 66"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Phoenix":{name:"Phoenix",icon:"maki-fuel",imageURL:"https://graph.facebook.com/phoenixfuels.ph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7186949",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Phoenix","brand:wikidata":"Q7186949","brand:wikipedia":"en:Phoenix Petroleum",name:"Phoenix"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Pilot":{name:"Pilot",icon:"maki-fuel",imageURL:"https://graph.facebook.com/pilottravelcenters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64128179",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pilot","brand:wikidata":"Q64128179",name:"Pilot"},countryCodes:["ca","us"],terms:["pilot travel centers"],matchScore:2,suggestion:true},"amenity/fuel/Pioneer":{name:"Pioneer",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PioneerEnergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7196684",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pioneer","brand:wikidata":"Q7196684","brand:wikipedia":"en:Pioneer Energy",name:"Pioneer"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Preem":{name:"Preem",icon:"maki-fuel",imageURL:"https://graph.facebook.com/preem/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q598835",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Preem","brand:wikidata":"Q598835","brand:wikipedia":"en:Preem",name:"Preem"},countryCodes:["pl","se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Primax (Ecuador)":{name:"Primax (Ecuador)",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PrimaxEcuador/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62332857",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Primax","brand:wikidata":"Q62332857",name:"Primax"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Primax (Peru)":{name:"Primax (Peru)",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PrimaxPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62332638",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Primax","brand:wikidata":"Q62332638",name:"Primax"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Prio":{name:"Prio",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PrioEnergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62530421",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Prio","brand:wikidata":"Q62530421",name:"Prio"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Puma":{name:"Puma",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PumaEnergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7259769",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Puma","brand:wikidata":"Q7259769","brand:wikipedia":"en:Puma Energy",name:"Puma"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Q1":{name:"Q1",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Q1EnergieAG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62086498",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Q1","brand:wikidata":"Q62086498",name:"Q1"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Q8":{name:"Q8",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OKQ8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1634762",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Q8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"Q8"},countryCodes:["be","dk","es","it","lu","nl","pt"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Q8 Easy":{name:"Q8 Easy",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Q8italia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1806948",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Q8 Easy","brand:wikidata":"Q1806948","brand:wikipedia":"nl:Q8 Easy",name:"Q8 Easy"},countryCodes:["be","it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Qstar":{name:"Qstar",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q10647961",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Qstar","brand:wikidata":"Q10647961","brand:wikipedia":"sv:Qstar",name:"Qstar"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/QuickChek":{name:"QuickChek",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/1191354026673225733/8XEXlY7k_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7271689",amenity:"fuel"},addTags:{amenity:"fuel",brand:"QuickChek","brand:wikidata":"Q7271689","brand:wikipedia":"en:QuickChek",name:"QuickChek"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/QuikTrip":{name:"QuikTrip",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Quiktrip/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7271953",amenity:"fuel"},addTags:{amenity:"fuel",brand:"QuikTrip","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QuikTrip",short_name:"QT"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/RaceTrac":{name:"RaceTrac",icon:"maki-fuel",imageURL:"https://graph.facebook.com/RaceTrac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q735942",amenity:"fuel"},addTags:{amenity:"fuel",brand:"RaceTrac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"RaceTrac"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/RaceWay":{name:"RaceWay",icon:"maki-fuel",imageURL:"https://graph.facebook.com/720219901323849/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q73039084",amenity:"fuel"},addTags:{amenity:"fuel",brand:"RaceWay","brand:wikidata":"Q73039084",name:"RaceWay"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Repsol":{name:"Repsol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/repsol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q174747",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Repsol","brand:wikidata":"Q174747","brand:wikipedia":"es:Repsol",name:"Repsol"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Revoil":{name:"Revoil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/revoil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62530755",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Revoil","brand:wikidata":"Q62530755",name:"Revoil"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Rompetrol":{name:"Rompetrol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Rompetrol.Romania/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1788862",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Rompetrol","brand:wikidata":"Q1788862","brand:wikipedia":"en:Rompetrol",name:"Rompetrol"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Royal Farms":{name:"Royal Farms",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Royalfarmsstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7374169",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Royal Farms","brand:wikidata":"Q7374169","brand:wikipedia":"en:Royal Farms",name:"Royal Farms"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Rubis":{name:"Rubis",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q3446514",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Rubis","brand:wikidata":"Q3446514","brand:wikipedia":"en:Rubis (company)",name:"Rubis"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Rutter's":{name:"Rutter's",icon:"maki-fuel",imageURL:"https://graph.facebook.com/rutters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7383544",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Rutter's","brand:wikidata":"Q7383544","brand:wikipedia":"en:Rutter's",name:"Rutter's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Safeway":{name:"Safeway",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Safeway/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1508234",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sainsbury's":{name:"Sainsbury's",icon:"maki-fuel",imageURL:"https://graph.facebook.com/sainsburys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q152096",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sam's Club":{name:"Sam's Club",icon:"maki-fuel",imageURL:"https://graph.facebook.com/samsclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1972120",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club"},terms:["sams club fuel center","sams club gas"],matchScore:2,suggestion:true},"amenity/fuel/Sasol":{name:"Sasol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SasolSACareers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q905998",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sasol","brand:wikidata":"Q905998","brand:wikipedia":"en:Sasol",name:"Sasol"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sea Oil":{name:"Sea Oil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SEAOIL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7389549",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sea Oil","brand:wikidata":"Q7389549","brand:wikipedia":"en:Seaoil Philippines",name:"Sea Oil"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sheetz":{name:"Sheetz",icon:"maki-fuel",imageURL:"https://graph.facebook.com/sheetz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7492551",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Shell":{name:"Shell",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Shell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154950",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell"},terms:["posto shell","shell gas station","shell petrol station","shell station","station shell"],matchScore:2,suggestion:true},"amenity/fuel/Shell Express":{name:"Shell Express",icon:"maki-fuel",imageURL:"https://graph.facebook.com/shell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2289188",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Shell Express","brand:wikidata":"Q2289188","brand:wikipedia":"nl:Shell Express",name:"Shell Express"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sinclair":{name:"Sinclair",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SinclairOilCorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1290900",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sinclair","brand:wikidata":"Q1290900","brand:wikipedia":"en:Sinclair Oil Corporation",name:"Sinclair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Slovnaft":{name:"Slovnaft",icon:"maki-fuel",imageURL:"https://graph.facebook.com/MySlovnaft/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1587563",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Slovnaft","brand:wikidata":"Q1587563","brand:wikipedia":"en:Slovnaft",name:"Slovnaft"},countryCodes:["cz","pl","sk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Socar":{name:"Socar",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SOCARofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1622293",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Socar","brand:wikidata":"Q1622293","brand:wikipedia":"en:SOCAR",name:"Socar"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sokimex":{name:"Sokimex",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SokimexGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1149575",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sokimex","brand:wikidata":"Q1149575","brand:wikipedia":"en:Sokimex",name:"Sokimex"},countryCodes:["kh"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Speedway":{name:"Speedway",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SpeedwayStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7575683",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sprint":{name:"Sprint",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SprintTankstelle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57588452",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sprint","brand:wikidata":"Q57588452",name:"Sprint"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/St1":{name:"St1",icon:"maki-fuel",imageURL:"https://graph.facebook.com/st1suomi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7592214",amenity:"fuel"},addTags:{amenity:"fuel",brand:"St1","brand:wikidata":"Q7592214","brand:wikipedia":"en:St1",name:"St1"},countryCodes:["fi","se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Star":{name:"Star",icon:"maki-fuel",imageURL:"https://graph.facebook.com/123909017686285/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2031095",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Star","brand:wikidata":"Q2031095","brand:wikipedia":"de:Orlen Deutschland",name:"Star"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Station Service E. Leclerc":{name:"Station Service E. Leclerc",icon:"maki-fuel",imageURL:"https://graph.facebook.com/E.Leclerc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1273376",amenity:"fuel"},addTags:{amenity:"fuel",brand:"E.Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"Station Service E. Leclerc"},terms:["e. leclerc"],matchScore:2,suggestion:true},"amenity/fuel/Statoil":{name:"Statoil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Equinor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1776022",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Statoil","brand:wikidata":"Q1776022","brand:wikipedia":"en:Equinor",name:"Statoil"},countryCodes:["dk","ee","ie","pl","ru","se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Stewart's":{name:"Stewart's",icon:"maki-fuel",imageURL:"https://graph.facebook.com/YourStewarts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7615690",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Stewart's","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sunoco":{name:"Sunoco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GoSunoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1423218",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sunoco","brand:wikidata":"Q1423218","brand:wikipedia":"en:Sunoco",name:"Sunoco"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Super U":{name:"Super U",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/TA":{name:"TA",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TravelCentersOfAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7835892",amenity:"fuel"},addTags:{amenity:"fuel",brand:"TA","brand:wikidata":"Q7835892","brand:wikipedia":"en:TravelCenters of America",name:"TA"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tamoil":{name:"Tamoil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TamoilNederland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q706793",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tamoil","brand:wikidata":"Q706793","brand:wikipedia":"en:Tamoil",name:"Tamoil"},countryCodes:["ch","de","es","fr","it","nl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tango":{name:"Tango",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TangoTankstations/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2423920",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tango","brand:wikidata":"Q2423920","brand:wikipedia":"nl:Tango CV",name:"Tango"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tanka":{name:"Tanka",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q10690640",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tanka","brand:wikidata":"Q10690640","brand:wikipedia":"sv:Tanka (bensinstationskedja)",name:"Tanka"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Teboil":{name:"Teboil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/teboil.fi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7692079",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Teboil","brand:wikidata":"Q7692079","brand:wikipedia":"en:Teboil",name:"Teboil"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tela":{name:"Tela",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TelaCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62534875",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tela","brand:wikidata":"Q62534875",name:"Tela"},countryCodes:["kh"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tempo":{name:"Tempo",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62535175",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tempo","brand:wikidata":"Q62535175",name:"Tempo"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Terpel":{name:"Terpel",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Terpel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7703003",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Terpel","brand:wikidata":"Q7703003","brand:wikipedia":"en:Terpel",name:"Terpel"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Terrible's":{name:"Terrible's",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TerribleHerbst/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7703648",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Terrible's","brand:wikidata":"Q7703648","brand:wikipedia":"en:Terrible Herbst",name:"Terrible's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tesco":{name:"Tesco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/1183230681723205/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487494",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Texaco":{name:"Texaco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TexacoWithTechron/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q775060",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Texaco","brand:wikidata":"Q775060","brand:wikipedia":"en:Texaco",name:"Texaco"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Thorntons":{name:"Thorntons",icon:"maki-fuel",imageURL:"https://graph.facebook.com/thorntonsllc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7796584",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Thorntons","brand:wikidata":"Q7796584","brand:wikipedia":"en:Thorntons LLC",name:"Thorntons"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tinq":{name:"Tinq",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2132028",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tinq","brand:wikidata":"Q2132028","brand:wikipedia":"nl:Tinq",name:"Tinq"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Top":{name:"Top",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TOPOilFuelingIreland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7693933",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Top","brand:wikidata":"Q7693933","brand:wikipedia":"en:Tedcastles Oil Products",name:"Top",official_name:"Tedcastles Oil Products"},countryCodes:["ie"],terms:["top oil"],matchScore:2,suggestion:true},"amenity/fuel/Topaz":{name:"Topaz",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/1167471677904773120/_vgQ82G0_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7824764",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Topaz","brand:wikidata":"Q7824764","brand:wikipedia":"en:Topaz Energy",name:"Topaz"},countryCodes:["ie"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Total":{name:"Total",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TotalUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154037",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total"},terms:["station total"],matchScore:2,suggestion:true},"amenity/fuel/Total Access":{name:"Total Access",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TotalUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154037",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Total Access","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total Access"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/TotalErg":{name:"TotalErg",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTotalerg%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3995933",amenity:"fuel"},addTags:{amenity:"fuel",brand:"TotalErg","brand:wikidata":"Q3995933","brand:wikipedia":"it:TotalErg",name:"TotalErg"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Turkey Hill":{name:"Turkey Hill",icon:"maki-fuel",imageURL:"https://graph.facebook.com/turkeyhillmm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42376970",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Turkey Hill","brand:wikidata":"Q42376970","brand:wikipedia":"en:Turkey Hill Minit Markets",name:"Turkey Hill"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Turmöl":{name:"Turmöl",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Turmoel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1473279",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Turmöl","brand:wikidata":"Q1473279","brand:wikipedia":"de:Turmöl",name:"Turmöl"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/UDF Fuel":{name:"UDF Fuel",icon:"maki-fuel",imageURL:"https://graph.facebook.com/UnitedDairyFarmers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887677",amenity:"fuel"},addTags:{amenity:"fuel",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"UDF Fuel",short_name:"UDF"},countryCodes:["us"],terms:["udf fuels","united dairy farmers"],matchScore:2,suggestion:true},"amenity/fuel/USA Gasoline":{name:"USA Gasoline",icon:"maki-fuel",imageURL:"https://graph.facebook.com/153091311519939/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17126373",amenity:"fuel"},addTags:{amenity:"fuel",brand:"USA Gasoline","brand:wikidata":"Q17126373","brand:wikipedia":"en:USA Gasoline",name:"USA Gasoline"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Ultramar":{name:"Ultramar",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ultramarcanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3548078",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Ultramar","brand:wikidata":"Q3548078","brand:wikipedia":"en:Ultramar",name:"Ultramar"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/United":{name:"United",icon:"maki-fuel",imageURL:"https://graph.facebook.com/unitedpetroleum/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28224393",amenity:"fuel"},addTags:{amenity:"fuel",brand:"United","brand:wikidata":"Q28224393","brand:wikipedia":"en:United Petroleum",name:"United"},countryCodes:["au"],terms:["united petroleum"],matchScore:2,suggestion:true},"amenity/fuel/Uno":{name:"Uno",icon:"maki-fuel",imageURL:"https://graph.facebook.com/UnoGasolineras/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62535574",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Uno","brand:wikidata":"Q62535574",name:"Uno"},countryCodes:["bz","cr","gt","hn","ni","sv"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Uno-X":{name:"Uno-X",icon:"maki-fuel",imageURL:"https://graph.facebook.com/unoxdanmark/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3362746",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Uno-X","brand:wikidata":"Q3362746","brand:wikipedia":"en:Uno-X",name:"Uno-X"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Valero":{name:"Valero",icon:"maki-fuel",imageURL:"https://graph.facebook.com/valeroenergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1283291",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Valero","brand:wikidata":"Q1283291","brand:wikipedia":"en:Valero Energy",name:"Valero"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Viada":{name:"Viada",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ViadaLietuva/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12663942",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Viada","brand:wikidata":"Q12663942","brand:wikipedia":"en:Lukoil Baltija",name:"Viada"},countryCodes:["lt","lv"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Vito":{name:"Vito",icon:"maki-fuel",imageURL:"https://graph.facebook.com/VITOCORSICA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62536473",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Vito","brand:wikidata":"Q62536473",name:"Vito"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/WOG":{name:"WOG",icon:"maki-fuel",imageURL:"https://graph.facebook.com/azsWOG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12072939",amenity:"fuel"},addTags:{amenity:"fuel",brand:"WOG","brand:wikidata":"Q12072939","brand:wikipedia":"en:WOG (gas stations)",name:"WOG"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Walmart":{name:"Walmart",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62606411",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Walmart","brand:wikidata":"Q62606411","brand:wikipedia":"en:Walmart",name:"Walmart"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Wawa":{name:"Wawa",icon:"maki-fuel",imageURL:"https://graph.facebook.com/wawa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5936320",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Westfalen":{name:"Westfalen",icon:"maki-fuel",imageURL:"https://graph.facebook.com/WestfalenAG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1411209",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Westfalen","brand:wikidata":"Q1411209","brand:wikipedia":"en:Westfalen AG",name:"Westfalen"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Woolworths Petrol":{name:"Woolworths Petrol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/woolworths/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5023980",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/XTR":{name:"XTR",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/1849683826/XTRASlogo_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q62537250",amenity:"fuel"},addTags:{amenity:"fuel",brand:"XTR","brand:wikidata":"Q62537250",name:"XTR"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/YPF":{name:"YPF",icon:"maki-fuel",imageURL:"https://graph.facebook.com/YPFoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2006989",amenity:"fuel"},addTags:{amenity:"fuel",brand:"YPF","brand:wikidata":"Q2006989","brand:wikipedia":"en:YPF",name:"YPF"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/YX Energi":{name:"YX Energi",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q4580519",amenity:"fuel"},addTags:{amenity:"fuel",brand:"YX Energi","brand:wikidata":"Q4580519","brand:wikipedia":"en:YX Energi",name:"YX Energi"},countryCodes:["dk","no"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Z":{name:"Z",icon:"maki-fuel",imageURL:"https://graph.facebook.com/zenergynz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8063337",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Z","brand:wikidata":"Q8063337","brand:wikipedia":"en:Z Energy",name:"Z"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/bft":{name:"bft",icon:"maki-fuel",imageURL:"https://graph.facebook.com/768624663275807/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1009104",amenity:"fuel"},addTags:{amenity:"fuel",brand:"bft","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"bft"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/din-X":{name:"din-X",icon:"maki-fuel",imageURL:"https://graph.facebook.com/bensinbolagettvartom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10472858",amenity:"fuel"},addTags:{amenity:"fuel",brand:"din-X","brand:wikidata":"Q10472858","brand:wikipedia":"sv:Din-X",name:"din-X"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/uSmile 昆仑好客":{name:"uSmile 昆仑好客",icon:"maki-fuel",imageURL:"https://graph.facebook.com/113494673346645/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66480830",amenity:"fuel"},addTags:{amenity:"fuel",brand:"uSmile 昆仑好客","brand:en":"uSmile","brand:wikidata":"Q66480830","brand:zh":"昆仑好客",name:"uSmile 昆仑好","name:en":"uSmile","name:zh":"昆仑好客"},countryCodes:["cn"],terms:["usmile","usmile 便利店","昆仑好","昆仑好客"],matchScore:2,suggestion:true},"amenity/fuel/Авіас":{name:"Авіас",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q12122687",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Авіас","brand:wikidata":"Q12122687","brand:wikipedia":"uk:Мережа АЗС Приват",name:"Авіас"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/БРСМ-Нафта":{name:"БРСМ-Нафта",icon:"maki-fuel",imageURL:"https://graph.facebook.com/BRSM.NAFTA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56356523",amenity:"fuel"},addTags:{amenity:"fuel",brand:"БРСМ-Нафта","brand:wikidata":"Q56356523","brand:wikipedia":"uk:БРСМ-Нафта",name:"БРСМ-Нафта"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Башнефть":{name:"Башнефть",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Bashneft/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q809985",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Башнефть","brand:en":"Bashneft","brand:wikidata":"Q809985","brand:wikipedia":"en:Bashneft",name:"Башнефть","name:en":"Bashneft"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Белоруснефть":{name:"Белоруснефть",icon:"maki-fuel",imageURL:"https://graph.facebook.com/belorusneft/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4082693",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Белоруснефть","brand:wikidata":"Q4082693","brand:wikipedia":"ru:Белоруснефть",name:"Белоруснефть"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Газпромнефть":{name:"Газпромнефть",icon:"maki-fuel",imageURL:"https://graph.facebook.com/gazprom.neft/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1461799",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Газпромнефть","brand:wikidata":"Q1461799","brand:wikipedia":"en:Gazprom Neft",name:"Газпромнефть"},countryCodes:["by","kg","kz","ru","tj"],terms:["газпром"],matchScore:2,suggestion:true},"amenity/fuel/Гелиос":{name:"Гелиос",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62286471",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Гелиос","brand:en":"Helios","brand:wikidata":"Q62286471",name:"Гелиос","name:en":"Helios"},countryCodes:["kz"],terms:["helios"],matchScore:2,suggestion:true},"amenity/fuel/ЕКА":{name:"ЕКА",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62543029",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ЕКА","brand:wikidata":"Q62543029",name:"ЕКА"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/КЛО":{name:"КЛО",icon:"maki-fuel",imageURL:"https://graph.facebook.com/klo.oil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60966526",amenity:"fuel"},addTags:{amenity:"fuel",brand:"КЛО","brand:en":"Klo","brand:wikidata":"Q60966526","brand:wikipedia":"ru:КЛО (сеть АЗС)",name:"КЛО","name:en":"Klo"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/КазМунайГаз":{name:"КазМунайГаз",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OzenMunaiGaz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1417227",amenity:"fuel"},addTags:{amenity:"fuel",brand:"КазМунайГаз","brand:wikidata":"Q1417227","brand:wikipedia":"en:KazMunayGas",name:"КазМунайГаз"},countryCodes:["kz"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Лукойл":{name:"Лукойл",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Lukoil.en/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q329347",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Лукойл","brand:wikidata":"Q329347","brand:wikipedia":"ru:Лукойл",name:"Лукойл"},terms:["лукоил"],matchScore:2,suggestion:true},"amenity/fuel/Макпетрол":{name:"Макпетрол",icon:"maki-fuel",imageURL:"https://graph.facebook.com/makpetrol.ultra/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1886438",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Макпетрол","brand:wikidata":"Q1886438","brand:wikipedia":"en:Makpetrol",name:"Макпетрол"},countryCodes:["mk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/НК Альянс":{name:"НК Альянс",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AllianceOilUkraine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4063700",amenity:"fuel"},addTags:{amenity:"fuel",brand:"НК Альянс","brand:en":"Alliance Oil","brand:ru":"НК Альянс","brand:wikidata":"Q4063700","brand:wikipedia":"ru:Альянс (компания)",name:"НК Альянс","name:en":"Alliance Oil","name:ru":"НК Альянс"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Нефтьмагистраль":{name:"Нефтьмагистраль",icon:"maki-fuel",imageURL:"https://graph.facebook.com/neftm.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62544323",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Нефтьмагистраль","brand:en":"Neftmagistral","brand:wikidata":"Q62544323",name:"Нефтьмагистраль","name:en":"Neftmagistral"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ОККО":{name:"ОККО",icon:"maki-fuel",imageURL:"https://graph.facebook.com/okkoua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7072617",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ОККО","brand:en":"OKKO","brand:wikidata":"Q7072617","brand:wikipedia":"en:OKKO",name:"ОККО","name:en":"OKKO"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ОМВ":{name:"ОМВ",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OMV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q168238",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ОМВ","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"ОМВ"},countryCodes:["bg","rs"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ПТК":{name:"ПТК",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ptk.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4360193",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ПТК","brand:en":"The Petersburg Fuel Company","brand:ru":"ПТК","brand:wikidata":"Q4360193","brand:wikipedia":"ru:Петербургская топливная компания",name:"ПТК","name:en":"The Petersburg Fuel Company","name:ru":"ПТК"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Петрол":{name:"Петрол",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetrolAD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24315",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Петрол","brand:en":"Petrol AD","brand:wikidata":"Q24315","brand:wikipedia":"en:Petrol AD",name:"Петрол","name:en":"Petrol AD"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Роснефть":{name:"Роснефть",icon:"maki-fuel",imageURL:"https://graph.facebook.com/RosneftRu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141123",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Роснефть","brand:en":"Rosneft","brand:ru":"Роснефть","brand:wikidata":"Q1141123","brand:wikipedia":"ru:Роснефть",name:"Роснефть","name:en":"Rosneft","name:ru":"Роснефть"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Сургутнефтегаз":{name:"Сургутнефтегаз",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSng2.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q680776",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Сургутнефтегаз","brand:en":"Surgutneftegas","brand:ru":"Сургутнефтегаз","brand:wikidata":"Q680776","brand:wikipedia":"en:Surgutneftegas",name:"Сургутнефтегаз","name:en":"Surgutneftegas","name:ru":"Сургутнефтегаз"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ТНК":{name:"ТНК",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2298901",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ТНК","brand:wikidata":"Q2298901","brand:wikipedia":"en:TNK-BP",name:"ТНК"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Татнефтепродукт":{name:"Татнефтепродукт",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62545686",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Татнефтепродукт","brand:en":"Tatnefteprodukt","brand:ru":"Татнефтепродукт","brand:wikidata":"Q62545686",name:"Татнефтепродукт","name:en":"Tatnefteprodukt","name:ru":"Татнефтепродукт"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Татнефть":{name:"Татнефть",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTatneft%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1616858",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Татнефть","brand:en":"Tatneft","brand:ru":"Татнефть","brand:wikidata":"Q1616858","brand:wikipedia":"en:Tatneft",name:"Татнефть","name:en":"Tatneft","name:ru":"Татнефть"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Укрнафта":{name:"Укрнафта",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUkrnafta.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2447961",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Укрнафта","brand:en":"Ukrnafta","brand:uk":"Укрнафта","brand:wikidata":"Q2447961","brand:wikipedia":"uk:Укрнафта",name:"Укрнафта","name:en":"Ukrnafta","name:uk":"Укрнафта"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/דור אלון":{name:"דור אלון",icon:"maki-fuel",imageURL:"https://graph.facebook.com/dor.alon.il/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16130352",amenity:"fuel"},addTags:{amenity:"fuel",brand:"דור אלון","brand:en":"Dor Alon","brand:he":"דור אלון","brand:wikidata":"Q16130352","brand:wikipedia":"he:דור אלון אנרגיה בישראל (1988)",name:"דור אלון","name:en":"Dor Alon","name:he":"דור אלון"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/סונול":{name:"סונול",icon:"maki-fuel",imageURL:"https://graph.facebook.com/sonolsogood/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3701622",amenity:"fuel"},addTags:{amenity:"fuel",brand:"סונול","brand:en":"Sonol","brand:he":"סונול","brand:wikidata":"Q3701622","brand:wikipedia":"en:Sonol",name:"סונול","name:en":"Sonol","name:he":"סונול"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/פז":{name:"פז",icon:"maki-fuel",imageURL:"https://graph.facebook.com/YellowPaz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2211731",amenity:"fuel"},addTags:{amenity:"fuel",brand:"פז","brand:en":"Paz","brand:he":"פז","brand:wikidata":"Q2211731","brand:wikipedia":"en:Paz Oil Company",name:"פז","name:en":"Paz","name:he":"פז"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ادنوك":{name:"ادنوك",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ADNOCDistribution/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q166729",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ادنوك","brand:ar":"ادنوك","brand:en":"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ادنوك","name:ar":"ادنوك","name:en":"ADNOC"},countryCodes:["ae"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/บางจาก":{name:"บางจาก",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Bangchak/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6579719",amenity:"fuel"},addTags:{amenity:"fuel",brand:"บางจาก","brand:en":"Bangchak","brand:th":"บางจาก","brand:wikidata":"Q6579719","brand:wikipedia":"th:บางจาก คอร์ปอเรชัน",name:"บางจาก","name:en":"Bangchak","name:th":"บางจาก"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ป.ต.ท.":{name:"ป.ต.ท.",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PTTNews/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1810389",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ป.ต.ท.","brand:en":"PTT","brand:th":"ป.ต.ท.","brand:wikidata":"Q1810389","brand:wikipedia":"th:ปตท.",name:"ป.ต.ท.","name:en":"PTT","name:th":"ป.ต.ท."},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/เชลล์":{name:"เชลล์",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Shell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154950",amenity:"fuel"},addTags:{amenity:"fuel",brand:"เชลล์","brand:en":"Shell","brand:th":"เชลล์","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"เชลล์","name:en":"Shell","name:th":"เชลล์"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/เอสโซ่":{name:"เอสโซ่",icon:"maki-fuel",imageURL:"https://graph.facebook.com/EssoGB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q867662",amenity:"fuel"},addTags:{amenity:"fuel",brand:"เอสโซ่","brand:en":"Esso","brand:th":"เอสโซ่","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"เอสโซ่","name:en":"Esso","name:th":"เอสโซ่"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/エッソ":{name:"エッソ",icon:"maki-fuel",imageURL:"https://graph.facebook.com/EssoGB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q867662",amenity:"fuel"},addTags:{amenity:"fuel",brand:"エッソ","brand:en":"Esso","brand:ja":"エッソ","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"エッソ","name:en":"Esso","name:ja":"エッソ"},countryCodes:["jp"],terms:["エッソ石油"],matchScore:2,suggestion:true},"amenity/fuel/エネオス":{name:"エネオス",icon:"maki-fuel",imageURL:"https://graph.facebook.com/eneos.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1640290",amenity:"fuel"},addTags:{amenity:"fuel",brand:"エネオス","brand:en":"JXTG Nippon Oil & Energy","brand:ja":"エネオス","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"エネオス","name:en":"JXTG Nippon Oil & Energy","name:ja":"エネオス"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/キグナス石油":{name:"キグナス石油",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q11296629",amenity:"fuel"},addTags:{amenity:"fuel",brand:"キグナス石油","brand:en":"KYGNUS","brand:ja":"キグナス石油","brand:wikidata":"Q11296629","brand:wikipedia":"ja:キグナス石油",name:"キグナス石油","name:en":"Kygnus","name:ja":"キグナス石油"},countryCodes:["jp"],terms:["キグナス"],matchScore:2,suggestion:true},"amenity/fuel/コスモ石油":{name:"コスモ石油",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCosmo%20Oil%20company%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2498318",amenity:"fuel"},addTags:{amenity:"fuel",brand:"コスモ石油","brand:en":"Cosmo Oil Company","brand:ja":"コスモ石油","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"コスモ石油","name:en":"Cosmo Oil Company","name:ja":"コスモ石油"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ゼネラル":{name:"ゼネラル",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTonenGeneral.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11528048",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ゼネラル","brand:en":"Tonen General","brand:ja":"ゼネラル","brand:wikidata":"Q11528048","brand:wikipedia":"ja:東燃ゼネラル石油",name:"ゼネラル","name:en":"Tonen General","name:ja":"ゼネラル"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/モービル":{name:"モービル",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ExxonandMobilStations/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3088656",amenity:"fuel"},addTags:{amenity:"fuel",brand:"モービル","brand:en":"Mobil","brand:ja":"モービル","brand:wikidata":"Q3088656","brand:wikipedia":"ja:モービル (ブランド)",name:"モービル","name:en":"Mobil","name:ja":"モービル"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/中国石化 Sinopec":{name:"中国石化 Sinopec",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Sinopec/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q831445",amenity:"fuel"},addTags:{amenity:"fuel",brand:"中国石化 Sinopec","brand:en":"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec","brand:zh":"中国石化",name:"中国石化 Sinopec","name:en":"Sinopec","name:zh":"中国石化"},countryCodes:["cn"],terms:["sinopec","sinopec fuel","中国石化","中国石化加油站"],matchScore:2,suggestion:true},"amenity/fuel/中国石油":{name:"中国石油",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetroChina.Ltd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q503182",amenity:"fuel"},addTags:{amenity:"fuel",brand:"中国石油","brand:en":"PetroChina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina","brand:zh":"中国石油",name:"中国石油","name:en":"PetroChina","name:zh":"中国石油"},countryCodes:["cn"],terms:["中油加油站"],matchScore:2,suggestion:true},"amenity/fuel/全國加油站":{name:"全國加油站",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q20410455",amenity:"fuel"},addTags:{amenity:"fuel",brand:"全國加油站","brand:en":"NPC","brand:wikidata":"Q20410455","brand:wikipedia":"zh:全國加油站","brand:zh":"全國加油站",name:"全國加油站","name:en":"NPC","name:zh":"全國加油站"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/出光":{name:"出光",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2216770",amenity:"fuel"},addTags:{amenity:"fuel",brand:"出光","brand:en":"Idemitsu Kosan","brand:ja":"出光","brand:wikidata":"Q2216770","brand:wikipedia":"en:Idemitsu Kosan",name:"出光","name:en":"Idemitsu Kosan","name:ja":"出光"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/台灣中油":{name:"台灣中油",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q21527177",amenity:"fuel"},addTags:{amenity:"fuel",brand:"台灣中油","brand:en":"CPC Corporation, Taiwan","brand:wikidata":"Q21527177","brand:wikipedia":"en:CPC Corporation, Taiwan","brand:zh":"台灣中油",name:"台灣中油","name:en":"CPC Corporation, Taiwan","name:zh":"台灣中油"},countryCodes:["tw"],terms:["中油"],matchScore:2,suggestion:true},"amenity/fuel/昭和シェル":{name:"昭和シェル",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q277115",amenity:"fuel"},addTags:{amenity:"fuel",brand:"昭和シェル","brand:en":"Showa Shell Sekiyu","brand:ja":"昭和シェル","brand:wikidata":"Q277115","brand:wikipedia":"en:Showa Shell Sekiyu",name:"昭和シェル","name:en":"Showa Shell Sekiyu","name:ja":"昭和シェル"},countryCodes:["jp"],terms:["昭和シェル石油"],matchScore:2,suggestion:true},"amenity/gambling/Buzz Bingo":{name:"Buzz Bingo",icon:"fas-coins",imageURL:"https://pbs.twimg.com/profile_images/1084856442736332800/GgVekVmJ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q60746117",amenity:"gambling"},addTags:{amenity:"gambling",brand:"Buzz Bingo","brand:wikidata":"Q60746117","brand:wikipedia":"en:Buzz Bingo",gambling:"bingo;slot_machines",name:"Buzz Bingo"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/hospital/Select Specialty Hospital":{name:"Select Specialty Hospital",icon:"maki-hospital",imageURL:"https://graph.facebook.com/SelectMedical/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q66360902",amenity:"hospital"},addTags:{amenity:"hospital",brand:"Select Specialty Hospital","brand:wikidata":"Q66360902",healthcare:"hospital",name:"Select Specialty Hospital"},reference:{key:"amenity",value:"hospital"},countryCodes:["us"],terms:["select speciality"],matchScore:2,suggestion:true},"amenity/hospital/Shriners Hospital for Children":{name:"Shriners Hospital for Children",icon:"maki-hospital",imageURL:"https://graph.facebook.com/ShrinersHospitalsforChildren/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q7504109",amenity:"hospital"},addTags:{amenity:"hospital",brand:"Shriners Hospitals for Children","brand:wikidata":"Q7504109","brand:wikipedia":"en:Shriners Hospitals for Children",healthcare:"hospital","healthcare:speciality":"paediatrics",name:"Shriners Hospitals for Children"},reference:{key:"amenity",value:"hospital"},countryCodes:["us"],terms:["shriners burn hospital","shriners hospital","shriners hospitals for children"],matchScore:2,suggestion:true},"amenity/hospital/VA Medical Center":{name:"VA Medical Center",icon:"maki-hospital",imageURL:"https://graph.facebook.com/VeteransHealth/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q6580225",amenity:"hospital"},addTags:{amenity:"hospital",brand:"VA","brand:wikidata":"Q6580225","brand:wikipedia":"en:Veterans Health Administration",healthcare:"hospital","healthcare:for":"veterans",name:"VA Medical Center",short_name:"VA"},reference:{key:"amenity",value:"hospital"},countryCodes:["us"],terms:["department of veterans affairs medical center","veterans administration","veterans administration hospital","veterans administration medical center","veterans affairs","veterans affairs hospital","veterans affairs medical center"],matchScore:2,suggestion:true},"amenity/ice_cream/Abbott's Frozen Custard":{name:"Abbott's Frozen Custard",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/AbbottsFrozenCustard/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4664334",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Abbott's Frozen Custard","brand:wikidata":"Q4664334","brand:wikipedia":"en:Abbott's Frozen Custard",name:"Abbott's Frozen Custard",short_name:"Abbott's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Amorino":{name:"Amorino",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/AmorinoGelato/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2843884",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Amorino","brand:wikidata":"Q2843884","brand:wikipedia":"fr:Amorino",name:"Amorino"},countryCodes:["ae","ch","cz","de","es","fr","gb","gr","ie","it","lu","ma","mt","mx","nc","pt","qa","re","us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Amy's Ice Creams":{name:"Amy's Ice Creams",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/amysicecreams/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4749045",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Amy's Ice Creams","brand:wikidata":"Q4749045","brand:wikipedia":"en:Amy's Ice Creams",name:"Amy's Ice Creams"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Andy's Frozen Custard":{name:"Andy's Frozen Custard",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/AndysFrozenCustard/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4760327",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Andy's Frozen Custard","brand:wikidata":"Q4760327","brand:wikipedia":"en:Andy's Frozen Custard",name:"Andy's Frozen Custard",short_name:"Andy's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Baskin-Robbins":{name:"Baskin-Robbins",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/baskinrobbinsUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q584601",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Baskin-Robbins","brand:wikidata":"Q584601","brand:wikipedia":"en:Baskin-Robbins",cuisine:"ice_cream",name:"Baskin-Robbins"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Ben & Jerry's":{name:"Ben & Jerry's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/BenandJerryAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q816412",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Ben & Jerry's","brand:wikidata":"Q816412","brand:wikipedia":"en:Ben & Jerry's",cuisine:"ice_cream",name:"Ben & Jerry's"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Bruster's Ice Cream":{name:"Bruster's Ice Cream",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/BrustersRealIceCream/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4979810",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Bruster's Ice Cream","brand:wikidata":"Q4979810","brand:wikipedia":"en:Bruster's Ice Cream",cuisine:"ice_cream",name:"Bruster's Ice Cream"},countryCodes:["us"],terms:["brusters"],matchScore:2,suggestion:true},"amenity/ice_cream/Carvel":{name:"Carvel",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/CarvelIceCream/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5047520",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Carvel","brand:wikidata":"Q5047520","brand:wikipedia":"en:Carvel (franchise)",cuisine:"ice_cream",name:"Carvel",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Cold Rock Ice Creamery":{name:"Cold Rock Ice Creamery",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/ColdRockIceCreamery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2982390",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Cold Rock Ice Creamery","brand:wikidata":"Q2982390","brand:wikipedia":"en:Cold Rock Ice Creamery",cuisine:"ice_cream",name:"Cold Rock Ice Creamery",takeaway:"yes"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Cold Stone Creamery":{name:"Cold Stone Creamery",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/coldstonecreamery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1094923",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Cold Stone Creamery","brand:wikidata":"Q1094923","brand:wikipedia":"en:Cold Stone Creamery",cuisine:"ice_cream",name:"Cold Stone Creamery"},countryCodes:["ng","us"],terms:["cold stone"],matchScore:2,suggestion:true},"amenity/ice_cream/D'Onofrio":{name:"D'Onofrio",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/DonofrioDOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5203166",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"D'Onofrio","brand:wikidata":"Q5203166","brand:wikipedia":"es:D'Onofrio",cuisine:"ice_cream",name:"D'Onofrio"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Freddo":{name:"Freddo",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/FreddoUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28823999",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Freddo","brand:wikidata":"Q28823999","brand:wikipedia":"es:Freddo",cuisine:"ice_cream",name:"Freddo"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Graeter's":{name:"Graeter's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/Graeters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5592430",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Graeter's","brand:wikidata":"Q5592430","brand:wikipedia":"en:Graeter's",cuisine:"ice_cream",name:"Graeter's",takeaway:"yes"},countryCodes:["us"],terms:["greaters"],matchScore:2,suggestion:true},"amenity/ice_cream/Grido":{name:"Grido",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/GridoHelados/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5885724",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Grido","brand:wikidata":"Q5885724","brand:wikipedia":"es:Grido Helado",cuisine:"ice_cream",name:"Grido"},countryCodes:["ar"],terms:["grido helado"],matchScore:2,suggestion:true},"amenity/ice_cream/Häagen-Dazs":{name:"Häagen-Dazs",icon:"fas-ice-cream",imageURL:"https://pbs.twimg.com/profile_images/827598241403371520/qHkQxKH3_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1143333",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Häagen-Dazs","brand:wikidata":"Q1143333","brand:wikipedia":"en:Häagen-Dazs",name:"Häagen-Dazs"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/La Michoacana":{name:"La Michoacana",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/LaMichoacana.sv/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17118857",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"La Michoacana","brand:wikidata":"Q17118857","brand:wikipedia":"en:Paletería La Michoacana",name:"La Michoacana"},countryCodes:["mx"],terms:["paleteria la michoacana"],matchScore:2,suggestion:true},"amenity/ice_cream/Marble Slab Creamery":{name:"Marble Slab Creamery",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/marbleslabcreamery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17020087",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Marble Slab Creamery","brand:wikidata":"Q17020087","brand:wikipedia":"en:Marble Slab Creamery",cuisine:"ice_cream",name:"Marble Slab Creamery"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Menchie's":{name:"Menchie's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/MyMenchies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6816528",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Menchie's","brand:wikidata":"Q6816528","brand:wikipedia":"en:Menchie's Frozen Yogurt",cuisine:"frozen_yogurt",name:"Menchie's"},countryCodes:["ae","bh","bs","ca","cn","gb","in","jp","kw","qa","sa","us"],terms:["menchie's frozen yoghurt","menchie's frozen yogurt"],matchScore:2,suggestion:true},"amenity/ice_cream/Pinkberry":{name:"Pinkberry",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/pinkberry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2904053",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Pinkberry","brand:wikidata":"Q2904053","brand:wikipedia":"en:Pinkberry",cuisine:"frozen_yogurt",name:"Pinkberry",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Ralph's Italian Ices":{name:"Ralph's Italian Ices",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/RalphsFamous/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62576909",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Ralph's Italian Ices","brand:wikidata":"Q62576909",cuisine:"ice_cream",name:"Ralph's Italian Ices",official_name:"Ralph's Famous Italian Ices"},countryCodes:["us"],terms:["ralphs famous italian ices and ice cream","ralphs italian ice","ralphs italian ices and ice cream"],matchScore:2,suggestion:true},"amenity/ice_cream/Rita's Italian Ice":{name:"Rita's Italian Ice",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/RitasItalianIceCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7336456",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Rita's Italian Ice","brand:wikidata":"Q7336456","brand:wikipedia":"en:Rita's Italian Ice",cuisine:"ice_cream",name:"Rita's Italian Ice"},countryCodes:["us"],terms:["ritas","ritas water ice"],matchScore:2,suggestion:true},"amenity/ice_cream/Shake's":{name:"Shake's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/shakeswlr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17032842",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Shake's","brand:wikidata":"Q17032842","brand:wikipedia":"en:Shake's Frozen Custard",name:"Shake's",official_name:"Shake’s Frozen Custard"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/TCBY":{name:"TCBY",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/tcby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7669631",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"TCBY","brand:wikidata":"Q7669631","brand:wikipedia":"en:TCBY",cuisine:"frozen_yogurt",name:"TCBY",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Yogen Früz":{name:"Yogen Früz",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/yogenfruz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8054358",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Yogen Früz","brand:wikidata":"Q8054358","brand:wikipedia":"en:Yogen Früz",cuisine:"frozen_yogurt",name:"Yogen Früz",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Yogurt Mountain":{name:"Yogurt Mountain",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/YogurtMountain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8054427",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Yogurt Mountain","brand:wikidata":"Q8054427","brand:wikipedia":"en:Yogurt Mountain",cuisine:"frozen_yogurt",name:"Yogurt Mountain",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Yogurtland":{name:"Yogurtland",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/yogurtland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8054428",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Yogurtland","brand:wikidata":"Q8054428","brand:wikipedia":"en:Yogurtland",cuisine:"frozen_yogurt",name:"Yogurtland",takeaway:"yes"},countryCodes:["ae","au","sg","th","us","ve"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/smöoy":{name:"smöoy",icon:"fas-ice-cream",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSm%C3%B6oy-logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q21573945",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"smöoy","brand:wikidata":"Q21573945","brand:wikipedia":"es:Smöoy",name:"smöoy",official_name:"Softy Cream"},countryCodes:["ao","ci","cn","dz","ec","es","fr","gb","gn","it","ma","pa","pe","pt","re","sa"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/sweetFrog":{name:"sweetFrog",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/sweetfrogfroyo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16952110",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"sweetFrog","brand:wikidata":"Q16952110","brand:wikipedia":"en:Sweet Frog",cuisine:"frozen_yogurt",name:"sweetFrog"},countryCodes:["us"],terms:["sweetfrog frozen yogurt","sweetfrog premium frozen yogurt"],matchScore:2,suggestion:true},"amenity/ice_cream/サーティワンアイスクリーム":{name:"サーティワンアイスクリーム",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/baskinrobbinsUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q584601",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"バスキン・ロビンス","brand:en":"Baskin-Robbins","brand:ja":"バスキン・ロビンス","brand:wikidata":"Q584601","brand:wikipedia":"ja:バスキン・ロビンス",cuisine:"ice_cream",name:"サーティワンアイスクリーム","name:en":"Baskin-Robbins","name:ja":"サーティワンアイスクリーム"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/kindergarten/Children's Learning Adventure":{name:"Children's Learning Adventure",icon:"temaki-school",imageURL:"https://graph.facebook.com/Childrenslearningadventure/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q64821213",amenity:"kindergarten"},addTags:{after_school:"yes",amenity:"kindergarten",brand:"Children's Learning Adventure","brand:wikidata":"Q64821213","brand:wikipedia":"en:Children's Learning Adventure",fee:"yes","isced:level":"0",name:"Children's Learning Adventure",nursery:"yes",preschool:"yes",short_name:"CLA"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/kindergarten/Childtime":{name:"Childtime",icon:"temaki-school",imageURL:"https://graph.facebook.com/Childtime/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q64877793",amenity:"kindergarten"},addTags:{amenity:"kindergarten",brand:"Childtime","brand:wikidata":"Q64877793",fee:"yes","isced:level":"0",name:"Childtime",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:["childtime learning center","childtime learning centers"],matchScore:2,suggestion:true},"amenity/kindergarten/KinderCare":{name:"KinderCare",icon:"temaki-school",imageURL:"https://graph.facebook.com/kindercare/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q6410551",amenity:"kindergarten"},addTags:{after_school:"yes",alt_name:"KinderCare Learning Center",amenity:"kindergarten",brand:"KinderCare","brand:wikidata":"Q6410551","brand:wikipedia":"en:KinderCare Learning Centers",fee:"yes","isced:level":"0",name:"KinderCare",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/kindergarten/La Petite Academy":{name:"La Petite Academy",icon:"temaki-school",imageURL:"https://graph.facebook.com/LaPetiteAcademy/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q64877784",amenity:"kindergarten"},addTags:{amenity:"kindergarten",brand:"La Petite Academy","brand:wikidata":"Q64877784",fee:"yes","isced:level":"0",name:"La Petite Academy",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:["la petite"],matchScore:2,suggestion:true},"amenity/kindergarten/New Horizon Academy":{name:"New Horizon Academy",icon:"temaki-school",imageURL:"https://pbs.twimg.com/profile_images/778681004206592001/ZQF3Eurh_bigger.jpg",geometry:["area","point"],tags:{"brand:wikidata":"Q64821306",amenity:"kindergarten"},addTags:{after_school:"yes",amenity:"kindergarten",brand:"New Horizon Academy","brand:wikidata":"Q64821306",fee:"yes","isced:level":"0",name:"New Horizon Academy",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/kindergarten/Primrose School":{name:"Primrose School",icon:"temaki-school",imageURL:"https://graph.facebook.com/PrimroseSchools/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q7243677",amenity:"kindergarten"},addTags:{after_school:"yes",alt_name:"Primrose Schools",amenity:"kindergarten",brand:"Primrose School","brand:wikidata":"Q7243677","brand:wikipedia":"en:Primrose Schools",fee:"yes","isced:level":"0",max_age:"12",min_age:"6 weeks",name:"Primrose School",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:["primrose"],matchScore:2,suggestion:true},"amenity/kindergarten/The Children's Courtyard":{name:"The Children's Courtyard",icon:"temaki-school",imageURL:"https://graph.facebook.com/ChildrensCourtyard/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q64877852",amenity:"kindergarten"},addTags:{amenity:"kindergarten",brand:"The Children's Courtyard","brand:wikidata":"Q64877852",fee:"yes","isced:level":"0",name:"The Children's Courtyard",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:["children's courtyard"],matchScore:2,suggestion:true},"amenity/kindergarten/The Goddard School":{name:"The Goddard School",icon:"temaki-school",imageURL:"https://graph.facebook.com/goddardschool/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q5576260",amenity:"kindergarten"},addTags:{after_school:"yes",alt_name:"Goddard School",amenity:"kindergarten",brand:"The Goddard School","brand:wikidata":"Q5576260","brand:wikipedia":"en:Goddard School",fee:"yes","isced:level":"0",min_age:"6 weeks",name:"The Goddard School",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/kindergarten/Tutor Time":{name:"Tutor Time",icon:"temaki-school",imageURL:"https://graph.facebook.com/TutorTime/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q64877826",amenity:"kindergarten"},addTags:{amenity:"kindergarten",brand:"Tutor Time","brand:wikidata":"Q64877826",fee:"yes","isced:level":"0",name:"Tutor Time",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:["tutor time child care","tutor time child care learning center","tutor time learning center","tutor time learning centers"],matchScore:2,suggestion:true},"amenity/language_school/AEON":{name:"AEON",icon:"temaki-school",imageURL:"https://graph.facebook.com/AEONCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4687898",amenity:"language_school"},addTags:{amenity:"language_school",brand:"AEON","brand:en":"Aeon","brand:ja":"AEON","brand:ja-Hira":"イーオン","brand:ja-Latn":"AEON","brand:wikidata":"Q4687898","brand:wikipedia":"ja:イーオン","language:en":"main",name:"AEON","name:en":"Aeon","name:ja":"AEON","name:ja-Hira":"イーオン","name:ja-Latn":"AEON"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/Berlitz":{name:"Berlitz",icon:"temaki-school",imageURL:"https://graph.facebook.com/BerlitzUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q821960",amenity:"language_school"},addTags:{amenity:"language_school",brand:"Berlitz","brand:wikidata":"Q821960","brand:wikipedia":"en:Berlitz Corporation",name:"Berlitz"},terms:[],matchScore:2,suggestion:true},"amenity/language_school/ECC外語学院":{name:"ECC外語学院",icon:"temaki-school",imageURL:"https://graph.facebook.com/ecc.co.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5322655",amenity:"language_school"},addTags:{amenity:"language_school",brand:"ECC外語学院","brand:en":"ECC Foreign Language Institute","brand:ja":"ECC外語学院","brand:ja-Hira":"イーシーシーがいごがくいん","brand:ja-Latn":"ECC Gaigo Gakuin","brand:wikidata":"Q5322655","brand:wikipedia":"ja:ECC総合教育機関","language:en":"main",name:"ECC外語学院","name:en":"ECC Foreign Language Institute","name:ja":"ECC外語学院","name:ja-Hira":"イーシーシーがいごがくいん","name:ja-Latn":"ECC Gaigo Gakuin",short_name:"ECC","short_name:en":"ECC","short_name:ja":"ECC","short_name:ja-Hira":"イーシーシー","short_name:ja-Latn":"ECC"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/ELS":{name:"ELS",icon:"temaki-school",imageURL:"https://graph.facebook.com/els/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5323325",amenity:"language_school"},addTags:{amenity:"language_school",brand:"ELS","brand:en":"ELS","brand:wikidata":"Q5323325","brand:wikipedia":"en:ELS Language Centers","language:en":"main",name:"ELS","name:en":"ELS",official_name:"ELS Language Centers","official_name:en":"ELS Language Centers"},countryCodes:["ca","in","my","pa","sa","tr","us","vn"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/GABA":{name:"GABA",icon:"temaki-school",imageURL:"https://graph.facebook.com/gaba.corp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5515241",amenity:"language_school"},addTags:{amenity:"language_school",brand:"GABA","brand:en":"Gaba","brand:ja":"GABA","brand:ja-Kana":"ガバ","brand:ja-Latn":"GABA","brand:wikidata":"Q5515241","brand:wikipedia":"ja:GABA (企業)","language:en":"main",name:"GABA","name:en":"Gaba","name:ja":"GABA","name:ja-Kana":"ガバ","name:ja-Latn":"GABA"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/NOVA":{name:"NOVA",icon:"temaki-school",imageURL:"https://graph.facebook.com/nova.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7064000",amenity:"language_school"},addTags:{amenity:"language_school",brand:"NOVA","brand:en":"Nova","brand:ja":"NOVA","brand:ja-Hira":"ノヴァ","brand:ja-Latn":"NOVA","brand:wikidata":"Q7064000","brand:wikipedia":"ja:NOVA","language:en":"main",name:"NOVA","name:en":"Nova","name:ja":"NOVA","name:ja-Hira":"ノヴァ","name:ja-Latn":"NOVA"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/Shane English School":{name:"Shane English School",icon:"temaki-school",imageURL:"https://graph.facebook.com/ShaneEnglishSchool/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17054332",amenity:"language_school"},addTags:{amenity:"language_school",brand:"Shane English School","brand:en":"Shane English School","brand:ja":"シェーン英会話","brand:ja-Latn":"Shēn Eikaiwa","brand:wikidata":"Q17054332","brand:wikipedia":"en:Shane English School","language:en":"main",name:"Shane English School","name:en":"Shane English School","name:ja":"シェーン英会話","name:ja-Latn":"Shēn Eikaiwa"},countryCodes:["cn","dz","gb","hk","id","kr","pl","th","tw","vn"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/シェーン英会話":{name:"シェーン英会話",icon:"temaki-school",imageURL:"https://graph.facebook.com/ShaneEnglishSchool/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17054332",amenity:"language_school"},addTags:{amenity:"language_school",brand:"シェーン英会話","brand:en":"Shane English School","brand:ja":"シェーン英会話","brand:ja-Latn":"Shēn Eikaiwa","brand:wikidata":"Q17054332","brand:wikipedia":"ja:シェーン英会話スクール","language:en":"main",name:"シェーン英会話","name:en":"Shane English School","name:ja":"シェーン英会話","name:ja-Latn":"Shēn Eikaiwa"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/セイハ英語学院":{name:"セイハ英語学院",icon:"temaki-school",geometry:["point","area"],tags:{"brand:wikidata":"Q7446694",amenity:"language_school"},addTags:{amenity:"language_school",brand:"セイハ英語学院","brand:en":"Seiha English Academy","brand:ja":"セイハ英語学院","brand:ja-Hani":"セイハえいごがくいん","brand:ja-Latn":"Seiha Eigo Gakuin","brand:wikidata":"Q7446694","language:en":"main",name:"セイハ英語学院","name:en":"Seiha English Academy","name:ja":"セイハ英語学院","name:ja-Hani":"セイハえいごがくいん","name:ja-Latn":"Seiha Eigo Gakuin"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/ベルリッツ":{name:"ベルリッツ",icon:"temaki-school",imageURL:"https://graph.facebook.com/BerlitzJapan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4892545",amenity:"language_school"},addTags:{amenity:"language_school",brand:"ベルリッツ","brand:en":"Berlitz","brand:ja":"ベルリッツ","brand:ja-Hira":"ベルリッツ","brand:wikidata":"Q4892545","brand:wikipedia":"ja:ベルリッツ・ジャパン",name:"ベルリッツ","name:en":"Berlitz","name:ja":"ベルリッツ","name:ja-Hira":"ベルリッツ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/ペッピーキッズクラブ":{name:"ペッピーキッズクラブ",icon:"temaki-school",imageURL:"https://graph.facebook.com/1431440567161295/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7166471",amenity:"language_school"},addTags:{amenity:"language_school",brand:"ペッピーキッズクラブ","brand:en":"Peppy Kids Club","brand:ja":"ペッピーキッズクラブ","brand:ja-Latn":"Peppi Kizzu Kurabu","brand:wikidata":"Q7166471","brand:wikipedia":"ja:ペッピーキッズクラブ","language:en":"main",name:"ペッピーキッズクラブ","name:en":"Peppy Kids Club","name:ja":"ペッピーキッズクラブ","name:ja-Latn":"Peppi Kizzu Kurabu"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/money_transfer/Express Union":{name:"Express Union",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/ExpressUnionFinance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3062276",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"Express Union","brand:wikidata":"Q3062276","brand:wikipedia":"fr:Express Union",name:"Express Union"},countryCodes:["td"],terms:[],matchScore:2,suggestion:true},"amenity/money_transfer/Hoa Phát":{name:"Hoa Phát",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/692515699349135364/P4MUVfcJ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q65116775",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"Hoa Phát","brand:wikidata":"Q65116775",name:"Hoa Phát","name:vi":"Hoa Phát"},countryCodes:["us"],terms:["hoa phat goi tien","hoa phat gui tien"],matchScore:2,suggestion:true},"amenity/money_transfer/MoneyGram":{name:"MoneyGram",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/moneygram/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1944412",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"MoneyGram","brand:wikidata":"Q1944412","brand:wikipedia":"en:MoneyGram",name:"MoneyGram"},countryCodes:["de","fr","gr"],terms:[],matchScore:2,suggestion:true},"amenity/money_transfer/Orange Money":{name:"Orange Money",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/orange/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16668220",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"Orange Money","brand:wikidata":"Q16668220","brand:wikipedia":"en:Orange Money",name:"Orange Money"},countryCodes:["ml"],terms:[],matchScore:2,suggestion:true},"amenity/money_transfer/Western Union":{name:"Western Union",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/WesternUnion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q861042",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"},terms:[],matchScore:2,suggestion:true},"amenity/parking/Diamond Parking":{name:"Diamond Parking",icon:"temaki-car_parked",imageURL:"https://graph.facebook.com/DiamondParkingService/picture?type=large",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q5270887",amenity:"parking"},addTags:{amenity:"parking",brand:"Diamond Parking","brand:wikidata":"Q5270887","brand:wikipedia":"en:Diamond Parking",name:"Diamond Parking"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/parking/Parking Company of America":{name:"Parking Company of America",icon:"temaki-car_parked",imageURL:"https://graph.facebook.com/parkingcompanyofamerica/picture?type=large",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q65491376",amenity:"parking"},addTags:{amenity:"parking",brand:"Parking Company of America","brand:wikidata":"Q65491376",fee:"yes",name:"Parking Company of America",short_name:"PCA"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/parking/SP+":{name:"SP+",icon:"temaki-car_parked",imageURL:"https://graph.facebook.com/sppluscorp/picture?type=large",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q7598289",amenity:"parking"},addTags:{alt_name:"SP Plus",amenity:"parking",brand:"SP+","brand:wikidata":"Q7598289","brand:wikipedia":"en:SP Plus Corporation",fee:"yes",name:"SP+"},countryCodes:["ca","us"],terms:["central parking","central parking system","standard parking"],matchScore:2,suggestion:true},"amenity/parking/Wilson Parking":{name:"Wilson Parking",icon:"temaki-car_parked",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q28448427",amenity:"parking"},addTags:{amenity:"parking",brand:"Wilson Parking","brand:wikidata":"Q28448427","brand:wikipedia":"en:Wilson Parking",fee:"yes",name:"Wilson Parking"},countryCodes:["au","cn","hk","ko","nz","sg"],terms:["wilson"],matchScore:2,suggestion:true},"amenity/parking/タイムズ":{name:"タイムズ",icon:"temaki-car_parked",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q11089693",amenity:"parking"},addTags:{amenity:"parking",brand:"タイムズ","brand:en":"Times","brand:ja":"タイムズ","brand:wikidata":"Q11089693","brand:wikipedia":"ja:パーク24",fee:"yes",name:"Times","name:en":"タイムズ","name:ja":"Times"},countryCodes:["jp"],terms:["times 24th","タイムズ24"],matchScore:2,suggestion:true},"amenity/payment_centre/Abitab":{name:"Abitab",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/Abitaboficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16488129",amenity:"payment_centre"},addTags:{amenity:"payment_centre",brand:"Abitab","brand:wikidata":"Q16488129","brand:wikipedia":"es:Abitab",name:"Abitab"},countryCodes:["uy"],terms:[],matchScore:2,suggestion:true},"amenity/payment_centre/Rapipago":{name:"Rapipago",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/Rapipago/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6100413",amenity:"payment_centre"},addTags:{amenity:"payment_centre",brand:"Rapipago","brand:wikidata":"Q6100413","brand:wikipedia":"es:Rapipago",name:"Rapipago"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/payment_terminal/Qiwi":{name:"Qiwi",icon:"far-credit-card",imageURL:"https://graph.facebook.com/qiwirussia/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q4047736",amenity:"payment_terminal"},addTags:{amenity:"payment_terminal",brand:"Qiwi","brand:wikidata":"Q4047736","brand:wikipedia":"en:Qiwi",name:"Qiwi"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/payment_terminal/ПриватБанк":{name:"ПриватБанк",icon:"far-credit-card",imageURL:"https://graph.facebook.com/privatbank/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q1515015",amenity:"payment_terminal"},addTags:{amenity:"payment_terminal",brand:"ПриватБанк","brand:wikidata":"Q1515015","brand:wikipedia":"en:PrivatBank",name:"ПриватБанк"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/payment_terminal/Элекснет":{name:"Элекснет",icon:"far-credit-card",imageURL:"https://graph.facebook.com/elecsnet/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q4530795",amenity:"payment_terminal"},addTags:{amenity:"payment_terminal",brand:"Элекснет","brand:wikidata":"Q4530795","brand:wikipedia":"ru:Элекснет",name:"Элекснет"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/36,6":{name:"36,6",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/apteka366/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q226889",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"36,6","brand:wikidata":"Q226889","brand:wikipedia":"ru:36,6 (аптечная сеть)",healthcare:"pharmacy",name:"36,6"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ru"],terms:["аптека 36,6"],matchScore:2,suggestion:true},"amenity/pharmacy/Amcal":{name:"Amcal",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/AmcalAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367373",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Amcal","brand:wikidata":"Q63367373",healthcare:"pharmacy",name:"Amcal"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["amcal pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Apollo Pharmacy":{name:"Apollo Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ApolloPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62562612",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Apollo Pharmacy","brand:wikidata":"Q62562612",healthcare:"pharmacy",name:"Apollo Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Apotek Hjärtat":{name:"Apotek Hjärtat",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/apotekhjartat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10416114",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Apotek Hjärtat","brand:wikidata":"Q10416114","brand:wikipedia":"sv:Apotek Hjärtat",healthcare:"pharmacy",name:"Apotek Hjärtat"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Bartell Drugs":{name:"Bartell Drugs",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/BartellDrugs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4865152",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Bartell Drugs","brand:wikidata":"Q4865152","brand:wikipedia":"en:Bartell Drugs",healthcare:"pharmacy",name:"Bartell Drugs"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Benavides":{name:"Benavides",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasBenavides/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5435613",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Benavides"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Benu":{name:"Benu",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/PharmaciesBENUSwitzerland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62562792",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Benu","brand:wikidata":"Q62562792",healthcare:"pharmacy",name:"Benu"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Blooms The Chemist":{name:"Blooms The Chemist",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/BloomsTheChemistPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367543",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Blooms The Chemist","brand:wikidata":"Q63367543",healthcare:"pharmacy",name:"Blooms The Chemist",shop:"chemist"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Boots":{name:"Boots",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/bootsuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6123139",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Boots","brand:wikidata":"Q6123139","brand:wikipedia":"en:Boots UK",healthcare:"pharmacy",name:"Boots"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:["boots pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Boticas y Salud":{name:"Boticas y Salud",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/844038768993601/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563126",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Boticas y Salud","brand:wikidata":"Q62563126",healthcare:"pharmacy",name:"Boticas y Salud"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Brookshire Brothers Pharmacy":{name:"Brookshire Brothers Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/BrookshireBros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4975084",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Brookshire Brothers Pharmacy","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",healthcare:"pharmacy",name:"Brookshire Brothers Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/CVS Pharmacy":{name:"CVS Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/CVS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2078880",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"CVS Pharmacy","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",healthcare:"pharmacy",name:"CVS Pharmacy",short_name:"CVS"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Camelia":{name:"Camelia",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/camelia.vaistine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15867413",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Camelia","brand:wikidata":"Q15867413","brand:wikipedia":"lt:Nemuno vaistinė",healthcare:"pharmacy",name:"Camelia"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Catena":{name:"Catena",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciaCatena/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24035728",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Catena","brand:wikidata":"Q24035728","brand:wikipedia":"ro:Farmacia Catena",healthcare:"pharmacy",name:"Catena"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Chemist King Discount Pharmacy":{name:"Chemist King Discount Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ChemistKingDiscountPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367667",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Chemist King Discount Pharmacy","brand:wikidata":"Q63367667",healthcare:"pharmacy",name:"Chemist King Discount Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["chemist king","chemist king discount pharmacies"],matchScore:2,suggestion:true},"amenity/pharmacy/Chemist Warehouse":{name:"Chemist Warehouse",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ChemistWarehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48782120",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Chemist Warehouse","brand:wikidata":"Q48782120","brand:wikipedia":"en:Chemist Warehouse",healthcare:"pharmacy",name:"Chemist Warehouse"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Clicks":{name:"Clicks",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ClicksSouthAfrica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563622",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Clicks","brand:wikidata":"Q62563622",healthcare:"pharmacy",name:"Clicks"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Costco Pharmacy":{name:"Costco Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Costco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q715583",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Costco Pharmacy","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",healthcare:"pharmacy",name:"Costco Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Cruz Azul":{name:"Cruz Azul",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/CruzAzul.Farmacias/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62108219",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Cruz Azul","brand:wikidata":"Q62108219",healthcare:"pharmacy",name:"Cruz Azul"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ec"],terms:["farmacias cruz azul"],matchScore:2,suggestion:true},"amenity/pharmacy/Cruz Verde":{name:"Cruz Verde",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasCruzVerde1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5856071",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Cruz Verde","brand:wikidata":"Q5856071","brand:wikipedia":"es:Farmacias Cruz Verde",healthcare:"pharmacy",name:"Cruz Verde"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cl"],terms:["farmacias cruz verde"],matchScore:2,suggestion:true},"amenity/pharmacy/Day Lewis Pharmacy":{name:"Day Lewis Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/DayLewisPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563772",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Day Lewis Pharmacy","brand:wikidata":"Q62563772",healthcare:"pharmacy",name:"Day Lewis Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Dbam o Zdrowie":{name:"Dbam o Zdrowie",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/dbamozdrowie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563833",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Dbam o Zdrowie","brand:wikidata":"Q62563833",healthcare:"pharmacy",name:"Dbam o Zdrowie"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Dr. Max":{name:"Dr. Max",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/lekarnadrmax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56317371",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Dr. Max","brand:wikidata":"Q56317371","brand:wikipedia":"fr:Dr.Max",healthcare:"pharmacy",name:"Dr. Max"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cz","pl","sk"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Droga Raia":{name:"Droga Raia",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/DrogaRaia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10357101",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Droga Raia","brand:wikidata":"Q10357101","brand:wikipedia":"pt:RaiaDrogasil",healthcare:"pharmacy",name:"Droga Raia"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Drogaria São Paulo":{name:"Drogaria São Paulo",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/DrogariaSaoPaulo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5308184",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Drogaria São Paulo","brand:wikidata":"Q5308184","brand:wikipedia":"en:Grupo DPSP",healthcare:"pharmacy",name:"Drogaria São Paulo"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Drogasil":{name:"Drogasil",icon:"maki-pharmacy",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDrogazil.logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5308185",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Drogasil","brand:wikidata":"Q5308185","brand:wikipedia":"pt:Drogasil",healthcare:"pharmacy",name:"Drogasil",wheelchair:"yes"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Duane Reade":{name:"Duane Reade",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/duanereade/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5310380",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Duane Reade","brand:wikidata":"Q5310380","brand:wikipedia":"en:Duane Reade",healthcare:"pharmacy",name:"Duane Reade"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Eurovaistinė":{name:"Eurovaistinė",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q267205",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Eurovaistinė","brand:wikidata":"Q267205","brand:wikipedia":"en:Euroapotheca",healthcare:"pharmacy",name:"Eurovaistinė"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Extrafarma":{name:"Extrafarma",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Extrafarma/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20055480",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Extrafarma","brand:wikidata":"Q20055480","brand:wikipedia":"pt:Extrafarma",healthcare:"pharmacy",name:"Extrafarma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Familiprix":{name:"Familiprix",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Familiprix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3064881",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Familiprix","brand:wikidata":"Q3064881","brand:wikipedia":"fr:Familiprix",healthcare:"pharmacy",name:"Familiprix"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacenter (Colombia)":{name:"Farmacenter (Colombia)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmacenterCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563928",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacenter","brand:wikidata":"Q62563928",healthcare:"pharmacy",name:"Farmacenter"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacia Benavides":{name:"Farmacia Benavides",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasBenavides/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5435613",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacia Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Farmacia Benavides"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacia Guadalajara":{name:"Farmacia Guadalajara",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/1204192654420000769/YTWjQ-IM_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5435609",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacia Guadalajara","brand:wikidata":"Q5435609","brand:wikipedia":"en:Farmacias Guadalajara",healthcare:"pharmacy",name:"Farmacia Guadalajara"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["mx"],terms:["farmacias guadalajara"],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias Ahumada":{name:"Farmacias Ahumada",icon:"maki-pharmacy",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFarmacias%20ahumada.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5856069",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias Ahumada","brand:wikidata":"Q5856069","brand:wikipedia":"es:Farmacias Ahumada",healthcare:"pharmacy",name:"Farmacias Ahumada"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias Económicas (Ecuador)":{name:"Farmacias Económicas (Ecuador)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasEconomicasEc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62108380",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias Económicas","brand:wikidata":"Q62108380",healthcare:"pharmacy",name:"Farmacias Económicas"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias Económicas (El Salvador)":{name:"Farmacias Económicas (El Salvador)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasEconomicas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62108397",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias Económicas","brand:wikidata":"Q62108397",healthcare:"pharmacy",name:"Farmacias Económicas"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["sv"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias Similares":{name:"Farmacias Similares",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/DrSimiChile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564610",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias Similares","brand:wikidata":"Q62564610",healthcare:"pharmacy",name:"Farmacias Similares"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cl","gt","mx"],terms:["similares"],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias del Ahorro":{name:"Farmacias del Ahorro",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FAhorro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62086647",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias del Ahorro","brand:wikidata":"Q62086647",healthcare:"pharmacy",name:"Farmacias del Ahorro"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["mx"],terms:["farmacia del ahorro"],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias del Dr. Simi":{name:"Farmacias del Dr. Simi",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/DrSimiChile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564610",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias del Dr. Simi","brand:wikidata":"Q62564610",healthcare:"pharmacy",name:"Farmacias del Dr. Simi"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cl","gt","mx"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacity":{name:"Farmacity",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Farmacity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5856076",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacity","brand:wikidata":"Q5856076","brand:wikipedia":"es:Farmacity",healthcare:"pharmacy",name:"Farmacity"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ra"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmahorro":{name:"Farmahorro",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmahorroVe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20015002",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmahorro","brand:wikidata":"Q20015002","brand:wikipedia":"es:Farmahorro",healthcare:"pharmacy",name:"Farmahorro"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmatodo":{name:"Farmatodo",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/farmatodovenezuela/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5856092",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmatodo","brand:wikidata":"Q5856092","brand:wikipedia":"es:Farmatodo",healthcare:"pharmacy",name:"Farmatodo"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Felicia":{name:"Felicia",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/farmaciafelicia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564805",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Felicia","brand:wikidata":"Q62564805",healthcare:"pharmacy",name:"Felicia"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["md"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Fred Meyer Pharmacy":{name:"Fred Meyer Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/fredmeyer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5495932",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",healthcare:"pharmacy",name:"Fred Meyer Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:["fred meyer"],matchScore:2,suggestion:true},"amenity/pharmacy/Fybeca":{name:"Fybeca",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/fybeca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564822",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Fybeca","brand:wikidata":"Q62564822",healthcare:"pharmacy",name:"Fybeca"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Generika":{name:"Generika",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/GenerikaDrugstorePH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564876",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Generika","brand:wikidata":"Q62564876",healthcare:"pharmacy",name:"Generika"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ph"],terms:["generika drugstore"],matchScore:2,suggestion:true},"amenity/pharmacy/Gintarinė vaistinė":{name:"Gintarinė vaistinė",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Gintarine.Vaistine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15857801",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Gintarinė vaistinė","brand:wikidata":"Q15857801","brand:wikipedia":"lt:Gintarinė vaistinė",healthcare:"pharmacy",name:"Gintarinė vaistinė"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Guardian (Asia)":{name:"Guardian (Asia)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Guardianmy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63371124",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q63371124","brand:wikipedia":"ms:Guardian Malaysia",healthcare:"pharmacy",name:"Guardian"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["bn","id","kh","my","sg","vn"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Guardian (Australia)":{name:"Guardian (Australia)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/GuardianAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367814",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q63367814",healthcare:"pharmacy",name:"Guardian"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["guardian pharmacies","guardian pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Guardian (Canada)":{name:"Guardian (Canada)",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q65553864",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q65553864",healthcare:"pharmacy",name:"Guardian"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/H-E-B Pharmacy":{name:"H-E-B Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/HEB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q830621",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"H-E-B Pharmacy","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",healthcare:"pharmacy",name:"H-E-B Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Health Mart":{name:"Health Mart",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/HealthMart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5690597",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Health Mart","brand:wikidata":"Q5690597","brand:wikipedia":"en:Health Mart",healthcare:"pharmacy",name:"Health Mart"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:["health mart pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Hy-Vee Pharmacy":{name:"Hy-Vee Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/HyVee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1639719",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Hy-Vee Pharmacy","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",healthcare:"pharmacy",name:"Hy-Vee Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/I.D.A.":{name:"I.D.A.",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q65553883",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"I.D.A.","brand:wikidata":"Q65553883",healthcare:"pharmacy",name:"I.D.A."},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Inkafarma":{name:"Inkafarma",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/inkafarmaperu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10997748",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Inkafarma","brand:wikidata":"Q10997748","brand:wikipedia":"es:Inkafarma",healthcare:"pharmacy",name:"Inkafarma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Jean Coutu":{name:"Jean Coutu",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/JeanCoutu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3117457",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Jean Coutu","brand:wikidata":"Q3117457","brand:wikipedia":"fr:Groupe Jean Coutu",healthcare:"pharmacy",name:"Jean Coutu"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Kimia Farma":{name:"Kimia Farma",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/KimiaFarmaCare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11264892",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Kimia Farma","brand:wikidata":"Q11264892","brand:wikipedia":"en:Kimia Farma",healthcare:"pharmacy",name:"Kimia Farma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Kinney Drugs":{name:"Kinney Drugs",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/kinneydrugs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6414090",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Kinney Drugs","brand:wikidata":"Q6414090","brand:wikipedia":"en:Kinney Drugs",healthcare:"pharmacy",name:"Kinney Drugs"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Lloyds Pharmacy":{name:"Lloyds Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/lloydspharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6662870",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Lloyds Pharmacy","brand:wikidata":"Q6662870","brand:wikipedia":"en:LloydsPharmacy",healthcare:"pharmacy",name:"Lloyds Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["be","gb","ie","im"],terms:["lloyds"],matchScore:2,suggestion:true},"amenity/pharmacy/London Drugs":{name:"London Drugs",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/LondonDrugs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3258955",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"London Drugs","brand:wikidata":"Q3258955","brand:wikipedia":"en:London Drugs",healthcare:"pharmacy",name:"London Drugs"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Longs Drugs (Hawaii)":{name:"Longs Drugs (Hawaii)",icon:"maki-pharmacy",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLongs%20Drugs%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q16931196",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Longs Drugs","brand:wikidata":"Q16931196","brand:wikipedia":"en:Longs Drugs",healthcare:"pharmacy",name:"Longs Drugs",short_name:"Longs"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Mannings":{name:"Mannings",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/manningshongkong/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13646560",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Mannings","brand:wikidata":"Q13646560","brand:wikipedia":"en:Mannings",healthcare:"pharmacy",name:"Mannings"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cn","hk","mo"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Marc's Pharmacy":{name:"Marc's Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/MarcsStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17080259",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Marc's","brand:wikidata":"Q17080259","brand:wikipedia":"en:Marc's",healthcare:"pharmacy",name:"Marc's Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/MedPlus":{name:"MedPlus",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/842606018131443712/P1glGiqa_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q65684234",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"MedPlus","brand:wikidata":"Q65684234","brand:wikipedia":"en:MedPlus",healthcare:"pharmacy",name:"MedPlus"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Mercury Drug":{name:"Mercury Drug",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/mercurydrugph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6818610",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Mercury Drug","brand:wikidata":"Q6818610","brand:wikipedia":"en:Mercury Drug",healthcare:"pharmacy",name:"Mercury Drug"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Mifarma":{name:"Mifarma",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/MifarmaPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564998",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Mifarma","brand:wikidata":"Q62564998",healthcare:"pharmacy",name:"Mifarma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Multipharma":{name:"Multipharma",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Multipharma.be/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62565018",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Multipharma","brand:wikidata":"Q62565018",healthcare:"pharmacy",name:"Multipharma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Mēness aptieka":{name:"Mēness aptieka",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/MenessAptieka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57583051",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Mēness aptieka","brand:wikidata":"Q57583051",healthcare:"pharmacy",name:"Mēness aptieka"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["lv"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Pague Menos":{name:"Pague Menos",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/farmaciaspaguemenos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7124466",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Pague Menos","brand:wikidata":"Q7124466","brand:wikipedia":"pt:Pague Menos",healthcare:"pharmacy",name:"Pague Menos"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:["farmácia pague menos"],matchScore:2,suggestion:true},"amenity/pharmacy/Panvel":{name:"Panvel",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/panvelfarmacias/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10344254",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Panvel","brand:wikidata":"Q10344254","brand:wikipedia":"pt:Panvel",healthcare:"pharmacy",name:"Panvel"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/PharmaChoice":{name:"PharmaChoice",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/875423108513091584/kcsmBdjL_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7180716",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"PharmaChoice","brand:wikidata":"Q7180716","brand:wikipedia":"en:PharmaChoice",healthcare:"pharmacy",name:"PharmaChoice"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/PharmaSave (Australia)":{name:"PharmaSave (Australia)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/PharmasaveBrentfordSquare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367906",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"PharmaSave","brand:wikidata":"Q63367906",healthcare:"pharmacy",name:"PharmaSave"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Pharmacie Principale":{name:"Pharmacie Principale",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/PharmaciePrincipale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1547749",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Pharmacie Principale","brand:wikidata":"Q1547749","brand:wikipedia":"fr:Groupe PP Holding",healthcare:"pharmacy",name:"Pharmacie Principale"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Pharmacy 4 Less":{name:"Pharmacy 4 Less",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/pharmacy4less/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367608",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Pharmacy 4 Less","brand:wikidata":"Q63367608",healthcare:"pharmacy",name:"Pharmacy 4 Less"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Pharmaprix":{name:"Pharmaprix",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/shoppersdrugmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1820137",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Pharmaprix","brand:wikidata":"Q1820137","brand:wikipedia":"fr:Pharmaprix",healthcare:"pharmacy",name:"Pharmaprix"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Pharmasave (Canada)":{name:"Pharmasave (Canada)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/PharmasaveAtlantic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17093822",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Pharmasave","brand:wikidata":"Q17093822","brand:wikipedia":"en:Pharmasave",healthcare:"pharmacy",name:"Pharmasave"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Priceline Pharmacy":{name:"Priceline Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/PricelineAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7242652",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Priceline Pharmacy","brand:wikidata":"Q7242652","brand:wikipedia":"en:Priceline (Australia)",healthcare:"pharmacy",name:"Priceline Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["priceline"],matchScore:2,suggestion:true},"amenity/pharmacy/Punto Farma (Colombia)":{name:"Punto Farma (Colombia)",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q62595271",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595271",healthcare:"pharmacy",name:"Punto Farma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Punto Farma (Honduras)":{name:"Punto Farma (Honduras)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasPuntoFarma/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62595229",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595229",healthcare:"pharmacy",name:"Punto Farma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["hn"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Punto Farma (Paraguay)":{name:"Punto Farma (Paraguay)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Puntofarmapy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62595220",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595220",healthcare:"pharmacy",name:"Punto Farma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["py"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Remedy'sRx":{name:"Remedy'sRx",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q65553833",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Remedy'sRx","brand:wikidata":"Q65553833",healthcare:"pharmacy",name:"Remedy'sRx"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Rexall":{name:"Rexall",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Rexall/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7319360",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Rexall","brand:wikidata":"Q7319360","brand:wikipedia":"en:Rexall",healthcare:"pharmacy",name:"Rexall"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Rite Aid":{name:"Rite Aid",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/riteaid/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3433273",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Rite Aid","brand:wikidata":"Q3433273","brand:wikipedia":"en:Rite Aid",healthcare:"pharmacy",name:"Rite Aid"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:["rite aid pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Rose Pharmacy":{name:"Rose Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/RosePharmacyInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62663208",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Rose Pharmacy","brand:wikidata":"Q62663208",healthcare:"pharmacy",name:"Rose Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Rowlands Pharmacy":{name:"Rowlands Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/RowlandsPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62663235",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Rowlands Pharmacy","brand:wikidata":"Q62663235",healthcare:"pharmacy",name:"Rowlands Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Safeway":{name:"Safeway",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Safeway/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1508234",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",healthcare:"pharmacy",name:"Safeway"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/SalcoBrand":{name:"SalcoBrand",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Salcobrand/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2877054",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"SalcoBrand","brand:wikidata":"Q2877054","brand:wikipedia":"es:Farmacias Salcobrand",healthcare:"pharmacy",name:"SalcoBrand"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cl"],terms:["farmacias salcobrand"],matchScore:2,suggestion:true},"amenity/pharmacy/Sana Sana":{name:"Sana Sana",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasSanaSanaEc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564499",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Sana Sana","brand:wikidata":"Q62564499",healthcare:"pharmacy",name:"Sana Sana"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ec"],terms:["farmacias sana sana"],matchScore:2,suggestion:true},"amenity/pharmacy/Sensiblu":{name:"Sensiblu",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Sensiblu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12740640",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Sensiblu","brand:wikidata":"Q12740640","brand:wikipedia":"ro:Sensiblu",healthcare:"pharmacy",name:"Sensiblu"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Shoppers Drug Mart":{name:"Shoppers Drug Mart",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/shoppersdrugmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1820137",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Shoppers Drug Mart","brand:wikidata":"Q1820137","brand:wikipedia":"en:Shoppers Drug Mart",healthcare:"pharmacy",name:"Shoppers Drug Mart"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/South Star Drug":{name:"South Star Drug",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/southstardrugph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7568544",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"South Star Drug","brand:wikidata":"Q7568544","brand:wikipedia":"en:South Star Drug",healthcare:"pharmacy",name:"South Star Drug"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Superdrug":{name:"Superdrug",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Superdrug/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7643261",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Superdrug","brand:wikidata":"Q7643261","brand:wikipedia":"en:Superdrug",healthcare:"pharmacy",name:"Superdrug"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/São João":{name:"São João",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/farmaciassaojoao/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62663306",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"São João","brand:wikidata":"Q62663306",healthcare:"pharmacy",name:"São João"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/TGP":{name:"TGP",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/tgpthegenericspharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61948677",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"The Generics Pharmacy","brand:wikidata":"Q61948677",healthcare:"pharmacy",name:"TGP",official_name:"The Generics Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/TerryWhite Chemmart":{name:"TerryWhite Chemmart",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/terrywhitechemmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24089773",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"TerryWhite Chemmart","brand:wikidata":"Q24089773","brand:wikipedia":"en:Terry White Chemmart",healthcare:"pharmacy",name:"TerryWhite Chemmart"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["terrywhite","terrywhite chemist","terrywhite chemists"],matchScore:2,suggestion:true},"amenity/pharmacy/UFS":{name:"UFS",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ufsdispensaries/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367573",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"UFS","brand:wikidata":"Q63367573",healthcare:"pharmacy",name:"UFS"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["ufs dispensaries"],matchScore:2,suggestion:true},"amenity/pharmacy/Unichem Pharmacy":{name:"Unichem Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/UnichemNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62663379",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Unichem Pharmacy","brand:wikidata":"Q62663379",healthcare:"pharmacy",name:"Unichem Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Uniprix":{name:"Uniprix",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/uniprix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q683265",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Uniprix","brand:wikidata":"Q683265","brand:wikipedia":"fr:Uniprix (pharmacies)",healthcare:"pharmacy",name:"Uniprix"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Walgreens":{name:"Walgreens",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/walgreens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1591889",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",healthcare:"pharmacy",name:"Walgreens"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:["walgreens pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Walmart Pharmacy":{name:"Walmart Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",healthcare:"pharmacy",name:"Walmart Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca","us"],terms:["walmart"],matchScore:2,suggestion:true},"amenity/pharmacy/Watsons":{name:"Watsons",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/WatsonsPH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7974785",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",healthcare:"pharmacy",name:"Watsons"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Well Pharmacy":{name:"Well Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/PharmacyWell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7726524",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Well Pharmacy","brand:wikidata":"Q7726524","brand:wikipedia":"en:Well Pharmacy",healthcare:"pharmacy",name:"Well Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:["well"],matchScore:2,suggestion:true},"amenity/pharmacy/Ziko Apteka":{name:"Ziko Apteka",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ZikoUrodaiZdrowie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63432892",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Ziko Apteka","brand:wikidata":"Q63432892",healthcare:"pharmacy",name:"Ziko Apteka",short_name:"Ziko"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/А5":{name:"А5",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/apteka5/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62663476",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"А5","brand:wikidata":"Q62663476",healthcare:"pharmacy",name:"А5"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Бережная аптека":{name:"Бережная аптека",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/BereznayaApteka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62664194",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Бережная аптека","brand:wikidata":"Q62664194",healthcare:"pharmacy",name:"Бережная аптека"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Ригла":{name:"Ригла",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/rigla.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4394431",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Ригла","brand:wikidata":"Q4394431","brand:wikipedia":"ru:Ригла",healthcare:"pharmacy",name:"Ригла"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/סופר-פארם":{name:"סופר-פארם",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/super.pharm.co.il/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13220217",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"סופר-פארם","brand:he":"סופר-פארם","brand:wikidata":"Q13220217","brand:wikipedia":"en:Super-Pharm",healthcare:"pharmacy",name:"סופר-פארם","name:he":"סופר-פארם"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/くすりの福太郎":{name:"くすりの福太郎",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/kusurinofukutaro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17214460",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"くすりの福太郎","brand:en":"Kusurino FUKUTARO","brand:ja":"くすりの福太郎","brand:wikidata":"Q17214460","brand:wikipedia":"ja:くすりの福太郎",healthcare:"pharmacy",name:"くすりの福太郎","name:en":"Kusurino Fukutaro","name:ja":"くすりの福太郎"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ウェルパーク":{name:"ウェルパーク",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11288610",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ウェルパーク","brand:ja":"ウェルパーク","brand:wikidata":"Q11288610","brand:wikipedia":"ja:ウェルパーク",healthcare:"pharmacy",name:"ウェルパーク","name:en":"Welpark","name:ja":"ウェルパーク"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ウエルシア":{name:"ウエルシア",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/WelciaBHG.SG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11288684",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ウエルシア","brand:en":"Welcia","brand:ja":"ウエルシア","brand:wikidata":"Q11288684","brand:wikipedia":"ja:ウエルシアホールディングス",healthcare:"pharmacy",name:"ウエルシア","name:en":"Welcia","name:ja":"ウエルシア"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ウエルシア薬局":{name:"ウエルシア薬局",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11288687",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ウエルシア薬局","brand:en":"Welcia Yakkyoku","brand:ja":"ウエルシア薬局","brand:wikidata":"Q11288687","brand:wikipedia":"ja:ウエルシア薬局",healthcare:"pharmacy",name:"ウエルシア薬局","name:en":"Welcia Yakkyoku","name:ja":"ウエルシア薬局"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/カワチ薬品":{name:"カワチ薬品",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11295397",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"カワチ薬品","brand:en":"Cawachi","brand:ja":"カワチ薬品","brand:wikidata":"Q11295397","brand:wikipedia":"ja:カワチ薬品",healthcare:"pharmacy",name:"カワチ薬品","name:en":"Cawachi","name:ja":"カワチ薬品"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/キリン堂":{name:"キリン堂",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11297751",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"キリン堂","brand:en":"Kirindo","brand:ja":"キリン堂","brand:wikidata":"Q11297751","brand:wikipedia":"ja:キリン堂",healthcare:"pharmacy",name:"キリン堂","name:en":"Kirindo","name:ja":"キリン堂"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/クスリのアオキ":{name:"クスリのアオキ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11298661",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"クスリのアオキ","brand:en":"Kusuri no Aoki","brand:ja":"クスリのアオキ","brand:wikidata":"Q11298661","brand:wikipedia":"ja:クスリのアオキ",healthcare:"pharmacy",name:"クスリのアオキ","name:en":"Kusuri no Aoki","name:ja":"クスリのアオキ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/クリエイト":{name:"クリエイト",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q17215731",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"クリエイト","brand:en":"Create","brand:ja":"クリエイト","brand:wikidata":"Q17215731","brand:wikipedia":"ja:クリエイト",healthcare:"pharmacy",name:"クリエイト","name:en":"Create","name:ja":"クリエイト"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/クリエイトSD":{name:"クリエイトSD",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11299163",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"クリエイトSD","brand:en":"CreateSD","brand:ja":"クリエイトSD","brand:wikidata":"Q11299163","brand:wikipedia":"ja:クリエイトSDホールディングス",healthcare:"pharmacy",name:"クリエイトSD","name:en":"CreateSD","name:ja":"クリエイトSD"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/コクミン":{name:"コクミン",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/803158983611559936/LnjULpI0_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11301923",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"コクミン","brand:en":"Kokumin","brand:ja":"コクミン","brand:wikidata":"Q11301923","brand:wikipedia":"ja:コクミン",healthcare:"pharmacy",name:"コクミン","name:en":"Kokumin","name:ja":"コクミン",official_name:"コクミンドラッグ","official_name:en":"Kokumin Drug","official_name:ja":"コクミンドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ココカラファイン":{name:"ココカラファイン",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/1211925973156786176/HbdgyoLj_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11301948",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ココカラファイン","brand:en":"Cocokara Fine","brand:ja":"ココカラファイン","brand:wikidata":"Q11301948","brand:wikipedia":"ja:ココカラファイン",healthcare:"pharmacy",name:"ココカラファイン","name:en":"Cocokara Fine","name:ja":"ココカラファイン"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/サツドラ":{name:"サツドラ",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/780691690440962048/RYUgJsKP_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11304804",amenity:"pharmacy"},addTags:{"alt_name:en":"Satsudora",amenity:"pharmacy",brand:"サツドラ","brand:en":"Sapporo Drug Store","brand:ja":"サツドラ","brand:wikidata":"Q11304804",healthcare:"pharmacy",name:"サツドラ","name:en":"Sapporo Drug Store","name:ja":"サツドラ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:["サッポロドラッグストアー"],matchScore:2,suggestion:true},"amenity/pharmacy/サンドラッグ":{name:"サンドラッグ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11305867",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"サンドラッグ","brand:en":"Sundrug","brand:ja":"サンドラッグ","brand:wikidata":"Q11305867","brand:wikipedia":"ja:サンドラッグ",healthcare:"pharmacy",name:"サンドラッグ","name:en":"Sundrug","name:ja":"サンドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/スギ薬局":{name:"スギ薬局",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11311460",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"スギ薬局","brand:en":"Sugi Pharmacy","brand:ja":"スギ薬局","brand:wikidata":"Q11311460","brand:wikipedia":"ja:スギ薬局",healthcare:"pharmacy",name:"スギ薬局","name:en":"Sugi Pharmacy","name:ja":"スギ薬局"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/セイジョー":{name:"セイジョー",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11314133",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"セイジョー","brand:en":"Seijo","brand:ja":"セイジョー","brand:wikidata":"Q11314133","brand:wikipedia":"ja:セイジョー",healthcare:"pharmacy",name:"セイジョー","name:en":"Seijo","name:ja":"セイジョー"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ダイコクドラッグ":{name:"ダイコクドラッグ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11316754",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ダイコクドラッグ","brand:en":"Daikoku Drug","brand:ja":"ダイコクドラッグ","brand:wikidata":"Q11316754","brand:wikipedia":"ja:ダイコク",healthcare:"pharmacy",name:"ダイコクドラッグ","name:en":"Daikoku Drug","name:ja":"ダイコクドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ツルハドラッグ":{name:"ツルハドラッグ",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/1061863510546640898/j9crJ6gs_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11318826",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ツルハドラッグ","brand:en":"Tsuruha","brand:ja":"ツルハドラッグ","brand:wikidata":"Q11318826","brand:wikipedia":"ja:ツルハ",healthcare:"pharmacy",name:"ツルハドラッグ","name:en":"Tsuruha","name:ja":"ツルハドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/トモズ":{name:"トモズ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q7820097",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"トモズ","brand:en":"Tomod's","brand:ja":"トモズ","brand:wikidata":"Q7820097","brand:wikipedia":"ja:トモズ",healthcare:"pharmacy",name:"トモズ","name:en":"Tomod's","name:ja":"トモズ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:["トモズエキスプレス"],matchScore:2,suggestion:true},"amenity/pharmacy/ドラッグイレブン":{name:"ドラッグイレブン",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11323075",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ドラッグイレブン","brand:en":"Drug Eleven","brand:ja":"ドラッグイレブン","brand:wikidata":"Q11323075","brand:wikipedia":"ja:ドラッグイレブン",healthcare:"pharmacy",name:"ドラッグイレブン","name:en":"Drug Eleven","name:ja":"ドラッグイレブン"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ドラッグセイムス":{name:"ドラッグセイムス",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11456137",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ドラッグセイムス","brand:en":"Seims","brand:ja":"ドラッグセイムス","brand:wikidata":"Q11456137","brand:wikipedia":"ja:富士薬品",healthcare:"pharmacy",name:"ドラッグセイムス","name:en":"Drug Seims","name:ja":"ドラッグセイムス"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/マツモトキヨシ":{name:"マツモトキヨシ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q8014776",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"マツモトキヨシ","brand:en":"Matsukiyo","brand:ja":"マツモトキヨシ","brand:wikidata":"Q8014776","brand:wikipedia":"ja:マツモトキヨシ",healthcare:"pharmacy",name:"マツモトキヨシ","name:en":"Matsukiyo","name:ja":"マツモトキヨシ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Australia Post":{name:"Australia Post",icon:"maki-post",imageURL:"https://graph.facebook.com/australiapost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1142936",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Australia Post","brand:wikidata":"Q1142936","brand:wikipedia":"en:Australia Post",name:"Australia Post"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/CTT (Macau)":{name:"CTT (Macau)",icon:"maki-post",imageURL:"https://graph.facebook.com/109452512407680/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q909429",amenity:"post_office"},addTags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q909429","brand:wikipedia":"en:CTT (Macau)",name:"CTT"},countryCodes:["mo"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/CTT (Portugal)":{name:"CTT (Portugal)",icon:"maki-post",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F2017-12-04%20Post%20office%20sign%2C%20Avenida%20Dr.%20Francisco%20S%C3%A1%20Carneiro%2C%20Albufeira.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1024518",amenity:"post_office"},addTags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q1024518","brand:wikipedia":"en:CTT Correios de Portugal, S.A.",name:"CTT"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Canada Post":{name:"Canada Post",icon:"maki-post",imageURL:"https://graph.facebook.com/canadapost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1032001",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Canada Post","brand:wikidata":"Q1032001","brand:wikipedia":"en:Canada Post",name:"Canada Post"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correios":{name:"Correios",icon:"maki-post",imageURL:"https://graph.facebook.com/correios/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3375004",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correios","brand:wikidata":"Q3375004","brand:wikipedia":"en:Correios",name:"Correios"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correo Argentino":{name:"Correo Argentino",icon:"maki-post",imageURL:"https://graph.facebook.com/CorreoOficialSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4036566",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correo Argentino","brand:wikidata":"Q4036566","brand:wikipedia":"en:Correo Argentino",name:"Correo Argentino"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correos de Chile":{name:"Correos de Chile",icon:"maki-post",imageURL:"https://graph.facebook.com/correoschile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5172893",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correos de Chile","brand:wikidata":"Q5172893","brand:wikipedia":"en:Correos de Chile",name:"Correos de Chile"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correos de Costa Rica":{name:"Correos de Costa Rica",icon:"maki-post",imageURL:"https://graph.facebook.com/CorreosdeCostaRica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5172894",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correos de Costa Rica","brand:wikidata":"Q5172894","brand:wikipedia":"en:Correos de Costa Rica",name:"Correos de Costa Rica"},countryCodes:["cr"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correos de México":{name:"Correos de México",icon:"maki-post",imageURL:"https://graph.facebook.com/CorreosdeMexico.Mexpost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5172898",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correos de México","brand:wikidata":"Q5172898","brand:wikipedia":"en:Correos de México",name:"Correos de México"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/DHL":{name:"DHL",icon:"maki-post",imageURL:"https://graph.facebook.com/dhl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q489815",amenity:"post_office"},addTags:{amenity:"post_office",brand:"DHL","brand:wikidata":"Q489815","brand:wikipedia":"en:DHL",name:"DHL"},terms:["dhl paketshop"],matchScore:2,suggestion:true},"amenity/post_office/DPD Paketshop":{name:"DPD Paketshop",icon:"maki-post",imageURL:"https://graph.facebook.com/350375105088695/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q541030",amenity:"post_office"},addTags:{amenity:"post_office",brand:"DPD Paketshop","brand:wikidata":"Q541030","brand:wikipedia":"en:DPDgroup",name:"DPD Paketshop"},countryCodes:["at","de","pl"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Deutsche Post":{name:"Deutsche Post",icon:"maki-post",imageURL:"https://graph.facebook.com/deutschepost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157645",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"},countryCodes:["de"],terms:["deutsche post ag","deutsche post filiale"],matchScore:2,suggestion:true},"amenity/post_office/Fancourier":{name:"Fancourier",icon:"maki-post",imageURL:"https://graph.facebook.com/FANCourier/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12727984",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Fancourier","brand:wikidata":"Q12727984","brand:wikipedia":"ro:FAN Courier Express",name:"Fancourier"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/FedEx":{name:"FedEx",icon:"maki-post",imageURL:"https://graph.facebook.com/FedEx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q459477",amenity:"post_office"},addTags:{amenity:"post_office",brand:"FedEx","brand:wikidata":"Q459477","brand:wikipedia":"en:FedEx",name:"FedEx"},terms:[],matchScore:2,suggestion:true},"amenity/post_office/Hermes Paketshop":{name:"Hermes Paketshop",icon:"maki-post",imageURL:"https://graph.facebook.com/Hermesparcels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1613532",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Hermes Paketshop","brand:wikidata":"Q1613532","brand:wikipedia":"en:Hermes Group",name:"Hermes Paketshop"},countryCodes:["de"],terms:["hermes"],matchScore:2,suggestion:true},"amenity/post_office/LBC":{name:"LBC",icon:"maki-post",imageURL:"https://graph.facebook.com/LBCexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17075584",amenity:"post_office"},addTags:{amenity:"post_office",brand:"LBC","brand:wikidata":"Q17075584","brand:wikipedia":"en:LBC Express",name:"LBC"},countryCodes:["ph"],terms:["lbc express"],matchScore:2,suggestion:true},"amenity/post_office/La Poste":{name:"La Poste",icon:"maki-post",imageURL:"https://graph.facebook.com/laposte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q373724",amenity:"post_office"},addTags:{amenity:"post_office",brand:"La Poste","brand:wikidata":"Q373724","brand:wikipedia":"fr:La Poste (entreprise française)",name:"La Poste"},terms:[],matchScore:2,suggestion:true},"amenity/post_office/MRW":{name:"MRW",icon:"maki-post",imageURL:"https://graph.facebook.com/mrwespana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23767821",amenity:"post_office"},addTags:{amenity:"post_office",brand:"MRW","brand:wikidata":"Q23767821","brand:wikipedia":"es:MRW",name:"MRW"},countryCodes:["ad","es","gi","pt","ve"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Mail Boxes Etc.":{name:"Mail Boxes Etc.",icon:"maki-post",imageURL:"https://graph.facebook.com/mbeitalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1139182",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Mail Boxes Etc.","brand:wikidata":"Q1139182","brand:wikipedia":"en:Mail Boxes Etc.",name:"Mail Boxes Etc."},terms:[],matchScore:2,suggestion:true},"amenity/post_office/OCA":{name:"OCA",icon:"maki-post",imageURL:"https://graph.facebook.com/OCACorreoOK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5172887",amenity:"post_office"},addTags:{amenity:"post_office",brand:"OCA","brand:wikidata":"Q5172887","brand:wikipedia":"es:Correo OCA",name:"OCA"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Oficina de Correos":{name:"Oficina de Correos",icon:"maki-post",imageURL:"https://graph.facebook.com/correos.es/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q776605",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Oficina de Correos","brand:wikidata":"Q776605","brand:wikipedia":"es:Correos (España)",name:"Oficina de Correos"},countryCodes:["es"],terms:["correos"],matchScore:2,suggestion:true},"amenity/post_office/PHLPost":{name:"PHLPost",icon:"maki-post",imageURL:"https://graph.facebook.com/PHLPost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1406037",amenity:"post_office"},addTags:{amenity:"post_office",brand:"PHLPost","brand:wikidata":"Q1406037","brand:wikipedia":"en:Philippine Postal Corporation",name:"PHLPost",official_name:"Philippine Postal Corporation"},countryCodes:["ph"],terms:["phl"],matchScore:2,suggestion:true},"amenity/post_office/Poczta Polska":{name:"Poczta Polska",icon:"maki-post",imageURL:"https://graph.facebook.com/pocztapolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q168833",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Poczta Polska","brand:wikidata":"Q168833","brand:wikipedia":"pl:Poczta Polska",name:"Poczta Polska"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Post Office (UK)":{name:"Post Office (UK)",icon:"maki-post",imageURL:"https://pbs.twimg.com/profile_images/1211657020283207685/knzWvwPK_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1783168",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Post Office","brand:wikidata":"Q1783168","brand:wikipedia":"en:Post Office Ltd",name:"Post Office"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/PostalAnnex":{name:"PostalAnnex",icon:"maki-post",imageURL:"https://graph.facebook.com/PostalAnnex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61960357",amenity:"post_office"},addTags:{amenity:"post_office",brand:"PostalAnnex","brand:wikidata":"Q61960357",name:"PostalAnnex"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Poste Italiane":{name:"Poste Italiane",icon:"maki-post",imageURL:"https://graph.facebook.com/PosteItaliane/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q495026",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Poste Italiane","brand:wikidata":"Q495026","brand:wikipedia":"en:Poste italiane",name:"Poste Italiane"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Serpost":{name:"Serpost",icon:"maki-post",imageURL:"https://graph.facebook.com/428188863953059/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19521863",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Serpost","brand:wikidata":"Q19521863","brand:wikipedia":"es:Servicios Postales del Perú",name:"Serpost"},countryCodes:["pe"],terms:["servicios postales del perú"],matchScore:2,suggestion:true},"amenity/post_office/Slovenská pošta":{name:"Slovenská pošta",icon:"maki-post",imageURL:"https://graph.facebook.com/slovenskaposta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191849",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Slovenská pošta","brand:wikidata":"Q1191849","brand:wikipedia":"en:Slovenská pošta",name:"Slovenská pošta"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/The UPS Store":{name:"The UPS Store",icon:"maki-post",imageURL:"https://graph.facebook.com/theupsstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7771029",amenity:"post_office"},addTags:{amenity:"post_office",brand:"The UPS Store","brand:wikidata":"Q7771029","brand:wikipedia":"en:The UPS Store",name:"The UPS Store",short_name:"UPS"},countryCodes:["ca","us"],terms:["ups store"],matchScore:2,suggestion:true},"amenity/post_office/United States Post Office":{name:"United States Post Office",icon:"maki-post",imageURL:"https://graph.facebook.com/USPS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q668687",amenity:"post_office"},addTags:{amenity:"post_office",brand:"United States Post Office","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"United States Post Office"},countryCodes:["us"],terms:["united states postal service","us post office","us postal service","usps","usps post office"],matchScore:2,suggestion:true},"amenity/post_office/ΕΛΤΑ":{name:"ΕΛΤΑ",icon:"maki-post",imageURL:"https://graph.facebook.com/HellenicPostELTA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1275135",amenity:"post_office"},addTags:{amenity:"post_office",brand:"ΕΛΤΑ","brand:wikidata":"Q1275135","brand:wikipedia":"el:Ελληνικά Ταχυδρομεία",name:"ΕΛΤΑ"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Белпошта":{name:"Белпошта",icon:"maki-post",imageURL:"https://graph.facebook.com/belpost.by/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2662336",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Белпошта","brand:be":"Белпошта","brand:en":"Belposhta","brand:ru":"Белпочта","brand:wikidata":"Q2662336","brand:wikipedia":"be:Белпошта",name:"Белпошта","name:be":"Белпошта","name:en":"Belposhta","name:ru":"Белпочта"},countryCodes:["by"],terms:["белпочта"],matchScore:2,suggestion:true},"amenity/post_office/Казпочта":{name:"Казпочта",icon:"maki-post",imageURL:"https://graph.facebook.com/Kazpost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q746263",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Казпочта","brand:wikidata":"Q746263","brand:wikipedia":"ru:Казпочта",name:"Казпочта"},countryCodes:["kz"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Нова Пошта":{name:"Нова Пошта",icon:"maki-post",imageURL:"https://graph.facebook.com/nova.poshta.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12133863",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Нова Пошта","brand:wikidata":"Q12133863","brand:wikipedia":"uk:Нова пошта",name:"Нова Пошта"},countryCodes:["ua"],terms:["нова пошта №1","нова пошта №2","нова пошта №3","нова пошта №4"],matchScore:2,suggestion:true},"amenity/post_office/Почта России":{name:"Почта России",icon:"maki-post",imageURL:"https://graph.facebook.com/ruspost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1502763",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Почта России","brand:wikidata":"Q1502763","brand:wikipedia":"ru:Почта России",name:"Почта России"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/СДЭК":{name:"СДЭК",icon:"maki-post",imageURL:"https://graph.facebook.com/edostavka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28665980",amenity:"post_office"},addTags:{amenity:"post_office",brand:"СДЭК","brand:wikidata":"Q28665980","brand:wikipedia":"ru:СДЭК",name:"СДЭК"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Укрпошта":{name:"Укрпошта",icon:"maki-post",imageURL:"https://graph.facebook.com/ukrposhta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2470783",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Укрпошта","brand:wikidata":"Q2470783","brand:wikipedia":"en:Ukrposhta",name:"Укрпошта"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/中国邮政":{name:"中国邮政",icon:"maki-post",geometry:["point","area"],tags:{"brand:wikidata":"Q1066476",amenity:"post_office"},addTags:{amenity:"post_office",brand:"中国邮政","brand:en":"China Post","brand:wikidata":"Q1066476","brand:wikipedia":"en:China Post",name:"中国邮政","name:en":"China Post"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/prep_school/Huntington Learning Center":{name:"Huntington Learning Center",icon:"temaki-school",imageURL:"https://graph.facebook.com/HuntingtonHelps/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5945399",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"Huntington Learning Center","brand:wikidata":"Q5945399","brand:wikipedia":"en:Huntington Learning Center",name:"Huntington Learning Center"},countryCodes:["us"],terms:["huntington"],matchScore:2,suggestion:true},"amenity/prep_school/KUMON (Japan)":{name:"KUMON (Japan)",icon:"temaki-school",imageURL:"https://graph.facebook.com/kumon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q142054",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"KUMON","brand:wikidata":"Q142054","brand:wikipedia":"ja:日本公文教育研究会",name:"KUMON","name:ja":"公文","name:ja-Hira":"くもん","name:ja-Latn":"KUMON"},countryCodes:["jp"],terms:["くもん","公文"],matchScore:2,suggestion:true},"amenity/prep_school/Kumon (International)":{name:"Kumon (International)",icon:"temaki-school",imageURL:"https://graph.facebook.com/kumon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q142054",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"Kumon","brand:wikidata":"Q142054","brand:wikipedia":"en:Kumon",name:"Kumon"},terms:["kumon learning center"],matchScore:2,suggestion:true},"amenity/prep_school/Mathnasium":{name:"Mathnasium",icon:"temaki-school",imageURL:"https://graph.facebook.com/mathnasium/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6787302",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"Mathnasium","brand:wikidata":"Q6787302","brand:wikipedia":"en:Mathnasium",name:"Mathnasium"},countryCodes:["ca","us"],terms:["mathnasium learning center"],matchScore:2,suggestion:true},"amenity/prep_school/Russian School of Mathematics":{name:"Russian School of Mathematics",icon:"temaki-school",imageURL:"https://graph.facebook.com/RussianMath/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7382122",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"Russian School of Mathematics","brand:wikidata":"Q7382122","brand:wikipedia":"en:Russian School of Mathematics",name:"Russian School of Mathematics"},countryCodes:["us"],terms:["rsm","russian school of math"],matchScore:2,suggestion:true},"amenity/prep_school/Sylvan":{name:"Sylvan",icon:"temaki-school",imageURL:"https://graph.facebook.com/SylvanLearning/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7660663",amenity:"prep_school"},addTags:{alt_name:"Sylvan Learning Center",amenity:"prep_school",brand:"Sylvan","brand:wikidata":"Q7660663","brand:wikipedia":"en:Sylvan Learning",name:"Sylvan"},countryCodes:["us"],terms:["sylvan learning"],matchScore:2,suggestion:true},"amenity/prep_school/栄光ゼミナール":{name:"栄光ゼミナール",icon:"temaki-school",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FEikoh%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11535632",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"栄光ゼミナール","brand:ja":"栄光ゼミナール","brand:ja-Hira":"えいこうゼミナール","brand:ja-Latn":"Eikō Zemināru","brand:wikidata":"Q11535632","brand:wikipedia":"ja:栄光ゼミナール",name:"栄光ゼミナール","name:en":"Eikoh Seminar","name:ja":"栄光ゼミナール","name:ja-Hira":"えいこうゼミナール","name:ja-Latn":"Eikō Zemināru"},countryCodes:["jp"],terms:["eikoh"],matchScore:2,suggestion:true},"amenity/pub/Walkabout":{name:"Walkabout",icon:"maki-beer",imageURL:"https://graph.facebook.com/walkiebirmingham/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7962149",amenity:"pub"},addTags:{amenity:"pub",brand:"Walkabout","brand:wikidata":"Q7962149","brand:wikipedia":"en:Walkabout (pub chain)",name:"Walkabout"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/public_bookcase/Little Free Library":{name:"Little Free Library",icon:"maki-library",imageURL:"https://graph.facebook.com/LittleFreeLibrary/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6650101",amenity:"public_bookcase"},addTags:{amenity:"public_bookcase",brand:"Little Free Library","brand:wikidata":"Q6650101","brand:wikipedia":"en:Little Free Library",name:"Little Free Library"},terms:[],matchScore:2,suggestion:true},"amenity/recycling/Planet Aid":{name:"Planet Aid",icon:"maki-recycling",imageURL:"https://graph.facebook.com/Planet.Aid/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7201055",amenity:"recycling"},addTags:{amenity:"recycling",brand:"Planet Aid","brand:wikidata":"Q7201055","brand:wikipedia":"en:Planet Aid",name:"Planet Aid","recycling:clothes":"yes","recycling:shoes":"yes",recycling_type:"container"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/recycling/Saint Vincent de Paul":{name:"Saint Vincent de Paul",icon:"maki-recycling",imageURL:"https://graph.facebook.com/186921794657204/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66581837",amenity:"recycling"},addTags:{amenity:"recycling",brand:"Saint Vincent de Paul","brand:wikidata":"Q66581837",name:"Saint Vincent de Paul","recycling:clothes":"yes","recycling:shoes":"yes",short_name:"SVdP"},countryCodes:["us"],terms:["st vincent de paul"],matchScore:2,suggestion:true},"amenity/recycling/The Salvation Army":{name:"The Salvation Army",icon:"maki-recycling",imageURL:"https://graph.facebook.com/SalvationArmyUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q188307",amenity:"recycling"},addTags:{amenity:"recycling",brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army","recycling:clothes":"yes"},countryCodes:["us"],terms:["salvation army"],matchScore:2,suggestion:true},"amenity/restaurant/100 Montaditos":{name:"100 Montaditos",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/100MontaditosSpain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8355805",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"100 Montaditos","brand:wikidata":"Q8355805","brand:wikipedia":"en:Cervecería 100 Montaditos",cuisine:"sandwich",name:"100 Montaditos"},countryCodes:["es","it","pt"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/3 Brewers (On)":{name:"3 Brewers (On)",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/3Brasseursca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3230326",amenity:"restaurant",cuisine:"burger;pizza;seafood"},addTags:{amenity:"restaurant",brand:"3 Brasseurs","brand:wikidata":"Q3230326","brand:wikipedia":"fr:Les 3 Brasseurs",cuisine:"burger;pizza;seafood",name:"3 Brewers","name:fr":"3 Brasseurs",official_name:"Les 3 Brasseurs"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/ASK Italian":{name:"ASK Italian",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ASKItalian/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4807056",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"ASK Italian","brand:wikidata":"Q4807056","brand:wikipedia":"en:ASK Italian",cuisine:"italian",name:"ASK Italian"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Amici's East Coast Pizzeria":{name:"Amici's East Coast Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/AmicisBayArea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66133409",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Amici","brand:wikidata":"Q66133409",cuisine:"pizza",name:"Amici"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Applebee's":{name:"Applebee's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Applebeesmundoe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q621532",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Applebee's Neighborhood Grill & Bar","brand:wikidata":"Q621532","brand:wikipedia":"en:Applebee's",cuisine:"american",name:"Applebee's",official_name:"Applebee's Neighborhood Grill & Bar"},reference:{key:"cuisine",value:"american"},terms:["applebees bar and grill","applebees grill and bar","applebees neighborhood bar and grill"],matchScore:2,suggestion:true},"amenity/restaurant/american/Arooga's":{name:"Arooga's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/aroogas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72963322",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Arooga's","brand:wikidata":"Q72963322",cuisine:"american",name:"Arooga's",official_name:"Arooga's Grille House and Sports Bar"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Autogrill":{name:"Autogrill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/AutogrillOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q786790",amenity:"restaurant",cuisine:"italian;regional"},addTags:{amenity:"restaurant",brand:"Autogrill","brand:wikidata":"Q786790","brand:wikipedia":"en:Autogrill",cuisine:"italian;regional",name:"Autogrill"},reference:{key:"cuisine",value:"italian"},countryCodes:["at","es","fr","it"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/BBB":{name:"BBB",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/BurgusBurgerBar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760094",amenity:"restaurant"},addTags:{alt_name:"Burgus Burger Bar","alt_name:en":"Burgus Burger Bar",amenity:"restaurant",brand:"Burgus Burger Bar","brand:en":"Burgus Burger Bar","brand:wikidata":"Q64760094",cuisine:"burger",name:"BBB","name:en":"BBB"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/BJ's":{name:"BJ's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/BJsRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835755",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"BJ's","brand:wikidata":"Q4835755","brand:wikipedia":"en:BJ's Restaurants",cuisine:"american",name:"BJ's",official_name:"BJ's Restaurant & Brewhouse"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Bella Italia":{name:"Bella Italia",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bellaitalia.co.uk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4883362",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Bella Italia","brand:wikidata":"Q4883362","brand:wikipedia":"en:Bella Italia",cuisine:"italian",name:"Bella Italia"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/Benihana":{name:"Benihana",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/Benihana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4887996",amenity:"restaurant",cuisine:"japanese;teppanyaki;steak"},addTags:{amenity:"restaurant",brand:"Benihana","brand:wikidata":"Q4887996","brand:wikipedia":"en:Benihana",cuisine:"japanese;teppanyaki;steak",name:"Benihana"},reference:{key:"cuisine",value:"japanese"},countryCodes:["aw","br","ca","pa","sv","us"],terms:["benihana of tokyo"],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Bertucci's":{name:"Bertucci's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Bertuccis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4895917",amenity:"restaurant",cuisine:"pizza;italian"},addTags:{amenity:"restaurant",brand:"Bertucci's","brand:wikidata":"Q4895917","brand:wikipedia":"en:Bertucci's",cuisine:"pizza;italian",name:"Bertucci's"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Big Boy":{name:"Big Boy",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bigboyrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4386779",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Big Boy","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",cuisine:"burger",name:"Big Boy",official_name:"Big Boy Restaurant & Bakery"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Bill's":{name:"Bill's",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1133746268063358978/NRuBqcqZ_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q47012702",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Bill's","brand:wikidata":"Q47012702","brand:wikipedia":"en:Bill's",cuisine:"british",name:"Bill's"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Black":{name:"Black",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/blackbarnburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760158",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Black Bar Burger","brand:en":"Black Bar Burger","brand:he":"בלאק בורגר","brand:wikidata":"Q64760158",cuisine:"burger",name:"Black","name:en":"Black","name:he":"בלאק"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/steakhouse/Black Angus":{name:"Black Angus",icon:"maki-slaughterhouse",imageURL:"https://graph.facebook.com/BlackAngusSteakhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4920269",amenity:"restaurant",cuisine:"steakhouse"},addTags:{amenity:"restaurant",brand:"Black Angus","brand:wikidata":"Q4920269","brand:wikipedia":"en:Black Angus Steakhouse",cuisine:"steakhouse",name:"Black Angus"},reference:{key:"cuisine",value:"steak_house"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Black Bear Diner":{name:"Black Bear Diner",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/BlackBearDiner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4920343",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Black Bear Diner","brand:wikidata":"Q4920343","brand:wikipedia":"en:Black Bear Diner",cuisine:"american",name:"Black Bear Diner"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Blaze Pizza":{name:"Blaze Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/BlazePizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23016666",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Blaze Pizza","brand:wikidata":"Q23016666","brand:wikipedia":"en:Blaze Pizza",cuisine:"pizza",name:"Blaze Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["bh","ca","kw","sa","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Bob Evans":{name:"Bob Evans",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bobevans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4932386",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Bob Evans","brand:wikidata":"Q4932386","brand:wikipedia":"en:Bob Evans Restaurants",cuisine:"american",name:"Bob Evans"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Bonanza Steakhouse":{name:"Bonanza Steakhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ponbonsteakhouses/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64045992",amenity:"restaurant",cuisine:"american;steak;buffet"},addTags:{amenity:"restaurant",brand:"Bonanza Steakhouse","brand:wikidata":"Q64045992",cuisine:"american;steak;buffet",name:"Bonanza Steakhouse"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:["bonanza"],matchScore:2,suggestion:true},"amenity/restaurant/sushi/Bonchon Chicken":{name:"Bonchon Chicken",icon:"temaki-temaki",imageURL:"https://pbs.twimg.com/profile_images/1014893960551174149/cVQR1ZDY_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4941248",amenity:"restaurant",cuisine:"chicken;korean;sushi"},addTags:{amenity:"restaurant",brand:"Bonchon Chicken","brand:wikidata":"Q4941248","brand:wikipedia":"en:Bonchon Chicken",cuisine:"chicken;korean;sushi",name:"Bonchon Chicken"},reference:{key:"cuisine",value:"sushi"},countryCodes:["bh","kh","kr","kw","my","ph","sg","th","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Bonefish Grill":{name:"Bonefish Grill",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/bonefishgrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4941599",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Bonefish Grill","brand:wikidata":"Q4941599","brand:wikipedia":"en:Bonefish Grill",cuisine:"seafood",name:"Bonefish Grill"},reference:{key:"cuisine",value:"seafood"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Boston Pizza":{name:"Boston Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/BostonPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q894578",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Boston Pizza","brand:wikidata":"Q894578","brand:wikipedia":"en:Boston Pizza",cuisine:"pizza",name:"Boston Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Bravo":{name:"Bravo",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bravoitalian/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64055574",amenity:"restaurant",cuisine:"italian"},addTags:{alt_name:"Bravo Cucina Italiana",amenity:"restaurant",brand:"Bravo","brand:wikidata":"Q64055574",cuisine:"italian",name:"Bravo"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Brewers Fayre":{name:"Brewers Fayre",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1197527556729319427/uj4Q0iJF_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4962678",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Brewers Fayre","brand:wikidata":"Q4962678","brand:wikipedia":"en:Brewers Fayre",name:"Brewers Fayre"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Brio":{name:"Brio",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/brioitalian/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64055835",amenity:"restaurant",cuisine:"italian"},addTags:{alt_name:"Brio Tuscan Grille",amenity:"restaurant",brand:"Brio","brand:wikidata":"Q64055835",cuisine:"italian",name:"Brio"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Bubba Gump Shrimp Company":{name:"Bubba Gump Shrimp Company",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/bubbagumprestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q50024",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Bubba Gump Shrimp Company","brand:wikidata":"Q50024","brand:wikipedia":"en:Bubba Gump Shrimp Company",cuisine:"seafood",name:"Bubba Gump Shrimp Company"},reference:{key:"cuisine",value:"seafood"},countryCodes:["ca","co","gb","hk","id","jp","mp","mx","ph","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Buca di Beppo":{name:"Buca di Beppo",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bucadibeppo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4982340",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Buca di Beppo","brand:wikidata":"Q4982340","brand:wikipedia":"en:Buca di Beppo",cuisine:"italian",name:"Buca di Beppo"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Bucking Bull":{name:"Bucking Bull",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/BuckingBullAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18208286",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Bucking Bull","brand:wikidata":"Q18208286","brand:wikipedia":"en:Bucking Bull",cuisine:"steak_house",name:"Bucking Bull"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Buffalo Grill":{name:"Buffalo Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/buffalogrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q944655",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Buffalo Grill","brand:wikidata":"Q944655","brand:wikipedia":"en:Buffalo Grill",cuisine:"steak_house",name:"Buffalo Grill"},countryCodes:["es","fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Buffalo Wild Wings":{name:"Buffalo Wild Wings",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/BuffaloWildWings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q509255",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Buffalo Wild Wings","brand:wikidata":"Q509255","brand:wikipedia":"en:Buffalo Wild Wings",cuisine:"wings",name:"Buffalo Wild Wings"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Buffalo Wings & Rings":{name:"Buffalo Wings & Rings",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/wingsandrings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4985900",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Buffalo Wings & Rings","brand:wikidata":"Q4985900","brand:wikipedia":"en:Buffalo Wings & Rings",cuisine:"wings",name:"Buffalo Wings & Rings",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Byron":{name:"Byron",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q16828673",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Byron","brand:wikidata":"Q16828673","brand:wikipedia":"en:Byron Hamburgers",cuisine:"burger",name:"Byron"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Cafe Rio":{name:"Cafe Rio",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/CafeRio/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5017108",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Cafe Rio","brand:wikidata":"Q5017108","brand:wikipedia":"en:Cafe Rio",cuisine:"mexican",name:"Cafe Rio"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Café Rouge":{name:"Café Rouge",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1113010856487419904/JzwWNWrF_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5017261",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Café Rouge","brand:wikidata":"Q5017261","brand:wikipedia":"en:Café Rouge",cuisine:"french",name:"Café Rouge"},reference:{key:"cuisine",value:"french"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/California Pizza Kitchen":{name:"California Pizza Kitchen",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/californiapizzakitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15109854",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"California Pizza Kitchen","brand:wikidata":"Q15109854","brand:wikipedia":"en:California Pizza Kitchen",cuisine:"pizza",name:"California Pizza Kitchen"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Campanile":{name:"Campanile",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/campanile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2412064",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Campanile","brand:wikidata":"Q2412064","brand:wikipedia":"fr:Campanile (chaîne d'hôtels)",cuisine:"french",name:"Campanile"},reference:{key:"cuisine",value:"french"},countryCodes:["fr","gb","nl"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Carluccio's":{name:"Carluccio's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/carluccios/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25111797",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Carluccio's","brand:wikidata":"Q25111797","brand:wikipedia":"en:Carluccio's Ltd",cuisine:"italian",name:"Carluccio's"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Carrabba's Italian Grill":{name:"Carrabba's Italian Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Carrabbas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5045999",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Carrabba's Italian Grill","brand:wikidata":"Q5045999","brand:wikipedia":"en:Carrabba's Italian Grill",cuisine:"italian",name:"Carrabba's Italian Grill"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Cheddar's":{name:"Cheddar's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/CheddarsScratchKitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5089187",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Cheddar's","brand:wikidata":"Q5089187","brand:wikipedia":"en:Cheddar's Scratch Kitchen",cuisine:"american",name:"Cheddar's",official_name:"Cheddar's Scratch Kitchen"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Cheeburger Cheeburger":{name:"Cheeburger Cheeburger",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/136947372998541/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5089247",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Cheeburger Cheeburger","brand:wikidata":"Q5089247","brand:wikipedia":"en:Cheeburger Cheeburger",cuisine:"burger",name:"Cheeburger Cheeburger"},countryCodes:["ca","sa","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Chevys":{name:"Chevys",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/ChevysFreshMex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5094466",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Chevys Fresh Mex","brand:wikidata":"Q5094466","brand:wikipedia":"en:Chevys Fresh Mex",cuisine:"mexican",name:"Chevys",official_name:"Chevys Fresh Mex"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Chili's":{name:"Chili's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Chilis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1072948",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Chili's","brand:wikidata":"Q1072948","brand:wikipedia":"en:Chili's",cuisine:"tex-mex",name:"Chili's",official_name:"Chili's Grill & Bar"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Chiquito":{name:"Chiquito",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/chiquito.restaurant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5101775",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Chiquito","brand:wikidata":"Q5101775","brand:wikipedia":"en:Chiquito (restaurant)",cuisine:"tex-mex",name:"Chiquito"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Chuck E. Cheese's":{name:"Chuck E. Cheese's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/ChuckECheese/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2438391",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Chuck E. Cheese's","brand:wikidata":"Q2438391","brand:wikipedia":"en:Chuck E. Cheese's",cuisine:"pizza",leisure:"amusement_arcade",name:"Chuck E. Cheese's"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca","us"],terms:["chuck e cheese"],matchScore:2,suggestion:true},"amenity/restaurant/Chuy's":{name:"Chuy's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Chuys.Restaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5118415",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Chuy's","brand:wikidata":"Q5118415","brand:wikipedia":"en:Chuy's",cuisine:"tex-mex",name:"Chuy's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Cici's Pizza":{name:"Cici's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Cicis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2972189",amenity:"restaurant",cuisine:"pizza;buffet"},addTags:{amenity:"restaurant",brand:"Cici's Pizza","brand:wikidata":"Q2972189","brand:wikipedia":"en:Cicis",cuisine:"pizza;buffet",name:"Cici's Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Claim Jumper":{name:"Claim Jumper",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ClaimJumperRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5125081",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Claim Jumper","brand:wikidata":"Q5125081","brand:wikipedia":"en:Claim Jumper",cuisine:"american",name:"Claim Jumper"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Coast to Coast":{name:"Coast to Coast",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/coasttocoastrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22000729",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Coast to Coast","brand:wikidata":"Q22000729","brand:wikipedia":"en:Coast to Coast (restaurant)",cuisine:"american",name:"Coast to Coast"},reference:{key:"cuisine",value:"american"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Copeland's":{name:"Copeland's",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1211746451958779906/2WbnhhLW_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q5168346",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Copeland's","brand:wikidata":"Q5168346","brand:wikipedia":"en:Copeland's",cuisine:"american",name:"Copeland's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Cora (Quebec)":{name:"Cora (Quebec)",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/corarestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2996960",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Cora","brand:wikidata":"Q2996960","brand:wikipedia":"fr:Cora (chaîne de restaurants)",cuisine:"breakfast",name:"Cora"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Cora (non-Quebec)":{name:"Cora (non-Quebec)",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/corarestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2996960",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Cora","brand:wikidata":"Q2996960","brand:wikipedia":"en:Cora (restaurant)",cuisine:"breakfast",name:"Cora"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Cosmo":{name:"Cosmo",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/CosmoRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5174239",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Cosmo","brand:wikidata":"Q5174239","brand:wikipedia":"en:Cosmo (restaurant)",cuisine:"international",name:"Cosmo"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Country Pride":{name:"Country Pride",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/CountryPrideRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64051992",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Country Pride","brand:wikidata":"Q64051992",cuisine:"american",name:"Country Pride"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:["country pride restaurant"],matchScore:2,suggestion:true},"amenity/restaurant/french/Courtepaille":{name:"Courtepaille",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/GrillCourtepaille/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3116688",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Courtepaille","brand:wikidata":"Q3116688","brand:wikipedia":"fr:Grill Courtepaille",cuisine:"french",name:"Courtepaille"},reference:{key:"cuisine",value:"french"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Cracker Barrel":{name:"Cracker Barrel",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/crackerbarrel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4492609",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Cracker Barrel","brand:wikidata":"Q4492609","brand:wikipedia":"en:Cracker Barrel",cuisine:"american",name:"Cracker Barrel",official_name:"Cracker Barrel Old Country Store"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Côte Brasserie":{name:"Côte Brasserie",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/cotebrasserie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48699908",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Côte Brasserie","brand:wikidata":"Q48699908","brand:wikipedia":"en:Côte",cuisine:"french",name:"Côte Brasserie"},reference:{key:"cuisine",value:"french"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Dave & Buster's":{name:"Dave & Buster's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/daveandbusters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5228205",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Dave & Buster's","brand:wikidata":"Q5228205","brand:wikipedia":"en:Dave & Buster's",cuisine:"american",leisure:"amusement_arcade",name:"Dave & Buster's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Denny's":{name:"Denny's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/dennys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1189695",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Denny's","brand:wikidata":"Q1189695","brand:wikipedia":"en:Denny's",cuisine:"american",name:"Denny's"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Dickey's Barbecue Pit":{name:"Dickey's Barbecue Pit",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/dickeysbarbecuepit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19880747",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Dickey's Barbecue Pit","brand:wikidata":"Q19880747","brand:wikipedia":"en:Dickey's Barbecue Pit",cuisine:"barbecue",name:"Dickey's Barbecue Pit"},countryCodes:["us"],terms:["dickeys barbecue"],matchScore:2,suggestion:true},"amenity/restaurant/Din Tai Fung":{name:"Din Tai Fung",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/dintaifungUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q699142",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Din Tai Fung","brand:wikidata":"Q699142","brand:wikipedia":"en:Din Tai Fung",cuisine:"taiwanese",name:"Din Tai Fung","name:zh":"鼎泰丰"},countryCodes:["ae","au","gb","hk","id","jp","kr","mo","my","ph","sg","th","tw","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Donatos Pizza":{name:"Donatos Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/DonatosPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1240741",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Donatos Pizza","brand:wikidata":"Q1240741","brand:wikipedia":"en:Donatos Pizza",cuisine:"pizza",name:"Donatos Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:["donatos"],matchScore:2,suggestion:true},"amenity/restaurant/italian/East Side Mario's":{name:"East Side Mario's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/eastsidemarios/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5329375",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"East Side Mario's","brand:wikidata":"Q5329375","brand:wikipedia":"en:East Side Mario's",cuisine:"italian",name:"East Side Mario's"},reference:{key:"cuisine",value:"italian"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Eat'n Park":{name:"Eat'n Park",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/EatnParkRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5331211",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Eat'n Park","brand:wikidata":"Q5331211","brand:wikipedia":"en:Eat'n Park",cuisine:"american",name:"Eat'n Park"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Elephant Bar":{name:"Elephant Bar",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ElephantBar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5359302",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Elephant Bar","brand:wikidata":"Q5359302","brand:wikipedia":"en:Elephant Bar",cuisine:"american",name:"Elephant Bar"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Famous Dave's":{name:"Famous Dave's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/famousdaves/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5433448",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Famous Dave's","brand:wikidata":"Q5433448","brand:wikipedia":"en:Famous Dave's",cuisine:"barbecue",name:"Famous Dave's"},countryCodes:["us"],terms:["famous daves bbq"],matchScore:2,suggestion:true},"amenity/restaurant/american/First Watch":{name:"First Watch",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/FirstWatch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5454064",amenity:"restaurant",cuisine:"american;breakfast"},addTags:{amenity:"restaurant",brand:"First Watch","brand:wikidata":"Q5454064","brand:wikipedia":"en:First Watch (restaurant chain)",cuisine:"american;breakfast",name:"First Watch"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Flunch":{name:"Flunch",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/flunch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q629326",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Flunch","brand:wikidata":"Q629326","brand:wikipedia":"en:Flunch",cuisine:"french",name:"Flunch"},reference:{key:"cuisine",value:"french"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Foster's Hollywood":{name:"Foster's Hollywood",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/fostershollywood/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5864366",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Foster's Hollywood","brand:wikidata":"Q5864366","brand:wikipedia":"en:Foster's Hollywood",cuisine:"american",name:"Foster's Hollywood"},reference:{key:"cuisine",value:"american"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Frankie & Benny's":{name:"Frankie & Benny's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/frankiebennys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5490892",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Frankie & Benny's","brand:wikidata":"Q5490892","brand:wikipedia":"en:Frankie & Benny's",cuisine:"american",name:"Frankie & Benny's"},reference:{key:"cuisine",value:"american"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Freshii":{name:"Freshii",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/freshii/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5503051",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Freshii","brand:wikidata":"Q5503051","brand:wikipedia":"en:Freshii",cuisine:"salad",name:"Freshii"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Friendly's":{name:"Friendly's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/friendlys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1464513",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Friendly's","brand:wikidata":"Q1464513","brand:wikipedia":"en:Friendly's",cuisine:"american",name:"Friendly's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Frisch's Big Boy":{name:"Frisch's Big Boy",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/frischsbigboy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5504660",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Frisch's Big Boy","brand:wikidata":"Q5504660","brand:wikipedia":"en:Frisch's",cuisine:"burger",name:"Frisch's Big Boy",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Fuddruckers":{name:"Fuddruckers",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/fuddruckers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5507056",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Fuddruckers","brand:wikidata":"Q5507056","brand:wikipedia":"en:Fuddruckers",cuisine:"burger",name:"Fuddruckers"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Gatti's Pizza":{name:"Gatti's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://pbs.twimg.com/profile_images/1034520805923684352/wc5SE5R6_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5527509",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Gatti's Pizza","brand:wikidata":"Q5527509","brand:wikipedia":"en:Gatti's Pizza",cuisine:"pizza",name:"Gatti's Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Giordano's Pizzeria":{name:"Giordano's Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/giordanospizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5563393",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Giordano's Pizzeria","brand:wikidata":"Q5563393","brand:wikipedia":"en:Giordano's Pizzeria",cuisine:"pizza",name:"Giordano's Pizzeria"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Godfather's Pizza":{name:"Godfather's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/godfatherspizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5576353",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Godfather's Pizza","brand:wikidata":"Q5576353","brand:wikipedia":"en:Godfather's Pizza",cuisine:"pizza",name:"Godfather's Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Golden Corral":{name:"Golden Corral",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/goldencorral/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4039560",amenity:"restaurant",cuisine:"american;buffet"},addTags:{amenity:"restaurant",brand:"Golden Corral","brand:wikidata":"Q4039560","brand:wikipedia":"en:Golden Corral",cuisine:"american;buffet",name:"Golden Corral"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:["golden corral buffet","golden corral buffet and grill"],matchScore:2,suggestion:true},"amenity/restaurant/Gourmet Burger Kitchen":{name:"Gourmet Burger Kitchen",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/gourmetburgerkitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5588445",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Gourmet Burger Kitchen","brand:wikidata":"Q5588445","brand:wikipedia":"en:Gourmet Burger Kitchen",cuisine:"burger",name:"Gourmet Burger Kitchen",short_name:"GBK"},countryCodes:["gb","gr","ie"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Grotto Pizza":{name:"Grotto Pizza",icon:"maki-restaurant-pizza",imageURL:"https://pbs.twimg.com/profile_images/1189936353976496129/YXleniEP_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q20709024",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Grotto Pizza","brand:wikidata":"Q20709024","brand:wikipedia":"en:Grotto Pizza",cuisine:"pizza",name:"Grotto Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Gusto (United Kingdom)":{name:"Gusto (United Kingdom)",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1032934760136486914/_P4TfIUL_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q66087781",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Gusto","brand:wikidata":"Q66087781",cuisine:"italian",name:"Gusto"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Guzman y Gomez":{name:"Guzman y Gomez",icon:"fas-pepper-hot",geometry:["point","area"],tags:{"brand:wikidata":"Q23019759",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Guzman y Gomez","brand:wikidata":"Q23019759","brand:wikipedia":"en:Guzman y Gomez",cuisine:"mexican",name:"Guzman y Gomez"},reference:{key:"cuisine",value:"mexican"},countryCodes:["au","jp","sg"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Handmade Burger Co.":{name:"Handmade Burger Co.",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/handmadeburgercompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56154673",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Handmade Burger Co.","brand:wikidata":"Q56154673",cuisine:"burger",name:"Handmade Burger Co."},countryCodes:["gb"],terms:["handmade burger company"],matchScore:2,suggestion:true},"amenity/restaurant/Hans im Glück":{name:"Hans im Glück",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/hansimglueck.burgergrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22569868",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Hans im Glück","brand:wikidata":"Q22569868","brand:wikipedia":"de:Hans im Glück (Restaurantkette)",cuisine:"burger",name:"Hans im Glück"},countryCodes:["at","ch","de","sg"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Happy's Pizza":{name:"Happy's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/EatHappysPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5652393",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Happy's Pizza","brand:wikidata":"Q5652393","brand:wikipedia":"en:Happy's Pizza",cuisine:"pizza",name:"Happy's Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Hard Rock Cafe":{name:"Hard Rock Cafe",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/hardrock/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q918151",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Hard Rock Cafe","brand:wikidata":"Q918151","brand:wikipedia":"en:Hard Rock Cafe",cuisine:"american",name:"Hard Rock Cafe"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Harvester":{name:"Harvester",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/harvesterrestaurant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5676915",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Harvester","brand:wikidata":"Q5676915","brand:wikipedia":"en:Harvester (restaurant)",cuisine:"american",name:"Harvester"},reference:{key:"cuisine",value:"american"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Hippopotamus":{name:"Hippopotamus",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Hippopotamus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3136174",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Hippopotamus","brand:wikidata":"Q3136174","brand:wikipedia":"fr:Hippopotamus (restaurant)",cuisine:"steak_house",name:"Hippopotamus"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Hog's Australia's Steakhouse":{name:"Hog's Australia's Steakhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/hogsbreath/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5876920",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Hog's Australia's Steakhouse","brand:wikidata":"Q5876920","brand:wikipedia":"en:Hog's Australia's Steakhouse",cuisine:"steak_house",name:"Hog's Australia's Steakhouse"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Hooters":{name:"Hooters",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/hooters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1025921",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Hooters","brand:wikidata":"Q1025921","brand:wikipedia":"en:Hooters",cuisine:"burger",name:"Hooters"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/House of Blues":{name:"House of Blues",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/HOBChicago/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q648898",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"House of Blues","brand:wikidata":"Q648898","brand:wikipedia":"en:House of Blues",cuisine:"american",name:"House of Blues"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Huddle House":{name:"Huddle House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/HuddleHouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5928324",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Huddle House","brand:wikidata":"Q5928324","brand:wikipedia":"en:Huddle House",cuisine:"american",name:"Huddle House"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Husky House":{name:"Husky House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/huskyenergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q702049",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Husky","brand:wikidata":"Q702049","brand:wikipedia":"en:Husky Energy",cuisine:"diner",name:"Husky House"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/IHOP":{name:"IHOP",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/IHOP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1185675",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"IHOP","brand:wikidata":"Q1185675","brand:wikipedia":"en:IHOP",cuisine:"breakfast;pancake",name:"IHOP"},terms:["international house of pancakes"],matchScore:2,suggestion:true},"amenity/restaurant/italian/IL Патио":{name:"IL Патио",icon:"maki-restaurant",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRosInter.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4397763",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"IL Патио","brand:wikidata":"Q4397763","brand:wikipedia":"en:Росинтер",cuisine:"italian",name:"IL Патио"},reference:{key:"cuisine",value:"italian"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Iron Skillet":{name:"Iron Skillet",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/IronSkilletRestaurant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64052855",amenity:"restaurant",cuisine:"american;buffet"},addTags:{amenity:"restaurant",brand:"Iron Skillet","brand:wikidata":"Q64052855",cuisine:"american;buffet",name:"Iron Skillet"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:["iron skillet restaurant"],matchScore:2,suggestion:true},"amenity/restaurant/american/Jack Astor's":{name:"Jack Astor's",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1003974042351792130/-v3NNNEb_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6111066",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Jack Astor's","brand:wikidata":"Q6111066","brand:wikipedia":"en:Jack Astor's Bar and Grill",cuisine:"american",name:"Jack Astor's"},reference:{key:"cuisine",value:"american"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Jason's Deli":{name:"Jason's Deli",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/JasonsDeli/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997641",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Jason's Deli","brand:wikidata":"Q16997641","brand:wikipedia":"en:Jason's Deli",cuisine:"sandwich",name:"Jason's Deli"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Jet's Pizza":{name:"Jet's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/JetsPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997713",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Jet's Pizza","brand:wikidata":"Q16997713","brand:wikipedia":"en:Jet's Pizza",cuisine:"pizza",name:"Jet's Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Jinya Ramen Bar":{name:"Jinya Ramen Bar",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/916114096742793216/3VVRQT9R_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16997755",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Jinya Ramen Bar","brand:wikidata":"Q16997755","brand:wikipedia":"en:Jinya Ramen Bar",cuisine:"ramen",name:"Jinya Ramen Bar"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Joe's Crab Shack":{name:"Joe's Crab Shack",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/joescrabshack/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6208210",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Joe's Crab Shack","brand:wikidata":"Q6208210","brand:wikipedia":"en:Joe's Crab Shack",cuisine:"seafood",name:"Joe's Crab Shack"},reference:{key:"cuisine",value:"seafood"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Johnny Carino's":{name:"Johnny Carino's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/carinositalian/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5039637",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Johnny Carino's","brand:wikidata":"Q5039637","brand:wikipedia":"en:Carino's Italian",cuisine:"italian",name:"Johnny Carino's"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:["carinios"],matchScore:2,suggestion:true},"amenity/restaurant/Johnny Rockets":{name:"Johnny Rockets",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/johnnyrockets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1051593",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Johnny Rockets","brand:wikidata":"Q1051593","brand:wikipedia":"en:Johnny Rockets",cuisine:"burger",name:"Johnny Rockets"},terms:["johnny rocket"],matchScore:2,suggestion:true},"amenity/restaurant/american/Kelsey's":{name:"Kelsey's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/KelseysRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6386459",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Kelsey's","brand:wikidata":"Q6386459","brand:wikipedia":"en:Kelseys Original Roadhouse",cuisine:"american",name:"Kelsey's"},reference:{key:"cuisine",value:"american"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/sushi/Kona Grill":{name:"Kona Grill",icon:"temaki-temaki",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKona%20Grill%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6428706",amenity:"restaurant",cuisine:"sushi;cocktails"},addTags:{amenity:"restaurant",brand:"Kona Grill","brand:wikidata":"Q6428706","brand:wikipedia":"en:Kona Grill",cuisine:"sushi;cocktails",name:"Kona Grill"},reference:{key:"cuisine",value:"sushi"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/L'Osteria":{name:"L'Osteria",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/losteria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17323478",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"L'Osteria","brand:wikidata":"Q17323478","brand:wikipedia":"de:L’Osteria",cuisine:"italian",name:"L'Osteria"},reference:{key:"cuisine",value:"italian"},countryCodes:["at","ch","cz","de","fr","gb","nl"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/La Boucherie":{name:"La Boucherie",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/restaurantlaboucherie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21427479",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"La Boucherie","brand:wikidata":"Q21427479","brand:wikipedia":"fr:La Boucherie (restaurant)",cuisine:"steak_house",name:"La Boucherie"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/La Cage":{name:"La Cage",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/lacagebrasseriesportive/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3206980",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"La Cage","brand:wikidata":"Q3206980","brand:wikipedia":"fr:La Cage aux Sports",cuisine:"burger;chicken;sandwich;fish;pasta",name:"La Cage"},countryCodes:["ca"],terms:["la cage aux sports"],matchScore:2,suggestion:true},"amenity/restaurant/pizza/LaRosa's Pizzeria":{name:"LaRosa's Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/LaRosasPizzeria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6460833",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"LaRosa's Pizzeria","brand:wikidata":"Q6460833","brand:wikipedia":"en:LaRosa's Pizzeria",cuisine:"pizza",name:"LaRosa's Pizzeria",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Ledo Pizza":{name:"Ledo Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/ledopizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6512734",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Ledo Pizza","brand:wikidata":"Q6512734","brand:wikipedia":"en:Ledo Pizza",cuisine:"pizza",name:"Ledo Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Legal Sea Foods":{name:"Legal Sea Foods",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/LegalSeaFoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6517417",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Legal Sea Foods","brand:wikidata":"Q6517417","brand:wikipedia":"en:Legal Sea Foods",cuisine:"seafood",name:"Legal Sea Foods"},reference:{key:"cuisine",value:"seafood"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Les 3 Brasseurs (Qc,Br,Fr)":{name:"Les 3 Brasseurs (Qc,Br,Fr)",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/3Brasseursca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3230326",amenity:"restaurant",cuisine:"burger;pizza;seafood"},addTags:{amenity:"restaurant",brand:"3 Brasseurs","brand:wikidata":"Q3230326","brand:wikipedia":"fr:Les 3 Brasseurs",cuisine:"burger;pizza;seafood",name:"3 Brasseurs","name:en":"3 Brewers",official_name:"Les 3 Brasseurs"},reference:{key:"cuisine",value:"pizza"},countryCodes:["br","ca","fr"],terms:["3 brasseurs"],matchScore:2,suggestion:true},"amenity/restaurant/american/Logan's Roadhouse":{name:"Logan's Roadhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Logans.Roadhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6666872",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Logan's Roadhouse","brand:wikidata":"Q6666872","brand:wikipedia":"en:Logan's Roadhouse",cuisine:"american",name:"Logan's Roadhouse"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/LongHorn Steakhouse":{name:"LongHorn Steakhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/longhornsteakhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3259007",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"LongHorn Steakhouse","brand:wikidata":"Q3259007","brand:wikipedia":"en:LongHorn Steakhouse",cuisine:"steak_house",name:"LongHorn Steakhouse"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Lou Malnati's Pizzeria":{name:"Lou Malnati's Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/loumalnatis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6685628",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Lou Malnati's Pizzeria","brand:wikidata":"Q6685628","brand:wikipedia":"en:Lou Malnati's Pizzeria",cuisine:"pizza",name:"Lou Malnati's Pizzeria"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Loving Hut":{name:"Loving Hut",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/LovingHutUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3491655",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Loving Hut","brand:wikidata":"Q3491655","brand:wikipedia":"en:Loving Hut",cuisine:"international","diet:vegan":"only","diet:vegetarian":"only",name:"Loving Hut"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Luby's":{name:"Luby's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Lubys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6695701",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Luby's","brand:wikidata":"Q6695701","brand:wikipedia":"en:Luby's",cuisine:"american",name:"Luby's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Léon de Bruxelles":{name:"Léon de Bruxelles",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/leondebruxellesofficiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21041507",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Léon de Bruxelles","brand:wikidata":"Q21041507","brand:wikipedia":"en:Léon de Bruxelles",cuisine:"friture",name:"Léon de Bruxelles"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/thai/MK Restaurants":{name:"MK Restaurants",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/mkrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075359",amenity:"restaurant",cuisine:"thai"},addTags:{amenity:"restaurant",brand:"MK Restaurants","brand:wikidata":"Q62075359",cuisine:"thai",name:"MK Restaurants"},reference:{key:"cuisine",value:"thai"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Mad Mex Fresh Mexican":{name:"Mad Mex Fresh Mexican",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/madmex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19589766",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Mad Mex Fresh Mexican Grill","brand:wikidata":"Q19589766","brand:wikipedia":"en:Mad Mex Fresh Mexican Grill",cuisine:"mexican",name:"Mad Mex Fresh Mexican Grill"},reference:{key:"cuisine",value:"mexican"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Marco's Pizza":{name:"Marco's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/MarcosPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6757382",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Marco's Pizza","brand:wikidata":"Q6757382","brand:wikipedia":"en:Marco's Pizza",cuisine:"pizza",name:"Marco's Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Marie Callender's":{name:"Marie Callender's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/MarieCallenders/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6762784",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Marie Callender's","brand:wikidata":"Q6762784","brand:wikipedia":"en:Marie Callender's",cuisine:"american",name:"Marie Callender's"},reference:{key:"cuisine",value:"american"},countryCodes:["mx","us"],terms:["marie calendar","marie calendar's","marie callendar's"],matchScore:2,suggestion:true},"amenity/restaurant/asian/Max's Restaurant":{name:"Max's Restaurant",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/MaxsRestaurantNA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6794477",amenity:"restaurant",cuisine:"asian"},addTags:{amenity:"restaurant",brand:"Max's Restaurant","brand:wikidata":"Q6794477","brand:wikipedia":"en:Max's Restaurant",cuisine:"asian",name:"Max's Restaurant"},reference:{key:"cuisine",value:"asian"},countryCodes:["ph"],terms:["max's"],matchScore:2,suggestion:true},"amenity/restaurant/McAlister's Deli":{name:"McAlister's Deli",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/mcalistersdeli/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17020829",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"McAlister's Deli","brand:wikidata":"Q17020829","brand:wikipedia":"en:McAlister's Deli",cuisine:"sandwich",name:"McAlister's Deli"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/McCormick & Schmick's":{name:"McCormick & Schmick's",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/mccormickandschmicks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6800562",amenity:"restaurant",cuisine:"seafood;steak"},addTags:{amenity:"restaurant",brand:"McCormick & Schmick's","brand:wikidata":"Q6800562","brand:wikipedia":"en:McCormick & Schmick's",cuisine:"seafood;steak",name:"McCormick & Schmick's"},reference:{key:"cuisine",value:"seafood"},countryCodes:["us"],terms:["mccormick and schmick","mccormick and schmicks grill"],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Mellow Mushroom":{name:"Mellow Mushroom",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/mellowmushroom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17021360",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Mellow Mushroom","brand:wikidata":"Q17021360","brand:wikipedia":"en:Mellow Mushroom",cuisine:"pizza",name:"Mellow Mushroom"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Mikes":{name:"Mikes",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/MikesRestaurant.PageOfficielle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3313615",amenity:"restaurant",cuisine:"pizza;pasta;sandwich"},addTags:{amenity:"restaurant",brand:"Mikes","brand:wikidata":"Q3313615","brand:wikipedia":"fr:Mikes",cuisine:"pizza;pasta;sandwich",name:"Mikes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Mimi's Cafe":{name:"Mimi's Cafe",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/mimiscafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17022081",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Mimi's Cafe","brand:wikidata":"Q17022081","brand:wikipedia":"en:Mimi's Cafe",cuisine:"french",name:"Mimi's Cafe"},reference:{key:"cuisine",value:"french"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Montana's":{name:"Montana's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/montanasBBQ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17022490",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Montana's","brand:wikidata":"Q17022490","brand:wikipedia":"en:Montana's BBQ & Bar",cuisine:"barbecue",name:"Montana's",official_name:"Montana's BBQ & Bar"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Morton's The Steakhouse":{name:"Morton's The Steakhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/mortons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17022759",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Morton's The Steakhouse","brand:wikidata":"Q17022759","brand:wikipedia":"en:Morton's The Steakhouse",cuisine:"steak_house",name:"Morton's The Steakhouse"},countryCodes:["us"],terms:["mortons"],matchScore:2,suggestion:true},"amenity/restaurant/Moses":{name:"Moses",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/MosesIsrael/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760150",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Moses","brand:en":"Moses","brand:he":"מוזס","brand:wikidata":"Q64760150",cuisine:"burger",name:"Moses","name:en":"Moses","name:he":"מוזס"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Mountain Mike's":{name:"Mountain Mike's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/mountainmikes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6925120",amenity:"restaurant",cuisine:"pizza"},addTags:{alt_name:"Mountain Mike's Pizza",amenity:"restaurant",brand:"Mountain Mike's","brand:wikidata":"Q6925120","brand:wikipedia":"en:Mountain Mike's Pizza",cuisine:"pizza",name:"Mountain Mike's",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/greek/Mr. Greek":{name:"Mr. Greek",icon:"maki-restaurant",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMr.%20Greek%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6928719",amenity:"restaurant",cuisine:"greek"},addTags:{amenity:"restaurant",brand:"Mr. Greek","brand:wikidata":"Q6928719","brand:wikipedia":"en:Mr. Greek",cuisine:"greek",name:"Mr. Greek"},reference:{key:"cuisine",value:"greek"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Nando's":{name:"Nando's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/NandosUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3472954",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Nando's","brand:wikidata":"Q3472954","brand:wikipedia":"en:Nando's",cuisine:"chicken;portuguese",name:"Nando's"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Noodles & Company":{name:"Noodles & Company",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/noodlesandcompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7049673",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Noodles & Company","brand:wikidata":"Q7049673","brand:wikipedia":"en:Noodles & Company",cuisine:"pasta",name:"Noodles & Company"},countryCodes:["us"],terms:["noodles and co","noodles co","noodles company"],matchScore:2,suggestion:true},"amenity/restaurant/american/O'Charley's":{name:"O'Charley's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ocharleysfans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7071703",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"O'Charley's","brand:wikidata":"Q7071703","brand:wikipedia":"en:O'Charley's",cuisine:"american",name:"O'Charley's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Ocean Basket":{name:"Ocean Basket",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/daoceanbasket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075311",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Ocean Basket","brand:wikidata":"Q62075311",cuisine:"seafood",name:"Ocean Basket"},reference:{key:"cuisine",value:"seafood"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Old Chicago":{name:"Old Chicago",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/OldChicago/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64411347",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Old Chicago","brand:wikidata":"Q64411347",cuisine:"pizza",name:"Old Chicago",official_name:"Old Chicago Pizza & Taproom"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Old Country Buffet":{name:"Old Country Buffet",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/OldCountryBuffet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q75243208",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Old Country Buffet","brand:wikidata":"Q75243208",cuisine:"american",name:"Old Country Buffet"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Old Wild West":{name:"Old Wild West",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/OWWofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25402475",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Old Wild West","brand:wikidata":"Q25402475","brand:wikipedia":"it:Old Wild West",cuisine:"american",name:"Old Wild West"},reference:{key:"cuisine",value:"american"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Olive Garden":{name:"Olive Garden",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/OliveGarden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3045312",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Olive Garden","brand:wikidata":"Q3045312","brand:wikipedia":"en:Olive Garden",cuisine:"italian",name:"Olive Garden"},reference:{key:"cuisine",value:"italian"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/On The Border":{name:"On The Border",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/OnTheBorderMexicanGrillandCantina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7091305",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"On The Border","brand:wikidata":"Q7091305","brand:wikipedia":"en:On the Border Mexican Grill & Cantina",cuisine:"tex-mex",name:"On The Border",official_name:"On The Border Mexican Grill & Cantina"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Outback Steakhouse":{name:"Outback Steakhouse",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/778575984958267392/MGtDYhwg_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1064893",amenity:"restaurant",cuisine:"american;steak"},addTags:{amenity:"restaurant",brand:"Outback Steakhouse","brand:wikidata":"Q1064893","brand:wikipedia":"en:Outback Steakhouse",cuisine:"american;steak",name:"Outback Steakhouse"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/asian/P.F. Chang's":{name:"P.F. Chang's",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/pfchangs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5360181",amenity:"restaurant",cuisine:"asian"},addTags:{amenity:"restaurant",brand:"P.F. Chang's","brand:wikidata":"Q5360181","brand:wikipedia":"en:P. F. Chang's China Bistro",cuisine:"asian",name:"P.F. Chang's",official_name:"P.F. Chang's China Bistro"},reference:{key:"cuisine",value:"asian"},countryCodes:["mx","us"],terms:["pf chang"],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Papa Gino's":{name:"Papa Gino's",icon:"maki-restaurant-pizza",imageURL:"https://pbs.twimg.com/profile_images/645764802531454976/5QHfmIzP_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7132333",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Papa Gino's","brand:wikidata":"Q7132333","brand:wikipedia":"en:Papa Gino's",cuisine:"pizza",name:"Papa Gino's"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Pardos Chicken":{name:"Pardos Chicken",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/pardoschicken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17624435",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Pardos Chicken","brand:wikidata":"Q17624435","brand:wikipedia":"en:Pardos chicken",cuisine:"peruvian",name:"Pardos Chicken"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/asian/Pei Wei":{name:"Pei Wei",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/peiwei/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7160898",amenity:"restaurant",cuisine:"asian"},addTags:{amenity:"restaurant",brand:"Pei Wei","brand:wikidata":"Q7160898","brand:wikipedia":"en:Pei Wei Asian Diner",cuisine:"asian",name:"Pei Wei"},reference:{key:"cuisine",value:"asian"},countryCodes:["us"],terms:["pei wei asian diner"],matchScore:2,suggestion:true},"amenity/restaurant/american/Perkins":{name:"Perkins",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/eatatperkins/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7169056",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Perkins","brand:wikidata":"Q7169056","brand:wikipedia":"en:Perkins Restaurant and Bakery",cuisine:"american",name:"Perkins",official_name:"Perkins Restaurant and Bakery"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Peter Pane":{name:"Peter Pane",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/peter.pane.burgergrill.bar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66084419",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Peter Pane","brand:wikidata":"Q66084419",cuisine:"burger",name:"Peter Pane"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Peter Piper Pizza":{name:"Peter Piper Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/peterpiperpizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7176401",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Peter Piper Pizza","brand:wikidata":"Q7176401",cuisine:"pizza",name:"Peter Piper Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/vietnamese/Phở 24":{name:"Phở 24",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/pho24.24giavitinhte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63863118",amenity:"restaurant",cuisine:"vietnamese;noodle"},addTags:{amenity:"restaurant",brand:"Phở 24","brand:wikidata":"Q63863118",cuisine:"vietnamese;noodle",name:"Phở 24","name:en":"Pho 24","name:vi":"Phở 24"},reference:{key:"cuisine",value:"vietnamese"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/vietnamese/Phở Hòa":{name:"Phở Hòa",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/phohoanoodlesoup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55629932",amenity:"restaurant",cuisine:"vietnamese;noodle"},addTags:{alt_name:"Phở Hoà","alt_name:en":"Pho Hoa","alt_name:vi":"Phở Hoà",amenity:"restaurant",brand:"Phở Hòa","brand:wikidata":"Q55629932","brand:wikipedia":"en:Phở Hòa",cuisine:"vietnamese;noodle",name:"Phở Hòa","name:vi":"Phở Hòa"},reference:{key:"cuisine",value:"vietnamese"},countryCodes:["ca","id","kr","ms","ph","tw","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pieology Pizzeria":{name:"Pieology Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pieology/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60746053",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Pieology Pizzeria","brand:wikidata":"Q60746053","brand:wikipedia":"en:Pieology",cuisine:"pizza",name:"Pieology Pizzeria"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:["pieology"],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Delight":{name:"Pizza Delight",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{"brand:wikidata":"Q3389502",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Pizza Delight","brand:wikidata":"Q3389502","brand:wikipedia":"en:Pizza Delight",cuisine:"pizza",name:"Pizza Delight"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Factory":{name:"Pizza Factory",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzafactoryinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q39054369",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Pizza Factory","brand:wikidata":"Q39054369","brand:wikipedia":"en:Pizza Factory",cuisine:"pizza",name:"Pizza Factory"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Hut":{name:"Pizza Hut",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzahutus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191615",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Ranch":{name:"Pizza Ranch",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/PizzaRanchRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7199978",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Pizza Ranch","brand:wikidata":"Q7199978","brand:wikipedia":"en:Pizza Ranch",cuisine:"pizza",name:"Pizza Ranch"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/PizzaExpress":{name:"PizzaExpress",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzaexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q662845",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"PizzaExpress","brand:wikidata":"Q662845","brand:wikipedia":"en:PizzaExpress",cuisine:"pizza",name:"PizzaExpress"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Poivre Rouge":{name:"Poivre Rouge",icon:"maki-restaurant",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Restaumarch%C3%A9.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7316076",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Poivre Rouge","brand:wikidata":"Q7316076","brand:wikipedia":"fr:Poivre Rouge (restauration)",cuisine:"french",name:"Poivre Rouge"},reference:{key:"cuisine",value:"french"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Ponderosa Steakhouse":{name:"Ponderosa Steakhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ponbonsteakhouses/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64038204",amenity:"restaurant",cuisine:"american;steak;buffet"},addTags:{amenity:"restaurant",brand:"Ponderosa Steakhouse","brand:wikidata":"Q64038204",cuisine:"american;steak;buffet",name:"Ponderosa Steakhouse"},reference:{key:"cuisine",value:"american"},countryCodes:["ae","eg","qa","tw","us"],terms:["ponderosa"],matchScore:2,suggestion:true},"amenity/restaurant/italian/Prezzo":{name:"Prezzo",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/loveprezzo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7242489",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Prezzo","brand:wikidata":"Q7242489","brand:wikipedia":"en:Prezzo (restaurant)",cuisine:"italian",name:"Prezzo"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Quaker Steak & Lube":{name:"Quaker Steak & Lube",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/TheOfficialQSL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7268570",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Quaker Steak & Lube","brand:wikidata":"Q7268570","brand:wikipedia":"en:Quaker Steak & Lube",cuisine:"wings",name:"Quaker Steak & Lube"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Rainforest Cafe":{name:"Rainforest Cafe",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/officialrainforestcafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3391111",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Rainforest Cafe","brand:wikidata":"Q3391111","brand:wikipedia":"en:Rainforest Cafe",cuisine:"american",name:"Rainforest Cafe"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Red Lobster":{name:"Red Lobster",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/redlobster/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q846301",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Red Lobster","brand:wikidata":"Q846301","brand:wikipedia":"en:Red Lobster",cuisine:"seafood",name:"Red Lobster"},reference:{key:"cuisine",value:"seafood"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Red Robin":{name:"Red Robin",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/RedRobin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7304886",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Red Robin","brand:wikidata":"Q7304886","brand:wikipedia":"en:Red Robin",cuisine:"burger",name:"Red Robin",official_name:"Red Robin Gourmet Burgers and Brews"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Romano's Macaroni Grill":{name:"Romano's Macaroni Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/RomanosMacaroniGrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7362714",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Romano's Macaroni Grill","brand:wikidata":"Q7362714","brand:wikipedia":"en:Romano's Macaroni Grill",cuisine:"italian",name:"Romano's Macaroni Grill"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Round Table Pizza":{name:"Round Table Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/RoundTablePizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7371139",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Round Table Pizza","brand:wikidata":"Q7371139","brand:wikipedia":"en:Round Table Pizza",cuisine:"pizza",name:"Round Table Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:["round table"],matchScore:2,suggestion:true},"amenity/restaurant/american/Ruby Tuesday":{name:"Ruby Tuesday",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/rubytuesday/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7376400",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Ruby Tuesday","brand:wikidata":"Q7376400","brand:wikipedia":"en:Ruby Tuesday (restaurant)",cuisine:"american",name:"Ruby Tuesday"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Ruth's Chris Steak House":{name:"Ruth's Chris Steak House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/RuthsChrisSteakHouseNational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7382829",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Ruth's Chris Steak House","brand:wikidata":"Q7382829","brand:wikipedia":"en:Ruth's Chris Steak House",cuisine:"american",name:"Ruth's Chris Steak House"},reference:{key:"cuisine",value:"american"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Saltgrass Steak House":{name:"Saltgrass Steak House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/saltgrass/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7406113",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Saltgrass Steak House","brand:wikidata":"Q7406113","brand:wikipedia":"en:Saltgrass Steak House",cuisine:"steak_house",name:"Saltgrass Steak House"},countryCodes:["us"],terms:["saltgrass"],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Sausalitos":{name:"Sausalitos",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/sausalitos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2227783",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Sausalitos","brand:wikidata":"Q2227783","brand:wikipedia":"de:Sausalitos",cuisine:"mexican",name:"Sausalitos"},reference:{key:"cuisine",value:"mexican"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Scores":{name:"Scores",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/RestaurantScores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3476059",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Scores","brand:wikidata":"Q3476059","brand:wikipedia":"fr:Scores",cuisine:"chicken;barbecue",name:"Scores"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Shakey's":{name:"Shakey's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/shakeyspizzaparlorusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6134929",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Shakey's","brand:wikidata":"Q6134929","brand:wikipedia":"en:Shakey's Pizza",cuisine:"pizza",name:"Shakey's"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Shari's":{name:"Shari's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SharisPies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7489612",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Shari's","brand:wikidata":"Q7489612","brand:wikipedia":"en:Shari's Cafe & Pies",cuisine:"american",name:"Shari's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Shingle Inn":{name:"Shingle Inn",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/683845754704670721/6OMM2ZND_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7497463",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Shingle Inn","brand:wikidata":"Q7497463","brand:wikipedia":"en:Shingle Inn",cuisine:"bakery",name:"Shingle Inn"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Shoney's":{name:"Shoney's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/shoneys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7500392",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Shoney's","brand:wikidata":"Q7500392","brand:wikipedia":"en:Shoney's",cuisine:"american",name:"Shoney's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Sizzler":{name:"Sizzler",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/sizzler/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1848822",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Sizzler","brand:wikidata":"Q1848822","brand:wikipedia":"en:Sizzler",cuisine:"steak_house",name:"Sizzler"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Skyline Chili":{name:"Skyline Chili",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SkylineChili/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q151224",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Skyline Chili","brand:wikidata":"Q151224","brand:wikipedia":"en:Skyline Chili",cuisine:"chili",name:"Skyline Chili",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Smitty's":{name:"Smitty's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SmittysRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7545728",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Smitty's","brand:wikidata":"Q7545728","brand:wikipedia":"en:Smitty's",cuisine:"pancake",name:"Smitty's"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Snappy Tomato Pizza":{name:"Snappy Tomato Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/SnappyTomatoPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7547352",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Snappy Tomato Pizza","brand:wikidata":"Q7547352","brand:wikipedia":"en:Snappy Tomato Pizza",cuisine:"pizza",name:"Snappy Tomato Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Sonny's BBQ":{name:"Sonny's BBQ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/sonnysbbq/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7561989",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Sonny's BBQ","brand:wikidata":"Q7561989","brand:wikipedia":"en:Sonny's BBQ",cuisine:"bbq",name:"Sonny's BBQ"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Spudbar":{name:"Spudbar",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SpudbarHQ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19589778",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Spudbar","brand:wikidata":"Q19589778","brand:wikipedia":"en:Spudbar",cuisine:"baked_potato",name:"Spudbar"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Spur":{name:"Spur",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SpurSteakRanches/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7581546",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Spur","brand:wikidata":"Q7581546","brand:wikipedia":"en:Spur Steak Ranches",cuisine:"steak_house",name:"Spur"},countryCodes:["za"],terms:["spur steak ranches"],matchScore:2,suggestion:true},"amenity/restaurant/St-Hubert":{name:"St-Hubert",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/sthubert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3495225",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"St-Hubert","brand:wikidata":"Q3495225","brand:wikipedia":"fr:St-Hubert (restaurant)",cuisine:"chicken;barbecue",name:"St-Hubert"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/St. Louis Bar & Grill":{name:"St. Louis Bar & Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/stlouisbarandgrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65567668",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"St. Louis Bar & Grill","brand:wikidata":"Q65567668",cuisine:"chicken",name:"St. Louis Bar & Grill"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Stoney River":{name:"Stoney River",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1050121272938643465/QjAWyNTq_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7619422",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Stoney River","brand:wikidata":"Q7619422","brand:wikipedia":"en:Stoney River Legendary Steaks",cuisine:"steak_house",name:"Stoney River"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Sunset Grill":{name:"Sunset Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SunsetGrillBreakfast/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62112489",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Sunset Grill","brand:wikidata":"Q62112489","brand:wikipedia":"en:Sunset Grill (Canadian restaurant chain)",cuisine:"american",name:"Sunset Grill"},reference:{key:"cuisine",value:"american"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Swiss Chalet":{name:"Swiss Chalet",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SwissChalet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2372909",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Swiss Chalet","brand:wikidata":"Q2372909","brand:wikipedia":"en:Swiss Chalet",cuisine:"chicken",name:"Swiss Chalet"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/TGI Friday's":{name:"TGI Friday's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/TGIFridays/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1524184",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"TGI Friday's","brand:wikidata":"Q1524184","brand:wikipedia":"en:TGI Fridays",cuisine:"american",name:"TGI Friday's"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Ted's Montana Grill":{name:"Ted's Montana Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/tedsmontanagrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16953170",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Ted's Montana Grill","brand:wikidata":"Q16953170","brand:wikipedia":"en:Ted's Montana Grill",cuisine:"american",name:"Ted's Montana Grill"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Texas Roadhouse":{name:"Texas Roadhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/texasroadhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7707945",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Texas Roadhouse","brand:wikidata":"Q7707945","brand:wikipedia":"en:Texas Roadhouse",cuisine:"steak_house",name:"Texas Roadhouse"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/The Cheesecake Factory":{name:"The Cheesecake Factory",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/thecheesecakefactory/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1045842",amenity:"restaurant",cuisine:"american"},addTags:{alt_name:"Cheesecake Factory",amenity:"restaurant",brand:"The Cheesecake Factory","brand:wikidata":"Q1045842","brand:wikipedia":"en:The Cheesecake Factory",cuisine:"american",name:"The Cheesecake Factory"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/The Counter":{name:"The Counter",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/969352718669160449/M6JdmT69_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7727763",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"The Counter","brand:wikidata":"Q7727763","brand:wikipedia":"en:The Counter",cuisine:"burger",name:"The Counter"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/The Keg":{name:"The Keg",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/thekegsteakhouseandbar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7744066",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"The Keg","brand:wikidata":"Q7744066","brand:wikipedia":"en:The Keg",cuisine:"steak_house",name:"The Keg"},countryCodes:["ca","us"],terms:["keg"],matchScore:2,suggestion:true},"amenity/restaurant/The Melting Pot":{name:"The Melting Pot",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/themeltingpotrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7750948",amenity:"restaurant"},addTags:{alt_name:"Melting Pot",amenity:"restaurant",brand:"The Melting Pot","brand:wikidata":"Q7750948","brand:wikipedia":"en:The Melting Pot (restaurant)",cuisine:"fondue",name:"The Melting Pot"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/The Original Pancake House":{name:"The Original Pancake House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ophbaltimore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7755384",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"The Original Pancake House","brand:wikidata":"Q7755384","brand:wikipedia":"en:The Original Pancake House",cuisine:"breakfast;pancake",name:"The Original Pancake House"},countryCodes:["jp","kr","us"],terms:["original pancake house"],matchScore:2,suggestion:true},"amenity/restaurant/Toby Carvery":{name:"Toby Carvery",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1212682364406640642/KV1dX6Db_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7811777",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Toby Carvery","brand:wikidata":"Q7811777","brand:wikipedia":"en:Toby Carvery",cuisine:"british",name:"Toby Carvery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Toks":{name:"Toks",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/ToksMx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48835586",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Toks","brand:wikidata":"Q48835586","brand:wikipedia":"en:Toks",cuisine:"mexican",name:"Toks"},reference:{key:"cuisine",value:"mexican"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Tony Roma's":{name:"Tony Roma's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/TonyRomas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2213883",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Tony Roma's","brand:wikidata":"Q2213883","brand:wikipedia":"en:Tony Roma's",cuisine:"barbecue",name:"Tony Roma's"},terms:["tony roma"],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Topper's Pizza (Canada)":{name:"Topper's Pizza (Canada)",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/topperscanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7825105",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Topper's Pizza","brand:wikidata":"Q7825105","brand:wikipedia":"en:Topper's Pizza (Canadian restaurant)",cuisine:"pizza",name:"Topper's Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Toppers Pizza (USA)":{name:"Toppers Pizza (USA)",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/ToppersRocks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7825113",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Toppers Pizza","brand:wikidata":"Q7825113","brand:wikipedia":"en:Toppers Pizza (American restaurant)",cuisine:"pizza",name:"Toppers Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Unos":{name:"Unos",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/UnoPizzeriaandGrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7897209",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Unos","brand:wikidata":"Q7897209","brand:wikipedia":"en:Uno Pizzeria & Grill",cuisine:"pizza",name:"Unos"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Vapiano":{name:"Vapiano",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Vapiano/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q506252",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Vapiano","brand:wikidata":"Q506252","brand:wikipedia":"en:Vapiano",cuisine:"italian",name:"Vapiano"},reference:{key:"cuisine",value:"italian"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Village Inn":{name:"Village Inn",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/villageinnrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7930659",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Village Inn","brand:wikidata":"Q7930659","brand:wikipedia":"en:Village Inn",cuisine:"american",name:"Village Inn"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Vips (Asia)":{name:"Vips (Asia)",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ivips/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12599540",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q12599540","brand:wikipedia":"ko:빕스",cuisine:"salad;steak_house",name:"Vips"},countryCodes:["cn","kr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Vips (Mexico)":{name:"Vips (Mexico)",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/VIPSMX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48783378",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q48783378","brand:wikipedia":"es:Vips",cuisine:"mexican",name:"Vips"},reference:{key:"cuisine",value:"mexican"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Vips (Spain)":{name:"Vips (Spain)",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/vips/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66087862",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q66087862",cuisine:"international",name:"Vips"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Waffle House":{name:"Waffle House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/WaffleHouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1701206",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Waffle House","brand:wikidata":"Q1701206","brand:wikipedia":"en:Waffle House",cuisine:"american",name:"Waffle House",opening_hours:"24/7"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/asian/Wagamama":{name:"Wagamama",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/wagamama.spain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q503715",amenity:"restaurant",cuisine:"asian"},addTags:{amenity:"restaurant",brand:"Wagamama","brand:wikidata":"Q503715","brand:wikipedia":"en:Wagamama",cuisine:"asian",name:"Wagamama"},reference:{key:"cuisine",value:"asian"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/Wasabi":{name:"Wasabi",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/WasabiUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23891278",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"Wasabi","brand:wikidata":"Q23891278","brand:wikipedia":"en:Wasabi (restaurant)",cuisine:"japanese",name:"Wasabi"},reference:{key:"cuisine",value:"japanese"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Western Sizzlin'":{name:"Western Sizzlin'",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/WesternSizzlin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7988295",amenity:"restaurant",cuisine:"american;steak"},addTags:{amenity:"restaurant",brand:"Western Sizzlin'","brand:wikidata":"Q7988295","brand:wikipedia":"en:Western Sizzlin'",cuisine:"american;steak",name:"Western Sizzlin'"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:["western sizzling"],matchScore:2,suggestion:true},"amenity/restaurant/White Spot":{name:"White Spot",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/whitespot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7995414",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"White Spot","brand:wikidata":"Q7995414","brand:wikipedia":"en:White Spot",cuisine:"burger",name:"White Spot"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Wild Wing":{name:"Wild Wing",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/WildWingRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8000869",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Wild Wing","brand:wikidata":"Q8000869","brand:wikipedia":"en:Wild Wing Restaurants",cuisine:"chicken",name:"Wild Wing"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/sushi/YO! Sushi":{name:"YO! Sushi",icon:"temaki-temaki",imageURL:"https://graph.facebook.com/YOSushi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3105441",amenity:"restaurant",cuisine:"sushi"},addTags:{amenity:"restaurant",brand:"YO! Sushi","brand:wikidata":"Q3105441","brand:wikipedia":"en:YO! Sushi",cuisine:"sushi",name:"YO! Sushi"},reference:{key:"cuisine",value:"sushi"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Yard House":{name:"Yard House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/yardhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21189156",amenity:"restaurant",cuisine:"american"},addTags:{alcohol:"yes",amenity:"restaurant",brand:"Yard House","brand:wikidata":"Q21189156","brand:wikipedia":"en:Yard House",cuisine:"american",name:"Yard House"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Zambrero":{name:"Zambrero",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/zambrero/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18636431",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Zambrero","brand:wikidata":"Q18636431","brand:wikipedia":"en:Zambrero",cuisine:"mexican",name:"Zambrero"},reference:{key:"cuisine",value:"mexican"},countryCodes:["au","ie","nl","th","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Zizzi":{name:"Zizzi",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/wearezizzi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8072944",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Zizzi","brand:wikidata":"Q8072944","brand:wikipedia":"en:Zizzi",cuisine:"italian",name:"Zizzi"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/bd's Mongolian Grill":{name:"bd's Mongolian Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bdsMongolianGrillVerifiedPage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q69890408",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"bd's Mongolian Grill","brand:wikidata":"Q69890408",cuisine:"mongolian_bbq",name:"bd's Mongolian Grill"},countryCodes:["mn","us"],terms:["bd mongolian grill"],matchScore:2,suggestion:true},"amenity/restaurant/dean&david":{name:"dean&david",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/deananddavid/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66132404",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"dean&david","brand:wikidata":"Q66132404",cuisine:"salad;sandwich",name:"dean&david"},countryCodes:["at","ch","de","lu","qa"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Евразия (Russia)":{name:"Евразия (Russia)",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/evrasiakiev/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66087936",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Евразия","brand:wikidata":"Q66087936",cuisine:"international",name:"Евразия"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/Евразия (Ukraine)":{name:"Евразия (Ukraine)",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/EvrasiaKiev/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66088028",amenity:"restaurant",cuisine:"western;japanese"},addTags:{amenity:"restaurant",brand:"Євразія","brand:ru":"Евразия","brand:ua":"Євразія","brand:wikidata":"Q66088028",cuisine:"western;japanese",name:"Євразія","name:ru":"Евразия","name:ua":"Євразія"},reference:{key:"cuisine",value:"japanese"},countryCodes:["ua"],terms:["євразія"],matchScore:2,suggestion:true},"amenity/restaurant/sushi/Планета Суши":{name:"Планета Суши",icon:"temaki-temaki",imageURL:"https://graph.facebook.com/sushiplanet.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62739250",amenity:"restaurant",cuisine:"sushi"},addTags:{amenity:"restaurant",brand:"Планета Суши","brand:wikidata":"Q62739250",cuisine:"sushi",name:"Планета Суши","name:en":"Planet Sushi"},reference:{key:"cuisine",value:"sushi"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/Тануки":{name:"Тануки",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/tanuki.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62758690",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"Тануки","brand:wikidata":"Q62758690",cuisine:"japanese",name:"Тануки","name:en":"Tanuki","name:ru":"Тануки"},reference:{key:"cuisine",value:"japanese"},countryCodes:["kz","ru"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/Якитория":{name:"Якитория",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/yakitoriyacafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66088063",amenity:"restaurant",cuisine:"japanese;international"},addTags:{amenity:"restaurant",brand:"Якитория","brand:wikidata":"Q66088063",cuisine:"japanese;international",name:"Якитория"},reference:{key:"cuisine",value:"japanese"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/בורגר סאלון":{name:"בורגר סאלון",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/BurgerSaloon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760057",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"בורגר סאלון","brand:en":"Burger Saloon","brand:he":"בורגר סאלון","brand:wikidata":"Q64760057",cuisine:"burger",name:"בורגר סאלון","name:en":"Burger Saloon","name:he":"בורגר סאלון"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/あさくま":{name:"あさくま",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ASAKUMA.JP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11257174",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"あさくま","brand:en":"Asakuma","brand:ja":"あさくま","brand:wikidata":"Q11257174","brand:wikipedia":"ja:あさくま",cuisine:"steak_house",name:"あさくま","name:en":"Asakuma","name:ja":"あさくま"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/いきなり!ステーキ":{name:"いきなり!ステーキ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ikinari.steak/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21652405",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"いきなり!ステーキ","brand:en":"Ikinari Steak","brand:ja":"いきなり!ステーキ","brand:wikidata":"Q21652405","brand:wikipedia":"ja:いきなり!ステーキ",cuisine:"steak_house",name:"いきなり!ステーキ","name:en":"Ikinari Steak","name:ja":"いきなり!ステーキ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/とんでん":{name:"とんでん",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/tonden.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11273585",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"とんでん","brand:en":"Tonden","brand:ja":"とんでん","brand:wikidata":"Q11273585","brand:wikipedia":"jp:とんでん",name:"とんでん","name:en":"Tonden","name:ja":"とんでん"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/はなまるうどん":{name:"はなまるうどん",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/hanamaruudon.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11275674",amenity:"restaurant",cuisine:"japanese;udon"},addTags:{amenity:"restaurant",brand:"はなまるうどん","brand:en":"Hanamarūdon","brand:ja":"はなまるうどん","brand:wikidata":"Q11275674","brand:wikipedia":"ja:はなまるうどん",cuisine:"japanese;udon",name:"はなまるうどん","name:en":"Hanamarūdon","name:ja":"はなまるうどん"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/びっくりドンキー":{name:"びっくりドンキー",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/372270522955811/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11276815",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"びっくりドンキー","brand:en":"Bikkuri Donkey","brand:ja":"びっくりドンキー","brand:wikidata":"Q11276815","brand:wikipedia":"ja:びっくりドンキー",cuisine:"burger",name:"びっくりドンキー","name:en":"Bikkuri Donkey","name:ja":"びっくりドンキー"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/やよい軒":{name:"やよい軒",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/yayoiphilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11280577",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"やよい軒","brand:en":"Yayoiken","brand:ja":"やよい軒","brand:wikidata":"Q11280577","brand:wikipedia":"ja:やよい軒",cuisine:"japanese",name:"やよい軒","name:en":"Yayoiken","name:ja":"やよい軒"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/カプリチョーザ":{name:"カプリチョーザ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/capricciosa.restaurant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11294660",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"カプリチョーザ","brand:en":"Capricciosa","brand:ja":"カプリチョーザ","brand:wikidata":"Q11294660","brand:wikipedia":"ja:カプリチョーザ",cuisine:"italian",name:"カプリチョーザ","name:en":"Capricciosa","name:ja":"カプリチョーザ"},reference:{key:"cuisine",value:"italian"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/ココス":{name:"ココス",icon:"maki-restaurant-noodle",imageURL:"https://pbs.twimg.com/profile_images/875584429069959169/5l38DoS7_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11301951",amenity:"restaurant",cuisine:"western;japanese"},addTags:{amenity:"restaurant",brand:"ココス","brand:en":"Coco's","brand:ja":"ココス","brand:wikidata":"Q11301951","brand:wikipedia":"ja:ココスジャパン",cuisine:"western;japanese",name:"ココス","name:en":"Coco's","name:ja":"ココス"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/サイゼリヤ":{name:"サイゼリヤ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Saizeriya4Fun/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q886564",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"サイゼリヤ","brand:en":"Saizeriya","brand:ja":"サイゼリヤ","brand:wikidata":"Q886564","brand:wikipedia":"en:Saizeriya",cuisine:"italian",name:"サイゼリヤ","name:en":"Saizeriya","name:ja":"サイゼリヤ"},reference:{key:"cuisine",value:"italian"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/ジョイフル":{name:"ジョイフル",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/116763348378560/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11310517",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"ジョイフル","brand:en":"Joyfull","brand:ja":"ジョイフル","brand:wikidata":"Q11310517","brand:wikipedia":"ja:ジョイフル",cuisine:"western",name:"ジョイフル","name:en":"Joyfull","name:ja":"ジョイフル"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/ジョナサン":{name:"ジョナサン",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/jonathans.skylark/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11310628",amenity:"restaurant",cuisine:"italian;japanese"},addTags:{amenity:"restaurant",brand:"ジョナサン","brand:en":"Jonathan's","brand:ja":"ジョナサン","brand:wikidata":"Q11310628","brand:wikipedia":"ja:ジョナサン (ファミリーレストラン)",cuisine:"italian;japanese",name:"ジョナサン","name:en":"Jonathan's","name:ja":"ジョナサン"},reference:{key:"cuisine",value:"italian"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/ジョリーパスタ":{name:"ジョリーパスタ",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q10852718",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"ジョリーパスタ","brand:en":"Jolly-Pasta","brand:ja":"ジョリーパスタ","brand:wikidata":"Q10852718","brand:wikipedia":"ja:ジョリーパスタ",cuisine:"pasta",name:"ジョリーパスタ","name:en":"Jolly-Pasta","name:ja":"ジョリーパスタ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/ステーキガスト":{name:"ステーキガスト",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q11253593",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"ステーキガスト","brand:en":"Skylark","brand:ja":"ステーキガスト","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",cuisine:"steak",name:"ステーキガスト","name:en":"Skylark","name:ja":"ステーキガスト"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/デニーズ":{name:"デニーズ",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/dennys.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11320661",amenity:"restaurant",cuisine:"western;japanese"},addTags:{amenity:"restaurant",brand:"デニーズ","brand:en":"Denny's","brand:ja":"デニーズ","brand:wikidata":"Q11320661","brand:wikipedia":"ja:デニーズ (日本)",cuisine:"western;japanese",name:"デニーズ","name:en":"Denny's","name:ja":"デニーズ"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/chinese/バーミヤン":{name:"バーミヤン",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/113010145424150/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11328598",amenity:"restaurant",cuisine:"chinese"},addTags:{amenity:"restaurant",brand:"バーミヤン","brand:en":"Bamiyan","brand:ja":"バーミヤン","brand:wikidata":"Q11328598","brand:wikipedia":"ja:バーミヤン (レストランチェーン)",cuisine:"chinese",name:"バーミヤン","name:en":"Bamiyan","name:ja":"バーミヤン"},reference:{key:"cuisine",value:"chinese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/ビッグボーイ":{name:"ビッグボーイ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bigboyrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4386779",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"ビッグボーイ","brand:en":"Big Boy Restaurants","brand:ja":"ビッグボーイ","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",cuisine:"burger",name:"ビッグボーイ","name:en":"Big Boy Restaurants","name:ja":"ビッグボーイ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/リンガーハット":{name:"リンガーハット",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/ringerhut/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7334856",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"リンガーハット","brand:en":"Ringer Hut","brand:ja":"リンガーハット","brand:wikidata":"Q7334856","brand:wikipedia":"en:Ringer Hut",cuisine:"japanese",name:"リンガーハット","name:en":"Ringer Hut","name:ja":"リンガーハット"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/ロイヤルホスト":{name:"ロイヤルホスト",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/577770399068313/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11120884",amenity:"restaurant",cuisine:"japanese;italian;french"},addTags:{amenity:"restaurant",brand:"ロイヤルホスト","brand:en":"Royal Host","brand:ja":"ロイヤルホスト","brand:wikidata":"Q11120884","brand:wikipedia":"ja:ロイヤルホスト",cuisine:"japanese;italian;french",name:"ロイヤルホスト","name:en":"Royal Host","name:ja":"ロイヤルホスト"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/noodle/丸亀製麺":{name:"丸亀製麺",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/marugame/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10877253",amenity:"restaurant",cuisine:"noodle"},addTags:{amenity:"restaurant",brand:"丸亀製麺","brand:en":"Marugame Seimen","brand:ja":"丸亀製麺","brand:wikidata":"Q10877253","brand:wikipedia":"ja:丸亀製麺",cuisine:"noodle",name:"丸亀製麺","name:en":"Marugame Seimen","name:ja":"丸亀製麺"},reference:{key:"cuisine",value:"noodle"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/chinese/八方雲集":{name:"八方雲集",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/8wayTW/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28417381",amenity:"restaurant",cuisine:"chinese"},addTags:{amenity:"restaurant",brand:"八方雲集","brand:en":"Eight Way","brand:wikidata":"Q28417381","brand:wikipedia":"zh:八方雲集","brand:zh":"八方雲集",cuisine:"chinese",name:"八方雲集","name:en":"Eight Way","name:zh":"八方雲集"},reference:{key:"cuisine",value:"chinese"},countryCodes:["cn","tw"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/和食さと":{name:"和食さと",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/satorsgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11304897",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"和食さと","brand:en":"Washoku Sato","brand:ja":"和食さと","brand:wikidata":"Q11304897","brand:wikipedia":"ja:SRSホールディングス",cuisine:"japanese",name:"和食さと","name:en":"Washoku Sato","name:ja":"和食さと"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:["さと"],matchScore:2,suggestion:true},"amenity/restaurant/japanese/夢庵":{name:"夢庵",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{"brand:wikidata":"Q11253593",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"夢庵","brand:en":"Yumean","brand:ja":"夢庵","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",cuisine:"japanese",name:"夢庵","name:en":"Yumean","name:ja":"夢庵"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/大戸屋":{name:"大戸屋",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/ootoya/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11435522",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"大戸屋","brand:en":"Ootoya","brand:ja":"大戸屋","brand:wikidata":"Q11435522","brand:wikipedia":"ja:大戸屋ホールディングス",cuisine:"japanese",name:"大戸屋","name:en":"Ootoya","name:ja":"大戸屋"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/大阪王将":{name:"大阪王将",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/osakaohsho/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48743717",amenity:"restaurant",cuisine:"japanese;chinese"},addTags:{amenity:"restaurant",brand:"大阪王将","brand:en":"Osaka Ohsho","brand:ja":"大阪王将","brand:wikidata":"Q48743717","brand:wikipedia":"ja:大阪王将",cuisine:"japanese;chinese",name:"大阪王将","name:en":"Osaka Ohsho","name:ja":"大阪王将"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/天下一品":{name:"天下一品",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/157798570902833/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11442172",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"天下一品","brand:en":"Tenkaippin","brand:wikidata":"Q11442172","brand:wikipedia":"en:Tenkaippin",cuisine:"ramen",name:"天下一品","name:en":"Tenkaippin"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/安楽亭":{name:"安楽亭",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q11450866",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"安楽亭","brand:en":"Anrakutei","brand:wikidata":"Q11450866","brand:wikipedia":"ja:安楽亭",cuisine:"barbecue",name:"安楽亭","name:en":"Anrakutei"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/木曽路":{name:"木曽路",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{"brand:wikidata":"Q11518589",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"木曽路","brand:en":"Kisoji","brand:jp":"木曽路","brand:wikidata":"Q11518589","brand:wikipedia":"ja:木曽路 (企業)",cuisine:"japanese",name:"木曽路","name:en":"Kisoji","name:jp":"木曽路"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/chinese/海底捞火锅":{name:"海底捞火锅",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/HaiDiLaoHotPot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5638920",amenity:"restaurant",cuisine:"chinese"},addTags:{amenity:"restaurant",brand:"海底捞火锅","brand:en":"Hai Di Lao Hot Pot","brand:wikidata":"Q5638920","brand:wikipedia":"zh:海底捞",cuisine:"chinese",name:"海底捞火锅","name:en":"Hai Di Lao Hot Pot"},reference:{key:"cuisine",value:"chinese"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/牛角":{name:"牛角",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q11349387",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"牛角","brand:en":"Gyū-Kaku","brand:wikidata":"Q11349387","brand:wikipedia":"en:Gyu-Kaku",cuisine:"barbecue",name:"牛角","name:en":"Gyū-Kaku"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/華屋与兵衛":{name:"華屋与兵衛",icon:"maki-restaurant-noodle",imageURL:"https://pbs.twimg.com/profile_images/1199220209174773760/c_VfagtA_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11620063",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"華屋与兵衛","brand:en":"Hanaya Yohei","brand:ja":"華屋与兵衛","brand:wikidata":"Q11620063","brand:wikipedia":"ja:華屋与兵衛 (レストラン)",cuisine:"japanese",name:"華屋与兵衛","name:en":"Hanaya Yohei","name:ja":"華屋与兵衛"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/chinese/餃子の王将":{name:"餃子の王将",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/ohshosaiyo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11666805",amenity:"restaurant",cuisine:"chinese;gyoza"},addTags:{amenity:"restaurant",brand:"餃子の王将","brand:en":"Gyoza no Ohsho","brand:ja":"餃子の王将","brand:wikidata":"Q11666805","brand:wikipedia":"en:Gyoza no Ohsho",cuisine:"chinese;gyoza",name:"餃子の王将","name:en":"Gyoza no Ohsho","name:ja":"餃子の王将"},reference:{key:"cuisine",value:"chinese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/빕스":{name:"빕스",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ivips/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12599540",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"빕스","brand:en":"Vips","brand:ko":"빕스","brand:wikidata":"Q12599540","brand:wikipedia":"ko:빕스",cuisine:"salad;steak_house",name:"빕스","name:en":"Vips","name:ko":"빕스"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/school/Imagine Schools":{name:"Imagine Schools",icon:"temaki-school",imageURL:"https://graph.facebook.com/imaginecharters/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q6002737",amenity:"school"},addTags:{amenity:"school",brand:"Imagine Schools","brand:wikidata":"Q6002737","brand:wikipedia":"en:Imagine Schools",name:"Imagine Schools","operator:type":"private_non_profit"},countryCodes:["us"],terms:["imagine","imagine school"],matchScore:2,suggestion:true},"amenity/school/KIPP":{name:"KIPP",icon:"temaki-school",imageURL:"https://graph.facebook.com/KIPPFoundation/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q6423304",amenity:"school"},addTags:{amenity:"school",brand:"KIPP","brand:wikidata":"Q6423304","brand:wikipedia":"en:KIPP (organization)",name:"KIPP",official_name:"Knowledge Is Power Program","operator:type":"private_non_profit"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/school/Success Academy":{name:"Success Academy",icon:"temaki-school",imageURL:"https://graph.facebook.com/SuccessAcademies/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q14707388",amenity:"school"},addTags:{amenity:"school",brand:"Success Academy","brand:wikidata":"Q14707388","brand:wikipedia":"en:Success Academy Charter Schools",name:"Success Academy","operator:type":"private_non_profit"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/social_centre/American Legion Hall":{name:"American Legion Hall",icon:"fas-handshake",imageURL:"https://graph.facebook.com/americanlegionhq/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q468865",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"American Legion","brand:wikidata":"Q468865","brand:wikipedia":"en:American Legion",name:"American Legion Hall","social_centre:for":"veterans"},countryCodes:["us"],terms:["american legion"],matchScore:2,suggestion:true},"amenity/social_centre/Eagles Lodge":{name:"Eagles Lodge",icon:"fas-handshake",imageURL:"https://graph.facebook.com/foegrandaerie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5493810",amenity:"social_centre"},addTags:{alt_name:"Aeries Lodge",amenity:"social_centre",brand:"Fraternal Order of Eagles","brand:wikidata":"Q5493810","brand:wikipedia":"en:Fraternal Order of Eagles",name:"Eagles Lodge",official_name:"Fraternal Order of Eagles",short_name:"FOE"},countryCodes:["us"],terms:["aeries","eagles"],matchScore:2,suggestion:true},"amenity/social_centre/Elks Lodge":{name:"Elks Lodge",icon:"fas-handshake",imageURL:"https://graph.facebook.com/bpoeusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2895789",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Benevolent and Protective Order of Elks","brand:wikidata":"Q2895789","brand:wikipedia":"en:Benevolent and Protective Order of Elks",name:"Elks Lodge",official_name:"Benevolent and Protective Order of Elks",short_name:"BPOE"},countryCodes:["us"],terms:["elks"],matchScore:2,suggestion:true},"amenity/social_centre/Lions Clubs International":{name:"Lions Clubs International",icon:"fas-handshake",imageURL:"https://graph.facebook.com/lionsclubs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q270029",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Lions Clubs International","brand:wikidata":"Q270029","brand:wikipedia":"en:Lions Clubs International",name:"Lions Clubs International"},terms:["lions club","lions club international","lions clubs"],matchScore:2,suggestion:true},"amenity/social_centre/Moose Lodge":{name:"Moose Lodge",icon:"fas-handshake",imageURL:"https://graph.facebook.com/heardofmoose/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6908585",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Loyal Order of Moose","brand:wikidata":"Q6908585","brand:wikipedia":"en:Loyal Order of Moose",name:"Moose Lodge",official_name:"Loyal Order of Moose"},countryCodes:["bm","ca","us"],terms:["moose"],matchScore:2,suggestion:true},"amenity/social_centre/Odd Fellows Hall":{name:"Odd Fellows Hall",icon:"fas-handshake",imageURL:"https://graph.facebook.com/IOOFSGL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425508",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Independent Order of Odd Fellows","brand:wikidata":"Q1425508","brand:wikipedia":"en:Independent Order of Odd Fellows",name:"Odd Fellows Hall",official_name:"Independent Order of Odd Fellows",short_name:"IOOF"},terms:["odd fellow","odd fellows"],matchScore:2,suggestion:true},"amenity/social_centre/Orioles Nest":{name:"Orioles Nest",icon:"fas-handshake",imageURL:"https://graph.facebook.com/146663135430661/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5493805",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Fraternal Order Orioles","brand:wikidata":"Q5493805","brand:wikipedia":"en:Fraternal Order Orioles",name:"Orioles Nest",official_name:"Fraternal Order Orioles",short_name:"FOO"},countryCodes:["us"],terms:["fraternal order of orioles","oriole nest","orioles"],matchScore:2,suggestion:true},"amenity/social_centre/Royal Canadian Legion Hall":{name:"Royal Canadian Legion Hall",icon:"fas-handshake",imageURL:"https://graph.facebook.com/CanadianLegion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3270231",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Royal Canadian Legion","brand:wikidata":"Q3270231","brand:wikipedia":"en:Royal Canadian Legion",name:"Royal Canadian Legion Hall",short_name:"RCL"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/social_centre/VFW Post":{name:"VFW Post",icon:"fas-handshake",imageURL:"https://graph.facebook.com/VFWFans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3556413",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Veterans of Foreign Wars of the United States","brand:wikidata":"Q3556413","brand:wikipedia":"en:Veterans of Foreign Wars",name:"VFW Post","name:en":"VFW Post",official_name:"Veterans of Foreign Wars of the United States",short_name:"VFW","social_centre:for":"veterans"},countryCodes:["de","jp","kr","ph","th","us"],terms:[],matchScore:2,suggestion:true},"amenity/social_facility/Boys & Girls Club":{name:"Boys & Girls Club",icon:"temaki-social_facility",imageURL:"https://graph.facebook.com/bgca.clubs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2923055",amenity:"social_facility"},addTags:{amenity:"social_facility",brand:"Boys & Girls Club","brand:wikidata":"Q2923055","brand:wikipedia":"en:Boys & Girls Clubs of America",name:"Boys & Girls Club",social_facility:"outreach","social_facility:for":"children"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/social_facility/ONCE":{name:"ONCE",icon:"temaki-social_facility",imageURL:"https://graph.facebook.com/ONCE.org/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1750397",amenity:"social_facility"},addTags:{amenity:"social_facility",brand:"ONCE","brand:wikidata":"Q1750397","brand:wikipedia":"es:Organización Nacional de Ciegos Españoles",name:"ONCE",official_name:"Organización Nacional de Ciegos Españoles",social_facility:"outreach","social_facility:for":"blind"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/social_facility/Vet Center":{name:"Vet Center",icon:"temaki-social_facility",imageURL:"https://graph.facebook.com/VeteransHealth/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6580225",amenity:"social_facility"},addTags:{amenity:"social_facility",brand:"VA","brand:wikidata":"Q6580225","brand:wikipedia":"en:Veterans Health Administration",healthcare:"counselling","healthcare:counselling":"psychiatry","healthcare:for":"veterans",name:"Vet Center",social_facility:"healthcare;outreach","social_facility:for":"veterans"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/university/DeVry University":{name:"DeVry University",icon:"maki-college",imageURL:"https://graph.facebook.com/DEVRYUNIVERSITY/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q3298441",amenity:"university"},addTags:{amenity:"university",brand:"DeVry University","brand:wikidata":"Q3298441","brand:wikipedia":"en:DeVry University",name:"DeVry University",short_name:"DeVry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/university/Strayer University":{name:"Strayer University",icon:"maki-college",imageURL:"https://graph.facebook.com/StrayerUniversity/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q7622587",amenity:"university"},addTags:{amenity:"university",brand:"Strayer University","brand:wikidata":"Q7622587","brand:wikipedia":"en:Strayer University",name:"Strayer University",short_name:"Strayer"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/university/University of Phoenix":{name:"University of Phoenix",icon:"maki-college",imageURL:"https://graph.facebook.com/universityofphoenix/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q1889100",amenity:"university"},addTags:{amenity:"university",brand:"University of Phoenix","brand:wikidata":"Q1889100","brand:wikipedia":"en:University of Phoenix",name:"University of Phoenix",short_name:"UOPX"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/Autosur":{name:"Autosur",icon:"maki-car",imageURL:"https://graph.facebook.com/autosurfrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64224807",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"Autosur","brand:wikidata":"Q64224807",name:"Autosur"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/Autovision":{name:"Autovision",icon:"maki-car",imageURL:"https://graph.facebook.com/AutovisionFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64224842",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"Autovision","brand:wikidata":"Q64224842",name:"Autovision"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/Dekra":{name:"Dekra",icon:"maki-car",imageURL:"https://graph.facebook.com/DEKRA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q383711",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"Dekra","brand:wikidata":"Q383711","brand:wikipedia":"en:Dekra",name:"Dekra",official_name:"Dekra Automotive"},countryCodes:["de","fr"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/Sécuritest":{name:"Sécuritest",icon:"maki-car",imageURL:"https://graph.facebook.com/218871841874062/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64224992",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"Sécuritest","brand:wikidata":"Q64224992",name:"Sécuritest"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/TÜV Hanse":{name:"TÜV Hanse",icon:"maki-car",imageURL:"https://graph.facebook.com/tuevhanse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2463537",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"TÜV Hanse","brand:wikidata":"Q2463537","brand:wikipedia":"de:TÜV Hanse",name:"TÜV Hanse",short_name:"TÜV"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/TÜV Hessen":{name:"TÜV Hessen",icon:"maki-car",imageURL:"https://graph.facebook.com/Tuev.Hessen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2463542",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"TÜV Hessen","brand:wikidata":"Q2463542","brand:wikipedia":"de:TÜV Hessen",name:"TÜV Hessen",short_name:"TÜV"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/TÜV Nord":{name:"TÜV Nord",icon:"maki-car",imageURL:"https://graph.facebook.com/tuevnordde/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2463547",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"TÜV Nord","brand:wikidata":"Q2463547","brand:wikipedia":"de:TÜV Nord",name:"TÜV Nord",short_name:"TÜV"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/TÜV Rheinland":{name:"TÜV Rheinland",icon:"maki-car",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTUEV-Rheinland-Logo2.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q632391",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"TÜV Rheinland","brand:wikidata":"Q632391","brand:wikipedia":"de:TÜV Rheinland",name:"TÜV Rheinland",short_name:"TÜV"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/TÜV Saarland":{name:"TÜV Saarland",icon:"maki-car",imageURL:"https://graph.facebook.com/TUEVSeminare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q996314",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"TÜV Saarland","brand:wikidata":"Q996314","brand:wikipedia":"de:TÜV Saarland",name:"TÜV Saarland",short_name:"TÜV"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/TÜV Süd":{name:"TÜV Süd",icon:"maki-car",imageURL:"https://graph.facebook.com/123967834361715/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q880718",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"TÜV Süd","brand:wikidata":"Q880718","brand:wikipedia":"de:TÜV Süd",name:"TÜV Süd",short_name:"TÜV"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/TÜV Thüringen":{name:"TÜV Thüringen",icon:"maki-car",imageURL:"https://graph.facebook.com/tuevthueringen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2463551",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"TÜV Thüringen","brand:wikidata":"Q2463551","brand:wikipedia":"de:TÜV Thüringen",name:"TÜV Thüringen",short_name:"TÜV"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup/Amazon Locker":{name:"Amazon Locker",icon:"temaki-vending_lockers",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAmazon%20locker%20logotype.png&width=100",geometry:["point","vertex"],tags:{"brand:wikidata":"Q16974764",amenity:"vending_machine",vending:"parcel_pickup"},addTags:{amenity:"vending_machine",brand:"Amazon Locker","brand:wikidata":"Q16974764","brand:wikipedia":"en:Amazon Locker",name:"Amazon Locker",vending:"parcel_pickup"},reference:{key:"vending",value:"parcel_pickup"},countryCodes:["de","us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/AmeriGas":{name:"AmeriGas",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/AmeriGas/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q23130318",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"AmeriGas","brand:wikidata":"Q23130318","fuel:lpg":"yes",name:"AmeriGas",vending:"gas"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/public_transport_tickets/Automat ŚKUP":{name:"Automat ŚKUP",icon:"temaki-vending_tickets",geometry:["point","vertex"],tags:{"brand:wikidata":"Q24945427",amenity:"vending_machine",vending:"public_transport_tickets"},addTags:{amenity:"vending_machine",brand:"Automat ŚKUP","brand:wikidata":"Q24945427","brand:wikipedia":"pl:Śląska Karta Usług Publicznych",name:"Automat ŚKUP",vending:"public_transport_tickets"},reference:{key:"vending",value:"public_transport_tickets"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/public_transport_tickets/BKK-automata":{name:"BKK-automata",icon:"temaki-vending_tickets",imageURL:"https://graph.facebook.com/bkkbudapest/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q608917",amenity:"vending_machine",vending:"public_transport_tickets"},addTags:{amenity:"vending_machine",brand:"BKK-automata","brand:wikidata":"Q608917","brand:wikipedia":"hu:Budapesti Közlekedési Központ",name:"BKK-automata",vending:"public_transport_tickets"},reference:{key:"vending",value:"public_transport_tickets"},countryCodes:["hu"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/electronics/Best Buy Express":{name:"Best Buy Express",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/bestbuy/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q533415",amenity:"vending_machine",vending:"electronics"},addTags:{amenity:"vending_machine",brand:"Best Buy Express","brand:wikidata":"Q533415",name:"Best Buy Express",vending:"electronics"},reference:{key:"vending",value:"electronics"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/Blue Rhino":{name:"Blue Rhino",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/BlueRhino/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q65681213",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"Blue Rhino","brand:wikidata":"Q65681213","fuel:lpg":"yes",name:"Blue Rhino",vending:"gas"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/CVS Pharmacy":{name:"CVS Pharmacy",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/CVS/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q2078880",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"CVS Pharmacy","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",name:"CVS Pharmacy",short_name:"CVS",vending:"chemist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup_dropoff/DHL Packstation":{name:"DHL Packstation",icon:"temaki-vending_lockers",geometry:["point","vertex"],tags:{"brand:wikidata":"Q1766703",amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in"},addTags:{amenity:"vending_machine",brand:"Packstation","brand:wikidata":"Q1766703","brand:wikipedia":"en:Packstation",name:"DHL Packstation",vending:"parcel_pickup;parcel_mail_in"},reference:{key:"vending",value:"parcel_pickup;parcel_mail_in"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/DHL Paketbox":{name:"DHL Paketbox",icon:"temaki-vending_machine",geometry:["point","vertex"],tags:{"brand:wikidata":"Q2046604",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"Paketbox","brand:wikidata":"Q2046604","brand:wikipedia":"de:Paketbox",name:"DHL Paketbox",vending:"parcel_mail_in"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/excrement_bags/Dog-Station":{name:"Dog-Station",icon:"temaki-vending_pet_waste",geometry:["point","vertex"],tags:{"brand:wikidata":"Q63720061",amenity:"vending_machine",vending:"excrement_bags"},addTags:{amenity:"vending_machine",brand:"Dog-Station","brand:wikidata":"Q63720061",name:"Dog-Station",vending:"excrement_bags"},reference:{key:"vending",value:"excrement_bags"},countryCodes:["at","de","dk"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/ice_cubes/Home City Ice":{name:"Home City Ice",icon:"temaki-vending_ice",imageURL:"https://graph.facebook.com/HomeCityIceJobs/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q5888287",amenity:"vending_machine",vending:"ice_cubes"},addTags:{amenity:"vending_machine",brand:"Home City Ice","brand:wikidata":"Q5888287",name:"Home City Ice",vending:"ice_cubes"},reference:{key:"vending",value:"ice_cubes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/public_transport_tickets/KKM":{name:"KKM",icon:"temaki-vending_tickets",geometry:["point","vertex"],tags:{"brand:wikidata":"Q57515549",amenity:"vending_machine",vending:"public_transport_tickets"},addTags:{amenity:"vending_machine",brand:"KKM","brand:wikidata":"Q57515549",name:"KKM",vending:"public_transport_tickets"},reference:{key:"vending",value:"public_transport_tickets"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup/Ozon Box":{name:"Ozon Box",icon:"temaki-vending_lockers",imageURL:"https://graph.facebook.com/ozon.ru/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q2365235",amenity:"vending_machine",vending:"parcel_pickup"},addTags:{amenity:"vending_machine",brand:"Ozon Box","brand:wikidata":"Q2365235","brand:wikipedia":"ru:Ozon.ru",name:"Ozon Box",vending:"parcel_pickup"},reference:{key:"vending",value:"parcel_pickup"},countryCodes:["ru"],terms:["постамат ozon box"],matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup_dropoff/Paczkomat InPost":{name:"Paczkomat InPost",icon:"temaki-vending_lockers",imageURL:"https://graph.facebook.com/paczkomaty/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q3182097",amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in"},addTags:{amenity:"vending_machine",brand:"InPost","brand:wikidata":"Q3182097","brand:wikipedia":"pl:InPost",name:"Paczkomat InPost",vending:"parcel_pickup;parcel_mail_in"},reference:{key:"vending",value:"parcel_pickup;parcel_mail_in"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/parking_tickets/ParkPlus (Calgary)":{name:"ParkPlus (Calgary)",icon:"temaki-vending_tickets",imageURL:"https://graph.facebook.com/CalgaryParkingAuthority/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q63719595",amenity:"vending_machine",vending:"parking_tickets"},addTags:{amenity:"vending_machine",brand:"ParkPlus","brand:wikidata":"Q63719595",name:"ParkPlus",vending:"parking_tickets"},reference:{key:"vending",value:"parking_tickets"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/Redbox":{name:"Redbox",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/redbox/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q7305489",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"Redbox","brand:wikidata":"Q7305489","brand:wikipedia":"en:Redbox",name:"Redbox",vending:"movies"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/ice_cubes/Reddy Ice":{name:"Reddy Ice",icon:"temaki-vending_ice",imageURL:"https://graph.facebook.com/RealReddyIce/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q7305666",amenity:"vending_machine",vending:"ice_cubes"},addTags:{amenity:"vending_machine",brand:"Reddy Ice","brand:wikidata":"Q7305666","brand:wikipedia":"en:Reddy Ice",name:"Reddy Ice",vending:"ice_cubes"},reference:{key:"vending",value:"ice_cubes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/excrement_bags/Robidog":{name:"Robidog",icon:"temaki-vending_pet_waste",geometry:["point","vertex"],tags:{"brand:wikidata":"Q2159689",amenity:"vending_machine",vending:"excrement_bags"},addTags:{amenity:"vending_machine",brand:"Robidog","brand:wikidata":"Q2159689","brand:wikipedia":"de:Robidog",name:"Robidog",vending:"excrement_bags"},reference:{key:"vending",value:"excrement_bags"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup_dropoff/Smartpost":{name:"Smartpost",icon:"temaki-vending_lockers",geometry:["point","vertex"],tags:{"brand:wikidata":"Q7543889",amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in"},addTags:{amenity:"vending_machine",brand:"Smartpost","brand:wikidata":"Q7543889","brand:wikipedia":"fi:SmartPOST",name:"Smartpost",vending:"parcel_pickup;parcel_mail_in"},reference:{key:"vending",value:"parcel_pickup;parcel_mail_in"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/cigarettes/Tobaccoland":{name:"Tobaccoland",icon:"temaki-vending_cigarettes",geometry:["point","vertex"],tags:{"brand:wikidata":"Q1439872",amenity:"vending_machine",vending:"cigarettes"},addTags:{amenity:"vending_machine",brand:"Tobaccoland","brand:wikidata":"Q1439872","brand:wikipedia":"de:Tobaccoland Automatengesellschaft",name:"Tobaccoland",vending:"cigarettes"},reference:{key:"vending",value:"cigarettes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/drinks/コカ・コーラ":{name:"コカ・コーラ",icon:"temaki-vending_cold_drink",imageURL:"https://graph.facebook.com/CocaColaUnitedStates/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q2813",amenity:"vending_machine",vending:"drinks"},addTags:{amenity:"vending_machine",brand:"コカ・コーラ","brand:en":"Coca-Cola","brand:ja":"コカ・コーラ","brand:wikidata":"Q2813","brand:wikipedia":"ja:コカ・コーラ",drink:"cola",name:"コカ・コーラ","name:en":"Coca-Cola","name:ja":"コカ・コーラ",vending:"drinks"},reference:{key:"vending",value:"drinks"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/ポッカサッポロ":{name:"ポッカサッポロ",icon:"temaki-vending_machine",imageURL:"https://pbs.twimg.com/profile_images/937822527543377920/j8-XeRV8_bigger.jpg",geometry:["point","vertex"],tags:{"brand:wikidata":"Q7208665",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"ポッカサッポロ","brand:en":"Pokka Sapporo","brand:ja":"ポッカサッポロ","brand:wikidata":"Q7208665","brand:wikipedia":"ja:ポッカサッポロフード&ビバレッジ",name:"ポッカサッポロ","name:en":"Pokka Sapporo","name:ja":"ポッカサッポロ",vending:"water;food"},countryCodes:["jp"],terms:["pokka sapporo"],matchScore:2,suggestion:true},"amenity/veterinary/Banfield Pet Hospital":{name:"Banfield Pet Hospital",icon:"temaki-veterinary_care",imageURL:"https://graph.facebook.com/BanfieldPetHospital/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882416",amenity:"veterinary"},addTags:{amenity:"veterinary",brand:"Banfield Pet Hospital","brand:wikidata":"Q2882416","brand:wikipedia":"en:Banfield Pet Hospital",name:"Banfield Pet Hospital"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/veterinary/VCA Animal Hospital":{name:"VCA Animal Hospital",icon:"temaki-veterinary_care",imageURL:"https://graph.facebook.com/VCAAnimalHospitals/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7906620",amenity:"veterinary"},addTags:{amenity:"veterinary",brand:"VCA Animal Hospital","brand:wikidata":"Q7906620","brand:wikipedia":"en:VCA Animal Hospitals",name:"VCA Animal Hospital"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"craft/cleaning/Molly Maid":{name:"Molly Maid",icon:"temaki-vacuum",imageURL:"https://graph.facebook.com/MollyMaid/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6896624",craft:"cleaning"},addTags:{brand:"Molly Maid","brand:wikidata":"Q6896624","brand:wikipedia":"en:Molly Maid",craft:"cleaning",name:"Molly Maid"},countryCodes:["ca","gb","jp","pt","us"],terms:[],matchScore:2,suggestion:true},"craft/plumber/Mr. Rooter":{name:"Mr. Rooter",icon:"temaki-plumber",imageURL:"https://pbs.twimg.com/profile_images/746187320223633408/_TPED5cc_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6929145",craft:"plumber"},addTags:{alt_name:"Mister Rooter",brand:"Mr. Rooter","brand:wikidata":"Q6929145","brand:wikipedia":"en:Mr. Rooter",craft:"plumber",name:"Mr. Rooter",official_name:"Mr. Rooter Plumbing"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"craft/signmaker/Fastsigns":{name:"Fastsigns",icon:"temaki-tools",imageURL:"https://graph.facebook.com/FASTSIGNS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5437127",craft:"signmaker"},addTags:{brand:"Fastsigns","brand:wikidata":"Q5437127","brand:wikipedia":"en:Fastsigns",craft:"signmaker",name:"Fastsigns"},countryCodes:["ae","ca","cl","gb","ky","mx","sa","us"],terms:[],matchScore:2,suggestion:true},"craft/window_construction/K par K":{name:"K par K",icon:"temaki-window",imageURL:"https://graph.facebook.com/KparKFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3191596",craft:"window_construction"},addTags:{brand:"K par K","brand:wikidata":"Q3191596","brand:wikipedia":"fr:K par K",craft:"window_construction",name:"K par K"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"healthcare/blood_donation/American Red Cross":{name:"American Red Cross",icon:"maki-blood-bank",imageURL:"https://graph.facebook.com/redcross/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q470110",healthcare:"blood_donation"},addTags:{brand:"American Red Cross","brand:wikidata":"Q470110","brand:wikipedia":"en:The American National Red Cross","donation:compensation":"no",healthcare:"blood_donation",name:"American Red Cross",official_name:"The American National Red Cross",short_name:"Red Cross"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"healthcare/blood_donation/Australian Red Cross Blood Service":{name:"Australian Red Cross Blood Service",icon:"maki-blood-bank",imageURL:"https://graph.facebook.com/lifebloodau/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4824602",healthcare:"blood_donation"},addTags:{brand:"Australian Red Cross Blood Service","brand:wikidata":"Q4824602","brand:wikipedia":"en:Australian Red Cross Blood Service","donation:compensation":"no",healthcare:"blood_donation",name:"Australian Red Cross Blood Service",short_name:"Blood Service"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"healthcare/blood_donation/Thai Red Cross Society":{name:"Thai Red Cross Society",icon:"maki-blood-bank",imageURL:"https://graph.facebook.com/ThaiRedCross/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4922087",healthcare:"blood_donation"},addTags:{brand:"Thai Red Cross Society","brand:wikidata":"Q4922087","brand:wikipedia":"en:Thai Red Cross Society","donation:compensation":"no",healthcare:"blood_donation",name:"Thai Red Cross Society",short_name:"Thai Red Cross"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"healthcare/counselling/Jenny Craig":{name:"Jenny Craig",icon:"fas-comments",imageURL:"https://graph.facebook.com/jennycraig/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6179221",healthcare:"counselling"},addTags:{brand:"Jenny Craig","brand:wikidata":"Q6179221","brand:wikipedia":"en:Jenny Craig, Inc.",healthcare:"counselling","healthcare:counselling":"dietitian","healthcare:speciality":"weight_loss",name:"Jenny Craig"},countryCodes:["au","ca","nz","us"],terms:[],matchScore:2,suggestion:true},"healthcare/counselling/WW Studio":{name:"WW Studio",icon:"fas-comments",imageURL:"https://graph.facebook.com/WW/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1929466",healthcare:"counselling"},addTags:{alt_name:"Weight Watchers",brand:"WW Studio","brand:wikidata":"Q1929466","brand:wikipedia":"en:WW International",healthcare:"counselling","healthcare:counselling":"dietitian","healthcare:speciality":"weight_loss",name:"WW Studio"},terms:["ww"],matchScore:2,suggestion:true},"landuse/residential/Avalon":{name:"Avalon",icon:"maki-residential-community",imageURL:"https://pbs.twimg.com/profile_images/859879308940193792/us4WbKaN_bigger.jpg",geometry:["area"],tags:{"brand:wikidata":"Q64665938",landuse:"residential"},addTags:{brand:"Avalon","brand:wikidata":"Q64665938",landuse:"residential",name:"Avalon",residential:"apartments"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"leisure/bowling_alley/Hollywood Bowl":{name:"Hollywood Bowl",icon:"temaki-bowling",imageURL:"https://graph.facebook.com/hollywoodbowluk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80971952",leisure:"bowling_alley"},addTags:{brand:"Hollywood Bowl","brand:wikidata":"Q80971952","brand:wikipedia":"en:Hollywood Bowl Group",leisure:"bowling_alley",name:"Hollywood Bowl"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"leisure/bowling_alley/Strike Bowling Bar":{name:"Strike Bowling Bar",icon:"temaki-bowling",imageURL:"https://graph.facebook.com/strikebowling/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7623769",leisure:"bowling_alley"},addTags:{brand:"Strike Bowling Bar","brand:wikidata":"Q7623769","brand:wikipedia":"en:Strike Bowling Bar",leisure:"bowling_alley",name:"Strike Bowling Bar"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"leisure/dog_park/Kamp K9":{name:"Kamp K9",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/KOAKampgrounds/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q16988635",leisure:"dog_park"},addTags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",leisure:"dog_park",name:"Kamp K9"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"leisure/escape_game/Escapology":{name:"Escapology",icon:"fas-puzzle-piece",imageURL:"https://graph.facebook.com/EscapologySanDiego/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64137163",leisure:"escape_game"},addTags:{brand:"Escapology","brand:wikidata":"Q64137163",leisure:"escape_game",name:"Escapology"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/24 Hour Fitness":{name:"24 Hour Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/24HourFitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4631849",leisure:"fitness_centre"},addTags:{brand:"24 Hour Fitness","brand:wikidata":"Q4631849","brand:wikipedia":"en:24 Hour Fitness",leisure:"fitness_centre",name:"24 Hour Fitness"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Anytime Fitness":{name:"Anytime Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/anytimefitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4778364",leisure:"fitness_centre"},addTags:{brand:"Anytime Fitness","brand:wikidata":"Q4778364","brand:wikipedia":"en:Anytime Fitness",leisure:"fitness_centre",name:"Anytime Fitness"},terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Basic-Fit":{name:"Basic-Fit",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/BasicFitEspana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q40165577",leisure:"fitness_centre"},addTags:{brand:"Basic-Fit","brand:wikidata":"Q40165577","brand:wikipedia":"nl:Basic-Fit",leisure:"fitness_centre",name:"Basic-Fit"},countryCodes:["be","es","fr","lu","nl"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Blink Fitness":{name:"Blink Fitness",icon:"fas-dumbbell",geometry:["point","area"],tags:{"brand:wikidata":"Q65621568",leisure:"fitness_centre"},addTags:{brand:"Blink Fitness","brand:wikidata":"Q65621568",leisure:"fitness_centre",name:"Blink Fitness"},countryCodes:["us"],terms:["blink"],matchScore:2,suggestion:true},"leisure/fitness_centre/Clever fit":{name:"Clever fit",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/cleverfit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27909675",leisure:"fitness_centre"},addTags:{brand:"Clever fit","brand:wikidata":"Q27909675","brand:wikipedia":"de:Clever fit",leisure:"fitness_centre",name:"Clever fit"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/CorePower Yoga":{name:"CorePower Yoga",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/CorePowerYoga/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21015663",leisure:"fitness_centre"},addTags:{brand:"CorePower Yoga","brand:wikidata":"Q21015663","brand:wikipedia":"en:CorePower Yoga",leisure:"fitness_centre",name:"CorePower Yoga",sport:"yoga"},countryCodes:["us"],terms:["corepower"],matchScore:2,suggestion:true},"leisure/fitness_centre/Crunch Fitness":{name:"Crunch Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/CRUNCH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5190093",leisure:"fitness_centre"},addTags:{brand:"Crunch Fitness","brand:wikidata":"Q5190093","brand:wikipedia":"en:Crunch Fitness",leisure:"fitness_centre",name:"Crunch Fitness"},countryCodes:["au","ca","us"],terms:["crunch"],matchScore:2,suggestion:true},"leisure/fitness_centre/Curves":{name:"Curves",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/Curves/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5196080",leisure:"fitness_centre"},addTags:{brand:"Curves","brand:wikidata":"Q5196080","brand:wikipedia":"en:Curves International",leisure:"fitness_centre",name:"Curves"},terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/F45 Training":{name:"F45 Training",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/F45FunctionalTraining/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64390973",leisure:"fitness_centre"},addTags:{brand:"F45 Training","brand:wikidata":"Q64390973",leisure:"fitness_centre",name:"F45 Training"},terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Fit4Less (Canada)":{name:"Fit4Less (Canada)",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/fit4lesscanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64821050",leisure:"fitness_centre"},addTags:{brand:"Fit4Less","brand:wikidata":"Q64821050",leisure:"fitness_centre",name:"Fit4Less"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Fit4less (UK)":{name:"Fit4less (UK)",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/Fit4lessUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64821053",leisure:"fitness_centre"},addTags:{brand:"Fit4less","brand:wikidata":"Q64821053",leisure:"fitness_centre",name:"Fit4less"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Fitness First":{name:"Fitness First",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/FitnessFirstGER/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q127120",leisure:"fitness_centre"},addTags:{brand:"Fitness First","brand:wikidata":"Q127120","brand:wikipedia":"en:Fitness First",leisure:"fitness_centre",name:"Fitness First"},countryCodes:["ae","au","de","gb","ph","th"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Fitness24Seven":{name:"Fitness24Seven",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/Fitness24SevenSweden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61112447",leisure:"fitness_centre"},addTags:{brand:"Fitness24Seven","brand:wikidata":"Q61112447","brand:wikipedia":"sv:Fitness24Seven",leisure:"fitness_centre",name:"Fitness24Seven"},countryCodes:["fi","se"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Gold's Gym":{name:"Gold's Gym",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/goldsgym/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1536234",leisure:"fitness_centre"},addTags:{brand:"Gold's Gym","brand:wikidata":"Q1536234","brand:wikipedia":"en:Gold's Gym",leisure:"fitness_centre",name:"Gold's Gym"},countryCodes:["ae","in","ph","us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/GoodLife Fitness":{name:"GoodLife Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/goodlifefitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3110654",leisure:"fitness_centre"},addTags:{brand:"GoodLife Fitness","brand:wikidata":"Q3110654","brand:wikipedia":"en:GoodLife Fitness",leisure:"fitness_centre",name:"GoodLife Fitness"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Jazzercise":{name:"Jazzercise",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/Jazzerciseinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6168434",leisure:"fitness_centre"},addTags:{brand:"Jazzercise","brand:wikidata":"Q6168434","brand:wikipedia":"en:Jazzercise",leisure:"fitness_centre",name:"Jazzercise"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/LA Fitness":{name:"LA Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/LAFitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6457180",leisure:"fitness_centre"},addTags:{brand:"LA Fitness","brand:wikidata":"Q6457180","brand:wikipedia":"en:LA Fitness",leisure:"fitness_centre",name:"LA Fitness"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Life Time":{name:"Life Time",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/LifeTime.Life/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6545004",leisure:"fitness_centre"},addTags:{brand:"Life Time","brand:wikidata":"Q6545004","brand:wikipedia":"en:Life Time Fitness",leisure:"fitness_centre",name:"Life Time"},countryCodes:["ca","us"],terms:["life time athletic","life time fitness"],matchScore:2,suggestion:true},"leisure/fitness_centre/McFit":{name:"McFit",icon:"fas-dumbbell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRSG%20Group%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q871302",leisure:"fitness_centre"},addTags:{brand:"McFit","brand:wikidata":"Q871302","brand:wikipedia":"en:McFit",leisure:"fitness_centre",name:"McFit"},countryCodes:["at","de","es","it","pl"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Orangetheory Fitness":{name:"Orangetheory Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/OrangeTheoryFitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25005163",leisure:"fitness_centre"},addTags:{brand:"Orangetheory Fitness","brand:wikidata":"Q25005163","brand:wikipedia":"en:Orangetheory Fitness",leisure:"fitness_centre",name:"Orangetheory Fitness"},countryCodes:["ca","es","us"],terms:["orangetheory"],matchScore:2,suggestion:true},"leisure/fitness_centre/Planet Fitness":{name:"Planet Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/planetfitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7201095",leisure:"fitness_centre"},addTags:{brand:"Planet Fitness","brand:wikidata":"Q7201095","brand:wikipedia":"en:Planet Fitness",leisure:"fitness_centre",name:"Planet Fitness"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/PureGym":{name:"PureGym",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/puregym/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18345898",leisure:"fitness_centre"},addTags:{brand:"PureGym","brand:wikidata":"Q18345898","brand:wikipedia":"en:PureGym",leisure:"fitness_centre",name:"PureGym"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Retro Fitness":{name:"Retro Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/RetroFitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994955",leisure:"fitness_centre"},addTags:{brand:"Retro Fitness","brand:wikidata":"Q61994955",leisure:"fitness_centre",name:"Retro Fitness"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Smart Fit":{name:"Smart Fit",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/SmartFit.Oficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30930959",leisure:"fitness_centre"},addTags:{brand:"Smart Fit","brand:wikidata":"Q30930959","brand:wikipedia":"pt:Smart Fit",leisure:"fitness_centre",name:"Smart Fit"},countryCodes:["br","cl","co","do","mx","pe"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Snap Fitness":{name:"Snap Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/SnapFitness247/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7547254",leisure:"fitness_centre"},addTags:{brand:"Snap Fitness","brand:wikidata":"Q7547254","brand:wikipedia":"en:Snap Fitness",leisure:"fitness_centre",name:"Snap Fitness"},terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/SoulCycle":{name:"SoulCycle",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/SoulCycleInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17084730",leisure:"fitness_centre"},addTags:{brand:"SoulCycle","brand:wikidata":"Q17084730","brand:wikipedia":"en:SoulCycle",leisure:"fitness_centre",name:"SoulCycle",sport:"cycling"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/The Gym":{name:"The Gym",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/thegymgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48815022",leisure:"fitness_centre"},addTags:{brand:"The Gym","brand:wikidata":"Q48815022","brand:wikipedia":"en:The Gym Group",leisure:"fitness_centre",name:"The Gym"},countryCodes:["gb"],terms:["the gym group"],matchScore:2,suggestion:true},"leisure/fitness_centre/Virgin Active":{name:"Virgin Active",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/VirginActiveSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4013942",leisure:"fitness_centre"},addTags:{brand:"Virgin Active","brand:wikidata":"Q4013942","brand:wikipedia":"en:Virgin Active",leisure:"fitness_centre",name:"Virgin Active"},terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Xercise4Less":{name:"Xercise4Less",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/Xercise4Less/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q79244612",leisure:"fitness_centre"},addTags:{brand:"Xercise4Less","brand:wikidata":"Q79244612",leisure:"fitness_centre",name:"Xercise4Less"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/エニタイムフィットネス":{name:"エニタイムフィットネス",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/anytimefitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4778364",leisure:"fitness_centre"},addTags:{"alt_name:en":"Fast Fitness",brand:"エニタイムフィットネス","brand:en":"Anytime Fitness","brand:ja":"エニタイムフィットネス","brand:wikidata":"Q4778364","brand:wikipedia":"ja:エニタイムフィットネス",leisure:"fitness_centre",name:"エニタイムフィットネス","name:en":"Anytime Fitness","name:ja":"エニタイムフィットネス"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/カーブス":{name:"カーブス",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/Curves/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5196080",leisure:"fitness_centre"},addTags:{brand:"カーブス","brand:en":"Curves","brand:ja":"カーブス","brand:wikidata":"Q5196080","brand:wikipedia":"ja:カーブス",leisure:"fitness_centre",name:"カーブス","name:en":"Curves","name:ja":"カーブス"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"leisure/playground/McDonald's PlayPlace":{name:"McDonald's PlayPlace",icon:"maki-playground",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q38076",leisure:"playground"},addTags:{access:"customers",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",leisure:"playground",name:"McDonald's PlayPlace"},terms:["mcdonald's"],matchScore:2,suggestion:true},"leisure/sports_centre/YMCA":{name:"YMCA",icon:"maki-pitch",imageURL:"https://graph.facebook.com/YMCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157169",leisure:"sports_centre"},addTags:{brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",leisure:"sports_centre",name:"YMCA"},terms:[],matchScore:2,suggestion:true},"leisure/sports_centre/iFLY":{name:"iFLY",icon:"maki-pitch",imageURL:"https://graph.facebook.com/iFLYUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64767105",leisure:"sports_centre"},addTags:{brand:"iFLY","brand:wikidata":"Q64767105",leisure:"sports_centre",name:"iFLY",sport:"indoor_skydiving"},terms:[],matchScore:2,suggestion:true},"office/bail_bond_agent/Aladdin Bail Bonds":{name:"Aladdin Bail Bonds",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAladdin%20Bail%20Bonds%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q64166257",office:"bail_bond_agent"},addTags:{brand:"Aladdin Bail Bonds","brand:wikidata":"Q64166257","brand:wikipedia":"en:Aladdin Bail Bonds",name:"Aladdin Bail Bonds",office:"bail_bond_agent",opening_hours:"24/7"},countryCodes:["us"],terms:["aladdin","aladin bail bonds","alladin bail bonds"],matchScore:2,suggestion:true},"office/consulting/Deloitte":{name:"Deloitte",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/DeloitteUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q491748",office:"consulting"},addTags:{brand:"Deloitte","brand:wikidata":"Q491748","brand:wikipedia":"en:Deloitte",name:"Deloitte",office:"consulting"},terms:[],matchScore:2,suggestion:true},"office/consulting/EY":{name:"EY",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/EY/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q489097",office:"consulting"},addTags:{brand:"EY","brand:wikidata":"Q489097","brand:wikipedia":"en:Ernst & Young",name:"EY",office:"consulting",official_name:"Ernst & Young"},terms:[],matchScore:2,suggestion:true},"office/consulting/Indra":{name:"Indra",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/indracompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1661823",office:"consulting"},addTags:{brand:"Indra","brand:wikidata":"Q1661823","brand:wikipedia":"es:Indra Sistemas",name:"Indra",office:"consulting",official_name:"Indra Sistemas, S.A."},terms:[],matchScore:2,suggestion:true},"office/consulting/KPMG":{name:"KPMG",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/KPMG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q493751",office:"consulting"},addTags:{brand:"KPMG","brand:wikidata":"Q493751","brand:wikipedia":"en:KPMG",name:"KPMG",office:"consulting"},terms:[],matchScore:2,suggestion:true},"office/consulting/PwC":{name:"PwC",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/lifeatpwc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q488048",office:"consulting"},addTags:{brand:"PwC","brand:wikidata":"Q488048","brand:wikipedia":"en:PricewaterhouseCoopers",name:"PwC",office:"consulting",official_name:"PricewaterhouseCoopers"},terms:[],matchScore:2,suggestion:true},"office/coworking/Awfis":{name:"Awfis",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/myawfis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60747757",office:"coworking"},addTags:{brand:"Awfis","brand:wikidata":"Q60747757","brand:wikipedia":"en:Awfis",fee:"yes",name:"Awfis",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"office/coworking/Ucommune (China)":{name:"Ucommune (China)",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/ucommunes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60785187",office:"coworking"},addTags:{brand:"优客工场","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"优客工场","brand:zh-Hans":"优客工场",fee:"yes",name:"优客工场","name:en":"Ucommune","name:zh":"优客工场","name:zh-Hans":"优客工场",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"office/coworking/Ucommune (Hong Kong)":{name:"Ucommune (Hong Kong)",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/ucommunes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60785187",office:"coworking"},addTags:{brand:"優客工場 Ucommune","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"優客工場","brand:zh-Hans":"优客工场","brand:zh-Hant":"優客工場",fee:"yes",name:"優客工場 Ucommune","name:en":"Ucommune","name:zh":"優客工場","name:zh-Hans":"优客工场","name:zh-Hant":"優客工場",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"office/coworking/Ucommune (Singapore)":{name:"Ucommune (Singapore)",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/ucommunes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60785187",office:"coworking"},addTags:{brand:"Ucommune","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"优客工场","brand:zh-Hans":"优客工场",fee:"yes",name:"Ucommune","name:en":"Ucommune","name:zh":"优客工场","name:zh-Hans":"优客工场",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["sg"],terms:[],matchScore:2,suggestion:true},"office/coworking/Ucommune (Taiwan)":{name:"Ucommune (Taiwan)",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/ucommunes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60785187",office:"coworking"},addTags:{brand:"優客工場","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"優客工場","brand:zh-Hans":"优客工场","brand:zh-Hant":"優客工場",fee:"yes",name:"優客工場","name:en":"Ucommune","name:zh":"優客工場","name:zh-Hans":"优客工场","name:zh-Hant":"優客工場",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"office/coworking/WeWork":{name:"WeWork",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/wework/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19995004",office:"coworking"},addTags:{brand:"WeWork","brand:wikidata":"Q19995004","brand:wikipedia":"en:WeWork",fee:"yes",name:"WeWork",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/employment_agency/Adecco":{name:"Adecco",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/adeccogroupDE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q353494",office:"employment_agency"},addTags:{brand:"Adecco","brand:wikidata":"Q353494","brand:wikipedia":"en:The Adecco Group",name:"Adecco",office:"employment_agency"},terms:[],matchScore:2,suggestion:true},"office/employment_agency/Agentur für Arbeit":{name:"Agentur für Arbeit",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/160267817333843/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1478016",office:"employment_agency"},addTags:{brand:"Agentur für Arbeit","brand:wikidata":"Q1478016","brand:wikipedia":"de:Bundesagentur für Arbeit",name:"Agentur für Arbeit",office:"employment_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/employment_agency/Jobcentre Plus":{name:"Jobcentre Plus",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/174667546602258/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6206793",office:"employment_agency"},addTags:{brand:"Jobcentre Plus","brand:wikidata":"Q6206793","brand:wikipedia":"en:Jobcentre Plus",name:"Jobcentre Plus",office:"employment_agency"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/employment_agency/Manpower":{name:"Manpower",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/ManpowerGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1472539",office:"employment_agency"},addTags:{brand:"Manpower","brand:wikidata":"Q1472539","brand:wikipedia":"en:ManpowerGroup",name:"Manpower",office:"employment_agency"},terms:[],matchScore:2,suggestion:true},"office/employment_agency/Pôle Emploi":{name:"Pôle Emploi",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/poleemploi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8901192",office:"employment_agency"},addTags:{brand:"Pôle Emploi","brand:wikidata":"Q8901192","brand:wikipedia":"en:Pôle emploi",name:"Pôle Emploi",office:"employment_agency"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/employment_agency/Randstad":{name:"Randstad",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/Randstad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q267840",office:"employment_agency"},addTags:{brand:"Randstad","brand:wikidata":"Q267840","brand:wikipedia":"en:Randstad Holding",name:"Randstad",office:"employment_agency"},terms:[],matchScore:2,suggestion:true},"office/energy_supplier/Endesa":{name:"Endesa",icon:"temaki-briefcase_bolt",imageURL:"https://graph.facebook.com/Endesa.es/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1275336",office:"energy_supplier"},addTags:{brand:"Endesa","brand:wikidata":"Q1275336","brand:wikipedia":"es:Endesa",name:"Endesa",office:"energy_supplier"},terms:[],matchScore:2,suggestion:true},"office/energy_supplier/Iberdrola":{name:"Iberdrola",icon:"temaki-briefcase_bolt",imageURL:"https://graph.facebook.com/Iberdrola/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1437502",office:"energy_supplier"},addTags:{brand:"Iberdrola","brand:wikidata":"Q1437502","brand:wikipedia":"es:Iberdrola",name:"Iberdrola",office:"energy_supplier"},terms:[],matchScore:2,suggestion:true},"office/energy_supplier/Naturgy":{name:"Naturgy",icon:"temaki-briefcase_bolt",imageURL:"https://graph.facebook.com/Naturgy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q474690",office:"energy_supplier"},addTags:{brand:"Naturgy","brand:wikidata":"Q474690","brand:wikipedia":"es:Naturgy",name:"Naturgy",office:"energy_supplier"},countryCodes:["ar","au","be","br","cl","cn","cr","de","do","dz","eg","es","fr","gb","ie","in","jm","jo","jp","lu","ma","mx","nl","om","pa","pe","pk","pr","pt","sg"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Allen & Harris":{name:"Allen & Harris",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/allenandharrisestateagents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81856601",office:"estate_agent"},addTags:{brand:"Allen & Harris","brand:wikidata":"Q81856601",name:"Allen & Harris",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Bagshaws Residential":{name:"Bagshaws Residential",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/BagshawsResidentialEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81859084",office:"estate_agent"},addTags:{brand:"Bagshaws Residential","brand:wikidata":"Q81859084",name:"Bagshaws Residential",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Bairstow Eves":{name:"Bairstow Eves",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/BairstowEvesEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81074787",office:"estate_agent"},addTags:{brand:"Bairstow Eves","brand:wikidata":"Q81074787",name:"Bairstow Eves",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Barnard Marcus":{name:"Barnard Marcus",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/BarnardMarcusEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81860444",office:"estate_agent"},addTags:{brand:"Barnard Marcus","brand:wikidata":"Q81860444",name:"Barnard Marcus",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Brown & Merry":{name:"Brown & Merry",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/BrownAndMerryEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81859714",office:"estate_agent"},addTags:{brand:"Brown & Merry","brand:wikidata":"Q81859714",name:"Brown & Merry",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Century 21":{name:"Century 21",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/century21/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1054480",office:"estate_agent"},addTags:{brand:"Century 21","brand:wikidata":"Q1054480","brand:wikipedia":"en:Century 21 (real estate)",name:"Century 21",office:"estate_agent"},terms:["century 21 real estate"],matchScore:2,suggestion:true},"office/estate_agent/Coldwell Banker":{name:"Coldwell Banker",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/coldwellbanker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q738853",office:"estate_agent"},addTags:{brand:"Coldwell Banker","brand:wikidata":"Q738853","brand:wikipedia":"en:Coldwell Banker",name:"Coldwell Banker",office:"estate_agent"},terms:["coldwell banker real estate"],matchScore:2,suggestion:true},"office/estate_agent/Connells":{name:"Connells",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/298744224054963/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5161738",office:"estate_agent"},addTags:{brand:"Connells","brand:wikidata":"Q5161738","brand:wikipedia":"en:Connells Group",name:"Connells",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Engel & Völkers":{name:"Engel & Völkers",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/engelvoelkershq/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1341765",office:"estate_agent"},addTags:{brand:"Engel & Völkers","brand:wikidata":"Q1341765","brand:wikipedia":"en:Engel & Völkers",name:"Engel & Völkers",office:"estate_agent"},terms:[],matchScore:2,suggestion:true},"office/estate_agent/Foncia":{name:"Foncia",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/Foncia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1435638",office:"estate_agent"},addTags:{brand:"Foncia","brand:wikidata":"Q1435638","brand:wikipedia":"fr:Foncia",name:"Foncia",office:"estate_agent"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Fox & Sons":{name:"Fox & Sons",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/FoxAndSonsEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81855298",office:"estate_agent"},addTags:{brand:"Fox & Sons","brand:wikidata":"Q81855298",name:"Fox & Sons",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Foxtons":{name:"Foxtons",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/FoxtonsEstateAgent/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5477251",office:"estate_agent"},addTags:{brand:"Foxtons","brand:wikidata":"Q5477251","brand:wikipedia":"en:Foxtons",name:"Foxtons",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Greenslade Taylor Hunt":{name:"Greenslade Taylor Hunt",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/GTHGreensladeTaylorHunt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81052826",office:"estate_agent"},addTags:{brand:"Greenslade Taylor Hunt","brand:wikidata":"Q81052826",name:"Greenslade Taylor Hunt",office:"estate_agent"},countryCodes:["gb"],terms:["gth"],matchScore:2,suggestion:true},"office/estate_agent/Guy Hoquet":{name:"Guy Hoquet",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/GuyHoquetImmobilier/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25383970",office:"estate_agent"},addTags:{brand:"Guy Hoquet","brand:wikidata":"Q25383970","brand:wikipedia":"fr:Guy Hoquet l'immobilier",name:"Guy Hoquet",office:"estate_agent"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Haart":{name:"Haart",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/haart.estate.agents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q75006731",office:"estate_agent"},addTags:{brand:"Haart","brand:wikidata":"Q75006731","brand:wikipedia":"en: Spicerhaart",name:"Haart",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Hamptons International":{name:"Hamptons International",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/HamptonsInt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5646350",office:"estate_agent"},addTags:{brand:"Hamptons International","brand:wikidata":"Q5646350","brand:wikipedia":"en:Hamptons International",name:"Hamptons International",office:"estate_agent",short_name:"Hamptons"},countryCodes:["gb"],terms:["hamptons international lettings","hamptons international sales"],matchScore:2,suggestion:true},"office/estate_agent/Harcourts":{name:"Harcourts",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/HarcourtsNewZealand/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5655056",office:"estate_agent"},addTags:{brand:"Harcourts","brand:wikidata":"Q5655056","brand:wikipedia":"en:Harcourts International",name:"Harcourts",office:"estate_agent"},terms:[],matchScore:2,suggestion:true},"office/estate_agent/John L. Scott":{name:"John L. Scott",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/johnlscott/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6243687",office:"estate_agent"},addTags:{brand:"John L. Scott","brand:wikidata":"Q6243687","brand:wikipedia":"en:John L. Scott",name:"John L. Scott",office:"estate_agent"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Jones & Chapman":{name:"Jones & Chapman",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/JonesAndChapmanEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81858007",office:"estate_agent"},addTags:{brand:"Jones & Chapman","brand:wikidata":"Q81858007",name:"Jones & Chapman",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Knight Frank":{name:"Knight Frank",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/KnightFrankLLP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3197998",office:"estate_agent"},addTags:{brand:"Knight Frank","brand:wikidata":"Q3197998","brand:wikipedia":"en:Knight Frank",name:"Knight Frank",office:"estate_agent"},terms:[],matchScore:2,suggestion:true},"office/estate_agent/Laforêt":{name:"Laforêt",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/Laforetfrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56310946",office:"estate_agent"},addTags:{brand:"Laforêt","brand:wikidata":"Q56310946","brand:wikipedia":"fr:Laforêt (immobilier)",name:"Laforêt",office:"estate_agent"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Manners & Harrison":{name:"Manners & Harrison",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/MannersAndHarrisonEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81857241",office:"estate_agent"},addTags:{brand:"Manners & Harrison","brand:wikidata":"Q81857241",name:"Manners & Harrison",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Martin & Co":{name:"Martin & Co",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/martincouk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81066918",office:"estate_agent"},addTags:{brand:"Martin & Co","brand:wikidata":"Q81066918",name:"Martin & Co",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Orpi":{name:"Orpi",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/OrpiFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3356080",office:"estate_agent"},addTags:{brand:"Orpi","brand:wikidata":"Q3356080","brand:wikipedia":"fr:Organisation régionale des professionnels de l'immobilier",name:"Orpi",office:"estate_agent"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Palmer Snell":{name:"Palmer Snell",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/PalmerSnellEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81068923",office:"estate_agent"},addTags:{brand:"Palmer Snell","brand:wikidata":"Q81068923",name:"Palmer Snell",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/REMAX":{name:"RE/MAX",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/remax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q965845",office:"estate_agent"},addTags:{brand:"RE/MAX","brand:wikidata":"Q965845","brand:wikipedia":"en:RE/MAX",name:"RE/MAX",office:"estate_agent"},terms:[],matchScore:2,suggestion:true},"office/estate_agent/Ray White":{name:"Ray White",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/raywhitegroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81077729",office:"estate_agent"},addTags:{brand:"Ray White","brand:wikidata":"Q81077729",name:"Ray White",office:"estate_agent"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Roger Platt":{name:"Roger Platt",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/RogerPlattEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81859999",office:"estate_agent"},addTags:{brand:"Roger Platt","brand:wikidata":"Q81859999",name:"Roger Platt",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Royal LePage":{name:"Royal LePage",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/royallepage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7374385",office:"estate_agent"},addTags:{brand:"Royal LePage","brand:wikidata":"Q7374385","brand:wikipedia":"en:Royal LePage",name:"Royal LePage",office:"estate_agent"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Shipways":{name:"Shipways",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/ShipwaysEstateAgent/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81859397",office:"estate_agent"},addTags:{brand:"Shipways","brand:wikidata":"Q81859397",name:"Shipways",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Square Habitat":{name:"Square Habitat",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/541219055971624/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64027038",office:"estate_agent"},addTags:{brand:"Square Habitat","brand:wikidata":"Q64027038","brand:wikipedia":"fr:Square Habitat",name:"Square Habitat",office:"estate_agent"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Stirling Ackroyd":{name:"Stirling Ackroyd",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/StirlingAckroyd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81062228",office:"estate_agent"},addTags:{brand:"Stirling Ackroyd","brand:wikidata":"Q81062228",name:"Stirling Ackroyd",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Swetenhams":{name:"Swetenhams",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/SwetenhamsEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81858340",office:"estate_agent"},addTags:{brand:"Swetenhams","brand:wikidata":"Q81858340",name:"Swetenhams",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Tecnocasa":{name:"Tecnocasa",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/GruppoTecnocasa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2399658",office:"estate_agent"},addTags:{brand:"Tecnocasa","brand:wikidata":"Q2399658","brand:wikipedia":"de:Tecnocasa",name:"Tecnocasa",office:"estate_agent"},countryCodes:["es","it","pl"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Townends":{name:"Townends",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/Townends/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81061275",office:"estate_agent"},addTags:{brand:"Townends","brand:wikidata":"Q81061275",name:"Townends",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Webbers":{name:"Webbers",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/WebbersEstateAgentsHQ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81068176",office:"estate_agent"},addTags:{brand:"Webbers","brand:wikidata":"Q81068176",name:"Webbers",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/William H. Brown":{name:"William H. Brown",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/WilliamHBrownEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81787271",office:"estate_agent"},addTags:{brand:"William H. Brown","brand:wikidata":"Q81787271",name:"William H. Brown",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Your Move":{name:"Your Move",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/yourmoveuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81078416",office:"estate_agent"},addTags:{brand:"Your Move","brand:wikidata":"Q81078416",name:"Your Move",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/アパマンショップ":{name:"アパマンショップ",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/apamanshopcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11284512",office:"estate_agent"},addTags:{brand:"アパマンショップ","brand:en":"Apaman Shop","brand:ja":"アパマンショップ","brand:wikidata":"Q11284512","brand:wikipedia":"ja:Apaman Network",name:"アパマンショップ","name:en":"Apaman Shop","name:ja":"アパマンショップ",office:"estate_agent"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/エイブル":{name:"エイブル",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/able.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11289620",office:"estate_agent"},addTags:{brand:"エイブル","brand:en":"Able","brand:ja":"エイブル","brand:wikidata":"Q11289620","brand:wikipedia":"ja:エイブル",name:"エイブル","name:en":"Able","name:ja":"エイブル",office:"estate_agent"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/ピタットハウス":{name:"ピタットハウス",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/pitatofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11331484",office:"estate_agent"},addTags:{brand:"ピタットハウス","brand:en":"Pitat House","brand:ja":"ピタットハウス","brand:wikidata":"Q11331484","brand:wikipedia":"ja:ピタットハウスネットワーク",name:"ピタットハウス","name:en":"Pitat House","name:ja":"ピタットハウス",office:"estate_agent"},countryCodes:["jp"],terms:["ピタットハウスネットワーク"],matchScore:2,suggestion:true},"office/estate_agent/三菱UFJ不動産販売":{name:"三菱UFJ不動産販売",icon:"temaki-real_estate_agency",geometry:["point","area"],tags:{"brand:wikidata":"Q11357004",office:"estate_agent"},addTags:{brand:"三菱UFJ不動産販売","brand:en":"Mitsubishi UFJ Real Estate Services","brand:ja":"三菱UFJ不動産販売","brand:wikidata":"Q11357004","brand:wikipedia":"ja:三菱UFJ不動産販売",name:"三菱UFJ不動産販売","name:en":"Mitsubishi UFJ Real Estate Services","name:ja":"三菱UFJ不動産販売",office:"estate_agent"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/信義房屋":{name:"信義房屋",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/sinyifans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10888034",office:"estate_agent"},addTags:{brand:"信義房屋","brand:en":"Sinyi Realty","brand:wikidata":"Q10888034","brand:wikipedia":"zh:信義房屋","brand:zh":"信義房屋",name:"信義房屋","name:en":"Sinyi Realty","name:zh":"信義房屋",office:"estate_agent"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/永慶房屋":{name:"永慶房屋",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/yungching.tw/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11132113",office:"estate_agent"},addTags:{brand:"永慶房屋","brand:en":"Yung Ching","brand:wikidata":"Q11132113","brand:wikipedia":"zh:永慶房屋","brand:zh":"永慶房屋",name:"永慶房屋","name:en":"Yung Ching","name:zh":"永慶房屋",office:"estate_agent"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"office/financial_advisor/Edward Jones":{name:"Edward Jones",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/edwardjones/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5343830",office:"financial_advisor"},addTags:{alt_name:"Edward Jones Investments",brand:"Edward Jones","brand:wikidata":"Q5343830","brand:wikipedia":"en:Edward Jones Investments",name:"Edward Jones",office:"financial_advisor"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"office/financial_advisor/TD Ameritrade":{name:"TD Ameritrade",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/tdameritrade/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7669886",office:"financial_advisor"},addTags:{brand:"TD Ameritrade","brand:wikidata":"Q7669886","brand:wikipedia":"en:TD Ameritrade",name:"TD Ameritrade",office:"financial_advisor"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/insurance/A-MAX Auto Insurance":{name:"A-MAX Auto Insurance",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/amaxinsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q75767609",office:"insurance"},addTags:{brand:"A-MAX Auto Insurance","brand:wikidata":"Q75767609",name:"A-MAX Auto Insurance",office:"insurance",short_name:"A-MAX"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/insurance/AAA Insurance":{name:"AAA Insurance",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/AAAFanPage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q463436",office:"insurance"},addTags:{brand:"American Automobile Association","brand:wikidata":"Q463436","brand:wikipedia":"en:American Automobile Association",name:"AAA Insurance",office:"insurance",short_name:"AAA"},countryCodes:["us"],terms:["american automobile association"],matchScore:2,suggestion:true},"office/insurance/AOK":{name:"AOK",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAllgemeine%20Ortskrankenkasse%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q835141",office:"insurance"},addTags:{brand:"AOK","brand:wikidata":"Q835141","brand:wikipedia":"de:Allgemeine Ortskrankenkasse",name:"AOK",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/AXA":{name:"AXA",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/axainsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q160054",office:"insurance"},addTags:{brand:"AXA","brand:wikidata":"Q160054","brand:wikipedia":"en:AXA",name:"AXA",office:"insurance"},terms:[],matchScore:2,suggestion:true},"office/insurance/Allianz":{name:"Allianz",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/allianz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487292",office:"insurance"},addTags:{brand:"Allianz","brand:wikidata":"Q487292","brand:wikipedia":"en:Allianz",name:"Allianz",office:"insurance"},terms:[],matchScore:2,suggestion:true},"office/insurance/Allstate":{name:"Allstate",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/Allstate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2645636",office:"insurance"},addTags:{brand:"Allstate","brand:wikidata":"Q2645636","brand:wikipedia":"en:Allstate",name:"Allstate",office:"insurance"},countryCodes:["us"],terms:["allstate insurance"],matchScore:2,suggestion:true},"office/insurance/American Family Insurance":{name:"American Family Insurance",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/amfam/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4743730",office:"insurance"},addTags:{brand:"American Family Insurance","brand:wikidata":"Q4743730","brand:wikipedia":"en:American Family Insurance",name:"American Family Insurance",office:"insurance"},countryCodes:["us"],terms:["american family","amfam"],matchScore:2,suggestion:true},"office/insurance/Asepeyo":{name:"Asepeyo",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/Asepeyo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11906879",office:"insurance"},addTags:{brand:"Asepeyo","brand:wikidata":"Q11906879","brand:wikipedia":"es:Asepeyo",name:"Asepeyo",office:"insurance"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"office/insurance/Aviva":{name:"Aviva",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/Aviva/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q791179",office:"insurance"},addTags:{brand:"Aviva","brand:wikidata":"Q791179","brand:wikipedia":"en:Aviva",name:"Aviva",office:"insurance"},countryCodes:["fr","ie","pl"],terms:[],matchScore:2,suggestion:true},"office/insurance/BGV":{name:"BGV",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBadische%20Versicherungen%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q795911",office:"insurance"},addTags:{alt_name:"Badische Versicherungen",brand:"BGV","brand:wikidata":"Q795911","brand:wikipedia":"de:BGV / Badische Versicherungen",name:"BGV",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/Banco do Brasil Seguridade":{name:"Banco do Brasil Seguridade",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/BBSeguros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18499520",office:"insurance"},addTags:{brand:"Banco do Brasil Seguridade","brand:wikidata":"Q18499520","brand:wikipedia":"pt:BB Seguridade",name:"Banco do Brasil Seguridade",office:"insurance",short_name:"BB Seguridade"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"office/insurance/Bâloise":{name:"Bâloise",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/BaloiseGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q457912",office:"insurance"},addTags:{brand:"Bâloise","brand:wikidata":"Q457912","brand:wikipedia":"en:Bâloise",name:"Bâloise",office:"insurance"},countryCodes:["be","ch","de","li","lu"],terms:[],matchScore:2,suggestion:true},"office/insurance/DAK":{name:"DAK",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/DAKGesundheit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1151671",office:"insurance"},addTags:{brand:"DAK","brand:wikidata":"Q1151671","brand:wikipedia":"de:DAK-Gesundheit",name:"DAK",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/DEVK":{name:"DEVK",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/devk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1153049",office:"insurance"},addTags:{brand:"DEVK","brand:wikidata":"Q1153049","brand:wikipedia":"de:DEVK",name:"DEVK",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/Debeka":{name:"Debeka",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/Debeka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1181452",office:"insurance"},addTags:{brand:"Debeka","brand:wikidata":"Q1181452","brand:wikipedia":"de:Debeka",name:"Debeka",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/Erie Insurance":{name:"Erie Insurance",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/erieinsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5388314",office:"insurance"},addTags:{brand:"Erie Insurance","brand:wikidata":"Q5388314","brand:wikipedia":"en:Erie Insurance Group",name:"Erie Insurance",office:"insurance"},countryCodes:["us"],terms:["erie"],matchScore:2,suggestion:true},"office/insurance/Farmers Insurance":{name:"Farmers Insurance",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/FarmersInsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1396863",office:"insurance"},addTags:{brand:"Farmers Insurance","brand:wikidata":"Q1396863","brand:wikipedia":"en:Farmers Insurance Group",name:"Farmers Insurance",office:"insurance"},countryCodes:["us"],terms:["farmers"],matchScore:2,suggestion:true},"office/insurance/Foyer":{name:"Foyer",icon:"temaki-briefcase_shield",geometry:["point","area"],tags:{"brand:wikidata":"Q1344573",office:"insurance"},addTags:{brand:"Foyer","brand:wikidata":"Q1344573","brand:wikipedia":"lb:Foyer",name:"Foyer",office:"insurance"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"office/insurance/Fremap":{name:"Fremap",icon:"temaki-briefcase_shield",geometry:["point","area"],tags:{"brand:wikidata":"Q5869232",office:"insurance"},addTags:{brand:"Fremap","brand:wikidata":"Q5869232","brand:wikipedia":"es:Fremap",name:"Fremap",office:"insurance"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"office/insurance/GEICO":{name:"GEICO",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/geico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1498689",office:"insurance"},addTags:{brand:"GEICO","brand:wikidata":"Q1498689","brand:wikipedia":"en:GEICO",name:"GEICO",office:"insurance"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/insurance/GMF":{name:"GMF",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/GMFassurances/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3095296",office:"insurance"},addTags:{brand:"GMF","brand:wikidata":"Q3095296","brand:wikipedia":"fr:Garantie mutuelle des fonctionnaires",name:"GMF",office:"insurance"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/insurance/Generali":{name:"Generali",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/GENERALIes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q670482",office:"insurance"},addTags:{brand:"Generali","brand:wikidata":"Q670482","brand:wikipedia":"it:Assicurazioni Generali",name:"Generali",office:"insurance"},terms:[],matchScore:2,suggestion:true},"office/insurance/Grange Insurance":{name:"Grange Insurance",icon:"temaki-briefcase_shield",imageURL:"https://pbs.twimg.com/profile_images/476391605457260545/J37LFSJc_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q17183481",office:"insurance"},addTags:{brand:"Grange Insurance","brand:wikidata":"Q17183481","brand:wikipedia":"en:Grange Insurance",name:"Grange Insurance",office:"insurance"},countryCodes:["us"],terms:["grange"],matchScore:2,suggestion:true},"office/insurance/Groupama":{name:"Groupama",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/groupama/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3083531",office:"insurance"},addTags:{brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"fr:Groupama",name:"Groupama",office:"insurance",official_name:"Groupe des Assurances Mutuelles Agricoles"},terms:[],matchScore:2,suggestion:true},"office/insurance/Harmonie Mutuelle":{name:"Harmonie Mutuelle",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/harmoniemutuelle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3127528",office:"insurance"},addTags:{brand:"Harmonie Mutuelle","brand:wikidata":"Q3127528","brand:wikipedia":"fr:Harmonie mutuelle",name:"Harmonie Mutuelle",office:"insurance"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/insurance/Helvetia":{name:"Helvetia",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHelvetia%20logo%20422x129.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q933766",office:"insurance"},addTags:{brand:"Helvetia","brand:wikidata":"Q933766","brand:wikipedia":"it:Helvetia Assicurazioni",name:"Helvetia",office:"insurance"},countryCodes:["at","ch","de","es","fr","it"],terms:[],matchScore:2,suggestion:true},"office/insurance/Knappschaft":{name:"Knappschaft",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/KNAPPSCHAFT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1313465",office:"insurance"},addTags:{brand:"Knappschaft","brand:wikidata":"Q1313465","brand:wikipedia":"de:Knappschaft (Krankenkasse)",name:"Knappschaft",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/MAAF":{name:"MAAF",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/maafassurances/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3331028",office:"insurance"},addTags:{brand:"MAAF","brand:wikidata":"Q3331028","brand:wikipedia":"fr:Mutuelle d'assurance des artisans de France",name:"MAAF",office:"insurance"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/insurance/MMA":{name:"MMA",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/MMA.Assurances/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3331046",office:"insurance"},addTags:{brand:"MMA","brand:wikidata":"Q3331046","brand:wikipedia":"fr:MMA (assurance)",name:"MMA",office:"insurance",official_name:"Mutuelles du Mans Assurances"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/insurance/Macif":{name:"Macif",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/lEssentielparMacif/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3331021",office:"insurance"},addTags:{brand:"Macif","brand:wikidata":"Q3331021","brand:wikipedia":"fr:Mutuelle assurance des commerçants et industriels de France et des cadres et des salariés de l'industrie et du commerce",name:"Macif",office:"insurance"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/insurance/Maif":{name:"Maif",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/MAIFassureur/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3331029",office:"insurance"},addTags:{brand:"Maif","brand:wikidata":"Q3331029","brand:wikipedia":"fr:Mutuelle d'assurance des instituteurs de France",name:"Maif",office:"insurance",official_name:"Mutuelle d'assurance des instituteurs de France"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/insurance/Mapfre":{name:"Mapfre",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/mapfreinsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q544532",office:"insurance"},addTags:{brand:"Mapfre","brand:wikidata":"Q544532","brand:wikipedia":"en:Mapfre",name:"Mapfre",office:"insurance"},terms:[],matchScore:2,suggestion:true},"office/insurance/Matmut":{name:"Matmut",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/MatmutAssurances/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3299185",office:"insurance"},addTags:{brand:"Matmut","brand:wikidata":"Q3299185","brand:wikipedia":"fr:Matmut",name:"Matmut",office:"insurance"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/insurance/Nationwide":{name:"Nationwide",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/nationwide/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6979886",office:"insurance"},addTags:{brand:"Nationwide","brand:wikidata":"Q6979886","brand:wikipedia":"en:Nationwide Mutual Insurance Company",name:"Nationwide",office:"insurance"},countryCodes:["us"],terms:["nationwide insurance"],matchScore:2,suggestion:true},"office/insurance/Ocaso":{name:"Ocaso",icon:"temaki-briefcase_shield",geometry:["point","area"],tags:{"brand:wikidata":"Q6123955",office:"insurance"},addTags:{brand:"Ocaso","brand:wikidata":"Q6123955","brand:wikipedia":"es:Seguros Ocaso",name:"Ocaso",office:"insurance"},countryCodes:["es","gb"],terms:["ocaso seguros","seguros ocaso"],matchScore:2,suggestion:true},"office/insurance/PZU":{name:"PZU",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/grupapzu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1807170",office:"insurance"},addTags:{brand:"PZU","brand:wikidata":"Q1807170","brand:wikipedia":"pl:Powszechny Zakład Ubezpieczeń",name:"PZU",office:"insurance"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"office/insurance/Progressive":{name:"Progressive",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/progressive/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7248721",office:"insurance"},addTags:{brand:"Progressive","brand:wikidata":"Q7248721","brand:wikipedia":"en:Progressive Corporation",name:"Progressive",office:"insurance"},countryCodes:["us"],terms:["progressive insurance"],matchScore:2,suggestion:true},"office/insurance/Reale":{name:"Reale",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Reale%20Mutua%202015.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3931092",office:"insurance"},addTags:{brand:"Reale","brand:wikidata":"Q3931092","brand:wikipedia":"it:Reale Mutua Assicurazioni",name:"Reale",office:"insurance"},countryCodes:["cl","es","it"],terms:["reale chile","reale immobili","reale mutua assicurazioni","reale seguros","seguros reale"],matchScore:2,suggestion:true},"office/insurance/SV SparkassenVersicherung":{name:"SV SparkassenVersicherung",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSV%20SparkassenVersicherung%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2208645",office:"insurance"},addTags:{brand:"SV SparkassenVersicherung","brand:wikidata":"Q2208645","brand:wikipedia":"de:SV SparkassenVersicherung",name:"SV SparkassenVersicherung",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/State Farm":{name:"State Farm",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/statefarm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2007336",office:"insurance"},addTags:{brand:"State Farm","brand:wikidata":"Q2007336","brand:wikipedia":"en:State Farm",name:"State Farm",office:"insurance"},countryCodes:["us"],terms:["state farm insurance"],matchScore:2,suggestion:true},"office/insurance/Swinton":{name:"Swinton",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/SwintonInsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7658785",office:"insurance"},addTags:{brand:"Swinton","brand:wikidata":"Q7658785","brand:wikipedia":"en:Swinton Insurance",name:"Swinton",office:"insurance"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/insurance/Techniker Krankenkasse":{name:"Techniker Krankenkasse",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/DieTechniker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q607531",office:"insurance"},addTags:{brand:"Techniker Krankenkasse","brand:wikidata":"Q607531","brand:wikipedia":"de:Techniker Krankenkasse",name:"Techniker Krankenkasse",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/The Co-operators":{name:"The Co-operators",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/TheCooperatorsInsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3520320",office:"insurance"},addTags:{brand:"The Co-operators","brand:wikidata":"Q3520320","brand:wikipedia":"en:The Co-operators",name:"The Co-operators",office:"insurance"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"office/insurance/Tranquilidade":{name:"Tranquilidade",icon:"temaki-briefcase_shield",geometry:["point","area"],tags:{"brand:wikidata":"Q7833457",office:"insurance"},addTags:{brand:"Tranquilidade Seguros","brand:wikidata":"Q7833457","brand:wikipedia":"en:Tranquilidade",name:"Tranquilidade",office:"insurance"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"office/insurance/Württembergische":{name:"Württembergische",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWuerttembergische.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1412465",office:"insurance"},addTags:{brand:"Württembergische","brand:wikidata":"Q1412465","brand:wikipedia":"de:Württembergische Versicherung",name:"Württembergische",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/Zurich":{name:"Zurich",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FZurich%20Logo%20new.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q230426",office:"insurance"},addTags:{brand:"Zurich","brand:wikidata":"Q230426","brand:wikipedia":"en:Zurich Insurance Group",name:"Zurich",office:"insurance"},terms:[],matchScore:2,suggestion:true},"office/insurance/Ингосстрах":{name:"Ингосстрах",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/ingos.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4200631",office:"insurance"},addTags:{brand:"Ингосстрах","brand:en":"Ingosstrakh","brand:ru":"Ингосстрах","brand:wikidata":"Q4200631","brand:wikipedia":"ru:Ингосстрах",name:"Ингосстрах","name:en":"Ingosstrakh","name:ru":"Ингосстрах",office:"insurance"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"office/insurance/РЕСО-Гарантия":{name:"РЕСО-Гарантия",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/reso.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4386516",office:"insurance"},addTags:{brand:"РЕСО-Гарантия","brand:en":"RESO-Guarantee","brand:ru":"РЕСО-Гарантия","brand:wikidata":"Q4386516","brand:wikipedia":"ru:РЕСО-Гарантия",name:"РЕСО-Гарантия","name:en":"RESO-Guarantee","name:ru":"РЕСО-Гарантия",office:"insurance"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"office/insurance/Росгосстрах":{name:"Росгосстрах",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/RGS.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4397745",office:"insurance"},addTags:{brand:"Росгосстрах","brand:wikidata":"Q4397745","brand:wikipedia":"en:Rosgosstrakh",name:"Росгосстрах",office:"insurance"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"office/insurance/Согласие":{name:"Согласие",icon:"temaki-briefcase_shield",imageURL:"https://pbs.twimg.com/profile_images/789134207478067201/iGlOuCFZ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4426689",office:"insurance"},addTags:{brand:"Согласие","brand:en":"Soglasie","brand:ru":"Согласие","brand:wikidata":"Q4426689","brand:wikipedia":"ru:Согласие (компания)",name:"Согласие","name:en":"Soglasie","name:ru":"Согласие",office:"insurance"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"office/insurance/بیمه ایران":{name:"بیمه ایران",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/iraninsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5930269",office:"insurance"},addTags:{brand:"بیمه ایران","brand:en":"Iran Insurance","brand:fa":"بیمه ایران","brand:wikidata":"Q5930269","brand:wikipedia":"fa:بیمه ایران",name:"بیمه ایران","name:en":"Iran Insurance","name:fa":"بیمه ایران",office:"insurance"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"office/tax_advisor/Block Advisors":{name:"Block Advisors",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/BlockAdvisors/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64166231",office:"tax_advisor"},addTags:{brand:"Block Advisors","brand:wikidata":"Q64166231",name:"Block Advisors",office:"tax_advisor"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/tax_advisor/H&R Block":{name:"H&R Block",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/hrblock/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5627799",office:"tax_advisor"},addTags:{brand:"H&R Block","brand:wikidata":"Q5627799","brand:wikipedia":"en:H&R Block",name:"H&R Block",office:"tax_advisor"},countryCodes:["au","ca","in","us"],terms:[],matchScore:2,suggestion:true},"office/tax_advisor/Jackson Hewitt":{name:"Jackson Hewitt",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/jacksonhewitt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6117132",office:"tax_advisor"},addTags:{brand:"Jackson Hewitt","brand:wikidata":"Q6117132","brand:wikipedia":"en:Jackson Hewitt",name:"Jackson Hewitt",office:"tax_advisor",official_name:"Jackson Hewitt Tax Service"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/tax_advisor/Liberty Tax":{name:"Liberty Tax",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/libertytax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6541978",office:"tax_advisor"},addTags:{alt_name:"Liberty Tax Service",brand:"Liberty Tax","brand:wikidata":"Q6541978","brand:wikipedia":"en:Liberty Tax Service",name:"Liberty Tax",office:"tax_advisor"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/agrarian/Granngården":{name:"Granngården",icon:"fas-tractor",imageURL:"https://graph.facebook.com/granngarden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10508136",shop:"agrarian"},addTags:{brand:"Granngården","brand:wikidata":"Q10508136","brand:wikipedia":"sv:Granngården AB",name:"Granngården",shop:"agrarian"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/agrarian/Southern States":{name:"Southern States",icon:"fas-tractor",imageURL:"https://graph.facebook.com/SouthernStatesCoop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7570508",shop:"agrarian"},addTags:{agrarian:"seed;feed;tools",brand:"Southern States","brand:wikidata":"Q7570508","brand:wikipedia":"en:Southern States Cooperative",name:"Southern States",official_name:"Southern States Cooperative",shop:"agrarian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Alko":{name:"Alko",icon:"fas-wine-bottle",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAlko.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1849187",shop:"alcohol"},addTags:{brand:"Alko","brand:wikidata":"Q1849187","brand:wikipedia":"en:Alko",name:"Alko",shop:"alcohol"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/BC Liquor Store":{name:"BC Liquor Store",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1302250656/winesplash-icon_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q43079557",shop:"alcohol"},addTags:{brand:"BC Liquor Store","brand:wikidata":"Q43079557","brand:wikipedia":"en:BC Liquor Stores",name:"BC Liquor Store",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/BWS":{name:"BWS",icon:"fas-wine-bottle",geometry:["point","area"],tags:{"brand:wikidata":"Q4836848",shop:"alcohol"},addTags:{brand:"BWS","brand:wikidata":"Q4836848","brand:wikipedia":"en:BWS (liquor retailer)",name:"BWS",shop:"alcohol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Bargain Booze":{name:"Bargain Booze",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/998956835796205568/21tNi907_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16971315",shop:"alcohol"},addTags:{brand:"Bargain Booze","brand:wikidata":"Q16971315","brand:wikipedia":"en:Bargain Booze",name:"Bargain Booze",shop:"alcohol"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/BevMo!":{name:"BevMo!",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1214680678047997952/TMa6euy2_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4899308",shop:"alcohol"},addTags:{brand:"BevMo!","brand:wikidata":"Q4899308","brand:wikipedia":"en:BevMo!",name:"BevMo!",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Dan Murphy's":{name:"Dan Murphy's",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/465419847128473601/ybOMjW8-_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q5214075",shop:"alcohol"},addTags:{brand:"Dan Murphy's","brand:wikidata":"Q5214075","brand:wikipedia":"en:Dan Murphy's",name:"Dan Murphy's",shop:"alcohol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Fine Wine & Good Spirits":{name:"Fine Wine & Good Spirits",icon:"fas-wine-bottle",imageURL:"https://graph.facebook.com/PAWineSpirits/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64514776",shop:"alcohol"},addTags:{brand:"Fine Wine & Good Spirits","brand:wikidata":"Q64514776",name:"Fine Wine & Good Spirits",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Gall & Gall":{name:"Gall & Gall",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/652468758515068928/dzFqRsLG_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q13639185",shop:"alcohol"},addTags:{brand:"Gall & Gall","brand:wikidata":"Q13639185","brand:wikipedia":"nl:Gall & Gall",name:"Gall & Gall",shop:"alcohol"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/LCBO":{name:"LCBO",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/481885343986102272/mGMV-t--_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q845263",shop:"alcohol"},addTags:{brand:"LCBO","brand:wikidata":"Q845263","brand:wikipedia":"en:Liquor Control Board of Ontario",name:"LCBO",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Liquorland":{name:"Liquorland",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/378800000468322180/92219ed513322ff2f4d6d416dc477704_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q2283837",shop:"alcohol"},addTags:{brand:"Liquorland","brand:wikidata":"Q2283837","brand:wikipedia":"en:Liquorland",name:"Liquorland",shop:"alcohol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Majestic":{name:"Majestic",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1139531853759729665/3J0irT72_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q6737725",shop:"alcohol"},addTags:{brand:"Majestic","brand:wikidata":"Q6737725","brand:wikipedia":"en:Majestic Wine",name:"Majestic",shop:"alcohol"},countryCodes:["gb"],terms:["majestic wine","majestic wine warehouse"],matchScore:2,suggestion:true},"shop/alcohol/Nicolas":{name:"Nicolas",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/842779196082573314/AtkEMQlh_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3340012",shop:"alcohol"},addTags:{brand:"Nicolas","brand:wikidata":"Q3340012","brand:wikipedia":"en:Nicolas (wine retailer)",name:"Nicolas",shop:"alcohol"},countryCodes:["be","fr","gb"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Oddbins":{name:"Oddbins",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/547781884533436416/xshXfITG_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q7077472",shop:"alcohol"},addTags:{brand:"Oddbins","brand:wikidata":"Q7077472","brand:wikipedia":"en:Oddbins",name:"Oddbins",shop:"alcohol"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/SAQ":{name:"SAQ",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1064657571133308928/zhzEYvxp_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3488077",shop:"alcohol"},addTags:{brand:"SAQ","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/SAQ Express":{name:"SAQ Express",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1064657571133308928/zhzEYvxp_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3488077",shop:"alcohol"},addTags:{brand:"SAQ Express","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ Express",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/SAQ Sélection":{name:"SAQ Sélection",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1064657571133308928/zhzEYvxp_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3488077",shop:"alcohol"},addTags:{brand:"SAQ Sélection","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ Sélection",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Spec's":{name:"Spec's",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1212782822706089984/ZaF4dGOy_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7574415",shop:"alcohol"},addTags:{brand:"Spec's","brand:wikidata":"Q7574415","brand:wikipedia":"en:Spec's Wine, Spirits & Finer Foods",name:"Spec's",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Systembolaget":{name:"Systembolaget",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/456046476032872449/mg3NXDpc_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1476113",shop:"alcohol"},addTags:{brand:"Systembolaget","brand:wikidata":"Q1476113","brand:wikipedia":"en:Systembolaget",name:"Systembolaget",shop:"alcohol"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/The Beer Store":{name:"The Beer Store",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1112700310441676800/Gyk3rZl6_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q16243674",shop:"alcohol"},addTags:{brand:"The Beer Store","brand:wikidata":"Q16243674","brand:wikipedia":"en:The Beer Store",name:"The Beer Store",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Total Wine":{name:"Total Wine",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1171529136919048195/cip0mUtb_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7828084",shop:"alcohol"},addTags:{brand:"Total Wine","brand:wikidata":"Q7828084","brand:wikipedia":"en:Total Wine & More",name:"Total Wine",official_name:"Total Wine & More",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Virginia ABC":{name:"Virginia ABC",icon:"fas-wine-bottle",imageURL:"https://graph.facebook.com/VirginiaABC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7934236",shop:"alcohol"},addTags:{brand:"Virginia ABC","brand:wikidata":"Q7934236","brand:wikipedia":"en:Virginia Alcoholic Beverage Control Authority",name:"Virginia ABC",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Бристоль":{name:"Бристоль",icon:"fas-wine-bottle",imageURL:"https://graph.facebook.com/bristolretail/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q59155583",shop:"alcohol"},addTags:{brand:"Бристоль","brand:wikidata":"Q59155583","brand:wikipedia":"ru:Бристоль (сеть магазинов)",name:"Бристоль",shop:"alcohol"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Красное & Белое":{name:"Красное & Белое",icon:"fas-wine-bottle",imageURL:"https://graph.facebook.com/krasnoe.beloe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24933790",shop:"alcohol"},addTags:{brand:"Красное & Белое","brand:en":"Red&White","brand:wikidata":"Q24933790","brand:wikipedia":"en:Krasnoe & Beloe",name:"Красное & Белое","name:en":"Red&White",shop:"alcohol"},countryCodes:["ru"],terms:["красное и белое"],matchScore:2,suggestion:true},"shop/alcohol/カクヤス":{name:"カクヤス",icon:"fas-wine-bottle",geometry:["point","area"],tags:{"brand:wikidata":"Q11293990",shop:"alcohol"},addTags:{brand:"カクヤス","brand:en":"Kakuyasu","brand:ja":"カクヤス","brand:wikidata":"Q11293990","brand:wikipedia":"ja:カクヤス",name:"カクヤス","name:en":"Kakuyasu","name:ja":"カクヤス",shop:"alcohol"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/art/YellowKorner":{name:"YellowKorner",icon:"maki-shop",imageURL:"https://graph.facebook.com/YellowKorner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3572115",shop:"art"},addTags:{brand:"YellowKorner","brand:wikidata":"Q3572115","brand:wikipedia":"fr:YellowKorner",name:"YellowKorner",shop:"art"},terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Aubert":{name:"Aubert",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/Aubert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62964657",shop:"baby_goods"},addTags:{brand:"Aubert","brand:wikidata":"Q62964657",name:"Aubert",shop:"baby_goods"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Babies R Us":{name:"Babies R Us",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/babiesrus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17232036",shop:"baby_goods"},addTags:{brand:"Babies R Us","brand:wikidata":"Q17232036",name:"Babies R Us",shop:"baby_goods"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/BabyOne":{name:"BabyOne",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/BabyOne/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57540408",shop:"baby_goods"},addTags:{brand:"BabyOne","brand:wikidata":"Q57540408",name:"BabyOne",shop:"baby_goods"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Buy Buy Baby":{name:"Buy Buy Baby",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/buybuyBABY/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5003352",shop:"baby_goods"},addTags:{brand:"Buy Buy Baby","brand:wikidata":"Q5003352","brand:wikipedia":"en:Buy Buy Baby",name:"Buy Buy Baby",shop:"baby_goods"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Mothercare":{name:"Mothercare",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/mothercareuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q136738",shop:"baby_goods"},addTags:{brand:"Mothercare","brand:wikidata":"Q136738","brand:wikipedia":"en:Mothercare",name:"Mothercare",shop:"baby_goods"},terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Zippy":{name:"Zippy",icon:"fas-baby-carriage",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FZippy%20Kidstore%20logo%2020150813.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q10395161",shop:"baby_goods"},addTags:{brand:"Zippy","brand:wikidata":"Q10395161","brand:wikipedia":"en:Zippy Kidstore",name:"Zippy",shop:"baby_goods"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/西松屋":{name:"西松屋",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/nishimatsuya.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11628761",shop:"baby_goods"},addTags:{brand:"西松屋","brand:en":"Nishimatsuya Chain","brand:ja":"西松屋","brand:wikidata":"Q11628761","brand:wikipedia":"ja:西松屋",name:"西松屋","name:en":"Nishimatsuya Chain","name:ja":"西松屋",shop:"baby_goods"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/bag/Bentley":{name:"Bentley",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/bentleyleathers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65947700",shop:"bag"},addTags:{brand:"Bentley","brand:wikidata":"Q65947700",name:"Bentley",shop:"bag"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/bag/Carpisa":{name:"Carpisa",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/CarpisaOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28035409",shop:"bag"},addTags:{brand:"Carpisa","brand:wikidata":"Q28035409","brand:wikipedia":"en:Carpisa",name:"Carpisa",shop:"bag"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/bag/Coach":{name:"Coach",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/coach/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q727697",shop:"bag"},addTags:{brand:"Coach","brand:wikidata":"Q727697","brand:wikipedia":"en:Coach New York",name:"Coach",shop:"bag"},countryCodes:["ca","us"],terms:["coach new york","coach ny"],matchScore:2,suggestion:true},"shop/bag/Kipling":{name:"Kipling",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/KiplingU.S.A/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6414641",shop:"bag"},addTags:{brand:"Kipling","brand:wikidata":"Q6414641","brand:wikipedia":"en:Kipling (brand)",name:"Kipling",shop:"bag"},countryCodes:["be","gb"],terms:[],matchScore:2,suggestion:true},"shop/bag/Samsonite":{name:"Samsonite",icon:"fas-suitcase-rolling",imageURL:"https://pbs.twimg.com/profile_images/1117861430366175232/3u8m-kIE_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1203426",shop:"bag"},addTags:{brand:"Samsonite","brand:wikidata":"Q1203426","brand:wikipedia":"en:Samsonite",name:"Samsonite",shop:"bag"},terms:[],matchScore:2,suggestion:true},"shop/bag/Tumi":{name:"Tumi",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/TumiTravel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4465402",shop:"bag"},addTags:{brand:"Tumi","brand:wikidata":"Q4465402","brand:wikipedia":"en:Tumi Inc.",name:"Tumi",shop:"bag"},terms:[],matchScore:2,suggestion:true},"shop/bag/Vera Bradley":{name:"Vera Bradley",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/VeraBradley/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7920749",shop:"bag"},addTags:{brand:"Vera Bradley","brand:wikidata":"Q7920749","brand:wikipedia":"en:Vera Bradley",name:"Vera Bradley",shop:"bag"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Anker":{name:"Anker",icon:"maki-bakery",imageURL:"https://graph.facebook.com/Ankerbrot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q557116",shop:"bakery"},addTags:{brand:"Anker","brand:wikidata":"Q557116","brand:wikipedia":"de:Ankerbrot",name:"Anker",shop:"bakery"},countryCodes:["at","sk"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Armbruster":{name:"Armbruster",icon:"maki-bakery",imageURL:"https://graph.facebook.com/104104147676951/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q67987954",shop:"bakery"},addTags:{brand:"Armbruster","brand:wikidata":"Q67987954",name:"Armbruster",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Arome Bakery":{name:"Arome Bakery",icon:"maki-bakery",imageURL:"https://graph.facebook.com/aromebakery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1305627",shop:"bakery"},addTags:{brand:"Arome Bakery","brand:wikidata":"Q1305627","brand:wikipedia":"zh:東海堂",name:"Arome Bakery",shop:"bakery"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Awiteks":{name:"Awiteks",icon:"maki-bakery",imageURL:"https://graph.facebook.com/awiteks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62054190",shop:"bakery"},addTags:{brand:"Awiteks","brand:wikidata":"Q62054190",name:"Awiteks",shop:"bakery"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Back-Factory":{name:"Back-Factory",icon:"maki-bakery",imageURL:"https://graph.facebook.com/backfactory/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21200483",shop:"bakery"},addTags:{brand:"Back-Factory","brand:wikidata":"Q21200483","brand:wikipedia":"de:Back-Factory",name:"Back-Factory",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Backstube Wünsche":{name:"Backstube Wünsche",icon:"maki-bakery",imageURL:"https://graph.facebook.com/BackstubeWuensche/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66085325",shop:"bakery"},addTags:{brand:"Backstube Wünsche","brand:wikidata":"Q66085325",name:"Backstube Wünsche",shop:"bakery"},countryCodes:["de"],terms:["wünsche"],matchScore:2,suggestion:true},"shop/bakery/Backwerk":{name:"Backwerk",icon:"maki-bakery",imageURL:"https://graph.facebook.com/155997891116938/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q798298",shop:"bakery"},addTags:{brand:"BackWerk","brand:wikidata":"Q798298","brand:wikipedia":"de:BackWerk",name:"Backwerk",shop:"bakery"},countryCodes:["at","ch","de","gb","nl"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Baguette":{name:"Baguette",icon:"maki-bakery",imageURL:"https://graph.facebook.com/Baguette.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q82512635",shop:"bakery"},addTags:{brand:"Baguette","brand:wikidata":"Q82512635",name:"Baguette",shop:"bakery"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Bakers Delight":{name:"Bakers Delight",icon:"maki-bakery",imageURL:"https://graph.facebook.com/bakersdelight/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4849261",shop:"bakery"},addTags:{brand:"Bakers Delight","brand:wikidata":"Q4849261","brand:wikipedia":"en:Bakers Delight",name:"Bakers Delight",shop:"bakery"},countryCodes:["au","ca","nz","us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Bakker Bart":{name:"Bakker Bart",icon:"maki-bakery",imageURL:"https://graph.facebook.com/bakkerbartNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2177445",shop:"bakery"},addTags:{brand:"Bakker Bart","brand:wikidata":"Q2177445","brand:wikipedia":"nl:Bakker Bart",name:"Bakker Bart",shop:"bakery"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Balfours":{name:"Balfours",icon:"maki-bakery",imageURL:"https://graph.facebook.com/balfoursbakery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4850765",shop:"bakery"},addTags:{brand:"Balfours","brand:wikidata":"Q4850765",name:"Balfours",shop:"bakery",takeaway:"yes"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Banette":{name:"Banette",icon:"maki-bakery",imageURL:"https://graph.facebook.com/293934294060419/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882405",shop:"bakery"},addTags:{brand:"Banette","brand:wikidata":"Q2882405","brand:wikipedia":"fr:Banette (entreprise)",name:"Banette",shop:"bakery"},terms:[],matchScore:2,suggestion:true},"shop/bakery/Beechworth Bakery":{name:"Beechworth Bakery",icon:"maki-bakery",imageURL:"https://graph.facebook.com/Beechworth.Bakery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28183324",shop:"bakery"},addTags:{brand:"Beechworth Bakery","brand:wikidata":"Q28183324","brand:wikipedia":"en:Beechworth Bakery",name:"Beechworth Bakery",shop:"bakery"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Birds":{name:"Birds",icon:"maki-bakery",imageURL:"https://graph.facebook.com/birdsbakeryderby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63001935",shop:"bakery"},addTags:{brand:"Birds","brand:wikidata":"Q63001935","brand:wikipedia":"en:Birds Bakery",name:"Birds",official_name:"Birds Bakery",shop:"bakery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bakery/BreadTalk":{name:"BreadTalk",icon:"maki-bakery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBreadTalk%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1106640",shop:"bakery"},addTags:{brand:"BreadTalk","brand:wikidata":"Q1106640","brand:wikipedia":"en:BreadTalk",name:"BreadTalk",shop:"bakery"},countryCodes:["sg"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Breadtop":{name:"Breadtop",icon:"maki-bakery",imageURL:"https://graph.facebook.com/we.love.breadtop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4959217",shop:"bakery"},addTags:{brand:"Breadtop","brand:wikidata":"Q4959217","brand:wikipedia":"en:Breadtop",cuisine:"chinese",name:"Breadtop",shop:"bakery"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Brumby's Bakeries":{name:"Brumby's Bakeries",icon:"maki-bakery",imageURL:"https://graph.facebook.com/brumbys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4978794",shop:"bakery"},addTags:{brand:"Brumby's Bakeries","brand:wikidata":"Q4978794","brand:wikipedia":"en:Brumby's Bakeries",name:"Brumby's Bakeries",shop:"bakery"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Bäckerei Fuchs":{name:"Bäckerei Fuchs",icon:"maki-bakery",imageURL:"https://graph.facebook.com/baeckereifuchs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42825993",shop:"bakery"},addTags:{brand:"Bäckerei Fuchs","brand:wikidata":"Q42825993","brand:wikipedia":"de:Harald Fuchs Bäckerei – Konditorei",name:"Bäckerei Fuchs",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/COBS Bread":{name:"COBS Bread",icon:"maki-bakery",imageURL:"https://graph.facebook.com/bakersdelight/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4849261",shop:"bakery"},addTags:{brand:"COBS Bread","brand:wikidata":"Q4849261","brand:wikipedia":"en:Bakers Delight",name:"COBS Bread",shop:"bakery"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Cadera":{name:"Cadera",icon:"maki-bakery",imageURL:"https://graph.facebook.com/Cadera1853/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62086410",shop:"bakery"},addTags:{brand:"Cadera","brand:wikidata":"Q62086410",name:"Cadera",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Castaño":{name:"Castaño",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q5049629",shop:"bakery"},addTags:{brand:"Castaño","brand:wikidata":"Q5049629","brand:wikipedia":"en:Castaño (bakery)",name:"Castaño",shop:"bakery"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Cooplands":{name:"Cooplands",icon:"maki-bakery",imageURL:"https://graph.facebook.com/CooplandsBakers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5167971",shop:"bakery"},addTags:{brand:"Cooplands","brand:wikidata":"Q5167971","brand:wikipedia":"en:Cooplands",name:"Cooplands",shop:"bakery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Dat Backhus":{name:"Dat Backhus",icon:"maki-bakery",imageURL:"https://graph.facebook.com/datbackhus.hamburg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62093175",shop:"bakery"},addTags:{brand:"Dat Backhus","brand:wikidata":"Q62093175",name:"Dat Backhus",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Der Beck":{name:"Der Beck",icon:"maki-bakery",imageURL:"https://graph.facebook.com/derbeck.baeckerei/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1192443",shop:"bakery"},addTags:{brand:"Der Beck","brand:wikidata":"Q1192443","brand:wikipedia":"en:Der Beck",name:"Der Beck",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Ditsch":{name:"Ditsch",icon:"maki-bakery",imageURL:"https://graph.facebook.com/ditsch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q911573",shop:"bakery"},addTags:{brand:"Ditsch","brand:wikidata":"Q911573","brand:wikipedia":"en:Ditsch",name:"Ditsch",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Fornetti":{name:"Fornetti",icon:"maki-bakery",imageURL:"https://graph.facebook.com/fornetti.magyarorszag/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1003020",shop:"bakery"},addTags:{brand:"Fornetti","brand:wikidata":"Q1003020","brand:wikipedia":"en:Fornetti",name:"Fornetti",shop:"bakery"},terms:[],matchScore:2,suggestion:true},"shop/bakery/Goldilocks":{name:"Goldilocks",icon:"maki-bakery",imageURL:"https://graph.facebook.com/GoldilocksPH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5580198",shop:"bakery"},addTags:{brand:"Goldilocks","brand:wikidata":"Q5580198","brand:wikipedia":"en:Goldilocks Bakeshop",name:"Goldilocks",shop:"bakery"},countryCodes:["ca","ph","th","us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Great Harvest Bread Company":{name:"Great Harvest Bread Company",icon:"maki-bakery",imageURL:"https://graph.facebook.com/GreatHarvestBreadCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5599297",shop:"bakery"},addTags:{brand:"Great Harvest Bread Company","brand:wikidata":"Q5599297","brand:wikipedia":"en:Great Harvest Bread Company",name:"Great Harvest Bread Company",shop:"bakery"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Hofpfisterei":{name:"Hofpfisterei",icon:"maki-bakery",imageURL:"https://graph.facebook.com/hofpfisterei/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1623217",shop:"bakery"},addTags:{brand:"Hofpfisterei","brand:wikidata":"Q1623217","brand:wikipedia":"en:Hofpfisterei",name:"Hofpfisterei",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Ihle":{name:"Ihle",icon:"maki-bakery",imageURL:"https://graph.facebook.com/1845011368873218/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1626371",shop:"bakery"},addTags:{brand:"Ihle","brand:wikidata":"Q1626371","brand:wikipedia":"de:Landbäckerei Ihle",name:"Ihle",shop:"bakery"},countryCodes:["de"],terms:["landbäckerei ihle"],matchScore:2,suggestion:true},"shop/bakery/K&U Bäckerei":{name:"K&U Bäckerei",icon:"maki-bakery",imageURL:"https://graph.facebook.com/KU.Backkultur/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1719433",shop:"bakery"},addTags:{brand:"K&U Bäckerei","brand:wikidata":"Q1719433","brand:wikipedia":"de:K & U Bäckerei",name:"K&U Bäckerei",shop:"bakery"},countryCodes:["de"],terms:["k&u"],matchScore:2,suggestion:true},"shop/bakery/Kamps":{name:"Kamps",icon:"maki-bakery",imageURL:"https://graph.facebook.com/417008548362119/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1723381",shop:"bakery"},addTags:{brand:"Kamps","brand:wikidata":"Q1723381","brand:wikipedia":"de:Kamps (Unternehmen)",name:"Kamps",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/La Mie Câline":{name:"La Mie Câline",icon:"maki-bakery",imageURL:"https://graph.facebook.com/lamiecalinefrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3210704",shop:"bakery"},addTags:{brand:"La Mie Câline","brand:wikidata":"Q3210704","brand:wikipedia":"fr:La Mie câline",name:"La Mie Câline",shop:"bakery"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Le Crobag":{name:"Le Crobag",icon:"maki-bakery",imageURL:"https://graph.facebook.com/lecrobag/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1558025",shop:"bakery"},addTags:{brand:"Le Crobag","brand:wikidata":"Q1558025","brand:wikipedia":"de:Le Crobag",name:"Le Crobag",shop:"bakery"},countryCodes:["at","de","pl","ru"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Leifert":{name:"Leifert",icon:"maki-bakery",imageURL:"https://graph.facebook.com/baeckerei.leifert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66086129",shop:"bakery"},addTags:{brand:"Leifert","brand:wikidata":"Q66086129",name:"Leifert",shop:"bakery"},countryCodes:["de"],terms:["bäckerei leifert"],matchScore:2,suggestion:true},"shop/bakery/Lila Bäcker":{name:"Lila Bäcker",icon:"maki-bakery",imageURL:"https://pbs.twimg.com/profile_images/1145260042/logo_up_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q57516591",shop:"bakery"},addTags:{brand:"Lila Bäcker","brand:wikidata":"Q57516591",name:"Lila Bäcker",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Löwenbäcker Schaper":{name:"Löwenbäcker Schaper",icon:"maki-bakery",imageURL:"https://graph.facebook.com/LoewenbaeckerSchaper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075965",shop:"bakery"},addTags:{brand:"Löwenbäcker Schaper","brand:wikidata":"Q62075965",name:"Löwenbäcker Schaper",shop:"bakery"},countryCodes:["de"],terms:["schaper"],matchScore:2,suggestion:true},"shop/bakery/Marie Blachère":{name:"Marie Blachère",icon:"maki-bakery",imageURL:"https://graph.facebook.com/marieblachereusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62082410",shop:"bakery"},addTags:{brand:"Marie Blachère","brand:wikidata":"Q62082410","brand:wikipedia":"fr:Marie Blachère",name:"Marie Blachère",shop:"bakery"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Milkau":{name:"Milkau",icon:"maki-bakery",imageURL:"https://graph.facebook.com/MilkauStadtbaecker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66208652",shop:"bakery"},addTags:{brand:"Milkau","brand:wikidata":"Q66208652",name:"Milkau",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Mlinar":{name:"Mlinar",icon:"maki-bakery",imageURL:"https://graph.facebook.com/MlinarHrvatska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62082464",shop:"bakery"},addTags:{brand:"Mlinar","brand:wikidata":"Q62082464",name:"Mlinar",shop:"bakery"},countryCodes:["ba","hr","sl"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Musmanni":{name:"Musmanni",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q19382082",shop:"bakery"},addTags:{brand:"Musmanni","brand:wikidata":"Q19382082","brand:wikipedia":"no:Musmanni",name:"Musmanni",shop:"bakery"},countryCodes:["cr"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Nothing Bundt Cakes":{name:"Nothing Bundt Cakes",icon:"maki-bakery",imageURL:"https://graph.facebook.com/nothingbundtcakes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62082526",shop:"bakery"},addTags:{brand:"Nothing Bundt Cakes","brand:wikidata":"Q62082526",name:"Nothing Bundt Cakes",shop:"bakery"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Paris Baguette (worldwide)":{name:"Paris Baguette (worldwide)",icon:"maki-bakery",imageURL:"https://graph.facebook.com/parisbaguetteus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62605260",shop:"bakery"},addTags:{brand:"Paris Baguette","brand:wikidata":"Q62605260",name:"Paris Baguette",shop:"bakery"},countryCodes:["sg","us","vn"],terms:["paris baguette cafe"],matchScore:2,suggestion:true},"shop/bakery/Paul":{name:"Paul",icon:"maki-bakery",imageURL:"https://pbs.twimg.com/profile_images/1104154254699364353/69J1OrZ1_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q3370417",shop:"bakery"},addTags:{brand:"Paul","brand:wikidata":"Q3370417","brand:wikipedia":"en:Paul (bakery)",name:"Paul",shop:"bakery"},terms:[],matchScore:2,suggestion:true},"shop/bakery/Peter's gute Backstube":{name:"Peter's gute Backstube",icon:"maki-bakery",imageURL:"https://graph.facebook.com/petersgutebackstube/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q67987587",shop:"bakery"},addTags:{brand:"Peter's gute Backstube","brand:wikidata":"Q67987587",name:"Peter's gute Backstube",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Red Ribbon":{name:"Red Ribbon",icon:"maki-bakery",imageURL:"https://graph.facebook.com/redribbonbakeshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7304789",shop:"bakery"},addTags:{brand:"Red Ribbon","brand:wikidata":"Q7304789","brand:wikipedia":"en:Red Ribbon Bakeshop",name:"Red Ribbon",shop:"bakery"},countryCodes:["ph","us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Richters Altstadt-Bäckerei":{name:"Richters Altstadt-Bäckerei",icon:"maki-bakery",imageURL:"https://graph.facebook.com/richteraltstadtbaecker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66212346",shop:"bakery"},addTags:{brand:"Richters Altstadt-Bäckerei","brand:wikidata":"Q66212346",name:"Richters Altstadt-Bäckerei",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Ronde des Pains":{name:"Ronde des Pains",icon:"maki-bakery",imageURL:"https://graph.facebook.com/487418498019899/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3441707",shop:"bakery"},addTags:{brand:"Ronde des Pains","brand:wikidata":"Q3441707","brand:wikipedia":"fr:Ronde des Pains",name:"Ronde des Pains",shop:"bakery"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Schäfer's":{name:"Schäfer's",icon:"maki-bakery",imageURL:"https://graph.facebook.com/149823855088841/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1464562",shop:"bakery"},addTags:{brand:"Schäfer's","brand:wikidata":"Q1464562","brand:wikipedia":"de:Schäfers Brot",name:"Schäfer's",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Sehne":{name:"Sehne",icon:"maki-bakery",imageURL:"https://graph.facebook.com/150057125031868/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1314761",shop:"bakery"},addTags:{brand:"Sehne","brand:wikidata":"Q1314761","brand:wikipedia":"de:Sehne Backwaren",name:"Sehne",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Starke Bäcker":{name:"Starke Bäcker",icon:"maki-bakery",imageURL:"https://graph.facebook.com/StarkeBaecker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66133336",shop:"bakery"},addTags:{brand:"Starke Bäcker","brand:wikidata":"Q66133336",name:"Starke Bäcker",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Steinecke":{name:"Steinecke",icon:"maki-bakery",imageURL:"https://graph.facebook.com/brotmeisterei.steinecke/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57516278",shop:"bakery"},addTags:{brand:"Steinecke","brand:wikidata":"Q57516278","brand:wikipedia":"de:Meisterbäckerei Steinecke",name:"Steinecke",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Sternenbäck":{name:"Sternenbäck",icon:"maki-bakery",imageURL:"https://graph.facebook.com/sternenbaeck/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62595021",shop:"bakery"},addTags:{brand:"Sternenbäck","brand:wikidata":"Q62595021",name:"Sternenbäck",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Ströck":{name:"Ströck",icon:"maki-bakery",imageURL:"https://graph.facebook.com/Stroeck/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2357607",shop:"bakery"},addTags:{brand:"Ströck","brand:wikidata":"Q2357607","brand:wikipedia":"de:Ströck-Brot",name:"Ströck",shop:"bakery"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Wiener Feinbäcker":{name:"Wiener Feinbäcker",icon:"maki-bakery",imageURL:"https://graph.facebook.com/248217405252147/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15854357",shop:"bakery"},addTags:{brand:"Wiener Feinbäcker","brand:wikidata":"Q15854357","brand:wikipedia":"de:Wiener Feinbäckerei Heberer",name:"Wiener Feinbäcker",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/sander's backstube":{name:"sander's backstube",icon:"maki-bakery",imageURL:"https://graph.facebook.com/sanders.backstube/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66207337",shop:"bakery"},addTags:{brand:"sander's backstube","brand:wikidata":"Q66207337",name:"sander's backstube",shop:"bakery"},countryCodes:["de"],terms:["bäckerei sander"],matchScore:2,suggestion:true},"shop/bakery/von Allwörden":{name:"von Allwörden",icon:"maki-bakery",imageURL:"https://graph.facebook.com/allwoerden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60411349",shop:"bakery"},addTags:{brand:"von Allwörden","brand:wikidata":"Q60411349","brand:wikipedia":"nds:Heinrich von Allwörden GmbH",name:"von Allwörden",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/サンジェルマン":{name:"サンジェルマン",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q11305612",shop:"bakery"},addTags:{brand:"サンジェルマン","brand:en":"Saint-Germain","brand:ja":"サンジェルマン","brand:wikidata":"Q11305612","brand:wikipedia":"ja:サンジェルマン (製パン)",name:"サンジェルマン","name:en":"Saint-Germain","name:ja":"サンジェルマン",shop:"bakery"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/bakery/ヴィ・ド・フランス":{name:"ヴィ・ド・フランス",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q7928249",shop:"bakery"},addTags:{brand:"ヴィ・ド・フランス","brand:en":"Vie de France","brand:ja":"ヴィ・ド・フランス","brand:wikidata":"Q7928249","brand:wikipedia":"ja:ヴィ・ド・フランス",name:"ヴィ・ド・フランス","name:en":"Vie de France","name:ja":"ヴィ・ド・フランス",shop:"bakery"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/bakery/巴黎贝甜 (China)":{name:"巴黎贝甜 (China)",icon:"maki-bakery",imageURL:"https://graph.facebook.com/parisbaguetteus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62605260",shop:"bakery"},addTags:{brand:"巴黎贝甜","brand:en":"Paris Baguette","brand:wikidata":"Q62605260","brand:zh":"巴黎贝甜",name:"巴黎贝甜","name:en":"Paris Baguette","name:zh":"巴黎贝甜",shop:"bakery"},countryCodes:["cn"],terms:["paris baguette","paris baguette cafe","巴黎貝甜"],matchScore:2,suggestion:true},"shop/bakery/뚜레쥬르":{name:"뚜레쥬르",icon:"maki-bakery",imageURL:"https://graph.facebook.com/TousLesJoursUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3535609",shop:"bakery"},addTags:{brand:"뚜레쥬르","brand:en":"Tous Les Jours","brand:ko":"뚜레쥬르","brand:wikidata":"Q3535609","brand:wikipedia":"ko:뚜레쥬르",name:"뚜레쥬르","name:en":"Tous Les Jours","name:ko":"뚜레쥬르",shop:"bakery"},countryCodes:["kr"],terms:["뚜레주르"],matchScore:2,suggestion:true},"shop/bakery/파리바게뜨 (South Korea)":{name:"파리바게뜨 (South Korea)",icon:"maki-bakery",imageURL:"https://graph.facebook.com/parisbaguetteus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62605260",shop:"bakery"},addTags:{"alt_name:ko":"파리바게트",brand:"파리바게뜨","brand:en":"Paris Baguette","brand:ko":"파리바게뜨","brand:wikidata":"Q62605260",name:"파리바게뜨","name:en":"Paris Baguette","name:ko":"파리바게뜨",shop:"bakery"},countryCodes:["kr"],terms:["paris baguette","paris baguette cafe","파리바게트"],matchScore:2,suggestion:true},"shop/beauty/Benefit Brow Bar":{name:"Benefit Brow Bar",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/benefitcosmetics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2895769",shop:"beauty"},addTags:{beauty:"eyebrow;eyelash;waxing",brand:"Benefit","brand:wikidata":"Q2895769","brand:wikipedia":"en:Benefit Cosmetics",name:"Benefit Brow Bar",shop:"beauty"},countryCodes:["us"],terms:["benefit","ulta brow bar"],matchScore:2,suggestion:true},"shop/beauty/European Wax Center":{name:"European Wax Center",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/EuropeanWax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5413426",shop:"beauty"},addTags:{beauty:"waxing",brand:"European Wax Center","brand:wikidata":"Q5413426","brand:wikipedia":"en:European Wax Center",name:"European Wax Center",shop:"beauty"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/beauty/Indigo Sun":{name:"Indigo Sun",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/indigosunretail/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63436906",shop:"beauty"},addTags:{beauty:"tanning",brand:"Indigo Sun","brand:wikidata":"Q63436906",name:"Indigo Sun",shop:"beauty"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/beauty/Palm Beach Tan":{name:"Palm Beach Tan",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/PBTOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64027086",shop:"beauty"},addTags:{beauty:"tanning",brand:"Palm Beach Tan","brand:wikidata":"Q64027086","brand:wikipedia":"en:Palm Beach Tan",name:"Palm Beach Tan",shop:"beauty"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/beauty/Sola Salons":{name:"Sola Salons",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/solasalons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64337426",shop:"beauty"},addTags:{beauty:"hair;nails;skin_care;massage",brand:"Sola Salons","brand:wikidata":"Q64337426",name:"Sola Salons",shop:"beauty"},countryCodes:["us"],terms:["sola","sola salon studios"],matchScore:2,suggestion:true},"shop/beauty/The Skin Bar at Ulta Beauty":{name:"The Skin Bar at Ulta Beauty",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/UltaBeauty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7880076",shop:"beauty"},addTags:{alt_name:"Ulta Skin Bar",beauty:"skin_care",brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"The Skin Bar at Ulta Beauty",shop:"beauty"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/beauty/Yves Rocher":{name:"Yves Rocher",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/YvesRocherUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28496595",shop:"beauty"},addTags:{beauty:"cosmetics",brand:"Yves Rocher","brand:wikidata":"Q28496595","brand:wikipedia":"en:Yves Rocher (company)",name:"Yves Rocher",shop:"beauty"},terms:["ив роше"],matchScore:2,suggestion:true},"shop/bed/Bensons for Beds":{name:"Bensons for Beds",icon:"maki-lodging",imageURL:"https://pbs.twimg.com/profile_images/435352801321840641/LvfVjgBH_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q4890299",shop:"bed"},addTags:{brand:"Bensons for Beds","brand:wikidata":"Q4890299","brand:wikipedia":"en:Bensons for Beds",name:"Bensons for Beds",shop:"bed"},countryCodes:["gb"],terms:["bensons"],matchScore:2,suggestion:true},"shop/bed/Beter Bed":{name:"Beter Bed",icon:"maki-lodging",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBeterBed-logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q831076",shop:"bed"},addTags:{brand:"Beter Bed","brand:wikidata":"Q831076","brand:wikipedia":"nl:Beter Bed",name:"Beter Bed",shop:"bed"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/bed/Casper":{name:"Casper",icon:"maki-lodging",imageURL:"https://graph.facebook.com/224110981099062/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20539294",shop:"bed"},addTags:{brand:"Casper","brand:wikidata":"Q20539294","brand:wikipedia":"en:Casper Sleep",name:"Casper",shop:"bed"},terms:[],matchScore:2,suggestion:true},"shop/bed/Dreams":{name:"Dreams",icon:"maki-lodging",imageURL:"https://graph.facebook.com/dreamsbeds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5306688",shop:"bed"},addTags:{brand:"Dreams","brand:wikidata":"Q5306688","brand:wikipedia":"en:Dreams (bed retailer)",name:"Dreams",shop:"bed"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bed/Grand Litier":{name:"Grand Litier",icon:"maki-lodging",imageURL:"https://graph.facebook.com/grandlitier/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21030208",shop:"bed"},addTags:{brand:"Grand Litier","brand:wikidata":"Q21030208","brand:wikipedia":"fr:Grand Litier",name:"Grand Litier",shop:"bed"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/bed/Maison de la Literie":{name:"Maison de la Literie",icon:"maki-lodging",imageURL:"https://graph.facebook.com/MaisondelaLiterieFR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80955776",shop:"bed"},addTags:{brand:"Maison de la Literie","brand:wikidata":"Q80955776",name:"Maison de la Literie",shop:"bed"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/bed/Matratzen Concord":{name:"Matratzen Concord",icon:"maki-lodging",imageURL:"https://graph.facebook.com/MatratzenConcord/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18629057",shop:"bed"},addTags:{brand:"Matratzen Concord","brand:wikidata":"Q18629057","brand:wikipedia":"de:Matratzen Concord",name:"Matratzen Concord",shop:"bed"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"shop/bed/Mattress Firm":{name:"Mattress Firm",icon:"maki-lodging",imageURL:"https://graph.facebook.com/MattressFirm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6791878",shop:"bed"},addTags:{brand:"Mattress Firm","brand:wikidata":"Q6791878","brand:wikipedia":"en:Mattress Firm",name:"Mattress Firm",shop:"bed"},countryCodes:["us"],terms:["sleepys"],matchScore:2,suggestion:true},"shop/bed/Mattress Warehouse":{name:"Mattress Warehouse",icon:"maki-lodging",imageURL:"https://graph.facebook.com/mattresswhse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61995079",shop:"bed"},addTags:{brand:"Mattress Warehouse","brand:wikidata":"Q61995079",name:"Mattress Warehouse",shop:"bed"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/bed/Sleep Country":{name:"Sleep Country",icon:"maki-lodging",imageURL:"https://graph.facebook.com/SleepCountryCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7539684",shop:"bed"},addTags:{brand:"Sleep Country","brand:wikidata":"Q7539684","brand:wikipedia":"en:Sleep Country Canada",name:"Sleep Country",shop:"bed"},countryCodes:["ca"],terms:["sleep country canada"],matchScore:2,suggestion:true},"shop/bed/Sleep Experts":{name:"Sleep Experts",icon:"maki-lodging",imageURL:"https://graph.facebook.com/sleepexperts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7539688",shop:"bed"},addTags:{brand:"Sleep Experts","brand:wikidata":"Q7539688","brand:wikipedia":"en:Sleep Experts",name:"Sleep Experts",shop:"bed"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/bed/Sleep Number":{name:"Sleep Number",icon:"maki-lodging",imageURL:"https://graph.facebook.com/SleepNumber/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7447640",shop:"bed"},addTags:{brand:"Sleep Number","brand:wikidata":"Q7447640","brand:wikipedia":"en:Sleep Number",name:"Sleep Number",shop:"bed"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Dursty":{name:"Dursty",icon:"temaki-bottles",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDursty%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1267518",shop:"beverages"},addTags:{brand:"Dursty","brand:wikidata":"Q1267518","brand:wikipedia":"de:Dursty Getränkemärkte",name:"Dursty",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Edeka Getränkemarkt":{name:"Edeka Getränkemarkt",icon:"temaki-bottles",geometry:["point","area"],tags:{"brand:wikidata":"Q57450576",shop:"beverages"},addTags:{brand:"Edeka Getränkemarkt","brand:wikidata":"Q57450576",name:"Edeka Getränkemarkt",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Fristo":{name:"Fristo",icon:"temaki-bottles",imageURL:"https://graph.facebook.com/848769365134665/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1465151",shop:"beverages"},addTags:{brand:"Fristo","brand:wikidata":"Q1465151","brand:wikipedia":"de:Fristo",name:"Fristo",shop:"beverages"},countryCodes:["at","de"],terms:["fristo getränkemarkt"],matchScore:2,suggestion:true},"shop/beverages/Getränke Hoffmann":{name:"Getränke Hoffmann",icon:"temaki-bottles",imageURL:"https://graph.facebook.com/getraenkehoffmann/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19284021",shop:"beverages"},addTags:{brand:"Getränke Hoffmann","brand:wikidata":"Q19284021","brand:wikipedia":"de:Getränke Hoffmann",name:"Getränke Hoffmann",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Getränkeland":{name:"Getränkeland",icon:"temaki-bottles",imageURL:"https://graph.facebook.com/Getraenkeland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62594849",shop:"beverages"},addTags:{brand:"Getränkeland","brand:wikidata":"Q62594849",name:"Getränkeland",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Hol'ab":{name:"Hol'ab",icon:"temaki-bottles",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20hol%20ab.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q57557270",shop:"beverages"},addTags:{brand:"Hol'ab","brand:wikidata":"Q57557270",name:"Hol'ab",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Orterer Getränkemarkt":{name:"Orterer Getränkemarkt",icon:"temaki-bottles",geometry:["point","area"],tags:{"brand:wikidata":"Q23787118",shop:"beverages"},addTags:{brand:"Orterer Getränkemarkt","brand:wikidata":"Q23787118","brand:wikipedia":"de:Orterer Gruppe",name:"Orterer Getränkemarkt",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Rewe Getränkemarkt":{name:"Rewe Getränkemarkt",icon:"temaki-bottles",geometry:["point","area"],tags:{"brand:wikidata":"Q57519344",shop:"beverages"},addTags:{brand:"Rewe Getränkemarkt","brand:wikidata":"Q57519344",name:"Rewe Getränkemarkt",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Trinkgut":{name:"Trinkgut",icon:"temaki-bottles",imageURL:"https://pbs.twimg.com/profile_images/339373337/twitter_icon_trinkgut_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q2453627",shop:"beverages"},addTags:{brand:"Trinkgut","brand:wikidata":"Q2453627","brand:wikipedia":"de:Trinkgut",name:"Trinkgut",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/清心福全":{name:"清心福全",icon:"temaki-bottles",imageURL:"https://graph.facebook.com/chingshin1987/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10391229",shop:"beverages"},addTags:{brand:"清心福全","brand:en":"Ching Shin","brand:wikidata":"Q10391229","brand:wikipedia":"zh:清心福全冷飲站","brand:zh":"清心福全",name:"清心福全","name:en":"Ching Shin","name:zh":"清心福全",shop:"beverages"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/bicycle/Cycle Republic":{name:"Cycle Republic",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/CycleRepublicUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65042920",shop:"bicycle"},addTags:{brand:"Cycle Republic","brand:wikidata":"Q65042920","brand:wikipedia":"en:Cycle Republic",name:"Cycle Republic",shop:"bicycle"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bicycle/Evans Cycles":{name:"Evans Cycles",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/evanscycles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5415901",shop:"bicycle"},addTags:{brand:"Evans Cycles","brand:wikidata":"Q5415901","brand:wikipedia":"en:Evans Cycles",name:"Evans Cycles",shop:"bicycle"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bicycle/Fri BikeShop":{name:"Fri BikeShop",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/Cykelbutikken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26721030",shop:"bicycle"},addTags:{brand:"Fri BikeShop","brand:wikidata":"Q26721030",name:"Fri BikeShop",shop:"bicycle"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/bicycle/Giant":{name:"Giant",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/giantbicycles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q703557",shop:"bicycle"},addTags:{brand:"Giant","brand:wikidata":"Q703557","brand:wikipedia":"en:Giant Bicycles",name:"Giant",shop:"bicycle"},terms:[],matchScore:2,suggestion:true},"shop/bicycle/Trek":{name:"Trek",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/TrekBicycle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1067617",shop:"bicycle"},addTags:{alt_name:"Trek Bicycle Store",brand:"Trek","brand:wikidata":"Q1067617","brand:wikipedia":"en:Trek Bicycle Corporation",name:"Trek",shop:"bicycle"},terms:["treck","trek bicycle"],matchScore:2,suggestion:true},"shop/bicycle/サイクルベースあさひ":{name:"サイクルベースあさひ",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/cbasahi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11257202",shop:"bicycle"},addTags:{brand:"サイクルベースあさひ","brand:en":"Cycle Base Asahi","brand:ja":"サイクルベースあさひ","brand:wikidata":"Q11257202","brand:wikipedia":"ja:あさひ (企業)",name:"サイクルベースあさひ","name:en":"Cycle Base Asahi","name:ja":"サイクルベースあさひ",shop:"bicycle"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/boat/West Marine":{name:"West Marine",icon:"temaki-boat",imageURL:"https://graph.facebook.com/WestMarine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7985852",shop:"boat"},addTags:{brand:"West Marine","brand:wikidata":"Q7985852","brand:wikipedia":"en:West Marine",name:"West Marine",shop:"boat"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Betfred":{name:"Betfred",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/1034363254758359041/dxetDfNN_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4897425",shop:"bookmaker"},addTags:{brand:"Betfred","brand:wikidata":"Q4897425","brand:wikipedia":"en:Betfred",name:"Betfred",shop:"bookmaker"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Coral":{name:"Coral",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/1000461740772134913/T9-zMXmF_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q54621344",shop:"bookmaker"},addTags:{brand:"Coral","brand:wikidata":"Q54621344","brand:wikipedia":"en:Coral (bookmaker)",name:"Coral",shop:"bookmaker"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Fortuna":{name:"Fortuna",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/703606549739592/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25857973",shop:"bookmaker"},addTags:{brand:"Fortuna","brand:wikidata":"Q25857973","brand:wikipedia":"en:Fortuna Entertainment Group",name:"Fortuna",shop:"bookmaker"},countryCodes:["cz","hr","pl","ro","sk"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Ladbrokes":{name:"Ladbrokes",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/1148531433947967488/3zGk1STM_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1799875",shop:"bookmaker"},addTags:{brand:"Ladbrokes","brand:wikidata":"Q1799875","brand:wikipedia":"en:Ladbrokes Coral",name:"Ladbrokes",shop:"bookmaker"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Paddy Power":{name:"Paddy Power",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/964533060942299136/XCPfJNxf_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3888718",shop:"bookmaker"},addTags:{brand:"Paddy Power","brand:wikidata":"Q3888718","brand:wikipedia":"en:Paddy Power",name:"Paddy Power",shop:"bookmaker"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Tipico":{name:"Tipico",icon:"temaki-money_hand",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTipico%20Unternehmenslogo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q15851003",shop:"bookmaker"},addTags:{brand:"Tipico","brand:wikidata":"Q15851003","brand:wikipedia":"en:Tipico",name:"Tipico",shop:"bookmaker"},countryCodes:["at","co","de","gi","hr","mt"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/William Hill":{name:"William Hill",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/797028677733253120/bW9oFXT-_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4053147",shop:"bookmaker"},addTags:{brand:"William Hill","brand:wikidata":"Q4053147","brand:wikipedia":"en:William Hill (bookmaker)",name:"William Hill",shop:"bookmaker"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/ΟΠΑΠ":{name:"ΟΠΑΠ",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/1024247841135452160/UlceXxkv_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2007823",shop:"bookmaker"},addTags:{brand:"ΟΠΑΠ","brand:wikidata":"Q2007823","brand:wikipedia":"el:ΟΠΑΠ",name:"ΟΠΑΠ",shop:"bookmaker"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Лига ставок":{name:"Лига ставок",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/ligastavok05/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6545804",shop:"bookmaker"},addTags:{brand:"Лига ставок","brand:en":"Liga Stavok","brand:ru":"Лига ставок","brand:wikidata":"Q6545804","brand:wikipedia":"ru:Лига Ставок",name:"Лига ставок","name:en":"Liga Stavok","name:ru":"Лига ставок",shop:"bookmaker"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Фонбет":{name:"Фонбет",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/fonbetrussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q49137910",shop:"bookmaker"},addTags:{brand:"Фонбет","brand:en":"Fonbet","brand:ru":"Фонбет","brand:wikidata":"Q49137910","brand:wikipedia":"ru:Фонбет",name:"Фонбет","name:en":"Fonbet","name:ru":"Фонбет",shop:"bookmaker"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/books/Akademibokhandeln":{name:"Akademibokhandeln",icon:"fas-book",imageURL:"https://graph.facebook.com/Akademibokhandeln/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10403918",shop:"books"},addTags:{brand:"Akademibokhandeln","brand:wikidata":"Q10403918","brand:wikipedia":"sv:Akademibokhandeln",name:"Akademibokhandeln",shop:"books"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/books/Akateeminen Kirjakauppa":{name:"Akateeminen Kirjakauppa",icon:"fas-book",imageURL:"https://graph.facebook.com/AkateeminenCOM/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10403942",shop:"books"},addTags:{brand:"Akateeminen Kirjakauppa","brand:wikidata":"Q10403942","brand:wikipedia":"fi:Akateeminen Kirjakauppa",name:"Akateeminen Kirjakauppa",shop:"books"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/books/Barnes & Noble":{name:"Barnes & Noble",icon:"fas-book",imageURL:"https://graph.facebook.com/barnesandnoble/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q795454",shop:"books"},addTags:{brand:"Barnes & Noble","brand:wikidata":"Q795454","brand:wikipedia":"en:Barnes & Noble",name:"Barnes & Noble",shop:"books"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/books/Bertrand":{name:"Bertrand",icon:"fas-book",imageURL:"https://graph.facebook.com/bertrandlivreiros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1866547",shop:"books"},addTags:{brand:"Bertrand","brand:wikidata":"Q1866547","brand:wikipedia":"en:Livraria Bertrand",name:"Bertrand",shop:"books"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/books/Books-A-Million":{name:"Books-A-Million",icon:"fas-book",imageURL:"https://graph.facebook.com/booksamillion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4943266",shop:"books"},addTags:{brand:"Books-A-Million","brand:wikidata":"Q4943266","brand:wikipedia":"en:Books-A-Million",name:"Books-A-Million",shop:"books"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/books/Bruna":{name:"Bruna",icon:"fas-book",imageURL:"https://graph.facebook.com/Brunawinkels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3317555",shop:"books"},addTags:{brand:"Bruna","brand:wikidata":"Q3317555","brand:wikipedia":"en:Bruna (company)",name:"Bruna",shop:"books"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/books/Chapters":{name:"Chapters",icon:"fas-book",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FChapters%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5073540",shop:"books"},addTags:{brand:"Chapters","brand:wikidata":"Q5073540","brand:wikipedia":"en:Chapters (bookstore)",name:"Chapters",shop:"books"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/books/Coles":{name:"Coles",icon:"fas-book",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FColes%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5144641",shop:"books"},addTags:{brand:"Coles","brand:wikidata":"Q5144641","brand:wikipedia":"en:Coles (bookstore)",name:"Coles",shop:"books"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/books/Cultura":{name:"Cultura",icon:"fas-book",imageURL:"https://graph.facebook.com/culturafr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3007154",shop:"books"},addTags:{brand:"Cultura","brand:wikidata":"Q3007154","brand:wikipedia":"fr:Cultura",name:"Cultura",shop:"books"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/books/Empik":{name:"Empik",icon:"fas-book",imageURL:"https://graph.facebook.com/empikcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3045978",shop:"books"},addTags:{brand:"Empik","brand:wikidata":"Q3045978","brand:wikipedia":"pl:Empik",name:"Empik",shop:"books"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/books/Fnac":{name:"Fnac",icon:"fas-book",imageURL:"https://graph.facebook.com/Fnac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q676585",shop:"books"},addTags:{brand:"Fnac","brand:wikidata":"Q676585","brand:wikipedia":"en:Fnac",name:"Fnac",shop:"books"},countryCodes:["be","ch","es","fr","nl","pt"],terms:[],matchScore:2,suggestion:true},"shop/books/Gramedia":{name:"Gramedia",icon:"fas-book",imageURL:"https://graph.facebook.com/gramediacom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19646130",shop:"books"},addTags:{brand:"Gramedia","brand:wikidata":"Q19646130","brand:wikipedia":"id:Gramedia (toko buku)",name:"Gramedia",shop:"books"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"shop/books/Half Price Books":{name:"Half Price Books",icon:"fas-book",imageURL:"https://graph.facebook.com/halfpricebooks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5641744",shop:"books"},addTags:{brand:"Half Price Books","brand:wikidata":"Q5641744","brand:wikipedia":"en:Half Price Books",name:"Half Price Books",shop:"books"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/books/Hugendubel":{name:"Hugendubel",icon:"fas-book",imageURL:"https://graph.facebook.com/hugendubelbuchhandlungen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1634142",shop:"books"},addTags:{brand:"Hugendubel","brand:wikidata":"Q1634142","brand:wikipedia":"en:Hugendubel",name:"Hugendubel",shop:"books"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/books/Indigo":{name:"Indigo",icon:"fas-book",imageURL:"https://graph.facebook.com/ChaptersIndigo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2477358",shop:"books"},addTags:{alt_name:"!ndigo",brand:"Indigo","brand:wikidata":"Q2477358","brand:wikipedia":"en:Indigo Books and Music",name:"Indigo",shop:"books"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/books/Libro":{name:"Libro",icon:"fas-book",imageURL:"https://graph.facebook.com/libro.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1823138",shop:"books"},addTags:{brand:"Libro","brand:wikidata":"Q1823138","brand:wikipedia":"de:Libro",name:"Libro",shop:"books"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/books/Mondadori":{name:"Mondadori",icon:"fas-book",imageURL:"https://graph.facebook.com/GruppoMondadori/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q85355",shop:"books"},addTags:{brand:"Mondadori","brand:wikidata":"Q85355","brand:wikipedia":"en:Arnoldo Mondadori Editore",name:"Mondadori",shop:"books"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/books/National Book Store":{name:"National Book Store",icon:"fas-book",imageURL:"https://graph.facebook.com/nbsalert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6971094",shop:"books"},addTags:{brand:"National Book Store","brand:wikidata":"Q6971094","brand:wikipedia":"en:National Book Store",name:"National Book Store",shop:"books"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/books/Osiander":{name:"Osiander",icon:"fas-book",imageURL:"https://graph.facebook.com/Osiander/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1800686",shop:"books"},addTags:{brand:"Osiander","brand:wikidata":"Q1800686","brand:wikipedia":"de:Osiandersche Buchhandlung",name:"Osiander",shop:"books"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/books/Oxfam Bookshop":{name:"Oxfam Bookshop",icon:"fas-book",imageURL:"https://graph.facebook.com/oxfamGB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7115196",shop:"books"},addTags:{brand:"Oxfam Bookshop","brand:wikidata":"Q7115196","brand:wikipedia":"en:Oxfam bookshops",name:"Oxfam Bookshop",second_hand:"only",shop:"books"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/books/Saraiva":{name:"Saraiva",icon:"fas-book",imageURL:"https://graph.facebook.com/saraivaonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10319337",shop:"books"},addTags:{alt_name:"Livraria Saraiva",brand:"Saraiva","brand:wikidata":"Q10319337","brand:wikipedia":"pt:Livraria Saraiva",name:"Saraiva",shop:"books"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/books/Seagull Book":{name:"Seagull Book",icon:"fas-book",imageURL:"https://graph.facebook.com/SeagullBookCorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7440458",shop:"books"},addTags:{brand:"Seagull Book","brand:wikidata":"Q7440458","brand:wikipedia":"en:Seagull Book",name:"Seagull Book",shop:"books"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/books/Standaard Boekhandel":{name:"Standaard Boekhandel",icon:"fas-book",imageURL:"https://graph.facebook.com/standaardboekhandel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3496554",shop:"books"},addTags:{brand:"Standaard Boekhandel","brand:wikidata":"Q3496554","brand:wikipedia":"nl:Standaard Boekhandel",name:"Standaard Boekhandel",shop:"books"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"shop/books/Suomalainen Kirjakauppa":{name:"Suomalainen Kirjakauppa",icon:"fas-book",imageURL:"https://graph.facebook.com/suomalainencom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7641808",shop:"books"},addTags:{brand:"Suomalainen Kirjakauppa","brand:wikidata":"Q7641808","brand:wikipedia":"fi:Suomalainen Kirjakauppa",name:"Suomalainen Kirjakauppa",shop:"books"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/books/TSUTAYA":{name:"TSUTAYA",icon:"fas-book",imageURL:"https://graph.facebook.com/TSUTAYA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5193457",shop:"books"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/Thalia":{name:"Thalia",icon:"fas-book",imageURL:"https://graph.facebook.com/thalia.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2408854",shop:"books"},addTags:{brand:"Thalia","brand:wikidata":"Q2408854","brand:wikipedia":"de:Thalia Bücher",name:"Thalia",shop:"books"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"shop/books/The Works":{name:"The Works",icon:"fas-book",imageURL:"https://graph.facebook.com/TheWorksStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7775853",shop:"books"},addTags:{brand:"The Works","brand:wikidata":"Q7775853","brand:wikipedia":"en:The Works (retailer)",name:"The Works",shop:"books"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/books/WHSmith":{name:"WHSmith",icon:"fas-book",imageURL:"https://graph.facebook.com/WHSmithuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1548712",shop:"books"},addTags:{brand:"WHSmith","brand:wikidata":"Q1548712","brand:wikipedia":"en:WHSmith",name:"WHSmith",shop:"books"},terms:[],matchScore:2,suggestion:true},"shop/books/Waterstones":{name:"Waterstones",icon:"fas-book",imageURL:"https://graph.facebook.com/waterstones/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q151779",shop:"books"},addTags:{brand:"Waterstones","brand:wikidata":"Q151779","brand:wikipedia":"en:Waterstones",name:"Waterstones",shop:"books"},countryCodes:["be","gb","ie","je","nl"],terms:[],matchScore:2,suggestion:true},"shop/books/Weltbild":{name:"Weltbild",icon:"fas-book",imageURL:"https://graph.facebook.com/weltbild/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q883522",shop:"books"},addTags:{brand:"Weltbild","brand:wikidata":"Q883522","brand:wikipedia":"en:Weltbild Publishing Group",name:"Weltbild",shop:"books"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/books/Буквоед":{name:"Буквоед",icon:"fas-book",imageURL:"https://graph.facebook.com/SuperBookvoed/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4098549",shop:"books"},addTags:{brand:"Буквоед","brand:wikidata":"Q4098549","brand:wikipedia":"ru:Буквоед",name:"Буквоед",shop:"books"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/books/Дом книги":{name:"Дом книги",icon:"fas-book",imageURL:"https://graph.facebook.com/spbdk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48950742",shop:"books"},addTags:{brand:"Дом книги","brand:wikidata":"Q48950742","brand:wikipedia":"ru:Московский дом книги",name:"Дом книги",shop:"books"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/books/Читай-город":{name:"Читай-город",icon:"fas-book",imageURL:"https://graph.facebook.com/chitaigorod/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4516645",shop:"books"},addTags:{brand:"Читай-город","brand:wikidata":"Q4516645","brand:wikipedia":"ru:Читай-город",name:"Читай-город",shop:"books"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/books/סטימצקי":{name:"סטימצקי",icon:"fas-book",imageURL:"https://graph.facebook.com/SteimatzkyMadaf.HaSfarim/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2903995",shop:"books"},addTags:{brand:"סטימצקי","brand:en":"Steimatzky","brand:he":"סטימצקי","brand:wikidata":"Q2903995","brand:wikipedia":"he:סטימצקי",name:"סטימצקי","name:en":"Steimatzky","name:he":"סטימצקי",shop:"books"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"shop/books/צומת ספרים":{name:"צומת ספרים",icon:"fas-book",imageURL:"https://graph.facebook.com/tzometsfarim/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6743833",shop:"books"},addTags:{brand:"צומת ספרים","brand:en":"Tzomet Sfarim","brand:he":"צומת ספרים","brand:wikidata":"Q6743833","brand:wikipedia":"he:צומת ספרים",name:"צומת ספרים","name:en":"Tzomet Sfarm","name:he":"צומת ספרים",shop:"books"},countryCodes:["il"],terms:["zomet sfarim"],matchScore:2,suggestion:true},"shop/books/あおい書店":{name:"あおい書店",icon:"fas-book",imageURL:"https://graph.facebook.com/aoi.bookstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11256783",shop:"books"},addTags:{brand:"あおい書店","brand:en":"AOI","brand:ja":"あおい書店","brand:wikidata":"Q11256783","brand:wikipedia":"ja:あおい書店",name:"あおい書店","name:en":"AOI","name:ja":"あおい書店",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/オリオン書房":{name:"オリオン書房",icon:"fas-book",geometry:["point","area"],tags:{"brand:wikidata":"Q11292597",shop:"books"},addTags:{brand:"オリオン書房","brand:en":"Orion Books","brand:ja":"オリオン書房","brand:wikidata":"Q11292597","brand:wikipedia":"ja:オリオン書房",name:"オリオン書房","name:en":"Orion Books","name:ja":"オリオン書房",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/ブックオフ":{name:"ブックオフ",icon:"fas-book",imageURL:"https://graph.facebook.com/bookoffcorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q893011",shop:"books"},addTags:{brand:"ブックオフ","brand:en":"Book Off","brand:ja":"ブックオフ","brand:wikidata":"Q893011","brand:wikipedia":"en:Book Off",name:"ブックオフ","name:en":"Book Off","name:ja":"ブックオフ",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/メロンブックス":{name:"メロンブックス",icon:"fas-book",imageURL:"https://pbs.twimg.com/profile_images/877364475304714240/Ael4G2BP_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q10851653",shop:"books"},addTags:{brand:"メロンブックス","brand:en":"Melonbooks","brand:ja":"メロンブックス","brand:wikidata":"Q10851653","brand:wikipedia":"ja:メロンブックス",name:"メロンブックス","name:en":"Melonbooks","name:ja":"メロンブックス",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/リブロ":{name:"リブロ",icon:"fas-book",imageURL:"https://graph.facebook.com/libroryubo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6542768",shop:"books"},addTags:{brand:"リブロ","brand:en":"LIBRO","brand:ja":"リブロ","brand:wikidata":"Q6542768","brand:wikipedia":"ja:リブロ",name:"リブロ","name:en":"Libro","name:ja":"リブロ",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/三省堂書店":{name:"三省堂書店",icon:"fas-book",imageURL:"https://graph.facebook.com/books.sanseido/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10866539",shop:"books"},addTags:{brand:"三省堂書店","brand:en":"Books Sanseido","brand:ja":"三省堂書店","brand:wikidata":"Q10866539","brand:wikipedia":"ja:三省堂書店",name:"三省堂書店","name:en":"Books Sanseido","name:ja":"三省堂書店",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/文教堂":{name:"文教堂",icon:"fas-book",imageURL:"https://pbs.twimg.com/profile_images/1151659177552404481/CvFdvBDu_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11499974",shop:"books"},addTags:{brand:"文教堂","brand:en":"Bunkyodo","brand:ja":"文教堂","brand:wikidata":"Q11499974","brand:wikipedia":"ja:文教堂",name:"文教堂","name:en":"Bunkyodo","name:ja":"文教堂",shop:"books"},countryCodes:["jp"],terms:["文教堂書店"],matchScore:2,suggestion:true},"shop/books/新华书店":{name:"新华书店",icon:"fas-book",geometry:["point","area"],tags:{"brand:wikidata":"Q6124193",shop:"books"},addTags:{brand:"新华书店","brand:en":"Xinhua Bookstore","brand:wikidata":"Q6124193","brand:wikipedia":"en:Xinhua Bookstore","brand:zh":"新华书店",name:"新华书店","name:en":"Xinhua Bookstore","name:zh":"新华书店",shop:"books"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"shop/books/有隣堂":{name:"有隣堂",icon:"fas-book",imageURL:"https://graph.facebook.com/136524066475474/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8061680",shop:"books"},addTags:{brand:"有隣堂","brand:en":"Yurindo","brand:ja":"有隣堂","brand:wikidata":"Q8061680","brand:wikipedia":"ja:有隣堂",name:"有隣堂","name:en":"Yurindo","name:ja":"有隣堂",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/未来屋書店":{name:"未来屋書店",icon:"fas-book",imageURL:"https://graph.facebook.com/miraiyashoten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11519563",shop:"books"},addTags:{brand:"未来屋書店","brand:en":"Miraiya Shoten","brand:ja":"未来屋書店","brand:wikidata":"Q11519563","brand:wikipedia":"ja:未来屋書店",name:"未来屋書店","name:en":"Miraiya Shoten","name:ja":"未来屋書店",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/butcher/Coqivoire":{name:"Coqivoire",icon:"temaki-cleaver",imageURL:"https://graph.facebook.com/COQIVOIRE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60183284",shop:"butcher"},addTags:{brand:"Coqivoire","brand:wikidata":"Q60183284",butcher:"poultry",name:"Coqivoire",shop:"butcher"},countryCodes:["ci"],terms:[],matchScore:2,suggestion:true},"shop/butcher/Foani":{name:"Foani",icon:"temaki-cleaver",imageURL:"https://graph.facebook.com/foaniservices/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60183335",shop:"butcher"},addTags:{brand:"Foani","brand:wikidata":"Q60183335",butcher:"poultry",name:"Foani",shop:"butcher"},countryCodes:["ci"],terms:[],matchScore:2,suggestion:true},"shop/butcher/M&M Food Market":{name:"M&M Food Market",icon:"temaki-cleaver",imageURL:"https://graph.facebook.com/mandmfoodmarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6711827",shop:"butcher"},addTags:{brand:"M&M Food Market","brand:wikidata":"Q6711827","brand:wikipedia":"en:M&M Food Market",name:"M&M Food Market",shop:"butcher"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/butcher/Vinzenzmurr":{name:"Vinzenzmurr",icon:"temaki-cleaver",imageURL:"https://graph.facebook.com/vinzenzmurrtraditionsmetzgerei/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2527361",shop:"butcher"},addTags:{brand:"Vinzenzmurr","brand:wikidata":"Q2527361","brand:wikipedia":"de:Vinzenzmurr",name:"Vinzenzmurr",shop:"butcher"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/butcher/Великолукский мясокомбинат":{name:"Великолукский мясокомбинат",icon:"temaki-cleaver",imageURL:"https://graph.facebook.com/vlmkspb/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18401767",shop:"butcher"},addTags:{brand:"Великолукский мясокомбинат","brand:wikidata":"Q18401767","brand:wikipedia":"ru:Великолукский мясокомбинат",name:"Великолукский мясокомбинат",shop:"butcher"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/butcher/Родинна ковбаска":{name:"Родинна ковбаска",icon:"temaki-cleaver",imageURL:"https://graph.facebook.com/rodunnakovbaska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30969660",shop:"butcher"},addTags:{brand:"Родинна ковбаска","brand:en":"Rodynna-kovbaska","brand:wikidata":"Q30969660","brand:wikipedia":"uk:ТзОВ «Барком»",name:"Родинна ковбаска","name:en":"Rodynna-kovbaska",shop:"butcher"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/butcher/肉のハナマサ":{name:"肉のハナマサ",icon:"temaki-cleaver",imageURL:"https://graph.facebook.com/hanamasaresto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11326564",shop:"butcher"},addTags:{brand:"ハナマサ","brand:en":"Hanamasa","brand:ja":"ハナマサ","brand:wikidata":"Q11326564","brand:wikipedia":"ja:ハナマサ",butcher:"beef",name:"肉のハナマサ","name:en":"Hanamasa Meat","name:ja":"肉のハナマサ",shop:"butcher"},countryCodes:["jp"],terms:["ハナマサ"],matchScore:2,suggestion:true},"shop/camera/Jessops":{name:"Jessops",icon:"fas-camera-retro",imageURL:"https://graph.facebook.com/jessops/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3191701",shop:"camera"},addTags:{brand:"Jessops","brand:wikidata":"Q3191701","brand:wikipedia":"en:Jessops",name:"Jessops",shop:"camera"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/candles/Yankee Candle":{name:"Yankee Candle",icon:"fas-burn",imageURL:"https://graph.facebook.com/Yankeecandle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8048733",shop:"candles"},addTags:{brand:"Yankee Candle","brand:wikidata":"Q8048733","brand:wikipedia":"en:Yankee Candle",name:"Yankee Candle",shop:"candles"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Advance Auto Parts":{name:"Advance Auto Parts",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/advanceautoparts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4686051",shop:"car_parts"},addTags:{brand:"Advance Auto Parts","brand:wikidata":"Q4686051","brand:wikipedia":"en:Advance Auto Parts",name:"Advance Auto Parts",shop:"car_parts"},countryCodes:["ca","us","vi"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Auto Plus":{name:"Auto Plus",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/AutoPlusUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65121114",shop:"car_parts"},addTags:{brand:"Auto Plus","brand:wikidata":"Q65121114",name:"Auto Plus",official_name:"Auto Plus Auto Parts",shop:"car_parts"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/AutoZone":{name:"AutoZone",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/autozone/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4826087",shop:"car_parts"},addTags:{brand:"AutoZone","brand:wikidata":"Q4826087","brand:wikipedia":"en:AutoZone",name:"AutoZone",shop:"car_parts"},countryCodes:["br","mx","us"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Automat":{name:"Automat",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/automatnl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q70623238",shop:"car_parts"},addTags:{brand:"Automat","brand:wikidata":"Q70623238",name:"Automat",shop:"car_parts"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Carquest":{name:"Carquest",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/Carquestautoparts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5045948",shop:"car_parts"},addTags:{brand:"Carquest","brand:wikidata":"Q5045948","brand:wikipedia":"en:Carquest",name:"Carquest",official_name:"Carquest Auto Parts",shop:"car_parts"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Euro Car Parts":{name:"Euro Car Parts",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/EuroCarPartsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23782692",shop:"car_parts"},addTags:{brand:"Euro Car Parts","brand:wikidata":"Q23782692","brand:wikipedia":"en:Euro Car Parts",name:"Euro Car Parts",shop:"car_parts"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/GSF Car Parts":{name:"GSF Car Parts",icon:"fas-car-battery",imageURL:"https://pbs.twimg.com/profile_images/945686511017701376/_DP1VoIg_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q80963064",shop:"car_parts"},addTags:{brand:"GSF Car Parts","brand:wikidata":"Q80963064",name:"GSF Car Parts",shop:"car_parts"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Halfords":{name:"Halfords",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/HalfordsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3398786",shop:"car_parts"},addTags:{brand:"Halfords","brand:wikidata":"Q3398786","brand:wikipedia":"en:Halfords",name:"Halfords","service:bicycle:retail":"yes",shop:"car_parts"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/KOI Auto Parts":{name:"KOI Auto Parts",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/KOIAutoParts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6334934",shop:"car_parts"},addTags:{brand:"KOI Auto Parts","brand:wikidata":"Q6334934","brand:wikipedia":"en:KOI Auto Parts",name:"KOI Auto Parts",shop:"car_parts",short_name:"KOI"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/NAPA Auto Parts":{name:"NAPA Auto Parts",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/NAPAAUTOPARTS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6970842",shop:"car_parts"},addTags:{brand:"NAPA Auto Parts","brand:wikidata":"Q6970842","brand:wikipedia":"en:National Automotive Parts Association",name:"NAPA Auto Parts",shop:"car_parts"},countryCodes:["ca","mx","us"],terms:["napa"],matchScore:2,suggestion:true},"shop/car_parts/O'Reilly Auto Parts":{name:"O'Reilly Auto Parts",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/oreillyautoparts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7071951",shop:"car_parts"},addTags:{brand:"O'Reilly Auto Parts","brand:wikidata":"Q7071951","brand:wikipedia":"en:O'Reilly Auto Parts",name:"O'Reilly Auto Parts",shop:"car_parts"},countryCodes:["us"],terms:["o'reilly"],matchScore:2,suggestion:true},"shop/car_parts/Repco":{name:"Repco",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/RepcoAusCareers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q173425",shop:"car_parts"},addTags:{brand:"Repco","brand:wikidata":"Q173425","brand:wikipedia":"en:Repco",name:"Repco",shop:"car_parts"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Supercheap Auto":{name:"Supercheap Auto",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/scauto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7643119",shop:"car_parts"},addTags:{brand:"Supercheap Auto","brand:wikidata":"Q7643119","brand:wikipedia":"en:Supercheap Auto",name:"Supercheap Auto",shop:"car_parts"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/The Parts Alliance":{name:"The Parts Alliance",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/thepartsalliance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80964997",shop:"car_parts"},addTags:{brand:"The Parts Alliance","brand:wikidata":"Q80964997",name:"The Parts Alliance",shop:"car_parts"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/イエローハット":{name:"イエローハット",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/YellowHatUAE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11285915",shop:"car_parts"},addTags:{brand:"イエローハット","brand:en":"Yellow Hat","brand:ja":"イエローハット","brand:wikidata":"Q11285915","brand:wikipedia":"ja:イエローハット",name:"イエローハット","name:en":"Yellow Hat","name:ja":"イエローハット",shop:"car_parts"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/オートバックス":{name:"オートバックス",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/autobacs.seven/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7886426",shop:"car_parts"},addTags:{brand:"オートバックス","brand:en":"Autobacs","brand:ja":"オートバックス","brand:wikidata":"Q7886426","brand:wikipedia":"ja:オートバックスセブン",name:"オートバックス","name:en":"Autobacs","name:ja":"オートバックス",shop:"car_parts"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/ジェームス":{name:"ジェームス",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/1589262564705310/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11309404",shop:"car_parts"},addTags:{brand:"ジェームス","brand:en":"JMS","brand:ja":"ジェームス","brand:wikidata":"Q11309404","brand:wikipedia":"ja:ジェームス",name:"ジェームス","name:en":"JMS","name:ja":"ジェームス","official_name:en":"Joyful Motorist Shop",shop:"car_parts"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/タイヤ館":{name:"タイヤ館",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/1627235540828842/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11315808",shop:"car_parts"},addTags:{brand:"タイヤ館","brand:en":"Taiyakan","brand:ja":"タイヤ館","brand:wikidata":"Q11315808","brand:wikipedia":"ja:タイヤ館",name:"タイヤ館","name:en":"Taiyakan","name:ja":"タイヤ館",shop:"car_parts"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/A.T.U":{name:"A.T.U",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/ATU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q784721",shop:"car_repair"},addTags:{brand:"A.T.U","brand:wikidata":"Q784721","brand:wikipedia":"de:Auto-Teile-Unger",name:"A.T.U",shop:"car_repair"},countryCodes:["at","de"],terms:["auto-teile-unger"],matchScore:2,suggestion:true},"shop/car_repair/AAMCO":{name:"AAMCO",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/AAMCO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4649902",shop:"car_repair"},addTags:{brand:"AAMCO","brand:wikidata":"Q4649902","brand:wikipedia":"en:AAMCO Transmissions",name:"AAMCO","service:vehicle:transmission":"yes",shop:"car_repair"},countryCodes:["ca","us"],terms:["aamco transmissions","aamco transmissions and total car care"],matchScore:2,suggestion:true},"shop/car_repair/ATS Euromaster":{name:"ATS Euromaster",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/ATSEUROMASTER/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4654920",shop:"car_repair"},addTags:{brand:"ATS Euromaster","brand:wikidata":"Q4654920","brand:wikipedia":"en:ATS Euromaster",name:"ATS Euromaster",shop:"car_repair"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Avatacar":{name:"Avatacar",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Avatacar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65156251",shop:"car_repair"},addTags:{brand:"Avatacar","brand:wikidata":"Q65156251","brand:wikipedia":"fr:Avatacar",name:"Avatacar",shop:"car_repair"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/BestDrive":{name:"BestDrive",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/BestDriveFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63057183",shop:"car_repair"},addTags:{brand:"BestDrive","brand:wikidata":"Q63057183",name:"BestDrive",shop:"car_repair"},countryCodes:["cz","fr","sk"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Bosch Car Service":{name:"Bosch Car Service",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/BoschGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q234021",shop:"car_repair"},addTags:{brand:"Bosch Car Service","brand:wikidata":"Q234021","brand:wikipedia":"en:Robert Bosch GmbH",name:"Bosch Car Service",shop:"car_repair"},terms:["bosch service"],matchScore:2,suggestion:true},"shop/car_repair/Brakes Plus":{name:"Brakes Plus",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/brakesplusllc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075246",shop:"car_repair"},addTags:{brand:"Brakes Plus","brand:wikidata":"Q62075246",name:"Brakes Plus",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Car-X":{name:"Car-X",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/CarxAuto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63859189",shop:"car_repair"},addTags:{brand:"Car-X","brand:wikidata":"Q63859189",name:"Car-X",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Carglass":{name:"Carglass",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/CarglassSweden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1035997",shop:"car_repair"},addTags:{brand:"Carglass","brand:wikidata":"Q1035997","brand:wikipedia":"de:Carglass",name:"Carglass",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Carstar":{name:"Carstar",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/CARSTAR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64187891",shop:"car_repair"},addTags:{brand:"Carstar","brand:wikidata":"Q64187891",name:"Carstar","service:vehicle:body_repair":"yes",shop:"car_repair"},countryCodes:["ca","us"],terms:["carstar auto body repair experts"],matchScore:2,suggestion:true},"shop/car_repair/Citroën":{name:"Citroën",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Citroen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6746",shop:"car_repair"},addTags:{brand:"Citroën","brand:wikidata":"Q6746","brand:wikipedia":"fr:Citroën",name:"Citroën",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Euromaster":{name:"Euromaster",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/ATSEUROMASTER/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3060668",shop:"car_repair"},addTags:{brand:"Euromaster","brand:wikidata":"Q3060668","brand:wikipedia":"de:Euromaster",name:"Euromaster",shop:"car_repair"},countryCodes:["ch","de","es","fi","fr","nl","pt"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/F1 Autocentre":{name:"F1 Autocentre",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/FormulaOneAutocentres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q79239635",shop:"car_repair"},addTags:{brand:"F1 Autocentre","brand:wikidata":"Q79239635",name:"F1 Autocentre",shop:"car_repair"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Feu Vert":{name:"Feu Vert",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/FeuVert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3070922",shop:"car_repair"},addTags:{brand:"Feu Vert","brand:wikidata":"Q3070922","brand:wikipedia":"fr:Feu vert (entreprise)",name:"Feu Vert",shop:"car_repair"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Firestone":{name:"Firestone",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/FirestoneTires/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q420837",shop:"car_repair"},addTags:{brand:"Firestone","brand:wikidata":"Q420837","brand:wikipedia":"en:Firestone Tire and Rubber Company",name:"Firestone",official_name:"Firestone Complete Auto Care",shop:"car_repair"},countryCodes:["ca","cl","us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/First Stop":{name:"First Stop",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/380279892308003/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3072965",shop:"car_repair"},addTags:{brand:"First Stop","brand:wikidata":"Q3072965","brand:wikipedia":"fr:First Stop",name:"First Stop",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Ford":{name:"Ford",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/ford/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q44294",shop:"car_repair"},addTags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Goodyear":{name:"Goodyear",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/GoodyearNorthAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q620875",shop:"car_repair"},addTags:{brand:"Goodyear","brand:wikidata":"Q620875","brand:wikipedia":"en:Goodyear Tire and Rubber Company",name:"Goodyear",shop:"car_repair"},countryCodes:["au","ca","cl","pe","us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Grease Monkey":{name:"Grease Monkey",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/greasemonkeyintl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5598563",shop:"car_repair"},addTags:{brand:"Grease Monkey","brand:wikidata":"Q5598563","brand:wikipedia":"en:Grease Monkey (business)",name:"Grease Monkey",shop:"car_repair"},countryCodes:["cn","us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Halfords Autocentre":{name:"Halfords Autocentre",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/HalfordsAutocentres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5641894",shop:"car_repair"},addTags:{brand:"Halfords Autocentre","brand:wikidata":"Q5641894","brand:wikipedia":"en:Halfords Autocentre",name:"Halfords Autocentre",shop:"car_repair"},countryCodes:["gb"],terms:["halfords"],matchScore:2,suggestion:true},"shop/car_repair/Jiffy Lube":{name:"Jiffy Lube",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/jiffylube/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6192247",shop:"car_repair"},addTags:{brand:"Jiffy Lube","brand:wikidata":"Q6192247","brand:wikipedia":"en:Jiffy Lube",name:"Jiffy Lube",shop:"car_repair"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Kwik Fit":{name:"Kwik Fit",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/KwikFit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q958053",shop:"car_repair"},addTags:{brand:"Kwik Fit","brand:wikidata":"Q958053","brand:wikipedia":"en:Kwik Fit",name:"Kwik Fit",shop:"car_repair"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/MAACO":{name:"MAACO",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/MAACOUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6714015",shop:"car_repair"},addTags:{brand:"MAACO","brand:wikidata":"Q6714015","brand:wikipedia":"en:MAACO",name:"MAACO","service:vehicle:body_repair":"yes","service:vehicle:painting":"yes",shop:"car_repair"},countryCodes:["ca","us"],terms:["maaco collision repair & auto painting"],matchScore:2,suggestion:true},"shop/car_repair/Meineke":{name:"Meineke",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/meinekecarcareusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6810159",shop:"car_repair"},addTags:{brand:"Meineke","brand:wikidata":"Q6810159","brand:wikipedia":"en:Meineke Car Care Centers",name:"Meineke",official_name:"Meineke Car Care Center",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Mekonomen":{name:"Mekonomen",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/MekonomenSverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10580079",shop:"car_repair"},addTags:{brand:"Mekonomen","brand:wikidata":"Q10580079","brand:wikipedia":"sv:Mekonomen",name:"Mekonomen",shop:"car_repair"},countryCodes:["dk","no","se"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Midas":{name:"Midas",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Midas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3312613",shop:"car_repair"},addTags:{brand:"Midas","brand:wikidata":"Q3312613","brand:wikipedia":"en:Midas (automotive service)",name:"Midas",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Monro Muffler Brake":{name:"Monro Muffler Brake",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/MonroAutoServiceTire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6902090",shop:"car_repair"},addTags:{brand:"Monro Muffler Brake","brand:wikidata":"Q6902090","brand:wikipedia":"en:Monro Muffler Brake",name:"Monro Muffler Brake",shop:"car_repair"},countryCodes:["us"],terms:["monro","monro muffler"],matchScore:2,suggestion:true},"shop/car_repair/Mr. Lube":{name:"Mr. Lube",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/MrLubeCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17104067",shop:"car_repair"},addTags:{brand:"Mr. Lube","brand:wikidata":"Q17104067","brand:wikipedia":"en:Mr. Lube",name:"Mr. Lube",shop:"car_repair"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/National Tire and Battery":{name:"National Tire and Battery",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/nationaltireandbattery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6978944",shop:"car_repair"},addTags:{brand:"National Tire and Battery","brand:wikidata":"Q6978944","brand:wikipedia":"en:National Tire and Battery",name:"National Tire and Battery",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Norauto":{name:"Norauto",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/norautoitalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3317698",shop:"car_repair"},addTags:{brand:"Norauto","brand:wikidata":"Q3317698","brand:wikipedia":"en:Mobivia Groupe",name:"Norauto",shop:"car_repair"},countryCodes:["ar","es","fr","hu","it","pl","pt","ro"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Pep Boys":{name:"Pep Boys",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/pepboysauto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3375007",shop:"car_repair"},addTags:{brand:"Pep Boys","brand:wikidata":"Q3375007","brand:wikipedia":"en:Pep Boys",name:"Pep Boys",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Peugeot":{name:"Peugeot",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Peugeot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6742",shop:"car_repair"},addTags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Point S":{name:"Point S",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/points.france/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3393358",shop:"car_repair"},addTags:{brand:"Point S","brand:wikidata":"Q3393358","brand:wikipedia":"fr:Point S",name:"Point S",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Renault":{name:"Renault",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Renault/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6686",shop:"car_repair"},addTags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"fr:Renault",name:"Renault",shop:"car_repair"},terms:["garage renault"],matchScore:2,suggestion:true},"shop/car_repair/Roady":{name:"Roady",icon:"maki-car-repair",geometry:["point","area"],tags:{"brand:wikidata":"Q3434112",shop:"car_repair"},addTags:{brand:"Roady","brand:wikidata":"Q3434112","brand:wikipedia":"en:Roady (Mousquetaires)",name:"Roady",shop:"car_repair"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Safelite AutoGlass":{name:"Safelite AutoGlass",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/safelite/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28797369",shop:"car_repair"},addTags:{brand:"Safelite AutoGlass","brand:wikidata":"Q28797369","brand:wikipedia":"en:Safelite",name:"Safelite AutoGlass","service:vehicle:glass":"yes",shop:"car_repair"},countryCodes:["us"],terms:["safelight auto glass"],matchScore:2,suggestion:true},"shop/car_repair/Sears Auto Center":{name:"Sears Auto Center",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/sears/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6499202",shop:"car_repair"},addTags:{brand:"Sears Auto Center","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears Auto Center",shop:"car_repair"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Speedy":{name:"Speedy",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/vadoncchezSpeedy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3492969",shop:"car_repair"},addTags:{brand:"Speedy","brand:wikidata":"Q3492969","brand:wikipedia":"fr:Speedy (entreprise)",name:"Speedy",shop:"car_repair"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Speedy Auto Service":{name:"Speedy Auto Service",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/SpeedyAutoServiceCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22318193",shop:"car_repair"},addTags:{brand:"Speedy Auto Service","brand:wikidata":"Q22318193",name:"Speedy Auto Service",shop:"car_repair"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Toyota":{name:"Toyota",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/toyota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q53268",shop:"car_repair"},addTags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Tuffy":{name:"Tuffy",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Tuffy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17125314",shop:"car_repair"},addTags:{brand:"Tuffy","brand:wikidata":"Q17125314","brand:wikipedia":"en:Tuffy Auto Service Centers",name:"Tuffy",shop:"car_repair"},countryCodes:["us"],terms:["tuffy auto service","tuffy auto service center","tuffy auto service centers","tuffy service","tuffy service center","tuffy service centers","tuffy tire and auto service","tuffy tire and auto service center","tuffy tire and auto service centers"],matchScore:2,suggestion:true},"shop/car_repair/Valvoline":{name:"Valvoline",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/viocofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7912852",shop:"car_repair"},addTags:{brand:"Valvoline","brand:wikidata":"Q7912852","brand:wikipedia":"en:Valvoline Instant Oil Change",name:"Valvoline",official_name:"Valvoline Instant Oil Change",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Valvoline Express Care":{name:"Valvoline Express Care",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/ExpressCareValvoline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q74273584",shop:"car_repair"},addTags:{alt_name:"Express Care",brand:"Valvoline Express Care","brand:wikidata":"Q74273584",name:"Valvoline Express Care",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Vulco":{name:"Vulco",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/vulcofrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80184403",shop:"car_repair"},addTags:{brand:"Vulco","brand:wikidata":"Q80184403",name:"Vulco",shop:"car_repair"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/pitstop":{name:"pitstop",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/pitstop.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1310014",shop:"car_repair"},addTags:{brand:"pitstop","brand:wikidata":"Q1310014","brand:wikipedia":"de:Pitstop (Werkstattkette)",name:"pitstop",shop:"car_repair"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/ÖAMTC":{name:"ÖAMTC",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/OEAMTC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q306057",shop:"car_repair"},addTags:{brand:"ÖAMTC","brand:wikidata":"Q306057","brand:wikipedia":"de:Österreichischer Automobil-, Motorrad- und Touring Club",name:"ÖAMTC",shop:"car_repair"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/カーコンビニ倶楽部":{name:"カーコンビニ倶楽部",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/carcon.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11295590",shop:"car_repair"},addTags:{brand:"カーコンビニ倶楽部","brand:en":"Car Convenience Club","brand:ja":"カーコンビニ倶楽部","brand:wikidata":"Q11295590","brand:wikipedia":"ja:カーコンビニ倶楽部",name:"カーコンビニ倶楽部","name:en":"Car Convenience Club","name:ja":"カーコンビニ倶楽部",shop:"car_repair"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car/Alfa Romeo":{name:"Alfa Romeo",icon:"maki-car",imageURL:"https://graph.facebook.com/Alfa.Romeo.cars/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26921",shop:"car"},addTags:{brand:"Alfa Romeo","brand:wikidata":"Q26921","brand:wikipedia":"en:Alfa Romeo",name:"Alfa Romeo",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Aston Martin":{name:"Aston Martin",icon:"maki-car",imageURL:"https://graph.facebook.com/astonmartin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27074",shop:"car"},addTags:{brand:"Aston Martin","brand:wikidata":"Q27074","brand:wikipedia":"en:Aston Martin",name:"Aston Martin",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Audi":{name:"Audi",icon:"maki-car",imageURL:"https://graph.facebook.com/audi.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23317",shop:"car"},addTags:{brand:"Audi","brand:wikidata":"Q23317","brand:wikipedia":"en:Audi",name:"Audi",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/BMW":{name:"BMW",icon:"maki-car",imageURL:"https://graph.facebook.com/BMWGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26678",shop:"car"},addTags:{brand:"BMW","brand:wikidata":"Q26678","brand:wikipedia":"en:BMW",name:"BMW",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Bentley":{name:"Bentley",icon:"maki-car",imageURL:"https://graph.facebook.com/BentleyMotors/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27224",shop:"car"},addTags:{brand:"Bentley","brand:wikidata":"Q27224","brand:wikipedia":"en:Bentley",name:"Bentley",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Buick":{name:"Buick",icon:"maki-car",imageURL:"https://graph.facebook.com/Buick/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27415",shop:"car"},addTags:{brand:"Buick","brand:wikidata":"Q27415","brand:wikipedia":"en:Buick",name:"Buick",shop:"car"},countryCodes:["ca","cn","mx","us"],terms:[],matchScore:2,suggestion:true},"shop/car/Cadillac":{name:"Cadillac",icon:"maki-car",imageURL:"https://graph.facebook.com/cadillac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27436",shop:"car"},addTags:{brand:"Cadillac","brand:wikidata":"Q27436","brand:wikipedia":"en:Cadillac",name:"Cadillac",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/CarMax":{name:"CarMax",icon:"maki-car",imageURL:"https://graph.facebook.com/CarMax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5037190",shop:"car"},addTags:{brand:"CarMax","brand:wikidata":"Q5037190","brand:wikipedia":"en:CarMax",name:"CarMax",second_hand:"only",shop:"car"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car/Chevrolet":{name:"Chevrolet",icon:"maki-car",imageURL:"https://graph.facebook.com/chevrolet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q29570",shop:"car"},addTags:{brand:"Chevrolet","brand:wikidata":"Q29570","brand:wikipedia":"en:Chevrolet",name:"Chevrolet",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Chrysler":{name:"Chrysler",icon:"maki-car",imageURL:"https://graph.facebook.com/chrysler/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q181114",shop:"car"},addTags:{brand:"Chrysler","brand:wikidata":"Q181114","brand:wikipedia":"en:Chrysler",name:"Chrysler",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Citroën":{name:"Citroën",icon:"maki-car",imageURL:"https://graph.facebook.com/Citroen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6746",shop:"car"},addTags:{brand:"Citroën","brand:wikidata":"Q6746","brand:wikipedia":"fr:Citroën",name:"Citroën",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Dacia":{name:"Dacia",icon:"maki-car",imageURL:"https://graph.facebook.com/Dacia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27460",shop:"car"},addTags:{brand:"Dacia","brand:wikidata":"Q27460","brand:wikipedia":"en:Automobile Dacia",name:"Dacia",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Dodge":{name:"Dodge",icon:"maki-car",imageURL:"https://graph.facebook.com/dodge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27564",shop:"car"},addTags:{brand:"Dodge","brand:wikidata":"Q27564","brand:wikipedia":"en:Dodge",name:"Dodge",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Fiat":{name:"Fiat",icon:"maki-car",imageURL:"https://graph.facebook.com/Fiat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27597",shop:"car"},addTags:{brand:"Fiat","brand:wikidata":"Q27597","brand:wikipedia":"en:Fiat Automobiles",name:"Fiat",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Ford":{name:"Ford",icon:"maki-car",imageURL:"https://graph.facebook.com/ford/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q44294",shop:"car"},addTags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Freightliner":{name:"Freightliner",icon:"maki-car",imageURL:"https://graph.facebook.com/freightliner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1420724",shop:"car"},addTags:{brand:"Freightliner","brand:wikidata":"Q1420724","brand:wikipedia":"en:Freightliner Trucks",name:"Freightliner",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/GMC":{name:"GMC",icon:"maki-car",imageURL:"https://graph.facebook.com/gmc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28993",shop:"car"},addTags:{brand:"GMC","brand:wikidata":"Q28993","brand:wikipedia":"en:GMC (automobile)",name:"GMC",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Holden":{name:"Holden",icon:"maki-car",imageURL:"https://graph.facebook.com/holdenaustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q29281",shop:"car"},addTags:{brand:"Holden","brand:wikidata":"Q29281","brand:wikipedia":"en:Holden",name:"Holden",shop:"car"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/car/Honda":{name:"Honda",icon:"maki-car",imageURL:"https://graph.facebook.com/HondaJP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9584",shop:"car"},addTags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"car"},terms:["honda cars"],matchScore:2,suggestion:true},"shop/car/Hyundai":{name:"Hyundai",icon:"maki-car",imageURL:"https://graph.facebook.com/Hyundai/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55931",shop:"car"},addTags:{brand:"Hyundai","brand:wikidata":"Q55931","brand:wikipedia":"en:Hyundai Motor Company",name:"Hyundai",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Isuzu":{name:"Isuzu",icon:"maki-car",imageURL:"https://graph.facebook.com/isuzumex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q29803",shop:"car"},addTags:{brand:"Isuzu","brand:wikidata":"Q29803","brand:wikipedia":"en:Isuzu Motors",name:"Isuzu",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Jaguar":{name:"Jaguar",icon:"maki-car",imageURL:"https://graph.facebook.com/JaguarUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26742231",shop:"car"},addTags:{brand:"Jaguar","brand:wikidata":"Q26742231",name:"Jaguar",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Jeep":{name:"Jeep",icon:"maki-car",imageURL:"https://graph.facebook.com/jeep/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30113",shop:"car"},addTags:{brand:"Jeep","brand:wikidata":"Q30113","brand:wikipedia":"en:Jeep",name:"Jeep",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Kia":{name:"Kia",icon:"maki-car",imageURL:"https://graph.facebook.com/Kiamotorsworldwide/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q35349",shop:"car"},addTags:{brand:"Kia","brand:wikidata":"Q35349","brand:wikipedia":"en:Kia Motors",name:"Kia",shop:"car"},terms:["kia motors"],matchScore:2,suggestion:true},"shop/car/Lada":{name:"Lada",icon:"maki-car",imageURL:"https://graph.facebook.com/LADA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q35676",shop:"car"},addTags:{brand:"Lada","brand:en":"Lada","brand:ru":"Лада","brand:wikidata":"Q35676","brand:wikipedia":"en:Lada",name:"Lada","name:en":"Lada","name:ru":"Лада",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Land Rover":{name:"Land Rover",icon:"maki-car",imageURL:"https://graph.facebook.com/landroverusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26777551",shop:"car"},addTags:{brand:"Land Rover","brand:wikidata":"Q26777551",name:"Land Rover",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Lexus":{name:"Lexus",icon:"maki-car",imageURL:"https://graph.facebook.com/lexus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q35919",shop:"car"},addTags:{brand:"Lexus","brand:wikidata":"Q35919","brand:wikipedia":"en:Lexus",name:"Lexus",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Lincoln":{name:"Lincoln",icon:"maki-car",imageURL:"https://graph.facebook.com/Lincoln/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q216796",shop:"car"},addTags:{brand:"Lincoln","brand:wikidata":"Q216796","brand:wikipedia":"en:Lincoln Motor Company",name:"Lincoln",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Mazda":{name:"Mazda",icon:"maki-car",imageURL:"https://graph.facebook.com/Mazda.Japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q35996",shop:"car"},addTags:{brand:"Mazda","brand:wikidata":"Q35996","brand:wikipedia":"en:Mazda",name:"Mazda",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Mercedes-Benz":{name:"Mercedes-Benz",icon:"maki-car",imageURL:"https://graph.facebook.com/MercedesBenz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q36008",shop:"car"},addTags:{brand:"Mercedes-Benz","brand:wikidata":"Q36008","brand:wikipedia":"en:Mercedes-Benz",name:"Mercedes-Benz",shop:"car"},terms:["mercedes"],matchScore:2,suggestion:true},"shop/car/Mitsubishi":{name:"Mitsubishi",icon:"maki-car",imageURL:"https://graph.facebook.com/MitsubishiMotors.en/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q36033",shop:"car"},addTags:{brand:"Mitsubishi","brand:wikidata":"Q36033","brand:wikipedia":"en:Mitsubishi Motors",name:"Mitsubishi",shop:"car"},terms:["mitsubishi motors"],matchScore:2,suggestion:true},"shop/car/Netz":{name:"Netz",icon:"maki-car",imageURL:"https://graph.facebook.com/302854786851446/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11325416",shop:"car"},addTags:{brand:"Netz","brand:wikidata":"Q11325416","brand:wikipedia":"ja:ネッツ店",name:"Netz",shop:"car"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car/Nissan":{name:"Nissan",icon:"maki-car",imageURL:"https://graph.facebook.com/NissanJP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20165",shop:"car"},addTags:{brand:"Nissan","brand:wikidata":"Q20165","brand:wikipedia":"ja:日産自動車",name:"Nissan",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Opel":{name:"Opel",icon:"maki-car",imageURL:"https://graph.facebook.com/Opel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q40966",shop:"car"},addTags:{brand:"Opel","brand:wikidata":"Q40966","brand:wikipedia":"en:Opel",name:"Opel",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Peterbilt":{name:"Peterbilt",icon:"maki-car",imageURL:"https://graph.facebook.com/PeterbiltMotors/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q944640",shop:"car"},addTags:{brand:"Peterbilt","brand:wikidata":"Q944640","brand:wikipedia":"en:Peterbilt",name:"Peterbilt",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Peugeot":{name:"Peugeot",icon:"maki-car",imageURL:"https://graph.facebook.com/Peugeot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6742",shop:"car"},addTags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Porsche":{name:"Porsche",icon:"maki-car",imageURL:"https://graph.facebook.com/porsche/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q40993",shop:"car"},addTags:{brand:"Porsche","brand:wikidata":"Q40993","brand:wikipedia":"en:Porsche",name:"Porsche",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Proton":{name:"Proton",icon:"maki-car",imageURL:"https://graph.facebook.com/ProtonCarsOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q827306",shop:"car"},addTags:{brand:"Proton","brand:wikidata":"Q827306","brand:wikipedia":"en:PROTON Holdings",name:"Proton",shop:"car"},countryCodes:["cl","eg","id","my","sg","th"],terms:[],matchScore:2,suggestion:true},"shop/car/Ram":{name:"Ram",icon:"maki-car",imageURL:"https://graph.facebook.com/RamTrucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q165708",shop:"car"},addTags:{brand:"Ram","brand:wikidata":"Q165708","brand:wikipedia":"en:Ram Trucks",name:"Ram",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Renault":{name:"Renault",icon:"maki-car",imageURL:"https://graph.facebook.com/Renault/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6686",shop:"car"},addTags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"fr:Renault",name:"Renault",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Seat":{name:"Seat",icon:"maki-car",imageURL:"https://graph.facebook.com/SEAT.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q188217",shop:"car"},addTags:{brand:"Seat","brand:wikidata":"Q188217","brand:wikipedia":"en:SEAT",name:"Seat",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Subaru":{name:"Subaru",icon:"maki-car",imageURL:"https://graph.facebook.com/SUBARU.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q172741",shop:"car"},addTags:{brand:"Subaru","brand:wikidata":"Q172741","brand:wikipedia":"en:Subaru",name:"Subaru",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Suzuki":{name:"Suzuki",icon:"maki-car",imageURL:"https://graph.facebook.com/SuzukiGlobalOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q181642",shop:"car"},addTags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Tesla":{name:"Tesla",icon:"maki-car",imageURL:"https://pbs.twimg.com/profile_images/489192650474414080/4RxZxsud_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q478214",shop:"car"},addTags:{brand:"Tesla","brand:wikidata":"Q478214","brand:wikipedia":"en:Tesla, Inc.",name:"Tesla",shop:"car"},terms:["tesla motors"],matchScore:2,suggestion:true},"shop/car/Toyota":{name:"Toyota",icon:"maki-car",imageURL:"https://graph.facebook.com/toyota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q53268",shop:"car"},addTags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Volkswagen":{name:"Volkswagen",icon:"maki-car",imageURL:"https://graph.facebook.com/VW/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q246",shop:"car"},addTags:{brand:"Volkswagen","brand:wikidata":"Q246","brand:wikipedia":"en:Volkswagen",name:"Volkswagen",shop:"car"},terms:["vw"],matchScore:2,suggestion:true},"shop/car/Volvo":{name:"Volvo",icon:"maki-car",imageURL:"https://graph.facebook.com/volvocars/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q215293",shop:"car"},addTags:{brand:"Volvo","brand:wikidata":"Q215293","brand:wikipedia":"en:Volvo Cars",name:"Volvo",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Škoda":{name:"Škoda",icon:"maki-car",imageURL:"https://graph.facebook.com/skoda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q29637",shop:"car"},addTags:{brand:"Škoda","brand:wikidata":"Q29637","brand:wikipedia":"en:Škoda Auto",name:"Škoda",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Автомир":{name:"Автомир",icon:"maki-car",imageURL:"https://graph.facebook.com/avtomir.cars/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4056321",shop:"car"},addTags:{brand:"Автомир","brand:en":"Autoworld","brand:ru":"Автомир","brand:wikidata":"Q4056321","brand:wikipedia":"ru:Автомир (автодилер)",name:"Автомир","name:en":"Autoworld","name:ru":"Автомир",shop:"car"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/car/سایپا":{name:"سایپا",icon:"maki-car",imageURL:"https://graph.facebook.com/saipaco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q116234",shop:"car"},addTags:{brand:"سایپا","brand:en":"Saipa","brand:fa":"سایپا","brand:wikidata":"Q116234","brand:wikipedia":"en:Saipa",name:"سایپا","name:en":"Saipa","name:fa":"سایپا",shop:"car"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"shop/car/ガリバー":{name:"ガリバー",icon:"maki-car",imageURL:"https://graph.facebook.com/gulliver.nz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11296264",shop:"car"},addTags:{brand:"ガリバー","brand:en":"Gulliver","brand:ja":"ガリバー","brand:wikidata":"Q11296264","brand:wikipedia":"ja:IDOM",name:"ガリバー","name:en":"Gulliver","name:ja":"ガリバー",shop:"car"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car/ダイハツ":{name:"ダイハツ",icon:"maki-car",imageURL:"https://graph.facebook.com/DaihatsuKSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27511",shop:"car"},addTags:{brand:"ダイハツ","brand:en":"Daihatsu","brand:ja":"ダイハツ","brand:wikidata":"Q27511","brand:wikipedia":"ja:ダイハツ工業",name:"ダイハツ","name:en":"Daihatsu","name:ja":"ダイハツ",shop:"car"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car/トヨタ":{name:"トヨタ",icon:"maki-car",imageURL:"https://graph.facebook.com/toyota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q53268",shop:"car"},addTags:{brand:"トヨタ","brand:en":"Toyota","brand:ja":"トヨタ","brand:wikidata":"Q53268","brand:wikipedia":"ja:トヨタ自動車",name:"トヨタ","name:en":"Toyota","name:ja":"トヨタ",shop:"car"},countryCodes:["jp"],terms:["トヨタカローラ","トヨタ自動車"],matchScore:2,suggestion:true},"shop/car/ホンダ":{name:"ホンダ",icon:"maki-car",imageURL:"https://graph.facebook.com/HondaJP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9584",shop:"car"},addTags:{brand:"ホンダ","brand:en":"Honda","brand:ja":"ホンダ","brand:wikidata":"Q9584","brand:wikipedia":"ja:本田技研工業",name:"ホンダ","name:en":"Honda","name:ja":"ホンダ",shop:"car"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/carpet/Carpetright":{name:"Carpetright",icon:"fas-tape",imageURL:"https://graph.facebook.com/carpetright/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5045782",shop:"carpet"},addTags:{brand:"Carpetright","brand:wikidata":"Q5045782","brand:wikipedia":"en:Carpetright",name:"Carpetright",shop:"carpet"},countryCodes:["be","gb","ie","nl"],terms:[],matchScore:2,suggestion:true},"shop/carpet/Tapi Carpets":{name:"Tapi Carpets",icon:"fas-tape",imageURL:"https://graph.facebook.com/tapicarpetsandfloors/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q79223951",shop:"carpet"},addTags:{brand:"Tapi Carpets","brand:wikidata":"Q79223951",name:"Tapi Carpets",shop:"carpet"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/catalogue/Argos":{name:"Argos",icon:"maki-shop",imageURL:"https://graph.facebook.com/argos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4789707",shop:"catalogue"},addTags:{brand:"Argos","brand:wikidata":"Q4789707","brand:wikipedia":"en:Argos (retailer)",name:"Argos",shop:"catalogue"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/charity/Age UK":{name:"Age UK",icon:"maki-shop",imageURL:"https://graph.facebook.com/ageuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4691850",shop:"charity"},addTags:{brand:"Age UK","brand:wikidata":"Q4691850","brand:wikipedia":"en:Age UK",name:"Age UK",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/Barnardo's":{name:"Barnardo's",icon:"maki-shop",imageURL:"https://graph.facebook.com/barnardos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2884670",shop:"charity"},addTags:{brand:"Barnardo's","brand:wikidata":"Q2884670","brand:wikipedia":"en:Barnardo's",name:"Barnardo's",shop:"charity"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/charity/British Heart Foundation":{name:"British Heart Foundation",icon:"maki-shop",imageURL:"https://graph.facebook.com/bhf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4970039",shop:"charity"},addTags:{brand:"British Heart Foundation","brand:wikidata":"Q4970039","brand:wikipedia":"en:British Heart Foundation",name:"British Heart Foundation",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/British Red Cross":{name:"British Red Cross",icon:"maki-shop",imageURL:"https://graph.facebook.com/britishredcross/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4970966",shop:"charity"},addTags:{brand:"British Red Cross","brand:wikidata":"Q4970966","brand:wikipedia":"en:British Red Cross",name:"British Red Cross",shop:"charity"},countryCodes:["gb","gg","im"],terms:[],matchScore:2,suggestion:true},"shop/charity/Cancer Research UK":{name:"Cancer Research UK",icon:"maki-shop",imageURL:"https://graph.facebook.com/cancerresearchuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q326079",shop:"charity"},addTags:{brand:"Cancer Research UK","brand:wikidata":"Q326079","brand:wikipedia":"en:Cancer Research UK",name:"Cancer Research UK",shop:"charity"},countryCodes:["gb","gg"],terms:[],matchScore:2,suggestion:true},"shop/charity/Goodwill":{name:"Goodwill",icon:"maki-shop",imageURL:"https://graph.facebook.com/GoodwillIntl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5583655",shop:"charity"},addTags:{brand:"Goodwill","brand:wikidata":"Q5583655","brand:wikipedia":"en:Goodwill Industries",name:"Goodwill",shop:"charity"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/charity/Humana":{name:"Humana",icon:"maki-shop",imageURL:"https://graph.facebook.com/HumanaHPP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1636581",shop:"charity"},addTags:{brand:"Humana","brand:wikidata":"Q1636581","brand:wikipedia":"de:Humana People to People",name:"Humana",shop:"charity"},terms:["humana people to people"],matchScore:2,suggestion:true},"shop/charity/Kirkens Korshær Genbrug":{name:"Kirkens Korshær Genbrug",icon:"maki-shop",imageURL:"https://graph.facebook.com/vierkirkenskorshaer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12321915",shop:"charity"},addTags:{brand:"Kirkens Korshær Genbrug","brand:wikidata":"Q12321915","brand:wikipedia":"da:Kirkens Korshær",name:"Kirkens Korshær Genbrug",shop:"charity"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/charity/Marie Curie":{name:"Marie Curie",icon:"maki-shop",imageURL:"https://graph.facebook.com/MarieCurieUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997351",shop:"charity"},addTags:{brand:"Marie Curie","brand:wikidata":"Q16997351","brand:wikipedia":"en:Marie Curie (charity)",name:"Marie Curie",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/Mind":{name:"Mind",icon:"maki-shop",imageURL:"https://graph.facebook.com/mindforbettermentalhealth/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3314763",shop:"charity"},addTags:{brand:"Mind","brand:wikidata":"Q3314763","brand:wikipedia":"en:Mind (charity)",name:"Mind",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/Myrorna":{name:"Myrorna",icon:"maki-shop",imageURL:"https://graph.facebook.com/Myrorna/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10592609",shop:"charity"},addTags:{brand:"Myrorna","brand:wikidata":"Q10592609","brand:wikipedia":"sv:Myrorna",name:"Myrorna",shop:"charity"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/charity/Oxfam":{name:"Oxfam",icon:"maki-shop",imageURL:"https://graph.facebook.com/oxfamGB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q267941",shop:"charity"},addTags:{brand:"Oxfam","brand:wikidata":"Q267941","brand:wikipedia":"en:Oxfam",name:"Oxfam",shop:"charity"},countryCodes:["be","de","gb","ie","im"],terms:[],matchScore:2,suggestion:true},"shop/charity/PDSA":{name:"PDSA",icon:"maki-shop",imageURL:"https://graph.facebook.com/pdsa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7165541",shop:"charity"},addTags:{brand:"PDSA","brand:wikidata":"Q7165541","brand:wikipedia":"en:People's Dispensary for Sick Animals",name:"PDSA",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/RSPCA":{name:"RSPCA",icon:"maki-shop",imageURL:"https://graph.facebook.com/RSPCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q584819",shop:"charity"},addTags:{brand:"RSPCA","brand:wikidata":"Q584819","brand:wikipedia":"en:Royal Society for the Prevention of Cruelty to Animals",name:"RSPCA",shop:"charity"},countryCodes:["au","gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/Saint Vincent de Paul Thrift Store":{name:"Saint Vincent de Paul Thrift Store",icon:"maki-shop",imageURL:"https://graph.facebook.com/186921794657204/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66581837",shop:"charity"},addTags:{brand:"Saint Vincent de Paul Thrift Store","brand:wikidata":"Q66581837",name:"Saint Vincent de Paul Thrift Store",shop:"charity",short_name:"SVdP"},countryCodes:["us"],terms:["saint vincent de paul","saint vincent de paul society","society of saint vincent de paul","society of st vincent de paul","st vincent de paul","st vincent de paul society","st vincent de paul thrift store","svdp thrift store","the society of saint vincent de paul","the society of st vincent de paul"],matchScore:2,suggestion:true},"shop/charity/Samaritans":{name:"Samaritans",icon:"maki-shop",imageURL:"https://graph.facebook.com/samaritanscharity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7408851",shop:"charity"},addTags:{brand:"Samaritans","brand:wikidata":"Q7408851","brand:wikipedia":"en:Samaritans (charity)",name:"Samaritans",shop:"charity"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/charity/Scope":{name:"Scope",icon:"maki-shop",imageURL:"https://graph.facebook.com/Scope/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7434435",shop:"charity"},addTags:{brand:"Scope","brand:wikidata":"Q7434435","brand:wikipedia":"en:Scope (charity)",name:"Scope",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/Sue Ryder":{name:"Sue Ryder",icon:"maki-shop",imageURL:"https://graph.facebook.com/SueRyderNational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7634271",shop:"charity"},addTags:{brand:"Sue Ryder","brand:wikidata":"Q7634271","brand:wikipedia":"en:Sue Ryder (charity)",name:"Sue Ryder",shop:"charity"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/charity/The Children's Society":{name:"The Children's Society",icon:"maki-shop",imageURL:"https://graph.facebook.com/childrenssociety/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7722484",shop:"charity"},addTags:{brand:"The Children's Society","brand:wikidata":"Q7722484","brand:wikipedia":"en:The Children's Society",name:"The Children's Society",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/The Salvation Army":{name:"The Salvation Army",icon:"maki-shop",imageURL:"https://graph.facebook.com/SalvationArmyUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q188307",shop:"charity"},addTags:{brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army",shop:"charity"},countryCodes:["au","ca","gb","us"],terms:["salvation army"],matchScore:2,suggestion:true},"shop/charity/YMCA":{name:"YMCA",icon:"maki-shop",imageURL:"https://graph.facebook.com/YMCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157169",shop:"charity"},addTags:{brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",name:"YMCA",shop:"charity"},terms:[],matchScore:2,suggestion:true},"shop/chemist/101 Drogerie":{name:"101 Drogerie",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/101drogerie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q67197464",shop:"chemist"},addTags:{brand:"101 Drogerie","brand:wikidata":"Q67197464",name:"101 Drogerie",shop:"chemist"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Acqua & Sapone":{name:"Acqua & Sapone",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/acquaesapone/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q51079044",shop:"chemist"},addTags:{brand:"Acqua & Sapone","brand:wikidata":"Q51079044","brand:wikipedia":"it:Acqua & Sapone (azienda)",name:"Acqua & Sapone",shop:"chemist"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Bipa":{name:"Bipa",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/BIPA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q864933",shop:"chemist"},addTags:{brand:"Bipa","brand:wikidata":"Q864933","brand:wikipedia":"de:Bipa",name:"Bipa",shop:"chemist"},countryCodes:["at","hr"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Boots":{name:"Boots",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/bootsuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6123139",shop:"chemist"},addTags:{brand:"Boots","brand:wikidata":"Q6123139",name:"Boots",shop:"chemist"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Budnikowsky":{name:"Budnikowsky",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/BUDNI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1001516",shop:"chemist"},addTags:{brand:"Budnikowsky","brand:wikidata":"Q1001516","brand:wikipedia":"de:Budnikowsky",name:"Budnikowsky",shop:"chemist"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/chemist/CVS Pharmacy":{name:"CVS Pharmacy",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CVS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2078880",shop:"chemist"},addTags:{brand:"CVS Pharmacy","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",name:"CVS Pharmacy",shop:"chemist",short_name:"CVS"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Drogeria Natura":{name:"Drogeria Natura",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/707518851785871360/aCEmonjR_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q9212032",shop:"chemist"},addTags:{brand:"Drogeria Natura","brand:wikidata":"Q9212032","brand:wikipedia":"pl:Drogerie Natura",name:"Drogeria Natura",shop:"chemist"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Etos":{name:"Etos",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FEtos%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2609459",shop:"chemist"},addTags:{brand:"Etos","brand:wikidata":"Q2609459","brand:wikipedia":"en:Etos",name:"Etos",shop:"chemist"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Kruidvat":{name:"Kruidvat",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKruidvat%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2226366",shop:"chemist"},addTags:{brand:"Kruidvat","brand:wikidata":"Q2226366","brand:wikipedia":"en:Kruidvat",name:"Kruidvat",shop:"chemist"},countryCodes:["be","fr","nl"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Longs Drugs (Hawaii)":{name:"Longs Drugs (Hawaii)",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLongs%20Drugs%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q16931196",shop:"chemist"},addTags:{brand:"Longs Drugs","brand:wikidata":"Q16931196","brand:wikipedia":"en:Longs Drugs",name:"Longs Drugs",shop:"chemist",short_name:"Longs"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Matas":{name:"Matas",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/matasdk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6786143",shop:"chemist"},addTags:{brand:"Matas","brand:wikidata":"Q6786143","brand:wikipedia":"en:Matas (drug store)",name:"Matas",shop:"chemist"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Müller":{name:"Müller",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/mueller.drogeriemarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1958759",shop:"chemist"},addTags:{brand:"Müller","brand:wikidata":"Q1958759","brand:wikipedia":"en:Müller (German trade company)",name:"Müller",shop:"chemist"},countryCodes:["at","ch","de","es","hr","hu"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Rite Aid":{name:"Rite Aid",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/riteaid/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3433273",shop:"chemist"},addTags:{brand:"Rite Aid","brand:wikidata":"Q3433273","brand:wikipedia":"en:Rite Aid",name:"Rite Aid",shop:"chemist"},terms:[],matchScore:2,suggestion:true},"shop/chemist/Rossmann":{name:"Rossmann",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/rossmann.gmbh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q316004",shop:"chemist"},addTags:{brand:"Rossmann","brand:wikidata":"Q316004","brand:wikipedia":"de:Dirk Rossmann GmbH",name:"Rossmann",shop:"chemist"},countryCodes:["cz","de","hu","pl"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Savers":{name:"Savers",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/SaversHB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7428189",shop:"chemist"},addTags:{brand:"Savers","brand:wikidata":"Q7428189","brand:wikipedia":"en:Savers (UK retailer)",name:"Savers",official_name:"Savers Health & Beauty",shop:"chemist"},countryCodes:["gb"],terms:["savers drugstores"],matchScore:2,suggestion:true},"shop/chemist/Superdrug":{name:"Superdrug",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Superdrug/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7643261",shop:"chemist"},addTags:{brand:"Superdrug","brand:wikidata":"Q7643261","brand:wikipedia":"en:Superdrug",name:"Superdrug",shop:"chemist"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Teta":{name:"Teta",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q20860823",shop:"chemist"},addTags:{brand:"Teta","brand:wikidata":"Q20860823","brand:wikipedia":"cs:Teta drogerie",name:"Teta",shop:"chemist"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Trekpleister":{name:"Trekpleister",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/1212663879542681601/a6Mr-zut_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2551576",shop:"chemist"},addTags:{brand:"Trekpleister","brand:wikidata":"Q2551576","brand:wikipedia":"nl:Trekpleister (drogisterij)",name:"Trekpleister",shop:"chemist"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Walgreens":{name:"Walgreens",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/walgreens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1591889",shop:"chemist"},addTags:{brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",name:"Walgreens",shop:"chemist"},countryCodes:["us"],terms:["walgreens pharmacy"],matchScore:2,suggestion:true},"shop/chemist/Watsons":{name:"Watsons",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/WatsonsPH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7974785",shop:"chemist"},addTags:{brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",name:"Watsons",shop:"chemist"},terms:[],matchScore:2,suggestion:true},"shop/chemist/dm":{name:"dm",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/dm.Deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q266572",shop:"chemist"},addTags:{brand:"dm","brand:wikidata":"Q266572","brand:wikipedia":"en:Dm-drogerie markt",name:"dm",shop:"chemist"},countryCodes:["at","ba","bg","cz","de","hr","hu","it","mk","ro","rs","si","sk"],terms:["dm drogerie markt"],matchScore:2,suggestion:true},"shop/chemist/屈臣氏":{name:"屈臣氏",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/WatsonsPH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7974785",shop:"chemist"},addTags:{brand:"屈臣氏","brand:wikidata":"Q7974785","brand:wikipedia":"zh:屈臣氏",name:"屈臣氏",shop:"chemist"},countryCodes:["cn","hk","tw"],terms:[],matchScore:2,suggestion:true},"shop/chemist/康是美":{name:"康是美",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/cococo.cosmed/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11063876",shop:"chemist"},addTags:{brand:"康是美","brand:wikidata":"Q11063876","brand:wikipedia":"zh:康是美藥妝店",name:"康是美",shop:"chemist"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Cacau Show":{name:"Cacau Show",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/CacauShow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9671713",shop:"chocolate"},addTags:{brand:"Cacau Show","brand:wikidata":"Q9671713","brand:wikipedia":"en:Cacau Show",name:"Cacau Show",shop:"chocolate"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Chocolates Brasil Cacau":{name:"Chocolates Brasil Cacau",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/ChocolatesBrasilCacau/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9750569",shop:"chocolate"},addTags:{brand:"Chocolates Brasil Cacau","brand:wikidata":"Q9750569","brand:wikipedia":"pt:Chocolates Brasil Cacau",name:"Chocolates Brasil Cacau",shop:"chocolate",short_name:"Brasil Cacau"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Gertrude Hawk Chocolates":{name:"Gertrude Hawk Chocolates",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/gertrudehawkchocolates/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5553326",shop:"chocolate"},addTags:{brand:"Gertrude Hawk Chocolates","brand:wikidata":"Q5553326","brand:wikipedia":"en:Gertrude Hawk Chocolates",name:"Gertrude Hawk Chocolates",shop:"chocolate",short_name:"Gertrude Hawk"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Godiva Chocolatier":{name:"Godiva Chocolatier",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/Godiva/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q931084",shop:"chocolate"},addTags:{brand:"Godiva Chocolatier","brand:wikidata":"Q931084","brand:wikipedia":"en:Godiva Chocolatier",name:"Godiva Chocolatier",shop:"chocolate",short_name:"Godiva"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Jeff de Bruges":{name:"Jeff de Bruges",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/JeffdeBrugesofficiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3176626",shop:"chocolate"},addTags:{brand:"Jeff de Bruges","brand:wikidata":"Q3176626","brand:wikipedia":"fr:Jeff de Bruges",name:"Jeff de Bruges",shop:"chocolate"},countryCodes:["ca","cz","fr","gb"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Laura Secord":{name:"Laura Secord",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/laurasecord.ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6499418",shop:"chocolate"},addTags:{brand:"Laura Secord","brand:wikidata":"Q6499418","brand:wikipedia":"en:Laura Secord Chocolates",name:"Laura Secord",shop:"chocolate"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Leonidas":{name:"Leonidas",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/Leonidas.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80335",shop:"chocolate"},addTags:{brand:"Leonidas","brand:wikidata":"Q80335","brand:wikipedia":"en:Leonidas (chocolate maker)",name:"Leonidas",shop:"chocolate"},countryCodes:["be","cz","fr","gb","gr","nl"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Lindt":{name:"Lindt",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/lindtchocolateusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q152822",shop:"chocolate"},addTags:{brand:"Lindt","brand:wikidata":"Q152822","brand:wikipedia":"en:Lindt & Sprüngli",name:"Lindt",shop:"chocolate"},terms:[],matchScore:2,suggestion:true},"shop/chocolate/Purdys Chocolatier":{name:"Purdys Chocolatier",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/PurdysChocolatier/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7261007",shop:"chocolate"},addTags:{brand:"Purdys Chocolatier","brand:wikidata":"Q7261007","brand:wikipedia":"en:Purdy's Chocolates",name:"Purdys Chocolatier",shop:"chocolate"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/A Pea in the Pod":{name:"A Pea in the Pod",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/apeainthepod/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q79051737",shop:"clothes"},addTags:{brand:"A Pea in the Pod","brand:wikidata":"Q79051737",clothes:"maternity",name:"A Pea in the Pod",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/AOKI":{name:"AOKI",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/aokistyle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11189480",shop:"clothes"},addTags:{brand:"AOKI","brand:wikidata":"Q11189480","brand:wikipedia":"ja:AOKIホールディングス",clothes:"men",name:"AOKI","name:ja":"アオキ",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Abercrombie & Fitch":{name:"Abercrombie & Fitch",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/abercrombieofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q319344",shop:"clothes"},addTags:{brand:"Abercrombie & Fitch","brand:wikidata":"Q319344","brand:wikipedia":"en:Abercrombie & Fitch",clothes:"men;women",name:"Abercrombie & Fitch",shop:"clothes"},countryCodes:["ae","be","ca","cn","de","es","fr","gb","hk","ie","it","jp","kw","mx","nl","qa","sa","sg"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Abercrombie Kids":{name:"Abercrombie Kids",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/AbercrombieKids/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q429856",shop:"clothes"},addTags:{brand:"Abercrombie Kids","brand:wikidata":"Q429856","brand:wikipedia":"en:Abercrombie Kids",clothes:"children",name:"Abercrombie Kids",shop:"clothes"},countryCodes:["ae","ca","cn","de","gb","it","nl","sg","sp","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Accessorize":{name:"Accessorize",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/AccessorizeUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65007482",shop:"clothes"},addTags:{brand:"Accessorize","brand:wikidata":"Q65007482",name:"Accessorize",shop:"clothes"},countryCodes:["gb","it","ru"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ackermans":{name:"Ackermans",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/AckermansSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4674255",shop:"clothes"},addTags:{brand:"Ackermans","brand:wikidata":"Q4674255","brand:wikipedia":"en:Ackermans",name:"Ackermans",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Addition Elle":{name:"Addition Elle",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/additionelle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4681311",shop:"clothes"},addTags:{brand:"Addition Elle","brand:wikidata":"Q4681311","brand:wikipedia":"en:Addition Elle",clothes:"women",name:"Addition Elle",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Aerie":{name:"Aerie",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Aerie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25351619",shop:"clothes"},addTags:{brand:"Aerie","brand:wikidata":"Q25351619","brand:wikipedia":"en:Aerie (clothing retailer)",name:"Aerie",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Aeropostale":{name:"Aeropostale",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Aeropostale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q794565",shop:"clothes"},addTags:{brand:"Aeropostale","brand:wikidata":"Q794565","brand:wikipedia":"en:Aéropostale (clothing)",clothes:"men;women",name:"Aeropostale",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Alia N TanJay":{name:"Alia N TanJay",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/tanjayalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65947844",shop:"clothes"},addTags:{brand:"Alia N TanJay","brand:wikidata":"Q65947844",clothes:"women",name:"Alia N TanJay",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/AllSaints":{name:"AllSaints",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/allsaintsus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4728473",shop:"clothes"},addTags:{brand:"AllSaints","brand:wikidata":"Q4728473","brand:wikipedia":"en:AllSaints",name:"AllSaints",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Altar'd State":{name:"Altar'd State",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/altardstate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q71022008",shop:"clothes"},addTags:{brand:"Altar'd State","brand:wikidata":"Q71022008",name:"Altar'd State",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/American Eagle Outfitters":{name:"American Eagle Outfitters",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/americaneagle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2842931",shop:"clothes"},addTags:{brand:"American Eagle Outfitters","brand:wikidata":"Q2842931","brand:wikipedia":"en:American Eagle Outfitters",clothes:"men;women",name:"American Eagle Outfitters",shop:"clothes",short_name:"American Eagle"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Animal":{name:"Animal",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q4764749",shop:"clothes"},addTags:{brand:"Animal","brand:wikidata":"Q4764749",name:"Animal",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ann Taylor":{name:"Ann Taylor",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/AnnTaylor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4766699",shop:"clothes"},addTags:{brand:"Ann Taylor","brand:wikidata":"Q4766699","brand:wikipedia":"en:Ann Inc.",clothes:"women",name:"Ann Taylor",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Anthropologie":{name:"Anthropologie",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Anthropologie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4773903",shop:"clothes"},addTags:{brand:"Anthropologie","brand:wikidata":"Q4773903","brand:wikipedia":"en:Anthropologie",clothes:"women",name:"Anthropologie",shop:"clothes"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Arc'teryx":{name:"Arc'teryx",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/arcteryx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3271455",shop:"clothes"},addTags:{brand:"Arc'teryx","brand:wikidata":"Q3271455","brand:wikipedia":"en:Arc'teryx",clothes:"men;women",name:"Arc'teryx",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Ardene":{name:"Ardene",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Ardene/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2860764",shop:"clothes"},addTags:{brand:"Ardene","brand:wikidata":"Q2860764","brand:wikipedia":"en:Ardene",name:"Ardene",shop:"clothes"},countryCodes:["ca","sn"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Aritzia":{name:"Aritzia",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/aritzia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4791147",shop:"clothes"},addTags:{brand:"Aritzia","brand:wikidata":"Q4791147","brand:wikipedia":"en:Aritzia",clothes:"women",name:"Aritzia",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Armand Thiery":{name:"Armand Thiery",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ARMANDTHIERY/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2861975",shop:"clothes"},addTags:{brand:"Armand Thiery","brand:wikidata":"Q2861975","brand:wikipedia":"fr:Armand Thiery",name:"Armand Thiery",shop:"clothes"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Armani Exchange":{name:"Armani Exchange",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/armaniexchange/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56045740",shop:"clothes"},addTags:{brand:"Armani Exchange","brand:wikidata":"Q56045740",clothes:"men;women",name:"Armani Exchange",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Avenue":{name:"Avenue",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MyAvenue/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4828182",shop:"clothes"},addTags:{brand:"Avenue","brand:wikidata":"Q4828182","brand:wikipedia":"en:Avenue (store)",clothes:"women;oversize",name:"Avenue",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Baby Gap":{name:"Baby Gap",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GapJapan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q420822",shop:"clothes"},addTags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Baby Gap",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Banana Republic":{name:"Banana Republic",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BananaRepublic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806085",shop:"clothes"},addTags:{brand:"Banana Republic","brand:wikidata":"Q806085","brand:wikipedia":"en:Banana Republic",clothes:"men;women",name:"Banana Republic",shop:"clothes"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bench.":{name:"Bench.",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BenchOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q816714",shop:"clothes"},addTags:{brand:"Bench.","brand:wikidata":"Q816714","brand:wikipedia":"en:Bench (British clothing brand)",name:"Bench.",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Bershka":{name:"Bershka",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bershka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q827258",shop:"clothes"},addTags:{brand:"Bershka","brand:wikidata":"Q827258","brand:wikipedia":"en:Bershka",name:"Bershka",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Betty Barclay":{name:"Betty Barclay",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Barclay.Betty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q850250",shop:"clothes"},addTags:{brand:"Betty Barclay","brand:wikidata":"Q850250","brand:wikipedia":"de:Betty Barclay",name:"Betty Barclay",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Big Star":{name:"Big Star",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bigstareurope/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9171569",shop:"clothes"},addTags:{brand:"Big Star","brand:wikidata":"Q9171569","brand:wikipedia":"pl:Big Star Limited",name:"Big Star",shop:"clothes"},countryCodes:["by","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Billabong":{name:"Billabong",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Billabong/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q862718",shop:"clothes"},addTags:{brand:"Billabong","brand:wikidata":"Q862718","brand:wikipedia":"en:Billabong (clothing)",clothes:"men;women",name:"Billabong",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Bluenotes":{name:"Bluenotes",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BluenotesJeans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4930395",shop:"clothes"},addTags:{brand:"Bluenotes","brand:wikidata":"Q4930395","brand:wikipedia":"en:Bluenotes",name:"Bluenotes",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/BonWorth":{name:"BonWorth",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/shopbonworth/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4941034",shop:"clothes"},addTags:{brand:"BonWorth","brand:wikidata":"Q4941034","brand:wikipedia":"en:BonWorth",clothes:"women",name:"BonWorth",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bonita":{name:"Bonita",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BONITAfashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q892598",shop:"clothes"},addTags:{brand:"Bonita","brand:wikidata":"Q892598","brand:wikipedia":"de:Bonita (Unternehmen)",name:"Bonita",shop:"clothes"},countryCodes:["at","ch","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bonmarché":{name:"Bonmarché",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bonmarche/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4942146",shop:"clothes"},addTags:{brand:"Bonmarché","brand:wikidata":"Q4942146","brand:wikipedia":"en:Bonmarché",name:"Bonmarché",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bonobo":{name:"Bonobo",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bonoboplanet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63682093",shop:"clothes"},addTags:{brand:"Bonobo","brand:wikidata":"Q63682093",clothes:"men;women",name:"Bonobo",shop:"clothes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bonobos":{name:"Bonobos",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bonobos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4942546",shop:"clothes"},addTags:{brand:"Bonobos","brand:wikidata":"Q4942546","brand:wikipedia":"en:Bonobos (apparel)",clothes:"men",name:"Bonobos",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bootlegger":{name:"Bootlegger",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BootleggerJeans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65947984",shop:"clothes"},addTags:{brand:"Bootlegger","brand:wikidata":"Q65947984",clothes:"women",name:"Bootlegger",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Boux Avenue":{name:"Boux Avenue",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BouxAvenue/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4950489",shop:"clothes"},addTags:{brand:"Boux Avenue","brand:wikidata":"Q4950489","brand:wikipedia":"en:Boux Avenue",clothes:"underwear",name:"Boux Avenue",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Brice":{name:"Brice",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/brandbrice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2925067",shop:"clothes"},addTags:{brand:"Brice","brand:wikidata":"Q2925067","brand:wikipedia":"fr:Brice (enseigne)",name:"Brice",shop:"clothes"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Brooks Brothers":{name:"Brooks Brothers",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BrooksBrothers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q929722",shop:"clothes"},addTags:{brand:"Brooks Brothers","brand:wikidata":"Q929722","brand:wikipedia":"en:Brooks Brothers",name:"Brooks Brothers",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Brunello Cucinelli":{name:"Brunello Cucinelli",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BrunelloCucinelli/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3645582",shop:"clothes"},addTags:{brand:"Brunello Cucinelli","brand:wikidata":"Q3645582","brand:wikipedia":"en:Brunello Cucinelli (company)",name:"Brunello Cucinelli",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Buckle":{name:"Buckle",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bucklestore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4983306",shop:"clothes"},addTags:{brand:"Buckle","brand:wikidata":"Q4983306","brand:wikipedia":"en:Buckle (clothing retailer)",clothes:"men;women;children",name:"Buckle",shop:"clothes"},countryCodes:["us"],terms:["the buckle"],matchScore:2,suggestion:true},"shop/clothes/Buffalo Exchange":{name:"Buffalo Exchange",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/buffaloexchange/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4985721",shop:"clothes"},addTags:{brand:"Buffalo Exchange","brand:wikidata":"Q4985721","brand:wikipedia":"en:Buffalo Exchange",name:"Buffalo Exchange",second_hand:"only",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Burberry":{name:"Burberry",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Burberry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q390107",shop:"clothes"},addTags:{brand:"Burberry","brand:wikidata":"Q390107","brand:wikipedia":"en:Burberry",clothes:"men;women",name:"Burberry",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Burlington Coat Factory":{name:"Burlington Coat Factory",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BurlingtonStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4999220",shop:"clothes"},addTags:{brand:"Burlington Coat Factory","brand:wikidata":"Q4999220","brand:wikipedia":"en:Burlington (department store)",name:"Burlington Coat Factory",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Burton":{name:"Burton",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BurtonMenswear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5000795",shop:"clothes"},addTags:{brand:"Burton","brand:wikidata":"Q5000795","brand:wikipedia":"en:Burton (retailer)",name:"Burton",shop:"clothes"},countryCodes:["fr","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/C&A":{name:"C&A",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q701338",shop:"clothes"},addTags:{brand:"C&A","brand:wikidata":"Q701338","brand:wikipedia":"en:C&A",name:"C&A",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/COS":{name:"COS",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/cos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60772401",shop:"clothes"},addTags:{brand:"COS","brand:wikidata":"Q60772401","brand:wikipedia":"en:COS (clothing)",name:"COS",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Cache Cache":{name:"Cache Cache",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CacheCacheFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63064086",shop:"clothes"},addTags:{brand:"Cache Cache","brand:wikidata":"Q63064086",name:"Cache Cache",shop:"clothes"},countryCodes:["fr","it","lu"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Calvin Klein":{name:"Calvin Klein",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CalvinKlein/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1068628",shop:"clothes"},addTags:{brand:"Calvin Klein","brand:wikidata":"Q1068628","brand:wikipedia":"en:Calvin Klein (company)",name:"Calvin Klein",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Calzedonia":{name:"Calzedonia",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/calzedonia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1027874",shop:"clothes"},addTags:{brand:"Calzedonia","brand:wikidata":"Q1027874","brand:wikipedia":"en:Calzedonia",name:"Calzedonia",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Camaïeu":{name:"Camaïeu",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/camaieu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2934647",shop:"clothes"},addTags:{brand:"Camaïeu","brand:wikidata":"Q2934647","brand:wikipedia":"en:Camaïeu (company)",name:"Camaïeu",shop:"clothes"},countryCodes:["be","cz","fr","it","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Camp David":{name:"Camp David",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CAMPDAVID.OFFICIAL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q50540636",shop:"clothes"},addTags:{brand:"Camp David","brand:wikidata":"Q50540636","brand:wikipedia":"en:Camp David (fashion)",name:"Camp David",shop:"clothes"},countryCodes:["at","de","ee","sk"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Canada Goose":{name:"Canada Goose",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/canadagoose/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2988422",shop:"clothes"},addTags:{brand:"Canada Goose","brand:wikidata":"Q2988422","brand:wikipedia":"en:Canada Goose (clothing)",name:"Canada Goose",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Carhartt":{name:"Carhartt",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Carhartt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q527877",shop:"clothes"},addTags:{brand:"Carhartt","brand:wikidata":"Q527877","brand:wikipedia":"en:Carhartt",clothes:"workwear",name:"Carhartt",shop:"clothes"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Carlings":{name:"Carlings",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/carlingsofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10443115",shop:"clothes"},addTags:{brand:"Carlings","brand:wikidata":"Q10443115","brand:wikipedia":"no:Carlings",name:"Carlings",shop:"clothes"},countryCodes:["at","fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Caroll":{name:"Caroll",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/carollparis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63063871",shop:"clothes"},addTags:{brand:"Caroll","brand:wikidata":"Q63063871",name:"Caroll",shop:"clothes"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Carter's":{name:"Carter's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/carters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5047083",shop:"clothes"},addTags:{brand:"Carter's","brand:wikidata":"Q5047083","brand:wikipedia":"en:Carter's",clothes:"children",name:"Carter's",shop:"clothes"},terms:["carters babies and kids"],matchScore:2,suggestion:true},"shop/clothes/Catherines":{name:"Catherines",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CatherinesPlusSizes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64026208",shop:"clothes"},addTags:{brand:"Catherines","brand:wikidata":"Q64026208",clothes:"oversize;women",name:"Catherines",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Cato":{name:"Cato",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CatoFashions/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16956136",shop:"clothes"},addTags:{brand:"Cato","brand:wikidata":"Q16956136","brand:wikipedia":"en:Cato Corporation",clothes:"women",name:"Cato",official_name:"Cato Fashions",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Celio":{name:"Celio",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/celioOFFICIAL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2672003",shop:"clothes"},addTags:{brand:"Celio","brand:wikidata":"Q2672003","brand:wikipedia":"en:Celio (retailer)",name:"Celio",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Chanel":{name:"Chanel",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/chanel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q218115",shop:"clothes"},addTags:{brand:"Chanel","brand:wikidata":"Q218115","brand:wikipedia":"en:Chanel",name:"Chanel",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Charles Vögele":{name:"Charles Vögele",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/charlesvoegeletiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1066326",shop:"clothes"},addTags:{brand:"Charles Vögele","brand:wikidata":"Q1066326","brand:wikipedia":"de:Charles Vögele Holding",name:"Charles Vögele",shop:"clothes",short_name:"Vögele"},countryCodes:["at","be","ch","de","hu","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Charlotte Russe":{name:"Charlotte Russe",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CharlotteRusse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5086126",shop:"clothes"},addTags:{brand:"Charlotte Russe","brand:wikidata":"Q5086126","brand:wikipedia":"en:Charlotte Russe (clothing retailer)",name:"Charlotte Russe",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Charming Charlie":{name:"Charming Charlie",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CharmingCharlie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16829286",shop:"clothes"},addTags:{brand:"Charming Charlie","brand:wikidata":"Q16829286","brand:wikipedia":"en:Charming Charlie",clothes:"women",name:"Charming Charlie",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Chico's":{name:"Chico's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/LoveChicos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5096393",shop:"clothes"},addTags:{brand:"Chico's","brand:wikidata":"Q5096393","brand:wikipedia":"en:Chico's (clothing retailer)",name:"Chico's",shop:"clothes"},countryCodes:["ar","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Christopher & Banks":{name:"Christopher & Banks",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ChristopherandBanks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5111816",shop:"clothes"},addTags:{brand:"Christopher & Banks","brand:wikidata":"Q5111816","brand:wikipedia":"en:Christopher & Banks",name:"Christopher & Banks",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Citi Trends":{name:"Citi Trends",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/cititrends/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5122438",shop:"clothes"},addTags:{brand:"Citi Trends","brand:wikidata":"Q5122438","brand:wikipedia":"en:Citi Trends",name:"Citi Trends",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/City Gear":{name:"City Gear",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/citygear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16958629",shop:"clothes"},addTags:{brand:"City Gear","brand:wikidata":"Q16958629","brand:wikipedia":"en:City Gear",name:"City Gear",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Cleo":{name:"Cleo",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/cleo.cafashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65947963",shop:"clothes"},addTags:{brand:"Cleo","brand:wikidata":"Q65947963",clothes:"women",name:"Cleo",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Club Monaco":{name:"Club Monaco",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/clubmonaco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2979949",shop:"clothes"},addTags:{brand:"Club Monaco","brand:wikidata":"Q2979949","brand:wikipedia":"en:Club Monaco",name:"Club Monaco",shop:"clothes"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Colin's":{name:"Colin's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ColinsLook/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28729658",shop:"clothes"},addTags:{brand:"Colin's","brand:wikidata":"Q28729658",name:"Colin's",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Colloseum":{name:"Colloseum",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/mycolloseum/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15794685",shop:"clothes"},addTags:{brand:"Colloseum","brand:wikidata":"Q15794685","brand:wikipedia":"de:Colloseum",name:"Colloseum",shop:"clothes"},countryCodes:["at","cz","de","gr","lv","pl","ru","sk"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Columbia":{name:"Columbia",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ColumbiaSportswear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1112588",shop:"clothes"},addTags:{brand:"Columbia","brand:wikidata":"Q1112588","brand:wikipedia":"en:Columbia Sportswear",name:"Columbia",official_name:"Columbia Sportswear",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Cotton On":{name:"Cotton On",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/cottonon.usa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5175717",shop:"clothes"},addTags:{brand:"Cotton On","brand:wikidata":"Q5175717","brand:wikipedia":"en:Cotton On Group",name:"Cotton On",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Cropp":{name:"Cropp",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CroppGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9196793",shop:"clothes"},addTags:{brand:"Cropp","brand:wikidata":"Q9196793","brand:wikipedia":"pl:Cropp",name:"Cropp",shop:"clothes"},countryCodes:["cs","hu","pl","ro","ru","sk","ua"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Cubus":{name:"Cubus",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/cubusnorge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3439593",shop:"clothes"},addTags:{brand:"Cubus","brand:wikidata":"Q3439593","brand:wikipedia":"no:Cubus",name:"Cubus",shop:"clothes"},countryCodes:["de","fi","lv","no","pl","se"],terms:[],matchScore:2,suggestion:true},"shop/clothes/DXL Men's Apparel":{name:"DXL Men's Apparel",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/DestinationXL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61981830",shop:"clothes"},addTags:{brand:"DXL Men's Apparel","brand:wikidata":"Q61981830",clothes:"oversize;men",name:"DXL Men's Apparel",shop:"clothes",short_name:"DXL"},countryCodes:["us"],terms:["casual male xl"],matchScore:2,suggestion:true},"shop/clothes/Damart":{name:"Damart",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/damartbelgium/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3012602",shop:"clothes"},addTags:{brand:"Damart","brand:wikidata":"Q3012602","brand:wikipedia":"en:Damart",name:"Damart",shop:"clothes"},countryCodes:["be","fr","lu"],terms:[],matchScore:2,suggestion:true},"shop/clothes/David's Bridal":{name:"David's Bridal",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/davidsbridal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5230388",shop:"clothes"},addTags:{brand:"David's Bridal","brand:wikidata":"Q5230388","brand:wikipedia":"en:David's Bridal",clothes:"wedding",name:"David's Bridal",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Desigual":{name:"Desigual",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/desigual6/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q83750",shop:"clothes"},addTags:{brand:"Desigual","brand:wikidata":"Q83750","brand:wikipedia":"en:Desigual",name:"Desigual",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Destination Maternity":{name:"Destination Maternity",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/DestinationMat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q79051770",shop:"clothes"},addTags:{brand:"Destination Maternity","brand:wikidata":"Q79051770",clothes:"maternity",name:"Destination Maternity",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Devred":{name:"Devred",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Devred1902.Officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3025542",shop:"clothes"},addTags:{brand:"Devred","brand:wikidata":"Q3025542","brand:wikipedia":"fr:Devred 1902",name:"Devred",shop:"clothes"},countryCodes:["be","fr","ma"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Diesel":{name:"Diesel",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Diesel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q158285",shop:"clothes"},addTags:{brand:"Diesel","brand:wikidata":"Q158285","brand:wikipedia":"en:Diesel (brand)",name:"Diesel",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Dior":{name:"Dior",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Dior/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q542767",shop:"clothes"},addTags:{brand:"Dior","brand:wikidata":"Q542767","brand:wikipedia":"en:Christian Dior (fashion house)",name:"Dior",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Diverse":{name:"Diverse",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/DiverseSystem/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11694298",shop:"clothes"},addTags:{brand:"Diverse","brand:wikidata":"Q11694298","brand:wikipedia":"pl:Diverse",name:"Diverse",shop:"clothes"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Dolce & Gabbana":{name:"Dolce & Gabbana",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/DolceGabbana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q214480",shop:"clothes"},addTags:{brand:"Dolce & Gabbana","brand:wikidata":"Q214480","brand:wikipedia":"en:Dolce & Gabbana",name:"Dolce & Gabbana",shop:"clothes"},terms:["d and g","dg","dolce and gabana","dolce and gabanna","dolce and gabbanna","dolce y gabana","dolce y gabanna","dolce y gabbana","dolce y gabbanna"],matchScore:2,suggestion:true},"shop/clothes/Dorothy Perkins":{name:"Dorothy Perkins",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/dorothyperkins/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5298588",shop:"clothes"},addTags:{brand:"Dorothy Perkins","brand:wikidata":"Q5298588","brand:wikipedia":"en:Dorothy Perkins",name:"Dorothy Perkins",shop:"clothes"},countryCodes:["gb","gg","ie","im"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Dress Barn":{name:"Dress Barn",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/dressbarn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65090033",shop:"clothes"},addTags:{brand:"Dress Barn","brand:wikidata":"Q65090033","brand:wikipedia":"en:DressBarn",name:"Dress Barn",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Dressmann":{name:"Dressmann",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/dressmann.no/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3357081",shop:"clothes"},addTags:{brand:"Dressmann","brand:wikidata":"Q3357081","brand:wikipedia":"en:Dressmann",name:"Dressmann",shop:"clothes"},countryCodes:["at","fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Dynamite":{name:"Dynamite",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Dynamite/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3117385",shop:"clothes"},addTags:{brand:"Dynamite","brand:wikidata":"Q3117385","brand:wikipedia":"en:Groupe Dynamite",clothes:"women",name:"Dynamite",shop:"clothes"},countryCodes:["ca","jo","ku","sa","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Eddie Bauer":{name:"Eddie Bauer",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/EddieBauer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q842174",shop:"clothes"},addTags:{brand:"Eddie Bauer","brand:wikidata":"Q842174","brand:wikipedia":"en:Eddie Bauer",name:"Eddie Bauer",shop:"clothes"},countryCodes:["ca","jp","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Edinburgh Woollen Mill":{name:"Edinburgh Woollen Mill",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/edinburghwoollenmill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16834657",shop:"clothes"},addTags:{brand:"Edinburgh Woollen Mill","brand:wikidata":"Q16834657","brand:wikipedia":"en:Edinburgh Woollen Mill",name:"Edinburgh Woollen Mill",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Engbers":{name:"Engbers",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/engbers.maennermode/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1290088",shop:"clothes"},addTags:{brand:"Engbers","brand:wikidata":"Q1290088","brand:wikipedia":"de:Engbers",name:"Engbers",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ermenegildo Zegna":{name:"Ermenegildo Zegna",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ZegnaOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1355904",shop:"clothes"},addTags:{brand:"Ermenegildo Zegna","brand:wikidata":"Q1355904","brand:wikipedia":"en:Ermenegildo Zegna",clothes:"men",name:"Ermenegildo Zegna",shop:"clothes",short_name:"Zegna"},countryCodes:["ch","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ernsting's family":{name:"Ernsting's family",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Ernstingsfamily/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1361016",shop:"clothes"},addTags:{brand:"Ernsting's family","brand:wikidata":"Q1361016","brand:wikipedia":"de:Ernsting’s family",name:"Ernsting's family",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Esprit":{name:"Esprit",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/esprit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q532746",shop:"clothes"},addTags:{brand:"Esprit","brand:wikidata":"Q532746","brand:wikipedia":"en:Esprit Holdings",name:"Esprit",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Etam":{name:"Etam",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/etam/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3059202",shop:"clothes"},addTags:{brand:"Etam","brand:wikidata":"Q3059202","brand:wikipedia":"en:Etam Développement",name:"Etam",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Evans":{name:"Evans",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Evans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5415877",shop:"clothes"},addTags:{brand:"Evans","brand:wikidata":"Q5415877","brand:wikipedia":"en:Evans (retailer)",clothes:"women",name:"Evans",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Evereve":{name:"Evereve",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/evereveofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q69891997",shop:"clothes"},addTags:{brand:"Evereve","brand:wikidata":"Q69891997",clothes:"women",name:"Evereve",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Express":{name:"Express",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/express/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1384784",shop:"clothes"},addTags:{brand:"Express","brand:wikidata":"Q1384784","brand:wikipedia":"en:Express, Inc.",name:"Express",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Fairweather":{name:"Fairweather",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/fairweatherclothing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64861806",shop:"clothes"},addTags:{brand:"Fairweather","brand:wikidata":"Q64861806",clothes:"women",name:"Fairweather",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Fat Face":{name:"Fat Face",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/fatfaceusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5437186",shop:"clothes"},addTags:{brand:"Fat Face","brand:wikidata":"Q5437186","brand:wikipedia":"en:Fat Face",name:"Fat Face",shop:"clothes"},countryCodes:["gb","gg","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Fendi":{name:"Fendi",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Fendi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q926575",shop:"clothes"},addTags:{brand:"Fendi","brand:wikidata":"Q926575","brand:wikipedia":"en:Fendi",name:"Fendi",shop:"clothes"},countryCodes:["fr","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Forever 21":{name:"Forever 21",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Forever21/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1060537",shop:"clothes"},addTags:{brand:"Forever 21","brand:wikidata":"Q1060537","brand:wikipedia":"en:Forever 21",name:"Forever 21",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Francesca's":{name:"Francesca's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/francescascollectionsboutique/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72982331",shop:"clothes"},addTags:{brand:"Francesca's","brand:wikidata":"Q72982331",clothes:"women;luxury",name:"Francesca's",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Free People":{name:"Free People",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/FreePeople/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5499945",shop:"clothes"},addTags:{brand:"Free People","brand:wikidata":"Q5499945","brand:wikipedia":"en:Free People",name:"Free People",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/French Connection":{name:"French Connection",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/FrenchConnectionUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q306457",shop:"clothes"},addTags:{brand:"French Connection","brand:wikidata":"Q306457","brand:wikipedia":"en:French Connection (clothing)",name:"French Connection",shop:"clothes",short_name:"FCUK"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Fussl":{name:"Fussl",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/fussl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24266366",shop:"clothes"},addTags:{alt_name:"Fussl Modestraße",brand:"Fussl","brand:wikidata":"Q24266366","brand:wikipedia":"de:Fussl Modestraße",name:"Fussl",shop:"clothes"},countryCodes:["at","de"],terms:["fussl modestraße"],matchScore:2,suggestion:true},"shop/clothes/G-Star Raw":{name:"G-Star Raw",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/gstarraw/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1484081",shop:"clothes"},addTags:{brand:"G-Star Raw","brand:wikidata":"Q1484081","brand:wikipedia":"en:G-Star Raw",name:"G-Star Raw",shop:"clothes"},terms:["g-star"],matchScore:2,suggestion:true},"shop/clothes/GU":{name:"GU",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/g.u.japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5512642",shop:"clothes"},addTags:{brand:"GU","brand:wikidata":"Q5512642","brand:wikipedia":"en:GU (retailer)",name:"GU",shop:"clothes"},countryCodes:["cl","jp","tw"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Gabe's":{name:"Gabe's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GabesStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5515554",shop:"clothes"},addTags:{brand:"Gabe's","brand:wikidata":"Q5515554","brand:wikipedia":"en:Gabe's",name:"Gabe's",shop:"clothes"},countryCodes:["us"],terms:["gabriel brothers"],matchScore:2,suggestion:true},"shop/clothes/Gant":{name:"Gant",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/gant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1493667",shop:"clothes"},addTags:{brand:"Gant","brand:wikidata":"Q1493667","brand:wikipedia":"en:Gant (retailer)",name:"Gant",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Gap":{name:"Gap",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GapJapan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q420822",shop:"clothes"},addTags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap",shop:"clothes"},terms:["the gap"],matchScore:2,suggestion:true},"shop/clothes/Gap Factory":{name:"Gap Factory",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GapJapan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q420822",shop:"clothes"},addTags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap Factory",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Gap Kids":{name:"Gap Kids",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GapJapan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q420822",shop:"clothes"},addTags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap Kids",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Garage":{name:"Garage",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Garage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5521860",shop:"clothes"},addTags:{brand:"Garage","brand:wikidata":"Q5521860","brand:wikipedia":"en:Garage (clothing retailer)",clothes:"women",name:"Garage",shop:"clothes"},countryCodes:["am","ca","jo","om","qa","sa","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Gerry Weber":{name:"Gerry Weber",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/gerryweber.global/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q873447",shop:"clothes"},addTags:{brand:"Gerry Weber","brand:wikidata":"Q873447","brand:wikipedia":"en:Gerry Weber",name:"Gerry Weber",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Gina Laura":{name:"Gina Laura",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ginalaura.mode/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2700576",shop:"clothes"},addTags:{brand:"Gina Laura","brand:wikidata":"Q2700576","brand:wikipedia":"de:Gina Laura",name:"Gina Laura",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Gloria Jeans":{name:"Gloria Jeans",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/gloriajeanscorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4139985",shop:"clothes"},addTags:{brand:"Gloria Jeans","brand:wikidata":"Q4139985","brand:wikipedia":"ru:Глория Джинс",name:"Gloria Jeans",shop:"clothes"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Gucci":{name:"Gucci",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GUCCI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q178516",shop:"clothes"},addTags:{brand:"Gucci","brand:wikidata":"Q178516","brand:wikipedia":"en:Gucci",name:"Gucci",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Guess":{name:"Guess",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GUESS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2470307",shop:"clothes"},addTags:{brand:"Guess","brand:wikidata":"Q2470307","brand:wikipedia":"en:Guess (clothing)",name:"Guess",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Gymboree":{name:"Gymboree",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Gymboree/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4039771",shop:"clothes"},addTags:{brand:"Gymboree","brand:wikidata":"Q4039771","brand:wikipedia":"en:Gymboree",name:"Gymboree",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Gémo":{name:"Gémo",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Gemo.Officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3122954",shop:"clothes"},addTags:{brand:"Gémo","brand:wikidata":"Q3122954","brand:wikipedia":"fr:Gémo",name:"Gémo",shop:"clothes"},countryCodes:["be","ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/H&M":{name:"H&M",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hmhongkong/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q188326",shop:"clothes"},addTags:{brand:"H&M","brand:wikidata":"Q188326","brand:wikipedia":"en:H&M",name:"H&M",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Haggar":{name:"Haggar",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/HaggarClothingCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5638669",shop:"clothes"},addTags:{alt_name:"Haggar Clothing Co.",brand:"Haggar","brand:wikidata":"Q5638669","brand:wikipedia":"en:Haggar Clothing",name:"Haggar",shop:"clothes"},countryCodes:["us"],terms:["haggar clothing"],matchScore:2,suggestion:true},"shop/clothes/Hallhuber":{name:"Hallhuber",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hallhuberfashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1571714",shop:"clothes"},addTags:{brand:"Hallhuber","brand:wikidata":"Q1571714","brand:wikipedia":"de:Hallhuber (Bekleidungshaus)",name:"Hallhuber",shop:"clothes"},countryCodes:["at","ch","de","lu","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Hanna Andersson":{name:"Hanna Andersson",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ShopHannaAndersson/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17460802",shop:"clothes"},addTags:{brand:"Hanna Andersson","brand:wikidata":"Q17460802","brand:wikipedia":"en:Hanna Andersson",clothes:"baby;children;women",name:"Hanna Andersson",shop:"clothes"},countryCodes:["us"],terms:["hanna anderssen"],matchScore:2,suggestion:true},"shop/clothes/Hermès":{name:"Hermès",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hermesusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q843887",shop:"clothes"},addTags:{brand:"Hermès","brand:wikidata":"Q843887","brand:wikipedia":"en:Hermès",name:"Hermès",shop:"clothes"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Hobbs":{name:"Hobbs",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hobbslondon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25108740",shop:"clothes"},addTags:{brand:"Hobbs","brand:wikidata":"Q25108740",name:"Hobbs",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Hollister":{name:"Hollister",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hollister/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1257477",shop:"clothes"},addTags:{brand:"Hollister","brand:wikidata":"Q1257477","brand:wikipedia":"en:Hollister Co.",name:"Hollister",official_name:"Hollister Co.",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Hot Topic":{name:"Hot Topic",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hottopic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9294032",shop:"clothes"},addTags:{brand:"Hot Topic","brand:wikidata":"Q9294032","brand:wikipedia":"en:Hot Topic",name:"Hot Topic",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/House":{name:"House",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/house.clothing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9294202",shop:"clothes"},addTags:{brand:"House","brand:wikidata":"Q9294202","brand:wikipedia":"pl:House (marka)",name:"House",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Hugo Boss":{name:"Hugo Boss",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hugoboss/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q491627",shop:"clothes"},addTags:{brand:"Hugo Boss","brand:wikidata":"Q491627","brand:wikipedia":"en:Hugo Boss",name:"Hugo Boss",shop:"clothes",short_name:"Boss"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Hunkemöller":{name:"Hunkemöller",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hunkemoller/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2604175",shop:"clothes"},addTags:{brand:"Hunkemöller","brand:wikidata":"Q2604175","brand:wikipedia":"en:Hunkemöller",name:"Hunkemöller",shop:"clothes"},countryCodes:["at","be","de","dk","es","lu","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/IZOD":{name:"IZOD",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/IZOD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17152556",shop:"clothes"},addTags:{brand:"IZOD","brand:wikidata":"Q17152556","brand:wikipedia":"en:Izod",clothes:"men",name:"IZOD",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Indochino":{name:"Indochino",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/indochino/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64448127",shop:"clothes"},addTags:{brand:"Indochino","brand:wikidata":"Q64448127","brand:wikipedia":"en:Indochino",clothes:"suits",name:"Indochino",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Intimissimi":{name:"Intimissimi",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/intimissimi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q305404",shop:"clothes"},addTags:{brand:"Intimissimi","brand:wikidata":"Q305404","brand:wikipedia":"en:Intimissimi",clothes:"underwear",name:"Intimissimi",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/J.Crew":{name:"J.Crew",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/jcrew/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5370765",shop:"clothes"},addTags:{brand:"J.Crew","brand:wikidata":"Q5370765","brand:wikipedia":"en:J.Crew",clothes:"men;women;children",name:"J.Crew",shop:"clothes"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/J.Jill":{name:"J.Jill",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/JJillStyle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64448268",shop:"clothes"},addTags:{brand:"J.Jill","brand:wikidata":"Q64448268","brand:wikipedia":"en:J.Jill",clothes:"women",name:"J.Jill",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/JBC":{name:"JBC",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/jbcfashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2671470",shop:"clothes"},addTags:{brand:"JBC","brand:wikidata":"Q2671470","brand:wikipedia":"nl:JBC",name:"JBC",shop:"clothes"},countryCodes:["be","lu"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jack & Jones":{name:"Jack & Jones",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/jackandjonesUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6077665",shop:"clothes"},addTags:{brand:"Jack & Jones","brand:wikidata":"Q6077665","brand:wikipedia":"en:Jack & Jones",name:"Jack & Jones",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Jack Wills":{name:"Jack Wills",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/jackwills/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6115814",shop:"clothes"},addTags:{brand:"Jack Wills","brand:wikidata":"Q6115814","brand:wikipedia":"en:Jack Wills",name:"Jack Wills",shop:"clothes"},countryCodes:["ae","gb","hk","ie","kw","lb","mo","sg","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Janie & Jack":{name:"Janie & Jack",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/janieandjack/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64449634",shop:"clothes"},addTags:{brand:"Janie & Jack","brand:wikidata":"Q64449634","brand:wikipedia":"en:Janie & Jack",clothes:"children",name:"Janie & Jack",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jeans Fritz":{name:"Jeans Fritz",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/JeansFritz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1686071",shop:"clothes"},addTags:{brand:"Jeans Fritz","brand:wikidata":"Q1686071","brand:wikipedia":"de:Jeans Fritz",name:"Jeans Fritz",shop:"clothes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jennyfer":{name:"Jennyfer",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/brand.jennyfer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3177174",shop:"clothes"},addTags:{brand:"Jennyfer","brand:wikidata":"Q3177174","brand:wikipedia":"fr:Jennyfer",name:"Jennyfer",shop:"clothes"},countryCodes:["fr","it","lu"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jet":{name:"Jet",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/JetGoodForLife/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61995123",shop:"clothes"},addTags:{brand:"Jet","brand:wikidata":"Q61995123",name:"Jet",shop:"clothes"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jigsaw":{name:"Jigsaw",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/InsideJigsaw/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6192383",shop:"clothes"},addTags:{brand:"Jigsaw","brand:wikidata":"Q6192383","brand:wikipedia":"en:Jigsaw (clothing retailer)",name:"Jigsaw",shop:"clothes"},countryCodes:["au","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/JoJo Maman Bébé":{name:"JoJo Maman Bébé",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/jojomamanbebe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6204064",shop:"clothes"},addTags:{brand:"JoJo Maman Bébé","brand:wikidata":"Q6204064",clothes:"maternity;babies",name:"JoJo Maman Bébé",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/JoS. A. Bank":{name:"JoS. A. Bank",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Jos.A.Bank.Clothiers.Inc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6204078",shop:"clothes"},addTags:{brand:"JoS. A. Bank","brand:wikidata":"Q6204078","brand:wikipedia":"en:JoS. A. Bank Clothiers",name:"JoS. A. Bank",official_name:"Jos. A. Bank Clothiers",shop:"clothes"},countryCodes:["us"],terms:["jos bank","joseph a bank"],matchScore:2,suggestion:true},"shop/clothes/Jockey":{name:"Jockey",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Jockey/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q534235",shop:"clothes"},addTags:{brand:"Jockey","brand:wikidata":"Q534235","brand:wikipedia":"en:Jockey International",name:"Jockey",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Joe Fresh":{name:"Joe Fresh",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/joefresh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6209926",shop:"clothes"},addTags:{brand:"Joe Fresh","brand:wikidata":"Q6209926","brand:wikipedia":"en:Joe Fresh",name:"Joe Fresh",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Joules":{name:"Joules",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Joules/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25351738",shop:"clothes"},addTags:{brand:"Joules","brand:wikidata":"Q25351738","brand:wikipedia":"en:Joules (clothing)",name:"Joules",shop:"clothes"},countryCodes:["gb","gg","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jules":{name:"Jules",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Julescom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3188386",shop:"clothes"},addTags:{brand:"Jules","brand:wikidata":"Q3188386","brand:wikipedia":"fr:Jules (enseigne)",clothes:"men",name:"Jules",shop:"clothes"},countryCodes:["be","fr","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Justice":{name:"Justice",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Justice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7857512",shop:"clothes"},addTags:{brand:"Justice","brand:wikidata":"Q7857512","brand:wikipedia":"en:Tween Brands",name:"Justice",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/K&Ö":{name:"K&Ö",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/KastnerOehler/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1735474",shop:"clothes"},addTags:{alt_name:"Kastner & Öhler",brand:"K&Ö","brand:wikidata":"Q1735474","brand:wikipedia":"de:Kastner & Öhler",name:"K&Ö",shop:"clothes"},countryCodes:["at"],terms:["kastner & öhler"],matchScore:2,suggestion:true},"shop/clothes/KappAhl":{name:"KappAhl",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/kappahl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4349016",shop:"clothes"},addTags:{brand:"KappAhl","brand:wikidata":"Q4349016","brand:wikipedia":"sv:Kappahl",name:"KappAhl",shop:"clothes"},countryCodes:["fi","no","pl","se"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Karen Millen":{name:"Karen Millen",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/karenmillen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6369889",shop:"clothes"},addTags:{brand:"Karen Millen","brand:wikidata":"Q6369889",name:"Karen Millen",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Kate Spade New York":{name:"Kate Spade New York",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/katespadeny/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6375797",shop:"clothes"},addTags:{brand:"Kate Spade New York","brand:wikidata":"Q6375797","brand:wikipedia":"en:Kate Spade New York",name:"Kate Spade New York",shop:"clothes",short_name:"Kate Spade"},countryCodes:["ca","us"],terms:["kate spade ny"],matchScore:2,suggestion:true},"shop/clothes/KiK":{name:"KiK",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/kik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q883965",shop:"clothes"},addTags:{brand:"KiK","brand:wikidata":"Q883965","brand:wikipedia":"en:KiK",name:"KiK",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Kiabi":{name:"Kiabi",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Kiabi.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3196299",shop:"clothes"},addTags:{brand:"Kiabi","brand:wikidata":"Q3196299","brand:wikipedia":"fr:Kiabi",name:"Kiabi",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Koton":{name:"Koton",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/koton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6063877",shop:"clothes"},addTags:{brand:"Koton","brand:wikidata":"Q6063877","brand:wikipedia":"tr:Koton",name:"Koton",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/LC Waikiki":{name:"LC Waikiki",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/lcwaikiki/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3205965",shop:"clothes"},addTags:{brand:"LC Waikiki","brand:wikidata":"Q3205965","brand:wikipedia":"fr:LC Waikiki",name:"LC Waikiki",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/La Senza":{name:"La Senza",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/lasenza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3212802",shop:"clothes"},addTags:{brand:"La Senza","brand:wikidata":"Q3212802","brand:wikipedia":"en:La Senza",name:"La Senza",shop:"clothes"},countryCodes:["ca","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/La Vie en Rose":{name:"La Vie en Rose",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/lavieenrose/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4950452",shop:"clothes"},addTags:{brand:"La Vie en Rose","brand:wikidata":"Q4950452","brand:wikipedia":"en:Boutique La Vie en Rose",clothes:"underwear;women",name:"La Vie en Rose",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Lacoste":{name:"Lacoste",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Lacoste/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q309031",shop:"clothes"},addTags:{brand:"Lacoste","brand:wikidata":"Q309031","brand:wikipedia":"en:Lacoste",name:"Lacoste",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Lane Bryant":{name:"Lane Bryant",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/LaneBryant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6485350",shop:"clothes"},addTags:{brand:"Lane Bryant","brand:wikidata":"Q6485350","brand:wikipedia":"en:Lane Bryant",clothes:"oversize;women",name:"Lane Bryant",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Laura":{name:"Laura",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/StyleLaura/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6498590",shop:"clothes"},addTags:{brand:"Laura","brand:wikidata":"Q6498590","brand:wikipedia":"en:Laura (clothing retailer)",clothes:"women",name:"Laura",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Laura Ashley":{name:"Laura Ashley",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1096100741968785408/hOoKNZzn_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1523089",shop:"clothes"},addTags:{brand:"Laura Ashley","brand:wikidata":"Q1523089","brand:wikipedia":"en:Laura Ashley plc",name:"Laura Ashley",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Le Château":{name:"Le Château",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/lechateaustyle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6506731",shop:"clothes"},addTags:{brand:"Le Château","brand:wikidata":"Q6506731","brand:wikipedia":"en:Le Château",name:"Le Château",shop:"clothes"},countryCodes:["ae","ca","sa"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Levi's":{name:"Levi's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Levis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q127962",shop:"clothes"},addTags:{brand:"Levi's","brand:wikidata":"Q127962","brand:wikipedia":"en:Levi Strauss & Co.",clothes:"denim;men;women",name:"Levi's",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Lids":{name:"Lids",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Lids/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19841609",shop:"clothes"},addTags:{brand:"Lids","brand:wikidata":"Q19841609","brand:wikipedia":"en:Lids (store)",clothes:"hats",name:"Lids",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Lindex":{name:"Lindex",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/lindex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1786717",shop:"clothes"},addTags:{brand:"Lindex","brand:wikidata":"Q1786717","brand:wikipedia":"en:Lindex",name:"Lindex",shop:"clothes"},countryCodes:["cz","ee","fi","no","se","sk"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Loft":{name:"Loft",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/LOFT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075137",shop:"clothes"},addTags:{brand:"Loft","brand:wikidata":"Q62075137",clothes:"women",name:"Loft",shop:"clothes"},terms:["ann taylor loft","the loft"],matchScore:2,suggestion:true},"shop/clothes/Loro Piana":{name:"Loro Piana",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/LoroPiana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1686544",shop:"clothes"},addTags:{brand:"Loro Piana","brand:wikidata":"Q1686544","brand:wikipedia":"en:Loro Piana",name:"Loro Piana",shop:"clothes"},countryCodes:["fr","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Louis Vuitton":{name:"Louis Vuitton",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/LouisVuitton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191485",shop:"clothes"},addTags:{brand:"Louis Vuitton","brand:wikidata":"Q191485","brand:wikipedia":"en:Louis Vuitton",name:"Louis Vuitton",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Lowes":{name:"Lowes",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/lowesaustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6693996",shop:"clothes"},addTags:{brand:"Lowes","brand:wikidata":"Q6693996","brand:wikipedia":"en:Lowes Menswear",name:"Lowes",shop:"clothes"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Lucky Brand":{name:"Lucky Brand",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/luckybrand/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6697865",shop:"clothes"},addTags:{brand:"Lucky Brand","brand:wikidata":"Q6697865","brand:wikipedia":"en:Lucky Brand Jeans",name:"Lucky Brand",shop:"clothes"},countryCodes:["ca","us"],terms:["lucky brand jeans"],matchScore:2,suggestion:true},"shop/clothes/Lululemon":{name:"Lululemon",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/lululemon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6702957",shop:"clothes"},addTags:{brand:"Lululemon","brand:wikidata":"Q6702957","brand:wikipedia":"en:Lululemon Athletica",clothes:"men;women",name:"Lululemon",official_name:"Lululemon Athletica",shop:"clothes"},countryCodes:["au","ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/M&Co":{name:"M&Co",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/mandcofashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6711808",shop:"clothes"},addTags:{brand:"M&Co","brand:wikidata":"Q6711808","brand:wikipedia":"en:M&Co.",name:"M&Co",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/MO":{name:"MO",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/mo.online.pt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q51882883",shop:"clothes"},addTags:{brand:"MO","brand:wikidata":"Q51882883","brand:wikipedia":"pt:MO (lojas)",name:"MO",shop:"clothes"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/clothes/MS Mode":{name:"MS Mode",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/530141134025649/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6718117",shop:"clothes"},addTags:{brand:"MS Mode","brand:wikidata":"Q6718117","brand:wikipedia":"nl:MS Mode",name:"MS Mode",shop:"clothes"},countryCodes:["be","de","fr","lu","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Madewell":{name:"Madewell",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/madewell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64026213",shop:"clothes"},addTags:{brand:"Madewell","brand:wikidata":"Q64026213",clothes:"men;women",name:"Madewell",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Maidenform":{name:"Maidenform",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MaidenformBrands/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6735419",shop:"clothes"},addTags:{brand:"Maidenform","brand:wikidata":"Q6735419","brand:wikipedia":"en:Maidenform",clothes:"underwear;women",name:"Maidenform",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Mandee":{name:"Mandee",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/shopmandee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q71035705",shop:"clothes"},addTags:{brand:"Mandee","brand:wikidata":"Q71035705",clothes:"women",name:"Mandee",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Mango":{name:"Mango",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/mango.com/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q136503",shop:"clothes"},addTags:{brand:"Mango","brand:wikidata":"Q136503","brand:wikipedia":"en:Mango (retailer)",name:"Mango",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Marc O'Polo":{name:"Marc O'Polo",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/marcopoloru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1892752",shop:"clothes"},addTags:{brand:"Marc O'Polo","brand:wikidata":"Q1892752","brand:wikipedia":"en:Marc O'Polo",name:"Marc O'Polo",shop:"clothes"},countryCodes:["at","be","ch","de","nl","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Marimekko":{name:"Marimekko",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/marimekkodesignhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q534903",shop:"clothes"},addTags:{brand:"Marimekko","brand:wikidata":"Q534903","brand:wikipedia":"fi:Marimekko",name:"Marimekko",shop:"clothes"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Mark Formelle":{name:"Mark Formelle",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/markformelle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25381083",shop:"clothes"},addTags:{brand:"Mark Formelle","brand:wikidata":"Q25381083","brand:wikipedia":"ru:Mark Formelle",name:"Mark Formelle",shop:"clothes"},countryCodes:["by","kz","ru"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Mark's":{name:"Mark's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MarksClothing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6766373",shop:"clothes"},addTags:{brand:"Mark's","brand:wikidata":"Q6766373","brand:wikipedia":"en:Mark's",name:"Mark's",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Massimo Dutti":{name:"Massimo Dutti",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MassimoDuttiOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q788231",shop:"clothes"},addTags:{brand:"Massimo Dutti","brand:wikidata":"Q788231","brand:wikipedia":"en:Massimo Dutti",name:"Massimo Dutti",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Matalan":{name:"Matalan",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/shopmatalan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12061509",shop:"clothes"},addTags:{brand:"Matalan","brand:wikidata":"Q12061509","brand:wikipedia":"en:Matalan",name:"Matalan",shop:"clothes"},countryCodes:["ae","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Maurices":{name:"Maurices",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/maurices/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6793571",shop:"clothes"},addTags:{brand:"Maurices","brand:wikidata":"Q6793571","brand:wikipedia":"en:Maurices",clothes:"women",name:"Maurices",shop:"clothes"},countryCodes:["ca","fr","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Max Mara":{name:"Max Mara",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/maxmara/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1151774",shop:"clothes"},addTags:{brand:"Max Mara","brand:wikidata":"Q1151774","brand:wikipedia":"en:Max Mara",name:"Max Mara",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Melanie Lyne":{name:"Melanie Lyne",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/StyleMelanieLyne/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64861470",shop:"clothes"},addTags:{brand:"Melanie Lyne","brand:wikidata":"Q64861470",clothes:"women",name:"Melanie Lyne",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Men's Wearhouse":{name:"Men's Wearhouse",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MensWearhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57405513",shop:"clothes"},addTags:{brand:"Men's Wearhouse","brand:wikidata":"Q57405513","brand:wikipedia":"en:Men's Wearhouse",clothes:"suits",name:"Men's Wearhouse",shop:"clothes"},countryCodes:["us"],terms:["mens warehouse"],matchScore:2,suggestion:true},"shop/clothes/Mexx":{name:"Mexx",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Mexx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1837290",shop:"clothes"},addTags:{brand:"Mexx","brand:wikidata":"Q1837290","brand:wikipedia":"en:Mexx",name:"Mexx",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Michael Kors":{name:"Michael Kors",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MichaelKors/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19572998",shop:"clothes"},addTags:{brand:"Michael Kors","brand:wikidata":"Q19572998","brand:wikipedia":"en:Capri Holdings",name:"Michael Kors",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Miss Selfridge":{name:"Miss Selfridge",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/missselfridge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6877374",shop:"clothes"},addTags:{brand:"Miss Selfridge","brand:wikidata":"Q6877374","brand:wikipedia":"en:Miss Selfridge",clothes:"women",name:"Miss Selfridge",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Monsoon":{name:"Monsoon",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MonsoonUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65007501",shop:"clothes"},addTags:{brand:"Monsoon","brand:wikidata":"Q65007501",name:"Monsoon",shop:"clothes"},countryCodes:["gb","gg","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Moores":{name:"Moores",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MooresClothing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6908309",shop:"clothes"},addTags:{brand:"Moores","brand:wikidata":"Q6908309","brand:wikipedia":"en:Moores",clothes:"men",name:"Moores",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Moss Bros":{name:"Moss Bros",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Moss/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6916538",shop:"clothes"},addTags:{brand:"Moss Bros","brand:wikidata":"Q6916538","brand:wikipedia":"en:Moss Bros Group",clothes:"men",name:"Moss Bros",shop:"clothes"},countryCodes:["ae","gb","gg","je"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Motherhood Maternity":{name:"Motherhood Maternity",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/motherhoodmaternity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q79051139",shop:"clothes"},addTags:{brand:"Motherhood Maternity","brand:wikidata":"Q79051139",clothes:"maternity",name:"Motherhood Maternity",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Mr Price":{name:"Mr Price",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MRPFASHION/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6929120",shop:"clothes"},addTags:{brand:"Mr Price","brand:wikidata":"Q6929120","brand:wikipedia":"en:Mr. Price",name:"Mr Price",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Mustang":{name:"Mustang",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/mustangjeans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q221562",shop:"clothes"},addTags:{brand:"Mustang","brand:wikidata":"Q221562","brand:wikipedia":"de:Mustang (Jeans)",name:"Mustang",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/NKD":{name:"NKD",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/nkd.friends/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q927272",shop:"clothes"},addTags:{brand:"NKD","brand:wikidata":"Q927272","brand:wikipedia":"de:NKD",name:"NKD",shop:"clothes"},countryCodes:["at","de","it","si"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Naf Naf":{name:"Naf Naf",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/nafnaf.com/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3334188",shop:"clothes"},addTags:{brand:"Naf Naf","brand:wikidata":"Q3334188","brand:wikipedia":"fr:Naf Naf",name:"Naf Naf",shop:"clothes"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Napapijri":{name:"Napapijri",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q2782017",shop:"clothes"},addTags:{brand:"Napapijri","brand:wikidata":"Q2782017","brand:wikipedia":"en:Napapijri",name:"Napapijri",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Nautica":{name:"Nautica",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Nautica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6981479",shop:"clothes"},addTags:{brand:"Nautica","brand:wikidata":"Q6981479","brand:wikipedia":"en:Nautica (clothing company)",name:"Nautica",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/New Look":{name:"New Look",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/newlook/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12063852",shop:"clothes"},addTags:{brand:"New Look","brand:wikidata":"Q12063852","brand:wikipedia":"en:New Look (company)",name:"New Look",shop:"clothes"},countryCodes:["be","de","fr","gb","ie","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/New York & Company":{name:"New York & Company",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/NewYorkandCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7012977",shop:"clothes"},addTags:{brand:"New York & Company","brand:wikidata":"Q7012977","brand:wikipedia":"en:New York & Company",name:"New York & Company",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/New Yorker":{name:"New Yorker",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/NewYorker.Fashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q706421",shop:"clothes"},addTags:{brand:"New Yorker","brand:wikidata":"Q706421","brand:wikipedia":"en:New Yorker (clothing)",name:"New Yorker",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Next":{name:"Next",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/nextofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q246655",shop:"clothes"},addTags:{brand:"Next","brand:wikidata":"Q246655","brand:wikipedia":"en:Next plc",name:"Next",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Nike":{name:"Nike",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/nike/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483915",shop:"clothes"},addTags:{brand:"Nike","brand:wikidata":"Q483915","brand:wikipedia":"en:Nike, Inc.",name:"Nike",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Nordstrom Rack":{name:"Nordstrom Rack",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/NordstromRack/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21463374",shop:"clothes"},addTags:{brand:"Nordstrom Rack","brand:wikidata":"Q21463374","brand:wikipedia":"en:Nordstrom Rack",name:"Nordstrom Rack",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Northern Reflections":{name:"Northern Reflections",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/northernreflections/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65947797",shop:"clothes"},addTags:{brand:"Northern Reflections","brand:wikidata":"Q65947797",name:"Northern Reflections",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/OVS":{name:"OVS",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/OVSGlobalPage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2042514",shop:"clothes"},addTags:{brand:"OVS","brand:wikidata":"Q2042514","brand:wikipedia":"en:OVS (company)",name:"OVS",shop:"clothes"},countryCodes:["at","ch","fr","it","si"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Oasis":{name:"Oasis",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/oasisfashions/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64532852",shop:"clothes"},addTags:{brand:"Oasis","brand:wikidata":"Q64532852",name:"Oasis",shop:"clothes"},countryCodes:["es","gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Okaïdi":{name:"Okaïdi",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/OkaidiWorld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3350027",shop:"clothes"},addTags:{brand:"Okaïdi","brand:wikidata":"Q3350027","brand:wikipedia":"fr:Okaïdi",name:"Okaïdi",shop:"clothes"},countryCodes:["be","ch","es","fr","it","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Old Navy":{name:"Old Navy",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/oldnavy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2735242",shop:"clothes"},addTags:{brand:"Old Navy","brand:wikidata":"Q2735242","brand:wikipedia":"en:Old Navy",name:"Old Navy",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Only":{name:"Only",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ONLY/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61799370",shop:"clothes"},addTags:{brand:"Only","brand:wikidata":"Q61799370",name:"Only",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Orchestra":{name:"Orchestra",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/orchestraUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28042940",shop:"clothes"},addTags:{brand:"Orchestra","brand:wikidata":"Q28042940","brand:wikipedia":"fr:Orchestra Prémaman",name:"Orchestra",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Orsay":{name:"Orsay",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/orsay/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q883245",shop:"clothes"},addTags:{brand:"Orsay","brand:wikidata":"Q883245","brand:wikipedia":"de:Orsay (Modeunternehmen)",name:"Orsay",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Outfit":{name:"Outfit",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/OutfitFashionUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7112061",shop:"clothes"},addTags:{brand:"Outfit","brand:wikidata":"Q7112061","brand:wikipedia":"en:Outfit (retailer)",name:"Outfit",shop:"clothes"},countryCodes:["de","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Oysho":{name:"Oysho",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/OYSHO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3327046",shop:"clothes"},addTags:{brand:"Oysho","brand:wikidata":"Q3327046","brand:wikipedia":"en:Oysho",name:"Oysho",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/PacSun":{name:"PacSun",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/pacsun/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7121857",shop:"clothes"},addTags:{brand:"PacSun","brand:wikidata":"Q7121857","brand:wikipedia":"en:PacSun",name:"PacSun",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Palmers":{name:"Palmers",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/palmers.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1509985",shop:"clothes"},addTags:{brand:"Palmers","brand:wikidata":"Q1509985","brand:wikipedia":"de:Palmers",name:"Palmers",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Peacocks":{name:"Peacocks",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/peacocksclothing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7157762",shop:"clothes"},addTags:{brand:"Peacocks","brand:wikidata":"Q7157762","brand:wikipedia":"en:Peacocks (clothing)",name:"Peacocks",shop:"clothes"},countryCodes:["cy","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Peek & Cloppenburg":{name:"Peek & Cloppenburg",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/peekcloppenburg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2066959",shop:"clothes"},addTags:{brand:"Peek & Cloppenburg","brand:wikidata":"Q2066959","brand:wikipedia":"en:Peek & Cloppenburg",name:"Peek & Cloppenburg",shop:"clothes"},countryCodes:["at","be","de","nl","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Penningtons":{name:"Penningtons",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/penningtons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16956527",shop:"clothes"},addTags:{brand:"Penningtons","brand:wikidata":"Q16956527","brand:wikipedia":"en:Penningtons",clothes:"women",name:"Penningtons",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Pep":{name:"Pep",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/PEPSocial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7166182",shop:"clothes"},addTags:{brand:"Pep","brand:wikidata":"Q7166182","brand:wikipedia":"en:Pep (store)",name:"Pep",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Pep&Co":{name:"Pep&Co",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/pepandco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24908166",shop:"clothes"},addTags:{brand:"Pep&Co","brand:wikidata":"Q24908166","brand:wikipedia":"en:Pep&Co",name:"Pep&Co",shop:"clothes"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Pepco":{name:"Pepco",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/PEPCOpl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11815580",shop:"clothes"},addTags:{brand:"Pepco","brand:wikidata":"Q11815580","brand:wikipedia":"pl:Pepco",name:"Pepco",shop:"clothes"},countryCodes:["cz","hu","pl","ro","sk"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Pepe Jeans":{name:"Pepe Jeans",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/PepeJeans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q426992",shop:"clothes"},addTags:{brand:"Pepe Jeans","brand:wikidata":"Q426992","brand:wikipedia":"en:Pepe Jeans",name:"Pepe Jeans",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Petit Bateau":{name:"Petit Bateau",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/petitbateauus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3377090",shop:"clothes"},addTags:{brand:"Petit Bateau","brand:wikidata":"Q3377090","brand:wikipedia":"en:Petit Bateau",name:"Petit Bateau",shop:"clothes"},countryCodes:["be","de","fr","gb","it","lu"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Phase Eight":{name:"Phase Eight",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/phaseeight/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17020730",shop:"clothes"},addTags:{brand:"Phase Eight","brand:wikidata":"Q17020730","brand:wikipedia":"en:Phase Eight",name:"Phase Eight",shop:"clothes"},countryCodes:["ch","de","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Piazza Italia":{name:"Piazza Italia",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/piazzaitaliaofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3902241",shop:"clothes"},addTags:{brand:"Piazza Italia","brand:wikidata":"Q3902241","brand:wikipedia":"it:Piazza Italia (azienda)",name:"Piazza Italia",shop:"clothes"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Pierre Cardin":{name:"Pierre Cardin",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/PIERRECARDINOFFICIAL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22921009",shop:"clothes"},addTags:{brand:"Pierre Cardin","brand:wikidata":"Q22921009",name:"Pierre Cardin",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Pimkie":{name:"Pimkie",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Pimkie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1758066",shop:"clothes"},addTags:{brand:"Pimkie","brand:wikidata":"Q1758066","brand:wikipedia":"en:Pimkie",name:"Pimkie",shop:"clothes"},countryCodes:["at","be","de","es","fr","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Pink":{name:"Pink",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/vspink/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20716793",shop:"clothes"},addTags:{brand:"Pink","brand:wikidata":"Q20716793","brand:wikipedia":"en:Pink (Victoria's Secret)",clothes:"underwear;women",name:"Pink",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Plato's Closet":{name:"Plato's Closet",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/platoscloset/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61779112",shop:"clothes"},addTags:{brand:"Plato's Closet","brand:wikidata":"Q61779112",name:"Plato's Closet",second_hand:"only",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Polo Ralph Lauren":{name:"Polo Ralph Lauren",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/RalphLauren/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1641437",shop:"clothes"},addTags:{brand:"Polo Ralph Lauren","brand:wikidata":"Q1641437","brand:wikipedia":"en:Ralph Lauren Corporation",name:"Polo Ralph Lauren",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Prada":{name:"Prada",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Prada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q193136",shop:"clothes"},addTags:{brand:"Prada","brand:wikidata":"Q193136","brand:wikipedia":"en:Prada",name:"Prada",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Primark":{name:"Primark",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Primark/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q137023",shop:"clothes"},addTags:{brand:"Primark","brand:wikidata":"Q137023","brand:wikipedia":"en:Primark",name:"Primark",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Promod":{name:"Promod",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Promod/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3407429",shop:"clothes"},addTags:{brand:"Promod","brand:wikidata":"Q3407429","brand:wikipedia":"en:Promod",name:"Promod",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Pull & Bear":{name:"Pull & Bear",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/pullandbear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q691029",shop:"clothes"},addTags:{brand:"Pull & Bear","brand:wikidata":"Q691029","brand:wikipedia":"en:Pull&Bear",name:"Pull & Bear",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Puma":{name:"Puma",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/PUMA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157064",shop:"clothes"},addTags:{brand:"Puma","brand:wikidata":"Q157064","brand:wikipedia":"en:Puma (brand)",name:"Puma",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Quiksilver":{name:"Quiksilver",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/quiksilver/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1329463",shop:"clothes"},addTags:{brand:"Quiksilver","brand:wikidata":"Q1329463","brand:wikipedia":"en:Quiksilver",name:"Quiksilver",shop:"clothes"},terms:["quicksilver"],matchScore:2,suggestion:true},"shop/clothes/Quiz":{name:"Quiz",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/887970746378727426/apda4Qe9_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q29995941",shop:"clothes"},addTags:{brand:"Quiz","brand:wikidata":"Q29995941","brand:wikipedia":"en:Quiz (clothing)",clothes:"women",name:"Quiz",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/RW&CO.":{name:"RW&CO.",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/RWandCO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65965663",shop:"clothes"},addTags:{brand:"RW&CO.","brand:wikidata":"Q65965663",clothes:"women;men",name:"RW&CO.",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Rainbow":{name:"Rainbow",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/RainbowApparel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7284708",shop:"clothes"},addTags:{brand:"Rainbow","brand:wikidata":"Q7284708","brand:wikipedia":"en:Rainbow Shops",name:"Rainbow",shop:"clothes"},countryCodes:["de","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Reebok":{name:"Reebok",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ReebokUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q466183",shop:"clothes"},addTags:{brand:"Reebok","brand:wikidata":"Q466183","brand:wikipedia":"en:Reebok",name:"Reebok",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Reiss":{name:"Reiss",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Reiss/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7310479",shop:"clothes"},addTags:{brand:"Reiss","brand:wikidata":"Q7310479","brand:wikipedia":"en:Reiss (brand)",name:"Reiss",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Reitmans":{name:"Reitmans",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/reitmans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7310506",shop:"clothes"},addTags:{brand:"Reitmans","brand:wikidata":"Q7310506","brand:wikipedia":"en:Reitmans",name:"Reitmans",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Reserved":{name:"Reserved",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Reserved/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21809354",shop:"clothes"},addTags:{brand:"Reserved","brand:wikidata":"Q21809354","brand:wikipedia":"en:Reserved",name:"Reserved",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Ricki's":{name:"Ricki's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Rickis.Sizes0to18/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65947929",shop:"clothes"},addTags:{brand:"Ricki's","brand:wikidata":"Q65947929",clothes:"women",name:"Ricki's",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/River Island":{name:"River Island",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/riverisland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2670328",shop:"clothes"},addTags:{brand:"River Island","brand:wikidata":"Q2670328","brand:wikipedia":"en:River Island",name:"River Island",shop:"clothes"},countryCodes:["gb","ie","im","nl","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Robert Graham":{name:"Robert Graham",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/robertgrahamnyc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18390679",shop:"clothes"},addTags:{brand:"Robert Graham","brand:wikidata":"Q18390679","brand:wikipedia":"en:Robert Graham (fashion brand)",clothes:"men",name:"Robert Graham",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Roots":{name:"Roots",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/roots/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7366633",shop:"clothes"},addTags:{brand:"Roots","brand:wikidata":"Q7366633","brand:wikipedia":"en:Roots Canada",name:"Roots",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Saint Laurent":{name:"Saint Laurent",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ysl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2282172",shop:"clothes"},addTags:{alt_name:"Yves Saint Laurent",brand:"Saint Laurent","brand:wikidata":"Q2282172","brand:wikipedia":"en:Yves Saint Laurent (brand)",name:"Saint Laurent",shop:"clothes",short_name:"YSL"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Saltrock":{name:"Saltrock",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/saltrocksoul/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7406195",shop:"clothes"},addTags:{brand:"Saltrock","brand:wikidata":"Q7406195","brand:wikipedia":"en:Saltrock",name:"Saltrock",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Scotch & Soda":{name:"Scotch & Soda",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FScotch%20and%20Soda%20logo.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q17141914",shop:"clothes"},addTags:{brand:"Scotch & Soda","brand:wikidata":"Q17141914","brand:wikipedia":"en:Scotch and Soda (clothing)",name:"Scotch & Soda",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Sela":{name:"Sela",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/sela.shop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075111",shop:"clothes"},addTags:{brand:"Sela","brand:wikidata":"Q62075111",name:"Sela",shop:"clothes"},countryCodes:["kg","ru"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Sergent Major":{name:"Sergent Major",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/sergent.major.officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62521738",shop:"clothes"},addTags:{brand:"Sergent Major","brand:wikidata":"Q62521738","brand:wikipedia":"fr:Sergent Major (entreprise)",clothes:"babies;children",name:"Sergent Major",shop:"clothes"},countryCodes:["be","de","es","fr","gb","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Sisley":{name:"Sisley",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Sisley/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12054325",shop:"clothes"},addTags:{brand:"Sisley","brand:wikidata":"Q12054325","brand:wikipedia":"cs:Sisley",name:"Sisley",shop:"clothes"},countryCodes:["at","ch","de","hr","it","ru"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Slaters":{name:"Slaters",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Slatermenswear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7538912",shop:"clothes"},addTags:{brand:"Slaters","brand:wikidata":"Q7538912","brand:wikipedia":"en:Slater Menswear",clothes:"suits",name:"Slaters",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Soma":{name:"Soma",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/SomaIntimates/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q69882213",shop:"clothes"},addTags:{alt_name:"Soma Intimates",brand:"Soma","brand:wikidata":"Q69882213",clothes:"underwear;women",name:"Soma",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Spanx":{name:"Spanx",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/SPANX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1932886",shop:"clothes"},addTags:{brand:"Spanx","brand:wikidata":"Q1932886","brand:wikipedia":"en:Spanx",clothes:"underwear",name:"Spanx",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Springfield":{name:"Springfield",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Springfield/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q958209",shop:"clothes"},addTags:{brand:"Springfield","brand:wikidata":"Q958209","brand:wikipedia":"es:Springfield (cadena de tiendas)",name:"Springfield",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Stefanel":{name:"Stefanel",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Stefanel.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2338087",shop:"clothes"},addTags:{brand:"Stefanel","brand:wikidata":"Q2338087","brand:wikipedia":"ro:Stefanel (companie)",name:"Stefanel",shop:"clothes"},countryCodes:["at","de","fr","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Stitches":{name:"Stitches",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/stitchescanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7617652",shop:"clothes"},addTags:{brand:"Stitches","brand:wikidata":"Q7617652","brand:wikipedia":"en:Stitches (store)",name:"Stitches",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Stradivarius":{name:"Stradivarius",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/stradivas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3322945",shop:"clothes"},addTags:{brand:"Stradivarius","brand:wikidata":"Q3322945","brand:wikipedia":"en:Stradivarius (clothing brand)",name:"Stradivarius",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Street One":{name:"Street One",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MyStreetOne/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61997265",shop:"clothes"},addTags:{brand:"Street One","brand:wikidata":"Q61997265",name:"Street One",shop:"clothes"},countryCodes:["at","be","ch","de","dk","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Suburbia":{name:"Suburbia",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/moda.suburbia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6134992",shop:"clothes"},addTags:{brand:"Suburbia","brand:wikidata":"Q6134992","brand:wikipedia":"en:Suburbia (department store)",name:"Suburbia",shop:"clothes"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Superdry":{name:"Superdry",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/SuperdryUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1684445",shop:"clothes"},addTags:{brand:"Superdry","brand:wikidata":"Q1684445","brand:wikipedia":"en:Superdry",name:"Superdry",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Suzy Shier":{name:"Suzy Shier",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/SuzyShierCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65464976",shop:"clothes"},addTags:{brand:"Suzy Shier","brand:wikidata":"Q65464976",clothes:"women",name:"Suzy Shier",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/T.M.Lewin":{name:"T.M.Lewin",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/T.M.Lewin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16933755",shop:"clothes"},addTags:{brand:"T.M.Lewin","brand:wikidata":"Q16933755","brand:wikipedia":"en:T. M. Lewin",name:"T.M.Lewin",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Takko":{name:"Takko",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/TakkoFashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1371302",shop:"clothes"},addTags:{brand:"Takko","brand:wikidata":"Q1371302","brand:wikipedia":"de:Takko",name:"Takko",shop:"clothes"},countryCodes:["at","cz","de","hu","nl"],terms:["takko fashion"],matchScore:2,suggestion:true},"shop/clothes/Talbots":{name:"Talbots",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/TALBOTS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7679064",shop:"clothes"},addTags:{brand:"Talbots","brand:wikidata":"Q7679064","brand:wikipedia":"en:Talbots",name:"Talbots",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Tally Weijl":{name:"Tally Weijl",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/TALLYWEiJL.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q689695",shop:"clothes"},addTags:{brand:"Tally Weijl","brand:wikidata":"Q689695","brand:wikipedia":"en:Tally Weijl",name:"Tally Weijl",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Tati":{name:"Tati",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Tati/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3516026",shop:"clothes"},addTags:{brand:"Tati","brand:wikidata":"Q3516026","brand:wikipedia":"fr:Tati (entreprise)",name:"Tati",shop:"clothes"},countryCodes:["dz","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ted Baker":{name:"Ted Baker",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1156016837466849280/kWtJhyL7_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2913458",shop:"clothes"},addTags:{brand:"Ted Baker","brand:wikidata":"Q2913458","brand:wikipedia":"en:Ted Baker",name:"Ted Baker",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Tezenis":{name:"Tezenis",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/tezenis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28056374",shop:"clothes"},addTags:{brand:"Tezenis","brand:wikidata":"Q28056374",name:"Tezenis",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/The Children's Place":{name:"The Children's Place",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/childrensplace/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3520257",shop:"clothes"},addTags:{alt_name:"Children's Place",brand:"The Children's Place","brand:wikidata":"Q3520257","brand:wikipedia":"en:The Children's Place",name:"The Children's Place",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/The Kooples":{name:"The Kooples",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/thekooples/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3521493",shop:"clothes"},addTags:{brand:"The Kooples","brand:wikidata":"Q3521493","brand:wikipedia":"fr:The Kooples",name:"The Kooples",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/The North Face":{name:"The North Face",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/thenorthface/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q152784",shop:"clothes"},addTags:{alt_name:"North Face",brand:"The North Face","brand:wikidata":"Q152784","brand:wikipedia":"en:The North Face",name:"The North Face",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/The Sting":{name:"The Sting",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/thesting.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2518794",shop:"clothes"},addTags:{brand:"The Sting","brand:wikidata":"Q2518794","brand:wikipedia":"nl:The Sting Companies",name:"The Sting",shop:"clothes"},countryCodes:["be","de","gb","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/The Walking Company":{name:"The Walking Company",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/TheWalkingCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30716262",shop:"clothes"},addTags:{alt_name:"Walking Company",brand:"The Walking Company","brand:wikidata":"Q30716262","brand:wikipedia":"en:The Walking Company",name:"The Walking Company",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Thyme Maternity":{name:"Thyme Maternity",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ThymeMaternity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17033572",shop:"clothes"},addTags:{brand:"Thyme Maternity","brand:wikidata":"Q17033572","brand:wikipedia":"en:Thyme Maternity",clothes:"maternity",name:"Thyme Maternity",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Tillys":{name:"Tillys",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Tillys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7802889",shop:"clothes"},addTags:{brand:"Tillys","brand:wikidata":"Q7802889","brand:wikipedia":"en:Tillys",clothes:"children;men;women",name:"Tillys",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Timberland":{name:"Timberland",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/timberland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1539185",shop:"clothes"},addTags:{brand:"Timberland","brand:wikidata":"Q1539185","brand:wikipedia":"en:The Timberland Company",name:"Timberland",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Tip Top Tailors":{name:"Tip Top Tailors",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/TipTopTailors/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7808781",shop:"clothes"},addTags:{brand:"Tip Top Tailors","brand:wikidata":"Q7808781","brand:wikipedia":"en:Tip Top Tailors",clothes:"men",name:"Tip Top Tailors",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Tom Tailor":{name:"Tom Tailor",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/tomtailor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q571206",shop:"clothes"},addTags:{brand:"Tom Tailor","brand:wikidata":"Q571206","brand:wikipedia":"en:Tom Tailor",name:"Tom Tailor",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Tommy Bahama":{name:"Tommy Bahama",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/tommybahama/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3531299",shop:"clothes"},addTags:{brand:"Tommy Bahama","brand:wikidata":"Q3531299","brand:wikipedia":"en:Tommy Bahama",name:"Tommy Bahama",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Tommy Hilfiger":{name:"Tommy Hilfiger",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/tommyhilfiger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q634881",shop:"clothes"},addTags:{brand:"Tommy Hilfiger","brand:wikidata":"Q634881","brand:wikipedia":"en:Tommy Hilfiger (company)",name:"Tommy Hilfiger",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Topman":{name:"Topman",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/topmanus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1090880",shop:"clothes"},addTags:{brand:"Topman","brand:wikidata":"Q1090880","brand:wikipedia":"en:Topman",clothes:"men",name:"Topman",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Topshop":{name:"Topshop",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/227518370711659/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1893576",shop:"clothes"},addTags:{brand:"Topshop","brand:wikidata":"Q1893576","brand:wikipedia":"en:Topshop",clothes:"women",name:"Topshop",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Torrid":{name:"Torrid",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Torrid/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7827120",shop:"clothes"},addTags:{brand:"Torrid","brand:wikidata":"Q7827120","brand:wikipedia":"en:Torrid (clothing retailer)",name:"Torrid",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Tory Burch":{name:"Tory Burch",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/toryburch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19988222",shop:"clothes"},addTags:{brand:"Tory Burch","brand:wikidata":"Q19988222","brand:wikipedia":"en:Tory Burch (company)",name:"Tory Burch",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Triumph":{name:"Triumph",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/TriumphInternationalUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q671216",shop:"clothes"},addTags:{brand:"Triumph","brand:wikidata":"Q671216","brand:wikipedia":"en:Triumph International",name:"Triumph",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Truworths":{name:"Truworths",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/TruworthsFashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24233998",shop:"clothes"},addTags:{brand:"Truworths","brand:wikidata":"Q24233998","brand:wikipedia":"en:Truworths",name:"Truworths",shop:"clothes"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"shop/clothes/UNTUCKit":{name:"UNTUCKit",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/UNTUCKit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28207006",shop:"clothes"},addTags:{brand:"UNTUCKit","brand:wikidata":"Q28207006","brand:wikipedia":"en:Untuckit",name:"UNTUCKit",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/USC":{name:"USC",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/uscfashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7866331",shop:"clothes"},addTags:{brand:"USC","brand:wikidata":"Q7866331","brand:wikipedia":"en:USC (clothing retailer)",name:"USC",shop:"clothes"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ulla Popken":{name:"Ulla Popken",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ulla.popken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2475146",shop:"clothes"},addTags:{brand:"Ulla Popken","brand:wikidata":"Q2475146","brand:wikipedia":"en:Ulla Popken",name:"Ulla Popken",shop:"clothes"},countryCodes:["at","be","ch","de","fr","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Under Armour":{name:"Under Armour",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/UnderArmour/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2031485",shop:"clothes"},addTags:{brand:"Under Armour","brand:wikidata":"Q2031485","brand:wikipedia":"en:Under Armour",clothes:"men;women",name:"Under Armour",shop:"clothes"},terms:["under armor"],matchScore:2,suggestion:true},"shop/clothes/Uniqlo":{name:"Uniqlo",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/uniqlo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26070",shop:"clothes"},addTags:{brand:"Uniqlo","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"Uniqlo",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/United Colors of Benetton":{name:"United Colors of Benetton",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BenettonUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q817139",shop:"clothes"},addTags:{brand:"United Colors of Benetton","brand:wikidata":"Q817139","brand:wikipedia":"en:Benetton Group",name:"United Colors of Benetton",shop:"clothes",short_name:"Benetton"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Urban Outfitters":{name:"Urban Outfitters",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/urbanoutfitters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3552193",shop:"clothes"},addTags:{brand:"Urban Outfitters","brand:wikidata":"Q3552193","brand:wikipedia":"en:Urban Outfitters",name:"Urban Outfitters",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/V.I.M.":{name:"V.I.M.",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/VIM.STORES/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q71042495",shop:"clothes"},addTags:{brand:"V.I.M.","brand:wikidata":"Q71042495",clothes:"children;men;women",name:"V.I.M.",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Van Heusen":{name:"Van Heusen",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q7913397",shop:"clothes"},addTags:{brand:"Van Heusen","brand:wikidata":"Q7913397","brand:wikipedia":"en:Van Heusen",clothes:"men",name:"Van Heusen",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Vero Moda":{name:"Vero Moda",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bestsellercom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q594721",shop:"clothes"},addTags:{brand:"Vero Moda","brand:wikidata":"Q594721","brand:wikipedia":"en:Bestseller (company)",name:"Vero Moda",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Victoria's Secret":{name:"Victoria's Secret",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/victoriassecret/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q332477",shop:"clothes"},addTags:{brand:"Victoria's Secret","brand:wikidata":"Q332477","brand:wikipedia":"en:Victoria's Secret",clothes:"underwear;women",name:"Victoria's Secret",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Vilebrequin":{name:"Vilebrequin",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/VILEBREQUIN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3558391",shop:"clothes"},addTags:{brand:"Vilebrequin","brand:wikidata":"Q3558391","brand:wikipedia":"en:Vilebrequin",clothes:"swimwear",name:"Vilebrequin",shop:"clothes"},countryCodes:["fr","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Vineyard Vines":{name:"Vineyard Vines",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/vineyardvines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7932495",shop:"clothes"},addTags:{brand:"Vineyard Vines","brand:wikidata":"Q7932495","brand:wikipedia":"en:Vineyard Vines",name:"Vineyard Vines",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Volcom":{name:"Volcom",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Volcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2021416",shop:"clothes"},addTags:{brand:"Volcom","brand:wikidata":"Q2021416","brand:wikipedia":"en:Volcom",name:"Volcom",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/WE":{name:"WE",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/weeurope/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1987861",shop:"clothes"},addTags:{brand:"WE","brand:wikidata":"Q1987861","brand:wikipedia":"en:WE (clothing)",name:"WE",shop:"clothes"},countryCodes:["be","ch","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Wacoal":{name:"Wacoal",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/wacoal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q909522",shop:"clothes"},addTags:{brand:"Wacoal","brand:wikidata":"Q909522","brand:wikipedia":"en:Wacoal",clothes:"underwear",name:"Wacoal",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Wallis":{name:"Wallis",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Wallis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7963123",shop:"clothes"},addTags:{brand:"Wallis","brand:wikidata":"Q7963123","brand:wikipedia":"en:Wallis (retailer)",name:"Wallis",shop:"clothes"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Warehouse":{name:"Warehouse",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/WarehouseFashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28135370",shop:"clothes"},addTags:{brand:"Warehouse","brand:wikidata":"Q28135370",name:"Warehouse",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/West 49":{name:"West 49",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/west49/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7984218",shop:"clothes"},addTags:{brand:"West 49","brand:wikidata":"Q7984218","brand:wikipedia":"en:West 49",name:"West 49",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/White House Black Market":{name:"White House Black Market",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/WhiteHouseBlackMarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7994858",shop:"clothes"},addTags:{brand:"White House Black Market","brand:wikidata":"Q7994858","brand:wikipedia":"en:White House Black Market",name:"White House Black Market",shop:"clothes"},countryCodes:["ca","us"],terms:["white house | black market"],matchScore:2,suggestion:true},"shop/clothes/White Stuff":{name:"White Stuff",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/WhiteStuffUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7995442",shop:"clothes"},addTags:{brand:"White Stuff","brand:wikidata":"Q7995442","brand:wikipedia":"en:White Stuff Clothing",name:"White Stuff",shop:"clothes"},countryCodes:["de","dk","gb","gg"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Wibra":{name:"Wibra",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/WibraBelgie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q943405",shop:"clothes"},addTags:{brand:"Wibra","brand:wikidata":"Q943405","brand:wikipedia":"en:Wibra",name:"Wibra",shop:"clothes"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Wilsons Leather":{name:"Wilsons Leather",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/wilsonsleather/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8023296",shop:"clothes"},addTags:{brand:"Wilsons Leather","brand:wikidata":"Q8023296","brand:wikipedia":"en:Wilsons Leather",clothes:"men;women",name:"Wilsons Leather",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Windsor":{name:"Windsor",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Windsorstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72981668",shop:"clothes"},addTags:{brand:"Windsor","brand:wikidata":"Q72981668",clothes:"women",name:"Windsor",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Winners":{name:"Winners",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Winners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q845257",shop:"clothes"},addTags:{brand:"Winners","brand:wikidata":"Q845257","brand:wikipedia":"en:Winners",name:"Winners",shop:"clothes"},countryCodes:["ca","es"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Wolford":{name:"Wolford",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/WolfordFashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q431607",shop:"clothes"},addTags:{brand:"Wolford","brand:wikidata":"Q431607","brand:wikipedia":"en:Wolford",name:"Wolford",shop:"clothes"},countryCodes:["at","de","fr","gb","it","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Women'secret":{name:"Women'secret",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/WomenSecret/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16648226",shop:"clothes"},addTags:{brand:"Women'secret","brand:wikidata":"Q16648226","brand:wikipedia":"es:Women'secret",clothes:"underwear;women",name:"Women'secret",shop:"clothes"},terms:["women's secret"],matchScore:2,suggestion:true},"shop/clothes/Woolworths":{name:"Woolworths",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/WoolworthsSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8033997",shop:"clothes"},addTags:{brand:"Woolworths","brand:wikidata":"Q8033997","brand:wikipedia":"en:Woolworths Holdings Limited",name:"Woolworths",shop:"clothes"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"shop/clothes/XIOS":{name:"XIOS",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/xiosamerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66149584",shop:"clothes"},addTags:{brand:"XIOS","brand:wikidata":"Q66149584",clothes:"men",name:"XIOS",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/XXI Forever":{name:"XXI Forever",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Forever21/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1060537",shop:"clothes"},addTags:{brand:"Forever 21","brand:wikidata":"Q1060537","brand:wikipedia":"en:Forever 21",name:"XXI Forever",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Yamamay":{name:"Yamamay",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/YamamayOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2599214",shop:"clothes"},addTags:{brand:"Yamamay","brand:wikidata":"Q2599214","brand:wikipedia":"it:Yamamay",name:"Yamamay",shop:"clothes"},countryCodes:["es","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Zara":{name:"Zara",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/zara/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q147662",shop:"clothes"},addTags:{brand:"Zara","brand:wikidata":"Q147662","brand:wikipedia":"en:Zara (retailer)",name:"Zara",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Zeeman":{name:"Zeeman",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/zeemantextielsupers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q184399",shop:"clothes"},addTags:{brand:"Zeeman","brand:wikidata":"Q184399","brand:wikipedia":"en:Zeeman (store)",name:"Zeeman",shop:"clothes"},countryCodes:["be","de","fr","lu","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Zumiez":{name:"Zumiez",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/zumiez/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8075252",shop:"clothes"},addTags:{brand:"Zumiez","brand:wikidata":"Q8075252","brand:wikipedia":"en:Zumiez",name:"Zumiez",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/mister*lady":{name:"mister*lady",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/misterlady.community/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18640136",shop:"clothes"},addTags:{brand:"mister*lady","brand:wikidata":"Q18640136","brand:wikipedia":"de:Mister*lady",name:"mister*lady",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/rue21":{name:"rue21",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/rue21/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7377762",shop:"clothes"},addTags:{brand:"rue21","brand:wikidata":"Q7377762","brand:wikipedia":"en:Rue21",name:"rue21",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/s.Oliver":{name:"s.Oliver",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/s.OliverGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q265056",shop:"clothes"},addTags:{brand:"s.Oliver","brand:wikidata":"Q265056","brand:wikipedia":"en:S.Oliver",name:"s.Oliver",shop:"clothes"},countryCodes:["at","be","de","fr","hr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/しまむら":{name:"しまむら",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/shimamuragroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7758173",shop:"clothes"},addTags:{brand:"しまむら","brand:en":"Shimamura","brand:ja":"しまむら","brand:wikidata":"Q7758173","brand:wikipedia":"ja:しまむら",name:"しまむら","name:en":"Shimamura","name:ja":"しまむら",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/はるやま":{name:"はるやま",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/haruyama.co.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11275918",shop:"clothes"},addTags:{brand:"はるやま","brand:en":"Haruyama","brand:ja":"はるやま","brand:wikidata":"Q11275918","brand:wikipedia":"ja:はるやま商事",name:"はるやま","name:en":"Haruyama","name:ja":"はるやま",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/コナカ":{name:"コナカ",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKonaka%20yokohama.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11302278",shop:"clothes"},addTags:{brand:"コナカ","brand:en":"Konaka","brand:ja":"コナカ","brand:wikidata":"Q11302278","brand:wikipedia":"jp:コナカ",name:"コナカ","name:en":"Konaka","name:ja":"コナカ",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/ユニクロ":{name:"ユニクロ",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/uniqlo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26070",shop:"clothes"},addTags:{brand:"ユニクロ","brand:en":"UNIQLO","brand:ja":"ユニクロ","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"ユニクロ","name:en":"UNIQLO","name:ja":"ユニクロ",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/ライトオン":{name:"ライトオン",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/righton.co.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11346416",shop:"clothes"},addTags:{brand:"ライトオン","brand:en":"Right-on","brand:ja":"ライトオン","brand:wikidata":"Q11346416","brand:wikipedia":"ja:ライトオン",name:"ライトオン","name:en":"Right-on","name:ja":"ライトオン",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/ワークマン":{name:"ワークマン",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/306869439836144/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11351660",shop:"clothes"},addTags:{brand:"ワークマン","brand:en":"Workman","brand:ja":"ワークマン","brand:wikidata":"Q11351660","brand:wikipedia":"ja:ワークマン",name:"ワークマン","name:en":"Workman","name:ja":"ワークマン",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/洋服の青山":{name:"洋服の青山",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/AoyamaOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11661241",shop:"clothes"},addTags:{brand:"洋服の青山","brand:en":"Aoyama Tailor","brand:ja":"洋服の青山","brand:wikidata":"Q11661241","brand:wikipedia":"ja:青山商事",name:"洋服の青山","name:en":"Aoyama Tailor","name:ja":"洋服の青山",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/coffee/Nespresso":{name:"Nespresso",icon:"temaki-coffee",imageURL:"https://graph.facebook.com/nespresso/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q301301",shop:"coffee"},addTags:{brand:"Nespresso","brand:wikidata":"Q301301","brand:wikipedia":"en:Nespresso",name:"Nespresso",shop:"coffee"},terms:[],matchScore:2,suggestion:true},"shop/coffee/Tchibo":{name:"Tchibo",icon:"temaki-coffee",imageURL:"https://graph.facebook.com/tchibo.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q564213",shop:"coffee"},addTags:{brand:"Tchibo","brand:wikidata":"Q564213","brand:wikipedia":"de:Tchibo",name:"Tchibo",shop:"coffee"},countryCodes:["at","ch","cz","de","pl","sk"],terms:[],matchScore:2,suggestion:true},"shop/computer/DNS":{name:"DNS",icon:"fas-laptop",imageURL:"https://graph.facebook.com/dnsshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4036922",shop:"computer"},addTags:{alt_name:"ДНС",brand:"DNS","brand:en":"DNS","brand:ru":"ДНС","brand:wikidata":"Q4036922","brand:wikipedia":"ru:DNS (компания)",name:"DNS","name:en":"DNS","name:ru":"ДНС",shop:"computer"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/computer/PCデポ":{name:"PCデポ",icon:"fas-laptop",geometry:["point","area"],tags:{"brand:wikidata":"Q11331723",shop:"computer"},addTags:{brand:"PCデポ","brand:en":"PC Depot","brand:ja":"PCデポ","brand:wikidata":"Q11331723","brand:wikipedia":"ja:ピーシーデポコーポレーション",name:"PCデポ","name:en":"PC Depot","name:ja":"PCデポ",shop:"computer"},countryCodes:["jp"],terms:["pc depot","ピーシーデポ"],matchScore:2,suggestion:true},"shop/computer/じゃんぱら":{name:"じゃんぱら",icon:"fas-laptop",imageURL:"https://graph.facebook.com/janparapr01/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11306198",shop:"computer"},addTags:{brand:"じゃんぱら","brand:en":"Janpara","brand:ja":"じゃんぱら","brand:wikidata":"Q11306198","brand:wikipedia":"ja:じゃんぱら",name:"じゃんぱら","name:en":"Janpara","name:ja":"じゃんぱら",shop:"computer"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Adyar Ananda Bhavan":{name:"Adyar Ananda Bhavan",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/a2b.officialpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15178238",shop:"confectionery"},addTags:{brand:"Adyar Ananda Bhavan","brand:wikidata":"Q15178238","brand:wikipedia":"en:Adyar Ananda Bhavan",name:"Adyar Ananda Bhavan",shop:"confectionery"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Hemmakvall":{name:"Hemmakvall",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/hemmakvall/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10521791",shop:"confectionery"},addTags:{brand:"Hemmakväll","brand:wikidata":"Q10521791","brand:wikipedia":"sv:Hemmakväll",name:"Hemmakväll",shop:"confectionery"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Hotel Chocolat":{name:"Hotel Chocolat",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/HotelChocolat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5911369",shop:"confectionery"},addTags:{brand:"Hotel Chocolat","brand:wikidata":"Q5911369","brand:wikipedia":"en:Hotel Chocolat",name:"Hotel Chocolat",shop:"confectionery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Hussel":{name:"Hussel",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/HusselConfiserie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17123688",shop:"confectionery"},addTags:{brand:"Hussel","brand:wikidata":"Q17123688","brand:wikipedia":"de:Hussel",name:"Hussel",shop:"confectionery"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Jamin":{name:"Jamin",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/jaminonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2291848",shop:"confectionery"},addTags:{brand:"Jamin","brand:wikidata":"Q2291848","brand:wikipedia":"nl:Jamin",name:"Jamin",shop:"confectionery"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Kilwins":{name:"Kilwins",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/KilwinsChocolatesFudgeandIceCream/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38250832",shop:"confectionery"},addTags:{brand:"Kilwins","brand:wikidata":"Q38250832","brand:wikipedia":"en:Kilwins",cuisine:"chocolate;ice_cream;popcorn",name:"Kilwins",shop:"confectionery"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Rocky Mountain Chocolate Factory":{name:"Rocky Mountain Chocolate Factory",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/myrmcf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7355878",shop:"confectionery"},addTags:{brand:"Rocky Mountain Chocolate Factory","brand:wikidata":"Q7355878","brand:wikipedia":"en:Rocky Mountain Chocolate Factory",name:"Rocky Mountain Chocolate Factory",shop:"confectionery"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/See's Candies":{name:"See's Candies",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/Sees.Candies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2103510",shop:"confectionery"},addTags:{brand:"See's Candies","brand:wikidata":"Q2103510","brand:wikipedia":"en:See's Candies",name:"See's Candies",shop:"confectionery"},countryCodes:["us"],terms:["sees candy"],matchScore:2,suggestion:true},"shop/confectionery/Thorntons":{name:"Thorntons",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/Thorntons.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q683102",shop:"confectionery"},addTags:{brand:"Thorntons","brand:wikidata":"Q683102","brand:wikipedia":"en:Thorntons",name:"Thorntons",shop:"confectionery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Вацак":{name:"Вацак",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/Vatsak.KD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30966576",shop:"confectionery"},addTags:{brand:"Вацак","brand:wikidata":"Q30966576","brand:wikipedia":"uk:Кондитерський Дім «Вацак»",name:"Вацак",shop:"confectionery"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/シャトレーゼ":{name:"シャトレーゼ",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/chateraise.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11307696",shop:"confectionery"},addTags:{brand:"シャトレーゼ","brand:en":"Chateraise","brand:ja":"シャトレーゼ","brand:wikidata":"Q11307696","brand:wikipedia":"ja:シャトレーゼ",name:"シャトレーゼ","name:en":"Chateraise","name:ja":"シャトレーゼ",shop:"confectionery"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/不二家":{name:"不二家",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/FUJIYA.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q858452",shop:"confectionery"},addTags:{brand:"不二家","brand:en":"Fujiya","brand:ja":"不二家","brand:wikidata":"Q858452","brand:wikipedia":"ja:不二家",name:"不二家","name:en":"Fujiya","name:ja":"不二家",shop:"confectionery"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/10-11":{name:"10-11",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q65336720",shop:"convenience"},addTags:{brand:"10-11","brand:wikidata":"Q65336720","brand:wikipedia":"is:10-11",name:"10-11",shop:"convenience"},countryCodes:["is"],terms:[],matchScore:2,suggestion:true},"shop/convenience/1st Stop":{name:"1st Stop",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q65706152",shop:"convenience"},addTags:{brand:"1st Stop","brand:wikidata":"Q65706152",name:"1st Stop",shop:"convenience"},countryCodes:["us"],terms:["first stop"],matchScore:2,suggestion:true},"shop/convenience/3COINS":{name:"3COINS",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/3COINS.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60997353",shop:"convenience"},addTags:{alt_name:"スリーコインズ",brand:"3COINS","brand:wikidata":"Q60997353","brand:wikipedia":"ja:3COINS",name:"3COINS",shop:"convenience"},countryCodes:["jp"],terms:["スリーコインズ"],matchScore:2,suggestion:true},"shop/convenience/7-Eleven":{name:"7-Eleven",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/7ElevenMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q259340",shop:"convenience"},addTags:{brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven",shop:"convenience"},terms:["7-11","seven eleven"],matchScore:2,suggestion:true},"shop/convenience/759 Store":{name:"759 Store",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/759StoreHK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10846179",shop:"convenience"},addTags:{brand:"759 Store","brand:wikidata":"Q10846179","brand:wikipedia":"en:759 Store",name:"759 Store",shop:"convenience"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"shop/convenience/76":{name:"76",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/76gas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1658320",shop:"convenience"},addTags:{brand:"76","brand:wikidata":"Q1658320","brand:wikipedia":"en:76 (gas station)",name:"76",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/8 à Huit":{name:"8 à Huit",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/fashion8a8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2818601",shop:"convenience"},addTags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit",shop:"convenience"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/99 Speedmart":{name:"99 Speedmart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/99speedmartMY/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075061",shop:"convenience"},addTags:{brand:"99 Speedmart","brand:wikidata":"Q62075061",name:"99 Speedmart",shop:"convenience"},countryCodes:["br","my","us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ABC (Hawaii)":{name:"ABC (Hawaii)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/abcstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4650251",shop:"convenience"},addTags:{brand:"ABC","brand:wikidata":"Q4650251","brand:wikipedia":"en:ABC Stores (Hawaii)",name:"ABC",shop:"convenience"},countryCodes:["us"],terms:["abc stores"],matchScore:2,suggestion:true},"shop/convenience/Aibė":{name:"Aibė",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q1022952",shop:"convenience"},addTags:{brand:"Aibė","brand:wikidata":"Q1022952","brand:wikipedia":"de:Aibė",name:"Aibė",shop:"convenience"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Albert Heijn to go":{name:"Albert Heijn to go",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ahtogo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q77971185",shop:"convenience"},addTags:{brand:"Albert Heijn to go","brand:wikidata":"Q77971185","brand:wikipedia":"en:Albert Heijn",name:"Albert Heijn to go",official_name:"AH to go",shop:"convenience"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Alepa":{name:"Alepa",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/alepaan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4716167",shop:"convenience"},addTags:{brand:"Alepa","brand:wikidata":"Q4716167","brand:wikipedia":"fi:Alepa",name:"Alepa",shop:"convenience"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Alfamidi":{name:"Alfamidi",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/alfamidiku/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12471462",shop:"convenience"},addTags:{brand:"Alfamidi","brand:wikidata":"Q12471462","brand:wikipedia":"id:Alfamidi",name:"Alfamidi",shop:"convenience"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Allsup's":{name:"Allsup's",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/allsups940/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4733292",shop:"convenience"},addTags:{brand:"Allsup's","brand:wikidata":"Q4733292","brand:wikipedia":"en:Allsup's",name:"Allsup's",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/AmeriStop":{name:"AmeriStop",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ameristopreynoldsburg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66048258",shop:"convenience"},addTags:{brand:"AmeriStop","brand:wikidata":"Q66048258",name:"AmeriStop",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Amoco":{name:"Amoco",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Amoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q465952",shop:"convenience"},addTags:{brand:"Amoco","brand:wikidata":"Q465952","brand:wikipedia":"en:Amoco",name:"Amoco",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Aral":{name:"Aral",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/araldeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q565734",shop:"convenience"},addTags:{brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral",shop:"convenience"},countryCodes:["de"],terms:["aral tankstelle"],matchScore:2,suggestion:true},"shop/convenience/BP Shop":{name:"BP Shop",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/bp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q152057",shop:"convenience"},addTags:{brand:"BP Shop","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP Shop",shop:"convenience"},countryCodes:["au","ch","fr","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Best-one":{name:"Best-one",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/107890284043812/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4896532",shop:"convenience"},addTags:{brand:"Best-one","brand:wikidata":"Q4896532","brand:wikipedia":"en:Best-one",name:"Best-one",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Buc-ee's":{name:"Buc-ee's",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/bucees/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4982335",shop:"convenience"},addTags:{brand:"Buc-ee's","brand:wikidata":"Q4982335","brand:wikipedia":"en:Buc-ee's",name:"Buc-ee's",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Budgens":{name:"Budgens",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/DiscoverBudgens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4985016",shop:"convenience"},addTags:{brand:"Budgens","brand:wikidata":"Q4985016","brand:wikipedia":"en:Budgens",name:"Budgens",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/CBA":{name:"CBA",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCBA%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q779845",shop:"convenience"},addTags:{brand:"CBA","brand:wikidata":"Q779845","brand:wikipedia":"en:CBA (food retail)",name:"CBA",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/COOP Jednota":{name:"COOP Jednota",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/COOPJednota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41629254",shop:"convenience"},addTags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"convenience"},countryCodes:["cz","sk"],terms:["jednota"],matchScore:2,suggestion:true},"shop/convenience/CU":{name:"CU",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CU.BGFretail.cvs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12580836",shop:"convenience"},addTags:{brand:"CU","brand:wikidata":"Q12580836","brand:wikipedia":"ko:CU (편의점)",name:"CU",shop:"convenience"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Carrefour Express":{name:"Carrefour Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/expresshoria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2940190",shop:"convenience"},addTags:{brand:"Carrefour Express","brand:wikidata":"Q2940190","brand:wikipedia":"fr:Carrefour Express",name:"Carrefour Express",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Casey's General Store":{name:"Casey's General Store",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/caseys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2940968",shop:"convenience"},addTags:{brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Centra":{name:"Centra",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CentraIreland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q747678",shop:"convenience"},addTags:{brand:"Centra","brand:wikidata":"Q747678","brand:wikipedia":"en:Centra",name:"Centra",shop:"convenience"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Chata Polska":{name:"Chata Polska",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/chatapolskasklepy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994406",shop:"convenience"},addTags:{brand:"Chata Polska","brand:wikidata":"Q61994406",name:"Chata Polska",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Cheers":{name:"Cheers",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CheersSG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64154066",shop:"convenience"},addTags:{brand:"Cheers","brand:wikidata":"Q64154066",name:"Cheers",opening_hours:"24/7",shop:"convenience"},countryCodes:["sg","vn"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Chevron":{name:"Chevron",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Chevron/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q319642",shop:"convenience"},addTags:{brand:"Chevron","brand:wikidata":"Q319642","brand:wikipedia":"en:Chevron Corporation",name:"Chevron",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Circle K":{name:"Circle K",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CircleKStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3268010",shop:"convenience"},addTags:{brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K",shop:"convenience"},terms:["ok","ok-mart"],matchScore:2,suggestion:true},"shop/convenience/Citgo":{name:"Citgo",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CITGOPetroleumCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2974437",shop:"convenience"},addTags:{brand:"Citgo","brand:wikidata":"Q2974437","brand:wikipedia":"en:Citgo",name:"Citgo",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Clark's Pump-N-Shop":{name:"Clark's Pump-N-Shop",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/clarkspumpnshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65118218",shop:"convenience"},addTags:{brand:"Clark's Pump-N-Shop","brand:wikidata":"Q65118218",name:"Clark's Pump-N-Shop",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Co-op (Canada)":{name:"Co-op (Canada)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CoopCRS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5440676",shop:"convenience"},addTags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"convenience"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Coles Express":{name:"Coles Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ColesExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5144653",shop:"convenience"},addTags:{brand:"Coles Express","brand:wikidata":"Q5144653","brand:wikipedia":"en:Coles Express",name:"Coles Express",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Coop Pronto":{name:"Coop Pronto",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/209094172456220/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1129777",shop:"convenience"},addTags:{brand:"Coop Pronto","brand:wikidata":"Q1129777","brand:wikipedia":"de:Coop Mineraloel",name:"Coop Pronto",shop:"convenience"},countryCodes:["ch","li"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Coop (Schweiz)":{name:"Coop (Schweiz)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/coop.ch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q432564",shop:"convenience"},addTags:{brand:"Coop","brand:wikidata":"Q432564","brand:wikipedia":"de:Coop (Schweiz)",name:"Coop",shop:"convenience"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Costcutter":{name:"Costcutter",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/costcutter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5175072",shop:"convenience"},addTags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Couche-Tard":{name:"Couche-Tard",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CoucheTardQc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2836957",shop:"convenience"},addTags:{brand:"Couche-Tard","brand:wikidata":"Q2836957","brand:wikipedia":"en:Alimentation Couche-Tard",name:"Couche-Tard",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Cruizers":{name:"Cruizers",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CruizersStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66134801",shop:"convenience"},addTags:{brand:"Cruizers","brand:wikidata":"Q66134801",name:"Cruizers",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Cumberland Farms":{name:"Cumberland Farms",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CumberlandFarms/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1143685",shop:"convenience"},addTags:{brand:"Cumberland Farms","brand:wikidata":"Q1143685","brand:wikipedia":"en:Cumberland Farms",name:"Cumberland Farms",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Daisy Mart":{name:"Daisy Mart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/DaisyMart.Kamel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994934",shop:"convenience"},addTags:{brand:"Daisy Mart","brand:wikidata":"Q61994934",name:"Daisy Mart",shop:"convenience"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Dari Mart":{name:"Dari Mart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/darimart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5222675",shop:"convenience"},addTags:{brand:"Dari Mart","brand:wikidata":"Q5222675","brand:wikipedia":"en:Dari Mart",name:"Dari Mart",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Delikatesy Centrum":{name:"Delikatesy Centrum",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Delikatesypl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11693824",shop:"convenience"},addTags:{brand:"Delikatesy Centrum","brand:wikidata":"Q11693824","brand:wikipedia":"pl:Delikatesy Centrum",name:"Delikatesy Centrum",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ExtraMile":{name:"ExtraMile",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ExtraMileExtras/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64224605",shop:"convenience"},addTags:{brand:"ExtraMile","brand:wikidata":"Q64224605",name:"ExtraMile",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/FamilyMart":{name:"FamilyMart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/familymart.japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191685",shop:"convenience"},addTags:{brand:"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"FamilyMart",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Four Square":{name:"Four Square",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/FourSquareNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5475558",shop:"convenience"},addTags:{brand:"Four Square","brand:wikidata":"Q5475558","brand:wikipedia":"en:Four Square (supermarket)",name:"Four Square",shop:"convenience"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Franprix":{name:"Franprix",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/franprix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2420096",shop:"convenience"},addTags:{brand:"Franprix","brand:wikidata":"Q2420096","brand:wikipedia":"fr:Franprix",name:"Franprix",shop:"convenience"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Freshmarket":{name:"Freshmarket",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q16546326",shop:"convenience"},addTags:{brand:"Freshmarket","brand:wikidata":"Q16546326","brand:wikipedia":"pl:Freshmarket",name:"Freshmarket",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/GS25":{name:"GS25",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/funGS25/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q624041",shop:"convenience"},addTags:{brand:"GS25","brand:wikidata":"Q624041","brand:wikipedia":"ko:GS25",name:"GS25",shop:"convenience"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Groszek":{name:"Groszek",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Sklepy.Groszek/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9280965",shop:"convenience"},addTags:{brand:"Groszek","brand:wikidata":"Q9280965","brand:wikipedia":"pl:Groszek (sieć sklepów)",name:"Groszek",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Hasty Market":{name:"Hasty Market",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/607684929288087/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58022603",shop:"convenience"},addTags:{brand:"Hasty Market","brand:wikidata":"Q58022603",name:"Hasty Market",shop:"convenience"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Holiday":{name:"Holiday",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/holidaystations/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5880490",shop:"convenience"},addTags:{brand:"Holiday","brand:wikidata":"Q5880490","brand:wikipedia":"en:Holiday Stationstores",name:"Holiday",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Huck's Food & Fuel":{name:"Huck's Food & Fuel",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/GoToHucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56276328",shop:"convenience"},addTags:{brand:"Huck's Food & Fuel","brand:wikidata":"Q56276328","brand:wikipedia":"en:Huck's Food & Fuel",name:"Huck's Food & Fuel",shop:"convenience",short_name:"Huck's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Hudson":{name:"Hudson",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/673632989434235/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5928682",shop:"convenience"},addTags:{brand:"Hudson","brand:wikidata":"Q5928682","brand:wikipedia":"en:Hudson Group",name:"Hudson",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Hursts":{name:"Hursts",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q80975681",shop:"convenience"},addTags:{brand:"Hursts","brand:wikidata":"Q80975681",name:"Hursts",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Husky":{name:"Husky",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/huskyenergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q702049",shop:"convenience"},addTags:{brand:"Husky","brand:wikidata":"Q702049","brand:wikipedia":"en:Husky Energy",name:"Husky",shop:"convenience"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Indomaret":{name:"Indomaret",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/IndomaretMudahdanHemat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4262825",shop:"convenience"},addTags:{brand:"Indomaret","brand:wikidata":"Q4262825","brand:wikipedia":"en:Indomaret",name:"Indomaret",shop:"convenience"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Intermarché Contact":{name:"Intermarché Contact",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/tousuniscontrelaviechere/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3153200",shop:"convenience"},addTags:{brand:"Intermarché Contact","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Contact",shop:"convenience"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Irving":{name:"Irving",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/irvingoil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1673286",shop:"convenience"},addTags:{brand:"Irving","brand:wikidata":"Q1673286","brand:wikipedia":"en:Irving Oil",name:"Irving",shop:"convenience"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Jacksons":{name:"Jacksons",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/JacksonsFoodStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64617393",shop:"convenience"},addTags:{brand:"Jacksons","brand:wikidata":"Q64617393",name:"Jacksons",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Joker":{name:"Joker",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/JokerNorge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q716328",shop:"convenience"},addTags:{brand:"Joker","brand:wikidata":"Q716328","brand:wikipedia":"en:Joker (store)",name:"Joker",shop:"convenience"},countryCodes:["no"],terms:[],matchScore:2,suggestion:true},"shop/convenience/K-Market":{name:"K-Market",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/KMarketSuomi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11868562",shop:"convenience"},addTags:{brand:"K-Market","brand:wikidata":"Q11868562","brand:wikipedia":"fi:K-Market",name:"K-Market",shop:"convenience"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Kangaroo Express":{name:"Kangaroo Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/KangarooExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61747408",shop:"convenience"},addTags:{brand:"Kangaroo Express","brand:wikidata":"Q61747408",name:"Kangaroo Express",shop:"convenience",short_name:"Kangaroo"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Konzum (Balkans)":{name:"Konzum (Balkans)",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKonzum%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q518563",shop:"convenience"},addTags:{brand:"Konzum","brand:wikidata":"Q518563","brand:wikipedia":"hr:Konzum",name:"Konzum",shop:"convenience"},countryCodes:["ba","hr","rs"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Kum & Go":{name:"Kum & Go",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/kumandgo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6443340",shop:"convenience"},addTags:{brand:"Kum & Go","brand:wikidata":"Q6443340","brand:wikipedia":"en:Kum & Go",name:"Kum & Go",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Kwik Shop":{name:"Kwik Shop",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/kwikshopstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6450417",shop:"convenience"},addTags:{brand:"Kwik Shop","brand:wikidata":"Q6450417","brand:wikipedia":"en:Kwik Shop",name:"Kwik Shop",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Kwik Trip":{name:"Kwik Trip",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/KwikTrip/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6450420",shop:"convenience"},addTags:{brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/La Vie Claire":{name:"La Vie Claire",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Lavieclaire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3213589",shop:"convenience"},addTags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"fr:La Vie Claire",name:"La Vie Claire",organic:"only",shop:"convenience"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Lawson":{name:"Lawson",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/lawson.fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1557223",shop:"convenience"},addTags:{brand:"Lawson","brand:wikidata":"Q1557223","brand:wikipedia":"en:Lawson (store)",name:"Lawson",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Lewiatan":{name:"Lewiatan",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/psh.lewiatan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11755396",shop:"convenience"},addTags:{brand:"Lewiatan","brand:wikidata":"Q11755396","brand:wikipedia":"pl:Lewiatan (sieć handlowa)",name:"Lewiatan",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Lifestyle Express":{name:"Lifestyle Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/324527018203312/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994869",shop:"convenience"},addTags:{brand:"Lifestyle Express","brand:wikidata":"Q61994869",name:"Lifestyle Express",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Little Waitrose":{name:"Little Waitrose",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/waitroseandpartners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q771734",shop:"convenience"},addTags:{brand:"Little Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose & Partners",name:"Little Waitrose",shop:"convenience"},countryCodes:["gb","je"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Loaf 'N Jug":{name:"Loaf 'N Jug",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/loafnjugstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6663398",shop:"convenience"},addTags:{brand:"Loaf 'N Jug","brand:wikidata":"Q6663398","brand:wikipedia":"en:Loaf 'N Jug",name:"Loaf 'N Jug",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Londis (Ireland)":{name:"Londis (Ireland)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/londisireland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21015800",shop:"convenience"},addTags:{brand:"Londis","brand:wikidata":"Q21015800","brand:wikipedia":"en:Londis (Ireland)",name:"Londis",shop:"convenience"},countryCodes:["ie"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Londis (UK)":{name:"Londis (UK)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/102483611097059/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21008564",shop:"convenience"},addTags:{brand:"Londis","brand:wikidata":"Q21008564","brand:wikipedia":"en:Londis (United Kingdom)",name:"Londis",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/M&S Simply Food":{name:"M&S Simply Food",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/MarksandSpencer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714491",shop:"convenience"},addTags:{brand:"M&S Simply Food","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Simply Food",shop:"convenience"},terms:["marks & spencer simply food"],matchScore:2,suggestion:true},"shop/convenience/Mac's":{name:"Mac's",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/MacsBigBaypointRoad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4043527",shop:"convenience"},addTags:{brand:"Mac's","brand:wikidata":"Q4043527","brand:wikipedia":"en:Mac's Convenience Stores",name:"Mac's",shop:"convenience"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Mace (Ireland)":{name:"Mace (Ireland)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/MACEIreland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q75236910",shop:"convenience"},addTags:{brand:"Mace","brand:wikidata":"Q75236910","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"},countryCodes:["ie"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Mace (Northern Ireland)":{name:"Mace (Northern Ireland)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/MACENorthernIreland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q75238536",shop:"convenience"},addTags:{brand:"Mace","brand:wikidata":"Q75238536","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Mace (UK)":{name:"Mace (UK)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/maces.stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q75240338",shop:"convenience"},addTags:{brand:"Mace","brand:wikidata":"Q75240338","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Marathon":{name:"Marathon",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/MarathonPetroleumCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q458363",shop:"convenience"},addTags:{brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Maverik":{name:"Maverik",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/maverikadventure/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64149010",shop:"convenience"},addTags:{brand:"Maverik","brand:wikidata":"Q64149010","brand:wikipedia":"en:Maverik, Inc.",name:"Maverik",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Małpka Express":{name:"Małpka Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/malpkaexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18431946",shop:"convenience"},addTags:{brand:"Małpka Express","brand:wikidata":"Q18431946","brand:wikipedia":"pl:Małpka Express",name:"Małpka Express",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/McColl's":{name:"McColl's",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/YourMcColls/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997477",shop:"convenience"},addTags:{brand:"McColl's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"McColl's",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Mercator":{name:"Mercator",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Mercator/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q738412",shop:"convenience"},addTags:{brand:"Mercator","brand:wikidata":"Q738412","brand:wikipedia":"en:Mercator (retail)",name:"Mercator",shop:"convenience"},countryCodes:["ba","hr","me","rs","si"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Migrolino":{name:"Migrolino",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/migrolino/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56745088",shop:"convenience"},addTags:{brand:"Migrolino","brand:wikidata":"Q56745088","brand:wikipedia":"de:Migrolino",name:"Migrolino",shop:"convenience"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Ministop":{name:"Ministop",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/875897219508871168/OZ1swK9c_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1038929",shop:"convenience"},addTags:{brand:"Ministop","brand:wikidata":"Q1038929","brand:wikipedia":"en:Ministop",name:"Ministop",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Minit Mart":{name:"Minit Mart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/MinitMartOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18154470",shop:"convenience"},addTags:{brand:"Minit Mart","brand:wikidata":"Q18154470","brand:wikipedia":"en:Minit Mart Foods Inc.",name:"Minit Mart",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Mobil Mart":{name:"Mobil Mart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ExxonandMobilStations/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3088656",shop:"convenience"},addTags:{brand:"Mobil Mart","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil Mart",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/MrMax":{name:"MrMax",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/mrmaxrecruit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11342034",shop:"convenience"},addTags:{alt_name:"ミスターマックス",brand:"MrMax","brand:wikidata":"Q11342034","brand:wikipedia":"ja:ミスターマックス",name:"MrMax",shop:"convenience"},countryCodes:["jp"],terms:["ミスターマックス"],matchScore:2,suggestion:true},"shop/convenience/Nasz Sklep":{name:"Nasz Sklep",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/356733814830329/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62070369",shop:"convenience"},addTags:{brand:"Nasz Sklep","brand:wikidata":"Q62070369",name:"Nasz Sklep",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Neste K":{name:"Neste K",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/nestebensis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42901270",shop:"convenience"},addTags:{brand:"Neste K","brand:wikidata":"Q42901270","brand:wikipedia":"fi:Neste K",name:"Neste K",shop:"convenience"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/convenience/NewDays":{name:"NewDays",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/NEWDAYSKIOSK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11234763",shop:"convenience"},addTags:{alt_name:"ニューデイズ",brand:"NewDays","brand:wikidata":"Q11234763","brand:wikipedia":"ja:NewDays",name:"NewDays",shop:"convenience"},countryCodes:["jp"],terms:["newdays ミニ"],matchScore:2,suggestion:true},"shop/convenience/Nisa":{name:"Nisa",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/nisalocally/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16999069",shop:"convenience"},addTags:{brand:"Nisa","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Nisa Local":{name:"Nisa Local",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/nisalocally/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16999069",shop:"convenience"},addTags:{brand:"Nisa Local","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa Local",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/OK Market":{name:"OK Market",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/okmarketcl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6047736",shop:"convenience"},addTags:{brand:"OK Market","brand:wikidata":"Q6047736","brand:wikipedia":"es:OK Market",name:"OK Market",shop:"convenience"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/OK便利店":{name:"OK便利店",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CircleKStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3268010",shop:"convenience"},addTags:{brand:"OK便利店","brand:en":"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"zh:OK便利店",name:"OK便利店","name:en":"Circle K",shop:"convenience"},countryCodes:["cn","hk","mo"],terms:["ok便利商店","ok便利店 circle k"],matchScore:2,suggestion:true},"shop/convenience/OK超商":{name:"OK超商",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/okmart.tw/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10851968",shop:"convenience"},addTags:{brand:"OK超商","brand:en":"OK mart","brand:wikidata":"Q10851968","brand:wikipedia":"zh:OK超商",name:"OK超商","name:en":"OK mart",shop:"convenience"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/convenience/On the Run":{name:"On the Run",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/OntheRunUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16931259",shop:"convenience"},addTags:{brand:"On the Run","brand:wikidata":"Q16931259","brand:wikipedia":"en:On the Run (convenience store)",name:"On the Run",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/One Stop":{name:"One Stop",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/933786043735830534/dehdJCDU_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q65954217",shop:"convenience"},addTags:{brand:"One Stop","brand:wikidata":"Q65954217",name:"One Stop",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Orlen":{name:"Orlen",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ORLENOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q971649",shop:"convenience"},addTags:{brand:"Orlen","brand:wikidata":"Q971649","brand:wikipedia":"en:PKN Orlen",name:"Orlen",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Oxxo":{name:"Oxxo",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/OXXOTiendas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1342538",shop:"convenience"},addTags:{brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Petro-Canada":{name:"Petro-Canada",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/petrocanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1208279",shop:"convenience"},addTags:{brand:"Petro-Canada","brand:wikidata":"Q1208279","brand:wikipedia":"en:Petro-Canada",name:"Petro-Canada",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Plaid Pantry":{name:"Plaid Pantry",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/plaidpantryOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7200591",shop:"convenience"},addTags:{brand:"Plaid Pantry","brand:wikidata":"Q7200591","brand:wikipedia":"en:Plaid Pantry",name:"Plaid Pantry",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Premier":{name:"Premier",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/552086468839997441/Ok2vWsQl_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q7240340",shop:"convenience"},addTags:{brand:"Premier","brand:wikidata":"Q7240340","brand:wikipedia":"en:Premier Stores",name:"Premier",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Proxi":{name:"Proxi",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q3408522",shop:"convenience"},addTags:{brand:"Proxi","brand:wikidata":"Q3408522","brand:wikipedia":"fr:Proxi",name:"Proxi",shop:"convenience"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Quality Mart":{name:"Quality Mart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/QualityMart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66134834",shop:"convenience"},addTags:{brand:"Quality Mart","brand:wikidata":"Q66134834",name:"Quality Mart",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/QuickChek":{name:"QuickChek",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/1191354026673225733/8XEXlY7k_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7271689",shop:"convenience"},addTags:{brand:"QuickChek","brand:wikidata":"Q7271689","brand:wikipedia":"en:QuickChek",name:"QuickChek",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/QuikTrip":{name:"QuikTrip",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Quiktrip/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7271953",shop:"convenience"},addTags:{brand:"QuikTrip","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QuikTrip",shop:"convenience",short_name:"QT"},terms:[],matchScore:2,suggestion:true},"shop/convenience/RaceTrac":{name:"RaceTrac",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/RaceTrac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q735942",shop:"convenience"},addTags:{brand:"RaceTrac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"RaceTrac",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/RaceWay":{name:"RaceWay",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/720219901323849/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q73039084",shop:"convenience"},addTags:{brand:"RaceWay","brand:wikidata":"Q73039084",name:"RaceWay",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Rewe To Go":{name:"Rewe To Go",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Rewe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16968817",shop:"convenience"},addTags:{brand:"Rewe To Go","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe To Go",shop:"convenience"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Royal Farms":{name:"Royal Farms",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Royalfarmsstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7374169",shop:"convenience"},addTags:{brand:"Royal Farms","brand:wikidata":"Q7374169","brand:wikipedia":"en:Royal Farms",name:"Royal Farms",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Rutter's":{name:"Rutter's",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/rutters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7383544",shop:"convenience"},addTags:{brand:"Rutter's","brand:wikidata":"Q7383544","brand:wikipedia":"en:Rutter's",name:"Rutter's",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Sainsbury's Local":{name:"Sainsbury's Local",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/sainsburys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13218434",shop:"convenience"},addTags:{brand:"Sainsbury's Local","brand:wikidata":"Q13218434","brand:wikipedia":"en:Sainsbury's Local",name:"Sainsbury's Local",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Sale":{name:"Sale",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSale%20wordmark.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11892046",shop:"convenience"},addTags:{brand:"Sale","brand:wikidata":"Q11892046","brand:wikipedia":"fi:Sale",name:"Sale",shop:"convenience"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Sheetz":{name:"Sheetz",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/sheetz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7492551",shop:"convenience"},addTags:{brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Shell":{name:"Shell",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Shell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154950",shop:"convenience"},addTags:{brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Shell Select":{name:"Shell Select",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Shell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154950",shop:"convenience"},addTags:{brand:"Shell Select","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell Select",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Siwa":{name:"Siwa",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSiwa%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11893827",shop:"convenience"},addTags:{brand:"Siwa","brand:wikidata":"Q11893827","brand:wikipedia":"fi:Siwa",name:"Siwa",shop:"convenience"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Spar":{name:"Spar",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/639011130107633664/nLN6cXfa_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q610492",shop:"convenience"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Spar Express":{name:"Spar Express",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/639011130107633664/nLN6cXfa_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q610492",shop:"convenience"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar Express",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Speedway":{name:"Speedway",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/SpeedwayStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7575683",shop:"convenience"},addTags:{brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Społem":{name:"Społem",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/SpolemSpoldzielczoscSpozywcow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11826043",shop:"convenience"},addTags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Star Mart":{name:"Star Mart",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q61994857",shop:"convenience"},addTags:{brand:"Star Mart","brand:wikidata":"Q61994857",name:"Star Mart",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Stewart's Shops":{name:"Stewart's Shops",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/YourStewarts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7615690",shop:"convenience"},addTags:{brand:"Stewart's Shops","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's Shops",shop:"convenience"},countryCodes:["us"],terms:["stewarts"],matchScore:2,suggestion:true},"shop/convenience/Stripes":{name:"Stripes",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/stripesstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7624135",shop:"convenience"},addTags:{brand:"Stripes","brand:wikidata":"Q7624135","brand:wikipedia":"en:Stripes Convenience Stores",name:"Stripes",shop:"convenience"},countryCodes:["cl","us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Sunoco":{name:"Sunoco",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/GoSunoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1423218",shop:"convenience"},addTags:{brand:"Sunoco","brand:wikidata":"Q1423218","brand:wikipedia":"en:Sunoco",name:"Sunoco",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Tesco":{name:"Tesco",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/1183230681723205/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487494",shop:"convenience"},addTags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Tesco Express":{name:"Tesco Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/1183230681723205/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487494",shop:"convenience"},addTags:{brand:"Tesco Express","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco Express",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Texaco":{name:"Texaco",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/TexacoWithTechron/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q775060",shop:"convenience"},addTags:{brand:"Texaco","brand:wikidata":"Q775060","brand:wikipedia":"en:Texaco",name:"Texaco",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/The Co-operative Food (UK)":{name:"The Co-operative Food (UK)",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/1034360565127409665/V4fCWHgw_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3277439",shop:"convenience"},addTags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"convenience"},countryCodes:["gb"],terms:["coop","coop food","cooperative food","the cooperative"],matchScore:2,suggestion:true},"shop/convenience/Thorntons":{name:"Thorntons",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/thorntonsllc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7796584",shop:"convenience"},addTags:{brand:"Thorntons","brand:wikidata":"Q7796584","brand:wikipedia":"en:Thorntons LLC",name:"Thorntons",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Tiger Mart":{name:"Tiger Mart",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q57643977",shop:"convenience"},addTags:{brand:"Tiger Mart","brand:wikidata":"Q57643977",name:"Tiger Mart",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Total":{name:"Total",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/TotalUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154037",shop:"convenience"},addTags:{brand:"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Turkey Hill":{name:"Turkey Hill",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/turkeyhillmm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42376970",shop:"convenience"},addTags:{brand:"Turkey Hill","brand:wikidata":"Q42376970","brand:wikipedia":"en:Turkey Hill Minit Markets",name:"Turkey Hill",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Ultramar":{name:"Ultramar",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ultramarcanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3548078",shop:"convenience"},addTags:{brand:"Ultramar","brand:wikidata":"Q3548078","brand:wikipedia":"en:Ultramar",name:"Ultramar",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/United":{name:"United",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/unitedpetroleum/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28224393",shop:"convenience"},addTags:{brand:"United","brand:wikidata":"Q28224393","brand:wikipedia":"en:United Petroleum",name:"United",shop:"convenience"},countryCodes:["au"],terms:["united petroleum"],matchScore:2,suggestion:true},"shop/convenience/United Dairy Farmers":{name:"United Dairy Farmers",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/UnitedDairyFarmers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887677",shop:"convenience"},addTags:{amenity:"ice_cream",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"United Dairy Farmers",shop:"convenience",short_name:"UDF"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Utile":{name:"Utile",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",shop:"convenience"},addTags:{brand:"Utile","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Utile",shop:"convenience"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Valero":{name:"Valero",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/valeroenergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1283291",shop:"convenience"},addTags:{brand:"Valero","brand:wikidata":"Q1283291","brand:wikipedia":"en:Valero Energy",name:"Valero",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/VinMart+":{name:"VinMart+",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/sieuthivinmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60245505",shop:"convenience"},addTags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart+",shop:"convenience"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Vival":{name:"Vival",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/vivalvoiron/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7937525",shop:"convenience"},addTags:{brand:"Vival","brand:wikidata":"Q7937525","brand:wikipedia":"en:Vival (shop)",name:"Vival",shop:"convenience"},countryCodes:["fr","pe"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Waitrose":{name:"Waitrose",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/waitroseandpartners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q771734",shop:"convenience"},addTags:{brand:"Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose & Partners",name:"Waitrose",shop:"convenience"},countryCodes:["gb","je"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Wawa":{name:"Wawa",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/wawa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5936320",shop:"convenience"},addTags:{brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Weltladen":{name:"Weltladen",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q1640782",shop:"convenience"},addTags:{brand:"Weltladen","brand:wikidata":"Q1640782","brand:wikipedia":"de:Weltladen",name:"Weltladen",shop:"convenience"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Woolworths Petrol":{name:"Woolworths Petrol",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/woolworths/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5023980",shop:"convenience"},addTags:{brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol",shop:"convenience"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/convenience/abc (Poland)":{name:"abc (Poland)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/abcsklepy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11683985",shop:"convenience"},addTags:{brand:"abc","brand:wikidata":"Q11683985","brand:wikipedia":"pl:Abc (sieć handlowa)",name:"abc",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ampm":{name:"ampm",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ampm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q306960",shop:"convenience"},addTags:{brand:"ampm","brand:wikidata":"Q306960","brand:wikipedia":"en:Ampm",name:"ampm",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/miniピアゴ":{name:"miniピアゴ",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11188499",shop:"convenience"},addTags:{brand:"miniピアゴ","brand:en":"mini Piago","brand:ja":"miniピアゴ","brand:wikidata":"Q11188499","brand:wikipedia":"ja:Miniピアゴ",name:"miniピアゴ","name:en":"mini Piago","name:ja":"miniピアゴ",shop:"convenience"},countryCodes:["jp"],terms:["ミニピアゴ"],matchScore:2,suggestion:true},"shop/convenience/uSmile 昆仑好客":{name:"uSmile 昆仑好客",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/113494673346645/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66480830",shop:"convenience"},addTags:{brand:"uSmile 昆仑好客","brand:en":"uSmile","brand:wikidata":"Q66480830","brand:zh":"昆仑好客",name:"uSmile 昆仑好客","name:en":"uSmile","name:zh":"昆仑好客",shop:"convenience"},countryCodes:["cn"],terms:["usmile","usmile 便利店","昆仑好","昆仑好客"],matchScore:2,suggestion:true},"shop/convenience/Żabka":{name:"Żabka",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/zabkapolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2589061",shop:"convenience"},addTags:{brand:"Żabka","brand:wikidata":"Q2589061","brand:wikipedia":"pl:Żabka (sieć sklepów)",name:"Żabka",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ВкусВилл":{name:"ВкусВилл",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/vkusvill.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57271676",shop:"convenience"},addTags:{brand:"ВкусВилл","brand:wikidata":"Q57271676","brand:wikipedia":"ru:Вкусвилл",name:"ВкусВилл",shop:"convenience"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Гроздь":{name:"Гроздь",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/grozdmag/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21638412",shop:"convenience"},addTags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"convenience"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Доброном":{name:"Доброном",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Eurooptby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2565040",shop:"convenience"},addTags:{brand:"Доброном","brand:wikidata":"Q2565040","brand:wikipedia":"be:Eurotorg",name:"Доброном",shop:"convenience"},countryCodes:["by","ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Евроопт Market":{name:"Евроопт Market",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q65455869",shop:"convenience"},addTags:{brand:"Евроопт Market","brand:wikidata":"Q65455869",name:"Евроопт Market",shop:"convenience"},countryCodes:["by"],terms:["евроопт маркет"],matchScore:2,suggestion:true},"shop/convenience/Евроопт Минимаркет":{name:"Евроопт Минимаркет",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q65455911",shop:"convenience"},addTags:{brand:"Евроопт Минимаркет","brand:wikidata":"Q65455911",name:"Евроопт Минимаркет",shop:"convenience"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Копеечка":{name:"Копеечка",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q68207105",shop:"convenience"},addTags:{brand:"Копеечка","brand:wikidata":"Q68207105",name:"Копеечка",shop:"convenience"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Копейка":{name:"Копейка",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q1783878",shop:"convenience"},addTags:{brand:"Копейка","brand:en":"Kopeyka","brand:wikidata":"Q1783878","brand:wikipedia":"en:Kopeyka (supermarket)",name:"Копейка","name:en":"Kopeyka",shop:"convenience"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Магнит":{name:"Магнит",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/magnitretail/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q940518",shop:"convenience"},addTags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"convenience"},terms:["магнит у дома"],matchScore:2,suggestion:true},"shop/convenience/Мария-Ра":{name:"Мария-Ра",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/mariarashop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4281631",shop:"convenience"},addTags:{brand:"Мария-Ра","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра",shop:"convenience"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Сильпо":{name:"Сильпо",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/silpo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4419434",shop:"convenience"},addTags:{brand:"Сильпо","brand:wikidata":"Q4419434","brand:wikipedia":"ru:Сильпо",name:"Сильпо",shop:"convenience"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/convenience/アンスリー":{name:"アンスリー",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q17192555",shop:"convenience"},addTags:{brand:"アンスリー","brand:en":"Ansuri","brand:ja":"アンスリー","brand:wikidata":"Q17192555","brand:wikipedia":"ja:アンスリー",name:"アンスリー","name:en":"Ansuri","name:ja":"アンスリー",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/サンクス":{name:"サンクス",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUny.group.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q16141064",shop:"convenience"},addTags:{brand:"サンクス","brand:en":"Sunkus","brand:ja":"サンクス","brand:wikidata":"Q16141064","brand:wikipedia":"ja:サークルKサンクス",name:"サンクス","name:en":"Sunkus","name:ja":"サンクス",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/サークルK":{name:"サークルK",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CircleKStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3268010",shop:"convenience"},addTags:{brand:"サークルK","brand:en":"Circle K","brand:ja":"サークルK","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"サークルK","name:en":"Circle K","name:ja":"サークルK",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/スリーエフ":{name:"スリーエフ",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/875645560073539585/X1oFVQef_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11313419",shop:"convenience"},addTags:{brand:"スリーエフ","brand:en":"Three F","brand:ja":"スリーエフ","brand:wikidata":"Q11313419","brand:wikipedia":"ja:スリーエフ",name:"スリーエフ","name:en":"Three F","name:ja":"スリーエフ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/セイコーマート":{name:"セイコーマート",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/1019751731402379264/OudcSFFt_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11314123",shop:"convenience"},addTags:{brand:"セイコーマート","brand:en":"Seicomart","brand:ja":"セイコーマート","brand:wikidata":"Q11314123","brand:wikipedia":"ja:セイコーマート",name:"セイコーマート","name:en":"Seicomart","name:ja":"セイコーマート",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/セブン-イレブン":{name:"セブン-イレブン",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/7ElevenMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q259340",shop:"convenience"},addTags:{brand:"セブン-イレブン","brand:en":"7-Eleven","brand:ja":"セブン-イレブン","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"セブン-イレブン","name:en":"7-Eleven","name:ja":"セブン-イレブン","official_name:en":"Seven-Eleven",shop:"convenience"},countryCodes:["jp"],terms:["セブンイレブン(7-11)","セブンイレブン(seven-eleven)"],matchScore:2,suggestion:true},"shop/convenience/セーブオン":{name:"セーブオン",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11314868",shop:"convenience"},addTags:{brand:"セーブオン","brand:en":"Save On","brand:ja":"セーブオン","brand:wikidata":"Q11314868","brand:wikipedia":"ja:セーブオン",name:"セーブオン","name:en":"Save On","name:ja":"セーブオン",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/デイリーヤマザキ":{name:"デイリーヤマザキ",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q5209392",shop:"convenience"},addTags:{brand:"デイリーヤマザキ","brand:en":"Daily Yamazaki","brand:ja":"デイリーヤマザキ","brand:wikidata":"Q5209392","brand:wikipedia":"en:Daily Yamazaki",name:"デイリーヤマザキ","name:en":"Daily Yamazaki","name:ja":"デイリーヤマザキ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ナチュラルローソン":{name:"ナチュラルローソン",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11323850",shop:"convenience"},addTags:{brand:"ナチュラルローソン","brand:en":"NATURAL LAWSON","brand:ja":"ナチュラルローソン","brand:wikidata":"Q11323850","brand:wikipedia":"ja:ナチュラルローソン",name:"ナチュラルローソン","name:en":"Natural Lawson","name:ja":"ナチュラルローソン",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ファミリーマート":{name:"ファミリーマート",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/familymart.japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191685",shop:"convenience"},addTags:{brand:"ファミリーマート","brand:en":"FamilyMart","brand:ja":"ファミリーマート","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"ファミリーマート","name:en":"FamilyMart","name:ja":"ファミリーマート",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ポプラ":{name:"ポプラ",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/826586791058644992/chXkmxnQ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7229380",shop:"convenience"},addTags:{brand:"ポプラ","brand:en":"Poplar","brand:ja":"ポプラ","brand:wikidata":"Q7229380","brand:wikipedia":"ja:ポプラ (コンビニエンスストア)",name:"ポプラ","name:en":"Poplar","name:ja":"ポプラ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ミニストップ":{name:"ミニストップ",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/875897219508871168/OZ1swK9c_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1038929",shop:"convenience"},addTags:{brand:"ミニストップ","brand:en":"Ministop","brand:ja":"ミニストップ","brand:wikidata":"Q1038929","brand:wikipedia":"ja:ミニストップ",name:"ミニストップ","name:en":"Ministop","name:ja":"ミニストップ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ヤマザキショップ":{name:"ヤマザキショップ",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11345131",shop:"convenience"},addTags:{brand:"ヤマザキショップ","brand:ja":"ヤマザキショップ","brand:wikidata":"Q11345131","brand:wikipedia":"ja:ヤマザキショップ",name:"ヤマザキショップ","name:en":"Yamazaki Shop","name:ja":"ヤマザキショップ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ローソン":{name:"ローソン",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/lawson.fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1557223",shop:"convenience"},addTags:{brand:"ローソン","brand:en":"LAWSON","brand:ja":"ローソン","brand:wikidata":"Q1557223","brand:wikipedia":"ja:ローソン",name:"ローソン","name:en":"Lawson","name:ja":"ローソン",shop:"convenience"},countryCodes:["jp"],terms:["ローソン"],matchScore:2,suggestion:true},"shop/convenience/ローソンストア100":{name:"ローソンストア100",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/875652208217411585/B2Uc8iMy_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q11350960",shop:"convenience"},addTags:{brand:"ローソンストア100","brand:en":"LAWSON STORE 100","brand:ja":"ローソンストア100","brand:wikidata":"Q11350960","brand:wikipedia":"ja:ローソンストア100",name:"ローソンストア100","name:en":"Lawson Store 100","name:ja":"ローソンストア100",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ローソン・スリーエフ":{name:"ローソン・スリーエフ",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q24866804",shop:"convenience"},addTags:{brand:"ローソン・スリーエフ","brand:en":"LAWSON・Three F","brand:ja":"ローソン・スリーエフ","brand:wikidata":"Q24866804","brand:wikipedia":"ja:ローソン・スリーエフ",name:"ローソン・スリーエフ","name:en":"Lawson・Three F","name:ja":"ローソン・スリーエフ",shop:"convenience"},countryCodes:["jp"],terms:["lawson+スリーエフ","ローソン・スリーエフ"],matchScore:2,suggestion:true},"shop/convenience/全家":{name:"全家",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/familymart.japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191685",shop:"convenience"},addTags:{brand:"全家","brand:en":"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"zh:FamilyMart",name:"全家","name:en":"FamilyMart",shop:"convenience"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"shop/convenience/全家便利商店":{name:"全家便利商店",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q10891564",shop:"convenience"},addTags:{brand:"全家便利商店","brand:en":"FamilyMart","brand:wikidata":"Q10891564","brand:wikipedia":"zh:全家便利商店",name:"全家便利商店","name:en":"FamilyMart",shop:"convenience"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/convenience/萊爾富":{name:"萊爾富",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11326216",shop:"convenience"},addTags:{brand:"萊爾富","brand:en":"Hi-Life","brand:wikidata":"Q11326216","brand:wikipedia":"zh:萊爾富",name:"萊爾富","name:en":"Hi-Life",shop:"convenience"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/convenience/세븐일레븐":{name:"세븐일레븐",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/7ElevenMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q259340",shop:"convenience"},addTags:{brand:"세븐일레븐","brand:en":"7-Eleven","brand:ko":"세븐일레븐","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"세븐일레븐","name:en":"7-Eleven","name:ko":"세븐일레븐",shop:"convenience"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/copyshop/FedEx Office":{name:"FedEx Office",icon:"fas-print",imageURL:"https://graph.facebook.com/FedExOffice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q474379",shop:"copyshop"},addTags:{brand:"FedEx Office","brand:wikidata":"Q474379","brand:wikipedia":"en:FedEx Office",name:"FedEx Office",shop:"copyshop"},countryCodes:["us"],terms:["fedex office print and ship center"],matchScore:2,suggestion:true},"shop/copyshop/Minuteman Press":{name:"Minuteman Press",icon:"fas-print",imageURL:"https://graph.facebook.com/MinutemanPressFranchise/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64866081",shop:"copyshop"},addTags:{brand:"Minuteman Press","brand:wikidata":"Q64866081",name:"Minuteman Press",shop:"copyshop"},terms:[],matchScore:2,suggestion:true},"shop/copyshop/Sir Speedy":{name:"Sir Speedy",icon:"fas-print",imageURL:"https://graph.facebook.com/SirSpeedyCorporate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17088225",shop:"copyshop"},addTags:{brand:"Sir Speedy","brand:wikidata":"Q17088225","brand:wikipedia":"en:Sir Speedy",name:"Sir Speedy",shop:"copyshop"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Aveda":{name:"Aveda",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/Aveda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4827965",shop:"cosmetics"},addTags:{brand:"Aveda","brand:wikidata":"Q4827965","brand:wikipedia":"en:Aveda",name:"Aveda",shop:"cosmetics"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Bath & Body Works":{name:"Bath & Body Works",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/bathandbodyworks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q810773",shop:"cosmetics"},addTags:{brand:"Bath & Body Works","brand:wikidata":"Q810773","brand:wikipedia":"en:Bath & Body Works",name:"Bath & Body Works",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Jurlique":{name:"Jurlique",icon:"temaki-lipstick",geometry:["point","area"],tags:{"brand:wikidata":"Q17008691",shop:"cosmetics"},addTags:{brand:"Jurlique","brand:wikidata":"Q17008691","brand:wikipedia":"en:Jurlique",name:"Jurlique",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/KIKO Milano":{name:"KIKO Milano",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/KikoMilanoGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3812045",shop:"cosmetics"},addTags:{brand:"KIKO Milano","brand:wikidata":"Q3812045","brand:wikipedia":"it:KIKO",name:"KIKO Milano",shop:"cosmetics"},countryCodes:["be","de","es","fr","gb","nl"],terms:["kiko"],matchScore:2,suggestion:true},"shop/cosmetics/Kiehl's":{name:"Kiehl's",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/KiehlsUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3196447",shop:"cosmetics"},addTags:{brand:"Kiehl's","brand:wikidata":"Q3196447","brand:wikipedia":"en:Kiehl's",name:"Kiehl's",shop:"cosmetics"},countryCodes:["ca","us"],terms:["kiehl's since 1851"],matchScore:2,suggestion:true},"shop/cosmetics/L'Occitane":{name:"L'Occitane",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/loccitaneusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1880676",shop:"cosmetics"},addTags:{brand:"L'Occitane","brand:wikidata":"Q1880676","brand:wikipedia":"en:L'Occitane en Provence",name:"L'Occitane",shop:"cosmetics"},terms:["l'occitane en provence"],matchScore:2,suggestion:true},"shop/cosmetics/Lush":{name:"Lush",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/LUSHJAPAN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1585448",shop:"cosmetics"},addTags:{brand:"Lush","brand:wikidata":"Q1585448","brand:wikipedia":"en:Lush (company)",name:"Lush",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/MAC Cosmetics":{name:"MAC Cosmetics",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/MACcosmetics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2624442",shop:"cosmetics"},addTags:{brand:"MAC Cosmetics","brand:wikidata":"Q2624442","brand:wikipedia":"en:MAC Cosmetics",name:"MAC Cosmetics",shop:"cosmetics",short_name:"M·A·C"},countryCodes:["ca","de","us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Nature Republic":{name:"Nature Republic",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/naturerepublic.kr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16935507",shop:"cosmetics"},addTags:{brand:"Nature Republic","brand:wikidata":"Q16935507","brand:wikipedia":"en:Nature Republic",name:"Nature Republic",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Nocibé":{name:"Nocibé",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/nocibe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3342592",shop:"cosmetics"},addTags:{brand:"Nocibé","brand:wikidata":"Q3342592","brand:wikipedia":"fr:Nocibé",name:"Nocibé",shop:"cosmetics"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Origins":{name:"Origins",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/Origins/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6643229",shop:"cosmetics"},addTags:{brand:"Origins","brand:wikidata":"Q6643229","brand:wikipedia":"en:Origins (cosmetics)",name:"Origins",shop:"cosmetics"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Rituals":{name:"Rituals",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/RitualsCosmetics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62874140",shop:"cosmetics"},addTags:{brand:"Rituals","brand:wikidata":"Q62874140",name:"Rituals",shop:"cosmetics"},countryCodes:["be","ch","de","es","gb","nl","se","us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Saje":{name:"Saje",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/SajeWellness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q44631749",shop:"cosmetics"},addTags:{brand:"Saje","brand:wikidata":"Q44631749","brand:wikipedia":"en:Saje Natural Wellness",name:"Saje",shop:"cosmetics"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Sephora":{name:"Sephora",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/sephoraturkiye/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2408041",shop:"cosmetics"},addTags:{brand:"Sephora","brand:wikidata":"Q2408041","brand:wikipedia":"en:Sephora",name:"Sephora",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/The Body Shop":{name:"The Body Shop",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/TheBodyShopUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q837851",shop:"cosmetics"},addTags:{brand:"The Body Shop","brand:wikidata":"Q837851","brand:wikipedia":"en:The Body Shop",name:"The Body Shop",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Ulta Beauty":{name:"Ulta Beauty",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/UltaBeauty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7880076",shop:"cosmetics"},addTags:{brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"Ulta Beauty",shop:"cosmetics"},countryCodes:["us"],terms:["ulta"],matchScore:2,suggestion:true},"shop/cosmetics/bareMinerals":{name:"bareMinerals",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/bareminerals/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66740659",shop:"cosmetics"},addTags:{brand:"bareMinerals","brand:wikidata":"Q66740659",name:"bareMinerals",shop:"cosmetics"},countryCodes:["au","ca","dk","gb","ie","us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Л'Этуаль":{name:"Л'Этуаль",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/letoile.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18400706",shop:"cosmetics"},addTags:{brand:"Л'Этуаль","brand:wikidata":"Q18400706","brand:wikipedia":"ru:Л’Этуаль",name:"Л'Этуаль",shop:"cosmetics"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Магнит Косметик":{name:"Магнит Косметик",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/magnitretail/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q940518",shop:"cosmetics"},addTags:{brand:"Магнит Косметик","brand:en":"Magnit Cosmetics","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит Косметик","name:en":"Magnit Cosmetics",shop:"cosmetics"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Atwoods":{name:"Atwoods",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/Atwoods.Ranch.and.Home.Stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4818874",shop:"country_store"},addTags:{brand:"Atwoods","brand:wikidata":"Q4818874","brand:wikipedia":"en:Atwoods",name:"Atwoods",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Blain's Farm & Fleet":{name:"Blain's Farm & Fleet",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/BlainsFarmandFleet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4923906",shop:"country_store"},addTags:{brand:"Blain's Farm & Fleet","brand:wikidata":"Q4923906","brand:wikipedia":"en:Blain's Farm & Fleet",name:"Blain's Farm & Fleet",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Bomgaars":{name:"Bomgaars",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/BomgaarsSupply.Corporate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22059070",shop:"country_store"},addTags:{brand:"Bomgaars","brand:wikidata":"Q22059070","brand:wikipedia":"en:Bomgaars",name:"Bomgaars",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Fleet Farm":{name:"Fleet Farm",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/fleetfarm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6859973",shop:"country_store"},addTags:{brand:"Fleet Farm","brand:wikidata":"Q6859973","brand:wikipedia":"en:Fleet Farm",name:"Fleet Farm",shop:"country_store"},countryCodes:["us"],terms:["mills fleet farm"],matchScore:2,suggestion:true},"shop/country_store/Grange Co-op":{name:"Grange Co-op",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/grangecoop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5595639",shop:"country_store"},addTags:{brand:"Grange Co-op","brand:wikidata":"Q5595639","brand:wikipedia":"en:Grange Cooperative",name:"Grange Co-op",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Home of Economy":{name:"Home of Economy",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/Homeofeconomy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5889100",shop:"country_store"},addTags:{brand:"Home of Economy","brand:wikidata":"Q5889100","brand:wikipedia":"en:Home of Economy",name:"Home of Economy",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Norbys Farm Fleet":{name:"Norbys Farm Fleet",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/norbysfarmfleet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7050461",shop:"country_store"},addTags:{brand:"Norbys Farm Fleet","brand:wikidata":"Q7050461","brand:wikipedia":"en:Norby's Farm Fleet",name:"Norbys Farm Fleet",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Orscheln Farm & Home":{name:"Orscheln Farm & Home",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/orschelnfarmandhome/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22060331",shop:"country_store"},addTags:{brand:"Orscheln Farm & Home","brand:wikidata":"Q22060331","brand:wikipedia":"en:Orscheln Farm & Home",name:"Orscheln Farm & Home",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Peavey Mart":{name:"Peavey Mart",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/PeaveyMart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7158483",shop:"country_store"},addTags:{brand:"Peavey Mart","brand:wikidata":"Q7158483","brand:wikipedia":"en:Peavey Mart",name:"Peavey Mart",shop:"country_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Rural King":{name:"Rural King",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/RuralKing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7380525",shop:"country_store"},addTags:{brand:"Rural King","brand:wikidata":"Q7380525","brand:wikipedia":"en:Rural King",name:"Rural King",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/TSC Stores":{name:"TSC Stores",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/TSCStoresCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62720230",shop:"country_store"},addTags:{brand:"TSC Stores","brand:wikidata":"Q62720230",name:"TSC Stores",shop:"country_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Theisen's":{name:"Theisen's",icon:"fas-hat-cowboy-side",imageURL:"https://pbs.twimg.com/profile_images/743446346414227456/6V3KBxMe_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7777850",shop:"country_store"},addTags:{brand:"Theisen's","brand:wikidata":"Q7777850","brand:wikipedia":"en:Theisen's",name:"Theisen's",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Tractor Supply Company":{name:"Tractor Supply Company",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/TractorSupplyCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15109925",shop:"country_store"},addTags:{brand:"Tractor Supply Company","brand:wikidata":"Q15109925","brand:wikipedia":"en:Tractor Supply Company",name:"Tractor Supply Company",shop:"country_store"},countryCodes:["us"],terms:["tractor supply co"],matchScore:2,suggestion:true},"shop/country_store/Wynnstay":{name:"Wynnstay",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/WynnstayCountryStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63016351",shop:"country_store"},addTags:{brand:"Wynnstay","brand:wikidata":"Q63016351",name:"Wynnstay",shop:"country_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/craft/A.C. Moore":{name:"A.C. Moore",icon:"fas-cut",imageURL:"https://graph.facebook.com/acmoore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4647066",shop:"craft"},addTags:{brand:"A.C. Moore","brand:wikidata":"Q4647066","brand:wikipedia":"en:A.C. Moore",name:"A.C. Moore",shop:"craft"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/craft/Hobby Lobby":{name:"Hobby Lobby",icon:"fas-cut",imageURL:"https://graph.facebook.com/HobbyLobby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5874938",shop:"craft"},addTags:{brand:"Hobby Lobby","brand:wikidata":"Q5874938","brand:wikipedia":"en:Hobby Lobby",name:"Hobby Lobby",shop:"craft"},countryCodes:["in","us"],terms:[],matchScore:2,suggestion:true},"shop/craft/Hobbycraft":{name:"Hobbycraft",icon:"fas-cut",imageURL:"https://graph.facebook.com/HobbycraftUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16984508",shop:"craft"},addTags:{brand:"Hobbycraft","brand:wikidata":"Q16984508","brand:wikipedia":"en:Hobbycraft",name:"Hobbycraft",shop:"craft"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/craft/Jo-Ann":{name:"Jo-Ann",icon:"fas-cut",imageURL:"https://graph.facebook.com/JoAnn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6203968",shop:"craft"},addTags:{brand:"Jo-Ann","brand:wikidata":"Q6203968","brand:wikipedia":"en:Jo-Ann Stores",name:"Jo-Ann",shop:"craft"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/craft/Michaels":{name:"Michaels",icon:"fas-cut",imageURL:"https://graph.facebook.com/Michaels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6835667",shop:"craft"},addTags:{brand:"Michaels","brand:wikidata":"Q6835667","brand:wikipedia":"en:Michaels",name:"Michaels",shop:"craft"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/craft/Woodcraft":{name:"Woodcraft",icon:"fas-cut",imageURL:"https://graph.facebook.com/WoodcraftWoodworking/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22026341",shop:"craft"},addTags:{brand:"Woodcraft","brand:wikidata":"Q22026341","brand:wikipedia":"en:Woodcraft Supply",name:"Woodcraft",shop:"craft"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/deli/ほっともっと":{name:"ほっともっと",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/hottomotto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10850949",shop:"deli"},addTags:{brand:"ほっともっと","brand:en":"Hotto Motto","brand:ja":"ほっともっと","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",name:"ほっともっと","name:en":"Hotto Motto","name:ja":"ほっともっと",shop:"deli"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/deli/京樽":{name:"京樽",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/kyotaru.sushi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11374503",shop:"deli"},addTags:{brand:"京樽","brand:en":"Kyotaru","brand:ja":"京樽","brand:wikidata":"Q11374503","brand:wikipedia":"ja:京樽",name:"京樽","name:en":"Kyotaru","name:ja":"京樽",shop:"deli"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Barneys New York":{name:"Barneys New York",icon:"maki-shop",imageURL:"https://graph.facebook.com/BarneysNY/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q59465",shop:"department_store"},addTags:{brand:"Barneys New York","brand:wikidata":"Q59465","brand:wikipedia":"en:Barneys New York",name:"Barneys New York",shop:"department_store"},countryCodes:["us"],terms:["barneys"],matchScore:2,suggestion:true},"shop/department_store/Beales":{name:"Beales",icon:"maki-shop",imageURL:"https://graph.facebook.com/LoveBeales/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4876141",shop:"department_store"},addTags:{brand:"Beales","brand:wikidata":"Q4876141","brand:wikipedia":"en:Beales (department store)",name:"Beales",shop:"department_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Bealls (Florida-based)":{name:"Bealls (Florida-based)",icon:"maki-shop",imageURL:"https://graph.facebook.com/BeallsCorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4876153",shop:"department_store"},addTags:{brand:"Bealls","brand:wikidata":"Q4876153","brand:wikipedia":"en:Bealls (Florida)",name:"Bealls",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Bealls (Texas-based)":{name:"Bealls (Texas-based)",icon:"maki-shop",imageURL:"https://graph.facebook.com/Beallstx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4876156",shop:"department_store"},addTags:{brand:"Bealls","brand:wikidata":"Q4876156","brand:wikipedia":"en:Bealls (Texas)",name:"Bealls",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Belk":{name:"Belk",icon:"maki-shop",imageURL:"https://graph.facebook.com/Belk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q127428",shop:"department_store"},addTags:{brand:"Belk","brand:wikidata":"Q127428","brand:wikipedia":"en:Belk",name:"Belk",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Bi-Mart":{name:"Bi-Mart",icon:"maki-shop",imageURL:"https://graph.facebook.com/BiMart.Membership.Discount.Stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4902331",shop:"department_store"},addTags:{brand:"Bi-Mart","brand:wikidata":"Q4902331","brand:wikipedia":"en:Bi-Mart",name:"Bi-Mart",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Big Lots":{name:"Big Lots",icon:"maki-shop",imageURL:"https://graph.facebook.com/biglots/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4905973",shop:"department_store"},addTags:{brand:"Big Lots","brand:wikidata":"Q4905973","brand:wikipedia":"en:Big Lots",name:"Big Lots",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Big W":{name:"Big W",icon:"maki-shop",imageURL:"https://graph.facebook.com/BIGWaustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4906646",shop:"department_store"},addTags:{brand:"Big W","brand:wikidata":"Q4906646","brand:wikipedia":"en:Big W",name:"Big W",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Bloomingdale's":{name:"Bloomingdale's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Bloomingdales/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q283383",shop:"department_store"},addTags:{brand:"Bloomingdale's","brand:wikidata":"Q283383","brand:wikipedia":"en:Bloomingdale's",name:"Bloomingdale's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Boscov's":{name:"Boscov's",icon:"maki-shop",imageURL:"https://graph.facebook.com/boscovs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4947190",shop:"department_store"},addTags:{brand:"Boscov's","brand:wikidata":"Q4947190","brand:wikipedia":"en:Boscov's",name:"Boscov's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Boyes":{name:"Boyes",icon:"maki-shop",imageURL:"https://graph.facebook.com/boyesstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7958471",shop:"department_store"},addTags:{brand:"Boyes","brand:wikidata":"Q7958471","brand:wikipedia":"en:Boyes (retailer)",name:"Boyes",shop:"department_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/department_store/BrightHouse":{name:"BrightHouse",icon:"maki-shop",imageURL:"https://graph.facebook.com/BrightHouseUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4967357",shop:"department_store"},addTags:{brand:"BrightHouse","brand:wikidata":"Q4967357","brand:wikipedia":"en:BrightHouse (retailer)",name:"BrightHouse",shop:"department_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Canadian Tire":{name:"Canadian Tire",icon:"maki-shop",imageURL:"https://graph.facebook.com/Canadiantire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1032400",shop:"department_store"},addTags:{brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire",shop:"department_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Casas Bahia":{name:"Casas Bahia",icon:"maki-shop",imageURL:"https://graph.facebook.com/CasasBahia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5048048",shop:"department_store"},addTags:{brand:"Casas Bahia","brand:wikidata":"Q5048048","brand:wikipedia":"en:Casas Bahia",name:"Casas Bahia",shop:"department_store"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Century 21":{name:"Century 21",icon:"maki-shop",imageURL:"https://graph.facebook.com/century21stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5063125",shop:"department_store"},addTags:{brand:"Century 21","brand:wikidata":"Q5063125","brand:wikipedia":"en:Century 21 (department store)",name:"Century 21",shop:"department_store"},countryCodes:["us"],terms:["c21"],matchScore:2,suggestion:true},"shop/department_store/Coppel":{name:"Coppel",icon:"maki-shop",imageURL:"https://graph.facebook.com/tiendascoppel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2497795",shop:"department_store"},addTags:{brand:"Coppel","brand:wikidata":"Q2497795","brand:wikipedia":"en:Coppel",name:"Coppel",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/David Jones":{name:"David Jones",icon:"maki-shop",imageURL:"https://graph.facebook.com/davidjonesstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5235753",shop:"department_store"},addTags:{brand:"David Jones","brand:wikidata":"Q5235753","brand:wikipedia":"en:David Jones Limited",name:"David Jones",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Debenhams":{name:"Debenhams",icon:"maki-shop",imageURL:"https://graph.facebook.com/Debenhams/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1181484",shop:"department_store"},addTags:{brand:"Debenhams","brand:wikidata":"Q1181484","brand:wikipedia":"en:Debenhams",name:"Debenhams",shop:"department_store"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Dillard's":{name:"Dillard's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Dillards/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q844805",shop:"department_store"},addTags:{brand:"Dillard's","brand:wikidata":"Q844805","brand:wikipedia":"en:Dillard's",name:"Dillard's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/El Corte Inglés":{name:"El Corte Inglés",icon:"maki-shop",imageURL:"https://graph.facebook.com/elcorteingles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q623133",shop:"department_store"},addTags:{brand:"El Corte Inglés","brand:wikidata":"Q623133","brand:wikipedia":"en:El Corte Inglés",name:"El Corte Inglés",shop:"department_store"},countryCodes:["es"],terms:["corte ingles"],matchScore:2,suggestion:true},"shop/department_store/Falabella":{name:"Falabella",icon:"maki-shop",imageURL:"https://graph.facebook.com/falabellachile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5135229",shop:"department_store"},addTags:{brand:"Falabella","brand:wikidata":"Q5135229","brand:wikipedia":"en:Falabella (retail store)",name:"Falabella",shop:"department_store"},terms:["saga falabella"],matchScore:2,suggestion:true},"shop/department_store/Galeria Kaufhof":{name:"Galeria Kaufhof",icon:"maki-shop",imageURL:"https://graph.facebook.com/GaleriaKarstadtKaufhof/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q322598",shop:"department_store"},addTags:{brand:"Galeria Kaufhof","brand:wikidata":"Q322598","brand:wikipedia":"en:Galeria Kaufhof",name:"Galeria Kaufhof",shop:"department_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Giant Tiger":{name:"Giant Tiger",icon:"maki-shop",imageURL:"https://graph.facebook.com/GiantTiger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5558429",shop:"department_store"},addTags:{brand:"Giant Tiger","brand:wikidata":"Q5558429","brand:wikipedia":"en:Giant Tiger",name:"Giant Tiger",shop:"department_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Goody's":{name:"Goody's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Goodys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5583733",shop:"department_store"},addTags:{brand:"Goody's","brand:wikidata":"Q5583733","brand:wikipedia":"en:Goody's (store)",name:"Goody's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Gordmans":{name:"Gordmans",icon:"maki-shop",imageURL:"https://graph.facebook.com/gordmans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5584725",shop:"department_store"},addTags:{brand:"Gordmans","brand:wikidata":"Q5584725","brand:wikipedia":"en:Gordmans",name:"Gordmans",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/HEMA":{name:"HEMA",icon:"maki-shop",imageURL:"https://graph.facebook.com/hema/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q903805",shop:"department_store"},addTags:{brand:"HEMA","brand:wikidata":"Q903805","brand:wikipedia":"en:HEMA (store)",name:"HEMA",shop:"department_store"},countryCodes:["ae","at","be","de","es","fr","gb","lu","nl","qa"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Harvey Norman":{name:"Harvey Norman",icon:"maki-shop",imageURL:"https://graph.facebook.com/HarveyNormanAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4040441",shop:"department_store"},addTags:{brand:"Harvey Norman","brand:wikidata":"Q4040441","brand:wikipedia":"en:Harvey Norman",name:"Harvey Norman",shop:"department_store"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Havan":{name:"Havan",icon:"maki-shop",imageURL:"https://graph.facebook.com/Havanoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10294065",shop:"department_store"},addTags:{brand:"Havan","brand:wikidata":"Q10294065","brand:wikipedia":"pt:Havan",name:"Havan",shop:"department_store"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/department_store/House of Fraser":{name:"House of Fraser",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHouseOfFraser.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5928422",shop:"department_store"},addTags:{brand:"House of Fraser","brand:wikidata":"Q5928422","brand:wikipedia":"en:House of Fraser",name:"House of Fraser",shop:"department_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Hudson's Bay":{name:"Hudson's Bay",icon:"maki-shop",imageURL:"https://graph.facebook.com/hudsonsbay/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q641129",shop:"department_store"},addTags:{alt_name:"The Bay",brand:"Hudson's Bay","brand:wikidata":"Q641129","brand:wikipedia":"en:Hudson's Bay (retailer)",name:"Hudson's Bay",shop:"department_store"},countryCodes:["ca","nl"],terms:[],matchScore:2,suggestion:true},"shop/department_store/JCPenney":{name:"JCPenney",icon:"maki-shop",imageURL:"https://graph.facebook.com/jcp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q920037",shop:"department_store"},addTags:{brand:"JCPenney","brand:wikidata":"Q920037","brand:wikipedia":"en:J. C. Penney",name:"JCPenney",official_name:"J.C. Penney Company",shop:"department_store"},countryCodes:["us"],terms:["jcpenny"],matchScore:2,suggestion:true},"shop/department_store/John Lewis":{name:"John Lewis",icon:"maki-shop",imageURL:"https://graph.facebook.com/JohnLewisandPartners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1918981",shop:"department_store"},addTags:{brand:"John Lewis","brand:wikidata":"Q1918981","brand:wikipedia":"en:John Lewis & Partners",name:"John Lewis",official_name:"John Lewis & Partners",shop:"department_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Karstadt":{name:"Karstadt",icon:"maki-shop",imageURL:"https://graph.facebook.com/karstadt1881/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q182910",shop:"department_store"},addTags:{brand:"Karstadt","brand:wikidata":"Q182910","brand:wikipedia":"en:Karstadt",name:"Karstadt",shop:"department_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Kmart (Australia)":{name:"Kmart (Australia)",icon:"maki-shop",imageURL:"https://graph.facebook.com/KmartAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6421682",shop:"department_store"},addTags:{brand:"Kmart","brand:wikidata":"Q6421682","brand:wikipedia":"en:Kmart Australia",name:"Kmart",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Kmart (USA)":{name:"Kmart (USA)",icon:"maki-shop",imageURL:"https://graph.facebook.com/kmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1753080",shop:"department_store"},addTags:{brand:"Kmart","brand:wikidata":"Q1753080","brand:wikipedia":"en:Kmart",name:"Kmart",shop:"department_store"},countryCodes:["us"],terms:["k-mart"],matchScore:2,suggestion:true},"shop/department_store/Kohl's":{name:"Kohl's",icon:"maki-shop",imageURL:"https://graph.facebook.com/kohls/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q967265",shop:"department_store"},addTags:{brand:"Kohl's","brand:wikidata":"Q967265","brand:wikipedia":"en:Kohl's",name:"Kohl's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Lojas Americanas":{name:"Lojas Americanas",icon:"maki-shop",imageURL:"https://graph.facebook.com/lojasamericanas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3064093",shop:"department_store"},addTags:{brand:"Lojas Americanas","brand:wikidata":"Q3064093","brand:wikipedia":"en:Lojas Americanas",name:"Lojas Americanas",shop:"department_store"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Lord & Taylor":{name:"Lord & Taylor",icon:"maki-shop",imageURL:"https://graph.facebook.com/lordandtaylor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2749082",shop:"department_store"},addTags:{brand:"Lord & Taylor","brand:wikidata":"Q2749082","brand:wikipedia":"en:Lord & Taylor",name:"Lord & Taylor",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Lotte Department Store":{name:"Lotte Department Store",icon:"maki-shop",imageURL:"https://graph.facebook.com/LOTTEshopping/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q489905",shop:"department_store"},addTags:{brand:"Lotte Department Store","brand:wikidata":"Q489905","brand:wikipedia":"en:Lotte Department Store",name:"Lotte Department Store",shop:"department_store"},terms:["lotte"],matchScore:2,suggestion:true},"shop/department_store/M&S Outlet":{name:"M&S Outlet",icon:"maki-shop",imageURL:"https://graph.facebook.com/MarksandSpencer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714491",shop:"department_store"},addTags:{brand:"M&S Outlet","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Outlet",shop:"department_store"},terms:["marks & spencer outlet"],matchScore:2,suggestion:true},"shop/department_store/Macy's":{name:"Macy's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Macys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q629269",shop:"department_store"},addTags:{brand:"Macy's","brand:wikidata":"Q629269","brand:wikipedia":"en:Macy's",name:"Macy's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Manor":{name:"Manor",icon:"maki-shop",imageURL:"https://graph.facebook.com/Manor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q382686",shop:"department_store"},addTags:{brand:"Manor","brand:wikidata":"Q382686","brand:wikipedia":"en:Manor (department store)",name:"Manor",shop:"department_store"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Marks & Spencer":{name:"Marks & Spencer",icon:"maki-shop",imageURL:"https://graph.facebook.com/MarksandSpencer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714491",shop:"department_store"},addTags:{brand:"Marks & Spencer","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"Marks & Spencer",shop:"department_store"},countryCodes:["gb","gr","ie"],terms:["m and s"],matchScore:2,suggestion:true},"shop/department_store/Marshalls":{name:"Marshalls",icon:"maki-shop",imageURL:"https://graph.facebook.com/Marshalls/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15903261",shop:"department_store"},addTags:{brand:"Marshalls","brand:wikidata":"Q15903261","brand:wikipedia":"en:Marshalls",name:"Marshalls",shop:"department_store"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Muji":{name:"Muji",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/2779266335/6fbe4ceb685984dbe3a149bd94043e80_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q708789",shop:"department_store"},addTags:{brand:"Muji","brand:en":"Muji","brand:ja":"無印良品","brand:wikidata":"Q708789","brand:wikipedia":"en:Muji",name:"Muji","name:en":"Muji","name:ja":"無印良品",shop:"department_store"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Myer":{name:"Myer",icon:"maki-shop",imageURL:"https://graph.facebook.com/myer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1110323",shop:"department_store"},addTags:{brand:"Myer","brand:wikidata":"Q1110323","brand:wikipedia":"en:Myer",name:"Myer",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Neiman Marcus":{name:"Neiman Marcus",icon:"maki-shop",imageURL:"https://graph.facebook.com/neimanmarcus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q743497",shop:"department_store"},addTags:{brand:"Neiman Marcus","brand:wikidata":"Q743497","brand:wikipedia":"en:Neiman Marcus",name:"Neiman Marcus",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Nordstrom":{name:"Nordstrom",icon:"maki-shop",imageURL:"https://graph.facebook.com/Nordstrom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q174310",shop:"department_store"},addTags:{brand:"Nordstrom","brand:wikidata":"Q174310","brand:wikipedia":"en:Nordstrom",name:"Nordstrom",shop:"department_store"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Oechsle":{name:"Oechsle",icon:"maki-shop",imageURL:"https://graph.facebook.com/tiendasoechsle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6049096",shop:"department_store"},addTags:{brand:"Oechsle","brand:wikidata":"Q6049096","brand:wikipedia":"es:Oechsle",name:"Oechsle",shop:"department_store"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"shop/department_store/París":{name:"París",icon:"maki-shop",imageURL:"https://graph.facebook.com/TiendasParis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20812805",shop:"department_store"},addTags:{brand:"París","brand:wikidata":"Q20812805","brand:wikipedia":"en:París (retail store)",name:"París",shop:"department_store"},countryCodes:["cl","pe"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Printemps":{name:"Printemps",icon:"maki-shop",imageURL:"https://graph.facebook.com/Printemps/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1535260",shop:"department_store"},addTags:{brand:"Printemps","brand:wikidata":"Q1535260","brand:wikipedia":"fr:Printemps (grands magasins)",name:"Printemps",shop:"department_store"},countryCodes:["ad","cn","fr","jp","sa"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Ripley":{name:"Ripley",icon:"maki-shop",imageURL:"https://graph.facebook.com/ripleychile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3433040",shop:"department_store"},addTags:{brand:"Ripley","brand:wikidata":"Q3433040","brand:wikipedia":"en:Ripley S.A.",name:"Ripley",shop:"department_store"},countryCodes:["cl","pe"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Ross":{name:"Ross",icon:"maki-shop",imageURL:"https://graph.facebook.com/RossDressforLess/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3442791",shop:"department_store"},addTags:{brand:"Ross","brand:wikidata":"Q3442791","brand:wikipedia":"en:Ross Stores",name:"Ross",official_name:"Ross Dress for Less",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Saks Fifth Avenue":{name:"Saks Fifth Avenue",icon:"maki-shop",imageURL:"https://graph.facebook.com/saks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2723882",shop:"department_store"},addTags:{brand:"Saks Fifth Avenue","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Fifth Avenue",shop:"department_store"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Saks Off 5th":{name:"Saks Off 5th",icon:"maki-shop",imageURL:"https://graph.facebook.com/saks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2723882",shop:"department_store"},addTags:{brand:"Saks Off 5th","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Off 5th",shop:"department_store"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Sears":{name:"Sears",icon:"maki-shop",imageURL:"https://graph.facebook.com/sears/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6499202",shop:"department_store"},addTags:{brand:"Sears","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears",shop:"department_store"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Sears Hometown":{name:"Sears Hometown",icon:"maki-shop",imageURL:"https://graph.facebook.com/SearsHometownStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q69926963",shop:"department_store"},addTags:{brand:"Sears Hometown","brand:wikidata":"Q69926963",name:"Sears Hometown",shop:"department_store"},countryCodes:["us"],terms:["sears hometown store","sears hometown stores"],matchScore:2,suggestion:true},"shop/department_store/Sears Outlet":{name:"Sears Outlet",icon:"maki-shop",imageURL:"https://graph.facebook.com/Sears.Outlet.Stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20080412",shop:"department_store"},addTags:{brand:"Sears Outlet","brand:wikidata":"Q20080412",name:"Sears Outlet",shop:"department_store"},countryCodes:["us"],terms:["sears outlet store","sears outlet stores"],matchScore:2,suggestion:true},"shop/department_store/Shopko":{name:"Shopko",icon:"maki-shop",imageURL:"https://graph.facebook.com/ShopkoOptical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7501155",shop:"department_store"},addTags:{brand:"Shopko","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shopko",name:"Shopko",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Shoppers Stop":{name:"Shoppers Stop",icon:"maki-shop",imageURL:"https://graph.facebook.com/ShopkoOptical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7501155",shop:"department_store"},addTags:{brand:"Shoppers Stop","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shoppers Stop",name:"Shoppers Stop",shop:"department_store"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Stein Mart":{name:"Stein Mart",icon:"maki-shop",imageURL:"https://graph.facebook.com/SteinMart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7606770",shop:"department_store"},addTags:{brand:"Stein Mart","brand:wikidata":"Q7606770","brand:wikipedia":"en:Stein Mart",name:"Stein Mart",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Stockmann":{name:"Stockmann",icon:"maki-shop",imageURL:"https://graph.facebook.com/StockmannCOM/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1543093",shop:"department_store"},addTags:{brand:"Stockmann","brand:wikidata":"Q1543093","brand:wikipedia":"fi:Stockmann",name:"Stockmann",shop:"department_store"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/department_store/TJ Maxx":{name:"TJ Maxx",icon:"maki-shop",imageURL:"https://graph.facebook.com/tjmaxx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10860683",shop:"department_store"},addTags:{brand:"TJ Maxx","brand:wikidata":"Q10860683","brand:wikipedia":"en:TJ Maxx",name:"TJ Maxx",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/TK Maxx":{name:"TK Maxx",icon:"maki-shop",imageURL:"https://graph.facebook.com/tkmaxx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23823668",shop:"department_store"},addTags:{brand:"TK Maxx","brand:wikidata":"Q23823668","brand:wikipedia":"en:TK Maxx",name:"TK Maxx",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Target (Australia)":{name:"Target (Australia)",icon:"maki-shop",imageURL:"https://graph.facebook.com/targetaus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7685854",shop:"department_store"},addTags:{brand:"Target","brand:wikidata":"Q7685854","brand:wikipedia":"en:Target Australia",name:"Target",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Target (USA)":{name:"Target (USA)",icon:"maki-shop",imageURL:"https://graph.facebook.com/target/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1046951",shop:"department_store"},addTags:{brand:"Target","brand:wikidata":"Q1046951","brand:wikipedia":"en:Target Corporation",name:"Target",shop:"department_store"},countryCodes:["us"],terms:["super target"],matchScore:2,suggestion:true},"shop/department_store/The Warehouse":{name:"The Warehouse",icon:"maki-shop",imageURL:"https://graph.facebook.com/TheWarehouseNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3566291",shop:"department_store"},addTags:{brand:"The Warehouse","brand:wikidata":"Q3566291","brand:wikipedia":"en:The Warehouse Group",name:"The Warehouse",shop:"department_store"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Walmart":{name:"Walmart",icon:"maki-shop",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",shop:"department_store"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Woolworth":{name:"Woolworth",icon:"maki-shop",imageURL:"https://graph.facebook.com/WoolworthDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q183538",shop:"department_store"},addTags:{brand:"Woolworth","brand:wikidata":"Q183538","brand:wikipedia":"de:Woolworth Deutschland",name:"Woolworth",shop:"department_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Åhléns":{name:"Åhléns",icon:"maki-shop",imageURL:"https://graph.facebook.com/ahlens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q270851",shop:"department_store"},addTags:{brand:"Åhléns","brand:wikidata":"Q270851","brand:wikipedia":"sv:Åhléns",name:"Åhléns",shop:"department_store"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/department_store/東急ハンズ":{name:"東急ハンズ",icon:"maki-shop",imageURL:"https://graph.facebook.com/TokyuHandsInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q859212",shop:"department_store"},addTags:{brand:"東急ハンズ","brand:en":"Tokyu Hands","brand:ja":"東急ハンズ","brand:wikidata":"Q859212","brand:wikipedia":"ja:東急ハンズ",name:"東急ハンズ","name:en":"Tokyu Hands","name:ja":"東急ハンズ",shop:"department_store"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/department_store/無印良品":{name:"無印良品",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/2779266335/6fbe4ceb685984dbe3a149bd94043e80_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q708789",shop:"department_store"},addTags:{brand:"無印良品","brand:en":"Muji","brand:ja":"無印良品","brand:wikidata":"Q708789","brand:wikipedia":"ja:無印良品",name:"無印良品","name:en":"Muji","name:ja":"無印良品",shop:"department_store"},countryCodes:["jp","tw"],terms:[],matchScore:2,suggestion:true},"shop/department_store/롯데백화점":{name:"롯데백화점",icon:"maki-shop",imageURL:"https://graph.facebook.com/LOTTEshopping/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q489905",shop:"department_store"},addTags:{brand:"롯데백화점","brand:ko":"롯데백화점","brand:wikidata":"Q489905","brand:wikipedia":"ko:롯데백화점",name:"롯데백화점","name:en":"Lotte Department Store","name:ko":"롯데백화점",shop:"department_store"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Ace Hardware":{name:"Ace Hardware",icon:"temaki-tools",imageURL:"https://graph.facebook.com/acehardware/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4672981",shop:"doityourself"},addTags:{brand:"Ace Hardware","brand:wikidata":"Q4672981","brand:wikipedia":"en:Ace Hardware",name:"Ace Hardware",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/B&Q":{name:"B&Q",icon:"temaki-tools",imageURL:"https://graph.facebook.com/bandq/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q707602",shop:"doityourself"},addTags:{brand:"B&Q","brand:wikidata":"Q707602","brand:wikipedia":"en:B&Q",name:"B&Q",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bauhaus":{name:"Bauhaus",icon:"temaki-tools",geometry:["point","area"],tags:{"brand:wikidata":"Q672043",shop:"doityourself"},addTags:{brand:"Bauhaus","brand:wikidata":"Q672043","brand:wikipedia":"en:Bauhaus (company)",name:"Bauhaus",shop:"doityourself"},countryCodes:["at","bg","ch","cz","de","dk","ee","es","fi","hr","hu","is","lu","nl","no","se","si","sk","tr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Biltema":{name:"Biltema",icon:"temaki-tools",imageURL:"https://graph.facebook.com/BiltemaSverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3355552",shop:"doityourself"},addTags:{brand:"Biltema","brand:wikidata":"Q3355552","brand:wikipedia":"en:Biltema",name:"Biltema",shop:"doityourself"},countryCodes:["dk","fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Brico":{name:"Brico",icon:"temaki-tools",imageURL:"https://graph.facebook.com/brico.be/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2510786",shop:"doityourself"},addTags:{brand:"Brico","brand:wikidata":"Q2510786","brand:wikipedia":"en:Brico",name:"Brico",shop:"doityourself"},countryCodes:["be","fr","it"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Brico Dépôt":{name:"Brico Dépôt",icon:"temaki-tools",imageURL:"https://graph.facebook.com/BricoDepotFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2889702",shop:"doityourself"},addTags:{brand:"Brico Dépôt","brand:wikidata":"Q2889702","brand:wikipedia":"fr:Brico Dépôt",name:"Brico Dépôt",shop:"doityourself"},countryCodes:["es","fr","pt","ro"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bricoman":{name:"Bricoman",icon:"temaki-tools",imageURL:"https://graph.facebook.com/BricomanFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2925142",shop:"doityourself"},addTags:{brand:"Bricoman","brand:wikidata":"Q2925142","brand:wikipedia":"it:Bricoman",name:"Bricoman",shop:"doityourself"},countryCodes:["fr","it","pl"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bricomarché":{name:"Bricomarché",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Bricomarche/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2925147",shop:"doityourself"},addTags:{brand:"Bricomarché","brand:wikidata":"Q2925147","brand:wikipedia":"en:Bricomarché",name:"Bricomarché",shop:"doityourself"},countryCodes:["fr","pl","pt"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bricorama":{name:"Bricorama",icon:"temaki-tools",imageURL:"https://graph.facebook.com/BricoramaFR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2925146",shop:"doityourself"},addTags:{brand:"Bricorama","brand:wikidata":"Q2925146","brand:wikipedia":"en:Bricorama",name:"Bricorama",shop:"doityourself"},countryCodes:["es","fr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bunnings Warehouse":{name:"Bunnings Warehouse",icon:"temaki-tools",imageURL:"https://pbs.twimg.com/profile_images/1405732718/hammer_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q4997829",shop:"doityourself"},addTags:{brand:"Bunnings Warehouse","brand:wikidata":"Q4997829","brand:wikipedia":"en:Bunnings Warehouse",name:"Bunnings Warehouse",shop:"doityourself"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Castorama":{name:"Castorama",icon:"temaki-tools",imageURL:"https://graph.facebook.com/castorama/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q966971",shop:"doityourself"},addTags:{brand:"Castorama","brand:wikidata":"Q966971","brand:wikipedia":"en:Castorama",name:"Castorama",shop:"doityourself"},countryCodes:["fr","pl","ru"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Clas Ohlson":{name:"Clas Ohlson",icon:"temaki-tools",imageURL:"https://graph.facebook.com/clasohlsonsverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3356220",shop:"doityourself"},addTags:{brand:"Clas Ohlson","brand:wikidata":"Q3356220","brand:wikipedia":"en:Clas Ohlson",name:"Clas Ohlson",shop:"doityourself"},countryCodes:["fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Easy":{name:"Easy",icon:"temaki-tools",imageURL:"https://graph.facebook.com/EasyHomecenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5331091",shop:"doityourself"},addTags:{brand:"Easy","brand:wikidata":"Q5331091","brand:wikipedia":"en:Easy (store)",name:"Easy",shop:"doityourself"},countryCodes:["ar","cl","co"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Gamma":{name:"Gamma",icon:"temaki-tools",imageURL:"https://graph.facebook.com/gamma.be/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2294120",shop:"doityourself"},addTags:{brand:"Gamma","brand:wikidata":"Q2294120","brand:wikipedia":"en:Gamma (store)",name:"Gamma",shop:"doityourself"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Globus Baumarkt":{name:"Globus Baumarkt",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Globus.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q457503",shop:"doityourself"},addTags:{brand:"Globus Baumarkt","brand:wikidata":"Q457503","brand:wikipedia":"de:Globus Holding",name:"Globus Baumarkt",shop:"doityourself"},countryCodes:["de","lu"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Hagebaumarkt":{name:"Hagebaumarkt",icon:"temaki-tools",imageURL:"https://graph.facebook.com/hagebau/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1568279",shop:"doityourself"},addTags:{brand:"Hagebaumarkt","brand:wikidata":"Q1568279","brand:wikipedia":"de:Hagebau",name:"Hagebaumarkt",shop:"doityourself"},countryCodes:["at","be","ch","de","es","fr","lu","nl"],terms:["hagebau"],matchScore:2,suggestion:true},"shop/doityourself/Hammer":{name:"Hammer",icon:"temaki-tools",imageURL:"https://graph.facebook.com/hammerzuhause/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q52159668",shop:"doityourself"},addTags:{brand:"Hammer","brand:wikidata":"Q52159668","brand:wikipedia":"de:Hammer (Fachmarktkette)",name:"Hammer",shop:"doityourself"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Hellweg":{name:"Hellweg",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Hellweg.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1603084",shop:"doityourself"},addTags:{brand:"Hellweg","brand:wikidata":"Q1603084","brand:wikipedia":"de:Hellweg (Baumarkt)",name:"Hellweg",shop:"doityourself"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Home Building Centre (Canada)":{name:"Home Building Centre (Canada)",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homehardwarestores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3139611",shop:"doityourself"},addTags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Building Centre",shop:"doityourself"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Home Hardware Building Centre (Canada)":{name:"Home Hardware Building Centre (Canada)",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homehardwarestores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3139611",shop:"doityourself"},addTags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Hardware Building Centre",shop:"doityourself"},countryCodes:["ca"],terms:["home hardware"],matchScore:2,suggestion:true},"shop/doityourself/Home Timber & Hardware (Australia)":{name:"Home Timber & Hardware (Australia)",icon:"temaki-tools",imageURL:"https://graph.facebook.com/hometimberandhardware/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17006984",shop:"doityourself"},addTags:{alt_name:"Home Hardware",brand:"Home Timber & Hardware","brand:wikidata":"Q17006984","brand:wikipedia":"en:Home Timber & Hardware",name:"Home Timber & Hardware",shop:"doityourself",short_name:"Home"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Homebase":{name:"Homebase",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homebase/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9293447",shop:"doityourself"},addTags:{brand:"Homebase","brand:wikidata":"Q9293447","brand:wikipedia":"en:Homebase",name:"Homebase",shop:"doityourself"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Hornbach":{name:"Hornbach",icon:"temaki-tools",imageURL:"https://graph.facebook.com/hornbach.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q685926",shop:"doityourself"},addTags:{brand:"Hornbach","brand:wikidata":"Q685926","brand:wikipedia":"en:Hornbach (retailer)",name:"Hornbach",shop:"doityourself"},countryCodes:["at","ch","cz","de","lu","nl","ro","se","sk"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Hubo":{name:"Hubo",icon:"temaki-tools",imageURL:"https://graph.facebook.com/hubo.be/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3142153",shop:"doityourself"},addTags:{brand:"Hubo","brand:wikidata":"Q3142153","brand:wikipedia":"en:Hubo Belgium",name:"Hubo",shop:"doityourself"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Jewson":{name:"Jewson",icon:"temaki-tools",imageURL:"https://graph.facebook.com/jewsonuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6190226",shop:"doityourself"},addTags:{brand:"Jewson","brand:wikidata":"Q6190226","brand:wikipedia":"en:Jewson",name:"Jewson",shop:"doityourself"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Karwei":{name:"Karwei",icon:"temaki-tools",imageURL:"https://graph.facebook.com/karwei/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2097480",shop:"doityourself"},addTags:{brand:"Karwei","brand:wikidata":"Q2097480","brand:wikipedia":"en:Karwei",name:"Karwei",shop:"doityourself"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Leroy Merlin":{name:"Leroy Merlin",icon:"temaki-tools",imageURL:"https://graph.facebook.com/leroymerlin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q889624",shop:"doityourself"},addTags:{brand:"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Leroy Merlin",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Lowe's":{name:"Lowe's",icon:"temaki-tools",imageURL:"https://graph.facebook.com/lowes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1373493",shop:"doityourself"},addTags:{brand:"Lowe's","brand:wikidata":"Q1373493","brand:wikipedia":"en:Lowe's",name:"Lowe's",shop:"doityourself"},countryCodes:["ca","mx","us"],terms:["lowes home improvement"],matchScore:2,suggestion:true},"shop/doityourself/Menards":{name:"Menards",icon:"temaki-tools",imageURL:"https://graph.facebook.com/MenardsHomeImprovement/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1639897",shop:"doityourself"},addTags:{brand:"Menards","brand:wikidata":"Q1639897","brand:wikipedia":"en:Menards",name:"Menards",shop:"doityourself"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Mitre 10":{name:"Mitre 10",icon:"temaki-tools",imageURL:"https://graph.facebook.com/224109081130110/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6882393",shop:"doityourself"},addTags:{brand:"Mitre 10","brand:wikidata":"Q6882393","brand:wikipedia":"en:Mitre 10",name:"Mitre 10",shop:"doityourself"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Mr.Bricolage":{name:"Mr.Bricolage",icon:"temaki-tools",imageURL:"https://graph.facebook.com/mr.bricolagefrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3141657",shop:"doityourself"},addTags:{brand:"Mr.Bricolage","brand:wikidata":"Q3141657","brand:wikipedia":"fr:Mr Bricolage",name:"Mr.Bricolage",shop:"doityourself"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/OBI":{name:"OBI",icon:"temaki-tools",imageURL:"https://graph.facebook.com/obirussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q300518",shop:"doityourself"},addTags:{brand:"OBI","brand:wikidata":"Q300518","brand:wikipedia":"en:Obi (store)",name:"OBI",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Praktiker":{name:"Praktiker",icon:"temaki-tools",imageURL:"https://graph.facebook.com/984505914908905/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q680214",shop:"doityourself"},addTags:{brand:"Praktiker","brand:wikidata":"Q680214","brand:wikipedia":"en:Praktiker",name:"Praktiker",shop:"doityourself"},countryCodes:["bg","gr","hu","ro"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Praxis":{name:"Praxis",icon:"temaki-tools",imageURL:"https://graph.facebook.com/praxis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2741995",shop:"doityourself"},addTags:{brand:"Praxis","brand:wikidata":"Q2741995","brand:wikipedia":"nl:Praxis (winkel)",name:"Praxis",shop:"doityourself"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Promart":{name:"Promart",icon:"temaki-tools",imageURL:"https://graph.facebook.com/PROMARTHomecenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17626095",shop:"doityourself"},addTags:{brand:"Promart","brand:wikidata":"Q17626095","brand:wikipedia":"en:Promart",name:"Promart",shop:"doityourself"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Rona":{name:"Rona",icon:"temaki-tools",imageURL:"https://graph.facebook.com/ronainc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3415283",shop:"doityourself"},addTags:{brand:"Rona","brand:wikidata":"Q3415283","brand:wikipedia":"en:Rona, Inc.",name:"Rona",shop:"doityourself"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Screwfix":{name:"Screwfix",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Screwfix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7439115",shop:"doityourself"},addTags:{brand:"Screwfix","brand:wikidata":"Q7439115","brand:wikipedia":"en:Screwfix",name:"Screwfix",shop:"doityourself"},countryCodes:["de","gb"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Sodimac":{name:"Sodimac",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homecenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7553274",shop:"doityourself"},addTags:{brand:"Sodimac","brand:wikidata":"Q7553274","brand:wikipedia":"es:Sodimac",name:"Sodimac",shop:"doityourself"},countryCodes:["ar","br","cl","co","mx","pe","uy"],terms:["sodimac constructor"],matchScore:2,suggestion:true},"shop/doityourself/Tekzen":{name:"Tekzen",icon:"temaki-tools",imageURL:"https://graph.facebook.com/tekzenturkiye/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25475379",shop:"doityourself"},addTags:{brand:"Tekzen","brand:wikidata":"Q25475379","brand:wikipedia":"tr:Tekzen",name:"Tekzen",shop:"doityourself"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/The Home Depot":{name:"The Home Depot",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homedepot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q864407",shop:"doityourself"},addTags:{alt_name:"Home Depot",brand:"The Home Depot","brand:wikidata":"Q864407","brand:wikipedia":"en:The Home Depot",name:"The Home Depot",shop:"doityourself"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Toolstation":{name:"Toolstation",icon:"temaki-tools",imageURL:"https://pbs.twimg.com/profile_images/761131960215502849/EaiesgRv_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7824103",shop:"doityourself"},addTags:{brand:"Toolstation","brand:wikidata":"Q7824103","brand:wikipedia":"en:Toolstation",name:"Toolstation",shop:"doityourself"},countryCodes:["fr","gb","nl"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Toom Baumarkt":{name:"Toom Baumarkt",icon:"temaki-tools",imageURL:"https://graph.facebook.com/toom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2442970",shop:"doityourself"},addTags:{brand:"Toom Baumarkt","brand:wikidata":"Q2442970","brand:wikipedia":"de:Toom Baumarkt",name:"Toom Baumarkt",shop:"doityourself"},countryCodes:["de"],terms:["toom"],matchScore:2,suggestion:true},"shop/doityourself/Travis Perkins":{name:"Travis Perkins",icon:"temaki-tools",imageURL:"https://graph.facebook.com/TravisPerkinsPlcUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2450664",shop:"doityourself"},addTags:{brand:"Travis Perkins","brand:wikidata":"Q2450664","brand:wikipedia":"en:Travis Perkins",name:"Travis Perkins",shop:"doityourself"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Weldom":{name:"Weldom",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Weldom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16683226",shop:"doityourself"},addTags:{brand:"Weldom","brand:wikidata":"Q16683226","brand:wikipedia":"fr:Weldom",name:"Weldom",shop:"doityourself"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Wickes":{name:"Wickes",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Wickes.co.uk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7998350",shop:"doityourself"},addTags:{brand:"Wickes","brand:wikidata":"Q7998350","brand:wikipedia":"en:Wickes",name:"Wickes",shop:"doityourself"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/jem & fix":{name:"jem & fix",icon:"temaki-tools",imageURL:"https://graph.facebook.com/jemogfix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12319200",shop:"doityourself"},addTags:{brand:"jem & fix","brand:wikidata":"Q12319200","brand:wikipedia":"da:Jem & fix",name:"jem & fix",shop:"doityourself"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Леруа Мерлен":{name:"Леруа Мерлен",icon:"temaki-tools",imageURL:"https://graph.facebook.com/leroymerlin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q889624",shop:"doityourself"},addTags:{brand:"Леруа Мерлен","brand:en":"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Леруа Мерлен","name:en":"Leroy Merlin",shop:"doityourself"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/カインズホーム":{name:"カインズホーム",icon:"temaki-tools",imageURL:"https://graph.facebook.com/cainzfun/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11293852",shop:"doityourself"},addTags:{brand:"カインズホーム","brand:en":"Cainz Home","brand:ja":"カインズホーム","brand:wikidata":"Q11293852","brand:wikipedia":"ja:カインズ",name:"カインズホーム","name:en":"Cainz Home","name:ja":"カインズホーム",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/ケーヨー":{name:"ケーヨー",icon:"temaki-tools",geometry:["point","area"],tags:{"brand:wikidata":"Q11301462",shop:"doityourself"},addTags:{brand:"ケーヨー","brand:en":"Keiyo","brand:ja":"ケーヨー","brand:wikidata":"Q11301462","brand:wikipedia":"ja:ケーヨー",name:"ケーヨー","name:en":"Keiyo","name:ja":"ケーヨー",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/コメリ":{name:"コメリ",icon:"temaki-tools",imageURL:"https://graph.facebook.com/saiengardenclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11302690",shop:"doityourself"},addTags:{brand:"コメリ","brand:en":"Komeri","brand:ja":"コメリ","brand:wikidata":"Q11302690","brand:wikipedia":"ja:コメリ",name:"コメリ","name:en":"Komeri","name:ja":"コメリ",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/コーナン":{name:"コーナン",icon:"temaki-tools",imageURL:"https://graph.facebook.com/kohnan.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11303403",shop:"doityourself"},addTags:{brand:"コーナン","brand:en":"Kohnan","brand:ja":"コーナン","brand:wikidata":"Q11303403","brand:wikipedia":"ja:コーナン",name:"コーナン","name:en":"Kohnan","name:ja":"コーナン",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/ナフコ":{name:"ナフコ",icon:"temaki-tools",geometry:["point","area"],tags:{"brand:wikidata":"Q11323981",shop:"doityourself"},addTags:{brand:"ナフコ","brand:en":"Nafco","brand:ja":"ナフコ","brand:wikidata":"Q11323981","brand:wikipedia":"ja:ナフコ (ホームセンター)",name:"ナフコ","name:en":"Nafco","name:ja":"ナフコ",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/5àsec":{name:"5àsec",icon:"temaki-clothes_hanger",imageURL:"https://graph.facebook.com/5aSecBrasil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2817899",shop:"dry_cleaning"},addTags:{brand:"5àsec","brand:wikidata":"Q2817899","brand:wikipedia":"fr:5àsec",name:"5àsec",shop:"dry_cleaning"},terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/Johnsons":{name:"Johnsons",icon:"temaki-clothes_hanger",imageURL:"https://graph.facebook.com/johnsoncleaners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6268527",shop:"dry_cleaning"},addTags:{brand:"Johnsons","brand:wikidata":"Q6268527","brand:wikipedia":"en:Johnsons Cleaners UK",name:"Johnsons",shop:"dry_cleaning"},countryCodes:["gb"],terms:["johnson","johnsons cleaners"],matchScore:2,suggestion:true},"shop/dry_cleaning/Martinizing Dry Cleaning":{name:"Martinizing Dry Cleaning",icon:"temaki-clothes_hanger",imageURL:"https://graph.facebook.com/MartinizingDryClean/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6777169",shop:"dry_cleaning"},addTags:{brand:"Martinizing Dry Cleaning","brand:wikidata":"Q6777169","brand:wikipedia":"en:Martinizing Dry Cleaning",name:"Martinizing Dry Cleaning",shop:"dry_cleaning"},terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/Tide Cleaners":{name:"Tide Cleaners",icon:"temaki-clothes_hanger",imageURL:"https://graph.facebook.com/tidedrycleaners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66048841",shop:"dry_cleaning"},addTags:{brand:"Tide Cleaners","brand:wikidata":"Q66048841",name:"Tide Cleaners",shop:"dry_cleaning"},countryCodes:["us"],terms:["tide","tide dry cleaners"],matchScore:2,suggestion:true},"shop/dry_cleaning/Диана":{name:"Диана",icon:"temaki-clothes_hanger",imageURL:"https://graph.facebook.com/diana.dryclean/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62105088",shop:"dry_cleaning"},addTags:{brand:"Диана","brand:wikidata":"Q62105088",name:"Диана",shop:"dry_cleaning"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/タカケンサンシャイン":{name:"タカケンサンシャイン",icon:"temaki-clothes_hanger",geometry:["point","area"],tags:{"brand:wikidata":"Q11315914",shop:"dry_cleaning"},addTags:{brand:"タカケンサンシャイン","brand:en":"Takaken Sunshine","brand:ja":"タカケンサンシャイン","brand:wikidata":"Q11315914","brand:wikipedia":"ja:タカケンサンシャイン",name:"タカケンサンシャイン","name:en":"Takaken Sunshine","name:ja":"タカケンサンシャイン",shop:"dry_cleaning"},countryCodes:["jp"],terms:["タカケンクリーング"],matchScore:2,suggestion:true},"shop/dry_cleaning/ホワイト急便":{name:"ホワイト急便",icon:"temaki-clothes_hanger",imageURL:"https://graph.facebook.com/974471789387794/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11505557",shop:"dry_cleaning"},addTags:{brand:"ホワイト急便","brand:en":"White Kyuubin","brand:ja":"ホワイト急便","brand:wikidata":"Q11505557","brand:wikipedia":"ja:日本さわやかグループ",name:"ホワイト急便","name:en":"White Kyuubin","name:ja":"ホワイト急便",shop:"dry_cleaning"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/白洋舎":{name:"白洋舎",icon:"temaki-clothes_hanger",imageURL:"https://graph.facebook.com/hakuyosha.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11579995",shop:"dry_cleaning"},addTags:{brand:"白洋舎","brand:en":"Hakuyosha","brand:wikidata":"Q11579995","brand:wikipedia":"ja:白洋舎",name:"白洋舎","name:en":"Hakuyosha",shop:"dry_cleaning"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electrical/Kafkas":{name:"Kafkas",icon:"temaki-power",imageURL:"https://graph.facebook.com/kafkas.gr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q68201770",shop:"electrical"},addTags:{brand:"Kafkas","brand:wikidata":"Q68201770",name:"Kafkas",shop:"electrical"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Apple Store":{name:"Apple Store",icon:"fas-plug",imageURL:"https://graph.facebook.com/apple/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q421253",shop:"electronics"},addTags:{brand:"Apple Store","brand:wikidata":"Q421253","brand:wikipedia":"en:Apple Store",name:"Apple Store",shop:"electronics",short_name:"Apple"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Batteries Plus Bulbs":{name:"Batteries Plus Bulbs",icon:"fas-plug",imageURL:"https://graph.facebook.com/BatteriesPlus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17005157",shop:"electronics"},addTags:{brand:"Batteries Plus Bulbs","brand:wikidata":"Q17005157","brand:wikipedia":"en:Batteries Plus Bulbs",name:"Batteries Plus Bulbs",shop:"electronics"},countryCodes:["us"],terms:["batteries plus"],matchScore:2,suggestion:true},"shop/electronics/Best Buy":{name:"Best Buy",icon:"fas-plug",imageURL:"https://graph.facebook.com/bestbuy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q533415",shop:"electronics"},addTags:{brand:"Best Buy","brand:wikidata":"Q533415","brand:wikipedia":"en:Best Buy",name:"Best Buy",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Boulanger":{name:"Boulanger",icon:"fas-plug",imageURL:"https://graph.facebook.com/Boulanger.Electromenager.Multimedia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2921695",shop:"electronics"},addTags:{brand:"Boulanger","brand:wikidata":"Q2921695","brand:wikipedia":"fr:Boulanger (entreprise)",name:"Boulanger",shop:"electronics"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/electronics/CeX":{name:"CeX",icon:"fas-plug",imageURL:"https://graph.facebook.com/CeX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5055676",shop:"electronics"},addTags:{brand:"CeX","brand:wikidata":"Q5055676","brand:wikipedia":"en:CeX (company)",name:"CeX",shop:"electronics"},countryCodes:["au","es","gb","ie","in","it","mx","nl","pl","pt"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Coolblue":{name:"Coolblue",icon:"fas-plug",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo-coolblue-500x500.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4992516",shop:"electronics"},addTags:{brand:"Coolblue","brand:wikidata":"Q4992516","brand:wikipedia":"en:Coolblue",name:"Coolblue",shop:"electronics"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Currys PC World":{name:"Currys PC World",icon:"fas-plug",imageURL:"https://graph.facebook.com/curryspcworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3246464",shop:"electronics"},addTags:{brand:"Currys PC World","brand:wikidata":"Q3246464","brand:wikipedia":"en:Currys",name:"Currys PC World",shop:"electronics"},countryCodes:["gb","ie"],terms:["currys","pc world"],matchScore:2,suggestion:true},"shop/electronics/Darty":{name:"Darty",icon:"fas-plug",imageURL:"https://graph.facebook.com/darty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2439098",shop:"electronics"},addTags:{brand:"Darty","brand:wikidata":"Q2439098","brand:wikipedia":"fr:Darty",name:"Darty",shop:"electronics"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Elektra":{name:"Elektra",icon:"fas-plug",imageURL:"https://graph.facebook.com/TiendasElektraMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1142753",shop:"electronics"},addTags:{brand:"Elektra","brand:wikidata":"Q1142753","brand:wikipedia":"es:Grupo Elektra",name:"Elektra",shop:"electronics"},countryCodes:["gt","hn","pa","pe","sv"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Elgiganten":{name:"Elgiganten",icon:"fas-plug",imageURL:"https://graph.facebook.com/elgiganten.dk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17050121",shop:"electronics"},addTags:{brand:"Elgiganten","brand:wikidata":"Q17050121","brand:wikipedia":"en:Elgiganten",name:"Elgiganten",shop:"electronics"},countryCodes:["dk","se"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Euronics":{name:"Euronics",icon:"fas-plug",imageURL:"https://graph.facebook.com/EuronicsItalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q184860",shop:"electronics"},addTags:{brand:"Euronics","brand:wikidata":"Q184860","brand:wikipedia":"en:Euronics",name:"Euronics",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Expert":{name:"Expert",icon:"fas-plug",imageURL:"https://graph.facebook.com/expert.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q680990",shop:"electronics"},addTags:{brand:"Expert","brand:wikidata":"Q680990","brand:wikipedia":"en:Expert (company)",name:"Expert",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Fry's Electronics":{name:"Fry's Electronics",icon:"fas-plug",imageURL:"https://graph.facebook.com/fryselectronics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5506545",shop:"electronics"},addTags:{brand:"Fry's Electronics","brand:wikidata":"Q5506545","brand:wikipedia":"en:Fry's Electronics",name:"Fry's Electronics",shop:"electronics",short_name:"Fry's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Frávega":{name:"Frávega",icon:"fas-plug",imageURL:"https://graph.facebook.com/fravegaonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5401467",shop:"electronics"},addTags:{brand:"Frávega","brand:wikidata":"Q5401467","brand:wikipedia":"es:Frávega",name:"Frávega",shop:"electronics"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Garbarino":{name:"Garbarino",icon:"fas-plug",imageURL:"https://graph.facebook.com/GarbarinoGarantiaDeConfianza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5875270",shop:"electronics"},addTags:{brand:"Garbarino","brand:wikidata":"Q5875270","brand:wikipedia":"es:Garbarino",name:"Garbarino",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Gigantti":{name:"Gigantti",icon:"fas-plug",imageURL:"https://graph.facebook.com/gigantti/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42512186",shop:"electronics"},addTags:{brand:"Gigantti","brand:wikidata":"Q42512186","brand:wikipedia":"fi:Gigantti (tavarataloketju)",name:"Gigantti",shop:"electronics"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Hartlauer":{name:"Hartlauer",icon:"fas-plug",imageURL:"https://graph.facebook.com/loewennews/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1587223",shop:"electronics"},addTags:{brand:"Hartlauer","brand:wikidata":"Q1587223","brand:wikipedia":"de:Hartlauer",name:"Hartlauer",shop:"electronics"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Interdiscount":{name:"Interdiscount",icon:"fas-plug",imageURL:"https://graph.facebook.com/interdiscount/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1665980",shop:"electronics"},addTags:{brand:"Interdiscount","brand:wikidata":"Q1665980","brand:wikipedia":"de:Interdiscount",name:"Interdiscount",shop:"electronics"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/electronics/JB Hi-Fi":{name:"JB Hi-Fi",icon:"fas-plug",imageURL:"https://graph.facebook.com/JBHiFi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3310113",shop:"electronics"},addTags:{brand:"JB Hi-Fi","brand:wikidata":"Q3310113","brand:wikipedia":"en:JB Hi-Fi",name:"JB Hi-Fi",shop:"electronics"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Jaycar":{name:"Jaycar",icon:"fas-plug",imageURL:"https://graph.facebook.com/jaycarelectronics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6167713",shop:"electronics"},addTags:{brand:"Jaycar","brand:wikidata":"Q6167713","brand:wikipedia":"en:Jaycar",name:"Jaycar",shop:"electronics"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Kjell & Company":{name:"Kjell & Company",icon:"fas-plug",imageURL:"https://graph.facebook.com/kjellcoSverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6419332",shop:"electronics"},addTags:{brand:"Kjell & Company","brand:wikidata":"Q6419332","brand:wikipedia":"en:Kjell & Company",name:"Kjell & Company",shop:"electronics"},countryCodes:["no","se"],terms:["kjell och company"],matchScore:2,suggestion:true},"shop/electronics/Komputronik":{name:"Komputronik",icon:"fas-plug",imageURL:"https://graph.facebook.com/komputronik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11742085",shop:"electronics"},addTags:{brand:"Komputronik","brand:wikidata":"Q11742085","brand:wikipedia":"pl:Komputronik",name:"Komputronik",shop:"electronics"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/LG":{name:"LG",icon:"fas-plug",imageURL:"https://graph.facebook.com/theLGstory/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q162345",shop:"electronics"},addTags:{brand:"LG","brand:wikidata":"Q162345","brand:wikipedia":"en:LG Electronics",name:"LG",shop:"electronics"},terms:["lg electronics"],matchScore:2,suggestion:true},"shop/electronics/La Curacao":{name:"La Curacao",icon:"fas-plug",imageURL:"https://graph.facebook.com/CuracaoUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5194599",shop:"electronics"},addTags:{brand:"La Curacao","brand:wikidata":"Q5194599","brand:wikipedia":"en:Curacao (retail store)",name:"La Curacao",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Maplin":{name:"Maplin",icon:"fas-plug",imageURL:"https://graph.facebook.com/Maplin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6754124",shop:"electronics"},addTags:{brand:"Maplin","brand:wikidata":"Q6754124","brand:wikipedia":"en:Maplin (retailer)",name:"Maplin",shop:"electronics"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Media Expert":{name:"Media Expert",icon:"fas-plug",imageURL:"https://graph.facebook.com/mediaexpert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11776794",shop:"electronics"},addTags:{brand:"Media Expert","brand:wikidata":"Q11776794","brand:wikipedia":"pl:Media Expert",name:"Media Expert",shop:"electronics"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Media Markt":{name:"Media Markt",icon:"fas-plug",imageURL:"https://graph.facebook.com/mediamarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2381223",shop:"electronics"},addTags:{brand:"Media Markt","brand:wikidata":"Q2381223","brand:wikipedia":"en:Media Markt",name:"Media Markt",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Medimax":{name:"Medimax",icon:"fas-plug",imageURL:"https://graph.facebook.com/MEDIMAX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62872450",shop:"electronics"},addTags:{brand:"Medimax","brand:wikidata":"Q62872450",name:"Medimax",shop:"electronics"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Microsoft Store":{name:"Microsoft Store",icon:"fas-plug",imageURL:"https://pbs.twimg.com/profile_images/918923853870522368/tjvU4OpM_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1688786",shop:"electronics"},addTags:{brand:"Microsoft Store","brand:wikidata":"Q1688786","brand:wikipedia":"en:Microsoft Store",name:"Microsoft Store",shop:"electronics",short_name:"Microsoft"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Musimundo":{name:"Musimundo",icon:"fas-plug",imageURL:"https://graph.facebook.com/musimundo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6034719",shop:"electronics"},addTags:{brand:"Musimundo","brand:wikidata":"Q6034719","brand:wikipedia":"es:Musimundo",name:"Musimundo",shop:"electronics"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Neonet":{name:"Neonet",icon:"fas-plug",imageURL:"https://graph.facebook.com/Neonetpl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11790622",shop:"electronics"},addTags:{brand:"Neonet","brand:wikidata":"Q11790622","brand:wikipedia":"pl:Neonet",name:"Neonet",shop:"electronics"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/P. C. Richard & Son":{name:"P. C. Richard & Son",icon:"fas-plug",imageURL:"https://graph.facebook.com/Pcrichardandson/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7117161",shop:"electronics"},addTags:{brand:"P. C. Richard & Son","brand:wikidata":"Q7117161","brand:wikipedia":"en:P. C. Richard & Son",name:"P. C. Richard & Son",shop:"electronics"},countryCodes:["us"],terms:["pc richard"],matchScore:2,suggestion:true},"shop/electronics/Power":{name:"Power",icon:"fas-plug",imageURL:"https://graph.facebook.com/power.retail.international/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20857751",shop:"electronics"},addTags:{brand:"Power","brand:wikidata":"Q20857751","brand:wikipedia":"fi:Power",name:"Power",shop:"electronics"},countryCodes:["dk","fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/electronics/RTV Euro AGD":{name:"RTV Euro AGD",icon:"fas-plug",imageURL:"https://graph.facebook.com/rtveuroagd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7277895",shop:"electronics"},addTags:{brand:"RTV Euro AGD","brand:wikidata":"Q7277895","brand:wikipedia":"pl:RTV Euro AGD",name:"RTV Euro AGD",shop:"electronics"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/RadioShack":{name:"RadioShack",icon:"fas-plug",imageURL:"https://graph.facebook.com/RadioShack/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1195490",shop:"electronics"},addTags:{brand:"RadioShack","brand:wikidata":"Q1195490","brand:wikipedia":"en:RadioShack",name:"RadioShack",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Robert Dyas":{name:"Robert Dyas",icon:"fas-plug",imageURL:"https://pbs.twimg.com/profile_images/1082680408200884224/5hEh4Ws6_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7343720",shop:"electronics"},addTags:{brand:"Robert Dyas","brand:wikidata":"Q7343720","brand:wikipedia":"en:Robert Dyas",name:"Robert Dyas",shop:"electronics"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Samsung":{name:"Samsung",icon:"fas-plug",imageURL:"https://graph.facebook.com/SamsungNewsroom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20718",shop:"electronics"},addTags:{brand:"Samsung","brand:wikidata":"Q20718","brand:wikipedia":"en:Samsung Electronics",name:"Samsung",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Saturn":{name:"Saturn",icon:"fas-plug",imageURL:"https://graph.facebook.com/SaturnDE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2543504",shop:"electronics"},addTags:{brand:"Saturn","brand:wikidata":"Q2543504","brand:wikipedia":"en:Saturn (retailer)",name:"Saturn",shop:"electronics"},countryCodes:["at","de","lu","pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Sony":{name:"Sony",icon:"fas-plug",imageURL:"https://graph.facebook.com/sony.jpn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41187",shop:"electronics"},addTags:{brand:"Sony","brand:wikidata":"Q41187","brand:wikipedia":"en:Sony",name:"Sony",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Sony Centre":{name:"Sony Centre",icon:"fas-plug",geometry:["point","area"],tags:{"brand:wikidata":"Q3437496",shop:"electronics"},addTags:{brand:"Sony Centre","brand:wikidata":"Q3437496","brand:wikipedia":"en:Sony Centre",name:"Sony Centre",shop:"electronics"},terms:["sony center"],matchScore:2,suggestion:true},"shop/electronics/Teknikmagasinet":{name:"Teknikmagasinet",icon:"fas-plug",imageURL:"https://graph.facebook.com/TeknikmagasinetNorge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3357520",shop:"electronics"},addTags:{brand:"Teknikmagasinet","brand:wikidata":"Q3357520","brand:wikipedia":"en:Teknikmagasinet",name:"Teknikmagasinet",shop:"electronics"},countryCodes:["fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/electronics/The Good Guys":{name:"The Good Guys",icon:"fas-plug",imageURL:"https://graph.facebook.com/thegoodguysAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7737217",shop:"electronics"},addTags:{brand:"The Good Guys","brand:wikidata":"Q7737217","brand:wikipedia":"en:The Good Guys (Australian company)",name:"The Good Guys",shop:"electronics"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/electronics/The Source":{name:"The Source",icon:"fas-plug",imageURL:"https://graph.facebook.com/thesourcecanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3212934",shop:"electronics"},addTags:{brand:"The Source","brand:wikidata":"Q3212934","brand:wikipedia":"en:The Source (retailer)",name:"The Source",shop:"electronics"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Trony":{name:"Trony",icon:"fas-plug",imageURL:"https://graph.facebook.com/trony/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3999692",shop:"electronics"},addTags:{brand:"Trony","brand:wikidata":"Q3999692","brand:wikipedia":"it:Trony",name:"Trony",shop:"electronics"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Unieuro":{name:"Unieuro",icon:"fas-plug",imageURL:"https://graph.facebook.com/unieuro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4004687",shop:"electronics"},addTags:{brand:"Unieuro","brand:wikidata":"Q4004687","brand:wikipedia":"en:Unieuro",name:"Unieuro",shop:"electronics"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Worten":{name:"Worten",icon:"fas-plug",imageURL:"https://graph.facebook.com/WortenES/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10394039",shop:"electronics"},addTags:{brand:"Worten","brand:wikidata":"Q10394039","brand:wikipedia":"pt:Worten",name:"Worten",shop:"electronics"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/electronics/b8ta":{name:"b8ta",icon:"fas-plug",imageURL:"https://graph.facebook.com/b8ta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55604609",shop:"electronics"},addTags:{brand:"b8ta","brand:wikidata":"Q55604609","brand:wikipedia":"en:B8ta",name:"b8ta",shop:"electronics"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/electronics/М.Видео":{name:"М.Видео",icon:"fas-plug",imageURL:"https://graph.facebook.com/mvideo.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6558800",shop:"electronics"},addTags:{brand:"М.Видео","brand:en":"M.video","brand:wikidata":"Q6558800","brand:wikipedia":"en:M.video",name:"М.Видео","name:en":"M.video",shop:"electronics"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Фокстрот":{name:"Фокстрот",icon:"fas-plug",imageURL:"https://graph.facebook.com/foxtrotinfo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16721578",shop:"electronics"},addTags:{brand:"Фокстрот","brand:wikidata":"Q16721578","brand:wikipedia":"uk:Фокстрот (торгова мережа)",name:"Фокстрот",shop:"electronics"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Эксперт":{name:"Эксперт",icon:"fas-plug",imageURL:"https://graph.facebook.com/expertVyhino/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4530590",shop:"electronics"},addTags:{brand:"Эксперт","brand:en":"Expert","brand:ru":"Эксперт","brand:wikidata":"Q4530590","brand:wikipedia":"ru:Эксперт (сеть магазинов)",name:"Эксперт","name:en":"Expert","name:ru":"Эксперт",shop:"electronics"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Эльдорадо":{name:"Эльдорадо",icon:"fas-plug",imageURL:"https://graph.facebook.com/Eldorado.Stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4531492",shop:"electronics"},addTags:{brand:"Эльдорадо","brand:wikidata":"Q4531492","brand:wikipedia":"ru:Эльдорадо (сеть магазинов)",name:"Эльдорадо",shop:"electronics"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/electronics/あきばお〜":{name:"あきばお〜",icon:"fas-plug",geometry:["point","area"],tags:{"brand:wikidata":"Q11257009",shop:"electronics"},addTags:{brand:"あきばお〜","brand:en":"Akibaoo","brand:ja":"あきばお〜","brand:wikidata":"Q11257009","brand:wikipedia":"ja:あきばお〜",name:"あきばお〜","name:en":"Akibaoo","name:ja":"あきばお〜",shop:"electronics"},countryCodes:["jp"],terms:["あきばお~"],matchScore:2,suggestion:true},"shop/electronics/エディオン":{name:"エディオン",icon:"fas-plug",imageURL:"https://graph.facebook.com/edion.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11290252",shop:"electronics"},addTags:{brand:"エディオン","brand:en":"EDION","brand:ja":"エディオン","brand:wikidata":"Q11290252","brand:wikipedia":"ja:エディオン",name:"エディオン","name:en":"EDION","name:ja":"エディオン",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ケーズデンキ":{name:"ケーズデンキ",icon:"fas-plug",imageURL:"https://graph.facebook.com/ksdenki20180125/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6322472",shop:"electronics"},addTags:{brand:"ケーズデンキ","brand:en":"K's Denki","brand:ja":"ケーズデンキ","brand:wikidata":"Q6322472","brand:wikipedia":"ja:ケーズホールディングス",name:"ケーズデンキ","name:en":"K's Denki","name:ja":"ケーズデンキ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/コジマ":{name:"コジマ",icon:"fas-plug",imageURL:"https://graph.facebook.com/kojima.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11302052",shop:"electronics"},addTags:{brand:"コジマ","brand:en":"Kojima","brand:ja":"コジマ","brand:wikidata":"Q11302052","brand:wikipedia":"ja:コジマ",name:"コジマ","name:en":"Kojima","name:ja":"コジマ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ソフマップ":{name:"ソフマップ",icon:"fas-plug",imageURL:"https://graph.facebook.com/sofmap.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7553789",shop:"electronics"},addTags:{brand:"ソフマップ","brand:en":"Sofmap","brand:ja":"ソフマップ","brand:wikidata":"Q7553789","brand:wikipedia":"ja:ソフマップ",name:"ソフマップ","name:en":"Sofmap","name:ja":"ソフマップ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ノジマ":{name:"ノジマ",icon:"fas-plug",imageURL:"https://graph.facebook.com/nojima.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11325660",shop:"electronics"},addTags:{brand:"ノジマ","brand:en":"Nojima","brand:ja":"ノジマ","brand:wikidata":"Q11325660","brand:wikipedia":"ja:ノジマ",name:"ノジマ","name:en":"Nojima","name:ja":"ノジマ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ビックカメラ":{name:"ビックカメラ",icon:"fas-plug",imageURL:"https://graph.facebook.com/biccamera.page/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4903531",shop:"electronics"},addTags:{brand:"ビックカメラ","brand:en":"Bic Camera","brand:ja":"ビックカメラ","brand:wikidata":"Q4903531","brand:wikipedia":"ja:ビックカメラ",name:"ビックカメラ","name:en":"Bic Camera","name:ja":"ビックカメラ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ヤマダ電機":{name:"ヤマダ電機",icon:"fas-plug",imageURL:"https://graph.facebook.com/YAMADA.DENKI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1096390",shop:"electronics"},addTags:{brand:"ヤマダ電機","brand:en":"Yamada Denki","brand:ja":"ヤマダ電機","brand:wikidata":"Q1096390","brand:wikipedia":"en:Yamada Denki",name:"ヤマダ電機","name:en":"Yamada Denki","name:ja":"ヤマダ電機",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ヨドバシカメラ":{name:"ヨドバシカメラ",icon:"fas-plug",imageURL:"https://graph.facebook.com/yodobashi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q168467",shop:"electronics"},addTags:{brand:"ヨドバシカメラ","brand:en":"Yodobashi Camera","brand:ja":"ヨドバシカメラ","brand:wikidata":"Q168467","brand:wikipedia":"ja:ヨドバシカメラ",name:"ヨドバシカメラ","name:en":"Yodobashi Camera","name:ja":"ヨドバシカメラ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/全國電子":{name:"全國電子",icon:"fas-plug",imageURL:"https://graph.facebook.com/elifemall.com.tw/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10891540",shop:"electronics"},addTags:{brand:"全國電子","brand:en":"E-life Mall","brand:wikidata":"Q10891540","brand:wikipedia":"zh:全國電子",name:"全國電子","name:en":"E-life Mall",shop:"electronics"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/electronics/燦坤3C":{name:"燦坤3C",icon:"fas-plug",imageURL:"https://graph.facebook.com/tkec520/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11569285",shop:"electronics"},addTags:{brand:"燦坤3C","brand:en":"Tsannkuen 3C","brand:wikidata":"Q11569285","brand:wikipedia":"zh:燦坤",name:"燦坤3C","name:en":"Tsannkuen 3C",shop:"electronics"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/erotic/Adam & Eve":{name:"Adam & Eve",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1215637357011046402/6y0FBjqk_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4678604",shop:"erotic"},addTags:{brand:"Adam & Eve","brand:wikidata":"Q4678604","brand:wikipedia":"en:Adam & Eve (company)",name:"Adam & Eve",shop:"erotic"},countryCodes:["ca","pe","us"],terms:[],matchScore:2,suggestion:true},"shop/erotic/Amazing Intimate Essentials":{name:"Amazing Intimate Essentials",icon:"maki-shop",imageURL:"https://graph.facebook.com/amazingstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66305936",shop:"erotic"},addTags:{brand:"Amazing Intimate Essentials","brand:wikidata":"Q66305936",name:"Amazing Intimate Essentials",shop:"erotic",short_name:"Amazing.net"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/erotic/Ann Summers":{name:"Ann Summers",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1104069397008789504/jN1FCnL5_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q579524",shop:"erotic"},addTags:{brand:"Ann Summers","brand:wikidata":"Q579524","brand:wikipedia":"en:Ann Summers",name:"Ann Summers",shop:"erotic"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/erotic/Orion":{name:"Orion",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/807193082244505600/DWoJxqGu_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1609577",shop:"erotic"},addTags:{brand:"Orion","brand:wikidata":"Q1609577","brand:wikipedia":"de:Orion (Erotik)",name:"Orion",shop:"erotic"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/erotic/Pulse and Cocktails":{name:"Pulse and Cocktails",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/820968242835587072/oAqqidgR_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7259672",shop:"erotic"},addTags:{brand:"Pulse and Cocktails","brand:wikidata":"Q7259672","brand:wikipedia":"en:Pulse and Cocktails",name:"Pulse and Cocktails",shop:"erotic"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/fabric/Mondial Tissus":{name:"Mondial Tissus",icon:"fas-tape",imageURL:"https://graph.facebook.com/MondialTissus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17635288",shop:"fabric"},addTags:{brand:"Mondial Tissus","brand:wikidata":"Q17635288","brand:wikipedia":"fr:Mondial Tissus",name:"Mondial Tissus",shop:"fabric"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/fashion_accessories/Brighton Collectibles":{name:"Brighton Collectibles",icon:"temaki-fashion_accessories",imageURL:"https://graph.facebook.com/BrightonCollectibles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4967623",shop:"fashion_accessories"},addTags:{brand:"Brighton Collectibles","brand:wikidata":"Q4967623","brand:wikipedia":"en:Brighton Collectibles",name:"Brighton Collectibles",shop:"fashion_accessories"},countryCodes:["us"],terms:["brighton"],matchScore:2,suggestion:true},"shop/fashion_accessories/Bvlgari":{name:"Bvlgari",icon:"temaki-fashion_accessories",imageURL:"https://graph.facebook.com/Bulgari/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q752515",shop:"fashion_accessories"},addTags:{brand:"Bulgari","brand:wikidata":"Q752515","brand:wikipedia":"en:Bulgari",name:"Bvlgari",shop:"fashion_accessories"},terms:["bulgari"],matchScore:2,suggestion:true},"shop/fashion_accessories/Claire's":{name:"Claire's",icon:"temaki-fashion_accessories",imageURL:"https://graph.facebook.com/claires/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2974996",shop:"fashion_accessories"},addTags:{brand:"Claire's","brand:wikidata":"Q2974996","brand:wikipedia":"en:Claire's",name:"Claire's",shop:"fashion_accessories"},terms:[],matchScore:2,suggestion:true},"shop/fashion_accessories/Radley London":{name:"Radley London",icon:"temaki-fashion_accessories",imageURL:"https://graph.facebook.com/RadleyUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7281436",shop:"fashion_accessories"},addTags:{brand:"Radley London","brand:wikidata":"Q7281436",name:"Radley London",shop:"fashion_accessories",short_name:"Radley"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/fashion_accessories/Van Cleef & Arpels":{name:"Van Cleef & Arpels",icon:"temaki-fashion_accessories",imageURL:"https://graph.facebook.com/vancleef.arpels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2708181",shop:"fashion_accessories"},addTags:{brand:"Van Cleef & Arpels","brand:wikidata":"Q2708181","brand:wikipedia":"en:Van Cleef & Arpels",name:"Van Cleef & Arpels",shop:"fashion_accessories"},terms:["van cleef & arples"],matchScore:2,suggestion:true},"shop/flooring/Floor & Decor":{name:"Floor & Decor",icon:"temaki-tools",imageURL:"https://graph.facebook.com/flooranddecor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56280964",shop:"flooring"},addTags:{brand:"Floor & Decor","brand:wikidata":"Q56280964","brand:wikipedia":"en:Floor & Decor",name:"Floor & Decor",shop:"flooring"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/florist/Blume 2000":{name:"Blume 2000",icon:"maki-florist",imageURL:"https://graph.facebook.com/Blume2000.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q886166",shop:"florist"},addTags:{brand:"Blume 2000","brand:wikidata":"Q886166","brand:wikipedia":"de:Blume 2000",name:"Blume 2000",shop:"florist"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/florist/Blumen Risse":{name:"Blumen Risse",icon:"maki-florist",imageURL:"https://graph.facebook.com/BlumenRisse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q886177",shop:"florist"},addTags:{brand:"Blumen Risse","brand:wikidata":"Q886177","brand:wikipedia":"de:Blumen Risse",name:"Blumen Risse",shop:"florist"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/florist/Holland Blumen Mark":{name:"Holland Blumen Mark",icon:"maki-florist",imageURL:"https://graph.facebook.com/HollandBlumenMark/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1624739",shop:"florist"},addTags:{brand:"Holland Blumen Mark","brand:wikidata":"Q1624739","brand:wikipedia":"de:Holland Blumen Mark",name:"Holland Blumen Mark",shop:"florist"},countryCodes:["at"],terms:["holland blumen"],matchScore:2,suggestion:true},"shop/florist/Interflora":{name:"Interflora",icon:"maki-florist",imageURL:"https://graph.facebook.com/Interflora.France/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q692179",shop:"florist"},addTags:{brand:"Interflora","brand:wikidata":"Q692179","brand:wikipedia":"en:Interflora",name:"Interflora",shop:"florist"},countryCodes:["fr","gb","no","se"],terms:[],matchScore:2,suggestion:true},"shop/florist/Monceau Fleurs":{name:"Monceau Fleurs",icon:"maki-florist",imageURL:"https://graph.facebook.com/Monceau.Fleurs.France/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17629431",shop:"florist"},addTags:{brand:"Monceau Fleurs","brand:wikidata":"Q17629431","brand:wikipedia":"fr:Emova Group",name:"Monceau Fleurs",shop:"florist"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/frame/Aaron Brothers":{name:"Aaron Brothers",icon:"fas-vector-square",imageURL:"https://graph.facebook.com/aaronbrothers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64979251",shop:"frame"},addTags:{brand:"Aaron Brothers","brand:wikidata":"Q64979251",name:"Aaron Brothers",shop:"frame"},countryCodes:["us"],terms:["aaron brothers art & framing","aaron brothers custom framing"],matchScore:2,suggestion:true},"shop/frozen_food/Dream Dinners":{name:"Dream Dinners",icon:"maki-shop",imageURL:"https://graph.facebook.com/DreamDinners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5306355",shop:"frozen_food"},addTags:{brand:"Dream Dinners","brand:wikidata":"Q5306355","brand:wikipedia":"en:Dream Dinners",name:"Dream Dinners",opening_hours:"\"by appointment\"",shop:"frozen_food"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/frozen_food/Farmfoods":{name:"Farmfoods",icon:"maki-shop",imageURL:"https://graph.facebook.com/147382588630890/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5435841",shop:"frozen_food"},addTags:{brand:"Farmfoods","brand:wikidata":"Q5435841","brand:wikipedia":"en:Farmfoods",name:"Farmfoods",shop:"frozen_food"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/frozen_food/Fulton's Foods":{name:"Fulton's Foods",icon:"maki-shop",imageURL:"https://graph.facebook.com/fultonfoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6112633",shop:"frozen_food"},addTags:{brand:"Fulton's Foods","brand:wikidata":"Q6112633","brand:wikipedia":"en:Fulton's Foods",name:"Fulton's Foods",shop:"frozen_food"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/frozen_food/Iceland":{name:"Iceland",icon:"maki-shop",imageURL:"https://graph.facebook.com/icelandfoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q721810",shop:"frozen_food"},addTags:{brand:"Iceland","brand:wikidata":"Q721810","brand:wikipedia":"en:Iceland (supermarket)",name:"Iceland",shop:"frozen_food"},terms:[],matchScore:2,suggestion:true},"shop/frozen_food/Picard":{name:"Picard",icon:"maki-shop",imageURL:"https://graph.facebook.com/picardsurgeles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3382454",shop:"frozen_food"},addTags:{brand:"Picard","brand:wikidata":"Q3382454","brand:wikipedia":"en:Picard Surgelés",name:"Picard",shop:"frozen_food"},countryCodes:["be","fr","lu"],terms:[],matchScore:2,suggestion:true},"shop/frozen_food/Thiriet":{name:"Thiriet",icon:"maki-shop",imageURL:"https://graph.facebook.com/thiriet.surgeles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3524695",shop:"frozen_food"},addTags:{brand:"Thiriet","brand:wikidata":"Q3524695","brand:wikipedia":"fr:Thiriet (entreprise)",name:"Thiriet",shop:"frozen_food"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/funeral_directors/PFG":{name:"PFG",icon:"maki-cemetery",geometry:["point","area"],tags:{"brand:wikidata":"Q3396087",shop:"funeral_directors"},addTags:{brand:"PFG","brand:wikidata":"Q3396087","brand:wikipedia":"fr:Pompes funèbres générales",name:"PFG",official_name:"Pompes Funèbres Générales",shop:"funeral_directors"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/funeral_directors/Roblot":{name:"Roblot",icon:"maki-cemetery",imageURL:"https://graph.facebook.com/522928887844420/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63247414",shop:"funeral_directors"},addTags:{brand:"Roblot","brand:wikidata":"Q63247414",name:"Roblot",shop:"funeral_directors"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/funeral_directors/Roc-Eclerc":{name:"Roc-Eclerc",icon:"maki-cemetery",imageURL:"https://graph.facebook.com/grouperoceclerc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62558102",shop:"funeral_directors"},addTags:{brand:"Roc-Eclerc","brand:wikidata":"Q62558102",name:"Roc-Eclerc",shop:"funeral_directors"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/funeral_directors/The Co-operative Funeralcare":{name:"The Co-operative Funeralcare",icon:"maki-cemetery",imageURL:"https://pbs.twimg.com/profile_images/1034361261193134080/1PfqKyVV_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7726521",shop:"funeral_directors"},addTags:{brand:"The Co-operative Funeralcare","brand:wikidata":"Q7726521","brand:wikipedia":"en:Co-op Funeralcare",name:"The Co-operative Funeralcare",shop:"funeral_directors"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/AHF":{name:"AHF",icon:"fas-couch",imageURL:"https://pbs.twimg.com/profile_images/1207239597513674752/BvhwknlS_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q50132485",shop:"furniture"},addTags:{brand:"AHF","brand:wikidata":"Q50132485",name:"AHF",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Aaron's":{name:"Aaron's",icon:"fas-couch",imageURL:"https://graph.facebook.com/aaronsinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10397787",shop:"furniture"},addTags:{brand:"Aaron's","brand:wikidata":"Q10397787","brand:wikipedia":"en:Aaron's, Inc.",name:"Aaron's",shop:"furniture"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/American Signature Furniture":{name:"American Signature Furniture",icon:"fas-couch",imageURL:"https://graph.facebook.com/AmericanSignatureFurniture/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63859411",shop:"furniture"},addTags:{brand:"American Signature Furniture","brand:wikidata":"Q63859411",name:"American Signature Furniture",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Arhaus":{name:"Arhaus",icon:"fas-couch",imageURL:"https://graph.facebook.com/44947264751/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q35689887",shop:"furniture"},addTags:{brand:"Arhaus","brand:wikidata":"Q35689887","brand:wikipedia":"en:Arhaus",name:"Arhaus",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Ashley HomeStore":{name:"Ashley HomeStore",icon:"fas-couch",imageURL:"https://graph.facebook.com/AshleyHomeStore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4805437",shop:"furniture"},addTags:{alt_name:"Ashley Furniture",brand:"Ashley HomeStore","brand:wikidata":"Q4805437","brand:wikipedia":"en:Ashley HomeStore",name:"Ashley HomeStore",shop:"furniture"},countryCodes:["ca","us"],terms:["ashley furniture homestore"],matchScore:2,suggestion:true},"shop/furniture/Asko":{name:"Asko",icon:"fas-couch",imageURL:"https://graph.facebook.com/askohuonekalut/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11853132",shop:"furniture"},addTags:{brand:"Asko","brand:wikidata":"Q11853132","brand:wikipedia":"fi:Asko",name:"Asko",shop:"furniture"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Askona":{name:"Askona",icon:"fas-couch",imageURL:"https://graph.facebook.com/AskonaRu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4071319",shop:"furniture"},addTags:{brand:"Askona","brand:wikidata":"Q4071319","brand:wikipedia":"ru:Аскона (компания)",name:"Askona",shop:"furniture"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Black Red White":{name:"Black Red White",icon:"fas-couch",imageURL:"https://graph.facebook.com/BlackRedWhitePL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4921546",shop:"furniture"},addTags:{brand:"Black Red White","brand:wikidata":"Q4921546","brand:wikipedia":"en:Black Red White",name:"Black Red White",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/BoConcept":{name:"BoConcept",icon:"fas-couch",imageURL:"https://graph.facebook.com/boconceptusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11338915",shop:"furniture"},addTags:{brand:"BoConcept","brand:wikidata":"Q11338915","brand:wikipedia":"en:BoConcept",name:"BoConcept",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Bob's Discount Furniture":{name:"Bob's Discount Furniture",icon:"fas-couch",imageURL:"https://graph.facebook.com/mybobs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4931582",shop:"furniture"},addTags:{brand:"Bob's Discount Furniture","brand:wikidata":"Q4931582","brand:wikipedia":"en:Bob's Discount Furniture",name:"Bob's Discount Furniture",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Bodzio":{name:"Bodzio",icon:"fas-couch",imageURL:"https://graph.facebook.com/FabrykaMebliBodzio/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20034845",shop:"furniture"},addTags:{brand:"Bodzio","brand:wikidata":"Q20034845","brand:wikipedia":"pl:Fabryka Mebli Bodzio",name:"Bodzio",shop:"furniture"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/furniture/But":{name:"But",icon:"fas-couch",imageURL:"https://graph.facebook.com/but/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18720442",shop:"furniture"},addTags:{brand:"But","brand:wikidata":"Q18720442","brand:wikipedia":"en:BUT (retailer)",name:"But",shop:"furniture"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Cabinets To Go":{name:"Cabinets To Go",icon:"fas-couch",imageURL:"https://graph.facebook.com/CabinetsToGo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25245346",shop:"furniture"},addTags:{brand:"Cabinets To Go","brand:wikidata":"Q25245346","brand:wikipedia":"en:Cabinets To Go",name:"Cabinets To Go",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Casa":{name:"Casa",icon:"fas-couch",imageURL:"https://graph.facebook.com/casashops.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1991755",shop:"furniture"},addTags:{brand:"Casa","brand:wikidata":"Q1991755","brand:wikipedia":"fr:Casa (enseigne)",name:"Casa",shop:"furniture"},countryCodes:["be","ch","es","fr","it","lu","pt"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Conforama":{name:"Conforama",icon:"fas-couch",imageURL:"https://graph.facebook.com/Conforama/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q541134",shop:"furniture"},addTags:{brand:"Conforama","brand:wikidata":"Q541134","brand:wikipedia":"en:Conforama",name:"Conforama",shop:"furniture"},countryCodes:["ch","es","fr","it","lu"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Crate & Barrel":{name:"Crate & Barrel",icon:"fas-couch",imageURL:"https://graph.facebook.com/crateandbarrel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5182604",shop:"furniture"},addTags:{brand:"Crate & Barrel","brand:wikidata":"Q5182604","brand:wikipedia":"en:Crate & Barrel",name:"Crate & Barrel",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/DFS":{name:"DFS",icon:"fas-couch",imageURL:"https://graph.facebook.com/DFSUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5204927",shop:"furniture"},addTags:{brand:"DFS","brand:wikidata":"Q5204927","brand:wikipedia":"en:DFS Furniture",name:"DFS",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Dunelm":{name:"Dunelm",icon:"fas-couch",imageURL:"https://graph.facebook.com/DunelmUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5315020",shop:"furniture"},addTags:{brand:"Dunelm","brand:wikidata":"Q5315020","brand:wikipedia":"en:Dunelm Group",name:"Dunelm",shop:"furniture"},countryCodes:["gb"],terms:["dunelm hill"],matchScore:2,suggestion:true},"shop/furniture/Dänisches Bettenlager":{name:"Dänisches Bettenlager",icon:"fas-couch",imageURL:"https://graph.facebook.com/JYSK.dk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q138913",shop:"furniture"},addTags:{brand:"Dänisches Bettenlager","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"Dänisches Bettenlager",shop:"furniture"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Ethan Allen":{name:"Ethan Allen",icon:"fas-couch",imageURL:"https://graph.facebook.com/ethanallendesign/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5402870",shop:"furniture"},addTags:{brand:"Ethan Allen","brand:wikidata":"Q5402870","brand:wikipedia":"en:Ethan Allen (company)",name:"Ethan Allen",shop:"furniture"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Fly":{name:"Fly",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFly-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1389184",shop:"furniture"},addTags:{brand:"Fly","brand:wikidata":"Q1389184","brand:wikipedia":"fr:Fly (entreprise)",name:"Fly",shop:"furniture"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Freedom":{name:"Freedom",icon:"fas-couch",imageURL:"https://graph.facebook.com/freedomAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5500546",shop:"furniture"},addTags:{brand:"Freedom","brand:wikidata":"Q5500546","brand:wikipedia":"en:Freedom Furniture",name:"Freedom",shop:"furniture"},countryCodes:["au"],terms:["freedom furniture"],matchScore:2,suggestion:true},"shop/furniture/Furniture Village":{name:"Furniture Village",icon:"fas-couch",imageURL:"https://graph.facebook.com/furniturevillage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5509685",shop:"furniture"},addTags:{brand:"Furniture Village","brand:wikidata":"Q5509685","brand:wikipedia":"en:Furniture Village",name:"Furniture Village",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/HSL":{name:"HSL",icon:"fas-couch",imageURL:"https://graph.facebook.com/hslchairs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64284324",shop:"furniture"},addTags:{brand:"HSL","brand:wikidata":"Q64284324",name:"HSL",official_name:"High Seat Limited",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Harveys":{name:"Harveys",icon:"fas-couch",imageURL:"https://graph.facebook.com/harveysfurniture/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5677754",shop:"furniture"},addTags:{brand:"Harveys","brand:wikidata":"Q5677754","brand:wikipedia":"en:Harveys Furniture",name:"Harveys",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Havertys":{name:"Havertys",icon:"fas-couch",imageURL:"https://pbs.twimg.com/profile_images/672434576397062144/tX39o3Bz_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5683881",shop:"furniture"},addTags:{brand:"Havertys","brand:wikidata":"Q5683881","brand:wikipedia":"en:Havertys",name:"Havertys",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/IKEA":{name:"IKEA",icon:"fas-couch",imageURL:"https://graph.facebook.com/IKEA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q54078",shop:"furniture"},addTags:{brand:"IKEA","brand:wikidata":"Q54078","brand:wikipedia":"en:IKEA",name:"IKEA",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Isku":{name:"Isku",icon:"fas-couch",imageURL:"https://graph.facebook.com/iskuinteriorofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11865127",shop:"furniture"},addTags:{brand:"Isku","brand:wikidata":"Q11865127","brand:wikipedia":"fi:Isku (yritys)",name:"Isku",shop:"furniture"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/furniture/JYSK":{name:"JYSK",icon:"fas-couch",imageURL:"https://graph.facebook.com/JYSK.dk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q138913",shop:"furniture"},addTags:{brand:"JYSK","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"JYSK",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Jerome's Furniture":{name:"Jerome's Furniture",icon:"fas-couch",imageURL:"https://graph.facebook.com/JeromesFurniture/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997693",shop:"furniture"},addTags:{brand:"Jerome's Furniture","brand:wikidata":"Q16997693","brand:wikipedia":"en:Jerome's",name:"Jerome's Furniture",shop:"furniture",short_name:"Jerome's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Kika":{name:"Kika",icon:"fas-couch",imageURL:"https://graph.facebook.com/kika/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q256456",shop:"furniture"},addTags:{brand:"Kika","brand:wikidata":"Q256456","brand:wikipedia":"de:Kika (Möbelhaus)",name:"Kika",shop:"furniture"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Kwantum":{name:"Kwantum",icon:"fas-couch",imageURL:"https://graph.facebook.com/KwantumNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2262591",shop:"furniture"},addTags:{brand:"Kwantum","brand:wikidata":"Q2262591","brand:wikipedia":"nl:Kwantum (winkelketen)",name:"Kwantum",shop:"furniture"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/furniture/La-Z-Boy":{name:"La-Z-Boy",icon:"fas-couch",imageURL:"https://graph.facebook.com/lazboy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6391583",shop:"furniture"},addTags:{brand:"La-Z-Boy","brand:wikidata":"Q6391583","brand:wikipedia":"en:La-Z-Boy",name:"La-Z-Boy",shop:"furniture"},countryCodes:["ca","us"],terms:["la-z-boy furniture gallery"],matchScore:2,suggestion:true},"shop/furniture/Laura Ashley Home":{name:"Laura Ashley Home",icon:"fas-couch",imageURL:"https://pbs.twimg.com/profile_images/1096100741968785408/hOoKNZzn_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1523089",shop:"furniture"},addTags:{brand:"Laura Ashley","brand:wikidata":"Q1523089","brand:wikipedia":"en:Laura Ashley plc",name:"Laura Ashley Home",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Leen Bakker":{name:"Leen Bakker",icon:"fas-couch",imageURL:"https://graph.facebook.com/leenbakker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3333662",shop:"furniture"},addTags:{brand:"Leen Bakker","brand:wikidata":"Q3333662","brand:wikipedia":"nl:Leen Bakker",name:"Leen Bakker",shop:"furniture"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Leiner":{name:"Leiner",icon:"fas-couch",imageURL:"https://graph.facebook.com/Leiner.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1661472",shop:"furniture"},addTags:{brand:"Leiner","brand:wikidata":"Q1661472","brand:wikipedia":"de:Rudolf Leiner (Unternehmen)",name:"Leiner",shop:"furniture"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/furniture/LoveSac":{name:"LoveSac",icon:"fas-couch",imageURL:"https://graph.facebook.com/LoveSac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6690181",shop:"furniture"},addTags:{brand:"LoveSac","brand:wikidata":"Q6690181","brand:wikipedia":"en:LoveSac",name:"LoveSac",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Maisons du Monde":{name:"Maisons du Monde",icon:"fas-couch",imageURL:"https://graph.facebook.com/maisonsdumondeus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3280364",shop:"furniture"},addTags:{brand:"Maisons du Monde","brand:wikidata":"Q3280364","brand:wikipedia":"fr:Maisons du Monde",name:"Maisons du Monde",shop:"furniture"},countryCodes:["be","ch","de","es","fr","gb","it","lu"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Möbelix":{name:"Möbelix",icon:"fas-couch",imageURL:"https://graph.facebook.com/moebelix.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q877547",shop:"furniture"},addTags:{brand:"Möbelix","brand:wikidata":"Q877547","brand:wikipedia":"hu:Möbelix",name:"Möbelix",shop:"furniture"},countryCodes:["at","cz","hu","sk"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Mömax":{name:"Mömax",icon:"fas-couch",imageURL:"https://graph.facebook.com/moemax.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56388481",shop:"furniture"},addTags:{brand:"Mömax","brand:wikidata":"Q56388481","brand:wikipedia":"hu:Mömax",name:"Mömax",shop:"furniture"},countryCodes:["at","de","hu","si"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Oak Furnitureland":{name:"Oak Furnitureland",icon:"fas-couch",imageURL:"https://graph.facebook.com/OakFurnitureland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16959724",shop:"furniture"},addTags:{brand:"Oak Furnitureland","brand:wikidata":"Q16959724","brand:wikipedia":"en:Oak Furniture Land",name:"Oak Furnitureland",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Poltronesofà":{name:"Poltronesofà",icon:"fas-couch",imageURL:"https://graph.facebook.com/poltronesofaspa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80833069",shop:"furniture"},addTags:{brand:"Poltronesofà","brand:wikidata":"Q80833069",name:"Poltronesofà",shop:"furniture"},countryCodes:["be","ch","cy","fr","it","mt"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Pottery Barn":{name:"Pottery Barn",icon:"fas-couch",imageURL:"https://graph.facebook.com/potterybarn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3400126",shop:"furniture"},addTags:{brand:"Pottery Barn","brand:wikidata":"Q3400126","brand:wikipedia":"en:Pottery Barn",name:"Pottery Barn",shop:"furniture"},countryCodes:["au","ca","mx","ph","us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Raymour & Flanigan":{name:"Raymour & Flanigan",icon:"fas-couch",imageURL:"https://graph.facebook.com/raymourandflanigan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7299290",shop:"furniture"},addTags:{brand:"Raymour & Flanigan","brand:wikidata":"Q7299290","brand:wikipedia":"en:Raymour & Flanigan",name:"Raymour & Flanigan",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Rent-A-Center":{name:"Rent-A-Center",icon:"fas-couch",imageURL:"https://graph.facebook.com/RentACenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7313497",shop:"furniture"},addTags:{brand:"Rent-A-Center","brand:wikidata":"Q7313497","brand:wikipedia":"en:Rent-A-Center",name:"Rent-A-Center",shop:"furniture"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Restoration Hardware":{name:"Restoration Hardware",icon:"fas-couch",imageURL:"https://graph.facebook.com/791504884230356/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7316207",shop:"furniture"},addTags:{brand:"Restoration Hardware","brand:wikidata":"Q7316207","brand:wikipedia":"en:Restoration Hardware",name:"Restoration Hardware",shop:"furniture"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Roche Bobois":{name:"Roche Bobois",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Roche%20Bobois.jpeg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3437504",shop:"furniture"},addTags:{brand:"Roche Bobois","brand:wikidata":"Q3437504","brand:wikipedia":"fr:Roche Bobois",name:"Roche Bobois",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Roller":{name:"Roller",icon:"fas-couch",imageURL:"https://graph.facebook.com/ROLLER.Clever.einrichten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1621286",shop:"furniture"},addTags:{brand:"Roller","brand:wikidata":"Q1621286","brand:wikipedia":"de:Roller (Möbelhaus)",name:"Roller",shop:"furniture"},countryCodes:["de","lu"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Rooms To Go":{name:"Rooms To Go",icon:"fas-couch",imageURL:"https://graph.facebook.com/roomstogo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7366329",shop:"furniture"},addTags:{brand:"Rooms To Go","brand:wikidata":"Q7366329","brand:wikipedia":"en:Rooms To Go",name:"Rooms To Go",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Rutar":{name:"Rutar",icon:"fas-couch",imageURL:"https://graph.facebook.com/RutarAustria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22910157",shop:"furniture"},addTags:{brand:"Rutar","brand:wikidata":"Q22910157","brand:wikipedia":"de:RUTAR Group",name:"Rutar",shop:"furniture"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/furniture/ScS":{name:"ScS",icon:"fas-couch",imageURL:"https://graph.facebook.com/scssofas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19654399",shop:"furniture"},addTags:{brand:"ScS","brand:wikidata":"Q19654399","brand:wikipedia":"en:ScS",name:"ScS",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/The Brick":{name:"The Brick",icon:"fas-couch",imageURL:"https://graph.facebook.com/TheBrick/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7720000",shop:"furniture"},addTags:{brand:"The Brick","brand:wikidata":"Q7720000","brand:wikipedia":"en:The Brick",name:"The Brick",shop:"furniture"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Urban Barn":{name:"Urban Barn",icon:"fas-couch",imageURL:"https://graph.facebook.com/urbanbarn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62515207",shop:"furniture"},addTags:{brand:"Urban Barn","brand:wikidata":"Q62515207",name:"Urban Barn",shop:"furniture"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Value City Furniture":{name:"Value City Furniture",icon:"fas-couch",imageURL:"https://graph.facebook.com/ValueCityFurnitureUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63859417",shop:"furniture"},addTags:{brand:"Value City Furniture","brand:wikidata":"Q63859417",name:"Value City Furniture",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/XXXLutz":{name:"XXXLutz",icon:"fas-couch",imageURL:"https://graph.facebook.com/xxxlutz.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q70339467",shop:"furniture"},addTags:{brand:"XXXLutz","brand:wikidata":"Q70339467","brand:wikipedia":"de:XXXLutz",name:"XXXLutz",shop:"furniture"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/furniture/west elm":{name:"west elm",icon:"fas-couch",geometry:["point","area"],tags:{"brand:wikidata":"Q7985021",shop:"furniture"},addTags:{brand:"west elm","brand:wikidata":"Q7985021","brand:wikipedia":"en:Williams-Sonoma",name:"west elm",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/İstikbal":{name:"İstikbal",icon:"fas-couch",imageURL:"https://graph.facebook.com/istikbal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6031999",shop:"furniture"},addTags:{brand:"İstikbal","brand:wikidata":"Q6031999","brand:wikipedia":"tr:İstikbal",name:"İstikbal",shop:"furniture"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"shop/furniture/ニトリ":{name:"ニトリ",icon:"fas-couch",imageURL:"https://graph.facebook.com/nitori.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10801453",shop:"furniture"},addTags:{brand:"ニトリ","brand:en":"Nitori","brand:ja":"ニトリ","brand:wikidata":"Q10801453","brand:wikipedia":"en:Nitori",name:"ニトリ","name:en":"Nitori","name:ja":"ニトリ",shop:"furniture"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/games/Games Workshop":{name:"Games Workshop",icon:"fas-dice",imageURL:"https://graph.facebook.com/GWSunriseVillage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q587270",shop:"games"},addTags:{brand:"Games Workshop","brand:wikidata":"Q587270","brand:wikipedia":"en:Games Workshop",name:"Games Workshop",shop:"games"},countryCodes:["de","fr","gb","nl","us"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Bellaflora":{name:"Bellaflora",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/bellafloraNr1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q815787",shop:"garden_centre"},addTags:{brand:"Bellaflora","brand:wikidata":"Q815787","brand:wikipedia":"de:Bellaflora",name:"Bellaflora",shop:"garden_centre"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Blue Diamond Garden Centres":{name:"Blue Diamond Garden Centres",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/bluediamondgardencentres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81097207",shop:"garden_centre"},addTags:{brand:"Blue Diamond Garden Centres","brand:wikidata":"Q81097207",name:"Blue Diamond Garden Centres",shop:"garden_centre"},terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Dehner":{name:"Dehner",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/dehner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1183029",shop:"garden_centre"},addTags:{brand:"Dehner","brand:wikidata":"Q1183029","brand:wikipedia":"de:Dehner",name:"Dehner",shop:"garden_centre"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Dobbies":{name:"Dobbies",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/DobbiesGC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5286529",shop:"garden_centre"},addTags:{brand:"Dobbies","brand:wikidata":"Q5286529","brand:wikipedia":"en:Dobbies Garden Centres",name:"Dobbies",shop:"garden_centre"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Gamm Vert":{name:"Gamm Vert",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/gammvert.officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3095006",shop:"garden_centre"},addTags:{brand:"Gamm Vert","brand:wikidata":"Q3095006","brand:wikipedia":"fr:Gamm Vert",name:"Gamm Vert",shop:"garden_centre"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Intratuin":{name:"Intratuin",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/intratuin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2927176",shop:"garden_centre"},addTags:{brand:"Intratuin","brand:wikidata":"Q2927176","brand:wikipedia":"nl:Intratuin",name:"Intratuin",shop:"garden_centre"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Jardiland":{name:"Jardiland",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/Jardiland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3162276",shop:"garden_centre"},addTags:{brand:"Jardiland","brand:wikidata":"Q3162276","brand:wikipedia":"fr:Jardiland",name:"Jardiland",shop:"garden_centre"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Otter Garden Centres":{name:"Otter Garden Centres",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/OtterGardenCentres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81095450",shop:"garden_centre"},addTags:{brand:"Otter Garden Centres","brand:wikidata":"Q81095450",name:"Otter Garden Centres",shop:"garden_centre"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Point Vert":{name:"Point Vert",icon:"maki-garden-centre",imageURL:"https://pbs.twimg.com/profile_images/1984615026/Apex_quadrit_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16661975",shop:"garden_centre"},addTags:{brand:"Point Vert","brand:wikidata":"Q16661975","brand:wikipedia":"fr:Magasin vert",name:"Point Vert",shop:"garden_centre"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Truffaut":{name:"Truffaut",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/truffautfr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3162640",shop:"garden_centre"},addTags:{brand:"Truffaut","brand:wikidata":"Q3162640","brand:wikipedia":"fr:Jardineries Truffaut",name:"Truffaut",shop:"garden_centre"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Walmart Garden Center":{name:"Walmart Garden Center",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",shop:"garden_centre"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Garden Center",shop:"garden_centre"},terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Welkoop":{name:"Welkoop",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/welkoop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72799253",shop:"garden_centre"},addTags:{brand:"Welkoop","brand:wikidata":"Q72799253",name:"Welkoop",shop:"garden_centre"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Wyevale":{name:"Wyevale",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/WyevaleGC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7735819",shop:"garden_centre"},addTags:{brand:"Wyevale","brand:wikidata":"Q7735819","brand:wikipedia":"en:Wyevale Garden Centres",name:"Wyevale",shop:"garden_centre"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/ZG Raiffeisen":{name:"ZG Raiffeisen",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/zgraiffeisen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q136135",shop:"garden_centre"},addTags:{brand:"ZG Raiffeisen","brand:wikidata":"Q136135","brand:wikipedia":"de:ZG Raiffeisen",name:"ZG Raiffeisen",shop:"garden_centre"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/gas/Airgas":{name:"Airgas",icon:"temaki-propane_tank",imageURL:"https://graph.facebook.com/airgasusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80635",shop:"gas"},addTags:{brand:"Airgas","brand:wikidata":"Q80635","brand:wikipedia":"en:Airgas",name:"Airgas",shop:"gas"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gas/AmeriGas":{name:"AmeriGas",icon:"temaki-propane_tank",imageURL:"https://graph.facebook.com/AmeriGas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23130318",shop:"gas"},addTags:{brand:"AmeriGas","brand:wikidata":"Q23130318","brand:wikipedia":"en:AmeriGas","fuel:lpg":"yes",name:"AmeriGas",shop:"gas"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gas/Ferrellgas":{name:"Ferrellgas",icon:"temaki-propane_tank",imageURL:"https://graph.facebook.com/Ferrellgas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5445299",shop:"gas"},addTags:{brand:"Ferrellgas","brand:wikidata":"Q5445299","brand:wikipedia":"en:Ferrellgas","fuel:lpg":"yes",name:"Ferrellgas",shop:"gas"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gift/American Greetings":{name:"American Greetings",icon:"maki-gift",imageURL:"https://graph.facebook.com/AmericanGreetings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q464767",shop:"gift"},addTags:{brand:"American Greetings","brand:wikidata":"Q464767","brand:wikipedia":"en:American Greetings",name:"American Greetings",shop:"gift"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Card Factory":{name:"Card Factory",icon:"maki-gift",imageURL:"https://graph.facebook.com/cardfactoryplc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5038192",shop:"gift"},addTags:{brand:"Card Factory","brand:wikidata":"Q5038192","brand:wikipedia":"en:Card Factory",name:"Card Factory",shop:"gift"},countryCodes:["gb","im"],terms:[],matchScore:2,suggestion:true},"shop/gift/Carlton Cards":{name:"Carlton Cards",icon:"maki-gift",imageURL:"https://graph.facebook.com/Carltoncards.ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5042968",shop:"gift"},addTags:{brand:"Carlton Cards","brand:wikidata":"Q5042968","brand:wikipedia":"en:Carlton Cards",name:"Carlton Cards",shop:"gift"},countryCodes:["ca"],terms:["carlton"],matchScore:2,suggestion:true},"shop/gift/Clintons":{name:"Clintons",icon:"maki-gift",imageURL:"https://graph.facebook.com/ClintonsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5134299",shop:"gift"},addTags:{brand:"Clintons","brand:wikidata":"Q5134299","brand:wikipedia":"en:Clintons",name:"Clintons",shop:"gift"},countryCodes:["gb"],terms:["clinton cards"],matchScore:2,suggestion:true},"shop/gift/Cracker Barrel":{name:"Cracker Barrel",icon:"maki-gift",imageURL:"https://graph.facebook.com/crackerbarrel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4492609",shop:"gift"},addTags:{brand:"Cracker Barrel","brand:wikidata":"Q4492609","brand:wikipedia":"en:Cracker Barrel",name:"Cracker Barrel",official_name:"Cracker Barrel Old Country Store",shop:"gift"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Disney Store":{name:"Disney Store",icon:"maki-gift",imageURL:"https://graph.facebook.com/shopdisney/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1047009",shop:"gift"},addTags:{brand:"Disney Store","brand:wikidata":"Q1047009","brand:wikipedia":"en:Disney Store",name:"Disney Store",shop:"gift"},countryCodes:["ca","fr","us"],terms:["the disney store"],matchScore:2,suggestion:true},"shop/gift/Edible Arrangements":{name:"Edible Arrangements",icon:"maki-gift",imageURL:"https://graph.facebook.com/ediblearrangements/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5337996",shop:"gift"},addTags:{brand:"Edible Arrangements","brand:wikidata":"Q5337996","brand:wikipedia":"en:Edible Arrangements",name:"Edible Arrangements",shop:"gift"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Hallmark":{name:"Hallmark",icon:"maki-gift",imageURL:"https://graph.facebook.com/Hallmark/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1521910",shop:"gift"},addTags:{brand:"Hallmark","brand:wikidata":"Q1521910","brand:wikipedia":"en:Hallmark Cards",name:"Hallmark",shop:"gift"},countryCodes:["ca","gb","us"],terms:["hallmark gold crown"],matchScore:2,suggestion:true},"shop/gift/Nanu-Nana":{name:"Nanu-Nana",icon:"maki-gift",imageURL:"https://graph.facebook.com/NanuNanaDE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1720245",shop:"gift"},addTags:{brand:"Nanu-Nana","brand:wikidata":"Q1720245","brand:wikipedia":"de:Nanu-Nana",name:"Nanu-Nana",shop:"gift"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/gift/Papyrus":{name:"Papyrus",icon:"maki-gift",imageURL:"https://graph.facebook.com/papyrus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28222692",shop:"gift"},addTags:{brand:"Papyrus","brand:wikidata":"Q28222692","brand:wikipedia":"en:Papyrus (company)",name:"Papyrus",shop:"gift"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Showcase":{name:"Showcase",icon:"maki-gift",imageURL:"https://graph.facebook.com/shopatshowcase/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7503163",shop:"gift"},addTags:{brand:"Showcase","brand:wikidata":"Q7503163","brand:wikipedia":"en:Showcase (retailer)",name:"Showcase",shop:"gift"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Spencer's":{name:"Spencer's",icon:"maki-gift",imageURL:"https://graph.facebook.com/spencers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7576055",shop:"gift"},addTags:{brand:"Spencer Gifts","brand:wikidata":"Q7576055","brand:wikipedia":"en:Spencer Gifts",name:"Spencer's",official_name:"Spencer Gifts",shop:"gift"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Things Remembered":{name:"Things Remembered",icon:"maki-gift",imageURL:"https://graph.facebook.com/thingsremembered/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q54958287",shop:"gift"},addTags:{brand:"Things Remembered","brand:wikidata":"Q54958287","brand:wikipedia":"en:Things Remembered",name:"Things Remembered",shop:"gift"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/greengrocer/Produce Junction":{name:"Produce Junction",icon:"fas-carrot",imageURL:"https://graph.facebook.com/ProduceJunction/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60583541",shop:"greengrocer"},addTags:{brand:"Produce Junction","brand:wikidata":"Q60583541",name:"Produce Junction",shop:"greengrocer"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser_supply/Sally Beauty Supply":{name:"Sally Beauty Supply",icon:"temaki-hair_care",imageURL:"https://graph.facebook.com/sallybeauty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7405065",shop:"hairdresser_supply"},addTags:{brand:"Sally Beauty Supply","brand:wikidata":"Q7405065","brand:wikipedia":"en:Sally Beauty Holdings",name:"Sally Beauty Supply",shop:"hairdresser_supply"},countryCodes:["be","ca","cl","de","es","fr","gb","ie","mx","nl","pe","pr","us"],terms:["sally beauty"],matchScore:2,suggestion:true},"shop/hairdresser/Camille Albane":{name:"Camille Albane",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/CamilleAlbane.Paris/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62965183",shop:"hairdresser"},addTags:{brand:"Camille Albane","brand:wikidata":"Q62965183",name:"Camille Albane",shop:"hairdresser"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Cost Cutters":{name:"Cost Cutters",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/CostCutters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62029366",shop:"hairdresser"},addTags:{brand:"Cost Cutters","brand:wikidata":"Q62029366",name:"Cost Cutters",shop:"hairdresser"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Dessange":{name:"Dessange",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/DESSANGE.Paris/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62979914",shop:"hairdresser"},addTags:{brand:"Dessange","brand:wikidata":"Q62979914",name:"Dessange",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Fantastic Sams":{name:"Fantastic Sams",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/fantasticsamscutandcolor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5434222",shop:"hairdresser"},addTags:{brand:"Fantastic Sams","brand:wikidata":"Q5434222","brand:wikipedia":"en:Fantastic Sams",name:"Fantastic Sams",shop:"hairdresser"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/First Choice Haircutters":{name:"First Choice Haircutters",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/SignatureStyleSalons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5452622",shop:"hairdresser"},addTags:{brand:"First Choice Haircutters","brand:wikidata":"Q5452622","brand:wikipedia":"en:First Choice Haircutters",name:"First Choice Haircutters",shop:"hairdresser"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Franck Provost":{name:"Franck Provost",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/franck.provost.paris/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62805922",shop:"hairdresser"},addTags:{brand:"Franck Provost","brand:wikidata":"Q62805922","brand:wikipedia":"fr:Franck Provost (Salons de coiffure)",name:"Franck Provost",shop:"hairdresser"},countryCodes:["be","fr","pl"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Great Clips":{name:"Great Clips",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/GreatClips/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5598967",shop:"hairdresser"},addTags:{brand:"Great Clips","brand:wikidata":"Q5598967","brand:wikipedia":"en:Great Clips",name:"Great Clips",shop:"hairdresser"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Hair Cuttery":{name:"Hair Cuttery",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/haircuttery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5639484",shop:"hairdresser"},addTags:{brand:"Hair Cuttery","brand:wikidata":"Q5639484","brand:wikipedia":"en:Hair Cuttery",name:"Hair Cuttery",shop:"hairdresser"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Hair Express":{name:"Hair Express",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/hairexpressfriseur/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57550814",shop:"hairdresser"},addTags:{brand:"Hair Express","brand:wikidata":"Q57550814",name:"Hair Express",shop:"hairdresser"},countryCodes:["de","us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Hairkiller":{name:"Hairkiller",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/hairkillerDetmold/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58305998",shop:"hairdresser"},addTags:{brand:"Hairkiller","brand:wikidata":"Q58305998",name:"Hairkiller",shop:"hairdresser"},countryCodes:["at","de","lu"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Jean Louis David":{name:"Jean Louis David",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/jean.louis.david.officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64445174",shop:"hairdresser"},addTags:{brand:"Jean Louis David","brand:wikidata":"Q64445174",name:"Jean Louis David",shop:"hairdresser"},countryCodes:["es","fr","it","pl"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Klier":{name:"Klier",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/frisoerklier/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1465159",shop:"hairdresser"},addTags:{brand:"Klier","brand:wikidata":"Q1465159","brand:wikipedia":"de:Frisör Klier",name:"Klier",shop:"hairdresser"},countryCodes:["at","cz","de","sk"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Klipp":{name:"Klipp",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/klipp.frisoer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1737304",shop:"hairdresser"},addTags:{brand:"Klipp","brand:wikidata":"Q1737304","brand:wikipedia":"de:Klipp Frisör",name:"Klipp",shop:"hairdresser"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Mastercuts":{name:"Mastercuts",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/MasterCuts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64026258",shop:"hairdresser"},addTags:{brand:"Mastercuts","brand:wikidata":"Q64026258",name:"Mastercuts",shop:"hairdresser"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Pascal Coste":{name:"Pascal Coste",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/pascalcosteofficiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66555630",shop:"hairdresser"},addTags:{brand:"Pascal Coste","brand:wikidata":"Q66555630",name:"Pascal Coste",shop:"hairdresser"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Saint Algue":{name:"Saint Algue",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/saint.algue.officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62973210",shop:"hairdresser"},addTags:{brand:"Saint Algue","brand:wikidata":"Q62973210",name:"Saint Algue",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Sport Clips":{name:"Sport Clips",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/SportClipsHaircuts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7579310",shop:"hairdresser"},addTags:{brand:"Sport Clips","brand:wikidata":"Q7579310",name:"Sport Clips",shop:"hairdresser"},countryCodes:["ca","us"],terms:["sport clips haircuts","sports clips"],matchScore:2,suggestion:true},"shop/hairdresser/Super Cut":{name:"Super Cut",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/supercut.friseur/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64139077",shop:"hairdresser"},addTags:{brand:"Super Cut","brand:wikidata":"Q64139077",name:"Super Cut",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Supercuts":{name:"Supercuts",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/Supercuts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7643239",shop:"hairdresser"},addTags:{brand:"Supercuts","brand:wikidata":"Q7643239","brand:wikipedia":"en:Supercuts",name:"Supercuts",shop:"hairdresser"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Tchip":{name:"Tchip",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/TCHIP.Coiffure.Officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62871250",shop:"hairdresser"},addTags:{brand:"Tchip","brand:wikidata":"Q62871250",name:"Tchip",shop:"hairdresser"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/The Salon at Ulta Beauty":{name:"The Salon at Ulta Beauty",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/UltaBeauty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7880076",shop:"hairdresser"},addTags:{alt_name:"Ulta Salon",brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"The Salon at Ulta Beauty",shop:"hairdresser"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Toni & Guy":{name:"Toni & Guy",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/toniandguyworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q324784",shop:"hairdresser"},addTags:{brand:"Toni & Guy","brand:wikidata":"Q324784","brand:wikipedia":"en:Toni & Guy",name:"Toni & Guy",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Top Hair":{name:"Top Hair",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/Mein.Friseur.Top.Hair/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62523343",shop:"hairdresser"},addTags:{brand:"Top Hair","brand:wikidata":"Q62523343",name:"Top Hair",shop:"hairdresser"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/hardware/220 вольт":{name:"220 вольт",icon:"temaki-tools",imageURL:"https://graph.facebook.com/likevolt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18635304",shop:"hardware"},addTags:{brand:"220 вольт","brand:en":"220 Volt","brand:ru":"220 вольт","brand:wikidata":"Q18635304","brand:wikipedia":"ru:220 Вольт (компания)",name:"220 вольт","name:en":"220 Volt","name:ru":"220 вольт",shop:"hardware"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/hardware/Harbor Freight Tools":{name:"Harbor Freight Tools",icon:"temaki-tools",imageURL:"https://graph.facebook.com/harborfreight/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5654601",shop:"hardware"},addTags:{brand:"Harbor Freight Tools","brand:wikidata":"Q5654601","brand:wikipedia":"en:Harbor Freight Tools",name:"Harbor Freight Tools",shop:"hardware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hardware/Home Hardware":{name:"Home Hardware",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homehardwarestores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3139611",shop:"hardware"},addTags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Hardware",shop:"hardware"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/hardware/K-Rauta":{name:"K-Rauta",icon:"temaki-tools",imageURL:"https://graph.facebook.com/KRautaSuomi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4206187",shop:"hardware"},addTags:{brand:"K-Rauta","brand:wikidata":"Q4206187","brand:wikipedia":"fi:K-Rauta",name:"K-Rauta",shop:"hardware"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/hardware/Kodin Terra":{name:"Kodin Terra",icon:"temaki-tools",imageURL:"https://graph.facebook.com/KodinTerraPori/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11872038",shop:"hardware"},addTags:{brand:"Kodin Terra","brand:wikidata":"Q11872038","brand:wikipedia":"fi:Kodin Terra",name:"Kodin Terra",shop:"hardware"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/hardware/True Value":{name:"True Value",icon:"temaki-tools",imageURL:"https://graph.facebook.com/TrueValue/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7847545",shop:"hardware"},addTags:{brand:"True Value","brand:wikidata":"Q7847545","brand:wikipedia":"en:True Value",name:"True Value",shop:"hardware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hardware/Würth":{name:"Würth",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Wuerth.Group/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q679750",shop:"hardware"},addTags:{brand:"Würth","brand:wikidata":"Q679750","brand:wikipedia":"de:Würth-Gruppe",name:"Würth",shop:"hardware"},countryCodes:["be","de","fi","fr","it","no"],terms:[],matchScore:2,suggestion:true},"shop/hardware/Мосхозторг":{name:"Мосхозторг",icon:"temaki-tools",imageURL:"https://graph.facebook.com/MosHozTorg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62499092",shop:"hardware"},addTags:{brand:"Мосхозторг","brand:wikidata":"Q62499092",name:"Мосхозторг",shop:"hardware"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/hardware/ロフト":{name:"ロフト",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Only.at.Loft/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5358428",shop:"hardware"},addTags:{brand:"ロフト","brand:en":"Loft","brand:ja":"ロフト","brand:wikidata":"Q5358428","brand:wikipedia":"ja:ロフト (雑貨店)",name:"ロフト","name:en":"Loft","name:ja":"ロフト",shop:"hardware"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/health_food/Holland & Barrett":{name:"Holland & Barrett",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1201862607575093249/nSY-jIIi_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5880870",shop:"health_food"},addTags:{brand:"Holland & Barrett","brand:wikidata":"Q5880870","brand:wikipedia":"en:Holland & Barrett",name:"Holland & Barrett",shop:"health_food"},countryCodes:["gb","ie","nl"],terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Amplifon":{name:"Amplifon",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/AmplifonGroupCareers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q477222",shop:"hearing_aids"},addTags:{brand:"Amplifon","brand:wikidata":"Q477222","brand:wikipedia":"en:Amplifon",name:"Amplifon",shop:"hearing_aids"},terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Audika":{name:"Audika",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/audikafrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2870745",shop:"hearing_aids"},addTags:{brand:"Audika","brand:wikidata":"Q2870745","brand:wikipedia":"fr:Audika",name:"Audika",shop:"hearing_aids"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Geers":{name:"Geers",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/geers.hoerakustik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1497707",shop:"hearing_aids"},addTags:{brand:"Geers","brand:wikidata":"Q1497707","brand:wikipedia":"de:Geers Hörakustik",name:"Geers",shop:"hearing_aids"},countryCodes:["de","pl"],terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Kind Hörgeräte":{name:"Kind Hörgeräte",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/kindhoerenundsehen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q43598590",shop:"hearing_aids"},addTags:{brand:"Kind Hörgeräte","brand:wikidata":"Q43598590","brand:wikipedia":"de:Kind Hörgeräte",name:"Kind Hörgeräte",shop:"hearing_aids"},countryCodes:["de"],terms:["kind"],matchScore:2,suggestion:true},"shop/hearing_aids/Miracle-Ear":{name:"Miracle-Ear",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/miracleear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17108572",shop:"hearing_aids"},addTags:{brand:"Miracle-Ear","brand:wikidata":"Q17108572","brand:wikipedia":"en:Miracle-Ear",name:"Miracle-Ear",shop:"hearing_aids"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Neuroth":{name:"Neuroth",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/NeurothAG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15836645",shop:"hearing_aids"},addTags:{brand:"Neuroth","brand:wikidata":"Q15836645","brand:wikipedia":"de:Neuroth AG",name:"Neuroth",shop:"hearing_aids"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/hifi/Bang & Olufsen":{name:"Bang & Olufsen",icon:"temaki-speaker",imageURL:"https://graph.facebook.com/bangolufsenusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q790020",shop:"hifi"},addTags:{brand:"Bang & Olufsen","brand:wikidata":"Q790020","brand:wikipedia":"en:Bang & Olufsen",name:"Bang & Olufsen",shop:"hifi"},terms:[],matchScore:2,suggestion:true},"shop/hifi/Bose":{name:"Bose",icon:"temaki-speaker",imageURL:"https://graph.facebook.com/Bose/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q328568",shop:"hifi"},addTags:{brand:"Bose","brand:wikidata":"Q328568","brand:wikipedia":"en:Bose Corporation",name:"Bose",shop:"hifi"},terms:[],matchScore:2,suggestion:true},"shop/hifi/Devialet":{name:"Devialet",icon:"temaki-speaker",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDEVIALET-ingenierie-Logo-3.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3025419",shop:"hifi"},addTags:{brand:"Devialet","brand:wikidata":"Q3025419","brand:wikipedia":"fr:Devialet",name:"Devialet",shop:"hifi"},terms:[],matchScore:2,suggestion:true},"shop/hifi/Harman Kardon":{name:"Harman Kardon",icon:"temaki-speaker",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHarman%20Kardon%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1476454",shop:"hifi"},addTags:{brand:"Harman Kardon","brand:wikidata":"Q1476454","brand:wikipedia":"en:Harman Kardon",name:"Harman Kardon",shop:"hifi"},terms:[],matchScore:2,suggestion:true},"shop/hifi/JBL":{name:"JBL",icon:"temaki-speaker",imageURL:"https://graph.facebook.com/JBL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1153754",shop:"hifi"},addTags:{brand:"JBL","brand:wikidata":"Q1153754","brand:wikipedia":"en:JBL",name:"JBL",shop:"hifi"},terms:[],matchScore:2,suggestion:true},"shop/hobby/アニメイト":{name:"アニメイト",icon:"fas-dragon",imageURL:"https://pbs.twimg.com/profile_images/1098862296787382272/pLo1nSbN_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1041890",shop:"hobby"},addTags:{brand:"アニメイト","brand:en":"Animate","brand:ja":"アニメイト","brand:wikidata":"Q1041890","brand:wikipedia":"ja:アニメイト",name:"アニメイト","name:en":"Animate","name:ja":"アニメイト",shop:"hobby"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/houseware/At Home":{name:"At Home",icon:"fas-blender",imageURL:"https://graph.facebook.com/AtHomeStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5522290",shop:"houseware"},addTags:{brand:"At Home","brand:wikidata":"Q5522290","brand:wikipedia":"en:At Home (store)",name:"At Home",shop:"houseware"},countryCodes:["us"],terms:["garden ridge"],matchScore:2,suggestion:true},"shop/houseware/Bed Bath & Beyond":{name:"Bed Bath & Beyond",icon:"fas-blender",imageURL:"https://graph.facebook.com/BedBathAndBeyond/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q813782",shop:"houseware"},addTags:{brand:"Bed Bath & Beyond","brand:wikidata":"Q813782","brand:wikipedia":"en:Bed Bath & Beyond",name:"Bed Bath & Beyond",shop:"houseware"},countryCodes:["ca","mx","nz","us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Blokker":{name:"Blokker",icon:"fas-blender",imageURL:"https://graph.facebook.com/BlokkerNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q884934",shop:"houseware"},addTags:{brand:"Blokker","brand:wikidata":"Q884934","brand:wikipedia":"en:Blokker Holding",name:"Blokker",shop:"houseware"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Cervera":{name:"Cervera",icon:"fas-blender",imageURL:"https://graph.facebook.com/CerveraAB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10447179",shop:"houseware"},addTags:{brand:"Cervera","brand:wikidata":"Q10447179","brand:wikipedia":"sv:Cervera (företag)",name:"Cervera",shop:"houseware"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/houseware/HomeGoods":{name:"HomeGoods",icon:"fas-blender",imageURL:"https://graph.facebook.com/Homegoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5887941",shop:"houseware"},addTags:{brand:"HomeGoods","brand:wikidata":"Q5887941","brand:wikipedia":"en:HomeGoods",name:"HomeGoods",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Kitchen Collection":{name:"Kitchen Collection",icon:"fas-blender",imageURL:"https://graph.facebook.com/KitchenCollectionStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64149036",shop:"houseware"},addTags:{brand:"Kitchen Collection","brand:wikidata":"Q64149036",name:"Kitchen Collection",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Lagerhaus":{name:"Lagerhaus",icon:"fas-blender",imageURL:"https://graph.facebook.com/lagerhaus.se/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10553211",shop:"houseware"},addTags:{brand:"Lagerhaus","brand:wikidata":"Q10553211","brand:wikipedia":"sv:Lagerhaus",name:"Lagerhaus",shop:"houseware"},terms:[],matchScore:2,suggestion:true},"shop/houseware/Lakeland":{name:"Lakeland",icon:"fas-blender",imageURL:"https://graph.facebook.com/LakelandUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16256199",shop:"houseware"},addTags:{brand:"Lakeland","brand:wikidata":"Q16256199","brand:wikipedia":"en:Lakeland (company)",name:"Lakeland",shop:"houseware"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Le Creuset":{name:"Le Creuset",icon:"fas-blender",imageURL:"https://graph.facebook.com/lecreuset/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q555861",shop:"houseware"},addTags:{brand:"Le Creuset","brand:wikidata":"Q555861","brand:wikipedia":"en:Le Creuset",name:"Le Creuset",shop:"houseware"},terms:[],matchScore:2,suggestion:true},"shop/houseware/Marskramer":{name:"Marskramer",icon:"fas-blender",imageURL:"https://graph.facebook.com/marskramer.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2305917",shop:"houseware"},addTags:{brand:"Marskramer","brand:wikidata":"Q2305917","brand:wikipedia":"nl:Marskramer (warenhuis)",name:"Marskramer",shop:"houseware"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Old Time Pottery":{name:"Old Time Pottery",icon:"fas-blender",imageURL:"https://graph.facebook.com/oldtimepottery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7085222",shop:"houseware"},addTags:{brand:"Old Time Pottery","brand:wikidata":"Q7085222","brand:wikipedia":"en:Old Time Pottery",name:"Old Time Pottery",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Stokes":{name:"Stokes",icon:"fas-blender",imageURL:"https://graph.facebook.com/StokesStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66481382",shop:"houseware"},addTags:{brand:"Stokes","brand:wikidata":"Q66481382",name:"Stokes",shop:"houseware"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Sur La Table":{name:"Sur La Table",icon:"fas-blender",imageURL:"https://graph.facebook.com/SurLaTable/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7645220",shop:"houseware"},addTags:{brand:"Sur La Table","brand:wikidata":"Q7645220","brand:wikipedia":"en:Sur La Table",name:"Sur La Table",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/The Container Store":{name:"The Container Store",icon:"fas-blender",imageURL:"https://graph.facebook.com/containerstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7727445",shop:"houseware"},addTags:{brand:"The Container Store","brand:wikidata":"Q7727445","brand:wikipedia":"en:The Container Store",name:"The Container Store",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/The Range":{name:"The Range",icon:"fas-blender",imageURL:"https://graph.facebook.com/therange/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7759409",shop:"houseware"},addTags:{brand:"The Range","brand:wikidata":"Q7759409",name:"The Range",shop:"houseware"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Think Kitchen":{name:"Think Kitchen",icon:"fas-blender",imageURL:"https://graph.facebook.com/thinkkitchenstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66481390",shop:"houseware"},addTags:{brand:"Think Kitchen","brand:wikidata":"Q66481390",name:"Think Kitchen",shop:"houseware"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Tuesday Morning":{name:"Tuesday Morning",icon:"fas-blender",imageURL:"https://graph.facebook.com/TuesdayMorning/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7851426",shop:"houseware"},addTags:{brand:"Tuesday Morning","brand:wikidata":"Q7851426","brand:wikipedia":"en:Tuesday Morning",name:"Tuesday Morning",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/WMF":{name:"WMF",icon:"fas-blender",imageURL:"https://graph.facebook.com/WMF/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q451423",shop:"houseware"},addTags:{brand:"WMF","brand:wikidata":"Q451423","brand:wikipedia":"en:WMF Group",name:"WMF",shop:"houseware"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Williams-Sonoma":{name:"Williams-Sonoma",icon:"fas-blender",imageURL:"https://graph.facebook.com/WilliamsSonoma/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2581220",shop:"houseware"},addTags:{brand:"Williams-Sonoma","brand:wikidata":"Q2581220","brand:wikipedia":"en:Williams-Sonoma",name:"Williams-Sonoma",shop:"houseware"},countryCodes:["ca","us"],terms:["william sonoma"],matchScore:2,suggestion:true},"shop/houseware/Xenos":{name:"Xenos",icon:"fas-blender",imageURL:"https://graph.facebook.com/XenosNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16547960",shop:"houseware"},addTags:{brand:"Xenos","brand:wikidata":"Q16547960","brand:wikipedia":"nl:Xenos",name:"Xenos",shop:"houseware"},countryCodes:["de","nl"],terms:[],matchScore:2,suggestion:true},"shop/houseware/京王アートマン":{name:"京王アートマン",icon:"fas-blender",imageURL:"https://graph.facebook.com/keio.atman/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11374580",shop:"houseware"},addTags:{brand:"京王アートマン","brand:en":"Keio Atman","brand:ja":"京王アートマン","brand:wikidata":"Q11374580","brand:wikipedia":"ja:京王アートマン",name:"京王アートマン","name:en":"Keio Atman","name:ja":"京王アートマン",shop:"houseware"},countryCodes:["jp"],terms:["アートマン"],matchScore:2,suggestion:true},"shop/interior_decoration/Centrakor":{name:"Centrakor",icon:"maki-shop",imageURL:"https://graph.facebook.com/Centrakor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64079345",shop:"interior_decoration"},addTags:{brand:"Centrakor","brand:wikidata":"Q64079345","brand:wikipedia":"fr:Centrakor",name:"Centrakor",shop:"interior_decoration"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Depot":{name:"Depot",icon:"maki-shop",imageURL:"https://graph.facebook.com/DEPOTonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191740",shop:"interior_decoration"},addTags:{brand:"Depot","brand:wikidata":"Q1191740","brand:wikipedia":"de:Gries Deco Holding",name:"Depot",shop:"interior_decoration"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Fired Earth":{name:"Fired Earth",icon:"maki-shop",imageURL:"https://graph.facebook.com/FiredEarth/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20594569",shop:"interior_decoration"},addTags:{brand:"Fired Earth","brand:wikidata":"Q20594569",name:"Fired Earth",shop:"interior_decoration"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Hemtex":{name:"Hemtex",icon:"maki-shop",imageURL:"https://graph.facebook.com/hemtex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10521868",shop:"interior_decoration"},addTags:{brand:"Hemtex","brand:wikidata":"Q10521868","brand:wikipedia":"sv:Hemtex",name:"Hemtex",shop:"interior_decoration"},countryCodes:["ee","fi","se"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/HomeSense":{name:"HomeSense",icon:"maki-shop",imageURL:"https://graph.facebook.com/HomesenseUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16844433",shop:"interior_decoration"},addTags:{brand:"HomeSense","brand:wikidata":"Q16844433","brand:wikipedia":"en:HomeSense",name:"HomeSense",shop:"interior_decoration"},countryCodes:["ca","gb","ie","us"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Kirkland's":{name:"Kirkland's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Kirklands/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6415714",shop:"interior_decoration"},addTags:{brand:"Kirkland's","brand:wikidata":"Q6415714","brand:wikipedia":"en:Kirkland's",name:"Kirkland's",shop:"interior_decoration"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Pier 1 Imports":{name:"Pier 1 Imports",icon:"maki-shop",imageURL:"https://graph.facebook.com/pier1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7191691",shop:"interior_decoration"},addTags:{brand:"Pier 1 Imports","brand:wikidata":"Q7191691","brand:wikipedia":"en:Pier 1 Imports",name:"Pier 1 Imports",shop:"interior_decoration"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Ten Thousand Villages":{name:"Ten Thousand Villages",icon:"maki-shop",imageURL:"https://graph.facebook.com/TenThousandVillages/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2403252",shop:"interior_decoration"},addTags:{brand:"Ten Thousand Villages","brand:wikidata":"Q2403252","brand:wikipedia":"en:Ten Thousand Villages",fair_trade:"only",name:"Ten Thousand Villages",shop:"interior_decoration"},countryCodes:["ca","us"],terms:["10 thousand villages","10,000 villages"],matchScore:2,suggestion:true},"shop/interior_decoration/World Market":{name:"World Market",icon:"maki-shop",imageURL:"https://graph.facebook.com/worldmarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5174750",shop:"interior_decoration"},addTags:{brand:"World Market","brand:wikidata":"Q5174750","brand:wikipedia":"en:Cost Plus World Market",name:"World Market",official_name:"Cost Plus World Market",shop:"interior_decoration"},countryCodes:["us"],terms:["cost plus"],matchScore:2,suggestion:true},"shop/jewelry/Alex and Ani":{name:"Alex and Ani",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/alexandaniusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16198810",shop:"jewelry"},addTags:{brand:"Alex and Ani","brand:wikidata":"Q16198810","brand:wikipedia":"en:Alex and Ani",name:"Alex and Ani",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Apart":{name:"Apart",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/BizuteriaApart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11686561",shop:"jewelry"},addTags:{brand:"Apart","brand:wikidata":"Q11686561","brand:wikipedia":"pl:Apart",name:"Apart",shop:"jewelry"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Bijou Brigitte":{name:"Bijou Brigitte",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/bijoubrigitte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q599545",shop:"jewelry"},addTags:{brand:"Bijou Brigitte","brand:wikidata":"Q599545","brand:wikipedia":"de:Bijou Brigitte",name:"Bijou Brigitte",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Cartier":{name:"Cartier",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/cartier.usa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q538587",shop:"jewelry"},addTags:{brand:"Cartier","brand:wikidata":"Q538587","brand:wikipedia":"en:Cartier (jeweler)",name:"Cartier",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Charm Diamond Centres":{name:"Charm Diamond Centres",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/CharmDiamonds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5086396",shop:"jewelry"},addTags:{brand:"Charm Diamond Centres","brand:wikidata":"Q5086396","brand:wikipedia":"en:Charm Diamond Centres",name:"Charm Diamond Centres",shop:"jewelry"},countryCodes:["ca"],terms:["charm diamond","charm diamond centre"],matchScore:2,suggestion:true},"shop/jewelry/Chisholm Hunter":{name:"Chisholm Hunter",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/ChisholmHunterOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66662001",shop:"jewelry"},addTags:{brand:"Chisholm Hunter","brand:wikidata":"Q66662001",name:"Chisholm Hunter",shop:"jewelry"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Christ":{name:"Christ",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/juwelierchrist/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1077957",shop:"jewelry"},addTags:{brand:"Christ","brand:wikidata":"Q1077957","brand:wikipedia":"de:Christ (Juwelier)",name:"Christ",shop:"jewelry"},countryCodes:["ch","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/David Yurman":{name:"David Yurman",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/DavidYurman/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5241390",shop:"jewelry"},addTags:{brand:"David Yurman","brand:wikidata":"Q5241390","brand:wikipedia":"en:David Yurman",name:"David Yurman",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Ernest Jones":{name:"Ernest Jones",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/ernestjonesjewellers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5393358",shop:"jewelry"},addTags:{brand:"Ernest Jones","brand:wikidata":"Q5393358","brand:wikipedia":"en:Ernest Jones (retailer)",name:"Ernest Jones",shop:"jewelry"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/F.Hinds":{name:"F.Hinds",icon:"maki-jewelry-store",imageURL:"https://pbs.twimg.com/profile_images/859360908304371712/lYv3bPA7_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5423915",shop:"jewelry"},addTags:{brand:"F.Hinds","brand:wikidata":"Q5423915","brand:wikipedia":"en:F. Hinds",name:"F.Hinds",shop:"jewelry"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Fred Meyer":{name:"Fred Meyer",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/fredmeyer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5495932",shop:"jewelry"},addTags:{brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Goldsmiths":{name:"Goldsmiths",icon:"maki-jewelry-store",imageURL:"https://pbs.twimg.com/profile_images/1161193150247047170/JWBAlWqx_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16993095",shop:"jewelry"},addTags:{brand:"Goldsmiths","brand:wikidata":"Q16993095","brand:wikipedia":"en:Goldsmiths (retailer)",name:"Goldsmiths",shop:"jewelry"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Guldfynd":{name:"Guldfynd",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/Guldfynd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q49099223",shop:"jewelry"},addTags:{brand:"Guldfynd","brand:wikidata":"Q49099223","brand:wikipedia":"sv:Guldfynd",name:"Guldfynd",shop:"jewelry"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/H.Samuel":{name:"H.Samuel",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/HSamuelTheJeweller/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5628558",shop:"jewelry"},addTags:{brand:"H.Samuel","brand:wikidata":"Q5628558","brand:wikipedia":"en:H. Samuel",name:"H.Samuel",shop:"jewelry"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Helzberg Diamonds":{name:"Helzberg Diamonds",icon:"maki-jewelry-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHelzberg%20Diamonds%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q16995161",shop:"jewelry"},addTags:{brand:"Helzberg Diamonds","brand:wikidata":"Q16995161","brand:wikipedia":"en:Helzberg Diamonds",name:"Helzberg Diamonds",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Histoire d'Or":{name:"Histoire d'Or",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/HistoiredOr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62529245",shop:"jewelry"},addTags:{brand:"Histoire d'Or","brand:wikidata":"Q62529245",name:"Histoire d'Or",shop:"jewelry"},countryCodes:["be","fr","it","nl"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/James Avery Jewelry":{name:"James Avery Jewelry",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/JamesAvery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6129024",shop:"jewelry"},addTags:{brand:"James Avery Jewelry","brand:wikidata":"Q6129024","brand:wikipedia":"en:James Avery Artisan Jewelry",name:"James Avery Jewelry",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Jared":{name:"Jared",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/JaredTheGalleriaOfJewelry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62029282",shop:"jewelry"},addTags:{brand:"Jared","brand:wikidata":"Q62029282",name:"Jared",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Julien d'Orcel":{name:"Julien d'Orcel",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/juliendorcel.bijouteries/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62497463",shop:"jewelry"},addTags:{brand:"Julien d'Orcel","brand:wikidata":"Q62497463",name:"Julien d'Orcel",shop:"jewelry"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Kay Jewelers":{name:"Kay Jewelers",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/KayJewelers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62029290",shop:"jewelry"},addTags:{brand:"Kay Jewelers","brand:wikidata":"Q62029290",name:"Kay Jewelers",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Lucardi":{name:"Lucardi",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/LucardiJuweliers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13774940",shop:"jewelry"},addTags:{brand:"Lucardi","brand:wikidata":"Q13774940","brand:wikipedia":"nl:Lucardi",name:"Lucardi",shop:"jewelry"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Michael Hill":{name:"Michael Hill",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/MichaelHillJ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3308250",shop:"jewelry"},addTags:{brand:"Michael Hill","brand:wikidata":"Q3308250","brand:wikipedia":"en:Michael Hill Jeweller",name:"Michael Hill",shop:"jewelry"},countryCodes:["au","ca","nz","us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/PNJ":{name:"PNJ",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/PNJ.COM.VN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61129183",shop:"jewelry"},addTags:{brand:"PNJ","brand:wikidata":"Q61129183","brand:wikipedia":"vi:PNJ",name:"PNJ",shop:"jewelry"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Pandora":{name:"Pandora",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/PANDORA.Japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2241604",shop:"jewelry"},addTags:{brand:"Pandora","brand:wikidata":"Q2241604","brand:wikipedia":"en:Pandora (jewelry)",name:"Pandora",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Peoples Jewellers":{name:"Peoples Jewellers",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/Peoples/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64995558",shop:"jewelry"},addTags:{brand:"Peoples Jewellers","brand:wikidata":"Q64995558",name:"Peoples Jewellers",shop:"jewelry"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Swarovski":{name:"Swarovski",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/SWAROVSKI.NorthAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q611115",shop:"jewelry"},addTags:{brand:"Swarovski","brand:wikidata":"Q611115","brand:wikipedia":"en:Swarovski",name:"Swarovski",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Thomas Sabo":{name:"Thomas Sabo",icon:"maki-jewelry-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTHOMAS%20SABO%20Unternehmenslogo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q13415716",shop:"jewelry"},addTags:{brand:"Thomas Sabo","brand:wikidata":"Q13415716","brand:wikipedia":"en:Thomas Sabo",name:"Thomas Sabo",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Tiffany & Company":{name:"Tiffany & Company",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/Tiffany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1066858",shop:"jewelry"},addTags:{brand:"Tiffany & Company","brand:wikidata":"Q1066858","brand:wikipedia":"en:Tiffany & Co.",name:"Tiffany & Company",official_name:"Tiffany & Co.",shop:"jewelry"},countryCodes:["us"],terms:["tiffany","tiffany's"],matchScore:2,suggestion:true},"shop/jewelry/Tous":{name:"Tous",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/tousjewelry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3815128",shop:"jewelry"},addTags:{brand:"Tous","brand:wikidata":"Q3815128","brand:wikipedia":"en:Tous (company)",name:"Tous",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Warren James":{name:"Warren James",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/warrenjamesjewellers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19604616",shop:"jewelry"},addTags:{brand:"Warren James","brand:wikidata":"Q19604616","brand:wikipedia":"en:Warren James Jewellers",name:"Warren James",shop:"jewelry"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Zales":{name:"Zales",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/Zales/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8065305",shop:"jewelry"},addTags:{brand:"Zales","brand:wikidata":"Q8065305","brand:wikipedia":"en:Zale Corporation",name:"Zales",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Адамас":{name:"Адамас",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/adamas.club/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62393709",shop:"jewelry"},addTags:{brand:"Адамас","brand:en":"Adamas","brand:ru":"Адамас","brand:wikidata":"Q62393709",name:"Адамас","name:en":"Adamas","name:ru":"Адамас",shop:"jewelry"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/Lietuvos spauda":{name:"Lietuvos spauda",icon:"fas-store",imageURL:"https://graph.facebook.com/narvesen.no/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6514414",shop:"kiosk"},addTags:{brand:"Lietuvos spauda","brand:wikidata":"Q6514414","brand:wikipedia":"lt:Lietuvos spauda",name:"Lietuvos spauda",shop:"kiosk"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/Narvesen":{name:"Narvesen",icon:"fas-store",imageURL:"https://graph.facebook.com/narvesen.no/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6514414",shop:"kiosk"},addTags:{brand:"Narvesen","brand:wikidata":"Q6514414","brand:wikipedia":"en:Narvesen",name:"Narvesen",shop:"kiosk"},countryCodes:["lt","lv","no"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/Pressbyrån":{name:"Pressbyrån",icon:"fas-store",imageURL:"https://graph.facebook.com/Pressbyran/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2489072",shop:"kiosk"},addTags:{brand:"Pressbyrån","brand:wikidata":"Q2489072","brand:wikipedia":"en:Pressbyrån",name:"Pressbyrån",shop:"kiosk"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/R-Kioski":{name:"R-Kioski",icon:"fas-store",imageURL:"https://graph.facebook.com/rkioski/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1571400",shop:"kiosk"},addTags:{brand:"R-Kioski","brand:wikidata":"Q1571400","brand:wikipedia":"en:R-kioski",name:"R-Kioski",shop:"kiosk"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/Ruch":{name:"Ruch",icon:"fas-store",imageURL:"https://graph.facebook.com/ruch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1260314",shop:"kiosk"},addTags:{brand:"Ruch","brand:wikidata":"Q1260314","brand:wikipedia":"pl:Ruch (przedsiębiorstwo)",name:"Ruch",shop:"kiosk"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/Tisak":{name:"Tisak",icon:"fas-store",imageURL:"https://graph.facebook.com/tisakmedia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12643627",shop:"kiosk"},addTags:{brand:"Tisak","brand:wikidata":"Q12643627","brand:wikipedia":"hr:Tisak (tvrtka)",name:"Tisak",shop:"kiosk"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/k kiosk":{name:"k kiosk",icon:"fas-store",imageURL:"https://graph.facebook.com/kkiosk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60381703",shop:"kiosk"},addTags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"kiosk"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/キヨスク":{name:"キヨスク",icon:"fas-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKiosk%20logos.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1334796",shop:"kiosk"},addTags:{brand:"キヨスク","brand:en":"KIOSK","brand:ja":"キヨスク","brand:wikidata":"Q1334796","brand:wikipedia":"ja:キヨスク",name:"キヨスク","name:en":"KIOSK","name:ja":"キヨスク",shop:"kiosk"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/Cuisinella":{name:"Cuisinella",icon:"temaki-kitchen_sink",imageURL:"https://graph.facebook.com/CuisinellaFR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3007012",shop:"kitchen"},addTags:{brand:"Cuisinella","brand:wikidata":"Q3007012","brand:wikipedia":"fr:Cuisinella",name:"Cuisinella",shop:"kitchen"},countryCodes:["fr","tn"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/Ixina":{name:"Ixina",icon:"temaki-kitchen_sink",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FIxina.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3156424",shop:"kitchen"},addTags:{brand:"Ixina","brand:wikidata":"Q3156424","brand:wikipedia":"fr:Ixina",name:"Ixina",shop:"kitchen"},countryCodes:["ae","au","be","bf","bh","bj","ca","ci","cm","cn","cz","dz","ee","eg","fr","gh","hr","ke","kw","lu","ly","ma","mu","nl","pl","qa","ro","ru","sa","se","sn","tg","th","tn","vn"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/Magnet":{name:"Magnet",icon:"temaki-kitchen_sink",imageURL:"https://graph.facebook.com/MagnetKitchens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6731427",shop:"kitchen"},addTags:{brand:"Magnet","brand:wikidata":"Q6731427","brand:wikipedia":"en:Magnet Kitchens",name:"Magnet",shop:"kitchen"},countryCodes:["gb"],terms:["magnet kitchens"],matchScore:2,suggestion:true},"shop/kitchen/Mobalpa":{name:"Mobalpa",icon:"temaki-kitchen_sink",imageURL:"https://graph.facebook.com/Mobalpa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3317571",shop:"kitchen"},addTags:{brand:"Mobalpa","brand:wikidata":"Q3317571","brand:wikipedia":"fr:Mobalpa",name:"Mobalpa",shop:"kitchen"},countryCodes:["be","fr","gb"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/Schmidt":{name:"Schmidt",icon:"temaki-kitchen_sink",imageURL:"https://graph.facebook.com/Schmidt.HomeDesign/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3487620",shop:"kitchen"},addTags:{brand:"Schmidt","brand:wikidata":"Q3487620","brand:wikipedia":"de:Schmidt Groupe",name:"Schmidt",shop:"kitchen"},countryCodes:["be","es","fr","gb"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/SoCoo'c":{name:"SoCoo'c",icon:"temaki-kitchen_sink",imageURL:"https://graph.facebook.com/SoCooc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62783840",shop:"kitchen"},addTags:{brand:"SoCoo'c","brand:wikidata":"Q62783840","brand:wikipedia":"fr:SoCoo'c",name:"SoCoo'c",shop:"kitchen"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/lottery/Loterías y Apuestas del Estado":{name:"Loterías y Apuestas del Estado",icon:"fas-ticket-alt",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogotipo%20de%20Loter%C3%ADas%20y%20Apuestas%20del%20Estado.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1311806",shop:"lottery"},addTags:{brand:"Loterías y Apuestas del Estado","brand:wikidata":"Q1311806","brand:wikipedia":"es:Loterías y Apuestas del Estado",name:"Loterías y Apuestas del Estado",shop:"lottery"},countryCodes:["es"],terms:["apuestas del estado","lotería del estado","loterías del estado"],matchScore:2,suggestion:true},"shop/lottery/ONCE":{name:"ONCE",icon:"fas-ticket-alt",imageURL:"https://graph.facebook.com/ONCE.org/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1750397",shop:"lottery"},addTags:{brand:"ONCE","brand:wikidata":"Q1750397","brand:wikipedia":"es:Organización Nacional de Ciegos Españoles",name:"ONCE",official_name:"Organización Nacional de Ciegos Españoles",shop:"lottery"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/massage/Hand & Stone Massage and Facial Spa":{name:"Hand & Stone Massage and Facial Spa",icon:"temaki-spa",imageURL:"https://graph.facebook.com/handandstoneusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55613342",shop:"massage"},addTags:{brand:"Hand & Stone Massage and Facial Spa","brand:wikidata":"Q55613342","brand:wikipedia":"en:Hand & Stone Massage and Facial Spa",name:"Hand & Stone Massage and Facial Spa",shop:"massage"},countryCodes:["us"],terms:["hand and stone massage"],matchScore:2,suggestion:true},"shop/massage/Massage Envy":{name:"Massage Envy",icon:"temaki-spa",imageURL:"https://graph.facebook.com/MassageEnvy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22922899",shop:"massage"},addTags:{brand:"Massage Envy","brand:wikidata":"Q22922899","brand:wikipedia":"en:Massage Envy",name:"Massage Envy",shop:"massage"},countryCodes:["us"],terms:["massage envy spa"],matchScore:2,suggestion:true},"shop/massage/Massage Heights":{name:"Massage Heights",icon:"temaki-spa",imageURL:"https://graph.facebook.com/MassageHeights/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64573956",shop:"massage"},addTags:{brand:"Massage Heights","brand:wikidata":"Q64573956",name:"Massage Heights",shop:"massage"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/medical_supply/Pofam-Poznań":{name:"Pofam-Poznań",icon:"fas-crutch",imageURL:"https://graph.facebook.com/381601628634155/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62057457",shop:"medical_supply"},addTags:{brand:"Pofam-Poznań","brand:wikidata":"Q62057457",name:"Pofam-Poznań",shop:"medical_supply"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/medical_supply/Ортека":{name:"Ортека",icon:"fas-crutch",imageURL:"https://graph.facebook.com/orteka.rus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62393660",shop:"medical_supply"},addTags:{brand:"Ортека","brand:wikidata":"Q62393660",name:"Ортека",shop:"medical_supply"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/3 Store":{name:"3 Store",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/ThreeUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q407009",shop:"mobile_phone"},addTags:{brand:"3 Store","brand:wikidata":"Q407009","brand:wikipedia":"en:3 (telecommunications)",name:"3 Store",shop:"mobile_phone"},countryCodes:["gb","it"],terms:["3","three","three store"],matchScore:2,suggestion:true},"shop/mobile_phone/A1":{name:"A1",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/A1Fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q688755",shop:"mobile_phone"},addTags:{brand:"A1","brand:wikidata":"Q688755","brand:wikipedia":"en:A1 Telekom Austria Group",name:"A1",shop:"mobile_phone"},countryCodes:["at","bg","by","hr","si"],terms:["velcom","velcom|a1","велком"],matchScore:2,suggestion:true},"shop/mobile_phone/AT&T":{name:"AT&T",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/ATT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q298594",shop:"mobile_phone"},addTags:{brand:"AT&T","brand:wikidata":"Q298594","brand:wikipedia":"en:AT&T Mobility",name:"AT&T",shop:"mobile_phone"},countryCodes:["mx","us"],terms:["att mobile","att mobility","att wireless"],matchScore:2,suggestion:true},"shop/mobile_phone/Bell":{name:"Bell",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/BellCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2894594",shop:"mobile_phone"},addTags:{brand:"Bell","brand:wikidata":"Q2894594","brand:wikipedia":"en:Bell Mobility",name:"Bell",shop:"mobile_phone"},countryCodes:["ca"],terms:["bell mobile","bell mobility","bell wireless"],matchScore:2,suggestion:true},"shop/mobile_phone/Best Buy Mobile":{name:"Best Buy Mobile",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/bestbuy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q533415",shop:"mobile_phone"},addTags:{brand:"Best Buy Mobile","brand:wikidata":"Q533415","brand:wikipedia":"en:Best Buy",name:"Best Buy Mobile",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Bitė":{name:"Bitė",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/bitelietuva/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q796010",shop:"mobile_phone"},addTags:{brand:"Bitė","brand:wikidata":"Q796010","brand:wikipedia":"lt:Bitės grupė",name:"Bitė",shop:"mobile_phone"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Boost Mobile":{name:"Boost Mobile",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/boostmobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4943790",shop:"mobile_phone"},addTags:{brand:"Boost Mobile","brand:wikidata":"Q4943790","brand:wikipedia":"en:Boost Mobile",name:"Boost Mobile",shop:"mobile_phone"},countryCodes:["us"],terms:["boost"],matchScore:2,suggestion:true},"shop/mobile_phone/Bouygues Telecom":{name:"Bouygues Telecom",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/bouyguestelecom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q581438",shop:"mobile_phone"},addTags:{brand:"Bouygues Telecom","brand:wikidata":"Q581438","brand:wikipedia":"fr:Bouygues Telecom",name:"Bouygues Telecom",shop:"mobile_phone"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Carphone Warehouse":{name:"Carphone Warehouse",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/carphonewarehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118046",shop:"mobile_phone"},addTags:{brand:"Carphone Warehouse","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Carphone Warehouse",shop:"mobile_phone"},countryCodes:["by","gb","ie"],terms:["the carphone warehouse"],matchScore:2,suggestion:true},"shop/mobile_phone/Chatr":{name:"Chatr",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/chatrmobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5087766",shop:"mobile_phone"},addTags:{brand:"Chatr","brand:wikidata":"Q5087766","brand:wikipedia":"en:Chatr",name:"Chatr",shop:"mobile_phone"},countryCodes:["ca"],terms:["chatr mobile"],matchScore:2,suggestion:true},"shop/mobile_phone/Claro":{name:"Claro",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/ClaroCol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1770208",shop:"mobile_phone"},addTags:{brand:"Claro","brand:wikidata":"Q1770208","brand:wikipedia":"en:Claro (company)",name:"Claro",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Cricket Wireless":{name:"Cricket Wireless",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/cricketwireless/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5184987",shop:"mobile_phone"},addTags:{brand:"Cricket Wireless","brand:wikidata":"Q5184987","brand:wikipedia":"en:Cricket Wireless",name:"Cricket Wireless",shop:"mobile_phone"},countryCodes:["us"],terms:["cricket"],matchScore:2,suggestion:true},"shop/mobile_phone/Digicel":{name:"Digicel",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/digicel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2117506",shop:"mobile_phone"},addTags:{brand:"Digicel","brand:wikidata":"Q2117506","brand:wikipedia":"en:Digicel",name:"Digicel",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/EE":{name:"EE",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/ee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5322942",shop:"mobile_phone"},addTags:{brand:"EE","brand:wikidata":"Q5322942","brand:wikipedia":"en:EE Limited",name:"EE",shop:"mobile_phone"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Entel":{name:"Entel",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/entelsa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q450420",shop:"mobile_phone"},addTags:{brand:"Entel","brand:wikidata":"Q450420","brand:wikipedia":"en:Entel (Chile)",name:"Entel",shop:"mobile_phone"},countryCodes:["cl","pe"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Fido":{name:"Fido",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/fidomobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3071471",shop:"mobile_phone"},addTags:{brand:"Fido","brand:wikidata":"Q3071471","brand:wikipedia":"en:Fido Solutions",name:"Fido",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Freedom Mobile":{name:"Freedom Mobile",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/frdmmobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8023931",shop:"mobile_phone"},addTags:{brand:"Freedom Mobile","brand:wikidata":"Q8023931","brand:wikipedia":"en:Freedom Mobile",name:"Freedom Mobile",shop:"mobile_phone"},countryCodes:["ca"],terms:["freedom","wind mobile"],matchScore:2,suggestion:true},"shop/mobile_phone/Koodo":{name:"Koodo",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Koodo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6430529",shop:"mobile_phone"},addTags:{brand:"Koodo","brand:wikidata":"Q6430529","brand:wikipedia":"en:Koodo Mobile",name:"Koodo",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/MEO":{name:"MEO",icon:"fas-mobile-alt",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMeo%20logo%20pt.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3306167",shop:"mobile_phone"},addTags:{brand:"MEO","brand:wikidata":"Q3306167","brand:wikipedia":"en:MEO (telecommunications company)",name:"MEO",shop:"mobile_phone"},terms:["loja meo"],matchScore:2,suggestion:true},"shop/mobile_phone/MTN":{name:"MTN",icon:"fas-mobile-alt",imageURL:"https://pbs.twimg.com/profile_images/576253333133877248/27GSSNb8_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q1813361",shop:"mobile_phone"},addTags:{brand:"MTN","brand:wikidata":"Q1813361","brand:wikipedia":"en:MTN Group",name:"MTN",shop:"mobile_phone"},terms:["agence mtn"],matchScore:2,suggestion:true},"shop/mobile_phone/MetroPCS":{name:"MetroPCS",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/MetroByTMobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1925685",shop:"mobile_phone"},addTags:{brand:"MetroPCS","brand:wikidata":"Q1925685","brand:wikipedia":"en:Metro by T-Mobile",name:"MetroPCS",shop:"mobile_phone"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Mobilcom Debitel":{name:"Mobilcom Debitel",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/mobilcomdebitel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q344744",shop:"mobile_phone"},addTags:{brand:"Mobilcom Debitel","brand:wikidata":"Q344744","brand:wikipedia":"en:Debitel",name:"Mobilcom Debitel",shop:"mobile_phone"},countryCodes:["de","ir"],terms:["debitel"],matchScore:2,suggestion:true},"shop/mobile_phone/Moov":{name:"Moov",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/moovcotedivoire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3323637",shop:"mobile_phone"},addTags:{brand:"Moov","brand:wikidata":"Q3323637","brand:wikipedia":"fr:Moov Côte d'Ivoire",name:"Moov",shop:"mobile_phone"},countryCodes:["ci","tg"],terms:["agence moov"],matchScore:2,suggestion:true},"shop/mobile_phone/Movistar":{name:"Movistar",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/movistar.es/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q967735",shop:"mobile_phone"},addTags:{brand:"Movistar","brand:wikidata":"Q967735","brand:wikipedia":"en:Movistar",name:"Movistar",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/NOS":{name:"NOS",icon:"fas-mobile-alt",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLog%C3%B3tipo%20da%20NOS.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q136331",shop:"mobile_phone"},addTags:{brand:"NOS","brand:wikidata":"Q136331","brand:wikipedia":"en:NOS (Portuguese media company)",name:"NOS",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/O2":{name:"O2",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/o2uk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1759255",shop:"mobile_phone"},addTags:{brand:"O2","brand:wikidata":"Q1759255","brand:wikipedia":"en:Telefónica Europe",name:"O2",shop:"mobile_phone"},countryCodes:["cz","de","gb","ie","sk"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Optie1":{name:"Optie1",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Optie1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62393564",shop:"mobile_phone"},addTags:{brand:"Optie1","brand:wikidata":"Q62393564",name:"Optie1",shop:"mobile_phone"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Optus":{name:"Optus",icon:"fas-mobile-alt",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FOptus%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q865038",shop:"mobile_phone"},addTags:{brand:"Optus","brand:wikidata":"Q865038",name:"Optus",shop:"mobile_phone"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Orange":{name:"Orange",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/orange/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1431486",shop:"mobile_phone"},addTags:{brand:"Orange","brand:wikidata":"Q1431486","brand:wikipedia":"fr:Orange (entreprise)",name:"Orange",shop:"mobile_phone"},terms:["agence orange"],matchScore:2,suggestion:true},"shop/mobile_phone/Personal":{name:"Personal",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/personalargentina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10933021",shop:"mobile_phone"},addTags:{brand:"Personal","brand:wikidata":"Q10933021","brand:wikipedia":"es:Personal (Argentina)",name:"Personal",shop:"mobile_phone"},countryCodes:["ar","py"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Phone House":{name:"Phone House",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/carphonewarehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118046",shop:"mobile_phone"},addTags:{brand:"Phone House","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Phone House",shop:"mobile_phone"},countryCodes:["de","es","fr","nl","pt"],terms:["the phone house"],matchScore:2,suggestion:true},"shop/mobile_phone/Play":{name:"Play",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Play/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7202998",shop:"mobile_phone"},addTags:{brand:"Play","brand:wikidata":"Q7202998","brand:wikipedia":"pl:Play (sieć telefonii komórkowej)",name:"Play",shop:"mobile_phone"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Plus":{name:"Plus",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/plus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7205598",shop:"mobile_phone"},addTags:{brand:"Plus","brand:wikidata":"Q7205598","brand:wikipedia":"pl:Plus (sieć telefonii komórkowej)",name:"Plus",shop:"mobile_phone"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Rogers":{name:"Rogers",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Rogers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3439663",shop:"mobile_phone"},addTags:{brand:"Rogers","brand:wikidata":"Q3439663","brand:wikipedia":"en:Rogers Wireless",name:"Rogers",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/SFR":{name:"SFR",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/SFR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q218765",shop:"mobile_phone"},addTags:{brand:"SFR","brand:wikidata":"Q218765","brand:wikipedia":"en:SFR",name:"SFR",shop:"mobile_phone"},countryCodes:["fr","lu"],terms:["espace sfr"],matchScore:2,suggestion:true},"shop/mobile_phone/Sprint":{name:"Sprint",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/sprint/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q301965",shop:"mobile_phone"},addTags:{brand:"Sprint","brand:wikidata":"Q301965","brand:wikipedia":"en:Sprint Corporation",name:"Sprint",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/T-Mobile":{name:"T-Mobile",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/TMobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q327634",shop:"mobile_phone"},addTags:{brand:"T-Mobile","brand:wikidata":"Q327634","brand:wikipedia":"en:T-Mobile",name:"T-Mobile",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/TIM":{name:"TIM",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/TimOfficialPage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q144617",shop:"mobile_phone"},addTags:{brand:"TIM","brand:wikidata":"Q144617","brand:wikipedia":"en:Telecom Italia",name:"TIM",shop:"mobile_phone"},countryCodes:["br","it"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Tbooth Wireless":{name:"Tbooth Wireless",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/TboothWireless/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7690597",shop:"mobile_phone"},addTags:{brand:"Tbooth Wireless","brand:wikidata":"Q7690597",name:"Tbooth Wireless",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telcel":{name:"Telcel",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Telcel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3517255",shop:"mobile_phone"},addTags:{brand:"Telcel","brand:wikidata":"Q3517255","brand:wikipedia":"en:Telcel",name:"Telcel",shop:"mobile_phone"},countryCodes:["cu","mx"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Tele2":{name:"Tele2",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/WeAreTele2/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q309865",shop:"mobile_phone"},addTags:{brand:"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Tele2",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telekom":{name:"Telekom",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/deutschetelekom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9396",shop:"mobile_phone"},addTags:{brand:"Telekom","brand:wikidata":"Q9396","brand:wikipedia":"en:Deutsche Telekom",name:"Telekom",shop:"mobile_phone"},countryCodes:["de","hu","ro","si","sk"],terms:["telekom shop"],matchScore:2,suggestion:true},"shop/mobile_phone/Telenor":{name:"Telenor",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/telenorgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q845632",shop:"mobile_phone"},addTags:{brand:"Telenor","brand:wikidata":"Q845632","brand:wikipedia":"en:Telenor",name:"Telenor",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telia":{name:"Telia",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/teliacompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q862303",shop:"mobile_phone"},addTags:{brand:"Telia","brand:wikidata":"Q862303","brand:wikipedia":"en:Telia Company",name:"Telia",shop:"mobile_phone"},countryCodes:["dk","fi","lt","no","se"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telstra":{name:"Telstra",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Telstra/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q721162",shop:"mobile_phone"},addTags:{brand:"Telstra","brand:wikidata":"Q721162","brand:wikipedia":"en:Telstra",name:"Telstra",shop:"mobile_phone"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telus":{name:"Telus",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/telus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q165858",shop:"mobile_phone"},addTags:{brand:"Telus","brand:wikidata":"Q165858","brand:wikipedia":"en:Telus",name:"Telus",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Turkcell":{name:"Turkcell",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Turkcell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q283852",shop:"mobile_phone"},addTags:{brand:"Turkcell","brand:wikidata":"Q283852","brand:wikipedia":"en:Turkcell",name:"Turkcell",shop:"mobile_phone"},countryCodes:["cy","tr"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/U.S. Cellular":{name:"U.S. Cellular",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/USCellular/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2466256",shop:"mobile_phone"},addTags:{brand:"U.S. Cellular","brand:wikidata":"Q2466256","brand:wikipedia":"en:U.S. Cellular",name:"U.S. Cellular",shop:"mobile_phone"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/UQモバイル":{name:"UQモバイル",icon:"fas-mobile-alt",imageURL:"https://pbs.twimg.com/profile_images/875506930256494592/gHnlkGTo_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11252091",shop:"mobile_phone"},addTags:{brand:"UQモバイル","brand:en":"UQ mobile","brand:ja":"UQモバイル","brand:wikidata":"Q11252091","brand:wikipedia":"ja:UQコミュニケーションズ",name:"UQモバイル","name:en":"UQ mobile","name:ja":"UQモバイル",shop:"mobile_phone"},countryCodes:["jp"],terms:["ユーキューモバイル"],matchScore:2,suggestion:true},"shop/mobile_phone/Verizon Wireless":{name:"Verizon Wireless",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/verizon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q919641",shop:"mobile_phone"},addTags:{brand:"Verizon Wireless","brand:wikidata":"Q919641","brand:wikipedia":"en:Verizon Wireless",name:"Verizon Wireless",shop:"mobile_phone"},countryCodes:["us"],terms:["verizon"],matchScore:2,suggestion:true},"shop/mobile_phone/Vidéotron":{name:"Vidéotron",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/videotron/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2396830",shop:"mobile_phone"},addTags:{brand:"Vidéotron","brand:wikidata":"Q2396830","brand:wikipedia":"en:Vidéotron",name:"Vidéotron",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Virgin Mobile (Canada)":{name:"Virgin Mobile (Canada)",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/virginmobilecan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3560641",shop:"mobile_phone"},addTags:{brand:"Virgin Mobile","brand:wikidata":"Q3560641","brand:wikipedia":"en:Virgin Mobile Canada",name:"Virgin Mobile",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Vivo":{name:"Vivo",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/vivoGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18301787",shop:"mobile_phone"},addTags:{brand:"Vivo","brand:wikidata":"Q18301787","brand:wikipedia":"en:Vivo (technology company)",name:"Vivo",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Vodafone":{name:"Vodafone",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/vodafoneUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q122141",shop:"mobile_phone"},addTags:{brand:"Vodafone","brand:wikidata":"Q122141","brand:wikipedia":"en:Vodafone",name:"Vodafone",shop:"mobile_phone"},terms:["vodafone shop"],matchScore:2,suggestion:true},"shop/mobile_phone/WIFI_ETECSA":{name:"WIFI_ETECSA",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/etecsa.cu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q490323",shop:"mobile_phone"},addTags:{brand:"WIFI_ETECSA","brand:wikidata":"Q490323","brand:wikipedia":"es:Empresa de Telecomunicaciones de Cuba",name:"WIFI_ETECSA",shop:"mobile_phone"},countryCodes:["cu"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/WOW! Mobile Boutique":{name:"WOW! Mobile Boutique",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/wowmobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64847598",shop:"mobile_phone"},addTags:{brand:"WOW! Mobile Boutique","brand:wikidata":"Q64847598",name:"WOW! Mobile Boutique",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Wind":{name:"Wind",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Wind/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q650467",shop:"mobile_phone"},addTags:{brand:"Wind","brand:wikidata":"Q650467","brand:wikipedia":"en:WIND (Italy)",name:"Wind",shop:"mobile_phone"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/WirelessWave":{name:"WirelessWave",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/wirelesswave/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8026815",shop:"mobile_phone"},addTags:{brand:"WirelessWave","brand:wikidata":"Q8026815",name:"WirelessWave",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Yoigo":{name:"Yoigo",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Yoigo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2630989",shop:"mobile_phone"},addTags:{brand:"Yoigo","brand:wikidata":"Q2630989","brand:wikipedia":"en:Yoigo",name:"Yoigo",shop:"mobile_phone"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/auショップ":{name:"auショップ",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/aubyKDDI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q307110",shop:"mobile_phone"},addTags:{brand:"au","brand:ja":"au","brand:wikidata":"Q307110","brand:wikipedia":"ja:Au (携帯電話)",name:"auショップ","name:en":"au","name:ja":"auショップ",shop:"mobile_phone"},countryCodes:["jp"],terms:["au"],matchScore:2,suggestion:true},"shop/mobile_phone/lifecell":{name:"lifecell",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/lifeua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1936895",shop:"mobile_phone"},addTags:{brand:"lifecell","brand:wikidata":"Q1936895","brand:wikipedia":"uk:Lifecell",name:"lifecell",shop:"mobile_phone"},terms:["магазин lifecell"],matchScore:2,suggestion:true},"shop/mobile_phone/Алло":{name:"Алло",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/allo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18683057",shop:"mobile_phone"},addTags:{brand:"Алло","brand:wikidata":"Q18683057","brand:wikipedia":"uk:Алло (торгова мережа)",name:"Алло",shop:"mobile_phone"},countryCodes:["md","ua"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Билайн":{name:"Билайн",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Beelinerus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q402880",shop:"mobile_phone"},addTags:{brand:"Билайн","brand:en":"Beeline","brand:wikidata":"Q402880","brand:wikipedia":"en:Beeline (brand)",name:"Билайн","name:en":"Beeline",shop:"mobile_phone"},countryCodes:["kg","kz","ru"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Евросеть":{name:"Евросеть",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/euroset/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65310",shop:"mobile_phone"},addTags:{brand:"Евросеть","brand:en":"Euroset","brand:wikidata":"Q65310","brand:wikipedia":"en:Euroset",name:"Евросеть","name:en":"Euroset",shop:"mobile_phone"},countryCodes:["by","kz","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Київстар":{name:"Київстар",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/kyivstar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2288463",shop:"mobile_phone"},addTags:{brand:"Київстар","brand:en":"Kyivstar","brand:wikidata":"Q2288463","brand:wikipedia":"en:Kyivstar",name:"Київстар","name:en":"Kyivstar",shop:"mobile_phone"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/МТС":{name:"МТС",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/mts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1368919",shop:"mobile_phone"},addTags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"mobile_phone"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Мегафон":{name:"Мегафон",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/MegaFon.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1720713",shop:"mobile_phone"},addTags:{brand:"Мегафон","brand:en":"MegaFon","brand:wikidata":"Q1720713","brand:wikipedia":"en:MegaFon",name:"Мегафон","name:en":"MegaFon",shop:"mobile_phone"},countryCodes:["ru","tj"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Связной":{name:"Связной",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/svyaznoy.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65371",shop:"mobile_phone"},addTags:{brand:"Связной","brand:en":"Svyaznoy","brand:wikidata":"Q65371","brand:wikipedia":"en:Svyaznoy",name:"Связной","name:en":"Svyaznoy",shop:"mobile_phone"},countryCodes:["by","ru","uz"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Теле2":{name:"Теле2",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/WeAreTele2/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q309865",shop:"mobile_phone"},addTags:{brand:"Теле2","brand:en":"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Теле2","name:en":"Tele2",shop:"mobile_phone"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/ソフトバンク":{name:"ソフトバンク",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/SoftBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7553832",shop:"mobile_phone"},addTags:{brand:"ソフトバンク","brand:en":"SoftBank Telecom","brand:ja":"ソフトバンク","brand:wikidata":"Q7553832","brand:wikipedia":"en:SoftBank Telecom",name:"ソフトバンク","name:en":"SoftBank Telecom","name:ja":"ソフトバンク",shop:"mobile_phone"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/ソフトバンクショップ":{name:"ソフトバンクショップ",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/SoftBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11315281",shop:"mobile_phone"},addTags:{brand:"ソフトバンクショップ","brand:en":"SoftBankShop","brand:ja":"ソフトバンクショップ","brand:wikidata":"Q11315281","brand:wikipedia":"ja:ソフトバンクショップ",name:"ソフトバンクショップ","name:en":"SoftBankShop","name:ja":"ソフトバンクショップ",shop:"mobile_phone"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/ドコモショップ":{name:"ドコモショップ",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/docomo.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q853958",shop:"mobile_phone"},addTags:{brand:"ドコモショップ","brand:en":"DoCoMo Shop","brand:ja":"ドコモショップ","brand:wikidata":"Q853958","brand:wikipedia":"ja:NTTドコモ",name:"ドコモショップ","name:en":"DoCoMo Shop","name:ja":"ドコモショップ",shop:"mobile_phone"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/ワイモバイル":{name:"ワイモバイル",icon:"fas-mobile-alt",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FYmobile%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5322556",shop:"mobile_phone"},addTags:{brand:"ワイモバイル","brand:en":"Ymobile","brand:ja":"ワイモバイル","brand:wikidata":"Q5322556","brand:wikipedia":"ja:ワイモバイル",name:"ワイモバイル","name:en":"Ymobile","name:ja":"ワイモバイル",shop:"mobile_phone"},countryCodes:["jp"],terms:["ymobile, y!mobile"],matchScore:2,suggestion:true},"shop/mobile_phone/台灣大哥大":{name:"台灣大哥大",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/taiwanmobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5943259",shop:"mobile_phone"},addTags:{brand:"台灣大哥大","brand:en":"Taiwan Mobile","brand:wikidata":"Q5943259","brand:wikipedia":"zh:台灣大哥大","brand:zh":"台灣大哥大",name:"台灣大哥大","name:en":"Taiwan Mobile","name:zh":"台灣大哥大",shop:"mobile_phone"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/ACE Cash Express":{name:"ACE Cash Express",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/acecashexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24260962",shop:"money_lender"},addTags:{brand:"ACE Cash Express","brand:wikidata":"Q24260962","brand:wikipedia":"en:ACE Cash Express",name:"ACE Cash Express",shop:"money_lender"},countryCodes:["us"],terms:["ace"],matchScore:2,suggestion:true},"shop/money_lender/Advance America":{name:"Advance America",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/AdvanceAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4686044",shop:"money_lender"},addTags:{brand:"Advance America","brand:wikidata":"Q4686044",name:"Advance America",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/California Check Cashing Stores":{name:"California Check Cashing Stores",icon:"temaki-money_hand",geometry:["point","area"],tags:{"brand:wikidata":"Q64390932",shop:"money_lender"},addTags:{brand:"California Check Cashing Stores","brand:wikidata":"Q64390932",name:"California Check Cashing Stores",shop:"money_lender"},countryCodes:["us"],terms:["california check cashing"],matchScore:2,suggestion:true},"shop/money_lender/Cash Store":{name:"Cash Store",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/cashstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61943411",shop:"money_lender"},addTags:{brand:"Cash Store","brand:wikidata":"Q61943411",name:"Cash Store",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/CashMax":{name:"CashMax",icon:"temaki-money_hand",geometry:["point","area"],tags:{"brand:wikidata":"Q69365478",shop:"money_lender"},addTags:{brand:"CashMax","brand:wikidata":"Q69365478",name:"CashMax",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/Check Into Cash":{name:"Check Into Cash",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/checkintocash/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16961246",shop:"money_lender"},addTags:{brand:"Check Into Cash","brand:wikidata":"Q16961246","brand:wikipedia":"en:Check Into Cash",name:"Check Into Cash",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/CheckSmart":{name:"CheckSmart",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/166958136649293/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65640213",shop:"money_lender"},addTags:{alt_name:"Check$mart",brand:"CheckSmart","brand:wikidata":"Q65640213",name:"CheckSmart",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/First Virginia":{name:"First Virginia",icon:"temaki-money_hand",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFirst%20Virginia%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q65640051",shop:"money_lender"},addTags:{brand:"First Virginia","brand:wikidata":"Q65640051",name:"First Virginia",shop:"money_lender"},countryCodes:["us"],terms:["1st virginia"],matchScore:2,suggestion:true},"shop/money_lender/Money Mart":{name:"Money Mart",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/moneymartusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6899166",shop:"money_lender"},addTags:{brand:"Money Mart","brand:wikidata":"Q6899166","brand:wikipedia":"en:Money Mart",name:"Money Mart",shop:"money_lender"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/Moneytree":{name:"Moneytree",icon:"temaki-money_hand",geometry:["point","area"],tags:{"brand:wikidata":"Q6899361",shop:"money_lender"},addTags:{brand:"Moneytree","brand:wikidata":"Q6899361","brand:wikipedia":"en:Moneytree",name:"Moneytree",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Harley-Davidson":{name:"Harley-Davidson",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/harley-davidson/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q192814",shop:"motorcycle"},addTags:{brand:"Harley-Davidson","brand:wikidata":"Q192814","brand:wikipedia":"en:Harley-Davidson",name:"Harley-Davidson",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Honda":{name:"Honda",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/HondaJP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9584",shop:"motorcycle"},addTags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Kawasaki":{name:"Kawasaki",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/kawasaki/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6379855",shop:"motorcycle"},addTags:{brand:"Kawasaki","brand:wikidata":"Q6379855","brand:wikipedia":"en:Kawasaki motorcycles",name:"Kawasaki",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Motortrade":{name:"Motortrade",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/MotortradePh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48803162",shop:"motorcycle"},addTags:{brand:"Motortrade","brand:wikidata":"Q48803162","brand:wikipedia":"en:Motortrade",name:"Motortrade",shop:"motorcycle"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Suzuki":{name:"Suzuki",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/SuzukiGlobalOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q181642",shop:"motorcycle"},addTags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Yamaha":{name:"Yamaha",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/yamahamotorusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q158888",shop:"motorcycle"},addTags:{brand:"Yamaha","brand:wikidata":"Q158888","brand:wikipedia":"en:Yamaha Motor Company",name:"Yamaha",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/レッドバロン":{name:"レッドバロン",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/redbaron.co.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11349759",shop:"motorcycle"},addTags:{brand:"レッドバロン","brand:en":"Red Baron","brand:ja":"レッドバロン","brand:wikidata":"Q11349759","brand:wikipedia":"ja:レッドバロン (企業)",name:"レッドバロン","name:en":"Red Baron","name:ja":"レッドバロン",shop:"motorcycle"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/music/FYE":{name:"FYE",icon:"fas-compact-disc",imageURL:"https://graph.facebook.com/FYE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5424141",shop:"music"},addTags:{brand:"FYE","brand:wikidata":"Q5424141","brand:wikipedia":"en:FYE (retailer)",name:"FYE",shop:"music"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/music/HMV":{name:"HMV",icon:"fas-compact-disc",imageURL:"https://graph.facebook.com/hmv/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10854572",shop:"music"},addTags:{brand:"HMV","brand:wikidata":"Q10854572","brand:wikipedia":"en:HMV",name:"HMV",shop:"music"},countryCodes:["ca","gb"],terms:[],matchScore:2,suggestion:true},"shop/music/Sunrise Records":{name:"Sunrise Records",icon:"fas-compact-disc",imageURL:"https://graph.facebook.com/sunriserecords/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30600373",shop:"music"},addTags:{brand:"Sunrise Records","brand:wikidata":"Q30600373","brand:wikipedia":"en:Sunrise Records (retailer)",name:"Sunrise Records",shop:"music"},countryCodes:["ca","gb"],terms:[],matchScore:2,suggestion:true},"shop/music/TSUTAYA":{name:"TSUTAYA",icon:"fas-compact-disc",imageURL:"https://graph.facebook.com/TSUTAYA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5193457",shop:"music"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"music"},terms:[],matchScore:2,suggestion:true},"shop/music/タワーレコード":{name:"タワーレコード",icon:"fas-compact-disc",imageURL:"https://graph.facebook.com/towerrecordsinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3265728",shop:"music"},addTags:{alt_name:"タワレコ",brand:"タワーレコード","brand:en":"Tower Records","brand:ja":"タワーレコード","brand:wikidata":"Q3265728","brand:wikipedia":"ja:タワーレコード",name:"タワーレコード","name:en":"Tower Records","name:ja":"タワーレコード",shop:"music"},countryCodes:["jp"],terms:["タワレコ"],matchScore:2,suggestion:true},"shop/musical_instrument/Guitar Center":{name:"Guitar Center",icon:"fas-guitar",imageURL:"https://graph.facebook.com/GuitarCenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3622794",shop:"musical_instrument"},addTags:{brand:"Guitar Center","brand:wikidata":"Q3622794","brand:wikipedia":"en:Guitar Center",name:"Guitar Center",shop:"musical_instrument"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/musical_instrument/Long & McQuade":{name:"Long & McQuade",icon:"fas-guitar",imageURL:"https://graph.facebook.com/LongMcQuade/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6672180",shop:"musical_instrument"},addTags:{brand:"Long & McQuade","brand:wikidata":"Q6672180","brand:wikipedia":"en:Long & McQuade",name:"Long & McQuade",shop:"musical_instrument"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Cigo":{name:"Cigo",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/cigo.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391977",shop:"newsagent"},addTags:{brand:"Cigo","brand:wikidata":"Q62391977",name:"Cigo",shop:"newsagent"},countryCodes:["de","nl"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Kolporter":{name:"Kolporter",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/kolporterpl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6427874",shop:"newsagent"},addTags:{brand:"Kolporter","brand:wikidata":"Q6427874","brand:wikipedia":"pl:Kolporter (przedsiębiorstwo)",name:"Kolporter",shop:"newsagent"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Maison de la Presse":{name:"Maison de la Presse",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/260230084083052/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62085960",shop:"newsagent"},addTags:{brand:"Maison de la Presse","brand:wikidata":"Q62085960",name:"Maison de la Presse",shop:"newsagent"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Martin's":{name:"Martin's",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/YourMcColls/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997477",shop:"newsagent"},addTags:{brand:"Martin's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"Martin's",shop:"newsagent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Primera":{name:"Primera",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/Primera.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2176149",shop:"newsagent"},addTags:{brand:"Primera","brand:wikidata":"Q2176149","brand:wikipedia":"nl:Primera (winkelketen)",name:"Primera",shop:"newsagent"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Relay":{name:"Relay",icon:"fas-newspaper",imageURL:"https://pbs.twimg.com/profile_images/1024284754911416320/NcQ5ml-K_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3424298",shop:"newsagent"},addTags:{brand:"Relay","brand:wikidata":"Q3424298","brand:wikipedia":"en:Relay (shop)",name:"Relay",shop:"newsagent"},terms:[],matchScore:2,suggestion:true},"shop/newsagent/WHSmith":{name:"WHSmith",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/WHSmithuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1548712",shop:"newsagent"},addTags:{brand:"WHSmith","brand:wikidata":"Q1548712","brand:wikipedia":"en:WHSmith",name:"WHSmith",shop:"newsagent"},terms:[],matchScore:2,suggestion:true},"shop/newsagent/k kiosk":{name:"k kiosk",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/kkiosk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60381703",shop:"newsagent"},addTags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"newsagent"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Белсоюзпечать":{name:"Белсоюзпечать",icon:"fas-newspaper",imageURL:"https://pbs.twimg.com/profile_images/1072050933054484480/bEd3Ce1j_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q67723214",shop:"newsagent"},addTags:{brand:"Белсоюзпечать","brand:wikidata":"Q67723214",name:"Белсоюзпечать",shop:"newsagent"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Витебскоблсоюзпечать":{name:"Витебскоблсоюзпечать",icon:"fas-newspaper",imageURL:"https://pbs.twimg.com/profile_images/1072050933054484480/bEd3Ce1j_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q67723214",shop:"newsagent"},addTags:{brand:"Витебскоблсоюзпечать","brand:wikidata":"Q67723214",name:"Витебскоблсоюзпечать",shop:"newsagent"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Первая полоса":{name:"Первая полоса",icon:"fas-newspaper",geometry:["point","area"],tags:{"brand:wikidata":"Q62736412",shop:"newsagent"},addTags:{brand:"Первая полоса","brand:wikidata":"Q62736412",name:"Первая полоса",shop:"newsagent"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Союзпечать":{name:"Союзпечать",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/Belsouzpechat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4430611",shop:"newsagent"},addTags:{brand:"Союзпечать","brand:wikidata":"Q4430611","brand:wikipedia":"ru:Союзпечать",name:"Союзпечать",shop:"newsagent"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/読売新聞":{name:"読売新聞",icon:"fas-newspaper",imageURL:"https://pbs.twimg.com/profile_images/1091035339232227328/elp0X_L6_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q645218",shop:"newsagent"},addTags:{brand:"読売新聞","brand:en":"Yomiuri Shimbun","brand:wikidata":"Q645218","brand:wikipedia":"en:Yomiuri Shimbun",name:"読売新聞","name:en":"Yomiuri Shimbun",shop:"newsagent"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/nutrition_supplements/GNC":{name:"GNC",icon:"fas-pills",imageURL:"https://graph.facebook.com/GNCLiveWell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4808595",shop:"nutrition_supplements"},addTags:{brand:"GNC","brand:wikidata":"Q4808595","brand:wikipedia":"en:GNC (store)",name:"GNC",shop:"nutrition_supplements"},terms:["gnc live well"],matchScore:2,suggestion:true},"shop/nutrition_supplements/Popeye's Supplements":{name:"Popeye's Supplements",icon:"fas-pills",imageURL:"https://graph.facebook.com/popeyessupplements/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q71096495",shop:"nutrition_supplements"},addTags:{brand:"Popeye's Supplements","brand:wikidata":"Q71096495",name:"Popeye's Supplements",shop:"nutrition_supplements"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/nutrition_supplements/The Vitamin Shoppe":{name:"The Vitamin Shoppe",icon:"fas-pills",imageURL:"https://graph.facebook.com/THEVITAMINSHOPPE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7772938",shop:"nutrition_supplements"},addTags:{brand:"The Vitamin Shoppe","brand:wikidata":"Q7772938","brand:wikipedia":"en:The Vitamin Shoppe",name:"The Vitamin Shoppe",shop:"nutrition_supplements"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/nutrition_supplements/Vitamin World":{name:"Vitamin World",icon:"fas-pills",imageURL:"https://graph.facebook.com/OfficialVitaminWorld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7936979",shop:"nutrition_supplements"},addTags:{brand:"Vitamin World","brand:wikidata":"Q7936979","brand:wikipedia":"en:Vitamin World",name:"Vitamin World",shop:"nutrition_supplements"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Alain Afflelou":{name:"Alain Afflelou",icon:"maki-optician",imageURL:"https://graph.facebook.com/AlainAfflelouOptico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2829511",shop:"optician"},addTags:{brand:"Alain Afflelou","brand:wikidata":"Q2829511","brand:wikipedia":"fr:Alain Afflelou (entreprise)",name:"Alain Afflelou",shop:"optician"},countryCodes:["be","ch","es","fr","pt"],terms:[],matchScore:2,suggestion:true},"shop/optician/America's Best Contacts & Eyeglasses":{name:"America's Best Contacts & Eyeglasses",icon:"maki-optician",imageURL:"https://graph.facebook.com/AmericasBestContactsandEyeglasses/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4742504",shop:"optician"},addTags:{brand:"America's Best Contacts & Eyeglasses","brand:wikidata":"Q4742504","brand:wikipedia":"en:America's Best Contacts & Eyeglasses",name:"America's Best Contacts & Eyeglasses",shop:"optician",short_name:"America's Best"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Apollo-Optik":{name:"Apollo-Optik",icon:"maki-optician",imageURL:"https://graph.facebook.com/ApolloOptik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q618940",shop:"optician"},addTags:{brand:"Apollo-Optik","brand:wikidata":"Q618940","brand:wikipedia":"de:Apollo-Optik",name:"Apollo-Optik",shop:"optician",short_name:"Apollo"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/optician/Atol":{name:"Atol",icon:"maki-optician",imageURL:"https://graph.facebook.com/opticiensatol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2869542",shop:"optician"},addTags:{brand:"Atol","brand:wikidata":"Q2869542","brand:wikipedia":"fr:Atol (opticien)",name:"Atol",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Boots Opticians":{name:"Boots Opticians",icon:"maki-optician",imageURL:"https://graph.facebook.com/BootsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4944037",shop:"optician"},addTags:{brand:"Boots Opticians","brand:wikidata":"Q4944037","brand:wikipedia":"en:Boots Opticians",name:"Boots Opticians",shop:"optician",short_name:"Boots"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/optician/Clarkson Eyecare":{name:"Clarkson Eyecare",icon:"maki-optician",geometry:["point","area"],tags:{"brand:wikidata":"Q64027001",shop:"optician"},addTags:{brand:"Clarkson Eyecare","brand:wikidata":"Q64027001",healthcare:"optometrist",name:"Clarkson Eyecare",shop:"optician",short_name:"Clarkson"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Cohen's Fashion Optical":{name:"Cohen's Fashion Optical",icon:"maki-optician",imageURL:"https://graph.facebook.com/cohensoptical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5141313",shop:"optician"},addTags:{brand:"Cohen's Fashion Optical","brand:wikidata":"Q5141313","brand:wikipedia":"en:Cohen's Fashion Optical",healthcare:"optometrist",name:"Cohen's Fashion Optical",shop:"optician",short_name:"Cohen's"},countryCodes:["us"],terms:["cohen's optical"],matchScore:2,suggestion:true},"shop/optician/Eye Wish":{name:"Eye Wish",icon:"maki-optician",imageURL:"https://graph.facebook.com/EyeWishOpticiens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391641",shop:"optician"},addTags:{brand:"Eye Wish","brand:wikidata":"Q62391641",name:"Eye Wish",shop:"optician"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/optician/Fielmann":{name:"Fielmann",icon:"maki-optician",imageURL:"https://graph.facebook.com/Fielmann.DACH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q457822",shop:"optician"},addTags:{brand:"Fielmann","brand:wikidata":"Q457822","brand:wikipedia":"en:Fielmann",name:"Fielmann",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/General Óptica":{name:"General Óptica",icon:"maki-optician",imageURL:"https://graph.facebook.com/generaloptica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391672",shop:"optician"},addTags:{brand:"General Óptica","brand:wikidata":"Q62391672",name:"General Óptica",shop:"optician"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/optician/Grand Optical":{name:"Grand Optical",icon:"maki-optician",imageURL:"https://graph.facebook.com/grandoptical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3113677",shop:"optician"},addTags:{brand:"Grand Optical","brand:wikidata":"Q3113677","brand:wikipedia":"fr:Grand Optical",name:"Grand Optical",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Générale d'Optique":{name:"Générale d'Optique",icon:"maki-optician",imageURL:"https://graph.facebook.com/generaledoptique/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391701",shop:"optician"},addTags:{brand:"Générale d'Optique","brand:wikidata":"Q62391701",name:"Générale d'Optique",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Hakim Optical":{name:"Hakim Optical",icon:"maki-optician",imageURL:"https://graph.facebook.com/HakimOptical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28232761",shop:"optician"},addTags:{brand:"Hakim Optical","brand:wikidata":"Q28232761","brand:wikipedia":"en:Hakim Optical",name:"Hakim Optical",shop:"optician"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/optician/Hans Anders":{name:"Hans Anders",icon:"maki-optician",imageURL:"https://graph.facebook.com/hansanders.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1884976",shop:"optician"},addTags:{brand:"Hans Anders","brand:wikidata":"Q1884976","brand:wikipedia":"nl:Hans Anders",name:"Hans Anders",shop:"optician"},countryCodes:["be","fr","nl"],terms:[],matchScore:2,suggestion:true},"shop/optician/Instrumentarium":{name:"Instrumentarium",icon:"maki-optician",imageURL:"https://graph.facebook.com/instru.fi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11864937",shop:"optician"},addTags:{brand:"Instrumentarium","brand:wikidata":"Q11864937","brand:wikipedia":"fi:Instrumentarium",name:"Instrumentarium",shop:"optician"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/optician/Krys":{name:"Krys",icon:"maki-optician",imageURL:"https://graph.facebook.com/Krys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3119538",shop:"optician"},addTags:{brand:"Krys","brand:wikidata":"Q3119538","brand:wikipedia":"fr:Krys Group",name:"Krys",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/LensCrafters":{name:"LensCrafters",icon:"maki-optician",imageURL:"https://graph.facebook.com/LensCrafters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6523209",shop:"optician"},addTags:{brand:"LensCrafters","brand:wikidata":"Q6523209","brand:wikipedia":"en:LensCrafters",name:"LensCrafters",shop:"optician"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Lenskart":{name:"Lenskart",icon:"maki-optician",imageURL:"https://graph.facebook.com/Lenskartindia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17068753",shop:"optician"},addTags:{brand:"Lenskart","brand:wikidata":"Q17068753",name:"Lenskart",shop:"optician"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/optician/Les Opticiens Mutualistes":{name:"Les Opticiens Mutualistes",icon:"maki-optician",imageURL:"https://graph.facebook.com/lesopticiensmutualistes.officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18414551",shop:"optician"},addTags:{brand:"Les Opticiens Mutualistes","brand:wikidata":"Q18414551","brand:wikipedia":"fr:Les Opticiens Mutualistes",name:"Les Opticiens Mutualistes",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Lissac":{name:"Lissac",icon:"maki-optician",imageURL:"https://graph.facebook.com/lissac.opticien/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63102559",shop:"optician"},addTags:{brand:"Lissac","brand:wikidata":"Q63102559",name:"Lissac",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Multiópticas (Portugal)":{name:"Multiópticas (Portugal)",icon:"maki-optician",imageURL:"https://graph.facebook.com/MultiOpticasPortugal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391722",shop:"optician"},addTags:{brand:"Multiópticas","brand:wikidata":"Q62391722",name:"Multiópticas",shop:"optician"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/optician/Multiópticas (Spain)":{name:"Multiópticas (Spain)",icon:"maki-optician",imageURL:"https://graph.facebook.com/Multiopticas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391719",shop:"optician"},addTags:{brand:"Multiópticas","brand:wikidata":"Q62391719",name:"Multiópticas",shop:"optician"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/optician/Oakley":{name:"Oakley",icon:"maki-optician",imageURL:"https://graph.facebook.com/Oakley/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q161906",shop:"optician"},addTags:{brand:"Oakley","brand:wikidata":"Q161906","brand:wikipedia":"en:Oakley, Inc.",name:"Oakley",shop:"optician"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Oliver Peoples":{name:"Oliver Peoples",icon:"maki-optician",imageURL:"https://graph.facebook.com/oliverpeoples/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7087746",shop:"optician"},addTags:{brand:"Oliver Peoples","brand:wikidata":"Q7087746","brand:wikipedia":"en:Oliver Peoples",name:"Oliver Peoples",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Optic 2000":{name:"Optic 2000",icon:"maki-optician",imageURL:"https://graph.facebook.com/optic2000/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3354445",shop:"optician"},addTags:{brand:"Optic 2000","brand:wikidata":"Q3354445","brand:wikipedia":"fr:Optic 2000",name:"Optic 2000",shop:"optician"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Optical Center":{name:"Optical Center",icon:"maki-optician",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20opticalcenter.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3354448",shop:"optician"},addTags:{brand:"Optical Center","brand:wikidata":"Q3354448","brand:wikipedia":"fr:Optical Center",name:"Optical Center",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Optical Express":{name:"Optical Express",icon:"maki-optician",imageURL:"https://graph.facebook.com/opticalexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7098810",shop:"optician"},addTags:{brand:"Optical Express","brand:wikidata":"Q7098810","brand:wikipedia":"en:Optical Express",name:"Optical Express",shop:"optician"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/optician/Opticalia":{name:"Opticalia",icon:"maki-optician",imageURL:"https://graph.facebook.com/OPTICALIAGRUPO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62082114",shop:"optician"},addTags:{brand:"Opticalia","brand:wikidata":"Q62082114",name:"Opticalia",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Pearle Vision":{name:"Pearle Vision",icon:"maki-optician",imageURL:"https://graph.facebook.com/pearlevision/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2231148",shop:"optician"},addTags:{brand:"Pearle Vision","brand:wikidata":"Q2231148","brand:wikipedia":"en:Pearle Vision",name:"Pearle Vision",shop:"optician",short_name:"Pearle"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Scrivens":{name:"Scrivens",icon:"maki-optician",imageURL:"https://graph.facebook.com/ScrivensOpticians/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q79424133",shop:"optician"},addTags:{brand:"Scrivens","brand:wikidata":"Q79424133",name:"Scrivens",shop:"optician"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/optician/Silmäasema":{name:"Silmäasema",icon:"maki-optician",imageURL:"https://graph.facebook.com/silmaasema/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15994200",shop:"optician"},addTags:{brand:"Silmäasema","brand:wikidata":"Q15994200","brand:wikipedia":"fi:Silmäasema",name:"Silmäasema",shop:"optician"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/optician/Specsavers":{name:"Specsavers",icon:"maki-optician",imageURL:"https://graph.facebook.com/Specsavers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2000610",shop:"optician"},addTags:{brand:"Specsavers","brand:wikidata":"Q2000610","brand:wikipedia":"en:Specsavers",name:"Specsavers",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Sunglass Hut":{name:"Sunglass Hut",icon:"maki-optician",imageURL:"https://graph.facebook.com/SunglassHut/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q136311",shop:"optician"},addTags:{brand:"Sunglass Hut","brand:wikidata":"Q136311","brand:wikipedia":"en:Sunglass Hut",name:"Sunglass Hut",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Synoptik":{name:"Synoptik",icon:"maki-optician",imageURL:"https://graph.facebook.com/synoptiksverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10687541",shop:"optician"},addTags:{brand:"Synoptik","brand:wikidata":"Q10687541","brand:wikipedia":"sv:Synoptik",name:"Synoptik",shop:"optician"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/optician/Synsam":{name:"Synsam",icon:"maki-optician",imageURL:"https://graph.facebook.com/synsam.se/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12004589",shop:"optician"},addTags:{brand:"Synsam","brand:wikidata":"Q12004589","brand:wikipedia":"sv:Synsam",name:"Synsam",shop:"optician"},countryCodes:["fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/optician/Target Optical":{name:"Target Optical",icon:"maki-optician",imageURL:"https://graph.facebook.com/1955770117992590/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19903688",shop:"optician"},addTags:{brand:"Target Optical","brand:wikidata":"Q19903688","brand:wikipedia":"en:Target Optical",name:"Target Optical",shop:"optician"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Vision Express":{name:"Vision Express",icon:"maki-optician",imageURL:"https://graph.facebook.com/visionexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7936150",shop:"optician"},addTags:{brand:"Vision Express","brand:wikidata":"Q7936150","brand:wikipedia":"en:Vision Express",name:"Vision Express",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Visionworks":{name:"Visionworks",icon:"maki-optician",imageURL:"https://graph.facebook.com/Visionworks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5422607",shop:"optician"},addTags:{brand:"Visionworks","brand:wikidata":"Q5422607","brand:wikipedia":"en:Visionworks",name:"Visionworks",shop:"optician"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Warby Parker":{name:"Warby Parker",icon:"maki-optician",imageURL:"https://graph.facebook.com/warbyparker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7968882",shop:"optician"},addTags:{brand:"Warby Parker","brand:wikidata":"Q7968882","brand:wikipedia":"en:Warby Parker",name:"Warby Parker",shop:"optician"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/optician/แว่นท็อปเจริญ":{name:"แว่นท็อปเจริญ",icon:"maki-optician",imageURL:"https://graph.facebook.com/TopCharoenOpticalOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391732",shop:"optician"},addTags:{brand:"แว่นท็อปเจริญ","brand:th":"แว่นท็อปเจริญ","brand:wikidata":"Q62391732",name:"แว่นท็อปเจริญ","name:th":"แว่นท็อปเจริญ",shop:"optician"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"shop/optician/メガネスーパー":{name:"メガネスーパー",icon:"maki-optician",imageURL:"https://graph.facebook.com/meganesuper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11343504",shop:"optician"},addTags:{brand:"メガネスーパー","brand:ja":"メガネスーパー","brand:wikidata":"Q11343504","brand:wikipedia":"ja:メガネスーパー",name:"メガネスーパー","name:en":"Meganesuper","name:ja":"メガネスーパー",shop:"optician"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/optician/寶島眼鏡":{name:"寶島眼鏡",icon:"maki-optician",imageURL:"https://graph.facebook.com/formosafans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391741",shop:"optician"},addTags:{brand:"寶島眼鏡","brand:wikidata":"Q62391741",name:"寶島眼鏡",shop:"optician"},countryCodes:["zh"],terms:[],matchScore:2,suggestion:true},"shop/optician/眼鏡市場":{name:"眼鏡市場",icon:"maki-optician",imageURL:"https://graph.facebook.com/meganeichiba.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11343506",shop:"optician"},addTags:{brand:"眼鏡市場","brand:en":"Megane Ichiba","brand:wikidata":"Q11343506","brand:wikipedia":"ja:メガネトップ",name:"眼鏡市場","name:en":"Megane Ichiba",shop:"optician"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Bass Pro Shops":{name:"Bass Pro Shops",icon:"temaki-compass",imageURL:"https://graph.facebook.com/bassproshops/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4867953",shop:"outdoor"},addTags:{brand:"Bass Pro Shops","brand:wikidata":"Q4867953","brand:wikipedia":"en:Bass Pro Shops",name:"Bass Pro Shops",shop:"outdoor"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Blacks":{name:"Blacks",icon:"temaki-compass",imageURL:"https://graph.facebook.com/blacksonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64822933",shop:"outdoor"},addTags:{brand:"Blacks","brand:wikidata":"Q64822933",name:"Blacks",shop:"outdoor"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Cabela's":{name:"Cabela's",icon:"temaki-compass",imageURL:"https://graph.facebook.com/Cabelas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2793714",shop:"outdoor"},addTags:{brand:"Cabela's","brand:wikidata":"Q2793714","brand:wikipedia":"en:Cabela's",name:"Cabela's",shop:"outdoor"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Cotswold Outdoor":{name:"Cotswold Outdoor",icon:"temaki-compass",imageURL:"https://graph.facebook.com/CotswoldOutdoor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5175488",shop:"outdoor"},addTags:{brand:"Cotswold Outdoor","brand:wikidata":"Q5175488","brand:wikipedia":"en:Cotswold Outdoor",name:"Cotswold Outdoor",shop:"outdoor"},countryCodes:["gb"],terms:["cotswold"],matchScore:2,suggestion:true},"shop/outdoor/Gander Outdoors":{name:"Gander Outdoors",icon:"temaki-compass",imageURL:"https://graph.facebook.com/GanderRV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64357426",shop:"outdoor"},addTags:{brand:"Gander Outdoors","brand:wikidata":"Q64357426","brand:wikipedia":"en:Gander Outdoors",name:"Gander Outdoors",shop:"outdoor"},countryCodes:["us"],terms:["gander mountain"],matchScore:2,suggestion:true},"shop/outdoor/Go Outdoors":{name:"Go Outdoors",icon:"temaki-compass",imageURL:"https://graph.facebook.com/GOoutdoorsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q75293941",shop:"outdoor"},addTags:{brand:"Go Outdoors","brand:wikidata":"Q75293941",name:"Go Outdoors",shop:"outdoor"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Jack Wolfskin":{name:"Jack Wolfskin",icon:"temaki-compass",imageURL:"https://graph.facebook.com/JACKWOLFSKINofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q536133",shop:"outdoor"},addTags:{brand:"Jack Wolfskin","brand:wikidata":"Q536133","brand:wikipedia":"en:Jack Wolfskin",name:"Jack Wolfskin",shop:"outdoor"},countryCodes:["ch","de","fr"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Kathmandu":{name:"Kathmandu",icon:"temaki-compass",imageURL:"https://graph.facebook.com/kathmandu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1736294",shop:"outdoor"},addTags:{brand:"Kathmandu","brand:wikidata":"Q1736294","brand:wikipedia":"en:Kathmandu (company)",name:"Kathmandu",shop:"outdoor"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Millets":{name:"Millets",icon:"temaki-compass",imageURL:"https://graph.facebook.com/milletsonlinefans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64822903",shop:"outdoor"},addTags:{brand:"Millets","brand:wikidata":"Q64822903",name:"Millets",shop:"outdoor"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Mountain Warehouse":{name:"Mountain Warehouse",icon:"temaki-compass",imageURL:"https://graph.facebook.com/MountainWarehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6925414",shop:"outdoor"},addTags:{brand:"Mountain Warehouse","brand:wikidata":"Q6925414","brand:wikipedia":"en:Mountain Warehouse",name:"Mountain Warehouse",shop:"outdoor"},countryCodes:["gb","pl"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/REI":{name:"REI",icon:"temaki-compass",imageURL:"https://graph.facebook.com/9062006483/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3414933",shop:"outdoor"},addTags:{brand:"REI","brand:wikidata":"Q3414933","brand:wikipedia":"en:Recreational Equipment, Inc.",name:"REI",official_name:"Recreational Equipment, Inc.",shop:"outdoor"},countryCodes:["id","us"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Sportsman's Warehouse":{name:"Sportsman's Warehouse",icon:"temaki-compass",imageURL:"https://graph.facebook.com/sportsmanswh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7579979",shop:"outdoor"},addTags:{brand:"Sportsman's Warehouse","brand:wikidata":"Q7579979","brand:wikipedia":"en:Sportsman's Warehouse",name:"Sportsman's Warehouse",shop:"outdoor"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Trespass":{name:"Trespass",icon:"temaki-compass",imageURL:"https://graph.facebook.com/trespass/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17035733",shop:"outdoor"},addTags:{brand:"Trespass","brand:wikidata":"Q17035733","brand:wikipedia":"en:Trespass (clothing)",name:"Trespass",shop:"outdoor"},countryCodes:["fr","gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/outpost/Wildberries":{name:"Wildberries",icon:"maki-shop",imageURL:"https://graph.facebook.com/wildberries.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24933714",shop:"outpost"},addTags:{brand:"Wildberries","brand:wikidata":"Q24933714","brand:wikipedia":"ru:Wildberries",name:"Wildberries",shop:"outpost"},countryCodes:["by","ru"],terms:[],matchScore:2,suggestion:true},"shop/paint/Benjamin Moore":{name:"Benjamin Moore",icon:"fas-paint-roller",imageURL:"https://graph.facebook.com/benjaminmoorepaints/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4889038",shop:"paint"},addTags:{brand:"Benjamin Moore","brand:wikidata":"Q4889038","brand:wikipedia":"en:Benjamin Moore & Co.",name:"Benjamin Moore",shop:"paint"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/paint/Comex":{name:"Comex",icon:"fas-paint-roller",imageURL:"https://graph.facebook.com/Comex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5151654",shop:"paint"},addTags:{brand:"Comex","brand:wikidata":"Q5151654","brand:wikipedia":"en:Comex Group",name:"Comex",shop:"paint"},terms:[],matchScore:2,suggestion:true},"shop/paint/Jotun":{name:"Jotun",icon:"fas-paint-roller",imageURL:"https://graph.facebook.com/JotunGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1778870",shop:"paint"},addTags:{brand:"Jotun","brand:wikidata":"Q1778870","brand:wikipedia":"en:Jotun (company)",name:"Jotun",shop:"paint"},terms:[],matchScore:2,suggestion:true},"shop/paint/National Paints":{name:"National Paints",icon:"fas-paint-roller",imageURL:"https://graph.facebook.com/NationalPaints/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073521",shop:"paint"},addTags:{brand:"National Paints","brand:wikidata":"Q62073521",name:"National Paints",shop:"paint"},countryCodes:["ae","qa"],terms:[],matchScore:2,suggestion:true},"shop/paint/Sherwin-Williams":{name:"Sherwin-Williams",icon:"fas-paint-roller",imageURL:"https://graph.facebook.com/SherwinWilliamsforYourHome/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48881",shop:"paint"},addTags:{brand:"Sherwin-Williams","brand:wikidata":"Q48881","brand:wikipedia":"en:Sherwin-Williams",name:"Sherwin-Williams",shop:"paint"},terms:["sherwin williams paint store","sherwin williams paints"],matchScore:2,suggestion:true},"shop/party/Party City":{name:"Party City",icon:"temaki-balloon",imageURL:"https://graph.facebook.com/PartyCity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7140896",shop:"party"},addTags:{brand:"Party City","brand:wikidata":"Q7140896","brand:wikipedia":"en:Party City",name:"Party City",shop:"party"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/pastry/Cookies by Design":{name:"Cookies by Design",icon:"maki-bakery",imageURL:"https://graph.facebook.com/CookiesbyDesignHQ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5167112",shop:"pastry"},addTags:{brand:"Cookies by Design","brand:wikidata":"Q5167112","brand:wikipedia":"en:Cookies by Design",craft:"bakery",name:"Cookies by Design",shop:"pastry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pastry/Smallcakes":{name:"Smallcakes",icon:"maki-bakery",imageURL:"https://graph.facebook.com/SmallcakesKC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62384749",shop:"pastry"},addTags:{brand:"Smallcakes","brand:wikidata":"Q62384749",name:"Smallcakes",shop:"pastry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pawnbroker/Cash Converters":{name:"Cash Converters",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/CashConvertersUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5048645",shop:"pawnbroker"},addTags:{brand:"Cash Converters","brand:wikidata":"Q5048645","brand:wikipedia":"en:Cash Converters",name:"Cash Converters",shop:"pawnbroker"},terms:[],matchScore:2,suggestion:true},"shop/pawnbroker/Cebuana Lhuillier":{name:"Cebuana Lhuillier",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/cebuanalhuillierpawnshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17064661",shop:"pawnbroker"},addTags:{brand:"Cebuana Lhuillier","brand:wikidata":"Q17064661","brand:wikipedia":"en:Cebuana Lhuillier",name:"Cebuana Lhuillier",shop:"pawnbroker",short_name:"Cebuana"},countryCodes:["ph"],terms:["agencia cebuana","m lhuillier"],matchScore:2,suggestion:true},"shop/pawnbroker/Palawan Pawnshop":{name:"Palawan Pawnshop",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/palawan.pawnshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391488",shop:"pawnbroker"},addTags:{brand:"Palawan Pawnshop","brand:wikidata":"Q62391488",name:"Palawan Pawnshop",shop:"pawnbroker"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/pawnbroker/Villarica Pawnshop":{name:"Villarica Pawnshop",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/155765647803482/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391438",shop:"pawnbroker"},addTags:{brand:"Villarica Pawnshop","brand:wikidata":"Q62391438",name:"Villarica Pawnshop",shop:"pawnbroker"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/pawnbroker/大黒屋":{name:"大黒屋",icon:"temaki-money_hand",geometry:["point","area"],tags:{"brand:wikidata":"Q11442068",shop:"pawnbroker"},addTags:{brand:"大黒屋","brand:en":"Daikokuya","brand:ja":"大黒屋","brand:wikidata":"Q11442068","brand:wikipedia":"ja:大黒屋 (チケット)",name:"大黒屋","name:en":"Daikokuya","name:ja":"大黒屋",shop:"pawnbroker"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/Douglas":{name:"Douglas",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/DouglasDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2052213",shop:"perfumery"},addTags:{brand:"Douglas","brand:wikidata":"Q2052213","brand:wikipedia":"de:Parfümerie Douglas",name:"Douglas",shop:"perfumery"},countryCodes:["at","ch","de","es","it","nl","pl"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/FAnn":{name:"FAnn",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/FAnn.cz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391353",shop:"perfumery"},addTags:{brand:"FAnn","brand:wikidata":"Q62391353",name:"FAnn",shop:"perfumery"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/ICI PARIS XL":{name:"ICI PARIS XL",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/iciparisxlbe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q769749",shop:"perfumery"},addTags:{brand:"ICI PARIS XL","brand:wikidata":"Q769749","brand:wikipedia":"en:ICI Paris XL",name:"ICI PARIS XL",shop:"perfumery"},countryCodes:["be","lu","nl"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/Marionnaud":{name:"Marionnaud",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/Marionnaud.France/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1129073",shop:"perfumery"},addTags:{brand:"Marionnaud","brand:wikidata":"Q1129073","brand:wikipedia":"fr:Marionnaud",name:"Marionnaud",shop:"perfumery"},countryCodes:["at","ch","es","fr","it","sk"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/O Boticário":{name:"O Boticário",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/oboticario/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7073219",shop:"perfumery"},addTags:{brand:"O Boticário","brand:wikidata":"Q7073219","brand:wikipedia":"en:O Boticário",name:"O Boticário",shop:"perfumery"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/Perfumania":{name:"Perfumania",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/perfumania/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72983916",shop:"perfumery"},addTags:{brand:"Perfumania","brand:wikidata":"Q72983916",name:"Perfumania",shop:"perfumery"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/The Perfume Shop":{name:"The Perfume Shop",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/theperfumeshoponline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7756719",shop:"perfumery"},addTags:{brand:"The Perfume Shop","brand:wikidata":"Q7756719","brand:wikipedia":"en:The Perfume Shop",name:"The Perfume Shop",shop:"perfumery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/pet/Das Futterhaus":{name:"Das Futterhaus",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/futterhaus.deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1167914",shop:"pet"},addTags:{brand:"Das Futterhaus","brand:wikidata":"Q1167914","brand:wikipedia":"de:Das Futterhaus",name:"Das Futterhaus",shop:"pet"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/pet/Faunatar":{name:"Faunatar",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/Faunatar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11859415",shop:"pet"},addTags:{brand:"Faunatar","brand:wikidata":"Q11859415","brand:wikipedia":"fi:Faunatar",name:"Faunatar",shop:"pet"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/pet/Fressnapf":{name:"Fressnapf",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/Fressnapf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q875796",shop:"pet"},addTags:{brand:"Fressnapf","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Fressnapf",shop:"pet"},countryCodes:["at","ch","de","hu","lu"],terms:[],matchScore:2,suggestion:true},"shop/pet/Global Pet Foods":{name:"Global Pet Foods",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/globalpetfoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57985699",shop:"pet"},addTags:{brand:"Global Pet Foods","brand:wikidata":"Q57985699",name:"Global Pet Foods",shop:"pet"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/pet/Maxi Zoo":{name:"Maxi Zoo",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/Fressnapf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q875796",shop:"pet"},addTags:{brand:"Maxi Zoo","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Maxi Zoo",shop:"pet"},countryCodes:["be","ch","dk","fr","ie","it","pl"],terms:[],matchScore:2,suggestion:true},"shop/pet/Mud Bay":{name:"Mud Bay",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/mudbay/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30324179",shop:"pet"},addTags:{brand:"Mud Bay","brand:wikidata":"Q30324179","brand:wikipedia":"en:Mud Bay pet store",name:"Mud Bay",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Musti ja Mirri":{name:"Musti ja Mirri",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/mustijamirri/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11883558",shop:"pet"},addTags:{brand:"Musti ja Mirri","brand:wikidata":"Q11883558","brand:wikipedia":"fi:Musti ja Mirri",name:"Musti ja Mirri",shop:"pet"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/pet/Pet Food Express":{name:"Pet Food Express",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/petfoodexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7171541",shop:"pet"},addTags:{brand:"Pet Food Express","brand:wikidata":"Q7171541","brand:wikipedia":"en:Pet Food Express",name:"Pet Food Express",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Pet Supermarket":{name:"Pet Supermarket",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/PetSupermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61968363",shop:"pet"},addTags:{brand:"Pet Supermarket","brand:wikidata":"Q61968363",name:"Pet Supermarket",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Pet Supplies Plus":{name:"Pet Supplies Plus",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/petsuppliesplus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7171563",shop:"pet"},addTags:{brand:"Pet Supplies Plus","brand:wikidata":"Q7171563","brand:wikipedia":"en:Pet Supplies Plus",name:"Pet Supplies Plus",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Pet Valu":{name:"Pet Valu",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/PetValuUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58009635",shop:"pet"},addTags:{brand:"Pet Valu","brand:wikidata":"Q58009635",name:"Pet Valu",shop:"pet"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/pet/PetSmart":{name:"PetSmart",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/PetSmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3307147",shop:"pet"},addTags:{brand:"PetSmart","brand:wikidata":"Q3307147","brand:wikipedia":"en:PetSmart",name:"PetSmart",shop:"pet"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Petco":{name:"Petco",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/Petco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7171798",shop:"pet"},addTags:{brand:"Petco","brand:wikidata":"Q7171798","brand:wikipedia":"en:Petco",name:"Petco",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Petland":{name:"Petland",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/PetlandUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17111474",shop:"pet"},addTags:{brand:"Petland","brand:wikidata":"Q17111474","brand:wikipedia":"en:Petland",name:"Petland",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Petland Discounts":{name:"Petland Discounts",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/petlanddiscount/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7178463",shop:"pet"},addTags:{brand:"Petland Discounts","brand:wikidata":"Q7178463","brand:wikipedia":"en:Petland Discounts",name:"Petland Discounts",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Pets at Home":{name:"Pets at Home",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/petsathomeUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7179258",shop:"pet"},addTags:{brand:"Pets at Home","brand:wikidata":"Q7179258","brand:wikipedia":"en:Pets at Home",name:"Pets at Home",shop:"pet"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/pet/Unleashed":{name:"Unleashed",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/Petco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122874",shop:"pet"},addTags:{alt_name:"Unleashed by Petco",brand:"Unleashed","brand:wikidata":"Q62122874",name:"Unleashed",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Wild Birds Unlimited":{name:"Wild Birds Unlimited",icon:"maki-dog-park",imageURL:"https://pbs.twimg.com/profile_images/466209950788636672/DHjpTthh_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q8000542",shop:"pet"},addTags:{brand:"Wild Birds Unlimited","brand:wikidata":"Q8000542","brand:wikipedia":"en:Wild Birds Unlimited",name:"Wild Birds Unlimited",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Бетховен":{name:"Бетховен",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/zoobethowenclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390798",shop:"pet"},addTags:{brand:"Бетховен","brand:wikidata":"Q62390798",name:"Бетховен",shop:"pet"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/pet/Четыре лапы":{name:"Четыре лапы",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/4laps/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390783",shop:"pet"},addTags:{brand:"Четыре лапы","brand:wikidata":"Q62390783",name:"Четыре лапы",shop:"pet"},countryCodes:["kz","ru"],terms:[],matchScore:2,suggestion:true},"shop/pet/イオンペット":{name:"イオンペット",icon:"maki-dog-park",geometry:["point","area"],tags:{"brand:wikidata":"Q11286064",shop:"pet"},addTags:{brand:"イオンペット","brand:en":"Aeonpet","brand:ja":"イオンペット","brand:wikidata":"Q11286064","brand:wikipedia":"ja:イオンペット",name:"イオンペット","name:en":"Aeonpet","name:ja":"イオンペット",shop:"pet"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/photo/Kamera Express":{name:"Kamera Express",icon:"fas-camera-retro",imageURL:"https://graph.facebook.com/kameraexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q77976400",shop:"photo"},addTags:{brand:"Kamera Express","brand:wikidata":"Q77976400",name:"Kamera Express",shop:"photo"},countryCodes:["be","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/photo/Kodak Express":{name:"Kodak Express",icon:"fas-camera-retro",imageURL:"https://graph.facebook.com/kodakexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6425126",shop:"photo"},addTags:{brand:"Kodak Express","brand:wikidata":"Q6425126","brand:wikipedia":"en:Kodak Express",name:"Kodak Express",shop:"photo"},terms:["kodak"],matchScore:2,suggestion:true},"shop/photo/Max Spielmann":{name:"Max Spielmann",icon:"fas-camera-retro",imageURL:"https://graph.facebook.com/MaxPhotoCentres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q76221051",shop:"photo"},addTags:{brand:"Max Spielmann","brand:wikidata":"Q76221051",name:"Max Spielmann",shop:"photo"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/photo/カメラのキタムラ":{name:"カメラのキタムラ",icon:"fas-camera-retro",imageURL:"https://graph.facebook.com/kitamura.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11294821",shop:"photo"},addTags:{brand:"カメラのキタムラ","brand:en":"Kitamura Camera","brand:ja":"カメラのキタムラ","brand:wikidata":"Q11294821","brand:wikipedia":"ja:カメラのキタムラ",name:"カメラのキタムラ","name:en":"Kitamura Camera","name:ja":"カメラのキタムラ",shop:"photo"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/pottery/Sargadelos":{name:"Sargadelos",icon:"temaki-vase",imageURL:"https://graph.facebook.com/Sargadelos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12390201",shop:"pottery"},addTags:{brand:"Sargadelos","brand:wikidata":"Q12390201","brand:wikipedia":"gl:Grupo Sargadelos",name:"Sargadelos",shop:"pottery"},terms:[],matchScore:2,suggestion:true},"shop/printer_ink/Cartridge World":{name:"Cartridge World",icon:"fas-print",imageURL:"https://graph.facebook.com/CartridgeWorldNewsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5047439",shop:"printer_ink"},addTags:{brand:"Cartridge World","brand:wikidata":"Q5047439","brand:wikipedia":"en:Cartridge World",name:"Cartridge World",shop:"printer_ink"},terms:[],matchScore:2,suggestion:true},"shop/rental/Penske Truck Rental":{name:"Penske Truck Rental",icon:"fas-dolly",imageURL:"https://graph.facebook.com/PenskeTruckRental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81234570",shop:"rental"},addTags:{brand:"Penske Truck Rental","brand:wikidata":"Q81234570",name:"Penske Truck Rental",shop:"rental",short_name:"Penske"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/rental/Ryder":{name:"Ryder",icon:"fas-dolly",imageURL:"https://graph.facebook.com/RyderSystemInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2178198",shop:"rental"},addTags:{brand:"Ryder","brand:wikidata":"Q2178198","brand:wikipedia":"en:Ryder",name:"Ryder",shop:"rental"},countryCodes:["ca","gb","mx","us"],terms:[],matchScore:2,suggestion:true},"shop/rental/U-Haul":{name:"U-Haul",icon:"fas-dolly",imageURL:"https://graph.facebook.com/uhaul/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7862902",shop:"rental"},addTags:{brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul",shop:"rental"},countryCodes:["ca","us"],terms:["uhaul neighborhood dealer"],matchScore:2,suggestion:true},"shop/rental/United Rentals":{name:"United Rentals",icon:"fas-dolly",imageURL:"https://graph.facebook.com/UnitedRentals/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7889101",shop:"rental"},addTags:{brand:"United Rentals","brand:wikidata":"Q7889101","brand:wikipedia":"en:United Rentals",name:"United Rentals",shop:"rental"},countryCodes:["ca","us"],terms:["united rental"],matchScore:2,suggestion:true},"shop/second_hand/Savers":{name:"Savers",icon:"maki-shop",imageURL:"https://graph.facebook.com/savers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7428188",shop:"second_hand"},addTags:{brand:"Savers","brand:wikidata":"Q7428188","brand:wikipedia":"en:Savers",name:"Savers",shop:"second_hand"},countryCodes:["au","ca","us"],terms:[],matchScore:2,suggestion:true},"shop/second_hand/Value Village":{name:"Value Village",icon:"maki-shop",imageURL:"https://graph.facebook.com/savers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7428188",shop:"second_hand"},addTags:{brand:"Value Village","brand:wikidata":"Q7428188","brand:wikipedia":"en:Savers",name:"Value Village",shop:"second_hand"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/ABC Schuh-Center":{name:"ABC Schuh-Center",icon:"maki-shoe",imageURL:"https://graph.facebook.com/ABCSchuhCenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66007228",shop:"shoes"},addTags:{brand:"ABC Schuh-Center","brand:wikidata":"Q66007228",name:"ABC Schuh-Center",shop:"shoes"},countryCodes:["de"],terms:["abc schuhe"],matchScore:2,suggestion:true},"shop/shoes/ABCマート":{name:"ABCマート",icon:"maki-shoe",imageURL:"https://graph.facebook.com/172547912801644/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11188787",shop:"shoes"},addTags:{brand:"ABCマート","brand:ja":"ABCマート","brand:wikidata":"Q11188787","brand:wikipedia":"en:ABC-Mart",name:"ABCマート","name:ja":"ABCマート",shop:"shoes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Aldo":{name:"Aldo",icon:"maki-shoe",imageURL:"https://graph.facebook.com/ALDO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2832297",shop:"shoes"},addTags:{brand:"Aldo","brand:wikidata":"Q2832297","brand:wikipedia":"en:Aldo Group",name:"Aldo",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Allen Edmonds":{name:"Allen Edmonds",icon:"maki-shoe",imageURL:"https://graph.facebook.com/allenedmonds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4731627",shop:"shoes"},addTags:{brand:"Allen Edmonds","brand:wikidata":"Q4731627","brand:wikipedia":"en:Allen Edmonds",name:"Allen Edmonds",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/André":{name:"André",icon:"maki-shoe",imageURL:"https://graph.facebook.com/AndreChaussures/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2847114",shop:"shoes"},addTags:{brand:"André","brand:wikidata":"Q2847114","brand:wikipedia":"fr:André (chaussure)",name:"André",shop:"shoes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Bata":{name:"Bata",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Bata/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q688082",shop:"shoes"},addTags:{brand:"Bata","brand:wikidata":"Q688082","brand:wikipedia":"en:Bata (company)",name:"Bata",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Besson Chaussures":{name:"Besson Chaussures",icon:"maki-shoe",imageURL:"https://graph.facebook.com/besson.chaussures/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2899930",shop:"shoes"},addTags:{brand:"Besson Chaussures","brand:wikidata":"Q2899930","brand:wikipedia":"fr:Besson Chaussures",name:"Besson Chaussures",shop:"shoes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Birkenstock":{name:"Birkenstock",icon:"maki-shoe",imageURL:"https://graph.facebook.com/birkenstock/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q648458",shop:"shoes"},addTags:{brand:"Birkenstock","brand:wikidata":"Q648458","brand:wikipedia":"en:Birkenstock",name:"Birkenstock",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Brantano":{name:"Brantano",icon:"maki-shoe",imageURL:"https://graph.facebook.com/brantano.belgie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4957616",shop:"shoes"},addTags:{brand:"Brantano","brand:wikidata":"Q4957616","brand:wikipedia":"en:Brantano Footwear",name:"Brantano",shop:"shoes"},countryCodes:["be","gb","lu"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Browns":{name:"Browns",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Brownsshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16954153",shop:"shoes"},addTags:{brand:"Browns","brand:wikidata":"Q16954153","brand:wikipedia":"en:Browns Shoes",name:"Browns",shop:"shoes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/shoes/CCC":{name:"CCC",icon:"maki-shoe",imageURL:"https://graph.facebook.com/CCC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11788344",shop:"shoes"},addTags:{brand:"CCC","brand:wikidata":"Q11788344","brand:wikipedia":"de:CCC (Unternehmen)",name:"CCC",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Call It Spring":{name:"Call It Spring",icon:"maki-shoe",imageURL:"https://graph.facebook.com/CallItSpring/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7580363",shop:"shoes"},addTags:{brand:"Call It Spring","brand:wikidata":"Q7580363","brand:wikipedia":"en:Call It Spring",name:"Call It Spring",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Camper":{name:"Camper",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Camper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1030922",shop:"shoes"},addTags:{brand:"Camper","brand:wikidata":"Q1030922","brand:wikipedia":"en:Camper (company)",name:"Camper",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Chaussea":{name:"Chaussea",icon:"maki-shoe",imageURL:"https://graph.facebook.com/chaussea.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62082044",shop:"shoes"},addTags:{brand:"Chaussea","brand:wikidata":"Q62082044",name:"Chaussea",shop:"shoes"},countryCodes:["be","es","fr","lu"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Christian Louboutin":{name:"Christian Louboutin",icon:"maki-shoe",geometry:["point","area"],tags:{"brand:wikidata":"Q23681835",shop:"shoes"},addTags:{brand:"Christian Louboutin","brand:wikidata":"Q23681835",name:"Christian Louboutin",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Clarks":{name:"Clarks",icon:"maki-shoe",imageURL:"https://graph.facebook.com/ClarksShoesUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1095857",shop:"shoes"},addTags:{brand:"Clarks","brand:wikidata":"Q1095857","brand:wikipedia":"en:C. & J. Clark",name:"Clarks",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Cole Haan":{name:"Cole Haan",icon:"maki-shoe",imageURL:"https://graph.facebook.com/colehaan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4356504",shop:"shoes"},addTags:{brand:"Cole Haan","brand:wikidata":"Q4356504","brand:wikipedia":"en:Cole Haan",name:"Cole Haan",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Converse":{name:"Converse",icon:"maki-shoe",imageURL:"https://graph.facebook.com/converse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q319515",shop:"shoes"},addTags:{brand:"Converse","brand:wikidata":"Q319515","brand:wikipedia":"en:Converse (shoe company)",name:"Converse",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Courir":{name:"Courir",icon:"maki-shoe",imageURL:"https://graph.facebook.com/courircom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3001258",shop:"shoes"},addTags:{brand:"Courir","brand:wikidata":"Q3001258","brand:wikipedia":"fr:Courir (chaîne de magasins)",name:"Courir",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Crocs":{name:"Crocs",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Crocs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q926699",shop:"shoes"},addTags:{brand:"Crocs","brand:wikidata":"Q926699","brand:wikipedia":"en:Crocs",name:"Crocs",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/DSW":{name:"DSW",icon:"maki-shoe",imageURL:"https://graph.facebook.com/designerbrands/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5206207",shop:"shoes"},addTags:{brand:"DSW","brand:wikidata":"Q5206207","brand:wikipedia":"en:Designer Brands",name:"DSW",shop:"shoes"},countryCodes:["ca","us"],terms:["designer shoe warehouse","dsw shoes"],matchScore:2,suggestion:true},"shop/shoes/Deichmann":{name:"Deichmann",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Deichmann/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q664543",shop:"shoes"},addTags:{brand:"Deichmann","brand:wikidata":"Q664543","brand:wikipedia":"en:Deichmann SE",name:"Deichmann",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Din sko":{name:"Din sko",icon:"maki-shoe",imageURL:"https://graph.facebook.com/dinsko/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10472869",shop:"shoes"},addTags:{brand:"Din sko","brand:wikidata":"Q10472869","brand:wikipedia":"sv:Din sko",name:"Din sko",shop:"shoes"},countryCodes:["no","se"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Dosenbach":{name:"Dosenbach",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Dosenbach.CH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2677329",shop:"shoes"},addTags:{brand:"Dosenbach","brand:wikidata":"Q2677329","brand:wikipedia":"de:Dosenbach-Ochsner",name:"Dosenbach",shop:"shoes"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Dr. Martens":{name:"Dr. Martens",icon:"maki-shoe",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDr.%20Martens%20Logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1126126",shop:"shoes"},addTags:{brand:"Dr. Martens","brand:wikidata":"Q1126126","brand:wikipedia":"en:Dr. Martens",name:"Dr. Martens",shop:"shoes"},terms:["doc marten","doc martens","doctor marten","doctor martens","martens"],matchScore:2,suggestion:true},"shop/shoes/Dune London":{name:"Dune London",icon:"maki-shoe",imageURL:"https://graph.facebook.com/DuneLondon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65557112",shop:"shoes"},addTags:{brand:"Dune London","brand:wikidata":"Q65557112",name:"Dune London",shop:"shoes",short_name:"Dune"},countryCodes:["ch","de","fr","gb","nl"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Ecco":{name:"Ecco",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Ecco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1280255",shop:"shoes"},addTags:{brand:"Ecco","brand:wikidata":"Q1280255","brand:wikipedia":"en:ECCO",name:"Ecco",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/FLO":{name:"FLO",icon:"maki-shoe",imageURL:"https://graph.facebook.com/FLOShoesGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994802",shop:"shoes"},addTags:{brand:"FLO","brand:wikidata":"Q61994802",name:"FLO",shop:"shoes"},countryCodes:["al","tr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Famous Footwear":{name:"Famous Footwear",icon:"maki-shoe",imageURL:"https://graph.facebook.com/famousfootwear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5433457",shop:"shoes"},addTags:{brand:"Famous Footwear","brand:wikidata":"Q5433457","brand:wikipedia":"en:Famous Footwear",name:"Famous Footwear",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Foot Locker":{name:"Foot Locker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/footlocker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63335",shop:"shoes"},addTags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Foot Locker",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Foot Solutions":{name:"Foot Solutions",icon:"maki-shoe",imageURL:"https://graph.facebook.com/FootSolutions/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q69982369",shop:"shoes"},addTags:{brand:"Foot Solutions","brand:wikidata":"Q69982369","healthcare:speciality":"pedorthist",name:"Foot Solutions",shoes:"orthopaedic",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Footaction":{name:"Footaction",icon:"maki-shoe",imageURL:"https://graph.facebook.com/footaction/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q71022064",shop:"shoes"},addTags:{brand:"Footaction","brand:wikidata":"Q71022064",name:"Footaction",shop:"shoes"},countryCodes:["ca","pr","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/G.H. Bass & Co.":{name:"G.H. Bass & Co.",icon:"maki-shoe",imageURL:"https://graph.facebook.com/G.H.Bass/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16993893",shop:"shoes"},addTags:{brand:"G.H. Bass & Co.","brand:wikidata":"Q16993893","brand:wikipedia":"en:G.H. Bass & Co.",name:"G.H. Bass & Co.",shop:"shoes"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Gabor":{name:"Gabor",icon:"maki-shoe",imageURL:"https://graph.facebook.com/gaborshoesag/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1488760",shop:"shoes"},addTags:{brand:"Gabor","brand:wikidata":"Q1488760","brand:wikipedia":"de:Gabor Shoes",name:"Gabor",shop:"shoes"},countryCodes:["de","it"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Geox":{name:"Geox",icon:"maki-shoe",imageURL:"https://graph.facebook.com/GEOX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q588001",shop:"shoes"},addTags:{brand:"Geox","brand:wikidata":"Q588001","brand:wikipedia":"en:Geox",name:"Geox",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Görtz":{name:"Görtz",icon:"maki-shoe",imageURL:"https://graph.facebook.com/goertz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1559593",shop:"shoes"},addTags:{brand:"Görtz","brand:wikidata":"Q1559593","brand:wikipedia":"de:Ludwig Görtz",name:"Görtz",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Havaianas":{name:"Havaianas",icon:"maki-shoe",imageURL:"https://graph.facebook.com/HavaianasUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3128675",shop:"shoes"},addTags:{brand:"Havaianas","brand:wikidata":"Q3128675","brand:wikipedia":"en:Havaianas",name:"Havaianas",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Humanic":{name:"Humanic",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Humanic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1636668",shop:"shoes"},addTags:{brand:"Humanic","brand:wikidata":"Q1636668","brand:wikipedia":"en:Humanic",name:"Humanic",shop:"shoes"},countryCodes:["at","cz","de","hu","ro","sk"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Hush Puppies":{name:"Hush Puppies",icon:"maki-shoe",imageURL:"https://graph.facebook.com/hushpuppiesglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1828588",shop:"shoes"},addTags:{brand:"Hush Puppies","brand:wikidata":"Q1828588","brand:wikipedia":"en:Hush Puppies",name:"Hush Puppies",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Jimmy Choo":{name:"Jimmy Choo",icon:"maki-shoe",imageURL:"https://graph.facebook.com/JimmyChoo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5213855",shop:"shoes"},addTags:{brand:"Jimmy Choo","brand:wikidata":"Q5213855","brand:wikipedia":"en:Jimmy Choo Ltd",name:"Jimmy Choo",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Johnston & Murphy":{name:"Johnston & Murphy",icon:"maki-shoe",imageURL:"https://graph.facebook.com/johnstonmurphy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6268615",shop:"shoes"},addTags:{brand:"Johnston & Murphy","brand:wikidata":"Q6268615","brand:wikipedia":"en:Johnston & Murphy",name:"Johnston & Murphy",shop:"shoes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Jones Bootmaker":{name:"Jones Bootmaker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/JonesBootmaker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6275139",shop:"shoes"},addTags:{brand:"Jones Bootmaker","brand:wikidata":"Q6275139","brand:wikipedia":"en:Jones Bootmaker",name:"Jones Bootmaker",shop:"shoes",short_name:"Jones"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Journeys":{name:"Journeys",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Journeys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994838",shop:"shoes"},addTags:{brand:"Journeys","brand:wikidata":"Q61994838",name:"Journeys",shop:"shoes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Kari":{name:"Kari",icon:"maki-shoe",imageURL:"https://graph.facebook.com/shopkari/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q47155680",shop:"shoes"},addTags:{brand:"Kari","brand:wikidata":"Q47155680","brand:wikipedia":"ru:Kari (компания)",name:"Kari",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Kids Foot Locker":{name:"Kids Foot Locker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/footlocker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63335",shop:"shoes"},addTags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Kids Foot Locker",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Kurt Geiger":{name:"Kurt Geiger",icon:"maki-shoe",imageURL:"https://graph.facebook.com/kurtgeigerofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17063744",shop:"shoes"},addTags:{brand:"Kurt Geiger","brand:wikidata":"Q17063744",name:"Kurt Geiger",shop:"shoes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/shoes/La Halle aux Chaussures":{name:"La Halle aux Chaussures",icon:"maki-shoe",imageURL:"https://graph.facebook.com/lahalle.com/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390731",shop:"shoes"},addTags:{brand:"La Halle aux Chaussures","brand:wikidata":"Q62390731",name:"La Halle aux Chaussures",shop:"shoes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Lady Foot Locker":{name:"Lady Foot Locker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/footlocker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63335",shop:"shoes"},addTags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Lady Foot Locker",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Little Burgundy":{name:"Little Burgundy",icon:"maki-shoe",imageURL:"https://graph.facebook.com/littleburgundyshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72984664",shop:"shoes"},addTags:{brand:"Little Burgundy","brand:wikidata":"Q72984664",name:"Little Burgundy",shop:"shoes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Manfield (Netherlands)":{name:"Manfield (Netherlands)",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Manfieldshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58328872",shop:"shoes"},addTags:{brand:"Manfield","brand:wikidata":"Q58328872","brand:wikipedia":"nl:Manfield schoenen",name:"Manfield",shop:"shoes"},countryCodes:["be","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Marko":{name:"Marko",icon:"maki-shoe",geometry:["point","area"],tags:{"brand:wikidata":"Q67861181",shop:"shoes"},addTags:{brand:"Marko","brand:wikidata":"Q67861181",name:"Marko","name:ru":"Марко",shop:"shoes"},countryCodes:["by","ru"],terms:["марко"],matchScore:2,suggestion:true},"shop/shoes/Mephisto":{name:"Mephisto",icon:"maki-shoe",imageURL:"https://graph.facebook.com/mephisto.usa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q822975",shop:"shoes"},addTags:{brand:"Mephisto","brand:wikidata":"Q822975","brand:wikipedia":"fr:Mephisto (chaussure)",name:"Mephisto",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Merrell":{name:"Merrell",icon:"maki-shoe",imageURL:"https://graph.facebook.com/merrell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1921997",shop:"shoes"},addTags:{brand:"Merrell","brand:wikidata":"Q1921997","brand:wikipedia":"en:Merrell (company)",name:"Merrell",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Minelli":{name:"Minelli",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Minelli/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994831",shop:"shoes"},addTags:{brand:"Minelli","brand:wikidata":"Q61994831",name:"Minelli",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Moshulu":{name:"Moshulu",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Moshulu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81555702",shop:"shoes"},addTags:{brand:"Moshulu","brand:wikidata":"Q81555702",name:"Moshulu",shop:"shoes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Naturalizer":{name:"Naturalizer",icon:"maki-shoe",imageURL:"https://graph.facebook.com/naturalizer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65012038",shop:"shoes"},addTags:{brand:"Naturalizer","brand:wikidata":"Q65012038",name:"Naturalizer",shop:"shoes"},countryCodes:["ca","cn","gu","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/New Balance":{name:"New Balance",icon:"maki-shoe",imageURL:"https://graph.facebook.com/newbalanceusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q742988",shop:"shoes"},addTags:{brand:"New Balance","brand:wikidata":"Q742988","brand:wikipedia":"en:New Balance",name:"New Balance",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Office":{name:"Office",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Officeshoes1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7079121",shop:"shoes"},addTags:{brand:"Office","brand:wikidata":"Q7079121","brand:wikipedia":"en:Office Holdings",name:"Office",shop:"shoes"},countryCodes:["de","gb","ie","ro"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Payless ShoeSource":{name:"Payless ShoeSource",icon:"maki-shoe",imageURL:"https://graph.facebook.com/payless/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7156755",shop:"shoes"},addTags:{brand:"Payless ShoeSource","brand:wikidata":"Q7156755","brand:wikipedia":"en:Payless ShoeSource",name:"Payless ShoeSource",shop:"shoes"},terms:["payless"],matchScore:2,suggestion:true},"shop/shoes/Quick Schuh":{name:"Quick Schuh",icon:"maki-shoe",imageURL:"https://graph.facebook.com/quick.schuh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2123069",shop:"shoes"},addTags:{brand:"Quick Schuh","brand:wikidata":"Q2123069","brand:wikipedia":"de:Quick Schuh",name:"Quick Schuh",shop:"shoes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/R.M.Williams":{name:"R.M.Williams",icon:"maki-shoe",geometry:["point","area"],tags:{"brand:wikidata":"Q65042966",shop:"shoes"},addTags:{brand:"R.M.Williams","brand:wikidata":"Q65042966","brand:wikipedia":"en:R. M. Williams (company)",name:"R.M.Williams",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Rack Room Shoes":{name:"Rack Room Shoes",icon:"maki-shoe",imageURL:"https://graph.facebook.com/myrackroomshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17109937",shop:"shoes"},addTags:{brand:"Rack Room Shoes","brand:wikidata":"Q17109937","brand:wikipedia":"en:Rack Room Shoes",name:"Rack Room Shoes",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Red Wing":{name:"Red Wing",icon:"maki-shoe",imageURL:"https://graph.facebook.com/RedWingShoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q934096",shop:"shoes"},addTags:{brand:"Red Wing","brand:wikidata":"Q934096","brand:wikipedia":"en:Red Wing Shoes",name:"Red Wing",shop:"shoes"},countryCodes:["de","gb","nl","us"],terms:["red wing shoes"],matchScore:2,suggestion:true},"shop/shoes/Reno":{name:"Reno",icon:"maki-shoe",imageURL:"https://graph.facebook.com/RENO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2144204",shop:"shoes"},addTags:{brand:"Reno","brand:wikidata":"Q2144204","brand:wikipedia":"de:Reno (Schuhhandel)",name:"Reno",shop:"shoes"},countryCodes:["at","ch","de","hu","sk"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Rieker":{name:"Rieker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/riekerofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2152193",shop:"shoes"},addTags:{brand:"Rieker","brand:wikidata":"Q2152193","brand:wikipedia":"en:Rieker Shoes",name:"Rieker",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Rockport":{name:"Rockport",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Rockport/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4048384",shop:"shoes"},addTags:{brand:"Rockport","brand:wikidata":"Q4048384","brand:wikipedia":"en:Rockport (company)",name:"Rockport",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Runners Point":{name:"Runners Point",icon:"maki-shoe",imageURL:"https://graph.facebook.com/RunnersPoint84/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2176418",shop:"shoes"},addTags:{brand:"Runners Point","brand:wikidata":"Q2176418","brand:wikipedia":"de:Runners Point",name:"Runners Point",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Salamander":{name:"Salamander",icon:"maki-shoe",imageURL:"https://graph.facebook.com/SalamanderCzech/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q878354",shop:"shoes"},addTags:{brand:"Salamander","brand:wikidata":"Q878354","brand:wikipedia":"de:Salamander (Schuhe)",name:"Salamander",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Salvatore Ferragamo":{name:"Salvatore Ferragamo",icon:"maki-shoe",imageURL:"https://graph.facebook.com/SalvatoreFerragamo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3946053",shop:"shoes"},addTags:{brand:"Salvatore Ferragamo","brand:wikidata":"Q3946053","brand:wikipedia":"en:Salvatore Ferragamo S.p.A.",name:"Salvatore Ferragamo",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/San Marina":{name:"San Marina",icon:"maki-shoe",imageURL:"https://graph.facebook.com/sanmarina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3471558",shop:"shoes"},addTags:{brand:"San Marina","brand:wikidata":"Q3471558","brand:wikipedia":"fr:San Marina",name:"San Marina",shop:"shoes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Scapino":{name:"Scapino",icon:"maki-shoe",imageURL:"https://graph.facebook.com/ScapinoNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2298792",shop:"shoes"},addTags:{brand:"Scapino","brand:wikidata":"Q2298792","brand:wikipedia":"nl:Scapino (winkelketen)",name:"Scapino",shop:"shoes"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Schuh":{name:"Schuh",icon:"maki-shoe",imageURL:"https://graph.facebook.com/schuhshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7432952",shop:"shoes"},addTags:{brand:"Schuh","brand:wikidata":"Q7432952","brand:wikipedia":"en:Schuh",name:"Schuh",shop:"shoes"},countryCodes:["de","gb","gg","ie"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Schuh-Mann":{name:"Schuh-Mann",icon:"maki-shoe",imageURL:"https://graph.facebook.com/schuhmann.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66133314",shop:"shoes"},addTags:{brand:"Schuh-Mann","brand:wikidata":"Q66133314",name:"Schuh-Mann",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Schuhkay":{name:"Schuhkay",icon:"maki-shoe",imageURL:"https://graph.facebook.com/134116200015210/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66009415",shop:"shoes"},addTags:{brand:"Schuhkay","brand:wikidata":"Q66009415",name:"Schuhkay",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Shoe Carnival":{name:"Shoe Carnival",icon:"maki-shoe",imageURL:"https://graph.facebook.com/ShoeCarnival/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7500007",shop:"shoes"},addTags:{brand:"Shoe Carnival","brand:wikidata":"Q7500007","brand:wikipedia":"en:Shoe Carnival",name:"Shoe Carnival",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Shoe Zone":{name:"Shoe Zone",icon:"maki-shoe",imageURL:"https://graph.facebook.com/shoezone/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7500016",shop:"shoes"},addTags:{brand:"Shoe Zone","brand:wikidata":"Q7500016","brand:wikipedia":"en:Shoe Zone",name:"Shoe Zone",shop:"shoes"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Siemes Schuhcenter":{name:"Siemes Schuhcenter",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Schuhcenter.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2800720",shop:"shoes"},addTags:{brand:"Siemes Schuhcenter","brand:wikidata":"Q2800720","brand:wikipedia":"de:Siemes (Unternehmen)",name:"Siemes Schuhcenter",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Skechers":{name:"Skechers",icon:"maki-shoe",imageURL:"https://graph.facebook.com/SKECHERS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2945643",shop:"shoes"},addTags:{brand:"Skechers","brand:wikidata":"Q2945643","brand:wikipedia":"en:Skechers",name:"Skechers",shop:"shoes"},terms:["sketchers"],matchScore:2,suggestion:true},"shop/shoes/Snipes":{name:"Snipes",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Snipes.com/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42306166",shop:"shoes"},addTags:{brand:"Snipes","brand:wikidata":"Q42306166","brand:wikipedia":"de:Snipes (Unternehmen)",name:"Snipes",shop:"shoes"},countryCodes:["at","ch","de","es","fr","it","nl","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Soft Moc":{name:"Soft Moc",icon:"maki-shoe",imageURL:"https://graph.facebook.com/softmocshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65012391",shop:"shoes"},addTags:{brand:"Soft Moc","brand:wikidata":"Q65012391",name:"Soft Moc",shop:"shoes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Sperry":{name:"Sperry",icon:"maki-shoe",imageURL:"https://graph.facebook.com/sperry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7576421",shop:"shoes"},addTags:{brand:"Sperry","brand:wikidata":"Q7576421","brand:wikipedia":"en:Sperry Top-Sider",name:"Sperry",shop:"shoes"},countryCodes:["us"],terms:["sperry top sider"],matchScore:2,suggestion:true},"shop/shoes/Steve Madden":{name:"Steve Madden",icon:"maki-shoe",imageURL:"https://graph.facebook.com/SteveMaddenShoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25352034",shop:"shoes"},addTags:{brand:"Steve Madden","brand:wikidata":"Q25352034","brand:wikipedia":"en:Steve Madden (company)",name:"Steve Madden",shop:"shoes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Stride Rite":{name:"Stride Rite",icon:"maki-shoe",imageURL:"https://graph.facebook.com/striderite/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2356171",shop:"shoes"},addTags:{brand:"Stride Rite","brand:wikidata":"Q2356171","brand:wikipedia":"en:Stride Rite Corporation",name:"Stride Rite",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Stuart Weitzman":{name:"Stuart Weitzman",icon:"maki-shoe",imageURL:"https://graph.facebook.com/StuartWeitzman/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q75244763",shop:"shoes"},addTags:{brand:"Stuart Weitzman","brand:wikidata":"Q75244763",name:"Stuart Weitzman",shop:"shoes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Tamaris":{name:"Tamaris",icon:"maki-shoe",imageURL:"https://graph.facebook.com/tamarisinternational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994827",shop:"shoes"},addTags:{brand:"Tamaris","brand:wikidata":"Q61994827",name:"Tamaris",shop:"shoes"},countryCodes:["at","be","de","fr","nl"],terms:[],matchScore:2,suggestion:true},"shop/shoes/The Shoe Company":{name:"The Shoe Company",icon:"maki-shoe",imageURL:"https://graph.facebook.com/theshoeco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7763892",shop:"shoes"},addTags:{brand:"The Shoe Company","brand:wikidata":"Q7763892","brand:wikipedia":"en:The Shoe Company",name:"The Shoe Company",shop:"shoes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/shoes/UGG":{name:"UGG",icon:"maki-shoe",imageURL:"https://graph.facebook.com/UGG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1138480",shop:"shoes"},addTags:{brand:"UGG","brand:wikidata":"Q1138480","brand:wikipedia":"en:UGG (brand)",name:"UGG",shop:"shoes"},countryCodes:["au","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Vans":{name:"Vans",icon:"maki-shoe",imageURL:"https://graph.facebook.com/VANS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1135366",shop:"shoes"},addTags:{brand:"Vans","brand:wikidata":"Q1135366","brand:wikipedia":"en:Vans",name:"Vans",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Walking on a Cloud":{name:"Walking on a Cloud",icon:"maki-shoe",imageURL:"https://graph.facebook.com/walkingonacloud/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65012662",shop:"shoes"},addTags:{brand:"Walking on a Cloud","brand:wikidata":"Q65012662",name:"Walking on a Cloud",shop:"shoes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/shoes/tReds":{name:"tReds",icon:"maki-shoe",imageURL:"https://graph.facebook.com/tRedsOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81647338",shop:"shoes"},addTags:{brand:"tReds","brand:wikidata":"Q81647338",name:"tReds",shop:"shoes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/shoes/vanHaren":{name:"vanHaren",icon:"maki-shoe",imageURL:"https://graph.facebook.com/vanharenschoenen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390668",shop:"shoes"},addTags:{brand:"vanHaren","brand:wikidata":"Q62390668",name:"vanHaren",shop:"shoes"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Éram":{name:"Éram",icon:"maki-shoe",imageURL:"https://graph.facebook.com/eram.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16684192",shop:"shoes"},addTags:{brand:"Éram","brand:wikidata":"Q16684192","brand:wikipedia":"fr:Éram",name:"Éram",shop:"shoes"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/ЦентрОбувь":{name:"ЦентрОбувь",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Centrobuv/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4504072",shop:"shoes"},addTags:{brand:"ЦентрОбувь","brand:wikidata":"Q4504072","brand:wikipedia":"ru:ЦентрОбувь",name:"ЦентрОбувь",shop:"shoes"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Юничел":{name:"Юничел",icon:"maki-shoe",imageURL:"https://graph.facebook.com/unichel.shoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390569",shop:"shoes"},addTags:{brand:"Юничел","brand:wikidata":"Q62390569",name:"Юничел",shop:"shoes"},countryCodes:["kz","ru"],terms:[],matchScore:2,suggestion:true},"shop/shoes/つるや":{name:"つるや",icon:"maki-shoe",imageURL:"https://graph.facebook.com/tsuruya.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11272578",shop:"shoes"},addTags:{brand:"つるや","brand:en":"Tsuruya","brand:ja":"つるや","brand:wikidata":"Q11272578","brand:wikipedia":"ja:つるや (靴屋)",name:"つるや","name:en":"Tsuruya","name:ja":"つるや",shop:"shoes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/shoes/東京靴流通センター":{name:"東京靴流通センター",icon:"maki-shoe",imageURL:"https://graph.facebook.com/chiyodafanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11318515",shop:"shoes"},addTags:{brand:"東京靴流通センター","brand:en":"Tokyo Shoes Retailing Center","brand:ja":"東京靴流通センター","brand:wikidata":"Q11318515","brand:wikipedia":"ja:チヨダ",name:"東京靴流通センター","name:en":"Tokyo Shoes Retailing Center","name:ja":"東京靴流通センター",shop:"shoes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/sports/Academy Sports + Outdoors":{name:"Academy Sports + Outdoors",icon:"fas-futbol",imageURL:"https://graph.facebook.com/Academy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4671380",shop:"sports"},addTags:{brand:"Academy Sports + Outdoors","brand:wikidata":"Q4671380","brand:wikipedia":"en:Academy Sports + Outdoors",name:"Academy Sports + Outdoors",shop:"sports"},countryCodes:["us"],terms:["academy","academy sports and outdoors"],matchScore:2,suggestion:true},"shop/sports/Adidas":{name:"Adidas",icon:"fas-futbol",imageURL:"https://graph.facebook.com/adidasUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3895",shop:"sports"},addTags:{brand:"Adidas","brand:wikidata":"Q3895","brand:wikipedia":"en:Adidas",name:"Adidas",shop:"sports"},terms:[],matchScore:2,suggestion:true},"shop/sports/Aktiesport":{name:"Aktiesport",icon:"fas-futbol",imageURL:"https://graph.facebook.com/aktiesport/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57546889",shop:"sports"},addTags:{brand:"Aktiesport","brand:wikidata":"Q57546889",name:"Aktiesport",shop:"sports"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/sports/American Golf":{name:"American Golf",icon:"fas-futbol",imageURL:"https://graph.facebook.com/americangolf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62657494",shop:"sports"},addTags:{brand:"American Golf","brand:wikidata":"Q62657494",name:"American Golf",shop:"sports",sport:"golf"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/sports/Big 5 Sporting Goods":{name:"Big 5 Sporting Goods",icon:"fas-futbol",imageURL:"https://graph.facebook.com/Big5SportingGoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4904902",shop:"sports"},addTags:{brand:"Big 5 Sporting Goods","brand:wikidata":"Q4904902","brand:wikipedia":"en:Big 5 Sporting Goods",name:"Big 5 Sporting Goods",shop:"sports"},countryCodes:["us"],terms:["big 5"],matchScore:2,suggestion:true},"shop/sports/Centauro":{name:"Centauro",icon:"fas-futbol",imageURL:"https://graph.facebook.com/centauroesporte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28679561",shop:"sports"},addTags:{brand:"Centauro","brand:wikidata":"Q28679561","brand:wikipedia":"pt:Lojas Centauro",name:"Centauro",shop:"sports"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/sports/Champs Sports":{name:"Champs Sports",icon:"fas-futbol",geometry:["point","area"],tags:{"brand:wikidata":"Q2955924",shop:"sports"},addTags:{brand:"Champs Sports","brand:wikidata":"Q2955924","brand:wikipedia":"en:Champs Sports",name:"Champs Sports",shop:"sports"},countryCodes:["ca","pr","us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Decathlon":{name:"Decathlon",icon:"fas-futbol",imageURL:"https://graph.facebook.com/DecathlonSG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q509349",shop:"sports"},addTags:{brand:"Decathlon","brand:wikidata":"Q509349","brand:wikipedia":"en:Decathlon Group",name:"Decathlon",shop:"sports"},terms:[],matchScore:2,suggestion:true},"shop/sports/Dick's Sporting Goods":{name:"Dick's Sporting Goods",icon:"fas-futbol",imageURL:"https://graph.facebook.com/dickssportinggoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5272601",shop:"sports"},addTags:{brand:"Dick's Sporting Goods","brand:wikidata":"Q5272601","brand:wikipedia":"en:Dick's Sporting Goods",name:"Dick's Sporting Goods",shop:"sports"},countryCodes:["us"],terms:["dicks"],matchScore:2,suggestion:true},"shop/sports/Finish Line":{name:"Finish Line",icon:"fas-futbol",imageURL:"https://graph.facebook.com/finishline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5450341",shop:"sports"},addTags:{brand:"Finish Line","brand:wikidata":"Q5450341","brand:wikipedia":"en:Finish Line, Inc.",name:"Finish Line",shop:"sports"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Golf Galaxy":{name:"Golf Galaxy",icon:"fas-futbol",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGolf%20Galaxy%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q69364358",shop:"sports"},addTags:{brand:"Golf Galaxy","brand:wikidata":"Q69364358",name:"Golf Galaxy",shop:"sports",sport:"golf"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Hervis":{name:"Hervis",icon:"fas-futbol",imageURL:"https://graph.facebook.com/hervissports.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1614816",shop:"sports"},addTags:{brand:"Hervis","brand:wikidata":"Q1614816","brand:wikipedia":"de:Hervis",name:"Hervis",shop:"sports"},countryCodes:["at","cz","de","hr","hu","ro","si"],terms:["hervis sport","hervis sports"],matchScore:2,suggestion:true},"shop/sports/Hibbett Sports":{name:"Hibbett Sports",icon:"fas-futbol",imageURL:"https://graph.facebook.com/HibbettSports/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5750671",shop:"sports"},addTags:{brand:"Hibbett Sports","brand:wikidata":"Q5750671","brand:wikipedia":"en:Hibbett Sports",name:"Hibbett Sports",shop:"sports"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Intersport":{name:"Intersport",icon:"fas-futbol",geometry:["point","area"],tags:{"brand:wikidata":"Q666888",shop:"sports"},addTags:{brand:"Intersport","brand:wikidata":"Q666888","brand:wikipedia":"en:Intersport",name:"Intersport",shop:"sports"},terms:[],matchScore:2,suggestion:true},"shop/sports/JD Sports":{name:"JD Sports",icon:"fas-futbol",imageURL:"https://graph.facebook.com/2140630076185020/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6108019",shop:"sports"},addTags:{brand:"JD Sports","brand:wikidata":"Q6108019","brand:wikipedia":"en:JD Sports",name:"JD Sports",shop:"sports"},countryCodes:["de","es","fr","gb","ie","nl"],terms:["jd"],matchScore:2,suggestion:true},"shop/sports/Marathon Sports":{name:"Marathon Sports",icon:"fas-futbol",imageURL:"https://graph.facebook.com/marathonsports/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3027516",shop:"sports"},addTags:{brand:"Marathon Sports","brand:wikidata":"Q3027516","brand:wikipedia":"es:Marathon Sports",name:"Marathon Sports",shop:"sports"},countryCodes:["bo","ec","pe"],terms:[],matchScore:2,suggestion:true},"shop/sports/Martes Sport":{name:"Martes Sport",icon:"fas-futbol",imageURL:"https://graph.facebook.com/sklepmartes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073490",shop:"sports"},addTags:{brand:"Martes Sport","brand:wikidata":"Q62073490",name:"Martes Sport",shop:"sports"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/sports/Modell's Sporting Goods":{name:"Modell's Sporting Goods",icon:"fas-futbol",imageURL:"https://graph.facebook.com/modells/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3317844",shop:"sports"},addTags:{brand:"Modell's Sporting Goods","brand:wikidata":"Q3317844","brand:wikipedia":"en:Modell's Sporting Goods",name:"Modell's Sporting Goods",shop:"sports"},countryCodes:["us"],terms:["modells"],matchScore:2,suggestion:true},"shop/sports/Peloton":{name:"Peloton",icon:"fas-futbol",imageURL:"https://graph.facebook.com/onepeloton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56276186",shop:"sports"},addTags:{brand:"Peloton","brand:wikidata":"Q56276186","brand:wikipedia":"en:Peloton (company)",name:"Peloton",shop:"sports"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Planeta Sport":{name:"Planeta Sport",icon:"fas-futbol",imageURL:"https://graph.facebook.com/planetasportrs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72193528",shop:"sports"},addTags:{brand:"Planeta Sport","brand:en":"Planeta Sport","brand:rs":"Planeta Sport","brand:wikidata":"Q72193528",name:"Planeta Sport",shop:"sports"},countryCodes:["rs"],terms:["planeta"],matchScore:2,suggestion:true},"shop/sports/Play It Again Sports":{name:"Play It Again Sports",icon:"fas-futbol",imageURL:"https://graph.facebook.com/playitagainsports/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7203029",shop:"sports"},addTags:{brand:"Play It Again Sports","brand:wikidata":"Q7203029","brand:wikipedia":"en:Play It Again Sports",name:"Play It Again Sports",shop:"sports"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Rebel":{name:"Rebel",icon:"fas-futbol",imageURL:"https://graph.facebook.com/RebelSport/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18636397",shop:"sports"},addTags:{brand:"Rebel","brand:wikidata":"Q18636397","brand:wikipedia":"en:Rebel (company)",name:"Rebel",shop:"sports"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sport 2000":{name:"Sport 2000",icon:"fas-futbol",imageURL:"https://graph.facebook.com/SPORT2000France/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q262394",shop:"sports"},addTags:{brand:"Sport 2000","brand:wikidata":"Q262394","brand:wikipedia":"de:Sport 2000",name:"Sport 2000",shop:"sports"},countryCodes:["at","de","fr","nl"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sport Chek":{name:"Sport Chek",icon:"fas-futbol",imageURL:"https://graph.facebook.com/SportChekOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3494037",shop:"sports"},addTags:{brand:"Sport Chek","brand:wikidata":"Q3494037","brand:wikipedia":"en:Sport Chek",name:"Sport Chek",shop:"sports"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sport Zone":{name:"Sport Zone",icon:"fas-futbol",geometry:["point","area"],tags:{"brand:wikidata":"Q18485899",shop:"sports"},addTags:{brand:"Sport Zone","brand:wikidata":"Q18485899","brand:wikipedia":"pt:Sport Zone",name:"Sport Zone",shop:"sports"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sporting Life":{name:"Sporting Life",icon:"fas-futbol",imageURL:"https://graph.facebook.com/SportingLifeCan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7579583",shop:"sports"},addTags:{brand:"Sporting Life","brand:wikidata":"Q7579583","brand:wikipedia":"en:Sporting Life (retailer)",name:"Sporting Life",shop:"sports"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sportisimo":{name:"Sportisimo",icon:"fas-futbol",imageURL:"https://graph.facebook.com/1463426373966592/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q54974273",shop:"sports"},addTags:{brand:"Sportisimo","brand:wikidata":"Q54974273",name:"Sportisimo",shop:"sports"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sports Authority":{name:"Sports Authority",icon:"fas-futbol",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSports%20Authority%20logo2011.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7579688",shop:"sports"},addTags:{brand:"Sports Authority","brand:wikidata":"Q7579688","brand:wikipedia":"en:Sports Authority",name:"Sports Authority",shop:"sports"},terms:[],matchScore:2,suggestion:true},"shop/sports/Sports Direct":{name:"Sports Direct",icon:"fas-futbol",imageURL:"https://graph.facebook.com/SportsDirect/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7579661",shop:"sports"},addTags:{brand:"Sports Direct","brand:wikidata":"Q7579661","brand:wikipedia":"en:SportsDirect.com",name:"Sports Direct",shop:"sports"},terms:["sportsdirect.com"],matchScore:2,suggestion:true},"shop/sports/Sprinter":{name:"Sprinter",icon:"fas-futbol",imageURL:"https://pbs.twimg.com/profile_images/718009864681885696/h9_BQE32_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6133465",shop:"sports"},addTags:{brand:"Sprinter","brand:wikidata":"Q6133465","brand:wikipedia":"es:Sprinter (tienda)",name:"Sprinter",shop:"sports"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/sports/Stadium":{name:"Stadium",icon:"fas-futbol",imageURL:"https://graph.facebook.com/stadium.finland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4993863",shop:"sports"},addTags:{brand:"Stadium","brand:wikidata":"Q4993863","brand:wikipedia":"sv:Stadium (detaljhandelskedja)",name:"Stadium",shop:"sports"},countryCodes:["de","dk","fi","se"],terms:[],matchScore:2,suggestion:true},"shop/sports/XXL":{name:"XXL",icon:"fas-futbol",imageURL:"https://graph.facebook.com/xxlnorge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12010840",shop:"sports"},addTags:{brand:"XXL","brand:wikidata":"Q12010840","brand:wikipedia":"no:XXL",name:"XXL",shop:"sports"},countryCodes:["fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/sports/Декатлон":{name:"Декатлон",icon:"fas-futbol",imageURL:"https://graph.facebook.com/DecathlonSG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q509349",shop:"sports"},addTags:{brand:"Декатлон","brand:en":"Decathlon","brand:ru":"Декатлон","brand:wikidata":"Q509349","brand:wikipedia":"ru:Decathlon",name:"Декатлон","name:en":"Decathlon","name:ru":"Декатлон",shop:"sports"},countryCodes:["bg","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/sports/Спортмастер":{name:"Спортмастер",icon:"fas-futbol",imageURL:"https://graph.facebook.com/sportmaster.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4438176",shop:"sports"},addTags:{brand:"Спортмастер","brand:en":"Sportmaster","brand:ru":"Спортмастер","brand:wikidata":"Q4438176","brand:wikipedia":"ru:Спортмастер",name:"Спортмастер","name:en":"Sportmaster","name:ru":"Спортмастер",shop:"sports"},countryCodes:["by","kz","ru","ua"],terms:["спортмастер гипер"],matchScore:2,suggestion:true},"shop/stationery/Bureau Vallée":{name:"Bureau Vallée",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/BureauVallee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18385014",shop:"stationery"},addTags:{brand:"Bureau Vallée","brand:wikidata":"Q18385014","brand:wikipedia":"fr:Bureau Vallée",name:"Bureau Vallée",shop:"stationery"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/stationery/McPaper":{name:"McPaper",icon:"fas-paperclip",geometry:["point","area"],tags:{"brand:wikidata":"Q1915329",shop:"stationery"},addTags:{brand:"McPaper","brand:wikidata":"Q1915329","brand:wikipedia":"de:McPaper",name:"McPaper",shop:"stationery"},countryCodes:["ch","de"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Office Depot":{name:"Office Depot",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/OfficeDepot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1337797",shop:"stationery"},addTags:{brand:"Office Depot","brand:wikidata":"Q1337797","brand:wikipedia":"en:Office Depot",name:"Office Depot",shop:"stationery"},terms:[],matchScore:2,suggestion:true},"shop/stationery/OfficeMax":{name:"OfficeMax",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/OfficeDepot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7079111",shop:"stationery"},addTags:{brand:"OfficeMax","brand:wikidata":"Q7079111","brand:wikipedia":"en:OfficeMax",name:"OfficeMax",shop:"stationery"},countryCodes:["mx","nz","us"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Officeworks":{name:"Officeworks",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/officeworks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7079486",shop:"stationery"},addTags:{brand:"Officeworks","brand:wikidata":"Q7079486","brand:wikipedia":"en:Officeworks",name:"Officeworks",shop:"stationery"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Pagro":{name:"Pagro",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/pagro.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57550022",shop:"stationery"},addTags:{brand:"Pagro","brand:wikidata":"Q57550022",name:"Pagro",shop:"stationery"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Paper Source":{name:"Paper Source",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/PaperSource/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25000269",shop:"stationery"},addTags:{brand:"Paper Source","brand:wikidata":"Q25000269","brand:wikipedia":"en:Paper Source",name:"Paper Source",shop:"stationery"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Paperchase":{name:"Paperchase",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/paperchase/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7132739",shop:"stationery"},addTags:{brand:"Paperchase","brand:wikidata":"Q7132739","brand:wikipedia":"en:Paperchase",name:"Paperchase",shop:"stationery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Ryman":{name:"Ryman",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/ryman/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7385188",shop:"stationery"},addTags:{brand:"Ryman","brand:wikidata":"Q7385188","brand:wikipedia":"en:Ryman",name:"Ryman",shop:"stationery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Smiggle":{name:"Smiggle",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/smiggle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7544536",shop:"stationery"},addTags:{brand:"Smiggle","brand:wikidata":"Q7544536",name:"Smiggle",shop:"stationery"},countryCodes:["at","gb","hk","ie","my","nz","sg"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Staples":{name:"Staples",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/staples/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q785943",shop:"stationery"},addTags:{brand:"Staples","brand:wikidata":"Q785943","brand:wikipedia":"en:Staples Inc.",name:"Staples",shop:"stationery"},terms:[],matchScore:2,suggestion:true},"shop/stationery/Комус":{name:"Комус",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/komusclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4230314",shop:"stationery"},addTags:{brand:"Комус","brand:en":"Komus","brand:wikidata":"Q4230314","brand:wikipedia":"en:Komus (company)",name:"Комус","name:en":"Komus",shop:"stationery"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/storage_rental/Extra Space Storage":{name:"Extra Space Storage",icon:"temaki-storage_rental",imageURL:"https://graph.facebook.com/extraspace/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5422162",shop:"storage_rental"},addTags:{brand:"Extra Space Storage","brand:wikidata":"Q5422162","brand:wikipedia":"en:Extra Space Storage",name:"Extra Space Storage",shop:"storage_rental"},countryCodes:["us"],terms:["extra space"],matchScore:2,suggestion:true},"shop/storage_rental/Public Storage":{name:"Public Storage",icon:"temaki-storage_rental",imageURL:"https://graph.facebook.com/PublicStorage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1156045",shop:"storage_rental"},addTags:{brand:"Public Storage","brand:wikidata":"Q1156045","brand:wikipedia":"en:Public Storage",name:"Public Storage",shop:"storage_rental"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/storage_rental/U-Haul":{name:"U-Haul",icon:"temaki-storage_rental",imageURL:"https://graph.facebook.com/uhaul/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7862902",shop:"storage_rental"},addTags:{brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul",shop:"storage_rental"},countryCodes:["ca","us"],terms:["uhaul neighborhood dealer"],matchScore:2,suggestion:true},"shop/supermarket/8 à Huit":{name:"8 à Huit",icon:"maki-grocery",imageURL:"https://graph.facebook.com/fashion8a8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2818601",shop:"supermarket"},addTags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/99 Ranch Market":{name:"99 Ranch Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/99RanchMarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4646307",shop:"supermarket"},addTags:{brand:"99 Ranch Market","brand:wikidata":"Q4646307","brand:wikipedia":"en:99 Ranch Market",cuisine:"asian",name:"99 Ranch Market","name:en":"99 Ranch Market","name:zh-Hans":"大华超级市场","name:zh-Hant":"大華超級市場",shop:"supermarket"},countryCodes:["us"],terms:["99 ranch","ranch 99"],matchScore:2,suggestion:true},"shop/supermarket/A&O":{name:"A&O",icon:"maki-grocery",imageURL:"https://graph.facebook.com/www.aeo.it/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3600279",shop:"supermarket"},addTags:{brand:"A&O","brand:wikidata":"Q3600279","brand:wikipedia":"it:A&O",name:"A&O",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/A101":{name:"A101",icon:"maki-grocery",imageURL:"https://graph.facebook.com/a101iletisim/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6034496",shop:"supermarket"},addTags:{brand:"A101","brand:wikidata":"Q6034496","brand:wikipedia":"tr:A101",name:"A101",shop:"supermarket"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/AD Delhaize":{name:"AD Delhaize",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Delhaize/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1184173",shop:"supermarket"},addTags:{brand:"AD Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"AD Delhaize",shop:"supermarket"},countryCodes:["be","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ADEG":{name:"ADEG",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mein.adeg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q290211",shop:"supermarket"},addTags:{brand:"ADEG","brand:wikidata":"Q290211","brand:wikipedia":"de:ADEG Österreich",name:"ADEG",shop:"supermarket"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Acme":{name:"Acme",icon:"maki-grocery",imageURL:"https://graph.facebook.com/acmemarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q341975",shop:"supermarket"},addTags:{brand:"Acme","brand:wikidata":"Q341975","brand:wikipedia":"en:Acme Markets",name:"Acme",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ahorramás":{name:"Ahorramás",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Ahorramas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58221883",shop:"supermarket"},addTags:{brand:"Ahorramás","brand:wikidata":"Q58221883",name:"Ahorramás",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Albert":{name:"Albert",icon:"maki-grocery",imageURL:"https://graph.facebook.com/albertceskarepublika/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9144241",shop:"supermarket"},addTags:{brand:"Albert","brand:wikidata":"Q9144241","brand:wikipedia":"cs:Albert (obchodní řetězec)",name:"Albert",shop:"supermarket"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Albert Heijn":{name:"Albert Heijn",icon:"maki-grocery",imageURL:"https://graph.facebook.com/albertheijn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1653985",shop:"supermarket"},addTags:{brand:"Albert Heijn","brand:wikidata":"Q1653985","brand:wikipedia":"nl:Albert Heijn (supermarkt)",name:"Albert Heijn",shop:"supermarket"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Albert Heijn XL":{name:"Albert Heijn XL",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q78163765",shop:"supermarket"},addTags:{brand:"Albert Heijn XL","brand:wikidata":"Q78163765","brand:wikipedia":"nl:Albert Heijn (supermarkt)",name:"Albert Heijn XL",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Albertsons":{name:"Albertsons",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Albertsons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4712282",shop:"supermarket"},addTags:{brand:"Albertsons","brand:wikidata":"Q4712282","brand:wikipedia":"en:Albertsons",name:"Albertsons",shop:"supermarket"},countryCodes:["us"],terms:["albertsons supermarket"],matchScore:2,suggestion:true},"shop/supermarket/Alcampo":{name:"Alcampo",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1201778971089739776/TL0LpeEQ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2832081",shop:"supermarket"},addTags:{brand:"Alcampo","brand:wikidata":"Q2832081","brand:wikipedia":"es:Alcampo",name:"Alcampo",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Aldi":{name:"Aldi",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ALDI.USA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q125054",shop:"supermarket"},addTags:{brand:"Aldi","brand:wikidata":"Q125054","brand:wikipedia":"en:Aldi",name:"Aldi",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Aldi Nord":{name:"Aldi Nord",icon:"maki-grocery",imageURL:"https://graph.facebook.com/154533341244676/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41171373",shop:"supermarket"},addTags:{brand:"Aldi Nord","brand:wikidata":"Q41171373","brand:wikipedia":"en:Aldi",name:"Aldi Nord",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Aldi Süd":{name:"Aldi Süd",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ALDI.SUED/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41171672",shop:"supermarket"},addTags:{brand:"Aldi Süd","brand:wikidata":"Q41171672","brand:wikipedia":"en:Aldi",name:"Aldi Süd",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Alfamart":{name:"Alfamart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/alfamartku/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23745600",shop:"supermarket"},addTags:{brand:"Alfamart","brand:wikidata":"Q23745600","brand:wikipedia":"en:Alfamart",name:"Alfamart",shop:"supermarket"},countryCodes:["id","ph"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Alimerka":{name:"Alimerka",icon:"maki-grocery",imageURL:"https://graph.facebook.com/alimerka.es/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16482738",shop:"supermarket"},addTags:{brand:"Alimerka","brand:wikidata":"Q16482738","brand:wikipedia":"es:Alimerka",name:"Alimerka",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Alnatura":{name:"Alnatura",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Alnatura/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q876811",shop:"supermarket"},addTags:{brand:"Alnatura","brand:wikidata":"Q876811","brand:wikipedia":"en:Alnatura",name:"Alnatura",organic:"only",shop:"supermarket"},countryCodes:["ch","de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Amigo":{name:"Amigo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/amigopuertorico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4746234",shop:"supermarket"},addTags:{alt_name:"Supermercados Amigo",brand:"Amigo","brand:wikidata":"Q4746234","brand:wikipedia":"en:Amigo Supermarkets",name:"Amigo",shop:"supermarket"},countryCodes:["us"],terms:["amigo puerto rico","amigo supermarket","supermercado amigo"],matchScore:2,suggestion:true},"shop/supermarket/Asda":{name:"Asda",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Asda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q297410",shop:"supermarket"},addTags:{brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Atacadão":{name:"Atacadão",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Atacadaosa.Oficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2868739",shop:"supermarket"},addTags:{brand:"Atacadão","brand:wikidata":"Q2868739","brand:wikipedia":"en:Atacadão",name:"Atacadão",shop:"supermarket"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Auchan":{name:"Auchan",icon:"maki-grocery",imageURL:"https://graph.facebook.com/auchan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q758603",shop:"supermarket"},addTags:{brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/BI-LO":{name:"BI-LO",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BILOSuperSaver/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835620",shop:"supermarket"},addTags:{brand:"BI-LO","brand:wikidata":"Q4835620","brand:wikipedia":"en:BI-LO (United States)",name:"BI-LO",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/BM":{name:"BM",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BMSupermercados/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073462",shop:"supermarket"},addTags:{brand:"BM","brand:wikidata":"Q62073462",name:"BM",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bashas'":{name:"Bashas'",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BashasSupermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4866786",shop:"supermarket"},addTags:{brand:"Bashas'","brand:wikidata":"Q4866786","brand:wikipedia":"en:Bashas'",name:"Bashas'",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Biedronka":{name:"Biedronka",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BiedronkaCodziennie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q857182",shop:"supermarket"},addTags:{brand:"Biedronka","brand:wikidata":"Q857182","brand:wikipedia":"pl:Biedronka (sieć handlowa)",name:"Biedronka",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Big Bazaar":{name:"Big Bazaar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BigBazaar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3631008",shop:"supermarket"},addTags:{brand:"Big Bazaar","brand:wikidata":"Q3631008","brand:wikipedia":"en:Big Bazaar",name:"Big Bazaar",shop:"supermarket"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Big C":{name:"Big C",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BigCBigService/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q858665",shop:"supermarket"},addTags:{brand:"Big C","brand:wikidata":"Q858665","brand:wikipedia":"en:Big C",name:"Big C",shop:"supermarket"},countryCodes:["th","vn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Big-A":{name:"Big-A",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11330804",shop:"supermarket"},addTags:{brand:"Big-A","brand:en":"Big-A","brand:jp":"ビッグ・エー","brand:wikidata":"Q11330804","brand:wikipedia":"jp:ビッグ・エー",name:"Big-A","name:en":"Big-A","name:ja":"ビッグ・エー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Billa":{name:"Billa",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BILLA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q537781",shop:"supermarket"},addTags:{brand:"Billa","brand:wikidata":"Q537781","brand:wikipedia":"en:Billa (supermarket)",name:"Billa",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bim":{name:"Bim",icon:"maki-grocery",imageURL:"https://graph.facebook.com/bimturkiye/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1022075",shop:"supermarket"},addTags:{brand:"Bim","brand:wikidata":"Q1022075","brand:wikipedia":"en:Bim (company)",name:"Bim",shop:"supermarket"},countryCodes:["ma","tr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bingo":{name:"Bingo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/bingotuzla/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16842066",shop:"supermarket"},addTags:{brand:"Bingo","brand:wikidata":"Q16842066","brand:wikipedia":"bs:Bingo (kompanija)",name:"Bingo",shop:"supermarket"},countryCodes:["ba"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bio C' Bon":{name:"Bio C' Bon",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogoBiocBon2.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q54312551",shop:"supermarket"},addTags:{brand:"Bio C' Bon","brand:wikidata":"Q54312551","brand:wikipedia":"fr:Bio c'bon",name:"Bio C' Bon",shop:"supermarket"},countryCodes:["es","fr","jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bio Company":{name:"Bio Company",icon:"maki-grocery",imageURL:"https://graph.facebook.com/biocompany.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q864179",shop:"supermarket"},addTags:{brand:"Bio Company","brand:wikidata":"Q864179","brand:wikipedia":"de:Bio Company",name:"Bio Company",organic:"only",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Biocoop":{name:"Biocoop",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Biocoop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2904039",shop:"supermarket"},addTags:{brand:"Biocoop","brand:wikidata":"Q2904039","brand:wikipedia":"fr:Biocoop",name:"Biocoop",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bodega Aurrera":{name:"Bodega Aurrera",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BodegaAurrera/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3365858",shop:"supermarket"},addTags:{brand:"Bodega Aurrera","brand:wikidata":"Q3365858","brand:wikipedia":"en:Bodega Aurrerá",name:"Bodega Aurrera",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bravo":{name:"Bravo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/bravo.supermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16985159",shop:"supermarket"},addTags:{brand:"Bravo","brand:wikidata":"Q16985159","brand:wikipedia":"en:Bravo (supermarket)",name:"Bravo",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Brookshire Brothers":{name:"Brookshire Brothers",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BrookshireBros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4975084",shop:"supermarket"},addTags:{brand:"Brookshire Brothers","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",name:"Brookshire Brothers",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Brookshire's":{name:"Brookshire's",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Brookshires/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4975085",shop:"supermarket"},addTags:{brand:"Brookshire's","brand:wikidata":"Q4975085","brand:wikipedia":"en:Brookshire Grocery Company",name:"Brookshire's",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Budgens":{name:"Budgens",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DiscoverBudgens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4985016",shop:"supermarket"},addTags:{brand:"Budgens","brand:wikidata":"Q4985016","brand:wikipedia":"en:Budgens",name:"Budgens",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bulk Barn":{name:"Bulk Barn",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BulkBarnFoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4996466",shop:"supermarket"},addTags:{brand:"Bulk Barn","brand:wikidata":"Q4996466",name:"Bulk Barn",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bunnpris":{name:"Bunnpris",icon:"maki-grocery",imageURL:"https://graph.facebook.com/bunnpris.no/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1774634",shop:"supermarket"},addTags:{brand:"Bunnpris","brand:wikidata":"Q1774634","brand:wikipedia":"en:Bunnpris",name:"Bunnpris",shop:"supermarket"},countryCodes:["no"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bónus":{name:"Bónus",icon:"maki-grocery",imageURL:"https://graph.facebook.com/bonus.is/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3480158",shop:"supermarket"},addTags:{brand:"Bónus","brand:wikidata":"Q3480158","brand:wikipedia":"en:Bónus",name:"Bónus",shop:"supermarket"},countryCodes:["fo","is"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/C-Town Supermarkets":{name:"C-Town Supermarkets",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Ctown.supermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5005929",shop:"supermarket"},addTags:{brand:"C-Town Supermarkets","brand:wikidata":"Q5005929","brand:wikipedia":"en:C-Town Supermarkets",name:"C-Town",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/CAP-Markt":{name:"CAP-Markt",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCAP%20Markt%20K%C3%B6penick.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1022827",shop:"supermarket"},addTags:{brand:"CAP","brand:wikidata":"Q1022827","brand:wikipedia":"de:CAP (Markt)",name:"CAP-Markt",shop:"supermarket"},countryCodes:["de"],terms:["cap"],matchScore:2,suggestion:true},"shop/supermarket/CBA":{name:"CBA",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCBA%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q779845",shop:"supermarket"},addTags:{brand:"CBA","brand:wikidata":"Q779845","brand:wikipedia":"en:CBA (food retail)",name:"CBA",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/COOP Jednota":{name:"COOP Jednota",icon:"maki-grocery",imageURL:"https://graph.facebook.com/COOPJednota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41629254",shop:"supermarket"},addTags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"supermarket"},countryCodes:["cz","sk"],terms:["jednota"],matchScore:2,suggestion:true},"shop/supermarket/Cactus":{name:"Cactus",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mycactuslu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q466918",shop:"supermarket"},addTags:{brand:"Cactus","brand:wikidata":"Q466918","brand:wikipedia":"lb:Cactus",name:"Cactus",shop:"supermarket"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Caprabo":{name:"Caprabo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Caprabo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1980781",shop:"supermarket"},addTags:{brand:"Caprabo","brand:wikidata":"Q1980781","brand:wikipedia":"en:Caprabo",name:"Caprabo",shop:"supermarket"},countryCodes:["ad","es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Cardenas":{name:"Cardenas",icon:"maki-grocery",imageURL:"https://graph.facebook.com/CardenasMarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64149543",shop:"supermarket"},addTags:{brand:"Cardenas","brand:wikidata":"Q64149543","brand:wikipedia":"en:Cardenas (supermarket)",cuisine:"latin_american",name:"Cardenas",shop:"supermarket"},countryCodes:["us"],terms:["mi pueblo","mi pueblo food center"],matchScore:2,suggestion:true},"shop/supermarket/Cargills Food City (Sri Lanka)":{name:"Cargills Food City (Sri Lanka)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/cargillsfoodcity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58353955",shop:"supermarket"},addTags:{brand:"Cargills Food City","brand:wikidata":"Q58353955",name:"Cargills Food City",shop:"supermarket"},countryCodes:["lk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Carrefour":{name:"Carrefour",icon:"maki-grocery",imageURL:"https://graph.facebook.com/carrefour/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q217599",shop:"supermarket"},addTags:{brand:"Carrefour","brand:wikidata":"Q217599","brand:wikipedia":"fr:Carrefour (enseigne)",name:"Carrefour",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Carrefour City":{name:"Carrefour City",icon:"maki-grocery",imageURL:"https://graph.facebook.com/CarrefourCity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2940187",shop:"supermarket"},addTags:{brand:"Carrefour City","brand:wikidata":"Q2940187","brand:wikipedia":"fr:Carrefour City",name:"Carrefour City",shop:"supermarket"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Carrefour Contact":{name:"Carrefour Contact",icon:"maki-grocery",imageURL:"https://graph.facebook.com/vieuxberquin59232/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2940188",shop:"supermarket"},addTags:{brand:"Carrefour Contact","brand:wikidata":"Q2940188","brand:wikipedia":"fr:Carrefour Contact",name:"Carrefour Contact",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Carrefour Market":{name:"Carrefour Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/carrefourmarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2689639",shop:"supermarket"},addTags:{brand:"Carrefour Market","brand:wikidata":"Q2689639","brand:wikipedia":"fr:Carrefour Market",name:"Carrefour Market",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Carulla":{name:"Carulla",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SupermercadosCarulla/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5047480",shop:"supermarket"},addTags:{brand:"Carulla","brand:wikidata":"Q5047480","brand:wikipedia":"en:Carulla",name:"Carulla",shop:"supermarket"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Centre Commercial E. Leclerc":{name:"Centre Commercial E. Leclerc",icon:"maki-grocery",imageURL:"https://graph.facebook.com/E.Leclerc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1273376",shop:"supermarket"},addTags:{brand:"Centre Commercial E. Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"Centre Commercial E. Leclerc",shop:"supermarket"},countryCodes:["fr","pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Chata Polska":{name:"Chata Polska",icon:"maki-grocery",imageURL:"https://graph.facebook.com/chatapolskasklepy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994406",shop:"supermarket"},addTags:{brand:"Chata Polska","brand:wikidata":"Q61994406",name:"Chata Polska",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Checkers":{name:"Checkers",icon:"maki-grocery",imageURL:"https://graph.facebook.com/checkerssa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5089126",shop:"supermarket"},addTags:{brand:"Checkers","brand:wikidata":"Q5089126","brand:wikipedia":"en:Checkers (supermarket chain)",name:"Checkers",shop:"supermarket"},countryCodes:["bw","na","za"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Chedraui":{name:"Chedraui",icon:"maki-grocery",imageURL:"https://graph.facebook.com/CHEDRAUIOFICIAL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2961952",shop:"supermarket"},addTags:{brand:"Chedraui","brand:wikidata":"Q2961952","brand:wikipedia":"en:Chedraui",name:"Chedraui",shop:"supermarket"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/City Market":{name:"City Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/CityMarketGrocery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5123299",shop:"supermarket"},addTags:{brand:"City Market","brand:wikidata":"Q5123299","brand:wikipedia":"en:City Market (US grocery store chain)",name:"City Market",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Co-op (Canada)":{name:"Co-op (Canada)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/CoopCRS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5440676",shop:"supermarket"},addTags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Coles":{name:"Coles",icon:"maki-grocery",imageURL:"https://graph.facebook.com/coles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1108172",shop:"supermarket"},addTags:{brand:"Coles","brand:wikidata":"Q1108172","brand:wikipedia":"en:Coles Supermarkets",name:"Coles",shop:"supermarket"},countryCodes:["au","gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Colruyt":{name:"Colruyt",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Colruyt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2363991",shop:"supermarket"},addTags:{brand:"Colruyt","brand:wikidata":"Q2363991","brand:wikipedia":"en:Colruyt (supermarket)",name:"Colruyt",shop:"supermarket"},countryCodes:["be","fr","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Combi":{name:"Combi",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Combi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1113618",shop:"supermarket"},addTags:{brand:"Combi","brand:wikidata":"Q1113618","brand:wikipedia":"de:Combi (Einkaufsmarkt)",name:"Combi",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Comercial Mexicana":{name:"Comercial Mexicana",icon:"maki-grocery",imageURL:"https://graph.facebook.com/209308192464395/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2985173",shop:"supermarket"},addTags:{brand:"Comercial Mexicana","brand:wikidata":"Q2985173","brand:wikipedia":"es:Comercial Mexicana",name:"Comercial Mexicana",shop:"supermarket"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Conad":{name:"Conad",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Conad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q639075",shop:"supermarket"},addTags:{brand:"Conad","brand:wikidata":"Q639075","brand:wikipedia":"it:Conad",name:"Conad",shop:"supermarket"},countryCodes:["al","it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Conad City":{name:"Conad City",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ConadCityQualiano/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57543102",shop:"supermarket"},addTags:{brand:"Conad City","brand:wikidata":"Q57543102",name:"Conad City",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Condis":{name:"Condis",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Condislife/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57417581",shop:"supermarket"},addTags:{brand:"Condis","brand:wikidata":"Q57417581",name:"Condis",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Consum":{name:"Consum",icon:"maki-grocery",imageURL:"https://graph.facebook.com/supermercadosconsum/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8350308",shop:"supermarket"},addTags:{brand:"Consum","brand:wikidata":"Q8350308","brand:wikipedia":"es:Consum",name:"Consum",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Continente":{name:"Continente",icon:"maki-grocery",imageURL:"https://graph.facebook.com/continenteoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2995683",shop:"supermarket"},addTags:{brand:"Continente","brand:wikidata":"Q2995683","brand:wikipedia":"en:Continente (Supermarket)",name:"Continente",shop:"supermarket"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Coop Prix":{name:"Coop Prix",icon:"maki-grocery",imageURL:"https://graph.facebook.com/coopprix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5167705",shop:"supermarket"},addTags:{brand:"Coop Prix","brand:wikidata":"Q5167705","brand:wikipedia":"no:Coop Prix",name:"Coop Prix",shop:"supermarket"},countryCodes:["no"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Coop (Schweiz)":{name:"Coop (Schweiz)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/coop.ch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q432564",shop:"supermarket"},addTags:{brand:"Coop","brand:wikidata":"Q432564","brand:wikipedia":"de:Coop (Schweiz)",name:"Coop",shop:"supermarket"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Cora":{name:"Cora",icon:"maki-grocery",imageURL:"https://graph.facebook.com/coraBelgium/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q686643",shop:"supermarket"},addTags:{brand:"Cora","brand:wikidata":"Q686643","brand:wikipedia":"en:Cora (hypermarket)",name:"Cora",shop:"supermarket"},countryCodes:["be","fr","lu","ro"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Costcutter":{name:"Costcutter",icon:"maki-grocery",imageURL:"https://graph.facebook.com/costcutter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5175072",shop:"supermarket"},addTags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Coto":{name:"Coto",icon:"maki-grocery",imageURL:"https://graph.facebook.com/coto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5175411",shop:"supermarket"},addTags:{brand:"Coto","brand:wikidata":"Q5175411","brand:wikipedia":"es:Coto (supermercado)",name:"Coto",shop:"supermarket"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Countdown":{name:"Countdown",icon:"maki-grocery",imageURL:"https://graph.facebook.com/countdown/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5176845",shop:"supermarket"},addTags:{brand:"Countdown","brand:wikidata":"Q5176845","brand:wikipedia":"en:Countdown (supermarket)",name:"Countdown",shop:"supermarket"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Covirán":{name:"Covirán",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Coviran/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61070539",shop:"supermarket"},addTags:{brand:"Covirán","brand:wikidata":"Q61070539","brand:wikipedia":"eu:Covirán",name:"Covirán","name:pt":"Coviran",shop:"supermarket"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Cub Foods":{name:"Cub Foods",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Cub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5191916",shop:"supermarket"},addTags:{brand:"Cub Foods","brand:wikidata":"Q5191916","brand:wikipedia":"en:Cub Foods",name:"Cub Foods",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/D'Agostino":{name:"D'Agostino",icon:"maki-grocery",imageURL:"https://graph.facebook.com/yourdagnyc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20656844",shop:"supermarket"},addTags:{brand:"D'Agostino","brand:wikidata":"Q20656844","brand:wikipedia":"en:D'Agostino Supermarkets",name:"D'Agostino",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/D1":{name:"D1",icon:"maki-grocery",imageURL:"https://graph.facebook.com/427264640797493/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q43403418",shop:"supermarket"},addTags:{brand:"D1","brand:wikidata":"Q43403418","brand:wikipedia":"es:Tiendas D1",name:"D1",shop:"supermarket"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dagli'Brugsen":{name:"Dagli'Brugsen",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DagliBrugsen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12307017",shop:"supermarket"},addTags:{brand:"Dagli'Brugsen","brand:wikidata":"Q12307017","brand:wikipedia":"en:Dagli'Brugsen",name:"Dagli'Brugsen",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Decò":{name:"Decò",icon:"maki-grocery",imageURL:"https://graph.facebook.com/supermercatideco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65127915",shop:"supermarket"},addTags:{brand:"Decò","brand:wikidata":"Q65127915","brand:wikipedia":"it:Decò",name:"Decò",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Deen":{name:"Deen",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DEENSupermarkten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13571727",shop:"supermarket"},addTags:{brand:"Deen","brand:wikidata":"Q13571727","brand:wikipedia":"nl:Deen (supermarkt)",name:"Deen",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Delhaize":{name:"Delhaize",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Delhaize/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1184173",shop:"supermarket"},addTags:{brand:"Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"Delhaize",shop:"supermarket"},countryCodes:["be","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Delikatesy Centrum":{name:"Delikatesy Centrum",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Delikatesypl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11693824",shop:"supermarket"},addTags:{brand:"Delikatesy Centrum","brand:wikidata":"Q11693824","brand:wikipedia":"pl:Delikatesy Centrum",name:"Delikatesy Centrum",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Denner":{name:"Denner",icon:"maki-grocery",imageURL:"https://graph.facebook.com/denner.ch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q379911",shop:"supermarket"},addTags:{brand:"Denner","brand:wikidata":"Q379911","brand:wikipedia":"en:Denner (supermarket)",name:"Denner",shop:"supermarket"},countryCodes:["ch","li"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Despar":{name:"Despar",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/639011130107633664/nLN6cXfa_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q610492",shop:"supermarket"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Despar",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Despensa Familiar":{name:"Despensa Familiar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DespensaFamiliarGuatemala/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994849",shop:"supermarket"},addTags:{brand:"Despensa Familiar","brand:wikidata":"Q61994849",name:"Despensa Familiar",shop:"supermarket"},countryCodes:["gt","hn","sv"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dia":{name:"Dia",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DIAEspana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q925132",shop:"supermarket"},addTags:{brand:"Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Dia",shop:"supermarket"},terms:["supermercado dia"],matchScore:2,suggestion:true},"shop/supermarket/Dia Market":{name:"Dia Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DIAEspana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q925132",shop:"supermarket"},addTags:{brand:"Dia Market","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Dia Market",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dierbergs":{name:"Dierbergs",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Dierbergs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5274978",shop:"supermarket"},addTags:{brand:"Dierbergs","brand:wikidata":"Q5274978","brand:wikipedia":"en:Dierbergs Markets",name:"Dierbergs",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dino":{name:"Dino",icon:"maki-grocery",imageURL:"https://graph.facebook.com/marketdinobieniewice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11694239",shop:"supermarket"},addTags:{brand:"Dino","brand:wikidata":"Q11694239","brand:wikipedia":"pl:Dino Polska",name:"Dino",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dirk van den Broek":{name:"Dirk van den Broek",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Dirksupermarkten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17502722",shop:"supermarket"},addTags:{brand:"Dirk van den Broek","brand:wikidata":"Q17502722","brand:wikipedia":"en:Dirk (supermarket)",name:"Dirk van den Broek",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Disco (Argentina)":{name:"Disco (Argentina)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DiscoArgentina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6135978",shop:"supermarket"},addTags:{brand:"Disco","brand:wikidata":"Q6135978","brand:wikipedia":"es:Disco (supermercado de Argentina)",name:"Disco",shop:"supermarket"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Disco (Uruguay)":{name:"Disco (Uruguay)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/discouruguay/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16636819",shop:"supermarket"},addTags:{brand:"Disco","brand:wikidata":"Q16636819","brand:wikipedia":"es:Disco (supermercado de Uruguay)",name:"Disco",shop:"supermarket"},countryCodes:["uy"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Diska":{name:"Diska",icon:"maki-grocery",imageURL:"https://graph.facebook.com/diskamarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390177",shop:"supermarket"},addTags:{brand:"Diska","brand:wikidata":"Q62390177",name:"Diska",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dollar General Market":{name:"Dollar General Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/dollargeneral/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q145168",shop:"supermarket"},addTags:{brand:"Dollar General Market","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General Market",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dunnes Stores":{name:"Dunnes Stores",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DunnesStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1266203",shop:"supermarket"},addTags:{brand:"Dunnes Stores","brand:wikidata":"Q1266203","brand:wikipedia":"en:Dunnes Stores",name:"Dunnes Stores",shop:"supermarket"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/E-Center":{name:"E-Center",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EDEKA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q701755",shop:"supermarket"},addTags:{brand:"E-Center","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"E-Center",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/E. Leclerc":{name:"E. Leclerc",icon:"maki-grocery",imageURL:"https://graph.facebook.com/E.Leclerc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1273376",shop:"supermarket"},addTags:{brand:"E. Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"en:E.Leclerc",name:"E. Leclerc",shop:"supermarket"},countryCodes:["es","fr","pl","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/E. Leclerc Drive":{name:"E. Leclerc Drive",icon:"maki-grocery",imageURL:"https://graph.facebook.com/E.Leclerc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1273376",shop:"supermarket"},addTags:{brand:"E. Leclerc Drive","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"E. Leclerc Drive",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/EMTÉ":{name:"EMTÉ",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FEmte%20logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3119122",shop:"supermarket"},addTags:{brand:"EMTÉ","brand:wikidata":"Q3119122","brand:wikipedia":"en:EMTÉ",name:"EMTÉ",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Edeka":{name:"Edeka",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EDEKA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q701755",shop:"supermarket"},addTags:{brand:"Edeka","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Edeka",shop:"supermarket"},countryCodes:["de"],terms:["edeka neukauf"],matchScore:2,suggestion:true},"shop/supermarket/Edeka xpress":{name:"Edeka xpress",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EDEKA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q701755",shop:"supermarket"},addTags:{brand:"Edeka","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Edeka xpress",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Eko":{name:"Eko",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q9251859",shop:"supermarket"},addTags:{brand:"Eko","brand:wikidata":"Q9251859","brand:wikipedia":"pl:Eko Holding",name:"Eko",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ekom":{name:"Ekom",icon:"maki-grocery",imageURL:"https://graph.facebook.com/1013432382051351/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073442",shop:"supermarket"},addTags:{brand:"Ekom","brand:wikidata":"Q62073442",name:"Ekom",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ekono":{name:"Ekono",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogotipo%20Ekono.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2842729",shop:"supermarket"},addTags:{brand:"Ekono","brand:wikidata":"Q2842729","brand:wikipedia":"es:Ekono",name:"Ekono",shop:"supermarket"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Eroski":{name:"Eroski",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Eroski/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1361349",shop:"supermarket"},addTags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski",shop:"supermarket"},countryCodes:["es","gi"],terms:["charter","eroski center"],matchScore:2,suggestion:true},"shop/supermarket/Eroski City":{name:"Eroski City",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Eroski/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1361349",shop:"supermarket"},addTags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski City",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Esselunga":{name:"Esselunga",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Esselunga/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1059636",shop:"supermarket"},addTags:{brand:"Esselunga","brand:wikidata":"Q1059636","brand:wikipedia":"en:Esselunga",name:"Esselunga",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/EuroSpin":{name:"EuroSpin",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EurospinItaliaSpa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1374674",shop:"supermarket"},addTags:{brand:"EuroSpin","brand:wikidata":"Q1374674","brand:wikipedia":"it:Eurospin",name:"EuroSpin",shop:"supermarket"},countryCodes:["it","si"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Eurospar":{name:"Eurospar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EurosparIreland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12309283",shop:"supermarket"},addTags:{brand:"Eurospar","brand:wikidata":"Q12309283","brand:wikipedia":"da:Eurospar",name:"Eurospar",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Extra":{name:"Extra",icon:"maki-grocery",imageURL:"https://graph.facebook.com/extramorkved/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11964085",shop:"supermarket"},addTags:{brand:"Extra","brand:wikidata":"Q11964085","brand:wikipedia":"no:Extra (Coop)",name:"Extra",shop:"supermarket"},terms:["coop extra"],matchScore:2,suggestion:true},"shop/supermarket/Famila":{name:"Famila",icon:"maki-grocery",imageURL:"https://graph.facebook.com/1674632829509874/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1395108",shop:"supermarket"},addTags:{brand:"Famila","brand:wikidata":"Q1395108","brand:wikipedia":"de:Famila",name:"Famila",shop:"supermarket"},countryCodes:["de","it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Family Fare":{name:"Family Fare",icon:"maki-grocery",imageURL:"https://graph.facebook.com/shopfamilyfare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19868045",shop:"supermarket"},addTags:{brand:"Family Fare","brand:wikidata":"Q19868045","brand:wikipedia":"en:Family Fare",name:"Family Fare",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Fareway":{name:"Fareway",icon:"maki-grocery",imageURL:"https://graph.facebook.com/farewaystores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5434998",shop:"supermarket"},addTags:{brand:"Fareway","brand:wikidata":"Q5434998","brand:wikipedia":"en:Fareway",name:"Fareway",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Farm Boy":{name:"Farm Boy",icon:"maki-grocery",imageURL:"https://graph.facebook.com/farmboy.ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5435469",shop:"supermarket"},addTags:{brand:"Farm Boy","brand:wikidata":"Q5435469","brand:wikipedia":"en:Farm Boy",name:"Farm Boy",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Feneberg":{name:"Feneberg",icon:"maki-grocery",imageURL:"https://graph.facebook.com/FenebergLebensmittel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5345378",shop:"supermarket"},addTags:{brand:"Feneberg","brand:wikidata":"Q5345378","brand:wikipedia":"de:Feneberg Lebensmittel",name:"Feneberg",shop:"supermarket"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Food 4 Less":{name:"Food 4 Less",icon:"maki-grocery",imageURL:"https://graph.facebook.com/myfood4less/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5465282",shop:"supermarket"},addTags:{brand:"Food 4 Less","brand:wikidata":"Q5465282","brand:wikipedia":"en:Food 4 Less",name:"Food 4 Less",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Food Basics":{name:"Food Basics",icon:"maki-grocery",imageURL:"https://graph.facebook.com/foodbasics.ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5465300",shop:"supermarket"},addTags:{brand:"Food Basics","brand:wikidata":"Q5465300","brand:wikipedia":"en:Food Basics",name:"Food Basics",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Food City (USA)":{name:"Food City (USA)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/FoodCity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16981107",shop:"supermarket"},addTags:{brand:"Food City","brand:wikidata":"Q16981107","brand:wikipedia":"en:Food City (K-VA-T)",name:"Food City",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Food Lion":{name:"Food Lion",icon:"maki-grocery",imageURL:"https://graph.facebook.com/foodlion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1435950",shop:"supermarket"},addTags:{brand:"Food Lion","brand:wikidata":"Q1435950","brand:wikipedia":"en:Food Lion",name:"Food Lion",shop:"supermarket"},countryCodes:["es","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/FoodLand (USA)":{name:"FoodLand (USA)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q5465271",shop:"supermarket"},addTags:{brand:"FoodLand","brand:wikidata":"Q5465271","brand:wikipedia":"en:FoodLand",name:"FoodLand",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/FoodMaxx":{name:"FoodMaxx",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Foodmaxx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61894844",shop:"supermarket"},addTags:{brand:"FoodMaxx","brand:wikidata":"Q61894844",name:"FoodMaxx",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Foodland (Australia)":{name:"Foodland (Australia)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/FoodlandSupermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5465555",shop:"supermarket"},addTags:{brand:"Foodland","brand:wikidata":"Q5465555","brand:wikipedia":"en:Foodland (South Australia)",name:"Foodland",shop:"supermarket"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Foodland (Canada)":{name:"Foodland (Canada)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/dansFoodland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5465554",shop:"supermarket"},addTags:{brand:"Foodland","brand:wikidata":"Q5465554","brand:wikipedia":"en:Foodland (Canada)",name:"Foodland",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Foodland (Hawaii)":{name:"Foodland (Hawaii)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/FoodlandHawaii/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5465560",shop:"supermarket"},addTags:{brand:"Foodland","brand:wikidata":"Q5465560","brand:wikipedia":"en:Foodland Hawaii",name:"Foodland",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Foodworks":{name:"Foodworks",icon:"maki-grocery",imageURL:"https://graph.facebook.com/foodworksaus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5465579",shop:"supermarket"},addTags:{brand:"Foodworks","brand:wikidata":"Q5465579","brand:wikipedia":"en:FoodWorks",name:"Foodworks",shop:"supermarket"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Fortinos":{name:"Fortinos",icon:"maki-grocery",imageURL:"https://graph.facebook.com/fortinosgrocery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5472662",shop:"supermarket"},addTags:{brand:"Fortinos","brand:wikidata":"Q5472662","brand:wikipedia":"en:Fortinos",name:"Fortinos",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Four Square":{name:"Four Square",icon:"maki-grocery",imageURL:"https://graph.facebook.com/FourSquareNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5475558",shop:"supermarket"},addTags:{brand:"Four Square","brand:wikidata":"Q5475558","brand:wikipedia":"en:Four Square (supermarket)",name:"Four Square",shop:"supermarket"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Fred Meyer":{name:"Fred Meyer",icon:"maki-grocery",imageURL:"https://graph.facebook.com/fredmeyer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5495932",shop:"supermarket"},addTags:{brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Fresh":{name:"Fresh",icon:"maki-grocery",imageURL:"https://graph.facebook.com/freshobchod/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q50737403",shop:"supermarket"},addTags:{brand:"Fresh","brand:wikidata":"Q50737403","brand:wikipedia":"sk:Fresh",name:"Fresh",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Fresh Thyme":{name:"Fresh Thyme",icon:"maki-grocery",imageURL:"https://graph.facebook.com/FreshThymeFarmersMarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64132791",shop:"supermarket"},addTags:{brand:"Fresh Thyme","brand:wikidata":"Q64132791",name:"Fresh Thyme",shop:"supermarket"},countryCodes:["us"],terms:["fresh thyme farmers market"],matchScore:2,suggestion:true},"shop/supermarket/FreshCo":{name:"FreshCo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/FreshCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5502915",shop:"supermarket"},addTags:{brand:"FreshCo","brand:wikidata":"Q5502915","brand:wikipedia":"en:FreshCo",name:"FreshCo",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Froiz":{name:"Froiz",icon:"maki-grocery",imageURL:"https://graph.facebook.com/158051157541336/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17070775",shop:"supermarket"},addTags:{brand:"Froiz","brand:wikidata":"Q17070775","brand:wikipedia":"en:Froiz",name:"Froiz",shop:"supermarket"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Fry's Food and Drug":{name:"Fry's Food and Drug",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFry's%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5506547",shop:"supermarket"},addTags:{brand:"Fry's Food and Drug","brand:wikidata":"Q5506547","brand:wikipedia":"en:Fry's Food and Drug",name:"Fry's Food and Drug",shop:"supermarket"},countryCodes:["us"],terms:["frys"],matchScore:2,suggestion:true},"shop/supermarket/Føtex":{name:"Føtex",icon:"maki-grocery",imageURL:"https://graph.facebook.com/foetexdk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1480395",shop:"supermarket"},addTags:{brand:"Føtex","brand:wikidata":"Q1480395","brand:wikipedia":"en:Føtex",name:"Føtex",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/G20":{name:"G20",icon:"maki-grocery",imageURL:"https://graph.facebook.com/supermarchesg20/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3504731",shop:"supermarket"},addTags:{brand:"G20","brand:wikidata":"Q3504731","brand:wikipedia":"fr:Supermarchés G20",name:"G20",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/GBarbosa":{name:"GBarbosa",icon:"maki-grocery",imageURL:"https://graph.facebook.com/oficialgbarbosa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10287817",shop:"supermarket"},addTags:{brand:"GBarbosa","brand:wikidata":"Q10287817","brand:wikipedia":"pt:GBarbosa",name:"GBarbosa",shop:"supermarket"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Gadis":{name:"Gadis",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Gadis.supermercados/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12389151",shop:"supermarket"},addTags:{brand:"Gadis","brand:wikidata":"Q12389151","brand:wikipedia":"gl:Gadisa",name:"Gadis",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Giant Eagle":{name:"Giant Eagle",icon:"maki-grocery",imageURL:"https://graph.facebook.com/gianteagleinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1522721",shop:"supermarket"},addTags:{brand:"Giant Eagle","brand:wikidata":"Q1522721","brand:wikipedia":"en:Giant Eagle",name:"Giant Eagle",shop:"supermarket"},countryCodes:["us"],terms:["giant eagle supermarket"],matchScore:2,suggestion:true},"shop/supermarket/Giant Hypermarket":{name:"Giant Hypermarket",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20of%20Giant%20Hypermarket.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4217013",shop:"supermarket"},addTags:{brand:"Giant Hypermarket","brand:wikidata":"Q4217013","brand:wikipedia":"en:Giant Hypermarket",name:"Giant Hypermarket",shop:"supermarket"},countryCodes:["id","my","sg","vn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Giant (Carlisle)":{name:"Giant (Carlisle)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/giantfoodstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5558332",shop:"supermarket"},addTags:{brand:"Giant","brand:wikidata":"Q5558332","brand:wikipedia":"en:Giant Food Stores",name:"Giant",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Giant (Landover)":{name:"Giant (Landover)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/GiantFood/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5558336",shop:"supermarket"},addTags:{brand:"Giant","brand:wikidata":"Q5558336","brand:wikipedia":"en:Giant Food (Landover)",name:"Giant",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Globus":{name:"Globus",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Globus.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q457503",shop:"supermarket"},addTags:{brand:"Globus","brand:wikidata":"Q457503","brand:wikipedia":"en:Globus (hypermarket)",name:"Globus",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Gordon Food Service":{name:"Gordon Food Service",icon:"maki-grocery",imageURL:"https://graph.facebook.com/GordonFoodService/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1538006",shop:"supermarket"},addTags:{brand:"Gordon Food Service","brand:wikidata":"Q1538006","brand:wikipedia":"en:Gordon Food Service",name:"Gordon Food Service",shop:"supermarket"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Grand Frais":{name:"Grand Frais",icon:"maki-grocery",imageURL:"https://graph.facebook.com/GrandFrais/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3114675",shop:"supermarket"},addTags:{brand:"Grand Frais","brand:wikidata":"Q3114675","brand:wikipedia":"fr:Grand Frais",name:"Grand Frais",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Grocery Outlet":{name:"Grocery Outlet",icon:"maki-grocery",imageURL:"https://graph.facebook.com/GroceryOutletInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5609934",shop:"supermarket"},addTags:{brand:"Grocery Outlet","brand:wikidata":"Q5609934","brand:wikipedia":"en:Grocery Outlet",name:"Grocery Outlet",official_name:"Grocery Outlet Bargain Market",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Groszek":{name:"Groszek",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Sklepy.Groszek/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9280965",shop:"supermarket"},addTags:{brand:"Groszek","brand:wikidata":"Q9280965","brand:wikipedia":"pl:Groszek (sieć sklepów)",name:"Groszek",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Géant Casino":{name:"Géant Casino",icon:"maki-grocery",imageURL:"https://graph.facebook.com/geantcasino/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1380537",shop:"supermarket"},addTags:{brand:"Géant Casino","brand:wikidata":"Q1380537","brand:wikipedia":"fr:Enseignes du groupe Casino",name:"Géant Casino",shop:"supermarket"},countryCodes:["cg","fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/H Mart":{name:"H Mart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/hmartofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5636306",shop:"supermarket"},addTags:{"alt_name:ko":"H 마트",brand:"H Mart","brand:wikidata":"Q5636306","brand:wikipedia":"en:H Mart",cuisine:"asian",name:"H Mart","name:en":"H Mart","name:ko":"한아름","name:zh-Hans":"韩亚龙","name:zh-Hant":"韓亞龍",shop:"supermarket"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/H-E-B":{name:"H-E-B",icon:"maki-grocery",imageURL:"https://graph.facebook.com/HEB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q830621",shop:"supermarket"},addTags:{brand:"H-E-B","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B",shop:"supermarket"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/HIT":{name:"HIT",icon:"maki-grocery",imageURL:"https://graph.facebook.com/151789788189446/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1548713",shop:"supermarket"},addTags:{brand:"HIT","brand:wikidata":"Q1548713","brand:wikipedia":"de:HIT Handelsgruppe",name:"HIT",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/HalpaHalli":{name:"HalpaHalli",icon:"maki-grocery",imageURL:"https://graph.facebook.com/HalpaHalli/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11861256",shop:"supermarket"},addTags:{brand:"HalpaHalli","brand:wikidata":"Q11861256","brand:wikipedia":"fi:HalpaHalli",name:"HalpaHalli",shop:"supermarket"},countryCodes:["ee","fi","ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hannaford":{name:"Hannaford",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Hannaford/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5648760",shop:"supermarket"},addTags:{brand:"Hannaford","brand:wikidata":"Q5648760","brand:wikipedia":"en:Hannaford Brothers Company",name:"Hannaford",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Harris Teeter":{name:"Harris Teeter",icon:"maki-grocery",imageURL:"https://graph.facebook.com/harristeeter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5665067",shop:"supermarket"},addTags:{brand:"Harris Teeter","brand:wikidata":"Q5665067","brand:wikipedia":"en:Harris Teeter",name:"Harris Teeter",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hemköp":{name:"Hemköp",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Hemkop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10521746",shop:"supermarket"},addTags:{brand:"Hemköp","brand:wikidata":"Q10521746","brand:wikipedia":"sv:Hemköp",name:"Hemköp",shop:"supermarket"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hero Supermarket":{name:"Hero Supermarket",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHero%20Supermarket.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q12485604",shop:"supermarket"},addTags:{brand:"Hero Supermarket","brand:wikidata":"Q12485604","brand:wikipedia":"en:Hero Supermarket",name:"Hero Supermarket",shop:"supermarket"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Heron Foods":{name:"Heron Foods",icon:"maki-grocery",imageURL:"https://graph.facebook.com/heronfoodslimited/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5743472",shop:"supermarket"},addTags:{brand:"Heron Foods","brand:wikidata":"Q5743472","brand:wikipedia":"en:Heron Foods",name:"Heron Foods",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hofer":{name:"Hofer",icon:"maki-grocery",imageURL:"https://graph.facebook.com/HOFER.AT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15815751",shop:"supermarket"},addTags:{brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer",shop:"supermarket"},countryCodes:["at","si"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hoogvliet":{name:"Hoogvliet",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Hoogvliet.supermarkten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2770647",shop:"supermarket"},addTags:{brand:"Hoogvliet","brand:wikidata":"Q2770647","brand:wikipedia":"nl:Hoogvliet (supermarkt)",name:"Hoogvliet",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hy-Vee":{name:"Hy-Vee",icon:"maki-grocery",imageURL:"https://graph.facebook.com/HyVee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1639719",shop:"supermarket"},addTags:{brand:"Hy-Vee","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",name:"Hy-Vee",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hyper U":{name:"Hyper U",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",shop:"supermarket"},addTags:{brand:"Hyper U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Hyper U",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ICA":{name:"ICA",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ICA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1663776",shop:"supermarket"},addTags:{brand:"ICA","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA",shop:"supermarket"},countryCodes:["no","se"],terms:["ica supermarket"],matchScore:2,suggestion:true},"shop/supermarket/ICA Kvantum":{name:"ICA Kvantum",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ICA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1663776",shop:"supermarket"},addTags:{brand:"ICA Kvantum","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Kvantum",shop:"supermarket"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ICA Maxi":{name:"ICA Maxi",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ICA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1663776",shop:"supermarket"},addTags:{brand:"ICA Maxi","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Maxi",shop:"supermarket"},countryCodes:["no","se"],terms:["maxi"],matchScore:2,suggestion:true},"shop/supermarket/IDEA":{name:"IDEA",icon:"maki-grocery",imageURL:"https://graph.facebook.com/IDEASrbija/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23461622",shop:"supermarket"},addTags:{brand:"IDEA","brand:wikidata":"Q23461622","brand:wikipedia":"en:Idea (supermarkets)",name:"IDEA",shop:"supermarket"},countryCodes:["rs"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/IGA":{name:"IGA",icon:"maki-grocery",imageURL:"https://graph.facebook.com/IGACorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3146662",shop:"supermarket"},addTags:{brand:"IGA","brand:wikidata":"Q3146662","brand:wikipedia":"en:IGA (supermarkets)",name:"IGA",shop:"supermarket"},countryCodes:["au","ca","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ingles":{name:"Ingles",icon:"maki-grocery",imageURL:"https://graph.facebook.com/inglesmarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6032595",shop:"supermarket"},addTags:{brand:"Ingles","brand:wikidata":"Q6032595","brand:wikipedia":"en:Ingles",name:"Ingles",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Intermarché":{name:"Intermarché",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tousuniscontrelaviechere/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3153200",shop:"supermarket"},addTags:{brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Intermarché Super":{name:"Intermarché Super",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tousuniscontrelaviechere/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3153200",shop:"supermarket"},addTags:{brand:"Intermarché Super","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Super",shop:"supermarket"},countryCodes:["be","fr","pl","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Interspar":{name:"Interspar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/INTERSPAR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15820339",shop:"supermarket"},addTags:{brand:"Interspar","brand:wikidata":"Q15820339","brand:wikipedia":"de:Interspar (Österreich)",name:"Interspar",shop:"supermarket"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Irma":{name:"Irma",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q797150",shop:"supermarket"},addTags:{brand:"Irma","brand:wikidata":"Q797150","brand:wikipedia":"en:Irma (supermarket)",name:"Irma",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Jack's":{name:"Jack's",icon:"maki-grocery",imageURL:"https://graph.facebook.com/shopjacksuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60741213",shop:"supermarket"},addTags:{brand:"Jack's","brand:wikidata":"Q60741213","brand:wikipedia":"en:Jack's (store)",name:"Jack's",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Jan Linders":{name:"Jan Linders",icon:"maki-grocery",imageURL:"https://graph.facebook.com/JanLindersSupermarkten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2200982",shop:"supermarket"},addTags:{brand:"Jan Linders","brand:wikidata":"Q2200982","brand:wikipedia":"nl:Jan Linders Supermarkten",name:"Jan Linders",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Jewel-Osco":{name:"Jewel-Osco",icon:"maki-grocery",imageURL:"https://graph.facebook.com/JewelOsco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3178470",shop:"supermarket"},addTags:{brand:"Jewel-Osco","brand:wikidata":"Q3178470","brand:wikipedia":"en:Jewel (supermarket)",name:"Jewel-Osco",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Jumbo":{name:"Jumbo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/jumbosupermarkten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2262314",shop:"supermarket"},addTags:{brand:"Jumbo","brand:wikidata":"Q2262314","brand:wikipedia":"en:Jumbo (supermarket)",name:"Jumbo",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/K+K":{name:"K+K",icon:"maki-grocery",imageURL:"https://graph.facebook.com/KlaasundKock/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1718009",shop:"supermarket"},addTags:{brand:"K+K","brand:wikidata":"Q1718009","brand:wikipedia":"de:K+K Klaas & Kock",name:"K+K",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/K-Citymarket":{name:"K-Citymarket",icon:"maki-grocery",imageURL:"https://graph.facebook.com/citymarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11868561",shop:"supermarket"},addTags:{brand:"K-Citymarket","brand:wikidata":"Q11868561","brand:wikipedia":"fi:K-Citymarket",name:"K-Citymarket",shop:"supermarket"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/K-Supermarket":{name:"K-Supermarket",icon:"maki-grocery",imageURL:"https://graph.facebook.com/KSupermarketketju/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5408668",shop:"supermarket"},addTags:{brand:"K-Supermarket","brand:wikidata":"Q5408668","brand:wikipedia":"fi:K-Supermarket",name:"K-Supermarket",shop:"supermarket"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Kaufland":{name:"Kaufland",icon:"maki-grocery",imageURL:"https://graph.facebook.com/132476996783723/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q685967",shop:"supermarket"},addTags:{brand:"Kaufland","brand:wikidata":"Q685967","brand:wikipedia":"en:Kaufland",name:"Kaufland",shop:"supermarket"},countryCodes:["bg","cz","de","hr","pl","ro","sk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/King Soopers":{name:"King Soopers",icon:"maki-grocery",imageURL:"https://graph.facebook.com/kingsoopers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6412065",shop:"supermarket"},addTags:{brand:"King Soopers","brand:wikidata":"Q6412065","brand:wikipedia":"en:King Soopers",name:"King Soopers",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Kings":{name:"Kings",icon:"maki-grocery",imageURL:"https://graph.facebook.com/KingsFoodMarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6412914",shop:"supermarket"},addTags:{brand:"Kings","brand:wikidata":"Q6412914","brand:wikipedia":"en:Kings Food Markets",name:"Kings",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Kiwi":{name:"Kiwi",icon:"maki-grocery",imageURL:"https://graph.facebook.com/kiwiminipris/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1613639",shop:"supermarket"},addTags:{brand:"Kiwi","brand:wikidata":"Q1613639","brand:wikipedia":"en:Kiwi (store)",name:"Kiwi",shop:"supermarket"},countryCodes:["dk","no"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Konzum (Balkans)":{name:"Konzum (Balkans)",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKonzum%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q518563",shop:"supermarket"},addTags:{brand:"Konzum","brand:wikidata":"Q518563","brand:wikipedia":"hr:Konzum",name:"Konzum",shop:"supermarket"},countryCodes:["ba","hr","rs"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Kroger":{name:"Kroger",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Kroger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q153417",shop:"supermarket"},addTags:{brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger",shop:"supermarket"},terms:["kroger food and drug","krogers"],matchScore:2,suggestion:true},"shop/supermarket/Kroger Marketplace":{name:"Kroger Marketplace",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Kroger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q153417",shop:"supermarket"},addTags:{brand:"Kroger Marketplace","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger Marketplace",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Krónan":{name:"Krónan",icon:"maki-grocery",imageURL:"https://graph.facebook.com/kronan.is/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16419327",shop:"supermarket"},addTags:{brand:"Krónan","brand:wikidata":"Q16419327","brand:wikipedia":"is:Krónan (verslun)",name:"Krónan",shop:"supermarket"},countryCodes:["is"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Kvickly":{name:"Kvickly",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Kvickly/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7061148",shop:"supermarket"},addTags:{brand:"Kvickly","brand:wikidata":"Q7061148","brand:wikipedia":"en:Kvickly",name:"Kvickly",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/La Anónima":{name:"La Anónima",icon:"maki-grocery",imageURL:"https://graph.facebook.com/laanonimaoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6135985",shop:"supermarket"},addTags:{brand:"La Anónima","brand:wikidata":"Q6135985","brand:wikipedia":"es:La Anónima",name:"La Anónima",shop:"supermarket"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/La Comer":{name:"La Comer",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LaComerOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26765126",shop:"supermarket"},addTags:{brand:"La Comer","brand:wikidata":"Q26765126","brand:wikipedia":"es:La Comer",name:"La Comer",shop:"supermarket"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/La Michoacana Meat Market":{name:"La Michoacana Meat Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lamichoacanameatmarket.officialpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6463872",shop:"supermarket"},addTags:{brand:"La Michoacana Meat Market","brand:en":"La Michoacana Meat Market","brand:es":"La Michoacana","brand:wikidata":"Q6463872","brand:wikipedia":"en:La Michoacana Meat Market",cuisine:"latin_american",name:"La Michoacana Meat Market","name:en":"La Michoacana Meat Market","name:es":"La Michoacana",shop:"supermarket"},countryCodes:["us"],terms:["la michoacana"],matchScore:2,suggestion:true},"shop/supermarket/La Plaza de DIA":{name:"La Plaza de DIA",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LaPlazadeDIA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58904673",shop:"supermarket"},addTags:{brand:"La Plaza de DIA","brand:wikidata":"Q58904673",name:"La Plaza de DIA",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/La Vie Claire":{name:"La Vie Claire",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Lavieclaire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3213589",shop:"supermarket"},addTags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"fr:La Vie Claire",name:"La Vie Claire",organic:"only",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Landi":{name:"Landi",icon:"maki-grocery",imageURL:"https://graph.facebook.com/landivechigen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1803010",shop:"supermarket"},addTags:{brand:"Landi","brand:wikidata":"Q1803010","brand:wikipedia":"de:Landi (Unternehmen)",name:"Landi",shop:"supermarket"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Leader Price":{name:"Leader Price",icon:"maki-grocery",imageURL:"https://graph.facebook.com/leaderpriceofficiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2181426",shop:"supermarket"},addTags:{brand:"Leader Price","brand:wikidata":"Q2181426","brand:wikipedia":"fr:Leader Price",name:"Leader Price",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lewiatan":{name:"Lewiatan",icon:"maki-grocery",imageURL:"https://graph.facebook.com/psh.lewiatan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11755396",shop:"supermarket"},addTags:{brand:"Lewiatan","brand:wikidata":"Q11755396","brand:wikipedia":"pl:Lewiatan (sieć handlowa)",name:"Lewiatan",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lider":{name:"Lider",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lidercl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6711261",shop:"supermarket"},addTags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider",shop:"supermarket"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lider Express":{name:"Lider Express",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lidercl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6711261",shop:"supermarket"},addTags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider Express",shop:"supermarket"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lidl":{name:"Lidl",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lidl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q151954",shop:"supermarket"},addTags:{brand:"Lidl","brand:wikidata":"Q151954","brand:wikipedia":"en:Lidl",name:"Lidl",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lincolnshire Co-op":{name:"Lincolnshire Co-op",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lincolnshirecoop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6551231",shop:"supermarket"},addTags:{brand:"Lincolnshire Co-op","brand:wikidata":"Q6551231","brand:wikipedia":"en:Lincolnshire Co-operative",name:"Lincolnshire Co-op",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Linella":{name:"Linella",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q61085990",shop:"supermarket"},addTags:{brand:"Linella","brand:wikidata":"Q61085990","brand:wikipedia":"ro:Linella",name:"Linella",shop:"supermarket"},countryCodes:["md"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Loblaws":{name:"Loblaws",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LoblawsON/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3257626",shop:"supermarket"},addTags:{brand:"Loblaws","brand:wikidata":"Q3257626","brand:wikipedia":"en:Loblaws",name:"Loblaws",shop:"supermarket"},countryCodes:["ca"],terms:["loblaws great food"],matchScore:2,suggestion:true},"shop/supermarket/Londis (Ireland)":{name:"Londis (Ireland)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/londisireland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21015800",shop:"supermarket"},addTags:{brand:"Londis","brand:wikidata":"Q21015800","brand:wikipedia":"en:Londis (Ireland)",name:"Londis",shop:"supermarket"},countryCodes:["ie"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Londis (UK)":{name:"Londis (UK)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/102483611097059/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21008564",shop:"supermarket"},addTags:{brand:"Londis","brand:wikidata":"Q21008564","brand:wikipedia":"en:Londis (United Kingdom)",name:"Londis",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lotte Mart":{name:"Lotte Mart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lottemart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q326715",shop:"supermarket"},addTags:{brand:"Lotte Mart","brand:wikidata":"Q326715","brand:wikipedia":"en:Lotte Mart",name:"Lotte Mart",shop:"supermarket"},countryCodes:["id","kr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lowe's Market":{name:"Lowe's Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LowesSupermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6693107",shop:"supermarket"},addTags:{brand:"Lowe's Market","brand:wikidata":"Q6693107","brand:wikipedia":"en:Lowe's Market",name:"Lowe's Market",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lowes Foods":{name:"Lowes Foods",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LowesFoodsStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6693991",shop:"supermarket"},addTags:{brand:"Lowes Foods","brand:wikidata":"Q6693991","brand:wikipedia":"en:Lowes Foods",name:"Lowes Foods",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lucky":{name:"Lucky",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LuckySupermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6698032",shop:"supermarket"},addTags:{brand:"Lucky","brand:wikidata":"Q6698032","brand:wikipedia":"en:Lucky Stores",name:"Lucky",shop:"supermarket"},countryCodes:["us"],terms:["luckys"],matchScore:2,suggestion:true},"shop/supermarket/Lupa":{name:"Lupa",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LupaSupermercados/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58044048",shop:"supermarket"},addTags:{brand:"Lupa","brand:wikidata":"Q58044048",name:"Lupa",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/M&S Foodhall":{name:"M&S Foodhall",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MarksandSpencer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714491",shop:"supermarket"},addTags:{brand:"M&S Foodhall","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Foodhall",shop:"supermarket"},terms:["marks & spencer foodhall"],matchScore:2,suggestion:true},"shop/supermarket/M&S Simply Food":{name:"M&S Simply Food",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MarksandSpencer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714491",shop:"supermarket"},addTags:{brand:"M&S Simply Food","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Simply Food",shop:"supermarket"},terms:["marks & spencer simply food"],matchScore:2,suggestion:true},"shop/supermarket/MD":{name:"MD",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mdspa.it/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3841263",shop:"supermarket"},addTags:{brand:"MD","brand:wikidata":"Q3841263","brand:wikipedia":"en:MD Discount",name:"MD",shop:"supermarket"},countryCodes:["it"],terms:["md discount"],matchScore:2,suggestion:true},"shop/supermarket/MPREIS":{name:"MPREIS",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MPREIS.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q873491",shop:"supermarket"},addTags:{brand:"MPREIS","brand:wikidata":"Q873491","brand:wikipedia":"de:MPreis",name:"MPREIS",shop:"supermarket"},countryCodes:["at","it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Marc's":{name:"Marc's",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MarcsStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17080259",shop:"supermarket"},addTags:{brand:"Marc's","brand:wikidata":"Q17080259","brand:wikipedia":"en:Marc's",name:"Marc's",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Markant":{name:"Markant",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q57523365",shop:"supermarket"},addTags:{brand:"Markant","brand:wikidata":"Q57523365",name:"Markant",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Market Basket":{name:"Market Basket",icon:"maki-grocery",imageURL:"https://graph.facebook.com/marketbasket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2079198",shop:"supermarket"},addTags:{brand:"Market Basket","brand:wikidata":"Q2079198","brand:wikipedia":"en:Market Basket (New England)",name:"Market Basket",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Marktkauf":{name:"Marktkauf",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMarktkauf.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1533254",shop:"supermarket"},addTags:{brand:"Marktkauf","brand:wikidata":"Q1533254","brand:wikipedia":"de:Marktkauf Holding",name:"Marktkauf",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Martin's Super Markets":{name:"Martin's Super Markets",icon:"maki-grocery",imageURL:"https://graph.facebook.com/martinssupermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6774803",shop:"supermarket"},addTags:{brand:"Martin's Super Markets","brand:wikidata":"Q6774803","brand:wikipedia":"en:Martin's Super Markets",name:"Martin's Super Markets",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Masymas":{name:"Masymas",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMasymas%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6135987",shop:"supermarket"},addTags:{brand:"Masymas","brand:wikidata":"Q6135987","brand:wikipedia":"es:Supermercados Masymas",name:"Masymas",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Match":{name:"Match",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SupermarchesMatch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q513977",shop:"supermarket"},addTags:{brand:"Match","brand:wikidata":"Q513977","brand:wikipedia":"en:Match (supermarket)",name:"Match",shop:"supermarket"},countryCodes:["be","fr","hu","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxi Dia":{name:"Maxi Dia",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DIAEspana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q925132",shop:"supermarket"},addTags:{brand:"Maxi Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Maxi Dia",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxima X":{name:"Maxima X",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MaximaLV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1881222",shop:"supermarket"},addTags:{brand:"Maxima X","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima X",shop:"supermarket"},countryCodes:["bg","ee","lt","lv"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxima XX":{name:"Maxima XX",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MaximaLV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1881222",shop:"supermarket"},addTags:{brand:"Maxima XX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XX",shop:"supermarket"},countryCodes:["bg","ee","lt","lv","pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxima XXX":{name:"Maxima XXX",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MaximaLV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1881222",shop:"supermarket"},addTags:{brand:"Maxima XXX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XXX",shop:"supermarket"},countryCodes:["bg","ee","lt","lv","pl"],terms:["maxima"],matchScore:2,suggestion:true},"shop/supermarket/Maximarkt":{name:"Maximarkt",icon:"maki-grocery",imageURL:"https://graph.facebook.com/meinmaximarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55524814",shop:"supermarket"},addTags:{brand:"Maximarkt","brand:wikidata":"Q55524814","brand:wikipedia":"de:Maximarkt",name:"Maximarkt",shop:"supermarket"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxi (Canada)":{name:"Maxi (Canada)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/maxi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3302441",shop:"supermarket"},addTags:{brand:"Maxi","brand:wikidata":"Q3302441","brand:wikipedia":"fr:Maxi (supermarché)",name:"Maxi",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxi (Serbia)":{name:"Maxi (Serbia)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Maxi.Srbija/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6795490",shop:"supermarket"},addTags:{brand:"Maxi","brand:wikidata":"Q6795490","brand:wikipedia":"en:Maxi (Serbian supermarket)",name:"Maxi",shop:"supermarket"},countryCodes:["rs"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mega Image":{name:"Mega Image",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MegaImageRomania/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6808085",shop:"supermarket"},addTags:{brand:"Mega Image","brand:wikidata":"Q6808085","brand:wikipedia":"en:Mega Image",name:"Mega Image",shop:"supermarket"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mego":{name:"Mego",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mego.lv/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16363314",shop:"supermarket"},addTags:{brand:"Mego","brand:wikidata":"Q16363314","brand:wikipedia":"lv:Mego",name:"Mego",shop:"supermarket"},countryCodes:["lv"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Meijer":{name:"Meijer",icon:"maki-grocery",imageURL:"https://graph.facebook.com/meijer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1917753",shop:"supermarket"},addTags:{brand:"Meijer","brand:wikidata":"Q1917753","brand:wikipedia":"en:Meijer",name:"Meijer",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Meny":{name:"Meny",icon:"maki-grocery",imageURL:"https://graph.facebook.com/meny/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10581720",shop:"supermarket"},addTags:{brand:"Meny","brand:wikidata":"Q10581720","brand:wikipedia":"en:Meny",name:"Meny",shop:"supermarket"},countryCodes:["dk","no"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mercadona":{name:"Mercadona",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mercadona/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q377705",shop:"supermarket"},addTags:{brand:"Mercadona","brand:wikidata":"Q377705","brand:wikipedia":"en:Mercadona",name:"Mercadona",shop:"supermarket"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mercator":{name:"Mercator",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Mercator/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q738412",shop:"supermarket"},addTags:{brand:"Mercator","brand:wikidata":"Q738412","brand:wikipedia":"en:Mercator (retail)",name:"Mercator",shop:"supermarket"},countryCodes:["ba","hr","me","rs","si"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Merkur":{name:"Merkur",icon:"maki-grocery",imageURL:"https://graph.facebook.com/merkurmarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1921857",shop:"supermarket"},addTags:{brand:"Merkur","brand:wikidata":"Q1921857","brand:wikipedia":"de:Merkur (Österreich)",name:"Merkur",shop:"supermarket"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Metro (Ontario)":{name:"Metro (Ontario)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/metro.ontario/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1145669",shop:"supermarket"},addTags:{brand:"Metro","brand:wikidata":"Q1145669","brand:wikipedia":"en:Metro Inc.",name:"Metro",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Metro (Peru)":{name:"Metro (Peru)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/metroperu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16640217",shop:"supermarket"},addTags:{brand:"Metro","brand:wikidata":"Q16640217","brand:wikipedia":"en:Tiendas Metro",name:"Metro",shop:"supermarket"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Metro (Quebec)":{name:"Metro (Quebec)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/metro.ontario/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1145669",shop:"supermarket"},addTags:{brand:"Metro","brand:wikidata":"Q1145669","brand:wikipedia":"fr:Metro (entreprise québécoise)",name:"Metro",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Migros":{name:"Migros",icon:"maki-grocery",imageURL:"https://graph.facebook.com/migros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q680727",shop:"supermarket"},addTags:{brand:"Migros","brand:wikidata":"Q680727","brand:wikipedia":"en:Migros",name:"Migros",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mila":{name:"Mila",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MilaDruciarniaSklep/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48844636",shop:"supermarket"},addTags:{brand:"Mila","brand:wikidata":"Q48844636","brand:wikipedia":"pl:Mila (sieć sklepów)",name:"Mila",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Minipreço":{name:"Minipreço",icon:"maki-grocery",imageURL:"https://graph.facebook.com/minipreco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3042224",shop:"supermarket"},addTags:{brand:"Minipreço","brand:wikidata":"Q3042224","brand:wikipedia":"en:Minipreço",name:"Minipreço",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mix Markt":{name:"Mix Markt",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mixmarkt.eu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q327854",shop:"supermarket"},addTags:{brand:"Mix Markt","brand:wikidata":"Q327854","brand:wikipedia":"de:Mix Markt",name:"Mix Markt",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Monoprix":{name:"Monoprix",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Monoprix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3321241",shop:"supermarket"},addTags:{brand:"Monoprix","brand:wikidata":"Q3321241","brand:wikipedia":"en:Monoprix",name:"Monoprix",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/More":{name:"More",icon:"maki-grocery",imageURL:"https://graph.facebook.com/morestore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6910891",shop:"supermarket"},addTags:{brand:"More","brand:wikidata":"Q6910891","brand:wikipedia":"en:More (store)",name:"More",shop:"supermarket"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Morrisons":{name:"Morrisons",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Morrisons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q922344",shop:"supermarket"},addTags:{brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/NP":{name:"NP",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNP-Markt%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q15836148",shop:"supermarket"},addTags:{brand:"NP","brand:wikidata":"Q15836148","brand:wikipedia":"de:NP-Markt",name:"NP",shop:"supermarket"},terms:["np-markt"],matchScore:2,suggestion:true},"shop/supermarket/Nah & Frisch":{name:"Nah & Frisch",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nahundfrisch.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1963643",shop:"supermarket"},addTags:{brand:"Nah & Frisch","brand:wikidata":"Q1963643","brand:wikipedia":"de:Nah & Frisch",name:"Nah & Frisch",shop:"supermarket"},countryCodes:["at","de"],terms:["nah und frisch"],matchScore:2,suggestion:true},"shop/supermarket/Nahkauf":{name:"Nahkauf",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nahkauf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57515238",shop:"supermarket"},addTags:{brand:"Nahkauf","brand:wikidata":"Q57515238",name:"Nahkauf",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Naturalia":{name:"Naturalia",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Naturaliamagasinsbio/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3337081",shop:"supermarket"},addTags:{brand:"Naturalia","brand:wikidata":"Q3337081","brand:wikipedia":"fr:Naturalia",name:"Naturalia",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Netto Marken-Discount":{name:"Netto Marken-Discount",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nettomarkendiscount/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q879858",shop:"supermarket"},addTags:{brand:"Netto Marken-Discount","brand:wikidata":"Q879858","brand:wikipedia":"de:Netto Marken-Discount",name:"Netto Marken-Discount",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Netto (Les Mousquetaires)":{name:"Netto (Les Mousquetaires)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nettofrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2720988",shop:"supermarket"},addTags:{brand:"Netto","brand:wikidata":"Q2720988","brand:wikipedia":"fr:Netto",name:"Netto",shop:"supermarket"},countryCodes:["fr","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Netto (Salling)":{name:"Netto (Salling)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nettodk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q552652",shop:"supermarket"},addTags:{brand:"Netto","brand:wikidata":"Q552652","brand:wikipedia":"da:Netto (supermarkedskæde)",name:"Netto",shop:"supermarket"},countryCodes:["da","de","pl","se"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Nettó (Iceland)":{name:"Nettó (Iceland)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/netto.is/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q67205962",shop:"supermarket"},addTags:{brand:"Nettó","brand:wikidata":"Q67205962",name:"Nettó",shop:"supermarket"},countryCodes:["is"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/New World":{name:"New World",icon:"maki-grocery",imageURL:"https://graph.facebook.com/newworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7012488",shop:"supermarket"},addTags:{brand:"New World","brand:wikidata":"Q7012488","brand:wikipedia":"en:New World (supermarket)",name:"New World",shop:"supermarket"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Nisa Extra":{name:"Nisa Extra",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nisalocally/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16999069",shop:"supermarket"},addTags:{brand:"Nisa Extra","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa Extra",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/No Frills":{name:"No Frills",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nofrillsCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3342407",shop:"supermarket"},addTags:{brand:"No Frills","brand:wikidata":"Q3342407","brand:wikipedia":"en:No Frills (grocery store)",name:"No Frills",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Norfa XL":{name:"Norfa XL",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Norfalt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1998983",shop:"supermarket"},addTags:{brand:"Norfa XL","brand:wikidata":"Q1998983","brand:wikipedia":"lt:Norfa",name:"Norfa XL",shop:"supermarket"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Norma":{name:"Norma",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNorma%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q450180",shop:"supermarket"},addTags:{brand:"Norma","brand:wikidata":"Q450180","brand:wikipedia":"de:Norma (Handelskette)",name:"Norma",shop:"supermarket"},countryCodes:["at","cz","de","fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Northern Store":{name:"Northern Store",icon:"maki-grocery",imageURL:"https://graph.facebook.com/TheNorthWestCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7754361",shop:"supermarket"},addTags:{brand:"Northern Store","brand:wikidata":"Q7754361","brand:wikipedia":"en:The North West Company",name:"Northern Store",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Okay":{name:"Okay",icon:"maki-grocery",imageURL:"https://graph.facebook.com/okaycompact/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2159701",shop:"supermarket"},addTags:{brand:"Okay","brand:wikidata":"Q2159701","brand:wikipedia":"fr:OKay",name:"Okay",shop:"supermarket"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Olímpica":{name:"Olímpica",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SupertiendaOlimpica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24749847",shop:"supermarket"},addTags:{brand:"Olímpica","brand:wikidata":"Q24749847","brand:wikipedia":"es:Grupo Empresarial Olímpica",name:"Olímpica",shop:"supermarket"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/PLUS":{name:"PLUS",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PLUSsupermarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1978981",shop:"supermarket"},addTags:{brand:"PLUS","brand:wikidata":"Q1978981","brand:wikipedia":"nl:PLUS (Nederlandse supermarkt)",name:"PLUS",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/POLOmarket":{name:"POLOmarket",icon:"maki-grocery",imageURL:"https://graph.facebook.com/polomarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11821937",shop:"supermarket"},addTags:{brand:"POLOmarket","brand:wikidata":"Q11821937","brand:wikipedia":"pl:Polomarket",name:"POLOmarket",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Palí":{name:"Palí",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PaliCostaRica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1064887",shop:"supermarket"},addTags:{brand:"Palí","brand:wikidata":"Q1064887","brand:wikipedia":"es:Walmart de México y Centroamérica",name:"Palí",shop:"supermarket"},countryCodes:["cr","ni"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pam":{name:"Pam",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pampanoramaufficiale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3777398",shop:"supermarket"},addTags:{brand:"Pam","brand:wikidata":"Q3777398","brand:wikipedia":"it:Gruppo PAM",name:"Pam",shop:"supermarket"},countryCodes:["ch","it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Patel Brothers":{name:"Patel Brothers",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pbrosfan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55641396",shop:"supermarket"},addTags:{brand:"Patel Brothers","brand:wikidata":"Q55641396","brand:wikipedia":"en:Patel Brothers",cuisine:"indian",name:"Patel Brothers",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pavilions":{name:"Pavilions",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pavilions/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7155886",shop:"supermarket"},addTags:{brand:"Pavilions","brand:wikidata":"Q7155886","brand:wikipedia":"en:Pavilions (supermarket)",name:"Pavilions",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Penny":{name:"Penny",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPenny-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q284688",shop:"supermarket"},addTags:{brand:"Penny","brand:wikidata":"Q284688","brand:wikipedia":"en:Penny (supermarket)",name:"Penny",shop:"supermarket"},countryCodes:["at","cz","de","hu","it","ro"],terms:["penny market","penny markt"],matchScore:2,suggestion:true},"shop/supermarket/Pick 'n Save":{name:"Pick 'n Save",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PickNSaveStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7371288",shop:"supermarket"},addTags:{brand:"Pick 'n Save","brand:wikidata":"Q7371288","brand:wikipedia":"en:Roundy's",name:"Pick 'n Save",shop:"supermarket"},countryCodes:["us","za"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pick n Pay":{name:"Pick n Pay",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Picknpay/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7190735",shop:"supermarket"},addTags:{brand:"Pick n Pay","brand:wikidata":"Q7190735","brand:wikipedia":"en:Pick n Pay Stores",name:"Pick n Pay",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Piggly Wiggly":{name:"Piggly Wiggly",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pigglywigglystores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3388303",shop:"supermarket"},addTags:{brand:"Piggly Wiggly","brand:wikidata":"Q3388303","brand:wikipedia":"en:Piggly Wiggly",name:"Piggly Wiggly",shop:"supermarket"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pingo Doce":{name:"Pingo Doce",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pingodoce/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1575057",shop:"supermarket"},addTags:{brand:"Pingo Doce","brand:wikidata":"Q1575057","brand:wikipedia":"en:Pingo Doce",name:"Pingo Doce",shop:"supermarket"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Piotr i Paweł":{name:"Piotr i Paweł",icon:"maki-grocery",imageURL:"https://graph.facebook.com/piotripawelstronaoficjalna/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2096356",shop:"supermarket"},addTags:{brand:"Piotr i Paweł","brand:wikidata":"Q2096356","brand:wikipedia":"pl:Piotr i Paweł",name:"Piotr i Paweł",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Plaza Vea":{name:"Plaza Vea",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PlazaVeaOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7203672",shop:"supermarket"},addTags:{brand:"Plaza Vea","brand:wikidata":"Q7203672","brand:wikipedia":"en:Plaza Vea",name:"Plaza Vea",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Plodine":{name:"Plodine",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PlodineHrvatska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58040098",shop:"supermarket"},addTags:{brand:"Plodine","brand:wikidata":"Q58040098",name:"Plodine",shop:"supermarket"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Poiesz":{name:"Poiesz",icon:"maki-grocery",imageURL:"https://graph.facebook.com/poieszsupermarkten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2521700",shop:"supermarket"},addTags:{brand:"Poiesz","brand:wikidata":"Q2521700","brand:wikipedia":"nl:Poiesz Supermarkten",name:"Poiesz",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Price Chopper (Kansas City)":{name:"Price Chopper (Kansas City)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mypricechopper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7242572",shop:"supermarket"},addTags:{brand:"Price Chopper","brand:wikidata":"Q7242572","brand:wikipedia":"en:Price Chopper (supermarket)",name:"Price Chopper",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Price Chopper (New York)":{name:"Price Chopper (New York)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PriceChopper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7242574",shop:"supermarket"},addTags:{brand:"Price Chopper","brand:wikidata":"Q7242574","brand:wikipedia":"en:Price Chopper Supermarkets",name:"Price Chopper",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Prisma":{name:"Prisma",icon:"maki-grocery",imageURL:"https://graph.facebook.com/prisma.fi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12047031",shop:"supermarket"},addTags:{brand:"Prisma","brand:wikidata":"Q12047031","brand:wikipedia":"fi:Prisma (kauppaketju)",name:"Prisma",shop:"supermarket"},countryCodes:["ee","fi","ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Prix":{name:"Prix",icon:"maki-grocery",imageURL:"https://graph.facebook.com/prixqualitaitaliana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994819",shop:"supermarket"},addTags:{brand:"Prix","brand:wikidata":"Q61994819",name:"Prix",shop:"supermarket"},countryCodes:["it"],terms:["prix quality"],matchScore:2,suggestion:true},"shop/supermarket/Profi":{name:"Profi",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Profi.ro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q956664",shop:"supermarket"},addTags:{brand:"Profi","brand:wikidata":"Q956664","brand:wikipedia":"en:Profi",name:"Profi",shop:"supermarket"},countryCodes:["be","hu","ro"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Provigo":{name:"Provigo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ProvigoleMarcheTroisRivieres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3408306",shop:"supermarket"},addTags:{brand:"Provigo","brand:wikidata":"Q3408306","brand:wikipedia":"fr:Provigo",name:"Provigo",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Proxy Delhaize":{name:"Proxy Delhaize",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Delhaize/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q14903417",shop:"supermarket"},addTags:{brand:"Proxy Delhaize","brand:wikidata":"Q14903417","brand:wikipedia":"en:Delhaize Group",name:"Proxy Delhaize",shop:"supermarket"},countryCodes:["be","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Publix":{name:"Publix",icon:"maki-grocery",imageURL:"https://graph.facebook.com/publix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q672170",shop:"supermarket"},addTags:{brand:"Publix","brand:wikidata":"Q672170","brand:wikipedia":"en:Publix",name:"Publix",shop:"supermarket"},countryCodes:["br","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pueblo":{name:"Pueblo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/supermercadospueblo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7258464",shop:"supermarket"},addTags:{brand:"Pueblo","brand:wikidata":"Q7258464","brand:wikipedia":"en:Pueblo Supermarkets",name:"Pueblo",official_name:"Supermercados Pueblo","official_name:en":"Pueblo Supermarkets","official_name:es":"Supermercados Pueblo",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Punto Simply":{name:"Punto Simply",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SDASUPERMERCATI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3484790",shop:"supermarket"},addTags:{brand:"Punto Simply","brand:wikidata":"Q3484790","brand:wikipedia":"it:Simply Market",name:"Punto Simply",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Puregold":{name:"Puregold",icon:"maki-grocery",imageURL:"https://graph.facebook.com/puregold.shopping/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7261170",shop:"supermarket"},addTags:{brand:"Puregold","brand:wikidata":"Q7261170","brand:wikipedia":"en:Puregold",name:"Puregold",shop:"supermarket"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pão de Açúcar":{name:"Pão de Açúcar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/paodeacucar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3411543",shop:"supermarket"},addTags:{brand:"Pão de Açúcar","brand:wikidata":"Q3411543","brand:wikipedia":"pt:Pão de Açúcar (supermercado brasileiro)",name:"Pão de Açúcar",shop:"supermarket"},countryCodes:["br","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/QFC":{name:"QFC",icon:"maki-grocery",imageURL:"https://graph.facebook.com/QFC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7265425",shop:"supermarket"},addTags:{brand:"QFC","brand:wikidata":"Q7265425","brand:wikipedia":"en:QFC",name:"QFC",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Raley's":{name:"Raley's",icon:"maki-grocery",imageURL:"https://graph.facebook.com/raleys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7286970",shop:"supermarket"},addTags:{brand:"Raley's","brand:wikidata":"Q7286970","brand:wikipedia":"en:Raley's Supermarkets",name:"Raley's",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ralphs":{name:"Ralphs",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Ralphs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3929820",shop:"supermarket"},addTags:{brand:"Ralphs","brand:wikidata":"Q3929820","brand:wikipedia":"en:Ralphs",name:"Ralphs",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Real":{name:"Real",icon:"maki-grocery",imageURL:"https://graph.facebook.com/real/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q698473",shop:"supermarket"},addTags:{brand:"Real","brand:wikidata":"Q698473","brand:wikipedia":"en:Real (hypermarket)",name:"Real",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Real Canadian Superstore":{name:"Real Canadian Superstore",icon:"maki-grocery",imageURL:"https://graph.facebook.com/RealCanadianSuperstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7300856",shop:"supermarket"},addTags:{brand:"Real Canadian Superstore","brand:wikidata":"Q7300856","brand:wikipedia":"en:Real Canadian Superstore",name:"Real Canadian Superstore",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Redner's":{name:"Redner's",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7306166",shop:"supermarket"},addTags:{brand:"Redner's","brand:wikidata":"Q7306166","brand:wikipedia":"en:Redner's Markets",name:"Redner's",shop:"supermarket"},countryCodes:["us"],terms:["redners warehouse market"],matchScore:2,suggestion:true},"shop/supermarket/Reliance Fresh":{name:"Reliance Fresh",icon:"maki-grocery",imageURL:"https://graph.facebook.com/RelianceFreshOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7311014",shop:"supermarket"},addTags:{brand:"Reliance Fresh","brand:wikidata":"Q7311014","brand:wikipedia":"en:Reliance Fresh",name:"Reliance Fresh",shop:"supermarket"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Rema 1000":{name:"Rema 1000",icon:"maki-grocery",imageURL:"https://graph.facebook.com/REMA1000/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28459",shop:"supermarket"},addTags:{brand:"Rema 1000","brand:wikidata":"Q28459","brand:wikipedia":"en:REMA 1000",name:"Rema 1000",shop:"supermarket"},countryCodes:["dk","no"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Rewe":{name:"Rewe",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Rewe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16968817",shop:"supermarket"},addTags:{brand:"Rewe","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Rewe City":{name:"Rewe City",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Rewe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16968817",shop:"supermarket"},addTags:{brand:"Rewe City","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe City",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Rimi":{name:"Rimi",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRimi%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7334456",shop:"supermarket"},addTags:{brand:"Rimi","brand:wikidata":"Q7334456","brand:wikipedia":"en:Rimi (Norway)",name:"Rimi",shop:"supermarket"},countryCodes:["ee","lt","lv"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/S-market":{name:"S-market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/smarketkemio/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11891613",shop:"supermarket"},addTags:{brand:"S-market","brand:wikidata":"Q11891613","brand:wikipedia":"fi:S-market",name:"S-market",shop:"supermarket"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Safeway":{name:"Safeway",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Safeway/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1508234",shop:"supermarket"},addTags:{brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Sainsbury's":{name:"Sainsbury's",icon:"maki-grocery",imageURL:"https://graph.facebook.com/sainsburys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q152096",shop:"supermarket"},addTags:{brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Santa Isabel":{name:"Santa Isabel",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SantaIsabelChile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7419620",shop:"supermarket"},addTags:{brand:"Santa Isabel","brand:wikidata":"Q7419620","brand:wikipedia":"es:Santa Isabel (supermercado)",name:"Santa Isabel",shop:"supermarket"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Save-A-Lot":{name:"Save-A-Lot",icon:"maki-grocery",imageURL:"https://graph.facebook.com/savealot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7427972",shop:"supermarket"},addTags:{brand:"Save-A-Lot","brand:wikidata":"Q7427972","brand:wikipedia":"en:Save-A-Lot",name:"Save-A-Lot",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Save-On-Foods":{name:"Save-On-Foods",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SaveOnFoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7427974",shop:"supermarket"},addTags:{brand:"Save-On-Foods","brand:wikidata":"Q7427974","brand:wikipedia":"en:Save-On-Foods",name:"Save-On-Foods",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Schnucks":{name:"Schnucks",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Schnucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7431920",shop:"supermarket"},addTags:{brand:"Schnucks","brand:wikidata":"Q7431920","brand:wikipedia":"en:Schnucks",name:"Schnucks",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Shaw's":{name:"Shaw's",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Shaws/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q578387",shop:"supermarket"},addTags:{brand:"Shaw's","brand:wikidata":"Q578387","brand:wikipedia":"en:Shaw's and Star Market",name:"Shaw's",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Sheng Siong":{name:"Sheng Siong",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3481878",shop:"supermarket"},addTags:{brand:"Sheng Siong","brand:wikidata":"Q3481878","brand:wikipedia":"en:Sheng Siong",name:"Sheng Siong",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/ShopRite (USA)":{name:"ShopRite (USA)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/shoprite.supermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7501097",shop:"supermarket"},addTags:{brand:"ShopRite","brand:wikidata":"Q7501097","brand:wikipedia":"en:ShopRite (United States)",name:"ShopRite",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Shoprite (Africa)":{name:"Shoprite (Africa)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ShopriteSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1857639",shop:"supermarket"},addTags:{brand:"Shoprite","brand:wikidata":"Q1857639","brand:wikipedia":"en:Shoprite (South Africa)",name:"Shoprite",shop:"supermarket"},countryCodes:["ao","bw","cd","gh","ls","mg","mu","mw","mz","na","ng","sz","ug","za","zm"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Shoprite (Isle of Man)":{name:"Shoprite (Isle of Man)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7501242",shop:"supermarket"},addTags:{brand:"Shoprite","brand:wikidata":"Q7501242","brand:wikipedia":"en:Shoprite (Isle of Man)",name:"Shoprite",shop:"supermarket"},countryCodes:["im"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Sigma":{name:"Sigma",icon:"maki-grocery",imageURL:"https://graph.facebook.com/supermercatisigmaitalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3977979",shop:"supermarket"},addTags:{brand:"Sigma","brand:wikidata":"Q3977979","brand:wikipedia":"it:Supermercati Sigma",name:"Sigma",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Simply Market":{name:"Simply Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SDASUPERMERCATI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3484790",shop:"supermarket"},addTags:{brand:"Simply Market","brand:wikidata":"Q3484790","brand:wikipedia":"en:Simply Market",name:"Simply Market",shop:"supermarket"},terms:["simply"],matchScore:2,suggestion:true},"shop/supermarket/Sky":{name:"Sky",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCoop%20Deutschland%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1129779",shop:"supermarket"},addTags:{brand:"Sky","brand:wikidata":"Q1129779","brand:wikipedia":"de:Coop eG",name:"Sky",shop:"supermarket"},countryCodes:["de","lv","nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Smart & Final":{name:"Smart & Final",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SmartFinal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7543916",shop:"supermarket"},addTags:{brand:"Smart & Final","brand:wikidata":"Q7543916","brand:wikipedia":"en:Smart & Final",name:"Smart & Final",shop:"supermarket"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Smith's":{name:"Smith's",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSmithsFoodDrug-logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7544856",shop:"supermarket"},addTags:{brand:"Smith's","brand:wikidata":"Q7544856","brand:wikipedia":"en:Smith's Food and Drug",name:"Smith's",shop:"supermarket"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Sobeys":{name:"Sobeys",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Sobeys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1143340",shop:"supermarket"},addTags:{brand:"Sobeys","brand:wikidata":"Q1143340","brand:wikipedia":"en:Sobeys",name:"Sobeys",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Soriana":{name:"Soriana",icon:"maki-grocery",imageURL:"https://graph.facebook.com/sorianacom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q735562",shop:"supermarket"},addTags:{brand:"Soriana","brand:wikidata":"Q735562","brand:wikipedia":"en:Soriana",name:"Soriana",shop:"supermarket"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Spar":{name:"Spar",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/639011130107633664/nLN6cXfa_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q610492",shop:"supermarket"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Społem":{name:"Społem",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SpolemSpoldzielczoscSpozywcow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11826043",shop:"supermarket"},addTags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Sprouts Farmers Market":{name:"Sprouts Farmers Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SproutsFarmersMarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7581369",shop:"supermarket"},addTags:{brand:"Sprouts Farmers Market","brand:wikidata":"Q7581369","brand:wikipedia":"en:Sprouts Farmers Market",name:"Sprouts Farmers Market",shop:"supermarket",short_name:"Sprouts"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Stater Bros.":{name:"Stater Bros.",icon:"maki-grocery",imageURL:"https://graph.facebook.com/StaterBrosMarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7604016",shop:"supermarket"},addTags:{brand:"Stater Bros.","brand:wikidata":"Q7604016","brand:wikipedia":"en:Stater Bros.",name:"Stater Bros.",shop:"supermarket"},countryCodes:["us"],terms:["stater brothers"],matchScore:2,suggestion:true},"shop/supermarket/Stokrotka":{name:"Stokrotka",icon:"maki-grocery",imageURL:"https://graph.facebook.com/sklepy.stokrotka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9345945",shop:"supermarket"},addTags:{brand:"Stokrotka","brand:wikidata":"Q9345945","brand:wikipedia":"pl:Stokrotka (sieć handlowa)",name:"Stokrotka",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Stop & Shop":{name:"Stop & Shop",icon:"maki-grocery",imageURL:"https://graph.facebook.com/StopandShop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3658429",shop:"supermarket"},addTags:{brand:"Stop & Shop","brand:wikidata":"Q3658429","brand:wikipedia":"en:Stop & Shop",name:"Stop & Shop",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Suma":{name:"Suma",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q58012362",shop:"supermarket"},addTags:{brand:"Suma","brand:wikidata":"Q58012362",name:"Suma",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Supabarn":{name:"Supabarn",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSupabarn%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7641883",shop:"supermarket"},addTags:{brand:"Supabarn","brand:wikidata":"Q7641883","brand:wikipedia":"en:Supabarn Supermarkets",name:"Supabarn",official_name:"Supabarn Supermarkets",shop:"supermarket"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Super C":{name:"Super C",icon:"maki-grocery",imageURL:"https://graph.facebook.com/superc.ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3504127",shop:"supermarket"},addTags:{brand:"Super C","brand:wikidata":"Q3504127","brand:wikipedia":"fr:Super C (entreprise)",name:"Super C",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Super H Mart":{name:"Super H Mart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/hmartofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5636306",shop:"supermarket"},addTags:{brand:"H Mart","brand:wikidata":"Q5636306","brand:wikipedia":"en:H Mart",cuisine:"asian",name:"Super H Mart",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Super One Foods":{name:"Super One Foods",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SuperOneGrocery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17108733",shop:"supermarket"},addTags:{brand:"Super One Foods","brand:wikidata":"Q17108733","brand:wikipedia":"en:Super One Foods",name:"Super One Foods",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Super U":{name:"Super U",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",shop:"supermarket"},addTags:{brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/SuperBrugsen":{name:"SuperBrugsen",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SuperBrugsen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12337746",shop:"supermarket"},addTags:{brand:"SuperBrugsen","brand:wikidata":"Q12337746","brand:wikipedia":"en:SuperBrugsen",name:"SuperBrugsen",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/SuperValu":{name:"SuperValu",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SuperValuIreland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7642081",shop:"supermarket"},addTags:{brand:"SuperValu","brand:wikidata":"Q7642081","brand:wikipedia":"en:SuperValu (Ireland)",name:"SuperValu",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Superama":{name:"Superama",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1145720603724455942/zkMvSg5e_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6135762",shop:"supermarket"},addTags:{brand:"Superama","brand:wikidata":"Q6135762","brand:wikipedia":"es:Superama",name:"Superama",shop:"supermarket"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Supercor":{name:"Supercor",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tusupercor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6135841",shop:"supermarket"},addTags:{brand:"Supercor","brand:wikidata":"Q6135841","brand:wikipedia":"es:Supercor",name:"Supercor",shop:"supermarket"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Supersol":{name:"Supersol",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SupersolSupermercados/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073427",shop:"supermarket"},addTags:{brand:"Supersol","brand:wikidata":"Q62073427",name:"Supersol",shop:"supermarket"},countryCodes:["ar","es","ma","uy"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Superspar":{name:"Superspar",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/639011130107633664/nLN6cXfa_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q610492",shop:"supermarket"},addTags:{brand:"Superspar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Superspar",shop:"supermarket"},countryCodes:["es","za"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/T&T Supermarket":{name:"T&T Supermarket",icon:"maki-grocery",imageURL:"https://graph.facebook.com/TTSupermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q837893",shop:"supermarket"},addTags:{brand:"T&T Supermarket","brand:wikidata":"Q837893","brand:wikipedia":"en:T & T Supermarket",name:"T&T Supermarket",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tegut":{name:"Tegut",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tegut/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1547993",shop:"supermarket"},addTags:{brand:"Tegut","brand:wikidata":"Q1547993","brand:wikipedia":"en:Tegut",name:"Tegut",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tesco":{name:"Tesco",icon:"maki-grocery",imageURL:"https://graph.facebook.com/1183230681723205/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487494",shop:"supermarket"},addTags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tesco Extra":{name:"Tesco Extra",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1168444842420187138/sBm0zlbM_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q25172225",shop:"supermarket"},addTags:{brand:"Tesco Extra","brand:wikidata":"Q25172225","brand:wikipedia":"en:Tesco Extra",name:"Tesco Extra",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tesco Lotus":{name:"Tesco Lotus",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2378901",shop:"supermarket"},addTags:{brand:"Tesco Lotus","brand:wikidata":"Q2378901","brand:wikipedia":"th:เทสโก้ โลตัส",name:"Tesco Lotus",shop:"supermarket"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tesco Metro":{name:"Tesco Metro",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1168444842420187138/sBm0zlbM_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q57551648",shop:"supermarket"},addTags:{brand:"Tesco Metro","brand:wikidata":"Q57551648",name:"Tesco Metro",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/The Co-operative Food (UK)":{name:"The Co-operative Food (UK)",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1034360565127409665/V4fCWHgw_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3277439",shop:"supermarket"},addTags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"supermarket"},countryCodes:["gb"],terms:["coop","coop food","cooperative food","the cooperative"],matchScore:2,suggestion:true},"shop/supermarket/The Fresh Market":{name:"The Fresh Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/TheFreshMarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7735265",shop:"supermarket"},addTags:{brand:"The Fresh Market","brand:wikidata":"Q7735265","brand:wikipedia":"en:The Fresh Market",name:"The Fresh Market",shop:"supermarket"},countryCodes:["us"],terms:["fresh market"],matchScore:2,suggestion:true},"shop/supermarket/The Grocery Outlet":{name:"The Grocery Outlet",icon:"maki-grocery",imageURL:"https://graph.facebook.com/almostperfectinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16062155",shop:"supermarket"},addTags:{brand:"The Grocery Outlet","brand:wikidata":"Q16062155","brand:wikipedia":"en:The Grocery Outlet",name:"The Grocery Outlet",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tigros":{name:"Tigros",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Tigros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24935610",shop:"supermarket"},addTags:{brand:"Tigros","brand:wikidata":"Q24935610","brand:wikipedia":"it:Tigros",name:"Tigros",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Todis":{name:"Todis",icon:"maki-grocery",imageURL:"https://graph.facebook.com/todisbuongiornoconvenienza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3992174",shop:"supermarket"},addTags:{brand:"Todis","brand:wikidata":"Q3992174","brand:wikipedia":"it:Todis",name:"Todis",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tommy":{name:"Tommy",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tommyprodavaonice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12643718",shop:"supermarket"},addTags:{brand:"Tommy","brand:wikidata":"Q12643718","brand:wikipedia":"hr:Tommy",name:"Tommy",shop:"supermarket"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Top Market":{name:"Top Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/topmarketpolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9360044",shop:"supermarket"},addTags:{brand:"Top Market","brand:wikidata":"Q9360044","brand:wikipedia":"pl:Top Market",name:"Top Market",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tops":{name:"Tops",icon:"maki-grocery",imageURL:"https://graph.facebook.com/topsfriendlymarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7825137",shop:"supermarket"},addTags:{brand:"Tops","brand:wikidata":"Q7825137","brand:wikipedia":"en:Tops Friendly Markets",name:"Tops",official_name:"Tops Friendly Markets",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tottus":{name:"Tottus",icon:"maki-grocery",imageURL:"https://graph.facebook.com/TottusPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7828510",shop:"supermarket"},addTags:{brand:"Tottus","brand:wikidata":"Q7828510","brand:wikipedia":"en:Tottus",name:"Tottus",shop:"supermarket"},countryCodes:["cl","pe"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Trader Joe's":{name:"Trader Joe's",icon:"maki-grocery",imageURL:"https://graph.facebook.com/156443021054392/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q688825",shop:"supermarket"},addTags:{brand:"Trader Joe's","brand:wikidata":"Q688825","brand:wikipedia":"en:Trader Joe's",name:"Trader Joe's",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Treff 3000":{name:"Treff 3000",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EDEKA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q701755",shop:"supermarket"},addTags:{brand:"Treff 3000","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Treff 3000",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tuodì":{name:"Tuodì",icon:"maki-grocery",imageURL:"https://graph.facebook.com/TUODI.it/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3706995",shop:"supermarket"},addTags:{brand:"Tuodì","brand:wikidata":"Q3706995","brand:wikipedia":"it:Tuodì",name:"Tuodì",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/U Express":{name:"U Express",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",shop:"supermarket"},addTags:{brand:"U Express","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"U Express",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Unimarc":{name:"Unimarc",icon:"maki-grocery",imageURL:"https://graph.facebook.com/unimarc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6156244",shop:"supermarket"},addTags:{brand:"Unimarc","brand:wikidata":"Q6156244","brand:wikipedia":"es:Unimarc",name:"Unimarc",shop:"supermarket"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Unimarkt":{name:"Unimarkt",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Unimarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1169599",shop:"supermarket"},addTags:{brand:"Unimarkt","brand:wikidata":"Q1169599","brand:wikipedia":"de:Unimarkt",name:"Unimarkt",shop:"supermarket"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Vallarta":{name:"Vallarta",icon:"maki-grocery",imageURL:"https://graph.facebook.com/vallarta.supermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7911833",shop:"supermarket"},addTags:{brand:"Vallarta","brand:wikidata":"Q7911833","brand:wikipedia":"en:Vallarta Supermarkets",cuisine:"latin_american",name:"Vallarta","name:es":"Vallarta",official_name:"Vallarta Supermarkets",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Valu-mart":{name:"Valu-mart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/valumartCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7912687",shop:"supermarket"},addTags:{brand:"Valu-mart","brand:wikidata":"Q7912687","brand:wikipedia":"en:Valu-mart",name:"Valu-mart",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Vea":{name:"Vea",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/760081378868391936/qPOPFsTZ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5858167",shop:"supermarket"},addTags:{brand:"Vea","brand:wikidata":"Q5858167","brand:wikipedia":"es:Vea (supermercado)",name:"Vea",shop:"supermarket"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/VinMart":{name:"VinMart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/sieuthivinmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60245505",shop:"supermarket"},addTags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart",shop:"supermarket"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Volg":{name:"Volg",icon:"maki-grocery",imageURL:"https://graph.facebook.com/1953378021650189/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2530746",shop:"supermarket"},addTags:{brand:"Volg","brand:wikidata":"Q2530746","brand:wikipedia":"de:Volg",name:"Volg",shop:"supermarket"},countryCodes:["ch","li"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Vomar":{name:"Vomar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/vomarvoordeelmarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3202837",shop:"supermarket"},addTags:{brand:"Vomar","brand:wikidata":"Q3202837","brand:wikipedia":"nl:Vomar",name:"Vomar",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Vons":{name:"Vons",icon:"maki-grocery",imageURL:"https://graph.facebook.com/vons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7941609",shop:"supermarket"},addTags:{brand:"Vons","brand:wikidata":"Q7941609","brand:wikipedia":"en:Vons",name:"Vons",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Waitrose":{name:"Waitrose",icon:"maki-grocery",imageURL:"https://graph.facebook.com/waitroseandpartners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q771734",shop:"supermarket"},addTags:{brand:"Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose & Partners",name:"Waitrose",official_name:"Waitrose & Partners",shop:"supermarket"},countryCodes:["gb","je"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Walmart Neighborhood Market":{name:"Walmart Neighborhood Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",shop:"supermarket"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Neighborhood Market",shop:"supermarket"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Walmart Supercenter":{name:"Walmart Supercenter",icon:"maki-grocery",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",shop:"supermarket"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Supercenter",shop:"supermarket"},terms:["walmart supercentre"],matchScore:2,suggestion:true},"shop/supermarket/Wasgau":{name:"Wasgau",icon:"maki-grocery",imageURL:"https://graph.facebook.com/wasgau/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2536857",shop:"supermarket"},addTags:{brand:"Wasgau","brand:wikidata":"Q2536857","brand:wikipedia":"de:Wasgau (Unternehmen)",name:"Wasgau",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Wegmans":{name:"Wegmans",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Wegmans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11288478",shop:"supermarket"},addTags:{brand:"Wegmans","brand:wikidata":"Q11288478","brand:wikipedia":"en:Wegmans",name:"Wegmans",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Weis":{name:"Weis",icon:"maki-grocery",imageURL:"https://graph.facebook.com/WeisMarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7980370",shop:"supermarket"},addTags:{brand:"Weis","brand:wikidata":"Q7980370","brand:wikipedia":"en:Weis Markets",name:"Weis",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Whole Foods Market":{name:"Whole Foods Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/WholeFoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1809448",shop:"supermarket"},addTags:{brand:"Whole Foods Market","brand:wikidata":"Q1809448","brand:wikipedia":"en:Whole Foods Market",name:"Whole Foods Market",shop:"supermarket"},countryCodes:["ca","gb","us"],terms:["whole foods"],matchScore:2,suggestion:true},"shop/supermarket/Willys":{name:"Willys",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Willys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10720214",shop:"supermarket"},addTags:{brand:"Willys","brand:wikidata":"Q10720214","brand:wikipedia":"sv:Willys",name:"Willys",shop:"supermarket"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/WinCo Foods":{name:"WinCo Foods",icon:"maki-grocery",imageURL:"https://graph.facebook.com/winco.official.page/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8023592",shop:"supermarket"},addTags:{brand:"WinCo Foods","brand:wikidata":"Q8023592","brand:wikipedia":"en:WinCo Foods",name:"WinCo Foods",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Winn-Dixie":{name:"Winn-Dixie",icon:"maki-grocery",imageURL:"https://graph.facebook.com/winndixie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1264366",shop:"supermarket"},addTags:{brand:"Winn-Dixie","brand:wikidata":"Q1264366","brand:wikipedia":"en:Winn-Dixie",name:"Winn-Dixie",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Woolworths":{name:"Woolworths",icon:"maki-grocery",imageURL:"https://graph.facebook.com/woolworths/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3249145",shop:"supermarket"},addTags:{brand:"Woolworths","brand:wikidata":"Q3249145","brand:wikipedia":"en:Woolworths Supermarkets",name:"Woolworths",shop:"supermarket"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Your Independent Grocer":{name:"Your Independent Grocer",icon:"maki-grocery",imageURL:"https://graph.facebook.com/YourIndependentGrocer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8058833",shop:"supermarket"},addTags:{brand:"Your Independent Grocer","brand:wikidata":"Q8058833","brand:wikipedia":"en:Your Independent Grocer",name:"Your Independent Grocer",shop:"supermarket"},countryCodes:["ca"],terms:["independent"],matchScore:2,suggestion:true},"shop/supermarket/Zehrs":{name:"Zehrs",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ZehrsON/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8068546",shop:"supermarket"},addTags:{brand:"Zehrs","brand:wikidata":"Q8068546","brand:wikipedia":"en:Zehrs Markets",name:"Zehrs",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/basic":{name:"basic",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBasic%20logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q809994",shop:"supermarket"},addTags:{brand:"basic","brand:wikidata":"Q809994","brand:wikipedia":"de:Basic AG",name:"basic",organic:"only",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/denn's Biomarkt":{name:"denn's Biomarkt",icon:"maki-grocery",imageURL:"https://graph.facebook.com/dennsBiomarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48883773",shop:"supermarket"},addTags:{brand:"denn's Biomarkt","brand:wikidata":"Q48883773",name:"denn's Biomarkt",organic:"only",shop:"supermarket"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/fakta":{name:"fakta",icon:"maki-grocery",imageURL:"https://graph.facebook.com/fakta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3172238",shop:"supermarket"},addTags:{brand:"fakta","brand:wikidata":"Q3172238","brand:wikipedia":"en:Fakta",name:"fakta",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/nah und gut":{name:"nah und gut",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EDEKA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q701755",shop:"supermarket"},addTags:{brand:"nah und gut","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"nah und gut",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Şok":{name:"Şok",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SokMarketler/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19613992",shop:"supermarket"},addTags:{brand:"Şok","brand:wikidata":"Q19613992","brand:wikipedia":"tr:Şok (market)",name:"Şok",shop:"supermarket"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ΑΒ Βασιλόπουλος":{name:"ΑΒ Βασιλόπουλος",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ab.vassilopoulos.sa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4721807",shop:"supermarket"},addTags:{brand:"ΑΒ Βασιλόπουλος","brand:el":"ΑΒ Βασιλόπουλος","brand:en":"AB Vassilopoulos","brand:wikidata":"Q4721807","brand:wikipedia":"el:Άλφα Βήτα Βασιλόπουλος",name:"ΑΒ Βασιλόπουλος","name:el":"ΑΒ Βασιλόπουλος","name:en":"AB Vassilopoulos",shop:"supermarket"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Γαλαξίας":{name:"Γαλαξίας",icon:"maki-grocery",imageURL:"https://graph.facebook.com/galaxias.sm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5518063",shop:"supermarket"},addTags:{brand:"Γαλαξίας","brand:el":"Γαλαξίας","brand:en":"Galaxias","brand:wikidata":"Q5518063","brand:wikipedia":"el:Γαλαξίας (σούπερ μάρκετ)",name:"Γαλαξίας","name:el":"Γαλαξίας","name:en":"Galaxias",shop:"supermarket"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Μασούτης":{name:"Μασούτης",icon:"maki-grocery",imageURL:"https://graph.facebook.com/masoutis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6783887",shop:"supermarket"},addTags:{brand:"Μασούτης","brand:el":"Μασούτης","brand:en":"Masoutis","brand:wikidata":"Q6783887","brand:wikipedia":"en:Masoutis",name:"Μασούτης","name:el":"Μασούτης","name:en":"Masoutis",shop:"supermarket"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Σκλαβενίτης":{name:"Σκλαβενίτης",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Sklabenites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7536037",shop:"supermarket"},addTags:{brand:"Σκλαβενίτης","brand:el":"Σκλαβενίτης","brand:en":"Sklavenitis","brand:wikidata":"Q7536037","brand:wikipedia":"el:Σκλαβενίτης",name:"Σκλαβενίτης","name:el":"Σκλαβενίτης","name:en":"Sklavenitis",shop:"supermarket"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Абсолют (Russia)":{name:"Абсолют (Russia)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q62389597",shop:"supermarket"},addTags:{brand:"Абсолют","brand:wikidata":"Q62389597",name:"Абсолют",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Абсолют (Ukraine)":{name:"Абсолют (Ukraine)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q62389546",shop:"supermarket"},addTags:{brand:"Абсолют","brand:wikidata":"Q62389546",name:"Абсолют",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Азбука Вкуса":{name:"Азбука Вкуса",icon:"maki-grocery",imageURL:"https://graph.facebook.com/azbukavkusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4058209",shop:"supermarket"},addTags:{brand:"Азбука Вкуса","brand:en":"Azbuka Vkusa","brand:wikidata":"Q4058209","brand:wikipedia":"en:Azbuka Vkusa",name:"Азбука Вкуса","name:en":"Azbuka Vkusa",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Атак":{name:"Атак",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1565040269/logo_schiever_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2868738",shop:"supermarket"},addTags:{brand:"Атак","brand:en":"Atac","brand:wikidata":"Q2868738","brand:wikipedia":"ru:Atac",name:"Атак","name:en":"Atac",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ашан":{name:"Ашан",icon:"maki-grocery",imageURL:"https://graph.facebook.com/auchan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q758603",shop:"supermarket"},addTags:{brand:"Ашан","brand:en":"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"ru:Auchan",name:"Ашан","name:en":"Auchan",shop:"supermarket"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Брусничка":{name:"Брусничка",icon:"maki-grocery",imageURL:"https://graph.facebook.com/freshmarket.brusnichka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21656645",shop:"supermarket"},addTags:{brand:"Брусничка","brand:en":"Brusnichka","brand:wikidata":"Q21656645","brand:wikipedia":"uk:Брусничка (торгова мережа)",name:"Брусничка","name:en":"Brusnichka",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Булмаг":{name:"Булмаг",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BulMagSupermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66133376",shop:"supermarket"},addTags:{brand:"Булмаг","brand:en":"BulMag","brand:wikidata":"Q66133376",name:"Булмаг","name:en":"BulMag",shop:"supermarket"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Виктория":{name:"Виктория",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SupermarketVictoria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4111046",shop:"supermarket"},addTags:{brand:"Виктория","brand:wikidata":"Q4111046","brand:wikipedia":"ru:Виктория (сеть магазинов)",name:"Виктория",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Виталюр":{name:"Виталюр",icon:"maki-grocery",imageURL:"https://graph.facebook.com/vitalur.by/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55663075",shop:"supermarket"},addTags:{brand:"Виталюр","brand:wikidata":"Q55663075","brand:wikipedia":"ru:Виталюр",name:"Виталюр",shop:"supermarket"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Вопак":{name:"Вопак",icon:"maki-grocery",imageURL:"https://graph.facebook.com/vopak.com.ua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30966107",shop:"supermarket"},addTags:{brand:"Вопак","brand:en":"Vopak","brand:wikidata":"Q30966107","brand:wikipedia":"uk:Вопак",name:"Вопак","name:en":"Vopak",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Гроздь":{name:"Гроздь",icon:"maki-grocery",imageURL:"https://graph.facebook.com/grozdmag/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21638412",shop:"supermarket"},addTags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Гулливер":{name:"Гулливер",icon:"maki-grocery",imageURL:"https://graph.facebook.com/gullivermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58003470",shop:"supermarket"},addTags:{brand:"Гулливер","brand:wikidata":"Q58003470",name:"Гулливер",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Десяточка":{name:"Десяточка",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q61876182",shop:"supermarket"},addTags:{brand:"Десяточка","brand:en":"Desyatochka","brand:wikidata":"Q61876182",name:"Десяточка",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Дикси":{name:"Дикси",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Dixyclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4161561",shop:"supermarket"},addTags:{brand:"Дикси","brand:en":"Dixy","brand:wikidata":"Q4161561","brand:wikipedia":"ru:Дикси (сеть магазинов)",name:"Дикси",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Евроопт":{name:"Евроопт",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Eurooptby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2565040",shop:"supermarket"},addTags:{brand:"Евроопт","brand:en":"Euroopt","brand:ru":"Евроопт","brand:wikidata":"Q2565040","brand:wikipedia":"be:Еўрагандаль",name:"Евроопт","name:en":"Euroopt","name:ru":"Евроопт",shop:"supermarket"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Евроопт Hyper":{name:"Евроопт Hyper",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q65455975",shop:"supermarket"},addTags:{brand:"Евроопт Hyper","brand:wikidata":"Q65455975",name:"Евроопт Hyper",shop:"supermarket"},countryCodes:["by"],terms:["евроопт гипер"],matchScore:2,suggestion:true},"shop/supermarket/Евроопт Super":{name:"Евроопт Super",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q65455960",shop:"supermarket"},addTags:{brand:"Евроопт Super","brand:wikidata":"Q65455960",name:"Евроопт Super",shop:"supermarket"},countryCodes:["by"],terms:["евроопт супер"],matchScore:2,suggestion:true},"shop/supermarket/Карусель":{name:"Карусель",icon:"maki-grocery",imageURL:"https://graph.facebook.com/karuselgiper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4216307",shop:"supermarket"},addTags:{brand:"Карусель","brand:en":"Karusel","brand:wikidata":"Q4216307","brand:wikipedia":"ru:Карусель (сеть магазинов)",name:"Карусель","name:en":"Karusel",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Кировский":{name:"Кировский",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Kirovskii/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63301903",shop:"supermarket"},addTags:{brand:"Кировский","brand:wikidata":"Q63301903",name:"Кировский",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Командор":{name:"Командор",icon:"maki-grocery",imageURL:"https://graph.facebook.com/prkomandor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61876152",shop:"supermarket"},addTags:{brand:"Командор","brand:en":"Komandor","brand:wikidata":"Q61876152",name:"Командор",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Красный Яр":{name:"Красный Яр",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1786753",shop:"supermarket"},addTags:{brand:"Красный Яр","brand:en":"Krasnyj Jar","brand:wikidata":"Q1786753","brand:wikipedia":"ru:Красный Яр",name:"Красный Яр",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Лента":{name:"Лента",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lentacom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4258608",shop:"supermarket"},addTags:{brand:"Лента","brand:en":"Lenta","brand:wikidata":"Q4258608","brand:wikipedia":"ru:Лента (сеть магазинов)",name:"Лента","name:en":"Lenta",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Магнит":{name:"Магнит",icon:"maki-grocery",imageURL:"https://graph.facebook.com/magnitretail/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q940518",shop:"supermarket"},addTags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Мария-Ра":{name:"Мария-Ра",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mariarashop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4281631",shop:"supermarket"},addTags:{brand:"Мария-Ра","brand:en":"Maria-ra","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра","name:en":"Maria-ra",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Монетка":{name:"Монетка",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q4301704",shop:"supermarket"},addTags:{brand:"Монетка","brand:en":"Monetka","brand:wikidata":"Q4301704","brand:wikipedia":"ru:Монетка (сеть магазинов)",name:"Монетка","name:en":"Monetka",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Народная 7Я семьЯ":{name:"Народная 7Я семьЯ",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F7Family.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4032436",shop:"supermarket"},addTags:{brand:"Народная 7Я семьЯ","brand:en":"People's 7th Family","brand:wikidata":"Q4032436","brand:wikipedia":"ru:Народная 7Я семья",name:"Народная 7Я семьЯ","name:en":"People's 7th Family",shop:"supermarket"},countryCodes:["ru"],terms:["семья"],matchScore:2,suggestion:true},"shop/supermarket/Перекрёсток":{name:"Перекрёсток",icon:"maki-grocery",imageURL:"https://graph.facebook.com/perekrestok/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1684639",shop:"supermarket"},addTags:{brand:"Перекрёсток","brand:en":"Perekryostok","brand:wikidata":"Q1684639","brand:wikipedia":"en:Perekrestok (supermarket chain)",name:"Перекрёсток",shop:"supermarket"},countryCodes:["ru"],terms:["перекресток"],matchScore:2,suggestion:true},"shop/supermarket/Покупочка":{name:"Покупочка",icon:"maki-grocery",imageURL:"https://graph.facebook.com/121978851838251/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58003270",shop:"supermarket"},addTags:{brand:"Покупочка","brand:wikidata":"Q58003270",name:"Покупочка",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Полушка":{name:"Полушка",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q4371080",shop:"supermarket"},addTags:{brand:"Полушка","brand:en":"Polushka","brand:wikidata":"Q4371080","brand:wikipedia":"ru:Полушка (сеть магазинов)",name:"Полушка","name:en":"Polushka",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Пятёрочка":{name:"Пятёрочка",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pyaterochka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1768969",shop:"supermarket"},addTags:{brand:"Пятёрочка","brand:en":"Pyaterochka","brand:wikidata":"Q1768969","brand:wikipedia":"ru:Пятёрочка",name:"Пятёрочка","name:en":"Pyaterochka",shop:"supermarket"},countryCodes:["ru"],terms:["пятерочка"],matchScore:2,suggestion:true},"shop/supermarket/Радеж":{name:"Радеж",icon:"maki-grocery",imageURL:"https://graph.facebook.com/radezhshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4387165",shop:"supermarket"},addTags:{brand:"Радеж","brand:en":"Radezh","brand:wikidata":"Q4387165","brand:wikipedia":"ru:Радеж (торговая сеть)",name:"Радеж","name:en":"Radezh",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Рукавичка":{name:"Рукавичка",icon:"maki-grocery",imageURL:"https://graph.facebook.com/rukavychka.ua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20092568",shop:"supermarket"},addTags:{brand:"Рукавичка","brand:en":"Rukavychka","brand:wikidata":"Q20092568","brand:wikipedia":"uk:Рукавичка (торгова мережа)",name:"Рукавичка","name:en":"Rukavychka",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Светофор":{name:"Светофор",icon:"maki-grocery",imageURL:"https://graph.facebook.com/svetoforkryj/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61875920",shop:"supermarket"},addTags:{brand:"Светофор","brand:en":"Svetofor","brand:wikidata":"Q61875920",name:"Светофор",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Семишагофф":{name:"Семишагофф",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q58003374",shop:"supermarket"},addTags:{brand:"Семишагофф","brand:wikidata":"Q58003374",name:"Семишагофф",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Сільпо":{name:"Сільпо",icon:"maki-grocery",imageURL:"https://graph.facebook.com/silpo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4419434",shop:"supermarket"},addTags:{brand:"Сільпо","brand:en":"Silpo","brand:wikidata":"Q4419434","brand:wikipedia":"en:Silpo",name:"Сільпо","name:en":"Silpo",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Таврия В":{name:"Таврия В",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tavriavonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61823146",shop:"supermarket"},addTags:{brand:"Таврия В","brand:wikidata":"Q61823146","brand:wikipedia":"uk:Таврія В",name:"Таврия В",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Фора":{name:"Фора",icon:"maki-grocery",imageURL:"https://graph.facebook.com/fora.ukraine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12165977",shop:"supermarket"},addTags:{brand:"Фора","brand:en":"Fora","brand:wikidata":"Q12165977","brand:wikipedia":"uk:Фора (мережа магазинів)",name:"Фора","name:en":"Fora",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Фуршет":{name:"Фуршет",icon:"maki-grocery",imageURL:"https://graph.facebook.com/furshetcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4493564",shop:"supermarket"},addTags:{brand:"Фуршет","brand:en":"Furshet","brand:wikidata":"Q4493564","brand:wikipedia":"uk:Фуршет (мережа супермаркетів)",name:"Фуршет","name:en":"Furshet",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Эдельвейс":{name:"Эдельвейс",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q57979368",shop:"supermarket"},addTags:{brand:"Эдельвейс","brand:en":"Edelveis","brand:wikidata":"Q57979368",name:"Эдельвейс","name:en":"Edelveis",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/いなげや":{name:"いなげや",icon:"maki-grocery",imageURL:"https://graph.facebook.com/151131734909829/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17193392",shop:"supermarket"},addTags:{brand:"いなげや","brand:en":"Inageya","brand:ja":"いなげや","brand:wikidata":"Q17193392","brand:wikipedia":"ja:いなげや",name:"いなげや","name:en":"Inageya","name:ja":"いなげや",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/まいばすけっと":{name:"まいばすけっと",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mybasket.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11278154",shop:"supermarket"},addTags:{brand:"まいばすけっと","brand:en":"My Basket","brand:ja":"まいばすけっと","brand:wikidata":"Q11278154","brand:wikipedia":"ja:まいばすけっと",name:"まいばすけっと","name:en":"My Basket","name:ja":"まいばすけっと",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/アコレ":{name:"アコレ",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11283128",shop:"supermarket"},addTags:{"alt_name:en":"Acolle",brand:"アコレ","brand:en":"A・Colle","brand:ja":"アコレ","brand:wikidata":"Q11283128","brand:wikipedia":"ja:アコレ",name:"アコレ","name:en":"A・Colle","name:ja":"アコレ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/イオン":{name:"イオン",icon:"maki-grocery",imageURL:"https://graph.facebook.com/aeonretail.english/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11285951",shop:"supermarket"},addTags:{brand:"イオン","brand:en":"AEON","brand:ja":"イオン","brand:wikidata":"Q11285951","brand:wikipedia":"ja:イオン (店舗ブランド)",name:"イオン","name:en":"AEON","name:ja":"イオン",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/イズミヤ":{name:"イズミヤ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/izumiya.co.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11286632",shop:"supermarket"},addTags:{brand:"イズミヤ","brand:en":"Izumiya","brand:ja":"イズミヤ","brand:wikidata":"Q11286632","brand:wikipedia":"ja:イズミヤ",name:"イズミヤ","name:en":"Izumiya","name:ja":"イズミヤ",shop:"supermarket"},countryCodes:["jp"],terms:["いづみや"],matchScore:2,suggestion:true},"shop/supermarket/イトーヨーカドー":{name:"イトーヨーカドー",icon:"maki-grocery",imageURL:"https://graph.facebook.com/itoyokado/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3088746",shop:"supermarket"},addTags:{brand:"イトーヨーカドー","brand:en":"Ito-Yokado","brand:ja":"イトーヨーカドー","brand:wikidata":"Q3088746","brand:wikipedia":"en:Ito-Yokado",name:"イトーヨーカドー","name:en":"Ito-Yokado","name:ja":"イトーヨーカドー",shop:"supermarket"},countryCodes:["jp"],terms:["イトーヨーカ堂"],matchScore:2,suggestion:true},"shop/supermarket/オリンピック":{name:"オリンピック",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1113319986393518080/QC3um42C_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q11292764",shop:"supermarket"},addTags:{brand:"オリンピック","brand:en":"Olympic","brand:ja":"オリンピック","brand:wikidata":"Q11292764","brand:wikipedia":"ja:Olympicグループ",name:"オリンピック","name:en":"Olympic","name:ja":"オリンピック",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/カスミ":{name:"カスミ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/kasumi.fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11294160",shop:"supermarket"},addTags:{brand:"カスミ","brand:en":"Kasumi","brand:ja":"カスミ","brand:wikidata":"Q11294160","brand:wikipedia":"ja:カスミ",name:"カスミ","name:en":"Kasumi","name:ja":"カスミ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/コープ":{name:"コープ",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCoop-Logo.PNG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11508615",shop:"supermarket"},addTags:{"alt_name:en":"Co-op",brand:"コープ","brand:en":"CO・OP","brand:ja":"コープ","brand:wikidata":"Q11508615","brand:wikipedia":"ja:日本生活協同組合連合会",name:"コープ","name:ja":"コープ",official_name:"日本生活協同組合連合会","official_name:en":"Japanese Consumers' Co-operative Union",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/コープこう":{name:"コープこう",icon:"maki-grocery",imageURL:"https://graph.facebook.com/coopkobe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5137453",shop:"supermarket"},addTags:{"alt_name:en":"Co-op Kobe",brand:"コープこう","brand:en":"CO・OP Kobe","brand:ja":"コープこう","brand:wikidata":"Q5137453","brand:wikipedia":"ja:生活協同組合コープこうべ",name:"コープこう","name:en":"CO・OP Kobe","name:ja":"コープこう",official_name:"生活協同組合コープこうべ","official_name:en":"The Consumer Co-operative Kobe",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/サミット":{name:"サミット",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/877018274264883201/pgvUi2hw_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11305129",shop:"supermarket"},addTags:{brand:"サミット","brand:en":"Summit","brand:ja":"サミット","brand:wikidata":"Q11305129","brand:wikipedia":"ja:サミット (チェーンストア)",name:"サミット","name:en":"Summit","name:ja":"サミット",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/スーパーバリュー":{name:"スーパーバリュー",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11313802",shop:"supermarket"},addTags:{brand:"スーパーバリュー","brand:en":"Super Value","brand:ja":"スーパーバリュー","brand:wikidata":"Q11313802","brand:wikipedia":"ja:スーパーバリュー",name:"スーパーバリュー","name:en":"Super Value","name:ja":"スーパーバリュー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ダイエー":{name:"ダイエー",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1002058776394973184/9J-cu2yh_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11316644",shop:"supermarket"},addTags:{brand:"ダイエー","brand:en":"daiei","brand:ja":"ダイエー","brand:wikidata":"Q11316644","brand:wikipedia":"ja:ダイエー (店舗ブランド)",name:"ダイエー","name:en":"Daiei","name:ja":"ダイエー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/トウズ":{name:"トウズ",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q53308796",shop:"supermarket"},addTags:{brand:"トウズ","brand:en":"Tou's","brand:ja":"トウズ","brand:wikidata":"Q53308796","brand:wikipedia":"ja:トウズ",name:"トウズ","name:en":"Tou's","name:ja":"トウズ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/バロー":{name:"バロー",icon:"maki-grocery",imageURL:"https://graph.facebook.com/138259402886129/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11328346",shop:"supermarket"},addTags:{brand:"バロー","brand:en":"Valor","brand:ja":"バロー","brand:wikidata":"Q11328346","brand:wikipedia":"ja:バロー (チェーンストア)",name:"バロー","name:en":"Valor","name:ja":"バロー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ベイシア":{name:"ベイシア",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11336776",shop:"supermarket"},addTags:{brand:"ベイシア","brand:en":"Beisia","brand:ja":"ベイシア","brand:wikidata":"Q11336776","brand:wikipedia":"ja:ベイシア",name:"ベイシア","name:en":"Beisia","name:ja":"ベイシア",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/マックスバリュ":{name:"マックスバリュ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/158243057524643/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1960109",shop:"supermarket"},addTags:{brand:"マックスバリュ","brand:en":"Maxvalu Tokai","brand:ja":"マックスバリュ","brand:wikidata":"Q1960109","brand:wikipedia":"en:MaxValu",name:"マックスバリュ","name:en":"Maxvalu Tokai","name:ja":"マックスバリュ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/マルエツ":{name:"マルエツ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/maruetsu.rakuten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11341197",shop:"supermarket"},addTags:{brand:"マルエツ","brand:en":"Maruetsu","brand:ja":"マルエツ","brand:wikidata":"Q11341197","brand:wikipedia":"ja:マルエツ",name:"マルエツ","name:en":"Maruetsu","name:ja":"マルエツ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ヤオコー":{name:"ヤオコー",icon:"maki-grocery",imageURL:"https://graph.facebook.com/yaokococoro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11344967",shop:"supermarket"},addTags:{brand:"ヤオコー","brand:en":"Yaoko","brand:ja":"ヤオコー","brand:wikidata":"Q11344967","brand:wikipedia":"ja:ヤオコー",name:"ヤオコー","name:en":"Yaoko","name:ja":"ヤオコー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ヨークベニマル":{name:"ヨークベニマル",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ybfan89/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11346199",shop:"supermarket"},addTags:{brand:"ヨークベニマル","brand:en":"York Benimaru","brand:ja":"ヨークベニマル","brand:wikidata":"Q11346199","brand:wikipedia":"ja:ヨークベニマル",name:"ヨークベニマル","name:en":"York Benimaru","name:ja":"ヨークベニマル",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ヨークマート":{name:"ヨークマート",icon:"maki-grocery",imageURL:"https://graph.facebook.com/137658762945673/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11346201",shop:"supermarket"},addTags:{brand:"ヨークマート","brand:en":"YorkMart","brand:ja":"ヨークマート","brand:wikidata":"Q11346201","brand:wikipedia":"ja:ヨークマート",name:"ヨークマート","name:en":"YorkMart","name:ja":"ヨークマート",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ライフ":{name:"ライフ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lifecorp428/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11346476",shop:"supermarket"},addTags:{brand:"ライフ","brand:en":"Life","brand:ja":"ライフ","brand:wikidata":"Q11346476","brand:wikipedia":"ja:ライフコーポレーション",name:"ライフ","name:en":"Life","name:ja":"ライフ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ワイズマート":{name:"ワイズマート",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1025282426530975744/QlC5k-zI_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11351175",shop:"supermarket"},addTags:{brand:"ワイズマート","brand:en":"Y'smart","brand:ja":"ワイズマート","brand:wikidata":"Q11351175","brand:wikipedia":"ja:ワイズマート",name:"ワイズマート","name:en":"Y'smart","name:ja":"ワイズマート",shop:"supermarket"},countryCodes:["jp"],terms:["よしのぶっさん"],matchScore:2,suggestion:true},"shop/supermarket/全聯":{name:"全聯",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pxmartchannel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7262792",shop:"supermarket"},addTags:{brand:"全聯","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯","name:en":"Pxmart",shop:"supermarket"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/全聯福利中心":{name:"全聯福利中心",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pxmartchannel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7262792",shop:"supermarket"},addTags:{brand:"全聯福利中心","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯福利中心","name:en":"Pxmart",shop:"supermarket"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/家乐福":{name:"家乐福",icon:"maki-grocery",imageURL:"https://graph.facebook.com/carrefour/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q217599",shop:"supermarket"},addTags:{brand:"家乐福","brand:wikidata":"Q217599","brand:wikipedia":"wuu:家乐福",name:"家乐福",shop:"supermarket"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/惠康 Wellcome":{name:"惠康 Wellcome",icon:"maki-grocery",imageURL:"https://graph.facebook.com/wellcome.supermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q706247",shop:"supermarket"},addTags:{brand:"惠康 Wellcome","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"zh:惠康",name:"惠康 Wellcome","name:en":"Wellcome",shop:"supermarket"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/東急ストア":{name:"東急ストア",icon:"maki-grocery",imageURL:"https://graph.facebook.com/255001091240615/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11526963",shop:"supermarket"},addTags:{brand:"東急ストア","brand:en":"Tokyu Store","brand:ja":"東急ストア","brand:wikidata":"Q11526963","brand:wikipedia":"ja:東急ストア",name:"東急ストア","name:en":"Tokyu Store","name:ja":"東急ストア",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/東武ストア":{name:"東武ストア",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11527478",shop:"supermarket"},addTags:{brand:"東武ストア","brand:en":"Tobu Store","brand:ja":"東武ストア","brand:wikidata":"Q11527478","brand:wikipedia":"ja:東武ストア",name:"東武ストア","name:en":"Tobu Store","name:ja":"東武ストア",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/業務スーパー":{name:"業務スーパー",icon:"maki-grocery",imageURL:"https://graph.facebook.com/gsjdf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11590183",shop:"supermarket"},addTags:{brand:"業務スーパー","brand:en":"Gyomu Super","brand:ja":"業務スーパー","brand:wikidata":"Q11590183","brand:wikipedia":"ja:神戸物産",name:"業務スーパー","name:en":"Gyōmu sūpā","name:ja":"業務スーパー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/沃尔玛":{name:"沃尔玛",icon:"maki-grocery",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",shop:"supermarket"},addTags:{brand:"沃尔玛","brand:en":"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"wuu:沃尔玛",name:"沃尔玛","name:en":"Walmart",shop:"supermarket"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/美廉社":{name:"美廉社",icon:"maki-grocery",imageURL:"https://graph.facebook.com/simplemart1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15914017",shop:"supermarket"},addTags:{brand:"美廉社","brand:en":"Simple Mart","brand:wikidata":"Q15914017","brand:wikipedia":"zh:美廉社",name:"美廉社","name:en":"Simple Mart",shop:"supermarket"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/西友":{name:"西友",icon:"maki-grocery",imageURL:"https://graph.facebook.com/yourrepo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3108542",shop:"supermarket"},addTags:{brand:"西友","brand:en":"Seiyu","brand:wikidata":"Q3108542","brand:wikipedia":"en:Seiyu Group",name:"西友","name:en":"Seiyu",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/頂好":{name:"頂好",icon:"maki-grocery",imageURL:"https://graph.facebook.com/wellcome.supermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q706247",shop:"supermarket"},addTags:{brand:"頂好","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好","name:en":"Wellcome",shop:"supermarket"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/頂好超市":{name:"頂好超市",icon:"maki-grocery",imageURL:"https://graph.facebook.com/wellcome.supermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q706247",shop:"supermarket"},addTags:{brand:"頂好超市","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好超市","name:en":"Wellcome",shop:"supermarket"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/롯데마트":{name:"롯데마트",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lottemart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q326715",shop:"supermarket"},addTags:{brand:"롯데마트","brand:ko":"롯데마트","brand:wikidata":"Q326715","brand:wikipedia":"ko:롯데마트",name:"롯데마트","name:en":"Lotte Mart","name:ko":"롯데마트",shop:"supermarket"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/하나로마트":{name:"하나로마트",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q12590611",shop:"supermarket"},addTags:{brand:"하나로마트","brand:en":"Hanaro Mart","brand:ko":"하나로마트","brand:wikidata":"Q12590611","brand:wikipedia":"ko:농협유통",name:"하나로마트","name:ko":"하나로마트",shop:"supermarket"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/swimming_pool/Leslie's Pool Supplies":{name:"Leslie's Pool Supplies",icon:"fas-swimmer",imageURL:"https://graph.facebook.com/LesliesPoolSupplies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6530568",shop:"swimming_pool"},addTags:{brand:"Leslie's Pool Supplies","brand:wikidata":"Q6530568","brand:wikipedia":"en:Leslie's Poolmart",name:"Leslie's Pool Supplies",official_name:"Leslie's Pool Supplies Service & Repair",shop:"swimming_pool"},countryCodes:["us"],terms:["leslies pool supply","leslies swimming pool supplies"],matchScore:2,suggestion:true},"shop/tea/DavidsTea":{name:"DavidsTea",icon:"maki-teahouse",imageURL:"https://graph.facebook.com/DAVIDsTEA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3019129",shop:"tea"},addTags:{brand:"DavidsTea","brand:wikidata":"Q3019129","brand:wikipedia":"en:DavidsTea",name:"DavidsTea",shop:"tea"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/tea/T2":{name:"T2",icon:"maki-teahouse",imageURL:"https://graph.facebook.com/T2Tea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48802134",shop:"tea"},addTags:{brand:"T2","brand:wikidata":"Q48802134","brand:wikipedia":"en:T2 (Australian company)",name:"T2",shop:"tea"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/tea/TeeGschwendner":{name:"TeeGschwendner",icon:"maki-teahouse",imageURL:"https://graph.facebook.com/TeeGschwendner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2399969",shop:"tea"},addTags:{brand:"TeeGschwendner","brand:wikidata":"Q2399969","brand:wikipedia":"de:TeeGschwendner",name:"TeeGschwendner",shop:"tea"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/A1":{name:"A1",icon:"maki-telephone",imageURL:"https://graph.facebook.com/A1Fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q688755",shop:"telecommunication"},addTags:{brand:"A1","brand:wikidata":"Q688755","brand:wikipedia":"en:A1 Telekom Austria Group",name:"A1",shop:"telecommunication"},countryCodes:["at","bg","by","hr","si"],terms:["velcom","velcom|a1","велком"],matchScore:2,suggestion:true},"shop/telecommunication/Bell":{name:"Bell",icon:"maki-telephone",imageURL:"https://graph.facebook.com/BellCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q815694",shop:"telecommunication"},addTags:{brand:"Bell","brand:wikidata":"Q815694","brand:wikipedia":"en:Bell Canada",name:"Bell",shop:"telecommunication"},countryCodes:["ca"],terms:["bell canada"],matchScore:2,suggestion:true},"shop/telecommunication/Malitel":{name:"Malitel",icon:"maki-telephone",geometry:["point","area"],tags:{"brand:wikidata":"Q6743829",shop:"telecommunication"},addTags:{brand:"Malitel","brand:wikidata":"Q6743829","brand:wikipedia":"en:Malitel",name:"Malitel",shop:"telecommunication"},countryCodes:["ml"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/Ooredoo":{name:"Ooredoo",icon:"maki-telephone",imageURL:"https://graph.facebook.com/ooredooqatar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q919935",shop:"telecommunication"},addTags:{brand:"Ooredoo","brand:wikidata":"Q919935","brand:wikipedia":"en:Ooredoo",name:"Ooredoo",shop:"telecommunication"},terms:[],matchScore:2,suggestion:true},"shop/telecommunication/Orange Mali":{name:"Orange Mali",icon:"maki-telephone",imageURL:"https://pbs.twimg.com/profile_images/905755776660234248/CaXneU0v_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3355061",shop:"telecommunication"},addTags:{brand:"Orange Mali","brand:wikidata":"Q3355061","brand:wikipedia":"fr:Orange Mali",name:"Orange Mali",shop:"telecommunication"},countryCodes:["ml"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/Spectrum":{name:"Spectrum",icon:"maki-telephone",imageURL:"https://graph.facebook.com/Spectrum/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7805197",shop:"telecommunication"},addTags:{brand:"Spectrum","brand:wikidata":"Q7805197","brand:wikipedia":"en:Spectrum (cable service)",name:"Spectrum",shop:"telecommunication"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/Xfinity":{name:"Xfinity",icon:"maki-telephone",imageURL:"https://pbs.twimg.com/profile_images/1131771952828375040/wTv-dtEe_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q5151002",shop:"telecommunication"},addTags:{brand:"Xfinity","brand:wikidata":"Q5151002","brand:wikipedia":"en:Xfinity",name:"Xfinity",shop:"telecommunication"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/МТС":{name:"МТС",icon:"maki-telephone",imageURL:"https://graph.facebook.com/mts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1368919",shop:"telecommunication"},addTags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"telecommunication"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/Ростелеком":{name:"Ростелеком",icon:"maki-telephone",imageURL:"https://graph.facebook.com/288785311160831/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1477012",shop:"telecommunication"},addTags:{brand:"Ростелеком","brand:wikidata":"Q1477012","brand:wikipedia":"en:Rostelecom",name:"Ростелеком",shop:"telecommunication"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/Укртелеком":{name:"Укртелеком",icon:"maki-telephone",imageURL:"https://graph.facebook.com/Ukrtelecom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1505321",shop:"telecommunication"},addTags:{brand:"Укртелеком","brand:wikidata":"Q1505321","brand:wikipedia":"en:Ukrtelecom",name:"Укртелеком",shop:"telecommunication"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/中華電信":{name:"中華電信",icon:"maki-telephone",imageURL:"https://graph.facebook.com/684453775036802/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q717531",shop:"telecommunication"},addTags:{brand:"中華電信","brand:en":"Chunghwa Telecom","brand:wikidata":"Q717531","brand:wikipedia":"zh:中華電信","brand:zh":"中華電信",name:"中華電信","name:en":"Chunghwa Telecom","name:zh":"中華電信",shop:"telecommunication"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/遠傳電信":{name:"遠傳電信",icon:"maki-telephone",imageURL:"https://graph.facebook.com/fareastone/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5434486",shop:"telecommunication"},addTags:{brand:"遠傳電信","brand:en":"FarEasTone","brand:wikidata":"Q5434486","brand:wikipedia":"zh:遠傳電信","brand:zh":"遠傳電信",name:"遠傳電信","name:en":"FarEasTone","name:zh":"遠傳電信",shop:"telecommunication"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/ticket/Boutique Grandes Lignes":{name:"Boutique Grandes Lignes",icon:"fas-ticket-alt",imageURL:"https://graph.facebook.com/SNCFOFFICIEL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13646",shop:"ticket"},addTags:{brand:"Boutique Grandes Lignes","brand:wikidata":"Q13646","brand:wikipedia":"fr:Société nationale des chemins de fer français",name:"Boutique Grandes Lignes",shop:"ticket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/ticket/DB Reisezentrum":{name:"DB Reisezentrum",icon:"fas-ticket-alt",imageURL:"https://graph.facebook.com/348950735250586/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15842100",shop:"ticket"},addTags:{brand:"DB Reisezentrum","brand:wikidata":"Q15842100","brand:wikipedia":"de:Reisezentrum",name:"DB Reisezentrum",shop:"ticket"},countryCodes:["de"],terms:["reisezentrum"],matchScore:2,suggestion:true},"shop/ticket/Guichet Transilien":{name:"Guichet Transilien",icon:"fas-ticket-alt",imageURL:"https://pbs.twimg.com/profile_images/1187367754988429313/HmyF6sUy_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q389554",shop:"ticket"},addTags:{brand:"Guichet Transilien","brand:wikidata":"Q389554","brand:wikipedia":"fr:Transilien",name:"Guichet Transilien",shop:"ticket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/tiles/Topps Tiles":{name:"Topps Tiles",icon:"maki-shop",imageURL:"https://graph.facebook.com/toppstiles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17026595",shop:"tiles"},addTags:{brand:"Topps Tiles","brand:wikidata":"Q17026595","brand:wikipedia":"en:Topps Tiles",name:"Topps Tiles",shop:"tiles"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/tobacco/Nemzeti Dohánybolt":{name:"Nemzeti Dohánybolt",icon:"temaki-pipe",imageURL:"https://graph.facebook.com/195460840603881/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20639040",shop:"tobacco"},addTags:{brand:"Nemzeti Dohánybolt","brand:wikidata":"Q20639040","brand:wikipedia":"en:Dohánybolt",name:"Nemzeti Dohánybolt",shop:"tobacco"},countryCodes:["hu"],terms:["dohánybolt"],matchScore:2,suggestion:true},"shop/tool_hire/HSS Hire":{name:"HSS Hire",icon:"temaki-tools",imageURL:"https://pbs.twimg.com/profile_images/1128980411504373760/yYZco9IU_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q5636000",shop:"tool_hire"},addTags:{brand:"HSS Hire","brand:wikidata":"Q5636000","brand:wikipedia":"en:HSS Hire",name:"HSS Hire",shop:"tool_hire"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/toys/Build-A-Bear Workshop":{name:"Build-A-Bear Workshop",icon:"fas-rocket",imageURL:"https://graph.facebook.com/Buildabear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1002992",shop:"toys"},addTags:{brand:"Build-A-Bear Workshop","brand:wikidata":"Q1002992","brand:wikipedia":"en:Build-A-Bear Workshop",name:"Build-A-Bear Workshop",shop:"toys"},countryCodes:["ca","gb","us"],terms:["build a bear"],matchScore:2,suggestion:true},"shop/toys/Dráčik":{name:"Dráčik",icon:"fas-rocket",imageURL:"https://graph.facebook.com/2185187834828492/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57653669",shop:"toys"},addTags:{brand:"Dráčik","brand:wikidata":"Q57653669",name:"Dráčik",shop:"toys"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"shop/toys/Early Learning Centre":{name:"Early Learning Centre",icon:"fas-rocket",imageURL:"https://pbs.twimg.com/profile_images/1169193556151537664/rPFaBs5D_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5326681",shop:"toys"},addTags:{alt_name:"ELC",brand:"Early Learning Centre","brand:wikidata":"Q5326681","brand:wikipedia":"en:Early Learning Centre",name:"Early Learning Centre",shop:"toys"},terms:["early learning center"],matchScore:2,suggestion:true},"shop/toys/Hawkin's Bazaar":{name:"Hawkin's Bazaar",icon:"fas-rocket",imageURL:"https://graph.facebook.com/HawkinsBazaar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16983539",shop:"toys"},addTags:{brand:"Hawkin's Bazaar","brand:wikidata":"Q16983539",name:"Hawkin's Bazaar",shop:"toys"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/toys/Intertoys":{name:"Intertoys",icon:"fas-rocket",imageURL:"https://graph.facebook.com/Intertoys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1891407",shop:"toys"},addTags:{brand:"Intertoys","brand:wikidata":"Q1891407","brand:wikipedia":"nl:Intertoys",name:"Intertoys",shop:"toys"},countryCodes:["be","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/toys/JouéClub":{name:"JouéClub",icon:"fas-rocket",imageURL:"https://graph.facebook.com/JoueClubFr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3187152",shop:"toys"},addTags:{brand:"JouéClub","brand:wikidata":"Q3187152","brand:wikipedia":"fr:JouéClub",name:"JouéClub",shop:"toys"},countryCodes:["ad","fr","it","lb","ma","qa"],terms:[],matchScore:2,suggestion:true},"shop/toys/King Jouet":{name:"King Jouet",icon:"fas-rocket",imageURL:"https://graph.facebook.com/KingJouet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3197009",shop:"toys"},addTags:{brand:"King Jouet","brand:en":"King Toy","brand:wikidata":"Q3197009","brand:wikipedia":"fr:King Jouet",name:"King Jouet","name:en":"King Toy",shop:"toys"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/toys/La Grande Récré":{name:"La Grande Récré",icon:"fas-rocket",imageURL:"https://graph.facebook.com/lagranderecre/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3209556",shop:"toys"},addTags:{brand:"La Grande Récré","brand:wikidata":"Q3209556","brand:wikipedia":"fr:La Grande Récré (magasin)",name:"La Grande Récré",shop:"toys"},countryCodes:["be","ci","es","fr","ma"],terms:[],matchScore:2,suggestion:true},"shop/toys/Lego":{name:"Lego",icon:"fas-rocket",imageURL:"https://graph.facebook.com/lego/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1063455",shop:"toys"},addTags:{brand:"Lego","brand:wikidata":"Q1063455","brand:wikipedia":"en:The Lego Group",name:"Lego",shop:"toys"},terms:["lego store"],matchScore:2,suggestion:true},"shop/toys/Lekia":{name:"Lekia",icon:"fas-rocket",imageURL:"https://graph.facebook.com/lekiasweden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56303274",shop:"toys"},addTags:{brand:"Lekia","brand:wikidata":"Q56303274","brand:wikipedia":"sv:Lekia",name:"Lekia",shop:"toys"},countryCodes:["no","se"],terms:[],matchScore:2,suggestion:true},"shop/toys/Maxi Toys":{name:"Maxi Toys",icon:"fas-rocket",imageURL:"https://graph.facebook.com/MaxiToys.FR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16663879",shop:"toys"},addTags:{brand:"Maxi Toys","brand:wikidata":"Q16663879","brand:wikipedia":"fr:Maxi Toys",name:"Maxi Toys",shop:"toys"},countryCodes:["be","de","fr","it"],terms:[],matchScore:2,suggestion:true},"shop/toys/Menkind":{name:"Menkind",icon:"fas-rocket",imageURL:"https://graph.facebook.com/Menkind/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66725844",shop:"toys"},addTags:{brand:"Menkind","brand:wikidata":"Q66725844",name:"Menkind",shop:"toys"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/toys/Ri Happy Brinquedos":{name:"Ri Happy Brinquedos",icon:"fas-rocket",geometry:["point","area"],tags:{"brand:wikidata":"Q10360441",shop:"toys"},addTags:{brand:"Ri Happy Brinquedos","brand:wikidata":"Q10360441","brand:wikipedia":"pt:Ri Happy Brinquedos",name:"Ri Happy Brinquedos",shop:"toys"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/toys/Smyths":{name:"Smyths",icon:"fas-rocket",imageURL:"https://pbs.twimg.com/profile_images/1201814536459898880/TC3S7JHH_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q7546779",shop:"toys"},addTags:{brand:"Smyths","brand:wikidata":"Q7546779","brand:wikipedia":"en:Smyths",name:"Smyths",shop:"toys"},countryCodes:["at","ch","de","gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/toys/The Entertainer":{name:"The Entertainer",icon:"fas-rocket",imageURL:"https://graph.facebook.com/TheEntertainerToyShop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7732289",shop:"toys"},addTags:{brand:"The Entertainer","brand:wikidata":"Q7732289","brand:wikipedia":"en:The Entertainer (retailer)",name:"The Entertainer",shop:"toys"},countryCodes:["gb","je"],terms:[],matchScore:2,suggestion:true},"shop/toys/Toys R Us":{name:"Toys R Us",icon:"fas-rocket",imageURL:"https://graph.facebook.com/toysrus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q696334",shop:"toys"},addTags:{brand:"Toys R Us","brand:wikidata":"Q696334","brand:wikipedia":"en:Toys \"R\" Us",name:"Toys R Us",shop:"toys"},terms:[],matchScore:2,suggestion:true},"shop/toys/Детский мир":{name:"Детский мир",icon:"fas-rocket",imageURL:"https://graph.facebook.com/detmir/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16643324",shop:"toys"},addTags:{brand:"Детский мир","brand:en":"Detskiy Mir","brand:wikidata":"Q16643324","brand:wikipedia":"en:Detsky Mir",name:"Детский мир","name:en":"Detskiy Mir",shop:"toys"},countryCodes:["kz","ru"],terms:[],matchScore:2,suggestion:true},"shop/toys/Кораблик":{name:"Кораблик",icon:"fas-rocket",imageURL:"https://graph.facebook.com/korablik.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57653416",shop:"toys"},addTags:{brand:"Кораблик","brand:wikidata":"Q57653416",name:"Кораблик",shop:"toys"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/trade/84 Lumber":{name:"84 Lumber",icon:"temaki-tools",imageURL:"https://graph.facebook.com/84lumber/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4644779",shop:"trade"},addTags:{brand:"84 Lumber","brand:wikidata":"Q4644779","brand:wikipedia":"en:84 Lumber",name:"84 Lumber",shop:"trade",trade:"building_supplies"},countryCodes:["us"],terms:["84","eighty-four lumber"],matchScore:2,suggestion:true},"shop/trade/Caterpillar":{name:"Caterpillar",icon:"temaki-tools",imageURL:"https://graph.facebook.com/caterpillarinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q459965",shop:"trade"},addTags:{brand:"Caterpillar","brand:wikidata":"Q459965","brand:wikipedia":"en:Caterpillar Inc.",name:"Caterpillar",shop:"trade",short_name:"CAT",trade:"agricultural_equipment"},terms:[],matchScore:2,suggestion:true},"shop/trade/Fastenal":{name:"Fastenal",icon:"temaki-tools",imageURL:"https://graph.facebook.com/fastenalcompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3067119",shop:"trade"},addTags:{brand:"Fastenal","brand:wikidata":"Q3067119","brand:wikipedia":"en:Fastenal",name:"Fastenal",shop:"trade"},countryCodes:["ca","pa","us"],terms:[],matchScore:2,suggestion:true},"shop/trade/Grainger":{name:"Grainger",icon:"temaki-tools",imageURL:"https://graph.facebook.com/grainger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1627894",shop:"trade"},addTags:{brand:"Grainger","brand:wikidata":"Q1627894","brand:wikipedia":"en:W. W. Grainger",name:"Grainger",shop:"trade"},countryCodes:["ca","us"],terms:["granger","w. w. grainger"],matchScore:2,suggestion:true},"shop/trade/John Deere":{name:"John Deere",icon:"temaki-tools",imageURL:"https://graph.facebook.com/JohnDeereUSCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q496302",shop:"trade"},addTags:{brand:"John Deere","brand:wikidata":"Q496302","brand:wikipedia":"en:John Deere",name:"John Deere",shop:"trade",trade:"agricultural_equipment"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Alltours":{name:"Alltours",icon:"fas-suitcase",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAlltours%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2649481",shop:"travel_agency"},addTags:{brand:"Alltours","brand:wikidata":"Q2649481","brand:wikipedia":"de:Alltours",name:"Alltours",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/American Automobile Association":{name:"American Automobile Association",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/AAAFanPage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q463436",shop:"travel_agency"},addTags:{brand:"American Automobile Association","brand:wikidata":"Q463436","brand:wikipedia":"en:American Automobile Association",name:"American Automobile Association",shop:"travel_agency",short_name:"AAA"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Coral Travel":{name:"Coral Travel",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/coraltravel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58011479",shop:"travel_agency"},addTags:{brand:"Coral Travel","brand:wikidata":"Q58011479",name:"Coral Travel",shop:"travel_agency"},countryCodes:["pl","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/D-reizen":{name:"D-reizen",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/dreizenvakanties/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2445498",shop:"travel_agency"},addTags:{brand:"D-reizen","brand:wikidata":"Q2445498","brand:wikipedia":"nl:D-reizen",name:"D-reizen",shop:"travel_agency"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/DER Reisebüro":{name:"DER Reisebüro",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/DER/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56729186",shop:"travel_agency"},addTags:{brand:"DER Reisebüro","brand:wikidata":"Q56729186","brand:wikipedia":"de:Deutsches Reisebüro",name:"DER Reisebüro",shop:"travel_agency"},countryCodes:["de"],terms:["der deutsches reisebüro"],matchScore:2,suggestion:true},"shop/travel_agency/Expedia CruiseShipCenters":{name:"Expedia CruiseShipCenters",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/ExpediaCSC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5189985",shop:"travel_agency"},addTags:{brand:"Expedia CruiseShipCenters","brand:wikidata":"Q5189985","brand:wikipedia":"en:Expedia CruiseShipCenters",name:"Expedia CruiseShipCenters",shop:"travel_agency"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/First Reisebüro":{name:"First Reisebüro",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/TUIDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q573103",shop:"travel_agency"},addTags:{brand:"First Reisebüro","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI AG",name:"First Reisebüro",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Flight Centre":{name:"Flight Centre",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/flightcentreAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5459202",shop:"travel_agency"},addTags:{brand:"Flight Centre","brand:wikidata":"Q5459202","brand:wikipedia":"en:Flight Centre",name:"Flight Centre",shop:"travel_agency"},terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Halcón Viajes":{name:"Halcón Viajes",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/halconviajes.oficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57591939",shop:"travel_agency"},addTags:{brand:"Halcón Viajes","brand:wikidata":"Q57591939",name:"Halcón Viajes",shop:"travel_agency"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Havas Voyages":{name:"Havas Voyages",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/havas.voyages/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57628091",shop:"travel_agency"},addTags:{brand:"Havas Voyages","brand:wikidata":"Q57628091",name:"Havas Voyages",shop:"travel_agency"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Hays Travel":{name:"Hays Travel",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/HaysTravel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q70250954",shop:"travel_agency"},addTags:{brand:"Hays Travel","brand:wikidata":"Q70250954","brand:wikipedia":"en:Hays Travel",name:"Hays Travel",shop:"travel_agency"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/JTB":{name:"JTB",icon:"fas-suitcase",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FJTB%20Logo%20Japanese%20Tagline.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6109053",shop:"travel_agency"},addTags:{brand:"JTB","brand:wikidata":"Q6109053","brand:wikipedia":"ja:JTB",name:"JTB",official_name:"日本交通公社","official_name:en":"Japan Travel Bureau",shop:"travel_agency"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Kuoni":{name:"Kuoni",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/kuonitraveluk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q684355",shop:"travel_agency"},addTags:{brand:"Kuoni","brand:wikidata":"Q684355","brand:wikipedia":"en:Kuoni Travel",name:"Kuoni",shop:"travel_agency"},terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Liberty Travel":{name:"Liberty Travel",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/LibertyTravel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17031665",shop:"travel_agency"},addTags:{brand:"Liberty Travel","brand:wikidata":"Q17031665","brand:wikipedia":"en:Liberty Travel",name:"Liberty Travel",shop:"travel_agency"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Neckermann Reisen":{name:"Neckermann Reisen",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/neckermann.be/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17300280",shop:"travel_agency"},addTags:{brand:"Neckermann Reisen","brand:wikidata":"Q17300280",name:"Neckermann Reisen",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Reiseland":{name:"Reiseland",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/reiseland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q40387610",shop:"travel_agency"},addTags:{brand:"Reiseland","brand:wikidata":"Q40387610","brand:wikipedia":"de:OTTO Reisen",name:"Reiseland",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Selectour":{name:"Selectour",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/SelectourVoyages/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3478073",shop:"travel_agency"},addTags:{brand:"Selectour","brand:wikidata":"Q3478073","brand:wikipedia":"fr:Selectour",name:"Selectour",shop:"travel_agency"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/TUI (Group)":{name:"TUI (Group)",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/TUIDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q573103",shop:"travel_agency"},addTags:{brand:"TUI","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI AG",name:"TUI",shop:"travel_agency"},terms:["tui reisecenter"],matchScore:2,suggestion:true},"shop/travel_agency/TUI (UK)":{name:"TUI (UK)",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/worldofTUI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7795876",shop:"travel_agency"},addTags:{brand:"TUI","brand:wikidata":"Q7795876","brand:wikipedia":"en:TUI UK",name:"TUI",shop:"travel_agency"},countryCodes:["gb"],terms:["thomson"],matchScore:2,suggestion:true},"shop/travel_agency/The Co-operative Travel":{name:"The Co-operative Travel",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/cooperativetraveluk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7726526",shop:"travel_agency"},addTags:{brand:"The Co-operative Travel","brand:wikidata":"Q7726526","brand:wikipedia":"en:The Co-operative Travel",name:"The Co-operative Travel",shop:"travel_agency"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Thomas Cook":{name:"Thomas Cook",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/thomascook/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2141800",shop:"travel_agency"},addTags:{brand:"Thomas Cook","brand:wikidata":"Q2141800","brand:wikipedia":"en:Thomas Cook Group",name:"Thomas Cook",shop:"travel_agency"},terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Turkish Airlines":{name:"Turkish Airlines",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/turkishairlines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4548",shop:"travel_agency"},addTags:{brand:"Turkish Airlines","brand:wikidata":"Q4548","brand:wikipedia":"en:Turkish Airlines",name:"Turkish Airlines",shop:"travel_agency"},terms:[],matchScore:2,suggestion:true},"shop/travel_agency/ltur":{name:"ltur",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/ltur/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q519040",shop:"travel_agency"},addTags:{brand:"ltur","brand:wikidata":"Q519040","brand:wikipedia":"de:L’TUR",name:"ltur",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Поехали с нами":{name:"Поехали с нами",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/PoehaliSNamiua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25439141",shop:"travel_agency"},addTags:{brand:"Поехали с нами","brand:wikidata":"Q25439141","brand:wikipedia":"uk:Поїхали з нами",name:"Поехали с нами",shop:"travel_agency"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/エイチ・アイ・エス":{name:"エイチ・アイ・エス",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/H.I.S.Japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1452225",shop:"travel_agency"},addTags:{"alt_name:en":"HIS",brand:"エイチ・アイ・エス","brand:en":"H.I.S.","brand:ja":"エイチ・アイ・エス","brand:wikidata":"Q1452225","brand:wikipedia":"ja:エイチ・アイ・エス",name:"エイチ・アイ・エス","name:en":"H.I.S.","name:ja":"エイチ・アイ・エス",shop:"travel_agency"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/近畿日本ツーリスト":{name:"近畿日本ツーリスト",icon:"fas-suitcase",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F%E8%BF%91%E7%95%BF%E6%97%A5%E6%9C%AC%E3%83%84%E3%83%BC%E3%83%AA%E3%82%B9%E3%83%88%20%E7%9C%8B%E6%9D%BF.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11638632",shop:"travel_agency"},addTags:{brand:"近畿日本ツーリスト","brand:en":"KNT","brand:ja":"近畿日本ツーリスト","brand:wikidata":"Q11638632","brand:wikipedia":"ja:近畿日本ツーリスト",name:"近畿日本ツーリスト","name:en":"KNT","name:ja":"近畿日本ツーリスト","official_name:en":"Kinki Nippon Tourist",shop:"travel_agency"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Big O Tires":{name:"Big O Tires",icon:"temaki-tire",imageURL:"https://graph.facebook.com/BigOTires/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4906085",shop:"tyres"},addTags:{brand:"Big O Tires","brand:wikidata":"Q4906085","brand:wikipedia":"en:Big O Tires",name:"Big O Tires",shop:"tyres"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Bridgestone":{name:"Bridgestone",icon:"temaki-tire",imageURL:"https://graph.facebook.com/BridgestoneTires/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q179433",shop:"tyres"},addTags:{brand:"Bridgestone","brand:wikidata":"Q179433","brand:wikipedia":"en:Bridgestone",name:"Bridgestone",shop:"tyres"},terms:[],matchScore:2,suggestion:true},"shop/tyres/Discount Tire":{name:"Discount Tire",icon:"temaki-tire",imageURL:"https://graph.facebook.com/DiscountTire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5281735",shop:"tyres"},addTags:{brand:"Discount Tire","brand:wikidata":"Q5281735","brand:wikipedia":"en:Discount Tire",name:"Discount Tire",shop:"tyres"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Express Oil Change & Tire Engineers":{name:"Express Oil Change & Tire Engineers",icon:"temaki-tire",imageURL:"https://graph.facebook.com/expressoil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q39057654",shop:"tyres"},addTags:{brand:"Express Oil Change & Tire Engineers","brand:wikidata":"Q39057654","brand:wikipedia":"en:Express Oil Change & Tire Engineers",name:"Express Oil Change & Tire Engineers",shop:"tyres"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Les Schwab Tire Center":{name:"Les Schwab Tire Center",icon:"temaki-tire",imageURL:"https://graph.facebook.com/lesschwab/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6529977",shop:"tyres"},addTags:{brand:"Les Schwab Tire Center","brand:wikidata":"Q6529977","brand:wikipedia":"en:Les Schwab Tire Centers",name:"Les Schwab Tire Center",shop:"tyres"},countryCodes:["us"],terms:["les schwab"],matchScore:2,suggestion:true},"shop/tyres/Michelin":{name:"Michelin",icon:"temaki-tire",imageURL:"https://pbs.twimg.com/profile_images/1031457567963312128/I7Vnou9B_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q151107",shop:"tyres"},addTags:{brand:"Michelin","brand:wikidata":"Q151107","brand:wikipedia":"en:Michelin",name:"Michelin",shop:"tyres"},terms:[],matchScore:2,suggestion:true},"shop/tyres/Pneuhage":{name:"Pneuhage",icon:"temaki-tire",imageURL:"https://graph.facebook.com/pneuhage.reifendienste/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2099972",shop:"tyres"},addTags:{brand:"Pneuhage","brand:wikidata":"Q2099972","brand:wikipedia":"de:Pneuhage",name:"Pneuhage",shop:"tyres"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Tire Discounters":{name:"Tire Discounters",icon:"temaki-tire",imageURL:"https://graph.facebook.com/TireDiscounters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q29093639",shop:"tyres"},addTags:{brand:"Tire Discounters","brand:wikidata":"Q29093639","brand:wikipedia":"en:Tire Discounters",name:"Tire Discounters",shop:"tyres"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Tires Plus":{name:"Tires Plus",icon:"temaki-tire",imageURL:"https://graph.facebook.com/TiresPlus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64015091",shop:"tyres"},addTags:{brand:"Tires Plus","brand:wikidata":"Q64015091",name:"Tires Plus",shop:"tyres"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Vianor":{name:"Vianor",icon:"temaki-tire",imageURL:"https://graph.facebook.com/VianorSuomi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10714920",shop:"tyres"},addTags:{brand:"Vianor","brand:wikidata":"Q10714920","brand:wikipedia":"sv:Vianor",name:"Vianor",shop:"tyres"},terms:[],matchScore:2,suggestion:true},"shop/vacuum_cleaner/Oreck":{name:"Oreck",icon:"temaki-vacuum",imageURL:"https://graph.facebook.com/oreck/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57273844",shop:"vacuum_cleaner"},addTags:{brand:"Oreck","brand:wikidata":"Q57273844",name:"Oreck",shop:"vacuum_cleaner"},countryCodes:["us"],terms:["oreck vacuums"],matchScore:2,suggestion:true},"shop/variety_store/99 Cents Only Stores":{name:"99 Cents Only Stores",icon:"maki-shop",imageURL:"https://graph.facebook.com/99CentsOnly/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4646294",shop:"variety_store"},addTags:{brand:"99 Cents Only Stores","brand:wikidata":"Q4646294","brand:wikipedia":"en:99 Cents Only Stores",name:"99 Cents Only Stores",shop:"variety_store"},countryCodes:["us"],terms:["99 cent only stores","99 cents only"],matchScore:2,suggestion:true},"shop/variety_store/Action":{name:"Action",icon:"maki-shop",imageURL:"https://graph.facebook.com/actiondotcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2634111",shop:"variety_store"},addTags:{brand:"Action","brand:wikidata":"Q2634111","brand:wikipedia":"nl:Action (winkel)",name:"Action",shop:"variety_store"},countryCodes:["at","be","de","fr","lu","nl","pl"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/B&M Bargains":{name:"B&M Bargains",icon:"maki-shop",imageURL:"https://graph.facebook.com/bmstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4836931",shop:"variety_store"},addTags:{brand:"B&M Bargains","brand:wikidata":"Q4836931","brand:wikipedia":"en:B & M",name:"B&M Bargains",shop:"variety_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Big Bazar":{name:"Big Bazar",icon:"maki-shop",imageURL:"https://graph.facebook.com/bigbazarbv/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15873104",shop:"variety_store"},addTags:{brand:"Big Bazar","brand:wikidata":"Q15873104","brand:wikipedia":"nl:Big Bazar",name:"Big Bazar",shop:"variety_store"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Daiso Japan":{name:"Daiso Japan",icon:"maki-shop",imageURL:"https://graph.facebook.com/daisojapanusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q866991",shop:"variety_store"},addTags:{brand:"Daiso","brand:wikidata":"Q866991","brand:wikipedia":"en:Daiso",name:"Daiso Japan",shop:"variety_store",short_name:"Daiso"},countryCodes:["au","us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Dealz":{name:"Dealz",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/548442428512825344/G-L9AZ1f_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q16942585",shop:"variety_store"},addTags:{brand:"Dealz","brand:wikidata":"Q16942585","brand:wikipedia":"en:Dealz",name:"Dealz",shop:"variety_store"},terms:[],matchScore:2,suggestion:true},"shop/variety_store/Dollar General":{name:"Dollar General",icon:"maki-shop",imageURL:"https://graph.facebook.com/dollargeneral/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q145168",shop:"variety_store"},addTags:{brand:"Dollar General","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General",shop:"variety_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Dollar Tree":{name:"Dollar Tree",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/509405558898561024/27hmihjq_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q5289230",shop:"variety_store"},addTags:{brand:"Dollar Tree","brand:wikidata":"Q5289230","brand:wikipedia":"en:Dollar Tree",name:"Dollar Tree",shop:"variety_store"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Dollarama":{name:"Dollarama",icon:"maki-shop",imageURL:"https://graph.facebook.com/415845051799232/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3033947",shop:"variety_store"},addTags:{brand:"Dollarama","brand:wikidata":"Q3033947","brand:wikipedia":"en:Dollarama",name:"Dollarama",shop:"variety_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/EuroShop":{name:"EuroShop",icon:"maki-shop",imageURL:"https://graph.facebook.com/schumeuroshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15846763",shop:"variety_store"},addTags:{brand:"EuroShop","brand:wikidata":"Q15846763","brand:wikipedia":"de:Schum EuroShop",name:"EuroShop",shop:"variety_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Family Dollar":{name:"Family Dollar",icon:"maki-shop",imageURL:"https://graph.facebook.com/familydollar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5433101",shop:"variety_store"},addTags:{brand:"Family Dollar","brand:wikidata":"Q5433101","brand:wikipedia":"en:Family Dollar",name:"Family Dollar",shop:"variety_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Five Below":{name:"Five Below",icon:"maki-shop",imageURL:"https://graph.facebook.com/FiveBelow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5455836",shop:"variety_store"},addTags:{brand:"Five Below","brand:wikidata":"Q5455836","brand:wikipedia":"en:Five Below",name:"Five Below",shop:"variety_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Fix Price":{name:"Fix Price",icon:"maki-shop",imageURL:"https://graph.facebook.com/fixprice.russia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4038791",shop:"variety_store"},addTags:{brand:"Fix Price","brand:wikidata":"Q4038791","brand:wikipedia":"ru:Fix Price (сеть магазинов)",name:"Fix Price",shop:"variety_store"},countryCodes:["by","ru"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Flying Tiger Copenhagen":{name:"Flying Tiger Copenhagen",icon:"maki-shop",imageURL:"https://graph.facebook.com/flyingtigercph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2786319",shop:"variety_store"},addTags:{brand:"Flying Tiger Copenhagen","brand:wikidata":"Q2786319","brand:wikipedia":"en:Flying Tiger Copenhagen",name:"Flying Tiger Copenhagen",shop:"variety_store",short_name:"Flying Tiger"},terms:["tgr","tiger"],matchScore:2,suggestion:true},"shop/variety_store/GiFi":{name:"GiFi",icon:"maki-shop",imageURL:"https://graph.facebook.com/GiFi.Officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3105439",shop:"variety_store"},addTags:{brand:"GiFi","brand:wikidata":"Q3105439","brand:wikipedia":"fr:Gifi",name:"GiFi",shop:"variety_store"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Home Bargains":{name:"Home Bargains",icon:"maki-shop",imageURL:"https://graph.facebook.com/homebargains/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5888229",shop:"variety_store"},addTags:{brand:"Home Bargains","brand:wikidata":"Q5888229","brand:wikipedia":"en:Home Bargains",name:"Home Bargains",shop:"variety_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/La Foir'Fouille":{name:"La Foir'Fouille",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q3209040",shop:"variety_store"},addTags:{brand:"La Foir'Fouille","brand:wikidata":"Q3209040","brand:wikipedia":"fr:La Foir'Fouille",name:"La Foir'Fouille",shop:"variety_store"},countryCodes:["be","fr","lu","mu","nc"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Miniso":{name:"Miniso",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMiniso%20international%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q20732498",shop:"variety_store"},addTags:{brand:"Miniso","brand:wikidata":"Q20732498","brand:wikipedia":"en:Miniso",name:"Miniso",shop:"variety_store"},terms:[],matchScore:2,suggestion:true},"shop/variety_store/Mäc-Geiz":{name:"Mäc-Geiz",icon:"maki-shop",imageURL:"https://graph.facebook.com/1652809328274529/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1957126",shop:"variety_store"},addTags:{brand:"Mäc-Geiz","brand:wikidata":"Q1957126","brand:wikipedia":"de:Mäc-Geiz",name:"Mäc-Geiz",shop:"variety_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/NOZ":{name:"NOZ",icon:"maki-shop",imageURL:"https://graph.facebook.com/UniversNOZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3345688",shop:"variety_store"},addTags:{brand:"NOZ","brand:wikidata":"Q3345688","brand:wikipedia":"fr:Noz",name:"NOZ",shop:"variety_store"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Ocean State Job Lot":{name:"Ocean State Job Lot",icon:"maki-shop",imageURL:"https://graph.facebook.com/OceanStateJobLot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7076076",shop:"variety_store"},addTags:{brand:"Ocean State Job Lot","brand:wikidata":"Q7076076","brand:wikipedia":"en:Ocean State Job Lot",name:"Ocean State Job Lot",shop:"variety_store",short_name:"Job Lot"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Ollie's Bargain Outlet":{name:"Ollie's Bargain Outlet",icon:"maki-shop",imageURL:"https://graph.facebook.com/olliesbargainoutlet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7088304",shop:"variety_store"},addTags:{brand:"Ollie's Bargain Outlet","brand:wikidata":"Q7088304","brand:wikipedia":"en:Ollie's Bargain Outlet",name:"Ollie's Bargain Outlet",shop:"variety_store",short_name:"Ollie's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Poundland":{name:"Poundland",icon:"maki-shop",imageURL:"https://graph.facebook.com/Poundland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1434528",shop:"variety_store"},addTags:{brand:"Poundland","brand:wikidata":"Q1434528","brand:wikipedia":"en:Poundland",name:"Poundland",shop:"variety_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Poundstretcher":{name:"Poundstretcher",icon:"maki-shop",imageURL:"https://graph.facebook.com/Poundstretcher/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7235675",shop:"variety_store"},addTags:{brand:"Poundstretcher","brand:wikidata":"Q7235675","brand:wikipedia":"en:Poundstretcher",name:"Poundstretcher",shop:"variety_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Poundworld":{name:"Poundworld",icon:"maki-shop",imageURL:"https://graph.facebook.com/PoundWorld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16967516",shop:"variety_store"},addTags:{brand:"Poundworld","brand:wikidata":"Q16967516","brand:wikipedia":"en:Poundworld",name:"Poundworld",shop:"variety_store"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Roses":{name:"Roses",icon:"maki-shop",imageURL:"https://graph.facebook.com/rosesdiscountstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7368644",shop:"variety_store"},addTags:{brand:"Roses","brand:wikidata":"Q7368644","brand:wikipedia":"en:Roses (store)",name:"Roses",shop:"variety_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/TEDi":{name:"TEDi",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTEDi-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1364603",shop:"variety_store"},addTags:{brand:"TEDi","brand:wikidata":"Q1364603","brand:wikipedia":"de:TEDi",name:"TEDi",shop:"variety_store"},countryCodes:["at","de","es","hr","si","sk"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Tokmanni":{name:"Tokmanni",icon:"maki-shop",imageURL:"https://graph.facebook.com/Tokmanni.fi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13423470",shop:"variety_store"},addTags:{brand:"Tokmanni","brand:wikidata":"Q13423470","brand:wikipedia":"fi:Tokmanni",name:"Tokmanni",shop:"variety_store"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Wilko":{name:"Wilko",icon:"maki-shop",imageURL:"https://graph.facebook.com/LoveWilko/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8002536",shop:"variety_store"},addTags:{brand:"Wilko","brand:wikidata":"Q8002536","brand:wikipedia":"en:Wilko (retailer)",name:"Wilko",shop:"variety_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/キャンドゥ":{name:"キャンドゥ",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/986887047209091072/PPjs7xOK_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11297367",shop:"variety_store"},addTags:{brand:"キャンドゥ","brand:en":"CAN DO","brand:ja":"キャンドゥ","brand:wikidata":"Q11297367","brand:wikipedia":"ja:キャンドゥ",name:"キャンドゥ","name:en":"CAN DO","name:ja":"キャンドゥ",shop:"variety_store"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/セリア":{name:"セリア",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSeria%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11314509",shop:"variety_store"},addTags:{brand:"セリア","brand:en":"Seria","brand:ja":"セリア","brand:wikidata":"Q11314509","brand:wikipedia":"ja:セリア (100円ショップ)",name:"セリア","name:en":"Seria","name:ja":"セリア",shop:"variety_store"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/ダイソー":{name:"ダイソー",icon:"maki-shop",imageURL:"https://graph.facebook.com/daisojapanusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q866991",shop:"variety_store"},addTags:{brand:"ダイソー","brand:en":"Daiso","brand:ja":"ダイソー","brand:wikidata":"Q866991","brand:wikipedia":"ja:大創産業",name:"ダイソー","name:en":"Daiso","name:ja":"ダイソー",shop:"variety_store"},countryCodes:["jp"],terms:["ザ・ダイソー"],matchScore:2,suggestion:true},"shop/variety_store/ダイレックス":{name:"ダイレックス",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q11317051",shop:"variety_store"},addTags:{brand:"ダイレックス","brand:en":"Direx","brand:ja":"ダイレックス","brand:wikidata":"Q11317051","brand:wikipedia":"ja:ダイレックス (ディスカウントストア)",name:"ダイレックス","name:en":"Direx","name:ja":"ダイレックス",shop:"variety_store"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/トライアル":{name:"トライアル",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q11321723",shop:"variety_store"},addTags:{brand:"トライアル","brand:en":"Trial","brand:ja":"トライアル","brand:wikidata":"Q11321723","brand:wikipedia":"ja:トライアルカンパニー",name:"トライアル","name:en":"Trial","name:ja":"トライアル",shop:"variety_store"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/ドン・キホーテ":{name:"ドン・キホーテ",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1213996146042925057/jOUmAozd_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1185381",shop:"variety_store"},addTags:{brand:"ドン・キホーテ","brand:en":"Don Quijote","brand:ja":"ドン・キホーテ","brand:wikidata":"Q1185381","brand:wikipedia":"ja:ドン・キホーテ (企業)",name:"ドン・キホーテ","name:en":"Don Quijote","name:ja":"ドン・キホーテ",opening_hours:"24/7",shop:"variety_store",short_name:"ドンキ","short_name:en":"Donki","short_name:ja":"ドンキ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/video_games/EB Games":{name:"EB Games",icon:"maki-gaming",imageURL:"https://graph.facebook.com/ebgamescanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4993686",shop:"video_games"},addTags:{brand:"EB Games","brand:wikidata":"Q4993686","brand:wikipedia":"en:EB Games",name:"EB Games",shop:"video_games"},countryCodes:["au","ca","nz"],terms:[],matchScore:2,suggestion:true},"shop/video_games/Game":{name:"Game",icon:"maki-gaming",imageURL:"https://graph.facebook.com/GAMEstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5519813",shop:"video_games"},addTags:{brand:"Game","brand:wikidata":"Q5519813","brand:wikipedia":"en:Game (retailer)",name:"Game",shop:"video_games"},countryCodes:["es","gb"],terms:[],matchScore:2,suggestion:true},"shop/video_games/Game Mania":{name:"Game Mania",icon:"maki-gaming",imageURL:"https://graph.facebook.com/GameManiaNederland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18069429",shop:"video_games"},addTags:{brand:"Game Mania","brand:wikidata":"Q18069429","brand:wikipedia":"nl:Game Mania",name:"Game Mania",shop:"video_games"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/video_games/GameStop":{name:"GameStop",icon:"maki-gaming",imageURL:"https://graph.facebook.com/GameStop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q202210",shop:"video_games"},addTags:{brand:"GameStop","brand:wikidata":"Q202210","brand:wikipedia":"en:GameStop",name:"GameStop",shop:"video_games"},terms:[],matchScore:2,suggestion:true},"shop/video_games/Micromania":{name:"Micromania",icon:"maki-gaming",imageURL:"https://graph.facebook.com/MicromaniaFr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3312221",shop:"video_games"},addTags:{brand:"Micromania","brand:wikidata":"Q3312221","brand:wikipedia":"en:Micromania (video game retailer)",name:"Micromania",shop:"video_games"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/video/Blockbuster":{name:"Blockbuster",icon:"temaki-movie_rental",imageURL:"https://pbs.twimg.com/profile_images/378800000679852472/9ee706eca6f5d0b9fbc3a57d014ec807_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q884711",shop:"video"},addTags:{brand:"Blockbuster","brand:wikidata":"Q884711","brand:wikipedia":"en:Blockbuster LLC",name:"Blockbuster",shop:"video"},terms:[],matchScore:2,suggestion:true},"shop/video/Family Video":{name:"Family Video",icon:"temaki-movie_rental",imageURL:"https://graph.facebook.com/FamilyVideo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5433297",shop:"video"},addTags:{brand:"Family Video","brand:wikidata":"Q5433297","brand:wikipedia":"en:Family Video",name:"Family Video",shop:"video"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/video/TSUTAYA":{name:"TSUTAYA",icon:"temaki-movie_rental",imageURL:"https://graph.facebook.com/TSUTAYA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5193457",shop:"video"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"video"},terms:[],matchScore:2,suggestion:true},"shop/video/ゲオ":{name:"ゲオ",icon:"temaki-movie_rental",imageURL:"https://graph.facebook.com/geomediashop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5533938",shop:"video"},addTags:{brand:"GEO","brand:ja":"GEO","brand:wikidata":"Q5533938","brand:wikipedia":"ja:ゲオ",name:"ゲオ","name:en":"GEO","name:ja":"ゲオ",shop:"video"},countryCodes:["jp"],terms:["geo"],matchScore:2,suggestion:true},"shop/watches/Fossil":{name:"Fossil",icon:"maki-watch",imageURL:"https://graph.facebook.com/Fossil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q356212",shop:"watches"},addTags:{brand:"Fossil","brand:wikidata":"Q356212","brand:wikipedia":"en:Fossil Group",name:"Fossil",shop:"watches"},countryCodes:["ca","de","us"],terms:[],matchScore:2,suggestion:true},"shop/watches/Omega":{name:"Omega",icon:"maki-watch",imageURL:"https://graph.facebook.com/omega/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q659224",shop:"watches"},addTags:{brand:"Omega","brand:wikidata":"Q659224","brand:wikipedia":"en:Omega SA",name:"Omega",shop:"watches"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/watches/Rolex":{name:"Rolex",icon:"maki-watch",imageURL:"https://graph.facebook.com/rolex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62288",shop:"watches"},addTags:{brand:"Rolex","brand:wikidata":"Q62288","brand:wikipedia":"en:Rolex",name:"Rolex",shop:"watches"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/watches/Swatch":{name:"Swatch",icon:"maki-watch",imageURL:"https://graph.facebook.com/SwatchUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q573422",shop:"watches"},addTags:{brand:"Swatch","brand:wikidata":"Q573422","brand:wikipedia":"en:Swatch",name:"Swatch",shop:"watches"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/BJ's Wholesale Club":{name:"BJ's Wholesale Club",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/bjswholesaleclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835754",shop:"wholesale"},addTags:{brand:"BJ's Wholesale Club","brand:wikidata":"Q4835754","brand:wikipedia":"en:BJ's Wholesale Club",name:"BJ's Wholesale Club",shop:"wholesale"},countryCodes:["us"],terms:["bjs","bjs wholesale"],matchScore:2,suggestion:true},"shop/wholesale/Costco":{name:"Costco",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/Costco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q715583",shop:"wholesale"},addTags:{brand:"Costco","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco",shop:"wholesale"},terms:["costco wholesale"],matchScore:2,suggestion:true},"shop/wholesale/Makro":{name:"Makro",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/makrohipermayorista/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q704606",shop:"wholesale"},addTags:{brand:"Makro","brand:wikidata":"Q704606","brand:wikipedia":"en:Makro",name:"Makro",shop:"wholesale"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/Metro":{name:"Metro",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/metro.deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13610282",shop:"wholesale"},addTags:{brand:"Metro","brand:wikidata":"Q13610282","brand:wikipedia":"en:Metro Cash & Carry",name:"Metro",shop:"wholesale"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/Sam's Club":{name:"Sam's Club",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/samsclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1972120",shop:"wholesale"},addTags:{brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club",shop:"wholesale"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/Sligro":{name:"Sligro",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/sligro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3170052",shop:"wholesale"},addTags:{brand:"Sligro","brand:wikidata":"Q3170052","brand:wikipedia":"nl:Sligro Food Group",name:"Sligro",shop:"wholesale"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/コストコ":{name:"コストコ",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/Costco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q715583",shop:"wholesale"},addTags:{brand:"コストコ","brand:en":"Costco","brand:ja":"コストコ","brand:wikidata":"Q715583","brand:wikipedia":"ja:コストコ",name:"コストコ","name:en":"Costco","name:ja":"コストコ",shop:"wholesale"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"tourism/caravan_site/Big 4 Holiday Parks":{name:"Big 4 Holiday Parks",icon:"temaki-rv_park",imageURL:"https://graph.facebook.com/BIG4HolidayParks/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q18636678",tourism:"caravan_site"},addTags:{brand:"Big 4 Holiday Parks","brand:wikidata":"Q18636678","brand:wikipedia":"en:BIG4 Holiday Parks",name:"BIG4 Holiday Parks",short_name:"Big4",tourism:"caravan_site"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"tourism/caravan_site/KOA Holiday":{name:"KOA Holiday",icon:"temaki-rv_park",imageURL:"https://graph.facebook.com/KOAKampgrounds/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q16988635",tourism:"caravan_site"},addTags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",name:"KOA Holiday",short_name:"KOA",tourism:"caravan_site"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/caravan_site/KOA Journey":{name:"KOA Journey",icon:"temaki-rv_park",imageURL:"https://graph.facebook.com/KOAKampgrounds/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q16988635",tourism:"caravan_site"},addTags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",name:"KOA Journey",short_name:"KOA",tourism:"caravan_site"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/caravan_site/KOA Kampground":{name:"KOA Kampground",icon:"temaki-rv_park",imageURL:"https://graph.facebook.com/KOAKampgrounds/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q16988635",tourism:"caravan_site"},addTags:{alt_name:"KOA Campground",brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",name:"KOA Kampground",short_name:"KOA",tourism:"caravan_site"},countryCodes:["ca","us"],terms:["kampgrounds of america","koa"],matchScore:2,suggestion:true},"tourism/caravan_site/KOA Resort":{name:"KOA Resort",icon:"temaki-rv_park",imageURL:"https://graph.facebook.com/KOAKampgrounds/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q16988635",tourism:"caravan_site"},addTags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",name:"KOA Resort",short_name:"KOA",tourism:"caravan_site"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/AC Hotel":{name:"AC Hotel",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/achotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5653536",tourism:"hotel"},addTags:{brand:"AC Hotel","brand:wikidata":"Q5653536","brand:wikipedia":"en:AC Hotels",name:"AC Hotel",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Aloft":{name:"Aloft",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/alofthotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4734166",tourism:"hotel"},addTags:{brand:"Aloft","brand:wikidata":"Q4734166","brand:wikipedia":"en:Aloft Hotels",name:"Aloft",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/AmericInn":{name:"AmericInn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/americinn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4742493",tourism:"hotel"},addTags:{brand:"AmericInn","brand:wikidata":"Q4742493","brand:wikipedia":"en:AmericInn",name:"AmericInn",official_name:"AmericInn by Wyndham",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/B&B Hôtel":{name:"B&B Hôtel",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/bbhotels.france/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q794939",tourism:"hotel"},addTags:{brand:"B&B Hôtel","brand:wikidata":"Q794939","brand:wikipedia":"en:B&B Hotels",name:"B&B Hôtel",tourism:"hotel"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Baymont":{name:"Baymont",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/baymontinns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4874634",tourism:"hotel"},addTags:{brand:"Baymont","brand:wikidata":"Q4874634","brand:wikipedia":"en:Baymont Inn & Suites",name:"Baymont",official_name:"Baymont by Wyndham",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:["baymont inn","baymont inn & suites"],matchScore:2,suggestion:true},"tourism/hotel/Best Western":{name:"Best Western",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/BestWestern/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q830334",tourism:"hotel"},addTags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Best Western Plus":{name:"Best Western Plus",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/BestWestern/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q830334",tourism:"hotel"},addTags:{brand:"Best Western Plus","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western Plus",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Best Western Premier":{name:"Best Western Premier",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/BestWestern/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q830334",tourism:"hotel"},addTags:{brand:"Best Western Premier","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western Premier",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Campanile":{name:"Campanile",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/campanile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2412064",tourism:"hotel"},addTags:{brand:"Campanile","brand:wikidata":"Q2412064","brand:wikipedia":"fr:Campanile (chaîne d'hôtels)",name:"Campanile",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Candlewood Suites":{name:"Candlewood Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/CandlewoodSuites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5032010",tourism:"hotel"},addTags:{brand:"Candlewood Suites","brand:wikidata":"Q5032010","brand:wikipedia":"en:Candlewood Suites",name:"Candlewood Suites",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Centro Hotels":{name:"Centro Hotels",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Hotels.Centro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q73645443",tourism:"hotel"},addTags:{brand:"Centro Hotels","brand:wikidata":"Q73645443",name:"Centro Hotel",tourism:"hotel"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Clarion":{name:"Clarion",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ClarionPhl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q78165540",tourism:"hotel"},addTags:{brand:"Clarion","brand:wikidata":"Q78165540",name:"Clarion",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Comfort Inn":{name:"Comfort Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Comfort Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn",tourism:"hotel"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Comfort Inn & Suites":{name:"Comfort Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Comfort Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn & Suites",tourism:"hotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Comfort Suites":{name:"Comfort Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Comfort Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Suites",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Country Inn & Suites":{name:"Country Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/countryinn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5177332",tourism:"hotel"},addTags:{brand:"Country Inn & Suites","brand:wikidata":"Q5177332","brand:wikipedia":"en:Country Inns & Suites",name:"Country Inn & Suites",tourism:"hotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Courtyard":{name:"Courtyard",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/courtyard/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1053170",tourism:"hotel"},addTags:{brand:"Courtyard","brand:wikidata":"Q1053170","brand:wikipedia":"en:Courtyard by Marriott",name:"Courtyard",official_name:"Courtyard by Marriott",tourism:"hotel"},terms:["courtyard marriott"],matchScore:2,suggestion:true},"tourism/hotel/Crowne Plaza":{name:"Crowne Plaza",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/crowneplaza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2746220",tourism:"hotel"},addTags:{brand:"Crowne Plaza","brand:wikidata":"Q2746220","brand:wikipedia":"en:Crowne Plaza",name:"Crowne Plaza",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Days Inn":{name:"Days Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/DaysInn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1047239",tourism:"hotel"},addTags:{brand:"Days Inn","brand:wikidata":"Q1047239","brand:wikipedia":"en:Days Inn",name:"Days Inn",tourism:"hotel"},countryCodes:["ca","ch","gb","id","in","kr","mx","my","ph","sg","sn","th","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Delta Hotels":{name:"Delta Hotels",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/deltahotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5254663",tourism:"hotel"},addTags:{brand:"Delta Hotels","brand:wikidata":"Q5254663","brand:wikipedia":"en:Delta Hotels",name:"Delta Hotels",tourism:"hotel"},terms:["delta"],matchScore:2,suggestion:true},"tourism/hotel/DoubleTree":{name:"DoubleTree",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Doubletree/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2504643",tourism:"hotel"},addTags:{brand:"DoubleTree","brand:wikidata":"Q2504643","brand:wikipedia":"en:DoubleTree",name:"DoubleTree",official_name:"DoubleTree by Hilton",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Drury Inn & Suites":{name:"Drury Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Druryhotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5309391",tourism:"hotel"},addTags:{brand:"Drury Inn & Suites","brand:wikidata":"Q5309391","brand:wikipedia":"en:Drury Hotels",name:"Drury Inn & Suites",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/EVEN Hotels":{name:"EVEN Hotels",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/EvenHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5416522",tourism:"hotel"},addTags:{brand:"EVEN Hotels","brand:wikidata":"Q5416522","brand:wikipedia":"en:Even Hotels",name:"EVEN Hotels",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Embassy Suites":{name:"Embassy Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/EmbassySuites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5369524",tourism:"hotel"},addTags:{brand:"Embassy Suites","brand:wikidata":"Q5369524","brand:wikipedia":"en:Embassy Suites by Hilton",name:"Embassy Suites",official_name:"Embassy Suites by Hilton",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Extended Stay America":{name:"Extended Stay America",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ExtendedStayAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5421850",tourism:"hotel"},addTags:{brand:"Extended Stay America","brand:wikidata":"Q5421850","brand:wikipedia":"en:Extended Stay America",name:"Extended Stay America",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Fairfield Inn":{name:"Fairfield Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/fairfieldbymarriott/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5430314",tourism:"hotel"},addTags:{alt_name:"Fairfield by Marriott",brand:"Fairfield Inn","brand:wikidata":"Q5430314","brand:wikipedia":"en:Fairfield Inn by Marriott",name:"Fairfield Inn",tourism:"hotel"},countryCodes:["ca","cn","id","in","kr","mx","my","sv","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Fairfield Inn & Suites":{name:"Fairfield Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/fairfieldbymarriott/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5430314",tourism:"hotel"},addTags:{brand:"Fairfield Inn & Suites","brand:wikidata":"Q5430314","brand:wikipedia":"en:Fairfield Inn by Marriott",name:"Fairfield Inn & Suites",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Formule 1":{name:"Formule 1",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/HotelF1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1630895",tourism:"hotel"},addTags:{brand:"Formule 1","brand:wikidata":"Q1630895","brand:wikipedia":"en:Hotel Formule 1",name:"Formule 1",tourism:"hotel"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Four Points by Sheraton":{name:"Four Points by Sheraton",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/fourpoints/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1439966",tourism:"hotel"},addTags:{brand:"Four Points by Sheraton","brand:wikidata":"Q1439966","brand:wikipedia":"en:Four Points by Sheraton",name:"Four Points by Sheraton",short_name:"Four Points",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Gaylord":{name:"Gaylord",icon:"fas-concierge-bell",geometry:["point","area"],tags:{"brand:wikidata":"Q3099664",tourism:"hotel"},addTags:{brand:"Gaylord","brand:wikidata":"Q3099664","brand:wikipedia":"en:Gaylord Hotels",name:"Gaylord",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Grand Hyatt":{name:"Grand Hyatt",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Grand Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Grand Hyatt",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Grupo Barceló":{name:"Grupo Barceló",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGrupo%20Barcel%C3%B3%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q15148996",tourism:"hotel"},addTags:{brand:"Grupo Barceló","brand:en":"Barceló Group","brand:es":"Grupo Barceló","brand:wikidata":"Q15148996","brand:wikipedia":"es:Grupo Barceló",name:"Grupo Barceló","name:en":"Barceló Group","name:es":"Grupo Barceló",tourism:"hotel"},countryCodes:["es","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hampton":{name:"Hampton",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hamptonbyhilton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5646230",tourism:"hotel"},addTags:{alt_name:"Hampton Inn",brand:"Hampton","brand:wikidata":"Q5646230","brand:wikipedia":"en:Hampton by Hilton",name:"Hampton",official_name:"Hampton by Hilton",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hampton Inn & Suites":{name:"Hampton Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hamptonbyhilton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5646230",tourism:"hotel"},addTags:{brand:"Hampton Inn & Suites","brand:wikidata":"Q5646230","brand:wikipedia":"en:Hampton by Hilton",name:"Hampton Inn & Suites",official_name:"Hampton Inn & Suites by Hilton",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hawthorn Suites":{name:"Hawthorn Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Hawthorn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5685511",tourism:"hotel"},addTags:{brand:"Hawthorn Suites","brand:wikidata":"Q5685511","brand:wikipedia":"en:Hawthorn Suites",name:"Hawthorn Suites",official_name:"Hawthorn Suites by Wyndham",short_name:"Hawthorn",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hilton":{name:"Hilton",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hilton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q598884",tourism:"hotel"},addTags:{brand:"Hilton","brand:wikidata":"Q598884","brand:wikipedia":"en:Hilton Hotels & Resorts",name:"Hilton",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hilton Garden Inn":{name:"Hilton Garden Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/HiltonGardenInn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1162859",tourism:"hotel"},addTags:{brand:"Hilton Garden Inn","brand:wikidata":"Q1162859","brand:wikipedia":"en:Hilton Garden Inn",name:"Hilton Garden Inn",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn":{name:"Holiday Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/HolidayInn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2717882",tourism:"hotel"},addTags:{brand:"Holiday Inn","brand:wikidata":"Q2717882","brand:wikipedia":"en:Holiday Inn",name:"Holiday Inn",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn Express":{name:"Holiday Inn Express",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/holidayinnexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5880423",tourism:"hotel"},addTags:{brand:"Holiday Inn Express","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn Express & Suites":{name:"Holiday Inn Express & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/holidayinnexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5880423",tourism:"hotel"},addTags:{brand:"Holiday Inn Express & Suites","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express & Suites",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Home2 Suites":{name:"Home2 Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Home2Suites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5887912",tourism:"hotel"},addTags:{brand:"Home2 Suites","brand:wikidata":"Q5887912","brand:wikipedia":"en:Home2 Suites by Hilton",name:"Home2 Suites",official_name:"Home2 Suites by Hilton",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:["home2"],matchScore:2,suggestion:true},"tourism/hotel/Homewood Suites":{name:"Homewood Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/HomewoodSuites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5890701",tourism:"hotel"},addTags:{brand:"Homewood Suites","brand:wikidata":"Q5890701","brand:wikipedia":"en:Homewood Suites by Hilton",name:"Homewood Suites",official_name:"Homewood Suites by Hilton",tourism:"hotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hotel Indigo":{name:"Hotel Indigo",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hotelindigo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5911596",tourism:"hotel"},addTags:{brand:"Hotel Indigo","brand:wikidata":"Q5911596","brand:wikipedia":"en:Hotel Indigo",name:"Hotel Indigo",tourism:"hotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hyatt":{name:"Hyatt",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hyatt Centric":{name:"Hyatt Centric",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Hyatt Centric","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Centric",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hyatt House":{name:"Hyatt House",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Hyatt House","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt House",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hyatt Place":{name:"Hyatt Place",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHyatt%20Place%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q72629292",tourism:"hotel"},addTags:{brand:"Hyatt Place","brand:wikidata":"Q72629292",name:"Hyatt Place",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hyatt Regency":{name:"Hyatt Regency",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Hyatt Regency","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Regency",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Ibis":{name:"Ibis",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ibishotels.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q920166",tourism:"hotel"},addTags:{brand:"Ibis","brand:wikidata":"Q920166","brand:wikipedia":"en:Ibis (hotel)",name:"Ibis",tourism:"hotel"},terms:["hotel ibis","ibis hotel"],matchScore:2,suggestion:true},"tourism/hotel/Ibis Budget":{name:"Ibis Budget",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ibisbudget.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1458135",tourism:"hotel"},addTags:{brand:"Ibis Budget","brand:wikidata":"Q1458135","brand:wikipedia":"en:Ibis Budget",name:"Ibis Budget",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Ibis Styles":{name:"Ibis Styles",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ibisstyles.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3147425",tourism:"hotel"},addTags:{brand:"Ibis Styles","brand:wikidata":"Q3147425","brand:wikipedia":"en:Ibis Styles",name:"Ibis Styles",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/InterContinental":{name:"InterContinental",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/intercontinental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1825730",tourism:"hotel"},addTags:{brand:"InterContinental","brand:wikidata":"Q1825730","brand:wikipedia":"en:InterContinental",name:"InterContinental",tourism:"hotel"},terms:["intercontinental hotels & resorts"],matchScore:2,suggestion:true},"tourism/hotel/Intercity Hotel":{name:"Intercity Hotel",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/InterCityHotel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q73642490",tourism:"hotel"},addTags:{brand:"Intercity Hotel","brand:wikidata":"Q73642490",name:"Intercity Hotel",tourism:"hotel"},countryCodes:["at","cn","de","nl","om","sa"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/JW Marriott":{name:"JW Marriott",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/JWMarriott/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1067636",tourism:"hotel"},addTags:{brand:"JW Marriott","brand:wikidata":"Q1067636","brand:wikipedia":"en:JW Marriott Hotels",name:"JW Marriott",tourism:"hotel"},terms:["jw marriott hotels"],matchScore:2,suggestion:true},"tourism/hotel/Jurys Inn":{name:"Jurys Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/JurysInns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12060924",tourism:"hotel"},addTags:{brand:"Jurys Inn","brand:wikidata":"Q12060924","brand:wikipedia":"en:Jurys Inn",name:"Jurys Inn",tourism:"hotel"},countryCodes:["cz","gb","ie"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Kimpton":{name:"Kimpton",icon:"fas-concierge-bell",imageURL:"https://pbs.twimg.com/profile_images/1145777057021870081/XPPH34bU_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q6410248",tourism:"hotel"},addTags:{brand:"Kimpton","brand:wikidata":"Q6410248","brand:wikipedia":"en:Kimpton Hotels & Restaurants",name:"Kimpton",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Kyriad":{name:"Kyriad",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/kyriadindia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11751808",tourism:"hotel"},addTags:{brand:"Kyriad","brand:wikidata":"Q11751808","brand:wikipedia":"pl:Kyriad",name:"Kyriad",tourism:"hotel"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/La Quinta Inn":{name:"La Quinta Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/laquinta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6464734",tourism:"hotel"},addTags:{brand:"La Quinta Inn","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta Inn",official_name:"La Quinta Inn by Wyndham",tourism:"hotel"},countryCodes:["ca","cl","co","hn","mx","us"],terms:["la quinta"],matchScore:2,suggestion:true},"tourism/hotel/La Quinta Inn & Suites":{name:"La Quinta Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/laquinta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6464734",tourism:"hotel"},addTags:{brand:"La Quinta Inn & Suites","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta Inn & Suites",official_name:"La Quinta Inn & Suites by Wyndham",tourism:"hotel"},countryCodes:["ca","us"],terms:["la quinta inns and suites"],matchScore:2,suggestion:true},"tourism/hotel/Le Méridien":{name:"Le Méridien",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/lemeridien/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q261077",tourism:"hotel"},addTags:{brand:"Le Méridien","brand:wikidata":"Q261077","brand:wikipedia":"en:Le Méridien",name:"Le Méridien",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Marriott":{name:"Marriott",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/marriottinternational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141173",tourism:"hotel"},addTags:{brand:"Marriott","brand:wikidata":"Q1141173","brand:wikipedia":"en:Marriott International",name:"Marriott",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Marriott Executive Apartments":{name:"Marriott Executive Apartments",icon:"fas-concierge-bell",geometry:["point","area"],tags:{"brand:wikidata":"Q72636824",tourism:"hotel"},addTags:{brand:"Marriott Executive Apartments","brand:wikidata":"Q72636824",name:"Marriott Executive Apartments",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Meininger":{name:"Meininger",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/MeiningerHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42773330",tourism:"hotel"},addTags:{brand:"Meininger","brand:wikidata":"Q42773330","brand:wikipedia":"de:Meininger Hotel Gruppe",name:"Meininger",official_name:"Meininger Hotels",tourism:"hotel"},terms:["hoteles meininger"],matchScore:2,suggestion:true},"tourism/hotel/Mercure":{name:"Mercure",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/MercureHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1709809",tourism:"hotel"},addTags:{brand:"Mercure","brand:wikidata":"Q1709809","brand:wikipedia":"en:Mercure (hotel)",name:"Mercure",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Microtel":{name:"Microtel",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMicrotel.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6840402",tourism:"hotel"},addTags:{brand:"Microtel","brand:wikidata":"Q6840402","brand:wikipedia":"en:Microtel Inn and Suites",name:"Microtel",official_name:"Microtel by Wyndham",tourism:"hotel"},countryCodes:["ca","cn","mx","ph","us"],terms:["microtel inn"],matchScore:2,suggestion:true},"tourism/hotel/Microtel Inn & Suites":{name:"Microtel Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMicrotel.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6840402",tourism:"hotel"},addTags:{brand:"Microtel Inn & Suites","brand:wikidata":"Q6840402","brand:wikipedia":"en:Microtel Inn and Suites",name:"Microtel Inn & Suites",official_name:"Microtel Inn & Suites by Wyndham",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Moxy":{name:"Moxy",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMoxy%20Hotels%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q70287020",tourism:"hotel"},addTags:{brand:"Moxy","brand:wikidata":"Q70287020","brand:wikipedia":"en:Marriott International",name:"Moxy",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Novotel":{name:"Novotel",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Novotelhotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q420545",tourism:"hotel"},addTags:{brand:"Novotel","brand:wikidata":"Q420545","brand:wikipedia":"en:Novotel",name:"Novotel",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Park Hyatt":{name:"Park Hyatt",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Park Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Park Hyatt",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Park Inn":{name:"Park Inn",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPark%20Inn%20by%20Radisson%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q60711675",tourism:"hotel"},addTags:{brand:"Park Inn","brand:wikidata":"Q60711675","brand:wikipedia":"ru:Park Inn by Radisson",name:"Park Inn",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Park Plaza":{name:"Park Plaza",icon:"fas-concierge-bell",geometry:["point","area"],tags:{"brand:wikidata":"Q2052550",tourism:"hotel"},addTags:{brand:"Park Plaza","brand:wikidata":"Q2052550","brand:wikipedia":"en:Park Plaza Hotels & Resorts",name:"Park Plaza Hotels",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Premier Inn":{name:"Premier Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/premierinn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2108626",tourism:"hotel"},addTags:{brand:"Premier Inn","brand:wikidata":"Q2108626","brand:wikipedia":"en:Premier Inn",name:"Premier Inn",tourism:"hotel"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Première Classe":{name:"Première Classe",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/PremiereClasseHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5964551",tourism:"hotel"},addTags:{brand:"Première Classe","brand:wikidata":"Q5964551","brand:wikipedia":"en:Hôtel Première Classe",name:"Première Classe",tourism:"hotel"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Protea Hotel":{name:"Protea Hotel",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ProteaHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17092570",tourism:"hotel"},addTags:{brand:"Protea Hotel","brand:wikidata":"Q17092570","brand:wikipedia":"en:Protea Hotels by Marriott",name:"Protea Hotel",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Quality Inn":{name:"Quality Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Quality Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Quality Inn & Suites":{name:"Quality Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Quality Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn & Suites",tourism:"hotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Qubus":{name:"Qubus",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/QubusHotel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11832868",tourism:"hotel"},addTags:{brand:"Qubus","brand:wikidata":"Q11832868","brand:wikipedia":"pl:Qubus Hotel",name:"Qubus",official_name:"Qubus Hotel",tourism:"hotel"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Radisson":{name:"Radisson",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRadissonRus.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1751979",tourism:"hotel"},addTags:{brand:"Radisson","brand:wikidata":"Q1751979","brand:wikipedia":"en:Radisson Hotels",name:"Radisson",tourism:"hotel"},terms:["radisson hotels"],matchScore:2,suggestion:true},"tourism/hotel/Radisson Blu":{name:"Radisson Blu",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/radissonblu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7281341",tourism:"hotel"},addTags:{brand:"Radisson Blu","brand:wikidata":"Q7281341","brand:wikipedia":"en:Radisson Blu",name:"Radisson Blu",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Ramada":{name:"Ramada",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ramada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1502859",tourism:"hotel"},addTags:{brand:"Ramada","brand:wikidata":"Q1502859","brand:wikipedia":"en:Ramada",name:"Ramada",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Red Lion Hotels":{name:"Red Lion Hotels",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/redlionhotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25047720",tourism:"hotel"},addTags:{brand:"Red Lion Hotels","brand:wikidata":"Q25047720","brand:wikipedia":"en:Red Lion Hotels",name:"Red Lion Hotels",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Red Roof Inn":{name:"Red Roof Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/redroofinn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7304949",tourism:"hotel"},addTags:{brand:"Red Roof Inn","brand:wikidata":"Q7304949","brand:wikipedia":"en:Red Roof Inn",name:"Red Roof Inn",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Renaissance":{name:"Renaissance",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/RenaissanceHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2143252",tourism:"hotel"},addTags:{brand:"Renaissance","brand:wikidata":"Q2143252","brand:wikipedia":"en:Renaissance Hotels",name:"Renaissance",tourism:"hotel"},terms:["renaissance hotel"],matchScore:2,suggestion:true},"tourism/hotel/Residence Inn":{name:"Residence Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/residenceinn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7315394",tourism:"hotel"},addTags:{brand:"Residence Inn","brand:wikidata":"Q7315394","brand:wikipedia":"en:Residence Inn by Marriott",name:"Residence Inn",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Sheraton":{name:"Sheraton",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Sheraton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q634831",tourism:"hotel"},addTags:{brand:"Sheraton","brand:wikidata":"Q634831","brand:wikipedia":"en:Sheraton Hotels and Resorts",name:"Sheraton",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Sleep Inn":{name:"Sleep Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Sleep Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Sleep Inn",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/SpringHill Suites":{name:"SpringHill Suites",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSpringHill%20Suites%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7580351",tourism:"hotel"},addTags:{brand:"SpringHill Suites","brand:wikidata":"Q7580351","brand:wikipedia":"en:SpringHill Suites",name:"SpringHill Suites",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/St. Regis":{name:"St. Regis",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/stregis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30715430",tourism:"hotel"},addTags:{alt_name:"Saint Regis",brand:"St. Regis","brand:wikidata":"Q30715430","brand:wikipedia":"en:St. Regis Hotels & Resorts",name:"St. Regis",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Staybridge Suites":{name:"Staybridge Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/StaybridgeSuites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7605116",tourism:"hotel"},addTags:{brand:"Staybridge Suites","brand:wikidata":"Q7605116","brand:wikipedia":"en:Staybridge Suites",name:"Staybridge Suites",tourism:"hotel"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/TRYP":{name:"TRYP",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Tryp.Hotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6153452",tourism:"hotel"},addTags:{brand:"TRYP","brand:wikidata":"Q6153452","brand:wikipedia":"en:TRYP by Wyndham",name:"TRYP",official_name:"TRYP by Wyndham",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/The Ritz-Carlton":{name:"The Ritz-Carlton",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ritzcarlton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q782200",tourism:"hotel"},addTags:{brand:"The Ritz-Carlton","brand:wikidata":"Q782200","brand:wikipedia":"en:The Ritz-Carlton Hotel Company",name:"The Ritz-Carlton",tourism:"hotel"},terms:["ritz","ritz carlton","the ritz"],matchScore:2,suggestion:true},"tourism/hotel/The Westin":{name:"The Westin",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWestin%20Hotels%20%26%20Resorts%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1969162",tourism:"hotel"},addTags:{brand:"Westin","brand:wikidata":"Q1969162","brand:wikipedia":"en:Westin Hotels & Resorts",name:"The Westin",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/TownePlace Suites":{name:"TownePlace Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/TownePlaceSuites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7830092",tourism:"hotel"},addTags:{brand:"TownePlace Suites","brand:wikidata":"Q7830092","brand:wikipedia":"en:TownePlace Suites",name:"TownePlace Suites",official_name:"TownePlace Suites by Marriott",tourism:"hotel"},countryCodes:["ca","us"],terms:["towneplace marriott","towneplace suites marriott"],matchScore:2,suggestion:true},"tourism/hotel/Travelodge (AsiaOceania)":{name:"Travelodge (Asia/Oceania)",icon:"fas-concierge-bell",imageURL:"https://pbs.twimg.com/profile_images/665028491448991744/p_HszsSZ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q24997583",tourism:"hotel"},addTags:{brand:"Travelodge","brand:wikidata":"Q24997583","brand:wikipedia":"en:Travelodge Australia",name:"Travelodge",tourism:"hotel"},countryCodes:["au","hk","id","kr","my","nz","sg","th"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Travelodge (Europe)":{name:"Travelodge (Europe)",icon:"fas-concierge-bell",imageURL:"https://pbs.twimg.com/profile_images/936237069269196801/IRTs-ePs_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q9361374",tourism:"hotel"},addTags:{brand:"Travelodge","brand:wikidata":"Q9361374","brand:wikipedia":"en:Travelodge UK",name:"Travelodge",tourism:"hotel"},countryCodes:["es","gb","ie"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Travelodge (North America)":{name:"Travelodge (North America)",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Travelodge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7836087",tourism:"hotel"},addTags:{brand:"Travelodge","brand:wikidata":"Q7836087","brand:wikipedia":"en:Travelodge",name:"Travelodge",tourism:"hotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Tru":{name:"Tru",icon:"fas-concierge-bell",geometry:["point","area"],tags:{"brand:wikidata":"Q24907770",tourism:"hotel"},addTags:{brand:"Tru","brand:wikidata":"Q24907770","brand:wikipedia":"en:Tru by Hilton",name:"Tru",official_name:"Tru by Hilton",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Van der Valk Hotel":{name:"Van der Valk Hotel",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Van%20der%20Valk.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2802214",tourism:"hotel"},addTags:{brand:"Van der Valk","brand:wikidata":"Q2802214","brand:wikipedia":"en:Van der Valk (company)",name:"Van der Valk Hotel",tourism:"hotel"},countryCodes:["be","de","es","fr","nl","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/W Hotels":{name:"W Hotels",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/WHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7958488",tourism:"hotel"},addTags:{brand:"W Hotels","brand:wikidata":"Q7958488","brand:wikipedia":"en:W Hotels",name:"W Hotels",short_name:"W",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Wingate":{name:"Wingate",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/WingateHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8025144",tourism:"hotel"},addTags:{brand:"Wingate","brand:wikidata":"Q8025144","brand:wikipedia":"en:Wingate by Wyndham",name:"Wingate",official_name:"Wingate by Wyndham",tourism:"hotel"},countryCodes:["us"],terms:["wingate inn"],matchScore:2,suggestion:true},"tourism/hotel/easyHotel":{name:"easyHotel",icon:"fas-concierge-bell",imageURL:"https://abs.twimg.com/sticky/default_profile_images/default_profile_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q17011598",tourism:"hotel"},addTags:{brand:"easyHotel","brand:wikidata":"Q17011598","brand:wikipedia":"en:EasyHotel",name:"easyHotel",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/東横イン":{name:"東横イン",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ToyokoInn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1320541",tourism:"hotel"},addTags:{brand:"東横イン","brand:en":"Toyoko Inn","brand:ja":"東横イン","brand:wikidata":"Q1320541","brand:wikipedia":"en:Toyoko Inn",name:"東横イン","name:en":"Toyoko Inn","name:ja":"東横イン",tourism:"hotel"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"tourism/motel/Budget Host Inn":{name:"Budget Host Inn",icon:"maki-lodging",geometry:["point","area"],tags:{"brand:wikidata":"Q16954336",tourism:"motel"},addTags:{alt_name:"Budget Host",brand:"Budget Host Inn","brand:wikidata":"Q16954336","brand:wikipedia":"en:Budget Host",name:"Budget Host Inn",tourism:"motel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/motel/Econo Lodge":{name:"Econo Lodge",icon:"maki-lodging",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5333330",tourism:"motel"},addTags:{brand:"Econo Lodge","brand:wikidata":"Q5333330","brand:wikipedia":"en:Econo Lodge",name:"Econo Lodge",tourism:"motel"},terms:[],matchScore:2,suggestion:true},"tourism/motel/Knights Inn":{name:"Knights Inn",icon:"maki-lodging",geometry:["point","area"],tags:{"brand:wikidata":"Q6422409",tourism:"motel"},addTags:{brand:"Knights Inn","brand:wikidata":"Q6422409","brand:wikipedia":"en:Knights Inn",name:"Knights Inn",tourism:"motel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/motel/Motel 6":{name:"Motel 6",icon:"maki-lodging",imageURL:"https://graph.facebook.com/motel6/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2188884",tourism:"motel"},addTags:{brand:"Motel 6","brand:wikidata":"Q2188884","brand:wikipedia":"en:Motel 6",name:"Motel 6",tourism:"motel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/motel/Rodeway Inn":{name:"Rodeway Inn",icon:"maki-lodging",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7356709",tourism:"motel"},addTags:{brand:"Rodeway Inn","brand:wikidata":"Q7356709","brand:wikipedia":"en:Rodeway Inn",name:"Rodeway Inn",tourism:"motel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/motel/Super 8":{name:"Super 8",icon:"maki-lodging",imageURL:"https://graph.facebook.com/Super8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5364003",tourism:"motel"},addTags:{brand:"Super 8","brand:wikidata":"Q5364003","brand:wikipedia":"en:Super 8 Motels",name:"Super 8",tourism:"motel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true}};
26828
26829         var defaults = {area:["category-landuse","category-building","category-water","category-natural","leisure/park","amenity/hospital","amenity/place_of_worship","amenity/cafe","amenity/restaurant","area"],line:["category-road_major","category-road_minor","category-rail","category-path","category-waterway","category-barrier","category-natural","category-utility","line"],point:["category-natural","leisure/park","amenity/hospital","amenity/place_of_worship","amenity/cafe","amenity/restaurant","amenity/fast_food","amenity/bar","amenity/bank","shop/supermarket","point"],vertex:["highway/crossing/marked","highway/crossing/unmarked","railway/level_crossing","highway/traffic_signals","highway/turning_circle","highway/turning_loop","traffic_calming","highway/mini_roundabout","highway/motorway_junction","point"],relation:["category-route","category-restriction","public_transport/stop_area","type/boundary","type/waterway","type/multipolygon","type/enforcement","type/site","relation"]};
26830
26831         var categories = {"category-barrier":{icon:"maki-roadblock",name:"Barrier Features",members:["barrier/fence","barrier/wall","barrier/ditch","barrier/gate","barrier/hedge","barrier/kerb","barrier"]},"category-building":{icon:"maki-building",name:"Building Features",members:["building","building/house","building/apartments","building/garage","building/retail","building/commercial","building/industrial","building/residential"]},"category-golf":{icon:"maki-golf",name:"Golf Features",members:["golf/fairway","golf/green","golf/lateral_water_hazard","golf/rough","golf/bunker","golf/tee","golf/water_hazard","golf/driving_range","golf/hole","golf/cartpath","golf/path"]},"category-landuse":{icon:"maki-landuse",name:"Land Use Features",members:["landuse/residential","landuse/industrial","landuse/commercial","landuse/retail","landuse/farmland","landuse/farmyard","landuse/forest","landuse/meadow","landuse/aquaculture","landuse/cemetery","landuse/military","landuse/religious"]},"category-natural":{icon:"maki-natural",name:"Natural Features",members:["natural/water","natural/wood","natural/scrub","natural/wetland","natural/grassland","natural/heath","natural/bare_rock","natural/beach","natural/cave_entrance","natural/glacier","natural/coastline","natural/tree_row","natural/peak","natural/cliff"]},"category-path":{icon:"temaki-pedestrian",name:"Paths",members:["highway/path","highway/footway","highway/footway/marked","highway/footway/sidewalk","highway/steps","highway/cycleway","highway/bridleway","highway/pedestrian_line"]},"category-rail":{icon:"iD-railway-rail",name:"Rails",members:["railway/rail","railway/disused","railway/tram","railway/subway","railway/narrow_gauge","railway/light_rail","railway/monorail","railway/funicular"]},"category-restriction":{icon:"iD-restriction",name:"Restriction Features",members:["type/restriction/no_left_turn","type/restriction/no_right_turn","type/restriction/no_straight_on","type/restriction/no_u_turn","type/restriction/only_left_turn","type/restriction/only_right_turn","type/restriction/only_straight_on","type/restriction/only_u_turn","type/restriction"]},"category-road_major":{icon:"iD-highway-unclassified",name:"Major Roads",members:["highway/motorway","highway/trunk","highway/primary","highway/secondary","highway/tertiary","highway/motorway_link","highway/trunk_link","highway/primary_link","highway/secondary_link","highway/tertiary_link"]},"category-road_minor":{icon:"iD-highway-unclassified",name:"Minor Roads",members:["highway/unclassified","highway/residential","highway/living_street","highway/service","highway/track"]},"category-road_service":{icon:"iD-highway-service",name:"Service Roads",members:["highway/service","highway/service/parking_aisle","highway/service/driveway","highway/service/alley","highway/service/emergency_access","highway/service/drive-through"]},"category-route":{icon:"iD-route",name:"Route Features",members:["type/route/road","type/route/bicycle","type/route/foot","type/route/hiking","type/route/horse","type/route/piste","type/route/bus","type/route/train","type/route/light_rail","type/route/tram","type/route/subway","type/route/ferry","type/route/power","type/route/pipeline","type/route/detour","type/route_master","type/route"]},"category-utility":{icon:"iD-power-line",name:"Utility Features",members:["power/line","power/minor_line","man_made/pipeline","power/cable/underground"]},"category-water":{icon:"maki-water",name:"Water Bodies",members:["natural/water","natural/water/pond","natural/water/basin","natural/water/lake","natural/water/reservoir"]},"category-waterway":{icon:"iD-waterway-stream",name:"Waterways",members:["waterway/stream","waterway/drain","waterway/river","waterway/canal","waterway/ditch","natural/water/stream","natural/water/river","natural/water/canal"]}};
26832
26833         var fields = {access_aisle:{key:"access_aisle",type:"combo",label:"Type"},access_simple:{key:"access",type:"combo",label:"Allowed Access",options:["yes","permissive","private","customers","permit","no"],terms:["permitted","private","public"]},access:{keys:["access","foot","motor_vehicle","bicycle","horse"],reference:{key:"access"},type:"access",label:"Allowed Access",placeholder:"Not Specified",strings:{types:{access:"All",foot:"Foot",motor_vehicle:"Motor Vehicles",bicycle:"Bicycles",horse:"Horses"},options:{yes:{title:"Allowed",description:"Access allowed by law; a right of way"},no:{title:"Prohibited",description:"Access not allowed to the general public"},permissive:{title:"Permissive",description:"Access allowed until such time as the owner revokes the permission"},"private":{title:"Private",description:"Access allowed only with permission of the owner on an individual basis"},designated:{title:"Designated",description:"Access allowed according to signs or specific local laws"},destination:{title:"Destination",description:"Access allowed only to reach a destination"},dismount:{title:"Dismount",description:"Access allowed but rider must dismount"},permit:{title:"Permit",description:"Access allowed only with a valid permit or license"}}}},"addr/interpolation":{key:"addr:interpolation",type:"combo",label:"Type",strings:{options:{all:"All",even:"Even",odd:"Odd",alphabetic:"Alphabetic"}}},address:{type:"address",key:"addr",keys:["addr:block_number","addr:city","addr:block_number","addr:conscriptionnumber","addr:county","addr:country","addr:county","addr:district","addr:floor","addr:hamlet","addr:housename","addr:housenumber","addr:neighbourhood","addr:place","addr:postcode","addr:province","addr:quarter","addr:state","addr:street","addr:subdistrict","addr:suburb","addr:unit"],icon:"address",label:"Address",strings:{placeholders:{block_number:"Block Number","block_number!jp":"Block No.",city:"City","city!cn":"City/Prefecture/League","city!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town",conscriptionnumber:"123",country:"Country",county:"County","county!jp":"District",district:"District","district!cn":"District/County/Banner","district!vn":"Arrondissement/Town/District",floor:"Floor",hamlet:"Hamlet",housename:"Housename",housenumber:"123","housenumber!jp":"Building No./Lot No.",neighbourhood:"Neighbourhood","neighbourhood!jp":"Chōme/Aza/Koaza",place:"Place",postcode:"Postcode",province:"Province","province!cn":"Province/Municipality/AR/SAR","province!jp":"Prefecture",quarter:"Quarter","quarter!jp":"Ōaza/Machi",state:"State",street:"Street",subdistrict:"Subdistrict","subdistrict!vn":"Ward/Commune/Townlet",suburb:"Suburb","suburb!jp":"Ward",unit:"Unit"}},terms:["location"]},admin_level:{key:"admin_level",type:"number",minValue:1,label:"Admin Level"},aerialway:{key:"aerialway",type:"typeCombo",label:"Type"},"aerialway/access":{key:"aerialway:access",type:"combo",label:"Access",strings:{options:{entry:"Entry",exit:"Exit",both:"Both"}}},"aerialway/bubble":{key:"aerialway:bubble",type:"check",label:"Bubble"},"aerialway/capacity":{key:"aerialway:capacity",type:"number",minValue:0,label:"Capacity (per hour)",placeholder:"500, 2500, 5000..."},"aerialway/duration":{key:"aerialway:duration",type:"number",minValue:0,label:"Duration (minutes)",placeholder:"1, 2, 3..."},"aerialway/heating":{key:"aerialway:heating",type:"check",label:"Heated"},"aerialway/occupancy":{key:"aerialway:occupancy",type:"number",minValue:0,label:"Occupancy",placeholder:"2, 4, 8..."},"aerialway/summer/access":{key:"aerialway:summer:access",type:"combo",label:"Access (summer)",strings:{options:{entry:"Entry",exit:"Exit",both:"Both"}}},aeroway:{key:"aeroway",type:"typeCombo",label:"Type"},agrarian:{key:"agrarian",type:"semiCombo",label:"Products"},air_conditioning:{key:"air_conditioning",type:"check",label:"Air Conditioning",terms:["cooling system","refrigeration"]},amenity:{key:"amenity",type:"typeCombo",label:"Type"},animal_boarding:{key:"animal_boarding",type:"semiCombo",label:"For Animals"},animal_breeding:{key:"animal_breeding",type:"semiCombo",label:"For Animals"},animal_shelter:{key:"animal_shelter",type:"semiCombo",label:"For Animals"},architect:{key:"architect",type:"text",label:"Architect",terms:["building designer"]},"area/highway":{key:"area:highway",type:"typeCombo",label:"Type"},artist:{key:"artist_name",type:"text",label:"Artist"},artwork_type:{key:"artwork_type",type:"combo",label:"Type"},atm:{key:"atm",type:"check",label:"ATM"},attraction:{key:"attraction",type:"typeCombo",label:"Type"},baby_feeding:{key:"baby_feeding",type:"combo",label:"Baby Nursing Area",strings:{options:{room:"Dedicated Room",yes:"Marked Space",no:"None"}},terms:["baby feeding","breastfeeding","lactation","mothers","nursing"]},baby_seat:{key:"baby",type:"check",label:"Baby Seat"},backcountry:{key:"backcountry",type:"check",label:"Backcountry"},backrest:{key:"backrest",type:"check",label:"Backrest"},bar:{key:"bar",type:"check",label:"Bar"},barrier:{key:"barrier",type:"typeCombo",label:"Type"},basin:{key:"basin",type:"combo",label:"Type"},"bath/open_air":{key:"bath:open_air",label:"Open Air",type:"check"},"bath/sand_bath":{key:"bath:sand_bath",label:"Sand Bath",type:"check"},"bath/type":{key:"bath:type",type:"combo",label:"Specialty",strings:{options:{onsen:"Japanese Onsen",foot_bath:"Foot Bath",hot_spring:"Hot Spring"}}},beauty:{key:"beauty",type:"combo",label:"Beauty Specialty"},bench:{key:"bench",type:"check",label:"Bench",terms:["seating"]},bicycle_parking:{key:"bicycle_parking",type:"combo",label:"Type"},bin:{key:"bin",type:"check",label:"Waste Bin",terms:["garbage can","trash can"]},blind:{key:"blind",type:"radio",strings:{options:{yes:"Yes",limited:"Limited",no:"No"}},label:"Blind Person Access",terms:["sight impairment","vision impairment"]},blood_components:{key:"blood:",type:"multiCombo",label:"Blood Components",strings:{options:{whole:"whole blood",plasma:"plasma",platelets:"platelets",stemcells:"stem cell samples"}}},board_type:{key:"board_type",type:"typeCombo",label:"Type"},bollard:{key:"bollard",type:"combo",label:"Type"},booth:{key:"booth",type:"combo",label:"Booth",caseSensitive:true},bottle:{key:"bottle",type:"check",label:"Bottle Filling"},boules:{key:"boules",type:"typeCombo",label:"Type"},boundary:{key:"boundary",type:"combo",label:"Type"},brand:{key:"brand",type:"text",label:"Brand"},brewery:{key:"brewery",type:"semiCombo",label:"Draft Beers",terms:["on tap"]},bridge:{key:"bridge",type:"typeCombo",label:"Type",placeholder:"Default"},"bridge/support":{key:"bridge:support",type:"combo",label:"Type"},building_area:{key:"building",type:"combo","default":"yes",geometry:"area",label:"Building"},building:{key:"building",type:"combo",label:"Building",terms:["structure"]},"building/levels_building":{key:"building:levels",type:"number",minValue:0,label:"Building Levels",placeholder:"2, 4, 6...",prerequisiteTag:{key:"building",valueNot:"no"}},"building/levels":{key:"building:levels",type:"number",minValue:0,label:"Levels",placeholder:"2, 4, 6..."},"building/levels/underground":{key:"building:levels:underground",type:"number",minValue:0,label:"Underground Levels",placeholder:"2, 4, 6...",terms:["basement levels"]},"building/material":{key:"building:material",type:"combo",label:"Material"},bunker_type:{key:"bunker_type",type:"combo",label:"Type"},cables:{key:"cables",type:"number",minValue:1,label:"Cables",placeholder:"1, 2, 3..."},"camera/direction":{key:"camera:direction",type:"number",label:"Direction (Degrees Clockwise)",placeholder:"45, 90, 180, 270"},"camera/mount":{key:"camera:mount",type:"combo",label:"Camera Mount"},"camera/type":{key:"camera:type",type:"combo",label:"Camera Type",strings:{options:{fixed:"Fixed",panning:"Panning",dome:"Dome"}}},capacity:{key:"capacity",type:"number",minValue:0,label:"Capacity",placeholder:"50, 100, 200..."},cash_in:{key:"cash_in",type:"check",label:"Cash In"},castle_type:{key:"castle_type",type:"combo",label:"Type"},changing_table:{key:"changing_table",type:"check",label:"Diaper Changing Table"},charge_fee:{key:"charge",type:"text",label:"Fee Amount",placeholder:"1 EUR, 5 USD, 10 JPY…",prerequisiteTag:{key:"fee",valueNot:"no"}},charge_toll:{key:"charge",type:"text",label:"Toll Amount",placeholder:"1 EUR, 5 USD, 10 JPY…",prerequisiteTag:{key:"toll",valueNot:"no"}},check_date:{key:"check_date",type:"text",label:"Last Checked Date"},clothes:{key:"clothes",type:"semiCombo",label:"Clothes"},club:{key:"club",type:"typeCombo",label:"Type"},collection_times:{key:"collection_times",type:"text",label:"Collection Times"},colour:{key:"colour",type:"text",label:"Color"},comment:{key:"comment",type:"textarea",label:"Changeset Comment",placeholder:"Brief description of your contributions (required)"},communication_multi:{key:"communication:",type:"multiCombo",label:"Communication Types"},connectivity:{key:"connectivity",type:"text",label:"Connectivity"},construction:{key:"construction",type:"combo",label:"Type"},consulate:{key:"consulate",type:"combo",label:"Type"},consulting:{key:"consulting",type:"semiCombo",label:"Expertise"},"contact/webcam":{key:"contact:webcam",type:"url",icon:"website",label:"Webcam URL",placeholder:"http://example.com/"},content:{key:"content",type:"combo",label:"Content",options:["silage","water","oil","fuel","slurry","gas","manure","sewage"]},conveying_escalator:{key:"conveying",type:"check",label:"Escalator"},conveying:{key:"conveying",type:"typeCombo",label:"Movement Direction",strings:{options:{forward:"Forward",backward:"Backward",reversible:"Reversible"}}},country_flag:{key:"country",type:"combo",label:"Flag Country",prerequisiteTag:{key:"flag:type",value:"national"}},country:{key:"country",type:"combo",label:"Country"},couplings:{key:"couplings",type:"number",minValue:1,label:"Couplings",placeholder:"1, 2, 3..."},covered:{key:"covered",type:"check",label:"Covered"},craft:{key:"craft",type:"typeCombo",label:"Type"},"crane/type":{key:"crane:type",type:"combo",label:"Crane Type",strings:{options:{portal_crane:"Portal Crane","floor-mounted_crane":"Floor-mounted Crane",travel_lift:"Travel Lift"}}},crop:{key:"crop",type:"semiCombo",label:"Crops"},crossing:{key:"crossing",type:"combo",label:"Type"},"crossing/island":{key:"crossing:island",type:"check",label:"Refuge Island"},cuisine:{key:"cuisine",type:"semiCombo",label:"Cuisines",terms:["fare","food types"]},currency_multi:{key:"currency:",type:"multiCombo",label:"Currency Types",terms:["bills","cash","coins","money"]},cutting:{key:"cutting",type:"typeCombo",label:"Type",placeholder:"Default"},cycle_network:{key:"cycle_network",type:"networkCombo",label:"Network"},cycleway:{keys:["cycleway","cycleway:left","cycleway:right"],reference:{key:"cycleway"},type:"cycleway",label:"Bike Lanes",placeholder:"none",strings:{types:{"cycleway:left":"Left side","cycleway:right":"Right side"},options:{none:{title:"None",description:"No bike lane"},lane:{title:"Standard bike lane",description:"A bike lane separated from auto traffic by a painted line"},shared_lane:{title:"Shared bike lane",description:"A bike lane with no separation from auto traffic"},track:{title:"Bike track",description:"A bike lane separated from traffic by a physical barrier"},share_busway:{title:"Bike lane shared with bus",description:"A bike lane shared with a bus lane"},opposite_lane:{title:"Opposite bike lane",description:"A bike lane that travels in the opposite direction of traffic"},opposite:{title:"Contraflow bike lane",description:"A bike lane that travels in both directions on a one-way street"}}}},"dance/style":{key:"dance:style",type:"semiCombo",label:"Dance Styles"},date:{key:"date",type:"check",label:"Date"},delivery:{key:"delivery",type:"check",label:"Delivery"},denomination:{key:"denomination",type:"combo",label:"Denomination",prerequisiteTag:{key:"religion",valueNot:"none"}},denotation:{key:"denotation",type:"combo",label:"Denotation"},departures_board:{key:"departures_board",type:"combo",label:"Departures Board",strings:{options:{yes:"Yes",timetable:"Timetable",realtime:"Realtime",no:"None"}}},description:{key:"description",type:"textarea",label:"Description",universal:true,terms:["summary"]},design:{key:"design",type:"combo",label:"Design"},destination_oneway:{key:"destination",type:"semiCombo",label:"Destinations",prerequisiteTag:{key:"oneway",value:"yes"},snake_case:false},"destination/ref_oneway":{key:"destination:ref",type:"semiCombo",label:"Destination Road Numbers",prerequisiteTag:{key:"oneway",value:"yes"},snake_case:false},"destination/symbol_oneway":{key:"destination:symbol",type:"semiCombo",label:"Destination Symbols",prerequisiteTag:{key:"oneway",value:"yes"}},devices:{key:"devices",type:"number",minValue:0,label:"Devices",placeholder:"1, 2, 3..."},diameter:{key:"diameter",type:"combo",label:"Diameter",snake_case:false,placeholder:"5 mm, 10 cm, 15 in…"},diet_multi:{key:"diet:",type:"multiCombo",label:"Diet Types",terms:["gluten free","fruitarian","halal","kosher","lactose free","meat","pescatarian","raw","vegan","vegetarian"]},diplomatic:{key:"diplomatic",type:"combo",label:"Type"},"diplomatic/services":{key:"diplomatic:services:",type:"multiCombo",label:"Services"},direction_cardinal:{key:"direction",type:"combo",label:"Direction",strings:{options:{N:"North",E:"East",S:"South",W:"West",NE:"Northeast",SE:"Southeast",SW:"Southwest",NW:"Northwest",NNE:"North-northeast",ENE:"East-northeast",ESE:"East-southeast",SSE:"South-southeast",SSW:"South-southwest",WSW:"West-southwest",WNW:"West-northwest",NNW:"North-northwest"}}},direction_clock:{key:"direction",type:"combo",label:"Direction",strings:{options:{clockwise:"Clockwise",anticlockwise:"Counterclockwise"}}},direction_vertex:{key:"direction",type:"combo",label:"Direction Affected",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},direction:{key:"direction",type:"number",label:"Direction (Degrees Clockwise)",placeholder:"45, 90, 180, 270"},dispensing:{key:"dispensing",type:"check",label:"Dispenses Prescriptions","default":"yes"},display:{key:"display",type:"combo",label:"Display",options:["analog","digital","sundial","unorthodox"]},distance:{key:"distance",type:"text",label:"Distance"},"disused/railway":{key:"disused:railway",type:"typeCombo",label:"Type"},dock:{key:"dock",type:"combo",label:"Type"},dog:{key:"dog",type:"combo",label:"Dogs",strings:{options:{yes:"Allowed",leashed:"Leashed Only",no:"Not Allowed"}},terms:["animals","pets"]},door_type:{key:"door",type:"typeCombo",label:"Type"},door:{key:"door",type:"combo",label:"Door"},drink_multi:{key:"drink:",type:"multiCombo",label:"Drinks"},drinking_water:{key:"drinking_water",type:"check",label:"Drinkable",terms:["drinkworthy","potable"]},drive_through:{key:"drive_through",type:"check",label:"Drive-Through"},duration:{key:"duration",type:"text",label:"Duration",placeholder:"00:00"},electrified:{key:"electrified",type:"combo",label:"Electrification",placeholder:"Contact Line, Electrified Rail...",strings:{options:{contact_line:"Contact Line",rail:"Electrified Rail",yes:"Yes (unspecified)",no:"No"}}},elevation:{key:"ele",type:"number",icon:"elevation",universal:true,label:"Elevation",terms:["altitude"]},email:{key:"email",type:"email",placeholder:"example@example.com",label:"Email"},embankment:{key:"embankment",type:"typeCombo",label:"Type",placeholder:"Default"},embassy:{key:"embassy",type:"combo",label:"Type"},emergency_combo:{key:"emergency",type:"combo",label:"Type"},emergency:{key:"emergency",type:"check",label:"Emergency"},enforcement:{key:"enforcement",type:"combo",label:"Type"},entrance:{key:"entrance",type:"typeCombo",label:"Type"},except:{key:"except",type:"combo",label:"Exceptions"},expected_rcn_route_relations:{key:"expected_rcn_route_relations",type:"number",label:"Adjacent Cycling Nodes"},expected_rwn_route_relations:{key:"expected_rwn_route_relations",type:"number",label:"Adjacent Walking Nodes"},faces:{key:"faces",type:"number",minValue:0,label:"Faces"},fax:{key:"fax",type:"tel",label:"Fax",placeholder:"+31 42 123 4567"},fee:{key:"fee",type:"check",label:"Fee"},fence_type:{key:"fence_type",type:"combo",label:"Type"},"fire_hydrant/diameter":{key:"fire_hydrant:diameter",type:"combo",label:"Diameter (mm, in, or letters)",snake_case:false},"fire_hydrant/pressure":{key:"fire_hydrant:pressure",type:"combo",label:"Pressure (bar)",snake_case:false},"fire_hydrant/type":{key:"fire_hydrant:type",type:"combo",label:"Shape",strings:{options:{pillar:"Pillar/Aboveground",underground:"Underground",wall:"Wall",pipe:"Capped Pipe"}}},fireplace:{key:"fireplace",type:"check",label:"Fireplace"},fishing:{key:"fishing",type:"combo",label:"Fishing"},fitness_station:{key:"fitness_station",type:"typeCombo",label:"Equipment Type"},fixme:{key:"fixme",type:"textarea",label:"Fix Me",universal:true,terms:["help request"]},"flag/type":{key:"flag:type",type:"combo",label:"Flag Type"},floating:{key:"floating",type:"check",label:"Floating"},flood_prone:{key:"flood_prone",type:"check",label:"Flood Prone"},ford:{key:"ford",type:"typeCombo",label:"Type",placeholder:"Default"},fountain:{key:"fountain",type:"combo",label:"Type"},frequency_electrified:{key:"frequency",type:"combo",label:"Operating Frequency",prerequisiteTag:{key:"electrified",valueNot:"no"}},frequency:{key:"frequency",type:"combo",label:"Operating Frequency"},from:{key:"from",type:"text",label:"From"},fuel_multi:{key:"fuel:",type:"multiCombo",label:"Fuel Types"},fuel:{key:"fuel",type:"combo",label:"Fuel"},gambling:{key:"gambling",type:"semiCombo",label:"Games"},gauge:{key:"gauge",type:"combo",label:"Gauge"},gender:{type:"radio",keys:["male","female","unisex"],label:"Gender",placeholder:"Unknown",strings:{options:{male:"Male",female:"Female",unisex:"Unisex"}},terms:["access","female","male","unisex"]},"generator/method":{key:"generator:method",type:"combo",label:"Method"},"generator/output/electricity":{key:"generator:output:electricity",type:"typeCombo",label:"Power Output",placeholder:"50 MW, 100 MW, 200 MW...",snake_case:false},"generator/source":{key:"generator:source",type:"combo",label:"Source"},"generator/type":{key:"generator:type",type:"combo",label:"Type"},"geyser/height":{key:"geyser:height",type:"text",label:"Eruption Height"},"gnis/feature_id":{key:"gnis:feature_id",type:"identifier",label:"GNIS Feature ID",urlFormat:"https://geonames.usgs.gov/apex/f?p=gnispq:3:::NO::P3_FID:{value}",pattern:"^[0-9]{1,}$",countryCodes:["us"],terms:["Federal Geographic Names Information Service","United States Board on Geographic Names","USA"]},government:{key:"government",type:"typeCombo",label:"Type"},grape_variety:{key:"grape_variety",type:"semiCombo",label:"Grape Varieties"},group_only:{key:"group_only",type:"check",label:"Groups Only"},guest_house:{key:"guest_house",type:"combo",label:"Type"},handicap:{key:"handicap",type:"number",label:"Handicap",placeholder:"1-18"},handrail:{key:"handrail",type:"check",label:"Handrail"},hashtags:{key:"hashtags",type:"semiCombo",label:"Hashtags",placeholder:"#example"},healthcare:{key:"healthcare",type:"typeCombo",label:"Type"},"healthcare/speciality":{key:"healthcare:speciality",type:"semiCombo",reference:{key:"healthcare"},label:"Specialties"},height_building:{key:"height",minValue:0,type:"number",label:"Building Height (Meters)",prerequisiteTag:{key:"building",valueNot:"no"}},height:{key:"height",minValue:0,type:"number",label:"Height (Meters)"},highspeed:{key:"highspeed",type:"check",label:"High-Speed"},highway:{key:"highway",type:"typeCombo",label:"Type"},historic:{key:"historic",type:"typeCombo",label:"Type"},"historic/civilization":{key:"historic:civilization",type:"combo",label:"Historic Civilization"},"historic/wreck/date_sunk":{key:"wreck:date_sunk",type:"text",label:"Date Sunk"},"historic/wreck/visible_at_high_tide":{key:"wreck:visible_at_high_tide",type:"check",label:"Visible At High Tide"},"historic/wreck/visible_at_low_tide":{key:"wreck:visible_at_low_tide",type:"check",label:"Visible At Low Tide"},hoops:{key:"hoops",type:"number",minValue:0,label:"Hoops",placeholder:"1, 2, 4..."},horse_dressage:{key:"sport",type:"check",label:"Dressage Riding",strings:{options:{"undefined":"No",equestrian:"Yes"}},reference:{key:"sport",value:"equestrian"}},horse_riding:{key:"leisure",type:"check",label:"Horseback Riding",strings:{options:{"undefined":"No",horse_riding:"Yes"}},reference:{key:"leisure",value:"horse_riding"}},horse_scale:{key:"horse_scale",type:"combo",label:"Horseback Riding Difficulty",placeholder:"Difficult, Dangerous...",strings:{options:{common:"Easy: No problems or difficulties. (default)",demanding:"Use with caution: Uneven way, occasional difficult passages.",difficult:"Difficult: Way narrow and exposed. May contain obstacles to step over and narrow passages.",critical:"Borderline: Passable only for experienced riders and horses. Major obstacles. Bridges should be examined carefully.",dangerous:"Dangerous: Passable only for very experienced riders and horses and only in good weather. Dismount.",impossible:"Impassable: Way or bridge not passable for horses. Too narrow, insuffient support, obstacles like ladders. Danger of life."}}},horse_stables:{key:"amenity",type:"check",label:"Riding Stable",strings:{options:{"undefined":"No",stables:"Yes"}},reference:{key:"amenity",value:"stables"}},hot_water:{key:"hot_water",type:"check",label:"Hot Water"},iata:{key:"iata",type:"text",label:"IATA Airport Code"},icao:{key:"icao",type:"text",label:"ICAO Airport Code"},incline_steps:{key:"incline",type:"combo",label:"Incline",strings:{options:{up:"Up",down:"Down"}}},incline:{key:"incline",type:"combo",label:"Incline"},indoor_type:{key:"indoor",type:"typeCombo",label:"Type"},indoor:{key:"indoor",type:"check",label:"Indoor"},industrial:{key:"industrial",type:"combo",label:"Type"},informal:{key:"informal",type:"check",label:"Informal"},information:{key:"information",type:"typeCombo",label:"Type"},inscription:{key:"inscription",type:"textarea",label:"Inscription"},intermittent_yes:{key:"intermittent",type:"check",label:"Intermittent","default":"yes"},intermittent:{key:"intermittent",type:"check",label:"Intermittent"},internet_access:{key:"internet_access",type:"combo",label:"Internet Access",strings:{options:{yes:"Yes",no:"No",wlan:"Wifi",wired:"Wired",terminal:"Terminal"}},terms:["wifi","wlan"]},"internet_access/fee":{key:"internet_access:fee",type:"check",label:"Internet Access Fee",prerequisiteTag:{key:"internet_access",valueNot:"no"},terms:["wifi fee"]},"internet_access/ssid":{key:"internet_access:ssid",type:"text",label:"Wifi Network Name",prerequisiteTag:{key:"internet_access",valueNot:"no"},terms:["ssid"]},interval:{key:"interval",type:"text",label:"Interval"},junction_line:{key:"junction",type:"combo",label:"Junction",strings:{options:{roundabout:"Roundabout",circular:"Traffic Circle",jughandle:"Jughandle"}}},"junction/ref_oneway":{key:"junction:ref",type:"text",label:"Junction Number",prerequisiteTag:{key:"oneway",value:"yes"}},kerb:{key:"kerb",type:"combo",label:"Curb"},"kerb/height":{key:"kerb:height",type:"combo",snake_case:false,label:"Height"},label:{key:"label",type:"textarea",label:"Label"},lamp_type:{key:"lamp_type",type:"combo",label:"Type"},landuse:{key:"landuse",type:"typeCombo",label:"Type"},lanes:{key:"lanes",type:"number",minValue:0,label:"Lanes",placeholder:"1, 2, 3..."},language_multi:{key:"language:",type:"multiCombo",label:"Languages"},layer:{key:"layer",type:"number",label:"Layer",placeholder:"0"},leaf_cycle_singular:{key:"leaf_cycle",type:"combo",label:"Leaf Cycle",strings:{options:{evergreen:"Evergreen",deciduous:"Deciduous",semi_evergreen:"Semi-Evergreen",semi_deciduous:"Semi-Deciduous"}}},leaf_cycle:{key:"leaf_cycle",type:"combo",label:"Leaf Cycle",strings:{options:{evergreen:"Evergreen",deciduous:"Deciduous",semi_evergreen:"Semi-Evergreen",semi_deciduous:"Semi-Deciduous",mixed:"Mixed"}}},leaf_type_singular:{key:"leaf_type",type:"combo",label:"Leaf Type",strings:{options:{broadleaved:"Broadleaved",needleleaved:"Needleleaved",leafless:"Leafless"}}},leaf_type:{key:"leaf_type",type:"combo",label:"Leaf Type",strings:{options:{broadleaved:"Broadleaved",needleleaved:"Needleleaved",mixed:"Mixed",leafless:"Leafless"}}},leisure:{key:"leisure",type:"typeCombo",label:"Type"},length:{key:"length",type:"number",minValue:0,label:"Length (Meters)"},level_semi:{key:"level",type:"semiCombo",label:"Levels",terms:["building floors","decks","stories","storeys","storys"]},level:{key:"level",type:"combo",label:"Level",terms:["building floor","deck","storey","story"],prerequisiteTag:{keyNot:"building"}},liaison:{key:"liaison",type:"combo",label:"Type"},line_attachment:{key:"line_attachment",type:"combo",label:"Line Attachment"},lit:{key:"lit",type:"check",label:"Lit",terms:["lamp","lighting"]},location_pool:{key:"location",type:"typeCombo",label:"Location",strings:{options:{outdoor:"Outdoor",indoor:"Indoor",roof:"Rooftop"}}},location:{key:"location",type:"combo",label:"Location"},lock:{key:"lock",type:"check",label:"Lock"},lockable:{key:"lockable",type:"check",label:"Lockable"},man_made:{key:"man_made",type:"typeCombo",label:"Type"},manhole:{key:"manhole",type:"typeCombo",label:"Type"},manufacturer:{key:"manufacturer",type:"combo",snake_case:false,caseSensitive:true,label:"Manufacturer"},map_size:{key:"map_size",type:"typeCombo",label:"Coverage"},map_type:{key:"map_type",type:"typeCombo",label:"Type"},mapillary:{key:"mapillary",type:"identifier",label:"Mapillary Image ID",urlFormat:"https://mapillary.com/app/?focus=photo&pKey={value}",pattern:"^[a-zA-Z0-9-_]{1,}$",universal:true},marker:{key:"marker",type:"typeCombo",label:"Type"},material:{key:"material",type:"combo",label:"Material"},max_age:{key:"max_age",type:"number",minValue:0,label:"Maximum Age",terms:["upper age limit"]},maxheight:{key:"maxheight",type:"combo",label:"Max Height",placeholder:"4, 4.5, 5, 14'0\", 14'6\", 15'0\"",snake_case:false},maxspeed:{key:"maxspeed",type:"maxspeed",label:"Speed Limit",placeholder:"40, 50, 60..."},"maxspeed/advisory":{key:"maxspeed:advisory",type:"maxspeed",label:"Advisory Speed Limit",placeholder:"40, 50, 60..."},maxstay:{key:"maxstay",type:"combo",label:"Max Stay",options:["15 min","30 min","45 min","1 hr","1.5 hr","2 hr","2.5 hr","3 hr","4 hr","1 day","2 day"],snake_case:false},maxweight_bridge:{key:"maxweight",type:"combo",label:"Max Weight",snake_case:false,prerequisiteTag:{key:"bridge",valueNot:"no"}},maxweight:{key:"maxweight",type:"combo",label:"Max Weight",snake_case:false},memorial:{key:"memorial",type:"typeCombo",label:"Type"},microbrewery:{key:"microbrewery",type:"check",label:"Microbrewery",terms:["brewpub","craft beer"]},min_age:{key:"min_age",type:"number",minValue:0,label:"Minimum Age",terms:["lower age limit"]},minspeed:{key:"minspeed",type:"maxspeed",label:"Minimum Speed Limit",placeholder:"20, 30, 40..."},monitoring_multi:{key:"monitoring:",type:"multiCombo",label:"Monitoring"},"mtb/scale":{key:"mtb:scale",type:"combo",label:"Mountain Biking Difficulty",placeholder:"0, 1, 2, 3...",strings:{options:{"0":"0: Solid gravel/packed earth, no obstacles, wide curves","1":"1: Some loose surface, small obstacles, wide curves","2":"2: Much loose surface, large obstacles, easy hairpins","3":"3: Slippery surface, large obstacles, tight hairpins","4":"4: Loose surface or boulders, dangerous hairpins","5":"5: Maximum difficulty, boulder fields, landslides","6":"6: Not rideable except by the very best mountain bikers"}}},"mtb/scale/imba":{key:"mtb:scale:imba",type:"combo",label:"IMBA Trail Difficulty",placeholder:"Easy, Medium, Difficult...",strings:{options:{"0":"Easiest (white circle)","1":"Easy (green circle)","2":"Medium (blue square)","3":"Difficult (black diamond)","4":"Extremely Difficult (double black diamond)"}}},"mtb/scale/uphill":{key:"mtb:scale:uphill",type:"combo",label:"Mountain Biking Uphill Difficulty",placeholder:"0, 1, 2, 3...",strings:{options:{"0":"0: Avg. incline <10%, gravel/packed earth, no obstacles","1":"1: Avg. incline <15%, gravel/packed earth, few small objects","2":"2: Avg. incline <20%, stable surface, fistsize rocks/roots","3":"3: Avg. incline <25%, variable surface, fistsize rocks/branches","4":"4: Avg. incline <30%, poor condition, big rocks/branches","5":"5: Very steep, bike generally needs to be pushed or carried"}}},museum:{key:"museum",type:"combo",label:"Type"},name:{key:"name",type:"localized",label:"Name",universal:true,placeholder:"Common name (if any)",terms:["label","title"]},natural:{key:"natural",type:"typeCombo",label:"Natural"},network_bicycle:{key:"network",type:"combo",label:"Network Class",placeholder:"Local, Regional, National, International",strings:{options:{lcn:"Local",rcn:"Regional",ncn:"National",icn:"International"}}},network_foot:{key:"network",type:"combo",label:"Network Class",placeholder:"Local, Regional, National, International",strings:{options:{lwn:"Local",rwn:"Regional",nwn:"National",iwn:"International"}}},network_horse:{key:"network",type:"combo",label:"Network Class",placeholder:"Local, Regional, National, International",strings:{options:{lhn:"Local",rhn:"Regional",nhn:"National",ihn:"International"}}},network_road:{key:"network",type:"networkCombo",label:"Network"},network:{key:"network",type:"text",label:"Network"},"network/type":{key:"network:type",type:"combo",label:"Network Type",prerequisiteTag:{key:"network"}},"not/name":{key:"not:name",type:"semiCombo",label:"Incorrect Names",terms:["common mistake names","wrong names"]},note:{key:"note",type:"textarea",universal:true,icon:"note",label:"Note",terms:["comment"]},office:{key:"office",type:"typeCombo",label:"Type"},oneway_yes:{key:"oneway",type:"onewayCheck",label:"One Way",strings:{options:{"undefined":"Assumed to be Yes",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}}},oneway:{key:"oneway",type:"onewayCheck",label:"One Way",strings:{options:{"undefined":"Assumed to be No",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}}},"oneway/bicycle":{key:"oneway:bicycle",type:"check",label:"One Way (Bicycles)",prerequisiteTag:{key:"oneway"}},openfire:{key:"openfire",type:"check",label:"Open Fires Allowed"},opening_date:{key:"opening_date",type:"text",label:"Expected Opening Date"},opening_hours:{key:"opening_hours",type:"combo",label:"Hours",placeholder:"Unknown",snake_case:false},operator:{key:"operator",type:"text",label:"Operator"},"operator/type":{key:"operator:type",type:"combo",label:"Operator Type",prerequisiteTag:{key:"operator"}},outdoor_seating:{key:"outdoor_seating",type:"check",label:"Outdoor Seating"},par:{key:"par",type:"number",minValue:1,label:"Par",placeholder:"3, 4, 5..."},park_ride:{key:"park_ride",type:"check",label:"Park and Ride"},parking:{key:"parking",type:"combo",label:"Type",strings:{options:{surface:"Surface","multi-storey":"Multilevel",underground:"Underground",sheds:"Sheds",carports:"Carports",garage_boxes:"Garage Boxes",lane:"Roadside Lane"}}},payment_multi_fee:{key:"payment:",type:"multiCombo",label:"Payment Types",prerequisiteTag:{key:"fee",valueNot:"no"}},payment_multi:{key:"payment:",type:"multiCombo",label:"Payment Types"},phases:{key:"phases",type:"number",minValue:1,label:"Phases",placeholder:"1, 2, 3..."},phone:{key:"phone",type:"tel",icon:"maki-telephone",label:"Telephone",placeholder:"+31 42 123 4567",terms:["phone number"]},"piste/difficulty_downhill":{key:"piste:difficulty",type:"combo",label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",strings:{options:{novice:"Novice (instructional)",easy:"Easy (green circle)",intermediate:"Intermediate (blue square)",advanced:"Advanced (black diamond)",expert:"Expert (double black diamond)",freeride:"Freeride (off-piste)",extreme:"Extreme (climbing equipment required)"}}},"piste/difficulty_nordic":{key:"piste:difficulty",type:"combo",label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",strings:{options:{novice:"Novice - Flat, no effort needed",easy:"Easy - Soft hills, short steep section",intermediate:"Intermediate - Steep section",advanced:"Advanced - Narrow, steep or icy section, sharp turn",expert:"Expert - Dangerous terrain around"}}},"piste/difficulty_skitour":{key:"piste:difficulty",type:"combo",label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",strings:{options:{novice:"Novice - L: <30° incline",easy:"Easy - WS: 30-35° incline",intermediate:"Intermediate - ZS: 35-40° incline",advanced:"Advanced - S: 40-45° incline",expert:"Expert - SS: 45–50° incline",freeride:"Freeride - AS: 50–55° incline",extreme:"Extreme - EX: >55° incline"}}},"piste/difficulty":{key:"piste:difficulty",type:"combo",label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",strings:{options:{novice:"Novice",easy:"Easy",intermediate:"Intermediate",advanced:"Advanced",expert:"Expert",freeride:"Freeride",extreme:"Extreme"}}},"piste/grooming_downhill":{key:"piste:grooming",type:"combo",label:"Grooming",strings:{options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry - no grooming"}}},"piste/grooming_hike":{key:"piste:grooming",type:"combo",label:"Grooming",strings:{options:{classic:"Classic - Winter Hiking",backcountry:"Backcountry - Snowshoeing"}}},"piste/grooming_nordic":{key:"piste:grooming",type:"combo",label:"Grooming",strings:{options:{classic:"Classic",backcountry:"Backcountry, no grooming","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}}},"piste/grooming":{key:"piste:grooming",type:"combo",label:"Grooming",strings:{options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}}},"piste/type":{key:"piste:type",type:"typeCombo",label:"Type",strings:{options:{downhill:"Downhill",nordic:"Nordic",skitour:"Skitour",sled:"Sled",hike:"Hike",sleigh:"Sleigh",ice_skate:"Ice Skate",snow_park:"Snow Park",playground:"Playground",connection:"Connection"}}},place:{key:"place",type:"typeCombo",label:"Type"},plant:{key:"plant",type:"combo",label:"Plant"},"plant/method":{key:"plant:method",type:"combo",label:"Generation Method"},"plant/output/electricity":{key:"plant:output:electricity",type:"typeCombo",label:"Power Output",placeholder:"500 MW, 1000 MW, 2000 MW...",snake_case:false},"plant/source":{key:"plant:source",type:"combo",label:"Energy Source"},playground:{key:"playground",type:"combo",label:"Type"},"playground/theme":{key:"playground:theme",type:"combo",label:"Theme"},polling_station:{key:"polling_station",type:"check",label:"Polling Place",terms:["voting place"]},population:{key:"population",type:"text",label:"Population"},post:{type:"address",key:"post",keys:["post:block_number","post:city","post:block_number","post:conscriptionnumber","post:county","post:country","post:county","post:district","post:floor","post:hamlet","post:housename","post:housenumber","post:neighbourhood","post:place","post:postcode","post:province","post:quarter","post:state","post:street","post:subdistrict","post:suburb","post:unit"],label:"Delivery Address"},power_supply:{key:"power_supply",type:"check",label:"Power Supply"},power:{key:"power",type:"typeCombo",label:"Type"},preschool:{key:"preschool",type:"check",label:"Preschool"},produce:{key:"produce",type:"semiCombo",label:"Produce"},product:{key:"product",type:"semiCombo",label:"Products"},"public_bookcase/type":{key:"public_bookcase:type",type:"combo",label:"Type"},pump:{key:"pump",type:"combo",label:"Pump",strings:{options:{yes:"Yes",manual:"Manual Hand Pump",powered:"Machine-Powered Pump",no:"None"}}},railway:{key:"railway",type:"typeCombo",label:"Type"},"railway/position":{key:"railway:position",type:"text",placeholder:"Distance to one decimal (123.4)",label:"Milestone Position"},"railway/signal/direction":{key:"railway:signal:direction",type:"combo",label:"Direction Affected",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},rating:{key:"rating",type:"combo",label:"Power Rating",snake_case:false},rcn_ref:{key:"rcn_ref",type:"text",label:"Cycling Code"},recycling_accepts:{key:"recycling:",type:"multiCombo",label:"Accepts"},recycling_type:{key:"recycling_type",type:"combo",label:"Type",placeholder:"Container, Center",strings:{options:{container:"Container",centre:"Center"}}},ref_aeroway_gate:{key:"ref",type:"text",label:"Gate Number"},ref_golf_hole:{key:"ref",type:"text",label:"Hole Number",placeholder:"1-18"},ref_highway_junction:{key:"ref",type:"text",label:"Junction Number"},ref_platform:{key:"ref",type:"text",label:"Platform Number"},ref_road_number:{key:"ref",type:"text",label:"Road Number"},ref_room_number:{key:"ref",type:"text",label:"Room Number"},ref_route:{key:"ref",type:"text",label:"Route Number"},ref_runway:{key:"ref",type:"text",label:"Runway Number",placeholder:"e.g. 01L/19R"},ref_stop_position:{key:"ref",type:"text",label:"Stop Number"},ref_taxiway:{key:"ref",type:"text",label:"Taxiway Name",placeholder:"e.g. A5"},ref:{key:"ref",type:"text",label:"Reference Code"},"ref/isil":{key:"ref:isil",type:"text",label:"ISIL Code"},"ref/vatin":{key:"ref:vatin",type:"identifier",label:"VAT ID Number",notCountryCodes:["ao","ai","bm","bt","io","vg","bn","ky","km","cu","dj","er","fk","gi","gg","hk","iq","ki","xk","kw","lr","ly","mo","mv","mh","fm","ms","mm","nr","kp","om","pw","pn","qa","sh","sm","st","sb","so","gs","ss","sr","sz","sy","tl","tc","tv","us","va","ye"],terms:["value added tax identification number","vatin"]},relation:{key:"type",type:"combo",label:"Type"},religion:{key:"religion",type:"combo",label:"Religion"},reservation:{key:"reservation",type:"combo",label:"Reservations",strings:{options:{yes:"Accepted",no:"Not Accepted",required:"Required",recommended:"Recommended"}}},residential:{key:"residential",type:"combo",label:"Type"},resort:{key:"resort",type:"combo",label:"Type"},resource:{key:"resource",type:"semiCombo",label:"Resources"},restriction:{key:"restriction",type:"combo",label:"Type"},restrictions:{type:"restrictions",geometry:"vertex",icon:"iD-restrictions",reference:{rtype:"restriction"},label:"Turn Restrictions"},"roof/colour":{key:"roof:colour",type:"combo",label:"Roof Color"},room:{key:"room",type:"combo",label:"Type"},rooms:{key:"rooms",type:"number",minValue:0,label:"Rooms"},route_master:{key:"route_master",type:"combo",label:"Type"},route:{key:"route",type:"combo",label:"Type"},rwn_ref:{key:"rwn_ref",type:"text",label:"Walking Code"},sac_scale:{key:"sac_scale",type:"combo",label:"Hiking Difficulty",placeholder:"Mountain Hiking, Alpine Hiking...",strings:{options:{hiking:"T1: Hiking",mountain_hiking:"T2: Mountain Hiking",demanding_mountain_hiking:"T3: Demanding Mountain Hiking",alpine_hiking:"T4: Alpine Hiking",demanding_alpine_hiking:"T5: Demanding Alpine Hiking",difficult_alpine_hiking:"T6: Difficult Alpine Hiking"}}},salt:{key:"salt",type:"check",label:"Salt",terms:["saline","salinated"]},sanitary_dump_station:{key:"sanitary_dump_station",type:"check",label:"Toilet Disposal"},screen:{key:"screen",type:"number",label:"Screens",placeholder:"1, 4, 8…",minValue:0},scuba_diving:{key:"scuba_diving:",type:"multiCombo",label:"Services",options:["repair","courses","rental","filling","air_filling","nitrox_filling","trimix_filling","oxygen_filling"]},"seamark/beacon_isolated_danger/shape":{key:"seamark:beacon_isolated_danger:shape",type:"combo",label:"Shape"},"seamark/beacon_lateral/category":{key:"seamark:beacon_lateral:category",type:"combo",label:"Category",strings:{options:{port:"Port",starboard:"Starboard",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right"}}},"seamark/beacon_lateral/colour":{key:"seamark:beacon_lateral:colour",type:"combo",label:"Color",strings:{options:{red:"Red",green:"Green",grey:"Grey"}}},"seamark/beacon_lateral/shape":{key:"seamark:beacon_lateral:shape",type:"combo",label:"Shape"},"seamark/beacon_lateral/system":{key:"seamark:beacon_lateral:system",type:"combo",label:"System",strings:{options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}}},"seamark/buoy_lateral/category":{key:"seamark:buoy_lateral:category",type:"combo",label:"Category",strings:{options:{port:"Port",starboard:"Starboard",channel_left:"Channel Left",channel_right:"Channel Right",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right",preferred_channel_port:"Preferred Channel Port",preferred_channel_starboard:"Preferred Channel Starboard"}}},"seamark/buoy_lateral/colour":{key:"seamark:buoy_lateral:colour",type:"combo",label:"Color",strings:{options:{red:"Red",green:"Green","red;white;red;white":"Red-White-Red-White","green;white;green;white":"Green-White-Green-White","red;green;red":"Red-Green-Red","green;red;green":"Green-Red-Green",white:"White",yellow:"Yellow"}}},"seamark/buoy_lateral/shape":{key:"seamark:buoy_lateral:shape",type:"combo",label:"Shape"},"seamark/buoy_lateral/system":{key:"seamark:buoy_lateral:system",type:"combo",label:"System",strings:{options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}}},"seamark/mooring/category":{key:"seamark:mooring:category",type:"combo",label:"Category"},"seamark/type":{key:"seamark:type",type:"combo",label:"Seamark",terms:["marine"]},"seamark/wreck/category":{key:"seamark:wreck:category",type:"combo",label:"Category"},seasonal:{key:"seasonal",type:"check",label:"Seasonal"},seats:{key:"seats",type:"number",minValue:0,label:"Seats",placeholder:"2, 4, 6..."},second_hand:{key:"second_hand",type:"combo",label:"Sells Used",placeholder:"Yes, No, Only",strings:{options:{yes:"Yes",no:"No",only:"Only"}}},segregated:{key:"segregated",type:"check",label:"Bicycle-Pedestrian Separation"},self_service:{key:"self_service",type:"check",label:"Self-Service"},service_rail:{key:"service",type:"combo",label:"Service Type",strings:{options:{spur:"Spur",yard:"Yard",siding:"Siding",crossover:"Crossover"}}},service_times:{key:"service_times",type:"text",label:"Service Times"},service:{key:"service",type:"combo",label:"Type",options:["parking_aisle","driveway","alley","emergency_access","drive-through"]},"service/bicycle":{key:"service:bicycle:",type:"multiCombo",label:"Services"},"service/vehicle":{key:"service:vehicle:",type:"multiCombo",label:"Services"},shelter_type:{key:"shelter_type",type:"combo",label:"Type"},shelter:{key:"shelter",type:"check",label:"Shelter"},shop:{key:"shop",type:"typeCombo",label:"Type"},shower:{key:"shower",type:"check",label:"Showers"},"siren/purpose":{key:"siren:purpose",type:"combo",label:"Purpose"},"siren/type":{key:"siren:type",type:"combo",label:"Type",strings:{options:{pneumatic:"Pneumatic",electronic:"Electronic",other:"Other"}}},site_type:{key:"site_type",type:"combo",label:"Site Type"},site:{key:"site",type:"combo",label:"Type"},smoking:{key:"smoking",type:"combo",label:"Smoking",placeholder:"No, Separated, Yes...",strings:{options:{no:"No smoking anywhere",separated:"In smoking areas, not physically isolated",isolated:"In smoking areas, physically isolated",outside:"Allowed outside",yes:"Allowed everywhere",dedicated:"Dedicated to smokers (e.g. smokers' club)"}}},smoothness:{key:"smoothness",type:"combo",label:"Smoothness",placeholder:"Thin Rollers, Wheels, Off-Road...",strings:{options:{excellent:"Thin Rollers: rollerblade, skateboard",good:"Thin Wheels: racing bike",intermediate:"Wheels: city bike, wheelchair, scooter",bad:"Robust Wheels: trekking bike, car, rickshaw",very_bad:"High Clearance: light duty off-road vehicle",horrible:"Off-Road: heavy duty off-road vehicle",very_horrible:"Specialized off-road: tractor, ATV",impassable:"Impassable / No wheeled vehicle"}}},sms:{key:"sms",type:"check",label:"SMS"},social_facility_for:{key:"social_facility:for",type:"combo",label:"People Served"},social_facility:{key:"social_facility",type:"combo",label:"Type"},source:{key:"source",type:"semiCombo",icon:"source",universal:true,label:"Sources",snake_case:false,caseSensitive:true,options:["survey","local knowledge","gps","aerial imagery","streetlevel imagery"],terms:["reference"]},"species/wikidata":{key:"species:wikidata",keys:["species:wikidata","species:wikipedia"],type:"wikidata",label:"Species Wikidata"},sport_ice:{key:"sport",type:"semiCombo",label:"Sports",options:["ice_skating","ice_hockey","multi","curling","ice_stock"]},sport_racing_motor:{key:"sport",type:"semiCombo",label:"Sports",options:["motor","karting","motocross"]},sport_racing_nonmotor:{key:"sport",type:"semiCombo",label:"Sports",options:["bmx","cycling","dog_racing","horse_racing","running"]},sport:{key:"sport",type:"semiCombo",label:"Sports"},stars:{key:"stars",type:"combo",label:"Stars",terms:["rating"]},start_date:{key:"start_date",type:"text",universal:true,label:"Start Date",terms:["inception"]},step_count:{key:"step_count",type:"number",minValue:0,label:"Number of Steps"},stile:{key:"stile",type:"combo",label:"Type"},stop:{key:"stop",type:"combo",label:"Stop Type",strings:{options:{all:"All Ways",minor:"Minor Road"}}},street_cabinet:{key:"street_cabinet",type:"combo",label:"Type"},stroller:{key:"stroller",type:"radio",strings:{options:{yes:"Yes",limited:"Limited",no:"No"}},label:"Stroller Access",terms:["baby carriage","perambulator","pram","pushchair"]},structure_waterway:{type:"structureRadio",keys:["tunnel"],label:"Structure",placeholder:"Unknown",strings:{options:{tunnel:"Tunnel"}}},structure:{type:"structureRadio",keys:["bridge","tunnel","embankment","cutting","ford"],label:"Structure",placeholder:"Unknown",strings:{options:{bridge:"Bridge",tunnel:"Tunnel",embankment:"Embankment",cutting:"Cutting",ford:"Ford"}}},studio:{key:"studio",type:"combo",label:"Type"},substance:{key:"substance",type:"combo",label:"Substance"},substation:{key:"substation",type:"typeCombo",label:"Type"},supervised:{key:"supervised",type:"check",label:"Supervised",terms:["guarded","manned"]},support:{key:"support",type:"combo",label:"Support"},surface:{key:"surface",type:"combo",label:"Surface"},surveillance:{key:"surveillance",type:"combo",label:"Surveillance Kind"},"surveillance/type":{key:"surveillance:type",type:"combo",label:"Surveillance Type",strings:{options:{camera:"Camera",guard:"Guard",ALPR:"Automatic License Plate Reader"}}},"surveillance/zone":{key:"surveillance:zone",type:"combo",label:"Surveillance Zone"},"survey/date":{key:"survey:date",type:"text",label:"Last Survey Date"},swimming_pool:{key:"swimming_pool",type:"combo",label:"Type"},"switch":{key:"switch",type:"combo",label:"Type",strings:{options:{mechanical:"Mechanical",circuit_breaker:"Circuit Breaker",disconnector:"Disconnector",earthing:"Earthing"}}},tactile_paving:{key:"tactile_paving",type:"check",label:"Tactile Paving"},takeaway:{key:"takeaway",type:"combo",label:"Takeaway",placeholder:"Yes, No, Takeaway Only...",strings:{options:{yes:"Yes",no:"No",only:"Takeaway Only"}},terms:["take out","takeout"]},target:{key:"target",type:"combo",label:"Target"},tidal:{key:"tidal",type:"check",label:"Tidal"},to:{key:"to",type:"text",label:"To"},toilets:{key:"toilets",type:"check",label:"Toilets"},"toilets/disposal":{key:"toilets:disposal",type:"combo",label:"Disposal",strings:{options:{flush:"Flush",pitlatrine:"Pit Latrine",chemical:"Chemical",bucket:"Bucket"}}},"toilets/handwashing":{key:"toilets:handwashing",type:"check",label:"Handwashing"},"toilets/position":{key:"toilets:position",type:"semiCombo",label:"Positions"},toll:{key:"toll",type:"check",label:"Toll"},tomb:{key:"tomb",type:"typeCombo",label:"Type"},tourism:{key:"tourism",type:"typeCombo",label:"Type"},"tower/construction":{key:"tower:construction",type:"combo",label:"Construction",placeholder:"Guyed, Lattice, Concealed, ..."},"tower/type":{key:"tower:type",type:"combo",label:"Type"},"townhall/type":{key:"townhall:type",type:"combo",label:"Type"},tracktype:{key:"tracktype",type:"combo",label:"Track Type",placeholder:"Solid, Mostly Solid, Soft...",strings:{options:{grade1:"Solid: paved or heavily compacted hardcore surface",grade2:"Mostly Solid: gravel/rock with some soft material mixed in",grade3:"Even mixture of hard and soft materials",grade4:"Mostly Soft: soil/sand/grass with some hard material mixed in",grade5:"Soft: soil/sand/grass"}}},trade:{key:"trade",type:"typeCombo",label:"Type"},traffic_calming:{key:"traffic_calming",type:"typeCombo",label:"Type"},traffic_sign:{key:"traffic_sign",type:"typeCombo",label:"Traffic Sign"},"traffic_sign/direction":{key:"traffic_sign:direction",type:"combo",label:"Direction Affected",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},traffic_signals:{key:"traffic_signals",type:"combo",label:"Type","default":"signal"},"traffic_signals/direction":{key:"traffic_signals:direction",type:"combo",label:"Direction Affected",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},trail_visibility:{key:"trail_visibility",type:"combo",label:"Trail Visibility",placeholder:"Excellent, Good, Bad...",strings:{options:{excellent:"Excellent: unambiguous path or markers everywhere",good:"Good: markers visible, sometimes require searching",intermediate:"Intermediate: few markers, path mostly visible",bad:"Bad: no markers, path sometimes invisible/pathless",horrible:"Horrible: often pathless, some orientation skills required",no:"No: pathless, excellent orientation skills required"}}},transformer:{key:"transformer",type:"combo",label:"Type",strings:{options:{distribution:"Distribution",generator:"Generator",converter:"Converter",traction:"Traction",auto:"Autotransformer",phase_angle_regulator:"Phase Angle Regulator",auxiliary:"Auxiliary",yes:"Unknown"}}},trees:{key:"trees",type:"semiCombo",label:"Trees"},trench:{key:"trench",type:"combo",label:"Type"},trolley_wire:{key:"trolley_wire",type:"check",label:"Overhead Trolley Wires"},tunnel:{key:"tunnel",type:"typeCombo",label:"Type",placeholder:"Default"},usage_rail:{key:"usage",type:"combo",label:"Usage Type",strings:{options:{main:"Main",branch:"Branch",industrial:"Industrial",military:"Military",test:"Test",tourism:"Tourism"}}},utility_semi:{key:"utility",type:"semiCombo",label:"Utilities"},utility:{key:"utility",type:"typeCombo",label:"Utility"},valve:{key:"valve",type:"combo",label:"Type"},vending:{key:"vending",type:"semiCombo",label:"Types of Goods"},video_calls:{key:"video",type:"check",label:"Video Calls"},visibility:{key:"visibility",type:"combo",label:"Visibility",strings:{options:{house:"Up to 5m (16ft)",street:"5 to 20m (16 to 65ft)",area:"Over 20m (65ft)"}}},"volcano/status":{key:"volcano:status",type:"combo",label:"Volcano Status",strings:{options:{active:"Active",dormant:"Dormant",extinct:"Extinct"}}},"volcano/type":{key:"volcano:type",type:"combo",label:"Volcano Type",strings:{options:{stratovolcano:"Stratovolcano",shield:"Shield",scoria:"Scoria"}}},voltage_electrified:{key:"voltage",type:"combo",label:"Voltage",prerequisiteTag:{key:"electrified",valueNot:"no"}},voltage:{key:"voltage",type:"combo",label:"Voltage"},"voltage/primary":{key:"voltage:primary",type:"combo",label:"Primary Voltage"},"voltage/secondary":{key:"voltage:secondary",type:"combo",label:"Secondary Voltage"},"voltage/tertiary":{key:"voltage:tertiary",type:"combo",label:"Tertiary Voltage"},wall:{key:"wall",type:"combo",label:"Type"},waste:{key:"waste",type:"semiCombo",label:"Waste"},water_point:{key:"water_point",type:"check",label:"Water Point"},water_source:{key:"water_source","default":"main",type:"combo",label:"Water Source"},water_volume:{key:"water_volume",type:"number",label:"Water Reserve Volume (m³)",snake_case:false},water:{key:"water",type:"combo",label:"Type"},waterway:{key:"waterway",type:"typeCombo",label:"Type"},website:{key:"website",type:"url",icon:"website",placeholder:"https://example.com",label:"Website",terms:["internet presence","uri","url","webpage"]},wetland:{key:"wetland",type:"combo",label:"Type"},wheelchair:{key:"wheelchair",type:"radio",strings:{options:{yes:"Yes",limited:"Limited",no:"No"}},icon:"maki-wheelchair",label:"Wheelchair Access",terms:["handicap access"]},wholesale:{key:"wholesale",type:"typeCombo",label:"Wholesale"},width:{key:"width",type:"number",minValue:0,label:"Width (Meters)"},wikidata:{key:"wikidata",keys:["wikidata","wikipedia"],type:"wikidata",icon:"wikipedia",universal:true,label:"Wikidata"},wikimedia_commons:{key:"wikimedia_commons",type:"identifier",label:"Wikimedia Commons Page",placeholder:"File:Example.jpg",urlFormat:"https://commons.wikimedia.org/wiki/{value}",pattern:"^(?:File|Category):.{1,}",universal:true},wikipedia:{key:"wikipedia",keys:["wikipedia","wikidata"],type:"wikipedia",icon:"wikipedia",universal:true,label:"Wikipedia"},windings:{key:"windings",type:"number",minValue:1,label:"Windings",placeholder:"1, 2, 3..."},"windings/configuration":{key:"windings:configuration",type:"combo",label:"Windings Configuration",strings:{options:{star:"Star / Wye",delta:"Delta","open-delta":"Open Delta",zigzag:"Zig Zag",open:"Open",scott:"Scott",leblanc:"Leblanc"}}}};
26834
26835         var quickselect = createCommonjsModule(function (module, exports) {
26836         (function (global, factory) {
26837                  module.exports = factory() ;
26838         }(commonjsGlobal, (function () {
26839         function quickselect(arr, k, left, right, compare) {
26840             quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);
26841         }
26842
26843         function quickselectStep(arr, k, left, right, compare) {
26844
26845             while (right > left) {
26846                 if (right - left > 600) {
26847                     var n = right - left + 1;
26848                     var m = k - left + 1;
26849                     var z = Math.log(n);
26850                     var s = 0.5 * Math.exp(2 * z / 3);
26851                     var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
26852                     var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
26853                     var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
26854                     quickselectStep(arr, k, newLeft, newRight, compare);
26855                 }
26856
26857                 var t = arr[k];
26858                 var i = left;
26859                 var j = right;
26860
26861                 swap(arr, left, k);
26862                 if (compare(arr[right], t) > 0) { swap(arr, left, right); }
26863
26864                 while (i < j) {
26865                     swap(arr, i, j);
26866                     i++;
26867                     j--;
26868                     while (compare(arr[i], t) < 0) { i++; }
26869                     while (compare(arr[j], t) > 0) { j--; }
26870                 }
26871
26872                 if (compare(arr[left], t) === 0) { swap(arr, left, j); }
26873                 else {
26874                     j++;
26875                     swap(arr, j, right);
26876                 }
26877
26878                 if (j <= k) { left = j + 1; }
26879                 if (k <= j) { right = j - 1; }
26880             }
26881         }
26882
26883         function swap(arr, i, j) {
26884             var tmp = arr[i];
26885             arr[i] = arr[j];
26886             arr[j] = tmp;
26887         }
26888
26889         function defaultCompare(a, b) {
26890             return a < b ? -1 : a > b ? 1 : 0;
26891         }
26892
26893         return quickselect;
26894
26895         })));
26896         });
26897
26898         var rbush_1 = rbush;
26899         var default_1 = rbush;
26900
26901
26902
26903         function rbush(maxEntries, format) {
26904             if (!(this instanceof rbush)) { return new rbush(maxEntries, format); }
26905
26906             // max entries in a node is 9 by default; min node fill is 40% for best performance
26907             this._maxEntries = Math.max(4, maxEntries || 9);
26908             this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));
26909
26910             if (format) {
26911                 this._initFormat(format);
26912             }
26913
26914             this.clear();
26915         }
26916
26917         rbush.prototype = {
26918
26919             all: function () {
26920                 return this._all(this.data, []);
26921             },
26922
26923             search: function (bbox) {
26924
26925                 var node = this.data,
26926                     result = [],
26927                     toBBox = this.toBBox;
26928
26929                 if (!intersects$1(bbox, node)) { return result; }
26930
26931                 var nodesToSearch = [],
26932                     i, len, child, childBBox;
26933
26934                 while (node) {
26935                     for (i = 0, len = node.children.length; i < len; i++) {
26936
26937                         child = node.children[i];
26938                         childBBox = node.leaf ? toBBox(child) : child;
26939
26940                         if (intersects$1(bbox, childBBox)) {
26941                             if (node.leaf) { result.push(child); }
26942                             else if (contains$4(bbox, childBBox)) { this._all(child, result); }
26943                             else { nodesToSearch.push(child); }
26944                         }
26945                     }
26946                     node = nodesToSearch.pop();
26947                 }
26948
26949                 return result;
26950             },
26951
26952             collides: function (bbox) {
26953
26954                 var node = this.data,
26955                     toBBox = this.toBBox;
26956
26957                 if (!intersects$1(bbox, node)) { return false; }
26958
26959                 var nodesToSearch = [],
26960                     i, len, child, childBBox;
26961
26962                 while (node) {
26963                     for (i = 0, len = node.children.length; i < len; i++) {
26964
26965                         child = node.children[i];
26966                         childBBox = node.leaf ? toBBox(child) : child;
26967
26968                         if (intersects$1(bbox, childBBox)) {
26969                             if (node.leaf || contains$4(bbox, childBBox)) { return true; }
26970                             nodesToSearch.push(child);
26971                         }
26972                     }
26973                     node = nodesToSearch.pop();
26974                 }
26975
26976                 return false;
26977             },
26978
26979             load: function (data) {
26980                 if (!(data && data.length)) { return this; }
26981
26982                 if (data.length < this._minEntries) {
26983                     for (var i = 0, len = data.length; i < len; i++) {
26984                         this.insert(data[i]);
26985                     }
26986                     return this;
26987                 }
26988
26989                 // recursively build the tree with the given data from scratch using OMT algorithm
26990                 var node = this._build(data.slice(), 0, data.length - 1, 0);
26991
26992                 if (!this.data.children.length) {
26993                     // save as is if tree is empty
26994                     this.data = node;
26995
26996                 } else if (this.data.height === node.height) {
26997                     // split root if trees have the same height
26998                     this._splitRoot(this.data, node);
26999
27000                 } else {
27001                     if (this.data.height < node.height) {
27002                         // swap trees if inserted one is bigger
27003                         var tmpNode = this.data;
27004                         this.data = node;
27005                         node = tmpNode;
27006                     }
27007
27008                     // insert the small tree into the large tree at appropriate level
27009                     this._insert(node, this.data.height - node.height - 1, true);
27010                 }
27011
27012                 return this;
27013             },
27014
27015             insert: function (item) {
27016                 if (item) { this._insert(item, this.data.height - 1); }
27017                 return this;
27018             },
27019
27020             clear: function () {
27021                 this.data = createNode([]);
27022                 return this;
27023             },
27024
27025             remove: function (item, equalsFn) {
27026                 if (!item) { return this; }
27027
27028                 var node = this.data,
27029                     bbox = this.toBBox(item),
27030                     path = [],
27031                     indexes = [],
27032                     i, parent, index, goingUp;
27033
27034                 // depth-first iterative tree traversal
27035                 while (node || path.length) {
27036
27037                     if (!node) { // go up
27038                         node = path.pop();
27039                         parent = path[path.length - 1];
27040                         i = indexes.pop();
27041                         goingUp = true;
27042                     }
27043
27044                     if (node.leaf) { // check current node
27045                         index = findItem(item, node.children, equalsFn);
27046
27047                         if (index !== -1) {
27048                             // item found, remove the item and condense tree upwards
27049                             node.children.splice(index, 1);
27050                             path.push(node);
27051                             this._condense(path);
27052                             return this;
27053                         }
27054                     }
27055
27056                     if (!goingUp && !node.leaf && contains$4(node, bbox)) { // go down
27057                         path.push(node);
27058                         indexes.push(i);
27059                         i = 0;
27060                         parent = node;
27061                         node = node.children[0];
27062
27063                     } else if (parent) { // go right
27064                         i++;
27065                         node = parent.children[i];
27066                         goingUp = false;
27067
27068                     } else { node = null; } // nothing found
27069                 }
27070
27071                 return this;
27072             },
27073
27074             toBBox: function (item) { return item; },
27075
27076             compareMinX: compareNodeMinX,
27077             compareMinY: compareNodeMinY,
27078
27079             toJSON: function () { return this.data; },
27080
27081             fromJSON: function (data) {
27082                 this.data = data;
27083                 return this;
27084             },
27085
27086             _all: function (node, result) {
27087                 var nodesToSearch = [];
27088                 while (node) {
27089                     if (node.leaf) { result.push.apply(result, node.children); }
27090                     else { nodesToSearch.push.apply(nodesToSearch, node.children); }
27091
27092                     node = nodesToSearch.pop();
27093                 }
27094                 return result;
27095             },
27096
27097             _build: function (items, left, right, height) {
27098
27099                 var N = right - left + 1,
27100                     M = this._maxEntries,
27101                     node;
27102
27103                 if (N <= M) {
27104                     // reached leaf level; return leaf
27105                     node = createNode(items.slice(left, right + 1));
27106                     calcBBox(node, this.toBBox);
27107                     return node;
27108                 }
27109
27110                 if (!height) {
27111                     // target height of the bulk-loaded tree
27112                     height = Math.ceil(Math.log(N) / Math.log(M));
27113
27114                     // target number of root entries to maximize storage utilization
27115                     M = Math.ceil(N / Math.pow(M, height - 1));
27116                 }
27117
27118                 node = createNode([]);
27119                 node.leaf = false;
27120                 node.height = height;
27121
27122                 // split the items into M mostly square tiles
27123
27124                 var N2 = Math.ceil(N / M),
27125                     N1 = N2 * Math.ceil(Math.sqrt(M)),
27126                     i, j, right2, right3;
27127
27128                 multiSelect(items, left, right, N1, this.compareMinX);
27129
27130                 for (i = left; i <= right; i += N1) {
27131
27132                     right2 = Math.min(i + N1 - 1, right);
27133
27134                     multiSelect(items, i, right2, N2, this.compareMinY);
27135
27136                     for (j = i; j <= right2; j += N2) {
27137
27138                         right3 = Math.min(j + N2 - 1, right2);
27139
27140                         // pack each entry recursively
27141                         node.children.push(this._build(items, j, right3, height - 1));
27142                     }
27143                 }
27144
27145                 calcBBox(node, this.toBBox);
27146
27147                 return node;
27148             },
27149
27150             _chooseSubtree: function (bbox, node, level, path) {
27151
27152                 var i, len, child, targetNode, area, enlargement, minArea, minEnlargement;
27153
27154                 while (true) {
27155                     path.push(node);
27156
27157                     if (node.leaf || path.length - 1 === level) { break; }
27158
27159                     minArea = minEnlargement = Infinity;
27160
27161                     for (i = 0, len = node.children.length; i < len; i++) {
27162                         child = node.children[i];
27163                         area = bboxArea(child);
27164                         enlargement = enlargedArea(bbox, child) - area;
27165
27166                         // choose entry with the least area enlargement
27167                         if (enlargement < minEnlargement) {
27168                             minEnlargement = enlargement;
27169                             minArea = area < minArea ? area : minArea;
27170                             targetNode = child;
27171
27172                         } else if (enlargement === minEnlargement) {
27173                             // otherwise choose one with the smallest area
27174                             if (area < minArea) {
27175                                 minArea = area;
27176                                 targetNode = child;
27177                             }
27178                         }
27179                     }
27180
27181                     node = targetNode || node.children[0];
27182                 }
27183
27184                 return node;
27185             },
27186
27187             _insert: function (item, level, isNode) {
27188
27189                 var toBBox = this.toBBox,
27190                     bbox = isNode ? item : toBBox(item),
27191                     insertPath = [];
27192
27193                 // find the best node for accommodating the item, saving all nodes along the path too
27194                 var node = this._chooseSubtree(bbox, this.data, level, insertPath);
27195
27196                 // put the item into the node
27197                 node.children.push(item);
27198                 extend$1(node, bbox);
27199
27200                 // split on node overflow; propagate upwards if necessary
27201                 while (level >= 0) {
27202                     if (insertPath[level].children.length > this._maxEntries) {
27203                         this._split(insertPath, level);
27204                         level--;
27205                     } else { break; }
27206                 }
27207
27208                 // adjust bboxes along the insertion path
27209                 this._adjustParentBBoxes(bbox, insertPath, level);
27210             },
27211
27212             // split overflowed node into two
27213             _split: function (insertPath, level) {
27214
27215                 var node = insertPath[level],
27216                     M = node.children.length,
27217                     m = this._minEntries;
27218
27219                 this._chooseSplitAxis(node, m, M);
27220
27221                 var splitIndex = this._chooseSplitIndex(node, m, M);
27222
27223                 var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));
27224                 newNode.height = node.height;
27225                 newNode.leaf = node.leaf;
27226
27227                 calcBBox(node, this.toBBox);
27228                 calcBBox(newNode, this.toBBox);
27229
27230                 if (level) { insertPath[level - 1].children.push(newNode); }
27231                 else { this._splitRoot(node, newNode); }
27232             },
27233
27234             _splitRoot: function (node, newNode) {
27235                 // split root node
27236                 this.data = createNode([node, newNode]);
27237                 this.data.height = node.height + 1;
27238                 this.data.leaf = false;
27239                 calcBBox(this.data, this.toBBox);
27240             },
27241
27242             _chooseSplitIndex: function (node, m, M) {
27243
27244                 var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index;
27245
27246                 minOverlap = minArea = Infinity;
27247
27248                 for (i = m; i <= M - m; i++) {
27249                     bbox1 = distBBox(node, 0, i, this.toBBox);
27250                     bbox2 = distBBox(node, i, M, this.toBBox);
27251
27252                     overlap = intersectionArea(bbox1, bbox2);
27253                     area = bboxArea(bbox1) + bboxArea(bbox2);
27254
27255                     // choose distribution with minimum overlap
27256                     if (overlap < minOverlap) {
27257                         minOverlap = overlap;
27258                         index = i;
27259
27260                         minArea = area < minArea ? area : minArea;
27261
27262                     } else if (overlap === minOverlap) {
27263                         // otherwise choose distribution with minimum area
27264                         if (area < minArea) {
27265                             minArea = area;
27266                             index = i;
27267                         }
27268                     }
27269                 }
27270
27271                 return index;
27272             },
27273
27274             // sorts node children by the best axis for split
27275             _chooseSplitAxis: function (node, m, M) {
27276
27277                 var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX,
27278                     compareMinY = node.leaf ? this.compareMinY : compareNodeMinY,
27279                     xMargin = this._allDistMargin(node, m, M, compareMinX),
27280                     yMargin = this._allDistMargin(node, m, M, compareMinY);
27281
27282                 // if total distributions margin value is minimal for x, sort by minX,
27283                 // otherwise it's already sorted by minY
27284                 if (xMargin < yMargin) { node.children.sort(compareMinX); }
27285             },
27286
27287             // total margin of all possible split distributions where each node is at least m full
27288             _allDistMargin: function (node, m, M, compare) {
27289
27290                 node.children.sort(compare);
27291
27292                 var toBBox = this.toBBox,
27293                     leftBBox = distBBox(node, 0, m, toBBox),
27294                     rightBBox = distBBox(node, M - m, M, toBBox),
27295                     margin = bboxMargin(leftBBox) + bboxMargin(rightBBox),
27296                     i, child;
27297
27298                 for (i = m; i < M - m; i++) {
27299                     child = node.children[i];
27300                     extend$1(leftBBox, node.leaf ? toBBox(child) : child);
27301                     margin += bboxMargin(leftBBox);
27302                 }
27303
27304                 for (i = M - m - 1; i >= m; i--) {
27305                     child = node.children[i];
27306                     extend$1(rightBBox, node.leaf ? toBBox(child) : child);
27307                     margin += bboxMargin(rightBBox);
27308                 }
27309
27310                 return margin;
27311             },
27312
27313             _adjustParentBBoxes: function (bbox, path, level) {
27314                 // adjust bboxes along the given tree path
27315                 for (var i = level; i >= 0; i--) {
27316                     extend$1(path[i], bbox);
27317                 }
27318             },
27319
27320             _condense: function (path) {
27321                 // go through the path, removing empty nodes and updating bboxes
27322                 for (var i = path.length - 1, siblings; i >= 0; i--) {
27323                     if (path[i].children.length === 0) {
27324                         if (i > 0) {
27325                             siblings = path[i - 1].children;
27326                             siblings.splice(siblings.indexOf(path[i]), 1);
27327
27328                         } else { this.clear(); }
27329
27330                     } else { calcBBox(path[i], this.toBBox); }
27331                 }
27332             },
27333
27334             _initFormat: function (format) {
27335                 // data format (minX, minY, maxX, maxY accessors)
27336
27337                 // uses eval-type function compilation instead of just accepting a toBBox function
27338                 // because the algorithms are very sensitive to sorting functions performance,
27339                 // so they should be dead simple and without inner calls
27340
27341                 var compareArr = ['return a', ' - b', ';'];
27342
27343                 this.compareMinX = new Function('a', 'b', compareArr.join(format[0]));
27344                 this.compareMinY = new Function('a', 'b', compareArr.join(format[1]));
27345
27346                 this.toBBox = new Function('a',
27347                     'return {minX: a' + format[0] +
27348                     ', minY: a' + format[1] +
27349                     ', maxX: a' + format[2] +
27350                     ', maxY: a' + format[3] + '};');
27351             }
27352         };
27353
27354         function findItem(item, items, equalsFn) {
27355             if (!equalsFn) { return items.indexOf(item); }
27356
27357             for (var i = 0; i < items.length; i++) {
27358                 if (equalsFn(item, items[i])) { return i; }
27359             }
27360             return -1;
27361         }
27362
27363         // calculate node's bbox from bboxes of its children
27364         function calcBBox(node, toBBox) {
27365             distBBox(node, 0, node.children.length, toBBox, node);
27366         }
27367
27368         // min bounding rectangle of node children from k to p-1
27369         function distBBox(node, k, p, toBBox, destNode) {
27370             if (!destNode) { destNode = createNode(null); }
27371             destNode.minX = Infinity;
27372             destNode.minY = Infinity;
27373             destNode.maxX = -Infinity;
27374             destNode.maxY = -Infinity;
27375
27376             for (var i = k, child; i < p; i++) {
27377                 child = node.children[i];
27378                 extend$1(destNode, node.leaf ? toBBox(child) : child);
27379             }
27380
27381             return destNode;
27382         }
27383
27384         function extend$1(a, b) {
27385             a.minX = Math.min(a.minX, b.minX);
27386             a.minY = Math.min(a.minY, b.minY);
27387             a.maxX = Math.max(a.maxX, b.maxX);
27388             a.maxY = Math.max(a.maxY, b.maxY);
27389             return a;
27390         }
27391
27392         function compareNodeMinX(a, b) { return a.minX - b.minX; }
27393         function compareNodeMinY(a, b) { return a.minY - b.minY; }
27394
27395         function bboxArea(a)   { return (a.maxX - a.minX) * (a.maxY - a.minY); }
27396         function bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }
27397
27398         function enlargedArea(a, b) {
27399             return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *
27400                    (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));
27401         }
27402
27403         function intersectionArea(a, b) {
27404             var minX = Math.max(a.minX, b.minX),
27405                 minY = Math.max(a.minY, b.minY),
27406                 maxX = Math.min(a.maxX, b.maxX),
27407                 maxY = Math.min(a.maxY, b.maxY);
27408
27409             return Math.max(0, maxX - minX) *
27410                    Math.max(0, maxY - minY);
27411         }
27412
27413         function contains$4(a, b) {
27414             return a.minX <= b.minX &&
27415                    a.minY <= b.minY &&
27416                    b.maxX <= a.maxX &&
27417                    b.maxY <= a.maxY;
27418         }
27419
27420         function intersects$1(a, b) {
27421             return b.minX <= a.maxX &&
27422                    b.minY <= a.maxY &&
27423                    b.maxX >= a.minX &&
27424                    b.maxY >= a.minY;
27425         }
27426
27427         function createNode(children) {
27428             return {
27429                 children: children,
27430                 height: 1,
27431                 leaf: true,
27432                 minX: Infinity,
27433                 minY: Infinity,
27434                 maxX: -Infinity,
27435                 maxY: -Infinity
27436             };
27437         }
27438
27439         // sort an array so that items come in groups of n unsorted items, with groups sorted between each other;
27440         // combines selection algorithm with binary divide & conquer approach
27441
27442         function multiSelect(arr, left, right, n, compare) {
27443             var stack = [left, right],
27444                 mid;
27445
27446             while (stack.length) {
27447                 right = stack.pop();
27448                 left = stack.pop();
27449
27450                 if (right - left <= n) { continue; }
27451
27452                 mid = left + Math.ceil((right - left) / n / 2) * n;
27453                 quickselect(arr, mid, left, right, compare);
27454
27455                 stack.push(left, mid, mid, right);
27456             }
27457         }
27458         rbush_1.default = default_1;
27459
27460         var lineclip_1 = lineclip;
27461
27462         lineclip.polyline = lineclip;
27463         lineclip.polygon = polygonclip;
27464
27465
27466         // Cohen-Sutherland line clippign algorithm, adapted to efficiently
27467         // handle polylines rather than just segments
27468
27469         function lineclip(points, bbox, result) {
27470
27471             var len = points.length,
27472                 codeA = bitCode(points[0], bbox),
27473                 part = [],
27474                 i, a, b, codeB, lastCode;
27475
27476             if (!result) { result = []; }
27477
27478             for (i = 1; i < len; i++) {
27479                 a = points[i - 1];
27480                 b = points[i];
27481                 codeB = lastCode = bitCode(b, bbox);
27482
27483                 while (true) {
27484
27485                     if (!(codeA | codeB)) { // accept
27486                         part.push(a);
27487
27488                         if (codeB !== lastCode) { // segment went outside
27489                             part.push(b);
27490
27491                             if (i < len - 1) { // start a new line
27492                                 result.push(part);
27493                                 part = [];
27494                             }
27495                         } else if (i === len - 1) {
27496                             part.push(b);
27497                         }
27498                         break;
27499
27500                     } else if (codeA & codeB) { // trivial reject
27501                         break;
27502
27503                     } else if (codeA) { // a outside, intersect with clip edge
27504                         a = intersect$1(a, b, codeA, bbox);
27505                         codeA = bitCode(a, bbox);
27506
27507                     } else { // b outside
27508                         b = intersect$1(a, b, codeB, bbox);
27509                         codeB = bitCode(b, bbox);
27510                     }
27511                 }
27512
27513                 codeA = lastCode;
27514             }
27515
27516             if (part.length) { result.push(part); }
27517
27518             return result;
27519         }
27520
27521         // Sutherland-Hodgeman polygon clipping algorithm
27522
27523         function polygonclip(points, bbox) {
27524
27525             var result, edge, prev, prevInside, i, p, inside;
27526
27527             // clip against each side of the clip rectangle
27528             for (edge = 1; edge <= 8; edge *= 2) {
27529                 result = [];
27530                 prev = points[points.length - 1];
27531                 prevInside = !(bitCode(prev, bbox) & edge);
27532
27533                 for (i = 0; i < points.length; i++) {
27534                     p = points[i];
27535                     inside = !(bitCode(p, bbox) & edge);
27536
27537                     // if segment goes through the clip window, add an intersection
27538                     if (inside !== prevInside) { result.push(intersect$1(prev, p, edge, bbox)); }
27539
27540                     if (inside) { result.push(p); } // add a point if it's inside
27541
27542                     prev = p;
27543                     prevInside = inside;
27544                 }
27545
27546                 points = result;
27547
27548                 if (!points.length) { break; }
27549             }
27550
27551             return result;
27552         }
27553
27554         // intersect a segment against one of the 4 lines that make up the bbox
27555
27556         function intersect$1(a, b, edge, bbox) {
27557             return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top
27558                    edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom
27559                    edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right
27560                    edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left
27561                    null;
27562         }
27563
27564         // bit code reflects the point position relative to the bbox:
27565
27566         //         left  mid  right
27567         //    top  1001  1000  1010
27568         //    mid  0001  0000  0010
27569         // bottom  0101  0100  0110
27570
27571         function bitCode(p, bbox) {
27572             var code = 0;
27573
27574             if (p[0] < bbox[0]) { code |= 1; } // left
27575             else if (p[0] > bbox[2]) { code |= 2; } // right
27576
27577             if (p[1] < bbox[1]) { code |= 4; } // bottom
27578             else if (p[1] > bbox[3]) { code |= 8; } // top
27579
27580             return code;
27581         }
27582
27583         var whichPolygon_1 = whichPolygon;
27584
27585         function whichPolygon(data) {
27586             var bboxes = [];
27587             for (var i = 0; i < data.features.length; i++) {
27588                 var feature = data.features[i];
27589                 var coords = feature.geometry.coordinates;
27590
27591                 if (feature.geometry.type === 'Polygon') {
27592                     bboxes.push(treeItem(coords, feature.properties));
27593
27594                 } else if (feature.geometry.type === 'MultiPolygon') {
27595                     for (var j = 0; j < coords.length; j++) {
27596                         bboxes.push(treeItem(coords[j], feature.properties));
27597                     }
27598                 }
27599             }
27600
27601             var tree = rbush_1().load(bboxes);
27602
27603             function query(p, multi) {
27604                 var output = [],
27605                     result = tree.search({
27606                         minX: p[0],
27607                         minY: p[1],
27608                         maxX: p[0],
27609                         maxY: p[1]
27610                     });
27611                 for (var i = 0; i < result.length; i++) {
27612                     if (insidePolygon(result[i].coords, p)) {
27613                         if (multi)
27614                             { output.push(result[i].props); }
27615                         else
27616                             { return result[i].props; }
27617                     }
27618                 }
27619                 return multi && output.length ? output : null;
27620             }
27621
27622             query.tree = tree;
27623             query.bbox = function queryBBox(bbox) {
27624                 var output = [];
27625                 var result = tree.search({
27626                     minX: bbox[0],
27627                     minY: bbox[1],
27628                     maxX: bbox[2],
27629                     maxY: bbox[3]
27630                 });
27631                 for (var i = 0; i < result.length; i++) {
27632                     if (polygonIntersectsBBox(result[i].coords, bbox)) {
27633                         output.push(result[i].props);
27634                     }
27635                 }
27636                 return output;
27637             };
27638
27639             return query;
27640         }
27641
27642         function polygonIntersectsBBox(polygon, bbox) {
27643             var bboxCenter = [
27644                 (bbox[0] + bbox[2]) / 2,
27645                 (bbox[1] + bbox[3]) / 2
27646             ];
27647             if (insidePolygon(polygon, bboxCenter)) { return true; }
27648             for (var i = 0; i < polygon.length; i++) {
27649                 if (lineclip_1(polygon[i], bbox).length > 0) { return true; }
27650             }
27651             return false;
27652         }
27653
27654         // ray casting algorithm for detecting if point is in polygon
27655         function insidePolygon(rings, p) {
27656             var inside = false;
27657             for (var i = 0, len = rings.length; i < len; i++) {
27658                 var ring = rings[i];
27659                 for (var j = 0, len2 = ring.length, k = len2 - 1; j < len2; k = j++) {
27660                     if (rayIntersect(p, ring[j], ring[k])) { inside = !inside; }
27661                 }
27662             }
27663             return inside;
27664         }
27665
27666         function rayIntersect(p, p1, p2) {
27667             return ((p1[1] > p[1]) !== (p2[1] > p[1])) && (p[0] < (p2[0] - p1[0]) * (p[1] - p1[1]) / (p2[1] - p1[1]) + p1[0]);
27668         }
27669
27670         function treeItem(coords, props) {
27671             var item = {
27672                 minX: Infinity,
27673                 minY: Infinity,
27674                 maxX: -Infinity,
27675                 maxY: -Infinity,
27676                 coords: coords,
27677                 props: props
27678             };
27679
27680             for (var i = 0; i < coords[0].length; i++) {
27681                 var p = coords[0][i];
27682                 item.minX = Math.min(item.minX, p[0]);
27683                 item.minY = Math.min(item.minY, p[1]);
27684                 item.maxX = Math.max(item.maxX, p[0]);
27685                 item.maxY = Math.max(item.maxY, p[1]);
27686             }
27687             return item;
27688         }
27689
27690         var type$1 = "FeatureCollection";
27691         var features$1 = [{type:"Feature",properties:{m49:"017",wikidata:"Q27433",nameEn:"Middle Africa",groups:["202","002"],level:"intermediateRegion"},geometry:null},{type:"Feature",properties:{m49:"001",wikidata:"Q2",nameEn:"World",aliases:["Earth","Planet"],level:"world"},geometry:null},{type:"Feature",properties:{m49:"039",wikidata:"Q27449",nameEn:"Southern Europe",groups:["150"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"680",wikidata:"Q3405693",nameEn:"Sark",country:"GB",groups:["GG","830","154","150"],level:"subterritory",driveSide:"left",roadSpeedUnit:"mph",callingCodes:["44 01481"]},geometry:{type:"MultiPolygon",coordinates:[[[[-2.36485,49.48223],[-2.09454,49.46288],[-2.65349,49.15373],[-2.36485,49.48223]]]]}},{type:"Feature",properties:{m49:"005",wikidata:"Q18",nameEn:"South America",groups:["419","019"],level:"intermediateRegion"},geometry:null},{type:"Feature",properties:{m49:"143",wikidata:"Q27275",nameEn:"Central Asia",groups:["142"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"009",wikidata:"Q538",nameEn:"Oceania",level:"region"},geometry:null},{type:"Feature",properties:{m49:"150",wikidata:"Q46",nameEn:"Europe",level:"region"},geometry:null},{type:"Feature",properties:{m49:"061",wikidata:"Q35942",nameEn:"Polynesia",groups:["009"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"154",wikidata:"Q27479",nameEn:"Northern Europe",groups:["150"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"014",wikidata:"Q27407",nameEn:"Eastern Africa",groups:["202","002"],level:"intermediateRegion"},geometry:null},{type:"Feature",properties:{m49:"202",wikidata:"Q132959",nameEn:"Sub-Saharan Africa",groups:["002"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"053",wikidata:"Q45256",nameEn:"Australia and New Zealand",aliases:["Australasia"],groups:["009"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"830",wikidata:"Q42314",nameEn:"Channel Islands",groups:["150","154"],level:"intermediateRegion"},geometry:null},{type:"Feature",properties:{m49:"011",wikidata:"Q4412",nameEn:"Western Africa",groups:["202","002"],level:"intermediateRegion"},geometry:null},{type:"Feature",properties:{m49:"029",wikidata:"Q664609",nameEn:"Caribbean",groups:["419","019","003"],level:"intermediateRegion"},geometry:null},{type:"Feature",properties:{m49:"013",wikidata:"Q27611",nameEn:"Central America",groups:["419","019","003"],level:"intermediateRegion"},geometry:null},{type:"Feature",properties:{m49:"002",wikidata:"Q15",nameEn:"Africa",level:"region"},geometry:null},{type:"Feature",properties:{m49:"021",wikidata:"Q2017699",nameEn:"Northern America",groups:["019","003"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"142",wikidata:"Q48",nameEn:"Asia",level:"region"},geometry:null},{type:"Feature",properties:{m49:"035",wikidata:"Q11708",nameEn:"South-eastern Asia",groups:["142"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"151",wikidata:"Q27468",nameEn:"Eastern Europe",groups:["150"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"018",wikidata:"Q27394",nameEn:"Southern Africa",groups:["202","002"],level:"intermediateRegion"},geometry:null},{type:"Feature",properties:{m49:"419",wikidata:"Q72829598",nameEn:"Latin America and the Caribbean",groups:["019"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"034",wikidata:"Q771405",nameEn:"Southern Asia",groups:["142"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"057",wikidata:"Q3359409",nameEn:"Micronesia",groups:["009"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"054",wikidata:"Q37394",nameEn:"Melanesia",groups:["009"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"015",wikidata:"Q27381",nameEn:"Northern Africa",groups:["002"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"030",wikidata:"Q27231",nameEn:"Eastern Asia",groups:["142"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"003",wikidata:"Q49",nameEn:"North America",groups:["019"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"019",wikidata:"Q828",nameEn:"Americas",level:"region"},geometry:null},{type:"Feature",properties:{m49:"155",wikidata:"Q27496",nameEn:"Western Europe",groups:["150"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"145",wikidata:"Q27293",nameEn:"Western Asia",groups:["142"],level:"subregion"},geometry:null},{type:"Feature",properties:{iso1A2:"IO",iso1A3:"IOT",iso1N3:"086",wikidata:"Q43448",nameEn:"British Indian Ocean Territory",country:"GB",groups:["014","202","002"],callingCodes:["246"]},geometry:{type:"MultiPolygon",coordinates:[[[[70.64754,-4.95745],[73.70488,-4.92492],[70.67958,-8.2663],[70.64754,-4.95745]]]]}},{type:"Feature",properties:{iso1A2:"KW",iso1A3:"KWT",iso1N3:"414",wikidata:"Q817",nameEn:"Kuwait",groups:["145","142"],callingCodes:["965"]},geometry:{type:"MultiPolygon",coordinates:[[[[49.00421,28.81495],[48.42991,28.53628],[47.70561,28.5221],[47.59863,28.66798],[47.58376,28.83382],[47.46202,29.0014],[46.5527,29.10283],[46.89695,29.50584],[47.15166,30.01044],[47.37192,30.10421],[47.7095,30.10453],[48.01114,29.98906],[48.06782,30.02906],[48.17332,30.02448],[48.40479,29.85763],[48.59531,29.66815],[49.00421,28.81495]]]]}},{type:"Feature",properties:{iso1A2:"ZW",iso1A3:"ZWE",iso1N3:"716",wikidata:"Q954",nameEn:"Zimbabwe",groups:["014","202","002"],driveSide:"left",callingCodes:["263"]},geometry:{type:"MultiPolygon",coordinates:[[[[30.41902,-15.62269],[30.42568,-15.9962],[30.91597,-15.99924],[30.97761,-16.05848],[31.13171,-15.98019],[31.30563,-16.01193],[31.42451,-16.15154],[31.67988,-16.19595],[31.90223,-16.34388],[31.91324,-16.41569],[32.02772,-16.43892],[32.28529,-16.43892],[32.42838,-16.4727],[32.71017,-16.59932],[32.69917,-16.66893],[32.78943,-16.70267],[32.97655,-16.70689],[32.91051,-16.89446],[32.84113,-16.92259],[32.96554,-17.11971],[33.00517,-17.30477],[33.0426,-17.3468],[32.96554,-17.48964],[32.98536,-17.55891],[33.0492,-17.60298],[32.94133,-17.99705],[33.03159,-18.35054],[33.02278,-18.4696],[32.88629,-18.51344],[32.88629,-18.58023],[32.95013,-18.69079],[32.9017,-18.7992],[32.82465,-18.77419],[32.70137,-18.84712],[32.73439,-18.92628],[32.69917,-18.94293],[32.72118,-19.02204],[32.84006,-19.0262],[32.87088,-19.09279],[32.85107,-19.29238],[32.77966,-19.36098],[32.78282,-19.47513],[32.84446,-19.48343],[32.84666,-19.68462],[32.95013,-19.67219],[33.06461,-19.77787],[33.01178,-20.02007],[32.93032,-20.03868],[32.85987,-20.16686],[32.85987,-20.27841],[32.66174,-20.56106],[32.55167,-20.56312],[32.48122,-20.63319],[32.51644,-20.91929],[32.37115,-21.133],[32.48236,-21.32873],[32.41234,-21.31246],[31.38336,-22.36919],[31.30611,-22.422],[31.16344,-22.32599],[31.08932,-22.34884],[30.86696,-22.28907],[30.6294,-22.32599],[30.48686,-22.31368],[30.38614,-22.34533],[30.28351,-22.35587],[30.2265,-22.2961],[30.13147,-22.30841],[29.92242,-22.19408],[29.76848,-22.14128],[29.64609,-22.12917],[29.37703,-22.19581],[29.3533,-22.18363],[29.24648,-22.05967],[29.1974,-22.07472],[29.14501,-22.07275],[29.08495,-22.04867],[29.04108,-22.00563],[29.02191,-21.95665],[29.02191,-21.90647],[29.04023,-21.85864],[29.07763,-21.81877],[28.58114,-21.63455],[28.49942,-21.66634],[28.29416,-21.59037],[28.01669,-21.57624],[27.91407,-21.31621],[27.69171,-21.08409],[27.72972,-20.51735],[27.69361,-20.48531],[27.28865,-20.49873],[27.29831,-20.28935],[27.21278,-20.08244],[26.72246,-19.92707],[26.17227,-19.53709],[25.96226,-19.08152],[25.99837,-19.02943],[25.94326,-18.90362],[25.82353,-18.82808],[25.79217,-18.6355],[25.68859,-18.56165],[25.53465,-18.39041],[25.39972,-18.12691],[25.31799,-18.07091],[25.23909,-17.90832],[25.26433,-17.79571],[25.51646,-17.86232],[25.6827,-17.81987],[25.85738,-17.91403],[25.85892,-17.97726],[26.08925,-17.98168],[26.0908,-17.93021],[26.21601,-17.88608],[26.55918,-17.99638],[26.68403,-18.07411],[26.74314,-18.0199],[26.89926,-17.98756],[27.14196,-17.81398],[27.30736,-17.60487],[27.61377,-17.34378],[27.62795,-17.24365],[27.83141,-16.96274],[28.73725,-16.5528],[28.76199,-16.51575],[28.81454,-16.48611],[28.8501,-16.04537],[28.9243,-15.93987],[29.01298,-15.93805],[29.21955,-15.76589],[29.4437,-15.68702],[29.8317,-15.6126],[30.35574,-15.6513],[30.41902,-15.62269]]]]}},{type:"Feature",properties:{iso1A2:"KY",iso1A3:"CYM",iso1N3:"136",wikidata:"Q5785",nameEn:"Cayman Islands",country:"GB",groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 345"]},geometry:{type:"MultiPolygon",coordinates:[[[[-82.11509,19.60401],[-79.32727,20.06742],[-80.36068,18.11751],[-82.11509,19.60401]]]]}},{type:"Feature",properties:{iso1A2:"AD",iso1A3:"AND",iso1N3:"020",wikidata:"Q228",nameEn:"Andorra",groups:["039","150"],callingCodes:["376"]},geometry:{type:"MultiPolygon",coordinates:[[[[1.72515,42.50338],[1.70571,42.48867],[1.66826,42.50779],[1.65674,42.47125],[1.58933,42.46275],[1.57953,42.44957],[1.55937,42.45808],[1.55073,42.43299],[1.5127,42.42959],[1.44529,42.43724],[1.43838,42.47848],[1.41648,42.48315],[1.46661,42.50949],[1.44759,42.54431],[1.41245,42.53539],[1.4234,42.55959],[1.44529,42.56722],[1.42512,42.58292],[1.44197,42.60217],[1.47986,42.61346],[1.46718,42.63296],[1.48043,42.65203],[1.50867,42.64483],[1.55418,42.65669],[1.60085,42.62703],[1.63485,42.62957],[1.6625,42.61982],[1.68267,42.62533],[1.73452,42.61515],[1.72588,42.59098],[1.7858,42.57698],[1.73683,42.55492],[1.72515,42.50338]]]]}},{type:"Feature",properties:{iso1A2:"KZ",iso1A3:"KAZ",iso1N3:"398",wikidata:"Q232",nameEn:"Kazakhstan",groups:["143","142"],callingCodes:["7"]},geometry:{type:"MultiPolygon",coordinates:[[[[68.90865,55.38148],[69.34224,55.36344],[69.74917,55.35545],[70.19179,55.1476],[70.76493,55.3027],[70.96009,55.10558],[71.08288,54.71253],[71.24185,54.64965],[71.08706,54.33376],[71.10379,54.13326],[71.96141,54.17736],[72.17477,54.36303],[72.43415,53.92685],[72.71026,54.1161],[73.37963,53.96132],[73.74778,54.07194],[73.68921,53.86522],[73.25412,53.61532],[73.39218,53.44623],[75.07405,53.80831],[75.43398,53.98652],[75.3668,54.07439],[76.91052,54.4677],[76.82266,54.1798],[76.44076,54.16017],[76.54243,53.99329],[77.90383,53.29807],[79.11255,52.01171],[80.08138,50.77658],[80.4127,50.95581],[80.44819,51.20855],[80.80318,51.28262],[81.16999,51.15662],[81.06091,50.94833],[81.41248,50.97524],[81.46581,50.77658],[81.94999,50.79307],[82.55443,50.75412],[83.14607,51.00796],[83.8442,50.87375],[84.29385,50.27257],[84.99198,50.06793],[85.24047,49.60239],[86.18709,49.50259],[86.63674,49.80136],[86.79056,49.74787],[86.61307,49.60239],[86.82606,49.51796],[87.03071,49.25142],[87.31465,49.23603],[87.28386,49.11626],[86.87238,49.12432],[86.73568,48.99918],[86.75343,48.70331],[86.38069,48.46064],[85.73581,48.3939],[85.5169,48.05493],[85.61067,47.49753],[85.69696,47.2898],[85.54294,47.06171],[85.22443,47.04816],[84.93995,46.87399],[84.73077,47.01394],[83.92184,46.98912],[83.04622,47.19053],[82.21792,45.56619],[82.58474,45.40027],[82.51374,45.1755],[81.73278,45.3504],[80.11169,45.03352],[79.8987,44.89957],[80.38384,44.63073],[80.40229,44.23319],[80.40031,44.10986],[80.75156,43.44948],[80.69718,43.32589],[80.77771,43.30065],[80.78817,43.14235],[80.62913,43.141],[80.3735,43.01557],[80.58999,42.9011],[80.38169,42.83142],[80.26886,42.8366],[80.16892,42.61137],[80.26841,42.23797],[80.17807,42.21166],[79.97364,42.42816],[79.52921,42.44778],[79.19763,42.804],[78.91502,42.76839],[78.48469,42.89649],[75.82823,42.94848],[75.72174,42.79672],[75.29966,42.86183],[75.22619,42.85528],[74.88756,42.98612],[74.75,42.99029],[74.70331,43.02519],[74.64615,43.05881],[74.57491,43.13702],[74.22489,43.24657],[73.55634,43.03071],[73.50992,42.82356],[73.44393,42.43098],[71.88792,42.83578],[71.62405,42.76613],[71.53272,42.8014],[71.2724,42.77853],[71.22785,42.69248],[71.17807,42.67381],[71.15232,42.60486],[70.97717,42.50147],[70.85973,42.30188],[70.94483,42.26238],[69.49545,41.545],[69.45751,41.56863],[69.39485,41.51518],[69.45081,41.46246],[69.37468,41.46555],[69.35554,41.47211],[69.29778,41.43673],[69.25059,41.46693],[69.23332,41.45847],[69.22671,41.46298],[69.20439,41.45391],[69.18528,41.45175],[69.17701,41.43769],[69.15137,41.43078],[69.05006,41.36183],[69.01308,41.22804],[68.7217,41.05025],[68.73945,40.96989],[68.65662,40.93861],[68.62221,41.03019],[68.49983,40.99669],[68.58444,40.91447],[68.63,40.59358],[68.49983,40.56437],[67.96736,40.83798],[68.1271,41.0324],[68.08273,41.08148],[67.98511,41.02794],[67.9644,41.14611],[66.69129,41.1311],[66.53302,41.87388],[66.00546,41.94455],[66.09482,42.93426],[65.85194,42.85481],[65.53277,43.31856],[65.18666,43.48835],[64.96464,43.74748],[64.53885,43.56941],[63.34656,43.64003],[62.01711,43.51008],[61.01475,44.41383],[58.59711,45.58671],[55.97842,44.99622],[55.97832,44.99622],[55.97822,44.99617],[55.97811,44.99617],[55.97801,44.99612],[55.97801,44.99607],[55.97791,44.99607],[55.9778,44.99607],[55.9777,44.99601],[55.9777,44.99596],[55.9776,44.99591],[55.97749,44.99591],[55.97739,44.99591],[55.97739,44.99586],[55.97729,44.99586],[55.97718,44.99581],[55.97708,44.99576],[55.97698,44.9957],[55.97698,44.99565],[55.97687,44.9956],[55.97677,44.9956],[55.97677,44.99555],[55.97677,44.9955],[55.97667,44.99545],[55.97656,44.99539],[55.97646,44.99534],[55.97646,44.99529],[55.97636,44.99524],[55.97636,44.99519],[55.97625,44.99514],[55.97615,44.99508],[55.97615,44.99503],[55.97615,44.99498],[55.97615,44.99493],[55.97615,44.99483],[55.97615,44.99477],[55.97605,44.99477],[55.97605,44.99467],[55.97605,44.99462],[55.97605,44.99457],[55.97605,44.99452],[55.97594,44.99446],[55.97584,44.99441],[55.97584,44.99436],[55.97584,44.99431],[55.97584,44.99426],[55.97584,44.99421],[55.97584,44.99415],[55.97584,44.99405],[55.97584,44.994],[55.97584,44.9939],[55.97584,44.99384],[55.97584,44.99374],[55.97584,44.99369],[55.97584,44.99359],[55.97584,44.99353],[55.97584,44.99348],[55.97584,44.99343],[55.97584,44.99338],[55.97584,44.99328],[55.97584,44.99322],[56.00314,41.32584],[55.45471,41.25609],[54.95182,41.92424],[54.20635,42.38477],[52.97575,42.1308],[52.47884,41.78034],[52.26048,41.69249],[49.2134,44.84989],[49.88945,46.04554],[49.32259,46.26944],[49.16518,46.38542],[48.54988,46.56267],[48.51142,46.69268],[49.01136,46.72716],[48.52326,47.4102],[48.45173,47.40818],[48.15348,47.74545],[47.64973,47.76559],[47.41689,47.83687],[47.38731,47.68176],[47.12107,47.83687],[47.11516,48.27188],[46.49011,48.43019],[46.78392,48.95352],[46.91104,48.99715],[47.01458,49.07085],[47.04416,49.17152],[46.98795,49.23531],[46.78398,49.34026],[46.9078,49.86707],[47.18319,49.93721],[47.34589,50.09308],[47.30448,50.30894],[47.58551,50.47867],[48.10044,50.09242],[48.24519,49.86099],[48.42564,49.82283],[48.68352,49.89546],[48.90782,50.02281],[48.57946,50.63278],[48.86936,50.61589],[49.12673,50.78639],[49.41959,50.85927],[49.39001,51.09396],[49.76866,51.11067],[49.97277,51.2405],[50.26859,51.28677],[50.59695,51.61859],[51.26254,51.68466],[51.301,51.48799],[51.77431,51.49536],[51.8246,51.67916],[52.36119,51.74161],[52.54329,51.48444],[53.46165,51.49445],[53.69299,51.23466],[54.12248,51.11542],[54.46331,50.85554],[54.41894,50.61214],[54.55797,50.52006],[54.71476,50.61214],[54.56685,51.01958],[54.72067,51.03261],[55.67774,50.54508],[56.11398,50.7471],[56.17906,50.93204],[57.17302,51.11253],[57.44221,50.88354],[57.74986,50.93017],[57.75578,51.13852],[58.3208,51.15151],[58.87974,50.70852],[59.48928,50.64216],[59.51886,50.49937],[59.81172,50.54451],[60.01288,50.8163],[60.17262,50.83312],[60.31914,50.67705],[60.81833,50.6629],[61.4431,50.80679],[61.56889,51.23679],[61.6813,51.25716],[61.55114,51.32746],[61.50677,51.40687],[60.95655,51.48615],[60.92401,51.61124],[60.5424,51.61675],[60.36787,51.66815],[60.50986,51.7964],[60.09867,51.87135],[59.99809,51.98263],[60.19925,51.99173],[60.48915,52.15175],[60.72581,52.15538],[60.78201,52.22067],[61.05417,52.35096],[60.98021,52.50068],[60.84709,52.52228],[60.84118,52.63912],[60.71693,52.66245],[60.71989,52.75923],[61.05842,52.92217],[61.23462,53.03227],[62.0422,52.96105],[62.12799,52.99133],[62.14574,53.09626],[61.19024,53.30536],[61.14291,53.41481],[61.29082,53.50992],[61.37957,53.45887],[61.57185,53.50112],[61.55706,53.57144],[60.90626,53.62937],[61.22574,53.80268],[61.14283,53.90063],[60.99796,53.93699],[61.26863,53.92797],[61.3706,54.08464],[61.47603,54.08048],[61.56941,53.95703],[61.65318,54.02445],[62.03913,53.94768],[62.00966,54.04134],[62.38535,54.03961],[62.45931,53.90737],[62.56876,53.94047],[62.58651,54.05871],[63.80604,54.27079],[63.91224,54.20013],[64.02715,54.22679],[63.97686,54.29763],[64.97216,54.4212],[65.11033,54.33028],[65.24663,54.35721],[65.20174,54.55216],[68.21308,54.98645],[68.26661,55.09226],[68.19206,55.18823],[68.90865,55.38148]]]]}},{type:"Feature",properties:{iso1A2:"AF",iso1A3:"AFG",iso1N3:"004",wikidata:"Q889",nameEn:"Afghanistan",groups:["034","142"],callingCodes:["93"]},geometry:{type:"MultiPolygon",coordinates:[[[[70.61526,38.34774],[70.64966,38.34999],[70.69189,38.37031],[70.6761,38.39144],[70.67438,38.40597],[70.69807,38.41861],[70.72485,38.4131],[70.75455,38.4252],[70.77132,38.45548],[70.78581,38.45502],[70.78702,38.45031],[70.79766,38.44944],[70.80521,38.44447],[70.81697,38.44507],[70.82538,38.45394],[70.84376,38.44688],[70.88719,38.46826],[70.92728,38.43021],[70.98693,38.48862],[71.03545,38.44779],[71.0556,38.40176],[71.09542,38.42517],[71.10592,38.42077],[71.10957,38.40671],[71.1451,38.40106],[71.21291,38.32797],[71.33114,38.30339],[71.33869,38.27335],[71.37803,38.25641],[71.36444,38.15358],[71.29878,38.04429],[71.28922,38.01272],[71.27622,37.99946],[71.27278,37.96496],[71.24969,37.93031],[71.2809,37.91995],[71.296,37.93403],[71.32871,37.88564],[71.51565,37.95349],[71.58843,37.92425],[71.59255,37.79956],[71.55752,37.78677],[71.54324,37.77104],[71.53053,37.76534],[71.55234,37.73209],[71.54186,37.69691],[71.51972,37.61945],[71.5065,37.60912],[71.49693,37.53527],[71.50616,37.50733],[71.5256,37.47971],[71.49612,37.4279],[71.47685,37.40281],[71.4862,37.33405],[71.49821,37.31975],[71.50674,37.31502],[71.48536,37.26017],[71.4824,37.24921],[71.48339,37.23937],[71.47386,37.2269],[71.4555,37.21418],[71.4494,37.18137],[71.44127,37.11856],[71.43097,37.05855],[71.45578,37.03094],[71.46923,36.99925],[71.48481,36.93218],[71.51502,36.89128],[71.57195,36.74943],[71.67083,36.67346],[71.83229,36.68084],[72.31676,36.98115],[72.54095,37.00007],[72.66381,37.02014],[72.79693,37.22222],[73.06884,37.31729],[73.29633,37.46495],[73.77197,37.4417],[73.76647,37.33913],[73.61129,37.27469],[73.64974,37.23643],[73.82552,37.22659],[73.8564,37.26158],[74.20308,37.34208],[74.23339,37.41116],[74.41055,37.3948],[74.56161,37.37734],[74.68383,37.3948],[74.8294,37.3435],[74.88887,37.23275],[74.80605,37.21565],[74.49981,37.24518],[74.56453,37.03023],[74.53739,36.96224],[74.43389,37.00977],[74.04856,36.82648],[73.82685,36.91421],[72.6323,36.84601],[72.18135,36.71838],[71.80267,36.49924],[71.60491,36.39429],[71.19505,36.04134],[71.37969,35.95865],[71.55273,35.71483],[71.49917,35.6267],[71.65435,35.4479],[71.54294,35.31037],[71.5541,35.28776],[71.67495,35.21262],[71.52938,35.09023],[71.55273,35.02615],[71.49917,35.00478],[71.50329,34.97328],[71.29472,34.87728],[71.28356,34.80882],[71.08718,34.69034],[71.11602,34.63047],[71.0089,34.54568],[71.02401,34.44835],[71.17662,34.36769],[71.12815,34.26619],[71.13078,34.16503],[71.09453,34.13524],[71.09307,34.11961],[71.06933,34.10564],[71.07345,34.06242],[70.88119,33.97933],[70.54336,33.9463],[69.90203,34.04194],[69.87307,33.9689],[69.85671,33.93719],[70.00503,33.73528],[70.14236,33.71701],[70.14785,33.6553],[70.20141,33.64387],[70.17062,33.53535],[70.32775,33.34496],[70.13686,33.21064],[70.07369,33.22557],[70.02563,33.14282],[69.85259,33.09451],[69.79766,33.13247],[69.71526,33.09911],[69.57656,33.09911],[69.49004,33.01509],[69.49854,32.88843],[69.5436,32.8768],[69.47082,32.85834],[69.38018,32.76601],[69.43649,32.7302],[69.44747,32.6678],[69.38155,32.56601],[69.2868,32.53938],[69.23599,32.45946],[69.27932,32.29119],[69.27032,32.14141],[69.3225,31.93186],[69.20577,31.85957],[69.11514,31.70782],[69.00939,31.62249],[68.95995,31.64822],[68.91078,31.59687],[68.79997,31.61665],[68.6956,31.75687],[68.57475,31.83158],[68.44222,31.76446],[68.27605,31.75863],[68.25614,31.80357],[68.1655,31.82691],[68.00071,31.6564],[67.86887,31.63536],[67.72056,31.52304],[67.58323,31.52772],[67.62374,31.40473],[67.7748,31.4188],[67.78854,31.33203],[67.29964,31.19586],[67.03323,31.24519],[67.04147,31.31561],[66.83273,31.26867],[66.72561,31.20526],[66.68166,31.07597],[66.58175,30.97532],[66.42645,30.95309],[66.39194,30.9408],[66.28413,30.57001],[66.34869,30.404],[66.23609,30.06321],[66.36042,29.9583],[66.24175,29.85181],[65.04005,29.53957],[64.62116,29.58903],[64.19796,29.50407],[64.12966,29.39157],[63.5876,29.50456],[62.47751,29.40782],[60.87231,29.86514],[61.80829,30.84224],[61.78268,30.92724],[61.8335,30.97669],[61.83257,31.0452],[61.80957,31.12576],[61.80569,31.16167],[61.70929,31.37391],[60.84541,31.49561],[60.86191,32.22565],[60.56485,33.12944],[60.88908,33.50219],[60.91133,33.55596],[60.69573,33.56054],[60.57762,33.59772],[60.5485,33.73422],[60.5838,33.80793],[60.50209,34.13992],[60.66502,34.31539],[60.91321,34.30411],[60.72316,34.52857],[60.99922,34.63064],[61.00197,34.70631],[61.06926,34.82139],[61.12831,35.09938],[61.0991,35.27845],[61.18187,35.30249],[61.27371,35.61482],[61.58742,35.43803],[61.77693,35.41341],[61.97743,35.4604],[62.05709,35.43803],[62.15871,35.33278],[62.29191,35.25964],[62.29878,35.13312],[62.48006,35.28796],[62.62288,35.22067],[62.74098,35.25432],[62.90853,35.37086],[63.0898,35.43131],[63.12276,35.53196],[63.10079,35.63024],[63.23262,35.67487],[63.10318,35.81782],[63.12276,35.86208],[63.29579,35.85985],[63.53475,35.90881],[63.56496,35.95106],[63.98519,36.03773],[64.05385,36.10433],[64.43288,36.24401],[64.57295,36.34362],[64.62514,36.44311],[64.61141,36.6351],[64.97945,37.21913],[65.51778,37.23881],[65.64263,37.34388],[65.64137,37.45061],[65.72274,37.55438],[66.30993,37.32409],[66.55743,37.35409],[66.64699,37.32958],[66.95598,37.40162],[67.08232,37.35469],[67.13039,37.27168],[67.2224,37.24545],[67.2581,37.17216],[67.51868,37.26102],[67.78329,37.1834],[67.7803,37.08978],[67.87917,37.0591],[68.02194,36.91923],[68.18542,37.02074],[68.27605,37.00977],[68.29253,37.10621],[68.41201,37.10402],[68.41888,37.13906],[68.61851,37.19815],[68.6798,37.27906],[68.81438,37.23862],[68.80889,37.32494],[68.91189,37.26704],[68.88168,37.33368],[68.96407,37.32603],[69.03274,37.25174],[69.25152,37.09426],[69.39529,37.16752],[69.45022,37.23315],[69.36645,37.40462],[69.44954,37.4869],[69.51888,37.5844],[69.80041,37.5746],[69.84435,37.60616],[69.93362,37.61378],[69.95971,37.5659],[70.15015,37.52519],[70.28243,37.66706],[70.27694,37.81258],[70.1863,37.84296],[70.17206,37.93276],[70.4898,38.12546],[70.54673,38.24541],[70.60407,38.28046],[70.61526,38.34774]]]]}},{type:"Feature",properties:{iso1A2:"LA",iso1A3:"LAO",iso1N3:"418",wikidata:"Q819",nameEn:"Laos",groups:["035","142"],callingCodes:["856"]},geometry:{type:"MultiPolygon",coordinates:[[[[102.1245,22.43372],[102.14099,22.40092],[102.18712,22.30403],[102.51734,22.02676],[102.49092,21.99002],[102.62301,21.91447],[102.67145,21.65894],[102.74189,21.66713],[102.82115,21.73667],[102.81894,21.83888],[102.85637,21.84501],[102.86077,21.71213],[102.97965,21.74076],[102.98846,21.58936],[102.86297,21.4255],[102.94223,21.46034],[102.88939,21.3107],[102.80794,21.25736],[102.89825,21.24707],[102.97745,21.05821],[103.03469,21.05821],[103.12055,20.89994],[103.21497,20.89832],[103.38032,20.79501],[103.45737,20.82382],[103.68633,20.66324],[103.73478,20.6669],[103.82282,20.8732],[103.98024,20.91531],[104.11121,20.96779],[104.27412,20.91433],[104.63957,20.6653],[104.38199,20.47155],[104.40621,20.3849],[104.47886,20.37459],[104.66158,20.47774],[104.72102,20.40554],[104.62195,20.36633],[104.61315,20.24452],[104.86852,20.14121],[104.91695,20.15567],[104.9874,20.09573],[104.8465,19.91783],[104.8355,19.80395],[104.68359,19.72729],[104.64837,19.62365],[104.53169,19.61743],[104.41281,19.70035],[104.23229,19.70242],[104.06498,19.66926],[104.05617,19.61743],[104.10832,19.51575],[104.06058,19.43484],[103.87125,19.31854],[104.5361,18.97747],[104.64617,18.85668],[105.12829,18.70453],[105.19654,18.64196],[105.1327,18.58355],[105.10408,18.43533],[105.15942,18.38691],[105.38366,18.15315],[105.46292,18.22008],[105.64784,17.96687],[105.60381,17.89356],[105.76612,17.67147],[105.85744,17.63221],[106.09019,17.36399],[106.18991,17.28227],[106.24444,17.24714],[106.29287,17.3018],[106.31929,17.20509],[106.43597,17.01362],[106.50862,16.9673],[106.55045,17.0031],[106.54824,16.92729],[106.51963,16.92097],[106.52183,16.87884],[106.55265,16.86831],[106.55485,16.68704],[106.59013,16.62259],[106.58267,16.6012],[106.61477,16.60713],[106.66052,16.56892],[106.65832,16.47816],[106.74418,16.41904],[106.84104,16.55415],[106.88727,16.52671],[106.88067,16.43594],[106.96638,16.34938],[106.97385,16.30204],[107.02597,16.31132],[107.09091,16.3092],[107.15035,16.26271],[107.14595,16.17816],[107.25822,16.13587],[107.33968,16.05549],[107.44975,16.08511],[107.46296,16.01106],[107.39471,15.88829],[107.34188,15.89464],[107.21419,15.83747],[107.21859,15.74638],[107.27143,15.71459],[107.27583,15.62769],[107.34408,15.62345],[107.3815,15.49832],[107.50699,15.48771],[107.53341,15.40496],[107.62367,15.42193],[107.60605,15.37524],[107.62587,15.2266],[107.58844,15.20111],[107.61926,15.13949],[107.61486,15.0566],[107.46516,15.00982],[107.48277,14.93751],[107.59285,14.87795],[107.51579,14.79282],[107.54361,14.69092],[107.47238,14.61523],[107.44435,14.52785],[107.37897,14.54443],[107.3276,14.58812],[107.29803,14.58963],[107.26534,14.54292],[107.256,14.48716],[107.21241,14.48716],[107.17038,14.41782],[107.09722,14.3937],[107.03962,14.45099],[107.04585,14.41782],[106.98825,14.36806],[106.9649,14.3198],[106.90574,14.33639],[106.8497,14.29416],[106.80767,14.31226],[106.73762,14.42687],[106.63333,14.44194],[106.59908,14.50977],[106.57106,14.50525],[106.54148,14.59565],[106.50723,14.58963],[106.45898,14.55045],[106.47766,14.50977],[106.43874,14.52032],[106.40916,14.45249],[106.32355,14.44043],[106.25194,14.48415],[106.21302,14.36203],[106.00131,14.36957],[105.99509,14.32734],[106.02311,14.30623],[106.04801,14.20363],[106.10872,14.18401],[106.11962,14.11307],[106.18656,14.06324],[106.16632,14.01794],[106.10094,13.98471],[106.10405,13.9137],[105.90791,13.92881],[105.78182,14.02247],[105.78338,14.08438],[105.5561,14.15684],[105.44869,14.10703],[105.36775,14.09948],[105.2759,14.17496],[105.20894,14.34967],[105.43783,14.43865],[105.53864,14.55731],[105.5121,14.80802],[105.61162,15.00037],[105.46661,15.13132],[105.58043,15.32724],[105.50662,15.32054],[105.4692,15.33709],[105.47635,15.3796],[105.58191,15.41031],[105.60446,15.53301],[105.61756,15.68792],[105.46573,15.74742],[105.42285,15.76971],[105.37959,15.84074],[105.34115,15.92737],[105.38508,15.987],[105.42001,16.00657],[105.06204,16.09792],[105.00262,16.25627],[104.88057,16.37311],[104.73349,16.565],[104.76099,16.69302],[104.7397,16.81005],[104.76442,16.84752],[104.7373,16.91125],[104.73712,17.01404],[104.80716,17.19025],[104.80061,17.39367],[104.69867,17.53038],[104.45404,17.66788],[104.35432,17.82871],[104.2757,17.86139],[104.21776,17.99335],[104.10927,18.10826],[104.06533,18.21656],[103.97725,18.33631],[103.93916,18.33914],[103.85642,18.28666],[103.82449,18.33979],[103.699,18.34125],[103.60957,18.40528],[103.47773,18.42841],[103.41044,18.4486],[103.30977,18.4341],[103.24779,18.37807],[103.23818,18.34875],[103.29757,18.30475],[103.17093,18.2618],[103.14994,18.23172],[103.1493,18.17799],[103.07343,18.12351],[103.07823,18.03833],[103.0566,18.00144],[103.01998,17.97095],[102.9912,17.9949],[102.95812,18.0054],[102.86323,17.97531],[102.81988,17.94233],[102.79044,17.93612],[102.75954,17.89561],[102.68538,17.86653],[102.67543,17.84529],[102.69946,17.81686],[102.68194,17.80151],[102.59485,17.83537],[102.5896,17.84889],[102.61432,17.92273],[102.60971,17.95411],[102.59234,17.96127],[102.45523,17.97106],[102.11359,18.21532],[101.88485,18.02474],[101.78087,18.07559],[101.72294,17.92867],[101.44667,17.7392],[101.15108,17.47586],[100.96541,17.57926],[101.02185,17.87637],[101.1793,18.0544],[101.19118,18.2125],[101.15108,18.25624],[101.18227,18.34367],[101.06047,18.43247],[101.27585,18.68875],[101.22832,18.73377],[101.25803,18.89545],[101.35606,19.04716],[101.261,19.12717],[101.24911,19.33334],[101.20604,19.35296],[101.21347,19.46223],[101.26991,19.48324],[101.26545,19.59242],[101.08928,19.59748],[100.90302,19.61901],[100.77231,19.48324],[100.64606,19.55884],[100.58219,19.49164],[100.49604,19.53504],[100.398,19.75047],[100.5094,19.87904],[100.58808,20.15791],[100.55218,20.17741],[100.51052,20.14928],[100.47567,20.19133],[100.4537,20.19971],[100.44992,20.23644],[100.41473,20.25625],[100.37439,20.35156],[100.33383,20.4028],[100.25769,20.3992],[100.22076,20.31598],[100.16668,20.2986],[100.1712,20.24324],[100.11785,20.24787],[100.09337,20.26293],[100.09999,20.31614],[100.08404,20.36626],[100.1957,20.68247],[100.36375,20.82783],[100.51079,20.82194],[100.60112,20.8347],[100.64628,20.88279],[100.50974,20.88574],[100.55281,21.02796],[100.63578,21.05639],[100.72716,21.31786],[100.80173,21.2934],[101.00234,21.39612],[101.16198,21.52808],[101.15156,21.56129],[101.2124,21.56422],[101.19349,21.41959],[101.26912,21.36482],[101.2229,21.23271],[101.29326,21.17254],[101.54563,21.25668],[101.6068,21.23329],[101.59491,21.18621],[101.60886,21.17947],[101.66977,21.20004],[101.70548,21.14911],[101.7622,21.14813],[101.79266,21.19025],[101.76745,21.21571],[101.83887,21.20983],[101.84412,21.25291],[101.74014,21.30967],[101.74224,21.48276],[101.7727,21.51794],[101.7475,21.5873],[101.80001,21.57461],[101.83257,21.61562],[101.74555,21.72852],[101.7791,21.83019],[101.62566,21.96574],[101.57525,22.13026],[101.60675,22.13513],[101.53638,22.24794],[101.56789,22.28876],[101.61306,22.27515],[101.68973,22.46843],[101.7685,22.50337],[101.86828,22.38397],[101.90714,22.38688],[101.91344,22.44417],[101.98487,22.42766],[102.03633,22.46164],[102.1245,22.43372]]]]}},{type:"Feature",properties:{iso1A2:"AI",iso1A3:"AIA",iso1N3:"660",wikidata:"Q25228",nameEn:"Anguilla",country:"GB",groups:["029","003","419","019"],driveSide:"left",callingCodes:["1 264"]},geometry:{type:"MultiPolygon",coordinates:[[[[-63.83866,18.82518],[-62.46233,19.00569],[-62.75637,18.13489],[-62.86666,18.19278],[-63.35989,18.06012],[-63.83866,18.82518]]]]}},{type:"Feature",properties:{iso1A2:"LB",iso1A3:"LBN",iso1N3:"422",wikidata:"Q822",nameEn:"Lebanon",aliases:["RL"],groups:["145","142"],callingCodes:["961"]},geometry:{type:"MultiPolygon",coordinates:[[[[35.94816,33.47886],[35.88668,33.43183],[35.82577,33.40479],[35.81324,33.36354],[35.77477,33.33609],[35.62019,33.27278],[35.62283,33.24226],[35.58502,33.26653],[35.58326,33.28381],[35.56523,33.28969],[35.55555,33.25844],[35.54544,33.25513],[35.54808,33.236],[35.5362,33.23196],[35.54228,33.19865],[35.52573,33.11921],[35.50335,33.114],[35.50272,33.09056],[35.448,33.09264],[35.43059,33.06659],[35.35223,33.05617],[35.31429,33.10515],[35.1924,33.08743],[35.10645,33.09318],[34.78515,33.20368],[35.48515,34.70851],[35.97386,34.63322],[35.98718,34.64977],[36.29165,34.62991],[36.32399,34.69334],[36.35135,34.68516],[36.35384,34.65447],[36.42941,34.62505],[36.46003,34.6378],[36.45299,34.59438],[36.41429,34.61175],[36.39846,34.55672],[36.3369,34.52629],[36.34745,34.5002],[36.4442,34.50165],[36.46179,34.46541],[36.55853,34.41609],[36.53039,34.3798],[36.56556,34.31881],[36.60778,34.31009],[36.58667,34.27667],[36.59195,34.2316],[36.62537,34.20251],[36.5128,34.09916],[36.50576,34.05982],[36.41078,34.05253],[36.28589,33.91981],[36.38263,33.86579],[36.3967,33.83365],[36.14517,33.85118],[36.06778,33.82927],[35.9341,33.6596],[36.05723,33.57904],[35.94465,33.52774],[35.94816,33.47886]]]]}},{type:"Feature",properties:{iso1A2:"AM",iso1A3:"ARM",iso1N3:"051",wikidata:"Q399",nameEn:"Armenia",groups:["145","142"],callingCodes:["374"]},geometry:{type:"MultiPolygon",coordinates:[[[[45.0133,41.29747],[45.05497,41.2464],[45.02932,41.2101],[45.05201,41.19211],[45.11811,41.19967],[45.1969,41.168],[45.19942,41.13299],[45.08028,41.10917],[45.06784,41.05379],[45.12923,41.06059],[45.1313,41.09369],[45.1634,41.08082],[45.16493,41.05068],[45.1994,41.04518],[45.25897,41.0027],[45.26162,41.0228],[45.28859,41.03757],[45.35677,40.99784],[45.39725,41.02603],[45.44083,41.01663],[45.40814,40.97904],[45.60584,40.87436],[45.55914,40.78366],[45.4206,40.7424],[45.35366,40.65979],[45.45484,40.57707],[45.42994,40.53804],[45.65098,40.37696],[45.95609,40.27846],[45.97944,40.181],[45.83779,39.98925],[45.78642,40.03218],[45.59806,40.0131],[45.60895,39.97733],[45.7833,39.9475],[45.82533,39.82925],[45.96543,39.78859],[46.18493,39.60533],[46.40286,39.63651],[46.42465,39.57534],[46.52117,39.58734],[46.57098,39.56694],[46.57721,39.54414],[46.51027,39.52373],[46.53051,39.47809],[46.4013,39.45405],[46.37795,39.42039],[46.43244,39.35181],[46.50093,39.33736],[46.56476,39.24942],[46.63481,39.23013],[46.58032,39.21204],[46.54141,39.15895],[46.52584,39.18912],[46.44022,39.19636],[46.54296,39.07078],[46.51805,38.94982],[46.53497,38.86548],[46.34059,38.92076],[46.20601,38.85262],[46.14785,38.84206],[46.06973,39.0744],[46.02303,39.09978],[45.99774,39.28931],[45.79225,39.3695],[45.83,39.46487],[45.80804,39.56716],[45.70547,39.60174],[45.46992,39.49888],[45.29606,39.57654],[45.30385,39.61373],[45.23535,39.61373],[45.21784,39.58074],[45.17464,39.58614],[45.18554,39.67846],[45.06604,39.79277],[44.92869,39.72157],[44.88354,39.74432],[44.75779,39.7148],[44.61845,39.8281],[44.46635,39.97733],[44.26973,40.04866],[44.1778,40.02845],[44.1057,40.03555],[43.92307,40.01787],[43.65688,40.11199],[43.65221,40.14889],[43.71136,40.16673],[43.59928,40.34019],[43.60862,40.43267],[43.54791,40.47413],[43.63664,40.54159],[43.7425,40.66805],[43.74872,40.7365],[43.67712,40.84846],[43.67712,40.93084],[43.58683,40.98961],[43.47319,41.02251],[43.44984,41.0988],[43.4717,41.12611],[43.67712,41.13398],[43.74717,41.1117],[43.84835,41.16329],[44.16591,41.19141],[44.18148,41.24644],[44.32139,41.2079],[44.34337,41.20312],[44.34417,41.2382],[44.46791,41.18204],[44.59322,41.1933],[44.61462,41.24018],[44.72814,41.20338],[44.82084,41.21513],[44.87887,41.20195],[44.89911,41.21366],[44.84358,41.23088],[44.81749,41.23488],[44.80053,41.25949],[44.81437,41.30371],[44.93493,41.25685],[45.0133,41.29747]],[[45.21324,40.9817],[45.23095,40.97828],[45.23487,41.00226],[45.20625,41.01484],[45.18382,41.0066],[45.19312,40.98998],[45.20518,40.99348],[45.21219,40.99001],[45.21324,40.9817]],[[45.00864,41.03411],[45.03792,41.03938],[45.04517,41.06653],[45.03406,41.07931],[45.00864,41.09407],[44.97169,41.09176],[44.95383,41.07553],[44.96031,41.06345],[44.9903,41.05657],[45.00864,41.03411]]],[[[45.50279,40.58424],[45.47927,40.65023],[45.51825,40.67382],[45.56071,40.64765],[45.50279,40.58424]]]]}},{type:"Feature",properties:{iso1A2:"LC",iso1A3:"LCA",iso1N3:"662",wikidata:"Q760",nameEn:"St. Lucia",aliases:["WL"],groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 758"]},geometry:{type:"MultiPolygon",coordinates:[[[[-60.5958,14.23076],[-60.70539,13.41452],[-61.43129,13.68336],[-61.26561,14.25664],[-60.5958,14.23076]]]]}},{type:"Feature",properties:{iso1A2:"AQ",iso1A3:"ATA",iso1N3:"010",wikidata:"Q51",nameEn:"Antarctica",level:"region",callingCodes:["672"]},geometry:{type:"MultiPolygon",coordinates:[[[[180,-60],[180,-90],[-180,-90],[-180,-60],[180,-60]]]]}},{type:"Feature",properties:{iso1A2:"LI",iso1A3:"LIE",iso1N3:"438",wikidata:"Q347",nameEn:"Liechtenstein",aliases:["FL"],groups:["155","150"],callingCodes:["423"]},geometry:{type:"MultiPolygon",coordinates:[[[[9.60717,47.06091],[9.55721,47.04762],[9.54041,47.06495],[9.47548,47.05257],[9.47139,47.06402],[9.51362,47.08505],[9.52089,47.10019],[9.51044,47.13727],[9.48774,47.17402],[9.4891,47.19346],[9.50318,47.22153],[9.52406,47.24959],[9.53116,47.27029],[9.56766,47.24281],[9.55176,47.22585],[9.56981,47.21926],[9.58264,47.20673],[9.56539,47.17124],[9.62623,47.14685],[9.63395,47.08443],[9.61216,47.07732],[9.60717,47.06091]]]]}},{type:"Feature",properties:{iso1A2:"AS",iso1A3:"ASM",iso1N3:"016",wikidata:"Q16641",nameEn:"American Samoa",country:"US",groups:["061","009"],roadSpeedUnit:"mph",callingCodes:["1 684"]},geometry:{type:"MultiPolygon",coordinates:[[[[-174.18596,-12.48057],[-174.17993,-10.13616],[-167.75195,-10.12005],[-167.73854,-14.92809],[-171.14262,-14.93704],[-171.14953,-12.4725],[-174.18596,-12.48057]]]]}},{type:"Feature",properties:{iso1A2:"LK",iso1A3:"LKA",iso1N3:"144",wikidata:"Q854",nameEn:"Sri Lanka",groups:["034","142"],driveSide:"left",callingCodes:["94"]},geometry:{type:"MultiPolygon",coordinates:[[[[76.25812,4.62435],[79.50447,8.91876],[79.42124,9.80115],[80.48418,10.20786],[85.15017,5.21497],[76.25812,4.62435]]]]}},{type:"Feature",properties:{iso1A2:"AU",iso1A3:"AUS",iso1N3:"036",wikidata:"Q408",nameEn:"Australia",groups:["053","009"],driveSide:"left",callingCodes:["61"]},geometry:{type:"MultiPolygon",coordinates:[[[[156.55918,-21.85134],[165.46901,-28.32101],[159.69067,-56.28945],[96.7091,-25.20343],[127.55165,-9.05052],[140.88922,-9.34945],[142.0601,-9.56571],[142.0953,-9.23534],[142.1462,-9.19923],[142.23304,-9.19253],[142.31447,-9.24611],[142.5723,-9.35994],[142.81927,-9.31709],[144.30183,-9.48146],[158.60851,-15.7108],[156.55918,-21.85134]]]]}},{type:"Feature",properties:{iso1A2:"LR",iso1A3:"LBR",iso1N3:"430",wikidata:"Q1014",nameEn:"Liberia",groups:["011","202","002"],callingCodes:["231"]},geometry:{type:"MultiPolygon",coordinates:[[[[-8.47114,7.55676],[-8.41935,7.51203],[-8.37458,7.25794],[-8.29249,7.1691],[-8.31736,6.82837],[-8.59456,6.50612],[-8.48652,6.43797],[-8.45666,6.49977],[-8.38453,6.35887],[-8.3298,6.36381],[-8.17557,6.28222],[-8.00642,6.31684],[-7.90692,6.27728],[-7.83478,6.20309],[-7.8497,6.08932],[-7.79747,6.07696],[-7.78254,5.99037],[-7.70294,5.90625],[-7.67309,5.94337],[-7.48155,5.80974],[-7.46165,5.84934],[-7.43677,5.84687],[-7.43926,5.74787],[-7.37209,5.61173],[-7.43428,5.42355],[-7.36463,5.32944],[-7.46165,5.26256],[-7.48901,5.14118],[-7.55369,5.08667],[-7.53876,4.94294],[-7.59349,4.8909],[-7.53259,4.35145],[-7.52774,3.7105],[-12.15048,6.15992],[-11.50429,6.92704],[-11.4027,6.97746],[-11.29417,7.21576],[-10.60422,7.7739],[-10.60492,8.04072],[-10.57523,8.04829],[-10.51554,8.1393],[-10.45023,8.15627],[-10.35227,8.15223],[-10.29839,8.21283],[-10.31635,8.28554],[-10.30084,8.30008],[-10.27575,8.48711],[-10.203,8.47991],[-10.14579,8.52665],[-10.05375,8.50697],[-10.05873,8.42578],[-9.77763,8.54633],[-9.47415,8.35195],[-9.50898,8.18455],[-9.41445,8.02448],[-9.44928,7.9284],[-9.35724,7.74111],[-9.37465,7.62032],[-9.48161,7.37122],[-9.41943,7.41809],[-9.305,7.42056],[-9.20798,7.38109],[-9.18311,7.30461],[-9.09107,7.1985],[-8.93435,7.2824],[-8.85724,7.26019],[-8.8448,7.35149],[-8.72789,7.51429],[-8.67814,7.69428],[-8.55874,7.70167],[-8.55874,7.62525],[-8.47114,7.55676]]]]}},{type:"Feature",properties:{iso1A2:"AX",iso1A3:"ALA",iso1N3:"248",wikidata:"Q5689",nameEn:"Åland Islands",country:"FI",groups:["EU","154","150"],callingCodes:["358 18","358 457"]},geometry:{type:"MultiPolygon",coordinates:[[[[19.08191,60.19152],[19.23413,60.61414],[20.96741,60.71528],[21.15143,60.54555],[21.08159,60.20167],[21.02509,60.12142],[21.35468,59.67511],[20.5104,59.15546],[19.08191,60.19152]]]]}},{type:"Feature",properties:{iso1A2:"LS",iso1A3:"LSO",iso1N3:"426",wikidata:"Q1013",nameEn:"Lesotho",groups:["018","202","002"],driveSide:"left",callingCodes:["266"]},geometry:{type:"MultiPolygon",coordinates:[[[[29.33204,-29.45598],[29.28545,-29.58456],[29.12553,-29.76266],[29.16548,-29.91706],[28.9338,-30.05072],[28.80222,-30.10579],[28.68627,-30.12885],[28.399,-30.1592],[28.2319,-30.28476],[28.12073,-30.68072],[27.74814,-30.60635],[27.69467,-30.55862],[27.67819,-30.53437],[27.6521,-30.51707],[27.62137,-30.50509],[27.56781,-30.44562],[27.56901,-30.42504],[27.45452,-30.32239],[27.38108,-30.33456],[27.36649,-30.27246],[27.37293,-30.19401],[27.40778,-30.14577],[27.32555,-30.14785],[27.29603,-30.05473],[27.22719,-30.00718],[27.09489,-29.72796],[27.01016,-29.65439],[27.33464,-29.48161],[27.4358,-29.33465],[27.47254,-29.31968],[27.45125,-29.29708],[27.48679,-29.29349],[27.54258,-29.25575],[27.5158,-29.2261],[27.55974,-29.18954],[27.75458,-28.89839],[27.8907,-28.91612],[27.88933,-28.88156],[27.9392,-28.84864],[27.98675,-28.8787],[28.02503,-28.85991],[28.1317,-28.7293],[28.2348,-28.69471],[28.30518,-28.69531],[28.40612,-28.6215],[28.65091,-28.57025],[28.68043,-28.58744],[29.40524,-29.21246],[29.44883,-29.3772],[29.33204,-29.45598]]]]}},{type:"Feature",properties:{iso1A2:"BA",iso1A3:"BIH",iso1N3:"070",wikidata:"Q225",nameEn:"Bosnia and Herzegovina",groups:["039","150"],callingCodes:["387"]},geometry:{type:"MultiPolygon",coordinates:[[[[17.84826,45.04489],[17.87148,45.04645],[17.93706,45.08016],[17.97336,45.12245],[17.97834,45.13831],[17.99479,45.14958],[18.01594,45.15163],[18.03121,45.12632],[18.1624,45.07654],[18.24387,45.13699],[18.32077,45.1021],[18.41896,45.11083],[18.47939,45.05871],[18.65723,45.07544],[18.78357,44.97741],[18.80661,44.93561],[18.76369,44.93707],[18.76347,44.90669],[18.8704,44.85097],[19.01994,44.85493],[19.18183,44.92055],[19.36722,44.88164],[19.32543,44.74058],[19.26388,44.65412],[19.16699,44.52197],[19.13369,44.52521],[19.12278,44.50132],[19.14837,44.45253],[19.14681,44.41463],[19.11785,44.40313],[19.10749,44.39421],[19.10704,44.38249],[19.10365,44.37795],[19.10298,44.36924],[19.11865,44.36712],[19.1083,44.3558],[19.11547,44.34218],[19.13556,44.338],[19.13332,44.31492],[19.16741,44.28648],[19.18328,44.28383],[19.20508,44.2917],[19.23306,44.26097],[19.26945,44.26957],[19.32464,44.27185],[19.34773,44.23244],[19.3588,44.18353],[19.40927,44.16722],[19.43905,44.13088],[19.47338,44.15034],[19.48386,44.14332],[19.47321,44.1193],[19.51167,44.08158],[19.55999,44.06894],[19.57467,44.04716],[19.61991,44.05254],[19.61836,44.01464],[19.56498,43.99922],[19.52515,43.95573],[19.38439,43.96611],[19.24363,44.01502],[19.23465,43.98764],[19.3986,43.79668],[19.5176,43.71403],[19.50455,43.58385],[19.42696,43.57987],[19.41941,43.54056],[19.36653,43.60921],[19.33426,43.58833],[19.2553,43.5938],[19.24774,43.53061],[19.22807,43.5264],[19.15685,43.53943],[19.13933,43.5282],[19.04934,43.50384],[19.01078,43.55806],[18.91379,43.50299],[18.95469,43.49367],[18.96053,43.45042],[19.01078,43.43854],[19.04071,43.397],[19.08673,43.31453],[19.08206,43.29668],[19.04233,43.30008],[19.00844,43.24988],[18.95001,43.29327],[18.95819,43.32899],[18.90911,43.36383],[18.83912,43.34795],[18.84794,43.33735],[18.85342,43.32426],[18.76538,43.29838],[18.6976,43.25243],[18.71747,43.2286],[18.66605,43.2056],[18.64735,43.14766],[18.66254,43.03928],[18.52232,43.01451],[18.49076,42.95553],[18.49661,42.89306],[18.4935,42.86433],[18.47633,42.85829],[18.45921,42.81682],[18.47324,42.74992],[18.56789,42.72074],[18.55221,42.69045],[18.54603,42.69171],[18.54841,42.68328],[18.57373,42.64429],[18.52232,42.62279],[18.55504,42.58409],[18.53751,42.57376],[18.49778,42.58409],[18.43735,42.55921],[18.36197,42.61423],[18.24318,42.6112],[17.88201,42.83668],[17.80854,42.9182],[17.7948,42.89556],[17.68151,42.92725],[17.6444,42.88641],[17.5392,42.92787],[17.70879,42.97223],[17.64268,43.08595],[17.46986,43.16559],[17.286,43.33065],[17.25579,43.40353],[17.29699,43.44542],[17.24411,43.49376],[17.15828,43.49376],[17.00585,43.58037],[16.80736,43.76011],[16.75316,43.77157],[16.70922,43.84887],[16.55472,43.95326],[16.50528,44.0244],[16.43629,44.02826],[16.43662,44.07523],[16.36864,44.08263],[16.18688,44.27012],[16.21346,44.35231],[16.12969,44.38275],[16.16814,44.40679],[16.10566,44.52586],[16.03012,44.55572],[16.00884,44.58605],[16.05828,44.61538],[15.89348,44.74964],[15.8255,44.71501],[15.72584,44.82334],[15.79472,44.8455],[15.76096,44.87045],[15.74723,44.96818],[15.78568,44.97401],[15.74585,45.0638],[15.78842,45.11519],[15.76371,45.16508],[15.83512,45.22459],[15.98412,45.23088],[16.12153,45.09616],[16.29036,44.99732],[16.35404,45.00241],[16.35863,45.03529],[16.3749,45.05206],[16.38219,45.05139],[16.38309,45.05955],[16.40023,45.1147],[16.4634,45.14522],[16.49155,45.21153],[16.52982,45.22713],[16.5501,45.2212],[16.56559,45.22307],[16.60194,45.23042],[16.64962,45.20714],[16.74845,45.20393],[16.78219,45.19002],[16.81137,45.18434],[16.83804,45.18951],[16.92405,45.27607],[16.9385,45.22742],[17.0415,45.20759],[17.18438,45.14764],[17.24325,45.146],[17.25131,45.14957],[17.26815,45.18444],[17.32092,45.16246],[17.33573,45.14521],[17.41229,45.13335],[17.4498,45.16119],[17.45615,45.12523],[17.47589,45.12656],[17.51469,45.10791],[17.59104,45.10816],[17.66571,45.13408],[17.84826,45.04489]]]]}},{type:"Feature",properties:{iso1A2:"LT",iso1A3:"LTU",iso1N3:"440",wikidata:"Q37",nameEn:"Lithuania",groups:["EU","154","150"],callingCodes:["370"]},geometry:{type:"MultiPolygon",coordinates:[[[[24.89005,56.46666],[25.05762,56.26742],[25.09325,56.1878],[25.23099,56.19147],[25.39751,56.15707],[25.53621,56.16663],[25.68588,56.14725],[25.69246,56.08892],[25.81773,56.05444],[25.85893,56.00188],[25.90047,56.0013],[26.03815,55.95884],[26.18509,55.86813],[26.39561,55.71156],[26.46661,55.70375],[26.58248,55.6754],[26.63231,55.67968],[26.63167,55.57887],[26.55094,55.5093],[26.5522,55.40277],[26.44937,55.34832],[26.5709,55.32572],[26.6714,55.33902],[26.80929,55.31642],[26.83266,55.30444],[26.835,55.28182],[26.73017,55.24226],[26.72983,55.21788],[26.68075,55.19787],[26.69243,55.16718],[26.54753,55.14181],[26.51481,55.16051],[26.46249,55.12814],[26.35121,55.1525],[26.30628,55.12536],[26.23202,55.10439],[26.26941,55.08032],[26.20397,54.99729],[26.13386,54.98924],[26.05907,54.94631],[25.99129,54.95705],[25.89462,54.93438],[25.74122,54.80108],[25.75977,54.57252],[25.68045,54.5321],[25.64813,54.48704],[25.62203,54.4656],[25.63371,54.42075],[25.5376,54.33158],[25.55425,54.31591],[25.68513,54.31727],[25.78553,54.23327],[25.78563,54.15747],[25.71084,54.16704],[25.64875,54.1259],[25.54724,54.14925],[25.51452,54.17799],[25.56823,54.25212],[25.509,54.30267],[25.35559,54.26544],[25.22705,54.26271],[25.19199,54.219],[25.0728,54.13419],[24.991,54.14241],[24.96894,54.17589],[24.77131,54.11091],[24.85311,54.02862],[24.74279,53.96663],[24.69185,53.96543],[24.69652,54.01901],[24.62275,54.00217],[24.44411,53.90076],[24.34128,53.90076],[24.19638,53.96405],[23.98837,53.92554],[23.95098,53.9613],[23.81309,53.94205],[23.80543,53.89558],[23.71726,53.93379],[23.61677,53.92691],[23.51284,53.95052],[23.48261,53.98855],[23.52702,54.04622],[23.49196,54.14764],[23.45223,54.17775],[23.42418,54.17911],[23.39525,54.21672],[23.3494,54.25155],[23.24656,54.25701],[23.15938,54.29894],[23.15526,54.31076],[23.13905,54.31567],[23.104,54.29794],[23.04323,54.31567],[23.05726,54.34565],[22.99649,54.35927],[23.00584,54.38514],[22.83756,54.40827],[22.79705,54.36264],[22.7253,54.41732],[22.70208,54.45312],[22.67788,54.532],[22.71293,54.56454],[22.68021,54.58486],[22.7522,54.63525],[22.74225,54.64339],[22.75467,54.6483],[22.73397,54.66604],[22.73631,54.72952],[22.87317,54.79492],[22.85083,54.88711],[22.76422,54.92521],[22.68723,54.9811],[22.65451,54.97037],[22.60075,55.01863],[22.58907,55.07085],[22.47688,55.04408],[22.31562,55.0655],[22.14267,55.05345],[22.11697,55.02131],[22.06087,55.02935],[22.02582,55.05078],[22.03984,55.07888],[21.99543,55.08691],[21.96505,55.07353],[21.85521,55.09493],[21.64954,55.1791],[21.55605,55.20311],[21.51095,55.18507],[21.46766,55.21115],[21.38446,55.29348],[21.35465,55.28427],[21.26425,55.24456],[20.95181,55.27994],[20.60454,55.40986],[20.68447,56.04073],[21.15016,56.07818],[21.24644,56.16917],[21.49736,56.29106],[21.57888,56.31406],[21.74558,56.33181],[22.00548,56.41508],[22.09728,56.42851],[22.3361,56.4016],[22.56441,56.39305],[22.69354,56.36284],[22.83048,56.367],[22.96988,56.41213],[23.09531,56.30511],[23.17312,56.36795],[23.31606,56.3827],[23.40486,56.37689],[23.49803,56.34307],[23.75726,56.37282],[24.02657,56.3231],[24.13139,56.24881],[24.32334,56.30226],[24.42746,56.26522],[24.58143,56.29125],[24.57353,56.31525],[24.70022,56.40483],[24.83686,56.41565],[24.89005,56.46666]]]]}},{type:"Feature",properties:{iso1A2:"BD",iso1A3:"BGD",iso1N3:"050",wikidata:"Q902",nameEn:"Bangladesh",groups:["034","142"],driveSide:"left",callingCodes:["880"]},geometry:{type:"MultiPolygon",coordinates:[[[[89.15869,26.13708],[89.35953,26.0077],[89.53515,26.00382],[89.57101,25.9682],[89.63968,26.22595],[89.70201,26.15138],[89.73581,26.15818],[89.77865,26.08387],[89.77728,26.04254],[89.86592,25.93115],[89.80585,25.82489],[89.84388,25.70042],[89.86129,25.61714],[89.81208,25.37244],[89.84086,25.31854],[89.83371,25.29548],[89.87629,25.28337],[89.90478,25.31038],[90.1155,25.22686],[90.40034,25.1534],[90.65042,25.17788],[90.87427,25.15799],[91.25517,25.20677],[91.63648,25.12846],[92.0316,25.1834],[92.33957,25.07593],[92.39147,25.01471],[92.49887,24.88796],[92.38626,24.86055],[92.25854,24.9191],[92.15796,24.54435],[92.11662,24.38997],[91.96603,24.3799],[91.89258,24.14674],[91.82596,24.22345],[91.76004,24.23848],[91.73257,24.14703],[91.65292,24.22095],[91.63782,24.1132],[91.55542,24.08687],[91.37414,24.10693],[91.35741,23.99072],[91.29587,24.0041],[91.22308,23.89616],[91.25192,23.83463],[91.15579,23.6599],[91.28293,23.37538],[91.36453,23.06612],[91.40848,23.07117],[91.4035,23.27522],[91.46615,23.2328],[91.54993,23.01051],[91.61571,22.93929],[91.7324,23.00043],[91.81634,23.08001],[91.76417,23.26619],[91.84789,23.42235],[91.95642,23.47361],[91.95093,23.73284],[92.04706,23.64229],[92.15417,23.73409],[92.26541,23.70392],[92.38214,23.28705],[92.37665,22.9435],[92.5181,22.71441],[92.60029,22.1522],[92.56616,22.13554],[92.60949,21.97638],[92.62187,21.87037],[92.59775,21.6092],[92.68152,21.28454],[92.60187,21.24615],[92.55105,21.3856],[92.43158,21.37025],[92.37939,21.47764],[92.20087,21.337],[92.17752,21.17445],[92.26071,21.05697],[92.37665,20.72172],[92.28464,20.63179],[92.31348,20.57137],[92.4302,20.5688],[92.39837,20.38919],[89.13606,21.42955],[89.13927,21.60785],[89.03553,21.77397],[89.07114,22.15335],[88.9367,22.58527],[88.94614,22.66941],[88.9151,22.75228],[88.96713,22.83346],[88.87063,22.95235],[88.88327,23.03885],[88.86377,23.08759],[88.99148,23.21134],[88.71133,23.2492],[88.79254,23.46028],[88.79351,23.50535],[88.74841,23.47361],[88.56507,23.64044],[88.58087,23.87105],[88.66189,23.87607],[88.73743,23.91751],[88.6976,24.14703],[88.74841,24.1959],[88.68801,24.31464],[88.50934,24.32474],[88.12296,24.51301],[88.08786,24.63232],[88.00683,24.66477],[88.15515,24.85806],[88.14004,24.93529],[88.21832,24.96642],[88.27325,24.88796],[88.33917,24.86803],[88.46277,25.07468],[88.44766,25.20149],[88.94067,25.18534],[89.00463,25.26583],[89.01105,25.30303],[88.85278,25.34679],[88.81296,25.51546],[88.677,25.46959],[88.4559,25.59227],[88.45103,25.66245],[88.242,25.80811],[88.13138,25.78773],[88.08804,25.91334],[88.16581,26.0238],[88.1844,26.14417],[88.34757,26.22216],[88.35153,26.29123],[88.51649,26.35923],[88.48749,26.45855],[88.36938,26.48683],[88.35153,26.45241],[88.33093,26.48929],[88.41196,26.63837],[88.4298,26.54489],[88.62144,26.46783],[88.69485,26.38353],[88.67837,26.26291],[88.78961,26.31093],[88.85004,26.23211],[89.05328,26.2469],[88.91321,26.37984],[88.92357,26.40711],[88.95612,26.4564],[89.08899,26.38845],[89.15869,26.13708]]]]}},{type:"Feature",properties:{iso1A2:"LU",iso1A3:"LUX",iso1N3:"442",wikidata:"Q32",nameEn:"Luxembourg",groups:["EU","155","150"],callingCodes:["352"]},geometry:{type:"MultiPolygon",coordinates:[[[[6.1379,50.12964],[6.12055,50.09171],[6.11274,50.05916],[6.13458,50.04141],[6.13044,50.02929],[6.14666,50.02207],[6.13794,50.01466],[6.13273,50.02019],[6.1295,50.01849],[6.13806,50.01056],[6.14948,50.00908],[6.14147,49.99563],[6.1701,49.98518],[6.16466,49.97086],[6.17872,49.9537],[6.18554,49.95622],[6.18045,49.96611],[6.19089,49.96991],[6.19856,49.95053],[6.22094,49.94955],[6.22608,49.929],[6.21882,49.92403],[6.22926,49.92096],[6.23496,49.89972],[6.26146,49.88203],[6.28874,49.87592],[6.29692,49.86685],[6.30963,49.87021],[6.32303,49.85133],[6.32098,49.83728],[6.33585,49.83785],[6.34267,49.84974],[6.36576,49.85032],[6.40022,49.82029],[6.42521,49.81591],[6.42905,49.81091],[6.44131,49.81443],[6.45425,49.81164],[6.47111,49.82263],[6.48718,49.81267],[6.50647,49.80916],[6.51215,49.80124],[6.52121,49.81338],[6.53122,49.80666],[6.52169,49.79787],[6.50534,49.78952],[6.51669,49.78336],[6.51056,49.77515],[6.51828,49.76855],[6.51646,49.75961],[6.50174,49.75292],[6.50193,49.73291],[6.51805,49.72425],[6.51397,49.72058],[6.50261,49.72718],[6.49535,49.72645],[6.49694,49.72205],[6.5042,49.71808],[6.50647,49.71353],[6.49785,49.71118],[6.48014,49.69767],[6.46048,49.69092],[6.44654,49.67799],[6.42937,49.66857],[6.42726,49.66078],[6.43768,49.66021],[6.4413,49.65722],[6.41861,49.61723],[6.39822,49.60081],[6.385,49.59946],[6.37464,49.58886],[6.38342,49.5799],[6.38024,49.57593],[6.36676,49.57813],[6.35825,49.57053],[6.38228,49.55855],[6.38072,49.55171],[6.35666,49.52931],[6.36788,49.50377],[6.36907,49.48931],[6.36778,49.46937],[6.3687,49.4593],[6.28818,49.48465],[6.27875,49.503],[6.25029,49.50609],[6.2409,49.51408],[6.19543,49.50536],[6.17386,49.50934],[6.15366,49.50226],[6.16115,49.49297],[6.14321,49.48796],[6.12814,49.49365],[6.12346,49.4735],[6.10325,49.4707],[6.09845,49.46351],[6.10072,49.45268],[6.08373,49.45594],[6.07887,49.46399],[6.05553,49.46663],[6.04176,49.44801],[6.02743,49.44845],[6.02648,49.45451],[5.97693,49.45513],[5.96876,49.49053],[5.94224,49.49608],[5.94128,49.50034],[5.86571,49.50015],[5.83389,49.52152],[5.83467,49.52717],[5.84466,49.53027],[5.83648,49.5425],[5.81664,49.53775],[5.80871,49.5425],[5.81838,49.54777],[5.84143,49.5533],[5.84692,49.55663],[5.8424,49.56082],[5.87256,49.57539],[5.86986,49.58756],[5.84971,49.58674],[5.84826,49.5969],[5.8762,49.60898],[5.87609,49.62047],[5.88393,49.62802],[5.88552,49.63507],[5.90599,49.63853],[5.90164,49.6511],[5.9069,49.66377],[5.86175,49.67862],[5.86527,49.69291],[5.88677,49.70951],[5.86503,49.72739],[5.84193,49.72161],[5.82562,49.72395],[5.83149,49.74729],[5.82245,49.75048],[5.78871,49.7962],[5.75409,49.79239],[5.74953,49.81428],[5.74364,49.82058],[5.74844,49.82435],[5.7404,49.83452],[5.74076,49.83823],[5.74975,49.83933],[5.74953,49.84709],[5.75884,49.84811],[5.74567,49.85368],[5.75861,49.85631],[5.75269,49.8711],[5.78415,49.87922],[5.73621,49.89796],[5.77314,49.93646],[5.77291,49.96056],[5.80833,49.96451],[5.81163,49.97142],[5.83467,49.97823],[5.83968,49.9892],[5.82331,49.99662],[5.81866,50.01286],[5.8551,50.02683],[5.86904,50.04614],[5.85474,50.06342],[5.8857,50.07824],[5.89488,50.11476],[5.95929,50.13295],[5.96453,50.17259],[6.02488,50.18283],[6.03093,50.16362],[6.06406,50.15344],[6.08577,50.17246],[6.12028,50.16374],[6.1137,50.13668],[6.1379,50.12964]]]]}},{type:"Feature",properties:{iso1A2:"BF",iso1A3:"BFA",iso1N3:"854",wikidata:"Q965",nameEn:"Burkina Faso",groups:["011","202","002"],callingCodes:["226"]},geometry:{type:"MultiPolygon",coordinates:[[[[0.23859,15.00135],[0.16936,14.51654],[0.38051,14.05575],[0.61924,13.68491],[0.77377,13.6866],[0.77637,13.64442],[0.99514,13.5668],[1.02813,13.46635],[1.20088,13.38951],[1.24429,13.39373],[1.28509,13.35488],[1.24516,13.33968],[1.21217,13.37853],[1.18873,13.31771],[0.99253,13.37515],[0.99167,13.10727],[2.26349,12.41915],[2.05785,12.35539],[2.39723,11.89473],[2.29983,11.68254],[2.00988,11.42227],[1.42823,11.46822],[1.03409,11.04719],[0.9813,11.08876],[0.91245,10.99597],[0.66104,10.99964],[0.4958,10.93269],[0.50521,10.98035],[0.48852,10.98561],[0.50388,11.01011],[-0.13493,11.14075],[-0.27374,11.17157],[-0.28566,11.12713],[-0.35955,11.07801],[-0.38219,11.12596],[-0.42391,11.11661],[-0.44298,11.04292],[-0.61937,10.91305],[-0.67143,10.99811],[-2.83373,11.0067],[-2.94232,10.64281],[-2.83108,10.40252],[-2.74174,9.83172],[-2.76534,9.56589],[-2.68802,9.49343],[-2.76494,9.40778],[-2.93012,9.57403],[-3.00765,9.74019],[-3.16609,9.85147],[-3.19306,9.93781],[-3.27228,9.84981],[-3.31779,9.91125],[-3.69703,9.94279],[-4.25999,9.76012],[-4.31392,9.60062],[-4.6426,9.70696],[-4.96621,9.89132],[-4.96453,9.99923],[-5.12465,10.29788],[-5.39602,10.2929],[-5.51058,10.43177],[-5.46643,10.56074],[-5.47083,10.75329],[-5.41579,10.84628],[-5.49284,11.07538],[-5.32994,11.13371],[-5.32553,11.21578],[-5.25949,11.24816],[-5.25509,11.36905],[-5.20665,11.43811],[-5.22867,11.60421],[-5.29251,11.61715],[-5.26389,11.75728],[-5.40258,11.8327],[-5.26389,11.84778],[-5.07897,11.97918],[-4.72893,12.01579],[-4.70692,12.06746],[-4.62987,12.06531],[-4.62546,12.13204],[-4.54841,12.1385],[-4.57703,12.19875],[-4.41412,12.31922],[-4.47356,12.71252],[-4.238,12.71467],[-4.21819,12.95722],[-4.34477,13.12927],[-3.96501,13.49778],[-3.90558,13.44375],[-3.96282,13.38164],[-3.7911,13.36665],[-3.54454,13.1781],[-3.4313,13.1588],[-3.43507,13.27272],[-3.23599,13.29035],[-3.28396,13.5422],[-3.26407,13.70699],[-2.88189,13.64921],[-2.90831,13.81174],[-2.84667,14.05532],[-2.66175,14.14713],[-2.47587,14.29671],[-2.10223,14.14878],[-1.9992,14.19011],[-1.97945,14.47709],[-1.68083,14.50023],[-1.32166,14.72774],[-1.05875,14.7921],[-0.72004,15.08655],[-0.24673,15.07805],[0.06588,14.96961],[0.23859,15.00135]]]]}},{type:"Feature",properties:{iso1A2:"LV",iso1A3:"LVA",iso1N3:"428",wikidata:"Q211",nameEn:"Latvia",groups:["EU","154","150"],callingCodes:["371"]},geometry:{type:"MultiPolygon",coordinates:[[[[27.34698,57.52242],[27.56832,57.53728],[27.52453,57.42826],[27.86101,57.29402],[27.66511,56.83921],[27.86101,56.88204],[28.04768,56.59004],[28.13526,56.57989],[28.10069,56.524],[28.19057,56.44637],[28.16599,56.37806],[28.23716,56.27588],[28.15217,56.16964],[27.97865,56.11849],[27.63065,55.89687],[27.61683,55.78558],[27.3541,55.8089],[27.27804,55.78299],[27.1559,55.85032],[26.97153,55.8102],[26.87448,55.7172],[26.76872,55.67658],[26.71802,55.70645],[26.64888,55.70515],[26.63231,55.67968],[26.58248,55.6754],[26.46661,55.70375],[26.39561,55.71156],[26.18509,55.86813],[26.03815,55.95884],[25.90047,56.0013],[25.85893,56.00188],[25.81773,56.05444],[25.69246,56.08892],[25.68588,56.14725],[25.53621,56.16663],[25.39751,56.15707],[25.23099,56.19147],[25.09325,56.1878],[25.05762,56.26742],[24.89005,56.46666],[24.83686,56.41565],[24.70022,56.40483],[24.57353,56.31525],[24.58143,56.29125],[24.42746,56.26522],[24.32334,56.30226],[24.13139,56.24881],[24.02657,56.3231],[23.75726,56.37282],[23.49803,56.34307],[23.40486,56.37689],[23.31606,56.3827],[23.17312,56.36795],[23.09531,56.30511],[22.96988,56.41213],[22.83048,56.367],[22.69354,56.36284],[22.56441,56.39305],[22.3361,56.4016],[22.09728,56.42851],[22.00548,56.41508],[21.74558,56.33181],[21.57888,56.31406],[21.49736,56.29106],[21.24644,56.16917],[21.15016,56.07818],[20.68447,56.04073],[19.64795,57.06466],[19.84909,57.57876],[22.80496,57.87798],[23.20055,57.56697],[24.26221,57.91787],[24.3579,57.87471],[25.19484,58.0831],[25.28237,57.98539],[25.29581,58.08288],[25.73499,57.90193],[26.05949,57.84744],[26.0324,57.79037],[26.02456,57.78342],[26.027,57.78158],[26.0266,57.77441],[26.02069,57.77169],[26.02415,57.76865],[26.03332,57.7718],[26.0543,57.76105],[26.08098,57.76619],[26.2029,57.7206],[26.1866,57.6849],[26.29253,57.59244],[26.46527,57.56885],[26.54675,57.51813],[26.90364,57.62823],[27.34698,57.52242]]]]}},{type:"Feature",properties:{iso1A2:"BH",iso1A3:"BHR",iso1N3:"048",wikidata:"Q398",nameEn:"Bahrain",groups:["145","142"],callingCodes:["973"]},geometry:{type:"MultiPolygon",coordinates:[[[[50.93865,26.30758],[50.81266,25.88946],[50.86149,25.6965],[50.7801,25.595],[50.80824,25.54641],[50.57069,25.57887],[50.302,25.87592],[50.26923,26.08243],[50.38162,26.53976],[50.71771,26.73086],[50.93865,26.30758]]]]}},{type:"Feature",properties:{iso1A2:"LY",iso1A3:"LBY",iso1N3:"434",wikidata:"Q1016",nameEn:"Libya",groups:["015","002"],callingCodes:["218"]},geometry:{type:"MultiPolygon",coordinates:[[[[22.5213,33.45682],[25.63787,31.9359],[25.14001,31.67534],[25.06041,31.57937],[24.83101,31.31921],[25.01077,30.73861],[24.71117,30.17441],[24.99968,29.24574],[24.99885,21.99535],[24.99794,19.99661],[23.99715,20.00038],[23.99539,19.49944],[15.99566,23.49639],[14.99751,23.00539],[14.22918,22.61719],[13.5631,23.16574],[11.96886,23.51735],[11.62498,24.26669],[11.41061,24.21456],[10.85323,24.5595],[10.33159,24.5465],[10.02432,24.98124],[10.03146,25.35635],[9.38834,26.19288],[9.51696,26.39148],[9.89569,26.57696],[9.78136,29.40961],[9.3876,30.16738],[9.55544,30.23971],[9.76848,30.34366],[9.88152,30.34074],[10.29516,30.90337],[10.12239,31.42098],[10.31364,31.72648],[10.48497,31.72956],[10.62788,31.96629],[10.7315,31.97235],[11.04234,32.2145],[11.53898,32.4138],[11.57828,32.48013],[11.46037,32.6307],[11.51549,33.09826],[11.55852,33.1409],[11.56255,33.16754],[11.66543,33.34642],[22.5213,33.45682]]]]}},{type:"Feature",properties:{iso1A2:"BJ",iso1A3:"BEN",iso1N3:"204",wikidata:"Q962",nameEn:"Benin",aliases:["DY"],groups:["011","202","002"],callingCodes:["229"]},geometry:{type:"MultiPolygon",coordinates:[[[[3.59375,11.70269],[3.49175,11.29765],[3.71505,11.13015],[3.84243,10.59316],[3.78292,10.40538],[3.6844,10.46351],[3.57275,10.27185],[3.66908,10.18136],[3.54429,9.87739],[3.35383,9.83641],[3.32099,9.78032],[3.34726,9.70696],[3.25093,9.61632],[3.13928,9.47167],[3.14147,9.28375],[3.08017,9.10006],[2.77907,9.06924],[2.67523,7.87825],[2.73095,7.7755],[2.73405,7.5423],[2.78668,7.5116],[2.79442,7.43486],[2.74489,7.42565],[2.76965,7.13543],[2.71702,6.95722],[2.74024,6.92802],[2.73405,6.78508],[2.78823,6.76356],[2.78204,6.70514],[2.7325,6.64057],[2.74334,6.57291],[2.70464,6.50831],[2.70566,6.38038],[2.74181,6.13349],[1.67336,6.02702],[1.62913,6.24075],[1.79826,6.28221],[1.76906,6.43189],[1.58105,6.68619],[1.61812,6.74843],[1.55877,6.99737],[1.64249,6.99562],[1.61838,9.0527],[1.5649,9.16941],[1.41746,9.3226],[1.33675,9.54765],[1.36624,9.5951],[1.35507,9.99525],[0.77666,10.37665],[0.80358,10.71459],[0.8804,10.803],[0.91245,10.99597],[0.9813,11.08876],[1.03409,11.04719],[1.42823,11.46822],[2.00988,11.42227],[2.29983,11.68254],[2.39723,11.89473],[2.45824,11.98672],[2.39657,12.10952],[2.37783,12.24804],[2.6593,12.30631],[2.83978,12.40585],[3.25352,12.01467],[3.31613,11.88495],[3.48187,11.86092],[3.59375,11.70269]]]]}},{type:"Feature",properties:{iso1A2:"MA",iso1A3:"MAR",iso1N3:"504",wikidata:"Q1028",nameEn:"Morocco",groups:["015","002"],callingCodes:["212"]},geometry:{type:"MultiPolygon",coordinates:[[[[-2.27707,35.35051],[-2.21248,35.08532],[-2.21445,35.04378],[-2.04734,34.93218],[-1.97833,34.93218],[-1.97469,34.886],[-1.73707,34.74226],[-1.84569,34.61907],[-1.69788,34.48056],[-1.78042,34.39018],[-1.64666,34.10405],[-1.73494,33.71721],[-1.59508,33.59929],[-1.67067,33.27084],[-1.46249,33.0499],[-1.54244,32.95499],[-1.37794,32.73628],[-0.9912,32.52467],[-1.24998,32.32993],[-1.24453,32.1917],[-1.15735,32.12096],[-1.22829,32.07832],[-2.46166,32.16603],[-2.93873,32.06557],[-2.82784,31.79459],[-3.66314,31.6339],[-3.66386,31.39202],[-3.77647,31.31912],[-3.77103,31.14984],[-3.54944,31.0503],[-3.65418,30.85566],[-3.64735,30.67539],[-4.31774,30.53229],[-4.6058,30.28343],[-5.21671,29.95253],[-5.58831,29.48103],[-5.72121,29.52322],[-5.75616,29.61407],[-6.69965,29.51623],[-6.78351,29.44634],[-6.95824,29.50924],[-7.61585,29.36252],[-8.6715,28.71194],[-8.66879,27.6666],[-8.77527,27.66663],[-8.71787,26.9898],[-9.08698,26.98639],[-9.56957,26.90042],[-9.81998,26.71379],[-10.68417,26.90984],[-11.35695,26.8505],[-11.23622,26.72023],[-11.38635,26.611],[-11.62052,26.05229],[-12.06001,26.04442],[-12.12281,25.13682],[-12.92147,24.39502],[-13.00628,24.01923],[-13.75627,23.77231],[-14.10361,22.75501],[-14.1291,22.41636],[-14.48112,22.00886],[-14.47329,21.63839],[-14.78487,21.36587],[-16.44269,21.39745],[-16.9978,21.36239],[-17.02707,21.34022],[-17.21511,21.34226],[-17.27295,21.93519],[-14.43883,27.02969],[-7.27694,35.93599],[-5.64962,35.93752],[-5.10878,36.05227],[-2.85819,35.63219],[-2.27707,35.35051]],[[-2.92224,35.3401],[-2.96038,35.31609],[-2.96648,35.30475],[-2.96978,35.29459],[-2.97035,35.28852],[-2.96507,35.28801],[-2.96826,35.28296],[-2.96516,35.27967],[-2.95431,35.2728],[-2.95065,35.26576],[-2.93893,35.26737],[-2.92674,35.27313],[-2.92181,35.28599],[-2.92224,35.3401]],[[-3.90602,35.21494],[-3.88926,35.20841],[-3.88617,35.21406],[-3.90288,35.22024],[-3.90602,35.21494]],[[-4.30191,35.17419],[-4.30112,35.17058],[-4.29436,35.17149],[-4.30191,35.17419]],[[-2.41312,35.17111],[-2.41265,35.1877],[-2.44896,35.18777],[-2.44887,35.17075],[-2.41312,35.17111]],[[-5.38491,35.92591],[-5.37338,35.88417],[-5.35844,35.87375],[-5.34379,35.8711],[-5.27056,35.88794],[-5.27635,35.91222],[-5.38491,35.92591]]]]}},{type:"Feature",properties:{iso1A2:"BM",iso1A3:"BMU",iso1N3:"060",wikidata:"Q23635",nameEn:"Bermuda",country:"GB",groups:["021","003","019"],driveSide:"left",callingCodes:["1 441"]},geometry:{type:"MultiPolygon",coordinates:[[[[-63.20987,32.6953],[-65.63955,31.43417],[-65.31453,32.68437],[-63.20987,32.6953]]]]}},{type:"Feature",properties:{iso1A2:"MC",iso1A3:"MCO",iso1N3:"492",wikidata:"Q235",nameEn:"Monaco",groups:["155","150"],callingCodes:["377"]},geometry:{type:"MultiPolygon",coordinates:[[[[7.47823,43.73341],[7.42422,43.72209],[7.40903,43.7296],[7.41113,43.73156],[7.41291,43.73168],[7.41298,43.73311],[7.41233,43.73439],[7.42062,43.73977],[7.42299,43.74176],[7.42443,43.74087],[7.42809,43.74396],[7.43013,43.74895],[7.43624,43.75014],[7.43708,43.75197],[7.4389,43.75151],[7.4379,43.74963],[7.47823,43.73341]]]]}},{type:"Feature",properties:{iso1A2:"BO",iso1A3:"BOL",iso1N3:"068",wikidata:"Q750",nameEn:"Bolivia",groups:["005","419","019"],callingCodes:["591"]},geometry:{type:"MultiPolygon",coordinates:[[[[-63.90248,-12.52544],[-63.76259,-12.42952],[-61.81151,-13.49564],[-61.05527,-13.50054],[-60.48053,-13.77981],[-60.46037,-14.22496],[-60.27887,-14.63021],[-60.23968,-15.09515],[-60.58224,-15.09887],[-60.23797,-15.50267],[-60.16069,-16.26479],[-58.41506,-16.32636],[-58.32431,-16.25861],[-58.30918,-16.3699],[-58.5058,-16.80958],[-58.32935,-17.28195],[-57.99661,-17.5273],[-57.90082,-17.44555],[-57.73949,-17.56095],[-57.69877,-17.8431],[-57.48237,-18.24219],[-57.56807,-18.25655],[-57.76764,-18.90087],[-57.71995,-18.89573],[-57.71995,-18.97546],[-57.69134,-19.00544],[-57.71113,-19.03161],[-57.78463,-19.03259],[-58.14215,-19.76276],[-57.8496,-19.98346],[-58.16225,-20.16193],[-58.23216,-19.80058],[-59.06965,-19.29148],[-60.00638,-19.2981],[-61.73723,-19.63958],[-61.93912,-20.10053],[-62.26883,-20.55311],[-62.2757,-21.06657],[-62.64455,-22.25091],[-62.8078,-22.12534],[-62.81124,-21.9987],[-63.66482,-21.99918],[-63.68113,-22.0544],[-63.70963,-21.99934],[-63.93287,-21.99934],[-64.22918,-22.55807],[-64.31489,-22.88824],[-64.35108,-22.73282],[-64.4176,-22.67692],[-64.58888,-22.25035],[-64.67174,-22.18957],[-64.90014,-22.12136],[-64.99524,-22.08255],[-65.47435,-22.08908],[-65.57743,-22.07675],[-65.58694,-22.09794],[-65.61166,-22.09504],[-65.7467,-22.10105],[-65.9261,-21.93335],[-66.04832,-21.9187],[-66.03836,-21.84829],[-66.24077,-21.77837],[-66.29714,-22.08741],[-66.7298,-22.23644],[-67.18382,-22.81525],[-67.54284,-22.89771],[-67.85114,-22.87076],[-68.18816,-21.28614],[-68.40403,-20.94562],[-68.53957,-20.91542],[-68.55383,-20.7355],[-68.44023,-20.62701],[-68.7276,-20.46178],[-68.74273,-20.08817],[-68.57132,-20.03134],[-68.54611,-19.84651],[-68.66761,-19.72118],[-68.41218,-19.40499],[-68.61989,-19.27584],[-68.80602,-19.08355],[-68.87082,-19.06003],[-68.94987,-18.93302],[-69.07432,-18.28259],[-69.14807,-18.16893],[-69.07496,-18.03715],[-69.28671,-17.94844],[-69.34126,-17.72753],[-69.46623,-17.60518],[-69.46897,-17.4988],[-69.46863,-17.37466],[-69.62883,-17.28142],[-69.16896,-16.72233],[-69.00853,-16.66769],[-69.04027,-16.57214],[-68.98358,-16.42165],[-68.79464,-16.33272],[-68.96238,-16.194],[-69.09986,-16.22693],[-69.20291,-16.16668],[-69.40336,-15.61358],[-69.14856,-15.23478],[-69.36254,-14.94634],[-68.88135,-14.18639],[-69.05265,-13.68546],[-68.8864,-13.40792],[-68.85615,-12.87769],[-68.65044,-12.50689],[-68.98115,-11.8979],[-69.57156,-10.94555],[-69.47839,-10.95254],[-69.42792,-10.93451],[-68.74802,-11.00891],[-68.75265,-11.02383],[-68.75179,-11.03688],[-68.7651,-11.0496],[-68.71533,-11.14749],[-67.17784,-10.34016],[-65.68343,-9.75323],[-65.56244,-9.84266],[-65.40615,-9.63894],[-65.29019,-9.86253],[-65.37923,-10.35141],[-65.35402,-10.78685],[-65.28141,-10.86289],[-65.30027,-11.48749],[-64.99778,-11.98604],[-64.30708,-12.46398],[-64.22539,-12.45267],[-63.90248,-12.52544]]]]}},{type:"Feature",properties:{iso1A2:"MD",iso1A3:"MDA",iso1N3:"498",wikidata:"Q217",nameEn:"Moldova",groups:["151","150"],callingCodes:["373"]},geometry:{type:"MultiPolygon",coordinates:[[[[27.74422,48.45926],[27.79225,48.44244],[27.81902,48.41874],[27.87533,48.4037],[27.88391,48.36699],[27.95883,48.32368],[28.04527,48.32661],[28.09873,48.3124],[28.07504,48.23494],[28.17666,48.25963],[28.19314,48.20749],[28.2856,48.23202],[28.32508,48.23384],[28.35519,48.24957],[28.36996,48.20543],[28.34912,48.1787],[28.30586,48.1597],[28.30609,48.14018],[28.34009,48.13147],[28.38712,48.17567],[28.43701,48.15832],[28.42454,48.12047],[28.48428,48.0737],[28.53921,48.17453],[28.69896,48.13106],[28.85232,48.12506],[28.8414,48.03392],[28.9306,47.96255],[29.1723,47.99013],[29.19839,47.89261],[29.27804,47.88893],[29.20663,47.80367],[29.27255,47.79953],[29.22242,47.73607],[29.22414,47.60012],[29.11743,47.55001],[29.18603,47.43387],[29.3261,47.44664],[29.39889,47.30179],[29.47854,47.30366],[29.48678,47.36043],[29.5733,47.36508],[29.59665,47.25521],[29.54996,47.24962],[29.57696,47.13581],[29.49732,47.12878],[29.53044,47.07851],[29.61038,47.09932],[29.62137,47.05069],[29.57056,46.94766],[29.72986,46.92234],[29.75458,46.8604],[29.87405,46.88199],[29.98814,46.82358],[29.94522,46.80055],[29.9743,46.75325],[29.94409,46.56002],[29.88916,46.54302],[30.02511,46.45132],[30.16794,46.40967],[30.09103,46.38694],[29.94114,46.40114],[29.88329,46.35851],[29.74496,46.45605],[29.66359,46.4215],[29.6763,46.36041],[29.5939,46.35472],[29.49914,46.45889],[29.35357,46.49505],[29.24886,46.37912],[29.23547,46.55435],[29.02409,46.49582],[29.01241,46.46177],[28.9306,46.45699],[29.004,46.31495],[28.98478,46.31803],[28.94953,46.25852],[29.06656,46.19716],[28.94643,46.09176],[29.00613,46.04962],[28.98004,46.00385],[28.74383,45.96664],[28.78503,45.83475],[28.69852,45.81753],[28.70401,45.78019],[28.52823,45.73803],[28.47879,45.66994],[28.51587,45.6613],[28.54196,45.58062],[28.49252,45.56716],[28.51449,45.49982],[28.43072,45.48538],[28.41836,45.51715],[28.30201,45.54744],[28.21139,45.46895],[28.18741,45.47358],[28.08927,45.6051],[28.16568,45.6421],[28.13111,45.92819],[28.08612,46.01105],[28.13684,46.18099],[28.10937,46.22852],[28.19864,46.31869],[28.18902,46.35283],[28.25769,46.43334],[28.22281,46.50481],[28.24808,46.64305],[28.12173,46.82283],[28.09095,46.97621],[27.81892,47.1381],[27.73172,47.29248],[27.68706,47.28962],[27.60263,47.32507],[27.55731,47.46637],[27.47942,47.48113],[27.3979,47.59473],[27.32202,47.64009],[27.25519,47.71366],[27.29069,47.73722],[27.1618,47.92391],[27.15622,47.98538],[27.02985,48.09083],[27.04118,48.12522],[26.96119,48.13003],[26.98042,48.15752],[26.94265,48.1969],[26.87708,48.19919],[26.81161,48.25049],[26.62823,48.25804],[26.6839,48.35828],[26.79239,48.29071],[26.82809,48.31629],[26.71274,48.40388],[26.85556,48.41095],[26.93384,48.36558],[27.03821,48.37653],[27.0231,48.42485],[27.08078,48.43214],[27.13434,48.37288],[27.27855,48.37534],[27.32159,48.4434],[27.37604,48.44398],[27.37741,48.41026],[27.44333,48.41209],[27.46942,48.454],[27.5889,48.49224],[27.59027,48.46311],[27.6658,48.44034],[27.74422,48.45926]]]]}},{type:"Feature",properties:{iso1A2:"BR",iso1A3:"BRA",iso1N3:"076",wikidata:"Q155",nameEn:"Brazil",groups:["005","419","019"],callingCodes:["55"]},geometry:{type:"MultiPolygon",coordinates:[[[[-59.69361,4.34069],[-59.73353,4.20399],[-59.51963,3.91951],[-59.86899,3.57089],[-59.79769,3.37162],[-59.99733,2.92312],[-59.91177,2.36759],[-59.7264,2.27497],[-59.74066,1.87596],[-59.25583,1.40559],[-58.92072,1.31293],[-58.84229,1.17749],[-58.53571,1.29154],[-58.4858,1.48399],[-58.33887,1.58014],[-58.01873,1.51966],[-57.97336,1.64566],[-57.77281,1.73344],[-57.55743,1.69605],[-57.35073,1.98327],[-57.23981,1.95808],[-57.09109,2.01854],[-57.07092,1.95304],[-56.7659,1.89509],[-56.47045,1.95135],[-55.99278,1.83137],[-55.89863,1.89861],[-55.92159,2.05236],[-56.13054,2.27723],[-55.96292,2.53188],[-55.71493,2.40342],[-55.01919,2.564],[-54.6084,2.32856],[-54.16286,2.10779],[-53.78743,2.34412],[-52.96539,2.1881],[-52.6906,2.37298],[-52.31787,3.17896],[-51.85573,3.83427],[-51.82312,3.85825],[-51.79599,3.89336],[-51.61983,4.14596],[-51.63798,4.51394],[-51.35485,4.8383],[-28.99601,1.86593],[-28.34015,-20.99094],[-52.83257,-34.01481],[-53.37138,-33.74313],[-53.39593,-33.75169],[-53.44031,-33.69344],[-53.52794,-33.68908],[-53.53459,-33.16843],[-53.1111,-32.71147],[-53.37671,-32.57005],[-53.39572,-32.58596],[-53.76024,-32.0751],[-54.17384,-31.86168],[-55.50821,-30.91349],[-55.50841,-30.9027],[-55.51862,-30.89828],[-55.52712,-30.89997],[-55.53276,-30.90218],[-55.53431,-30.89714],[-55.54572,-30.89051],[-55.55218,-30.88193],[-55.55373,-30.8732],[-55.5634,-30.8686],[-55.58866,-30.84117],[-55.87388,-31.05053],[-56.4619,-30.38457],[-56.4795,-30.3899],[-56.49267,-30.39471],[-56.90236,-30.02578],[-57.22502,-30.26121],[-57.65132,-30.19229],[-57.09386,-29.74211],[-56.81251,-29.48154],[-56.62789,-29.18073],[-56.57295,-29.11357],[-56.54171,-29.11447],[-56.05265,-28.62651],[-56.00458,-28.60421],[-56.01729,-28.51223],[-55.65418,-28.18304],[-55.6262,-28.17124],[-55.33303,-27.94661],[-55.16872,-27.86224],[-55.1349,-27.89759],[-54.90805,-27.73149],[-54.90159,-27.63132],[-54.67657,-27.57214],[-54.50416,-27.48232],[-54.41888,-27.40882],[-54.19268,-27.30751],[-54.19062,-27.27639],[-54.15978,-27.2889],[-53.80144,-27.09844],[-53.73372,-26.6131],[-53.68269,-26.33359],[-53.64505,-26.28089],[-53.64186,-26.25976],[-53.64632,-26.24798],[-53.63881,-26.25075],[-53.63739,-26.2496],[-53.65237,-26.23289],[-53.65018,-26.19501],[-53.73968,-26.10012],[-53.73391,-26.07006],[-53.7264,-26.0664],[-53.73086,-26.05842],[-53.73511,-26.04211],[-53.83691,-25.94849],[-53.90831,-25.55513],[-54.52926,-25.62846],[-54.5502,-25.58915],[-54.59398,-25.59224],[-54.59509,-25.53696],[-54.60196,-25.48397],[-54.62033,-25.46026],[-54.4423,-25.13381],[-54.28207,-24.07305],[-54.32807,-24.01865],[-54.6238,-23.83078],[-55.02691,-23.97317],[-55.0518,-23.98666],[-55.12292,-23.99669],[-55.41784,-23.9657],[-55.44117,-23.9185],[-55.43585,-23.87157],[-55.5555,-23.28237],[-55.52288,-23.2595],[-55.5446,-23.22811],[-55.63849,-22.95122],[-55.62493,-22.62765],[-55.68742,-22.58407],[-55.6986,-22.56268],[-55.72366,-22.5519],[-55.741,-22.52018],[-55.74941,-22.46436],[-55.8331,-22.29008],[-56.23206,-22.25347],[-56.45893,-22.08072],[-56.5212,-22.11556],[-56.6508,-22.28387],[-57.98625,-22.09157],[-57.94642,-21.73799],[-57.88239,-21.6868],[-57.93492,-21.65505],[-57.84536,-20.93155],[-58.16225,-20.16193],[-57.8496,-19.98346],[-58.14215,-19.76276],[-57.78463,-19.03259],[-57.71113,-19.03161],[-57.69134,-19.00544],[-57.71995,-18.97546],[-57.71995,-18.89573],[-57.76764,-18.90087],[-57.56807,-18.25655],[-57.48237,-18.24219],[-57.69877,-17.8431],[-57.73949,-17.56095],[-57.90082,-17.44555],[-57.99661,-17.5273],[-58.32935,-17.28195],[-58.5058,-16.80958],[-58.30918,-16.3699],[-58.32431,-16.25861],[-58.41506,-16.32636],[-60.16069,-16.26479],[-60.23797,-15.50267],[-60.58224,-15.09887],[-60.23968,-15.09515],[-60.27887,-14.63021],[-60.46037,-14.22496],[-60.48053,-13.77981],[-61.05527,-13.50054],[-61.81151,-13.49564],[-63.76259,-12.42952],[-63.90248,-12.52544],[-64.22539,-12.45267],[-64.30708,-12.46398],[-64.99778,-11.98604],[-65.30027,-11.48749],[-65.28141,-10.86289],[-65.35402,-10.78685],[-65.37923,-10.35141],[-65.29019,-9.86253],[-65.40615,-9.63894],[-65.56244,-9.84266],[-65.68343,-9.75323],[-67.17784,-10.34016],[-68.71533,-11.14749],[-68.7651,-11.0496],[-68.75179,-11.03688],[-68.75265,-11.02383],[-68.74802,-11.00891],[-69.42792,-10.93451],[-69.47839,-10.95254],[-69.57156,-10.94555],[-69.57835,-10.94051],[-69.90896,-10.92744],[-70.38791,-11.07096],[-70.51395,-10.92249],[-70.64134,-11.0108],[-70.62487,-9.80666],[-70.55429,-9.76692],[-70.58453,-9.58303],[-70.53373,-9.42628],[-71.23394,-9.9668],[-72.14742,-9.98049],[-72.31883,-9.5184],[-72.72216,-9.41397],[-73.21498,-9.40904],[-72.92886,-9.04074],[-73.76576,-7.89884],[-73.65485,-7.77897],[-73.96938,-7.58465],[-73.77011,-7.28944],[-73.73986,-6.87919],[-73.12983,-6.43852],[-73.24579,-6.05764],[-72.83973,-5.14765],[-72.64391,-5.0391],[-71.87003,-4.51661],[-70.96814,-4.36915],[-70.77601,-4.15717],[-70.33236,-4.15214],[-70.19582,-4.3607],[-70.11305,-4.27281],[-70.00888,-4.37833],[-69.94708,-4.2431],[-69.43395,-1.42219],[-69.4215,-1.01853],[-69.59796,-0.75136],[-69.603,-0.51947],[-70.03658,-0.19681],[-70.04162,0.55437],[-69.47696,0.71065],[-69.20976,0.57958],[-69.14422,0.84172],[-69.26017,1.06856],[-69.82987,1.07864],[-69.83491,1.69353],[-69.53746,1.76408],[-69.38621,1.70865],[-68.18128,1.72881],[-68.26699,1.83463],[-68.18632,2.00091],[-67.9292,1.82455],[-67.40488,2.22258],[-67.299,1.87494],[-67.15784,1.80439],[-67.08222,1.17441],[-66.85795,1.22998],[-66.28507,0.74585],[-65.6727,1.01353],[-65.50158,0.92086],[-65.57288,0.62856],[-65.11657,1.12046],[-64.38932,1.5125],[-64.34654,1.35569],[-64.08274,1.64792],[-64.06135,1.94722],[-63.39827,2.16098],[-63.39114,2.4317],[-64.0257,2.48156],[-64.02908,2.79797],[-64.48379,3.7879],[-64.84028,4.24665],[-64.72977,4.28931],[-64.57648,4.12576],[-64.14512,4.12932],[-63.99183,3.90172],[-63.86082,3.94796],[-63.70218,3.91417],[-63.67099,4.01731],[-63.50611,3.83592],[-63.42233,3.89995],[-63.4464,3.9693],[-63.21111,3.96219],[-62.98296,3.59935],[-62.7655,3.73099],[-62.74411,4.03331],[-62.57656,4.04754],[-62.44822,4.18621],[-62.13094,4.08309],[-61.54629,4.2822],[-61.48569,4.43149],[-61.29675,4.44216],[-61.31457,4.54167],[-61.15703,4.49839],[-60.98303,4.54167],[-60.86539,4.70512],[-60.5802,4.94312],[-60.73204,5.20931],[-60.32352,5.21299],[-60.20944,5.28754],[-59.98129,5.07097],[-60.04189,4.69801],[-60.15953,4.53456],[-59.78878,4.45637],[-59.69361,4.34069]]]]}},{type:"Feature",properties:{iso1A2:"ME",iso1A3:"MNE",iso1N3:"499",wikidata:"Q236",nameEn:"Montenegro",groups:["039","150"],callingCodes:["382"]},geometry:{type:"MultiPolygon",coordinates:[[[[19.22807,43.5264],[19.22229,43.47926],[19.44315,43.38846],[19.48171,43.32644],[19.52962,43.31623],[19.54598,43.25158],[19.62661,43.2286],[19.64063,43.19027],[19.76918,43.16044],[19.79255,43.11951],[19.92576,43.08539],[19.96549,43.11098],[19.98887,43.0538],[20.04729,43.02732],[20.05431,42.99571],[20.12325,42.96237],[20.14896,42.99058],[20.16415,42.97177],[20.34528,42.90676],[20.35692,42.8335],[20.27869,42.81945],[20.2539,42.76245],[20.04898,42.77701],[20.02088,42.74789],[20.02915,42.71147],[20.0969,42.65559],[20.07761,42.55582],[20.01834,42.54622],[20.00842,42.5109],[19.9324,42.51699],[19.82333,42.46581],[19.76549,42.50237],[19.74731,42.57422],[19.77375,42.58517],[19.73244,42.66299],[19.65972,42.62774],[19.4836,42.40831],[19.42352,42.36546],[19.42,42.33019],[19.28623,42.17745],[19.40687,42.10024],[19.37548,42.06835],[19.36867,42.02564],[19.37691,41.96977],[19.34601,41.95675],[19.33812,41.90669],[19.37451,41.8842],[19.37597,41.84849],[19.26406,41.74971],[18.45131,42.21682],[18.54128,42.39171],[18.52152,42.42302],[18.43588,42.48556],[18.44307,42.51077],[18.43735,42.55921],[18.49778,42.58409],[18.53751,42.57376],[18.55504,42.58409],[18.52232,42.62279],[18.57373,42.64429],[18.54841,42.68328],[18.54603,42.69171],[18.55221,42.69045],[18.56789,42.72074],[18.47324,42.74992],[18.45921,42.81682],[18.47633,42.85829],[18.4935,42.86433],[18.49661,42.89306],[18.49076,42.95553],[18.52232,43.01451],[18.66254,43.03928],[18.64735,43.14766],[18.66605,43.2056],[18.71747,43.2286],[18.6976,43.25243],[18.76538,43.29838],[18.85342,43.32426],[18.84794,43.33735],[18.83912,43.34795],[18.90911,43.36383],[18.95819,43.32899],[18.95001,43.29327],[19.00844,43.24988],[19.04233,43.30008],[19.08206,43.29668],[19.08673,43.31453],[19.04071,43.397],[19.01078,43.43854],[18.96053,43.45042],[18.95469,43.49367],[18.91379,43.50299],[19.01078,43.55806],[19.04934,43.50384],[19.13933,43.5282],[19.15685,43.53943],[19.22807,43.5264]]]]}},{type:"Feature",properties:{iso1A2:"BT",iso1A3:"BTN",iso1N3:"064",wikidata:"Q917",nameEn:"Bhutan",groups:["034","142"],driveSide:"left",callingCodes:["975"]},geometry:{type:"MultiPolygon",coordinates:[[[[91.6469,27.76358],[91.55819,27.6144],[91.65007,27.48287],[92.01132,27.47352],[92.12019,27.27829],[92.04702,27.26861],[92.03457,27.07334],[92.11863,26.893],[92.05523,26.8692],[91.83181,26.87318],[91.50067,26.79223],[90.67715,26.77215],[90.48504,26.8594],[90.39271,26.90704],[90.30402,26.85098],[90.04535,26.72422],[89.86124,26.73307],[89.63369,26.74402],[89.42349,26.83727],[89.3901,26.84225],[89.38319,26.85963],[89.37913,26.86224],[89.1926,26.81329],[89.12825,26.81661],[89.09554,26.89089],[88.95807,26.92668],[88.92301,26.99286],[88.8714,26.97488],[88.86984,27.10937],[88.74219,27.144],[88.91901,27.32483],[88.93678,27.33777],[88.96947,27.30319],[89.00216,27.32532],[88.95355,27.4106],[88.97213,27.51671],[89.0582,27.60985],[89.12825,27.62502],[89.59525,28.16433],[89.79762,28.23979],[90.13387,28.19178],[90.58842,28.02838],[90.69894,28.07784],[91.20019,27.98715],[91.25779,28.07509],[91.46327,28.0064],[91.48973,27.93903],[91.5629,27.84823],[91.6469,27.76358]]]]}},{type:"Feature",properties:{iso1A2:"MF",iso1A3:"MAF",iso1N3:"663",wikidata:"Q126125",nameEn:"Saint-Martin",country:"FR",groups:["EU","029","003","419","019"],callingCodes:["590"]},geometry:{type:"MultiPolygon",coordinates:[[[[-62.93924,18.02904],[-63.02323,18.05757],[-63.04039,18.05619],[-63.0579,18.06614],[-63.07759,18.04943],[-63.09686,18.04608],[-63.11096,18.05368],[-63.13584,18.0541],[-63.33064,17.9615],[-63.35989,18.06012],[-62.86666,18.19278],[-62.75637,18.13489],[-62.93924,18.02904]]]]}},{type:"Feature",properties:{iso1A2:"BW",iso1A3:"BWA",iso1N3:"072",wikidata:"Q963",nameEn:"Botswana",groups:["018","202","002"],driveSide:"left",callingCodes:["267"]},geometry:{type:"MultiPolygon",coordinates:[[[[25.26433,-17.79571],[25.23909,-17.90832],[25.31799,-18.07091],[25.39972,-18.12691],[25.53465,-18.39041],[25.68859,-18.56165],[25.79217,-18.6355],[25.82353,-18.82808],[25.94326,-18.90362],[25.99837,-19.02943],[25.96226,-19.08152],[26.17227,-19.53709],[26.72246,-19.92707],[27.21278,-20.08244],[27.29831,-20.28935],[27.28865,-20.49873],[27.69361,-20.48531],[27.72972,-20.51735],[27.69171,-21.08409],[27.91407,-21.31621],[28.01669,-21.57624],[28.29416,-21.59037],[28.49942,-21.66634],[28.58114,-21.63455],[29.07763,-21.81877],[29.04023,-21.85864],[29.02191,-21.90647],[29.02191,-21.95665],[29.04108,-22.00563],[29.08495,-22.04867],[29.14501,-22.07275],[29.1974,-22.07472],[29.24648,-22.05967],[29.3533,-22.18363],[29.37703,-22.19581],[29.21955,-22.17771],[29.18974,-22.18599],[29.15268,-22.21399],[29.10881,-22.21202],[29.0151,-22.22907],[28.91889,-22.44299],[28.63287,-22.55887],[28.34874,-22.5694],[28.04562,-22.8394],[28.04752,-22.90243],[27.93729,-22.96194],[27.93539,-23.04941],[27.74154,-23.2137],[27.6066,-23.21894],[27.52393,-23.37952],[27.33768,-23.40917],[26.99749,-23.65486],[26.84165,-24.24885],[26.51667,-24.47219],[26.46346,-24.60358],[26.39409,-24.63468],[25.8515,-24.75727],[25.84295,-24.78661],[25.88571,-24.87802],[25.72702,-25.25503],[25.69661,-25.29284],[25.6643,-25.4491],[25.58543,-25.6343],[25.33076,-25.76616],[25.12266,-25.75931],[25.01718,-25.72507],[24.8946,-25.80723],[24.67319,-25.81749],[24.44703,-25.73021],[24.36531,-25.773],[24.18287,-25.62916],[23.9244,-25.64286],[23.47588,-25.29971],[23.03497,-25.29971],[22.86012,-25.50572],[22.70808,-25.99186],[22.56365,-26.19668],[22.41921,-26.23078],[22.21206,-26.3773],[22.06192,-26.61882],[21.90703,-26.66808],[21.83291,-26.65959],[21.77114,-26.69015],[21.7854,-26.79199],[21.69322,-26.86152],[21.37869,-26.82083],[21.13353,-26.86661],[20.87031,-26.80047],[20.68596,-26.9039],[20.63275,-26.78181],[20.61754,-26.4692],[20.86081,-26.14892],[20.64795,-25.47827],[20.29826,-24.94869],[20.03678,-24.81004],[20.02809,-24.78725],[19.99817,-24.76768],[19.99912,-21.99991],[20.99751,-22.00026],[20.99904,-18.31743],[21.45556,-18.31795],[23.0996,-18.00075],[23.29618,-17.99855],[23.61088,-18.4881],[24.19416,-18.01919],[24.40577,-17.95726],[24.57485,-18.07151],[24.6303,-17.9863],[24.71887,-17.9218],[24.73364,-17.89338],[24.95586,-17.79674],[25.05895,-17.84452],[25.16882,-17.78253],[25.26433,-17.79571]]]]}},{type:"Feature",properties:{iso1A2:"MG",iso1A3:"MDG",iso1N3:"450",wikidata:"Q1019",nameEn:"Madagascar",aliases:["RM"],groups:["014","202","002"],callingCodes:["261"]},geometry:{type:"MultiPolygon",coordinates:[[[[51.94557,-12.74579],[45.90777,-29.77366],[40.40841,-23.17181],[43.72277,-16.09877],[49.10033,-10.96054],[51.94557,-12.74579]]]]}},{type:"Feature",properties:{iso1A2:"BZ",iso1A3:"BLZ",iso1N3:"084",wikidata:"Q242",nameEn:"Belize",groups:["013","003","419","019"],roadSpeedUnit:"mph",callingCodes:["501"]},geometry:{type:"MultiPolygon",coordinates:[[[[-88.3268,18.49048],[-88.29909,18.47591],[-88.26593,18.47617],[-88.03238,18.41778],[-88.03165,18.16657],[-87.90671,18.15213],[-87.87604,18.18313],[-87.86657,18.19971],[-87.85693,18.18266],[-87.84815,18.18511],[-86.92368,17.61462],[-88.40779,16.09624],[-88.95358,15.88698],[-89.02415,15.9063],[-89.17418,15.90898],[-89.22683,15.88619],[-89.15025,17.04813],[-89.14985,17.81563],[-89.15105,17.95104],[-89.03839,18.0067],[-88.8716,17.89535],[-88.71505,18.0707],[-88.48242,18.49164],[-88.3268,18.49048]]]]}},{type:"Feature",properties:{iso1A2:"MH",iso1A3:"MHL",iso1N3:"584",wikidata:"Q709",nameEn:"Marshall Islands",groups:["057","009"],roadSpeedUnit:"mph",callingCodes:["692"]},geometry:{type:"MultiPolygon",coordinates:[[[[169,3.9],[159.04653,10.59067],[169.29099,15.77133],[173.53711,5.70687],[169,3.9]]]]}},{type:"Feature",properties:{iso1A2:"CC",iso1A3:"CCK",iso1N3:"166",wikidata:"Q36004",nameEn:"Cocos (Keeling) Islands",country:"AU",groups:["053","009"],driveSide:"left",callingCodes:["61"]},geometry:{type:"MultiPolygon",coordinates:[[[[96.61846,-10.82438],[97.93979,-12.33309],[96.02343,-12.68334],[96.61846,-10.82438]]]]}},{type:"Feature",properties:{iso1A2:"MK",iso1A3:"MKD",iso1N3:"807",wikidata:"Q221",nameEn:"North Macedonia",groups:["039","150"],callingCodes:["389"]},geometry:{type:"MultiPolygon",coordinates:[[[[22.34773,42.31725],[22.38136,42.30339],[22.47251,42.20393],[22.50289,42.19527],[22.51224,42.15457],[22.67701,42.06614],[22.86749,42.02275],[22.90254,41.87587],[22.96682,41.77137],[23.01239,41.76527],[23.03342,41.71034],[22.95513,41.63265],[22.96331,41.35782],[22.93334,41.34104],[22.81199,41.3398],[22.76408,41.32225],[22.74538,41.16321],[22.71266,41.13945],[22.65306,41.18168],[22.62852,41.14385],[22.58295,41.11568],[22.5549,41.13065],[22.42285,41.11921],[22.26744,41.16409],[22.17629,41.15969],[22.1424,41.12449],[22.06527,41.15617],[21.90869,41.09191],[21.91102,41.04786],[21.7556,40.92525],[21.69601,40.9429],[21.57448,40.86076],[21.53007,40.90759],[21.41555,40.9173],[21.35595,40.87578],[21.25779,40.86165],[21.21105,40.8855],[21.15262,40.85546],[20.97887,40.85475],[20.97693,40.90103],[20.94305,40.92399],[20.83671,40.92752],[20.81567,40.89662],[20.73504,40.9081],[20.71634,40.91781],[20.65558,41.08009],[20.63454,41.0889],[20.59832,41.09066],[20.58546,41.11179],[20.59715,41.13644],[20.51068,41.2323],[20.49432,41.33679],[20.52119,41.34381],[20.55976,41.4087],[20.51301,41.442],[20.49039,41.49277],[20.45331,41.51436],[20.45809,41.5549],[20.52103,41.56473],[20.55508,41.58113],[20.51769,41.65975],[20.52937,41.69292],[20.51301,41.72433],[20.53405,41.78099],[20.57144,41.7897],[20.55976,41.87068],[20.59524,41.8818],[20.68523,41.85318],[20.76786,41.91839],[20.75464,42.05229],[21.11491,42.20794],[21.16614,42.19815],[21.22728,42.08909],[21.31983,42.10993],[21.29913,42.13954],[21.30496,42.1418],[21.38428,42.24465],[21.43882,42.23609],[21.43882,42.2789],[21.50823,42.27156],[21.52145,42.24465],[21.58992,42.25915],[21.70111,42.23789],[21.77176,42.2648],[21.84654,42.3247],[21.91595,42.30392],[21.94405,42.34669],[22.02908,42.29848],[22.16384,42.32103],[22.29605,42.37477],[22.29275,42.34913],[22.34773,42.31725]]]]}},{type:"Feature",properties:{iso1A2:"CF",iso1A3:"CAF",iso1N3:"140",wikidata:"Q929",nameEn:"Central African Republic",groups:["017","202","002"],callingCodes:["236"]},geometry:{type:"MultiPolygon",coordinates:[[[[22.87758,10.91915],[23.02221,10.69235],[23.3128,10.45214],[23.67164,9.86923],[23.69155,9.67566],[23.62179,9.53823],[23.64981,9.44303],[23.64358,9.28637],[23.56263,9.19418],[23.4848,9.16959],[23.44744,8.99128],[23.59065,8.99743],[23.51905,8.71749],[24.25691,8.69288],[24.13238,8.36959],[24.35965,8.26177],[24.85156,8.16933],[24.98855,7.96588],[25.25319,7.8487],[25.29214,7.66675],[25.20649,7.61115],[25.20337,7.50312],[25.35281,7.42595],[25.37461,7.33024],[25.90076,7.09549],[26.38022,6.63493],[26.32729,6.36272],[26.58259,6.1987],[26.51721,6.09655],[27.22705,5.71254],[27.22705,5.62889],[27.28621,5.56382],[27.23017,5.37167],[27.26886,5.25876],[27.44012,5.07349],[27.09575,5.22305],[26.93064,5.13535],[26.85579,5.03887],[26.74572,5.10685],[26.48595,5.04984],[26.13371,5.25594],[25.86073,5.19455],[25.53271,5.37431],[25.34558,5.29101],[25.31256,5.03668],[24.71816,4.90509],[24.46719,5.0915],[23.38847,4.60013],[22.94817,4.82392],[22.89094,4.79321],[22.84691,4.69887],[22.78526,4.71423],[22.6928,4.47285],[22.60915,4.48821],[22.5431,4.22041],[22.45504,4.13039],[22.27682,4.11347],[22.10721,4.20723],[21.6405,4.317],[21.55904,4.25553],[21.25744,4.33676],[21.21341,4.29285],[21.11214,4.33895],[21.08793,4.39603],[20.90383,4.44877],[20.60184,4.42394],[18.62755,3.47564],[18.58711,3.49423],[18.49245,3.63924],[18.39558,3.58212],[18.2723,3.57992],[18.24148,3.50302],[18.17323,3.47665],[18.14902,3.54476],[18.05656,3.56893],[17.85842,3.53378],[17.83421,3.61068],[17.60966,3.63705],[17.46876,3.70515],[17.35649,3.63045],[17.01746,3.55136],[16.68283,3.54257],[16.57598,3.47999],[16.46701,2.92512],[16.50126,2.84739],[16.19357,2.21537],[16.08252,2.45708],[16.05449,3.02306],[15.77725,3.26835],[15.73522,3.24348],[15.07686,4.01805],[15.17482,4.05131],[15.10644,4.1362],[15.08609,4.30282],[15.00825,4.41458],[14.73383,4.6135],[14.65489,5.21343],[14.57083,5.23979],[14.52724,5.28319],[14.62531,5.51411],[14.58951,5.59777],[14.62375,5.70466],[14.60974,5.91838],[14.49455,5.91683],[14.42917,6.00508],[14.43073,6.08867],[14.56149,6.18928],[14.74206,6.26356],[14.80122,6.34866],[14.79966,6.39043],[14.96311,6.75693],[15.04717,6.77085],[15.23397,7.25135],[15.49743,7.52179],[15.73118,7.52006],[15.79942,7.44149],[16.40703,7.68809],[16.41583,7.77971],[16.58315,7.88657],[16.59415,7.76444],[16.658,7.75353],[16.6668,7.67281],[16.8143,7.53971],[17.67288,7.98905],[17.93926,7.95853],[18.02731,8.01085],[18.6085,8.05009],[18.64153,8.08714],[18.62612,8.14163],[18.67455,8.22226],[18.79783,8.25929],[19.11044,8.68172],[18.86388,8.87971],[19.06421,9.00367],[20.36748,9.11019],[20.82979,9.44696],[21.26348,9.97642],[21.34934,9.95907],[21.52766,10.2105],[21.63553,10.217],[21.71479,10.29932],[21.72139,10.64136],[22.45889,11.00246],[22.87758,10.91915]]]]}},{type:"Feature",properties:{iso1A2:"ML",iso1A3:"MLI",iso1N3:"466",wikidata:"Q912",nameEn:"Mali",groups:["011","202","002"],callingCodes:["223"]},geometry:{type:"MultiPolygon",coordinates:[[[[-4.83423,24.99935],[1.15698,21.12843],[1.20992,20.73533],[3.24648,19.81703],[3.12501,19.1366],[3.36082,18.9745],[4.26651,19.14224],[4.26762,17.00432],[4.21787,17.00118],[4.19893,16.39923],[3.50368,15.35934],[3.03134,15.42221],[3.01806,15.34571],[1.31275,15.27978],[0.96711,14.98275],[0.72632,14.95898],[0.23859,15.00135],[0.06588,14.96961],[-0.24673,15.07805],[-0.72004,15.08655],[-1.05875,14.7921],[-1.32166,14.72774],[-1.68083,14.50023],[-1.97945,14.47709],[-1.9992,14.19011],[-2.10223,14.14878],[-2.47587,14.29671],[-2.66175,14.14713],[-2.84667,14.05532],[-2.90831,13.81174],[-2.88189,13.64921],[-3.26407,13.70699],[-3.28396,13.5422],[-3.23599,13.29035],[-3.43507,13.27272],[-3.4313,13.1588],[-3.54454,13.1781],[-3.7911,13.36665],[-3.96282,13.38164],[-3.90558,13.44375],[-3.96501,13.49778],[-4.34477,13.12927],[-4.21819,12.95722],[-4.238,12.71467],[-4.47356,12.71252],[-4.41412,12.31922],[-4.57703,12.19875],[-4.54841,12.1385],[-4.62546,12.13204],[-4.62987,12.06531],[-4.70692,12.06746],[-4.72893,12.01579],[-5.07897,11.97918],[-5.26389,11.84778],[-5.40258,11.8327],[-5.26389,11.75728],[-5.29251,11.61715],[-5.22867,11.60421],[-5.20665,11.43811],[-5.25509,11.36905],[-5.25949,11.24816],[-5.32553,11.21578],[-5.32994,11.13371],[-5.49284,11.07538],[-5.41579,10.84628],[-5.47083,10.75329],[-5.46643,10.56074],[-5.51058,10.43177],[-5.65135,10.46767],[-5.78124,10.43952],[-5.99478,10.19694],[-6.18851,10.24244],[-6.1731,10.46983],[-6.24795,10.74248],[-6.325,10.68624],[-6.40646,10.69922],[-6.42847,10.5694],[-6.52974,10.59104],[-6.63541,10.66893],[-6.68164,10.35074],[-6.93921,10.35291],[-7.01186,10.25111],[-6.97444,10.21644],[-7.00966,10.15794],[-7.0603,10.14711],[-7.13331,10.24877],[-7.3707,10.24677],[-7.44555,10.44602],[-7.52261,10.4655],[-7.54462,10.40921],[-7.63048,10.46334],[-7.92107,10.15577],[-7.97971,10.17117],[-7.9578,10.2703],[-8.10207,10.44649],[-8.22711,10.41722],[-8.32614,10.69273],[-8.2667,10.91762],[-8.35083,11.06234],[-8.66923,10.99397],[-8.40058,11.37466],[-8.80854,11.66715],[-8.94784,12.34842],[-9.13689,12.50875],[-9.38067,12.48446],[-9.32097,12.29009],[-9.63938,12.18312],[-9.714,12.0226],[-10.30604,12.24634],[-10.71897,11.91552],[-10.80355,12.1053],[-10.99758,12.24634],[-11.24136,12.01286],[-11.50006,12.17826],[-11.37536,12.40788],[-11.39935,12.97808],[-11.63025,13.39174],[-11.83345,13.33333],[-12.06897,13.71049],[-11.93043,13.84505],[-12.23936,14.76324],[-11.94903,14.76143],[-11.70705,15.51558],[-11.43483,15.62339],[-10.90932,15.11001],[-10.71721,15.4223],[-9.40447,15.4396],[-9.44673,15.60553],[-9.33314,15.7044],[-9.31106,15.69412],[-9.32979,15.50032],[-5.50165,15.50061],[-5.33435,16.33354],[-5.60725,16.49919],[-6.57191,25.0002],[-4.83423,24.99935]]]]}},{type:"Feature",properties:{iso1A2:"CH",iso1A3:"CHE",iso1N3:"756",wikidata:"Q39",nameEn:"Switzerland",groups:["155","150"],callingCodes:["41"]},geometry:{type:"MultiPolygon",coordinates:[[[[8.72809,47.69282],[8.75856,47.68969],[8.79511,47.67462],[8.79966,47.70222],[8.76965,47.7075],[8.77309,47.72059],[8.80663,47.73821],[8.82002,47.71458],[8.86989,47.70504],[8.85065,47.68209],[8.87383,47.67045],[8.87625,47.65441],[8.89946,47.64769],[8.94093,47.65596],[9.02093,47.6868],[9.09891,47.67801],[9.13845,47.66389],[9.15181,47.66904],[9.1705,47.65513],[9.1755,47.65584],[9.17593,47.65399],[9.18203,47.65598],[9.25619,47.65939],[9.55125,47.53629],[9.56312,47.49495],[9.58208,47.48344],[9.59482,47.46305],[9.60205,47.46165],[9.60484,47.46358],[9.60841,47.47178],[9.62158,47.45858],[9.62475,47.45685],[9.6423,47.45599],[9.65728,47.45383],[9.65863,47.44847],[9.64483,47.43842],[9.6446,47.43233],[9.65043,47.41937],[9.65136,47.40504],[9.6629,47.39591],[9.67334,47.39191],[9.67445,47.38429],[9.6711,47.37824],[9.66243,47.37136],[9.65427,47.36824],[9.62476,47.36639],[9.59978,47.34671],[9.58513,47.31334],[9.55857,47.29919],[9.54773,47.2809],[9.53116,47.27029],[9.52406,47.24959],[9.50318,47.22153],[9.4891,47.19346],[9.48774,47.17402],[9.51044,47.13727],[9.52089,47.10019],[9.51362,47.08505],[9.47139,47.06402],[9.47548,47.05257],[9.54041,47.06495],[9.55721,47.04762],[9.60717,47.06091],[9.87935,47.01337],[9.88266,46.93343],[9.98058,46.91434],[10.10715,46.84296],[10.22675,46.86942],[10.24128,46.93147],[10.30031,46.92093],[10.36933,47.00212],[10.48376,46.93891],[10.47197,46.85698],[10.38659,46.67847],[10.40475,46.63671],[10.44686,46.64162],[10.49375,46.62049],[10.46136,46.53164],[10.25309,46.57432],[10.23674,46.63484],[10.10307,46.61003],[10.03715,46.44479],[10.165,46.41051],[10.10506,46.3372],[10.17862,46.25626],[10.14439,46.22992],[10.07055,46.21668],[9.95249,46.38045],[9.73086,46.35071],[9.71273,46.29266],[9.57015,46.2958],[9.46117,46.37481],[9.45936,46.50873],[9.40487,46.46621],[9.36128,46.5081],[9.28136,46.49685],[9.25502,46.43743],[9.29226,46.32717],[9.24503,46.23616],[9.01618,46.04928],[8.99257,45.9698],[9.09065,45.89906],[9.06642,45.8761],[9.04546,45.84968],[9.04059,45.8464],[9.03505,45.83976],[9.03793,45.83548],[9.03279,45.82865],[9.0298,45.82127],[9.00324,45.82055],[8.99663,45.83466],[8.9621,45.83707],[8.94737,45.84285],[8.91129,45.8388],[8.93504,45.86245],[8.94372,45.86587],[8.93649,45.86775],[8.88904,45.95465],[8.86688,45.96135],[8.85121,45.97239],[8.8319,45.9879],[8.79362,45.99207],[8.78585,45.98973],[8.79414,46.00913],[8.85617,46.0748],[8.80778,46.10085],[8.75697,46.10395],[8.62242,46.12112],[8.45032,46.26869],[8.46317,46.43712],[8.42464,46.46367],[8.30648,46.41587],[8.31162,46.38044],[8.08814,46.26692],[8.16866,46.17817],[8.11383,46.11577],[8.02906,46.10331],[7.98881,45.99867],[7.9049,45.99945],[7.85949,45.91485],[7.56343,45.97421],[7.10685,45.85653],[7.04151,45.92435],[7.00946,45.9944],[6.93862,46.06502],[6.87868,46.03855],[6.89321,46.12548],[6.78968,46.14058],[6.86052,46.28512],[6.77152,46.34784],[6.8024,46.39171],[6.82312,46.42661],[6.53358,46.45431],[6.25432,46.3632],[6.21981,46.31304],[6.24826,46.30175],[6.25137,46.29014],[6.23775,46.27822],[6.24952,46.26255],[6.26749,46.24745],[6.29474,46.26221],[6.31041,46.24417],[6.29663,46.22688],[6.27694,46.21566],[6.26007,46.21165],[6.24821,46.20531],[6.23913,46.20511],[6.23544,46.20714],[6.22175,46.20045],[6.22222,46.19888],[6.21844,46.19837],[6.21603,46.19507],[6.21273,46.19409],[6.21114,46.1927],[6.20539,46.19163],[6.19807,46.18369],[6.19552,46.18401],[6.18707,46.17999],[6.18871,46.16644],[6.18116,46.16187],[6.15305,46.15194],[6.13397,46.1406],[6.09926,46.14373],[6.09199,46.15191],[6.07491,46.14879],[6.05203,46.15191],[6.04564,46.14031],[6.03614,46.13712],[6.01791,46.14228],[5.9871,46.14499],[5.97893,46.13303],[5.95781,46.12925],[5.9641,46.14412],[5.97508,46.15863],[5.98188,46.17392],[5.98846,46.17046],[5.99573,46.18587],[5.96515,46.19638],[5.97542,46.21525],[6.02461,46.23313],[6.03342,46.2383],[6.04602,46.23127],[6.05029,46.23518],[6.0633,46.24583],[6.07072,46.24085],[6.08563,46.24651],[6.10071,46.23772],[6.12446,46.25059],[6.11926,46.2634],[6.1013,46.28512],[6.11697,46.29547],[6.1198,46.31157],[6.13876,46.33844],[6.15738,46.3491],[6.16987,46.36759],[6.15985,46.37721],[6.15016,46.3778],[6.09926,46.40768],[6.06407,46.41676],[6.08427,46.44305],[6.07269,46.46244],[6.1567,46.54402],[6.11084,46.57649],[6.27135,46.68251],[6.38351,46.73171],[6.45209,46.77502],[6.43216,46.80336],[6.46456,46.88865],[6.43341,46.92703],[6.71531,47.0494],[6.68823,47.06616],[6.76788,47.1208],[6.8489,47.15933],[6.9508,47.24338],[6.95108,47.26428],[6.94316,47.28747],[7.05305,47.33304],[7.0564,47.35134],[7.03125,47.36996],[6.87959,47.35335],[6.88542,47.37262],[6.93744,47.40714],[6.93953,47.43388],[7.0024,47.45264],[6.98425,47.49432],[7.0231,47.50522],[7.07425,47.48863],[7.12781,47.50371],[7.16249,47.49025],[7.19583,47.49455],[7.17026,47.44312],[7.24669,47.4205],[7.33526,47.44186],[7.35603,47.43432],[7.40308,47.43638],[7.43088,47.45846],[7.4462,47.46264],[7.4583,47.47216],[7.42923,47.48628],[7.43356,47.49712],[7.47534,47.47932],[7.51076,47.49651],[7.49804,47.51798],[7.5229,47.51644],[7.53199,47.5284],[7.51904,47.53515],[7.50588,47.52856],[7.49691,47.53821],[7.50873,47.54546],[7.51723,47.54578],[7.52831,47.55347],[7.53634,47.55553],[7.55652,47.56779],[7.55689,47.57232],[7.56548,47.57617],[7.56684,47.57785],[7.58386,47.57536],[7.58945,47.59017],[7.60523,47.58519],[7.60459,47.57869],[7.61929,47.57683],[7.64309,47.59151],[7.64213,47.5944],[7.64599,47.59695],[7.67395,47.59212],[7.68229,47.59905],[7.69385,47.60099],[7.68486,47.59601],[7.67115,47.5871],[7.68904,47.57133],[7.67655,47.56435],[7.63338,47.56256],[7.65083,47.54662],[7.66174,47.54554],[7.6656,47.53752],[7.68101,47.53232],[7.69642,47.53297],[7.71961,47.54219],[7.75261,47.54599],[7.79486,47.55691],[7.81901,47.58798],[7.84412,47.5841],[7.88664,47.58854],[7.90673,47.57674],[7.91251,47.55031],[7.94494,47.54511],[7.95682,47.55789],[7.97581,47.55493],[8.00113,47.55616],[8.02136,47.55096],[8.04383,47.55443],[8.06663,47.56374],[8.08557,47.55768],[8.10002,47.56504],[8.10395,47.57918],[8.11543,47.5841],[8.13662,47.58432],[8.13823,47.59147],[8.14947,47.59558],[8.1652,47.5945],[8.19378,47.61636],[8.20617,47.62141],[8.22011,47.6181],[8.22577,47.60385],[8.23809,47.61204],[8.25863,47.61571],[8.26313,47.6103],[8.2824,47.61225],[8.29722,47.60603],[8.29524,47.5919],[8.30277,47.58607],[8.32735,47.57133],[8.38273,47.56608],[8.39477,47.57826],[8.43235,47.56617],[8.49431,47.58107],[8.48949,47.588],[8.46637,47.58389],[8.45578,47.60121],[8.50747,47.61897],[8.51686,47.63476],[8.55756,47.62394],[8.57586,47.59537],[8.60348,47.61204],[8.59545,47.64298],[8.60701,47.65271],[8.61471,47.64514],[8.60412,47.63735],[8.62049,47.63757],[8.62884,47.65098],[8.61113,47.66332],[8.6052,47.67258],[8.57683,47.66158],[8.56141,47.67088],[8.52801,47.66059],[8.5322,47.64687],[8.49656,47.64709],[8.46605,47.64103],[8.4667,47.65747],[8.44711,47.65379],[8.42264,47.66667],[8.41346,47.66676],[8.40473,47.67499],[8.4211,47.68407],[8.40569,47.69855],[8.44807,47.72426],[8.45771,47.7493],[8.48868,47.77215],[8.56814,47.78001],[8.56415,47.80633],[8.61657,47.79998],[8.62408,47.7626],[8.64425,47.76398],[8.65292,47.80066],[8.68022,47.78599],[8.68985,47.75686],[8.71778,47.76571],[8.74251,47.75168],[8.70543,47.73121],[8.73671,47.7169],[8.72617,47.69651],[8.72809,47.69282]],[[8.95861,45.96485],[8.97604,45.96151],[8.97741,45.98317],[8.96668,45.98436],[8.95861,45.96485]],[[8.70847,47.68904],[8.71773,47.69088],[8.70237,47.71453],[8.66416,47.71367],[8.67508,47.6979],[8.65769,47.68928],[8.66837,47.68437],[8.68985,47.69552],[8.70847,47.68904]]]]}},{type:"Feature",properties:{iso1A2:"MM",iso1A3:"MMR",iso1N3:"104",wikidata:"Q836",nameEn:"Myanmar",aliases:["Burma","BU"],groups:["035","142"],callingCodes:["95"]},geometry:{type:"MultiPolygon",coordinates:[[[[92.62187,21.87037],[92.60949,21.97638],[92.67532,22.03547],[92.70416,22.16017],[92.86208,22.05456],[92.89504,21.95143],[92.93899,22.02656],[92.99804,21.98964],[92.99255,22.05965],[93.04885,22.20595],[93.15734,22.18687],[93.14224,22.24535],[93.19991,22.25425],[93.18206,22.43716],[93.13537,22.45873],[93.11477,22.54374],[93.134,22.59573],[93.09417,22.69459],[93.134,22.92498],[93.12988,23.05772],[93.2878,23.00464],[93.38478,23.13698],[93.36862,23.35426],[93.38781,23.36139],[93.39981,23.38828],[93.38805,23.4728],[93.43475,23.68299],[93.3908,23.7622],[93.3908,23.92925],[93.36059,23.93176],[93.32351,24.04468],[93.34735,24.10151],[93.41415,24.07854],[93.46633,23.97067],[93.50616,23.94432],[93.62871,24.00922],[93.75952,24.0003],[93.80279,23.92549],[93.92089,23.95812],[94.14081,23.83333],[94.30215,24.23752],[94.32362,24.27692],[94.45279,24.56656],[94.50729,24.59281],[94.5526,24.70764],[94.60204,24.70889],[94.73937,25.00545],[94.74212,25.13606],[94.57458,25.20318],[94.68032,25.47003],[94.80117,25.49359],[95.18556,26.07338],[95.11428,26.1019],[95.12801,26.38397],[95.05798,26.45408],[95.23513,26.68499],[95.30339,26.65372],[95.437,26.7083],[95.81603,27.01335],[95.93002,27.04149],[96.04949,27.19428],[96.15591,27.24572],[96.40779,27.29818],[96.55761,27.29928],[96.73888,27.36638],[96.88445,27.25046],[96.85287,27.2065],[96.89132,27.17474],[97.14675,27.09041],[97.17422,27.14052],[96.91431,27.45752],[96.90112,27.62149],[97.29919,27.92233],[97.35824,27.87256],[97.38845,28.01329],[97.35412,28.06663],[97.31292,28.06784],[97.34547,28.21385],[97.41729,28.29783],[97.47085,28.2688],[97.50518,28.49716],[97.56835,28.55628],[97.70705,28.5056],[97.79632,28.33168],[97.90069,28.3776],[98.15337,28.12114],[98.13964,27.9478],[98.32641,27.51385],[98.42529,27.55404],[98.43353,27.67086],[98.69582,27.56499],[98.7333,26.85615],[98.77547,26.61994],[98.72741,26.36183],[98.67797,26.24487],[98.7329,26.17218],[98.66884,26.09165],[98.63128,26.15492],[98.57085,26.11547],[98.60763,26.01512],[98.70818,25.86241],[98.63128,25.79937],[98.54064,25.85129],[98.40606,25.61129],[98.31268,25.55307],[98.25774,25.6051],[98.16848,25.62739],[98.18084,25.56298],[98.12591,25.50722],[98.14925,25.41547],[97.92541,25.20815],[97.83614,25.2715],[97.77023,25.11492],[97.72216,25.08508],[97.72903,24.91332],[97.79949,24.85655],[97.76481,24.8289],[97.73127,24.83015],[97.70181,24.84557],[97.64354,24.79171],[97.56648,24.76475],[97.56383,24.75535],[97.5542,24.74943],[97.54675,24.74202],[97.56525,24.72838],[97.56286,24.54535],[97.52757,24.43748],[97.60029,24.4401],[97.66998,24.45288],[97.7098,24.35658],[97.65624,24.33781],[97.66723,24.30027],[97.71941,24.29652],[97.76799,24.26365],[97.72998,24.2302],[97.72799,24.18883],[97.75305,24.16902],[97.72903,24.12606],[97.62363,24.00506],[97.5247,23.94032],[97.64667,23.84574],[97.72302,23.89288],[97.79456,23.94836],[97.79416,23.95663],[97.84328,23.97603],[97.86545,23.97723],[97.88811,23.97446],[97.8955,23.97758],[97.89676,23.97931],[97.89683,23.98389],[97.88814,23.98605],[97.88414,23.99405],[97.88616,24.00463],[97.90998,24.02094],[97.93951,24.01953],[97.98691,24.03897],[97.99583,24.04932],[98.04709,24.07616],[98.05302,24.07408],[98.05671,24.07961],[98.0607,24.07812],[98.06703,24.08028],[98.07806,24.07988],[98.20666,24.11406],[98.54476,24.13119],[98.59256,24.08371],[98.85319,24.13042],[98.87998,24.15624],[98.89632,24.10612],[98.67797,23.9644],[98.68209,23.80492],[98.79607,23.77947],[98.82933,23.72921],[98.81775,23.694],[98.88396,23.59555],[98.80294,23.5345],[98.82877,23.47908],[98.87683,23.48995],[98.92104,23.36946],[98.87573,23.33038],[98.93958,23.31414],[98.92515,23.29535],[98.88597,23.18656],[99.05975,23.16382],[99.04601,23.12215],[99.25741,23.09025],[99.34127,23.13099],[99.52214,23.08218],[99.54218,22.90014],[99.43537,22.94086],[99.45654,22.85726],[99.31243,22.73893],[99.38247,22.57544],[99.37972,22.50188],[99.28771,22.4105],[99.17318,22.18025],[99.19176,22.16983],[99.1552,22.15874],[99.33166,22.09656],[99.47585,22.13345],[99.85351,22.04183],[99.96612,22.05965],[99.99084,21.97053],[99.94003,21.82782],[99.98654,21.71064],[100.04956,21.66843],[100.12679,21.70539],[100.17486,21.65306],[100.10757,21.59945],[100.12542,21.50365],[100.1625,21.48704],[100.18447,21.51898],[100.25863,21.47043],[100.35201,21.53176],[100.42892,21.54325],[100.4811,21.46148],[100.57861,21.45637],[100.72143,21.51898],[100.87265,21.67396],[101.11744,21.77659],[101.15156,21.56129],[101.16198,21.52808],[101.00234,21.39612],[100.80173,21.2934],[100.72716,21.31786],[100.63578,21.05639],[100.55281,21.02796],[100.50974,20.88574],[100.64628,20.88279],[100.60112,20.8347],[100.51079,20.82194],[100.36375,20.82783],[100.1957,20.68247],[100.08404,20.36626],[99.95721,20.46301],[99.91616,20.44986],[99.90499,20.4487],[99.89692,20.44789],[99.89301,20.44311],[99.89168,20.44548],[99.88451,20.44596],[99.88211,20.44488],[99.86383,20.44371],[99.81096,20.33687],[99.68255,20.32077],[99.46008,20.39673],[99.46077,20.36198],[99.5569,20.20676],[99.52943,20.14811],[99.416,20.08614],[99.20328,20.12877],[99.0735,20.10298],[98.98679,19.7419],[98.83661,19.80931],[98.56065,19.67807],[98.51182,19.71303],[98.24884,19.67876],[98.13829,19.78541],[98.03314,19.80941],[98.04364,19.65755],[97.84715,19.55782],[97.88423,19.5041],[97.78769,19.39429],[97.84186,19.29526],[97.78606,19.26769],[97.84024,19.22217],[97.83479,19.09972],[97.73797,19.04261],[97.73654,18.9812],[97.66487,18.9371],[97.73836,18.88478],[97.76752,18.58097],[97.5258,18.4939],[97.36444,18.57138],[97.34522,18.54596],[97.50383,18.26844],[97.56219,18.33885],[97.64116,18.29778],[97.60841,18.23846],[97.73723,17.97912],[97.66794,17.88005],[97.76407,17.71595],[97.91829,17.54504],[98.11185,17.36829],[98.10439,17.33847],[98.34566,17.04822],[98.39441,17.06266],[98.52624,16.89979],[98.49603,16.8446],[98.53833,16.81934],[98.46994,16.73613],[98.50253,16.7139],[98.49713,16.69022],[98.51043,16.70107],[98.51579,16.69433],[98.51472,16.68521],[98.51833,16.676],[98.51113,16.64503],[98.5695,16.62826],[98.57912,16.55983],[98.63817,16.47424],[98.68074,16.27068],[98.84485,16.42354],[98.92656,16.36425],[98.8376,16.11706],[98.69585,16.13353],[98.57019,16.04578],[98.59853,15.87197],[98.541,15.65406],[98.58598,15.46821],[98.56027,15.33471],[98.4866,15.39154],[98.39351,15.34177],[98.41906,15.27103],[98.40522,15.25268],[98.30446,15.30667],[98.22,15.21327],[98.18821,15.13125],[98.24874,14.83013],[98.56762,14.37701],[98.97356,14.04868],[99.16695,13.72621],[99.20617,13.20575],[99.12225,13.19847],[99.10646,13.05804],[99.18748,12.9898],[99.18905,12.84799],[99.29254,12.68921],[99.409,12.60603],[99.47519,12.1353],[99.56445,12.14805],[99.53424,12.02317],[99.64891,11.82699],[99.64108,11.78948],[99.5672,11.62732],[99.47598,11.62434],[99.39485,11.3925],[99.31573,11.32081],[99.32756,11.28545],[99.06938,10.94857],[99.02337,10.97217],[98.99701,10.92962],[99.0069,10.85485],[98.86819,10.78336],[98.78511,10.68351],[98.77275,10.62548],[98.81944,10.52761],[98.7391,10.31488],[98.55174,9.92804],[98.52291,9.92389],[98.47298,9.95782],[98.33094,9.91973],[98.12555,9.44056],[97.63455,9.60854],[94.6371,13.81803],[92.61042,13.76986],[92.39837,20.38919],[92.4302,20.5688],[92.31348,20.57137],[92.28464,20.63179],[92.37665,20.72172],[92.26071,21.05697],[92.17752,21.17445],[92.20087,21.337],[92.37939,21.47764],[92.43158,21.37025],[92.55105,21.3856],[92.60187,21.24615],[92.68152,21.28454],[92.59775,21.6092],[92.62187,21.87037]]]]}},{type:"Feature",properties:{iso1A2:"CK",iso1A3:"COK",iso1N3:"184",wikidata:"Q26988",nameEn:"Cook Islands",country:"NZ",groups:["061","009"],driveSide:"left",callingCodes:["682"]},geometry:{type:"MultiPolygon",coordinates:[[[[-167.73854,-14.92809],[-167.75195,-10.12005],[-167.75329,-7.52784],[-156.50903,-7.4975],[-156.4957,-12.32002],[-156.46451,-23.21255],[-167.73129,-23.22266],[-167.73854,-14.92809]]]]}},{type:"Feature",properties:{iso1A2:"MN",iso1A3:"MNG",iso1N3:"496",wikidata:"Q711",nameEn:"Mongolia",groups:["030","142"],callingCodes:["976"]},geometry:{type:"MultiPolygon",coordinates:[[[[102.14032,51.35566],[102.32194,50.67982],[102.71178,50.38873],[103.70343,50.13952],[105.32528,50.4648],[106.05562,50.40582],[106.07865,50.33474],[106.47156,50.31909],[106.49628,50.32436],[106.51122,50.34408],[106.58373,50.34044],[106.80326,50.30177],[107.00007,50.1977],[107.1174,50.04239],[107.36407,49.97612],[107.96116,49.93191],[107.95387,49.66659],[108.27937,49.53167],[108.53969,49.32325],[109.18017,49.34709],[109.51325,49.22859],[110.24373,49.16676],[110.39891,49.25083],[110.64493,49.1816],[113.02647,49.60772],[113.20216,49.83356],[114.325,50.28098],[114.9703,50.19254],[115.26068,49.97367],[115.73602,49.87688],[116.22402,50.04477],[116.62502,49.92919],[116.71193,49.83813],[116.03781,48.87014],[116.06565,48.81716],[115.78876,48.51781],[115.811,48.25699],[115.52082,48.15367],[115.57128,47.91988],[115.94296,47.67741],[116.08431,47.80693],[116.2527,47.87766],[116.4465,47.83662],[116.67405,47.89039],[116.87527,47.88836],[117.08918,47.82242],[117.37875,47.63627],[117.50181,47.77216],[117.80196,48.01661],[118.03676,48.00982],[118.11009,48.04],[118.22677,48.03853],[118.29654,48.00246],[118.55766,47.99277],[118.7564,47.76947],[119.12343,47.66458],[119.13995,47.53997],[119.35892,47.48104],[119.31964,47.42617],[119.54918,47.29505],[119.56019,47.24874],[119.62403,47.24575],[119.71209,47.19192],[119.85518,46.92196],[119.91242,46.90091],[119.89261,46.66423],[119.80455,46.67631],[119.77373,46.62947],[119.68127,46.59015],[119.65265,46.62342],[119.42827,46.63783],[119.37306,46.61132],[119.30261,46.6083],[119.24978,46.64761],[119.10448,46.65516],[119.00541,46.74273],[118.92616,46.72765],[118.89974,46.77139],[118.8337,46.77742],[118.78747,46.68689],[118.30534,46.73519],[117.69554,46.50991],[117.60748,46.59771],[117.41782,46.57862],[117.36609,46.36335],[117.07252,46.35818],[116.83166,46.38637],[116.75551,46.33083],[116.58612,46.30211],[116.26678,45.96479],[116.24012,45.8778],[116.27366,45.78637],[116.16989,45.68603],[115.91898,45.6227],[115.69688,45.45761],[115.35757,45.39106],[114.94546,45.37377],[114.74612,45.43585],[114.54801,45.38337],[114.5166,45.27189],[114.08071,44.92847],[113.909,44.91444],[113.63821,44.74326],[112.74662,44.86297],[112.4164,45.06858],[111.98695,45.09074],[111.76275,44.98032],[111.40498,44.3461],[111.96289,43.81596],[111.93776,43.68709],[111.79758,43.6637],[111.59087,43.51207],[111.0149,43.3289],[110.4327,42.78293],[110.08401,42.6411],[109.89402,42.63111],[109.452,42.44842],[109.00679,42.45302],[108.84489,42.40246],[108.23156,42.45532],[107.57258,42.40898],[107.49681,42.46221],[107.29755,42.41395],[107.24774,42.36107],[106.76517,42.28741],[105.24708,41.7442],[105.01119,41.58382],[104.91272,41.64619],[104.51667,41.66113],[104.52258,41.8706],[103.92804,41.78246],[103.3685,41.89696],[102.72403,42.14675],[102.42826,42.15137],[102.07645,42.22519],[101.80515,42.50074],[101.28833,42.58524],[100.84979,42.67087],[100.33297,42.68231],[99.50671,42.56535],[97.1777,42.7964],[96.37926,42.72055],[96.35658,42.90363],[95.89543,43.2528],[95.52594,43.99353],[95.32891,44.02407],[95.39772,44.2805],[95.01191,44.25274],[94.71959,44.35284],[94.10003,44.71016],[93.51161,44.95964],[91.64048,45.07408],[90.89169,45.19667],[90.65114,45.49314],[90.70907,45.73437],[91.03026,46.04194],[90.99672,46.14207],[90.89639,46.30711],[91.07696,46.57315],[91.0147,46.58171],[91.03649,46.72916],[90.84035,46.99525],[90.76108,46.99399],[90.48542,47.30438],[90.48854,47.41826],[90.33598,47.68303],[90.10871,47.7375],[90.06512,47.88177],[89.76624,47.82745],[89.55453,48.0423],[89.0711,47.98528],[88.93186,48.10263],[88.8011,48.11302],[88.58316,48.21893],[88.58939,48.34531],[87.96361,48.58478],[88.0788,48.71436],[87.73822,48.89582],[87.88171,48.95853],[87.81333,49.17354],[87.98977,49.18147],[88.15543,49.30314],[88.17223,49.46934],[88.42449,49.48821],[88.82499,49.44808],[89.70687,49.72535],[89.59711,49.90851],[91.86048,50.73734],[92.07173,50.69585],[92.44714,50.78762],[93.01109,50.79001],[92.99595,50.63183],[94.30823,50.57498],[94.39258,50.22193],[94.49477,50.17832],[94.6121,50.04239],[94.97166,50.04725],[95.02465,49.96941],[95.74757,49.97915],[95.80056,50.04239],[96.97388,49.88413],[97.24639,49.74737],[97.56811,49.84265],[97.56432,49.92801],[97.76871,49.99861],[97.85197,49.91339],[98.29481,50.33561],[98.31373,50.4996],[98.06393,50.61262],[97.9693,50.78044],[98.01472,50.86652],[97.83305,51.00248],[98.05257,51.46696],[98.22053,51.46579],[98.33222,51.71832],[98.74142,51.8637],[98.87768,52.14563],[99.27888,51.96876],[99.75578,51.90108],[99.89203,51.74903],[100.61116,51.73028],[101.39085,51.45753],[101.5044,51.50467],[102.14032,51.35566]]]]}},{type:"Feature",properties:{iso1A2:"CM",iso1A3:"CMR",iso1N3:"120",wikidata:"Q1009",nameEn:"Cameroon",groups:["017","202","002"],callingCodes:["237"]},geometry:{type:"MultiPolygon",coordinates:[[[[14.83314,12.62963],[14.90827,12.3269],[14.89019,12.16593],[14.96952,12.0925],[15.00146,12.1223],[15.0349,12.10698],[15.05786,12.0608],[15.04808,11.8731],[15.11579,11.79313],[15.06595,11.71126],[15.13149,11.5537],[15.0585,11.40481],[15.10021,11.04101],[15.04957,11.02347],[15.09127,10.87431],[15.06737,10.80921],[15.15532,10.62846],[15.14936,10.53915],[15.23724,10.47764],[15.30874,10.31063],[15.50535,10.1098],[15.68761,9.99344],[15.41408,9.92876],[15.24618,9.99246],[15.14043,9.99246],[15.05999,9.94845],[14.95722,9.97926],[14.80082,9.93818],[14.4673,10.00264],[14.20411,10.00055],[14.1317,9.82413],[14.01793,9.73169],[13.97544,9.6365],[14.37094,9.2954],[14.35707,9.19611],[14.83566,8.80557],[15.09484,8.65982],[15.20426,8.50892],[15.50743,7.79302],[15.59272,7.7696],[15.56964,7.58936],[15.49743,7.52179],[15.23397,7.25135],[15.04717,6.77085],[14.96311,6.75693],[14.79966,6.39043],[14.80122,6.34866],[14.74206,6.26356],[14.56149,6.18928],[14.43073,6.08867],[14.42917,6.00508],[14.49455,5.91683],[14.60974,5.91838],[14.62375,5.70466],[14.58951,5.59777],[14.62531,5.51411],[14.52724,5.28319],[14.57083,5.23979],[14.65489,5.21343],[14.73383,4.6135],[15.00825,4.41458],[15.08609,4.30282],[15.10644,4.1362],[15.17482,4.05131],[15.07686,4.01805],[15.73522,3.24348],[15.77725,3.26835],[16.05449,3.02306],[16.08252,2.45708],[16.19357,2.21537],[16.15568,2.18955],[16.08563,2.19733],[16.05294,1.9811],[16.14634,1.70259],[16.02647,1.65591],[16.02959,1.76483],[15.48942,1.98265],[15.34776,1.91264],[15.22634,2.03243],[15.00996,1.98887],[14.61145,2.17866],[13.29457,2.16106],[13.28534,2.25716],[11.37116,2.29975],[11.3561,2.17217],[9.991,2.16561],[9.90749,2.20049],[9.89012,2.20457],[9.84716,2.24676],[9.83238,2.29079],[9.83754,2.32428],[9.82123,2.35097],[9.81162,2.33797],[9.22018,3.72052],[8.34397,4.30689],[8.60302,4.87353],[8.78027,5.1243],[8.92029,5.58403],[8.83687,5.68483],[8.88156,5.78857],[8.84209,5.82562],[9.51757,6.43874],[9.70674,6.51717],[9.77824,6.79088],[9.86314,6.77756],[10.15135,7.03781],[10.21466,6.88996],[10.53639,6.93432],[10.57214,7.16345],[10.59746,7.14719],[10.60789,7.06885],[10.83727,6.9358],[10.8179,6.83377],[10.94302,6.69325],[11.09644,6.68437],[11.09495,6.51717],[11.42041,6.53789],[11.42264,6.5882],[11.51499,6.60892],[11.57755,6.74059],[11.55818,6.86186],[11.63117,6.9905],[11.87396,7.09398],[11.84864,7.26098],[11.93205,7.47812],[12.01844,7.52981],[11.99908,7.67302],[12.20909,7.97553],[12.19271,8.10826],[12.24782,8.17904],[12.26123,8.43696],[12.4489,8.52536],[12.44146,8.6152],[12.68722,8.65938],[12.71701,8.7595],[12.79,8.75361],[12.81085,8.91992],[12.90022,9.11411],[12.91958,9.33905],[12.85628,9.36698],[13.02385,9.49334],[13.22642,9.57266],[13.25472,9.76795],[13.29941,9.8296],[13.25025,9.86042],[13.24132,9.91031],[13.27409,9.93232],[13.286,9.9822],[13.25323,10.00127],[13.25025,10.03647],[13.34111,10.12299],[13.43644,10.13326],[13.5705,10.53183],[13.54964,10.61236],[13.73434,10.9255],[13.70753,10.94451],[13.7403,11.00593],[13.78945,11.00154],[13.97489,11.30258],[14.17821,11.23831],[14.6124,11.51283],[14.64591,11.66166],[14.55207,11.72001],[14.61612,11.7798],[14.6474,12.17466],[14.4843,12.35223],[14.22215,12.36533],[14.17523,12.41916],[14.20204,12.53405],[14.08251,13.0797],[14.46881,13.08259],[14.56101,12.91036],[14.55058,12.78256],[14.83314,12.62963]]]]}},{type:"Feature",properties:{iso1A2:"MO",iso1A3:"MAC",iso1N3:"446",wikidata:"Q14773",nameEn:"Macau",aliases:["Macao"],country:"CN",groups:["030","142"],driveSide:"left",callingCodes:["853"]},geometry:{type:"MultiPolygon",coordinates:[[[[113.54942,22.14519],[113.54093,22.15497],[113.52659,22.18271],[113.53552,22.20607],[113.53301,22.21235],[113.53593,22.2137],[113.54093,22.21314],[113.54333,22.21688],[113.5508,22.21672],[113.56865,22.20973],[113.57123,22.20416],[113.60504,22.20464],[113.63011,22.10782],[113.57191,22.07696],[113.54839,22.10909],[113.54942,22.14519]]]]}},{type:"Feature",properties:{iso1A2:"CO",iso1A3:"COL",iso1N3:"170",wikidata:"Q739",nameEn:"Colombia",groups:["005","419","019"],callingCodes:["57"]},geometry:{type:"MultiPolygon",coordinates:[[[[-71.19849,12.65801],[-70.92579,11.96275],[-71.3275,11.85],[-71.9675,11.65536],[-72.24983,11.14138],[-72.4767,11.1117],[-72.88002,10.44309],[-72.98085,9.85253],[-73.36905,9.16636],[-73.02119,9.27584],[-72.94052,9.10663],[-72.77415,9.10165],[-72.65474,8.61428],[-72.4042,8.36513],[-72.36987,8.19976],[-72.35163,8.01163],[-72.39137,8.03534],[-72.47213,7.96106],[-72.48801,7.94329],[-72.48183,7.92909],[-72.47042,7.92306],[-72.45806,7.91141],[-72.46183,7.90682],[-72.44454,7.86031],[-72.46763,7.79518],[-72.47827,7.65604],[-72.45321,7.57232],[-72.47415,7.48928],[-72.43132,7.40034],[-72.19437,7.37034],[-72.04895,7.03837],[-71.82441,7.04314],[-71.44118,7.02116],[-71.42212,7.03854],[-71.37234,7.01588],[-71.03941,6.98163],[-70.7596,7.09799],[-70.10716,6.96516],[-69.41843,6.1072],[-67.60654,6.2891],[-67.4625,6.20625],[-67.43513,5.98835],[-67.58558,5.84537],[-67.63914,5.64963],[-67.59141,5.5369],[-67.83341,5.31104],[-67.85358,4.53249],[-67.62671,3.74303],[-67.50067,3.75812],[-67.30945,3.38393],[-67.85862,2.86727],[-67.85862,2.79173],[-67.65696,2.81691],[-67.21967,2.35778],[-66.85795,1.22998],[-67.08222,1.17441],[-67.15784,1.80439],[-67.299,1.87494],[-67.40488,2.22258],[-67.9292,1.82455],[-68.18632,2.00091],[-68.26699,1.83463],[-68.18128,1.72881],[-69.38621,1.70865],[-69.53746,1.76408],[-69.83491,1.69353],[-69.82987,1.07864],[-69.26017,1.06856],[-69.14422,0.84172],[-69.20976,0.57958],[-69.47696,0.71065],[-70.04162,0.55437],[-70.03658,-0.19681],[-69.603,-0.51947],[-69.59796,-0.75136],[-69.4215,-1.01853],[-69.43395,-1.42219],[-69.94708,-4.2431],[-70.3374,-3.79505],[-70.52393,-3.87553],[-70.71396,-3.7921],[-70.04609,-2.73906],[-70.94377,-2.23142],[-71.75223,-2.15058],[-72.92587,-2.44514],[-73.65312,-1.26222],[-74.26675,-0.97229],[-74.42701,-0.50218],[-75.18513,-0.0308],[-75.25764,-0.11943],[-75.82927,0.09578],[-76.23441,0.42294],[-76.41215,0.38228],[-76.4094,0.24015],[-76.89177,0.24736],[-77.52001,0.40782],[-77.49984,0.64476],[-77.67815,0.73863],[-77.66416,0.81604],[-77.68613,0.83029],[-77.7148,0.85003],[-77.85677,0.80197],[-78.42749,1.15389],[-78.87137,1.47457],[-82.12561,4.00341],[-78.06168,7.07793],[-77.89178,7.22681],[-77.81426,7.48319],[-77.72157,7.47612],[-77.72514,7.72348],[-77.57185,7.51147],[-77.17257,7.97422],[-77.45064,8.49991],[-77.32389,8.81247],[-77.58292,9.22278],[-78.79327,9.93766],[-82.56142,11.91792],[-82.06974,14.49418],[-81.58685,18.0025],[-71.19849,12.65801]]]]}},{type:"Feature",properties:{iso1A2:"MP",iso1A3:"MNP",iso1N3:"580",wikidata:"Q16644",nameEn:"Northern Mariana Islands",country:"US",groups:["057","009"],roadSpeedUnit:"mph",callingCodes:["1 670"]},geometry:{type:"MultiPolygon",coordinates:[[[[143.82485,13.92273],[144.18594,21.03576],[146.6755,21.00809],[146.25931,13.85876],[143.82485,13.92273]]]]}},{type:"Feature",properties:{iso1A2:"CR",iso1A3:"CRI",iso1N3:"188",wikidata:"Q800",nameEn:"Costa Rica",groups:["013","003","419","019"],callingCodes:["506"]},geometry:{type:"MultiPolygon",coordinates:[[[[-83.68276,11.01562],[-83.54024,10.96805],[-82.51044,9.65379],[-82.56507,9.57279],[-82.61345,9.49881],[-82.66667,9.49746],[-82.77206,9.59573],[-82.87919,9.62645],[-82.84871,9.4973],[-82.93516,9.46741],[-82.93516,9.07687],[-82.72126,8.97125],[-82.88253,8.83331],[-82.91377,8.774],[-82.92068,8.74832],[-82.8794,8.6981],[-82.82739,8.60153],[-82.83975,8.54755],[-82.83322,8.52464],[-82.8382,8.48117],[-82.8679,8.44042],[-82.93056,8.43465],[-83.05209,8.33394],[-82.9388,8.26634],[-82.88641,8.10219],[-82.89137,8.05755],[-82.89978,8.04083],[-82.94503,7.93865],[-87.41779,5.02401],[-86.14524,11.09059],[-85.71223,11.06868],[-85.60529,11.22607],[-84.92439,10.9497],[-84.68197,11.07568],[-83.90838,10.71161],[-83.66597,10.79916],[-83.68276,11.01562]]]]}},{type:"Feature",properties:{iso1A2:"MQ",iso1A3:"MTQ",iso1N3:"474",wikidata:"Q17054",nameEn:"Martinique",country:"FR",groups:["EU","029","003","419","019"],callingCodes:["596"]},geometry:{type:"MultiPolygon",coordinates:[[[[-60.5958,14.23076],[-61.26561,14.25664],[-61.51867,14.96709],[-60.69955,15.22234],[-60.5958,14.23076]]]]}},{type:"Feature",properties:{iso1A2:"CV",iso1A3:"CPV",iso1N3:"132",wikidata:"Q1011",nameEn:"Cape Verde",groups:["011","202","002"],callingCodes:["238"]},geometry:{type:"MultiPolygon",coordinates:[[[[-28.81604,14.57305],[-23.37101,19.134],[-20.39702,14.12816],[-28.81604,14.57305]]]]}},{type:"Feature",properties:{iso1A2:"MR",iso1A3:"MRT",iso1N3:"478",wikidata:"Q1025",nameEn:"Mauritania",groups:["011","202","002"],callingCodes:["222"]},geometry:{type:"MultiPolygon",coordinates:[[[[-5.60725,16.49919],[-5.33435,16.33354],[-5.50165,15.50061],[-9.32979,15.50032],[-9.31106,15.69412],[-9.33314,15.7044],[-9.44673,15.60553],[-9.40447,15.4396],[-10.71721,15.4223],[-10.90932,15.11001],[-11.43483,15.62339],[-11.70705,15.51558],[-11.94903,14.76143],[-12.23936,14.76324],[-13.11029,15.52116],[-13.43135,16.09022],[-13.80075,16.13961],[-14.32144,16.61495],[-15.00557,16.64997],[-15.6509,16.50315],[-16.27016,16.51565],[-16.4429,16.20605],[-16.44814,16.09753],[-16.48967,16.0496],[-16.50854,16.09032],[-17.15288,16.07139],[-17.0471,20.76408],[-17.0695,20.85742],[-17.06781,20.92697],[-17.0396,20.9961],[-17.0357,21.05368],[-16.99806,21.12142],[-16.95474,21.33997],[-13.01525,21.33343],[-13.08438,22.53866],[-13.15313,22.75649],[-13.10753,22.89493],[-13.00412,23.02297],[-12.5741,23.28975],[-12.36213,23.3187],[-12.14969,23.41935],[-12.00251,23.4538],[-12.0002,25.9986],[-8.66721,25.99918],[-8.66674,27.31569],[-4.83423,24.99935],[-6.57191,25.0002],[-5.60725,16.49919]]]]}},{type:"Feature",properties:{iso1A2:"CX",iso1A3:"CXR",iso1N3:"162",wikidata:"Q31063",nameEn:"Christmas Island",country:"AU",groups:["053","009"],driveSide:"left",callingCodes:["61"]},geometry:{type:"MultiPolygon",coordinates:[[[[105.66835,-9.31927],[106.66176,-11.14349],[104.67494,-11.2566],[105.66835,-9.31927]]]]}},{type:"Feature",properties:{iso1A2:"MS",iso1A3:"MSR",iso1N3:"500",wikidata:"Q13353",nameEn:"Montserrat",country:"GB",groups:["029","003","419","019"],driveSide:"left",callingCodes:["1 664"]},geometry:{type:"MultiPolygon",coordinates:[[[[-61.83929,16.66647],[-62.17275,16.35721],[-62.52079,16.69392],[-62.14123,17.02632],[-61.83929,16.66647]]]]}},{type:"Feature",properties:{iso1A2:"CZ",iso1A3:"CZE",iso1N3:"203",wikidata:"Q213",nameEn:"Czechia",groups:["EU","151","150"],callingCodes:["420"]},geometry:{type:"MultiPolygon",coordinates:[[[[14.82803,50.86966],[14.99852,50.86817],[15.01088,50.97984],[14.96419,50.99108],[15.02433,51.0242],[15.03895,51.0123],[15.06218,51.02269],[15.10152,51.01095],[15.11937,50.99021],[15.16744,51.01959],[15.1743,50.9833],[15.2361,50.99886],[15.27043,50.97724],[15.2773,50.8907],[15.36656,50.83956],[15.3803,50.77187],[15.43798,50.80833],[15.73186,50.73885],[15.81683,50.75666],[15.87331,50.67188],[15.97219,50.69799],[16.0175,50.63009],[15.98317,50.61528],[16.02437,50.60046],[16.10265,50.66405],[16.20839,50.63096],[16.23174,50.67101],[16.33611,50.66579],[16.44597,50.58041],[16.34572,50.49575],[16.31413,50.50274],[16.19526,50.43291],[16.21585,50.40627],[16.22821,50.41054],[16.28118,50.36891],[16.30289,50.38292],[16.36495,50.37679],[16.3622,50.34875],[16.39379,50.3207],[16.42674,50.32509],[16.56407,50.21009],[16.55446,50.16613],[16.63137,50.1142],[16.7014,50.09659],[16.8456,50.20834],[16.98018,50.24172],[17.00353,50.21449],[17.02825,50.23118],[16.99803,50.25753],[17.02138,50.27772],[16.99803,50.30316],[16.94448,50.31281],[16.90877,50.38642],[16.85933,50.41093],[16.89229,50.45117],[17.1224,50.39494],[17.14498,50.38117],[17.19579,50.38817],[17.19991,50.3654],[17.27681,50.32246],[17.34273,50.32947],[17.34548,50.2628],[17.3702,50.28123],[17.58889,50.27837],[17.67764,50.28977],[17.69292,50.32859],[17.74648,50.29966],[17.72176,50.25665],[17.76296,50.23382],[17.70528,50.18812],[17.59404,50.16437],[17.66683,50.10275],[17.6888,50.12037],[17.7506,50.07896],[17.77669,50.02253],[17.86886,49.97452],[18.00191,50.01723],[18.04585,50.01194],[18.04585,50.03311],[18.00396,50.04954],[18.03212,50.06574],[18.07898,50.04535],[18.10628,50.00223],[18.20241,49.99958],[18.21752,49.97309],[18.27107,49.96779],[18.27794,49.93863],[18.31914,49.91565],[18.33278,49.92415],[18.33562,49.94747],[18.41604,49.93498],[18.53423,49.89906],[18.54495,49.9079],[18.54299,49.92537],[18.57697,49.91565],[18.57045,49.87849],[18.60341,49.86256],[18.57183,49.83334],[18.61278,49.7618],[18.61368,49.75426],[18.62645,49.75002],[18.62943,49.74603],[18.62676,49.71983],[18.69817,49.70473],[18.72838,49.68163],[18.80479,49.6815],[18.84786,49.5446],[18.84521,49.51672],[18.74761,49.492],[18.67757,49.50895],[18.6144,49.49824],[18.57183,49.51162],[18.53063,49.49022],[18.54848,49.47059],[18.44686,49.39467],[18.4084,49.40003],[18.4139,49.36517],[18.36446,49.3267],[18.18456,49.28909],[18.15022,49.24518],[18.1104,49.08624],[18.06885,49.03157],[17.91814,49.01784],[17.87831,48.92679],[17.77944,48.92318],[17.73126,48.87885],[17.7094,48.86721],[17.5295,48.81117],[17.45671,48.85004],[17.3853,48.80936],[17.29054,48.85546],[17.19355,48.87602],[17.11202,48.82925],[17.00215,48.70887],[16.93955,48.60371],[16.90354,48.71541],[16.79779,48.70998],[16.71883,48.73806],[16.68518,48.7281],[16.67008,48.77699],[16.46134,48.80865],[16.40915,48.74576],[16.37345,48.729],[16.06034,48.75436],[15.84404,48.86921],[15.78087,48.87644],[15.75341,48.8516],[15.6921,48.85973],[15.61622,48.89541],[15.51357,48.91549],[15.48027,48.94481],[15.34823,48.98444],[15.28305,48.98831],[15.26177,48.95766],[15.16358,48.94278],[15.15534,48.99056],[14.99878,49.01444],[14.97612,48.96983],[14.98917,48.90082],[14.95072,48.79101],[14.98032,48.77959],[14.9782,48.7766],[14.98112,48.77524],[14.9758,48.76857],[14.95641,48.75915],[14.94773,48.76268],[14.81545,48.7874],[14.80821,48.77711],[14.80584,48.73489],[14.72756,48.69502],[14.71794,48.59794],[14.66762,48.58215],[14.60808,48.62881],[14.56139,48.60429],[14.4587,48.64695],[14.43076,48.58855],[14.33909,48.55852],[14.20691,48.5898],[14.09104,48.5943],[14.01482,48.63788],[14.06151,48.66873],[13.84023,48.76988],[13.8096,48.77877],[13.78977,48.83319],[13.76994,48.83537],[13.73854,48.88538],[13.67739,48.87886],[13.61624,48.9462],[13.58319,48.96899],[13.50552,48.97441],[13.50221,48.93752],[13.40802,48.98851],[13.39479,49.04812],[13.28242,49.1228],[13.23689,49.11412],[13.20405,49.12303],[13.17019,49.14339],[13.17665,49.16713],[13.05883,49.26259],[13.02957,49.27399],[13.03618,49.30417],[12.94859,49.34079],[12.88249,49.35479],[12.88414,49.33541],[12.78168,49.34618],[12.75854,49.3989],[12.71227,49.42363],[12.669,49.42935],[12.64121,49.47628],[12.64782,49.52565],[12.60155,49.52887],[12.56188,49.6146],[12.53544,49.61888],[12.52553,49.68415],[12.4462,49.70233],[12.40489,49.76321],[12.46603,49.78882],[12.48256,49.83575],[12.55197,49.92094],[12.47264,49.94222],[12.49908,49.97305],[12.30798,50.05719],[12.26111,50.06331],[12.27433,50.0771],[12.23709,50.10213],[12.2073,50.10315],[12.1917,50.13434],[12.21484,50.16399],[12.19335,50.19997],[12.09287,50.25032],[12.13716,50.27396],[12.10907,50.32041],[12.18013,50.32146],[12.20823,50.2729],[12.25119,50.27079],[12.26953,50.25189],[12.24791,50.25525],[12.23943,50.24594],[12.28755,50.22429],[12.28063,50.19544],[12.29232,50.17524],[12.32596,50.17146],[12.33847,50.19432],[12.32445,50.20442],[12.33263,50.24367],[12.35425,50.23993],[12.36594,50.28289],[12.40158,50.29521],[12.39924,50.32302],[12.43371,50.32506],[12.43722,50.33774],[12.46643,50.35527],[12.48256,50.34784],[12.49214,50.35228],[12.48747,50.37278],[12.51356,50.39694],[12.67261,50.41949],[12.70731,50.39948],[12.73044,50.42268],[12.73476,50.43237],[12.82465,50.45738],[12.94058,50.40944],[12.98433,50.42016],[13.02147,50.44763],[13.02038,50.4734],[13.0312,50.50944],[13.08301,50.50132],[13.13424,50.51709],[13.19043,50.50237],[13.25158,50.59268],[13.29454,50.57904],[13.32594,50.58009],[13.32264,50.60317],[13.37805,50.627],[13.37485,50.64931],[13.42189,50.61243],[13.46413,50.60102],[13.49742,50.63133],[13.5226,50.64721],[13.53748,50.67654],[13.52474,50.70394],[13.65977,50.73096],[13.70204,50.71771],[13.76316,50.73487],[13.82942,50.7251],[13.89444,50.74142],[13.89113,50.78533],[13.98864,50.8177],[14.02982,50.80662],[14.22331,50.86049],[14.24314,50.88761],[14.27123,50.89386],[14.30098,50.88448],[14.38691,50.89907],[14.39848,50.93866],[14.31422,50.95243],[14.30251,50.96606],[14.32793,50.97379],[14.32353,50.98556],[14.28776,50.97718],[14.25665,50.98935],[14.30098,51.05515],[14.41335,51.02086],[14.45827,51.03712],[14.49202,51.02286],[14.49154,51.04382],[14.49991,51.04692],[14.50809,51.0427],[14.49873,51.02242],[14.53321,51.01679],[14.53438,51.00374],[14.56432,51.01008],[14.58215,50.99306],[14.59908,50.98685],[14.59702,50.96148],[14.56374,50.922],[14.58024,50.91443],[14.64802,50.93241],[14.65259,50.90513],[14.63434,50.8883],[14.61993,50.86049],[14.70661,50.84096],[14.79139,50.81438],[14.82803,50.86966]]]]}},{type:"Feature",properties:{iso1A2:"MT",iso1A3:"MLT",iso1N3:"470",wikidata:"Q233",nameEn:"Malta",groups:["EU","039","150"],driveSide:"left",callingCodes:["356"]},geometry:{type:"MultiPolygon",coordinates:[[[[15.70991,35.79901],[13.27636,35.20764],[14.07544,36.41525],[15.70991,35.79901]]]]}},{type:"Feature",properties:{iso1A2:"DG",iso1A3:"DGA",wikidata:"Q184851",nameEn:"Diego Garcia",country:"GB",groups:["IO","014","202","002"],isoStatus:"excRes",callingCodes:["246"]},geometry:{type:"MultiPolygon",coordinates:[[[[73.14823,-7.76302],[73.09982,-6.07324],[71.43792,-7.73904],[73.14823,-7.76302]]]]}},{type:"Feature",properties:{iso1A2:"MU",iso1A3:"MUS",iso1N3:"480",wikidata:"Q1027",nameEn:"Mauritius",groups:["014","202","002"],driveSide:"left",callingCodes:["230"]},geometry:{type:"MultiPolygon",coordinates:[[[[56.73473,-21.9174],[56.09755,-9.55401],[63.47388,-9.1938],[64.11105,-21.5783],[56.73473,-21.9174]]]]}},{type:"Feature",properties:{iso1A2:"DK",iso1A3:"DNK",iso1N3:"208",wikidata:"Q35",nameEn:"Denmark",groups:["EU","154","150"],callingCodes:["45"]},geometry:{type:"MultiPolygon",coordinates:[[[[12.16597,56.60205],[12.07466,56.29488],[12.65312,56.04345],[12.6372,55.91371],[12.88472,55.63369],[12.60345,55.42675],[12.84405,55.13257],[14.28399,55.1553],[14.89259,55.5623],[15.79951,55.54655],[15.36991,54.73263],[13.93395,54.84044],[12.85844,54.82438],[11.90309,54.38543],[11.00303,54.63689],[10.31111,54.65968],[10.16755,54.73883],[9.89314,54.84171],[9.73563,54.8247],[9.61187,54.85548],[9.62734,54.88057],[9.58937,54.88785],[9.4659,54.83131],[9.43155,54.82586],[9.41213,54.84254],[9.38532,54.83968],[9.36496,54.81749],[9.33849,54.80233],[9.32771,54.80602],[9.2474,54.8112],[9.23445,54.83432],[9.24631,54.84726],[9.20571,54.85841],[9.14275,54.87421],[9.04629,54.87249],[8.92795,54.90452],[8.81178,54.90518],[8.76387,54.8948],[8.63979,54.91069],[8.55769,54.91837],[8.45719,55.06747],[8.02459,55.09613],[7.28637,57.35913],[10.40861,58.38489],[12.16597,56.60205]]]]}},{type:"Feature",properties:{iso1A2:"MV",iso1A3:"MDV",iso1N3:"462",wikidata:"Q826",nameEn:"Maldives",groups:["034","142"],driveSide:"left",callingCodes:["960"]},geometry:{type:"MultiPolygon",coordinates:[[[[71.27292,7.36038],[74.6203,7.39289],[73.37814,-3.88401],[71.27292,7.36038]]]]}},{type:"Feature",properties:{iso1A2:"DO",iso1A3:"DOM",iso1N3:"214",wikidata:"Q786",nameEn:"Dominican Republic",groups:["029","003","419","019"],callingCodes:["1 809","1 829","1 849"]},geometry:{type:"MultiPolygon",coordinates:[[[[-67.87844,21.7938],[-68.39466,16.14167],[-72.29523,17.48026],[-71.75671,18.03456],[-71.73783,18.07177],[-71.74994,18.11115],[-71.75465,18.14405],[-71.78271,18.18302],[-71.69952,18.34101],[-71.90875,18.45821],[-71.88102,18.50125],[-72.00201,18.62312],[-71.95412,18.64939],[-71.82556,18.62551],[-71.71885,18.78423],[-71.72624,18.87802],[-71.77766,18.95007],[-71.88102,18.95007],[-71.74088,19.0437],[-71.71088,19.08353],[-71.69938,19.10916],[-71.65337,19.11759],[-71.62642,19.21212],[-71.73229,19.26686],[-71.77766,19.33823],[-71.69448,19.37866],[-71.6802,19.45008],[-71.71268,19.53374],[-71.71449,19.55364],[-71.7429,19.58445],[-71.75865,19.70231],[-71.77419,19.73128],[-72.38946,20.27111],[-67.87844,21.7938]]]]}},{type:"Feature",properties:{iso1A2:"MW",iso1A3:"MWI",iso1N3:"454",wikidata:"Q1020",nameEn:"Malawi",groups:["014","202","002"],driveSide:"left",callingCodes:["265"]},geometry:{type:"MultiPolygon",coordinates:[[[[33.48052,-9.62442],[33.76677,-9.58516],[33.93298,-9.71647],[33.9638,-9.62206],[33.95829,-9.54066],[34.03865,-9.49398],[34.54499,-10.0678],[34.51911,-10.12279],[34.57581,-10.56271],[34.65946,-10.6828],[34.67047,-10.93796],[34.61161,-11.01611],[34.63305,-11.11731],[34.79375,-11.32245],[34.91153,-11.39799],[34.96296,-11.57354],[34.64241,-11.57499],[34.57917,-11.87849],[34.82903,-12.04837],[34.70739,-12.15652],[34.46088,-12.0174],[34.37831,-12.17408],[34.60253,-13.48487],[34.86229,-13.48958],[35.47989,-14.15594],[35.5299,-14.27714],[35.86945,-14.67481],[35.87212,-14.89478],[35.91812,-14.89514],[35.78799,-15.17428],[35.85303,-15.41913],[35.80487,-16.03907],[35.70107,-16.10147],[35.52365,-16.15414],[35.43355,-16.11371],[35.30157,-16.2211],[35.25828,-16.4792],[35.14235,-16.56812],[35.27219,-16.69402],[35.30929,-16.82871],[35.27065,-16.93817],[35.3062,-17.1244],[35.0923,-17.13235],[35.04805,-17.00027],[35.17017,-16.93521],[35.13771,-16.81687],[35.04805,-16.83167],[34.40344,-16.20923],[34.43126,-16.04737],[34.25195,-15.90321],[34.44981,-15.60864],[34.43126,-15.44778],[34.57503,-15.30619],[34.61522,-14.99583],[34.567,-14.77345],[34.54503,-14.74672],[34.52057,-14.68263],[34.53516,-14.67782],[34.55112,-14.64494],[34.53962,-14.59776],[34.52366,-14.5667],[34.49636,-14.55091],[34.48932,-14.53646],[34.47628,-14.53363],[34.45053,-14.49873],[34.44641,-14.47746],[34.4192,-14.43191],[34.39277,-14.39467],[34.35843,-14.38652],[34.34453,-14.3985],[34.22355,-14.43607],[34.18733,-14.43823],[34.08588,-14.48893],[33.92898,-14.47929],[33.88503,-14.51652],[33.7247,-14.4989],[33.66677,-14.61306],[33.24249,-14.00019],[33.16749,-13.93992],[33.07568,-13.98447],[33.02977,-14.05022],[32.99042,-13.95689],[32.88985,-13.82956],[32.79015,-13.80755],[32.76962,-13.77224],[32.84528,-13.71576],[32.7828,-13.64805],[32.68654,-13.64268],[32.66468,-13.60019],[32.68436,-13.55769],[32.73683,-13.57682],[32.84176,-13.52794],[32.86113,-13.47292],[33.0078,-13.19492],[32.98289,-13.12671],[33.02181,-12.88707],[32.96733,-12.88251],[32.94397,-12.76868],[33.05917,-12.59554],[33.18837,-12.61377],[33.28177,-12.54692],[33.37517,-12.54085],[33.54485,-12.35996],[33.47636,-12.32498],[33.3705,-12.34931],[33.25998,-12.14242],[33.33937,-11.91252],[33.32692,-11.59248],[33.24252,-11.59302],[33.23663,-11.40637],[33.29267,-11.43536],[33.29267,-11.3789],[33.39697,-11.15296],[33.25998,-10.88862],[33.28022,-10.84428],[33.47636,-10.78465],[33.70675,-10.56896],[33.54797,-10.36077],[33.53863,-10.20148],[33.31297,-10.05133],[33.37902,-9.9104],[33.36581,-9.81063],[33.31517,-9.82364],[33.2095,-9.61099],[33.12144,-9.58929],[33.10163,-9.66525],[33.05485,-9.61316],[33.00256,-9.63053],[33.00476,-9.5133],[32.95389,-9.40138],[32.99397,-9.36712],[33.14925,-9.49322],[33.31581,-9.48554],[33.48052,-9.62442]]]]}},{type:"Feature",properties:{iso1A2:"EA",wikidata:"Q28868874",nameEn:"Ceuta, Melilla",country:"ES",groups:["015","002"],isoStatus:"excRes",callingCodes:["34"]},geometry:{type:"MultiPolygon",coordinates:[[[[-5.38491,35.92591],[-5.27635,35.91222],[-5.27056,35.88794],[-5.34379,35.8711],[-5.35844,35.87375],[-5.37338,35.88417],[-5.38491,35.92591]]],[[[-2.92224,35.3401],[-2.92181,35.28599],[-2.92674,35.27313],[-2.93893,35.26737],[-2.95065,35.26576],[-2.95431,35.2728],[-2.96516,35.27967],[-2.96826,35.28296],[-2.96507,35.28801],[-2.97035,35.28852],[-2.96978,35.29459],[-2.96648,35.30475],[-2.96038,35.31609],[-2.92224,35.3401]]]]}},{type:"Feature",properties:{iso1A2:"MX",iso1A3:"MEX",iso1N3:"484",wikidata:"Q96",nameEn:"Mexico",groups:["013","003","419","019"],callingCodes:["52"]},geometry:{type:"MultiPolygon",coordinates:[[[[-117.1243,32.53427],[-115.88053,32.63624],[-114.71871,32.71894],[-114.76736,32.64094],[-114.80584,32.62028],[-114.81141,32.55543],[-114.79524,32.55731],[-114.82011,32.49609],[-112.34553,31.7357],[-111.07523,31.33232],[-109.05235,31.3333],[-108.20979,31.33316],[-108.20899,31.78534],[-106.529,31.784],[-106.52266,31.77509],[-106.51251,31.76922],[-106.50962,31.76155],[-106.50111,31.75714],[-106.48815,31.74769],[-106.47298,31.75054],[-106.46726,31.75998],[-106.45244,31.76523],[-106.43419,31.75478],[-106.41773,31.75196],[-106.38003,31.73151],[-106.3718,31.71165],[-106.34864,31.69663],[-106.33419,31.66303],[-106.30305,31.62154],[-106.28084,31.56173],[-106.24612,31.54193],[-106.23711,31.51262],[-106.20346,31.46305],[-106.09025,31.40569],[-106.00363,31.39181],[-104.77674,30.4236],[-104.5171,29.64671],[-104.3969,29.57105],[-104.39363,29.55396],[-104.37752,29.54255],[-103.15787,28.93865],[-102.60596,29.8192],[-101.47277,29.7744],[-101.05686,29.44738],[-101.01128,29.36947],[-100.96725,29.3477],[-100.94579,29.34523],[-100.94056,29.33371],[-100.87982,29.296],[-100.79696,29.24688],[-100.67294,29.09744],[-100.63689,28.90812],[-100.59809,28.88197],[-100.52313,28.75598],[-100.5075,28.74066],[-100.51222,28.70679],[-100.50029,28.66117],[-99.55409,27.61314],[-99.51478,27.55836],[-99.52955,27.49747],[-99.50208,27.50021],[-99.48045,27.49016],[-99.482,27.47128],[-99.49744,27.43746],[-99.53573,27.30926],[-99.08477,26.39849],[-99.03053,26.41249],[-99.00546,26.3925],[-98.35126,26.15129],[-98.30491,26.10475],[-98.27075,26.09457],[-98.24603,26.07191],[-97.97017,26.05232],[-97.95155,26.0625],[-97.66511,26.01708],[-97.52025,25.88518],[-97.49828,25.89877],[-97.45669,25.86874],[-97.42511,25.83969],[-97.37332,25.83854],[-97.35946,25.92189],[-97.13927,25.96583],[-96.92418,25.97377],[-85.9092,21.8218],[-86.92368,17.61462],[-87.84815,18.18511],[-87.85693,18.18266],[-87.86657,18.19971],[-87.87604,18.18313],[-87.90671,18.15213],[-88.03165,18.16657],[-88.03238,18.41778],[-88.26593,18.47617],[-88.29909,18.47591],[-88.3268,18.49048],[-88.48242,18.49164],[-88.71505,18.0707],[-88.8716,17.89535],[-89.03839,18.0067],[-89.15105,17.95104],[-89.14985,17.81563],[-90.98678,17.81655],[-90.99199,17.25192],[-91.43809,17.25373],[-91.04436,16.92175],[-90.69064,16.70697],[-90.61212,16.49832],[-90.40499,16.40524],[-90.44567,16.07573],[-91.73182,16.07371],[-92.20983,15.26077],[-92.0621,15.07406],[-92.1454,14.98143],[-92.1423,14.88647],[-92.18161,14.84147],[-92.1454,14.6804],[-92.2261,14.53423],[-92.37213,14.39277],[-120.12904,18.41089],[-118.48109,32.5991],[-117.1243,32.53427]]]]}},{type:"Feature",properties:{iso1A2:"EE",iso1A3:"EST",iso1N3:"233",wikidata:"Q191",nameEn:"Estonia",aliases:["EW"],groups:["EU","154","150"],callingCodes:["372"]},geometry:{type:"MultiPolygon",coordinates:[[[[26.32936,60.00121],[26.90044,59.63819],[27.85643,59.58538],[28.04187,59.47017],[28.19061,59.39962],[28.21137,59.38058],[28.20537,59.36491],[28.19284,59.35791],[28.14215,59.28934],[28.00689,59.28351],[27.90911,59.24353],[27.87978,59.18097],[27.80482,59.1116],[27.74429,58.98351],[27.36366,58.78381],[27.55489,58.39525],[27.48541,58.22615],[27.62393,58.09462],[27.67282,57.92627],[27.81841,57.89244],[27.78526,57.83963],[27.56689,57.83356],[27.50171,57.78842],[27.52615,57.72843],[27.3746,57.66834],[27.40393,57.62125],[27.31919,57.57672],[27.34698,57.52242],[26.90364,57.62823],[26.54675,57.51813],[26.46527,57.56885],[26.29253,57.59244],[26.1866,57.6849],[26.2029,57.7206],[26.08098,57.76619],[26.0543,57.76105],[26.03332,57.7718],[26.02415,57.76865],[26.02069,57.77169],[26.0266,57.77441],[26.027,57.78158],[26.02456,57.78342],[26.0324,57.79037],[26.05949,57.84744],[25.73499,57.90193],[25.29581,58.08288],[25.28237,57.98539],[25.19484,58.0831],[24.3579,57.87471],[24.26221,57.91787],[23.20055,57.56697],[22.80496,57.87798],[19.84909,57.57876],[20.5104,59.15546],[26.32936,60.00121]]]]}},{type:"Feature",properties:{iso1A2:"MY",iso1A3:"MYS",iso1N3:"458",wikidata:"Q833",nameEn:"Malaysia",groups:["035","142"],driveSide:"left",callingCodes:["60"]},geometry:{type:"MultiPolygon",coordinates:[[[[114.08532,4.64632],[114.07448,4.58441],[114.15813,4.57],[114.26876,4.49878],[114.32176,4.34942],[114.32176,4.2552],[114.4416,4.27588],[114.49922,4.13108],[114.64211,4.00694],[114.78539,4.12205],[114.88039,4.4257],[114.83189,4.42387],[114.77303,4.72871],[114.8266,4.75062],[114.88841,4.81905],[114.96982,4.81146],[114.99417,4.88201],[115.05038,4.90275],[115.02955,4.82087],[115.02278,4.74137],[115.04064,4.63706],[115.07737,4.53418],[115.09978,4.39123],[115.31275,4.30806],[115.36346,4.33563],[115.2851,4.42295],[115.27819,4.63661],[115.20737,4.8256],[115.15092,4.87604],[115.16236,5.01011],[115.02521,5.35005],[116.79524,7.43869],[117.17735,7.52841],[117.43832,7.3895],[117.89159,6.25755],[119.34756,5.53889],[119.44841,5.09568],[118.75416,4.59798],[118.8663,4.44172],[118.07935,4.15511],[117.89538,4.16637],[117.67641,4.16535],[117.47313,4.18857],[117.25801,4.35108],[115.90217,4.37708],[115.58276,3.93499],[115.53713,3.14776],[115.11343,2.82879],[115.1721,2.49671],[114.80706,2.21665],[114.80706,1.92351],[114.57892,1.5],[114.03788,1.44787],[113.64677,1.23933],[113.01448,1.42832],[113.021,1.57819],[112.48648,1.56516],[112.2127,1.44135],[112.15679,1.17004],[111.94553,1.12016],[111.82846,0.99349],[111.55434,0.97864],[111.22979,1.08326],[110.62374,0.873],[110.49182,0.88088],[110.35354,0.98869],[109.66397,1.60425],[109.66397,1.79972],[109.57923,1.80624],[109.53794,1.91771],[109.62558,1.99182],[109.64506,2.08014],[109.71058,2.32059],[108.10426,5.42408],[105.01437,3.24936],[104.56723,1.44271],[104.34728,1.33529],[104.12282,1.27714],[104.08072,1.35998],[104.09162,1.39694],[104.08871,1.42015],[104.07348,1.43322],[104.04622,1.44691],[104.02277,1.4438],[104.00131,1.42405],[103.93384,1.42926],[103.89565,1.42841],[103.86383,1.46288],[103.81181,1.47953],[103.76395,1.45183],[103.74161,1.4502],[103.7219,1.46108],[103.67468,1.43166],[103.62738,1.35255],[103.56591,1.19719],[103.03657,1.30383],[99.75778,3.86466],[99.31854,5.99868],[99.50117,6.44501],[99.91873,6.50233],[100.0756,6.4045],[100.12,6.42105],[100.19511,6.72559],[100.29651,6.68439],[100.30828,6.66462],[100.31618,6.66781],[100.31884,6.66423],[100.32671,6.66526],[100.32607,6.65933],[100.31929,6.65413],[100.35413,6.54932],[100.41152,6.52299],[100.41791,6.5189],[100.42351,6.51762],[100.43027,6.52389],[100.66986,6.45086],[100.74361,6.50811],[100.74822,6.46231],[100.81045,6.45086],[100.85884,6.24929],[101.10313,6.25617],[101.12618,6.19431],[101.06165,6.14161],[101.12388,6.11411],[101.087,5.9193],[101.02708,5.91013],[100.98815,5.79464],[101.14062,5.61613],[101.25755,5.71065],[101.25524,5.78633],[101.58019,5.93534],[101.69773,5.75881],[101.75074,5.79091],[101.80144,5.74505],[101.89188,5.8386],[101.91776,5.84269],[101.92819,5.85511],[101.94712,5.98421],[101.9714,6.00575],[101.97114,6.01992],[101.99209,6.04075],[102.01835,6.05407],[102.09182,6.14161],[102.07732,6.193],[102.08127,6.22679],[102.09086,6.23546],[102.46318,7.22462],[104.81582,8.03101],[109.55486,8.10026],[114.08532,4.64632]]]]}},{type:"Feature",properties:{iso1A2:"EH",iso1A3:"ESH",iso1N3:"732",wikidata:"Q6250",nameEn:"Western Sahara",groups:["015","002"],callingCodes:["212"]},geometry:{type:"MultiPolygon",coordinates:[[[[-8.66879,27.6666],[-8.66674,27.31569],[-8.66721,25.99918],[-12.0002,25.9986],[-12.00251,23.4538],[-12.14969,23.41935],[-12.36213,23.3187],[-12.5741,23.28975],[-13.00412,23.02297],[-13.10753,22.89493],[-13.15313,22.75649],[-13.08438,22.53866],[-13.01525,21.33343],[-16.95474,21.33997],[-16.99806,21.12142],[-17.0357,21.05368],[-17.0396,20.9961],[-17.06781,20.92697],[-17.0695,20.85742],[-17.0471,20.76408],[-17.35589,20.80492],[-17.21511,21.34226],[-17.02707,21.34022],[-16.9978,21.36239],[-16.44269,21.39745],[-14.78487,21.36587],[-14.47329,21.63839],[-14.48112,22.00886],[-14.1291,22.41636],[-14.10361,22.75501],[-13.75627,23.77231],[-13.00628,24.01923],[-12.92147,24.39502],[-12.12281,25.13682],[-12.06001,26.04442],[-11.62052,26.05229],[-11.38635,26.611],[-11.23622,26.72023],[-11.35695,26.8505],[-10.68417,26.90984],[-9.81998,26.71379],[-9.56957,26.90042],[-9.08698,26.98639],[-8.71787,26.9898],[-8.77527,27.66663],[-8.66879,27.6666]]]]}},{type:"Feature",properties:{iso1A2:"MZ",iso1A3:"MOZ",iso1N3:"508",wikidata:"Q1029",nameEn:"Mozambique",groups:["014","202","002"],driveSide:"left",callingCodes:["258"]},geometry:{type:"MultiPolygon",coordinates:[[[[40.74206,-10.25691],[42.99868,-12.65261],[34.51034,-26.91792],[32.35222,-26.86027],[32.29584,-26.852],[32.22302,-26.84136],[32.19409,-26.84032],[32.13315,-26.84345],[32.13409,-26.5317],[32.07352,-26.40185],[32.10435,-26.15656],[32.08599,-26.00978],[32.00916,-25.999],[31.974,-25.95387],[31.92649,-25.84216],[32.00631,-25.65044],[31.97875,-25.46356],[32.01676,-25.38117],[32.03196,-25.10785],[31.9835,-24.29983],[31.90368,-24.18892],[31.87707,-23.95293],[31.77445,-23.90082],[31.70223,-23.72695],[31.67942,-23.60858],[31.56539,-23.47268],[31.55779,-23.176],[31.30611,-22.422],[31.38336,-22.36919],[32.41234,-21.31246],[32.48236,-21.32873],[32.37115,-21.133],[32.51644,-20.91929],[32.48122,-20.63319],[32.55167,-20.56312],[32.66174,-20.56106],[32.85987,-20.27841],[32.85987,-20.16686],[32.93032,-20.03868],[33.01178,-20.02007],[33.06461,-19.77787],[32.95013,-19.67219],[32.84666,-19.68462],[32.84446,-19.48343],[32.78282,-19.47513],[32.77966,-19.36098],[32.85107,-19.29238],[32.87088,-19.09279],[32.84006,-19.0262],[32.72118,-19.02204],[32.69917,-18.94293],[32.73439,-18.92628],[32.70137,-18.84712],[32.82465,-18.77419],[32.9017,-18.7992],[32.95013,-18.69079],[32.88629,-18.58023],[32.88629,-18.51344],[33.02278,-18.4696],[33.03159,-18.35054],[32.94133,-17.99705],[33.0492,-17.60298],[32.98536,-17.55891],[32.96554,-17.48964],[33.0426,-17.3468],[33.00517,-17.30477],[32.96554,-17.11971],[32.84113,-16.92259],[32.91051,-16.89446],[32.97655,-16.70689],[32.78943,-16.70267],[32.69917,-16.66893],[32.71017,-16.59932],[32.42838,-16.4727],[32.28529,-16.43892],[32.02772,-16.43892],[31.91324,-16.41569],[31.90223,-16.34388],[31.67988,-16.19595],[31.42451,-16.15154],[31.30563,-16.01193],[31.13171,-15.98019],[30.97761,-16.05848],[30.91597,-15.99924],[30.42568,-15.9962],[30.41902,-15.62269],[30.22098,-14.99447],[33.24249,-14.00019],[33.66677,-14.61306],[33.7247,-14.4989],[33.88503,-14.51652],[33.92898,-14.47929],[34.08588,-14.48893],[34.18733,-14.43823],[34.22355,-14.43607],[34.34453,-14.3985],[34.35843,-14.38652],[34.39277,-14.39467],[34.4192,-14.43191],[34.44641,-14.47746],[34.45053,-14.49873],[34.47628,-14.53363],[34.48932,-14.53646],[34.49636,-14.55091],[34.52366,-14.5667],[34.53962,-14.59776],[34.55112,-14.64494],[34.53516,-14.67782],[34.52057,-14.68263],[34.54503,-14.74672],[34.567,-14.77345],[34.61522,-14.99583],[34.57503,-15.30619],[34.43126,-15.44778],[34.44981,-15.60864],[34.25195,-15.90321],[34.43126,-16.04737],[34.40344,-16.20923],[35.04805,-16.83167],[35.13771,-16.81687],[35.17017,-16.93521],[35.04805,-17.00027],[35.0923,-17.13235],[35.3062,-17.1244],[35.27065,-16.93817],[35.30929,-16.82871],[35.27219,-16.69402],[35.14235,-16.56812],[35.25828,-16.4792],[35.30157,-16.2211],[35.43355,-16.11371],[35.52365,-16.15414],[35.70107,-16.10147],[35.80487,-16.03907],[35.85303,-15.41913],[35.78799,-15.17428],[35.91812,-14.89514],[35.87212,-14.89478],[35.86945,-14.67481],[35.5299,-14.27714],[35.47989,-14.15594],[34.86229,-13.48958],[34.60253,-13.48487],[34.37831,-12.17408],[34.46088,-12.0174],[34.70739,-12.15652],[34.82903,-12.04837],[34.57917,-11.87849],[34.64241,-11.57499],[34.96296,-11.57354],[35.63599,-11.55927],[35.82767,-11.41081],[36.19094,-11.57593],[36.19094,-11.70008],[36.62068,-11.72884],[36.80309,-11.56836],[37.3936,-11.68949],[37.76614,-11.53352],[37.8388,-11.3123],[37.93618,-11.26228],[38.21598,-11.27289],[38.47258,-11.4199],[38.88996,-11.16978],[39.24395,-11.17433],[39.58249,-10.96043],[40.00295,-10.80255],[40.44265,-10.4618],[40.74206,-10.25691]]]]}},{type:"Feature",properties:{iso1A2:"ES",iso1A3:"ESP",iso1N3:"724",wikidata:"Q29",nameEn:"Spain",groups:["EU","039","150"],callingCodes:["34"]},geometry:{type:"MultiPolygon",coordinates:[[[[-2.41312,35.17111],[-2.44887,35.17075],[-2.44896,35.18777],[-2.41265,35.1877],[-2.41312,35.17111]]],[[[-3.90602,35.21494],[-3.90288,35.22024],[-3.88617,35.21406],[-3.88926,35.20841],[-3.90602,35.21494]]],[[[-4.30191,35.17419],[-4.29436,35.17149],[-4.30112,35.17058],[-4.30191,35.17419]]],[[[-7.27694,35.93599],[-7.37282,36.96896],[-7.39769,37.16868],[-7.41133,37.20314],[-7.41854,37.23813],[-7.43227,37.25152],[-7.43974,37.38913],[-7.46878,37.47127],[-7.51759,37.56119],[-7.41981,37.75729],[-7.33441,37.81193],[-7.27314,37.90145],[-7.24544,37.98884],[-7.12648,38.00296],[-7.10366,38.04404],[-7.05966,38.01966],[-7.00375,38.01914],[-6.93418,38.21454],[-7.09389,38.17227],[-7.15581,38.27597],[-7.32529,38.44336],[-7.265,38.61674],[-7.26174,38.72107],[-7.03848,38.87221],[-7.051,38.907],[-6.95211,39.0243],[-6.97004,39.07619],[-7.04011,39.11919],[-7.10692,39.10275],[-7.14929,39.11287],[-7.12811,39.17101],[-7.23566,39.20132],[-7.23403,39.27579],[-7.3149,39.34857],[-7.2927,39.45847],[-7.49477,39.58794],[-7.54121,39.66717],[-7.33507,39.64569],[-7.24707,39.66576],[-7.01613,39.66877],[-6.97492,39.81488],[-6.91463,39.86618],[-6.86737,40.01986],[-6.94233,40.10716],[-7.00589,40.12087],[-7.02544,40.18564],[-7.00426,40.23169],[-6.86085,40.26776],[-6.86085,40.2976],[-6.80218,40.33239],[-6.78426,40.36468],[-6.84618,40.42177],[-6.84944,40.46394],[-6.7973,40.51723],[-6.80218,40.55067],[-6.84292,40.56801],[-6.79567,40.65955],[-6.82826,40.74603],[-6.82337,40.84472],[-6.79892,40.84842],[-6.80707,40.88047],[-6.84292,40.89771],[-6.8527,40.93958],[-6.9357,41.02888],[-6.913,41.03922],[-6.88843,41.03027],[-6.84781,41.02692],[-6.80942,41.03629],[-6.79241,41.05397],[-6.75655,41.10187],[-6.77319,41.13049],[-6.69711,41.1858],[-6.68286,41.21641],[-6.65046,41.24725],[-6.55937,41.24417],[-6.38551,41.35274],[-6.38553,41.38655],[-6.3306,41.37677],[-6.26777,41.48796],[-6.19128,41.57638],[-6.29863,41.66432],[-6.44204,41.68258],[-6.49907,41.65823],[-6.54633,41.68623],[-6.56426,41.74219],[-6.51374,41.8758],[-6.56752,41.88429],[-6.5447,41.94371],[-6.58544,41.96674],[-6.61967,41.94008],[-6.75004,41.94129],[-6.76959,41.98734],[-6.81196,41.99097],[-6.82174,41.94493],[-6.94396,41.94403],[-6.95537,41.96553],[-6.98144,41.9728],[-7.01078,41.94977],[-7.07596,41.94977],[-7.08574,41.97401],[-7.14115,41.98855],[-7.18549,41.97515],[-7.18677,41.88793],[-7.32366,41.8406],[-7.37092,41.85031],[-7.42864,41.80589],[-7.42854,41.83262],[-7.44759,41.84451],[-7.45566,41.86488],[-7.49803,41.87095],[-7.52737,41.83939],[-7.62188,41.83089],[-7.58603,41.87944],[-7.65774,41.88308],[-7.69848,41.90977],[-7.84188,41.88065],[-7.88055,41.84571],[-7.88751,41.92553],[-7.90707,41.92432],[-7.92336,41.8758],[-7.9804,41.87337],[-8.01136,41.83453],[-8.0961,41.81024],[-8.16455,41.81753],[-8.16944,41.87944],[-8.19551,41.87459],[-8.2185,41.91237],[-8.16232,41.9828],[-8.08796,42.01398],[-8.08847,42.05767],[-8.11729,42.08537],[-8.18178,42.06436],[-8.19406,42.12141],[-8.18947,42.13853],[-8.1986,42.15402],[-8.22406,42.1328],[-8.24681,42.13993],[-8.2732,42.12396],[-8.29809,42.106],[-8.32161,42.10218],[-8.33912,42.08358],[-8.36353,42.09065],[-8.38323,42.07683],[-8.40143,42.08052],[-8.42512,42.07199],[-8.44123,42.08218],[-8.48185,42.0811],[-8.52837,42.07658],[-8.5252,42.06264],[-8.54563,42.0537],[-8.58086,42.05147],[-8.59493,42.05708],[-8.63791,42.04691],[-8.64626,42.03668],[-8.65832,42.02972],[-8.6681,41.99703],[-8.69071,41.98862],[-8.7478,41.96282],[-8.74606,41.9469],[-8.75712,41.92833],[-8.81794,41.90375],[-8.87157,41.86488],[-9.14112,41.86623],[-10.14298,44.17365],[-1.81005,43.59738],[-1.77289,43.38957],[-1.79319,43.37497],[-1.78332,43.36399],[-1.78714,43.35476],[-1.77068,43.34396],[-1.75334,43.34107],[-1.75079,43.3317],[-1.7397,43.32979],[-1.73074,43.29481],[-1.69407,43.31378],[-1.62481,43.30726],[-1.63052,43.28591],[-1.61341,43.25269],[-1.57674,43.25269],[-1.55963,43.28828],[-1.50992,43.29481],[-1.45289,43.27049],[-1.40942,43.27272],[-1.3758,43.24511],[-1.41562,43.12815],[-1.47555,43.08372],[-1.44067,43.047],[-1.35272,43.02658],[-1.34419,43.09665],[-1.32209,43.1127],[-1.27118,43.11961],[-1.30052,43.09581],[-1.30531,43.06859],[-1.25244,43.04164],[-1.22881,43.05534],[-1.10333,43.0059],[-1.00963,42.99279],[-0.97133,42.96239],[-0.81652,42.95166],[-0.75478,42.96916],[-0.72037,42.92541],[-0.73422,42.91228],[-0.72608,42.89318],[-0.69837,42.87945],[-0.67637,42.88303],[-0.55497,42.77846],[-0.50863,42.82713],[-0.44334,42.79939],[-0.41319,42.80776],[-0.38833,42.80132],[-0.3122,42.84788],[-0.17939,42.78974],[-0.16141,42.79535],[-0.10519,42.72761],[-0.02468,42.68513],[0.17569,42.73424],[0.25336,42.7174],[0.29407,42.67431],[0.36251,42.72282],[0.40214,42.69779],[0.67873,42.69458],[0.65421,42.75872],[0.66121,42.84021],[0.711,42.86372],[0.93089,42.79154],[0.96166,42.80629],[0.98292,42.78754],[1.0804,42.78569],[1.15928,42.71407],[1.35562,42.71944],[1.44197,42.60217],[1.42512,42.58292],[1.44529,42.56722],[1.4234,42.55959],[1.41245,42.53539],[1.44759,42.54431],[1.46661,42.50949],[1.41648,42.48315],[1.43838,42.47848],[1.44529,42.43724],[1.5127,42.42959],[1.55073,42.43299],[1.55937,42.45808],[1.57953,42.44957],[1.58933,42.46275],[1.65674,42.47125],[1.66826,42.50779],[1.70571,42.48867],[1.72515,42.50338],[1.76335,42.48863],[1.83037,42.48395],[1.88853,42.4501],[1.93663,42.45439],[1.94292,42.44316],[1.94061,42.43333],[1.94084,42.43039],[1.9574,42.42401],[1.96482,42.37787],[2.00488,42.35399],[2.06241,42.35906],[2.11621,42.38393],[2.12789,42.41291],[2.16599,42.42314],[2.20578,42.41633],[2.25551,42.43757],[2.38504,42.39977],[2.43299,42.39423],[2.43508,42.37568],[2.48457,42.33933],[2.54382,42.33406],[2.55516,42.35351],[2.57934,42.35808],[2.6747,42.33974],[2.65311,42.38771],[2.72056,42.42298],[2.75497,42.42578],[2.77464,42.41046],[2.84335,42.45724],[2.85675,42.45444],[2.86983,42.46843],[2.88413,42.45938],[2.92107,42.4573],[2.94283,42.48174],[2.96518,42.46692],[3.03734,42.47363],[3.08167,42.42748],[3.10027,42.42621],[3.11379,42.43646],[3.17156,42.43545],[3.4481,42.4358],[5.18061,39.43581],[2.46645,37.97429],[-2.27707,35.35051],[-2.85819,35.63219],[-5.10878,36.05227],[-5.64962,35.93752],[-7.27694,35.93599]],[[-5.28217,36.09907],[-5.27801,36.14942],[-5.33822,36.15272],[-5.34536,36.15501],[-5.36494,36.15496],[-5.38545,36.15481],[-5.40134,36.14896],[-5.39074,36.10278],[-5.36503,36.06205],[-5.32837,36.05935],[-5.3004,36.07439],[-5.28217,36.09907]]],[[[1.99838,42.44682],[1.98378,42.44697],[1.96125,42.45364],[1.95606,42.45785],[1.96215,42.47854],[1.97003,42.48081],[1.97227,42.48487],[1.97697,42.48568],[1.98022,42.49569],[1.98916,42.49351],[1.99766,42.4858],[1.98579,42.47486],[1.99216,42.46208],[2.01564,42.45171],[1.99838,42.44682]]]]}},{type:"Feature",properties:{iso1A2:"NA",iso1A3:"NAM",iso1N3:"516",wikidata:"Q1030",nameEn:"Namibia",groups:["018","202","002"],driveSide:"left",callingCodes:["264"]},geometry:{type:"MultiPolygon",coordinates:[[[[14.28743,-17.38814],[18.39229,-17.38927],[18.84226,-17.80375],[21.14283,-17.94318],[21.42741,-18.02787],[23.47474,-17.62877],[24.23619,-17.47489],[24.32811,-17.49082],[24.38712,-17.46818],[24.5621,-17.52963],[24.70864,-17.49501],[25.00198,-17.58221],[25.26433,-17.79571],[25.16882,-17.78253],[25.05895,-17.84452],[24.95586,-17.79674],[24.73364,-17.89338],[24.71887,-17.9218],[24.6303,-17.9863],[24.57485,-18.07151],[24.40577,-17.95726],[24.19416,-18.01919],[23.61088,-18.4881],[23.29618,-17.99855],[23.0996,-18.00075],[21.45556,-18.31795],[20.99904,-18.31743],[20.99751,-22.00026],[19.99912,-21.99991],[19.99817,-24.76768],[19.99882,-28.42622],[18.99885,-28.89165],[17.4579,-28.68718],[17.15405,-28.08573],[16.90446,-28.057],[16.59922,-28.53246],[16.46592,-28.57126],[16.45332,-28.63117],[12.51595,-32.27486],[10.5065,-17.25284],[11.75063,-17.25013],[12.07076,-17.15165],[12.52111,-17.24495],[12.97145,-16.98567],[13.36212,-16.98048],[13.95896,-17.43141],[14.28743,-17.38814]]]]}},{type:"Feature",properties:{iso1A2:"EU",iso1A3:"EUE",wikidata:"Q458",nameEn:"European Union",level:"union",isoStatus:"excRes"},geometry:null},{type:"Feature",properties:{iso1A2:"NC",iso1A3:"NCL",iso1N3:"540",wikidata:"Q33788",nameEn:"New Caledonia",country:"FR",groups:["054","009"],callingCodes:["687"]},geometry:{type:"MultiPolygon",coordinates:[[[[158.65519,-23.4036],[157.83842,-18.82563],[162.93363,-17.28904],[174.90025,-23.53966],[158.65519,-23.4036]]]]}},{type:"Feature",properties:{iso1A2:"FJ",iso1A3:"FJI",iso1N3:"242",wikidata:"Q712",nameEn:"Fiji",groups:["054","009"],driveSide:"left",callingCodes:["679"]},geometry:{type:"MultiPolygon",coordinates:[[[[174,-22.5],[174,-11.5],[179.99999,-11.5],[179.99999,-22.5],[174,-22.5]]],[[[-178.60161,-14.95666],[-176.76826,-14.95183],[-176.74538,-22.89767],[-180,-22.90585],[-180,-14.96041],[-178.60161,-14.95666]]]]}},{type:"Feature",properties:{iso1A2:"NE",iso1A3:"NER",iso1N3:"562",wikidata:"Q1032",nameEn:"Niger",aliases:["RN"],groups:["011","202","002"],callingCodes:["227"]},geometry:{type:"MultiPolygon",coordinates:[[[[14.22918,22.61719],[14.99751,23.00539],[15.19692,21.99339],[15.20213,21.49365],[15.28332,21.44557],[15.62515,20.95395],[15.57248,20.92138],[15.55382,20.86507],[15.56004,20.79488],[15.59841,20.74039],[15.6721,20.70069],[15.99632,20.35364],[15.75098,19.93002],[15.6032,18.77402],[15.50373,16.89649],[14.37425,15.72591],[13.86301,15.04043],[13.78991,14.87519],[13.809,14.72915],[13.67878,14.64013],[13.68573,14.55276],[13.48259,14.46704],[13.47559,14.40881],[13.6302,13.71094],[13.33213,13.71195],[13.19844,13.52802],[13.05085,13.53984],[12.87376,13.48919],[12.6793,13.29157],[12.58033,13.27805],[12.47095,13.06673],[12.19315,13.12423],[12.16189,13.10056],[12.04209,13.14452],[11.88236,13.2527],[11.4535,13.37773],[10.66004,13.36422],[10.46731,13.28819],[10.19993,13.27129],[10.00373,13.18171],[9.65995,12.80614],[8.97413,12.83661],[8.64251,12.93985],[8.60431,13.01768],[8.49493,13.07519],[8.41853,13.06166],[8.25185,13.20369],[8.07997,13.30847],[7.81085,13.34902],[7.39241,13.09717],[7.22399,13.1293],[7.12676,13.02445],[7.0521,13.00076],[6.94445,12.99825],[6.69617,13.34057],[6.43053,13.6006],[6.27411,13.67835],[6.15771,13.64564],[5.52957,13.8845],[5.35437,13.83567],[5.27797,13.75474],[5.21026,13.73627],[5.07396,13.75052],[4.9368,13.7345],[4.87425,13.78],[4.4668,13.68286],[4.23456,13.47725],[4.14186,13.47586],[4.14367,13.17189],[4.10006,12.98862],[3.94339,12.74979],[3.65111,12.52223],[3.66364,12.25884],[3.63136,12.11826],[3.67775,11.97599],[3.61955,11.91847],[3.63063,11.83042],[3.67122,11.80865],[3.67988,11.75429],[3.61075,11.69181],[3.59375,11.70269],[3.48187,11.86092],[3.31613,11.88495],[3.25352,12.01467],[2.83978,12.40585],[2.6593,12.30631],[2.37783,12.24804],[2.39657,12.10952],[2.45824,11.98672],[2.39723,11.89473],[2.05785,12.35539],[2.26349,12.41915],[0.99167,13.10727],[0.99253,13.37515],[1.18873,13.31771],[1.21217,13.37853],[1.24516,13.33968],[1.28509,13.35488],[1.24429,13.39373],[1.20088,13.38951],[1.02813,13.46635],[0.99514,13.5668],[0.77637,13.64442],[0.77377,13.6866],[0.61924,13.68491],[0.38051,14.05575],[0.16936,14.51654],[0.23859,15.00135],[0.72632,14.95898],[0.96711,14.98275],[1.31275,15.27978],[3.01806,15.34571],[3.03134,15.42221],[3.50368,15.35934],[4.19893,16.39923],[4.21787,17.00118],[4.26762,17.00432],[4.26651,19.14224],[5.8153,19.45101],[7.38361,20.79165],[7.48273,20.87258],[11.96886,23.51735],[13.5631,23.16574],[14.22918,22.61719]]]]}},{type:"Feature",properties:{iso1A2:"FM",iso1A3:"FSM",iso1N3:"583",wikidata:"Q702",nameEn:"Federated States of Micronesia",groups:["057","009"],roadSpeedUnit:"mph",callingCodes:["691"]},geometry:{type:"MultiPolygon",coordinates:[[[[136.04605,12.45908],[159.04653,10.59067],[165.35175,6.367],[156.88247,-1.39237],[136.27107,6.73747],[136.04605,12.45908]]]]}},{type:"Feature",properties:{iso1A2:"NF",iso1A3:"NFK",iso1N3:"574",wikidata:"Q31057",nameEn:"Norfolk Island",country:"AU",groups:["053","009"],driveSide:"left",callingCodes:["672 3"]},geometry:{type:"MultiPolygon",coordinates:[[[[169.82316,-28.16667],[167.94076,-30.60745],[166.29505,-28.29175],[169.82316,-28.16667]]]]}},{type:"Feature",properties:{iso1A2:"FR",iso1A3:"FRA",iso1N3:"250",wikidata:"Q142",nameEn:"France",groups:["EU","155","150"],callingCodes:["33"]},geometry:null},{type:"Feature",properties:{iso1A2:"NG",iso1A3:"NGA",iso1N3:"566",wikidata:"Q1033",nameEn:"Nigeria",groups:["011","202","002"],callingCodes:["234"]},geometry:{type:"MultiPolygon",coordinates:[[[[6.15771,13.64564],[6.27411,13.67835],[6.43053,13.6006],[6.69617,13.34057],[6.94445,12.99825],[7.0521,13.00076],[7.12676,13.02445],[7.22399,13.1293],[7.39241,13.09717],[7.81085,13.34902],[8.07997,13.30847],[8.25185,13.20369],[8.41853,13.06166],[8.49493,13.07519],[8.60431,13.01768],[8.64251,12.93985],[8.97413,12.83661],[9.65995,12.80614],[10.00373,13.18171],[10.19993,13.27129],[10.46731,13.28819],[10.66004,13.36422],[11.4535,13.37773],[11.88236,13.2527],[12.04209,13.14452],[12.16189,13.10056],[12.19315,13.12423],[12.47095,13.06673],[12.58033,13.27805],[12.6793,13.29157],[12.87376,13.48919],[13.05085,13.53984],[13.19844,13.52802],[13.33213,13.71195],[13.6302,13.71094],[14.08251,13.0797],[14.20204,12.53405],[14.17523,12.41916],[14.22215,12.36533],[14.4843,12.35223],[14.6474,12.17466],[14.61612,11.7798],[14.55207,11.72001],[14.64591,11.66166],[14.6124,11.51283],[14.17821,11.23831],[13.97489,11.30258],[13.78945,11.00154],[13.7403,11.00593],[13.70753,10.94451],[13.73434,10.9255],[13.54964,10.61236],[13.5705,10.53183],[13.43644,10.13326],[13.34111,10.12299],[13.25025,10.03647],[13.25323,10.00127],[13.286,9.9822],[13.27409,9.93232],[13.24132,9.91031],[13.25025,9.86042],[13.29941,9.8296],[13.25472,9.76795],[13.22642,9.57266],[13.02385,9.49334],[12.85628,9.36698],[12.91958,9.33905],[12.90022,9.11411],[12.81085,8.91992],[12.79,8.75361],[12.71701,8.7595],[12.68722,8.65938],[12.44146,8.6152],[12.4489,8.52536],[12.26123,8.43696],[12.24782,8.17904],[12.19271,8.10826],[12.20909,7.97553],[11.99908,7.67302],[12.01844,7.52981],[11.93205,7.47812],[11.84864,7.26098],[11.87396,7.09398],[11.63117,6.9905],[11.55818,6.86186],[11.57755,6.74059],[11.51499,6.60892],[11.42264,6.5882],[11.42041,6.53789],[11.09495,6.51717],[11.09644,6.68437],[10.94302,6.69325],[10.8179,6.83377],[10.83727,6.9358],[10.60789,7.06885],[10.59746,7.14719],[10.57214,7.16345],[10.53639,6.93432],[10.21466,6.88996],[10.15135,7.03781],[9.86314,6.77756],[9.77824,6.79088],[9.70674,6.51717],[9.51757,6.43874],[8.84209,5.82562],[8.88156,5.78857],[8.83687,5.68483],[8.92029,5.58403],[8.78027,5.1243],[8.60302,4.87353],[8.34397,4.30689],[5.87055,3.78489],[2.74181,6.13349],[2.70566,6.38038],[2.70464,6.50831],[2.74334,6.57291],[2.7325,6.64057],[2.78204,6.70514],[2.78823,6.76356],[2.73405,6.78508],[2.74024,6.92802],[2.71702,6.95722],[2.76965,7.13543],[2.74489,7.42565],[2.79442,7.43486],[2.78668,7.5116],[2.73405,7.5423],[2.73095,7.7755],[2.67523,7.87825],[2.77907,9.06924],[3.08017,9.10006],[3.14147,9.28375],[3.13928,9.47167],[3.25093,9.61632],[3.34726,9.70696],[3.32099,9.78032],[3.35383,9.83641],[3.54429,9.87739],[3.66908,10.18136],[3.57275,10.27185],[3.6844,10.46351],[3.78292,10.40538],[3.84243,10.59316],[3.71505,11.13015],[3.49175,11.29765],[3.59375,11.70269],[3.61075,11.69181],[3.67988,11.75429],[3.67122,11.80865],[3.63063,11.83042],[3.61955,11.91847],[3.67775,11.97599],[3.63136,12.11826],[3.66364,12.25884],[3.65111,12.52223],[3.94339,12.74979],[4.10006,12.98862],[4.14367,13.17189],[4.14186,13.47586],[4.23456,13.47725],[4.4668,13.68286],[4.87425,13.78],[4.9368,13.7345],[5.07396,13.75052],[5.21026,13.73627],[5.27797,13.75474],[5.35437,13.83567],[5.52957,13.8845],[6.15771,13.64564]]]]}},{type:"Feature",properties:{iso1A2:"GA",iso1A3:"GAB",iso1N3:"266",wikidata:"Q1000",nameEn:"Gabon",groups:["017","202","002"],callingCodes:["241"]},geometry:{type:"MultiPolygon",coordinates:[[[[13.29457,2.16106],[13.13461,1.57238],[13.25447,1.32339],[13.15519,1.23368],[13.89582,1.4261],[14.25186,1.39842],[14.48179,0.9152],[14.26066,0.57255],[14.10909,0.58563],[13.88648,0.26652],[13.90632,-0.2287],[14.06862,-0.20826],[14.2165,-0.38261],[14.41887,-0.44799],[14.52569,-0.57818],[14.41838,-1.89412],[14.25932,-1.97624],[14.23518,-2.15671],[14.16202,-2.23916],[14.23829,-2.33715],[14.10442,-2.49268],[13.85846,-2.46935],[13.92073,-2.35581],[13.75884,-2.09293],[13.47977,-2.43224],[13.02759,-2.33098],[12.82172,-1.91091],[12.61312,-1.8129],[12.44656,-1.92025],[12.47925,-2.32626],[12.04895,-2.41704],[11.96866,-2.33559],[11.74605,-2.39936],[11.57637,-2.33379],[11.64487,-2.61865],[11.5359,-2.85654],[11.64798,-2.81146],[11.80365,-3.00424],[11.70558,-3.0773],[11.70227,-3.17465],[11.96554,-3.30267],[11.8318,-3.5812],[11.92719,-3.62768],[11.87083,-3.71571],[11.68608,-3.68942],[11.57949,-3.52798],[11.48764,-3.51089],[11.22301,-3.69888],[11.12647,-3.94169],[10.75913,-4.39519],[7.24416,-0.64092],[9.35563,0.84865],[9.51998,0.96418],[9.54793,1.0185],[9.62096,1.03039],[9.66092,1.05865],[9.68638,1.06836],[9.73014,1.06721],[9.76085,1.05949],[9.78058,1.03996],[9.79648,1.0019],[11.35307,1.00251],[11.3561,2.17217],[11.37116,2.29975],[13.28534,2.25716],[13.29457,2.16106]]]]}},{type:"Feature",properties:{iso1A2:"NI",iso1A3:"NIC",iso1N3:"558",wikidata:"Q811",nameEn:"Nicaragua",groups:["013","003","419","019"],callingCodes:["505"]},geometry:{type:"MultiPolygon",coordinates:[[[[-83.13724,15.00002],[-83.04763,15.03256],[-82.06974,14.49418],[-82.56142,11.91792],[-83.68276,11.01562],[-83.66597,10.79916],[-83.90838,10.71161],[-84.68197,11.07568],[-84.92439,10.9497],[-85.60529,11.22607],[-85.71223,11.06868],[-86.14524,11.09059],[-88.11443,12.63306],[-87.7346,13.13228],[-87.55124,13.12523],[-87.37107,12.98646],[-87.06306,13.00892],[-87.03785,12.98682],[-86.93197,13.05313],[-86.93383,13.18677],[-86.87066,13.30641],[-86.71267,13.30348],[-86.76812,13.79605],[-86.35219,13.77157],[-86.14801,14.04317],[-86.00685,14.08474],[-86.03458,13.99181],[-85.75477,13.8499],[-85.73964,13.9698],[-85.45762,14.11304],[-85.32149,14.2562],[-85.18602,14.24929],[-85.1575,14.53934],[-84.90082,14.80489],[-84.82596,14.82212],[-84.70119,14.68078],[-84.48373,14.63249],[-84.10584,14.76353],[-83.89551,14.76697],[-83.62101,14.89448],[-83.49268,15.01158],[-83.13724,15.00002]]]]}},{type:"Feature",properties:{iso1A2:"GD",iso1A3:"GRD",iso1N3:"308",wikidata:"Q769",nameEn:"Grenada",aliases:["WG"],groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 473"]},geometry:{type:"MultiPolygon",coordinates:[[[[-62.14806,11.87638],[-61.73897,12.61191],[-61.38256,12.52991],[-61.13395,12.51526],[-61.57265,11.65795],[-62.14806,11.87638]]]]}},{type:"Feature",properties:{iso1A2:"NL",iso1A3:"NLD",iso1N3:"528",wikidata:"Q55",nameEn:"Netherlands",groups:["EU","155","150"],callingCodes:["31"]},geometry:{type:"MultiPolygon",coordinates:[[[[5.45168,54.20039],[6.91025,53.44221],[7.00198,53.32672],[7.19052,53.31866],[7.21679,53.20058],[7.22681,53.18165],[7.17898,53.13817],[7.21694,53.00742],[7.07253,52.81083],[7.04557,52.63318],[6.77307,52.65375],[6.71641,52.62905],[6.69507,52.488],[6.94293,52.43597],[6.99041,52.47235],[7.03417,52.40237],[7.07044,52.37805],[7.02703,52.27941],[7.06365,52.23789],[7.03729,52.22695],[6.9897,52.2271],[6.97189,52.20329],[6.83984,52.11728],[6.76117,52.11895],[6.68128,52.05052],[6.83035,51.9905],[6.82357,51.96711],[6.72319,51.89518],[6.68386,51.91861],[6.58556,51.89386],[6.50231,51.86313],[6.47179,51.85395],[6.38815,51.87257],[6.40704,51.82771],[6.30593,51.84998],[6.29872,51.86801],[6.21443,51.86801],[6.15349,51.90439],[6.11551,51.89769],[6.16902,51.84094],[6.10337,51.84829],[6.06705,51.86136],[5.99848,51.83195],[5.94568,51.82786],[5.98665,51.76944],[5.95003,51.7493],[6.04091,51.71821],[6.02767,51.6742],[6.11759,51.65609],[6.09055,51.60564],[6.18017,51.54096],[6.21724,51.48568],[6.20654,51.40049],[6.22641,51.39948],[6.22674,51.36135],[6.16977,51.33169],[6.07889,51.24432],[6.07889,51.17038],[6.17384,51.19589],[6.16706,51.15677],[5.98292,51.07469],[5.9541,51.03496],[5.9134,51.06736],[5.86735,51.05182],[5.87849,51.01969],[5.90493,51.00198],[5.90296,50.97356],[5.95282,50.98728],[6.02697,50.98303],[6.01615,50.93367],[6.09297,50.92066],[6.07486,50.89307],[6.08805,50.87223],[6.07693,50.86025],[6.07431,50.84674],[6.05702,50.85179],[6.05623,50.8572],[6.01921,50.84435],[6.02328,50.81694],[6.00462,50.80065],[5.98404,50.80988],[5.97497,50.79992],[6.02624,50.77453],[6.01976,50.75398],[5.97545,50.75441],[5.95942,50.7622],[5.89132,50.75124],[5.89129,50.75125],[5.88734,50.77092],[5.84888,50.75448],[5.84548,50.76542],[5.80673,50.7558],[5.77513,50.78308],[5.76533,50.78159],[5.74356,50.7691],[5.73904,50.75674],[5.72216,50.76398],[5.69469,50.75529],[5.68091,50.75804],[5.70107,50.7827],[5.68995,50.79641],[5.70118,50.80764],[5.65259,50.82309],[5.64009,50.84742],[5.64504,50.87107],[5.67886,50.88142],[5.69858,50.91046],[5.71626,50.90796],[5.72644,50.91167],[5.72545,50.92312],[5.74644,50.94723],[5.75927,50.95601],[5.74752,50.96202],[5.72875,50.95428],[5.71864,50.96092],[5.76242,50.99703],[5.77688,51.02483],[5.75961,51.03113],[5.77258,51.06196],[5.79835,51.05834],[5.79903,51.09371],[5.82921,51.09328],[5.83226,51.10585],[5.8109,51.10861],[5.80798,51.11661],[5.85508,51.14445],[5.82564,51.16753],[5.77697,51.1522],[5.77735,51.17845],[5.74617,51.18928],[5.70344,51.1829],[5.65528,51.18736],[5.65145,51.19788],[5.5603,51.22249],[5.5569,51.26544],[5.515,51.29462],[5.48476,51.30053],[5.46519,51.2849],[5.4407,51.28169],[5.41672,51.26248],[5.347,51.27502],[5.33886,51.26314],[5.29716,51.26104],[5.26461,51.26693],[5.23814,51.26064],[5.22542,51.26888],[5.24244,51.30495],[5.2002,51.32243],[5.16222,51.31035],[5.13377,51.31592],[5.13105,51.34791],[5.07102,51.39469],[5.10456,51.43163],[5.07891,51.4715],[5.04774,51.47022],[5.03281,51.48679],[5.0106,51.47167],[5.00393,51.44406],[4.92152,51.39487],[4.90016,51.41404],[4.84988,51.41502],[4.78941,51.41102],[4.77229,51.41337],[4.76577,51.43046],[4.78314,51.43319],[4.82946,51.4213],[4.82409,51.44736],[4.84139,51.4799],[4.78803,51.50284],[4.77321,51.50529],[4.74578,51.48937],[4.72935,51.48424],[4.65442,51.42352],[4.57489,51.4324],[4.53521,51.4243],[4.52846,51.45002],[4.54675,51.47265],[4.5388,51.48184],[4.47736,51.4778],[4.38122,51.44905],[4.39747,51.43316],[4.38064,51.41965],[4.43777,51.36989],[4.39292,51.35547],[4.34086,51.35738],[4.33265,51.37687],[4.21923,51.37443],[4.24024,51.35371],[4.16721,51.29348],[4.05165,51.24171],[4.01957,51.24504],[3.97889,51.22537],[3.90125,51.20371],[3.78783,51.2151],[3.78999,51.25766],[3.58939,51.30064],[3.51502,51.28697],[3.52698,51.2458],[3.43488,51.24135],[3.41704,51.25933],[3.38289,51.27331],[3.35847,51.31572],[3.38696,51.33436],[3.36263,51.37112],[2.56575,51.85301],[5.45168,54.20039]],[[4.93295,51.44945],[4.93909,51.44632],[4.9524,51.45014],[4.95244,51.45207],[4.93295,51.44945]],[[4.91493,51.4353],[4.92652,51.43329],[4.92952,51.42984],[4.93986,51.43064],[4.94265,51.44003],[4.93471,51.43861],[4.93416,51.44185],[4.94025,51.44193],[4.93544,51.44634],[4.92879,51.44161],[4.92815,51.43856],[4.92566,51.44273],[4.92811,51.4437],[4.92287,51.44741],[4.91811,51.44621],[4.92227,51.44252],[4.91935,51.43634],[4.91493,51.4353]]]]}},{type:"Feature",properties:{iso1A2:"GF",iso1A3:"GUF",iso1N3:"254",wikidata:"Q3769",nameEn:"French Guiana",country:"FR",groups:["EU","005","419","019"],callingCodes:["594"]},geometry:{type:"MultiPolygon",coordinates:[[[[-51.35485,4.8383],[-51.63798,4.51394],[-51.61983,4.14596],[-51.79599,3.89336],[-51.82312,3.85825],[-51.85573,3.83427],[-52.31787,3.17896],[-52.6906,2.37298],[-52.96539,2.1881],[-53.78743,2.34412],[-54.16286,2.10779],[-54.6084,2.32856],[-54.42864,2.42442],[-54.28534,2.67798],[-53.9849,3.58697],[-53.98914,3.627],[-54.05128,3.63557],[-54.19367,3.84387],[-54.38444,4.13222],[-54.4717,4.91964],[-54.26916,5.26909],[-54.01877,5.52789],[-54.01074,5.68785],[-53.7094,6.2264],[-51.35485,4.8383]]]]}},{type:"Feature",properties:{iso1A2:"NO",iso1A3:"NOR",iso1N3:"578",wikidata:"Q20",nameEn:"Norway",groups:["154","150"],callingCodes:["47"]},geometry:{type:"MultiPolygon",coordinates:[[[[10.40861,58.38489],[7.28637,57.35913],[-0.3751,61.32236],[18.46509,71.28681],[32.07813,72.01005],[31.59909,70.16571],[30.84095,69.80584],[30.95011,69.54699],[30.52662,69.54699],[30.16363,69.65244],[29.97205,69.41623],[29.27631,69.2811],[29.26623,69.13794],[29.0444,69.0119],[28.91738,69.04774],[28.81248,69.11997],[28.8629,69.22395],[29.31664,69.47994],[29.12697,69.69193],[28.36883,69.81658],[28.32849,69.88605],[27.97558,69.99671],[27.95542,70.0965],[27.57226,70.06215],[27.05802,69.92069],[26.64461,69.96565],[26.40261,69.91377],[25.96904,69.68397],[25.69679,69.27039],[25.75729,68.99383],[25.61613,68.89602],[25.42455,68.90328],[25.12206,68.78684],[25.10189,68.63307],[24.93048,68.61102],[24.90023,68.55579],[24.74898,68.65143],[24.18432,68.73936],[24.02299,68.81601],[23.781,68.84514],[23.68017,68.70276],[23.13064,68.64684],[22.53321,68.74393],[22.38367,68.71561],[22.27276,68.89514],[21.63833,69.27485],[21.27827,69.31281],[21.00732,69.22755],[20.98641,69.18809],[21.11099,69.10291],[21.05775,69.0356],[20.72171,69.11874],[20.55258,69.06069],[20.0695,69.04469],[20.28444,68.93283],[20.33435,68.80174],[20.22027,68.67246],[19.95647,68.55546],[20.22027,68.48759],[19.93508,68.35911],[18.97255,68.52416],[18.63032,68.50849],[18.39503,68.58672],[18.1241,68.53721],[18.13836,68.20874],[17.90787,67.96537],[17.30416,68.11591],[16.7409,67.91037],[16.38441,67.52923],[16.12774,67.52106],[16.09922,67.4364],[16.39154,67.21653],[16.35589,67.06419],[15.37197,66.48217],[15.49318,66.28509],[15.05113,66.15572],[14.53778,66.12399],[14.50926,65.31786],[13.64276,64.58402],[14.11117,64.46674],[14.16051,64.18725],[13.98222,64.00953],[13.23411,64.09087],[12.74105,64.02171],[12.14928,63.59373],[12.19919,63.47935],[11.98529,63.27487],[12.19919,63.00104],[12.07085,62.6297],[12.29187,62.25699],[12.14746,61.7147],[12.40595,61.57226],[12.57707,61.56547],[12.86939,61.35427],[12.69115,61.06584],[12.2277,61.02442],[12.59133,60.50559],[12.52003,60.13846],[12.36317,59.99259],[12.15641,59.8926],[11.87121,59.86039],[11.92112,59.69531],[11.69297,59.59442],[11.8213,59.24985],[11.65732,58.90177],[11.45199,58.89604],[11.4601,58.99022],[11.34459,59.11672],[11.15367,59.07862],[11.08911,58.98745],[10.64958,58.89391],[10.40861,58.38489]]]]}},{type:"Feature",properties:{iso1A2:"GH",iso1A3:"GHA",iso1N3:"288",wikidata:"Q117",nameEn:"Ghana",groups:["011","202","002"],callingCodes:["233"]},geometry:{type:"MultiPolygon",coordinates:[[[[-0.13493,11.14075],[-0.14462,11.10811],[-0.05733,11.08628],[-0.0275,11.11202],[-0.00514,11.10763],[0.00342,11.08317],[0.02395,11.06229],[0.03355,10.9807],[-0.0063,10.96417],[-0.00908,10.91644],[-0.02685,10.8783],[-0.0228,10.81916],[-0.07183,10.76794],[-0.07327,10.71845],[-0.09141,10.7147],[-0.05945,10.63458],[0.12886,10.53149],[0.18846,10.4096],[0.29453,10.41546],[0.33028,10.30408],[0.39584,10.31112],[0.35293,10.09412],[0.41371,10.06361],[0.41252,10.02018],[0.36366,10.03309],[0.32075,9.72781],[0.34816,9.71607],[0.34816,9.66907],[0.32313,9.6491],[0.28261,9.69022],[0.26712,9.66437],[0.29334,9.59387],[0.36008,9.6256],[0.38153,9.58682],[0.23851,9.57389],[0.2409,9.52335],[0.30406,9.521],[0.31241,9.50337],[0.2254,9.47869],[0.25758,9.42696],[0.33148,9.44812],[0.36485,9.49749],[0.49118,9.48339],[0.56388,9.40697],[0.45424,9.04581],[0.52455,8.87746],[0.37319,8.75262],[0.47211,8.59945],[0.64731,8.48866],[0.73432,8.29529],[0.63897,8.25873],[0.5913,8.19622],[0.61156,8.18324],[0.6056,8.13959],[0.58891,8.12779],[0.62943,7.85751],[0.58295,7.62368],[0.51979,7.58706],[0.52455,7.45354],[0.57223,7.39326],[0.62943,7.41099],[0.65327,7.31643],[0.59606,7.01252],[0.52217,6.9723],[0.52098,6.94391],[0.56508,6.92971],[0.52853,6.82921],[0.57406,6.80348],[0.58176,6.76049],[0.6497,6.73682],[0.63659,6.63857],[0.74862,6.56517],[0.71048,6.53083],[0.89283,6.33779],[0.99652,6.33779],[1.03108,6.24064],[1.05969,6.22998],[1.09187,6.17074],[1.19966,6.17069],[1.19771,6.11522],[1.27574,5.93551],[1.07031,5.15655],[-3.34019,4.17519],[-3.10675,5.08515],[-3.11073,5.12675],[-3.063,5.13665],[-2.96554,5.10397],[-2.95261,5.12477],[-2.75502,5.10657],[-2.73074,5.1364],[-2.77625,5.34621],[-2.72737,5.34789],[-2.76614,5.60963],[-2.85378,5.65156],[-2.93132,5.62137],[-2.96671,5.6415],[-2.95323,5.71865],[-3.01896,5.71697],[-3.25999,6.62521],[-3.21954,6.74407],[-3.23327,6.81744],[-2.95438,7.23737],[-2.97822,7.27165],[-2.92339,7.60847],[-2.79467,7.86002],[-2.78395,7.94974],[-2.74819,7.92613],[-2.67787,8.02055],[-2.61232,8.02645],[-2.62901,8.11495],[-2.49037,8.20872],[-2.58243,8.7789],[-2.66357,9.01771],[-2.77799,9.04949],[-2.69814,9.22717],[-2.68802,9.49343],[-2.76534,9.56589],[-2.74174,9.83172],[-2.83108,10.40252],[-2.94232,10.64281],[-2.83373,11.0067],[-0.67143,10.99811],[-0.61937,10.91305],[-0.44298,11.04292],[-0.42391,11.11661],[-0.38219,11.12596],[-0.35955,11.07801],[-0.28566,11.12713],[-0.27374,11.17157],[-0.13493,11.14075]]]]}},{type:"Feature",properties:{iso1A2:"NP",iso1A3:"NPL",iso1N3:"524",wikidata:"Q837",nameEn:"Nepal",groups:["034","142"],driveSide:"left",callingCodes:["977"]},geometry:{type:"MultiPolygon",coordinates:[[[[88.13378,27.88015],[88.1973,27.85067],[88.19107,27.79285],[88.04008,27.49223],[88.07277,27.43007],[88.01646,27.21612],[88.01587,27.21388],[87.9887,27.11045],[88.11719,26.98758],[88.13422,26.98705],[88.12302,26.95324],[88.19107,26.75516],[88.1659,26.68177],[88.16452,26.64111],[88.09963,26.54195],[88.09414,26.43732],[88.00895,26.36029],[87.90115,26.44923],[87.89085,26.48565],[87.84193,26.43663],[87.7918,26.46737],[87.76004,26.40711],[87.67893,26.43501],[87.66803,26.40294],[87.59175,26.38342],[87.55274,26.40596],[87.51571,26.43106],[87.46566,26.44058],[87.37314,26.40815],[87.34568,26.34787],[87.26568,26.37294],[87.26587,26.40592],[87.24682,26.4143],[87.18863,26.40558],[87.14751,26.40542],[87.09147,26.45039],[87.0707,26.58571],[87.04691,26.58685],[87.01559,26.53228],[86.95912,26.52076],[86.94543,26.52076],[86.82898,26.43919],[86.76797,26.45892],[86.74025,26.42386],[86.69124,26.45169],[86.62686,26.46891],[86.61313,26.48658],[86.57073,26.49825],[86.54258,26.53819],[86.49726,26.54218],[86.31564,26.61925],[86.26235,26.61886],[86.22513,26.58863],[86.13596,26.60651],[86.02729,26.66756],[85.8492,26.56667],[85.85126,26.60866],[85.83126,26.61134],[85.76907,26.63076],[85.72315,26.67471],[85.73483,26.79613],[85.66239,26.84822],[85.61621,26.86721],[85.59461,26.85161],[85.5757,26.85955],[85.56471,26.84133],[85.47752,26.79292],[85.34302,26.74954],[85.21159,26.75933],[85.18046,26.80519],[85.19291,26.86909],[85.15883,26.86966],[85.02635,26.85381],[85.05592,26.88991],[85.00536,26.89523],[84.97186,26.9149],[84.96687,26.95599],[84.85754,26.98984],[84.82913,27.01989],[84.793,26.9968],[84.64496,27.04669],[84.69166,27.21294],[84.62161,27.33885],[84.29315,27.39],[84.25735,27.44941],[84.21376,27.45218],[84.10791,27.52399],[84.02229,27.43836],[83.93306,27.44939],[83.86182,27.4241],[83.85595,27.35797],[83.61288,27.47013],[83.39495,27.4798],[83.38872,27.39276],[83.35136,27.33885],[83.29999,27.32778],[83.2673,27.36235],[83.27197,27.38309],[83.19413,27.45632],[82.94938,27.46036],[82.93261,27.50328],[82.74119,27.49838],[82.70378,27.72122],[82.46405,27.6716],[82.06554,27.92222],[81.97214,27.93322],[81.91223,27.84995],[81.47867,28.08303],[81.48179,28.12148],[81.38683,28.17638],[81.32923,28.13521],[81.19847,28.36284],[81.08507,28.38346],[80.89648,28.47237],[80.55142,28.69182],[80.50575,28.6706],[80.52443,28.54897],[80.44504,28.63098],[80.37188,28.63371],[80.12125,28.82346],[80.06957,28.82763],[80.05743,28.91479],[80.18085,29.13649],[80.23178,29.11626],[80.26602,29.13938],[80.24112,29.21414],[80.28626,29.20327],[80.31428,29.30784],[80.24322,29.44299],[80.37939,29.57098],[80.41858,29.63581],[80.38428,29.68513],[80.36803,29.73865],[80.41554,29.79451],[80.43458,29.80466],[80.48997,29.79566],[80.56247,29.86661],[80.56957,29.88176],[80.60226,29.95732],[80.67076,29.95732],[80.8778,30.13384],[80.93695,30.18229],[81.03953,30.20059],[81.12842,30.01395],[81.24362,30.0126],[81.29032,30.08806],[81.2623,30.14596],[81.33355,30.15303],[81.39928,30.21862],[81.41018,30.42153],[81.62033,30.44703],[81.99082,30.33423],[82.10135,30.35439],[82.10757,30.23745],[82.19475,30.16884],[82.16984,30.0692],[82.38622,30.02608],[82.5341,29.9735],[82.73024,29.81695],[83.07116,29.61957],[83.28131,29.56813],[83.44787,29.30513],[83.63156,29.16249],[83.82303,29.30513],[83.97559,29.33091],[84.18107,29.23451],[84.24801,29.02783],[84.2231,28.89571],[84.47528,28.74023],[84.62317,28.73887],[84.85511,28.58041],[85.06059,28.68562],[85.19135,28.62825],[85.18668,28.54076],[85.10729,28.34092],[85.38127,28.28336],[85.4233,28.32996],[85.59765,28.30529],[85.60854,28.25045],[85.69105,28.38475],[85.71907,28.38064],[85.74864,28.23126],[85.84672,28.18187],[85.90743,28.05144],[85.97813,27.99023],[85.94946,27.9401],[86.06309,27.90021],[86.12069,27.93047],[86.08333,28.02121],[86.088,28.09264],[86.18607,28.17364],[86.22966,27.9786],[86.42736,27.91122],[86.51609,27.96623],[86.56265,28.09569],[86.74181,28.10638],[86.75582,28.04182],[87.03757,27.94835],[87.11696,27.84104],[87.56996,27.84517],[87.72718,27.80938],[87.82681,27.95248],[88.13378,27.88015]]]]}},{type:"Feature",properties:{iso1A2:"GL",iso1A3:"GRL",iso1N3:"304",wikidata:"Q223",nameEn:"Greenland",country:"DK",groups:["021","003","019"],callingCodes:["299"]},geometry:{type:"MultiPolygon",coordinates:[[[[-45.47832,84.58738],[-5.7106,84.28058],[-9.68082,72.73731],[-46.37635,57.3249],[-76.75614,76.72014],[-68.21821,80.48551],[-45.47832,84.58738]]]]}},{type:"Feature",properties:{iso1A2:"NR",iso1A3:"NRU",iso1N3:"520",wikidata:"Q697",nameEn:"Nauru",groups:["057","009"],driveSide:"left",callingCodes:["674"]},geometry:{type:"MultiPolygon",coordinates:[[[[166.95155,0.14829],[167.60042,-0.88259],[166.21778,-0.7977],[166.95155,0.14829]]]]}},{type:"Feature",properties:{iso1A2:"GN",iso1A3:"GIN",iso1N3:"324",wikidata:"Q1006",nameEn:"Guinea",groups:["011","202","002"],callingCodes:["224"]},geometry:{type:"MultiPolygon",coordinates:[[[[-11.37536,12.40788],[-11.50006,12.17826],[-11.24136,12.01286],[-10.99758,12.24634],[-10.80355,12.1053],[-10.71897,11.91552],[-10.30604,12.24634],[-9.714,12.0226],[-9.63938,12.18312],[-9.32097,12.29009],[-9.38067,12.48446],[-9.13689,12.50875],[-8.94784,12.34842],[-8.80854,11.66715],[-8.40058,11.37466],[-8.66923,10.99397],[-8.35083,11.06234],[-8.2667,10.91762],[-8.32614,10.69273],[-8.22711,10.41722],[-8.10207,10.44649],[-7.9578,10.2703],[-7.97971,10.17117],[-8.01225,10.1021],[-8.11921,10.04577],[-8.15652,9.94288],[-8.09434,9.86936],[-8.14657,9.55062],[-8.03463,9.39604],[-7.85056,9.41812],[-7.90777,9.20456],[-7.73862,9.08422],[-7.92518,8.99332],[-7.95503,8.81146],[-7.69882,8.66148],[-7.65653,8.36873],[-7.92518,8.50652],[-8.22991,8.48438],[-8.2411,8.24196],[-8.062,8.16071],[-7.98675,8.20134],[-7.99919,8.11023],[-7.94695,8.00925],[-8.06449,8.04989],[-8.13414,7.87991],[-8.09931,7.78626],[-8.21374,7.54466],[-8.4003,7.6285],[-8.47114,7.55676],[-8.55874,7.62525],[-8.55874,7.70167],[-8.67814,7.69428],[-8.72789,7.51429],[-8.8448,7.35149],[-8.85724,7.26019],[-8.93435,7.2824],[-9.09107,7.1985],[-9.18311,7.30461],[-9.20798,7.38109],[-9.305,7.42056],[-9.41943,7.41809],[-9.48161,7.37122],[-9.37465,7.62032],[-9.35724,7.74111],[-9.44928,7.9284],[-9.41445,8.02448],[-9.50898,8.18455],[-9.47415,8.35195],[-9.77763,8.54633],[-10.05873,8.42578],[-10.05375,8.50697],[-10.14579,8.52665],[-10.203,8.47991],[-10.27575,8.48711],[-10.37257,8.48941],[-10.54891,8.31174],[-10.63934,8.35326],[-10.70565,8.29235],[-10.61422,8.5314],[-10.47707,8.67669],[-10.56197,8.81225],[-10.5783,9.06386],[-10.74484,9.07998],[-10.6534,9.29919],[-11.2118,10.00098],[-11.89624,9.99763],[-11.91023,9.93927],[-12.12634,9.87203],[-12.24262,9.92386],[-12.47254,9.86834],[-12.76788,9.3133],[-12.94095,9.26335],[-13.08953,9.0409],[-13.18586,9.0925],[-13.29911,9.04245],[-14.36218,8.64107],[-15.96748,10.162],[-15.07174,10.89557],[-14.95993,10.99244],[-14.77786,11.36323],[-14.66677,11.51188],[-14.51173,11.49708],[-14.31513,11.60713],[-14.26623,11.67486],[-14.09799,11.63649],[-13.7039,11.70195],[-13.7039,12.00869],[-13.94589,12.16869],[-13.92745,12.24077],[-13.70851,12.24978],[-13.64168,12.42764],[-13.65089,12.49515],[-13.7039,12.60313],[-13.70523,12.68013],[-13.05296,12.64003],[-13.06603,12.49342],[-12.87336,12.51892],[-12.35415,12.32758],[-11.91331,12.42008],[-11.46267,12.44559],[-11.37536,12.40788]]]]}},{type:"Feature",properties:{iso1A2:"NU",iso1A3:"NIU",iso1N3:"570",wikidata:"Q34020",nameEn:"Niue",country:"NZ",groups:["061","009"],driveSide:"left",callingCodes:["683"]},geometry:{type:"MultiPolygon",coordinates:[[[[-173.13438,-14.94228],[-171.14262,-14.93704],[-167.73854,-14.92809],[-167.73129,-23.22266],[-173.11048,-23.23027],[-173.13438,-14.94228]]]]}},{type:"Feature",properties:{iso1A2:"GQ",iso1A3:"GNQ",iso1N3:"226",wikidata:"Q983",nameEn:"Equatorial Guinea",groups:["017","202","002"],callingCodes:["240"]},geometry:{type:"MultiPolygon",coordinates:[[[[9.22018,3.72052],[9.81162,2.33797],[9.82123,2.35097],[9.83754,2.32428],[9.83238,2.29079],[9.84716,2.24676],[9.89012,2.20457],[9.90749,2.20049],[9.991,2.16561],[11.3561,2.17217],[11.35307,1.00251],[9.79648,1.0019],[9.78058,1.03996],[9.76085,1.05949],[9.73014,1.06721],[9.68638,1.06836],[9.66092,1.05865],[9.62096,1.03039],[9.54793,1.0185],[9.51998,0.96418],[9.35563,0.84865],[7.24416,-0.64092],[5.3459,-2.30107],[5.38965,-1.19244],[6.69416,-0.53945],[8.0168,1.79377],[8.05799,3.48284],[8.34397,4.30689],[9.22018,3.72052]]]]}},{type:"Feature",properties:{iso1A2:"NZ",iso1A3:"NZL",iso1N3:"554",wikidata:"Q664",nameEn:"New Zealand",groups:["053","009"],driveSide:"left",callingCodes:["64"]},geometry:{type:"MultiPolygon",coordinates:[[[[-180,-24.21376],[-155.99562,-45.16785],[-179.93224,-45.18423],[-180,-24.21376]]],[[[161.96603,-56.07661],[169.6687,-29.09191],[179.49541,-36.79303],[179.49541,-50.04657],[161.96603,-56.07661]]]]}},{type:"Feature",properties:{iso1A2:"GS",iso1A3:"SGS",iso1N3:"239",wikidata:"Q35086",nameEn:"South Georgia and South Sandwich Islands",country:"GB",groups:["005","419","019"],driveSide:"left",callingCodes:["500"]},geometry:{type:"MultiPolygon",coordinates:[[[[-35.26394,-43.68272],[-22.31757,-59.85974],[-53.39656,-59.87088],[-35.26394,-43.68272]]]]}},{type:"Feature",properties:{iso1A2:"OM",iso1A3:"OMN",iso1N3:"512",wikidata:"Q842",nameEn:"Oman",groups:["145","142"],callingCodes:["968"]},geometry:{type:"MultiPolygon",coordinates:[[[[56.82555,25.7713],[56.26534,25.62825],[56.25341,25.61443],[56.26636,25.60643],[56.25365,25.60211],[56.20473,25.61119],[56.18363,25.65508],[56.14826,25.66351],[56.13579,25.73524],[56.17416,25.77239],[56.13963,25.82765],[56.19334,25.9795],[56.15498,26.06828],[56.08666,26.05038],[55.81777,26.18798],[56.2644,26.58649],[56.68954,26.76645],[56.79239,26.41236],[56.82555,25.7713]]],[[[56.26062,25.33108],[56.3005,25.31815],[56.3111,25.30107],[56.35172,25.30681],[56.34438,25.26653],[56.27628,25.23404],[56.24341,25.22867],[56.20872,25.24104],[56.20838,25.25668],[56.24465,25.27505],[56.25008,25.28843],[56.23362,25.31253],[56.26062,25.33108]],[[56.28423,25.26344],[56.29379,25.2754],[56.28102,25.28486],[56.2716,25.27916],[56.27086,25.26128],[56.28423,25.26344]]],[[[61.45114,22.55394],[56.66759,17.24021],[53.32998,16.16312],[53.09917,16.67084],[52.81185,17.28568],[52.74267,17.29519],[52.78009,17.35124],[52.00311,19.00083],[54.99756,20.00083],[55.66469,21.99658],[55.2137,22.71065],[55.22634,23.10378],[55.57358,23.669],[55.48677,23.94946],[55.73301,24.05994],[55.8308,24.01633],[56.01799,24.07426],[55.95472,24.2172],[55.83367,24.20193],[55.77658,24.23476],[55.76558,24.23227],[55.75257,24.23466],[55.75382,24.2466],[55.75939,24.26114],[55.76781,24.26209],[55.79145,24.27914],[55.80747,24.31069],[55.83395,24.32776],[55.83271,24.41521],[55.76461,24.5287],[55.83271,24.68567],[55.83408,24.77858],[55.81348,24.80102],[55.81116,24.9116],[55.85094,24.96858],[55.90849,24.96771],[55.96316,25.00857],[56.05715,24.95727],[56.05106,24.87461],[55.97467,24.89639],[55.97836,24.87673],[56.03535,24.81161],[56.06128,24.74457],[56.13684,24.73699],[56.20062,24.78565],[56.20568,24.85063],[56.30269,24.88334],[56.34873,24.93205],[56.3227,24.97284],[56.86325,25.03856],[61.45114,22.55394]]]]}},{type:"Feature",properties:{iso1A2:"GU",iso1A3:"GUM",iso1N3:"316",wikidata:"Q16635",nameEn:"Guam",country:"US",groups:["057","009"],roadSpeedUnit:"mph",callingCodes:["1 671"]},geometry:{type:"MultiPolygon",coordinates:[[[[146.25931,13.85876],[144.61642,12.82462],[143.82485,13.92273],[146.25931,13.85876]]]]}},{type:"Feature",properties:{iso1A2:"PA",iso1A3:"PAN",iso1N3:"591",wikidata:"Q804",nameEn:"Panama",groups:["013","003","419","019"],callingCodes:["507"]},geometry:{type:"MultiPolygon",coordinates:[[[[-77.32389,8.81247],[-77.45064,8.49991],[-77.17257,7.97422],[-77.57185,7.51147],[-77.72514,7.72348],[-77.72157,7.47612],[-77.81426,7.48319],[-77.89178,7.22681],[-78.06168,7.07793],[-82.13751,6.97312],[-82.94503,7.93865],[-82.89978,8.04083],[-82.89137,8.05755],[-82.88641,8.10219],[-82.9388,8.26634],[-83.05209,8.33394],[-82.93056,8.43465],[-82.8679,8.44042],[-82.8382,8.48117],[-82.83322,8.52464],[-82.83975,8.54755],[-82.82739,8.60153],[-82.8794,8.6981],[-82.92068,8.74832],[-82.91377,8.774],[-82.88253,8.83331],[-82.72126,8.97125],[-82.93516,9.07687],[-82.93516,9.46741],[-82.84871,9.4973],[-82.87919,9.62645],[-82.77206,9.59573],[-82.66667,9.49746],[-82.61345,9.49881],[-82.56507,9.57279],[-82.51044,9.65379],[-78.79327,9.93766],[-77.58292,9.22278],[-77.32389,8.81247]]]]}},{type:"Feature",properties:{iso1A2:"GY",iso1A3:"GUY",iso1N3:"328",wikidata:"Q734",nameEn:"Guyana",groups:["005","419","019"],driveSide:"left",callingCodes:["592"]},geometry:{type:"MultiPolygon",coordinates:[[[[-56.84822,6.73257],[-57.31629,5.33714],[-57.22536,5.15605],[-57.37442,5.0208],[-57.8699,4.89394],[-58.0307,3.95513],[-57.35891,3.32121],[-56.70519,2.02964],[-56.55439,2.02003],[-56.47045,1.95135],[-56.7659,1.89509],[-57.07092,1.95304],[-57.09109,2.01854],[-57.23981,1.95808],[-57.35073,1.98327],[-57.55743,1.69605],[-57.77281,1.73344],[-57.97336,1.64566],[-58.01873,1.51966],[-58.33887,1.58014],[-58.4858,1.48399],[-58.53571,1.29154],[-58.84229,1.17749],[-58.92072,1.31293],[-59.25583,1.40559],[-59.74066,1.87596],[-59.7264,2.27497],[-59.91177,2.36759],[-59.99733,2.92312],[-59.79769,3.37162],[-59.86899,3.57089],[-59.51963,3.91951],[-59.73353,4.20399],[-59.69361,4.34069],[-59.78878,4.45637],[-60.15953,4.53456],[-60.04189,4.69801],[-59.98129,5.07097],[-60.20944,5.28754],[-60.32352,5.21299],[-60.73204,5.20931],[-61.4041,5.95304],[-61.15058,6.19558],[-61.20762,6.58174],[-61.13632,6.70922],[-60.54873,6.8631],[-60.39419,6.94847],[-60.28074,7.1162],[-60.44116,7.20817],[-60.54098,7.14804],[-60.63367,7.25061],[-60.59802,7.33194],[-60.71923,7.55817],[-60.64793,7.56877],[-60.51959,7.83373],[-60.38056,7.8302],[-60.02407,8.04557],[-59.97059,8.20791],[-59.83156,8.23261],[-59.80661,8.28906],[-59.85562,8.35213],[-59.98508,8.53046],[-59.54058,8.6862],[-56.84822,6.73257]]]]}},{type:"Feature",properties:{iso1A2:"PE",iso1A3:"PER",iso1N3:"604",wikidata:"Q419",nameEn:"Peru",groups:["005","419","019"],callingCodes:["51"]},geometry:{type:"MultiPolygon",coordinates:[[[[-74.26675,-0.97229],[-73.65312,-1.26222],[-72.92587,-2.44514],[-71.75223,-2.15058],[-70.94377,-2.23142],[-70.04609,-2.73906],[-70.71396,-3.7921],[-70.52393,-3.87553],[-70.3374,-3.79505],[-69.94708,-4.2431],[-70.00888,-4.37833],[-70.11305,-4.27281],[-70.19582,-4.3607],[-70.33236,-4.15214],[-70.77601,-4.15717],[-70.96814,-4.36915],[-71.87003,-4.51661],[-72.64391,-5.0391],[-72.83973,-5.14765],[-73.24579,-6.05764],[-73.12983,-6.43852],[-73.73986,-6.87919],[-73.77011,-7.28944],[-73.96938,-7.58465],[-73.65485,-7.77897],[-73.76576,-7.89884],[-72.92886,-9.04074],[-73.21498,-9.40904],[-72.72216,-9.41397],[-72.31883,-9.5184],[-72.14742,-9.98049],[-71.23394,-9.9668],[-70.53373,-9.42628],[-70.58453,-9.58303],[-70.55429,-9.76692],[-70.62487,-9.80666],[-70.64134,-11.0108],[-70.51395,-10.92249],[-70.38791,-11.07096],[-69.90896,-10.92744],[-69.57835,-10.94051],[-69.57156,-10.94555],[-68.98115,-11.8979],[-68.65044,-12.50689],[-68.85615,-12.87769],[-68.8864,-13.40792],[-69.05265,-13.68546],[-68.88135,-14.18639],[-69.36254,-14.94634],[-69.14856,-15.23478],[-69.40336,-15.61358],[-69.20291,-16.16668],[-69.09986,-16.22693],[-68.96238,-16.194],[-68.79464,-16.33272],[-68.98358,-16.42165],[-69.04027,-16.57214],[-69.00853,-16.66769],[-69.16896,-16.72233],[-69.62883,-17.28142],[-69.46863,-17.37466],[-69.46897,-17.4988],[-69.66483,-17.65083],[-69.79087,-17.65563],[-69.82868,-17.72048],[-69.75305,-17.94605],[-69.81607,-18.12582],[-69.96732,-18.25992],[-70.16394,-18.31737],[-70.31267,-18.31258],[-70.378,-18.3495],[-70.59118,-18.35072],[-85.71054,-21.15413],[-84.52388,-3.36941],[-80.30602,-3.39149],[-80.20647,-3.431],[-80.24123,-3.46124],[-80.24475,-3.47846],[-80.24586,-3.48677],[-80.23651,-3.48652],[-80.22629,-3.501],[-80.20535,-3.51667],[-80.21642,-3.5888],[-80.19848,-3.59249],[-80.18741,-3.63994],[-80.19926,-3.68894],[-80.13232,-3.90317],[-80.46386,-4.01342],[-80.4822,-4.05477],[-80.45023,-4.20938],[-80.32114,-4.21323],[-80.46386,-4.41516],[-80.39256,-4.48269],[-80.13945,-4.29786],[-79.79722,-4.47558],[-79.59402,-4.46848],[-79.26248,-4.95167],[-79.1162,-4.97774],[-79.01659,-5.01481],[-78.85149,-4.66795],[-78.68394,-4.60754],[-78.34362,-3.38633],[-78.24589,-3.39907],[-78.22642,-3.51113],[-78.14324,-3.47653],[-78.19369,-3.36431],[-77.94147,-3.05454],[-76.6324,-2.58397],[-76.05203,-2.12179],[-75.57429,-1.55961],[-75.3872,-0.9374],[-75.22862,-0.95588],[-75.22862,-0.60048],[-75.53615,-0.19213],[-75.60169,-0.18708],[-75.61997,-0.10012],[-75.40192,-0.17196],[-75.25764,-0.11943],[-75.18513,-0.0308],[-74.42701,-0.50218],[-74.26675,-0.97229]]]]}},{type:"Feature",properties:{iso1A2:"HM",iso1A3:"HMD",iso1N3:"334",wikidata:"Q131198",nameEn:"Heard Island and McDonald Islands",country:"AU",groups:["053","009"],driveSide:"left"},geometry:{type:"MultiPolygon",coordinates:[[[[71.08716,-53.87687],[72.87012,-51.48322],[75.44182,-53.99822],[71.08716,-53.87687]]]]}},{type:"Feature",properties:{iso1A2:"PF",iso1A3:"PYF",iso1N3:"258",wikidata:"Q30971",nameEn:"French Polynesia",country:"FR",groups:["061","009"],callingCodes:["689"]},geometry:{type:"MultiPolygon",coordinates:[[[[-149.6249,-7.51261],[-133.65593,-7.46952],[-133.61511,-21.93325],[-133.59543,-28.4709],[-156.44843,-28.52556],[-156.46451,-23.21255],[-156.4957,-12.32002],[-149.61166,-12.30171],[-149.6249,-7.51261]]]]}},{type:"Feature",properties:{iso1A2:"HR",iso1A3:"HRV",iso1N3:"191",wikidata:"Q224",nameEn:"Croatia",groups:["EU","039","150"],callingCodes:["385"]},geometry:{type:"MultiPolygon",coordinates:[[[[17.6444,42.88641],[17.68151,42.92725],[17.7948,42.89556],[17.80854,42.9182],[17.88201,42.83668],[18.24318,42.6112],[18.36197,42.61423],[18.43735,42.55921],[18.44307,42.51077],[18.43588,42.48556],[18.52152,42.42302],[18.54128,42.39171],[18.45131,42.21682],[16.15283,42.18525],[13.12821,44.48877],[13.05142,45.33128],[13.45644,45.59464],[13.56979,45.4895],[13.62902,45.45898],[13.67398,45.4436],[13.7785,45.46787],[13.81742,45.43729],[13.88124,45.42637],[13.90771,45.45149],[13.97309,45.45258],[13.99488,45.47551],[13.96063,45.50825],[14.00578,45.52352],[14.07116,45.48752],[14.20348,45.46896],[14.22371,45.50388],[14.24239,45.50607],[14.26611,45.48239],[14.27681,45.4902],[14.32487,45.47142],[14.36693,45.48642],[14.49769,45.54424],[14.5008,45.60852],[14.53816,45.6205],[14.57397,45.67165],[14.60977,45.66403],[14.59576,45.62812],[14.69694,45.57366],[14.68605,45.53006],[14.71718,45.53442],[14.80124,45.49515],[14.81992,45.45913],[14.90554,45.47769],[14.92266,45.52788],[15.02385,45.48533],[15.05187,45.49079],[15.16862,45.42309],[15.27758,45.46678],[15.33051,45.45258],[15.38188,45.48752],[15.30249,45.53224],[15.29837,45.5841],[15.27747,45.60504],[15.31027,45.6303],[15.34695,45.63382],[15.34214,45.64702],[15.38952,45.63682],[15.4057,45.64727],[15.34919,45.71623],[15.30872,45.69014],[15.25423,45.72275],[15.40836,45.79491],[15.47531,45.79802],[15.47325,45.8253],[15.52234,45.82195],[15.57952,45.84953],[15.64185,45.82915],[15.66662,45.84085],[15.70411,45.8465],[15.68232,45.86819],[15.68383,45.88867],[15.67967,45.90455],[15.70636,45.92116],[15.70327,46.00015],[15.71246,46.01196],[15.72977,46.04682],[15.62317,46.09103],[15.6083,46.11992],[15.59909,46.14761],[15.64904,46.19229],[15.6434,46.21396],[15.67395,46.22478],[15.75436,46.21969],[15.75479,46.20336],[15.78817,46.21719],[15.79284,46.25811],[15.97965,46.30652],[16.07616,46.3463],[16.07314,46.36458],[16.05065,46.3833],[16.05281,46.39141],[16.14859,46.40547],[16.18824,46.38282],[16.30233,46.37837],[16.30162,46.40437],[16.27329,46.41467],[16.27398,46.42875],[16.25124,46.48067],[16.23961,46.49653],[16.26759,46.50566],[16.26733,46.51505],[16.29793,46.5121],[16.37193,46.55008],[16.38771,46.53608],[16.44036,46.5171],[16.5007,46.49644],[16.52604,46.47831],[16.59527,46.47524],[16.6639,46.45203],[16.7154,46.39523],[16.8541,46.36255],[16.8903,46.28122],[17.14592,46.16697],[17.35672,45.95209],[17.56821,45.93728],[17.66545,45.84207],[17.87377,45.78522],[17.99805,45.79671],[18.08869,45.76511],[18.12439,45.78905],[18.44368,45.73972],[18.57483,45.80772],[18.6792,45.92057],[18.80211,45.87995],[18.81394,45.91329],[18.85783,45.85493],[18.90305,45.71863],[18.96691,45.66731],[18.88776,45.57253],[18.94562,45.53712],[19.07471,45.53086],[19.08364,45.48804],[18.99918,45.49333],[18.97446,45.37528],[19.10774,45.29547],[19.28208,45.23813],[19.41941,45.23475],[19.43589,45.17137],[19.19144,45.17863],[19.14063,45.12972],[19.07952,45.14668],[19.1011,45.01191],[19.05205,44.97692],[19.15573,44.95409],[19.06853,44.89915],[19.02871,44.92541],[18.98957,44.90645],[19.01994,44.85493],[18.8704,44.85097],[18.76347,44.90669],[18.76369,44.93707],[18.80661,44.93561],[18.78357,44.97741],[18.65723,45.07544],[18.47939,45.05871],[18.41896,45.11083],[18.32077,45.1021],[18.24387,45.13699],[18.1624,45.07654],[18.03121,45.12632],[18.01594,45.15163],[17.99479,45.14958],[17.97834,45.13831],[17.97336,45.12245],[17.93706,45.08016],[17.87148,45.04645],[17.84826,45.04489],[17.66571,45.13408],[17.59104,45.10816],[17.51469,45.10791],[17.47589,45.12656],[17.45615,45.12523],[17.4498,45.16119],[17.41229,45.13335],[17.33573,45.14521],[17.32092,45.16246],[17.26815,45.18444],[17.25131,45.14957],[17.24325,45.146],[17.18438,45.14764],[17.0415,45.20759],[16.9385,45.22742],[16.92405,45.27607],[16.83804,45.18951],[16.81137,45.18434],[16.78219,45.19002],[16.74845,45.20393],[16.64962,45.20714],[16.60194,45.23042],[16.56559,45.22307],[16.5501,45.2212],[16.52982,45.22713],[16.49155,45.21153],[16.4634,45.14522],[16.40023,45.1147],[16.38309,45.05955],[16.38219,45.05139],[16.3749,45.05206],[16.35863,45.03529],[16.35404,45.00241],[16.29036,44.99732],[16.12153,45.09616],[15.98412,45.23088],[15.83512,45.22459],[15.76371,45.16508],[15.78842,45.11519],[15.74585,45.0638],[15.78568,44.97401],[15.74723,44.96818],[15.76096,44.87045],[15.79472,44.8455],[15.72584,44.82334],[15.8255,44.71501],[15.89348,44.74964],[16.05828,44.61538],[16.00884,44.58605],[16.03012,44.55572],[16.10566,44.52586],[16.16814,44.40679],[16.12969,44.38275],[16.21346,44.35231],[16.18688,44.27012],[16.36864,44.08263],[16.43662,44.07523],[16.43629,44.02826],[16.50528,44.0244],[16.55472,43.95326],[16.70922,43.84887],[16.75316,43.77157],[16.80736,43.76011],[17.00585,43.58037],[17.15828,43.49376],[17.24411,43.49376],[17.29699,43.44542],[17.25579,43.40353],[17.286,43.33065],[17.46986,43.16559],[17.64268,43.08595],[17.70879,42.97223],[17.5392,42.92787],[17.6444,42.88641]]]]}},{type:"Feature",properties:{iso1A2:"PG",iso1A3:"PNG",iso1N3:"598",wikidata:"Q691",nameEn:"Papua New Guinea",groups:["054","009"],driveSide:"left",callingCodes:["675"]},geometry:{type:"MultiPolygon",coordinates:[[[[141.03157,2.12829],[160.43769,-4.17974],[156.03296,-6.55528],[156.03993,-6.65703],[155.92557,-6.84664],[155.69784,-6.92661],[155.60735,-6.92266],[154.74815,-7.33315],[155.22803,-12.9001],[144.30183,-9.48146],[142.81927,-9.31709],[142.5723,-9.35994],[142.31447,-9.24611],[142.23304,-9.19253],[142.1462,-9.19923],[142.0953,-9.23534],[142.0601,-9.56571],[140.88922,-9.34945],[141.00782,-9.1242],[141.01763,-6.90181],[140.85295,-6.72996],[140.99813,-6.3233],[141.03157,2.12829]]]]}},{type:"Feature",properties:{iso1A2:"HU",iso1A3:"HUN",iso1N3:"348",wikidata:"Q28",nameEn:"Hungary",groups:["EU","151","150"],callingCodes:["36"]},geometry:{type:"MultiPolygon",coordinates:[[[[21.72525,48.34628],[21.8279,48.33321],[21.83339,48.36242],[22.14689,48.4005],[22.2083,48.42534],[22.38133,48.23726],[22.49806,48.25189],[22.59007,48.15121],[22.58733,48.10813],[22.66835,48.09162],[22.73427,48.12005],[22.81804,48.11363],[22.87847,48.04665],[22.84276,47.98602],[22.89849,47.95851],[22.77991,47.87211],[22.76617,47.8417],[22.67247,47.7871],[22.46559,47.76583],[22.41979,47.7391],[22.31816,47.76126],[22.00917,47.50492],[22.03389,47.42508],[22.01055,47.37767],[21.94463,47.38046],[21.78395,47.11104],[21.648,47.03902],[21.68645,46.99595],[21.59581,46.91628],[21.59307,46.86935],[21.52028,46.84118],[21.48935,46.7577],[21.5151,46.72147],[21.43926,46.65109],[21.33214,46.63035],[21.26929,46.4993],[21.28061,46.44941],[21.16872,46.30118],[21.06572,46.24897],[20.86797,46.28884],[20.74574,46.25467],[20.76085,46.21002],[20.63863,46.12728],[20.49718,46.18721],[20.45377,46.14405],[20.35573,46.16629],[20.28324,46.1438],[20.26068,46.12332],[20.09713,46.17315],[20.03533,46.14509],[20.01816,46.17696],[19.93508,46.17553],[19.81491,46.1313],[19.66007,46.19005],[19.56113,46.16824],[19.52473,46.1171],[19.28826,45.99694],[19.14543,45.9998],[19.10388,46.04015],[19.0791,45.96458],[19.01284,45.96529],[18.99712,45.93537],[18.81394,45.91329],[18.80211,45.87995],[18.6792,45.92057],[18.57483,45.80772],[18.44368,45.73972],[18.12439,45.78905],[18.08869,45.76511],[17.99805,45.79671],[17.87377,45.78522],[17.66545,45.84207],[17.56821,45.93728],[17.35672,45.95209],[17.14592,46.16697],[16.8903,46.28122],[16.8541,46.36255],[16.7154,46.39523],[16.6639,46.45203],[16.59527,46.47524],[16.52604,46.5051],[16.52885,46.53303],[16.50139,46.56684],[16.39217,46.63673],[16.38594,46.6549],[16.41863,46.66238],[16.42641,46.69228],[16.37816,46.69975],[16.30966,46.7787],[16.31303,46.79838],[16.3408,46.80641],[16.34547,46.83836],[16.2941,46.87137],[16.2365,46.87775],[16.21892,46.86961],[16.15711,46.85434],[16.14365,46.8547],[16.10983,46.867],[16.19904,46.94134],[16.22403,46.939],[16.27594,46.9643],[16.28202,47.00159],[16.51369,47.00084],[16.43936,47.03548],[16.52176,47.05747],[16.46134,47.09395],[16.52863,47.13974],[16.44932,47.14418],[16.46442,47.16845],[16.4523,47.18812],[16.42801,47.18422],[16.41739,47.20649],[16.43663,47.21127],[16.44142,47.25079],[16.47782,47.25918],[16.45104,47.41181],[16.49908,47.39416],[16.52414,47.41007],[16.57152,47.40868],[16.6718,47.46139],[16.64821,47.50155],[16.71059,47.52692],[16.64193,47.63114],[16.58699,47.61772],[16.4222,47.66537],[16.55129,47.72268],[16.53514,47.73837],[16.54779,47.75074],[16.61183,47.76171],[16.65679,47.74197],[16.72089,47.73469],[16.7511,47.67878],[16.82938,47.68432],[16.86509,47.72268],[16.87538,47.68895],[17.08893,47.70928],[17.05048,47.79377],[17.07039,47.81129],[17.00997,47.86245],[17.08275,47.87719],[17.11022,47.92461],[17.09786,47.97336],[17.16001,48.00636],[17.23699,48.02094],[17.71215,47.7548],[18.02938,47.75665],[18.29305,47.73541],[18.56496,47.76588],[18.66521,47.76772],[18.74074,47.8157],[18.8506,47.82308],[18.76821,47.87469],[18.76134,47.97499],[18.82176,48.04206],[19.01952,48.07052],[19.23924,48.0595],[19.28182,48.08336],[19.47957,48.09437],[19.52489,48.19791],[19.63338,48.25006],[19.92452,48.1283],[20.24312,48.2784],[20.29943,48.26104],[20.5215,48.53336],[20.83248,48.5824],[21.11516,48.49546],[21.44063,48.58456],[21.6068,48.50365],[21.67134,48.3989],[21.72525,48.34628]]]]}},{type:"Feature",properties:{iso1A2:"PH",iso1A3:"PHL",iso1N3:"608",wikidata:"Q928",nameEn:"Philippines",aliases:["PI","RP"],groups:["035","142"],callingCodes:["63"]},geometry:{type:"MultiPolygon",coordinates:[[[[129.19694,7.84182],[124.97752,4.82064],[118.41402,3.99509],[118.07935,4.15511],[118.8663,4.44172],[118.75416,4.59798],[119.44841,5.09568],[119.34756,5.53889],[117.89159,6.25755],[117.43832,7.3895],[117.17735,7.52841],[116.79524,7.43869],[115.39742,10.92666],[118.82252,14.67191],[120.69238,21.52331],[121.8109,21.77688],[129.19694,7.84182]]]]}},{type:"Feature",properties:{iso1A2:"ID",iso1A3:"IDN",iso1N3:"360",wikidata:"Q252",nameEn:"Indonesia",aliases:["RI"],groups:["035","142"],driveSide:"left",callingCodes:["62"]},geometry:{type:"MultiPolygon",coordinates:[[[[141.02352,0.08993],[140.99813,-6.3233],[140.85295,-6.72996],[141.01763,-6.90181],[141.00782,-9.1242],[140.88922,-9.34945],[127.55165,-9.05052],[127.42116,-8.22471],[125.87691,-8.31789],[125.65946,-8.06136],[125.31127,-8.22976],[124.92337,-8.75859],[124.33472,-9.11416],[124.04628,-9.22671],[124.04286,-9.34243],[124.10539,-9.41206],[124.14517,-9.42324],[124.21247,-9.36904],[124.28115,-9.42189],[124.28115,-9.50453],[124.3535,-9.48493],[124.35258,-9.43002],[124.38554,-9.3582],[124.45971,-9.30263],[124.46701,-9.13002],[124.94011,-8.85617],[124.97742,-9.08128],[125.11764,-8.96359],[125.18632,-9.03142],[125.18907,-9.16434],[125.09434,-9.19669],[125.04044,-9.17093],[124.97892,-9.19281],[125.09025,-9.46406],[125.68138,-9.85176],[122.14954,-11.52517],[74.28481,-3.17525],[96.11174,6.69841],[103.03657,1.30383],[103.56591,1.19719],[103.66049,1.18825],[103.74084,1.12902],[104.03085,1.26954],[104.12282,1.27714],[104.34728,1.33529],[104.56723,1.44271],[105.01437,3.24936],[108.10426,5.42408],[109.71058,2.32059],[109.64506,2.08014],[109.62558,1.99182],[109.53794,1.91771],[109.57923,1.80624],[109.66397,1.79972],[109.66397,1.60425],[110.35354,0.98869],[110.49182,0.88088],[110.62374,0.873],[111.22979,1.08326],[111.55434,0.97864],[111.82846,0.99349],[111.94553,1.12016],[112.15679,1.17004],[112.2127,1.44135],[112.48648,1.56516],[113.021,1.57819],[113.01448,1.42832],[113.64677,1.23933],[114.03788,1.44787],[114.57892,1.5],[114.80706,1.92351],[114.80706,2.21665],[115.1721,2.49671],[115.11343,2.82879],[115.53713,3.14776],[115.58276,3.93499],[115.90217,4.37708],[117.25801,4.35108],[117.47313,4.18857],[117.67641,4.16535],[117.89538,4.16637],[118.07935,4.15511],[118.41402,3.99509],[124.97752,4.82064],[126.69413,6.02692],[128.97621,3.08804],[141.02352,0.08993]]]]}},{type:"Feature",properties:{iso1A2:"PK",iso1A3:"PAK",iso1N3:"586",wikidata:"Q843",nameEn:"Pakistan",groups:["034","142"],driveSide:"left",callingCodes:["92"]},geometry:{type:"MultiPolygon",coordinates:[[[[75.72737,36.7529],[75.92391,36.56986],[76.0324,36.41198],[76.00906,36.17511],[75.93028,36.13136],[76.15325,35.9264],[76.14913,35.82848],[76.33453,35.84296],[76.50961,35.8908],[76.77323,35.66062],[76.75475,35.52617],[76.85088,35.39754],[76.93465,35.39866],[77.11796,35.05419],[76.99251,34.93349],[76.87193,34.96906],[76.74514,34.92488],[76.74377,34.84039],[76.67648,34.76371],[76.47186,34.78965],[76.15463,34.6429],[76.04614,34.67566],[75.75438,34.51827],[75.38009,34.55021],[75.01479,34.64629],[74.6663,34.703],[74.58083,34.77386],[74.31239,34.79626],[74.12897,34.70073],[73.96423,34.68244],[73.93401,34.63386],[73.93951,34.57169],[73.89419,34.54568],[73.88732,34.48911],[73.74999,34.3781],[73.74862,34.34183],[73.8475,34.32935],[73.90517,34.35317],[73.98208,34.2522],[73.90677,34.10504],[73.88732,34.05105],[73.91341,34.01235],[74.21554,34.03853],[74.25262,34.01577],[74.26086,33.92237],[74.14001,33.83002],[74.05898,33.82089],[74.00891,33.75437],[73.96423,33.73071],[73.98968,33.66155],[73.97367,33.64061],[74.03576,33.56718],[74.10115,33.56392],[74.18121,33.4745],[74.17983,33.3679],[74.08782,33.26232],[74.01366,33.25199],[74.02144,33.18908],[74.15374,33.13477],[74.17571,33.07495],[74.31854,33.02891],[74.34875,32.97823],[74.31227,32.92795],[74.41467,32.90563],[74.45312,32.77755],[74.6289,32.75561],[74.64675,32.82604],[74.7113,32.84219],[74.65345,32.71225],[74.69542,32.66792],[74.64424,32.60985],[74.65251,32.56416],[74.67431,32.56676],[74.68362,32.49298],[74.84725,32.49075],[74.97634,32.45367],[75.03265,32.49538],[75.28259,32.36556],[75.38046,32.26836],[75.25649,32.10187],[75.00793,32.03786],[74.9269,32.0658],[74.86236,32.04485],[74.79919,31.95983],[74.58907,31.87824],[74.47771,31.72227],[74.57498,31.60382],[74.61517,31.55698],[74.59319,31.50197],[74.64713,31.45605],[74.59773,31.4136],[74.53223,31.30321],[74.51629,31.13829],[74.56023,31.08303],[74.60281,31.10419],[74.60006,31.13711],[74.6852,31.12771],[74.67971,31.05479],[74.5616,31.04153],[73.88993,30.36305],[73.95736,30.28466],[73.97225,30.19829],[73.80299,30.06969],[73.58665,30.01848],[73.3962,29.94707],[73.28094,29.56646],[73.05886,29.1878],[73.01337,29.16422],[72.94272,29.02487],[72.40402,28.78283],[72.29495,28.66367],[72.20329,28.3869],[71.9244,28.11555],[71.89921,27.96035],[70.79054,27.68423],[70.60927,28.02178],[70.37307,28.01208],[70.12502,27.8057],[70.03136,27.56627],[69.58519,27.18109],[69.50904,26.74892],[69.88555,26.56836],[70.05584,26.60398],[70.17532,26.55362],[70.17532,26.24118],[70.08193,26.08094],[70.0985,25.93238],[70.2687,25.71156],[70.37444,25.67443],[70.53649,25.68928],[70.60378,25.71898],[70.67382,25.68186],[70.66695,25.39314],[70.89148,25.15064],[70.94002,24.92843],[71.09405,24.69017],[70.97594,24.60904],[71.00341,24.46038],[71.12838,24.42662],[71.04461,24.34657],[70.94985,24.3791],[70.85784,24.30903],[70.88393,24.27398],[70.71502,24.23517],[70.57906,24.27774],[70.5667,24.43787],[70.11712,24.30915],[70.03428,24.172],[69.73335,24.17007],[69.59579,24.29777],[69.29778,24.28712],[69.19341,24.25646],[69.07806,24.29777],[68.97781,24.26021],[68.90914,24.33156],[68.7416,24.31904],[68.74643,23.97027],[68.39339,23.96838],[68.20763,23.85849],[68.11329,23.53945],[61.5251,24.57287],[61.57592,25.0492],[61.6433,25.27541],[61.683,25.66638],[61.83968,25.7538],[61.83831,26.07249],[61.89391,26.26251],[62.05117,26.31647],[62.21304,26.26601],[62.31484,26.528],[62.77352,26.64099],[63.1889,26.65072],[63.18688,26.83844],[63.25005,26.84212],[63.25005,27.08692],[63.32283,27.14437],[63.19649,27.25674],[62.80604,27.22412],[62.79684,27.34381],[62.84905,27.47627],[62.7638,28.02992],[62.79412,28.28108],[62.59499,28.24842],[62.40259,28.42703],[61.93581,28.55284],[61.65978,28.77937],[61.53765,29.00507],[61.31508,29.38903],[60.87231,29.86514],[62.47751,29.40782],[63.5876,29.50456],[64.12966,29.39157],[64.19796,29.50407],[64.62116,29.58903],[65.04005,29.53957],[66.24175,29.85181],[66.36042,29.9583],[66.23609,30.06321],[66.34869,30.404],[66.28413,30.57001],[66.39194,30.9408],[66.42645,30.95309],[66.58175,30.97532],[66.68166,31.07597],[66.72561,31.20526],[66.83273,31.26867],[67.04147,31.31561],[67.03323,31.24519],[67.29964,31.19586],[67.78854,31.33203],[67.7748,31.4188],[67.62374,31.40473],[67.58323,31.52772],[67.72056,31.52304],[67.86887,31.63536],[68.00071,31.6564],[68.1655,31.82691],[68.25614,31.80357],[68.27605,31.75863],[68.44222,31.76446],[68.57475,31.83158],[68.6956,31.75687],[68.79997,31.61665],[68.91078,31.59687],[68.95995,31.64822],[69.00939,31.62249],[69.11514,31.70782],[69.20577,31.85957],[69.3225,31.93186],[69.27032,32.14141],[69.27932,32.29119],[69.23599,32.45946],[69.2868,32.53938],[69.38155,32.56601],[69.44747,32.6678],[69.43649,32.7302],[69.38018,32.76601],[69.47082,32.85834],[69.5436,32.8768],[69.49854,32.88843],[69.49004,33.01509],[69.57656,33.09911],[69.71526,33.09911],[69.79766,33.13247],[69.85259,33.09451],[70.02563,33.14282],[70.07369,33.22557],[70.13686,33.21064],[70.32775,33.34496],[70.17062,33.53535],[70.20141,33.64387],[70.14785,33.6553],[70.14236,33.71701],[70.00503,33.73528],[69.85671,33.93719],[69.87307,33.9689],[69.90203,34.04194],[70.54336,33.9463],[70.88119,33.97933],[71.07345,34.06242],[71.06933,34.10564],[71.09307,34.11961],[71.09453,34.13524],[71.13078,34.16503],[71.12815,34.26619],[71.17662,34.36769],[71.02401,34.44835],[71.0089,34.54568],[71.11602,34.63047],[71.08718,34.69034],[71.28356,34.80882],[71.29472,34.87728],[71.50329,34.97328],[71.49917,35.00478],[71.55273,35.02615],[71.52938,35.09023],[71.67495,35.21262],[71.5541,35.28776],[71.54294,35.31037],[71.65435,35.4479],[71.49917,35.6267],[71.55273,35.71483],[71.37969,35.95865],[71.19505,36.04134],[71.60491,36.39429],[71.80267,36.49924],[72.18135,36.71838],[72.6323,36.84601],[73.82685,36.91421],[74.04856,36.82648],[74.43389,37.00977],[74.53739,36.96224],[74.56453,37.03023],[75.13839,37.02622],[75.40481,36.95382],[75.45562,36.71971],[75.72737,36.7529]]]]}},{type:"Feature",properties:{iso1A2:"IL",iso1A3:"ISR",iso1N3:"376",wikidata:"Q801",nameEn:"Israel",groups:["145","142"],callingCodes:["972"]},geometry:{type:"MultiPolygon",coordinates:[[[[34.052,31.46619],[33.62659,31.82938],[34.78515,33.20368],[35.10645,33.09318],[35.1924,33.08743],[35.31429,33.10515],[35.35223,33.05617],[35.43059,33.06659],[35.448,33.09264],[35.50272,33.09056],[35.50335,33.114],[35.52573,33.11921],[35.54228,33.19865],[35.5362,33.23196],[35.54808,33.236],[35.54544,33.25513],[35.55555,33.25844],[35.56523,33.28969],[35.58326,33.28381],[35.58502,33.26653],[35.62283,33.24226],[35.62019,33.27278],[35.77477,33.33609],[35.813,33.3172],[35.77513,33.27342],[35.81295,33.24841],[35.81647,33.2028],[35.83846,33.19397],[35.84285,33.16673],[35.81911,33.1336],[35.81911,33.11077],[35.84802,33.1031],[35.87188,32.98028],[35.89298,32.9456],[35.87012,32.91976],[35.84021,32.8725],[35.83758,32.82817],[35.78745,32.77938],[35.75983,32.74803],[35.68467,32.70715],[35.66527,32.681],[35.61669,32.67999],[35.59813,32.65159],[35.56614,32.64393],[35.57485,32.48669],[35.55494,32.42687],[35.55807,32.38674],[35.42078,32.41562],[35.41048,32.43706],[35.41598,32.45593],[35.42034,32.46009],[35.40224,32.50136],[35.35212,32.52047],[35.30685,32.51024],[35.29306,32.50947],[35.25049,32.52453],[35.2244,32.55289],[35.15937,32.50466],[35.10882,32.4757],[35.10024,32.47856],[35.09236,32.47614],[35.08564,32.46948],[35.07059,32.4585],[35.05423,32.41754],[35.05311,32.4024],[35.0421,32.38242],[35.05142,32.3667],[35.04243,32.35008],[35.01772,32.33863],[35.01119,32.28684],[35.02939,32.2671],[35.01841,32.23981],[34.98885,32.20758],[34.95703,32.19522],[34.96009,32.17503],[34.99039,32.14626],[34.98507,32.12606],[34.99437,32.10962],[34.9863,32.09551],[35.00261,32.027],[34.98682,31.96935],[35.00124,31.93264],[35.03489,31.92448],[35.03978,31.89276],[35.03489,31.85919],[34.99712,31.85569],[34.9724,31.83352],[35.01978,31.82944],[35.05617,31.85685],[35.07677,31.85627],[35.14174,31.81325],[35.18603,31.80901],[35.18169,31.82542],[35.19461,31.82687],[35.21469,31.81835],[35.216,31.83894],[35.21128,31.863],[35.20381,31.86716],[35.20673,31.88151],[35.20791,31.8821],[35.20945,31.8815],[35.21016,31.88237],[35.21276,31.88153],[35.2136,31.88241],[35.22014,31.88264],[35.22294,31.87889],[35.22567,31.86745],[35.22817,31.8638],[35.2249,31.85433],[35.2304,31.84222],[35.24816,31.8458],[35.25753,31.8387],[35.251,31.83085],[35.26404,31.82567],[35.25573,31.81362],[35.26058,31.79064],[35.25225,31.7678],[35.26319,31.74846],[35.25182,31.73945],[35.24981,31.72543],[35.2438,31.7201],[35.24315,31.71244],[35.23972,31.70896],[35.22392,31.71899],[35.21937,31.71578],[35.20538,31.72388],[35.18023,31.72067],[35.16478,31.73242],[35.15474,31.73352],[35.15119,31.73634],[35.13931,31.73012],[35.12933,31.7325],[35.11895,31.71454],[35.10782,31.71594],[35.08226,31.69107],[35.00879,31.65426],[34.95249,31.59813],[34.9415,31.55601],[34.94356,31.50743],[34.93258,31.47816],[34.89756,31.43891],[34.87833,31.39321],[34.88932,31.37093],[34.92571,31.34337],[35.02459,31.35979],[35.13033,31.3551],[35.22921,31.37445],[35.39675,31.49572],[35.47672,31.49578],[35.40316,31.25535],[35.43658,31.12444],[35.41371,30.95565],[35.33984,30.8802],[35.33456,30.81224],[35.29311,30.71365],[35.21379,30.60401],[35.19595,30.50297],[35.16218,30.43535],[35.19183,30.34636],[35.14108,30.07374],[35.02147,29.66343],[34.98207,29.58147],[34.97718,29.54294],[34.92298,29.45305],[34.26742,31.21998],[34.29417,31.24194],[34.36523,31.28963],[34.37381,31.30598],[34.36505,31.36404],[34.40077,31.40926],[34.48892,31.48365],[34.56797,31.54197],[34.48681,31.59711],[34.29262,31.70393],[34.052,31.46619]]]]}},{type:"Feature",properties:{iso1A2:"PL",iso1A3:"POL",iso1N3:"616",wikidata:"Q36",nameEn:"Poland",groups:["EU","151","150"],callingCodes:["48"]},geometry:{type:"MultiPolygon",coordinates:[[[[18.57853,55.25302],[19.64312,54.45423],[19.8038,54.44203],[20.63871,54.3706],[21.41123,54.32395],[22.79705,54.36264],[22.83756,54.40827],[23.00584,54.38514],[22.99649,54.35927],[23.05726,54.34565],[23.04323,54.31567],[23.104,54.29794],[23.13905,54.31567],[23.15526,54.31076],[23.15938,54.29894],[23.24656,54.25701],[23.3494,54.25155],[23.39525,54.21672],[23.42418,54.17911],[23.45223,54.17775],[23.49196,54.14764],[23.52702,54.04622],[23.48261,53.98855],[23.51284,53.95052],[23.62004,53.60942],[23.81995,53.24131],[23.85657,53.22923],[23.91393,53.16469],[23.87548,53.0831],[23.92184,53.02079],[23.94689,52.95919],[23.91805,52.94016],[23.93763,52.71332],[23.73615,52.6149],[23.58296,52.59868],[23.45112,52.53774],[23.34141,52.44845],[23.18196,52.28812],[23.20071,52.22848],[23.47859,52.18215],[23.54314,52.12148],[23.61,52.11264],[23.64066,52.07626],[23.68733,51.9906],[23.61523,51.92066],[23.62691,51.78208],[23.53198,51.74298],[23.57053,51.55938],[23.56236,51.53673],[23.62751,51.50512],[23.69905,51.40871],[23.63858,51.32182],[23.80678,51.18405],[23.90376,51.07697],[23.92217,51.00836],[24.04576,50.90196],[24.14524,50.86128],[24.0952,50.83262],[23.99254,50.83847],[23.95925,50.79271],[24.0595,50.71625],[24.0996,50.60752],[24.07048,50.5071],[24.03668,50.44507],[23.99563,50.41289],[23.79445,50.40481],[23.71382,50.38248],[23.67635,50.33385],[23.28221,50.0957],[22.99329,49.84249],[22.83179,49.69875],[22.80261,49.69098],[22.78304,49.65543],[22.64534,49.53094],[22.69444,49.49378],[22.748,49.32759],[22.72009,49.20288],[22.86336,49.10513],[22.89122,49.00725],[22.56155,49.08865],[22.04427,49.22136],[21.96385,49.3437],[21.82927,49.39467],[21.77983,49.35443],[21.62328,49.4447],[21.43376,49.41433],[21.27858,49.45988],[21.19756,49.4054],[21.12477,49.43666],[21.041,49.41791],[21.09799,49.37176],[20.98733,49.30774],[20.9229,49.29626],[20.77971,49.35383],[20.72274,49.41813],[20.61666,49.41791],[20.5631,49.375],[20.46422,49.41612],[20.39939,49.3896],[20.31728,49.39914],[20.31453,49.34817],[20.21977,49.35265],[20.13738,49.31685],[20.08238,49.1813],[19.98494,49.22904],[19.90529,49.23532],[19.86409,49.19316],[19.75286,49.20751],[19.82237,49.27806],[19.78581,49.41701],[19.72127,49.39288],[19.6375,49.40897],[19.64162,49.45184],[19.57845,49.46077],[19.53313,49.52856],[19.52626,49.57311],[19.45348,49.61583],[19.37795,49.574],[19.36009,49.53747],[19.25435,49.53391],[19.18019,49.41165],[18.9742,49.39557],[18.97283,49.49914],[18.94536,49.52143],[18.84521,49.51672],[18.84786,49.5446],[18.80479,49.6815],[18.72838,49.68163],[18.69817,49.70473],[18.62676,49.71983],[18.62943,49.74603],[18.62645,49.75002],[18.61368,49.75426],[18.61278,49.7618],[18.57183,49.83334],[18.60341,49.86256],[18.57045,49.87849],[18.57697,49.91565],[18.54299,49.92537],[18.54495,49.9079],[18.53423,49.89906],[18.41604,49.93498],[18.33562,49.94747],[18.33278,49.92415],[18.31914,49.91565],[18.27794,49.93863],[18.27107,49.96779],[18.21752,49.97309],[18.20241,49.99958],[18.10628,50.00223],[18.07898,50.04535],[18.03212,50.06574],[18.00396,50.04954],[18.04585,50.03311],[18.04585,50.01194],[18.00191,50.01723],[17.86886,49.97452],[17.77669,50.02253],[17.7506,50.07896],[17.6888,50.12037],[17.66683,50.10275],[17.59404,50.16437],[17.70528,50.18812],[17.76296,50.23382],[17.72176,50.25665],[17.74648,50.29966],[17.69292,50.32859],[17.67764,50.28977],[17.58889,50.27837],[17.3702,50.28123],[17.34548,50.2628],[17.34273,50.32947],[17.27681,50.32246],[17.19991,50.3654],[17.19579,50.38817],[17.14498,50.38117],[17.1224,50.39494],[16.89229,50.45117],[16.85933,50.41093],[16.90877,50.38642],[16.94448,50.31281],[16.99803,50.30316],[17.02138,50.27772],[16.99803,50.25753],[17.02825,50.23118],[17.00353,50.21449],[16.98018,50.24172],[16.8456,50.20834],[16.7014,50.09659],[16.63137,50.1142],[16.55446,50.16613],[16.56407,50.21009],[16.42674,50.32509],[16.39379,50.3207],[16.3622,50.34875],[16.36495,50.37679],[16.30289,50.38292],[16.28118,50.36891],[16.22821,50.41054],[16.21585,50.40627],[16.19526,50.43291],[16.31413,50.50274],[16.34572,50.49575],[16.44597,50.58041],[16.33611,50.66579],[16.23174,50.67101],[16.20839,50.63096],[16.10265,50.66405],[16.02437,50.60046],[15.98317,50.61528],[16.0175,50.63009],[15.97219,50.69799],[15.87331,50.67188],[15.81683,50.75666],[15.73186,50.73885],[15.43798,50.80833],[15.3803,50.77187],[15.36656,50.83956],[15.2773,50.8907],[15.27043,50.97724],[15.2361,50.99886],[15.1743,50.9833],[15.16744,51.01959],[15.11937,50.99021],[15.10152,51.01095],[15.06218,51.02269],[15.03895,51.0123],[15.02433,51.0242],[14.96419,50.99108],[15.01088,50.97984],[14.99852,50.86817],[14.82803,50.86966],[14.81664,50.88148],[14.89681,50.9422],[14.89252,50.94999],[14.92942,50.99744],[14.95529,51.04552],[14.97938,51.07742],[14.98229,51.11354],[14.99689,51.12205],[14.99079,51.14284],[14.99646,51.14365],[15.00083,51.14974],[14.99414,51.15813],[14.99311,51.16249],[15.0047,51.16874],[15.01242,51.21285],[15.04288,51.28387],[14.98008,51.33449],[14.96899,51.38367],[14.9652,51.44793],[14.94749,51.47155],[14.73219,51.52922],[14.72652,51.53902],[14.73047,51.54606],[14.71125,51.56209],[14.7727,51.61263],[14.75759,51.62318],[14.75392,51.67445],[14.69065,51.70842],[14.66386,51.73282],[14.64625,51.79472],[14.60493,51.80473],[14.59089,51.83302],[14.6588,51.88359],[14.6933,51.9044],[14.70601,51.92944],[14.7177,51.94048],[14.72163,51.95188],[14.71836,51.95606],[14.7139,51.95643],[14.70488,51.97679],[14.71339,52.00337],[14.76026,52.06624],[14.72971,52.09167],[14.6917,52.10283],[14.67683,52.13936],[14.70616,52.16927],[14.68344,52.19612],[14.71319,52.22144],[14.70139,52.25038],[14.58149,52.28007],[14.56378,52.33838],[14.55228,52.35264],[14.54423,52.42568],[14.63056,52.48993],[14.60081,52.53116],[14.6289,52.57136],[14.61073,52.59847],[14.22071,52.81175],[14.13806,52.82392],[14.12256,52.84311],[14.15873,52.87715],[14.14056,52.95786],[14.25954,53.00264],[14.35044,53.05829],[14.38679,53.13669],[14.36696,53.16444],[14.37853,53.20405],[14.40662,53.21098],[14.45125,53.26241],[14.44133,53.27427],[14.4215,53.27724],[14.35209,53.49506],[14.3273,53.50587],[14.30416,53.55499],[14.31904,53.61581],[14.2853,53.63392],[14.28477,53.65955],[14.27133,53.66613],[14.2836,53.67721],[14.26782,53.69866],[14.27249,53.74464],[14.21323,53.8664],[14.20823,53.90776],[14.18544,53.91258],[14.20647,53.91671],[14.22634,53.9291],[14.20811,54.12784],[18.57853,55.25302]]]]}},{type:"Feature",properties:{iso1A2:"IN",iso1A3:"IND",iso1N3:"356",wikidata:"Q668",nameEn:"India",groups:["034","142"],driveSide:"left",callingCodes:["91"]},geometry:{type:"MultiPolygon",coordinates:[[[[78.11664,35.48022],[78.03466,35.3785],[78.00033,35.23954],[78.22692,34.88771],[78.18435,34.7998],[78.27781,34.61484],[78.54964,34.57283],[78.56475,34.50835],[78.74465,34.45174],[79.05364,34.32482],[78.99802,34.3027],[78.91769,34.15452],[78.66225,34.08858],[78.65657,34.03195],[78.73367,34.01121],[78.77349,33.73871],[78.67599,33.66445],[78.73636,33.56521],[79.15252,33.17156],[79.14016,33.02545],[79.46562,32.69668],[79.26768,32.53277],[79.13174,32.47766],[79.0979,32.38051],[78.99322,32.37948],[78.96713,32.33655],[78.7831,32.46873],[78.73916,32.69438],[78.38897,32.53938],[78.4645,32.45367],[78.49609,32.2762],[78.68754,32.10256],[78.74404,32.00384],[78.78036,31.99478],[78.69933,31.78723],[78.84516,31.60631],[78.71032,31.50197],[78.77898,31.31209],[79.01931,31.42817],[79.14016,31.43403],[79.22805,31.34963],[79.59884,30.93943],[79.93255,30.88288],[80.20721,30.58541],[80.54504,30.44936],[80.83343,30.32023],[81.03953,30.20059],[80.93695,30.18229],[80.8778,30.13384],[80.67076,29.95732],[80.60226,29.95732],[80.56957,29.88176],[80.56247,29.86661],[80.48997,29.79566],[80.43458,29.80466],[80.41554,29.79451],[80.36803,29.73865],[80.38428,29.68513],[80.41858,29.63581],[80.37939,29.57098],[80.24322,29.44299],[80.31428,29.30784],[80.28626,29.20327],[80.24112,29.21414],[80.26602,29.13938],[80.23178,29.11626],[80.18085,29.13649],[80.05743,28.91479],[80.06957,28.82763],[80.12125,28.82346],[80.37188,28.63371],[80.44504,28.63098],[80.52443,28.54897],[80.50575,28.6706],[80.55142,28.69182],[80.89648,28.47237],[81.08507,28.38346],[81.19847,28.36284],[81.32923,28.13521],[81.38683,28.17638],[81.48179,28.12148],[81.47867,28.08303],[81.91223,27.84995],[81.97214,27.93322],[82.06554,27.92222],[82.46405,27.6716],[82.70378,27.72122],[82.74119,27.49838],[82.93261,27.50328],[82.94938,27.46036],[83.19413,27.45632],[83.27197,27.38309],[83.2673,27.36235],[83.29999,27.32778],[83.35136,27.33885],[83.38872,27.39276],[83.39495,27.4798],[83.61288,27.47013],[83.85595,27.35797],[83.86182,27.4241],[83.93306,27.44939],[84.02229,27.43836],[84.10791,27.52399],[84.21376,27.45218],[84.25735,27.44941],[84.29315,27.39],[84.62161,27.33885],[84.69166,27.21294],[84.64496,27.04669],[84.793,26.9968],[84.82913,27.01989],[84.85754,26.98984],[84.96687,26.95599],[84.97186,26.9149],[85.00536,26.89523],[85.05592,26.88991],[85.02635,26.85381],[85.15883,26.86966],[85.19291,26.86909],[85.18046,26.80519],[85.21159,26.75933],[85.34302,26.74954],[85.47752,26.79292],[85.56471,26.84133],[85.5757,26.85955],[85.59461,26.85161],[85.61621,26.86721],[85.66239,26.84822],[85.73483,26.79613],[85.72315,26.67471],[85.76907,26.63076],[85.83126,26.61134],[85.85126,26.60866],[85.8492,26.56667],[86.02729,26.66756],[86.13596,26.60651],[86.22513,26.58863],[86.26235,26.61886],[86.31564,26.61925],[86.49726,26.54218],[86.54258,26.53819],[86.57073,26.49825],[86.61313,26.48658],[86.62686,26.46891],[86.69124,26.45169],[86.74025,26.42386],[86.76797,26.45892],[86.82898,26.43919],[86.94543,26.52076],[86.95912,26.52076],[87.01559,26.53228],[87.04691,26.58685],[87.0707,26.58571],[87.09147,26.45039],[87.14751,26.40542],[87.18863,26.40558],[87.24682,26.4143],[87.26587,26.40592],[87.26568,26.37294],[87.34568,26.34787],[87.37314,26.40815],[87.46566,26.44058],[87.51571,26.43106],[87.55274,26.40596],[87.59175,26.38342],[87.66803,26.40294],[87.67893,26.43501],[87.76004,26.40711],[87.7918,26.46737],[87.84193,26.43663],[87.89085,26.48565],[87.90115,26.44923],[88.00895,26.36029],[88.09414,26.43732],[88.09963,26.54195],[88.16452,26.64111],[88.1659,26.68177],[88.19107,26.75516],[88.12302,26.95324],[88.13422,26.98705],[88.11719,26.98758],[87.9887,27.11045],[88.01587,27.21388],[88.01646,27.21612],[88.07277,27.43007],[88.04008,27.49223],[88.19107,27.79285],[88.1973,27.85067],[88.13378,27.88015],[88.1278,27.95417],[88.25332,27.9478],[88.54858,28.06057],[88.63235,28.12356],[88.83559,28.01936],[88.88091,27.85192],[88.77517,27.45415],[88.82981,27.38814],[88.91901,27.32483],[88.74219,27.144],[88.86984,27.10937],[88.8714,26.97488],[88.92301,26.99286],[88.95807,26.92668],[89.09554,26.89089],[89.12825,26.81661],[89.1926,26.81329],[89.37913,26.86224],[89.38319,26.85963],[89.3901,26.84225],[89.42349,26.83727],[89.63369,26.74402],[89.86124,26.73307],[90.04535,26.72422],[90.30402,26.85098],[90.39271,26.90704],[90.48504,26.8594],[90.67715,26.77215],[91.50067,26.79223],[91.83181,26.87318],[92.05523,26.8692],[92.11863,26.893],[92.03457,27.07334],[92.04702,27.26861],[92.12019,27.27829],[92.01132,27.47352],[91.65007,27.48287],[91.55819,27.6144],[91.6469,27.76358],[91.84722,27.76325],[91.87057,27.7195],[92.27432,27.89077],[92.32101,27.79363],[92.42538,27.80092],[92.7275,27.98662],[92.73025,28.05814],[92.65472,28.07632],[92.67486,28.15018],[92.93075,28.25671],[93.14635,28.37035],[93.18069,28.50319],[93.44621,28.67189],[93.72797,28.68821],[94.35897,29.01965],[94.2752,29.11687],[94.69318,29.31739],[94.81353,29.17804],[95.0978,29.14446],[95.11291,29.09527],[95.2214,29.10727],[95.26122,29.07727],[95.3038,29.13847],[95.41091,29.13007],[95.50842,29.13487],[95.72086,29.20797],[95.75149,29.32063],[95.84899,29.31464],[96.05361,29.38167],[96.31316,29.18643],[96.18682,29.11087],[96.20467,29.02325],[96.3626,29.10607],[96.61391,28.72742],[96.40929,28.51526],[96.48895,28.42955],[96.6455,28.61657],[96.85561,28.4875],[96.88445,28.39452],[96.98882,28.32564],[97.1289,28.3619],[97.34547,28.21385],[97.31292,28.06784],[97.35412,28.06663],[97.38845,28.01329],[97.35824,27.87256],[97.29919,27.92233],[96.90112,27.62149],[96.91431,27.45752],[97.17422,27.14052],[97.14675,27.09041],[96.89132,27.17474],[96.85287,27.2065],[96.88445,27.25046],[96.73888,27.36638],[96.55761,27.29928],[96.40779,27.29818],[96.15591,27.24572],[96.04949,27.19428],[95.93002,27.04149],[95.81603,27.01335],[95.437,26.7083],[95.30339,26.65372],[95.23513,26.68499],[95.05798,26.45408],[95.12801,26.38397],[95.11428,26.1019],[95.18556,26.07338],[94.80117,25.49359],[94.68032,25.47003],[94.57458,25.20318],[94.74212,25.13606],[94.73937,25.00545],[94.60204,24.70889],[94.5526,24.70764],[94.50729,24.59281],[94.45279,24.56656],[94.32362,24.27692],[94.30215,24.23752],[94.14081,23.83333],[93.92089,23.95812],[93.80279,23.92549],[93.75952,24.0003],[93.62871,24.00922],[93.50616,23.94432],[93.46633,23.97067],[93.41415,24.07854],[93.34735,24.10151],[93.32351,24.04468],[93.36059,23.93176],[93.3908,23.92925],[93.3908,23.7622],[93.43475,23.68299],[93.38805,23.4728],[93.39981,23.38828],[93.38781,23.36139],[93.36862,23.35426],[93.38478,23.13698],[93.2878,23.00464],[93.12988,23.05772],[93.134,22.92498],[93.09417,22.69459],[93.134,22.59573],[93.11477,22.54374],[93.13537,22.45873],[93.18206,22.43716],[93.19991,22.25425],[93.14224,22.24535],[93.15734,22.18687],[93.04885,22.20595],[92.99255,22.05965],[92.99804,21.98964],[92.93899,22.02656],[92.89504,21.95143],[92.86208,22.05456],[92.70416,22.16017],[92.67532,22.03547],[92.60949,21.97638],[92.56616,22.13554],[92.60029,22.1522],[92.5181,22.71441],[92.37665,22.9435],[92.38214,23.28705],[92.26541,23.70392],[92.15417,23.73409],[92.04706,23.64229],[91.95093,23.73284],[91.95642,23.47361],[91.84789,23.42235],[91.76417,23.26619],[91.81634,23.08001],[91.7324,23.00043],[91.61571,22.93929],[91.54993,23.01051],[91.46615,23.2328],[91.4035,23.27522],[91.40848,23.07117],[91.36453,23.06612],[91.28293,23.37538],[91.15579,23.6599],[91.25192,23.83463],[91.22308,23.89616],[91.29587,24.0041],[91.35741,23.99072],[91.37414,24.10693],[91.55542,24.08687],[91.63782,24.1132],[91.65292,24.22095],[91.73257,24.14703],[91.76004,24.23848],[91.82596,24.22345],[91.89258,24.14674],[91.96603,24.3799],[92.11662,24.38997],[92.15796,24.54435],[92.25854,24.9191],[92.38626,24.86055],[92.49887,24.88796],[92.39147,25.01471],[92.33957,25.07593],[92.0316,25.1834],[91.63648,25.12846],[91.25517,25.20677],[90.87427,25.15799],[90.65042,25.17788],[90.40034,25.1534],[90.1155,25.22686],[89.90478,25.31038],[89.87629,25.28337],[89.83371,25.29548],[89.84086,25.31854],[89.81208,25.37244],[89.86129,25.61714],[89.84388,25.70042],[89.80585,25.82489],[89.86592,25.93115],[89.77728,26.04254],[89.77865,26.08387],[89.73581,26.15818],[89.70201,26.15138],[89.63968,26.22595],[89.57101,25.9682],[89.53515,26.00382],[89.35953,26.0077],[89.15869,26.13708],[89.08899,26.38845],[88.95612,26.4564],[88.92357,26.40711],[88.91321,26.37984],[89.05328,26.2469],[88.85004,26.23211],[88.78961,26.31093],[88.67837,26.26291],[88.69485,26.38353],[88.62144,26.46783],[88.4298,26.54489],[88.41196,26.63837],[88.33093,26.48929],[88.35153,26.45241],[88.36938,26.48683],[88.48749,26.45855],[88.51649,26.35923],[88.35153,26.29123],[88.34757,26.22216],[88.1844,26.14417],[88.16581,26.0238],[88.08804,25.91334],[88.13138,25.78773],[88.242,25.80811],[88.45103,25.66245],[88.4559,25.59227],[88.677,25.46959],[88.81296,25.51546],[88.85278,25.34679],[89.01105,25.30303],[89.00463,25.26583],[88.94067,25.18534],[88.44766,25.20149],[88.46277,25.07468],[88.33917,24.86803],[88.27325,24.88796],[88.21832,24.96642],[88.14004,24.93529],[88.15515,24.85806],[88.00683,24.66477],[88.08786,24.63232],[88.12296,24.51301],[88.50934,24.32474],[88.68801,24.31464],[88.74841,24.1959],[88.6976,24.14703],[88.73743,23.91751],[88.66189,23.87607],[88.58087,23.87105],[88.56507,23.64044],[88.74841,23.47361],[88.79351,23.50535],[88.79254,23.46028],[88.71133,23.2492],[88.99148,23.21134],[88.86377,23.08759],[88.88327,23.03885],[88.87063,22.95235],[88.96713,22.83346],[88.9151,22.75228],[88.94614,22.66941],[88.9367,22.58527],[89.07114,22.15335],[89.03553,21.77397],[89.13927,21.60785],[89.13606,21.42955],[92.61042,13.76986],[94.6371,13.81803],[94.53911,5.99016],[80.48418,10.20786],[79.42124,9.80115],[79.50447,8.91876],[78.52781,7.63099],[72.15131,7.6285],[68.11329,23.53945],[68.20763,23.85849],[68.39339,23.96838],[68.74643,23.97027],[68.7416,24.31904],[68.90914,24.33156],[68.97781,24.26021],[69.07806,24.29777],[69.19341,24.25646],[69.29778,24.28712],[69.59579,24.29777],[69.73335,24.17007],[70.03428,24.172],[70.11712,24.30915],[70.5667,24.43787],[70.57906,24.27774],[70.71502,24.23517],[70.88393,24.27398],[70.85784,24.30903],[70.94985,24.3791],[71.04461,24.34657],[71.12838,24.42662],[71.00341,24.46038],[70.97594,24.60904],[71.09405,24.69017],[70.94002,24.92843],[70.89148,25.15064],[70.66695,25.39314],[70.67382,25.68186],[70.60378,25.71898],[70.53649,25.68928],[70.37444,25.67443],[70.2687,25.71156],[70.0985,25.93238],[70.08193,26.08094],[70.17532,26.24118],[70.17532,26.55362],[70.05584,26.60398],[69.88555,26.56836],[69.50904,26.74892],[69.58519,27.18109],[70.03136,27.56627],[70.12502,27.8057],[70.37307,28.01208],[70.60927,28.02178],[70.79054,27.68423],[71.89921,27.96035],[71.9244,28.11555],[72.20329,28.3869],[72.29495,28.66367],[72.40402,28.78283],[72.94272,29.02487],[73.01337,29.16422],[73.05886,29.1878],[73.28094,29.56646],[73.3962,29.94707],[73.58665,30.01848],[73.80299,30.06969],[73.97225,30.19829],[73.95736,30.28466],[73.88993,30.36305],[74.5616,31.04153],[74.67971,31.05479],[74.6852,31.12771],[74.60006,31.13711],[74.60281,31.10419],[74.56023,31.08303],[74.51629,31.13829],[74.53223,31.30321],[74.59773,31.4136],[74.64713,31.45605],[74.59319,31.50197],[74.61517,31.55698],[74.57498,31.60382],[74.47771,31.72227],[74.58907,31.87824],[74.79919,31.95983],[74.86236,32.04485],[74.9269,32.0658],[75.00793,32.03786],[75.25649,32.10187],[75.38046,32.26836],[75.28259,32.36556],[75.03265,32.49538],[74.97634,32.45367],[74.84725,32.49075],[74.68362,32.49298],[74.67431,32.56676],[74.65251,32.56416],[74.64424,32.60985],[74.69542,32.66792],[74.65345,32.71225],[74.7113,32.84219],[74.64675,32.82604],[74.6289,32.75561],[74.45312,32.77755],[74.41467,32.90563],[74.31227,32.92795],[74.34875,32.97823],[74.31854,33.02891],[74.17571,33.07495],[74.15374,33.13477],[74.02144,33.18908],[74.01366,33.25199],[74.08782,33.26232],[74.17983,33.3679],[74.18121,33.4745],[74.10115,33.56392],[74.03576,33.56718],[73.97367,33.64061],[73.98968,33.66155],[73.96423,33.73071],[74.00891,33.75437],[74.05898,33.82089],[74.14001,33.83002],[74.26086,33.92237],[74.25262,34.01577],[74.21554,34.03853],[73.91341,34.01235],[73.88732,34.05105],[73.90677,34.10504],[73.98208,34.2522],[73.90517,34.35317],[73.8475,34.32935],[73.74862,34.34183],[73.74999,34.3781],[73.88732,34.48911],[73.89419,34.54568],[73.93951,34.57169],[73.93401,34.63386],[73.96423,34.68244],[74.12897,34.70073],[74.31239,34.79626],[74.58083,34.77386],[74.6663,34.703],[75.01479,34.64629],[75.38009,34.55021],[75.75438,34.51827],[76.04614,34.67566],[76.15463,34.6429],[76.47186,34.78965],[76.67648,34.76371],[76.74377,34.84039],[76.74514,34.92488],[76.87193,34.96906],[76.99251,34.93349],[77.11796,35.05419],[76.93465,35.39866],[76.85088,35.39754],[76.75475,35.52617],[76.77323,35.66062],[76.84539,35.67356],[76.96624,35.5932],[77.44277,35.46132],[77.70232,35.46244],[77.80532,35.52058],[78.11664,35.48022]]]]}},{type:"Feature",properties:{iso1A2:"PM",iso1A3:"SPM",iso1N3:"666",wikidata:"Q34617",nameEn:"Saint Pierre and Miquelon",country:"FR",groups:["021","003","019"],callingCodes:["508"]},geometry:{type:"MultiPolygon",coordinates:[[[[-56.72993,46.65575],[-56.27503,47.39728],[-55.90758,46.6223],[-56.72993,46.65575]]]]}},{type:"Feature",properties:{iso1A2:"IQ",iso1A3:"IRQ",iso1N3:"368",wikidata:"Q796",nameEn:"Iraq",groups:["145","142"],callingCodes:["964"]},geometry:{type:"MultiPolygon",coordinates:[[[[42.78887,37.38615],[42.93705,37.32015],[43.11403,37.37436],[43.30083,37.30629],[43.33508,37.33105],[43.50787,37.24436],[43.56702,37.25675],[43.63085,37.21957],[43.7009,37.23692],[43.8052,37.22825],[43.82699,37.19477],[43.84878,37.22205],[43.90949,37.22453],[44.02002,37.33229],[44.13521,37.32486],[44.2613,37.25055],[44.27998,37.16501],[44.22239,37.15756],[44.18503,37.09551],[44.25975,36.98119],[44.30645,36.97373],[44.35937,37.02843],[44.35315,37.04955],[44.38117,37.05825],[44.42631,37.05825],[44.63179,37.19229],[44.76698,37.16162],[44.78319,37.1431],[44.75229,37.11958],[44.81611,37.04383],[44.89862,37.01897],[44.91199,36.91468],[44.90173,36.86096],[44.83479,36.81362],[44.84725,36.77622],[45.01537,36.75128],[45.06985,36.6814],[45.06985,36.62645],[45.00759,36.5402],[45.11811,36.40751],[45.23953,36.43257],[45.27394,36.35846],[45.26261,36.3001],[45.30038,36.27769],[45.32235,36.17383],[45.37312,36.09917],[45.37652,36.06222],[45.33916,35.99424],[45.38275,35.97156],[45.46594,36.00042],[45.55245,35.99943],[45.60018,35.96069],[45.6645,35.92872],[45.76145,35.79898],[45.81442,35.82107],[45.89784,35.83708],[45.94711,35.82218],[46.08325,35.8581],[46.17198,35.8013],[46.32921,35.82655],[46.34166,35.78363],[46.23736,35.71414],[46.01631,35.69139],[46.0117,35.65059],[45.99452,35.63574],[46.0165,35.61501],[46.01307,35.59756],[46.03028,35.57416],[45.97584,35.58132],[46.01518,35.52012],[45.98453,35.49848],[46.05358,35.38568],[46.13152,35.32548],[46.15474,35.2883],[46.11367,35.23729],[46.18457,35.22561],[46.19738,35.18536],[46.16229,35.16984],[46.15642,35.1268],[46.19116,35.11097],[46.11763,35.07551],[46.07747,35.0838],[46.06508,35.03699],[45.94756,35.09188],[45.93108,35.08148],[45.92203,35.09538],[45.92173,35.0465],[45.87864,35.03441],[45.89477,34.95805],[45.86532,34.89858],[45.78904,34.91135],[45.79682,34.85133],[45.73641,34.83975],[45.70031,34.82322],[45.68284,34.76624],[45.65672,34.7222],[45.70031,34.69277],[45.73923,34.54416],[45.60224,34.55057],[45.59074,34.55558],[45.53219,34.60441],[45.51883,34.47692],[45.43879,34.45949],[45.46697,34.38221],[45.49171,34.3439],[45.53552,34.35148],[45.58667,34.30147],[45.56176,34.15088],[45.47264,34.03099],[45.41077,33.97421],[45.42789,33.9458],[45.50261,33.94968],[45.77814,33.60938],[45.89801,33.63661],[45.96183,33.55751],[45.86687,33.49263],[45.99919,33.5082],[46.20623,33.20395],[46.11905,33.11924],[46.05367,33.13097],[46.03966,33.09577],[46.15175,33.07229],[46.09103,32.98354],[46.17198,32.95612],[46.32298,32.9731],[46.46788,32.91992],[47.17218,32.45393],[47.37529,32.47808],[47.57144,32.20583],[47.52474,32.15972],[47.64771,32.07666],[47.86337,31.78422],[47.6804,31.39086],[47.68219,31.00004],[48.03221,30.9967],[48.02443,30.4789],[48.14585,30.44133],[48.18321,30.39703],[48.19425,30.32796],[48.21279,30.31644],[48.24385,30.33846],[48.26393,30.3408],[48.41117,30.19846],[48.41671,30.17254],[48.38714,30.13485],[48.38869,30.11062],[48.43384,30.08233],[48.4494,30.04456],[48.44785,30.00148],[48.51011,29.96238],[48.61441,29.93675],[48.83867,29.78572],[48.59531,29.66815],[48.40479,29.85763],[48.17332,30.02448],[48.06782,30.02906],[48.01114,29.98906],[47.7095,30.10453],[47.37192,30.10421],[47.15166,30.01044],[46.89695,29.50584],[46.5527,29.10283],[46.42415,29.05947],[44.72255,29.19736],[42.97796,30.48295],[42.97601,30.72204],[40.01521,32.05667],[39.29903,32.23259],[39.26157,32.35555],[39.04251,32.30203],[38.98762,32.47694],[39.08202,32.50304],[38.79171,33.37328],[40.64314,34.31604],[40.97676,34.39788],[41.12388,34.65742],[41.2345,34.80049],[41.21654,35.1508],[41.26569,35.42708],[41.38184,35.62502],[41.37027,35.84095],[41.2564,36.06012],[41.28864,36.35368],[41.40058,36.52502],[41.81736,36.58782],[42.36697,37.0627],[42.35724,37.10998],[42.56725,37.14878],[42.78887,37.38615]]]]}},{type:"Feature",properties:{iso1A2:"PN",iso1A3:"PCN",iso1N3:"612",wikidata:"Q35672",nameEn:"Pitcairn Islands",country:"GB",groups:["061","009"],driveSide:"left",callingCodes:["64"]},geometry:{type:"MultiPolygon",coordinates:[[[[-133.59543,-28.4709],[-133.61511,-21.93325],[-122.0366,-24.55017],[-133.59543,-28.4709]]]]}},{type:"Feature",properties:{iso1A2:"IS",iso1A3:"ISL",iso1N3:"352",wikidata:"Q189",nameEn:"Iceland",groups:["154","150"],callingCodes:["354"]},geometry:{type:"MultiPolygon",coordinates:[[[[-33.15676,62.62995],[-15.70914,69.67442],[-8.25539,63.0423],[-33.15676,62.62995]]]]}},{type:"Feature",properties:{iso1A2:"PR",iso1A3:"PRI",iso1N3:"630",wikidata:"Q1183",nameEn:"Puerto Rico",country:"US",groups:["029","003","419","019"],roadSpeedUnit:"mph",callingCodes:["1 787","1 939"]},geometry:{type:"MultiPolygon",coordinates:[[[[-65.27974,17.56928],[-68.20301,17.83927],[-67.99519,18.97186],[-65.02435,18.73231],[-65.27974,17.56928]]]]}},{type:"Feature",properties:{iso1A2:"JE",iso1A3:"JEY",iso1N3:"832",wikidata:"Q785",nameEn:"Jersey",country:"GB",groups:["830","154","150"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["44 01534"]},geometry:{type:"MultiPolygon",coordinates:[[[[-2.00491,48.86706],[-2.65349,49.15373],[-2.09454,49.46288],[-1.83944,49.23037],[-2.00491,48.86706]]]]}},{type:"Feature",properties:{iso1A2:"PS",iso1A3:"PSE",iso1N3:"275",wikidata:"Q23792",nameEn:"Palestine",country:"IL",groups:["145","142"],callingCodes:["970"]},geometry:{type:"MultiPolygon",coordinates:[[[[34.052,31.46619],[34.29262,31.70393],[34.48681,31.59711],[34.56797,31.54197],[34.48892,31.48365],[34.40077,31.40926],[34.36505,31.36404],[34.37381,31.30598],[34.36523,31.28963],[34.29417,31.24194],[34.26742,31.21998],[34.24012,31.29591],[34.23572,31.2966],[34.21853,31.32363],[34.052,31.46619]]],[[[35.47672,31.49578],[35.39675,31.49572],[35.22921,31.37445],[35.13033,31.3551],[35.02459,31.35979],[34.92571,31.34337],[34.88932,31.37093],[34.87833,31.39321],[34.89756,31.43891],[34.93258,31.47816],[34.94356,31.50743],[34.9415,31.55601],[34.95249,31.59813],[35.00879,31.65426],[35.08226,31.69107],[35.10782,31.71594],[35.11895,31.71454],[35.12933,31.7325],[35.13931,31.73012],[35.15119,31.73634],[35.15474,31.73352],[35.16478,31.73242],[35.18023,31.72067],[35.20538,31.72388],[35.21937,31.71578],[35.22392,31.71899],[35.23972,31.70896],[35.24315,31.71244],[35.2438,31.7201],[35.24981,31.72543],[35.25182,31.73945],[35.26319,31.74846],[35.25225,31.7678],[35.26058,31.79064],[35.25573,31.81362],[35.26404,31.82567],[35.251,31.83085],[35.25753,31.8387],[35.24816,31.8458],[35.2304,31.84222],[35.2249,31.85433],[35.22817,31.8638],[35.22567,31.86745],[35.22294,31.87889],[35.22014,31.88264],[35.2136,31.88241],[35.21276,31.88153],[35.21016,31.88237],[35.20945,31.8815],[35.20791,31.8821],[35.20673,31.88151],[35.20381,31.86716],[35.21128,31.863],[35.216,31.83894],[35.21469,31.81835],[35.19461,31.82687],[35.18169,31.82542],[35.18603,31.80901],[35.14174,31.81325],[35.07677,31.85627],[35.05617,31.85685],[35.01978,31.82944],[34.9724,31.83352],[34.99712,31.85569],[35.03489,31.85919],[35.03978,31.89276],[35.03489,31.92448],[35.00124,31.93264],[34.98682,31.96935],[35.00261,32.027],[34.9863,32.09551],[34.99437,32.10962],[34.98507,32.12606],[34.99039,32.14626],[34.96009,32.17503],[34.95703,32.19522],[34.98885,32.20758],[35.01841,32.23981],[35.02939,32.2671],[35.01119,32.28684],[35.01772,32.33863],[35.04243,32.35008],[35.05142,32.3667],[35.0421,32.38242],[35.05311,32.4024],[35.05423,32.41754],[35.07059,32.4585],[35.08564,32.46948],[35.09236,32.47614],[35.10024,32.47856],[35.10882,32.4757],[35.15937,32.50466],[35.2244,32.55289],[35.25049,32.52453],[35.29306,32.50947],[35.30685,32.51024],[35.35212,32.52047],[35.40224,32.50136],[35.42034,32.46009],[35.41598,32.45593],[35.41048,32.43706],[35.42078,32.41562],[35.55807,32.38674],[35.57111,32.21877],[35.52012,32.04076],[35.54375,31.96587],[35.52758,31.9131],[35.55941,31.76535],[35.47672,31.49578]]]]}},{type:"Feature",properties:{iso1A2:"JO",iso1A3:"JOR",iso1N3:"400",wikidata:"Q810",nameEn:"Jordan",groups:["145","142"],callingCodes:["962"]},geometry:{type:"MultiPolygon",coordinates:[[[[39.04251,32.30203],[39.26157,32.35555],[39.29903,32.23259],[38.99233,31.99721],[36.99791,31.50081],[37.99354,30.49998],[37.66395,30.33245],[37.4971,29.99949],[36.75083,29.86903],[36.50005,29.49696],[36.07081,29.18469],[34.95987,29.35727],[34.88293,29.37455],[34.92298,29.45305],[34.97718,29.54294],[34.98207,29.58147],[35.02147,29.66343],[35.14108,30.07374],[35.19183,30.34636],[35.16218,30.43535],[35.19595,30.50297],[35.21379,30.60401],[35.29311,30.71365],[35.33456,30.81224],[35.33984,30.8802],[35.41371,30.95565],[35.43658,31.12444],[35.40316,31.25535],[35.47672,31.49578],[35.55941,31.76535],[35.52758,31.9131],[35.54375,31.96587],[35.52012,32.04076],[35.57111,32.21877],[35.55807,32.38674],[35.55494,32.42687],[35.57485,32.48669],[35.56614,32.64393],[35.59813,32.65159],[35.61669,32.67999],[35.66527,32.681],[35.68467,32.70715],[35.75983,32.74803],[35.88405,32.71321],[35.93307,32.71966],[35.96633,32.66237],[36.02239,32.65911],[36.08074,32.51463],[36.20379,32.52751],[36.20875,32.49529],[36.23948,32.50108],[36.40959,32.37908],[36.83946,32.31293],[38.79171,33.37328],[39.08202,32.50304],[38.98762,32.47694],[39.04251,32.30203]]]]}},{type:"Feature",properties:{iso1A2:"PT",iso1A3:"PRT",iso1N3:"620",wikidata:"Q45",nameEn:"Portugal",groups:["EU","039","150"],callingCodes:["351"]},geometry:{type:"MultiPolygon",coordinates:[[[[-6.19128,41.57638],[-6.26777,41.48796],[-6.3306,41.37677],[-6.38553,41.38655],[-6.38551,41.35274],[-6.55937,41.24417],[-6.65046,41.24725],[-6.68286,41.21641],[-6.69711,41.1858],[-6.77319,41.13049],[-6.75655,41.10187],[-6.79241,41.05397],[-6.80942,41.03629],[-6.84781,41.02692],[-6.88843,41.03027],[-6.913,41.03922],[-6.9357,41.02888],[-6.8527,40.93958],[-6.84292,40.89771],[-6.80707,40.88047],[-6.79892,40.84842],[-6.82337,40.84472],[-6.82826,40.74603],[-6.79567,40.65955],[-6.84292,40.56801],[-6.80218,40.55067],[-6.7973,40.51723],[-6.84944,40.46394],[-6.84618,40.42177],[-6.78426,40.36468],[-6.80218,40.33239],[-6.86085,40.2976],[-6.86085,40.26776],[-7.00426,40.23169],[-7.02544,40.18564],[-7.00589,40.12087],[-6.94233,40.10716],[-6.86737,40.01986],[-6.91463,39.86618],[-6.97492,39.81488],[-7.01613,39.66877],[-7.24707,39.66576],[-7.33507,39.64569],[-7.54121,39.66717],[-7.49477,39.58794],[-7.2927,39.45847],[-7.3149,39.34857],[-7.23403,39.27579],[-7.23566,39.20132],[-7.12811,39.17101],[-7.14929,39.11287],[-7.10692,39.10275],[-7.04011,39.11919],[-6.97004,39.07619],[-6.95211,39.0243],[-7.051,38.907],[-7.03848,38.87221],[-7.26174,38.72107],[-7.265,38.61674],[-7.32529,38.44336],[-7.15581,38.27597],[-7.09389,38.17227],[-6.93418,38.21454],[-7.00375,38.01914],[-7.05966,38.01966],[-7.10366,38.04404],[-7.12648,38.00296],[-7.24544,37.98884],[-7.27314,37.90145],[-7.33441,37.81193],[-7.41981,37.75729],[-7.51759,37.56119],[-7.46878,37.47127],[-7.43974,37.38913],[-7.43227,37.25152],[-7.41854,37.23813],[-7.41133,37.20314],[-7.39769,37.16868],[-7.37282,36.96896],[-15.92339,29.50503],[-36.43765,41.39418],[-9.14112,41.86623],[-8.87157,41.86488],[-8.81794,41.90375],[-8.75712,41.92833],[-8.74606,41.9469],[-8.7478,41.96282],[-8.69071,41.98862],[-8.6681,41.99703],[-8.65832,42.02972],[-8.64626,42.03668],[-8.63791,42.04691],[-8.59493,42.05708],[-8.58086,42.05147],[-8.54563,42.0537],[-8.5252,42.06264],[-8.52837,42.07658],[-8.48185,42.0811],[-8.44123,42.08218],[-8.42512,42.07199],[-8.40143,42.08052],[-8.38323,42.07683],[-8.36353,42.09065],[-8.33912,42.08358],[-8.32161,42.10218],[-8.29809,42.106],[-8.2732,42.12396],[-8.24681,42.13993],[-8.22406,42.1328],[-8.1986,42.15402],[-8.18947,42.13853],[-8.19406,42.12141],[-8.18178,42.06436],[-8.11729,42.08537],[-8.08847,42.05767],[-8.08796,42.01398],[-8.16232,41.9828],[-8.2185,41.91237],[-8.19551,41.87459],[-8.16944,41.87944],[-8.16455,41.81753],[-8.0961,41.81024],[-8.01136,41.83453],[-7.9804,41.87337],[-7.92336,41.8758],[-7.90707,41.92432],[-7.88751,41.92553],[-7.88055,41.84571],[-7.84188,41.88065],[-7.69848,41.90977],[-7.65774,41.88308],[-7.58603,41.87944],[-7.62188,41.83089],[-7.52737,41.83939],[-7.49803,41.87095],[-7.45566,41.86488],[-7.44759,41.84451],[-7.42854,41.83262],[-7.42864,41.80589],[-7.37092,41.85031],[-7.32366,41.8406],[-7.18677,41.88793],[-7.18549,41.97515],[-7.14115,41.98855],[-7.08574,41.97401],[-7.07596,41.94977],[-7.01078,41.94977],[-6.98144,41.9728],[-6.95537,41.96553],[-6.94396,41.94403],[-6.82174,41.94493],[-6.81196,41.99097],[-6.76959,41.98734],[-6.75004,41.94129],[-6.61967,41.94008],[-6.58544,41.96674],[-6.5447,41.94371],[-6.56752,41.88429],[-6.51374,41.8758],[-6.56426,41.74219],[-6.54633,41.68623],[-6.49907,41.65823],[-6.44204,41.68258],[-6.29863,41.66432],[-6.19128,41.57638]]]]}},{type:"Feature",properties:{iso1A2:"KE",iso1A3:"KEN",iso1N3:"404",wikidata:"Q114",nameEn:"Kenya",groups:["014","202","002"],driveSide:"left",callingCodes:["254"]},geometry:{type:"MultiPolygon",coordinates:[[[[35.9419,4.61933],[35.95449,4.53244],[36.03924,4.44406],[36.84474,4.44518],[37.07724,4.33503],[38.14168,3.62487],[38.45812,3.60445],[38.52336,3.62551],[38.91938,3.51198],[39.07736,3.5267],[39.19954,3.47834],[39.49444,3.45521],[39.51551,3.40895],[39.55132,3.39634],[39.58339,3.47434],[39.76808,3.67058],[39.86043,3.86974],[40.77498,4.27683],[41.1754,3.94079],[41.89488,3.97375],[41.31368,3.14314],[40.98767,2.82959],[41.00099,-0.83068],[41.56,-1.59812],[41.56362,-1.66375],[41.75542,-1.85308],[39.62121,-4.68136],[39.44306,-4.93877],[39.21631,-4.67835],[37.81321,-3.69179],[37.75036,-3.54243],[37.63099,-3.50723],[37.5903,-3.42735],[37.71745,-3.304],[37.67199,-3.06222],[34.0824,-1.02264],[34.03084,-1.05101],[34.02286,-1.00779],[33.93107,-0.99298],[33.9264,-0.54188],[33.98449,-0.13079],[33.90936,0.10581],[34.10067,0.36372],[34.08727,0.44713],[34.11408,0.48884],[34.13493,0.58118],[34.20196,0.62289],[34.27345,0.63182],[34.31516,0.75693],[34.40041,0.80266],[34.43349,0.85254],[34.52369,1.10692],[34.57427,1.09868],[34.58029,1.14712],[34.67562,1.21265],[34.80223,1.22754],[34.82606,1.26626],[34.82606,1.30944],[34.7918,1.36752],[34.87819,1.5596],[34.92734,1.56109],[34.9899,1.6668],[34.98692,1.97348],[34.90947,2.42447],[34.95267,2.47209],[34.77244,2.70272],[34.78137,2.76223],[34.73967,2.85447],[34.65774,2.8753],[34.60114,2.93034],[34.56242,3.11478],[34.45815,3.18319],[34.40006,3.37949],[34.41794,3.44342],[34.39112,3.48802],[34.44922,3.51627],[34.45815,3.67385],[34.15429,3.80464],[34.06046,4.15235],[33.9873,4.23316],[34.47601,4.72162],[35.34151,5.02364],[35.30992,4.90402],[35.47843,4.91872],[35.42366,4.76969],[35.51424,4.61643],[35.9419,4.61933]]]]}},{type:"Feature",properties:{iso1A2:"PW",iso1A3:"PLW",iso1N3:"585",wikidata:"Q695",nameEn:"Palau",groups:["057","009"],roadSpeedUnit:"mph",callingCodes:["680"]},geometry:{type:"MultiPolygon",coordinates:[[[[128.97621,3.08804],[136.04605,12.45908],[136.27107,6.73747],[134.40878,1.79674],[128.97621,3.08804]]]]}},{type:"Feature",properties:{iso1A2:"KH",iso1A3:"KHM",iso1N3:"116",wikidata:"Q424",nameEn:"Cambodia",groups:["035","142"],callingCodes:["855"]},geometry:{type:"MultiPolygon",coordinates:[[[[105.87328,11.55953],[105.88962,11.43605],[105.86782,11.28343],[106.10444,11.07879],[106.1527,11.10476],[106.1757,11.07301],[106.20095,10.97795],[106.14301,10.98176],[106.18539,10.79451],[106.06708,10.8098],[105.94535,10.9168],[105.93403,10.83853],[105.84603,10.85873],[105.86376,10.89839],[105.77751,11.03671],[105.50045,10.94586],[105.42884,10.96878],[105.34011,10.86179],[105.11449,10.96332],[105.08326,10.95656],[105.02722,10.89236],[105.09571,10.72722],[104.95094,10.64003],[104.87933,10.52833],[104.59018,10.53073],[104.49869,10.4057],[104.47963,10.43046],[104.43778,10.42386],[103.99198,10.48391],[102.47649,9.66162],[102.52395,11.25257],[102.91449,11.65512],[102.90973,11.75613],[102.83957,11.8519],[102.78427,11.98746],[102.77026,12.06815],[102.70176,12.1686],[102.73134,12.37091],[102.78116,12.40284],[102.7796,12.43781],[102.57567,12.65358],[102.51963,12.66117],[102.4994,12.71736],[102.53053,12.77506],[102.49335,12.92711],[102.48694,12.97537],[102.52275,12.99813],[102.46011,13.08057],[102.43422,13.09061],[102.36146,13.26006],[102.36001,13.31142],[102.34611,13.35618],[102.35692,13.38274],[102.35563,13.47307],[102.361,13.50551],[102.33828,13.55613],[102.36859,13.57488],[102.44601,13.5637],[102.5358,13.56933],[102.57573,13.60461],[102.62483,13.60883],[102.58635,13.6286],[102.5481,13.6589],[102.56848,13.69366],[102.72727,13.77806],[102.77864,13.93374],[102.91251,14.01531],[102.93275,14.19044],[103.16469,14.33075],[103.39353,14.35639],[103.53518,14.42575],[103.71109,14.4348],[103.70175,14.38052],[103.93836,14.3398],[104.27616,14.39861],[104.55014,14.36091],[104.69335,14.42726],[104.97667,14.38806],[105.02804,14.23722],[105.08408,14.20402],[105.14012,14.23873],[105.17748,14.34432],[105.20894,14.34967],[105.2759,14.17496],[105.36775,14.09948],[105.44869,14.10703],[105.5561,14.15684],[105.78338,14.08438],[105.78182,14.02247],[105.90791,13.92881],[106.10405,13.9137],[106.10094,13.98471],[106.16632,14.01794],[106.18656,14.06324],[106.11962,14.11307],[106.10872,14.18401],[106.04801,14.20363],[106.02311,14.30623],[105.99509,14.32734],[106.00131,14.36957],[106.21302,14.36203],[106.25194,14.48415],[106.32355,14.44043],[106.40916,14.45249],[106.43874,14.52032],[106.47766,14.50977],[106.45898,14.55045],[106.50723,14.58963],[106.54148,14.59565],[106.57106,14.50525],[106.59908,14.50977],[106.63333,14.44194],[106.73762,14.42687],[106.80767,14.31226],[106.8497,14.29416],[106.90574,14.33639],[106.9649,14.3198],[106.98825,14.36806],[107.04585,14.41782],[107.03962,14.45099],[107.09722,14.3937],[107.17038,14.41782],[107.21241,14.48716],[107.256,14.48716],[107.26534,14.54292],[107.29803,14.58963],[107.3276,14.58812],[107.37897,14.54443],[107.44435,14.52785],[107.47238,14.61523],[107.54361,14.69092],[107.55371,14.628],[107.52102,14.59034],[107.52569,14.54665],[107.48521,14.40346],[107.44941,14.41552],[107.39493,14.32655],[107.40427,14.24509],[107.33577,14.11832],[107.37158,14.07906],[107.35757,14.02319],[107.38247,13.99147],[107.44318,13.99751],[107.46498,13.91593],[107.45252,13.78897],[107.53503,13.73908],[107.61909,13.52577],[107.62843,13.3668],[107.49144,13.01215],[107.49611,12.88926],[107.55993,12.7982],[107.5755,12.52177],[107.55059,12.36824],[107.4463,12.29373],[107.42917,12.24657],[107.34511,12.33327],[107.15831,12.27547],[106.99953,12.08983],[106.92325,12.06548],[106.79405,12.0807],[106.70687,11.96956],[106.4111,11.97413],[106.4687,11.86751],[106.44068,11.86294],[106.44535,11.8279],[106.41577,11.76999],[106.45158,11.68616],[106.44691,11.66787],[106.37219,11.69836],[106.30525,11.67549],[106.26478,11.72122],[106.18539,11.75171],[106.13158,11.73283],[106.06708,11.77761],[106.02038,11.77457],[106.00792,11.7197],[105.95188,11.63738],[105.88962,11.67854],[105.8507,11.66635],[105.80867,11.60536],[105.81645,11.56876],[105.87328,11.55953]]]]}},{type:"Feature",properties:{iso1A2:"PY",iso1A3:"PRY",iso1N3:"600",wikidata:"Q733",nameEn:"Paraguay",groups:["005","419","019"],callingCodes:["595"]},geometry:{type:"MultiPolygon",coordinates:[[[[-58.16225,-20.16193],[-57.84536,-20.93155],[-57.93492,-21.65505],[-57.88239,-21.6868],[-57.94642,-21.73799],[-57.98625,-22.09157],[-56.6508,-22.28387],[-56.5212,-22.11556],[-56.45893,-22.08072],[-56.23206,-22.25347],[-55.8331,-22.29008],[-55.74941,-22.46436],[-55.741,-22.52018],[-55.72366,-22.5519],[-55.6986,-22.56268],[-55.68742,-22.58407],[-55.62493,-22.62765],[-55.63849,-22.95122],[-55.5446,-23.22811],[-55.52288,-23.2595],[-55.5555,-23.28237],[-55.43585,-23.87157],[-55.44117,-23.9185],[-55.41784,-23.9657],[-55.12292,-23.99669],[-55.0518,-23.98666],[-55.02691,-23.97317],[-54.6238,-23.83078],[-54.32807,-24.01865],[-54.28207,-24.07305],[-54.4423,-25.13381],[-54.62033,-25.46026],[-54.60196,-25.48397],[-54.59509,-25.53696],[-54.59398,-25.59224],[-54.62063,-25.91213],[-54.60664,-25.9691],[-54.67359,-25.98607],[-54.69333,-26.37705],[-54.70732,-26.45099],[-54.80868,-26.55669],[-55.00584,-26.78754],[-55.06351,-26.80195],[-55.16948,-26.96068],[-55.25243,-26.93808],[-55.39611,-26.97679],[-55.62322,-27.1941],[-55.59094,-27.32444],[-55.74475,-27.44485],[-55.89195,-27.3467],[-56.18313,-27.29851],[-56.85337,-27.5165],[-58.04205,-27.2387],[-58.59549,-27.29973],[-58.65321,-27.14028],[-58.3198,-26.83443],[-58.1188,-26.16704],[-57.87176,-25.93604],[-57.57431,-25.47269],[-57.80821,-25.13863],[-58.25492,-24.92528],[-58.33055,-24.97099],[-59.33886,-24.49935],[-59.45482,-24.34787],[-60.03367,-24.00701],[-60.28163,-24.04436],[-60.99754,-23.80934],[-61.0782,-23.62932],[-61.9756,-23.0507],[-62.22768,-22.55807],[-62.51761,-22.37684],[-62.64455,-22.25091],[-62.2757,-21.06657],[-62.26883,-20.55311],[-61.93912,-20.10053],[-61.73723,-19.63958],[-60.00638,-19.2981],[-59.06965,-19.29148],[-58.23216,-19.80058],[-58.16225,-20.16193]]]]}},{type:"Feature",properties:{iso1A2:"KM",iso1A3:"COM",iso1N3:"174",wikidata:"Q970",nameEn:"Comoros",groups:["014","202","002"],callingCodes:["269"]},geometry:{type:"MultiPolygon",coordinates:[[[[42.93552,-11.11413],[44.69407,-11.04481],[44.75722,-12.58368],[42.99868,-12.65261],[42.93552,-11.11413]]]]}},{type:"Feature",properties:{iso1A2:"QA",iso1A3:"QAT",iso1N3:"634",wikidata:"Q846",nameEn:"Qatar",groups:["145","142"],callingCodes:["974"]},geometry:{type:"MultiPolygon",coordinates:[[[[50.92992,24.54396],[50.8133,24.74049],[50.57069,25.57887],[50.80824,25.54641],[50.7801,25.595],[50.86149,25.6965],[50.81266,25.88946],[50.93865,26.30758],[51.83682,26.70231],[51.83108,24.71675],[51.58834,24.66608],[51.39468,24.62785],[51.29972,24.50747],[51.09638,24.46907],[50.92992,24.54396]]]]}},{type:"Feature",properties:{iso1A2:"KP",iso1A3:"PRK",iso1N3:"408",wikidata:"Q423",nameEn:"North Korea",groups:["030","142"],callingCodes:["850"]},geometry:{type:"MultiPolygon",coordinates:[[[[130.26095,42.9027],[130.23068,42.80125],[130.2385,42.71127],[130.41826,42.6011],[130.44361,42.54849],[130.50123,42.61636],[130.55143,42.52158],[130.56835,42.43281],[130.60805,42.4317],[130.64181,42.41422],[130.66367,42.38024],[130.65022,42.32281],[131.95041,41.5445],[128.65655,38.61914],[128.37487,38.62345],[128.31105,38.58462],[128.27652,38.41657],[128.02917,38.31861],[127.55013,38.32257],[127.49672,38.30647],[127.38727,38.33227],[127.15749,38.30722],[127.04479,38.25518],[126.95338,38.17735],[126.95887,38.1347],[126.88106,38.10246],[126.84961,38.0344],[126.67023,37.95852],[126.68793,37.9175],[126.68793,37.83728],[126.66067,37.7897],[126.59918,37.76364],[126.56709,37.76857],[126.46818,37.80873],[126.43239,37.84095],[126.24402,37.83113],[126.19097,37.81462],[126.18776,37.74728],[126.13074,37.70512],[125.81159,37.72949],[125.37112,37.62643],[125.06408,37.66334],[124.87921,37.80827],[124.84224,37.977],[124.67666,38.05679],[123.85601,37.49093],[123.90497,38.79949],[124.17532,39.8232],[124.23201,39.9248],[124.35029,39.95639],[124.37089,40.03004],[124.3322,40.05573],[124.38556,40.11047],[124.40719,40.13655],[124.86913,40.45387],[125.71172,40.85223],[125.76869,40.87908],[126.00335,40.92835],[126.242,41.15454],[126.53189,41.35206],[126.60631,41.65565],[126.90729,41.79955],[127.17841,41.59714],[127.29712,41.49473],[127.92943,41.44291],[128.02633,41.42103],[128.03311,41.39232],[128.12967,41.37931],[128.18546,41.41279],[128.20061,41.40895],[128.30716,41.60322],[128.15119,41.74568],[128.04487,42.01769],[128.94007,42.03537],[128.96068,42.06657],[129.15178,42.17224],[129.22285,42.26491],[129.22423,42.3553],[129.28541,42.41574],[129.42882,42.44702],[129.54701,42.37254],[129.60482,42.44461],[129.72541,42.43739],[129.75294,42.59409],[129.77183,42.69435],[129.7835,42.76521],[129.80719,42.79218],[129.83277,42.86746],[129.85261,42.96494],[129.8865,43.00395],[129.95082,43.01051],[129.96409,42.97306],[130.12957,42.98361],[130.09764,42.91425],[130.26095,42.9027]]]]}},{type:"Feature",properties:{iso1A2:"RE",iso1A3:"REU",iso1N3:"638",wikidata:"Q17070",nameEn:"Réunion",country:"FR",groups:["EU","014","202","002"],callingCodes:["262"]},geometry:{type:"MultiPolygon",coordinates:[[[[53.37984,-21.23941],[56.62373,-20.2711],[56.73473,-21.9174],[53.37984,-21.23941]]]]}},{type:"Feature",properties:{iso1A2:"AE",iso1A3:"ARE",iso1N3:"784",wikidata:"Q878",nameEn:"United Arab Emirates",groups:["145","142"],callingCodes:["971"]},geometry:{type:"MultiPolygon",coordinates:[[[[56.26534,25.62825],[56.82555,25.7713],[56.86325,25.03856],[56.3227,24.97284],[56.34873,24.93205],[56.30269,24.88334],[56.20568,24.85063],[56.20062,24.78565],[56.13684,24.73699],[56.06128,24.74457],[56.03535,24.81161],[55.97836,24.87673],[55.97467,24.89639],[56.05106,24.87461],[56.05715,24.95727],[55.96316,25.00857],[55.90849,24.96771],[55.85094,24.96858],[55.81116,24.9116],[55.81348,24.80102],[55.83408,24.77858],[55.83271,24.68567],[55.76461,24.5287],[55.83271,24.41521],[55.83395,24.32776],[55.80747,24.31069],[55.79145,24.27914],[55.76781,24.26209],[55.75939,24.26114],[55.75382,24.2466],[55.75257,24.23466],[55.76558,24.23227],[55.77658,24.23476],[55.83367,24.20193],[55.95472,24.2172],[56.01799,24.07426],[55.8308,24.01633],[55.73301,24.05994],[55.48677,23.94946],[55.57358,23.669],[55.22634,23.10378],[55.2137,22.71065],[55.13599,22.63334],[52.56622,22.94341],[51.59617,24.12041],[51.58871,24.27256],[51.41644,24.39615],[51.58834,24.66608],[51.83108,24.71675],[52.02277,24.75635],[52.35509,25.00368],[52.82259,25.51697],[53.97892,24.64436],[55.14145,25.62624],[55.81777,26.18798],[56.08666,26.05038],[56.15498,26.06828],[56.19334,25.9795],[56.13963,25.82765],[56.17416,25.77239],[56.13579,25.73524],[56.14826,25.66351],[56.18363,25.65508],[56.20473,25.61119],[56.25365,25.60211],[56.26636,25.60643],[56.25341,25.61443],[56.26534,25.62825]],[[56.26062,25.33108],[56.23362,25.31253],[56.25008,25.28843],[56.24465,25.27505],[56.20838,25.25668],[56.20872,25.24104],[56.24341,25.22867],[56.27628,25.23404],[56.34438,25.26653],[56.35172,25.30681],[56.3111,25.30107],[56.3005,25.31815],[56.26062,25.33108]]],[[[56.28423,25.26344],[56.27086,25.26128],[56.2716,25.27916],[56.28102,25.28486],[56.29379,25.2754],[56.28423,25.26344]]]]}},{type:"Feature",properties:{iso1A2:"RO",iso1A3:"ROU",iso1N3:"642",wikidata:"Q218",nameEn:"Romania",groups:["EU","151","150"],callingCodes:["40"]},geometry:{type:"MultiPolygon",coordinates:[[[[27.15622,47.98538],[27.1618,47.92391],[27.29069,47.73722],[27.25519,47.71366],[27.32202,47.64009],[27.3979,47.59473],[27.47942,47.48113],[27.55731,47.46637],[27.60263,47.32507],[27.68706,47.28962],[27.73172,47.29248],[27.81892,47.1381],[28.09095,46.97621],[28.12173,46.82283],[28.24808,46.64305],[28.22281,46.50481],[28.25769,46.43334],[28.18902,46.35283],[28.19864,46.31869],[28.10937,46.22852],[28.13684,46.18099],[28.08612,46.01105],[28.13111,45.92819],[28.16568,45.6421],[28.08927,45.6051],[28.18741,45.47358],[28.21139,45.46895],[28.28504,45.43907],[28.34554,45.32102],[28.5735,45.24759],[28.71358,45.22631],[28.78911,45.24179],[28.81383,45.3384],[28.94292,45.28045],[28.96077,45.33164],[29.24779,45.43388],[29.42632,45.44545],[29.59798,45.38857],[29.68175,45.26885],[29.65428,45.25629],[29.69272,45.19227],[30.04414,45.08461],[29.24336,43.70874],[28.23293,43.76],[27.99558,43.84193],[27.92008,44.00761],[27.73468,43.95326],[27.64542,44.04958],[27.60834,44.01206],[27.39757,44.0141],[27.26845,44.12602],[26.95141,44.13555],[26.62712,44.05698],[26.38764,44.04356],[26.10115,43.96908],[26.05584,43.90925],[25.94911,43.85745],[25.72792,43.69263],[25.39528,43.61866],[25.17144,43.70261],[25.10718,43.6831],[24.96682,43.72693],[24.73542,43.68523],[24.62281,43.74082],[24.50264,43.76314],[24.35364,43.70211],[24.18149,43.68218],[23.73978,43.80627],[23.61687,43.79289],[23.4507,43.84936],[23.26772,43.84843],[23.05288,43.79494],[22.85314,43.84452],[22.83753,43.88055],[22.87873,43.9844],[23.01674,44.01946],[23.04988,44.07694],[22.67173,44.21564],[22.68166,44.28206],[22.56012,44.30712],[22.45436,44.47258],[22.54021,44.47836],[22.56493,44.53419],[22.61368,44.55719],[22.70981,44.51852],[22.76749,44.54446],[22.69196,44.61587],[22.61917,44.61489],[22.45301,44.7194],[22.30844,44.6619],[22.18315,44.48179],[22.13234,44.47444],[22.08016,44.49844],[21.99364,44.63395],[21.7795,44.66165],[21.71692,44.65349],[21.67504,44.67107],[21.61942,44.67059],[21.60019,44.75208],[21.55007,44.77304],[21.38802,44.78133],[21.35643,44.86364],[21.44013,44.87613],[21.48202,44.87199],[21.56328,44.89502],[21.54938,44.9327],[21.35855,45.01941],[21.4505,45.04294],[21.51299,45.15345],[21.48278,45.19557],[21.29398,45.24148],[21.20392,45.2677],[21.17612,45.32566],[21.09894,45.30144],[20.87948,45.42743],[20.86026,45.47295],[20.77217,45.49788],[20.83321,45.53567],[20.76798,45.60969],[20.80361,45.65875],[20.82364,45.77738],[20.78446,45.78522],[20.77416,45.75601],[20.70069,45.7493],[20.65645,45.82801],[20.54818,45.89939],[20.35862,45.99356],[20.26068,46.12332],[20.28324,46.1438],[20.35573,46.16629],[20.45377,46.14405],[20.49718,46.18721],[20.63863,46.12728],[20.76085,46.21002],[20.74574,46.25467],[20.86797,46.28884],[21.06572,46.24897],[21.16872,46.30118],[21.28061,46.44941],[21.26929,46.4993],[21.33214,46.63035],[21.43926,46.65109],[21.5151,46.72147],[21.48935,46.7577],[21.52028,46.84118],[21.59307,46.86935],[21.59581,46.91628],[21.68645,46.99595],[21.648,47.03902],[21.78395,47.11104],[21.94463,47.38046],[22.01055,47.37767],[22.03389,47.42508],[22.00917,47.50492],[22.31816,47.76126],[22.41979,47.7391],[22.46559,47.76583],[22.67247,47.7871],[22.76617,47.8417],[22.77991,47.87211],[22.89849,47.95851],[22.94301,47.96672],[22.92241,48.02002],[23.0158,47.99338],[23.08858,48.00716],[23.1133,48.08061],[23.15999,48.12188],[23.27397,48.08245],[23.33577,48.0237],[23.4979,47.96858],[23.52803,48.01818],[23.5653,48.00499],[23.63894,48.00293],[23.66262,47.98786],[23.75188,47.99705],[23.80904,47.98142],[23.8602,47.9329],[23.89352,47.94512],[23.94192,47.94868],[23.96337,47.96672],[23.98553,47.96076],[24.00801,47.968],[24.02999,47.95087],[24.06466,47.95317],[24.11281,47.91487],[24.22566,47.90231],[24.34926,47.9244],[24.43578,47.97131],[24.61994,47.95062],[24.70632,47.84428],[24.81893,47.82031],[24.88896,47.7234],[25.11144,47.75203],[25.23778,47.89403],[25.63878,47.94924],[25.77723,47.93919],[26.05901,47.9897],[26.17711,47.99246],[26.33504,48.18418],[26.55202,48.22445],[26.62823,48.25804],[26.81161,48.25049],[26.87708,48.19919],[26.94265,48.1969],[26.98042,48.15752],[26.96119,48.13003],[27.04118,48.12522],[27.02985,48.09083],[27.15622,47.98538]]]]}},{type:"Feature",properties:{iso1A2:"AL",iso1A3:"ALB",iso1N3:"008",wikidata:"Q222",nameEn:"Albania",groups:["039","150"],callingCodes:["355"]},geometry:{type:"MultiPolygon",coordinates:[[[[20.07761,42.55582],[20.17127,42.50469],[20.21797,42.41237],[20.24399,42.32168],[20.34479,42.32656],[20.3819,42.3029],[20.48857,42.25444],[20.56955,42.12097],[20.55633,42.08173],[20.59434,42.03879],[20.63069,41.94913],[20.57946,41.91593],[20.59524,41.8818],[20.55976,41.87068],[20.57144,41.7897],[20.53405,41.78099],[20.51301,41.72433],[20.52937,41.69292],[20.51769,41.65975],[20.55508,41.58113],[20.52103,41.56473],[20.45809,41.5549],[20.45331,41.51436],[20.49039,41.49277],[20.51301,41.442],[20.55976,41.4087],[20.52119,41.34381],[20.49432,41.33679],[20.51068,41.2323],[20.59715,41.13644],[20.58546,41.11179],[20.59832,41.09066],[20.63454,41.0889],[20.65558,41.08009],[20.71634,40.91781],[20.73504,40.9081],[20.81567,40.89662],[20.83671,40.92752],[20.94305,40.92399],[20.97693,40.90103],[20.97887,40.85475],[20.98396,40.79109],[20.95752,40.76982],[20.98134,40.76046],[21.05833,40.66586],[21.03932,40.56299],[20.96908,40.51526],[20.94925,40.46625],[20.83688,40.47882],[20.7906,40.42726],[20.78234,40.35803],[20.71789,40.27739],[20.67162,40.09433],[20.62566,40.0897],[20.61081,40.07866],[20.55593,40.06524],[20.51297,40.08168],[20.48487,40.06271],[20.42373,40.06777],[20.37911,39.99058],[20.31135,39.99438],[20.41546,39.82832],[20.41475,39.81437],[20.38572,39.78516],[20.30804,39.81563],[20.29152,39.80421],[20.31961,39.72799],[20.27412,39.69884],[20.22707,39.67459],[20.22376,39.64532],[20.15988,39.652],[20.12956,39.65805],[20.05189,39.69112],[20.00957,39.69227],[19.98042,39.6504],[19.92466,39.69533],[19.97622,39.78684],[19.95905,39.82857],[19.0384,40.35325],[19.26406,41.74971],[19.37597,41.84849],[19.37451,41.8842],[19.33812,41.90669],[19.34601,41.95675],[19.37691,41.96977],[19.36867,42.02564],[19.37548,42.06835],[19.40687,42.10024],[19.28623,42.17745],[19.42,42.33019],[19.42352,42.36546],[19.4836,42.40831],[19.65972,42.62774],[19.73244,42.66299],[19.77375,42.58517],[19.74731,42.57422],[19.76549,42.50237],[19.82333,42.46581],[19.9324,42.51699],[20.00842,42.5109],[20.01834,42.54622],[20.07761,42.55582]]]]}},{type:"Feature",properties:{iso1A2:"RS",iso1A3:"SRB",iso1N3:"688",wikidata:"Q403",nameEn:"Serbia",groups:["039","150"],callingCodes:["381"]},geometry:{type:"MultiPolygon",coordinates:[[[[19.66007,46.19005],[19.81491,46.1313],[19.93508,46.17553],[20.01816,46.17696],[20.03533,46.14509],[20.09713,46.17315],[20.26068,46.12332],[20.35862,45.99356],[20.54818,45.89939],[20.65645,45.82801],[20.70069,45.7493],[20.77416,45.75601],[20.78446,45.78522],[20.82364,45.77738],[20.80361,45.65875],[20.76798,45.60969],[20.83321,45.53567],[20.77217,45.49788],[20.86026,45.47295],[20.87948,45.42743],[21.09894,45.30144],[21.17612,45.32566],[21.20392,45.2677],[21.29398,45.24148],[21.48278,45.19557],[21.51299,45.15345],[21.4505,45.04294],[21.35855,45.01941],[21.54938,44.9327],[21.56328,44.89502],[21.48202,44.87199],[21.44013,44.87613],[21.35643,44.86364],[21.38802,44.78133],[21.55007,44.77304],[21.60019,44.75208],[21.61942,44.67059],[21.67504,44.67107],[21.71692,44.65349],[21.7795,44.66165],[21.99364,44.63395],[22.08016,44.49844],[22.13234,44.47444],[22.18315,44.48179],[22.30844,44.6619],[22.45301,44.7194],[22.61917,44.61489],[22.69196,44.61587],[22.76749,44.54446],[22.70981,44.51852],[22.61368,44.55719],[22.56493,44.53419],[22.54021,44.47836],[22.45436,44.47258],[22.56012,44.30712],[22.68166,44.28206],[22.67173,44.21564],[22.61711,44.16938],[22.61688,44.06534],[22.41449,44.00514],[22.35558,43.81281],[22.41043,43.69566],[22.47582,43.6558],[22.53397,43.47225],[22.82036,43.33665],[22.89727,43.22417],[23.00806,43.19279],[22.98104,43.11199],[22.89521,43.03625],[22.78397,42.98253],[22.74826,42.88701],[22.54302,42.87774],[22.43309,42.82057],[22.4997,42.74144],[22.43983,42.56851],[22.55669,42.50144],[22.51961,42.3991],[22.47498,42.3915],[22.45919,42.33822],[22.34773,42.31725],[22.29275,42.34913],[22.29605,42.37477],[22.16384,42.32103],[22.02908,42.29848],[21.94405,42.34669],[21.91595,42.30392],[21.84654,42.3247],[21.77176,42.2648],[21.70111,42.23789],[21.58992,42.25915],[21.56772,42.30946],[21.5264,42.33634],[21.53467,42.36809],[21.57021,42.3647],[21.59029,42.38042],[21.62887,42.37664],[21.64209,42.41081],[21.62556,42.45106],[21.7035,42.51899],[21.70522,42.54176],[21.7327,42.55041],[21.75672,42.62695],[21.79413,42.65923],[21.75025,42.70125],[21.6626,42.67813],[21.58755,42.70418],[21.59154,42.72643],[21.47498,42.74695],[21.39045,42.74888],[21.44047,42.87276],[21.36941,42.87397],[21.32974,42.90424],[21.2719,42.8994],[21.23534,42.95523],[21.23877,43.00848],[21.2041,43.02277],[21.16734,42.99694],[21.14465,43.11089],[21.08952,43.13471],[21.05378,43.10707],[21.00749,43.13984],[20.96287,43.12416],[20.83727,43.17842],[20.88685,43.21697],[20.82145,43.26769],[20.73811,43.25068],[20.68688,43.21335],[20.59929,43.20492],[20.69515,43.09641],[20.64557,43.00826],[20.59929,43.01067],[20.48692,42.93208],[20.53484,42.8885],[20.43734,42.83157],[20.40594,42.84853],[20.35692,42.8335],[20.34528,42.90676],[20.16415,42.97177],[20.14896,42.99058],[20.12325,42.96237],[20.05431,42.99571],[20.04729,43.02732],[19.98887,43.0538],[19.96549,43.11098],[19.92576,43.08539],[19.79255,43.11951],[19.76918,43.16044],[19.64063,43.19027],[19.62661,43.2286],[19.54598,43.25158],[19.52962,43.31623],[19.48171,43.32644],[19.44315,43.38846],[19.22229,43.47926],[19.22807,43.5264],[19.24774,43.53061],[19.2553,43.5938],[19.33426,43.58833],[19.36653,43.60921],[19.41941,43.54056],[19.42696,43.57987],[19.50455,43.58385],[19.5176,43.71403],[19.3986,43.79668],[19.23465,43.98764],[19.24363,44.01502],[19.38439,43.96611],[19.52515,43.95573],[19.56498,43.99922],[19.61836,44.01464],[19.61991,44.05254],[19.57467,44.04716],[19.55999,44.06894],[19.51167,44.08158],[19.47321,44.1193],[19.48386,44.14332],[19.47338,44.15034],[19.43905,44.13088],[19.40927,44.16722],[19.3588,44.18353],[19.34773,44.23244],[19.32464,44.27185],[19.26945,44.26957],[19.23306,44.26097],[19.20508,44.2917],[19.18328,44.28383],[19.16741,44.28648],[19.13332,44.31492],[19.13556,44.338],[19.11547,44.34218],[19.1083,44.3558],[19.11865,44.36712],[19.10298,44.36924],[19.10365,44.37795],[19.10704,44.38249],[19.10749,44.39421],[19.11785,44.40313],[19.14681,44.41463],[19.14837,44.45253],[19.12278,44.50132],[19.13369,44.52521],[19.16699,44.52197],[19.26388,44.65412],[19.32543,44.74058],[19.36722,44.88164],[19.18183,44.92055],[19.01994,44.85493],[18.98957,44.90645],[19.02871,44.92541],[19.06853,44.89915],[19.15573,44.95409],[19.05205,44.97692],[19.1011,45.01191],[19.07952,45.14668],[19.14063,45.12972],[19.19144,45.17863],[19.43589,45.17137],[19.41941,45.23475],[19.28208,45.23813],[19.10774,45.29547],[18.97446,45.37528],[18.99918,45.49333],[19.08364,45.48804],[19.07471,45.53086],[18.94562,45.53712],[18.88776,45.57253],[18.96691,45.66731],[18.90305,45.71863],[18.85783,45.85493],[18.81394,45.91329],[18.99712,45.93537],[19.01284,45.96529],[19.0791,45.96458],[19.10388,46.04015],[19.14543,45.9998],[19.28826,45.99694],[19.52473,46.1171],[19.56113,46.16824],[19.66007,46.19005]]]]}},{type:"Feature",properties:{iso1A2:"AR",iso1A3:"ARG",iso1N3:"032",wikidata:"Q414",nameEn:"Argentina",aliases:["RA"],groups:["005","419","019"],callingCodes:["54"]},geometry:{type:"MultiPolygon",coordinates:[[[[-72.31343,-50.58411],[-73.15765,-50.78337],[-73.55259,-49.92488],[-73.45156,-49.79461],[-73.09655,-49.14342],[-72.56894,-48.81116],[-72.54042,-48.52392],[-72.27662,-48.28727],[-72.50478,-47.80586],[-71.94152,-47.13595],[-71.68577,-46.55385],[-71.75614,-45.61611],[-71.35687,-45.22075],[-72.06985,-44.81756],[-71.26418,-44.75684],[-71.16436,-44.46244],[-71.81318,-44.38097],[-71.64206,-43.64774],[-72.14828,-42.85321],[-72.15541,-42.15941],[-71.74901,-42.11711],[-71.92726,-40.72714],[-71.37826,-38.91474],[-70.89532,-38.6923],[-71.24279,-37.20264],[-70.95047,-36.4321],[-70.38008,-36.02375],[-70.49416,-35.24145],[-69.87386,-34.13344],[-69.88099,-33.34489],[-70.55832,-31.51559],[-70.14479,-30.36595],[-69.8596,-30.26131],[-69.99507,-29.28351],[-69.80969,-29.07185],[-69.66709,-28.44055],[-69.22504,-27.95042],[-68.77586,-27.16029],[-68.43363,-27.08414],[-68.27677,-26.90626],[-68.59048,-26.49861],[-68.56909,-26.28146],[-68.38372,-26.15353],[-68.57622,-25.32505],[-68.38372,-25.08636],[-68.56909,-24.69831],[-68.24825,-24.42596],[-67.33563,-24.04237],[-66.99632,-22.99839],[-67.18382,-22.81525],[-66.7298,-22.23644],[-66.29714,-22.08741],[-66.24077,-21.77837],[-66.03836,-21.84829],[-66.04832,-21.9187],[-65.9261,-21.93335],[-65.7467,-22.10105],[-65.61166,-22.09504],[-65.58694,-22.09794],[-65.57743,-22.07675],[-65.47435,-22.08908],[-64.99524,-22.08255],[-64.90014,-22.12136],[-64.67174,-22.18957],[-64.58888,-22.25035],[-64.4176,-22.67692],[-64.35108,-22.73282],[-64.31489,-22.88824],[-64.22918,-22.55807],[-63.93287,-21.99934],[-63.70963,-21.99934],[-63.68113,-22.0544],[-63.66482,-21.99918],[-62.81124,-21.9987],[-62.8078,-22.12534],[-62.64455,-22.25091],[-62.51761,-22.37684],[-62.22768,-22.55807],[-61.9756,-23.0507],[-61.0782,-23.62932],[-60.99754,-23.80934],[-60.28163,-24.04436],[-60.03367,-24.00701],[-59.45482,-24.34787],[-59.33886,-24.49935],[-58.33055,-24.97099],[-58.25492,-24.92528],[-57.80821,-25.13863],[-57.57431,-25.47269],[-57.87176,-25.93604],[-58.1188,-26.16704],[-58.3198,-26.83443],[-58.65321,-27.14028],[-58.59549,-27.29973],[-58.04205,-27.2387],[-56.85337,-27.5165],[-56.18313,-27.29851],[-55.89195,-27.3467],[-55.74475,-27.44485],[-55.59094,-27.32444],[-55.62322,-27.1941],[-55.39611,-26.97679],[-55.25243,-26.93808],[-55.16948,-26.96068],[-55.06351,-26.80195],[-55.00584,-26.78754],[-54.80868,-26.55669],[-54.70732,-26.45099],[-54.69333,-26.37705],[-54.67359,-25.98607],[-54.60664,-25.9691],[-54.62063,-25.91213],[-54.59398,-25.59224],[-54.5502,-25.58915],[-54.52926,-25.62846],[-53.90831,-25.55513],[-53.83691,-25.94849],[-53.73511,-26.04211],[-53.73086,-26.05842],[-53.7264,-26.0664],[-53.73391,-26.07006],[-53.73968,-26.10012],[-53.65018,-26.19501],[-53.65237,-26.23289],[-53.63739,-26.2496],[-53.63881,-26.25075],[-53.64632,-26.24798],[-53.64186,-26.25976],[-53.64505,-26.28089],[-53.68269,-26.33359],[-53.73372,-26.6131],[-53.80144,-27.09844],[-54.15978,-27.2889],[-54.19062,-27.27639],[-54.19268,-27.30751],[-54.41888,-27.40882],[-54.50416,-27.48232],[-54.67657,-27.57214],[-54.90159,-27.63132],[-54.90805,-27.73149],[-55.1349,-27.89759],[-55.16872,-27.86224],[-55.33303,-27.94661],[-55.6262,-28.17124],[-55.65418,-28.18304],[-56.01729,-28.51223],[-56.00458,-28.60421],[-56.05265,-28.62651],[-56.54171,-29.11447],[-56.57295,-29.11357],[-56.62789,-29.18073],[-56.81251,-29.48154],[-57.09386,-29.74211],[-57.65132,-30.19229],[-57.61478,-30.25165],[-57.64859,-30.35095],[-57.89115,-30.49572],[-57.8024,-30.77193],[-57.89476,-30.95994],[-57.86729,-31.06352],[-57.9908,-31.34924],[-57.98127,-31.3872],[-58.07569,-31.44916],[-58.0023,-31.53084],[-58.00076,-31.65016],[-58.20252,-31.86966],[-58.10036,-32.25338],[-58.22362,-32.52416],[-58.1224,-32.98842],[-58.40475,-33.11777],[-58.44442,-33.84033],[-58.34425,-34.15035],[-57.83001,-34.69099],[-54.78916,-36.21945],[-63.67376,-55.11859],[-66.07313,-55.19618],[-67.11046,-54.94199],[-67.46182,-54.92205],[-68.01394,-54.8753],[-68.60733,-54.9125],[-68.60702,-52.65781],[-68.41683,-52.33516],[-69.97824,-52.00845],[-71.99889,-51.98018],[-72.33873,-51.59954],[-72.31343,-50.58411]]]]}},{type:"Feature",properties:{iso1A2:"RU",iso1A3:"RUS",iso1N3:"643",wikidata:"Q159",nameEn:"Russia",groups:["151","150"],callingCodes:["7"]},geometry:{type:"MultiPolygon",coordinates:[[[[-179.99933,64.74703],[-179.9843,71.90735],[-168.25765,71.99091],[-168.95635,65.98512],[-169.03888,65.48473],[-172.76104,63.77445],[-179.99933,64.74703]]],[[[39.81147,43.06294],[33.66142,43.9825],[32.99857,44.48323],[31.62627,45.50633],[33.54017,46.0123],[33.59087,46.06013],[33.57318,46.10317],[33.61467,46.13561],[33.63854,46.14147],[33.61517,46.22615],[33.646,46.23028],[33.74047,46.18555],[33.79715,46.20482],[33.85234,46.19863],[33.91549,46.15938],[34.05272,46.10838],[34.07311,46.11769],[34.12929,46.10494],[34.181,46.06804],[34.25111,46.0532],[34.33912,46.06114],[34.41221,46.00245],[34.44155,45.95995],[34.48729,45.94267],[34.52011,45.95097],[34.55889,45.99347],[34.60861,45.99347],[34.66679,45.97136],[34.75479,45.90705],[34.80153,45.90047],[34.79905,45.81009],[34.96015,45.75634],[35.23066,45.79231],[37.62608,46.82615],[38.12112,46.86078],[38.3384,46.98085],[38.22955,47.12069],[38.23049,47.2324],[38.32112,47.2585],[38.33074,47.30508],[38.22225,47.30788],[38.28954,47.39255],[38.28679,47.53552],[38.35062,47.61631],[38.76379,47.69346],[38.79628,47.81109],[38.87979,47.87719],[39.73935,47.82876],[39.82213,47.96396],[39.77544,48.04206],[39.88256,48.04482],[39.83724,48.06501],[39.94847,48.22811],[40.00752,48.22445],[39.99241,48.31768],[39.97325,48.31399],[39.9693,48.29904],[39.95248,48.29972],[39.91465,48.26743],[39.90041,48.3049],[39.84273,48.30947],[39.84136,48.33321],[39.94847,48.35055],[39.88794,48.44226],[39.86196,48.46633],[39.84548,48.57821],[39.79764,48.58668],[39.67226,48.59368],[39.71765,48.68673],[39.73104,48.7325],[39.79466,48.83739],[39.97182,48.79398],[40.08168,48.87443],[40.03636,48.91957],[39.98967,48.86901],[39.78368,48.91596],[39.74874,48.98675],[39.72649,48.9754],[39.71353,48.98959],[39.6683,48.99454],[39.6836,49.05121],[39.93437,49.05709],[40.01988,49.1761],[40.22176,49.25683],[40.18331,49.34996],[40.14912,49.37681],[40.1141,49.38798],[40.03087,49.45452],[40.03636,49.52321],[40.16683,49.56865],[40.13249,49.61672],[39.84548,49.56064],[39.65047,49.61761],[39.59142,49.73758],[39.44496,49.76067],[39.27968,49.75976],[39.1808,49.88911],[38.9391,49.79524],[38.90477,49.86787],[38.73311,49.90238],[38.68677,50.00904],[38.65688,49.97176],[38.35408,50.00664],[38.32524,50.08866],[38.18517,50.08161],[38.21675,49.98104],[38.02999,49.90592],[38.02999,49.94482],[37.90776,50.04194],[37.79515,50.08425],[37.75807,50.07896],[37.61113,50.21976],[37.62879,50.24481],[37.62486,50.29966],[37.47243,50.36277],[37.48204,50.46079],[37.08468,50.34935],[36.91762,50.34963],[36.69377,50.26982],[36.64571,50.218],[36.56655,50.2413],[36.58371,50.28563],[36.47817,50.31457],[36.30101,50.29088],[36.20763,50.3943],[36.06893,50.45205],[35.8926,50.43829],[35.80388,50.41356],[35.73659,50.35489],[35.61711,50.35707],[35.58003,50.45117],[35.47463,50.49247],[35.39464,50.64751],[35.48116,50.66405],[35.47704,50.77274],[35.41367,50.80227],[35.39307,50.92145],[35.32598,50.94524],[35.40837,51.04119],[35.31774,51.08434],[35.20375,51.04723],[35.12685,51.16191],[35.14058,51.23162],[34.97304,51.2342],[34.82472,51.17483],[34.6874,51.18],[34.6613,51.25053],[34.38802,51.2746],[34.31661,51.23936],[34.23009,51.26429],[34.33446,51.363],[34.22048,51.4187],[34.30562,51.5205],[34.17599,51.63253],[34.07765,51.67065],[34.42922,51.72852],[34.41136,51.82793],[34.09413,52.00835],[34.11199,52.14087],[34.05239,52.20132],[33.78789,52.37204],[33.55718,52.30324],[33.48027,52.31499],[33.51323,52.35779],[33.18913,52.3754],[32.89937,52.2461],[32.85405,52.27888],[32.69475,52.25535],[32.54781,52.32423],[32.3528,52.32842],[32.38988,52.24946],[32.33083,52.23685],[32.34044,52.1434],[32.2777,52.10266],[32.23331,52.08085],[32.08813,52.03319],[31.92159,52.05144],[31.96141,52.08015],[31.85018,52.11305],[31.81722,52.09955],[31.7822,52.11406],[31.77877,52.18636],[31.6895,52.1973],[31.70735,52.26711],[31.57971,52.32146],[31.62084,52.33849],[31.61397,52.48843],[31.56316,52.51518],[31.63869,52.55361],[31.50406,52.69707],[31.57277,52.71613],[31.592,52.79011],[31.35667,52.97854],[31.24147,53.031],[31.32283,53.04101],[31.33519,53.08805],[31.3915,53.09712],[31.36403,53.13504],[31.40523,53.21406],[31.56316,53.19432],[31.62496,53.22886],[31.787,53.18033],[31.82373,53.10042],[32.15368,53.07594],[32.40773,53.18856],[32.51725,53.28431],[32.73257,53.33494],[32.74968,53.45597],[32.47777,53.5548],[32.40499,53.6656],[32.50112,53.68594],[32.45717,53.74039],[32.36663,53.7166],[32.12621,53.81586],[31.89137,53.78099],[31.77028,53.80015],[31.85019,53.91801],[31.88744,54.03653],[31.89599,54.0837],[31.57002,54.14535],[31.30791,54.25315],[31.3177,54.34067],[31.22945,54.46585],[31.08543,54.50361],[31.21399,54.63113],[31.19339,54.66947],[30.99187,54.67046],[30.98226,54.68872],[31.0262,54.70698],[30.97127,54.71967],[30.95479,54.74346],[30.75165,54.80699],[30.8264,54.90062],[30.81759,54.94064],[30.93144,54.9585],[30.95754,54.98609],[30.9081,55.02232],[30.94243,55.03964],[31.00972,55.02783],[31.02071,55.06167],[30.97369,55.17134],[30.87944,55.28223],[30.81946,55.27931],[30.8257,55.3313],[30.93144,55.3914],[30.90123,55.46621],[30.95204,55.50667],[30.93419,55.6185],[30.86003,55.63169],[30.7845,55.58514],[30.72957,55.66268],[30.67464,55.64176],[30.63344,55.73079],[30.51037,55.76568],[30.51346,55.78982],[30.48257,55.81066],[30.30987,55.83592],[30.27776,55.86819],[30.12136,55.8358],[29.97975,55.87281],[29.80672,55.79569],[29.61446,55.77716],[29.51283,55.70294],[29.3604,55.75862],[29.44692,55.95978],[29.21717,55.98971],[29.08299,56.03427],[28.73418,55.97131],[28.63668,56.07262],[28.68337,56.10173],[28.5529,56.11705],[28.43068,56.09407],[28.37987,56.11399],[28.36888,56.05805],[28.30571,56.06035],[28.15217,56.16964],[28.23716,56.27588],[28.16599,56.37806],[28.19057,56.44637],[28.10069,56.524],[28.13526,56.57989],[28.04768,56.59004],[27.86101,56.88204],[27.66511,56.83921],[27.86101,57.29402],[27.52453,57.42826],[27.56832,57.53728],[27.34698,57.52242],[27.31919,57.57672],[27.40393,57.62125],[27.3746,57.66834],[27.52615,57.72843],[27.50171,57.78842],[27.56689,57.83356],[27.78526,57.83963],[27.81841,57.89244],[27.67282,57.92627],[27.62393,58.09462],[27.48541,58.22615],[27.55489,58.39525],[27.36366,58.78381],[27.74429,58.98351],[27.80482,59.1116],[27.87978,59.18097],[27.90911,59.24353],[28.00689,59.28351],[28.14215,59.28934],[28.19284,59.35791],[28.20537,59.36491],[28.21137,59.38058],[28.19061,59.39962],[28.04187,59.47017],[27.85643,59.58538],[26.90044,59.63819],[26.32936,60.00121],[27.44953,60.22766],[27.71177,60.3893],[27.77352,60.52722],[28.47974,60.93365],[28.82816,61.1233],[29.01829,61.17448],[31.10136,62.43042],[31.38369,62.66284],[31.58535,62.91642],[31.29294,63.09035],[31.23244,63.22239],[30.49637,63.46666],[29.98213,63.75795],[30.25437,63.83364],[30.55687,64.09036],[30.4762,64.25728],[30.06279,64.35782],[30.01238,64.57513],[30.12329,64.64862],[30.05271,64.79072],[29.68972,64.80789],[29.61914,65.05993],[29.84096,65.1109],[29.8813,65.22101],[29.61914,65.23791],[29.68972,65.31803],[29.84096,65.56945],[29.74013,65.64025],[29.97205,65.70256],[30.16363,65.66935],[29.91155,66.13863],[28.9839,66.94139],[29.91155,67.51507],[30.02041,67.67523],[29.66955,67.79872],[29.34179,68.06655],[28.62982,68.19816],[28.43941,68.53366],[28.78224,68.86696],[28.45957,68.91417],[28.91738,69.04774],[29.0444,69.0119],[29.26623,69.13794],[29.27631,69.2811],[29.97205,69.41623],[30.16363,69.65244],[30.52662,69.54699],[30.95011,69.54699],[30.84095,69.80584],[31.59909,70.16571],[32.07813,72.01005],[36.48095,82.16765],[155.31937,81.93282],[180,71.53642],[180,62.52334],[153.94307,38.42848],[145.23667,43.76813],[145.82343,44.571],[140.9182,45.92937],[131.95041,41.5445],[130.65022,42.32281],[130.66367,42.38024],[130.64181,42.41422],[130.60805,42.4317],[130.56835,42.43281],[130.55143,42.52158],[130.62107,42.58413],[130.56576,42.68925],[130.40213,42.70788],[130.44361,42.76205],[130.66524,42.84753],[131.02438,42.86518],[131.02668,42.91246],[131.135,42.94114],[131.10274,43.04734],[131.20414,43.13654],[131.19031,43.21385],[131.30324,43.39498],[131.29402,43.46695],[131.19492,43.53047],[131.21105,43.82383],[131.26176,43.94011],[131.23583,43.96085],[131.25484,44.03131],[131.30365,44.04262],[131.1108,44.70266],[130.95639,44.85154],[131.48415,44.99513],[131.68466,45.12374],[131.66852,45.2196],[131.76532,45.22609],[131.86903,45.33636],[131.99417,45.2567],[132.83978,45.05916],[132.96373,45.0212],[133.12293,45.1332],[133.09279,45.25693],[133.19419,45.51913],[133.41083,45.57723],[133.48457,45.86203],[133.60442,45.90053],[133.67569,45.9759],[133.72695,46.05576],[133.68047,46.14697],[133.88097,46.25066],[133.91496,46.4274],[133.84104,46.46681],[134.03538,46.75668],[134.20016,47.33458],[134.50898,47.4812],[134.7671,47.72051],[134.55508,47.98651],[134.67098,48.1564],[134.75328,48.36763],[134.49516,48.42884],[132.66989,47.96491],[132.57309,47.71741],[131.90448,47.68011],[131.2635,47.73325],[131.09871,47.6852],[130.95985,47.6957],[130.90915,47.90623],[130.65103,48.10052],[130.84462,48.30942],[130.52147,48.61745],[130.66946,48.88251],[130.43232,48.90844],[130.2355,48.86741],[129.85416,49.11067],[129.67598,49.29596],[129.50685,49.42398],[129.40398,49.44194],[129.35317,49.3481],[129.23232,49.40353],[129.11153,49.36813],[128.72896,49.58676],[127.83476,49.5748],[127.53516,49.84306],[127.49299,50.01251],[127.60515,50.23503],[127.37384,50.28393],[127.36009,50.43787],[127.28765,50.46585],[127.36335,50.58306],[127.28165,50.72075],[127.14586,50.91152],[126.93135,51.0841],[126.90369,51.3238],[126.68349,51.70607],[126.44606,51.98254],[126.558,52.13738],[125.6131,53.07229],[125.17522,53.20225],[124.46078,53.21881],[123.86158,53.49391],[123.26989,53.54843],[122.85966,53.47395],[122.35063,53.49565],[121.39213,53.31888],[120.85633,53.28499],[120.0451,52.7359],[120.04049,52.58773],[120.46454,52.63811],[120.71673,52.54099],[120.61346,52.32447],[120.77337,52.20805],[120.65907,51.93544],[120.10963,51.671],[119.13553,50.37412],[119.38598,50.35162],[119.27996,50.13348],[119.11003,50.00276],[118.61623,49.93809],[117.82343,49.52696],[117.48208,49.62324],[117.27597,49.62544],[117.07142,49.68482],[116.71193,49.83813],[116.62502,49.92919],[116.22402,50.04477],[115.73602,49.87688],[115.26068,49.97367],[114.9703,50.19254],[114.325,50.28098],[113.20216,49.83356],[113.02647,49.60772],[110.64493,49.1816],[110.39891,49.25083],[110.24373,49.16676],[109.51325,49.22859],[109.18017,49.34709],[108.53969,49.32325],[108.27937,49.53167],[107.95387,49.66659],[107.96116,49.93191],[107.36407,49.97612],[107.1174,50.04239],[107.00007,50.1977],[106.80326,50.30177],[106.58373,50.34044],[106.51122,50.34408],[106.49628,50.32436],[106.47156,50.31909],[106.07865,50.33474],[106.05562,50.40582],[105.32528,50.4648],[103.70343,50.13952],[102.71178,50.38873],[102.32194,50.67982],[102.14032,51.35566],[101.5044,51.50467],[101.39085,51.45753],[100.61116,51.73028],[99.89203,51.74903],[99.75578,51.90108],[99.27888,51.96876],[98.87768,52.14563],[98.74142,51.8637],[98.33222,51.71832],[98.22053,51.46579],[98.05257,51.46696],[97.83305,51.00248],[98.01472,50.86652],[97.9693,50.78044],[98.06393,50.61262],[98.31373,50.4996],[98.29481,50.33561],[97.85197,49.91339],[97.76871,49.99861],[97.56432,49.92801],[97.56811,49.84265],[97.24639,49.74737],[96.97388,49.88413],[95.80056,50.04239],[95.74757,49.97915],[95.02465,49.96941],[94.97166,50.04725],[94.6121,50.04239],[94.49477,50.17832],[94.39258,50.22193],[94.30823,50.57498],[92.99595,50.63183],[93.01109,50.79001],[92.44714,50.78762],[92.07173,50.69585],[91.86048,50.73734],[89.59711,49.90851],[89.70687,49.72535],[88.82499,49.44808],[88.42449,49.48821],[88.17223,49.46934],[88.15543,49.30314],[87.98977,49.18147],[87.81333,49.17354],[87.48983,49.13794],[87.478,49.07403],[87.28386,49.11626],[87.31465,49.23603],[87.03071,49.25142],[86.82606,49.51796],[86.61307,49.60239],[86.79056,49.74787],[86.63674,49.80136],[86.18709,49.50259],[85.24047,49.60239],[84.99198,50.06793],[84.29385,50.27257],[83.8442,50.87375],[83.14607,51.00796],[82.55443,50.75412],[81.94999,50.79307],[81.46581,50.77658],[81.41248,50.97524],[81.06091,50.94833],[81.16999,51.15662],[80.80318,51.28262],[80.44819,51.20855],[80.4127,50.95581],[80.08138,50.77658],[79.11255,52.01171],[77.90383,53.29807],[76.54243,53.99329],[76.44076,54.16017],[76.82266,54.1798],[76.91052,54.4677],[75.3668,54.07439],[75.43398,53.98652],[75.07405,53.80831],[73.39218,53.44623],[73.25412,53.61532],[73.68921,53.86522],[73.74778,54.07194],[73.37963,53.96132],[72.71026,54.1161],[72.43415,53.92685],[72.17477,54.36303],[71.96141,54.17736],[71.10379,54.13326],[71.08706,54.33376],[71.24185,54.64965],[71.08288,54.71253],[70.96009,55.10558],[70.76493,55.3027],[70.19179,55.1476],[69.74917,55.35545],[69.34224,55.36344],[68.90865,55.38148],[68.19206,55.18823],[68.26661,55.09226],[68.21308,54.98645],[65.20174,54.55216],[65.24663,54.35721],[65.11033,54.33028],[64.97216,54.4212],[63.97686,54.29763],[64.02715,54.22679],[63.91224,54.20013],[63.80604,54.27079],[62.58651,54.05871],[62.56876,53.94047],[62.45931,53.90737],[62.38535,54.03961],[62.00966,54.04134],[62.03913,53.94768],[61.65318,54.02445],[61.56941,53.95703],[61.47603,54.08048],[61.3706,54.08464],[61.26863,53.92797],[60.99796,53.93699],[61.14283,53.90063],[61.22574,53.80268],[60.90626,53.62937],[61.55706,53.57144],[61.57185,53.50112],[61.37957,53.45887],[61.29082,53.50992],[61.14291,53.41481],[61.19024,53.30536],[62.14574,53.09626],[62.12799,52.99133],[62.0422,52.96105],[61.23462,53.03227],[61.05842,52.92217],[60.71989,52.75923],[60.71693,52.66245],[60.84118,52.63912],[60.84709,52.52228],[60.98021,52.50068],[61.05417,52.35096],[60.78201,52.22067],[60.72581,52.15538],[60.48915,52.15175],[60.19925,51.99173],[59.99809,51.98263],[60.09867,51.87135],[60.50986,51.7964],[60.36787,51.66815],[60.5424,51.61675],[60.92401,51.61124],[60.95655,51.48615],[61.50677,51.40687],[61.55114,51.32746],[61.6813,51.25716],[61.56889,51.23679],[61.4431,50.80679],[60.81833,50.6629],[60.31914,50.67705],[60.17262,50.83312],[60.01288,50.8163],[59.81172,50.54451],[59.51886,50.49937],[59.48928,50.64216],[58.87974,50.70852],[58.3208,51.15151],[57.75578,51.13852],[57.74986,50.93017],[57.44221,50.88354],[57.17302,51.11253],[56.17906,50.93204],[56.11398,50.7471],[55.67774,50.54508],[54.72067,51.03261],[54.56685,51.01958],[54.71476,50.61214],[54.55797,50.52006],[54.41894,50.61214],[54.46331,50.85554],[54.12248,51.11542],[53.69299,51.23466],[53.46165,51.49445],[52.54329,51.48444],[52.36119,51.74161],[51.8246,51.67916],[51.77431,51.49536],[51.301,51.48799],[51.26254,51.68466],[50.59695,51.61859],[50.26859,51.28677],[49.97277,51.2405],[49.76866,51.11067],[49.39001,51.09396],[49.41959,50.85927],[49.12673,50.78639],[48.86936,50.61589],[48.57946,50.63278],[48.90782,50.02281],[48.68352,49.89546],[48.42564,49.82283],[48.24519,49.86099],[48.10044,50.09242],[47.58551,50.47867],[47.30448,50.30894],[47.34589,50.09308],[47.18319,49.93721],[46.9078,49.86707],[46.78398,49.34026],[46.98795,49.23531],[47.04416,49.17152],[47.01458,49.07085],[46.91104,48.99715],[46.78392,48.95352],[46.49011,48.43019],[47.11516,48.27188],[47.12107,47.83687],[47.38731,47.68176],[47.41689,47.83687],[47.64973,47.76559],[48.15348,47.74545],[48.45173,47.40818],[48.52326,47.4102],[49.01136,46.72716],[48.51142,46.69268],[48.54988,46.56267],[49.16518,46.38542],[49.32259,46.26944],[49.88945,46.04554],[49.2134,44.84989],[48.80971,41.95365],[48.5867,41.84306],[48.55078,41.77917],[48.42301,41.65444],[48.40277,41.60441],[48.2878,41.56221],[48.22064,41.51472],[48.07587,41.49957],[47.87973,41.21798],[47.75831,41.19455],[47.62288,41.22969],[47.54504,41.20275],[47.49004,41.26366],[47.34579,41.27884],[47.10762,41.59044],[47.03757,41.55434],[46.99554,41.59743],[47.00955,41.63583],[46.8134,41.76252],[46.75269,41.8623],[46.58924,41.80547],[46.5332,41.87389],[46.42738,41.91323],[45.61676,42.20768],[45.78692,42.48358],[45.36501,42.55268],[45.15318,42.70598],[44.88754,42.74934],[44.80941,42.61277],[44.70002,42.74679],[44.54202,42.75699],[43.95517,42.55396],[43.73119,42.62043],[43.81453,42.74297],[43.0419,43.02413],[43.03322,43.08883],[42.75889,43.19651],[42.66667,43.13917],[42.40563,43.23226],[41.64935,43.22331],[40.65957,43.56212],[40.10657,43.57344],[40.04445,43.47776],[40.03312,43.44262],[40.01007,43.42411],[40.01552,43.42025],[40.00853,43.40578],[40.0078,43.38551],[39.81147,43.06294]]],[[[21.46766,55.21115],[21.51095,55.18507],[21.55605,55.20311],[21.64954,55.1791],[21.85521,55.09493],[21.96505,55.07353],[21.99543,55.08691],[22.03984,55.07888],[22.02582,55.05078],[22.06087,55.02935],[22.11697,55.02131],[22.14267,55.05345],[22.31562,55.0655],[22.47688,55.04408],[22.58907,55.07085],[22.60075,55.01863],[22.65451,54.97037],[22.68723,54.9811],[22.76422,54.92521],[22.85083,54.88711],[22.87317,54.79492],[22.73631,54.72952],[22.73397,54.66604],[22.75467,54.6483],[22.74225,54.64339],[22.7522,54.63525],[22.68021,54.58486],[22.71293,54.56454],[22.67788,54.532],[22.70208,54.45312],[22.7253,54.41732],[22.79705,54.36264],[21.41123,54.32395],[20.63871,54.3706],[19.8038,54.44203],[19.64312,54.45423],[18.57853,55.25302],[20.60454,55.40986],[20.95181,55.27994],[21.26425,55.24456],[21.35465,55.28427],[21.38446,55.29348],[21.46766,55.21115]]]]}},{type:"Feature",properties:{iso1A2:"AW",iso1A3:"ABW",iso1N3:"533",wikidata:"Q21203",nameEn:"Aruba",country:"NL",groups:["029","003","419","019"],callingCodes:["297"]},geometry:{type:"MultiPolygon",coordinates:[[[[-70.00823,12.98375],[-69.60231,12.17],[-70.35625,12.58277],[-70.00823,12.98375]]]]}},{type:"Feature",properties:{iso1A2:"RW",iso1A3:"RWA",iso1N3:"646",wikidata:"Q1037",nameEn:"Rwanda",groups:["014","202","002"],callingCodes:["250"]},geometry:{type:"MultiPolygon",coordinates:[[[[30.47194,-1.0555],[30.45116,-1.10641],[30.50889,-1.16412],[30.57123,-1.33264],[30.71974,-1.43244],[30.84079,-1.64652],[30.80802,-1.91477],[30.89303,-2.08223],[30.83915,-2.35795],[30.54501,-2.41404],[30.42933,-2.31064],[30.14034,-2.43626],[29.95911,-2.33348],[29.88237,-2.75105],[29.36805,-2.82933],[29.32234,-2.6483],[29.0562,-2.58632],[29.04081,-2.7416],[29.00357,-2.70596],[28.94346,-2.69124],[28.89793,-2.66111],[28.90226,-2.62385],[28.89288,-2.55848],[28.87943,-2.55165],[28.86193,-2.53185],[28.86209,-2.5231],[28.87497,-2.50887],[28.88846,-2.50493],[28.89342,-2.49017],[28.89132,-2.47557],[28.86846,-2.44866],[28.86826,-2.41888],[28.89601,-2.37321],[28.95642,-2.37321],[29.00051,-2.29001],[29.105,-2.27043],[29.17562,-2.12278],[29.11847,-1.90576],[29.24458,-1.69663],[29.24323,-1.66826],[29.36322,-1.50887],[29.45038,-1.5054],[29.53062,-1.40499],[29.59061,-1.39016],[29.82657,-1.31187],[29.912,-1.48269],[30.16369,-1.34303],[30.35212,-1.06896],[30.47194,-1.0555]]]]}},{type:"Feature",properties:{iso1A2:"BB",iso1A3:"BRB",iso1N3:"052",wikidata:"Q244",nameEn:"Barbados",groups:["029","003","419","019"],driveSide:"left",callingCodes:["1 246"]},geometry:{type:"MultiPolygon",coordinates:[[[[-58.56442,13.24471],[-60.19227,12.37597],[-59.80731,13.87556],[-58.56442,13.24471]]]]}},{type:"Feature",properties:{iso1A2:"SA",iso1A3:"SAU",iso1N3:"682",wikidata:"Q851",nameEn:"Saudi Arabia",groups:["145","142"],callingCodes:["966"]},geometry:{type:"MultiPolygon",coordinates:[[[[40.01521,32.05667],[42.97601,30.72204],[42.97796,30.48295],[44.72255,29.19736],[46.42415,29.05947],[46.5527,29.10283],[47.46202,29.0014],[47.58376,28.83382],[47.59863,28.66798],[47.70561,28.5221],[48.42991,28.53628],[49.00421,28.81495],[49.98877,27.87827],[50.37726,27.89227],[50.71771,26.73086],[50.38162,26.53976],[50.26923,26.08243],[50.302,25.87592],[50.57069,25.57887],[50.8133,24.74049],[50.92992,24.54396],[51.09638,24.46907],[51.29972,24.50747],[51.39468,24.62785],[51.58834,24.66608],[51.41644,24.39615],[51.58871,24.27256],[51.59617,24.12041],[52.56622,22.94341],[55.13599,22.63334],[55.2137,22.71065],[55.66469,21.99658],[54.99756,20.00083],[52.00311,19.00083],[49.04884,18.59899],[48.19996,18.20584],[47.58351,17.50366],[47.48245,17.10808],[47.00571,16.94765],[46.76494,17.29151],[46.31018,17.20464],[44.50126,17.47475],[43.70631,17.35762],[43.43005,17.56148],[43.29185,17.53224],[43.22533,17.38343],[43.32653,17.31179],[43.20156,17.25901],[43.17787,17.14717],[43.23967,17.03428],[43.18233,17.02673],[43.1813,16.98438],[43.19328,16.94703],[43.1398,16.90696],[43.18338,16.84852],[43.22012,16.83932],[43.22956,16.80613],[43.24801,16.80613],[43.26303,16.79479],[43.25857,16.75304],[43.21325,16.74416],[43.22066,16.65179],[43.15274,16.67248],[43.11601,16.53166],[42.97215,16.51093],[42.94351,16.49467],[42.94625,16.39721],[42.76801,16.40371],[42.15205,16.40211],[41.37609,16.19728],[39.63762,18.37348],[37.8565,22.00903],[34.51305,27.70027],[34.46254,27.99552],[34.88293,29.37455],[34.95987,29.35727],[36.07081,29.18469],[36.50005,29.49696],[36.75083,29.86903],[37.4971,29.99949],[37.66395,30.33245],[37.99354,30.49998],[36.99791,31.50081],[38.99233,31.99721],[39.29903,32.23259],[40.01521,32.05667]]]]}},{type:"Feature",properties:{iso1A2:"BG",iso1A3:"BGR",iso1N3:"100",wikidata:"Q219",nameEn:"Bulgaria",groups:["EU","151","150"],callingCodes:["359"]},geometry:{type:"MultiPolygon",coordinates:[[[[23.05288,43.79494],[23.26772,43.84843],[23.4507,43.84936],[23.61687,43.79289],[23.73978,43.80627],[24.18149,43.68218],[24.35364,43.70211],[24.50264,43.76314],[24.62281,43.74082],[24.73542,43.68523],[24.96682,43.72693],[25.10718,43.6831],[25.17144,43.70261],[25.39528,43.61866],[25.72792,43.69263],[25.94911,43.85745],[26.05584,43.90925],[26.10115,43.96908],[26.38764,44.04356],[26.62712,44.05698],[26.95141,44.13555],[27.26845,44.12602],[27.39757,44.0141],[27.60834,44.01206],[27.64542,44.04958],[27.73468,43.95326],[27.92008,44.00761],[27.99558,43.84193],[28.23293,43.76],[29.24336,43.70874],[28.32297,41.98371],[28.02971,41.98066],[27.91479,41.97902],[27.83492,41.99709],[27.81235,41.94803],[27.69949,41.97515],[27.55191,41.90928],[27.52379,41.93756],[27.45478,41.96591],[27.27411,42.10409],[27.22376,42.10152],[27.19251,42.06028],[27.08486,42.08735],[27.03277,42.0809],[26.95638,42.00741],[26.79143,41.97386],[26.62996,41.97644],[26.56051,41.92995],[26.57961,41.90024],[26.53968,41.82653],[26.36952,41.82265],[26.33589,41.76802],[26.32952,41.73637],[26.35957,41.71149],[26.30255,41.70925],[26.2654,41.71544],[26.22888,41.74139],[26.21325,41.73223],[26.16841,41.74858],[26.06148,41.70345],[26.07083,41.64584],[26.15146,41.60828],[26.14328,41.55496],[26.17951,41.55409],[26.176,41.50072],[26.14796,41.47533],[26.20288,41.43943],[26.16548,41.42278],[26.12926,41.35878],[25.87919,41.30526],[25.8266,41.34563],[25.70507,41.29209],[25.66183,41.31316],[25.61042,41.30614],[25.55082,41.31667],[25.52394,41.2798],[25.48187,41.28506],[25.28322,41.23411],[25.11611,41.34212],[24.942,41.38685],[24.90928,41.40876],[24.86136,41.39298],[24.82514,41.4035],[24.8041,41.34913],[24.71529,41.41928],[24.61129,41.42278],[24.52599,41.56808],[24.30513,41.51297],[24.27124,41.57682],[24.18126,41.51735],[24.10063,41.54796],[24.06323,41.53222],[24.06908,41.46132],[23.96975,41.44118],[23.91483,41.47971],[23.89613,41.45257],[23.80148,41.43943],[23.76525,41.40175],[23.67644,41.41139],[23.63203,41.37632],[23.52453,41.40262],[23.40416,41.39999],[23.33639,41.36317],[23.31301,41.40525],[23.22771,41.37106],[23.21953,41.33773],[23.1833,41.31755],[22.93334,41.34104],[22.96331,41.35782],[22.95513,41.63265],[23.03342,41.71034],[23.01239,41.76527],[22.96682,41.77137],[22.90254,41.87587],[22.86749,42.02275],[22.67701,42.06614],[22.51224,42.15457],[22.50289,42.19527],[22.47251,42.20393],[22.38136,42.30339],[22.34773,42.31725],[22.45919,42.33822],[22.47498,42.3915],[22.51961,42.3991],[22.55669,42.50144],[22.43983,42.56851],[22.4997,42.74144],[22.43309,42.82057],[22.54302,42.87774],[22.74826,42.88701],[22.78397,42.98253],[22.89521,43.03625],[22.98104,43.11199],[23.00806,43.19279],[22.89727,43.22417],[22.82036,43.33665],[22.53397,43.47225],[22.47582,43.6558],[22.41043,43.69566],[22.35558,43.81281],[22.41449,44.00514],[22.61688,44.06534],[22.61711,44.16938],[22.67173,44.21564],[23.04988,44.07694],[23.01674,44.01946],[22.87873,43.9844],[22.83753,43.88055],[22.85314,43.84452],[23.05288,43.79494]]]]}},{type:"Feature",properties:{iso1A2:"SB",iso1A3:"SLB",iso1N3:"090",wikidata:"Q685",nameEn:"Solomon Islands",groups:["054","009"],driveSide:"left",callingCodes:["677"]},geometry:{type:"MultiPolygon",coordinates:[[[[174,-12.72535],[160.04026,-13.08769],[154.74815,-7.33315],[155.60735,-6.92266],[155.69784,-6.92661],[155.92557,-6.84664],[156.03993,-6.65703],[156.03296,-6.55528],[160.43769,-4.17974],[174,-12.72535]]]]}},{type:"Feature",properties:{iso1A2:"BL",iso1A3:"BLM",iso1N3:"652",wikidata:"Q25362",nameEn:"Saint-Barthélemy",country:"FR",groups:["029","003","419","019"],callingCodes:["590"]},geometry:{type:"MultiPolygon",coordinates:[[[[-62.75637,18.13489],[-62.54836,17.8636],[-62.76692,17.64353],[-63.07669,17.79659],[-62.93924,18.02904],[-62.75637,18.13489]]]]}},{type:"Feature",properties:{iso1A2:"SC",iso1A3:"SYC",iso1N3:"690",wikidata:"Q1042",nameEn:"Seychelles",groups:["014","202","002"],driveSide:"left",callingCodes:["248"]},geometry:{type:"MultiPolygon",coordinates:[[[[43.75112,-10.38913],[66.3222,5.65313],[54.83239,-10.93575],[43.75112,-10.38913]]]]}},{type:"Feature",properties:{iso1A2:"BQ",iso1A3:"BES",iso1N3:"535",wikidata:"Q27561",nameEn:"Caribbean Netherlands",country:"NL",groups:["029","003","419","019"],callingCodes:["599 3","599 4","599 7"]},geometry:{type:"MultiPolygon",coordinates:[[[[-63.07669,17.79659],[-63.22932,17.32592],[-63.11114,17.23125],[-62.76692,17.64353],[-63.07669,17.79659]]],[[[-63.29212,17.90532],[-63.07669,17.79659],[-63.22932,17.32592],[-63.58819,17.61311],[-63.29212,17.90532]]],[[[-67.89186,12.4116],[-68.01417,11.77722],[-68.33524,11.78151],[-68.90012,12.62309],[-67.89186,12.4116]]]]}},{type:"Feature",properties:{iso1A2:"SD",iso1A3:"SDN",iso1N3:"729",wikidata:"Q1049",nameEn:"Sudan",groups:["015","002"],callingCodes:["249"]},geometry:{type:"MultiPolygon",coordinates:[[[[37.8565,22.00903],[39.63762,18.37348],[38.57727,17.98125],[38.45916,17.87167],[38.37133,17.66269],[38.13362,17.53906],[37.50967,17.32199],[37.42694,17.04041],[36.99777,17.07172],[36.92193,16.23451],[36.76371,15.80831],[36.69761,15.75323],[36.54276,15.23478],[36.44337,15.14963],[36.54376,14.25597],[36.44653,13.95666],[36.48824,13.83954],[36.38993,13.56459],[36.24545,13.36759],[36.13374,12.92665],[36.16651,12.88019],[36.14268,12.70879],[36.01458,12.72478],[35.70476,12.67101],[35.24302,11.91132],[35.11492,11.85156],[35.05832,11.71158],[35.09556,11.56278],[34.95704,11.24448],[35.01215,11.19626],[34.93172,10.95946],[34.97789,10.91559],[34.97491,10.86147],[34.86916,10.78832],[34.86618,10.74588],[34.77532,10.69027],[34.77383,10.74588],[34.59062,10.89072],[34.4372,10.781],[34.2823,10.53508],[34.34783,10.23914],[34.32102,10.11599],[34.22718,10.02506],[34.20484,9.9033],[34.13186,9.7492],[34.08717,9.55243],[34.10229,9.50238],[33.87958,9.49937],[33.9082,9.762],[33.96323,9.80972],[33.99185,9.99623],[33.96984,10.15446],[33.90159,10.17179],[33.80913,10.32994],[33.66604,10.44254],[33.52294,10.64382],[33.24645,10.77913],[33.26977,10.83632],[33.13988,11.43248],[33.25876,12.22111],[32.73921,12.22757],[32.73921,11.95203],[32.10079,11.95203],[32.39578,11.70208],[32.39358,11.18207],[32.46967,11.04662],[31.99177,10.65065],[31.77539,10.28939],[31.28504,9.75287],[30.84605,9.7498],[30.82893,9.71451],[30.53005,9.95992],[30.00389,10.28633],[29.94629,10.29245],[29.54,10.07949],[29.53844,9.75133],[29.06988,9.74826],[28.99983,9.67155],[27.90704,9.61323],[27.14427,9.62858],[26.70685,9.48735],[26.35815,9.57946],[26.21338,9.91545],[25.93241,10.17941],[25.93163,10.38159],[25.78141,10.42599],[25.0918,10.33718],[25.05688,10.06776],[24.97739,9.9081],[24.84653,9.80643],[24.49389,9.79962],[24.12744,9.73784],[24.09319,9.66572],[23.69155,9.67566],[23.67164,9.86923],[23.3128,10.45214],[23.02221,10.69235],[22.87758,10.91915],[22.97249,11.21955],[22.93124,11.41645],[22.7997,11.40424],[22.54907,11.64372],[22.64092,12.07485],[22.48369,12.02766],[22.50548,12.16769],[22.38873,12.45514],[22.46345,12.61925],[22.22684,12.74682],[22.15679,12.66634],[21.98711,12.63292],[21.89371,12.68001],[21.81432,12.81362],[21.94819,13.05637],[22.02914,13.13976],[22.1599,13.19281],[22.29689,13.3731],[22.08674,13.77863],[22.22995,13.96754],[22.5553,14.11704],[22.55997,14.23024],[22.44944,14.24986],[22.38562,14.58907],[22.70474,14.69149],[22.66115,14.86308],[22.99584,15.22989],[22.99584,15.40105],[22.92579,15.47007],[22.93201,15.55107],[23.10792,15.71297],[23.38812,15.69649],[23.62785,15.7804],[23.99997,15.69575],[23.99539,19.49944],[23.99715,20.00038],[24.99794,19.99661],[24.99885,21.99535],[33.17563,22.00405],[33.57251,21.72406],[33.99686,21.76784],[34.0765,22.00501],[37.8565,22.00903]]]]}},{type:"Feature",properties:{iso1A2:"BV",iso1A3:"BVT",iso1N3:"074",wikidata:"Q23408",nameEn:"Bouvet Island",country:"NO",groups:["005","419","019"]},geometry:{type:"MultiPolygon",coordinates:[[[[4.54042,-54.0949],[3.35353,-55.17558],[2.28941,-54.13089],[4.54042,-54.0949]]]]}},{type:"Feature",properties:{iso1A2:"SE",iso1A3:"SWE",iso1N3:"752",wikidata:"Q34",nameEn:"Sweden",groups:["EU","154","150"],callingCodes:["46"]},geometry:{type:"MultiPolygon",coordinates:[[[[24.15791,65.85385],[24.14798,65.83466],[24.15107,65.81427],[24.14112,65.39731],[20.15877,63.06556],[19.23413,60.61414],[19.08191,60.19152],[20.5104,59.15546],[19.84909,57.57876],[19.64795,57.06466],[15.79951,55.54655],[14.89259,55.5623],[14.28399,55.1553],[12.84405,55.13257],[12.60345,55.42675],[12.88472,55.63369],[12.6372,55.91371],[12.65312,56.04345],[12.07466,56.29488],[12.16597,56.60205],[10.40861,58.38489],[10.64958,58.89391],[11.08911,58.98745],[11.15367,59.07862],[11.34459,59.11672],[11.4601,58.99022],[11.45199,58.89604],[11.65732,58.90177],[11.8213,59.24985],[11.69297,59.59442],[11.92112,59.69531],[11.87121,59.86039],[12.15641,59.8926],[12.36317,59.99259],[12.52003,60.13846],[12.59133,60.50559],[12.2277,61.02442],[12.69115,61.06584],[12.86939,61.35427],[12.57707,61.56547],[12.40595,61.57226],[12.14746,61.7147],[12.29187,62.25699],[12.07085,62.6297],[12.19919,63.00104],[11.98529,63.27487],[12.19919,63.47935],[12.14928,63.59373],[12.74105,64.02171],[13.23411,64.09087],[13.98222,64.00953],[14.16051,64.18725],[14.11117,64.46674],[13.64276,64.58402],[14.50926,65.31786],[14.53778,66.12399],[15.05113,66.15572],[15.49318,66.28509],[15.37197,66.48217],[16.35589,67.06419],[16.39154,67.21653],[16.09922,67.4364],[16.12774,67.52106],[16.38441,67.52923],[16.7409,67.91037],[17.30416,68.11591],[17.90787,67.96537],[18.13836,68.20874],[18.1241,68.53721],[18.39503,68.58672],[18.63032,68.50849],[18.97255,68.52416],[19.93508,68.35911],[20.22027,68.48759],[19.95647,68.55546],[20.22027,68.67246],[20.33435,68.80174],[20.28444,68.93283],[20.0695,69.04469],[20.55258,69.06069],[20.78802,69.03087],[20.91658,68.96764],[20.85104,68.93142],[20.90649,68.89696],[21.03001,68.88969],[22.00429,68.50692],[22.73028,68.40881],[23.10336,68.26551],[23.15377,68.14759],[23.26469,68.15134],[23.40081,68.05545],[23.65793,67.9497],[23.45627,67.85297],[23.54701,67.59306],[23.39577,67.46974],[23.75372,67.43688],[23.75372,67.29914],[23.54701,67.25435],[23.58735,67.20752],[23.56214,67.17038],[23.98563,66.84149],[23.98059,66.79585],[23.89488,66.772],[23.85959,66.56434],[23.63776,66.43568],[23.67591,66.3862],[23.64982,66.30603],[23.71339,66.21299],[23.90497,66.15802],[24.15791,65.85385]]]]}},{type:"Feature",properties:{iso1A2:"CA",iso1A3:"CAN",iso1N3:"124",wikidata:"Q16",nameEn:"Canada",groups:["021","003","019"],callingCodes:["1"]},geometry:{type:"MultiPolygon",coordinates:[[[[-67.20349,45.1722],[-67.22751,45.16344],[-67.27039,45.1934],[-67.29748,45.18173],[-67.29754,45.14865],[-67.34927,45.122],[-67.48201,45.27351],[-67.42394,45.37969],[-67.50578,45.48971],[-67.42144,45.50584],[-67.43815,45.59162],[-67.6049,45.60725],[-67.80705,45.69528],[-67.80653,45.80022],[-67.75654,45.82324],[-67.80961,45.87531],[-67.75196,45.91814],[-67.78111,45.9392],[-67.78578,47.06473],[-67.87993,47.10377],[-67.94843,47.1925],[-68.23244,47.35712],[-68.37458,47.35851],[-68.38332,47.28723],[-68.57914,47.28431],[-68.60575,47.24659],[-68.70125,47.24399],[-68.89222,47.1807],[-69.05039,47.2456],[-69.05073,47.30076],[-69.05148,47.42012],[-69.22119,47.46461],[-69.99966,46.69543],[-70.05812,46.41768],[-70.18547,46.35357],[-70.29078,46.18832],[-70.23855,46.1453],[-70.31025,45.96424],[-70.24694,45.95138],[-70.25976,45.89675],[-70.41523,45.79497],[-70.38934,45.73215],[-70.54019,45.67291],[-70.68516,45.56964],[-70.72651,45.49771],[-70.62518,45.42286],[-70.65383,45.37592],[-70.78372,45.43269],[-70.82638,45.39828],[-70.80236,45.37444],[-70.84816,45.22698],[-70.89864,45.2398],[-70.91169,45.29849],[-70.95193,45.33895],[-71.0107,45.34819],[-71.01866,45.31573],[-71.08364,45.30623],[-71.14568,45.24128],[-71.19723,45.25438],[-71.22338,45.25184],[-71.29371,45.29996],[-71.37133,45.24624],[-71.44252,45.2361],[-71.40364,45.21382],[-71.42778,45.12624],[-71.48735,45.07784],[-71.50067,45.01357],[-73.35025,45.00942],[-74.32699,44.99029],[-74.66689,45.00646],[-74.8447,45.00606],[-74.99101,44.98051],[-75.01363,44.95608],[-75.2193,44.87821],[-75.41441,44.76614],[-75.76813,44.51537],[-75.8217,44.43176],[-75.95947,44.34463],[-76.00018,44.34896],[-76.16285,44.28262],[-76.1664,44.23051],[-76.244,44.19643],[-76.31222,44.19894],[-76.35324,44.13493],[-76.43859,44.09393],[-76.79706,43.63099],[-79.25796,43.54052],[-79.06921,43.26183],[-79.05512,43.25375],[-79.05544,43.21224],[-79.05002,43.20133],[-79.05384,43.17418],[-79.04652,43.16396],[-79.0427,43.13934],[-79.06881,43.12029],[-79.05671,43.10937],[-79.07486,43.07845],[-79.01055,43.06659],[-78.99941,43.05612],[-79.02424,43.01983],[-79.02074,42.98444],[-78.98126,42.97],[-78.96312,42.95509],[-78.93224,42.95229],[-78.90905,42.93022],[-78.90712,42.89733],[-78.93684,42.82887],[-82.67862,41.67615],[-83.11184,41.95671],[-83.14962,42.04089],[-83.12724,42.2376],[-83.09837,42.28877],[-83.07837,42.30978],[-83.02253,42.33045],[-82.82964,42.37355],[-82.64242,42.55594],[-82.58873,42.54984],[-82.57583,42.5718],[-82.51858,42.611],[-82.51063,42.66025],[-82.46613,42.76615],[-82.4826,42.8068],[-82.45331,42.93139],[-82.4253,42.95423],[-82.4146,42.97626],[-82.42469,42.992],[-82.48419,45.30225],[-83.59589,45.82131],[-83.43746,45.99749],[-83.57017,46.105],[-83.83329,46.12169],[-83.90453,46.05922],[-83.95399,46.05634],[-84.1096,46.23987],[-84.09756,46.25512],[-84.11615,46.2681],[-84.11254,46.32329],[-84.13451,46.39218],[-84.11196,46.50248],[-84.12885,46.53068],[-84.17723,46.52753],[-84.1945,46.54061],[-84.2264,46.53337],[-84.26351,46.49508],[-84.29893,46.49127],[-84.34174,46.50683],[-84.42101,46.49853],[-84.4481,46.48972],[-84.47607,46.45225],[-84.55635,46.45974],[-84.85871,46.88881],[-88.37033,48.30586],[-89.48837,48.01412],[-89.57972,48.00023],[-89.77248,48.02607],[-89.89974,47.98109],[-90.07418,48.11043],[-90.56312,48.09488],[-90.56444,48.12184],[-90.75045,48.09143],[-90.87588,48.2484],[-91.08016,48.18096],[-91.25025,48.08522],[-91.43248,48.04912],[-91.45829,48.07454],[-91.58025,48.04339],[-91.55649,48.10611],[-91.70451,48.11805],[-91.71231,48.19875],[-91.86125,48.21278],[-91.98929,48.25409],[-92.05339,48.35958],[-92.14732,48.36578],[-92.202,48.35252],[-92.26662,48.35651],[-92.30939,48.31251],[-92.27167,48.25046],[-92.37185,48.22259],[-92.48147,48.36609],[-92.45588,48.40624],[-92.50712,48.44921],[-92.65606,48.43471],[-92.71323,48.46081],[-92.69927,48.49573],[-92.62747,48.50278],[-92.6342,48.54133],[-92.7287,48.54005],[-92.94973,48.60866],[-93.25391,48.64266],[-93.33946,48.62787],[-93.3712,48.60599],[-93.39758,48.60364],[-93.40693,48.60948],[-93.44472,48.59147],[-93.47022,48.54357],[-93.66382,48.51845],[-93.79267,48.51631],[-93.80939,48.52439],[-93.80676,48.58232],[-93.83288,48.62745],[-93.85769,48.63284],[-94.23215,48.65202],[-94.25104,48.65729],[-94.25172,48.68404],[-94.27153,48.70232],[-94.4174,48.71049],[-94.44258,48.69223],[-94.53826,48.70216],[-94.54885,48.71543],[-94.58903,48.71803],[-94.69335,48.77883],[-94.69669,48.80918],[-94.70486,48.82365],[-94.70087,48.8339],[-94.687,48.84077],[-94.75017,49.09931],[-94.77355,49.11998],[-94.82487,49.29483],[-94.8159,49.32299],[-94.85381,49.32492],[-94.95681,49.37035],[-94.99532,49.36579],[-95.01419,49.35647],[-95.05825,49.35311],[-95.12903,49.37056],[-95.15357,49.384],[-95.15355,48.9996],[-97.24024,48.99952],[-101.36198,48.99935],[-104.05004,48.99925],[-110.0051,48.99901],[-114.0683,48.99885],[-116.04938,48.99999],[-117.03266,49.00056],[-123.32163,49.00419],[-123.0093,48.83186],[-123.0093,48.76586],[-123.26565,48.6959],[-123.15614,48.35395],[-123.50039,48.21223],[-125.03842,48.53282],[-133.36909,48.51151],[-133.92876,54.62289],[-130.61931,54.70835],[-130.64499,54.76912],[-130.44184,54.85377],[-130.27203,54.97174],[-130.18765,55.07744],[-130.08035,55.21556],[-129.97513,55.28029],[-130.15373,55.74895],[-130.00857,55.91344],[-130.00093,56.00325],[-130.10173,56.12178],[-130.33965,56.10849],[-130.77769,56.36185],[-131.8271,56.62247],[-133.38523,58.42773],[-133.84645,58.73543],[-134.27175,58.8634],[-134.48059,59.13231],[-134.55699,59.1297],[-134.7047,59.2458],[-135.00267,59.28745],[-135.03069,59.56208],[-135.48007,59.79937],[-136.31566,59.59083],[-136.22381,59.55526],[-136.33727,59.44466],[-136.47323,59.46617],[-136.52365,59.16752],[-136.82619,59.16198],[-137.4925,58.89415],[-137.60623,59.24465],[-138.62145,59.76431],[-138.71149,59.90728],[-139.05365,59.99655],[-139.20603,60.08896],[-139.05831,60.35205],[-139.68991,60.33693],[-139.98024,60.18027],[-140.45648,60.30919],[-140.5227,60.22077],[-141.00116,60.30648],[-140.97446,84.39275],[-45.47832,84.58738],[-68.21821,80.48551],[-76.75614,76.72014],[-46.37635,57.3249],[-53.12387,41.40385],[-56.27503,47.39728],[-61.98255,37.34815],[-67.16117,44.20069],[-66.93432,44.82597],[-66.96824,44.83078],[-66.98249,44.87071],[-66.96824,44.90965],[-67.0216,44.95333],[-67.11316,45.11176],[-67.15965,45.16179],[-67.19603,45.16771],[-67.20349,45.1722]]]]}},{type:"Feature",properties:{iso1A2:"SG",iso1A3:"SGP",iso1N3:"702",wikidata:"Q334",nameEn:"Singapore",groups:["035","142"],driveSide:"left",callingCodes:["65"]},geometry:{type:"MultiPolygon",coordinates:[[[[104.00131,1.42405],[104.02277,1.4438],[104.04622,1.44691],[104.07348,1.43322],[104.08871,1.42015],[104.09162,1.39694],[104.08072,1.35998],[104.12282,1.27714],[104.03085,1.26954],[103.74084,1.12902],[103.66049,1.18825],[103.56591,1.19719],[103.62738,1.35255],[103.67468,1.43166],[103.7219,1.46108],[103.74161,1.4502],[103.76395,1.45183],[103.81181,1.47953],[103.86383,1.46288],[103.89565,1.42841],[103.93384,1.42926],[104.00131,1.42405]]]]}},{type:"Feature",properties:{iso1A2:"CG",iso1A3:"COG",iso1N3:"178",wikidata:"Q971",nameEn:"Republic of the Congo",groups:["017","202","002"],callingCodes:["242"]},geometry:{type:"MultiPolygon",coordinates:[[[[18.62755,3.47564],[18.63857,3.19342],[18.10683,2.26876],[18.08034,1.58553],[17.85887,1.04327],[17.86989,0.58873],[17.95255,0.48128],[17.93877,0.32424],[17.81204,0.23884],[17.66051,-0.26535],[17.72112,-0.52707],[17.32438,-0.99265],[16.97999,-1.12762],[16.70724,-1.45815],[16.50336,-1.8795],[16.16173,-2.16586],[16.22785,-2.59528],[16.1755,-3.25014],[16.21407,-3.2969],[15.89448,-3.9513],[15.53081,-4.042],[15.48121,-4.22062],[15.41785,-4.28381],[15.32693,-4.27282],[15.25411,-4.31121],[15.1978,-4.32388],[14.83101,-4.80838],[14.67948,-4.92093],[14.5059,-4.84956],[14.41499,-4.8825],[14.37366,-4.56125],[14.47284,-4.42941],[14.3957,-4.36623],[14.40672,-4.28381],[13.9108,-4.50906],[13.81162,-4.41842],[13.71794,-4.44864],[13.70417,-4.72601],[13.50305,-4.77818],[13.41764,-4.89897],[13.11182,-4.5942],[13.09648,-4.63739],[12.91489,-4.47907],[12.87096,-4.40315],[12.76844,-4.38709],[12.64835,-4.55937],[12.40964,-4.60609],[12.32324,-4.78415],[12.25587,-4.79437],[12.20901,-4.75642],[12.16068,-4.90089],[12.00924,-5.02627],[11.50888,-5.33417],[10.75913,-4.39519],[11.12647,-3.94169],[11.22301,-3.69888],[11.48764,-3.51089],[11.57949,-3.52798],[11.68608,-3.68942],[11.87083,-3.71571],[11.92719,-3.62768],[11.8318,-3.5812],[11.96554,-3.30267],[11.70227,-3.17465],[11.70558,-3.0773],[11.80365,-3.00424],[11.64798,-2.81146],[11.5359,-2.85654],[11.64487,-2.61865],[11.57637,-2.33379],[11.74605,-2.39936],[11.96866,-2.33559],[12.04895,-2.41704],[12.47925,-2.32626],[12.44656,-1.92025],[12.61312,-1.8129],[12.82172,-1.91091],[13.02759,-2.33098],[13.47977,-2.43224],[13.75884,-2.09293],[13.92073,-2.35581],[13.85846,-2.46935],[14.10442,-2.49268],[14.23829,-2.33715],[14.16202,-2.23916],[14.23518,-2.15671],[14.25932,-1.97624],[14.41838,-1.89412],[14.52569,-0.57818],[14.41887,-0.44799],[14.2165,-0.38261],[14.06862,-0.20826],[13.90632,-0.2287],[13.88648,0.26652],[14.10909,0.58563],[14.26066,0.57255],[14.48179,0.9152],[14.25186,1.39842],[13.89582,1.4261],[13.15519,1.23368],[13.25447,1.32339],[13.13461,1.57238],[13.29457,2.16106],[14.61145,2.17866],[15.00996,1.98887],[15.22634,2.03243],[15.34776,1.91264],[15.48942,1.98265],[16.02959,1.76483],[16.02647,1.65591],[16.14634,1.70259],[16.05294,1.9811],[16.08563,2.19733],[16.15568,2.18955],[16.19357,2.21537],[16.50126,2.84739],[16.46701,2.92512],[16.57598,3.47999],[16.68283,3.54257],[17.01746,3.55136],[17.35649,3.63045],[17.46876,3.70515],[17.60966,3.63705],[17.83421,3.61068],[17.85842,3.53378],[18.05656,3.56893],[18.14902,3.54476],[18.17323,3.47665],[18.24148,3.50302],[18.2723,3.57992],[18.39558,3.58212],[18.49245,3.63924],[18.58711,3.49423],[18.62755,3.47564]]]]}},{type:"Feature",properties:{iso1A2:"SH",iso1A3:"SHN",iso1N3:"654",wikidata:"Q34497",nameEn:"Saint Helena, Ascension and Tristan da Cunha",country:"GB",groups:["011","202","002"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["290"]},geometry:{type:"MultiPolygon",coordinates:[[[[-14.82771,-8.70814],[-13.33271,-8.07391],[-4.97086,-15.55882],[-9.34669,-41.00353],[-13.29655,-40.02846],[-13.41694,-37.88844],[-11.48092,-37.8367],[-11.55782,-36.60319],[-13.48367,-36.6746],[-14.82771,-8.70814]]]]}},{type:"Feature",properties:{iso1A2:"CL",iso1A3:"CHL",iso1N3:"152",wikidata:"Q298",nameEn:"Chile",groups:["005","419","019"],callingCodes:["56"]},geometry:{type:"MultiPolygon",coordinates:[[[[-68.60702,-52.65781],[-68.60733,-54.9125],[-68.01394,-54.8753],[-67.46182,-54.92205],[-67.11046,-54.94199],[-66.07313,-55.19618],[-68.11646,-58.14883],[-113.52687,-26.52828],[-70.59118,-18.35072],[-70.378,-18.3495],[-70.31267,-18.31258],[-70.16394,-18.31737],[-69.96732,-18.25992],[-69.81607,-18.12582],[-69.75305,-17.94605],[-69.82868,-17.72048],[-69.79087,-17.65563],[-69.66483,-17.65083],[-69.46897,-17.4988],[-69.46623,-17.60518],[-69.34126,-17.72753],[-69.28671,-17.94844],[-69.07496,-18.03715],[-69.14807,-18.16893],[-69.07432,-18.28259],[-68.94987,-18.93302],[-68.87082,-19.06003],[-68.80602,-19.08355],[-68.61989,-19.27584],[-68.41218,-19.40499],[-68.66761,-19.72118],[-68.54611,-19.84651],[-68.57132,-20.03134],[-68.74273,-20.08817],[-68.7276,-20.46178],[-68.44023,-20.62701],[-68.55383,-20.7355],[-68.53957,-20.91542],[-68.40403,-20.94562],[-68.18816,-21.28614],[-67.85114,-22.87076],[-67.54284,-22.89771],[-67.18382,-22.81525],[-66.99632,-22.99839],[-67.33563,-24.04237],[-68.24825,-24.42596],[-68.56909,-24.69831],[-68.38372,-25.08636],[-68.57622,-25.32505],[-68.38372,-26.15353],[-68.56909,-26.28146],[-68.59048,-26.49861],[-68.27677,-26.90626],[-68.43363,-27.08414],[-68.77586,-27.16029],[-69.22504,-27.95042],[-69.66709,-28.44055],[-69.80969,-29.07185],[-69.99507,-29.28351],[-69.8596,-30.26131],[-70.14479,-30.36595],[-70.55832,-31.51559],[-69.88099,-33.34489],[-69.87386,-34.13344],[-70.49416,-35.24145],[-70.38008,-36.02375],[-70.95047,-36.4321],[-71.24279,-37.20264],[-70.89532,-38.6923],[-71.37826,-38.91474],[-71.92726,-40.72714],[-71.74901,-42.11711],[-72.15541,-42.15941],[-72.14828,-42.85321],[-71.64206,-43.64774],[-71.81318,-44.38097],[-71.16436,-44.46244],[-71.26418,-44.75684],[-72.06985,-44.81756],[-71.35687,-45.22075],[-71.75614,-45.61611],[-71.68577,-46.55385],[-71.94152,-47.13595],[-72.50478,-47.80586],[-72.27662,-48.28727],[-72.54042,-48.52392],[-72.56894,-48.81116],[-73.09655,-49.14342],[-73.45156,-49.79461],[-73.55259,-49.92488],[-73.15765,-50.78337],[-72.31343,-50.58411],[-72.33873,-51.59954],[-71.99889,-51.98018],[-69.97824,-52.00845],[-68.41683,-52.33516],[-68.60702,-52.65781]]]]}},{type:"Feature",properties:{iso1A2:"SI",iso1A3:"SVN",iso1N3:"705",wikidata:"Q215",nameEn:"Slovenia",groups:["EU","039","150"],callingCodes:["386"]},geometry:{type:"MultiPolygon",coordinates:[[[[16.50139,46.56684],[16.52885,46.53303],[16.52604,46.5051],[16.59527,46.47524],[16.52604,46.47831],[16.5007,46.49644],[16.44036,46.5171],[16.38771,46.53608],[16.37193,46.55008],[16.29793,46.5121],[16.26733,46.51505],[16.26759,46.50566],[16.23961,46.49653],[16.25124,46.48067],[16.27398,46.42875],[16.27329,46.41467],[16.30162,46.40437],[16.30233,46.37837],[16.18824,46.38282],[16.14859,46.40547],[16.05281,46.39141],[16.05065,46.3833],[16.07314,46.36458],[16.07616,46.3463],[15.97965,46.30652],[15.79284,46.25811],[15.78817,46.21719],[15.75479,46.20336],[15.75436,46.21969],[15.67395,46.22478],[15.6434,46.21396],[15.64904,46.19229],[15.59909,46.14761],[15.6083,46.11992],[15.62317,46.09103],[15.72977,46.04682],[15.71246,46.01196],[15.70327,46.00015],[15.70636,45.92116],[15.67967,45.90455],[15.68383,45.88867],[15.68232,45.86819],[15.70411,45.8465],[15.66662,45.84085],[15.64185,45.82915],[15.57952,45.84953],[15.52234,45.82195],[15.47325,45.8253],[15.47531,45.79802],[15.40836,45.79491],[15.25423,45.72275],[15.30872,45.69014],[15.34919,45.71623],[15.4057,45.64727],[15.38952,45.63682],[15.34214,45.64702],[15.34695,45.63382],[15.31027,45.6303],[15.27747,45.60504],[15.29837,45.5841],[15.30249,45.53224],[15.38188,45.48752],[15.33051,45.45258],[15.27758,45.46678],[15.16862,45.42309],[15.05187,45.49079],[15.02385,45.48533],[14.92266,45.52788],[14.90554,45.47769],[14.81992,45.45913],[14.80124,45.49515],[14.71718,45.53442],[14.68605,45.53006],[14.69694,45.57366],[14.59576,45.62812],[14.60977,45.66403],[14.57397,45.67165],[14.53816,45.6205],[14.5008,45.60852],[14.49769,45.54424],[14.36693,45.48642],[14.32487,45.47142],[14.27681,45.4902],[14.26611,45.48239],[14.24239,45.50607],[14.22371,45.50388],[14.20348,45.46896],[14.07116,45.48752],[14.00578,45.52352],[13.96063,45.50825],[13.99488,45.47551],[13.97309,45.45258],[13.90771,45.45149],[13.88124,45.42637],[13.81742,45.43729],[13.7785,45.46787],[13.67398,45.4436],[13.62902,45.45898],[13.56979,45.4895],[13.45644,45.59464],[13.6076,45.64761],[13.7198,45.59352],[13.74587,45.59811],[13.78445,45.5825],[13.84106,45.58185],[13.86771,45.59898],[13.8695,45.60835],[13.9191,45.6322],[13.87933,45.65207],[13.83422,45.68703],[13.83332,45.70855],[13.8235,45.7176],[13.66986,45.79955],[13.59784,45.8072],[13.58858,45.83503],[13.57563,45.8425],[13.58644,45.88173],[13.59565,45.89446],[13.60857,45.89907],[13.61931,45.91782],[13.63815,45.93607],[13.6329,45.94894],[13.64307,45.98326],[13.63458,45.98947],[13.62074,45.98388],[13.58903,45.99009],[13.56759,45.96991],[13.52963,45.96588],[13.50104,45.98078],[13.47474,46.00546],[13.49702,46.01832],[13.50998,46.04498],[13.49568,46.04839],[13.50104,46.05986],[13.57072,46.09022],[13.64053,46.13587],[13.66472,46.17392],[13.64451,46.18966],[13.56682,46.18703],[13.56114,46.2054],[13.47587,46.22725],[13.42218,46.20758],[13.37671,46.29668],[13.44808,46.33507],[13.43418,46.35992],[13.47019,46.3621],[13.5763,46.40915],[13.5763,46.42613],[13.59777,46.44137],[13.68684,46.43881],[13.7148,46.5222],[13.89837,46.52331],[14.00422,46.48474],[14.04002,46.49117],[14.12097,46.47724],[14.15989,46.43327],[14.28326,46.44315],[14.314,46.43327],[14.42608,46.44614],[14.45877,46.41717],[14.52176,46.42617],[14.56463,46.37208],[14.5942,46.43434],[14.66892,46.44936],[14.72185,46.49974],[14.81836,46.51046],[14.83549,46.56614],[14.86419,46.59411],[14.87129,46.61],[14.92283,46.60848],[14.96002,46.63459],[14.98024,46.6009],[15.01451,46.641],[15.14215,46.66131],[15.23711,46.63994],[15.41235,46.65556],[15.45514,46.63697],[15.46906,46.61321],[15.54431,46.6312],[15.55333,46.64988],[15.54533,46.66985],[15.59826,46.68908],[15.62317,46.67947],[15.63255,46.68069],[15.6365,46.6894],[15.6543,46.69228],[15.6543,46.70616],[15.67411,46.70735],[15.69523,46.69823],[15.72279,46.69548],[15.73823,46.70011],[15.76771,46.69863],[15.78518,46.70712],[15.8162,46.71897],[15.87691,46.7211],[15.94864,46.68769],[15.98512,46.68463],[15.99988,46.67947],[16.04036,46.6549],[16.04347,46.68694],[16.02808,46.71094],[15.99769,46.7266],[15.98432,46.74991],[15.99126,46.78199],[15.99054,46.82772],[16.05786,46.83927],[16.10983,46.867],[16.14365,46.8547],[16.15711,46.85434],[16.21892,46.86961],[16.2365,46.87775],[16.2941,46.87137],[16.34547,46.83836],[16.3408,46.80641],[16.31303,46.79838],[16.30966,46.7787],[16.37816,46.69975],[16.42641,46.69228],[16.41863,46.66238],[16.38594,46.6549],[16.39217,46.63673],[16.50139,46.56684]]]]}},{type:"Feature",properties:{iso1A2:"CP",iso1A3:"CPT",wikidata:"Q161258",nameEn:"Clipperton Island",country:"FR",isoStatus:"excRes"},geometry:{type:"MultiPolygon",coordinates:[[[[-110.36279,9.79626],[-109.04145,11.13245],[-108.755,9.84085],[-110.36279,9.79626]]]]}},{type:"Feature",properties:{iso1A2:"SJ",iso1A3:"SJM",iso1N3:"744",wikidata:"Q842829",nameEn:"Svalbard and Jan Mayen",country:"NO",groups:["154","150"],callingCodes:["47 79"]},geometry:{type:"MultiPolygon",coordinates:[[[[-7.49892,77.24208],[36.85549,84.09565],[32.07813,72.01005],[-7.49892,77.24208]]],[[[-9.18243,72.23144],[-5.93364,70.76368],[-10.71459,70.09565],[-9.18243,72.23144]]]]}},{type:"Feature",properties:{iso1A2:"CW",iso1A3:"CUW",iso1N3:"531",wikidata:"Q25279",nameEn:"Curaçao",country:"NL",groups:["029","003","419","019"],callingCodes:["599"]},geometry:{type:"MultiPolygon",coordinates:[[[[-68.90012,12.62309],[-68.33524,11.78151],[-68.99639,11.79035],[-69.59009,12.46019],[-68.90012,12.62309]]]]}},{type:"Feature",properties:{iso1A2:"SK",iso1A3:"SVK",iso1N3:"703",wikidata:"Q214",nameEn:"Slovakia",groups:["EU","151","150"],callingCodes:["421"]},geometry:{type:"MultiPolygon",coordinates:[[[[19.82237,49.27806],[19.75286,49.20751],[19.86409,49.19316],[19.90529,49.23532],[19.98494,49.22904],[20.08238,49.1813],[20.13738,49.31685],[20.21977,49.35265],[20.31453,49.34817],[20.31728,49.39914],[20.39939,49.3896],[20.46422,49.41612],[20.5631,49.375],[20.61666,49.41791],[20.72274,49.41813],[20.77971,49.35383],[20.9229,49.29626],[20.98733,49.30774],[21.09799,49.37176],[21.041,49.41791],[21.12477,49.43666],[21.19756,49.4054],[21.27858,49.45988],[21.43376,49.41433],[21.62328,49.4447],[21.77983,49.35443],[21.82927,49.39467],[21.96385,49.3437],[22.04427,49.22136],[22.56155,49.08865],[22.54338,49.01424],[22.48296,48.99172],[22.42934,48.92857],[22.34151,48.68893],[22.21379,48.6218],[22.16023,48.56548],[22.14689,48.4005],[21.83339,48.36242],[21.8279,48.33321],[21.72525,48.34628],[21.67134,48.3989],[21.6068,48.50365],[21.44063,48.58456],[21.11516,48.49546],[20.83248,48.5824],[20.5215,48.53336],[20.29943,48.26104],[20.24312,48.2784],[19.92452,48.1283],[19.63338,48.25006],[19.52489,48.19791],[19.47957,48.09437],[19.28182,48.08336],[19.23924,48.0595],[19.01952,48.07052],[18.82176,48.04206],[18.76134,47.97499],[18.76821,47.87469],[18.8506,47.82308],[18.74074,47.8157],[18.66521,47.76772],[18.56496,47.76588],[18.29305,47.73541],[18.02938,47.75665],[17.71215,47.7548],[17.23699,48.02094],[17.16001,48.00636],[17.07039,48.0317],[17.09168,48.09366],[17.05735,48.14179],[17.02919,48.13996],[16.97701,48.17385],[16.89461,48.31332],[16.90903,48.32519],[16.84243,48.35258],[16.83317,48.38138],[16.83588,48.3844],[16.8497,48.38321],[16.85204,48.44968],[16.94611,48.53614],[16.93955,48.60371],[17.00215,48.70887],[17.11202,48.82925],[17.19355,48.87602],[17.29054,48.85546],[17.3853,48.80936],[17.45671,48.85004],[17.5295,48.81117],[17.7094,48.86721],[17.73126,48.87885],[17.77944,48.92318],[17.87831,48.92679],[17.91814,49.01784],[18.06885,49.03157],[18.1104,49.08624],[18.15022,49.24518],[18.18456,49.28909],[18.36446,49.3267],[18.4139,49.36517],[18.4084,49.40003],[18.44686,49.39467],[18.54848,49.47059],[18.53063,49.49022],[18.57183,49.51162],[18.6144,49.49824],[18.67757,49.50895],[18.74761,49.492],[18.84521,49.51672],[18.94536,49.52143],[18.97283,49.49914],[18.9742,49.39557],[19.18019,49.41165],[19.25435,49.53391],[19.36009,49.53747],[19.37795,49.574],[19.45348,49.61583],[19.52626,49.57311],[19.53313,49.52856],[19.57845,49.46077],[19.64162,49.45184],[19.6375,49.40897],[19.72127,49.39288],[19.78581,49.41701],[19.82237,49.27806]]]]}},{type:"Feature",properties:{iso1A2:"DE",iso1A3:"DEU",iso1N3:"276",wikidata:"Q183",nameEn:"Germany",groups:["EU","155","150"],callingCodes:["49"]},geometry:{type:"MultiPolygon",coordinates:[[[[8.70847,47.68904],[8.68985,47.69552],[8.66837,47.68437],[8.65769,47.68928],[8.67508,47.6979],[8.66416,47.71367],[8.70237,47.71453],[8.71773,47.69088],[8.70847,47.68904]]],[[[8.72617,47.69651],[8.73671,47.7169],[8.70543,47.73121],[8.74251,47.75168],[8.71778,47.76571],[8.68985,47.75686],[8.68022,47.78599],[8.65292,47.80066],[8.64425,47.76398],[8.62408,47.7626],[8.61657,47.79998],[8.56415,47.80633],[8.56814,47.78001],[8.48868,47.77215],[8.45771,47.7493],[8.44807,47.72426],[8.40569,47.69855],[8.4211,47.68407],[8.40473,47.67499],[8.41346,47.66676],[8.42264,47.66667],[8.44711,47.65379],[8.4667,47.65747],[8.46605,47.64103],[8.49656,47.64709],[8.5322,47.64687],[8.52801,47.66059],[8.56141,47.67088],[8.57683,47.66158],[8.6052,47.67258],[8.61113,47.66332],[8.62884,47.65098],[8.62049,47.63757],[8.60412,47.63735],[8.61471,47.64514],[8.60701,47.65271],[8.59545,47.64298],[8.60348,47.61204],[8.57586,47.59537],[8.55756,47.62394],[8.51686,47.63476],[8.50747,47.61897],[8.45578,47.60121],[8.46637,47.58389],[8.48949,47.588],[8.49431,47.58107],[8.43235,47.56617],[8.39477,47.57826],[8.38273,47.56608],[8.35512,47.57014],[8.32735,47.57133],[8.30277,47.58607],[8.29524,47.5919],[8.29722,47.60603],[8.2824,47.61225],[8.26313,47.6103],[8.25863,47.61571],[8.23809,47.61204],[8.22577,47.60385],[8.22011,47.6181],[8.20617,47.62141],[8.19378,47.61636],[8.1652,47.5945],[8.14947,47.59558],[8.13823,47.59147],[8.13662,47.58432],[8.11543,47.5841],[8.10395,47.57918],[8.10002,47.56504],[8.08557,47.55768],[8.06663,47.56374],[8.04383,47.55443],[8.02136,47.55096],[8.00113,47.55616],[7.97581,47.55493],[7.95682,47.55789],[7.94494,47.54511],[7.91251,47.55031],[7.90673,47.57674],[7.88664,47.58854],[7.84412,47.5841],[7.81901,47.58798],[7.79486,47.55691],[7.75261,47.54599],[7.71961,47.54219],[7.69642,47.53297],[7.68101,47.53232],[7.6656,47.53752],[7.66174,47.54554],[7.65083,47.54662],[7.63338,47.56256],[7.67655,47.56435],[7.68904,47.57133],[7.67115,47.5871],[7.68486,47.59601],[7.69385,47.60099],[7.68229,47.59905],[7.67395,47.59212],[7.64599,47.59695],[7.64213,47.5944],[7.64309,47.59151],[7.61929,47.57683],[7.60459,47.57869],[7.60523,47.58519],[7.58945,47.59017],[7.59301,47.60058],[7.58851,47.60794],[7.57423,47.61628],[7.5591,47.63849],[7.53384,47.65115],[7.52067,47.66437],[7.51915,47.68335],[7.51266,47.70197],[7.53722,47.71635],[7.54761,47.72912],[7.52921,47.77747],[7.55673,47.87371],[7.62302,47.97898],[7.56966,48.03265],[7.57137,48.12292],[7.6648,48.22219],[7.69022,48.30018],[7.74562,48.32736],[7.73109,48.39192],[7.76833,48.48945],[7.80647,48.51239],[7.80167,48.54758],[7.80057,48.5857],[7.84098,48.64217],[7.89002,48.66317],[7.96812,48.72491],[7.96994,48.75606],[8.01534,48.76085],[8.0326,48.79017],[8.06802,48.78957],[8.10253,48.81829],[8.12813,48.87985],[8.19989,48.95825],[8.20031,48.95856],[8.22604,48.97352],[8.14189,48.97833],[7.97783,49.03161],[7.93641,49.05544],[7.86386,49.03499],[7.79557,49.06583],[7.75948,49.04562],[7.63618,49.05428],[7.62575,49.07654],[7.56416,49.08136],[7.53012,49.09818],[7.49172,49.13915],[7.49473,49.17],[7.44455,49.16765],[7.44052,49.18354],[7.3662,49.17308],[7.35995,49.14399],[7.3195,49.14231],[7.29514,49.11426],[7.23473,49.12971],[7.1593,49.1204],[7.1358,49.1282],[7.12504,49.14253],[7.10384,49.13787],[7.10715,49.15631],[7.07859,49.15031],[7.09007,49.13094],[7.07162,49.1255],[7.06642,49.11415],[7.05548,49.11185],[7.04843,49.11422],[7.04409,49.12123],[7.04662,49.13724],[7.03178,49.15734],[7.0274,49.17042],[7.03459,49.19096],[7.01318,49.19018],[6.97273,49.2099],[6.95963,49.203],[6.94028,49.21641],[6.93831,49.2223],[6.91875,49.22261],[6.89298,49.20863],[6.85939,49.22376],[6.83555,49.21249],[6.85119,49.20038],[6.85016,49.19354],[6.86225,49.18185],[6.84703,49.15734],[6.83385,49.15162],[6.78265,49.16793],[6.73765,49.16375],[6.71137,49.18808],[6.73256,49.20486],[6.71843,49.2208],[6.69274,49.21661],[6.66583,49.28065],[6.60186,49.31055],[6.572,49.35027],[6.58807,49.35358],[6.60091,49.36864],[6.533,49.40748],[6.55404,49.42464],[6.42432,49.47683],[6.40274,49.46546],[6.39168,49.4667],[6.38352,49.46463],[6.36778,49.46937],[6.36907,49.48931],[6.36788,49.50377],[6.35666,49.52931],[6.38072,49.55171],[6.38228,49.55855],[6.35825,49.57053],[6.36676,49.57813],[6.38024,49.57593],[6.38342,49.5799],[6.37464,49.58886],[6.385,49.59946],[6.39822,49.60081],[6.41861,49.61723],[6.4413,49.65722],[6.43768,49.66021],[6.42726,49.66078],[6.42937,49.66857],[6.44654,49.67799],[6.46048,49.69092],[6.48014,49.69767],[6.49785,49.71118],[6.50647,49.71353],[6.5042,49.71808],[6.49694,49.72205],[6.49535,49.72645],[6.50261,49.72718],[6.51397,49.72058],[6.51805,49.72425],[6.50193,49.73291],[6.50174,49.75292],[6.51646,49.75961],[6.51828,49.76855],[6.51056,49.77515],[6.51669,49.78336],[6.50534,49.78952],[6.52169,49.79787],[6.53122,49.80666],[6.52121,49.81338],[6.51215,49.80124],[6.50647,49.80916],[6.48718,49.81267],[6.47111,49.82263],[6.45425,49.81164],[6.44131,49.81443],[6.42905,49.81091],[6.42521,49.81591],[6.40022,49.82029],[6.36576,49.85032],[6.34267,49.84974],[6.33585,49.83785],[6.32098,49.83728],[6.32303,49.85133],[6.30963,49.87021],[6.29692,49.86685],[6.28874,49.87592],[6.26146,49.88203],[6.23496,49.89972],[6.22926,49.92096],[6.21882,49.92403],[6.22608,49.929],[6.22094,49.94955],[6.19856,49.95053],[6.19089,49.96991],[6.18045,49.96611],[6.18554,49.95622],[6.17872,49.9537],[6.16466,49.97086],[6.1701,49.98518],[6.14147,49.99563],[6.14948,50.00908],[6.13806,50.01056],[6.1295,50.01849],[6.13273,50.02019],[6.13794,50.01466],[6.14666,50.02207],[6.13044,50.02929],[6.13458,50.04141],[6.11274,50.05916],[6.12055,50.09171],[6.1379,50.12964],[6.15298,50.14126],[6.14132,50.14971],[6.14588,50.17106],[6.18739,50.1822],[6.18364,50.20815],[6.16853,50.2234],[6.208,50.25179],[6.28797,50.27458],[6.29949,50.30887],[6.32488,50.32333],[6.35701,50.31139],[6.40641,50.32425],[6.40785,50.33557],[6.3688,50.35898],[6.34406,50.37994],[6.36852,50.40776],[6.37219,50.45397],[6.34005,50.46083],[6.3465,50.48833],[6.30809,50.50058],[6.26637,50.50272],[6.22335,50.49578],[6.20599,50.52089],[6.19193,50.5212],[6.18716,50.52653],[6.19579,50.5313],[6.19735,50.53576],[6.17802,50.54179],[6.17739,50.55875],[6.20281,50.56952],[6.22581,50.5907],[6.24005,50.58732],[6.24888,50.59869],[6.2476,50.60392],[6.26957,50.62444],[6.17852,50.6245],[6.11707,50.72231],[6.04428,50.72861],[6.0406,50.71848],[6.0326,50.72647],[6.03889,50.74618],[6.01976,50.75398],[6.02624,50.77453],[5.97497,50.79992],[5.98404,50.80988],[6.00462,50.80065],[6.02328,50.81694],[6.01921,50.84435],[6.05623,50.8572],[6.05702,50.85179],[6.07431,50.84674],[6.07693,50.86025],[6.08805,50.87223],[6.07486,50.89307],[6.09297,50.92066],[6.01615,50.93367],[6.02697,50.98303],[5.95282,50.98728],[5.90296,50.97356],[5.90493,51.00198],[5.87849,51.01969],[5.86735,51.05182],[5.9134,51.06736],[5.9541,51.03496],[5.98292,51.07469],[6.16706,51.15677],[6.17384,51.19589],[6.07889,51.17038],[6.07889,51.24432],[6.16977,51.33169],[6.22674,51.36135],[6.22641,51.39948],[6.20654,51.40049],[6.21724,51.48568],[6.18017,51.54096],[6.09055,51.60564],[6.11759,51.65609],[6.02767,51.6742],[6.04091,51.71821],[5.95003,51.7493],[5.98665,51.76944],[5.94568,51.82786],[5.99848,51.83195],[6.06705,51.86136],[6.10337,51.84829],[6.16902,51.84094],[6.11551,51.89769],[6.15349,51.90439],[6.21443,51.86801],[6.29872,51.86801],[6.30593,51.84998],[6.40704,51.82771],[6.38815,51.87257],[6.47179,51.85395],[6.50231,51.86313],[6.58556,51.89386],[6.68386,51.91861],[6.72319,51.89518],[6.82357,51.96711],[6.83035,51.9905],[6.68128,52.05052],[6.76117,52.11895],[6.83984,52.11728],[6.97189,52.20329],[6.9897,52.2271],[7.03729,52.22695],[7.06365,52.23789],[7.02703,52.27941],[7.07044,52.37805],[7.03417,52.40237],[6.99041,52.47235],[6.94293,52.43597],[6.69507,52.488],[6.71641,52.62905],[6.77307,52.65375],[7.04557,52.63318],[7.07253,52.81083],[7.21694,53.00742],[7.17898,53.13817],[7.22681,53.18165],[7.21679,53.20058],[7.19052,53.31866],[7.00198,53.32672],[6.91025,53.44221],[5.45168,54.20039],[8.02459,55.09613],[8.45719,55.06747],[8.55769,54.91837],[8.63979,54.91069],[8.76387,54.8948],[8.81178,54.90518],[8.92795,54.90452],[9.04629,54.87249],[9.14275,54.87421],[9.20571,54.85841],[9.24631,54.84726],[9.23445,54.83432],[9.2474,54.8112],[9.32771,54.80602],[9.33849,54.80233],[9.36496,54.81749],[9.38532,54.83968],[9.41213,54.84254],[9.43155,54.82586],[9.4659,54.83131],[9.58937,54.88785],[9.62734,54.88057],[9.61187,54.85548],[9.73563,54.8247],[9.89314,54.84171],[10.16755,54.73883],[10.31111,54.65968],[11.00303,54.63689],[11.90309,54.38543],[12.85844,54.82438],[13.93395,54.84044],[14.20811,54.12784],[14.22634,53.9291],[14.20647,53.91671],[14.18544,53.91258],[14.20823,53.90776],[14.21323,53.8664],[14.27249,53.74464],[14.26782,53.69866],[14.2836,53.67721],[14.27133,53.66613],[14.28477,53.65955],[14.2853,53.63392],[14.31904,53.61581],[14.30416,53.55499],[14.3273,53.50587],[14.35209,53.49506],[14.4215,53.27724],[14.44133,53.27427],[14.45125,53.26241],[14.40662,53.21098],[14.37853,53.20405],[14.36696,53.16444],[14.38679,53.13669],[14.35044,53.05829],[14.25954,53.00264],[14.14056,52.95786],[14.15873,52.87715],[14.12256,52.84311],[14.13806,52.82392],[14.22071,52.81175],[14.61073,52.59847],[14.6289,52.57136],[14.60081,52.53116],[14.63056,52.48993],[14.54423,52.42568],[14.55228,52.35264],[14.56378,52.33838],[14.58149,52.28007],[14.70139,52.25038],[14.71319,52.22144],[14.68344,52.19612],[14.70616,52.16927],[14.67683,52.13936],[14.6917,52.10283],[14.72971,52.09167],[14.76026,52.06624],[14.71339,52.00337],[14.70488,51.97679],[14.7139,51.95643],[14.71836,51.95606],[14.72163,51.95188],[14.7177,51.94048],[14.70601,51.92944],[14.6933,51.9044],[14.6588,51.88359],[14.59089,51.83302],[14.60493,51.80473],[14.64625,51.79472],[14.66386,51.73282],[14.69065,51.70842],[14.75392,51.67445],[14.75759,51.62318],[14.7727,51.61263],[14.71125,51.56209],[14.73047,51.54606],[14.72652,51.53902],[14.73219,51.52922],[14.94749,51.47155],[14.9652,51.44793],[14.96899,51.38367],[14.98008,51.33449],[15.04288,51.28387],[15.01242,51.21285],[15.0047,51.16874],[14.99311,51.16249],[14.99414,51.15813],[15.00083,51.14974],[14.99646,51.14365],[14.99079,51.14284],[14.99689,51.12205],[14.98229,51.11354],[14.97938,51.07742],[14.95529,51.04552],[14.92942,50.99744],[14.89252,50.94999],[14.89681,50.9422],[14.81664,50.88148],[14.82803,50.86966],[14.79139,50.81438],[14.70661,50.84096],[14.61993,50.86049],[14.63434,50.8883],[14.65259,50.90513],[14.64802,50.93241],[14.58024,50.91443],[14.56374,50.922],[14.59702,50.96148],[14.59908,50.98685],[14.58215,50.99306],[14.56432,51.01008],[14.53438,51.00374],[14.53321,51.01679],[14.49873,51.02242],[14.50809,51.0427],[14.49991,51.04692],[14.49154,51.04382],[14.49202,51.02286],[14.45827,51.03712],[14.41335,51.02086],[14.30098,51.05515],[14.25665,50.98935],[14.28776,50.97718],[14.32353,50.98556],[14.32793,50.97379],[14.30251,50.96606],[14.31422,50.95243],[14.39848,50.93866],[14.38691,50.89907],[14.30098,50.88448],[14.27123,50.89386],[14.24314,50.88761],[14.22331,50.86049],[14.02982,50.80662],[13.98864,50.8177],[13.89113,50.78533],[13.89444,50.74142],[13.82942,50.7251],[13.76316,50.73487],[13.70204,50.71771],[13.65977,50.73096],[13.52474,50.70394],[13.53748,50.67654],[13.5226,50.64721],[13.49742,50.63133],[13.46413,50.60102],[13.42189,50.61243],[13.37485,50.64931],[13.37805,50.627],[13.32264,50.60317],[13.32594,50.58009],[13.29454,50.57904],[13.25158,50.59268],[13.19043,50.50237],[13.13424,50.51709],[13.08301,50.50132],[13.0312,50.50944],[13.02038,50.4734],[13.02147,50.44763],[12.98433,50.42016],[12.94058,50.40944],[12.82465,50.45738],[12.73476,50.43237],[12.73044,50.42268],[12.70731,50.39948],[12.67261,50.41949],[12.51356,50.39694],[12.48747,50.37278],[12.49214,50.35228],[12.48256,50.34784],[12.46643,50.35527],[12.43722,50.33774],[12.43371,50.32506],[12.39924,50.32302],[12.40158,50.29521],[12.36594,50.28289],[12.35425,50.23993],[12.33263,50.24367],[12.32445,50.20442],[12.33847,50.19432],[12.32596,50.17146],[12.29232,50.17524],[12.28063,50.19544],[12.28755,50.22429],[12.23943,50.24594],[12.24791,50.25525],[12.26953,50.25189],[12.25119,50.27079],[12.20823,50.2729],[12.18013,50.32146],[12.10907,50.32041],[12.13716,50.27396],[12.09287,50.25032],[12.19335,50.19997],[12.21484,50.16399],[12.1917,50.13434],[12.2073,50.10315],[12.23709,50.10213],[12.27433,50.0771],[12.26111,50.06331],[12.30798,50.05719],[12.49908,49.97305],[12.47264,49.94222],[12.55197,49.92094],[12.48256,49.83575],[12.46603,49.78882],[12.40489,49.76321],[12.4462,49.70233],[12.52553,49.68415],[12.53544,49.61888],[12.56188,49.6146],[12.60155,49.52887],[12.64782,49.52565],[12.64121,49.47628],[12.669,49.42935],[12.71227,49.42363],[12.75854,49.3989],[12.78168,49.34618],[12.88414,49.33541],[12.88249,49.35479],[12.94859,49.34079],[13.03618,49.30417],[13.02957,49.27399],[13.05883,49.26259],[13.17665,49.16713],[13.17019,49.14339],[13.20405,49.12303],[13.23689,49.11412],[13.28242,49.1228],[13.39479,49.04812],[13.40802,48.98851],[13.50221,48.93752],[13.50552,48.97441],[13.58319,48.96899],[13.61624,48.9462],[13.67739,48.87886],[13.73854,48.88538],[13.76994,48.83537],[13.78977,48.83319],[13.8096,48.77877],[13.84023,48.76988],[13.82266,48.75544],[13.81863,48.73257],[13.79337,48.71375],[13.81791,48.69832],[13.81283,48.68426],[13.81901,48.6761],[13.82609,48.62345],[13.80038,48.59487],[13.80519,48.58026],[13.76921,48.55324],[13.7513,48.5624],[13.74816,48.53058],[13.72802,48.51208],[13.66113,48.53558],[13.65186,48.55092],[13.62508,48.55501],[13.59705,48.57013],[13.57535,48.55912],[13.51291,48.59023],[13.50131,48.58091],[13.50663,48.57506],[13.46967,48.55157],[13.45214,48.56472],[13.43695,48.55776],[13.45727,48.51092],[13.42527,48.45711],[13.43929,48.43386],[13.40709,48.37292],[13.30897,48.31575],[13.26039,48.29422],[13.18093,48.29577],[13.126,48.27867],[13.0851,48.27711],[13.02083,48.25689],[12.95306,48.20629],[12.87126,48.20318],[12.84475,48.16556],[12.836,48.1647],[12.8362,48.15876],[12.82673,48.15245],[12.80676,48.14979],[12.78595,48.12445],[12.7617,48.12796],[12.74973,48.10885],[12.76141,48.07373],[12.8549,48.01122],[12.87476,47.96195],[12.91683,47.95647],[12.9211,47.95135],[12.91985,47.94069],[12.92668,47.93879],[12.93419,47.94063],[12.93642,47.94436],[12.93886,47.94046],[12.94163,47.92927],[13.00588,47.84374],[12.98543,47.82896],[12.96311,47.79957],[12.93202,47.77302],[12.94371,47.76281],[12.9353,47.74788],[12.91711,47.74026],[12.90274,47.72513],[12.91333,47.7178],[12.92969,47.71094],[12.98578,47.7078],[13.01382,47.72116],[13.07692,47.68814],[13.09562,47.63304],[13.06407,47.60075],[13.06641,47.58577],[13.04537,47.58183],[13.05355,47.56291],[13.03252,47.53373],[13.04537,47.49426],[12.9998,47.46267],[12.98344,47.48716],[12.9624,47.47452],[12.85256,47.52741],[12.84672,47.54556],[12.80699,47.54477],[12.77427,47.58025],[12.82101,47.61493],[12.76492,47.64485],[12.77777,47.66689],[12.7357,47.6787],[12.6071,47.6741],[12.57438,47.63238],[12.53816,47.63553],[12.50076,47.62293],[12.44117,47.6741],[12.43883,47.6977],[12.37222,47.68433],[12.336,47.69534],[12.27991,47.68827],[12.26004,47.67725],[12.24017,47.69534],[12.26238,47.73544],[12.2542,47.7433],[12.22571,47.71776],[12.18303,47.70065],[12.16217,47.70105],[12.16769,47.68167],[12.18347,47.66663],[12.18507,47.65984],[12.19895,47.64085],[12.20801,47.61082],[12.20398,47.60667],[12.18568,47.6049],[12.17737,47.60121],[12.18145,47.61019],[12.17824,47.61506],[12.13734,47.60639],[12.05788,47.61742],[12.02282,47.61033],[12.0088,47.62451],[11.85572,47.60166],[11.84052,47.58354],[11.63934,47.59202],[11.60681,47.57881],[11.58811,47.55515],[11.58578,47.52281],[11.52618,47.50939],[11.4362,47.51413],[11.38128,47.47465],[11.4175,47.44621],[11.33804,47.44937],[11.29597,47.42566],[11.27844,47.39956],[11.22002,47.3964],[11.25157,47.43277],[11.20482,47.43198],[11.12536,47.41222],[11.11835,47.39719],[10.97111,47.39561],[10.97111,47.41617],[10.98513,47.42882],[10.92437,47.46991],[10.93839,47.48018],[10.90918,47.48571],[10.87061,47.4786],[10.86945,47.5015],[10.91268,47.51334],[10.88814,47.53701],[10.77596,47.51729],[10.7596,47.53228],[10.6965,47.54253],[10.68832,47.55752],[10.63456,47.5591],[10.60337,47.56755],[10.56912,47.53584],[10.48849,47.54057],[10.47329,47.58552],[10.43473,47.58394],[10.44992,47.5524],[10.4324,47.50111],[10.44291,47.48453],[10.46278,47.47901],[10.47446,47.43318],[10.4359,47.41183],[10.4324,47.38494],[10.39851,47.37623],[10.33424,47.30813],[10.23257,47.27088],[10.17531,47.27167],[10.17648,47.29149],[10.2147,47.31014],[10.19998,47.32832],[10.23757,47.37609],[10.22774,47.38904],[10.2127,47.38019],[10.17648,47.38889],[10.16362,47.36674],[10.11805,47.37228],[10.09819,47.35724],[10.06897,47.40709],[10.1052,47.4316],[10.09001,47.46005],[10.07131,47.45531],[10.03859,47.48927],[10.00003,47.48216],[9.96029,47.53899],[9.92407,47.53111],[9.87733,47.54688],[9.87499,47.52953],[9.8189,47.54688],[9.82591,47.58158],[9.80254,47.59419],[9.76748,47.5934],[9.72736,47.53457],[9.55125,47.53629],[9.25619,47.65939],[9.18203,47.65598],[9.17593,47.65399],[9.1755,47.65584],[9.1705,47.65513],[9.15181,47.66904],[9.13845,47.66389],[9.09891,47.67801],[9.02093,47.6868],[8.94093,47.65596],[8.89946,47.64769],[8.87625,47.65441],[8.87383,47.67045],[8.85065,47.68209],[8.86989,47.70504],[8.82002,47.71458],[8.80663,47.73821],[8.77309,47.72059],[8.76965,47.7075],[8.79966,47.70222],[8.79511,47.67462],[8.75856,47.68969],[8.72809,47.69282],[8.72617,47.69651]]]]}},{type:"Feature",properties:{iso1A2:"SL",iso1A3:"SLE",iso1N3:"694",wikidata:"Q1044",nameEn:"Sierra Leone",groups:["011","202","002"],callingCodes:["232"]},geometry:{type:"MultiPolygon",coordinates:[[[[-10.27575,8.48711],[-10.30084,8.30008],[-10.31635,8.28554],[-10.29839,8.21283],[-10.35227,8.15223],[-10.45023,8.15627],[-10.51554,8.1393],[-10.57523,8.04829],[-10.60492,8.04072],[-10.60422,7.7739],[-11.29417,7.21576],[-11.4027,6.97746],[-11.50429,6.92704],[-12.15048,6.15992],[-14.36218,8.64107],[-13.29911,9.04245],[-13.18586,9.0925],[-13.08953,9.0409],[-12.94095,9.26335],[-12.76788,9.3133],[-12.47254,9.86834],[-12.24262,9.92386],[-12.12634,9.87203],[-11.91023,9.93927],[-11.89624,9.99763],[-11.2118,10.00098],[-10.6534,9.29919],[-10.74484,9.07998],[-10.5783,9.06386],[-10.56197,8.81225],[-10.47707,8.67669],[-10.61422,8.5314],[-10.70565,8.29235],[-10.63934,8.35326],[-10.54891,8.31174],[-10.37257,8.48941],[-10.27575,8.48711]]]]}},{type:"Feature",properties:{iso1A2:"DM",iso1A3:"DMA",iso1N3:"212",wikidata:"Q784",nameEn:"Dominica",groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 767"]},geometry:{type:"MultiPolygon",coordinates:[[[[-61.51867,14.96709],[-61.81728,15.58058],[-61.44899,15.79571],[-60.95725,15.70997],[-60.69955,15.22234],[-61.51867,14.96709]]]]}},{type:"Feature",properties:{iso1A2:"SM",iso1A3:"SMR",iso1N3:"674",wikidata:"Q238",nameEn:"San Marino",groups:["039","150"],callingCodes:["378"]},geometry:{type:"MultiPolygon",coordinates:[[[[12.45648,43.89369],[12.44184,43.90498],[12.41641,43.89991],[12.40935,43.9024],[12.41233,43.90956],[12.40733,43.92379],[12.41551,43.92984],[12.41165,43.93769],[12.40506,43.94325],[12.40415,43.95485],[12.41414,43.95273],[12.42005,43.9578],[12.43662,43.95698],[12.44684,43.96597],[12.46205,43.97463],[12.47853,43.98052],[12.49406,43.98492],[12.50678,43.99113],[12.51463,43.99122],[12.5154,43.98508],[12.51064,43.98165],[12.51109,43.97201],[12.50622,43.97131],[12.50875,43.96198],[12.50655,43.95796],[12.51427,43.94897],[12.51553,43.94096],[12.50496,43.93017],[12.50269,43.92363],[12.49724,43.92248],[12.49247,43.91774],[12.49429,43.90973],[12.48771,43.89706],[12.45648,43.89369]]]]}},{type:"Feature",properties:{iso1A2:"EC",iso1A3:"ECU",iso1N3:"218",wikidata:"Q736",nameEn:"Ecuador",groups:["005","419","019"],callingCodes:["593"]},geometry:{type:"MultiPolygon",coordinates:[[[[-75.25764,-0.11943],[-75.40192,-0.17196],[-75.61997,-0.10012],[-75.60169,-0.18708],[-75.53615,-0.19213],[-75.22862,-0.60048],[-75.22862,-0.95588],[-75.3872,-0.9374],[-75.57429,-1.55961],[-76.05203,-2.12179],[-76.6324,-2.58397],[-77.94147,-3.05454],[-78.19369,-3.36431],[-78.14324,-3.47653],[-78.22642,-3.51113],[-78.24589,-3.39907],[-78.34362,-3.38633],[-78.68394,-4.60754],[-78.85149,-4.66795],[-79.01659,-5.01481],[-79.1162,-4.97774],[-79.26248,-4.95167],[-79.59402,-4.46848],[-79.79722,-4.47558],[-80.13945,-4.29786],[-80.39256,-4.48269],[-80.46386,-4.41516],[-80.32114,-4.21323],[-80.45023,-4.20938],[-80.4822,-4.05477],[-80.46386,-4.01342],[-80.13232,-3.90317],[-80.19926,-3.68894],[-80.18741,-3.63994],[-80.19848,-3.59249],[-80.21642,-3.5888],[-80.20535,-3.51667],[-80.22629,-3.501],[-80.23651,-3.48652],[-80.24586,-3.48677],[-80.24475,-3.47846],[-80.24123,-3.46124],[-80.20647,-3.431],[-80.30602,-3.39149],[-92.46744,-2.52874],[-93.12365,2.64343],[-78.87137,1.47457],[-78.42749,1.15389],[-77.85677,0.80197],[-77.7148,0.85003],[-77.68613,0.83029],[-77.66416,0.81604],[-77.67815,0.73863],[-77.49984,0.64476],[-77.52001,0.40782],[-76.89177,0.24736],[-76.4094,0.24015],[-76.41215,0.38228],[-76.23441,0.42294],[-75.82927,0.09578],[-75.25764,-0.11943]]]]}},{type:"Feature",properties:{iso1A2:"SN",iso1A3:"SEN",iso1N3:"686",wikidata:"Q1041",nameEn:"Senegal",groups:["011","202","002"],callingCodes:["221"]},geometry:{type:"MultiPolygon",coordinates:[[[[-14.32144,16.61495],[-13.80075,16.13961],[-13.43135,16.09022],[-13.11029,15.52116],[-12.23936,14.76324],[-11.93043,13.84505],[-12.06897,13.71049],[-11.83345,13.33333],[-11.63025,13.39174],[-11.39935,12.97808],[-11.37536,12.40788],[-11.46267,12.44559],[-11.91331,12.42008],[-12.35415,12.32758],[-12.87336,12.51892],[-13.06603,12.49342],[-13.05296,12.64003],[-13.70523,12.68013],[-15.17582,12.6847],[-15.67302,12.42974],[-16.20591,12.46157],[-16.38191,12.36449],[-16.70562,12.34803],[-17.4623,11.92379],[-17.43966,13.04579],[-16.74676,13.06025],[-16.69343,13.16791],[-15.80355,13.16729],[-15.80478,13.34832],[-15.26908,13.37768],[-15.14917,13.57989],[-14.36795,13.23033],[-13.79409,13.34472],[-13.8955,13.59126],[-14.34721,13.46578],[-14.93719,13.80173],[-15.36504,13.79313],[-15.47902,13.58758],[-17.43598,13.59273],[-18.35085,14.63444],[-17.15288,16.07139],[-16.50854,16.09032],[-16.48967,16.0496],[-16.44814,16.09753],[-16.4429,16.20605],[-16.27016,16.51565],[-15.6509,16.50315],[-15.00557,16.64997],[-14.32144,16.61495]]]]}},{type:"Feature",properties:{iso1A2:"ER",iso1A3:"ERI",iso1N3:"232",wikidata:"Q986",nameEn:"Eritrea",groups:["014","202","002"],callingCodes:["291"]},geometry:{type:"MultiPolygon",coordinates:[[[[41.37609,16.19728],[41.29956,15.565],[42.63806,13.58268],[43.29075,12.79154],[42.86195,12.58747],[42.7996,12.42629],[42.6957,12.36201],[42.46941,12.52661],[42.4037,12.46478],[42.2798,12.6355],[42.21469,12.75832],[42.05841,12.80912],[41.62864,13.38626],[41.25097,13.60787],[40.9167,14.11152],[40.25686,14.41445],[40.21128,14.39342],[40.14649,14.53969],[40.07236,14.54264],[39.9443,14.41024],[39.76632,14.54264],[39.58182,14.60987],[39.50585,14.55735],[39.52756,14.49011],[39.37685,14.54402],[39.2519,14.40393],[39.2302,14.44598],[39.26927,14.48801],[39.23888,14.56365],[39.19547,14.56996],[39.14772,14.61827],[39.16074,14.65187],[39.02834,14.63717],[38.98058,14.54895],[38.78306,14.4754],[38.45748,14.41445],[38.3533,14.51323],[38.25562,14.67287],[38.0364,14.72745],[37.91287,14.89447],[37.528,14.18413],[37.47319,14.2149],[37.3106,14.44657],[37.13206,14.40746],[37.09486,14.27155],[37.01622,14.2561],[36.85787,14.32201],[36.63364,14.31172],[36.55659,14.28237],[36.56536,14.26177],[36.54376,14.25597],[36.44337,15.14963],[36.54276,15.23478],[36.69761,15.75323],[36.76371,15.80831],[36.92193,16.23451],[36.99777,17.07172],[37.42694,17.04041],[37.50967,17.32199],[38.13362,17.53906],[38.37133,17.66269],[38.45916,17.87167],[38.57727,17.98125],[39.63762,18.37348],[41.37609,16.19728]]]]}},{type:"Feature",properties:{iso1A2:"SO",iso1A3:"SOM",iso1N3:"706",wikidata:"Q1045",nameEn:"Somalia",groups:["014","202","002"],callingCodes:["252"]},geometry:{type:"MultiPolygon",coordinates:[[[[48.95249,11.56816],[51.12877,12.56479],[52.253,11.68582],[49.16337,2.78611],[41.75542,-1.85308],[41.56362,-1.66375],[41.56,-1.59812],[41.00099,-0.83068],[40.98767,2.82959],[41.31368,3.14314],[41.89488,3.97375],[42.07619,4.17667],[42.55853,4.20518],[42.84526,4.28357],[42.97746,4.44032],[43.04177,4.57923],[43.40263,4.79289],[44.02436,4.9451],[44.98104,4.91821],[47.97917,8.00124],[47.92477,8.00111],[46.99339,7.9989],[44.19222,8.93028],[43.32613,9.59205],[43.23518,9.84605],[43.0937,9.90579],[42.87643,10.18441],[42.69452,10.62672],[42.95776,10.98533],[43.42425,11.70983],[48.95249,11.56816]]]]}},{type:"Feature",properties:{iso1A2:"FI",iso1A3:"FIN",iso1N3:"246",wikidata:"Q33",nameEn:"Finland",aliases:["SF"],groups:["EU","154","150"],callingCodes:["358"]},geometry:{type:"MultiPolygon",coordinates:[[[[29.12697,69.69193],[29.31664,69.47994],[28.8629,69.22395],[28.81248,69.11997],[28.91738,69.04774],[28.45957,68.91417],[28.78224,68.86696],[28.43941,68.53366],[28.62982,68.19816],[29.34179,68.06655],[29.66955,67.79872],[30.02041,67.67523],[29.91155,67.51507],[28.9839,66.94139],[29.91155,66.13863],[30.16363,65.66935],[29.97205,65.70256],[29.74013,65.64025],[29.84096,65.56945],[29.68972,65.31803],[29.61914,65.23791],[29.8813,65.22101],[29.84096,65.1109],[29.61914,65.05993],[29.68972,64.80789],[30.05271,64.79072],[30.12329,64.64862],[30.01238,64.57513],[30.06279,64.35782],[30.4762,64.25728],[30.55687,64.09036],[30.25437,63.83364],[29.98213,63.75795],[30.49637,63.46666],[31.23244,63.22239],[31.29294,63.09035],[31.58535,62.91642],[31.38369,62.66284],[31.10136,62.43042],[29.01829,61.17448],[28.82816,61.1233],[28.47974,60.93365],[27.77352,60.52722],[27.71177,60.3893],[27.44953,60.22766],[26.32936,60.00121],[20.5104,59.15546],[21.35468,59.67511],[21.02509,60.12142],[21.08159,60.20167],[21.15143,60.54555],[20.96741,60.71528],[19.23413,60.61414],[20.15877,63.06556],[24.14112,65.39731],[24.15107,65.81427],[24.14798,65.83466],[24.15791,65.85385],[23.90497,66.15802],[23.71339,66.21299],[23.64982,66.30603],[23.67591,66.3862],[23.63776,66.43568],[23.85959,66.56434],[23.89488,66.772],[23.98059,66.79585],[23.98563,66.84149],[23.56214,67.17038],[23.58735,67.20752],[23.54701,67.25435],[23.75372,67.29914],[23.75372,67.43688],[23.39577,67.46974],[23.54701,67.59306],[23.45627,67.85297],[23.65793,67.9497],[23.40081,68.05545],[23.26469,68.15134],[23.15377,68.14759],[23.10336,68.26551],[22.73028,68.40881],[22.00429,68.50692],[21.03001,68.88969],[20.90649,68.89696],[20.85104,68.93142],[20.91658,68.96764],[20.78802,69.03087],[20.55258,69.06069],[20.72171,69.11874],[21.05775,69.0356],[21.11099,69.10291],[20.98641,69.18809],[21.00732,69.22755],[21.27827,69.31281],[21.63833,69.27485],[22.27276,68.89514],[22.38367,68.71561],[22.53321,68.74393],[23.13064,68.64684],[23.68017,68.70276],[23.781,68.84514],[24.02299,68.81601],[24.18432,68.73936],[24.74898,68.65143],[24.90023,68.55579],[24.93048,68.61102],[25.10189,68.63307],[25.12206,68.78684],[25.42455,68.90328],[25.61613,68.89602],[25.75729,68.99383],[25.69679,69.27039],[25.96904,69.68397],[26.40261,69.91377],[26.64461,69.96565],[27.05802,69.92069],[27.57226,70.06215],[27.95542,70.0965],[27.97558,69.99671],[28.32849,69.88605],[28.36883,69.81658],[29.12697,69.69193]]]]}},{type:"Feature",properties:{iso1A2:"SR",iso1A3:"SUR",iso1N3:"740",wikidata:"Q730",nameEn:"Suriname",groups:["005","419","019"],driveSide:"left",callingCodes:["597"]},geometry:{type:"MultiPolygon",coordinates:[[[[-54.26916,5.26909],[-54.4717,4.91964],[-54.38444,4.13222],[-54.19367,3.84387],[-54.05128,3.63557],[-53.98914,3.627],[-53.9849,3.58697],[-54.28534,2.67798],[-54.42864,2.42442],[-54.6084,2.32856],[-55.01919,2.564],[-55.71493,2.40342],[-55.96292,2.53188],[-56.13054,2.27723],[-55.92159,2.05236],[-55.89863,1.89861],[-55.99278,1.83137],[-56.47045,1.95135],[-56.55439,2.02003],[-56.70519,2.02964],[-57.35891,3.32121],[-58.0307,3.95513],[-57.8699,4.89394],[-57.37442,5.0208],[-57.22536,5.15605],[-57.31629,5.33714],[-56.84822,6.73257],[-53.7094,6.2264],[-54.01074,5.68785],[-54.01877,5.52789],[-54.26916,5.26909]]]]}},{type:"Feature",properties:{iso1A2:"FO",iso1A3:"FRO",iso1N3:"234",wikidata:"Q4628",nameEn:"Faroe Islands",country:"DK",groups:["154","150"],callingCodes:["298"]},geometry:{type:"MultiPolygon",coordinates:[[[[-8.51774,62.35338],[-5.70102,62.77194],[-6.51083,60.95272],[-8.51774,62.35338]]]]}},{type:"Feature",properties:{iso1A2:"SS",iso1A3:"SSD",iso1N3:"728",wikidata:"Q958",nameEn:"South Sudan",groups:["014","202","002"],callingCodes:["211"]},geometry:{type:"MultiPolygon",coordinates:[[[[34.10229,9.50238],[34.14304,9.04654],[34.14453,8.60204],[34.01346,8.50041],[33.89579,8.4842],[33.87195,8.41938],[33.71407,8.3678],[33.66938,8.44442],[33.54575,8.47094],[33.3119,8.45474],[33.19721,8.40317],[33.1853,8.29264],[33.18083,8.13047],[33.08401,8.05822],[33.0006,7.90333],[33.04944,7.78989],[33.24637,7.77939],[33.32531,7.71297],[33.44745,7.7543],[33.71407,7.65983],[33.87642,7.5491],[34.02984,7.36449],[34.03878,7.27437],[34.01495,7.25664],[34.19369,7.12807],[34.19369,7.04382],[34.35753,6.91963],[34.47669,6.91076],[34.53925,6.82794],[34.53776,6.74808],[34.65096,6.72589],[34.77459,6.5957],[34.87736,6.60161],[35.01738,6.46991],[34.96227,6.26415],[35.00546,5.89387],[35.12611,5.68937],[35.13058,5.62118],[35.31188,5.50106],[35.29938,5.34042],[35.50792,5.42431],[35.8576,5.33413],[35.81968,5.10757],[35.82118,4.77382],[35.9419,4.61933],[35.51424,4.61643],[35.42366,4.76969],[35.47843,4.91872],[35.30992,4.90402],[35.34151,5.02364],[34.47601,4.72162],[33.9873,4.23316],[33.51264,3.75068],[33.18356,3.77812],[33.02852,3.89296],[32.89746,3.81339],[32.72021,3.77327],[32.41337,3.748],[32.20782,3.6053],[32.19888,3.50867],[32.08866,3.53543],[32.08491,3.56287],[32.05187,3.589],[31.95907,3.57408],[31.96205,3.6499],[31.86821,3.78664],[31.81459,3.82083],[31.72075,3.74354],[31.50776,3.63652],[31.50478,3.67814],[31.29476,3.8015],[31.16666,3.79853],[30.97601,3.693],[30.85153,3.48867],[30.85997,3.5743],[30.80713,3.60506],[30.78512,3.67097],[30.56277,3.62703],[30.57378,3.74567],[30.55396,3.84451],[30.47691,3.83353],[30.27658,3.95653],[30.22374,3.93896],[30.1621,4.10586],[30.06964,4.13221],[29.79666,4.37809],[29.82087,4.56246],[29.49726,4.7007],[29.43341,4.50101],[29.22207,4.34297],[29.03054,4.48784],[28.8126,4.48784],[28.6651,4.42638],[28.20719,4.35614],[27.79551,4.59976],[27.76469,4.79284],[27.65462,4.89375],[27.56656,4.89375],[27.44012,5.07349],[27.26886,5.25876],[27.23017,5.37167],[27.28621,5.56382],[27.22705,5.62889],[27.22705,5.71254],[26.51721,6.09655],[26.58259,6.1987],[26.32729,6.36272],[26.38022,6.63493],[25.90076,7.09549],[25.37461,7.33024],[25.35281,7.42595],[25.20337,7.50312],[25.20649,7.61115],[25.29214,7.66675],[25.25319,7.8487],[24.98855,7.96588],[24.85156,8.16933],[24.35965,8.26177],[24.13238,8.36959],[24.25691,8.69288],[23.51905,8.71749],[23.59065,8.99743],[23.44744,8.99128],[23.4848,9.16959],[23.56263,9.19418],[23.64358,9.28637],[23.64981,9.44303],[23.62179,9.53823],[23.69155,9.67566],[24.09319,9.66572],[24.12744,9.73784],[24.49389,9.79962],[24.84653,9.80643],[24.97739,9.9081],[25.05688,10.06776],[25.0918,10.33718],[25.78141,10.42599],[25.93163,10.38159],[25.93241,10.17941],[26.21338,9.91545],[26.35815,9.57946],[26.70685,9.48735],[27.14427,9.62858],[27.90704,9.61323],[28.99983,9.67155],[29.06988,9.74826],[29.53844,9.75133],[29.54,10.07949],[29.94629,10.29245],[30.00389,10.28633],[30.53005,9.95992],[30.82893,9.71451],[30.84605,9.7498],[31.28504,9.75287],[31.77539,10.28939],[31.99177,10.65065],[32.46967,11.04662],[32.39358,11.18207],[32.39578,11.70208],[32.10079,11.95203],[32.73921,11.95203],[32.73921,12.22757],[33.25876,12.22111],[33.13988,11.43248],[33.26977,10.83632],[33.24645,10.77913],[33.52294,10.64382],[33.66604,10.44254],[33.80913,10.32994],[33.90159,10.17179],[33.96984,10.15446],[33.99185,9.99623],[33.96323,9.80972],[33.9082,9.762],[33.87958,9.49937],[34.10229,9.50238]]]]}},{type:"Feature",properties:{iso1A2:"GB",iso1A3:"GBR",iso1N3:"826",wikidata:"Q145",nameEn:"United Kingdom",aliases:["UK","Britain","Great Britain"],groups:["EU","154","150"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["44"]},geometry:{type:"MultiPolygon",coordinates:[[[[-5.83481,53.87749],[-6.26218,54.09785],[-6.29003,54.11278],[-6.32694,54.09337],[-6.36279,54.11248],[-6.36605,54.07234],[-6.47849,54.06947],[-6.62842,54.03503],[-6.66264,54.0666],[-6.6382,54.17071],[-6.70175,54.20218],[-6.74575,54.18788],[-6.81583,54.22791],[-6.85179,54.29176],[-6.87775,54.34682],[-7.02034,54.4212],[-7.19145,54.31296],[-7.14908,54.22732],[-7.25012,54.20063],[-7.26316,54.13863],[-7.29493,54.12013],[-7.29687,54.1354],[-7.28017,54.16714],[-7.29157,54.17191],[-7.34005,54.14698],[-7.30553,54.11869],[-7.32834,54.11475],[-7.44567,54.1539],[-7.4799,54.12239],[-7.55812,54.12239],[-7.69501,54.20731],[-7.81397,54.20159],[-7.8596,54.21779],[-7.87101,54.29299],[-8.04555,54.36292],[-8.179,54.46763],[-8.04538,54.48941],[-7.99812,54.54427],[-7.8596,54.53671],[-7.70315,54.62077],[-7.93293,54.66603],[-7.83352,54.73854],[-7.75041,54.7103],[-7.64449,54.75265],[-7.54671,54.74606],[-7.54508,54.79401],[-7.47626,54.83084],[-7.4473,54.87003],[-7.44404,54.9403],[-7.40004,54.94498],[-7.4033,55.00391],[-7.34464,55.04688],[-7.2471,55.06933],[-6.9734,55.19878],[-6.71944,55.27952],[-6.79943,55.54107],[-7.93366,55.84142],[-14.78497,57.60709],[-0.3751,61.32236],[2.56575,51.85301],[2.18458,51.52087],[1.17405,50.74239],[-7.74976,48.64773],[-5.79914,52.03902],[-5.37267,53.63269],[-3.64906,54.12723],[-4.1819,54.57861],[-5.83481,53.87749]]],[[[33.70575,34.97947],[33.70639,34.99303],[33.71514,35.00294],[33.69731,35.01754],[33.69938,35.03123],[33.67678,35.03866],[33.67742,35.05963],[33.68474,35.06602],[33.69095,35.06237],[33.70861,35.07644],[33.7161,35.07279],[33.70209,35.04882],[33.71482,35.03722],[33.73824,35.05321],[33.76106,35.04253],[33.78581,35.05104],[33.82067,35.07826],[33.84168,35.06823],[33.8541,35.07201],[33.87479,35.08881],[33.87097,35.09389],[33.87622,35.10457],[33.87224,35.12293],[33.88561,35.12449],[33.88943,35.12007],[33.88737,35.11408],[33.89853,35.11377],[33.91789,35.08688],[33.91299,35.07579],[33.90247,35.07686],[33.89485,35.06873],[33.88367,35.07877],[33.85261,35.0574],[33.8355,35.05777],[33.82051,35.0667],[33.8012,35.04786],[33.81524,35.04192],[33.83055,35.02865],[33.82875,35.01685],[33.84045,35.00616],[33.85216,35.00579],[33.85891,35.001],[33.85621,34.98956],[33.83505,34.98108],[33.84811,34.97075],[33.86432,34.97592],[33.90075,34.96623],[33.98684,34.76642],[33.83531,34.73974],[33.70575,34.97947]],[[33.77312,34.9976],[33.75994,35.00113],[33.75682,34.99916],[33.76605,34.99543],[33.76738,34.99188],[33.7778,34.98981],[33.77843,34.988],[33.78149,34.98854],[33.78318,34.98699],[33.78571,34.98951],[33.78917,34.98854],[33.79191,34.98914],[33.78516,34.99582],[33.77553,34.99518],[33.77312,34.9976]],[[33.74144,35.01053],[33.7492,35.01319],[33.74983,35.02274],[33.74265,35.02329],[33.73781,35.02181],[33.7343,35.01178],[33.74144,35.01053]]],[[[32.86014,34.70585],[32.86167,34.68734],[32.9068,34.66102],[32.91398,34.67343],[32.93043,34.67091],[32.92807,34.66736],[32.93449,34.66241],[32.93693,34.67027],[32.94379,34.67111],[32.94683,34.67907],[32.95539,34.68471],[32.99135,34.68061],[32.98668,34.67268],[32.99014,34.65518],[32.97736,34.65277],[32.97079,34.66112],[32.95325,34.66462],[32.94796,34.6587],[32.94976,34.65204],[32.95471,34.64528],[32.95323,34.64075],[32.95891,34.62919],[32.96718,34.63446],[32.96968,34.64046],[33.0138,34.64424],[33.26744,34.49942],[32.74412,34.43926],[32.75515,34.64985],[32.76136,34.68318],[32.79433,34.67883],[32.82717,34.70622],[32.86014,34.70585]]]]}},{type:"Feature",properties:{iso1A2:"ST",iso1A3:"STP",iso1N3:"678",wikidata:"Q1039",nameEn:"São Tomé and Principe",groups:["017","202","002"],callingCodes:["239"]},geometry:{type:"MultiPolygon",coordinates:[[[[5.9107,-0.09539],[7.23334,2.23756],[8.0168,1.79377],[6.69416,-0.53945],[5.9107,-0.09539]]]]}},{type:"Feature",properties:{iso1A2:"GG",iso1A3:"GGY",iso1N3:"831",wikidata:"Q25230",nameEn:"Guernsey",country:"GB",groups:["830","154","150"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["44 01481"]},geometry:{type:"MultiPolygon",coordinates:[[[[-2.65349,49.15373],[-3.28154,49.57329],[-2.02963,49.91866],[-2.09454,49.46288],[-2.36485,49.48223],[-2.65349,49.15373]]]]}},{type:"Feature",properties:{iso1A2:"SV",iso1A3:"SLV",iso1N3:"222",wikidata:"Q792",nameEn:"El Salvador",groups:["013","003","419","019"],callingCodes:["503"]},geometry:{type:"MultiPolygon",coordinates:[[[[-89.34776,14.43013],[-89.04187,14.33644],[-88.94608,14.20207],[-88.85785,14.17763],[-88.815,14.11652],[-88.73182,14.10919],[-88.70661,14.04317],[-88.49738,13.97224],[-88.48982,13.86458],[-88.25791,13.91108],[-88.23018,13.99915],[-88.07641,13.98447],[-88.00331,13.86948],[-87.7966,13.91353],[-87.68821,13.80829],[-87.73106,13.75443],[-87.78148,13.52906],[-87.71657,13.50577],[-87.72115,13.46083],[-87.73841,13.44169],[-87.77354,13.45767],[-87.83467,13.44655],[-87.84675,13.41078],[-87.80177,13.35689],[-87.73714,13.32715],[-87.69751,13.25228],[-87.55124,13.12523],[-87.7346,13.13228],[-88.11443,12.63306],[-90.55276,12.8866],[-90.11344,13.73679],[-90.10505,13.85104],[-89.88937,14.0396],[-89.81807,14.07073],[-89.76103,14.02923],[-89.73251,14.04133],[-89.75569,14.07073],[-89.70756,14.1537],[-89.61844,14.21937],[-89.52397,14.22628],[-89.50614,14.26084],[-89.58814,14.33165],[-89.57441,14.41637],[-89.39028,14.44561],[-89.34776,14.43013]]]]}},{type:"Feature",properties:{iso1A2:"GM",iso1A3:"GMB",iso1N3:"270",wikidata:"Q1005",nameEn:"The Gambia",groups:["011","202","002"],callingCodes:["220"]},geometry:{type:"MultiPolygon",coordinates:[[[[-15.14917,13.57989],[-15.26908,13.37768],[-15.80478,13.34832],[-15.80355,13.16729],[-16.69343,13.16791],[-16.74676,13.06025],[-17.43966,13.04579],[-17.43598,13.59273],[-15.47902,13.58758],[-15.36504,13.79313],[-14.93719,13.80173],[-14.34721,13.46578],[-13.8955,13.59126],[-13.79409,13.34472],[-14.36795,13.23033],[-15.14917,13.57989]]]]}},{type:"Feature",properties:{iso1A2:"SX",iso1A3:"SXM",iso1N3:"534",wikidata:"Q26273",nameEn:"Sint Maarten",country:"NL",groups:["029","003","419","019"],callingCodes:["1 721"]},geometry:{type:"MultiPolygon",coordinates:[[[[-63.29212,17.90532],[-63.33064,17.9615],[-63.13584,18.0541],[-63.11096,18.05368],[-63.09686,18.04608],[-63.07759,18.04943],[-63.0579,18.06614],[-63.04039,18.05619],[-63.02323,18.05757],[-62.93924,18.02904],[-63.07669,17.79659],[-63.29212,17.90532]]]]}},{type:"Feature",properties:{iso1A2:"GR",iso1A3:"GRC",iso1N3:"300",wikidata:"Q41",nameEn:"Greece",aliases:["EL"],groups:["EU","039","150"],callingCodes:["30"]},geometry:{type:"MultiPolygon",coordinates:[[[[26.03489,40.73051],[25.94795,40.72797],[26.04292,40.3958],[25.61285,40.17161],[25.94257,39.39358],[26.43357,39.43096],[26.70773,39.0312],[26.61814,38.81372],[26.21136,38.65436],[26.32173,38.48731],[26.24183,38.44695],[26.21136,38.17558],[27.05537,37.9131],[27.16428,37.72343],[26.99377,37.69034],[26.95583,37.64989],[27.14757,37.32],[27.20312,36.94571],[27.45627,36.9008],[27.24613,36.71622],[27.46117,36.53789],[27.89482,36.69898],[27.95037,36.46155],[28.23708,36.56812],[29.30783,36.01033],[29.48192,36.18377],[29.61002,36.1731],[29.61805,36.14179],[29.69611,36.10365],[29.73302,35.92555],[22.5213,33.45682],[19.20409,39.7532],[19.0384,40.35325],[19.95905,39.82857],[19.97622,39.78684],[19.92466,39.69533],[19.98042,39.6504],[20.00957,39.69227],[20.05189,39.69112],[20.12956,39.65805],[20.15988,39.652],[20.22376,39.64532],[20.22707,39.67459],[20.27412,39.69884],[20.31961,39.72799],[20.29152,39.80421],[20.30804,39.81563],[20.38572,39.78516],[20.41475,39.81437],[20.41546,39.82832],[20.31135,39.99438],[20.37911,39.99058],[20.42373,40.06777],[20.48487,40.06271],[20.51297,40.08168],[20.55593,40.06524],[20.61081,40.07866],[20.62566,40.0897],[20.67162,40.09433],[20.71789,40.27739],[20.78234,40.35803],[20.7906,40.42726],[20.83688,40.47882],[20.94925,40.46625],[20.96908,40.51526],[21.03932,40.56299],[21.05833,40.66586],[20.98134,40.76046],[20.95752,40.76982],[20.98396,40.79109],[20.97887,40.85475],[21.15262,40.85546],[21.21105,40.8855],[21.25779,40.86165],[21.35595,40.87578],[21.41555,40.9173],[21.53007,40.90759],[21.57448,40.86076],[21.69601,40.9429],[21.7556,40.92525],[21.91102,41.04786],[21.90869,41.09191],[22.06527,41.15617],[22.1424,41.12449],[22.17629,41.15969],[22.26744,41.16409],[22.42285,41.11921],[22.5549,41.13065],[22.58295,41.11568],[22.62852,41.14385],[22.65306,41.18168],[22.71266,41.13945],[22.74538,41.16321],[22.76408,41.32225],[22.81199,41.3398],[22.93334,41.34104],[23.1833,41.31755],[23.21953,41.33773],[23.22771,41.37106],[23.31301,41.40525],[23.33639,41.36317],[23.40416,41.39999],[23.52453,41.40262],[23.63203,41.37632],[23.67644,41.41139],[23.76525,41.40175],[23.80148,41.43943],[23.89613,41.45257],[23.91483,41.47971],[23.96975,41.44118],[24.06908,41.46132],[24.06323,41.53222],[24.10063,41.54796],[24.18126,41.51735],[24.27124,41.57682],[24.30513,41.51297],[24.52599,41.56808],[24.61129,41.42278],[24.71529,41.41928],[24.8041,41.34913],[24.82514,41.4035],[24.86136,41.39298],[24.90928,41.40876],[24.942,41.38685],[25.11611,41.34212],[25.28322,41.23411],[25.48187,41.28506],[25.52394,41.2798],[25.55082,41.31667],[25.61042,41.30614],[25.66183,41.31316],[25.70507,41.29209],[25.8266,41.34563],[25.87919,41.30526],[26.12926,41.35878],[26.16548,41.42278],[26.20288,41.43943],[26.14796,41.47533],[26.176,41.50072],[26.17951,41.55409],[26.14328,41.55496],[26.15146,41.60828],[26.07083,41.64584],[26.06148,41.70345],[26.16841,41.74858],[26.21325,41.73223],[26.22888,41.74139],[26.2654,41.71544],[26.30255,41.70925],[26.35957,41.71149],[26.47958,41.67037],[26.5209,41.62592],[26.59196,41.60491],[26.59742,41.48058],[26.61767,41.42281],[26.62997,41.34613],[26.5837,41.32131],[26.5209,41.33993],[26.39861,41.25053],[26.32259,41.24929],[26.31928,41.07386],[26.3606,41.02027],[26.33297,40.98388],[26.35894,40.94292],[26.32259,40.94042],[26.28623,40.93005],[26.29441,40.89119],[26.26169,40.9168],[26.20856,40.86048],[26.21351,40.83298],[26.15685,40.80709],[26.12854,40.77339],[26.12495,40.74283],[26.08638,40.73214],[26.0754,40.72772],[26.03489,40.73051]]]]}},{type:"Feature",properties:{iso1A2:"SY",iso1A3:"SYR",iso1N3:"760",wikidata:"Q858",nameEn:"Syria",groups:["145","142"],callingCodes:["963"]},geometry:{type:"MultiPolygon",coordinates:[[[[42.23683,37.2863],[42.26039,37.27017],[42.2824,37.2798],[42.34735,37.22548],[42.32313,37.17814],[42.35724,37.10998],[42.36697,37.0627],[41.81736,36.58782],[41.40058,36.52502],[41.28864,36.35368],[41.2564,36.06012],[41.37027,35.84095],[41.38184,35.62502],[41.26569,35.42708],[41.21654,35.1508],[41.2345,34.80049],[41.12388,34.65742],[40.97676,34.39788],[40.64314,34.31604],[38.79171,33.37328],[36.83946,32.31293],[36.40959,32.37908],[36.23948,32.50108],[36.20875,32.49529],[36.20379,32.52751],[36.08074,32.51463],[36.02239,32.65911],[35.96633,32.66237],[35.93307,32.71966],[35.88405,32.71321],[35.75983,32.74803],[35.78745,32.77938],[35.83758,32.82817],[35.84021,32.8725],[35.87012,32.91976],[35.89298,32.9456],[35.87188,32.98028],[35.84802,33.1031],[35.81911,33.11077],[35.81911,33.1336],[35.84285,33.16673],[35.83846,33.19397],[35.81647,33.2028],[35.81295,33.24841],[35.77513,33.27342],[35.813,33.3172],[35.77477,33.33609],[35.81324,33.36354],[35.82577,33.40479],[35.88668,33.43183],[35.94816,33.47886],[35.94465,33.52774],[36.05723,33.57904],[35.9341,33.6596],[36.06778,33.82927],[36.14517,33.85118],[36.3967,33.83365],[36.38263,33.86579],[36.28589,33.91981],[36.41078,34.05253],[36.50576,34.05982],[36.5128,34.09916],[36.62537,34.20251],[36.59195,34.2316],[36.58667,34.27667],[36.60778,34.31009],[36.56556,34.31881],[36.53039,34.3798],[36.55853,34.41609],[36.46179,34.46541],[36.4442,34.50165],[36.34745,34.5002],[36.3369,34.52629],[36.39846,34.55672],[36.41429,34.61175],[36.45299,34.59438],[36.46003,34.6378],[36.42941,34.62505],[36.35384,34.65447],[36.35135,34.68516],[36.32399,34.69334],[36.29165,34.62991],[35.98718,34.64977],[35.97386,34.63322],[35.48515,34.70851],[35.51152,36.10954],[35.931,35.92109],[35.98499,35.94107],[36.00514,35.94113],[36.01844,35.92403],[35.99829,35.88242],[36.11827,35.85923],[36.13919,35.83692],[36.14029,35.81015],[36.1623,35.80925],[36.17441,35.92076],[36.19973,35.95195],[36.25366,35.96264],[36.27678,35.94839],[36.29769,35.96086],[36.28338,36.00273],[36.30099,36.00985],[36.33956,35.98687],[36.37474,36.01163],[36.39206,36.22088],[36.4617,36.20461],[36.50463,36.2419],[36.6125,36.22592],[36.68672,36.23677],[36.65653,36.33861],[36.6081,36.33772],[36.54206,36.49539],[36.58829,36.58295],[36.57398,36.65186],[36.62681,36.71189],[36.61581,36.74629],[36.66727,36.82901],[36.99557,36.75997],[36.99886,36.74012],[37.04399,36.73483],[37.04619,36.71101],[37.01647,36.69512],[37.02088,36.66422],[37.08279,36.63495],[37.10894,36.6704],[37.16177,36.66069],[37.21988,36.6736],[37.47253,36.63243],[37.49103,36.66904],[37.68048,36.75065],[37.81974,36.76055],[38.21064,36.91842],[38.38859,36.90064],[38.55908,36.84429],[38.74042,36.70629],[39.03217,36.70911],[39.21538,36.66834],[39.81589,36.75538],[40.69136,37.0996],[40.90856,37.13147],[41.21937,37.07665],[41.515,37.08084],[42.00894,37.17209],[42.18225,37.28569],[42.19301,37.31323],[42.2112,37.32491],[42.22257,37.31395],[42.22381,37.30238],[42.20454,37.28715],[42.21548,37.28026],[42.23683,37.2863]]]]}},{type:"Feature",properties:{iso1A2:"GW",iso1A3:"GNB",iso1N3:"624",wikidata:"Q1007",nameEn:"Guinea-Bissau",groups:["011","202","002"],callingCodes:["245"]},geometry:{type:"MultiPolygon",coordinates:[[[[-14.31513,11.60713],[-14.51173,11.49708],[-14.66677,11.51188],[-14.77786,11.36323],[-14.95993,10.99244],[-15.07174,10.89557],[-15.96748,10.162],[-17.4623,11.92379],[-16.70562,12.34803],[-16.38191,12.36449],[-16.20591,12.46157],[-15.67302,12.42974],[-15.17582,12.6847],[-13.70523,12.68013],[-13.7039,12.60313],[-13.65089,12.49515],[-13.64168,12.42764],[-13.70851,12.24978],[-13.92745,12.24077],[-13.94589,12.16869],[-13.7039,12.00869],[-13.7039,11.70195],[-14.09799,11.63649],[-14.26623,11.67486],[-14.31513,11.60713]]]]}},{type:"Feature",properties:{iso1A2:"SZ",iso1A3:"SWZ",iso1N3:"748",wikidata:"Q1050",nameEn:"Eswatini",aliases:["Swaziland"],groups:["018","202","002"],driveSide:"left",callingCodes:["268"]},geometry:{type:"MultiPolygon",coordinates:[[[[31.86881,-25.99973],[31.974,-25.95387],[32.00916,-25.999],[32.08599,-26.00978],[32.10435,-26.15656],[32.07352,-26.40185],[32.13409,-26.5317],[32.13315,-26.84345],[32.09664,-26.80721],[32.00893,-26.8096],[31.97463,-27.11057],[31.97592,-27.31675],[31.49834,-27.31549],[31.15027,-27.20151],[30.96088,-27.0245],[30.97757,-26.92706],[30.88826,-26.79622],[30.81101,-26.84722],[30.78927,-26.48271],[30.95819,-26.26303],[31.13073,-25.91558],[31.31237,-25.7431],[31.4175,-25.71886],[31.86881,-25.99973]]]]}},{type:"Feature",properties:{iso1A2:"HN",iso1A3:"HND",iso1N3:"340",wikidata:"Q783",nameEn:"Honduras",groups:["013","003","419","019"],callingCodes:["504"]},geometry:{type:"MultiPolygon",coordinates:[[[[-83.86109,17.73736],[-81.58685,18.0025],[-82.06974,14.49418],[-83.04763,15.03256],[-83.13724,15.00002],[-83.49268,15.01158],[-83.62101,14.89448],[-83.89551,14.76697],[-84.10584,14.76353],[-84.48373,14.63249],[-84.70119,14.68078],[-84.82596,14.82212],[-84.90082,14.80489],[-85.1575,14.53934],[-85.18602,14.24929],[-85.32149,14.2562],[-85.45762,14.11304],[-85.73964,13.9698],[-85.75477,13.8499],[-86.03458,13.99181],[-86.00685,14.08474],[-86.14801,14.04317],[-86.35219,13.77157],[-86.76812,13.79605],[-86.71267,13.30348],[-86.87066,13.30641],[-86.93383,13.18677],[-86.93197,13.05313],[-87.03785,12.98682],[-87.06306,13.00892],[-87.37107,12.98646],[-87.55124,13.12523],[-87.69751,13.25228],[-87.73714,13.32715],[-87.80177,13.35689],[-87.84675,13.41078],[-87.83467,13.44655],[-87.77354,13.45767],[-87.73841,13.44169],[-87.72115,13.46083],[-87.71657,13.50577],[-87.78148,13.52906],[-87.73106,13.75443],[-87.68821,13.80829],[-87.7966,13.91353],[-88.00331,13.86948],[-88.07641,13.98447],[-88.23018,13.99915],[-88.25791,13.91108],[-88.48982,13.86458],[-88.49738,13.97224],[-88.70661,14.04317],[-88.73182,14.10919],[-88.815,14.11652],[-88.85785,14.17763],[-88.94608,14.20207],[-89.04187,14.33644],[-89.34776,14.43013],[-89.35189,14.47553],[-89.23719,14.58046],[-89.15653,14.57802],[-89.13132,14.71582],[-89.23467,14.85596],[-89.15149,14.97775],[-89.18048,14.99967],[-89.15149,15.07392],[-88.97343,15.14039],[-88.32467,15.63665],[-88.31459,15.66942],[-88.24022,15.69247],[-88.22552,15.72294],[-88.20359,16.03858],[-83.86109,17.73736]]]]}},{type:"Feature",properties:{iso1A2:"TA",iso1A3:"TAA",wikidata:"Q220982",nameEn:"Tristan da Cunha",country:"GB",groups:["SH","011","202","002"],isoStatus:"excRes",driveSide:"left",roadSpeedUnit:"mph",callingCodes:["290 8","44 20"]},geometry:{type:"MultiPolygon",coordinates:[[[[-13.48367,-36.6746],[-11.55782,-36.60319],[-11.48092,-37.8367],[-13.41694,-37.88844],[-13.48367,-36.6746]]]]}},{type:"Feature",properties:{iso1A2:"IC",wikidata:"Q5813",nameEn:"Canary Islands",country:"ES",groups:["EU","039","150"],isoStatus:"excRes",callingCodes:["34"]},geometry:{type:"MultiPolygon",coordinates:[[[[-15.92339,29.50503],[-9.94494,32.97138],[-14.43883,27.02969],[-25.3475,27.87574],[-15.92339,29.50503]]]]}},{type:"Feature",properties:{iso1A2:"TC",iso1A3:"TCA",iso1N3:"796",wikidata:"Q18221",nameEn:"Turks and Caicos Islands",country:"GB",groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 649"]},geometry:{type:"MultiPolygon",coordinates:[[[[-72.41726,22.40371],[-70.63262,21.53631],[-71.46138,20.64433],[-72.72017,21.48055],[-72.41726,22.40371]]]]}},{type:"Feature",properties:{iso1A2:"IM",iso1A3:"IMN",iso1N3:"833",wikidata:"Q9676",nameEn:"Isle of Man",country:"GB",groups:["154","150"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["44 01624","44 07624","44 07524","44 07924"]},geometry:{type:"MultiPolygon",coordinates:[[[[-3.64906,54.12723],[-5.37267,53.63269],[-5.83481,53.87749],[-4.1819,54.57861],[-3.64906,54.12723]]]]}},{type:"Feature",properties:{iso1A2:"TD",iso1A3:"TCD",iso1N3:"148",wikidata:"Q657",nameEn:"Chad",groups:["017","202","002"],callingCodes:["235"]},geometry:{type:"MultiPolygon",coordinates:[[[[23.99539,19.49944],[23.99997,15.69575],[23.62785,15.7804],[23.38812,15.69649],[23.10792,15.71297],[22.93201,15.55107],[22.92579,15.47007],[22.99584,15.40105],[22.99584,15.22989],[22.66115,14.86308],[22.70474,14.69149],[22.38562,14.58907],[22.44944,14.24986],[22.55997,14.23024],[22.5553,14.11704],[22.22995,13.96754],[22.08674,13.77863],[22.29689,13.3731],[22.1599,13.19281],[22.02914,13.13976],[21.94819,13.05637],[21.81432,12.81362],[21.89371,12.68001],[21.98711,12.63292],[22.15679,12.66634],[22.22684,12.74682],[22.46345,12.61925],[22.38873,12.45514],[22.50548,12.16769],[22.48369,12.02766],[22.64092,12.07485],[22.54907,11.64372],[22.7997,11.40424],[22.93124,11.41645],[22.97249,11.21955],[22.87758,10.91915],[22.45889,11.00246],[21.72139,10.64136],[21.71479,10.29932],[21.63553,10.217],[21.52766,10.2105],[21.34934,9.95907],[21.26348,9.97642],[20.82979,9.44696],[20.36748,9.11019],[19.06421,9.00367],[18.86388,8.87971],[19.11044,8.68172],[18.79783,8.25929],[18.67455,8.22226],[18.62612,8.14163],[18.64153,8.08714],[18.6085,8.05009],[18.02731,8.01085],[17.93926,7.95853],[17.67288,7.98905],[16.8143,7.53971],[16.6668,7.67281],[16.658,7.75353],[16.59415,7.76444],[16.58315,7.88657],[16.41583,7.77971],[16.40703,7.68809],[15.79942,7.44149],[15.73118,7.52006],[15.49743,7.52179],[15.56964,7.58936],[15.59272,7.7696],[15.50743,7.79302],[15.20426,8.50892],[15.09484,8.65982],[14.83566,8.80557],[14.35707,9.19611],[14.37094,9.2954],[13.97544,9.6365],[14.01793,9.73169],[14.1317,9.82413],[14.20411,10.00055],[14.4673,10.00264],[14.80082,9.93818],[14.95722,9.97926],[15.05999,9.94845],[15.14043,9.99246],[15.24618,9.99246],[15.41408,9.92876],[15.68761,9.99344],[15.50535,10.1098],[15.30874,10.31063],[15.23724,10.47764],[15.14936,10.53915],[15.15532,10.62846],[15.06737,10.80921],[15.09127,10.87431],[15.04957,11.02347],[15.10021,11.04101],[15.0585,11.40481],[15.13149,11.5537],[15.06595,11.71126],[15.11579,11.79313],[15.04808,11.8731],[15.05786,12.0608],[15.0349,12.10698],[15.00146,12.1223],[14.96952,12.0925],[14.89019,12.16593],[14.90827,12.3269],[14.83314,12.62963],[14.55058,12.78256],[14.56101,12.91036],[14.46881,13.08259],[14.08251,13.0797],[13.6302,13.71094],[13.47559,14.40881],[13.48259,14.46704],[13.68573,14.55276],[13.67878,14.64013],[13.809,14.72915],[13.78991,14.87519],[13.86301,15.04043],[14.37425,15.72591],[15.50373,16.89649],[15.6032,18.77402],[15.75098,19.93002],[15.99632,20.35364],[15.6721,20.70069],[15.59841,20.74039],[15.56004,20.79488],[15.55382,20.86507],[15.57248,20.92138],[15.62515,20.95395],[15.28332,21.44557],[15.20213,21.49365],[15.19692,21.99339],[14.99751,23.00539],[15.99566,23.49639],[23.99539,19.49944]]]]}},{type:"Feature",properties:{iso1A2:"IR",iso1A3:"IRN",iso1N3:"364",wikidata:"Q794",nameEn:"Iran",groups:["034","142"],callingCodes:["98"]},geometry:{type:"MultiPolygon",coordinates:[[[[44.96746,39.42998],[45.05932,39.36435],[45.08751,39.35052],[45.16168,39.21952],[45.30489,39.18333],[45.40148,39.09007],[45.40452,39.07224],[45.44811,39.04927],[45.44966,38.99243],[45.6131,38.964],[45.6155,38.94304],[45.65172,38.95199],[45.83883,38.90768],[45.90266,38.87739],[45.94624,38.89072],[46.00228,38.87376],[46.06766,38.87861],[46.14785,38.84206],[46.20601,38.85262],[46.34059,38.92076],[46.53497,38.86548],[46.75752,39.03231],[46.83822,39.13143],[46.92539,39.16644],[46.95341,39.13505],[47.05771,39.20143],[47.05927,39.24846],[47.31301,39.37492],[47.38978,39.45999],[47.50099,39.49615],[47.84774,39.66285],[47.98977,39.70999],[48.34264,39.42935],[48.37385,39.37584],[48.15984,39.30028],[48.12404,39.25208],[48.15361,39.19419],[48.31239,39.09278],[48.33884,39.03022],[48.28437,38.97186],[48.08627,38.94434],[48.07734,38.91616],[48.01409,38.90333],[48.02581,38.82705],[48.24773,38.71883],[48.3146,38.59958],[48.45084,38.61013],[48.58793,38.45076],[48.62217,38.40198],[48.70001,38.40564],[48.78979,38.45026],[48.81072,38.44853],[48.84969,38.45015],[48.88288,38.43975],[53.89734,37.3464],[54.24565,37.32047],[54.36211,37.34912],[54.58664,37.45809],[54.67247,37.43532],[54.77822,37.51597],[54.81804,37.61285],[54.77684,37.62264],[54.851,37.75739],[55.13412,37.94705],[55.44152,38.08564],[55.76561,38.12238],[55.97847,38.08024],[56.33278,38.08132],[56.32454,38.18502],[56.43303,38.26054],[56.62255,38.24005],[56.73928,38.27887],[57.03453,38.18717],[57.21169,38.28965],[57.37236,38.09321],[57.35042,37.98546],[57.79534,37.89299],[58.21399,37.77281],[58.22999,37.6856],[58.39959,37.63134],[58.47786,37.6433],[58.5479,37.70526],[58.6921,37.64548],[58.9338,37.67374],[59.22905,37.51161],[59.33507,37.53146],[59.39797,37.47892],[59.39385,37.34257],[59.55178,37.13594],[59.74678,37.12499],[60.00768,37.04102],[60.34767,36.63214],[61.14516,36.64644],[61.18187,36.55348],[61.1393,36.38782],[61.22719,36.12759],[61.12007,35.95992],[61.22444,35.92879],[61.26152,35.80749],[61.22719,35.67038],[61.27371,35.61482],[61.18187,35.30249],[61.0991,35.27845],[61.12831,35.09938],[61.06926,34.82139],[61.00197,34.70631],[60.99922,34.63064],[60.72316,34.52857],[60.91321,34.30411],[60.66502,34.31539],[60.50209,34.13992],[60.5838,33.80793],[60.5485,33.73422],[60.57762,33.59772],[60.69573,33.56054],[60.91133,33.55596],[60.88908,33.50219],[60.56485,33.12944],[60.86191,32.22565],[60.84541,31.49561],[61.70929,31.37391],[61.80569,31.16167],[61.80957,31.12576],[61.83257,31.0452],[61.8335,30.97669],[61.78268,30.92724],[61.80829,30.84224],[60.87231,29.86514],[61.31508,29.38903],[61.53765,29.00507],[61.65978,28.77937],[61.93581,28.55284],[62.40259,28.42703],[62.59499,28.24842],[62.79412,28.28108],[62.7638,28.02992],[62.84905,27.47627],[62.79684,27.34381],[62.80604,27.22412],[63.19649,27.25674],[63.32283,27.14437],[63.25005,27.08692],[63.25005,26.84212],[63.18688,26.83844],[63.1889,26.65072],[62.77352,26.64099],[62.31484,26.528],[62.21304,26.26601],[62.05117,26.31647],[61.89391,26.26251],[61.83831,26.07249],[61.83968,25.7538],[61.683,25.66638],[61.6433,25.27541],[61.57592,25.0492],[61.5251,24.57287],[56.86325,25.03856],[56.82555,25.7713],[56.79239,26.41236],[56.68954,26.76645],[56.2644,26.58649],[55.81777,26.18798],[55.14145,25.62624],[54.39838,25.68383],[50.37726,27.89227],[49.98877,27.87827],[48.83867,29.78572],[48.61441,29.93675],[48.51011,29.96238],[48.44785,30.00148],[48.4494,30.04456],[48.43384,30.08233],[48.38869,30.11062],[48.38714,30.13485],[48.41671,30.17254],[48.41117,30.19846],[48.26393,30.3408],[48.24385,30.33846],[48.21279,30.31644],[48.19425,30.32796],[48.18321,30.39703],[48.14585,30.44133],[48.02443,30.4789],[48.03221,30.9967],[47.68219,31.00004],[47.6804,31.39086],[47.86337,31.78422],[47.64771,32.07666],[47.52474,32.15972],[47.57144,32.20583],[47.37529,32.47808],[47.17218,32.45393],[46.46788,32.91992],[46.32298,32.9731],[46.17198,32.95612],[46.09103,32.98354],[46.15175,33.07229],[46.03966,33.09577],[46.05367,33.13097],[46.11905,33.11924],[46.20623,33.20395],[45.99919,33.5082],[45.86687,33.49263],[45.96183,33.55751],[45.89801,33.63661],[45.77814,33.60938],[45.50261,33.94968],[45.42789,33.9458],[45.41077,33.97421],[45.47264,34.03099],[45.56176,34.15088],[45.58667,34.30147],[45.53552,34.35148],[45.49171,34.3439],[45.46697,34.38221],[45.43879,34.45949],[45.51883,34.47692],[45.53219,34.60441],[45.59074,34.55558],[45.60224,34.55057],[45.73923,34.54416],[45.70031,34.69277],[45.65672,34.7222],[45.68284,34.76624],[45.70031,34.82322],[45.73641,34.83975],[45.79682,34.85133],[45.78904,34.91135],[45.86532,34.89858],[45.89477,34.95805],[45.87864,35.03441],[45.92173,35.0465],[45.92203,35.09538],[45.93108,35.08148],[45.94756,35.09188],[46.06508,35.03699],[46.07747,35.0838],[46.11763,35.07551],[46.19116,35.11097],[46.15642,35.1268],[46.16229,35.16984],[46.19738,35.18536],[46.18457,35.22561],[46.11367,35.23729],[46.15474,35.2883],[46.13152,35.32548],[46.05358,35.38568],[45.98453,35.49848],[46.01518,35.52012],[45.97584,35.58132],[46.03028,35.57416],[46.01307,35.59756],[46.0165,35.61501],[45.99452,35.63574],[46.0117,35.65059],[46.01631,35.69139],[46.23736,35.71414],[46.34166,35.78363],[46.32921,35.82655],[46.17198,35.8013],[46.08325,35.8581],[45.94711,35.82218],[45.89784,35.83708],[45.81442,35.82107],[45.76145,35.79898],[45.6645,35.92872],[45.60018,35.96069],[45.55245,35.99943],[45.46594,36.00042],[45.38275,35.97156],[45.33916,35.99424],[45.37652,36.06222],[45.37312,36.09917],[45.32235,36.17383],[45.30038,36.27769],[45.26261,36.3001],[45.27394,36.35846],[45.23953,36.43257],[45.11811,36.40751],[45.00759,36.5402],[45.06985,36.62645],[45.06985,36.6814],[45.01537,36.75128],[44.84725,36.77622],[44.83479,36.81362],[44.90173,36.86096],[44.91199,36.91468],[44.89862,37.01897],[44.81611,37.04383],[44.75229,37.11958],[44.78319,37.1431],[44.7868,37.16644],[44.75986,37.21549],[44.81021,37.2915],[44.58449,37.45018],[44.61401,37.60165],[44.56887,37.6429],[44.62096,37.71985],[44.55498,37.783],[44.45948,37.77065],[44.3883,37.85433],[44.22509,37.88859],[44.42476,38.25763],[44.50115,38.33939],[44.44386,38.38295],[44.38309,38.36117],[44.3119,38.37887],[44.3207,38.49799],[44.32058,38.62752],[44.28065,38.6465],[44.26155,38.71427],[44.30322,38.81581],[44.18863,38.93881],[44.20946,39.13975],[44.1043,39.19842],[44.03667,39.39223],[44.22452,39.4169],[44.29818,39.378],[44.37921,39.4131],[44.42832,39.4131],[44.41849,39.56659],[44.48111,39.61579],[44.47298,39.68788],[44.6137,39.78393],[44.65422,39.72163],[44.71806,39.71124],[44.81043,39.62677],[44.88916,39.59653],[44.96746,39.42998]]]]}},{type:"Feature",properties:{iso1A2:"TF",iso1A3:"ATF",iso1N3:"260",wikidata:"Q129003",nameEn:"French Southern and Antarctic Lands",country:"FR",groups:["014","202","002"]},geometry:{type:"MultiPolygon",coordinates:[[[[53.53458,-16.36909],[54.61476,-15.02273],[54.96649,-16.28353],[53.53458,-16.36909]]],[[[39.10324,-21.48967],[41.06663,-17.08802],[43.72277,-16.09877],[40.40841,-23.17181],[39.10324,-21.48967]]],[[[46.52682,-10.83678],[48.86266,-10.8109],[47.29063,-12.45583],[46.52682,-10.83678]]],[[[80.15867,-36.04977],[70.67507,-51.14192],[46.31615,-46.28749],[80.15867,-36.04977]]]]}},{type:"Feature",properties:{iso1A2:"JM",iso1A3:"JAM",iso1N3:"388",wikidata:"Q766",nameEn:"Jamaica",aliases:["JA"],groups:["029","003","419","019"],driveSide:"left",callingCodes:["1 876","1 658"]},geometry:{type:"MultiPolygon",coordinates:[[[[-75.50728,17.08879],[-78.34606,16.57862],[-78.75694,18.78765],[-76.34192,18.86145],[-75.50728,17.08879]]]]}},{type:"Feature",properties:{iso1A2:"TG",iso1A3:"TGO",iso1N3:"768",wikidata:"Q945",nameEn:"Togo",groups:["011","202","002"],callingCodes:["228"]},geometry:{type:"MultiPolygon",coordinates:[[[[0.50388,11.01011],[0.48852,10.98561],[0.50521,10.98035],[0.4958,10.93269],[0.66104,10.99964],[0.91245,10.99597],[0.8804,10.803],[0.80358,10.71459],[0.77666,10.37665],[1.35507,9.99525],[1.36624,9.5951],[1.33675,9.54765],[1.41746,9.3226],[1.5649,9.16941],[1.61838,9.0527],[1.64249,6.99562],[1.55877,6.99737],[1.61812,6.74843],[1.58105,6.68619],[1.76906,6.43189],[1.79826,6.28221],[1.62913,6.24075],[1.67336,6.02702],[1.27574,5.93551],[1.19771,6.11522],[1.19966,6.17069],[1.09187,6.17074],[1.05969,6.22998],[1.03108,6.24064],[0.99652,6.33779],[0.89283,6.33779],[0.71048,6.53083],[0.74862,6.56517],[0.63659,6.63857],[0.6497,6.73682],[0.58176,6.76049],[0.57406,6.80348],[0.52853,6.82921],[0.56508,6.92971],[0.52098,6.94391],[0.52217,6.9723],[0.59606,7.01252],[0.65327,7.31643],[0.62943,7.41099],[0.57223,7.39326],[0.52455,7.45354],[0.51979,7.58706],[0.58295,7.62368],[0.62943,7.85751],[0.58891,8.12779],[0.6056,8.13959],[0.61156,8.18324],[0.5913,8.19622],[0.63897,8.25873],[0.73432,8.29529],[0.64731,8.48866],[0.47211,8.59945],[0.37319,8.75262],[0.52455,8.87746],[0.45424,9.04581],[0.56388,9.40697],[0.49118,9.48339],[0.36485,9.49749],[0.33148,9.44812],[0.25758,9.42696],[0.2254,9.47869],[0.31241,9.50337],[0.30406,9.521],[0.2409,9.52335],[0.23851,9.57389],[0.38153,9.58682],[0.36008,9.6256],[0.29334,9.59387],[0.26712,9.66437],[0.28261,9.69022],[0.32313,9.6491],[0.34816,9.66907],[0.34816,9.71607],[0.32075,9.72781],[0.36366,10.03309],[0.41252,10.02018],[0.41371,10.06361],[0.35293,10.09412],[0.39584,10.31112],[0.33028,10.30408],[0.29453,10.41546],[0.18846,10.4096],[0.12886,10.53149],[-0.05945,10.63458],[-0.09141,10.7147],[-0.07327,10.71845],[-0.07183,10.76794],[-0.0228,10.81916],[-0.02685,10.8783],[-0.00908,10.91644],[-0.0063,10.96417],[0.03355,10.9807],[0.02395,11.06229],[0.00342,11.08317],[-0.00514,11.10763],[-0.0275,11.11202],[-0.05733,11.08628],[-0.14462,11.10811],[-0.13493,11.14075],[0.50388,11.01011]]]]}},{type:"Feature",properties:{iso1A2:"KG",iso1A3:"KGZ",iso1N3:"417",wikidata:"Q813",nameEn:"Kyrgyzstan",groups:["143","142"],callingCodes:["996"]},geometry:{type:"MultiPolygon",coordinates:[[[[74.88756,42.98612],[75.22619,42.85528],[75.29966,42.86183],[75.72174,42.79672],[75.82823,42.94848],[78.48469,42.89649],[78.91502,42.76839],[79.19763,42.804],[79.52921,42.44778],[79.97364,42.42816],[80.17807,42.21166],[80.17842,42.03211],[79.92977,42.04113],[78.3732,41.39603],[78.15757,41.38565],[78.12873,41.23091],[77.81287,41.14307],[77.76206,41.01574],[77.52723,41.00227],[77.3693,41.0375],[77.28004,41.0033],[76.99302,41.0696],[76.75681,40.95354],[76.5261,40.46114],[76.33659,40.3482],[75.96168,40.38064],[75.91361,40.2948],[75.69663,40.28642],[75.5854,40.66874],[75.22834,40.45382],[75.08243,40.43945],[74.82013,40.52197],[74.78168,40.44886],[74.85996,40.32857],[74.69875,40.34668],[74.35063,40.09742],[74.25533,40.13191],[73.97049,40.04378],[73.83006,39.76136],[73.9051,39.75073],[73.92354,39.69565],[73.94683,39.60733],[73.87018,39.47879],[73.59831,39.46425],[73.45096,39.46677],[73.31912,39.38615],[73.18454,39.35536],[72.85934,39.35116],[72.62027,39.39696],[72.33173,39.33093],[72.23834,39.17248],[72.17242,39.2661],[72.09689,39.26823],[72.04059,39.36704],[71.90601,39.27674],[71.79202,39.27355],[71.7522,39.32031],[71.80164,39.40631],[71.76816,39.45456],[71.62688,39.44056],[71.5517,39.45722],[71.55856,39.57588],[71.49814,39.61397],[71.08752,39.50704],[71.06418,39.41586],[70.7854,39.38933],[70.64087,39.58792],[70.44757,39.60128],[70.2869,39.53141],[70.11111,39.58223],[69.87491,39.53882],[69.68677,39.59281],[69.3594,39.52516],[69.26938,39.8127],[69.35649,40.01994],[69.43134,39.98431],[69.43557,39.92877],[69.53615,39.93991],[69.5057,40.03277],[69.53855,40.0887],[69.53794,40.11833],[69.55555,40.12296],[69.57615,40.10524],[69.64704,40.12165],[69.67001,40.10639],[70.01283,40.23288],[70.58297,40.00891],[70.57384,39.99394],[70.47557,39.93216],[70.55033,39.96619],[70.58912,39.95211],[70.65946,39.9878],[70.65827,40.0981],[70.7928,40.12797],[70.80495,40.16813],[70.9818,40.22392],[70.95789,40.28761],[71.05901,40.28765],[71.13042,40.34106],[71.36663,40.31593],[71.4246,40.28619],[71.51215,40.26943],[71.51549,40.22986],[71.61725,40.20615],[71.61931,40.26775],[71.68386,40.26984],[71.70569,40.20391],[71.69621,40.18492],[71.71719,40.17886],[71.73054,40.14818],[71.82646,40.21872],[71.85002,40.25647],[72.05464,40.27586],[71.96401,40.31907],[72.18648,40.49893],[72.24368,40.46091],[72.40346,40.4007],[72.44191,40.48222],[72.41513,40.50856],[72.38384,40.51535],[72.41714,40.55736],[72.34406,40.60144],[72.40517,40.61917],[72.47795,40.5532],[72.66713,40.5219],[72.66713,40.59076],[72.69579,40.59778],[72.73995,40.58409],[72.74768,40.58051],[72.74862,40.57131],[72.75982,40.57273],[72.74894,40.59592],[72.74866,40.60873],[72.80137,40.67856],[72.84754,40.67229],[72.85372,40.7116],[72.8722,40.71111],[72.93296,40.73089],[72.99133,40.76457],[73.0612,40.76678],[73.13412,40.79122],[73.13267,40.83512],[73.01869,40.84681],[72.94454,40.8094],[72.84291,40.85512],[72.68157,40.84942],[72.59136,40.86947],[72.55109,40.96046],[72.48742,40.97136],[72.45206,41.03018],[72.38511,41.02785],[72.36138,41.04384],[72.34757,41.06104],[72.34026,41.04539],[72.324,41.03381],[72.18339,40.99571],[72.17594,41.02377],[72.21061,41.05607],[72.1792,41.10621],[72.14864,41.13363],[72.17594,41.15522],[72.16433,41.16483],[72.10745,41.15483],[72.07249,41.11739],[71.85964,41.19081],[71.91457,41.2982],[71.83914,41.3546],[71.76625,41.4466],[71.71132,41.43012],[71.73054,41.54713],[71.65914,41.49599],[71.6787,41.42111],[71.57227,41.29175],[71.46688,41.31883],[71.43814,41.19644],[71.46148,41.13958],[71.40198,41.09436],[71.34877,41.16807],[71.27187,41.11015],[71.25813,41.18796],[71.11806,41.15359],[71.02193,41.19494],[70.9615,41.16393],[70.86263,41.23833],[70.77885,41.24813],[70.78572,41.36419],[70.67586,41.47953],[70.48909,41.40335],[70.17682,41.5455],[70.69777,41.92554],[71.28719,42.18033],[71.13263,42.28356],[70.94483,42.26238],[70.85973,42.30188],[70.97717,42.50147],[71.15232,42.60486],[71.17807,42.67381],[71.22785,42.69248],[71.2724,42.77853],[71.53272,42.8014],[71.62405,42.76613],[71.88792,42.83578],[73.44393,42.43098],[73.50992,42.82356],[73.55634,43.03071],[74.22489,43.24657],[74.57491,43.13702],[74.64615,43.05881],[74.70331,43.02519],[74.75,42.99029],[74.88756,42.98612]],[[70.74189,39.86319],[70.53651,39.89155],[70.52631,39.86989],[70.54998,39.85137],[70.59667,39.83542],[70.63105,39.77923],[70.74189,39.86319]],[[71.86463,39.98598],[71.78838,40.01404],[71.71511,39.96348],[71.7504,39.93701],[71.84316,39.95582],[71.86463,39.98598]],[[71.21139,40.03369],[71.12218,40.03052],[71.06305,40.1771],[71.00236,40.18154],[71.01035,40.05481],[71.11037,40.01984],[71.11668,39.99291],[71.09063,39.99],[71.10501,39.95568],[71.04979,39.89808],[71.10531,39.91354],[71.16101,39.88423],[71.23067,39.93581],[71.1427,39.95026],[71.21139,40.03369]]]]}},{type:"Feature",properties:{iso1A2:"TH",iso1A3:"THA",iso1N3:"764",wikidata:"Q869",nameEn:"Thailand",groups:["035","142"],driveSide:"left",callingCodes:["66"]},geometry:{type:"MultiPolygon",coordinates:[[[[100.08404,20.36626],[100.09999,20.31614],[100.09337,20.26293],[100.11785,20.24787],[100.1712,20.24324],[100.16668,20.2986],[100.22076,20.31598],[100.25769,20.3992],[100.33383,20.4028],[100.37439,20.35156],[100.41473,20.25625],[100.44992,20.23644],[100.4537,20.19971],[100.47567,20.19133],[100.51052,20.14928],[100.55218,20.17741],[100.58808,20.15791],[100.5094,19.87904],[100.398,19.75047],[100.49604,19.53504],[100.58219,19.49164],[100.64606,19.55884],[100.77231,19.48324],[100.90302,19.61901],[101.08928,19.59748],[101.26545,19.59242],[101.26991,19.48324],[101.21347,19.46223],[101.20604,19.35296],[101.24911,19.33334],[101.261,19.12717],[101.35606,19.04716],[101.25803,18.89545],[101.22832,18.73377],[101.27585,18.68875],[101.06047,18.43247],[101.18227,18.34367],[101.15108,18.25624],[101.19118,18.2125],[101.1793,18.0544],[101.02185,17.87637],[100.96541,17.57926],[101.15108,17.47586],[101.44667,17.7392],[101.72294,17.92867],[101.78087,18.07559],[101.88485,18.02474],[102.11359,18.21532],[102.45523,17.97106],[102.59234,17.96127],[102.60971,17.95411],[102.61432,17.92273],[102.5896,17.84889],[102.59485,17.83537],[102.68194,17.80151],[102.69946,17.81686],[102.67543,17.84529],[102.68538,17.86653],[102.75954,17.89561],[102.79044,17.93612],[102.81988,17.94233],[102.86323,17.97531],[102.95812,18.0054],[102.9912,17.9949],[103.01998,17.97095],[103.0566,18.00144],[103.07823,18.03833],[103.07343,18.12351],[103.1493,18.17799],[103.14994,18.23172],[103.17093,18.2618],[103.29757,18.30475],[103.23818,18.34875],[103.24779,18.37807],[103.30977,18.4341],[103.41044,18.4486],[103.47773,18.42841],[103.60957,18.40528],[103.699,18.34125],[103.82449,18.33979],[103.85642,18.28666],[103.93916,18.33914],[103.97725,18.33631],[104.06533,18.21656],[104.10927,18.10826],[104.21776,17.99335],[104.2757,17.86139],[104.35432,17.82871],[104.45404,17.66788],[104.69867,17.53038],[104.80061,17.39367],[104.80716,17.19025],[104.73712,17.01404],[104.7373,16.91125],[104.76442,16.84752],[104.7397,16.81005],[104.76099,16.69302],[104.73349,16.565],[104.88057,16.37311],[105.00262,16.25627],[105.06204,16.09792],[105.42001,16.00657],[105.38508,15.987],[105.34115,15.92737],[105.37959,15.84074],[105.42285,15.76971],[105.46573,15.74742],[105.61756,15.68792],[105.60446,15.53301],[105.58191,15.41031],[105.47635,15.3796],[105.4692,15.33709],[105.50662,15.32054],[105.58043,15.32724],[105.46661,15.13132],[105.61162,15.00037],[105.5121,14.80802],[105.53864,14.55731],[105.43783,14.43865],[105.20894,14.34967],[105.17748,14.34432],[105.14012,14.23873],[105.08408,14.20402],[105.02804,14.23722],[104.97667,14.38806],[104.69335,14.42726],[104.55014,14.36091],[104.27616,14.39861],[103.93836,14.3398],[103.70175,14.38052],[103.71109,14.4348],[103.53518,14.42575],[103.39353,14.35639],[103.16469,14.33075],[102.93275,14.19044],[102.91251,14.01531],[102.77864,13.93374],[102.72727,13.77806],[102.56848,13.69366],[102.5481,13.6589],[102.58635,13.6286],[102.62483,13.60883],[102.57573,13.60461],[102.5358,13.56933],[102.44601,13.5637],[102.36859,13.57488],[102.33828,13.55613],[102.361,13.50551],[102.35563,13.47307],[102.35692,13.38274],[102.34611,13.35618],[102.36001,13.31142],[102.36146,13.26006],[102.43422,13.09061],[102.46011,13.08057],[102.52275,12.99813],[102.48694,12.97537],[102.49335,12.92711],[102.53053,12.77506],[102.4994,12.71736],[102.51963,12.66117],[102.57567,12.65358],[102.7796,12.43781],[102.78116,12.40284],[102.73134,12.37091],[102.70176,12.1686],[102.77026,12.06815],[102.78427,11.98746],[102.83957,11.8519],[102.90973,11.75613],[102.91449,11.65512],[102.52395,11.25257],[102.47649,9.66162],[102.46318,7.22462],[102.09086,6.23546],[102.08127,6.22679],[102.07732,6.193],[102.09182,6.14161],[102.01835,6.05407],[101.99209,6.04075],[101.97114,6.01992],[101.9714,6.00575],[101.94712,5.98421],[101.92819,5.85511],[101.91776,5.84269],[101.89188,5.8386],[101.80144,5.74505],[101.75074,5.79091],[101.69773,5.75881],[101.58019,5.93534],[101.25524,5.78633],[101.25755,5.71065],[101.14062,5.61613],[100.98815,5.79464],[101.02708,5.91013],[101.087,5.9193],[101.12388,6.11411],[101.06165,6.14161],[101.12618,6.19431],[101.10313,6.25617],[100.85884,6.24929],[100.81045,6.45086],[100.74822,6.46231],[100.74361,6.50811],[100.66986,6.45086],[100.43027,6.52389],[100.42351,6.51762],[100.41791,6.5189],[100.41152,6.52299],[100.35413,6.54932],[100.31929,6.65413],[100.32607,6.65933],[100.32671,6.66526],[100.31884,6.66423],[100.31618,6.66781],[100.30828,6.66462],[100.29651,6.68439],[100.19511,6.72559],[100.12,6.42105],[100.0756,6.4045],[99.91873,6.50233],[99.50117,6.44501],[99.31854,5.99868],[97.19814,8.18901],[97.63455,9.60854],[98.12555,9.44056],[98.33094,9.91973],[98.47298,9.95782],[98.52291,9.92389],[98.55174,9.92804],[98.7391,10.31488],[98.81944,10.52761],[98.77275,10.62548],[98.78511,10.68351],[98.86819,10.78336],[99.0069,10.85485],[98.99701,10.92962],[99.02337,10.97217],[99.06938,10.94857],[99.32756,11.28545],[99.31573,11.32081],[99.39485,11.3925],[99.47598,11.62434],[99.5672,11.62732],[99.64108,11.78948],[99.64891,11.82699],[99.53424,12.02317],[99.56445,12.14805],[99.47519,12.1353],[99.409,12.60603],[99.29254,12.68921],[99.18905,12.84799],[99.18748,12.9898],[99.10646,13.05804],[99.12225,13.19847],[99.20617,13.20575],[99.16695,13.72621],[98.97356,14.04868],[98.56762,14.37701],[98.24874,14.83013],[98.18821,15.13125],[98.22,15.21327],[98.30446,15.30667],[98.40522,15.25268],[98.41906,15.27103],[98.39351,15.34177],[98.4866,15.39154],[98.56027,15.33471],[98.58598,15.46821],[98.541,15.65406],[98.59853,15.87197],[98.57019,16.04578],[98.69585,16.13353],[98.8376,16.11706],[98.92656,16.36425],[98.84485,16.42354],[98.68074,16.27068],[98.63817,16.47424],[98.57912,16.55983],[98.5695,16.62826],[98.51113,16.64503],[98.51833,16.676],[98.51472,16.68521],[98.51579,16.69433],[98.51043,16.70107],[98.49713,16.69022],[98.50253,16.7139],[98.46994,16.73613],[98.53833,16.81934],[98.49603,16.8446],[98.52624,16.89979],[98.39441,17.06266],[98.34566,17.04822],[98.10439,17.33847],[98.11185,17.36829],[97.91829,17.54504],[97.76407,17.71595],[97.66794,17.88005],[97.73723,17.97912],[97.60841,18.23846],[97.64116,18.29778],[97.56219,18.33885],[97.50383,18.26844],[97.34522,18.54596],[97.36444,18.57138],[97.5258,18.4939],[97.76752,18.58097],[97.73836,18.88478],[97.66487,18.9371],[97.73654,18.9812],[97.73797,19.04261],[97.83479,19.09972],[97.84024,19.22217],[97.78606,19.26769],[97.84186,19.29526],[97.78769,19.39429],[97.88423,19.5041],[97.84715,19.55782],[98.04364,19.65755],[98.03314,19.80941],[98.13829,19.78541],[98.24884,19.67876],[98.51182,19.71303],[98.56065,19.67807],[98.83661,19.80931],[98.98679,19.7419],[99.0735,20.10298],[99.20328,20.12877],[99.416,20.08614],[99.52943,20.14811],[99.5569,20.20676],[99.46077,20.36198],[99.46008,20.39673],[99.68255,20.32077],[99.81096,20.33687],[99.86383,20.44371],[99.88211,20.44488],[99.88451,20.44596],[99.89168,20.44548],[99.89301,20.44311],[99.89692,20.44789],[99.90499,20.4487],[99.91616,20.44986],[99.95721,20.46301],[100.08404,20.36626]]]]}},{type:"Feature",properties:{iso1A2:"KN",iso1A3:"KNA",iso1N3:"659",wikidata:"Q763",nameEn:"St. Kitts and Nevis",groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 869"]},geometry:{type:"MultiPolygon",coordinates:[[[[-62.27053,17.22145],[-62.62949,16.82364],[-63.11114,17.23125],[-62.76692,17.64353],[-62.27053,17.22145]]]]}},{type:"Feature",properties:{iso1A2:"TJ",iso1A3:"TJK",iso1N3:"762",wikidata:"Q863",nameEn:"Tajikistan",groups:["143","142"],callingCodes:["992"]},geometry:{type:"MultiPolygon",coordinates:[[[[70.45251,41.04438],[70.80009,40.72825],[70.49871,40.52503],[70.32626,40.45174],[70.37511,40.38605],[70.57149,40.3442],[70.56394,40.26421],[70.62342,40.17396],[70.8607,40.217],[70.9818,40.22392],[70.80495,40.16813],[70.7928,40.12797],[70.65827,40.0981],[70.65946,39.9878],[70.58912,39.95211],[70.55033,39.96619],[70.47557,39.93216],[70.57384,39.99394],[70.58297,40.00891],[70.01283,40.23288],[69.67001,40.10639],[69.64704,40.12165],[69.57615,40.10524],[69.55555,40.12296],[69.53794,40.11833],[69.53855,40.0887],[69.5057,40.03277],[69.53615,39.93991],[69.43557,39.92877],[69.43134,39.98431],[69.35649,40.01994],[69.26938,39.8127],[69.3594,39.52516],[69.68677,39.59281],[69.87491,39.53882],[70.11111,39.58223],[70.2869,39.53141],[70.44757,39.60128],[70.64087,39.58792],[70.7854,39.38933],[71.06418,39.41586],[71.08752,39.50704],[71.49814,39.61397],[71.55856,39.57588],[71.5517,39.45722],[71.62688,39.44056],[71.76816,39.45456],[71.80164,39.40631],[71.7522,39.32031],[71.79202,39.27355],[71.90601,39.27674],[72.04059,39.36704],[72.09689,39.26823],[72.17242,39.2661],[72.23834,39.17248],[72.33173,39.33093],[72.62027,39.39696],[72.85934,39.35116],[73.18454,39.35536],[73.31912,39.38615],[73.45096,39.46677],[73.59831,39.46425],[73.59241,39.40843],[73.5004,39.38402],[73.55396,39.3543],[73.54572,39.27567],[73.60638,39.24534],[73.75823,39.023],[73.81728,39.04007],[73.82964,38.91517],[73.7445,38.93867],[73.7033,38.84782],[73.80656,38.66449],[73.79806,38.61106],[73.97933,38.52945],[74.17022,38.65504],[74.51217,38.47034],[74.69619,38.42947],[74.69894,38.22155],[74.80331,38.19889],[74.82665,38.07359],[74.9063,38.03033],[74.92416,37.83428],[75.00935,37.77486],[74.8912,37.67576],[74.94338,37.55501],[75.06011,37.52779],[75.15899,37.41443],[75.09719,37.37297],[75.12328,37.31839],[74.88887,37.23275],[74.8294,37.3435],[74.68383,37.3948],[74.56161,37.37734],[74.41055,37.3948],[74.23339,37.41116],[74.20308,37.34208],[73.8564,37.26158],[73.82552,37.22659],[73.64974,37.23643],[73.61129,37.27469],[73.76647,37.33913],[73.77197,37.4417],[73.29633,37.46495],[73.06884,37.31729],[72.79693,37.22222],[72.66381,37.02014],[72.54095,37.00007],[72.31676,36.98115],[71.83229,36.68084],[71.67083,36.67346],[71.57195,36.74943],[71.51502,36.89128],[71.48481,36.93218],[71.46923,36.99925],[71.45578,37.03094],[71.43097,37.05855],[71.44127,37.11856],[71.4494,37.18137],[71.4555,37.21418],[71.47386,37.2269],[71.48339,37.23937],[71.4824,37.24921],[71.48536,37.26017],[71.50674,37.31502],[71.49821,37.31975],[71.4862,37.33405],[71.47685,37.40281],[71.49612,37.4279],[71.5256,37.47971],[71.50616,37.50733],[71.49693,37.53527],[71.5065,37.60912],[71.51972,37.61945],[71.54186,37.69691],[71.55234,37.73209],[71.53053,37.76534],[71.54324,37.77104],[71.55752,37.78677],[71.59255,37.79956],[71.58843,37.92425],[71.51565,37.95349],[71.32871,37.88564],[71.296,37.93403],[71.2809,37.91995],[71.24969,37.93031],[71.27278,37.96496],[71.27622,37.99946],[71.28922,38.01272],[71.29878,38.04429],[71.36444,38.15358],[71.37803,38.25641],[71.33869,38.27335],[71.33114,38.30339],[71.21291,38.32797],[71.1451,38.40106],[71.10957,38.40671],[71.10592,38.42077],[71.09542,38.42517],[71.0556,38.40176],[71.03545,38.44779],[70.98693,38.48862],[70.92728,38.43021],[70.88719,38.46826],[70.84376,38.44688],[70.82538,38.45394],[70.81697,38.44507],[70.80521,38.44447],[70.79766,38.44944],[70.78702,38.45031],[70.78581,38.45502],[70.77132,38.45548],[70.75455,38.4252],[70.72485,38.4131],[70.69807,38.41861],[70.67438,38.40597],[70.6761,38.39144],[70.69189,38.37031],[70.64966,38.34999],[70.61526,38.34774],[70.60407,38.28046],[70.54673,38.24541],[70.4898,38.12546],[70.17206,37.93276],[70.1863,37.84296],[70.27694,37.81258],[70.28243,37.66706],[70.15015,37.52519],[69.95971,37.5659],[69.93362,37.61378],[69.84435,37.60616],[69.80041,37.5746],[69.51888,37.5844],[69.44954,37.4869],[69.36645,37.40462],[69.45022,37.23315],[69.39529,37.16752],[69.25152,37.09426],[69.03274,37.25174],[68.96407,37.32603],[68.88168,37.33368],[68.91189,37.26704],[68.80889,37.32494],[68.81438,37.23862],[68.6798,37.27906],[68.61851,37.19815],[68.41888,37.13906],[68.41201,37.10402],[68.29253,37.10621],[68.27605,37.00977],[68.18542,37.02074],[68.02194,36.91923],[67.87917,37.0591],[67.7803,37.08978],[67.78329,37.1834],[67.8474,37.31594],[67.81566,37.43107],[68.12635,37.93],[68.27159,37.91477],[68.40343,38.19484],[68.13289,38.40822],[68.06274,38.39435],[68.11366,38.47169],[68.05873,38.56087],[68.0807,38.64136],[68.05598,38.71641],[68.12877,38.73677],[68.06948,38.82115],[68.19743,38.85985],[68.09704,39.02589],[67.68915,39.00775],[67.67833,39.14479],[67.33226,39.23739],[67.36522,39.31287],[67.45998,39.315],[67.46822,39.46146],[67.39681,39.52505],[67.46547,39.53564],[67.44899,39.57799],[67.62889,39.60234],[67.70992,39.66156],[68.12053,39.56317],[68.54166,39.53929],[68.61972,39.68905],[68.63071,39.85265],[68.88889,39.87163],[68.93695,39.91167],[68.84906,40.04952],[68.96579,40.06949],[69.01935,40.11466],[69.01523,40.15771],[68.62796,40.07789],[68.52771,40.11676],[68.5332,40.14826],[68.77902,40.20492],[68.79276,40.17555],[68.84357,40.18604],[68.85832,40.20885],[69.04544,40.22904],[69.15659,40.2162],[69.2074,40.21488],[69.30448,40.18774],[69.30104,40.24502],[69.25229,40.26362],[69.24817,40.30357],[69.30808,40.2821],[69.32833,40.29794],[69.33794,40.34819],[69.30774,40.36102],[69.28525,40.41894],[69.27066,40.49274],[69.21063,40.54469],[69.2643,40.57506],[69.3455,40.57988],[69.32834,40.70233],[69.38327,40.7918],[69.53021,40.77621],[69.59441,40.70181],[69.69434,40.62615],[70.36655,40.90296],[70.38028,41.02014],[70.45251,41.04438]]],[[[70.68112,40.90612],[70.6721,40.90555],[70.57501,40.98941],[70.54223,40.98787],[70.56077,41.00642],[70.6158,40.97661],[70.68112,40.90612]]],[[[70.74189,39.86319],[70.63105,39.77923],[70.59667,39.83542],[70.54998,39.85137],[70.52631,39.86989],[70.53651,39.89155],[70.74189,39.86319]]]]}},{type:"Feature",properties:{iso1A2:"AG",iso1A3:"ATG",iso1N3:"028",wikidata:"Q781",nameEn:"Antigua and Barbuda",groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 268"]},geometry:{type:"MultiPolygon",coordinates:[[[[-62.12601,17.9235],[-61.45764,17.9187],[-61.44461,16.81958],[-61.83929,16.66647],[-62.14123,17.02632],[-62.52079,16.69392],[-62.62949,16.82364],[-62.27053,17.22145],[-62.12601,17.9235]]]]}},{type:"Feature",properties:{iso1A2:"TK",iso1A3:"TKL",iso1N3:"772",wikidata:"Q36823",nameEn:"Tokelau",country:"NZ",groups:["061","009"],driveSide:"left",callingCodes:["690"]},geometry:{type:"MultiPolygon",coordinates:[[[[-167.75195,-10.12005],[-174.17993,-10.13616],[-174.18707,-7.54408],[-167.75329,-7.52784],[-167.75195,-10.12005]]]]}},{type:"Feature",properties:{iso1A2:"AT",iso1A3:"AUT",iso1N3:"040",wikidata:"Q40",nameEn:"Austria",groups:["EU","155","150"],callingCodes:["43"]},geometry:{type:"MultiPolygon",coordinates:[[[[15.34823,48.98444],[15.48027,48.94481],[15.51357,48.91549],[15.61622,48.89541],[15.6921,48.85973],[15.75341,48.8516],[15.78087,48.87644],[15.84404,48.86921],[16.06034,48.75436],[16.37345,48.729],[16.40915,48.74576],[16.46134,48.80865],[16.67008,48.77699],[16.68518,48.7281],[16.71883,48.73806],[16.79779,48.70998],[16.90354,48.71541],[16.93955,48.60371],[16.94611,48.53614],[16.85204,48.44968],[16.8497,48.38321],[16.83588,48.3844],[16.83317,48.38138],[16.84243,48.35258],[16.90903,48.32519],[16.89461,48.31332],[16.97701,48.17385],[17.02919,48.13996],[17.05735,48.14179],[17.09168,48.09366],[17.07039,48.0317],[17.16001,48.00636],[17.09786,47.97336],[17.11022,47.92461],[17.08275,47.87719],[17.00997,47.86245],[17.07039,47.81129],[17.05048,47.79377],[17.08893,47.70928],[16.87538,47.68895],[16.86509,47.72268],[16.82938,47.68432],[16.7511,47.67878],[16.72089,47.73469],[16.65679,47.74197],[16.61183,47.76171],[16.54779,47.75074],[16.53514,47.73837],[16.55129,47.72268],[16.4222,47.66537],[16.58699,47.61772],[16.64193,47.63114],[16.71059,47.52692],[16.64821,47.50155],[16.6718,47.46139],[16.57152,47.40868],[16.52414,47.41007],[16.49908,47.39416],[16.45104,47.41181],[16.47782,47.25918],[16.44142,47.25079],[16.43663,47.21127],[16.41739,47.20649],[16.42801,47.18422],[16.4523,47.18812],[16.46442,47.16845],[16.44932,47.14418],[16.52863,47.13974],[16.46134,47.09395],[16.52176,47.05747],[16.43936,47.03548],[16.51369,47.00084],[16.28202,47.00159],[16.27594,46.9643],[16.22403,46.939],[16.19904,46.94134],[16.10983,46.867],[16.05786,46.83927],[15.99054,46.82772],[15.99126,46.78199],[15.98432,46.74991],[15.99769,46.7266],[16.02808,46.71094],[16.04347,46.68694],[16.04036,46.6549],[15.99988,46.67947],[15.98512,46.68463],[15.94864,46.68769],[15.87691,46.7211],[15.8162,46.71897],[15.78518,46.70712],[15.76771,46.69863],[15.73823,46.70011],[15.72279,46.69548],[15.69523,46.69823],[15.67411,46.70735],[15.6543,46.70616],[15.6543,46.69228],[15.6365,46.6894],[15.63255,46.68069],[15.62317,46.67947],[15.59826,46.68908],[15.54533,46.66985],[15.55333,46.64988],[15.54431,46.6312],[15.46906,46.61321],[15.45514,46.63697],[15.41235,46.65556],[15.23711,46.63994],[15.14215,46.66131],[15.01451,46.641],[14.98024,46.6009],[14.96002,46.63459],[14.92283,46.60848],[14.87129,46.61],[14.86419,46.59411],[14.83549,46.56614],[14.81836,46.51046],[14.72185,46.49974],[14.66892,46.44936],[14.5942,46.43434],[14.56463,46.37208],[14.52176,46.42617],[14.45877,46.41717],[14.42608,46.44614],[14.314,46.43327],[14.28326,46.44315],[14.15989,46.43327],[14.12097,46.47724],[14.04002,46.49117],[14.00422,46.48474],[13.89837,46.52331],[13.7148,46.5222],[13.64088,46.53438],[13.27627,46.56059],[12.94445,46.60401],[12.59992,46.6595],[12.38708,46.71529],[12.27591,46.88651],[12.2006,46.88854],[12.11675,47.01241],[12.21781,47.03996],[12.19254,47.09331],[11.74789,46.98484],[11.50739,47.00644],[11.33355,46.99862],[11.10618,46.92966],[11.00764,46.76896],[10.72974,46.78972],[10.75753,46.82258],[10.66405,46.87614],[10.54783,46.84505],[10.47197,46.85698],[10.48376,46.93891],[10.36933,47.00212],[10.30031,46.92093],[10.24128,46.93147],[10.22675,46.86942],[10.10715,46.84296],[9.98058,46.91434],[9.88266,46.93343],[9.87935,47.01337],[9.60717,47.06091],[9.61216,47.07732],[9.63395,47.08443],[9.62623,47.14685],[9.56539,47.17124],[9.58264,47.20673],[9.56981,47.21926],[9.55176,47.22585],[9.56766,47.24281],[9.53116,47.27029],[9.54773,47.2809],[9.55857,47.29919],[9.58513,47.31334],[9.59978,47.34671],[9.62476,47.36639],[9.65427,47.36824],[9.66243,47.37136],[9.6711,47.37824],[9.67445,47.38429],[9.67334,47.39191],[9.6629,47.39591],[9.65136,47.40504],[9.65043,47.41937],[9.6446,47.43233],[9.64483,47.43842],[9.65863,47.44847],[9.65728,47.45383],[9.6423,47.45599],[9.62475,47.45685],[9.62158,47.45858],[9.60841,47.47178],[9.60484,47.46358],[9.60205,47.46165],[9.59482,47.46305],[9.58208,47.48344],[9.56312,47.49495],[9.55125,47.53629],[9.72736,47.53457],[9.76748,47.5934],[9.80254,47.59419],[9.82591,47.58158],[9.8189,47.54688],[9.87499,47.52953],[9.87733,47.54688],[9.92407,47.53111],[9.96029,47.53899],[10.00003,47.48216],[10.03859,47.48927],[10.07131,47.45531],[10.09001,47.46005],[10.1052,47.4316],[10.06897,47.40709],[10.09819,47.35724],[10.11805,47.37228],[10.16362,47.36674],[10.17648,47.38889],[10.2127,47.38019],[10.22774,47.38904],[10.23757,47.37609],[10.19998,47.32832],[10.2147,47.31014],[10.17648,47.29149],[10.17531,47.27167],[10.23257,47.27088],[10.33424,47.30813],[10.39851,47.37623],[10.4324,47.38494],[10.4359,47.41183],[10.47446,47.43318],[10.46278,47.47901],[10.44291,47.48453],[10.4324,47.50111],[10.44992,47.5524],[10.43473,47.58394],[10.47329,47.58552],[10.48849,47.54057],[10.56912,47.53584],[10.60337,47.56755],[10.63456,47.5591],[10.68832,47.55752],[10.6965,47.54253],[10.7596,47.53228],[10.77596,47.51729],[10.88814,47.53701],[10.91268,47.51334],[10.86945,47.5015],[10.87061,47.4786],[10.90918,47.48571],[10.93839,47.48018],[10.92437,47.46991],[10.98513,47.42882],[10.97111,47.41617],[10.97111,47.39561],[11.11835,47.39719],[11.12536,47.41222],[11.20482,47.43198],[11.25157,47.43277],[11.22002,47.3964],[11.27844,47.39956],[11.29597,47.42566],[11.33804,47.44937],[11.4175,47.44621],[11.38128,47.47465],[11.4362,47.51413],[11.52618,47.50939],[11.58578,47.52281],[11.58811,47.55515],[11.60681,47.57881],[11.63934,47.59202],[11.84052,47.58354],[11.85572,47.60166],[12.0088,47.62451],[12.02282,47.61033],[12.05788,47.61742],[12.13734,47.60639],[12.17824,47.61506],[12.18145,47.61019],[12.17737,47.60121],[12.18568,47.6049],[12.20398,47.60667],[12.20801,47.61082],[12.19895,47.64085],[12.18507,47.65984],[12.18347,47.66663],[12.16769,47.68167],[12.16217,47.70105],[12.18303,47.70065],[12.22571,47.71776],[12.2542,47.7433],[12.26238,47.73544],[12.24017,47.69534],[12.26004,47.67725],[12.27991,47.68827],[12.336,47.69534],[12.37222,47.68433],[12.43883,47.6977],[12.44117,47.6741],[12.50076,47.62293],[12.53816,47.63553],[12.57438,47.63238],[12.6071,47.6741],[12.7357,47.6787],[12.77777,47.66689],[12.76492,47.64485],[12.82101,47.61493],[12.77427,47.58025],[12.80699,47.54477],[12.84672,47.54556],[12.85256,47.52741],[12.9624,47.47452],[12.98344,47.48716],[12.9998,47.46267],[13.04537,47.49426],[13.03252,47.53373],[13.05355,47.56291],[13.04537,47.58183],[13.06641,47.58577],[13.06407,47.60075],[13.09562,47.63304],[13.07692,47.68814],[13.01382,47.72116],[12.98578,47.7078],[12.92969,47.71094],[12.91333,47.7178],[12.90274,47.72513],[12.91711,47.74026],[12.9353,47.74788],[12.94371,47.76281],[12.93202,47.77302],[12.96311,47.79957],[12.98543,47.82896],[13.00588,47.84374],[12.94163,47.92927],[12.93886,47.94046],[12.93642,47.94436],[12.93419,47.94063],[12.92668,47.93879],[12.91985,47.94069],[12.9211,47.95135],[12.91683,47.95647],[12.87476,47.96195],[12.8549,48.01122],[12.76141,48.07373],[12.74973,48.10885],[12.7617,48.12796],[12.78595,48.12445],[12.80676,48.14979],[12.82673,48.15245],[12.8362,48.15876],[12.836,48.1647],[12.84475,48.16556],[12.87126,48.20318],[12.95306,48.20629],[13.02083,48.25689],[13.0851,48.27711],[13.126,48.27867],[13.18093,48.29577],[13.26039,48.29422],[13.30897,48.31575],[13.40709,48.37292],[13.43929,48.43386],[13.42527,48.45711],[13.45727,48.51092],[13.43695,48.55776],[13.45214,48.56472],[13.46967,48.55157],[13.50663,48.57506],[13.50131,48.58091],[13.51291,48.59023],[13.57535,48.55912],[13.59705,48.57013],[13.62508,48.55501],[13.65186,48.55092],[13.66113,48.53558],[13.72802,48.51208],[13.74816,48.53058],[13.7513,48.5624],[13.76921,48.55324],[13.80519,48.58026],[13.80038,48.59487],[13.82609,48.62345],[13.81901,48.6761],[13.81283,48.68426],[13.81791,48.69832],[13.79337,48.71375],[13.81863,48.73257],[13.82266,48.75544],[13.84023,48.76988],[14.06151,48.66873],[14.01482,48.63788],[14.09104,48.5943],[14.20691,48.5898],[14.33909,48.55852],[14.43076,48.58855],[14.4587,48.64695],[14.56139,48.60429],[14.60808,48.62881],[14.66762,48.58215],[14.71794,48.59794],[14.72756,48.69502],[14.80584,48.73489],[14.80821,48.77711],[14.81545,48.7874],[14.94773,48.76268],[14.95641,48.75915],[14.9758,48.76857],[14.98112,48.77524],[14.9782,48.7766],[14.98032,48.77959],[14.95072,48.79101],[14.98917,48.90082],[14.97612,48.96983],[14.99878,49.01444],[15.15534,48.99056],[15.16358,48.94278],[15.26177,48.95766],[15.28305,48.98831],[15.34823,48.98444]]]]}},{type:"Feature",properties:{iso1A2:"TL",iso1A3:"TLS",iso1N3:"626",wikidata:"Q574",nameEn:"East Timor",aliases:["Timor-Leste","TP"],groups:["035","142"],driveSide:"left",callingCodes:["670"]},geometry:{type:"MultiPolygon",coordinates:[[[[124.46701,-9.13002],[124.45971,-9.30263],[124.38554,-9.3582],[124.35258,-9.43002],[124.3535,-9.48493],[124.28115,-9.50453],[124.28115,-9.42189],[124.21247,-9.36904],[124.14517,-9.42324],[124.10539,-9.41206],[124.04286,-9.34243],[124.04628,-9.22671],[124.33472,-9.11416],[124.92337,-8.75859],[125.31127,-8.22976],[125.65946,-8.06136],[125.87691,-8.31789],[127.42116,-8.22471],[127.55165,-9.05052],[125.68138,-9.85176],[125.09025,-9.46406],[124.97892,-9.19281],[125.04044,-9.17093],[125.09434,-9.19669],[125.18907,-9.16434],[125.18632,-9.03142],[125.11764,-8.96359],[124.97742,-9.08128],[124.94011,-8.85617],[124.46701,-9.13002]]]]}},{type:"Feature",properties:{iso1A2:"BE",iso1A3:"BEL",iso1N3:"056",wikidata:"Q31",nameEn:"Belgium",groups:["EU","155","150"],callingCodes:["32"]},geometry:{type:"MultiPolygon",coordinates:[[[[4.93295,51.44945],[4.95244,51.45207],[4.9524,51.45014],[4.93909,51.44632],[4.93295,51.44945]]],[[[4.91493,51.4353],[4.91935,51.43634],[4.92227,51.44252],[4.91811,51.44621],[4.92287,51.44741],[4.92811,51.4437],[4.92566,51.44273],[4.92815,51.43856],[4.92879,51.44161],[4.93544,51.44634],[4.94025,51.44193],[4.93416,51.44185],[4.93471,51.43861],[4.94265,51.44003],[4.93986,51.43064],[4.92952,51.42984],[4.92652,51.43329],[4.91493,51.4353]]],[[[4.82946,51.4213],[4.78314,51.43319],[4.76577,51.43046],[4.77229,51.41337],[4.78941,51.41102],[4.84988,51.41502],[4.90016,51.41404],[4.92152,51.39487],[5.00393,51.44406],[5.0106,51.47167],[5.03281,51.48679],[5.04774,51.47022],[5.07891,51.4715],[5.10456,51.43163],[5.07102,51.39469],[5.13105,51.34791],[5.13377,51.31592],[5.16222,51.31035],[5.2002,51.32243],[5.24244,51.30495],[5.22542,51.26888],[5.23814,51.26064],[5.26461,51.26693],[5.29716,51.26104],[5.33886,51.26314],[5.347,51.27502],[5.41672,51.26248],[5.4407,51.28169],[5.46519,51.2849],[5.48476,51.30053],[5.515,51.29462],[5.5569,51.26544],[5.5603,51.22249],[5.65145,51.19788],[5.65528,51.18736],[5.70344,51.1829],[5.74617,51.18928],[5.77735,51.17845],[5.77697,51.1522],[5.82564,51.16753],[5.85508,51.14445],[5.80798,51.11661],[5.8109,51.10861],[5.83226,51.10585],[5.82921,51.09328],[5.79903,51.09371],[5.79835,51.05834],[5.77258,51.06196],[5.75961,51.03113],[5.77688,51.02483],[5.76242,50.99703],[5.71864,50.96092],[5.72875,50.95428],[5.74752,50.96202],[5.75927,50.95601],[5.74644,50.94723],[5.72545,50.92312],[5.72644,50.91167],[5.71626,50.90796],[5.69858,50.91046],[5.67886,50.88142],[5.64504,50.87107],[5.64009,50.84742],[5.65259,50.82309],[5.70118,50.80764],[5.68995,50.79641],[5.70107,50.7827],[5.68091,50.75804],[5.69469,50.75529],[5.72216,50.76398],[5.73904,50.75674],[5.74356,50.7691],[5.76533,50.78159],[5.77513,50.78308],[5.80673,50.7558],[5.84548,50.76542],[5.84888,50.75448],[5.88734,50.77092],[5.89129,50.75125],[5.89132,50.75124],[5.95942,50.7622],[5.97545,50.75441],[6.01976,50.75398],[6.03889,50.74618],[6.0326,50.72647],[6.0406,50.71848],[6.04428,50.72861],[6.11707,50.72231],[6.17852,50.6245],[6.26957,50.62444],[6.2476,50.60392],[6.24888,50.59869],[6.24005,50.58732],[6.22581,50.5907],[6.20281,50.56952],[6.17739,50.55875],[6.17802,50.54179],[6.19735,50.53576],[6.19579,50.5313],[6.18716,50.52653],[6.19193,50.5212],[6.20599,50.52089],[6.22335,50.49578],[6.26637,50.50272],[6.30809,50.50058],[6.3465,50.48833],[6.34005,50.46083],[6.37219,50.45397],[6.36852,50.40776],[6.34406,50.37994],[6.3688,50.35898],[6.40785,50.33557],[6.40641,50.32425],[6.35701,50.31139],[6.32488,50.32333],[6.29949,50.30887],[6.28797,50.27458],[6.208,50.25179],[6.16853,50.2234],[6.18364,50.20815],[6.18739,50.1822],[6.14588,50.17106],[6.14132,50.14971],[6.15298,50.14126],[6.1379,50.12964],[6.1137,50.13668],[6.12028,50.16374],[6.08577,50.17246],[6.06406,50.15344],[6.03093,50.16362],[6.02488,50.18283],[5.96453,50.17259],[5.95929,50.13295],[5.89488,50.11476],[5.8857,50.07824],[5.85474,50.06342],[5.86904,50.04614],[5.8551,50.02683],[5.81866,50.01286],[5.82331,49.99662],[5.83968,49.9892],[5.83467,49.97823],[5.81163,49.97142],[5.80833,49.96451],[5.77291,49.96056],[5.77314,49.93646],[5.73621,49.89796],[5.78415,49.87922],[5.75269,49.8711],[5.75861,49.85631],[5.74567,49.85368],[5.75884,49.84811],[5.74953,49.84709],[5.74975,49.83933],[5.74076,49.83823],[5.7404,49.83452],[5.74844,49.82435],[5.74364,49.82058],[5.74953,49.81428],[5.75409,49.79239],[5.78871,49.7962],[5.82245,49.75048],[5.83149,49.74729],[5.82562,49.72395],[5.84193,49.72161],[5.86503,49.72739],[5.88677,49.70951],[5.86527,49.69291],[5.86175,49.67862],[5.9069,49.66377],[5.90164,49.6511],[5.90599,49.63853],[5.88552,49.63507],[5.88393,49.62802],[5.87609,49.62047],[5.8762,49.60898],[5.84826,49.5969],[5.84971,49.58674],[5.86986,49.58756],[5.87256,49.57539],[5.8424,49.56082],[5.84692,49.55663],[5.84143,49.5533],[5.81838,49.54777],[5.79195,49.55228],[5.77435,49.56298],[5.7577,49.55915],[5.75649,49.54321],[5.64505,49.55146],[5.60909,49.51228],[5.55001,49.52729],[5.46541,49.49825],[5.46734,49.52648],[5.43713,49.5707],[5.3974,49.61596],[5.34837,49.62889],[5.33851,49.61599],[5.3137,49.61225],[5.30214,49.63055],[5.33039,49.6555],[5.31465,49.66846],[5.26232,49.69456],[5.14545,49.70287],[5.09249,49.76193],[4.96714,49.79872],[4.85464,49.78995],[4.86965,49.82271],[4.85134,49.86457],[4.88529,49.9236],[4.78827,49.95609],[4.8382,50.06738],[4.88602,50.15182],[4.83279,50.15331],[4.82438,50.16878],[4.75237,50.11314],[4.70064,50.09384],[4.68695,49.99685],[4.5414,49.96911],[4.51098,49.94659],[4.43488,49.94122],[4.35051,49.95315],[4.31963,49.97043],[4.20532,49.95803],[4.14239,49.98034],[4.13508,50.01976],[4.16294,50.04719],[4.23101,50.06945],[4.20147,50.13535],[4.13561,50.13078],[4.16014,50.19239],[4.15524,50.21103],[4.21945,50.25539],[4.20651,50.27333],[4.17861,50.27443],[4.17347,50.28838],[4.15524,50.2833],[4.16808,50.25786],[4.13665,50.25609],[4.11954,50.30425],[4.10957,50.30234],[4.10237,50.31247],[4.0689,50.3254],[4.0268,50.35793],[3.96771,50.34989],[3.90781,50.32814],[3.84314,50.35219],[3.73911,50.34809],[3.70987,50.3191],[3.71009,50.30305],[3.66976,50.34563],[3.65709,50.36873],[3.67262,50.38663],[3.67494,50.40239],[3.66153,50.45165],[3.64426,50.46275],[3.61014,50.49568],[3.58361,50.49049],[3.5683,50.50192],[3.49509,50.48885],[3.51564,50.5256],[3.47385,50.53397],[3.44629,50.51009],[3.37693,50.49538],[3.28575,50.52724],[3.2729,50.60718],[3.23951,50.6585],[3.264,50.67668],[3.2536,50.68977],[3.26141,50.69151],[3.26063,50.70086],[3.24593,50.71389],[3.22042,50.71019],[3.20845,50.71662],[3.19017,50.72569],[3.20064,50.73547],[3.18811,50.74025],[3.18339,50.74981],[3.16476,50.76843],[3.15017,50.79031],[3.1257,50.78603],[3.11987,50.79188],[3.11206,50.79416],[3.10614,50.78303],[3.09163,50.77717],[3.04314,50.77674],[3.00537,50.76588],[2.96778,50.75242],[2.95019,50.75138],[2.90873,50.702],[2.91036,50.6939],[2.90069,50.69263],[2.88504,50.70656],[2.87937,50.70298],[2.86985,50.7033],[2.8483,50.72276],[2.81056,50.71773],[2.71165,50.81295],[2.63331,50.81457],[2.59093,50.91751],[2.63074,50.94746],[2.57551,51.00326],[2.55904,51.07014],[2.18458,51.52087],[2.56575,51.85301],[3.36263,51.37112],[3.38696,51.33436],[3.35847,51.31572],[3.38289,51.27331],[3.41704,51.25933],[3.43488,51.24135],[3.52698,51.2458],[3.51502,51.28697],[3.58939,51.30064],[3.78999,51.25766],[3.78783,51.2151],[3.90125,51.20371],[3.97889,51.22537],[4.01957,51.24504],[4.05165,51.24171],[4.16721,51.29348],[4.24024,51.35371],[4.21923,51.37443],[4.33265,51.37687],[4.34086,51.35738],[4.39292,51.35547],[4.43777,51.36989],[4.38064,51.41965],[4.39747,51.43316],[4.38122,51.44905],[4.47736,51.4778],[4.5388,51.48184],[4.54675,51.47265],[4.52846,51.45002],[4.53521,51.4243],[4.57489,51.4324],[4.65442,51.42352],[4.72935,51.48424],[4.74578,51.48937],[4.77321,51.50529],[4.78803,51.50284],[4.84139,51.4799],[4.82409,51.44736],[4.82946,51.4213]]]]}},{type:"Feature",properties:{iso1A2:"TM",iso1A3:"TKM",iso1N3:"795",wikidata:"Q874",nameEn:"Turkmenistan",groups:["143","142"],callingCodes:["993"]},geometry:{type:"MultiPolygon",coordinates:[[[[60.5078,41.21694],[61.03261,41.25691],[61.22212,41.14946],[61.33199,41.14946],[61.39732,41.19873],[61.4446,41.29407],[61.87856,41.12257],[62.11751,40.58242],[62.34273,40.43206],[62.43337,39.98528],[63.6913,39.27666],[63.70778,39.22349],[64.19086,38.95561],[64.32576,38.98691],[65.55873,38.29052],[65.83913,38.25733],[66.24013,38.16238],[66.41042,38.02403],[66.56697,38.0435],[66.67684,37.96776],[66.53676,37.80084],[66.52852,37.58568],[66.65761,37.45497],[66.52303,37.39827],[66.55743,37.35409],[66.30993,37.32409],[65.72274,37.55438],[65.64137,37.45061],[65.64263,37.34388],[65.51778,37.23881],[64.97945,37.21913],[64.61141,36.6351],[64.62514,36.44311],[64.57295,36.34362],[64.43288,36.24401],[64.05385,36.10433],[63.98519,36.03773],[63.56496,35.95106],[63.53475,35.90881],[63.29579,35.85985],[63.12276,35.86208],[63.10318,35.81782],[63.23262,35.67487],[63.10079,35.63024],[63.12276,35.53196],[63.0898,35.43131],[62.90853,35.37086],[62.74098,35.25432],[62.62288,35.22067],[62.48006,35.28796],[62.29878,35.13312],[62.29191,35.25964],[62.15871,35.33278],[62.05709,35.43803],[61.97743,35.4604],[61.77693,35.41341],[61.58742,35.43803],[61.27371,35.61482],[61.22719,35.67038],[61.26152,35.80749],[61.22444,35.92879],[61.12007,35.95992],[61.22719,36.12759],[61.1393,36.38782],[61.18187,36.55348],[61.14516,36.64644],[60.34767,36.63214],[60.00768,37.04102],[59.74678,37.12499],[59.55178,37.13594],[59.39385,37.34257],[59.39797,37.47892],[59.33507,37.53146],[59.22905,37.51161],[58.9338,37.67374],[58.6921,37.64548],[58.5479,37.70526],[58.47786,37.6433],[58.39959,37.63134],[58.22999,37.6856],[58.21399,37.77281],[57.79534,37.89299],[57.35042,37.98546],[57.37236,38.09321],[57.21169,38.28965],[57.03453,38.18717],[56.73928,38.27887],[56.62255,38.24005],[56.43303,38.26054],[56.32454,38.18502],[56.33278,38.08132],[55.97847,38.08024],[55.76561,38.12238],[55.44152,38.08564],[55.13412,37.94705],[54.851,37.75739],[54.77684,37.62264],[54.81804,37.61285],[54.77822,37.51597],[54.67247,37.43532],[54.58664,37.45809],[54.36211,37.34912],[54.24565,37.32047],[53.89734,37.3464],[51.7708,40.29239],[52.26048,41.69249],[52.47884,41.78034],[52.97575,42.1308],[54.20635,42.38477],[54.95182,41.92424],[55.45471,41.25609],[56.00314,41.32584],[57.03423,41.25435],[57.13796,41.36625],[57.03359,41.41777],[56.96218,41.80383],[57.03633,41.92043],[57.30275,42.14076],[57.6296,42.16519],[57.84932,42.18555],[57.92897,42.24047],[57.90975,42.4374],[57.99214,42.50021],[58.3492,42.43335],[58.40688,42.29535],[58.51674,42.30348],[58.29427,42.56497],[58.14321,42.62159],[58.27504,42.69632],[58.57991,42.64988],[58.6266,42.79314],[58.93422,42.5407],[59.17317,42.52248],[59.2955,42.37064],[59.4341,42.29738],[59.94633,42.27655],[60.00539,42.212],[59.96419,42.1428],[60.04659,42.08982],[60.0356,42.01028],[59.95046,41.97966],[60.33223,41.75058],[60.08504,41.80997],[60.06032,41.76287],[60.18117,41.60082],[60.06581,41.4363],[60.5078,41.21694]]]]}},{type:"Feature",properties:{iso1A2:"BN",iso1A3:"BRN",iso1N3:"096",wikidata:"Q921",nameEn:"Brunei",groups:["035","142"],driveSide:"left",callingCodes:["673"]},geometry:{type:"MultiPolygon",coordinates:[[[[115.16236,5.01011],[115.15092,4.87604],[115.20737,4.8256],[115.27819,4.63661],[115.2851,4.42295],[115.36346,4.33563],[115.31275,4.30806],[115.09978,4.39123],[115.07737,4.53418],[115.04064,4.63706],[115.02278,4.74137],[115.02955,4.82087],[115.05038,4.90275],[114.99417,4.88201],[114.96982,4.81146],[114.88841,4.81905],[114.8266,4.75062],[114.77303,4.72871],[114.83189,4.42387],[114.88039,4.4257],[114.78539,4.12205],[114.64211,4.00694],[114.49922,4.13108],[114.4416,4.27588],[114.32176,4.2552],[114.32176,4.34942],[114.26876,4.49878],[114.15813,4.57],[114.07448,4.58441],[114.08532,4.64632],[115.02521,5.35005],[115.16236,5.01011]]]]}},{type:"Feature",properties:{iso1A2:"TN",iso1A3:"TUN",iso1N3:"788",wikidata:"Q948",nameEn:"Tunisia",groups:["015","002"],callingCodes:["216"]},geometry:{type:"MultiPolygon",coordinates:[[[[11.2718,37.6713],[11.66543,33.34642],[11.56255,33.16754],[11.55852,33.1409],[11.51549,33.09826],[11.46037,32.6307],[11.57828,32.48013],[11.53898,32.4138],[11.04234,32.2145],[10.7315,31.97235],[10.62788,31.96629],[10.48497,31.72956],[10.31364,31.72648],[10.12239,31.42098],[10.29516,30.90337],[9.88152,30.34074],[9.76848,30.34366],[9.55544,30.23971],[9.07483,32.07865],[8.35999,32.50101],[8.31895,32.83483],[8.1179,33.05086],[8.11433,33.10175],[7.83028,33.18851],[7.73687,33.42114],[7.54088,33.7726],[7.52851,34.06493],[7.66174,34.20167],[7.74207,34.16492],[7.81242,34.21841],[7.86264,34.3987],[8.20482,34.57575],[8.29655,34.72798],[8.25189,34.92009],[8.30727,34.95378],[8.3555,35.10007],[8.47318,35.23376],[8.30329,35.29884],[8.36086,35.47774],[8.35371,35.66373],[8.26472,35.73669],[8.2626,35.91733],[8.40731,36.42208],[8.18936,36.44939],[8.16167,36.48817],[8.47609,36.66607],[8.46537,36.7706],[8.57613,36.78062],[8.67706,36.8364],[8.62972,36.86499],[8.64044,36.9401],[8.59123,37.14286],[7.89009,38.19924],[11.2718,37.6713]]]]}},{type:"Feature",properties:{iso1A2:"BY",iso1A3:"BLR",iso1N3:"112",wikidata:"Q184",nameEn:"Belarus",groups:["151","150"],callingCodes:["375"]},geometry:{type:"MultiPolygon",coordinates:[[[[28.15217,56.16964],[28.30571,56.06035],[28.36888,56.05805],[28.37987,56.11399],[28.43068,56.09407],[28.5529,56.11705],[28.68337,56.10173],[28.63668,56.07262],[28.73418,55.97131],[29.08299,56.03427],[29.21717,55.98971],[29.44692,55.95978],[29.3604,55.75862],[29.51283,55.70294],[29.61446,55.77716],[29.80672,55.79569],[29.97975,55.87281],[30.12136,55.8358],[30.27776,55.86819],[30.30987,55.83592],[30.48257,55.81066],[30.51346,55.78982],[30.51037,55.76568],[30.63344,55.73079],[30.67464,55.64176],[30.72957,55.66268],[30.7845,55.58514],[30.86003,55.63169],[30.93419,55.6185],[30.95204,55.50667],[30.90123,55.46621],[30.93144,55.3914],[30.8257,55.3313],[30.81946,55.27931],[30.87944,55.28223],[30.97369,55.17134],[31.02071,55.06167],[31.00972,55.02783],[30.94243,55.03964],[30.9081,55.02232],[30.95754,54.98609],[30.93144,54.9585],[30.81759,54.94064],[30.8264,54.90062],[30.75165,54.80699],[30.95479,54.74346],[30.97127,54.71967],[31.0262,54.70698],[30.98226,54.68872],[30.99187,54.67046],[31.19339,54.66947],[31.21399,54.63113],[31.08543,54.50361],[31.22945,54.46585],[31.3177,54.34067],[31.30791,54.25315],[31.57002,54.14535],[31.89599,54.0837],[31.88744,54.03653],[31.85019,53.91801],[31.77028,53.80015],[31.89137,53.78099],[32.12621,53.81586],[32.36663,53.7166],[32.45717,53.74039],[32.50112,53.68594],[32.40499,53.6656],[32.47777,53.5548],[32.74968,53.45597],[32.73257,53.33494],[32.51725,53.28431],[32.40773,53.18856],[32.15368,53.07594],[31.82373,53.10042],[31.787,53.18033],[31.62496,53.22886],[31.56316,53.19432],[31.40523,53.21406],[31.36403,53.13504],[31.3915,53.09712],[31.33519,53.08805],[31.32283,53.04101],[31.24147,53.031],[31.35667,52.97854],[31.592,52.79011],[31.57277,52.71613],[31.50406,52.69707],[31.63869,52.55361],[31.56316,52.51518],[31.61397,52.48843],[31.62084,52.33849],[31.57971,52.32146],[31.70735,52.26711],[31.6895,52.1973],[31.77877,52.18636],[31.7822,52.11406],[31.38326,52.12991],[31.25142,52.04131],[31.13332,52.1004],[30.95589,52.07775],[30.90897,52.00699],[30.76443,51.89739],[30.68804,51.82806],[30.51946,51.59649],[30.64992,51.35014],[30.56203,51.25655],[30.36153,51.33984],[30.34642,51.42555],[30.17888,51.51025],[29.77376,51.4461],[29.7408,51.53417],[29.54372,51.48372],[29.49773,51.39814],[29.42357,51.4187],[29.32881,51.37843],[29.25191,51.49828],[29.25603,51.57089],[29.20659,51.56918],[29.16402,51.64679],[29.1187,51.65872],[28.99098,51.56833],[28.95528,51.59222],[28.81795,51.55552],[28.76027,51.48802],[28.78224,51.45294],[28.75615,51.41442],[28.73143,51.46236],[28.69161,51.44695],[28.64429,51.5664],[28.47051,51.59734],[28.37592,51.54505],[28.23452,51.66988],[28.10658,51.57857],[27.95827,51.56065],[27.91844,51.61952],[27.85253,51.62293],[27.76052,51.47604],[27.67125,51.50854],[27.71932,51.60672],[27.55727,51.63486],[27.51058,51.5854],[27.47212,51.61184],[27.24828,51.60161],[27.26613,51.65957],[27.20948,51.66713],[27.20602,51.77291],[26.99422,51.76933],[26.9489,51.73788],[26.80043,51.75777],[26.69759,51.82284],[26.46962,51.80501],[26.39367,51.87315],[26.19084,51.86781],[26.00408,51.92967],[25.83217,51.92587],[25.80574,51.94556],[25.73673,51.91973],[25.46163,51.92205],[25.20228,51.97143],[24.98784,51.91273],[24.37123,51.88222],[24.29021,51.80841],[24.3163,51.75063],[24.13075,51.66979],[23.99907,51.58369],[23.8741,51.59734],[23.91118,51.63316],[23.7766,51.66809],[23.60906,51.62122],[23.6736,51.50255],[23.62751,51.50512],[23.56236,51.53673],[23.57053,51.55938],[23.53198,51.74298],[23.62691,51.78208],[23.61523,51.92066],[23.68733,51.9906],[23.64066,52.07626],[23.61,52.11264],[23.54314,52.12148],[23.47859,52.18215],[23.20071,52.22848],[23.18196,52.28812],[23.34141,52.44845],[23.45112,52.53774],[23.58296,52.59868],[23.73615,52.6149],[23.93763,52.71332],[23.91805,52.94016],[23.94689,52.95919],[23.92184,53.02079],[23.87548,53.0831],[23.91393,53.16469],[23.85657,53.22923],[23.81995,53.24131],[23.62004,53.60942],[23.51284,53.95052],[23.61677,53.92691],[23.71726,53.93379],[23.80543,53.89558],[23.81309,53.94205],[23.95098,53.9613],[23.98837,53.92554],[24.19638,53.96405],[24.34128,53.90076],[24.44411,53.90076],[24.62275,54.00217],[24.69652,54.01901],[24.69185,53.96543],[24.74279,53.96663],[24.85311,54.02862],[24.77131,54.11091],[24.96894,54.17589],[24.991,54.14241],[25.0728,54.13419],[25.19199,54.219],[25.22705,54.26271],[25.35559,54.26544],[25.509,54.30267],[25.56823,54.25212],[25.51452,54.17799],[25.54724,54.14925],[25.64875,54.1259],[25.71084,54.16704],[25.78563,54.15747],[25.78553,54.23327],[25.68513,54.31727],[25.55425,54.31591],[25.5376,54.33158],[25.63371,54.42075],[25.62203,54.4656],[25.64813,54.48704],[25.68045,54.5321],[25.75977,54.57252],[25.74122,54.80108],[25.89462,54.93438],[25.99129,54.95705],[26.05907,54.94631],[26.13386,54.98924],[26.20397,54.99729],[26.26941,55.08032],[26.23202,55.10439],[26.30628,55.12536],[26.35121,55.1525],[26.46249,55.12814],[26.51481,55.16051],[26.54753,55.14181],[26.69243,55.16718],[26.68075,55.19787],[26.72983,55.21788],[26.73017,55.24226],[26.835,55.28182],[26.83266,55.30444],[26.80929,55.31642],[26.6714,55.33902],[26.5709,55.32572],[26.44937,55.34832],[26.5522,55.40277],[26.55094,55.5093],[26.63167,55.57887],[26.63231,55.67968],[26.64888,55.70515],[26.71802,55.70645],[26.76872,55.67658],[26.87448,55.7172],[26.97153,55.8102],[27.1559,55.85032],[27.27804,55.78299],[27.3541,55.8089],[27.61683,55.78558],[27.63065,55.89687],[27.97865,56.11849],[28.15217,56.16964]]]]}},{type:"Feature",properties:{iso1A2:"TO",iso1A3:"TON",iso1N3:"776",wikidata:"Q678",nameEn:"Tonga",groups:["061","009"],driveSide:"left",callingCodes:["676"]},geometry:{type:"MultiPolygon",coordinates:[[[[-176.74538,-22.89767],[-176.76826,-14.95183],[-174.17905,-14.94502],[-173.13438,-14.94228],[-173.11048,-23.23027],[-173.10761,-24.19665],[-180,-24.21376],[-180,-22.90585],[-176.74538,-22.89767]]]]}},{type:"Feature",properties:{iso1A2:"CI",iso1A3:"CIV",iso1N3:"384",wikidata:"Q1008",nameEn:"Côte d'Ivoire",groups:["011","202","002"],callingCodes:["225"]},geometry:{type:"MultiPolygon",coordinates:[[[[-7.52774,3.7105],[-7.53259,4.35145],[-7.59349,4.8909],[-7.53876,4.94294],[-7.55369,5.08667],[-7.48901,5.14118],[-7.46165,5.26256],[-7.36463,5.32944],[-7.43428,5.42355],[-7.37209,5.61173],[-7.43926,5.74787],[-7.43677,5.84687],[-7.46165,5.84934],[-7.48155,5.80974],[-7.67309,5.94337],[-7.70294,5.90625],[-7.78254,5.99037],[-7.79747,6.07696],[-7.8497,6.08932],[-7.83478,6.20309],[-7.90692,6.27728],[-8.00642,6.31684],[-8.17557,6.28222],[-8.3298,6.36381],[-8.38453,6.35887],[-8.45666,6.49977],[-8.48652,6.43797],[-8.59456,6.50612],[-8.31736,6.82837],[-8.29249,7.1691],[-8.37458,7.25794],[-8.41935,7.51203],[-8.47114,7.55676],[-8.4003,7.6285],[-8.21374,7.54466],[-8.09931,7.78626],[-8.13414,7.87991],[-8.06449,8.04989],[-7.94695,8.00925],[-7.99919,8.11023],[-7.98675,8.20134],[-8.062,8.16071],[-8.2411,8.24196],[-8.22991,8.48438],[-7.92518,8.50652],[-7.65653,8.36873],[-7.69882,8.66148],[-7.95503,8.81146],[-7.92518,8.99332],[-7.73862,9.08422],[-7.90777,9.20456],[-7.85056,9.41812],[-8.03463,9.39604],[-8.14657,9.55062],[-8.09434,9.86936],[-8.15652,9.94288],[-8.11921,10.04577],[-8.01225,10.1021],[-7.97971,10.17117],[-7.92107,10.15577],[-7.63048,10.46334],[-7.54462,10.40921],[-7.52261,10.4655],[-7.44555,10.44602],[-7.3707,10.24677],[-7.13331,10.24877],[-7.0603,10.14711],[-7.00966,10.15794],[-6.97444,10.21644],[-7.01186,10.25111],[-6.93921,10.35291],[-6.68164,10.35074],[-6.63541,10.66893],[-6.52974,10.59104],[-6.42847,10.5694],[-6.40646,10.69922],[-6.325,10.68624],[-6.24795,10.74248],[-6.1731,10.46983],[-6.18851,10.24244],[-5.99478,10.19694],[-5.78124,10.43952],[-5.65135,10.46767],[-5.51058,10.43177],[-5.39602,10.2929],[-5.12465,10.29788],[-4.96453,9.99923],[-4.96621,9.89132],[-4.6426,9.70696],[-4.31392,9.60062],[-4.25999,9.76012],[-3.69703,9.94279],[-3.31779,9.91125],[-3.27228,9.84981],[-3.19306,9.93781],[-3.16609,9.85147],[-3.00765,9.74019],[-2.93012,9.57403],[-2.76494,9.40778],[-2.68802,9.49343],[-2.69814,9.22717],[-2.77799,9.04949],[-2.66357,9.01771],[-2.58243,8.7789],[-2.49037,8.20872],[-2.62901,8.11495],[-2.61232,8.02645],[-2.67787,8.02055],[-2.74819,7.92613],[-2.78395,7.94974],[-2.79467,7.86002],[-2.92339,7.60847],[-2.97822,7.27165],[-2.95438,7.23737],[-3.23327,6.81744],[-3.21954,6.74407],[-3.25999,6.62521],[-3.01896,5.71697],[-2.95323,5.71865],[-2.96671,5.6415],[-2.93132,5.62137],[-2.85378,5.65156],[-2.76614,5.60963],[-2.72737,5.34789],[-2.77625,5.34621],[-2.73074,5.1364],[-2.75502,5.10657],[-2.95261,5.12477],[-2.96554,5.10397],[-3.063,5.13665],[-3.11073,5.12675],[-3.10675,5.08515],[-3.34019,4.17519],[-7.52774,3.7105]]]]}},{type:"Feature",properties:{iso1A2:"TR",iso1A3:"TUR",iso1N3:"792",wikidata:"Q43",nameEn:"Turkey",groups:["145","142"],callingCodes:["90"]},geometry:{type:"MultiPolygon",coordinates:[[[[41.54366,41.52185],[41.7148,41.4932],[41.7124,41.47417],[41.81939,41.43621],[41.95134,41.52466],[42.26387,41.49346],[42.51772,41.43606],[42.59202,41.58183],[42.72794,41.59714],[42.84471,41.58912],[42.78995,41.50126],[42.84899,41.47265],[42.8785,41.50516],[43.02956,41.37891],[43.21707,41.30331],[43.13373,41.25503],[43.1945,41.25242],[43.23096,41.17536],[43.36118,41.2028],[43.44973,41.17666],[43.4717,41.12611],[43.44984,41.0988],[43.47319,41.02251],[43.58683,40.98961],[43.67712,40.93084],[43.67712,40.84846],[43.74872,40.7365],[43.7425,40.66805],[43.63664,40.54159],[43.54791,40.47413],[43.60862,40.43267],[43.59928,40.34019],[43.71136,40.16673],[43.65221,40.14889],[43.65688,40.11199],[43.92307,40.01787],[44.1057,40.03555],[44.1778,40.02845],[44.26973,40.04866],[44.46635,39.97733],[44.61845,39.8281],[44.75779,39.7148],[44.80977,39.65768],[44.81043,39.62677],[44.71806,39.71124],[44.65422,39.72163],[44.6137,39.78393],[44.47298,39.68788],[44.48111,39.61579],[44.41849,39.56659],[44.42832,39.4131],[44.37921,39.4131],[44.29818,39.378],[44.22452,39.4169],[44.03667,39.39223],[44.1043,39.19842],[44.20946,39.13975],[44.18863,38.93881],[44.30322,38.81581],[44.26155,38.71427],[44.28065,38.6465],[44.32058,38.62752],[44.3207,38.49799],[44.3119,38.37887],[44.38309,38.36117],[44.44386,38.38295],[44.50115,38.33939],[44.42476,38.25763],[44.22509,37.88859],[44.3883,37.85433],[44.45948,37.77065],[44.55498,37.783],[44.62096,37.71985],[44.56887,37.6429],[44.61401,37.60165],[44.58449,37.45018],[44.81021,37.2915],[44.75986,37.21549],[44.7868,37.16644],[44.78319,37.1431],[44.76698,37.16162],[44.63179,37.19229],[44.42631,37.05825],[44.38117,37.05825],[44.35315,37.04955],[44.35937,37.02843],[44.30645,36.97373],[44.25975,36.98119],[44.18503,37.09551],[44.22239,37.15756],[44.27998,37.16501],[44.2613,37.25055],[44.13521,37.32486],[44.02002,37.33229],[43.90949,37.22453],[43.84878,37.22205],[43.82699,37.19477],[43.8052,37.22825],[43.7009,37.23692],[43.63085,37.21957],[43.56702,37.25675],[43.50787,37.24436],[43.33508,37.33105],[43.30083,37.30629],[43.11403,37.37436],[42.93705,37.32015],[42.78887,37.38615],[42.56725,37.14878],[42.35724,37.10998],[42.32313,37.17814],[42.34735,37.22548],[42.2824,37.2798],[42.26039,37.27017],[42.23683,37.2863],[42.21548,37.28026],[42.20454,37.28715],[42.22381,37.30238],[42.22257,37.31395],[42.2112,37.32491],[42.19301,37.31323],[42.18225,37.28569],[42.00894,37.17209],[41.515,37.08084],[41.21937,37.07665],[40.90856,37.13147],[40.69136,37.0996],[39.81589,36.75538],[39.21538,36.66834],[39.03217,36.70911],[38.74042,36.70629],[38.55908,36.84429],[38.38859,36.90064],[38.21064,36.91842],[37.81974,36.76055],[37.68048,36.75065],[37.49103,36.66904],[37.47253,36.63243],[37.21988,36.6736],[37.16177,36.66069],[37.10894,36.6704],[37.08279,36.63495],[37.02088,36.66422],[37.01647,36.69512],[37.04619,36.71101],[37.04399,36.73483],[36.99886,36.74012],[36.99557,36.75997],[36.66727,36.82901],[36.61581,36.74629],[36.62681,36.71189],[36.57398,36.65186],[36.58829,36.58295],[36.54206,36.49539],[36.6081,36.33772],[36.65653,36.33861],[36.68672,36.23677],[36.6125,36.22592],[36.50463,36.2419],[36.4617,36.20461],[36.39206,36.22088],[36.37474,36.01163],[36.33956,35.98687],[36.30099,36.00985],[36.28338,36.00273],[36.29769,35.96086],[36.27678,35.94839],[36.25366,35.96264],[36.19973,35.95195],[36.17441,35.92076],[36.1623,35.80925],[36.14029,35.81015],[36.13919,35.83692],[36.11827,35.85923],[35.99829,35.88242],[36.01844,35.92403],[36.00514,35.94113],[35.98499,35.94107],[35.931,35.92109],[35.51152,36.10954],[32.82353,35.70297],[29.73302,35.92555],[29.69611,36.10365],[29.61805,36.14179],[29.61002,36.1731],[29.48192,36.18377],[29.30783,36.01033],[28.23708,36.56812],[27.95037,36.46155],[27.89482,36.69898],[27.46117,36.53789],[27.24613,36.71622],[27.45627,36.9008],[27.20312,36.94571],[27.14757,37.32],[26.95583,37.64989],[26.99377,37.69034],[27.16428,37.72343],[27.05537,37.9131],[26.21136,38.17558],[26.24183,38.44695],[26.32173,38.48731],[26.21136,38.65436],[26.61814,38.81372],[26.70773,39.0312],[26.43357,39.43096],[25.94257,39.39358],[25.61285,40.17161],[26.04292,40.3958],[25.94795,40.72797],[26.03489,40.73051],[26.0754,40.72772],[26.08638,40.73214],[26.12495,40.74283],[26.12854,40.77339],[26.15685,40.80709],[26.21351,40.83298],[26.20856,40.86048],[26.26169,40.9168],[26.29441,40.89119],[26.28623,40.93005],[26.32259,40.94042],[26.35894,40.94292],[26.33297,40.98388],[26.3606,41.02027],[26.31928,41.07386],[26.32259,41.24929],[26.39861,41.25053],[26.5209,41.33993],[26.5837,41.32131],[26.62997,41.34613],[26.61767,41.42281],[26.59742,41.48058],[26.59196,41.60491],[26.5209,41.62592],[26.47958,41.67037],[26.35957,41.71149],[26.32952,41.73637],[26.33589,41.76802],[26.36952,41.82265],[26.53968,41.82653],[26.57961,41.90024],[26.56051,41.92995],[26.62996,41.97644],[26.79143,41.97386],[26.95638,42.00741],[27.03277,42.0809],[27.08486,42.08735],[27.19251,42.06028],[27.22376,42.10152],[27.27411,42.10409],[27.45478,41.96591],[27.52379,41.93756],[27.55191,41.90928],[27.69949,41.97515],[27.81235,41.94803],[27.83492,41.99709],[27.91479,41.97902],[28.02971,41.98066],[28.32297,41.98371],[34.8305,42.4581],[40.89217,41.72528],[41.54366,41.52185]]]]}},{type:"Feature",properties:{iso1A2:"CU",iso1A3:"CUB",iso1N3:"192",wikidata:"Q241",nameEn:"Cuba",groups:["029","003","419","019"],callingCodes:["53"]},geometry:{type:"MultiPolygon",coordinates:[[[[-73.62304,20.6935],[-74.81171,18.82201],[-85.77883,21.92705],[-82.02215,24.23074],[-73.62304,20.6935]]]]}},{type:"Feature",properties:{iso1A2:"TT",iso1A3:"TTO",iso1N3:"780",wikidata:"Q754",nameEn:"Trinidad and Tobago",groups:["029","003","419","019"],driveSide:"left",callingCodes:["1 868"]},geometry:{type:"MultiPolygon",coordinates:[[[[-61.62505,11.18974],[-60.07172,11.77667],[-60.89962,9.81445],[-62.08693,10.04435],[-61.62505,11.18974]]]]}},{type:"Feature",properties:{iso1A2:"DJ",iso1A3:"DJI",iso1N3:"262",wikidata:"Q977",nameEn:"Djibouti",groups:["014","202","002"],callingCodes:["253"]},geometry:{type:"MultiPolygon",coordinates:[[[[43.42425,11.70983],[42.95776,10.98533],[42.79037,10.98493],[42.75111,11.06992],[42.62989,11.09711],[42.42669,10.98493],[42.13691,10.97586],[42.06302,10.92599],[41.80056,10.97127],[41.8096,11.33606],[41.77727,11.49902],[41.82878,11.72361],[41.95461,11.81157],[42.4037,12.46478],[42.46941,12.52661],[42.6957,12.36201],[42.7996,12.42629],[42.86195,12.58747],[43.29075,12.79154],[43.32909,12.59711],[43.90659,12.3823],[43.42425,11.70983]]]]}},{type:"Feature",properties:{iso1A2:"TV",iso1A3:"TUV",iso1N3:"798",wikidata:"Q672",nameEn:"Tuvalu",groups:["061","009"],driveSide:"left",callingCodes:["688"]},geometry:{type:"MultiPolygon",coordinates:[[[[174,-5],[179.99999,-5],[179.99999,-11.5],[174,-11.5],[174,-5]]]]}},{type:"Feature",properties:{iso1A2:"EG",iso1A3:"EGY",iso1N3:"818",wikidata:"Q79",nameEn:"Egypt",groups:["015","002"],callingCodes:["20"]},geometry:{type:"MultiPolygon",coordinates:[[[[33.62659,31.82938],[34.052,31.46619],[34.21853,31.32363],[34.23572,31.2966],[34.24012,31.29591],[34.26742,31.21998],[34.92298,29.45305],[34.88293,29.37455],[34.46254,27.99552],[34.51305,27.70027],[37.8565,22.00903],[34.0765,22.00501],[33.17563,22.00405],[24.99885,21.99535],[24.99968,29.24574],[24.71117,30.17441],[25.01077,30.73861],[24.83101,31.31921],[25.06041,31.57937],[25.14001,31.67534],[25.63787,31.9359],[33.62659,31.82938]]]]}},{type:"Feature",properties:{iso1A2:"TW",iso1A3:"TWN",iso1N3:"158",wikidata:"Q865",nameEn:"Taiwan",groups:["030","142"],callingCodes:["886"]},geometry:{type:"MultiPolygon",coordinates:[[[[123.0791,22.07818],[120.69238,21.52331],[118.11703,24.39734],[118.28244,24.51231],[118.35291,24.51645],[118.42453,24.54644],[118.56434,24.49266],[120.49232,25.22863],[122.26612,25.98197],[123.0791,22.07818]]]]}},{type:"Feature",properties:{iso1A2:"FK",iso1A3:"FLK",iso1N3:"238",wikidata:"Q9648",nameEn:"Falkland Islands",country:"GB",groups:["005","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["500"]},geometry:{type:"MultiPolygon",coordinates:[[[[-63.67376,-55.11859],[-61.26735,-50.63919],[-54.56126,-51.26248],[-63.67376,-55.11859]]]]}},{type:"Feature",properties:{iso1A2:"TZ",iso1A3:"TZA",iso1N3:"834",wikidata:"Q924",nameEn:"Tanzania",groups:["014","202","002"],driveSide:"left",callingCodes:["255"]},geometry:{type:"MultiPolygon",coordinates:[[[[30.80408,-0.99911],[33.93107,-0.99298],[34.02286,-1.00779],[34.03084,-1.05101],[34.0824,-1.02264],[37.67199,-3.06222],[37.71745,-3.304],[37.5903,-3.42735],[37.63099,-3.50723],[37.75036,-3.54243],[37.81321,-3.69179],[39.21631,-4.67835],[39.44306,-4.93877],[39.62121,-4.68136],[40.14328,-4.64201],[40.74206,-10.25691],[40.44265,-10.4618],[40.00295,-10.80255],[39.58249,-10.96043],[39.24395,-11.17433],[38.88996,-11.16978],[38.47258,-11.4199],[38.21598,-11.27289],[37.93618,-11.26228],[37.8388,-11.3123],[37.76614,-11.53352],[37.3936,-11.68949],[36.80309,-11.56836],[36.62068,-11.72884],[36.19094,-11.70008],[36.19094,-11.57593],[35.82767,-11.41081],[35.63599,-11.55927],[34.96296,-11.57354],[34.91153,-11.39799],[34.79375,-11.32245],[34.63305,-11.11731],[34.61161,-11.01611],[34.67047,-10.93796],[34.65946,-10.6828],[34.57581,-10.56271],[34.51911,-10.12279],[34.54499,-10.0678],[34.03865,-9.49398],[33.95829,-9.54066],[33.9638,-9.62206],[33.93298,-9.71647],[33.76677,-9.58516],[33.48052,-9.62442],[33.31581,-9.48554],[33.14925,-9.49322],[32.99397,-9.36712],[32.95389,-9.40138],[32.76233,-9.31963],[32.75611,-9.28583],[32.53661,-9.24281],[32.49147,-9.14754],[32.43543,-9.11988],[32.25486,-9.13371],[32.16146,-9.05993],[32.08206,-9.04609],[31.98866,-9.07069],[31.94196,-9.02303],[31.94663,-8.93846],[31.81587,-8.88618],[31.71158,-8.91386],[31.57147,-8.81388],[31.57147,-8.70619],[31.37533,-8.60769],[31.00796,-8.58615],[30.79243,-8.27382],[30.2567,-7.14121],[29.52552,-6.2731],[29.43673,-4.44845],[29.63827,-4.44681],[29.75109,-4.45836],[29.77289,-4.41733],[29.82885,-4.36153],[29.88172,-4.35743],[30.03323,-4.26631],[30.22042,-4.01738],[30.45915,-3.56532],[30.84165,-3.25152],[30.83823,-2.97837],[30.6675,-2.98987],[30.57926,-2.89791],[30.4987,-2.9573],[30.40662,-2.86151],[30.52747,-2.65841],[30.41789,-2.66266],[30.54501,-2.41404],[30.83915,-2.35795],[30.89303,-2.08223],[30.80802,-1.91477],[30.84079,-1.64652],[30.71974,-1.43244],[30.57123,-1.33264],[30.50889,-1.16412],[30.45116,-1.10641],[30.47194,-1.0555],[30.64166,-1.06601],[30.70631,-1.01175],[30.76635,-0.9852],[30.80408,-0.99911]]]]}},{type:"Feature",properties:{iso1A2:"GE",iso1A3:"GEO",iso1N3:"268",wikidata:"Q230",nameEn:"Georgia",groups:["145","142"],callingCodes:["995"]},geometry:{type:"MultiPolygon",coordinates:[[[[46.42738,41.91323],[46.3984,41.84399],[46.30863,41.79133],[46.23962,41.75811],[46.20538,41.77205],[46.17891,41.72094],[46.19759,41.62327],[46.24429,41.59883],[46.26531,41.63339],[46.28182,41.60089],[46.3253,41.60912],[46.34039,41.5947],[46.34126,41.57454],[46.29794,41.5724],[46.33925,41.4963],[46.40307,41.48464],[46.4669,41.43331],[46.63658,41.37727],[46.72375,41.28609],[46.66148,41.20533],[46.63969,41.09515],[46.55096,41.1104],[46.48558,41.0576],[46.456,41.09984],[46.37661,41.10805],[46.27698,41.19011],[46.13221,41.19479],[45.95786,41.17956],[45.80842,41.2229],[45.69946,41.29545],[45.75705,41.35157],[45.71035,41.36208],[45.68389,41.3539],[45.45973,41.45898],[45.4006,41.42402],[45.31352,41.47168],[45.26285,41.46433],[45.1797,41.42231],[45.09867,41.34065],[45.0133,41.29747],[44.93493,41.25685],[44.81437,41.30371],[44.80053,41.25949],[44.81749,41.23488],[44.84358,41.23088],[44.89911,41.21366],[44.87887,41.20195],[44.82084,41.21513],[44.72814,41.20338],[44.61462,41.24018],[44.59322,41.1933],[44.46791,41.18204],[44.34417,41.2382],[44.34337,41.20312],[44.32139,41.2079],[44.18148,41.24644],[44.16591,41.19141],[43.84835,41.16329],[43.74717,41.1117],[43.67712,41.13398],[43.4717,41.12611],[43.44973,41.17666],[43.36118,41.2028],[43.23096,41.17536],[43.1945,41.25242],[43.13373,41.25503],[43.21707,41.30331],[43.02956,41.37891],[42.8785,41.50516],[42.84899,41.47265],[42.78995,41.50126],[42.84471,41.58912],[42.72794,41.59714],[42.59202,41.58183],[42.51772,41.43606],[42.26387,41.49346],[41.95134,41.52466],[41.81939,41.43621],[41.7124,41.47417],[41.7148,41.4932],[41.54366,41.52185],[40.89217,41.72528],[39.81147,43.06294],[40.0078,43.38551],[40.00853,43.40578],[40.01552,43.42025],[40.01007,43.42411],[40.03312,43.44262],[40.04445,43.47776],[40.10657,43.57344],[40.65957,43.56212],[41.64935,43.22331],[42.40563,43.23226],[42.66667,43.13917],[42.75889,43.19651],[43.03322,43.08883],[43.0419,43.02413],[43.81453,42.74297],[43.73119,42.62043],[43.95517,42.55396],[44.54202,42.75699],[44.70002,42.74679],[44.80941,42.61277],[44.88754,42.74934],[45.15318,42.70598],[45.36501,42.55268],[45.78692,42.48358],[45.61676,42.20768],[46.42738,41.91323]]]]}},{type:"Feature",properties:{iso1A2:"UA",iso1A3:"UKR",iso1N3:"804",wikidata:"Q212",nameEn:"Ukraine",groups:["151","150"],callingCodes:["380"]},geometry:{type:"MultiPolygon",coordinates:[[[[33.57318,46.10317],[33.59087,46.06013],[33.54017,46.0123],[31.62627,45.50633],[30.04414,45.08461],[29.69272,45.19227],[29.65428,45.25629],[29.68175,45.26885],[29.59798,45.38857],[29.42632,45.44545],[29.24779,45.43388],[28.96077,45.33164],[28.94292,45.28045],[28.81383,45.3384],[28.78911,45.24179],[28.71358,45.22631],[28.5735,45.24759],[28.34554,45.32102],[28.28504,45.43907],[28.21139,45.46895],[28.30201,45.54744],[28.41836,45.51715],[28.43072,45.48538],[28.51449,45.49982],[28.49252,45.56716],[28.54196,45.58062],[28.51587,45.6613],[28.47879,45.66994],[28.52823,45.73803],[28.70401,45.78019],[28.69852,45.81753],[28.78503,45.83475],[28.74383,45.96664],[28.98004,46.00385],[29.00613,46.04962],[28.94643,46.09176],[29.06656,46.19716],[28.94953,46.25852],[28.98478,46.31803],[29.004,46.31495],[28.9306,46.45699],[29.01241,46.46177],[29.02409,46.49582],[29.23547,46.55435],[29.24886,46.37912],[29.35357,46.49505],[29.49914,46.45889],[29.5939,46.35472],[29.6763,46.36041],[29.66359,46.4215],[29.74496,46.45605],[29.88329,46.35851],[29.94114,46.40114],[30.09103,46.38694],[30.16794,46.40967],[30.02511,46.45132],[29.88916,46.54302],[29.94409,46.56002],[29.9743,46.75325],[29.94522,46.80055],[29.98814,46.82358],[29.87405,46.88199],[29.75458,46.8604],[29.72986,46.92234],[29.57056,46.94766],[29.62137,47.05069],[29.61038,47.09932],[29.53044,47.07851],[29.49732,47.12878],[29.57696,47.13581],[29.54996,47.24962],[29.59665,47.25521],[29.5733,47.36508],[29.48678,47.36043],[29.47854,47.30366],[29.39889,47.30179],[29.3261,47.44664],[29.18603,47.43387],[29.11743,47.55001],[29.22414,47.60012],[29.22242,47.73607],[29.27255,47.79953],[29.20663,47.80367],[29.27804,47.88893],[29.19839,47.89261],[29.1723,47.99013],[28.9306,47.96255],[28.8414,48.03392],[28.85232,48.12506],[28.69896,48.13106],[28.53921,48.17453],[28.48428,48.0737],[28.42454,48.12047],[28.43701,48.15832],[28.38712,48.17567],[28.34009,48.13147],[28.30609,48.14018],[28.30586,48.1597],[28.34912,48.1787],[28.36996,48.20543],[28.35519,48.24957],[28.32508,48.23384],[28.2856,48.23202],[28.19314,48.20749],[28.17666,48.25963],[28.07504,48.23494],[28.09873,48.3124],[28.04527,48.32661],[27.95883,48.32368],[27.88391,48.36699],[27.87533,48.4037],[27.81902,48.41874],[27.79225,48.44244],[27.74422,48.45926],[27.6658,48.44034],[27.59027,48.46311],[27.5889,48.49224],[27.46942,48.454],[27.44333,48.41209],[27.37741,48.41026],[27.37604,48.44398],[27.32159,48.4434],[27.27855,48.37534],[27.13434,48.37288],[27.08078,48.43214],[27.0231,48.42485],[27.03821,48.37653],[26.93384,48.36558],[26.85556,48.41095],[26.71274,48.40388],[26.82809,48.31629],[26.79239,48.29071],[26.6839,48.35828],[26.62823,48.25804],[26.55202,48.22445],[26.33504,48.18418],[26.17711,47.99246],[26.05901,47.9897],[25.77723,47.93919],[25.63878,47.94924],[25.23778,47.89403],[25.11144,47.75203],[24.88896,47.7234],[24.81893,47.82031],[24.70632,47.84428],[24.61994,47.95062],[24.43578,47.97131],[24.34926,47.9244],[24.22566,47.90231],[24.11281,47.91487],[24.06466,47.95317],[24.02999,47.95087],[24.00801,47.968],[23.98553,47.96076],[23.96337,47.96672],[23.94192,47.94868],[23.89352,47.94512],[23.8602,47.9329],[23.80904,47.98142],[23.75188,47.99705],[23.66262,47.98786],[23.63894,48.00293],[23.5653,48.00499],[23.52803,48.01818],[23.4979,47.96858],[23.33577,48.0237],[23.27397,48.08245],[23.15999,48.12188],[23.1133,48.08061],[23.08858,48.00716],[23.0158,47.99338],[22.92241,48.02002],[22.94301,47.96672],[22.89849,47.95851],[22.84276,47.98602],[22.87847,48.04665],[22.81804,48.11363],[22.73427,48.12005],[22.66835,48.09162],[22.58733,48.10813],[22.59007,48.15121],[22.49806,48.25189],[22.38133,48.23726],[22.2083,48.42534],[22.14689,48.4005],[22.16023,48.56548],[22.21379,48.6218],[22.34151,48.68893],[22.42934,48.92857],[22.48296,48.99172],[22.54338,49.01424],[22.56155,49.08865],[22.89122,49.00725],[22.86336,49.10513],[22.72009,49.20288],[22.748,49.32759],[22.69444,49.49378],[22.64534,49.53094],[22.78304,49.65543],[22.80261,49.69098],[22.83179,49.69875],[22.99329,49.84249],[23.28221,50.0957],[23.67635,50.33385],[23.71382,50.38248],[23.79445,50.40481],[23.99563,50.41289],[24.03668,50.44507],[24.07048,50.5071],[24.0996,50.60752],[24.0595,50.71625],[23.95925,50.79271],[23.99254,50.83847],[24.0952,50.83262],[24.14524,50.86128],[24.04576,50.90196],[23.92217,51.00836],[23.90376,51.07697],[23.80678,51.18405],[23.63858,51.32182],[23.69905,51.40871],[23.62751,51.50512],[23.6736,51.50255],[23.60906,51.62122],[23.7766,51.66809],[23.91118,51.63316],[23.8741,51.59734],[23.99907,51.58369],[24.13075,51.66979],[24.3163,51.75063],[24.29021,51.80841],[24.37123,51.88222],[24.98784,51.91273],[25.20228,51.97143],[25.46163,51.92205],[25.73673,51.91973],[25.80574,51.94556],[25.83217,51.92587],[26.00408,51.92967],[26.19084,51.86781],[26.39367,51.87315],[26.46962,51.80501],[26.69759,51.82284],[26.80043,51.75777],[26.9489,51.73788],[26.99422,51.76933],[27.20602,51.77291],[27.20948,51.66713],[27.26613,51.65957],[27.24828,51.60161],[27.47212,51.61184],[27.51058,51.5854],[27.55727,51.63486],[27.71932,51.60672],[27.67125,51.50854],[27.76052,51.47604],[27.85253,51.62293],[27.91844,51.61952],[27.95827,51.56065],[28.10658,51.57857],[28.23452,51.66988],[28.37592,51.54505],[28.47051,51.59734],[28.64429,51.5664],[28.69161,51.44695],[28.73143,51.46236],[28.75615,51.41442],[28.78224,51.45294],[28.76027,51.48802],[28.81795,51.55552],[28.95528,51.59222],[28.99098,51.56833],[29.1187,51.65872],[29.16402,51.64679],[29.20659,51.56918],[29.25603,51.57089],[29.25191,51.49828],[29.32881,51.37843],[29.42357,51.4187],[29.49773,51.39814],[29.54372,51.48372],[29.7408,51.53417],[29.77376,51.4461],[30.17888,51.51025],[30.34642,51.42555],[30.36153,51.33984],[30.56203,51.25655],[30.64992,51.35014],[30.51946,51.59649],[30.68804,51.82806],[30.76443,51.89739],[30.90897,52.00699],[30.95589,52.07775],[31.13332,52.1004],[31.25142,52.04131],[31.38326,52.12991],[31.7822,52.11406],[31.81722,52.09955],[31.85018,52.11305],[31.96141,52.08015],[31.92159,52.05144],[32.08813,52.03319],[32.23331,52.08085],[32.2777,52.10266],[32.34044,52.1434],[32.33083,52.23685],[32.38988,52.24946],[32.3528,52.32842],[32.54781,52.32423],[32.69475,52.25535],[32.85405,52.27888],[32.89937,52.2461],[33.18913,52.3754],[33.51323,52.35779],[33.48027,52.31499],[33.55718,52.30324],[33.78789,52.37204],[34.05239,52.20132],[34.11199,52.14087],[34.09413,52.00835],[34.41136,51.82793],[34.42922,51.72852],[34.07765,51.67065],[34.17599,51.63253],[34.30562,51.5205],[34.22048,51.4187],[34.33446,51.363],[34.23009,51.26429],[34.31661,51.23936],[34.38802,51.2746],[34.6613,51.25053],[34.6874,51.18],[34.82472,51.17483],[34.97304,51.2342],[35.14058,51.23162],[35.12685,51.16191],[35.20375,51.04723],[35.31774,51.08434],[35.40837,51.04119],[35.32598,50.94524],[35.39307,50.92145],[35.41367,50.80227],[35.47704,50.77274],[35.48116,50.66405],[35.39464,50.64751],[35.47463,50.49247],[35.58003,50.45117],[35.61711,50.35707],[35.73659,50.35489],[35.80388,50.41356],[35.8926,50.43829],[36.06893,50.45205],[36.20763,50.3943],[36.30101,50.29088],[36.47817,50.31457],[36.58371,50.28563],[36.56655,50.2413],[36.64571,50.218],[36.69377,50.26982],[36.91762,50.34963],[37.08468,50.34935],[37.48204,50.46079],[37.47243,50.36277],[37.62486,50.29966],[37.62879,50.24481],[37.61113,50.21976],[37.75807,50.07896],[37.79515,50.08425],[37.90776,50.04194],[38.02999,49.94482],[38.02999,49.90592],[38.21675,49.98104],[38.18517,50.08161],[38.32524,50.08866],[38.35408,50.00664],[38.65688,49.97176],[38.68677,50.00904],[38.73311,49.90238],[38.90477,49.86787],[38.9391,49.79524],[39.1808,49.88911],[39.27968,49.75976],[39.44496,49.76067],[39.59142,49.73758],[39.65047,49.61761],[39.84548,49.56064],[40.13249,49.61672],[40.16683,49.56865],[40.03636,49.52321],[40.03087,49.45452],[40.1141,49.38798],[40.14912,49.37681],[40.18331,49.34996],[40.22176,49.25683],[40.01988,49.1761],[39.93437,49.05709],[39.6836,49.05121],[39.6683,48.99454],[39.71353,48.98959],[39.72649,48.9754],[39.74874,48.98675],[39.78368,48.91596],[39.98967,48.86901],[40.03636,48.91957],[40.08168,48.87443],[39.97182,48.79398],[39.79466,48.83739],[39.73104,48.7325],[39.71765,48.68673],[39.67226,48.59368],[39.79764,48.58668],[39.84548,48.57821],[39.86196,48.46633],[39.88794,48.44226],[39.94847,48.35055],[39.84136,48.33321],[39.84273,48.30947],[39.90041,48.3049],[39.91465,48.26743],[39.95248,48.29972],[39.9693,48.29904],[39.97325,48.31399],[39.99241,48.31768],[40.00752,48.22445],[39.94847,48.22811],[39.83724,48.06501],[39.88256,48.04482],[39.77544,48.04206],[39.82213,47.96396],[39.73935,47.82876],[38.87979,47.87719],[38.79628,47.81109],[38.76379,47.69346],[38.35062,47.61631],[38.28679,47.53552],[38.28954,47.39255],[38.22225,47.30788],[38.33074,47.30508],[38.32112,47.2585],[38.23049,47.2324],[38.22955,47.12069],[38.3384,46.98085],[38.12112,46.86078],[37.62608,46.82615],[35.23066,45.79231],[34.96015,45.75634],[34.79905,45.81009],[34.80153,45.90047],[34.75479,45.90705],[34.66679,45.97136],[34.60861,45.99347],[34.55889,45.99347],[34.52011,45.95097],[34.48729,45.94267],[34.44155,45.95995],[34.41221,46.00245],[34.33912,46.06114],[34.25111,46.0532],[34.181,46.06804],[34.12929,46.10494],[34.07311,46.11769],[34.05272,46.10838],[33.91549,46.15938],[33.85234,46.19863],[33.79715,46.20482],[33.74047,46.18555],[33.646,46.23028],[33.61517,46.22615],[33.63854,46.14147],[33.61467,46.13561],[33.57318,46.10317]]]]}},{type:"Feature",properties:{iso1A2:"GP",iso1A3:"GLP",iso1N3:"312",wikidata:"Q17012",nameEn:"Guadeloupe",country:"FR",groups:["EU","029","003","419","019"],callingCodes:["590"]},geometry:{type:"MultiPolygon",coordinates:[[[[-60.95725,15.70997],[-61.44899,15.79571],[-61.81728,15.58058],[-62.17275,16.35721],[-61.83929,16.66647],[-61.44461,16.81958],[-60.71337,16.48911],[-60.95725,15.70997]]]]}},{type:"Feature",properties:{iso1A2:"UG",iso1A3:"UGA",iso1N3:"800",wikidata:"Q1036",nameEn:"Uganda",groups:["014","202","002"],driveSide:"left",callingCodes:["256"]},geometry:{type:"MultiPolygon",coordinates:[[[[33.93107,-0.99298],[30.80408,-0.99911],[30.76635,-0.9852],[30.70631,-1.01175],[30.64166,-1.06601],[30.47194,-1.0555],[30.35212,-1.06896],[30.16369,-1.34303],[29.912,-1.48269],[29.82657,-1.31187],[29.59061,-1.39016],[29.58388,-0.89821],[29.63006,-0.8997],[29.62708,-0.71055],[29.67176,-0.55714],[29.67474,-0.47969],[29.65091,-0.46777],[29.72687,-0.08051],[29.7224,0.07291],[29.77454,0.16675],[29.81922,0.16824],[29.87284,0.39166],[29.97413,0.52124],[29.95477,0.64486],[29.98307,0.84295],[30.1484,0.89805],[30.22139,0.99635],[30.24671,1.14974],[30.48503,1.21675],[31.30127,2.11006],[31.28042,2.17853],[31.20148,2.2217],[31.1985,2.29462],[31.12104,2.27676],[31.07934,2.30207],[31.06593,2.35862],[30.96911,2.41071],[30.91102,2.33332],[30.83059,2.42559],[30.74271,2.43601],[30.75612,2.5863],[30.8857,2.83923],[30.8574,2.9508],[30.77101,3.04897],[30.84251,3.26908],[30.93486,3.40737],[30.94081,3.50847],[30.85153,3.48867],[30.97601,3.693],[31.16666,3.79853],[31.29476,3.8015],[31.50478,3.67814],[31.50776,3.63652],[31.72075,3.74354],[31.81459,3.82083],[31.86821,3.78664],[31.96205,3.6499],[31.95907,3.57408],[32.05187,3.589],[32.08491,3.56287],[32.08866,3.53543],[32.19888,3.50867],[32.20782,3.6053],[32.41337,3.748],[32.72021,3.77327],[32.89746,3.81339],[33.02852,3.89296],[33.18356,3.77812],[33.51264,3.75068],[33.9873,4.23316],[34.06046,4.15235],[34.15429,3.80464],[34.45815,3.67385],[34.44922,3.51627],[34.39112,3.48802],[34.41794,3.44342],[34.40006,3.37949],[34.45815,3.18319],[34.56242,3.11478],[34.60114,2.93034],[34.65774,2.8753],[34.73967,2.85447],[34.78137,2.76223],[34.77244,2.70272],[34.95267,2.47209],[34.90947,2.42447],[34.98692,1.97348],[34.9899,1.6668],[34.92734,1.56109],[34.87819,1.5596],[34.7918,1.36752],[34.82606,1.30944],[34.82606,1.26626],[34.80223,1.22754],[34.67562,1.21265],[34.58029,1.14712],[34.57427,1.09868],[34.52369,1.10692],[34.43349,0.85254],[34.40041,0.80266],[34.31516,0.75693],[34.27345,0.63182],[34.20196,0.62289],[34.13493,0.58118],[34.11408,0.48884],[34.08727,0.44713],[34.10067,0.36372],[33.90936,0.10581],[33.98449,-0.13079],[33.9264,-0.54188],[33.93107,-0.99298]]]]}},{type:"Feature",properties:{iso1A2:"HK",iso1A3:"HKG",iso1N3:"344",wikidata:"Q8646",nameEn:"Hong Kong",country:"CN",groups:["030","142"],driveSide:"left",callingCodes:["852"]},geometry:{type:"MultiPolygon",coordinates:[[[[113.92195,22.13873],[113.83338,22.1826],[113.81621,22.2163],[113.86771,22.42972],[114.03113,22.5065],[114.05438,22.5026],[114.05729,22.51104],[114.06272,22.51617],[114.07267,22.51855],[114.07817,22.52997],[114.08606,22.53276],[114.09048,22.53716],[114.09692,22.53435],[114.1034,22.5352],[114.11181,22.52878],[114.11656,22.53415],[114.12665,22.54003],[114.13823,22.54319],[114.1482,22.54091],[114.15123,22.55163],[114.1597,22.56041],[114.17247,22.55944],[114.18338,22.55444],[114.20655,22.55706],[114.22185,22.55343],[114.22888,22.5436],[114.25154,22.55977],[114.44998,22.55977],[114.50148,22.15017],[113.92195,22.13873]]]]}},{type:"Feature",properties:{iso1A2:"UM",iso1A3:"UMI",iso1N3:"581",wikidata:"Q16645",nameEn:"United States Minor Outlying Islands",country:"US",groups:["057","009"]},geometry:{type:"MultiPolygon",coordinates:[[[[-175.33482,-1.40631],[-177.43039,-1.43294],[-177.43928,1.65656],[-175.33167,1.67574],[-175.33482,-1.40631]]],[[[-161.04969,-1.36251],[-161.05669,1.11722],[-158.62734,1.1296],[-158.62058,-1.35506],[-161.04969,-1.36251]]],[[[-161.06795,5.2462],[-163.24478,5.24198],[-163.24994,7.12322],[-161.0731,7.1291],[-161.06795,5.2462]]],[[[-170.65691,16.57199],[-169.2329,17.4933],[-168.87689,16.01159],[-170.65691,16.57199]]],[[[-176.29741,29.09786],[-177.5224,27.7635],[-177.77531,29.29793],[-176.29741,29.09786]]],[[[-74.7289,18.71009],[-74.76465,18.06252],[-75.71816,18.46438],[-74.7289,18.71009]]],[[[167.34779,18.97692],[165.82549,18.97692],[166.67967,20.14834],[167.34779,18.97692]]]]}},{type:"Feature",properties:{iso1A2:"IE",iso1A3:"IRL",iso1N3:"372",wikidata:"Q27",nameEn:"Ireland",groups:["EU","154","150"],driveSide:"left",callingCodes:["353"]},geometry:{type:"MultiPolygon",coordinates:[[[[-6.26218,54.09785],[-5.83481,53.87749],[-5.37267,53.63269],[-5.79914,52.03902],[-22.01468,48.19557],[-7.93366,55.84142],[-6.79943,55.54107],[-6.71944,55.27952],[-6.9734,55.19878],[-7.2471,55.06933],[-7.34464,55.04688],[-7.4033,55.00391],[-7.40004,54.94498],[-7.44404,54.9403],[-7.4473,54.87003],[-7.47626,54.83084],[-7.54508,54.79401],[-7.54671,54.74606],[-7.64449,54.75265],[-7.75041,54.7103],[-7.83352,54.73854],[-7.93293,54.66603],[-7.70315,54.62077],[-7.8596,54.53671],[-7.99812,54.54427],[-8.04538,54.48941],[-8.179,54.46763],[-8.04555,54.36292],[-7.87101,54.29299],[-7.8596,54.21779],[-7.81397,54.20159],[-7.69501,54.20731],[-7.55812,54.12239],[-7.4799,54.12239],[-7.44567,54.1539],[-7.32834,54.11475],[-7.30553,54.11869],[-7.34005,54.14698],[-7.29157,54.17191],[-7.28017,54.16714],[-7.29687,54.1354],[-7.29493,54.12013],[-7.26316,54.13863],[-7.25012,54.20063],[-7.14908,54.22732],[-7.19145,54.31296],[-7.02034,54.4212],[-6.87775,54.34682],[-6.85179,54.29176],[-6.81583,54.22791],[-6.74575,54.18788],[-6.70175,54.20218],[-6.6382,54.17071],[-6.66264,54.0666],[-6.62842,54.03503],[-6.47849,54.06947],[-6.36605,54.07234],[-6.36279,54.11248],[-6.32694,54.09337],[-6.29003,54.11278],[-6.26218,54.09785]]]]}},{type:"Feature",properties:{iso1A2:"US",iso1A3:"USA",iso1N3:"840",wikidata:"Q30",nameEn:"United States of America",groups:["021","003","019"],roadSpeedUnit:"mph",callingCodes:["1"]},geometry:{type:"MultiPolygon",coordinates:[[[[-177.8563,29.18961],[-177.5224,27.7635],[-154.05867,45.51124],[-151.6784,9.55515],[-179.49839,27.86265],[-177.8563,29.18961]]],[[[169.34848,52.47228],[179.84401,55.10087],[180,51.0171],[169.34848,52.47228]]],[[[-168.95635,65.98512],[-168.25765,71.99091],[-140.97446,84.39275],[-141.00116,60.30648],[-140.5227,60.22077],[-140.45648,60.30919],[-139.98024,60.18027],[-139.68991,60.33693],[-139.05831,60.35205],[-139.20603,60.08896],[-139.05365,59.99655],[-138.71149,59.90728],[-138.62145,59.76431],[-137.60623,59.24465],[-137.4925,58.89415],[-136.82619,59.16198],[-136.52365,59.16752],[-136.47323,59.46617],[-136.33727,59.44466],[-136.22381,59.55526],[-136.31566,59.59083],[-135.48007,59.79937],[-135.03069,59.56208],[-135.00267,59.28745],[-134.7047,59.2458],[-134.55699,59.1297],[-134.48059,59.13231],[-134.27175,58.8634],[-133.84645,58.73543],[-133.38523,58.42773],[-131.8271,56.62247],[-130.77769,56.36185],[-130.33965,56.10849],[-130.10173,56.12178],[-130.00093,56.00325],[-130.00857,55.91344],[-130.15373,55.74895],[-129.97513,55.28029],[-130.08035,55.21556],[-130.18765,55.07744],[-130.27203,54.97174],[-130.44184,54.85377],[-130.64499,54.76912],[-130.61931,54.70835],[-133.92876,54.62289],[-179.55295,50.81807],[-179.55295,57.62081],[-172.76104,63.77445],[-169.03888,65.48473],[-168.95635,65.98512]]],[[[-97.13927,25.96583],[-97.35946,25.92189],[-97.37332,25.83854],[-97.42511,25.83969],[-97.45669,25.86874],[-97.49828,25.89877],[-97.52025,25.88518],[-97.66511,26.01708],[-97.95155,26.0625],[-97.97017,26.05232],[-98.24603,26.07191],[-98.27075,26.09457],[-98.30491,26.10475],[-98.35126,26.15129],[-99.00546,26.3925],[-99.03053,26.41249],[-99.08477,26.39849],[-99.53573,27.30926],[-99.49744,27.43746],[-99.482,27.47128],[-99.48045,27.49016],[-99.50208,27.50021],[-99.52955,27.49747],[-99.51478,27.55836],[-99.55409,27.61314],[-100.50029,28.66117],[-100.51222,28.70679],[-100.5075,28.74066],[-100.52313,28.75598],[-100.59809,28.88197],[-100.63689,28.90812],[-100.67294,29.09744],[-100.79696,29.24688],[-100.87982,29.296],[-100.94056,29.33371],[-100.94579,29.34523],[-100.96725,29.3477],[-101.01128,29.36947],[-101.05686,29.44738],[-101.47277,29.7744],[-102.60596,29.8192],[-103.15787,28.93865],[-104.37752,29.54255],[-104.39363,29.55396],[-104.3969,29.57105],[-104.5171,29.64671],[-104.77674,30.4236],[-106.00363,31.39181],[-106.09025,31.40569],[-106.20346,31.46305],[-106.23711,31.51262],[-106.24612,31.54193],[-106.28084,31.56173],[-106.30305,31.62154],[-106.33419,31.66303],[-106.34864,31.69663],[-106.3718,31.71165],[-106.38003,31.73151],[-106.41773,31.75196],[-106.43419,31.75478],[-106.45244,31.76523],[-106.46726,31.75998],[-106.47298,31.75054],[-106.48815,31.74769],[-106.50111,31.75714],[-106.50962,31.76155],[-106.51251,31.76922],[-106.52266,31.77509],[-106.529,31.784],[-108.20899,31.78534],[-108.20979,31.33316],[-109.05235,31.3333],[-111.07523,31.33232],[-112.34553,31.7357],[-114.82011,32.49609],[-114.79524,32.55731],[-114.81141,32.55543],[-114.80584,32.62028],[-114.76736,32.64094],[-114.71871,32.71894],[-115.88053,32.63624],[-117.1243,32.53427],[-118.48109,32.5991],[-133.98258,38.06389],[-125.03842,48.53282],[-123.50039,48.21223],[-123.15614,48.35395],[-123.26565,48.6959],[-123.0093,48.76586],[-123.0093,48.83186],[-123.32163,49.00419],[-117.03266,49.00056],[-116.04938,48.99999],[-114.0683,48.99885],[-110.0051,48.99901],[-104.05004,48.99925],[-101.36198,48.99935],[-97.24024,48.99952],[-95.15355,48.9996],[-95.15357,49.384],[-95.12903,49.37056],[-95.05825,49.35311],[-95.01419,49.35647],[-94.99532,49.36579],[-94.95681,49.37035],[-94.85381,49.32492],[-94.8159,49.32299],[-94.82487,49.29483],[-94.77355,49.11998],[-94.75017,49.09931],[-94.687,48.84077],[-94.70087,48.8339],[-94.70486,48.82365],[-94.69669,48.80918],[-94.69335,48.77883],[-94.58903,48.71803],[-94.54885,48.71543],[-94.53826,48.70216],[-94.44258,48.69223],[-94.4174,48.71049],[-94.27153,48.70232],[-94.25172,48.68404],[-94.25104,48.65729],[-94.23215,48.65202],[-93.85769,48.63284],[-93.83288,48.62745],[-93.80676,48.58232],[-93.80939,48.52439],[-93.79267,48.51631],[-93.66382,48.51845],[-93.47022,48.54357],[-93.44472,48.59147],[-93.40693,48.60948],[-93.39758,48.60364],[-93.3712,48.60599],[-93.33946,48.62787],[-93.25391,48.64266],[-92.94973,48.60866],[-92.7287,48.54005],[-92.6342,48.54133],[-92.62747,48.50278],[-92.69927,48.49573],[-92.71323,48.46081],[-92.65606,48.43471],[-92.50712,48.44921],[-92.45588,48.40624],[-92.48147,48.36609],[-92.37185,48.22259],[-92.27167,48.25046],[-92.30939,48.31251],[-92.26662,48.35651],[-92.202,48.35252],[-92.14732,48.36578],[-92.05339,48.35958],[-91.98929,48.25409],[-91.86125,48.21278],[-91.71231,48.19875],[-91.70451,48.11805],[-91.55649,48.10611],[-91.58025,48.04339],[-91.45829,48.07454],[-91.43248,48.04912],[-91.25025,48.08522],[-91.08016,48.18096],[-90.87588,48.2484],[-90.75045,48.09143],[-90.56444,48.12184],[-90.56312,48.09488],[-90.07418,48.11043],[-89.89974,47.98109],[-89.77248,48.02607],[-89.57972,48.00023],[-89.48837,48.01412],[-88.37033,48.30586],[-84.85871,46.88881],[-84.55635,46.45974],[-84.47607,46.45225],[-84.4481,46.48972],[-84.42101,46.49853],[-84.34174,46.50683],[-84.29893,46.49127],[-84.26351,46.49508],[-84.2264,46.53337],[-84.1945,46.54061],[-84.17723,46.52753],[-84.12885,46.53068],[-84.11196,46.50248],[-84.13451,46.39218],[-84.11254,46.32329],[-84.11615,46.2681],[-84.09756,46.25512],[-84.1096,46.23987],[-83.95399,46.05634],[-83.90453,46.05922],[-83.83329,46.12169],[-83.57017,46.105],[-83.43746,45.99749],[-83.59589,45.82131],[-82.48419,45.30225],[-82.42469,42.992],[-82.4146,42.97626],[-82.4253,42.95423],[-82.45331,42.93139],[-82.4826,42.8068],[-82.46613,42.76615],[-82.51063,42.66025],[-82.51858,42.611],[-82.57583,42.5718],[-82.58873,42.54984],[-82.64242,42.55594],[-82.82964,42.37355],[-83.02253,42.33045],[-83.07837,42.30978],[-83.09837,42.28877],[-83.12724,42.2376],[-83.14962,42.04089],[-83.11184,41.95671],[-82.67862,41.67615],[-78.93684,42.82887],[-78.90712,42.89733],[-78.90905,42.93022],[-78.93224,42.95229],[-78.96312,42.95509],[-78.98126,42.97],[-79.02074,42.98444],[-79.02424,43.01983],[-78.99941,43.05612],[-79.01055,43.06659],[-79.07486,43.07845],[-79.05671,43.10937],[-79.06881,43.12029],[-79.0427,43.13934],[-79.04652,43.16396],[-79.05384,43.17418],[-79.05002,43.20133],[-79.05544,43.21224],[-79.05512,43.25375],[-79.06921,43.26183],[-79.25796,43.54052],[-76.79706,43.63099],[-76.43859,44.09393],[-76.35324,44.13493],[-76.31222,44.19894],[-76.244,44.19643],[-76.1664,44.23051],[-76.16285,44.28262],[-76.00018,44.34896],[-75.95947,44.34463],[-75.8217,44.43176],[-75.76813,44.51537],[-75.41441,44.76614],[-75.2193,44.87821],[-75.01363,44.95608],[-74.99101,44.98051],[-74.8447,45.00606],[-74.66689,45.00646],[-74.32699,44.99029],[-73.35025,45.00942],[-71.50067,45.01357],[-71.48735,45.07784],[-71.42778,45.12624],[-71.40364,45.21382],[-71.44252,45.2361],[-71.37133,45.24624],[-71.29371,45.29996],[-71.22338,45.25184],[-71.19723,45.25438],[-71.14568,45.24128],[-71.08364,45.30623],[-71.01866,45.31573],[-71.0107,45.34819],[-70.95193,45.33895],[-70.91169,45.29849],[-70.89864,45.2398],[-70.84816,45.22698],[-70.80236,45.37444],[-70.82638,45.39828],[-70.78372,45.43269],[-70.65383,45.37592],[-70.62518,45.42286],[-70.72651,45.49771],[-70.68516,45.56964],[-70.54019,45.67291],[-70.38934,45.73215],[-70.41523,45.79497],[-70.25976,45.89675],[-70.24694,45.95138],[-70.31025,45.96424],[-70.23855,46.1453],[-70.29078,46.18832],[-70.18547,46.35357],[-70.05812,46.41768],[-69.99966,46.69543],[-69.22119,47.46461],[-69.05148,47.42012],[-69.05073,47.30076],[-69.05039,47.2456],[-68.89222,47.1807],[-68.70125,47.24399],[-68.60575,47.24659],[-68.57914,47.28431],[-68.38332,47.28723],[-68.37458,47.35851],[-68.23244,47.35712],[-67.94843,47.1925],[-67.87993,47.10377],[-67.78578,47.06473],[-67.78111,45.9392],[-67.75196,45.91814],[-67.80961,45.87531],[-67.75654,45.82324],[-67.80653,45.80022],[-67.80705,45.69528],[-67.6049,45.60725],[-67.43815,45.59162],[-67.42144,45.50584],[-67.50578,45.48971],[-67.42394,45.37969],[-67.48201,45.27351],[-67.34927,45.122],[-67.29754,45.14865],[-67.29748,45.18173],[-67.27039,45.1934],[-67.22751,45.16344],[-67.20349,45.1722],[-67.19603,45.16771],[-67.15965,45.16179],[-67.11316,45.11176],[-67.0216,44.95333],[-66.96824,44.90965],[-66.98249,44.87071],[-66.96824,44.83078],[-66.93432,44.82597],[-67.16117,44.20069],[-61.98255,37.34815],[-79.14818,27.83105],[-79.89631,24.6597],[-82.02215,24.23074],[-96.92418,25.97377],[-97.13927,25.96583]]]]}},{type:"Feature",properties:{iso1A2:"IT",iso1A3:"ITA",iso1N3:"380",wikidata:"Q38",nameEn:"Italy",groups:["EU","039","150"],callingCodes:["39"]},geometry:{type:"MultiPolygon",coordinates:[[[[8.95861,45.96485],[8.96668,45.98436],[8.97741,45.98317],[8.97604,45.96151],[8.95861,45.96485]]],[[[7.63035,43.57419],[7.53006,43.78405],[7.50423,43.84345],[7.49355,43.86551],[7.51162,43.88301],[7.56075,43.89932],[7.56858,43.94506],[7.60771,43.95772],[7.65266,43.9763],[7.66848,43.99943],[7.6597,44.03009],[7.72508,44.07578],[7.66878,44.12795],[7.68694,44.17487],[7.63245,44.17877],[7.62155,44.14881],[7.36364,44.11882],[7.34547,44.14359],[7.27827,44.1462],[7.16929,44.20352],[7.00764,44.23736],[6.98221,44.28289],[6.89171,44.36637],[6.88784,44.42043],[6.94504,44.43112],[6.86233,44.49834],[6.85507,44.53072],[6.96042,44.62129],[6.95133,44.66264],[7.00582,44.69364],[7.07484,44.68073],[7.00401,44.78782],[7.02217,44.82519],[6.93499,44.8664],[6.90774,44.84322],[6.75518,44.89915],[6.74519,44.93661],[6.74791,45.01939],[6.66981,45.02324],[6.62803,45.11175],[6.7697,45.16044],[6.85144,45.13226],[6.96706,45.20841],[7.07074,45.21228],[7.13115,45.25386],[7.10572,45.32924],[7.18019,45.40071],[7.00037,45.509],[6.98948,45.63869],[6.80785,45.71864],[6.80785,45.83265],[6.95315,45.85163],[7.04151,45.92435],[7.10685,45.85653],[7.56343,45.97421],[7.85949,45.91485],[7.9049,45.99945],[7.98881,45.99867],[8.02906,46.10331],[8.11383,46.11577],[8.16866,46.17817],[8.08814,46.26692],[8.31162,46.38044],[8.30648,46.41587],[8.42464,46.46367],[8.46317,46.43712],[8.45032,46.26869],[8.62242,46.12112],[8.75697,46.10395],[8.80778,46.10085],[8.85617,46.0748],[8.79414,46.00913],[8.78585,45.98973],[8.79362,45.99207],[8.8319,45.9879],[8.85121,45.97239],[8.86688,45.96135],[8.88904,45.95465],[8.93649,45.86775],[8.94372,45.86587],[8.93504,45.86245],[8.91129,45.8388],[8.94737,45.84285],[8.9621,45.83707],[8.99663,45.83466],[9.00324,45.82055],[9.0298,45.82127],[9.03279,45.82865],[9.03793,45.83548],[9.03505,45.83976],[9.04059,45.8464],[9.04546,45.84968],[9.06642,45.8761],[9.09065,45.89906],[8.99257,45.9698],[9.01618,46.04928],[9.24503,46.23616],[9.29226,46.32717],[9.25502,46.43743],[9.28136,46.49685],[9.36128,46.5081],[9.40487,46.46621],[9.45936,46.50873],[9.46117,46.37481],[9.57015,46.2958],[9.71273,46.29266],[9.73086,46.35071],[9.95249,46.38045],[10.07055,46.21668],[10.14439,46.22992],[10.17862,46.25626],[10.10506,46.3372],[10.165,46.41051],[10.03715,46.44479],[10.10307,46.61003],[10.23674,46.63484],[10.25309,46.57432],[10.46136,46.53164],[10.49375,46.62049],[10.44686,46.64162],[10.40475,46.63671],[10.38659,46.67847],[10.47197,46.85698],[10.54783,46.84505],[10.66405,46.87614],[10.75753,46.82258],[10.72974,46.78972],[11.00764,46.76896],[11.10618,46.92966],[11.33355,46.99862],[11.50739,47.00644],[11.74789,46.98484],[12.19254,47.09331],[12.21781,47.03996],[12.11675,47.01241],[12.2006,46.88854],[12.27591,46.88651],[12.38708,46.71529],[12.59992,46.6595],[12.94445,46.60401],[13.27627,46.56059],[13.64088,46.53438],[13.7148,46.5222],[13.68684,46.43881],[13.59777,46.44137],[13.5763,46.42613],[13.5763,46.40915],[13.47019,46.3621],[13.43418,46.35992],[13.44808,46.33507],[13.37671,46.29668],[13.42218,46.20758],[13.47587,46.22725],[13.56114,46.2054],[13.56682,46.18703],[13.64451,46.18966],[13.66472,46.17392],[13.64053,46.13587],[13.57072,46.09022],[13.50104,46.05986],[13.49568,46.04839],[13.50998,46.04498],[13.49702,46.01832],[13.47474,46.00546],[13.50104,45.98078],[13.52963,45.96588],[13.56759,45.96991],[13.58903,45.99009],[13.62074,45.98388],[13.63458,45.98947],[13.64307,45.98326],[13.6329,45.94894],[13.63815,45.93607],[13.61931,45.91782],[13.60857,45.89907],[13.59565,45.89446],[13.58644,45.88173],[13.57563,45.8425],[13.58858,45.83503],[13.59784,45.8072],[13.66986,45.79955],[13.8235,45.7176],[13.83332,45.70855],[13.83422,45.68703],[13.87933,45.65207],[13.9191,45.6322],[13.8695,45.60835],[13.86771,45.59898],[13.84106,45.58185],[13.78445,45.5825],[13.74587,45.59811],[13.7198,45.59352],[13.6076,45.64761],[13.45644,45.59464],[13.05142,45.33128],[13.12821,44.48877],[16.15283,42.18525],[18.83516,40.36999],[17.67657,35.68918],[14.02721,36.53141],[12.13667,34.20326],[11.2718,37.6713],[7.89009,38.19924],[7.60802,41.05927],[10.09675,41.44089],[9.56115,43.20816],[7.63035,43.57419]],[[12.45181,41.90056],[12.45446,41.90028],[12.45435,41.90143],[12.45626,41.90172],[12.45691,41.90125],[12.4577,41.90115],[12.45834,41.90174],[12.45826,41.90281],[12.45755,41.9033],[12.45762,41.9058],[12.45561,41.90629],[12.45543,41.90738],[12.45091,41.90625],[12.44984,41.90545],[12.44815,41.90326],[12.44582,41.90194],[12.44834,41.90095],[12.45181,41.90056]],[[12.45648,43.89369],[12.48771,43.89706],[12.49429,43.90973],[12.49247,43.91774],[12.49724,43.92248],[12.50269,43.92363],[12.50496,43.93017],[12.51553,43.94096],[12.51427,43.94897],[12.50655,43.95796],[12.50875,43.96198],[12.50622,43.97131],[12.51109,43.97201],[12.51064,43.98165],[12.5154,43.98508],[12.51463,43.99122],[12.50678,43.99113],[12.49406,43.98492],[12.47853,43.98052],[12.46205,43.97463],[12.44684,43.96597],[12.43662,43.95698],[12.42005,43.9578],[12.41414,43.95273],[12.40415,43.95485],[12.40506,43.94325],[12.41165,43.93769],[12.41551,43.92984],[12.40733,43.92379],[12.41233,43.90956],[12.40935,43.9024],[12.41641,43.89991],[12.44184,43.90498],[12.45648,43.89369]]]]}},{type:"Feature",properties:{iso1A2:"UY",iso1A3:"URY",iso1N3:"858",wikidata:"Q77",nameEn:"Uruguay",groups:["005","419","019"],callingCodes:["598"]},geometry:{type:"MultiPolygon",coordinates:[[[[-57.65132,-30.19229],[-57.22502,-30.26121],[-56.90236,-30.02578],[-56.49267,-30.39471],[-56.4795,-30.3899],[-56.4619,-30.38457],[-55.87388,-31.05053],[-55.58866,-30.84117],[-55.5634,-30.8686],[-55.55373,-30.8732],[-55.55218,-30.88193],[-55.54572,-30.89051],[-55.53431,-30.89714],[-55.53276,-30.90218],[-55.52712,-30.89997],[-55.51862,-30.89828],[-55.50841,-30.9027],[-55.50821,-30.91349],[-54.17384,-31.86168],[-53.76024,-32.0751],[-53.39572,-32.58596],[-53.37671,-32.57005],[-53.1111,-32.71147],[-53.53459,-33.16843],[-53.52794,-33.68908],[-53.44031,-33.69344],[-53.39593,-33.75169],[-53.37138,-33.74313],[-52.83257,-34.01481],[-54.78916,-36.21945],[-57.83001,-34.69099],[-58.34425,-34.15035],[-58.44442,-33.84033],[-58.40475,-33.11777],[-58.1224,-32.98842],[-58.22362,-32.52416],[-58.10036,-32.25338],[-58.20252,-31.86966],[-58.00076,-31.65016],[-58.0023,-31.53084],[-58.07569,-31.44916],[-57.98127,-31.3872],[-57.9908,-31.34924],[-57.86729,-31.06352],[-57.89476,-30.95994],[-57.8024,-30.77193],[-57.89115,-30.49572],[-57.64859,-30.35095],[-57.61478,-30.25165],[-57.65132,-30.19229]]]]}},{type:"Feature",properties:{iso1A2:"KI",iso1A3:"KIR",iso1N3:"296",wikidata:"Q710",nameEn:"Kiribati",groups:["057","009"],driveSide:"left",callingCodes:["686"]},geometry:{type:"MultiPolygon",coordinates:[[[[169,3.9],[178,3.9],[178,-3.5],[169,-3.5],[169,3.9]]],[[[-158.62058,-1.35506],[-158.62734,1.1296],[-161.05669,1.11722],[-161.06795,5.2462],[-149.65979,5.27712],[-149.6249,-7.51261],[-149.61166,-12.30171],[-156.4957,-12.32002],[-156.50903,-7.4975],[-167.75329,-7.52784],[-174.18707,-7.54408],[-175.31804,-7.54825],[-175.33482,-1.40631],[-161.04969,-1.36251],[-158.62058,-1.35506]]]]}},{type:"Feature",properties:{iso1A2:"UZ",iso1A3:"UZB",iso1N3:"860",wikidata:"Q265",nameEn:"Uzbekistan",groups:["143","142"],callingCodes:["998"]},geometry:{type:"MultiPolygon",coordinates:[[[[65.85194,42.85481],[66.09482,42.93426],[66.00546,41.94455],[66.53302,41.87388],[66.69129,41.1311],[67.9644,41.14611],[67.98511,41.02794],[68.08273,41.08148],[68.1271,41.0324],[67.96736,40.83798],[68.49983,40.56437],[68.63,40.59358],[68.58444,40.91447],[68.49983,40.99669],[68.62221,41.03019],[68.65662,40.93861],[68.73945,40.96989],[68.7217,41.05025],[69.01308,41.22804],[69.05006,41.36183],[69.15137,41.43078],[69.17701,41.43769],[69.18528,41.45175],[69.20439,41.45391],[69.22671,41.46298],[69.23332,41.45847],[69.25059,41.46693],[69.29778,41.43673],[69.35554,41.47211],[69.37468,41.46555],[69.45081,41.46246],[69.39485,41.51518],[69.45751,41.56863],[69.49545,41.545],[70.94483,42.26238],[71.13263,42.28356],[71.28719,42.18033],[70.69777,41.92554],[70.17682,41.5455],[70.48909,41.40335],[70.67586,41.47953],[70.78572,41.36419],[70.77885,41.24813],[70.86263,41.23833],[70.9615,41.16393],[71.02193,41.19494],[71.11806,41.15359],[71.25813,41.18796],[71.27187,41.11015],[71.34877,41.16807],[71.40198,41.09436],[71.46148,41.13958],[71.43814,41.19644],[71.46688,41.31883],[71.57227,41.29175],[71.6787,41.42111],[71.65914,41.49599],[71.73054,41.54713],[71.71132,41.43012],[71.76625,41.4466],[71.83914,41.3546],[71.91457,41.2982],[71.85964,41.19081],[72.07249,41.11739],[72.10745,41.15483],[72.16433,41.16483],[72.17594,41.15522],[72.14864,41.13363],[72.1792,41.10621],[72.21061,41.05607],[72.17594,41.02377],[72.18339,40.99571],[72.324,41.03381],[72.34026,41.04539],[72.34757,41.06104],[72.36138,41.04384],[72.38511,41.02785],[72.45206,41.03018],[72.48742,40.97136],[72.55109,40.96046],[72.59136,40.86947],[72.68157,40.84942],[72.84291,40.85512],[72.94454,40.8094],[73.01869,40.84681],[73.13267,40.83512],[73.13412,40.79122],[73.0612,40.76678],[72.99133,40.76457],[72.93296,40.73089],[72.8722,40.71111],[72.85372,40.7116],[72.84754,40.67229],[72.80137,40.67856],[72.74866,40.60873],[72.74894,40.59592],[72.75982,40.57273],[72.74862,40.57131],[72.74768,40.58051],[72.73995,40.58409],[72.69579,40.59778],[72.66713,40.59076],[72.66713,40.5219],[72.47795,40.5532],[72.40517,40.61917],[72.34406,40.60144],[72.41714,40.55736],[72.38384,40.51535],[72.41513,40.50856],[72.44191,40.48222],[72.40346,40.4007],[72.24368,40.46091],[72.18648,40.49893],[71.96401,40.31907],[72.05464,40.27586],[71.85002,40.25647],[71.82646,40.21872],[71.73054,40.14818],[71.71719,40.17886],[71.69621,40.18492],[71.70569,40.20391],[71.68386,40.26984],[71.61931,40.26775],[71.61725,40.20615],[71.51549,40.22986],[71.51215,40.26943],[71.4246,40.28619],[71.36663,40.31593],[71.13042,40.34106],[71.05901,40.28765],[70.95789,40.28761],[70.9818,40.22392],[70.8607,40.217],[70.62342,40.17396],[70.56394,40.26421],[70.57149,40.3442],[70.37511,40.38605],[70.32626,40.45174],[70.49871,40.52503],[70.80009,40.72825],[70.45251,41.04438],[70.38028,41.02014],[70.36655,40.90296],[69.69434,40.62615],[69.59441,40.70181],[69.53021,40.77621],[69.38327,40.7918],[69.32834,40.70233],[69.3455,40.57988],[69.2643,40.57506],[69.21063,40.54469],[69.27066,40.49274],[69.28525,40.41894],[69.30774,40.36102],[69.33794,40.34819],[69.32833,40.29794],[69.30808,40.2821],[69.24817,40.30357],[69.25229,40.26362],[69.30104,40.24502],[69.30448,40.18774],[69.2074,40.21488],[69.15659,40.2162],[69.04544,40.22904],[68.85832,40.20885],[68.84357,40.18604],[68.79276,40.17555],[68.77902,40.20492],[68.5332,40.14826],[68.52771,40.11676],[68.62796,40.07789],[69.01523,40.15771],[69.01935,40.11466],[68.96579,40.06949],[68.84906,40.04952],[68.93695,39.91167],[68.88889,39.87163],[68.63071,39.85265],[68.61972,39.68905],[68.54166,39.53929],[68.12053,39.56317],[67.70992,39.66156],[67.62889,39.60234],[67.44899,39.57799],[67.46547,39.53564],[67.39681,39.52505],[67.46822,39.46146],[67.45998,39.315],[67.36522,39.31287],[67.33226,39.23739],[67.67833,39.14479],[67.68915,39.00775],[68.09704,39.02589],[68.19743,38.85985],[68.06948,38.82115],[68.12877,38.73677],[68.05598,38.71641],[68.0807,38.64136],[68.05873,38.56087],[68.11366,38.47169],[68.06274,38.39435],[68.13289,38.40822],[68.40343,38.19484],[68.27159,37.91477],[68.12635,37.93],[67.81566,37.43107],[67.8474,37.31594],[67.78329,37.1834],[67.51868,37.26102],[67.2581,37.17216],[67.2224,37.24545],[67.13039,37.27168],[67.08232,37.35469],[66.95598,37.40162],[66.64699,37.32958],[66.55743,37.35409],[66.52303,37.39827],[66.65761,37.45497],[66.52852,37.58568],[66.53676,37.80084],[66.67684,37.96776],[66.56697,38.0435],[66.41042,38.02403],[66.24013,38.16238],[65.83913,38.25733],[65.55873,38.29052],[64.32576,38.98691],[64.19086,38.95561],[63.70778,39.22349],[63.6913,39.27666],[62.43337,39.98528],[62.34273,40.43206],[62.11751,40.58242],[61.87856,41.12257],[61.4446,41.29407],[61.39732,41.19873],[61.33199,41.14946],[61.22212,41.14946],[61.03261,41.25691],[60.5078,41.21694],[60.06581,41.4363],[60.18117,41.60082],[60.06032,41.76287],[60.08504,41.80997],[60.33223,41.75058],[59.95046,41.97966],[60.0356,42.01028],[60.04659,42.08982],[59.96419,42.1428],[60.00539,42.212],[59.94633,42.27655],[59.4341,42.29738],[59.2955,42.37064],[59.17317,42.52248],[58.93422,42.5407],[58.6266,42.79314],[58.57991,42.64988],[58.27504,42.69632],[58.14321,42.62159],[58.29427,42.56497],[58.51674,42.30348],[58.40688,42.29535],[58.3492,42.43335],[57.99214,42.50021],[57.90975,42.4374],[57.92897,42.24047],[57.84932,42.18555],[57.6296,42.16519],[57.30275,42.14076],[57.03633,41.92043],[56.96218,41.80383],[57.03359,41.41777],[57.13796,41.36625],[57.03423,41.25435],[56.00314,41.32584],[55.97584,44.99322],[55.97584,44.99328],[55.97584,44.99338],[55.97584,44.99343],[55.97584,44.99348],[55.97584,44.99353],[55.97584,44.99359],[55.97584,44.99369],[55.97584,44.99374],[55.97584,44.99384],[55.97584,44.9939],[55.97584,44.994],[55.97584,44.99405],[55.97584,44.99415],[55.97584,44.99421],[55.97584,44.99426],[55.97584,44.99431],[55.97584,44.99436],[55.97584,44.99441],[55.97594,44.99446],[55.97605,44.99452],[55.97605,44.99457],[55.97605,44.99462],[55.97605,44.99467],[55.97605,44.99477],[55.97615,44.99477],[55.97615,44.99483],[55.97615,44.99493],[55.97615,44.99498],[55.97615,44.99503],[55.97615,44.99508],[55.97625,44.99514],[55.97636,44.99519],[55.97636,44.99524],[55.97646,44.99529],[55.97646,44.99534],[55.97656,44.99539],[55.97667,44.99545],[55.97677,44.9955],[55.97677,44.99555],[55.97677,44.9956],[55.97687,44.9956],[55.97698,44.99565],[55.97698,44.9957],[55.97708,44.99576],[55.97718,44.99581],[55.97729,44.99586],[55.97739,44.99586],[55.97739,44.99591],[55.97749,44.99591],[55.9776,44.99591],[55.9777,44.99596],[55.9777,44.99601],[55.9778,44.99607],[55.97791,44.99607],[55.97801,44.99607],[55.97801,44.99612],[55.97811,44.99617],[55.97822,44.99617],[55.97832,44.99622],[55.97842,44.99622],[58.59711,45.58671],[61.01475,44.41383],[62.01711,43.51008],[63.34656,43.64003],[64.53885,43.56941],[64.96464,43.74748],[65.18666,43.48835],[65.53277,43.31856],[65.85194,42.85481]],[[70.68112,40.90612],[70.6158,40.97661],[70.56077,41.00642],[70.54223,40.98787],[70.57501,40.98941],[70.6721,40.90555],[70.68112,40.90612]]],[[[71.21139,40.03369],[71.1427,39.95026],[71.23067,39.93581],[71.16101,39.88423],[71.10531,39.91354],[71.04979,39.89808],[71.10501,39.95568],[71.09063,39.99],[71.11668,39.99291],[71.11037,40.01984],[71.01035,40.05481],[71.00236,40.18154],[71.06305,40.1771],[71.12218,40.03052],[71.21139,40.03369]]],[[[71.86463,39.98598],[71.84316,39.95582],[71.7504,39.93701],[71.71511,39.96348],[71.78838,40.01404],[71.86463,39.98598]]]]}},{type:"Feature",properties:{iso1A2:"AO",iso1A3:"AGO",iso1N3:"024",wikidata:"Q916",nameEn:"Angola",groups:["017","202","002"],callingCodes:["244"]},geometry:{type:"MultiPolygon",coordinates:[[[[16.55507,-5.85631],[16.96282,-7.21787],[17.5828,-8.13784],[18.33635,-8.00126],[19.33698,-7.99743],[19.5469,-7.00195],[20.30218,-6.98955],[20.31846,-6.91953],[20.61689,-6.90876],[20.56263,-7.28566],[21.79824,-7.29628],[21.84856,-9.59871],[22.19039,-9.94628],[22.32604,-10.76291],[22.17954,-10.85884],[22.25951,-11.24911],[22.54205,-11.05784],[23.16602,-11.10577],[23.45631,-10.946],[23.86868,-11.02856],[24.00027,-10.89356],[24.02603,-11.15368],[23.98804,-12.13149],[24.06672,-12.29058],[23.90937,-12.844],[24.03339,-12.99091],[21.97988,-13.00148],[22.00323,-16.18028],[22.17217,-16.50269],[23.20038,-17.47563],[23.47474,-17.62877],[21.42741,-18.02787],[21.14283,-17.94318],[18.84226,-17.80375],[18.39229,-17.38927],[14.28743,-17.38814],[13.95896,-17.43141],[13.36212,-16.98048],[12.97145,-16.98567],[12.52111,-17.24495],[12.07076,-17.15165],[11.75063,-17.25013],[10.5065,-17.25284],[11.50888,-5.33417],[12.00924,-5.02627],[12.16068,-4.90089],[12.20901,-4.75642],[12.25587,-4.79437],[12.32324,-4.78415],[12.40964,-4.60609],[12.64835,-4.55937],[12.76844,-4.38709],[12.87096,-4.40315],[12.91489,-4.47907],[13.09648,-4.63739],[13.11195,-4.67745],[12.8733,-4.74346],[12.70868,-4.95505],[12.63465,-4.94632],[12.60251,-5.01715],[12.46297,-5.09408],[12.49815,-5.14058],[12.51589,-5.1332],[12.53586,-5.14658],[12.53599,-5.1618],[12.52301,-5.17481],[12.52318,-5.74353],[12.26557,-5.74031],[12.20376,-5.76338],[11.95767,-5.94705],[12.42245,-6.07585],[13.04371,-5.87078],[16.55507,-5.85631]]]]}},{type:"Feature",properties:{iso1A2:"VA",iso1A3:"VAT",iso1N3:"336",wikidata:"Q237",nameEn:"Vatican City",aliases:["Holy See"],groups:["039","150"],callingCodes:["379","39 06"]},geometry:{type:"MultiPolygon",coordinates:[[[[12.45181,41.90056],[12.44834,41.90095],[12.44582,41.90194],[12.44815,41.90326],[12.44984,41.90545],[12.45091,41.90625],[12.45543,41.90738],[12.45561,41.90629],[12.45762,41.9058],[12.45755,41.9033],[12.45826,41.90281],[12.45834,41.90174],[12.4577,41.90115],[12.45691,41.90125],[12.45626,41.90172],[12.45435,41.90143],[12.45446,41.90028],[12.45181,41.90056]]]]}},{type:"Feature",properties:{iso1A2:"BI",iso1A3:"BDI",iso1N3:"108",wikidata:"Q967",nameEn:"Burundi",groups:["014","202","002"],callingCodes:["257"]},geometry:{type:"MultiPolygon",coordinates:[[[[30.54501,-2.41404],[30.41789,-2.66266],[30.52747,-2.65841],[30.40662,-2.86151],[30.4987,-2.9573],[30.57926,-2.89791],[30.6675,-2.98987],[30.83823,-2.97837],[30.84165,-3.25152],[30.45915,-3.56532],[30.22042,-4.01738],[30.03323,-4.26631],[29.88172,-4.35743],[29.82885,-4.36153],[29.77289,-4.41733],[29.75109,-4.45836],[29.63827,-4.44681],[29.43673,-4.44845],[29.23708,-3.75856],[29.21463,-3.3514],[29.25633,-3.05471],[29.17258,-2.99385],[29.16037,-2.95457],[29.09797,-2.91935],[29.09119,-2.87871],[29.0505,-2.81774],[29.00404,-2.81978],[29.00167,-2.78523],[29.04081,-2.7416],[29.0562,-2.58632],[29.32234,-2.6483],[29.36805,-2.82933],[29.88237,-2.75105],[29.95911,-2.33348],[30.14034,-2.43626],[30.42933,-2.31064],[30.54501,-2.41404]]]]}},{type:"Feature",properties:{iso1A2:"VC",iso1A3:"VCT",iso1N3:"670",wikidata:"Q757",nameEn:"St. Vincent and the Grenadines",aliases:["WV"],groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 784"]},geometry:{type:"MultiPolygon",coordinates:[[[[-61.73897,12.61191],[-61.43129,13.68336],[-60.70539,13.41452],[-61.13395,12.51526],[-61.38256,12.52991],[-61.73897,12.61191]]]]}},{type:"Feature",properties:{iso1A2:"CD",iso1A3:"COD",iso1N3:"180",wikidata:"Q974",nameEn:"Democratic Republic of the Congo",aliases:["ZR"],groups:["017","202","002"],callingCodes:["243"]},geometry:{type:"MultiPolygon",coordinates:[[[[27.44012,5.07349],[27.56656,4.89375],[27.65462,4.89375],[27.76469,4.79284],[27.79551,4.59976],[28.20719,4.35614],[28.6651,4.42638],[28.8126,4.48784],[29.03054,4.48784],[29.22207,4.34297],[29.43341,4.50101],[29.49726,4.7007],[29.82087,4.56246],[29.79666,4.37809],[30.06964,4.13221],[30.1621,4.10586],[30.22374,3.93896],[30.27658,3.95653],[30.47691,3.83353],[30.55396,3.84451],[30.57378,3.74567],[30.56277,3.62703],[30.78512,3.67097],[30.80713,3.60506],[30.85997,3.5743],[30.85153,3.48867],[30.94081,3.50847],[30.93486,3.40737],[30.84251,3.26908],[30.77101,3.04897],[30.8574,2.9508],[30.8857,2.83923],[30.75612,2.5863],[30.74271,2.43601],[30.83059,2.42559],[30.91102,2.33332],[30.96911,2.41071],[31.06593,2.35862],[31.07934,2.30207],[31.12104,2.27676],[31.1985,2.29462],[31.20148,2.2217],[31.28042,2.17853],[31.30127,2.11006],[30.48503,1.21675],[30.24671,1.14974],[30.22139,0.99635],[30.1484,0.89805],[29.98307,0.84295],[29.95477,0.64486],[29.97413,0.52124],[29.87284,0.39166],[29.81922,0.16824],[29.77454,0.16675],[29.7224,0.07291],[29.72687,-0.08051],[29.65091,-0.46777],[29.67474,-0.47969],[29.67176,-0.55714],[29.62708,-0.71055],[29.63006,-0.8997],[29.58388,-0.89821],[29.59061,-1.39016],[29.53062,-1.40499],[29.45038,-1.5054],[29.36322,-1.50887],[29.24323,-1.66826],[29.24458,-1.69663],[29.11847,-1.90576],[29.17562,-2.12278],[29.105,-2.27043],[29.00051,-2.29001],[28.95642,-2.37321],[28.89601,-2.37321],[28.86826,-2.41888],[28.86846,-2.44866],[28.89132,-2.47557],[28.89342,-2.49017],[28.88846,-2.50493],[28.87497,-2.50887],[28.86209,-2.5231],[28.86193,-2.53185],[28.87943,-2.55165],[28.89288,-2.55848],[28.90226,-2.62385],[28.89793,-2.66111],[28.94346,-2.69124],[29.00357,-2.70596],[29.04081,-2.7416],[29.00167,-2.78523],[29.00404,-2.81978],[29.0505,-2.81774],[29.09119,-2.87871],[29.09797,-2.91935],[29.16037,-2.95457],[29.17258,-2.99385],[29.25633,-3.05471],[29.21463,-3.3514],[29.23708,-3.75856],[29.43673,-4.44845],[29.52552,-6.2731],[30.2567,-7.14121],[30.79243,-8.27382],[28.88917,-8.4831],[28.9711,-8.66935],[28.38526,-9.23393],[28.36562,-9.30091],[28.52636,-9.35379],[28.51627,-9.44726],[28.56208,-9.49122],[28.68532,-9.78],[28.62795,-9.92942],[28.65032,-10.65133],[28.37241,-11.57848],[28.48357,-11.87532],[29.18592,-12.37921],[29.4992,-12.43843],[29.48404,-12.23604],[29.8139,-12.14898],[29.81551,-13.44683],[29.65078,-13.41844],[29.60531,-13.21685],[29.01918,-13.41353],[28.33199,-12.41375],[27.59932,-12.22123],[27.21025,-11.76157],[27.22541,-11.60323],[27.04351,-11.61312],[26.88687,-12.01868],[26.01777,-11.91488],[25.33058,-11.65767],[25.34069,-11.19707],[24.42612,-11.44975],[24.34528,-11.06816],[24.00027,-10.89356],[23.86868,-11.02856],[23.45631,-10.946],[23.16602,-11.10577],[22.54205,-11.05784],[22.25951,-11.24911],[22.17954,-10.85884],[22.32604,-10.76291],[22.19039,-9.94628],[21.84856,-9.59871],[21.79824,-7.29628],[20.56263,-7.28566],[20.61689,-6.90876],[20.31846,-6.91953],[20.30218,-6.98955],[19.5469,-7.00195],[19.33698,-7.99743],[18.33635,-8.00126],[17.5828,-8.13784],[16.96282,-7.21787],[16.55507,-5.85631],[13.04371,-5.87078],[12.42245,-6.07585],[11.95767,-5.94705],[12.20376,-5.76338],[12.26557,-5.74031],[12.52318,-5.74353],[12.52301,-5.17481],[12.53599,-5.1618],[12.53586,-5.14658],[12.51589,-5.1332],[12.49815,-5.14058],[12.46297,-5.09408],[12.60251,-5.01715],[12.63465,-4.94632],[12.70868,-4.95505],[12.8733,-4.74346],[13.11195,-4.67745],[13.09648,-4.63739],[13.11182,-4.5942],[13.41764,-4.89897],[13.50305,-4.77818],[13.70417,-4.72601],[13.71794,-4.44864],[13.81162,-4.41842],[13.9108,-4.50906],[14.40672,-4.28381],[14.3957,-4.36623],[14.47284,-4.42941],[14.37366,-4.56125],[14.41499,-4.8825],[14.5059,-4.84956],[14.67948,-4.92093],[14.83101,-4.80838],[15.1978,-4.32388],[15.25411,-4.31121],[15.32693,-4.27282],[15.41785,-4.28381],[15.48121,-4.22062],[15.53081,-4.042],[15.89448,-3.9513],[16.21407,-3.2969],[16.1755,-3.25014],[16.22785,-2.59528],[16.16173,-2.16586],[16.50336,-1.8795],[16.70724,-1.45815],[16.97999,-1.12762],[17.32438,-0.99265],[17.72112,-0.52707],[17.66051,-0.26535],[17.81204,0.23884],[17.93877,0.32424],[17.95255,0.48128],[17.86989,0.58873],[17.85887,1.04327],[18.08034,1.58553],[18.10683,2.26876],[18.63857,3.19342],[18.62755,3.47564],[20.60184,4.42394],[20.90383,4.44877],[21.08793,4.39603],[21.11214,4.33895],[21.21341,4.29285],[21.25744,4.33676],[21.55904,4.25553],[21.6405,4.317],[22.10721,4.20723],[22.27682,4.11347],[22.45504,4.13039],[22.5431,4.22041],[22.60915,4.48821],[22.6928,4.47285],[22.78526,4.71423],[22.84691,4.69887],[22.89094,4.79321],[22.94817,4.82392],[23.38847,4.60013],[24.46719,5.0915],[24.71816,4.90509],[25.31256,5.03668],[25.34558,5.29101],[25.53271,5.37431],[25.86073,5.19455],[26.13371,5.25594],[26.48595,5.04984],[26.74572,5.10685],[26.85579,5.03887],[26.93064,5.13535],[27.09575,5.22305],[27.44012,5.07349]]]]}},{type:"Feature",properties:{iso1A2:"VE",iso1A3:"VEN",iso1N3:"862",wikidata:"Q717",nameEn:"Venezuela",aliases:["YV"],groups:["005","419","019"],callingCodes:["58"]},geometry:{type:"MultiPolygon",coordinates:[[[[-71.22331,13.01387],[-68.99639,11.79035],[-68.33524,11.78151],[-68.01417,11.77722],[-67.89186,12.4116],[-63.19938,16.44103],[-63.73917,11.92623],[-61.62505,11.18974],[-62.08693,10.04435],[-60.89962,9.81445],[-59.54058,8.6862],[-59.98508,8.53046],[-59.85562,8.35213],[-59.80661,8.28906],[-59.83156,8.23261],[-59.97059,8.20791],[-60.02407,8.04557],[-60.38056,7.8302],[-60.51959,7.83373],[-60.64793,7.56877],[-60.71923,7.55817],[-60.59802,7.33194],[-60.63367,7.25061],[-60.54098,7.14804],[-60.44116,7.20817],[-60.28074,7.1162],[-60.39419,6.94847],[-60.54873,6.8631],[-61.13632,6.70922],[-61.20762,6.58174],[-61.15058,6.19558],[-61.4041,5.95304],[-60.73204,5.20931],[-60.5802,4.94312],[-60.86539,4.70512],[-60.98303,4.54167],[-61.15703,4.49839],[-61.31457,4.54167],[-61.29675,4.44216],[-61.48569,4.43149],[-61.54629,4.2822],[-62.13094,4.08309],[-62.44822,4.18621],[-62.57656,4.04754],[-62.74411,4.03331],[-62.7655,3.73099],[-62.98296,3.59935],[-63.21111,3.96219],[-63.4464,3.9693],[-63.42233,3.89995],[-63.50611,3.83592],[-63.67099,4.01731],[-63.70218,3.91417],[-63.86082,3.94796],[-63.99183,3.90172],[-64.14512,4.12932],[-64.57648,4.12576],[-64.72977,4.28931],[-64.84028,4.24665],[-64.48379,3.7879],[-64.02908,2.79797],[-64.0257,2.48156],[-63.39114,2.4317],[-63.39827,2.16098],[-64.06135,1.94722],[-64.08274,1.64792],[-64.34654,1.35569],[-64.38932,1.5125],[-65.11657,1.12046],[-65.57288,0.62856],[-65.50158,0.92086],[-65.6727,1.01353],[-66.28507,0.74585],[-66.85795,1.22998],[-67.21967,2.35778],[-67.65696,2.81691],[-67.85862,2.79173],[-67.85862,2.86727],[-67.30945,3.38393],[-67.50067,3.75812],[-67.62671,3.74303],[-67.85358,4.53249],[-67.83341,5.31104],[-67.59141,5.5369],[-67.63914,5.64963],[-67.58558,5.84537],[-67.43513,5.98835],[-67.4625,6.20625],[-67.60654,6.2891],[-69.41843,6.1072],[-70.10716,6.96516],[-70.7596,7.09799],[-71.03941,6.98163],[-71.37234,7.01588],[-71.42212,7.03854],[-71.44118,7.02116],[-71.82441,7.04314],[-72.04895,7.03837],[-72.19437,7.37034],[-72.43132,7.40034],[-72.47415,7.48928],[-72.45321,7.57232],[-72.47827,7.65604],[-72.46763,7.79518],[-72.44454,7.86031],[-72.46183,7.90682],[-72.45806,7.91141],[-72.47042,7.92306],[-72.48183,7.92909],[-72.48801,7.94329],[-72.47213,7.96106],[-72.39137,8.03534],[-72.35163,8.01163],[-72.36987,8.19976],[-72.4042,8.36513],[-72.65474,8.61428],[-72.77415,9.10165],[-72.94052,9.10663],[-73.02119,9.27584],[-73.36905,9.16636],[-72.98085,9.85253],[-72.88002,10.44309],[-72.4767,11.1117],[-72.24983,11.14138],[-71.9675,11.65536],[-71.3275,11.85],[-70.92579,11.96275],[-71.22331,13.01387]]]]}},{type:"Feature",properties:{iso1A2:"CY",iso1A3:"CYP",iso1N3:"196",wikidata:"Q229",nameEn:"Cyprus",groups:["EU","145","142"],driveSide:"left",callingCodes:["357"]},geometry:{type:"MultiPolygon",coordinates:[[[[33.70639,34.99303],[33.70575,34.97947],[33.83531,34.73974],[33.26744,34.49942],[33.0138,34.64424],[32.96968,34.64046],[32.96718,34.63446],[32.95891,34.62919],[32.95323,34.64075],[32.95471,34.64528],[32.94976,34.65204],[32.94796,34.6587],[32.95325,34.66462],[32.97079,34.66112],[32.97736,34.65277],[32.99014,34.65518],[32.98668,34.67268],[32.99135,34.68061],[32.95539,34.68471],[32.94683,34.67907],[32.94379,34.67111],[32.93693,34.67027],[32.93449,34.66241],[32.92807,34.66736],[32.93043,34.67091],[32.91398,34.67343],[32.9068,34.66102],[32.86167,34.68734],[32.86014,34.70585],[32.82717,34.70622],[32.79433,34.67883],[32.76136,34.68318],[32.75515,34.64985],[32.74412,34.43926],[30.15137,34.08517],[32.82353,35.70297],[35.51152,36.10954],[35.48515,34.70851],[33.98684,34.76642],[33.90075,34.96623],[33.86432,34.97592],[33.84811,34.97075],[33.83505,34.98108],[33.85621,34.98956],[33.85891,35.001],[33.85216,35.00579],[33.84045,35.00616],[33.82875,35.01685],[33.83055,35.02865],[33.81524,35.04192],[33.8012,35.04786],[33.82051,35.0667],[33.8355,35.05777],[33.85261,35.0574],[33.88367,35.07877],[33.89485,35.06873],[33.90247,35.07686],[33.91299,35.07579],[33.91789,35.08688],[33.89853,35.11377],[33.88737,35.11408],[33.88943,35.12007],[33.88561,35.12449],[33.87224,35.12293],[33.87622,35.10457],[33.87097,35.09389],[33.87479,35.08881],[33.8541,35.07201],[33.84168,35.06823],[33.82067,35.07826],[33.78581,35.05104],[33.76106,35.04253],[33.73824,35.05321],[33.71482,35.03722],[33.70209,35.04882],[33.7161,35.07279],[33.70861,35.07644],[33.69095,35.06237],[33.68474,35.06602],[33.67742,35.05963],[33.67678,35.03866],[33.69938,35.03123],[33.69731,35.01754],[33.71514,35.00294],[33.70639,34.99303]]],[[[33.74144,35.01053],[33.7343,35.01178],[33.73781,35.02181],[33.74265,35.02329],[33.74983,35.02274],[33.7492,35.01319],[33.74144,35.01053]]],[[[33.77312,34.9976],[33.77553,34.99518],[33.78516,34.99582],[33.79191,34.98914],[33.78917,34.98854],[33.78571,34.98951],[33.78318,34.98699],[33.78149,34.98854],[33.77843,34.988],[33.7778,34.98981],[33.76738,34.99188],[33.76605,34.99543],[33.75682,34.99916],[33.75994,35.00113],[33.77312,34.9976]]]]}},{type:"Feature",properties:{iso1A2:"VG",iso1A3:"VGB",iso1N3:"092",wikidata:"Q25305",nameEn:"British Virgin Islands",country:"GB",groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 284"]},geometry:{type:"MultiPolygon",coordinates:[[[[-64.03057,18.08241],[-64.646,18.10286],[-64.64067,18.36478],[-64.86027,18.39056],[-65.02435,18.73231],[-63.75633,19.39745],[-64.03057,18.08241]]]]}},{type:"Feature",properties:{iso1A2:"ET",iso1A3:"ETH",iso1N3:"231",wikidata:"Q115",nameEn:"Ethiopia",groups:["014","202","002"],callingCodes:["251"]},geometry:{type:"MultiPolygon",coordinates:[[[[42.4037,12.46478],[41.95461,11.81157],[41.82878,11.72361],[41.77727,11.49902],[41.8096,11.33606],[41.80056,10.97127],[42.06302,10.92599],[42.13691,10.97586],[42.42669,10.98493],[42.62989,11.09711],[42.75111,11.06992],[42.79037,10.98493],[42.95776,10.98533],[42.69452,10.62672],[42.87643,10.18441],[43.0937,9.90579],[43.23518,9.84605],[43.32613,9.59205],[44.19222,8.93028],[46.99339,7.9989],[47.92477,8.00111],[47.97917,8.00124],[44.98104,4.91821],[44.02436,4.9451],[43.40263,4.79289],[43.04177,4.57923],[42.97746,4.44032],[42.84526,4.28357],[42.55853,4.20518],[42.07619,4.17667],[41.89488,3.97375],[41.1754,3.94079],[40.77498,4.27683],[39.86043,3.86974],[39.76808,3.67058],[39.58339,3.47434],[39.55132,3.39634],[39.51551,3.40895],[39.49444,3.45521],[39.19954,3.47834],[39.07736,3.5267],[38.91938,3.51198],[38.52336,3.62551],[38.45812,3.60445],[38.14168,3.62487],[37.07724,4.33503],[36.84474,4.44518],[36.03924,4.44406],[35.95449,4.53244],[35.9419,4.61933],[35.82118,4.77382],[35.81968,5.10757],[35.8576,5.33413],[35.50792,5.42431],[35.29938,5.34042],[35.31188,5.50106],[35.13058,5.62118],[35.12611,5.68937],[35.00546,5.89387],[34.96227,6.26415],[35.01738,6.46991],[34.87736,6.60161],[34.77459,6.5957],[34.65096,6.72589],[34.53776,6.74808],[34.53925,6.82794],[34.47669,6.91076],[34.35753,6.91963],[34.19369,7.04382],[34.19369,7.12807],[34.01495,7.25664],[34.03878,7.27437],[34.02984,7.36449],[33.87642,7.5491],[33.71407,7.65983],[33.44745,7.7543],[33.32531,7.71297],[33.24637,7.77939],[33.04944,7.78989],[33.0006,7.90333],[33.08401,8.05822],[33.18083,8.13047],[33.1853,8.29264],[33.19721,8.40317],[33.3119,8.45474],[33.54575,8.47094],[33.66938,8.44442],[33.71407,8.3678],[33.87195,8.41938],[33.89579,8.4842],[34.01346,8.50041],[34.14453,8.60204],[34.14304,9.04654],[34.10229,9.50238],[34.08717,9.55243],[34.13186,9.7492],[34.20484,9.9033],[34.22718,10.02506],[34.32102,10.11599],[34.34783,10.23914],[34.2823,10.53508],[34.4372,10.781],[34.59062,10.89072],[34.77383,10.74588],[34.77532,10.69027],[34.86618,10.74588],[34.86916,10.78832],[34.97491,10.86147],[34.97789,10.91559],[34.93172,10.95946],[35.01215,11.19626],[34.95704,11.24448],[35.09556,11.56278],[35.05832,11.71158],[35.11492,11.85156],[35.24302,11.91132],[35.70476,12.67101],[36.01458,12.72478],[36.14268,12.70879],[36.16651,12.88019],[36.13374,12.92665],[36.24545,13.36759],[36.38993,13.56459],[36.48824,13.83954],[36.44653,13.95666],[36.54376,14.25597],[36.56536,14.26177],[36.55659,14.28237],[36.63364,14.31172],[36.85787,14.32201],[37.01622,14.2561],[37.09486,14.27155],[37.13206,14.40746],[37.3106,14.44657],[37.47319,14.2149],[37.528,14.18413],[37.91287,14.89447],[38.0364,14.72745],[38.25562,14.67287],[38.3533,14.51323],[38.45748,14.41445],[38.78306,14.4754],[38.98058,14.54895],[39.02834,14.63717],[39.16074,14.65187],[39.14772,14.61827],[39.19547,14.56996],[39.23888,14.56365],[39.26927,14.48801],[39.2302,14.44598],[39.2519,14.40393],[39.37685,14.54402],[39.52756,14.49011],[39.50585,14.55735],[39.58182,14.60987],[39.76632,14.54264],[39.9443,14.41024],[40.07236,14.54264],[40.14649,14.53969],[40.21128,14.39342],[40.25686,14.41445],[40.9167,14.11152],[41.25097,13.60787],[41.62864,13.38626],[42.05841,12.80912],[42.21469,12.75832],[42.2798,12.6355],[42.4037,12.46478]]]]}},{type:"Feature",properties:{iso1A2:"VI",iso1A3:"VIR",iso1N3:"850",wikidata:"Q11703",nameEn:"United States Virgin Islands",country:"US",groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 340"]},geometry:{type:"MultiPolygon",coordinates:[[[[-65.02435,18.73231],[-64.86027,18.39056],[-64.64067,18.36478],[-64.646,18.10286],[-64.35558,17.48384],[-65.27974,17.56928],[-65.02435,18.73231]]]]}},{type:"Feature",properties:{iso1A2:"GI",iso1A3:"GIB",iso1N3:"292",wikidata:"Q1410",nameEn:"Gibraltar",country:"GB",groups:["EU","039","150"],callingCodes:["350"]},geometry:{type:"MultiPolygon",coordinates:[[[[-5.28217,36.09907],[-5.3004,36.07439],[-5.32837,36.05935],[-5.36503,36.06205],[-5.39074,36.10278],[-5.40134,36.14896],[-5.38545,36.15481],[-5.36494,36.15496],[-5.34536,36.15501],[-5.33822,36.15272],[-5.27801,36.14942],[-5.28217,36.09907]]]]}},{type:"Feature",properties:{iso1A2:"VN",iso1A3:"VNM",iso1N3:"704",wikidata:"Q881",nameEn:"Vietnam",groups:["035","142"],callingCodes:["84"]},geometry:{type:"MultiPolygon",coordinates:[[[[108.10003,21.47338],[108.00365,17.98159],[111.60491,13.57105],[109.55486,8.10026],[104.81582,8.03101],[102.47649,9.66162],[103.99198,10.48391],[104.43778,10.42386],[104.47963,10.43046],[104.49869,10.4057],[104.59018,10.53073],[104.87933,10.52833],[104.95094,10.64003],[105.09571,10.72722],[105.02722,10.89236],[105.08326,10.95656],[105.11449,10.96332],[105.34011,10.86179],[105.42884,10.96878],[105.50045,10.94586],[105.77751,11.03671],[105.86376,10.89839],[105.84603,10.85873],[105.93403,10.83853],[105.94535,10.9168],[106.06708,10.8098],[106.18539,10.79451],[106.14301,10.98176],[106.20095,10.97795],[106.1757,11.07301],[106.1527,11.10476],[106.10444,11.07879],[105.86782,11.28343],[105.88962,11.43605],[105.87328,11.55953],[105.81645,11.56876],[105.80867,11.60536],[105.8507,11.66635],[105.88962,11.67854],[105.95188,11.63738],[106.00792,11.7197],[106.02038,11.77457],[106.06708,11.77761],[106.13158,11.73283],[106.18539,11.75171],[106.26478,11.72122],[106.30525,11.67549],[106.37219,11.69836],[106.44691,11.66787],[106.45158,11.68616],[106.41577,11.76999],[106.44535,11.8279],[106.44068,11.86294],[106.4687,11.86751],[106.4111,11.97413],[106.70687,11.96956],[106.79405,12.0807],[106.92325,12.06548],[106.99953,12.08983],[107.15831,12.27547],[107.34511,12.33327],[107.42917,12.24657],[107.4463,12.29373],[107.55059,12.36824],[107.5755,12.52177],[107.55993,12.7982],[107.49611,12.88926],[107.49144,13.01215],[107.62843,13.3668],[107.61909,13.52577],[107.53503,13.73908],[107.45252,13.78897],[107.46498,13.91593],[107.44318,13.99751],[107.38247,13.99147],[107.35757,14.02319],[107.37158,14.07906],[107.33577,14.11832],[107.40427,14.24509],[107.39493,14.32655],[107.44941,14.41552],[107.48521,14.40346],[107.52569,14.54665],[107.52102,14.59034],[107.55371,14.628],[107.54361,14.69092],[107.51579,14.79282],[107.59285,14.87795],[107.48277,14.93751],[107.46516,15.00982],[107.61486,15.0566],[107.61926,15.13949],[107.58844,15.20111],[107.62587,15.2266],[107.60605,15.37524],[107.62367,15.42193],[107.53341,15.40496],[107.50699,15.48771],[107.3815,15.49832],[107.34408,15.62345],[107.27583,15.62769],[107.27143,15.71459],[107.21859,15.74638],[107.21419,15.83747],[107.34188,15.89464],[107.39471,15.88829],[107.46296,16.01106],[107.44975,16.08511],[107.33968,16.05549],[107.25822,16.13587],[107.14595,16.17816],[107.15035,16.26271],[107.09091,16.3092],[107.02597,16.31132],[106.97385,16.30204],[106.96638,16.34938],[106.88067,16.43594],[106.88727,16.52671],[106.84104,16.55415],[106.74418,16.41904],[106.65832,16.47816],[106.66052,16.56892],[106.61477,16.60713],[106.58267,16.6012],[106.59013,16.62259],[106.55485,16.68704],[106.55265,16.86831],[106.52183,16.87884],[106.51963,16.92097],[106.54824,16.92729],[106.55045,17.0031],[106.50862,16.9673],[106.43597,17.01362],[106.31929,17.20509],[106.29287,17.3018],[106.24444,17.24714],[106.18991,17.28227],[106.09019,17.36399],[105.85744,17.63221],[105.76612,17.67147],[105.60381,17.89356],[105.64784,17.96687],[105.46292,18.22008],[105.38366,18.15315],[105.15942,18.38691],[105.10408,18.43533],[105.1327,18.58355],[105.19654,18.64196],[105.12829,18.70453],[104.64617,18.85668],[104.5361,18.97747],[103.87125,19.31854],[104.06058,19.43484],[104.10832,19.51575],[104.05617,19.61743],[104.06498,19.66926],[104.23229,19.70242],[104.41281,19.70035],[104.53169,19.61743],[104.64837,19.62365],[104.68359,19.72729],[104.8355,19.80395],[104.8465,19.91783],[104.9874,20.09573],[104.91695,20.15567],[104.86852,20.14121],[104.61315,20.24452],[104.62195,20.36633],[104.72102,20.40554],[104.66158,20.47774],[104.47886,20.37459],[104.40621,20.3849],[104.38199,20.47155],[104.63957,20.6653],[104.27412,20.91433],[104.11121,20.96779],[103.98024,20.91531],[103.82282,20.8732],[103.73478,20.6669],[103.68633,20.66324],[103.45737,20.82382],[103.38032,20.79501],[103.21497,20.89832],[103.12055,20.89994],[103.03469,21.05821],[102.97745,21.05821],[102.89825,21.24707],[102.80794,21.25736],[102.88939,21.3107],[102.94223,21.46034],[102.86297,21.4255],[102.98846,21.58936],[102.97965,21.74076],[102.86077,21.71213],[102.85637,21.84501],[102.81894,21.83888],[102.82115,21.73667],[102.74189,21.66713],[102.67145,21.65894],[102.62301,21.91447],[102.49092,21.99002],[102.51734,22.02676],[102.18712,22.30403],[102.14099,22.40092],[102.16621,22.43336],[102.26428,22.41321],[102.25339,22.4607],[102.41061,22.64184],[102.38415,22.67919],[102.42618,22.69212],[102.46665,22.77108],[102.51802,22.77969],[102.57095,22.7036],[102.60675,22.73376],[102.8636,22.60735],[102.9321,22.48659],[103.0722,22.44775],[103.07843,22.50097],[103.17961,22.55705],[103.15782,22.59873],[103.18895,22.64471],[103.28079,22.68063],[103.32282,22.8127],[103.43179,22.75816],[103.43646,22.70648],[103.52675,22.59155],[103.57812,22.65764],[103.56255,22.69499],[103.64506,22.79979],[103.87904,22.56683],[103.93286,22.52703],[103.94513,22.52553],[103.95191,22.5134],[103.96352,22.50584],[103.96783,22.51173],[103.97384,22.50634],[103.99247,22.51958],[104.01088,22.51823],[104.03734,22.72945],[104.11384,22.80363],[104.27084,22.8457],[104.25683,22.76534],[104.35593,22.69353],[104.47225,22.75813],[104.58122,22.85571],[104.60457,22.81841],[104.65283,22.83419],[104.72755,22.81984],[104.77114,22.90017],[104.84942,22.93631],[104.86765,22.95178],[104.8334,23.01484],[104.79478,23.12934],[104.87382,23.12854],[104.87992,23.17141],[104.91435,23.18666],[104.9486,23.17235],[104.96532,23.20463],[104.98712,23.19176],[105.07002,23.26248],[105.11672,23.25247],[105.17276,23.28679],[105.22569,23.27249],[105.32376,23.39684],[105.40782,23.28107],[105.42805,23.30824],[105.49966,23.20669],[105.56037,23.16806],[105.57594,23.075],[105.72382,23.06641],[105.8726,22.92756],[105.90119,22.94168],[105.99568,22.94178],[106.00179,22.99049],[106.19705,22.98475],[106.27022,22.87722],[106.34961,22.86718],[106.49749,22.91164],[106.51306,22.94891],[106.55976,22.92311],[106.60179,22.92884],[106.6516,22.86862],[106.6734,22.89587],[106.71387,22.88296],[106.71128,22.85982],[106.78422,22.81532],[106.81271,22.8226],[106.83685,22.8098],[106.82404,22.7881],[106.76293,22.73491],[106.72321,22.63606],[106.71698,22.58432],[106.65316,22.5757],[106.61269,22.60301],[106.58395,22.474],[106.55665,22.46498],[106.57221,22.37],[106.55976,22.34841],[106.6516,22.33977],[106.69986,22.22309],[106.67495,22.1885],[106.6983,22.15102],[106.70142,22.02409],[106.68274,21.99811],[106.69276,21.96013],[106.72551,21.97923],[106.74345,22.00965],[106.81038,21.97934],[106.9178,21.97357],[106.92714,21.93459],[106.97228,21.92592],[106.99252,21.95191],[107.05634,21.92303],[107.06101,21.88982],[107.00964,21.85948],[107.02615,21.81981],[107.10771,21.79879],[107.20734,21.71493],[107.24625,21.7077],[107.29296,21.74674],[107.35834,21.6672],[107.35989,21.60063],[107.38636,21.59774],[107.41593,21.64839],[107.47197,21.6672],[107.49532,21.62958],[107.49065,21.59774],[107.54047,21.5934],[107.56537,21.61945],[107.66967,21.60787],[107.80355,21.66141],[107.86114,21.65128],[107.90006,21.5905],[107.92652,21.58906],[107.95232,21.5388],[107.96774,21.53601],[107.97074,21.54072],[107.97383,21.53961],[107.97932,21.54503],[108.02926,21.54997],[108.0569,21.53604],[108.10003,21.47338]]]]}},{type:"Feature",properties:{iso1A2:"HT",iso1A3:"HTI",iso1N3:"332",wikidata:"Q790",nameEn:"Haiti",aliases:["RH"],groups:["029","003","419","019"],callingCodes:["509"]},geometry:{type:"MultiPolygon",coordinates:[[[[-71.71885,18.78423],[-71.82556,18.62551],[-71.95412,18.64939],[-72.00201,18.62312],[-71.88102,18.50125],[-71.90875,18.45821],[-71.69952,18.34101],[-71.78271,18.18302],[-71.75465,18.14405],[-71.74994,18.11115],[-71.73783,18.07177],[-71.75671,18.03456],[-72.29523,17.48026],[-74.76465,18.06252],[-74.7289,18.71009],[-73.37289,20.43199],[-72.38946,20.27111],[-71.77419,19.73128],[-71.75865,19.70231],[-71.7429,19.58445],[-71.71449,19.55364],[-71.71268,19.53374],[-71.6802,19.45008],[-71.69448,19.37866],[-71.77766,19.33823],[-71.73229,19.26686],[-71.62642,19.21212],[-71.65337,19.11759],[-71.69938,19.10916],[-71.71088,19.08353],[-71.74088,19.0437],[-71.88102,18.95007],[-71.77766,18.95007],[-71.72624,18.87802],[-71.71885,18.78423]]]]}},{type:"Feature",properties:{iso1A2:"VU",iso1A3:"VUT",iso1N3:"548",wikidata:"Q686",nameEn:"Vanuatu",groups:["054","009"],callingCodes:["678"]},geometry:{type:"MultiPolygon",coordinates:[[[[162.93363,-17.28904],[166.02864,-12.9396],[168.21179,-12.88558],[173.26254,-22.69968],[162.93363,-17.28904]]]]}},{type:"Feature",properties:{iso1A2:"JP",iso1A3:"JPN",iso1N3:"392",wikidata:"Q17",nameEn:"Japan",groups:["030","142"],driveSide:"left",callingCodes:["81"]},geometry:{type:"MultiPolygon",coordinates:[[[[145.82361,43.38904],[155.16731,23.60141],[123.92912,17.8782],[122.26612,25.98197],[129.2669,34.87122],[133.61399,37.41],[140.9182,45.92937],[145.82343,44.571],[145.23667,43.76813],[145.82361,43.38904]]]]}},{type:"Feature",properties:{iso1A2:"WF",iso1A3:"WLF",iso1N3:"876",wikidata:"Q35555",nameEn:"Wallis and Futuna",country:"FR",groups:["061","009"],callingCodes:["681"]},geometry:{type:"MultiPolygon",coordinates:[[[[-178.60161,-14.95666],[-178.60852,-12.49232],[-174.18596,-12.48057],[-174.17905,-14.94502],[-176.76826,-14.95183],[-178.60161,-14.95666]]]]}},{type:"Feature",properties:{iso1A2:"AZ",iso1A3:"AZE",iso1N3:"031",wikidata:"Q227",nameEn:"Azerbaijan",groups:["145","142"],callingCodes:["994"]},geometry:{type:"MultiPolygon",coordinates:[[[[46.42738,41.91323],[46.5332,41.87389],[46.58924,41.80547],[46.75269,41.8623],[46.8134,41.76252],[47.00955,41.63583],[46.99554,41.59743],[47.03757,41.55434],[47.10762,41.59044],[47.34579,41.27884],[47.49004,41.26366],[47.54504,41.20275],[47.62288,41.22969],[47.75831,41.19455],[47.87973,41.21798],[48.07587,41.49957],[48.22064,41.51472],[48.2878,41.56221],[48.40277,41.60441],[48.42301,41.65444],[48.55078,41.77917],[48.5867,41.84306],[48.80971,41.95365],[52.39847,39.43556],[48.88288,38.43975],[48.84969,38.45015],[48.81072,38.44853],[48.78979,38.45026],[48.70001,38.40564],[48.62217,38.40198],[48.58793,38.45076],[48.45084,38.61013],[48.3146,38.59958],[48.24773,38.71883],[48.02581,38.82705],[48.01409,38.90333],[48.07734,38.91616],[48.08627,38.94434],[48.28437,38.97186],[48.33884,39.03022],[48.31239,39.09278],[48.15361,39.19419],[48.12404,39.25208],[48.15984,39.30028],[48.37385,39.37584],[48.34264,39.42935],[47.98977,39.70999],[47.84774,39.66285],[47.50099,39.49615],[47.38978,39.45999],[47.31301,39.37492],[47.05927,39.24846],[47.05771,39.20143],[46.95341,39.13505],[46.92539,39.16644],[46.83822,39.13143],[46.75752,39.03231],[46.53497,38.86548],[46.51805,38.94982],[46.54296,39.07078],[46.44022,39.19636],[46.52584,39.18912],[46.54141,39.15895],[46.58032,39.21204],[46.63481,39.23013],[46.56476,39.24942],[46.50093,39.33736],[46.43244,39.35181],[46.37795,39.42039],[46.4013,39.45405],[46.53051,39.47809],[46.51027,39.52373],[46.57721,39.54414],[46.57098,39.56694],[46.52117,39.58734],[46.42465,39.57534],[46.40286,39.63651],[46.18493,39.60533],[45.96543,39.78859],[45.82533,39.82925],[45.7833,39.9475],[45.60895,39.97733],[45.59806,40.0131],[45.78642,40.03218],[45.83779,39.98925],[45.97944,40.181],[45.95609,40.27846],[45.65098,40.37696],[45.42994,40.53804],[45.45484,40.57707],[45.35366,40.65979],[45.4206,40.7424],[45.55914,40.78366],[45.60584,40.87436],[45.40814,40.97904],[45.44083,41.01663],[45.39725,41.02603],[45.35677,40.99784],[45.28859,41.03757],[45.26162,41.0228],[45.25897,41.0027],[45.1994,41.04518],[45.16493,41.05068],[45.1634,41.08082],[45.1313,41.09369],[45.12923,41.06059],[45.06784,41.05379],[45.08028,41.10917],[45.19942,41.13299],[45.1969,41.168],[45.11811,41.19967],[45.05201,41.19211],[45.02932,41.2101],[45.05497,41.2464],[45.0133,41.29747],[45.09867,41.34065],[45.1797,41.42231],[45.26285,41.46433],[45.31352,41.47168],[45.4006,41.42402],[45.45973,41.45898],[45.68389,41.3539],[45.71035,41.36208],[45.75705,41.35157],[45.69946,41.29545],[45.80842,41.2229],[45.95786,41.17956],[46.13221,41.19479],[46.27698,41.19011],[46.37661,41.10805],[46.456,41.09984],[46.48558,41.0576],[46.55096,41.1104],[46.63969,41.09515],[46.66148,41.20533],[46.72375,41.28609],[46.63658,41.37727],[46.4669,41.43331],[46.40307,41.48464],[46.33925,41.4963],[46.29794,41.5724],[46.34126,41.57454],[46.34039,41.5947],[46.3253,41.60912],[46.28182,41.60089],[46.26531,41.63339],[46.24429,41.59883],[46.19759,41.62327],[46.17891,41.72094],[46.20538,41.77205],[46.23962,41.75811],[46.30863,41.79133],[46.3984,41.84399],[46.42738,41.91323]],[[45.50279,40.58424],[45.56071,40.64765],[45.51825,40.67382],[45.47927,40.65023],[45.50279,40.58424]]],[[[45.00864,41.03411],[44.9903,41.05657],[44.96031,41.06345],[44.95383,41.07553],[44.97169,41.09176],[45.00864,41.09407],[45.03406,41.07931],[45.04517,41.06653],[45.03792,41.03938],[45.00864,41.03411]]],[[[45.21324,40.9817],[45.21219,40.99001],[45.20518,40.99348],[45.19312,40.98998],[45.18382,41.0066],[45.20625,41.01484],[45.23487,41.00226],[45.23095,40.97828],[45.21324,40.9817]]],[[[45.46992,39.49888],[45.70547,39.60174],[45.80804,39.56716],[45.83,39.46487],[45.79225,39.3695],[45.99774,39.28931],[46.02303,39.09978],[46.06973,39.0744],[46.14785,38.84206],[46.06766,38.87861],[46.00228,38.87376],[45.94624,38.89072],[45.90266,38.87739],[45.83883,38.90768],[45.65172,38.95199],[45.6155,38.94304],[45.6131,38.964],[45.44966,38.99243],[45.44811,39.04927],[45.40452,39.07224],[45.40148,39.09007],[45.30489,39.18333],[45.16168,39.21952],[45.08751,39.35052],[45.05932,39.36435],[44.96746,39.42998],[44.88916,39.59653],[44.81043,39.62677],[44.80977,39.65768],[44.75779,39.7148],[44.88354,39.74432],[44.92869,39.72157],[45.06604,39.79277],[45.18554,39.67846],[45.17464,39.58614],[45.21784,39.58074],[45.23535,39.61373],[45.30385,39.61373],[45.29606,39.57654],[45.46992,39.49888]]]]}},{type:"Feature",properties:{iso1A2:"WS",iso1A3:"WSM",iso1N3:"882",wikidata:"Q683",nameEn:"Samoa",groups:["061","009"],driveSide:"left",callingCodes:["685"]},geometry:{type:"MultiPolygon",coordinates:[[[[-174.17905,-14.94502],[-174.18596,-12.48057],[-171.14953,-12.4725],[-171.14262,-14.93704],[-173.13438,-14.94228],[-174.17905,-14.94502]]]]}},{type:"Feature",properties:{iso1A2:"CN",iso1A3:"CHN",iso1N3:"156",wikidata:"Q148",nameEn:"China",aliases:["RC"],groups:["030","142"],callingCodes:["86"]},geometry:{type:"MultiPolygon",coordinates:[[[[125.6131,53.07229],[126.558,52.13738],[126.44606,51.98254],[126.68349,51.70607],[126.90369,51.3238],[126.93135,51.0841],[127.14586,50.91152],[127.28165,50.72075],[127.36335,50.58306],[127.28765,50.46585],[127.36009,50.43787],[127.37384,50.28393],[127.60515,50.23503],[127.49299,50.01251],[127.53516,49.84306],[127.83476,49.5748],[128.72896,49.58676],[129.11153,49.36813],[129.23232,49.40353],[129.35317,49.3481],[129.40398,49.44194],[129.50685,49.42398],[129.67598,49.29596],[129.85416,49.11067],[130.2355,48.86741],[130.43232,48.90844],[130.66946,48.88251],[130.52147,48.61745],[130.84462,48.30942],[130.65103,48.10052],[130.90915,47.90623],[130.95985,47.6957],[131.09871,47.6852],[131.2635,47.73325],[131.90448,47.68011],[132.57309,47.71741],[132.66989,47.96491],[134.49516,48.42884],[134.75328,48.36763],[134.67098,48.1564],[134.55508,47.98651],[134.7671,47.72051],[134.50898,47.4812],[134.20016,47.33458],[134.03538,46.75668],[133.84104,46.46681],[133.91496,46.4274],[133.88097,46.25066],[133.68047,46.14697],[133.72695,46.05576],[133.67569,45.9759],[133.60442,45.90053],[133.48457,45.86203],[133.41083,45.57723],[133.19419,45.51913],[133.09279,45.25693],[133.12293,45.1332],[132.96373,45.0212],[132.83978,45.05916],[131.99417,45.2567],[131.86903,45.33636],[131.76532,45.22609],[131.66852,45.2196],[131.68466,45.12374],[131.48415,44.99513],[130.95639,44.85154],[131.1108,44.70266],[131.30365,44.04262],[131.25484,44.03131],[131.23583,43.96085],[131.26176,43.94011],[131.21105,43.82383],[131.19492,43.53047],[131.29402,43.46695],[131.30324,43.39498],[131.19031,43.21385],[131.20414,43.13654],[131.10274,43.04734],[131.135,42.94114],[131.02668,42.91246],[131.02438,42.86518],[130.66524,42.84753],[130.44361,42.76205],[130.40213,42.70788],[130.56576,42.68925],[130.62107,42.58413],[130.55143,42.52158],[130.50123,42.61636],[130.44361,42.54849],[130.41826,42.6011],[130.2385,42.71127],[130.23068,42.80125],[130.26095,42.9027],[130.09764,42.91425],[130.12957,42.98361],[129.96409,42.97306],[129.95082,43.01051],[129.8865,43.00395],[129.85261,42.96494],[129.83277,42.86746],[129.80719,42.79218],[129.7835,42.76521],[129.77183,42.69435],[129.75294,42.59409],[129.72541,42.43739],[129.60482,42.44461],[129.54701,42.37254],[129.42882,42.44702],[129.28541,42.41574],[129.22423,42.3553],[129.22285,42.26491],[129.15178,42.17224],[128.96068,42.06657],[128.94007,42.03537],[128.04487,42.01769],[128.15119,41.74568],[128.30716,41.60322],[128.20061,41.40895],[128.18546,41.41279],[128.12967,41.37931],[128.03311,41.39232],[128.02633,41.42103],[127.92943,41.44291],[127.29712,41.49473],[127.17841,41.59714],[126.90729,41.79955],[126.60631,41.65565],[126.53189,41.35206],[126.242,41.15454],[126.00335,40.92835],[125.76869,40.87908],[125.71172,40.85223],[124.86913,40.45387],[124.40719,40.13655],[124.38556,40.11047],[124.3322,40.05573],[124.37089,40.03004],[124.35029,39.95639],[124.23201,39.9248],[124.17532,39.8232],[123.90497,38.79949],[123.85601,37.49093],[122.80525,33.30571],[122.29378,31.76513],[123.5458,31.01942],[121.03532,26.8787],[120.49232,25.22863],[118.56434,24.49266],[118.42453,24.54644],[118.35291,24.51645],[118.28244,24.51231],[118.11703,24.39734],[118.41371,24.06775],[111.60491,13.57105],[108.00365,17.98159],[108.10003,21.47338],[108.0569,21.53604],[108.02926,21.54997],[107.97932,21.54503],[107.97383,21.53961],[107.97074,21.54072],[107.96774,21.53601],[107.95232,21.5388],[107.92652,21.58906],[107.90006,21.5905],[107.86114,21.65128],[107.80355,21.66141],[107.66967,21.60787],[107.56537,21.61945],[107.54047,21.5934],[107.49065,21.59774],[107.49532,21.62958],[107.47197,21.6672],[107.41593,21.64839],[107.38636,21.59774],[107.35989,21.60063],[107.35834,21.6672],[107.29296,21.74674],[107.24625,21.7077],[107.20734,21.71493],[107.10771,21.79879],[107.02615,21.81981],[107.00964,21.85948],[107.06101,21.88982],[107.05634,21.92303],[106.99252,21.95191],[106.97228,21.92592],[106.92714,21.93459],[106.9178,21.97357],[106.81038,21.97934],[106.74345,22.00965],[106.72551,21.97923],[106.69276,21.96013],[106.68274,21.99811],[106.70142,22.02409],[106.6983,22.15102],[106.67495,22.1885],[106.69986,22.22309],[106.6516,22.33977],[106.55976,22.34841],[106.57221,22.37],[106.55665,22.46498],[106.58395,22.474],[106.61269,22.60301],[106.65316,22.5757],[106.71698,22.58432],[106.72321,22.63606],[106.76293,22.73491],[106.82404,22.7881],[106.83685,22.8098],[106.81271,22.8226],[106.78422,22.81532],[106.71128,22.85982],[106.71387,22.88296],[106.6734,22.89587],[106.6516,22.86862],[106.60179,22.92884],[106.55976,22.92311],[106.51306,22.94891],[106.49749,22.91164],[106.34961,22.86718],[106.27022,22.87722],[106.19705,22.98475],[106.00179,22.99049],[105.99568,22.94178],[105.90119,22.94168],[105.8726,22.92756],[105.72382,23.06641],[105.57594,23.075],[105.56037,23.16806],[105.49966,23.20669],[105.42805,23.30824],[105.40782,23.28107],[105.32376,23.39684],[105.22569,23.27249],[105.17276,23.28679],[105.11672,23.25247],[105.07002,23.26248],[104.98712,23.19176],[104.96532,23.20463],[104.9486,23.17235],[104.91435,23.18666],[104.87992,23.17141],[104.87382,23.12854],[104.79478,23.12934],[104.8334,23.01484],[104.86765,22.95178],[104.84942,22.93631],[104.77114,22.90017],[104.72755,22.81984],[104.65283,22.83419],[104.60457,22.81841],[104.58122,22.85571],[104.47225,22.75813],[104.35593,22.69353],[104.25683,22.76534],[104.27084,22.8457],[104.11384,22.80363],[104.03734,22.72945],[104.01088,22.51823],[103.99247,22.51958],[103.97384,22.50634],[103.96783,22.51173],[103.96352,22.50584],[103.95191,22.5134],[103.94513,22.52553],[103.93286,22.52703],[103.87904,22.56683],[103.64506,22.79979],[103.56255,22.69499],[103.57812,22.65764],[103.52675,22.59155],[103.43646,22.70648],[103.43179,22.75816],[103.32282,22.8127],[103.28079,22.68063],[103.18895,22.64471],[103.15782,22.59873],[103.17961,22.55705],[103.07843,22.50097],[103.0722,22.44775],[102.9321,22.48659],[102.8636,22.60735],[102.60675,22.73376],[102.57095,22.7036],[102.51802,22.77969],[102.46665,22.77108],[102.42618,22.69212],[102.38415,22.67919],[102.41061,22.64184],[102.25339,22.4607],[102.26428,22.41321],[102.16621,22.43336],[102.14099,22.40092],[102.1245,22.43372],[102.03633,22.46164],[101.98487,22.42766],[101.91344,22.44417],[101.90714,22.38688],[101.86828,22.38397],[101.7685,22.50337],[101.68973,22.46843],[101.61306,22.27515],[101.56789,22.28876],[101.53638,22.24794],[101.60675,22.13513],[101.57525,22.13026],[101.62566,21.96574],[101.7791,21.83019],[101.74555,21.72852],[101.83257,21.61562],[101.80001,21.57461],[101.7475,21.5873],[101.7727,21.51794],[101.74224,21.48276],[101.74014,21.30967],[101.84412,21.25291],[101.83887,21.20983],[101.76745,21.21571],[101.79266,21.19025],[101.7622,21.14813],[101.70548,21.14911],[101.66977,21.20004],[101.60886,21.17947],[101.59491,21.18621],[101.6068,21.23329],[101.54563,21.25668],[101.29326,21.17254],[101.2229,21.23271],[101.26912,21.36482],[101.19349,21.41959],[101.2124,21.56422],[101.15156,21.56129],[101.11744,21.77659],[100.87265,21.67396],[100.72143,21.51898],[100.57861,21.45637],[100.4811,21.46148],[100.42892,21.54325],[100.35201,21.53176],[100.25863,21.47043],[100.18447,21.51898],[100.1625,21.48704],[100.12542,21.50365],[100.10757,21.59945],[100.17486,21.65306],[100.12679,21.70539],[100.04956,21.66843],[99.98654,21.71064],[99.94003,21.82782],[99.99084,21.97053],[99.96612,22.05965],[99.85351,22.04183],[99.47585,22.13345],[99.33166,22.09656],[99.1552,22.15874],[99.19176,22.16983],[99.17318,22.18025],[99.28771,22.4105],[99.37972,22.50188],[99.38247,22.57544],[99.31243,22.73893],[99.45654,22.85726],[99.43537,22.94086],[99.54218,22.90014],[99.52214,23.08218],[99.34127,23.13099],[99.25741,23.09025],[99.04601,23.12215],[99.05975,23.16382],[98.88597,23.18656],[98.92515,23.29535],[98.93958,23.31414],[98.87573,23.33038],[98.92104,23.36946],[98.87683,23.48995],[98.82877,23.47908],[98.80294,23.5345],[98.88396,23.59555],[98.81775,23.694],[98.82933,23.72921],[98.79607,23.77947],[98.68209,23.80492],[98.67797,23.9644],[98.89632,24.10612],[98.87998,24.15624],[98.85319,24.13042],[98.59256,24.08371],[98.54476,24.13119],[98.20666,24.11406],[98.07806,24.07988],[98.06703,24.08028],[98.0607,24.07812],[98.05671,24.07961],[98.05302,24.07408],[98.04709,24.07616],[97.99583,24.04932],[97.98691,24.03897],[97.93951,24.01953],[97.90998,24.02094],[97.88616,24.00463],[97.88414,23.99405],[97.88814,23.98605],[97.89683,23.98389],[97.89676,23.97931],[97.8955,23.97758],[97.88811,23.97446],[97.86545,23.97723],[97.84328,23.97603],[97.79416,23.95663],[97.79456,23.94836],[97.72302,23.89288],[97.64667,23.84574],[97.5247,23.94032],[97.62363,24.00506],[97.72903,24.12606],[97.75305,24.16902],[97.72799,24.18883],[97.72998,24.2302],[97.76799,24.26365],[97.71941,24.29652],[97.66723,24.30027],[97.65624,24.33781],[97.7098,24.35658],[97.66998,24.45288],[97.60029,24.4401],[97.52757,24.43748],[97.56286,24.54535],[97.56525,24.72838],[97.54675,24.74202],[97.5542,24.74943],[97.56383,24.75535],[97.56648,24.76475],[97.64354,24.79171],[97.70181,24.84557],[97.73127,24.83015],[97.76481,24.8289],[97.79949,24.85655],[97.72903,24.91332],[97.72216,25.08508],[97.77023,25.11492],[97.83614,25.2715],[97.92541,25.20815],[98.14925,25.41547],[98.12591,25.50722],[98.18084,25.56298],[98.16848,25.62739],[98.25774,25.6051],[98.31268,25.55307],[98.40606,25.61129],[98.54064,25.85129],[98.63128,25.79937],[98.70818,25.86241],[98.60763,26.01512],[98.57085,26.11547],[98.63128,26.15492],[98.66884,26.09165],[98.7329,26.17218],[98.67797,26.24487],[98.72741,26.36183],[98.77547,26.61994],[98.7333,26.85615],[98.69582,27.56499],[98.43353,27.67086],[98.42529,27.55404],[98.32641,27.51385],[98.13964,27.9478],[98.15337,28.12114],[97.90069,28.3776],[97.79632,28.33168],[97.70705,28.5056],[97.56835,28.55628],[97.50518,28.49716],[97.47085,28.2688],[97.41729,28.29783],[97.34547,28.21385],[97.1289,28.3619],[96.98882,28.32564],[96.88445,28.39452],[96.85561,28.4875],[96.6455,28.61657],[96.48895,28.42955],[96.40929,28.51526],[96.61391,28.72742],[96.3626,29.10607],[96.20467,29.02325],[96.18682,29.11087],[96.31316,29.18643],[96.05361,29.38167],[95.84899,29.31464],[95.75149,29.32063],[95.72086,29.20797],[95.50842,29.13487],[95.41091,29.13007],[95.3038,29.13847],[95.26122,29.07727],[95.2214,29.10727],[95.11291,29.09527],[95.0978,29.14446],[94.81353,29.17804],[94.69318,29.31739],[94.2752,29.11687],[94.35897,29.01965],[93.72797,28.68821],[93.44621,28.67189],[93.18069,28.50319],[93.14635,28.37035],[92.93075,28.25671],[92.67486,28.15018],[92.65472,28.07632],[92.73025,28.05814],[92.7275,27.98662],[92.42538,27.80092],[92.32101,27.79363],[92.27432,27.89077],[91.87057,27.7195],[91.84722,27.76325],[91.6469,27.76358],[91.5629,27.84823],[91.48973,27.93903],[91.46327,28.0064],[91.25779,28.07509],[91.20019,27.98715],[90.69894,28.07784],[90.58842,28.02838],[90.13387,28.19178],[89.79762,28.23979],[89.59525,28.16433],[89.12825,27.62502],[89.0582,27.60985],[88.97213,27.51671],[88.95355,27.4106],[89.00216,27.32532],[88.96947,27.30319],[88.93678,27.33777],[88.91901,27.32483],[88.82981,27.38814],[88.77517,27.45415],[88.88091,27.85192],[88.83559,28.01936],[88.63235,28.12356],[88.54858,28.06057],[88.25332,27.9478],[88.1278,27.95417],[88.13378,27.88015],[87.82681,27.95248],[87.72718,27.80938],[87.56996,27.84517],[87.11696,27.84104],[87.03757,27.94835],[86.75582,28.04182],[86.74181,28.10638],[86.56265,28.09569],[86.51609,27.96623],[86.42736,27.91122],[86.22966,27.9786],[86.18607,28.17364],[86.088,28.09264],[86.08333,28.02121],[86.12069,27.93047],[86.06309,27.90021],[85.94946,27.9401],[85.97813,27.99023],[85.90743,28.05144],[85.84672,28.18187],[85.74864,28.23126],[85.71907,28.38064],[85.69105,28.38475],[85.60854,28.25045],[85.59765,28.30529],[85.4233,28.32996],[85.38127,28.28336],[85.10729,28.34092],[85.18668,28.54076],[85.19135,28.62825],[85.06059,28.68562],[84.85511,28.58041],[84.62317,28.73887],[84.47528,28.74023],[84.2231,28.89571],[84.24801,29.02783],[84.18107,29.23451],[83.97559,29.33091],[83.82303,29.30513],[83.63156,29.16249],[83.44787,29.30513],[83.28131,29.56813],[83.07116,29.61957],[82.73024,29.81695],[82.5341,29.9735],[82.38622,30.02608],[82.16984,30.0692],[82.19475,30.16884],[82.10757,30.23745],[82.10135,30.35439],[81.99082,30.33423],[81.62033,30.44703],[81.41018,30.42153],[81.39928,30.21862],[81.33355,30.15303],[81.2623,30.14596],[81.29032,30.08806],[81.24362,30.0126],[81.12842,30.01395],[81.03953,30.20059],[80.83343,30.32023],[80.54504,30.44936],[80.20721,30.58541],[79.93255,30.88288],[79.59884,30.93943],[79.22805,31.34963],[79.14016,31.43403],[79.01931,31.42817],[78.77898,31.31209],[78.71032,31.50197],[78.84516,31.60631],[78.69933,31.78723],[78.78036,31.99478],[78.74404,32.00384],[78.68754,32.10256],[78.49609,32.2762],[78.4645,32.45367],[78.38897,32.53938],[78.73916,32.69438],[78.7831,32.46873],[78.96713,32.33655],[78.99322,32.37948],[79.0979,32.38051],[79.13174,32.47766],[79.26768,32.53277],[79.46562,32.69668],[79.14016,33.02545],[79.15252,33.17156],[78.73636,33.56521],[78.67599,33.66445],[78.77349,33.73871],[78.73367,34.01121],[78.65657,34.03195],[78.66225,34.08858],[78.91769,34.15452],[78.99802,34.3027],[79.05364,34.32482],[78.74465,34.45174],[78.56475,34.50835],[78.54964,34.57283],[78.27781,34.61484],[78.18435,34.7998],[78.22692,34.88771],[78.00033,35.23954],[78.03466,35.3785],[78.11664,35.48022],[77.80532,35.52058],[77.70232,35.46244],[77.44277,35.46132],[76.96624,35.5932],[76.84539,35.67356],[76.77323,35.66062],[76.50961,35.8908],[76.33453,35.84296],[76.14913,35.82848],[76.15325,35.9264],[75.93028,36.13136],[76.00906,36.17511],[76.0324,36.41198],[75.92391,36.56986],[75.72737,36.7529],[75.45562,36.71971],[75.40481,36.95382],[75.13839,37.02622],[74.56453,37.03023],[74.49981,37.24518],[74.80605,37.21565],[74.88887,37.23275],[75.12328,37.31839],[75.09719,37.37297],[75.15899,37.41443],[75.06011,37.52779],[74.94338,37.55501],[74.8912,37.67576],[75.00935,37.77486],[74.92416,37.83428],[74.9063,38.03033],[74.82665,38.07359],[74.80331,38.19889],[74.69894,38.22155],[74.69619,38.42947],[74.51217,38.47034],[74.17022,38.65504],[73.97933,38.52945],[73.79806,38.61106],[73.80656,38.66449],[73.7033,38.84782],[73.7445,38.93867],[73.82964,38.91517],[73.81728,39.04007],[73.75823,39.023],[73.60638,39.24534],[73.54572,39.27567],[73.55396,39.3543],[73.5004,39.38402],[73.59241,39.40843],[73.59831,39.46425],[73.87018,39.47879],[73.94683,39.60733],[73.92354,39.69565],[73.9051,39.75073],[73.83006,39.76136],[73.97049,40.04378],[74.25533,40.13191],[74.35063,40.09742],[74.69875,40.34668],[74.85996,40.32857],[74.78168,40.44886],[74.82013,40.52197],[75.08243,40.43945],[75.22834,40.45382],[75.5854,40.66874],[75.69663,40.28642],[75.91361,40.2948],[75.96168,40.38064],[76.33659,40.3482],[76.5261,40.46114],[76.75681,40.95354],[76.99302,41.0696],[77.28004,41.0033],[77.3693,41.0375],[77.52723,41.00227],[77.76206,41.01574],[77.81287,41.14307],[78.12873,41.23091],[78.15757,41.38565],[78.3732,41.39603],[79.92977,42.04113],[80.17842,42.03211],[80.17807,42.21166],[80.26841,42.23797],[80.16892,42.61137],[80.26886,42.8366],[80.38169,42.83142],[80.58999,42.9011],[80.3735,43.01557],[80.62913,43.141],[80.78817,43.14235],[80.77771,43.30065],[80.69718,43.32589],[80.75156,43.44948],[80.40031,44.10986],[80.40229,44.23319],[80.38384,44.63073],[79.8987,44.89957],[80.11169,45.03352],[81.73278,45.3504],[82.51374,45.1755],[82.58474,45.40027],[82.21792,45.56619],[83.04622,47.19053],[83.92184,46.98912],[84.73077,47.01394],[84.93995,46.87399],[85.22443,47.04816],[85.54294,47.06171],[85.69696,47.2898],[85.61067,47.49753],[85.5169,48.05493],[85.73581,48.3939],[86.38069,48.46064],[86.75343,48.70331],[86.73568,48.99918],[86.87238,49.12432],[87.28386,49.11626],[87.478,49.07403],[87.48983,49.13794],[87.81333,49.17354],[87.88171,48.95853],[87.73822,48.89582],[88.0788,48.71436],[87.96361,48.58478],[88.58939,48.34531],[88.58316,48.21893],[88.8011,48.11302],[88.93186,48.10263],[89.0711,47.98528],[89.55453,48.0423],[89.76624,47.82745],[90.06512,47.88177],[90.10871,47.7375],[90.33598,47.68303],[90.48854,47.41826],[90.48542,47.30438],[90.76108,46.99399],[90.84035,46.99525],[91.03649,46.72916],[91.0147,46.58171],[91.07696,46.57315],[90.89639,46.30711],[90.99672,46.14207],[91.03026,46.04194],[90.70907,45.73437],[90.65114,45.49314],[90.89169,45.19667],[91.64048,45.07408],[93.51161,44.95964],[94.10003,44.71016],[94.71959,44.35284],[95.01191,44.25274],[95.39772,44.2805],[95.32891,44.02407],[95.52594,43.99353],[95.89543,43.2528],[96.35658,42.90363],[96.37926,42.72055],[97.1777,42.7964],[99.50671,42.56535],[100.33297,42.68231],[100.84979,42.67087],[101.28833,42.58524],[101.80515,42.50074],[102.07645,42.22519],[102.42826,42.15137],[102.72403,42.14675],[103.3685,41.89696],[103.92804,41.78246],[104.52258,41.8706],[104.51667,41.66113],[104.91272,41.64619],[105.01119,41.58382],[105.24708,41.7442],[106.76517,42.28741],[107.24774,42.36107],[107.29755,42.41395],[107.49681,42.46221],[107.57258,42.40898],[108.23156,42.45532],[108.84489,42.40246],[109.00679,42.45302],[109.452,42.44842],[109.89402,42.63111],[110.08401,42.6411],[110.4327,42.78293],[111.0149,43.3289],[111.59087,43.51207],[111.79758,43.6637],[111.93776,43.68709],[111.96289,43.81596],[111.40498,44.3461],[111.76275,44.98032],[111.98695,45.09074],[112.4164,45.06858],[112.74662,44.86297],[113.63821,44.74326],[113.909,44.91444],[114.08071,44.92847],[114.5166,45.27189],[114.54801,45.38337],[114.74612,45.43585],[114.94546,45.37377],[115.35757,45.39106],[115.69688,45.45761],[115.91898,45.6227],[116.16989,45.68603],[116.27366,45.78637],[116.24012,45.8778],[116.26678,45.96479],[116.58612,46.30211],[116.75551,46.33083],[116.83166,46.38637],[117.07252,46.35818],[117.36609,46.36335],[117.41782,46.57862],[117.60748,46.59771],[117.69554,46.50991],[118.30534,46.73519],[118.78747,46.68689],[118.8337,46.77742],[118.89974,46.77139],[118.92616,46.72765],[119.00541,46.74273],[119.10448,46.65516],[119.24978,46.64761],[119.30261,46.6083],[119.37306,46.61132],[119.42827,46.63783],[119.65265,46.62342],[119.68127,46.59015],[119.77373,46.62947],[119.80455,46.67631],[119.89261,46.66423],[119.91242,46.90091],[119.85518,46.92196],[119.71209,47.19192],[119.62403,47.24575],[119.56019,47.24874],[119.54918,47.29505],[119.31964,47.42617],[119.35892,47.48104],[119.13995,47.53997],[119.12343,47.66458],[118.7564,47.76947],[118.55766,47.99277],[118.29654,48.00246],[118.22677,48.03853],[118.11009,48.04],[118.03676,48.00982],[117.80196,48.01661],[117.50181,47.77216],[117.37875,47.63627],[117.08918,47.82242],[116.87527,47.88836],[116.67405,47.89039],[116.4465,47.83662],[116.2527,47.87766],[116.08431,47.80693],[115.94296,47.67741],[115.57128,47.91988],[115.52082,48.15367],[115.811,48.25699],[115.78876,48.51781],[116.06565,48.81716],[116.03781,48.87014],[116.71193,49.83813],[117.07142,49.68482],[117.27597,49.62544],[117.48208,49.62324],[117.82343,49.52696],[118.61623,49.93809],[119.11003,50.00276],[119.27996,50.13348],[119.38598,50.35162],[119.13553,50.37412],[120.10963,51.671],[120.65907,51.93544],[120.77337,52.20805],[120.61346,52.32447],[120.71673,52.54099],[120.46454,52.63811],[120.04049,52.58773],[120.0451,52.7359],[120.85633,53.28499],[121.39213,53.31888],[122.35063,53.49565],[122.85966,53.47395],[123.26989,53.54843],[123.86158,53.49391],[124.46078,53.21881],[125.17522,53.20225],[125.6131,53.07229]],[[113.56865,22.20973],[113.57123,22.20416],[113.60504,22.20464],[113.63011,22.10782],[113.57191,22.07696],[113.54839,22.10909],[113.54942,22.14519],[113.54093,22.15497],[113.52659,22.18271],[113.53552,22.20607],[113.53301,22.21235],[113.53591,22.21369],[113.54093,22.21314],[113.54333,22.21688],[113.5508,22.21672],[113.56865,22.20973]],[[114.50148,22.15017],[113.92195,22.13873],[113.83338,22.1826],[113.81621,22.2163],[113.86771,22.42972],[114.03113,22.5065],[114.05438,22.5026],[114.05729,22.51104],[114.06272,22.51617],[114.07267,22.51855],[114.07817,22.52997],[114.08606,22.53276],[114.09048,22.53716],[114.09692,22.53435],[114.1034,22.5352],[114.11181,22.52878],[114.11656,22.53415],[114.12665,22.54003],[114.13823,22.54319],[114.1482,22.54091],[114.15123,22.55163],[114.1597,22.56041],[114.17247,22.55944],[114.18338,22.55444],[114.20655,22.55706],[114.22185,22.55343],[114.22888,22.5436],[114.25154,22.55977],[114.44998,22.55977],[114.50148,22.15017]]]]}},{type:"Feature",properties:{iso1A2:"XK",wikidata:"Q1246",nameEn:"Kosovo",groups:["039","150"],isoStatus:"usrAssn",callingCodes:["383"]},geometry:{type:"MultiPolygon",coordinates:[[[[21.39045,42.74888],[21.47498,42.74695],[21.59154,42.72643],[21.58755,42.70418],[21.6626,42.67813],[21.75025,42.70125],[21.79413,42.65923],[21.75672,42.62695],[21.7327,42.55041],[21.70522,42.54176],[21.7035,42.51899],[21.62556,42.45106],[21.64209,42.41081],[21.62887,42.37664],[21.59029,42.38042],[21.57021,42.3647],[21.53467,42.36809],[21.5264,42.33634],[21.56772,42.30946],[21.58992,42.25915],[21.52145,42.24465],[21.50823,42.27156],[21.43882,42.2789],[21.43882,42.23609],[21.38428,42.24465],[21.30496,42.1418],[21.29913,42.13954],[21.31983,42.10993],[21.22728,42.08909],[21.16614,42.19815],[21.11491,42.20794],[20.75464,42.05229],[20.76786,41.91839],[20.68523,41.85318],[20.59524,41.8818],[20.57946,41.91593],[20.63069,41.94913],[20.59434,42.03879],[20.55633,42.08173],[20.56955,42.12097],[20.48857,42.25444],[20.3819,42.3029],[20.34479,42.32656],[20.24399,42.32168],[20.21797,42.41237],[20.17127,42.50469],[20.07761,42.55582],[20.0969,42.65559],[20.02915,42.71147],[20.02088,42.74789],[20.04898,42.77701],[20.2539,42.76245],[20.27869,42.81945],[20.35692,42.8335],[20.40594,42.84853],[20.43734,42.83157],[20.53484,42.8885],[20.48692,42.93208],[20.59929,43.01067],[20.64557,43.00826],[20.69515,43.09641],[20.59929,43.20492],[20.68688,43.21335],[20.73811,43.25068],[20.82145,43.26769],[20.88685,43.21697],[20.83727,43.17842],[20.96287,43.12416],[21.00749,43.13984],[21.05378,43.10707],[21.08952,43.13471],[21.14465,43.11089],[21.16734,42.99694],[21.2041,43.02277],[21.23877,43.00848],[21.23534,42.95523],[21.2719,42.8994],[21.32974,42.90424],[21.36941,42.87397],[21.44047,42.87276],[21.39045,42.74888]]]]}},{type:"Feature",properties:{iso1A2:"FX",iso1A3:"FXX",iso1N3:"249",wikidata:"Q212429",nameEn:"Metropolitan France",country:"FR",groups:["EU","155","150"],isoStatus:"excRes",callingCodes:["33"]},geometry:{type:"MultiPolygon",coordinates:[[[[2.55904,51.07014],[2.57551,51.00326],[2.63074,50.94746],[2.59093,50.91751],[2.63331,50.81457],[2.71165,50.81295],[2.81056,50.71773],[2.8483,50.72276],[2.86985,50.7033],[2.87937,50.70298],[2.88504,50.70656],[2.90069,50.69263],[2.91036,50.6939],[2.90873,50.702],[2.95019,50.75138],[2.96778,50.75242],[3.00537,50.76588],[3.04314,50.77674],[3.09163,50.77717],[3.10614,50.78303],[3.11206,50.79416],[3.11987,50.79188],[3.1257,50.78603],[3.15017,50.79031],[3.16476,50.76843],[3.18339,50.74981],[3.18811,50.74025],[3.20064,50.73547],[3.19017,50.72569],[3.20845,50.71662],[3.22042,50.71019],[3.24593,50.71389],[3.26063,50.70086],[3.26141,50.69151],[3.2536,50.68977],[3.264,50.67668],[3.23951,50.6585],[3.2729,50.60718],[3.28575,50.52724],[3.37693,50.49538],[3.44629,50.51009],[3.47385,50.53397],[3.51564,50.5256],[3.49509,50.48885],[3.5683,50.50192],[3.58361,50.49049],[3.61014,50.49568],[3.64426,50.46275],[3.66153,50.45165],[3.67494,50.40239],[3.67262,50.38663],[3.65709,50.36873],[3.66976,50.34563],[3.71009,50.30305],[3.70987,50.3191],[3.73911,50.34809],[3.84314,50.35219],[3.90781,50.32814],[3.96771,50.34989],[4.0268,50.35793],[4.0689,50.3254],[4.10237,50.31247],[4.10957,50.30234],[4.11954,50.30425],[4.13665,50.25609],[4.16808,50.25786],[4.15524,50.2833],[4.17347,50.28838],[4.17861,50.27443],[4.20651,50.27333],[4.21945,50.25539],[4.15524,50.21103],[4.16014,50.19239],[4.13561,50.13078],[4.20147,50.13535],[4.23101,50.06945],[4.16294,50.04719],[4.13508,50.01976],[4.14239,49.98034],[4.20532,49.95803],[4.31963,49.97043],[4.35051,49.95315],[4.43488,49.94122],[4.51098,49.94659],[4.5414,49.96911],[4.68695,49.99685],[4.70064,50.09384],[4.75237,50.11314],[4.82438,50.16878],[4.83279,50.15331],[4.88602,50.15182],[4.8382,50.06738],[4.78827,49.95609],[4.88529,49.9236],[4.85134,49.86457],[4.86965,49.82271],[4.85464,49.78995],[4.96714,49.79872],[5.09249,49.76193],[5.14545,49.70287],[5.26232,49.69456],[5.31465,49.66846],[5.33039,49.6555],[5.30214,49.63055],[5.3137,49.61225],[5.33851,49.61599],[5.34837,49.62889],[5.3974,49.61596],[5.43713,49.5707],[5.46734,49.52648],[5.46541,49.49825],[5.55001,49.52729],[5.60909,49.51228],[5.64505,49.55146],[5.75649,49.54321],[5.7577,49.55915],[5.77435,49.56298],[5.79195,49.55228],[5.81838,49.54777],[5.80871,49.5425],[5.81664,49.53775],[5.83648,49.5425],[5.84466,49.53027],[5.83467,49.52717],[5.83389,49.52152],[5.86571,49.50015],[5.94128,49.50034],[5.94224,49.49608],[5.96876,49.49053],[5.97693,49.45513],[6.02648,49.45451],[6.02743,49.44845],[6.04176,49.44801],[6.05553,49.46663],[6.07887,49.46399],[6.08373,49.45594],[6.10072,49.45268],[6.09845,49.46351],[6.10325,49.4707],[6.12346,49.4735],[6.12814,49.49365],[6.14321,49.48796],[6.16115,49.49297],[6.15366,49.50226],[6.17386,49.50934],[6.19543,49.50536],[6.2409,49.51408],[6.25029,49.50609],[6.27875,49.503],[6.28818,49.48465],[6.3687,49.4593],[6.36778,49.46937],[6.38352,49.46463],[6.39168,49.4667],[6.40274,49.46546],[6.42432,49.47683],[6.55404,49.42464],[6.533,49.40748],[6.60091,49.36864],[6.58807,49.35358],[6.572,49.35027],[6.60186,49.31055],[6.66583,49.28065],[6.69274,49.21661],[6.71843,49.2208],[6.73256,49.20486],[6.71137,49.18808],[6.73765,49.16375],[6.78265,49.16793],[6.83385,49.15162],[6.84703,49.15734],[6.86225,49.18185],[6.85016,49.19354],[6.85119,49.20038],[6.83555,49.21249],[6.85939,49.22376],[6.89298,49.20863],[6.91875,49.22261],[6.93831,49.2223],[6.94028,49.21641],[6.95963,49.203],[6.97273,49.2099],[7.01318,49.19018],[7.03459,49.19096],[7.0274,49.17042],[7.03178,49.15734],[7.04662,49.13724],[7.04409,49.12123],[7.04843,49.11422],[7.05548,49.11185],[7.06642,49.11415],[7.07162,49.1255],[7.09007,49.13094],[7.07859,49.15031],[7.10715,49.15631],[7.10384,49.13787],[7.12504,49.14253],[7.1358,49.1282],[7.1593,49.1204],[7.23473,49.12971],[7.29514,49.11426],[7.3195,49.14231],[7.35995,49.14399],[7.3662,49.17308],[7.44052,49.18354],[7.44455,49.16765],[7.49473,49.17],[7.49172,49.13915],[7.53012,49.09818],[7.56416,49.08136],[7.62575,49.07654],[7.63618,49.05428],[7.75948,49.04562],[7.79557,49.06583],[7.86386,49.03499],[7.93641,49.05544],[7.97783,49.03161],[8.14189,48.97833],[8.22604,48.97352],[8.20031,48.95856],[8.19989,48.95825],[8.12813,48.87985],[8.10253,48.81829],[8.06802,48.78957],[8.0326,48.79017],[8.01534,48.76085],[7.96994,48.75606],[7.96812,48.72491],[7.89002,48.66317],[7.84098,48.64217],[7.80057,48.5857],[7.80167,48.54758],[7.80647,48.51239],[7.76833,48.48945],[7.73109,48.39192],[7.74562,48.32736],[7.69022,48.30018],[7.6648,48.22219],[7.57137,48.12292],[7.56966,48.03265],[7.62302,47.97898],[7.55673,47.87371],[7.52921,47.77747],[7.54761,47.72912],[7.53722,47.71635],[7.51266,47.70197],[7.51915,47.68335],[7.52067,47.66437],[7.53384,47.65115],[7.5591,47.63849],[7.57423,47.61628],[7.58851,47.60794],[7.59301,47.60058],[7.58945,47.59017],[7.58386,47.57536],[7.56684,47.57785],[7.56548,47.57617],[7.55689,47.57232],[7.55652,47.56779],[7.53634,47.55553],[7.52831,47.55347],[7.51723,47.54578],[7.50873,47.54546],[7.49691,47.53821],[7.50588,47.52856],[7.51904,47.53515],[7.53199,47.5284],[7.5229,47.51644],[7.49804,47.51798],[7.51076,47.49651],[7.47534,47.47932],[7.43356,47.49712],[7.42923,47.48628],[7.4583,47.47216],[7.4462,47.46264],[7.43088,47.45846],[7.40308,47.43638],[7.35603,47.43432],[7.33526,47.44186],[7.24669,47.4205],[7.17026,47.44312],[7.19583,47.49455],[7.16249,47.49025],[7.12781,47.50371],[7.07425,47.48863],[7.0231,47.50522],[6.98425,47.49432],[7.0024,47.45264],[6.93953,47.43388],[6.93744,47.40714],[6.88542,47.37262],[6.87959,47.35335],[7.03125,47.36996],[7.0564,47.35134],[7.05305,47.33304],[6.94316,47.28747],[6.95108,47.26428],[6.9508,47.24338],[6.8489,47.15933],[6.76788,47.1208],[6.68823,47.06616],[6.71531,47.0494],[6.43341,46.92703],[6.46456,46.88865],[6.43216,46.80336],[6.45209,46.77502],[6.38351,46.73171],[6.27135,46.68251],[6.11084,46.57649],[6.1567,46.54402],[6.07269,46.46244],[6.08427,46.44305],[6.06407,46.41676],[6.09926,46.40768],[6.15016,46.3778],[6.15985,46.37721],[6.16987,46.36759],[6.15738,46.3491],[6.13876,46.33844],[6.1198,46.31157],[6.11697,46.29547],[6.1013,46.28512],[6.11926,46.2634],[6.12446,46.25059],[6.10071,46.23772],[6.08563,46.24651],[6.07072,46.24085],[6.0633,46.24583],[6.05029,46.23518],[6.04602,46.23127],[6.03342,46.2383],[6.02461,46.23313],[5.97542,46.21525],[5.96515,46.19638],[5.99573,46.18587],[5.98846,46.17046],[5.98188,46.17392],[5.97508,46.15863],[5.9641,46.14412],[5.95781,46.12925],[5.97893,46.13303],[5.9871,46.14499],[6.01791,46.14228],[6.03614,46.13712],[6.04564,46.14031],[6.05203,46.15191],[6.07491,46.14879],[6.09199,46.15191],[6.09926,46.14373],[6.13397,46.1406],[6.15305,46.15194],[6.18116,46.16187],[6.18871,46.16644],[6.18707,46.17999],[6.19552,46.18401],[6.19807,46.18369],[6.20539,46.19163],[6.21114,46.1927],[6.21273,46.19409],[6.21603,46.19507],[6.21844,46.19837],[6.22222,46.19888],[6.22175,46.20045],[6.23544,46.20714],[6.23913,46.20511],[6.24821,46.20531],[6.26007,46.21165],[6.27694,46.21566],[6.29663,46.22688],[6.31041,46.24417],[6.29474,46.26221],[6.26749,46.24745],[6.24952,46.26255],[6.23775,46.27822],[6.25137,46.29014],[6.24826,46.30175],[6.21981,46.31304],[6.25432,46.3632],[6.53358,46.45431],[6.82312,46.42661],[6.8024,46.39171],[6.77152,46.34784],[6.86052,46.28512],[6.78968,46.14058],[6.89321,46.12548],[6.87868,46.03855],[6.93862,46.06502],[7.00946,45.9944],[7.04151,45.92435],[6.95315,45.85163],[6.80785,45.83265],[6.80785,45.71864],[6.98948,45.63869],[7.00037,45.509],[7.18019,45.40071],[7.10572,45.32924],[7.13115,45.25386],[7.07074,45.21228],[6.96706,45.20841],[6.85144,45.13226],[6.7697,45.16044],[6.62803,45.11175],[6.66981,45.02324],[6.74791,45.01939],[6.74519,44.93661],[6.75518,44.89915],[6.90774,44.84322],[6.93499,44.8664],[7.02217,44.82519],[7.00401,44.78782],[7.07484,44.68073],[7.00582,44.69364],[6.95133,44.66264],[6.96042,44.62129],[6.85507,44.53072],[6.86233,44.49834],[6.94504,44.43112],[6.88784,44.42043],[6.89171,44.36637],[6.98221,44.28289],[7.00764,44.23736],[7.16929,44.20352],[7.27827,44.1462],[7.34547,44.14359],[7.36364,44.11882],[7.62155,44.14881],[7.63245,44.17877],[7.68694,44.17487],[7.66878,44.12795],[7.72508,44.07578],[7.6597,44.03009],[7.66848,43.99943],[7.65266,43.9763],[7.60771,43.95772],[7.56858,43.94506],[7.56075,43.89932],[7.51162,43.88301],[7.49355,43.86551],[7.50423,43.84345],[7.53006,43.78405],[7.47823,43.73341],[7.4379,43.74963],[7.4389,43.75151],[7.43708,43.75197],[7.43624,43.75014],[7.43013,43.74895],[7.42809,43.74396],[7.42443,43.74087],[7.42299,43.74176],[7.42062,43.73977],[7.41233,43.73439],[7.41298,43.73311],[7.41291,43.73168],[7.41113,43.73156],[7.40903,43.7296],[7.42422,43.72209],[7.50102,43.51859],[9.56115,43.20816],[10.09675,41.44089],[7.60802,41.05927],[3.4481,42.4358],[3.17156,42.43545],[3.11379,42.43646],[3.10027,42.42621],[3.08167,42.42748],[3.03734,42.47363],[2.96518,42.46692],[2.94283,42.48174],[2.92107,42.4573],[2.88413,42.45938],[2.86983,42.46843],[2.85675,42.45444],[2.84335,42.45724],[2.77464,42.41046],[2.75497,42.42578],[2.72056,42.42298],[2.65311,42.38771],[2.6747,42.33974],[2.57934,42.35808],[2.55516,42.35351],[2.54382,42.33406],[2.48457,42.33933],[2.43508,42.37568],[2.43299,42.39423],[2.38504,42.39977],[2.25551,42.43757],[2.20578,42.41633],[2.16599,42.42314],[2.12789,42.41291],[2.11621,42.38393],[2.06241,42.35906],[2.00488,42.35399],[1.96482,42.37787],[1.9574,42.42401],[1.94084,42.43039],[1.94061,42.43333],[1.94292,42.44316],[1.93663,42.45439],[1.88853,42.4501],[1.83037,42.48395],[1.76335,42.48863],[1.72515,42.50338],[1.73683,42.55492],[1.7858,42.57698],[1.72588,42.59098],[1.73452,42.61515],[1.68267,42.62533],[1.6625,42.61982],[1.63485,42.62957],[1.60085,42.62703],[1.55418,42.65669],[1.50867,42.64483],[1.48043,42.65203],[1.46718,42.63296],[1.47986,42.61346],[1.44197,42.60217],[1.35562,42.71944],[1.15928,42.71407],[1.0804,42.78569],[0.98292,42.78754],[0.96166,42.80629],[0.93089,42.79154],[0.711,42.86372],[0.66121,42.84021],[0.65421,42.75872],[0.67873,42.69458],[0.40214,42.69779],[0.36251,42.72282],[0.29407,42.67431],[0.25336,42.7174],[0.17569,42.73424],[-0.02468,42.68513],[-0.10519,42.72761],[-0.16141,42.79535],[-0.17939,42.78974],[-0.3122,42.84788],[-0.38833,42.80132],[-0.41319,42.80776],[-0.44334,42.79939],[-0.50863,42.82713],[-0.55497,42.77846],[-0.67637,42.88303],[-0.69837,42.87945],[-0.72608,42.89318],[-0.73422,42.91228],[-0.72037,42.92541],[-0.75478,42.96916],[-0.81652,42.95166],[-0.97133,42.96239],[-1.00963,42.99279],[-1.10333,43.0059],[-1.22881,43.05534],[-1.25244,43.04164],[-1.30531,43.06859],[-1.30052,43.09581],[-1.27118,43.11961],[-1.32209,43.1127],[-1.34419,43.09665],[-1.35272,43.02658],[-1.44067,43.047],[-1.47555,43.08372],[-1.41562,43.12815],[-1.3758,43.24511],[-1.40942,43.27272],[-1.45289,43.27049],[-1.50992,43.29481],[-1.55963,43.28828],[-1.57674,43.25269],[-1.61341,43.25269],[-1.63052,43.28591],[-1.62481,43.30726],[-1.69407,43.31378],[-1.73074,43.29481],[-1.7397,43.32979],[-1.75079,43.3317],[-1.75334,43.34107],[-1.77068,43.34396],[-1.78714,43.35476],[-1.78332,43.36399],[-1.79319,43.37497],[-1.77289,43.38957],[-1.81005,43.59738],[-6.13339,48.73907],[-2.65349,49.15373],[-2.00491,48.86706],[-1.83944,49.23037],[-2.09454,49.46288],[-2.02963,49.91866],[1.17405,50.74239],[2.18458,51.52087],[2.55904,51.07014]]]]}},{type:"Feature",properties:{iso1A2:"AC",iso1A3:"ASC",wikidata:"Q46197",nameEn:"Ascension Island",country:"GB",groups:["SH","011","202","002"],isoStatus:"excRes",driveSide:"left",roadSpeedUnit:"mph",callingCodes:["247"]},geometry:{type:"MultiPolygon",coordinates:[[[[-14.82771,-8.70814],[-14.91926,-6.63386],[-13.33271,-8.07391],[-14.82771,-8.70814]]]]}},{type:"Feature",properties:{iso1A2:"ZM",iso1A3:"ZMB",iso1N3:"894",wikidata:"Q953",nameEn:"Zambia",groups:["014","202","002"],driveSide:"left",callingCodes:["260"]},geometry:{type:"MultiPolygon",coordinates:[[[[32.95389,-9.40138],[33.00476,-9.5133],[33.00256,-9.63053],[33.05485,-9.61316],[33.10163,-9.66525],[33.12144,-9.58929],[33.2095,-9.61099],[33.31517,-9.82364],[33.36581,-9.81063],[33.37902,-9.9104],[33.31297,-10.05133],[33.53863,-10.20148],[33.54797,-10.36077],[33.70675,-10.56896],[33.47636,-10.78465],[33.28022,-10.84428],[33.25998,-10.88862],[33.39697,-11.15296],[33.29267,-11.3789],[33.29267,-11.43536],[33.23663,-11.40637],[33.24252,-11.59302],[33.32692,-11.59248],[33.33937,-11.91252],[33.25998,-12.14242],[33.3705,-12.34931],[33.47636,-12.32498],[33.54485,-12.35996],[33.37517,-12.54085],[33.28177,-12.54692],[33.18837,-12.61377],[33.05917,-12.59554],[32.94397,-12.76868],[32.96733,-12.88251],[33.02181,-12.88707],[32.98289,-13.12671],[33.0078,-13.19492],[32.86113,-13.47292],[32.84176,-13.52794],[32.73683,-13.57682],[32.68436,-13.55769],[32.66468,-13.60019],[32.68654,-13.64268],[32.7828,-13.64805],[32.84528,-13.71576],[32.76962,-13.77224],[32.79015,-13.80755],[32.88985,-13.82956],[32.99042,-13.95689],[33.02977,-14.05022],[33.07568,-13.98447],[33.16749,-13.93992],[33.24249,-14.00019],[30.22098,-14.99447],[30.41902,-15.62269],[30.35574,-15.6513],[29.8317,-15.6126],[29.4437,-15.68702],[29.21955,-15.76589],[29.01298,-15.93805],[28.9243,-15.93987],[28.8501,-16.04537],[28.81454,-16.48611],[28.76199,-16.51575],[28.73725,-16.5528],[27.83141,-16.96274],[27.62795,-17.24365],[27.61377,-17.34378],[27.30736,-17.60487],[27.14196,-17.81398],[26.89926,-17.98756],[26.74314,-18.0199],[26.68403,-18.07411],[26.55918,-17.99638],[26.21601,-17.88608],[26.0908,-17.93021],[26.08925,-17.98168],[25.85892,-17.97726],[25.85738,-17.91403],[25.6827,-17.81987],[25.51646,-17.86232],[25.26433,-17.79571],[25.00198,-17.58221],[24.70864,-17.49501],[24.5621,-17.52963],[24.38712,-17.46818],[24.32811,-17.49082],[24.23619,-17.47489],[23.47474,-17.62877],[23.20038,-17.47563],[22.17217,-16.50269],[22.00323,-16.18028],[21.97988,-13.00148],[24.03339,-12.99091],[23.90937,-12.844],[24.06672,-12.29058],[23.98804,-12.13149],[24.02603,-11.15368],[24.00027,-10.89356],[24.34528,-11.06816],[24.42612,-11.44975],[25.34069,-11.19707],[25.33058,-11.65767],[26.01777,-11.91488],[26.88687,-12.01868],[27.04351,-11.61312],[27.22541,-11.60323],[27.21025,-11.76157],[27.59932,-12.22123],[28.33199,-12.41375],[29.01918,-13.41353],[29.60531,-13.21685],[29.65078,-13.41844],[29.81551,-13.44683],[29.8139,-12.14898],[29.48404,-12.23604],[29.4992,-12.43843],[29.18592,-12.37921],[28.48357,-11.87532],[28.37241,-11.57848],[28.65032,-10.65133],[28.62795,-9.92942],[28.68532,-9.78],[28.56208,-9.49122],[28.51627,-9.44726],[28.52636,-9.35379],[28.36562,-9.30091],[28.38526,-9.23393],[28.9711,-8.66935],[28.88917,-8.4831],[30.79243,-8.27382],[31.00796,-8.58615],[31.37533,-8.60769],[31.57147,-8.70619],[31.57147,-8.81388],[31.71158,-8.91386],[31.81587,-8.88618],[31.94663,-8.93846],[31.94196,-9.02303],[31.98866,-9.07069],[32.08206,-9.04609],[32.16146,-9.05993],[32.25486,-9.13371],[32.43543,-9.11988],[32.49147,-9.14754],[32.53661,-9.24281],[32.75611,-9.28583],[32.76233,-9.31963],[32.95389,-9.40138]]]]}},{type:"Feature",properties:{iso1A2:"ZA",iso1A3:"ZAF",iso1N3:"710",wikidata:"Q258",nameEn:"South Africa",groups:["018","202","002"],driveSide:"left",callingCodes:["27"]},geometry:{type:"MultiPolygon",coordinates:[[[[31.30611,-22.422],[31.55779,-23.176],[31.56539,-23.47268],[31.67942,-23.60858],[31.70223,-23.72695],[31.77445,-23.90082],[31.87707,-23.95293],[31.90368,-24.18892],[31.9835,-24.29983],[32.03196,-25.10785],[32.01676,-25.38117],[31.97875,-25.46356],[32.00631,-25.65044],[31.92649,-25.84216],[31.974,-25.95387],[31.86881,-25.99973],[31.4175,-25.71886],[31.31237,-25.7431],[31.13073,-25.91558],[30.95819,-26.26303],[30.78927,-26.48271],[30.81101,-26.84722],[30.88826,-26.79622],[30.97757,-26.92706],[30.96088,-27.0245],[31.15027,-27.20151],[31.49834,-27.31549],[31.97592,-27.31675],[31.97463,-27.11057],[32.00893,-26.8096],[32.09664,-26.80721],[32.13315,-26.84345],[32.19409,-26.84032],[32.22302,-26.84136],[32.29584,-26.852],[32.35222,-26.86027],[34.51034,-26.91792],[38.88176,-48.03306],[12.51595,-32.27486],[16.45332,-28.63117],[16.46592,-28.57126],[16.59922,-28.53246],[16.90446,-28.057],[17.15405,-28.08573],[17.4579,-28.68718],[18.99885,-28.89165],[19.99882,-28.42622],[19.99817,-24.76768],[20.02809,-24.78725],[20.03678,-24.81004],[20.29826,-24.94869],[20.64795,-25.47827],[20.86081,-26.14892],[20.61754,-26.4692],[20.63275,-26.78181],[20.68596,-26.9039],[20.87031,-26.80047],[21.13353,-26.86661],[21.37869,-26.82083],[21.69322,-26.86152],[21.7854,-26.79199],[21.77114,-26.69015],[21.83291,-26.65959],[21.90703,-26.66808],[22.06192,-26.61882],[22.21206,-26.3773],[22.41921,-26.23078],[22.56365,-26.19668],[22.70808,-25.99186],[22.86012,-25.50572],[23.03497,-25.29971],[23.47588,-25.29971],[23.9244,-25.64286],[24.18287,-25.62916],[24.36531,-25.773],[24.44703,-25.73021],[24.67319,-25.81749],[24.8946,-25.80723],[25.01718,-25.72507],[25.12266,-25.75931],[25.33076,-25.76616],[25.58543,-25.6343],[25.6643,-25.4491],[25.69661,-25.29284],[25.72702,-25.25503],[25.88571,-24.87802],[25.84295,-24.78661],[25.8515,-24.75727],[26.39409,-24.63468],[26.46346,-24.60358],[26.51667,-24.47219],[26.84165,-24.24885],[26.99749,-23.65486],[27.33768,-23.40917],[27.52393,-23.37952],[27.6066,-23.21894],[27.74154,-23.2137],[27.93539,-23.04941],[27.93729,-22.96194],[28.04752,-22.90243],[28.04562,-22.8394],[28.34874,-22.5694],[28.63287,-22.55887],[28.91889,-22.44299],[29.0151,-22.22907],[29.10881,-22.21202],[29.15268,-22.21399],[29.18974,-22.18599],[29.21955,-22.17771],[29.37703,-22.19581],[29.64609,-22.12917],[29.76848,-22.14128],[29.92242,-22.19408],[30.13147,-22.30841],[30.2265,-22.2961],[30.28351,-22.35587],[30.38614,-22.34533],[30.48686,-22.31368],[30.6294,-22.32599],[30.86696,-22.28907],[31.08932,-22.34884],[31.16344,-22.32599],[31.30611,-22.422]],[[29.33204,-29.45598],[29.44883,-29.3772],[29.40524,-29.21246],[28.68043,-28.58744],[28.65091,-28.57025],[28.40612,-28.6215],[28.30518,-28.69531],[28.2348,-28.69471],[28.1317,-28.7293],[28.02503,-28.85991],[27.98675,-28.8787],[27.9392,-28.84864],[27.88933,-28.88156],[27.8907,-28.91612],[27.75458,-28.89839],[27.55974,-29.18954],[27.5158,-29.2261],[27.54258,-29.25575],[27.48679,-29.29349],[27.45125,-29.29708],[27.47254,-29.31968],[27.4358,-29.33465],[27.33464,-29.48161],[27.01016,-29.65439],[27.09489,-29.72796],[27.22719,-30.00718],[27.29603,-30.05473],[27.32555,-30.14785],[27.40778,-30.14577],[27.37293,-30.19401],[27.36649,-30.27246],[27.38108,-30.33456],[27.45452,-30.32239],[27.56901,-30.42504],[27.56781,-30.44562],[27.62137,-30.50509],[27.6521,-30.51707],[27.67819,-30.53437],[27.69467,-30.55862],[27.74814,-30.60635],[28.12073,-30.68072],[28.2319,-30.28476],[28.399,-30.1592],[28.68627,-30.12885],[28.80222,-30.10579],[28.9338,-30.05072],[29.16548,-29.91706],[29.12553,-29.76266],[29.28545,-29.58456],[29.33204,-29.45598]]]]}},{type:"Feature",properties:{iso1A2:"YT",iso1A3:"MYT",iso1N3:"175",wikidata:"Q17063",nameEn:"Mayotte",country:"FR",groups:["EU","014","202","002"],callingCodes:["262"]},geometry:{type:"MultiPolygon",coordinates:[[[[43.83794,-13.66915],[45.50237,-11.90315],[45.54824,-13.22353],[43.83794,-13.66915]]]]}},{type:"Feature",properties:{iso1A2:"YE",iso1A3:"YEM",iso1N3:"887",wikidata:"Q805",nameEn:"Yemen",groups:["145","142"],callingCodes:["967"]},geometry:{type:"MultiPolygon",coordinates:[[[[53.32998,16.16312],[55.69862,12.12478],[52.253,11.68582],[51.12877,12.56479],[50.51849,13.0483],[43.90659,12.3823],[43.32909,12.59711],[43.29075,12.79154],[42.63806,13.58268],[41.29956,15.565],[41.37609,16.19728],[42.15205,16.40211],[42.76801,16.40371],[42.94625,16.39721],[42.94351,16.49467],[42.97215,16.51093],[43.11601,16.53166],[43.15274,16.67248],[43.22066,16.65179],[43.21325,16.74416],[43.25857,16.75304],[43.26303,16.79479],[43.24801,16.80613],[43.22956,16.80613],[43.22012,16.83932],[43.18338,16.84852],[43.1398,16.90696],[43.19328,16.94703],[43.1813,16.98438],[43.18233,17.02673],[43.23967,17.03428],[43.17787,17.14717],[43.20156,17.25901],[43.32653,17.31179],[43.22533,17.38343],[43.29185,17.53224],[43.43005,17.56148],[43.70631,17.35762],[44.50126,17.47475],[46.31018,17.20464],[46.76494,17.29151],[47.00571,16.94765],[47.48245,17.10808],[47.58351,17.50366],[48.19996,18.20584],[49.04884,18.59899],[52.00311,19.00083],[52.78009,17.35124],[52.74267,17.29519],[52.81185,17.28568],[53.09917,16.67084],[53.32998,16.16312]]]]}},{type:"Feature",properties:{iso1A2:"KR",iso1A3:"KOR",iso1N3:"410",wikidata:"Q884",nameEn:"South Korea",groups:["030","142"],callingCodes:["82"]},geometry:{type:"MultiPolygon",coordinates:[[[[133.61399,37.41],[129.2669,34.87122],[125.99728,32.63328],[122.80525,33.30571],[123.85601,37.49093],[124.67666,38.05679],[124.84224,37.977],[124.87921,37.80827],[125.06408,37.66334],[125.37112,37.62643],[125.81159,37.72949],[126.13074,37.70512],[126.18776,37.74728],[126.19097,37.81462],[126.24402,37.83113],[126.43239,37.84095],[126.46818,37.80873],[126.56709,37.76857],[126.59918,37.76364],[126.66067,37.7897],[126.68793,37.83728],[126.68793,37.9175],[126.67023,37.95852],[126.84961,38.0344],[126.88106,38.10246],[126.95887,38.1347],[126.95338,38.17735],[127.04479,38.25518],[127.15749,38.30722],[127.38727,38.33227],[127.49672,38.30647],[127.55013,38.32257],[128.02917,38.31861],[128.27652,38.41657],[128.31105,38.58462],[128.37487,38.62345],[128.65655,38.61914],[133.61399,37.41]]]]}},{type:"Feature",properties:{iso1A2:"GT",iso1A3:"GTM",iso1N3:"320",wikidata:"Q774",nameEn:"Guatemala",groups:["013","003","419","019"],callingCodes:["502"]},geometry:{type:"MultiPolygon",coordinates:[[[[-89.14985,17.81563],[-89.15025,17.04813],[-89.22683,15.88619],[-89.17418,15.90898],[-89.02415,15.9063],[-88.95358,15.88698],[-88.40779,16.09624],[-88.20359,16.03858],[-88.22552,15.72294],[-88.24022,15.69247],[-88.31459,15.66942],[-88.32467,15.63665],[-88.97343,15.14039],[-89.15149,15.07392],[-89.18048,14.99967],[-89.15149,14.97775],[-89.23467,14.85596],[-89.13132,14.71582],[-89.15653,14.57802],[-89.23719,14.58046],[-89.35189,14.47553],[-89.34776,14.43013],[-89.39028,14.44561],[-89.57441,14.41637],[-89.58814,14.33165],[-89.50614,14.26084],[-89.52397,14.22628],[-89.61844,14.21937],[-89.70756,14.1537],[-89.75569,14.07073],[-89.73251,14.04133],[-89.76103,14.02923],[-89.81807,14.07073],[-89.88937,14.0396],[-90.10505,13.85104],[-90.11344,13.73679],[-90.55276,12.8866],[-92.37213,14.39277],[-92.2261,14.53423],[-92.1454,14.6804],[-92.18161,14.84147],[-92.1423,14.88647],[-92.1454,14.98143],[-92.0621,15.07406],[-92.20983,15.26077],[-91.73182,16.07371],[-90.44567,16.07573],[-90.40499,16.40524],[-90.61212,16.49832],[-90.69064,16.70697],[-91.04436,16.92175],[-91.43809,17.25373],[-90.99199,17.25192],[-90.98678,17.81655],[-89.14985,17.81563]]]]}},{type:"Feature",properties:{iso1A2:"DZ",iso1A3:"DZA",iso1N3:"012",wikidata:"Q262",nameEn:"Algeria",groups:["015","002"],callingCodes:["213"]},geometry:{type:"MultiPolygon",coordinates:[[[[8.59123,37.14286],[8.64044,36.9401],[8.62972,36.86499],[8.67706,36.8364],[8.57613,36.78062],[8.46537,36.7706],[8.47609,36.66607],[8.16167,36.48817],[8.18936,36.44939],[8.40731,36.42208],[8.2626,35.91733],[8.26472,35.73669],[8.35371,35.66373],[8.36086,35.47774],[8.30329,35.29884],[8.47318,35.23376],[8.3555,35.10007],[8.30727,34.95378],[8.25189,34.92009],[8.29655,34.72798],[8.20482,34.57575],[7.86264,34.3987],[7.81242,34.21841],[7.74207,34.16492],[7.66174,34.20167],[7.52851,34.06493],[7.54088,33.7726],[7.73687,33.42114],[7.83028,33.18851],[8.11433,33.10175],[8.1179,33.05086],[8.31895,32.83483],[8.35999,32.50101],[9.07483,32.07865],[9.55544,30.23971],[9.3876,30.16738],[9.78136,29.40961],[9.89569,26.57696],[9.51696,26.39148],[9.38834,26.19288],[10.03146,25.35635],[10.02432,24.98124],[10.33159,24.5465],[10.85323,24.5595],[11.41061,24.21456],[11.62498,24.26669],[11.96886,23.51735],[7.48273,20.87258],[7.38361,20.79165],[5.8153,19.45101],[4.26651,19.14224],[3.36082,18.9745],[3.12501,19.1366],[3.24648,19.81703],[1.20992,20.73533],[1.15698,21.12843],[-4.83423,24.99935],[-8.66674,27.31569],[-8.66879,27.6666],[-8.6715,28.71194],[-7.61585,29.36252],[-6.95824,29.50924],[-6.78351,29.44634],[-6.69965,29.51623],[-5.75616,29.61407],[-5.72121,29.52322],[-5.58831,29.48103],[-5.21671,29.95253],[-4.6058,30.28343],[-4.31774,30.53229],[-3.64735,30.67539],[-3.65418,30.85566],[-3.54944,31.0503],[-3.77103,31.14984],[-3.77647,31.31912],[-3.66386,31.39202],[-3.66314,31.6339],[-2.82784,31.79459],[-2.93873,32.06557],[-2.46166,32.16603],[-1.22829,32.07832],[-1.15735,32.12096],[-1.24453,32.1917],[-1.24998,32.32993],[-0.9912,32.52467],[-1.37794,32.73628],[-1.54244,32.95499],[-1.46249,33.0499],[-1.67067,33.27084],[-1.59508,33.59929],[-1.73494,33.71721],[-1.64666,34.10405],[-1.78042,34.39018],[-1.69788,34.48056],[-1.84569,34.61907],[-1.73707,34.74226],[-1.97469,34.886],[-1.97833,34.93218],[-2.04734,34.93218],[-2.21445,35.04378],[-2.21248,35.08532],[-2.27707,35.35051],[2.46645,37.97429],[8.59123,37.14286]]]]}},{type:"Feature",properties:{iso1A2:"BS",iso1A3:"BHS",iso1N3:"044",wikidata:"Q778",nameEn:"The Bahamas",groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 242"]},geometry:{type:"MultiPolygon",coordinates:[[[[-72.98446,20.4801],[-80.88924,23.80416],[-79.89631,24.6597],[-79.14818,27.83105],[-71.70065,25.7637],[-72.98446,20.4801]]]]}}];
27692         var rawBorders = {
27693         type: type$1,
27694         features: features$1
27695         };
27696
27697         var borders = rawBorders;
27698         var whichPolygonGetter = {};
27699         var featuresByCode = {};
27700         var idFilterRegex = /\bThe\b|\bthe\b|\band\b|\bof\b|[-_ .,()&[\]/]/g;
27701         var levels = [
27702           'subterritory',
27703           'territory',
27704           'country',
27705           'intermediateRegion',
27706           'subregion',
27707           'region',
27708           'union',
27709           'world'
27710         ];
27711         loadDerivedDataAndCaches(borders);
27712         function loadDerivedDataAndCaches(borders) {
27713           var identifierProps = ['iso1A2', 'iso1A3', 'm49', 'wikidata', 'emojiFlag', 'nameEn'];
27714           var geometryFeatures = [];
27715           for (var i in borders.features) {
27716             var feature = borders.features[i];
27717             feature.properties.id = feature.properties.iso1A2 || feature.properties.m49;
27718             loadM49(feature);
27719             loadIsoStatus(feature);
27720             loadLevel(feature);
27721             loadGroups(feature);
27722             loadRoadSpeedUnit(feature);
27723             loadDriveSide(feature);
27724             loadFlag(feature);
27725             cacheFeatureByIDs(feature);
27726             if (feature.geometry) { geometryFeatures.push(feature); }
27727           }
27728           for (var i$1 in borders.features) {
27729             var feature$1 = borders.features[i$1];
27730             feature$1.properties.groups.sort(function(groupID1, groupID2) {
27731               return (
27732                 levels.indexOf(featuresByCode[groupID1].properties.level) -
27733                 levels.indexOf(featuresByCode[groupID2].properties.level)
27734               );
27735             });
27736             loadMembersForGroupsOf(feature$1);
27737           }
27738           var geometryOnlyCollection = {
27739             type: 'RegionFeatureCollection',
27740             features: geometryFeatures
27741           };
27742           whichPolygonGetter = whichPolygon_1(geometryOnlyCollection);
27743           function loadGroups(feature) {
27744             var props = feature.properties;
27745             if (!props.groups) {
27746               props.groups = [];
27747             }
27748             if (props.country) {
27749               props.groups.push(props.country);
27750             }
27751             if (props.m49 !== '001') {
27752               props.groups.push('001');
27753             }
27754           }
27755           function loadM49(feature) {
27756             var props = feature.properties;
27757             if (!props.m49 && props.iso1N3) {
27758               props.m49 = props.iso1N3;
27759             }
27760           }
27761           function loadIsoStatus(feature) {
27762             var props = feature.properties;
27763             if (!props.isoStatus && props.iso1A2) {
27764               props.isoStatus = 'official';
27765             }
27766           }
27767           function loadLevel(feature) {
27768             var props = feature.properties;
27769             if (props.level) { return; }
27770             if (!props.country) {
27771               props.level = 'country';
27772             } else if (props.isoStatus === 'official') {
27773               props.level = 'territory';
27774             } else {
27775               props.level = 'subterritory';
27776             }
27777           }
27778           function loadRoadSpeedUnit(feature) {
27779             var props = feature.properties;
27780             if (props.roadSpeedUnit === undefined && props.iso1A2 && props.iso1A2 !== 'EU') {
27781               props.roadSpeedUnit = 'km/h';
27782             }
27783           }
27784           function loadDriveSide(feature) {
27785             var props = feature.properties;
27786             if (props.driveSide === undefined && props.iso1A2 && props.iso1A2 !== 'EU') {
27787               props.driveSide = 'right';
27788             }
27789           }
27790           function loadFlag(feature) {
27791             if (!feature.properties.iso1A2) { return; }
27792             var flag = feature.properties.iso1A2.replace(/./g, function(char) {
27793               return String.fromCodePoint(char.charCodeAt(0) + 127397);
27794             });
27795             feature.properties.emojiFlag = flag;
27796           }
27797           function loadMembersForGroupsOf(feature) {
27798             var featureID = feature.properties.id;
27799             var standardizedGroupIDs = [];
27800             for (var j in feature.properties.groups) {
27801               var groupID = feature.properties.groups[j];
27802               var groupFeature = featuresByCode[groupID];
27803               standardizedGroupIDs.push(groupFeature.properties.id);
27804               if (groupFeature.properties.members) {
27805                 groupFeature.properties.members.push(featureID);
27806               } else {
27807                 groupFeature.properties.members = [featureID];
27808               }
27809             }
27810             feature.properties.groups = standardizedGroupIDs;
27811           }
27812           function cacheFeatureByIDs(feature) {
27813             for (var k in identifierProps) {
27814               var prop = identifierProps[k];
27815               var id = prop && feature.properties[prop];
27816               if (id) {
27817                 id = id.replace(idFilterRegex, '').toUpperCase();
27818                 featuresByCode[id] = feature;
27819               }
27820             }
27821             if (feature.properties.aliases) {
27822               for (var j in feature.properties.aliases) {
27823                 var alias = feature.properties.aliases[j].replace(idFilterRegex, '').toUpperCase();
27824                 featuresByCode[alias] = feature;
27825               }
27826             }
27827           }
27828         }
27829         function locArray(loc) {
27830           if (Array.isArray(loc)) {
27831             return loc;
27832           } else if (loc.coordinates) {
27833             return loc.coordinates;
27834           }
27835           return loc.geometry.coordinates;
27836         }
27837         function smallestFeature(loc) {
27838           var query = locArray(loc);
27839           var featureProperties = whichPolygonGetter(query);
27840           if (!featureProperties) { return null; }
27841           return featuresByCode[featureProperties.id];
27842         }
27843         function countryFeature(loc) {
27844           var feature = smallestFeature(loc);
27845           if (!feature) { return null; }
27846           var countryCode = feature.properties.country || feature.properties.iso1A2;
27847           return featuresByCode[countryCode];
27848         }
27849         function featureForLoc(loc, opts) {
27850           if (opts && opts.level && opts.level !== 'country') {
27851             var features = featuresContaining(loc);
27852             var targetLevel = opts.level;
27853             var targetLevelIndex = levels.indexOf(targetLevel);
27854             if (targetLevelIndex === -1) { return null; }
27855             for (var i in features) {
27856               var feature = features[i];
27857               if (
27858                 feature.properties.level === targetLevel ||
27859                 levels.indexOf(feature.properties.level) > targetLevelIndex
27860               ) {
27861                 return feature;
27862               }
27863             }
27864             return null;
27865           }
27866           return countryFeature(loc);
27867         }
27868         function featureForID(id) {
27869           var stringID;
27870           if (typeof id === 'number') {
27871             stringID = id.toString();
27872             if (stringID.length === 1) {
27873               stringID = '00' + stringID;
27874             } else if (stringID.length === 2) {
27875               stringID = '0' + stringID;
27876             }
27877           } else {
27878             stringID = id.replace(idFilterRegex, '').toUpperCase();
27879           }
27880           return featuresByCode[stringID] || null;
27881         }
27882         function smallestOrMatchingFeature(query) {
27883           if (typeof query === 'object') {
27884             return smallestFeature(query);
27885           }
27886           return featureForID(query);
27887         }
27888         function feature(query, opts) {
27889           if (typeof query === 'object') {
27890             return featureForLoc(query, opts);
27891           }
27892           return featureForID(query);
27893         }
27894         function iso1A2Code(query, opts) {
27895           var match = feature(query, opts);
27896           if (!match) { return null; }
27897           return match.properties.iso1A2 || null;
27898         }
27899         function featuresContaining(query, strict) {
27900           var feature = smallestOrMatchingFeature(query);
27901           if (!feature) { return []; }
27902           var features = [];
27903           if (!strict || typeof query === 'object') {
27904             features.push(feature);
27905           }
27906           var properties = feature.properties;
27907           for (var i in properties.groups) {
27908             var groupID = properties.groups[i];
27909             features.push(featuresByCode[groupID]);
27910           }
27911           return features;
27912         }
27913         function roadSpeedUnit(query) {
27914           var feature = smallestOrMatchingFeature(query);
27915           return (feature && feature.properties.roadSpeedUnit) || null;
27916         }
27917
27918         var RADIUS = 6378137;
27919         var FLATTENING = 1/298.257223563;
27920         var POLAR_RADIUS$1 = 6356752.3142;
27921
27922         var wgs84 = {
27923                 RADIUS: RADIUS,
27924                 FLATTENING: FLATTENING,
27925                 POLAR_RADIUS: POLAR_RADIUS$1
27926         };
27927
27928         var geometry_1 = geometry;
27929         var ring = ringArea;
27930
27931         function geometry(_) {
27932             var area = 0, i;
27933             switch (_.type) {
27934                 case 'Polygon':
27935                     return polygonArea(_.coordinates);
27936                 case 'MultiPolygon':
27937                     for (i = 0; i < _.coordinates.length; i++) {
27938                         area += polygonArea(_.coordinates[i]);
27939                     }
27940                     return area;
27941                 case 'Point':
27942                 case 'MultiPoint':
27943                 case 'LineString':
27944                 case 'MultiLineString':
27945                     return 0;
27946                 case 'GeometryCollection':
27947                     for (i = 0; i < _.geometries.length; i++) {
27948                         area += geometry(_.geometries[i]);
27949                     }
27950                     return area;
27951             }
27952         }
27953
27954         function polygonArea(coords) {
27955             var area = 0;
27956             if (coords && coords.length > 0) {
27957                 area += Math.abs(ringArea(coords[0]));
27958                 for (var i = 1; i < coords.length; i++) {
27959                     area -= Math.abs(ringArea(coords[i]));
27960                 }
27961             }
27962             return area;
27963         }
27964
27965         /**
27966          * Calculate the approximate area of the polygon were it projected onto
27967          *     the earth.  Note that this area will be positive if ring is oriented
27968          *     clockwise, otherwise it will be negative.
27969          *
27970          * Reference:
27971          * Robert. G. Chamberlain and William H. Duquette, "Some Algorithms for
27972          *     Polygons on a Sphere", JPL Publication 07-03, Jet Propulsion
27973          *     Laboratory, Pasadena, CA, June 2007 http://trs-new.jpl.nasa.gov/dspace/handle/2014/40409
27974          *
27975          * Returns:
27976          * {float} The approximate signed geodesic area of the polygon in square
27977          *     meters.
27978          */
27979
27980         function ringArea(coords) {
27981             var p1, p2, p3, lowerIndex, middleIndex, upperIndex, i,
27982             area = 0,
27983             coordsLength = coords.length;
27984
27985             if (coordsLength > 2) {
27986                 for (i = 0; i < coordsLength; i++) {
27987                     if (i === coordsLength - 2) {// i = N-2
27988                         lowerIndex = coordsLength - 2;
27989                         middleIndex = coordsLength -1;
27990                         upperIndex = 0;
27991                     } else if (i === coordsLength - 1) {// i = N-1
27992                         lowerIndex = coordsLength - 1;
27993                         middleIndex = 0;
27994                         upperIndex = 1;
27995                     } else { // i = 0 to N-3
27996                         lowerIndex = i;
27997                         middleIndex = i+1;
27998                         upperIndex = i+2;
27999                     }
28000                     p1 = coords[lowerIndex];
28001                     p2 = coords[middleIndex];
28002                     p3 = coords[upperIndex];
28003                     area += ( rad(p3[0]) - rad(p1[0]) ) * Math.sin( rad(p2[1]));
28004                 }
28005
28006                 area = area * wgs84.RADIUS * wgs84.RADIUS / 2;
28007             }
28008
28009             return area;
28010         }
28011
28012         function rad(_) {
28013             return _ * Math.PI / 180;
28014         }
28015
28016         var geojsonArea = {
28017                 geometry: geometry_1,
28018                 ring: ring
28019         };
28020
28021         function toRadians(angleInDegrees) {
28022           return angleInDegrees * Math.PI / 180;
28023         }
28024
28025         function toDegrees(angleInRadians) {
28026           return angleInRadians * 180 / Math.PI;
28027         }
28028
28029         function offset(c1, distance, bearing) {
28030           var lat1 = toRadians(c1[1]);
28031           var lon1 = toRadians(c1[0]);
28032           var dByR = distance / 6378137; // distance divided by 6378137 (radius of the earth) wgs84
28033           var lat = Math.asin(
28034             Math.sin(lat1) * Math.cos(dByR) +
28035             Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));
28036           var lon = lon1 + Math.atan2(
28037               Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1),
28038               Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));
28039           return [toDegrees(lon), toDegrees(lat)];
28040         }
28041
28042         var circleToPolygon = function circleToPolygon(center, radius, numberOfSegments) {
28043           var n = numberOfSegments ? numberOfSegments : 32;
28044           var flatCoordinates = [];
28045           var coordinates = [];
28046           for (var i = 0; i < n; ++i) {
28047             flatCoordinates.push.apply(flatCoordinates, offset(center, radius, 2 * Math.PI * i / n));
28048           }
28049           flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);
28050
28051           for (var i = 0, j = 0; j < flatCoordinates.length; j += 2) {
28052             coordinates[i++] = flatCoordinates.slice(j, j + 2);
28053           }
28054
28055           return {
28056             type: 'Polygon',
28057             coordinates: [coordinates.reverse()]
28058           };
28059         };
28060
28061         var geojsonPrecision = createCommonjsModule(function (module) {
28062         (function() {
28063
28064           function parse(t, precision) {
28065
28066             function point(p) {
28067               return p.map(function(e) {
28068                 return 1 * e.toFixed(precision);
28069               });
28070             }
28071
28072             function multi(l) {
28073               return l.map(point);
28074             }
28075
28076             function poly(p) {
28077               return p.map(multi);
28078             }
28079
28080             function multiPoly(m) {
28081               return m.map(poly);
28082             }
28083
28084             function geometry(obj) {
28085               if (!obj) {
28086                 return {};
28087               }
28088               
28089               switch (obj.type) {
28090                 case "Point":
28091                   obj.coordinates = point(obj.coordinates);
28092                   return obj;
28093                 case "LineString":
28094                 case "MultiPoint":
28095                   obj.coordinates = multi(obj.coordinates);
28096                   return obj;
28097                 case "Polygon":
28098                 case "MultiLineString":
28099                   obj.coordinates = poly(obj.coordinates);
28100                   return obj;
28101                 case "MultiPolygon":
28102                   obj.coordinates = multiPoly(obj.coordinates);
28103                   return obj;
28104                 case "GeometryCollection":
28105                   obj.geometries = obj.geometries.map(geometry);
28106                   return obj;
28107                 default :
28108                   return {};
28109               }
28110             }
28111
28112             function feature(obj) {
28113               obj.geometry = geometry(obj.geometry);
28114               return obj
28115             }
28116
28117             function featureCollection(f) {
28118               f.features = f.features.map(feature);
28119               return f;
28120             }
28121
28122             function geometryCollection(g) {
28123               g.geometries = g.geometries.map(geometry);
28124               return g;
28125             }
28126
28127             if (!t) {
28128               return t;
28129             }
28130
28131             switch (t.type) {
28132               case "Feature":
28133                 return feature(t);
28134               case "GeometryCollection" :
28135                 return geometryCollection(t);
28136               case "FeatureCollection" :
28137                 return featureCollection(t);
28138               case "Point":
28139               case "LineString":
28140               case "Polygon":
28141               case "MultiPoint":
28142               case "MultiPolygon":
28143               case "MultiLineString":
28144                 return geometry(t);
28145               default :
28146                 return t;
28147             }
28148               
28149           }
28150
28151           module.exports = parse;
28152           module.exports.parse = parse;
28153
28154         }());
28155         });
28156         var geojsonPrecision_1 = geojsonPrecision.parse;
28157
28158         /* Polyfill service v3.13.0
28159          * For detailed credits and licence information see http://github.com/financial-times/polyfill-service
28160          *
28161          * - Array.prototype.fill, License: CC0 */
28162
28163         if (!('fill' in Array.prototype)) {
28164           Object.defineProperty(Array.prototype, 'fill', {
28165             configurable: true,
28166             value: function fill (value) {
28167               if (this === undefined || this === null) {
28168                 throw new TypeError(this + ' is not an object')
28169               }
28170
28171               var arrayLike = Object(this);
28172
28173               var length = Math.max(Math.min(arrayLike.length, 9007199254740991), 0) || 0;
28174
28175               var relativeStart = 1 in arguments ? parseInt(Number(arguments[1]), 10) || 0 : 0;
28176
28177               relativeStart = relativeStart < 0 ? Math.max(length + relativeStart, 0) : Math.min(relativeStart, length);
28178
28179               var relativeEnd = 2 in arguments && arguments[2] !== undefined ? parseInt(Number(arguments[2]), 10) || 0 : length;
28180
28181               relativeEnd = relativeEnd < 0 ? Math.max(length + arguments[2], 0) : Math.min(relativeEnd, length);
28182
28183               while (relativeStart < relativeEnd) {
28184                 arrayLike[relativeStart] = value;
28185
28186                 ++relativeStart;
28187               }
28188
28189               return arrayLike
28190             },
28191             writable: true
28192           });
28193         }
28194
28195         /**
28196          * Polyfill for IE support
28197          */
28198         Number.isFinite = Number.isFinite || function (value) {
28199           return typeof value === 'number' && isFinite(value)
28200         };
28201
28202         Number.isInteger = Number.isInteger || function (val) {
28203           return typeof val === 'number' &&
28204           isFinite(val) &&
28205           Math.floor(val) === val
28206         };
28207
28208         Number.parseFloat = Number.parseFloat || parseFloat;
28209
28210         Number.isNaN = Number.isNaN || function (value) {
28211           return value !== value // eslint-disable-line
28212         };
28213
28214         /**
28215          * Polyfill for IE support
28216          */
28217         Math.trunc = Math.trunc || function (x) {
28218           return x < 0 ? Math.ceil(x) : Math.floor(x)
28219         };
28220
28221         var NumberUtil = function NumberUtil () {};
28222
28223         NumberUtil.prototype.interfaces_ = function interfaces_ () {
28224           return []
28225         };
28226         NumberUtil.prototype.getClass = function getClass () {
28227           return NumberUtil
28228         };
28229         NumberUtil.prototype.equalsWithTolerance = function equalsWithTolerance (x1, x2, tolerance) {
28230           return Math.abs(x1 - x2) <= tolerance
28231         };
28232
28233         var IllegalArgumentException = (function (Error) {
28234                 function IllegalArgumentException (message) {
28235                         Error.call(this, message);
28236                         this.name = 'IllegalArgumentException';
28237                         this.message = message;
28238                         this.stack = (new Error()).stack;
28239                 }
28240
28241                 if ( Error ) { IllegalArgumentException.__proto__ = Error; }
28242                 IllegalArgumentException.prototype = Object.create( Error && Error.prototype );
28243                 IllegalArgumentException.prototype.constructor = IllegalArgumentException;
28244
28245                 return IllegalArgumentException;
28246         }(Error));
28247
28248         var Double = function Double () {};
28249
28250         var staticAccessors$1 = { MAX_VALUE: { configurable: true } };
28251
28252         Double.isNaN = function isNaN (n) { return Number.isNaN(n) };
28253         Double.doubleToLongBits = function doubleToLongBits (n) { return n };
28254         Double.longBitsToDouble = function longBitsToDouble (n) { return n };
28255         Double.isInfinite = function isInfinite (n) { return !Number.isFinite(n) };
28256         staticAccessors$1.MAX_VALUE.get = function () { return Number.MAX_VALUE };
28257
28258         Object.defineProperties( Double, staticAccessors$1 );
28259
28260         var Comparable = function Comparable () {};
28261
28262         var Clonable = function Clonable () {};
28263
28264         var Comparator = function Comparator () {};
28265
28266         function Serializable () {}
28267
28268         // import Assert from '../util/Assert'
28269
28270         var Coordinate = function Coordinate () {
28271           this.x = null;
28272           this.y = null;
28273           this.z = null;
28274           if (arguments.length === 0) {
28275             this.x = 0.0;
28276             this.y = 0.0;
28277             this.z = Coordinate.NULL_ORDINATE;
28278           } else if (arguments.length === 1) {
28279             var c = arguments[0];
28280             this.x = c.x;
28281             this.y = c.y;
28282             this.z = c.z;
28283           } else if (arguments.length === 2) {
28284             this.x = arguments[0];
28285             this.y = arguments[1];
28286             this.z = Coordinate.NULL_ORDINATE;
28287           } else if (arguments.length === 3) {
28288             this.x = arguments[0];
28289             this.y = arguments[1];
28290             this.z = arguments[2];
28291           }
28292         };
28293
28294         var staticAccessors = { DimensionalComparator: { configurable: true },serialVersionUID: { configurable: true },NULL_ORDINATE: { configurable: true },X: { configurable: true },Y: { configurable: true },Z: { configurable: true } };
28295         Coordinate.prototype.setOrdinate = function setOrdinate (ordinateIndex, value) {
28296           switch (ordinateIndex) {
28297             case Coordinate.X:
28298               this.x = value;
28299               break
28300             case Coordinate.Y:
28301               this.y = value;
28302               break
28303             case Coordinate.Z:
28304               this.z = value;
28305               break
28306             default:
28307               throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)
28308           }
28309         };
28310         Coordinate.prototype.equals2D = function equals2D () {
28311           if (arguments.length === 1) {
28312             var other = arguments[0];
28313             if (this.x !== other.x) {
28314               return false
28315             }
28316             if (this.y !== other.y) {
28317               return false
28318             }
28319             return true
28320           } else if (arguments.length === 2) {
28321             var c = arguments[0];
28322             var tolerance = arguments[1];
28323             if (!NumberUtil.equalsWithTolerance(this.x, c.x, tolerance)) {
28324               return false
28325             }
28326             if (!NumberUtil.equalsWithTolerance(this.y, c.y, tolerance)) {
28327               return false
28328             }
28329             return true
28330           }
28331         };
28332         Coordinate.prototype.getOrdinate = function getOrdinate (ordinateIndex) {
28333           switch (ordinateIndex) {
28334             case Coordinate.X:
28335               return this.x
28336             case Coordinate.Y:
28337               return this.y
28338             case Coordinate.Z:
28339               return this.z
28340           }
28341           throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)
28342         };
28343         Coordinate.prototype.equals3D = function equals3D (other) {
28344           return this.x === other.x &&
28345                  this.y === other.y &&
28346                  ((this.z === other.z || Double.isNaN(this.z)) &&
28347                  Double.isNaN(other.z))
28348         };
28349         Coordinate.prototype.equals = function equals (other) {
28350           if (!(other instanceof Coordinate)) {
28351             return false
28352           }
28353           return this.equals2D(other)
28354         };
28355         Coordinate.prototype.equalInZ = function equalInZ (c, tolerance) {
28356           return NumberUtil.equalsWithTolerance(this.z, c.z, tolerance)
28357         };
28358         Coordinate.prototype.compareTo = function compareTo (o) {
28359           var other = o;
28360           if (this.x < other.x) { return -1 }
28361           if (this.x > other.x) { return 1 }
28362           if (this.y < other.y) { return -1 }
28363           if (this.y > other.y) { return 1 }
28364           return 0
28365         };
28366         Coordinate.prototype.clone = function clone () {
28367           // try {
28368           // var coord = null
28369           // return coord
28370           // } catch (e) {
28371           // if (e instanceof CloneNotSupportedException) {
28372           //   Assert.shouldNeverReachHere("this shouldn't happen because this class is Cloneable")
28373           //   return null
28374           // } else throw e
28375           // } finally {}
28376         };
28377         Coordinate.prototype.copy = function copy () {
28378           return new Coordinate(this)
28379         };
28380         Coordinate.prototype.toString = function toString () {
28381           return '(' + this.x + ', ' + this.y + ', ' + this.z + ')'
28382         };
28383         Coordinate.prototype.distance3D = function distance3D (c) {
28384           var dx = this.x - c.x;
28385           var dy = this.y - c.y;
28386           var dz = this.z - c.z;
28387           return Math.sqrt(dx * dx + dy * dy + dz * dz)
28388         };
28389         Coordinate.prototype.distance = function distance (c) {
28390           var dx = this.x - c.x;
28391           var dy = this.y - c.y;
28392           return Math.sqrt(dx * dx + dy * dy)
28393         };
28394         Coordinate.prototype.hashCode = function hashCode () {
28395           var result = 17;
28396           result = 37 * result + Coordinate.hashCode(this.x);
28397           result = 37 * result + Coordinate.hashCode(this.y);
28398           return result
28399         };
28400         Coordinate.prototype.setCoordinate = function setCoordinate (other) {
28401           this.x = other.x;
28402           this.y = other.y;
28403           this.z = other.z;
28404         };
28405         Coordinate.prototype.interfaces_ = function interfaces_ () {
28406           return [Comparable, Clonable, Serializable]
28407         };
28408         Coordinate.prototype.getClass = function getClass () {
28409           return Coordinate
28410         };
28411         Coordinate.hashCode = function hashCode () {
28412           if (arguments.length === 1) {
28413             var x = arguments[0];
28414             var f = Double.doubleToLongBits(x);
28415             return Math.trunc((f ^ f) >>> 32)
28416           }
28417         };
28418         staticAccessors.DimensionalComparator.get = function () { return DimensionalComparator };
28419         staticAccessors.serialVersionUID.get = function () { return 6683108902428366910 };
28420         staticAccessors.NULL_ORDINATE.get = function () { return Double.NaN };
28421         staticAccessors.X.get = function () { return 0 };
28422         staticAccessors.Y.get = function () { return 1 };
28423         staticAccessors.Z.get = function () { return 2 };
28424
28425         Object.defineProperties( Coordinate, staticAccessors );
28426
28427         var DimensionalComparator = function DimensionalComparator (dimensionsToTest) {
28428           this._dimensionsToTest = 2;
28429           if (arguments.length === 0) ; else if (arguments.length === 1) {
28430             var dimensionsToTest$1 = arguments[0];
28431             if (dimensionsToTest$1 !== 2 && dimensionsToTest$1 !== 3) { throw new IllegalArgumentException('only 2 or 3 dimensions may be specified') }
28432             this._dimensionsToTest = dimensionsToTest$1;
28433           }
28434         };
28435         DimensionalComparator.prototype.compare = function compare (o1, o2) {
28436           var c1 = o1;
28437           var c2 = o2;
28438           var compX = DimensionalComparator.compare(c1.x, c2.x);
28439           if (compX !== 0) { return compX }
28440           var compY = DimensionalComparator.compare(c1.y, c2.y);
28441           if (compY !== 0) { return compY }
28442           if (this._dimensionsToTest <= 2) { return 0 }
28443           var compZ = DimensionalComparator.compare(c1.z, c2.z);
28444           return compZ
28445         };
28446         DimensionalComparator.prototype.interfaces_ = function interfaces_ () {
28447           return [Comparator]
28448         };
28449         DimensionalComparator.prototype.getClass = function getClass () {
28450           return DimensionalComparator
28451         };
28452         DimensionalComparator.compare = function compare (a, b) {
28453           if (a < b) { return -1 }
28454           if (a > b) { return 1 }
28455           if (Double.isNaN(a)) {
28456             if (Double.isNaN(b)) { return 0 }
28457             return -1
28458           }
28459           if (Double.isNaN(b)) { return 1 }
28460           return 0
28461         };
28462
28463         // import hasInterface from '../../../../hasInterface'
28464         // import CoordinateSequence from './CoordinateSequence'
28465
28466         var CoordinateSequenceFactory = function CoordinateSequenceFactory () {};
28467
28468         CoordinateSequenceFactory.prototype.create = function create () {
28469           // if (arguments.length === 1) {
28470           // if (arguments[0] instanceof Array) {
28471           //   let coordinates = arguments[0]
28472           // } else if (hasInterface(arguments[0], CoordinateSequence)) {
28473           //   let coordSeq = arguments[0]
28474           // }
28475           // } else if (arguments.length === 2) {
28476           // let size = arguments[0]
28477           // let dimension = arguments[1]
28478           // }
28479         };
28480         CoordinateSequenceFactory.prototype.interfaces_ = function interfaces_ () {
28481           return []
28482         };
28483         CoordinateSequenceFactory.prototype.getClass = function getClass () {
28484           return CoordinateSequenceFactory
28485         };
28486
28487         var Location = function Location () {};
28488
28489         var staticAccessors$4 = { INTERIOR: { configurable: true },BOUNDARY: { configurable: true },EXTERIOR: { configurable: true },NONE: { configurable: true } };
28490
28491         Location.prototype.interfaces_ = function interfaces_ () {
28492           return []
28493         };
28494         Location.prototype.getClass = function getClass () {
28495           return Location
28496         };
28497         Location.toLocationSymbol = function toLocationSymbol (locationValue) {
28498           switch (locationValue) {
28499             case Location.EXTERIOR:
28500               return 'e'
28501             case Location.BOUNDARY:
28502               return 'b'
28503             case Location.INTERIOR:
28504               return 'i'
28505             case Location.NONE:
28506               return '-'
28507           }
28508           throw new IllegalArgumentException('Unknown location value: ' + locationValue)
28509         };
28510         staticAccessors$4.INTERIOR.get = function () { return 0 };
28511         staticAccessors$4.BOUNDARY.get = function () { return 1 };
28512         staticAccessors$4.EXTERIOR.get = function () { return 2 };
28513         staticAccessors$4.NONE.get = function () { return -1 };
28514
28515         Object.defineProperties( Location, staticAccessors$4 );
28516
28517         var hasInterface = function (o, i) {
28518           return o.interfaces_ && o.interfaces_().indexOf(i) > -1
28519         };
28520
28521         var MathUtil = function MathUtil () {};
28522
28523         var staticAccessors$5 = { LOG_10: { configurable: true } };
28524
28525         MathUtil.prototype.interfaces_ = function interfaces_ () {
28526           return []
28527         };
28528         MathUtil.prototype.getClass = function getClass () {
28529           return MathUtil
28530         };
28531         MathUtil.log10 = function log10 (x) {
28532           var ln = Math.log(x);
28533           if (Double.isInfinite(ln)) { return ln }
28534           if (Double.isNaN(ln)) { return ln }
28535           return ln / MathUtil.LOG_10
28536         };
28537         MathUtil.min = function min (v1, v2, v3, v4) {
28538           var min = v1;
28539           if (v2 < min) { min = v2; }
28540           if (v3 < min) { min = v3; }
28541           if (v4 < min) { min = v4; }
28542           return min
28543         };
28544         MathUtil.clamp = function clamp () {
28545           if (typeof arguments[2] === 'number' && (typeof arguments[0] === 'number' && typeof arguments[1] === 'number')) {
28546             var x = arguments[0];
28547             var min = arguments[1];
28548             var max = arguments[2];
28549             if (x < min) { return min }
28550             if (x > max) { return max }
28551             return x
28552           } else if (Number.isInteger(arguments[2]) && (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1]))) {
28553             var x$1 = arguments[0];
28554             var min$1 = arguments[1];
28555             var max$1 = arguments[2];
28556             if (x$1 < min$1) { return min$1 }
28557             if (x$1 > max$1) { return max$1 }
28558             return x$1
28559           }
28560         };
28561         MathUtil.wrap = function wrap (index, max) {
28562           if (index < 0) {
28563             return max - -index % max
28564           }
28565           return index % max
28566         };
28567         MathUtil.max = function max () {
28568           if (arguments.length === 3) {
28569             var v1 = arguments[0];
28570             var v2 = arguments[1];
28571             var v3 = arguments[2];
28572             var max = v1;
28573             if (v2 > max) { max = v2; }
28574             if (v3 > max) { max = v3; }
28575             return max
28576           } else if (arguments.length === 4) {
28577             var v1$1 = arguments[0];
28578             var v2$1 = arguments[1];
28579             var v3$1 = arguments[2];
28580             var v4 = arguments[3];
28581             var max$1 = v1$1;
28582             if (v2$1 > max$1) { max$1 = v2$1; }
28583             if (v3$1 > max$1) { max$1 = v3$1; }
28584             if (v4 > max$1) { max$1 = v4; }
28585             return max$1
28586           }
28587         };
28588         MathUtil.average = function average (x1, x2) {
28589           return (x1 + x2) / 2.0
28590         };
28591         staticAccessors$5.LOG_10.get = function () { return Math.log(10) };
28592
28593         Object.defineProperties( MathUtil, staticAccessors$5 );
28594
28595         var StringBuffer = function StringBuffer (str) {
28596           this.str = str;
28597         };
28598         StringBuffer.prototype.append = function append (e) {
28599           this.str += e;
28600         };
28601
28602         StringBuffer.prototype.setCharAt = function setCharAt (i, c) {
28603           this.str = this.str.substr(0, i) + c + this.str.substr(i + 1);
28604         };
28605
28606         StringBuffer.prototype.toString = function toString (e) {
28607           return this.str
28608         };
28609
28610         var Integer = function Integer (value) {
28611           this.value = value;
28612         };
28613         Integer.prototype.intValue = function intValue () {
28614           return this.value
28615         };
28616         Integer.prototype.compareTo = function compareTo (o) {
28617           if (this.value < o) { return -1 }
28618           if (this.value > o) { return 1 }
28619           return 0
28620         };
28621         Integer.isNaN = function isNaN (n) { return Number.isNaN(n) };
28622
28623         var Character = function Character () {};
28624
28625         Character.isWhitespace = function isWhitespace (c) { return ((c <= 32 && c >= 0) || c === 127) };
28626         Character.toUpperCase = function toUpperCase (c) { return c.toUpperCase() };
28627
28628         var DD = function DD () {
28629           this._hi = 0.0;
28630           this._lo = 0.0;
28631           if (arguments.length === 0) {
28632             this.init(0.0);
28633           } else if (arguments.length === 1) {
28634             if (typeof arguments[0] === 'number') {
28635               var x = arguments[0];
28636               this.init(x);
28637             } else if (arguments[0] instanceof DD) {
28638               var dd = arguments[0];
28639               this.init(dd);
28640             } else if (typeof arguments[0] === 'string') {
28641               var str = arguments[0];
28642               DD.call(this, DD.parse(str));
28643             }
28644           } else if (arguments.length === 2) {
28645             var hi = arguments[0];
28646             var lo = arguments[1];
28647             this.init(hi, lo);
28648           }
28649         };
28650
28651         var staticAccessors$7 = { PI: { configurable: true },TWO_PI: { configurable: true },PI_2: { configurable: true },E: { configurable: true },NaN: { configurable: true },EPS: { configurable: true },SPLIT: { configurable: true },MAX_PRINT_DIGITS: { configurable: true },TEN: { configurable: true },ONE: { configurable: true },SCI_NOT_EXPONENT_CHAR: { configurable: true },SCI_NOT_ZERO: { configurable: true } };
28652         DD.prototype.le = function le (y) {
28653           return (this._hi < y._hi || this._hi === y._hi) && this._lo <= y._lo
28654         };
28655         DD.prototype.extractSignificantDigits = function extractSignificantDigits (insertDecimalPoint, magnitude) {
28656           var y = this.abs();
28657           var mag = DD.magnitude(y._hi);
28658           var scale = DD.TEN.pow(mag);
28659           y = y.divide(scale);
28660           if (y.gt(DD.TEN)) {
28661             y = y.divide(DD.TEN);
28662             mag += 1;
28663           } else if (y.lt(DD.ONE)) {
28664             y = y.multiply(DD.TEN);
28665             mag -= 1;
28666           }
28667           var decimalPointPos = mag + 1;
28668           var buf = new StringBuffer();
28669           var numDigits = DD.MAX_PRINT_DIGITS - 1;
28670           for (var i = 0; i <= numDigits; i++) {
28671             if (insertDecimalPoint && i === decimalPointPos) {
28672               buf.append('.');
28673             }
28674             var digit = Math.trunc(y._hi);
28675             if (digit < 0) {
28676               break
28677             }
28678             var rebiasBy10 = false;
28679             var digitChar = 0;
28680             if (digit > 9) {
28681               rebiasBy10 = true;
28682               digitChar = '9';
28683             } else {
28684               digitChar = '0' + digit;
28685             }
28686             buf.append(digitChar);
28687             y = y.subtract(DD.valueOf(digit)).multiply(DD.TEN);
28688             if (rebiasBy10) { y.selfAdd(DD.TEN); }
28689             var continueExtractingDigits = true;
28690             var remMag = DD.magnitude(y._hi);
28691             if (remMag < 0 && Math.abs(remMag) >= numDigits - i) { continueExtractingDigits = false; }
28692             if (!continueExtractingDigits) { break }
28693           }
28694           magnitude[0] = mag;
28695           return buf.toString()
28696         };
28697         DD.prototype.sqr = function sqr () {
28698           return this.multiply(this)
28699         };
28700         DD.prototype.doubleValue = function doubleValue () {
28701           return this._hi + this._lo
28702         };
28703         DD.prototype.subtract = function subtract () {
28704           if (arguments[0] instanceof DD) {
28705             var y = arguments[0];
28706             return this.add(y.negate())
28707           } else if (typeof arguments[0] === 'number') {
28708             var y$1 = arguments[0];
28709             return this.add(-y$1)
28710           }
28711         };
28712         DD.prototype.equals = function equals () {
28713           if (arguments.length === 1) {
28714             var y = arguments[0];
28715             return this._hi === y._hi && this._lo === y._lo
28716           }
28717         };
28718         DD.prototype.isZero = function isZero () {
28719           return this._hi === 0.0 && this._lo === 0.0
28720         };
28721         DD.prototype.selfSubtract = function selfSubtract () {
28722           if (arguments[0] instanceof DD) {
28723             var y = arguments[0];
28724             if (this.isNaN()) { return this }
28725             return this.selfAdd(-y._hi, -y._lo)
28726           } else if (typeof arguments[0] === 'number') {
28727             var y$1 = arguments[0];
28728             if (this.isNaN()) { return this }
28729             return this.selfAdd(-y$1, 0.0)
28730           }
28731         };
28732         DD.prototype.getSpecialNumberString = function getSpecialNumberString () {
28733           if (this.isZero()) { return '0.0' }
28734           if (this.isNaN()) { return 'NaN ' }
28735           return null
28736         };
28737         DD.prototype.min = function min (x) {
28738           if (this.le(x)) {
28739             return this
28740           } else {
28741             return x
28742           }
28743         };
28744         DD.prototype.selfDivide = function selfDivide () {
28745           if (arguments.length === 1) {
28746             if (arguments[0] instanceof DD) {
28747               var y = arguments[0];
28748               return this.selfDivide(y._hi, y._lo)
28749             } else if (typeof arguments[0] === 'number') {
28750               var y$1 = arguments[0];
28751               return this.selfDivide(y$1, 0.0)
28752             }
28753           } else if (arguments.length === 2) {
28754             var yhi = arguments[0];
28755             var ylo = arguments[1];
28756             var hc = null;
28757             var tc = null;
28758             var hy = null;
28759             var ty = null;
28760             var C = null;
28761             var c = null;
28762             var U = null;
28763             var u = null;
28764             C = this._hi / yhi;
28765             c = DD.SPLIT * C;
28766             hc = c - C;
28767             u = DD.SPLIT * yhi;
28768             hc = c - hc;
28769             tc = C - hc;
28770             hy = u - yhi;
28771             U = C * yhi;
28772             hy = u - hy;
28773             ty = yhi - hy;
28774             u = hc * hy - U + hc * ty + tc * hy + tc * ty;
28775             c = (this._hi - U - u + this._lo - C * ylo) / yhi;
28776             u = C + c;
28777             this._hi = u;
28778             this._lo = C - u + c;
28779             return this
28780           }
28781         };
28782         DD.prototype.dump = function dump () {
28783           return 'DD<' + this._hi + ', ' + this._lo + '>'
28784         };
28785         DD.prototype.divide = function divide () {
28786           if (arguments[0] instanceof DD) {
28787             var y = arguments[0];
28788             var hc = null;
28789             var tc = null;
28790             var hy = null;
28791             var ty = null;
28792             var C = null;
28793             var c = null;
28794             var U = null;
28795             var u = null;
28796             C = this._hi / y._hi;
28797             c = DD.SPLIT * C;
28798             hc = c - C;
28799             u = DD.SPLIT * y._hi;
28800             hc = c - hc;
28801             tc = C - hc;
28802             hy = u - y._hi;
28803             U = C * y._hi;
28804             hy = u - hy;
28805             ty = y._hi - hy;
28806             u = hc * hy - U + hc * ty + tc * hy + tc * ty;
28807             c = (this._hi - U - u + this._lo - C * y._lo) / y._hi;
28808             u = C + c;
28809             var zhi = u;
28810             var zlo = C - u + c;
28811             return new DD(zhi, zlo)
28812           } else if (typeof arguments[0] === 'number') {
28813             var y$1 = arguments[0];
28814             if (Double.isNaN(y$1)) { return DD.createNaN() }
28815             return DD.copy(this).selfDivide(y$1, 0.0)
28816           }
28817         };
28818         DD.prototype.ge = function ge (y) {
28819           return (this._hi > y._hi || this._hi === y._hi) && this._lo >= y._lo
28820         };
28821         DD.prototype.pow = function pow (exp) {
28822           if (exp === 0.0) { return DD.valueOf(1.0) }
28823           var r = new DD(this);
28824           var s = DD.valueOf(1.0);
28825           var n = Math.abs(exp);
28826           if (n > 1) {
28827             while (n > 0) {
28828               if (n % 2 === 1) {
28829                 s.selfMultiply(r);
28830               }
28831               n /= 2;
28832               if (n > 0) { r = r.sqr(); }
28833             }
28834           } else {
28835             s = r;
28836           }
28837           if (exp < 0) { return s.reciprocal() }
28838           return s
28839         };
28840         DD.prototype.ceil = function ceil () {
28841           if (this.isNaN()) { return DD.NaN }
28842           var fhi = Math.ceil(this._hi);
28843           var flo = 0.0;
28844           if (fhi === this._hi) {
28845             flo = Math.ceil(this._lo);
28846           }
28847           return new DD(fhi, flo)
28848         };
28849         DD.prototype.compareTo = function compareTo (o) {
28850           var other = o;
28851           if (this._hi < other._hi) { return -1 }
28852           if (this._hi > other._hi) { return 1 }
28853           if (this._lo < other._lo) { return -1 }
28854           if (this._lo > other._lo) { return 1 }
28855           return 0
28856         };
28857         DD.prototype.rint = function rint () {
28858           if (this.isNaN()) { return this }
28859           var plus5 = this.add(0.5);
28860           return plus5.floor()
28861         };
28862         DD.prototype.setValue = function setValue () {
28863           if (arguments[0] instanceof DD) {
28864             var value = arguments[0];
28865             this.init(value);
28866             return this
28867           } else if (typeof arguments[0] === 'number') {
28868             var value$1 = arguments[0];
28869             this.init(value$1);
28870             return this
28871           }
28872         };
28873         DD.prototype.max = function max (x) {
28874           if (this.ge(x)) {
28875             return this
28876           } else {
28877             return x
28878           }
28879         };
28880         DD.prototype.sqrt = function sqrt () {
28881           if (this.isZero()) { return DD.valueOf(0.0) }
28882           if (this.isNegative()) {
28883             return DD.NaN
28884           }
28885           var x = 1.0 / Math.sqrt(this._hi);
28886           var ax = this._hi * x;
28887           var axdd = DD.valueOf(ax);
28888           var diffSq = this.subtract(axdd.sqr());
28889           var d2 = diffSq._hi * (x * 0.5);
28890           return axdd.add(d2)
28891         };
28892         DD.prototype.selfAdd = function selfAdd () {
28893           if (arguments.length === 1) {
28894             if (arguments[0] instanceof DD) {
28895               var y = arguments[0];
28896               return this.selfAdd(y._hi, y._lo)
28897             } else if (typeof arguments[0] === 'number') {
28898               var y$1 = arguments[0];
28899               var H = null;
28900               var h = null;
28901               var S = null;
28902               var s = null;
28903               var e = null;
28904               var f = null;
28905               S = this._hi + y$1;
28906               e = S - this._hi;
28907               s = S - e;
28908               s = y$1 - e + (this._hi - s);
28909               f = s + this._lo;
28910               H = S + f;
28911               h = f + (S - H);
28912               this._hi = H + h;
28913               this._lo = h + (H - this._hi);
28914               return this
28915             }
28916           } else if (arguments.length === 2) {
28917             var yhi = arguments[0];
28918             var ylo = arguments[1];
28919             var H$1 = null;
28920             var h$1 = null;
28921             var T = null;
28922             var t = null;
28923             var S$1 = null;
28924             var s$1 = null;
28925             var e$1 = null;
28926             var f$1 = null;
28927             S$1 = this._hi + yhi;
28928             T = this._lo + ylo;
28929             e$1 = S$1 - this._hi;
28930             f$1 = T - this._lo;
28931             s$1 = S$1 - e$1;
28932             t = T - f$1;
28933             s$1 = yhi - e$1 + (this._hi - s$1);
28934             t = ylo - f$1 + (this._lo - t);
28935             e$1 = s$1 + T;
28936             H$1 = S$1 + e$1;
28937             h$1 = e$1 + (S$1 - H$1);
28938             e$1 = t + h$1;
28939             var zhi = H$1 + e$1;
28940             var zlo = e$1 + (H$1 - zhi);
28941             this._hi = zhi;
28942             this._lo = zlo;
28943             return this
28944           }
28945         };
28946         DD.prototype.selfMultiply = function selfMultiply () {
28947           if (arguments.length === 1) {
28948             if (arguments[0] instanceof DD) {
28949               var y = arguments[0];
28950               return this.selfMultiply(y._hi, y._lo)
28951             } else if (typeof arguments[0] === 'number') {
28952               var y$1 = arguments[0];
28953               return this.selfMultiply(y$1, 0.0)
28954             }
28955           } else if (arguments.length === 2) {
28956             var yhi = arguments[0];
28957             var ylo = arguments[1];
28958             var hx = null;
28959             var tx = null;
28960             var hy = null;
28961             var ty = null;
28962             var C = null;
28963             var c = null;
28964             C = DD.SPLIT * this._hi;
28965             hx = C - this._hi;
28966             c = DD.SPLIT * yhi;
28967             hx = C - hx;
28968             tx = this._hi - hx;
28969             hy = c - yhi;
28970             C = this._hi * yhi;
28971             hy = c - hy;
28972             ty = yhi - hy;
28973             c = hx * hy - C + hx * ty + tx * hy + tx * ty + (this._hi * ylo + this._lo * yhi);
28974             var zhi = C + c;
28975             hx = C - zhi;
28976             var zlo = c + hx;
28977             this._hi = zhi;
28978             this._lo = zlo;
28979             return this
28980           }
28981         };
28982         DD.prototype.selfSqr = function selfSqr () {
28983           return this.selfMultiply(this)
28984         };
28985         DD.prototype.floor = function floor () {
28986           if (this.isNaN()) { return DD.NaN }
28987           var fhi = Math.floor(this._hi);
28988           var flo = 0.0;
28989           if (fhi === this._hi) {
28990             flo = Math.floor(this._lo);
28991           }
28992           return new DD(fhi, flo)
28993         };
28994         DD.prototype.negate = function negate () {
28995           if (this.isNaN()) { return this }
28996           return new DD(-this._hi, -this._lo)
28997         };
28998         DD.prototype.clone = function clone () {
28999           // try {
29000           // return null
29001           // } catch (ex) {
29002           // if (ex instanceof CloneNotSupportedException) {
29003           //   return null
29004           // } else throw ex
29005           // } finally {}
29006         };
29007         DD.prototype.multiply = function multiply () {
29008           if (arguments[0] instanceof DD) {
29009             var y = arguments[0];
29010             if (y.isNaN()) { return DD.createNaN() }
29011             return DD.copy(this).selfMultiply(y)
29012           } else if (typeof arguments[0] === 'number') {
29013             var y$1 = arguments[0];
29014             if (Double.isNaN(y$1)) { return DD.createNaN() }
29015             return DD.copy(this).selfMultiply(y$1, 0.0)
29016           }
29017         };
29018         DD.prototype.isNaN = function isNaN () {
29019           return Double.isNaN(this._hi)
29020         };
29021         DD.prototype.intValue = function intValue () {
29022           return Math.trunc(this._hi)
29023         };
29024         DD.prototype.toString = function toString () {
29025           var mag = DD.magnitude(this._hi);
29026           if (mag >= -3 && mag <= 20) { return this.toStandardNotation() }
29027           return this.toSciNotation()
29028         };
29029         DD.prototype.toStandardNotation = function toStandardNotation () {
29030           var specialStr = this.getSpecialNumberString();
29031           if (specialStr !== null) { return specialStr }
29032           var magnitude = new Array(1).fill(null);
29033           var sigDigits = this.extractSignificantDigits(true, magnitude);
29034           var decimalPointPos = magnitude[0] + 1;
29035           var num = sigDigits;
29036           if (sigDigits.charAt(0) === '.') {
29037             num = '0' + sigDigits;
29038           } else if (decimalPointPos < 0) {
29039             num = '0.' + DD.stringOfChar('0', -decimalPointPos) + sigDigits;
29040           } else if (sigDigits.indexOf('.') === -1) {
29041             var numZeroes = decimalPointPos - sigDigits.length;
29042             var zeroes = DD.stringOfChar('0', numZeroes);
29043             num = sigDigits + zeroes + '.0';
29044           }
29045           if (this.isNegative()) { return '-' + num }
29046           return num
29047         };
29048         DD.prototype.reciprocal = function reciprocal () {
29049           var hc = null;
29050           var tc = null;
29051           var hy = null;
29052           var ty = null;
29053           var C = null;
29054           var c = null;
29055           var U = null;
29056           var u = null;
29057           C = 1.0 / this._hi;
29058           c = DD.SPLIT * C;
29059           hc = c - C;
29060           u = DD.SPLIT * this._hi;
29061           hc = c - hc;
29062           tc = C - hc;
29063           hy = u - this._hi;
29064           U = C * this._hi;
29065           hy = u - hy;
29066           ty = this._hi - hy;
29067           u = hc * hy - U + hc * ty + tc * hy + tc * ty;
29068           c = (1.0 - U - u - C * this._lo) / this._hi;
29069           var zhi = C + c;
29070           var zlo = C - zhi + c;
29071           return new DD(zhi, zlo)
29072         };
29073         DD.prototype.toSciNotation = function toSciNotation () {
29074           if (this.isZero()) { return DD.SCI_NOT_ZERO }
29075           var specialStr = this.getSpecialNumberString();
29076           if (specialStr !== null) { return specialStr }
29077           var magnitude = new Array(1).fill(null);
29078           var digits = this.extractSignificantDigits(false, magnitude);
29079           var expStr = DD.SCI_NOT_EXPONENT_CHAR + magnitude[0];
29080           if (digits.charAt(0) === '0') {
29081             throw new Error('Found leading zero: ' + digits)
29082           }
29083           var trailingDigits = '';
29084           if (digits.length > 1) { trailingDigits = digits.substring(1); }
29085           var digitsWithDecimal = digits.charAt(0) + '.' + trailingDigits;
29086           if (this.isNegative()) { return '-' + digitsWithDecimal + expStr }
29087           return digitsWithDecimal + expStr
29088         };
29089         DD.prototype.abs = function abs () {
29090           if (this.isNaN()) { return DD.NaN }
29091           if (this.isNegative()) { return this.negate() }
29092           return new DD(this)
29093         };
29094         DD.prototype.isPositive = function isPositive () {
29095           return (this._hi > 0.0 || this._hi === 0.0) && this._lo > 0.0
29096         };
29097         DD.prototype.lt = function lt (y) {
29098           return (this._hi < y._hi || this._hi === y._hi) && this._lo < y._lo
29099         };
29100         DD.prototype.add = function add () {
29101           if (arguments[0] instanceof DD) {
29102             var y = arguments[0];
29103             return DD.copy(this).selfAdd(y)
29104           } else if (typeof arguments[0] === 'number') {
29105             var y$1 = arguments[0];
29106             return DD.copy(this).selfAdd(y$1)
29107           }
29108         };
29109         DD.prototype.init = function init () {
29110           if (arguments.length === 1) {
29111             if (typeof arguments[0] === 'number') {
29112               var x = arguments[0];
29113               this._hi = x;
29114               this._lo = 0.0;
29115             } else if (arguments[0] instanceof DD) {
29116               var dd = arguments[0];
29117               this._hi = dd._hi;
29118               this._lo = dd._lo;
29119             }
29120           } else if (arguments.length === 2) {
29121             var hi = arguments[0];
29122             var lo = arguments[1];
29123             this._hi = hi;
29124             this._lo = lo;
29125           }
29126         };
29127         DD.prototype.gt = function gt (y) {
29128           return (this._hi > y._hi || this._hi === y._hi) && this._lo > y._lo
29129         };
29130         DD.prototype.isNegative = function isNegative () {
29131           return (this._hi < 0.0 || this._hi === 0.0) && this._lo < 0.0
29132         };
29133         DD.prototype.trunc = function trunc () {
29134           if (this.isNaN()) { return DD.NaN }
29135           if (this.isPositive()) { return this.floor(); } else { return this.ceil() }
29136         };
29137         DD.prototype.signum = function signum () {
29138           if (this._hi > 0) { return 1 }
29139           if (this._hi < 0) { return -1 }
29140           if (this._lo > 0) { return 1 }
29141           if (this._lo < 0) { return -1 }
29142           return 0
29143         };
29144         DD.prototype.interfaces_ = function interfaces_ () {
29145           return [Serializable, Comparable, Clonable]
29146         };
29147         DD.prototype.getClass = function getClass () {
29148           return DD
29149         };
29150         DD.sqr = function sqr (x) {
29151           return DD.valueOf(x).selfMultiply(x)
29152         };
29153         DD.valueOf = function valueOf () {
29154           if (typeof arguments[0] === 'string') {
29155             var str = arguments[0];
29156             return DD.parse(str)
29157           } else if (typeof arguments[0] === 'number') {
29158             var x = arguments[0];
29159             return new DD(x)
29160           }
29161         };
29162         DD.sqrt = function sqrt (x) {
29163           return DD.valueOf(x).sqrt()
29164         };
29165         DD.parse = function parse (str) {
29166           var i = 0;
29167           var strlen = str.length;
29168           while (Character.isWhitespace(str.charAt(i))) { i++; }
29169           var isNegative = false;
29170           if (i < strlen) {
29171             var signCh = str.charAt(i);
29172             if (signCh === '-' || signCh === '+') {
29173               i++;
29174               if (signCh === '-') { isNegative = true; }
29175             }
29176           }
29177           var val = new DD();
29178           var numDigits = 0;
29179           var numBeforeDec = 0;
29180           var exp = 0;
29181           while (true) {
29182             if (i >= strlen) { break }
29183             var ch = str.charAt(i);
29184             i++;
29185             if (Character.isDigit(ch)) {
29186               var d = ch - '0';
29187               val.selfMultiply(DD.TEN);
29188               val.selfAdd(d);
29189               numDigits++;
29190               continue
29191             }
29192             if (ch === '.') {
29193               numBeforeDec = numDigits;
29194               continue
29195             }
29196             if (ch === 'e' || ch === 'E') {
29197               var expStr = str.substring(i);
29198               try {
29199                 exp = Integer.parseInt(expStr);
29200               } catch (ex) {
29201                 if (ex instanceof Error) {
29202                   throw new Error('Invalid exponent ' + expStr + ' in string ' + str)
29203                 } else { throw ex }
29204               } finally {}
29205               break
29206             }
29207             throw new Error("Unexpected character '" + ch + "' at position " + i + ' in string ' + str)
29208           }
29209           var val2 = val;
29210           var numDecPlaces = numDigits - numBeforeDec - exp;
29211           if (numDecPlaces === 0) {
29212             val2 = val;
29213           } else if (numDecPlaces > 0) {
29214             var scale = DD.TEN.pow(numDecPlaces);
29215             val2 = val.divide(scale);
29216           } else if (numDecPlaces < 0) {
29217             var scale$1 = DD.TEN.pow(-numDecPlaces);
29218             val2 = val.multiply(scale$1);
29219           }
29220           if (isNegative) {
29221             return val2.negate()
29222           }
29223           return val2
29224         };
29225         DD.createNaN = function createNaN () {
29226           return new DD(Double.NaN, Double.NaN)
29227         };
29228         DD.copy = function copy (dd) {
29229           return new DD(dd)
29230         };
29231         DD.magnitude = function magnitude (x) {
29232           var xAbs = Math.abs(x);
29233           var xLog10 = Math.log(xAbs) / Math.log(10);
29234           var xMag = Math.trunc(Math.floor(xLog10));
29235           var xApprox = Math.pow(10, xMag);
29236           if (xApprox * 10 <= xAbs) { xMag += 1; }
29237           return xMag
29238         };
29239         DD.stringOfChar = function stringOfChar (ch, len) {
29240           var buf = new StringBuffer();
29241           for (var i = 0; i < len; i++) {
29242             buf.append(ch);
29243           }
29244           return buf.toString()
29245         };
29246         staticAccessors$7.PI.get = function () { return new DD(3.141592653589793116e+00, 1.224646799147353207e-16) };
29247         staticAccessors$7.TWO_PI.get = function () { return new DD(6.283185307179586232e+00, 2.449293598294706414e-16) };
29248         staticAccessors$7.PI_2.get = function () { return new DD(1.570796326794896558e+00, 6.123233995736766036e-17) };
29249         staticAccessors$7.E.get = function () { return new DD(2.718281828459045091e+00, 1.445646891729250158e-16) };
29250         staticAccessors$7.NaN.get = function () { return new DD(Double.NaN, Double.NaN) };
29251         staticAccessors$7.EPS.get = function () { return 1.23259516440783e-32 };
29252         staticAccessors$7.SPLIT.get = function () { return 134217729.0 };
29253         staticAccessors$7.MAX_PRINT_DIGITS.get = function () { return 32 };
29254         staticAccessors$7.TEN.get = function () { return DD.valueOf(10.0) };
29255         staticAccessors$7.ONE.get = function () { return DD.valueOf(1.0) };
29256         staticAccessors$7.SCI_NOT_EXPONENT_CHAR.get = function () { return 'E' };
29257         staticAccessors$7.SCI_NOT_ZERO.get = function () { return '0.0E0' };
29258
29259         Object.defineProperties( DD, staticAccessors$7 );
29260
29261         var CGAlgorithmsDD = function CGAlgorithmsDD () {};
29262
29263         var staticAccessors$6 = { DP_SAFE_EPSILON: { configurable: true } };
29264
29265         CGAlgorithmsDD.prototype.interfaces_ = function interfaces_ () {
29266           return []
29267         };
29268         CGAlgorithmsDD.prototype.getClass = function getClass () {
29269           return CGAlgorithmsDD
29270         };
29271         CGAlgorithmsDD.orientationIndex = function orientationIndex (p1, p2, q) {
29272           var index = CGAlgorithmsDD.orientationIndexFilter(p1, p2, q);
29273           if (index <= 1) { return index }
29274           var dx1 = DD.valueOf(p2.x).selfAdd(-p1.x);
29275           var dy1 = DD.valueOf(p2.y).selfAdd(-p1.y);
29276           var dx2 = DD.valueOf(q.x).selfAdd(-p2.x);
29277           var dy2 = DD.valueOf(q.y).selfAdd(-p2.y);
29278           return dx1.selfMultiply(dy2).selfSubtract(dy1.selfMultiply(dx2)).signum()
29279         };
29280         CGAlgorithmsDD.signOfDet2x2 = function signOfDet2x2 (x1, y1, x2, y2) {
29281           var det = x1.multiply(y2).selfSubtract(y1.multiply(x2));
29282           return det.signum()
29283         };
29284         CGAlgorithmsDD.intersection = function intersection (p1, p2, q1, q2) {
29285           var denom1 = DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(DD.valueOf(p2.x).selfSubtract(p1.x));
29286           var denom2 = DD.valueOf(q2.x).selfSubtract(q1.x).selfMultiply(DD.valueOf(p2.y).selfSubtract(p1.y));
29287           var denom = denom1.subtract(denom2);
29288           var numx1 = DD.valueOf(q2.x).selfSubtract(q1.x).selfMultiply(DD.valueOf(p1.y).selfSubtract(q1.y));
29289           var numx2 = DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(DD.valueOf(p1.x).selfSubtract(q1.x));
29290           var numx = numx1.subtract(numx2);
29291           var fracP = numx.selfDivide(denom).doubleValue();
29292           var x = DD.valueOf(p1.x).selfAdd(DD.valueOf(p2.x).selfSubtract(p1.x).selfMultiply(fracP)).doubleValue();
29293           var numy1 = DD.valueOf(p2.x).selfSubtract(p1.x).selfMultiply(DD.valueOf(p1.y).selfSubtract(q1.y));
29294           var numy2 = DD.valueOf(p2.y).selfSubtract(p1.y).selfMultiply(DD.valueOf(p1.x).selfSubtract(q1.x));
29295           var numy = numy1.subtract(numy2);
29296           var fracQ = numy.selfDivide(denom).doubleValue();
29297           var y = DD.valueOf(q1.y).selfAdd(DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(fracQ)).doubleValue();
29298           return new Coordinate(x, y)
29299         };
29300         CGAlgorithmsDD.orientationIndexFilter = function orientationIndexFilter (pa, pb, pc) {
29301           var detsum = null;
29302           var detleft = (pa.x - pc.x) * (pb.y - pc.y);
29303           var detright = (pa.y - pc.y) * (pb.x - pc.x);
29304           var det = detleft - detright;
29305           if (detleft > 0.0) {
29306             if (detright <= 0.0) {
29307               return CGAlgorithmsDD.signum(det)
29308             } else {
29309               detsum = detleft + detright;
29310             }
29311           } else if (detleft < 0.0) {
29312             if (detright >= 0.0) {
29313               return CGAlgorithmsDD.signum(det)
29314             } else {
29315               detsum = -detleft - detright;
29316             }
29317           } else {
29318             return CGAlgorithmsDD.signum(det)
29319           }
29320           var errbound = CGAlgorithmsDD.DP_SAFE_EPSILON * detsum;
29321           if (det >= errbound || -det >= errbound) {
29322             return CGAlgorithmsDD.signum(det)
29323           }
29324           return 2
29325         };
29326         CGAlgorithmsDD.signum = function signum (x) {
29327           if (x > 0) { return 1 }
29328           if (x < 0) { return -1 }
29329           return 0
29330         };
29331         staticAccessors$6.DP_SAFE_EPSILON.get = function () { return 1e-15 };
29332
29333         Object.defineProperties( CGAlgorithmsDD, staticAccessors$6 );
29334
29335         var CoordinateSequence = function CoordinateSequence () {};
29336
29337         var staticAccessors$8 = { X: { configurable: true },Y: { configurable: true },Z: { configurable: true },M: { configurable: true } };
29338
29339         staticAccessors$8.X.get = function () { return 0 };
29340         staticAccessors$8.Y.get = function () { return 1 };
29341         staticAccessors$8.Z.get = function () { return 2 };
29342         staticAccessors$8.M.get = function () { return 3 };
29343         CoordinateSequence.prototype.setOrdinate = function setOrdinate (index, ordinateIndex, value) {};
29344         CoordinateSequence.prototype.size = function size () {};
29345         CoordinateSequence.prototype.getOrdinate = function getOrdinate (index, ordinateIndex) {};
29346         CoordinateSequence.prototype.getCoordinate = function getCoordinate () {};
29347         CoordinateSequence.prototype.getCoordinateCopy = function getCoordinateCopy (i) {};
29348         CoordinateSequence.prototype.getDimension = function getDimension () {};
29349         CoordinateSequence.prototype.getX = function getX (index) {};
29350         CoordinateSequence.prototype.clone = function clone () {};
29351         CoordinateSequence.prototype.expandEnvelope = function expandEnvelope (env) {};
29352         CoordinateSequence.prototype.copy = function copy () {};
29353         CoordinateSequence.prototype.getY = function getY (index) {};
29354         CoordinateSequence.prototype.toCoordinateArray = function toCoordinateArray () {};
29355         CoordinateSequence.prototype.interfaces_ = function interfaces_ () {
29356           return [Clonable]
29357         };
29358         CoordinateSequence.prototype.getClass = function getClass () {
29359           return CoordinateSequence
29360         };
29361
29362         Object.defineProperties( CoordinateSequence, staticAccessors$8 );
29363
29364         var Exception = function Exception () {};
29365
29366         var NotRepresentableException = (function (Exception$$1) {
29367           function NotRepresentableException () {
29368             Exception$$1.call(this, 'Projective point not representable on the Cartesian plane.');
29369           }
29370
29371           if ( Exception$$1 ) { NotRepresentableException.__proto__ = Exception$$1; }
29372           NotRepresentableException.prototype = Object.create( Exception$$1 && Exception$$1.prototype );
29373           NotRepresentableException.prototype.constructor = NotRepresentableException;
29374           NotRepresentableException.prototype.interfaces_ = function interfaces_ () {
29375             return []
29376           };
29377           NotRepresentableException.prototype.getClass = function getClass () {
29378             return NotRepresentableException
29379           };
29380
29381           return NotRepresentableException;
29382         }(Exception));
29383
29384         var System = function System () {};
29385
29386         System.arraycopy = function arraycopy (src, srcPos, dest, destPos, len) {
29387           var c = 0;
29388           for (var i = srcPos; i < srcPos + len; i++) {
29389             dest[destPos + c] = src[i];
29390             c++;
29391           }
29392         };
29393
29394         System.getProperty = function getProperty (name) {
29395           return {
29396             'line.separator': '\n'
29397           }[name]
29398         };
29399
29400         var HCoordinate = function HCoordinate () {
29401           this.x = null;
29402           this.y = null;
29403           this.w = null;
29404           if (arguments.length === 0) {
29405             this.x = 0.0;
29406             this.y = 0.0;
29407             this.w = 1.0;
29408           } else if (arguments.length === 1) {
29409             var p = arguments[0];
29410             this.x = p.x;
29411             this.y = p.y;
29412             this.w = 1.0;
29413           } else if (arguments.length === 2) {
29414             if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {
29415               var _x = arguments[0];
29416               var _y = arguments[1];
29417               this.x = _x;
29418               this.y = _y;
29419               this.w = 1.0;
29420             } else if (arguments[0] instanceof HCoordinate && arguments[1] instanceof HCoordinate) {
29421               var p1 = arguments[0];
29422               var p2 = arguments[1];
29423               this.x = p1.y * p2.w - p2.y * p1.w;
29424               this.y = p2.x * p1.w - p1.x * p2.w;
29425               this.w = p1.x * p2.y - p2.x * p1.y;
29426             } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {
29427               var p1$1 = arguments[0];
29428               var p2$1 = arguments[1];
29429               this.x = p1$1.y - p2$1.y;
29430               this.y = p2$1.x - p1$1.x;
29431               this.w = p1$1.x * p2$1.y - p2$1.x * p1$1.y;
29432             }
29433           } else if (arguments.length === 3) {
29434             var _x$1 = arguments[0];
29435             var _y$1 = arguments[1];
29436             var _w = arguments[2];
29437             this.x = _x$1;
29438             this.y = _y$1;
29439             this.w = _w;
29440           } else if (arguments.length === 4) {
29441             var p1$2 = arguments[0];
29442             var p2$2 = arguments[1];
29443             var q1 = arguments[2];
29444             var q2 = arguments[3];
29445             var px = p1$2.y - p2$2.y;
29446             var py = p2$2.x - p1$2.x;
29447             var pw = p1$2.x * p2$2.y - p2$2.x * p1$2.y;
29448             var qx = q1.y - q2.y;
29449             var qy = q2.x - q1.x;
29450             var qw = q1.x * q2.y - q2.x * q1.y;
29451             this.x = py * qw - qy * pw;
29452             this.y = qx * pw - px * qw;
29453             this.w = px * qy - qx * py;
29454           }
29455         };
29456         HCoordinate.prototype.getY = function getY () {
29457           var a = this.y / this.w;
29458           if (Double.isNaN(a) || Double.isInfinite(a)) {
29459             throw new NotRepresentableException()
29460           }
29461           return a
29462         };
29463         HCoordinate.prototype.getX = function getX () {
29464           var a = this.x / this.w;
29465           if (Double.isNaN(a) || Double.isInfinite(a)) {
29466             throw new NotRepresentableException()
29467           }
29468           return a
29469         };
29470         HCoordinate.prototype.getCoordinate = function getCoordinate () {
29471           var p = new Coordinate();
29472           p.x = this.getX();
29473           p.y = this.getY();
29474           return p
29475         };
29476         HCoordinate.prototype.interfaces_ = function interfaces_ () {
29477           return []
29478         };
29479         HCoordinate.prototype.getClass = function getClass () {
29480           return HCoordinate
29481         };
29482         HCoordinate.intersection = function intersection (p1, p2, q1, q2) {
29483           var px = p1.y - p2.y;
29484           var py = p2.x - p1.x;
29485           var pw = p1.x * p2.y - p2.x * p1.y;
29486           var qx = q1.y - q2.y;
29487           var qy = q2.x - q1.x;
29488           var qw = q1.x * q2.y - q2.x * q1.y;
29489           var x = py * qw - qy * pw;
29490           var y = qx * pw - px * qw;
29491           var w = px * qy - qx * py;
29492           var xInt = x / w;
29493           var yInt = y / w;
29494           if (Double.isNaN(xInt) || (Double.isInfinite(xInt) || Double.isNaN(yInt)) || Double.isInfinite(yInt)) {
29495             throw new NotRepresentableException()
29496           }
29497           return new Coordinate(xInt, yInt)
29498         };
29499
29500         var Envelope = function Envelope () {
29501           this._minx = null;
29502           this._maxx = null;
29503           this._miny = null;
29504           this._maxy = null;
29505           if (arguments.length === 0) {
29506             this.init();
29507           } else if (arguments.length === 1) {
29508             if (arguments[0] instanceof Coordinate) {
29509               var p = arguments[0];
29510               this.init(p.x, p.x, p.y, p.y);
29511             } else if (arguments[0] instanceof Envelope) {
29512               var env = arguments[0];
29513               this.init(env);
29514             }
29515           } else if (arguments.length === 2) {
29516             var p1 = arguments[0];
29517             var p2 = arguments[1];
29518             this.init(p1.x, p2.x, p1.y, p2.y);
29519           } else if (arguments.length === 4) {
29520             var x1 = arguments[0];
29521             var x2 = arguments[1];
29522             var y1 = arguments[2];
29523             var y2 = arguments[3];
29524             this.init(x1, x2, y1, y2);
29525           }
29526         };
29527
29528         var staticAccessors$9 = { serialVersionUID: { configurable: true } };
29529         Envelope.prototype.getArea = function getArea () {
29530           return this.getWidth() * this.getHeight()
29531         };
29532         Envelope.prototype.equals = function equals (other) {
29533           if (!(other instanceof Envelope)) {
29534             return false
29535           }
29536           var otherEnvelope = other;
29537           if (this.isNull()) {
29538             return otherEnvelope.isNull()
29539           }
29540           return this._maxx === otherEnvelope.getMaxX() && this._maxy === otherEnvelope.getMaxY() && this._minx === otherEnvelope.getMinX() && this._miny === otherEnvelope.getMinY()
29541         };
29542         Envelope.prototype.intersection = function intersection (env) {
29543           if (this.isNull() || env.isNull() || !this.intersects(env)) { return new Envelope() }
29544           var intMinX = this._minx > env._minx ? this._minx : env._minx;
29545           var intMinY = this._miny > env._miny ? this._miny : env._miny;
29546           var intMaxX = this._maxx < env._maxx ? this._maxx : env._maxx;
29547           var intMaxY = this._maxy < env._maxy ? this._maxy : env._maxy;
29548           return new Envelope(intMinX, intMaxX, intMinY, intMaxY)
29549         };
29550         Envelope.prototype.isNull = function isNull () {
29551           return this._maxx < this._minx
29552         };
29553         Envelope.prototype.getMaxX = function getMaxX () {
29554           return this._maxx
29555         };
29556         Envelope.prototype.covers = function covers () {
29557           if (arguments.length === 1) {
29558             if (arguments[0] instanceof Coordinate) {
29559               var p = arguments[0];
29560               return this.covers(p.x, p.y)
29561             } else if (arguments[0] instanceof Envelope) {
29562               var other = arguments[0];
29563               if (this.isNull() || other.isNull()) {
29564                 return false
29565               }
29566               return other.getMinX() >= this._minx && other.getMaxX() <= this._maxx && other.getMinY() >= this._miny && other.getMaxY() <= this._maxy
29567             }
29568           } else if (arguments.length === 2) {
29569             var x = arguments[0];
29570             var y = arguments[1];
29571             if (this.isNull()) { return false }
29572             return x >= this._minx && x <= this._maxx && y >= this._miny && y <= this._maxy
29573           }
29574         };
29575         Envelope.prototype.intersects = function intersects () {
29576           if (arguments.length === 1) {
29577             if (arguments[0] instanceof Envelope) {
29578               var other = arguments[0];
29579               if (this.isNull() || other.isNull()) {
29580                 return false
29581               }
29582               return !(other._minx > this._maxx || other._maxx < this._minx || other._miny > this._maxy || other._maxy < this._miny)
29583             } else if (arguments[0] instanceof Coordinate) {
29584               var p = arguments[0];
29585               return this.intersects(p.x, p.y)
29586             }
29587           } else if (arguments.length === 2) {
29588             var x = arguments[0];
29589             var y = arguments[1];
29590             if (this.isNull()) { return false }
29591             return !(x > this._maxx || x < this._minx || y > this._maxy || y < this._miny)
29592           }
29593         };
29594         Envelope.prototype.getMinY = function getMinY () {
29595           return this._miny
29596         };
29597         Envelope.prototype.getMinX = function getMinX () {
29598           return this._minx
29599         };
29600         Envelope.prototype.expandToInclude = function expandToInclude () {
29601           if (arguments.length === 1) {
29602             if (arguments[0] instanceof Coordinate) {
29603               var p = arguments[0];
29604               this.expandToInclude(p.x, p.y);
29605             } else if (arguments[0] instanceof Envelope) {
29606               var other = arguments[0];
29607               if (other.isNull()) {
29608                 return null
29609               }
29610               if (this.isNull()) {
29611                 this._minx = other.getMinX();
29612                 this._maxx = other.getMaxX();
29613                 this._miny = other.getMinY();
29614                 this._maxy = other.getMaxY();
29615               } else {
29616                 if (other._minx < this._minx) {
29617                   this._minx = other._minx;
29618                 }
29619                 if (other._maxx > this._maxx) {
29620                   this._maxx = other._maxx;
29621                 }
29622                 if (other._miny < this._miny) {
29623                   this._miny = other._miny;
29624                 }
29625                 if (other._maxy > this._maxy) {
29626                   this._maxy = other._maxy;
29627                 }
29628               }
29629             }
29630           } else if (arguments.length === 2) {
29631             var x = arguments[0];
29632             var y = arguments[1];
29633             if (this.isNull()) {
29634               this._minx = x;
29635               this._maxx = x;
29636               this._miny = y;
29637               this._maxy = y;
29638             } else {
29639               if (x < this._minx) {
29640                 this._minx = x;
29641               }
29642               if (x > this._maxx) {
29643                 this._maxx = x;
29644               }
29645               if (y < this._miny) {
29646                 this._miny = y;
29647               }
29648               if (y > this._maxy) {
29649                 this._maxy = y;
29650               }
29651             }
29652           }
29653         };
29654         Envelope.prototype.minExtent = function minExtent () {
29655           if (this.isNull()) { return 0.0 }
29656           var w = this.getWidth();
29657           var h = this.getHeight();
29658           if (w < h) { return w }
29659           return h
29660         };
29661         Envelope.prototype.getWidth = function getWidth () {
29662           if (this.isNull()) {
29663             return 0
29664           }
29665           return this._maxx - this._minx
29666         };
29667         Envelope.prototype.compareTo = function compareTo (o) {
29668           var env = o;
29669           if (this.isNull()) {
29670             if (env.isNull()) { return 0 }
29671             return -1
29672           } else {
29673             if (env.isNull()) { return 1 }
29674           }
29675           if (this._minx < env._minx) { return -1 }
29676           if (this._minx > env._minx) { return 1 }
29677           if (this._miny < env._miny) { return -1 }
29678           if (this._miny > env._miny) { return 1 }
29679           if (this._maxx < env._maxx) { return -1 }
29680           if (this._maxx > env._maxx) { return 1 }
29681           if (this._maxy < env._maxy) { return -1 }
29682           if (this._maxy > env._maxy) { return 1 }
29683           return 0
29684         };
29685         Envelope.prototype.translate = function translate (transX, transY) {
29686           if (this.isNull()) {
29687             return null
29688           }
29689           this.init(this.getMinX() + transX, this.getMaxX() + transX, this.getMinY() + transY, this.getMaxY() + transY);
29690         };
29691         Envelope.prototype.toString = function toString () {
29692           return 'Env[' + this._minx + ' : ' + this._maxx + ', ' + this._miny + ' : ' + this._maxy + ']'
29693         };
29694         Envelope.prototype.setToNull = function setToNull () {
29695           this._minx = 0;
29696           this._maxx = -1;
29697           this._miny = 0;
29698           this._maxy = -1;
29699         };
29700         Envelope.prototype.getHeight = function getHeight () {
29701           if (this.isNull()) {
29702             return 0
29703           }
29704           return this._maxy - this._miny
29705         };
29706         Envelope.prototype.maxExtent = function maxExtent () {
29707           if (this.isNull()) { return 0.0 }
29708           var w = this.getWidth();
29709           var h = this.getHeight();
29710           if (w > h) { return w }
29711           return h
29712         };
29713         Envelope.prototype.expandBy = function expandBy () {
29714           if (arguments.length === 1) {
29715             var distance = arguments[0];
29716             this.expandBy(distance, distance);
29717           } else if (arguments.length === 2) {
29718             var deltaX = arguments[0];
29719             var deltaY = arguments[1];
29720             if (this.isNull()) { return null }
29721             this._minx -= deltaX;
29722             this._maxx += deltaX;
29723             this._miny -= deltaY;
29724             this._maxy += deltaY;
29725             if (this._minx > this._maxx || this._miny > this._maxy) { this.setToNull(); }
29726           }
29727         };
29728         Envelope.prototype.contains = function contains () {
29729           if (arguments.length === 1) {
29730             if (arguments[0] instanceof Envelope) {
29731               var other = arguments[0];
29732               return this.covers(other)
29733             } else if (arguments[0] instanceof Coordinate) {
29734               var p = arguments[0];
29735               return this.covers(p)
29736             }
29737           } else if (arguments.length === 2) {
29738             var x = arguments[0];
29739             var y = arguments[1];
29740             return this.covers(x, y)
29741           }
29742         };
29743         Envelope.prototype.centre = function centre () {
29744           if (this.isNull()) { return null }
29745           return new Coordinate((this.getMinX() + this.getMaxX()) / 2.0, (this.getMinY() + this.getMaxY()) / 2.0)
29746         };
29747         Envelope.prototype.init = function init () {
29748           if (arguments.length === 0) {
29749             this.setToNull();
29750           } else if (arguments.length === 1) {
29751             if (arguments[0] instanceof Coordinate) {
29752               var p = arguments[0];
29753               this.init(p.x, p.x, p.y, p.y);
29754             } else if (arguments[0] instanceof Envelope) {
29755               var env = arguments[0];
29756               this._minx = env._minx;
29757               this._maxx = env._maxx;
29758               this._miny = env._miny;
29759               this._maxy = env._maxy;
29760             }
29761           } else if (arguments.length === 2) {
29762             var p1 = arguments[0];
29763             var p2 = arguments[1];
29764             this.init(p1.x, p2.x, p1.y, p2.y);
29765           } else if (arguments.length === 4) {
29766             var x1 = arguments[0];
29767             var x2 = arguments[1];
29768             var y1 = arguments[2];
29769             var y2 = arguments[3];
29770             if (x1 < x2) {
29771               this._minx = x1;
29772               this._maxx = x2;
29773             } else {
29774               this._minx = x2;
29775               this._maxx = x1;
29776             }
29777             if (y1 < y2) {
29778               this._miny = y1;
29779               this._maxy = y2;
29780             } else {
29781               this._miny = y2;
29782               this._maxy = y1;
29783             }
29784           }
29785         };
29786         Envelope.prototype.getMaxY = function getMaxY () {
29787           return this._maxy
29788         };
29789         Envelope.prototype.distance = function distance (env) {
29790           if (this.intersects(env)) { return 0 }
29791           var dx = 0.0;
29792           if (this._maxx < env._minx) { dx = env._minx - this._maxx; } else if (this._minx > env._maxx) { dx = this._minx - env._maxx; }
29793           var dy = 0.0;
29794           if (this._maxy < env._miny) { dy = env._miny - this._maxy; } else if (this._miny > env._maxy) { dy = this._miny - env._maxy; }
29795           if (dx === 0.0) { return dy }
29796           if (dy === 0.0) { return dx }
29797           return Math.sqrt(dx * dx + dy * dy)
29798         };
29799         Envelope.prototype.hashCode = function hashCode () {
29800           var result = 17;
29801           result = 37 * result + Coordinate.hashCode(this._minx);
29802           result = 37 * result + Coordinate.hashCode(this._maxx);
29803           result = 37 * result + Coordinate.hashCode(this._miny);
29804           result = 37 * result + Coordinate.hashCode(this._maxy);
29805           return result
29806         };
29807         Envelope.prototype.interfaces_ = function interfaces_ () {
29808           return [Comparable, Serializable]
29809         };
29810         Envelope.prototype.getClass = function getClass () {
29811           return Envelope
29812         };
29813         Envelope.intersects = function intersects () {
29814           if (arguments.length === 3) {
29815             var p1 = arguments[0];
29816             var p2 = arguments[1];
29817             var q = arguments[2];
29818             if (q.x >= (p1.x < p2.x ? p1.x : p2.x) && q.x <= (p1.x > p2.x ? p1.x : p2.x) && (q.y >= (p1.y < p2.y ? p1.y : p2.y) && q.y <= (p1.y > p2.y ? p1.y : p2.y))) {
29819               return true
29820             }
29821             return false
29822           } else if (arguments.length === 4) {
29823             var p1$1 = arguments[0];
29824             var p2$1 = arguments[1];
29825             var q1 = arguments[2];
29826             var q2 = arguments[3];
29827             var minq = Math.min(q1.x, q2.x);
29828             var maxq = Math.max(q1.x, q2.x);
29829             var minp = Math.min(p1$1.x, p2$1.x);
29830             var maxp = Math.max(p1$1.x, p2$1.x);
29831             if (minp > maxq) { return false }
29832             if (maxp < minq) { return false }
29833             minq = Math.min(q1.y, q2.y);
29834             maxq = Math.max(q1.y, q2.y);
29835             minp = Math.min(p1$1.y, p2$1.y);
29836             maxp = Math.max(p1$1.y, p2$1.y);
29837             if (minp > maxq) { return false }
29838             if (maxp < minq) { return false }
29839             return true
29840           }
29841         };
29842         staticAccessors$9.serialVersionUID.get = function () { return 5873921885273102420 };
29843
29844         Object.defineProperties( Envelope, staticAccessors$9 );
29845
29846         var regExes = {
29847           'typeStr': /^\s*(\w+)\s*\(\s*(.*)\s*\)\s*$/,
29848           'emptyTypeStr': /^\s*(\w+)\s*EMPTY\s*$/,
29849           'spaces': /\s+/,
29850           'parenComma': /\)\s*,\s*\(/,
29851           'doubleParenComma': /\)\s*\)\s*,\s*\(\s*\(/, // can't use {2} here
29852           'trimParens': /^\s*\(?(.*?)\)?\s*$/
29853         };
29854
29855         /**
29856          * Class for reading and writing Well-Known Text.
29857          *
29858          * NOTE: Adapted from OpenLayers 2.11 implementation.
29859          */
29860
29861         /** Create a new parser for WKT
29862          *
29863          * @param {GeometryFactory} geometryFactory
29864          * @return An instance of WKTParser.
29865          * @constructor
29866          * @private
29867          */
29868         var WKTParser = function WKTParser (geometryFactory) {
29869           this.geometryFactory = geometryFactory || new GeometryFactory();
29870         };
29871         /**
29872          * Deserialize a WKT string and return a geometry. Supports WKT for POINT,
29873          * MULTIPOINT, LINESTRING, LINEARRING, MULTILINESTRING, POLYGON, MULTIPOLYGON,
29874          * and GEOMETRYCOLLECTION.
29875          *
29876          * @param {String} wkt A WKT string.
29877          * @return {Geometry} A geometry instance.
29878          * @private
29879          */
29880         WKTParser.prototype.read = function read (wkt) {
29881           var geometry, type, str;
29882           wkt = wkt.replace(/[\n\r]/g, ' ');
29883           var matches = regExes.typeStr.exec(wkt);
29884           if (wkt.search('EMPTY') !== -1) {
29885             matches = regExes.emptyTypeStr.exec(wkt);
29886             matches[2] = undefined;
29887           }
29888           if (matches) {
29889             type = matches[1].toLowerCase();
29890             str = matches[2];
29891             if (parse$1[type]) {
29892               geometry = parse$1[type].apply(this, [str]);
29893             }
29894           }
29895
29896           if (geometry === undefined) { throw new Error('Could not parse WKT ' + wkt) }
29897
29898           return geometry
29899         };
29900
29901         /**
29902          * Serialize a geometry into a WKT string.
29903          *
29904          * @param {Geometry} geometry A feature or array of features.
29905          * @return {String} The WKT string representation of the input geometries.
29906          * @private
29907          */
29908         WKTParser.prototype.write = function write (geometry) {
29909           return this.extractGeometry(geometry)
29910         };
29911
29912         /**
29913          * Entry point to construct the WKT for a single Geometry object.
29914          *
29915          * @param {Geometry} geometry
29916          * @return {String} A WKT string of representing the geometry.
29917          * @private
29918          */
29919         WKTParser.prototype.extractGeometry = function extractGeometry (geometry) {
29920           var type = geometry.getGeometryType().toLowerCase();
29921           if (!extract$1[type]) {
29922             return null
29923           }
29924           var wktType = type.toUpperCase();
29925           var data;
29926           if (geometry.isEmpty()) {
29927             data = wktType + ' EMPTY';
29928           } else {
29929             data = wktType + '(' + extract$1[type].apply(this, [geometry]) + ')';
29930           }
29931           return data
29932         };
29933
29934         /**
29935          * Object with properties corresponding to the geometry types. Property values
29936          * are functions that do the actual data extraction.
29937          * @private
29938          */
29939         var extract$1 = {
29940           coordinate: function coordinate (coordinate$1) {
29941             return coordinate$1.x + ' ' + coordinate$1.y
29942           },
29943
29944           /**
29945            * Return a space delimited string of point coordinates.
29946            *
29947            * @param {Point}
29948            *          point
29949            * @return {String} A string of coordinates representing the point.
29950            */
29951           point: function point (point$1) {
29952             return extract$1.coordinate.call(this, point$1._coordinates._coordinates[0])
29953           },
29954
29955           /**
29956            * Return a comma delimited string of point coordinates from a multipoint.
29957            *
29958            * @param {MultiPoint}
29959            *          multipoint
29960            * @return {String} A string of point coordinate strings representing the
29961            *         multipoint.
29962            */
29963           multipoint: function multipoint (multipoint$1) {
29964             var this$1 = this;
29965
29966             var array = [];
29967             for (var i = 0, len = multipoint$1._geometries.length; i < len; ++i) {
29968               array.push('(' + extract$1.point.apply(this$1, [multipoint$1._geometries[i]]) + ')');
29969             }
29970             return array.join(',')
29971           },
29972
29973           /**
29974            * Return a comma delimited string of point coordinates from a line.
29975            *
29976            * @param {LineString} linestring
29977            * @return {String} A string of point coordinate strings representing the linestring.
29978            */
29979           linestring: function linestring (linestring$1) {
29980             var this$1 = this;
29981
29982             var array = [];
29983             for (var i = 0, len = linestring$1._points._coordinates.length; i < len; ++i) {
29984               array.push(extract$1.coordinate.apply(this$1, [linestring$1._points._coordinates[i]]));
29985             }
29986             return array.join(',')
29987           },
29988
29989           linearring: function linearring (linearring$1) {
29990             var this$1 = this;
29991
29992             var array = [];
29993             for (var i = 0, len = linearring$1._points._coordinates.length; i < len; ++i) {
29994               array.push(extract$1.coordinate.apply(this$1, [linearring$1._points._coordinates[i]]));
29995             }
29996             return array.join(',')
29997           },
29998
29999           /**
30000            * Return a comma delimited string of linestring strings from a
30001            * multilinestring.
30002            *
30003            * @param {MultiLineString} multilinestring
30004            * @return {String} A string of of linestring strings representing the multilinestring.
30005            */
30006           multilinestring: function multilinestring (multilinestring$1) {
30007             var this$1 = this;
30008
30009             var array = [];
30010             for (var i = 0, len = multilinestring$1._geometries.length; i < len; ++i) {
30011               array.push('(' +
30012                 extract$1.linestring.apply(this$1, [multilinestring$1._geometries[i]]) +
30013                 ')');
30014             }
30015             return array.join(',')
30016           },
30017
30018           /**
30019            * Return a comma delimited string of linear ring arrays from a polygon.
30020            *
30021            * @param {Polygon} polygon
30022            * @return {String} An array of linear ring arrays representing the polygon.
30023            */
30024           polygon: function polygon (polygon$1) {
30025             var this$1 = this;
30026
30027             var array = [];
30028             array.push('(' + extract$1.linestring.apply(this, [polygon$1._shell]) + ')');
30029             for (var i = 0, len = polygon$1._holes.length; i < len; ++i) {
30030               array.push('(' + extract$1.linestring.apply(this$1, [polygon$1._holes[i]]) + ')');
30031             }
30032             return array.join(',')
30033           },
30034
30035           /**
30036            * Return an array of polygon arrays from a multipolygon.
30037            *
30038            * @param {MultiPolygon} multipolygon
30039            * @return {String} An array of polygon arrays representing the multipolygon.
30040            */
30041           multipolygon: function multipolygon (multipolygon$1) {
30042             var this$1 = this;
30043
30044             var array = [];
30045             for (var i = 0, len = multipolygon$1._geometries.length; i < len; ++i) {
30046               array.push('(' + extract$1.polygon.apply(this$1, [multipolygon$1._geometries[i]]) + ')');
30047             }
30048             return array.join(',')
30049           },
30050
30051           /**
30052            * Return the WKT portion between 'GEOMETRYCOLLECTION(' and ')' for an
30053            * geometrycollection.
30054            *
30055            * @param {GeometryCollection} collection
30056            * @return {String} internal WKT representation of the collection.
30057            */
30058           geometrycollection: function geometrycollection (collection) {
30059             var this$1 = this;
30060
30061             var array = [];
30062             for (var i = 0, len = collection._geometries.length; i < len; ++i) {
30063               array.push(this$1.extractGeometry(collection._geometries[i]));
30064             }
30065             return array.join(',')
30066           }
30067         };
30068
30069         /**
30070          * Object with properties corresponding to the geometry types. Property values
30071          * are functions that do the actual parsing.
30072          * @private
30073          */
30074         var parse$1 = {
30075           /**
30076            * Return point geometry given a point WKT fragment.
30077            *
30078            * @param {String} str A WKT fragment representing the point.
30079            * @return {Point} A point geometry.
30080            * @private
30081            */
30082           point: function point (str) {
30083             if (str === undefined) {
30084               return this.geometryFactory.createPoint()
30085             }
30086
30087             var coords = str.trim().split(regExes.spaces);
30088             return this.geometryFactory.createPoint(new Coordinate(Number.parseFloat(coords[0]),
30089               Number.parseFloat(coords[1])))
30090           },
30091
30092           /**
30093            * Return a multipoint geometry given a multipoint WKT fragment.
30094            *
30095            * @param {String} str A WKT fragment representing the multipoint.
30096            * @return {Point} A multipoint feature.
30097            * @private
30098            */
30099           multipoint: function multipoint (str) {
30100             var this$1 = this;
30101
30102             if (str === undefined) {
30103               return this.geometryFactory.createMultiPoint()
30104             }
30105
30106             var point;
30107             var points = str.trim().split(',');
30108             var components = [];
30109             for (var i = 0, len = points.length; i < len; ++i) {
30110               point = points[i].replace(regExes.trimParens, '$1');
30111               components.push(parse$1.point.apply(this$1, [point]));
30112             }
30113             return this.geometryFactory.createMultiPoint(components)
30114           },
30115
30116           /**
30117            * Return a linestring geometry given a linestring WKT fragment.
30118            *
30119            * @param {String} str A WKT fragment representing the linestring.
30120            * @return {LineString} A linestring geometry.
30121            * @private
30122            */
30123           linestring: function linestring (str) {
30124             if (str === undefined) {
30125               return this.geometryFactory.createLineString()
30126             }
30127
30128             var points = str.trim().split(',');
30129             var components = [];
30130             var coords;
30131             for (var i = 0, len = points.length; i < len; ++i) {
30132               coords = points[i].trim().split(regExes.spaces);
30133               components.push(new Coordinate(Number.parseFloat(coords[0]), Number.parseFloat(coords[1])));
30134             }
30135             return this.geometryFactory.createLineString(components)
30136           },
30137
30138           /**
30139            * Return a linearring geometry given a linearring WKT fragment.
30140            *
30141            * @param {String} str A WKT fragment representing the linearring.
30142            * @return {LinearRing} A linearring geometry.
30143            * @private
30144            */
30145           linearring: function linearring (str) {
30146             if (str === undefined) {
30147               return this.geometryFactory.createLinearRing()
30148             }
30149
30150             var points = str.trim().split(',');
30151             var components = [];
30152             var coords;
30153             for (var i = 0, len = points.length; i < len; ++i) {
30154               coords = points[i].trim().split(regExes.spaces);
30155               components.push(new Coordinate(Number.parseFloat(coords[0]), Number.parseFloat(coords[1])));
30156             }
30157             return this.geometryFactory.createLinearRing(components)
30158           },
30159
30160           /**
30161            * Return a multilinestring geometry given a multilinestring WKT fragment.
30162            *
30163            * @param {String} str A WKT fragment representing the multilinestring.
30164            * @return {MultiLineString} A multilinestring geometry.
30165            * @private
30166            */
30167           multilinestring: function multilinestring (str) {
30168             var this$1 = this;
30169
30170             if (str === undefined) {
30171               return this.geometryFactory.createMultiLineString()
30172             }
30173
30174             var line;
30175             var lines = str.trim().split(regExes.parenComma);
30176             var components = [];
30177             for (var i = 0, len = lines.length; i < len; ++i) {
30178               line = lines[i].replace(regExes.trimParens, '$1');
30179               components.push(parse$1.linestring.apply(this$1, [line]));
30180             }
30181             return this.geometryFactory.createMultiLineString(components)
30182           },
30183
30184           /**
30185            * Return a polygon geometry given a polygon WKT fragment.
30186            *
30187            * @param {String} str A WKT fragment representing the polygon.
30188            * @return {Polygon} A polygon geometry.
30189            * @private
30190            */
30191           polygon: function polygon (str) {
30192             var this$1 = this;
30193
30194             if (str === undefined) {
30195               return this.geometryFactory.createPolygon()
30196             }
30197
30198             var ring, linestring, linearring;
30199             var rings = str.trim().split(regExes.parenComma);
30200             var shell;
30201             var holes = [];
30202             for (var i = 0, len = rings.length; i < len; ++i) {
30203               ring = rings[i].replace(regExes.trimParens, '$1');
30204               linestring = parse$1.linestring.apply(this$1, [ring]);
30205               linearring = this$1.geometryFactory.createLinearRing(linestring._points);
30206               if (i === 0) {
30207                 shell = linearring;
30208               } else {
30209                 holes.push(linearring);
30210               }
30211             }
30212             return this.geometryFactory.createPolygon(shell, holes)
30213           },
30214
30215           /**
30216            * Return a multipolygon geometry given a multipolygon WKT fragment.
30217            *
30218            * @param {String} str A WKT fragment representing the multipolygon.
30219            * @return {MultiPolygon} A multipolygon geometry.
30220            * @private
30221            */
30222           multipolygon: function multipolygon (str) {
30223             var this$1 = this;
30224
30225             if (str === undefined) {
30226               return this.geometryFactory.createMultiPolygon()
30227             }
30228
30229             var polygon;
30230             var polygons = str.trim().split(regExes.doubleParenComma);
30231             var components = [];
30232             for (var i = 0, len = polygons.length; i < len; ++i) {
30233               polygon = polygons[i].replace(regExes.trimParens, '$1');
30234               components.push(parse$1.polygon.apply(this$1, [polygon]));
30235             }
30236             return this.geometryFactory.createMultiPolygon(components)
30237           },
30238
30239           /**
30240            * Return a geometrycollection given a geometrycollection WKT fragment.
30241            *
30242            * @param {String} str A WKT fragment representing the geometrycollection.
30243            * @return {GeometryCollection}
30244            * @private
30245            */
30246           geometrycollection: function geometrycollection (str) {
30247             var this$1 = this;
30248
30249             if (str === undefined) {
30250               return this.geometryFactory.createGeometryCollection()
30251             }
30252
30253             // separate components of the collection with |
30254             str = str.replace(/,\s*([A-Za-z])/g, '|$1');
30255             var wktArray = str.trim().split('|');
30256             var components = [];
30257             for (var i = 0, len = wktArray.length; i < len; ++i) {
30258               components.push(this$1.read(wktArray[i]));
30259             }
30260             return this.geometryFactory.createGeometryCollection(components)
30261           }
30262         };
30263
30264         /**
30265          * Writes the Well-Known Text representation of a {@link Geometry}. The
30266          * Well-Known Text format is defined in the <A
30267          * HREF="http://www.opengis.org/techno/specs.htm"> OGC Simple Features
30268          * Specification for SQL</A>.
30269          * <p>
30270          * The <code>WKTWriter</code> outputs coordinates rounded to the precision
30271          * model. Only the maximum number of decimal places necessary to represent the
30272          * ordinates to the required precision will be output.
30273          * <p>
30274          * The SFS WKT spec does not define a special tag for {@link LinearRing}s.
30275          * Under the spec, rings are output as <code>LINESTRING</code>s.
30276          */
30277
30278         /**
30279          * @param {GeometryFactory} geometryFactory
30280          * @constructor
30281          */
30282         var WKTWriter = function WKTWriter (geometryFactory) {
30283           this.parser = new WKTParser(geometryFactory);
30284         };
30285
30286         /**
30287          * Converts a <code>Geometry</code> to its Well-known Text representation.
30288          *
30289          * @param {Geometry} geometry a <code>Geometry</code> to process.
30290          * @return {string} a <Geometry Tagged Text> string (see the OpenGIS Simple
30291          *       Features Specification).
30292          * @memberof WKTWriter
30293          */
30294         WKTWriter.prototype.write = function write (geometry) {
30295           return this.parser.write(geometry)
30296         };
30297         /**
30298          * Generates the WKT for a <tt>LINESTRING</tt> specified by two
30299          * {@link Coordinate}s.
30300          *
30301          * @param p0 the first coordinate.
30302          * @param p1 the second coordinate.
30303          *
30304          * @return the WKT.
30305          * @private
30306          */
30307         WKTWriter.toLineString = function toLineString (p0, p1) {
30308           if (arguments.length !== 2) {
30309             throw new Error('Not implemented')
30310           }
30311           return 'LINESTRING ( ' + p0.x + ' ' + p0.y + ', ' + p1.x + ' ' + p1.y + ' )'
30312         };
30313
30314         var RuntimeException = (function (Error) {
30315           function RuntimeException (message) {
30316             Error.call(this, message);
30317             this.name = 'RuntimeException';
30318             this.message = message;
30319             this.stack = (new Error()).stack;
30320           }
30321
30322           if ( Error ) { RuntimeException.__proto__ = Error; }
30323           RuntimeException.prototype = Object.create( Error && Error.prototype );
30324           RuntimeException.prototype.constructor = RuntimeException;
30325
30326           return RuntimeException;
30327         }(Error));
30328
30329         var AssertionFailedException = (function (RuntimeException$$1) {
30330           function AssertionFailedException () {
30331             RuntimeException$$1.call(this);
30332             if (arguments.length === 0) {
30333               RuntimeException$$1.call(this);
30334             } else if (arguments.length === 1) {
30335               var message = arguments[0];
30336               RuntimeException$$1.call(this, message);
30337             }
30338           }
30339
30340           if ( RuntimeException$$1 ) { AssertionFailedException.__proto__ = RuntimeException$$1; }
30341           AssertionFailedException.prototype = Object.create( RuntimeException$$1 && RuntimeException$$1.prototype );
30342           AssertionFailedException.prototype.constructor = AssertionFailedException;
30343           AssertionFailedException.prototype.interfaces_ = function interfaces_ () {
30344             return []
30345           };
30346           AssertionFailedException.prototype.getClass = function getClass () {
30347             return AssertionFailedException
30348           };
30349
30350           return AssertionFailedException;
30351         }(RuntimeException));
30352
30353         var Assert = function Assert () {};
30354
30355         Assert.prototype.interfaces_ = function interfaces_ () {
30356           return []
30357         };
30358         Assert.prototype.getClass = function getClass () {
30359           return Assert
30360         };
30361         Assert.shouldNeverReachHere = function shouldNeverReachHere () {
30362           if (arguments.length === 0) {
30363             Assert.shouldNeverReachHere(null);
30364           } else if (arguments.length === 1) {
30365             var message = arguments[0];
30366             throw new AssertionFailedException('Should never reach here' + (message !== null ? ': ' + message : ''))
30367           }
30368         };
30369         Assert.isTrue = function isTrue () {
30370           var assertion;
30371           var message;
30372           if (arguments.length === 1) {
30373             assertion = arguments[0];
30374             Assert.isTrue(assertion, null);
30375           } else if (arguments.length === 2) {
30376             assertion = arguments[0];
30377             message = arguments[1];
30378             if (!assertion) {
30379               if (message === null) {
30380                 throw new AssertionFailedException()
30381               } else {
30382                 throw new AssertionFailedException(message)
30383               }
30384             }
30385           }
30386         };
30387         Assert.equals = function equals () {
30388           var expectedValue;
30389           var actualValue;
30390           var message;
30391           if (arguments.length === 2) {
30392             expectedValue = arguments[0];
30393             actualValue = arguments[1];
30394             Assert.equals(expectedValue, actualValue, null);
30395           } else if (arguments.length === 3) {
30396             expectedValue = arguments[0];
30397             actualValue = arguments[1];
30398             message = arguments[2];
30399             if (!actualValue.equals(expectedValue)) {
30400               throw new AssertionFailedException('Expected ' + expectedValue + ' but encountered ' + actualValue + (message !== null ? ': ' + message : ''))
30401             }
30402           }
30403         };
30404
30405         var LineIntersector = function LineIntersector () {
30406           this._result = null;
30407           this._inputLines = Array(2).fill().map(function () { return Array(2); });
30408           this._intPt = new Array(2).fill(null);
30409           this._intLineIndex = null;
30410           this._isProper = null;
30411           this._pa = null;
30412           this._pb = null;
30413           this._precisionModel = null;
30414           this._intPt[0] = new Coordinate();
30415           this._intPt[1] = new Coordinate();
30416           this._pa = this._intPt[0];
30417           this._pb = this._intPt[1];
30418           this._result = 0;
30419         };
30420
30421         var staticAccessors$10 = { DONT_INTERSECT: { configurable: true },DO_INTERSECT: { configurable: true },COLLINEAR: { configurable: true },NO_INTERSECTION: { configurable: true },POINT_INTERSECTION: { configurable: true },COLLINEAR_INTERSECTION: { configurable: true } };
30422         LineIntersector.prototype.getIndexAlongSegment = function getIndexAlongSegment (segmentIndex, intIndex) {
30423           this.computeIntLineIndex();
30424           return this._intLineIndex[segmentIndex][intIndex]
30425         };
30426         LineIntersector.prototype.getTopologySummary = function getTopologySummary () {
30427           var catBuf = new StringBuffer();
30428           if (this.isEndPoint()) { catBuf.append(' endpoint'); }
30429           if (this._isProper) { catBuf.append(' proper'); }
30430           if (this.isCollinear()) { catBuf.append(' collinear'); }
30431           return catBuf.toString()
30432         };
30433         LineIntersector.prototype.computeIntersection = function computeIntersection (p1, p2, p3, p4) {
30434           this._inputLines[0][0] = p1;
30435           this._inputLines[0][1] = p2;
30436           this._inputLines[1][0] = p3;
30437           this._inputLines[1][1] = p4;
30438           this._result = this.computeIntersect(p1, p2, p3, p4);
30439         };
30440         LineIntersector.prototype.getIntersectionNum = function getIntersectionNum () {
30441           return this._result
30442         };
30443         LineIntersector.prototype.computeIntLineIndex = function computeIntLineIndex () {
30444           if (arguments.length === 0) {
30445             if (this._intLineIndex === null) {
30446               this._intLineIndex = Array(2).fill().map(function () { return Array(2); });
30447               this.computeIntLineIndex(0);
30448               this.computeIntLineIndex(1);
30449             }
30450           } else if (arguments.length === 1) {
30451             var segmentIndex = arguments[0];
30452             var dist0 = this.getEdgeDistance(segmentIndex, 0);
30453             var dist1 = this.getEdgeDistance(segmentIndex, 1);
30454             if (dist0 > dist1) {
30455               this._intLineIndex[segmentIndex][0] = 0;
30456               this._intLineIndex[segmentIndex][1] = 1;
30457             } else {
30458               this._intLineIndex[segmentIndex][0] = 1;
30459               this._intLineIndex[segmentIndex][1] = 0;
30460             }
30461           }
30462         };
30463         LineIntersector.prototype.isProper = function isProper () {
30464           return this.hasIntersection() && this._isProper
30465         };
30466         LineIntersector.prototype.setPrecisionModel = function setPrecisionModel (precisionModel) {
30467           this._precisionModel = precisionModel;
30468         };
30469         LineIntersector.prototype.isInteriorIntersection = function isInteriorIntersection () {
30470             var this$1 = this;
30471
30472           if (arguments.length === 0) {
30473             if (this.isInteriorIntersection(0)) { return true }
30474             if (this.isInteriorIntersection(1)) { return true }
30475             return false
30476           } else if (arguments.length === 1) {
30477             var inputLineIndex = arguments[0];
30478             for (var i = 0; i < this._result; i++) {
30479               if (!(this$1._intPt[i].equals2D(this$1._inputLines[inputLineIndex][0]) || this$1._intPt[i].equals2D(this$1._inputLines[inputLineIndex][1]))) {
30480                 return true
30481               }
30482             }
30483             return false
30484           }
30485         };
30486         LineIntersector.prototype.getIntersection = function getIntersection (intIndex) {
30487           return this._intPt[intIndex]
30488         };
30489         LineIntersector.prototype.isEndPoint = function isEndPoint () {
30490           return this.hasIntersection() && !this._isProper
30491         };
30492         LineIntersector.prototype.hasIntersection = function hasIntersection () {
30493           return this._result !== LineIntersector.NO_INTERSECTION
30494         };
30495         LineIntersector.prototype.getEdgeDistance = function getEdgeDistance (segmentIndex, intIndex) {
30496           var dist = LineIntersector.computeEdgeDistance(this._intPt[intIndex], this._inputLines[segmentIndex][0], this._inputLines[segmentIndex][1]);
30497           return dist
30498         };
30499         LineIntersector.prototype.isCollinear = function isCollinear () {
30500           return this._result === LineIntersector.COLLINEAR_INTERSECTION
30501         };
30502         LineIntersector.prototype.toString = function toString () {
30503           return WKTWriter.toLineString(this._inputLines[0][0], this._inputLines[0][1]) + ' - ' + WKTWriter.toLineString(this._inputLines[1][0], this._inputLines[1][1]) + this.getTopologySummary()
30504         };
30505         LineIntersector.prototype.getEndpoint = function getEndpoint (segmentIndex, ptIndex) {
30506           return this._inputLines[segmentIndex][ptIndex]
30507         };
30508         LineIntersector.prototype.isIntersection = function isIntersection (pt) {
30509             var this$1 = this;
30510
30511           for (var i = 0; i < this._result; i++) {
30512             if (this$1._intPt[i].equals2D(pt)) {
30513               return true
30514             }
30515           }
30516           return false
30517         };
30518         LineIntersector.prototype.getIntersectionAlongSegment = function getIntersectionAlongSegment (segmentIndex, intIndex) {
30519           this.computeIntLineIndex();
30520           return this._intPt[this._intLineIndex[segmentIndex][intIndex]]
30521         };
30522         LineIntersector.prototype.interfaces_ = function interfaces_ () {
30523           return []
30524         };
30525         LineIntersector.prototype.getClass = function getClass () {
30526           return LineIntersector
30527         };
30528         LineIntersector.computeEdgeDistance = function computeEdgeDistance (p, p0, p1) {
30529           var dx = Math.abs(p1.x - p0.x);
30530           var dy = Math.abs(p1.y - p0.y);
30531           var dist = -1.0;
30532           if (p.equals(p0)) {
30533             dist = 0.0;
30534           } else if (p.equals(p1)) {
30535             if (dx > dy) { dist = dx; } else { dist = dy; }
30536           } else {
30537             var pdx = Math.abs(p.x - p0.x);
30538             var pdy = Math.abs(p.y - p0.y);
30539             if (dx > dy) { dist = pdx; } else { dist = pdy; }
30540             if (dist === 0.0 && !p.equals(p0)) {
30541               dist = Math.max(pdx, pdy);
30542             }
30543           }
30544           Assert.isTrue(!(dist === 0.0 && !p.equals(p0)), 'Bad distance calculation');
30545           return dist
30546         };
30547         LineIntersector.nonRobustComputeEdgeDistance = function nonRobustComputeEdgeDistance (p, p1, p2) {
30548           var dx = p.x - p1.x;
30549           var dy = p.y - p1.y;
30550           var dist = Math.sqrt(dx * dx + dy * dy);
30551           Assert.isTrue(!(dist === 0.0 && !p.equals(p1)), 'Invalid distance calculation');
30552           return dist
30553         };
30554         staticAccessors$10.DONT_INTERSECT.get = function () { return 0 };
30555         staticAccessors$10.DO_INTERSECT.get = function () { return 1 };
30556         staticAccessors$10.COLLINEAR.get = function () { return 2 };
30557         staticAccessors$10.NO_INTERSECTION.get = function () { return 0 };
30558         staticAccessors$10.POINT_INTERSECTION.get = function () { return 1 };
30559         staticAccessors$10.COLLINEAR_INTERSECTION.get = function () { return 2 };
30560
30561         Object.defineProperties( LineIntersector, staticAccessors$10 );
30562
30563         var RobustLineIntersector = (function (LineIntersector$$1) {
30564           function RobustLineIntersector () {
30565             LineIntersector$$1.apply(this, arguments);
30566           }
30567
30568           if ( LineIntersector$$1 ) { RobustLineIntersector.__proto__ = LineIntersector$$1; }
30569           RobustLineIntersector.prototype = Object.create( LineIntersector$$1 && LineIntersector$$1.prototype );
30570           RobustLineIntersector.prototype.constructor = RobustLineIntersector;
30571
30572           RobustLineIntersector.prototype.isInSegmentEnvelopes = function isInSegmentEnvelopes (intPt) {
30573             var env0 = new Envelope(this._inputLines[0][0], this._inputLines[0][1]);
30574             var env1 = new Envelope(this._inputLines[1][0], this._inputLines[1][1]);
30575             return env0.contains(intPt) && env1.contains(intPt)
30576           };
30577           RobustLineIntersector.prototype.computeIntersection = function computeIntersection () {
30578             if (arguments.length === 3) {
30579               var p = arguments[0];
30580               var p1 = arguments[1];
30581               var p2 = arguments[2];
30582               this._isProper = false;
30583               if (Envelope.intersects(p1, p2, p)) {
30584                 if (CGAlgorithms.orientationIndex(p1, p2, p) === 0 && CGAlgorithms.orientationIndex(p2, p1, p) === 0) {
30585                   this._isProper = true;
30586                   if (p.equals(p1) || p.equals(p2)) {
30587                     this._isProper = false;
30588                   }
30589                   this._result = LineIntersector$$1.POINT_INTERSECTION;
30590                   return null
30591                 }
30592               }
30593               this._result = LineIntersector$$1.NO_INTERSECTION;
30594             } else { return LineIntersector$$1.prototype.computeIntersection.apply(this, arguments) }
30595           };
30596           RobustLineIntersector.prototype.normalizeToMinimum = function normalizeToMinimum (n1, n2, n3, n4, normPt) {
30597             normPt.x = this.smallestInAbsValue(n1.x, n2.x, n3.x, n4.x);
30598             normPt.y = this.smallestInAbsValue(n1.y, n2.y, n3.y, n4.y);
30599             n1.x -= normPt.x;
30600             n1.y -= normPt.y;
30601             n2.x -= normPt.x;
30602             n2.y -= normPt.y;
30603             n3.x -= normPt.x;
30604             n3.y -= normPt.y;
30605             n4.x -= normPt.x;
30606             n4.y -= normPt.y;
30607           };
30608           RobustLineIntersector.prototype.safeHCoordinateIntersection = function safeHCoordinateIntersection (p1, p2, q1, q2) {
30609             var intPt = null;
30610             try {
30611               intPt = HCoordinate.intersection(p1, p2, q1, q2);
30612             } catch (e) {
30613               if (e instanceof NotRepresentableException) {
30614                 intPt = RobustLineIntersector.nearestEndpoint(p1, p2, q1, q2);
30615               } else { throw e }
30616             } finally {}
30617             return intPt
30618           };
30619           RobustLineIntersector.prototype.intersection = function intersection (p1, p2, q1, q2) {
30620             var intPt = this.intersectionWithNormalization(p1, p2, q1, q2);
30621             if (!this.isInSegmentEnvelopes(intPt)) {
30622               intPt = new Coordinate(RobustLineIntersector.nearestEndpoint(p1, p2, q1, q2));
30623             }
30624             if (this._precisionModel !== null) {
30625               this._precisionModel.makePrecise(intPt);
30626             }
30627             return intPt
30628           };
30629           RobustLineIntersector.prototype.smallestInAbsValue = function smallestInAbsValue (x1, x2, x3, x4) {
30630             var x = x1;
30631             var xabs = Math.abs(x);
30632             if (Math.abs(x2) < xabs) {
30633               x = x2;
30634               xabs = Math.abs(x2);
30635             }
30636             if (Math.abs(x3) < xabs) {
30637               x = x3;
30638               xabs = Math.abs(x3);
30639             }
30640             if (Math.abs(x4) < xabs) {
30641               x = x4;
30642             }
30643             return x
30644           };
30645           RobustLineIntersector.prototype.checkDD = function checkDD (p1, p2, q1, q2, intPt) {
30646             var intPtDD = CGAlgorithmsDD.intersection(p1, p2, q1, q2);
30647             var isIn = this.isInSegmentEnvelopes(intPtDD);
30648             System.out.println('DD in env = ' + isIn + '  --------------------- ' + intPtDD);
30649             if (intPt.distance(intPtDD) > 0.0001) {
30650               System.out.println('Distance = ' + intPt.distance(intPtDD));
30651             }
30652           };
30653           RobustLineIntersector.prototype.intersectionWithNormalization = function intersectionWithNormalization (p1, p2, q1, q2) {
30654             var n1 = new Coordinate(p1);
30655             var n2 = new Coordinate(p2);
30656             var n3 = new Coordinate(q1);
30657             var n4 = new Coordinate(q2);
30658             var normPt = new Coordinate();
30659             this.normalizeToEnvCentre(n1, n2, n3, n4, normPt);
30660             var intPt = this.safeHCoordinateIntersection(n1, n2, n3, n4);
30661             intPt.x += normPt.x;
30662             intPt.y += normPt.y;
30663             return intPt
30664           };
30665           RobustLineIntersector.prototype.computeCollinearIntersection = function computeCollinearIntersection (p1, p2, q1, q2) {
30666             var p1q1p2 = Envelope.intersects(p1, p2, q1);
30667             var p1q2p2 = Envelope.intersects(p1, p2, q2);
30668             var q1p1q2 = Envelope.intersects(q1, q2, p1);
30669             var q1p2q2 = Envelope.intersects(q1, q2, p2);
30670             if (p1q1p2 && p1q2p2) {
30671               this._intPt[0] = q1;
30672               this._intPt[1] = q2;
30673               return LineIntersector$$1.COLLINEAR_INTERSECTION
30674             }
30675             if (q1p1q2 && q1p2q2) {
30676               this._intPt[0] = p1;
30677               this._intPt[1] = p2;
30678               return LineIntersector$$1.COLLINEAR_INTERSECTION
30679             }
30680             if (p1q1p2 && q1p1q2) {
30681               this._intPt[0] = q1;
30682               this._intPt[1] = p1;
30683               return q1.equals(p1) && !p1q2p2 && !q1p2q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION
30684             }
30685             if (p1q1p2 && q1p2q2) {
30686               this._intPt[0] = q1;
30687               this._intPt[1] = p2;
30688               return q1.equals(p2) && !p1q2p2 && !q1p1q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION
30689             }
30690             if (p1q2p2 && q1p1q2) {
30691               this._intPt[0] = q2;
30692               this._intPt[1] = p1;
30693               return q2.equals(p1) && !p1q1p2 && !q1p2q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION
30694             }
30695             if (p1q2p2 && q1p2q2) {
30696               this._intPt[0] = q2;
30697               this._intPt[1] = p2;
30698               return q2.equals(p2) && !p1q1p2 && !q1p1q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION
30699             }
30700             return LineIntersector$$1.NO_INTERSECTION
30701           };
30702           RobustLineIntersector.prototype.normalizeToEnvCentre = function normalizeToEnvCentre (n00, n01, n10, n11, normPt) {
30703             var minX0 = n00.x < n01.x ? n00.x : n01.x;
30704             var minY0 = n00.y < n01.y ? n00.y : n01.y;
30705             var maxX0 = n00.x > n01.x ? n00.x : n01.x;
30706             var maxY0 = n00.y > n01.y ? n00.y : n01.y;
30707             var minX1 = n10.x < n11.x ? n10.x : n11.x;
30708             var minY1 = n10.y < n11.y ? n10.y : n11.y;
30709             var maxX1 = n10.x > n11.x ? n10.x : n11.x;
30710             var maxY1 = n10.y > n11.y ? n10.y : n11.y;
30711             var intMinX = minX0 > minX1 ? minX0 : minX1;
30712             var intMaxX = maxX0 < maxX1 ? maxX0 : maxX1;
30713             var intMinY = minY0 > minY1 ? minY0 : minY1;
30714             var intMaxY = maxY0 < maxY1 ? maxY0 : maxY1;
30715             var intMidX = (intMinX + intMaxX) / 2.0;
30716             var intMidY = (intMinY + intMaxY) / 2.0;
30717             normPt.x = intMidX;
30718             normPt.y = intMidY;
30719             n00.x -= normPt.x;
30720             n00.y -= normPt.y;
30721             n01.x -= normPt.x;
30722             n01.y -= normPt.y;
30723             n10.x -= normPt.x;
30724             n10.y -= normPt.y;
30725             n11.x -= normPt.x;
30726             n11.y -= normPt.y;
30727           };
30728           RobustLineIntersector.prototype.computeIntersect = function computeIntersect (p1, p2, q1, q2) {
30729             this._isProper = false;
30730             if (!Envelope.intersects(p1, p2, q1, q2)) { return LineIntersector$$1.NO_INTERSECTION }
30731             var Pq1 = CGAlgorithms.orientationIndex(p1, p2, q1);
30732             var Pq2 = CGAlgorithms.orientationIndex(p1, p2, q2);
30733             if ((Pq1 > 0 && Pq2 > 0) || (Pq1 < 0 && Pq2 < 0)) {
30734               return LineIntersector$$1.NO_INTERSECTION
30735             }
30736             var Qp1 = CGAlgorithms.orientationIndex(q1, q2, p1);
30737             var Qp2 = CGAlgorithms.orientationIndex(q1, q2, p2);
30738             if ((Qp1 > 0 && Qp2 > 0) || (Qp1 < 0 && Qp2 < 0)) {
30739               return LineIntersector$$1.NO_INTERSECTION
30740             }
30741             var collinear = Pq1 === 0 && Pq2 === 0 && Qp1 === 0 && Qp2 === 0;
30742             if (collinear) {
30743               return this.computeCollinearIntersection(p1, p2, q1, q2)
30744             }
30745             if (Pq1 === 0 || Pq2 === 0 || Qp1 === 0 || Qp2 === 0) {
30746               this._isProper = false;
30747               if (p1.equals2D(q1) || p1.equals2D(q2)) {
30748                 this._intPt[0] = p1;
30749               } else if (p2.equals2D(q1) || p2.equals2D(q2)) {
30750                 this._intPt[0] = p2;
30751               } else if (Pq1 === 0) {
30752                 this._intPt[0] = new Coordinate(q1);
30753               } else if (Pq2 === 0) {
30754                 this._intPt[0] = new Coordinate(q2);
30755               } else if (Qp1 === 0) {
30756                 this._intPt[0] = new Coordinate(p1);
30757               } else if (Qp2 === 0) {
30758                 this._intPt[0] = new Coordinate(p2);
30759               }
30760             } else {
30761               this._isProper = true;
30762               this._intPt[0] = this.intersection(p1, p2, q1, q2);
30763             }
30764             return LineIntersector$$1.POINT_INTERSECTION
30765           };
30766           RobustLineIntersector.prototype.interfaces_ = function interfaces_ () {
30767             return []
30768           };
30769           RobustLineIntersector.prototype.getClass = function getClass () {
30770             return RobustLineIntersector
30771           };
30772           RobustLineIntersector.nearestEndpoint = function nearestEndpoint (p1, p2, q1, q2) {
30773             var nearestPt = p1;
30774             var minDist = CGAlgorithms.distancePointLine(p1, q1, q2);
30775             var dist = CGAlgorithms.distancePointLine(p2, q1, q2);
30776             if (dist < minDist) {
30777               minDist = dist;
30778               nearestPt = p2;
30779             }
30780             dist = CGAlgorithms.distancePointLine(q1, p1, p2);
30781             if (dist < minDist) {
30782               minDist = dist;
30783               nearestPt = q1;
30784             }
30785             dist = CGAlgorithms.distancePointLine(q2, p1, p2);
30786             if (dist < minDist) {
30787               minDist = dist;
30788               nearestPt = q2;
30789             }
30790             return nearestPt
30791           };
30792
30793           return RobustLineIntersector;
30794         }(LineIntersector));
30795
30796         var RobustDeterminant = function RobustDeterminant () {};
30797
30798         RobustDeterminant.prototype.interfaces_ = function interfaces_ () {
30799           return []
30800         };
30801         RobustDeterminant.prototype.getClass = function getClass () {
30802           return RobustDeterminant
30803         };
30804         RobustDeterminant.orientationIndex = function orientationIndex (p1, p2, q) {
30805           var dx1 = p2.x - p1.x;
30806           var dy1 = p2.y - p1.y;
30807           var dx2 = q.x - p2.x;
30808           var dy2 = q.y - p2.y;
30809           return RobustDeterminant.signOfDet2x2(dx1, dy1, dx2, dy2)
30810         };
30811         RobustDeterminant.signOfDet2x2 = function signOfDet2x2 (x1, y1, x2, y2) {
30812           var sign = null;
30813           var swap = null;
30814           var k = null;
30815           sign = 1;
30816           if (x1 === 0.0 || y2 === 0.0) {
30817             if (y1 === 0.0 || x2 === 0.0) {
30818               return 0
30819             } else if (y1 > 0) {
30820               if (x2 > 0) {
30821                 return -sign
30822               } else {
30823                 return sign
30824               }
30825             } else {
30826               if (x2 > 0) {
30827                 return sign
30828               } else {
30829                 return -sign
30830               }
30831             }
30832           }
30833           if (y1 === 0.0 || x2 === 0.0) {
30834             if (y2 > 0) {
30835               if (x1 > 0) {
30836                 return sign
30837               } else {
30838                 return -sign
30839               }
30840             } else {
30841               if (x1 > 0) {
30842                 return -sign
30843               } else {
30844                 return sign
30845               }
30846             }
30847           }
30848           if (y1 > 0.0) {
30849             if (y2 > 0.0) {
30850               if (y1 <= y2) ; else {
30851                 sign = -sign;
30852                 swap = x1;
30853                 x1 = x2;
30854                 x2 = swap;
30855                 swap = y1;
30856                 y1 = y2;
30857                 y2 = swap;
30858               }
30859             } else {
30860               if (y1 <= -y2) {
30861                 sign = -sign;
30862                 x2 = -x2;
30863                 y2 = -y2;
30864               } else {
30865                 swap = x1;
30866                 x1 = -x2;
30867                 x2 = swap;
30868                 swap = y1;
30869                 y1 = -y2;
30870                 y2 = swap;
30871               }
30872             }
30873           } else {
30874             if (y2 > 0.0) {
30875               if (-y1 <= y2) {
30876                 sign = -sign;
30877                 x1 = -x1;
30878                 y1 = -y1;
30879               } else {
30880                 swap = -x1;
30881                 x1 = x2;
30882                 x2 = swap;
30883                 swap = -y1;
30884                 y1 = y2;
30885                 y2 = swap;
30886               }
30887             } else {
30888               if (y1 >= y2) {
30889                 x1 = -x1;
30890                 y1 = -y1;
30891                 x2 = -x2;
30892                 y2 = -y2;
30893               } else {
30894                 sign = -sign;
30895                 swap = -x1;
30896                 x1 = -x2;
30897                 x2 = swap;
30898                 swap = -y1;
30899                 y1 = -y2;
30900                 y2 = swap;
30901               }
30902             }
30903           }
30904           if (x1 > 0.0) {
30905             if (x2 > 0.0) {
30906               if (x1 <= x2) ; else {
30907                 return sign
30908               }
30909             } else {
30910               return sign
30911             }
30912           } else {
30913             if (x2 > 0.0) {
30914               return -sign
30915             } else {
30916               if (x1 >= x2) {
30917                 sign = -sign;
30918                 x1 = -x1;
30919                 x2 = -x2;
30920               } else {
30921                 return -sign
30922               }
30923             }
30924           }
30925           while (true) {
30926             k = Math.floor(x2 / x1);
30927             x2 = x2 - k * x1;
30928             y2 = y2 - k * y1;
30929             if (y2 < 0.0) {
30930               return -sign
30931             }
30932             if (y2 > y1) {
30933               return sign
30934             }
30935             if (x1 > x2 + x2) {
30936               if (y1 < y2 + y2) {
30937                 return sign
30938               }
30939             } else {
30940               if (y1 > y2 + y2) {
30941                 return -sign
30942               } else {
30943                 x2 = x1 - x2;
30944                 y2 = y1 - y2;
30945                 sign = -sign;
30946               }
30947             }
30948             if (y2 === 0.0) {
30949               if (x2 === 0.0) {
30950                 return 0
30951               } else {
30952                 return -sign
30953               }
30954             }
30955             if (x2 === 0.0) {
30956               return sign
30957             }
30958             k = Math.floor(x1 / x2);
30959             x1 = x1 - k * x2;
30960             y1 = y1 - k * y2;
30961             if (y1 < 0.0) {
30962               return sign
30963             }
30964             if (y1 > y2) {
30965               return -sign
30966             }
30967             if (x2 > x1 + x1) {
30968               if (y2 < y1 + y1) {
30969                 return -sign
30970               }
30971             } else {
30972               if (y2 > y1 + y1) {
30973                 return sign
30974               } else {
30975                 x1 = x2 - x1;
30976                 y1 = y2 - y1;
30977                 sign = -sign;
30978               }
30979             }
30980             if (y1 === 0.0) {
30981               if (x1 === 0.0) {
30982                 return 0
30983               } else {
30984                 return sign
30985               }
30986             }
30987             if (x1 === 0.0) {
30988               return -sign
30989             }
30990           }
30991         };
30992
30993         var RayCrossingCounter = function RayCrossingCounter () {
30994           this._p = null;
30995           this._crossingCount = 0;
30996           this._isPointOnSegment = false;
30997           var p = arguments[0];
30998           this._p = p;
30999         };
31000         RayCrossingCounter.prototype.countSegment = function countSegment (p1, p2) {
31001           if (p1.x < this._p.x && p2.x < this._p.x) { return null }
31002           if (this._p.x === p2.x && this._p.y === p2.y) {
31003             this._isPointOnSegment = true;
31004             return null
31005           }
31006           if (p1.y === this._p.y && p2.y === this._p.y) {
31007             var minx = p1.x;
31008             var maxx = p2.x;
31009             if (minx > maxx) {
31010               minx = p2.x;
31011               maxx = p1.x;
31012             }
31013             if (this._p.x >= minx && this._p.x <= maxx) {
31014               this._isPointOnSegment = true;
31015             }
31016             return null
31017           }
31018           if ((p1.y > this._p.y && p2.y <= this._p.y) || (p2.y > this._p.y && p1.y <= this._p.y)) {
31019             var x1 = p1.x - this._p.x;
31020             var y1 = p1.y - this._p.y;
31021             var x2 = p2.x - this._p.x;
31022             var y2 = p2.y - this._p.y;
31023             var xIntSign = RobustDeterminant.signOfDet2x2(x1, y1, x2, y2);
31024             if (xIntSign === 0.0) {
31025               this._isPointOnSegment = true;
31026               return null
31027             }
31028             if (y2 < y1) { xIntSign = -xIntSign; }
31029             if (xIntSign > 0.0) {
31030               this._crossingCount++;
31031             }
31032           }
31033         };
31034         RayCrossingCounter.prototype.isPointInPolygon = function isPointInPolygon () {
31035           return this.getLocation() !== Location.EXTERIOR
31036         };
31037         RayCrossingCounter.prototype.getLocation = function getLocation () {
31038           if (this._isPointOnSegment) { return Location.BOUNDARY }
31039           if (this._crossingCount % 2 === 1) {
31040             return Location.INTERIOR
31041           }
31042           return Location.EXTERIOR
31043         };
31044         RayCrossingCounter.prototype.isOnSegment = function isOnSegment () {
31045           return this._isPointOnSegment
31046         };
31047         RayCrossingCounter.prototype.interfaces_ = function interfaces_ () {
31048           return []
31049         };
31050         RayCrossingCounter.prototype.getClass = function getClass () {
31051           return RayCrossingCounter
31052         };
31053         RayCrossingCounter.locatePointInRing = function locatePointInRing () {
31054           if (arguments[0] instanceof Coordinate && hasInterface(arguments[1], CoordinateSequence)) {
31055             var p = arguments[0];
31056             var ring = arguments[1];
31057             var counter = new RayCrossingCounter(p);
31058             var p1 = new Coordinate();
31059             var p2 = new Coordinate();
31060             for (var i = 1; i < ring.size(); i++) {
31061               ring.getCoordinate(i, p1);
31062               ring.getCoordinate(i - 1, p2);
31063               counter.countSegment(p1, p2);
31064               if (counter.isOnSegment()) { return counter.getLocation() }
31065             }
31066             return counter.getLocation()
31067           } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Array) {
31068             var p$1 = arguments[0];
31069             var ring$1 = arguments[1];
31070             var counter$1 = new RayCrossingCounter(p$1);
31071             for (var i$1 = 1; i$1 < ring$1.length; i$1++) {
31072               var p1$1 = ring$1[i$1];
31073               var p2$1 = ring$1[i$1 - 1];
31074               counter$1.countSegment(p1$1, p2$1);
31075               if (counter$1.isOnSegment()) { return counter$1.getLocation() }
31076             }
31077             return counter$1.getLocation()
31078           }
31079         };
31080
31081         var CGAlgorithms = function CGAlgorithms () {};
31082
31083         var staticAccessors$3 = { CLOCKWISE: { configurable: true },RIGHT: { configurable: true },COUNTERCLOCKWISE: { configurable: true },LEFT: { configurable: true },COLLINEAR: { configurable: true },STRAIGHT: { configurable: true } };
31084
31085         CGAlgorithms.prototype.interfaces_ = function interfaces_ () {
31086           return []
31087         };
31088         CGAlgorithms.prototype.getClass = function getClass () {
31089           return CGAlgorithms
31090         };
31091         CGAlgorithms.orientationIndex = function orientationIndex (p1, p2, q) {
31092           return CGAlgorithmsDD.orientationIndex(p1, p2, q)
31093         };
31094         CGAlgorithms.signedArea = function signedArea () {
31095           if (arguments[0] instanceof Array) {
31096             var ring = arguments[0];
31097             if (ring.length < 3) { return 0.0 }
31098             var sum = 0.0;
31099             var x0 = ring[0].x;
31100             for (var i = 1; i < ring.length - 1; i++) {
31101               var x = ring[i].x - x0;
31102               var y1 = ring[i + 1].y;
31103               var y2 = ring[i - 1].y;
31104               sum += x * (y2 - y1);
31105             }
31106             return sum / 2.0
31107           } else if (hasInterface(arguments[0], CoordinateSequence)) {
31108             var ring$1 = arguments[0];
31109             var n = ring$1.size();
31110             if (n < 3) { return 0.0 }
31111             var p0 = new Coordinate();
31112             var p1 = new Coordinate();
31113             var p2 = new Coordinate();
31114             ring$1.getCoordinate(0, p1);
31115             ring$1.getCoordinate(1, p2);
31116             var x0$1 = p1.x;
31117             p2.x -= x0$1;
31118             var sum$1 = 0.0;
31119             for (var i$1 = 1; i$1 < n - 1; i$1++) {
31120               p0.y = p1.y;
31121               p1.x = p2.x;
31122               p1.y = p2.y;
31123               ring$1.getCoordinate(i$1 + 1, p2);
31124               p2.x -= x0$1;
31125               sum$1 += p1.x * (p0.y - p2.y);
31126             }
31127             return sum$1 / 2.0
31128           }
31129         };
31130         CGAlgorithms.distanceLineLine = function distanceLineLine (A, B, C, D) {
31131           if (A.equals(B)) { return CGAlgorithms.distancePointLine(A, C, D) }
31132           if (C.equals(D)) { return CGAlgorithms.distancePointLine(D, A, B) }
31133           var noIntersection = false;
31134           if (!Envelope.intersects(A, B, C, D)) {
31135             noIntersection = true;
31136           } else {
31137             var denom = (B.x - A.x) * (D.y - C.y) - (B.y - A.y) * (D.x - C.x);
31138             if (denom === 0) {
31139               noIntersection = true;
31140             } else {
31141               var rNumb = (A.y - C.y) * (D.x - C.x) - (A.x - C.x) * (D.y - C.y);
31142               var sNum = (A.y - C.y) * (B.x - A.x) - (A.x - C.x) * (B.y - A.y);
31143               var s = sNum / denom;
31144               var r = rNumb / denom;
31145               if (r < 0 || r > 1 || s < 0 || s > 1) {
31146                 noIntersection = true;
31147               }
31148             }
31149           }
31150           if (noIntersection) {
31151             return MathUtil.min(CGAlgorithms.distancePointLine(A, C, D), CGAlgorithms.distancePointLine(B, C, D), CGAlgorithms.distancePointLine(C, A, B), CGAlgorithms.distancePointLine(D, A, B))
31152           }
31153           return 0.0
31154         };
31155         CGAlgorithms.isPointInRing = function isPointInRing (p, ring) {
31156           return CGAlgorithms.locatePointInRing(p, ring) !== Location.EXTERIOR
31157         };
31158         CGAlgorithms.computeLength = function computeLength (pts) {
31159           var n = pts.size();
31160           if (n <= 1) { return 0.0 }
31161           var len = 0.0;
31162           var p = new Coordinate();
31163           pts.getCoordinate(0, p);
31164           var x0 = p.x;
31165           var y0 = p.y;
31166           for (var i = 1; i < n; i++) {
31167             pts.getCoordinate(i, p);
31168             var x1 = p.x;
31169             var y1 = p.y;
31170             var dx = x1 - x0;
31171             var dy = y1 - y0;
31172             len += Math.sqrt(dx * dx + dy * dy);
31173             x0 = x1;
31174             y0 = y1;
31175           }
31176           return len
31177         };
31178         CGAlgorithms.isCCW = function isCCW (ring) {
31179           var nPts = ring.length - 1;
31180           if (nPts < 3) { throw new IllegalArgumentException('Ring has fewer than 4 points, so orientation cannot be determined') }
31181           var hiPt = ring[0];
31182           var hiIndex = 0;
31183           for (var i = 1; i <= nPts; i++) {
31184             var p = ring[i];
31185             if (p.y > hiPt.y) {
31186               hiPt = p;
31187               hiIndex = i;
31188             }
31189           }
31190           var iPrev = hiIndex;
31191           do {
31192             iPrev = iPrev - 1;
31193             if (iPrev < 0) { iPrev = nPts; }
31194           } while (ring[iPrev].equals2D(hiPt) && iPrev !== hiIndex)
31195           var iNext = hiIndex;
31196           do {
31197             iNext = (iNext + 1) % nPts;
31198           } while (ring[iNext].equals2D(hiPt) && iNext !== hiIndex)
31199           var prev = ring[iPrev];
31200           var next = ring[iNext];
31201           if (prev.equals2D(hiPt) || next.equals2D(hiPt) || prev.equals2D(next)) { return false }
31202           var disc = CGAlgorithms.computeOrientation(prev, hiPt, next);
31203           var isCCW = false;
31204           if (disc === 0) {
31205             isCCW = prev.x > next.x;
31206           } else {
31207             isCCW = disc > 0;
31208           }
31209           return isCCW
31210         };
31211         CGAlgorithms.locatePointInRing = function locatePointInRing (p, ring) {
31212           return RayCrossingCounter.locatePointInRing(p, ring)
31213         };
31214         CGAlgorithms.distancePointLinePerpendicular = function distancePointLinePerpendicular (p, A, B) {
31215           var len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y);
31216           var s = ((A.y - p.y) * (B.x - A.x) - (A.x - p.x) * (B.y - A.y)) / len2;
31217           return Math.abs(s) * Math.sqrt(len2)
31218         };
31219         CGAlgorithms.computeOrientation = function computeOrientation (p1, p2, q) {
31220           return CGAlgorithms.orientationIndex(p1, p2, q)
31221         };
31222         CGAlgorithms.distancePointLine = function distancePointLine () {
31223           if (arguments.length === 2) {
31224             var p = arguments[0];
31225             var line = arguments[1];
31226             if (line.length === 0) { throw new IllegalArgumentException('Line array must contain at least one vertex') }
31227             var minDistance = p.distance(line[0]);
31228             for (var i = 0; i < line.length - 1; i++) {
31229               var dist = CGAlgorithms.distancePointLine(p, line[i], line[i + 1]);
31230               if (dist < minDistance) {
31231                 minDistance = dist;
31232               }
31233             }
31234             return minDistance
31235           } else if (arguments.length === 3) {
31236             var p$1 = arguments[0];
31237             var A = arguments[1];
31238             var B = arguments[2];
31239             if (A.x === B.x && A.y === B.y) { return p$1.distance(A) }
31240             var len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y);
31241             var r = ((p$1.x - A.x) * (B.x - A.x) + (p$1.y - A.y) * (B.y - A.y)) / len2;
31242             if (r <= 0.0) { return p$1.distance(A) }
31243             if (r >= 1.0) { return p$1.distance(B) }
31244             var s = ((A.y - p$1.y) * (B.x - A.x) - (A.x - p$1.x) * (B.y - A.y)) / len2;
31245             return Math.abs(s) * Math.sqrt(len2)
31246           }
31247         };
31248         CGAlgorithms.isOnLine = function isOnLine (p, pt) {
31249           var lineIntersector = new RobustLineIntersector();
31250           for (var i = 1; i < pt.length; i++) {
31251             var p0 = pt[i - 1];
31252             var p1 = pt[i];
31253             lineIntersector.computeIntersection(p, p0, p1);
31254             if (lineIntersector.hasIntersection()) {
31255               return true
31256             }
31257           }
31258           return false
31259         };
31260         staticAccessors$3.CLOCKWISE.get = function () { return -1 };
31261         staticAccessors$3.RIGHT.get = function () { return CGAlgorithms.CLOCKWISE };
31262         staticAccessors$3.COUNTERCLOCKWISE.get = function () { return 1 };
31263         staticAccessors$3.LEFT.get = function () { return CGAlgorithms.COUNTERCLOCKWISE };
31264         staticAccessors$3.COLLINEAR.get = function () { return 0 };
31265         staticAccessors$3.STRAIGHT.get = function () { return CGAlgorithms.COLLINEAR };
31266
31267         Object.defineProperties( CGAlgorithms, staticAccessors$3 );
31268
31269         var GeometryComponentFilter = function GeometryComponentFilter () {};
31270
31271         GeometryComponentFilter.prototype.filter = function filter (geom) {};
31272         GeometryComponentFilter.prototype.interfaces_ = function interfaces_ () {
31273           return []
31274         };
31275         GeometryComponentFilter.prototype.getClass = function getClass () {
31276           return GeometryComponentFilter
31277         };
31278
31279         var Geometry = function Geometry () {
31280           var factory = arguments[0];
31281
31282           this._envelope = null;
31283           this._factory = null;
31284           this._SRID = null;
31285           this._userData = null;
31286           this._factory = factory;
31287           this._SRID = factory.getSRID();
31288         };
31289
31290         var staticAccessors$11 = { serialVersionUID: { configurable: true },SORTINDEX_POINT: { configurable: true },SORTINDEX_MULTIPOINT: { configurable: true },SORTINDEX_LINESTRING: { configurable: true },SORTINDEX_LINEARRING: { configurable: true },SORTINDEX_MULTILINESTRING: { configurable: true },SORTINDEX_POLYGON: { configurable: true },SORTINDEX_MULTIPOLYGON: { configurable: true },SORTINDEX_GEOMETRYCOLLECTION: { configurable: true },geometryChangedFilter: { configurable: true } };
31291         Geometry.prototype.isGeometryCollection = function isGeometryCollection () {
31292           return this.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION
31293         };
31294         Geometry.prototype.getFactory = function getFactory () {
31295           return this._factory
31296         };
31297         Geometry.prototype.getGeometryN = function getGeometryN (n) {
31298           return this
31299         };
31300         Geometry.prototype.getArea = function getArea () {
31301           return 0.0
31302         };
31303         Geometry.prototype.isRectangle = function isRectangle () {
31304           return false
31305         };
31306         Geometry.prototype.equals = function equals () {
31307           if (arguments[0] instanceof Geometry) {
31308             var g$1 = arguments[0];
31309             if (g$1 === null) { return false }
31310             return this.equalsTopo(g$1)
31311           } else if (arguments[0] instanceof Object) {
31312             var o = arguments[0];
31313             if (!(o instanceof Geometry)) { return false }
31314             var g = o;
31315             return this.equalsExact(g)
31316           }
31317         };
31318         Geometry.prototype.equalsExact = function equalsExact (other) {
31319           return this === other || this.equalsExact(other, 0)
31320         };
31321         Geometry.prototype.geometryChanged = function geometryChanged () {
31322           this.apply(Geometry.geometryChangedFilter);
31323         };
31324         Geometry.prototype.geometryChangedAction = function geometryChangedAction () {
31325           this._envelope = null;
31326         };
31327         Geometry.prototype.equalsNorm = function equalsNorm (g) {
31328           if (g === null) { return false }
31329           return this.norm().equalsExact(g.norm())
31330         };
31331         Geometry.prototype.getLength = function getLength () {
31332           return 0.0
31333         };
31334         Geometry.prototype.getNumGeometries = function getNumGeometries () {
31335           return 1
31336         };
31337         Geometry.prototype.compareTo = function compareTo () {
31338           if (arguments.length === 1) {
31339             var o = arguments[0];
31340             var other = o;
31341             if (this.getSortIndex() !== other.getSortIndex()) {
31342               return this.getSortIndex() - other.getSortIndex()
31343             }
31344             if (this.isEmpty() && other.isEmpty()) {
31345               return 0
31346             }
31347             if (this.isEmpty()) {
31348               return -1
31349             }
31350             if (other.isEmpty()) {
31351               return 1
31352             }
31353             return this.compareToSameClass(o)
31354           } else if (arguments.length === 2) {
31355             var other$1 = arguments[0];
31356             var comp = arguments[1];
31357             if (this.getSortIndex() !== other$1.getSortIndex()) {
31358               return this.getSortIndex() - other$1.getSortIndex()
31359             }
31360             if (this.isEmpty() && other$1.isEmpty()) {
31361               return 0
31362             }
31363             if (this.isEmpty()) {
31364               return -1
31365             }
31366             if (other$1.isEmpty()) {
31367               return 1
31368             }
31369             return this.compareToSameClass(other$1, comp)
31370           }
31371         };
31372         Geometry.prototype.getUserData = function getUserData () {
31373           return this._userData
31374         };
31375         Geometry.prototype.getSRID = function getSRID () {
31376           return this._SRID
31377         };
31378         Geometry.prototype.getEnvelope = function getEnvelope () {
31379           return this.getFactory().toGeometry(this.getEnvelopeInternal())
31380         };
31381         Geometry.prototype.checkNotGeometryCollection = function checkNotGeometryCollection (g) {
31382           if (g.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION) {
31383             throw new IllegalArgumentException('This method does not support GeometryCollection arguments')
31384           }
31385         };
31386         Geometry.prototype.equal = function equal (a, b, tolerance) {
31387           if (tolerance === 0) {
31388             return a.equals(b)
31389           }
31390           return a.distance(b) <= tolerance
31391         };
31392         Geometry.prototype.norm = function norm () {
31393           var copy = this.copy();
31394           copy.normalize();
31395           return copy
31396         };
31397         Geometry.prototype.getPrecisionModel = function getPrecisionModel () {
31398           return this._factory.getPrecisionModel()
31399         };
31400         Geometry.prototype.getEnvelopeInternal = function getEnvelopeInternal () {
31401           if (this._envelope === null) {
31402             this._envelope = this.computeEnvelopeInternal();
31403           }
31404           return new Envelope(this._envelope)
31405         };
31406         Geometry.prototype.setSRID = function setSRID (SRID) {
31407           this._SRID = SRID;
31408         };
31409         Geometry.prototype.setUserData = function setUserData (userData) {
31410           this._userData = userData;
31411         };
31412         Geometry.prototype.compare = function compare (a, b) {
31413           var i = a.iterator();
31414           var j = b.iterator();
31415           while (i.hasNext() && j.hasNext()) {
31416             var aElement = i.next();
31417             var bElement = j.next();
31418             var comparison = aElement.compareTo(bElement);
31419             if (comparison !== 0) {
31420               return comparison
31421             }
31422           }
31423           if (i.hasNext()) {
31424             return 1
31425           }
31426           if (j.hasNext()) {
31427             return -1
31428           }
31429           return 0
31430         };
31431         Geometry.prototype.hashCode = function hashCode () {
31432           return this.getEnvelopeInternal().hashCode()
31433         };
31434         Geometry.prototype.isGeometryCollectionOrDerived = function isGeometryCollectionOrDerived () {
31435           if (this.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION || this.getSortIndex() === Geometry.SORTINDEX_MULTIPOINT || this.getSortIndex() === Geometry.SORTINDEX_MULTILINESTRING || this.getSortIndex() === Geometry.SORTINDEX_MULTIPOLYGON) {
31436             return true
31437           }
31438           return false
31439         };
31440         Geometry.prototype.interfaces_ = function interfaces_ () {
31441           return [Clonable, Comparable, Serializable]
31442         };
31443         Geometry.prototype.getClass = function getClass () {
31444           return Geometry
31445         };
31446         Geometry.hasNonEmptyElements = function hasNonEmptyElements (geometries) {
31447           for (var i = 0; i < geometries.length; i++) {
31448             if (!geometries[i].isEmpty()) {
31449               return true
31450             }
31451           }
31452           return false
31453         };
31454         Geometry.hasNullElements = function hasNullElements (array) {
31455           for (var i = 0; i < array.length; i++) {
31456             if (array[i] === null) {
31457               return true
31458             }
31459           }
31460           return false
31461         };
31462         staticAccessors$11.serialVersionUID.get = function () { return 8763622679187376702 };
31463         staticAccessors$11.SORTINDEX_POINT.get = function () { return 0 };
31464         staticAccessors$11.SORTINDEX_MULTIPOINT.get = function () { return 1 };
31465         staticAccessors$11.SORTINDEX_LINESTRING.get = function () { return 2 };
31466         staticAccessors$11.SORTINDEX_LINEARRING.get = function () { return 3 };
31467         staticAccessors$11.SORTINDEX_MULTILINESTRING.get = function () { return 4 };
31468         staticAccessors$11.SORTINDEX_POLYGON.get = function () { return 5 };
31469         staticAccessors$11.SORTINDEX_MULTIPOLYGON.get = function () { return 6 };
31470         staticAccessors$11.SORTINDEX_GEOMETRYCOLLECTION.get = function () { return 7 };
31471         staticAccessors$11.geometryChangedFilter.get = function () { return geometryChangedFilter };
31472
31473         Object.defineProperties( Geometry, staticAccessors$11 );
31474
31475         var geometryChangedFilter = function geometryChangedFilter () {};
31476
31477         geometryChangedFilter.interfaces_ = function interfaces_ () {
31478           return [GeometryComponentFilter]
31479         };
31480         geometryChangedFilter.filter = function filter (geom) {
31481           geom.geometryChangedAction();
31482         };
31483
31484         var CoordinateFilter = function CoordinateFilter () {};
31485
31486         CoordinateFilter.prototype.filter = function filter (coord) {};
31487         CoordinateFilter.prototype.interfaces_ = function interfaces_ () {
31488           return []
31489         };
31490         CoordinateFilter.prototype.getClass = function getClass () {
31491           return CoordinateFilter
31492         };
31493
31494         var BoundaryNodeRule = function BoundaryNodeRule () {};
31495
31496         var staticAccessors$12 = { Mod2BoundaryNodeRule: { configurable: true },EndPointBoundaryNodeRule: { configurable: true },MultiValentEndPointBoundaryNodeRule: { configurable: true },MonoValentEndPointBoundaryNodeRule: { configurable: true },MOD2_BOUNDARY_RULE: { configurable: true },ENDPOINT_BOUNDARY_RULE: { configurable: true },MULTIVALENT_ENDPOINT_BOUNDARY_RULE: { configurable: true },MONOVALENT_ENDPOINT_BOUNDARY_RULE: { configurable: true },OGC_SFS_BOUNDARY_RULE: { configurable: true } };
31497
31498         BoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {};
31499         BoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
31500           return []
31501         };
31502         BoundaryNodeRule.prototype.getClass = function getClass () {
31503           return BoundaryNodeRule
31504         };
31505         staticAccessors$12.Mod2BoundaryNodeRule.get = function () { return Mod2BoundaryNodeRule };
31506         staticAccessors$12.EndPointBoundaryNodeRule.get = function () { return EndPointBoundaryNodeRule };
31507         staticAccessors$12.MultiValentEndPointBoundaryNodeRule.get = function () { return MultiValentEndPointBoundaryNodeRule };
31508         staticAccessors$12.MonoValentEndPointBoundaryNodeRule.get = function () { return MonoValentEndPointBoundaryNodeRule };
31509         staticAccessors$12.MOD2_BOUNDARY_RULE.get = function () { return new Mod2BoundaryNodeRule() };
31510         staticAccessors$12.ENDPOINT_BOUNDARY_RULE.get = function () { return new EndPointBoundaryNodeRule() };
31511         staticAccessors$12.MULTIVALENT_ENDPOINT_BOUNDARY_RULE.get = function () { return new MultiValentEndPointBoundaryNodeRule() };
31512         staticAccessors$12.MONOVALENT_ENDPOINT_BOUNDARY_RULE.get = function () { return new MonoValentEndPointBoundaryNodeRule() };
31513         staticAccessors$12.OGC_SFS_BOUNDARY_RULE.get = function () { return BoundaryNodeRule.MOD2_BOUNDARY_RULE };
31514
31515         Object.defineProperties( BoundaryNodeRule, staticAccessors$12 );
31516
31517         var Mod2BoundaryNodeRule = function Mod2BoundaryNodeRule () {};
31518
31519         Mod2BoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {
31520           return boundaryCount % 2 === 1
31521         };
31522         Mod2BoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
31523           return [BoundaryNodeRule]
31524         };
31525         Mod2BoundaryNodeRule.prototype.getClass = function getClass () {
31526           return Mod2BoundaryNodeRule
31527         };
31528
31529         var EndPointBoundaryNodeRule = function EndPointBoundaryNodeRule () {};
31530
31531         EndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {
31532           return boundaryCount > 0
31533         };
31534         EndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
31535           return [BoundaryNodeRule]
31536         };
31537         EndPointBoundaryNodeRule.prototype.getClass = function getClass () {
31538           return EndPointBoundaryNodeRule
31539         };
31540
31541         var MultiValentEndPointBoundaryNodeRule = function MultiValentEndPointBoundaryNodeRule () {};
31542
31543         MultiValentEndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {
31544           return boundaryCount > 1
31545         };
31546         MultiValentEndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
31547           return [BoundaryNodeRule]
31548         };
31549         MultiValentEndPointBoundaryNodeRule.prototype.getClass = function getClass () {
31550           return MultiValentEndPointBoundaryNodeRule
31551         };
31552
31553         var MonoValentEndPointBoundaryNodeRule = function MonoValentEndPointBoundaryNodeRule () {};
31554
31555         MonoValentEndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {
31556           return boundaryCount === 1
31557         };
31558         MonoValentEndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
31559           return [BoundaryNodeRule]
31560         };
31561         MonoValentEndPointBoundaryNodeRule.prototype.getClass = function getClass () {
31562           return MonoValentEndPointBoundaryNodeRule
31563         };
31564
31565         // import Iterator from './Iterator'
31566
31567         /**
31568          * @see http://download.oracle.com/javase/6/docs/api/java/util/Collection.html
31569          *
31570          * @constructor
31571          * @private
31572          */
31573         var Collection = function Collection () {};
31574
31575         Collection.prototype.add = function add () {};
31576
31577         /**
31578          * Appends all of the elements in the specified collection to the end of this
31579          * list, in the order that they are returned by the specified collection's
31580          * iterator (optional operation).
31581          * @param {javascript.util.Collection} c
31582          * @return {boolean}
31583          */
31584         Collection.prototype.addAll = function addAll () {};
31585
31586         /**
31587          * Returns true if this collection contains no elements.
31588          * @return {boolean}
31589          */
31590         Collection.prototype.isEmpty = function isEmpty () {};
31591
31592         /**
31593          * Returns an iterator over the elements in this collection.
31594          * @return {javascript.util.Iterator}
31595          */
31596         Collection.prototype.iterator = function iterator () {};
31597
31598         /**
31599          * Returns an iterator over the elements in this collection.
31600          * @return {number}
31601          */
31602         Collection.prototype.size = function size () {};
31603
31604         /**
31605          * Returns an array containing all of the elements in this collection.
31606          * @return {Array}
31607          */
31608         Collection.prototype.toArray = function toArray () {};
31609
31610         /**
31611          * Removes a single instance of the specified element from this collection if it
31612          * is present. (optional)
31613          * @param {Object} e
31614          * @return {boolean}
31615          */
31616         Collection.prototype.remove = function remove () {};
31617
31618         /**
31619          * @param {string=} message Optional message
31620          * @extends {Error}
31621          * @constructor
31622          * @private
31623          */
31624         function IndexOutOfBoundsException (message) {
31625           this.message = message || '';
31626         }
31627         IndexOutOfBoundsException.prototype = new Error();
31628
31629         /**
31630          * @type {string}
31631          */
31632         IndexOutOfBoundsException.prototype.name = 'IndexOutOfBoundsException';
31633
31634         /**
31635          * @see http://download.oracle.com/javase/6/docs/api/java/util/Iterator.html
31636          * @constructor
31637          * @private
31638          */
31639         var Iterator$1 = function Iterator () {};
31640
31641         Iterator$1.prototype.hasNext = function hasNext () {};
31642
31643         /**
31644          * Returns the next element in the iteration.
31645          * @return {Object}
31646          */
31647         Iterator$1.prototype.next = function next () {};
31648
31649         /**
31650          * Removes from the underlying collection the last element returned by the
31651          * iterator (optional operation).
31652          */
31653         Iterator$1.prototype.remove = function remove () {};
31654
31655         /**
31656          * @see http://download.oracle.com/javase/6/docs/api/java/util/List.html
31657          *
31658          * @extends {javascript.util.Collection}
31659          * @constructor
31660          * @private
31661          */
31662         var List = (function (Collection$$1) {
31663           function List () {
31664             Collection$$1.apply(this, arguments);
31665           }
31666
31667           if ( Collection$$1 ) { List.__proto__ = Collection$$1; }
31668           List.prototype = Object.create( Collection$$1 && Collection$$1.prototype );
31669           List.prototype.constructor = List;
31670
31671           List.prototype.get = function get () { };
31672
31673           /**
31674            * Replaces the element at the specified position in this list with the
31675            * specified element (optional operation).
31676            * @param {number} index
31677            * @param {Object} e
31678            * @return {Object}
31679            */
31680           List.prototype.set = function set () { };
31681
31682           /**
31683            * Returns true if this collection contains no elements.
31684            * @return {boolean}
31685            */
31686           List.prototype.isEmpty = function isEmpty () { };
31687
31688           return List;
31689         }(Collection));
31690
31691         /**
31692          * @param {string=} message Optional message
31693          * @extends {Error}
31694          * @constructor
31695          * @private
31696          */
31697         function NoSuchElementException (message) {
31698           this.message = message || '';
31699         }
31700         NoSuchElementException.prototype = new Error();
31701
31702         /**
31703          * @type {string}
31704          */
31705         NoSuchElementException.prototype.name = 'NoSuchElementException';
31706
31707         // import OperationNotSupported from './OperationNotSupported'
31708
31709         /**
31710          * @see http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html
31711          *
31712          * @extends List
31713          * @private
31714          */
31715         var ArrayList = (function (List$$1) {
31716           function ArrayList () {
31717             List$$1.call(this);
31718             this.array_ = [];
31719
31720             if (arguments[0] instanceof Collection) {
31721               this.addAll(arguments[0]);
31722             }
31723           }
31724
31725           if ( List$$1 ) { ArrayList.__proto__ = List$$1; }
31726           ArrayList.prototype = Object.create( List$$1 && List$$1.prototype );
31727           ArrayList.prototype.constructor = ArrayList;
31728
31729           ArrayList.prototype.ensureCapacity = function ensureCapacity () {};
31730           ArrayList.prototype.interfaces_ = function interfaces_ () { return [List$$1, Collection] };
31731
31732           /**
31733            * @override
31734            */
31735           ArrayList.prototype.add = function add (e) {
31736             if (arguments.length === 1) {
31737               this.array_.push(e);
31738             } else {
31739               this.array_.splice(arguments[0], arguments[1]);
31740             }
31741             return true
31742           };
31743
31744           ArrayList.prototype.clear = function clear () {
31745             this.array_ = [];
31746           };
31747
31748           /**
31749            * @override
31750            */
31751           ArrayList.prototype.addAll = function addAll (c) {
31752             var this$1 = this;
31753
31754             for (var i = c.iterator(); i.hasNext();) {
31755               this$1.add(i.next());
31756             }
31757             return true
31758           };
31759
31760           /**
31761            * @override
31762            */
31763           ArrayList.prototype.set = function set (index, element) {
31764             var oldElement = this.array_[index];
31765             this.array_[index] = element;
31766             return oldElement
31767           };
31768
31769           /**
31770            * @override
31771            */
31772           ArrayList.prototype.iterator = function iterator () {
31773             return new Iterator_(this)
31774           };
31775
31776           /**
31777            * @override
31778            */
31779           ArrayList.prototype.get = function get (index) {
31780             if (index < 0 || index >= this.size()) {
31781               throw new IndexOutOfBoundsException()
31782             }
31783
31784             return this.array_[index]
31785           };
31786
31787           /**
31788            * @override
31789            */
31790           ArrayList.prototype.isEmpty = function isEmpty () {
31791             return this.array_.length === 0
31792           };
31793
31794           /**
31795            * @override
31796            */
31797           ArrayList.prototype.size = function size () {
31798             return this.array_.length
31799           };
31800
31801           /**
31802            * @override
31803            */
31804           ArrayList.prototype.toArray = function toArray () {
31805             var this$1 = this;
31806
31807             var array = [];
31808
31809             for (var i = 0, len = this.array_.length; i < len; i++) {
31810               array.push(this$1.array_[i]);
31811             }
31812
31813             return array
31814           };
31815
31816           /**
31817            * @override
31818            */
31819           ArrayList.prototype.remove = function remove (o) {
31820             var this$1 = this;
31821
31822             var found = false;
31823
31824             for (var i = 0, len = this.array_.length; i < len; i++) {
31825               if (this$1.array_[i] === o) {
31826                 this$1.array_.splice(i, 1);
31827                 found = true;
31828                 break
31829               }
31830             }
31831
31832             return found
31833           };
31834
31835           return ArrayList;
31836         }(List));
31837
31838         /**
31839          * @extends {Iterator}
31840          * @param {ArrayList} arrayList
31841          * @constructor
31842          * @private
31843          */
31844         var Iterator_ = (function (Iterator$$1) {
31845           function Iterator_ (arrayList) {
31846             Iterator$$1.call(this);
31847             /**
31848              * @type {ArrayList}
31849              * @private
31850             */
31851             this.arrayList_ = arrayList;
31852             /**
31853              * @type {number}
31854              * @private
31855             */
31856             this.position_ = 0;
31857           }
31858
31859           if ( Iterator$$1 ) { Iterator_.__proto__ = Iterator$$1; }
31860           Iterator_.prototype = Object.create( Iterator$$1 && Iterator$$1.prototype );
31861           Iterator_.prototype.constructor = Iterator_;
31862
31863           /**
31864            * @override
31865            */
31866           Iterator_.prototype.next = function next () {
31867             if (this.position_ === this.arrayList_.size()) {
31868               throw new NoSuchElementException()
31869             }
31870             return this.arrayList_.get(this.position_++)
31871           };
31872
31873           /**
31874            * @override
31875            */
31876           Iterator_.prototype.hasNext = function hasNext () {
31877             if (this.position_ < this.arrayList_.size()) {
31878               return true
31879             } else {
31880               return false
31881             }
31882           };
31883
31884           /**
31885            * TODO: should be in ListIterator
31886            * @override
31887            */
31888           Iterator_.prototype.set = function set (element) {
31889             return this.arrayList_.set(this.position_ - 1, element)
31890           };
31891
31892           /**
31893            * @override
31894            */
31895           Iterator_.prototype.remove = function remove () {
31896             this.arrayList_.remove(this.arrayList_.get(this.position_));
31897           };
31898
31899           return Iterator_;
31900         }(Iterator$1));
31901
31902         var CoordinateList = (function (ArrayList$$1) {
31903           function CoordinateList () {
31904             ArrayList$$1.call(this);
31905             if (arguments.length === 0) ; else if (arguments.length === 1) {
31906               var coord = arguments[0];
31907               this.ensureCapacity(coord.length);
31908               this.add(coord, true);
31909             } else if (arguments.length === 2) {
31910               var coord$1 = arguments[0];
31911               var allowRepeated = arguments[1];
31912               this.ensureCapacity(coord$1.length);
31913               this.add(coord$1, allowRepeated);
31914             }
31915           }
31916
31917           if ( ArrayList$$1 ) { CoordinateList.__proto__ = ArrayList$$1; }
31918           CoordinateList.prototype = Object.create( ArrayList$$1 && ArrayList$$1.prototype );
31919           CoordinateList.prototype.constructor = CoordinateList;
31920
31921           var staticAccessors = { coordArrayType: { configurable: true } };
31922           staticAccessors.coordArrayType.get = function () { return new Array(0).fill(null) };
31923           CoordinateList.prototype.getCoordinate = function getCoordinate (i) {
31924             return this.get(i)
31925           };
31926           CoordinateList.prototype.addAll = function addAll () {
31927             var this$1 = this;
31928
31929             if (arguments.length === 2) {
31930               var coll = arguments[0];
31931               var allowRepeated = arguments[1];
31932               var isChanged = false;
31933               for (var i = coll.iterator(); i.hasNext();) {
31934                 this$1.add(i.next(), allowRepeated);
31935                 isChanged = true;
31936               }
31937               return isChanged
31938             } else { return ArrayList$$1.prototype.addAll.apply(this, arguments) }
31939           };
31940           CoordinateList.prototype.clone = function clone () {
31941             var this$1 = this;
31942
31943             var clone = ArrayList$$1.prototype.clone.call(this);
31944             for (var i = 0; i < this.size(); i++) {
31945               clone.add(i, this$1.get(i).copy());
31946             }
31947             return clone
31948           };
31949           CoordinateList.prototype.toCoordinateArray = function toCoordinateArray () {
31950             return this.toArray(CoordinateList.coordArrayType)
31951           };
31952           CoordinateList.prototype.add = function add () {
31953             var this$1 = this;
31954
31955             if (arguments.length === 1) {
31956               var coord = arguments[0];
31957               ArrayList$$1.prototype.add.call(this, coord);
31958             } else if (arguments.length === 2) {
31959               if (arguments[0] instanceof Array && typeof arguments[1] === 'boolean') {
31960                 var coord$1 = arguments[0];
31961                 var allowRepeated = arguments[1];
31962                 this.add(coord$1, allowRepeated, true);
31963                 return true
31964               } else if (arguments[0] instanceof Coordinate && typeof arguments[1] === 'boolean') {
31965                 var coord$2 = arguments[0];
31966                 var allowRepeated$1 = arguments[1];
31967                 if (!allowRepeated$1) {
31968                   if (this.size() >= 1) {
31969                     var last = this.get(this.size() - 1);
31970                     if (last.equals2D(coord$2)) { return null }
31971                   }
31972                 }
31973                 ArrayList$$1.prototype.add.call(this, coord$2);
31974               } else if (arguments[0] instanceof Object && typeof arguments[1] === 'boolean') {
31975                 var obj = arguments[0];
31976                 var allowRepeated$2 = arguments[1];
31977                 this.add(obj, allowRepeated$2);
31978                 return true
31979               }
31980             } else if (arguments.length === 3) {
31981               if (typeof arguments[2] === 'boolean' && (arguments[0] instanceof Array && typeof arguments[1] === 'boolean')) {
31982                 var coord$3 = arguments[0];
31983                 var allowRepeated$3 = arguments[1];
31984                 var direction = arguments[2];
31985                 if (direction) {
31986                   for (var i$1 = 0; i$1 < coord$3.length; i$1++) {
31987                     this$1.add(coord$3[i$1], allowRepeated$3);
31988                   }
31989                 } else {
31990                   for (var i$2 = coord$3.length - 1; i$2 >= 0; i$2--) {
31991                     this$1.add(coord$3[i$2], allowRepeated$3);
31992                   }
31993                 }
31994                 return true
31995               } else if (typeof arguments[2] === 'boolean' && (Number.isInteger(arguments[0]) && arguments[1] instanceof Coordinate)) {
31996                 var i$3 = arguments[0];
31997                 var coord$4 = arguments[1];
31998                 var allowRepeated$4 = arguments[2];
31999                 if (!allowRepeated$4) {
32000                   var size = this.size();
32001                   if (size > 0) {
32002                     if (i$3 > 0) {
32003                       var prev = this.get(i$3 - 1);
32004                       if (prev.equals2D(coord$4)) { return null }
32005                     }
32006                     if (i$3 < size) {
32007                       var next = this.get(i$3);
32008                       if (next.equals2D(coord$4)) { return null }
32009                     }
32010                   }
32011                 }
32012                 ArrayList$$1.prototype.add.call(this, i$3, coord$4);
32013               }
32014             } else if (arguments.length === 4) {
32015               var coord$5 = arguments[0];
32016               var allowRepeated$5 = arguments[1];
32017               var start = arguments[2];
32018               var end = arguments[3];
32019               var inc = 1;
32020               if (start > end) { inc = -1; }
32021               for (var i = start; i !== end; i += inc) {
32022                 this$1.add(coord$5[i], allowRepeated$5);
32023               }
32024               return true
32025             }
32026           };
32027           CoordinateList.prototype.closeRing = function closeRing () {
32028             if (this.size() > 0) { this.add(new Coordinate(this.get(0)), false); }
32029           };
32030           CoordinateList.prototype.interfaces_ = function interfaces_ () {
32031             return []
32032           };
32033           CoordinateList.prototype.getClass = function getClass () {
32034             return CoordinateList
32035           };
32036
32037           Object.defineProperties( CoordinateList, staticAccessors );
32038
32039           return CoordinateList;
32040         }(ArrayList));
32041
32042         var CoordinateArrays = function CoordinateArrays () {};
32043
32044         var staticAccessors$13 = { ForwardComparator: { configurable: true },BidirectionalComparator: { configurable: true },coordArrayType: { configurable: true } };
32045
32046         staticAccessors$13.ForwardComparator.get = function () { return ForwardComparator };
32047         staticAccessors$13.BidirectionalComparator.get = function () { return BidirectionalComparator };
32048         staticAccessors$13.coordArrayType.get = function () { return new Array(0).fill(null) };
32049
32050         CoordinateArrays.prototype.interfaces_ = function interfaces_ () {
32051           return []
32052         };
32053         CoordinateArrays.prototype.getClass = function getClass () {
32054           return CoordinateArrays
32055         };
32056         CoordinateArrays.isRing = function isRing (pts) {
32057           if (pts.length < 4) { return false }
32058           if (!pts[0].equals2D(pts[pts.length - 1])) { return false }
32059           return true
32060         };
32061         CoordinateArrays.ptNotInList = function ptNotInList (testPts, pts) {
32062           for (var i = 0; i < testPts.length; i++) {
32063             var testPt = testPts[i];
32064             if (CoordinateArrays.indexOf(testPt, pts) < 0) { return testPt }
32065           }
32066           return null
32067         };
32068         CoordinateArrays.scroll = function scroll (coordinates, firstCoordinate) {
32069           var i = CoordinateArrays.indexOf(firstCoordinate, coordinates);
32070           if (i < 0) { return null }
32071           var newCoordinates = new Array(coordinates.length).fill(null);
32072           System.arraycopy(coordinates, i, newCoordinates, 0, coordinates.length - i);
32073           System.arraycopy(coordinates, 0, newCoordinates, coordinates.length - i, i);
32074           System.arraycopy(newCoordinates, 0, coordinates, 0, coordinates.length);
32075         };
32076         CoordinateArrays.equals = function equals () {
32077           if (arguments.length === 2) {
32078             var coord1 = arguments[0];
32079             var coord2 = arguments[1];
32080             if (coord1 === coord2) { return true }
32081             if (coord1 === null || coord2 === null) { return false }
32082             if (coord1.length !== coord2.length) { return false }
32083             for (var i = 0; i < coord1.length; i++) {
32084               if (!coord1[i].equals(coord2[i])) { return false }
32085             }
32086             return true
32087           } else if (arguments.length === 3) {
32088             var coord1$1 = arguments[0];
32089             var coord2$1 = arguments[1];
32090             var coordinateComparator = arguments[2];
32091             if (coord1$1 === coord2$1) { return true }
32092             if (coord1$1 === null || coord2$1 === null) { return false }
32093             if (coord1$1.length !== coord2$1.length) { return false }
32094             for (var i$1 = 0; i$1 < coord1$1.length; i$1++) {
32095               if (coordinateComparator.compare(coord1$1[i$1], coord2$1[i$1]) !== 0) { return false }
32096             }
32097             return true
32098           }
32099         };
32100         CoordinateArrays.intersection = function intersection (coordinates, env) {
32101           var coordList = new CoordinateList();
32102           for (var i = 0; i < coordinates.length; i++) {
32103             if (env.intersects(coordinates[i])) { coordList.add(coordinates[i], true); }
32104           }
32105           return coordList.toCoordinateArray()
32106         };
32107         CoordinateArrays.hasRepeatedPoints = function hasRepeatedPoints (coord) {
32108           for (var i = 1; i < coord.length; i++) {
32109             if (coord[i - 1].equals(coord[i])) {
32110               return true
32111             }
32112           }
32113           return false
32114         };
32115         CoordinateArrays.removeRepeatedPoints = function removeRepeatedPoints (coord) {
32116           if (!CoordinateArrays.hasRepeatedPoints(coord)) { return coord }
32117           var coordList = new CoordinateList(coord, false);
32118           return coordList.toCoordinateArray()
32119         };
32120         CoordinateArrays.reverse = function reverse (coord) {
32121           var last = coord.length - 1;
32122           var mid = Math.trunc(last / 2);
32123           for (var i = 0; i <= mid; i++) {
32124             var tmp = coord[i];
32125             coord[i] = coord[last - i];
32126             coord[last - i] = tmp;
32127           }
32128         };
32129         CoordinateArrays.removeNull = function removeNull (coord) {
32130           var nonNull = 0;
32131           for (var i = 0; i < coord.length; i++) {
32132             if (coord[i] !== null) { nonNull++; }
32133           }
32134           var newCoord = new Array(nonNull).fill(null);
32135           if (nonNull === 0) { return newCoord }
32136           var j = 0;
32137           for (var i$1 = 0; i$1 < coord.length; i$1++) {
32138             if (coord[i$1] !== null) { newCoord[j++] = coord[i$1]; }
32139           }
32140           return newCoord
32141         };
32142         CoordinateArrays.copyDeep = function copyDeep () {
32143           if (arguments.length === 1) {
32144             var coordinates = arguments[0];
32145             var copy = new Array(coordinates.length).fill(null);
32146             for (var i = 0; i < coordinates.length; i++) {
32147               copy[i] = new Coordinate(coordinates[i]);
32148             }
32149             return copy
32150           } else if (arguments.length === 5) {
32151             var src = arguments[0];
32152             var srcStart = arguments[1];
32153             var dest = arguments[2];
32154             var destStart = arguments[3];
32155             var length = arguments[4];
32156             for (var i$1 = 0; i$1 < length; i$1++) {
32157               dest[destStart + i$1] = new Coordinate(src[srcStart + i$1]);
32158             }
32159           }
32160         };
32161         CoordinateArrays.isEqualReversed = function isEqualReversed (pts1, pts2) {
32162           for (var i = 0; i < pts1.length; i++) {
32163             var p1 = pts1[i];
32164             var p2 = pts2[pts1.length - i - 1];
32165             if (p1.compareTo(p2) !== 0) { return false }
32166           }
32167           return true
32168         };
32169         CoordinateArrays.envelope = function envelope (coordinates) {
32170           var env = new Envelope();
32171           for (var i = 0; i < coordinates.length; i++) {
32172             env.expandToInclude(coordinates[i]);
32173           }
32174           return env
32175         };
32176         CoordinateArrays.toCoordinateArray = function toCoordinateArray (coordList) {
32177           return coordList.toArray(CoordinateArrays.coordArrayType)
32178         };
32179         CoordinateArrays.atLeastNCoordinatesOrNothing = function atLeastNCoordinatesOrNothing (n, c) {
32180           return c.length >= n ? c : []
32181         };
32182         CoordinateArrays.indexOf = function indexOf (coordinate, coordinates) {
32183           for (var i = 0; i < coordinates.length; i++) {
32184             if (coordinate.equals(coordinates[i])) {
32185               return i
32186             }
32187           }
32188           return -1
32189         };
32190         CoordinateArrays.increasingDirection = function increasingDirection (pts) {
32191           for (var i = 0; i < Math.trunc(pts.length / 2); i++) {
32192             var j = pts.length - 1 - i;
32193             var comp = pts[i].compareTo(pts[j]);
32194             if (comp !== 0) { return comp }
32195           }
32196           return 1
32197         };
32198         CoordinateArrays.compare = function compare (pts1, pts2) {
32199           var i = 0;
32200           while (i < pts1.length && i < pts2.length) {
32201             var compare = pts1[i].compareTo(pts2[i]);
32202             if (compare !== 0) { return compare }
32203             i++;
32204           }
32205           if (i < pts2.length) { return -1 }
32206           if (i < pts1.length) { return 1 }
32207           return 0
32208         };
32209         CoordinateArrays.minCoordinate = function minCoordinate (coordinates) {
32210           var minCoord = null;
32211           for (var i = 0; i < coordinates.length; i++) {
32212             if (minCoord === null || minCoord.compareTo(coordinates[i]) > 0) {
32213               minCoord = coordinates[i];
32214             }
32215           }
32216           return minCoord
32217         };
32218         CoordinateArrays.extract = function extract (pts, start, end) {
32219           start = MathUtil.clamp(start, 0, pts.length);
32220           end = MathUtil.clamp(end, -1, pts.length);
32221           var npts = end - start + 1;
32222           if (end < 0) { npts = 0; }
32223           if (start >= pts.length) { npts = 0; }
32224           if (end < start) { npts = 0; }
32225           var extractPts = new Array(npts).fill(null);
32226           if (npts === 0) { return extractPts }
32227           var iPts = 0;
32228           for (var i = start; i <= end; i++) {
32229             extractPts[iPts++] = pts[i];
32230           }
32231           return extractPts
32232         };
32233
32234         Object.defineProperties( CoordinateArrays, staticAccessors$13 );
32235
32236         var ForwardComparator = function ForwardComparator () {};
32237
32238         ForwardComparator.prototype.compare = function compare (o1, o2) {
32239           var pts1 = o1;
32240           var pts2 = o2;
32241           return CoordinateArrays.compare(pts1, pts2)
32242         };
32243         ForwardComparator.prototype.interfaces_ = function interfaces_ () {
32244           return [Comparator]
32245         };
32246         ForwardComparator.prototype.getClass = function getClass () {
32247           return ForwardComparator
32248         };
32249
32250         var BidirectionalComparator = function BidirectionalComparator () {};
32251
32252         BidirectionalComparator.prototype.compare = function compare (o1, o2) {
32253           var pts1 = o1;
32254           var pts2 = o2;
32255           if (pts1.length < pts2.length) { return -1 }
32256           if (pts1.length > pts2.length) { return 1 }
32257           if (pts1.length === 0) { return 0 }
32258           var forwardComp = CoordinateArrays.compare(pts1, pts2);
32259           var isEqualRev = CoordinateArrays.isEqualReversed(pts1, pts2);
32260           if (isEqualRev) { return 0 }
32261           return forwardComp
32262         };
32263         BidirectionalComparator.prototype.OLDcompare = function OLDcompare (o1, o2) {
32264           var pts1 = o1;
32265           var pts2 = o2;
32266           if (pts1.length < pts2.length) { return -1 }
32267           if (pts1.length > pts2.length) { return 1 }
32268           if (pts1.length === 0) { return 0 }
32269           var dir1 = CoordinateArrays.increasingDirection(pts1);
32270           var dir2 = CoordinateArrays.increasingDirection(pts2);
32271           var i1 = dir1 > 0 ? 0 : pts1.length - 1;
32272           var i2 = dir2 > 0 ? 0 : pts1.length - 1;
32273           for (var i = 0; i < pts1.length; i++) {
32274             var comparePt = pts1[i1].compareTo(pts2[i2]);
32275             if (comparePt !== 0) { return comparePt }
32276             i1 += dir1;
32277             i2 += dir2;
32278           }
32279           return 0
32280         };
32281         BidirectionalComparator.prototype.interfaces_ = function interfaces_ () {
32282           return [Comparator]
32283         };
32284         BidirectionalComparator.prototype.getClass = function getClass () {
32285           return BidirectionalComparator
32286         };
32287
32288         /**
32289          * @see http://download.oracle.com/javase/6/docs/api/java/util/Map.html
32290          *
32291          * @constructor
32292          * @private
32293          */
32294         var Map$1$1 = function Map () {};
32295
32296         Map$1$1.prototype.get = function get () {};
32297         /**
32298          * Associates the specified value with the specified key in this map (optional
32299          * operation).
32300          * @param {Object} key
32301          * @param {Object} value
32302          * @return {Object}
32303          */
32304         Map$1$1.prototype.put = function put () {};
32305
32306         /**
32307          * Returns the number of key-value mappings in this map.
32308          * @return {number}
32309          */
32310         Map$1$1.prototype.size = function size () {};
32311
32312         /**
32313          * Returns a Collection view of the values contained in this map.
32314          * @return {javascript.util.Collection}
32315          */
32316         Map$1$1.prototype.values = function values () {};
32317
32318         /**
32319          * Returns a {@link Set} view of the mappings contained in this map.
32320          * The set is backed by the map, so changes to the map are
32321          * reflected in the set, and vice-versa.If the map is modified
32322          * while an iteration over the set is in progress (except through
32323          * the iterator's own <tt>remove</tt> operation, or through the
32324          * <tt>setValue</tt> operation on a map entry returned by the
32325          * iterator) the results of the iteration are undefined.The set
32326          * supports element removal, which removes the corresponding
32327          * mapping from the map, via the <tt>Iterator.remove</tt>,
32328          * <tt>Set.remove</tt>, <tt>removeAll</tt>, <tt>retainAll</tt> and
32329          * <tt>clear</tt> operations.It does not support the
32330          * <tt>add</tt> or <tt>addAll</tt> operations.
32331          *
32332          * @return {Set} a set view of the mappings contained in this map
32333          */
32334         Map$1$1.prototype.entrySet = function entrySet () {};
32335
32336         /**
32337          * @see http://download.oracle.com/javase/6/docs/api/java/util/SortedMap.html
32338          *
32339          * @extends {Map}
32340          * @constructor
32341          * @private
32342          */
32343         var SortedMap = (function (Map) {
32344                 function SortedMap () {
32345                         Map.apply(this, arguments);
32346                 }if ( Map ) { SortedMap.__proto__ = Map; }
32347                 SortedMap.prototype = Object.create( Map && Map.prototype );
32348                 SortedMap.prototype.constructor = SortedMap;
32349
32350                 
32351
32352                 return SortedMap;
32353         }(Map$1$1));
32354
32355         /**
32356          * @param {string=} message Optional message
32357          * @extends {Error}
32358          * @constructor
32359          * @private
32360          */
32361         function OperationNotSupported (message) {
32362           this.message = message || '';
32363         }
32364         OperationNotSupported.prototype = new Error();
32365
32366         /**
32367          * @type {string}
32368          */
32369         OperationNotSupported.prototype.name = 'OperationNotSupported';
32370
32371         /**
32372          * @see http://download.oracle.com/javase/6/docs/api/java/util/Set.html
32373          *
32374          * @extends {Collection}
32375          * @constructor
32376          * @private
32377          */
32378         function Set$2() {}
32379         Set$2.prototype = new Collection();
32380
32381
32382         /**
32383          * Returns true if this set contains the specified element. More formally,
32384          * returns true if and only if this set contains an element e such that (o==null ?
32385          * e==null : o.equals(e)).
32386          * @param {Object} e
32387          * @return {boolean}
32388          */
32389         Set$2.prototype.contains = function() {};
32390
32391         /**
32392          * @see http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html
32393          *
32394          * @extends {javascript.util.Set}
32395          * @constructor
32396          * @private
32397          */
32398         var HashSet = (function (Set$$1) {
32399           function HashSet () {
32400             Set$$1.call(this);
32401             this.array_ = [];
32402
32403             if (arguments[0] instanceof Collection) {
32404               this.addAll(arguments[0]);
32405             }
32406           }
32407
32408           if ( Set$$1 ) { HashSet.__proto__ = Set$$1; }
32409           HashSet.prototype = Object.create( Set$$1 && Set$$1.prototype );
32410           HashSet.prototype.constructor = HashSet;
32411
32412           /**
32413            * @override
32414            */
32415           HashSet.prototype.contains = function contains (o) {
32416             var this$1 = this;
32417
32418             for (var i = 0, len = this.array_.length; i < len; i++) {
32419               var e = this$1.array_[i];
32420               if (e === o) {
32421                 return true
32422               }
32423             }
32424             return false
32425           };
32426
32427           /**
32428            * @override
32429            */
32430           HashSet.prototype.add = function add (o) {
32431             if (this.contains(o)) {
32432               return false
32433             }
32434
32435             this.array_.push(o);
32436
32437             return true
32438           };
32439
32440           /**
32441            * @override
32442            */
32443           HashSet.prototype.addAll = function addAll (c) {
32444             var this$1 = this;
32445
32446             for (var i = c.iterator(); i.hasNext();) {
32447               this$1.add(i.next());
32448             }
32449             return true
32450           };
32451
32452           /**
32453            * @override
32454            */
32455           HashSet.prototype.remove = function remove (o) {
32456             // throw new javascript.util.OperationNotSupported()
32457             throw new Error()
32458           };
32459
32460           /**
32461            * @override
32462            */
32463           HashSet.prototype.size = function size () {
32464             return this.array_.length
32465           };
32466
32467           /**
32468            * @override
32469            */
32470           HashSet.prototype.isEmpty = function isEmpty () {
32471             return this.array_.length === 0
32472           };
32473
32474           /**
32475            * @override
32476            */
32477           HashSet.prototype.toArray = function toArray () {
32478             var this$1 = this;
32479
32480             var array = [];
32481
32482             for (var i = 0, len = this.array_.length; i < len; i++) {
32483               array.push(this$1.array_[i]);
32484             }
32485
32486             return array
32487           };
32488
32489           /**
32490            * @override
32491            */
32492           HashSet.prototype.iterator = function iterator () {
32493             return new Iterator_$1(this)
32494           };
32495
32496           return HashSet;
32497         }(Set$2));
32498
32499         /**
32500            * @extends {Iterator}
32501            * @param {HashSet} hashSet
32502            * @constructor
32503            * @private
32504            */
32505         var Iterator_$1 = (function (Iterator$$1) {
32506           function Iterator_ (hashSet) {
32507             Iterator$$1.call(this);
32508             /**
32509              * @type {HashSet}
32510              * @private
32511              */
32512             this.hashSet_ = hashSet;
32513             /**
32514              * @type {number}
32515              * @private
32516              */
32517             this.position_ = 0;
32518           }
32519
32520           if ( Iterator$$1 ) { Iterator_.__proto__ = Iterator$$1; }
32521           Iterator_.prototype = Object.create( Iterator$$1 && Iterator$$1.prototype );
32522           Iterator_.prototype.constructor = Iterator_;
32523
32524           /**
32525            * @override
32526            */
32527           Iterator_.prototype.next = function next () {
32528             if (this.position_ === this.hashSet_.size()) {
32529               throw new NoSuchElementException()
32530             }
32531             return this.hashSet_.array_[this.position_++]
32532           };
32533
32534           /**
32535            * @override
32536            */
32537           Iterator_.prototype.hasNext = function hasNext () {
32538             if (this.position_ < this.hashSet_.size()) {
32539               return true
32540             } else {
32541               return false
32542             }
32543           };
32544
32545           /**
32546            * @override
32547            */
32548           Iterator_.prototype.remove = function remove () {
32549             throw new OperationNotSupported()
32550           };
32551
32552           return Iterator_;
32553         }(Iterator$1));
32554
32555         var BLACK = 0;
32556         var RED = 1;
32557         function colorOf (p) { return (p === null ? BLACK : p.color) }
32558         function parentOf (p) { return (p === null ? null : p.parent) }
32559         function setColor (p, c) { if (p !== null) { p.color = c; } }
32560         function leftOf (p) { return (p === null ? null : p.left) }
32561         function rightOf (p) { return (p === null ? null : p.right) }
32562
32563         /**
32564          * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeMap.html
32565          *
32566          * @extends {SortedMap}
32567          * @constructor
32568          * @private
32569          */
32570         function TreeMap () {
32571           /**
32572            * @type {Object}
32573            * @private
32574            */
32575           this.root_ = null;
32576           /**
32577            * @type {number}
32578            * @private
32579           */
32580           this.size_ = 0;
32581         }
32582         TreeMap.prototype = new SortedMap();
32583
32584         /**
32585          * @override
32586          */
32587         TreeMap.prototype.get = function (key) {
32588           var p = this.root_;
32589           while (p !== null) {
32590             var cmp = key['compareTo'](p.key);
32591             if (cmp < 0) { p = p.left; }
32592             else if (cmp > 0) { p = p.right; }
32593             else { return p.value }
32594           }
32595           return null
32596         };
32597
32598         /**
32599          * @override
32600          */
32601         TreeMap.prototype.put = function (key, value) {
32602           if (this.root_ === null) {
32603             this.root_ = {
32604               key: key,
32605               value: value,
32606               left: null,
32607               right: null,
32608               parent: null,
32609               color: BLACK,
32610               getValue: function getValue () { return this.value },
32611               getKey: function getKey () { return this.key }
32612             };
32613             this.size_ = 1;
32614             return null
32615           }
32616           var t = this.root_;
32617           var parent;
32618           var cmp;
32619           do {
32620             parent = t;
32621             cmp = key['compareTo'](t.key);
32622             if (cmp < 0) {
32623               t = t.left;
32624             } else if (cmp > 0) {
32625               t = t.right;
32626             } else {
32627               var oldValue = t.value;
32628               t.value = value;
32629               return oldValue
32630             }
32631           } while (t !== null)
32632           var e = {
32633             key: key,
32634             left: null,
32635             right: null,
32636             value: value,
32637             parent: parent,
32638             color: BLACK,
32639             getValue: function getValue () { return this.value },
32640             getKey: function getKey () { return this.key }
32641           };
32642           if (cmp < 0) {
32643             parent.left = e;
32644           } else {
32645             parent.right = e;
32646           }
32647           this.fixAfterInsertion(e);
32648           this.size_++;
32649           return null
32650         };
32651
32652         /**
32653          * @param {Object} x
32654          */
32655         TreeMap.prototype.fixAfterInsertion = function (x) {
32656           var this$1 = this;
32657
32658           x.color = RED;
32659           while (x != null && x !== this.root_ && x.parent.color === RED) {
32660             if (parentOf(x) === leftOf(parentOf(parentOf(x)))) {
32661               var y = rightOf(parentOf(parentOf(x)));
32662               if (colorOf(y) === RED) {
32663                 setColor(parentOf(x), BLACK);
32664                 setColor(y, BLACK);
32665                 setColor(parentOf(parentOf(x)), RED);
32666                 x = parentOf(parentOf(x));
32667               } else {
32668                 if (x === rightOf(parentOf(x))) {
32669                   x = parentOf(x);
32670                   this$1.rotateLeft(x);
32671                 }
32672                 setColor(parentOf(x), BLACK);
32673                 setColor(parentOf(parentOf(x)), RED);
32674                 this$1.rotateRight(parentOf(parentOf(x)));
32675               }
32676             } else {
32677               var y$1 = leftOf(parentOf(parentOf(x)));
32678               if (colorOf(y$1) === RED) {
32679                 setColor(parentOf(x), BLACK);
32680                 setColor(y$1, BLACK);
32681                 setColor(parentOf(parentOf(x)), RED);
32682                 x = parentOf(parentOf(x));
32683               } else {
32684                 if (x === leftOf(parentOf(x))) {
32685                   x = parentOf(x);
32686                   this$1.rotateRight(x);
32687                 }
32688                 setColor(parentOf(x), BLACK);
32689                 setColor(parentOf(parentOf(x)), RED);
32690                 this$1.rotateLeft(parentOf(parentOf(x)));
32691               }
32692             }
32693           }
32694           this.root_.color = BLACK;
32695         };
32696
32697         /**
32698          * @override
32699          */
32700         TreeMap.prototype.values = function () {
32701           var arrayList = new ArrayList();
32702           var p = this.getFirstEntry();
32703           if (p !== null) {
32704             arrayList.add(p.value);
32705             while ((p = TreeMap.successor(p)) !== null) {
32706               arrayList.add(p.value);
32707             }
32708           }
32709           return arrayList
32710         };
32711
32712         /**
32713          * @override
32714          */
32715         TreeMap.prototype.entrySet = function () {
32716           var hashSet = new HashSet();
32717           var p = this.getFirstEntry();
32718           if (p !== null) {
32719             hashSet.add(p);
32720             while ((p = TreeMap.successor(p)) !== null) {
32721               hashSet.add(p);
32722             }
32723           }
32724           return hashSet
32725         };
32726
32727         /**
32728          * @param {Object} p
32729          */
32730         TreeMap.prototype.rotateLeft = function (p) {
32731           if (p != null) {
32732             var r = p.right;
32733             p.right = r.left;
32734             if (r.left != null) { r.left.parent = p; }
32735             r.parent = p.parent;
32736             if (p.parent === null) { this.root_ = r; } else if (p.parent.left === p) { p.parent.left = r; } else { p.parent.right = r; }
32737             r.left = p;
32738             p.parent = r;
32739           }
32740         };
32741
32742         /**
32743          * @param {Object} p
32744          */
32745         TreeMap.prototype.rotateRight = function (p) {
32746           if (p != null) {
32747             var l = p.left;
32748             p.left = l.right;
32749             if (l.right != null) { l.right.parent = p; }
32750             l.parent = p.parent;
32751             if (p.parent === null) { this.root_ = l; } else if (p.parent.right === p) { p.parent.right = l; } else { p.parent.left = l; }
32752             l.right = p;
32753             p.parent = l;
32754           }
32755         };
32756
32757         /**
32758          * @return {Object}
32759          */
32760         TreeMap.prototype.getFirstEntry = function () {
32761           var p = this.root_;
32762           if (p != null) {
32763             while (p.left != null) {
32764               p = p.left;
32765             }
32766           }
32767           return p
32768         };
32769
32770         /**
32771          * @param {Object} t
32772          * @return {Object}
32773          * @private
32774          */
32775         TreeMap.successor = function (t) {
32776           if (t === null) { return null } else if (t.right !== null) {
32777             var p = t.right;
32778             while (p.left !== null) {
32779               p = p.left;
32780             }
32781             return p
32782           } else {
32783             var p$1 = t.parent;
32784             var ch = t;
32785             while (p$1 !== null && ch === p$1.right) {
32786               ch = p$1;
32787               p$1 = p$1.parent;
32788             }
32789             return p$1
32790           }
32791         };
32792
32793         /**
32794          * @override
32795          */
32796         TreeMap.prototype.size = function () {
32797           return this.size_
32798         };
32799
32800         var Lineal = function Lineal () {};
32801
32802         Lineal.prototype.interfaces_ = function interfaces_ () {
32803           return []
32804         };
32805         Lineal.prototype.getClass = function getClass () {
32806           return Lineal
32807         };
32808
32809         /**
32810          * @see http://download.oracle.com/javase/6/docs/api/java/util/SortedSet.html
32811          *
32812          * @extends {Set}
32813          * @constructor
32814          * @private
32815          */
32816         function SortedSet () {}
32817         SortedSet.prototype = new Set$2();
32818
32819         // import Iterator from './Iterator'
32820         /**
32821          * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeSet.html
32822          *
32823          * @extends {SortedSet}
32824          * @constructor
32825          * @private
32826          */
32827         function TreeSet () {
32828           /**
32829            * @type {Array}
32830            * @private
32831           */
32832           this.array_ = [];
32833
32834           if (arguments[0] instanceof Collection) {
32835             this.addAll(arguments[0]);
32836           }
32837         }
32838         TreeSet.prototype = new SortedSet();
32839
32840         /**
32841          * @override
32842          */
32843         TreeSet.prototype.contains = function (o) {
32844           var this$1 = this;
32845
32846           for (var i = 0, len = this.array_.length; i < len; i++) {
32847             var e = this$1.array_[i];
32848             if (e['compareTo'](o) === 0) {
32849               return true
32850             }
32851           }
32852           return false
32853         };
32854
32855         /**
32856          * @override
32857          */
32858         TreeSet.prototype.add = function (o) {
32859           var this$1 = this;
32860
32861           if (this.contains(o)) {
32862             return false
32863           }
32864
32865           for (var i = 0, len = this.array_.length; i < len; i++) {
32866             var e = this$1.array_[i];
32867             if (e['compareTo'](o) === 1) {
32868               this$1.array_.splice(i, 0, o);
32869               return true
32870             }
32871           }
32872
32873           this.array_.push(o);
32874
32875           return true
32876         };
32877
32878         /**
32879          * @override
32880          */
32881         TreeSet.prototype.addAll = function (c) {
32882           var this$1 = this;
32883
32884           for (var i = c.iterator(); i.hasNext();) {
32885             this$1.add(i.next());
32886           }
32887           return true
32888         };
32889
32890         /**
32891          * @override
32892          */
32893         TreeSet.prototype.remove = function (e) {
32894           throw new OperationNotSupported()
32895         };
32896
32897         /**
32898          * @override
32899          */
32900         TreeSet.prototype.size = function () {
32901           return this.array_.length
32902         };
32903
32904         /**
32905          * @override
32906          */
32907         TreeSet.prototype.isEmpty = function () {
32908           return this.array_.length === 0
32909         };
32910
32911         /**
32912          * @override
32913          */
32914         TreeSet.prototype.toArray = function () {
32915           var this$1 = this;
32916
32917           var array = [];
32918
32919           for (var i = 0, len = this.array_.length; i < len; i++) {
32920             array.push(this$1.array_[i]);
32921           }
32922
32923           return array
32924         };
32925
32926         /**
32927          * @override
32928          */
32929         TreeSet.prototype.iterator = function () {
32930           return new Iterator_$2(this)
32931         };
32932
32933         /**
32934          * @extends {javascript.util.Iterator}
32935          * @param {javascript.util.TreeSet} treeSet
32936          * @constructor
32937          * @private
32938          */
32939         var Iterator_$2 = function (treeSet) {
32940           /**
32941            * @type {javascript.util.TreeSet}
32942            * @private
32943            */
32944           this.treeSet_ = treeSet;
32945           /**
32946            * @type {number}
32947            * @private
32948            */
32949           this.position_ = 0;
32950         };
32951
32952         /**
32953          * @override
32954          */
32955         Iterator_$2.prototype.next = function () {
32956           if (this.position_ === this.treeSet_.size()) {
32957             throw new NoSuchElementException()
32958           }
32959           return this.treeSet_.array_[this.position_++]
32960         };
32961
32962         /**
32963          * @override
32964          */
32965         Iterator_$2.prototype.hasNext = function () {
32966           if (this.position_ < this.treeSet_.size()) {
32967             return true
32968           } else {
32969             return false
32970           }
32971         };
32972
32973         /**
32974          * @override
32975          */
32976         Iterator_$2.prototype.remove = function () {
32977           throw new OperationNotSupported()
32978         };
32979
32980         /**
32981          * @see http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html
32982          *
32983          * @constructor
32984          * @private
32985          */
32986         var Arrays = function Arrays () {};
32987
32988         Arrays.sort = function sort () {
32989           var a = arguments[0];
32990           var i;
32991           var t;
32992           var comparator;
32993           var compare;
32994           if (arguments.length === 1) {
32995             compare = function (a, b) {
32996               return a.compareTo(b)
32997             };
32998             a.sort(compare);
32999           } else if (arguments.length === 2) {
33000             comparator = arguments[1];
33001             compare = function (a, b) {
33002               return comparator['compare'](a, b)
33003             };
33004             a.sort(compare);
33005           } else if (arguments.length === 3) {
33006             t = a.slice(arguments[1], arguments[2]);
33007             t.sort();
33008             var r = a.slice(0, arguments[1]).concat(t, a.slice(arguments[2], a.length));
33009             a.splice(0, a.length);
33010             for (i = 0; i < r.length; i++) {
33011               a.push(r[i]);
33012             }
33013           } else if (arguments.length === 4) {
33014             t = a.slice(arguments[1], arguments[2]);
33015             comparator = arguments[3];
33016             compare = function (a, b) {
33017               return comparator['compare'](a, b)
33018             };
33019             t.sort(compare);
33020             r = a.slice(0, arguments[1]).concat(t, a.slice(arguments[2], a.length));
33021             a.splice(0, a.length);
33022             for (i = 0; i < r.length; i++) {
33023               a.push(r[i]);
33024             }
33025           }
33026         };
33027         /**
33028          * @param {Array} array
33029          * @return {ArrayList}
33030          */
33031         Arrays.asList = function asList (array) {
33032           var arrayList = new ArrayList();
33033           for (var i = 0, len = array.length; i < len; i++) {
33034             arrayList.add(array[i]);
33035           }
33036           return arrayList
33037         };
33038
33039         var Dimension = function Dimension () {};
33040
33041         var staticAccessors$14 = { P: { configurable: true },L: { configurable: true },A: { configurable: true },FALSE: { configurable: true },TRUE: { configurable: true },DONTCARE: { configurable: true },SYM_FALSE: { configurable: true },SYM_TRUE: { configurable: true },SYM_DONTCARE: { configurable: true },SYM_P: { configurable: true },SYM_L: { configurable: true },SYM_A: { configurable: true } };
33042
33043         staticAccessors$14.P.get = function () { return 0 };
33044         staticAccessors$14.L.get = function () { return 1 };
33045         staticAccessors$14.A.get = function () { return 2 };
33046         staticAccessors$14.FALSE.get = function () { return -1 };
33047         staticAccessors$14.TRUE.get = function () { return -2 };
33048         staticAccessors$14.DONTCARE.get = function () { return -3 };
33049         staticAccessors$14.SYM_FALSE.get = function () { return 'F' };
33050         staticAccessors$14.SYM_TRUE.get = function () { return 'T' };
33051         staticAccessors$14.SYM_DONTCARE.get = function () { return '*' };
33052         staticAccessors$14.SYM_P.get = function () { return '0' };
33053         staticAccessors$14.SYM_L.get = function () { return '1' };
33054         staticAccessors$14.SYM_A.get = function () { return '2' };
33055
33056         Dimension.prototype.interfaces_ = function interfaces_ () {
33057           return []
33058         };
33059         Dimension.prototype.getClass = function getClass () {
33060           return Dimension
33061         };
33062         Dimension.toDimensionSymbol = function toDimensionSymbol (dimensionValue) {
33063           switch (dimensionValue) {
33064             case Dimension.FALSE:
33065               return Dimension.SYM_FALSE
33066             case Dimension.TRUE:
33067               return Dimension.SYM_TRUE
33068             case Dimension.DONTCARE:
33069               return Dimension.SYM_DONTCARE
33070             case Dimension.P:
33071               return Dimension.SYM_P
33072             case Dimension.L:
33073               return Dimension.SYM_L
33074             case Dimension.A:
33075               return Dimension.SYM_A
33076           }
33077           throw new IllegalArgumentException('Unknown dimension value: ' + dimensionValue)
33078         };
33079         Dimension.toDimensionValue = function toDimensionValue (dimensionSymbol) {
33080           switch (Character.toUpperCase(dimensionSymbol)) {
33081             case Dimension.SYM_FALSE:
33082               return Dimension.FALSE
33083             case Dimension.SYM_TRUE:
33084               return Dimension.TRUE
33085             case Dimension.SYM_DONTCARE:
33086               return Dimension.DONTCARE
33087             case Dimension.SYM_P:
33088               return Dimension.P
33089             case Dimension.SYM_L:
33090               return Dimension.L
33091             case Dimension.SYM_A:
33092               return Dimension.A
33093           }
33094           throw new IllegalArgumentException('Unknown dimension symbol: ' + dimensionSymbol)
33095         };
33096
33097         Object.defineProperties( Dimension, staticAccessors$14 );
33098
33099         var GeometryFilter = function GeometryFilter () {};
33100
33101         GeometryFilter.prototype.filter = function filter (geom) {};
33102         GeometryFilter.prototype.interfaces_ = function interfaces_ () {
33103           return []
33104         };
33105         GeometryFilter.prototype.getClass = function getClass () {
33106           return GeometryFilter
33107         };
33108
33109         var CoordinateSequenceFilter = function CoordinateSequenceFilter () {};
33110
33111         CoordinateSequenceFilter.prototype.filter = function filter (seq, i) {};
33112         CoordinateSequenceFilter.prototype.isDone = function isDone () {};
33113         CoordinateSequenceFilter.prototype.isGeometryChanged = function isGeometryChanged () {};
33114         CoordinateSequenceFilter.prototype.interfaces_ = function interfaces_ () {
33115           return []
33116         };
33117         CoordinateSequenceFilter.prototype.getClass = function getClass () {
33118           return CoordinateSequenceFilter
33119         };
33120
33121         var GeometryCollection = (function (Geometry$$1) {
33122           function GeometryCollection (geometries, factory) {
33123             Geometry$$1.call(this, factory);
33124             this._geometries = geometries || [];
33125
33126             if (Geometry$$1.hasNullElements(this._geometries)) {
33127               throw new IllegalArgumentException('geometries must not contain null elements')
33128             }
33129           }
33130
33131           if ( Geometry$$1 ) { GeometryCollection.__proto__ = Geometry$$1; }
33132           GeometryCollection.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );
33133           GeometryCollection.prototype.constructor = GeometryCollection;
33134
33135           var staticAccessors = { serialVersionUID: { configurable: true } };
33136           GeometryCollection.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {
33137             var this$1 = this;
33138
33139             var envelope = new Envelope();
33140             for (var i = 0; i < this._geometries.length; i++) {
33141               envelope.expandToInclude(this$1._geometries[i].getEnvelopeInternal());
33142             }
33143             return envelope
33144           };
33145           GeometryCollection.prototype.getGeometryN = function getGeometryN (n) {
33146             return this._geometries[n]
33147           };
33148           GeometryCollection.prototype.getSortIndex = function getSortIndex () {
33149             return Geometry$$1.SORTINDEX_GEOMETRYCOLLECTION
33150           };
33151           GeometryCollection.prototype.getCoordinates = function getCoordinates () {
33152             var this$1 = this;
33153
33154             var coordinates = new Array(this.getNumPoints()).fill(null);
33155             var k = -1;
33156             for (var i = 0; i < this._geometries.length; i++) {
33157               var childCoordinates = this$1._geometries[i].getCoordinates();
33158               for (var j = 0; j < childCoordinates.length; j++) {
33159                 k++;
33160                 coordinates[k] = childCoordinates[j];
33161               }
33162             }
33163             return coordinates
33164           };
33165           GeometryCollection.prototype.getArea = function getArea () {
33166             var this$1 = this;
33167
33168             var area = 0.0;
33169             for (var i = 0; i < this._geometries.length; i++) {
33170               area += this$1._geometries[i].getArea();
33171             }
33172             return area
33173           };
33174           GeometryCollection.prototype.equalsExact = function equalsExact () {
33175             var this$1 = this;
33176
33177             if (arguments.length === 2) {
33178               var other = arguments[0];
33179               var tolerance = arguments[1];
33180               if (!this.isEquivalentClass(other)) {
33181                 return false
33182               }
33183               var otherCollection = other;
33184               if (this._geometries.length !== otherCollection._geometries.length) {
33185                 return false
33186               }
33187               for (var i = 0; i < this._geometries.length; i++) {
33188                 if (!this$1._geometries[i].equalsExact(otherCollection._geometries[i], tolerance)) {
33189                   return false
33190                 }
33191               }
33192               return true
33193             } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }
33194           };
33195           GeometryCollection.prototype.normalize = function normalize () {
33196             var this$1 = this;
33197
33198             for (var i = 0; i < this._geometries.length; i++) {
33199               this$1._geometries[i].normalize();
33200             }
33201             Arrays.sort(this._geometries);
33202           };
33203           GeometryCollection.prototype.getCoordinate = function getCoordinate () {
33204             if (this.isEmpty()) { return null }
33205             return this._geometries[0].getCoordinate()
33206           };
33207           GeometryCollection.prototype.getBoundaryDimension = function getBoundaryDimension () {
33208             var this$1 = this;
33209
33210             var dimension = Dimension.FALSE;
33211             for (var i = 0; i < this._geometries.length; i++) {
33212               dimension = Math.max(dimension, this$1._geometries[i].getBoundaryDimension());
33213             }
33214             return dimension
33215           };
33216           GeometryCollection.prototype.getDimension = function getDimension () {
33217             var this$1 = this;
33218
33219             var dimension = Dimension.FALSE;
33220             for (var i = 0; i < this._geometries.length; i++) {
33221               dimension = Math.max(dimension, this$1._geometries[i].getDimension());
33222             }
33223             return dimension
33224           };
33225           GeometryCollection.prototype.getLength = function getLength () {
33226             var this$1 = this;
33227
33228             var sum = 0.0;
33229             for (var i = 0; i < this._geometries.length; i++) {
33230               sum += this$1._geometries[i].getLength();
33231             }
33232             return sum
33233           };
33234           GeometryCollection.prototype.getNumPoints = function getNumPoints () {
33235             var this$1 = this;
33236
33237             var numPoints = 0;
33238             for (var i = 0; i < this._geometries.length; i++) {
33239               numPoints += this$1._geometries[i].getNumPoints();
33240             }
33241             return numPoints
33242           };
33243           GeometryCollection.prototype.getNumGeometries = function getNumGeometries () {
33244             return this._geometries.length
33245           };
33246           GeometryCollection.prototype.reverse = function reverse () {
33247             var this$1 = this;
33248
33249             var n = this._geometries.length;
33250             var revGeoms = new Array(n).fill(null);
33251             for (var i = 0; i < this._geometries.length; i++) {
33252               revGeoms[i] = this$1._geometries[i].reverse();
33253             }
33254             return this.getFactory().createGeometryCollection(revGeoms)
33255           };
33256           GeometryCollection.prototype.compareToSameClass = function compareToSameClass () {
33257             var this$1 = this;
33258
33259             if (arguments.length === 1) {
33260               var o = arguments[0];
33261               var theseElements = new TreeSet(Arrays.asList(this._geometries));
33262               var otherElements = new TreeSet(Arrays.asList(o._geometries));
33263               return this.compare(theseElements, otherElements)
33264             } else if (arguments.length === 2) {
33265               var o$1 = arguments[0];
33266               var comp = arguments[1];
33267               var gc = o$1;
33268               var n1 = this.getNumGeometries();
33269               var n2 = gc.getNumGeometries();
33270               var i = 0;
33271               while (i < n1 && i < n2) {
33272                 var thisGeom = this$1.getGeometryN(i);
33273                 var otherGeom = gc.getGeometryN(i);
33274                 var holeComp = thisGeom.compareToSameClass(otherGeom, comp);
33275                 if (holeComp !== 0) { return holeComp }
33276                 i++;
33277               }
33278               if (i < n1) { return 1 }
33279               if (i < n2) { return -1 }
33280               return 0
33281             }
33282           };
33283           GeometryCollection.prototype.apply = function apply () {
33284             var this$1 = this;
33285
33286             if (hasInterface(arguments[0], CoordinateFilter)) {
33287               var filter = arguments[0];
33288               for (var i = 0; i < this._geometries.length; i++) {
33289                 this$1._geometries[i].apply(filter);
33290               }
33291             } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {
33292               var filter$1 = arguments[0];
33293               if (this._geometries.length === 0) { return null }
33294               for (var i$1 = 0; i$1 < this._geometries.length; i$1++) {
33295                 this$1._geometries[i$1].apply(filter$1);
33296                 if (filter$1.isDone()) {
33297                   break
33298                 }
33299               }
33300               if (filter$1.isGeometryChanged()) { this.geometryChanged(); }
33301             } else if (hasInterface(arguments[0], GeometryFilter)) {
33302               var filter$2 = arguments[0];
33303               filter$2.filter(this);
33304               for (var i$2 = 0; i$2 < this._geometries.length; i$2++) {
33305                 this$1._geometries[i$2].apply(filter$2);
33306               }
33307             } else if (hasInterface(arguments[0], GeometryComponentFilter)) {
33308               var filter$3 = arguments[0];
33309               filter$3.filter(this);
33310               for (var i$3 = 0; i$3 < this._geometries.length; i$3++) {
33311                 this$1._geometries[i$3].apply(filter$3);
33312               }
33313             }
33314           };
33315           GeometryCollection.prototype.getBoundary = function getBoundary () {
33316             this.checkNotGeometryCollection(this);
33317             Assert.shouldNeverReachHere();
33318             return null
33319           };
33320           GeometryCollection.prototype.clone = function clone () {
33321             var this$1 = this;
33322
33323             var gc = Geometry$$1.prototype.clone.call(this);
33324             gc._geometries = new Array(this._geometries.length).fill(null);
33325             for (var i = 0; i < this._geometries.length; i++) {
33326               gc._geometries[i] = this$1._geometries[i].clone();
33327             }
33328             return gc
33329           };
33330           GeometryCollection.prototype.getGeometryType = function getGeometryType () {
33331             return 'GeometryCollection'
33332           };
33333           GeometryCollection.prototype.copy = function copy () {
33334             var this$1 = this;
33335
33336             var geometries = new Array(this._geometries.length).fill(null);
33337             for (var i = 0; i < geometries.length; i++) {
33338               geometries[i] = this$1._geometries[i].copy();
33339             }
33340             return new GeometryCollection(geometries, this._factory)
33341           };
33342           GeometryCollection.prototype.isEmpty = function isEmpty () {
33343             var this$1 = this;
33344
33345             for (var i = 0; i < this._geometries.length; i++) {
33346               if (!this$1._geometries[i].isEmpty()) {
33347                 return false
33348               }
33349             }
33350             return true
33351           };
33352           GeometryCollection.prototype.interfaces_ = function interfaces_ () {
33353             return []
33354           };
33355           GeometryCollection.prototype.getClass = function getClass () {
33356             return GeometryCollection
33357           };
33358           staticAccessors.serialVersionUID.get = function () { return -5694727726395021467 };
33359
33360           Object.defineProperties( GeometryCollection, staticAccessors );
33361
33362           return GeometryCollection;
33363         }(Geometry));
33364
33365         var MultiLineString = (function (GeometryCollection$$1) {
33366           function MultiLineString () {
33367             GeometryCollection$$1.apply(this, arguments);
33368           }
33369
33370           if ( GeometryCollection$$1 ) { MultiLineString.__proto__ = GeometryCollection$$1; }
33371           MultiLineString.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );
33372           MultiLineString.prototype.constructor = MultiLineString;
33373
33374           var staticAccessors = { serialVersionUID: { configurable: true } };
33375
33376           MultiLineString.prototype.getSortIndex = function getSortIndex () {
33377             return Geometry.SORTINDEX_MULTILINESTRING
33378           };
33379           MultiLineString.prototype.equalsExact = function equalsExact () {
33380             if (arguments.length === 2) {
33381               var other = arguments[0];
33382               var tolerance = arguments[1];
33383               if (!this.isEquivalentClass(other)) {
33384                 return false
33385               }
33386               return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)
33387             } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }
33388           };
33389           MultiLineString.prototype.getBoundaryDimension = function getBoundaryDimension () {
33390             if (this.isClosed()) {
33391               return Dimension.FALSE
33392             }
33393             return 0
33394           };
33395           MultiLineString.prototype.isClosed = function isClosed () {
33396             var this$1 = this;
33397
33398             if (this.isEmpty()) {
33399               return false
33400             }
33401             for (var i = 0; i < this._geometries.length; i++) {
33402               if (!this$1._geometries[i].isClosed()) {
33403                 return false
33404               }
33405             }
33406             return true
33407           };
33408           MultiLineString.prototype.getDimension = function getDimension () {
33409             return 1
33410           };
33411           MultiLineString.prototype.reverse = function reverse () {
33412             var this$1 = this;
33413
33414             var nLines = this._geometries.length;
33415             var revLines = new Array(nLines).fill(null);
33416             for (var i = 0; i < this._geometries.length; i++) {
33417               revLines[nLines - 1 - i] = this$1._geometries[i].reverse();
33418             }
33419             return this.getFactory().createMultiLineString(revLines)
33420           };
33421           MultiLineString.prototype.getBoundary = function getBoundary () {
33422             return new BoundaryOp(this).getBoundary()
33423           };
33424           MultiLineString.prototype.getGeometryType = function getGeometryType () {
33425             return 'MultiLineString'
33426           };
33427           MultiLineString.prototype.copy = function copy () {
33428             var this$1 = this;
33429
33430             var lineStrings = new Array(this._geometries.length).fill(null);
33431             for (var i = 0; i < lineStrings.length; i++) {
33432               lineStrings[i] = this$1._geometries[i].copy();
33433             }
33434             return new MultiLineString(lineStrings, this._factory)
33435           };
33436           MultiLineString.prototype.interfaces_ = function interfaces_ () {
33437             return [Lineal]
33438           };
33439           MultiLineString.prototype.getClass = function getClass () {
33440             return MultiLineString
33441           };
33442           staticAccessors.serialVersionUID.get = function () { return 8166665132445433741 };
33443
33444           Object.defineProperties( MultiLineString, staticAccessors );
33445
33446           return MultiLineString;
33447         }(GeometryCollection));
33448
33449         var BoundaryOp = function BoundaryOp () {
33450           this._geom = null;
33451           this._geomFact = null;
33452           this._bnRule = null;
33453           this._endpointMap = null;
33454           if (arguments.length === 1) {
33455             var geom = arguments[0];
33456             var bnRule = BoundaryNodeRule.MOD2_BOUNDARY_RULE;
33457             this._geom = geom;
33458             this._geomFact = geom.getFactory();
33459             this._bnRule = bnRule;
33460           } else if (arguments.length === 2) {
33461             var geom$1 = arguments[0];
33462             var bnRule$1 = arguments[1];
33463             this._geom = geom$1;
33464             this._geomFact = geom$1.getFactory();
33465             this._bnRule = bnRule$1;
33466           }
33467         };
33468         BoundaryOp.prototype.boundaryMultiLineString = function boundaryMultiLineString (mLine) {
33469           if (this._geom.isEmpty()) {
33470             return this.getEmptyMultiPoint()
33471           }
33472           var bdyPts = this.computeBoundaryCoordinates(mLine);
33473           if (bdyPts.length === 1) {
33474             return this._geomFact.createPoint(bdyPts[0])
33475           }
33476           return this._geomFact.createMultiPointFromCoords(bdyPts)
33477         };
33478         BoundaryOp.prototype.getBoundary = function getBoundary () {
33479           if (this._geom instanceof LineString) { return this.boundaryLineString(this._geom) }
33480           if (this._geom instanceof MultiLineString) { return this.boundaryMultiLineString(this._geom) }
33481           return this._geom.getBoundary()
33482         };
33483         BoundaryOp.prototype.boundaryLineString = function boundaryLineString (line) {
33484           if (this._geom.isEmpty()) {
33485             return this.getEmptyMultiPoint()
33486           }
33487           if (line.isClosed()) {
33488             var closedEndpointOnBoundary = this._bnRule.isInBoundary(2);
33489             if (closedEndpointOnBoundary) {
33490               return line.getStartPoint()
33491             } else {
33492               return this._geomFact.createMultiPoint()
33493             }
33494           }
33495           return this._geomFact.createMultiPoint([line.getStartPoint(), line.getEndPoint()])
33496         };
33497         BoundaryOp.prototype.getEmptyMultiPoint = function getEmptyMultiPoint () {
33498           return this._geomFact.createMultiPoint()
33499         };
33500         BoundaryOp.prototype.computeBoundaryCoordinates = function computeBoundaryCoordinates (mLine) {
33501             var this$1 = this;
33502
33503           var bdyPts = new ArrayList();
33504           this._endpointMap = new TreeMap();
33505           for (var i = 0; i < mLine.getNumGeometries(); i++) {
33506             var line = mLine.getGeometryN(i);
33507             if (line.getNumPoints() === 0) { continue }
33508             this$1.addEndpoint(line.getCoordinateN(0));
33509             this$1.addEndpoint(line.getCoordinateN(line.getNumPoints() - 1));
33510           }
33511           for (var it = this._endpointMap.entrySet().iterator(); it.hasNext();) {
33512             var entry = it.next();
33513             var counter = entry.getValue();
33514             var valence = counter.count;
33515             if (this$1._bnRule.isInBoundary(valence)) {
33516               bdyPts.add(entry.getKey());
33517             }
33518           }
33519           return CoordinateArrays.toCoordinateArray(bdyPts)
33520         };
33521         BoundaryOp.prototype.addEndpoint = function addEndpoint (pt) {
33522           var counter = this._endpointMap.get(pt);
33523           if (counter === null) {
33524             counter = new Counter();
33525             this._endpointMap.put(pt, counter);
33526           }
33527           counter.count++;
33528         };
33529         BoundaryOp.prototype.interfaces_ = function interfaces_ () {
33530           return []
33531         };
33532         BoundaryOp.prototype.getClass = function getClass () {
33533           return BoundaryOp
33534         };
33535         BoundaryOp.getBoundary = function getBoundary () {
33536           if (arguments.length === 1) {
33537             var g = arguments[0];
33538             var bop = new BoundaryOp(g);
33539             return bop.getBoundary()
33540           } else if (arguments.length === 2) {
33541             var g$1 = arguments[0];
33542             var bnRule = arguments[1];
33543             var bop$1 = new BoundaryOp(g$1, bnRule);
33544             return bop$1.getBoundary()
33545           }
33546         };
33547
33548         var Counter = function Counter () {
33549           this.count = null;
33550         };
33551         Counter.prototype.interfaces_ = function interfaces_ () {
33552           return []
33553         };
33554         Counter.prototype.getClass = function getClass () {
33555           return Counter
33556         };
33557
33558         // boundary
33559
33560         function PrintStream () {}
33561
33562         function StringReader () {}
33563
33564         var DecimalFormat = function DecimalFormat () {};
33565
33566         function ByteArrayOutputStream () {}
33567
33568         function IOException () {}
33569
33570         function LineNumberReader () {}
33571
33572         var StringUtil = function StringUtil () {};
33573
33574         var staticAccessors$15 = { NEWLINE: { configurable: true },SIMPLE_ORDINATE_FORMAT: { configurable: true } };
33575
33576         StringUtil.prototype.interfaces_ = function interfaces_ () {
33577           return []
33578         };
33579         StringUtil.prototype.getClass = function getClass () {
33580           return StringUtil
33581         };
33582         StringUtil.chars = function chars (c, n) {
33583           var ch = new Array(n).fill(null);
33584           for (var i = 0; i < n; i++) {
33585             ch[i] = c;
33586           }
33587           return String(ch)
33588         };
33589         StringUtil.getStackTrace = function getStackTrace () {
33590           if (arguments.length === 1) {
33591             var t = arguments[0];
33592             var os = new ByteArrayOutputStream();
33593             var ps = new PrintStream(os);
33594             t.printStackTrace(ps);
33595             return os.toString()
33596           } else if (arguments.length === 2) {
33597             var t$1 = arguments[0];
33598             var depth = arguments[1];
33599             var stackTrace = '';
33600             var stringReader = new StringReader(StringUtil.getStackTrace(t$1));
33601             var lineNumberReader = new LineNumberReader(stringReader);
33602             for (var i = 0; i < depth; i++) {
33603               try {
33604                 stackTrace += lineNumberReader.readLine() + StringUtil.NEWLINE;
33605               } catch (e) {
33606                 if (e instanceof IOException) {
33607                   Assert.shouldNeverReachHere();
33608                 } else { throw e }
33609               } finally {}
33610             }
33611             return stackTrace
33612           }
33613         };
33614         StringUtil.split = function split (s, separator) {
33615           var separatorlen = separator.length;
33616           var tokenList = new ArrayList();
33617           var tmpString = '' + s;
33618           var pos = tmpString.indexOf(separator);
33619           while (pos >= 0) {
33620             var token = tmpString.substring(0, pos);
33621             tokenList.add(token);
33622             tmpString = tmpString.substring(pos + separatorlen);
33623             pos = tmpString.indexOf(separator);
33624           }
33625           if (tmpString.length > 0) { tokenList.add(tmpString); }
33626           var res = new Array(tokenList.size()).fill(null);
33627           for (var i = 0; i < res.length; i++) {
33628             res[i] = tokenList.get(i);
33629           }
33630           return res
33631         };
33632         StringUtil.toString = function toString () {
33633           if (arguments.length === 1) {
33634             var d = arguments[0];
33635             return StringUtil.SIMPLE_ORDINATE_FORMAT.format(d)
33636           }
33637         };
33638         StringUtil.spaces = function spaces (n) {
33639           return StringUtil.chars(' ', n)
33640         };
33641         staticAccessors$15.NEWLINE.get = function () { return System.getProperty('line.separator') };
33642         staticAccessors$15.SIMPLE_ORDINATE_FORMAT.get = function () { return new DecimalFormat('0.#') };
33643
33644         Object.defineProperties( StringUtil, staticAccessors$15 );
33645
33646         var CoordinateSequences = function CoordinateSequences () {};
33647
33648         CoordinateSequences.prototype.interfaces_ = function interfaces_ () {
33649           return []
33650         };
33651         CoordinateSequences.prototype.getClass = function getClass () {
33652           return CoordinateSequences
33653         };
33654         CoordinateSequences.copyCoord = function copyCoord (src, srcPos, dest, destPos) {
33655           var minDim = Math.min(src.getDimension(), dest.getDimension());
33656           for (var dim = 0; dim < minDim; dim++) {
33657             dest.setOrdinate(destPos, dim, src.getOrdinate(srcPos, dim));
33658           }
33659         };
33660         CoordinateSequences.isRing = function isRing (seq) {
33661           var n = seq.size();
33662           if (n === 0) { return true }
33663           if (n <= 3) { return false }
33664           return seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y)
33665         };
33666         CoordinateSequences.isEqual = function isEqual (cs1, cs2) {
33667           var cs1Size = cs1.size();
33668           var cs2Size = cs2.size();
33669           if (cs1Size !== cs2Size) { return false }
33670           var dim = Math.min(cs1.getDimension(), cs2.getDimension());
33671           for (var i = 0; i < cs1Size; i++) {
33672             for (var d = 0; d < dim; d++) {
33673               var v1 = cs1.getOrdinate(i, d);
33674               var v2 = cs2.getOrdinate(i, d);
33675               if (cs1.getOrdinate(i, d) === cs2.getOrdinate(i, d)) { continue }
33676               if (Double.isNaN(v1) && Double.isNaN(v2)) { continue }
33677               return false
33678             }
33679           }
33680           return true
33681         };
33682         CoordinateSequences.extend = function extend (fact, seq, size) {
33683           var newseq = fact.create(size, seq.getDimension());
33684           var n = seq.size();
33685           CoordinateSequences.copy(seq, 0, newseq, 0, n);
33686           if (n > 0) {
33687             for (var i = n; i < size; i++) { CoordinateSequences.copy(seq, n - 1, newseq, i, 1); }
33688           }
33689           return newseq
33690         };
33691         CoordinateSequences.reverse = function reverse (seq) {
33692           var last = seq.size() - 1;
33693           var mid = Math.trunc(last / 2);
33694           for (var i = 0; i <= mid; i++) {
33695             CoordinateSequences.swap(seq, i, last - i);
33696           }
33697         };
33698         CoordinateSequences.swap = function swap (seq, i, j) {
33699           if (i === j) { return null }
33700           for (var dim = 0; dim < seq.getDimension(); dim++) {
33701             var tmp = seq.getOrdinate(i, dim);
33702             seq.setOrdinate(i, dim, seq.getOrdinate(j, dim));
33703             seq.setOrdinate(j, dim, tmp);
33704           }
33705         };
33706         CoordinateSequences.copy = function copy (src, srcPos, dest, destPos, length) {
33707           for (var i = 0; i < length; i++) {
33708             CoordinateSequences.copyCoord(src, srcPos + i, dest, destPos + i);
33709           }
33710         };
33711         CoordinateSequences.toString = function toString () {
33712           if (arguments.length === 1) {
33713             var cs = arguments[0];
33714             var size = cs.size();
33715             if (size === 0) { return '()' }
33716             var dim = cs.getDimension();
33717             var buf = new StringBuffer();
33718             buf.append('(');
33719             for (var i = 0; i < size; i++) {
33720               if (i > 0) { buf.append(' '); }
33721               for (var d = 0; d < dim; d++) {
33722                 if (d > 0) { buf.append(','); }
33723                 buf.append(StringUtil.toString(cs.getOrdinate(i, d)));
33724               }
33725             }
33726             buf.append(')');
33727             return buf.toString()
33728           }
33729         };
33730         CoordinateSequences.ensureValidRing = function ensureValidRing (fact, seq) {
33731           var n = seq.size();
33732           if (n === 0) { return seq }
33733           if (n <= 3) { return CoordinateSequences.createClosedRing(fact, seq, 4) }
33734           var isClosed = seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y);
33735           if (isClosed) { return seq }
33736           return CoordinateSequences.createClosedRing(fact, seq, n + 1)
33737         };
33738         CoordinateSequences.createClosedRing = function createClosedRing (fact, seq, size) {
33739           var newseq = fact.create(size, seq.getDimension());
33740           var n = seq.size();
33741           CoordinateSequences.copy(seq, 0, newseq, 0, n);
33742           for (var i = n; i < size; i++) { CoordinateSequences.copy(seq, 0, newseq, i, 1); }
33743           return newseq
33744         };
33745
33746         var LineString = (function (Geometry$$1) {
33747           function LineString (points, factory) {
33748             Geometry$$1.call(this, factory);
33749             this._points = null;
33750             this.init(points);
33751           }
33752
33753           if ( Geometry$$1 ) { LineString.__proto__ = Geometry$$1; }
33754           LineString.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );
33755           LineString.prototype.constructor = LineString;
33756
33757           var staticAccessors = { serialVersionUID: { configurable: true } };
33758           LineString.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {
33759             if (this.isEmpty()) {
33760               return new Envelope()
33761             }
33762             return this._points.expandEnvelope(new Envelope())
33763           };
33764           LineString.prototype.isRing = function isRing () {
33765             return this.isClosed() && this.isSimple()
33766           };
33767           LineString.prototype.getSortIndex = function getSortIndex () {
33768             return Geometry$$1.SORTINDEX_LINESTRING
33769           };
33770           LineString.prototype.getCoordinates = function getCoordinates () {
33771             return this._points.toCoordinateArray()
33772           };
33773           LineString.prototype.equalsExact = function equalsExact () {
33774             var this$1 = this;
33775
33776             if (arguments.length === 2) {
33777               var other = arguments[0];
33778               var tolerance = arguments[1];
33779               if (!this.isEquivalentClass(other)) {
33780                 return false
33781               }
33782               var otherLineString = other;
33783               if (this._points.size() !== otherLineString._points.size()) {
33784                 return false
33785               }
33786               for (var i = 0; i < this._points.size(); i++) {
33787                 if (!this$1.equal(this$1._points.getCoordinate(i), otherLineString._points.getCoordinate(i), tolerance)) {
33788                   return false
33789                 }
33790               }
33791               return true
33792             } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }
33793           };
33794           LineString.prototype.normalize = function normalize () {
33795             var this$1 = this;
33796
33797             for (var i = 0; i < Math.trunc(this._points.size() / 2); i++) {
33798               var j = this$1._points.size() - 1 - i;
33799               if (!this$1._points.getCoordinate(i).equals(this$1._points.getCoordinate(j))) {
33800                 if (this$1._points.getCoordinate(i).compareTo(this$1._points.getCoordinate(j)) > 0) {
33801                   CoordinateSequences.reverse(this$1._points);
33802                 }
33803                 return null
33804               }
33805             }
33806           };
33807           LineString.prototype.getCoordinate = function getCoordinate () {
33808             if (this.isEmpty()) { return null }
33809             return this._points.getCoordinate(0)
33810           };
33811           LineString.prototype.getBoundaryDimension = function getBoundaryDimension () {
33812             if (this.isClosed()) {
33813               return Dimension.FALSE
33814             }
33815             return 0
33816           };
33817           LineString.prototype.isClosed = function isClosed () {
33818             if (this.isEmpty()) {
33819               return false
33820             }
33821             return this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints() - 1))
33822           };
33823           LineString.prototype.getEndPoint = function getEndPoint () {
33824             if (this.isEmpty()) {
33825               return null
33826             }
33827             return this.getPointN(this.getNumPoints() - 1)
33828           };
33829           LineString.prototype.getDimension = function getDimension () {
33830             return 1
33831           };
33832           LineString.prototype.getLength = function getLength () {
33833             return CGAlgorithms.computeLength(this._points)
33834           };
33835           LineString.prototype.getNumPoints = function getNumPoints () {
33836             return this._points.size()
33837           };
33838           LineString.prototype.reverse = function reverse () {
33839             var seq = this._points.copy();
33840             CoordinateSequences.reverse(seq);
33841             var revLine = this.getFactory().createLineString(seq);
33842             return revLine
33843           };
33844           LineString.prototype.compareToSameClass = function compareToSameClass () {
33845             var this$1 = this;
33846
33847             if (arguments.length === 1) {
33848               var o = arguments[0];
33849               var line = o;
33850               var i = 0;
33851               var j = 0;
33852               while (i < this._points.size() && j < line._points.size()) {
33853                 var comparison = this$1._points.getCoordinate(i).compareTo(line._points.getCoordinate(j));
33854                 if (comparison !== 0) {
33855                   return comparison
33856                 }
33857                 i++;
33858                 j++;
33859               }
33860               if (i < this._points.size()) {
33861                 return 1
33862               }
33863               if (j < line._points.size()) {
33864                 return -1
33865               }
33866               return 0
33867             } else if (arguments.length === 2) {
33868               var o$1 = arguments[0];
33869               var comp = arguments[1];
33870               var line$1 = o$1;
33871               return comp.compare(this._points, line$1._points)
33872             }
33873           };
33874           LineString.prototype.apply = function apply () {
33875             var this$1 = this;
33876
33877             if (hasInterface(arguments[0], CoordinateFilter)) {
33878               var filter = arguments[0];
33879               for (var i = 0; i < this._points.size(); i++) {
33880                 filter.filter(this$1._points.getCoordinate(i));
33881               }
33882             } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {
33883               var filter$1 = arguments[0];
33884               if (this._points.size() === 0) { return null }
33885               for (var i$1 = 0; i$1 < this._points.size(); i$1++) {
33886                 filter$1.filter(this$1._points, i$1);
33887                 if (filter$1.isDone()) { break }
33888               }
33889               if (filter$1.isGeometryChanged()) { this.geometryChanged(); }
33890             } else if (hasInterface(arguments[0], GeometryFilter)) {
33891               var filter$2 = arguments[0];
33892               filter$2.filter(this);
33893             } else if (hasInterface(arguments[0], GeometryComponentFilter)) {
33894               var filter$3 = arguments[0];
33895               filter$3.filter(this);
33896             }
33897           };
33898           LineString.prototype.getBoundary = function getBoundary () {
33899             return new BoundaryOp(this).getBoundary()
33900           };
33901           LineString.prototype.isEquivalentClass = function isEquivalentClass (other) {
33902             return other instanceof LineString
33903           };
33904           LineString.prototype.clone = function clone () {
33905             var ls = Geometry$$1.prototype.clone.call(this);
33906             ls._points = this._points.clone();
33907             return ls
33908           };
33909           LineString.prototype.getCoordinateN = function getCoordinateN (n) {
33910             return this._points.getCoordinate(n)
33911           };
33912           LineString.prototype.getGeometryType = function getGeometryType () {
33913             return 'LineString'
33914           };
33915           LineString.prototype.copy = function copy () {
33916             return new LineString(this._points.copy(), this._factory)
33917           };
33918           LineString.prototype.getCoordinateSequence = function getCoordinateSequence () {
33919             return this._points
33920           };
33921           LineString.prototype.isEmpty = function isEmpty () {
33922             return this._points.size() === 0
33923           };
33924           LineString.prototype.init = function init (points) {
33925             if (points === null) {
33926               points = this.getFactory().getCoordinateSequenceFactory().create([]);
33927             }
33928             if (points.size() === 1) {
33929               throw new IllegalArgumentException('Invalid number of points in LineString (found ' + points.size() + ' - must be 0 or >= 2)')
33930             }
33931             this._points = points;
33932           };
33933           LineString.prototype.isCoordinate = function isCoordinate (pt) {
33934             var this$1 = this;
33935
33936             for (var i = 0; i < this._points.size(); i++) {
33937               if (this$1._points.getCoordinate(i).equals(pt)) {
33938                 return true
33939               }
33940             }
33941             return false
33942           };
33943           LineString.prototype.getStartPoint = function getStartPoint () {
33944             if (this.isEmpty()) {
33945               return null
33946             }
33947             return this.getPointN(0)
33948           };
33949           LineString.prototype.getPointN = function getPointN (n) {
33950             return this.getFactory().createPoint(this._points.getCoordinate(n))
33951           };
33952           LineString.prototype.interfaces_ = function interfaces_ () {
33953             return [Lineal]
33954           };
33955           LineString.prototype.getClass = function getClass () {
33956             return LineString
33957           };
33958           staticAccessors.serialVersionUID.get = function () { return 3110669828065365560 };
33959
33960           Object.defineProperties( LineString, staticAccessors );
33961
33962           return LineString;
33963         }(Geometry));
33964
33965         var Puntal = function Puntal () {};
33966
33967         Puntal.prototype.interfaces_ = function interfaces_ () {
33968           return []
33969         };
33970         Puntal.prototype.getClass = function getClass () {
33971           return Puntal
33972         };
33973
33974         var Point = (function (Geometry$$1) {
33975           function Point (coordinates, factory) {
33976             Geometry$$1.call(this, factory);
33977             this._coordinates = coordinates || null;
33978             this.init(this._coordinates);
33979           }
33980
33981           if ( Geometry$$1 ) { Point.__proto__ = Geometry$$1; }
33982           Point.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );
33983           Point.prototype.constructor = Point;
33984
33985           var staticAccessors = { serialVersionUID: { configurable: true } };
33986           Point.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {
33987             if (this.isEmpty()) {
33988               return new Envelope()
33989             }
33990             var env = new Envelope();
33991             env.expandToInclude(this._coordinates.getX(0), this._coordinates.getY(0));
33992             return env
33993           };
33994           Point.prototype.getSortIndex = function getSortIndex () {
33995             return Geometry$$1.SORTINDEX_POINT
33996           };
33997           Point.prototype.getCoordinates = function getCoordinates () {
33998             return this.isEmpty() ? [] : [this.getCoordinate()]
33999           };
34000           Point.prototype.equalsExact = function equalsExact () {
34001             if (arguments.length === 2) {
34002               var other = arguments[0];
34003               var tolerance = arguments[1];
34004               if (!this.isEquivalentClass(other)) {
34005                 return false
34006               }
34007               if (this.isEmpty() && other.isEmpty()) {
34008                 return true
34009               }
34010               if (this.isEmpty() !== other.isEmpty()) {
34011                 return false
34012               }
34013               return this.equal(other.getCoordinate(), this.getCoordinate(), tolerance)
34014             } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }
34015           };
34016           Point.prototype.normalize = function normalize () {};
34017           Point.prototype.getCoordinate = function getCoordinate () {
34018             return this._coordinates.size() !== 0 ? this._coordinates.getCoordinate(0) : null
34019           };
34020           Point.prototype.getBoundaryDimension = function getBoundaryDimension () {
34021             return Dimension.FALSE
34022           };
34023           Point.prototype.getDimension = function getDimension () {
34024             return 0
34025           };
34026           Point.prototype.getNumPoints = function getNumPoints () {
34027             return this.isEmpty() ? 0 : 1
34028           };
34029           Point.prototype.reverse = function reverse () {
34030             return this.copy()
34031           };
34032           Point.prototype.getX = function getX () {
34033             if (this.getCoordinate() === null) {
34034               throw new Error('getX called on empty Point')
34035             }
34036             return this.getCoordinate().x
34037           };
34038           Point.prototype.compareToSameClass = function compareToSameClass () {
34039             if (arguments.length === 1) {
34040               var other = arguments[0];
34041               var point$1 = other;
34042               return this.getCoordinate().compareTo(point$1.getCoordinate())
34043             } else if (arguments.length === 2) {
34044               var other$1 = arguments[0];
34045               var comp = arguments[1];
34046               var point = other$1;
34047               return comp.compare(this._coordinates, point._coordinates)
34048             }
34049           };
34050           Point.prototype.apply = function apply () {
34051             if (hasInterface(arguments[0], CoordinateFilter)) {
34052               var filter = arguments[0];
34053               if (this.isEmpty()) {
34054                 return null
34055               }
34056               filter.filter(this.getCoordinate());
34057             } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {
34058               var filter$1 = arguments[0];
34059               if (this.isEmpty()) { return null }
34060               filter$1.filter(this._coordinates, 0);
34061               if (filter$1.isGeometryChanged()) { this.geometryChanged(); }
34062             } else if (hasInterface(arguments[0], GeometryFilter)) {
34063               var filter$2 = arguments[0];
34064               filter$2.filter(this);
34065             } else if (hasInterface(arguments[0], GeometryComponentFilter)) {
34066               var filter$3 = arguments[0];
34067               filter$3.filter(this);
34068             }
34069           };
34070           Point.prototype.getBoundary = function getBoundary () {
34071             return this.getFactory().createGeometryCollection(null)
34072           };
34073           Point.prototype.clone = function clone () {
34074             var p = Geometry$$1.prototype.clone.call(this);
34075             p._coordinates = this._coordinates.clone();
34076             return p
34077           };
34078           Point.prototype.getGeometryType = function getGeometryType () {
34079             return 'Point'
34080           };
34081           Point.prototype.copy = function copy () {
34082             return new Point(this._coordinates.copy(), this._factory)
34083           };
34084           Point.prototype.getCoordinateSequence = function getCoordinateSequence () {
34085             return this._coordinates
34086           };
34087           Point.prototype.getY = function getY () {
34088             if (this.getCoordinate() === null) {
34089               throw new Error('getY called on empty Point')
34090             }
34091             return this.getCoordinate().y
34092           };
34093           Point.prototype.isEmpty = function isEmpty () {
34094             return this._coordinates.size() === 0
34095           };
34096           Point.prototype.init = function init (coordinates) {
34097             if (coordinates === null) {
34098               coordinates = this.getFactory().getCoordinateSequenceFactory().create([]);
34099             }
34100             Assert.isTrue(coordinates.size() <= 1);
34101             this._coordinates = coordinates;
34102           };
34103           Point.prototype.isSimple = function isSimple () {
34104             return true
34105           };
34106           Point.prototype.interfaces_ = function interfaces_ () {
34107             return [Puntal]
34108           };
34109           Point.prototype.getClass = function getClass () {
34110             return Point
34111           };
34112           staticAccessors.serialVersionUID.get = function () { return 4902022702746614570 };
34113
34114           Object.defineProperties( Point, staticAccessors );
34115
34116           return Point;
34117         }(Geometry));
34118
34119         var Polygonal = function Polygonal () {};
34120
34121         Polygonal.prototype.interfaces_ = function interfaces_ () {
34122           return []
34123         };
34124         Polygonal.prototype.getClass = function getClass () {
34125           return Polygonal
34126         };
34127
34128         var Polygon = (function (Geometry$$1) {
34129           function Polygon (shell, holes, factory) {
34130             Geometry$$1.call(this, factory);
34131             this._shell = null;
34132             this._holes = null;
34133             if (shell === null) {
34134               shell = this.getFactory().createLinearRing();
34135             }
34136             if (holes === null) {
34137               holes = [];
34138             }
34139             if (Geometry$$1.hasNullElements(holes)) {
34140               throw new IllegalArgumentException('holes must not contain null elements')
34141             }
34142             if (shell.isEmpty() && Geometry$$1.hasNonEmptyElements(holes)) {
34143               throw new IllegalArgumentException('shell is empty but holes are not')
34144             }
34145             this._shell = shell;
34146             this._holes = holes;
34147           }
34148
34149           if ( Geometry$$1 ) { Polygon.__proto__ = Geometry$$1; }
34150           Polygon.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );
34151           Polygon.prototype.constructor = Polygon;
34152
34153           var staticAccessors = { serialVersionUID: { configurable: true } };
34154           Polygon.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {
34155             return this._shell.getEnvelopeInternal()
34156           };
34157           Polygon.prototype.getSortIndex = function getSortIndex () {
34158             return Geometry$$1.SORTINDEX_POLYGON
34159           };
34160           Polygon.prototype.getCoordinates = function getCoordinates () {
34161             var this$1 = this;
34162
34163             if (this.isEmpty()) {
34164               return []
34165             }
34166             var coordinates = new Array(this.getNumPoints()).fill(null);
34167             var k = -1;
34168             var shellCoordinates = this._shell.getCoordinates();
34169             for (var x = 0; x < shellCoordinates.length; x++) {
34170               k++;
34171               coordinates[k] = shellCoordinates[x];
34172             }
34173             for (var i = 0; i < this._holes.length; i++) {
34174               var childCoordinates = this$1._holes[i].getCoordinates();
34175               for (var j = 0; j < childCoordinates.length; j++) {
34176                 k++;
34177                 coordinates[k] = childCoordinates[j];
34178               }
34179             }
34180             return coordinates
34181           };
34182           Polygon.prototype.getArea = function getArea () {
34183             var this$1 = this;
34184
34185             var area = 0.0;
34186             area += Math.abs(CGAlgorithms.signedArea(this._shell.getCoordinateSequence()));
34187             for (var i = 0; i < this._holes.length; i++) {
34188               area -= Math.abs(CGAlgorithms.signedArea(this$1._holes[i].getCoordinateSequence()));
34189             }
34190             return area
34191           };
34192           Polygon.prototype.isRectangle = function isRectangle () {
34193             if (this.getNumInteriorRing() !== 0) { return false }
34194             if (this._shell === null) { return false }
34195             if (this._shell.getNumPoints() !== 5) { return false }
34196             var seq = this._shell.getCoordinateSequence();
34197             var env = this.getEnvelopeInternal();
34198             for (var i = 0; i < 5; i++) {
34199               var x = seq.getX(i);
34200               if (!(x === env.getMinX() || x === env.getMaxX())) { return false }
34201               var y = seq.getY(i);
34202               if (!(y === env.getMinY() || y === env.getMaxY())) { return false }
34203             }
34204             var prevX = seq.getX(0);
34205             var prevY = seq.getY(0);
34206             for (var i$1 = 1; i$1 <= 4; i$1++) {
34207               var x$1 = seq.getX(i$1);
34208               var y$1 = seq.getY(i$1);
34209               var xChanged = x$1 !== prevX;
34210               var yChanged = y$1 !== prevY;
34211               if (xChanged === yChanged) { return false }
34212               prevX = x$1;
34213               prevY = y$1;
34214             }
34215             return true
34216           };
34217           Polygon.prototype.equalsExact = function equalsExact () {
34218             var this$1 = this;
34219
34220             if (arguments.length === 2) {
34221               var other = arguments[0];
34222               var tolerance = arguments[1];
34223               if (!this.isEquivalentClass(other)) {
34224                 return false
34225               }
34226               var otherPolygon = other;
34227               var thisShell = this._shell;
34228               var otherPolygonShell = otherPolygon._shell;
34229               if (!thisShell.equalsExact(otherPolygonShell, tolerance)) {
34230                 return false
34231               }
34232               if (this._holes.length !== otherPolygon._holes.length) {
34233                 return false
34234               }
34235               for (var i = 0; i < this._holes.length; i++) {
34236                 if (!this$1._holes[i].equalsExact(otherPolygon._holes[i], tolerance)) {
34237                   return false
34238                 }
34239               }
34240               return true
34241             } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }
34242           };
34243           Polygon.prototype.normalize = function normalize () {
34244             var this$1 = this;
34245
34246             if (arguments.length === 0) {
34247               this.normalize(this._shell, true);
34248               for (var i = 0; i < this._holes.length; i++) {
34249                 this$1.normalize(this$1._holes[i], false);
34250               }
34251               Arrays.sort(this._holes);
34252             } else if (arguments.length === 2) {
34253               var ring = arguments[0];
34254               var clockwise = arguments[1];
34255               if (ring.isEmpty()) {
34256                 return null
34257               }
34258               var uniqueCoordinates = new Array(ring.getCoordinates().length - 1).fill(null);
34259               System.arraycopy(ring.getCoordinates(), 0, uniqueCoordinates, 0, uniqueCoordinates.length);
34260               var minCoordinate = CoordinateArrays.minCoordinate(ring.getCoordinates());
34261               CoordinateArrays.scroll(uniqueCoordinates, minCoordinate);
34262               System.arraycopy(uniqueCoordinates, 0, ring.getCoordinates(), 0, uniqueCoordinates.length);
34263               ring.getCoordinates()[uniqueCoordinates.length] = uniqueCoordinates[0];
34264               if (CGAlgorithms.isCCW(ring.getCoordinates()) === clockwise) {
34265                 CoordinateArrays.reverse(ring.getCoordinates());
34266               }
34267             }
34268           };
34269           Polygon.prototype.getCoordinate = function getCoordinate () {
34270             return this._shell.getCoordinate()
34271           };
34272           Polygon.prototype.getNumInteriorRing = function getNumInteriorRing () {
34273             return this._holes.length
34274           };
34275           Polygon.prototype.getBoundaryDimension = function getBoundaryDimension () {
34276             return 1
34277           };
34278           Polygon.prototype.getDimension = function getDimension () {
34279             return 2
34280           };
34281           Polygon.prototype.getLength = function getLength () {
34282             var this$1 = this;
34283
34284             var len = 0.0;
34285             len += this._shell.getLength();
34286             for (var i = 0; i < this._holes.length; i++) {
34287               len += this$1._holes[i].getLength();
34288             }
34289             return len
34290           };
34291           Polygon.prototype.getNumPoints = function getNumPoints () {
34292             var this$1 = this;
34293
34294             var numPoints = this._shell.getNumPoints();
34295             for (var i = 0; i < this._holes.length; i++) {
34296               numPoints += this$1._holes[i].getNumPoints();
34297             }
34298             return numPoints
34299           };
34300           Polygon.prototype.reverse = function reverse () {
34301             var this$1 = this;
34302
34303             var poly = this.copy();
34304             poly._shell = this._shell.copy().reverse();
34305             poly._holes = new Array(this._holes.length).fill(null);
34306             for (var i = 0; i < this._holes.length; i++) {
34307               poly._holes[i] = this$1._holes[i].copy().reverse();
34308             }
34309             return poly
34310           };
34311           Polygon.prototype.convexHull = function convexHull () {
34312             return this.getExteriorRing().convexHull()
34313           };
34314           Polygon.prototype.compareToSameClass = function compareToSameClass () {
34315             var this$1 = this;
34316
34317             if (arguments.length === 1) {
34318               var o = arguments[0];
34319               var thisShell = this._shell;
34320               var otherShell = o._shell;
34321               return thisShell.compareToSameClass(otherShell)
34322             } else if (arguments.length === 2) {
34323               var o$1 = arguments[0];
34324               var comp = arguments[1];
34325               var poly = o$1;
34326               var thisShell$1 = this._shell;
34327               var otherShell$1 = poly._shell;
34328               var shellComp = thisShell$1.compareToSameClass(otherShell$1, comp);
34329               if (shellComp !== 0) { return shellComp }
34330               var nHole1 = this.getNumInteriorRing();
34331               var nHole2 = poly.getNumInteriorRing();
34332               var i = 0;
34333               while (i < nHole1 && i < nHole2) {
34334                 var thisHole = this$1.getInteriorRingN(i);
34335                 var otherHole = poly.getInteriorRingN(i);
34336                 var holeComp = thisHole.compareToSameClass(otherHole, comp);
34337                 if (holeComp !== 0) { return holeComp }
34338                 i++;
34339               }
34340               if (i < nHole1) { return 1 }
34341               if (i < nHole2) { return -1 }
34342               return 0
34343             }
34344           };
34345           Polygon.prototype.apply = function apply (filter) {
34346             var this$1 = this;
34347
34348             if (hasInterface(filter, CoordinateFilter)) {
34349               this._shell.apply(filter);
34350               for (var i$1 = 0; i$1 < this._holes.length; i$1++) {
34351                 this$1._holes[i$1].apply(filter);
34352               }
34353             } else if (hasInterface(filter, CoordinateSequenceFilter)) {
34354               this._shell.apply(filter);
34355               if (!filter.isDone()) {
34356                 for (var i$2 = 0; i$2 < this._holes.length; i$2++) {
34357                   this$1._holes[i$2].apply(filter);
34358                   if (filter.isDone()) { break }
34359                 }
34360               }
34361               if (filter.isGeometryChanged()) { this.geometryChanged(); }
34362             } else if (hasInterface(filter, GeometryFilter)) {
34363               filter.filter(this);
34364             } else if (hasInterface(filter, GeometryComponentFilter)) {
34365               filter.filter(this);
34366               this._shell.apply(filter);
34367               for (var i = 0; i < this._holes.length; i++) {
34368                 this$1._holes[i].apply(filter);
34369               }
34370             }
34371           };
34372           Polygon.prototype.getBoundary = function getBoundary () {
34373             var this$1 = this;
34374
34375             if (this.isEmpty()) {
34376               return this.getFactory().createMultiLineString()
34377             }
34378             var rings = new Array(this._holes.length + 1).fill(null);
34379             rings[0] = this._shell;
34380             for (var i = 0; i < this._holes.length; i++) {
34381               rings[i + 1] = this$1._holes[i];
34382             }
34383             if (rings.length <= 1) { return this.getFactory().createLinearRing(rings[0].getCoordinateSequence()) }
34384             return this.getFactory().createMultiLineString(rings)
34385           };
34386           Polygon.prototype.clone = function clone () {
34387             var this$1 = this;
34388
34389             var poly = Geometry$$1.prototype.clone.call(this);
34390             poly._shell = this._shell.clone();
34391             poly._holes = new Array(this._holes.length).fill(null);
34392             for (var i = 0; i < this._holes.length; i++) {
34393               poly._holes[i] = this$1._holes[i].clone();
34394             }
34395             return poly
34396           };
34397           Polygon.prototype.getGeometryType = function getGeometryType () {
34398             return 'Polygon'
34399           };
34400           Polygon.prototype.copy = function copy () {
34401             var this$1 = this;
34402
34403             var shell = this._shell.copy();
34404             var holes = new Array(this._holes.length).fill(null);
34405             for (var i = 0; i < holes.length; i++) {
34406               holes[i] = this$1._holes[i].copy();
34407             }
34408             return new Polygon(shell, holes, this._factory)
34409           };
34410           Polygon.prototype.getExteriorRing = function getExteriorRing () {
34411             return this._shell
34412           };
34413           Polygon.prototype.isEmpty = function isEmpty () {
34414             return this._shell.isEmpty()
34415           };
34416           Polygon.prototype.getInteriorRingN = function getInteriorRingN (n) {
34417             return this._holes[n]
34418           };
34419           Polygon.prototype.interfaces_ = function interfaces_ () {
34420             return [Polygonal]
34421           };
34422           Polygon.prototype.getClass = function getClass () {
34423             return Polygon
34424           };
34425           staticAccessors.serialVersionUID.get = function () { return -3494792200821764533 };
34426
34427           Object.defineProperties( Polygon, staticAccessors );
34428
34429           return Polygon;
34430         }(Geometry));
34431
34432         var MultiPoint = (function (GeometryCollection$$1) {
34433           function MultiPoint () {
34434             GeometryCollection$$1.apply(this, arguments);
34435           }
34436
34437           if ( GeometryCollection$$1 ) { MultiPoint.__proto__ = GeometryCollection$$1; }
34438           MultiPoint.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );
34439           MultiPoint.prototype.constructor = MultiPoint;
34440
34441           var staticAccessors = { serialVersionUID: { configurable: true } };
34442
34443           MultiPoint.prototype.getSortIndex = function getSortIndex () {
34444             return Geometry.SORTINDEX_MULTIPOINT
34445           };
34446           MultiPoint.prototype.isValid = function isValid () {
34447             return true
34448           };
34449           MultiPoint.prototype.equalsExact = function equalsExact () {
34450             if (arguments.length === 2) {
34451               var other = arguments[0];
34452               var tolerance = arguments[1];
34453               if (!this.isEquivalentClass(other)) {
34454                 return false
34455               }
34456               return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)
34457             } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }
34458           };
34459           MultiPoint.prototype.getCoordinate = function getCoordinate () {
34460             if (arguments.length === 1) {
34461               var n = arguments[0];
34462               return this._geometries[n].getCoordinate()
34463             } else { return GeometryCollection$$1.prototype.getCoordinate.apply(this, arguments) }
34464           };
34465           MultiPoint.prototype.getBoundaryDimension = function getBoundaryDimension () {
34466             return Dimension.FALSE
34467           };
34468           MultiPoint.prototype.getDimension = function getDimension () {
34469             return 0
34470           };
34471           MultiPoint.prototype.getBoundary = function getBoundary () {
34472             return this.getFactory().createGeometryCollection(null)
34473           };
34474           MultiPoint.prototype.getGeometryType = function getGeometryType () {
34475             return 'MultiPoint'
34476           };
34477           MultiPoint.prototype.copy = function copy () {
34478             var this$1 = this;
34479
34480             var points = new Array(this._geometries.length).fill(null);
34481             for (var i = 0; i < points.length; i++) {
34482               points[i] = this$1._geometries[i].copy();
34483             }
34484             return new MultiPoint(points, this._factory)
34485           };
34486           MultiPoint.prototype.interfaces_ = function interfaces_ () {
34487             return [Puntal]
34488           };
34489           MultiPoint.prototype.getClass = function getClass () {
34490             return MultiPoint
34491           };
34492           staticAccessors.serialVersionUID.get = function () { return -8048474874175355449 };
34493
34494           Object.defineProperties( MultiPoint, staticAccessors );
34495
34496           return MultiPoint;
34497         }(GeometryCollection));
34498
34499         var LinearRing = (function (LineString$$1) {
34500           function LinearRing (points, factory) {
34501             if (points instanceof Coordinate && factory instanceof GeometryFactory) {
34502               points = factory.getCoordinateSequenceFactory().create(points);
34503             }
34504             LineString$$1.call(this, points, factory);
34505             this.validateConstruction();
34506           }
34507
34508           if ( LineString$$1 ) { LinearRing.__proto__ = LineString$$1; }
34509           LinearRing.prototype = Object.create( LineString$$1 && LineString$$1.prototype );
34510           LinearRing.prototype.constructor = LinearRing;
34511
34512           var staticAccessors = { MINIMUM_VALID_SIZE: { configurable: true },serialVersionUID: { configurable: true } };
34513           LinearRing.prototype.getSortIndex = function getSortIndex () {
34514             return Geometry.SORTINDEX_LINEARRING
34515           };
34516           LinearRing.prototype.getBoundaryDimension = function getBoundaryDimension () {
34517             return Dimension.FALSE
34518           };
34519           LinearRing.prototype.isClosed = function isClosed () {
34520             if (this.isEmpty()) {
34521               return true
34522             }
34523             return LineString$$1.prototype.isClosed.call(this)
34524           };
34525           LinearRing.prototype.reverse = function reverse () {
34526             var seq = this._points.copy();
34527             CoordinateSequences.reverse(seq);
34528             var rev = this.getFactory().createLinearRing(seq);
34529             return rev
34530           };
34531           LinearRing.prototype.validateConstruction = function validateConstruction () {
34532             if (!this.isEmpty() && !LineString$$1.prototype.isClosed.call(this)) {
34533               throw new IllegalArgumentException('Points of LinearRing do not form a closed linestring')
34534             }
34535             if (this.getCoordinateSequence().size() >= 1 && this.getCoordinateSequence().size() < LinearRing.MINIMUM_VALID_SIZE) {
34536               throw new IllegalArgumentException('Invalid number of points in LinearRing (found ' + this.getCoordinateSequence().size() + ' - must be 0 or >= 4)')
34537             }
34538           };
34539           LinearRing.prototype.getGeometryType = function getGeometryType () {
34540             return 'LinearRing'
34541           };
34542           LinearRing.prototype.copy = function copy () {
34543             return new LinearRing(this._points.copy(), this._factory)
34544           };
34545           LinearRing.prototype.interfaces_ = function interfaces_ () {
34546             return []
34547           };
34548           LinearRing.prototype.getClass = function getClass () {
34549             return LinearRing
34550           };
34551           staticAccessors.MINIMUM_VALID_SIZE.get = function () { return 4 };
34552           staticAccessors.serialVersionUID.get = function () { return -4261142084085851829 };
34553
34554           Object.defineProperties( LinearRing, staticAccessors );
34555
34556           return LinearRing;
34557         }(LineString));
34558
34559         var MultiPolygon = (function (GeometryCollection$$1) {
34560           function MultiPolygon () {
34561             GeometryCollection$$1.apply(this, arguments);
34562           }
34563
34564           if ( GeometryCollection$$1 ) { MultiPolygon.__proto__ = GeometryCollection$$1; }
34565           MultiPolygon.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );
34566           MultiPolygon.prototype.constructor = MultiPolygon;
34567
34568           var staticAccessors = { serialVersionUID: { configurable: true } };
34569
34570           MultiPolygon.prototype.getSortIndex = function getSortIndex () {
34571             return Geometry.SORTINDEX_MULTIPOLYGON
34572           };
34573           MultiPolygon.prototype.equalsExact = function equalsExact () {
34574             if (arguments.length === 2) {
34575               var other = arguments[0];
34576               var tolerance = arguments[1];
34577               if (!this.isEquivalentClass(other)) {
34578                 return false
34579               }
34580               return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)
34581             } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }
34582           };
34583           MultiPolygon.prototype.getBoundaryDimension = function getBoundaryDimension () {
34584             return 1
34585           };
34586           MultiPolygon.prototype.getDimension = function getDimension () {
34587             return 2
34588           };
34589           MultiPolygon.prototype.reverse = function reverse () {
34590             var this$1 = this;
34591
34592             var n = this._geometries.length;
34593             var revGeoms = new Array(n).fill(null);
34594             for (var i = 0; i < this._geometries.length; i++) {
34595               revGeoms[i] = this$1._geometries[i].reverse();
34596             }
34597             return this.getFactory().createMultiPolygon(revGeoms)
34598           };
34599           MultiPolygon.prototype.getBoundary = function getBoundary () {
34600             var this$1 = this;
34601
34602             if (this.isEmpty()) {
34603               return this.getFactory().createMultiLineString()
34604             }
34605             var allRings = new ArrayList();
34606             for (var i = 0; i < this._geometries.length; i++) {
34607               var polygon = this$1._geometries[i];
34608               var rings = polygon.getBoundary();
34609               for (var j = 0; j < rings.getNumGeometries(); j++) {
34610                 allRings.add(rings.getGeometryN(j));
34611               }
34612             }
34613             var allRingsArray = new Array(allRings.size()).fill(null);
34614             return this.getFactory().createMultiLineString(allRings.toArray(allRingsArray))
34615           };
34616           MultiPolygon.prototype.getGeometryType = function getGeometryType () {
34617             return 'MultiPolygon'
34618           };
34619           MultiPolygon.prototype.copy = function copy () {
34620             var this$1 = this;
34621
34622             var polygons = new Array(this._geometries.length).fill(null);
34623             for (var i = 0; i < polygons.length; i++) {
34624               polygons[i] = this$1._geometries[i].copy();
34625             }
34626             return new MultiPolygon(polygons, this._factory)
34627           };
34628           MultiPolygon.prototype.interfaces_ = function interfaces_ () {
34629             return [Polygonal]
34630           };
34631           MultiPolygon.prototype.getClass = function getClass () {
34632             return MultiPolygon
34633           };
34634           staticAccessors.serialVersionUID.get = function () { return -551033529766975875 };
34635
34636           Object.defineProperties( MultiPolygon, staticAccessors );
34637
34638           return MultiPolygon;
34639         }(GeometryCollection));
34640
34641         var GeometryEditor = function GeometryEditor (factory) {
34642           this._factory = factory || null;
34643           this._isUserDataCopied = false;
34644         };
34645
34646         var staticAccessors$16 = { NoOpGeometryOperation: { configurable: true },CoordinateOperation: { configurable: true },CoordinateSequenceOperation: { configurable: true } };
34647         GeometryEditor.prototype.setCopyUserData = function setCopyUserData (isUserDataCopied) {
34648           this._isUserDataCopied = isUserDataCopied;
34649         };
34650         GeometryEditor.prototype.edit = function edit (geometry, operation) {
34651           if (geometry === null) { return null }
34652           var result = this.editInternal(geometry, operation);
34653           if (this._isUserDataCopied) {
34654             result.setUserData(geometry.getUserData());
34655           }
34656           return result
34657         };
34658         GeometryEditor.prototype.editInternal = function editInternal (geometry, operation) {
34659           if (this._factory === null) { this._factory = geometry.getFactory(); }
34660           if (geometry instanceof GeometryCollection) {
34661             return this.editGeometryCollection(geometry, operation)
34662           }
34663           if (geometry instanceof Polygon) {
34664             return this.editPolygon(geometry, operation)
34665           }
34666           if (geometry instanceof Point) {
34667             return operation.edit(geometry, this._factory)
34668           }
34669           if (geometry instanceof LineString) {
34670             return operation.edit(geometry, this._factory)
34671           }
34672           Assert.shouldNeverReachHere('Unsupported Geometry class: ' + geometry.getClass().getName());
34673           return null
34674         };
34675         GeometryEditor.prototype.editGeometryCollection = function editGeometryCollection (collection, operation) {
34676             var this$1 = this;
34677
34678           var collectionForType = operation.edit(collection, this._factory);
34679           var geometries = new ArrayList();
34680           for (var i = 0; i < collectionForType.getNumGeometries(); i++) {
34681             var geometry = this$1.edit(collectionForType.getGeometryN(i), operation);
34682             if (geometry === null || geometry.isEmpty()) {
34683               continue
34684             }
34685             geometries.add(geometry);
34686           }
34687           if (collectionForType.getClass() === MultiPoint) {
34688             return this._factory.createMultiPoint(geometries.toArray([]))
34689           }
34690           if (collectionForType.getClass() === MultiLineString) {
34691             return this._factory.createMultiLineString(geometries.toArray([]))
34692           }
34693           if (collectionForType.getClass() === MultiPolygon) {
34694             return this._factory.createMultiPolygon(geometries.toArray([]))
34695           }
34696           return this._factory.createGeometryCollection(geometries.toArray([]))
34697         };
34698         GeometryEditor.prototype.editPolygon = function editPolygon (polygon, operation) {
34699             var this$1 = this;
34700
34701           var newPolygon = operation.edit(polygon, this._factory);
34702           if (newPolygon === null) { newPolygon = this._factory.createPolygon(null); }
34703           if (newPolygon.isEmpty()) {
34704             return newPolygon
34705           }
34706           var shell = this.edit(newPolygon.getExteriorRing(), operation);
34707           if (shell === null || shell.isEmpty()) {
34708             return this._factory.createPolygon()
34709           }
34710           var holes = new ArrayList();
34711           for (var i = 0; i < newPolygon.getNumInteriorRing(); i++) {
34712             var hole = this$1.edit(newPolygon.getInteriorRingN(i), operation);
34713             if (hole === null || hole.isEmpty()) {
34714               continue
34715             }
34716             holes.add(hole);
34717           }
34718           return this._factory.createPolygon(shell, holes.toArray([]))
34719         };
34720         GeometryEditor.prototype.interfaces_ = function interfaces_ () {
34721           return []
34722         };
34723         GeometryEditor.prototype.getClass = function getClass () {
34724           return GeometryEditor
34725         };
34726         GeometryEditor.GeometryEditorOperation = function GeometryEditorOperation () {};
34727         staticAccessors$16.NoOpGeometryOperation.get = function () { return NoOpGeometryOperation };
34728         staticAccessors$16.CoordinateOperation.get = function () { return CoordinateOperation };
34729         staticAccessors$16.CoordinateSequenceOperation.get = function () { return CoordinateSequenceOperation };
34730
34731         Object.defineProperties( GeometryEditor, staticAccessors$16 );
34732
34733         var NoOpGeometryOperation = function NoOpGeometryOperation () {};
34734
34735         NoOpGeometryOperation.prototype.edit = function edit (geometry, factory) {
34736           return geometry
34737         };
34738         NoOpGeometryOperation.prototype.interfaces_ = function interfaces_ () {
34739           return [GeometryEditor.GeometryEditorOperation]
34740         };
34741         NoOpGeometryOperation.prototype.getClass = function getClass () {
34742           return NoOpGeometryOperation
34743         };
34744
34745         var CoordinateOperation = function CoordinateOperation () {};
34746
34747         CoordinateOperation.prototype.edit = function edit (geometry, factory) {
34748           var coords = this.editCoordinates(geometry.getCoordinates(), geometry);
34749           if (coords === null) { return geometry }
34750           if (geometry instanceof LinearRing) {
34751             return factory.createLinearRing(coords)
34752           }
34753           if (geometry instanceof LineString) {
34754             return factory.createLineString(coords)
34755           }
34756           if (geometry instanceof Point) {
34757             if (coords.length > 0) {
34758               return factory.createPoint(coords[0])
34759             } else {
34760               return factory.createPoint()
34761             }
34762           }
34763           return geometry
34764         };
34765         CoordinateOperation.prototype.interfaces_ = function interfaces_ () {
34766           return [GeometryEditor.GeometryEditorOperation]
34767         };
34768         CoordinateOperation.prototype.getClass = function getClass () {
34769           return CoordinateOperation
34770         };
34771
34772         var CoordinateSequenceOperation = function CoordinateSequenceOperation () {};
34773
34774         CoordinateSequenceOperation.prototype.edit = function edit (geometry, factory) {
34775           if (geometry instanceof LinearRing) {
34776             return factory.createLinearRing(this.edit(geometry.getCoordinateSequence(), geometry))
34777           }
34778           if (geometry instanceof LineString) {
34779             return factory.createLineString(this.edit(geometry.getCoordinateSequence(), geometry))
34780           }
34781           if (geometry instanceof Point) {
34782             return factory.createPoint(this.edit(geometry.getCoordinateSequence(), geometry))
34783           }
34784           return geometry
34785         };
34786         CoordinateSequenceOperation.prototype.interfaces_ = function interfaces_ () {
34787           return [GeometryEditor.GeometryEditorOperation]
34788         };
34789         CoordinateSequenceOperation.prototype.getClass = function getClass () {
34790           return CoordinateSequenceOperation
34791         };
34792
34793         var CoordinateArraySequence = function CoordinateArraySequence () {
34794           var this$1 = this;
34795
34796           this._dimension = 3;
34797           this._coordinates = null;
34798           if (arguments.length === 1) {
34799             if (arguments[0] instanceof Array) {
34800               this._coordinates = arguments[0];
34801               this._dimension = 3;
34802             } else if (Number.isInteger(arguments[0])) {
34803               var size = arguments[0];
34804               this._coordinates = new Array(size).fill(null);
34805               for (var i = 0; i < size; i++) {
34806                 this$1._coordinates[i] = new Coordinate();
34807               }
34808             } else if (hasInterface(arguments[0], CoordinateSequence)) {
34809               var coordSeq = arguments[0];
34810               if (coordSeq === null) {
34811                 this._coordinates = new Array(0).fill(null);
34812                 return null
34813               }
34814               this._dimension = coordSeq.getDimension();
34815               this._coordinates = new Array(coordSeq.size()).fill(null);
34816               for (var i$1 = 0; i$1 < this._coordinates.length; i$1++) {
34817                 this$1._coordinates[i$1] = coordSeq.getCoordinateCopy(i$1);
34818               }
34819             }
34820           } else if (arguments.length === 2) {
34821             if (arguments[0] instanceof Array && Number.isInteger(arguments[1])) {
34822               var coordinates = arguments[0];
34823               var dimension = arguments[1];
34824               this._coordinates = coordinates;
34825               this._dimension = dimension;
34826               if (coordinates === null) { this._coordinates = new Array(0).fill(null); }
34827             } else if (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1])) {
34828               var size$1 = arguments[0];
34829               var dimension$1 = arguments[1];
34830               this._coordinates = new Array(size$1).fill(null);
34831               this._dimension = dimension$1;
34832               for (var i$2 = 0; i$2 < size$1; i$2++) {
34833                 this$1._coordinates[i$2] = new Coordinate();
34834               }
34835             }
34836           }
34837         };
34838
34839         var staticAccessors$18 = { serialVersionUID: { configurable: true } };
34840         CoordinateArraySequence.prototype.setOrdinate = function setOrdinate (index, ordinateIndex, value) {
34841           switch (ordinateIndex) {
34842             case CoordinateSequence.X:
34843               this._coordinates[index].x = value;
34844               break
34845             case CoordinateSequence.Y:
34846               this._coordinates[index].y = value;
34847               break
34848             case CoordinateSequence.Z:
34849               this._coordinates[index].z = value;
34850               break
34851             default:
34852               throw new IllegalArgumentException('invalid ordinateIndex')
34853           }
34854         };
34855         CoordinateArraySequence.prototype.size = function size () {
34856           return this._coordinates.length
34857         };
34858         CoordinateArraySequence.prototype.getOrdinate = function getOrdinate (index, ordinateIndex) {
34859           switch (ordinateIndex) {
34860             case CoordinateSequence.X:
34861               return this._coordinates[index].x
34862             case CoordinateSequence.Y:
34863               return this._coordinates[index].y
34864             case CoordinateSequence.Z:
34865               return this._coordinates[index].z
34866           }
34867           return Double.NaN
34868         };
34869         CoordinateArraySequence.prototype.getCoordinate = function getCoordinate () {
34870           if (arguments.length === 1) {
34871             var i = arguments[0];
34872             return this._coordinates[i]
34873           } else if (arguments.length === 2) {
34874             var index = arguments[0];
34875             var coord = arguments[1];
34876             coord.x = this._coordinates[index].x;
34877             coord.y = this._coordinates[index].y;
34878             coord.z = this._coordinates[index].z;
34879           }
34880         };
34881         CoordinateArraySequence.prototype.getCoordinateCopy = function getCoordinateCopy (i) {
34882           return new Coordinate(this._coordinates[i])
34883         };
34884         CoordinateArraySequence.prototype.getDimension = function getDimension () {
34885           return this._dimension
34886         };
34887         CoordinateArraySequence.prototype.getX = function getX (index) {
34888           return this._coordinates[index].x
34889         };
34890         CoordinateArraySequence.prototype.clone = function clone () {
34891             var this$1 = this;
34892
34893           var cloneCoordinates = new Array(this.size()).fill(null);
34894           for (var i = 0; i < this._coordinates.length; i++) {
34895             cloneCoordinates[i] = this$1._coordinates[i].clone();
34896           }
34897           return new CoordinateArraySequence(cloneCoordinates, this._dimension)
34898         };
34899         CoordinateArraySequence.prototype.expandEnvelope = function expandEnvelope (env) {
34900             var this$1 = this;
34901
34902           for (var i = 0; i < this._coordinates.length; i++) {
34903             env.expandToInclude(this$1._coordinates[i]);
34904           }
34905           return env
34906         };
34907         CoordinateArraySequence.prototype.copy = function copy () {
34908             var this$1 = this;
34909
34910           var cloneCoordinates = new Array(this.size()).fill(null);
34911           for (var i = 0; i < this._coordinates.length; i++) {
34912             cloneCoordinates[i] = this$1._coordinates[i].copy();
34913           }
34914           return new CoordinateArraySequence(cloneCoordinates, this._dimension)
34915         };
34916         CoordinateArraySequence.prototype.toString = function toString () {
34917             var this$1 = this;
34918
34919           if (this._coordinates.length > 0) {
34920             var strBuf = new StringBuffer(17 * this._coordinates.length);
34921             strBuf.append('(');
34922             strBuf.append(this._coordinates[0]);
34923             for (var i = 1; i < this._coordinates.length; i++) {
34924               strBuf.append(', ');
34925               strBuf.append(this$1._coordinates[i]);
34926             }
34927             strBuf.append(')');
34928             return strBuf.toString()
34929           } else {
34930             return '()'
34931           }
34932         };
34933         CoordinateArraySequence.prototype.getY = function getY (index) {
34934           return this._coordinates[index].y
34935         };
34936         CoordinateArraySequence.prototype.toCoordinateArray = function toCoordinateArray () {
34937           return this._coordinates
34938         };
34939         CoordinateArraySequence.prototype.interfaces_ = function interfaces_ () {
34940           return [CoordinateSequence, Serializable]
34941         };
34942         CoordinateArraySequence.prototype.getClass = function getClass () {
34943           return CoordinateArraySequence
34944         };
34945         staticAccessors$18.serialVersionUID.get = function () { return -915438501601840650 };
34946
34947         Object.defineProperties( CoordinateArraySequence, staticAccessors$18 );
34948
34949         var CoordinateArraySequenceFactory = function CoordinateArraySequenceFactory () {};
34950
34951         var staticAccessors$17 = { serialVersionUID: { configurable: true },instanceObject: { configurable: true } };
34952
34953         CoordinateArraySequenceFactory.prototype.readResolve = function readResolve () {
34954           return CoordinateArraySequenceFactory.instance()
34955         };
34956         CoordinateArraySequenceFactory.prototype.create = function create () {
34957           if (arguments.length === 1) {
34958             if (arguments[0] instanceof Array) {
34959               var coordinates = arguments[0];
34960               return new CoordinateArraySequence(coordinates)
34961             } else if (hasInterface(arguments[0], CoordinateSequence)) {
34962               var coordSeq = arguments[0];
34963               return new CoordinateArraySequence(coordSeq)
34964             }
34965           } else if (arguments.length === 2) {
34966             var size = arguments[0];
34967             var dimension = arguments[1];
34968             if (dimension > 3) { dimension = 3; }
34969             if (dimension < 2) { return new CoordinateArraySequence(size) }
34970             return new CoordinateArraySequence(size, dimension)
34971           }
34972         };
34973         CoordinateArraySequenceFactory.prototype.interfaces_ = function interfaces_ () {
34974           return [CoordinateSequenceFactory, Serializable]
34975         };
34976         CoordinateArraySequenceFactory.prototype.getClass = function getClass () {
34977           return CoordinateArraySequenceFactory
34978         };
34979         CoordinateArraySequenceFactory.instance = function instance () {
34980           return CoordinateArraySequenceFactory.instanceObject
34981         };
34982
34983         staticAccessors$17.serialVersionUID.get = function () { return -4099577099607551657 };
34984         staticAccessors$17.instanceObject.get = function () { return new CoordinateArraySequenceFactory() };
34985
34986         Object.defineProperties( CoordinateArraySequenceFactory, staticAccessors$17 );
34987
34988         /**
34989          * @see http://download.oracle.com/javase/6/docs/api/java/util/HashMap.html
34990          *
34991          * @extends {javascript.util.Map}
34992          * @constructor
34993          * @private
34994          */
34995         var HashMap = (function (MapInterface) {
34996           function HashMap () {
34997             MapInterface.call(this);
34998             this.map_ = new Map();
34999           }
35000
35001           if ( MapInterface ) { HashMap.__proto__ = MapInterface; }
35002           HashMap.prototype = Object.create( MapInterface && MapInterface.prototype );
35003           HashMap.prototype.constructor = HashMap;
35004           /**
35005            * @override
35006            */
35007           HashMap.prototype.get = function get (key) {
35008             return this.map_.get(key) || null
35009           };
35010
35011           /**
35012            * @override
35013            */
35014           HashMap.prototype.put = function put (key, value) {
35015             this.map_.set(key, value);
35016             return value
35017           };
35018
35019           /**
35020            * @override
35021            */
35022           HashMap.prototype.values = function values () {
35023             var arrayList = new ArrayList();
35024             var it = this.map_.values();
35025             var o = it.next();
35026             while (!o.done) {
35027               arrayList.add(o.value);
35028               o = it.next();
35029             }
35030             return arrayList
35031           };
35032
35033           /**
35034            * @override
35035            */
35036           HashMap.prototype.entrySet = function entrySet () {
35037             var hashSet = new HashSet();
35038             this.map_.entries().forEach(function (entry) { return hashSet.add(entry); });
35039             return hashSet
35040           };
35041
35042           /**
35043            * @override
35044            */
35045           HashMap.prototype.size = function size () {
35046             return this.map_.size()
35047           };
35048
35049           return HashMap;
35050         }(Map$1$1));
35051
35052         var PrecisionModel = function PrecisionModel () {
35053           this._modelType = null;
35054           this._scale = null;
35055           if (arguments.length === 0) {
35056             this._modelType = PrecisionModel.FLOATING;
35057           } else if (arguments.length === 1) {
35058             if (arguments[0] instanceof Type) {
35059               var modelType = arguments[0];
35060               this._modelType = modelType;
35061               if (modelType === PrecisionModel.FIXED) {
35062                 this.setScale(1.0);
35063               }
35064             } else if (typeof arguments[0] === 'number') {
35065               var scale = arguments[0];
35066               this._modelType = PrecisionModel.FIXED;
35067               this.setScale(scale);
35068             } else if (arguments[0] instanceof PrecisionModel) {
35069               var pm = arguments[0];
35070               this._modelType = pm._modelType;
35071               this._scale = pm._scale;
35072             }
35073           }
35074         };
35075
35076         var staticAccessors$19 = { serialVersionUID: { configurable: true },maximumPreciseValue: { configurable: true } };
35077         PrecisionModel.prototype.equals = function equals (other) {
35078           if (!(other instanceof PrecisionModel)) {
35079             return false
35080           }
35081           var otherPrecisionModel = other;
35082           return this._modelType === otherPrecisionModel._modelType && this._scale === otherPrecisionModel._scale
35083         };
35084         PrecisionModel.prototype.compareTo = function compareTo (o) {
35085           var other = o;
35086           var sigDigits = this.getMaximumSignificantDigits();
35087           var otherSigDigits = other.getMaximumSignificantDigits();
35088           return new Integer(sigDigits).compareTo(new Integer(otherSigDigits))
35089         };
35090         PrecisionModel.prototype.getScale = function getScale () {
35091           return this._scale
35092         };
35093         PrecisionModel.prototype.isFloating = function isFloating () {
35094           return this._modelType === PrecisionModel.FLOATING || this._modelType === PrecisionModel.FLOATING_SINGLE
35095         };
35096         PrecisionModel.prototype.getType = function getType () {
35097           return this._modelType
35098         };
35099         PrecisionModel.prototype.toString = function toString () {
35100           var description = 'UNKNOWN';
35101           if (this._modelType === PrecisionModel.FLOATING) {
35102             description = 'Floating';
35103           } else if (this._modelType === PrecisionModel.FLOATING_SINGLE) {
35104             description = 'Floating-Single';
35105           } else if (this._modelType === PrecisionModel.FIXED) {
35106             description = 'Fixed (Scale=' + this.getScale() + ')';
35107           }
35108           return description
35109         };
35110         PrecisionModel.prototype.makePrecise = function makePrecise () {
35111           if (typeof arguments[0] === 'number') {
35112             var val = arguments[0];
35113             if (Double.isNaN(val)) { return val }
35114             if (this._modelType === PrecisionModel.FLOATING_SINGLE) {
35115               var floatSingleVal = val;
35116               return floatSingleVal
35117             }
35118             if (this._modelType === PrecisionModel.FIXED) {
35119               return Math.round(val * this._scale) / this._scale
35120             }
35121             return val
35122           } else if (arguments[0] instanceof Coordinate) {
35123             var coord = arguments[0];
35124             if (this._modelType === PrecisionModel.FLOATING) { return null }
35125             coord.x = this.makePrecise(coord.x);
35126             coord.y = this.makePrecise(coord.y);
35127           }
35128         };
35129         PrecisionModel.prototype.getMaximumSignificantDigits = function getMaximumSignificantDigits () {
35130           var maxSigDigits = 16;
35131           if (this._modelType === PrecisionModel.FLOATING) {
35132             maxSigDigits = 16;
35133           } else if (this._modelType === PrecisionModel.FLOATING_SINGLE) {
35134             maxSigDigits = 6;
35135           } else if (this._modelType === PrecisionModel.FIXED) {
35136             maxSigDigits = 1 + Math.trunc(Math.ceil(Math.log(this.getScale()) / Math.log(10)));
35137           }
35138           return maxSigDigits
35139         };
35140         PrecisionModel.prototype.setScale = function setScale (scale) {
35141           this._scale = Math.abs(scale);
35142         };
35143         PrecisionModel.prototype.interfaces_ = function interfaces_ () {
35144           return [Serializable, Comparable]
35145         };
35146         PrecisionModel.prototype.getClass = function getClass () {
35147           return PrecisionModel
35148         };
35149         PrecisionModel.mostPrecise = function mostPrecise (pm1, pm2) {
35150           if (pm1.compareTo(pm2) >= 0) { return pm1 }
35151           return pm2
35152         };
35153         staticAccessors$19.serialVersionUID.get = function () { return 7777263578777803835 };
35154         staticAccessors$19.maximumPreciseValue.get = function () { return 9007199254740992.0 };
35155
35156         Object.defineProperties( PrecisionModel, staticAccessors$19 );
35157
35158         var Type = function Type (name) {
35159           this._name = name || null;
35160           Type.nameToTypeMap.put(name, this);
35161         };
35162
35163         var staticAccessors$1$1 = { serialVersionUID: { configurable: true },nameToTypeMap: { configurable: true } };
35164         Type.prototype.readResolve = function readResolve () {
35165           return Type.nameToTypeMap.get(this._name)
35166         };
35167         Type.prototype.toString = function toString () {
35168           return this._name
35169         };
35170         Type.prototype.interfaces_ = function interfaces_ () {
35171           return [Serializable]
35172         };
35173         Type.prototype.getClass = function getClass () {
35174           return Type
35175         };
35176         staticAccessors$1$1.serialVersionUID.get = function () { return -5528602631731589822 };
35177         staticAccessors$1$1.nameToTypeMap.get = function () { return new HashMap() };
35178
35179         Object.defineProperties( Type, staticAccessors$1$1 );
35180
35181         PrecisionModel.Type = Type;
35182         PrecisionModel.FIXED = new Type('FIXED');
35183         PrecisionModel.FLOATING = new Type('FLOATING');
35184         PrecisionModel.FLOATING_SINGLE = new Type('FLOATING SINGLE');
35185
35186         var GeometryFactory = function GeometryFactory () {
35187           this._precisionModel = new PrecisionModel();
35188           this._SRID = 0;
35189           this._coordinateSequenceFactory = GeometryFactory.getDefaultCoordinateSequenceFactory();
35190
35191           if (arguments.length === 0) ; else if (arguments.length === 1) {
35192             if (hasInterface(arguments[0], CoordinateSequenceFactory)) {
35193               this._coordinateSequenceFactory = arguments[0];
35194             } else if (arguments[0] instanceof PrecisionModel) {
35195               this._precisionModel = arguments[0];
35196             }
35197           } else if (arguments.length === 2) {
35198             this._precisionModel = arguments[0];
35199             this._SRID = arguments[1];
35200           } else if (arguments.length === 3) {
35201             this._precisionModel = arguments[0];
35202             this._SRID = arguments[1];
35203             this._coordinateSequenceFactory = arguments[2];
35204           }
35205         };
35206
35207         var staticAccessors$2 = { serialVersionUID: { configurable: true } };
35208         GeometryFactory.prototype.toGeometry = function toGeometry (envelope) {
35209           if (envelope.isNull()) {
35210             return this.createPoint(null)
35211           }
35212           if (envelope.getMinX() === envelope.getMaxX() && envelope.getMinY() === envelope.getMaxY()) {
35213             return this.createPoint(new Coordinate(envelope.getMinX(), envelope.getMinY()))
35214           }
35215           if (envelope.getMinX() === envelope.getMaxX() || envelope.getMinY() === envelope.getMaxY()) {
35216             return this.createLineString([new Coordinate(envelope.getMinX(), envelope.getMinY()), new Coordinate(envelope.getMaxX(), envelope.getMaxY())])
35217           }
35218           return this.createPolygon(this.createLinearRing([new Coordinate(envelope.getMinX(), envelope.getMinY()), new Coordinate(envelope.getMinX(), envelope.getMaxY()), new Coordinate(envelope.getMaxX(), envelope.getMaxY()), new Coordinate(envelope.getMaxX(), envelope.getMinY()), new Coordinate(envelope.getMinX(), envelope.getMinY())]), null)
35219         };
35220         GeometryFactory.prototype.createLineString = function createLineString (coordinates) {
35221           if (!coordinates) { return new LineString(this.getCoordinateSequenceFactory().create([]), this) }
35222           else if (coordinates instanceof Array) { return new LineString(this.getCoordinateSequenceFactory().create(coordinates), this) }
35223           else if (hasInterface(coordinates, CoordinateSequence)) { return new LineString(coordinates, this) }
35224         };
35225         GeometryFactory.prototype.createMultiLineString = function createMultiLineString () {
35226           if (arguments.length === 0) {
35227             return new MultiLineString(null, this)
35228           } else if (arguments.length === 1) {
35229             var lineStrings = arguments[0];
35230             return new MultiLineString(lineStrings, this)
35231           }
35232         };
35233         GeometryFactory.prototype.buildGeometry = function buildGeometry (geomList) {
35234           var geomClass = null;
35235           var isHeterogeneous = false;
35236           var hasGeometryCollection = false;
35237           for (var i = geomList.iterator(); i.hasNext();) {
35238             var geom = i.next();
35239             var partClass = geom.getClass();
35240             if (geomClass === null) {
35241               geomClass = partClass;
35242             }
35243             if (partClass !== geomClass) {
35244               isHeterogeneous = true;
35245             }
35246             if (geom.isGeometryCollectionOrDerived()) { hasGeometryCollection = true; }
35247           }
35248           if (geomClass === null) {
35249             return this.createGeometryCollection()
35250           }
35251           if (isHeterogeneous || hasGeometryCollection) {
35252             return this.createGeometryCollection(GeometryFactory.toGeometryArray(geomList))
35253           }
35254           var geom0 = geomList.iterator().next();
35255           var isCollection = geomList.size() > 1;
35256           if (isCollection) {
35257             if (geom0 instanceof Polygon) {
35258               return this.createMultiPolygon(GeometryFactory.toPolygonArray(geomList))
35259             } else if (geom0 instanceof LineString) {
35260               return this.createMultiLineString(GeometryFactory.toLineStringArray(geomList))
35261             } else if (geom0 instanceof Point) {
35262               return this.createMultiPoint(GeometryFactory.toPointArray(geomList))
35263             }
35264             Assert.shouldNeverReachHere('Unhandled class: ' + geom0.getClass().getName());
35265           }
35266           return geom0
35267         };
35268         GeometryFactory.prototype.createMultiPointFromCoords = function createMultiPointFromCoords (coordinates) {
35269           return this.createMultiPoint(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)
35270         };
35271         GeometryFactory.prototype.createPoint = function createPoint () {
35272           if (arguments.length === 0) {
35273             return this.createPoint(this.getCoordinateSequenceFactory().create([]))
35274           } else if (arguments.length === 1) {
35275             if (arguments[0] instanceof Coordinate) {
35276               var coordinate = arguments[0];
35277               return this.createPoint(coordinate !== null ? this.getCoordinateSequenceFactory().create([coordinate]) : null)
35278             } else if (hasInterface(arguments[0], CoordinateSequence)) {
35279               var coordinates = arguments[0];
35280               return new Point(coordinates, this)
35281             }
35282           }
35283         };
35284         GeometryFactory.prototype.getCoordinateSequenceFactory = function getCoordinateSequenceFactory () {
35285           return this._coordinateSequenceFactory
35286         };
35287         GeometryFactory.prototype.createPolygon = function createPolygon () {
35288           if (arguments.length === 0) {
35289             return new Polygon(null, null, this)
35290           } else if (arguments.length === 1) {
35291             if (hasInterface(arguments[0], CoordinateSequence)) {
35292               var coordinates = arguments[0];
35293               return this.createPolygon(this.createLinearRing(coordinates))
35294             } else if (arguments[0] instanceof Array) {
35295               var coordinates$1 = arguments[0];
35296               return this.createPolygon(this.createLinearRing(coordinates$1))
35297             } else if (arguments[0] instanceof LinearRing) {
35298               var shell = arguments[0];
35299               return this.createPolygon(shell, null)
35300             }
35301           } else if (arguments.length === 2) {
35302             var shell$1 = arguments[0];
35303             var holes = arguments[1];
35304             return new Polygon(shell$1, holes, this)
35305           }
35306         };
35307         GeometryFactory.prototype.getSRID = function getSRID () {
35308           return this._SRID
35309         };
35310         GeometryFactory.prototype.createGeometryCollection = function createGeometryCollection () {
35311           if (arguments.length === 0) {
35312             return new GeometryCollection(null, this)
35313           } else if (arguments.length === 1) {
35314             var geometries = arguments[0];
35315             return new GeometryCollection(geometries, this)
35316           }
35317         };
35318         GeometryFactory.prototype.createGeometry = function createGeometry (g) {
35319           var editor = new GeometryEditor(this);
35320           return editor.edit(g, {
35321             edit: function () {
35322               if (arguments.length === 2) {
35323                 var coordSeq = arguments[0];
35324                 // const geometry = arguments[1]
35325                 return this._coordinateSequenceFactory.create(coordSeq)
35326               }
35327             }
35328           })
35329         };
35330         GeometryFactory.prototype.getPrecisionModel = function getPrecisionModel () {
35331           return this._precisionModel
35332         };
35333         GeometryFactory.prototype.createLinearRing = function createLinearRing () {
35334           if (arguments.length === 0) {
35335             return this.createLinearRing(this.getCoordinateSequenceFactory().create([]))
35336           } else if (arguments.length === 1) {
35337             if (arguments[0] instanceof Array) {
35338               var coordinates = arguments[0];
35339               return this.createLinearRing(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)
35340             } else if (hasInterface(arguments[0], CoordinateSequence)) {
35341               var coordinates$1 = arguments[0];
35342               return new LinearRing(coordinates$1, this)
35343             }
35344           }
35345         };
35346         GeometryFactory.prototype.createMultiPolygon = function createMultiPolygon () {
35347           if (arguments.length === 0) {
35348             return new MultiPolygon(null, this)
35349           } else if (arguments.length === 1) {
35350             var polygons = arguments[0];
35351             return new MultiPolygon(polygons, this)
35352           }
35353         };
35354         GeometryFactory.prototype.createMultiPoint = function createMultiPoint () {
35355             var this$1 = this;
35356
35357           if (arguments.length === 0) {
35358             return new MultiPoint(null, this)
35359           } else if (arguments.length === 1) {
35360             if (arguments[0] instanceof Array) {
35361               var point = arguments[0];
35362               return new MultiPoint(point, this)
35363             } else if (arguments[0] instanceof Array) {
35364               var coordinates = arguments[0];
35365               return this.createMultiPoint(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)
35366             } else if (hasInterface(arguments[0], CoordinateSequence)) {
35367               var coordinates$1 = arguments[0];
35368               if (coordinates$1 === null) {
35369                 return this.createMultiPoint(new Array(0).fill(null))
35370               }
35371               var points = new Array(coordinates$1.size()).fill(null);
35372               for (var i = 0; i < coordinates$1.size(); i++) {
35373                 var ptSeq = this$1.getCoordinateSequenceFactory().create(1, coordinates$1.getDimension());
35374                 CoordinateSequences.copy(coordinates$1, i, ptSeq, 0, 1);
35375                 points[i] = this$1.createPoint(ptSeq);
35376               }
35377               return this.createMultiPoint(points)
35378             }
35379           }
35380         };
35381         GeometryFactory.prototype.interfaces_ = function interfaces_ () {
35382           return [Serializable]
35383         };
35384         GeometryFactory.prototype.getClass = function getClass () {
35385           return GeometryFactory
35386         };
35387         GeometryFactory.toMultiPolygonArray = function toMultiPolygonArray (multiPolygons) {
35388           var multiPolygonArray = new Array(multiPolygons.size()).fill(null);
35389           return multiPolygons.toArray(multiPolygonArray)
35390         };
35391         GeometryFactory.toGeometryArray = function toGeometryArray (geometries) {
35392           if (geometries === null) { return null }
35393           var geometryArray = new Array(geometries.size()).fill(null);
35394           return geometries.toArray(geometryArray)
35395         };
35396         GeometryFactory.getDefaultCoordinateSequenceFactory = function getDefaultCoordinateSequenceFactory () {
35397           return CoordinateArraySequenceFactory.instance()
35398         };
35399         GeometryFactory.toMultiLineStringArray = function toMultiLineStringArray (multiLineStrings) {
35400           var multiLineStringArray = new Array(multiLineStrings.size()).fill(null);
35401           return multiLineStrings.toArray(multiLineStringArray)
35402         };
35403         GeometryFactory.toLineStringArray = function toLineStringArray (lineStrings) {
35404           var lineStringArray = new Array(lineStrings.size()).fill(null);
35405           return lineStrings.toArray(lineStringArray)
35406         };
35407         GeometryFactory.toMultiPointArray = function toMultiPointArray (multiPoints) {
35408           var multiPointArray = new Array(multiPoints.size()).fill(null);
35409           return multiPoints.toArray(multiPointArray)
35410         };
35411         GeometryFactory.toLinearRingArray = function toLinearRingArray (linearRings) {
35412           var linearRingArray = new Array(linearRings.size()).fill(null);
35413           return linearRings.toArray(linearRingArray)
35414         };
35415         GeometryFactory.toPointArray = function toPointArray (points) {
35416           var pointArray = new Array(points.size()).fill(null);
35417           return points.toArray(pointArray)
35418         };
35419         GeometryFactory.toPolygonArray = function toPolygonArray (polygons) {
35420           var polygonArray = new Array(polygons.size()).fill(null);
35421           return polygons.toArray(polygonArray)
35422         };
35423         GeometryFactory.createPointFromInternalCoord = function createPointFromInternalCoord (coord, exemplar) {
35424           exemplar.getPrecisionModel().makePrecise(coord);
35425           return exemplar.getFactory().createPoint(coord)
35426         };
35427         staticAccessors$2.serialVersionUID.get = function () { return -6820524753094095635 };
35428
35429         Object.defineProperties( GeometryFactory, staticAccessors$2 );
35430
35431         var geometryTypes = ['Point', 'MultiPoint', 'LineString', 'MultiLineString', 'Polygon', 'MultiPolygon'];
35432
35433         /**
35434          * Class for reading and writing Well-Known Text.Create a new parser for GeoJSON
35435          * NOTE: Adapted from OpenLayers 2.11 implementation.
35436          */
35437
35438         /**
35439          * Create a new parser for GeoJSON
35440          *
35441          * @param {GeometryFactory} geometryFactory
35442          * @return An instance of GeoJsonParser.
35443          * @constructor
35444          * @private
35445          */
35446         var GeoJSONParser = function GeoJSONParser (geometryFactory) {
35447           this.geometryFactory = geometryFactory || new GeometryFactory();
35448         };
35449         /**
35450          * Deserialize a GeoJSON object and return the Geometry or Feature(Collection) with JSTS Geometries
35451          *
35452          * @param {}
35453          *        A GeoJSON object.
35454          * @return {} A Geometry instance or object representing a Feature(Collection) with Geometry instances.
35455          * @private
35456          */
35457         GeoJSONParser.prototype.read = function read (json) {
35458           var obj;
35459           if (typeof json === 'string') {
35460             obj = JSON.parse(json);
35461           } else {
35462             obj = json;
35463           }
35464
35465           var type = obj.type;
35466
35467           if (!parse[type]) {
35468             throw new Error('Unknown GeoJSON type: ' + obj.type)
35469           }
35470
35471           if (geometryTypes.indexOf(type) !== -1) {
35472             return parse[type].apply(this, [obj.coordinates])
35473           } else if (type === 'GeometryCollection') {
35474             return parse[type].apply(this, [obj.geometries])
35475           }
35476
35477           // feature or feature collection
35478           return parse[type].apply(this, [obj])
35479         };
35480
35481         /**
35482          * Serialize a Geometry object into GeoJSON
35483          *
35484          * @param {Geometry}
35485          *        geometry A Geometry or array of Geometries.
35486          * @return {Object} A GeoJSON object represting the input Geometry/Geometries.
35487          * @private
35488          */
35489         GeoJSONParser.prototype.write = function write (geometry) {
35490           var type = geometry.getGeometryType();
35491
35492           if (!extract[type]) {
35493             throw new Error('Geometry is not supported')
35494           }
35495
35496           return extract[type].apply(this, [geometry])
35497         };
35498
35499         var parse = {
35500           /**
35501            * Parse a GeoJSON Feature object
35502            *
35503            * @param {Object}
35504            *          obj Object to parse.
35505            *
35506            * @return {Object} Feature with geometry/bbox converted to JSTS Geometries.
35507            */
35508           Feature: function (obj) {
35509             var feature = {};
35510
35511             // copy features
35512             for (var key in obj) {
35513               feature[key] = obj[key];
35514             }
35515
35516             // parse geometry
35517             if (obj.geometry) {
35518               var type = obj.geometry.type;
35519               if (!parse[type]) {
35520                 throw new Error('Unknown GeoJSON type: ' + obj.type)
35521               }
35522               feature.geometry = this.read(obj.geometry);
35523             }
35524
35525             // bbox
35526             if (obj.bbox) {
35527               feature.bbox = parse.bbox.apply(this, [obj.bbox]);
35528             }
35529
35530             return feature
35531           },
35532
35533           /**
35534            * Parse a GeoJSON FeatureCollection object
35535            *
35536            * @param {Object}
35537            *          obj Object to parse.
35538            *
35539            * @return {Object} FeatureCollection with geometry/bbox converted to JSTS Geometries.
35540            */
35541           FeatureCollection: function (obj) {
35542             var this$1 = this;
35543
35544             var featureCollection = {};
35545
35546             if (obj.features) {
35547               featureCollection.features = [];
35548
35549               for (var i = 0; i < obj.features.length; ++i) {
35550                 featureCollection.features.push(this$1.read(obj.features[i]));
35551               }
35552             }
35553
35554             if (obj.bbox) {
35555               featureCollection.bbox = this.parse.bbox.apply(this, [obj.bbox]);
35556             }
35557
35558             return featureCollection
35559           },
35560
35561           /**
35562            * Convert the ordinates in an array to an array of Coordinates
35563            *
35564            * @param {Array}
35565            *          array Array with {Number}s.
35566            *
35567            * @return {Array} Array with Coordinates.
35568            */
35569           coordinates: function (array) {
35570             var coordinates = [];
35571             for (var i = 0; i < array.length; ++i) {
35572               var sub = array[i];
35573               coordinates.push(new Coordinate(sub[0], sub[1]));
35574             }
35575             return coordinates
35576           },
35577
35578           /**
35579            * Convert the bbox to a LinearRing
35580            *
35581            * @param {Array}
35582            *          array Array with [xMin, yMin, xMax, yMax].
35583            *
35584            * @return {Array} Array with Coordinates.
35585            */
35586           bbox: function (array) {
35587             return this.geometryFactory.createLinearRing([
35588               new Coordinate(array[0], array[1]),
35589               new Coordinate(array[2], array[1]),
35590               new Coordinate(array[2], array[3]),
35591               new Coordinate(array[0], array[3]),
35592               new Coordinate(array[0], array[1])
35593             ])
35594           },
35595
35596           /**
35597            * Convert an Array with ordinates to a Point
35598            *
35599            * @param {Array}
35600            *          array Array with ordinates.
35601            *
35602            * @return {Point} Point.
35603            */
35604           Point: function (array) {
35605             var coordinate = new Coordinate(array[0], array[1]);
35606             return this.geometryFactory.createPoint(coordinate)
35607           },
35608
35609           /**
35610            * Convert an Array with coordinates to a MultiPoint
35611            *
35612            * @param {Array}
35613            *          array Array with coordinates.
35614            *
35615            * @return {MultiPoint} MultiPoint.
35616            */
35617           MultiPoint: function (array) {
35618             var this$1 = this;
35619
35620             var points = [];
35621             for (var i = 0; i < array.length; ++i) {
35622               points.push(parse.Point.apply(this$1, [array[i]]));
35623             }
35624             return this.geometryFactory.createMultiPoint(points)
35625           },
35626
35627           /**
35628            * Convert an Array with coordinates to a LineString
35629            *
35630            * @param {Array}
35631            *          array Array with coordinates.
35632            *
35633            * @return {LineString} LineString.
35634            */
35635           LineString: function (array) {
35636             var coordinates = parse.coordinates.apply(this, [array]);
35637             return this.geometryFactory.createLineString(coordinates)
35638           },
35639
35640           /**
35641            * Convert an Array with coordinates to a MultiLineString
35642            *
35643            * @param {Array}
35644            *          array Array with coordinates.
35645            *
35646            * @return {MultiLineString} MultiLineString.
35647            */
35648           MultiLineString: function (array) {
35649             var this$1 = this;
35650
35651             var lineStrings = [];
35652             for (var i = 0; i < array.length; ++i) {
35653               lineStrings.push(parse.LineString.apply(this$1, [array[i]]));
35654             }
35655             return this.geometryFactory.createMultiLineString(lineStrings)
35656           },
35657
35658           /**
35659            * Convert an Array to a Polygon
35660            *
35661            * @param {Array}
35662            *          array Array with shell and holes.
35663            *
35664            * @return {Polygon} Polygon.
35665            */
35666           Polygon: function (array) {
35667             var this$1 = this;
35668
35669             var shellCoordinates = parse.coordinates.apply(this, [array[0]]);
35670             var shell = this.geometryFactory.createLinearRing(shellCoordinates);
35671             var holes = [];
35672             for (var i = 1; i < array.length; ++i) {
35673               var hole = array[i];
35674               var coordinates = parse.coordinates.apply(this$1, [hole]);
35675               var linearRing = this$1.geometryFactory.createLinearRing(coordinates);
35676               holes.push(linearRing);
35677             }
35678             return this.geometryFactory.createPolygon(shell, holes)
35679           },
35680
35681           /**
35682            * Convert an Array to a MultiPolygon
35683            *
35684            * @param {Array}
35685            *          array Array of arrays with shell and rings.
35686            *
35687            * @return {MultiPolygon} MultiPolygon.
35688            */
35689           MultiPolygon: function (array) {
35690             var this$1 = this;
35691
35692             var polygons = [];
35693             for (var i = 0; i < array.length; ++i) {
35694               var polygon = array[i];
35695               polygons.push(parse.Polygon.apply(this$1, [polygon]));
35696             }
35697             return this.geometryFactory.createMultiPolygon(polygons)
35698           },
35699
35700           /**
35701            * Convert an Array to a GeometryCollection
35702            *
35703            * @param {Array}
35704            *          array Array of GeoJSON geometries.
35705            *
35706            * @return {GeometryCollection} GeometryCollection.
35707            */
35708           GeometryCollection: function (array) {
35709             var this$1 = this;
35710
35711             var geometries = [];
35712             for (var i = 0; i < array.length; ++i) {
35713               var geometry = array[i];
35714               geometries.push(this$1.read(geometry));
35715             }
35716             return this.geometryFactory.createGeometryCollection(geometries)
35717           }
35718         };
35719
35720         var extract = {
35721           /**
35722            * Convert a Coordinate to an Array
35723            *
35724            * @param {Coordinate}
35725            *          coordinate Coordinate to convert.
35726            *
35727            * @return {Array} Array of ordinates.
35728            */
35729           coordinate: function (coordinate) {
35730             return [coordinate.x, coordinate.y]
35731           },
35732
35733           /**
35734            * Convert a Point to a GeoJSON object
35735            *
35736            * @param {Point}
35737            *          point Point to convert.
35738            *
35739            * @return {Array} Array of 2 ordinates (paired to a coordinate).
35740            */
35741           Point: function (point) {
35742             var array = extract.coordinate.apply(this, [point.getCoordinate()]);
35743             return {
35744               type: 'Point',
35745               coordinates: array
35746             }
35747           },
35748
35749           /**
35750            * Convert a MultiPoint to a GeoJSON object
35751            *
35752            * @param {MultiPoint}
35753            *          multipoint MultiPoint to convert.
35754            *
35755            * @return {Array} Array of coordinates.
35756            */
35757           MultiPoint: function (multipoint) {
35758             var this$1 = this;
35759
35760             var array = [];
35761             for (var i = 0; i < multipoint._geometries.length; ++i) {
35762               var point = multipoint._geometries[i];
35763               var geoJson = extract.Point.apply(this$1, [point]);
35764               array.push(geoJson.coordinates);
35765             }
35766             return {
35767               type: 'MultiPoint',
35768               coordinates: array
35769             }
35770           },
35771
35772           /**
35773            * Convert a LineString to a GeoJSON object
35774            *
35775            * @param {LineString}
35776            *          linestring LineString to convert.
35777            *
35778            * @return {Array} Array of coordinates.
35779            */
35780           LineString: function (linestring) {
35781             var this$1 = this;
35782
35783             var array = [];
35784             var coordinates = linestring.getCoordinates();
35785             for (var i = 0; i < coordinates.length; ++i) {
35786               var coordinate = coordinates[i];
35787               array.push(extract.coordinate.apply(this$1, [coordinate]));
35788             }
35789             return {
35790               type: 'LineString',
35791               coordinates: array
35792             }
35793           },
35794
35795           /**
35796            * Convert a MultiLineString to a GeoJSON object
35797            *
35798            * @param {MultiLineString}
35799            *          multilinestring MultiLineString to convert.
35800            *
35801            * @return {Array} Array of Array of coordinates.
35802            */
35803           MultiLineString: function (multilinestring) {
35804             var this$1 = this;
35805
35806             var array = [];
35807             for (var i = 0; i < multilinestring._geometries.length; ++i) {
35808               var linestring = multilinestring._geometries[i];
35809               var geoJson = extract.LineString.apply(this$1, [linestring]);
35810               array.push(geoJson.coordinates);
35811             }
35812             return {
35813               type: 'MultiLineString',
35814               coordinates: array
35815             }
35816           },
35817
35818           /**
35819            * Convert a Polygon to a GeoJSON object
35820            *
35821            * @param {Polygon}
35822            *          polygon Polygon to convert.
35823            *
35824            * @return {Array} Array with shell, holes.
35825            */
35826           Polygon: function (polygon) {
35827             var this$1 = this;
35828
35829             var array = [];
35830             var shellGeoJson = extract.LineString.apply(this, [polygon._shell]);
35831             array.push(shellGeoJson.coordinates);
35832             for (var i = 0; i < polygon._holes.length; ++i) {
35833               var hole = polygon._holes[i];
35834               var holeGeoJson = extract.LineString.apply(this$1, [hole]);
35835               array.push(holeGeoJson.coordinates);
35836             }
35837             return {
35838               type: 'Polygon',
35839               coordinates: array
35840             }
35841           },
35842
35843           /**
35844            * Convert a MultiPolygon to a GeoJSON object
35845            *
35846            * @param {MultiPolygon}
35847            *          multipolygon MultiPolygon to convert.
35848            *
35849            * @return {Array} Array of polygons.
35850            */
35851           MultiPolygon: function (multipolygon) {
35852             var this$1 = this;
35853
35854             var array = [];
35855             for (var i = 0; i < multipolygon._geometries.length; ++i) {
35856               var polygon = multipolygon._geometries[i];
35857               var geoJson = extract.Polygon.apply(this$1, [polygon]);
35858               array.push(geoJson.coordinates);
35859             }
35860             return {
35861               type: 'MultiPolygon',
35862               coordinates: array
35863             }
35864           },
35865
35866           /**
35867            * Convert a GeometryCollection to a GeoJSON object
35868            *
35869            * @param {GeometryCollection}
35870            *          collection GeometryCollection to convert.
35871            *
35872            * @return {Array} Array of geometries.
35873            */
35874           GeometryCollection: function (collection) {
35875             var this$1 = this;
35876
35877             var array = [];
35878             for (var i = 0; i < collection._geometries.length; ++i) {
35879               var geometry = collection._geometries[i];
35880               var type = geometry.getGeometryType();
35881               array.push(extract[type].apply(this$1, [geometry]));
35882             }
35883             return {
35884               type: 'GeometryCollection',
35885               geometries: array
35886             }
35887           }
35888         };
35889
35890         /**
35891          * Converts a geometry in GeoJSON to a {@link Geometry}.
35892          */
35893
35894         /**
35895          * A <code>GeoJSONReader</code> is parameterized by a <code>GeometryFactory</code>,
35896          * to allow it to create <code>Geometry</code> objects of the appropriate
35897          * implementation. In particular, the <code>GeometryFactory</code> determines
35898          * the <code>PrecisionModel</code> and <code>SRID</code> that is used.
35899          *
35900          * @param {GeometryFactory} geometryFactory
35901          * @constructor
35902          */
35903         var GeoJSONReader = function GeoJSONReader (geometryFactory) {
35904           this.geometryFactory = geometryFactory || new GeometryFactory();
35905           this.precisionModel = this.geometryFactory.getPrecisionModel();
35906           this.parser = new GeoJSONParser(this.geometryFactory);
35907         };
35908         /**
35909          * Reads a GeoJSON representation of a {@link Geometry}
35910          *
35911          * Will also parse GeoJSON Features/FeatureCollections as custom objects.
35912          *
35913          * @param {Object|String} geoJson a GeoJSON Object or String.
35914          * @return {Geometry|Object} a <code>Geometry or Feature/FeatureCollection representation.</code>
35915          * @memberof GeoJSONReader
35916          */
35917         GeoJSONReader.prototype.read = function read (geoJson) {
35918           var geometry = this.parser.read(geoJson);
35919
35920           if (this.precisionModel.getType() === PrecisionModel.FIXED) {
35921             this.reducePrecision(geometry);
35922           }
35923
35924           return geometry
35925         };
35926
35927         // NOTE: this is a hack
35928         GeoJSONReader.prototype.reducePrecision = function reducePrecision (geometry) {
35929             var this$1 = this;
35930
35931           var i, len;
35932
35933           if (geometry.coordinate) {
35934             this.precisionModel.makePrecise(geometry.coordinate);
35935           } else if (geometry.points) {
35936             for (i = 0, len = geometry.points.length; i < len; i++) {
35937               this$1.precisionModel.makePrecise(geometry.points[i]);
35938             }
35939           } else if (geometry.geometries) {
35940             for (i = 0, len = geometry.geometries.length; i < len; i++) {
35941               this$1.reducePrecision(geometry.geometries[i]);
35942             }
35943           }
35944         };
35945
35946         /**
35947          * @module GeoJSONWriter
35948          */
35949
35950         /**
35951          * Writes the GeoJSON representation of a {@link Geometry}. The
35952          * The GeoJSON format is defined <A
35953          * HREF="http://geojson.org/geojson-spec.html">here</A>.
35954          */
35955
35956         /**
35957          * The <code>GeoJSONWriter</code> outputs coordinates rounded to the precision
35958          * model. Only the maximum number of decimal places necessary to represent the
35959          * ordinates to the required precision will be output.
35960          *
35961          * @param {GeometryFactory} geometryFactory
35962          * @constructor
35963          */
35964         var GeoJSONWriter = function GeoJSONWriter () {
35965           this.parser = new GeoJSONParser(this.geometryFactory);
35966         };
35967         /**
35968          * Converts a <code>Geometry</code> to its GeoJSON representation.
35969          *
35970          * @param {Geometry}
35971          *        geometry a <code>Geometry</code> to process.
35972          * @return {Object} The GeoJSON representation of the Geometry.
35973          * @memberof GeoJSONWriter
35974          */
35975         GeoJSONWriter.prototype.write = function write (geometry) {
35976           return this.parser.write(geometry)
35977         };
35978
35979         /* eslint-disable no-undef */
35980
35981         // io
35982
35983         var Position = function Position () {};
35984
35985         var staticAccessors$20 = { ON: { configurable: true },LEFT: { configurable: true },RIGHT: { configurable: true } };
35986
35987         Position.prototype.interfaces_ = function interfaces_ () {
35988           return []
35989         };
35990         Position.prototype.getClass = function getClass () {
35991           return Position
35992         };
35993         Position.opposite = function opposite (position) {
35994           if (position === Position.LEFT) { return Position.RIGHT }
35995           if (position === Position.RIGHT) { return Position.LEFT }
35996           return position
35997         };
35998         staticAccessors$20.ON.get = function () { return 0 };
35999         staticAccessors$20.LEFT.get = function () { return 1 };
36000         staticAccessors$20.RIGHT.get = function () { return 2 };
36001
36002         Object.defineProperties( Position, staticAccessors$20 );
36003
36004         /**
36005          * @param {string=} message Optional message
36006          * @extends {Error}
36007          * @constructor
36008          * @private
36009          */
36010         function EmptyStackException (message) {
36011           this.message = message || '';
36012         }
36013         EmptyStackException.prototype = new Error();
36014
36015         /**
36016          * @type {string}
36017          */
36018         EmptyStackException.prototype.name = 'EmptyStackException';
36019
36020         /**
36021          * @see http://download.oracle.com/javase/6/docs/api/java/util/Stack.html
36022          *
36023          * @extends {List}
36024          * @constructor
36025          * @private
36026          */
36027         function Stack () {
36028           /**
36029            * @type {Array}
36030            * @private
36031            */
36032           this.array_ = [];
36033         }
36034         Stack.prototype = new List();
36035
36036         /**
36037          * @override
36038          */
36039         Stack.prototype.add = function (e) {
36040           this.array_.push(e);
36041           return true
36042         };
36043
36044         /**
36045          * @override
36046          */
36047         Stack.prototype.get = function (index) {
36048           if (index < 0 || index >= this.size()) {
36049             throw new Error()
36050           }
36051
36052           return this.array_[index]
36053         };
36054
36055         /**
36056          * Pushes an item onto the top of this stack.
36057          * @param {Object} e
36058          * @return {Object}
36059          */
36060         Stack.prototype.push = function (e) {
36061           this.array_.push(e);
36062           return e
36063         };
36064
36065         /**
36066          * Pushes an item onto the top of this stack.
36067          * @param {Object} e
36068          * @return {Object}
36069          */
36070         Stack.prototype.pop = function (e) {
36071           if (this.array_.length === 0) {
36072             throw new EmptyStackException()
36073           }
36074
36075           return this.array_.pop()
36076         };
36077
36078         /**
36079          * Looks at the object at the top of this stack without removing it from the
36080          * stack.
36081          * @return {Object}
36082          */
36083         Stack.prototype.peek = function () {
36084           if (this.array_.length === 0) {
36085             throw new EmptyStackException()
36086           }
36087
36088           return this.array_[this.array_.length - 1]
36089         };
36090
36091         /**
36092          * Tests if this stack is empty.
36093          * @return {boolean} true if and only if this stack contains no items; false
36094          *         otherwise.
36095          */
36096         Stack.prototype.empty = function () {
36097           if (this.array_.length === 0) {
36098             return true
36099           } else {
36100             return false
36101           }
36102         };
36103
36104         /**
36105          * @return {boolean}
36106          */
36107         Stack.prototype.isEmpty = function () {
36108           return this.empty()
36109         };
36110
36111         /**
36112          * Returns the 1-based position where an object is on this stack. If the object
36113          * o occurs as an item in this stack, this method returns the distance from the
36114          * top of the stack of the occurrence nearest the top of the stack; the topmost
36115          * item on the stack is considered to be at distance 1. The equals method is
36116          * used to compare o to the items in this stack.
36117          *
36118          * NOTE: does not currently actually use equals. (=== is used)
36119          *
36120          * @param {Object} o
36121          * @return {number} the 1-based position from the top of the stack where the
36122          *         object is located; the return value -1 indicates that the object is
36123          *         not on the stack.
36124          */
36125         Stack.prototype.search = function (o) {
36126           return this.array_.indexOf(o)
36127         };
36128
36129         /**
36130          * @return {number}
36131          * @export
36132          */
36133         Stack.prototype.size = function () {
36134           return this.array_.length
36135         };
36136
36137         /**
36138          * @return {Array}
36139          */
36140         Stack.prototype.toArray = function () {
36141           var this$1 = this;
36142
36143           var array = [];
36144
36145           for (var i = 0, len = this.array_.length; i < len; i++) {
36146             array.push(this$1.array_[i]);
36147           }
36148
36149           return array
36150         };
36151
36152         var RightmostEdgeFinder = function RightmostEdgeFinder () {
36153           this._minIndex = -1;
36154           this._minCoord = null;
36155           this._minDe = null;
36156           this._orientedDe = null;
36157         };
36158         RightmostEdgeFinder.prototype.getCoordinate = function getCoordinate () {
36159           return this._minCoord
36160         };
36161         RightmostEdgeFinder.prototype.getRightmostSide = function getRightmostSide (de, index) {
36162           var side = this.getRightmostSideOfSegment(de, index);
36163           if (side < 0) { side = this.getRightmostSideOfSegment(de, index - 1); }
36164           if (side < 0) {
36165             this._minCoord = null;
36166             this.checkForRightmostCoordinate(de);
36167           }
36168           return side
36169         };
36170         RightmostEdgeFinder.prototype.findRightmostEdgeAtVertex = function findRightmostEdgeAtVertex () {
36171           var pts = this._minDe.getEdge().getCoordinates();
36172           Assert.isTrue(this._minIndex > 0 && this._minIndex < pts.length, 'rightmost point expected to be interior vertex of edge');
36173           var pPrev = pts[this._minIndex - 1];
36174           var pNext = pts[this._minIndex + 1];
36175           var orientation = CGAlgorithms.computeOrientation(this._minCoord, pNext, pPrev);
36176           var usePrev = false;
36177           if (pPrev.y < this._minCoord.y && pNext.y < this._minCoord.y && orientation === CGAlgorithms.COUNTERCLOCKWISE) {
36178             usePrev = true;
36179           } else if (pPrev.y > this._minCoord.y && pNext.y > this._minCoord.y && orientation === CGAlgorithms.CLOCKWISE) {
36180             usePrev = true;
36181           }
36182           if (usePrev) {
36183             this._minIndex = this._minIndex - 1;
36184           }
36185         };
36186         RightmostEdgeFinder.prototype.getRightmostSideOfSegment = function getRightmostSideOfSegment (de, i) {
36187           var e = de.getEdge();
36188           var coord = e.getCoordinates();
36189           if (i < 0 || i + 1 >= coord.length) { return -1 }
36190           if (coord[i].y === coord[i + 1].y) { return -1 }
36191           var pos = Position.LEFT;
36192           if (coord[i].y < coord[i + 1].y) { pos = Position.RIGHT; }
36193           return pos
36194         };
36195         RightmostEdgeFinder.prototype.getEdge = function getEdge () {
36196           return this._orientedDe
36197         };
36198         RightmostEdgeFinder.prototype.checkForRightmostCoordinate = function checkForRightmostCoordinate (de) {
36199             var this$1 = this;
36200
36201           var coord = de.getEdge().getCoordinates();
36202           for (var i = 0; i < coord.length - 1; i++) {
36203             if (this$1._minCoord === null || coord[i].x > this$1._minCoord.x) {
36204               this$1._minDe = de;
36205               this$1._minIndex = i;
36206               this$1._minCoord = coord[i];
36207             }
36208           }
36209         };
36210         RightmostEdgeFinder.prototype.findRightmostEdgeAtNode = function findRightmostEdgeAtNode () {
36211           var node = this._minDe.getNode();
36212           var star = node.getEdges();
36213           this._minDe = star.getRightmostEdge();
36214           if (!this._minDe.isForward()) {
36215             this._minDe = this._minDe.getSym();
36216             this._minIndex = this._minDe.getEdge().getCoordinates().length - 1;
36217           }
36218         };
36219         RightmostEdgeFinder.prototype.findEdge = function findEdge (dirEdgeList) {
36220             var this$1 = this;
36221
36222           for (var i = dirEdgeList.iterator(); i.hasNext();) {
36223             var de = i.next();
36224             if (!de.isForward()) { continue }
36225             this$1.checkForRightmostCoordinate(de);
36226           }
36227           Assert.isTrue(this._minIndex !== 0 || this._minCoord.equals(this._minDe.getCoordinate()), 'inconsistency in rightmost processing');
36228           if (this._minIndex === 0) {
36229             this.findRightmostEdgeAtNode();
36230           } else {
36231             this.findRightmostEdgeAtVertex();
36232           }
36233           this._orientedDe = this._minDe;
36234           var rightmostSide = this.getRightmostSide(this._minDe, this._minIndex);
36235           if (rightmostSide === Position.LEFT) {
36236             this._orientedDe = this._minDe.getSym();
36237           }
36238         };
36239         RightmostEdgeFinder.prototype.interfaces_ = function interfaces_ () {
36240           return []
36241         };
36242         RightmostEdgeFinder.prototype.getClass = function getClass () {
36243           return RightmostEdgeFinder
36244         };
36245
36246         var TopologyException = (function (RuntimeException$$1) {
36247           function TopologyException (msg, pt) {
36248             RuntimeException$$1.call(this, TopologyException.msgWithCoord(msg, pt));
36249             this.pt = pt ? new Coordinate(pt) : null;
36250             this.name = 'TopologyException';
36251           }
36252
36253           if ( RuntimeException$$1 ) { TopologyException.__proto__ = RuntimeException$$1; }
36254           TopologyException.prototype = Object.create( RuntimeException$$1 && RuntimeException$$1.prototype );
36255           TopologyException.prototype.constructor = TopologyException;
36256           TopologyException.prototype.getCoordinate = function getCoordinate () {
36257             return this.pt
36258           };
36259           TopologyException.prototype.interfaces_ = function interfaces_ () {
36260             return []
36261           };
36262           TopologyException.prototype.getClass = function getClass () {
36263             return TopologyException
36264           };
36265           TopologyException.msgWithCoord = function msgWithCoord (msg, pt) {
36266             if (!pt) { return msg + ' [ ' + pt + ' ]' }
36267             return msg
36268           };
36269
36270           return TopologyException;
36271         }(RuntimeException));
36272
36273         var LinkedList = function LinkedList () {
36274           this.array_ = [];
36275         };
36276         LinkedList.prototype.addLast = function addLast (e) {
36277           this.array_.push(e);
36278         };
36279         LinkedList.prototype.removeFirst = function removeFirst () {
36280           return this.array_.shift()
36281         };
36282         LinkedList.prototype.isEmpty = function isEmpty () {
36283           return this.array_.length === 0
36284         };
36285
36286         var BufferSubgraph = function BufferSubgraph () {
36287           this._finder = null;
36288           this._dirEdgeList = new ArrayList();
36289           this._nodes = new ArrayList();
36290           this._rightMostCoord = null;
36291           this._env = null;
36292           this._finder = new RightmostEdgeFinder();
36293         };
36294         BufferSubgraph.prototype.clearVisitedEdges = function clearVisitedEdges () {
36295           for (var it = this._dirEdgeList.iterator(); it.hasNext();) {
36296             var de = it.next();
36297             de.setVisited(false);
36298           }
36299         };
36300         BufferSubgraph.prototype.getRightmostCoordinate = function getRightmostCoordinate () {
36301           return this._rightMostCoord
36302         };
36303         BufferSubgraph.prototype.computeNodeDepth = function computeNodeDepth (n) {
36304             var this$1 = this;
36305
36306           var startEdge = null;
36307           for (var i = n.getEdges().iterator(); i.hasNext();) {
36308             var de = i.next();
36309             if (de.isVisited() || de.getSym().isVisited()) {
36310               startEdge = de;
36311               break
36312             }
36313           }
36314           if (startEdge === null) { throw new TopologyException('unable to find edge to compute depths at ' + n.getCoordinate()) }
36315           n.getEdges().computeDepths(startEdge);
36316           for (var i$1 = n.getEdges().iterator(); i$1.hasNext();) {
36317             var de$1 = i$1.next();
36318             de$1.setVisited(true);
36319             this$1.copySymDepths(de$1);
36320           }
36321         };
36322         BufferSubgraph.prototype.computeDepth = function computeDepth (outsideDepth) {
36323           this.clearVisitedEdges();
36324           var de = this._finder.getEdge();
36325           // const n = de.getNode()
36326           // const label = de.getLabel()
36327           de.setEdgeDepths(Position.RIGHT, outsideDepth);
36328           this.copySymDepths(de);
36329           this.computeDepths(de);
36330         };
36331         BufferSubgraph.prototype.create = function create (node) {
36332           this.addReachable(node);
36333           this._finder.findEdge(this._dirEdgeList);
36334           this._rightMostCoord = this._finder.getCoordinate();
36335         };
36336         BufferSubgraph.prototype.findResultEdges = function findResultEdges () {
36337           for (var it = this._dirEdgeList.iterator(); it.hasNext();) {
36338             var de = it.next();
36339             if (de.getDepth(Position.RIGHT) >= 1 && de.getDepth(Position.LEFT) <= 0 && !de.isInteriorAreaEdge()) {
36340               de.setInResult(true);
36341             }
36342           }
36343         };
36344         BufferSubgraph.prototype.computeDepths = function computeDepths (startEdge) {
36345             var this$1 = this;
36346
36347           var nodesVisited = new HashSet();
36348           var nodeQueue = new LinkedList();
36349           var startNode = startEdge.getNode();
36350           nodeQueue.addLast(startNode);
36351           nodesVisited.add(startNode);
36352           startEdge.setVisited(true);
36353           while (!nodeQueue.isEmpty()) {
36354             var n = nodeQueue.removeFirst();
36355             nodesVisited.add(n);
36356             this$1.computeNodeDepth(n);
36357             for (var i = n.getEdges().iterator(); i.hasNext();) {
36358               var de = i.next();
36359               var sym = de.getSym();
36360               if (sym.isVisited()) { continue }
36361               var adjNode = sym.getNode();
36362               if (!nodesVisited.contains(adjNode)) {
36363                 nodeQueue.addLast(adjNode);
36364                 nodesVisited.add(adjNode);
36365               }
36366             }
36367           }
36368         };
36369         BufferSubgraph.prototype.compareTo = function compareTo (o) {
36370           var graph = o;
36371           if (this._rightMostCoord.x < graph._rightMostCoord.x) {
36372             return -1
36373           }
36374           if (this._rightMostCoord.x > graph._rightMostCoord.x) {
36375             return 1
36376           }
36377           return 0
36378         };
36379         BufferSubgraph.prototype.getEnvelope = function getEnvelope () {
36380           if (this._env === null) {
36381             var edgeEnv = new Envelope();
36382             for (var it = this._dirEdgeList.iterator(); it.hasNext();) {
36383               var dirEdge = it.next();
36384               var pts = dirEdge.getEdge().getCoordinates();
36385               for (var i = 0; i < pts.length - 1; i++) {
36386                 edgeEnv.expandToInclude(pts[i]);
36387               }
36388             }
36389             this._env = edgeEnv;
36390           }
36391           return this._env
36392         };
36393         BufferSubgraph.prototype.addReachable = function addReachable (startNode) {
36394             var this$1 = this;
36395
36396           var nodeStack = new Stack();
36397           nodeStack.add(startNode);
36398           while (!nodeStack.empty()) {
36399             var node = nodeStack.pop();
36400             this$1.add(node, nodeStack);
36401           }
36402         };
36403         BufferSubgraph.prototype.copySymDepths = function copySymDepths (de) {
36404           var sym = de.getSym();
36405           sym.setDepth(Position.LEFT, de.getDepth(Position.RIGHT));
36406           sym.setDepth(Position.RIGHT, de.getDepth(Position.LEFT));
36407         };
36408         BufferSubgraph.prototype.add = function add (node, nodeStack) {
36409             var this$1 = this;
36410
36411           node.setVisited(true);
36412           this._nodes.add(node);
36413           for (var i = node.getEdges().iterator(); i.hasNext();) {
36414             var de = i.next();
36415             this$1._dirEdgeList.add(de);
36416             var sym = de.getSym();
36417             var symNode = sym.getNode();
36418             if (!symNode.isVisited()) { nodeStack.push(symNode); }
36419           }
36420         };
36421         BufferSubgraph.prototype.getNodes = function getNodes () {
36422           return this._nodes
36423         };
36424         BufferSubgraph.prototype.getDirectedEdges = function getDirectedEdges () {
36425           return this._dirEdgeList
36426         };
36427         BufferSubgraph.prototype.interfaces_ = function interfaces_ () {
36428           return [Comparable]
36429         };
36430         BufferSubgraph.prototype.getClass = function getClass () {
36431           return BufferSubgraph
36432         };
36433
36434         var TopologyLocation = function TopologyLocation () {
36435           var this$1 = this;
36436
36437           this.location = null;
36438           if (arguments.length === 1) {
36439             if (arguments[0] instanceof Array) {
36440               var location = arguments[0];
36441               this.init(location.length);
36442             } else if (Number.isInteger(arguments[0])) {
36443               var on = arguments[0];
36444               this.init(1);
36445               this.location[Position.ON] = on;
36446             } else if (arguments[0] instanceof TopologyLocation) {
36447               var gl = arguments[0];
36448               this.init(gl.location.length);
36449               if (gl !== null) {
36450                 for (var i = 0; i < this.location.length; i++) {
36451                   this$1.location[i] = gl.location[i];
36452                 }
36453               }
36454             }
36455           } else if (arguments.length === 3) {
36456             var on$1 = arguments[0];
36457             var left = arguments[1];
36458             var right = arguments[2];
36459             this.init(3);
36460             this.location[Position.ON] = on$1;
36461             this.location[Position.LEFT] = left;
36462             this.location[Position.RIGHT] = right;
36463           }
36464         };
36465         TopologyLocation.prototype.setAllLocations = function setAllLocations (locValue) {
36466             var this$1 = this;
36467
36468           for (var i = 0; i < this.location.length; i++) {
36469             this$1.location[i] = locValue;
36470           }
36471         };
36472         TopologyLocation.prototype.isNull = function isNull () {
36473             var this$1 = this;
36474
36475           for (var i = 0; i < this.location.length; i++) {
36476             if (this$1.location[i] !== Location.NONE) { return false }
36477           }
36478           return true
36479         };
36480         TopologyLocation.prototype.setAllLocationsIfNull = function setAllLocationsIfNull (locValue) {
36481             var this$1 = this;
36482
36483           for (var i = 0; i < this.location.length; i++) {
36484             if (this$1.location[i] === Location.NONE) { this$1.location[i] = locValue; }
36485           }
36486         };
36487         TopologyLocation.prototype.isLine = function isLine () {
36488           return this.location.length === 1
36489         };
36490         TopologyLocation.prototype.merge = function merge (gl) {
36491             var this$1 = this;
36492
36493           if (gl.location.length > this.location.length) {
36494             var newLoc = new Array(3).fill(null);
36495             newLoc[Position.ON] = this.location[Position.ON];
36496             newLoc[Position.LEFT] = Location.NONE;
36497             newLoc[Position.RIGHT] = Location.NONE;
36498             this.location = newLoc;
36499           }
36500           for (var i = 0; i < this.location.length; i++) {
36501             if (this$1.location[i] === Location.NONE && i < gl.location.length) { this$1.location[i] = gl.location[i]; }
36502           }
36503         };
36504         TopologyLocation.prototype.getLocations = function getLocations () {
36505           return this.location
36506         };
36507         TopologyLocation.prototype.flip = function flip () {
36508           if (this.location.length <= 1) { return null }
36509           var temp = this.location[Position.LEFT];
36510           this.location[Position.LEFT] = this.location[Position.RIGHT];
36511           this.location[Position.RIGHT] = temp;
36512         };
36513         TopologyLocation.prototype.toString = function toString () {
36514           var buf = new StringBuffer();
36515           if (this.location.length > 1) { buf.append(Location.toLocationSymbol(this.location[Position.LEFT])); }
36516           buf.append(Location.toLocationSymbol(this.location[Position.ON]));
36517           if (this.location.length > 1) { buf.append(Location.toLocationSymbol(this.location[Position.RIGHT])); }
36518           return buf.toString()
36519         };
36520         TopologyLocation.prototype.setLocations = function setLocations (on, left, right) {
36521           this.location[Position.ON] = on;
36522           this.location[Position.LEFT] = left;
36523           this.location[Position.RIGHT] = right;
36524         };
36525         TopologyLocation.prototype.get = function get (posIndex) {
36526           if (posIndex < this.location.length) { return this.location[posIndex] }
36527           return Location.NONE
36528         };
36529         TopologyLocation.prototype.isArea = function isArea () {
36530           return this.location.length > 1
36531         };
36532         TopologyLocation.prototype.isAnyNull = function isAnyNull () {
36533             var this$1 = this;
36534
36535           for (var i = 0; i < this.location.length; i++) {
36536             if (this$1.location[i] === Location.NONE) { return true }
36537           }
36538           return false
36539         };
36540         TopologyLocation.prototype.setLocation = function setLocation () {
36541           if (arguments.length === 1) {
36542             var locValue = arguments[0];
36543             this.setLocation(Position.ON, locValue);
36544           } else if (arguments.length === 2) {
36545             var locIndex = arguments[0];
36546             var locValue$1 = arguments[1];
36547             this.location[locIndex] = locValue$1;
36548           }
36549         };
36550         TopologyLocation.prototype.init = function init (size) {
36551           this.location = new Array(size).fill(null);
36552           this.setAllLocations(Location.NONE);
36553         };
36554         TopologyLocation.prototype.isEqualOnSide = function isEqualOnSide (le, locIndex) {
36555           return this.location[locIndex] === le.location[locIndex]
36556         };
36557         TopologyLocation.prototype.allPositionsEqual = function allPositionsEqual (loc) {
36558             var this$1 = this;
36559
36560           for (var i = 0; i < this.location.length; i++) {
36561             if (this$1.location[i] !== loc) { return false }
36562           }
36563           return true
36564         };
36565         TopologyLocation.prototype.interfaces_ = function interfaces_ () {
36566           return []
36567         };
36568         TopologyLocation.prototype.getClass = function getClass () {
36569           return TopologyLocation
36570         };
36571
36572         var Label = function Label () {
36573           this.elt = new Array(2).fill(null);
36574           if (arguments.length === 1) {
36575             if (Number.isInteger(arguments[0])) {
36576               var onLoc = arguments[0];
36577               this.elt[0] = new TopologyLocation(onLoc);
36578               this.elt[1] = new TopologyLocation(onLoc);
36579             } else if (arguments[0] instanceof Label) {
36580               var lbl = arguments[0];
36581               this.elt[0] = new TopologyLocation(lbl.elt[0]);
36582               this.elt[1] = new TopologyLocation(lbl.elt[1]);
36583             }
36584           } else if (arguments.length === 2) {
36585             var geomIndex = arguments[0];
36586             var onLoc$1 = arguments[1];
36587             this.elt[0] = new TopologyLocation(Location.NONE);
36588             this.elt[1] = new TopologyLocation(Location.NONE);
36589             this.elt[geomIndex].setLocation(onLoc$1);
36590           } else if (arguments.length === 3) {
36591             var onLoc$2 = arguments[0];
36592             var leftLoc = arguments[1];
36593             var rightLoc = arguments[2];
36594             this.elt[0] = new TopologyLocation(onLoc$2, leftLoc, rightLoc);
36595             this.elt[1] = new TopologyLocation(onLoc$2, leftLoc, rightLoc);
36596           } else if (arguments.length === 4) {
36597             var geomIndex$1 = arguments[0];
36598             var onLoc$3 = arguments[1];
36599             var leftLoc$1 = arguments[2];
36600             var rightLoc$1 = arguments[3];
36601             this.elt[0] = new TopologyLocation(Location.NONE, Location.NONE, Location.NONE);
36602             this.elt[1] = new TopologyLocation(Location.NONE, Location.NONE, Location.NONE);
36603             this.elt[geomIndex$1].setLocations(onLoc$3, leftLoc$1, rightLoc$1);
36604           }
36605         };
36606         Label.prototype.getGeometryCount = function getGeometryCount () {
36607           var count = 0;
36608           if (!this.elt[0].isNull()) { count++; }
36609           if (!this.elt[1].isNull()) { count++; }
36610           return count
36611         };
36612         Label.prototype.setAllLocations = function setAllLocations (geomIndex, location) {
36613           this.elt[geomIndex].setAllLocations(location);
36614         };
36615         Label.prototype.isNull = function isNull (geomIndex) {
36616           return this.elt[geomIndex].isNull()
36617         };
36618         Label.prototype.setAllLocationsIfNull = function setAllLocationsIfNull () {
36619           if (arguments.length === 1) {
36620             var location = arguments[0];
36621             this.setAllLocationsIfNull(0, location);
36622             this.setAllLocationsIfNull(1, location);
36623           } else if (arguments.length === 2) {
36624             var geomIndex = arguments[0];
36625             var location$1 = arguments[1];
36626             this.elt[geomIndex].setAllLocationsIfNull(location$1);
36627           }
36628         };
36629         Label.prototype.isLine = function isLine (geomIndex) {
36630           return this.elt[geomIndex].isLine()
36631         };
36632         Label.prototype.merge = function merge (lbl) {
36633             var this$1 = this;
36634
36635           for (var i = 0; i < 2; i++) {
36636             if (this$1.elt[i] === null && lbl.elt[i] !== null) {
36637               this$1.elt[i] = new TopologyLocation(lbl.elt[i]);
36638             } else {
36639               this$1.elt[i].merge(lbl.elt[i]);
36640             }
36641           }
36642         };
36643         Label.prototype.flip = function flip () {
36644           this.elt[0].flip();
36645           this.elt[1].flip();
36646         };
36647         Label.prototype.getLocation = function getLocation () {
36648           if (arguments.length === 1) {
36649             var geomIndex = arguments[0];
36650             return this.elt[geomIndex].get(Position.ON)
36651           } else if (arguments.length === 2) {
36652             var geomIndex$1 = arguments[0];
36653             var posIndex = arguments[1];
36654             return this.elt[geomIndex$1].get(posIndex)
36655           }
36656         };
36657         Label.prototype.toString = function toString () {
36658           var buf = new StringBuffer();
36659           if (this.elt[0] !== null) {
36660             buf.append('A:');
36661             buf.append(this.elt[0].toString());
36662           }
36663           if (this.elt[1] !== null) {
36664             buf.append(' B:');
36665             buf.append(this.elt[1].toString());
36666           }
36667           return buf.toString()
36668         };
36669         Label.prototype.isArea = function isArea () {
36670           if (arguments.length === 0) {
36671             return this.elt[0].isArea() || this.elt[1].isArea()
36672           } else if (arguments.length === 1) {
36673             var geomIndex = arguments[0];
36674             return this.elt[geomIndex].isArea()
36675           }
36676         };
36677         Label.prototype.isAnyNull = function isAnyNull (geomIndex) {
36678           return this.elt[geomIndex].isAnyNull()
36679         };
36680         Label.prototype.setLocation = function setLocation () {
36681           if (arguments.length === 2) {
36682             var geomIndex = arguments[0];
36683             var location = arguments[1];
36684             this.elt[geomIndex].setLocation(Position.ON, location);
36685           } else if (arguments.length === 3) {
36686             var geomIndex$1 = arguments[0];
36687             var posIndex = arguments[1];
36688             var location$1 = arguments[2];
36689             this.elt[geomIndex$1].setLocation(posIndex, location$1);
36690           }
36691         };
36692         Label.prototype.isEqualOnSide = function isEqualOnSide (lbl, side) {
36693           return this.elt[0].isEqualOnSide(lbl.elt[0], side) && this.elt[1].isEqualOnSide(lbl.elt[1], side)
36694         };
36695         Label.prototype.allPositionsEqual = function allPositionsEqual (geomIndex, loc) {
36696           return this.elt[geomIndex].allPositionsEqual(loc)
36697         };
36698         Label.prototype.toLine = function toLine (geomIndex) {
36699           if (this.elt[geomIndex].isArea()) { this.elt[geomIndex] = new TopologyLocation(this.elt[geomIndex].location[0]); }
36700         };
36701         Label.prototype.interfaces_ = function interfaces_ () {
36702           return []
36703         };
36704         Label.prototype.getClass = function getClass () {
36705           return Label
36706         };
36707         Label.toLineLabel = function toLineLabel (label) {
36708           var lineLabel = new Label(Location.NONE);
36709           for (var i = 0; i < 2; i++) {
36710             lineLabel.setLocation(i, label.getLocation(i));
36711           }
36712           return lineLabel
36713         };
36714
36715         var EdgeRing = function EdgeRing () {
36716           this._startDe = null;
36717           this._maxNodeDegree = -1;
36718           this._edges = new ArrayList();
36719           this._pts = new ArrayList();
36720           this._label = new Label(Location.NONE);
36721           this._ring = null;
36722           this._isHole = null;
36723           this._shell = null;
36724           this._holes = new ArrayList();
36725           this._geometryFactory = null;
36726           var start = arguments[0];
36727           var geometryFactory = arguments[1];
36728           this._geometryFactory = geometryFactory;
36729           this.computePoints(start);
36730           this.computeRing();
36731         };
36732         EdgeRing.prototype.computeRing = function computeRing () {
36733             var this$1 = this;
36734
36735           if (this._ring !== null) { return null }
36736           var coord = new Array(this._pts.size()).fill(null);
36737           for (var i = 0; i < this._pts.size(); i++) {
36738             coord[i] = this$1._pts.get(i);
36739           }
36740           this._ring = this._geometryFactory.createLinearRing(coord);
36741           this._isHole = CGAlgorithms.isCCW(this._ring.getCoordinates());
36742         };
36743         EdgeRing.prototype.isIsolated = function isIsolated () {
36744           return this._label.getGeometryCount() === 1
36745         };
36746         EdgeRing.prototype.computePoints = function computePoints (start) {
36747             var this$1 = this;
36748
36749           this._startDe = start;
36750           var de = start;
36751           var isFirstEdge = true;
36752           do {
36753             if (de === null) { throw new TopologyException('Found null DirectedEdge') }
36754             if (de.getEdgeRing() === this$1) { throw new TopologyException('Directed Edge visited twice during ring-building at ' + de.getCoordinate()) }
36755             this$1._edges.add(de);
36756             var label = de.getLabel();
36757             Assert.isTrue(label.isArea());
36758             this$1.mergeLabel(label);
36759             this$1.addPoints(de.getEdge(), de.isForward(), isFirstEdge);
36760             isFirstEdge = false;
36761             this$1.setEdgeRing(de, this$1);
36762             de = this$1.getNext(de);
36763           } while (de !== this._startDe)
36764         };
36765         EdgeRing.prototype.getLinearRing = function getLinearRing () {
36766           return this._ring
36767         };
36768         EdgeRing.prototype.getCoordinate = function getCoordinate (i) {
36769           return this._pts.get(i)
36770         };
36771         EdgeRing.prototype.computeMaxNodeDegree = function computeMaxNodeDegree () {
36772             var this$1 = this;
36773
36774           this._maxNodeDegree = 0;
36775           var de = this._startDe;
36776           do {
36777             var node = de.getNode();
36778             var degree = node.getEdges().getOutgoingDegree(this$1);
36779             if (degree > this$1._maxNodeDegree) { this$1._maxNodeDegree = degree; }
36780             de = this$1.getNext(de);
36781           } while (de !== this._startDe)
36782           this._maxNodeDegree *= 2;
36783         };
36784         EdgeRing.prototype.addPoints = function addPoints (edge, isForward, isFirstEdge) {
36785             var this$1 = this;
36786
36787           var edgePts = edge.getCoordinates();
36788           if (isForward) {
36789             var startIndex = 1;
36790             if (isFirstEdge) { startIndex = 0; }
36791             for (var i = startIndex; i < edgePts.length; i++) {
36792               this$1._pts.add(edgePts[i]);
36793             }
36794           } else {
36795             var startIndex$1 = edgePts.length - 2;
36796             if (isFirstEdge) { startIndex$1 = edgePts.length - 1; }
36797             for (var i$1 = startIndex$1; i$1 >= 0; i$1--) {
36798               this$1._pts.add(edgePts[i$1]);
36799             }
36800           }
36801         };
36802         EdgeRing.prototype.isHole = function isHole () {
36803           return this._isHole
36804         };
36805         EdgeRing.prototype.setInResult = function setInResult () {
36806           var de = this._startDe;
36807           do {
36808             de.getEdge().setInResult(true);
36809             de = de.getNext();
36810           } while (de !== this._startDe)
36811         };
36812         EdgeRing.prototype.containsPoint = function containsPoint (p) {
36813           var shell = this.getLinearRing();
36814           var env = shell.getEnvelopeInternal();
36815           if (!env.contains(p)) { return false }
36816           if (!CGAlgorithms.isPointInRing(p, shell.getCoordinates())) { return false }
36817           for (var i = this._holes.iterator(); i.hasNext();) {
36818             var hole = i.next();
36819             if (hole.containsPoint(p)) { return false }
36820           }
36821           return true
36822         };
36823         EdgeRing.prototype.addHole = function addHole (ring) {
36824           this._holes.add(ring);
36825         };
36826         EdgeRing.prototype.isShell = function isShell () {
36827           return this._shell === null
36828         };
36829         EdgeRing.prototype.getLabel = function getLabel () {
36830           return this._label
36831         };
36832         EdgeRing.prototype.getEdges = function getEdges () {
36833           return this._edges
36834         };
36835         EdgeRing.prototype.getMaxNodeDegree = function getMaxNodeDegree () {
36836           if (this._maxNodeDegree < 0) { this.computeMaxNodeDegree(); }
36837           return this._maxNodeDegree
36838         };
36839         EdgeRing.prototype.getShell = function getShell () {
36840           return this._shell
36841         };
36842         EdgeRing.prototype.mergeLabel = function mergeLabel () {
36843           if (arguments.length === 1) {
36844             var deLabel = arguments[0];
36845             this.mergeLabel(deLabel, 0);
36846             this.mergeLabel(deLabel, 1);
36847           } else if (arguments.length === 2) {
36848             var deLabel$1 = arguments[0];
36849             var geomIndex = arguments[1];
36850             var loc = deLabel$1.getLocation(geomIndex, Position.RIGHT);
36851             if (loc === Location.NONE) { return null }
36852             if (this._label.getLocation(geomIndex) === Location.NONE) {
36853               this._label.setLocation(geomIndex, loc);
36854               return null
36855             }
36856           }
36857         };
36858         EdgeRing.prototype.setShell = function setShell (shell) {
36859           this._shell = shell;
36860           if (shell !== null) { shell.addHole(this); }
36861         };
36862         EdgeRing.prototype.toPolygon = function toPolygon (geometryFactory) {
36863             var this$1 = this;
36864
36865           var holeLR = new Array(this._holes.size()).fill(null);
36866           for (var i = 0; i < this._holes.size(); i++) {
36867             holeLR[i] = this$1._holes.get(i).getLinearRing();
36868           }
36869           var poly = geometryFactory.createPolygon(this.getLinearRing(), holeLR);
36870           return poly
36871         };
36872         EdgeRing.prototype.interfaces_ = function interfaces_ () {
36873           return []
36874         };
36875         EdgeRing.prototype.getClass = function getClass () {
36876           return EdgeRing
36877         };
36878
36879         var MinimalEdgeRing = (function (EdgeRing$$1) {
36880           function MinimalEdgeRing () {
36881             var start = arguments[0];
36882             var geometryFactory = arguments[1];
36883             EdgeRing$$1.call(this, start, geometryFactory);
36884           }
36885
36886           if ( EdgeRing$$1 ) { MinimalEdgeRing.__proto__ = EdgeRing$$1; }
36887           MinimalEdgeRing.prototype = Object.create( EdgeRing$$1 && EdgeRing$$1.prototype );
36888           MinimalEdgeRing.prototype.constructor = MinimalEdgeRing;
36889           MinimalEdgeRing.prototype.setEdgeRing = function setEdgeRing (de, er) {
36890             de.setMinEdgeRing(er);
36891           };
36892           MinimalEdgeRing.prototype.getNext = function getNext (de) {
36893             return de.getNextMin()
36894           };
36895           MinimalEdgeRing.prototype.interfaces_ = function interfaces_ () {
36896             return []
36897           };
36898           MinimalEdgeRing.prototype.getClass = function getClass () {
36899             return MinimalEdgeRing
36900           };
36901
36902           return MinimalEdgeRing;
36903         }(EdgeRing));
36904
36905         var MaximalEdgeRing = (function (EdgeRing$$1) {
36906           function MaximalEdgeRing () {
36907             var start = arguments[0];
36908             var geometryFactory = arguments[1];
36909             EdgeRing$$1.call(this, start, geometryFactory);
36910           }
36911
36912           if ( EdgeRing$$1 ) { MaximalEdgeRing.__proto__ = EdgeRing$$1; }
36913           MaximalEdgeRing.prototype = Object.create( EdgeRing$$1 && EdgeRing$$1.prototype );
36914           MaximalEdgeRing.prototype.constructor = MaximalEdgeRing;
36915           MaximalEdgeRing.prototype.buildMinimalRings = function buildMinimalRings () {
36916             var this$1 = this;
36917
36918             var minEdgeRings = new ArrayList();
36919             var de = this._startDe;
36920             do {
36921               if (de.getMinEdgeRing() === null) {
36922                 var minEr = new MinimalEdgeRing(de, this$1._geometryFactory);
36923                 minEdgeRings.add(minEr);
36924               }
36925               de = de.getNext();
36926             } while (de !== this._startDe)
36927             return minEdgeRings
36928           };
36929           MaximalEdgeRing.prototype.setEdgeRing = function setEdgeRing (de, er) {
36930             de.setEdgeRing(er);
36931           };
36932           MaximalEdgeRing.prototype.linkDirectedEdgesForMinimalEdgeRings = function linkDirectedEdgesForMinimalEdgeRings () {
36933             var this$1 = this;
36934
36935             var de = this._startDe;
36936             do {
36937               var node = de.getNode();
36938               node.getEdges().linkMinimalDirectedEdges(this$1);
36939               de = de.getNext();
36940             } while (de !== this._startDe)
36941           };
36942           MaximalEdgeRing.prototype.getNext = function getNext (de) {
36943             return de.getNext()
36944           };
36945           MaximalEdgeRing.prototype.interfaces_ = function interfaces_ () {
36946             return []
36947           };
36948           MaximalEdgeRing.prototype.getClass = function getClass () {
36949             return MaximalEdgeRing
36950           };
36951
36952           return MaximalEdgeRing;
36953         }(EdgeRing));
36954
36955         var GraphComponent = function GraphComponent () {
36956           this._label = null;
36957           this._isInResult = false;
36958           this._isCovered = false;
36959           this._isCoveredSet = false;
36960           this._isVisited = false;
36961           if (arguments.length === 0) ; else if (arguments.length === 1) {
36962             var label = arguments[0];
36963             this._label = label;
36964           }
36965         };
36966         GraphComponent.prototype.setVisited = function setVisited (isVisited) {
36967           this._isVisited = isVisited;
36968         };
36969         GraphComponent.prototype.setInResult = function setInResult (isInResult) {
36970           this._isInResult = isInResult;
36971         };
36972         GraphComponent.prototype.isCovered = function isCovered () {
36973           return this._isCovered
36974         };
36975         GraphComponent.prototype.isCoveredSet = function isCoveredSet () {
36976           return this._isCoveredSet
36977         };
36978         GraphComponent.prototype.setLabel = function setLabel (label) {
36979           this._label = label;
36980         };
36981         GraphComponent.prototype.getLabel = function getLabel () {
36982           return this._label
36983         };
36984         GraphComponent.prototype.setCovered = function setCovered (isCovered) {
36985           this._isCovered = isCovered;
36986           this._isCoveredSet = true;
36987         };
36988         GraphComponent.prototype.updateIM = function updateIM (im) {
36989           Assert.isTrue(this._label.getGeometryCount() >= 2, 'found partial label');
36990           this.computeIM(im);
36991         };
36992         GraphComponent.prototype.isInResult = function isInResult () {
36993           return this._isInResult
36994         };
36995         GraphComponent.prototype.isVisited = function isVisited () {
36996           return this._isVisited
36997         };
36998         GraphComponent.prototype.interfaces_ = function interfaces_ () {
36999           return []
37000         };
37001         GraphComponent.prototype.getClass = function getClass () {
37002           return GraphComponent
37003         };
37004
37005         var Node$2 = (function (GraphComponent$$1) {
37006           function Node () {
37007             GraphComponent$$1.call(this);
37008             this._coord = null;
37009             this._edges = null;
37010             var coord = arguments[0];
37011             var edges = arguments[1];
37012             this._coord = coord;
37013             this._edges = edges;
37014             this._label = new Label(0, Location.NONE);
37015           }
37016
37017           if ( GraphComponent$$1 ) { Node.__proto__ = GraphComponent$$1; }
37018           Node.prototype = Object.create( GraphComponent$$1 && GraphComponent$$1.prototype );
37019           Node.prototype.constructor = Node;
37020           Node.prototype.isIncidentEdgeInResult = function isIncidentEdgeInResult () {
37021             for (var it = this.getEdges().getEdges().iterator(); it.hasNext();) {
37022               var de = it.next();
37023               if (de.getEdge().isInResult()) { return true }
37024             }
37025             return false
37026           };
37027           Node.prototype.isIsolated = function isIsolated () {
37028             return this._label.getGeometryCount() === 1
37029           };
37030           Node.prototype.getCoordinate = function getCoordinate () {
37031             return this._coord
37032           };
37033           Node.prototype.print = function print (out) {
37034             out.println('node ' + this._coord + ' lbl: ' + this._label);
37035           };
37036           Node.prototype.computeIM = function computeIM (im) {};
37037           Node.prototype.computeMergedLocation = function computeMergedLocation (label2, eltIndex) {
37038             var loc = Location.NONE;
37039             loc = this._label.getLocation(eltIndex);
37040             if (!label2.isNull(eltIndex)) {
37041               var nLoc = label2.getLocation(eltIndex);
37042               if (loc !== Location.BOUNDARY) { loc = nLoc; }
37043             }
37044             return loc
37045           };
37046           Node.prototype.setLabel = function setLabel () {
37047             if (arguments.length === 2) {
37048               var argIndex = arguments[0];
37049               var onLocation = arguments[1];
37050               if (this._label === null) {
37051                 this._label = new Label(argIndex, onLocation);
37052               } else { this._label.setLocation(argIndex, onLocation); }
37053             } else { return GraphComponent$$1.prototype.setLabel.apply(this, arguments) }
37054           };
37055           Node.prototype.getEdges = function getEdges () {
37056             return this._edges
37057           };
37058           Node.prototype.mergeLabel = function mergeLabel () {
37059             var this$1 = this;
37060
37061             if (arguments[0] instanceof Node) {
37062               var n = arguments[0];
37063               this.mergeLabel(n._label);
37064             } else if (arguments[0] instanceof Label) {
37065               var label2 = arguments[0];
37066               for (var i = 0; i < 2; i++) {
37067                 var loc = this$1.computeMergedLocation(label2, i);
37068                 var thisLoc = this$1._label.getLocation(i);
37069                 if (thisLoc === Location.NONE) { this$1._label.setLocation(i, loc); }
37070               }
37071             }
37072           };
37073           Node.prototype.add = function add (e) {
37074             this._edges.insert(e);
37075             e.setNode(this);
37076           };
37077           Node.prototype.setLabelBoundary = function setLabelBoundary (argIndex) {
37078             if (this._label === null) { return null }
37079             var loc = Location.NONE;
37080             if (this._label !== null) { loc = this._label.getLocation(argIndex); }
37081             var newLoc = null;
37082             switch (loc) {
37083               case Location.BOUNDARY:
37084                 newLoc = Location.INTERIOR;
37085                 break
37086               case Location.INTERIOR:
37087                 newLoc = Location.BOUNDARY;
37088                 break
37089               default:
37090                 newLoc = Location.BOUNDARY;
37091                 break
37092             }
37093             this._label.setLocation(argIndex, newLoc);
37094           };
37095           Node.prototype.interfaces_ = function interfaces_ () {
37096             return []
37097           };
37098           Node.prototype.getClass = function getClass () {
37099             return Node
37100           };
37101
37102           return Node;
37103         }(GraphComponent));
37104
37105         var NodeMap = function NodeMap () {
37106           this.nodeMap = new TreeMap();
37107           this.nodeFact = null;
37108           var nodeFact = arguments[0];
37109           this.nodeFact = nodeFact;
37110         };
37111         NodeMap.prototype.find = function find (coord) {
37112           return this.nodeMap.get(coord)
37113         };
37114         NodeMap.prototype.addNode = function addNode () {
37115           if (arguments[0] instanceof Coordinate) {
37116             var coord = arguments[0];
37117             var node = this.nodeMap.get(coord);
37118             if (node === null) {
37119               node = this.nodeFact.createNode(coord);
37120               this.nodeMap.put(coord, node);
37121             }
37122             return node
37123           } else if (arguments[0] instanceof Node$2) {
37124             var n = arguments[0];
37125             var node$1 = this.nodeMap.get(n.getCoordinate());
37126             if (node$1 === null) {
37127               this.nodeMap.put(n.getCoordinate(), n);
37128               return n
37129             }
37130             node$1.mergeLabel(n);
37131             return node$1
37132           }
37133         };
37134         NodeMap.prototype.print = function print (out) {
37135           for (var it = this.iterator(); it.hasNext();) {
37136             var n = it.next();
37137             n.print(out);
37138           }
37139         };
37140         NodeMap.prototype.iterator = function iterator () {
37141           return this.nodeMap.values().iterator()
37142         };
37143         NodeMap.prototype.values = function values () {
37144           return this.nodeMap.values()
37145         };
37146         NodeMap.prototype.getBoundaryNodes = function getBoundaryNodes (geomIndex) {
37147           var bdyNodes = new ArrayList();
37148           for (var i = this.iterator(); i.hasNext();) {
37149             var node = i.next();
37150             if (node.getLabel().getLocation(geomIndex) === Location.BOUNDARY) { bdyNodes.add(node); }
37151           }
37152           return bdyNodes
37153         };
37154         NodeMap.prototype.add = function add (e) {
37155           var p = e.getCoordinate();
37156           var n = this.addNode(p);
37157           n.add(e);
37158         };
37159         NodeMap.prototype.interfaces_ = function interfaces_ () {
37160           return []
37161         };
37162         NodeMap.prototype.getClass = function getClass () {
37163           return NodeMap
37164         };
37165
37166         var Quadrant = function Quadrant () {};
37167
37168         var staticAccessors$21 = { NE: { configurable: true },NW: { configurable: true },SW: { configurable: true },SE: { configurable: true } };
37169
37170         Quadrant.prototype.interfaces_ = function interfaces_ () {
37171           return []
37172         };
37173         Quadrant.prototype.getClass = function getClass () {
37174           return Quadrant
37175         };
37176         Quadrant.isNorthern = function isNorthern (quad) {
37177           return quad === Quadrant.NE || quad === Quadrant.NW
37178         };
37179         Quadrant.isOpposite = function isOpposite (quad1, quad2) {
37180           if (quad1 === quad2) { return false }
37181           var diff = (quad1 - quad2 + 4) % 4;
37182           if (diff === 2) { return true }
37183           return false
37184         };
37185         Quadrant.commonHalfPlane = function commonHalfPlane (quad1, quad2) {
37186           if (quad1 === quad2) { return quad1 }
37187           var diff = (quad1 - quad2 + 4) % 4;
37188           if (diff === 2) { return -1 }
37189           var min = quad1 < quad2 ? quad1 : quad2;
37190           var max = quad1 > quad2 ? quad1 : quad2;
37191           if (min === 0 && max === 3) { return 3 }
37192           return min
37193         };
37194         Quadrant.isInHalfPlane = function isInHalfPlane (quad, halfPlane) {
37195           if (halfPlane === Quadrant.SE) {
37196             return quad === Quadrant.SE || quad === Quadrant.SW
37197           }
37198           return quad === halfPlane || quad === halfPlane + 1
37199         };
37200         Quadrant.quadrant = function quadrant () {
37201           if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {
37202             var dx = arguments[0];
37203             var dy = arguments[1];
37204             if (dx === 0.0 && dy === 0.0) { throw new IllegalArgumentException('Cannot compute the quadrant for point ( ' + dx + ', ' + dy + ' )') }
37205             if (dx >= 0.0) {
37206               if (dy >= 0.0) { return Quadrant.NE; } else { return Quadrant.SE }
37207             } else {
37208               if (dy >= 0.0) { return Quadrant.NW; } else { return Quadrant.SW }
37209             }
37210           } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {
37211             var p0 = arguments[0];
37212             var p1 = arguments[1];
37213             if (p1.x === p0.x && p1.y === p0.y) { throw new IllegalArgumentException('Cannot compute the quadrant for two identical points ' + p0) }
37214             if (p1.x >= p0.x) {
37215               if (p1.y >= p0.y) { return Quadrant.NE; } else { return Quadrant.SE }
37216             } else {
37217               if (p1.y >= p0.y) { return Quadrant.NW; } else { return Quadrant.SW }
37218             }
37219           }
37220         };
37221         staticAccessors$21.NE.get = function () { return 0 };
37222         staticAccessors$21.NW.get = function () { return 1 };
37223         staticAccessors$21.SW.get = function () { return 2 };
37224         staticAccessors$21.SE.get = function () { return 3 };
37225
37226         Object.defineProperties( Quadrant, staticAccessors$21 );
37227
37228         var EdgeEnd = function EdgeEnd () {
37229           this._edge = null;
37230           this._label = null;
37231           this._node = null;
37232           this._p0 = null;
37233           this._p1 = null;
37234           this._dx = null;
37235           this._dy = null;
37236           this._quadrant = null;
37237           if (arguments.length === 1) {
37238             var edge = arguments[0];
37239             this._edge = edge;
37240           } else if (arguments.length === 3) {
37241             var edge$1 = arguments[0];
37242             var p0 = arguments[1];
37243             var p1 = arguments[2];
37244             var label = null;
37245             this._edge = edge$1;
37246             this.init(p0, p1);
37247             this._label = label;
37248           } else if (arguments.length === 4) {
37249             var edge$2 = arguments[0];
37250             var p0$1 = arguments[1];
37251             var p1$1 = arguments[2];
37252             var label$1 = arguments[3];
37253             this._edge = edge$2;
37254             this.init(p0$1, p1$1);
37255             this._label = label$1;
37256           }
37257         };
37258         EdgeEnd.prototype.compareDirection = function compareDirection (e) {
37259           if (this._dx === e._dx && this._dy === e._dy) { return 0 }
37260           if (this._quadrant > e._quadrant) { return 1 }
37261           if (this._quadrant < e._quadrant) { return -1 }
37262           return CGAlgorithms.computeOrientation(e._p0, e._p1, this._p1)
37263         };
37264         EdgeEnd.prototype.getDy = function getDy () {
37265           return this._dy
37266         };
37267         EdgeEnd.prototype.getCoordinate = function getCoordinate () {
37268           return this._p0
37269         };
37270         EdgeEnd.prototype.setNode = function setNode (node) {
37271           this._node = node;
37272         };
37273         EdgeEnd.prototype.print = function print (out) {
37274           var angle = Math.atan2(this._dy, this._dx);
37275           var className = this.getClass().getName();
37276           var lastDotPos = className.lastIndexOf('.');
37277           var name = className.substring(lastDotPos + 1);
37278           out.print('  ' + name + ': ' + this._p0 + ' - ' + this._p1 + ' ' + this._quadrant + ':' + angle + '   ' + this._label);
37279         };
37280         EdgeEnd.prototype.compareTo = function compareTo (obj) {
37281           var e = obj;
37282           return this.compareDirection(e)
37283         };
37284         EdgeEnd.prototype.getDirectedCoordinate = function getDirectedCoordinate () {
37285           return this._p1
37286         };
37287         EdgeEnd.prototype.getDx = function getDx () {
37288           return this._dx
37289         };
37290         EdgeEnd.prototype.getLabel = function getLabel () {
37291           return this._label
37292         };
37293         EdgeEnd.prototype.getEdge = function getEdge () {
37294           return this._edge
37295         };
37296         EdgeEnd.prototype.getQuadrant = function getQuadrant () {
37297           return this._quadrant
37298         };
37299         EdgeEnd.prototype.getNode = function getNode () {
37300           return this._node
37301         };
37302         EdgeEnd.prototype.toString = function toString () {
37303           var angle = Math.atan2(this._dy, this._dx);
37304           var className = this.getClass().getName();
37305           var lastDotPos = className.lastIndexOf('.');
37306           var name = className.substring(lastDotPos + 1);
37307           return '  ' + name + ': ' + this._p0 + ' - ' + this._p1 + ' ' + this._quadrant + ':' + angle + '   ' + this._label
37308         };
37309         EdgeEnd.prototype.computeLabel = function computeLabel (boundaryNodeRule) {};
37310         EdgeEnd.prototype.init = function init (p0, p1) {
37311           this._p0 = p0;
37312           this._p1 = p1;
37313           this._dx = p1.x - p0.x;
37314           this._dy = p1.y - p0.y;
37315           this._quadrant = Quadrant.quadrant(this._dx, this._dy);
37316           Assert.isTrue(!(this._dx === 0 && this._dy === 0), 'EdgeEnd with identical endpoints found');
37317         };
37318         EdgeEnd.prototype.interfaces_ = function interfaces_ () {
37319           return [Comparable]
37320         };
37321         EdgeEnd.prototype.getClass = function getClass () {
37322           return EdgeEnd
37323         };
37324
37325         var DirectedEdge = (function (EdgeEnd$$1) {
37326           function DirectedEdge () {
37327             var edge = arguments[0];
37328             var isForward = arguments[1];
37329             EdgeEnd$$1.call(this, edge);
37330             this._isForward = null;
37331             this._isInResult = false;
37332             this._isVisited = false;
37333             this._sym = null;
37334             this._next = null;
37335             this._nextMin = null;
37336             this._edgeRing = null;
37337             this._minEdgeRing = null;
37338             this._depth = [0, -999, -999];
37339             this._isForward = isForward;
37340             if (isForward) {
37341               this.init(edge.getCoordinate(0), edge.getCoordinate(1));
37342             } else {
37343               var n = edge.getNumPoints() - 1;
37344               this.init(edge.getCoordinate(n), edge.getCoordinate(n - 1));
37345             }
37346             this.computeDirectedLabel();
37347           }
37348
37349           if ( EdgeEnd$$1 ) { DirectedEdge.__proto__ = EdgeEnd$$1; }
37350           DirectedEdge.prototype = Object.create( EdgeEnd$$1 && EdgeEnd$$1.prototype );
37351           DirectedEdge.prototype.constructor = DirectedEdge;
37352           DirectedEdge.prototype.getNextMin = function getNextMin () {
37353             return this._nextMin
37354           };
37355           DirectedEdge.prototype.getDepth = function getDepth (position) {
37356             return this._depth[position]
37357           };
37358           DirectedEdge.prototype.setVisited = function setVisited (isVisited) {
37359             this._isVisited = isVisited;
37360           };
37361           DirectedEdge.prototype.computeDirectedLabel = function computeDirectedLabel () {
37362             this._label = new Label(this._edge.getLabel());
37363             if (!this._isForward) { this._label.flip(); }
37364           };
37365           DirectedEdge.prototype.getNext = function getNext () {
37366             return this._next
37367           };
37368           DirectedEdge.prototype.setDepth = function setDepth (position, depthVal) {
37369             if (this._depth[position] !== -999) {
37370               if (this._depth[position] !== depthVal) { throw new TopologyException('assigned depths do not match', this.getCoordinate()) }
37371             }
37372             this._depth[position] = depthVal;
37373           };
37374           DirectedEdge.prototype.isInteriorAreaEdge = function isInteriorAreaEdge () {
37375             var this$1 = this;
37376
37377             var isInteriorAreaEdge = true;
37378             for (var i = 0; i < 2; i++) {
37379               if (!(this$1._label.isArea(i) && this$1._label.getLocation(i, Position.LEFT) === Location.INTERIOR && this$1._label.getLocation(i, Position.RIGHT) === Location.INTERIOR)) {
37380                 isInteriorAreaEdge = false;
37381               }
37382             }
37383             return isInteriorAreaEdge
37384           };
37385           DirectedEdge.prototype.setNextMin = function setNextMin (nextMin) {
37386             this._nextMin = nextMin;
37387           };
37388           DirectedEdge.prototype.print = function print (out) {
37389             EdgeEnd$$1.prototype.print.call(this, out);
37390             out.print(' ' + this._depth[Position.LEFT] + '/' + this._depth[Position.RIGHT]);
37391             out.print(' (' + this.getDepthDelta() + ')');
37392             if (this._isInResult) { out.print(' inResult'); }
37393           };
37394           DirectedEdge.prototype.setMinEdgeRing = function setMinEdgeRing (minEdgeRing) {
37395             this._minEdgeRing = minEdgeRing;
37396           };
37397           DirectedEdge.prototype.isLineEdge = function isLineEdge () {
37398             var isLine = this._label.isLine(0) || this._label.isLine(1);
37399             var isExteriorIfArea0 = !this._label.isArea(0) || this._label.allPositionsEqual(0, Location.EXTERIOR);
37400             var isExteriorIfArea1 = !this._label.isArea(1) || this._label.allPositionsEqual(1, Location.EXTERIOR);
37401             return isLine && isExteriorIfArea0 && isExteriorIfArea1
37402           };
37403           DirectedEdge.prototype.setEdgeRing = function setEdgeRing (edgeRing) {
37404             this._edgeRing = edgeRing;
37405           };
37406           DirectedEdge.prototype.getMinEdgeRing = function getMinEdgeRing () {
37407             return this._minEdgeRing
37408           };
37409           DirectedEdge.prototype.getDepthDelta = function getDepthDelta () {
37410             var depthDelta = this._edge.getDepthDelta();
37411             if (!this._isForward) { depthDelta = -depthDelta; }
37412             return depthDelta
37413           };
37414           DirectedEdge.prototype.setInResult = function setInResult (isInResult) {
37415             this._isInResult = isInResult;
37416           };
37417           DirectedEdge.prototype.getSym = function getSym () {
37418             return this._sym
37419           };
37420           DirectedEdge.prototype.isForward = function isForward () {
37421             return this._isForward
37422           };
37423           DirectedEdge.prototype.getEdge = function getEdge () {
37424             return this._edge
37425           };
37426           DirectedEdge.prototype.printEdge = function printEdge (out) {
37427             this.print(out);
37428             out.print(' ');
37429             if (this._isForward) { this._edge.print(out); } else { this._edge.printReverse(out); }
37430           };
37431           DirectedEdge.prototype.setSym = function setSym (de) {
37432             this._sym = de;
37433           };
37434           DirectedEdge.prototype.setVisitedEdge = function setVisitedEdge (isVisited) {
37435             this.setVisited(isVisited);
37436             this._sym.setVisited(isVisited);
37437           };
37438           DirectedEdge.prototype.setEdgeDepths = function setEdgeDepths (position, depth) {
37439             var depthDelta = this.getEdge().getDepthDelta();
37440             if (!this._isForward) { depthDelta = -depthDelta; }
37441             var directionFactor = 1;
37442             if (position === Position.LEFT) { directionFactor = -1; }
37443             var oppositePos = Position.opposite(position);
37444             var delta = depthDelta * directionFactor;
37445             var oppositeDepth = depth + delta;
37446             this.setDepth(position, depth);
37447             this.setDepth(oppositePos, oppositeDepth);
37448           };
37449           DirectedEdge.prototype.getEdgeRing = function getEdgeRing () {
37450             return this._edgeRing
37451           };
37452           DirectedEdge.prototype.isInResult = function isInResult () {
37453             return this._isInResult
37454           };
37455           DirectedEdge.prototype.setNext = function setNext (next) {
37456             this._next = next;
37457           };
37458           DirectedEdge.prototype.isVisited = function isVisited () {
37459             return this._isVisited
37460           };
37461           DirectedEdge.prototype.interfaces_ = function interfaces_ () {
37462             return []
37463           };
37464           DirectedEdge.prototype.getClass = function getClass () {
37465             return DirectedEdge
37466           };
37467           DirectedEdge.depthFactor = function depthFactor (currLocation, nextLocation) {
37468             if (currLocation === Location.EXTERIOR && nextLocation === Location.INTERIOR) { return 1; } else if (currLocation === Location.INTERIOR && nextLocation === Location.EXTERIOR) { return -1 }
37469             return 0
37470           };
37471
37472           return DirectedEdge;
37473         }(EdgeEnd));
37474
37475         var NodeFactory = function NodeFactory () {};
37476
37477         NodeFactory.prototype.createNode = function createNode (coord) {
37478           return new Node$2(coord, null)
37479         };
37480         NodeFactory.prototype.interfaces_ = function interfaces_ () {
37481           return []
37482         };
37483         NodeFactory.prototype.getClass = function getClass () {
37484           return NodeFactory
37485         };
37486
37487         var PlanarGraph = function PlanarGraph () {
37488           this._edges = new ArrayList();
37489           this._nodes = null;
37490           this._edgeEndList = new ArrayList();
37491           if (arguments.length === 0) {
37492             this._nodes = new NodeMap(new NodeFactory());
37493           } else if (arguments.length === 1) {
37494             var nodeFact = arguments[0];
37495             this._nodes = new NodeMap(nodeFact);
37496           }
37497         };
37498         PlanarGraph.prototype.printEdges = function printEdges (out) {
37499             var this$1 = this;
37500
37501           out.println('Edges:');
37502           for (var i = 0; i < this._edges.size(); i++) {
37503             out.println('edge ' + i + ':');
37504             var e = this$1._edges.get(i);
37505             e.print(out);
37506             e.eiList.print(out);
37507           }
37508         };
37509         PlanarGraph.prototype.find = function find (coord) {
37510           return this._nodes.find(coord)
37511         };
37512         PlanarGraph.prototype.addNode = function addNode () {
37513           if (arguments[0] instanceof Node$2) {
37514             var node = arguments[0];
37515             return this._nodes.addNode(node)
37516           } else if (arguments[0] instanceof Coordinate) {
37517             var coord = arguments[0];
37518             return this._nodes.addNode(coord)
37519           }
37520         };
37521         PlanarGraph.prototype.getNodeIterator = function getNodeIterator () {
37522           return this._nodes.iterator()
37523         };
37524         PlanarGraph.prototype.linkResultDirectedEdges = function linkResultDirectedEdges () {
37525           for (var nodeit = this._nodes.iterator(); nodeit.hasNext();) {
37526             var node = nodeit.next();
37527             node.getEdges().linkResultDirectedEdges();
37528           }
37529         };
37530         PlanarGraph.prototype.debugPrintln = function debugPrintln (o) {
37531           System.out.println(o);
37532         };
37533         PlanarGraph.prototype.isBoundaryNode = function isBoundaryNode (geomIndex, coord) {
37534           var node = this._nodes.find(coord);
37535           if (node === null) { return false }
37536           var label = node.getLabel();
37537           if (label !== null && label.getLocation(geomIndex) === Location.BOUNDARY) { return true }
37538           return false
37539         };
37540         PlanarGraph.prototype.linkAllDirectedEdges = function linkAllDirectedEdges () {
37541           for (var nodeit = this._nodes.iterator(); nodeit.hasNext();) {
37542             var node = nodeit.next();
37543             node.getEdges().linkAllDirectedEdges();
37544           }
37545         };
37546         PlanarGraph.prototype.matchInSameDirection = function matchInSameDirection (p0, p1, ep0, ep1) {
37547           if (!p0.equals(ep0)) { return false }
37548           if (CGAlgorithms.computeOrientation(p0, p1, ep1) === CGAlgorithms.COLLINEAR && Quadrant.quadrant(p0, p1) === Quadrant.quadrant(ep0, ep1)) { return true }
37549           return false
37550         };
37551         PlanarGraph.prototype.getEdgeEnds = function getEdgeEnds () {
37552           return this._edgeEndList
37553         };
37554         PlanarGraph.prototype.debugPrint = function debugPrint (o) {
37555           System.out.print(o);
37556         };
37557         PlanarGraph.prototype.getEdgeIterator = function getEdgeIterator () {
37558           return this._edges.iterator()
37559         };
37560         PlanarGraph.prototype.findEdgeInSameDirection = function findEdgeInSameDirection (p0, p1) {
37561             var this$1 = this;
37562
37563           for (var i = 0; i < this._edges.size(); i++) {
37564             var e = this$1._edges.get(i);
37565             var eCoord = e.getCoordinates();
37566             if (this$1.matchInSameDirection(p0, p1, eCoord[0], eCoord[1])) { return e }
37567             if (this$1.matchInSameDirection(p0, p1, eCoord[eCoord.length - 1], eCoord[eCoord.length - 2])) { return e }
37568           }
37569           return null
37570         };
37571         PlanarGraph.prototype.insertEdge = function insertEdge (e) {
37572           this._edges.add(e);
37573         };
37574         PlanarGraph.prototype.findEdgeEnd = function findEdgeEnd (e) {
37575           for (var i = this.getEdgeEnds().iterator(); i.hasNext();) {
37576             var ee = i.next();
37577             if (ee.getEdge() === e) { return ee }
37578           }
37579           return null
37580         };
37581         PlanarGraph.prototype.addEdges = function addEdges (edgesToAdd) {
37582             var this$1 = this;
37583
37584           for (var it = edgesToAdd.iterator(); it.hasNext();) {
37585             var e = it.next();
37586             this$1._edges.add(e);
37587             var de1 = new DirectedEdge(e, true);
37588             var de2 = new DirectedEdge(e, false);
37589             de1.setSym(de2);
37590             de2.setSym(de1);
37591             this$1.add(de1);
37592             this$1.add(de2);
37593           }
37594         };
37595         PlanarGraph.prototype.add = function add (e) {
37596           this._nodes.add(e);
37597           this._edgeEndList.add(e);
37598         };
37599         PlanarGraph.prototype.getNodes = function getNodes () {
37600           return this._nodes.values()
37601         };
37602         PlanarGraph.prototype.findEdge = function findEdge (p0, p1) {
37603             var this$1 = this;
37604
37605           for (var i = 0; i < this._edges.size(); i++) {
37606             var e = this$1._edges.get(i);
37607             var eCoord = e.getCoordinates();
37608             if (p0.equals(eCoord[0]) && p1.equals(eCoord[1])) { return e }
37609           }
37610           return null
37611         };
37612         PlanarGraph.prototype.interfaces_ = function interfaces_ () {
37613           return []
37614         };
37615         PlanarGraph.prototype.getClass = function getClass () {
37616           return PlanarGraph
37617         };
37618         PlanarGraph.linkResultDirectedEdges = function linkResultDirectedEdges (nodes) {
37619           for (var nodeit = nodes.iterator(); nodeit.hasNext();) {
37620             var node = nodeit.next();
37621             node.getEdges().linkResultDirectedEdges();
37622           }
37623         };
37624
37625         var PolygonBuilder = function PolygonBuilder () {
37626           this._geometryFactory = null;
37627           this._shellList = new ArrayList();
37628           var geometryFactory = arguments[0];
37629           this._geometryFactory = geometryFactory;
37630         };
37631         PolygonBuilder.prototype.sortShellsAndHoles = function sortShellsAndHoles (edgeRings, shellList, freeHoleList) {
37632           for (var it = edgeRings.iterator(); it.hasNext();) {
37633             var er = it.next();
37634             if (er.isHole()) {
37635               freeHoleList.add(er);
37636             } else {
37637               shellList.add(er);
37638             }
37639           }
37640         };
37641         PolygonBuilder.prototype.computePolygons = function computePolygons (shellList) {
37642             var this$1 = this;
37643
37644           var resultPolyList = new ArrayList();
37645           for (var it = shellList.iterator(); it.hasNext();) {
37646             var er = it.next();
37647             var poly = er.toPolygon(this$1._geometryFactory);
37648             resultPolyList.add(poly);
37649           }
37650           return resultPolyList
37651         };
37652         PolygonBuilder.prototype.placeFreeHoles = function placeFreeHoles (shellList, freeHoleList) {
37653             var this$1 = this;
37654
37655           for (var it = freeHoleList.iterator(); it.hasNext();) {
37656             var hole = it.next();
37657             if (hole.getShell() === null) {
37658               var shell = this$1.findEdgeRingContaining(hole, shellList);
37659               if (shell === null) { throw new TopologyException('unable to assign hole to a shell', hole.getCoordinate(0)) }
37660               hole.setShell(shell);
37661             }
37662           }
37663         };
37664         PolygonBuilder.prototype.buildMinimalEdgeRings = function buildMinimalEdgeRings (maxEdgeRings, shellList, freeHoleList) {
37665             var this$1 = this;
37666
37667           var edgeRings = new ArrayList();
37668           for (var it = maxEdgeRings.iterator(); it.hasNext();) {
37669             var er = it.next();
37670             if (er.getMaxNodeDegree() > 2) {
37671               er.linkDirectedEdgesForMinimalEdgeRings();
37672               var minEdgeRings = er.buildMinimalRings();
37673               var shell = this$1.findShell(minEdgeRings);
37674               if (shell !== null) {
37675                 this$1.placePolygonHoles(shell, minEdgeRings);
37676                 shellList.add(shell);
37677               } else {
37678                 freeHoleList.addAll(minEdgeRings);
37679               }
37680             } else {
37681               edgeRings.add(er);
37682             }
37683           }
37684           return edgeRings
37685         };
37686         PolygonBuilder.prototype.containsPoint = function containsPoint (p) {
37687           for (var it = this._shellList.iterator(); it.hasNext();) {
37688             var er = it.next();
37689             if (er.containsPoint(p)) { return true }
37690           }
37691           return false
37692         };
37693         PolygonBuilder.prototype.buildMaximalEdgeRings = function buildMaximalEdgeRings (dirEdges) {
37694             var this$1 = this;
37695
37696           var maxEdgeRings = new ArrayList();
37697           for (var it = dirEdges.iterator(); it.hasNext();) {
37698             var de = it.next();
37699             if (de.isInResult() && de.getLabel().isArea()) {
37700               if (de.getEdgeRing() === null) {
37701                 var er = new MaximalEdgeRing(de, this$1._geometryFactory);
37702                 maxEdgeRings.add(er);
37703                 er.setInResult();
37704               }
37705             }
37706           }
37707           return maxEdgeRings
37708         };
37709         PolygonBuilder.prototype.placePolygonHoles = function placePolygonHoles (shell, minEdgeRings) {
37710           for (var it = minEdgeRings.iterator(); it.hasNext();) {
37711             var er = it.next();
37712             if (er.isHole()) {
37713               er.setShell(shell);
37714             }
37715           }
37716         };
37717         PolygonBuilder.prototype.getPolygons = function getPolygons () {
37718           var resultPolyList = this.computePolygons(this._shellList);
37719           return resultPolyList
37720         };
37721         PolygonBuilder.prototype.findEdgeRingContaining = function findEdgeRingContaining (testEr, shellList) {
37722           var testRing = testEr.getLinearRing();
37723           var testEnv = testRing.getEnvelopeInternal();
37724           var testPt = testRing.getCoordinateN(0);
37725           var minShell = null;
37726           var minEnv = null;
37727           for (var it = shellList.iterator(); it.hasNext();) {
37728             var tryShell = it.next();
37729             var tryRing = tryShell.getLinearRing();
37730             var tryEnv = tryRing.getEnvelopeInternal();
37731             if (minShell !== null) { minEnv = minShell.getLinearRing().getEnvelopeInternal(); }
37732             var isContained = false;
37733             if (tryEnv.contains(testEnv) && CGAlgorithms.isPointInRing(testPt, tryRing.getCoordinates())) { isContained = true; }
37734             if (isContained) {
37735               if (minShell === null || minEnv.contains(tryEnv)) {
37736                 minShell = tryShell;
37737               }
37738             }
37739           }
37740           return minShell
37741         };
37742         PolygonBuilder.prototype.findShell = function findShell (minEdgeRings) {
37743           var shellCount = 0;
37744           var shell = null;
37745           for (var it = minEdgeRings.iterator(); it.hasNext();) {
37746             var er = it.next();
37747             if (!er.isHole()) {
37748               shell = er;
37749               shellCount++;
37750             }
37751           }
37752           Assert.isTrue(shellCount <= 1, 'found two shells in MinimalEdgeRing list');
37753           return shell
37754         };
37755         PolygonBuilder.prototype.add = function add () {
37756           if (arguments.length === 1) {
37757             var graph = arguments[0];
37758             this.add(graph.getEdgeEnds(), graph.getNodes());
37759           } else if (arguments.length === 2) {
37760             var dirEdges = arguments[0];
37761             var nodes = arguments[1];
37762             PlanarGraph.linkResultDirectedEdges(nodes);
37763             var maxEdgeRings = this.buildMaximalEdgeRings(dirEdges);
37764             var freeHoleList = new ArrayList();
37765             var edgeRings = this.buildMinimalEdgeRings(maxEdgeRings, this._shellList, freeHoleList);
37766             this.sortShellsAndHoles(edgeRings, this._shellList, freeHoleList);
37767             this.placeFreeHoles(this._shellList, freeHoleList);
37768           }
37769         };
37770         PolygonBuilder.prototype.interfaces_ = function interfaces_ () {
37771           return []
37772         };
37773         PolygonBuilder.prototype.getClass = function getClass () {
37774           return PolygonBuilder
37775         };
37776
37777         var Boundable = function Boundable () {};
37778
37779         Boundable.prototype.getBounds = function getBounds () {};
37780         Boundable.prototype.interfaces_ = function interfaces_ () {
37781           return []
37782         };
37783         Boundable.prototype.getClass = function getClass () {
37784           return Boundable
37785         };
37786
37787         var ItemBoundable = function ItemBoundable () {
37788           this._bounds = null;
37789           this._item = null;
37790           var bounds = arguments[0];
37791           var item = arguments[1];
37792           this._bounds = bounds;
37793           this._item = item;
37794         };
37795         ItemBoundable.prototype.getItem = function getItem () {
37796           return this._item
37797         };
37798         ItemBoundable.prototype.getBounds = function getBounds () {
37799           return this._bounds
37800         };
37801         ItemBoundable.prototype.interfaces_ = function interfaces_ () {
37802           return [Boundable, Serializable]
37803         };
37804         ItemBoundable.prototype.getClass = function getClass () {
37805           return ItemBoundable
37806         };
37807
37808         var PriorityQueue = function PriorityQueue () {
37809           this._size = null;
37810           this._items = null;
37811           this._size = 0;
37812           this._items = new ArrayList();
37813           this._items.add(null);
37814         };
37815         PriorityQueue.prototype.poll = function poll () {
37816           if (this.isEmpty()) { return null }
37817           var minItem = this._items.get(1);
37818           this._items.set(1, this._items.get(this._size));
37819           this._size -= 1;
37820           this.reorder(1);
37821           return minItem
37822         };
37823         PriorityQueue.prototype.size = function size () {
37824           return this._size
37825         };
37826         PriorityQueue.prototype.reorder = function reorder (hole) {
37827             var this$1 = this;
37828
37829           var child = null;
37830           var tmp = this._items.get(hole);
37831           for (; hole * 2 <= this._size; hole = child) {
37832             child = hole * 2;
37833             if (child !== this$1._size && this$1._items.get(child + 1).compareTo(this$1._items.get(child)) < 0) { child++; }
37834             if (this$1._items.get(child).compareTo(tmp) < 0) { this$1._items.set(hole, this$1._items.get(child)); } else { break }
37835           }
37836           this._items.set(hole, tmp);
37837         };
37838         PriorityQueue.prototype.clear = function clear () {
37839           this._size = 0;
37840           this._items.clear();
37841         };
37842         PriorityQueue.prototype.isEmpty = function isEmpty () {
37843           return this._size === 0
37844         };
37845         PriorityQueue.prototype.add = function add (x) {
37846             var this$1 = this;
37847
37848           this._items.add(null);
37849           this._size += 1;
37850           var hole = this._size;
37851           this._items.set(0, x);
37852           for (; x.compareTo(this._items.get(Math.trunc(hole / 2))) < 0; hole /= 2) {
37853             this$1._items.set(hole, this$1._items.get(Math.trunc(hole / 2)));
37854           }
37855           this._items.set(hole, x);
37856         };
37857         PriorityQueue.prototype.interfaces_ = function interfaces_ () {
37858           return []
37859         };
37860         PriorityQueue.prototype.getClass = function getClass () {
37861           return PriorityQueue
37862         };
37863
37864         var ItemVisitor = function ItemVisitor () {};
37865
37866         ItemVisitor.prototype.visitItem = function visitItem (item) {};
37867         ItemVisitor.prototype.interfaces_ = function interfaces_ () {
37868           return []
37869         };
37870         ItemVisitor.prototype.getClass = function getClass () {
37871           return ItemVisitor
37872         };
37873
37874         var SpatialIndex = function SpatialIndex () {};
37875
37876         SpatialIndex.prototype.insert = function insert (itemEnv, item) {};
37877         SpatialIndex.prototype.remove = function remove (itemEnv, item) {};
37878         SpatialIndex.prototype.query = function query () {
37879           // if (arguments.length === 1) {
37880           // const searchEnv = arguments[0]
37881           // } else if (arguments.length === 2) {
37882           // const searchEnv = arguments[0]
37883           // const visitor = arguments[1]
37884           // }
37885         };
37886         SpatialIndex.prototype.interfaces_ = function interfaces_ () {
37887           return []
37888         };
37889         SpatialIndex.prototype.getClass = function getClass () {
37890           return SpatialIndex
37891         };
37892
37893         var AbstractNode = function AbstractNode () {
37894           this._childBoundables = new ArrayList();
37895           this._bounds = null;
37896           this._level = null;
37897           if (arguments.length === 0) ; else if (arguments.length === 1) {
37898             var level = arguments[0];
37899             this._level = level;
37900           }
37901         };
37902
37903         var staticAccessors$22 = { serialVersionUID: { configurable: true } };
37904         AbstractNode.prototype.getLevel = function getLevel () {
37905           return this._level
37906         };
37907         AbstractNode.prototype.size = function size () {
37908           return this._childBoundables.size()
37909         };
37910         AbstractNode.prototype.getChildBoundables = function getChildBoundables () {
37911           return this._childBoundables
37912         };
37913         AbstractNode.prototype.addChildBoundable = function addChildBoundable (childBoundable) {
37914           Assert.isTrue(this._bounds === null);
37915           this._childBoundables.add(childBoundable);
37916         };
37917         AbstractNode.prototype.isEmpty = function isEmpty () {
37918           return this._childBoundables.isEmpty()
37919         };
37920         AbstractNode.prototype.getBounds = function getBounds () {
37921           if (this._bounds === null) {
37922             this._bounds = this.computeBounds();
37923           }
37924           return this._bounds
37925         };
37926         AbstractNode.prototype.interfaces_ = function interfaces_ () {
37927           return [Boundable, Serializable]
37928         };
37929         AbstractNode.prototype.getClass = function getClass () {
37930           return AbstractNode
37931         };
37932         staticAccessors$22.serialVersionUID.get = function () { return 6493722185909573708 };
37933
37934         Object.defineProperties( AbstractNode, staticAccessors$22 );
37935
37936         var Collections = function Collections () {};
37937
37938         Collections.reverseOrder = function reverseOrder () {
37939           return {
37940             compare: function compare (a, b) {
37941               return b.compareTo(a)
37942             }
37943           }
37944         };
37945         Collections.min = function min (l) {
37946           Collections.sort(l);
37947           return l.get(0)
37948         };
37949         Collections.sort = function sort (l, c) {
37950           var a = l.toArray();
37951           if (c) {
37952             Arrays.sort(a, c);
37953           } else {
37954             Arrays.sort(a);
37955           }
37956           var i = l.iterator();
37957           for (var pos = 0, alen = a.length; pos < alen; pos++) {
37958             i.next();
37959             i.set(a[pos]);
37960           }
37961         };
37962         Collections.singletonList = function singletonList (o) {
37963           var arrayList = new ArrayList();
37964           arrayList.add(o);
37965           return arrayList
37966         };
37967
37968         var BoundablePair = function BoundablePair () {
37969           this._boundable1 = null;
37970           this._boundable2 = null;
37971           this._distance = null;
37972           this._itemDistance = null;
37973           var boundable1 = arguments[0];
37974           var boundable2 = arguments[1];
37975           var itemDistance = arguments[2];
37976           this._boundable1 = boundable1;
37977           this._boundable2 = boundable2;
37978           this._itemDistance = itemDistance;
37979           this._distance = this.distance();
37980         };
37981         BoundablePair.prototype.expandToQueue = function expandToQueue (priQ, minDistance) {
37982           var isComp1 = BoundablePair.isComposite(this._boundable1);
37983           var isComp2 = BoundablePair.isComposite(this._boundable2);
37984           if (isComp1 && isComp2) {
37985             if (BoundablePair.area(this._boundable1) > BoundablePair.area(this._boundable2)) {
37986               this.expand(this._boundable1, this._boundable2, priQ, minDistance);
37987               return null
37988             } else {
37989               this.expand(this._boundable2, this._boundable1, priQ, minDistance);
37990               return null
37991             }
37992           } else if (isComp1) {
37993             this.expand(this._boundable1, this._boundable2, priQ, minDistance);
37994             return null
37995           } else if (isComp2) {
37996             this.expand(this._boundable2, this._boundable1, priQ, minDistance);
37997             return null
37998           }
37999           throw new IllegalArgumentException('neither boundable is composite')
38000         };
38001         BoundablePair.prototype.isLeaves = function isLeaves () {
38002           return !(BoundablePair.isComposite(this._boundable1) || BoundablePair.isComposite(this._boundable2))
38003         };
38004         BoundablePair.prototype.compareTo = function compareTo (o) {
38005           var nd = o;
38006           if (this._distance < nd._distance) { return -1 }
38007           if (this._distance > nd._distance) { return 1 }
38008           return 0
38009         };
38010         BoundablePair.prototype.expand = function expand (bndComposite, bndOther, priQ, minDistance) {
38011             var this$1 = this;
38012
38013           var children = bndComposite.getChildBoundables();
38014           for (var i = children.iterator(); i.hasNext();) {
38015             var child = i.next();
38016             var bp = new BoundablePair(child, bndOther, this$1._itemDistance);
38017             if (bp.getDistance() < minDistance) {
38018               priQ.add(bp);
38019             }
38020           }
38021         };
38022         BoundablePair.prototype.getBoundable = function getBoundable (i) {
38023           if (i === 0) { return this._boundable1 }
38024           return this._boundable2
38025         };
38026         BoundablePair.prototype.getDistance = function getDistance () {
38027           return this._distance
38028         };
38029         BoundablePair.prototype.distance = function distance () {
38030           if (this.isLeaves()) {
38031             return this._itemDistance.distance(this._boundable1, this._boundable2)
38032           }
38033           return this._boundable1.getBounds().distance(this._boundable2.getBounds())
38034         };
38035         BoundablePair.prototype.interfaces_ = function interfaces_ () {
38036           return [Comparable]
38037         };
38038         BoundablePair.prototype.getClass = function getClass () {
38039           return BoundablePair
38040         };
38041         BoundablePair.area = function area (b) {
38042           return b.getBounds().getArea()
38043         };
38044         BoundablePair.isComposite = function isComposite (item) {
38045           return item instanceof AbstractNode
38046         };
38047
38048         var AbstractSTRtree = function AbstractSTRtree () {
38049           this._root = null;
38050           this._built = false;
38051           this._itemBoundables = new ArrayList();
38052           this._nodeCapacity = null;
38053           if (arguments.length === 0) {
38054             var nodeCapacity = AbstractSTRtree.DEFAULT_NODE_CAPACITY;
38055             this._nodeCapacity = nodeCapacity;
38056           } else if (arguments.length === 1) {
38057             var nodeCapacity$1 = arguments[0];
38058             Assert.isTrue(nodeCapacity$1 > 1, 'Node capacity must be greater than 1');
38059             this._nodeCapacity = nodeCapacity$1;
38060           }
38061         };
38062
38063         var staticAccessors$23 = { IntersectsOp: { configurable: true },serialVersionUID: { configurable: true },DEFAULT_NODE_CAPACITY: { configurable: true } };
38064         AbstractSTRtree.prototype.getNodeCapacity = function getNodeCapacity () {
38065           return this._nodeCapacity
38066         };
38067         AbstractSTRtree.prototype.lastNode = function lastNode (nodes) {
38068           return nodes.get(nodes.size() - 1)
38069         };
38070         AbstractSTRtree.prototype.size = function size () {
38071             var this$1 = this;
38072
38073           if (arguments.length === 0) {
38074             if (this.isEmpty()) {
38075               return 0
38076             }
38077             this.build();
38078             return this.size(this._root)
38079           } else if (arguments.length === 1) {
38080             var node = arguments[0];
38081             var size = 0;
38082             for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
38083               var childBoundable = i.next();
38084               if (childBoundable instanceof AbstractNode) {
38085                 size += this$1.size(childBoundable);
38086               } else if (childBoundable instanceof ItemBoundable) {
38087                 size += 1;
38088               }
38089             }
38090             return size
38091           }
38092         };
38093         AbstractSTRtree.prototype.removeItem = function removeItem (node, item) {
38094           var childToRemove = null;
38095           for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
38096             var childBoundable = i.next();
38097             if (childBoundable instanceof ItemBoundable) {
38098               if (childBoundable.getItem() === item) { childToRemove = childBoundable; }
38099             }
38100           }
38101           if (childToRemove !== null) {
38102             node.getChildBoundables().remove(childToRemove);
38103             return true
38104           }
38105           return false
38106         };
38107         AbstractSTRtree.prototype.itemsTree = function itemsTree () {
38108             var this$1 = this;
38109
38110           if (arguments.length === 0) {
38111             this.build();
38112             var valuesTree = this.itemsTree(this._root);
38113             if (valuesTree === null) { return new ArrayList() }
38114             return valuesTree
38115           } else if (arguments.length === 1) {
38116             var node = arguments[0];
38117             var valuesTreeForNode = new ArrayList();
38118             for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
38119               var childBoundable = i.next();
38120               if (childBoundable instanceof AbstractNode) {
38121                 var valuesTreeForChild = this$1.itemsTree(childBoundable);
38122                 if (valuesTreeForChild !== null) { valuesTreeForNode.add(valuesTreeForChild); }
38123               } else if (childBoundable instanceof ItemBoundable) {
38124                 valuesTreeForNode.add(childBoundable.getItem());
38125               } else {
38126                 Assert.shouldNeverReachHere();
38127               }
38128             }
38129             if (valuesTreeForNode.size() <= 0) { return null }
38130             return valuesTreeForNode
38131           }
38132         };
38133         AbstractSTRtree.prototype.insert = function insert (bounds, item) {
38134           Assert.isTrue(!this._built, 'Cannot insert items into an STR packed R-tree after it has been built.');
38135           this._itemBoundables.add(new ItemBoundable(bounds, item));
38136         };
38137         AbstractSTRtree.prototype.boundablesAtLevel = function boundablesAtLevel () {
38138             var this$1 = this;
38139
38140           if (arguments.length === 1) {
38141             var level = arguments[0];
38142             var boundables = new ArrayList();
38143             this.boundablesAtLevel(level, this._root, boundables);
38144             return boundables
38145           } else if (arguments.length === 3) {
38146             var level$1 = arguments[0];
38147             var top = arguments[1];
38148             var boundables$1 = arguments[2];
38149             Assert.isTrue(level$1 > -2);
38150             if (top.getLevel() === level$1) {
38151               boundables$1.add(top);
38152               return null
38153             }
38154             for (var i = top.getChildBoundables().iterator(); i.hasNext();) {
38155               var boundable = i.next();
38156               if (boundable instanceof AbstractNode) {
38157                 this$1.boundablesAtLevel(level$1, boundable, boundables$1);
38158               } else {
38159                 Assert.isTrue(boundable instanceof ItemBoundable);
38160                 if (level$1 === -1) {
38161                   boundables$1.add(boundable);
38162                 }
38163               }
38164             }
38165             return null
38166           }
38167         };
38168         AbstractSTRtree.prototype.query = function query () {
38169             var this$1 = this;
38170
38171           if (arguments.length === 1) {
38172             var searchBounds = arguments[0];
38173             this.build();
38174             var matches = new ArrayList();
38175             if (this.isEmpty()) {
38176               return matches
38177             }
38178             if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds)) {
38179               this.query(searchBounds, this._root, matches);
38180             }
38181             return matches
38182           } else if (arguments.length === 2) {
38183             var searchBounds$1 = arguments[0];
38184             var visitor = arguments[1];
38185             this.build();
38186             if (this.isEmpty()) {
38187               return null
38188             }
38189             if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds$1)) {
38190               this.query(searchBounds$1, this._root, visitor);
38191             }
38192           } else if (arguments.length === 3) {
38193             if (hasInterface(arguments[2], ItemVisitor) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
38194               var searchBounds$2 = arguments[0];
38195               var node = arguments[1];
38196               var visitor$1 = arguments[2];
38197               var childBoundables = node.getChildBoundables();
38198               for (var i = 0; i < childBoundables.size(); i++) {
38199                 var childBoundable = childBoundables.get(i);
38200                 if (!this$1.getIntersectsOp().intersects(childBoundable.getBounds(), searchBounds$2)) {
38201                   continue
38202                 }
38203                 if (childBoundable instanceof AbstractNode) {
38204                   this$1.query(searchBounds$2, childBoundable, visitor$1);
38205                 } else if (childBoundable instanceof ItemBoundable) {
38206                   visitor$1.visitItem(childBoundable.getItem());
38207                 } else {
38208                   Assert.shouldNeverReachHere();
38209                 }
38210               }
38211             } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
38212               var searchBounds$3 = arguments[0];
38213               var node$1 = arguments[1];
38214               var matches$1 = arguments[2];
38215               var childBoundables$1 = node$1.getChildBoundables();
38216               for (var i$1 = 0; i$1 < childBoundables$1.size(); i$1++) {
38217                 var childBoundable$1 = childBoundables$1.get(i$1);
38218                 if (!this$1.getIntersectsOp().intersects(childBoundable$1.getBounds(), searchBounds$3)) {
38219                   continue
38220                 }
38221                 if (childBoundable$1 instanceof AbstractNode) {
38222                   this$1.query(searchBounds$3, childBoundable$1, matches$1);
38223                 } else if (childBoundable$1 instanceof ItemBoundable) {
38224                   matches$1.add(childBoundable$1.getItem());
38225                 } else {
38226                   Assert.shouldNeverReachHere();
38227                 }
38228               }
38229             }
38230           }
38231         };
38232         AbstractSTRtree.prototype.build = function build () {
38233           if (this._built) { return null }
38234           this._root = this._itemBoundables.isEmpty() ? this.createNode(0) : this.createHigherLevels(this._itemBoundables, -1);
38235           this._itemBoundables = null;
38236           this._built = true;
38237         };
38238         AbstractSTRtree.prototype.getRoot = function getRoot () {
38239           this.build();
38240           return this._root
38241         };
38242         AbstractSTRtree.prototype.remove = function remove () {
38243             var this$1 = this;
38244
38245           if (arguments.length === 2) {
38246             var searchBounds = arguments[0];
38247             var item = arguments[1];
38248             this.build();
38249             if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds)) {
38250               return this.remove(searchBounds, this._root, item)
38251             }
38252             return false
38253           } else if (arguments.length === 3) {
38254             var searchBounds$1 = arguments[0];
38255             var node = arguments[1];
38256             var item$1 = arguments[2];
38257             var found = this.removeItem(node, item$1);
38258             if (found) { return true }
38259             var childToPrune = null;
38260             for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
38261               var childBoundable = i.next();
38262               if (!this$1.getIntersectsOp().intersects(childBoundable.getBounds(), searchBounds$1)) {
38263                 continue
38264               }
38265               if (childBoundable instanceof AbstractNode) {
38266                 found = this$1.remove(searchBounds$1, childBoundable, item$1);
38267                 if (found) {
38268                   childToPrune = childBoundable;
38269                   break
38270                 }
38271               }
38272             }
38273             if (childToPrune !== null) {
38274               if (childToPrune.getChildBoundables().isEmpty()) {
38275                 node.getChildBoundables().remove(childToPrune);
38276               }
38277             }
38278             return found
38279           }
38280         };
38281         AbstractSTRtree.prototype.createHigherLevels = function createHigherLevels (boundablesOfALevel, level) {
38282           Assert.isTrue(!boundablesOfALevel.isEmpty());
38283           var parentBoundables = this.createParentBoundables(boundablesOfALevel, level + 1);
38284           if (parentBoundables.size() === 1) {
38285             return parentBoundables.get(0)
38286           }
38287           return this.createHigherLevels(parentBoundables, level + 1)
38288         };
38289         AbstractSTRtree.prototype.depth = function depth () {
38290             var this$1 = this;
38291
38292           if (arguments.length === 0) {
38293             if (this.isEmpty()) {
38294               return 0
38295             }
38296             this.build();
38297             return this.depth(this._root)
38298           } else if (arguments.length === 1) {
38299             var node = arguments[0];
38300             var maxChildDepth = 0;
38301             for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
38302               var childBoundable = i.next();
38303               if (childBoundable instanceof AbstractNode) {
38304                 var childDepth = this$1.depth(childBoundable);
38305                 if (childDepth > maxChildDepth) { maxChildDepth = childDepth; }
38306               }
38307             }
38308             return maxChildDepth + 1
38309           }
38310         };
38311         AbstractSTRtree.prototype.createParentBoundables = function createParentBoundables (childBoundables, newLevel) {
38312             var this$1 = this;
38313
38314           Assert.isTrue(!childBoundables.isEmpty());
38315           var parentBoundables = new ArrayList();
38316           parentBoundables.add(this.createNode(newLevel));
38317           var sortedChildBoundables = new ArrayList(childBoundables);
38318           Collections.sort(sortedChildBoundables, this.getComparator());
38319           for (var i = sortedChildBoundables.iterator(); i.hasNext();) {
38320             var childBoundable = i.next();
38321             if (this$1.lastNode(parentBoundables).getChildBoundables().size() === this$1.getNodeCapacity()) {
38322               parentBoundables.add(this$1.createNode(newLevel));
38323             }
38324             this$1.lastNode(parentBoundables).addChildBoundable(childBoundable);
38325           }
38326           return parentBoundables
38327         };
38328         AbstractSTRtree.prototype.isEmpty = function isEmpty () {
38329           if (!this._built) { return this._itemBoundables.isEmpty() }
38330           return this._root.isEmpty()
38331         };
38332         AbstractSTRtree.prototype.interfaces_ = function interfaces_ () {
38333           return [Serializable]
38334         };
38335         AbstractSTRtree.prototype.getClass = function getClass () {
38336           return AbstractSTRtree
38337         };
38338         AbstractSTRtree.compareDoubles = function compareDoubles (a, b) {
38339           return a > b ? 1 : a < b ? -1 : 0
38340         };
38341         staticAccessors$23.IntersectsOp.get = function () { return IntersectsOp };
38342         staticAccessors$23.serialVersionUID.get = function () { return -3886435814360241337 };
38343         staticAccessors$23.DEFAULT_NODE_CAPACITY.get = function () { return 10 };
38344
38345         Object.defineProperties( AbstractSTRtree, staticAccessors$23 );
38346
38347         var IntersectsOp = function IntersectsOp () {};
38348
38349         var ItemDistance = function ItemDistance () {};
38350
38351         ItemDistance.prototype.distance = function distance (item1, item2) {};
38352         ItemDistance.prototype.interfaces_ = function interfaces_ () {
38353           return []
38354         };
38355         ItemDistance.prototype.getClass = function getClass () {
38356           return ItemDistance
38357         };
38358
38359         var STRtree = (function (AbstractSTRtree$$1) {
38360           function STRtree (nodeCapacity) {
38361             nodeCapacity = nodeCapacity || STRtree.DEFAULT_NODE_CAPACITY;
38362             AbstractSTRtree$$1.call(this, nodeCapacity);
38363           }
38364
38365           if ( AbstractSTRtree$$1 ) { STRtree.__proto__ = AbstractSTRtree$$1; }
38366           STRtree.prototype = Object.create( AbstractSTRtree$$1 && AbstractSTRtree$$1.prototype );
38367           STRtree.prototype.constructor = STRtree;
38368
38369           var staticAccessors = { STRtreeNode: { configurable: true },serialVersionUID: { configurable: true },xComparator: { configurable: true },yComparator: { configurable: true },intersectsOp: { configurable: true },DEFAULT_NODE_CAPACITY: { configurable: true } };
38370           STRtree.prototype.createParentBoundablesFromVerticalSlices = function createParentBoundablesFromVerticalSlices (verticalSlices, newLevel) {
38371             var this$1 = this;
38372
38373             Assert.isTrue(verticalSlices.length > 0);
38374             var parentBoundables = new ArrayList();
38375             for (var i = 0; i < verticalSlices.length; i++) {
38376               parentBoundables.addAll(this$1.createParentBoundablesFromVerticalSlice(verticalSlices[i], newLevel));
38377             }
38378             return parentBoundables
38379           };
38380           STRtree.prototype.createNode = function createNode (level) {
38381             return new STRtreeNode(level)
38382           };
38383           STRtree.prototype.size = function size () {
38384             if (arguments.length === 0) {
38385               return AbstractSTRtree$$1.prototype.size.call(this)
38386             } else { return AbstractSTRtree$$1.prototype.size.apply(this, arguments) }
38387           };
38388           STRtree.prototype.insert = function insert () {
38389             if (arguments.length === 2) {
38390               var itemEnv = arguments[0];
38391               var item = arguments[1];
38392               if (itemEnv.isNull()) {
38393                 return null
38394               }
38395               AbstractSTRtree$$1.prototype.insert.call(this, itemEnv, item);
38396             } else { return AbstractSTRtree$$1.prototype.insert.apply(this, arguments) }
38397           };
38398           STRtree.prototype.getIntersectsOp = function getIntersectsOp () {
38399             return STRtree.intersectsOp
38400           };
38401           STRtree.prototype.verticalSlices = function verticalSlices (childBoundables, sliceCount) {
38402             var sliceCapacity = Math.trunc(Math.ceil(childBoundables.size() / sliceCount));
38403             var slices = new Array(sliceCount).fill(null);
38404             var i = childBoundables.iterator();
38405             for (var j = 0; j < sliceCount; j++) {
38406               slices[j] = new ArrayList();
38407               var boundablesAddedToSlice = 0;
38408               while (i.hasNext() && boundablesAddedToSlice < sliceCapacity) {
38409                 var childBoundable = i.next();
38410                 slices[j].add(childBoundable);
38411                 boundablesAddedToSlice++;
38412               }
38413             }
38414             return slices
38415           };
38416           STRtree.prototype.query = function query () {
38417             if (arguments.length === 1) {
38418               var searchEnv = arguments[0];
38419               return AbstractSTRtree$$1.prototype.query.call(this, searchEnv)
38420             } else if (arguments.length === 2) {
38421               var searchEnv$1 = arguments[0];
38422               var visitor = arguments[1];
38423               AbstractSTRtree$$1.prototype.query.call(this, searchEnv$1, visitor);
38424             } else if (arguments.length === 3) {
38425               if (hasInterface(arguments[2], ItemVisitor) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
38426                 var searchBounds = arguments[0];
38427                 var node = arguments[1];
38428                 var visitor$1 = arguments[2];
38429                 AbstractSTRtree$$1.prototype.query.call(this, searchBounds, node, visitor$1);
38430               } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
38431                 var searchBounds$1 = arguments[0];
38432                 var node$1 = arguments[1];
38433                 var matches = arguments[2];
38434                 AbstractSTRtree$$1.prototype.query.call(this, searchBounds$1, node$1, matches);
38435               }
38436             }
38437           };
38438           STRtree.prototype.getComparator = function getComparator () {
38439             return STRtree.yComparator
38440           };
38441           STRtree.prototype.createParentBoundablesFromVerticalSlice = function createParentBoundablesFromVerticalSlice (childBoundables, newLevel) {
38442             return AbstractSTRtree$$1.prototype.createParentBoundables.call(this, childBoundables, newLevel)
38443           };
38444           STRtree.prototype.remove = function remove () {
38445             if (arguments.length === 2) {
38446               var itemEnv = arguments[0];
38447               var item = arguments[1];
38448               return AbstractSTRtree$$1.prototype.remove.call(this, itemEnv, item)
38449             } else { return AbstractSTRtree$$1.prototype.remove.apply(this, arguments) }
38450           };
38451           STRtree.prototype.depth = function depth () {
38452             if (arguments.length === 0) {
38453               return AbstractSTRtree$$1.prototype.depth.call(this)
38454             } else { return AbstractSTRtree$$1.prototype.depth.apply(this, arguments) }
38455           };
38456           STRtree.prototype.createParentBoundables = function createParentBoundables (childBoundables, newLevel) {
38457             Assert.isTrue(!childBoundables.isEmpty());
38458             var minLeafCount = Math.trunc(Math.ceil(childBoundables.size() / this.getNodeCapacity()));
38459             var sortedChildBoundables = new ArrayList(childBoundables);
38460             Collections.sort(sortedChildBoundables, STRtree.xComparator);
38461             var verticalSlices = this.verticalSlices(sortedChildBoundables, Math.trunc(Math.ceil(Math.sqrt(minLeafCount))));
38462             return this.createParentBoundablesFromVerticalSlices(verticalSlices, newLevel)
38463           };
38464           STRtree.prototype.nearestNeighbour = function nearestNeighbour () {
38465             if (arguments.length === 1) {
38466               if (hasInterface(arguments[0], ItemDistance)) {
38467                 var itemDist = arguments[0];
38468                 var bp = new BoundablePair(this.getRoot(), this.getRoot(), itemDist);
38469                 return this.nearestNeighbour(bp)
38470               } else if (arguments[0] instanceof BoundablePair) {
38471                 var initBndPair = arguments[0];
38472                 return this.nearestNeighbour(initBndPair, Double.POSITIVE_INFINITY)
38473               }
38474             } else if (arguments.length === 2) {
38475               if (arguments[0] instanceof STRtree && hasInterface(arguments[1], ItemDistance)) {
38476                 var tree = arguments[0];
38477                 var itemDist$1 = arguments[1];
38478                 var bp$1 = new BoundablePair(this.getRoot(), tree.getRoot(), itemDist$1);
38479                 return this.nearestNeighbour(bp$1)
38480               } else if (arguments[0] instanceof BoundablePair && typeof arguments[1] === 'number') {
38481                 var initBndPair$1 = arguments[0];
38482                 var maxDistance = arguments[1];
38483                 var distanceLowerBound = maxDistance;
38484                 var minPair = null;
38485                 var priQ = new PriorityQueue();
38486                 priQ.add(initBndPair$1);
38487                 while (!priQ.isEmpty() && distanceLowerBound > 0.0) {
38488                   var bndPair = priQ.poll();
38489                   var currentDistance = bndPair.getDistance();
38490                   if (currentDistance >= distanceLowerBound) { break }
38491                   if (bndPair.isLeaves()) {
38492                     distanceLowerBound = currentDistance;
38493                     minPair = bndPair;
38494                   } else {
38495                     bndPair.expandToQueue(priQ, distanceLowerBound);
38496                   }
38497                 }
38498                 return [minPair.getBoundable(0).getItem(), minPair.getBoundable(1).getItem()]
38499               }
38500             } else if (arguments.length === 3) {
38501               var env = arguments[0];
38502               var item = arguments[1];
38503               var itemDist$2 = arguments[2];
38504               var bnd = new ItemBoundable(env, item);
38505               var bp$2 = new BoundablePair(this.getRoot(), bnd, itemDist$2);
38506               return this.nearestNeighbour(bp$2)[0]
38507             }
38508           };
38509           STRtree.prototype.interfaces_ = function interfaces_ () {
38510             return [SpatialIndex, Serializable]
38511           };
38512           STRtree.prototype.getClass = function getClass () {
38513             return STRtree
38514           };
38515           STRtree.centreX = function centreX (e) {
38516             return STRtree.avg(e.getMinX(), e.getMaxX())
38517           };
38518           STRtree.avg = function avg (a, b) {
38519             return (a + b) / 2
38520           };
38521           STRtree.centreY = function centreY (e) {
38522             return STRtree.avg(e.getMinY(), e.getMaxY())
38523           };
38524           staticAccessors.STRtreeNode.get = function () { return STRtreeNode };
38525           staticAccessors.serialVersionUID.get = function () { return 259274702368956900 };
38526           staticAccessors.xComparator.get = function () {
38527             return {
38528               interfaces_: function () {
38529                 return [Comparator]
38530               },
38531               compare: function (o1, o2) {
38532                 return AbstractSTRtree$$1.compareDoubles(STRtree.centreX(o1.getBounds()), STRtree.centreX(o2.getBounds()))
38533               }
38534             }
38535           };
38536           staticAccessors.yComparator.get = function () {
38537             return {
38538               interfaces_: function () {
38539                 return [Comparator]
38540               },
38541               compare: function (o1, o2) {
38542                 return AbstractSTRtree$$1.compareDoubles(STRtree.centreY(o1.getBounds()), STRtree.centreY(o2.getBounds()))
38543               }
38544             }
38545           };
38546           staticAccessors.intersectsOp.get = function () {
38547             return {
38548               interfaces_: function () {
38549                 return [AbstractSTRtree$$1.IntersectsOp]
38550               },
38551               intersects: function (aBounds, bBounds) {
38552                 return aBounds.intersects(bBounds)
38553               }
38554             }
38555           };
38556           staticAccessors.DEFAULT_NODE_CAPACITY.get = function () { return 10 };
38557
38558           Object.defineProperties( STRtree, staticAccessors );
38559
38560           return STRtree;
38561         }(AbstractSTRtree));
38562
38563         var STRtreeNode = (function (AbstractNode$$1) {
38564           function STRtreeNode () {
38565             var level = arguments[0];
38566             AbstractNode$$1.call(this, level);
38567           }
38568
38569           if ( AbstractNode$$1 ) { STRtreeNode.__proto__ = AbstractNode$$1; }
38570           STRtreeNode.prototype = Object.create( AbstractNode$$1 && AbstractNode$$1.prototype );
38571           STRtreeNode.prototype.constructor = STRtreeNode;
38572           STRtreeNode.prototype.computeBounds = function computeBounds () {
38573             var bounds = null;
38574             for (var i = this.getChildBoundables().iterator(); i.hasNext();) {
38575               var childBoundable = i.next();
38576               if (bounds === null) {
38577                 bounds = new Envelope(childBoundable.getBounds());
38578               } else {
38579                 bounds.expandToInclude(childBoundable.getBounds());
38580               }
38581             }
38582             return bounds
38583           };
38584           STRtreeNode.prototype.interfaces_ = function interfaces_ () {
38585             return []
38586           };
38587           STRtreeNode.prototype.getClass = function getClass () {
38588             return STRtreeNode
38589           };
38590
38591           return STRtreeNode;
38592         }(AbstractNode));
38593
38594         var SegmentPointComparator = function SegmentPointComparator () {};
38595
38596         SegmentPointComparator.prototype.interfaces_ = function interfaces_ () {
38597           return []
38598         };
38599         SegmentPointComparator.prototype.getClass = function getClass () {
38600           return SegmentPointComparator
38601         };
38602         SegmentPointComparator.relativeSign = function relativeSign (x0, x1) {
38603           if (x0 < x1) { return -1 }
38604           if (x0 > x1) { return 1 }
38605           return 0
38606         };
38607         SegmentPointComparator.compare = function compare (octant, p0, p1) {
38608           if (p0.equals2D(p1)) { return 0 }
38609           var xSign = SegmentPointComparator.relativeSign(p0.x, p1.x);
38610           var ySign = SegmentPointComparator.relativeSign(p0.y, p1.y);
38611           switch (octant) {
38612             case 0:
38613               return SegmentPointComparator.compareValue(xSign, ySign)
38614             case 1:
38615               return SegmentPointComparator.compareValue(ySign, xSign)
38616             case 2:
38617               return SegmentPointComparator.compareValue(ySign, -xSign)
38618             case 3:
38619               return SegmentPointComparator.compareValue(-xSign, ySign)
38620             case 4:
38621               return SegmentPointComparator.compareValue(-xSign, -ySign)
38622             case 5:
38623               return SegmentPointComparator.compareValue(-ySign, -xSign)
38624             case 6:
38625               return SegmentPointComparator.compareValue(-ySign, xSign)
38626             case 7:
38627               return SegmentPointComparator.compareValue(xSign, -ySign)
38628           }
38629           Assert.shouldNeverReachHere('invalid octant value');
38630           return 0
38631         };
38632         SegmentPointComparator.compareValue = function compareValue (compareSign0, compareSign1) {
38633           if (compareSign0 < 0) { return -1 }
38634           if (compareSign0 > 0) { return 1 }
38635           if (compareSign1 < 0) { return -1 }
38636           if (compareSign1 > 0) { return 1 }
38637           return 0
38638         };
38639
38640         var SegmentNode = function SegmentNode () {
38641           this._segString = null;
38642           this.coord = null;
38643           this.segmentIndex = null;
38644           this._segmentOctant = null;
38645           this._isInterior = null;
38646           var segString = arguments[0];
38647           var coord = arguments[1];
38648           var segmentIndex = arguments[2];
38649           var segmentOctant = arguments[3];
38650           this._segString = segString;
38651           this.coord = new Coordinate(coord);
38652           this.segmentIndex = segmentIndex;
38653           this._segmentOctant = segmentOctant;
38654           this._isInterior = !coord.equals2D(segString.getCoordinate(segmentIndex));
38655         };
38656         SegmentNode.prototype.getCoordinate = function getCoordinate () {
38657           return this.coord
38658         };
38659         SegmentNode.prototype.print = function print (out) {
38660           out.print(this.coord);
38661           out.print(' seg # = ' + this.segmentIndex);
38662         };
38663         SegmentNode.prototype.compareTo = function compareTo (obj) {
38664           var other = obj;
38665           if (this.segmentIndex < other.segmentIndex) { return -1 }
38666           if (this.segmentIndex > other.segmentIndex) { return 1 }
38667           if (this.coord.equals2D(other.coord)) { return 0 }
38668           return SegmentPointComparator.compare(this._segmentOctant, this.coord, other.coord)
38669         };
38670         SegmentNode.prototype.isEndPoint = function isEndPoint (maxSegmentIndex) {
38671           if (this.segmentIndex === 0 && !this._isInterior) { return true }
38672           if (this.segmentIndex === maxSegmentIndex) { return true }
38673           return false
38674         };
38675         SegmentNode.prototype.isInterior = function isInterior () {
38676           return this._isInterior
38677         };
38678         SegmentNode.prototype.interfaces_ = function interfaces_ () {
38679           return [Comparable]
38680         };
38681         SegmentNode.prototype.getClass = function getClass () {
38682           return SegmentNode
38683         };
38684
38685         // import Iterator from '../../../../java/util/Iterator'
38686         var SegmentNodeList = function SegmentNodeList () {
38687           this._nodeMap = new TreeMap();
38688           this._edge = null;
38689           var edge = arguments[0];
38690           this._edge = edge;
38691         };
38692         SegmentNodeList.prototype.getSplitCoordinates = function getSplitCoordinates () {
38693             var this$1 = this;
38694
38695           var coordList = new CoordinateList();
38696           this.addEndpoints();
38697           var it = this.iterator();
38698           var eiPrev = it.next();
38699           while (it.hasNext()) {
38700             var ei = it.next();
38701             this$1.addEdgeCoordinates(eiPrev, ei, coordList);
38702             eiPrev = ei;
38703           }
38704           return coordList.toCoordinateArray()
38705         };
38706         SegmentNodeList.prototype.addCollapsedNodes = function addCollapsedNodes () {
38707             var this$1 = this;
38708
38709           var collapsedVertexIndexes = new ArrayList();
38710           this.findCollapsesFromInsertedNodes(collapsedVertexIndexes);
38711           this.findCollapsesFromExistingVertices(collapsedVertexIndexes);
38712           for (var it = collapsedVertexIndexes.iterator(); it.hasNext();) {
38713             var vertexIndex = it.next().intValue();
38714             this$1.add(this$1._edge.getCoordinate(vertexIndex), vertexIndex);
38715           }
38716         };
38717         SegmentNodeList.prototype.print = function print (out) {
38718           out.println('Intersections:');
38719           for (var it = this.iterator(); it.hasNext();) {
38720             var ei = it.next();
38721             ei.print(out);
38722           }
38723         };
38724         SegmentNodeList.prototype.findCollapsesFromExistingVertices = function findCollapsesFromExistingVertices (collapsedVertexIndexes) {
38725             var this$1 = this;
38726
38727           for (var i = 0; i < this._edge.size() - 2; i++) {
38728             var p0 = this$1._edge.getCoordinate(i);
38729             // const p1 = this._edge.getCoordinate(i + 1)
38730             var p2 = this$1._edge.getCoordinate(i + 2);
38731             if (p0.equals2D(p2)) {
38732               collapsedVertexIndexes.add(new Integer(i + 1));
38733             }
38734           }
38735         };
38736         SegmentNodeList.prototype.addEdgeCoordinates = function addEdgeCoordinates (ei0, ei1, coordList) {
38737             var this$1 = this;
38738
38739           // let npts = ei1.segmentIndex - ei0.segmentIndex + 2
38740           var lastSegStartPt = this._edge.getCoordinate(ei1.segmentIndex);
38741           var useIntPt1 = ei1.isInterior() || !ei1.coord.equals2D(lastSegStartPt);
38742           // if (!useIntPt1) {
38743           // npts--
38744           // }
38745           // const ipt = 0
38746           coordList.add(new Coordinate(ei0.coord), false);
38747           for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {
38748             coordList.add(this$1._edge.getCoordinate(i));
38749           }
38750           if (useIntPt1) {
38751             coordList.add(new Coordinate(ei1.coord));
38752           }
38753         };
38754         SegmentNodeList.prototype.iterator = function iterator () {
38755           return this._nodeMap.values().iterator()
38756         };
38757         SegmentNodeList.prototype.addSplitEdges = function addSplitEdges (edgeList) {
38758             var this$1 = this;
38759
38760           this.addEndpoints();
38761           this.addCollapsedNodes();
38762           var it = this.iterator();
38763           var eiPrev = it.next();
38764           while (it.hasNext()) {
38765             var ei = it.next();
38766             var newEdge = this$1.createSplitEdge(eiPrev, ei);
38767             edgeList.add(newEdge);
38768             eiPrev = ei;
38769           }
38770         };
38771         SegmentNodeList.prototype.findCollapseIndex = function findCollapseIndex (ei0, ei1, collapsedVertexIndex) {
38772           if (!ei0.coord.equals2D(ei1.coord)) { return false }
38773           var numVerticesBetween = ei1.segmentIndex - ei0.segmentIndex;
38774           if (!ei1.isInterior()) {
38775             numVerticesBetween--;
38776           }
38777           if (numVerticesBetween === 1) {
38778             collapsedVertexIndex[0] = ei0.segmentIndex + 1;
38779             return true
38780           }
38781           return false
38782         };
38783         SegmentNodeList.prototype.findCollapsesFromInsertedNodes = function findCollapsesFromInsertedNodes (collapsedVertexIndexes) {
38784             var this$1 = this;
38785
38786           var collapsedVertexIndex = new Array(1).fill(null);
38787           var it = this.iterator();
38788           var eiPrev = it.next();
38789           while (it.hasNext()) {
38790             var ei = it.next();
38791             var isCollapsed = this$1.findCollapseIndex(eiPrev, ei, collapsedVertexIndex);
38792             if (isCollapsed) { collapsedVertexIndexes.add(new Integer(collapsedVertexIndex[0])); }
38793             eiPrev = ei;
38794           }
38795         };
38796         SegmentNodeList.prototype.getEdge = function getEdge () {
38797           return this._edge
38798         };
38799         SegmentNodeList.prototype.addEndpoints = function addEndpoints () {
38800           var maxSegIndex = this._edge.size() - 1;
38801           this.add(this._edge.getCoordinate(0), 0);
38802           this.add(this._edge.getCoordinate(maxSegIndex), maxSegIndex);
38803         };
38804         SegmentNodeList.prototype.createSplitEdge = function createSplitEdge (ei0, ei1) {
38805             var this$1 = this;
38806
38807           var npts = ei1.segmentIndex - ei0.segmentIndex + 2;
38808           var lastSegStartPt = this._edge.getCoordinate(ei1.segmentIndex);
38809           var useIntPt1 = ei1.isInterior() || !ei1.coord.equals2D(lastSegStartPt);
38810           if (!useIntPt1) {
38811             npts--;
38812           }
38813           var pts = new Array(npts).fill(null);
38814           var ipt = 0;
38815           pts[ipt++] = new Coordinate(ei0.coord);
38816           for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {
38817             pts[ipt++] = this$1._edge.getCoordinate(i);
38818           }
38819           if (useIntPt1) { pts[ipt] = new Coordinate(ei1.coord); }
38820           return new NodedSegmentString(pts, this._edge.getData())
38821         };
38822         SegmentNodeList.prototype.add = function add (intPt, segmentIndex) {
38823           var eiNew = new SegmentNode(this._edge, intPt, segmentIndex, this._edge.getSegmentOctant(segmentIndex));
38824           var ei = this._nodeMap.get(eiNew);
38825           if (ei !== null) {
38826             Assert.isTrue(ei.coord.equals2D(intPt), 'Found equal nodes with different coordinates');
38827             return ei
38828           }
38829           this._nodeMap.put(eiNew, eiNew);
38830           return eiNew
38831         };
38832         SegmentNodeList.prototype.checkSplitEdgesCorrectness = function checkSplitEdgesCorrectness (splitEdges) {
38833           var edgePts = this._edge.getCoordinates();
38834           var split0 = splitEdges.get(0);
38835           var pt0 = split0.getCoordinate(0);
38836           if (!pt0.equals2D(edgePts[0])) { throw new RuntimeException('bad split edge start point at ' + pt0) }
38837           var splitn = splitEdges.get(splitEdges.size() - 1);
38838           var splitnPts = splitn.getCoordinates();
38839           var ptn = splitnPts[splitnPts.length - 1];
38840           if (!ptn.equals2D(edgePts[edgePts.length - 1])) { throw new RuntimeException('bad split edge end point at ' + ptn) }
38841         };
38842         SegmentNodeList.prototype.interfaces_ = function interfaces_ () {
38843           return []
38844         };
38845         SegmentNodeList.prototype.getClass = function getClass () {
38846           return SegmentNodeList
38847         };
38848
38849
38850
38851         // class NodeVertexIterator {
38852         //   constructor () {
38853         //     this._nodeList = null
38854         //     this._edge = null
38855         //     this._nodeIt = null
38856         //     this._currNode = null
38857         //     this._nextNode = null
38858         //     this._currSegIndex = 0
38859         //     let nodeList = arguments[0]
38860         //     this._nodeList = nodeList
38861         //     this._edge = nodeList.getEdge()
38862         //     this._nodeIt = nodeList.iterator()
38863         //     this.readNextNode()
38864         //   }
38865         //   next () {
38866         //     if (this._currNode === null) {
38867         //       this._currNode = this._nextNode
38868         //       this._currSegIndex = this._currNode.segmentIndex
38869         //       this.readNextNode()
38870         //       return this._currNode
38871         //     }
38872         //     if (this._nextNode === null) return null
38873         //     if (this._nextNode.segmentIndex === this._currNode.segmentIndex) {
38874         //       this._currNode = this._nextNode
38875         //       this._currSegIndex = this._currNode.segmentIndex
38876         //       this.readNextNode()
38877         //       return this._currNode
38878         //     }
38879         //     if (this._nextNode.segmentIndex > this._currNode.segmentIndex) {}
38880         //     return null
38881         //   }
38882         //   remove () {
38883         //     // throw new UnsupportedOperationException(this.getClass().getName())
38884         //   }
38885         //   hasNext () {
38886         //     if (this._nextNode === null) return false
38887         //     return true
38888         //   }
38889         //   readNextNode () {
38890         //     if (this._nodeIt.hasNext()) this._nextNode = this._nodeIt.next(); else this._nextNode = null
38891         //   }
38892         //   interfaces_ () {
38893         //     return [Iterator]
38894         //   }
38895         //   getClass () {
38896         //     return NodeVertexIterator
38897         //   }
38898         // }
38899
38900         var Octant = function Octant () {};
38901
38902         Octant.prototype.interfaces_ = function interfaces_ () {
38903           return []
38904         };
38905         Octant.prototype.getClass = function getClass () {
38906           return Octant
38907         };
38908         Octant.octant = function octant () {
38909           if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {
38910             var dx = arguments[0];
38911             var dy = arguments[1];
38912             if (dx === 0.0 && dy === 0.0) { throw new IllegalArgumentException('Cannot compute the octant for point ( ' + dx + ', ' + dy + ' )') }
38913             var adx = Math.abs(dx);
38914             var ady = Math.abs(dy);
38915             if (dx >= 0) {
38916               if (dy >= 0) {
38917                 if (adx >= ady) { return 0; } else { return 1 }
38918               } else {
38919                 if (adx >= ady) { return 7; } else { return 6 }
38920               }
38921             } else {
38922               if (dy >= 0) {
38923                 if (adx >= ady) { return 3; } else { return 2 }
38924               } else {
38925                 if (adx >= ady) { return 4; } else { return 5 }
38926               }
38927             }
38928           } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {
38929             var p0 = arguments[0];
38930             var p1 = arguments[1];
38931             var dx$1 = p1.x - p0.x;
38932             var dy$1 = p1.y - p0.y;
38933             if (dx$1 === 0.0 && dy$1 === 0.0) { throw new IllegalArgumentException('Cannot compute the octant for two identical points ' + p0) }
38934             return Octant.octant(dx$1, dy$1)
38935           }
38936         };
38937
38938         var SegmentString = function SegmentString () {};
38939
38940         SegmentString.prototype.getCoordinates = function getCoordinates () {};
38941         SegmentString.prototype.size = function size () {};
38942         SegmentString.prototype.getCoordinate = function getCoordinate (i) {};
38943         SegmentString.prototype.isClosed = function isClosed () {};
38944         SegmentString.prototype.setData = function setData (data) {};
38945         SegmentString.prototype.getData = function getData () {};
38946         SegmentString.prototype.interfaces_ = function interfaces_ () {
38947           return []
38948         };
38949         SegmentString.prototype.getClass = function getClass () {
38950           return SegmentString
38951         };
38952
38953         var NodableSegmentString = function NodableSegmentString () {};
38954
38955         NodableSegmentString.prototype.addIntersection = function addIntersection (intPt, segmentIndex) {};
38956         NodableSegmentString.prototype.interfaces_ = function interfaces_ () {
38957           return [SegmentString]
38958         };
38959         NodableSegmentString.prototype.getClass = function getClass () {
38960           return NodableSegmentString
38961         };
38962
38963         var NodedSegmentString = function NodedSegmentString () {
38964           this._nodeList = new SegmentNodeList(this);
38965           this._pts = null;
38966           this._data = null;
38967           var pts = arguments[0];
38968           var data = arguments[1];
38969           this._pts = pts;
38970           this._data = data;
38971         };
38972         NodedSegmentString.prototype.getCoordinates = function getCoordinates () {
38973           return this._pts
38974         };
38975         NodedSegmentString.prototype.size = function size () {
38976           return this._pts.length
38977         };
38978         NodedSegmentString.prototype.getCoordinate = function getCoordinate (i) {
38979           return this._pts[i]
38980         };
38981         NodedSegmentString.prototype.isClosed = function isClosed () {
38982           return this._pts[0].equals(this._pts[this._pts.length - 1])
38983         };
38984         NodedSegmentString.prototype.getSegmentOctant = function getSegmentOctant (index) {
38985           if (index === this._pts.length - 1) { return -1 }
38986           return this.safeOctant(this.getCoordinate(index), this.getCoordinate(index + 1))
38987         };
38988         NodedSegmentString.prototype.setData = function setData (data) {
38989           this._data = data;
38990         };
38991         NodedSegmentString.prototype.safeOctant = function safeOctant (p0, p1) {
38992           if (p0.equals2D(p1)) { return 0 }
38993           return Octant.octant(p0, p1)
38994         };
38995         NodedSegmentString.prototype.getData = function getData () {
38996           return this._data
38997         };
38998         NodedSegmentString.prototype.addIntersection = function addIntersection () {
38999           if (arguments.length === 2) {
39000             var intPt$1 = arguments[0];
39001             var segmentIndex = arguments[1];
39002             this.addIntersectionNode(intPt$1, segmentIndex);
39003           } else if (arguments.length === 4) {
39004             var li = arguments[0];
39005             var segmentIndex$1 = arguments[1];
39006             // const geomIndex = arguments[2]
39007             var intIndex = arguments[3];
39008             var intPt = new Coordinate(li.getIntersection(intIndex));
39009             this.addIntersection(intPt, segmentIndex$1);
39010           }
39011         };
39012         NodedSegmentString.prototype.toString = function toString () {
39013           return WKTWriter.toLineString(new CoordinateArraySequence(this._pts))
39014         };
39015         NodedSegmentString.prototype.getNodeList = function getNodeList () {
39016           return this._nodeList
39017         };
39018         NodedSegmentString.prototype.addIntersectionNode = function addIntersectionNode (intPt, segmentIndex) {
39019           var normalizedSegmentIndex = segmentIndex;
39020           var nextSegIndex = normalizedSegmentIndex + 1;
39021           if (nextSegIndex < this._pts.length) {
39022             var nextPt = this._pts[nextSegIndex];
39023             if (intPt.equals2D(nextPt)) {
39024               normalizedSegmentIndex = nextSegIndex;
39025             }
39026           }
39027           var ei = this._nodeList.add(intPt, normalizedSegmentIndex);
39028           return ei
39029         };
39030         NodedSegmentString.prototype.addIntersections = function addIntersections (li, segmentIndex, geomIndex) {
39031             var this$1 = this;
39032
39033           for (var i = 0; i < li.getIntersectionNum(); i++) {
39034             this$1.addIntersection(li, segmentIndex, geomIndex, i);
39035           }
39036         };
39037         NodedSegmentString.prototype.interfaces_ = function interfaces_ () {
39038           return [NodableSegmentString]
39039         };
39040         NodedSegmentString.prototype.getClass = function getClass () {
39041           return NodedSegmentString
39042         };
39043         NodedSegmentString.getNodedSubstrings = function getNodedSubstrings () {
39044           if (arguments.length === 1) {
39045             var segStrings = arguments[0];
39046             var resultEdgelist = new ArrayList();
39047             NodedSegmentString.getNodedSubstrings(segStrings, resultEdgelist);
39048             return resultEdgelist
39049           } else if (arguments.length === 2) {
39050             var segStrings$1 = arguments[0];
39051             var resultEdgelist$1 = arguments[1];
39052             for (var i = segStrings$1.iterator(); i.hasNext();) {
39053               var ss = i.next();
39054               ss.getNodeList().addSplitEdges(resultEdgelist$1);
39055             }
39056           }
39057         };
39058
39059         var LineSegment = function LineSegment () {
39060           this.p0 = null;
39061           this.p1 = null;
39062           if (arguments.length === 0) {
39063             this.p0 = new Coordinate();
39064             this.p1 = new Coordinate();
39065           } else if (arguments.length === 1) {
39066             var ls = arguments[0];
39067             this.p0 = new Coordinate(ls.p0);
39068             this.p1 = new Coordinate(ls.p1);
39069           } else if (arguments.length === 2) {
39070             this.p0 = arguments[0];
39071             this.p1 = arguments[1];
39072           } else if (arguments.length === 4) {
39073             var x0 = arguments[0];
39074             var y0 = arguments[1];
39075             var x1 = arguments[2];
39076             var y1 = arguments[3];
39077             this.p0 = new Coordinate(x0, y0);
39078             this.p1 = new Coordinate(x1, y1);
39079           }
39080         };
39081
39082         var staticAccessors$24 = { serialVersionUID: { configurable: true } };
39083         LineSegment.prototype.minX = function minX () {
39084           return Math.min(this.p0.x, this.p1.x)
39085         };
39086         LineSegment.prototype.orientationIndex = function orientationIndex () {
39087           if (arguments[0] instanceof LineSegment) {
39088             var seg = arguments[0];
39089             var orient0 = CGAlgorithms.orientationIndex(this.p0, this.p1, seg.p0);
39090             var orient1 = CGAlgorithms.orientationIndex(this.p0, this.p1, seg.p1);
39091             if (orient0 >= 0 && orient1 >= 0) { return Math.max(orient0, orient1) }
39092             if (orient0 <= 0 && orient1 <= 0) { return Math.max(orient0, orient1) }
39093             return 0
39094           } else if (arguments[0] instanceof Coordinate) {
39095             var p = arguments[0];
39096             return CGAlgorithms.orientationIndex(this.p0, this.p1, p)
39097           }
39098         };
39099         LineSegment.prototype.toGeometry = function toGeometry (geomFactory) {
39100           return geomFactory.createLineString([this.p0, this.p1])
39101         };
39102         LineSegment.prototype.isVertical = function isVertical () {
39103           return this.p0.x === this.p1.x
39104         };
39105         LineSegment.prototype.equals = function equals (o) {
39106           if (!(o instanceof LineSegment)) {
39107             return false
39108           }
39109           var other = o;
39110           return this.p0.equals(other.p0) && this.p1.equals(other.p1)
39111         };
39112         LineSegment.prototype.intersection = function intersection (line) {
39113           var li = new RobustLineIntersector();
39114           li.computeIntersection(this.p0, this.p1, line.p0, line.p1);
39115           if (li.hasIntersection()) { return li.getIntersection(0) }
39116           return null
39117         };
39118         LineSegment.prototype.project = function project () {
39119           if (arguments[0] instanceof Coordinate) {
39120             var p = arguments[0];
39121             if (p.equals(this.p0) || p.equals(this.p1)) { return new Coordinate(p) }
39122             var r = this.projectionFactor(p);
39123             var coord = new Coordinate();
39124             coord.x = this.p0.x + r * (this.p1.x - this.p0.x);
39125             coord.y = this.p0.y + r * (this.p1.y - this.p0.y);
39126             return coord
39127           } else if (arguments[0] instanceof LineSegment) {
39128             var seg = arguments[0];
39129             var pf0 = this.projectionFactor(seg.p0);
39130             var pf1 = this.projectionFactor(seg.p1);
39131             if (pf0 >= 1.0 && pf1 >= 1.0) { return null }
39132             if (pf0 <= 0.0 && pf1 <= 0.0) { return null }
39133             var newp0 = this.project(seg.p0);
39134             if (pf0 < 0.0) { newp0 = this.p0; }
39135             if (pf0 > 1.0) { newp0 = this.p1; }
39136             var newp1 = this.project(seg.p1);
39137             if (pf1 < 0.0) { newp1 = this.p0; }
39138             if (pf1 > 1.0) { newp1 = this.p1; }
39139             return new LineSegment(newp0, newp1)
39140           }
39141         };
39142         LineSegment.prototype.normalize = function normalize () {
39143           if (this.p1.compareTo(this.p0) < 0) { this.reverse(); }
39144         };
39145         LineSegment.prototype.angle = function angle () {
39146           return Math.atan2(this.p1.y - this.p0.y, this.p1.x - this.p0.x)
39147         };
39148         LineSegment.prototype.getCoordinate = function getCoordinate (i) {
39149           if (i === 0) { return this.p0 }
39150           return this.p1
39151         };
39152         LineSegment.prototype.distancePerpendicular = function distancePerpendicular (p) {
39153           return CGAlgorithms.distancePointLinePerpendicular(p, this.p0, this.p1)
39154         };
39155         LineSegment.prototype.minY = function minY () {
39156           return Math.min(this.p0.y, this.p1.y)
39157         };
39158         LineSegment.prototype.midPoint = function midPoint () {
39159           return LineSegment.midPoint(this.p0, this.p1)
39160         };
39161         LineSegment.prototype.projectionFactor = function projectionFactor (p) {
39162           if (p.equals(this.p0)) { return 0.0 }
39163           if (p.equals(this.p1)) { return 1.0 }
39164           var dx = this.p1.x - this.p0.x;
39165           var dy = this.p1.y - this.p0.y;
39166           var len = dx * dx + dy * dy;
39167           if (len <= 0.0) { return Double.NaN }
39168           var r = ((p.x - this.p0.x) * dx + (p.y - this.p0.y) * dy) / len;
39169           return r
39170         };
39171         LineSegment.prototype.closestPoints = function closestPoints (line) {
39172           var intPt = this.intersection(line);
39173           if (intPt !== null) {
39174             return [intPt, intPt]
39175           }
39176           var closestPt = new Array(2).fill(null);
39177           var minDistance = Double.MAX_VALUE;
39178           var dist = null;
39179           var close00 = this.closestPoint(line.p0);
39180           minDistance = close00.distance(line.p0);
39181           closestPt[0] = close00;
39182           closestPt[1] = line.p0;
39183           var close01 = this.closestPoint(line.p1);
39184           dist = close01.distance(line.p1);
39185           if (dist < minDistance) {
39186             minDistance = dist;
39187             closestPt[0] = close01;
39188             closestPt[1] = line.p1;
39189           }
39190           var close10 = line.closestPoint(this.p0);
39191           dist = close10.distance(this.p0);
39192           if (dist < minDistance) {
39193             minDistance = dist;
39194             closestPt[0] = this.p0;
39195             closestPt[1] = close10;
39196           }
39197           var close11 = line.closestPoint(this.p1);
39198           dist = close11.distance(this.p1);
39199           if (dist < minDistance) {
39200             minDistance = dist;
39201             closestPt[0] = this.p1;
39202             closestPt[1] = close11;
39203           }
39204           return closestPt
39205         };
39206         LineSegment.prototype.closestPoint = function closestPoint (p) {
39207           var factor = this.projectionFactor(p);
39208           if (factor > 0 && factor < 1) {
39209             return this.project(p)
39210           }
39211           var dist0 = this.p0.distance(p);
39212           var dist1 = this.p1.distance(p);
39213           if (dist0 < dist1) { return this.p0 }
39214           return this.p1
39215         };
39216         LineSegment.prototype.maxX = function maxX () {
39217           return Math.max(this.p0.x, this.p1.x)
39218         };
39219         LineSegment.prototype.getLength = function getLength () {
39220           return this.p0.distance(this.p1)
39221         };
39222         LineSegment.prototype.compareTo = function compareTo (o) {
39223           var other = o;
39224           var comp0 = this.p0.compareTo(other.p0);
39225           if (comp0 !== 0) { return comp0 }
39226           return this.p1.compareTo(other.p1)
39227         };
39228         LineSegment.prototype.reverse = function reverse () {
39229           var temp = this.p0;
39230           this.p0 = this.p1;
39231           this.p1 = temp;
39232         };
39233         LineSegment.prototype.equalsTopo = function equalsTopo (other) {
39234           return this.p0.equals(other.p0) &&
39235                 (this.p1.equals(other.p1) || this.p0.equals(other.p1)) &&
39236                  this.p1.equals(other.p0)
39237         };
39238         LineSegment.prototype.lineIntersection = function lineIntersection (line) {
39239           try {
39240             var intPt = HCoordinate.intersection(this.p0, this.p1, line.p0, line.p1);
39241             return intPt
39242           } catch (ex) {
39243             if (ex instanceof NotRepresentableException) ; else { throw ex }
39244           } finally {}
39245           return null
39246         };
39247         LineSegment.prototype.maxY = function maxY () {
39248           return Math.max(this.p0.y, this.p1.y)
39249         };
39250         LineSegment.prototype.pointAlongOffset = function pointAlongOffset (segmentLengthFraction, offsetDistance) {
39251           var segx = this.p0.x + segmentLengthFraction * (this.p1.x - this.p0.x);
39252           var segy = this.p0.y + segmentLengthFraction * (this.p1.y - this.p0.y);
39253           var dx = this.p1.x - this.p0.x;
39254           var dy = this.p1.y - this.p0.y;
39255           var len = Math.sqrt(dx * dx + dy * dy);
39256           var ux = 0.0;
39257           var uy = 0.0;
39258           if (offsetDistance !== 0.0) {
39259             if (len <= 0.0) { throw new Error('Cannot compute offset from zero-length line segment') }
39260             ux = offsetDistance * dx / len;
39261             uy = offsetDistance * dy / len;
39262           }
39263           var offsetx = segx - uy;
39264           var offsety = segy + ux;
39265           var coord = new Coordinate(offsetx, offsety);
39266           return coord
39267         };
39268         LineSegment.prototype.setCoordinates = function setCoordinates () {
39269           if (arguments.length === 1) {
39270             var ls = arguments[0];
39271             this.setCoordinates(ls.p0, ls.p1);
39272           } else if (arguments.length === 2) {
39273             var p0 = arguments[0];
39274             var p1 = arguments[1];
39275             this.p0.x = p0.x;
39276             this.p0.y = p0.y;
39277             this.p1.x = p1.x;
39278             this.p1.y = p1.y;
39279           }
39280         };
39281         LineSegment.prototype.segmentFraction = function segmentFraction (inputPt) {
39282           var segFrac = this.projectionFactor(inputPt);
39283           if (segFrac < 0.0) { segFrac = 0.0; } else if (segFrac > 1.0 || Double.isNaN(segFrac)) { segFrac = 1.0; }
39284           return segFrac
39285         };
39286         LineSegment.prototype.toString = function toString () {
39287           return 'LINESTRING( ' + this.p0.x + ' ' + this.p0.y + ', ' + this.p1.x + ' ' + this.p1.y + ')'
39288         };
39289         LineSegment.prototype.isHorizontal = function isHorizontal () {
39290           return this.p0.y === this.p1.y
39291         };
39292         LineSegment.prototype.distance = function distance () {
39293           if (arguments[0] instanceof LineSegment) {
39294             var ls = arguments[0];
39295             return CGAlgorithms.distanceLineLine(this.p0, this.p1, ls.p0, ls.p1)
39296           } else if (arguments[0] instanceof Coordinate) {
39297             var p = arguments[0];
39298             return CGAlgorithms.distancePointLine(p, this.p0, this.p1)
39299           }
39300         };
39301         LineSegment.prototype.pointAlong = function pointAlong (segmentLengthFraction) {
39302           var coord = new Coordinate();
39303           coord.x = this.p0.x + segmentLengthFraction * (this.p1.x - this.p0.x);
39304           coord.y = this.p0.y + segmentLengthFraction * (this.p1.y - this.p0.y);
39305           return coord
39306         };
39307         LineSegment.prototype.hashCode = function hashCode () {
39308           var bits0 = Double.doubleToLongBits(this.p0.x);
39309           bits0 ^= Double.doubleToLongBits(this.p0.y) * 31;
39310           var hash0 = Math.trunc(bits0) ^ Math.trunc(bits0 >> 32);
39311           var bits1 = Double.doubleToLongBits(this.p1.x);
39312           bits1 ^= Double.doubleToLongBits(this.p1.y) * 31;
39313           var hash1 = Math.trunc(bits1) ^ Math.trunc(bits1 >> 32);
39314           return hash0 ^ hash1
39315         };
39316         LineSegment.prototype.interfaces_ = function interfaces_ () {
39317           return [Comparable, Serializable]
39318         };
39319         LineSegment.prototype.getClass = function getClass () {
39320           return LineSegment
39321         };
39322         LineSegment.midPoint = function midPoint (p0, p1) {
39323           return new Coordinate((p0.x + p1.x) / 2, (p0.y + p1.y) / 2)
39324         };
39325         staticAccessors$24.serialVersionUID.get = function () { return 3252005833466256227 };
39326
39327         Object.defineProperties( LineSegment, staticAccessors$24 );
39328
39329         var MonotoneChainOverlapAction = function MonotoneChainOverlapAction () {
39330           this.tempEnv1 = new Envelope();
39331           this.tempEnv2 = new Envelope();
39332           this._overlapSeg1 = new LineSegment();
39333           this._overlapSeg2 = new LineSegment();
39334         };
39335         MonotoneChainOverlapAction.prototype.overlap = function overlap () {
39336           if (arguments.length === 2) ; else if (arguments.length === 4) {
39337             var mc1 = arguments[0];
39338             var start1 = arguments[1];
39339             var mc2 = arguments[2];
39340             var start2 = arguments[3];
39341             mc1.getLineSegment(start1, this._overlapSeg1);
39342             mc2.getLineSegment(start2, this._overlapSeg2);
39343             this.overlap(this._overlapSeg1, this._overlapSeg2);
39344           }
39345         };
39346         MonotoneChainOverlapAction.prototype.interfaces_ = function interfaces_ () {
39347           return []
39348         };
39349         MonotoneChainOverlapAction.prototype.getClass = function getClass () {
39350           return MonotoneChainOverlapAction
39351         };
39352
39353         var MonotoneChain = function MonotoneChain () {
39354           this._pts = null;
39355           this._start = null;
39356           this._end = null;
39357           this._env = null;
39358           this._context = null;
39359           this._id = null;
39360           var pts = arguments[0];
39361           var start = arguments[1];
39362           var end = arguments[2];
39363           var context = arguments[3];
39364           this._pts = pts;
39365           this._start = start;
39366           this._end = end;
39367           this._context = context;
39368         };
39369         MonotoneChain.prototype.getLineSegment = function getLineSegment (index, ls) {
39370           ls.p0 = this._pts[index];
39371           ls.p1 = this._pts[index + 1];
39372         };
39373         MonotoneChain.prototype.computeSelect = function computeSelect (searchEnv, start0, end0, mcs) {
39374           var p0 = this._pts[start0];
39375           var p1 = this._pts[end0];
39376           mcs.tempEnv1.init(p0, p1);
39377           if (end0 - start0 === 1) {
39378             mcs.select(this, start0);
39379             return null
39380           }
39381           if (!searchEnv.intersects(mcs.tempEnv1)) { return null }
39382           var mid = Math.trunc((start0 + end0) / 2);
39383           if (start0 < mid) {
39384             this.computeSelect(searchEnv, start0, mid, mcs);
39385           }
39386           if (mid < end0) {
39387             this.computeSelect(searchEnv, mid, end0, mcs);
39388           }
39389         };
39390         MonotoneChain.prototype.getCoordinates = function getCoordinates () {
39391             var this$1 = this;
39392
39393           var coord = new Array(this._end - this._start + 1).fill(null);
39394           var index = 0;
39395           for (var i = this._start; i <= this._end; i++) {
39396             coord[index++] = this$1._pts[i];
39397           }
39398           return coord
39399         };
39400         MonotoneChain.prototype.computeOverlaps = function computeOverlaps (mc, mco) {
39401           this.computeOverlapsInternal(this._start, this._end, mc, mc._start, mc._end, mco);
39402         };
39403         MonotoneChain.prototype.setId = function setId (id) {
39404           this._id = id;
39405         };
39406         MonotoneChain.prototype.select = function select (searchEnv, mcs) {
39407           this.computeSelect(searchEnv, this._start, this._end, mcs);
39408         };
39409         MonotoneChain.prototype.getEnvelope = function getEnvelope () {
39410           if (this._env === null) {
39411             var p0 = this._pts[this._start];
39412             var p1 = this._pts[this._end];
39413             this._env = new Envelope(p0, p1);
39414           }
39415           return this._env
39416         };
39417         MonotoneChain.prototype.getEndIndex = function getEndIndex () {
39418           return this._end
39419         };
39420         MonotoneChain.prototype.getStartIndex = function getStartIndex () {
39421           return this._start
39422         };
39423         MonotoneChain.prototype.getContext = function getContext () {
39424           return this._context
39425         };
39426         MonotoneChain.prototype.getId = function getId () {
39427           return this._id
39428         };
39429         MonotoneChain.prototype.computeOverlapsInternal = function computeOverlapsInternal (start0, end0, mc, start1, end1, mco) {
39430           var p00 = this._pts[start0];
39431           var p01 = this._pts[end0];
39432           var p10 = mc._pts[start1];
39433           var p11 = mc._pts[end1];
39434           if (end0 - start0 === 1 && end1 - start1 === 1) {
39435             mco.overlap(this, start0, mc, start1);
39436             return null
39437           }
39438           mco.tempEnv1.init(p00, p01);
39439           mco.tempEnv2.init(p10, p11);
39440           if (!mco.tempEnv1.intersects(mco.tempEnv2)) { return null }
39441           var mid0 = Math.trunc((start0 + end0) / 2);
39442           var mid1 = Math.trunc((start1 + end1) / 2);
39443           if (start0 < mid0) {
39444             if (start1 < mid1) { this.computeOverlapsInternal(start0, mid0, mc, start1, mid1, mco); }
39445             if (mid1 < end1) { this.computeOverlapsInternal(start0, mid0, mc, mid1, end1, mco); }
39446           }
39447           if (mid0 < end0) {
39448             if (start1 < mid1) { this.computeOverlapsInternal(mid0, end0, mc, start1, mid1, mco); }
39449             if (mid1 < end1) { this.computeOverlapsInternal(mid0, end0, mc, mid1, end1, mco); }
39450           }
39451         };
39452         MonotoneChain.prototype.interfaces_ = function interfaces_ () {
39453           return []
39454         };
39455         MonotoneChain.prototype.getClass = function getClass () {
39456           return MonotoneChain
39457         };
39458
39459         var MonotoneChainBuilder = function MonotoneChainBuilder () {};
39460
39461         MonotoneChainBuilder.prototype.interfaces_ = function interfaces_ () {
39462           return []
39463         };
39464         MonotoneChainBuilder.prototype.getClass = function getClass () {
39465           return MonotoneChainBuilder
39466         };
39467         MonotoneChainBuilder.getChainStartIndices = function getChainStartIndices (pts) {
39468           var start = 0;
39469           var startIndexList = new ArrayList();
39470           startIndexList.add(new Integer(start));
39471           do {
39472             var last = MonotoneChainBuilder.findChainEnd(pts, start);
39473             startIndexList.add(new Integer(last));
39474             start = last;
39475           } while (start < pts.length - 1)
39476           var startIndex = MonotoneChainBuilder.toIntArray(startIndexList);
39477           return startIndex
39478         };
39479         MonotoneChainBuilder.findChainEnd = function findChainEnd (pts, start) {
39480           var safeStart = start;
39481           while (safeStart < pts.length - 1 && pts[safeStart].equals2D(pts[safeStart + 1])) {
39482             safeStart++;
39483           }
39484           if (safeStart >= pts.length - 1) {
39485             return pts.length - 1
39486           }
39487           var chainQuad = Quadrant.quadrant(pts[safeStart], pts[safeStart + 1]);
39488           var last = start + 1;
39489           while (last < pts.length) {
39490             if (!pts[last - 1].equals2D(pts[last])) {
39491               var quad = Quadrant.quadrant(pts[last - 1], pts[last]);
39492               if (quad !== chainQuad) { break }
39493             }
39494             last++;
39495           }
39496           return last - 1
39497         };
39498         MonotoneChainBuilder.getChains = function getChains () {
39499           if (arguments.length === 1) {
39500             var pts = arguments[0];
39501             return MonotoneChainBuilder.getChains(pts, null)
39502           } else if (arguments.length === 2) {
39503             var pts$1 = arguments[0];
39504             var context = arguments[1];
39505             var mcList = new ArrayList();
39506             var startIndex = MonotoneChainBuilder.getChainStartIndices(pts$1);
39507             for (var i = 0; i < startIndex.length - 1; i++) {
39508               var mc = new MonotoneChain(pts$1, startIndex[i], startIndex[i + 1], context);
39509               mcList.add(mc);
39510             }
39511             return mcList
39512           }
39513         };
39514         MonotoneChainBuilder.toIntArray = function toIntArray (list) {
39515           var array = new Array(list.size()).fill(null);
39516           for (var i = 0; i < array.length; i++) {
39517             array[i] = list.get(i).intValue();
39518           }
39519           return array
39520         };
39521
39522         var Noder = function Noder () {};
39523
39524         Noder.prototype.computeNodes = function computeNodes (segStrings) {};
39525         Noder.prototype.getNodedSubstrings = function getNodedSubstrings () {};
39526         Noder.prototype.interfaces_ = function interfaces_ () {
39527           return []
39528         };
39529         Noder.prototype.getClass = function getClass () {
39530           return Noder
39531         };
39532
39533         var SinglePassNoder = function SinglePassNoder () {
39534           this._segInt = null;
39535           if (arguments.length === 0) ; else if (arguments.length === 1) {
39536             var segInt = arguments[0];
39537             this.setSegmentIntersector(segInt);
39538           }
39539         };
39540         SinglePassNoder.prototype.setSegmentIntersector = function setSegmentIntersector (segInt) {
39541           this._segInt = segInt;
39542         };
39543         SinglePassNoder.prototype.interfaces_ = function interfaces_ () {
39544           return [Noder]
39545         };
39546         SinglePassNoder.prototype.getClass = function getClass () {
39547           return SinglePassNoder
39548         };
39549
39550         var MCIndexNoder = (function (SinglePassNoder$$1) {
39551           function MCIndexNoder (si) {
39552             if (si) { SinglePassNoder$$1.call(this, si); }
39553             else { SinglePassNoder$$1.call(this); }
39554             this._monoChains = new ArrayList();
39555             this._index = new STRtree();
39556             this._idCounter = 0;
39557             this._nodedSegStrings = null;
39558             this._nOverlaps = 0;
39559           }
39560
39561           if ( SinglePassNoder$$1 ) { MCIndexNoder.__proto__ = SinglePassNoder$$1; }
39562           MCIndexNoder.prototype = Object.create( SinglePassNoder$$1 && SinglePassNoder$$1.prototype );
39563           MCIndexNoder.prototype.constructor = MCIndexNoder;
39564
39565           var staticAccessors = { SegmentOverlapAction: { configurable: true } };
39566           MCIndexNoder.prototype.getMonotoneChains = function getMonotoneChains () {
39567             return this._monoChains
39568           };
39569           MCIndexNoder.prototype.getNodedSubstrings = function getNodedSubstrings () {
39570             return NodedSegmentString.getNodedSubstrings(this._nodedSegStrings)
39571           };
39572           MCIndexNoder.prototype.getIndex = function getIndex () {
39573             return this._index
39574           };
39575           MCIndexNoder.prototype.add = function add (segStr) {
39576             var this$1 = this;
39577
39578             var segChains = MonotoneChainBuilder.getChains(segStr.getCoordinates(), segStr);
39579             for (var i = segChains.iterator(); i.hasNext();) {
39580               var mc = i.next();
39581               mc.setId(this$1._idCounter++);
39582               this$1._index.insert(mc.getEnvelope(), mc);
39583               this$1._monoChains.add(mc);
39584             }
39585           };
39586           MCIndexNoder.prototype.computeNodes = function computeNodes (inputSegStrings) {
39587             var this$1 = this;
39588
39589             this._nodedSegStrings = inputSegStrings;
39590             for (var i = inputSegStrings.iterator(); i.hasNext();) {
39591               this$1.add(i.next());
39592             }
39593             this.intersectChains();
39594           };
39595           MCIndexNoder.prototype.intersectChains = function intersectChains () {
39596             var this$1 = this;
39597
39598             var overlapAction = new SegmentOverlapAction(this._segInt);
39599             for (var i = this._monoChains.iterator(); i.hasNext();) {
39600               var queryChain = i.next();
39601               var overlapChains = this$1._index.query(queryChain.getEnvelope());
39602               for (var j = overlapChains.iterator(); j.hasNext();) {
39603                 var testChain = j.next();
39604                 if (testChain.getId() > queryChain.getId()) {
39605                   queryChain.computeOverlaps(testChain, overlapAction);
39606                   this$1._nOverlaps++;
39607                 }
39608                 if (this$1._segInt.isDone()) { return null }
39609               }
39610             }
39611           };
39612           MCIndexNoder.prototype.interfaces_ = function interfaces_ () {
39613             return []
39614           };
39615           MCIndexNoder.prototype.getClass = function getClass () {
39616             return MCIndexNoder
39617           };
39618           staticAccessors.SegmentOverlapAction.get = function () { return SegmentOverlapAction };
39619
39620           Object.defineProperties( MCIndexNoder, staticAccessors );
39621
39622           return MCIndexNoder;
39623         }(SinglePassNoder));
39624
39625         var SegmentOverlapAction = (function (MonotoneChainOverlapAction$$1) {
39626           function SegmentOverlapAction () {
39627             MonotoneChainOverlapAction$$1.call(this);
39628             this._si = null;
39629             var si = arguments[0];
39630             this._si = si;
39631           }
39632
39633           if ( MonotoneChainOverlapAction$$1 ) { SegmentOverlapAction.__proto__ = MonotoneChainOverlapAction$$1; }
39634           SegmentOverlapAction.prototype = Object.create( MonotoneChainOverlapAction$$1 && MonotoneChainOverlapAction$$1.prototype );
39635           SegmentOverlapAction.prototype.constructor = SegmentOverlapAction;
39636           SegmentOverlapAction.prototype.overlap = function overlap () {
39637             if (arguments.length === 4) {
39638               var mc1 = arguments[0];
39639               var start1 = arguments[1];
39640               var mc2 = arguments[2];
39641               var start2 = arguments[3];
39642               var ss1 = mc1.getContext();
39643               var ss2 = mc2.getContext();
39644               this._si.processIntersections(ss1, start1, ss2, start2);
39645             } else { return MonotoneChainOverlapAction$$1.prototype.overlap.apply(this, arguments) }
39646           };
39647           SegmentOverlapAction.prototype.interfaces_ = function interfaces_ () {
39648             return []
39649           };
39650           SegmentOverlapAction.prototype.getClass = function getClass () {
39651             return SegmentOverlapAction
39652           };
39653
39654           return SegmentOverlapAction;
39655         }(MonotoneChainOverlapAction));
39656
39657         var BufferParameters = function BufferParameters () {
39658           this._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS;
39659           this._endCapStyle = BufferParameters.CAP_ROUND;
39660           this._joinStyle = BufferParameters.JOIN_ROUND;
39661           this._mitreLimit = BufferParameters.DEFAULT_MITRE_LIMIT;
39662           this._isSingleSided = false;
39663           this._simplifyFactor = BufferParameters.DEFAULT_SIMPLIFY_FACTOR;
39664
39665           if (arguments.length === 0) ; else if (arguments.length === 1) {
39666             var quadrantSegments = arguments[0];
39667             this.setQuadrantSegments(quadrantSegments);
39668           } else if (arguments.length === 2) {
39669             var quadrantSegments$1 = arguments[0];
39670             var endCapStyle = arguments[1];
39671             this.setQuadrantSegments(quadrantSegments$1);
39672             this.setEndCapStyle(endCapStyle);
39673           } else if (arguments.length === 4) {
39674             var quadrantSegments$2 = arguments[0];
39675             var endCapStyle$1 = arguments[1];
39676             var joinStyle = arguments[2];
39677             var mitreLimit = arguments[3];
39678             this.setQuadrantSegments(quadrantSegments$2);
39679             this.setEndCapStyle(endCapStyle$1);
39680             this.setJoinStyle(joinStyle);
39681             this.setMitreLimit(mitreLimit);
39682           }
39683         };
39684
39685         var staticAccessors$25 = { CAP_ROUND: { configurable: true },CAP_FLAT: { configurable: true },CAP_SQUARE: { configurable: true },JOIN_ROUND: { configurable: true },JOIN_MITRE: { configurable: true },JOIN_BEVEL: { configurable: true },DEFAULT_QUADRANT_SEGMENTS: { configurable: true },DEFAULT_MITRE_LIMIT: { configurable: true },DEFAULT_SIMPLIFY_FACTOR: { configurable: true } };
39686         BufferParameters.prototype.getEndCapStyle = function getEndCapStyle () {
39687           return this._endCapStyle
39688         };
39689         BufferParameters.prototype.isSingleSided = function isSingleSided () {
39690           return this._isSingleSided
39691         };
39692         BufferParameters.prototype.setQuadrantSegments = function setQuadrantSegments (quadSegs) {
39693           this._quadrantSegments = quadSegs;
39694           if (this._quadrantSegments === 0) { this._joinStyle = BufferParameters.JOIN_BEVEL; }
39695           if (this._quadrantSegments < 0) {
39696             this._joinStyle = BufferParameters.JOIN_MITRE;
39697             this._mitreLimit = Math.abs(this._quadrantSegments);
39698           }
39699           if (quadSegs <= 0) {
39700             this._quadrantSegments = 1;
39701           }
39702           if (this._joinStyle !== BufferParameters.JOIN_ROUND) {
39703             this._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS;
39704           }
39705         };
39706         BufferParameters.prototype.getJoinStyle = function getJoinStyle () {
39707           return this._joinStyle
39708         };
39709         BufferParameters.prototype.setJoinStyle = function setJoinStyle (joinStyle) {
39710           this._joinStyle = joinStyle;
39711         };
39712         BufferParameters.prototype.setSimplifyFactor = function setSimplifyFactor (simplifyFactor) {
39713           this._simplifyFactor = simplifyFactor < 0 ? 0 : simplifyFactor;
39714         };
39715         BufferParameters.prototype.getSimplifyFactor = function getSimplifyFactor () {
39716           return this._simplifyFactor
39717         };
39718         BufferParameters.prototype.getQuadrantSegments = function getQuadrantSegments () {
39719           return this._quadrantSegments
39720         };
39721         BufferParameters.prototype.setEndCapStyle = function setEndCapStyle (endCapStyle) {
39722           this._endCapStyle = endCapStyle;
39723         };
39724         BufferParameters.prototype.getMitreLimit = function getMitreLimit () {
39725           return this._mitreLimit
39726         };
39727         BufferParameters.prototype.setMitreLimit = function setMitreLimit (mitreLimit) {
39728           this._mitreLimit = mitreLimit;
39729         };
39730         BufferParameters.prototype.setSingleSided = function setSingleSided (isSingleSided) {
39731           this._isSingleSided = isSingleSided;
39732         };
39733         BufferParameters.prototype.interfaces_ = function interfaces_ () {
39734           return []
39735         };
39736         BufferParameters.prototype.getClass = function getClass () {
39737           return BufferParameters
39738         };
39739         BufferParameters.bufferDistanceError = function bufferDistanceError (quadSegs) {
39740           var alpha = Math.PI / 2.0 / quadSegs;
39741           return 1 - Math.cos(alpha / 2.0)
39742         };
39743         staticAccessors$25.CAP_ROUND.get = function () { return 1 };
39744         staticAccessors$25.CAP_FLAT.get = function () { return 2 };
39745         staticAccessors$25.CAP_SQUARE.get = function () { return 3 };
39746         staticAccessors$25.JOIN_ROUND.get = function () { return 1 };
39747         staticAccessors$25.JOIN_MITRE.get = function () { return 2 };
39748         staticAccessors$25.JOIN_BEVEL.get = function () { return 3 };
39749         staticAccessors$25.DEFAULT_QUADRANT_SEGMENTS.get = function () { return 8 };
39750         staticAccessors$25.DEFAULT_MITRE_LIMIT.get = function () { return 5.0 };
39751         staticAccessors$25.DEFAULT_SIMPLIFY_FACTOR.get = function () { return 0.01 };
39752
39753         Object.defineProperties( BufferParameters, staticAccessors$25 );
39754
39755         var BufferInputLineSimplifier = function BufferInputLineSimplifier (inputLine) {
39756           this._distanceTol = null;
39757           this._isDeleted = null;
39758           this._angleOrientation = CGAlgorithms.COUNTERCLOCKWISE;
39759           this._inputLine = inputLine || null;
39760         };
39761
39762         var staticAccessors$26 = { INIT: { configurable: true },DELETE: { configurable: true },KEEP: { configurable: true },NUM_PTS_TO_CHECK: { configurable: true } };
39763         BufferInputLineSimplifier.prototype.isDeletable = function isDeletable (i0, i1, i2, distanceTol) {
39764           var p0 = this._inputLine[i0];
39765           var p1 = this._inputLine[i1];
39766           var p2 = this._inputLine[i2];
39767           if (!this.isConcave(p0, p1, p2)) { return false }
39768           if (!this.isShallow(p0, p1, p2, distanceTol)) { return false }
39769           return this.isShallowSampled(p0, p1, i0, i2, distanceTol)
39770         };
39771         BufferInputLineSimplifier.prototype.deleteShallowConcavities = function deleteShallowConcavities () {
39772             var this$1 = this;
39773
39774           var index = 1;
39775           // const maxIndex = this._inputLine.length - 1
39776           var midIndex = this.findNextNonDeletedIndex(index);
39777           var lastIndex = this.findNextNonDeletedIndex(midIndex);
39778           var isChanged = false;
39779           while (lastIndex < this._inputLine.length) {
39780             var isMiddleVertexDeleted = false;
39781             if (this$1.isDeletable(index, midIndex, lastIndex, this$1._distanceTol)) {
39782               this$1._isDeleted[midIndex] = BufferInputLineSimplifier.DELETE;
39783               isMiddleVertexDeleted = true;
39784               isChanged = true;
39785             }
39786             if (isMiddleVertexDeleted) { index = lastIndex; } else { index = midIndex; }
39787             midIndex = this$1.findNextNonDeletedIndex(index);
39788             lastIndex = this$1.findNextNonDeletedIndex(midIndex);
39789           }
39790           return isChanged
39791         };
39792         BufferInputLineSimplifier.prototype.isShallowConcavity = function isShallowConcavity (p0, p1, p2, distanceTol) {
39793           var orientation = CGAlgorithms.computeOrientation(p0, p1, p2);
39794           var isAngleToSimplify = orientation === this._angleOrientation;
39795           if (!isAngleToSimplify) { return false }
39796           var dist = CGAlgorithms.distancePointLine(p1, p0, p2);
39797           return dist < distanceTol
39798         };
39799         BufferInputLineSimplifier.prototype.isShallowSampled = function isShallowSampled (p0, p2, i0, i2, distanceTol) {
39800             var this$1 = this;
39801
39802           var inc = Math.trunc((i2 - i0) / BufferInputLineSimplifier.NUM_PTS_TO_CHECK);
39803           if (inc <= 0) { inc = 1; }
39804           for (var i = i0; i < i2; i += inc) {
39805             if (!this$1.isShallow(p0, p2, this$1._inputLine[i], distanceTol)) { return false }
39806           }
39807           return true
39808         };
39809         BufferInputLineSimplifier.prototype.isConcave = function isConcave (p0, p1, p2) {
39810           var orientation = CGAlgorithms.computeOrientation(p0, p1, p2);
39811           var isConcave = orientation === this._angleOrientation;
39812           return isConcave
39813         };
39814         BufferInputLineSimplifier.prototype.simplify = function simplify (distanceTol) {
39815             var this$1 = this;
39816
39817           this._distanceTol = Math.abs(distanceTol);
39818           if (distanceTol < 0) { this._angleOrientation = CGAlgorithms.CLOCKWISE; }
39819           this._isDeleted = new Array(this._inputLine.length).fill(null);
39820           var isChanged = false;
39821           do {
39822             isChanged = this$1.deleteShallowConcavities();
39823           } while (isChanged)
39824           return this.collapseLine()
39825         };
39826         BufferInputLineSimplifier.prototype.findNextNonDeletedIndex = function findNextNonDeletedIndex (index) {
39827           var next = index + 1;
39828           while (next < this._inputLine.length && this._isDeleted[next] === BufferInputLineSimplifier.DELETE) { next++; }
39829           return next
39830         };
39831         BufferInputLineSimplifier.prototype.isShallow = function isShallow (p0, p1, p2, distanceTol) {
39832           var dist = CGAlgorithms.distancePointLine(p1, p0, p2);
39833           return dist < distanceTol
39834         };
39835         BufferInputLineSimplifier.prototype.collapseLine = function collapseLine () {
39836             var this$1 = this;
39837
39838           var coordList = new CoordinateList();
39839           for (var i = 0; i < this._inputLine.length; i++) {
39840             if (this$1._isDeleted[i] !== BufferInputLineSimplifier.DELETE) { coordList.add(this$1._inputLine[i]); }
39841           }
39842           return coordList.toCoordinateArray()
39843         };
39844         BufferInputLineSimplifier.prototype.interfaces_ = function interfaces_ () {
39845           return []
39846         };
39847         BufferInputLineSimplifier.prototype.getClass = function getClass () {
39848           return BufferInputLineSimplifier
39849         };
39850         BufferInputLineSimplifier.simplify = function simplify (inputLine, distanceTol) {
39851           var simp = new BufferInputLineSimplifier(inputLine);
39852           return simp.simplify(distanceTol)
39853         };
39854         staticAccessors$26.INIT.get = function () { return 0 };
39855         staticAccessors$26.DELETE.get = function () { return 1 };
39856         staticAccessors$26.KEEP.get = function () { return 1 };
39857         staticAccessors$26.NUM_PTS_TO_CHECK.get = function () { return 10 };
39858
39859         Object.defineProperties( BufferInputLineSimplifier, staticAccessors$26 );
39860
39861         var OffsetSegmentString = function OffsetSegmentString () {
39862           this._ptList = null;
39863           this._precisionModel = null;
39864           this._minimimVertexDistance = 0.0;
39865           this._ptList = new ArrayList();
39866         };
39867
39868         var staticAccessors$28 = { COORDINATE_ARRAY_TYPE: { configurable: true } };
39869         OffsetSegmentString.prototype.getCoordinates = function getCoordinates () {
39870           var coord = this._ptList.toArray(OffsetSegmentString.COORDINATE_ARRAY_TYPE);
39871           return coord
39872         };
39873         OffsetSegmentString.prototype.setPrecisionModel = function setPrecisionModel (precisionModel) {
39874           this._precisionModel = precisionModel;
39875         };
39876         OffsetSegmentString.prototype.addPt = function addPt (pt) {
39877           var bufPt = new Coordinate(pt);
39878           this._precisionModel.makePrecise(bufPt);
39879           if (this.isRedundant(bufPt)) { return null }
39880           this._ptList.add(bufPt);
39881         };
39882         OffsetSegmentString.prototype.revere = function revere () {};
39883         OffsetSegmentString.prototype.addPts = function addPts (pt, isForward) {
39884             var this$1 = this;
39885
39886           if (isForward) {
39887             for (var i = 0; i < pt.length; i++) {
39888               this$1.addPt(pt[i]);
39889             }
39890           } else {
39891             for (var i$1 = pt.length - 1; i$1 >= 0; i$1--) {
39892               this$1.addPt(pt[i$1]);
39893             }
39894           }
39895         };
39896         OffsetSegmentString.prototype.isRedundant = function isRedundant (pt) {
39897           if (this._ptList.size() < 1) { return false }
39898           var lastPt = this._ptList.get(this._ptList.size() - 1);
39899           var ptDist = pt.distance(lastPt);
39900           if (ptDist < this._minimimVertexDistance) { return true }
39901           return false
39902         };
39903         OffsetSegmentString.prototype.toString = function toString () {
39904           var fact = new GeometryFactory();
39905           var line = fact.createLineString(this.getCoordinates());
39906           return line.toString()
39907         };
39908         OffsetSegmentString.prototype.closeRing = function closeRing () {
39909           if (this._ptList.size() < 1) { return null }
39910           var startPt = new Coordinate(this._ptList.get(0));
39911           var lastPt = this._ptList.get(this._ptList.size() - 1);
39912           // const last2Pt = null
39913           // if (this._ptList.size() >= 2) last2Pt = this._ptList.get(this._ptList.size() - 2)
39914           if (startPt.equals(lastPt)) { return null }
39915           this._ptList.add(startPt);
39916         };
39917         OffsetSegmentString.prototype.setMinimumVertexDistance = function setMinimumVertexDistance (minimimVertexDistance) {
39918           this._minimimVertexDistance = minimimVertexDistance;
39919         };
39920         OffsetSegmentString.prototype.interfaces_ = function interfaces_ () {
39921           return []
39922         };
39923         OffsetSegmentString.prototype.getClass = function getClass () {
39924           return OffsetSegmentString
39925         };
39926         staticAccessors$28.COORDINATE_ARRAY_TYPE.get = function () { return new Array(0).fill(null) };
39927
39928         Object.defineProperties( OffsetSegmentString, staticAccessors$28 );
39929
39930         var Angle = function Angle () {};
39931
39932         var staticAccessors$29 = { PI_TIMES_2: { configurable: true },PI_OVER_2: { configurable: true },PI_OVER_4: { configurable: true },COUNTERCLOCKWISE: { configurable: true },CLOCKWISE: { configurable: true },NONE: { configurable: true } };
39933
39934         Angle.prototype.interfaces_ = function interfaces_ () {
39935           return []
39936         };
39937         Angle.prototype.getClass = function getClass () {
39938           return Angle
39939         };
39940         Angle.toDegrees = function toDegrees (radians) {
39941           return radians * 180 / Math.PI
39942         };
39943         Angle.normalize = function normalize (angle) {
39944           while (angle > Math.PI) { angle -= Angle.PI_TIMES_2; }
39945           while (angle <= -Math.PI) { angle += Angle.PI_TIMES_2; }
39946           return angle
39947         };
39948         Angle.angle = function angle () {
39949           if (arguments.length === 1) {
39950             var p = arguments[0];
39951             return Math.atan2(p.y, p.x)
39952           } else if (arguments.length === 2) {
39953             var p0 = arguments[0];
39954             var p1 = arguments[1];
39955             var dx = p1.x - p0.x;
39956             var dy = p1.y - p0.y;
39957             return Math.atan2(dy, dx)
39958           }
39959         };
39960         Angle.isAcute = function isAcute (p0, p1, p2) {
39961           var dx0 = p0.x - p1.x;
39962           var dy0 = p0.y - p1.y;
39963           var dx1 = p2.x - p1.x;
39964           var dy1 = p2.y - p1.y;
39965           var dotprod = dx0 * dx1 + dy0 * dy1;
39966           return dotprod > 0
39967         };
39968         Angle.isObtuse = function isObtuse (p0, p1, p2) {
39969           var dx0 = p0.x - p1.x;
39970           var dy0 = p0.y - p1.y;
39971           var dx1 = p2.x - p1.x;
39972           var dy1 = p2.y - p1.y;
39973           var dotprod = dx0 * dx1 + dy0 * dy1;
39974           return dotprod < 0
39975         };
39976         Angle.interiorAngle = function interiorAngle (p0, p1, p2) {
39977           var anglePrev = Angle.angle(p1, p0);
39978           var angleNext = Angle.angle(p1, p2);
39979           return Math.abs(angleNext - anglePrev)
39980         };
39981         Angle.normalizePositive = function normalizePositive (angle) {
39982           if (angle < 0.0) {
39983             while (angle < 0.0) { angle += Angle.PI_TIMES_2; }
39984             if (angle >= Angle.PI_TIMES_2) { angle = 0.0; }
39985           } else {
39986             while (angle >= Angle.PI_TIMES_2) { angle -= Angle.PI_TIMES_2; }
39987             if (angle < 0.0) { angle = 0.0; }
39988           }
39989           return angle
39990         };
39991         Angle.angleBetween = function angleBetween (tip1, tail, tip2) {
39992           var a1 = Angle.angle(tail, tip1);
39993           var a2 = Angle.angle(tail, tip2);
39994           return Angle.diff(a1, a2)
39995         };
39996         Angle.diff = function diff (ang1, ang2) {
39997           var delAngle = null;
39998           if (ang1 < ang2) {
39999             delAngle = ang2 - ang1;
40000           } else {
40001             delAngle = ang1 - ang2;
40002           }
40003           if (delAngle > Math.PI) {
40004             delAngle = 2 * Math.PI - delAngle;
40005           }
40006           return delAngle
40007         };
40008         Angle.toRadians = function toRadians (angleDegrees) {
40009           return angleDegrees * Math.PI / 180.0
40010         };
40011         Angle.getTurn = function getTurn (ang1, ang2) {
40012           var crossproduct = Math.sin(ang2 - ang1);
40013           if (crossproduct > 0) {
40014             return Angle.COUNTERCLOCKWISE
40015           }
40016           if (crossproduct < 0) {
40017             return Angle.CLOCKWISE
40018           }
40019           return Angle.NONE
40020         };
40021         Angle.angleBetweenOriented = function angleBetweenOriented (tip1, tail, tip2) {
40022           var a1 = Angle.angle(tail, tip1);
40023           var a2 = Angle.angle(tail, tip2);
40024           var angDel = a2 - a1;
40025           if (angDel <= -Math.PI) { return angDel + Angle.PI_TIMES_2 }
40026           if (angDel > Math.PI) { return angDel - Angle.PI_TIMES_2 }
40027           return angDel
40028         };
40029         staticAccessors$29.PI_TIMES_2.get = function () { return 2.0 * Math.PI };
40030         staticAccessors$29.PI_OVER_2.get = function () { return Math.PI / 2.0 };
40031         staticAccessors$29.PI_OVER_4.get = function () { return Math.PI / 4.0 };
40032         staticAccessors$29.COUNTERCLOCKWISE.get = function () { return CGAlgorithms.COUNTERCLOCKWISE };
40033         staticAccessors$29.CLOCKWISE.get = function () { return CGAlgorithms.CLOCKWISE };
40034         staticAccessors$29.NONE.get = function () { return CGAlgorithms.COLLINEAR };
40035
40036         Object.defineProperties( Angle, staticAccessors$29 );
40037
40038         var OffsetSegmentGenerator = function OffsetSegmentGenerator () {
40039           this._maxCurveSegmentError = 0.0;
40040           this._filletAngleQuantum = null;
40041           this._closingSegLengthFactor = 1;
40042           this._segList = null;
40043           this._distance = 0.0;
40044           this._precisionModel = null;
40045           this._bufParams = null;
40046           this._li = null;
40047           this._s0 = null;
40048           this._s1 = null;
40049           this._s2 = null;
40050           this._seg0 = new LineSegment();
40051           this._seg1 = new LineSegment();
40052           this._offset0 = new LineSegment();
40053           this._offset1 = new LineSegment();
40054           this._side = 0;
40055           this._hasNarrowConcaveAngle = false;
40056           var precisionModel = arguments[0];
40057           var bufParams = arguments[1];
40058           var distance = arguments[2];
40059           this._precisionModel = precisionModel;
40060           this._bufParams = bufParams;
40061           this._li = new RobustLineIntersector();
40062           this._filletAngleQuantum = Math.PI / 2.0 / bufParams.getQuadrantSegments();
40063           if (bufParams.getQuadrantSegments() >= 8 && bufParams.getJoinStyle() === BufferParameters.JOIN_ROUND) { this._closingSegLengthFactor = OffsetSegmentGenerator.MAX_CLOSING_SEG_LEN_FACTOR; }
40064           this.init(distance);
40065         };
40066
40067         var staticAccessors$27 = { OFFSET_SEGMENT_SEPARATION_FACTOR: { configurable: true },INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR: { configurable: true },CURVE_VERTEX_SNAP_DISTANCE_FACTOR: { configurable: true },MAX_CLOSING_SEG_LEN_FACTOR: { configurable: true } };
40068         OffsetSegmentGenerator.prototype.addNextSegment = function addNextSegment (p, addStartPoint) {
40069           this._s0 = this._s1;
40070           this._s1 = this._s2;
40071           this._s2 = p;
40072           this._seg0.setCoordinates(this._s0, this._s1);
40073           this.computeOffsetSegment(this._seg0, this._side, this._distance, this._offset0);
40074           this._seg1.setCoordinates(this._s1, this._s2);
40075           this.computeOffsetSegment(this._seg1, this._side, this._distance, this._offset1);
40076           if (this._s1.equals(this._s2)) { return null }
40077           var orientation = CGAlgorithms.computeOrientation(this._s0, this._s1, this._s2);
40078           var outsideTurn = (orientation === CGAlgorithms.CLOCKWISE && this._side === Position.LEFT) || (orientation === CGAlgorithms.COUNTERCLOCKWISE && this._side === Position.RIGHT);
40079           if (orientation === 0) {
40080             this.addCollinear(addStartPoint);
40081           } else if (outsideTurn) {
40082             this.addOutsideTurn(orientation, addStartPoint);
40083           } else {
40084             this.addInsideTurn(orientation, addStartPoint);
40085           }
40086         };
40087         OffsetSegmentGenerator.prototype.addLineEndCap = function addLineEndCap (p0, p1) {
40088           var seg = new LineSegment(p0, p1);
40089           var offsetL = new LineSegment();
40090           this.computeOffsetSegment(seg, Position.LEFT, this._distance, offsetL);
40091           var offsetR = new LineSegment();
40092           this.computeOffsetSegment(seg, Position.RIGHT, this._distance, offsetR);
40093           var dx = p1.x - p0.x;
40094           var dy = p1.y - p0.y;
40095           var angle = Math.atan2(dy, dx);
40096           switch (this._bufParams.getEndCapStyle()) {
40097             case BufferParameters.CAP_ROUND:
40098               this._segList.addPt(offsetL.p1);
40099               this.addFilletArc(p1, angle + Math.PI / 2, angle - Math.PI / 2, CGAlgorithms.CLOCKWISE, this._distance);
40100               this._segList.addPt(offsetR.p1);
40101               break
40102             case BufferParameters.CAP_FLAT:
40103               this._segList.addPt(offsetL.p1);
40104               this._segList.addPt(offsetR.p1);
40105               break
40106             case BufferParameters.CAP_SQUARE:
40107               var squareCapSideOffset = new Coordinate();
40108               squareCapSideOffset.x = Math.abs(this._distance) * Math.cos(angle);
40109               squareCapSideOffset.y = Math.abs(this._distance) * Math.sin(angle);
40110               var squareCapLOffset = new Coordinate(offsetL.p1.x + squareCapSideOffset.x, offsetL.p1.y + squareCapSideOffset.y);
40111               var squareCapROffset = new Coordinate(offsetR.p1.x + squareCapSideOffset.x, offsetR.p1.y + squareCapSideOffset.y);
40112               this._segList.addPt(squareCapLOffset);
40113               this._segList.addPt(squareCapROffset);
40114               break
40115           }
40116         };
40117         OffsetSegmentGenerator.prototype.getCoordinates = function getCoordinates () {
40118           var pts = this._segList.getCoordinates();
40119           return pts
40120         };
40121         OffsetSegmentGenerator.prototype.addMitreJoin = function addMitreJoin (p, offset0, offset1, distance) {
40122           var isMitreWithinLimit = true;
40123           var intPt = null;
40124           try {
40125             intPt = HCoordinate.intersection(offset0.p0, offset0.p1, offset1.p0, offset1.p1);
40126             var mitreRatio = distance <= 0.0 ? 1.0 : intPt.distance(p) / Math.abs(distance);
40127             if (mitreRatio > this._bufParams.getMitreLimit()) { isMitreWithinLimit = false; }
40128           } catch (ex) {
40129             if (ex instanceof NotRepresentableException) {
40130               intPt = new Coordinate(0, 0);
40131               isMitreWithinLimit = false;
40132             } else { throw ex }
40133           } finally {}
40134           if (isMitreWithinLimit) {
40135             this._segList.addPt(intPt);
40136           } else {
40137             this.addLimitedMitreJoin(offset0, offset1, distance, this._bufParams.getMitreLimit());
40138           }
40139         };
40140         OffsetSegmentGenerator.prototype.addFilletCorner = function addFilletCorner (p, p0, p1, direction, radius) {
40141           var dx0 = p0.x - p.x;
40142           var dy0 = p0.y - p.y;
40143           var startAngle = Math.atan2(dy0, dx0);
40144           var dx1 = p1.x - p.x;
40145           var dy1 = p1.y - p.y;
40146           var endAngle = Math.atan2(dy1, dx1);
40147           if (direction === CGAlgorithms.CLOCKWISE) {
40148             if (startAngle <= endAngle) { startAngle += 2.0 * Math.PI; }
40149           } else {
40150             if (startAngle >= endAngle) { startAngle -= 2.0 * Math.PI; }
40151           }
40152           this._segList.addPt(p0);
40153           this.addFilletArc(p, startAngle, endAngle, direction, radius);
40154           this._segList.addPt(p1);
40155         };
40156         OffsetSegmentGenerator.prototype.addOutsideTurn = function addOutsideTurn (orientation, addStartPoint) {
40157           if (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.OFFSET_SEGMENT_SEPARATION_FACTOR) {
40158             this._segList.addPt(this._offset0.p1);
40159             return null
40160           }
40161           if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {
40162             this.addMitreJoin(this._s1, this._offset0, this._offset1, this._distance);
40163           } else if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL) {
40164             this.addBevelJoin(this._offset0, this._offset1);
40165           } else {
40166             if (addStartPoint) { this._segList.addPt(this._offset0.p1); }
40167             this.addFilletCorner(this._s1, this._offset0.p1, this._offset1.p0, orientation, this._distance);
40168             this._segList.addPt(this._offset1.p0);
40169           }
40170         };
40171         OffsetSegmentGenerator.prototype.createSquare = function createSquare (p) {
40172           this._segList.addPt(new Coordinate(p.x + this._distance, p.y + this._distance));
40173           this._segList.addPt(new Coordinate(p.x + this._distance, p.y - this._distance));
40174           this._segList.addPt(new Coordinate(p.x - this._distance, p.y - this._distance));
40175           this._segList.addPt(new Coordinate(p.x - this._distance, p.y + this._distance));
40176           this._segList.closeRing();
40177         };
40178         OffsetSegmentGenerator.prototype.addSegments = function addSegments (pt, isForward) {
40179           this._segList.addPts(pt, isForward);
40180         };
40181         OffsetSegmentGenerator.prototype.addFirstSegment = function addFirstSegment () {
40182           this._segList.addPt(this._offset1.p0);
40183         };
40184         OffsetSegmentGenerator.prototype.addLastSegment = function addLastSegment () {
40185           this._segList.addPt(this._offset1.p1);
40186         };
40187         OffsetSegmentGenerator.prototype.initSideSegments = function initSideSegments (s1, s2, side) {
40188           this._s1 = s1;
40189           this._s2 = s2;
40190           this._side = side;
40191           this._seg1.setCoordinates(s1, s2);
40192           this.computeOffsetSegment(this._seg1, side, this._distance, this._offset1);
40193         };
40194         OffsetSegmentGenerator.prototype.addLimitedMitreJoin = function addLimitedMitreJoin (offset0, offset1, distance, mitreLimit) {
40195           var basePt = this._seg0.p1;
40196           var ang0 = Angle.angle(basePt, this._seg0.p0);
40197           // const ang1 = Angle.angle(basePt, this._seg1.p1)
40198           var angDiff = Angle.angleBetweenOriented(this._seg0.p0, basePt, this._seg1.p1);
40199           var angDiffHalf = angDiff / 2;
40200           var midAng = Angle.normalize(ang0 + angDiffHalf);
40201           var mitreMidAng = Angle.normalize(midAng + Math.PI);
40202           var mitreDist = mitreLimit * distance;
40203           var bevelDelta = mitreDist * Math.abs(Math.sin(angDiffHalf));
40204           var bevelHalfLen = distance - bevelDelta;
40205           var bevelMidX = basePt.x + mitreDist * Math.cos(mitreMidAng);
40206           var bevelMidY = basePt.y + mitreDist * Math.sin(mitreMidAng);
40207           var bevelMidPt = new Coordinate(bevelMidX, bevelMidY);
40208           var mitreMidLine = new LineSegment(basePt, bevelMidPt);
40209           var bevelEndLeft = mitreMidLine.pointAlongOffset(1.0, bevelHalfLen);
40210           var bevelEndRight = mitreMidLine.pointAlongOffset(1.0, -bevelHalfLen);
40211           if (this._side === Position.LEFT) {
40212             this._segList.addPt(bevelEndLeft);
40213             this._segList.addPt(bevelEndRight);
40214           } else {
40215             this._segList.addPt(bevelEndRight);
40216             this._segList.addPt(bevelEndLeft);
40217           }
40218         };
40219         OffsetSegmentGenerator.prototype.computeOffsetSegment = function computeOffsetSegment (seg, side, distance, offset) {
40220           var sideSign = side === Position.LEFT ? 1 : -1;
40221           var dx = seg.p1.x - seg.p0.x;
40222           var dy = seg.p1.y - seg.p0.y;
40223           var len = Math.sqrt(dx * dx + dy * dy);
40224           var ux = sideSign * distance * dx / len;
40225           var uy = sideSign * distance * dy / len;
40226           offset.p0.x = seg.p0.x - uy;
40227           offset.p0.y = seg.p0.y + ux;
40228           offset.p1.x = seg.p1.x - uy;
40229           offset.p1.y = seg.p1.y + ux;
40230         };
40231         OffsetSegmentGenerator.prototype.addFilletArc = function addFilletArc (p, startAngle, endAngle, direction, radius) {
40232             var this$1 = this;
40233
40234           var directionFactor = direction === CGAlgorithms.CLOCKWISE ? -1 : 1;
40235           var totalAngle = Math.abs(startAngle - endAngle);
40236           var nSegs = Math.trunc(totalAngle / this._filletAngleQuantum + 0.5);
40237           if (nSegs < 1) { return null }
40238           var initAngle = 0.0;
40239           var currAngleInc = totalAngle / nSegs;
40240           var currAngle = initAngle;
40241           var pt = new Coordinate();
40242           while (currAngle < totalAngle) {
40243             var angle = startAngle + directionFactor * currAngle;
40244             pt.x = p.x + radius * Math.cos(angle);
40245             pt.y = p.y + radius * Math.sin(angle);
40246             this$1._segList.addPt(pt);
40247             currAngle += currAngleInc;
40248           }
40249         };
40250         OffsetSegmentGenerator.prototype.addInsideTurn = function addInsideTurn (orientation, addStartPoint) {
40251           this._li.computeIntersection(this._offset0.p0, this._offset0.p1, this._offset1.p0, this._offset1.p1);
40252           if (this._li.hasIntersection()) {
40253             this._segList.addPt(this._li.getIntersection(0));
40254           } else {
40255             this._hasNarrowConcaveAngle = true;
40256             if (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR) {
40257               this._segList.addPt(this._offset0.p1);
40258             } else {
40259               this._segList.addPt(this._offset0.p1);
40260               if (this._closingSegLengthFactor > 0) {
40261                 var mid0 = new Coordinate((this._closingSegLengthFactor * this._offset0.p1.x + this._s1.x) / (this._closingSegLengthFactor + 1), (this._closingSegLengthFactor * this._offset0.p1.y + this._s1.y) / (this._closingSegLengthFactor + 1));
40262                 this._segList.addPt(mid0);
40263                 var mid1 = new Coordinate((this._closingSegLengthFactor * this._offset1.p0.x + this._s1.x) / (this._closingSegLengthFactor + 1), (this._closingSegLengthFactor * this._offset1.p0.y + this._s1.y) / (this._closingSegLengthFactor + 1));
40264                 this._segList.addPt(mid1);
40265               } else {
40266                 this._segList.addPt(this._s1);
40267               }
40268               this._segList.addPt(this._offset1.p0);
40269             }
40270           }
40271         };
40272         OffsetSegmentGenerator.prototype.createCircle = function createCircle (p) {
40273           var pt = new Coordinate(p.x + this._distance, p.y);
40274           this._segList.addPt(pt);
40275           this.addFilletArc(p, 0.0, 2.0 * Math.PI, -1, this._distance);
40276           this._segList.closeRing();
40277         };
40278         OffsetSegmentGenerator.prototype.addBevelJoin = function addBevelJoin (offset0, offset1) {
40279           this._segList.addPt(offset0.p1);
40280           this._segList.addPt(offset1.p0);
40281         };
40282         OffsetSegmentGenerator.prototype.init = function init (distance) {
40283           this._distance = distance;
40284           this._maxCurveSegmentError = distance * (1 - Math.cos(this._filletAngleQuantum / 2.0));
40285           this._segList = new OffsetSegmentString();
40286           this._segList.setPrecisionModel(this._precisionModel);
40287           this._segList.setMinimumVertexDistance(distance * OffsetSegmentGenerator.CURVE_VERTEX_SNAP_DISTANCE_FACTOR);
40288         };
40289         OffsetSegmentGenerator.prototype.addCollinear = function addCollinear (addStartPoint) {
40290           this._li.computeIntersection(this._s0, this._s1, this._s1, this._s2);
40291           var numInt = this._li.getIntersectionNum();
40292           if (numInt >= 2) {
40293             if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL || this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {
40294               if (addStartPoint) { this._segList.addPt(this._offset0.p1); }
40295               this._segList.addPt(this._offset1.p0);
40296             } else {
40297               this.addFilletCorner(this._s1, this._offset0.p1, this._offset1.p0, CGAlgorithms.CLOCKWISE, this._distance);
40298             }
40299           }
40300         };
40301         OffsetSegmentGenerator.prototype.closeRing = function closeRing () {
40302           this._segList.closeRing();
40303         };
40304         OffsetSegmentGenerator.prototype.hasNarrowConcaveAngle = function hasNarrowConcaveAngle () {
40305           return this._hasNarrowConcaveAngle
40306         };
40307         OffsetSegmentGenerator.prototype.interfaces_ = function interfaces_ () {
40308           return []
40309         };
40310         OffsetSegmentGenerator.prototype.getClass = function getClass () {
40311           return OffsetSegmentGenerator
40312         };
40313         staticAccessors$27.OFFSET_SEGMENT_SEPARATION_FACTOR.get = function () { return 1.0E-3 };
40314         staticAccessors$27.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR.get = function () { return 1.0E-3 };
40315         staticAccessors$27.CURVE_VERTEX_SNAP_DISTANCE_FACTOR.get = function () { return 1.0E-6 };
40316         staticAccessors$27.MAX_CLOSING_SEG_LEN_FACTOR.get = function () { return 80 };
40317
40318         Object.defineProperties( OffsetSegmentGenerator, staticAccessors$27 );
40319
40320         var OffsetCurveBuilder = function OffsetCurveBuilder () {
40321           this._distance = 0.0;
40322           this._precisionModel = null;
40323           this._bufParams = null;
40324           var precisionModel = arguments[0];
40325           var bufParams = arguments[1];
40326           this._precisionModel = precisionModel;
40327           this._bufParams = bufParams;
40328         };
40329         OffsetCurveBuilder.prototype.getOffsetCurve = function getOffsetCurve (inputPts, distance) {
40330           this._distance = distance;
40331           if (distance === 0.0) { return null }
40332           var isRightSide = distance < 0.0;
40333           var posDistance = Math.abs(distance);
40334           var segGen = this.getSegGen(posDistance);
40335           if (inputPts.length <= 1) {
40336             this.computePointCurve(inputPts[0], segGen);
40337           } else {
40338             this.computeOffsetCurve(inputPts, isRightSide, segGen);
40339           }
40340           var curvePts = segGen.getCoordinates();
40341           if (isRightSide) { CoordinateArrays.reverse(curvePts); }
40342           return curvePts
40343         };
40344         OffsetCurveBuilder.prototype.computeSingleSidedBufferCurve = function computeSingleSidedBufferCurve (inputPts, isRightSide, segGen) {
40345           var distTol = this.simplifyTolerance(this._distance);
40346           if (isRightSide) {
40347             segGen.addSegments(inputPts, true);
40348             var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);
40349             var n2 = simp2.length - 1;
40350             segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);
40351             segGen.addFirstSegment();
40352             for (var i = n2 - 2; i >= 0; i--) {
40353               segGen.addNextSegment(simp2[i], true);
40354             }
40355           } else {
40356             segGen.addSegments(inputPts, false);
40357             var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);
40358             var n1 = simp1.length - 1;
40359             segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);
40360             segGen.addFirstSegment();
40361             for (var i$1 = 2; i$1 <= n1; i$1++) {
40362               segGen.addNextSegment(simp1[i$1], true);
40363             }
40364           }
40365           segGen.addLastSegment();
40366           segGen.closeRing();
40367         };
40368         OffsetCurveBuilder.prototype.computeRingBufferCurve = function computeRingBufferCurve (inputPts, side, segGen) {
40369           var distTol = this.simplifyTolerance(this._distance);
40370           if (side === Position.RIGHT) { distTol = -distTol; }
40371           var simp = BufferInputLineSimplifier.simplify(inputPts, distTol);
40372           var n = simp.length - 1;
40373           segGen.initSideSegments(simp[n - 1], simp[0], side);
40374           for (var i = 1; i <= n; i++) {
40375             var addStartPoint = i !== 1;
40376             segGen.addNextSegment(simp[i], addStartPoint);
40377           }
40378           segGen.closeRing();
40379         };
40380         OffsetCurveBuilder.prototype.computeLineBufferCurve = function computeLineBufferCurve (inputPts, segGen) {
40381           var distTol = this.simplifyTolerance(this._distance);
40382           var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);
40383           var n1 = simp1.length - 1;
40384           segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);
40385           for (var i = 2; i <= n1; i++) {
40386             segGen.addNextSegment(simp1[i], true);
40387           }
40388           segGen.addLastSegment();
40389           segGen.addLineEndCap(simp1[n1 - 1], simp1[n1]);
40390           var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);
40391           var n2 = simp2.length - 1;
40392           segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);
40393           for (var i$1 = n2 - 2; i$1 >= 0; i$1--) {
40394             segGen.addNextSegment(simp2[i$1], true);
40395           }
40396           segGen.addLastSegment();
40397           segGen.addLineEndCap(simp2[1], simp2[0]);
40398           segGen.closeRing();
40399         };
40400         OffsetCurveBuilder.prototype.computePointCurve = function computePointCurve (pt, segGen) {
40401           switch (this._bufParams.getEndCapStyle()) {
40402             case BufferParameters.CAP_ROUND:
40403               segGen.createCircle(pt);
40404               break
40405             case BufferParameters.CAP_SQUARE:
40406               segGen.createSquare(pt);
40407               break
40408           }
40409         };
40410         OffsetCurveBuilder.prototype.getLineCurve = function getLineCurve (inputPts, distance) {
40411           this._distance = distance;
40412           if (distance < 0.0 && !this._bufParams.isSingleSided()) { return null }
40413           if (distance === 0.0) { return null }
40414           var posDistance = Math.abs(distance);
40415           var segGen = this.getSegGen(posDistance);
40416           if (inputPts.length <= 1) {
40417             this.computePointCurve(inputPts[0], segGen);
40418           } else {
40419             if (this._bufParams.isSingleSided()) {
40420               var isRightSide = distance < 0.0;
40421               this.computeSingleSidedBufferCurve(inputPts, isRightSide, segGen);
40422             } else { this.computeLineBufferCurve(inputPts, segGen); }
40423           }
40424           var lineCoord = segGen.getCoordinates();
40425           return lineCoord
40426         };
40427         OffsetCurveBuilder.prototype.getBufferParameters = function getBufferParameters () {
40428           return this._bufParams
40429         };
40430         OffsetCurveBuilder.prototype.simplifyTolerance = function simplifyTolerance (bufDistance) {
40431           return bufDistance * this._bufParams.getSimplifyFactor()
40432         };
40433         OffsetCurveBuilder.prototype.getRingCurve = function getRingCurve (inputPts, side, distance) {
40434           this._distance = distance;
40435           if (inputPts.length <= 2) { return this.getLineCurve(inputPts, distance) }
40436           if (distance === 0.0) {
40437             return OffsetCurveBuilder.copyCoordinates(inputPts)
40438           }
40439           var segGen = this.getSegGen(distance);
40440           this.computeRingBufferCurve(inputPts, side, segGen);
40441           return segGen.getCoordinates()
40442         };
40443         OffsetCurveBuilder.prototype.computeOffsetCurve = function computeOffsetCurve (inputPts, isRightSide, segGen) {
40444           var distTol = this.simplifyTolerance(this._distance);
40445           if (isRightSide) {
40446             var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);
40447             var n2 = simp2.length - 1;
40448             segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);
40449             segGen.addFirstSegment();
40450             for (var i = n2 - 2; i >= 0; i--) {
40451               segGen.addNextSegment(simp2[i], true);
40452             }
40453           } else {
40454             var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);
40455             var n1 = simp1.length - 1;
40456             segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);
40457             segGen.addFirstSegment();
40458             for (var i$1 = 2; i$1 <= n1; i$1++) {
40459               segGen.addNextSegment(simp1[i$1], true);
40460             }
40461           }
40462           segGen.addLastSegment();
40463         };
40464         OffsetCurveBuilder.prototype.getSegGen = function getSegGen (distance) {
40465           return new OffsetSegmentGenerator(this._precisionModel, this._bufParams, distance)
40466         };
40467         OffsetCurveBuilder.prototype.interfaces_ = function interfaces_ () {
40468           return []
40469         };
40470         OffsetCurveBuilder.prototype.getClass = function getClass () {
40471           return OffsetCurveBuilder
40472         };
40473         OffsetCurveBuilder.copyCoordinates = function copyCoordinates (pts) {
40474           var copy = new Array(pts.length).fill(null);
40475           for (var i = 0; i < copy.length; i++) {
40476             copy[i] = new Coordinate(pts[i]);
40477           }
40478           return copy
40479         };
40480
40481         var SubgraphDepthLocater = function SubgraphDepthLocater () {
40482           this._subgraphs = null;
40483           this._seg = new LineSegment();
40484           this._cga = new CGAlgorithms();
40485           var subgraphs = arguments[0];
40486           this._subgraphs = subgraphs;
40487         };
40488
40489         var staticAccessors$30 = { DepthSegment: { configurable: true } };
40490         SubgraphDepthLocater.prototype.findStabbedSegments = function findStabbedSegments () {
40491             var this$1 = this;
40492
40493           if (arguments.length === 1) {
40494             var stabbingRayLeftPt = arguments[0];
40495             var stabbedSegments = new ArrayList();
40496             for (var i = this._subgraphs.iterator(); i.hasNext();) {
40497               var bsg = i.next();
40498               var env = bsg.getEnvelope();
40499               if (stabbingRayLeftPt.y < env.getMinY() || stabbingRayLeftPt.y > env.getMaxY()) { continue }
40500               this$1.findStabbedSegments(stabbingRayLeftPt, bsg.getDirectedEdges(), stabbedSegments);
40501             }
40502             return stabbedSegments
40503           } else if (arguments.length === 3) {
40504             if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && arguments[1] instanceof DirectedEdge)) {
40505               var stabbingRayLeftPt$1 = arguments[0];
40506               var dirEdge = arguments[1];
40507               var stabbedSegments$1 = arguments[2];
40508               var pts = dirEdge.getEdge().getCoordinates();
40509               for (var i$1 = 0; i$1 < pts.length - 1; i$1++) {
40510                 this$1._seg.p0 = pts[i$1];
40511                 this$1._seg.p1 = pts[i$1 + 1];
40512                 if (this$1._seg.p0.y > this$1._seg.p1.y) { this$1._seg.reverse(); }
40513                 var maxx = Math.max(this$1._seg.p0.x, this$1._seg.p1.x);
40514                 if (maxx < stabbingRayLeftPt$1.x) { continue }
40515                 if (this$1._seg.isHorizontal()) { continue }
40516                 if (stabbingRayLeftPt$1.y < this$1._seg.p0.y || stabbingRayLeftPt$1.y > this$1._seg.p1.y) { continue }
40517                 if (CGAlgorithms.computeOrientation(this$1._seg.p0, this$1._seg.p1, stabbingRayLeftPt$1) === CGAlgorithms.RIGHT) { continue }
40518                 var depth = dirEdge.getDepth(Position.LEFT);
40519                 if (!this$1._seg.p0.equals(pts[i$1])) { depth = dirEdge.getDepth(Position.RIGHT); }
40520                 var ds = new DepthSegment(this$1._seg, depth);
40521                 stabbedSegments$1.add(ds);
40522               }
40523             } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && hasInterface(arguments[1], List))) {
40524               var stabbingRayLeftPt$2 = arguments[0];
40525               var dirEdges = arguments[1];
40526               var stabbedSegments$2 = arguments[2];
40527               for (var i$2 = dirEdges.iterator(); i$2.hasNext();) {
40528                 var de = i$2.next();
40529                 if (!de.isForward()) { continue }
40530                 this$1.findStabbedSegments(stabbingRayLeftPt$2, de, stabbedSegments$2);
40531               }
40532             }
40533           }
40534         };
40535         SubgraphDepthLocater.prototype.getDepth = function getDepth (p) {
40536           var stabbedSegments = this.findStabbedSegments(p);
40537           if (stabbedSegments.size() === 0) { return 0 }
40538           var ds = Collections.min(stabbedSegments);
40539           return ds._leftDepth
40540         };
40541         SubgraphDepthLocater.prototype.interfaces_ = function interfaces_ () {
40542           return []
40543         };
40544         SubgraphDepthLocater.prototype.getClass = function getClass () {
40545           return SubgraphDepthLocater
40546         };
40547         staticAccessors$30.DepthSegment.get = function () { return DepthSegment };
40548
40549         Object.defineProperties( SubgraphDepthLocater, staticAccessors$30 );
40550
40551         var DepthSegment = function DepthSegment () {
40552           this._upwardSeg = null;
40553           this._leftDepth = null;
40554           var seg = arguments[0];
40555           var depth = arguments[1];
40556           this._upwardSeg = new LineSegment(seg);
40557           this._leftDepth = depth;
40558         };
40559         DepthSegment.prototype.compareTo = function compareTo (obj) {
40560           var other = obj;
40561           if (this._upwardSeg.minX() >= other._upwardSeg.maxX()) { return 1 }
40562           if (this._upwardSeg.maxX() <= other._upwardSeg.minX()) { return -1 }
40563           var orientIndex = this._upwardSeg.orientationIndex(other._upwardSeg);
40564           if (orientIndex !== 0) { return orientIndex }
40565           orientIndex = -1 * other._upwardSeg.orientationIndex(this._upwardSeg);
40566           if (orientIndex !== 0) { return orientIndex }
40567           return this._upwardSeg.compareTo(other._upwardSeg)
40568         };
40569         DepthSegment.prototype.compareX = function compareX (seg0, seg1) {
40570           var compare0 = seg0.p0.compareTo(seg1.p0);
40571           if (compare0 !== 0) { return compare0 }
40572           return seg0.p1.compareTo(seg1.p1)
40573         };
40574         DepthSegment.prototype.toString = function toString () {
40575           return this._upwardSeg.toString()
40576         };
40577         DepthSegment.prototype.interfaces_ = function interfaces_ () {
40578           return [Comparable]
40579         };
40580         DepthSegment.prototype.getClass = function getClass () {
40581           return DepthSegment
40582         };
40583
40584         var Triangle = function Triangle (p0, p1, p2) {
40585           this.p0 = p0 || null;
40586           this.p1 = p1 || null;
40587           this.p2 = p2 || null;
40588         };
40589         Triangle.prototype.area = function area () {
40590           return Triangle.area(this.p0, this.p1, this.p2)
40591         };
40592         Triangle.prototype.signedArea = function signedArea () {
40593           return Triangle.signedArea(this.p0, this.p1, this.p2)
40594         };
40595         Triangle.prototype.interpolateZ = function interpolateZ (p) {
40596           if (p === null) { throw new IllegalArgumentException('Supplied point is null.') }
40597           return Triangle.interpolateZ(p, this.p0, this.p1, this.p2)
40598         };
40599         Triangle.prototype.longestSideLength = function longestSideLength () {
40600           return Triangle.longestSideLength(this.p0, this.p1, this.p2)
40601         };
40602         Triangle.prototype.isAcute = function isAcute () {
40603           return Triangle.isAcute(this.p0, this.p1, this.p2)
40604         };
40605         Triangle.prototype.circumcentre = function circumcentre () {
40606           return Triangle.circumcentre(this.p0, this.p1, this.p2)
40607         };
40608         Triangle.prototype.area3D = function area3D () {
40609           return Triangle.area3D(this.p0, this.p1, this.p2)
40610         };
40611         Triangle.prototype.centroid = function centroid () {
40612           return Triangle.centroid(this.p0, this.p1, this.p2)
40613         };
40614         Triangle.prototype.inCentre = function inCentre () {
40615           return Triangle.inCentre(this.p0, this.p1, this.p2)
40616         };
40617         Triangle.prototype.interfaces_ = function interfaces_ () {
40618           return []
40619         };
40620         Triangle.prototype.getClass = function getClass () {
40621           return Triangle
40622         };
40623         Triangle.area = function area (a, b, c) {
40624           return Math.abs(((c.x - a.x) * (b.y - a.y) - (b.x - a.x) * (c.y - a.y)) / 2)
40625         };
40626         Triangle.signedArea = function signedArea (a, b, c) {
40627           return ((c.x - a.x) * (b.y - a.y) - (b.x - a.x) * (c.y - a.y)) / 2
40628         };
40629         Triangle.det = function det (m00, m01, m10, m11) {
40630           return m00 * m11 - m01 * m10
40631         };
40632         Triangle.interpolateZ = function interpolateZ (p, v0, v1, v2) {
40633           var x0 = v0.x;
40634           var y0 = v0.y;
40635           var a = v1.x - x0;
40636           var b = v2.x - x0;
40637           var c = v1.y - y0;
40638           var d = v2.y - y0;
40639           var det = a * d - b * c;
40640           var dx = p.x - x0;
40641           var dy = p.y - y0;
40642           var t = (d * dx - b * dy) / det;
40643           var u = (-c * dx + a * dy) / det;
40644           var z = v0.z + t * (v1.z - v0.z) + u * (v2.z - v0.z);
40645           return z
40646         };
40647         Triangle.longestSideLength = function longestSideLength (a, b, c) {
40648           var lenAB = a.distance(b);
40649           var lenBC = b.distance(c);
40650           var lenCA = c.distance(a);
40651           var maxLen = lenAB;
40652           if (lenBC > maxLen) { maxLen = lenBC; }
40653           if (lenCA > maxLen) { maxLen = lenCA; }
40654           return maxLen
40655         };
40656         Triangle.isAcute = function isAcute (a, b, c) {
40657           if (!Angle.isAcute(a, b, c)) { return false }
40658           if (!Angle.isAcute(b, c, a)) { return false }
40659           if (!Angle.isAcute(c, a, b)) { return false }
40660           return true
40661         };
40662         Triangle.circumcentre = function circumcentre (a, b, c) {
40663           var cx = c.x;
40664           var cy = c.y;
40665           var ax = a.x - cx;
40666           var ay = a.y - cy;
40667           var bx = b.x - cx;
40668           var by = b.y - cy;
40669           var denom = 2 * Triangle.det(ax, ay, bx, by);
40670           var numx = Triangle.det(ay, ax * ax + ay * ay, by, bx * bx + by * by);
40671           var numy = Triangle.det(ax, ax * ax + ay * ay, bx, bx * bx + by * by);
40672           var ccx = cx - numx / denom;
40673           var ccy = cy + numy / denom;
40674           return new Coordinate(ccx, ccy)
40675         };
40676         Triangle.perpendicularBisector = function perpendicularBisector (a, b) {
40677           var dx = b.x - a.x;
40678           var dy = b.y - a.y;
40679           var l1 = new HCoordinate(a.x + dx / 2.0, a.y + dy / 2.0, 1.0);
40680           var l2 = new HCoordinate(a.x - dy + dx / 2.0, a.y + dx + dy / 2.0, 1.0);
40681           return new HCoordinate(l1, l2)
40682         };
40683         Triangle.angleBisector = function angleBisector (a, b, c) {
40684           var len0 = b.distance(a);
40685           var len2 = b.distance(c);
40686           var frac = len0 / (len0 + len2);
40687           var dx = c.x - a.x;
40688           var dy = c.y - a.y;
40689           var splitPt = new Coordinate(a.x + frac * dx, a.y + frac * dy);
40690           return splitPt
40691         };
40692         Triangle.area3D = function area3D (a, b, c) {
40693           var ux = b.x - a.x;
40694           var uy = b.y - a.y;
40695           var uz = b.z - a.z;
40696           var vx = c.x - a.x;
40697           var vy = c.y - a.y;
40698           var vz = c.z - a.z;
40699           var crossx = uy * vz - uz * vy;
40700           var crossy = uz * vx - ux * vz;
40701           var crossz = ux * vy - uy * vx;
40702           var absSq = crossx * crossx + crossy * crossy + crossz * crossz;
40703           var area3D = Math.sqrt(absSq) / 2;
40704           return area3D
40705         };
40706         Triangle.centroid = function centroid (a, b, c) {
40707           var x = (a.x + b.x + c.x) / 3;
40708           var y = (a.y + b.y + c.y) / 3;
40709           return new Coordinate(x, y)
40710         };
40711         Triangle.inCentre = function inCentre (a, b, c) {
40712           var len0 = b.distance(c);
40713           var len1 = a.distance(c);
40714           var len2 = a.distance(b);
40715           var circum = len0 + len1 + len2;
40716           var inCentreX = (len0 * a.x + len1 * b.x + len2 * c.x) / circum;
40717           var inCentreY = (len0 * a.y + len1 * b.y + len2 * c.y) / circum;
40718           return new Coordinate(inCentreX, inCentreY)
40719         };
40720
40721         var OffsetCurveSetBuilder = function OffsetCurveSetBuilder () {
40722           this._inputGeom = null;
40723           this._distance = null;
40724           this._curveBuilder = null;
40725           this._curveList = new ArrayList();
40726           var inputGeom = arguments[0];
40727           var distance = arguments[1];
40728           var curveBuilder = arguments[2];
40729           this._inputGeom = inputGeom;
40730           this._distance = distance;
40731           this._curveBuilder = curveBuilder;
40732         };
40733         OffsetCurveSetBuilder.prototype.addPoint = function addPoint (p) {
40734           if (this._distance <= 0.0) { return null }
40735           var coord = p.getCoordinates();
40736           var curve = this._curveBuilder.getLineCurve(coord, this._distance);
40737           this.addCurve(curve, Location.EXTERIOR, Location.INTERIOR);
40738         };
40739         OffsetCurveSetBuilder.prototype.addPolygon = function addPolygon (p) {
40740             var this$1 = this;
40741
40742           var offsetDistance = this._distance;
40743           var offsetSide = Position.LEFT;
40744           if (this._distance < 0.0) {
40745             offsetDistance = -this._distance;
40746             offsetSide = Position.RIGHT;
40747           }
40748           var shell = p.getExteriorRing();
40749           var shellCoord = CoordinateArrays.removeRepeatedPoints(shell.getCoordinates());
40750           if (this._distance < 0.0 && this.isErodedCompletely(shell, this._distance)) { return null }
40751           if (this._distance <= 0.0 && shellCoord.length < 3) { return null }
40752           this.addPolygonRing(shellCoord, offsetDistance, offsetSide, Location.EXTERIOR, Location.INTERIOR);
40753           for (var i = 0; i < p.getNumInteriorRing(); i++) {
40754             var hole = p.getInteriorRingN(i);
40755             var holeCoord = CoordinateArrays.removeRepeatedPoints(hole.getCoordinates());
40756             if (this$1._distance > 0.0 && this$1.isErodedCompletely(hole, -this$1._distance)) { continue }
40757             this$1.addPolygonRing(holeCoord, offsetDistance, Position.opposite(offsetSide), Location.INTERIOR, Location.EXTERIOR);
40758           }
40759         };
40760         OffsetCurveSetBuilder.prototype.isTriangleErodedCompletely = function isTriangleErodedCompletely (triangleCoord, bufferDistance) {
40761           var tri = new Triangle(triangleCoord[0], triangleCoord[1], triangleCoord[2]);
40762           var inCentre = tri.inCentre();
40763           var distToCentre = CGAlgorithms.distancePointLine(inCentre, tri.p0, tri.p1);
40764           return distToCentre < Math.abs(bufferDistance)
40765         };
40766         OffsetCurveSetBuilder.prototype.addLineString = function addLineString (line) {
40767           if (this._distance <= 0.0 && !this._curveBuilder.getBufferParameters().isSingleSided()) { return null }
40768           var coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates());
40769           var curve = this._curveBuilder.getLineCurve(coord, this._distance);
40770           this.addCurve(curve, Location.EXTERIOR, Location.INTERIOR);
40771         };
40772         OffsetCurveSetBuilder.prototype.addCurve = function addCurve (coord, leftLoc, rightLoc) {
40773           if (coord === null || coord.length < 2) { return null }
40774           var e = new NodedSegmentString(coord, new Label(0, Location.BOUNDARY, leftLoc, rightLoc));
40775           this._curveList.add(e);
40776         };
40777         OffsetCurveSetBuilder.prototype.getCurves = function getCurves () {
40778           this.add(this._inputGeom);
40779           return this._curveList
40780         };
40781         OffsetCurveSetBuilder.prototype.addPolygonRing = function addPolygonRing (coord, offsetDistance, side, cwLeftLoc, cwRightLoc) {
40782           if (offsetDistance === 0.0 && coord.length < LinearRing.MINIMUM_VALID_SIZE) { return null }
40783           var leftLoc = cwLeftLoc;
40784           var rightLoc = cwRightLoc;
40785           if (coord.length >= LinearRing.MINIMUM_VALID_SIZE && CGAlgorithms.isCCW(coord)) {
40786             leftLoc = cwRightLoc;
40787             rightLoc = cwLeftLoc;
40788             side = Position.opposite(side);
40789           }
40790           var curve = this._curveBuilder.getRingCurve(coord, side, offsetDistance);
40791           this.addCurve(curve, leftLoc, rightLoc);
40792         };
40793         OffsetCurveSetBuilder.prototype.add = function add (g) {
40794           if (g.isEmpty()) { return null }
40795           if (g instanceof Polygon) { this.addPolygon(g); }
40796           else if (g instanceof LineString) { this.addLineString(g); }
40797           else if (g instanceof Point) { this.addPoint(g); }
40798           else if (g instanceof MultiPoint) { this.addCollection(g); }
40799           else if (g instanceof MultiLineString) { this.addCollection(g); }
40800           else if (g instanceof MultiPolygon) { this.addCollection(g); }
40801           else if (g instanceof GeometryCollection) { this.addCollection(g); }
40802           // else throw new UnsupportedOperationException(g.getClass().getName())
40803         };
40804         OffsetCurveSetBuilder.prototype.isErodedCompletely = function isErodedCompletely (ring, bufferDistance) {
40805           var ringCoord = ring.getCoordinates();
40806           // const minDiam = 0.0
40807           if (ringCoord.length < 4) { return bufferDistance < 0 }
40808           if (ringCoord.length === 4) { return this.isTriangleErodedCompletely(ringCoord, bufferDistance) }
40809           var env = ring.getEnvelopeInternal();
40810           var envMinDimension = Math.min(env.getHeight(), env.getWidth());
40811           if (bufferDistance < 0.0 && 2 * Math.abs(bufferDistance) > envMinDimension) { return true }
40812           return false
40813         };
40814         OffsetCurveSetBuilder.prototype.addCollection = function addCollection (gc) {
40815             var this$1 = this;
40816
40817           for (var i = 0; i < gc.getNumGeometries(); i++) {
40818             var g = gc.getGeometryN(i);
40819             this$1.add(g);
40820           }
40821         };
40822         OffsetCurveSetBuilder.prototype.interfaces_ = function interfaces_ () {
40823           return []
40824         };
40825         OffsetCurveSetBuilder.prototype.getClass = function getClass () {
40826           return OffsetCurveSetBuilder
40827         };
40828
40829         var PointOnGeometryLocator = function PointOnGeometryLocator () {};
40830
40831         PointOnGeometryLocator.prototype.locate = function locate (p) {};
40832         PointOnGeometryLocator.prototype.interfaces_ = function interfaces_ () {
40833           return []
40834         };
40835         PointOnGeometryLocator.prototype.getClass = function getClass () {
40836           return PointOnGeometryLocator
40837         };
40838
40839         var GeometryCollectionIterator = function GeometryCollectionIterator () {
40840           this._parent = null;
40841           this._atStart = null;
40842           this._max = null;
40843           this._index = null;
40844           this._subcollectionIterator = null;
40845           var parent = arguments[0];
40846           this._parent = parent;
40847           this._atStart = true;
40848           this._index = 0;
40849           this._max = parent.getNumGeometries();
40850         };
40851         GeometryCollectionIterator.prototype.next = function next () {
40852           if (this._atStart) {
40853             this._atStart = false;
40854             if (GeometryCollectionIterator.isAtomic(this._parent)) { this._index++; }
40855             return this._parent
40856           }
40857           if (this._subcollectionIterator !== null) {
40858             if (this._subcollectionIterator.hasNext()) {
40859               return this._subcollectionIterator.next()
40860             } else {
40861               this._subcollectionIterator = null;
40862             }
40863           }
40864           if (this._index >= this._max) {
40865             throw new NoSuchElementException()
40866           }
40867           var obj = this._parent.getGeometryN(this._index++);
40868           if (obj instanceof GeometryCollection) {
40869             this._subcollectionIterator = new GeometryCollectionIterator(obj);
40870             return this._subcollectionIterator.next()
40871           }
40872           return obj
40873         };
40874         GeometryCollectionIterator.prototype.remove = function remove () {
40875           throw new Error(this.getClass().getName())
40876         };
40877         GeometryCollectionIterator.prototype.hasNext = function hasNext () {
40878           if (this._atStart) {
40879             return true
40880           }
40881           if (this._subcollectionIterator !== null) {
40882             if (this._subcollectionIterator.hasNext()) {
40883               return true
40884             }
40885             this._subcollectionIterator = null;
40886           }
40887           if (this._index >= this._max) {
40888             return false
40889           }
40890           return true
40891         };
40892         GeometryCollectionIterator.prototype.interfaces_ = function interfaces_ () {
40893           return [Iterator$1]
40894         };
40895         GeometryCollectionIterator.prototype.getClass = function getClass () {
40896           return GeometryCollectionIterator
40897         };
40898         GeometryCollectionIterator.isAtomic = function isAtomic (geom) {
40899           return !(geom instanceof GeometryCollection)
40900         };
40901
40902         var SimplePointInAreaLocator = function SimplePointInAreaLocator () {
40903           this._geom = null;
40904           var geom = arguments[0];
40905           this._geom = geom;
40906         };
40907         SimplePointInAreaLocator.prototype.locate = function locate (p) {
40908           return SimplePointInAreaLocator.locate(p, this._geom)
40909         };
40910         SimplePointInAreaLocator.prototype.interfaces_ = function interfaces_ () {
40911           return [PointOnGeometryLocator]
40912         };
40913         SimplePointInAreaLocator.prototype.getClass = function getClass () {
40914           return SimplePointInAreaLocator
40915         };
40916         SimplePointInAreaLocator.isPointInRing = function isPointInRing (p, ring) {
40917           if (!ring.getEnvelopeInternal().intersects(p)) { return false }
40918           return CGAlgorithms.isPointInRing(p, ring.getCoordinates())
40919         };
40920         SimplePointInAreaLocator.containsPointInPolygon = function containsPointInPolygon (p, poly) {
40921           if (poly.isEmpty()) { return false }
40922           var shell = poly.getExteriorRing();
40923           if (!SimplePointInAreaLocator.isPointInRing(p, shell)) { return false }
40924           for (var i = 0; i < poly.getNumInteriorRing(); i++) {
40925             var hole = poly.getInteriorRingN(i);
40926             if (SimplePointInAreaLocator.isPointInRing(p, hole)) { return false }
40927           }
40928           return true
40929         };
40930         SimplePointInAreaLocator.containsPoint = function containsPoint (p, geom) {
40931           if (geom instanceof Polygon) {
40932             return SimplePointInAreaLocator.containsPointInPolygon(p, geom)
40933           } else if (geom instanceof GeometryCollection) {
40934             var geomi = new GeometryCollectionIterator(geom);
40935             while (geomi.hasNext()) {
40936               var g2 = geomi.next();
40937               if (g2 !== geom) { if (SimplePointInAreaLocator.containsPoint(p, g2)) { return true } }
40938             }
40939           }
40940           return false
40941         };
40942         SimplePointInAreaLocator.locate = function locate (p, geom) {
40943           if (geom.isEmpty()) { return Location.EXTERIOR }
40944           if (SimplePointInAreaLocator.containsPoint(p, geom)) { return Location.INTERIOR }
40945           return Location.EXTERIOR
40946         };
40947
40948         var EdgeEndStar = function EdgeEndStar () {
40949           this._edgeMap = new TreeMap();
40950           this._edgeList = null;
40951           this._ptInAreaLocation = [Location.NONE, Location.NONE];
40952         };
40953         EdgeEndStar.prototype.getNextCW = function getNextCW (ee) {
40954           this.getEdges();
40955           var i = this._edgeList.indexOf(ee);
40956           var iNextCW = i - 1;
40957           if (i === 0) { iNextCW = this._edgeList.size() - 1; }
40958           return this._edgeList.get(iNextCW)
40959         };
40960         EdgeEndStar.prototype.propagateSideLabels = function propagateSideLabels (geomIndex) {
40961           var startLoc = Location.NONE;
40962           for (var it = this.iterator(); it.hasNext();) {
40963             var e = it.next();
40964             var label = e.getLabel();
40965             if (label.isArea(geomIndex) && label.getLocation(geomIndex, Position.LEFT) !== Location.NONE) { startLoc = label.getLocation(geomIndex, Position.LEFT); }
40966           }
40967           if (startLoc === Location.NONE) { return null }
40968           var currLoc = startLoc;
40969           for (var it$1 = this.iterator(); it$1.hasNext();) {
40970             var e$1 = it$1.next();
40971             var label$1 = e$1.getLabel();
40972             if (label$1.getLocation(geomIndex, Position.ON) === Location.NONE) { label$1.setLocation(geomIndex, Position.ON, currLoc); }
40973             if (label$1.isArea(geomIndex)) {
40974               var leftLoc = label$1.getLocation(geomIndex, Position.LEFT);
40975               var rightLoc = label$1.getLocation(geomIndex, Position.RIGHT);
40976               if (rightLoc !== Location.NONE) {
40977                 if (rightLoc !== currLoc) { throw new TopologyException('side location conflict', e$1.getCoordinate()) }
40978                 if (leftLoc === Location.NONE) {
40979                   Assert.shouldNeverReachHere('found single null side (at ' + e$1.getCoordinate() + ')');
40980                 }
40981                 currLoc = leftLoc;
40982               } else {
40983                 Assert.isTrue(label$1.getLocation(geomIndex, Position.LEFT) === Location.NONE, 'found single null side');
40984                 label$1.setLocation(geomIndex, Position.RIGHT, currLoc);
40985                 label$1.setLocation(geomIndex, Position.LEFT, currLoc);
40986               }
40987             }
40988           }
40989         };
40990         EdgeEndStar.prototype.getCoordinate = function getCoordinate () {
40991           var it = this.iterator();
40992           if (!it.hasNext()) { return null }
40993           var e = it.next();
40994           return e.getCoordinate()
40995         };
40996         EdgeEndStar.prototype.print = function print (out) {
40997           System.out.println('EdgeEndStar:   ' + this.getCoordinate());
40998           for (var it = this.iterator(); it.hasNext();) {
40999             var e = it.next();
41000             e.print(out);
41001           }
41002         };
41003         EdgeEndStar.prototype.isAreaLabelsConsistent = function isAreaLabelsConsistent (geomGraph) {
41004           this.computeEdgeEndLabels(geomGraph.getBoundaryNodeRule());
41005           return this.checkAreaLabelsConsistent(0)
41006         };
41007         EdgeEndStar.prototype.checkAreaLabelsConsistent = function checkAreaLabelsConsistent (geomIndex) {
41008           var edges = this.getEdges();
41009           if (edges.size() <= 0) { return true }
41010           var lastEdgeIndex = edges.size() - 1;
41011           var startLabel = edges.get(lastEdgeIndex).getLabel();
41012           var startLoc = startLabel.getLocation(geomIndex, Position.LEFT);
41013           Assert.isTrue(startLoc !== Location.NONE, 'Found unlabelled area edge');
41014           var currLoc = startLoc;
41015           for (var it = this.iterator(); it.hasNext();) {
41016             var e = it.next();
41017             var label = e.getLabel();
41018             Assert.isTrue(label.isArea(geomIndex), 'Found non-area edge');
41019             var leftLoc = label.getLocation(geomIndex, Position.LEFT);
41020             var rightLoc = label.getLocation(geomIndex, Position.RIGHT);
41021             if (leftLoc === rightLoc) {
41022               return false
41023             }
41024             if (rightLoc !== currLoc) {
41025               return false
41026             }
41027             currLoc = leftLoc;
41028           }
41029           return true
41030         };
41031         EdgeEndStar.prototype.findIndex = function findIndex (eSearch) {
41032             var this$1 = this;
41033
41034           this.iterator();
41035           for (var i = 0; i < this._edgeList.size(); i++) {
41036             var e = this$1._edgeList.get(i);
41037             if (e === eSearch) { return i }
41038           }
41039           return -1
41040         };
41041         EdgeEndStar.prototype.iterator = function iterator () {
41042           return this.getEdges().iterator()
41043         };
41044         EdgeEndStar.prototype.getEdges = function getEdges () {
41045           if (this._edgeList === null) {
41046             this._edgeList = new ArrayList(this._edgeMap.values());
41047           }
41048           return this._edgeList
41049         };
41050         EdgeEndStar.prototype.getLocation = function getLocation (geomIndex, p, geom) {
41051           if (this._ptInAreaLocation[geomIndex] === Location.NONE) {
41052             this._ptInAreaLocation[geomIndex] = SimplePointInAreaLocator.locate(p, geom[geomIndex].getGeometry());
41053           }
41054           return this._ptInAreaLocation[geomIndex]
41055         };
41056         EdgeEndStar.prototype.toString = function toString () {
41057           var buf = new StringBuffer();
41058           buf.append('EdgeEndStar:   ' + this.getCoordinate());
41059           buf.append('\n');
41060           for (var it = this.iterator(); it.hasNext();) {
41061             var e = it.next();
41062             buf.append(e);
41063             buf.append('\n');
41064           }
41065           return buf.toString()
41066         };
41067         EdgeEndStar.prototype.computeEdgeEndLabels = function computeEdgeEndLabels (boundaryNodeRule) {
41068           for (var it = this.iterator(); it.hasNext();) {
41069             var ee = it.next();
41070             ee.computeLabel(boundaryNodeRule);
41071           }
41072         };
41073         EdgeEndStar.prototype.computeLabelling = function computeLabelling (geomGraph) {
41074             var this$1 = this;
41075
41076           this.computeEdgeEndLabels(geomGraph[0].getBoundaryNodeRule());
41077           this.propagateSideLabels(0);
41078           this.propagateSideLabels(1);
41079           var hasDimensionalCollapseEdge = [false, false];
41080           for (var it = this.iterator(); it.hasNext();) {
41081             var e = it.next();
41082             var label = e.getLabel();
41083             for (var geomi = 0; geomi < 2; geomi++) {
41084               if (label.isLine(geomi) && label.getLocation(geomi) === Location.BOUNDARY) { hasDimensionalCollapseEdge[geomi] = true; }
41085             }
41086           }
41087           for (var it$1 = this.iterator(); it$1.hasNext();) {
41088             var e$1 = it$1.next();
41089             var label$1 = e$1.getLabel();
41090             for (var geomi$1 = 0; geomi$1 < 2; geomi$1++) {
41091               if (label$1.isAnyNull(geomi$1)) {
41092                 var loc = Location.NONE;
41093                 if (hasDimensionalCollapseEdge[geomi$1]) {
41094                   loc = Location.EXTERIOR;
41095                 } else {
41096                   var p = e$1.getCoordinate();
41097                   loc = this$1.getLocation(geomi$1, p, geomGraph);
41098                 }
41099                 label$1.setAllLocationsIfNull(geomi$1, loc);
41100               }
41101             }
41102           }
41103         };
41104         EdgeEndStar.prototype.getDegree = function getDegree () {
41105           return this._edgeMap.size()
41106         };
41107         EdgeEndStar.prototype.insertEdgeEnd = function insertEdgeEnd (e, obj) {
41108           this._edgeMap.put(e, obj);
41109           this._edgeList = null;
41110         };
41111         EdgeEndStar.prototype.interfaces_ = function interfaces_ () {
41112           return []
41113         };
41114         EdgeEndStar.prototype.getClass = function getClass () {
41115           return EdgeEndStar
41116         };
41117
41118         var DirectedEdgeStar = (function (EdgeEndStar$$1) {
41119           function DirectedEdgeStar () {
41120             EdgeEndStar$$1.call(this);
41121             this._resultAreaEdgeList = null;
41122             this._label = null;
41123             this._SCANNING_FOR_INCOMING = 1;
41124             this._LINKING_TO_OUTGOING = 2;
41125           }
41126
41127           if ( EdgeEndStar$$1 ) { DirectedEdgeStar.__proto__ = EdgeEndStar$$1; }
41128           DirectedEdgeStar.prototype = Object.create( EdgeEndStar$$1 && EdgeEndStar$$1.prototype );
41129           DirectedEdgeStar.prototype.constructor = DirectedEdgeStar;
41130           DirectedEdgeStar.prototype.linkResultDirectedEdges = function linkResultDirectedEdges () {
41131             var this$1 = this;
41132
41133             this.getResultAreaEdges();
41134             var firstOut = null;
41135             var incoming = null;
41136             var state = this._SCANNING_FOR_INCOMING;
41137             for (var i = 0; i < this._resultAreaEdgeList.size(); i++) {
41138               var nextOut = this$1._resultAreaEdgeList.get(i);
41139               var nextIn = nextOut.getSym();
41140               if (!nextOut.getLabel().isArea()) { continue }
41141               if (firstOut === null && nextOut.isInResult()) { firstOut = nextOut; }
41142               switch (state) {
41143                 case this$1._SCANNING_FOR_INCOMING:
41144                   if (!nextIn.isInResult()) { continue }
41145                   incoming = nextIn;
41146                   state = this$1._LINKING_TO_OUTGOING;
41147                   break
41148                 case this$1._LINKING_TO_OUTGOING:
41149                   if (!nextOut.isInResult()) { continue }
41150                   incoming.setNext(nextOut);
41151                   state = this$1._SCANNING_FOR_INCOMING;
41152                   break
41153               }
41154             }
41155             if (state === this._LINKING_TO_OUTGOING) {
41156               if (firstOut === null) { throw new TopologyException('no outgoing dirEdge found', this.getCoordinate()) }
41157               Assert.isTrue(firstOut.isInResult(), 'unable to link last incoming dirEdge');
41158               incoming.setNext(firstOut);
41159             }
41160           };
41161           DirectedEdgeStar.prototype.insert = function insert (ee) {
41162             var de = ee;
41163             this.insertEdgeEnd(de, de);
41164           };
41165           DirectedEdgeStar.prototype.getRightmostEdge = function getRightmostEdge () {
41166             var edges = this.getEdges();
41167             var size = edges.size();
41168             if (size < 1) { return null }
41169             var de0 = edges.get(0);
41170             if (size === 1) { return de0 }
41171             var deLast = edges.get(size - 1);
41172             var quad0 = de0.getQuadrant();
41173             var quad1 = deLast.getQuadrant();
41174             if (Quadrant.isNorthern(quad0) && Quadrant.isNorthern(quad1)) { return de0; } else if (!Quadrant.isNorthern(quad0) && !Quadrant.isNorthern(quad1)) { return deLast; } else {
41175               // const nonHorizontalEdge = null
41176               if (de0.getDy() !== 0) { return de0; } else if (deLast.getDy() !== 0) { return deLast }
41177             }
41178             Assert.shouldNeverReachHere('found two horizontal edges incident on node');
41179             return null
41180           };
41181           DirectedEdgeStar.prototype.print = function print (out) {
41182             System.out.println('DirectedEdgeStar: ' + this.getCoordinate());
41183             for (var it = this.iterator(); it.hasNext();) {
41184               var de = it.next();
41185               out.print('out ');
41186               de.print(out);
41187               out.println();
41188               out.print('in ');
41189               de.getSym().print(out);
41190               out.println();
41191             }
41192           };
41193           DirectedEdgeStar.prototype.getResultAreaEdges = function getResultAreaEdges () {
41194             var this$1 = this;
41195
41196             if (this._resultAreaEdgeList !== null) { return this._resultAreaEdgeList }
41197             this._resultAreaEdgeList = new ArrayList();
41198             for (var it = this.iterator(); it.hasNext();) {
41199               var de = it.next();
41200               if (de.isInResult() || de.getSym().isInResult()) { this$1._resultAreaEdgeList.add(de); }
41201             }
41202             return this._resultAreaEdgeList
41203           };
41204           DirectedEdgeStar.prototype.updateLabelling = function updateLabelling (nodeLabel) {
41205             for (var it = this.iterator(); it.hasNext();) {
41206               var de = it.next();
41207               var label = de.getLabel();
41208               label.setAllLocationsIfNull(0, nodeLabel.getLocation(0));
41209               label.setAllLocationsIfNull(1, nodeLabel.getLocation(1));
41210             }
41211           };
41212           DirectedEdgeStar.prototype.linkAllDirectedEdges = function linkAllDirectedEdges () {
41213             var this$1 = this;
41214
41215             this.getEdges();
41216             var prevOut = null;
41217             var firstIn = null;
41218             for (var i = this._edgeList.size() - 1; i >= 0; i--) {
41219               var nextOut = this$1._edgeList.get(i);
41220               var nextIn = nextOut.getSym();
41221               if (firstIn === null) { firstIn = nextIn; }
41222               if (prevOut !== null) { nextIn.setNext(prevOut); }
41223               prevOut = nextOut;
41224             }
41225             firstIn.setNext(prevOut);
41226           };
41227           DirectedEdgeStar.prototype.computeDepths = function computeDepths () {
41228             var this$1 = this;
41229
41230             if (arguments.length === 1) {
41231               var de = arguments[0];
41232               var edgeIndex = this.findIndex(de);
41233               // const label = de.getLabel()
41234               var startDepth = de.getDepth(Position.LEFT);
41235               var targetLastDepth = de.getDepth(Position.RIGHT);
41236               var nextDepth = this.computeDepths(edgeIndex + 1, this._edgeList.size(), startDepth);
41237               var lastDepth = this.computeDepths(0, edgeIndex, nextDepth);
41238               if (lastDepth !== targetLastDepth) { throw new TopologyException('depth mismatch at ' + de.getCoordinate()) }
41239             } else if (arguments.length === 3) {
41240               var startIndex = arguments[0];
41241               var endIndex = arguments[1];
41242               var startDepth$1 = arguments[2];
41243               var currDepth = startDepth$1;
41244               for (var i = startIndex; i < endIndex; i++) {
41245                 var nextDe = this$1._edgeList.get(i);
41246                 // const label = nextDe.getLabel()
41247                 nextDe.setEdgeDepths(Position.RIGHT, currDepth);
41248                 currDepth = nextDe.getDepth(Position.LEFT);
41249               }
41250               return currDepth
41251             }
41252           };
41253           DirectedEdgeStar.prototype.mergeSymLabels = function mergeSymLabels () {
41254             for (var it = this.iterator(); it.hasNext();) {
41255               var de = it.next();
41256               var label = de.getLabel();
41257               label.merge(de.getSym().getLabel());
41258             }
41259           };
41260           DirectedEdgeStar.prototype.linkMinimalDirectedEdges = function linkMinimalDirectedEdges (er) {
41261             var this$1 = this;
41262
41263             var firstOut = null;
41264             var incoming = null;
41265             var state = this._SCANNING_FOR_INCOMING;
41266             for (var i = this._resultAreaEdgeList.size() - 1; i >= 0; i--) {
41267               var nextOut = this$1._resultAreaEdgeList.get(i);
41268               var nextIn = nextOut.getSym();
41269               if (firstOut === null && nextOut.getEdgeRing() === er) { firstOut = nextOut; }
41270               switch (state) {
41271                 case this$1._SCANNING_FOR_INCOMING:
41272                   if (nextIn.getEdgeRing() !== er) { continue }
41273                   incoming = nextIn;
41274                   state = this$1._LINKING_TO_OUTGOING;
41275                   break
41276                 case this$1._LINKING_TO_OUTGOING:
41277                   if (nextOut.getEdgeRing() !== er) { continue }
41278                   incoming.setNextMin(nextOut);
41279                   state = this$1._SCANNING_FOR_INCOMING;
41280                   break
41281               }
41282             }
41283             if (state === this._LINKING_TO_OUTGOING) {
41284               Assert.isTrue(firstOut !== null, 'found null for first outgoing dirEdge');
41285               Assert.isTrue(firstOut.getEdgeRing() === er, 'unable to link last incoming dirEdge');
41286               incoming.setNextMin(firstOut);
41287             }
41288           };
41289           DirectedEdgeStar.prototype.getOutgoingDegree = function getOutgoingDegree () {
41290             if (arguments.length === 0) {
41291               var degree = 0;
41292               for (var it = this.iterator(); it.hasNext();) {
41293                 var de = it.next();
41294                 if (de.isInResult()) { degree++; }
41295               }
41296               return degree
41297             } else if (arguments.length === 1) {
41298               var er = arguments[0];
41299               var degree$1 = 0;
41300               for (var it$1 = this.iterator(); it$1.hasNext();) {
41301                 var de$1 = it$1.next();
41302                 if (de$1.getEdgeRing() === er) { degree$1++; }
41303               }
41304               return degree$1
41305             }
41306           };
41307           DirectedEdgeStar.prototype.getLabel = function getLabel () {
41308             return this._label
41309           };
41310           DirectedEdgeStar.prototype.findCoveredLineEdges = function findCoveredLineEdges () {
41311             var startLoc = Location.NONE;
41312             for (var it = this.iterator(); it.hasNext();) {
41313               var nextOut = it.next();
41314               var nextIn = nextOut.getSym();
41315               if (!nextOut.isLineEdge()) {
41316                 if (nextOut.isInResult()) {
41317                   startLoc = Location.INTERIOR;
41318                   break
41319                 }
41320                 if (nextIn.isInResult()) {
41321                   startLoc = Location.EXTERIOR;
41322                   break
41323                 }
41324               }
41325             }
41326             if (startLoc === Location.NONE) { return null }
41327             var currLoc = startLoc;
41328             for (var it$1 = this.iterator(); it$1.hasNext();) {
41329               var nextOut$1 = it$1.next();
41330               var nextIn$1 = nextOut$1.getSym();
41331               if (nextOut$1.isLineEdge()) {
41332                 nextOut$1.getEdge().setCovered(currLoc === Location.INTERIOR);
41333               } else {
41334                 if (nextOut$1.isInResult()) { currLoc = Location.EXTERIOR; }
41335                 if (nextIn$1.isInResult()) { currLoc = Location.INTERIOR; }
41336               }
41337             }
41338           };
41339           DirectedEdgeStar.prototype.computeLabelling = function computeLabelling (geom) {
41340             var this$1 = this;
41341
41342             EdgeEndStar$$1.prototype.computeLabelling.call(this, geom);
41343             this._label = new Label(Location.NONE);
41344             for (var it = this.iterator(); it.hasNext();) {
41345               var ee = it.next();
41346               var e = ee.getEdge();
41347               var eLabel = e.getLabel();
41348               for (var i = 0; i < 2; i++) {
41349                 var eLoc = eLabel.getLocation(i);
41350                 if (eLoc === Location.INTERIOR || eLoc === Location.BOUNDARY) { this$1._label.setLocation(i, Location.INTERIOR); }
41351               }
41352             }
41353           };
41354           DirectedEdgeStar.prototype.interfaces_ = function interfaces_ () {
41355             return []
41356           };
41357           DirectedEdgeStar.prototype.getClass = function getClass () {
41358             return DirectedEdgeStar
41359           };
41360
41361           return DirectedEdgeStar;
41362         }(EdgeEndStar));
41363
41364         var OverlayNodeFactory = (function (NodeFactory$$1) {
41365           function OverlayNodeFactory () {
41366             NodeFactory$$1.apply(this, arguments);
41367           }
41368
41369           if ( NodeFactory$$1 ) { OverlayNodeFactory.__proto__ = NodeFactory$$1; }
41370           OverlayNodeFactory.prototype = Object.create( NodeFactory$$1 && NodeFactory$$1.prototype );
41371           OverlayNodeFactory.prototype.constructor = OverlayNodeFactory;
41372
41373           OverlayNodeFactory.prototype.createNode = function createNode (coord) {
41374             return new Node$2(coord, new DirectedEdgeStar())
41375           };
41376           OverlayNodeFactory.prototype.interfaces_ = function interfaces_ () {
41377             return []
41378           };
41379           OverlayNodeFactory.prototype.getClass = function getClass () {
41380             return OverlayNodeFactory
41381           };
41382
41383           return OverlayNodeFactory;
41384         }(NodeFactory));
41385
41386         var OrientedCoordinateArray = function OrientedCoordinateArray () {
41387           this._pts = null;
41388           this._orientation = null;
41389           var pts = arguments[0];
41390           this._pts = pts;
41391           this._orientation = OrientedCoordinateArray.orientation(pts);
41392         };
41393         OrientedCoordinateArray.prototype.compareTo = function compareTo (o1) {
41394           var oca = o1;
41395           var comp = OrientedCoordinateArray.compareOriented(this._pts, this._orientation, oca._pts, oca._orientation);
41396           return comp
41397         };
41398         OrientedCoordinateArray.prototype.interfaces_ = function interfaces_ () {
41399           return [Comparable]
41400         };
41401         OrientedCoordinateArray.prototype.getClass = function getClass () {
41402           return OrientedCoordinateArray
41403         };
41404         OrientedCoordinateArray.orientation = function orientation (pts) {
41405           return CoordinateArrays.increasingDirection(pts) === 1
41406         };
41407         OrientedCoordinateArray.compareOriented = function compareOriented (pts1, orientation1, pts2, orientation2) {
41408           var dir1 = orientation1 ? 1 : -1;
41409           var dir2 = orientation2 ? 1 : -1;
41410           var limit1 = orientation1 ? pts1.length : -1;
41411           var limit2 = orientation2 ? pts2.length : -1;
41412           var i1 = orientation1 ? 0 : pts1.length - 1;
41413           var i2 = orientation2 ? 0 : pts2.length - 1;
41414           // const comp = 0
41415           while (true) {
41416             var compPt = pts1[i1].compareTo(pts2[i2]);
41417             if (compPt !== 0) { return compPt }
41418             i1 += dir1;
41419             i2 += dir2;
41420             var done1 = i1 === limit1;
41421             var done2 = i2 === limit2;
41422             if (done1 && !done2) { return -1 }
41423             if (!done1 && done2) { return 1 }
41424             if (done1 && done2) { return 0 }
41425           }
41426         };
41427
41428         var EdgeList = function EdgeList () {
41429           this._edges = new ArrayList();
41430           this._ocaMap = new TreeMap();
41431         };
41432         EdgeList.prototype.print = function print (out) {
41433             var this$1 = this;
41434
41435           out.print('MULTILINESTRING ( ');
41436           for (var j = 0; j < this._edges.size(); j++) {
41437             var e = this$1._edges.get(j);
41438             if (j > 0) { out.print(','); }
41439             out.print('(');
41440             var pts = e.getCoordinates();
41441             for (var i = 0; i < pts.length; i++) {
41442               if (i > 0) { out.print(','); }
41443               out.print(pts[i].x + ' ' + pts[i].y);
41444             }
41445             out.println(')');
41446           }
41447           out.print(')  ');
41448         };
41449         EdgeList.prototype.addAll = function addAll (edgeColl) {
41450             var this$1 = this;
41451
41452           for (var i = edgeColl.iterator(); i.hasNext();) {
41453             this$1.add(i.next());
41454           }
41455         };
41456         EdgeList.prototype.findEdgeIndex = function findEdgeIndex (e) {
41457             var this$1 = this;
41458
41459           for (var i = 0; i < this._edges.size(); i++) {
41460             if (this$1._edges.get(i).equals(e)) { return i }
41461           }
41462           return -1
41463         };
41464         EdgeList.prototype.iterator = function iterator () {
41465           return this._edges.iterator()
41466         };
41467         EdgeList.prototype.getEdges = function getEdges () {
41468           return this._edges
41469         };
41470         EdgeList.prototype.get = function get (i) {
41471           return this._edges.get(i)
41472         };
41473         EdgeList.prototype.findEqualEdge = function findEqualEdge (e) {
41474           var oca = new OrientedCoordinateArray(e.getCoordinates());
41475           var matchEdge = this._ocaMap.get(oca);
41476           return matchEdge
41477         };
41478         EdgeList.prototype.add = function add (e) {
41479           this._edges.add(e);
41480           var oca = new OrientedCoordinateArray(e.getCoordinates());
41481           this._ocaMap.put(oca, e);
41482         };
41483         EdgeList.prototype.interfaces_ = function interfaces_ () {
41484           return []
41485         };
41486         EdgeList.prototype.getClass = function getClass () {
41487           return EdgeList
41488         };
41489
41490         var SegmentIntersector = function SegmentIntersector () {};
41491
41492         SegmentIntersector.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {};
41493         SegmentIntersector.prototype.isDone = function isDone () {};
41494         SegmentIntersector.prototype.interfaces_ = function interfaces_ () {
41495           return []
41496         };
41497         SegmentIntersector.prototype.getClass = function getClass () {
41498           return SegmentIntersector
41499         };
41500
41501         var IntersectionAdder = function IntersectionAdder () {
41502           this._hasIntersection = false;
41503           this._hasProper = false;
41504           this._hasProperInterior = false;
41505           this._hasInterior = false;
41506           this._properIntersectionPoint = null;
41507           this._li = null;
41508           this._isSelfIntersection = null;
41509           this.numIntersections = 0;
41510           this.numInteriorIntersections = 0;
41511           this.numProperIntersections = 0;
41512           this.numTests = 0;
41513           var li = arguments[0];
41514           this._li = li;
41515         };
41516         IntersectionAdder.prototype.isTrivialIntersection = function isTrivialIntersection (e0, segIndex0, e1, segIndex1) {
41517           if (e0 === e1) {
41518             if (this._li.getIntersectionNum() === 1) {
41519               if (IntersectionAdder.isAdjacentSegments(segIndex0, segIndex1)) { return true }
41520               if (e0.isClosed()) {
41521                 var maxSegIndex = e0.size() - 1;
41522                 if ((segIndex0 === 0 && segIndex1 === maxSegIndex) ||
41523                     (segIndex1 === 0 && segIndex0 === maxSegIndex)) {
41524                   return true
41525                 }
41526               }
41527             }
41528           }
41529           return false
41530         };
41531         IntersectionAdder.prototype.getProperIntersectionPoint = function getProperIntersectionPoint () {
41532           return this._properIntersectionPoint
41533         };
41534         IntersectionAdder.prototype.hasProperInteriorIntersection = function hasProperInteriorIntersection () {
41535           return this._hasProperInterior
41536         };
41537         IntersectionAdder.prototype.getLineIntersector = function getLineIntersector () {
41538           return this._li
41539         };
41540         IntersectionAdder.prototype.hasProperIntersection = function hasProperIntersection () {
41541           return this._hasProper
41542         };
41543         IntersectionAdder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {
41544           if (e0 === e1 && segIndex0 === segIndex1) { return null }
41545           this.numTests++;
41546           var p00 = e0.getCoordinates()[segIndex0];
41547           var p01 = e0.getCoordinates()[segIndex0 + 1];
41548           var p10 = e1.getCoordinates()[segIndex1];
41549           var p11 = e1.getCoordinates()[segIndex1 + 1];
41550           this._li.computeIntersection(p00, p01, p10, p11);
41551           if (this._li.hasIntersection()) {
41552             this.numIntersections++;
41553             if (this._li.isInteriorIntersection()) {
41554               this.numInteriorIntersections++;
41555               this._hasInterior = true;
41556             }
41557             if (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {
41558               this._hasIntersection = true;
41559               e0.addIntersections(this._li, segIndex0, 0);
41560               e1.addIntersections(this._li, segIndex1, 1);
41561               if (this._li.isProper()) {
41562                 this.numProperIntersections++;
41563                 this._hasProper = true;
41564                 this._hasProperInterior = true;
41565               }
41566             }
41567           }
41568         };
41569         IntersectionAdder.prototype.hasIntersection = function hasIntersection () {
41570           return this._hasIntersection
41571         };
41572         IntersectionAdder.prototype.isDone = function isDone () {
41573           return false
41574         };
41575         IntersectionAdder.prototype.hasInteriorIntersection = function hasInteriorIntersection () {
41576           return this._hasInterior
41577         };
41578         IntersectionAdder.prototype.interfaces_ = function interfaces_ () {
41579           return [SegmentIntersector]
41580         };
41581         IntersectionAdder.prototype.getClass = function getClass () {
41582           return IntersectionAdder
41583         };
41584         IntersectionAdder.isAdjacentSegments = function isAdjacentSegments (i1, i2) {
41585           return Math.abs(i1 - i2) === 1
41586         };
41587
41588         var EdgeIntersection = function EdgeIntersection () {
41589           this.coord = null;
41590           this.segmentIndex = null;
41591           this.dist = null;
41592           var coord = arguments[0];
41593           var segmentIndex = arguments[1];
41594           var dist = arguments[2];
41595           this.coord = new Coordinate(coord);
41596           this.segmentIndex = segmentIndex;
41597           this.dist = dist;
41598         };
41599         EdgeIntersection.prototype.getSegmentIndex = function getSegmentIndex () {
41600           return this.segmentIndex
41601         };
41602         EdgeIntersection.prototype.getCoordinate = function getCoordinate () {
41603           return this.coord
41604         };
41605         EdgeIntersection.prototype.print = function print (out) {
41606           out.print(this.coord);
41607           out.print(' seg # = ' + this.segmentIndex);
41608           out.println(' dist = ' + this.dist);
41609         };
41610         EdgeIntersection.prototype.compareTo = function compareTo (obj) {
41611           var other = obj;
41612           return this.compare(other.segmentIndex, other.dist)
41613         };
41614         EdgeIntersection.prototype.isEndPoint = function isEndPoint (maxSegmentIndex) {
41615           if (this.segmentIndex === 0 && this.dist === 0.0) { return true }
41616           if (this.segmentIndex === maxSegmentIndex) { return true }
41617           return false
41618         };
41619         EdgeIntersection.prototype.toString = function toString () {
41620           return this.coord + ' seg # = ' + this.segmentIndex + ' dist = ' + this.dist
41621         };
41622         EdgeIntersection.prototype.getDistance = function getDistance () {
41623           return this.dist
41624         };
41625         EdgeIntersection.prototype.compare = function compare (segmentIndex, dist) {
41626           if (this.segmentIndex < segmentIndex) { return -1 }
41627           if (this.segmentIndex > segmentIndex) { return 1 }
41628           if (this.dist < dist) { return -1 }
41629           if (this.dist > dist) { return 1 }
41630           return 0
41631         };
41632         EdgeIntersection.prototype.interfaces_ = function interfaces_ () {
41633           return [Comparable]
41634         };
41635         EdgeIntersection.prototype.getClass = function getClass () {
41636           return EdgeIntersection
41637         };
41638
41639         var EdgeIntersectionList = function EdgeIntersectionList () {
41640           this._nodeMap = new TreeMap();
41641           this.edge = null;
41642           var edge = arguments[0];
41643           this.edge = edge;
41644         };
41645         EdgeIntersectionList.prototype.print = function print (out) {
41646           out.println('Intersections:');
41647           for (var it = this.iterator(); it.hasNext();) {
41648             var ei = it.next();
41649             ei.print(out);
41650           }
41651         };
41652         EdgeIntersectionList.prototype.iterator = function iterator () {
41653           return this._nodeMap.values().iterator()
41654         };
41655         EdgeIntersectionList.prototype.addSplitEdges = function addSplitEdges (edgeList) {
41656             var this$1 = this;
41657
41658           this.addEndpoints();
41659           var it = this.iterator();
41660           var eiPrev = it.next();
41661           while (it.hasNext()) {
41662             var ei = it.next();
41663             var newEdge = this$1.createSplitEdge(eiPrev, ei);
41664             edgeList.add(newEdge);
41665             eiPrev = ei;
41666           }
41667         };
41668         EdgeIntersectionList.prototype.addEndpoints = function addEndpoints () {
41669           var maxSegIndex = this.edge.pts.length - 1;
41670           this.add(this.edge.pts[0], 0, 0.0);
41671           this.add(this.edge.pts[maxSegIndex], maxSegIndex, 0.0);
41672         };
41673         EdgeIntersectionList.prototype.createSplitEdge = function createSplitEdge (ei0, ei1) {
41674             var this$1 = this;
41675
41676           var npts = ei1.segmentIndex - ei0.segmentIndex + 2;
41677           var lastSegStartPt = this.edge.pts[ei1.segmentIndex];
41678           var useIntPt1 = ei1.dist > 0.0 || !ei1.coord.equals2D(lastSegStartPt);
41679           if (!useIntPt1) {
41680             npts--;
41681           }
41682           var pts = new Array(npts).fill(null);
41683           var ipt = 0;
41684           pts[ipt++] = new Coordinate(ei0.coord);
41685           for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {
41686             pts[ipt++] = this$1.edge.pts[i];
41687           }
41688           if (useIntPt1) { pts[ipt] = ei1.coord; }
41689           return new Edge(pts, new Label(this.edge._label))
41690         };
41691         EdgeIntersectionList.prototype.add = function add (intPt, segmentIndex, dist) {
41692           var eiNew = new EdgeIntersection(intPt, segmentIndex, dist);
41693           var ei = this._nodeMap.get(eiNew);
41694           if (ei !== null) {
41695             return ei
41696           }
41697           this._nodeMap.put(eiNew, eiNew);
41698           return eiNew
41699         };
41700         EdgeIntersectionList.prototype.isIntersection = function isIntersection (pt) {
41701           for (var it = this.iterator(); it.hasNext();) {
41702             var ei = it.next();
41703             if (ei.coord.equals(pt)) { return true }
41704           }
41705           return false
41706         };
41707         EdgeIntersectionList.prototype.interfaces_ = function interfaces_ () {
41708           return []
41709         };
41710         EdgeIntersectionList.prototype.getClass = function getClass () {
41711           return EdgeIntersectionList
41712         };
41713
41714         var MonotoneChainIndexer = function MonotoneChainIndexer () {};
41715
41716         MonotoneChainIndexer.prototype.getChainStartIndices = function getChainStartIndices (pts) {
41717             var this$1 = this;
41718
41719           var start = 0;
41720           var startIndexList = new ArrayList();
41721           startIndexList.add(new Integer(start));
41722           do {
41723             var last = this$1.findChainEnd(pts, start);
41724             startIndexList.add(new Integer(last));
41725             start = last;
41726           } while (start < pts.length - 1)
41727           var startIndex = MonotoneChainIndexer.toIntArray(startIndexList);
41728           return startIndex
41729         };
41730         MonotoneChainIndexer.prototype.findChainEnd = function findChainEnd (pts, start) {
41731           var chainQuad = Quadrant.quadrant(pts[start], pts[start + 1]);
41732           var last = start + 1;
41733           while (last < pts.length) {
41734             var quad = Quadrant.quadrant(pts[last - 1], pts[last]);
41735             if (quad !== chainQuad) { break }
41736             last++;
41737           }
41738           return last - 1
41739         };
41740         MonotoneChainIndexer.prototype.interfaces_ = function interfaces_ () {
41741           return []
41742         };
41743         MonotoneChainIndexer.prototype.getClass = function getClass () {
41744           return MonotoneChainIndexer
41745         };
41746         MonotoneChainIndexer.toIntArray = function toIntArray (list) {
41747           var array = new Array(list.size()).fill(null);
41748           for (var i = 0; i < array.length; i++) {
41749             array[i] = list.get(i).intValue();
41750           }
41751           return array
41752         };
41753
41754         var MonotoneChainEdge = function MonotoneChainEdge () {
41755           this.e = null;
41756           this.pts = null;
41757           this.startIndex = null;
41758           this.env1 = new Envelope();
41759           this.env2 = new Envelope();
41760           var e = arguments[0];
41761           this.e = e;
41762           this.pts = e.getCoordinates();
41763           var mcb = new MonotoneChainIndexer();
41764           this.startIndex = mcb.getChainStartIndices(this.pts);
41765         };
41766         MonotoneChainEdge.prototype.getCoordinates = function getCoordinates () {
41767           return this.pts
41768         };
41769         MonotoneChainEdge.prototype.getMaxX = function getMaxX (chainIndex) {
41770           var x1 = this.pts[this.startIndex[chainIndex]].x;
41771           var x2 = this.pts[this.startIndex[chainIndex + 1]].x;
41772           return x1 > x2 ? x1 : x2
41773         };
41774         MonotoneChainEdge.prototype.getMinX = function getMinX (chainIndex) {
41775           var x1 = this.pts[this.startIndex[chainIndex]].x;
41776           var x2 = this.pts[this.startIndex[chainIndex + 1]].x;
41777           return x1 < x2 ? x1 : x2
41778         };
41779         MonotoneChainEdge.prototype.computeIntersectsForChain = function computeIntersectsForChain () {
41780           if (arguments.length === 4) {
41781             var chainIndex0 = arguments[0];
41782             var mce = arguments[1];
41783             var chainIndex1 = arguments[2];
41784             var si = arguments[3];
41785             this.computeIntersectsForChain(this.startIndex[chainIndex0], this.startIndex[chainIndex0 + 1], mce, mce.startIndex[chainIndex1], mce.startIndex[chainIndex1 + 1], si);
41786           } else if (arguments.length === 6) {
41787             var start0 = arguments[0];
41788             var end0 = arguments[1];
41789             var mce$1 = arguments[2];
41790             var start1 = arguments[3];
41791             var end1 = arguments[4];
41792             var ei = arguments[5];
41793             var p00 = this.pts[start0];
41794             var p01 = this.pts[end0];
41795             var p10 = mce$1.pts[start1];
41796             var p11 = mce$1.pts[end1];
41797             if (end0 - start0 === 1 && end1 - start1 === 1) {
41798               ei.addIntersections(this.e, start0, mce$1.e, start1);
41799               return null
41800             }
41801             this.env1.init(p00, p01);
41802             this.env2.init(p10, p11);
41803             if (!this.env1.intersects(this.env2)) { return null }
41804             var mid0 = Math.trunc((start0 + end0) / 2);
41805             var mid1 = Math.trunc((start1 + end1) / 2);
41806             if (start0 < mid0) {
41807               if (start1 < mid1) { this.computeIntersectsForChain(start0, mid0, mce$1, start1, mid1, ei); }
41808               if (mid1 < end1) { this.computeIntersectsForChain(start0, mid0, mce$1, mid1, end1, ei); }
41809             }
41810             if (mid0 < end0) {
41811               if (start1 < mid1) { this.computeIntersectsForChain(mid0, end0, mce$1, start1, mid1, ei); }
41812               if (mid1 < end1) { this.computeIntersectsForChain(mid0, end0, mce$1, mid1, end1, ei); }
41813             }
41814           }
41815         };
41816         MonotoneChainEdge.prototype.getStartIndexes = function getStartIndexes () {
41817           return this.startIndex
41818         };
41819         MonotoneChainEdge.prototype.computeIntersects = function computeIntersects (mce, si) {
41820             var this$1 = this;
41821
41822           for (var i = 0; i < this.startIndex.length - 1; i++) {
41823             for (var j = 0; j < mce.startIndex.length - 1; j++) {
41824               this$1.computeIntersectsForChain(i, mce, j, si);
41825             }
41826           }
41827         };
41828         MonotoneChainEdge.prototype.interfaces_ = function interfaces_ () {
41829           return []
41830         };
41831         MonotoneChainEdge.prototype.getClass = function getClass () {
41832           return MonotoneChainEdge
41833         };
41834
41835         var Depth = function Depth () {
41836           var this$1 = this;
41837
41838           this._depth = Array(2).fill().map(function () { return Array(3); });
41839           for (var i = 0; i < 2; i++) {
41840             for (var j = 0; j < 3; j++) {
41841               this$1._depth[i][j] = Depth.NULL_VALUE;
41842             }
41843           }
41844         };
41845
41846         var staticAccessors$31 = { NULL_VALUE: { configurable: true } };
41847         Depth.prototype.getDepth = function getDepth (geomIndex, posIndex) {
41848           return this._depth[geomIndex][posIndex]
41849         };
41850         Depth.prototype.setDepth = function setDepth (geomIndex, posIndex, depthValue) {
41851           this._depth[geomIndex][posIndex] = depthValue;
41852         };
41853         Depth.prototype.isNull = function isNull () {
41854             var this$1 = this;
41855
41856           if (arguments.length === 0) {
41857             for (var i = 0; i < 2; i++) {
41858               for (var j = 0; j < 3; j++) {
41859                 if (this$1._depth[i][j] !== Depth.NULL_VALUE) { return false }
41860               }
41861             }
41862             return true
41863           } else if (arguments.length === 1) {
41864             var geomIndex = arguments[0];
41865             return this._depth[geomIndex][1] === Depth.NULL_VALUE
41866           } else if (arguments.length === 2) {
41867             var geomIndex$1 = arguments[0];
41868             var posIndex = arguments[1];
41869             return this._depth[geomIndex$1][posIndex] === Depth.NULL_VALUE
41870           }
41871         };
41872         Depth.prototype.normalize = function normalize () {
41873             var this$1 = this;
41874
41875           for (var i = 0; i < 2; i++) {
41876             if (!this$1.isNull(i)) {
41877               var minDepth = this$1._depth[i][1];
41878               if (this$1._depth[i][2] < minDepth) { minDepth = this$1._depth[i][2]; }
41879               if (minDepth < 0) { minDepth = 0; }
41880               for (var j = 1; j < 3; j++) {
41881                 var newValue = 0;
41882                 if (this$1._depth[i][j] > minDepth) { newValue = 1; }
41883                 this$1._depth[i][j] = newValue;
41884               }
41885             }
41886           }
41887         };
41888         Depth.prototype.getDelta = function getDelta (geomIndex) {
41889           return this._depth[geomIndex][Position.RIGHT] - this._depth[geomIndex][Position.LEFT]
41890         };
41891         Depth.prototype.getLocation = function getLocation (geomIndex, posIndex) {
41892           if (this._depth[geomIndex][posIndex] <= 0) { return Location.EXTERIOR }
41893           return Location.INTERIOR
41894         };
41895         Depth.prototype.toString = function toString () {
41896           return 'A: ' + this._depth[0][1] + ',' + this._depth[0][2] + ' B: ' + this._depth[1][1] + ',' + this._depth[1][2]
41897         };
41898         Depth.prototype.add = function add () {
41899             var this$1 = this;
41900
41901           if (arguments.length === 1) {
41902             var lbl = arguments[0];
41903             for (var i = 0; i < 2; i++) {
41904               for (var j = 1; j < 3; j++) {
41905                 var loc = lbl.getLocation(i, j);
41906                 if (loc === Location.EXTERIOR || loc === Location.INTERIOR) {
41907                   if (this$1.isNull(i, j)) {
41908                     this$1._depth[i][j] = Depth.depthAtLocation(loc);
41909                   } else { this$1._depth[i][j] += Depth.depthAtLocation(loc); }
41910                 }
41911               }
41912             }
41913           } else if (arguments.length === 3) {
41914             var geomIndex = arguments[0];
41915             var posIndex = arguments[1];
41916             var location = arguments[2];
41917             if (location === Location.INTERIOR) { this._depth[geomIndex][posIndex]++; }
41918           }
41919         };
41920         Depth.prototype.interfaces_ = function interfaces_ () {
41921           return []
41922         };
41923         Depth.prototype.getClass = function getClass () {
41924           return Depth
41925         };
41926         Depth.depthAtLocation = function depthAtLocation (location) {
41927           if (location === Location.EXTERIOR) { return 0 }
41928           if (location === Location.INTERIOR) { return 1 }
41929           return Depth.NULL_VALUE
41930         };
41931         staticAccessors$31.NULL_VALUE.get = function () { return -1 };
41932
41933         Object.defineProperties( Depth, staticAccessors$31 );
41934
41935         var Edge = (function (GraphComponent$$1) {
41936           function Edge () {
41937             GraphComponent$$1.call(this);
41938             this.pts = null;
41939             this._env = null;
41940             this.eiList = new EdgeIntersectionList(this);
41941             this._name = null;
41942             this._mce = null;
41943             this._isIsolated = true;
41944             this._depth = new Depth();
41945             this._depthDelta = 0;
41946             if (arguments.length === 1) {
41947               var pts = arguments[0];
41948               Edge.call(this, pts, null);
41949             } else if (arguments.length === 2) {
41950               var pts$1 = arguments[0];
41951               var label = arguments[1];
41952               this.pts = pts$1;
41953               this._label = label;
41954             }
41955           }
41956
41957           if ( GraphComponent$$1 ) { Edge.__proto__ = GraphComponent$$1; }
41958           Edge.prototype = Object.create( GraphComponent$$1 && GraphComponent$$1.prototype );
41959           Edge.prototype.constructor = Edge;
41960           Edge.prototype.getDepth = function getDepth () {
41961             return this._depth
41962           };
41963           Edge.prototype.getCollapsedEdge = function getCollapsedEdge () {
41964             var newPts = new Array(2).fill(null);
41965             newPts[0] = this.pts[0];
41966             newPts[1] = this.pts[1];
41967             var newe = new Edge(newPts, Label.toLineLabel(this._label));
41968             return newe
41969           };
41970           Edge.prototype.isIsolated = function isIsolated () {
41971             return this._isIsolated
41972           };
41973           Edge.prototype.getCoordinates = function getCoordinates () {
41974             return this.pts
41975           };
41976           Edge.prototype.setIsolated = function setIsolated (isIsolated) {
41977             this._isIsolated = isIsolated;
41978           };
41979           Edge.prototype.setName = function setName (name) {
41980             this._name = name;
41981           };
41982           Edge.prototype.equals = function equals (o) {
41983             var this$1 = this;
41984
41985             if (!(o instanceof Edge)) { return false }
41986             var e = o;
41987             if (this.pts.length !== e.pts.length) { return false }
41988             var isEqualForward = true;
41989             var isEqualReverse = true;
41990             var iRev = this.pts.length;
41991             for (var i = 0; i < this.pts.length; i++) {
41992               if (!this$1.pts[i].equals2D(e.pts[i])) {
41993                 isEqualForward = false;
41994               }
41995               if (!this$1.pts[i].equals2D(e.pts[--iRev])) {
41996                 isEqualReverse = false;
41997               }
41998               if (!isEqualForward && !isEqualReverse) { return false }
41999             }
42000             return true
42001           };
42002           Edge.prototype.getCoordinate = function getCoordinate () {
42003             if (arguments.length === 0) {
42004               if (this.pts.length > 0) { return this.pts[0] }
42005               return null
42006             } else if (arguments.length === 1) {
42007               var i = arguments[0];
42008               return this.pts[i]
42009             }
42010           };
42011           Edge.prototype.print = function print (out) {
42012             var this$1 = this;
42013
42014             out.print('edge ' + this._name + ': ');
42015             out.print('LINESTRING (');
42016             for (var i = 0; i < this.pts.length; i++) {
42017               if (i > 0) { out.print(','); }
42018               out.print(this$1.pts[i].x + ' ' + this$1.pts[i].y);
42019             }
42020             out.print(')  ' + this._label + ' ' + this._depthDelta);
42021           };
42022           Edge.prototype.computeIM = function computeIM (im) {
42023             Edge.updateIM(this._label, im);
42024           };
42025           Edge.prototype.isCollapsed = function isCollapsed () {
42026             if (!this._label.isArea()) { return false }
42027             if (this.pts.length !== 3) { return false }
42028             if (this.pts[0].equals(this.pts[2])) { return true }
42029             return false
42030           };
42031           Edge.prototype.isClosed = function isClosed () {
42032             return this.pts[0].equals(this.pts[this.pts.length - 1])
42033           };
42034           Edge.prototype.getMaximumSegmentIndex = function getMaximumSegmentIndex () {
42035             return this.pts.length - 1
42036           };
42037           Edge.prototype.getDepthDelta = function getDepthDelta () {
42038             return this._depthDelta
42039           };
42040           Edge.prototype.getNumPoints = function getNumPoints () {
42041             return this.pts.length
42042           };
42043           Edge.prototype.printReverse = function printReverse (out) {
42044             var this$1 = this;
42045
42046             out.print('edge ' + this._name + ': ');
42047             for (var i = this.pts.length - 1; i >= 0; i--) {
42048               out.print(this$1.pts[i] + ' ');
42049             }
42050             out.println('');
42051           };
42052           Edge.prototype.getMonotoneChainEdge = function getMonotoneChainEdge () {
42053             if (this._mce === null) { this._mce = new MonotoneChainEdge(this); }
42054             return this._mce
42055           };
42056           Edge.prototype.getEnvelope = function getEnvelope () {
42057             var this$1 = this;
42058
42059             if (this._env === null) {
42060               this._env = new Envelope();
42061               for (var i = 0; i < this.pts.length; i++) {
42062                 this$1._env.expandToInclude(this$1.pts[i]);
42063               }
42064             }
42065             return this._env
42066           };
42067           Edge.prototype.addIntersection = function addIntersection (li, segmentIndex, geomIndex, intIndex) {
42068             var intPt = new Coordinate(li.getIntersection(intIndex));
42069             var normalizedSegmentIndex = segmentIndex;
42070             var dist = li.getEdgeDistance(geomIndex, intIndex);
42071             var nextSegIndex = normalizedSegmentIndex + 1;
42072             if (nextSegIndex < this.pts.length) {
42073               var nextPt = this.pts[nextSegIndex];
42074               if (intPt.equals2D(nextPt)) {
42075                 normalizedSegmentIndex = nextSegIndex;
42076                 dist = 0.0;
42077               }
42078             }
42079             this.eiList.add(intPt, normalizedSegmentIndex, dist);
42080           };
42081           Edge.prototype.toString = function toString () {
42082             var this$1 = this;
42083
42084             var buf = new StringBuffer();
42085             buf.append('edge ' + this._name + ': ');
42086             buf.append('LINESTRING (');
42087             for (var i = 0; i < this.pts.length; i++) {
42088               if (i > 0) { buf.append(','); }
42089               buf.append(this$1.pts[i].x + ' ' + this$1.pts[i].y);
42090             }
42091             buf.append(')  ' + this._label + ' ' + this._depthDelta);
42092             return buf.toString()
42093           };
42094           Edge.prototype.isPointwiseEqual = function isPointwiseEqual (e) {
42095             var this$1 = this;
42096
42097             if (this.pts.length !== e.pts.length) { return false }
42098             for (var i = 0; i < this.pts.length; i++) {
42099               if (!this$1.pts[i].equals2D(e.pts[i])) {
42100                 return false
42101               }
42102             }
42103             return true
42104           };
42105           Edge.prototype.setDepthDelta = function setDepthDelta (depthDelta) {
42106             this._depthDelta = depthDelta;
42107           };
42108           Edge.prototype.getEdgeIntersectionList = function getEdgeIntersectionList () {
42109             return this.eiList
42110           };
42111           Edge.prototype.addIntersections = function addIntersections (li, segmentIndex, geomIndex) {
42112             var this$1 = this;
42113
42114             for (var i = 0; i < li.getIntersectionNum(); i++) {
42115               this$1.addIntersection(li, segmentIndex, geomIndex, i);
42116             }
42117           };
42118           Edge.prototype.interfaces_ = function interfaces_ () {
42119             return []
42120           };
42121           Edge.prototype.getClass = function getClass () {
42122             return Edge
42123           };
42124           Edge.updateIM = function updateIM () {
42125             if (arguments.length === 2) {
42126               var label = arguments[0];
42127               var im = arguments[1];
42128               im.setAtLeastIfValid(label.getLocation(0, Position.ON), label.getLocation(1, Position.ON), 1);
42129               if (label.isArea()) {
42130                 im.setAtLeastIfValid(label.getLocation(0, Position.LEFT), label.getLocation(1, Position.LEFT), 2);
42131                 im.setAtLeastIfValid(label.getLocation(0, Position.RIGHT), label.getLocation(1, Position.RIGHT), 2);
42132               }
42133             } else { return GraphComponent$$1.prototype.updateIM.apply(this, arguments) }
42134           };
42135
42136           return Edge;
42137         }(GraphComponent));
42138
42139         var BufferBuilder = function BufferBuilder (bufParams) {
42140           this._workingPrecisionModel = null;
42141           this._workingNoder = null;
42142           this._geomFact = null;
42143           this._graph = null;
42144           this._edgeList = new EdgeList();
42145           this._bufParams = bufParams || null;
42146         };
42147         BufferBuilder.prototype.setWorkingPrecisionModel = function setWorkingPrecisionModel (pm) {
42148           this._workingPrecisionModel = pm;
42149         };
42150         BufferBuilder.prototype.insertUniqueEdge = function insertUniqueEdge (e) {
42151           var existingEdge = this._edgeList.findEqualEdge(e);
42152           if (existingEdge !== null) {
42153             var existingLabel = existingEdge.getLabel();
42154             var labelToMerge = e.getLabel();
42155             if (!existingEdge.isPointwiseEqual(e)) {
42156               labelToMerge = new Label(e.getLabel());
42157               labelToMerge.flip();
42158             }
42159             existingLabel.merge(labelToMerge);
42160             var mergeDelta = BufferBuilder.depthDelta(labelToMerge);
42161             var existingDelta = existingEdge.getDepthDelta();
42162             var newDelta = existingDelta + mergeDelta;
42163             existingEdge.setDepthDelta(newDelta);
42164           } else {
42165             this._edgeList.add(e);
42166             e.setDepthDelta(BufferBuilder.depthDelta(e.getLabel()));
42167           }
42168         };
42169         BufferBuilder.prototype.buildSubgraphs = function buildSubgraphs (subgraphList, polyBuilder) {
42170           var processedGraphs = new ArrayList();
42171           for (var i = subgraphList.iterator(); i.hasNext();) {
42172             var subgraph = i.next();
42173             var p = subgraph.getRightmostCoordinate();
42174             var locater = new SubgraphDepthLocater(processedGraphs);
42175             var outsideDepth = locater.getDepth(p);
42176             subgraph.computeDepth(outsideDepth);
42177             subgraph.findResultEdges();
42178             processedGraphs.add(subgraph);
42179             polyBuilder.add(subgraph.getDirectedEdges(), subgraph.getNodes());
42180           }
42181         };
42182         BufferBuilder.prototype.createSubgraphs = function createSubgraphs (graph) {
42183           var subgraphList = new ArrayList();
42184           for (var i = graph.getNodes().iterator(); i.hasNext();) {
42185             var node = i.next();
42186             if (!node.isVisited()) {
42187               var subgraph = new BufferSubgraph();
42188               subgraph.create(node);
42189               subgraphList.add(subgraph);
42190             }
42191           }
42192           Collections.sort(subgraphList, Collections.reverseOrder());
42193           return subgraphList
42194         };
42195         BufferBuilder.prototype.createEmptyResultGeometry = function createEmptyResultGeometry () {
42196           var emptyGeom = this._geomFact.createPolygon();
42197           return emptyGeom
42198         };
42199         BufferBuilder.prototype.getNoder = function getNoder (precisionModel) {
42200           if (this._workingNoder !== null) { return this._workingNoder }
42201           var noder = new MCIndexNoder();
42202           var li = new RobustLineIntersector();
42203           li.setPrecisionModel(precisionModel);
42204           noder.setSegmentIntersector(new IntersectionAdder(li));
42205           return noder
42206         };
42207         BufferBuilder.prototype.buffer = function buffer (g, distance) {
42208           var precisionModel = this._workingPrecisionModel;
42209           if (precisionModel === null) { precisionModel = g.getPrecisionModel(); }
42210           this._geomFact = g.getFactory();
42211           var curveBuilder = new OffsetCurveBuilder(precisionModel, this._bufParams);
42212           var curveSetBuilder = new OffsetCurveSetBuilder(g, distance, curveBuilder);
42213           var bufferSegStrList = curveSetBuilder.getCurves();
42214           if (bufferSegStrList.size() <= 0) {
42215             return this.createEmptyResultGeometry()
42216           }
42217           this.computeNodedEdges(bufferSegStrList, precisionModel);
42218           this._graph = new PlanarGraph(new OverlayNodeFactory());
42219           this._graph.addEdges(this._edgeList.getEdges());
42220           var subgraphList = this.createSubgraphs(this._graph);
42221           var polyBuilder = new PolygonBuilder(this._geomFact);
42222           this.buildSubgraphs(subgraphList, polyBuilder);
42223           var resultPolyList = polyBuilder.getPolygons();
42224           if (resultPolyList.size() <= 0) {
42225             return this.createEmptyResultGeometry()
42226           }
42227           var resultGeom = this._geomFact.buildGeometry(resultPolyList);
42228           return resultGeom
42229         };
42230         BufferBuilder.prototype.computeNodedEdges = function computeNodedEdges (bufferSegStrList, precisionModel) {
42231             var this$1 = this;
42232
42233           var noder = this.getNoder(precisionModel);
42234           noder.computeNodes(bufferSegStrList);
42235           var nodedSegStrings = noder.getNodedSubstrings();
42236           for (var i = nodedSegStrings.iterator(); i.hasNext();) {
42237             var segStr = i.next();
42238             var pts = segStr.getCoordinates();
42239             if (pts.length === 2 && pts[0].equals2D(pts[1])) { continue }
42240             var oldLabel = segStr.getData();
42241             var edge = new Edge(segStr.getCoordinates(), new Label(oldLabel));
42242             this$1.insertUniqueEdge(edge);
42243           }
42244         };
42245         BufferBuilder.prototype.setNoder = function setNoder (noder) {
42246           this._workingNoder = noder;
42247         };
42248         BufferBuilder.prototype.interfaces_ = function interfaces_ () {
42249           return []
42250         };
42251         BufferBuilder.prototype.getClass = function getClass () {
42252           return BufferBuilder
42253         };
42254         BufferBuilder.depthDelta = function depthDelta (label) {
42255           var lLoc = label.getLocation(0, Position.LEFT);
42256           var rLoc = label.getLocation(0, Position.RIGHT);
42257           if (lLoc === Location.INTERIOR && rLoc === Location.EXTERIOR) { return 1; } else if (lLoc === Location.EXTERIOR && rLoc === Location.INTERIOR) { return -1 }
42258           return 0
42259         };
42260         BufferBuilder.convertSegStrings = function convertSegStrings (it) {
42261           var fact = new GeometryFactory();
42262           var lines = new ArrayList();
42263           while (it.hasNext()) {
42264             var ss = it.next();
42265             var line = fact.createLineString(ss.getCoordinates());
42266             lines.add(line);
42267           }
42268           return fact.buildGeometry(lines)
42269         };
42270
42271         var ScaledNoder = function ScaledNoder () {
42272           this._noder = null;
42273           this._scaleFactor = null;
42274           this._offsetX = null;
42275           this._offsetY = null;
42276           this._isScaled = false;
42277           if (arguments.length === 2) {
42278             var noder = arguments[0];
42279             var scaleFactor = arguments[1];
42280             this._noder = noder;
42281             this._scaleFactor = scaleFactor;
42282             this._offsetX = 0.0;
42283             this._offsetY = 0.0;
42284             this._isScaled = !this.isIntegerPrecision();
42285           } else if (arguments.length === 4) {
42286             var noder$1 = arguments[0];
42287             var scaleFactor$1 = arguments[1];
42288             var offsetX = arguments[2];
42289             var offsetY = arguments[3];
42290             this._noder = noder$1;
42291             this._scaleFactor = scaleFactor$1;
42292             this._offsetX = offsetX;
42293             this._offsetY = offsetY;
42294             this._isScaled = !this.isIntegerPrecision();
42295           }
42296         };
42297         ScaledNoder.prototype.rescale = function rescale () {
42298             var this$1 = this;
42299
42300           if (hasInterface(arguments[0], Collection)) {
42301             var segStrings = arguments[0];
42302             for (var i = segStrings.iterator(); i.hasNext();) {
42303               var ss = i.next();
42304               this$1.rescale(ss.getCoordinates());
42305             }
42306           } else if (arguments[0] instanceof Array) {
42307             var pts = arguments[0];
42308             // let p0 = null
42309             // let p1 = null
42310             // if (pts.length === 2) {
42311             // p0 = new Coordinate(pts[0])
42312             // p1 = new Coordinate(pts[1])
42313             // }
42314             for (var i$1 = 0; i$1 < pts.length; i$1++) {
42315               pts[i$1].x = pts[i$1].x / this$1._scaleFactor + this$1._offsetX;
42316               pts[i$1].y = pts[i$1].y / this$1._scaleFactor + this$1._offsetY;
42317             }
42318             if (pts.length === 2 && pts[0].equals2D(pts[1])) {
42319               System.out.println(pts);
42320             }
42321           }
42322         };
42323         ScaledNoder.prototype.scale = function scale () {
42324             var this$1 = this;
42325
42326           if (hasInterface(arguments[0], Collection)) {
42327             var segStrings = arguments[0];
42328             var nodedSegmentStrings = new ArrayList();
42329             for (var i = segStrings.iterator(); i.hasNext();) {
42330               var ss = i.next();
42331               nodedSegmentStrings.add(new NodedSegmentString(this$1.scale(ss.getCoordinates()), ss.getData()));
42332             }
42333             return nodedSegmentStrings
42334           } else if (arguments[0] instanceof Array) {
42335             var pts = arguments[0];
42336             var roundPts = new Array(pts.length).fill(null);
42337             for (var i$1 = 0; i$1 < pts.length; i$1++) {
42338               roundPts[i$1] = new Coordinate(Math.round((pts[i$1].x - this$1._offsetX) * this$1._scaleFactor), Math.round((pts[i$1].y - this$1._offsetY) * this$1._scaleFactor), pts[i$1].z);
42339             }
42340             var roundPtsNoDup = CoordinateArrays.removeRepeatedPoints(roundPts);
42341             return roundPtsNoDup
42342           }
42343         };
42344         ScaledNoder.prototype.isIntegerPrecision = function isIntegerPrecision () {
42345           return this._scaleFactor === 1.0
42346         };
42347         ScaledNoder.prototype.getNodedSubstrings = function getNodedSubstrings () {
42348           var splitSS = this._noder.getNodedSubstrings();
42349           if (this._isScaled) { this.rescale(splitSS); }
42350           return splitSS
42351         };
42352         ScaledNoder.prototype.computeNodes = function computeNodes (inputSegStrings) {
42353           var intSegStrings = inputSegStrings;
42354           if (this._isScaled) { intSegStrings = this.scale(inputSegStrings); }
42355           this._noder.computeNodes(intSegStrings);
42356         };
42357         ScaledNoder.prototype.interfaces_ = function interfaces_ () {
42358           return [Noder]
42359         };
42360         ScaledNoder.prototype.getClass = function getClass () {
42361           return ScaledNoder
42362         };
42363
42364         var NodingValidator = function NodingValidator () {
42365           this._li = new RobustLineIntersector();
42366           this._segStrings = null;
42367           var segStrings = arguments[0];
42368           this._segStrings = segStrings;
42369         };
42370
42371         var staticAccessors$33 = { fact: { configurable: true } };
42372         NodingValidator.prototype.checkEndPtVertexIntersections = function checkEndPtVertexIntersections () {
42373             var this$1 = this;
42374
42375           if (arguments.length === 0) {
42376             for (var i = this._segStrings.iterator(); i.hasNext();) {
42377               var ss = i.next();
42378               var pts = ss.getCoordinates();
42379               this$1.checkEndPtVertexIntersections(pts[0], this$1._segStrings);
42380               this$1.checkEndPtVertexIntersections(pts[pts.length - 1], this$1._segStrings);
42381             }
42382           } else if (arguments.length === 2) {
42383             var testPt = arguments[0];
42384             var segStrings = arguments[1];
42385             for (var i$1 = segStrings.iterator(); i$1.hasNext();) {
42386               var ss$1 = i$1.next();
42387               var pts$1 = ss$1.getCoordinates();
42388               for (var j = 1; j < pts$1.length - 1; j++) {
42389                 if (pts$1[j].equals(testPt)) { throw new RuntimeException('found endpt/interior pt intersection at index ' + j + ' :pt ' + testPt) }
42390               }
42391             }
42392           }
42393         };
42394         NodingValidator.prototype.checkInteriorIntersections = function checkInteriorIntersections () {
42395             var this$1 = this;
42396
42397           if (arguments.length === 0) {
42398             for (var i = this._segStrings.iterator(); i.hasNext();) {
42399               var ss0 = i.next();
42400               for (var j = this._segStrings.iterator(); j.hasNext();) {
42401                 var ss1 = j.next();
42402                 this$1.checkInteriorIntersections(ss0, ss1);
42403               }
42404             }
42405           } else if (arguments.length === 2) {
42406             var ss0$1 = arguments[0];
42407             var ss1$1 = arguments[1];
42408             var pts0 = ss0$1.getCoordinates();
42409             var pts1 = ss1$1.getCoordinates();
42410             for (var i0 = 0; i0 < pts0.length - 1; i0++) {
42411               for (var i1 = 0; i1 < pts1.length - 1; i1++) {
42412                 this$1.checkInteriorIntersections(ss0$1, i0, ss1$1, i1);
42413               }
42414             }
42415           } else if (arguments.length === 4) {
42416             var e0 = arguments[0];
42417             var segIndex0 = arguments[1];
42418             var e1 = arguments[2];
42419             var segIndex1 = arguments[3];
42420             if (e0 === e1 && segIndex0 === segIndex1) { return null }
42421             var p00 = e0.getCoordinates()[segIndex0];
42422             var p01 = e0.getCoordinates()[segIndex0 + 1];
42423             var p10 = e1.getCoordinates()[segIndex1];
42424             var p11 = e1.getCoordinates()[segIndex1 + 1];
42425             this._li.computeIntersection(p00, p01, p10, p11);
42426             if (this._li.hasIntersection()) {
42427               if (this._li.isProper() || this.hasInteriorIntersection(this._li, p00, p01) || this.hasInteriorIntersection(this._li, p10, p11)) {
42428                 throw new RuntimeException('found non-noded intersection at ' + p00 + '-' + p01 + ' and ' + p10 + '-' + p11)
42429               }
42430             }
42431           }
42432         };
42433         NodingValidator.prototype.checkValid = function checkValid () {
42434           this.checkEndPtVertexIntersections();
42435           this.checkInteriorIntersections();
42436           this.checkCollapses();
42437         };
42438         NodingValidator.prototype.checkCollapses = function checkCollapses () {
42439             var this$1 = this;
42440
42441           if (arguments.length === 0) {
42442             for (var i = this._segStrings.iterator(); i.hasNext();) {
42443               var ss = i.next();
42444               this$1.checkCollapses(ss);
42445             }
42446           } else if (arguments.length === 1) {
42447             var ss$1 = arguments[0];
42448             var pts = ss$1.getCoordinates();
42449             for (var i$1 = 0; i$1 < pts.length - 2; i$1++) {
42450               this$1.checkCollapse(pts[i$1], pts[i$1 + 1], pts[i$1 + 2]);
42451             }
42452           }
42453         };
42454         NodingValidator.prototype.hasInteriorIntersection = function hasInteriorIntersection (li, p0, p1) {
42455           for (var i = 0; i < li.getIntersectionNum(); i++) {
42456             var intPt = li.getIntersection(i);
42457             if (!(intPt.equals(p0) || intPt.equals(p1))) { return true }
42458           }
42459           return false
42460         };
42461         NodingValidator.prototype.checkCollapse = function checkCollapse (p0, p1, p2) {
42462           if (p0.equals(p2)) { throw new RuntimeException('found non-noded collapse at ' + NodingValidator.fact.createLineString([p0, p1, p2])) }
42463         };
42464         NodingValidator.prototype.interfaces_ = function interfaces_ () {
42465           return []
42466         };
42467         NodingValidator.prototype.getClass = function getClass () {
42468           return NodingValidator
42469         };
42470         staticAccessors$33.fact.get = function () { return new GeometryFactory() };
42471
42472         Object.defineProperties( NodingValidator, staticAccessors$33 );
42473
42474         var HotPixel = function HotPixel () {
42475           this._li = null;
42476           this._pt = null;
42477           this._originalPt = null;
42478           this._ptScaled = null;
42479           this._p0Scaled = null;
42480           this._p1Scaled = null;
42481           this._scaleFactor = null;
42482           this._minx = null;
42483           this._maxx = null;
42484           this._miny = null;
42485           this._maxy = null;
42486           this._corner = new Array(4).fill(null);
42487           this._safeEnv = null;
42488           var pt = arguments[0];
42489           var scaleFactor = arguments[1];
42490           var li = arguments[2];
42491           this._originalPt = pt;
42492           this._pt = pt;
42493           this._scaleFactor = scaleFactor;
42494           this._li = li;
42495           if (scaleFactor <= 0) { throw new IllegalArgumentException('Scale factor must be non-zero') }
42496           if (scaleFactor !== 1.0) {
42497             this._pt = new Coordinate(this.scale(pt.x), this.scale(pt.y));
42498             this._p0Scaled = new Coordinate();
42499             this._p1Scaled = new Coordinate();
42500           }
42501           this.initCorners(this._pt);
42502         };
42503
42504         var staticAccessors$34 = { SAFE_ENV_EXPANSION_FACTOR: { configurable: true } };
42505         HotPixel.prototype.intersectsScaled = function intersectsScaled (p0, p1) {
42506           var segMinx = Math.min(p0.x, p1.x);
42507           var segMaxx = Math.max(p0.x, p1.x);
42508           var segMiny = Math.min(p0.y, p1.y);
42509           var segMaxy = Math.max(p0.y, p1.y);
42510           var isOutsidePixelEnv = this._maxx < segMinx || this._minx > segMaxx || this._maxy < segMiny || this._miny > segMaxy;
42511           if (isOutsidePixelEnv) { return false }
42512           var intersects = this.intersectsToleranceSquare(p0, p1);
42513           Assert.isTrue(!(isOutsidePixelEnv && intersects), 'Found bad envelope test');
42514           return intersects
42515         };
42516         HotPixel.prototype.initCorners = function initCorners (pt) {
42517           var tolerance = 0.5;
42518           this._minx = pt.x - tolerance;
42519           this._maxx = pt.x + tolerance;
42520           this._miny = pt.y - tolerance;
42521           this._maxy = pt.y + tolerance;
42522           this._corner[0] = new Coordinate(this._maxx, this._maxy);
42523           this._corner[1] = new Coordinate(this._minx, this._maxy);
42524           this._corner[2] = new Coordinate(this._minx, this._miny);
42525           this._corner[3] = new Coordinate(this._maxx, this._miny);
42526         };
42527         HotPixel.prototype.intersects = function intersects (p0, p1) {
42528           if (this._scaleFactor === 1.0) { return this.intersectsScaled(p0, p1) }
42529           this.copyScaled(p0, this._p0Scaled);
42530           this.copyScaled(p1, this._p1Scaled);
42531           return this.intersectsScaled(this._p0Scaled, this._p1Scaled)
42532         };
42533         HotPixel.prototype.scale = function scale (val) {
42534           return Math.round(val * this._scaleFactor)
42535         };
42536         HotPixel.prototype.getCoordinate = function getCoordinate () {
42537           return this._originalPt
42538         };
42539         HotPixel.prototype.copyScaled = function copyScaled (p, pScaled) {
42540           pScaled.x = this.scale(p.x);
42541           pScaled.y = this.scale(p.y);
42542         };
42543         HotPixel.prototype.getSafeEnvelope = function getSafeEnvelope () {
42544           if (this._safeEnv === null) {
42545             var safeTolerance = HotPixel.SAFE_ENV_EXPANSION_FACTOR / this._scaleFactor;
42546             this._safeEnv = new Envelope(this._originalPt.x - safeTolerance, this._originalPt.x + safeTolerance, this._originalPt.y - safeTolerance, this._originalPt.y + safeTolerance);
42547           }
42548           return this._safeEnv
42549         };
42550         HotPixel.prototype.intersectsPixelClosure = function intersectsPixelClosure (p0, p1) {
42551           this._li.computeIntersection(p0, p1, this._corner[0], this._corner[1]);
42552           if (this._li.hasIntersection()) { return true }
42553           this._li.computeIntersection(p0, p1, this._corner[1], this._corner[2]);
42554           if (this._li.hasIntersection()) { return true }
42555           this._li.computeIntersection(p0, p1, this._corner[2], this._corner[3]);
42556           if (this._li.hasIntersection()) { return true }
42557           this._li.computeIntersection(p0, p1, this._corner[3], this._corner[0]);
42558           if (this._li.hasIntersection()) { return true }
42559           return false
42560         };
42561         HotPixel.prototype.intersectsToleranceSquare = function intersectsToleranceSquare (p0, p1) {
42562           var intersectsLeft = false;
42563           var intersectsBottom = false;
42564           this._li.computeIntersection(p0, p1, this._corner[0], this._corner[1]);
42565           if (this._li.isProper()) { return true }
42566           this._li.computeIntersection(p0, p1, this._corner[1], this._corner[2]);
42567           if (this._li.isProper()) { return true }
42568           if (this._li.hasIntersection()) { intersectsLeft = true; }
42569           this._li.computeIntersection(p0, p1, this._corner[2], this._corner[3]);
42570           if (this._li.isProper()) { return true }
42571           if (this._li.hasIntersection()) { intersectsBottom = true; }
42572           this._li.computeIntersection(p0, p1, this._corner[3], this._corner[0]);
42573           if (this._li.isProper()) { return true }
42574           if (intersectsLeft && intersectsBottom) { return true }
42575           if (p0.equals(this._pt)) { return true }
42576           if (p1.equals(this._pt)) { return true }
42577           return false
42578         };
42579         HotPixel.prototype.addSnappedNode = function addSnappedNode (segStr, segIndex) {
42580           var p0 = segStr.getCoordinate(segIndex);
42581           var p1 = segStr.getCoordinate(segIndex + 1);
42582           if (this.intersects(p0, p1)) {
42583             segStr.addIntersection(this.getCoordinate(), segIndex);
42584             return true
42585           }
42586           return false
42587         };
42588         HotPixel.prototype.interfaces_ = function interfaces_ () {
42589           return []
42590         };
42591         HotPixel.prototype.getClass = function getClass () {
42592           return HotPixel
42593         };
42594         staticAccessors$34.SAFE_ENV_EXPANSION_FACTOR.get = function () { return 0.75 };
42595
42596         Object.defineProperties( HotPixel, staticAccessors$34 );
42597
42598         var MonotoneChainSelectAction = function MonotoneChainSelectAction () {
42599           this.tempEnv1 = new Envelope();
42600           this.selectedSegment = new LineSegment();
42601         };
42602         MonotoneChainSelectAction.prototype.select = function select () {
42603           if (arguments.length === 1) ; else if (arguments.length === 2) {
42604             var mc = arguments[0];
42605             var startIndex = arguments[1];
42606             mc.getLineSegment(startIndex, this.selectedSegment);
42607             this.select(this.selectedSegment);
42608           }
42609         };
42610         MonotoneChainSelectAction.prototype.interfaces_ = function interfaces_ () {
42611           return []
42612         };
42613         MonotoneChainSelectAction.prototype.getClass = function getClass () {
42614           return MonotoneChainSelectAction
42615         };
42616
42617         var MCIndexPointSnapper = function MCIndexPointSnapper () {
42618           this._index = null;
42619           var index = arguments[0];
42620           this._index = index;
42621         };
42622
42623         var staticAccessors$35 = { HotPixelSnapAction: { configurable: true } };
42624         MCIndexPointSnapper.prototype.snap = function snap () {
42625           if (arguments.length === 1) {
42626             var hotPixel = arguments[0];
42627             return this.snap(hotPixel, null, -1)
42628           } else if (arguments.length === 3) {
42629             var hotPixel$1 = arguments[0];
42630             var parentEdge = arguments[1];
42631             var hotPixelVertexIndex = arguments[2];
42632             var pixelEnv = hotPixel$1.getSafeEnvelope();
42633             var hotPixelSnapAction = new HotPixelSnapAction(hotPixel$1, parentEdge, hotPixelVertexIndex);
42634             this._index.query(pixelEnv, {
42635               interfaces_: function () {
42636                 return [ItemVisitor]
42637               },
42638               visitItem: function (item) {
42639                 var testChain = item;
42640                 testChain.select(pixelEnv, hotPixelSnapAction);
42641               }
42642             });
42643             return hotPixelSnapAction.isNodeAdded()
42644           }
42645         };
42646         MCIndexPointSnapper.prototype.interfaces_ = function interfaces_ () {
42647           return []
42648         };
42649         MCIndexPointSnapper.prototype.getClass = function getClass () {
42650           return MCIndexPointSnapper
42651         };
42652         staticAccessors$35.HotPixelSnapAction.get = function () { return HotPixelSnapAction };
42653
42654         Object.defineProperties( MCIndexPointSnapper, staticAccessors$35 );
42655
42656         var HotPixelSnapAction = (function (MonotoneChainSelectAction$$1) {
42657           function HotPixelSnapAction () {
42658             MonotoneChainSelectAction$$1.call(this);
42659             this._hotPixel = null;
42660             this._parentEdge = null;
42661             this._hotPixelVertexIndex = null;
42662             this._isNodeAdded = false;
42663             var hotPixel = arguments[0];
42664             var parentEdge = arguments[1];
42665             var hotPixelVertexIndex = arguments[2];
42666             this._hotPixel = hotPixel;
42667             this._parentEdge = parentEdge;
42668             this._hotPixelVertexIndex = hotPixelVertexIndex;
42669           }
42670
42671           if ( MonotoneChainSelectAction$$1 ) { HotPixelSnapAction.__proto__ = MonotoneChainSelectAction$$1; }
42672           HotPixelSnapAction.prototype = Object.create( MonotoneChainSelectAction$$1 && MonotoneChainSelectAction$$1.prototype );
42673           HotPixelSnapAction.prototype.constructor = HotPixelSnapAction;
42674           HotPixelSnapAction.prototype.isNodeAdded = function isNodeAdded () {
42675             return this._isNodeAdded
42676           };
42677           HotPixelSnapAction.prototype.select = function select () {
42678             if (arguments.length === 2) {
42679               var mc = arguments[0];
42680               var startIndex = arguments[1];
42681               var ss = mc.getContext();
42682               if (this._parentEdge !== null) {
42683                 if (ss === this._parentEdge && startIndex === this._hotPixelVertexIndex) { return null }
42684               }
42685               this._isNodeAdded = this._hotPixel.addSnappedNode(ss, startIndex);
42686             } else { return MonotoneChainSelectAction$$1.prototype.select.apply(this, arguments) }
42687           };
42688           HotPixelSnapAction.prototype.interfaces_ = function interfaces_ () {
42689             return []
42690           };
42691           HotPixelSnapAction.prototype.getClass = function getClass () {
42692             return HotPixelSnapAction
42693           };
42694
42695           return HotPixelSnapAction;
42696         }(MonotoneChainSelectAction));
42697
42698         var InteriorIntersectionFinderAdder = function InteriorIntersectionFinderAdder () {
42699           this._li = null;
42700           this._interiorIntersections = null;
42701           var li = arguments[0];
42702           this._li = li;
42703           this._interiorIntersections = new ArrayList();
42704         };
42705         InteriorIntersectionFinderAdder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {
42706             var this$1 = this;
42707
42708           if (e0 === e1 && segIndex0 === segIndex1) { return null }
42709           var p00 = e0.getCoordinates()[segIndex0];
42710           var p01 = e0.getCoordinates()[segIndex0 + 1];
42711           var p10 = e1.getCoordinates()[segIndex1];
42712           var p11 = e1.getCoordinates()[segIndex1 + 1];
42713           this._li.computeIntersection(p00, p01, p10, p11);
42714           if (this._li.hasIntersection()) {
42715             if (this._li.isInteriorIntersection()) {
42716               for (var intIndex = 0; intIndex < this._li.getIntersectionNum(); intIndex++) {
42717                 this$1._interiorIntersections.add(this$1._li.getIntersection(intIndex));
42718               }
42719               e0.addIntersections(this._li, segIndex0, 0);
42720               e1.addIntersections(this._li, segIndex1, 1);
42721             }
42722           }
42723         };
42724         InteriorIntersectionFinderAdder.prototype.isDone = function isDone () {
42725           return false
42726         };
42727         InteriorIntersectionFinderAdder.prototype.getInteriorIntersections = function getInteriorIntersections () {
42728           return this._interiorIntersections
42729         };
42730         InteriorIntersectionFinderAdder.prototype.interfaces_ = function interfaces_ () {
42731           return [SegmentIntersector]
42732         };
42733         InteriorIntersectionFinderAdder.prototype.getClass = function getClass () {
42734           return InteriorIntersectionFinderAdder
42735         };
42736
42737         var MCIndexSnapRounder = function MCIndexSnapRounder () {
42738           this._pm = null;
42739           this._li = null;
42740           this._scaleFactor = null;
42741           this._noder = null;
42742           this._pointSnapper = null;
42743           this._nodedSegStrings = null;
42744           var pm = arguments[0];
42745           this._pm = pm;
42746           this._li = new RobustLineIntersector();
42747           this._li.setPrecisionModel(pm);
42748           this._scaleFactor = pm.getScale();
42749         };
42750         MCIndexSnapRounder.prototype.checkCorrectness = function checkCorrectness (inputSegmentStrings) {
42751           var resultSegStrings = NodedSegmentString.getNodedSubstrings(inputSegmentStrings);
42752           var nv = new NodingValidator(resultSegStrings);
42753           try {
42754             nv.checkValid();
42755           } catch (ex) {
42756             if (ex instanceof Exception) {
42757               ex.printStackTrace();
42758             } else { throw ex }
42759           } finally {}
42760         };
42761         MCIndexSnapRounder.prototype.getNodedSubstrings = function getNodedSubstrings () {
42762           return NodedSegmentString.getNodedSubstrings(this._nodedSegStrings)
42763         };
42764         MCIndexSnapRounder.prototype.snapRound = function snapRound (segStrings, li) {
42765           var intersections = this.findInteriorIntersections(segStrings, li);
42766           this.computeIntersectionSnaps(intersections);
42767           this.computeVertexSnaps(segStrings);
42768         };
42769         MCIndexSnapRounder.prototype.findInteriorIntersections = function findInteriorIntersections (segStrings, li) {
42770           var intFinderAdder = new InteriorIntersectionFinderAdder(li);
42771           this._noder.setSegmentIntersector(intFinderAdder);
42772           this._noder.computeNodes(segStrings);
42773           return intFinderAdder.getInteriorIntersections()
42774         };
42775         MCIndexSnapRounder.prototype.computeVertexSnaps = function computeVertexSnaps () {
42776             var this$1 = this;
42777
42778           if (hasInterface(arguments[0], Collection)) {
42779             var edges = arguments[0];
42780             for (var i0 = edges.iterator(); i0.hasNext();) {
42781               var edge0 = i0.next();
42782               this$1.computeVertexSnaps(edge0);
42783             }
42784           } else if (arguments[0] instanceof NodedSegmentString) {
42785             var e = arguments[0];
42786             var pts0 = e.getCoordinates();
42787             for (var i = 0; i < pts0.length; i++) {
42788               var hotPixel = new HotPixel(pts0[i], this$1._scaleFactor, this$1._li);
42789               var isNodeAdded = this$1._pointSnapper.snap(hotPixel, e, i);
42790               if (isNodeAdded) {
42791                 e.addIntersection(pts0[i], i);
42792               }
42793             }
42794           }
42795         };
42796         MCIndexSnapRounder.prototype.computeNodes = function computeNodes (inputSegmentStrings) {
42797           this._nodedSegStrings = inputSegmentStrings;
42798           this._noder = new MCIndexNoder();
42799           this._pointSnapper = new MCIndexPointSnapper(this._noder.getIndex());
42800           this.snapRound(inputSegmentStrings, this._li);
42801         };
42802         MCIndexSnapRounder.prototype.computeIntersectionSnaps = function computeIntersectionSnaps (snapPts) {
42803             var this$1 = this;
42804
42805           for (var it = snapPts.iterator(); it.hasNext();) {
42806             var snapPt = it.next();
42807             var hotPixel = new HotPixel(snapPt, this$1._scaleFactor, this$1._li);
42808             this$1._pointSnapper.snap(hotPixel);
42809           }
42810         };
42811         MCIndexSnapRounder.prototype.interfaces_ = function interfaces_ () {
42812           return [Noder]
42813         };
42814         MCIndexSnapRounder.prototype.getClass = function getClass () {
42815           return MCIndexSnapRounder
42816         };
42817
42818         var BufferOp = function BufferOp () {
42819           this._argGeom = null;
42820           this._distance = null;
42821           this._bufParams = new BufferParameters();
42822           this._resultGeometry = null;
42823           this._saveException = null;
42824           if (arguments.length === 1) {
42825             var g = arguments[0];
42826             this._argGeom = g;
42827           } else if (arguments.length === 2) {
42828             var g$1 = arguments[0];
42829             var bufParams = arguments[1];
42830             this._argGeom = g$1;
42831             this._bufParams = bufParams;
42832           }
42833         };
42834
42835         var staticAccessors$32 = { CAP_ROUND: { configurable: true },CAP_BUTT: { configurable: true },CAP_FLAT: { configurable: true },CAP_SQUARE: { configurable: true },MAX_PRECISION_DIGITS: { configurable: true } };
42836         BufferOp.prototype.bufferFixedPrecision = function bufferFixedPrecision (fixedPM) {
42837           var noder = new ScaledNoder(new MCIndexSnapRounder(new PrecisionModel(1.0)), fixedPM.getScale());
42838           var bufBuilder = new BufferBuilder(this._bufParams);
42839           bufBuilder.setWorkingPrecisionModel(fixedPM);
42840           bufBuilder.setNoder(noder);
42841           this._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance);
42842         };
42843         BufferOp.prototype.bufferReducedPrecision = function bufferReducedPrecision () {
42844             var this$1 = this;
42845
42846           if (arguments.length === 0) {
42847             for (var precDigits = BufferOp.MAX_PRECISION_DIGITS; precDigits >= 0; precDigits--) {
42848               try {
42849                 this$1.bufferReducedPrecision(precDigits);
42850               } catch (ex) {
42851                 if (ex instanceof TopologyException) {
42852                   this$1._saveException = ex;
42853                 } else { throw ex }
42854               } finally {}
42855               if (this$1._resultGeometry !== null) { return null }
42856             }
42857             throw this._saveException
42858           } else if (arguments.length === 1) {
42859             var precisionDigits = arguments[0];
42860             var sizeBasedScaleFactor = BufferOp.precisionScaleFactor(this._argGeom, this._distance, precisionDigits);
42861             var fixedPM = new PrecisionModel(sizeBasedScaleFactor);
42862             this.bufferFixedPrecision(fixedPM);
42863           }
42864         };
42865         BufferOp.prototype.computeGeometry = function computeGeometry () {
42866           this.bufferOriginalPrecision();
42867           if (this._resultGeometry !== null) { return null }
42868           var argPM = this._argGeom.getFactory().getPrecisionModel();
42869           if (argPM.getType() === PrecisionModel.FIXED) { this.bufferFixedPrecision(argPM); } else { this.bufferReducedPrecision(); }
42870         };
42871         BufferOp.prototype.setQuadrantSegments = function setQuadrantSegments (quadrantSegments) {
42872           this._bufParams.setQuadrantSegments(quadrantSegments);
42873         };
42874         BufferOp.prototype.bufferOriginalPrecision = function bufferOriginalPrecision () {
42875           try {
42876             var bufBuilder = new BufferBuilder(this._bufParams);
42877             this._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance);
42878           } catch (ex) {
42879             if (ex instanceof RuntimeException) {
42880               this._saveException = ex;
42881             } else { throw ex }
42882           } finally {}
42883         };
42884         BufferOp.prototype.getResultGeometry = function getResultGeometry (distance) {
42885           this._distance = distance;
42886           this.computeGeometry();
42887           return this._resultGeometry
42888         };
42889         BufferOp.prototype.setEndCapStyle = function setEndCapStyle (endCapStyle) {
42890           this._bufParams.setEndCapStyle(endCapStyle);
42891         };
42892         BufferOp.prototype.interfaces_ = function interfaces_ () {
42893           return []
42894         };
42895         BufferOp.prototype.getClass = function getClass () {
42896           return BufferOp
42897         };
42898         BufferOp.bufferOp = function bufferOp () {
42899           if (arguments.length === 2) {
42900             var g = arguments[0];
42901             var distance = arguments[1];
42902             var gBuf = new BufferOp(g);
42903             var geomBuf = gBuf.getResultGeometry(distance);
42904             return geomBuf
42905           } else if (arguments.length === 3) {
42906             if (Number.isInteger(arguments[2]) && (arguments[0] instanceof Geometry && typeof arguments[1] === 'number')) {
42907               var g$1 = arguments[0];
42908               var distance$1 = arguments[1];
42909               var quadrantSegments = arguments[2];
42910               var bufOp = new BufferOp(g$1);
42911               bufOp.setQuadrantSegments(quadrantSegments);
42912               var geomBuf$1 = bufOp.getResultGeometry(distance$1);
42913               return geomBuf$1
42914             } else if (arguments[2] instanceof BufferParameters && (arguments[0] instanceof Geometry && typeof arguments[1] === 'number')) {
42915               var g$2 = arguments[0];
42916               var distance$2 = arguments[1];
42917               var params = arguments[2];
42918               var bufOp$1 = new BufferOp(g$2, params);
42919               var geomBuf$2 = bufOp$1.getResultGeometry(distance$2);
42920               return geomBuf$2
42921             }
42922           } else if (arguments.length === 4) {
42923             var g$3 = arguments[0];
42924             var distance$3 = arguments[1];
42925             var quadrantSegments$1 = arguments[2];
42926             var endCapStyle = arguments[3];
42927             var bufOp$2 = new BufferOp(g$3);
42928             bufOp$2.setQuadrantSegments(quadrantSegments$1);
42929             bufOp$2.setEndCapStyle(endCapStyle);
42930             var geomBuf$3 = bufOp$2.getResultGeometry(distance$3);
42931             return geomBuf$3
42932           }
42933         };
42934         BufferOp.precisionScaleFactor = function precisionScaleFactor (g, distance, maxPrecisionDigits) {
42935           var env = g.getEnvelopeInternal();
42936           var envMax = MathUtil.max(Math.abs(env.getMaxX()), Math.abs(env.getMaxY()), Math.abs(env.getMinX()), Math.abs(env.getMinY()));
42937           var expandByDistance = distance > 0.0 ? distance : 0.0;
42938           var bufEnvMax = envMax + 2 * expandByDistance;
42939           var bufEnvPrecisionDigits = Math.trunc(Math.log(bufEnvMax) / Math.log(10) + 1.0);
42940           var minUnitLog10 = maxPrecisionDigits - bufEnvPrecisionDigits;
42941           var scaleFactor = Math.pow(10.0, minUnitLog10);
42942           return scaleFactor
42943         };
42944         staticAccessors$32.CAP_ROUND.get = function () { return BufferParameters.CAP_ROUND };
42945         staticAccessors$32.CAP_BUTT.get = function () { return BufferParameters.CAP_FLAT };
42946         staticAccessors$32.CAP_FLAT.get = function () { return BufferParameters.CAP_FLAT };
42947         staticAccessors$32.CAP_SQUARE.get = function () { return BufferParameters.CAP_SQUARE };
42948         staticAccessors$32.MAX_PRECISION_DIGITS.get = function () { return 12 };
42949
42950         Object.defineProperties( BufferOp, staticAccessors$32 );
42951
42952         var PointPairDistance = function PointPairDistance () {
42953           this._pt = [new Coordinate(), new Coordinate()];
42954           this._distance = Double.NaN;
42955           this._isNull = true;
42956         };
42957         PointPairDistance.prototype.getCoordinates = function getCoordinates () {
42958           return this._pt
42959         };
42960         PointPairDistance.prototype.getCoordinate = function getCoordinate (i) {
42961           return this._pt[i]
42962         };
42963         PointPairDistance.prototype.setMinimum = function setMinimum () {
42964           if (arguments.length === 1) {
42965             var ptDist = arguments[0];
42966             this.setMinimum(ptDist._pt[0], ptDist._pt[1]);
42967           } else if (arguments.length === 2) {
42968             var p0 = arguments[0];
42969             var p1 = arguments[1];
42970             if (this._isNull) {
42971               this.initialize(p0, p1);
42972               return null
42973             }
42974             var dist = p0.distance(p1);
42975             if (dist < this._distance) { this.initialize(p0, p1, dist); }
42976           }
42977         };
42978         PointPairDistance.prototype.initialize = function initialize () {
42979           if (arguments.length === 0) {
42980             this._isNull = true;
42981           } else if (arguments.length === 2) {
42982             var p0 = arguments[0];
42983             var p1 = arguments[1];
42984             this._pt[0].setCoordinate(p0);
42985             this._pt[1].setCoordinate(p1);
42986             this._distance = p0.distance(p1);
42987             this._isNull = false;
42988           } else if (arguments.length === 3) {
42989             var p0$1 = arguments[0];
42990             var p1$1 = arguments[1];
42991             var distance = arguments[2];
42992             this._pt[0].setCoordinate(p0$1);
42993             this._pt[1].setCoordinate(p1$1);
42994             this._distance = distance;
42995             this._isNull = false;
42996           }
42997         };
42998         PointPairDistance.prototype.getDistance = function getDistance () {
42999           return this._distance
43000         };
43001         PointPairDistance.prototype.setMaximum = function setMaximum () {
43002           if (arguments.length === 1) {
43003             var ptDist = arguments[0];
43004             this.setMaximum(ptDist._pt[0], ptDist._pt[1]);
43005           } else if (arguments.length === 2) {
43006             var p0 = arguments[0];
43007             var p1 = arguments[1];
43008             if (this._isNull) {
43009               this.initialize(p0, p1);
43010               return null
43011             }
43012             var dist = p0.distance(p1);
43013             if (dist > this._distance) { this.initialize(p0, p1, dist); }
43014           }
43015         };
43016         PointPairDistance.prototype.interfaces_ = function interfaces_ () {
43017           return []
43018         };
43019         PointPairDistance.prototype.getClass = function getClass () {
43020           return PointPairDistance
43021         };
43022
43023         var DistanceToPointFinder = function DistanceToPointFinder () {};
43024
43025         DistanceToPointFinder.prototype.interfaces_ = function interfaces_ () {
43026           return []
43027         };
43028         DistanceToPointFinder.prototype.getClass = function getClass () {
43029           return DistanceToPointFinder
43030         };
43031         DistanceToPointFinder.computeDistance = function computeDistance () {
43032           if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof LineString && arguments[1] instanceof Coordinate)) {
43033             var line = arguments[0];
43034             var pt = arguments[1];
43035             var ptDist = arguments[2];
43036             var coords = line.getCoordinates();
43037             var tempSegment = new LineSegment();
43038             for (var i = 0; i < coords.length - 1; i++) {
43039               tempSegment.setCoordinates(coords[i], coords[i + 1]);
43040               var closestPt = tempSegment.closestPoint(pt);
43041               ptDist.setMinimum(closestPt, pt);
43042             }
43043           } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof Polygon && arguments[1] instanceof Coordinate)) {
43044             var poly = arguments[0];
43045             var pt$1 = arguments[1];
43046             var ptDist$1 = arguments[2];
43047             DistanceToPointFinder.computeDistance(poly.getExteriorRing(), pt$1, ptDist$1);
43048             for (var i$1 = 0; i$1 < poly.getNumInteriorRing(); i$1++) {
43049               DistanceToPointFinder.computeDistance(poly.getInteriorRingN(i$1), pt$1, ptDist$1);
43050             }
43051           } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof Geometry && arguments[1] instanceof Coordinate)) {
43052             var geom = arguments[0];
43053             var pt$2 = arguments[1];
43054             var ptDist$2 = arguments[2];
43055             if (geom instanceof LineString) {
43056               DistanceToPointFinder.computeDistance(geom, pt$2, ptDist$2);
43057             } else if (geom instanceof Polygon) {
43058               DistanceToPointFinder.computeDistance(geom, pt$2, ptDist$2);
43059             } else if (geom instanceof GeometryCollection) {
43060               var gc = geom;
43061               for (var i$2 = 0; i$2 < gc.getNumGeometries(); i$2++) {
43062                 var g = gc.getGeometryN(i$2);
43063                 DistanceToPointFinder.computeDistance(g, pt$2, ptDist$2);
43064               }
43065             } else {
43066               ptDist$2.setMinimum(geom.getCoordinate(), pt$2);
43067             }
43068           } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof LineSegment && arguments[1] instanceof Coordinate)) {
43069             var segment = arguments[0];
43070             var pt$3 = arguments[1];
43071             var ptDist$3 = arguments[2];
43072             var closestPt$1 = segment.closestPoint(pt$3);
43073             ptDist$3.setMinimum(closestPt$1, pt$3);
43074           }
43075         };
43076
43077         var BufferCurveMaximumDistanceFinder = function BufferCurveMaximumDistanceFinder (inputGeom) {
43078           this._maxPtDist = new PointPairDistance();
43079           this._inputGeom = inputGeom || null;
43080         };
43081
43082         var staticAccessors$36 = { MaxPointDistanceFilter: { configurable: true },MaxMidpointDistanceFilter: { configurable: true } };
43083         BufferCurveMaximumDistanceFinder.prototype.computeMaxMidpointDistance = function computeMaxMidpointDistance (curve) {
43084           var distFilter = new MaxMidpointDistanceFilter(this._inputGeom);
43085           curve.apply(distFilter);
43086           this._maxPtDist.setMaximum(distFilter.getMaxPointDistance());
43087         };
43088         BufferCurveMaximumDistanceFinder.prototype.computeMaxVertexDistance = function computeMaxVertexDistance (curve) {
43089           var distFilter = new MaxPointDistanceFilter(this._inputGeom);
43090           curve.apply(distFilter);
43091           this._maxPtDist.setMaximum(distFilter.getMaxPointDistance());
43092         };
43093         BufferCurveMaximumDistanceFinder.prototype.findDistance = function findDistance (bufferCurve) {
43094           this.computeMaxVertexDistance(bufferCurve);
43095           this.computeMaxMidpointDistance(bufferCurve);
43096           return this._maxPtDist.getDistance()
43097         };
43098         BufferCurveMaximumDistanceFinder.prototype.getDistancePoints = function getDistancePoints () {
43099           return this._maxPtDist
43100         };
43101         BufferCurveMaximumDistanceFinder.prototype.interfaces_ = function interfaces_ () {
43102           return []
43103         };
43104         BufferCurveMaximumDistanceFinder.prototype.getClass = function getClass () {
43105           return BufferCurveMaximumDistanceFinder
43106         };
43107         staticAccessors$36.MaxPointDistanceFilter.get = function () { return MaxPointDistanceFilter };
43108         staticAccessors$36.MaxMidpointDistanceFilter.get = function () { return MaxMidpointDistanceFilter };
43109
43110         Object.defineProperties( BufferCurveMaximumDistanceFinder, staticAccessors$36 );
43111
43112         var MaxPointDistanceFilter = function MaxPointDistanceFilter (geom) {
43113           this._maxPtDist = new PointPairDistance();
43114           this._minPtDist = new PointPairDistance();
43115           this._geom = geom || null;
43116         };
43117         MaxPointDistanceFilter.prototype.filter = function filter (pt) {
43118           this._minPtDist.initialize();
43119           DistanceToPointFinder.computeDistance(this._geom, pt, this._minPtDist);
43120           this._maxPtDist.setMaximum(this._minPtDist);
43121         };
43122         MaxPointDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {
43123           return this._maxPtDist
43124         };
43125         MaxPointDistanceFilter.prototype.interfaces_ = function interfaces_ () {
43126           return [CoordinateFilter]
43127         };
43128         MaxPointDistanceFilter.prototype.getClass = function getClass () {
43129           return MaxPointDistanceFilter
43130         };
43131
43132         var MaxMidpointDistanceFilter = function MaxMidpointDistanceFilter (geom) {
43133           this._maxPtDist = new PointPairDistance();
43134           this._minPtDist = new PointPairDistance();
43135           this._geom = geom || null;
43136         };
43137         MaxMidpointDistanceFilter.prototype.filter = function filter (seq, index) {
43138           if (index === 0) { return null }
43139           var p0 = seq.getCoordinate(index - 1);
43140           var p1 = seq.getCoordinate(index);
43141           var midPt = new Coordinate((p0.x + p1.x) / 2, (p0.y + p1.y) / 2);
43142           this._minPtDist.initialize();
43143           DistanceToPointFinder.computeDistance(this._geom, midPt, this._minPtDist);
43144           this._maxPtDist.setMaximum(this._minPtDist);
43145         };
43146         MaxMidpointDistanceFilter.prototype.isDone = function isDone () {
43147           return false
43148         };
43149         MaxMidpointDistanceFilter.prototype.isGeometryChanged = function isGeometryChanged () {
43150           return false
43151         };
43152         MaxMidpointDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {
43153           return this._maxPtDist
43154         };
43155         MaxMidpointDistanceFilter.prototype.interfaces_ = function interfaces_ () {
43156           return [CoordinateSequenceFilter]
43157         };
43158         MaxMidpointDistanceFilter.prototype.getClass = function getClass () {
43159           return MaxMidpointDistanceFilter
43160         };
43161
43162         var PolygonExtracter = function PolygonExtracter (comps) {
43163           this._comps = comps || null;
43164         };
43165         PolygonExtracter.prototype.filter = function filter (geom) {
43166           if (geom instanceof Polygon) { this._comps.add(geom); }
43167         };
43168         PolygonExtracter.prototype.interfaces_ = function interfaces_ () {
43169           return [GeometryFilter]
43170         };
43171         PolygonExtracter.prototype.getClass = function getClass () {
43172           return PolygonExtracter
43173         };
43174         PolygonExtracter.getPolygons = function getPolygons () {
43175           if (arguments.length === 1) {
43176             var geom = arguments[0];
43177             return PolygonExtracter.getPolygons(geom, new ArrayList())
43178           } else if (arguments.length === 2) {
43179             var geom$1 = arguments[0];
43180             var list = arguments[1];
43181             if (geom$1 instanceof Polygon) {
43182               list.add(geom$1);
43183             } else if (geom$1 instanceof GeometryCollection) {
43184               geom$1.apply(new PolygonExtracter(list));
43185             }
43186             return list
43187           }
43188         };
43189
43190         var LinearComponentExtracter = function LinearComponentExtracter () {
43191           this._lines = null;
43192           this._isForcedToLineString = false;
43193           if (arguments.length === 1) {
43194             var lines = arguments[0];
43195             this._lines = lines;
43196           } else if (arguments.length === 2) {
43197             var lines$1 = arguments[0];
43198             var isForcedToLineString = arguments[1];
43199             this._lines = lines$1;
43200             this._isForcedToLineString = isForcedToLineString;
43201           }
43202         };
43203         LinearComponentExtracter.prototype.filter = function filter (geom) {
43204           if (this._isForcedToLineString && geom instanceof LinearRing) {
43205             var line = geom.getFactory().createLineString(geom.getCoordinateSequence());
43206             this._lines.add(line);
43207             return null
43208           }
43209           if (geom instanceof LineString) { this._lines.add(geom); }
43210         };
43211         LinearComponentExtracter.prototype.setForceToLineString = function setForceToLineString (isForcedToLineString) {
43212           this._isForcedToLineString = isForcedToLineString;
43213         };
43214         LinearComponentExtracter.prototype.interfaces_ = function interfaces_ () {
43215           return [GeometryComponentFilter]
43216         };
43217         LinearComponentExtracter.prototype.getClass = function getClass () {
43218           return LinearComponentExtracter
43219         };
43220         LinearComponentExtracter.getGeometry = function getGeometry () {
43221           if (arguments.length === 1) {
43222             var geom = arguments[0];
43223             return geom.getFactory().buildGeometry(LinearComponentExtracter.getLines(geom))
43224           } else if (arguments.length === 2) {
43225             var geom$1 = arguments[0];
43226             var forceToLineString = arguments[1];
43227             return geom$1.getFactory().buildGeometry(LinearComponentExtracter.getLines(geom$1, forceToLineString))
43228           }
43229         };
43230         LinearComponentExtracter.getLines = function getLines () {
43231           if (arguments.length === 1) {
43232             var geom = arguments[0];
43233             return LinearComponentExtracter.getLines(geom, false)
43234           } else if (arguments.length === 2) {
43235             if (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], Collection)) {
43236               var geoms = arguments[0];
43237               var lines$1 = arguments[1];
43238               for (var i = geoms.iterator(); i.hasNext();) {
43239                 var g = i.next();
43240                 LinearComponentExtracter.getLines(g, lines$1);
43241               }
43242               return lines$1
43243             } else if (arguments[0] instanceof Geometry && typeof arguments[1] === 'boolean') {
43244               var geom$1 = arguments[0];
43245               var forceToLineString = arguments[1];
43246               var lines = new ArrayList();
43247               geom$1.apply(new LinearComponentExtracter(lines, forceToLineString));
43248               return lines
43249             } else if (arguments[0] instanceof Geometry && hasInterface(arguments[1], Collection)) {
43250               var geom$2 = arguments[0];
43251               var lines$2 = arguments[1];
43252               if (geom$2 instanceof LineString) {
43253                 lines$2.add(geom$2);
43254               } else {
43255                 geom$2.apply(new LinearComponentExtracter(lines$2));
43256               }
43257               return lines$2
43258             }
43259           } else if (arguments.length === 3) {
43260             if (typeof arguments[2] === 'boolean' && (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], Collection))) {
43261               var geoms$1 = arguments[0];
43262               var lines$3 = arguments[1];
43263               var forceToLineString$1 = arguments[2];
43264               for (var i$1 = geoms$1.iterator(); i$1.hasNext();) {
43265                 var g$1 = i$1.next();
43266                 LinearComponentExtracter.getLines(g$1, lines$3, forceToLineString$1);
43267               }
43268               return lines$3
43269             } else if (typeof arguments[2] === 'boolean' && (arguments[0] instanceof Geometry && hasInterface(arguments[1], Collection))) {
43270               var geom$3 = arguments[0];
43271               var lines$4 = arguments[1];
43272               var forceToLineString$2 = arguments[2];
43273               geom$3.apply(new LinearComponentExtracter(lines$4, forceToLineString$2));
43274               return lines$4
43275             }
43276           }
43277         };
43278
43279         var PointLocator = function PointLocator () {
43280           this._boundaryRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;
43281           this._isIn = null;
43282           this._numBoundaries = null;
43283           if (arguments.length === 0) ; else if (arguments.length === 1) {
43284             var boundaryRule = arguments[0];
43285             if (boundaryRule === null) { throw new IllegalArgumentException('Rule must be non-null') }
43286             this._boundaryRule = boundaryRule;
43287           }
43288         };
43289         PointLocator.prototype.locateInternal = function locateInternal () {
43290             var this$1 = this;
43291
43292           if (arguments[0] instanceof Coordinate && arguments[1] instanceof Polygon) {
43293             var p = arguments[0];
43294             var poly = arguments[1];
43295             if (poly.isEmpty()) { return Location.EXTERIOR }
43296             var shell = poly.getExteriorRing();
43297             var shellLoc = this.locateInPolygonRing(p, shell);
43298             if (shellLoc === Location.EXTERIOR) { return Location.EXTERIOR }
43299             if (shellLoc === Location.BOUNDARY) { return Location.BOUNDARY }
43300             for (var i = 0; i < poly.getNumInteriorRing(); i++) {
43301               var hole = poly.getInteriorRingN(i);
43302               var holeLoc = this$1.locateInPolygonRing(p, hole);
43303               if (holeLoc === Location.INTERIOR) { return Location.EXTERIOR }
43304               if (holeLoc === Location.BOUNDARY) { return Location.BOUNDARY }
43305             }
43306             return Location.INTERIOR
43307           } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof LineString) {
43308             var p$1 = arguments[0];
43309             var l = arguments[1];
43310             if (!l.getEnvelopeInternal().intersects(p$1)) { return Location.EXTERIOR }
43311             var pt = l.getCoordinates();
43312             if (!l.isClosed()) {
43313               if (p$1.equals(pt[0]) || p$1.equals(pt[pt.length - 1])) {
43314                 return Location.BOUNDARY
43315               }
43316             }
43317             if (CGAlgorithms.isOnLine(p$1, pt)) { return Location.INTERIOR }
43318             return Location.EXTERIOR
43319           } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Point) {
43320             var p$2 = arguments[0];
43321             var pt$1 = arguments[1];
43322             var ptCoord = pt$1.getCoordinate();
43323             if (ptCoord.equals2D(p$2)) { return Location.INTERIOR }
43324             return Location.EXTERIOR
43325           }
43326         };
43327         PointLocator.prototype.locateInPolygonRing = function locateInPolygonRing (p, ring) {
43328           if (!ring.getEnvelopeInternal().intersects(p)) { return Location.EXTERIOR }
43329           return CGAlgorithms.locatePointInRing(p, ring.getCoordinates())
43330         };
43331         PointLocator.prototype.intersects = function intersects (p, geom) {
43332           return this.locate(p, geom) !== Location.EXTERIOR
43333         };
43334         PointLocator.prototype.updateLocationInfo = function updateLocationInfo (loc) {
43335           if (loc === Location.INTERIOR) { this._isIn = true; }
43336           if (loc === Location.BOUNDARY) { this._numBoundaries++; }
43337         };
43338         PointLocator.prototype.computeLocation = function computeLocation (p, geom) {
43339             var this$1 = this;
43340
43341           if (geom instanceof Point) {
43342             this.updateLocationInfo(this.locateInternal(p, geom));
43343           }
43344           if (geom instanceof LineString) {
43345             this.updateLocationInfo(this.locateInternal(p, geom));
43346           } else if (geom instanceof Polygon) {
43347             this.updateLocationInfo(this.locateInternal(p, geom));
43348           } else if (geom instanceof MultiLineString) {
43349             var ml = geom;
43350             for (var i = 0; i < ml.getNumGeometries(); i++) {
43351               var l = ml.getGeometryN(i);
43352               this$1.updateLocationInfo(this$1.locateInternal(p, l));
43353             }
43354           } else if (geom instanceof MultiPolygon) {
43355             var mpoly = geom;
43356             for (var i$1 = 0; i$1 < mpoly.getNumGeometries(); i$1++) {
43357               var poly = mpoly.getGeometryN(i$1);
43358               this$1.updateLocationInfo(this$1.locateInternal(p, poly));
43359             }
43360           } else if (geom instanceof GeometryCollection) {
43361             var geomi = new GeometryCollectionIterator(geom);
43362             while (geomi.hasNext()) {
43363               var g2 = geomi.next();
43364               if (g2 !== geom) { this$1.computeLocation(p, g2); }
43365             }
43366           }
43367         };
43368         PointLocator.prototype.locate = function locate (p, geom) {
43369           if (geom.isEmpty()) { return Location.EXTERIOR }
43370           if (geom instanceof LineString) {
43371             return this.locateInternal(p, geom)
43372           } else if (geom instanceof Polygon) {
43373             return this.locateInternal(p, geom)
43374           }
43375           this._isIn = false;
43376           this._numBoundaries = 0;
43377           this.computeLocation(p, geom);
43378           if (this._boundaryRule.isInBoundary(this._numBoundaries)) { return Location.BOUNDARY }
43379           if (this._numBoundaries > 0 || this._isIn) { return Location.INTERIOR }
43380           return Location.EXTERIOR
43381         };
43382         PointLocator.prototype.interfaces_ = function interfaces_ () {
43383           return []
43384         };
43385         PointLocator.prototype.getClass = function getClass () {
43386           return PointLocator
43387         };
43388
43389         var GeometryLocation = function GeometryLocation () {
43390           this._component = null;
43391           this._segIndex = null;
43392           this._pt = null;
43393           if (arguments.length === 2) {
43394             var component = arguments[0];
43395             var pt = arguments[1];
43396             GeometryLocation.call(this, component, GeometryLocation.INSIDE_AREA, pt);
43397           } else if (arguments.length === 3) {
43398             var component$1 = arguments[0];
43399             var segIndex = arguments[1];
43400             var pt$1 = arguments[2];
43401             this._component = component$1;
43402             this._segIndex = segIndex;
43403             this._pt = pt$1;
43404           }
43405         };
43406
43407         var staticAccessors$38 = { INSIDE_AREA: { configurable: true } };
43408         GeometryLocation.prototype.isInsideArea = function isInsideArea () {
43409           return this._segIndex === GeometryLocation.INSIDE_AREA
43410         };
43411         GeometryLocation.prototype.getCoordinate = function getCoordinate () {
43412           return this._pt
43413         };
43414         GeometryLocation.prototype.getGeometryComponent = function getGeometryComponent () {
43415           return this._component
43416         };
43417         GeometryLocation.prototype.getSegmentIndex = function getSegmentIndex () {
43418           return this._segIndex
43419         };
43420         GeometryLocation.prototype.interfaces_ = function interfaces_ () {
43421           return []
43422         };
43423         GeometryLocation.prototype.getClass = function getClass () {
43424           return GeometryLocation
43425         };
43426         staticAccessors$38.INSIDE_AREA.get = function () { return -1 };
43427
43428         Object.defineProperties( GeometryLocation, staticAccessors$38 );
43429
43430         var PointExtracter = function PointExtracter (pts) {
43431           this._pts = pts || null;
43432         };
43433         PointExtracter.prototype.filter = function filter (geom) {
43434           if (geom instanceof Point) { this._pts.add(geom); }
43435         };
43436         PointExtracter.prototype.interfaces_ = function interfaces_ () {
43437           return [GeometryFilter]
43438         };
43439         PointExtracter.prototype.getClass = function getClass () {
43440           return PointExtracter
43441         };
43442         PointExtracter.getPoints = function getPoints () {
43443           if (arguments.length === 1) {
43444             var geom = arguments[0];
43445             if (geom instanceof Point) {
43446               return Collections.singletonList(geom)
43447             }
43448             return PointExtracter.getPoints(geom, new ArrayList())
43449           } else if (arguments.length === 2) {
43450             var geom$1 = arguments[0];
43451             var list = arguments[1];
43452             if (geom$1 instanceof Point) {
43453               list.add(geom$1);
43454             } else if (geom$1 instanceof GeometryCollection) {
43455               geom$1.apply(new PointExtracter(list));
43456             }
43457             return list
43458           }
43459         };
43460
43461         var ConnectedElementLocationFilter = function ConnectedElementLocationFilter () {
43462           this._locations = null;
43463           var locations = arguments[0];
43464           this._locations = locations;
43465         };
43466         ConnectedElementLocationFilter.prototype.filter = function filter (geom) {
43467           if (geom instanceof Point || geom instanceof LineString || geom instanceof Polygon) { this._locations.add(new GeometryLocation(geom, 0, geom.getCoordinate())); }
43468         };
43469         ConnectedElementLocationFilter.prototype.interfaces_ = function interfaces_ () {
43470           return [GeometryFilter]
43471         };
43472         ConnectedElementLocationFilter.prototype.getClass = function getClass () {
43473           return ConnectedElementLocationFilter
43474         };
43475         ConnectedElementLocationFilter.getLocations = function getLocations (geom) {
43476           var locations = new ArrayList();
43477           geom.apply(new ConnectedElementLocationFilter(locations));
43478           return locations
43479         };
43480
43481         var DistanceOp = function DistanceOp () {
43482           this._geom = null;
43483           this._terminateDistance = 0.0;
43484           this._ptLocator = new PointLocator();
43485           this._minDistanceLocation = null;
43486           this._minDistance = Double.MAX_VALUE;
43487           if (arguments.length === 2) {
43488             var g0 = arguments[0];
43489             var g1 = arguments[1];
43490             this._geom = [g0, g1];
43491             this._terminateDistance = 0.0;
43492           } else if (arguments.length === 3) {
43493             var g0$1 = arguments[0];
43494             var g1$1 = arguments[1];
43495             var terminateDistance = arguments[2];
43496             this._geom = new Array(2).fill(null);
43497             this._geom[0] = g0$1;
43498             this._geom[1] = g1$1;
43499             this._terminateDistance = terminateDistance;
43500           }
43501         };
43502         DistanceOp.prototype.computeContainmentDistance = function computeContainmentDistance () {
43503             var this$1 = this;
43504
43505           if (arguments.length === 0) {
43506             var locPtPoly = new Array(2).fill(null);
43507             this.computeContainmentDistance(0, locPtPoly);
43508             if (this._minDistance <= this._terminateDistance) { return null }
43509             this.computeContainmentDistance(1, locPtPoly);
43510           } else if (arguments.length === 2) {
43511             var polyGeomIndex = arguments[0];
43512             var locPtPoly$1 = arguments[1];
43513             var locationsIndex = 1 - polyGeomIndex;
43514             var polys = PolygonExtracter.getPolygons(this._geom[polyGeomIndex]);
43515             if (polys.size() > 0) {
43516               var insideLocs = ConnectedElementLocationFilter.getLocations(this._geom[locationsIndex]);
43517               this.computeContainmentDistance(insideLocs, polys, locPtPoly$1);
43518               if (this._minDistance <= this._terminateDistance) {
43519                 this._minDistanceLocation[locationsIndex] = locPtPoly$1[0];
43520                 this._minDistanceLocation[polyGeomIndex] = locPtPoly$1[1];
43521                 return null
43522               }
43523             }
43524           } else if (arguments.length === 3) {
43525             if (arguments[2] instanceof Array && (hasInterface(arguments[0], List) && hasInterface(arguments[1], List))) {
43526               var locs = arguments[0];
43527               var polys$1 = arguments[1];
43528               var locPtPoly$2 = arguments[2];
43529               for (var i = 0; i < locs.size(); i++) {
43530                 var loc = locs.get(i);
43531                 for (var j = 0; j < polys$1.size(); j++) {
43532                   this$1.computeContainmentDistance(loc, polys$1.get(j), locPtPoly$2);
43533                   if (this$1._minDistance <= this$1._terminateDistance) { return null }
43534                 }
43535               }
43536             } else if (arguments[2] instanceof Array && (arguments[0] instanceof GeometryLocation && arguments[1] instanceof Polygon)) {
43537               var ptLoc = arguments[0];
43538               var poly = arguments[1];
43539               var locPtPoly$3 = arguments[2];
43540               var pt = ptLoc.getCoordinate();
43541               if (Location.EXTERIOR !== this._ptLocator.locate(pt, poly)) {
43542                 this._minDistance = 0.0;
43543                 locPtPoly$3[0] = ptLoc;
43544                 locPtPoly$3[1] = new GeometryLocation(poly, pt);
43545
43546                 return null
43547               }
43548             }
43549           }
43550         };
43551         DistanceOp.prototype.computeMinDistanceLinesPoints = function computeMinDistanceLinesPoints (lines, points, locGeom) {
43552             var this$1 = this;
43553
43554           for (var i = 0; i < lines.size(); i++) {
43555             var line = lines.get(i);
43556             for (var j = 0; j < points.size(); j++) {
43557               var pt = points.get(j);
43558               this$1.computeMinDistance(line, pt, locGeom);
43559               if (this$1._minDistance <= this$1._terminateDistance) { return null }
43560             }
43561           }
43562         };
43563         DistanceOp.prototype.computeFacetDistance = function computeFacetDistance () {
43564           var locGeom = new Array(2).fill(null);
43565           var lines0 = LinearComponentExtracter.getLines(this._geom[0]);
43566           var lines1 = LinearComponentExtracter.getLines(this._geom[1]);
43567           var pts0 = PointExtracter.getPoints(this._geom[0]);
43568           var pts1 = PointExtracter.getPoints(this._geom[1]);
43569           this.computeMinDistanceLines(lines0, lines1, locGeom);
43570           this.updateMinDistance(locGeom, false);
43571           if (this._minDistance <= this._terminateDistance) { return null }
43572           locGeom[0] = null;
43573           locGeom[1] = null;
43574           this.computeMinDistanceLinesPoints(lines0, pts1, locGeom);
43575           this.updateMinDistance(locGeom, false);
43576           if (this._minDistance <= this._terminateDistance) { return null }
43577           locGeom[0] = null;
43578           locGeom[1] = null;
43579           this.computeMinDistanceLinesPoints(lines1, pts0, locGeom);
43580           this.updateMinDistance(locGeom, true);
43581           if (this._minDistance <= this._terminateDistance) { return null }
43582           locGeom[0] = null;
43583           locGeom[1] = null;
43584           this.computeMinDistancePoints(pts0, pts1, locGeom);
43585           this.updateMinDistance(locGeom, false);
43586         };
43587         DistanceOp.prototype.nearestLocations = function nearestLocations () {
43588           this.computeMinDistance();
43589           return this._minDistanceLocation
43590         };
43591         DistanceOp.prototype.updateMinDistance = function updateMinDistance (locGeom, flip) {
43592           if (locGeom[0] === null) { return null }
43593           if (flip) {
43594             this._minDistanceLocation[0] = locGeom[1];
43595             this._minDistanceLocation[1] = locGeom[0];
43596           } else {
43597             this._minDistanceLocation[0] = locGeom[0];
43598             this._minDistanceLocation[1] = locGeom[1];
43599           }
43600         };
43601         DistanceOp.prototype.nearestPoints = function nearestPoints () {
43602           this.computeMinDistance();
43603           var nearestPts = [this._minDistanceLocation[0].getCoordinate(), this._minDistanceLocation[1].getCoordinate()];
43604           return nearestPts
43605         };
43606         DistanceOp.prototype.computeMinDistance = function computeMinDistance () {
43607             var this$1 = this;
43608
43609           if (arguments.length === 0) {
43610             if (this._minDistanceLocation !== null) { return null }
43611             this._minDistanceLocation = new Array(2).fill(null);
43612             this.computeContainmentDistance();
43613             if (this._minDistance <= this._terminateDistance) { return null }
43614             this.computeFacetDistance();
43615           } else if (arguments.length === 3) {
43616             if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof Point)) {
43617               var line = arguments[0];
43618               var pt = arguments[1];
43619               var locGeom = arguments[2];
43620               if (line.getEnvelopeInternal().distance(pt.getEnvelopeInternal()) > this._minDistance) { return null }
43621               var coord0 = line.getCoordinates();
43622               var coord = pt.getCoordinate();
43623               for (var i = 0; i < coord0.length - 1; i++) {
43624                 var dist = CGAlgorithms.distancePointLine(coord, coord0[i], coord0[i + 1]);
43625                 if (dist < this$1._minDistance) {
43626                   this$1._minDistance = dist;
43627                   var seg = new LineSegment(coord0[i], coord0[i + 1]);
43628                   var segClosestPoint = seg.closestPoint(coord);
43629                   locGeom[0] = new GeometryLocation(line, i, segClosestPoint);
43630                   locGeom[1] = new GeometryLocation(pt, 0, coord);
43631                 }
43632                 if (this$1._minDistance <= this$1._terminateDistance) { return null }
43633               }
43634             } else if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof LineString)) {
43635               var line0 = arguments[0];
43636               var line1 = arguments[1];
43637               var locGeom$1 = arguments[2];
43638               if (line0.getEnvelopeInternal().distance(line1.getEnvelopeInternal()) > this._minDistance) { return null }
43639               var coord0$1 = line0.getCoordinates();
43640               var coord1 = line1.getCoordinates();
43641               for (var i$1 = 0; i$1 < coord0$1.length - 1; i$1++) {
43642                 for (var j = 0; j < coord1.length - 1; j++) {
43643                   var dist$1 = CGAlgorithms.distanceLineLine(coord0$1[i$1], coord0$1[i$1 + 1], coord1[j], coord1[j + 1]);
43644                   if (dist$1 < this$1._minDistance) {
43645                     this$1._minDistance = dist$1;
43646                     var seg0 = new LineSegment(coord0$1[i$1], coord0$1[i$1 + 1]);
43647                     var seg1 = new LineSegment(coord1[j], coord1[j + 1]);
43648                     var closestPt = seg0.closestPoints(seg1);
43649                     locGeom$1[0] = new GeometryLocation(line0, i$1, closestPt[0]);
43650                     locGeom$1[1] = new GeometryLocation(line1, j, closestPt[1]);
43651                   }
43652                   if (this$1._minDistance <= this$1._terminateDistance) { return null }
43653                 }
43654               }
43655             }
43656           }
43657         };
43658         DistanceOp.prototype.computeMinDistancePoints = function computeMinDistancePoints (points0, points1, locGeom) {
43659             var this$1 = this;
43660
43661           for (var i = 0; i < points0.size(); i++) {
43662             var pt0 = points0.get(i);
43663             for (var j = 0; j < points1.size(); j++) {
43664               var pt1 = points1.get(j);
43665               var dist = pt0.getCoordinate().distance(pt1.getCoordinate());
43666               if (dist < this$1._minDistance) {
43667                 this$1._minDistance = dist;
43668                 locGeom[0] = new GeometryLocation(pt0, 0, pt0.getCoordinate());
43669                 locGeom[1] = new GeometryLocation(pt1, 0, pt1.getCoordinate());
43670               }
43671               if (this$1._minDistance <= this$1._terminateDistance) { return null }
43672             }
43673           }
43674         };
43675         DistanceOp.prototype.distance = function distance () {
43676           if (this._geom[0] === null || this._geom[1] === null) { throw new IllegalArgumentException('null geometries are not supported') }
43677           if (this._geom[0].isEmpty() || this._geom[1].isEmpty()) { return 0.0 }
43678           this.computeMinDistance();
43679           return this._minDistance
43680         };
43681         DistanceOp.prototype.computeMinDistanceLines = function computeMinDistanceLines (lines0, lines1, locGeom) {
43682             var this$1 = this;
43683
43684           for (var i = 0; i < lines0.size(); i++) {
43685             var line0 = lines0.get(i);
43686             for (var j = 0; j < lines1.size(); j++) {
43687               var line1 = lines1.get(j);
43688               this$1.computeMinDistance(line0, line1, locGeom);
43689               if (this$1._minDistance <= this$1._terminateDistance) { return null }
43690             }
43691           }
43692         };
43693         DistanceOp.prototype.interfaces_ = function interfaces_ () {
43694           return []
43695         };
43696         DistanceOp.prototype.getClass = function getClass () {
43697           return DistanceOp
43698         };
43699         DistanceOp.distance = function distance (g0, g1) {
43700           var distOp = new DistanceOp(g0, g1);
43701           return distOp.distance()
43702         };
43703         DistanceOp.isWithinDistance = function isWithinDistance (g0, g1, distance) {
43704           var distOp = new DistanceOp(g0, g1, distance);
43705           return distOp.distance() <= distance
43706         };
43707         DistanceOp.nearestPoints = function nearestPoints (g0, g1) {
43708           var distOp = new DistanceOp(g0, g1);
43709           return distOp.nearestPoints()
43710         };
43711
43712         var PointPairDistance$2 = function PointPairDistance () {
43713           this._pt = [new Coordinate(), new Coordinate()];
43714           this._distance = Double.NaN;
43715           this._isNull = true;
43716         };
43717         PointPairDistance$2.prototype.getCoordinates = function getCoordinates () {
43718           return this._pt
43719         };
43720         PointPairDistance$2.prototype.getCoordinate = function getCoordinate (i) {
43721           return this._pt[i]
43722         };
43723         PointPairDistance$2.prototype.setMinimum = function setMinimum () {
43724           if (arguments.length === 1) {
43725             var ptDist = arguments[0];
43726             this.setMinimum(ptDist._pt[0], ptDist._pt[1]);
43727           } else if (arguments.length === 2) {
43728             var p0 = arguments[0];
43729             var p1 = arguments[1];
43730             if (this._isNull) {
43731               this.initialize(p0, p1);
43732               return null
43733             }
43734             var dist = p0.distance(p1);
43735             if (dist < this._distance) { this.initialize(p0, p1, dist); }
43736           }
43737         };
43738         PointPairDistance$2.prototype.initialize = function initialize () {
43739           if (arguments.length === 0) {
43740             this._isNull = true;
43741           } else if (arguments.length === 2) {
43742             var p0 = arguments[0];
43743             var p1 = arguments[1];
43744             this._pt[0].setCoordinate(p0);
43745             this._pt[1].setCoordinate(p1);
43746             this._distance = p0.distance(p1);
43747             this._isNull = false;
43748           } else if (arguments.length === 3) {
43749             var p0$1 = arguments[0];
43750             var p1$1 = arguments[1];
43751             var distance = arguments[2];
43752             this._pt[0].setCoordinate(p0$1);
43753             this._pt[1].setCoordinate(p1$1);
43754             this._distance = distance;
43755             this._isNull = false;
43756           }
43757         };
43758         PointPairDistance$2.prototype.toString = function toString () {
43759           return WKTWriter.toLineString(this._pt[0], this._pt[1])
43760         };
43761         PointPairDistance$2.prototype.getDistance = function getDistance () {
43762           return this._distance
43763         };
43764         PointPairDistance$2.prototype.setMaximum = function setMaximum () {
43765           if (arguments.length === 1) {
43766             var ptDist = arguments[0];
43767             this.setMaximum(ptDist._pt[0], ptDist._pt[1]);
43768           } else if (arguments.length === 2) {
43769             var p0 = arguments[0];
43770             var p1 = arguments[1];
43771             if (this._isNull) {
43772               this.initialize(p0, p1);
43773               return null
43774             }
43775             var dist = p0.distance(p1);
43776             if (dist > this._distance) { this.initialize(p0, p1, dist); }
43777           }
43778         };
43779         PointPairDistance$2.prototype.interfaces_ = function interfaces_ () {
43780           return []
43781         };
43782         PointPairDistance$2.prototype.getClass = function getClass () {
43783           return PointPairDistance$2
43784         };
43785
43786         var DistanceToPoint = function DistanceToPoint () {};
43787
43788         DistanceToPoint.prototype.interfaces_ = function interfaces_ () {
43789           return []
43790         };
43791         DistanceToPoint.prototype.getClass = function getClass () {
43792           return DistanceToPoint
43793         };
43794         DistanceToPoint.computeDistance = function computeDistance () {
43795           if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof LineString && arguments[1] instanceof Coordinate)) {
43796             var line = arguments[0];
43797             var pt = arguments[1];
43798             var ptDist = arguments[2];
43799             var tempSegment = new LineSegment();
43800             var coords = line.getCoordinates();
43801             for (var i = 0; i < coords.length - 1; i++) {
43802               tempSegment.setCoordinates(coords[i], coords[i + 1]);
43803               var closestPt = tempSegment.closestPoint(pt);
43804               ptDist.setMinimum(closestPt, pt);
43805             }
43806           } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof Polygon && arguments[1] instanceof Coordinate)) {
43807             var poly = arguments[0];
43808             var pt$1 = arguments[1];
43809             var ptDist$1 = arguments[2];
43810             DistanceToPoint.computeDistance(poly.getExteriorRing(), pt$1, ptDist$1);
43811             for (var i$1 = 0; i$1 < poly.getNumInteriorRing(); i$1++) {
43812               DistanceToPoint.computeDistance(poly.getInteriorRingN(i$1), pt$1, ptDist$1);
43813             }
43814           } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof Geometry && arguments[1] instanceof Coordinate)) {
43815             var geom = arguments[0];
43816             var pt$2 = arguments[1];
43817             var ptDist$2 = arguments[2];
43818             if (geom instanceof LineString) {
43819               DistanceToPoint.computeDistance(geom, pt$2, ptDist$2);
43820             } else if (geom instanceof Polygon) {
43821               DistanceToPoint.computeDistance(geom, pt$2, ptDist$2);
43822             } else if (geom instanceof GeometryCollection) {
43823               var gc = geom;
43824               for (var i$2 = 0; i$2 < gc.getNumGeometries(); i$2++) {
43825                 var g = gc.getGeometryN(i$2);
43826                 DistanceToPoint.computeDistance(g, pt$2, ptDist$2);
43827               }
43828             } else {
43829               ptDist$2.setMinimum(geom.getCoordinate(), pt$2);
43830             }
43831           } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof LineSegment && arguments[1] instanceof Coordinate)) {
43832             var segment = arguments[0];
43833             var pt$3 = arguments[1];
43834             var ptDist$3 = arguments[2];
43835             var closestPt$1 = segment.closestPoint(pt$3);
43836             ptDist$3.setMinimum(closestPt$1, pt$3);
43837           }
43838         };
43839
43840         var DiscreteHausdorffDistance = function DiscreteHausdorffDistance () {
43841           this._g0 = null;
43842           this._g1 = null;
43843           this._ptDist = new PointPairDistance$2();
43844           this._densifyFrac = 0.0;
43845           var g0 = arguments[0];
43846           var g1 = arguments[1];
43847           this._g0 = g0;
43848           this._g1 = g1;
43849         };
43850
43851         var staticAccessors$39 = { MaxPointDistanceFilter: { configurable: true },MaxDensifiedByFractionDistanceFilter: { configurable: true } };
43852         DiscreteHausdorffDistance.prototype.getCoordinates = function getCoordinates () {
43853           return this._ptDist.getCoordinates()
43854         };
43855         DiscreteHausdorffDistance.prototype.setDensifyFraction = function setDensifyFraction (densifyFrac) {
43856           if (densifyFrac > 1.0 || densifyFrac <= 0.0) { throw new IllegalArgumentException('Fraction is not in range (0.0 - 1.0]') }
43857           this._densifyFrac = densifyFrac;
43858         };
43859         DiscreteHausdorffDistance.prototype.compute = function compute (g0, g1) {
43860           this.computeOrientedDistance(g0, g1, this._ptDist);
43861           this.computeOrientedDistance(g1, g0, this._ptDist);
43862         };
43863         DiscreteHausdorffDistance.prototype.distance = function distance () {
43864           this.compute(this._g0, this._g1);
43865           return this._ptDist.getDistance()
43866         };
43867         DiscreteHausdorffDistance.prototype.computeOrientedDistance = function computeOrientedDistance (discreteGeom, geom, ptDist) {
43868           var distFilter = new MaxPointDistanceFilter$1(geom);
43869           discreteGeom.apply(distFilter);
43870           ptDist.setMaximum(distFilter.getMaxPointDistance());
43871           if (this._densifyFrac > 0) {
43872             var fracFilter = new MaxDensifiedByFractionDistanceFilter(geom, this._densifyFrac);
43873             discreteGeom.apply(fracFilter);
43874             ptDist.setMaximum(fracFilter.getMaxPointDistance());
43875           }
43876         };
43877         DiscreteHausdorffDistance.prototype.orientedDistance = function orientedDistance () {
43878           this.computeOrientedDistance(this._g0, this._g1, this._ptDist);
43879           return this._ptDist.getDistance()
43880         };
43881         DiscreteHausdorffDistance.prototype.interfaces_ = function interfaces_ () {
43882           return []
43883         };
43884         DiscreteHausdorffDistance.prototype.getClass = function getClass () {
43885           return DiscreteHausdorffDistance
43886         };
43887         DiscreteHausdorffDistance.distance = function distance () {
43888           if (arguments.length === 2) {
43889             var g0 = arguments[0];
43890             var g1 = arguments[1];
43891             var dist = new DiscreteHausdorffDistance(g0, g1);
43892             return dist.distance()
43893           } else if (arguments.length === 3) {
43894             var g0$1 = arguments[0];
43895             var g1$1 = arguments[1];
43896             var densifyFrac = arguments[2];
43897             var dist$1 = new DiscreteHausdorffDistance(g0$1, g1$1);
43898             dist$1.setDensifyFraction(densifyFrac);
43899             return dist$1.distance()
43900           }
43901         };
43902         staticAccessors$39.MaxPointDistanceFilter.get = function () { return MaxPointDistanceFilter$1 };
43903         staticAccessors$39.MaxDensifiedByFractionDistanceFilter.get = function () { return MaxDensifiedByFractionDistanceFilter };
43904
43905         Object.defineProperties( DiscreteHausdorffDistance, staticAccessors$39 );
43906
43907         var MaxPointDistanceFilter$1 = function MaxPointDistanceFilter () {
43908           this._maxPtDist = new PointPairDistance$2();
43909           this._minPtDist = new PointPairDistance$2();
43910           this._euclideanDist = new DistanceToPoint();
43911           this._geom = null;
43912           var geom = arguments[0];
43913           this._geom = geom;
43914         };
43915         MaxPointDistanceFilter$1.prototype.filter = function filter (pt) {
43916           this._minPtDist.initialize();
43917           DistanceToPoint.computeDistance(this._geom, pt, this._minPtDist);
43918           this._maxPtDist.setMaximum(this._minPtDist);
43919         };
43920         MaxPointDistanceFilter$1.prototype.getMaxPointDistance = function getMaxPointDistance () {
43921           return this._maxPtDist
43922         };
43923         MaxPointDistanceFilter$1.prototype.interfaces_ = function interfaces_ () {
43924           return [CoordinateFilter]
43925         };
43926         MaxPointDistanceFilter$1.prototype.getClass = function getClass () {
43927           return MaxPointDistanceFilter$1
43928         };
43929
43930         var MaxDensifiedByFractionDistanceFilter = function MaxDensifiedByFractionDistanceFilter () {
43931           this._maxPtDist = new PointPairDistance$2();
43932           this._minPtDist = new PointPairDistance$2();
43933           this._geom = null;
43934           this._numSubSegs = 0;
43935           var geom = arguments[0];
43936           var fraction = arguments[1];
43937           this._geom = geom;
43938           this._numSubSegs = Math.trunc(Math.round(1.0 / fraction));
43939         };
43940         MaxDensifiedByFractionDistanceFilter.prototype.filter = function filter (seq, index) {
43941             var this$1 = this;
43942
43943           if (index === 0) { return null }
43944           var p0 = seq.getCoordinate(index - 1);
43945           var p1 = seq.getCoordinate(index);
43946           var delx = (p1.x - p0.x) / this._numSubSegs;
43947           var dely = (p1.y - p0.y) / this._numSubSegs;
43948           for (var i = 0; i < this._numSubSegs; i++) {
43949             var x = p0.x + i * delx;
43950             var y = p0.y + i * dely;
43951             var pt = new Coordinate(x, y);
43952             this$1._minPtDist.initialize();
43953             DistanceToPoint.computeDistance(this$1._geom, pt, this$1._minPtDist);
43954             this$1._maxPtDist.setMaximum(this$1._minPtDist);
43955           }
43956         };
43957         MaxDensifiedByFractionDistanceFilter.prototype.isDone = function isDone () {
43958           return false
43959         };
43960         MaxDensifiedByFractionDistanceFilter.prototype.isGeometryChanged = function isGeometryChanged () {
43961           return false
43962         };
43963         MaxDensifiedByFractionDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {
43964           return this._maxPtDist
43965         };
43966         MaxDensifiedByFractionDistanceFilter.prototype.interfaces_ = function interfaces_ () {
43967           return [CoordinateSequenceFilter]
43968         };
43969         MaxDensifiedByFractionDistanceFilter.prototype.getClass = function getClass () {
43970           return MaxDensifiedByFractionDistanceFilter
43971         };
43972
43973         var BufferDistanceValidator = function BufferDistanceValidator (input, bufDistance, result) {
43974           this._minValidDistance = null;
43975           this._maxValidDistance = null;
43976           this._minDistanceFound = null;
43977           this._maxDistanceFound = null;
43978           this._isValid = true;
43979           this._errMsg = null;
43980           this._errorLocation = null;
43981           this._errorIndicator = null;
43982           this._input = input || null;
43983           this._bufDistance = bufDistance || null;
43984           this._result = result || null;
43985         };
43986
43987         var staticAccessors$37 = { VERBOSE: { configurable: true },MAX_DISTANCE_DIFF_FRAC: { configurable: true } };
43988         BufferDistanceValidator.prototype.checkMaximumDistance = function checkMaximumDistance (input, bufCurve, maxDist) {
43989           var haus = new DiscreteHausdorffDistance(bufCurve, input);
43990           haus.setDensifyFraction(0.25);
43991           this._maxDistanceFound = haus.orientedDistance();
43992           if (this._maxDistanceFound > maxDist) {
43993             this._isValid = false;
43994             var pts = haus.getCoordinates();
43995             this._errorLocation = pts[1];
43996             this._errorIndicator = input.getFactory().createLineString(pts);
43997             this._errMsg = 'Distance between buffer curve and input is too large (' + this._maxDistanceFound + ' at ' + WKTWriter.toLineString(pts[0], pts[1]) + ')';
43998           }
43999         };
44000         BufferDistanceValidator.prototype.isValid = function isValid () {
44001           var posDistance = Math.abs(this._bufDistance);
44002           var distDelta = BufferDistanceValidator.MAX_DISTANCE_DIFF_FRAC * posDistance;
44003           this._minValidDistance = posDistance - distDelta;
44004           this._maxValidDistance = posDistance + distDelta;
44005           if (this._input.isEmpty() || this._result.isEmpty()) { return true }
44006           if (this._bufDistance > 0.0) {
44007             this.checkPositiveValid();
44008           } else {
44009             this.checkNegativeValid();
44010           }
44011           if (BufferDistanceValidator.VERBOSE) {
44012             System.out.println('Min Dist= ' + this._minDistanceFound + '  err= ' + (1.0 - this._minDistanceFound / this._bufDistance) + '  Max Dist= ' + this._maxDistanceFound + '  err= ' + (this._maxDistanceFound / this._bufDistance - 1.0));
44013           }
44014           return this._isValid
44015         };
44016         BufferDistanceValidator.prototype.checkNegativeValid = function checkNegativeValid () {
44017           if (!(this._input instanceof Polygon || this._input instanceof MultiPolygon || this._input instanceof GeometryCollection)) {
44018             return null
44019           }
44020           var inputCurve = this.getPolygonLines(this._input);
44021           this.checkMinimumDistance(inputCurve, this._result, this._minValidDistance);
44022           if (!this._isValid) { return null }
44023           this.checkMaximumDistance(inputCurve, this._result, this._maxValidDistance);
44024         };
44025         BufferDistanceValidator.prototype.getErrorIndicator = function getErrorIndicator () {
44026           return this._errorIndicator
44027         };
44028         BufferDistanceValidator.prototype.checkMinimumDistance = function checkMinimumDistance (g1, g2, minDist) {
44029           var distOp = new DistanceOp(g1, g2, minDist);
44030           this._minDistanceFound = distOp.distance();
44031           if (this._minDistanceFound < minDist) {
44032             this._isValid = false;
44033             var pts = distOp.nearestPoints();
44034             this._errorLocation = distOp.nearestPoints()[1];
44035             this._errorIndicator = g1.getFactory().createLineString(pts);
44036             this._errMsg = 'Distance between buffer curve and input is too small (' + this._minDistanceFound + ' at ' + WKTWriter.toLineString(pts[0], pts[1]) + ' )';
44037           }
44038         };
44039         BufferDistanceValidator.prototype.checkPositiveValid = function checkPositiveValid () {
44040           var bufCurve = this._result.getBoundary();
44041           this.checkMinimumDistance(this._input, bufCurve, this._minValidDistance);
44042           if (!this._isValid) { return null }
44043           this.checkMaximumDistance(this._input, bufCurve, this._maxValidDistance);
44044         };
44045         BufferDistanceValidator.prototype.getErrorLocation = function getErrorLocation () {
44046           return this._errorLocation
44047         };
44048         BufferDistanceValidator.prototype.getPolygonLines = function getPolygonLines (g) {
44049           var lines = new ArrayList();
44050           var lineExtracter = new LinearComponentExtracter(lines);
44051           var polys = PolygonExtracter.getPolygons(g);
44052           for (var i = polys.iterator(); i.hasNext();) {
44053             var poly = i.next();
44054             poly.apply(lineExtracter);
44055           }
44056           return g.getFactory().buildGeometry(lines)
44057         };
44058         BufferDistanceValidator.prototype.getErrorMessage = function getErrorMessage () {
44059           return this._errMsg
44060         };
44061         BufferDistanceValidator.prototype.interfaces_ = function interfaces_ () {
44062           return []
44063         };
44064         BufferDistanceValidator.prototype.getClass = function getClass () {
44065           return BufferDistanceValidator
44066         };
44067         staticAccessors$37.VERBOSE.get = function () { return false };
44068         staticAccessors$37.MAX_DISTANCE_DIFF_FRAC.get = function () { return 0.012 };
44069
44070         Object.defineProperties( BufferDistanceValidator, staticAccessors$37 );
44071
44072         var BufferResultValidator = function BufferResultValidator (input, distance, result) {
44073           this._isValid = true;
44074           this._errorMsg = null;
44075           this._errorLocation = null;
44076           this._errorIndicator = null;
44077           this._input = input || null;
44078           this._distance = distance || null;
44079           this._result = result || null;
44080         };
44081
44082         var staticAccessors$40 = { VERBOSE: { configurable: true },MAX_ENV_DIFF_FRAC: { configurable: true } };
44083         BufferResultValidator.prototype.isValid = function isValid () {
44084           this.checkPolygonal();
44085           if (!this._isValid) { return this._isValid }
44086           this.checkExpectedEmpty();
44087           if (!this._isValid) { return this._isValid }
44088           this.checkEnvelope();
44089           if (!this._isValid) { return this._isValid }
44090           this.checkArea();
44091           if (!this._isValid) { return this._isValid }
44092           this.checkDistance();
44093           return this._isValid
44094         };
44095         BufferResultValidator.prototype.checkEnvelope = function checkEnvelope () {
44096           if (this._distance < 0.0) { return null }
44097           var padding = this._distance * BufferResultValidator.MAX_ENV_DIFF_FRAC;
44098           if (padding === 0.0) { padding = 0.001; }
44099           var expectedEnv = new Envelope(this._input.getEnvelopeInternal());
44100           expectedEnv.expandBy(this._distance);
44101           var bufEnv = new Envelope(this._result.getEnvelopeInternal());
44102           bufEnv.expandBy(padding);
44103           if (!bufEnv.contains(expectedEnv)) {
44104             this._isValid = false;
44105             this._errorMsg = 'Buffer envelope is incorrect';
44106             this._errorIndicator = this._input.getFactory().toGeometry(bufEnv);
44107           }
44108           this.report('Envelope');
44109         };
44110         BufferResultValidator.prototype.checkDistance = function checkDistance () {
44111           var distValid = new BufferDistanceValidator(this._input, this._distance, this._result);
44112           if (!distValid.isValid()) {
44113             this._isValid = false;
44114             this._errorMsg = distValid.getErrorMessage();
44115             this._errorLocation = distValid.getErrorLocation();
44116             this._errorIndicator = distValid.getErrorIndicator();
44117           }
44118           this.report('Distance');
44119         };
44120         BufferResultValidator.prototype.checkArea = function checkArea () {
44121           var inputArea = this._input.getArea();
44122           var resultArea = this._result.getArea();
44123           if (this._distance > 0.0 && inputArea > resultArea) {
44124             this._isValid = false;
44125             this._errorMsg = 'Area of positive buffer is smaller than input';
44126             this._errorIndicator = this._result;
44127           }
44128           if (this._distance < 0.0 && inputArea < resultArea) {
44129             this._isValid = false;
44130             this._errorMsg = 'Area of negative buffer is larger than input';
44131             this._errorIndicator = this._result;
44132           }
44133           this.report('Area');
44134         };
44135         BufferResultValidator.prototype.checkPolygonal = function checkPolygonal () {
44136           if (!(this._result instanceof Polygon || this._result instanceof MultiPolygon)) { this._isValid = false; }
44137           this._errorMsg = 'Result is not polygonal';
44138           this._errorIndicator = this._result;
44139           this.report('Polygonal');
44140         };
44141         BufferResultValidator.prototype.getErrorIndicator = function getErrorIndicator () {
44142           return this._errorIndicator
44143         };
44144         BufferResultValidator.prototype.getErrorLocation = function getErrorLocation () {
44145           return this._errorLocation
44146         };
44147         BufferResultValidator.prototype.checkExpectedEmpty = function checkExpectedEmpty () {
44148           if (this._input.getDimension() >= 2) { return null }
44149           if (this._distance > 0.0) { return null }
44150           if (!this._result.isEmpty()) {
44151             this._isValid = false;
44152             this._errorMsg = 'Result is non-empty';
44153             this._errorIndicator = this._result;
44154           }
44155           this.report('ExpectedEmpty');
44156         };
44157         BufferResultValidator.prototype.report = function report (checkName) {
44158           if (!BufferResultValidator.VERBOSE) { return null }
44159           System.out.println('Check ' + checkName + ': ' + (this._isValid ? 'passed' : 'FAILED'));
44160         };
44161         BufferResultValidator.prototype.getErrorMessage = function getErrorMessage () {
44162           return this._errorMsg
44163         };
44164         BufferResultValidator.prototype.interfaces_ = function interfaces_ () {
44165           return []
44166         };
44167         BufferResultValidator.prototype.getClass = function getClass () {
44168           return BufferResultValidator
44169         };
44170         BufferResultValidator.isValidMsg = function isValidMsg (g, distance, result) {
44171           var validator = new BufferResultValidator(g, distance, result);
44172           if (!validator.isValid()) { return validator.getErrorMessage() }
44173           return null
44174         };
44175         BufferResultValidator.isValid = function isValid (g, distance, result) {
44176           var validator = new BufferResultValidator(g, distance, result);
44177           if (validator.isValid()) { return true }
44178           return false
44179         };
44180         staticAccessors$40.VERBOSE.get = function () { return false };
44181         staticAccessors$40.MAX_ENV_DIFF_FRAC.get = function () { return 0.012 };
44182
44183         Object.defineProperties( BufferResultValidator, staticAccessors$40 );
44184
44185         // operation.buffer
44186
44187         var BasicSegmentString = function BasicSegmentString () {
44188           this._pts = null;
44189           this._data = null;
44190           var pts = arguments[0];
44191           var data = arguments[1];
44192           this._pts = pts;
44193           this._data = data;
44194         };
44195         BasicSegmentString.prototype.getCoordinates = function getCoordinates () {
44196           return this._pts
44197         };
44198         BasicSegmentString.prototype.size = function size () {
44199           return this._pts.length
44200         };
44201         BasicSegmentString.prototype.getCoordinate = function getCoordinate (i) {
44202           return this._pts[i]
44203         };
44204         BasicSegmentString.prototype.isClosed = function isClosed () {
44205           return this._pts[0].equals(this._pts[this._pts.length - 1])
44206         };
44207         BasicSegmentString.prototype.getSegmentOctant = function getSegmentOctant (index) {
44208           if (index === this._pts.length - 1) { return -1 }
44209           return Octant.octant(this.getCoordinate(index), this.getCoordinate(index + 1))
44210         };
44211         BasicSegmentString.prototype.setData = function setData (data) {
44212           this._data = data;
44213         };
44214         BasicSegmentString.prototype.getData = function getData () {
44215           return this._data
44216         };
44217         BasicSegmentString.prototype.toString = function toString () {
44218           return WKTWriter.toLineString(new CoordinateArraySequence(this._pts))
44219         };
44220         BasicSegmentString.prototype.interfaces_ = function interfaces_ () {
44221           return [SegmentString]
44222         };
44223         BasicSegmentString.prototype.getClass = function getClass () {
44224           return BasicSegmentString
44225         };
44226
44227         var InteriorIntersectionFinder = function InteriorIntersectionFinder () {
44228           this._findAllIntersections = false;
44229           this._isCheckEndSegmentsOnly = false;
44230           this._li = null;
44231           this._interiorIntersection = null;
44232           this._intSegments = null;
44233           this._intersections = new ArrayList();
44234           this._intersectionCount = 0;
44235           this._keepIntersections = true;
44236           var li = arguments[0];
44237           this._li = li;
44238           this._interiorIntersection = null;
44239         };
44240         InteriorIntersectionFinder.prototype.getInteriorIntersection = function getInteriorIntersection () {
44241           return this._interiorIntersection
44242         };
44243         InteriorIntersectionFinder.prototype.setCheckEndSegmentsOnly = function setCheckEndSegmentsOnly (isCheckEndSegmentsOnly) {
44244           this._isCheckEndSegmentsOnly = isCheckEndSegmentsOnly;
44245         };
44246         InteriorIntersectionFinder.prototype.getIntersectionSegments = function getIntersectionSegments () {
44247           return this._intSegments
44248         };
44249         InteriorIntersectionFinder.prototype.count = function count () {
44250           return this._intersectionCount
44251         };
44252         InteriorIntersectionFinder.prototype.getIntersections = function getIntersections () {
44253           return this._intersections
44254         };
44255         InteriorIntersectionFinder.prototype.setFindAllIntersections = function setFindAllIntersections (findAllIntersections) {
44256           this._findAllIntersections = findAllIntersections;
44257         };
44258         InteriorIntersectionFinder.prototype.setKeepIntersections = function setKeepIntersections (keepIntersections) {
44259           this._keepIntersections = keepIntersections;
44260         };
44261         InteriorIntersectionFinder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {
44262           if (!this._findAllIntersections && this.hasIntersection()) { return null }
44263           if (e0 === e1 && segIndex0 === segIndex1) { return null }
44264           if (this._isCheckEndSegmentsOnly) {
44265             var isEndSegPresent = this.isEndSegment(e0, segIndex0) || this.isEndSegment(e1, segIndex1);
44266             if (!isEndSegPresent) { return null }
44267           }
44268           var p00 = e0.getCoordinates()[segIndex0];
44269           var p01 = e0.getCoordinates()[segIndex0 + 1];
44270           var p10 = e1.getCoordinates()[segIndex1];
44271           var p11 = e1.getCoordinates()[segIndex1 + 1];
44272           this._li.computeIntersection(p00, p01, p10, p11);
44273           if (this._li.hasIntersection()) {
44274             if (this._li.isInteriorIntersection()) {
44275               this._intSegments = new Array(4).fill(null);
44276               this._intSegments[0] = p00;
44277               this._intSegments[1] = p01;
44278               this._intSegments[2] = p10;
44279               this._intSegments[3] = p11;
44280               this._interiorIntersection = this._li.getIntersection(0);
44281               if (this._keepIntersections) { this._intersections.add(this._interiorIntersection); }
44282               this._intersectionCount++;
44283             }
44284           }
44285         };
44286         InteriorIntersectionFinder.prototype.isEndSegment = function isEndSegment (segStr, index) {
44287           if (index === 0) { return true }
44288           if (index >= segStr.size() - 2) { return true }
44289           return false
44290         };
44291         InteriorIntersectionFinder.prototype.hasIntersection = function hasIntersection () {
44292           return this._interiorIntersection !== null
44293         };
44294         InteriorIntersectionFinder.prototype.isDone = function isDone () {
44295           if (this._findAllIntersections) { return false }
44296           return this._interiorIntersection !== null
44297         };
44298         InteriorIntersectionFinder.prototype.interfaces_ = function interfaces_ () {
44299           return [SegmentIntersector]
44300         };
44301         InteriorIntersectionFinder.prototype.getClass = function getClass () {
44302           return InteriorIntersectionFinder
44303         };
44304         InteriorIntersectionFinder.createAllIntersectionsFinder = function createAllIntersectionsFinder (li) {
44305           var finder = new InteriorIntersectionFinder(li);
44306           finder.setFindAllIntersections(true);
44307           return finder
44308         };
44309         InteriorIntersectionFinder.createAnyIntersectionFinder = function createAnyIntersectionFinder (li) {
44310           return new InteriorIntersectionFinder(li)
44311         };
44312         InteriorIntersectionFinder.createIntersectionCounter = function createIntersectionCounter (li) {
44313           var finder = new InteriorIntersectionFinder(li);
44314           finder.setFindAllIntersections(true);
44315           finder.setKeepIntersections(false);
44316           return finder
44317         };
44318
44319         var FastNodingValidator = function FastNodingValidator () {
44320           this._li = new RobustLineIntersector();
44321           this._segStrings = null;
44322           this._findAllIntersections = false;
44323           this._segInt = null;
44324           this._isValid = true;
44325           var segStrings = arguments[0];
44326           this._segStrings = segStrings;
44327         };
44328         FastNodingValidator.prototype.execute = function execute () {
44329           if (this._segInt !== null) { return null }
44330           this.checkInteriorIntersections();
44331         };
44332         FastNodingValidator.prototype.getIntersections = function getIntersections () {
44333           return this._segInt.getIntersections()
44334         };
44335         FastNodingValidator.prototype.isValid = function isValid () {
44336           this.execute();
44337           return this._isValid
44338         };
44339         FastNodingValidator.prototype.setFindAllIntersections = function setFindAllIntersections (findAllIntersections) {
44340           this._findAllIntersections = findAllIntersections;
44341         };
44342         FastNodingValidator.prototype.checkInteriorIntersections = function checkInteriorIntersections () {
44343           this._isValid = true;
44344           this._segInt = new InteriorIntersectionFinder(this._li);
44345           this._segInt.setFindAllIntersections(this._findAllIntersections);
44346           var noder = new MCIndexNoder();
44347           noder.setSegmentIntersector(this._segInt);
44348           noder.computeNodes(this._segStrings);
44349           if (this._segInt.hasIntersection()) {
44350             this._isValid = false;
44351             return null
44352           }
44353         };
44354         FastNodingValidator.prototype.checkValid = function checkValid () {
44355           this.execute();
44356           if (!this._isValid) { throw new TopologyException(this.getErrorMessage(), this._segInt.getInteriorIntersection()) }
44357         };
44358         FastNodingValidator.prototype.getErrorMessage = function getErrorMessage () {
44359           if (this._isValid) { return 'no intersections found' }
44360           var intSegs = this._segInt.getIntersectionSegments();
44361           return 'found non-noded intersection between ' + WKTWriter.toLineString(intSegs[0], intSegs[1]) + ' and ' + WKTWriter.toLineString(intSegs[2], intSegs[3])
44362         };
44363         FastNodingValidator.prototype.interfaces_ = function interfaces_ () {
44364           return []
44365         };
44366         FastNodingValidator.prototype.getClass = function getClass () {
44367           return FastNodingValidator
44368         };
44369         FastNodingValidator.computeIntersections = function computeIntersections (segStrings) {
44370           var nv = new FastNodingValidator(segStrings);
44371           nv.setFindAllIntersections(true);
44372           nv.isValid();
44373           return nv.getIntersections()
44374         };
44375
44376         var EdgeNodingValidator = function EdgeNodingValidator () {
44377           this._nv = null;
44378           var edges = arguments[0];
44379           this._nv = new FastNodingValidator(EdgeNodingValidator.toSegmentStrings(edges));
44380         };
44381         EdgeNodingValidator.prototype.checkValid = function checkValid () {
44382           this._nv.checkValid();
44383         };
44384         EdgeNodingValidator.prototype.interfaces_ = function interfaces_ () {
44385           return []
44386         };
44387         EdgeNodingValidator.prototype.getClass = function getClass () {
44388           return EdgeNodingValidator
44389         };
44390         EdgeNodingValidator.toSegmentStrings = function toSegmentStrings (edges) {
44391           var segStrings = new ArrayList();
44392           for (var i = edges.iterator(); i.hasNext();) {
44393             var e = i.next();
44394             segStrings.add(new BasicSegmentString(e.getCoordinates(), e));
44395           }
44396           return segStrings
44397         };
44398         EdgeNodingValidator.checkValid = function checkValid (edges) {
44399           var validator = new EdgeNodingValidator(edges);
44400           validator.checkValid();
44401         };
44402
44403         var GeometryCollectionMapper = function GeometryCollectionMapper (mapOp) {
44404           this._mapOp = mapOp;
44405         };
44406         GeometryCollectionMapper.prototype.map = function map (gc) {
44407             var this$1 = this;
44408
44409           var mapped = new ArrayList();
44410           for (var i = 0; i < gc.getNumGeometries(); i++) {
44411             var g = this$1._mapOp.map(gc.getGeometryN(i));
44412             if (!g.isEmpty()) { mapped.add(g); }
44413           }
44414           return gc.getFactory().createGeometryCollection(GeometryFactory.toGeometryArray(mapped))
44415         };
44416         GeometryCollectionMapper.prototype.interfaces_ = function interfaces_ () {
44417           return []
44418         };
44419         GeometryCollectionMapper.prototype.getClass = function getClass () {
44420           return GeometryCollectionMapper
44421         };
44422         GeometryCollectionMapper.map = function map (gc, op) {
44423           var mapper = new GeometryCollectionMapper(op);
44424           return mapper.map(gc)
44425         };
44426
44427         var LineBuilder = function LineBuilder () {
44428           this._op = null;
44429           this._geometryFactory = null;
44430           this._ptLocator = null;
44431           this._lineEdgesList = new ArrayList();
44432           this._resultLineList = new ArrayList();
44433           var op = arguments[0];
44434           var geometryFactory = arguments[1];
44435           var ptLocator = arguments[2];
44436           this._op = op;
44437           this._geometryFactory = geometryFactory;
44438           this._ptLocator = ptLocator;
44439         };
44440         LineBuilder.prototype.collectLines = function collectLines (opCode) {
44441             var this$1 = this;
44442
44443           for (var it = this._op.getGraph().getEdgeEnds().iterator(); it.hasNext();) {
44444             var de = it.next();
44445             this$1.collectLineEdge(de, opCode, this$1._lineEdgesList);
44446             this$1.collectBoundaryTouchEdge(de, opCode, this$1._lineEdgesList);
44447           }
44448         };
44449         LineBuilder.prototype.labelIsolatedLine = function labelIsolatedLine (e, targetIndex) {
44450           var loc = this._ptLocator.locate(e.getCoordinate(), this._op.getArgGeometry(targetIndex));
44451           e.getLabel().setLocation(targetIndex, loc);
44452         };
44453         LineBuilder.prototype.build = function build (opCode) {
44454           this.findCoveredLineEdges();
44455           this.collectLines(opCode);
44456           this.buildLines(opCode);
44457           return this._resultLineList
44458         };
44459         LineBuilder.prototype.collectLineEdge = function collectLineEdge (de, opCode, edges) {
44460           var label = de.getLabel();
44461           var e = de.getEdge();
44462           if (de.isLineEdge()) {
44463             if (!de.isVisited() && OverlayOp.isResultOfOp(label, opCode) && !e.isCovered()) {
44464               edges.add(e);
44465               de.setVisitedEdge(true);
44466             }
44467           }
44468         };
44469         LineBuilder.prototype.findCoveredLineEdges = function findCoveredLineEdges () {
44470             var this$1 = this;
44471
44472           for (var nodeit = this._op.getGraph().getNodes().iterator(); nodeit.hasNext();) {
44473             var node = nodeit.next();
44474             node.getEdges().findCoveredLineEdges();
44475           }
44476           for (var it = this._op.getGraph().getEdgeEnds().iterator(); it.hasNext();) {
44477             var de = it.next();
44478             var e = de.getEdge();
44479             if (de.isLineEdge() && !e.isCoveredSet()) {
44480               var isCovered = this$1._op.isCoveredByA(de.getCoordinate());
44481               e.setCovered(isCovered);
44482             }
44483           }
44484         };
44485         LineBuilder.prototype.labelIsolatedLines = function labelIsolatedLines (edgesList) {
44486             var this$1 = this;
44487
44488           for (var it = edgesList.iterator(); it.hasNext();) {
44489             var e = it.next();
44490             var label = e.getLabel();
44491             if (e.isIsolated()) {
44492               if (label.isNull(0)) { this$1.labelIsolatedLine(e, 0); } else { this$1.labelIsolatedLine(e, 1); }
44493             }
44494           }
44495         };
44496         LineBuilder.prototype.buildLines = function buildLines (opCode) {
44497             var this$1 = this;
44498
44499           for (var it = this._lineEdgesList.iterator(); it.hasNext();) {
44500             var e = it.next();
44501             // const label = e.getLabel()
44502             var line = this$1._geometryFactory.createLineString(e.getCoordinates());
44503             this$1._resultLineList.add(line);
44504             e.setInResult(true);
44505           }
44506         };
44507         LineBuilder.prototype.collectBoundaryTouchEdge = function collectBoundaryTouchEdge (de, opCode, edges) {
44508           var label = de.getLabel();
44509           if (de.isLineEdge()) { return null }
44510           if (de.isVisited()) { return null }
44511           if (de.isInteriorAreaEdge()) { return null }
44512           if (de.getEdge().isInResult()) { return null }
44513           Assert.isTrue(!(de.isInResult() || de.getSym().isInResult()) || !de.getEdge().isInResult());
44514           if (OverlayOp.isResultOfOp(label, opCode) && opCode === OverlayOp.INTERSECTION) {
44515             edges.add(de.getEdge());
44516             de.setVisitedEdge(true);
44517           }
44518         };
44519         LineBuilder.prototype.interfaces_ = function interfaces_ () {
44520           return []
44521         };
44522         LineBuilder.prototype.getClass = function getClass () {
44523           return LineBuilder
44524         };
44525
44526         var PointBuilder = function PointBuilder () {
44527           this._op = null;
44528           this._geometryFactory = null;
44529           this._resultPointList = new ArrayList();
44530           var op = arguments[0];
44531           var geometryFactory = arguments[1];
44532           // const ptLocator = arguments[2]
44533           this._op = op;
44534           this._geometryFactory = geometryFactory;
44535         };
44536         PointBuilder.prototype.filterCoveredNodeToPoint = function filterCoveredNodeToPoint (n) {
44537           var coord = n.getCoordinate();
44538           if (!this._op.isCoveredByLA(coord)) {
44539             var pt = this._geometryFactory.createPoint(coord);
44540             this._resultPointList.add(pt);
44541           }
44542         };
44543         PointBuilder.prototype.extractNonCoveredResultNodes = function extractNonCoveredResultNodes (opCode) {
44544             var this$1 = this;
44545
44546           for (var nodeit = this._op.getGraph().getNodes().iterator(); nodeit.hasNext();) {
44547             var n = nodeit.next();
44548             if (n.isInResult()) { continue }
44549             if (n.isIncidentEdgeInResult()) { continue }
44550             if (n.getEdges().getDegree() === 0 || opCode === OverlayOp.INTERSECTION) {
44551               var label = n.getLabel();
44552               if (OverlayOp.isResultOfOp(label, opCode)) {
44553                 this$1.filterCoveredNodeToPoint(n);
44554               }
44555             }
44556           }
44557         };
44558         PointBuilder.prototype.build = function build (opCode) {
44559           this.extractNonCoveredResultNodes(opCode);
44560           return this._resultPointList
44561         };
44562         PointBuilder.prototype.interfaces_ = function interfaces_ () {
44563           return []
44564         };
44565         PointBuilder.prototype.getClass = function getClass () {
44566           return PointBuilder
44567         };
44568
44569         var GeometryTransformer = function GeometryTransformer () {
44570           this._inputGeom = null;
44571           this._factory = null;
44572           this._pruneEmptyGeometry = true;
44573           this._preserveGeometryCollectionType = true;
44574           this._preserveCollections = false;
44575           this._preserveType = false;
44576         };
44577         GeometryTransformer.prototype.transformPoint = function transformPoint (geom, parent) {
44578           return this._factory.createPoint(this.transformCoordinates(geom.getCoordinateSequence(), geom))
44579         };
44580         GeometryTransformer.prototype.transformPolygon = function transformPolygon (geom, parent) {
44581             var this$1 = this;
44582
44583           var isAllValidLinearRings = true;
44584           var shell = this.transformLinearRing(geom.getExteriorRing(), geom);
44585           if (shell === null || !(shell instanceof LinearRing) || shell.isEmpty()) { isAllValidLinearRings = false; }
44586           var holes = new ArrayList();
44587           for (var i = 0; i < geom.getNumInteriorRing(); i++) {
44588             var hole = this$1.transformLinearRing(geom.getInteriorRingN(i), geom);
44589             if (hole === null || hole.isEmpty()) {
44590               continue
44591             }
44592             if (!(hole instanceof LinearRing)) { isAllValidLinearRings = false; }
44593             holes.add(hole);
44594           }
44595           if (isAllValidLinearRings) { return this._factory.createPolygon(shell, holes.toArray([])); } else {
44596             var components = new ArrayList();
44597             if (shell !== null) { components.add(shell); }
44598             components.addAll(holes);
44599             return this._factory.buildGeometry(components)
44600           }
44601         };
44602         GeometryTransformer.prototype.createCoordinateSequence = function createCoordinateSequence (coords) {
44603           return this._factory.getCoordinateSequenceFactory().create(coords)
44604         };
44605         GeometryTransformer.prototype.getInputGeometry = function getInputGeometry () {
44606           return this._inputGeom
44607         };
44608         GeometryTransformer.prototype.transformMultiLineString = function transformMultiLineString (geom, parent) {
44609             var this$1 = this;
44610
44611           var transGeomList = new ArrayList();
44612           for (var i = 0; i < geom.getNumGeometries(); i++) {
44613             var transformGeom = this$1.transformLineString(geom.getGeometryN(i), geom);
44614             if (transformGeom === null) { continue }
44615             if (transformGeom.isEmpty()) { continue }
44616             transGeomList.add(transformGeom);
44617           }
44618           return this._factory.buildGeometry(transGeomList)
44619         };
44620         GeometryTransformer.prototype.transformCoordinates = function transformCoordinates (coords, parent) {
44621           return this.copy(coords)
44622         };
44623         GeometryTransformer.prototype.transformLineString = function transformLineString (geom, parent) {
44624           return this._factory.createLineString(this.transformCoordinates(geom.getCoordinateSequence(), geom))
44625         };
44626         GeometryTransformer.prototype.transformMultiPoint = function transformMultiPoint (geom, parent) {
44627             var this$1 = this;
44628
44629           var transGeomList = new ArrayList();
44630           for (var i = 0; i < geom.getNumGeometries(); i++) {
44631             var transformGeom = this$1.transformPoint(geom.getGeometryN(i), geom);
44632             if (transformGeom === null) { continue }
44633             if (transformGeom.isEmpty()) { continue }
44634             transGeomList.add(transformGeom);
44635           }
44636           return this._factory.buildGeometry(transGeomList)
44637         };
44638         GeometryTransformer.prototype.transformMultiPolygon = function transformMultiPolygon (geom, parent) {
44639             var this$1 = this;
44640
44641           var transGeomList = new ArrayList();
44642           for (var i = 0; i < geom.getNumGeometries(); i++) {
44643             var transformGeom = this$1.transformPolygon(geom.getGeometryN(i), geom);
44644             if (transformGeom === null) { continue }
44645             if (transformGeom.isEmpty()) { continue }
44646             transGeomList.add(transformGeom);
44647           }
44648           return this._factory.buildGeometry(transGeomList)
44649         };
44650         GeometryTransformer.prototype.copy = function copy (seq) {
44651           return seq.copy()
44652         };
44653         GeometryTransformer.prototype.transformGeometryCollection = function transformGeometryCollection (geom, parent) {
44654             var this$1 = this;
44655
44656           var transGeomList = new ArrayList();
44657           for (var i = 0; i < geom.getNumGeometries(); i++) {
44658             var transformGeom = this$1.transform(geom.getGeometryN(i));
44659             if (transformGeom === null) { continue }
44660             if (this$1._pruneEmptyGeometry && transformGeom.isEmpty()) { continue }
44661             transGeomList.add(transformGeom);
44662           }
44663           if (this._preserveGeometryCollectionType) { return this._factory.createGeometryCollection(GeometryFactory.toGeometryArray(transGeomList)) }
44664           return this._factory.buildGeometry(transGeomList)
44665         };
44666         GeometryTransformer.prototype.transform = function transform (inputGeom) {
44667           this._inputGeom = inputGeom;
44668           this._factory = inputGeom.getFactory();
44669           if (inputGeom instanceof Point) { return this.transformPoint(inputGeom, null) }
44670           if (inputGeom instanceof MultiPoint) { return this.transformMultiPoint(inputGeom, null) }
44671           if (inputGeom instanceof LinearRing) { return this.transformLinearRing(inputGeom, null) }
44672           if (inputGeom instanceof LineString) { return this.transformLineString(inputGeom, null) }
44673           if (inputGeom instanceof MultiLineString) { return this.transformMultiLineString(inputGeom, null) }
44674           if (inputGeom instanceof Polygon) { return this.transformPolygon(inputGeom, null) }
44675           if (inputGeom instanceof MultiPolygon) { return this.transformMultiPolygon(inputGeom, null) }
44676           if (inputGeom instanceof GeometryCollection) { return this.transformGeometryCollection(inputGeom, null) }
44677           throw new IllegalArgumentException('Unknown Geometry subtype: ' + inputGeom.getClass().getName())
44678         };
44679         GeometryTransformer.prototype.transformLinearRing = function transformLinearRing (geom, parent) {
44680           var seq = this.transformCoordinates(geom.getCoordinateSequence(), geom);
44681           if (seq === null) { return this._factory.createLinearRing(null) }
44682           var seqSize = seq.size();
44683           if (seqSize > 0 && seqSize < 4 && !this._preserveType) { return this._factory.createLineString(seq) }
44684           return this._factory.createLinearRing(seq)
44685         };
44686         GeometryTransformer.prototype.interfaces_ = function interfaces_ () {
44687           return []
44688         };
44689         GeometryTransformer.prototype.getClass = function getClass () {
44690           return GeometryTransformer
44691         };
44692
44693         var LineStringSnapper = function LineStringSnapper () {
44694           this._snapTolerance = 0.0;
44695           this._srcPts = null;
44696           this._seg = new LineSegment();
44697           this._allowSnappingToSourceVertices = false;
44698           this._isClosed = false;
44699           if (arguments[0] instanceof LineString && typeof arguments[1] === 'number') {
44700             var srcLine = arguments[0];
44701             var snapTolerance = arguments[1];
44702             LineStringSnapper.call(this, srcLine.getCoordinates(), snapTolerance);
44703           } else if (arguments[0] instanceof Array && typeof arguments[1] === 'number') {
44704             var srcPts = arguments[0];
44705             var snapTolerance$1 = arguments[1];
44706             this._srcPts = srcPts;
44707             this._isClosed = LineStringSnapper.isClosed(srcPts);
44708             this._snapTolerance = snapTolerance$1;
44709           }
44710         };
44711         LineStringSnapper.prototype.snapVertices = function snapVertices (srcCoords, snapPts) {
44712             var this$1 = this;
44713
44714           var end = this._isClosed ? srcCoords.size() - 1 : srcCoords.size();
44715           for (var i = 0; i < end; i++) {
44716             var srcPt = srcCoords.get(i);
44717             var snapVert = this$1.findSnapForVertex(srcPt, snapPts);
44718             if (snapVert !== null) {
44719               srcCoords.set(i, new Coordinate(snapVert));
44720               if (i === 0 && this$1._isClosed) { srcCoords.set(srcCoords.size() - 1, new Coordinate(snapVert)); }
44721             }
44722           }
44723         };
44724         LineStringSnapper.prototype.findSnapForVertex = function findSnapForVertex (pt, snapPts) {
44725             var this$1 = this;
44726
44727           for (var i = 0; i < snapPts.length; i++) {
44728             if (pt.equals2D(snapPts[i])) { return null }
44729             if (pt.distance(snapPts[i]) < this$1._snapTolerance) { return snapPts[i] }
44730           }
44731           return null
44732         };
44733         LineStringSnapper.prototype.snapTo = function snapTo (snapPts) {
44734           var coordList = new CoordinateList(this._srcPts);
44735           this.snapVertices(coordList, snapPts);
44736           this.snapSegments(coordList, snapPts);
44737           var newPts = coordList.toCoordinateArray();
44738           return newPts
44739         };
44740         LineStringSnapper.prototype.snapSegments = function snapSegments (srcCoords, snapPts) {
44741             var this$1 = this;
44742
44743           if (snapPts.length === 0) { return null }
44744           var distinctPtCount = snapPts.length;
44745           if (snapPts[0].equals2D(snapPts[snapPts.length - 1])) { distinctPtCount = snapPts.length - 1; }
44746           for (var i = 0; i < distinctPtCount; i++) {
44747             var snapPt = snapPts[i];
44748             var index = this$1.findSegmentIndexToSnap(snapPt, srcCoords);
44749             if (index >= 0) {
44750               srcCoords.add(index + 1, new Coordinate(snapPt), false);
44751             }
44752           }
44753         };
44754         LineStringSnapper.prototype.findSegmentIndexToSnap = function findSegmentIndexToSnap (snapPt, srcCoords) {
44755             var this$1 = this;
44756
44757           var minDist = Double.MAX_VALUE;
44758           var snapIndex = -1;
44759           for (var i = 0; i < srcCoords.size() - 1; i++) {
44760             this$1._seg.p0 = srcCoords.get(i);
44761             this$1._seg.p1 = srcCoords.get(i + 1);
44762             if (this$1._seg.p0.equals2D(snapPt) || this$1._seg.p1.equals2D(snapPt)) {
44763               if (this$1._allowSnappingToSourceVertices) { continue; } else { return -1 }
44764             }
44765             var dist = this$1._seg.distance(snapPt);
44766             if (dist < this$1._snapTolerance && dist < minDist) {
44767               minDist = dist;
44768               snapIndex = i;
44769             }
44770           }
44771           return snapIndex
44772         };
44773         LineStringSnapper.prototype.setAllowSnappingToSourceVertices = function setAllowSnappingToSourceVertices (allowSnappingToSourceVertices) {
44774           this._allowSnappingToSourceVertices = allowSnappingToSourceVertices;
44775         };
44776         LineStringSnapper.prototype.interfaces_ = function interfaces_ () {
44777           return []
44778         };
44779         LineStringSnapper.prototype.getClass = function getClass () {
44780           return LineStringSnapper
44781         };
44782         LineStringSnapper.isClosed = function isClosed (pts) {
44783           if (pts.length <= 1) { return false }
44784           return pts[0].equals2D(pts[pts.length - 1])
44785         };
44786
44787         var GeometrySnapper = function GeometrySnapper (srcGeom) {
44788           this._srcGeom = srcGeom || null;
44789         };
44790
44791         var staticAccessors$41 = { SNAP_PRECISION_FACTOR: { configurable: true } };
44792         GeometrySnapper.prototype.snapTo = function snapTo (snapGeom, snapTolerance) {
44793           var snapPts = this.extractTargetCoordinates(snapGeom);
44794           var snapTrans = new SnapTransformer(snapTolerance, snapPts);
44795           return snapTrans.transform(this._srcGeom)
44796         };
44797         GeometrySnapper.prototype.snapToSelf = function snapToSelf (snapTolerance, cleanResult) {
44798           var snapPts = this.extractTargetCoordinates(this._srcGeom);
44799           var snapTrans = new SnapTransformer(snapTolerance, snapPts, true);
44800           var snappedGeom = snapTrans.transform(this._srcGeom);
44801           var result = snappedGeom;
44802           if (cleanResult && hasInterface(result, Polygonal)) {
44803             result = snappedGeom.buffer(0);
44804           }
44805           return result
44806         };
44807         GeometrySnapper.prototype.computeSnapTolerance = function computeSnapTolerance (ringPts) {
44808           var minSegLen = this.computeMinimumSegmentLength(ringPts);
44809           var snapTol = minSegLen / 10;
44810           return snapTol
44811         };
44812         GeometrySnapper.prototype.extractTargetCoordinates = function extractTargetCoordinates (g) {
44813           var ptSet = new TreeSet();
44814           var pts = g.getCoordinates();
44815           for (var i = 0; i < pts.length; i++) {
44816             ptSet.add(pts[i]);
44817           }
44818           return ptSet.toArray(new Array(0).fill(null))
44819         };
44820         GeometrySnapper.prototype.computeMinimumSegmentLength = function computeMinimumSegmentLength (pts) {
44821           var minSegLen = Double.MAX_VALUE;
44822           for (var i = 0; i < pts.length - 1; i++) {
44823             var segLen = pts[i].distance(pts[i + 1]);
44824             if (segLen < minSegLen) { minSegLen = segLen; }
44825           }
44826           return minSegLen
44827         };
44828         GeometrySnapper.prototype.interfaces_ = function interfaces_ () {
44829           return []
44830         };
44831         GeometrySnapper.prototype.getClass = function getClass () {
44832           return GeometrySnapper
44833         };
44834         GeometrySnapper.snap = function snap (g0, g1, snapTolerance) {
44835           var snapGeom = new Array(2).fill(null);
44836           var snapper0 = new GeometrySnapper(g0);
44837           snapGeom[0] = snapper0.snapTo(g1, snapTolerance);
44838           var snapper1 = new GeometrySnapper(g1);
44839           snapGeom[1] = snapper1.snapTo(snapGeom[0], snapTolerance);
44840           return snapGeom
44841         };
44842         GeometrySnapper.computeOverlaySnapTolerance = function computeOverlaySnapTolerance () {
44843           if (arguments.length === 1) {
44844             var g = arguments[0];
44845             var snapTolerance = GeometrySnapper.computeSizeBasedSnapTolerance(g);
44846             var pm = g.getPrecisionModel();
44847             if (pm.getType() === PrecisionModel.FIXED) {
44848               var fixedSnapTol = 1 / pm.getScale() * 2 / 1.415;
44849               if (fixedSnapTol > snapTolerance) { snapTolerance = fixedSnapTol; }
44850             }
44851             return snapTolerance
44852           } else if (arguments.length === 2) {
44853             var g0 = arguments[0];
44854             var g1 = arguments[1];
44855             return Math.min(GeometrySnapper.computeOverlaySnapTolerance(g0), GeometrySnapper.computeOverlaySnapTolerance(g1))
44856           }
44857         };
44858         GeometrySnapper.computeSizeBasedSnapTolerance = function computeSizeBasedSnapTolerance (g) {
44859           var env = g.getEnvelopeInternal();
44860           var minDimension = Math.min(env.getHeight(), env.getWidth());
44861           var snapTol = minDimension * GeometrySnapper.SNAP_PRECISION_FACTOR;
44862           return snapTol
44863         };
44864         GeometrySnapper.snapToSelf = function snapToSelf (geom, snapTolerance, cleanResult) {
44865           var snapper0 = new GeometrySnapper(geom);
44866           return snapper0.snapToSelf(snapTolerance, cleanResult)
44867         };
44868         staticAccessors$41.SNAP_PRECISION_FACTOR.get = function () { return 1e-9 };
44869
44870         Object.defineProperties( GeometrySnapper, staticAccessors$41 );
44871
44872         var SnapTransformer = (function (GeometryTransformer$$1) {
44873           function SnapTransformer (snapTolerance, snapPts, isSelfSnap) {
44874             GeometryTransformer$$1.call(this);
44875             this._snapTolerance = snapTolerance || null;
44876             this._snapPts = snapPts || null;
44877             this._isSelfSnap = (isSelfSnap !== undefined) ? isSelfSnap : false;
44878           }
44879
44880           if ( GeometryTransformer$$1 ) { SnapTransformer.__proto__ = GeometryTransformer$$1; }
44881           SnapTransformer.prototype = Object.create( GeometryTransformer$$1 && GeometryTransformer$$1.prototype );
44882           SnapTransformer.prototype.constructor = SnapTransformer;
44883           SnapTransformer.prototype.snapLine = function snapLine (srcPts, snapPts) {
44884             var snapper = new LineStringSnapper(srcPts, this._snapTolerance);
44885             snapper.setAllowSnappingToSourceVertices(this._isSelfSnap);
44886             return snapper.snapTo(snapPts)
44887           };
44888           SnapTransformer.prototype.transformCoordinates = function transformCoordinates (coords, parent) {
44889             var srcPts = coords.toCoordinateArray();
44890             var newPts = this.snapLine(srcPts, this._snapPts);
44891             return this._factory.getCoordinateSequenceFactory().create(newPts)
44892           };
44893           SnapTransformer.prototype.interfaces_ = function interfaces_ () {
44894             return []
44895           };
44896           SnapTransformer.prototype.getClass = function getClass () {
44897             return SnapTransformer
44898           };
44899
44900           return SnapTransformer;
44901         }(GeometryTransformer));
44902
44903         var CommonBits = function CommonBits () {
44904           this._isFirst = true;
44905           this._commonMantissaBitsCount = 53;
44906           this._commonBits = 0;
44907           this._commonSignExp = null;
44908         };
44909         CommonBits.prototype.getCommon = function getCommon () {
44910           return Double.longBitsToDouble(this._commonBits)
44911         };
44912         CommonBits.prototype.add = function add (num) {
44913           var numBits = Double.doubleToLongBits(num);
44914           if (this._isFirst) {
44915             this._commonBits = numBits;
44916             this._commonSignExp = CommonBits.signExpBits(this._commonBits);
44917             this._isFirst = false;
44918             return null
44919           }
44920           var numSignExp = CommonBits.signExpBits(numBits);
44921           if (numSignExp !== this._commonSignExp) {
44922             this._commonBits = 0;
44923             return null
44924           }
44925           this._commonMantissaBitsCount = CommonBits.numCommonMostSigMantissaBits(this._commonBits, numBits);
44926           this._commonBits = CommonBits.zeroLowerBits(this._commonBits, 64 - (12 + this._commonMantissaBitsCount));
44927         };
44928         CommonBits.prototype.toString = function toString () {
44929           if (arguments.length === 1) {
44930             var bits = arguments[0];
44931             var x = Double.longBitsToDouble(bits);
44932             var numStr = Double.toBinaryString(bits);
44933             var padStr = '0000000000000000000000000000000000000000000000000000000000000000' + numStr;
44934             var bitStr = padStr.substring(padStr.length - 64);
44935             var str = bitStr.substring(0, 1) + '  ' + bitStr.substring(1, 12) + '(exp) ' + bitStr.substring(12) + ' [ ' + x + ' ]';
44936             return str
44937           }
44938         };
44939         CommonBits.prototype.interfaces_ = function interfaces_ () {
44940           return []
44941         };
44942         CommonBits.prototype.getClass = function getClass () {
44943           return CommonBits
44944         };
44945         CommonBits.getBit = function getBit (bits, i) {
44946           var mask = 1 << i;
44947           return (bits & mask) !== 0 ? 1 : 0
44948         };
44949         CommonBits.signExpBits = function signExpBits (num) {
44950           return num >> 52
44951         };
44952         CommonBits.zeroLowerBits = function zeroLowerBits (bits, nBits) {
44953           var invMask = (1 << nBits) - 1;
44954           var mask = ~invMask;
44955           var zeroed = bits & mask;
44956           return zeroed
44957         };
44958         CommonBits.numCommonMostSigMantissaBits = function numCommonMostSigMantissaBits (num1, num2) {
44959           var count = 0;
44960           for (var i = 52; i >= 0; i--) {
44961             if (CommonBits.getBit(num1, i) !== CommonBits.getBit(num2, i)) { return count }
44962             count++;
44963           }
44964           return 52
44965         };
44966
44967         var CommonBitsRemover = function CommonBitsRemover () {
44968           this._commonCoord = null;
44969           this._ccFilter = new CommonCoordinateFilter();
44970         };
44971
44972         var staticAccessors$42 = { CommonCoordinateFilter: { configurable: true },Translater: { configurable: true } };
44973         CommonBitsRemover.prototype.addCommonBits = function addCommonBits (geom) {
44974           var trans = new Translater(this._commonCoord);
44975           geom.apply(trans);
44976           geom.geometryChanged();
44977         };
44978         CommonBitsRemover.prototype.removeCommonBits = function removeCommonBits (geom) {
44979           if (this._commonCoord.x === 0.0 && this._commonCoord.y === 0.0) { return geom }
44980           var invCoord = new Coordinate(this._commonCoord);
44981           invCoord.x = -invCoord.x;
44982           invCoord.y = -invCoord.y;
44983           var trans = new Translater(invCoord);
44984           geom.apply(trans);
44985           geom.geometryChanged();
44986           return geom
44987         };
44988         CommonBitsRemover.prototype.getCommonCoordinate = function getCommonCoordinate () {
44989           return this._commonCoord
44990         };
44991         CommonBitsRemover.prototype.add = function add (geom) {
44992           geom.apply(this._ccFilter);
44993           this._commonCoord = this._ccFilter.getCommonCoordinate();
44994         };
44995         CommonBitsRemover.prototype.interfaces_ = function interfaces_ () {
44996           return []
44997         };
44998         CommonBitsRemover.prototype.getClass = function getClass () {
44999           return CommonBitsRemover
45000         };
45001         staticAccessors$42.CommonCoordinateFilter.get = function () { return CommonCoordinateFilter };
45002         staticAccessors$42.Translater.get = function () { return Translater };
45003
45004         Object.defineProperties( CommonBitsRemover, staticAccessors$42 );
45005
45006         var CommonCoordinateFilter = function CommonCoordinateFilter () {
45007           this._commonBitsX = new CommonBits();
45008           this._commonBitsY = new CommonBits();
45009         };
45010         CommonCoordinateFilter.prototype.filter = function filter (coord) {
45011           this._commonBitsX.add(coord.x);
45012           this._commonBitsY.add(coord.y);
45013         };
45014         CommonCoordinateFilter.prototype.getCommonCoordinate = function getCommonCoordinate () {
45015           return new Coordinate(this._commonBitsX.getCommon(), this._commonBitsY.getCommon())
45016         };
45017         CommonCoordinateFilter.prototype.interfaces_ = function interfaces_ () {
45018           return [CoordinateFilter]
45019         };
45020         CommonCoordinateFilter.prototype.getClass = function getClass () {
45021           return CommonCoordinateFilter
45022         };
45023
45024         var Translater = function Translater () {
45025           this.trans = null;
45026           var trans = arguments[0];
45027           this.trans = trans;
45028         };
45029         Translater.prototype.filter = function filter (seq, i) {
45030           var xp = seq.getOrdinate(i, 0) + this.trans.x;
45031           var yp = seq.getOrdinate(i, 1) + this.trans.y;
45032           seq.setOrdinate(i, 0, xp);
45033           seq.setOrdinate(i, 1, yp);
45034         };
45035         Translater.prototype.isDone = function isDone () {
45036           return false
45037         };
45038         Translater.prototype.isGeometryChanged = function isGeometryChanged () {
45039           return true
45040         };
45041         Translater.prototype.interfaces_ = function interfaces_ () {
45042           return [CoordinateSequenceFilter]
45043         };
45044         Translater.prototype.getClass = function getClass () {
45045           return Translater
45046         };
45047
45048         var SnapOverlayOp = function SnapOverlayOp (g1, g2) {
45049           this._geom = new Array(2).fill(null);
45050           this._snapTolerance = null;
45051           this._cbr = null;
45052           this._geom[0] = g1;
45053           this._geom[1] = g2;
45054           this.computeSnapTolerance();
45055         };
45056         SnapOverlayOp.prototype.selfSnap = function selfSnap (geom) {
45057           var snapper0 = new GeometrySnapper(geom);
45058           var snapGeom = snapper0.snapTo(geom, this._snapTolerance);
45059           return snapGeom
45060         };
45061         SnapOverlayOp.prototype.removeCommonBits = function removeCommonBits (geom) {
45062           this._cbr = new CommonBitsRemover();
45063           this._cbr.add(geom[0]);
45064           this._cbr.add(geom[1]);
45065           var remGeom = new Array(2).fill(null);
45066           remGeom[0] = this._cbr.removeCommonBits(geom[0].copy());
45067           remGeom[1] = this._cbr.removeCommonBits(geom[1].copy());
45068           return remGeom
45069         };
45070         SnapOverlayOp.prototype.prepareResult = function prepareResult (geom) {
45071           this._cbr.addCommonBits(geom);
45072           return geom
45073         };
45074         SnapOverlayOp.prototype.getResultGeometry = function getResultGeometry (opCode) {
45075           var prepGeom = this.snap(this._geom);
45076           var result = OverlayOp.overlayOp(prepGeom[0], prepGeom[1], opCode);
45077           return this.prepareResult(result)
45078         };
45079         SnapOverlayOp.prototype.checkValid = function checkValid (g) {
45080           if (!g.isValid()) {
45081             System.out.println('Snapped geometry is invalid');
45082           }
45083         };
45084         SnapOverlayOp.prototype.computeSnapTolerance = function computeSnapTolerance () {
45085           this._snapTolerance = GeometrySnapper.computeOverlaySnapTolerance(this._geom[0], this._geom[1]);
45086         };
45087         SnapOverlayOp.prototype.snap = function snap (geom) {
45088           var remGeom = this.removeCommonBits(geom);
45089           var snapGeom = GeometrySnapper.snap(remGeom[0], remGeom[1], this._snapTolerance);
45090           return snapGeom
45091         };
45092         SnapOverlayOp.prototype.interfaces_ = function interfaces_ () {
45093           return []
45094         };
45095         SnapOverlayOp.prototype.getClass = function getClass () {
45096           return SnapOverlayOp
45097         };
45098         SnapOverlayOp.overlayOp = function overlayOp (g0, g1, opCode) {
45099           var op = new SnapOverlayOp(g0, g1);
45100           return op.getResultGeometry(opCode)
45101         };
45102         SnapOverlayOp.union = function union (g0, g1) {
45103           return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.UNION)
45104         };
45105         SnapOverlayOp.intersection = function intersection (g0, g1) {
45106           return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.INTERSECTION)
45107         };
45108         SnapOverlayOp.symDifference = function symDifference (g0, g1) {
45109           return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.SYMDIFFERENCE)
45110         };
45111         SnapOverlayOp.difference = function difference (g0, g1) {
45112           return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.DIFFERENCE)
45113         };
45114
45115         var SnapIfNeededOverlayOp = function SnapIfNeededOverlayOp (g1, g2) {
45116           this._geom = new Array(2).fill(null);
45117           this._geom[0] = g1;
45118           this._geom[1] = g2;
45119         };
45120         SnapIfNeededOverlayOp.prototype.getResultGeometry = function getResultGeometry (opCode) {
45121           var result = null;
45122           var isSuccess = false;
45123           var savedException = null;
45124           try {
45125             result = OverlayOp.overlayOp(this._geom[0], this._geom[1], opCode);
45126             var isValid = true;
45127             if (isValid) { isSuccess = true; }
45128           } catch (ex) {
45129             if (ex instanceof RuntimeException) {
45130               savedException = ex;
45131             } else { throw ex }
45132           } finally {}
45133           if (!isSuccess) {
45134             try {
45135               result = SnapOverlayOp.overlayOp(this._geom[0], this._geom[1], opCode);
45136             } catch (ex) {
45137               if (ex instanceof RuntimeException) {
45138                 throw savedException
45139               } else { throw ex }
45140             } finally {}
45141           }
45142           return result
45143         };
45144         SnapIfNeededOverlayOp.prototype.interfaces_ = function interfaces_ () {
45145           return []
45146         };
45147         SnapIfNeededOverlayOp.prototype.getClass = function getClass () {
45148           return SnapIfNeededOverlayOp
45149         };
45150         SnapIfNeededOverlayOp.overlayOp = function overlayOp (g0, g1, opCode) {
45151           var op = new SnapIfNeededOverlayOp(g0, g1);
45152           return op.getResultGeometry(opCode)
45153         };
45154         SnapIfNeededOverlayOp.union = function union (g0, g1) {
45155           return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.UNION)
45156         };
45157         SnapIfNeededOverlayOp.intersection = function intersection (g0, g1) {
45158           return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.INTERSECTION)
45159         };
45160         SnapIfNeededOverlayOp.symDifference = function symDifference (g0, g1) {
45161           return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.SYMDIFFERENCE)
45162         };
45163         SnapIfNeededOverlayOp.difference = function difference (g0, g1) {
45164           return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.DIFFERENCE)
45165         };
45166
45167         var MonotoneChain$2 = function MonotoneChain () {
45168           this.mce = null;
45169           this.chainIndex = null;
45170           var mce = arguments[0];
45171           var chainIndex = arguments[1];
45172           this.mce = mce;
45173           this.chainIndex = chainIndex;
45174         };
45175         MonotoneChain$2.prototype.computeIntersections = function computeIntersections (mc, si) {
45176           this.mce.computeIntersectsForChain(this.chainIndex, mc.mce, mc.chainIndex, si);
45177         };
45178         MonotoneChain$2.prototype.interfaces_ = function interfaces_ () {
45179           return []
45180         };
45181         MonotoneChain$2.prototype.getClass = function getClass () {
45182           return MonotoneChain$2
45183         };
45184
45185         var SweepLineEvent = function SweepLineEvent () {
45186           this._label = null;
45187           this._xValue = null;
45188           this._eventType = null;
45189           this._insertEvent = null;
45190           this._deleteEventIndex = null;
45191           this._obj = null;
45192           if (arguments.length === 2) {
45193             var x = arguments[0];
45194             var insertEvent = arguments[1];
45195             this._eventType = SweepLineEvent.DELETE;
45196             this._xValue = x;
45197             this._insertEvent = insertEvent;
45198           } else if (arguments.length === 3) {
45199             var label = arguments[0];
45200             var x$1 = arguments[1];
45201             var obj = arguments[2];
45202             this._eventType = SweepLineEvent.INSERT;
45203             this._label = label;
45204             this._xValue = x$1;
45205             this._obj = obj;
45206           }
45207         };
45208
45209         var staticAccessors$43 = { INSERT: { configurable: true },DELETE: { configurable: true } };
45210         SweepLineEvent.prototype.isDelete = function isDelete () {
45211           return this._eventType === SweepLineEvent.DELETE
45212         };
45213         SweepLineEvent.prototype.setDeleteEventIndex = function setDeleteEventIndex (deleteEventIndex) {
45214           this._deleteEventIndex = deleteEventIndex;
45215         };
45216         SweepLineEvent.prototype.getObject = function getObject () {
45217           return this._obj
45218         };
45219         SweepLineEvent.prototype.compareTo = function compareTo (o) {
45220           var pe = o;
45221           if (this._xValue < pe._xValue) { return -1 }
45222           if (this._xValue > pe._xValue) { return 1 }
45223           if (this._eventType < pe._eventType) { return -1 }
45224           if (this._eventType > pe._eventType) { return 1 }
45225           return 0
45226         };
45227         SweepLineEvent.prototype.getInsertEvent = function getInsertEvent () {
45228           return this._insertEvent
45229         };
45230         SweepLineEvent.prototype.isInsert = function isInsert () {
45231           return this._eventType === SweepLineEvent.INSERT
45232         };
45233         SweepLineEvent.prototype.isSameLabel = function isSameLabel (ev) {
45234           if (this._label === null) { return false }
45235           return this._label === ev._label
45236         };
45237         SweepLineEvent.prototype.getDeleteEventIndex = function getDeleteEventIndex () {
45238           return this._deleteEventIndex
45239         };
45240         SweepLineEvent.prototype.interfaces_ = function interfaces_ () {
45241           return [Comparable]
45242         };
45243         SweepLineEvent.prototype.getClass = function getClass () {
45244           return SweepLineEvent
45245         };
45246         staticAccessors$43.INSERT.get = function () { return 1 };
45247         staticAccessors$43.DELETE.get = function () { return 2 };
45248
45249         Object.defineProperties( SweepLineEvent, staticAccessors$43 );
45250
45251         var EdgeSetIntersector = function EdgeSetIntersector () {};
45252
45253         EdgeSetIntersector.prototype.interfaces_ = function interfaces_ () {
45254           return []
45255         };
45256         EdgeSetIntersector.prototype.getClass = function getClass () {
45257           return EdgeSetIntersector
45258         };
45259
45260         var SegmentIntersector$2 = function SegmentIntersector () {
45261           this._hasIntersection = false;
45262           this._hasProper = false;
45263           this._hasProperInterior = false;
45264           this._properIntersectionPoint = null;
45265           this._li = null;
45266           this._includeProper = null;
45267           this._recordIsolated = null;
45268           this._isSelfIntersection = null;
45269           this._numIntersections = 0;
45270           this.numTests = 0;
45271           this._bdyNodes = null;
45272           this._isDone = false;
45273           this._isDoneWhenProperInt = false;
45274           var li = arguments[0];
45275           var includeProper = arguments[1];
45276           var recordIsolated = arguments[2];
45277           this._li = li;
45278           this._includeProper = includeProper;
45279           this._recordIsolated = recordIsolated;
45280         };
45281         SegmentIntersector$2.prototype.isTrivialIntersection = function isTrivialIntersection (e0, segIndex0, e1, segIndex1) {
45282           if (e0 === e1) {
45283             if (this._li.getIntersectionNum() === 1) {
45284               if (SegmentIntersector$2.isAdjacentSegments(segIndex0, segIndex1)) { return true }
45285               if (e0.isClosed()) {
45286                 var maxSegIndex = e0.getNumPoints() - 1;
45287                 if ((segIndex0 === 0 && segIndex1 === maxSegIndex) ||
45288                     (segIndex1 === 0 && segIndex0 === maxSegIndex)) {
45289                   return true
45290                 }
45291               }
45292             }
45293           }
45294           return false
45295         };
45296         SegmentIntersector$2.prototype.getProperIntersectionPoint = function getProperIntersectionPoint () {
45297           return this._properIntersectionPoint
45298         };
45299         SegmentIntersector$2.prototype.setIsDoneIfProperInt = function setIsDoneIfProperInt (isDoneWhenProperInt) {
45300           this._isDoneWhenProperInt = isDoneWhenProperInt;
45301         };
45302         SegmentIntersector$2.prototype.hasProperInteriorIntersection = function hasProperInteriorIntersection () {
45303           return this._hasProperInterior
45304         };
45305         SegmentIntersector$2.prototype.isBoundaryPointInternal = function isBoundaryPointInternal (li, bdyNodes) {
45306           for (var i = bdyNodes.iterator(); i.hasNext();) {
45307             var node = i.next();
45308             var pt = node.getCoordinate();
45309             if (li.isIntersection(pt)) { return true }
45310           }
45311           return false
45312         };
45313         SegmentIntersector$2.prototype.hasProperIntersection = function hasProperIntersection () {
45314           return this._hasProper
45315         };
45316         SegmentIntersector$2.prototype.hasIntersection = function hasIntersection () {
45317           return this._hasIntersection
45318         };
45319         SegmentIntersector$2.prototype.isDone = function isDone () {
45320           return this._isDone
45321         };
45322         SegmentIntersector$2.prototype.isBoundaryPoint = function isBoundaryPoint (li, bdyNodes) {
45323           if (bdyNodes === null) { return false }
45324           if (this.isBoundaryPointInternal(li, bdyNodes[0])) { return true }
45325           if (this.isBoundaryPointInternal(li, bdyNodes[1])) { return true }
45326           return false
45327         };
45328         SegmentIntersector$2.prototype.setBoundaryNodes = function setBoundaryNodes (bdyNodes0, bdyNodes1) {
45329           this._bdyNodes = new Array(2).fill(null);
45330           this._bdyNodes[0] = bdyNodes0;
45331           this._bdyNodes[1] = bdyNodes1;
45332         };
45333         SegmentIntersector$2.prototype.addIntersections = function addIntersections (e0, segIndex0, e1, segIndex1) {
45334           if (e0 === e1 && segIndex0 === segIndex1) { return null }
45335           this.numTests++;
45336           var p00 = e0.getCoordinates()[segIndex0];
45337           var p01 = e0.getCoordinates()[segIndex0 + 1];
45338           var p10 = e1.getCoordinates()[segIndex1];
45339           var p11 = e1.getCoordinates()[segIndex1 + 1];
45340           this._li.computeIntersection(p00, p01, p10, p11);
45341           if (this._li.hasIntersection()) {
45342             if (this._recordIsolated) {
45343               e0.setIsolated(false);
45344               e1.setIsolated(false);
45345             }
45346             this._numIntersections++;
45347             if (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {
45348               this._hasIntersection = true;
45349               if (this._includeProper || !this._li.isProper()) {
45350                 e0.addIntersections(this._li, segIndex0, 0);
45351                 e1.addIntersections(this._li, segIndex1, 1);
45352               }
45353               if (this._li.isProper()) {
45354                 this._properIntersectionPoint = this._li.getIntersection(0).copy();
45355                 this._hasProper = true;
45356                 if (this._isDoneWhenProperInt) {
45357                   this._isDone = true;
45358                 }
45359                 if (!this.isBoundaryPoint(this._li, this._bdyNodes)) { this._hasProperInterior = true; }
45360               }
45361             }
45362           }
45363         };
45364         SegmentIntersector$2.prototype.interfaces_ = function interfaces_ () {
45365           return []
45366         };
45367         SegmentIntersector$2.prototype.getClass = function getClass () {
45368           return SegmentIntersector$2
45369         };
45370         SegmentIntersector$2.isAdjacentSegments = function isAdjacentSegments (i1, i2) {
45371           return Math.abs(i1 - i2) === 1
45372         };
45373
45374         var SimpleMCSweepLineIntersector = (function (EdgeSetIntersector$$1) {
45375           function SimpleMCSweepLineIntersector () {
45376             EdgeSetIntersector$$1.call(this);
45377             this.events = new ArrayList();
45378             this.nOverlaps = null;
45379           }
45380
45381           if ( EdgeSetIntersector$$1 ) { SimpleMCSweepLineIntersector.__proto__ = EdgeSetIntersector$$1; }
45382           SimpleMCSweepLineIntersector.prototype = Object.create( EdgeSetIntersector$$1 && EdgeSetIntersector$$1.prototype );
45383           SimpleMCSweepLineIntersector.prototype.constructor = SimpleMCSweepLineIntersector;
45384           SimpleMCSweepLineIntersector.prototype.prepareEvents = function prepareEvents () {
45385             var this$1 = this;
45386
45387             Collections.sort(this.events);
45388             for (var i = 0; i < this.events.size(); i++) {
45389               var ev = this$1.events.get(i);
45390               if (ev.isDelete()) {
45391                 ev.getInsertEvent().setDeleteEventIndex(i);
45392               }
45393             }
45394           };
45395           SimpleMCSweepLineIntersector.prototype.computeIntersections = function computeIntersections () {
45396             var this$1 = this;
45397
45398             if (arguments.length === 1) {
45399               var si = arguments[0];
45400               this.nOverlaps = 0;
45401               this.prepareEvents();
45402               for (var i = 0; i < this.events.size(); i++) {
45403                 var ev = this$1.events.get(i);
45404                 if (ev.isInsert()) {
45405                   this$1.processOverlaps(i, ev.getDeleteEventIndex(), ev, si);
45406                 }
45407                 if (si.isDone()) {
45408                   break
45409                 }
45410               }
45411             } else if (arguments.length === 3) {
45412               if (arguments[2] instanceof SegmentIntersector$2 && (hasInterface(arguments[0], List) && hasInterface(arguments[1], List))) {
45413                 var edges0 = arguments[0];
45414                 var edges1 = arguments[1];
45415                 var si$1 = arguments[2];
45416                 this.addEdges(edges0, edges0);
45417                 this.addEdges(edges1, edges1);
45418                 this.computeIntersections(si$1);
45419               } else if (typeof arguments[2] === 'boolean' && (hasInterface(arguments[0], List) && arguments[1] instanceof SegmentIntersector$2)) {
45420                 var edges = arguments[0];
45421                 var si$2 = arguments[1];
45422                 var testAllSegments = arguments[2];
45423                 if (testAllSegments) { this.addEdges(edges, null); } else { this.addEdges(edges); }
45424                 this.computeIntersections(si$2);
45425               }
45426             }
45427           };
45428           SimpleMCSweepLineIntersector.prototype.addEdge = function addEdge (edge, edgeSet) {
45429             var this$1 = this;
45430
45431             var mce = edge.getMonotoneChainEdge();
45432             var startIndex = mce.getStartIndexes();
45433             for (var i = 0; i < startIndex.length - 1; i++) {
45434               var mc = new MonotoneChain$2(mce, i);
45435               var insertEvent = new SweepLineEvent(edgeSet, mce.getMinX(i), mc);
45436               this$1.events.add(insertEvent);
45437               this$1.events.add(new SweepLineEvent(mce.getMaxX(i), insertEvent));
45438             }
45439           };
45440           SimpleMCSweepLineIntersector.prototype.processOverlaps = function processOverlaps (start, end, ev0, si) {
45441             var this$1 = this;
45442
45443             var mc0 = ev0.getObject();
45444             for (var i = start; i < end; i++) {
45445               var ev1 = this$1.events.get(i);
45446               if (ev1.isInsert()) {
45447                 var mc1 = ev1.getObject();
45448                 if (!ev0.isSameLabel(ev1)) {
45449                   mc0.computeIntersections(mc1, si);
45450                   this$1.nOverlaps++;
45451                 }
45452               }
45453             }
45454           };
45455           SimpleMCSweepLineIntersector.prototype.addEdges = function addEdges () {
45456             var this$1 = this;
45457
45458             if (arguments.length === 1) {
45459               var edges = arguments[0];
45460               for (var i = edges.iterator(); i.hasNext();) {
45461                 var edge = i.next();
45462                 this$1.addEdge(edge, edge);
45463               }
45464             } else if (arguments.length === 2) {
45465               var edges$1 = arguments[0];
45466               var edgeSet = arguments[1];
45467               for (var i$1 = edges$1.iterator(); i$1.hasNext();) {
45468                 var edge$1 = i$1.next();
45469                 this$1.addEdge(edge$1, edgeSet);
45470               }
45471             }
45472           };
45473           SimpleMCSweepLineIntersector.prototype.interfaces_ = function interfaces_ () {
45474             return []
45475           };
45476           SimpleMCSweepLineIntersector.prototype.getClass = function getClass () {
45477             return SimpleMCSweepLineIntersector
45478           };
45479
45480           return SimpleMCSweepLineIntersector;
45481         }(EdgeSetIntersector));
45482
45483         var IntervalRTreeNode = function IntervalRTreeNode () {
45484           this._min = Double.POSITIVE_INFINITY;
45485           this._max = Double.NEGATIVE_INFINITY;
45486         };
45487
45488         var staticAccessors$45 = { NodeComparator: { configurable: true } };
45489         IntervalRTreeNode.prototype.getMin = function getMin () {
45490           return this._min
45491         };
45492         IntervalRTreeNode.prototype.intersects = function intersects (queryMin, queryMax) {
45493           if (this._min > queryMax || this._max < queryMin) { return false }
45494           return true
45495         };
45496         IntervalRTreeNode.prototype.getMax = function getMax () {
45497           return this._max
45498         };
45499         IntervalRTreeNode.prototype.toString = function toString () {
45500           return WKTWriter.toLineString(new Coordinate(this._min, 0), new Coordinate(this._max, 0))
45501         };
45502         IntervalRTreeNode.prototype.interfaces_ = function interfaces_ () {
45503           return []
45504         };
45505         IntervalRTreeNode.prototype.getClass = function getClass () {
45506           return IntervalRTreeNode
45507         };
45508         staticAccessors$45.NodeComparator.get = function () { return NodeComparator };
45509
45510         Object.defineProperties( IntervalRTreeNode, staticAccessors$45 );
45511
45512         var NodeComparator = function NodeComparator () {};
45513
45514         NodeComparator.prototype.compare = function compare (o1, o2) {
45515           var n1 = o1;
45516           var n2 = o2;
45517           var mid1 = (n1._min + n1._max) / 2;
45518           var mid2 = (n2._min + n2._max) / 2;
45519           if (mid1 < mid2) { return -1 }
45520           if (mid1 > mid2) { return 1 }
45521           return 0
45522         };
45523         NodeComparator.prototype.interfaces_ = function interfaces_ () {
45524           return [Comparator]
45525         };
45526         NodeComparator.prototype.getClass = function getClass () {
45527           return NodeComparator
45528         };
45529
45530         var IntervalRTreeLeafNode = (function (IntervalRTreeNode$$1) {
45531           function IntervalRTreeLeafNode () {
45532             IntervalRTreeNode$$1.call(this);
45533             this._item = null;
45534             var min = arguments[0];
45535             var max = arguments[1];
45536             var item = arguments[2];
45537             this._min = min;
45538             this._max = max;
45539             this._item = item;
45540           }
45541
45542           if ( IntervalRTreeNode$$1 ) { IntervalRTreeLeafNode.__proto__ = IntervalRTreeNode$$1; }
45543           IntervalRTreeLeafNode.prototype = Object.create( IntervalRTreeNode$$1 && IntervalRTreeNode$$1.prototype );
45544           IntervalRTreeLeafNode.prototype.constructor = IntervalRTreeLeafNode;
45545           IntervalRTreeLeafNode.prototype.query = function query (queryMin, queryMax, visitor) {
45546             if (!this.intersects(queryMin, queryMax)) { return null }
45547             visitor.visitItem(this._item);
45548           };
45549           IntervalRTreeLeafNode.prototype.interfaces_ = function interfaces_ () {
45550             return []
45551           };
45552           IntervalRTreeLeafNode.prototype.getClass = function getClass () {
45553             return IntervalRTreeLeafNode
45554           };
45555
45556           return IntervalRTreeLeafNode;
45557         }(IntervalRTreeNode));
45558
45559         var IntervalRTreeBranchNode = (function (IntervalRTreeNode$$1) {
45560           function IntervalRTreeBranchNode () {
45561             IntervalRTreeNode$$1.call(this);
45562             this._node1 = null;
45563             this._node2 = null;
45564             var n1 = arguments[0];
45565             var n2 = arguments[1];
45566             this._node1 = n1;
45567             this._node2 = n2;
45568             this.buildExtent(this._node1, this._node2);
45569           }
45570
45571           if ( IntervalRTreeNode$$1 ) { IntervalRTreeBranchNode.__proto__ = IntervalRTreeNode$$1; }
45572           IntervalRTreeBranchNode.prototype = Object.create( IntervalRTreeNode$$1 && IntervalRTreeNode$$1.prototype );
45573           IntervalRTreeBranchNode.prototype.constructor = IntervalRTreeBranchNode;
45574           IntervalRTreeBranchNode.prototype.buildExtent = function buildExtent (n1, n2) {
45575             this._min = Math.min(n1._min, n2._min);
45576             this._max = Math.max(n1._max, n2._max);
45577           };
45578           IntervalRTreeBranchNode.prototype.query = function query (queryMin, queryMax, visitor) {
45579             if (!this.intersects(queryMin, queryMax)) {
45580               return null
45581             }
45582             if (this._node1 !== null) { this._node1.query(queryMin, queryMax, visitor); }
45583             if (this._node2 !== null) { this._node2.query(queryMin, queryMax, visitor); }
45584           };
45585           IntervalRTreeBranchNode.prototype.interfaces_ = function interfaces_ () {
45586             return []
45587           };
45588           IntervalRTreeBranchNode.prototype.getClass = function getClass () {
45589             return IntervalRTreeBranchNode
45590           };
45591
45592           return IntervalRTreeBranchNode;
45593         }(IntervalRTreeNode));
45594
45595         var SortedPackedIntervalRTree = function SortedPackedIntervalRTree () {
45596           this._leaves = new ArrayList();
45597           this._root = null;
45598           this._level = 0;
45599         };
45600         SortedPackedIntervalRTree.prototype.buildTree = function buildTree () {
45601             var this$1 = this;
45602
45603           Collections.sort(this._leaves, new IntervalRTreeNode.NodeComparator());
45604           var src = this._leaves;
45605           var temp = null;
45606           var dest = new ArrayList();
45607           while (true) {
45608             this$1.buildLevel(src, dest);
45609             if (dest.size() === 1) { return dest.get(0) }
45610             temp = src;
45611             src = dest;
45612             dest = temp;
45613           }
45614         };
45615         SortedPackedIntervalRTree.prototype.insert = function insert (min, max, item) {
45616           if (this._root !== null) { throw new Error('Index cannot be added to once it has been queried') }
45617           this._leaves.add(new IntervalRTreeLeafNode(min, max, item));
45618         };
45619         SortedPackedIntervalRTree.prototype.query = function query (min, max, visitor) {
45620           this.init();
45621           this._root.query(min, max, visitor);
45622         };
45623         SortedPackedIntervalRTree.prototype.buildRoot = function buildRoot () {
45624           if (this._root !== null) { return null }
45625           this._root = this.buildTree();
45626         };
45627         SortedPackedIntervalRTree.prototype.printNode = function printNode (node) {
45628           System.out.println(WKTWriter.toLineString(new Coordinate(node._min, this._level), new Coordinate(node._max, this._level)));
45629         };
45630         SortedPackedIntervalRTree.prototype.init = function init () {
45631           if (this._root !== null) { return null }
45632           this.buildRoot();
45633         };
45634         SortedPackedIntervalRTree.prototype.buildLevel = function buildLevel (src, dest) {
45635           this._level++;
45636           dest.clear();
45637           for (var i = 0; i < src.size(); i += 2) {
45638             var n1 = src.get(i);
45639             var n2 = i + 1 < src.size() ? src.get(i) : null;
45640             if (n2 === null) {
45641               dest.add(n1);
45642             } else {
45643               var node = new IntervalRTreeBranchNode(src.get(i), src.get(i + 1));
45644               dest.add(node);
45645             }
45646           }
45647         };
45648         SortedPackedIntervalRTree.prototype.interfaces_ = function interfaces_ () {
45649           return []
45650         };
45651         SortedPackedIntervalRTree.prototype.getClass = function getClass () {
45652           return SortedPackedIntervalRTree
45653         };
45654
45655         var ArrayListVisitor = function ArrayListVisitor () {
45656           this._items = new ArrayList();
45657         };
45658         ArrayListVisitor.prototype.visitItem = function visitItem (item) {
45659           this._items.add(item);
45660         };
45661         ArrayListVisitor.prototype.getItems = function getItems () {
45662           return this._items
45663         };
45664         ArrayListVisitor.prototype.interfaces_ = function interfaces_ () {
45665           return [ItemVisitor]
45666         };
45667         ArrayListVisitor.prototype.getClass = function getClass () {
45668           return ArrayListVisitor
45669         };
45670
45671         var IndexedPointInAreaLocator = function IndexedPointInAreaLocator () {
45672           this._index = null;
45673           var g = arguments[0];
45674           if (!hasInterface(g, Polygonal)) { throw new IllegalArgumentException('Argument must be Polygonal') }
45675           this._index = new IntervalIndexedGeometry(g);
45676         };
45677
45678         var staticAccessors$44 = { SegmentVisitor: { configurable: true },IntervalIndexedGeometry: { configurable: true } };
45679         IndexedPointInAreaLocator.prototype.locate = function locate (p) {
45680           var rcc = new RayCrossingCounter(p);
45681           var visitor = new SegmentVisitor(rcc);
45682           this._index.query(p.y, p.y, visitor);
45683           return rcc.getLocation()
45684         };
45685         IndexedPointInAreaLocator.prototype.interfaces_ = function interfaces_ () {
45686           return [PointOnGeometryLocator]
45687         };
45688         IndexedPointInAreaLocator.prototype.getClass = function getClass () {
45689           return IndexedPointInAreaLocator
45690         };
45691         staticAccessors$44.SegmentVisitor.get = function () { return SegmentVisitor };
45692         staticAccessors$44.IntervalIndexedGeometry.get = function () { return IntervalIndexedGeometry };
45693
45694         Object.defineProperties( IndexedPointInAreaLocator, staticAccessors$44 );
45695
45696         var SegmentVisitor = function SegmentVisitor () {
45697           this._counter = null;
45698           var counter = arguments[0];
45699           this._counter = counter;
45700         };
45701         SegmentVisitor.prototype.visitItem = function visitItem (item) {
45702           var seg = item;
45703           this._counter.countSegment(seg.getCoordinate(0), seg.getCoordinate(1));
45704         };
45705         SegmentVisitor.prototype.interfaces_ = function interfaces_ () {
45706           return [ItemVisitor]
45707         };
45708         SegmentVisitor.prototype.getClass = function getClass () {
45709           return SegmentVisitor
45710         };
45711
45712         var IntervalIndexedGeometry = function IntervalIndexedGeometry () {
45713           this._index = new SortedPackedIntervalRTree();
45714           var geom = arguments[0];
45715           this.init(geom);
45716         };
45717         IntervalIndexedGeometry.prototype.init = function init (geom) {
45718             var this$1 = this;
45719
45720           var lines = LinearComponentExtracter.getLines(geom);
45721           for (var i = lines.iterator(); i.hasNext();) {
45722             var line = i.next();
45723             var pts = line.getCoordinates();
45724             this$1.addLine(pts);
45725           }
45726         };
45727         IntervalIndexedGeometry.prototype.addLine = function addLine (pts) {
45728             var this$1 = this;
45729
45730           for (var i = 1; i < pts.length; i++) {
45731             var seg = new LineSegment(pts[i - 1], pts[i]);
45732             var min = Math.min(seg.p0.y, seg.p1.y);
45733             var max = Math.max(seg.p0.y, seg.p1.y);
45734             this$1._index.insert(min, max, seg);
45735           }
45736         };
45737         IntervalIndexedGeometry.prototype.query = function query () {
45738           if (arguments.length === 2) {
45739             var min = arguments[0];
45740             var max = arguments[1];
45741             var visitor = new ArrayListVisitor();
45742             this._index.query(min, max, visitor);
45743             return visitor.getItems()
45744           } else if (arguments.length === 3) {
45745             var min$1 = arguments[0];
45746             var max$1 = arguments[1];
45747             var visitor$1 = arguments[2];
45748             this._index.query(min$1, max$1, visitor$1);
45749           }
45750         };
45751         IntervalIndexedGeometry.prototype.interfaces_ = function interfaces_ () {
45752           return []
45753         };
45754         IntervalIndexedGeometry.prototype.getClass = function getClass () {
45755           return IntervalIndexedGeometry
45756         };
45757
45758         var GeometryGraph = (function (PlanarGraph$$1) {
45759           function GeometryGraph () {
45760             PlanarGraph$$1.call(this);
45761             this._parentGeom = null;
45762             this._lineEdgeMap = new HashMap();
45763             this._boundaryNodeRule = null;
45764             this._useBoundaryDeterminationRule = true;
45765             this._argIndex = null;
45766             this._boundaryNodes = null;
45767             this._hasTooFewPoints = false;
45768             this._invalidPoint = null;
45769             this._areaPtLocator = null;
45770             this._ptLocator = new PointLocator();
45771             if (arguments.length === 2) {
45772               var argIndex = arguments[0];
45773               var parentGeom = arguments[1];
45774               var boundaryNodeRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;
45775               this._argIndex = argIndex;
45776               this._parentGeom = parentGeom;
45777               this._boundaryNodeRule = boundaryNodeRule;
45778               if (parentGeom !== null) {
45779                 this.add(parentGeom);
45780               }
45781             } else if (arguments.length === 3) {
45782               var argIndex$1 = arguments[0];
45783               var parentGeom$1 = arguments[1];
45784               var boundaryNodeRule$1 = arguments[2];
45785               this._argIndex = argIndex$1;
45786               this._parentGeom = parentGeom$1;
45787               this._boundaryNodeRule = boundaryNodeRule$1;
45788               if (parentGeom$1 !== null) {
45789                 this.add(parentGeom$1);
45790               }
45791             }
45792           }
45793
45794           if ( PlanarGraph$$1 ) { GeometryGraph.__proto__ = PlanarGraph$$1; }
45795           GeometryGraph.prototype = Object.create( PlanarGraph$$1 && PlanarGraph$$1.prototype );
45796           GeometryGraph.prototype.constructor = GeometryGraph;
45797           GeometryGraph.prototype.insertBoundaryPoint = function insertBoundaryPoint (argIndex, coord) {
45798             var n = this._nodes.addNode(coord);
45799             var lbl = n.getLabel();
45800             var boundaryCount = 1;
45801             var loc = Location.NONE;
45802             loc = lbl.getLocation(argIndex, Position.ON);
45803             if (loc === Location.BOUNDARY) { boundaryCount++; }
45804             var newLoc = GeometryGraph.determineBoundary(this._boundaryNodeRule, boundaryCount);
45805             lbl.setLocation(argIndex, newLoc);
45806           };
45807           GeometryGraph.prototype.computeSelfNodes = function computeSelfNodes () {
45808             if (arguments.length === 2) {
45809               var li = arguments[0];
45810               var computeRingSelfNodes = arguments[1];
45811               return this.computeSelfNodes(li, computeRingSelfNodes, false)
45812             } else if (arguments.length === 3) {
45813               var li$1 = arguments[0];
45814               var computeRingSelfNodes$1 = arguments[1];
45815               var isDoneIfProperInt = arguments[2];
45816               var si = new SegmentIntersector$2(li$1, true, false);
45817               si.setIsDoneIfProperInt(isDoneIfProperInt);
45818               var esi = this.createEdgeSetIntersector();
45819               var isRings = this._parentGeom instanceof LinearRing || this._parentGeom instanceof Polygon || this._parentGeom instanceof MultiPolygon;
45820               var computeAllSegments = computeRingSelfNodes$1 || !isRings;
45821               esi.computeIntersections(this._edges, si, computeAllSegments);
45822               this.addSelfIntersectionNodes(this._argIndex);
45823               return si
45824             }
45825           };
45826           GeometryGraph.prototype.computeSplitEdges = function computeSplitEdges (edgelist) {
45827             for (var i = this._edges.iterator(); i.hasNext();) {
45828               var e = i.next();
45829               e.eiList.addSplitEdges(edgelist);
45830             }
45831           };
45832           GeometryGraph.prototype.computeEdgeIntersections = function computeEdgeIntersections (g, li, includeProper) {
45833             var si = new SegmentIntersector$2(li, includeProper, true);
45834             si.setBoundaryNodes(this.getBoundaryNodes(), g.getBoundaryNodes());
45835             var esi = this.createEdgeSetIntersector();
45836             esi.computeIntersections(this._edges, g._edges, si);
45837             return si
45838           };
45839           GeometryGraph.prototype.getGeometry = function getGeometry () {
45840             return this._parentGeom
45841           };
45842           GeometryGraph.prototype.getBoundaryNodeRule = function getBoundaryNodeRule () {
45843             return this._boundaryNodeRule
45844           };
45845           GeometryGraph.prototype.hasTooFewPoints = function hasTooFewPoints () {
45846             return this._hasTooFewPoints
45847           };
45848           GeometryGraph.prototype.addPoint = function addPoint () {
45849             if (arguments[0] instanceof Point) {
45850               var p = arguments[0];
45851               var coord = p.getCoordinate();
45852               this.insertPoint(this._argIndex, coord, Location.INTERIOR);
45853             } else if (arguments[0] instanceof Coordinate) {
45854               var pt = arguments[0];
45855               this.insertPoint(this._argIndex, pt, Location.INTERIOR);
45856             }
45857           };
45858           GeometryGraph.prototype.addPolygon = function addPolygon (p) {
45859             var this$1 = this;
45860
45861             this.addPolygonRing(p.getExteriorRing(), Location.EXTERIOR, Location.INTERIOR);
45862             for (var i = 0; i < p.getNumInteriorRing(); i++) {
45863               var hole = p.getInteriorRingN(i);
45864               this$1.addPolygonRing(hole, Location.INTERIOR, Location.EXTERIOR);
45865             }
45866           };
45867           GeometryGraph.prototype.addEdge = function addEdge (e) {
45868             this.insertEdge(e);
45869             var coord = e.getCoordinates();
45870             this.insertPoint(this._argIndex, coord[0], Location.BOUNDARY);
45871             this.insertPoint(this._argIndex, coord[coord.length - 1], Location.BOUNDARY);
45872           };
45873           GeometryGraph.prototype.addLineString = function addLineString (line) {
45874             var coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates());
45875             if (coord.length < 2) {
45876               this._hasTooFewPoints = true;
45877               this._invalidPoint = coord[0];
45878               return null
45879             }
45880             var e = new Edge(coord, new Label(this._argIndex, Location.INTERIOR));
45881             this._lineEdgeMap.put(line, e);
45882             this.insertEdge(e);
45883             Assert.isTrue(coord.length >= 2, 'found LineString with single point');
45884             this.insertBoundaryPoint(this._argIndex, coord[0]);
45885             this.insertBoundaryPoint(this._argIndex, coord[coord.length - 1]);
45886           };
45887           GeometryGraph.prototype.getInvalidPoint = function getInvalidPoint () {
45888             return this._invalidPoint
45889           };
45890           GeometryGraph.prototype.getBoundaryPoints = function getBoundaryPoints () {
45891             var coll = this.getBoundaryNodes();
45892             var pts = new Array(coll.size()).fill(null);
45893             var i = 0;
45894             for (var it = coll.iterator(); it.hasNext();) {
45895               var node = it.next();
45896               pts[i++] = node.getCoordinate().copy();
45897             }
45898             return pts
45899           };
45900           GeometryGraph.prototype.getBoundaryNodes = function getBoundaryNodes () {
45901             if (this._boundaryNodes === null) { this._boundaryNodes = this._nodes.getBoundaryNodes(this._argIndex); }
45902             return this._boundaryNodes
45903           };
45904           GeometryGraph.prototype.addSelfIntersectionNode = function addSelfIntersectionNode (argIndex, coord, loc) {
45905             if (this.isBoundaryNode(argIndex, coord)) { return null }
45906             if (loc === Location.BOUNDARY && this._useBoundaryDeterminationRule) { this.insertBoundaryPoint(argIndex, coord); } else { this.insertPoint(argIndex, coord, loc); }
45907           };
45908           GeometryGraph.prototype.addPolygonRing = function addPolygonRing (lr, cwLeft, cwRight) {
45909             if (lr.isEmpty()) { return null }
45910             var coord = CoordinateArrays.removeRepeatedPoints(lr.getCoordinates());
45911             if (coord.length < 4) {
45912               this._hasTooFewPoints = true;
45913               this._invalidPoint = coord[0];
45914               return null
45915             }
45916             var left = cwLeft;
45917             var right = cwRight;
45918             if (CGAlgorithms.isCCW(coord)) {
45919               left = cwRight;
45920               right = cwLeft;
45921             }
45922             var e = new Edge(coord, new Label(this._argIndex, Location.BOUNDARY, left, right));
45923             this._lineEdgeMap.put(lr, e);
45924             this.insertEdge(e);
45925             this.insertPoint(this._argIndex, coord[0], Location.BOUNDARY);
45926           };
45927           GeometryGraph.prototype.insertPoint = function insertPoint (argIndex, coord, onLocation) {
45928             var n = this._nodes.addNode(coord);
45929             var lbl = n.getLabel();
45930             if (lbl === null) {
45931               n._label = new Label(argIndex, onLocation);
45932             } else { lbl.setLocation(argIndex, onLocation); }
45933           };
45934           GeometryGraph.prototype.createEdgeSetIntersector = function createEdgeSetIntersector () {
45935             return new SimpleMCSweepLineIntersector()
45936           };
45937           GeometryGraph.prototype.addSelfIntersectionNodes = function addSelfIntersectionNodes (argIndex) {
45938             var this$1 = this;
45939
45940             for (var i = this._edges.iterator(); i.hasNext();) {
45941               var e = i.next();
45942               var eLoc = e.getLabel().getLocation(argIndex);
45943               for (var eiIt = e.eiList.iterator(); eiIt.hasNext();) {
45944                 var ei = eiIt.next();
45945                 this$1.addSelfIntersectionNode(argIndex, ei.coord, eLoc);
45946               }
45947             }
45948           };
45949           GeometryGraph.prototype.add = function add () {
45950             if (arguments.length === 1) {
45951               var g = arguments[0];
45952               if (g.isEmpty()) { return null }
45953               if (g instanceof MultiPolygon) { this._useBoundaryDeterminationRule = false; }
45954               if (g instanceof Polygon) { this.addPolygon(g); }
45955               else if (g instanceof LineString) { this.addLineString(g); }
45956               else if (g instanceof Point) { this.addPoint(g); }
45957               else if (g instanceof MultiPoint) { this.addCollection(g); }
45958               else if (g instanceof MultiLineString) { this.addCollection(g); }
45959               else if (g instanceof MultiPolygon) { this.addCollection(g); }
45960               else if (g instanceof GeometryCollection) { this.addCollection(g); }
45961               else { throw new Error(g.getClass().getName()) }
45962             } else { return PlanarGraph$$1.prototype.add.apply(this, arguments) }
45963           };
45964           GeometryGraph.prototype.addCollection = function addCollection (gc) {
45965             var this$1 = this;
45966
45967             for (var i = 0; i < gc.getNumGeometries(); i++) {
45968               var g = gc.getGeometryN(i);
45969               this$1.add(g);
45970             }
45971           };
45972           GeometryGraph.prototype.locate = function locate (pt) {
45973             if (hasInterface(this._parentGeom, Polygonal) && this._parentGeom.getNumGeometries() > 50) {
45974               if (this._areaPtLocator === null) {
45975                 this._areaPtLocator = new IndexedPointInAreaLocator(this._parentGeom);
45976               }
45977               return this._areaPtLocator.locate(pt)
45978             }
45979             return this._ptLocator.locate(pt, this._parentGeom)
45980           };
45981           GeometryGraph.prototype.findEdge = function findEdge () {
45982             if (arguments.length === 1) {
45983               var line = arguments[0];
45984               return this._lineEdgeMap.get(line)
45985             } else { return PlanarGraph$$1.prototype.findEdge.apply(this, arguments) }
45986           };
45987           GeometryGraph.prototype.interfaces_ = function interfaces_ () {
45988             return []
45989           };
45990           GeometryGraph.prototype.getClass = function getClass () {
45991             return GeometryGraph
45992           };
45993           GeometryGraph.determineBoundary = function determineBoundary (boundaryNodeRule, boundaryCount) {
45994             return boundaryNodeRule.isInBoundary(boundaryCount) ? Location.BOUNDARY : Location.INTERIOR
45995           };
45996
45997           return GeometryGraph;
45998         }(PlanarGraph));
45999
46000         var GeometryGraphOp = function GeometryGraphOp () {
46001           this._li = new RobustLineIntersector();
46002           this._resultPrecisionModel = null;
46003           this._arg = null;
46004           if (arguments.length === 1) {
46005             var g0 = arguments[0];
46006             this.setComputationPrecision(g0.getPrecisionModel());
46007             this._arg = new Array(1).fill(null);
46008             this._arg[0] = new GeometryGraph(0, g0);
46009           } else if (arguments.length === 2) {
46010             var g0$1 = arguments[0];
46011             var g1 = arguments[1];
46012             var boundaryNodeRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;
46013             if (g0$1.getPrecisionModel().compareTo(g1.getPrecisionModel()) >= 0) { this.setComputationPrecision(g0$1.getPrecisionModel()); } else { this.setComputationPrecision(g1.getPrecisionModel()); }
46014             this._arg = new Array(2).fill(null);
46015             this._arg[0] = new GeometryGraph(0, g0$1, boundaryNodeRule);
46016             this._arg[1] = new GeometryGraph(1, g1, boundaryNodeRule);
46017           } else if (arguments.length === 3) {
46018             var g0$2 = arguments[0];
46019             var g1$1 = arguments[1];
46020             var boundaryNodeRule$1 = arguments[2];
46021             if (g0$2.getPrecisionModel().compareTo(g1$1.getPrecisionModel()) >= 0) { this.setComputationPrecision(g0$2.getPrecisionModel()); } else { this.setComputationPrecision(g1$1.getPrecisionModel()); }
46022             this._arg = new Array(2).fill(null);
46023             this._arg[0] = new GeometryGraph(0, g0$2, boundaryNodeRule$1);
46024             this._arg[1] = new GeometryGraph(1, g1$1, boundaryNodeRule$1);
46025           }
46026         };
46027         GeometryGraphOp.prototype.getArgGeometry = function getArgGeometry (i) {
46028           return this._arg[i].getGeometry()
46029         };
46030         GeometryGraphOp.prototype.setComputationPrecision = function setComputationPrecision (pm) {
46031           this._resultPrecisionModel = pm;
46032           this._li.setPrecisionModel(this._resultPrecisionModel);
46033         };
46034         GeometryGraphOp.prototype.interfaces_ = function interfaces_ () {
46035           return []
46036         };
46037         GeometryGraphOp.prototype.getClass = function getClass () {
46038           return GeometryGraphOp
46039         };
46040
46041         // operation.geometrygraph
46042
46043         var GeometryMapper = function GeometryMapper () {};
46044
46045         GeometryMapper.prototype.interfaces_ = function interfaces_ () {
46046           return []
46047         };
46048         GeometryMapper.prototype.getClass = function getClass () {
46049           return GeometryMapper
46050         };
46051         GeometryMapper.map = function map () {
46052           if (arguments[0] instanceof Geometry && hasInterface(arguments[1], GeometryMapper.MapOp)) {
46053             var geom = arguments[0];
46054             var op = arguments[1];
46055             var mapped = new ArrayList();
46056             for (var i = 0; i < geom.getNumGeometries(); i++) {
46057               var g = op.map(geom.getGeometryN(i));
46058               if (g !== null) { mapped.add(g); }
46059             }
46060             return geom.getFactory().buildGeometry(mapped)
46061           } else if (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], GeometryMapper.MapOp)) {
46062             var geoms = arguments[0];
46063             var op$1 = arguments[1];
46064             var mapped$1 = new ArrayList();
46065             for (var i$1 = geoms.iterator(); i$1.hasNext();) {
46066               var g$1 = i$1.next();
46067               var gr = op$1.map(g$1);
46068               if (gr !== null) { mapped$1.add(gr); }
46069             }
46070             return mapped$1
46071           }
46072         };
46073         GeometryMapper.MapOp = function MapOp () {};
46074
46075         var OverlayOp = (function (GeometryGraphOp) {
46076           function OverlayOp () {
46077             var g0 = arguments[0];
46078             var g1 = arguments[1];
46079             GeometryGraphOp.call(this, g0, g1);
46080             this._ptLocator = new PointLocator();
46081             this._geomFact = null;
46082             this._resultGeom = null;
46083             this._graph = null;
46084             this._edgeList = new EdgeList();
46085             this._resultPolyList = new ArrayList();
46086             this._resultLineList = new ArrayList();
46087             this._resultPointList = new ArrayList();
46088             this._graph = new PlanarGraph(new OverlayNodeFactory());
46089             this._geomFact = g0.getFactory();
46090           }
46091
46092           if ( GeometryGraphOp ) { OverlayOp.__proto__ = GeometryGraphOp; }
46093           OverlayOp.prototype = Object.create( GeometryGraphOp && GeometryGraphOp.prototype );
46094           OverlayOp.prototype.constructor = OverlayOp;
46095           OverlayOp.prototype.insertUniqueEdge = function insertUniqueEdge (e) {
46096             var existingEdge = this._edgeList.findEqualEdge(e);
46097             if (existingEdge !== null) {
46098               var existingLabel = existingEdge.getLabel();
46099               var labelToMerge = e.getLabel();
46100               if (!existingEdge.isPointwiseEqual(e)) {
46101                 labelToMerge = new Label(e.getLabel());
46102                 labelToMerge.flip();
46103               }
46104               var depth = existingEdge.getDepth();
46105               if (depth.isNull()) {
46106                 depth.add(existingLabel);
46107               }
46108               depth.add(labelToMerge);
46109               existingLabel.merge(labelToMerge);
46110             } else {
46111               this._edgeList.add(e);
46112             }
46113           };
46114           OverlayOp.prototype.getGraph = function getGraph () {
46115             return this._graph
46116           };
46117           OverlayOp.prototype.cancelDuplicateResultEdges = function cancelDuplicateResultEdges () {
46118             for (var it = this._graph.getEdgeEnds().iterator(); it.hasNext();) {
46119               var de = it.next();
46120               var sym = de.getSym();
46121               if (de.isInResult() && sym.isInResult()) {
46122                 de.setInResult(false);
46123                 sym.setInResult(false);
46124               }
46125             }
46126           };
46127           OverlayOp.prototype.isCoveredByLA = function isCoveredByLA (coord) {
46128             if (this.isCovered(coord, this._resultLineList)) { return true }
46129             if (this.isCovered(coord, this._resultPolyList)) { return true }
46130             return false
46131           };
46132           OverlayOp.prototype.computeGeometry = function computeGeometry (resultPointList, resultLineList, resultPolyList, opcode) {
46133             var geomList = new ArrayList();
46134             geomList.addAll(resultPointList);
46135             geomList.addAll(resultLineList);
46136             geomList.addAll(resultPolyList);
46137             if (geomList.isEmpty()) { return OverlayOp.createEmptyResult(opcode, this._arg[0].getGeometry(), this._arg[1].getGeometry(), this._geomFact) }
46138             return this._geomFact.buildGeometry(geomList)
46139           };
46140           OverlayOp.prototype.mergeSymLabels = function mergeSymLabels () {
46141             for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {
46142               var node = nodeit.next();
46143               node.getEdges().mergeSymLabels();
46144             }
46145           };
46146           OverlayOp.prototype.isCovered = function isCovered (coord, geomList) {
46147             var this$1 = this;
46148
46149             for (var it = geomList.iterator(); it.hasNext();) {
46150               var geom = it.next();
46151               var loc = this$1._ptLocator.locate(coord, geom);
46152               if (loc !== Location.EXTERIOR) { return true }
46153             }
46154             return false
46155           };
46156           OverlayOp.prototype.replaceCollapsedEdges = function replaceCollapsedEdges () {
46157             var newEdges = new ArrayList();
46158             for (var it = this._edgeList.iterator(); it.hasNext();) {
46159               var e = it.next();
46160               if (e.isCollapsed()) {
46161                 it.remove();
46162                 newEdges.add(e.getCollapsedEdge());
46163               }
46164             }
46165             this._edgeList.addAll(newEdges);
46166           };
46167           OverlayOp.prototype.updateNodeLabelling = function updateNodeLabelling () {
46168             for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {
46169               var node = nodeit.next();
46170               var lbl = node.getEdges().getLabel();
46171               node.getLabel().merge(lbl);
46172             }
46173           };
46174           OverlayOp.prototype.getResultGeometry = function getResultGeometry (overlayOpCode) {
46175             this.computeOverlay(overlayOpCode);
46176             return this._resultGeom
46177           };
46178           OverlayOp.prototype.insertUniqueEdges = function insertUniqueEdges (edges) {
46179             var this$1 = this;
46180
46181             for (var i = edges.iterator(); i.hasNext();) {
46182               var e = i.next();
46183               this$1.insertUniqueEdge(e);
46184             }
46185           };
46186           OverlayOp.prototype.computeOverlay = function computeOverlay (opCode) {
46187             this.copyPoints(0);
46188             this.copyPoints(1);
46189             this._arg[0].computeSelfNodes(this._li, false);
46190             this._arg[1].computeSelfNodes(this._li, false);
46191             this._arg[0].computeEdgeIntersections(this._arg[1], this._li, true);
46192             var baseSplitEdges = new ArrayList();
46193             this._arg[0].computeSplitEdges(baseSplitEdges);
46194             this._arg[1].computeSplitEdges(baseSplitEdges);
46195             // const splitEdges = baseSplitEdges
46196             this.insertUniqueEdges(baseSplitEdges);
46197             this.computeLabelsFromDepths();
46198             this.replaceCollapsedEdges();
46199             EdgeNodingValidator.checkValid(this._edgeList.getEdges());
46200             this._graph.addEdges(this._edgeList.getEdges());
46201             this.computeLabelling();
46202             this.labelIncompleteNodes();
46203             this.findResultAreaEdges(opCode);
46204             this.cancelDuplicateResultEdges();
46205             var polyBuilder = new PolygonBuilder(this._geomFact);
46206             polyBuilder.add(this._graph);
46207             this._resultPolyList = polyBuilder.getPolygons();
46208             var lineBuilder = new LineBuilder(this, this._geomFact, this._ptLocator);
46209             this._resultLineList = lineBuilder.build(opCode);
46210             var pointBuilder = new PointBuilder(this, this._geomFact, this._ptLocator);
46211             this._resultPointList = pointBuilder.build(opCode);
46212             this._resultGeom = this.computeGeometry(this._resultPointList, this._resultLineList, this._resultPolyList, opCode);
46213           };
46214           OverlayOp.prototype.labelIncompleteNode = function labelIncompleteNode (n, targetIndex) {
46215             var loc = this._ptLocator.locate(n.getCoordinate(), this._arg[targetIndex].getGeometry());
46216             n.getLabel().setLocation(targetIndex, loc);
46217           };
46218           OverlayOp.prototype.copyPoints = function copyPoints (argIndex) {
46219             var this$1 = this;
46220
46221             for (var i = this._arg[argIndex].getNodeIterator(); i.hasNext();) {
46222               var graphNode = i.next();
46223               var newNode = this$1._graph.addNode(graphNode.getCoordinate());
46224               newNode.setLabel(argIndex, graphNode.getLabel().getLocation(argIndex));
46225             }
46226           };
46227           OverlayOp.prototype.findResultAreaEdges = function findResultAreaEdges (opCode) {
46228             for (var it = this._graph.getEdgeEnds().iterator(); it.hasNext();) {
46229               var de = it.next();
46230               var label = de.getLabel();
46231               if (label.isArea() && !de.isInteriorAreaEdge() && OverlayOp.isResultOfOp(label.getLocation(0, Position.RIGHT), label.getLocation(1, Position.RIGHT), opCode)) {
46232                 de.setInResult(true);
46233               }
46234             }
46235           };
46236           OverlayOp.prototype.computeLabelsFromDepths = function computeLabelsFromDepths () {
46237             for (var it = this._edgeList.iterator(); it.hasNext();) {
46238               var e = it.next();
46239               var lbl = e.getLabel();
46240               var depth = e.getDepth();
46241               if (!depth.isNull()) {
46242                 depth.normalize();
46243                 for (var i = 0; i < 2; i++) {
46244                   if (!lbl.isNull(i) && lbl.isArea() && !depth.isNull(i)) {
46245                     if (depth.getDelta(i) === 0) {
46246                       lbl.toLine(i);
46247                     } else {
46248                       Assert.isTrue(!depth.isNull(i, Position.LEFT), 'depth of LEFT side has not been initialized');
46249                       lbl.setLocation(i, Position.LEFT, depth.getLocation(i, Position.LEFT));
46250                       Assert.isTrue(!depth.isNull(i, Position.RIGHT), 'depth of RIGHT side has not been initialized');
46251                       lbl.setLocation(i, Position.RIGHT, depth.getLocation(i, Position.RIGHT));
46252                     }
46253                   }
46254                 }
46255               }
46256             }
46257           };
46258           OverlayOp.prototype.computeLabelling = function computeLabelling () {
46259             var this$1 = this;
46260
46261             for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {
46262               var node = nodeit.next();
46263               node.getEdges().computeLabelling(this$1._arg);
46264             }
46265             this.mergeSymLabels();
46266             this.updateNodeLabelling();
46267           };
46268           OverlayOp.prototype.labelIncompleteNodes = function labelIncompleteNodes () {
46269             var this$1 = this;
46270
46271             // let nodeCount = 0
46272             for (var ni = this._graph.getNodes().iterator(); ni.hasNext();) {
46273               var n = ni.next();
46274               var label = n.getLabel();
46275               if (n.isIsolated()) {
46276                 // nodeCount++
46277                 if (label.isNull(0)) { this$1.labelIncompleteNode(n, 0); } else { this$1.labelIncompleteNode(n, 1); }
46278               }
46279               n.getEdges().updateLabelling(label);
46280             }
46281           };
46282           OverlayOp.prototype.isCoveredByA = function isCoveredByA (coord) {
46283             if (this.isCovered(coord, this._resultPolyList)) { return true }
46284             return false
46285           };
46286           OverlayOp.prototype.interfaces_ = function interfaces_ () {
46287             return []
46288           };
46289           OverlayOp.prototype.getClass = function getClass () {
46290             return OverlayOp
46291           };
46292
46293           return OverlayOp;
46294         }(GeometryGraphOp));
46295
46296         OverlayOp.overlayOp = function (geom0, geom1, opCode) {
46297           var gov = new OverlayOp(geom0, geom1);
46298           var geomOv = gov.getResultGeometry(opCode);
46299           return geomOv
46300         };
46301         OverlayOp.intersection = function (g, other) {
46302           if (g.isEmpty() || other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.INTERSECTION, g, other, g.getFactory()) }
46303           if (g.isGeometryCollection()) {
46304             var g2 = other;
46305             return GeometryCollectionMapper.map(g, {
46306               interfaces_: function () {
46307                 return [GeometryMapper.MapOp]
46308               },
46309               map: function (g) {
46310                 return g.intersection(g2)
46311               }
46312             })
46313           }
46314           g.checkNotGeometryCollection(g);
46315           g.checkNotGeometryCollection(other);
46316           return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.INTERSECTION)
46317         };
46318         OverlayOp.symDifference = function (g, other) {
46319           if (g.isEmpty() || other.isEmpty()) {
46320             if (g.isEmpty() && other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.SYMDIFFERENCE, g, other, g.getFactory()) }
46321             if (g.isEmpty()) { return other.copy() }
46322             if (other.isEmpty()) { return g.copy() }
46323           }
46324           g.checkNotGeometryCollection(g);
46325           g.checkNotGeometryCollection(other);
46326           return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.SYMDIFFERENCE)
46327         };
46328         OverlayOp.resultDimension = function (opCode, g0, g1) {
46329           var dim0 = g0.getDimension();
46330           var dim1 = g1.getDimension();
46331           var resultDimension = -1;
46332           switch (opCode) {
46333             case OverlayOp.INTERSECTION:
46334               resultDimension = Math.min(dim0, dim1);
46335               break
46336             case OverlayOp.UNION:
46337               resultDimension = Math.max(dim0, dim1);
46338               break
46339             case OverlayOp.DIFFERENCE:
46340               resultDimension = dim0;
46341               break
46342             case OverlayOp.SYMDIFFERENCE:
46343               resultDimension = Math.max(dim0, dim1);
46344               break
46345           }
46346           return resultDimension
46347         };
46348         OverlayOp.createEmptyResult = function (overlayOpCode, a, b, geomFact) {
46349           var result = null;
46350           switch (OverlayOp.resultDimension(overlayOpCode, a, b)) {
46351             case -1:
46352               result = geomFact.createGeometryCollection(new Array(0).fill(null));
46353               break
46354             case 0:
46355               result = geomFact.createPoint();
46356               break
46357             case 1:
46358               result = geomFact.createLineString();
46359               break
46360             case 2:
46361               result = geomFact.createPolygon();
46362               break
46363           }
46364           return result
46365         };
46366         OverlayOp.difference = function (g, other) {
46367           if (g.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.DIFFERENCE, g, other, g.getFactory()) }
46368           if (other.isEmpty()) { return g.copy() }
46369           g.checkNotGeometryCollection(g);
46370           g.checkNotGeometryCollection(other);
46371           return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.DIFFERENCE)
46372         };
46373         OverlayOp.isResultOfOp = function () {
46374           if (arguments.length === 2) {
46375             var label = arguments[0];
46376             var opCode = arguments[1];
46377             var loc0 = label.getLocation(0);
46378             var loc1 = label.getLocation(1);
46379             return OverlayOp.isResultOfOp(loc0, loc1, opCode)
46380           } else if (arguments.length === 3) {
46381             var loc0$1 = arguments[0];
46382             var loc1$1 = arguments[1];
46383             var overlayOpCode = arguments[2];
46384             if (loc0$1 === Location.BOUNDARY) { loc0$1 = Location.INTERIOR; }
46385             if (loc1$1 === Location.BOUNDARY) { loc1$1 = Location.INTERIOR; }
46386             switch (overlayOpCode) {
46387               case OverlayOp.INTERSECTION:
46388                 return loc0$1 === Location.INTERIOR && loc1$1 === Location.INTERIOR
46389               case OverlayOp.UNION:
46390                 return loc0$1 === Location.INTERIOR || loc1$1 === Location.INTERIOR
46391               case OverlayOp.DIFFERENCE:
46392                 return loc0$1 === Location.INTERIOR && loc1$1 !== Location.INTERIOR
46393               case OverlayOp.SYMDIFFERENCE:
46394                 return (loc0$1 === Location.INTERIOR && loc1$1 !== Location.INTERIOR) || (loc0$1 !== Location.INTERIOR && loc1$1 === Location.INTERIOR)
46395             }
46396             return false
46397           }
46398         };
46399         OverlayOp.INTERSECTION = 1;
46400         OverlayOp.UNION = 2;
46401         OverlayOp.DIFFERENCE = 3;
46402         OverlayOp.SYMDIFFERENCE = 4;
46403
46404         var FuzzyPointLocator = function FuzzyPointLocator () {
46405           this._g = null;
46406           this._boundaryDistanceTolerance = null;
46407           this._linework = null;
46408           this._ptLocator = new PointLocator();
46409           this._seg = new LineSegment();
46410           var g = arguments[0];
46411           var boundaryDistanceTolerance = arguments[1];
46412           this._g = g;
46413           this._boundaryDistanceTolerance = boundaryDistanceTolerance;
46414           this._linework = this.extractLinework(g);
46415         };
46416         FuzzyPointLocator.prototype.isWithinToleranceOfBoundary = function isWithinToleranceOfBoundary (pt) {
46417             var this$1 = this;
46418
46419           for (var i = 0; i < this._linework.getNumGeometries(); i++) {
46420             var line = this$1._linework.getGeometryN(i);
46421             var seq = line.getCoordinateSequence();
46422             for (var j = 0; j < seq.size() - 1; j++) {
46423               seq.getCoordinate(j, this$1._seg.p0);
46424               seq.getCoordinate(j + 1, this$1._seg.p1);
46425               var dist = this$1._seg.distance(pt);
46426               if (dist <= this$1._boundaryDistanceTolerance) { return true }
46427             }
46428           }
46429           return false
46430         };
46431         FuzzyPointLocator.prototype.getLocation = function getLocation (pt) {
46432           if (this.isWithinToleranceOfBoundary(pt)) { return Location.BOUNDARY }
46433           return this._ptLocator.locate(pt, this._g)
46434         };
46435         FuzzyPointLocator.prototype.extractLinework = function extractLinework (g) {
46436           var extracter = new PolygonalLineworkExtracter();
46437           g.apply(extracter);
46438           var linework = extracter.getLinework();
46439           var lines = GeometryFactory.toLineStringArray(linework);
46440           return g.getFactory().createMultiLineString(lines)
46441         };
46442         FuzzyPointLocator.prototype.interfaces_ = function interfaces_ () {
46443           return []
46444         };
46445         FuzzyPointLocator.prototype.getClass = function getClass () {
46446           return FuzzyPointLocator
46447         };
46448
46449         var PolygonalLineworkExtracter = function PolygonalLineworkExtracter () {
46450           this._linework = null;
46451           this._linework = new ArrayList();
46452         };
46453         PolygonalLineworkExtracter.prototype.getLinework = function getLinework () {
46454           return this._linework
46455         };
46456         PolygonalLineworkExtracter.prototype.filter = function filter (g) {
46457             var this$1 = this;
46458
46459           if (g instanceof Polygon) {
46460             var poly = g;
46461             this._linework.add(poly.getExteriorRing());
46462             for (var i = 0; i < poly.getNumInteriorRing(); i++) {
46463               this$1._linework.add(poly.getInteriorRingN(i));
46464             }
46465           }
46466         };
46467         PolygonalLineworkExtracter.prototype.interfaces_ = function interfaces_ () {
46468           return [GeometryFilter]
46469         };
46470         PolygonalLineworkExtracter.prototype.getClass = function getClass () {
46471           return PolygonalLineworkExtracter
46472         };
46473
46474         var OffsetPointGenerator = function OffsetPointGenerator () {
46475           this._g = null;
46476           this._doLeft = true;
46477           this._doRight = true;
46478           var g = arguments[0];
46479           this._g = g;
46480         };
46481         OffsetPointGenerator.prototype.extractPoints = function extractPoints (line, offsetDistance, offsetPts) {
46482             var this$1 = this;
46483
46484           var pts = line.getCoordinates();
46485           for (var i = 0; i < pts.length - 1; i++) {
46486             this$1.computeOffsetPoints(pts[i], pts[i + 1], offsetDistance, offsetPts);
46487           }
46488         };
46489         OffsetPointGenerator.prototype.setSidesToGenerate = function setSidesToGenerate (doLeft, doRight) {
46490           this._doLeft = doLeft;
46491           this._doRight = doRight;
46492         };
46493         OffsetPointGenerator.prototype.getPoints = function getPoints (offsetDistance) {
46494             var this$1 = this;
46495
46496           var offsetPts = new ArrayList();
46497           var lines = LinearComponentExtracter.getLines(this._g);
46498           for (var i = lines.iterator(); i.hasNext();) {
46499             var line = i.next();
46500             this$1.extractPoints(line, offsetDistance, offsetPts);
46501           }
46502           return offsetPts
46503         };
46504         OffsetPointGenerator.prototype.computeOffsetPoints = function computeOffsetPoints (p0, p1, offsetDistance, offsetPts) {
46505           var dx = p1.x - p0.x;
46506           var dy = p1.y - p0.y;
46507           var len = Math.sqrt(dx * dx + dy * dy);
46508           var ux = offsetDistance * dx / len;
46509           var uy = offsetDistance * dy / len;
46510           var midX = (p1.x + p0.x) / 2;
46511           var midY = (p1.y + p0.y) / 2;
46512           if (this._doLeft) {
46513             var offsetLeft = new Coordinate(midX - uy, midY + ux);
46514             offsetPts.add(offsetLeft);
46515           }
46516           if (this._doRight) {
46517             var offsetRight = new Coordinate(midX + uy, midY - ux);
46518             offsetPts.add(offsetRight);
46519           }
46520         };
46521         OffsetPointGenerator.prototype.interfaces_ = function interfaces_ () {
46522           return []
46523         };
46524         OffsetPointGenerator.prototype.getClass = function getClass () {
46525           return OffsetPointGenerator
46526         };
46527
46528         var OverlayResultValidator = function OverlayResultValidator () {
46529           this._geom = null;
46530           this._locFinder = null;
46531           this._location = new Array(3).fill(null);
46532           this._invalidLocation = null;
46533           this._boundaryDistanceTolerance = OverlayResultValidator.TOLERANCE;
46534           this._testCoords = new ArrayList();
46535           var a = arguments[0];
46536           var b = arguments[1];
46537           var result = arguments[2];
46538           this._boundaryDistanceTolerance = OverlayResultValidator.computeBoundaryDistanceTolerance(a, b);
46539           this._geom = [a, b, result];
46540           this._locFinder = [new FuzzyPointLocator(this._geom[0], this._boundaryDistanceTolerance), new FuzzyPointLocator(this._geom[1], this._boundaryDistanceTolerance), new FuzzyPointLocator(this._geom[2], this._boundaryDistanceTolerance)];
46541         };
46542
46543         var staticAccessors$46 = { TOLERANCE: { configurable: true } };
46544         OverlayResultValidator.prototype.reportResult = function reportResult (overlayOp, location, expectedInterior) {
46545           System.out.println('Overlay result invalid - A:' + Location.toLocationSymbol(location[0]) + ' B:' + Location.toLocationSymbol(location[1]) + ' expected:' + (expectedInterior ? 'i' : 'e') + ' actual:' + Location.toLocationSymbol(location[2]));
46546         };
46547         OverlayResultValidator.prototype.isValid = function isValid (overlayOp) {
46548           this.addTestPts(this._geom[0]);
46549           this.addTestPts(this._geom[1]);
46550           var isValid = this.checkValid(overlayOp);
46551           return isValid
46552         };
46553         OverlayResultValidator.prototype.checkValid = function checkValid () {
46554             var this$1 = this;
46555
46556           if (arguments.length === 1) {
46557             var overlayOp = arguments[0];
46558             for (var i = 0; i < this._testCoords.size(); i++) {
46559               var pt = this$1._testCoords.get(i);
46560               if (!this$1.checkValid(overlayOp, pt)) {
46561                 this$1._invalidLocation = pt;
46562                 return false
46563               }
46564             }
46565             return true
46566           } else if (arguments.length === 2) {
46567             var overlayOp$1 = arguments[0];
46568             var pt$1 = arguments[1];
46569             this._location[0] = this._locFinder[0].getLocation(pt$1);
46570             this._location[1] = this._locFinder[1].getLocation(pt$1);
46571             this._location[2] = this._locFinder[2].getLocation(pt$1);
46572             if (OverlayResultValidator.hasLocation(this._location, Location.BOUNDARY)) { return true }
46573             return this.isValidResult(overlayOp$1, this._location)
46574           }
46575         };
46576         OverlayResultValidator.prototype.addTestPts = function addTestPts (g) {
46577           var ptGen = new OffsetPointGenerator(g);
46578           this._testCoords.addAll(ptGen.getPoints(5 * this._boundaryDistanceTolerance));
46579         };
46580         OverlayResultValidator.prototype.isValidResult = function isValidResult (overlayOp, location) {
46581           var expectedInterior = OverlayOp.isResultOfOp(location[0], location[1], overlayOp);
46582           var resultInInterior = location[2] === Location.INTERIOR;
46583           var isValid = !(expectedInterior ^ resultInInterior);
46584           if (!isValid) { this.reportResult(overlayOp, location, expectedInterior); }
46585           return isValid
46586         };
46587         OverlayResultValidator.prototype.getInvalidLocation = function getInvalidLocation () {
46588           return this._invalidLocation
46589         };
46590         OverlayResultValidator.prototype.interfaces_ = function interfaces_ () {
46591           return []
46592         };
46593         OverlayResultValidator.prototype.getClass = function getClass () {
46594           return OverlayResultValidator
46595         };
46596         OverlayResultValidator.hasLocation = function hasLocation (location, loc) {
46597           for (var i = 0; i < 3; i++) {
46598             if (location[i] === loc) { return true }
46599           }
46600           return false
46601         };
46602         OverlayResultValidator.computeBoundaryDistanceTolerance = function computeBoundaryDistanceTolerance (g0, g1) {
46603           return Math.min(GeometrySnapper.computeSizeBasedSnapTolerance(g0), GeometrySnapper.computeSizeBasedSnapTolerance(g1))
46604         };
46605         OverlayResultValidator.isValid = function isValid (a, b, overlayOp, result) {
46606           var validator = new OverlayResultValidator(a, b, result);
46607           return validator.isValid(overlayOp)
46608         };
46609         staticAccessors$46.TOLERANCE.get = function () { return 0.000001 };
46610
46611         Object.defineProperties( OverlayResultValidator, staticAccessors$46 );
46612
46613         // operation.overlay
46614
46615         var GeometryCombiner = function GeometryCombiner (geoms) {
46616           this._geomFactory = null;
46617           this._skipEmpty = false;
46618           this._inputGeoms = null;
46619           this._geomFactory = GeometryCombiner.extractFactory(geoms);
46620           this._inputGeoms = geoms;
46621         };
46622         GeometryCombiner.prototype.extractElements = function extractElements (geom, elems) {
46623             var this$1 = this;
46624
46625           if (geom === null) { return null }
46626           for (var i = 0; i < geom.getNumGeometries(); i++) {
46627             var elemGeom = geom.getGeometryN(i);
46628             if (this$1._skipEmpty && elemGeom.isEmpty()) { continue }
46629             elems.add(elemGeom);
46630           }
46631         };
46632         GeometryCombiner.prototype.combine = function combine () {
46633             var this$1 = this;
46634
46635           var elems = new ArrayList();
46636           for (var i = this._inputGeoms.iterator(); i.hasNext();) {
46637             var g = i.next();
46638             this$1.extractElements(g, elems);
46639           }
46640           if (elems.size() === 0) {
46641             if (this._geomFactory !== null) {
46642               return this._geomFactory.createGeometryCollection(null)
46643             }
46644             return null
46645           }
46646           return this._geomFactory.buildGeometry(elems)
46647         };
46648         GeometryCombiner.prototype.interfaces_ = function interfaces_ () {
46649           return []
46650         };
46651         GeometryCombiner.prototype.getClass = function getClass () {
46652           return GeometryCombiner
46653         };
46654         GeometryCombiner.combine = function combine () {
46655           if (arguments.length === 1) {
46656             var geoms = arguments[0];
46657             var combiner = new GeometryCombiner(geoms);
46658             return combiner.combine()
46659           } else if (arguments.length === 2) {
46660             var g0 = arguments[0];
46661             var g1 = arguments[1];
46662             var combiner$1 = new GeometryCombiner(GeometryCombiner.createList(g0, g1));
46663             return combiner$1.combine()
46664           } else if (arguments.length === 3) {
46665             var g0$1 = arguments[0];
46666             var g1$1 = arguments[1];
46667             var g2 = arguments[2];
46668             var combiner$2 = new GeometryCombiner(GeometryCombiner.createList(g0$1, g1$1, g2));
46669             return combiner$2.combine()
46670           }
46671         };
46672         GeometryCombiner.extractFactory = function extractFactory (geoms) {
46673           if (geoms.isEmpty()) { return null }
46674           return geoms.iterator().next().getFactory()
46675         };
46676         GeometryCombiner.createList = function createList () {
46677           if (arguments.length === 2) {
46678             var obj0 = arguments[0];
46679             var obj1 = arguments[1];
46680             var list = new ArrayList();
46681             list.add(obj0);
46682             list.add(obj1);
46683             return list
46684           } else if (arguments.length === 3) {
46685             var obj0$1 = arguments[0];
46686             var obj1$1 = arguments[1];
46687             var obj2 = arguments[2];
46688             var list$1 = new ArrayList();
46689             list$1.add(obj0$1);
46690             list$1.add(obj1$1);
46691             list$1.add(obj2);
46692             return list$1
46693           }
46694         };
46695
46696         var CascadedPolygonUnion = function CascadedPolygonUnion () {
46697           this._inputPolys = null;
46698           this._geomFactory = null;
46699           var polys = arguments[0];
46700           this._inputPolys = polys;
46701           if (this._inputPolys === null) { this._inputPolys = new ArrayList(); }
46702         };
46703
46704         var staticAccessors$47 = { STRTREE_NODE_CAPACITY: { configurable: true } };
46705         CascadedPolygonUnion.prototype.reduceToGeometries = function reduceToGeometries (geomTree) {
46706             var this$1 = this;
46707
46708           var geoms = new ArrayList();
46709           for (var i = geomTree.iterator(); i.hasNext();) {
46710             var o = i.next();
46711             var geom = null;
46712             if (hasInterface(o, List)) {
46713               geom = this$1.unionTree(o);
46714             } else if (o instanceof Geometry) {
46715               geom = o;
46716             }
46717             geoms.add(geom);
46718           }
46719           return geoms
46720         };
46721         CascadedPolygonUnion.prototype.extractByEnvelope = function extractByEnvelope (env, geom, disjointGeoms) {
46722           var intersectingGeoms = new ArrayList();
46723           for (var i = 0; i < geom.getNumGeometries(); i++) {
46724             var elem = geom.getGeometryN(i);
46725             if (elem.getEnvelopeInternal().intersects(env)) { intersectingGeoms.add(elem); } else { disjointGeoms.add(elem); }
46726           }
46727           return this._geomFactory.buildGeometry(intersectingGeoms)
46728         };
46729         CascadedPolygonUnion.prototype.unionOptimized = function unionOptimized (g0, g1) {
46730           var g0Env = g0.getEnvelopeInternal();
46731           var g1Env = g1.getEnvelopeInternal();
46732           if (!g0Env.intersects(g1Env)) {
46733             var combo = GeometryCombiner.combine(g0, g1);
46734             return combo
46735           }
46736           if (g0.getNumGeometries() <= 1 && g1.getNumGeometries() <= 1) { return this.unionActual(g0, g1) }
46737           var commonEnv = g0Env.intersection(g1Env);
46738           return this.unionUsingEnvelopeIntersection(g0, g1, commonEnv)
46739         };
46740         CascadedPolygonUnion.prototype.union = function union () {
46741           if (this._inputPolys === null) { throw new Error('union() method cannot be called twice') }
46742           if (this._inputPolys.isEmpty()) { return null }
46743           this._geomFactory = this._inputPolys.iterator().next().getFactory();
46744           var index = new STRtree(CascadedPolygonUnion.STRTREE_NODE_CAPACITY);
46745           for (var i = this._inputPolys.iterator(); i.hasNext();) {
46746             var item = i.next();
46747             index.insert(item.getEnvelopeInternal(), item);
46748           }
46749           this._inputPolys = null;
46750           var itemTree = index.itemsTree();
46751           var unionAll = this.unionTree(itemTree);
46752           return unionAll
46753         };
46754         CascadedPolygonUnion.prototype.binaryUnion = function binaryUnion () {
46755           if (arguments.length === 1) {
46756             var geoms = arguments[0];
46757             return this.binaryUnion(geoms, 0, geoms.size())
46758           } else if (arguments.length === 3) {
46759             var geoms$1 = arguments[0];
46760             var start = arguments[1];
46761             var end = arguments[2];
46762             if (end - start <= 1) {
46763               var g0 = CascadedPolygonUnion.getGeometry(geoms$1, start);
46764               return this.unionSafe(g0, null)
46765             } else if (end - start === 2) {
46766               return this.unionSafe(CascadedPolygonUnion.getGeometry(geoms$1, start), CascadedPolygonUnion.getGeometry(geoms$1, start + 1))
46767             } else {
46768               var mid = Math.trunc((end + start) / 2);
46769               var g0$1 = this.binaryUnion(geoms$1, start, mid);
46770               var g1 = this.binaryUnion(geoms$1, mid, end);
46771               return this.unionSafe(g0$1, g1)
46772             }
46773           }
46774         };
46775         CascadedPolygonUnion.prototype.repeatedUnion = function repeatedUnion (geoms) {
46776           var union = null;
46777           for (var i = geoms.iterator(); i.hasNext();) {
46778             var g = i.next();
46779             if (union === null) { union = g.copy(); } else { union = union.union(g); }
46780           }
46781           return union
46782         };
46783         CascadedPolygonUnion.prototype.unionSafe = function unionSafe (g0, g1) {
46784           if (g0 === null && g1 === null) { return null }
46785           if (g0 === null) { return g1.copy() }
46786           if (g1 === null) { return g0.copy() }
46787           return this.unionOptimized(g0, g1)
46788         };
46789         CascadedPolygonUnion.prototype.unionActual = function unionActual (g0, g1) {
46790           return CascadedPolygonUnion.restrictToPolygons(g0.union(g1))
46791         };
46792         CascadedPolygonUnion.prototype.unionTree = function unionTree (geomTree) {
46793           var geoms = this.reduceToGeometries(geomTree);
46794           var union = this.binaryUnion(geoms);
46795           return union
46796         };
46797         CascadedPolygonUnion.prototype.unionUsingEnvelopeIntersection = function unionUsingEnvelopeIntersection (g0, g1, common) {
46798           var disjointPolys = new ArrayList();
46799           var g0Int = this.extractByEnvelope(common, g0, disjointPolys);
46800           var g1Int = this.extractByEnvelope(common, g1, disjointPolys);
46801           var union = this.unionActual(g0Int, g1Int);
46802           disjointPolys.add(union);
46803           var overallUnion = GeometryCombiner.combine(disjointPolys);
46804           return overallUnion
46805         };
46806         CascadedPolygonUnion.prototype.bufferUnion = function bufferUnion () {
46807           if (arguments.length === 1) {
46808             var geoms = arguments[0];
46809             var factory = geoms.get(0).getFactory();
46810             var gColl = factory.buildGeometry(geoms);
46811             var unionAll = gColl.buffer(0.0);
46812             return unionAll
46813           } else if (arguments.length === 2) {
46814             var g0 = arguments[0];
46815             var g1 = arguments[1];
46816             var factory$1 = g0.getFactory();
46817             var gColl$1 = factory$1.createGeometryCollection([g0, g1]);
46818             var unionAll$1 = gColl$1.buffer(0.0);
46819             return unionAll$1
46820           }
46821         };
46822         CascadedPolygonUnion.prototype.interfaces_ = function interfaces_ () {
46823           return []
46824         };
46825         CascadedPolygonUnion.prototype.getClass = function getClass () {
46826           return CascadedPolygonUnion
46827         };
46828         CascadedPolygonUnion.restrictToPolygons = function restrictToPolygons (g) {
46829           if (hasInterface(g, Polygonal)) {
46830             return g
46831           }
46832           var polygons = PolygonExtracter.getPolygons(g);
46833           if (polygons.size() === 1) { return polygons.get(0) }
46834           return g.getFactory().createMultiPolygon(GeometryFactory.toPolygonArray(polygons))
46835         };
46836         CascadedPolygonUnion.getGeometry = function getGeometry (list, index) {
46837           if (index >= list.size()) { return null }
46838           return list.get(index)
46839         };
46840         CascadedPolygonUnion.union = function union (polys) {
46841           var op = new CascadedPolygonUnion(polys);
46842           return op.union()
46843         };
46844         staticAccessors$47.STRTREE_NODE_CAPACITY.get = function () { return 4 };
46845
46846         Object.defineProperties( CascadedPolygonUnion, staticAccessors$47 );
46847
46848         var UnionOp = function UnionOp () {};
46849
46850         UnionOp.prototype.interfaces_ = function interfaces_ () {
46851           return []
46852         };
46853         UnionOp.prototype.getClass = function getClass () {
46854           return UnionOp
46855         };
46856         UnionOp.union = function union (g, other) {
46857           if (g.isEmpty() || other.isEmpty()) {
46858             if (g.isEmpty() && other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.UNION, g, other, g.getFactory()) }
46859             if (g.isEmpty()) { return other.copy() }
46860             if (other.isEmpty()) { return g.copy() }
46861           }
46862           g.checkNotGeometryCollection(g);
46863           g.checkNotGeometryCollection(other);
46864           return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.UNION)
46865         };
46866
46867         /**
46868          * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
46869          */
46870
46871         /**
46872          * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
46873          *
46874          * @name feature
46875          * @param {Geometry} geometry input geometry
46876          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
46877          * @param {Object} [options={}] Optional Parameters
46878          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
46879          * @param {string|number} [options.id] Identifier associated with the Feature
46880          * @returns {Feature} a GeoJSON Feature
46881          * @example
46882          * var geometry = {
46883          *   "type": "Point",
46884          *   "coordinates": [110, 50]
46885          * };
46886          *
46887          * var feature = turf.feature(geometry);
46888          *
46889          * //=feature
46890          */
46891         function feature$1(geometry, properties, options) {
46892             // Optional Parameters
46893             options = options || {};
46894             if (!isObject$1(options)) { throw new Error('options is invalid'); }
46895             var bbox = options.bbox;
46896             var id = options.id;
46897
46898             // Validation
46899             if (geometry === undefined) { throw new Error('geometry is required'); }
46900             if (properties && properties.constructor !== Object) { throw new Error('properties must be an Object'); }
46901             if (bbox) { validateBBox(bbox); }
46902             if (id) { validateId(id); }
46903
46904             // Main
46905             var feat = {type: 'Feature'};
46906             if (id) { feat.id = id; }
46907             if (bbox) { feat.bbox = bbox; }
46908             feat.properties = properties || {};
46909             feat.geometry = geometry;
46910             return feat;
46911         }
46912
46913         /**
46914          * isNumber
46915          *
46916          * @param {*} num Number to validate
46917          * @returns {boolean} true/false
46918          * @example
46919          * turf.isNumber(123)
46920          * //=true
46921          * turf.isNumber('foo')
46922          * //=false
46923          */
46924         function isNumber(num) {
46925             return !isNaN(num) && num !== null && !Array.isArray(num);
46926         }
46927
46928         /**
46929          * isObject
46930          *
46931          * @param {*} input variable to validate
46932          * @returns {boolean} true/false
46933          * @example
46934          * turf.isObject({elevation: 10})
46935          * //=true
46936          * turf.isObject('foo')
46937          * //=false
46938          */
46939         function isObject$1(input) {
46940             return (!!input) && (input.constructor === Object);
46941         }
46942
46943         /**
46944          * Validate BBox
46945          *
46946          * @private
46947          * @param {Array<number>} bbox BBox to validate
46948          * @returns {void}
46949          * @throws Error if BBox is not valid
46950          * @example
46951          * validateBBox([-180, -40, 110, 50])
46952          * //=OK
46953          * validateBBox([-180, -40])
46954          * //=Error
46955          * validateBBox('Foo')
46956          * //=Error
46957          * validateBBox(5)
46958          * //=Error
46959          * validateBBox(null)
46960          * //=Error
46961          * validateBBox(undefined)
46962          * //=Error
46963          */
46964         function validateBBox(bbox) {
46965             if (!bbox) { throw new Error('bbox is required'); }
46966             if (!Array.isArray(bbox)) { throw new Error('bbox must be an Array'); }
46967             if (bbox.length !== 4 && bbox.length !== 6) { throw new Error('bbox must be an Array of 4 or 6 numbers'); }
46968             bbox.forEach(function (num) {
46969                 if (!isNumber(num)) { throw new Error('bbox must only contain numbers'); }
46970             });
46971         }
46972
46973         /**
46974          * Validate Id
46975          *
46976          * @private
46977          * @param {string|number} id Id to validate
46978          * @returns {void}
46979          * @throws Error if Id is not valid
46980          * @example
46981          * validateId([-180, -40, 110, 50])
46982          * //=Error
46983          * validateId([-180, -40])
46984          * //=Error
46985          * validateId('Foo')
46986          * //=OK
46987          * validateId(5)
46988          * //=OK
46989          * validateId(null)
46990          * //=Error
46991          * validateId(undefined)
46992          * //=Error
46993          */
46994         function validateId(id) {
46995             if (!id) { throw new Error('id is required'); }
46996             if (['string', 'number'].indexOf(typeof id) === -1) { throw new Error('id must be a number or a string'); }
46997         }
46998
46999         /**
47000          * Callback for geomEach
47001          *
47002          * @callback geomEachCallback
47003          * @param {Geometry} currentGeometry The current Geometry being processed.
47004          * @param {number} featureIndex The current index of the Feature being processed.
47005          * @param {Object} featureProperties The current Feature Properties being processed.
47006          * @param {Array<number>} featureBBox The current Feature BBox being processed.
47007          * @param {number|string} featureId The current Feature Id being processed.
47008          */
47009
47010         /**
47011          * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()
47012          *
47013          * @name geomEach
47014          * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
47015          * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)
47016          * @returns {void}
47017          * @example
47018          * var features = turf.featureCollection([
47019          *     turf.point([26, 37], {foo: 'bar'}),
47020          *     turf.point([36, 53], {hello: 'world'})
47021          * ]);
47022          *
47023          * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {
47024          *   //=currentGeometry
47025          *   //=featureIndex
47026          *   //=featureProperties
47027          *   //=featureBBox
47028          *   //=featureId
47029          * });
47030          */
47031         function geomEach(geojson, callback) {
47032             var i, j, g, geometry, stopG,
47033                 geometryMaybeCollection,
47034                 isGeometryCollection,
47035                 featureProperties,
47036                 featureBBox,
47037                 featureId,
47038                 featureIndex = 0,
47039                 isFeatureCollection = geojson.type === 'FeatureCollection',
47040                 isFeature = geojson.type === 'Feature',
47041                 stop = isFeatureCollection ? geojson.features.length : 1;
47042
47043             // This logic may look a little weird. The reason why it is that way
47044             // is because it's trying to be fast. GeoJSON supports multiple kinds
47045             // of objects at its root: FeatureCollection, Features, Geometries.
47046             // This function has the responsibility of handling all of them, and that
47047             // means that some of the `for` loops you see below actually just don't apply
47048             // to certain inputs. For instance, if you give this just a
47049             // Point geometry, then both loops are short-circuited and all we do
47050             // is gradually rename the input until it's called 'geometry'.
47051             //
47052             // This also aims to allocate as few resources as possible: just a
47053             // few numbers and booleans, rather than any temporary arrays as would
47054             // be required with the normalization approach.
47055             for (i = 0; i < stop; i++) {
47056
47057                 geometryMaybeCollection = (isFeatureCollection ? geojson.features[i].geometry :
47058                     (isFeature ? geojson.geometry : geojson));
47059                 featureProperties = (isFeatureCollection ? geojson.features[i].properties :
47060                     (isFeature ? geojson.properties : {}));
47061                 featureBBox = (isFeatureCollection ? geojson.features[i].bbox :
47062                     (isFeature ? geojson.bbox : undefined));
47063                 featureId = (isFeatureCollection ? geojson.features[i].id :
47064                     (isFeature ? geojson.id : undefined));
47065                 isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false;
47066                 stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;
47067
47068                 for (g = 0; g < stopG; g++) {
47069                     geometry = isGeometryCollection ?
47070                         geometryMaybeCollection.geometries[g] : geometryMaybeCollection;
47071
47072                     // Handle null Geometry
47073                     if (geometry === null) {
47074                         if (callback(null, featureIndex, featureProperties, featureBBox, featureId) === false) { return false; }
47075                         continue;
47076                     }
47077                     switch (geometry.type) {
47078                     case 'Point':
47079                     case 'LineString':
47080                     case 'MultiPoint':
47081                     case 'Polygon':
47082                     case 'MultiLineString':
47083                     case 'MultiPolygon': {
47084                         if (callback(geometry, featureIndex, featureProperties, featureBBox, featureId) === false) { return false; }
47085                         break;
47086                     }
47087                     case 'GeometryCollection': {
47088                         for (j = 0; j < geometry.geometries.length; j++) {
47089                             if (callback(geometry.geometries[j], featureIndex, featureProperties, featureBBox, featureId) === false) { return false; }
47090                         }
47091                         break;
47092                     }
47093                     default:
47094                         throw new Error('Unknown Geometry Type');
47095                     }
47096                 }
47097                 // Only increase `featureIndex` per each feature
47098                 featureIndex++;
47099             }
47100         }
47101
47102         /**
47103          * Callback for geomReduce
47104          *
47105          * The first time the callback function is called, the values provided as arguments depend
47106          * on whether the reduce method has an initialValue argument.
47107          *
47108          * If an initialValue is provided to the reduce method:
47109          *  - The previousValue argument is initialValue.
47110          *  - The currentValue argument is the value of the first element present in the array.
47111          *
47112          * If an initialValue is not provided:
47113          *  - The previousValue argument is the value of the first element present in the array.
47114          *  - The currentValue argument is the value of the second element present in the array.
47115          *
47116          * @callback geomReduceCallback
47117          * @param {*} previousValue The accumulated value previously returned in the last invocation
47118          * of the callback, or initialValue, if supplied.
47119          * @param {Geometry} currentGeometry The current Geometry being processed.
47120          * @param {number} featureIndex The current index of the Feature being processed.
47121          * @param {Object} featureProperties The current Feature Properties being processed.
47122          * @param {Array<number>} featureBBox The current Feature BBox being processed.
47123          * @param {number|string} featureId The current Feature Id being processed.
47124          */
47125
47126         /**
47127          * Reduce geometry in any GeoJSON object, similar to Array.reduce().
47128          *
47129          * @name geomReduce
47130          * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
47131          * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)
47132          * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
47133          * @returns {*} The value that results from the reduction.
47134          * @example
47135          * var features = turf.featureCollection([
47136          *     turf.point([26, 37], {foo: 'bar'}),
47137          *     turf.point([36, 53], {hello: 'world'})
47138          * ]);
47139          *
47140          * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {
47141          *   //=previousValue
47142          *   //=currentGeometry
47143          *   //=featureIndex
47144          *   //=featureProperties
47145          *   //=featureBBox
47146          *   //=featureId
47147          *   return currentGeometry
47148          * });
47149          */
47150         function geomReduce(geojson, callback, initialValue) {
47151             var previousValue = initialValue;
47152             geomEach(geojson, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {
47153                 if (featureIndex === 0 && initialValue === undefined) { previousValue = currentGeometry; }
47154                 else { previousValue = callback(previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId); }
47155             });
47156             return previousValue;
47157         }
47158
47159         /**
47160          * Callback for flattenEach
47161          *
47162          * @callback flattenEachCallback
47163          * @param {Feature} currentFeature The current flattened feature being processed.
47164          * @param {number} featureIndex The current index of the Feature being processed.
47165          * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.
47166          */
47167
47168         /**
47169          * Iterate over flattened features in any GeoJSON object, similar to
47170          * Array.forEach.
47171          *
47172          * @name flattenEach
47173          * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
47174          * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)
47175          * @example
47176          * var features = turf.featureCollection([
47177          *     turf.point([26, 37], {foo: 'bar'}),
47178          *     turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})
47179          * ]);
47180          *
47181          * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {
47182          *   //=currentFeature
47183          *   //=featureIndex
47184          *   //=multiFeatureIndex
47185          * });
47186          */
47187         function flattenEach(geojson, callback) {
47188             geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {
47189                 // Callback for single geometry
47190                 var type = (geometry === null) ? null : geometry.type;
47191                 switch (type) {
47192                 case null:
47193                 case 'Point':
47194                 case 'LineString':
47195                 case 'Polygon':
47196                     if (callback(feature$1(geometry, properties, {bbox: bbox, id: id}), featureIndex, 0) === false) { return false; }
47197                     return;
47198                 }
47199
47200                 var geomType;
47201
47202                 // Callback for multi-geometry
47203                 switch (type) {
47204                 case 'MultiPoint':
47205                     geomType = 'Point';
47206                     break;
47207                 case 'MultiLineString':
47208                     geomType = 'LineString';
47209                     break;
47210                 case 'MultiPolygon':
47211                     geomType = 'Polygon';
47212                     break;
47213                 }
47214
47215                 for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) {
47216                     var coordinate = geometry.coordinates[multiFeatureIndex];
47217                     var geom = {
47218                         type: geomType,
47219                         coordinates: coordinate
47220                     };
47221                     if (callback(feature$1(geom, properties), featureIndex, multiFeatureIndex) === false) { return false; }
47222                 }
47223             });
47224         }
47225
47226         /**
47227          * Takes one or more features and returns their area in square meters.
47228          *
47229          * @name area
47230          * @param {GeoJSON} geojson input GeoJSON feature(s)
47231          * @returns {number} area in square meters
47232          * @example
47233          * var polygon = turf.polygon([[[125, -15], [113, -22], [154, -27], [144, -15], [125, -15]]]);
47234          *
47235          * var area = turf.area(polygon);
47236          *
47237          * //addToMap
47238          * var addToMap = [polygon]
47239          * polygon.properties.area = area
47240          */
47241         function area$2(geojson) {
47242             return geomReduce(geojson, function (value, geom) {
47243                 return value + calculateArea(geom);
47244             }, 0);
47245         }
47246
47247         var RADIUS$1 = 6378137;
47248         // var FLATTENING_DENOM = 298.257223563;
47249         // var FLATTENING = 1 / FLATTENING_DENOM;
47250         // var POLAR_RADIUS = RADIUS * (1 - FLATTENING);
47251
47252         /**
47253          * Calculate Area
47254          *
47255          * @private
47256          * @param {GeoJSON} geojson GeoJSON
47257          * @returns {number} area
47258          */
47259         function calculateArea(geojson) {
47260             var area = 0, i;
47261             switch (geojson.type) {
47262             case 'Polygon':
47263                 return polygonArea$1(geojson.coordinates);
47264             case 'MultiPolygon':
47265                 for (i = 0; i < geojson.coordinates.length; i++) {
47266                     area += polygonArea$1(geojson.coordinates[i]);
47267                 }
47268                 return area;
47269             case 'Point':
47270             case 'MultiPoint':
47271             case 'LineString':
47272             case 'MultiLineString':
47273                 return 0;
47274             case 'GeometryCollection':
47275                 for (i = 0; i < geojson.geometries.length; i++) {
47276                     area += calculateArea(geojson.geometries[i]);
47277                 }
47278                 return area;
47279             }
47280         }
47281
47282         function polygonArea$1(coords) {
47283             var area = 0;
47284             if (coords && coords.length > 0) {
47285                 area += Math.abs(ringArea$1(coords[0]));
47286                 for (var i = 1; i < coords.length; i++) {
47287                     area -= Math.abs(ringArea$1(coords[i]));
47288                 }
47289             }
47290             return area;
47291         }
47292
47293         /**
47294          * @private
47295          * Calculate the approximate area of the polygon were it projected onto the earth.
47296          * Note that this area will be positive if ring is oriented clockwise, otherwise it will be negative.
47297          *
47298          * Reference:
47299          * Robert. G. Chamberlain and William H. Duquette, "Some Algorithms for Polygons on a Sphere", JPL Publication 07-03, Jet Propulsion
47300          * Laboratory, Pasadena, CA, June 2007 http://trs-new.jpl.nasa.gov/dspace/handle/2014/40409
47301          *
47302          * @param {Array<Array<number>>} coords Ring Coordinates
47303          * @returns {number} The approximate signed geodesic area of the polygon in square meters.
47304          */
47305         function ringArea$1(coords) {
47306             var p1;
47307             var p2;
47308             var p3;
47309             var lowerIndex;
47310             var middleIndex;
47311             var upperIndex;
47312             var i;
47313             var area = 0;
47314             var coordsLength = coords.length;
47315
47316             if (coordsLength > 2) {
47317                 for (i = 0; i < coordsLength; i++) {
47318                     if (i === coordsLength - 2) { // i = N-2
47319                         lowerIndex = coordsLength - 2;
47320                         middleIndex = coordsLength - 1;
47321                         upperIndex = 0;
47322                     } else if (i === coordsLength - 1) { // i = N-1
47323                         lowerIndex = coordsLength - 1;
47324                         middleIndex = 0;
47325                         upperIndex = 1;
47326                     } else { // i = 0 to N-3
47327                         lowerIndex = i;
47328                         middleIndex = i + 1;
47329                         upperIndex = i + 2;
47330                     }
47331                     p1 = coords[lowerIndex];
47332                     p2 = coords[middleIndex];
47333                     p3 = coords[upperIndex];
47334                     area += (rad$1(p3[0]) - rad$1(p1[0])) * Math.sin(rad$1(p2[1]));
47335                 }
47336
47337                 area = area * RADIUS$1 * RADIUS$1 / 2;
47338             }
47339
47340             return area;
47341         }
47342
47343         function rad$1(_) {
47344             return _ * Math.PI / 180;
47345         }
47346
47347         /**
47348          * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
47349          */
47350
47351         /**
47352          * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
47353          *
47354          * @name feature
47355          * @param {Geometry} geometry input geometry
47356          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
47357          * @param {Object} [options={}] Optional Parameters
47358          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
47359          * @param {string|number} [options.id] Identifier associated with the Feature
47360          * @returns {Feature} a GeoJSON Feature
47361          * @example
47362          * var geometry = {
47363          *   "type": "Point",
47364          *   "coordinates": [110, 50]
47365          * };
47366          *
47367          * var feature = turf.feature(geometry);
47368          *
47369          * //=feature
47370          */
47371         function feature$2(geometry, properties, options) {
47372             // Optional Parameters
47373             options = options || {};
47374             if (!isObject$2(options)) { throw new Error('options is invalid'); }
47375             var bbox = options.bbox;
47376             var id = options.id;
47377
47378             // Validation
47379             if (geometry === undefined) { throw new Error('geometry is required'); }
47380             if (properties && properties.constructor !== Object) { throw new Error('properties must be an Object'); }
47381             if (bbox) { validateBBox$1(bbox); }
47382             if (id) { validateId$1(id); }
47383
47384             // Main
47385             var feat = {type: 'Feature'};
47386             if (id) { feat.id = id; }
47387             if (bbox) { feat.bbox = bbox; }
47388             feat.properties = properties || {};
47389             feat.geometry = geometry;
47390             return feat;
47391         }
47392
47393         /**
47394          * isNumber
47395          *
47396          * @param {*} num Number to validate
47397          * @returns {boolean} true/false
47398          * @example
47399          * turf.isNumber(123)
47400          * //=true
47401          * turf.isNumber('foo')
47402          * //=false
47403          */
47404         function isNumber$1(num) {
47405             return !isNaN(num) && num !== null && !Array.isArray(num);
47406         }
47407
47408         /**
47409          * isObject
47410          *
47411          * @param {*} input variable to validate
47412          * @returns {boolean} true/false
47413          * @example
47414          * turf.isObject({elevation: 10})
47415          * //=true
47416          * turf.isObject('foo')
47417          * //=false
47418          */
47419         function isObject$2(input) {
47420             return (!!input) && (input.constructor === Object);
47421         }
47422
47423         /**
47424          * Validate BBox
47425          *
47426          * @private
47427          * @param {Array<number>} bbox BBox to validate
47428          * @returns {void}
47429          * @throws Error if BBox is not valid
47430          * @example
47431          * validateBBox([-180, -40, 110, 50])
47432          * //=OK
47433          * validateBBox([-180, -40])
47434          * //=Error
47435          * validateBBox('Foo')
47436          * //=Error
47437          * validateBBox(5)
47438          * //=Error
47439          * validateBBox(null)
47440          * //=Error
47441          * validateBBox(undefined)
47442          * //=Error
47443          */
47444         function validateBBox$1(bbox) {
47445             if (!bbox) { throw new Error('bbox is required'); }
47446             if (!Array.isArray(bbox)) { throw new Error('bbox must be an Array'); }
47447             if (bbox.length !== 4 && bbox.length !== 6) { throw new Error('bbox must be an Array of 4 or 6 numbers'); }
47448             bbox.forEach(function (num) {
47449                 if (!isNumber$1(num)) { throw new Error('bbox must only contain numbers'); }
47450             });
47451         }
47452
47453         /**
47454          * Validate Id
47455          *
47456          * @private
47457          * @param {string|number} id Id to validate
47458          * @returns {void}
47459          * @throws Error if Id is not valid
47460          * @example
47461          * validateId([-180, -40, 110, 50])
47462          * //=Error
47463          * validateId([-180, -40])
47464          * //=Error
47465          * validateId('Foo')
47466          * //=OK
47467          * validateId(5)
47468          * //=OK
47469          * validateId(null)
47470          * //=Error
47471          * validateId(undefined)
47472          * //=Error
47473          */
47474         function validateId$1(id) {
47475             if (!id) { throw new Error('id is required'); }
47476             if (['string', 'number'].indexOf(typeof id) === -1) { throw new Error('id must be a number or a string'); }
47477         }
47478
47479         /**
47480          * Get Geometry from Feature or Geometry Object
47481          *
47482          * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object
47483          * @returns {Geometry|null} GeoJSON Geometry Object
47484          * @throws {Error} if geojson is not a Feature or Geometry Object
47485          * @example
47486          * var point = {
47487          *   "type": "Feature",
47488          *   "properties": {},
47489          *   "geometry": {
47490          *     "type": "Point",
47491          *     "coordinates": [110, 40]
47492          *   }
47493          * }
47494          * var geom = turf.getGeom(point)
47495          * //={"type": "Point", "coordinates": [110, 40]}
47496          */
47497         function getGeom(geojson) {
47498             if (!geojson) { throw new Error('geojson is required'); }
47499             if (geojson.geometry !== undefined) { return geojson.geometry; }
47500             if (geojson.coordinates || geojson.geometries) { return geojson; }
47501             throw new Error('geojson must be a valid Feature or Geometry Object');
47502         }
47503
47504         /**
47505          * Finds the difference between two {@link Polygon|polygons} by clipping the second polygon from the first.
47506          *
47507          * @name difference
47508          * @param {Feature<Polygon|MultiPolygon>} polygon1 input Polygon feature
47509          * @param {Feature<Polygon|MultiPolygon>} polygon2 Polygon feature to difference from polygon1
47510          * @returns {Feature<Polygon|MultiPolygon>|null} a Polygon or MultiPolygon feature showing the area of `polygon1` excluding the area of `polygon2` (if empty returns `null`)
47511          * @example
47512          * var polygon1 = turf.polygon([[
47513          *   [128, -26],
47514          *   [141, -26],
47515          *   [141, -21],
47516          *   [128, -21],
47517          *   [128, -26]
47518          * ]], {
47519          *   "fill": "#F00",
47520          *   "fill-opacity": 0.1
47521          * });
47522          * var polygon2 = turf.polygon([[
47523          *   [126, -28],
47524          *   [140, -28],
47525          *   [140, -20],
47526          *   [126, -20],
47527          *   [126, -28]
47528          * ]], {
47529          *   "fill": "#00F",
47530          *   "fill-opacity": 0.1
47531          * });
47532          *
47533          * var difference = turf.difference(polygon1, polygon2);
47534          *
47535          * //addToMap
47536          * var addToMap = [polygon1, polygon2, difference];
47537          */
47538         function difference(polygon1, polygon2) {
47539             var geom1 = getGeom(polygon1);
47540             var geom2 = getGeom(polygon2);
47541             var properties = polygon1.properties || {};
47542
47543             // Issue #721 - JSTS can't handle empty polygons
47544             geom1 = removeEmptyPolygon(geom1);
47545             geom2 = removeEmptyPolygon(geom2);
47546             if (!geom1) { return null; }
47547             if (!geom2) { return feature$2(geom1, properties); }
47548
47549             // JSTS difference operation
47550             var reader = new GeoJSONReader();
47551             var a = reader.read(geom1);
47552             var b = reader.read(geom2);
47553             var differenced = OverlayOp.difference(a, b);
47554             if (differenced.isEmpty()) { return null; }
47555             var writer = new GeoJSONWriter();
47556             var geom = writer.write(differenced);
47557
47558             return feature$2(geom, properties);
47559         }
47560
47561         /**
47562          * Detect Empty Polygon
47563          *
47564          * @private
47565          * @param {Geometry<Polygon|MultiPolygon>} geom Geometry Object
47566          * @returns {Geometry<Polygon|MultiPolygon>|null} removed any polygons with no areas
47567          */
47568         function removeEmptyPolygon(geom) {
47569             switch (geom.type) {
47570             case 'Polygon':
47571                 if (area$2(geom) > 1) { return geom; }
47572                 return null;
47573             case 'MultiPolygon':
47574                 var coordinates = [];
47575                 flattenEach(geom, function (feature$$1) {
47576                     if (area$2(feature$$1) > 1) { coordinates.push(feature$$1.geometry.coordinates); }
47577                 });
47578                 if (coordinates.length) { return {type: 'MultiPolygon', coordinates: coordinates}; }
47579             }
47580         }
47581
47582         /**
47583          * Takes two or more {@link Polygon|polygons} and returns a combined polygon. If the input polygons are not contiguous, this function returns a {@link MultiPolygon} feature.
47584          *
47585          * @name union
47586          * @param {...Feature<Polygon>} A polygon to combine
47587          * @returns {Feature<(Polygon|MultiPolygon)>} a combined {@link Polygon} or {@link MultiPolygon} feature
47588          * @example
47589          * var poly1 = turf.polygon([[
47590          *     [-82.574787, 35.594087],
47591          *     [-82.574787, 35.615581],
47592          *     [-82.545261, 35.615581],
47593          *     [-82.545261, 35.594087],
47594          *     [-82.574787, 35.594087]
47595          * ]], {"fill": "#0f0"});
47596          * var poly2 = turf.polygon([[
47597          *     [-82.560024, 35.585153],
47598          *     [-82.560024, 35.602602],
47599          *     [-82.52964, 35.602602],
47600          *     [-82.52964, 35.585153],
47601          *     [-82.560024, 35.585153]
47602          * ]], {"fill": "#00f"});
47603          *
47604          * var union = turf.union(poly1, poly2);
47605          *
47606          * //addToMap
47607          * var addToMap = [poly1, poly2, union];
47608          */
47609         function union() {
47610             var arguments$1 = arguments;
47611
47612             var reader = new GeoJSONReader();
47613             var result = reader.read(JSON.stringify(arguments[0].geometry));
47614
47615             for (var i = 1; i < arguments.length; i++) {
47616                 result = UnionOp.union(result, reader.read(JSON.stringify(arguments$1[i].geometry)));
47617             }
47618
47619             var writer = new GeoJSONWriter();
47620             result = writer.write(result);
47621
47622             return {
47623                 type: 'Feature',
47624                 geometry: result,
47625                 properties: arguments[0].properties
47626             };
47627         }
47628
47629         // Reduce an array of locations into a single GeoJSON feature
47630         function _locationReducer(accumulator, location) {
47631           var result = this.locationToFeature(location);   // eslint-disable-line no-invalid-this
47632           if (!result || !result.feature) {
47633             console.warn(("Warning:  Couldn't resolve location \"" + location + "\""));  // eslint-disable-line no-console
47634             return accumulator;
47635           }
47636           return !accumulator ? result.feature : union(accumulator, result.feature);
47637         }
47638
47639
47640         // It's ok to sort location lists because they all end up unioned together.
47641         function _locationSorter(a, b) {
47642           var rank = { countrycoder: 1, geojson: 2, point: 3 };
47643           var aRank = rank[this.isValidLocation(a)] || 4;   // eslint-disable-line no-invalid-this
47644           var bRank = rank[this.isValidLocation(b)] || 4;   // eslint-disable-line no-invalid-this
47645
47646           if (aRank > bRank) { return 1; }
47647           if (aRank < bRank) { return -1; }
47648
47649           // numeric sort point [lon,lat] locations
47650           if (aRank === 3 && bRank === 3) {
47651             return (a[0] - b[0] > 0) ? 1
47652               : (a[0] - b[0] < 0) ? -1
47653               : (a[1] - b[1]);
47654           }
47655
47656           // lexical sort other identifiers
47657           return a.localeCompare(b);
47658         }
47659
47660
47661
47662         var defaultExport = function defaultExport(fc) {
47663           var this$1 = this;
47664
47665           this._cache = {};
47666           this._features = {};
47667
47668           // process input FeatureCollection
47669           if (fc && fc.type === 'FeatureCollection' && Array.isArray(fc.features)) {
47670             fc.features.forEach(function (feature) {
47671               feature.properties = feature.properties || {};
47672               var props = feature.properties;
47673
47674               // get `id` from either `id` or `properties`
47675               var id = feature.id || props.id;
47676               if (!id || !/^\S+\.geojson$/i.test(id)) { return; }
47677
47678               // ensure id
47679               feature.id = id;
47680               props.id = id;
47681
47682               // ensure area property
47683               if (!props.area) {
47684                 var area = geojsonArea.geometry(feature.geometry) / 1e6;// m² to km²
47685                 props.area = Number(area.toFixed(2));
47686               }
47687
47688               this$1._features[id] = feature;
47689             });
47690           }
47691
47692           // Update CountryCoder world geometry to be a polygon covering the world.
47693           // (yes, modifying the internal CountryCoder geometry is hacky, but seems safe)
47694           var world = feature('001');
47695           world.geometry = {
47696             type: 'Polygon',
47697             coordinates: [[[-180, -90], [-180, 90], [180, 90], [180, -90], [-180, -90]]]
47698           };
47699         };
47700
47701
47702         // isValidLocation
47703         //
47704         // Pass a `location` identifier
47705         // Returns 'point', 'geojson', or 'countrycoder' if valid, false otherwise
47706         defaultExport.prototype.isValidLocation = function isValidLocation (location) {
47707           if (Array.isArray(location)) { // a [lon,lat] coordinate pair?
47708             return !!(
47709               location.length === 2 && Number.isFinite(location[0]) && Number.isFinite(location[1]) &&
47710               location[0] >= -180 && location[0] <= 180 && location[1] >= -90 && location[1] <= 90
47711             ) && 'point';
47712
47713           } else if (/^\S+\.geojson$/i.test(location)) { // a .geojson filename?
47714             return !!this._features[location] && 'geojson';
47715
47716           } else {  // a country-coder string?
47717             var ccmatch = feature(location);
47718             return !!ccmatch && 'countrycoder';
47719           }
47720         };
47721
47722
47723         // locationToFeature
47724         //
47725         // Pass a `location` identifier
47726         // Returns a GeoJSON feature
47727         defaultExport.prototype.locationToFeature = function locationToFeature (location) {
47728           // a [lon,lat] coordinate pair?
47729           if (Array.isArray(location)) {
47730             if (location.length === 2 && Number.isFinite(location[0]) && Number.isFinite(location[1]) &&
47731               location[0] >= -180 && location[0] <= 180 && location[1] >= -90 && location[1] <= 90
47732             ) {
47733               var RADIUS = 25000;// meters
47734               var EDGES = 10;
47735               var PRECISION = 3;
47736               var id = 'point:' + location.toString();
47737               var area = Math.PI * RADIUS * RADIUS / 1e6;   // m² to km²
47738
47739               var feature$1 = this._cache[id];
47740               if (!feature$1) {
47741                 feature$1 = this._cache[id] = geojsonPrecision({
47742                   type: 'Feature',
47743                   id: id,
47744                   properties: { id: id, area: Number(area.toFixed(2)) },
47745                   geometry: circleToPolygon(location, RADIUS, EDGES)
47746                 }, PRECISION);
47747               }
47748               return { type: 'point', feature: feature$1 };
47749
47750             } else {
47751               return null;
47752             }
47753
47754            // a .geojson filename?
47755            } else if (/^\S+\.geojson$/i.test(location)) {
47756             var feature$1$1 = this._features[location];
47757             if (feature$1$1) {
47758               return { type: 'geojson', feature: feature$1$1 };
47759             } else {
47760               return null;
47761             }
47762
47763           // a country-coder string?
47764           } else {
47765             var feature$2 = feature(location);
47766             if (feature$2) {
47767               feature$2.properties = feature$2.properties || {};
47768               var props = feature$2.properties;
47769
47770               // -> This block of code is weird and requires some explanation. <-
47771               // CountryCoder includes higher level features which are made up of members.
47772               // These features don't have their own geometry, but CountryCoder provides an
47773               // `aggregateFeature` method to combine these members into a MultiPolygon.
47774               // BUT, when we try to actually work with these aggregated MultiPolygons,
47775               // Turf/JSTS gets crashy because of topography bugs.
47776               // SO, we'll aggregate the features ourselves by unioning them together,
47777               // then store the resulting geometry back in the CountryCoder feature itself.
47778               // This approach also has the benefit of removing all the internal boaders and
47779               // simplifying the regional polygons a lot.
47780               // (yes, modifying the internal CountryCoder geometry is hacky, but seems safe)
47781               if (!feature$2.geometry) {
47782                 var aggregate = props.members.reduce(_locationReducer.bind(this), null);
47783                 feature$2.geometry = aggregate.geometry;
47784               }
47785
47786               // ensure area property
47787               if (!props.area) {
47788                 var area$1 = geojsonArea.geometry(feature$2.geometry) / 1e6;// m² to km²
47789                 props.area = Number(area$1.toFixed(2));
47790               }
47791
47792               // ensure id
47793               var id$1 = (props.iso1A2 || props.iso1N3 || props.m49 || props.M49).toString();
47794               feature$2.id = id$1;
47795               props.id = id$1;
47796
47797               return { type: 'countrycoder', feature: feature$2 };
47798
47799             } else {
47800               return null;
47801             }
47802           }
47803         };
47804
47805
47806         // resolveLocationSet
47807         //
47808         // Pass a `locationSet` Object like:
47809         // `{ include: [ Array ], exclude: [ Array ] }`
47810         // Returns a stable identifier string of the form:
47811         // "+[included]-[excluded]"
47812         //
47813         defaultExport.prototype.resolveLocationSet = function resolveLocationSet (locationSet) {
47814             var this$1 = this;
47815
47816           locationSet = locationSet || {};
47817           var include = (locationSet.include || []).filter(function (l) { return this$1.isValidLocation(l); });
47818           var exclude = (locationSet.exclude || []).filter(function (l) { return this$1.isValidLocation(l); });
47819
47820           if (include.length) {
47821             include.sort(_locationSorter.bind(this));
47822           } else {
47823             include = ['001']; // default to 'the world'
47824           }
47825
47826           // return quickly if it's a single included location..
47827           if (include.length === 1 && exclude.length === 0) {
47828             var result = this.locationToFeature(include[0]);
47829             return result && result.feature;
47830           }
47831
47832           // generate stable identifier
47833           var id = '+' + toIdString(include);
47834           if (exclude.length) {
47835             exclude.sort(_locationSorter.bind(this));
47836             id += '-' + toIdString(exclude);
47837           }
47838
47839           // return cached?
47840           if (this._cache[id]) {
47841             return this._cache[id];
47842           }
47843
47844           // resolve lists
47845           var includeGeoJSON = include.reduce(_locationReducer.bind(this), null);
47846           var excludeGeoJSON = exclude.reduce(_locationReducer.bind(this), null);
47847
47848           // calculate include-exclude, recalc area and return result
47849           var resultGeoJSON = excludeGeoJSON ? difference(includeGeoJSON, excludeGeoJSON) : includeGeoJSON;
47850           var area = geojsonArea.geometry(resultGeoJSON.geometry) / 1e6;// m² to km²
47851
47852           resultGeoJSON.id = id;
47853           resultGeoJSON.properties = { id: id, area: Number(area.toFixed(2)) };
47854           this._cache[id] = resultGeoJSON;
47855
47856           return resultGeoJSON;
47857
47858
47859           function toIdString(arr) {
47860             return JSON.stringify(arr).replace(/"/g,'').toLowerCase();
47861           }
47862         };
47863
47864         // index the osm-community-index
47865         var ociFeatures = {};
47866         var loco = new defaultExport({ type: 'FeatureCollection', features: features });
47867
47868         Object.values(resources).forEach(function (resource) {
47869           var feature = loco.resolveLocationSet(resource.locationSet);
47870           var ociFeature = ociFeatures[feature.id];
47871           if (!ociFeature) {
47872             ociFeature = JSON.parse(JSON.stringify(feature));  // deep clone
47873             ociFeature.properties.resourceIDs = new Set();
47874             ociFeatures[feature.id] = ociFeature;
47875           }
47876           ociFeature.properties.resourceIDs.add(resource.id);
47877         });
47878
47879
47880         var data = {
47881           community: {
47882             features: ociFeatures,
47883             resources: resources,
47884             query: whichPolygon_1({ type: 'FeatureCollection', features: Object.values(ociFeatures) })
47885           },
47886           imagery: dataImagery,  //legacy
47887           presets: {
47888             presets: presets,
47889             defaults: defaults,
47890             categories: categories,
47891             fields: fields
47892           }
47893         };
47894
47895         // http://2ality.com/2015/01/es6-set-operations.html
47896
47897         // Difference (a \ b): create a set that contains those elements of set a that are not in set b.
47898         // This operation is also sometimes called minus (-).
47899         // var a = [1,2,3];
47900         // var b = [4,3,2];
47901         // utilArrayDifference(a, b)
47902         //   [1]
47903         // utilArrayDifference(b, a)
47904         //   [4]
47905         function utilArrayDifference(a, b) {
47906             var other = new Set(b);
47907             return Array.from(new Set(a))
47908                 .filter(function(v) { return !other.has(v); });
47909         }
47910
47911         // Intersection (a ∩ b): create a set that contains those elements of set a that are also in set b.
47912         // var a = [1,2,3];
47913         // var b = [4,3,2];
47914         // utilArrayIntersection(a, b)
47915         //   [2,3]
47916         function utilArrayIntersection(a, b) {
47917             var other = new Set(b);
47918             return Array.from(new Set(a))
47919                 .filter(function(v) { return other.has(v); });
47920         }
47921
47922         // Union (a ∪ b): create a set that contains the elements of both set a and set b.
47923         // var a = [1,2,3];
47924         // var b = [4,3,2];
47925         // utilArrayUnion(a, b)
47926         //   [1,2,3,4]
47927         function utilArrayUnion(a, b) {
47928             var result = new Set(a);
47929             b.forEach(function(v) { result.add(v); });
47930             return Array.from(result);
47931         }
47932
47933         // Returns an Array with all the duplicates removed
47934         // var a = [1,1,2,3,3];
47935         // utilArrayUniq(a)
47936         //   [1,2,3]
47937         function utilArrayUniq(a) {
47938             return Array.from(new Set(a));
47939         }
47940
47941
47942         // Splits array into chunks of given chunk size
47943         // var a = [1,2,3,4,5,6,7];
47944         // utilArrayChunk(a, 3);
47945         //   [[1,2,3],[4,5,6],[7]];
47946         function utilArrayChunk(a, chunkSize) {
47947             if (!chunkSize || chunkSize < 0) { return [a.slice()]; }
47948
47949             var result = new Array(Math.ceil(a.length / chunkSize));
47950             return Array.from(result, function(item, i) {
47951                 return a.slice(i * chunkSize, i * chunkSize + chunkSize);
47952             });
47953         }
47954
47955
47956         // Flattens two level array into a single level
47957         // var a = [[1,2,3],[4,5,6],[7]];
47958         // utilArrayFlatten(a);
47959         //   [1,2,3,4,5,6,7];
47960         function utilArrayFlatten(a) {
47961             return a.reduce(function(acc, val) {
47962                 return acc.concat(val);
47963             }, []);
47964         }
47965
47966
47967         // Groups the items of the Array according to the given key
47968         // `key` can be passed as a property or as a key function
47969         //
47970         // var pets = [
47971         //     { type: 'Dog', name: 'Spot' },
47972         //     { type: 'Cat', name: 'Tiger' },
47973         //     { type: 'Dog', name: 'Rover' },
47974         //     { type: 'Cat', name: 'Leo' }
47975         // ];
47976         //
47977         // utilArrayGroupBy(pets, 'type')
47978         //   {
47979         //     'Dog': [{type: 'Dog', name: 'Spot'}, {type: 'Dog', name: 'Rover'}],
47980         //     'Cat': [{type: 'Cat', name: 'Tiger'}, {type: 'Cat', name: 'Leo'}]
47981         //   }
47982         //
47983         // utilArrayGroupBy(pets, function(item) { return item.name.length; })
47984         //   {
47985         //     3: [{type: 'Cat', name: 'Leo'}],
47986         //     4: [{type: 'Dog', name: 'Spot'}],
47987         //     5: [{type: 'Cat', name: 'Tiger'}, {type: 'Dog', name: 'Rover'}]
47988         //   }
47989         function utilArrayGroupBy(a, key) {
47990             return a.reduce(function(acc, item) {
47991                 var group = (typeof key === 'function') ? key(item) : item[key];
47992                 (acc[group] = acc[group] || []).push(item);
47993                 return acc;
47994             }, {});
47995         }
47996
47997
47998         // Returns an Array with all the duplicates removed
47999         // where uniqueness determined by the given key
48000         // `key` can be passed as a property or as a key function
48001         //
48002         // var pets = [
48003         //     { type: 'Dog', name: 'Spot' },
48004         //     { type: 'Cat', name: 'Tiger' },
48005         //     { type: 'Dog', name: 'Rover' },
48006         //     { type: 'Cat', name: 'Leo' }
48007         // ];
48008         //
48009         // utilArrayUniqBy(pets, 'type')
48010         //   [
48011         //     { type: 'Dog', name: 'Spot' },
48012         //     { type: 'Cat', name: 'Tiger' }
48013         //   ]
48014         //
48015         // utilArrayUniqBy(pets, function(item) { return item.name.length; })
48016         //   [
48017         //     { type: 'Dog', name: 'Spot' },
48018         //     { type: 'Cat', name: 'Tiger' },
48019         //     { type: 'Cat', name: 'Leo' }
48020         //   }
48021         function utilArrayUniqBy(a, key) {
48022             var seen = new Set();
48023             return a.reduce(function(acc, item) {
48024                 var val = (typeof key === 'function') ? key(item) : item[key];
48025                 if (val && !seen.has(val)) {
48026                     seen.add(val);
48027                     acc.push(item);
48028                 }
48029                 return acc;
48030             }, []);
48031         }
48032
48033         var remove$1 = removeDiacritics;
48034
48035         var replacementList = [
48036           {
48037             base: ' ',
48038             chars: "\u00A0",
48039           }, {
48040             base: '0',
48041             chars: "\u07C0",
48042           }, {
48043             base: 'A',
48044             chars: "\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F",
48045           }, {
48046             base: 'AA',
48047             chars: "\uA732",
48048           }, {
48049             base: 'AE',
48050             chars: "\u00C6\u01FC\u01E2",
48051           }, {
48052             base: 'AO',
48053             chars: "\uA734",
48054           }, {
48055             base: 'AU',
48056             chars: "\uA736",
48057           }, {
48058             base: 'AV',
48059             chars: "\uA738\uA73A",
48060           }, {
48061             base: 'AY',
48062             chars: "\uA73C",
48063           }, {
48064             base: 'B',
48065             chars: "\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0181",
48066           }, {
48067             base: 'C',
48068             chars: "\u24b8\uff23\uA73E\u1E08\u0106\u0043\u0108\u010A\u010C\u00C7\u0187\u023B",
48069           }, {
48070             base: 'D',
48071             chars: "\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018A\u0189\u1D05\uA779",
48072           }, {
48073             base: 'Dh',
48074             chars: "\u00D0",
48075           }, {
48076             base: 'DZ',
48077             chars: "\u01F1\u01C4",
48078           }, {
48079             base: 'Dz',
48080             chars: "\u01F2\u01C5",
48081           }, {
48082             base: 'E',
48083             chars: "\u025B\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E\u1D07",
48084           }, {
48085             base: 'F',
48086             chars: "\uA77C\u24BB\uFF26\u1E1E\u0191\uA77B",
48087           }, {
48088             base: 'G',
48089             chars: "\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E\u0262",
48090           }, {
48091             base: 'H',
48092             chars: "\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D",
48093           }, {
48094             base: 'I',
48095             chars: "\u24BE\uFF29\xCC\xCD\xCE\u0128\u012A\u012C\u0130\xCF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197",
48096           }, {
48097             base: 'J',
48098             chars: "\u24BF\uFF2A\u0134\u0248\u0237",
48099           }, {
48100             base: 'K',
48101             chars: "\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2",
48102           }, {
48103             base: 'L',
48104             chars: "\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780",
48105           }, {
48106             base: 'LJ',
48107             chars: "\u01C7",
48108           }, {
48109             base: 'Lj',
48110             chars: "\u01C8",
48111           }, {
48112             base: 'M',
48113             chars: "\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C\u03FB",
48114           }, {
48115             base: 'N',
48116             chars: "\uA7A4\u0220\u24C3\uFF2E\u01F8\u0143\xD1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u019D\uA790\u1D0E",
48117           }, {
48118             base: 'NJ',
48119             chars: "\u01CA",
48120           }, {
48121             base: 'Nj',
48122             chars: "\u01CB",
48123           }, {
48124             base: 'O',
48125             chars: "\u24C4\uFF2F\xD2\xD3\xD4\u1ED2\u1ED0\u1ED6\u1ED4\xD5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\xD6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\xD8\u01FE\u0186\u019F\uA74A\uA74C",
48126           }, {
48127             base: 'OE',
48128             chars: "\u0152",
48129           }, {
48130             base: 'OI',
48131             chars: "\u01A2",
48132           }, {
48133             base: 'OO',
48134             chars: "\uA74E",
48135           }, {
48136             base: 'OU',
48137             chars: "\u0222",
48138           }, {
48139             base: 'P',
48140             chars: "\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754",
48141           }, {
48142             base: 'Q',
48143             chars: "\u24C6\uFF31\uA756\uA758\u024A",
48144           }, {
48145             base: 'R',
48146             chars: "\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782",
48147           }, {
48148             base: 'S',
48149             chars: "\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784",
48150           }, {
48151             base: 'T',
48152             chars: "\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786",
48153           }, {
48154             base: 'Th',
48155             chars: "\u00DE",
48156           }, {
48157             base: 'TZ',
48158             chars: "\uA728",
48159           }, {
48160             base: 'U',
48161             chars: "\u24CA\uFF35\xD9\xDA\xDB\u0168\u1E78\u016A\u1E7A\u016C\xDC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244",
48162           }, {
48163             base: 'V',
48164             chars: "\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245",
48165           }, {
48166             base: 'VY',
48167             chars: "\uA760",
48168           }, {
48169             base: 'W',
48170             chars: "\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72",
48171           }, {
48172             base: 'X',
48173             chars: "\u24CD\uFF38\u1E8A\u1E8C",
48174           }, {
48175             base: 'Y',
48176             chars: "\u24CE\uFF39\u1EF2\xDD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE",
48177           }, {
48178             base: 'Z',
48179             chars: "\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762",
48180           }, {
48181             base: 'a',
48182             chars: "\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250\u0251",
48183           }, {
48184             base: 'aa',
48185             chars: "\uA733",
48186           }, {
48187             base: 'ae',
48188             chars: "\u00E6\u01FD\u01E3",
48189           }, {
48190             base: 'ao',
48191             chars: "\uA735",
48192           }, {
48193             base: 'au',
48194             chars: "\uA737",
48195           }, {
48196             base: 'av',
48197             chars: "\uA739\uA73B",
48198           }, {
48199             base: 'ay',
48200             chars: "\uA73D",
48201           }, {
48202             base: 'b',
48203             chars: "\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253\u0182",
48204           }, {
48205             base: 'c',
48206             chars: "\uFF43\u24D2\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184",
48207           }, {
48208             base: 'd',
48209             chars: "\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\u018B\u13E7\u0501\uA7AA",
48210           }, {
48211             base: 'dh',
48212             chars: "\u00F0",
48213           }, {
48214             base: 'dz',
48215             chars: "\u01F3\u01C6",
48216           }, {
48217             base: 'e',
48218             chars: "\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u01DD",
48219           }, {
48220             base: 'f',
48221             chars: "\u24D5\uFF46\u1E1F\u0192",
48222           }, {
48223             base: 'ff',
48224             chars: "\uFB00",
48225           }, {
48226             base: 'fi',
48227             chars: "\uFB01",
48228           }, {
48229             base: 'fl',
48230             chars: "\uFB02",
48231           }, {
48232             base: 'ffi',
48233             chars: "\uFB03",
48234           }, {
48235             base: 'ffl',
48236             chars: "\uFB04",
48237           }, {
48238             base: 'g',
48239             chars: "\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\uA77F\u1D79",
48240           }, {
48241             base: 'h',
48242             chars: "\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265",
48243           }, {
48244             base: 'hv',
48245             chars: "\u0195",
48246           }, {
48247             base: 'i',
48248             chars: "\u24D8\uFF49\xEC\xED\xEE\u0129\u012B\u012D\xEF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131",
48249           }, {
48250             base: 'j',
48251             chars: "\u24D9\uFF4A\u0135\u01F0\u0249",
48252           }, {
48253             base: 'k',
48254             chars: "\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3",
48255           }, {
48256             base: 'l',
48257             chars: "\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747\u026D",
48258           }, {
48259             base: 'lj',
48260             chars: "\u01C9",
48261           }, {
48262             base: 'm',
48263             chars: "\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F",
48264           }, {
48265             base: 'n',
48266             chars: "\u24DD\uFF4E\u01F9\u0144\xF1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5\u043B\u0509",
48267           }, {
48268             base: 'nj',
48269             chars: "\u01CC",
48270           }, {
48271             base: 'o',
48272             chars: "\u24DE\uFF4F\xF2\xF3\xF4\u1ED3\u1ED1\u1ED7\u1ED5\xF5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\xF6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\xF8\u01FF\uA74B\uA74D\u0275\u0254\u1D11",
48273           }, {
48274             base: 'oe',
48275             chars: "\u0153",
48276           }, {
48277             base: 'oi',
48278             chars: "\u01A3",
48279           }, {
48280             base: 'oo',
48281             chars: "\uA74F",
48282           }, {
48283             base: 'ou',
48284             chars: "\u0223",
48285           }, {
48286             base: 'p',
48287             chars: "\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755\u03C1",
48288           }, {
48289             base: 'q',
48290             chars: "\u24E0\uFF51\u024B\uA757\uA759",
48291           }, {
48292             base: 'r',
48293             chars: "\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783",
48294           }, {
48295             base: 's',
48296             chars: "\u24E2\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B\u0282",
48297           }, {
48298             base: 'ss',
48299             chars: "\xDF",
48300           }, {
48301             base: 't',
48302             chars: "\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787",
48303           }, {
48304             base: 'th',
48305             chars: "\u00FE",
48306           }, {
48307             base: 'tz',
48308             chars: "\uA729",
48309           }, {
48310             base: 'u',
48311             chars: "\u24E4\uFF55\xF9\xFA\xFB\u0169\u1E79\u016B\u1E7B\u016D\xFC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289",
48312           }, {
48313             base: 'v',
48314             chars: "\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C",
48315           }, {
48316             base: 'vy',
48317             chars: "\uA761",
48318           }, {
48319             base: 'w',
48320             chars: "\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73",
48321           }, {
48322             base: 'x',
48323             chars: "\u24E7\uFF58\u1E8B\u1E8D",
48324           }, {
48325             base: 'y',
48326             chars: "\u24E8\uFF59\u1EF3\xFD\u0177\u1EF9\u0233\u1E8F\xFF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF",
48327           }, {
48328             base: 'z',
48329             chars: "\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763",
48330           }
48331         ];
48332
48333         var diacriticsMap = {};
48334         for (var i$1 = 0; i$1 < replacementList.length; i$1 += 1) {
48335           var chars = replacementList[i$1].chars;
48336           for (var j = 0; j < chars.length; j += 1) {
48337             diacriticsMap[chars[j]] = replacementList[i$1].base;
48338           }
48339         }
48340
48341         function removeDiacritics(str) {
48342           return str.replace(/[^\u0000-\u007e]/g, function(c) {
48343             return diacriticsMap[c] || c;
48344           });
48345         }
48346
48347         var replacementList_1 = replacementList;
48348         var diacriticsMap_1 = diacriticsMap;
48349
48350         var diacritics = {
48351                 remove: remove$1,
48352                 replacementList: replacementList_1,
48353                 diacriticsMap: diacriticsMap_1
48354         };
48355
48356         var isArabic_1 = createCommonjsModule(function (module, exports) {
48357         Object.defineProperty(exports, "__esModule", { value: true });
48358         var arabicBlocks = [
48359             [0x0600, 0x06FF],
48360             [0x0750, 0x077F],
48361             [0x08A0, 0x08FF],
48362             [0xFB50, 0xFDFF],
48363             [0xFE70, 0xFEFF],
48364             [0x10E60, 0x10E7F],
48365             [0x1EC70, 0x1ECBF],
48366             [0x1EE00, 0x1EEFF] // Mathematical Alphabetic symbols https://www.unicode.org/charts/PDF/U1EE00.pdf
48367         ];
48368         function isArabic(char) {
48369             if (char.length > 1) {
48370                 // allow the newer chars?
48371                 throw new Error('isArabic works on only one-character strings');
48372             }
48373             var code = char.charCodeAt(0);
48374             for (var i = 0; i < arabicBlocks.length; i++) {
48375                 var block = arabicBlocks[i];
48376                 if (code >= block[0] && code <= block[1]) {
48377                     return true;
48378                 }
48379             }
48380             return false;
48381         }
48382         exports.isArabic = isArabic;
48383         function isMath(char) {
48384             if (char.length > 2) {
48385                 // allow the newer chars?
48386                 throw new Error('isMath works on only one-character strings');
48387             }
48388             var code = char.charCodeAt(0);
48389             return ((code >= 0x660 && code <= 0x66C) || (code >= 0x6F0 && code <= 0x6F9));
48390         }
48391         exports.isMath = isMath;
48392         });
48393
48394         unwrapExports(isArabic_1);
48395         var isArabic_2 = isArabic_1.isArabic;
48396         var isArabic_3 = isArabic_1.isMath;
48397
48398         var unicodeArabic = createCommonjsModule(function (module, exports) {
48399         Object.defineProperty(exports, "__esModule", { value: true });
48400         var arabicReference = {
48401             "alef": {
48402                 "normal": [
48403                     "\u0627"
48404                 ],
48405                 "madda_above": {
48406                     "normal": [
48407                         "\u0627\u0653",
48408                         "\u0622"
48409                     ],
48410                     "isolated": "\uFE81",
48411                     "final": "\uFE82"
48412                 },
48413                 "hamza_above": {
48414                     "normal": [
48415                         "\u0627\u0654",
48416                         "\u0623"
48417                     ],
48418                     "isolated": "\uFE83",
48419                     "final": "\uFE84"
48420                 },
48421                 "hamza_below": {
48422                     "normal": [
48423                         "\u0627\u0655",
48424                         "\u0625"
48425                     ],
48426                     "isolated": "\uFE87",
48427                     "final": "\uFE88"
48428                 },
48429                 "wasla": {
48430                     "normal": "\u0671",
48431                     "isolated": "\uFB50",
48432                     "final": "\uFB51"
48433                 },
48434                 "wavy_hamza_above": [
48435                     "\u0672"
48436                 ],
48437                 "wavy_hamza_below": [
48438                     "\u0627\u065F",
48439                     "\u0673"
48440                 ],
48441                 "high_hamza": [
48442                     "\u0675",
48443                     "\u0627\u0674"
48444                 ],
48445                 "indic_two_above": [
48446                     "\u0773"
48447                 ],
48448                 "indic_three_above": [
48449                     "\u0774"
48450                 ],
48451                 "fathatan": {
48452                     "normal": [
48453                         "\u0627\u064B"
48454                     ],
48455                     "final": "\uFD3C",
48456                     "isolated": "\uFD3D"
48457                 },
48458                 "isolated": "\uFE8D",
48459                 "final": "\uFE8E"
48460             },
48461             "beh": {
48462                 "normal": [
48463                     "\u0628"
48464                 ],
48465                 "dotless": [
48466                     "\u066E"
48467                 ],
48468                 "three_dots_horizontally_below": [
48469                     "\u0750"
48470                 ],
48471                 "dot_below_three_dots_above": [
48472                     "\u0751"
48473                 ],
48474                 "three_dots_pointing_upwards_below": [
48475                     "\u0752"
48476                 ],
48477                 "three_dots_pointing_upwards_below_two_dots_above": [
48478                     "\u0753"
48479                 ],
48480                 "two_dots_below_dot_above": [
48481                     "\u0754"
48482                 ],
48483                 "inverted_small_v_below": [
48484                     "\u0755"
48485                 ],
48486                 "small_v": [
48487                     "\u0756"
48488                 ],
48489                 "small_v_below": [
48490                     "\u08A0"
48491                 ],
48492                 "hamza_above": [
48493                     "\u08A1"
48494                 ],
48495                 "small_meem_above": [
48496                     "\u08B6"
48497                 ],
48498                 "isolated": "\uFE8F",
48499                 "final": "\uFE90",
48500                 "initial": "\uFE91",
48501                 "medial": "\uFE92"
48502             },
48503             "teh marbuta": {
48504                 "normal": [
48505                     "\u0629"
48506                 ],
48507                 "isolated": "\uFE93",
48508                 "final": "\uFE94"
48509             },
48510             "teh": {
48511                 "normal": [
48512                     "\u062A"
48513                 ],
48514                 "ring": [
48515                     "\u067C"
48516                 ],
48517                 "three_dots_above_downwards": [
48518                     "\u067D"
48519                 ],
48520                 "small_teh_above": [
48521                     "\u08B8"
48522                 ],
48523                 "isolated": "\uFE95",
48524                 "final": "\uFE96",
48525                 "initial": "\uFE97",
48526                 "medial": "\uFE98"
48527             },
48528             "theh": {
48529                 "normal": [
48530                     "\u062B"
48531                 ],
48532                 "isolated": "\uFE99",
48533                 "final": "\uFE9A",
48534                 "initial": "\uFE9B",
48535                 "medial": "\uFE9C"
48536             },
48537             "jeem": {
48538                 "normal": [
48539                     "\u062C"
48540                 ],
48541                 "two_dots_above": [
48542                     "\u08A2"
48543                 ],
48544                 "isolated": "\uFE9D",
48545                 "final": "\uFE9E",
48546                 "initial": "\uFE9F",
48547                 "medial": "\uFEA0"
48548             },
48549             "hah": {
48550                 "normal": [
48551                     "\u062D"
48552                 ],
48553                 "hamza_above": [
48554                     "\u0681"
48555                 ],
48556                 "two_dots_vertical_above": [
48557                     "\u0682"
48558                 ],
48559                 "three_dots_above": [
48560                     "\u0685"
48561                 ],
48562                 "two_dots_above": [
48563                     "\u0757"
48564                 ],
48565                 "three_dots_pointing_upwards_below": [
48566                     "\u0758"
48567                 ],
48568                 "small_tah_below": [
48569                     "\u076E"
48570                 ],
48571                 "small_tah_two_dots": [
48572                     "\u076F"
48573                 ],
48574                 "small_tah_above": [
48575                     "\u0772"
48576                 ],
48577                 "indic_four_below": [
48578                     "\u077C"
48579                 ],
48580                 "isolated": "\uFEA1",
48581                 "final": "\uFEA2",
48582                 "initial": "\uFEA3",
48583                 "medial": "\uFEA4"
48584             },
48585             "khah": {
48586                 "normal": [
48587                     "\u062E"
48588                 ],
48589                 "isolated": "\uFEA5",
48590                 "final": "\uFEA6",
48591                 "initial": "\uFEA7",
48592                 "medial": "\uFEA8"
48593             },
48594             "dal": {
48595                 "normal": [
48596                     "\u062F"
48597                 ],
48598                 "ring": [
48599                     "\u0689"
48600                 ],
48601                 "dot_below": [
48602                     "\u068A"
48603                 ],
48604                 "dot_below_small_tah": [
48605                     "\u068B"
48606                 ],
48607                 "three_dots_above_downwards": [
48608                     "\u068F"
48609                 ],
48610                 "four_dots_above": [
48611                     "\u0690"
48612                 ],
48613                 "inverted_v": [
48614                     "\u06EE"
48615                 ],
48616                 "two_dots_vertically_below_small_tah": [
48617                     "\u0759"
48618                 ],
48619                 "inverted_small_v_below": [
48620                     "\u075A"
48621                 ],
48622                 "three_dots_below": [
48623                     "\u08AE"
48624                 ],
48625                 "isolated": "\uFEA9",
48626                 "final": "\uFEAA"
48627             },
48628             "thal": {
48629                 "normal": [
48630                     "\u0630"
48631                 ],
48632                 "isolated": "\uFEAB",
48633                 "final": "\uFEAC"
48634             },
48635             "reh": {
48636                 "normal": [
48637                     "\u0631"
48638                 ],
48639                 "small_v": [
48640                     "\u0692"
48641                 ],
48642                 "ring": [
48643                     "\u0693"
48644                 ],
48645                 "dot_below": [
48646                     "\u0694"
48647                 ],
48648                 "small_v_below": [
48649                     "\u0695"
48650                 ],
48651                 "dot_below_dot_above": [
48652                     "\u0696"
48653                 ],
48654                 "two_dots_above": [
48655                     "\u0697"
48656                 ],
48657                 "four_dots_above": [
48658                     "\u0699"
48659                 ],
48660                 "inverted_v": [
48661                     "\u06EF"
48662                 ],
48663                 "stroke": [
48664                     "\u075B"
48665                 ],
48666                 "two_dots_vertically_above": [
48667                     "\u076B"
48668                 ],
48669                 "hamza_above": [
48670                     "\u076C"
48671                 ],
48672                 "small_tah_two_dots": [
48673                     "\u0771"
48674                 ],
48675                 "loop": [
48676                     "\u08AA"
48677                 ],
48678                 "small_noon_above": [
48679                     "\u08B9"
48680                 ],
48681                 "isolated": "\uFEAD",
48682                 "final": "\uFEAE"
48683             },
48684             "zain": {
48685                 "normal": [
48686                     "\u0632"
48687                 ],
48688                 "inverted_v_above": [
48689                     "\u08B2"
48690                 ],
48691                 "isolated": "\uFEAF",
48692                 "final": "\uFEB0"
48693             },
48694             "seen": {
48695                 "normal": [
48696                     "\u0633"
48697                 ],
48698                 "dot_below_dot_above": [
48699                     "\u069A"
48700                 ],
48701                 "three_dots_below": [
48702                     "\u069B"
48703                 ],
48704                 "three_dots_below_three_dots_above": [
48705                     "\u069C"
48706                 ],
48707                 "four_dots_above": [
48708                     "\u075C"
48709                 ],
48710                 "two_dots_vertically_above": [
48711                     "\u076D"
48712                 ],
48713                 "small_tah_two_dots": [
48714                     "\u0770"
48715                 ],
48716                 "indic_four_above": [
48717                     "\u077D"
48718                 ],
48719                 "inverted_v": [
48720                     "\u077E"
48721                 ],
48722                 "isolated": "\uFEB1",
48723                 "final": "\uFEB2",
48724                 "initial": "\uFEB3",
48725                 "medial": "\uFEB4"
48726             },
48727             "sheen": {
48728                 "normal": [
48729                     "\u0634"
48730                 ],
48731                 "dot_below": [
48732                     "\u06FA"
48733                 ],
48734                 "isolated": "\uFEB5",
48735                 "final": "\uFEB6",
48736                 "initial": "\uFEB7",
48737                 "medial": "\uFEB8"
48738             },
48739             "sad": {
48740                 "normal": [
48741                     "\u0635"
48742                 ],
48743                 "two_dots_below": [
48744                     "\u069D"
48745                 ],
48746                 "three_dots_above": [
48747                     "\u069E"
48748                 ],
48749                 "three_dots_below": [
48750                     "\u08AF"
48751                 ],
48752                 "isolated": "\uFEB9",
48753                 "final": "\uFEBA",
48754                 "initial": "\uFEBB",
48755                 "medial": "\uFEBC"
48756             },
48757             "dad": {
48758                 "normal": [
48759                     "\u0636"
48760                 ],
48761                 "dot_below": [
48762                     "\u06FB"
48763                 ],
48764                 "isolated": "\uFEBD",
48765                 "final": "\uFEBE",
48766                 "initial": "\uFEBF",
48767                 "medial": "\uFEC0"
48768             },
48769             "tah": {
48770                 "normal": [
48771                     "\u0637"
48772                 ],
48773                 "three_dots_above": [
48774                     "\u069F"
48775                 ],
48776                 "two_dots_above": [
48777                     "\u08A3"
48778                 ],
48779                 "isolated": "\uFEC1",
48780                 "final": "\uFEC2",
48781                 "initial": "\uFEC3",
48782                 "medial": "\uFEC4"
48783             },
48784             "zah": {
48785                 "normal": [
48786                     "\u0638"
48787                 ],
48788                 "isolated": "\uFEC5",
48789                 "final": "\uFEC6",
48790                 "initial": "\uFEC7",
48791                 "medial": "\uFEC8"
48792             },
48793             "ain": {
48794                 "normal": [
48795                     "\u0639"
48796                 ],
48797                 "three_dots_above": [
48798                     "\u06A0"
48799                 ],
48800                 "two_dots_above": [
48801                     "\u075D"
48802                 ],
48803                 "three_dots_pointing_downwards_above": [
48804                     "\u075E"
48805                 ],
48806                 "two_dots_vertically_above": [
48807                     "\u075F"
48808                 ],
48809                 "three_dots_below": [
48810                     "\u08B3"
48811                 ],
48812                 "isolated": "\uFEC9",
48813                 "final": "\uFECA",
48814                 "initial": "\uFECB",
48815                 "medial": "\uFECC"
48816             },
48817             "ghain": {
48818                 "normal": [
48819                     "\u063A"
48820                 ],
48821                 "dot_below": [
48822                     "\u06FC"
48823                 ],
48824                 "isolated": "\uFECD",
48825                 "final": "\uFECE",
48826                 "initial": "\uFECF",
48827                 "medial": "\uFED0"
48828             },
48829             "feh": {
48830                 "normal": [
48831                     "\u0641"
48832                 ],
48833                 "dotless": [
48834                     "\u06A1"
48835                 ],
48836                 "dot_moved_below": [
48837                     "\u06A2"
48838                 ],
48839                 "dot_below": [
48840                     "\u06A3"
48841                 ],
48842                 "three_dots_below": [
48843                     "\u06A5"
48844                 ],
48845                 "two_dots_below": [
48846                     "\u0760"
48847                 ],
48848                 "three_dots_pointing_upwards_below": [
48849                     "\u0761"
48850                 ],
48851                 "dot_below_three_dots_above": [
48852                     "\u08A4"
48853                 ],
48854                 "isolated": "\uFED1",
48855                 "final": "\uFED2",
48856                 "initial": "\uFED3",
48857                 "medial": "\uFED4"
48858             },
48859             "qaf": {
48860                 "normal": [
48861                     "\u0642"
48862                 ],
48863                 "dotless": [
48864                     "\u066F"
48865                 ],
48866                 "dot_above": [
48867                     "\u06A7"
48868                 ],
48869                 "three_dots_above": [
48870                     "\u06A8"
48871                 ],
48872                 "dot_below": [
48873                     "\u08A5"
48874                 ],
48875                 "isolated": "\uFED5",
48876                 "final": "\uFED6",
48877                 "initial": "\uFED7",
48878                 "medial": "\uFED8"
48879             },
48880             "kaf": {
48881                 "normal": [
48882                     "\u0643"
48883                 ],
48884                 "swash": [
48885                     "\u06AA"
48886                 ],
48887                 "ring": [
48888                     "\u06AB"
48889                 ],
48890                 "dot_above": [
48891                     "\u06AC"
48892                 ],
48893                 "three_dots_below": [
48894                     "\u06AE"
48895                 ],
48896                 "two_dots_above": [
48897                     "\u077F"
48898                 ],
48899                 "dot_below": [
48900                     "\u08B4"
48901                 ],
48902                 "isolated": "\uFED9",
48903                 "final": "\uFEDA",
48904                 "initial": "\uFEDB",
48905                 "medial": "\uFEDC"
48906             },
48907             "lam": {
48908                 "normal": [
48909                     "\u0644"
48910                 ],
48911                 "small_v": [
48912                     "\u06B5"
48913                 ],
48914                 "dot_above": [
48915                     "\u06B6"
48916                 ],
48917                 "three_dots_above": [
48918                     "\u06B7"
48919                 ],
48920                 "three_dots_below": [
48921                     "\u06B8"
48922                 ],
48923                 "bar": [
48924                     "\u076A"
48925                 ],
48926                 "double_bar": [
48927                     "\u08A6"
48928                 ],
48929                 "isolated": "\uFEDD",
48930                 "final": "\uFEDE",
48931                 "initial": "\uFEDF",
48932                 "medial": "\uFEE0"
48933             },
48934             "meem": {
48935                 "normal": [
48936                     "\u0645"
48937                 ],
48938                 "dot_above": [
48939                     "\u0765"
48940                 ],
48941                 "dot_below": [
48942                     "\u0766"
48943                 ],
48944                 "three_dots_above": [
48945                     "\u08A7"
48946                 ],
48947                 "isolated": "\uFEE1",
48948                 "final": "\uFEE2",
48949                 "initial": "\uFEE3",
48950                 "medial": "\uFEE4"
48951             },
48952             "noon": {
48953                 "normal": [
48954                     "\u0646"
48955                 ],
48956                 "dot_below": [
48957                     "\u06B9"
48958                 ],
48959                 "ring": [
48960                     "\u06BC"
48961                 ],
48962                 "three_dots_above": [
48963                     "\u06BD"
48964                 ],
48965                 "two_dots_below": [
48966                     "\u0767"
48967                 ],
48968                 "small_tah": [
48969                     "\u0768"
48970                 ],
48971                 "small_v": [
48972                     "\u0769"
48973                 ],
48974                 "isolated": "\uFEE5",
48975                 "final": "\uFEE6",
48976                 "initial": "\uFEE7",
48977                 "medial": "\uFEE8"
48978             },
48979             "heh": {
48980                 "normal": [
48981                     "\u0647"
48982                 ],
48983                 "isolated": "\uFEE9",
48984                 "final": "\uFEEA",
48985                 "initial": "\uFEEB",
48986                 "medial": "\uFEEC"
48987             },
48988             "waw": {
48989                 "normal": [
48990                     "\u0648"
48991                 ],
48992                 "hamza_above": {
48993                     "normal": [
48994                         "\u0624",
48995                         "\u0648\u0654"
48996                     ],
48997                     "isolated": "\uFE85",
48998                     "final": "\uFE86"
48999                 },
49000                 "high_hamza": [
49001                     "\u0676",
49002                     "\u0648\u0674"
49003                 ],
49004                 "ring": [
49005                     "\u06C4"
49006                 ],
49007                 "two_dots_above": [
49008                     "\u06CA"
49009                 ],
49010                 "dot_above": [
49011                     "\u06CF"
49012                 ],
49013                 "indic_two_above": [
49014                     "\u0778"
49015                 ],
49016                 "indic_three_above": [
49017                     "\u0779"
49018                 ],
49019                 "dot_within": [
49020                     "\u08AB"
49021                 ],
49022                 "isolated": "\uFEED",
49023                 "final": "\uFEEE"
49024             },
49025             "alef_maksura": {
49026                 "normal": [
49027                     "\u0649"
49028                 ],
49029                 "hamza_above": [
49030                     "\u0626",
49031                     "\u064A\u0654"
49032                 ],
49033                 "initial": "\uFBE8",
49034                 "medial": "\uFBE9",
49035                 "isolated": "\uFEEF",
49036                 "final": "\uFEF0"
49037             },
49038             "yeh": {
49039                 "normal": [
49040                     "\u064A"
49041                 ],
49042                 "hamza_above": {
49043                     "normal": [
49044                         "\u0626",
49045                         "\u0649\u0654"
49046                     ],
49047                     "isolated": "\uFE89",
49048                     "final": "\uFE8A",
49049                     "initial": "\uFE8B",
49050                     "medial": "\uFE8C"
49051                 },
49052                 "two_dots_below_hamza_above": [
49053                     "\u08A8"
49054                 ],
49055                 "high_hamza": [
49056                     "\u0678",
49057                     "\u064A\u0674"
49058                 ],
49059                 "tail": [
49060                     "\u06CD"
49061                 ],
49062                 "small_v": [
49063                     "\u06CE"
49064                 ],
49065                 "three_dots_below": [
49066                     "\u06D1"
49067                 ],
49068                 "two_dots_below_dot_above": [
49069                     "\u08A9"
49070                 ],
49071                 "two_dots_below_small_noon_above": [
49072                     "\u08BA"
49073                 ],
49074                 "isolated": "\uFEF1",
49075                 "final": "\uFEF2",
49076                 "initial": "\uFEF3",
49077                 "medial": "\uFEF4"
49078             },
49079             "tteh": {
49080                 "normal": [
49081                     "\u0679"
49082                 ],
49083                 "isolated": "\uFB66",
49084                 "final": "\uFB67",
49085                 "initial": "\uFB68",
49086                 "medial": "\uFB69"
49087             },
49088             "tteheh": {
49089                 "normal": [
49090                     "\u067A"
49091                 ],
49092                 "isolated": "\uFB5E",
49093                 "final": "\uFB5F",
49094                 "initial": "\uFB60",
49095                 "medial": "\uFB61"
49096             },
49097             "beeh": {
49098                 "normal": [
49099                     "\u067B"
49100                 ],
49101                 "isolated": "\uFB52",
49102                 "final": "\uFB53",
49103                 "initial": "\uFB54",
49104                 "medial": "\uFB55"
49105             },
49106             "peh": {
49107                 "normal": [
49108                     "\u067E"
49109                 ],
49110                 "small_meem_above": [
49111                     "\u08B7"
49112                 ],
49113                 "isolated": "\uFB56",
49114                 "final": "\uFB57",
49115                 "initial": "\uFB58",
49116                 "medial": "\uFB59"
49117             },
49118             "teheh": {
49119                 "normal": [
49120                     "\u067F"
49121                 ],
49122                 "isolated": "\uFB62",
49123                 "final": "\uFB63",
49124                 "initial": "\uFB64",
49125                 "medial": "\uFB65"
49126             },
49127             "beheh": {
49128                 "normal": [
49129                     "\u0680"
49130                 ],
49131                 "isolated": "\uFB5A",
49132                 "final": "\uFB5B",
49133                 "initial": "\uFB5C",
49134                 "medial": "\uFB5D"
49135             },
49136             "nyeh": {
49137                 "normal": [
49138                     "\u0683"
49139                 ],
49140                 "isolated": "\uFB76",
49141                 "final": "\uFB77",
49142                 "initial": "\uFB78",
49143                 "medial": "\uFB79"
49144             },
49145             "dyeh": {
49146                 "normal": [
49147                     "\u0684"
49148                 ],
49149                 "isolated": "\uFB72",
49150                 "final": "\uFB73",
49151                 "initial": "\uFB74",
49152                 "medial": "\uFB75"
49153             },
49154             "tcheh": {
49155                 "normal": [
49156                     "\u0686"
49157                 ],
49158                 "dot_above": [
49159                     "\u06BF"
49160                 ],
49161                 "isolated": "\uFB7A",
49162                 "final": "\uFB7B",
49163                 "initial": "\uFB7C",
49164                 "medial": "\uFB7D"
49165             },
49166             "tcheheh": {
49167                 "normal": [
49168                     "\u0687"
49169                 ],
49170                 "isolated": "\uFB7E",
49171                 "final": "\uFB7F",
49172                 "initial": "\uFB80",
49173                 "medial": "\uFB81"
49174             },
49175             "ddal": {
49176                 "normal": [
49177                     "\u0688"
49178                 ],
49179                 "isolated": "\uFB88",
49180                 "final": "\uFB89"
49181             },
49182             "dahal": {
49183                 "normal": [
49184                     "\u068C"
49185                 ],
49186                 "isolated": "\uFB84",
49187                 "final": "\uFB85"
49188             },
49189             "ddahal": {
49190                 "normal": [
49191                     "\u068D"
49192                 ],
49193                 "isolated": "\uFB82",
49194                 "final": "\uFB83"
49195             },
49196             "dul": {
49197                 "normal": [
49198                     "\u068F",
49199                     "\u068E"
49200                 ],
49201                 "isolated": "\uFB86",
49202                 "final": "\uFB87"
49203             },
49204             "rreh": {
49205                 "normal": [
49206                     "\u0691"
49207                 ],
49208                 "isolated": "\uFB8C",
49209                 "final": "\uFB8D"
49210             },
49211             "jeh": {
49212                 "normal": [
49213                     "\u0698"
49214                 ],
49215                 "isolated": "\uFB8A",
49216                 "final": "\uFB8B"
49217             },
49218             "veh": {
49219                 "normal": [
49220                     "\u06A4"
49221                 ],
49222                 "isolated": "\uFB6A",
49223                 "final": "\uFB6B",
49224                 "initial": "\uFB6C",
49225                 "medial": "\uFB6D"
49226             },
49227             "peheh": {
49228                 "normal": [
49229                     "\u06A6"
49230                 ],
49231                 "isolated": "\uFB6E",
49232                 "final": "\uFB6F",
49233                 "initial": "\uFB70",
49234                 "medial": "\uFB71"
49235             },
49236             "keheh": {
49237                 "normal": [
49238                     "\u06A9"
49239                 ],
49240                 "dot_above": [
49241                     "\u0762"
49242                 ],
49243                 "three_dots_above": [
49244                     "\u0763"
49245                 ],
49246                 "three_dots_pointing_upwards_below": [
49247                     "\u0764"
49248                 ],
49249                 "isolated": "\uFB8E",
49250                 "final": "\uFB8F",
49251                 "initial": "\uFB90",
49252                 "medial": "\uFB91"
49253             },
49254             "ng": {
49255                 "normal": [
49256                     "\u06AD"
49257                 ],
49258                 "isolated": "\uFBD3",
49259                 "final": "\uFBD4",
49260                 "initial": "\uFBD5",
49261                 "medial": "\uFBD6"
49262             },
49263             "gaf": {
49264                 "normal": [
49265                     "\u06AF"
49266                 ],
49267                 "ring": [
49268                     "\u06B0"
49269                 ],
49270                 "two_dots_below": [
49271                     "\u06B2"
49272                 ],
49273                 "three_dots_above": [
49274                     "\u06B4"
49275                 ],
49276                 "inverted_stroke": [
49277                     "\u08B0"
49278                 ],
49279                 "isolated": "\uFB92",
49280                 "final": "\uFB93",
49281                 "initial": "\uFB94",
49282                 "medial": "\uFB95"
49283             },
49284             "ngoeh": {
49285                 "normal": [
49286                     "\u06B1"
49287                 ],
49288                 "isolated": "\uFB9A",
49289                 "final": "\uFB9B",
49290                 "initial": "\uFB9C",
49291                 "medial": "\uFB9D"
49292             },
49293             "gueh": {
49294                 "normal": [
49295                     "\u06B3"
49296                 ],
49297                 "isolated": "\uFB96",
49298                 "final": "\uFB97",
49299                 "initial": "\uFB98",
49300                 "medial": "\uFB99"
49301             },
49302             "noon ghunna": {
49303                 "normal": [
49304                     "\u06BA"
49305                 ],
49306                 "isolated": "\uFB9E",
49307                 "final": "\uFB9F"
49308             },
49309             "rnoon": {
49310                 "normal": [
49311                     "\u06BB"
49312                 ],
49313                 "isolated": "\uFBA0",
49314                 "final": "\uFBA1",
49315                 "initial": "\uFBA2",
49316                 "medial": "\uFBA3"
49317             },
49318             "heh doachashmee": {
49319                 "normal": [
49320                     "\u06BE"
49321                 ],
49322                 "isolated": "\uFBAA",
49323                 "final": "\uFBAB",
49324                 "initial": "\uFBAC",
49325                 "medial": "\uFBAD"
49326             },
49327             "heh goal": {
49328                 "normal": [
49329                     "\u06C1"
49330                 ],
49331                 "hamza_above": [
49332                     "\u06C1\u0654",
49333                     "\u06C2"
49334                 ],
49335                 "isolated": "\uFBA6",
49336                 "final": "\uFBA7",
49337                 "initial": "\uFBA8",
49338                 "medial": "\uFBA9"
49339             },
49340             "teh marbuta goal": {
49341                 "normal": [
49342                     "\u06C3"
49343                 ]
49344             },
49345             "kirghiz oe": {
49346                 "normal": [
49347                     "\u06C5"
49348                 ],
49349                 "isolated": "\uFBE0",
49350                 "final": "\uFBE1"
49351             },
49352             "oe": {
49353                 "normal": [
49354                     "\u06C6"
49355                 ],
49356                 "isolated": "\uFBD9",
49357                 "final": "\uFBDA"
49358             },
49359             "u": {
49360                 "normal": [
49361                     "\u06C7"
49362                 ],
49363                 "hamza_above": {
49364                     "normal": [
49365                         "\u0677",
49366                         "\u06C7\u0674"
49367                     ],
49368                     "isolated": "\uFBDD"
49369                 },
49370                 "isolated": "\uFBD7",
49371                 "final": "\uFBD8"
49372             },
49373             "yu": {
49374                 "normal": [
49375                     "\u06C8"
49376                 ],
49377                 "isolated": "\uFBDB",
49378                 "final": "\uFBDC"
49379             },
49380             "kirghiz yu": {
49381                 "normal": [
49382                     "\u06C9"
49383                 ],
49384                 "isolated": "\uFBE2",
49385                 "final": "\uFBE3"
49386             },
49387             "ve": {
49388                 "normal": [
49389                     "\u06CB"
49390                 ],
49391                 "isolated": "\uFBDE",
49392                 "final": "\uFBDF"
49393             },
49394             "farsi yeh": {
49395                 "normal": [
49396                     "\u06CC"
49397                 ],
49398                 "indic_two_above": [
49399                     "\u0775"
49400                 ],
49401                 "indic_three_above": [
49402                     "\u0776"
49403                 ],
49404                 "indic_four_above": [
49405                     "\u0777"
49406                 ],
49407                 "isolated": "\uFBFC",
49408                 "final": "\uFBFD",
49409                 "initial": "\uFBFE",
49410                 "medial": "\uFBFF"
49411             },
49412             "e": {
49413                 "normal": [
49414                     "\u06D0"
49415                 ],
49416                 "isolated": "\uFBE4",
49417                 "final": "\uFBE5",
49418                 "initial": "\uFBE6",
49419                 "medial": "\uFBE7"
49420             },
49421             "yeh barree": {
49422                 "normal": [
49423                     "\u06D2"
49424                 ],
49425                 "hamza_above": {
49426                     "normal": [
49427                         "\u06D2\u0654",
49428                         "\u06D3"
49429                     ],
49430                     "isolated": "\uFBB0",
49431                     "final": "\uFBB1"
49432                 },
49433                 "indic_two_above": [
49434                     "\u077A"
49435                 ],
49436                 "indic_three_above": [
49437                     "\u077B"
49438                 ],
49439                 "isolated": "\uFBAE",
49440                 "final": "\uFBAF"
49441             },
49442             "ae": {
49443                 "normal": [
49444                     "\u06D5"
49445                 ],
49446                 "isolated": "\u06D5",
49447                 "final": "\uFEEA",
49448                 "yeh_above": {
49449                     "normal": [
49450                         "\u06C0",
49451                         "\u06D5\u0654"
49452                     ],
49453                     "isolated": "\uFBA4",
49454                     "final": "\uFBA5"
49455                 }
49456             },
49457             "rohingya yeh": {
49458                 "normal": [
49459                     "\u08AC"
49460                 ]
49461             },
49462             "low alef": {
49463                 "normal": [
49464                     "\u08AD"
49465                 ]
49466             },
49467             "straight waw": {
49468                 "normal": [
49469                     "\u08B1"
49470                 ]
49471             },
49472             "african feh": {
49473                 "normal": [
49474                     "\u08BB"
49475                 ]
49476             },
49477             "african qaf": {
49478                 "normal": [
49479                     "\u08BC"
49480                 ]
49481             },
49482             "african noon": {
49483                 "normal": [
49484                     "\u08BD"
49485                 ]
49486             }
49487         };
49488         exports.default = arabicReference;
49489         });
49490
49491         unwrapExports(unicodeArabic);
49492
49493         var unicodeLigatures = createCommonjsModule(function (module, exports) {
49494         Object.defineProperty(exports, "__esModule", { value: true });
49495         var ligatureReference = {
49496             "\u0626\u0627": {
49497                 "isolated": "\uFBEA",
49498                 "final": "\uFBEB"
49499             },
49500             "\u0626\u06D5": {
49501                 "isolated": "\uFBEC",
49502                 "final": "\uFBED"
49503             },
49504             "\u0626\u0648": {
49505                 "isolated": "\uFBEE",
49506                 "final": "\uFBEF"
49507             },
49508             "\u0626\u06C7": {
49509                 "isolated": "\uFBF0",
49510                 "final": "\uFBF1"
49511             },
49512             "\u0626\u06C6": {
49513                 "isolated": "\uFBF2",
49514                 "final": "\uFBF3"
49515             },
49516             "\u0626\u06C8": {
49517                 "isolated": "\uFBF4",
49518                 "final": "\uFBF5"
49519             },
49520             "\u0626\u06D0": {
49521                 "isolated": "\uFBF6",
49522                 "final": "\uFBF7",
49523                 "initial": "\uFBF8"
49524             },
49525             "\u0626\u0649": {
49526                 "uighur_kirghiz": {
49527                     "isolated": "\uFBF9",
49528                     "final": "\uFBFA",
49529                     "initial": "\uFBFB"
49530                 },
49531                 "isolated": "\uFC03",
49532                 "final": "\uFC68"
49533             },
49534             "\u0626\u062C": {
49535                 "isolated": "\uFC00",
49536                 "initial": "\uFC97"
49537             },
49538             "\u0626\u062D": {
49539                 "isolated": "\uFC01",
49540                 "initial": "\uFC98"
49541             },
49542             "\u0626\u0645": {
49543                 "isolated": "\uFC02",
49544                 "final": "\uFC66",
49545                 "initial": "\uFC9A",
49546                 "medial": "\uFCDF"
49547             },
49548             "\u0626\u064A": {
49549                 "isolated": "\uFC04",
49550                 "final": "\uFC69"
49551             },
49552             "\u0628\u062C": {
49553                 "isolated": "\uFC05",
49554                 "initial": "\uFC9C"
49555             },
49556             "\u0628\u062D": {
49557                 "isolated": "\uFC06",
49558                 "initial": "\uFC9D"
49559             },
49560             "\u0628\u062E": {
49561                 "isolated": "\uFC07",
49562                 "initial": "\uFC9E"
49563             },
49564             "\u0628\u0645": {
49565                 "isolated": "\uFC08",
49566                 "final": "\uFC6C",
49567                 "initial": "\uFC9F",
49568                 "medial": "\uFCE1"
49569             },
49570             "\u0628\u0649": {
49571                 "isolated": "\uFC09",
49572                 "final": "\uFC6E"
49573             },
49574             "\u0628\u064A": {
49575                 "isolated": "\uFC0A",
49576                 "final": "\uFC6F"
49577             },
49578             "\u062A\u062C": {
49579                 "isolated": "\uFC0B",
49580                 "initial": "\uFCA1"
49581             },
49582             "\u062A\u062D": {
49583                 "isolated": "\uFC0C",
49584                 "initial": "\uFCA2"
49585             },
49586             "\u062A\u062E": {
49587                 "isolated": "\uFC0D",
49588                 "initial": "\uFCA3"
49589             },
49590             "\u062A\u0645": {
49591                 "isolated": "\uFC0E",
49592                 "final": "\uFC72",
49593                 "initial": "\uFCA4",
49594                 "medial": "\uFCE3"
49595             },
49596             "\u062A\u0649": {
49597                 "isolated": "\uFC0F",
49598                 "final": "\uFC74"
49599             },
49600             "\u062A\u064A": {
49601                 "isolated": "\uFC10",
49602                 "final": "\uFC75"
49603             },
49604             "\u062B\u062C": {
49605                 "isolated": "\uFC11"
49606             },
49607             "\u062B\u0645": {
49608                 "isolated": "\uFC12",
49609                 "final": "\uFC78",
49610                 "initial": "\uFCA6",
49611                 "medial": "\uFCE5"
49612             },
49613             "\u062B\u0649": {
49614                 "isolated": "\uFC13",
49615                 "final": "\uFC7A"
49616             },
49617             "\u062B\u0648": {
49618                 "isolated": "\uFC14"
49619             },
49620             "\u062C\u062D": {
49621                 "isolated": "\uFC15",
49622                 "initial": "\uFCA7"
49623             },
49624             "\u062C\u0645": {
49625                 "isolated": "\uFC16",
49626                 "initial": "\uFCA8"
49627             },
49628             "\u062D\u062C": {
49629                 "isolated": "\uFC17",
49630                 "initial": "\uFCA9"
49631             },
49632             "\u062D\u0645": {
49633                 "isolated": "\uFC18",
49634                 "initial": "\uFCAA"
49635             },
49636             "\u062E\u062C": {
49637                 "isolated": "\uFC19",
49638                 "initial": "\uFCAB"
49639             },
49640             "\u062E\u062D": {
49641                 "isolated": "\uFC1A"
49642             },
49643             "\u062E\u0645": {
49644                 "isolated": "\uFC1B",
49645                 "initial": "\uFCAC"
49646             },
49647             "\u0633\u062C": {
49648                 "isolated": "\uFC1C",
49649                 "initial": "\uFCAD",
49650                 "medial": "\uFD34"
49651             },
49652             "\u0633\u062D": {
49653                 "isolated": "\uFC1D",
49654                 "initial": "\uFCAE",
49655                 "medial": "\uFD35"
49656             },
49657             "\u0633\u062E": {
49658                 "isolated": "\uFC1E",
49659                 "initial": "\uFCAF",
49660                 "medial": "\uFD36"
49661             },
49662             "\u0633\u0645": {
49663                 "isolated": "\uFC1F",
49664                 "initial": "\uFCB0",
49665                 "medial": "\uFCE7"
49666             },
49667             "\u0635\u062D": {
49668                 "isolated": "\uFC20",
49669                 "initial": "\uFCB1"
49670             },
49671             "\u0635\u0645": {
49672                 "isolated": "\uFC21",
49673                 "initial": "\uFCB3"
49674             },
49675             "\u0636\u062C": {
49676                 "isolated": "\uFC22",
49677                 "initial": "\uFCB4"
49678             },
49679             "\u0636\u062D": {
49680                 "isolated": "\uFC23",
49681                 "initial": "\uFCB5"
49682             },
49683             "\u0636\u062E": {
49684                 "isolated": "\uFC24",
49685                 "initial": "\uFCB6"
49686             },
49687             "\u0636\u0645": {
49688                 "isolated": "\uFC25",
49689                 "initial": "\uFCB7"
49690             },
49691             "\u0637\u062D": {
49692                 "isolated": "\uFC26",
49693                 "initial": "\uFCB8"
49694             },
49695             "\u0637\u0645": {
49696                 "isolated": "\uFC27",
49697                 "initial": "\uFD33",
49698                 "medial": "\uFD3A"
49699             },
49700             "\u0638\u0645": {
49701                 "isolated": "\uFC28",
49702                 "initial": "\uFCB9",
49703                 "medial": "\uFD3B"
49704             },
49705             "\u0639\u062C": {
49706                 "isolated": "\uFC29",
49707                 "initial": "\uFCBA"
49708             },
49709             "\u0639\u0645": {
49710                 "isolated": "\uFC2A",
49711                 "initial": "\uFCBB"
49712             },
49713             "\u063A\u062C": {
49714                 "isolated": "\uFC2B",
49715                 "initial": "\uFCBC"
49716             },
49717             "\u063A\u0645": {
49718                 "isolated": "\uFC2C",
49719                 "initial": "\uFCBD"
49720             },
49721             "\u0641\u062C": {
49722                 "isolated": "\uFC2D",
49723                 "initial": "\uFCBE"
49724             },
49725             "\u0641\u062D": {
49726                 "isolated": "\uFC2E",
49727                 "initial": "\uFCBF"
49728             },
49729             "\u0641\u062E": {
49730                 "isolated": "\uFC2F",
49731                 "initial": "\uFCC0"
49732             },
49733             "\u0641\u0645": {
49734                 "isolated": "\uFC30",
49735                 "initial": "\uFCC1"
49736             },
49737             "\u0641\u0649": {
49738                 "isolated": "\uFC31",
49739                 "final": "\uFC7C"
49740             },
49741             "\u0641\u064A": {
49742                 "isolated": "\uFC32",
49743                 "final": "\uFC7D"
49744             },
49745             "\u0642\u062D": {
49746                 "isolated": "\uFC33",
49747                 "initial": "\uFCC2"
49748             },
49749             "\u0642\u0645": {
49750                 "isolated": "\uFC34",
49751                 "initial": "\uFCC3"
49752             },
49753             "\u0642\u0649": {
49754                 "isolated": "\uFC35",
49755                 "final": "\uFC7E"
49756             },
49757             "\u0642\u064A": {
49758                 "isolated": "\uFC36",
49759                 "final": "\uFC7F"
49760             },
49761             "\u0643\u0627": {
49762                 "isolated": "\uFC37",
49763                 "final": "\uFC80"
49764             },
49765             "\u0643\u062C": {
49766                 "isolated": "\uFC38",
49767                 "initial": "\uFCC4"
49768             },
49769             "\u0643\u062D": {
49770                 "isolated": "\uFC39",
49771                 "initial": "\uFCC5"
49772             },
49773             "\u0643\u062E": {
49774                 "isolated": "\uFC3A",
49775                 "initial": "\uFCC6"
49776             },
49777             "\u0643\u0644": {
49778                 "isolated": "\uFC3B",
49779                 "final": "\uFC81",
49780                 "initial": "\uFCC7",
49781                 "medial": "\uFCEB"
49782             },
49783             "\u0643\u0645": {
49784                 "isolated": "\uFC3C",
49785                 "final": "\uFC82",
49786                 "initial": "\uFCC8",
49787                 "medial": "\uFCEC"
49788             },
49789             "\u0643\u0649": {
49790                 "isolated": "\uFC3D",
49791                 "final": "\uFC83"
49792             },
49793             "\u0643\u064A": {
49794                 "isolated": "\uFC3E",
49795                 "final": "\uFC84"
49796             },
49797             "\u0644\u062C": {
49798                 "isolated": "\uFC3F",
49799                 "initial": "\uFCC9"
49800             },
49801             "\u0644\u062D": {
49802                 "isolated": "\uFC40",
49803                 "initial": "\uFCCA"
49804             },
49805             "\u0644\u062E": {
49806                 "isolated": "\uFC41",
49807                 "initial": "\uFCCB"
49808             },
49809             "\u0644\u0645": {
49810                 "isolated": "\uFC42",
49811                 "final": "\uFC85",
49812                 "initial": "\uFCCC",
49813                 "medial": "\uFCED"
49814             },
49815             "\u0644\u0649": {
49816                 "isolated": "\uFC43",
49817                 "final": "\uFC86"
49818             },
49819             "\u0644\u064A": {
49820                 "isolated": "\uFC44",
49821                 "final": "\uFC87"
49822             },
49823             "\u0645\u062C": {
49824                 "isolated": "\uFC45",
49825                 "initial": "\uFCCE"
49826             },
49827             "\u0645\u062D": {
49828                 "isolated": "\uFC46",
49829                 "initial": "\uFCCF"
49830             },
49831             "\u0645\u062E": {
49832                 "isolated": "\uFC47",
49833                 "initial": "\uFCD0"
49834             },
49835             "\u0645\u0645": {
49836                 "isolated": "\uFC48",
49837                 "final": "\uFC89",
49838                 "initial": "\uFCD1"
49839             },
49840             "\u0645\u0649": {
49841                 "isolated": "\uFC49"
49842             },
49843             "\u0645\u064A": {
49844                 "isolated": "\uFC4A"
49845             },
49846             "\u0646\u062C": {
49847                 "isolated": "\uFC4B",
49848                 "initial": "\uFCD2"
49849             },
49850             "\u0646\u062D": {
49851                 "isolated": "\uFC4C",
49852                 "initial": "\uFCD3"
49853             },
49854             "\u0646\u062E": {
49855                 "isolated": "\uFC4D",
49856                 "initial": "\uFCD4"
49857             },
49858             "\u0646\u0645": {
49859                 "isolated": "\uFC4E",
49860                 "final": "\uFC8C",
49861                 "initial": "\uFCD5",
49862                 "medial": "\uFCEE"
49863             },
49864             "\u0646\u0649": {
49865                 "isolated": "\uFC4F",
49866                 "final": "\uFC8E"
49867             },
49868             "\u0646\u064A": {
49869                 "isolated": "\uFC50",
49870                 "final": "\uFC8F"
49871             },
49872             "\u0647\u062C": {
49873                 "isolated": "\uFC51",
49874                 "initial": "\uFCD7"
49875             },
49876             "\u0647\u0645": {
49877                 "isolated": "\uFC52",
49878                 "initial": "\uFCD8"
49879             },
49880             "\u0647\u0649": {
49881                 "isolated": "\uFC53"
49882             },
49883             "\u0647\u064A": {
49884                 "isolated": "\uFC54"
49885             },
49886             "\u064A\u062C": {
49887                 "isolated": "\uFC55",
49888                 "initial": "\uFCDA"
49889             },
49890             "\u064A\u062D": {
49891                 "isolated": "\uFC56",
49892                 "initial": "\uFCDB"
49893             },
49894             "\u064A\u062E": {
49895                 "isolated": "\uFC57",
49896                 "initial": "\uFCDC"
49897             },
49898             "\u064A\u0645": {
49899                 "isolated": "\uFC58",
49900                 "final": "\uFC93",
49901                 "initial": "\uFCDD",
49902                 "medial": "\uFCF0"
49903             },
49904             "\u064A\u0649": {
49905                 "isolated": "\uFC59",
49906                 "final": "\uFC95"
49907             },
49908             "\u064A\u064A": {
49909                 "isolated": "\uFC5A",
49910                 "final": "\uFC96"
49911             },
49912             "\u0630\u0670": {
49913                 "isolated": "\uFC5B"
49914             },
49915             "\u0631\u0670": {
49916                 "isolated": "\uFC5C"
49917             },
49918             "\u0649\u0670": {
49919                 "isolated": "\uFC5D",
49920                 "final": "\uFC90"
49921             },
49922             "\u064C\u0651": {
49923                 "isolated": "\uFC5E"
49924             },
49925             "\u064D\u0651": {
49926                 "isolated": "\uFC5F"
49927             },
49928             "\u064E\u0651": {
49929                 "isolated": "\uFC60"
49930             },
49931             "\u064F\u0651": {
49932                 "isolated": "\uFC61"
49933             },
49934             "\u0650\u0651": {
49935                 "isolated": "\uFC62"
49936             },
49937             "\u0651\u0670": {
49938                 "isolated": "\uFC63"
49939             },
49940             "\u0626\u0631": {
49941                 "final": "\uFC64"
49942             },
49943             "\u0626\u0632": {
49944                 "final": "\uFC65"
49945             },
49946             "\u0626\u0646": {
49947                 "final": "\uFC67"
49948             },
49949             "\u0628\u0631": {
49950                 "final": "\uFC6A"
49951             },
49952             "\u0628\u0632": {
49953                 "final": "\uFC6B"
49954             },
49955             "\u0628\u0646": {
49956                 "final": "\uFC6D"
49957             },
49958             "\u062A\u0631": {
49959                 "final": "\uFC70"
49960             },
49961             "\u062A\u0632": {
49962                 "final": "\uFC71"
49963             },
49964             "\u062A\u0646": {
49965                 "final": "\uFC73"
49966             },
49967             "\u062B\u0631": {
49968                 "final": "\uFC76"
49969             },
49970             "\u062B\u0632": {
49971                 "final": "\uFC77"
49972             },
49973             "\u062B\u0646": {
49974                 "final": "\uFC79"
49975             },
49976             "\u062B\u064A": {
49977                 "final": "\uFC7B"
49978             },
49979             "\u0645\u0627": {
49980                 "final": "\uFC88"
49981             },
49982             "\u0646\u0631": {
49983                 "final": "\uFC8A"
49984             },
49985             "\u0646\u0632": {
49986                 "final": "\uFC8B"
49987             },
49988             "\u0646\u0646": {
49989                 "final": "\uFC8D"
49990             },
49991             "\u064A\u0631": {
49992                 "final": "\uFC91"
49993             },
49994             "\u064A\u0632": {
49995                 "final": "\uFC92"
49996             },
49997             "\u064A\u0646": {
49998                 "final": "\uFC94"
49999             },
50000             "\u0626\u062E": {
50001                 "initial": "\uFC99"
50002             },
50003             "\u0626\u0647": {
50004                 "initial": "\uFC9B",
50005                 "medial": "\uFCE0"
50006             },
50007             "\u0628\u0647": {
50008                 "initial": "\uFCA0",
50009                 "medial": "\uFCE2"
50010             },
50011             "\u062A\u0647": {
50012                 "initial": "\uFCA5",
50013                 "medial": "\uFCE4"
50014             },
50015             "\u0635\u062E": {
50016                 "initial": "\uFCB2"
50017             },
50018             "\u0644\u0647": {
50019                 "initial": "\uFCCD"
50020             },
50021             "\u0646\u0647": {
50022                 "initial": "\uFCD6",
50023                 "medial": "\uFCEF"
50024             },
50025             "\u0647\u0670": {
50026                 "initial": "\uFCD9"
50027             },
50028             "\u064A\u0647": {
50029                 "initial": "\uFCDE",
50030                 "medial": "\uFCF1"
50031             },
50032             "\u062B\u0647": {
50033                 "medial": "\uFCE6"
50034             },
50035             "\u0633\u0647": {
50036                 "medial": "\uFCE8",
50037                 "initial": "\uFD31"
50038             },
50039             "\u0634\u0645": {
50040                 "medial": "\uFCE9",
50041                 "isolated": "\uFD0C",
50042                 "final": "\uFD28",
50043                 "initial": "\uFD30"
50044             },
50045             "\u0634\u0647": {
50046                 "medial": "\uFCEA",
50047                 "initial": "\uFD32"
50048             },
50049             "\u0640\u064E\u0651": {
50050                 "medial": "\uFCF2"
50051             },
50052             "\u0640\u064F\u0651": {
50053                 "medial": "\uFCF3"
50054             },
50055             "\u0640\u0650\u0651": {
50056                 "medial": "\uFCF4"
50057             },
50058             "\u0637\u0649": {
50059                 "isolated": "\uFCF5",
50060                 "final": "\uFD11"
50061             },
50062             "\u0637\u064A": {
50063                 "isolated": "\uFCF6",
50064                 "final": "\uFD12"
50065             },
50066             "\u0639\u0649": {
50067                 "isolated": "\uFCF7",
50068                 "final": "\uFD13"
50069             },
50070             "\u0639\u064A": {
50071                 "isolated": "\uFCF8",
50072                 "final": "\uFD14"
50073             },
50074             "\u063A\u0649": {
50075                 "isolated": "\uFCF9",
50076                 "final": "\uFD15"
50077             },
50078             "\u063A\u064A": {
50079                 "isolated": "\uFCFA",
50080                 "final": "\uFD16"
50081             },
50082             "\u0633\u0649": {
50083                 "isolated": "\uFCFB"
50084             },
50085             "\u0633\u064A": {
50086                 "isolated": "\uFCFC",
50087                 "final": "\uFD18"
50088             },
50089             "\u0634\u0649": {
50090                 "isolated": "\uFCFD",
50091                 "final": "\uFD19"
50092             },
50093             "\u0634\u064A": {
50094                 "isolated": "\uFCFE",
50095                 "final": "\uFD1A"
50096             },
50097             "\u062D\u0649": {
50098                 "isolated": "\uFCFF",
50099                 "final": "\uFD1B"
50100             },
50101             "\u062D\u064A": {
50102                 "isolated": "\uFD00",
50103                 "final": "\uFD1C"
50104             },
50105             "\u062C\u0649": {
50106                 "isolated": "\uFD01",
50107                 "final": "\uFD1D"
50108             },
50109             "\u062C\u064A": {
50110                 "isolated": "\uFD02",
50111                 "final": "\uFD1E"
50112             },
50113             "\u062E\u0649": {
50114                 "isolated": "\uFD03",
50115                 "final": "\uFD1F"
50116             },
50117             "\u062E\u064A": {
50118                 "isolated": "\uFD04",
50119                 "final": "\uFD20"
50120             },
50121             "\u0635\u0649": {
50122                 "isolated": "\uFD05",
50123                 "final": "\uFD21"
50124             },
50125             "\u0635\u064A": {
50126                 "isolated": "\uFD06",
50127                 "final": "\uFD22"
50128             },
50129             "\u0636\u0649": {
50130                 "isolated": "\uFD07",
50131                 "final": "\uFD23"
50132             },
50133             "\u0636\u064A": {
50134                 "isolated": "\uFD08",
50135                 "final": "\uFD24"
50136             },
50137             "\u0634\u062C": {
50138                 "isolated": "\uFD09",
50139                 "final": "\uFD25",
50140                 "initial": "\uFD2D",
50141                 "medial": "\uFD37"
50142             },
50143             "\u0634\u062D": {
50144                 "isolated": "\uFD0A",
50145                 "final": "\uFD26",
50146                 "initial": "\uFD2E",
50147                 "medial": "\uFD38"
50148             },
50149             "\u0634\u062E": {
50150                 "isolated": "\uFD0B",
50151                 "final": "\uFD27",
50152                 "initial": "\uFD2F",
50153                 "medial": "\uFD39"
50154             },
50155             "\u0634\u0631": {
50156                 "isolated": "\uFD0D",
50157                 "final": "\uFD29"
50158             },
50159             "\u0633\u0631": {
50160                 "isolated": "\uFD0E",
50161                 "final": "\uFD2A"
50162             },
50163             "\u0635\u0631": {
50164                 "isolated": "\uFD0F",
50165                 "final": "\uFD2B"
50166             },
50167             "\u0636\u0631": {
50168                 "isolated": "\uFD10",
50169                 "final": "\uFD2C"
50170             },
50171             "\u0633\u0639": {
50172                 "final": "\uFD17"
50173             },
50174             "\u062A\u062C\u0645": {
50175                 "initial": "\uFD50"
50176             },
50177             "\u062A\u062D\u062C": {
50178                 "final": "\uFD51",
50179                 "initial": "\uFD52"
50180             },
50181             "\u062A\u062D\u0645": {
50182                 "initial": "\uFD53"
50183             },
50184             "\u062A\u062E\u0645": {
50185                 "initial": "\uFD54"
50186             },
50187             "\u062A\u0645\u062C": {
50188                 "initial": "\uFD55"
50189             },
50190             "\u062A\u0645\u062D": {
50191                 "initial": "\uFD56"
50192             },
50193             "\u062A\u0645\u062E": {
50194                 "initial": "\uFD57"
50195             },
50196             "\u062C\u0645\u062D": {
50197                 "final": "\uFD58",
50198                 "initial": "\uFD59"
50199             },
50200             "\u062D\u0645\u064A": {
50201                 "final": "\uFD5A"
50202             },
50203             "\u062D\u0645\u0649": {
50204                 "final": "\uFD5B"
50205             },
50206             "\u0633\u062D\u062C": {
50207                 "initial": "\uFD5C"
50208             },
50209             "\u0633\u062C\u062D": {
50210                 "initial": "\uFD5D"
50211             },
50212             "\u0633\u062C\u0649": {
50213                 "final": "\uFD5E"
50214             },
50215             "\u0633\u0645\u062D": {
50216                 "final": "\uFD5F",
50217                 "initial": "\uFD60"
50218             },
50219             "\u0633\u0645\u062C": {
50220                 "initial": "\uFD61"
50221             },
50222             "\u0633\u0645\u0645": {
50223                 "final": "\uFD62",
50224                 "initial": "\uFD63"
50225             },
50226             "\u0635\u062D\u062D": {
50227                 "final": "\uFD64",
50228                 "initial": "\uFD65"
50229             },
50230             "\u0635\u0645\u0645": {
50231                 "final": "\uFD66",
50232                 "initial": "\uFDC5"
50233             },
50234             "\u0634\u062D\u0645": {
50235                 "final": "\uFD67",
50236                 "initial": "\uFD68"
50237             },
50238             "\u0634\u062C\u064A": {
50239                 "final": "\uFD69"
50240             },
50241             "\u0634\u0645\u062E": {
50242                 "final": "\uFD6A",
50243                 "initial": "\uFD6B"
50244             },
50245             "\u0634\u0645\u0645": {
50246                 "final": "\uFD6C",
50247                 "initial": "\uFD6D"
50248             },
50249             "\u0636\u062D\u0649": {
50250                 "final": "\uFD6E"
50251             },
50252             "\u0636\u062E\u0645": {
50253                 "final": "\uFD6F",
50254                 "initial": "\uFD70"
50255             },
50256             "\u0636\u0645\u062D": {
50257                 "final": "\uFD71"
50258             },
50259             "\u0637\u0645\u062D": {
50260                 "initial": "\uFD72"
50261             },
50262             "\u0637\u0645\u0645": {
50263                 "initial": "\uFD73"
50264             },
50265             "\u0637\u0645\u064A": {
50266                 "final": "\uFD74"
50267             },
50268             "\u0639\u062C\u0645": {
50269                 "final": "\uFD75",
50270                 "initial": "\uFDC4"
50271             },
50272             "\u0639\u0645\u0645": {
50273                 "final": "\uFD76",
50274                 "initial": "\uFD77"
50275             },
50276             "\u0639\u0645\u0649": {
50277                 "final": "\uFD78"
50278             },
50279             "\u063A\u0645\u0645": {
50280                 "final": "\uFD79"
50281             },
50282             "\u063A\u0645\u064A": {
50283                 "final": "\uFD7A"
50284             },
50285             "\u063A\u0645\u0649": {
50286                 "final": "\uFD7B"
50287             },
50288             "\u0641\u062E\u0645": {
50289                 "final": "\uFD7C",
50290                 "initial": "\uFD7D"
50291             },
50292             "\u0642\u0645\u062D": {
50293                 "final": "\uFD7E",
50294                 "initial": "\uFDB4"
50295             },
50296             "\u0642\u0645\u0645": {
50297                 "final": "\uFD7F"
50298             },
50299             "\u0644\u062D\u0645": {
50300                 "final": "\uFD80",
50301                 "initial": "\uFDB5"
50302             },
50303             "\u0644\u062D\u064A": {
50304                 "final": "\uFD81"
50305             },
50306             "\u0644\u062D\u0649": {
50307                 "final": "\uFD82"
50308             },
50309             "\u0644\u062C\u062C": {
50310                 "initial": "\uFD83",
50311                 "final": "\uFD84"
50312             },
50313             "\u0644\u062E\u0645": {
50314                 "final": "\uFD85",
50315                 "initial": "\uFD86"
50316             },
50317             "\u0644\u0645\u062D": {
50318                 "final": "\uFD87",
50319                 "initial": "\uFD88"
50320             },
50321             "\u0645\u062D\u062C": {
50322                 "initial": "\uFD89"
50323             },
50324             "\u0645\u062D\u0645": {
50325                 "initial": "\uFD8A"
50326             },
50327             "\u0645\u062D\u064A": {
50328                 "final": "\uFD8B"
50329             },
50330             "\u0645\u062C\u062D": {
50331                 "initial": "\uFD8C"
50332             },
50333             "\u0645\u062C\u0645": {
50334                 "initial": "\uFD8D"
50335             },
50336             "\u0645\u062E\u062C": {
50337                 "initial": "\uFD8E"
50338             },
50339             "\u0645\u062E\u0645": {
50340                 "initial": "\uFD8F"
50341             },
50342             "\u0645\u062C\u062E": {
50343                 "initial": "\uFD92"
50344             },
50345             "\u0647\u0645\u062C": {
50346                 "initial": "\uFD93"
50347             },
50348             "\u0647\u0645\u0645": {
50349                 "initial": "\uFD94"
50350             },
50351             "\u0646\u062D\u0645": {
50352                 "initial": "\uFD95"
50353             },
50354             "\u0646\u062D\u0649": {
50355                 "final": "\uFD96"
50356             },
50357             "\u0646\u062C\u0645": {
50358                 "final": "\uFD97",
50359                 "initial": "\uFD98"
50360             },
50361             "\u0646\u062C\u0649": {
50362                 "final": "\uFD99"
50363             },
50364             "\u0646\u0645\u064A": {
50365                 "final": "\uFD9A"
50366             },
50367             "\u0646\u0645\u0649": {
50368                 "final": "\uFD9B"
50369             },
50370             "\u064A\u0645\u0645": {
50371                 "final": "\uFD9C",
50372                 "initial": "\uFD9D"
50373             },
50374             "\u0628\u062E\u064A": {
50375                 "final": "\uFD9E"
50376             },
50377             "\u062A\u062C\u064A": {
50378                 "final": "\uFD9F"
50379             },
50380             "\u062A\u062C\u0649": {
50381                 "final": "\uFDA0"
50382             },
50383             "\u062A\u062E\u064A": {
50384                 "final": "\uFDA1"
50385             },
50386             "\u062A\u062E\u0649": {
50387                 "final": "\uFDA2"
50388             },
50389             "\u062A\u0645\u064A": {
50390                 "final": "\uFDA3"
50391             },
50392             "\u062A\u0645\u0649": {
50393                 "final": "\uFDA4"
50394             },
50395             "\u062C\u0645\u064A": {
50396                 "final": "\uFDA5"
50397             },
50398             "\u062C\u062D\u0649": {
50399                 "final": "\uFDA6"
50400             },
50401             "\u062C\u0645\u0649": {
50402                 "final": "\uFDA7"
50403             },
50404             "\u0633\u062E\u0649": {
50405                 "final": "\uFDA8"
50406             },
50407             "\u0635\u062D\u064A": {
50408                 "final": "\uFDA9"
50409             },
50410             "\u0634\u062D\u064A": {
50411                 "final": "\uFDAA"
50412             },
50413             "\u0636\u062D\u064A": {
50414                 "final": "\uFDAB"
50415             },
50416             "\u0644\u062C\u064A": {
50417                 "final": "\uFDAC"
50418             },
50419             "\u0644\u0645\u064A": {
50420                 "final": "\uFDAD"
50421             },
50422             "\u064A\u062D\u064A": {
50423                 "final": "\uFDAE"
50424             },
50425             "\u064A\u062C\u064A": {
50426                 "final": "\uFDAF"
50427             },
50428             "\u064A\u0645\u064A": {
50429                 "final": "\uFDB0"
50430             },
50431             "\u0645\u0645\u064A": {
50432                 "final": "\uFDB1"
50433             },
50434             "\u0642\u0645\u064A": {
50435                 "final": "\uFDB2"
50436             },
50437             "\u0646\u062D\u064A": {
50438                 "final": "\uFDB3"
50439             },
50440             "\u0639\u0645\u064A": {
50441                 "final": "\uFDB6"
50442             },
50443             "\u0643\u0645\u064A": {
50444                 "final": "\uFDB7"
50445             },
50446             "\u0646\u062C\u062D": {
50447                 "initial": "\uFDB8",
50448                 "final": "\uFDBD"
50449             },
50450             "\u0645\u062E\u064A": {
50451                 "final": "\uFDB9"
50452             },
50453             "\u0644\u062C\u0645": {
50454                 "initial": "\uFDBA",
50455                 "final": "\uFDBC"
50456             },
50457             "\u0643\u0645\u0645": {
50458                 "final": "\uFDBB",
50459                 "initial": "\uFDC3"
50460             },
50461             "\u062C\u062D\u064A": {
50462                 "final": "\uFDBE"
50463             },
50464             "\u062D\u062C\u064A": {
50465                 "final": "\uFDBF"
50466             },
50467             "\u0645\u062C\u064A": {
50468                 "final": "\uFDC0"
50469             },
50470             "\u0641\u0645\u064A": {
50471                 "final": "\uFDC1"
50472             },
50473             "\u0628\u062D\u064A": {
50474                 "final": "\uFDC2"
50475             },
50476             "\u0633\u062E\u064A": {
50477                 "final": "\uFDC6"
50478             },
50479             "\u0646\u062C\u064A": {
50480                 "final": "\uFDC7"
50481             },
50482             "\u0644\u0622": {
50483                 "isolated": "\uFEF5",
50484                 "final": "\uFEF6"
50485             },
50486             "\u0644\u0623": {
50487                 "isolated": "\uFEF7",
50488                 "final": "\uFEF8"
50489             },
50490             "\u0644\u0625": {
50491                 "isolated": "\uFEF9",
50492                 "final": "\uFEFA"
50493             },
50494             "\u0644\u0627": {
50495                 "isolated": "\uFEFB",
50496                 "final": "\uFEFC"
50497             },
50498             "words": {
50499                 "\u0635\u0644\u06D2": "\uFDF0",
50500                 "\u0642\u0644\u06D2": "\uFDF1",
50501                 "\u0627\u0644\u0644\u0647": "\uFDF2",
50502                 "\u0627\u0643\u0628\u0631": "\uFDF3",
50503                 "\u0645\u062D\u0645\u062F": "\uFDF4",
50504                 "\u0635\u0644\u0639\u0645": "\uFDF5",
50505                 "\u0631\u0633\u0648\u0644": "\uFDF6",
50506                 "\u0639\u0644\u064A\u0647": "\uFDF7",
50507                 "\u0648\u0633\u0644\u0645": "\uFDF8",
50508                 "\u0635\u0644\u0649": "\uFDF9",
50509                 "\u0635\u0644\u0649\u0627\u0644\u0644\u0647\u0639\u0644\u064A\u0647\u0648\u0633\u0644\u0645": "\uFDFA",
50510                 "\u062C\u0644\u062C\u0644\u0627\u0644\u0647": "\uFDFB",
50511                 "\u0631\u06CC\u0627\u0644": "\uFDFC"
50512             }
50513         };
50514         exports.default = ligatureReference;
50515         });
50516
50517         unwrapExports(unicodeLigatures);
50518
50519         var reference = createCommonjsModule(function (module, exports) {
50520         Object.defineProperty(exports, "__esModule", { value: true });
50521
50522
50523         var letterList = Object.keys(unicodeArabic.default);
50524         exports.letterList = letterList;
50525         var ligatureList = Object.keys(unicodeLigatures.default);
50526         exports.ligatureList = ligatureList;
50527         var ligatureWordList = Object.keys(unicodeLigatures.default.words);
50528         exports.ligatureWordList = ligatureWordList;
50529         var lams = '\u0644\u06B5\u06B6\u06B7\u06B8';
50530         exports.lams = lams;
50531         var alefs = '\u0627\u0622\u0623\u0625\u0671\u0672\u0673\u0675\u0773\u0774';
50532         exports.alefs = alefs;
50533         // for (var l = 1; l < lams.length; l++) {
50534         //   console.log('-');
50535         //   for (var a = 0; a < alefs.length; a++) {
50536         //     console.log(a + ': ' + lams[l] + alefs[a]);
50537         //   }
50538         // }
50539         var tashkeel = '\u0605\u0640\u0670\u0674\u06DF\u06E7\u06E8';
50540         exports.tashkeel = tashkeel;
50541         function addToTashkeel(start, finish) {
50542             for (var i = start; i <= finish; i++) {
50543                 exports.tashkeel = tashkeel += String.fromCharCode(i);
50544             }
50545         }
50546         addToTashkeel(0x0610, 0x061A);
50547         addToTashkeel(0x064B, 0x065F);
50548         addToTashkeel(0x06D6, 0x06DC);
50549         addToTashkeel(0x06E0, 0x06E4);
50550         addToTashkeel(0x06EA, 0x06ED);
50551         addToTashkeel(0x08D3, 0x08E1);
50552         addToTashkeel(0x08E3, 0x08FF);
50553         addToTashkeel(0xFE70, 0xFE7F);
50554         var lineBreakers = '\u0627\u0629\u0648\u06C0\u06CF\u06FD\u06FE\u076B\u076C\u0771\u0773\u0774\u0778\u0779\u08E2\u08B1\u08B2\u08B9';
50555         exports.lineBreakers = lineBreakers;
50556         function addToLineBreakers(start, finish) {
50557             for (var i = start; i <= finish; i++) {
50558                 exports.lineBreakers = lineBreakers += String.fromCharCode(i);
50559             }
50560         }
50561         addToLineBreakers(0x0600, 0x061F); // it's OK to include tashkeel in this range as it is ignored
50562         addToLineBreakers(0x0621, 0x0625);
50563         addToLineBreakers(0x062F, 0x0632);
50564         addToLineBreakers(0x0660, 0x066D); // numerals, math
50565         addToLineBreakers(0x0671, 0x0677);
50566         addToLineBreakers(0x0688, 0x0699);
50567         addToLineBreakers(0x06C3, 0x06CB);
50568         addToLineBreakers(0x06D2, 0x06F9);
50569         addToLineBreakers(0x0759, 0x075B);
50570         addToLineBreakers(0x08AA, 0x08AE);
50571         addToLineBreakers(0xFB50, 0xFDFD); // presentation forms look like they could connect, but never do
50572         // Presentation Forms A includes diacritics but they are meant to stand alone
50573         addToLineBreakers(0xFE80, 0xFEFC); // presentation forms look like they could connect, but never do
50574         // numerals, math
50575         addToLineBreakers(0x10E60, 0x10E7F);
50576         addToLineBreakers(0x1EC70, 0x1ECBF);
50577         addToLineBreakers(0x1EE00, 0x1EEFF);
50578         });
50579
50580         unwrapExports(reference);
50581         var reference_1 = reference.letterList;
50582         var reference_2 = reference.ligatureList;
50583         var reference_3 = reference.ligatureWordList;
50584         var reference_4 = reference.lams;
50585         var reference_5 = reference.alefs;
50586         var reference_6 = reference.tashkeel;
50587         var reference_7 = reference.lineBreakers;
50588
50589         var GlyphSplitter_1 = createCommonjsModule(function (module, exports) {
50590         Object.defineProperty(exports, "__esModule", { value: true });
50591
50592
50593         function GlyphSplitter(word) {
50594             var letters = [];
50595             var lastLetter = '';
50596             word.split('').forEach(function (letter) {
50597                 if (isArabic_1.isArabic(letter)) {
50598                     if (reference.tashkeel.indexOf(letter) > -1) {
50599                         letters[letters.length - 1] += letter;
50600                     }
50601                     else if (lastLetter.length && ((reference.lams.indexOf(lastLetter) === 0 && reference.alefs.indexOf(letter) > -1) || (reference.lams.indexOf(lastLetter) > 0 && reference.alefs.indexOf(letter) === 0))) {
50602                         // valid LA forms
50603                         letters[letters.length - 1] += letter;
50604                     }
50605                     else {
50606                         letters.push(letter);
50607                     }
50608                 }
50609                 else {
50610                     letters.push(letter);
50611                 }
50612                 if (reference.tashkeel.indexOf(letter) === -1) {
50613                     lastLetter = letter;
50614                 }
50615             });
50616             return letters;
50617         }
50618         exports.GlyphSplitter = GlyphSplitter;
50619         });
50620
50621         unwrapExports(GlyphSplitter_1);
50622         var GlyphSplitter_2 = GlyphSplitter_1.GlyphSplitter;
50623
50624         var BaselineSplitter_1 = createCommonjsModule(function (module, exports) {
50625         Object.defineProperty(exports, "__esModule", { value: true });
50626
50627
50628         function BaselineSplitter(word) {
50629             var letters = [];
50630             var lastLetter = '';
50631             word.split('').forEach(function (letter) {
50632                 if (isArabic_1.isArabic(letter) && isArabic_1.isArabic(lastLetter)) {
50633                     if (lastLetter.length && reference.tashkeel.indexOf(letter) > -1) {
50634                         letters[letters.length - 1] += letter;
50635                     }
50636                     else if (reference.lineBreakers.indexOf(lastLetter) > -1) {
50637                         letters.push(letter);
50638                     }
50639                     else {
50640                         letters[letters.length - 1] += letter;
50641                     }
50642                 }
50643                 else {
50644                     letters.push(letter);
50645                 }
50646                 if (reference.tashkeel.indexOf(letter) === -1) {
50647                     // don't allow tashkeel to hide line break
50648                     lastLetter = letter;
50649                 }
50650             });
50651             return letters;
50652         }
50653         exports.BaselineSplitter = BaselineSplitter;
50654         });
50655
50656         unwrapExports(BaselineSplitter_1);
50657         var BaselineSplitter_2 = BaselineSplitter_1.BaselineSplitter;
50658
50659         var Normalization = createCommonjsModule(function (module, exports) {
50660         Object.defineProperty(exports, "__esModule", { value: true });
50661
50662
50663
50664
50665         function Normal(word, breakPresentationForm) {
50666             // default is to turn initial/isolated/medial/final presentation form to generic
50667             if (typeof breakPresentationForm === 'undefined') {
50668                 breakPresentationForm = true;
50669             }
50670             var returnable = '';
50671             word.split('').forEach(function (letter) {
50672                 if (!isArabic_1.isArabic(letter)) {
50673                     returnable += letter;
50674                     return;
50675                 }
50676                 for (var w = 0; w < reference.letterList.length; w++) {
50677                     // ok so we are checking this potential lettertron
50678                     var letterForms = unicodeArabic.default[reference.letterList[w]];
50679                     var versions = Object.keys(letterForms);
50680                     for (var v = 0; v < versions.length; v++) {
50681                         var localVersion = letterForms[versions[v]];
50682                         if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
50683                             // look at this embedded object
50684                             var embeddedForms = Object.keys(localVersion);
50685                             for (var ef = 0; ef < embeddedForms.length; ef++) {
50686                                 var form = localVersion[embeddedForms[ef]];
50687                                 if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
50688                                     // match
50689                                     // console.log('embedded match');
50690                                     if (form === letter) {
50691                                         // match exact
50692                                         if (breakPresentationForm && localVersion['normal'] && ['isolated', 'initial', 'medial', 'final'].indexOf(embeddedForms[ef]) > -1) {
50693                                             // replace presentation form
50694                                             // console.log('keeping normal form of the letter');
50695                                             if (typeof localVersion['normal'] === 'object') {
50696                                                 returnable += localVersion['normal'][0];
50697                                             }
50698                                             else {
50699                                                 returnable += localVersion['normal'];
50700                                             }
50701                                             return;
50702                                         }
50703                                         // console.log('keeping this letter');
50704                                         returnable += letter;
50705                                         return;
50706                                     }
50707                                     else if (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1) {
50708                                         // match
50709                                         returnable += form[0];
50710                                         // console.log('added the first letter from the same array');
50711                                         return;
50712                                     }
50713                                 }
50714                             }
50715                         }
50716                         else if (localVersion === letter) {
50717                             // match exact
50718                             if (breakPresentationForm && letterForms['normal'] && ['isolated', 'initial', 'medial', 'final'].indexOf(versions[v]) > -1) {
50719                                 // replace presentation form
50720                                 // console.log('keeping normal form of the letter');
50721                                 if (typeof letterForms['normal'] === 'object') {
50722                                     returnable += letterForms['normal'][0];
50723                                 }
50724                                 else {
50725                                     returnable += letterForms['normal'];
50726                                 }
50727                                 return;
50728                             }
50729                             // console.log('keeping this letter');
50730                             returnable += letter;
50731                             return;
50732                         }
50733                         else if (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1) {
50734                             // match
50735                             returnable += localVersion[0];
50736                             // console.log('added the first letter from the same array');
50737                             return;
50738                         }
50739                     }
50740                 }
50741                 // try ligatures
50742                 for (var v2 = 0; v2 < reference.ligatureList.length; v2++) {
50743                     var normalForm = reference.ligatureList[v2];
50744                     if (normalForm !== 'words') {
50745                         var ligForms = Object.keys(unicodeLigatures.default[normalForm]);
50746                         for (var f = 0; f < ligForms.length; f++) {
50747                             if (unicodeLigatures.default[normalForm][ligForms[f]] === letter) {
50748                                 returnable += normalForm;
50749                                 return;
50750                             }
50751                         }
50752                     }
50753                 }
50754                 // try words ligatures
50755                 for (var v3 = 0; v3 < reference.ligatureWordList.length; v3++) {
50756                     var normalForm = reference.ligatureWordList[v3];
50757                     if (unicodeLigatures.default.words[normalForm] === letter) {
50758                         returnable += normalForm;
50759                         return;
50760                     }
50761                 }
50762                 returnable += letter;
50763                 // console.log('kept the letter')
50764             });
50765             return returnable;
50766         }
50767         exports.Normal = Normal;
50768         });
50769
50770         unwrapExports(Normalization);
50771         var Normalization_1 = Normalization.Normal;
50772
50773         var CharShaper_1 = createCommonjsModule(function (module, exports) {
50774         Object.defineProperty(exports, "__esModule", { value: true });
50775
50776
50777
50778         function CharShaper(letter, form) {
50779             if (!isArabic_1.isArabic(letter)) {
50780                 // fail not Arabic
50781                 throw new Error('Not Arabic');
50782             }
50783             if (letter === "\u0621") {
50784                 // hamza alone
50785                 return "\u0621";
50786             }
50787             for (var w = 0; w < reference.letterList.length; w++) {
50788                 // ok so we are checking this potential lettertron
50789                 var letterForms = unicodeArabic.default[reference.letterList[w]];
50790                 var versions = Object.keys(letterForms);
50791                 for (var v = 0; v < versions.length; v++) {
50792                     var localVersion = letterForms[versions[v]];
50793                     if ((localVersion === letter) ||
50794                         (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
50795                         if (versions.indexOf(form) > -1) {
50796                             return letterForms[form];
50797                         }
50798                     }
50799                     else if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
50800                         // check embedded
50801                         var embeddedVersions = Object.keys(localVersion);
50802                         for (var ev = 0; ev < embeddedVersions.length; ev++) {
50803                             if ((localVersion[embeddedVersions[ev]] === letter) ||
50804                                 (typeof localVersion[embeddedVersions[ev]] === 'object' && localVersion[embeddedVersions[ev]].indexOf && localVersion[embeddedVersions[ev]].indexOf(letter) > -1)) {
50805                                 if (embeddedVersions.indexOf(form) > -1) {
50806                                     return localVersion[form];
50807                                 }
50808                             }
50809                         }
50810                     }
50811                 }
50812             }
50813         }
50814         exports.CharShaper = CharShaper;
50815         });
50816
50817         unwrapExports(CharShaper_1);
50818         var CharShaper_2 = CharShaper_1.CharShaper;
50819
50820         var WordShaper_1 = createCommonjsModule(function (module, exports) {
50821         Object.defineProperty(exports, "__esModule", { value: true });
50822
50823
50824
50825
50826         function WordShaper(word) {
50827             var state = 'initial';
50828             var output = '';
50829             for (var w = 0; w < word.length; w++) {
50830                 var nextLetter = ' ';
50831                 for (var nxw = w + 1; nxw < word.length; nxw++) {
50832                     if (!isArabic_1.isArabic(word[nxw])) {
50833                         break;
50834                     }
50835                     if (reference.tashkeel.indexOf(word[nxw]) === -1) {
50836                         nextLetter = word[nxw];
50837                         break;
50838                     }
50839                 }
50840                 if (!isArabic_1.isArabic(word[w]) || isArabic_1.isMath(word[w])) {
50841                     // space or other non-Arabic
50842                     output += word[w];
50843                     state = 'initial';
50844                 }
50845                 else if (reference.tashkeel.indexOf(word[w]) > -1) {
50846                     // tashkeel - add without changing state
50847                     output += word[w];
50848                 }
50849                 else if ((nextLetter === ' ') // last Arabic letter in this word
50850                     || (reference.lineBreakers.indexOf(word[w]) > -1)) { // the current letter is known to break lines
50851                     output += CharShaper_1.CharShaper(word[w], state === 'initial' ? 'isolated' : 'final');
50852                     state = 'initial';
50853                 }
50854                 else if (reference.lams.indexOf(word[w]) > -1 && reference.alefs.indexOf(nextLetter) > -1) {
50855                     // LA letters - advance an additional letter after this
50856                     output += unicodeLigatures.default[word[w] + nextLetter][(state === 'initial' ? 'isolated' : 'final')];
50857                     while (word[w] !== nextLetter) {
50858                         w++;
50859                     }
50860                     state = 'initial';
50861                 }
50862                 else {
50863                     output += CharShaper_1.CharShaper(word[w], state);
50864                     state = 'medial';
50865                 }
50866             }
50867             return output;
50868         }
50869         exports.WordShaper = WordShaper;
50870         });
50871
50872         unwrapExports(WordShaper_1);
50873         var WordShaper_2 = WordShaper_1.WordShaper;
50874
50875         var ParentLetter_1 = createCommonjsModule(function (module, exports) {
50876         Object.defineProperty(exports, "__esModule", { value: true });
50877
50878
50879
50880         function ParentLetter(letter) {
50881             if (!isArabic_1.isArabic(letter)) {
50882                 throw new Error('Not an Arabic letter');
50883             }
50884             for (var w = 0; w < reference.letterList.length; w++) {
50885                 // ok so we are checking this potential lettertron
50886                 var letterForms = unicodeArabic.default[reference.letterList[w]];
50887                 var versions = Object.keys(letterForms);
50888                 for (var v = 0; v < versions.length; v++) {
50889                     var localVersion = letterForms[versions[v]];
50890                     if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
50891                         // look at this embedded object
50892                         var embeddedForms = Object.keys(localVersion);
50893                         for (var ef = 0; ef < embeddedForms.length; ef++) {
50894                             var form = localVersion[embeddedForms[ef]];
50895                             if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
50896                                 // match
50897                                 return localVersion;
50898                             }
50899                         }
50900                     }
50901                     else if (localVersion === letter || (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
50902                         // match
50903                         return letterForms;
50904                     }
50905                 }
50906                 return null;
50907             }
50908         }
50909         exports.ParentLetter = ParentLetter;
50910         function GrandparentLetter(letter) {
50911             if (!isArabic_1.isArabic(letter)) {
50912                 throw new Error('Not an Arabic letter');
50913             }
50914             for (var w = 0; w < reference.letterList.length; w++) {
50915                 // ok so we are checking this potential lettertron
50916                 var letterForms = unicodeArabic.default[reference.letterList[w]];
50917                 var versions = Object.keys(letterForms);
50918                 for (var v = 0; v < versions.length; v++) {
50919                     var localVersion = letterForms[versions[v]];
50920                     if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
50921                         // look at this embedded object
50922                         var embeddedForms = Object.keys(localVersion);
50923                         for (var ef = 0; ef < embeddedForms.length; ef++) {
50924                             var form = localVersion[embeddedForms[ef]];
50925                             if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
50926                                 // match
50927                                 return letterForms;
50928                             }
50929                         }
50930                     }
50931                     else if (localVersion === letter || (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
50932                         // match
50933                         return letterForms;
50934                     }
50935                 }
50936                 return null;
50937             }
50938         }
50939         exports.GrandparentLetter = GrandparentLetter;
50940         });
50941
50942         unwrapExports(ParentLetter_1);
50943         var ParentLetter_2 = ParentLetter_1.ParentLetter;
50944         var ParentLetter_3 = ParentLetter_1.GrandparentLetter;
50945
50946         var lib$1 = createCommonjsModule(function (module, exports) {
50947         Object.defineProperty(exports, "__esModule", { value: true });
50948
50949         exports.isArabic = isArabic_1.isArabic;
50950
50951         exports.GlyphSplitter = GlyphSplitter_1.GlyphSplitter;
50952
50953         exports.BaselineSplitter = BaselineSplitter_1.BaselineSplitter;
50954
50955         exports.Normal = Normalization.Normal;
50956
50957         exports.CharShaper = CharShaper_1.CharShaper;
50958
50959         exports.WordShaper = WordShaper_1.WordShaper;
50960
50961         exports.ParentLetter = ParentLetter_1.ParentLetter;
50962         exports.GrandparentLetter = ParentLetter_1.GrandparentLetter;
50963         });
50964
50965         unwrapExports(lib$1);
50966         var lib_1 = lib$1.isArabic;
50967         var lib_2 = lib$1.GlyphSplitter;
50968         var lib_3 = lib$1.BaselineSplitter;
50969         var lib_4 = lib$1.Normal;
50970         var lib_5 = lib$1.CharShaper;
50971         var lib_6 = lib$1.WordShaper;
50972         var lib_7 = lib$1.ParentLetter;
50973         var lib_8 = lib$1.GrandparentLetter;
50974
50975         // see https://github.com/openstreetmap/iD/pull/3707
50976
50977         var rtlRegex = /[\u0590-\u05FF\u0600-\u06FF\u0750-\u07BF\u08A0–\u08BF]/;
50978
50979         function fixRTLTextForSvg(inputText) {
50980             var ret = '', rtlBuffer = [];
50981             var arabicRegex = /[\u0600-\u06FF]/g;
50982             var arabicDiacritics = /[\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06ED]/g;
50983             var arabicMath = /[\u0660-\u066C\u06F0-\u06F9]+/g;
50984             var thaanaVowel = /[\u07A6-\u07B0]/;
50985             var hebrewSign = /[\u0591-\u05bd\u05bf\u05c1-\u05c5\u05c7]/;
50986
50987             // Arabic word shaping
50988             if (arabicRegex.test(inputText)) {
50989                 inputText = lib_6(inputText);
50990             }
50991
50992             for (var n = 0; n < inputText.length; n++) {
50993                 var c = inputText[n];
50994                 if (arabicMath.test(c)) {
50995                     // Arabic numbers go LTR
50996                     ret += rtlBuffer.reverse().join('');
50997                     rtlBuffer = [c];
50998                 } else {
50999                     if (rtlBuffer.length && arabicMath.test(rtlBuffer[rtlBuffer.length - 1])) {
51000                         ret += rtlBuffer.reverse().join('');
51001                         rtlBuffer = [];
51002                     }
51003                     if ((thaanaVowel.test(c) || hebrewSign.test(c) || arabicDiacritics.test(c)) && rtlBuffer.length) {
51004                         rtlBuffer[rtlBuffer.length - 1] += c;
51005                     } else if (rtlRegex.test(c)
51006                         // include Arabic presentation forms
51007                         || (c.charCodeAt(0) >= 64336 && c.charCodeAt(0) <= 65023)
51008                         || (c.charCodeAt(0) >= 65136 && c.charCodeAt(0) <= 65279)) {
51009                         rtlBuffer.push(c);
51010                     } else if (c === ' ' && rtlBuffer.length) {
51011                         // whitespace within RTL text
51012                         rtlBuffer = [rtlBuffer.reverse().join('') + ' '];
51013                     } else {
51014                         // non-RTL character
51015                         ret += rtlBuffer.reverse().join('') + c;
51016                         rtlBuffer = [];
51017                     }
51018                 }
51019             }
51020             ret += rtlBuffer.reverse().join('');
51021             return ret;
51022         }
51023
51024         var translations = Object.create(null);
51025
51026         var currentLocale = 'en';
51027         var textDirection = 'ltr';
51028         var languageNames = {};
51029         var scriptNames = {};
51030
51031         function setLocale(val) {
51032             if (translations[val] !== undefined) {
51033                 currentLocale = val;
51034             } else if (translations[val.split('-')[0]]) {
51035                 currentLocale = val.split('-')[0];
51036             }
51037         }
51038
51039         function addTranslation(id, value) {
51040             translations[id] = value;
51041         }
51042
51043         /**
51044          * Given a string identifier, try to find that string in the current
51045          * language, and return it.  This function will be called recursively
51046          * with locale `en` if a string can not be found in the requested language.
51047          *
51048          * @param {string}   s   string identifier
51049          * @param {object?}  o   object of token replacements and default string
51050          * @param {string?}  loc locale to use
51051          * @returns {string?} locale string
51052          */
51053         function t(s, o, loc) {
51054             loc = loc || currentLocale;
51055
51056             var path = s
51057                 .split('.')
51058                 .map(function (s) { return s.replace(/<TX_DOT>/g, '.'); })
51059                 .reverse();
51060
51061             var rep = translations[loc];
51062
51063             while (rep !== undefined && path.length) {
51064                 rep = rep[path.pop()];
51065             }
51066
51067             if (rep !== undefined) {
51068                 if (o) {
51069                     for (var k in o) {
51070                         var variable = '{' + k + '}';
51071                         var re = new RegExp(variable, 'g'); // check globally for variables
51072                         rep = rep.replace(re, o[k]);
51073                     }
51074                 }
51075                 return rep;
51076             }
51077
51078             if (loc !== 'en') {
51079                 return t(s, o, 'en');
51080             }
51081
51082             if (o && 'default' in o) {
51083                 return o.default;
51084             }
51085
51086             var missing = 'Missing ' + loc + ' translation: ' + s;
51087             if (typeof console !== 'undefined') { console.error(missing); } // eslint-disable-line
51088
51089             return missing;
51090         }
51091
51092         /**
51093          * Given string 'ltr' or 'rtl', save that setting
51094          *
51095          * @param {string} dir ltr or rtl
51096          */
51097
51098         function setTextDirection(dir) {
51099             textDirection = dir;
51100         }
51101
51102         function setLanguageNames(obj) {
51103             languageNames = obj;
51104         }
51105
51106         function setScriptNames(obj) {
51107             scriptNames = obj;
51108         }
51109
51110         function languageName(code, options) {
51111             if (languageNames[code]) { // name in locale langauge
51112
51113                 // e.g. German
51114                 return languageNames[code];
51115             }
51116             // sometimes we only want the local name
51117             if (options && options.localOnly) { return null; }
51118
51119             var langInfo = dataLanguages[code];
51120
51121             if (langInfo) {
51122                 if (langInfo.nativeName) { // name in native language
51123
51124                     // e.g. Deutsch (de)
51125                     return t('translate.language_and_code', { language: langInfo.nativeName, code: code });
51126
51127                 } else if (langInfo.base && langInfo.script) {
51128
51129                     var base = langInfo.base; // the code of the langauge this is based on
51130
51131                     if (languageNames[base]) { // base language name in locale langauge
51132                         var scriptCode = langInfo.script;
51133                         var script = scriptNames[scriptCode] || scriptCode;
51134
51135                         // e.g. Serbian (Cyrillic)
51136                         return t('translate.language_and_code', { language: languageNames[base], code: script });
51137
51138                     } else if (dataLanguages[base] && dataLanguages[base].nativeName) {
51139
51140                         // e.g. српски (sr-Cyrl)
51141                         return t('translate.language_and_code', { language: dataLanguages[base].nativeName, code: code });
51142                     }
51143                 }
51144             }
51145             return code; // if not found, use the code
51146         }
51147
51148         var detected;
51149
51150         function utilDetect(force) {
51151             if (detected && !force) { return detected; }
51152             detected = {};
51153
51154             var ua = navigator.userAgent,
51155                 m = null,
51156                 q = utilStringQs(window.location.hash.substring(1));
51157
51158             m = ua.match(/(edge)\/?\s*(\.?\d+(\.\d+)*)/i);   // Edge
51159             if (m !== null) {
51160                 detected.browser = m[1];
51161                 detected.version = m[2];
51162             }
51163             if (!detected.browser) {
51164                 m = ua.match(/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/i);   // IE11
51165                 if (m !== null) {
51166                     detected.browser = 'msie';
51167                     detected.version = m[1];
51168                 }
51169             }
51170             if (!detected.browser) {
51171                 m = ua.match(/(opr)\/?\s*(\.?\d+(\.\d+)*)/i);   // Opera 15+
51172                 if (m !== null) {
51173                     detected.browser = 'Opera';
51174                     detected.version = m[2];
51175                 }
51176             }
51177             if (!detected.browser) {
51178                 m = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
51179                 if (m !== null) {
51180                     detected.browser = m[1];
51181                     detected.version = m[2];
51182                     m = ua.match(/version\/([\.\d]+)/i);
51183                     if (m !== null) { detected.version = m[1]; }
51184                 }
51185             }
51186             if (!detected.browser) {
51187                 detected.browser = navigator.appName;
51188                 detected.version = navigator.appVersion;
51189             }
51190
51191             // keep major.minor version only..
51192             detected.version = detected.version.split(/\W/).slice(0,2).join('.');
51193
51194             if (detected.browser.toLowerCase() === 'msie') {
51195                 detected.ie = true;
51196                 detected.browser = 'Internet Explorer';
51197                 detected.support = parseFloat(detected.version) >= 11;
51198             } else {
51199                 detected.ie = false;
51200                 detected.support = true;
51201             }
51202
51203             // Added due to incomplete svg style support. See #715
51204             detected.opera = (detected.browser.toLowerCase() === 'opera' && parseFloat(detected.version) < 15 );
51205
51206             // Set locale based on url param (format 'en-US') or browser lang (default)
51207             if (q.hasOwnProperty('locale')) {
51208                 detected.locale = q.locale;
51209                 detected.language = q.locale.split('-')[0];
51210             } else {
51211                 detected.locale = (navigator.language || navigator.userLanguage || 'en-US');
51212                 detected.language = detected.locale.split('-')[0];
51213
51214                 // Search `navigator.languages` for a better locale. Prefer the first language,
51215                 // unless the second language is a culture-specific version of the first one, see #3842
51216                 if (navigator.languages && navigator.languages.length > 0) {
51217                     var code0 = navigator.languages[0],
51218                         parts0 = code0.split('-');
51219
51220                     detected.locale = code0;
51221                     detected.language = parts0[0];
51222
51223                     if (navigator.languages.length > 1 && parts0.length === 1) {
51224                         var code1 = navigator.languages[1],
51225                             parts1 = code1.split('-');
51226
51227                         if (parts1[0] === parts0[0]) {
51228                             detected.locale = code1;
51229                         }
51230                     }
51231                 }
51232             }
51233
51234             // Loaded locale is stored in currentLocale
51235             // return that instead (except in the situation where 'en' might override 'en-US')
51236             var loadedLocale = currentLocale || 'en';
51237             if (loadedLocale !== 'en') {
51238                 detected.locale = loadedLocale;
51239                 detected.language = detected.locale.split('-')[0];
51240             }
51241
51242             // detect text direction
51243             var lang = dataLocales[detected.locale] || dataLocales[detected.language];
51244             if ((lang && lang.rtl) || (q.rtl === 'true')) {
51245                 detected.textDirection = 'rtl';
51246             } else {
51247                 detected.textDirection = 'ltr';
51248             }
51249             setTextDirection(detected.textDirection);
51250             setLanguageNames((lang && lang.languageNames) || {});
51251             setScriptNames((lang && lang.scriptNames) || {});
51252
51253             // detect host
51254             var loc = window.top.location;
51255             var origin = loc.origin;
51256             if (!origin) {  // for unpatched IE11
51257                 origin = loc.protocol + '//' + loc.hostname + (loc.port ? ':' + loc.port: '');
51258             }
51259
51260             detected.host = origin + loc.pathname;
51261
51262             detected.filedrop = (window.FileReader && 'ondrop' in window);
51263
51264             detected.download = !(detected.ie || detected.browser.toLowerCase() === 'edge');
51265
51266             detected.cssfilters = !(detected.ie || detected.browser.toLowerCase() === 'edge');
51267
51268             function nav(x) {
51269                 return navigator.userAgent.indexOf(x) !== -1;
51270             }
51271
51272             if (nav('Win')) {
51273                 detected.os = 'win';
51274                 detected.platform = 'Windows';
51275             }
51276             else if (nav('Mac')) {
51277                 detected.os = 'mac';
51278                 detected.platform = 'Macintosh';
51279             }
51280             else if (nav('X11') || nav('Linux')) {
51281                 detected.os = 'linux';
51282                 detected.platform = 'Linux';
51283             }
51284             else {
51285                 detected.os = 'win';
51286                 detected.platform = 'Unknown';
51287             }
51288
51289             return detected;
51290         }
51291
51292         function utilTagText(entity) {
51293             var obj = (entity && entity.tags) || {};
51294             return Object.keys(obj)
51295                 .map(function(k) { return k + '=' + obj[k]; })
51296                 .join(', ');
51297         }
51298
51299
51300         function utilTagDiff(oldTags, newTags) {
51301             var tagDiff = [];
51302             var keys = utilArrayUnion(Object.keys(oldTags), Object.keys(newTags)).sort();
51303             keys.forEach(function(k) {
51304                 var oldVal = oldTags[k];
51305                 var newVal = newTags[k];
51306
51307                 if (oldVal && (!newVal || newVal !== oldVal)) {
51308                     tagDiff.push({
51309                         type: '-',
51310                         key: k,
51311                         oldVal: oldVal,
51312                         newVal: newVal,
51313                         display: '- ' + k + '=' + oldVal
51314                     });
51315                 }
51316                 if (newVal && (!oldVal || newVal !== oldVal)) {
51317                     tagDiff.push({
51318                         type: '+',
51319                         key: k,
51320                         oldVal: oldVal,
51321                         newVal: newVal,
51322                         display: '+ ' + k + '=' + newVal
51323                     });
51324                 }
51325             });
51326             return tagDiff;
51327         }
51328
51329
51330         function utilEntitySelector(ids) {
51331             return ids.length ? '.' + ids.join(',.') : 'nothing';
51332         }
51333
51334
51335         // returns an selector to select entity ids for:
51336         //  - entityIDs passed in
51337         //  - shallow descendant entityIDs for any of those entities that are relations
51338         function utilEntityOrMemberSelector(ids, graph) {
51339             var seen = new Set(ids);
51340             ids.forEach(collectShallowDescendants);
51341             return utilEntitySelector(Array.from(seen));
51342
51343             function collectShallowDescendants(id) {
51344                 var entity = graph.hasEntity(id);
51345                 if (!entity || entity.type !== 'relation') { return; }
51346
51347                 entity.members
51348                     .map(function(member) { return member.id; })
51349                     .forEach(function(id) { seen.add(id); });
51350             }
51351         }
51352
51353
51354         // returns an selector to select entity ids for:
51355         //  - entityIDs passed in
51356         //  - deep descendant entityIDs for any of those entities that are relations
51357         function utilEntityOrDeepMemberSelector(ids, graph) {
51358             return utilEntitySelector(utilEntityAndDeepMemberIDs(ids, graph));
51359         }
51360
51361
51362         // returns an selector to select entity ids for:
51363         //  - entityIDs passed in
51364         //  - deep descendant entityIDs for any of those entities that are relations
51365         function utilEntityAndDeepMemberIDs(ids, graph) {
51366             var seen = new Set();
51367             ids.forEach(collectDeepDescendants);
51368             return Array.from(seen);
51369
51370             function collectDeepDescendants(id) {
51371                 if (seen.has(id)) { return; }
51372                 seen.add(id);
51373
51374                 var entity = graph.hasEntity(id);
51375                 if (!entity || entity.type !== 'relation') { return; }
51376
51377                 entity.members
51378                     .map(function(member) { return member.id; })
51379                     .forEach(collectDeepDescendants);   // recurse
51380             }
51381         }
51382
51383         // returns an selector to select entity ids for:
51384         //  - deep descendant entityIDs for any of those entities that are relations
51385         function utilDeepMemberSelector(ids, graph, skipMultipolgonMembers) {
51386             var idsSet = new Set(ids);
51387             var seen = new Set();
51388             var returners = new Set();
51389             ids.forEach(collectDeepDescendants);
51390             return utilEntitySelector(Array.from(returners));
51391
51392             function collectDeepDescendants(id) {
51393                 if (seen.has(id)) { return; }
51394                 seen.add(id);
51395
51396                 if (!idsSet.has(id)) {
51397                     returners.add(id);
51398                 }
51399
51400                 var entity = graph.hasEntity(id);
51401                 if (!entity || entity.type !== 'relation') { return; }
51402                 if (skipMultipolgonMembers && entity.isMultipolygon()) { return; }
51403                 entity.members
51404                     .map(function(member) { return member.id; })
51405                     .forEach(collectDeepDescendants);   // recurse
51406             }
51407         }
51408
51409
51410         // Adds or removes highlight styling for the specified entities
51411         function utilHighlightEntities(ids, highlighted, context) {
51412             context.surface()
51413                 .selectAll(utilEntityOrDeepMemberSelector(ids, context.graph()))
51414                 .classed('highlighted', highlighted);
51415         }
51416
51417
51418         // returns an Array that is the union of:
51419         //  - nodes for any nodeIDs passed in
51420         //  - child nodes of any wayIDs passed in
51421         //  - descendant member and child nodes of relationIDs passed in
51422         function utilGetAllNodes(ids, graph) {
51423             var seen = new Set();
51424             var nodes = new Set();
51425
51426             ids.forEach(collectNodes);
51427             return Array.from(nodes);
51428
51429             function collectNodes(id) {
51430                 if (seen.has(id)) { return; }
51431                 seen.add(id);
51432
51433                 var entity = graph.hasEntity(id);
51434                 if (!entity) { return; }
51435
51436                 if (entity.type === 'node') {
51437                     nodes.add(entity);
51438                 } else if (entity.type === 'way') {
51439                     entity.nodes.forEach(collectNodes);
51440                 } else {
51441                     entity.members
51442                         .map(function(member) { return member.id; })
51443                         .forEach(collectNodes);   // recurse
51444                 }
51445             }
51446         }
51447
51448
51449         function utilDisplayName(entity) {
51450             var localizedNameKey = 'name:' + utilDetect().locale.toLowerCase().split('-')[0];
51451             var name = entity.tags[localizedNameKey] || entity.tags.name || '';
51452             var network = entity.tags.cycle_network || entity.tags.network;
51453
51454             if (!name && entity.tags.ref) {
51455                 name = entity.tags.ref;
51456                 if (network) {
51457                     name = network + ' ' + name;
51458                 }
51459             }
51460
51461             return name;
51462         }
51463
51464
51465         function utilDisplayNameForPath(entity) {
51466             var name = utilDisplayName(entity);
51467             var isFirefox = utilDetect().browser.toLowerCase().indexOf('firefox') > -1;
51468
51469             if (!isFirefox && name && rtlRegex.test(name)) {
51470                 name = fixRTLTextForSvg(name);
51471             }
51472
51473             return name;
51474         }
51475
51476
51477         function utilDisplayType(id) {
51478             return {
51479                 n: t('inspector.node'),
51480                 w: t('inspector.way'),
51481                 r: t('inspector.relation')
51482             }[id.charAt(0)];
51483         }
51484
51485
51486         function utilDisplayLabel(entity, context) {
51487             var displayName = utilDisplayName(entity);
51488             if (displayName) {
51489                 // use the display name if there is one
51490                 return displayName;
51491             }
51492             var preset = utilPreset(entity, context);
51493             if (preset && preset.name()) {
51494                 // use the preset name if there is a match
51495                 return preset.name();
51496             }
51497             // fallback to the display type (node/way/relation)
51498             return utilDisplayType(entity.id);
51499         }
51500
51501
51502         function utilPreset(entity, context) {
51503             return context.presets().match(entity, context.graph());
51504         }
51505
51506
51507         function utilEntityRoot(entityType) {
51508             return {
51509                 node: 'n',
51510                 way: 'w',
51511                 relation: 'r'
51512             }[entityType];
51513         }
51514
51515
51516         function utilStringQs(str) {
51517             return str.split('&').reduce(function(obj, pair){
51518                 var parts = pair.split('=');
51519                 if (parts.length === 2) {
51520                     obj[parts[0]] = (null === parts[1]) ? '' : decodeURIComponent(parts[1]);
51521                 }
51522                 return obj;
51523             }, {});
51524         }
51525
51526
51527         function utilQsString(obj, noencode) {
51528             // encode everything except special characters used in certain hash parameters:
51529             // "/" in map states, ":", ",", {" and "}" in background
51530             function softEncode(s) {
51531                 return encodeURIComponent(s).replace(/(%2F|%3A|%2C|%7B|%7D)/g, decodeURIComponent);
51532             }
51533
51534             return Object.keys(obj).sort().map(function(key) {
51535                 return encodeURIComponent(key) + '=' + (
51536                     noencode ? softEncode(obj[key]) : encodeURIComponent(obj[key]));
51537             }).join('&');
51538         }
51539
51540
51541         function utilPrefixDOMProperty(property) {
51542             var prefixes = ['webkit', 'ms', 'moz', 'o'];
51543             var i = -1;
51544             var n = prefixes.length;
51545             var s = document.body;
51546
51547             if (property in s)
51548                 { return property; }
51549
51550             property = property.substr(0, 1).toUpperCase() + property.substr(1);
51551
51552             while (++i < n) {
51553                 if (prefixes[i] + property in s) {
51554                     return prefixes[i] + property;
51555                 }
51556             }
51557
51558             return false;
51559         }
51560
51561
51562         function utilPrefixCSSProperty(property) {
51563             var prefixes = ['webkit', 'ms', 'Moz', 'O'];
51564             var i = -1;
51565             var n = prefixes.length;
51566             var s = document.body.style;
51567
51568             if (property.toLowerCase() in s) {
51569                 return property.toLowerCase();
51570             }
51571
51572             while (++i < n) {
51573                 if (prefixes[i] + property in s) {
51574                     return '-' + prefixes[i].toLowerCase() + property.replace(/([A-Z])/g, '-$1').toLowerCase();
51575                 }
51576             }
51577
51578             return false;
51579         }
51580
51581
51582         var transformProperty;
51583         function utilSetTransform(el, x, y, scale) {
51584             var prop = transformProperty = transformProperty || utilPrefixCSSProperty('Transform');
51585             var translate = utilDetect().opera ? 'translate('   + x + 'px,' + y + 'px)'
51586                 : 'translate3d(' + x + 'px,' + y + 'px,0)';
51587             return el.style(prop, translate + (scale ? ' scale(' + scale + ')' : ''));
51588         }
51589
51590
51591         // Calculates Levenshtein distance between two strings
51592         // see:  https://en.wikipedia.org/wiki/Levenshtein_distance
51593         // first converts the strings to lowercase and replaces diacritic marks with ascii equivalents.
51594         function utilEditDistance(a, b) {
51595             a = remove$1(a.toLowerCase());
51596             b = remove$1(b.toLowerCase());
51597             if (a.length === 0) { return b.length; }
51598             if (b.length === 0) { return a.length; }
51599             var matrix = [];
51600             for (var i = 0; i <= b.length; i++) { matrix[i] = [i]; }
51601             for (var j = 0; j <= a.length; j++) { matrix[0][j] = j; }
51602             for (i = 1; i <= b.length; i++) {
51603                 for (j = 1; j <= a.length; j++) {
51604                     if (b.charAt(i-1) === a.charAt(j-1)) {
51605                         matrix[i][j] = matrix[i-1][j-1];
51606                     } else {
51607                         matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution
51608                             Math.min(matrix[i][j-1] + 1, // insertion
51609                             matrix[i-1][j] + 1)); // deletion
51610                     }
51611                 }
51612             }
51613             return matrix[b.length][a.length];
51614         }
51615
51616
51617         // a d3.mouse-alike which
51618         // 1. Only works on HTML elements, not SVG
51619         // 2. Does not cause style recalculation
51620         function utilFastMouse(container) {
51621             var rect = container.getBoundingClientRect();
51622             var rectLeft = rect.left;
51623             var rectTop = rect.top;
51624             var clientLeft = +container.clientLeft;
51625             var clientTop = +container.clientTop;
51626
51627             if (textDirection === 'rtl') {
51628                 rectLeft = 0;
51629             }
51630             return function(e) {
51631                 return [
51632                     e.clientX - rectLeft - clientLeft,
51633                     e.clientY - rectTop - clientTop];
51634             };
51635         }
51636
51637
51638         function utilAsyncMap(inputs, func, callback) {
51639             var remaining = inputs.length;
51640             var results = [];
51641             var errors = [];
51642
51643             inputs.forEach(function(d, i) {
51644                 func(d, function done(err, data) {
51645                     errors[i] = err;
51646                     results[i] = data;
51647                     remaining--;
51648                     if (!remaining) { callback(errors, results); }
51649                 });
51650             });
51651         }
51652
51653
51654         // wraps an index to an interval [0..length-1]
51655         function utilWrap(index, length) {
51656             if (index < 0) {
51657                 index += Math.ceil(-index/length)*length;
51658             }
51659             return index % length;
51660         }
51661
51662
51663         /**
51664          * a replacement for functor
51665          *
51666          * @param {*} value any value
51667          * @returns {Function} a function that returns that value or the value if it's a function
51668          */
51669         function utilFunctor(value) {
51670             if (typeof value === 'function') { return value; }
51671             return function() {
51672                 return value;
51673             };
51674         }
51675
51676
51677         function utilNoAuto(selection) {
51678             var isText = (selection.size() && selection.node().tagName.toLowerCase() === 'textarea');
51679
51680             return selection
51681                 // assign 'new-password' even for non-password fields to prevent browsers (Chrome) ignoring 'off'
51682                 .attr('autocomplete', 'new-password')
51683                 .attr('autocorrect', 'off')
51684                 .attr('autocapitalize', 'off')
51685                 .attr('spellcheck', isText ? 'true' : 'false');
51686         }
51687
51688
51689         // https://stackoverflow.com/questions/194846/is-there-any-kind-of-hash-code-function-in-javascript
51690         // https://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/
51691         function utilHashcode(str) {
51692             var hash = 0;
51693             if (str.length === 0) {
51694                 return hash;
51695             }
51696             for (var i = 0; i < str.length; i++) {
51697                 var char = str.charCodeAt(i);
51698                 hash = ((hash << 5) - hash) + char;
51699                 hash = hash & hash; // Convert to 32bit integer
51700             }
51701             return hash;
51702         }
51703
51704         // returns version of `str` with all runs of special characters replaced by `_`;
51705         // suitable for HTML ids, classes, selectors, etc.
51706         function utilSafeClassName(str) {
51707             return str.toLowerCase().replace(/[^a-z0-9]+/g, '_');
51708         }
51709
51710         function utilCleanTags(tags) {
51711             var out = {};
51712             for (var k in tags) {
51713                 if (!k) { continue; }
51714                 var v = tags[k];
51715                 if (v !== undefined) {
51716                     out[k] = cleanValue(k, v);
51717                 }
51718             }
51719
51720             return out;
51721
51722
51723             function cleanValue(k, v) {
51724                 function keepSpaces(k) {
51725                     return /_hours|_times|:conditional$/.test(k);
51726                 }
51727
51728                 function skip(k) {
51729                     return /^(description|note|fixme)$/.test(k);
51730                 }
51731
51732                 if (skip(k)) { return v; }
51733
51734                 var cleaned = v
51735                     .split(';')
51736                     .map(function(s) { return s.trim(); })
51737                     .join(keepSpaces(k) ? '; ' : ';');
51738
51739                 // The code below is not intended to validate websites and emails.
51740                 // It is only intended to prevent obvious copy-paste errors. (#2323)
51741                 // clean website- and email-like tags
51742                 if (k.indexOf('website') !== -1 ||
51743                     k.indexOf('email') !== -1 ||
51744                     cleaned.indexOf('http') === 0) {
51745                     cleaned = cleaned
51746                         .replace(/[\u200B-\u200F\uFEFF]/g, '');  // strip LRM and other zero width chars
51747
51748                 }
51749
51750                 return cleaned;
51751             }
51752         }
51753
51754         // Like selection.property('value', ...), but avoids no-op value sets,
51755         // which can result in layout/repaint thrashing in some situations.
51756         function utilGetSetValue(selection, value) {
51757             function d3_selection_value(value) {
51758                 function valueNull() {
51759                     delete this.value;
51760                 }
51761
51762                 function valueConstant() {
51763                     if (this.value !== value) {
51764                         this.value = value;
51765                     }
51766                 }
51767
51768                 function valueFunction() {
51769                     var x = value.apply(this, arguments);
51770                     if (x == null) {
51771                         delete this.value;
51772                     } else if (this.value !== x) {
51773                         this.value = x;
51774                     }
51775                 }
51776
51777                 return value == null
51778                     ? valueNull : (typeof value === 'function'
51779                     ? valueFunction : valueConstant);
51780             }
51781
51782             if (arguments.length === 1) {
51783                 return selection.property('value');
51784             }
51785
51786             return selection.each(d3_selection_value(value));
51787         }
51788
51789         function utilKeybinding(namespace) {
51790             var _keybindings = {};
51791
51792
51793             function testBindings(isCapturing) {
51794                 var didMatch = false;
51795                 var bindings = Object.keys(_keybindings).map(function(id) { return _keybindings[id]; });
51796                 var i, binding;
51797
51798                 // Most key shortcuts will accept either lower or uppercase ('h' or 'H'),
51799                 // so we don't strictly match on the shift key, but we prioritize
51800                 // shifted keybindings first, and fallback to unshifted only if no match.
51801                 // (This lets us differentiate between '←'/'⇧←' or '⌘Z'/'⌘⇧Z')
51802
51803                 // priority match shifted keybindings first
51804                 for (i = 0; i < bindings.length; i++) {
51805                     binding = bindings[i];
51806                     if (!binding.event.modifiers.shiftKey) { continue; }  // no shift
51807                     if (!!binding.capture !== isCapturing) { continue; }
51808                     if (matches(binding, true)) {
51809                         binding.callback();
51810                         didMatch = true;
51811                     }
51812                 }
51813
51814                 // then unshifted keybindings
51815                 if (didMatch) { return; }
51816                 for (i = 0; i < bindings.length; i++) {
51817                     binding = bindings[i];
51818                     if (binding.event.modifiers.shiftKey) { continue; }   // shift
51819                     if (!!binding.capture !== isCapturing) { continue; }
51820                     if (matches(binding, false)) {
51821                         binding.callback();
51822                     }
51823                 }
51824
51825
51826                 function matches(binding, testShift) {
51827                     var event$1 = event;
51828                     var isMatch = false;
51829                     var tryKeyCode = true;
51830
51831                     // Prefer a match on `KeyboardEvent.key`
51832                     if (event$1.key !== undefined) {
51833                         tryKeyCode = (event$1.key.charCodeAt(0) > 255);  // outside ISO-Latin-1
51834                         isMatch = true;
51835
51836                         if (binding.event.key === undefined) {
51837                             isMatch = false;
51838                         } else if (Array.isArray(binding.event.key)) {
51839                             if (binding.event.key.map(function(s) { return s.toLowerCase(); }).indexOf(event$1.key.toLowerCase()) === -1)
51840                                 { isMatch = false; }
51841                         } else {
51842                             if (event$1.key.toLowerCase() !== binding.event.key.toLowerCase())
51843                                 { isMatch = false; }
51844                         }
51845                     }
51846
51847                     // Fallback match on `KeyboardEvent.keyCode`, can happen if:
51848                     // - browser doesn't support `KeyboardEvent.key`
51849                     // - `KeyboardEvent.key` is outside ISO-Latin-1 range (cyrillic?)
51850                     if (!isMatch && tryKeyCode) {
51851                         isMatch = (event$1.keyCode === binding.event.keyCode);
51852                     }
51853
51854                     if (!isMatch) { return false; }
51855
51856                     // test modifier keys
51857                     if (!(event$1.ctrlKey && event$1.altKey)) {  // if both are set, assume AltGr and skip it - #4096
51858                         if (event$1.ctrlKey !== binding.event.modifiers.ctrlKey) { return false; }
51859                         if (event$1.altKey !== binding.event.modifiers.altKey) { return false; }
51860                     }
51861                     if (event$1.metaKey !== binding.event.modifiers.metaKey) { return false; }
51862                     if (testShift && event$1.shiftKey !== binding.event.modifiers.shiftKey) { return false; }
51863
51864                     return true;
51865                 }
51866             }
51867
51868
51869             function capture() {
51870                 testBindings(true);
51871             }
51872
51873
51874             function bubble() {
51875                 var tagName = d3_select(event.target).node().tagName;
51876                 if (tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA') {
51877                     return;
51878                 }
51879                 testBindings(false);
51880             }
51881
51882
51883             function keybinding(selection) {
51884                 selection = selection || d3_select(document);
51885                 selection.on('keydown.capture.' + namespace, capture, true);
51886                 selection.on('keydown.bubble.' + namespace, bubble, false);
51887                 return keybinding;
51888             }
51889
51890             // was: keybinding.off()
51891             keybinding.unbind = function(selection) {
51892                 _keybindings = [];
51893                 selection = selection || d3_select(document);
51894                 selection.on('keydown.capture.' + namespace, null);
51895                 selection.on('keydown.bubble.' + namespace, null);
51896                 return keybinding;
51897             };
51898
51899
51900             keybinding.clear = function() {
51901                 _keybindings = {};
51902                 return keybinding;
51903             };
51904
51905
51906             // Remove one or more keycode bindings.
51907             keybinding.off = function(codes, capture) {
51908                 var arr = utilArrayUniq([].concat(codes));
51909
51910                 for (var i = 0; i < arr.length; i++) {
51911                     var id = arr[i] + (capture ? '-capture' : '-bubble');
51912                     delete _keybindings[id];
51913                 }
51914                 return keybinding;
51915             };
51916
51917
51918             // Add one or more keycode bindings.
51919             keybinding.on = function(codes, callback, capture) {
51920                 if (typeof callback !== 'function') {
51921                     return keybinding.off(codes, capture);
51922                 }
51923
51924                 var arr = utilArrayUniq([].concat(codes));
51925
51926                 for (var i = 0; i < arr.length; i++) {
51927                     var id = arr[i] + (capture ? '-capture' : '-bubble');
51928                     var binding = {
51929                         id: id,
51930                         capture: capture,
51931                         callback: callback,
51932                         event: {
51933                             key: undefined,  // preferred
51934                             keyCode: 0,      // fallback
51935                             modifiers: {
51936                                 shiftKey: false,
51937                                 ctrlKey: false,
51938                                 altKey: false,
51939                                 metaKey: false
51940                             }
51941                         }
51942                     };
51943
51944                     if (_keybindings[id]) {
51945                         console.warn('warning: duplicate keybinding for "' + id + '"'); // eslint-disable-line no-console
51946                     }
51947
51948                     _keybindings[id] = binding;
51949
51950                     var matches = arr[i].toLowerCase().match(/(?:(?:[^+⇧⌃⌥⌘])+|[⇧⌃⌥⌘]|\+\+|^\+$)/g);
51951                     for (var j = 0; j < matches.length; j++) {
51952                         // Normalise matching errors
51953                         if (matches[j] === '++') { matches[j] = '+'; }
51954
51955                         if (matches[j] in utilKeybinding.modifierCodes) {
51956                             var prop = utilKeybinding.modifierProperties[utilKeybinding.modifierCodes[matches[j]]];
51957                             binding.event.modifiers[prop] = true;
51958                         } else {
51959                             binding.event.key = utilKeybinding.keys[matches[j]] || matches[j];
51960                             if (matches[j] in utilKeybinding.keyCodes) {
51961                                 binding.event.keyCode = utilKeybinding.keyCodes[matches[j]];
51962                             }
51963                         }
51964                     }
51965                 }
51966
51967                 return keybinding;
51968             };
51969
51970
51971             return keybinding;
51972         }
51973
51974
51975         /*
51976          * See https://github.com/keithamus/jwerty
51977          */
51978
51979         utilKeybinding.modifierCodes = {
51980             // Shift key, ⇧
51981             '⇧': 16, shift: 16,
51982             // CTRL key, on Mac: ⌃
51983             '⌃': 17, ctrl: 17,
51984             // ALT key, on Mac: ⌥ (Alt)
51985             '⌥': 18, alt: 18, option: 18,
51986             // META, on Mac: ⌘ (CMD), on Windows (Win), on Linux (Super)
51987             '⌘': 91, meta: 91, cmd: 91, 'super': 91, win: 91
51988         };
51989
51990         utilKeybinding.modifierProperties = {
51991             16: 'shiftKey',
51992             17: 'ctrlKey',
51993             18: 'altKey',
51994             91: 'metaKey'
51995         };
51996
51997         utilKeybinding.keys = {
51998             // Backspace key, on Mac: ⌫ (Backspace)
51999             '⌫': 'Backspace', backspace: 'Backspace',
52000             // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
52001             '⇥': 'Tab', '⇆': 'Tab', tab: 'Tab',
52002             // Return key, ↩
52003             '↩': 'Enter', 'return': 'Enter', enter: 'Enter', '⌅': 'Enter',
52004             // Pause/Break key
52005             'pause': 'Pause', 'pause-break': 'Pause',
52006             // Caps Lock key, ⇪
52007             '⇪': 'CapsLock', caps: 'CapsLock', 'caps-lock': 'CapsLock',
52008             // Escape key, on Mac: ⎋, on Windows: Esc
52009             '⎋': ['Escape', 'Esc'], escape: ['Escape', 'Esc'], esc: ['Escape', 'Esc'],
52010             // Space key
52011             space: [' ', 'Spacebar'],
52012             // Page-Up key, or pgup, on Mac: ↖
52013             '↖': 'PageUp', pgup: 'PageUp', 'page-up': 'PageUp',
52014             // Page-Down key, or pgdown, on Mac: ↘
52015             '↘': 'PageDown', pgdown: 'PageDown', 'page-down': 'PageDown',
52016             // END key, on Mac: ⇟
52017             '⇟': 'End', end: 'End',
52018             // HOME key, on Mac: ⇞
52019             '⇞': 'Home', home: 'Home',
52020             // Insert key, or ins
52021             ins: 'Insert', insert: 'Insert',
52022             // Delete key, on Mac: ⌦ (Delete)
52023             '⌦': ['Delete', 'Del'], del: ['Delete', 'Del'], 'delete': ['Delete', 'Del'],
52024             // Left Arrow Key, or ←
52025             '←': ['ArrowLeft', 'Left'], left: ['ArrowLeft', 'Left'], 'arrow-left': ['ArrowLeft', 'Left'],
52026             // Up Arrow Key, or ↑
52027             '↑': ['ArrowUp', 'Up'], up: ['ArrowUp', 'Up'], 'arrow-up': ['ArrowUp', 'Up'],
52028             // Right Arrow Key, or →
52029             '→': ['ArrowRight', 'Right'], right: ['ArrowRight', 'Right'], 'arrow-right': ['ArrowRight', 'Right'],
52030             // Up Arrow Key, or ↓
52031             '↓': ['ArrowDown', 'Down'], down: ['ArrowDown', 'Down'], 'arrow-down': ['ArrowDown', 'Down'],
52032             // odities, stuff for backward compatibility (browsers and code):
52033             // Num-Multiply, or *
52034             '*': ['*', 'Multiply'], star: ['*', 'Multiply'], asterisk: ['*', 'Multiply'], multiply: ['*', 'Multiply'],
52035             // Num-Plus or +
52036             '+': ['+', 'Add'], 'plus': ['+', 'Add'],
52037             // Num-Subtract, or -
52038             '-': ['-', 'Subtract'], subtract: ['-', 'Subtract'], 'dash': ['-', 'Subtract'],
52039             // Semicolon
52040             semicolon: ';',
52041             // = or equals
52042             equals: '=',
52043             // Comma, or ,
52044             comma: ',',
52045             // Period, or ., or full-stop
52046             period: '.', 'full-stop': '.',
52047             // Slash, or /, or forward-slash
52048             slash: '/', 'forward-slash': '/',
52049             // Tick, or `, or back-quote
52050             tick: '`', 'back-quote': '`',
52051             // Open bracket, or [
52052             'open-bracket': '[',
52053             // Back slash, or \
52054             'back-slash': '\\',
52055             // Close backet, or ]
52056             'close-bracket': ']',
52057             // Apostrophe, or Quote, or '
52058             quote: '\'', apostrophe: '\'',
52059             // NUMPAD 0-9
52060             'num-0': '0',
52061             'num-1': '1',
52062             'num-2': '2',
52063             'num-3': '3',
52064             'num-4': '4',
52065             'num-5': '5',
52066             'num-6': '6',
52067             'num-7': '7',
52068             'num-8': '8',
52069             'num-9': '9',
52070             // F1-F25
52071             f1: 'F1',
52072             f2: 'F2',
52073             f3: 'F3',
52074             f4: 'F4',
52075             f5: 'F5',
52076             f6: 'F6',
52077             f7: 'F7',
52078             f8: 'F8',
52079             f9: 'F9',
52080             f10: 'F10',
52081             f11: 'F11',
52082             f12: 'F12',
52083             f13: 'F13',
52084             f14: 'F14',
52085             f15: 'F15',
52086             f16: 'F16',
52087             f17: 'F17',
52088             f18: 'F18',
52089             f19: 'F19',
52090             f20: 'F20',
52091             f21: 'F21',
52092             f22: 'F22',
52093             f23: 'F23',
52094             f24: 'F24',
52095             f25: 'F25'
52096         };
52097
52098         utilKeybinding.keyCodes = {
52099             // Backspace key, on Mac: ⌫ (Backspace)
52100             '⌫': 8, backspace: 8,
52101             // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
52102             '⇥': 9, '⇆': 9, tab: 9,
52103             // Return key, ↩
52104             '↩': 13, 'return': 13, enter: 13, '⌅': 13,
52105             // Pause/Break key
52106             'pause': 19, 'pause-break': 19,
52107             // Caps Lock key, ⇪
52108             '⇪': 20, caps: 20, 'caps-lock': 20,
52109             // Escape key, on Mac: ⎋, on Windows: Esc
52110             '⎋': 27, escape: 27, esc: 27,
52111             // Space key
52112             space: 32,
52113             // Page-Up key, or pgup, on Mac: ↖
52114             '↖': 33, pgup: 33, 'page-up': 33,
52115             // Page-Down key, or pgdown, on Mac: ↘
52116             '↘': 34, pgdown: 34, 'page-down': 34,
52117             // END key, on Mac: ⇟
52118             '⇟': 35, end: 35,
52119             // HOME key, on Mac: ⇞
52120             '⇞': 36, home: 36,
52121             // Insert key, or ins
52122             ins: 45, insert: 45,
52123             // Delete key, on Mac: ⌦ (Delete)
52124             '⌦': 46, del: 46, 'delete': 46,
52125             // Left Arrow Key, or ←
52126             '←': 37, left: 37, 'arrow-left': 37,
52127             // Up Arrow Key, or ↑
52128             '↑': 38, up: 38, 'arrow-up': 38,
52129             // Right Arrow Key, or →
52130             '→': 39, right: 39, 'arrow-right': 39,
52131             // Up Arrow Key, or ↓
52132             '↓': 40, down: 40, 'arrow-down': 40,
52133             // odities, printing characters that come out wrong:
52134             // Firefox Equals
52135             'ffequals': 61,
52136             // Num-Multiply, or *
52137             '*': 106, star: 106, asterisk: 106, multiply: 106,
52138             // Num-Plus or +
52139             '+': 107, 'plus': 107,
52140             // Num-Subtract, or -
52141             '-': 109, subtract: 109,
52142             // Firefox Plus
52143             'ffplus': 171,
52144             // Firefox Minus
52145             'ffminus': 173,
52146             // Semicolon
52147             ';': 186, semicolon: 186,
52148             // = or equals
52149             '=': 187, 'equals': 187,
52150             // Comma, or ,
52151             ',': 188, comma: 188,
52152             // Dash / Underscore key
52153             'dash': 189,
52154             // Period, or ., or full-stop
52155             '.': 190, period: 190, 'full-stop': 190,
52156             // Slash, or /, or forward-slash
52157             '/': 191, slash: 191, 'forward-slash': 191,
52158             // Tick, or `, or back-quote
52159             '`': 192, tick: 192, 'back-quote': 192,
52160             // Open bracket, or [
52161             '[': 219, 'open-bracket': 219,
52162             // Back slash, or \
52163             '\\': 220, 'back-slash': 220,
52164             // Close backet, or ]
52165             ']': 221, 'close-bracket': 221,
52166             // Apostrophe, or Quote, or '
52167             '\'': 222, quote: 222, apostrophe: 222
52168         };
52169
52170         // NUMPAD 0-9
52171         var i$2 = 95, n = 0;
52172         while (++i$2 < 106) {
52173             utilKeybinding.keyCodes['num-' + n] = i$2;
52174             ++n;
52175         }
52176
52177         // 0-9
52178         i$2 = 47; n = 0;
52179         while (++i$2 < 58) {
52180             utilKeybinding.keyCodes[n] = i$2;
52181             ++n;
52182         }
52183
52184         // F1-F25
52185         i$2 = 111; n = 1;
52186         while (++i$2 < 136) {
52187             utilKeybinding.keyCodes['f' + n] = i$2;
52188             ++n;
52189         }
52190
52191         // a-z
52192         i$2 = 64;
52193         while (++i$2 < 91) {
52194             utilKeybinding.keyCodes[String.fromCharCode(i$2).toLowerCase()] = i$2;
52195         }
52196
52197         function utilObjectOmit(obj, omitKeys) {
52198             return Object.keys(obj).reduce(function(result, key) {
52199                 if (omitKeys.indexOf(key) === -1) {
52200                     result[key] = obj[key];  // keep
52201                 }
52202                 return result;
52203             }, {});
52204         }
52205
52206         // Copies a variable number of methods from source to target.
52207         function utilRebind(target, source) {
52208             var arguments$1 = arguments;
52209
52210             var i = 1, n = arguments.length, method;
52211             while (++i < n) {
52212                 target[method = arguments$1[i]] = d3_rebind(target, source, source[method]);
52213             }
52214             return target;
52215         }
52216
52217         // Method is assumed to be a standard D3 getter-setter:
52218         // If passed with no arguments, gets the value.
52219         // If passed with arguments, sets the value and returns the target.
52220         function d3_rebind(target, source, method) {
52221             return function() {
52222                 var value = method.apply(source, arguments);
52223                 return value === source ? target : value;
52224             };
52225         }
52226
52227         // A per-domain session mutex backed by a cookie and dead man's
52228         // switch. If the session crashes, the mutex will auto-release
52229         // after 5 seconds.
52230
52231         // This accepts a string and returns an object that complies with utilSessionMutexType
52232         function utilSessionMutex(name) {
52233             var mutex = {};
52234             var intervalID;
52235
52236             function renew() {
52237                 var expires = new Date();
52238                 expires.setSeconds(expires.getSeconds() + 5);
52239                 document.cookie = name + '=1; expires=' + expires.toUTCString();
52240             }
52241
52242             mutex.lock = function () {
52243                 if (intervalID) { return true; }
52244                 var cookie = document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + name + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1');
52245                 if (cookie) { return false; }
52246                 renew();
52247                 intervalID = window.setInterval(renew, 4000);
52248                 return true;
52249             };
52250
52251             mutex.unlock = function () {
52252                 if (!intervalID) { return; }
52253                 document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT';
52254                 clearInterval(intervalID);
52255                 intervalID = null;
52256             };
52257
52258             mutex.locked = function () {
52259                 return !!intervalID;
52260             };
52261
52262             return mutex;
52263         }
52264
52265         function utilTiler() {
52266             var _size = [256, 256];
52267             var _scale = 256;
52268             var _tileSize = 256;
52269             var _zoomExtent = [0, 20];
52270             var _translate = [_size[0] / 2, _size[1] / 2];
52271             var _margin = 0;
52272             var _skipNullIsland = false;
52273
52274
52275             function clamp(num, min, max) {
52276                 return Math.max(min, Math.min(num, max));
52277             }
52278
52279
52280             function nearNullIsland(tile) {
52281                 var x = tile[0];
52282                 var y = tile[1];
52283                 var z = tile[2];
52284                 if (z >= 7) {
52285                     var center = Math.pow(2, z - 1);
52286                     var width = Math.pow(2, z - 6);
52287                     var min = center - (width / 2);
52288                     var max = center + (width / 2) - 1;
52289                     return x >= min && x <= max && y >= min && y <= max;
52290                 }
52291                 return false;
52292             }
52293
52294
52295             function tiler() {
52296                 var z = geoScaleToZoom(_scale / (2 * Math.PI), _tileSize);
52297                 var z0 = clamp(Math.round(z), _zoomExtent[0], _zoomExtent[1]);
52298                 var tileMin = 0;
52299                 var tileMax = Math.pow(2, z0) - 1;
52300                 var log2ts = Math.log(_tileSize) * Math.LOG2E;
52301                 var k = Math.pow(2, z - z0 + log2ts);
52302                 var origin = [
52303                     (_translate[0] - _scale / 2) / k,
52304                     (_translate[1] - _scale / 2) / k
52305                 ];
52306
52307                 var cols = d3_range(
52308                     clamp(Math.floor(-origin[0]) - _margin,               tileMin, tileMax + 1),
52309                     clamp(Math.ceil(_size[0] / k - origin[0]) + _margin,  tileMin, tileMax + 1)
52310                 );
52311                 var rows = d3_range(
52312                     clamp(Math.floor(-origin[1]) - _margin,               tileMin, tileMax + 1),
52313                     clamp(Math.ceil(_size[1] / k - origin[1]) + _margin,  tileMin, tileMax + 1)
52314                 );
52315
52316                 var tiles = [];
52317                 for (var i = 0; i < rows.length; i++) {
52318                     var y = rows[i];
52319                     for (var j = 0; j < cols.length; j++) {
52320                         var x = cols[j];
52321
52322                         if (i >= _margin && i <= rows.length - _margin &&
52323                             j >= _margin && j <= cols.length - _margin) {
52324                             tiles.unshift([x, y, z0]);  // tiles in view at beginning
52325                         } else {
52326                             tiles.push([x, y, z0]);     // tiles in margin at the end
52327                         }
52328                     }
52329                 }
52330
52331                 tiles.translate = origin;
52332                 tiles.scale = k;
52333
52334                 return tiles;
52335             }
52336
52337
52338             /**
52339              * getTiles() returns an array of tiles that cover the map view
52340              */
52341             tiler.getTiles = function(projection) {
52342                 var origin = [
52343                     projection.scale() * Math.PI - projection.translate()[0],
52344                     projection.scale() * Math.PI - projection.translate()[1]
52345                 ];
52346
52347                 this
52348                     .size(projection.clipExtent()[1])
52349                     .scale(projection.scale() * 2 * Math.PI)
52350                     .translate(projection.translate());
52351
52352                 var tiles = tiler();
52353                 var ts = tiles.scale;
52354
52355                 return tiles
52356                     .map(function(tile) {
52357                         if (_skipNullIsland && nearNullIsland(tile)) {
52358                             return false;
52359                         }
52360                         var x = tile[0] * ts - origin[0];
52361                         var y = tile[1] * ts - origin[1];
52362                         return {
52363                             id: tile.toString(),
52364                             xyz: tile,
52365                             extent: geoExtent(
52366                                 projection.invert([x, y + ts]),
52367                                 projection.invert([x + ts, y])
52368                             )
52369                         };
52370                     }).filter(Boolean);
52371             };
52372
52373
52374             /**
52375              * getGeoJSON() returns a FeatureCollection for debugging tiles
52376              */
52377             tiler.getGeoJSON = function(projection) {
52378                 var features = tiler.getTiles(projection).map(function(tile) {
52379                     return {
52380                         type: 'Feature',
52381                         properties: {
52382                             id: tile.id,
52383                             name: tile.id
52384                         },
52385                         geometry: {
52386                             type: 'Polygon',
52387                             coordinates: [ tile.extent.polygon() ]
52388                         }
52389                     };
52390                 });
52391
52392                 return {
52393                     type: 'FeatureCollection',
52394                     features: features
52395                 };
52396             };
52397
52398
52399             tiler.tileSize = function(val) {
52400                 if (!arguments.length) { return _tileSize; }
52401                 _tileSize = val;
52402                 return tiler;
52403             };
52404
52405
52406             tiler.zoomExtent = function(val) {
52407                 if (!arguments.length) { return _zoomExtent; }
52408                 _zoomExtent = val;
52409                 return tiler;
52410             };
52411
52412
52413             tiler.size = function(val) {
52414                 if (!arguments.length) { return _size; }
52415                 _size = val;
52416                 return tiler;
52417             };
52418
52419
52420             tiler.scale = function(val) {
52421                 if (!arguments.length) { return _scale; }
52422                 _scale = val;
52423                 return tiler;
52424             };
52425
52426
52427             tiler.translate = function(val) {
52428                 if (!arguments.length) { return _translate; }
52429                 _translate = val;
52430                 return tiler;
52431             };
52432
52433
52434             // number to extend the rows/columns beyond those covering the viewport
52435             tiler.margin = function(val) {
52436                 if (!arguments.length) { return _margin; }
52437                 _margin = +val;
52438                 return tiler;
52439             };
52440
52441
52442             tiler.skipNullIsland = function(val) {
52443                 if (!arguments.length) { return _skipNullIsland; }
52444                 _skipNullIsland = val;
52445                 return tiler;
52446             };
52447
52448
52449             return tiler;
52450         }
52451
52452         function utilTriggerEvent(target, type) {
52453             target.each(function() {
52454                 var evt = document.createEvent('HTMLEvents');
52455                 evt.initEvent(type, true, true);
52456                 this.dispatchEvent(evt);
52457             });
52458         }
52459
52460         function osmEntity(attrs) {
52461             // For prototypal inheritance.
52462             if (this instanceof osmEntity) { return; }
52463
52464             // Create the appropriate subtype.
52465             if (attrs && attrs.type) {
52466                 return osmEntity[attrs.type].apply(this, arguments);
52467             } else if (attrs && attrs.id) {
52468                 return osmEntity[osmEntity.id.type(attrs.id)].apply(this, arguments);
52469             }
52470
52471             // Initialize a generic Entity (used only in tests).
52472             return (new osmEntity()).initialize(arguments);
52473         }
52474
52475
52476         osmEntity.id = function(type) {
52477             return osmEntity.id.fromOSM(type, osmEntity.id.next[type]--);
52478         };
52479
52480
52481         osmEntity.id.next = {
52482             changeset: -1, node: -1, way: -1, relation: -1
52483         };
52484
52485
52486         osmEntity.id.fromOSM = function(type, id) {
52487             return type[0] + id;
52488         };
52489
52490
52491         osmEntity.id.toOSM = function(id) {
52492             return id.slice(1);
52493         };
52494
52495
52496         osmEntity.id.type = function(id) {
52497             return { 'c': 'changeset', 'n': 'node', 'w': 'way', 'r': 'relation' }[id[0]];
52498         };
52499
52500
52501         // A function suitable for use as the second argument to d3.selection#data().
52502         osmEntity.key = function(entity) {
52503             return entity.id + 'v' + (entity.v || 0);
52504         };
52505
52506         var _deprecatedTagValuesByKey;
52507
52508         osmEntity.deprecatedTagValuesByKey = function() {
52509             if (!_deprecatedTagValuesByKey) {
52510                 _deprecatedTagValuesByKey = {};
52511                 dataDeprecated.forEach(function(d) {
52512                     var oldKeys = Object.keys(d.old);
52513                     if (oldKeys.length === 1) {
52514                         var oldKey = oldKeys[0];
52515                         var oldValue = d.old[oldKey];
52516                         if (oldValue !== '*') {
52517                             if (!_deprecatedTagValuesByKey[oldKey]) {
52518                                 _deprecatedTagValuesByKey[oldKey] = [oldValue];
52519                             } else {
52520                                 _deprecatedTagValuesByKey[oldKey].push(oldValue);
52521                             }
52522                         }
52523                     }
52524                 });
52525             }
52526             return _deprecatedTagValuesByKey;
52527         };
52528
52529
52530         osmEntity.prototype = {
52531
52532             tags: {},
52533
52534
52535             initialize: function(sources) {
52536                 for (var i = 0; i < sources.length; ++i) {
52537                     var source = sources[i];
52538                     for (var prop in source) {
52539                         if (Object.prototype.hasOwnProperty.call(source, prop)) {
52540                             if (source[prop] === undefined) {
52541                                 delete this[prop];
52542                             } else {
52543                                 this[prop] = source[prop];
52544                             }
52545                         }
52546                     }
52547                 }
52548
52549                 if (!this.id && this.type) {
52550                     this.id = osmEntity.id(this.type);
52551                 }
52552                 if (!this.hasOwnProperty('visible')) {
52553                     this.visible = true;
52554                 }
52555
52556                 return this;
52557             },
52558
52559
52560             copy: function(resolver, copies) {
52561                 if (copies[this.id])
52562                     { return copies[this.id]; }
52563
52564                 var copy = osmEntity(this, { id: undefined, user: undefined, version: undefined });
52565                 copies[this.id] = copy;
52566
52567                 return copy;
52568             },
52569
52570
52571             osmId: function() {
52572                 return osmEntity.id.toOSM(this.id);
52573             },
52574
52575
52576             isNew: function() {
52577                 return this.osmId() < 0;
52578             },
52579
52580
52581             update: function(attrs) {
52582                 return osmEntity(this, attrs, { v: 1 + (this.v || 0) });
52583             },
52584
52585
52586             mergeTags: function(tags) {
52587                 var merged = Object.assign({}, this.tags);   // shallow copy
52588                 var changed = false;
52589                 for (var k in tags) {
52590                     var t1 = merged[k];
52591                     var t2 = tags[k];
52592                     if (!t1) {
52593                         changed = true;
52594                         merged[k] = t2;
52595                     } else if (t1 !== t2) {
52596                         changed = true;
52597                         merged[k] = utilArrayUnion(t1.split(/;\s*/), t2.split(/;\s*/)).join(';');
52598                     }
52599                 }
52600                 return changed ? this.update({ tags: merged }) : this;
52601             },
52602
52603
52604             intersects: function(extent, resolver) {
52605                 return this.extent(resolver).intersects(extent);
52606             },
52607
52608
52609             hasNonGeometryTags: function() {
52610                 return Object.keys(this.tags).some(function(k) { return k !== 'area'; });
52611             },
52612
52613             hasParentRelations: function(resolver) {
52614                 return resolver.parentRelations(this).length > 0;
52615             },
52616
52617             hasInterestingTags: function() {
52618                 return Object.keys(this.tags).some(osmIsInterestingTag);
52619             },
52620
52621             hasWikidata: function() {
52622                 return !!this.tags.wikidata || !!this.tags['brand:wikidata'];
52623             },
52624
52625             isHighwayIntersection: function() {
52626                 return false;
52627             },
52628
52629             isDegenerate: function() {
52630                 return true;
52631             },
52632
52633             deprecatedTags: function() {
52634                 var tags = this.tags;
52635
52636                 // if there are no tags, none can be deprecated
52637                 if (Object.keys(tags).length === 0) { return []; }
52638
52639                 var deprecated = [];
52640                 dataDeprecated.forEach(function(d) {
52641                     var oldKeys = Object.keys(d.old);
52642                     var matchesDeprecatedTags = oldKeys.every(function(oldKey) {
52643                         if (!tags[oldKey]) { return false; }
52644                         if (d.old[oldKey] === '*') { return true; }
52645
52646                         var vals = tags[oldKey].split(';').filter(Boolean);
52647                         if (vals.length === 0) {
52648                             return false;
52649                         } else if (vals.length > 1) {
52650                             return vals.indexOf(d.old[oldKey]) !== -1;
52651                         } else {
52652                             if (tags[oldKey] === d.old[oldKey]) {
52653                                 if (d.replace && d.old[oldKey] === d.replace[oldKey]) {
52654                                     var replaceKeys = Object.keys(d.replace);
52655                                     return !replaceKeys.every(function(replaceKey) {
52656                                         return tags[replaceKey] === d.replace[replaceKey];
52657                                     });
52658                                 } else {
52659                                     return true;
52660                                 }
52661                             }
52662                         }
52663                         return false;
52664                     });
52665                     if (matchesDeprecatedTags) {
52666                         deprecated.push(d);
52667                     }
52668                 });
52669
52670                 return deprecated;
52671             }
52672         };
52673
52674         function osmLanes(entity) {
52675             if (entity.type !== 'way') { return null; }
52676             if (!entity.tags.highway) { return null; }
52677
52678             var tags = entity.tags;
52679             var isOneWay = entity.isOneWay();
52680             var laneCount = getLaneCount(tags, isOneWay);
52681             var maxspeed = parseMaxspeed(tags);
52682
52683             var laneDirections = parseLaneDirections(tags, isOneWay, laneCount);
52684             var forward = laneDirections.forward;
52685             var backward = laneDirections.backward;
52686             var bothways = laneDirections.bothways;
52687
52688             // parse the piped string 'x|y|z' format
52689             var turnLanes = {};
52690             turnLanes.unspecified = parseTurnLanes(tags['turn:lanes']);
52691             turnLanes.forward = parseTurnLanes(tags['turn:lanes:forward']);
52692             turnLanes.backward = parseTurnLanes(tags['turn:lanes:backward']);
52693
52694             var maxspeedLanes = {};
52695             maxspeedLanes.unspecified = parseMaxspeedLanes(tags['maxspeed:lanes'], maxspeed);
52696             maxspeedLanes.forward = parseMaxspeedLanes(tags['maxspeed:lanes:forward'], maxspeed);
52697             maxspeedLanes.backward = parseMaxspeedLanes(tags['maxspeed:lanes:backward'], maxspeed);
52698
52699             var psvLanes = {};
52700             psvLanes.unspecified = parseMiscLanes(tags['psv:lanes']);
52701             psvLanes.forward = parseMiscLanes(tags['psv:lanes:forward']);
52702             psvLanes.backward = parseMiscLanes(tags['psv:lanes:backward']);
52703
52704             var busLanes = {};
52705             busLanes.unspecified = parseMiscLanes(tags['bus:lanes']);
52706             busLanes.forward = parseMiscLanes(tags['bus:lanes:forward']);
52707             busLanes.backward = parseMiscLanes(tags['bus:lanes:backward']);
52708
52709             var taxiLanes = {};
52710             taxiLanes.unspecified = parseMiscLanes(tags['taxi:lanes']);
52711             taxiLanes.forward = parseMiscLanes(tags['taxi:lanes:forward']);
52712             taxiLanes.backward = parseMiscLanes(tags['taxi:lanes:backward']);
52713
52714             var hovLanes = {};
52715             hovLanes.unspecified = parseMiscLanes(tags['hov:lanes']);
52716             hovLanes.forward = parseMiscLanes(tags['hov:lanes:forward']);
52717             hovLanes.backward = parseMiscLanes(tags['hov:lanes:backward']);
52718
52719             var hgvLanes = {};
52720             hgvLanes.unspecified = parseMiscLanes(tags['hgv:lanes']);
52721             hgvLanes.forward = parseMiscLanes(tags['hgv:lanes:forward']);
52722             hgvLanes.backward = parseMiscLanes(tags['hgv:lanes:backward']);
52723
52724             var bicyclewayLanes = {};
52725             bicyclewayLanes.unspecified = parseBicycleWay(tags['bicycleway:lanes']);
52726             bicyclewayLanes.forward = parseBicycleWay(tags['bicycleway:lanes:forward']);
52727             bicyclewayLanes.backward = parseBicycleWay(tags['bicycleway:lanes:backward']);
52728
52729             var lanesObj = {
52730                 forward: [],
52731                 backward: [],
52732                 unspecified: []
52733             };
52734
52735             // map forward/backward/unspecified of each lane type to lanesObj
52736             mapToLanesObj(lanesObj, turnLanes, 'turnLane');
52737             mapToLanesObj(lanesObj, maxspeedLanes, 'maxspeed');
52738             mapToLanesObj(lanesObj, psvLanes, 'psv');
52739             mapToLanesObj(lanesObj, busLanes, 'bus');
52740             mapToLanesObj(lanesObj, taxiLanes, 'taxi');
52741             mapToLanesObj(lanesObj, hovLanes, 'hov');
52742             mapToLanesObj(lanesObj, hgvLanes, 'hgv');
52743             mapToLanesObj(lanesObj, bicyclewayLanes, 'bicycleway');
52744
52745             return {
52746                 metadata: {
52747                     count: laneCount,
52748                     oneway: isOneWay,
52749                     forward: forward,
52750                     backward: backward,
52751                     bothways: bothways,
52752                     turnLanes: turnLanes,
52753                     maxspeed: maxspeed,
52754                     maxspeedLanes: maxspeedLanes,
52755                     psvLanes: psvLanes,
52756                     busLanes: busLanes,
52757                     taxiLanes: taxiLanes,
52758                     hovLanes: hovLanes,
52759                     hgvLanes: hgvLanes,
52760                     bicyclewayLanes: bicyclewayLanes
52761                 },
52762                 lanes: lanesObj
52763             };
52764         }
52765
52766
52767         function getLaneCount(tags, isOneWay) {
52768             var count;
52769             if (tags.lanes) {
52770                 count = parseInt(tags.lanes, 10);
52771                 if (count > 0) {
52772                     return count;
52773                 }
52774             }
52775
52776
52777             switch (tags.highway) {
52778                 case 'trunk':
52779                 case 'motorway':
52780                     count = isOneWay ? 2 : 4;
52781                     break;
52782                 default:
52783                     count = isOneWay ? 1 : 2;
52784                     break;
52785             }
52786
52787             return count;
52788         }
52789
52790
52791         function parseMaxspeed(tags) {
52792             var maxspeed = tags.maxspeed;
52793             if (!maxspeed) { return; }
52794
52795             var maxspeedRegex = /^([0-9][\.0-9]+?)(?:[ ]?(?:km\/h|kmh|kph|mph|knots))?$/;
52796             if (!maxspeedRegex.test(maxspeed)) { return; }
52797
52798             return parseInt(maxspeed, 10);
52799         }
52800
52801
52802         function parseLaneDirections(tags, isOneWay, laneCount) {
52803             var forward = parseInt(tags['lanes:forward'], 10);
52804             var backward = parseInt(tags['lanes:backward'], 10);
52805             var bothways = parseInt(tags['lanes:both_ways'], 10) > 0 ? 1 : 0;
52806
52807             if (parseInt(tags.oneway, 10) === -1) {
52808                 forward = 0;
52809                 bothways = 0;
52810                 backward = laneCount;
52811             }
52812             else if (isOneWay) {
52813                 forward = laneCount;
52814                 bothways = 0;
52815                 backward = 0;
52816             }
52817             else if (isNaN(forward) && isNaN(backward)) {
52818                 backward = Math.floor((laneCount - bothways) / 2);
52819                 forward = laneCount - bothways - backward;
52820             }
52821             else if (isNaN(forward)) {
52822                 if (backward > laneCount - bothways) {
52823                     backward = laneCount - bothways;
52824                 }
52825                 forward = laneCount - bothways - backward;
52826             }
52827             else if (isNaN(backward)) {
52828                 if (forward > laneCount - bothways) {
52829                     forward = laneCount - bothways;
52830                 }
52831                 backward = laneCount - bothways - forward;
52832             }
52833             return {
52834                 forward: forward,
52835                 backward: backward,
52836                 bothways: bothways
52837             };
52838         }
52839
52840
52841         function parseTurnLanes(tag){
52842             if (!tag) { return; }
52843
52844             var validValues = [
52845                 'left', 'slight_left', 'sharp_left', 'through', 'right', 'slight_right',
52846                 'sharp_right', 'reverse', 'merge_to_left', 'merge_to_right', 'none'
52847             ];
52848
52849             return tag.split('|')
52850                 .map(function (s) {
52851                     if (s === '') { s = 'none'; }
52852                     return s.split(';')
52853                         .map(function (d) {
52854                             return validValues.indexOf(d) === -1 ? 'unknown': d;
52855                         });
52856                 });
52857         }
52858
52859
52860         function parseMaxspeedLanes(tag, maxspeed) {
52861             if (!tag) { return; }
52862
52863             return tag.split('|')
52864                 .map(function (s) {
52865                     if (s === 'none') { return s; }
52866                     var m = parseInt(s, 10);
52867                     if (s === '' || m === maxspeed) { return null; }
52868                     return isNaN(m) ? 'unknown': m;
52869                 });
52870         }
52871
52872
52873         function parseMiscLanes(tag) {
52874             if (!tag) { return; }
52875
52876             var validValues = [
52877                 'yes', 'no', 'designated'
52878             ];
52879
52880             return tag.split('|')
52881                 .map(function (s) {
52882                     if (s === '') { s = 'no'; }
52883                     return validValues.indexOf(s) === -1 ? 'unknown': s;
52884                 });
52885         }
52886
52887
52888         function parseBicycleWay(tag) {
52889             if (!tag) { return; }
52890
52891             var validValues = [
52892                 'yes', 'no', 'designated', 'lane'
52893             ];
52894
52895             return tag.split('|')
52896                 .map(function (s) {
52897                     if (s === '') { s = 'no'; }
52898                     return validValues.indexOf(s) === -1 ? 'unknown': s;
52899                 });
52900         }
52901
52902
52903         function mapToLanesObj(lanesObj, data, key) {
52904             if (data.forward) { data.forward.forEach(function(l, i) {
52905                 if (!lanesObj.forward[i]) { lanesObj.forward[i] = {}; }
52906                 lanesObj.forward[i][key] = l;
52907             }); }
52908             if (data.backward) { data.backward.forEach(function(l, i) {
52909                 if (!lanesObj.backward[i]) { lanesObj.backward[i] = {}; }
52910                 lanesObj.backward[i][key] = l;
52911             }); }
52912             if (data.unspecified) { data.unspecified.forEach(function(l, i) {
52913                 if (!lanesObj.unspecified[i]) { lanesObj.unspecified[i] = {}; }
52914                 lanesObj.unspecified[i][key] = l;
52915             }); }
52916         }
52917
52918         function osmWay() {
52919             if (!(this instanceof osmWay)) {
52920                 return (new osmWay()).initialize(arguments);
52921             } else if (arguments.length) {
52922                 this.initialize(arguments);
52923             }
52924         }
52925
52926
52927         osmEntity.way = osmWay;
52928
52929         osmWay.prototype = Object.create(osmEntity.prototype);
52930
52931
52932         Object.assign(osmWay.prototype, {
52933             type: 'way',
52934             nodes: [],
52935
52936
52937             copy: function(resolver, copies) {
52938                 if (copies[this.id]) { return copies[this.id]; }
52939
52940                 var copy = osmEntity.prototype.copy.call(this, resolver, copies);
52941
52942                 var nodes = this.nodes.map(function(id) {
52943                     return resolver.entity(id).copy(resolver, copies).id;
52944                 });
52945
52946                 copy = copy.update({ nodes: nodes });
52947                 copies[this.id] = copy;
52948
52949                 return copy;
52950             },
52951
52952
52953             extent: function(resolver) {
52954                 return resolver.transient(this, 'extent', function() {
52955                     var extent = geoExtent();
52956                     for (var i = 0; i < this.nodes.length; i++) {
52957                         var node = resolver.hasEntity(this.nodes[i]);
52958                         if (node) {
52959                             extent._extend(node.extent());
52960                         }
52961                     }
52962                     return extent;
52963                 });
52964             },
52965
52966
52967             first: function() {
52968                 return this.nodes[0];
52969             },
52970
52971
52972             last: function() {
52973                 return this.nodes[this.nodes.length - 1];
52974             },
52975
52976
52977             contains: function(node) {
52978                 return this.nodes.indexOf(node) >= 0;
52979             },
52980
52981
52982             affix: function(node) {
52983                 if (this.nodes[0] === node) { return 'prefix'; }
52984                 if (this.nodes[this.nodes.length - 1] === node) { return 'suffix'; }
52985             },
52986
52987
52988             layer: function() {
52989                 // explicit layer tag, clamp between -10, 10..
52990                 if (isFinite(this.tags.layer)) {
52991                     return Math.max(-10, Math.min(+(this.tags.layer), 10));
52992                 }
52993
52994                 // implied layer tag..
52995                 if (this.tags.covered === 'yes') { return -1; }
52996                 if (this.tags.location === 'overground') { return 1; }
52997                 if (this.tags.location === 'underground') { return -1; }
52998                 if (this.tags.location === 'underwater') { return -10; }
52999
53000                 if (this.tags.power === 'line') { return 10; }
53001                 if (this.tags.power === 'minor_line') { return 10; }
53002                 if (this.tags.aerialway) { return 10; }
53003                 if (this.tags.bridge) { return 1; }
53004                 if (this.tags.cutting) { return -1; }
53005                 if (this.tags.tunnel) { return -1; }
53006                 if (this.tags.waterway) { return -1; }
53007                 if (this.tags.man_made === 'pipeline') { return -10; }
53008                 if (this.tags.boundary) { return -10; }
53009                 return 0;
53010             },
53011
53012
53013             // the approximate width of the line based on its tags except its `width` tag
53014             impliedLineWidthMeters: function() {
53015                 var averageWidths = {
53016                     highway: { // width is for single lane
53017                         motorway: 5, motorway_link: 5, trunk: 4.5, trunk_link: 4.5,
53018                         primary: 4, secondary: 4, tertiary: 4,
53019                         primary_link: 4, secondary_link: 4, tertiary_link: 4,
53020                         unclassified: 4, road: 4, living_street: 4, bus_guideway: 4, pedestrian: 4,
53021                         residential: 3.5, service: 3.5, track: 3, cycleway: 2.5,
53022                         bridleway: 2, corridor: 2, steps: 2, path: 1.5, footway: 1.5
53023                     },
53024                     railway: { // width includes ties and rail bed, not just track gauge
53025                         rail: 2.5, light_rail: 2.5, tram: 2.5, subway: 2.5,
53026                         monorail: 2.5, funicular: 2.5, disused: 2.5, preserved: 2.5,
53027                         miniature: 1.5, narrow_gauge: 1.5
53028                     },
53029                     waterway: {
53030                         river: 50, canal: 25, stream: 5, tidal_channel: 5, fish_pass: 2.5, drain: 2.5, ditch: 1.5
53031                     }
53032                 };
53033                 for (var key in averageWidths) {
53034                     if (this.tags[key] && averageWidths[key][this.tags[key]]) {
53035                         var width = averageWidths[key][this.tags[key]];
53036                         if (key === 'highway') {
53037                             var laneCount = this.tags.lanes && parseInt(this.tags.lanes, 10);
53038                             if (!laneCount) { laneCount = this.isOneWay() ? 1 : 2; }
53039
53040                             return width * laneCount;
53041                         }
53042                         return width;
53043                     }
53044                 }
53045                 return null;
53046             },
53047
53048
53049             isOneWay: function() {
53050                 // explicit oneway tag..
53051                 var values = {
53052                     'yes': true,
53053                     '1': true,
53054                     '-1': true,
53055                     'reversible': true,
53056                     'alternating': true,
53057                     'no': false,
53058                     '0': false
53059                 };
53060                 if (values[this.tags.oneway] !== undefined) {
53061                     return values[this.tags.oneway];
53062                 }
53063
53064                 // implied oneway tag..
53065                 for (var key in this.tags) {
53066                     if (key in osmOneWayTags && (this.tags[key] in osmOneWayTags[key]))
53067                         { return true; }
53068                 }
53069                 return false;
53070             },
53071
53072             // Some identifier for tag that implies that this way is "sided",
53073             // i.e. the right side is the 'inside' (e.g. the right side of a
53074             // natural=cliff is lower).
53075             sidednessIdentifier: function() {
53076                 for (var key in this.tags) {
53077                     var value = this.tags[key];
53078                     if (key in osmRightSideIsInsideTags && (value in osmRightSideIsInsideTags[key])) {
53079                         if (osmRightSideIsInsideTags[key][value] === true) {
53080                             return key;
53081                         } else {
53082                             // if the map's value is something other than a
53083                             // literal true, we should use it so we can
53084                             // special case some keys (e.g. natural=coastline
53085                             // is handled differently to other naturals).
53086                             return osmRightSideIsInsideTags[key][value];
53087                         }
53088                     }
53089                 }
53090
53091                 return null;
53092             },
53093
53094             isSided: function() {
53095                 if (this.tags.two_sided === 'yes') {
53096                     return false;
53097                 }
53098
53099                 return this.sidednessIdentifier() !== null;
53100             },
53101
53102             lanes: function() {
53103                 return osmLanes(this);
53104             },
53105
53106
53107             isClosed: function() {
53108                 return this.nodes.length > 1 && this.first() === this.last();
53109             },
53110
53111
53112             isConvex: function(resolver) {
53113                 if (!this.isClosed() || this.isDegenerate()) { return null; }
53114
53115                 var nodes = utilArrayUniq(resolver.childNodes(this));
53116                 var coords = nodes.map(function(n) { return n.loc; });
53117                 var curr = 0;
53118                 var prev = 0;
53119
53120                 for (var i = 0; i < coords.length; i++) {
53121                     var o = coords[(i+1) % coords.length];
53122                     var a = coords[i];
53123                     var b = coords[(i+2) % coords.length];
53124                     var res = geoVecCross(a, b, o);
53125
53126                     curr = (res > 0) ? 1 : (res < 0) ? -1 : 0;
53127                     if (curr === 0) {
53128                         continue;
53129                     } else if (prev && curr !== prev) {
53130                         return false;
53131                     }
53132                     prev = curr;
53133                 }
53134                 return true;
53135             },
53136
53137             // returns an object with the tag that implies this is an area, if any
53138             tagSuggestingArea: function() {
53139                 if (this.tags.area === 'yes') { return { area: 'yes' }; }
53140                 if (this.tags.area === 'no') { return null; }
53141
53142                 // `highway` and `railway` are typically linear features, but there
53143                 // are a few exceptions that should be treated as areas, even in the
53144                 // absence of a proper `area=yes` or `areaKeys` tag.. see #4194
53145                 var lineKeys = {
53146                     highway: {
53147                         rest_area: true,
53148                         services: true
53149                     },
53150                     railway: {
53151                         roundhouse: true,
53152                         station: true,
53153                         traverser: true,
53154                         turntable: true,
53155                         wash: true
53156                     }
53157                 };
53158                 var returnTags = {};
53159                 for (var key in this.tags) {
53160                     if (key in osmAreaKeys && !(this.tags[key] in osmAreaKeys[key])) {
53161                         returnTags[key] = this.tags[key];
53162                         return returnTags;
53163                     }
53164                     if (key in lineKeys && this.tags[key] in lineKeys[key]) {
53165                         returnTags[key] = this.tags[key];
53166                         return returnTags;
53167                     }
53168                 }
53169                 return null;
53170             },
53171
53172             isArea: function() {
53173                 if (this.tags.area === 'yes')
53174                     { return true; }
53175                 if (!this.isClosed() || this.tags.area === 'no')
53176                     { return false; }
53177                 return this.tagSuggestingArea() !== null;
53178             },
53179
53180
53181             isDegenerate: function() {
53182                 return (new Set(this.nodes).size < (this.isArea() ? 3 : 2));
53183             },
53184
53185
53186             areAdjacent: function(n1, n2) {
53187                 for (var i = 0; i < this.nodes.length; i++) {
53188                     if (this.nodes[i] === n1) {
53189                         if (this.nodes[i - 1] === n2) { return true; }
53190                         if (this.nodes[i + 1] === n2) { return true; }
53191                     }
53192                 }
53193                 return false;
53194             },
53195
53196
53197             geometry: function(graph) {
53198                 return graph.transient(this, 'geometry', function() {
53199                     return this.isArea() ? 'area' : 'line';
53200                 });
53201             },
53202
53203
53204             // If this way is not closed, append the beginning node to the end of the nodelist to close it.
53205             close: function() {
53206                 if (this.isClosed() || !this.nodes.length) { return this; }
53207
53208                 var nodes = this.nodes.slice();
53209                 nodes = nodes.filter(noRepeatNodes);
53210                 nodes.push(nodes[0]);
53211                 return this.update({ nodes: nodes });
53212             },
53213
53214
53215             // If this way is closed, remove any connector nodes from the end of the nodelist to unclose it.
53216             unclose: function() {
53217                 if (!this.isClosed()) { return this; }
53218
53219                 var nodes = this.nodes.slice();
53220                 var connector = this.first();
53221                 var i = nodes.length - 1;
53222
53223                 // remove trailing connectors..
53224                 while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
53225                     nodes.splice(i, 1);
53226                     i = nodes.length - 1;
53227                 }
53228
53229                 nodes = nodes.filter(noRepeatNodes);
53230                 return this.update({ nodes: nodes });
53231             },
53232
53233
53234             // Adds a node (id) in front of the node which is currently at position index.
53235             // If index is undefined, the node will be added to the end of the way for linear ways,
53236             //   or just before the final connecting node for circular ways.
53237             // Consecutive duplicates are eliminated including existing ones.
53238             // Circularity is always preserved when adding a node.
53239             addNode: function(id, index) {
53240                 var nodes = this.nodes.slice();
53241                 var isClosed = this.isClosed();
53242                 var max = isClosed ? nodes.length - 1 : nodes.length;
53243
53244                 if (index === undefined) {
53245                     index = max;
53246                 }
53247
53248                 if (index < 0 || index > max) {
53249                     throw new RangeError('index ' + index + ' out of range 0..' + max);
53250                 }
53251
53252                 // If this is a closed way, remove all connector nodes except the first one
53253                 // (there may be duplicates) and adjust index if necessary..
53254                 if (isClosed) {
53255                     var connector = this.first();
53256
53257                     // leading connectors..
53258                     var i = 1;
53259                     while (i < nodes.length && nodes.length > 2 && nodes[i] === connector) {
53260                         nodes.splice(i, 1);
53261                         if (index > i) { index--; }
53262                     }
53263
53264                     // trailing connectors..
53265                     i = nodes.length - 1;
53266                     while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
53267                         nodes.splice(i, 1);
53268                         if (index > i) { index--; }
53269                         i = nodes.length - 1;
53270                     }
53271                 }
53272
53273                 nodes.splice(index, 0, id);
53274                 nodes = nodes.filter(noRepeatNodes);
53275
53276                 // If the way was closed before, append a connector node to keep it closed..
53277                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
53278                     nodes.push(nodes[0]);
53279                 }
53280
53281                 return this.update({ nodes: nodes });
53282             },
53283
53284
53285             // Replaces the node which is currently at position index with the given node (id).
53286             // Consecutive duplicates are eliminated including existing ones.
53287             // Circularity is preserved when updating a node.
53288             updateNode: function(id, index) {
53289                 var nodes = this.nodes.slice();
53290                 var isClosed = this.isClosed();
53291                 var max = nodes.length - 1;
53292
53293                 if (index === undefined || index < 0 || index > max) {
53294                     throw new RangeError('index ' + index + ' out of range 0..' + max);
53295                 }
53296
53297                 // If this is a closed way, remove all connector nodes except the first one
53298                 // (there may be duplicates) and adjust index if necessary..
53299                 if (isClosed) {
53300                     var connector = this.first();
53301
53302                     // leading connectors..
53303                     var i = 1;
53304                     while (i < nodes.length && nodes.length > 2 && nodes[i] === connector) {
53305                         nodes.splice(i, 1);
53306                         if (index > i) { index--; }
53307                     }
53308
53309                     // trailing connectors..
53310                     i = nodes.length - 1;
53311                     while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
53312                         nodes.splice(i, 1);
53313                         if (index === i) { index = 0; }  // update leading connector instead
53314                         i = nodes.length - 1;
53315                     }
53316                 }
53317
53318                 nodes.splice(index, 1, id);
53319                 nodes = nodes.filter(noRepeatNodes);
53320
53321                 // If the way was closed before, append a connector node to keep it closed..
53322                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
53323                     nodes.push(nodes[0]);
53324                 }
53325
53326                 return this.update({nodes: nodes});
53327             },
53328
53329
53330             // Replaces each occurrence of node id needle with replacement.
53331             // Consecutive duplicates are eliminated including existing ones.
53332             // Circularity is preserved.
53333             replaceNode: function(needleID, replacementID) {
53334                 var nodes = this.nodes.slice();
53335                 var isClosed = this.isClosed();
53336
53337                 for (var i = 0; i < nodes.length; i++) {
53338                     if (nodes[i] === needleID) {
53339                         nodes[i] = replacementID;
53340                     }
53341                 }
53342
53343                 nodes = nodes.filter(noRepeatNodes);
53344
53345                 // If the way was closed before, append a connector node to keep it closed..
53346                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
53347                     nodes.push(nodes[0]);
53348                 }
53349
53350                 return this.update({nodes: nodes});
53351             },
53352
53353
53354             // Removes each occurrence of node id.
53355             // Consecutive duplicates are eliminated including existing ones.
53356             // Circularity is preserved.
53357             removeNode: function(id) {
53358                 var nodes = this.nodes.slice();
53359                 var isClosed = this.isClosed();
53360
53361                 nodes = nodes
53362                     .filter(function(node) { return node !== id; })
53363                     .filter(noRepeatNodes);
53364
53365                 // If the way was closed before, append a connector node to keep it closed..
53366                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
53367                     nodes.push(nodes[0]);
53368                 }
53369
53370                 return this.update({nodes: nodes});
53371             },
53372
53373
53374             asJXON: function(changeset_id) {
53375                 var r = {
53376                     way: {
53377                         '@id': this.osmId(),
53378                         '@version': this.version || 0,
53379                         nd: this.nodes.map(function(id) {
53380                             return { keyAttributes: { ref: osmEntity.id.toOSM(id) } };
53381                         }, this),
53382                         tag: Object.keys(this.tags).map(function(k) {
53383                             return { keyAttributes: { k: k, v: this.tags[k] } };
53384                         }, this)
53385                     }
53386                 };
53387                 if (changeset_id) {
53388                     r.way['@changeset'] = changeset_id;
53389                 }
53390                 return r;
53391             },
53392
53393
53394             asGeoJSON: function(resolver) {
53395                 return resolver.transient(this, 'GeoJSON', function() {
53396                     var coordinates = resolver.childNodes(this)
53397                         .map(function(n) { return n.loc; });
53398
53399                     if (this.isArea() && this.isClosed()) {
53400                         return {
53401                             type: 'Polygon',
53402                             coordinates: [coordinates]
53403                         };
53404                     } else {
53405                         return {
53406                             type: 'LineString',
53407                             coordinates: coordinates
53408                         };
53409                     }
53410                 });
53411             },
53412
53413
53414             area: function(resolver) {
53415                 return resolver.transient(this, 'area', function() {
53416                     var nodes = resolver.childNodes(this);
53417
53418                     var json = {
53419                         type: 'Polygon',
53420                         coordinates: [ nodes.map(function(n) { return n.loc; }) ]
53421                     };
53422
53423                     if (!this.isClosed() && nodes.length) {
53424                         json.coordinates[0].push(nodes[0].loc);
53425                     }
53426
53427                     var area = d3_geoArea(json);
53428
53429                     // Heuristic for detecting counterclockwise winding order. Assumes
53430                     // that OpenStreetMap polygons are not hemisphere-spanning.
53431                     if (area > 2 * Math.PI) {
53432                         json.coordinates[0] = json.coordinates[0].reverse();
53433                         area = d3_geoArea(json);
53434                     }
53435
53436                     return isNaN(area) ? 0 : area;
53437                 });
53438             }
53439         });
53440
53441
53442         // Filter function to eliminate consecutive duplicates.
53443         function noRepeatNodes(node, i, arr) {
53444             return i === 0 || node !== arr[i - 1];
53445         }
53446
53447         // "Old" multipolyons, previously known as "simple" multipolygons, are as follows:
53448         //
53449         // 1. Relation tagged with `type=multipolygon` and no interesting tags.
53450         // 2. One and only one member with the `outer` role. Must be a way with interesting tags.
53451         // 3. No members without a role.
53452         //
53453         // Old multipolygons are no longer recommended but are still rendered as areas by iD.
53454
53455         function osmOldMultipolygonOuterMemberOfRelation(entity, graph) {
53456             if (entity.type !== 'relation' ||
53457                 !entity.isMultipolygon()
53458                 || Object.keys(entity.tags).filter(osmIsInterestingTag).length > 1) {
53459                 return false;
53460             }
53461
53462             var outerMember;
53463             for (var memberIndex in entity.members) {
53464                 var member = entity.members[memberIndex];
53465                 if (!member.role || member.role === 'outer') {
53466                     if (outerMember) { return false; }
53467                     if (member.type !== 'way') { return false; }
53468                     if (!graph.hasEntity(member.id)) { return false; }
53469
53470                     outerMember = graph.entity(member.id);
53471
53472                     if (Object.keys(outerMember.tags).filter(osmIsInterestingTag).length === 0) {
53473                         return false;
53474                     }
53475                 }
53476             }
53477
53478             return outerMember;
53479         }
53480
53481         // For fixing up rendering of multipolygons with tags on the outer member.
53482         // https://github.com/openstreetmap/iD/issues/613
53483         function osmIsOldMultipolygonOuterMember(entity, graph) {
53484             if (entity.type !== 'way' || Object.keys(entity.tags).filter(osmIsInterestingTag).length === 0)
53485                 { return false; }
53486
53487             var parents = graph.parentRelations(entity);
53488             if (parents.length !== 1)
53489                 { return false; }
53490
53491             var parent = parents[0];
53492             if (!parent.isMultipolygon() || Object.keys(parent.tags).filter(osmIsInterestingTag).length > 1)
53493                 { return false; }
53494
53495             var members = parent.members, member;
53496             for (var i = 0; i < members.length; i++) {
53497                 member = members[i];
53498                 if (member.id === entity.id && member.role && member.role !== 'outer')
53499                     { return false; } // Not outer member
53500                 if (member.id !== entity.id && (!member.role || member.role === 'outer'))
53501                     { return false; } // Not a simple multipolygon
53502             }
53503
53504             return parent;
53505         }
53506
53507
53508         function osmOldMultipolygonOuterMember(entity, graph) {
53509             if (entity.type !== 'way')
53510                 { return false; }
53511
53512             var parents = graph.parentRelations(entity);
53513             if (parents.length !== 1)
53514                 { return false; }
53515
53516             var parent = parents[0];
53517             if (!parent.isMultipolygon() || Object.keys(parent.tags).filter(osmIsInterestingTag).length > 1)
53518                 { return false; }
53519
53520             var members = parent.members, member, outerMember;
53521             for (var i = 0; i < members.length; i++) {
53522                 member = members[i];
53523                 if (!member.role || member.role === 'outer') {
53524                     if (outerMember)
53525                         { return false; } // Not a simple multipolygon
53526                     outerMember = member;
53527                 }
53528             }
53529
53530             if (!outerMember)
53531                 { return false; }
53532
53533             var outerEntity = graph.hasEntity(outerMember.id);
53534             if (!outerEntity || !Object.keys(outerEntity.tags).filter(osmIsInterestingTag).length)
53535                 { return false; }
53536
53537             return outerEntity;
53538         }
53539
53540
53541         // Join `toJoin` array into sequences of connecting ways.
53542
53543         // Segments which share identical start/end nodes will, as much as possible,
53544         // be connected with each other.
53545         //
53546         // The return value is a nested array. Each constituent array contains elements
53547         // of `toJoin` which have been determined to connect.
53548         //
53549         // Each consitituent array also has a `nodes` property whose value is an
53550         // ordered array of member nodes, with appropriate order reversal and
53551         // start/end coordinate de-duplication.
53552         //
53553         // Members of `toJoin` must have, at minimum, `type` and `id` properties.
53554         // Thus either an array of `osmWay`s or a relation member array may be used.
53555         //
53556         // If an member is an `osmWay`, its tags and childnodes may be reversed via
53557         // `actionReverse` in the output.
53558         //
53559         // The returned sequences array also has an `actions` array property, containing
53560         // any reversal actions that should be applied to the graph, should the calling
53561         // code attempt to actually join the given ways.
53562         //
53563         // Incomplete members (those for which `graph.hasEntity(element.id)` returns
53564         // false) and non-way members are ignored.
53565         //
53566         function osmJoinWays(toJoin, graph) {
53567             function resolve(member) {
53568                 return graph.childNodes(graph.entity(member.id));
53569             }
53570
53571             function reverse(item) {
53572                 var action = actionReverse(item.id, { reverseOneway: true });
53573                 sequences.actions.push(action);
53574                 return (item instanceof osmWay) ? action(graph).entity(item.id) : item;
53575             }
53576
53577             // make a copy containing only the items to join
53578             toJoin = toJoin.filter(function(member) {
53579                 return member.type === 'way' && graph.hasEntity(member.id);
53580             });
53581
53582             // Are the things we are joining relation members or `osmWays`?
53583             // If `osmWays`, skip the "prefer a forward path" code below (see #4872)
53584             var i;
53585             var joinAsMembers = true;
53586             for (i = 0; i < toJoin.length; i++) {
53587                 if (toJoin[i] instanceof osmWay) {
53588                     joinAsMembers = false;
53589                     break;
53590                 }
53591             }
53592
53593             var sequences = [];
53594             sequences.actions = [];
53595
53596             while (toJoin.length) {
53597                 // start a new sequence
53598                 var item = toJoin.shift();
53599                 var currWays = [item];
53600                 var currNodes = resolve(item).slice();
53601                 var doneSequence = false;
53602
53603                 // add to it
53604                 while (toJoin.length && !doneSequence) {
53605                     var start = currNodes[0];
53606                     var end = currNodes[currNodes.length - 1];
53607                     var fn = null;
53608                     var nodes = null;
53609
53610                     // Find the next way/member to join.
53611                     for (i = 0; i < toJoin.length; i++) {
53612                         item = toJoin[i];
53613                         nodes = resolve(item);
53614
53615                         // (for member ordering only, not way ordering - see #4872)
53616                         // Strongly prefer to generate a forward path that preserves the order
53617                         // of the members array. For multipolygons and most relations, member
53618                         // order does not matter - but for routes, it does. (see #4589)
53619                         // If we started this sequence backwards (i.e. next member way attaches to
53620                         // the start node and not the end node), reverse the initial way before continuing.
53621                         if (joinAsMembers && currWays.length === 1 && nodes[0] !== end && nodes[nodes.length - 1] !== end &&
53622                             (nodes[nodes.length - 1] === start || nodes[0] === start)
53623                         ) {
53624                             currWays[0] = reverse(currWays[0]);
53625                             currNodes.reverse();
53626                             start = currNodes[0];
53627                             end = currNodes[currNodes.length - 1];
53628                         }
53629
53630                         if (nodes[0] === end) {
53631                             fn = currNodes.push;               // join to end
53632                             nodes = nodes.slice(1);
53633                             break;
53634                         } else if (nodes[nodes.length - 1] === end) {
53635                             fn = currNodes.push;               // join to end
53636                             nodes = nodes.slice(0, -1).reverse();
53637                             item = reverse(item);
53638                             break;
53639                         } else if (nodes[nodes.length - 1] === start) {
53640                             fn = currNodes.unshift;            // join to beginning
53641                             nodes = nodes.slice(0, -1);
53642                             break;
53643                         } else if (nodes[0] === start) {
53644                             fn = currNodes.unshift;            // join to beginning
53645                             nodes = nodes.slice(1).reverse();
53646                             item = reverse(item);
53647                             break;
53648                         } else {
53649                             fn = nodes = null;
53650                         }
53651                     }
53652
53653                     if (!nodes) {     // couldn't find a joinable way/member
53654                         doneSequence = true;
53655                         break;
53656                     }
53657
53658                     fn.apply(currWays, [item]);
53659                     fn.apply(currNodes, nodes);
53660
53661                     toJoin.splice(i, 1);
53662                 }
53663
53664                 currWays.nodes = currNodes;
53665                 sequences.push(currWays);
53666             }
53667
53668             return sequences;
53669         }
53670
53671         function actionAddMember(relationId, member, memberIndex, insertPair) {
53672
53673             return function action(graph) {
53674                 var relation = graph.entity(relationId);
53675
53676                 // There are some special rules for Public Transport v2 routes.
53677                 var isPTv2 = /stop|platform/.test(member.role);
53678
53679                 if ((isNaN(memberIndex) || insertPair) && member.type === 'way' && !isPTv2) {
53680                     // Try to perform sensible inserts based on how the ways join together
53681                     graph = addWayMember(relation, graph);
53682                 } else {
53683                     // see https://wiki.openstreetmap.org/wiki/Public_transport#Service_routes
53684                     // Stops and Platforms for PTv2 should be ordered first.
53685                     // hack: We do not currently have the ability to place them in the exactly correct order.
53686                     if (isPTv2 && isNaN(memberIndex)) {
53687                         memberIndex = 0;
53688                     }
53689
53690                     graph = graph.replace(relation.addMember(member, memberIndex));
53691                 }
53692
53693                 return graph;
53694             };
53695
53696
53697             // Add a way member into the relation "wherever it makes sense".
53698             // In this situation we were not supplied a memberIndex.
53699             function addWayMember(relation, graph) {
53700                 var groups, tempWay, item, i, j, k;
53701
53702                 // remove PTv2 stops and platforms before doing anything.
53703                 var PTv2members = [];
53704                 var members = [];
53705                 for (i = 0; i < relation.members.length; i++) {
53706                     var m = relation.members[i];
53707                     if (/stop|platform/.test(m.role)) {
53708                         PTv2members.push(m);
53709                     } else {
53710                         members.push(m);
53711                     }
53712                 }
53713                 relation = relation.update({ members: members });
53714
53715
53716                 if (insertPair) {
53717                     // We're adding a member that must stay paired with an existing member.
53718                     // (This feature is used by `actionSplit`)
53719                     //
53720                     // This is tricky because the members may exist multiple times in the
53721                     // member list, and with different A-B/B-A ordering and different roles.
53722                     // (e.g. a bus route that loops out and back - #4589).
53723                     //
53724                     // Replace the existing member with a temporary way,
53725                     // so that `osmJoinWays` can treat the pair like a single way.
53726                     tempWay = osmWay({ id: 'wTemp', nodes: insertPair.nodes });
53727                     graph = graph.replace(tempWay);
53728                     var tempMember = { id: tempWay.id, type: 'way', role: member.role };
53729                     var tempRelation = relation.replaceMember({id: insertPair.originalID}, tempMember, true);
53730                     groups = utilArrayGroupBy(tempRelation.members, 'type');
53731                     groups.way = groups.way || [];
53732
53733                 } else {
53734                     // Add the member anywhere, one time. Just push and let `osmJoinWays` decide where to put it.
53735                     groups = utilArrayGroupBy(relation.members, 'type');
53736                     groups.way = groups.way || [];
53737                     groups.way.push(member);
53738                 }
53739
53740                 members = withIndex(groups.way);
53741                 var joined = osmJoinWays(members, graph);
53742
53743                 // `joined` might not contain all of the way members,
53744                 // But will contain only the completed (downloaded) members
53745                 for (i = 0; i < joined.length; i++) {
53746                     var segment = joined[i];
53747                     var nodes = segment.nodes.slice();
53748                     var startIndex = segment[0].index;
53749
53750                     // j = array index in `members` where this segment starts
53751                     for (j = 0; j < members.length; j++) {
53752                         if (members[j].index === startIndex) {
53753                             break;
53754                         }
53755                     }
53756
53757                     // k = each member in segment
53758                     for (k = 0; k < segment.length; k++) {
53759                         item = segment[k];
53760                         var way = graph.entity(item.id);
53761
53762                         // If this is a paired item, generate members in correct order and role
53763                         if (tempWay && item.id === tempWay.id) {
53764                             if (nodes[0].id === insertPair.nodes[0]) {
53765                                 item.pair = [
53766                                     { id: insertPair.originalID, type: 'way', role: item.role },
53767                                     { id: insertPair.insertedID, type: 'way', role: item.role }
53768                                 ];
53769                             } else {
53770                                 item.pair = [
53771                                     { id: insertPair.insertedID, type: 'way', role: item.role },
53772                                     { id: insertPair.originalID, type: 'way', role: item.role }
53773                                 ];
53774                             }
53775                         }
53776
53777                         // reorder `members` if necessary
53778                         if (k > 0) {
53779                             if (j+k >= members.length || item.index !== members[j+k].index) {
53780                                 moveMember(members, item.index, j+k);
53781                             }
53782                         }
53783
53784                         nodes.splice(0, way.nodes.length - 1);
53785                     }
53786                 }
53787
53788                 if (tempWay) {
53789                     graph = graph.remove(tempWay);
53790                 }
53791
53792                 // Final pass: skip dead items, split pairs, remove index properties
53793                 var wayMembers = [];
53794                 for (i = 0; i < members.length; i++) {
53795                     item = members[i];
53796                     if (item.index === -1) { continue; }
53797
53798                     if (item.pair) {
53799                         wayMembers.push(item.pair[0]);
53800                         wayMembers.push(item.pair[1]);
53801                     } else {
53802                         wayMembers.push(utilObjectOmit(item, ['index']));
53803                     }
53804                 }
53805
53806                 // Put stops and platforms first, then nodes, ways, relations
53807                 // This is recommended for Public Transport v2 routes:
53808                 // see https://wiki.openstreetmap.org/wiki/Public_transport#Service_routes
53809                 var newMembers = PTv2members.concat( (groups.node || []), wayMembers, (groups.relation || []) );
53810
53811                 return graph.replace(relation.update({ members: newMembers }));
53812
53813
53814                 // `moveMember()` changes the `members` array in place by splicing
53815                 // the item with `.index = findIndex` to where it belongs,
53816                 // and marking the old position as "dead" with `.index = -1`
53817                 //
53818                 // j=5, k=0                jk
53819                 // segment                 5 4 7 6
53820                 // members       0 1 2 3 4 5 6 7 8 9        keep 5 in j+k
53821                 //
53822                 // j=5, k=1                j k
53823                 // segment                 5 4 7 6
53824                 // members       0 1 2 3 4 5 6 7 8 9        move 4 to j+k
53825                 // members       0 1 2 3 x 5 4 6 7 8 9      moved
53826                 //
53827                 // j=5, k=2                j   k
53828                 // segment                 5 4 7 6
53829                 // members       0 1 2 3 x 5 4 6 7 8 9      move 7 to j+k
53830                 // members       0 1 2 3 x 5 4 7 6 x 8 9    moved
53831                 //
53832                 // j=5, k=3                j     k
53833                 // segment                 5 4 7 6
53834                 // members       0 1 2 3 x 5 4 7 6 x 8 9    keep 6 in j+k
53835                 //
53836                 function moveMember(arr, findIndex, toIndex) {
53837                     for (var i = 0; i < arr.length; i++) {
53838                         if (arr[i].index === findIndex) {
53839                             break;
53840                         }
53841                     }
53842
53843                     var item = Object.assign({}, arr[i]);   // shallow copy
53844                     arr[i].index = -1;   // mark as dead
53845                     item.index = toIndex;
53846                     arr.splice(toIndex, 0, item);
53847                 }
53848
53849
53850                 // This is the same as `Relation.indexedMembers`,
53851                 // Except we don't want to index all the members, only the ways
53852                 function withIndex(arr) {
53853                     var result = new Array(arr.length);
53854                     for (var i = 0; i < arr.length; i++) {
53855                         result[i] = Object.assign({}, arr[i]);   // shallow copy
53856                         result[i].index = i;
53857                     }
53858                     return result;
53859                 }
53860             }
53861
53862         }
53863
53864         function actionAddMidpoint(midpoint, node) {
53865             return function(graph) {
53866                 graph = graph.replace(node.move(midpoint.loc));
53867
53868                 var parents = utilArrayIntersection(
53869                     graph.parentWays(graph.entity(midpoint.edge[0])),
53870                     graph.parentWays(graph.entity(midpoint.edge[1]))
53871                 );
53872
53873                 parents.forEach(function(way) {
53874                     for (var i = 0; i < way.nodes.length - 1; i++) {
53875                         if (geoEdgeEqual([way.nodes[i], way.nodes[i + 1]], midpoint.edge)) {
53876                             graph = graph.replace(graph.entity(way.id).addNode(node.id, i + 1));
53877
53878                             // Add only one midpoint on doubled-back segments,
53879                             // turning them into self-intersections.
53880                             return;
53881                         }
53882                     }
53883                 });
53884
53885                 return graph;
53886             };
53887         }
53888
53889         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/AddNodeToWayAction.as
53890         function actionAddVertex(wayId, nodeId, index) {
53891             return function(graph) {
53892                 return graph.replace(graph.entity(wayId).addNode(nodeId, index));
53893             };
53894         }
53895
53896         function actionChangeMember(relationId, member, memberIndex) {
53897             return function(graph) {
53898                 return graph.replace(graph.entity(relationId).updateMember(member, memberIndex));
53899             };
53900         }
53901
53902         function actionChangePreset(entityID, oldPreset, newPreset, skipFieldDefaults) {
53903             return function action(graph) {
53904                 var entity = graph.entity(entityID);
53905                 var geometry = entity.geometry(graph);
53906                 var tags = entity.tags;
53907
53908                 if (oldPreset) { tags = oldPreset.unsetTags(tags, geometry); }
53909                 if (newPreset) { tags = newPreset.setTags(tags, geometry, skipFieldDefaults); }
53910
53911                 return graph.replace(entity.update({tags: tags}));
53912             };
53913         }
53914
53915         function actionChangeTags(entityId, tags) {
53916             return function(graph) {
53917                 var entity = graph.entity(entityId);
53918                 return graph.replace(entity.update({tags: tags}));
53919             };
53920         }
53921
53922         function osmNode() {
53923             if (!(this instanceof osmNode)) {
53924                 return (new osmNode()).initialize(arguments);
53925             } else if (arguments.length) {
53926                 this.initialize(arguments);
53927             }
53928         }
53929
53930         osmEntity.node = osmNode;
53931
53932         osmNode.prototype = Object.create(osmEntity.prototype);
53933
53934         Object.assign(osmNode.prototype, {
53935             type: 'node',
53936             loc: [9999, 9999],
53937
53938             extent: function() {
53939                 return new geoExtent(this.loc);
53940             },
53941
53942
53943             geometry: function(graph) {
53944                 return graph.transient(this, 'geometry', function() {
53945                     return graph.isPoi(this) ? 'point' : 'vertex';
53946                 });
53947             },
53948
53949
53950             move: function(loc) {
53951                 return this.update({loc: loc});
53952             },
53953
53954
53955             isDegenerate: function() {
53956                 return !(
53957                     Array.isArray(this.loc) && this.loc.length === 2 &&
53958                     this.loc[0] >= -180 && this.loc[0] <= 180 &&
53959                     this.loc[1] >= -90 && this.loc[1] <= 90
53960                 );
53961             },
53962
53963
53964             // Inspect tags and geometry to determine which direction(s) this node/vertex points
53965             directions: function(resolver, projection) {
53966                 var val;
53967                 var i;
53968
53969                 // which tag to use?
53970                 if (this.isHighwayIntersection(resolver) && (this.tags.stop || '').toLowerCase() === 'all') {
53971                     // all-way stop tag on a highway intersection
53972                     val = 'all';
53973                 } else {
53974                     // generic direction tag
53975                     val = (this.tags.direction || '').toLowerCase();
53976
53977                     // better suffix-style direction tag
53978                     var re = /:direction$/i;
53979                     var keys = Object.keys(this.tags);
53980                     for (i = 0; i < keys.length; i++) {
53981                         if (re.test(keys[i])) {
53982                             val = this.tags[keys[i]].toLowerCase();
53983                             break;
53984                         }
53985                     }
53986                 }
53987
53988                 if (val === '') { return []; }
53989
53990                 var cardinal = {
53991                     north: 0,               n: 0,
53992                     northnortheast: 22,     nne: 22,
53993                     northeast: 45,          ne: 45,
53994                     eastnortheast: 67,      ene: 67,
53995                     east: 90,               e: 90,
53996                     eastsoutheast: 112,     ese: 112,
53997                     southeast: 135,         se: 135,
53998                     southsoutheast: 157,    sse: 157,
53999                     south: 180,             s: 180,
54000                     southsouthwest: 202,    ssw: 202,
54001                     southwest: 225,         sw: 225,
54002                     westsouthwest: 247,     wsw: 247,
54003                     west: 270,              w: 270,
54004                     westnorthwest: 292,     wnw: 292,
54005                     northwest: 315,         nw: 315,
54006                     northnorthwest: 337,    nnw: 337
54007                 };
54008
54009
54010                 var values = val.split(';');
54011                 var results = [];
54012
54013                 values.forEach(function(v) {
54014                     // swap cardinal for numeric directions
54015                     if (cardinal[v] !== undefined) {
54016                         v = cardinal[v];
54017                     }
54018
54019                     // numeric direction - just add to results
54020                     if (v !== '' && !isNaN(+v)) {
54021                         results.push(+v);
54022                         return;
54023                     }
54024
54025                     // string direction - inspect parent ways
54026                     var lookBackward =
54027                         (this.tags['traffic_sign:backward'] || v === 'backward' || v === 'both' || v === 'all');
54028                     var lookForward =
54029                         (this.tags['traffic_sign:forward'] || v === 'forward' || v === 'both' || v === 'all');
54030
54031                     if (!lookForward && !lookBackward) { return; }
54032
54033                     var nodeIds = {};
54034                     resolver.parentWays(this).forEach(function(parent) {
54035                         var nodes = parent.nodes;
54036                         for (i = 0; i < nodes.length; i++) {
54037                             if (nodes[i] === this.id) {  // match current entity
54038                                 if (lookForward && i > 0) {
54039                                     nodeIds[nodes[i - 1]] = true;  // look back to prev node
54040                                 }
54041                                 if (lookBackward && i < nodes.length - 1) {
54042                                     nodeIds[nodes[i + 1]] = true;  // look ahead to next node
54043                                 }
54044                             }
54045                         }
54046                     }, this);
54047
54048                     Object.keys(nodeIds).forEach(function(nodeId) {
54049                         // +90 because geoAngle returns angle from X axis, not Y (north)
54050                         results.push(
54051                             (geoAngle(this, resolver.entity(nodeId), projection) * (180 / Math.PI)) + 90
54052                         );
54053                     }, this);
54054
54055                 }, this);
54056
54057                 return utilArrayUniq(results);
54058             },
54059
54060
54061             isEndpoint: function(resolver) {
54062                 return resolver.transient(this, 'isEndpoint', function() {
54063                     var id = this.id;
54064                     return resolver.parentWays(this).filter(function(parent) {
54065                         return !parent.isClosed() && !!parent.affix(id);
54066                     }).length > 0;
54067                 });
54068             },
54069
54070
54071             isConnected: function(resolver) {
54072                 return resolver.transient(this, 'isConnected', function() {
54073                     var parents = resolver.parentWays(this);
54074
54075                     function isLine(entity) {
54076                         return entity.geometry(resolver) === 'line' &&
54077                             entity.hasInterestingTags();
54078                     }
54079
54080                     // vertex is connected to multiple parent lines
54081                     if (parents.length > 1 && parents.some(isLine)) {
54082                         return true;
54083
54084                     } else if (parents.length === 1) {
54085                         var way = parents[0];
54086                         var nodes = way.nodes.slice();
54087                         if (way.isClosed()) { nodes.pop(); }  // ignore connecting node if closed
54088
54089                         // return true if vertex appears multiple times (way is self intersecting)
54090                         return nodes.indexOf(this.id) !== nodes.lastIndexOf(this.id);
54091                     }
54092
54093                     return false;
54094                 });
54095             },
54096
54097
54098             parentIntersectionWays: function(resolver) {
54099                 return resolver.transient(this, 'parentIntersectionWays', function() {
54100                     return resolver.parentWays(this).filter(function(parent) {
54101                         return (parent.tags.highway ||
54102                             parent.tags.waterway ||
54103                             parent.tags.railway ||
54104                             parent.tags.aeroway) &&
54105                             parent.geometry(resolver) === 'line';
54106                     });
54107                 });
54108             },
54109
54110
54111             isIntersection: function(resolver) {
54112                 return this.parentIntersectionWays(resolver).length > 1;
54113             },
54114
54115
54116             isHighwayIntersection: function(resolver) {
54117                 return resolver.transient(this, 'isHighwayIntersection', function() {
54118                     return resolver.parentWays(this).filter(function(parent) {
54119                         return parent.tags.highway && parent.geometry(resolver) === 'line';
54120                     }).length > 1;
54121                 });
54122             },
54123
54124
54125             isOnAddressLine: function(resolver) {
54126                 return resolver.transient(this, 'isOnAddressLine', function() {
54127                     return resolver.parentWays(this).filter(function(parent) {
54128                         return parent.tags.hasOwnProperty('addr:interpolation') &&
54129                             parent.geometry(resolver) === 'line';
54130                     }).length > 0;
54131                 });
54132             },
54133
54134
54135             asJXON: function(changeset_id) {
54136                 var r = {
54137                     node: {
54138                         '@id': this.osmId(),
54139                         '@lon': this.loc[0],
54140                         '@lat': this.loc[1],
54141                         '@version': (this.version || 0),
54142                         tag: Object.keys(this.tags).map(function(k) {
54143                             return { keyAttributes: { k: k, v: this.tags[k] } };
54144                         }, this)
54145                     }
54146                 };
54147                 if (changeset_id) { r.node['@changeset'] = changeset_id; }
54148                 return r;
54149             },
54150
54151
54152             asGeoJSON: function() {
54153                 return {
54154                     type: 'Point',
54155                     coordinates: this.loc
54156                 };
54157             }
54158         });
54159
54160         function actionCircularize(wayId, projection, maxAngle) {
54161             maxAngle = (maxAngle || 20) * Math.PI / 180;
54162
54163
54164             var action = function(graph, t) {
54165                 if (t === null || !isFinite(t)) { t = 1; }
54166                 t = Math.min(Math.max(+t, 0), 1);
54167
54168                 var way = graph.entity(wayId);
54169                 var origNodes = {};
54170
54171                 graph.childNodes(way).forEach(function(node) {
54172                     if (!origNodes[node.id]) { origNodes[node.id] = node; }
54173                 });
54174
54175                 if (!way.isConvex(graph)) {
54176                     graph = action.makeConvex(graph);
54177                 }
54178
54179                 var nodes = utilArrayUniq(graph.childNodes(way));
54180                 var keyNodes = nodes.filter(function(n) { return graph.parentWays(n).length !== 1; });
54181                 var points = nodes.map(function(n) { return projection(n.loc); });
54182                 var keyPoints = keyNodes.map(function(n) { return projection(n.loc); });
54183                 var centroid = (points.length === 2) ? geoVecInterp(points[0], points[1], 0.5) : d3_polygonCentroid(points);
54184                 var radius = d3_median(points, function(p) { return geoVecLength(centroid, p); });
54185                 var sign = d3_polygonArea(points) > 0 ? 1 : -1;
54186                 var ids, i, j, k;
54187
54188                 // we need atleast two key nodes for the algorithm to work
54189                 if (!keyNodes.length) {
54190                     keyNodes = [nodes[0]];
54191                     keyPoints = [points[0]];
54192                 }
54193
54194                 if (keyNodes.length === 1) {
54195                     var index = nodes.indexOf(keyNodes[0]);
54196                     var oppositeIndex = Math.floor((index + nodes.length / 2) % nodes.length);
54197
54198                     keyNodes.push(nodes[oppositeIndex]);
54199                     keyPoints.push(points[oppositeIndex]);
54200                 }
54201
54202                 // key points and nodes are those connected to the ways,
54203                 // they are projected onto the circle, inbetween nodes are moved
54204                 // to constant intervals between key nodes, extra inbetween nodes are
54205                 // added if necessary.
54206                 for (i = 0; i < keyPoints.length; i++) {
54207                     var nextKeyNodeIndex = (i + 1) % keyNodes.length;
54208                     var startNode = keyNodes[i];
54209                     var endNode = keyNodes[nextKeyNodeIndex];
54210                     var startNodeIndex = nodes.indexOf(startNode);
54211                     var endNodeIndex = nodes.indexOf(endNode);
54212                     var numberNewPoints = -1;
54213                     var indexRange = endNodeIndex - startNodeIndex;
54214                     var nearNodes = {};
54215                     var inBetweenNodes = [];
54216                     var startAngle, endAngle, totalAngle, eachAngle;
54217                     var angle, loc, node, origNode;
54218
54219                     if (indexRange < 0) {
54220                         indexRange += nodes.length;
54221                     }
54222
54223                     // position this key node
54224                     var distance = geoVecLength(centroid, keyPoints[i]) || 1e-4;
54225                     keyPoints[i] = [
54226                         centroid[0] + (keyPoints[i][0] - centroid[0]) / distance * radius,
54227                         centroid[1] + (keyPoints[i][1] - centroid[1]) / distance * radius
54228                     ];
54229                     loc = projection.invert(keyPoints[i]);
54230                     node = keyNodes[i];
54231                     origNode = origNodes[node.id];
54232                     node = node.move(geoVecInterp(origNode.loc, loc, t));
54233                     graph = graph.replace(node);
54234
54235                     // figure out the between delta angle we want to match to
54236                     startAngle = Math.atan2(keyPoints[i][1] - centroid[1], keyPoints[i][0] - centroid[0]);
54237                     endAngle = Math.atan2(keyPoints[nextKeyNodeIndex][1] - centroid[1], keyPoints[nextKeyNodeIndex][0] - centroid[0]);
54238                     totalAngle = endAngle - startAngle;
54239
54240                     // detects looping around -pi/pi
54241                     if (totalAngle * sign > 0) {
54242                         totalAngle = -sign * (2 * Math.PI - Math.abs(totalAngle));
54243                     }
54244
54245                     do {
54246                         numberNewPoints++;
54247                         eachAngle = totalAngle / (indexRange + numberNewPoints);
54248                     } while (Math.abs(eachAngle) > maxAngle);
54249
54250
54251                     // move existing nodes
54252                     for (j = 1; j < indexRange; j++) {
54253                         angle = startAngle + j * eachAngle;
54254                         loc = projection.invert([
54255                             centroid[0] + Math.cos(angle) * radius,
54256                             centroid[1] + Math.sin(angle) * radius
54257                         ]);
54258
54259                         node = nodes[(j + startNodeIndex) % nodes.length];
54260                         origNode = origNodes[node.id];
54261                         nearNodes[node.id] = angle;
54262
54263                         node = node.move(geoVecInterp(origNode.loc, loc, t));
54264                         graph = graph.replace(node);
54265                     }
54266
54267                     // add new inbetween nodes if necessary
54268                     for (j = 0; j < numberNewPoints; j++) {
54269                         angle = startAngle + (indexRange + j) * eachAngle;
54270                         loc = projection.invert([
54271                             centroid[0] + Math.cos(angle) * radius,
54272                             centroid[1] + Math.sin(angle) * radius
54273                         ]);
54274
54275                         // choose a nearnode to use as the original
54276                         var min = Infinity;
54277                         for (var nodeId in nearNodes) {
54278                             var nearAngle = nearNodes[nodeId];
54279                             var dist = Math.abs(nearAngle - angle);
54280                             if (dist < min) {
54281                                 dist = min;
54282                                 origNode = origNodes[nodeId];
54283                             }
54284                         }
54285
54286                         node = osmNode({ loc: geoVecInterp(origNode.loc, loc, t) });
54287                         graph = graph.replace(node);
54288
54289                         nodes.splice(endNodeIndex + j, 0, node);
54290                         inBetweenNodes.push(node.id);
54291                     }
54292
54293                     // Check for other ways that share these keyNodes..
54294                     // If keyNodes are adjacent in both ways,
54295                     // we can add inBetween nodes to that shared way too..
54296                     if (indexRange === 1 && inBetweenNodes.length) {
54297                         var startIndex1 = way.nodes.lastIndexOf(startNode.id);
54298                         var endIndex1 = way.nodes.lastIndexOf(endNode.id);
54299                         var wayDirection1 = (endIndex1 - startIndex1);
54300                         if (wayDirection1 < -1) { wayDirection1 = 1; }
54301
54302                         var parentWays = graph.parentWays(keyNodes[i]);
54303                         for (j = 0; j < parentWays.length; j++) {
54304                             var sharedWay = parentWays[j];
54305                             if (sharedWay === way) { continue; }
54306
54307                             if (sharedWay.areAdjacent(startNode.id, endNode.id)) {
54308                                 var startIndex2 = sharedWay.nodes.lastIndexOf(startNode.id);
54309                                 var endIndex2 = sharedWay.nodes.lastIndexOf(endNode.id);
54310                                 var wayDirection2 = (endIndex2 - startIndex2);
54311                                 var insertAt = endIndex2;
54312                                 if (wayDirection2 < -1) { wayDirection2 = 1; }
54313
54314                                 if (wayDirection1 !== wayDirection2) {
54315                                     inBetweenNodes.reverse();
54316                                     insertAt = startIndex2;
54317                                 }
54318                                 for (k = 0; k < inBetweenNodes.length; k++) {
54319                                     sharedWay = sharedWay.addNode(inBetweenNodes[k], insertAt + k);
54320                                 }
54321                                 graph = graph.replace(sharedWay);
54322                             }
54323                         }
54324                     }
54325
54326                 }
54327
54328                 // update the way to have all the new nodes
54329                 ids = nodes.map(function(n) { return n.id; });
54330                 ids.push(ids[0]);
54331
54332                 way = way.update({nodes: ids});
54333                 graph = graph.replace(way);
54334
54335                 return graph;
54336             };
54337
54338
54339             action.makeConvex = function(graph) {
54340                 var way = graph.entity(wayId);
54341                 var nodes = utilArrayUniq(graph.childNodes(way));
54342                 var points = nodes.map(function(n) { return projection(n.loc); });
54343                 var sign = d3_polygonArea(points) > 0 ? 1 : -1;
54344                 var hull = d3_polygonHull(points);
54345                 var i, j;
54346
54347                 // D3 convex hulls go counterclockwise..
54348                 if (sign === -1) {
54349                     nodes.reverse();
54350                     points.reverse();
54351                 }
54352
54353                 for (i = 0; i < hull.length - 1; i++) {
54354                     var startIndex = points.indexOf(hull[i]);
54355                     var endIndex = points.indexOf(hull[i+1]);
54356                     var indexRange = (endIndex - startIndex);
54357
54358                     if (indexRange < 0) {
54359                         indexRange += nodes.length;
54360                     }
54361
54362                     // move interior nodes to the surface of the convex hull..
54363                     for (j = 1; j < indexRange; j++) {
54364                         var point = geoVecInterp(hull[i], hull[i+1], j / indexRange);
54365                         var node = nodes[(j + startIndex) % nodes.length].move(projection.invert(point));
54366                         graph = graph.replace(node);
54367                     }
54368                 }
54369                 return graph;
54370             };
54371
54372
54373             action.disabled = function(graph) {
54374                 if (!graph.entity(wayId).isClosed()) {
54375                     return 'not_closed';
54376                 }
54377
54378                 //disable when already circular
54379                 var way = graph.entity(wayId);
54380                 var nodes = utilArrayUniq(graph.childNodes(way));
54381                 var points = nodes.map(function(n) { return projection(n.loc); });
54382                 var hull = d3_polygonHull(points);
54383                 var epsilonAngle =  Math.PI / 180;
54384                 if (hull.length !== points.length || hull.length < 3){
54385                     return false;
54386                 }
54387                 var centroid = d3_polygonCentroid(points);
54388                 var radius = geoVecLengthSquare(centroid, points[0]);
54389
54390                 // compare distances between centroid and points
54391                 for (var i = 0; i<hull.length; i++){
54392                     var actualPoint = hull[i];
54393                     var actualDist = geoVecLengthSquare(actualPoint, centroid);
54394                     var diff = Math.abs(actualDist - radius);
54395                     //compare distances with epsilon-error (5%)
54396                     if (diff > 0.05*radius) {
54397                         return false;
54398                     }
54399                 }
54400                 
54401                 //check if central angles are smaller than maxAngle
54402                 for (i = 0; i<hull.length; i++){
54403                     actualPoint = hull[i];
54404                     var nextPoint = hull[(i+1)%hull.length];
54405                     var startAngle = Math.atan2(actualPoint[1] - centroid[1], actualPoint[0] - centroid[0]);
54406                     var endAngle = Math.atan2(nextPoint[1] - centroid[1], nextPoint[0] - centroid[0]);
54407                     var angle = endAngle - startAngle;
54408                     if (angle < 0) {
54409                         angle = -angle;
54410                     }
54411                     if (angle > Math.PI){
54412                         angle = (2*Math.PI - angle);
54413                     }
54414          
54415                     if (angle > maxAngle + epsilonAngle) {
54416                         return false;
54417                     }
54418                 }
54419                 return 'already_circular';
54420             };
54421
54422
54423             action.transitionable = true;
54424
54425
54426             return action;
54427         }
54428
54429         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteWayAction.as
54430         function actionDeleteWay(wayID) {
54431
54432             function canDeleteNode(node, graph) {
54433                 // don't delete nodes still attached to ways or relations
54434                 if (graph.parentWays(node).length ||
54435                     graph.parentRelations(node).length) { return false; }
54436
54437                 var geometries = osmNodeGeometriesForTags(node.tags);
54438                 // don't delete if this node can be a standalone point
54439                 if (geometries.point) { return false; }
54440                 // delete if this node only be a vertex
54441                 if (geometries.vertex) { return true; }
54442
54443                 // iD doesn't know if this should be a point or vertex,
54444                 // so only delete if there are no interesting tags
54445                 return !node.hasInterestingTags();
54446             }
54447
54448
54449             var action = function(graph) {
54450                 var way = graph.entity(wayID);
54451
54452                 graph.parentRelations(way).forEach(function(parent) {
54453                     parent = parent.removeMembersWithID(wayID);
54454                     graph = graph.replace(parent);
54455
54456                     if (parent.isDegenerate()) {
54457                         graph = actionDeleteRelation(parent.id)(graph);
54458                     }
54459                 });
54460
54461                 (new Set(way.nodes)).forEach(function(nodeID) {
54462                     graph = graph.replace(way.removeNode(nodeID));
54463
54464                     var node = graph.entity(nodeID);
54465                     if (canDeleteNode(node, graph)) {
54466                         graph = graph.remove(node);
54467                     }
54468                 });
54469
54470                 return graph.remove(way);
54471             };
54472
54473
54474             return action;
54475         }
54476
54477         function actionDeleteMultiple(ids) {
54478             var actions = {
54479                 way: actionDeleteWay,
54480                 node: actionDeleteNode,
54481                 relation: actionDeleteRelation
54482             };
54483
54484
54485             var action = function(graph) {
54486                 ids.forEach(function(id) {
54487                     if (graph.hasEntity(id)) { // It may have been deleted aready.
54488                         graph = actions[graph.entity(id).type](id)(graph);
54489                     }
54490                 });
54491
54492                 return graph;
54493             };
54494
54495
54496             return action;
54497         }
54498
54499         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteRelationAction.as
54500         function actionDeleteRelation(relationID, allowUntaggedMembers) {
54501
54502             function canDeleteEntity(entity, graph) {
54503                 return !graph.parentWays(entity).length &&
54504                     !graph.parentRelations(entity).length &&
54505                     (!entity.hasInterestingTags() && !allowUntaggedMembers);
54506             }
54507
54508
54509             var action = function(graph) {
54510                 var relation = graph.entity(relationID);
54511
54512                 graph.parentRelations(relation)
54513                     .forEach(function(parent) {
54514                         parent = parent.removeMembersWithID(relationID);
54515                         graph = graph.replace(parent);
54516
54517                         if (parent.isDegenerate()) {
54518                             graph = actionDeleteRelation(parent.id)(graph);
54519                         }
54520                     });
54521
54522                 var memberIDs = utilArrayUniq(relation.members.map(function(m) { return m.id; }));
54523                 memberIDs.forEach(function(memberID) {
54524                     graph = graph.replace(relation.removeMembersWithID(memberID));
54525
54526                     var entity = graph.entity(memberID);
54527                     if (canDeleteEntity(entity, graph)) {
54528                         graph = actionDeleteMultiple([memberID])(graph);
54529                     }
54530                 });
54531
54532                 return graph.remove(relation);
54533             };
54534
54535
54536             return action;
54537         }
54538
54539         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteNodeAction.as
54540         function actionDeleteNode(nodeId) {
54541             var action = function(graph) {
54542                 var node = graph.entity(nodeId);
54543
54544                 graph.parentWays(node)
54545                     .forEach(function(parent) {
54546                         parent = parent.removeNode(nodeId);
54547                         graph = graph.replace(parent);
54548
54549                         if (parent.isDegenerate()) {
54550                             graph = actionDeleteWay(parent.id)(graph);
54551                         }
54552                     });
54553
54554                 graph.parentRelations(node)
54555                     .forEach(function(parent) {
54556                         parent = parent.removeMembersWithID(nodeId);
54557                         graph = graph.replace(parent);
54558
54559                         if (parent.isDegenerate()) {
54560                             graph = actionDeleteRelation(parent.id)(graph);
54561                         }
54562                     });
54563
54564                 return graph.remove(node);
54565             };
54566
54567
54568             return action;
54569         }
54570
54571         // Connect the ways at the given nodes.
54572         //
54573         // First choose a node to be the survivor, with preference given
54574         // to an existing (not new) node.
54575         //
54576         // Tags and relation memberships of of non-surviving nodes are merged
54577         // to the survivor.
54578         //
54579         // This is the inverse of `iD.actionDisconnect`.
54580         //
54581         // Reference:
54582         //   https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeNodesAction.as
54583         //   https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/MergeNodesAction.java
54584         //
54585         function actionConnect(nodeIDs) {
54586             var action = function(graph) {
54587                 var survivor;
54588                 var node;
54589                 var parents;
54590                 var i, j;
54591
54592                 // Choose a survivor node, prefer an existing (not new) node - #4974
54593                 for (i = 0; i < nodeIDs.length; i++) {
54594                     survivor = graph.entity(nodeIDs[i]);
54595                     if (survivor.version) { break; }  // found one
54596                 }
54597
54598                 // Replace all non-surviving nodes with the survivor and merge tags.
54599                 for (i = 0; i < nodeIDs.length; i++) {
54600                     node = graph.entity(nodeIDs[i]);
54601                     if (node.id === survivor.id) { continue; }
54602
54603                     parents = graph.parentWays(node);
54604                     for (j = 0; j < parents.length; j++) {
54605                         if (!parents[j].areAdjacent(node.id, survivor.id)) {
54606                             graph = graph.replace(parents[j].replaceNode(node.id, survivor.id));
54607                         }
54608                     }
54609
54610                     parents = graph.parentRelations(node);
54611                     for (j = 0; j < parents.length; j++) {
54612                         graph = graph.replace(parents[j].replaceMember(node, survivor));
54613                     }
54614
54615                     survivor = survivor.mergeTags(node.tags);
54616                     graph = actionDeleteNode(node.id)(graph);
54617                 }
54618
54619                 graph = graph.replace(survivor);
54620
54621                 return graph;
54622             };
54623
54624
54625             action.disabled = function(graph) {
54626                 var seen = {};
54627                 var restrictionIDs = [];
54628                 var survivor;
54629                 var node, way;
54630                 var relations, relation, role;
54631                 var i, j, k;
54632
54633                 // Choose a survivor node, prefer an existing (not new) node - #4974
54634                 for (i = 0; i < nodeIDs.length; i++) {
54635                     survivor = graph.entity(nodeIDs[i]);
54636                     if (survivor.version) { break; }  // found one
54637                 }
54638
54639                 // 1. disable if the nodes being connected have conflicting relation roles
54640                 for (i = 0; i < nodeIDs.length; i++) {
54641                     node = graph.entity(nodeIDs[i]);
54642                     relations = graph.parentRelations(node);
54643
54644                     for (j = 0; j < relations.length; j++) {
54645                         relation = relations[j];
54646                         role = relation.memberById(node.id).role || '';
54647
54648                         // if this node is a via node in a restriction, remember for later
54649                         if (relation.hasFromViaTo()) {
54650                             restrictionIDs.push(relation.id);
54651                         }
54652
54653                         if (seen[relation.id] !== undefined && seen[relation.id] !== role) {
54654                             return 'relation';
54655                         } else {
54656                             seen[relation.id] = role;
54657                         }
54658                     }
54659                 }
54660
54661                 // gather restrictions for parent ways
54662                 for (i = 0; i < nodeIDs.length; i++) {
54663                     node = graph.entity(nodeIDs[i]);
54664
54665                     var parents = graph.parentWays(node);
54666                     for (j = 0; j < parents.length; j++) {
54667                         var parent = parents[j];
54668                         relations = graph.parentRelations(parent);
54669
54670                         for (k = 0; k < relations.length; k++) {
54671                             relation = relations[k];
54672                             if (relation.hasFromViaTo()) {
54673                                 restrictionIDs.push(relation.id);
54674                             }
54675                         }
54676                     }
54677                 }
54678
54679
54680                 // test restrictions
54681                 restrictionIDs = utilArrayUniq(restrictionIDs);
54682                 for (i = 0; i < restrictionIDs.length; i++) {
54683                     relation = graph.entity(restrictionIDs[i]);
54684                     if (!relation.isComplete(graph)) { continue; }
54685
54686                     var memberWays = relation.members
54687                         .filter(function(m) { return m.type === 'way'; })
54688                         .map(function(m) { return graph.entity(m.id); });
54689
54690                     memberWays = utilArrayUniq(memberWays);
54691                     var f = relation.memberByRole('from');
54692                     var t = relation.memberByRole('to');
54693                     var isUturn = (f.id === t.id);
54694
54695                     // 2a. disable if connection would damage a restriction
54696                     // (a key node is a node at the junction of ways)
54697                     var nodes = { from: [], via: [], to: [], keyfrom: [], keyto: [] };
54698                     for (j = 0; j < relation.members.length; j++) {
54699                         collectNodes(relation.members[j], nodes);
54700                     }
54701
54702                     nodes.keyfrom = utilArrayUniq(nodes.keyfrom.filter(hasDuplicates));
54703                     nodes.keyto = utilArrayUniq(nodes.keyto.filter(hasDuplicates));
54704
54705                     var filter = keyNodeFilter(nodes.keyfrom, nodes.keyto);
54706                     nodes.from = nodes.from.filter(filter);
54707                     nodes.via = nodes.via.filter(filter);
54708                     nodes.to = nodes.to.filter(filter);
54709
54710                     var connectFrom = false;
54711                     var connectVia = false;
54712                     var connectTo = false;
54713                     var connectKeyFrom = false;
54714                     var connectKeyTo = false;
54715
54716                     for (j = 0; j < nodeIDs.length; j++) {
54717                         var n = nodeIDs[j];
54718                         if (nodes.from.indexOf(n) !== -1)    { connectFrom = true; }
54719                         if (nodes.via.indexOf(n) !== -1)     { connectVia = true; }
54720                         if (nodes.to.indexOf(n) !== -1)      { connectTo = true; }
54721                         if (nodes.keyfrom.indexOf(n) !== -1) { connectKeyFrom = true; }
54722                         if (nodes.keyto.indexOf(n) !== -1)   { connectKeyTo = true; }
54723                     }
54724                     if (connectFrom && connectTo && !isUturn) { return 'restriction'; }
54725                     if (connectFrom && connectVia) { return 'restriction'; }
54726                     if (connectTo   && connectVia) { return 'restriction'; }
54727
54728                     // connecting to a key node -
54729                     // if both nodes are on a member way (i.e. part of the turn restriction),
54730                     // the connecting node must be adjacent to the key node.
54731                     if (connectKeyFrom || connectKeyTo) {
54732                         if (nodeIDs.length !== 2) { return 'restriction'; }
54733
54734                         var n0 = null;
54735                         var n1 = null;
54736                         for (j = 0; j < memberWays.length; j++) {
54737                             way = memberWays[j];
54738                             if (way.contains(nodeIDs[0])) { n0 = nodeIDs[0]; }
54739                             if (way.contains(nodeIDs[1])) { n1 = nodeIDs[1]; }
54740                         }
54741
54742                         if (n0 && n1) {    // both nodes are part of the restriction
54743                             var ok = false;
54744                             for (j = 0; j < memberWays.length; j++) {
54745                                 way = memberWays[j];
54746                                 if (way.areAdjacent(n0, n1)) {
54747                                     ok = true;
54748                                     break;
54749                                 }
54750                             }
54751                             if (!ok) {
54752                                 return 'restriction';
54753                             }
54754                         }
54755                     }
54756
54757                     // 2b. disable if nodes being connected will destroy a member way in a restriction
54758                     // (to test, make a copy and try actually connecting the nodes)
54759                     for (j = 0; j < memberWays.length; j++) {
54760                         way = memberWays[j].update({});   // make copy
54761                         for (k = 0; k < nodeIDs.length; k++) {
54762                             if (nodeIDs[k] === survivor.id) { continue; }
54763
54764                             if (way.areAdjacent(nodeIDs[k], survivor.id)) {
54765                                 way = way.removeNode(nodeIDs[k]);
54766                             } else {
54767                                 way = way.replaceNode(nodeIDs[k], survivor.id);
54768                             }
54769                         }
54770                         if (way.isDegenerate()) {
54771                             return 'restriction';
54772                         }
54773                     }
54774                 }
54775
54776                 return false;
54777
54778
54779                 // if a key node appears multiple times (indexOf !== lastIndexOf) it's a FROM-VIA or TO-VIA junction
54780                 function hasDuplicates(n, i, arr) {
54781                     return arr.indexOf(n) !== arr.lastIndexOf(n);
54782                 }
54783
54784                 function keyNodeFilter(froms, tos) {
54785                     return function(n) {
54786                         return froms.indexOf(n) === -1 && tos.indexOf(n) === -1;
54787                     };
54788                 }
54789
54790                 function collectNodes(member, collection) {
54791                     var entity = graph.hasEntity(member.id);
54792                     if (!entity) { return; }
54793
54794                     var role = member.role || '';
54795                     if (!collection[role]) {
54796                         collection[role] = [];
54797                     }
54798
54799                     if (member.type === 'node') {
54800                         collection[role].push(member.id);
54801                         if (role === 'via') {
54802                             collection.keyfrom.push(member.id);
54803                             collection.keyto.push(member.id);
54804                         }
54805
54806                     } else if (member.type === 'way') {
54807                         collection[role].push.apply(collection[role], entity.nodes);
54808                         if (role === 'from' || role === 'via') {
54809                             collection.keyfrom.push(entity.first());
54810                             collection.keyfrom.push(entity.last());
54811                         }
54812                         if (role === 'to' || role === 'via') {
54813                             collection.keyto.push(entity.first());
54814                             collection.keyto.push(entity.last());
54815                         }
54816                     }
54817                 }
54818             };
54819
54820
54821             return action;
54822         }
54823
54824         function actionCopyEntities(ids, fromGraph) {
54825             var _copies = {};
54826
54827
54828             var action = function(graph) {
54829                 ids.forEach(function(id) {
54830                     fromGraph.entity(id).copy(fromGraph, _copies);
54831                 });
54832
54833                 for (var id in _copies) {
54834                     graph = graph.replace(_copies[id]);
54835                 }
54836
54837                 return graph;
54838             };
54839
54840
54841             action.copies = function() {
54842                 return _copies;
54843             };
54844
54845
54846             return action;
54847         }
54848
54849         function actionDeleteMember(relationId, memberIndex) {
54850             return function(graph) {
54851                 var relation = graph.entity(relationId)
54852                     .removeMember(memberIndex);
54853
54854                 graph = graph.replace(relation);
54855
54856                 if (relation.isDegenerate())
54857                     { graph = actionDeleteRelation(relation.id)(graph); }
54858
54859                 return graph;
54860             };
54861         }
54862
54863         function actionDiscardTags(difference) {
54864
54865             return function(graph) {
54866                 function discardTags(entity) {
54867                     var tags = {};
54868                     var keys = Object.keys(entity.tags);
54869                     var discarded = false;
54870
54871                     for (var i = 0; i < keys.length; i++) {
54872                         var k = keys[i];
54873                         if (dataDiscarded[k] || !entity.tags[k]) {
54874                             discarded = true;
54875                         } else {
54876                             tags[k] = entity.tags[k];
54877                         }
54878                     }
54879
54880                     if (discarded) {
54881                         graph = graph.replace(entity.update({ tags: tags }));
54882                     }
54883                 }
54884
54885                 difference.modified().forEach(discardTags);
54886                 difference.created().forEach(discardTags);
54887
54888                 return graph;
54889             };
54890         }
54891
54892         // Disconect the ways at the given node.
54893         //
54894         // Optionally, disconnect only the given ways.
54895         //
54896         // For testing convenience, accepts an ID to assign to the (first) new node.
54897         // Normally, this will be undefined and the way will automatically
54898         // be assigned a new ID.
54899         //
54900         // This is the inverse of `iD.actionConnect`.
54901         //
54902         // Reference:
54903         //   https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/UnjoinNodeAction.as
54904         //   https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/UnGlueAction.java
54905         //
54906         function actionDisconnect(nodeId, newNodeId) {
54907             var wayIds;
54908
54909
54910             var action = function(graph) {
54911                 var node = graph.entity(nodeId);
54912                 var connections = action.connections(graph);
54913
54914                 connections.forEach(function(connection) {
54915                     var way = graph.entity(connection.wayID);
54916                     var newNode = osmNode({id: newNodeId, loc: node.loc, tags: node.tags});
54917
54918                     graph = graph.replace(newNode);
54919                     if (connection.index === 0 && way.isArea()) {
54920                         // replace shared node with shared node..
54921                         graph = graph.replace(way.replaceNode(way.nodes[0], newNode.id));
54922                     } else if (way.isClosed() && connection.index === way.nodes.length - 1) {
54923                         // replace closing node with new new node..
54924                         graph = graph.replace(way.unclose().addNode(newNode.id));
54925                     } else {
54926                         // replace shared node with multiple new nodes..
54927                         graph = graph.replace(way.updateNode(newNode.id, connection.index));
54928                     }
54929                 });
54930
54931                 return graph;
54932             };
54933
54934
54935             action.connections = function(graph) {
54936                 var candidates = [];
54937                 var keeping = false;
54938                 var parentWays = graph.parentWays(graph.entity(nodeId));
54939
54940                 parentWays.forEach(function(way) {
54941                     if (wayIds && wayIds.indexOf(way.id) === -1) {
54942                         keeping = true;
54943                         return;
54944                     }
54945                     if (way.isArea() && (way.nodes[0] === nodeId)) {
54946                         candidates.push({ wayID: way.id, index: 0 });
54947                     } else {
54948                         way.nodes.forEach(function(waynode, index) {
54949                             if (waynode === nodeId) {
54950                                 if (way.isClosed() && parentWays.length > 1 && wayIds && wayIds.indexOf(way.id) !== -1 && index === way.nodes.length-1) {
54951                                     return;
54952                                 }
54953                                 candidates.push({ wayID: way.id, index: index });
54954                             }
54955                         });
54956                     }
54957                 });
54958
54959                 return keeping ? candidates : candidates.slice(1);
54960             };
54961
54962
54963             action.disabled = function(graph) {
54964                 var connections = action.connections(graph);
54965                 if (connections.length === 0)
54966                     { return 'not_connected'; }
54967
54968                 var parentWays = graph.parentWays(graph.entity(nodeId));
54969                 var seenRelationIds = {};
54970                 var sharedRelation;
54971
54972                 parentWays.forEach(function(way) {
54973                     var relations = graph.parentRelations(way);
54974                     relations.forEach(function(relation) {
54975                         if (relation.id in seenRelationIds) {
54976                             if (wayIds) {
54977                                 if (wayIds.indexOf(way.id) !== -1 ||
54978                                     wayIds.indexOf(seenRelationIds[relation.id]) !== -1) {
54979                                     sharedRelation = relation;
54980                                 }
54981                             } else {
54982                                 sharedRelation = relation;
54983                             }
54984                         } else {
54985                             seenRelationIds[relation.id] = way.id;
54986                         }
54987                     });
54988                 });
54989
54990                 if (sharedRelation)
54991                     { return 'relation'; }
54992             };
54993
54994
54995             action.limitWays = function(val) {
54996                 if (!arguments.length) { return wayIds; }
54997                 wayIds = val;
54998                 return action;
54999             };
55000
55001
55002             return action;
55003         }
55004
55005         function actionExtract(entityID, projection) {
55006
55007             var extractedNodeID;
55008
55009             var action = function(graph) {
55010                 var entity = graph.entity(entityID);
55011
55012                 if (entity.type === 'node') {
55013                     return extractFromNode(entity, graph);
55014                 }
55015
55016                 return extractFromArea(entity, graph);
55017             };
55018
55019             function extractFromNode(node, graph) {
55020
55021                 extractedNodeID = node.id;
55022
55023                 // Create a new node to replace the one we will detach
55024                 var replacement = osmNode({ loc: node.loc });
55025                 graph = graph.replace(replacement);
55026
55027                 // Process each way in turn, updating the graph as we go
55028                 graph = graph.parentWays(node)
55029                     .reduce(function(accGraph, parentWay) {
55030                         return accGraph.replace(parentWay.replaceNode(entityID, replacement.id));
55031                     }, graph);
55032
55033                 // Process any relations too
55034                 return graph.parentRelations(node)
55035                     .reduce(function(accGraph, parentRel) {
55036                         return accGraph.replace(parentRel.replaceMember(node, replacement));
55037                     }, graph);
55038             }
55039
55040             function extractFromArea(entity, graph) {
55041
55042                 var keysToCopyAndRetain = ['source', 'wheelchair'];
55043                 var keysToRetain = ['area', 'type'];
55044                 var buildingKeysToRetain = ['architect', 'building', 'height', 'layer'];
55045
55046                 var centroid = d3_geoPath(projection).centroid(entity.asGeoJSON(graph, true));
55047
55048                 var isBuilding = entity.tags.building;
55049
55050                 var areaTags = Object.assign({}, entity.tags);  // shallow copy
55051                 var pointTags = {};
55052                 for (var key in areaTags) {
55053
55054                     if (keysToRetain.indexOf(key) !== -1) {
55055                         continue;
55056                     }
55057
55058                     if (isBuilding) {
55059                         // don't transfer building-related tags
55060                         if (buildingKeysToRetain.indexOf(key) !== -1 ||
55061                             key.match(/^building:.{1,}/) ||
55062                             key.match(/^roof:.{1,}/)) { continue; }
55063                     }
55064
55065                     // copy the tag from the area to the point
55066                     pointTags[key] = areaTags[key];
55067
55068                     // leave addresses and some other tags so they're on both features
55069                     if (keysToCopyAndRetain.indexOf(key) !== -1 || key.match(/^addr:.{1,}/)) {
55070                         continue;
55071                     }
55072
55073                     // remove the tag from the area
55074                     delete areaTags[key];
55075                 }
55076
55077                 if (!isBuilding) {
55078                     // ensure that the area keeps the area geometry
55079                     areaTags.area = 'yes';
55080                 }
55081
55082                 var replacement = osmNode({ loc: centroid, tags: pointTags });
55083                 graph = graph.replace(replacement);
55084
55085                 extractedNodeID = replacement.id;
55086
55087                 return graph.replace(entity.update({tags: areaTags}));
55088             }
55089
55090             action.getExtractedNodeID = function() {
55091                 return extractedNodeID;
55092             };
55093
55094             action.disabled = function(graph) {
55095                 var entity = graph.entity(entityID);
55096
55097                 if (entity.type === 'node') {
55098                     var parentRels = graph.parentRelations(entity);
55099                     for (var i = 0; i < parentRels.length; i++) {
55100                         var relation = parentRels[i];
55101                         if (!relation.hasFromViaTo()) { continue; }
55102
55103                         for (var j = 0; j < relation.members.length; j++) {
55104                             var m = relation.members[j];
55105                             if (m.id === entityID && (m.role === 'via' || m.role === 'location_hint')) {
55106                                 return 'restriction';
55107                             }
55108                         }
55109                     }
55110                 }
55111
55112                 return false;
55113             };
55114
55115
55116             return action;
55117         }
55118
55119         // Join ways at the end node they share.
55120         //
55121         // This is the inverse of `iD.actionSplit`.
55122         //
55123         // Reference:
55124         //   https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeWaysAction.as
55125         //   https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/CombineWayAction.java
55126         //
55127         function actionJoin(ids) {
55128
55129             function groupEntitiesByGeometry(graph) {
55130                 var entities = ids.map(function(id) { return graph.entity(id); });
55131                 return Object.assign(
55132                     { line: [] },
55133                     utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
55134                 );
55135             }
55136
55137
55138             var action = function(graph) {
55139                 var ways = ids.map(graph.entity, graph);
55140                 var survivorID = ways[0].id;
55141
55142                 // if any of the ways are sided (e.g. coastline, cliff, kerb)
55143                 // sort them first so they establish the overall order - #6033
55144                 ways.sort(function(a, b) {
55145                     var aSided = a.isSided();
55146                     var bSided = b.isSided();
55147                     return (aSided && !bSided) ? -1
55148                         : (bSided && !aSided) ? 1
55149                         : 0;
55150                 });
55151
55152                 // Prefer to keep an existing way.
55153                 for (var i = 0; i < ways.length; i++) {
55154                     if (!ways[i].isNew()) {
55155                         survivorID = ways[i].id;
55156                         break;
55157                     }
55158                 }
55159
55160                 var sequences = osmJoinWays(ways, graph);
55161                 var joined = sequences[0];
55162
55163                 // We might need to reverse some of these ways before joining them.  #4688
55164                 // `joined.actions` property will contain any actions we need to apply.
55165                 graph = sequences.actions.reduce(function(g, action) { return action(g); }, graph);
55166
55167                 var survivor = graph.entity(survivorID);
55168                 survivor = survivor.update({ nodes: joined.nodes.map(function(n) { return n.id; }) });
55169                 graph = graph.replace(survivor);
55170
55171                 joined.forEach(function(way) {
55172                     if (way.id === survivorID) { return; }
55173
55174                     graph.parentRelations(way).forEach(function(parent) {
55175                         graph = graph.replace(parent.replaceMember(way, survivor));
55176                     });
55177
55178                     survivor = survivor.mergeTags(way.tags);
55179
55180                     graph = graph.replace(survivor);
55181                     graph = actionDeleteWay(way.id)(graph);
55182                 });
55183
55184                 // Finds if the join created a single-member multipolygon,
55185                 // and if so turns it into a basic area instead
55186                 function checkForSimpleMultipolygon() {
55187                     if (!survivor.isClosed()) { return; }
55188
55189                     var multipolygons = graph.parentMultipolygons(survivor).filter(function(multipolygon) {
55190                         // find multipolygons where the survivor is the only member
55191                         return multipolygon.members.length === 1;
55192                     });
55193
55194                     // skip if this is the single member of multiple multipolygons
55195                     if (multipolygons.length !== 1) { return; }
55196
55197                     var multipolygon = multipolygons[0];
55198
55199                     for (var key in survivor.tags) {
55200                         if (multipolygon.tags[key] &&
55201                             // don't collapse if tags cannot be cleanly merged
55202                             multipolygon.tags[key] !== survivor.tags[key]) { return; }
55203                     }
55204
55205                     survivor = survivor.mergeTags(multipolygon.tags);
55206                     graph = graph.replace(survivor);
55207                     graph = actionDeleteRelation(multipolygon.id, true /* allow untagged members */)(graph);
55208
55209                     var tags = Object.assign({}, survivor.tags);
55210                     if (survivor.geometry(graph) !== 'area') {
55211                         // ensure the feature persists as an area
55212                         tags.area = 'yes';
55213                     }
55214                     delete tags.type; // remove type=multipolygon
55215                     survivor = survivor.update({ tags: tags });
55216                     graph = graph.replace(survivor);
55217                 }
55218                 checkForSimpleMultipolygon();
55219
55220                 return graph;
55221             };
55222
55223
55224             action.disabled = function(graph) {
55225                 var geometries = groupEntitiesByGeometry(graph);
55226                 if (ids.length < 2 || ids.length !== geometries.line.length) {
55227                     return 'not_eligible';
55228                 }
55229
55230                 var joined = osmJoinWays(ids.map(graph.entity, graph), graph);
55231                 if (joined.length > 1) {
55232                     return 'not_adjacent';
55233                 }
55234
55235                 // Loop through all combinations of path-pairs
55236                 // to check potential intersections between all pairs
55237                 for (var i = 0; i < ids.length - 1; i++) {
55238                     for (var j = i + 1; j < ids.length; j++) {
55239                         var path1 = graph.childNodes(graph.entity(ids[i]))
55240                             .map(function(e) { return e.loc; });
55241                         var path2 = graph.childNodes(graph.entity(ids[j]))
55242                             .map(function(e) { return e.loc; });
55243                         var intersections = geoPathIntersections(path1, path2);
55244
55245                         // Check if intersections are just nodes lying on top of
55246                         // each other/the line, as opposed to crossing it
55247                         var common = utilArrayIntersection(
55248                             joined[0].nodes.map(function(n) { return n.loc.toString(); }),
55249                             intersections.map(function(n) { return n.toString(); })
55250                         );
55251                         if (common.length !== intersections.length) {
55252                             return 'paths_intersect';
55253                         }
55254                     }
55255                 }
55256
55257                 var nodeIds = joined[0].nodes.map(function(n) { return n.id; }).slice(1, -1);
55258                 var relation;
55259                 var tags = {};
55260                 var conflicting = false;
55261
55262                 joined[0].forEach(function(way) {
55263                     var parents = graph.parentRelations(way);
55264                     parents.forEach(function(parent) {
55265                         if (parent.isRestriction() && parent.members.some(function(m) { return nodeIds.indexOf(m.id) >= 0; })) {
55266                             relation = parent;
55267                         }
55268                     });
55269
55270                     for (var k in way.tags) {
55271                         if (!(k in tags)) {
55272                             tags[k] = way.tags[k];
55273                         } else if (tags[k] && osmIsInterestingTag(k) && tags[k] !== way.tags[k]) {
55274                             conflicting = true;
55275                         }
55276                     }
55277                 });
55278
55279                 if (relation) {
55280                     return 'restriction';
55281                 }
55282
55283                 if (conflicting) {
55284                     return 'conflicting_tags';
55285                 }
55286             };
55287
55288
55289             return action;
55290         }
55291
55292         function actionMerge(ids) {
55293
55294             function groupEntitiesByGeometry(graph) {
55295                 var entities = ids.map(function(id) { return graph.entity(id); });
55296                 return Object.assign(
55297                     { point: [], area: [], line: [], relation: [] },
55298                     utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
55299                 );
55300             }
55301
55302
55303             var action = function(graph) {
55304                 var geometries = groupEntitiesByGeometry(graph);
55305                 var target = geometries.area[0] || geometries.line[0];
55306                 var points = geometries.point;
55307
55308                 points.forEach(function(point) {
55309                     target = target.mergeTags(point.tags);
55310                     graph = graph.replace(target);
55311
55312                     graph.parentRelations(point).forEach(function(parent) {
55313                         graph = graph.replace(parent.replaceMember(point, target));
55314                     });
55315
55316                     var nodes = utilArrayUniq(graph.childNodes(target));
55317                     var removeNode = point;
55318
55319                     for (var i = 0; i < nodes.length; i++) {
55320                         var node = nodes[i];
55321                         if (graph.parentWays(node).length > 1 ||
55322                             graph.parentRelations(node).length ||
55323                             node.hasInterestingTags()) {
55324                             continue;
55325                         }
55326
55327                         // Found an uninteresting child node on the target way.
55328                         // Move orig point into its place to preserve point's history. #3683
55329                         graph = graph.replace(point.update({ tags: {}, loc: node.loc }));
55330                         target = target.replaceNode(node.id, point.id);
55331                         graph = graph.replace(target);
55332                         removeNode = node;
55333                         break;
55334                     }
55335
55336                     graph = graph.remove(removeNode);
55337                 });
55338
55339                 return graph;
55340             };
55341
55342
55343             action.disabled = function(graph) {
55344                 var geometries = groupEntitiesByGeometry(graph);
55345                 if (geometries.point.length === 0 ||
55346                     (geometries.area.length + geometries.line.length) !== 1 ||
55347                     geometries.relation.length !== 0) {
55348                     return 'not_eligible';
55349                 }
55350             };
55351
55352
55353             return action;
55354         }
55355
55356         // `actionMergeNodes` is just a combination of:
55357         //
55358         // 1. move all the nodes to a common location
55359         // 2. `actionConnect` them
55360
55361         function actionMergeNodes(nodeIDs, loc) {
55362
55363             // If there is a single "interesting" node, use that as the location.
55364             // Otherwise return the average location of all the nodes.
55365             function chooseLoc(graph) {
55366                 if (!nodeIDs.length) { return null; }
55367                 var sum = [0,0];
55368                 var interestingCount = 0;
55369                 var interestingLoc;
55370
55371                 for (var i = 0; i < nodeIDs.length; i++) {
55372                     var node = graph.entity(nodeIDs[i]);
55373                     if (node.hasInterestingTags()) {
55374                         interestingLoc = (++interestingCount === 1) ? node.loc : null;
55375                     }
55376                     sum = geoVecAdd(sum, node.loc);
55377                 }
55378
55379                 return interestingLoc || geoVecScale(sum, 1 / nodeIDs.length);
55380             }
55381
55382
55383             var action = function(graph) {
55384                 if (nodeIDs.length < 2) { return graph; }
55385                 var toLoc = loc;
55386                 if (!toLoc) {
55387                     toLoc = chooseLoc(graph);
55388                 }
55389
55390                 for (var i = 0; i < nodeIDs.length; i++) {
55391                     var node = graph.entity(nodeIDs[i]);
55392                     if (node.loc !== toLoc) {
55393                         graph = graph.replace(node.move(toLoc));
55394                     }
55395                 }
55396
55397                 return actionConnect(nodeIDs)(graph);
55398             };
55399
55400
55401             action.disabled = function(graph) {
55402                 if (nodeIDs.length < 2) { return 'not_eligible'; }
55403
55404                 for (var i = 0; i < nodeIDs.length; i++) {
55405                     var entity = graph.entity(nodeIDs[i]);
55406                     if (entity.type !== 'node') { return 'not_eligible'; }
55407                 }
55408
55409                 return actionConnect(nodeIDs).disabled(graph);
55410             };
55411
55412             return action;
55413         }
55414
55415         function osmChangeset() {
55416             if (!(this instanceof osmChangeset)) {
55417                 return (new osmChangeset()).initialize(arguments);
55418             } else if (arguments.length) {
55419                 this.initialize(arguments);
55420             }
55421         }
55422
55423
55424         osmEntity.changeset = osmChangeset;
55425
55426         osmChangeset.prototype = Object.create(osmEntity.prototype);
55427
55428         Object.assign(osmChangeset.prototype, {
55429
55430             type: 'changeset',
55431
55432
55433             extent: function() {
55434                 return new geoExtent();
55435             },
55436
55437
55438             geometry: function() {
55439                 return 'changeset';
55440             },
55441
55442
55443             asJXON: function() {
55444                 return {
55445                     osm: {
55446                         changeset: {
55447                             tag: Object.keys(this.tags).map(function(k) {
55448                                 return { '@k': k, '@v': this.tags[k] };
55449                             }, this),
55450                             '@version': 0.6,
55451                             '@generator': 'iD'
55452                         }
55453                     }
55454                 };
55455             },
55456
55457
55458             // Generate [osmChange](http://wiki.openstreetmap.org/wiki/OsmChange)
55459             // XML. Returns a string.
55460             osmChangeJXON: function(changes) {
55461                 var changeset_id = this.id;
55462
55463                 function nest(x, order) {
55464                     var groups = {};
55465                     for (var i = 0; i < x.length; i++) {
55466                         var tagName = Object.keys(x[i])[0];
55467                         if (!groups[tagName]) { groups[tagName] = []; }
55468                         groups[tagName].push(x[i][tagName]);
55469                     }
55470                     var ordered = {};
55471                     order.forEach(function(o) {
55472                         if (groups[o]) { ordered[o] = groups[o]; }
55473                     });
55474                     return ordered;
55475                 }
55476
55477
55478                 // sort relations in a changeset by dependencies
55479                 function sort(changes) {
55480
55481                     // find a referenced relation in the current changeset
55482                     function resolve(item) {
55483                         return relations.find(function(relation) {
55484                             return item.keyAttributes.type === 'relation'
55485                                 && item.keyAttributes.ref === relation['@id'];
55486                         });
55487                     }
55488
55489                     // a new item is an item that has not been already processed
55490                     function isNew(item) {
55491                         return !sorted[ item['@id'] ] && !processing.find(function(proc) {
55492                             return proc['@id'] === item['@id'];
55493                         });
55494                     }
55495
55496                     var processing = [];
55497                     var sorted = {};
55498                     var relations = changes.relation;
55499
55500                     if (!relations) { return changes; }
55501
55502                     for (var i = 0; i < relations.length; i++) {
55503                         var relation = relations[i];
55504
55505                         // skip relation if already sorted
55506                         if (!sorted[relation['@id']]) {
55507                             processing.push(relation);
55508                         }
55509
55510                         while (processing.length > 0) {
55511                             var next = processing[0],
55512                             deps = next.member.map(resolve).filter(Boolean).filter(isNew);
55513                             if (deps.length === 0) {
55514                                 sorted[next['@id']] = next;
55515                                 processing.shift();
55516                             } else {
55517                                 processing = deps.concat(processing);
55518                             }
55519                         }
55520                     }
55521
55522                     changes.relation = Object.values(sorted);
55523                     return changes;
55524                 }
55525
55526                 function rep(entity) {
55527                     return entity.asJXON(changeset_id);
55528                 }
55529
55530                 return {
55531                     osmChange: {
55532                         '@version': 0.6,
55533                         '@generator': 'iD',
55534                         'create': sort(nest(changes.created.map(rep), ['node', 'way', 'relation'])),
55535                         'modify': nest(changes.modified.map(rep), ['node', 'way', 'relation']),
55536                         'delete': Object.assign(nest(changes.deleted.map(rep), ['relation', 'way', 'node']), { '@if-unused': true })
55537                     }
55538                 };
55539             },
55540
55541
55542             asGeoJSON: function() {
55543                 return {};
55544             }
55545
55546         });
55547
55548         function osmNote() {
55549             if (!(this instanceof osmNote)) {
55550                 return (new osmNote()).initialize(arguments);
55551             } else if (arguments.length) {
55552                 this.initialize(arguments);
55553             }
55554         }
55555
55556
55557         osmNote.id = function() {
55558             return osmNote.id.next--;
55559         };
55560
55561
55562         osmNote.id.next = -1;
55563
55564
55565         Object.assign(osmNote.prototype, {
55566
55567             type: 'note',
55568
55569             initialize: function(sources) {
55570                 for (var i = 0; i < sources.length; ++i) {
55571                     var source = sources[i];
55572                     for (var prop in source) {
55573                         if (Object.prototype.hasOwnProperty.call(source, prop)) {
55574                             if (source[prop] === undefined) {
55575                                 delete this[prop];
55576                             } else {
55577                                 this[prop] = source[prop];
55578                             }
55579                         }
55580                     }
55581                 }
55582
55583                 if (!this.id) {
55584                     this.id = osmNote.id() + '';  // as string
55585                 }
55586
55587                 return this;
55588             },
55589
55590             extent: function() {
55591                 return new geoExtent(this.loc);
55592             },
55593
55594             update: function(attrs) {
55595                 return osmNote(this, attrs); // {v: 1 + (this.v || 0)}
55596             },
55597
55598             isNew: function() {
55599                 return this.id < 0;
55600             },
55601
55602             move: function(loc) {
55603                 return this.update({ loc: loc });
55604             }
55605
55606         });
55607
55608         function osmRelation() {
55609             if (!(this instanceof osmRelation)) {
55610                 return (new osmRelation()).initialize(arguments);
55611             } else if (arguments.length) {
55612                 this.initialize(arguments);
55613             }
55614         }
55615
55616
55617         osmEntity.relation = osmRelation;
55618
55619         osmRelation.prototype = Object.create(osmEntity.prototype);
55620
55621
55622         osmRelation.creationOrder = function(a, b) {
55623             var aId = parseInt(osmEntity.id.toOSM(a.id), 10);
55624             var bId = parseInt(osmEntity.id.toOSM(b.id), 10);
55625
55626             if (aId < 0 || bId < 0) { return aId - bId; }
55627             return bId - aId;
55628         };
55629
55630
55631         Object.assign(osmRelation.prototype, {
55632             type: 'relation',
55633             members: [],
55634
55635
55636             copy: function(resolver, copies) {
55637                 if (copies[this.id]) { return copies[this.id]; }
55638
55639                 var copy = osmEntity.prototype.copy.call(this, resolver, copies);
55640
55641                 var members = this.members.map(function(member) {
55642                     return Object.assign({}, member, { id: resolver.entity(member.id).copy(resolver, copies).id });
55643                 });
55644
55645                 copy = copy.update({members: members});
55646                 copies[this.id] = copy;
55647
55648                 return copy;
55649             },
55650
55651
55652             extent: function(resolver, memo) {
55653                 return resolver.transient(this, 'extent', function() {
55654                     if (memo && memo[this.id]) { return geoExtent(); }
55655                     memo = memo || {};
55656                     memo[this.id] = true;
55657
55658                     var extent = geoExtent();
55659                     for (var i = 0; i < this.members.length; i++) {
55660                         var member = resolver.hasEntity(this.members[i].id);
55661                         if (member) {
55662                             extent._extend(member.extent(resolver, memo));
55663                         }
55664                     }
55665                     return extent;
55666                 });
55667             },
55668
55669
55670             geometry: function(graph) {
55671                 return graph.transient(this, 'geometry', function() {
55672                     return this.isMultipolygon() ? 'area' : 'relation';
55673                 });
55674             },
55675
55676
55677             isDegenerate: function() {
55678                 return this.members.length === 0;
55679             },
55680
55681
55682             // Return an array of members, each extended with an 'index' property whose value
55683             // is the member index.
55684             indexedMembers: function() {
55685                 var result = new Array(this.members.length);
55686                 for (var i = 0; i < this.members.length; i++) {
55687                     result[i] = Object.assign({}, this.members[i], {index: i});
55688                 }
55689                 return result;
55690             },
55691
55692
55693             // Return the first member with the given role. A copy of the member object
55694             // is returned, extended with an 'index' property whose value is the member index.
55695             memberByRole: function(role) {
55696                 for (var i = 0; i < this.members.length; i++) {
55697                     if (this.members[i].role === role) {
55698                         return Object.assign({}, this.members[i], {index: i});
55699                     }
55700                 }
55701             },
55702
55703             // Same as memberByRole, but returns all members with the given role
55704             membersByRole: function(role) {
55705                 var result = [];
55706                 for (var i = 0; i < this.members.length; i++) {
55707                     if (this.members[i].role === role) {
55708                         result.push(Object.assign({}, this.members[i], {index: i}));
55709                     }
55710                 }
55711                 return result;
55712             },
55713
55714             // Return the first member with the given id. A copy of the member object
55715             // is returned, extended with an 'index' property whose value is the member index.
55716             memberById: function(id) {
55717                 for (var i = 0; i < this.members.length; i++) {
55718                     if (this.members[i].id === id) {
55719                         return Object.assign({}, this.members[i], {index: i});
55720                     }
55721                 }
55722             },
55723
55724
55725             // Return the first member with the given id and role. A copy of the member object
55726             // is returned, extended with an 'index' property whose value is the member index.
55727             memberByIdAndRole: function(id, role) {
55728                 for (var i = 0; i < this.members.length; i++) {
55729                     if (this.members[i].id === id && this.members[i].role === role) {
55730                         return Object.assign({}, this.members[i], {index: i});
55731                     }
55732                 }
55733             },
55734
55735
55736             addMember: function(member, index) {
55737                 var members = this.members.slice();
55738                 members.splice(index === undefined ? members.length : index, 0, member);
55739                 return this.update({members: members});
55740             },
55741
55742
55743             updateMember: function(member, index) {
55744                 var members = this.members.slice();
55745                 members.splice(index, 1, Object.assign({}, members[index], member));
55746                 return this.update({members: members});
55747             },
55748
55749
55750             removeMember: function(index) {
55751                 var members = this.members.slice();
55752                 members.splice(index, 1);
55753                 return this.update({members: members});
55754             },
55755
55756
55757             removeMembersWithID: function(id) {
55758                 var members = this.members.filter(function(m) { return m.id !== id; });
55759                 return this.update({members: members});
55760             },
55761
55762             moveMember: function(fromIndex, toIndex) {
55763                 var members = this.members.slice();
55764                 members.splice(toIndex, 0, members.splice(fromIndex, 1)[0]);
55765                 return this.update({members: members});
55766             },
55767
55768
55769             // Wherever a member appears with id `needle.id`, replace it with a member
55770             // with id `replacement.id`, type `replacement.type`, and the original role,
55771             // By default, adding a duplicate member (by id and role) is prevented.
55772             // Return an updated relation.
55773             replaceMember: function(needle, replacement, keepDuplicates) {
55774                 if (!this.memberById(needle.id)) { return this; }
55775
55776                 var members = [];
55777
55778                 for (var i = 0; i < this.members.length; i++) {
55779                     var member = this.members[i];
55780                     if (member.id !== needle.id) {
55781                         members.push(member);
55782                     } else if (keepDuplicates || !this.memberByIdAndRole(replacement.id, member.role)) {
55783                         members.push({ id: replacement.id, type: replacement.type, role: member.role });
55784                     }
55785                 }
55786
55787                 return this.update({ members: members });
55788             },
55789
55790
55791             asJXON: function(changeset_id) {
55792                 var r = {
55793                     relation: {
55794                         '@id': this.osmId(),
55795                         '@version': this.version || 0,
55796                         member: this.members.map(function(member) {
55797                             return {
55798                                 keyAttributes: {
55799                                     type: member.type,
55800                                     role: member.role,
55801                                     ref: osmEntity.id.toOSM(member.id)
55802                                 }
55803                             };
55804                         }, this),
55805                         tag: Object.keys(this.tags).map(function(k) {
55806                             return { keyAttributes: { k: k, v: this.tags[k] } };
55807                         }, this)
55808                     }
55809                 };
55810                 if (changeset_id) {
55811                     r.relation['@changeset'] = changeset_id;
55812                 }
55813                 return r;
55814             },
55815
55816
55817             asGeoJSON: function(resolver) {
55818                 return resolver.transient(this, 'GeoJSON', function () {
55819                     if (this.isMultipolygon()) {
55820                         return {
55821                             type: 'MultiPolygon',
55822                             coordinates: this.multipolygon(resolver)
55823                         };
55824                     } else {
55825                         return {
55826                             type: 'FeatureCollection',
55827                             properties: this.tags,
55828                             features: this.members.map(function (member) {
55829                                 return Object.assign({role: member.role}, resolver.entity(member.id).asGeoJSON(resolver));
55830                             })
55831                         };
55832                     }
55833                 });
55834             },
55835
55836
55837             area: function(resolver) {
55838                 return resolver.transient(this, 'area', function() {
55839                     return d3_geoArea(this.asGeoJSON(resolver));
55840                 });
55841             },
55842
55843
55844             isMultipolygon: function() {
55845                 return this.tags.type === 'multipolygon';
55846             },
55847
55848
55849             isComplete: function(resolver) {
55850                 for (var i = 0; i < this.members.length; i++) {
55851                     if (!resolver.hasEntity(this.members[i].id)) {
55852                         return false;
55853                     }
55854                 }
55855                 return true;
55856             },
55857
55858
55859             hasFromViaTo: function() {
55860                 return (
55861                     this.members.some(function(m) { return m.role === 'from'; }) &&
55862                     this.members.some(function(m) { return m.role === 'via'; }) &&
55863                     this.members.some(function(m) { return m.role === 'to'; })
55864                 );
55865             },
55866
55867
55868             isRestriction: function() {
55869                 return !!(this.tags.type && this.tags.type.match(/^restriction:?/));
55870             },
55871
55872
55873             isValidRestriction: function() {
55874                 if (!this.isRestriction()) { return false; }
55875
55876                 var froms = this.members.filter(function(m) { return m.role === 'from'; });
55877                 var vias = this.members.filter(function(m) { return m.role === 'via'; });
55878                 var tos = this.members.filter(function(m) { return m.role === 'to'; });
55879
55880                 if (froms.length !== 1 && this.tags.restriction !== 'no_entry') { return false; }
55881                 if (froms.some(function(m) { return m.type !== 'way'; })) { return false; }
55882
55883                 if (tos.length !== 1 && this.tags.restriction !== 'no_exit') { return false; }
55884                 if (tos.some(function(m) { return m.type !== 'way'; })) { return false; }
55885
55886                 if (vias.length === 0) { return false; }
55887                 if (vias.length > 1 && vias.some(function(m) { return m.type !== 'way'; })) { return false; }
55888
55889                 return true;
55890             },
55891
55892
55893             // Returns an array [A0, ... An], each Ai being an array of node arrays [Nds0, ... Ndsm],
55894             // where Nds0 is an outer ring and subsequent Ndsi's (if any i > 0) being inner rings.
55895             //
55896             // This corresponds to the structure needed for rendering a multipolygon path using a
55897             // `evenodd` fill rule, as well as the structure of a GeoJSON MultiPolygon geometry.
55898             //
55899             // In the case of invalid geometries, this function will still return a result which
55900             // includes the nodes of all way members, but some Nds may be unclosed and some inner
55901             // rings not matched with the intended outer ring.
55902             //
55903             multipolygon: function(resolver) {
55904                 var outers = this.members.filter(function(m) { return 'outer' === (m.role || 'outer'); });
55905                 var inners = this.members.filter(function(m) { return 'inner' === m.role; });
55906
55907                 outers = osmJoinWays(outers, resolver);
55908                 inners = osmJoinWays(inners, resolver);
55909
55910                 var sequenceToLineString = function(sequence) {
55911                     if (sequence.nodes.length > 2 &&
55912                         sequence.nodes[0] !== sequence.nodes[sequence.nodes.length - 1]) {
55913                         // close unclosed parts to ensure correct area rendering - #2945
55914                         sequence.nodes.push(sequence.nodes[0]);
55915                     }
55916                     return sequence.nodes.map(function(node) { return node.loc; });
55917                 };
55918
55919                 outers = outers.map(sequenceToLineString);
55920                 inners = inners.map(sequenceToLineString);
55921
55922                 var result = outers.map(function(o) {
55923                     // Heuristic for detecting counterclockwise winding order. Assumes
55924                     // that OpenStreetMap polygons are not hemisphere-spanning.
55925                     return [d3_geoArea({ type: 'Polygon', coordinates: [o] }) > 2 * Math.PI ? o.reverse() : o];
55926                 });
55927
55928                 function findOuter(inner) {
55929                     var o, outer;
55930
55931                     for (o = 0; o < outers.length; o++) {
55932                         outer = outers[o];
55933                         if (geoPolygonContainsPolygon(outer, inner))
55934                             { return o; }
55935                     }
55936
55937                     for (o = 0; o < outers.length; o++) {
55938                         outer = outers[o];
55939                         if (geoPolygonIntersectsPolygon(outer, inner, false))
55940                             { return o; }
55941                     }
55942                 }
55943
55944                 for (var i = 0; i < inners.length; i++) {
55945                     var inner = inners[i];
55946
55947                     if (d3_geoArea({ type: 'Polygon', coordinates: [inner] }) < 2 * Math.PI) {
55948                         inner = inner.reverse();
55949                     }
55950
55951                     var o = findOuter(inners[i]);
55952                     if (o !== undefined) {
55953                         result[o].push(inners[i]);
55954                     } else {
55955                         result.push([inners[i]]); // Invalid geometry
55956                     }
55957                 }
55958
55959                 return result;
55960             }
55961         });
55962
55963         var services = {improveOSM:{errorTypes:{ow:{icon:"fas-long-arrow-alt-right",category:"routing"},"mr-both":{icon:"maki-car",category:"geometry"},"mr-parking":{icon:"maki-parking",category:"geometry"},"mr-path":{icon:"maki-shoe",category:"geometry"},"mr-road":{icon:"maki-car",category:"geometry"},tr:{icon:"temaki-junction",category:"routing"}}},keepRight:{errorTypes:{}}};
55964
55965         function qaError() {
55966             if (!(this instanceof qaError)) {
55967                 return (new qaError()).initialize(arguments);
55968             } else if (arguments.length) {
55969                 this.initialize(arguments);
55970             }
55971         }
55972
55973         // Generic handling for services without nice IDs
55974         qaError.id = function() {
55975             return qaError.id.next--;
55976         };
55977
55978         qaError.id.next = -1;
55979
55980         Object.assign(qaError.prototype, {
55981             type: 'qaError',
55982
55983             // All errors need a position
55984             loc: [0, 0],
55985
55986             // These should be passed in, used to retrieve from qa_errors.json
55987             service: '',
55988             error_type: '',
55989
55990             initialize: function(sources) {
55991                 for (var i = 0; i < sources.length; ++i) {
55992                     var source = sources[i];
55993                     for (var prop in source) {
55994                         if (Object.prototype.hasOwnProperty.call(source, prop)) {
55995                             if (source[prop] === undefined) {
55996                                 delete this[prop];
55997                             } else {
55998                                 this[prop] = source[prop];
55999                             }
56000                         }
56001                     }
56002                 }
56003
56004                 // Extract common error information from data
56005                 if (this.service && this.error_type) {
56006                     var serviceInfo = services[this.service];
56007
56008                     if (serviceInfo) {
56009                         var errInfo = serviceInfo.errorTypes[this.error_type];
56010
56011                         if (errInfo) {
56012                             this.icon = errInfo.icon;
56013                             this.category = errInfo.category;
56014                         }
56015                     }
56016                 }
56017
56018                 // All errors must have an ID for selection
56019                 if (!this.id) {
56020                     this.id = qaError.id() + '';  // as string
56021                 }
56022
56023                 return this;
56024             },
56025
56026             update: function(attrs) {
56027                 return qaError(this, attrs); // {v: 1 + (this.v || 0)}
56028             }
56029         });
56030
56031         // Split a way at the given node.
56032         //
56033         // Optionally, split only the given ways, if multiple ways share
56034         // the given node.
56035         //
56036         // This is the inverse of `iD.actionJoin`.
56037         //
56038         // For testing convenience, accepts an ID to assign to the new way.
56039         // Normally, this will be undefined and the way will automatically
56040         // be assigned a new ID.
56041         //
56042         // Reference:
56043         //   https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/SplitWayAction.as
56044         //
56045         function actionSplit(nodeId, newWayIds) {
56046             var _wayIDs;
56047
56048             // The IDs of the ways actually created by running this action
56049             var createdWayIDs = [];
56050
56051             // If the way is closed, we need to search for a partner node
56052             // to split the way at.
56053             //
56054             // The following looks for a node that is both far away from
56055             // the initial node in terms of way segment length and nearby
56056             // in terms of beeline-distance. This assures that areas get
56057             // split on the most "natural" points (independent of the number
56058             // of nodes).
56059             // For example: bone-shaped areas get split across their waist
56060             // line, circles across the diameter.
56061             function splitArea(nodes, idxA, graph) {
56062                 var lengths = new Array(nodes.length);
56063                 var length;
56064                 var i;
56065                 var best = 0;
56066                 var idxB;
56067
56068                 function wrap(index) {
56069                     return utilWrap(index, nodes.length);
56070                 }
56071
56072                 function dist(nA, nB) {
56073                     var locA = graph.entity(nA).loc;
56074                     var locB = graph.entity(nB).loc;
56075                     var epsilon = 1e-6;
56076                     return (locA && locB) ? geoSphericalDistance(locA, locB) : epsilon;
56077                 }
56078
56079                 // calculate lengths
56080                 length = 0;
56081                 for (i = wrap(idxA + 1); i !== idxA; i = wrap(i + 1)) {
56082                     length += dist(nodes[i], nodes[wrap(i - 1)]);
56083                     lengths[i] = length;
56084                 }
56085
56086                 length = 0;
56087                 for (i = wrap(idxA - 1); i !== idxA; i = wrap(i - 1)) {
56088                     length += dist(nodes[i], nodes[wrap(i + 1)]);
56089                     if (length < lengths[i]) {
56090                         lengths[i] = length;
56091                     }
56092                 }
56093
56094                 // determine best opposite node to split
56095                 for (i = 0; i < nodes.length; i++) {
56096                     var cost = lengths[i] / dist(nodes[idxA], nodes[i]);
56097                     if (cost > best) {
56098                         idxB = i;
56099                         best = cost;
56100                     }
56101                 }
56102
56103                 return idxB;
56104             }
56105
56106
56107             function split(graph, wayA, newWayId) {
56108                 var wayB = osmWay({ id: newWayId, tags: wayA.tags });   // `wayB` is the NEW way
56109                 var origNodes = wayA.nodes.slice();
56110                 var nodesA;
56111                 var nodesB;
56112                 var isArea = wayA.isArea();
56113                 var isOuter = osmIsOldMultipolygonOuterMember(wayA, graph);
56114
56115                 if (wayA.isClosed()) {
56116                     var nodes = wayA.nodes.slice(0, -1);
56117                     var idxA = nodes.indexOf(nodeId);
56118                     var idxB = splitArea(nodes, idxA, graph);
56119
56120                     if (idxB < idxA) {
56121                         nodesA = nodes.slice(idxA).concat(nodes.slice(0, idxB + 1));
56122                         nodesB = nodes.slice(idxB, idxA + 1);
56123                     } else {
56124                         nodesA = nodes.slice(idxA, idxB + 1);
56125                         nodesB = nodes.slice(idxB).concat(nodes.slice(0, idxA + 1));
56126                     }
56127                 } else {
56128                     var idx = wayA.nodes.indexOf(nodeId, 1);
56129                     nodesA = wayA.nodes.slice(0, idx + 1);
56130                     nodesB = wayA.nodes.slice(idx);
56131                 }
56132
56133                 wayA = wayA.update({ nodes: nodesA });
56134                 wayB = wayB.update({ nodes: nodesB });
56135
56136                 graph = graph.replace(wayA);
56137                 graph = graph.replace(wayB);
56138
56139                 graph.parentRelations(wayA).forEach(function(relation) {
56140                     var member;
56141
56142                     // Turn restrictions - make sure:
56143                     // 1. Splitting a FROM/TO way - only `wayA` OR `wayB` remains in relation
56144                     //    (whichever one is connected to the VIA node/ways)
56145                     // 2. Splitting a VIA way - `wayB` remains in relation as a VIA way
56146                     if (relation.hasFromViaTo()) {
56147                         var f = relation.memberByRole('from');
56148                         var v = relation.membersByRole('via');
56149                         var t = relation.memberByRole('to');
56150                         var i;
56151
56152                         // 1. split a FROM/TO
56153                         if (f.id === wayA.id || t.id === wayA.id) {
56154                             var keepB = false;
56155                             if (v.length === 1 && v[0].type === 'node') {   // check via node
56156                                 keepB = wayB.contains(v[0].id);
56157                             } else {                                        // check via way(s)
56158                                 for (i = 0; i < v.length; i++) {
56159                                     if (v[i].type === 'way') {
56160                                         var wayVia = graph.hasEntity(v[i].id);
56161                                         if (wayVia && utilArrayIntersection(wayB.nodes, wayVia.nodes).length) {
56162                                             keepB = true;
56163                                             break;
56164                                         }
56165                                     }
56166                                 }
56167                             }
56168
56169                             if (keepB) {
56170                                 relation = relation.replaceMember(wayA, wayB);
56171                                 graph = graph.replace(relation);
56172                             }
56173
56174                         // 2. split a VIA
56175                         } else {
56176                             for (i = 0; i < v.length; i++) {
56177                                 if (v[i].type === 'way' && v[i].id === wayA.id) {
56178                                     member = {
56179                                         id: wayB.id,
56180                                         type: 'way',
56181                                         role: 'via'
56182                                     };
56183                                     graph = actionAddMember(relation.id, member, v[i].index + 1)(graph);
56184                                     break;
56185                                 }
56186                             }
56187                         }
56188
56189                     // All other relations (Routes, Multipolygons, etc):
56190                     // 1. Both `wayA` and `wayB` remain in the relation
56191                     // 2. But must be inserted as a pair (see `actionAddMember` for details)
56192                     } else {
56193                         if (relation === isOuter) {
56194                             graph = graph.replace(relation.mergeTags(wayA.tags));
56195                             graph = graph.replace(wayA.update({ tags: {} }));
56196                             graph = graph.replace(wayB.update({ tags: {} }));
56197                         }
56198
56199                         member = {
56200                             id: wayB.id,
56201                             type: 'way',
56202                             role: relation.memberById(wayA.id).role
56203                         };
56204
56205                         var insertPair = {
56206                             originalID: wayA.id,
56207                             insertedID: wayB.id,
56208                             nodes: origNodes
56209                         };
56210
56211                         graph = actionAddMember(relation.id, member, undefined, insertPair)(graph);
56212                     }
56213                 });
56214
56215                 if (!isOuter && isArea) {
56216                     var multipolygon = osmRelation({
56217                         tags: Object.assign({}, wayA.tags, { type: 'multipolygon' }),
56218                         members: [
56219                             { id: wayA.id, role: 'outer', type: 'way' },
56220                             { id: wayB.id, role: 'outer', type: 'way' }
56221                         ]
56222                     });
56223
56224                     graph = graph.replace(multipolygon);
56225                     graph = graph.replace(wayA.update({ tags: {} }));
56226                     graph = graph.replace(wayB.update({ tags: {} }));
56227                 }
56228
56229                 createdWayIDs.push(wayB.id);
56230
56231                 return graph;
56232             }
56233
56234             var action = function(graph) {
56235                 var candidates = action.ways(graph);
56236                 createdWayIDs = [];
56237                 for (var i = 0; i < candidates.length; i++) {
56238                     graph = split(graph, candidates[i], newWayIds && newWayIds[i]);
56239                 }
56240                 return graph;
56241             };
56242
56243             action.getCreatedWayIDs = function() {
56244                 return createdWayIDs;
56245             };
56246
56247             action.ways = function(graph) {
56248                 var node = graph.entity(nodeId);
56249                 var parents = graph.parentWays(node);
56250                 var hasLines = parents.some(function(parent) {
56251                     return parent.geometry(graph) === 'line';
56252                 });
56253
56254                 return parents.filter(function(parent) {
56255                     if (_wayIDs && _wayIDs.indexOf(parent.id) === -1)
56256                         { return false; }
56257
56258                     if (!_wayIDs && hasLines && parent.geometry(graph) !== 'line')
56259                         { return false; }
56260
56261                     if (parent.isClosed()) {
56262                         return true;
56263                     }
56264
56265                     for (var i = 1; i < parent.nodes.length - 1; i++) {
56266                         if (parent.nodes[i] === nodeId) {
56267                             return true;
56268                         }
56269                     }
56270
56271                     return false;
56272                 });
56273             };
56274
56275
56276             action.disabled = function(graph) {
56277                 var candidates = action.ways(graph);
56278                 if (candidates.length === 0 || (_wayIDs && _wayIDs.length !== candidates.length)) {
56279                     return 'not_eligible';
56280                 }
56281             };
56282
56283
56284             action.limitWays = function(val) {
56285                 if (!arguments.length) { return _wayIDs; }
56286                 _wayIDs = val;
56287                 return action;
56288             };
56289
56290
56291             return action;
56292         }
56293
56294         function coreGraph(other, mutable) {
56295             if (!(this instanceof coreGraph)) { return new coreGraph(other, mutable); }
56296
56297             if (other instanceof coreGraph) {
56298                 var base = other.base();
56299                 this.entities = Object.assign(Object.create(base.entities), other.entities);
56300                 this._parentWays = Object.assign(Object.create(base.parentWays), other._parentWays);
56301                 this._parentRels = Object.assign(Object.create(base.parentRels), other._parentRels);
56302
56303             } else {
56304                 this.entities = Object.create({});
56305                 this._parentWays = Object.create({});
56306                 this._parentRels = Object.create({});
56307                 this.rebase(other || [], [this]);
56308             }
56309
56310             this.transients = {};
56311             this._childNodes = {};
56312             this.frozen = !mutable;
56313         }
56314
56315
56316         coreGraph.prototype = {
56317
56318             hasEntity: function(id) {
56319                 return this.entities[id];
56320             },
56321
56322
56323             entity: function(id) {
56324                 var entity = this.entities[id];
56325
56326                 //https://github.com/openstreetmap/iD/issues/3973#issuecomment-307052376
56327                 if (!entity) {
56328                     entity = this.entities.__proto__[id];  // eslint-disable-line no-proto
56329                 }
56330
56331                 if (!entity) {
56332                     throw new Error('entity ' + id + ' not found');
56333                 }
56334                 return entity;
56335             },
56336
56337
56338             transient: function(entity, key, fn) {
56339                 var id = entity.id;
56340                 var transients = this.transients[id] || (this.transients[id] = {});
56341
56342                 if (transients[key] !== undefined) {
56343                     return transients[key];
56344                 }
56345
56346                 transients[key] = fn.call(entity);
56347
56348                 return transients[key];
56349             },
56350
56351
56352             parentWays: function(entity) {
56353                 var parents = this._parentWays[entity.id];
56354                 var result = [];
56355                 if (parents) {
56356                     parents.forEach(function(id) {
56357                         result.push(this.entity(id));
56358                     }, this);
56359                 }
56360                 return result;
56361             },
56362
56363
56364             isPoi: function(entity) {
56365                 var parents = this._parentWays[entity.id];
56366                 return !parents || parents.size === 0;
56367             },
56368
56369
56370             isShared: function(entity) {
56371                 var parents = this._parentWays[entity.id];
56372                 return parents && parents.size > 1;
56373             },
56374
56375
56376             parentRelations: function(entity) {
56377                 var parents = this._parentRels[entity.id];
56378                 var result = [];
56379                 if (parents) {
56380                     parents.forEach(function(id) {
56381                         result.push(this.entity(id));
56382                     }, this);
56383                 }
56384                 return result;
56385             },
56386
56387             parentMultipolygons: function(entity) {
56388                 return this.parentRelations(entity).filter(function(relation) {
56389                     return relation.isMultipolygon();
56390                 });
56391             },
56392
56393
56394             childNodes: function(entity) {
56395                 if (this._childNodes[entity.id]) { return this._childNodes[entity.id]; }
56396                 if (!entity.nodes) { return []; }
56397
56398                 var nodes = [];
56399                 for (var i = 0; i < entity.nodes.length; i++) {
56400                     nodes[i] = this.entity(entity.nodes[i]);
56401                 }
56402
56403                 this._childNodes[entity.id] = nodes;
56404                 return this._childNodes[entity.id];
56405             },
56406
56407
56408             base: function() {
56409                 return {
56410                     'entities': Object.getPrototypeOf(this.entities),
56411                     'parentWays': Object.getPrototypeOf(this._parentWays),
56412                     'parentRels': Object.getPrototypeOf(this._parentRels)
56413                 };
56414             },
56415
56416
56417             // Unlike other graph methods, rebase mutates in place. This is because it
56418             // is used only during the history operation that merges newly downloaded
56419             // data into each state. To external consumers, it should appear as if the
56420             // graph always contained the newly downloaded data.
56421             rebase: function(entities, stack, force) {
56422                 var base = this.base();
56423                 var i, j, k, id;
56424
56425                 for (i = 0; i < entities.length; i++) {
56426                     var entity = entities[i];
56427
56428                     if (!entity.visible || (!force && base.entities[entity.id]))
56429                         { continue; }
56430
56431                     // Merging data into the base graph
56432                     base.entities[entity.id] = entity;
56433                     this._updateCalculated(undefined, entity, base.parentWays, base.parentRels);
56434
56435                     // Restore provisionally-deleted nodes that are discovered to have an extant parent
56436                     if (entity.type === 'way') {
56437                         for (j = 0; j < entity.nodes.length; j++) {
56438                             id = entity.nodes[j];
56439                             for (k = 1; k < stack.length; k++) {
56440                                 var ents = stack[k].entities;
56441                                 if (ents.hasOwnProperty(id) && ents[id] === undefined) {
56442                                     delete ents[id];
56443                                 }
56444                             }
56445                         }
56446                     }
56447                 }
56448
56449                 for (i = 0; i < stack.length; i++) {
56450                     stack[i]._updateRebased();
56451                 }
56452             },
56453
56454
56455             _updateRebased: function() {
56456                 var base = this.base();
56457
56458                 Object.keys(this._parentWays).forEach(function(child) {
56459                     if (base.parentWays[child]) {
56460                         base.parentWays[child].forEach(function(id) {
56461                             if (!this.entities.hasOwnProperty(id)) {
56462                                 this._parentWays[child].add(id);
56463                             }
56464                         }, this);
56465                     }
56466                 }, this);
56467
56468                 Object.keys(this._parentRels).forEach(function(child) {
56469                     if (base.parentRels[child]) {
56470                         base.parentRels[child].forEach(function(id) {
56471                             if (!this.entities.hasOwnProperty(id)) {
56472                                 this._parentRels[child].add(id);
56473                             }
56474                         }, this);
56475                     }
56476                 }, this);
56477
56478                 this.transients = {};
56479
56480                 // this._childNodes is not updated, under the assumption that
56481                 // ways are always downloaded with their child nodes.
56482             },
56483
56484
56485             // Updates calculated properties (parentWays, parentRels) for the specified change
56486             _updateCalculated: function(oldentity, entity, parentWays, parentRels) {
56487                 parentWays = parentWays || this._parentWays;
56488                 parentRels = parentRels || this._parentRels;
56489
56490                 var type = entity && entity.type || oldentity && oldentity.type;
56491                 var removed, added, i;
56492
56493                 if (type === 'way') {   // Update parentWays
56494                     if (oldentity && entity) {
56495                         removed = utilArrayDifference(oldentity.nodes, entity.nodes);
56496                         added = utilArrayDifference(entity.nodes, oldentity.nodes);
56497                     } else if (oldentity) {
56498                         removed = oldentity.nodes;
56499                         added = [];
56500                     } else if (entity) {
56501                         removed = [];
56502                         added = entity.nodes;
56503                     }
56504                     for (i = 0; i < removed.length; i++) {
56505                         // make a copy of prototype property, store as own property, and update..
56506                         parentWays[removed[i]] = new Set(parentWays[removed[i]]);
56507                         parentWays[removed[i]].delete(oldentity.id);
56508                     }
56509                     for (i = 0; i < added.length; i++) {
56510                         // make a copy of prototype property, store as own property, and update..
56511                         parentWays[added[i]] = new Set(parentWays[added[i]]);
56512                         parentWays[added[i]].add(entity.id);
56513                     }
56514
56515                 } else if (type === 'relation') {   // Update parentRels
56516
56517                     // diff only on the IDs since the same entity can be a member multiple times with different roles
56518                     var oldentityMemberIDs = oldentity ? oldentity.members.map(function(m) { return m.id; }) : [];
56519                     var entityMemberIDs = entity ? entity.members.map(function(m) { return m.id; }) : [];
56520
56521                     if (oldentity && entity) {
56522                         removed = utilArrayDifference(oldentityMemberIDs, entityMemberIDs);
56523                         added = utilArrayDifference(entityMemberIDs, oldentityMemberIDs);
56524                     } else if (oldentity) {
56525                         removed = oldentityMemberIDs;
56526                         added = [];
56527                     } else if (entity) {
56528                         removed = [];
56529                         added = entityMemberIDs;
56530                     }
56531                     for (i = 0; i < removed.length; i++) {
56532                         // make a copy of prototype property, store as own property, and update..
56533                         parentRels[removed[i]] = new Set(parentRels[removed[i]]);
56534                         parentRels[removed[i]].delete(oldentity.id);
56535                     }
56536                     for (i = 0; i < added.length; i++) {
56537                         // make a copy of prototype property, store as own property, and update..
56538                         parentRels[added[i]] = new Set(parentRels[added[i]]);
56539                         parentRels[added[i]].add(entity.id);
56540                     }
56541                 }
56542             },
56543
56544
56545             replace: function(entity) {
56546                 if (this.entities[entity.id] === entity) { return this; }
56547
56548                 return this.update(function() {
56549                     this._updateCalculated(this.entities[entity.id], entity);
56550                     this.entities[entity.id] = entity;
56551                 });
56552             },
56553
56554
56555             remove: function(entity) {
56556                 return this.update(function() {
56557                     this._updateCalculated(entity, undefined);
56558                     this.entities[entity.id] = undefined;
56559                 });
56560             },
56561
56562
56563             revert: function(id) {
56564                 var baseEntity = this.base().entities[id];
56565                 var headEntity = this.entities[id];
56566                 if (headEntity === baseEntity) { return this; }
56567
56568                 return this.update(function() {
56569                     this._updateCalculated(headEntity, baseEntity);
56570                     delete this.entities[id];
56571                 });
56572             },
56573
56574
56575             update: function() {
56576                 var arguments$1 = arguments;
56577
56578                 var graph = this.frozen ? coreGraph(this, true) : this;
56579                 for (var i = 0; i < arguments.length; i++) {
56580                     arguments$1[i].call(graph, graph);
56581                 }
56582
56583                 if (this.frozen) { graph.frozen = true; }
56584
56585                 return graph;
56586             },
56587
56588
56589             // Obliterates any existing entities
56590             load: function(entities) {
56591                 var base = this.base();
56592                 this.entities = Object.create(base.entities);
56593
56594                 for (var i in entities) {
56595                     this.entities[i] = entities[i];
56596                     this._updateCalculated(base.entities[i], this.entities[i]);
56597                 }
56598
56599                 return this;
56600             }
56601         };
56602
56603         function osmTurn(turn) {
56604             if (!(this instanceof osmTurn)) {
56605                 return new osmTurn(turn);
56606             }
56607             Object.assign(this, turn);
56608         }
56609
56610
56611         function osmIntersection(graph, startVertexId, maxDistance) {
56612             maxDistance = maxDistance || 30;    // in meters
56613             var vgraph = coreGraph();           // virtual graph
56614             var i, j, k;
56615
56616
56617             function memberOfRestriction(entity) {
56618                 return graph.parentRelations(entity)
56619                     .some(function(r) { return r.isRestriction(); });
56620             }
56621
56622             function isRoad(way) {
56623                 if (way.isArea() || way.isDegenerate()) { return false; }
56624                 var roads = {
56625                     'motorway': true,
56626                     'motorway_link': true,
56627                     'trunk': true,
56628                     'trunk_link': true,
56629                     'primary': true,
56630                     'primary_link': true,
56631                     'secondary': true,
56632                     'secondary_link': true,
56633                     'tertiary': true,
56634                     'tertiary_link': true,
56635                     'residential': true,
56636                     'unclassified': true,
56637                     'living_street': true,
56638                     'service': true,
56639                     'road': true,
56640                     'track': true
56641                 };
56642                 return roads[way.tags.highway];
56643             }
56644
56645
56646             var startNode = graph.entity(startVertexId);
56647             var checkVertices = [startNode];
56648             var checkWays;
56649             var vertices = [];
56650             var vertexIds = [];
56651             var vertex;
56652             var ways = [];
56653             var wayIds = [];
56654             var way;
56655             var nodes = [];
56656             var node;
56657             var parents = [];
56658             var parent;
56659
56660             // `actions` will store whatever actions must be performed to satisfy
56661             // preconditions for adding a turn restriction to this intersection.
56662             //  - Remove any existing degenerate turn restrictions (missing from/to, etc)
56663             //  - Reverse oneways so that they are drawn in the forward direction
56664             //  - Split ways on key vertices
56665             var actions = [];
56666
56667
56668             // STEP 1:  walk the graph outwards from starting vertex to search
56669             //  for more key vertices and ways to include in the intersection..
56670
56671             while (checkVertices.length) {
56672                 vertex = checkVertices.pop();
56673
56674                 // check this vertex for parent ways that are roads
56675                 checkWays = graph.parentWays(vertex);
56676                 var hasWays = false;
56677                 for (i = 0; i < checkWays.length; i++) {
56678                     way = checkWays[i];
56679                     if (!isRoad(way) && !memberOfRestriction(way)) { continue; }
56680
56681                     ways.push(way);   // it's a road, or it's already in a turn restriction
56682                     hasWays = true;
56683
56684                     // check the way's children for more key vertices
56685                     nodes = utilArrayUniq(graph.childNodes(way));
56686                     for (j = 0; j < nodes.length; j++) {
56687                         node = nodes[j];
56688                         if (node === vertex) { continue; }                                           // same thing
56689                         if (vertices.indexOf(node) !== -1) { continue; }                             // seen it already
56690                         if (geoSphericalDistance(node.loc, startNode.loc) > maxDistance) { continue; }   // too far from start
56691
56692                         // a key vertex will have parents that are also roads
56693                         var hasParents = false;
56694                         parents = graph.parentWays(node);
56695                         for (k = 0; k < parents.length; k++) {
56696                             parent = parents[k];
56697                             if (parent === way) { continue; }                 // same thing
56698                             if (ways.indexOf(parent) !== -1) { continue; }    // seen it already
56699                             if (!isRoad(parent)) { continue; }                // not a road
56700                             hasParents = true;
56701                             break;
56702                         }
56703
56704                         if (hasParents) {
56705                             checkVertices.push(node);
56706                         }
56707                     }
56708                 }
56709
56710                 if (hasWays) {
56711                     vertices.push(vertex);
56712                 }
56713             }
56714
56715             vertices = utilArrayUniq(vertices);
56716             ways = utilArrayUniq(ways);
56717
56718
56719             // STEP 2:  Build a virtual graph containing only the entities in the intersection..
56720             // Everything done after this step should act on the virtual graph
56721             // Any actions that must be performed later to the main graph go in `actions` array
56722             ways.forEach(function(way) {
56723                 graph.childNodes(way).forEach(function(node) {
56724                     vgraph = vgraph.replace(node);
56725                 });
56726
56727                 vgraph = vgraph.replace(way);
56728
56729                 graph.parentRelations(way).forEach(function(relation) {
56730                     if (relation.isRestriction()) {
56731                         if (relation.isValidRestriction(graph)) {
56732                             vgraph = vgraph.replace(relation);
56733                         } else if (relation.isComplete(graph)) {
56734                             actions.push(actionDeleteRelation(relation.id));
56735                         }
56736                     }
56737                 });
56738             });
56739
56740
56741             // STEP 3:  Force all oneways to be drawn in the forward direction
56742             ways.forEach(function(w) {
56743                 var way = vgraph.entity(w.id);
56744                 if (way.tags.oneway === '-1') {
56745                     var action = actionReverse(way.id, { reverseOneway: true });
56746                     actions.push(action);
56747                     vgraph = action(vgraph);
56748                 }
56749             });
56750
56751
56752             // STEP 4:  Split ways on key vertices
56753             var origCount = osmEntity.id.next.way;
56754             vertices.forEach(function(v) {
56755                 // This is an odd way to do it, but we need to find all the ways that
56756                 // will be split here, then split them one at a time to ensure that these
56757                 // actions can be replayed on the main graph exactly in the same order.
56758                 // (It is unintuitive, but the order of ways returned from graph.parentWays()
56759                 // is arbitrary, depending on how the main graph and vgraph were built)
56760                 var splitAll = actionSplit(v.id);
56761                 if (!splitAll.disabled(vgraph)) {
56762                     splitAll.ways(vgraph).forEach(function(way) {
56763                         var splitOne = actionSplit(v.id).limitWays([way.id]);
56764                         actions.push(splitOne);
56765                         vgraph = splitOne(vgraph);
56766                     });
56767                 }
56768             });
56769
56770             // In here is where we should also split the intersection at nearby junction.
56771             //   for https://github.com/mapbox/iD-internal/issues/31
56772             // nearbyVertices.forEach(function(v) {
56773             // });
56774
56775             // Reasons why we reset the way id count here:
56776             //  1. Continuity with way ids created by the splits so that we can replay
56777             //     these actions later if the user decides to create a turn restriction
56778             //  2. Avoids churning way ids just by hovering over a vertex
56779             //     and displaying the turn restriction editor
56780             osmEntity.id.next.way = origCount;
56781
56782
56783             // STEP 5:  Update arrays to point to vgraph entities
56784             vertexIds = vertices.map(function(v) { return v.id; });
56785             vertices = [];
56786             ways = [];
56787
56788             vertexIds.forEach(function(id) {
56789                 var vertex = vgraph.entity(id);
56790                 var parents = vgraph.parentWays(vertex);
56791                 vertices.push(vertex);
56792                 ways = ways.concat(parents);
56793             });
56794
56795             vertices = utilArrayUniq(vertices);
56796             ways = utilArrayUniq(ways);
56797
56798             vertexIds = vertices.map(function(v) { return v.id; });
56799             wayIds = ways.map(function(w) { return w.id; });
56800
56801
56802             // STEP 6:  Update the ways with some metadata that will be useful for
56803             // walking the intersection graph later and rendering turn arrows.
56804
56805             function withMetadata(way, vertexIds) {
56806                 var __oneWay = way.isOneWay();
56807
56808                 // which affixes are key vertices?
56809                 var __first = (vertexIds.indexOf(way.first()) !== -1);
56810                 var __last = (vertexIds.indexOf(way.last()) !== -1);
56811
56812                 // what roles is this way eligible for?
56813                 var __via = (__first && __last);
56814                 var __from = ((__first && !__oneWay) || __last);
56815                 var __to = (__first || (__last && !__oneWay));
56816
56817                 return way.update({
56818                     __first:  __first,
56819                     __last:  __last,
56820                     __from:  __from,
56821                     __via: __via,
56822                     __to:  __to,
56823                     __oneWay:  __oneWay
56824                 });
56825             }
56826
56827             ways = [];
56828             wayIds.forEach(function(id) {
56829                 var way = withMetadata(vgraph.entity(id), vertexIds);
56830                 vgraph = vgraph.replace(way);
56831                 ways.push(way);
56832             });
56833
56834
56835             // STEP 7:  Simplify - This is an iterative process where we:
56836             //  1. Find trivial vertices with only 2 parents
56837             //  2. trim off the leaf way from those vertices and remove from vgraph
56838
56839             var keepGoing;
56840             var removeWayIds = [];
56841             var removeVertexIds = [];
56842
56843             do {
56844                 keepGoing = false;
56845                 checkVertices = vertexIds.slice();
56846
56847                 for (i = 0; i < checkVertices.length; i++) {
56848                     var vertexId = checkVertices[i];
56849                     vertex = vgraph.hasEntity(vertexId);
56850
56851                     if (!vertex) {
56852                         if (vertexIds.indexOf(vertexId) !== -1) {
56853                             vertexIds.splice(vertexIds.indexOf(vertexId), 1);   // stop checking this one
56854                         }
56855                         removeVertexIds.push(vertexId);
56856                         continue;
56857                     }
56858
56859                     parents = vgraph.parentWays(vertex);
56860                     if (parents.length < 3) {
56861                         if (vertexIds.indexOf(vertexId) !== -1) {
56862                             vertexIds.splice(vertexIds.indexOf(vertexId), 1);   // stop checking this one
56863                         }
56864                     }
56865
56866                     if (parents.length === 2) {     // vertex with 2 parents is trivial
56867                         var a = parents[0];
56868                         var b = parents[1];
56869                         var aIsLeaf = a && !a.__via;
56870                         var bIsLeaf = b && !b.__via;
56871                         var leaf, survivor;
56872
56873                         if (aIsLeaf && !bIsLeaf) {
56874                             leaf = a;
56875                             survivor = b;
56876                         } else if (!aIsLeaf && bIsLeaf) {
56877                             leaf = b;
56878                             survivor = a;
56879                         }
56880
56881                         if (leaf && survivor) {
56882                             survivor = withMetadata(survivor, vertexIds);      // update survivor way
56883                             vgraph = vgraph.replace(survivor).remove(leaf);    // update graph
56884                             removeWayIds.push(leaf.id);
56885                             keepGoing = true;
56886                         }
56887                     }
56888
56889                     parents = vgraph.parentWays(vertex);
56890
56891                     if (parents.length < 2) {     // vertex is no longer a key vertex
56892                         if (vertexIds.indexOf(vertexId) !== -1) {
56893                             vertexIds.splice(vertexIds.indexOf(vertexId), 1);   // stop checking this one
56894                         }
56895                         removeVertexIds.push(vertexId);
56896                         keepGoing = true;
56897                     }
56898
56899                     if (parents.length < 1) {     // vertex is no longer attached to anything
56900                         vgraph = vgraph.remove(vertex);
56901                     }
56902
56903                 }
56904             } while (keepGoing);
56905
56906
56907             vertices = vertices
56908                 .filter(function(vertex) { return removeVertexIds.indexOf(vertex.id) === -1; })
56909                 .map(function(vertex) { return vgraph.entity(vertex.id); });
56910             ways = ways
56911                 .filter(function(way) { return removeWayIds.indexOf(way.id) === -1; })
56912                 .map(function(way) { return vgraph.entity(way.id); });
56913
56914
56915             // OK!  Here is our intersection..
56916             var intersection = {
56917                 graph: vgraph,
56918                 actions: actions,
56919                 vertices: vertices,
56920                 ways: ways,
56921             };
56922
56923
56924
56925             // Get all the valid turns through this intersection given a starting way id.
56926             // This operates on the virtual graph for everything.
56927             //
56928             // Basically, walk through all possible paths from starting way,
56929             //   honoring the existing turn restrictions as we go (watch out for loops!)
56930             //
56931             // For each path found, generate and return a `osmTurn` datastructure.
56932             //
56933             intersection.turns = function(fromWayId, maxViaWay) {
56934                 if (!fromWayId) { return []; }
56935                 if (!maxViaWay) { maxViaWay = 0; }
56936
56937                 var vgraph = intersection.graph;
56938                 var keyVertexIds = intersection.vertices.map(function(v) { return v.id; });
56939
56940                 var start = vgraph.entity(fromWayId);
56941                 if (!start || !(start.__from || start.__via)) { return []; }
56942
56943                 // maxViaWay=0   from-*-to              (0 vias)
56944                 // maxViaWay=1   from-*-via-*-to        (1 via max)
56945                 // maxViaWay=2   from-*-via-*-via-*-to  (2 vias max)
56946                 var maxPathLength = (maxViaWay * 2) + 3;
56947                 var turns = [];
56948
56949                 step(start);
56950                 return turns;
56951
56952
56953                 // traverse the intersection graph and find all the valid paths
56954                 function step(entity, currPath, currRestrictions, matchedRestriction) {
56955                     currPath = (currPath || []).slice();  // shallow copy
56956                     if (currPath.length >= maxPathLength) { return; }
56957                     currPath.push(entity.id);
56958                     currRestrictions = (currRestrictions || []).slice();  // shallow copy
56959                     var i, j;
56960
56961                     if (entity.type === 'node') {
56962                         var parents = vgraph.parentWays(entity);
56963                         var nextWays = [];
56964
56965                         // which ways can we step into?
56966                         for (i = 0; i < parents.length; i++) {
56967                             var way = parents[i];
56968
56969                             // if next way is a oneway incoming to this vertex, skip
56970                             if (way.__oneWay && way.nodes[0] !== entity.id) { continue; }
56971
56972                             // if we have seen it before (allowing for an initial u-turn), skip
56973                             if (currPath.indexOf(way.id) !== -1 && currPath.length >= 3) { continue; }
56974
56975                             // Check all "current" restrictions (where we've already walked the `FROM`)
56976                             var restrict = undefined;
56977                             for (j = 0; j < currRestrictions.length; j++) {
56978                                 var restriction = currRestrictions[j];
56979                                 var f = restriction.memberByRole('from');
56980                                 var v = restriction.membersByRole('via');
56981                                 var t = restriction.memberByRole('to');
56982                                 var isOnly = /^only_/.test(restriction.tags.restriction);
56983
56984                                 // Does the current path match this turn restriction?
56985                                 var matchesFrom = (f.id === fromWayId);
56986                                 var matchesViaTo = false;
56987                                 var isAlongOnlyPath = false;
56988
56989                                 if (t.id === way.id) {     // match TO
56990
56991                                     if (v.length === 1 && v[0].type === 'node') {    // match VIA node
56992                                         matchesViaTo = (v[0].id === entity.id && (
56993                                             (matchesFrom && currPath.length === 2) ||
56994                                             (!matchesFrom && currPath.length > 2)
56995                                         ));
56996
56997                                     } else {                                         // match all VIA ways
56998                                         var pathVias = [];
56999                                         for (k = 2; k < currPath.length; k +=2 ) {   // k = 2 skips FROM
57000                                             pathVias.push(currPath[k]);              // (path goes way-node-way...)
57001                                         }
57002                                         var restrictionVias = [];
57003                                         for (k = 0; k < v.length; k++) {
57004                                             if (v[k].type === 'way') {
57005                                                 restrictionVias.push(v[k].id);
57006                                             }
57007                                         }
57008                                         var diff = utilArrayDifference(pathVias, restrictionVias);
57009                                         matchesViaTo = !diff.length;
57010                                     }
57011
57012                                 } else if (isOnly) {
57013                                     for (k = 0; k < v.length; k++) {
57014                                         // way doesn't match TO, but is one of the via ways along the path of an "only"
57015                                         if (v[k].type === 'way' && v[k].id === way.id) {
57016                                             isAlongOnlyPath = true;
57017                                             break;
57018                                         }
57019                                     }
57020                                 }
57021
57022                                 if (matchesViaTo) {
57023                                     if (isOnly) {
57024                                         restrict = { id: restriction.id, direct: matchesFrom, from: f.id, only: true, end: true };
57025                                     } else {
57026                                         restrict = { id: restriction.id, direct: matchesFrom, from: f.id, no: true, end: true };
57027                                     }
57028                                 } else {    // indirect - caused by a different nearby restriction
57029                                     if (isAlongOnlyPath) {
57030                                         restrict = { id: restriction.id, direct: false, from: f.id, only: true, end: false };
57031                                     } else if (isOnly) {
57032                                         restrict = { id: restriction.id, direct: false, from: f.id, no: true, end: true };
57033                                     }
57034                                 }
57035
57036                                 // stop looking if we find a "direct" restriction (matching FROM, VIA, TO)
57037                                 if (restrict && restrict.direct)
57038                                     { break; }
57039                             }
57040
57041                             nextWays.push({ way: way, restrict: restrict });
57042                         }
57043
57044                         nextWays.forEach(function(nextWay) {
57045                             step(nextWay.way, currPath, currRestrictions, nextWay.restrict);
57046                         });
57047
57048
57049                     } else {  // entity.type === 'way'
57050                         if (currPath.length >= 3) {     // this is a "complete" path..
57051                             var turnPath = currPath.slice();   // shallow copy
57052
57053                             // an indirect restriction - only include the partial path (starting at FROM)
57054                             if (matchedRestriction && matchedRestriction.direct === false) {
57055                                 for (i = 0; i < turnPath.length; i++) {
57056                                     if (turnPath[i] === matchedRestriction.from) {
57057                                         turnPath = turnPath.slice(i);
57058                                         break;
57059                                     }
57060                                 }
57061                             }
57062
57063                             var turn = pathToTurn(turnPath);
57064                             if (turn) {
57065                                 if (matchedRestriction) {
57066                                     turn.restrictionID = matchedRestriction.id;
57067                                     turn.no = matchedRestriction.no;
57068                                     turn.only = matchedRestriction.only;
57069                                     turn.direct = matchedRestriction.direct;
57070                                 }
57071                                 turns.push(osmTurn(turn));
57072                             }
57073
57074                             if (currPath[0] === currPath[2]) { return; }   // if we made a u-turn - stop here
57075                         }
57076
57077                         if (matchedRestriction && matchedRestriction.end) { return; }  // don't advance any further
57078
57079                         // which nodes can we step into?
57080                         var n1 = vgraph.entity(entity.first());
57081                         var n2 = vgraph.entity(entity.last());
57082                         var dist = geoSphericalDistance(n1.loc, n2.loc);
57083                         var nextNodes = [];
57084
57085                         if (currPath.length > 1) {
57086                             if (dist > maxDistance) { return; }   // the next node is too far
57087                             if (!entity.__via) { return; }        // this way is a leaf / can't be a via
57088                         }
57089
57090                         if (!entity.__oneWay &&                     // bidirectional..
57091                             keyVertexIds.indexOf(n1.id) !== -1 &&   // key vertex..
57092                             currPath.indexOf(n1.id) === -1) {       // haven't seen it yet..
57093                             nextNodes.push(n1);                     // can advance to first node
57094                         }
57095                         if (keyVertexIds.indexOf(n2.id) !== -1 &&   // key vertex..
57096                             currPath.indexOf(n2.id) === -1) {       // haven't seen it yet..
57097                             nextNodes.push(n2);                     // can advance to last node
57098                         }
57099
57100                         nextNodes.forEach(function(nextNode) {
57101                             // gather restrictions FROM this way
57102                             var fromRestrictions = vgraph.parentRelations(entity).filter(function(r) {
57103                                 if (!r.isRestriction()) { return false; }
57104
57105                                 var f = r.memberByRole('from');
57106                                 if (!f || f.id !== entity.id) { return false; }
57107
57108                                 var isOnly = /^only_/.test(r.tags.restriction);
57109                                 if (!isOnly) { return true; }
57110
57111                                 // `only_` restrictions only matter along the direction of the VIA - #4849
57112                                 var isOnlyVia = false;
57113                                 var v = r.membersByRole('via');
57114                                 if (v.length === 1 && v[0].type === 'node') {   // via node
57115                                     isOnlyVia = (v[0].id === nextNode.id);
57116                                 } else {                                        // via way(s)
57117                                     for (var i = 0; i < v.length; i++) {
57118                                         if (v[i].type !== 'way') { continue; }
57119                                         var viaWay = vgraph.entity(v[i].id);
57120                                         if (viaWay.first() === nextNode.id || viaWay.last() === nextNode.id) {
57121                                             isOnlyVia = true;
57122                                             break;
57123                                         }
57124                                     }
57125                                 }
57126                                 return isOnlyVia;
57127                             });
57128
57129                             step(nextNode, currPath, currRestrictions.concat(fromRestrictions), false);
57130                         });
57131                     }
57132                 }
57133
57134
57135                 // assumes path is alternating way-node-way of odd length
57136                 function pathToTurn(path) {
57137                     if (path.length < 3) { return; }
57138                     var fromWayId, fromNodeId, fromVertexId;
57139                     var toWayId, toNodeId, toVertexId;
57140                     var viaWayIds, viaNodeId, isUturn;
57141
57142                     fromWayId = path[0];
57143                     toWayId = path[path.length - 1];
57144
57145                     if (path.length === 3 && fromWayId === toWayId) {  // u turn
57146                         var way = vgraph.entity(fromWayId);
57147                         if (way.__oneWay) { return null; }
57148
57149                         isUturn = true;
57150                         viaNodeId = fromVertexId = toVertexId = path[1];
57151                         fromNodeId = toNodeId = adjacentNode(fromWayId, viaNodeId);
57152
57153                     } else {
57154                         isUturn = false;
57155                         fromVertexId = path[1];
57156                         fromNodeId = adjacentNode(fromWayId, fromVertexId);
57157                         toVertexId = path[path.length - 2];
57158                         toNodeId = adjacentNode(toWayId, toVertexId);
57159
57160                         if (path.length === 3) {
57161                             viaNodeId = path[1];
57162                         } else {
57163                             viaWayIds = path.filter(function(entityId) { return entityId[0] === 'w'; });
57164                             viaWayIds = viaWayIds.slice(1, viaWayIds.length - 1);  // remove first, last
57165                         }
57166                     }
57167
57168                     return {
57169                         key:  path.join('_'),
57170                         path: path,
57171                         from: { node: fromNodeId, way:  fromWayId, vertex: fromVertexId },
57172                         via:  { node: viaNodeId,  ways: viaWayIds },
57173                         to:   { node: toNodeId,   way:  toWayId, vertex: toVertexId },
57174                         u:    isUturn
57175                     };
57176
57177
57178                     function adjacentNode(wayId, affixId) {
57179                         var nodes = vgraph.entity(wayId).nodes;
57180                         return affixId === nodes[0] ? nodes[1] : nodes[nodes.length - 2];
57181                     }
57182                 }
57183
57184             };
57185
57186             return intersection;
57187         }
57188
57189
57190         function osmInferRestriction(graph, turn, projection) {
57191             var fromWay = graph.entity(turn.from.way);
57192             var fromNode = graph.entity(turn.from.node);
57193             var fromVertex = graph.entity(turn.from.vertex);
57194             var toWay = graph.entity(turn.to.way);
57195             var toNode = graph.entity(turn.to.node);
57196             var toVertex = graph.entity(turn.to.vertex);
57197
57198             var fromOneWay = (fromWay.tags.oneway === 'yes');
57199             var toOneWay = (toWay.tags.oneway === 'yes');
57200             var angle = (geoAngle(fromVertex, fromNode, projection) -
57201                         geoAngle(toVertex, toNode, projection)) * 180 / Math.PI;
57202
57203             while (angle < 0)
57204                 { angle += 360; }
57205
57206             if (fromNode === toNode)
57207                 { return 'no_u_turn'; }
57208             if ((angle < 23 || angle > 336) && fromOneWay && toOneWay)
57209                 { return 'no_u_turn'; }   // wider tolerance for u-turn if both ways are oneway
57210             if ((angle < 40 || angle > 319) && fromOneWay && toOneWay && turn.from.vertex !== turn.to.vertex)
57211                 { return 'no_u_turn'; }   // even wider tolerance for u-turn if there is a via way (from !== to)
57212             if (angle < 158)
57213                 { return 'no_right_turn'; }
57214             if (angle > 202)
57215                 { return 'no_left_turn'; }
57216
57217             return 'no_straight_on';
57218         }
57219
57220         function actionMergePolygon(ids, newRelationId) {
57221
57222             function groupEntities(graph) {
57223                 var entities = ids.map(function (id) { return graph.entity(id); });
57224                 var geometryGroups = utilArrayGroupBy(entities, function(entity) {
57225                     if (entity.type === 'way' && entity.isClosed()) {
57226                         return 'closedWay';
57227                     } else if (entity.type === 'relation' && entity.isMultipolygon()) {
57228                         return 'multipolygon';
57229                     } else {
57230                         return 'other';
57231                     }
57232                 });
57233
57234                 return Object.assign(
57235                     { closedWay: [], multipolygon: [], other: [] },
57236                     geometryGroups
57237                 );
57238             }
57239
57240
57241             var action = function(graph) {
57242                 var entities = groupEntities(graph);
57243
57244                 // An array representing all the polygons that are part of the multipolygon.
57245                 //
57246                 // Each element is itself an array of objects with an id property, and has a
57247                 // locs property which is an array of the locations forming the polygon.
57248                 var polygons = entities.multipolygon.reduce(function(polygons, m) {
57249                     return polygons.concat(osmJoinWays(m.members, graph));
57250                 }, []).concat(entities.closedWay.map(function(d) {
57251                     var member = [{id: d.id}];
57252                     member.nodes = graph.childNodes(d);
57253                     return member;
57254                 }));
57255
57256                 // contained is an array of arrays of boolean values,
57257                 // where contained[j][k] is true iff the jth way is
57258                 // contained by the kth way.
57259                 var contained = polygons.map(function(w, i) {
57260                     return polygons.map(function(d, n) {
57261                         if (i === n) { return null; }
57262                         return geoPolygonContainsPolygon(
57263                             d.nodes.map(function(n) { return n.loc; }),
57264                             w.nodes.map(function(n) { return n.loc; })
57265                         );
57266                     });
57267                 });
57268
57269                 // Sort all polygons as either outer or inner ways
57270                 var members = [];
57271                 var outer = true;
57272
57273                 while (polygons.length) {
57274                     extractUncontained(polygons);
57275                     polygons = polygons.filter(isContained);
57276                     contained = contained.filter(isContained).map(filterContained);
57277                 }
57278
57279                 function isContained(d, i) {
57280                     return contained[i].some(function(val) { return val; });
57281                 }
57282
57283                 function filterContained(d) {
57284                     return d.filter(isContained);
57285                 }
57286
57287                 function extractUncontained(polygons) {
57288                     polygons.forEach(function(d, i) {
57289                         if (!isContained(d, i)) {
57290                             d.forEach(function(member) {
57291                                 members.push({
57292                                     type: 'way',
57293                                     id: member.id,
57294                                     role: outer ? 'outer' : 'inner'
57295                                 });
57296                             });
57297                         }
57298                     });
57299                     outer = !outer;
57300                 }
57301
57302                 // Move all tags to one relation
57303                 var relation = entities.multipolygon[0] ||
57304                     osmRelation({ id: newRelationId, tags: { type: 'multipolygon' }});
57305
57306                 entities.multipolygon.slice(1).forEach(function(m) {
57307                     relation = relation.mergeTags(m.tags);
57308                     graph = graph.remove(m);
57309                 });
57310
57311                 entities.closedWay.forEach(function(way) {
57312                     function isThisOuter(m) {
57313                         return m.id === way.id && m.role !== 'inner';
57314                     }
57315                     if (members.some(isThisOuter)) {
57316                         relation = relation.mergeTags(way.tags);
57317                         graph = graph.replace(way.update({ tags: {} }));
57318                     }
57319                 });
57320
57321                 return graph.replace(relation.update({
57322                     members: members,
57323                     tags: utilObjectOmit(relation.tags, ['area'])
57324                 }));
57325             };
57326
57327
57328             action.disabled = function(graph) {
57329                 var entities = groupEntities(graph);
57330                 if (entities.other.length > 0 ||
57331                     entities.closedWay.length + entities.multipolygon.length < 2)
57332                     { return 'not_eligible'; }
57333                 if (!entities.multipolygon.every(function(r) { return r.isComplete(graph); }))
57334                     { return 'incomplete_relation'; }
57335             };
57336
57337
57338             return action;
57339         }
57340
57341         // do not edit .js files directly - edit src/index.jst
57342
57343
57344
57345         var fastDeepEqual = function equal(a, b) {
57346           if (a === b) { return true; }
57347
57348           if (a && b && typeof a == 'object' && typeof b == 'object') {
57349             if (a.constructor !== b.constructor) { return false; }
57350
57351             var length, i, keys;
57352             if (Array.isArray(a)) {
57353               length = a.length;
57354               if (length != b.length) { return false; }
57355               for (i = length; i-- !== 0;)
57356                 { if (!equal(a[i], b[i])) { return false; } }
57357               return true;
57358             }
57359
57360
57361
57362             if (a.constructor === RegExp) { return a.source === b.source && a.flags === b.flags; }
57363             if (a.valueOf !== Object.prototype.valueOf) { return a.valueOf() === b.valueOf(); }
57364             if (a.toString !== Object.prototype.toString) { return a.toString() === b.toString(); }
57365
57366             keys = Object.keys(a);
57367             length = keys.length;
57368             if (length !== Object.keys(b).length) { return false; }
57369
57370             for (i = length; i-- !== 0;)
57371               { if (!Object.prototype.hasOwnProperty.call(b, keys[i])) { return false; } }
57372
57373             for (i = length; i-- !== 0;) {
57374               var key = keys[i];
57375
57376               if (!equal(a[key], b[key])) { return false; }
57377             }
57378
57379             return true;
57380           }
57381
57382           // true if both NaN, false otherwise
57383           return a!==a && b!==b;
57384         };
57385
57386         // Text diff algorithm following Hunt and McIlroy 1976.
57387         // J. W. Hunt and M. D. McIlroy, An algorithm for differential file
57388         // comparison, Bell Telephone Laboratories CSTR #41 (1976)
57389         // http://www.cs.dartmouth.edu/~doug/
57390         //
57391         // Expects two arrays of strings.
57392         function LCS(file1, file2) {
57393           var equivalenceClasses;
57394           var file2indices;
57395           var newCandidate;
57396           var candidates;
57397           var line;
57398           var c, i, j, jX, r, s;
57399
57400           equivalenceClasses = {};
57401           for (j = 0; j < file2.length; j++) {
57402             line = file2[j];
57403             if (equivalenceClasses[line]) {
57404               equivalenceClasses[line].push(j);
57405             } else {
57406               equivalenceClasses[line] = [j];
57407             }
57408           }
57409
57410           candidates = [
57411             { file1index: -1, file2index: -1, chain: null }
57412           ];
57413
57414           for (i = 0; i < file1.length; i++) {
57415             line = file1[i];
57416             file2indices = equivalenceClasses[line] || [];
57417
57418             r = 0;
57419             c = candidates[0];
57420
57421             for (jX = 0; jX < file2indices.length; jX++) {
57422               j = file2indices[jX];
57423
57424               for (s = r; s < candidates.length; s++) {
57425                 if ((candidates[s].file2index < j) && ((s === candidates.length - 1) || (candidates[s + 1].file2index > j))) {
57426                   break;
57427                 }
57428               }
57429
57430               if (s < candidates.length) {
57431                 newCandidate = { file1index: i, file2index: j, chain: candidates[s] };
57432                 if (r === candidates.length) {
57433                   candidates.push(c);
57434                 } else {
57435                   candidates[r] = c;
57436                 }
57437                 r = s + 1;
57438                 c = newCandidate;
57439                 if (r === candidates.length) {
57440                   break; // no point in examining further (j)s
57441                 }
57442               }
57443             }
57444
57445             candidates[r] = c;
57446           }
57447
57448           // At this point, we know the LCS: it's in the reverse of the
57449           // linked-list through .chain of candidates[candidates.length - 1].
57450
57451           return candidates[candidates.length - 1];
57452         }
57453
57454
57455         // We apply the LCS to give a simple representation of the
57456         // offsets and lengths of mismatched chunks in the input
57457         // files. This is used by diff3MergeIndices below.
57458         function diffIndices(file1, file2) {
57459           var result = [];
57460           var tail1 = file1.length;
57461           var tail2 = file2.length;
57462
57463           for (var candidate = LCS(file1, file2);
57464              candidate !== null;
57465              candidate = candidate.chain)
57466           {
57467             var mismatchLength1 = tail1 - candidate.file1index - 1;
57468             var mismatchLength2 = tail2 - candidate.file2index - 1;
57469             tail1 = candidate.file1index;
57470             tail2 = candidate.file2index;
57471
57472             if (mismatchLength1 || mismatchLength2) {
57473               result.push({
57474                 file1: [tail1 + 1, mismatchLength1],
57475                 file2: [tail2 + 1, mismatchLength2]
57476               });
57477             }
57478           }
57479
57480           result.reverse();
57481           return result;
57482         }
57483
57484
57485         // Given three files, A, O, and B, where both A and B are
57486         // independently derived from O, returns a fairly complicated
57487         // internal representation of merge decisions it's taken. The
57488         // interested reader may wish to consult
57489         //
57490         // Sanjeev Khanna, Keshav Kunal, and Benjamin C. Pierce.
57491         // 'A Formal Investigation of ' In Arvind and Prasad,
57492         // editors, Foundations of Software Technology and Theoretical
57493         // Computer Science (FSTTCS), December 2007.
57494         //
57495         // (http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf)
57496         function diff3MergeIndices(a, o, b) {
57497           var i;
57498           var m1 = diffIndices(o, a);
57499           var m2 = diffIndices(o, b);
57500
57501           var hunks = [];
57502           function addHunk(h, side) {
57503             hunks.push([h.file1[0], side, h.file1[1], h.file2[0], h.file2[1]]);
57504           }
57505           for (i = 0; i < m1.length; i++) { addHunk(m1[i], 0); }
57506           for (i = 0; i < m2.length; i++) { addHunk(m2[i], 2); }
57507           hunks.sort(function (x, y) { return x[0] - y[0]; });
57508
57509           var result = [];
57510           var commonOffset = 0;
57511           function copyCommon(targetOffset) {
57512             if (targetOffset > commonOffset) {
57513               result.push([1, commonOffset, targetOffset - commonOffset]);
57514               commonOffset = targetOffset;
57515             }
57516           }
57517
57518           for (var hunkIndex = 0; hunkIndex < hunks.length; hunkIndex++) {
57519             var firstHunkIndex = hunkIndex;
57520             var hunk = hunks[hunkIndex];
57521             var regionLhs = hunk[0];
57522             var regionRhs = regionLhs + hunk[2];
57523             while (hunkIndex < hunks.length - 1) {
57524               var maybeOverlapping = hunks[hunkIndex + 1];
57525               var maybeLhs = maybeOverlapping[0];
57526               if (maybeLhs > regionRhs) {
57527                 break;
57528               }
57529               regionRhs = Math.max(regionRhs, maybeLhs + maybeOverlapping[2]);
57530               hunkIndex++;
57531             }
57532
57533             copyCommon(regionLhs);
57534             if (firstHunkIndex === hunkIndex) {
57535               // The 'overlap' was only one hunk long, meaning that
57536               // there's no conflict here. Either a and o were the
57537               // same, or b and o were the same.
57538               if (hunk[4] > 0) {
57539                 result.push([hunk[1], hunk[3], hunk[4]]);
57540               }
57541             } else {
57542               // A proper conflict. Determine the extents of the
57543               // regions involved from a, o and b. Effectively merge
57544               // all the hunks on the left into one giant hunk, and
57545               // do the same for the right; then, correct for skew
57546               // in the regions of o that each side changed, and
57547               // report appropriate spans for the three sides.
57548               var regions = {
57549                 0: [a.length, -1, o.length, -1],
57550                 2: [b.length, -1, o.length, -1]
57551               };
57552               for (i = firstHunkIndex; i <= hunkIndex; i++) {
57553                 hunk = hunks[i];
57554                 var side = hunk[1];
57555                 var r = regions[side];
57556                 var oLhs = hunk[0];
57557                 var oRhs = oLhs + hunk[2];
57558                 var abLhs = hunk[3];
57559                 var abRhs = abLhs + hunk[4];
57560                 r[0] = Math.min(abLhs, r[0]);
57561                 r[1] = Math.max(abRhs, r[1]);
57562                 r[2] = Math.min(oLhs, r[2]);
57563                 r[3] = Math.max(oRhs, r[3]);
57564               }
57565               var aLhs = regions[0][0] + (regionLhs - regions[0][2]);
57566               var aRhs = regions[0][1] + (regionRhs - regions[0][3]);
57567               var bLhs = regions[2][0] + (regionLhs - regions[2][2]);
57568               var bRhs = regions[2][1] + (regionRhs - regions[2][3]);
57569               result.push([-1,
57570                            aLhs,      aRhs      - aLhs,
57571                            regionLhs, regionRhs - regionLhs,
57572                            bLhs,      bRhs      - bLhs]);
57573             }
57574             commonOffset = regionRhs;
57575           }
57576
57577           copyCommon(o.length);
57578           return result;
57579         }
57580
57581
57582         // Applies the output of diff3MergeIndices to actually
57583         // construct the merged file; the returned result alternates
57584         // between 'ok' and 'conflict' blocks.
57585         function diff3Merge(a, o, b, excludeFalseConflicts) {
57586           var result = [];
57587           var files = [a, o, b];
57588           var indices = diff3MergeIndices(a, o, b);
57589
57590           var okLines = [];
57591           function flushOk() {
57592             if (okLines.length) {
57593               result.push({ok: okLines});
57594             }
57595             okLines = [];
57596           }
57597           function pushOk(xs) {
57598             for (var j = 0; j < xs.length; j++) {
57599               okLines.push(xs[j]);
57600             }
57601           }
57602
57603           function isTrueConflict(rec) {
57604             if (rec[2] !== rec[6]) { return true; }
57605             var aoff = rec[1];
57606             var boff = rec[5];
57607             for (var j = 0; j < rec[2]; j++) {
57608               if (a[j + aoff] !== b[j + boff]) {
57609                 return true;
57610               }
57611             }
57612             return false;
57613           }
57614
57615           for (var i = 0; i < indices.length; i++) {
57616             var x = indices[i];
57617             var side = x[0];
57618             if (side === -1) {
57619               if (excludeFalseConflicts && !isTrueConflict(x)) {
57620                 pushOk(files[0].slice(x[1], x[1] + x[2]));
57621               } else {
57622                 flushOk();
57623                 result.push({
57624                   conflict: {
57625                     a: a.slice(x[1], x[1] + x[2]),
57626                     aIndex: x[1],
57627                     o: o.slice(x[3], x[3] + x[4]),
57628                     oIndex: x[3],
57629                     b: b.slice(x[5], x[5] + x[6]),
57630                     bIndex: x[5]
57631                   }
57632                 });
57633               }
57634             } else {
57635               pushOk(files[side].slice(x[1], x[1] + x[2]));
57636             }
57637           }
57638
57639           flushOk();
57640           return result;
57641         }
57642
57643         function actionMergeRemoteChanges(id, localGraph, remoteGraph, formatUser) {
57644             var _option = 'safe';  // 'safe', 'force_local', 'force_remote'
57645             var _conflicts = [];
57646
57647
57648             function user(d) {
57649                 return (typeof formatUser === 'function') ? formatUser(d) : d;
57650             }
57651
57652
57653             function mergeLocation(remote, target) {
57654                 function pointEqual(a, b) {
57655                     var epsilon = 1e-6;
57656                     return (Math.abs(a[0] - b[0]) < epsilon) && (Math.abs(a[1] - b[1]) < epsilon);
57657                 }
57658
57659                 if (_option === 'force_local' || pointEqual(target.loc, remote.loc)) {
57660                     return target;
57661                 }
57662                 if (_option === 'force_remote') {
57663                     return target.update({loc: remote.loc});
57664                 }
57665
57666                 _conflicts.push(t('merge_remote_changes.conflict.location', { user: user(remote.user) }));
57667                 return target;
57668             }
57669
57670
57671             function mergeNodes(base, remote, target) {
57672                 if (_option === 'force_local' || fastDeepEqual(target.nodes, remote.nodes)) {
57673                     return target;
57674                 }
57675                 if (_option === 'force_remote') {
57676                     return target.update({nodes: remote.nodes});
57677                 }
57678
57679                 var ccount = _conflicts.length;
57680                 var o = base.nodes || [];
57681                 var a = target.nodes || [];
57682                 var b = remote.nodes || [];
57683                 var nodes = [];
57684                 var hunks = diff3Merge(a, o, b, true);
57685
57686                 for (var i = 0; i < hunks.length; i++) {
57687                     var hunk = hunks[i];
57688                     if (hunk.ok) {
57689                         nodes.push.apply(nodes, hunk.ok);
57690                     } else {
57691                         // for all conflicts, we can assume c.a !== c.b
57692                         // because `diff3Merge` called with `true` option to exclude false conflicts..
57693                         var c = hunk.conflict;
57694                         if (fastDeepEqual(c.o, c.a)) {  // only changed remotely
57695                             nodes.push.apply(nodes, c.b);
57696                         } else if (fastDeepEqual(c.o, c.b)) {  // only changed locally
57697                             nodes.push.apply(nodes, c.a);
57698                         } else {       // changed both locally and remotely
57699                             _conflicts.push(t('merge_remote_changes.conflict.nodelist', { user: user(remote.user) }));
57700                             break;
57701                         }
57702                     }
57703                 }
57704
57705                 return (_conflicts.length === ccount) ? target.update({nodes: nodes}) : target;
57706             }
57707
57708
57709             function mergeChildren(targetWay, children, updates, graph) {
57710                 function isUsed(node, targetWay) {
57711                     var hasInterestingParent = graph.parentWays(node)
57712                         .some(function(way) { return way.id !== targetWay.id; });
57713
57714                     return node.hasInterestingTags() ||
57715                         hasInterestingParent ||
57716                         graph.parentRelations(node).length > 0;
57717                 }
57718
57719                 var ccount = _conflicts.length;
57720
57721                 for (var i = 0; i < children.length; i++) {
57722                     var id = children[i];
57723                     var node = graph.hasEntity(id);
57724
57725                     // remove unused childNodes..
57726                     if (targetWay.nodes.indexOf(id) === -1) {
57727                         if (node && !isUsed(node, targetWay)) {
57728                             updates.removeIds.push(id);
57729                         }
57730                         continue;
57731                     }
57732
57733                     // restore used childNodes..
57734                     var local = localGraph.hasEntity(id);
57735                     var remote = remoteGraph.hasEntity(id);
57736                     var target;
57737
57738                     if (_option === 'force_remote' && remote && remote.visible) {
57739                         updates.replacements.push(remote);
57740
57741                     } else if (_option === 'force_local' && local) {
57742                         target = osmEntity(local);
57743                         if (remote) {
57744                             target = target.update({ version: remote.version });
57745                         }
57746                         updates.replacements.push(target);
57747
57748                     } else if (_option === 'safe' && local && remote && local.version !== remote.version) {
57749                         target = osmEntity(local, { version: remote.version });
57750                         if (remote.visible) {
57751                             target = mergeLocation(remote, target);
57752                         } else {
57753                             _conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) }));
57754                         }
57755
57756                         if (_conflicts.length !== ccount) { break; }
57757                         updates.replacements.push(target);
57758                     }
57759                 }
57760
57761                 return targetWay;
57762             }
57763
57764
57765             function updateChildren(updates, graph) {
57766                 for (var i = 0; i < updates.replacements.length; i++) {
57767                     graph = graph.replace(updates.replacements[i]);
57768                 }
57769                 if (updates.removeIds.length) {
57770                     graph = actionDeleteMultiple(updates.removeIds)(graph);
57771                 }
57772                 return graph;
57773             }
57774
57775
57776             function mergeMembers(remote, target) {
57777                 if (_option === 'force_local' || fastDeepEqual(target.members, remote.members)) {
57778                     return target;
57779                 }
57780                 if (_option === 'force_remote') {
57781                     return target.update({members: remote.members});
57782                 }
57783
57784                 _conflicts.push(t('merge_remote_changes.conflict.memberlist', { user: user(remote.user) }));
57785                 return target;
57786             }
57787
57788
57789             function mergeTags(base, remote, target) {
57790                 if (_option === 'force_local' || fastDeepEqual(target.tags, remote.tags)) {
57791                     return target;
57792                 }
57793                 if (_option === 'force_remote') {
57794                     return target.update({tags: remote.tags});
57795                 }
57796
57797                 var ccount = _conflicts.length;
57798                 var o = base.tags || {};
57799                 var a = target.tags || {};
57800                 var b = remote.tags || {};
57801                 var keys = utilArrayUnion(utilArrayUnion(Object.keys(o), Object.keys(a)), Object.keys(b))
57802                     .filter(function(k) { return !dataDiscarded[k]; });
57803                 var tags = Object.assign({}, a);   // shallow copy
57804                 var changed = false;
57805
57806                 for (var i = 0; i < keys.length; i++) {
57807                     var k = keys[i];
57808
57809                     if (o[k] !== b[k] && a[k] !== b[k]) {    // changed remotely..
57810                         if (o[k] !== a[k]) {      // changed locally..
57811                             _conflicts.push(t('merge_remote_changes.conflict.tags',
57812                                 { tag: k, local: a[k], remote: b[k], user: user(remote.user) }));
57813
57814                         } else {                  // unchanged locally, accept remote change..
57815                             if (b.hasOwnProperty(k)) {
57816                                 tags[k] = b[k];
57817                             } else {
57818                                 delete tags[k];
57819                             }
57820                             changed = true;
57821                         }
57822                     }
57823                 }
57824
57825                 return (changed && _conflicts.length === ccount) ? target.update({tags: tags}) : target;
57826             }
57827
57828
57829             //  `graph.base()` is the common ancestor of the two graphs.
57830             //  `localGraph` contains user's edits up to saving
57831             //  `remoteGraph` contains remote edits to modified nodes
57832             //  `graph` must be a descendent of `localGraph` and may include
57833             //      some conflict resolution actions performed on it.
57834             //
57835             //                  --- ... --- `localGraph` -- ... -- `graph`
57836             //                 /
57837             //  `graph.base()` --- ... --- `remoteGraph`
57838             //
57839             var action = function(graph) {
57840                 var updates = { replacements: [], removeIds: [] };
57841                 var base = graph.base().entities[id];
57842                 var local = localGraph.entity(id);
57843                 var remote = remoteGraph.entity(id);
57844                 var target = osmEntity(local, { version: remote.version });
57845
57846                 // delete/undelete
57847                 if (!remote.visible) {
57848                     if (_option === 'force_remote') {
57849                         return actionDeleteMultiple([id])(graph);
57850
57851                     } else if (_option === 'force_local') {
57852                         if (target.type === 'way') {
57853                             target = mergeChildren(target, utilArrayUniq(local.nodes), updates, graph);
57854                             graph = updateChildren(updates, graph);
57855                         }
57856                         return graph.replace(target);
57857
57858                     } else {
57859                         _conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) }));
57860                         return graph;  // do nothing
57861                     }
57862                 }
57863
57864                 // merge
57865                 if (target.type === 'node') {
57866                     target = mergeLocation(remote, target);
57867
57868                 } else if (target.type === 'way') {
57869                     // pull in any child nodes that may not be present locally..
57870                     graph.rebase(remoteGraph.childNodes(remote), [graph], false);
57871                     target = mergeNodes(base, remote, target);
57872                     target = mergeChildren(target, utilArrayUnion(local.nodes, remote.nodes), updates, graph);
57873
57874                 } else if (target.type === 'relation') {
57875                     target = mergeMembers(remote, target);
57876                 }
57877
57878                 target = mergeTags(base, remote, target);
57879
57880                 if (!_conflicts.length) {
57881                     graph = updateChildren(updates, graph).replace(target);
57882                 }
57883
57884                 return graph;
57885             };
57886
57887
57888             action.withOption = function(opt) {
57889                 _option = opt;
57890                 return action;
57891             };
57892
57893
57894             action.conflicts = function() {
57895                 return _conflicts;
57896             };
57897
57898
57899             return action;
57900         }
57901
57902         // https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java
57903         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as
57904         function actionMove(moveIDs, tryDelta, projection, cache) {
57905             var _delta = tryDelta;
57906
57907             function setupCache(graph) {
57908                 function canMove(nodeID) {
57909                     // Allow movement of any node that is in the selectedIDs list..
57910                     if (moveIDs.indexOf(nodeID) !== -1) { return true; }
57911
57912                     // Allow movement of a vertex where 2 ways meet..
57913                     var parents = graph.parentWays(graph.entity(nodeID));
57914                     if (parents.length < 3) { return true; }
57915
57916                     // Restrict movement of a vertex where >2 ways meet, unless all parentWays are moving too..
57917                     var parentsMoving = parents.every(function(way) { return cache.moving[way.id]; });
57918                     if (!parentsMoving) { delete cache.moving[nodeID]; }
57919
57920                     return parentsMoving;
57921                 }
57922
57923                 function cacheEntities(ids) {
57924                     for (var i = 0; i < ids.length; i++) {
57925                         var id = ids[i];
57926                         if (cache.moving[id]) { continue; }
57927                         cache.moving[id] = true;
57928
57929                         var entity = graph.hasEntity(id);
57930                         if (!entity) { continue; }
57931
57932                         if (entity.type === 'node') {
57933                             cache.nodes.push(id);
57934                             cache.startLoc[id] = entity.loc;
57935                         } else if (entity.type === 'way') {
57936                             cache.ways.push(id);
57937                             cacheEntities(entity.nodes);
57938                         } else {
57939                             cacheEntities(entity.members.map(function(member) {
57940                                 return member.id;
57941                             }));
57942                         }
57943                     }
57944                 }
57945
57946                 function cacheIntersections(ids) {
57947                     function isEndpoint(way, id) {
57948                         return !way.isClosed() && !!way.affix(id);
57949                     }
57950
57951                     for (var i = 0; i < ids.length; i++) {
57952                         var id = ids[i];
57953
57954                         // consider only intersections with 1 moved and 1 unmoved way.
57955                         var childNodes = graph.childNodes(graph.entity(id));
57956                         for (var j = 0; j < childNodes.length; j++) {
57957                             var node = childNodes[j];
57958                             var parents = graph.parentWays(node);
57959                             if (parents.length !== 2) { continue; }
57960
57961                             var moved = graph.entity(id);
57962                             var unmoved = null;
57963                             for (var k = 0; k < parents.length; k++) {
57964                                 var way = parents[k];
57965                                 if (!cache.moving[way.id]) {
57966                                     unmoved = way;
57967                                     break;
57968                                 }
57969                             }
57970                             if (!unmoved) { continue; }
57971
57972                             // exclude ways that are overly connected..
57973                             if (utilArrayIntersection(moved.nodes, unmoved.nodes).length > 2) { continue; }
57974                             if (moved.isArea() || unmoved.isArea()) { continue; }
57975
57976                             cache.intersections.push({
57977                                 nodeId: node.id,
57978                                 movedId: moved.id,
57979                                 unmovedId: unmoved.id,
57980                                 movedIsEP: isEndpoint(moved, node.id),
57981                                 unmovedIsEP: isEndpoint(unmoved, node.id)
57982                             });
57983                         }
57984                     }
57985                 }
57986
57987
57988                 if (!cache) {
57989                     cache = {};
57990                 }
57991                 if (!cache.ok) {
57992                     cache.moving = {};
57993                     cache.intersections = [];
57994                     cache.replacedVertex = {};
57995                     cache.startLoc = {};
57996                     cache.nodes = [];
57997                     cache.ways = [];
57998
57999                     cacheEntities(moveIDs);
58000                     cacheIntersections(cache.ways);
58001                     cache.nodes = cache.nodes.filter(canMove);
58002
58003                     cache.ok = true;
58004                 }
58005             }
58006
58007
58008             // Place a vertex where the moved vertex used to be, to preserve way shape..
58009             //
58010             //  Start:
58011             //      b ---- e
58012             //     / \
58013             //    /   \
58014             //   /     \
58015             //  a       c
58016             //
58017             //      *               node '*' added to preserve shape
58018             //     / \
58019             //    /   b ---- e      way `b,e` moved here:
58020             //   /     \
58021             //  a       c
58022             //
58023             //
58024             function replaceMovedVertex(nodeId, wayId, graph, delta) {
58025                 var way = graph.entity(wayId);
58026                 var moved = graph.entity(nodeId);
58027                 var movedIndex = way.nodes.indexOf(nodeId);
58028                 var len, prevIndex, nextIndex;
58029
58030                 if (way.isClosed()) {
58031                     len = way.nodes.length - 1;
58032                     prevIndex = (movedIndex + len - 1) % len;
58033                     nextIndex = (movedIndex + len + 1) % len;
58034                 } else {
58035                     len = way.nodes.length;
58036                     prevIndex = movedIndex - 1;
58037                     nextIndex = movedIndex + 1;
58038                 }
58039
58040                 var prev = graph.hasEntity(way.nodes[prevIndex]);
58041                 var next = graph.hasEntity(way.nodes[nextIndex]);
58042
58043                 // Don't add orig vertex at endpoint..
58044                 if (!prev || !next) { return graph; }
58045
58046                 var key = wayId + '_' + nodeId;
58047                 var orig = cache.replacedVertex[key];
58048                 if (!orig) {
58049                     orig = osmNode();
58050                     cache.replacedVertex[key] = orig;
58051                     cache.startLoc[orig.id] = cache.startLoc[nodeId];
58052                 }
58053
58054                 var start, end;
58055                 if (delta) {
58056                     start = projection(cache.startLoc[nodeId]);
58057                     end = projection.invert(geoVecAdd(start, delta));
58058                 } else {
58059                     end = cache.startLoc[nodeId];
58060                 }
58061                 orig = orig.move(end);
58062
58063                 var angle = Math.abs(geoAngle(orig, prev, projection) -
58064                         geoAngle(orig, next, projection)) * 180 / Math.PI;
58065
58066                 // Don't add orig vertex if it would just make a straight line..
58067                 if (angle > 175 && angle < 185) { return graph; }
58068
58069                 // moving forward or backward along way?
58070                 var p1 = [prev.loc, orig.loc, moved.loc, next.loc].map(projection);
58071                 var p2 = [prev.loc, moved.loc, orig.loc, next.loc].map(projection);
58072                 var d1 = geoPathLength(p1);
58073                 var d2 = geoPathLength(p2);
58074                 var insertAt = (d1 <= d2) ? movedIndex : nextIndex;
58075
58076                 // moving around closed loop?
58077                 if (way.isClosed() && insertAt === 0) { insertAt = len; }
58078
58079                 way = way.addNode(orig.id, insertAt);
58080                 return graph.replace(orig).replace(way);
58081             }
58082
58083
58084             // Remove duplicate vertex that might have been added by
58085             // replaceMovedVertex.  This is done after the unzorro checks.
58086             function removeDuplicateVertices(wayId, graph) {
58087                 var way = graph.entity(wayId);
58088                 var epsilon = 1e-6;
58089                 var prev, curr;
58090
58091                 function isInteresting(node, graph) {
58092                     return graph.parentWays(node).length > 1 ||
58093                         graph.parentRelations(node).length ||
58094                         node.hasInterestingTags();
58095                 }
58096
58097                 for (var i = 0; i < way.nodes.length; i++) {
58098                     curr = graph.entity(way.nodes[i]);
58099
58100                     if (prev && curr && geoVecEqual(prev.loc, curr.loc, epsilon)) {
58101                         if (!isInteresting(prev, graph)) {
58102                             way = way.removeNode(prev.id);
58103                             graph = graph.replace(way).remove(prev);
58104                         } else if (!isInteresting(curr, graph)) {
58105                             way = way.removeNode(curr.id);
58106                             graph = graph.replace(way).remove(curr);
58107                         }
58108                     }
58109
58110                     prev = curr;
58111                 }
58112
58113                 return graph;
58114             }
58115
58116
58117             // Reorder nodes around intersections that have moved..
58118             //
58119             //  Start:                way1.nodes: b,e         (moving)
58120             //  a - b - c ----- d     way2.nodes: a,b,c,d     (static)
58121             //      |                 vertex: b
58122             //      e                 isEP1: true,  isEP2, false
58123             //
58124             //  way1 `b,e` moved here:
58125             //  a ----- c = b - d
58126             //              |
58127             //              e
58128             //
58129             //  reorder nodes         way1.nodes: b,e
58130             //  a ----- c - b - d     way2.nodes: a,c,b,d
58131             //              |
58132             //              e
58133             //
58134             function unZorroIntersection(intersection, graph) {
58135                 var vertex = graph.entity(intersection.nodeId);
58136                 var way1 = graph.entity(intersection.movedId);
58137                 var way2 = graph.entity(intersection.unmovedId);
58138                 var isEP1 = intersection.movedIsEP;
58139                 var isEP2 = intersection.unmovedIsEP;
58140
58141                 // don't move the vertex if it is the endpoint of both ways.
58142                 if (isEP1 && isEP2) { return graph; }
58143
58144                 var nodes1 = graph.childNodes(way1).filter(function(n) { return n !== vertex; });
58145                 var nodes2 = graph.childNodes(way2).filter(function(n) { return n !== vertex; });
58146
58147                 if (way1.isClosed() && way1.first() === vertex.id) { nodes1.push(nodes1[0]); }
58148                 if (way2.isClosed() && way2.first() === vertex.id) { nodes2.push(nodes2[0]); }
58149
58150                 var edge1 = !isEP1 && geoChooseEdge(nodes1, projection(vertex.loc), projection);
58151                 var edge2 = !isEP2 && geoChooseEdge(nodes2, projection(vertex.loc), projection);
58152                 var loc;
58153
58154                 // snap vertex to nearest edge (or some point between them)..
58155                 if (!isEP1 && !isEP2) {
58156                     var epsilon = 1e-6, maxIter = 10;
58157                     for (var i = 0; i < maxIter; i++) {
58158                         loc = geoVecInterp(edge1.loc, edge2.loc, 0.5);
58159                         edge1 = geoChooseEdge(nodes1, projection(loc), projection);
58160                         edge2 = geoChooseEdge(nodes2, projection(loc), projection);
58161                         if (Math.abs(edge1.distance - edge2.distance) < epsilon) { break; }
58162                     }
58163                 } else if (!isEP1) {
58164                     loc = edge1.loc;
58165                 } else {
58166                     loc = edge2.loc;
58167                 }
58168
58169                 graph = graph.replace(vertex.move(loc));
58170
58171                 // if zorro happened, reorder nodes..
58172                 if (!isEP1 && edge1.index !== way1.nodes.indexOf(vertex.id)) {
58173                     way1 = way1.removeNode(vertex.id).addNode(vertex.id, edge1.index);
58174                     graph = graph.replace(way1);
58175                 }
58176                 if (!isEP2 && edge2.index !== way2.nodes.indexOf(vertex.id)) {
58177                     way2 = way2.removeNode(vertex.id).addNode(vertex.id, edge2.index);
58178                     graph = graph.replace(way2);
58179                 }
58180
58181                 return graph;
58182             }
58183
58184
58185             function cleanupIntersections(graph) {
58186                 for (var i = 0; i < cache.intersections.length; i++) {
58187                     var obj = cache.intersections[i];
58188                     graph = replaceMovedVertex(obj.nodeId, obj.movedId, graph, _delta);
58189                     graph = replaceMovedVertex(obj.nodeId, obj.unmovedId, graph, null);
58190                     graph = unZorroIntersection(obj, graph);
58191                     graph = removeDuplicateVertices(obj.movedId, graph);
58192                     graph = removeDuplicateVertices(obj.unmovedId, graph);
58193                 }
58194
58195                 return graph;
58196             }
58197
58198
58199             // check if moving way endpoint can cross an unmoved way, if so limit delta..
58200             function limitDelta(graph) {
58201                 function moveNode(loc) {
58202                     return geoVecAdd(projection(loc), _delta);
58203                 }
58204
58205                 for (var i = 0; i < cache.intersections.length; i++) {
58206                     var obj = cache.intersections[i];
58207
58208                     // Don't limit movement if this is vertex joins 2 endpoints..
58209                     if (obj.movedIsEP && obj.unmovedIsEP) { continue; }
58210                     // Don't limit movement if this vertex is not an endpoint anyway..
58211                     if (!obj.movedIsEP) { continue; }
58212
58213                     var node = graph.entity(obj.nodeId);
58214                     var start = projection(node.loc);
58215                     var end = geoVecAdd(start, _delta);
58216                     var movedNodes = graph.childNodes(graph.entity(obj.movedId));
58217                     var movedPath = movedNodes.map(function(n) { return moveNode(n.loc); });
58218                     var unmovedNodes = graph.childNodes(graph.entity(obj.unmovedId));
58219                     var unmovedPath = unmovedNodes.map(function(n) { return projection(n.loc); });
58220                     var hits = geoPathIntersections(movedPath, unmovedPath);
58221
58222                     for (var j = 0; i < hits.length; i++) {
58223                         if (geoVecEqual(hits[j], end)) { continue; }
58224                         var edge = geoChooseEdge(unmovedNodes, end, projection);
58225                         _delta = geoVecSubtract(projection(edge.loc), start);
58226                     }
58227                 }
58228             }
58229
58230
58231             var action = function(graph) {
58232                 if (_delta[0] === 0 && _delta[1] === 0) { return graph; }
58233
58234                 setupCache(graph);
58235
58236                 if (cache.intersections.length) {
58237                     limitDelta(graph);
58238                 }
58239
58240                 for (var i = 0; i < cache.nodes.length; i++) {
58241                     var node = graph.entity(cache.nodes[i]);
58242                     var start = projection(node.loc);
58243                     var end = geoVecAdd(start, _delta);
58244                     graph = graph.replace(node.move(projection.invert(end)));
58245                 }
58246
58247                 if (cache.intersections.length) {
58248                     graph = cleanupIntersections(graph);
58249                 }
58250
58251                 return graph;
58252             };
58253
58254
58255             action.delta = function() {
58256                 return _delta;
58257             };
58258
58259
58260             return action;
58261         }
58262
58263         function actionMoveMember(relationId, fromIndex, toIndex) {
58264             return function(graph) {
58265                 return graph.replace(graph.entity(relationId).moveMember(fromIndex, toIndex));
58266             };
58267         }
58268
58269         function actionMoveNode(nodeID, toLoc) {
58270
58271             var action = function(graph, t) {
58272                 if (t === null || !isFinite(t)) { t = 1; }
58273                 t = Math.min(Math.max(+t, 0), 1);
58274
58275                 var node = graph.entity(nodeID);
58276                 return graph.replace(
58277                     node.move(geoVecInterp(node.loc, toLoc, t))
58278                 );
58279             };
58280
58281             action.transitionable = true;
58282
58283             return action;
58284         }
58285
58286         function actionNoop() {
58287             return function(graph) {
58288                 return graph;
58289             };
58290         }
58291
58292         function actionOrthogonalize(wayID, projection, vertexID, degThresh, ep) {
58293             var epsilon = ep || 1e-4;
58294             var threshold = degThresh || 13;  // degrees within right or straight to alter
58295
58296             // We test normalized dot products so we can compare as cos(angle)
58297             var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
58298             var upperThreshold = Math.cos(threshold * Math.PI / 180);
58299
58300
58301             var action = function(graph, t) {
58302                 if (t === null || !isFinite(t)) { t = 1; }
58303                 t = Math.min(Math.max(+t, 0), 1);
58304
58305                 var way = graph.entity(wayID);
58306                 way = way.removeNode('');   // sanity check - remove any consecutive duplicates
58307
58308                 if (way.tags.nonsquare) {
58309                     var tags = Object.assign({}, way.tags);
58310                     // since we're squaring, remove indication that this is physically unsquare
58311                     delete tags.nonsquare;
58312                     way = way.update({tags: tags});
58313                 }
58314
58315                 graph = graph.replace(way);
58316
58317                 var isClosed = way.isClosed();
58318                 var nodes = graph.childNodes(way).slice();  // shallow copy
58319                 if (isClosed) { nodes.pop(); }
58320
58321                 if (vertexID !== undefined) {
58322                     nodes = nodeSubset(nodes, vertexID, isClosed);
58323                     if (nodes.length !== 3) { return graph; }
58324                 }
58325
58326                 // note: all geometry functions here use the unclosed node/point/coord list
58327
58328                 var nodeCount = {};
58329                 var points = [];
58330                 var corner = { i: 0, dotp: 1 };
58331                 var node, point, loc, score, motions, i, j;
58332
58333                 for (i = 0; i < nodes.length; i++) {
58334                     node = nodes[i];
58335                     nodeCount[node.id] = (nodeCount[node.id] || 0) + 1;
58336                     points.push({ id: node.id, coord: projection(node.loc) });
58337                 }
58338
58339
58340                 if (points.length === 3) {   // move only one vertex for right triangle
58341                     for (i = 0; i < 1000; i++) {
58342                         motions = points.map(calcMotion);
58343
58344                         points[corner.i].coord = geoVecAdd(points[corner.i].coord, motions[corner.i]);
58345                         score = corner.dotp;
58346                         if (score < epsilon) {
58347                             break;
58348                         }
58349                     }
58350
58351                     node = graph.entity(nodes[corner.i].id);
58352                     loc = projection.invert(points[corner.i].coord);
58353                     graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
58354
58355                 } else {
58356                     var straights = [];
58357                     var simplified = [];
58358
58359                     // Remove points from nearly straight sections..
58360                     // This produces a simplified shape to orthogonalize
58361                     for (i = 0; i < points.length; i++) {
58362                         point = points[i];
58363                         var dotp = 0;
58364                         if (isClosed || (i > 0 && i < points.length - 1)) {
58365                             var a = points[(i - 1 + points.length) % points.length];
58366                             var b = points[(i + 1) % points.length];
58367                             dotp = Math.abs(geoOrthoNormalizedDotProduct(a.coord, b.coord, point.coord));
58368                         }
58369
58370                         if (dotp > upperThreshold) {
58371                             straights.push(point);
58372                         } else {
58373                             simplified.push(point);
58374                         }
58375                     }
58376
58377                     // Orthogonalize the simplified shape
58378                     var bestPoints = clonePoints(simplified);
58379                     var originalPoints = clonePoints(simplified);
58380
58381                     score = Infinity;
58382                     for (i = 0; i < 1000; i++) {
58383                         motions = simplified.map(calcMotion);
58384
58385                         for (j = 0; j < motions.length; j++) {
58386                             simplified[j].coord = geoVecAdd(simplified[j].coord, motions[j]);
58387                         }
58388                         var newScore = geoOrthoCalcScore(simplified, isClosed, epsilon, threshold);
58389                         if (newScore < score) {
58390                             bestPoints = clonePoints(simplified);
58391                             score = newScore;
58392                         }
58393                         if (score < epsilon) {
58394                             break;
58395                         }
58396                     }
58397
58398                     var bestCoords = bestPoints.map(function(p) { return p.coord; });
58399                     if (isClosed) { bestCoords.push(bestCoords[0]); }
58400
58401                     // move the nodes that should move
58402                     for (i = 0; i < bestPoints.length; i++) {
58403                         point = bestPoints[i];
58404                         if (!geoVecEqual(originalPoints[i].coord, point.coord)) {
58405                             node = graph.entity(point.id);
58406                             loc = projection.invert(point.coord);
58407                             graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
58408                         }
58409                     }
58410
58411                     // move the nodes along straight segments
58412                     for (i = 0; i < straights.length; i++) {
58413                         point = straights[i];
58414                         if (nodeCount[point.id] > 1) { continue; }   // skip self-intersections
58415
58416                         node = graph.entity(point.id);
58417
58418                         if (t === 1 &&
58419                             graph.parentWays(node).length === 1 &&
58420                             graph.parentRelations(node).length === 0 &&
58421                             !node.hasInterestingTags()
58422                         ) {
58423                             // remove uninteresting points..
58424                             graph = actionDeleteNode(node.id)(graph);
58425
58426                         } else {
58427                             // move interesting points to the nearest edge..
58428                             var choice = geoVecProject(point.coord, bestCoords);
58429                             if (choice) {
58430                                 loc = projection.invert(choice.target);
58431                                 graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
58432                             }
58433                         }
58434                     }
58435                 }
58436
58437                 return graph;
58438
58439
58440                 function clonePoints(array) {
58441                     return array.map(function(p) {
58442                         return { id: p.id, coord: [p.coord[0], p.coord[1]] };
58443                     });
58444                 }
58445
58446
58447                 function calcMotion(point, i, array) {
58448                     // don't try to move the endpoints of a non-closed way.
58449                     if (!isClosed && (i === 0 || i === array.length - 1)) { return [0, 0]; }
58450                     // don't try to move a node that appears more than once (self intersection)
58451                     if (nodeCount[array[i].id] > 1) { return [0, 0]; }
58452
58453                     var a = array[(i - 1 + array.length) % array.length].coord;
58454                     var origin = point.coord;
58455                     var b = array[(i + 1) % array.length].coord;
58456                     var p = geoVecSubtract(a, origin);
58457                     var q = geoVecSubtract(b, origin);
58458
58459                     var scale = 2 * Math.min(geoVecLength(p), geoVecLength(q));
58460                     p = geoVecNormalize(p);
58461                     q = geoVecNormalize(q);
58462
58463                     var dotp = (p[0] * q[0] + p[1] * q[1]);
58464                     var val = Math.abs(dotp);
58465
58466                     if (val < lowerThreshold) {  // nearly orthogonal
58467                         corner.i = i;
58468                         corner.dotp = val;
58469                         var vec = geoVecNormalize(geoVecAdd(p, q));
58470                         return geoVecScale(vec, 0.1 * dotp * scale);
58471                     }
58472
58473                     return [0, 0];   // do nothing
58474                 }
58475             };
58476
58477
58478             // if we are only orthogonalizing one vertex,
58479             // get that vertex and the previous and next
58480             function nodeSubset(nodes, vertexID, isClosed) {
58481                 var first = isClosed ? 0 : 1;
58482                 var last = isClosed ? nodes.length : nodes.length - 1;
58483
58484                 for (var i = first; i < last; i++) {
58485                     if (nodes[i].id === vertexID) {
58486                         return [
58487                             nodes[(i - 1 + nodes.length) % nodes.length],
58488                             nodes[i],
58489                             nodes[(i + 1) % nodes.length]
58490                         ];
58491                     }
58492                 }
58493
58494                 return [];
58495             }
58496
58497
58498             action.disabled = function(graph) {
58499                 var way = graph.entity(wayID);
58500                 way = way.removeNode('');  // sanity check - remove any consecutive duplicates
58501                 graph = graph.replace(way);
58502
58503                 var isClosed = way.isClosed();
58504                 var nodes = graph.childNodes(way).slice();  // shallow copy
58505                 if (isClosed) { nodes.pop(); }
58506
58507                 var allowStraightAngles = false;
58508                 if (vertexID !== undefined) {
58509                     allowStraightAngles = true;
58510                     nodes = nodeSubset(nodes, vertexID, isClosed);
58511                     if (nodes.length !== 3) { return 'end_vertex'; }
58512                 }
58513
58514                 var coords = nodes.map(function(n) { return projection(n.loc); });
58515                 var score = geoOrthoCanOrthogonalize(coords, isClosed, epsilon, threshold, allowStraightAngles);
58516
58517                 if (score === null) {
58518                     return 'not_squarish';
58519                 } else if (score === 0) {
58520                     return 'square_enough';
58521                 } else {
58522                     return false;
58523                 }
58524             };
58525
58526
58527             action.transitionable = true;
58528
58529             return action;
58530         }
58531
58532         // `actionRestrictTurn` creates a turn restriction relation.
58533         //
58534         // `turn` must be an `osmTurn` object
58535         // see osm/intersection.js, pathToTurn()
58536         //
58537         // This specifies a restriction of type `restriction` when traveling from
58538         // `turn.from.way` toward `turn.to.way` via `turn.via.node` OR `turn.via.ways`.
58539         // (The action does not check that these entities form a valid intersection.)
58540         //
58541         // From, to, and via ways should be split before calling this action.
58542         // (old versions of the code would split the ways here, but we no longer do it)
58543         //
58544         // For testing convenience, accepts a restrictionID to assign to the new
58545         // relation. Normally, this will be undefined and the relation will
58546         // automatically be assigned a new ID.
58547         //
58548         function actionRestrictTurn(turn, restrictionType, restrictionID) {
58549
58550             return function(graph) {
58551                 var fromWay = graph.entity(turn.from.way);
58552                 var toWay = graph.entity(turn.to.way);
58553                 var viaNode = turn.via.node && graph.entity(turn.via.node);
58554                 var viaWays = turn.via.ways && turn.via.ways.map(function(id) { return graph.entity(id); });
58555                 var members = [];
58556
58557                 members.push({ id: fromWay.id, type: 'way',  role: 'from' });
58558
58559                 if (viaNode) {
58560                     members.push({ id: viaNode.id,  type: 'node', role: 'via' });
58561                 } else if (viaWays) {
58562                     viaWays.forEach(function(viaWay) {
58563                         members.push({ id: viaWay.id,  type: 'way', role: 'via' });
58564                     });
58565                 }
58566
58567                 members.push({ id: toWay.id, type: 'way',  role: 'to' });
58568
58569                 return graph.replace(osmRelation({
58570                     id: restrictionID,
58571                     tags: {
58572                         type: 'restriction',
58573                         restriction: restrictionType
58574                     },
58575                     members: members
58576                 }));
58577             };
58578         }
58579
58580         function actionRevert(id) {
58581             var action = function(graph) {
58582                 var entity = graph.hasEntity(id),
58583                     base = graph.base().entities[id];
58584
58585                 if (entity && !base) {    // entity will be removed..
58586                     if (entity.type === 'node') {
58587                         graph.parentWays(entity)
58588                             .forEach(function(parent) {
58589                                 parent = parent.removeNode(id);
58590                                 graph = graph.replace(parent);
58591
58592                                 if (parent.isDegenerate()) {
58593                                     graph = actionDeleteWay(parent.id)(graph);
58594                                 }
58595                             });
58596                     }
58597
58598                     graph.parentRelations(entity)
58599                         .forEach(function(parent) {
58600                             parent = parent.removeMembersWithID(id);
58601                             graph = graph.replace(parent);
58602
58603                             if (parent.isDegenerate()) {
58604                                 graph = actionDeleteRelation(parent.id)(graph);
58605                             }
58606                         });
58607                 }
58608
58609                 return graph.revert(id);
58610             };
58611
58612             return action;
58613         }
58614
58615         function actionRotate(rotateIds, pivot, angle, projection) {
58616
58617             var action = function(graph) {
58618                 return graph.update(function(graph) {
58619                     utilGetAllNodes(rotateIds, graph).forEach(function(node) {
58620                         var point = geoRotate([projection(node.loc)], angle, pivot)[0];
58621                         graph = graph.replace(node.move(projection.invert(point)));
58622                     });
58623                 });
58624             };
58625
58626             return action;
58627         }
58628
58629         /* Align nodes along their common axis */
58630         function actionStraightenNodes(nodeIDs, projection) {
58631
58632             function positionAlongWay(a, o, b) {
58633                 return geoVecDot(a, b, o) / geoVecDot(b, b, o);
58634             }
58635
58636
58637             var action = function(graph, t) {
58638                 if (t === null || !isFinite(t)) { t = 1; }
58639                 t = Math.min(Math.max(+t, 0), 1);
58640
58641                 var nodes = nodeIDs.map(function(id) { return graph.entity(id); });
58642                 var points = nodes.map(function(n) { return projection(n.loc); });
58643                 var ssr = geoGetSmallestSurroundingRectangle(points);
58644
58645                 // Choose line pq = axis of symmetry.
58646                 // The shape's surrounding rectangle has 2 axes of symmetry.
58647                 // Snap points to the long axis
58648                 var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2 ];
58649                 var q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2 ];
58650                 var p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2 ];
58651                 var q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2 ];
58652                 var p, q;
58653
58654                 var isLong = (geoVecLength(p1, q1) > geoVecLength(p2, q2));
58655                 if (isLong) {
58656                     p = p1;
58657                     q = q1;
58658                 } else {
58659                     p = p2;
58660                     q = q2;
58661                 }
58662
58663                 // Move points onto line pq
58664                 for (var i = 0; i < points.length; i++) {
58665                     var node = nodes[i];
58666                     var point = points[i];
58667                     var u = positionAlongWay(point, p, q);
58668                     var point2 = geoVecInterp(p, q, u);
58669                     var loc2 = projection.invert(point2);
58670                     graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t)));
58671                 }
58672
58673                 return graph;
58674             };
58675
58676
58677             action.disabled = function() {
58678                 return false;
58679             };
58680
58681
58682             action.transitionable = true;
58683
58684
58685             return action;
58686         }
58687
58688         /*
58689          * Based on https://github.com/openstreetmap/potlatch2/net/systemeD/potlatch2/tools/Straighten.as
58690          */
58691         function actionStraightenWay(selectedIDs, projection) {
58692
58693             function positionAlongWay(a, o, b) {
58694                 return geoVecDot(a, b, o) / geoVecDot(b, b, o);
58695             }
58696
58697             // Return all selected ways as a continuous, ordered array of nodes
58698             function allNodes(graph) {
58699                 var nodes = [];
58700                 var startNodes = [];
58701                 var endNodes = [];
58702                 var remainingWays = [];
58703                 var selectedWays = selectedIDs.filter(function(w) {
58704                     return graph.entity(w).type === 'way';
58705                 });
58706                 var selectedNodes = selectedIDs.filter(function(n) {
58707                     return graph.entity(n).type === 'node';
58708                 });
58709
58710                 for (var i = 0; i < selectedWays.length; i++) {
58711                     var way = graph.entity(selectedWays[i]);
58712                     nodes = way.nodes.slice(0);
58713                     remainingWays.push(nodes);
58714                     startNodes.push(nodes[0]);
58715                     endNodes.push(nodes[nodes.length-1]);
58716                 }
58717
58718                 // Remove duplicate end/startNodes (duplicate nodes cannot be at the line end,
58719                 //   and need to be removed so currNode difference calculation below works)
58720                 // i.e. ["n-1", "n-1", "n-2"] => ["n-2"]
58721                 startNodes = startNodes.filter(function(n) {
58722                     return startNodes.indexOf(n) === startNodes.lastIndexOf(n);
58723                 });
58724                 endNodes = endNodes.filter(function(n) {
58725                     return endNodes.indexOf(n) === endNodes.lastIndexOf(n);
58726                 });
58727
58728                 // Choose the initial endpoint to start from
58729                 var currNode = utilArrayDifference(startNodes, endNodes)
58730                     .concat(utilArrayDifference(endNodes, startNodes))[0];
58731                 var nextWay = [];
58732                 nodes = [];
58733
58734                 // Create nested function outside of loop to avoid "function in loop" lint error
58735                 var getNextWay = function(currNode, remainingWays) {
58736                     return remainingWays.filter(function(way) {
58737                         return way[0] === currNode || way[way.length-1] === currNode;
58738                     })[0];
58739                 };
58740
58741                 // Add nodes to end of nodes array, until all ways are added
58742                 while (remainingWays.length) {
58743                     nextWay = getNextWay(currNode, remainingWays);
58744                     remainingWays = utilArrayDifference(remainingWays, [nextWay]);
58745
58746                     if (nextWay[0] !== currNode) {
58747                         nextWay.reverse();
58748                     }
58749                     nodes = nodes.concat(nextWay);
58750                     currNode = nodes[nodes.length-1];
58751                 }
58752
58753                 // If user selected 2 nodes to straighten between, then slice nodes array to those nodes
58754                 if (selectedNodes.length === 2) {
58755                     var startNodeIdx = nodes.indexOf(selectedNodes[0]);
58756                     var endNodeIdx = nodes.indexOf(selectedNodes[1]);
58757                     var sortedStartEnd = [startNodeIdx, endNodeIdx];
58758
58759                     sortedStartEnd.sort(function(a, b) { return a - b; });
58760                     nodes = nodes.slice(sortedStartEnd[0], sortedStartEnd[1]+1);
58761                 }
58762
58763                 return nodes.map(function(n) { return graph.entity(n); });
58764             }
58765
58766
58767             var action = function(graph, t) {
58768                 if (t === null || !isFinite(t)) { t = 1; }
58769                 t = Math.min(Math.max(+t, 0), 1);
58770
58771                 var nodes = allNodes(graph);
58772                 var points = nodes.map(function(n) { return projection(n.loc); });
58773                 var startPoint = points[0];
58774                 var endPoint = points[points.length-1];
58775                 var toDelete = [];
58776                 var i;
58777
58778                 for (i = 1; i < points.length-1; i++) {
58779                     var node = nodes[i];
58780                     var point = points[i];
58781
58782                     if (t < 1 || graph.parentWays(node).length > 1 ||
58783                         graph.parentRelations(node).length ||
58784                         node.hasInterestingTags()
58785                     ) {
58786                         var u = positionAlongWay(point, startPoint, endPoint);
58787                         var p = geoVecInterp(startPoint, endPoint, u);
58788                         var loc2 = projection.invert(p);
58789                         graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t)));
58790
58791                     } else {
58792                         // safe to delete
58793                         if (toDelete.indexOf(node) === -1) {
58794                             toDelete.push(node);
58795                         }
58796                     }
58797                 }
58798
58799                 for (i = 0; i < toDelete.length; i++) {
58800                     graph = actionDeleteNode(toDelete[i].id)(graph);
58801                 }
58802
58803                 return graph;
58804             };
58805
58806
58807             action.disabled = function(graph) {
58808                 // check way isn't too bendy
58809                 var nodes = allNodes(graph);
58810                 var points = nodes.map(function(n) { return projection(n.loc); });
58811                 var startPoint = points[0];
58812                 var endPoint = points[points.length-1];
58813                 var threshold = 0.2 * geoVecLength(startPoint, endPoint);
58814                 var i;
58815
58816                 if (threshold === 0) {
58817                     return 'too_bendy';
58818                 }
58819
58820                 for (i = 1; i < points.length - 1; i++) {
58821                     var point = points[i];
58822                     var u = positionAlongWay(point, startPoint, endPoint);
58823                     var p = geoVecInterp(startPoint, endPoint, u);
58824                     var dist = geoVecLength(p, point);
58825
58826                     // to bendy if point is off by 20% of total start/end distance in projected space
58827                     if (isNaN(dist) || dist > threshold) {
58828                         return 'too_bendy';
58829                     }
58830                 }
58831             };
58832
58833             action.transitionable = true;
58834
58835
58836             return action;
58837         }
58838
58839         // `actionUnrestrictTurn` deletes a turn restriction relation.
58840         //
58841         // `turn` must be an `osmTurn` object with a `restrictionID` property.
58842         // see osm/intersection.js, pathToTurn()
58843         //
58844         function actionUnrestrictTurn(turn) {
58845             return function(graph) {
58846                 return actionDeleteRelation(turn.restrictionID)(graph);
58847             };
58848         }
58849
58850         /* Reflect the given area around its axis of symmetry */
58851         function actionReflect(reflectIds, projection) {
58852             var _useLongAxis = true;
58853
58854
58855             var action = function(graph, t) {
58856                 if (t === null || !isFinite(t)) { t = 1; }
58857                 t = Math.min(Math.max(+t, 0), 1);
58858
58859                 var nodes = utilGetAllNodes(reflectIds, graph);
58860                 var points = nodes.map(function(n) { return projection(n.loc); });
58861                 var ssr = geoGetSmallestSurroundingRectangle(points);
58862
58863                 // Choose line pq = axis of symmetry.
58864                 // The shape's surrounding rectangle has 2 axes of symmetry.
58865                 // Reflect across the longer axis by default.
58866                 var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2 ];
58867                 var q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2 ];
58868                 var p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2 ];
58869                 var q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2 ];
58870                 var p, q;
58871
58872                 var isLong = (geoVecLength(p1, q1) > geoVecLength(p2, q2));
58873                 if ((_useLongAxis && isLong) || (!_useLongAxis && !isLong)) {
58874                     p = p1;
58875                     q = q1;
58876                 } else {
58877                     p = p2;
58878                     q = q2;
58879                 }
58880
58881                 // reflect c across pq
58882                 // http://math.stackexchange.com/questions/65503/point-reflection-over-a-line
58883                 var dx = q[0] - p[0];
58884                 var dy = q[1] - p[1];
58885                 var a = (dx * dx - dy * dy) / (dx * dx + dy * dy);
58886                 var b = 2 * dx * dy / (dx * dx + dy * dy);
58887                 for (var i = 0; i < nodes.length; i++) {
58888                     var node = nodes[i];
58889                     var c = projection(node.loc);
58890                     var c2 = [
58891                         a * (c[0] - p[0]) + b * (c[1] - p[1]) + p[0],
58892                         b * (c[0] - p[0]) - a * (c[1] - p[1]) + p[1]
58893                     ];
58894                     var loc2 = projection.invert(c2);
58895                     node = node.move(geoVecInterp(node.loc, loc2, t));
58896                     graph = graph.replace(node);
58897                 }
58898
58899                 return graph;
58900             };
58901
58902
58903             action.useLongAxis = function(val) {
58904                 if (!arguments.length) { return _useLongAxis; }
58905                 _useLongAxis = val;
58906                 return action;
58907             };
58908
58909
58910             action.transitionable = true;
58911
58912
58913             return action;
58914         }
58915
58916         function actionUpgradeTags(entityId, oldTags, replaceTags) {
58917
58918             return function(graph) {
58919                 var entity = graph.entity(entityId);
58920                 var tags = Object.assign({}, entity.tags);  // shallow copy
58921                 var transferValue;
58922                 var semiIndex;
58923
58924                 for (var oldTagKey in oldTags) {
58925                     if (oldTags[oldTagKey] === '*') {
58926                         transferValue = tags[oldTagKey];
58927                         delete tags[oldTagKey];
58928                     } else {
58929                         var vals = tags[oldTagKey].split(';').filter(Boolean);
58930                         var oldIndex = vals.indexOf(oldTags[oldTagKey]);
58931                         if (vals.length === 1 || oldIndex === -1) {
58932                             delete tags[oldTagKey];
58933                         } else {
58934                             if (replaceTags && replaceTags[oldTagKey]) {
58935                                 // replacing a value within a semicolon-delimited value, note the index
58936                                 semiIndex = oldIndex;
58937                             }
58938                             vals.splice(oldIndex, 1);
58939                             tags[oldTagKey] = vals.join(';');
58940                         }
58941                     }
58942                 }
58943
58944                 if (replaceTags) {
58945                     for (var replaceKey in replaceTags) {
58946                         var replaceValue = replaceTags[replaceKey];
58947                         if (replaceValue === '*') {
58948                             if (tags[replaceKey] && tags[replaceKey] !== 'no') {
58949                                 // allow any pre-existing value except `no` (troll tag)
58950                                 continue;
58951                             } else {
58952                                 // otherwise assume `yes` is okay
58953                                 tags[replaceKey] = 'yes';
58954                             }
58955                         } else if (replaceValue === '$1') {
58956                             tags[replaceKey] = transferValue;
58957                         } else {
58958                             if (tags[replaceKey] && oldTags[replaceKey] && semiIndex !== undefined) {
58959                                 // don't override preexisting values
58960                                 var existingVals = tags[replaceKey].split(';').filter(Boolean);
58961                                 if (existingVals.indexOf(replaceValue) === -1) {
58962                                     existingVals.splice(semiIndex, 0, replaceValue);
58963                                     tags[replaceKey] = existingVals.join(';');
58964                                 }
58965                             } else {
58966                                 tags[replaceKey] = replaceValue;
58967                             }
58968                         }
58969                     }
58970                 }
58971
58972                 return graph.replace(entity.update({ tags: tags }));
58973             };
58974         }
58975
58976         function behaviorEdit(context) {
58977
58978             function behavior() {
58979                 context.map()
58980                     .minzoom(context.minEditableZoom());
58981             }
58982
58983
58984             behavior.off = function() {
58985                 context.map()
58986                     .minzoom(0);
58987             };
58988
58989             return behavior;
58990         }
58991
58992         /*
58993            The hover behavior adds the `.hover` class on mouseover to all elements to which
58994            the identical datum is bound, and removes it on mouseout.
58995
58996            The :hover pseudo-class is insufficient for iD's purposes because a datum's visual
58997            representation may consist of several elements scattered throughout the DOM hierarchy.
58998            Only one of these elements can have the :hover pseudo-class, but all of them will
58999            have the .hover class.
59000          */
59001         function behaviorHover(context) {
59002             var dispatch$1 = dispatch('hover');
59003             var _selection = d3_select(null);
59004             var _newNodeId = null;
59005             var _initialNodeID = null;
59006             var _buttonDown;
59007             var _altDisables;
59008             var _ignoreVertex;
59009             var _target;
59010
59011
59012             function keydown() {
59013                 if (_altDisables && event.keyCode === utilKeybinding.modifierCodes.alt) {
59014                     _selection.selectAll('.hover')
59015                         .classed('hover-suppressed', true)
59016                         .classed('hover', false);
59017
59018                     _selection
59019                         .classed('hover-disabled', true);
59020
59021                     dispatch$1.call('hover', this, null);
59022                 }
59023             }
59024
59025
59026             function keyup() {
59027                 if (_altDisables && event.keyCode === utilKeybinding.modifierCodes.alt) {
59028                     _selection.selectAll('.hover-suppressed')
59029                         .classed('hover-suppressed', false)
59030                         .classed('hover', true);
59031
59032                     _selection
59033                         .classed('hover-disabled', false);
59034
59035                     dispatch$1.call('hover', this, _target ? _target.id : null);
59036                 }
59037             }
59038
59039
59040             function behavior(selection) {
59041                 _selection = selection;
59042
59043                 if (_initialNodeID) {
59044                     _newNodeId = _initialNodeID;
59045                     _initialNodeID = null;
59046                 } else {
59047                     _newNodeId = null;
59048                 }
59049
59050                 _selection
59051                     .on('mouseover.hover', mouseover)
59052                     .on('mouseout.hover', mouseout)
59053                     .on('mousedown.hover', mousedown);
59054
59055                 d3_select(window)
59056                     .on('keydown.hover', keydown)
59057                     .on('keyup.hover', keyup);
59058
59059
59060                 function mouseover() {
59061                     if (_buttonDown) { return; }
59062                     var target = event.target;
59063                     enter(target ? target.__data__ : null);
59064                 }
59065
59066
59067                 function mouseout() {
59068                     if (_buttonDown) { return; }
59069                     var target = event.relatedTarget;
59070                     enter(target ? target.__data__ : null);
59071                 }
59072
59073
59074                 function mousedown() {
59075                     _buttonDown = true;
59076                     d3_select(window)
59077                         .on('mouseup.hover', mouseup, true);
59078                 }
59079
59080
59081                 function mouseup() {
59082                     _buttonDown = false;
59083                     d3_select(window)
59084                         .on('mouseup.hover', null, true);
59085                 }
59086
59087                 function allowsVertex(d) {
59088                     return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
59089                 }
59090
59091                 function modeAllowsHover(target) {
59092                     var mode = context.mode();
59093                     if (mode.id === 'add-point') {
59094                         return mode.preset.matchGeometry('vertex') ||
59095                             (target.type !== 'way' && target.geometry(context.graph()) !== 'vertex');
59096                     }
59097                     return true;
59098                 }
59099
59100                 function enter(datum) {
59101                     if (datum === _target) { return; }
59102                     _target = datum;
59103
59104                     _selection.selectAll('.hover')
59105                         .classed('hover', false);
59106                     _selection.selectAll('.hover-suppressed')
59107                         .classed('hover-suppressed', false);
59108
59109                     // What are we hovering over?
59110                     var entity, selector;
59111                     if (datum && datum.__featurehash__) {
59112                         entity = datum;
59113                         selector = '.data' + datum.__featurehash__;
59114
59115                     } else if (datum instanceof qaError) {
59116                         entity = datum;
59117                         selector = '.' + datum.service + '.error_id-' + datum.id;
59118
59119                     } else if (datum instanceof osmNote) {
59120                         entity = datum;
59121                         selector = '.note-' + datum.id;
59122
59123                     } else if (datum instanceof osmEntity) {
59124                         entity = datum;
59125                         selector = '.' + entity.id;
59126                         if (entity.type === 'relation') {
59127                             entity.members.forEach(function(member) { selector += ', .' + member.id; });
59128                         }
59129                     } else if (datum && datum.properties && (datum.properties.entity instanceof osmEntity)) {
59130                         entity = datum.properties.entity;
59131                         selector = '.' + entity.id;
59132                         if (entity.type === 'relation') {
59133                             entity.members.forEach(function(member) { selector += ', .' + member.id; });
59134                         }
59135                     }
59136
59137                     var mode = context.mode();
59138
59139                     // Update hover state and dispatch event
59140                     if (entity && entity.id !== _newNodeId) {
59141                         // If drawing a way, don't hover on a node that was just placed. #3974
59142
59143                         if ((mode.id === 'draw-line' || mode.id === 'draw-area') && !_newNodeId && entity.type === 'node') {
59144                             _newNodeId = entity.id;
59145                             return;
59146                         }
59147
59148                         var suppressed = (_altDisables && event && event.altKey) ||
59149                             (entity.type === 'node' && _ignoreVertex && !allowsVertex(entity)) ||
59150                             !modeAllowsHover(entity);
59151                         _selection.selectAll(selector)
59152                             .classed(suppressed ? 'hover-suppressed' : 'hover', true);
59153
59154                         dispatch$1.call('hover', this, !suppressed && entity);
59155
59156                     } else {
59157                         dispatch$1.call('hover', this, null);
59158                     }
59159                 }
59160             }
59161
59162
59163             behavior.off = function(selection) {
59164                 selection.selectAll('.hover')
59165                     .classed('hover', false);
59166                 selection.selectAll('.hover-suppressed')
59167                     .classed('hover-suppressed', false);
59168                 selection
59169                     .classed('hover-disabled', false);
59170
59171                 selection
59172                     .on('mouseover.hover', null)
59173                     .on('mouseout.hover', null)
59174                     .on('mousedown.hover', null);
59175
59176                 d3_select(window)
59177                     .on('keydown.hover', null)
59178                     .on('keyup.hover', null);
59179             };
59180
59181
59182             behavior.altDisables = function(val) {
59183                 if (!arguments.length) { return _altDisables; }
59184                 _altDisables = val;
59185                 return behavior;
59186             };
59187
59188             behavior.ignoreVertex = function(val) {
59189                 if (!arguments.length) { return _ignoreVertex; }
59190                 _ignoreVertex = val;
59191                 return behavior;
59192             };
59193
59194             behavior.initialNodeID = function(nodeId) {
59195                 _initialNodeID = nodeId;
59196                 return behavior;
59197             };
59198
59199             return utilRebind(behavior, dispatch$1, 'on');
59200         }
59201
59202         function refresh(selection, node) {
59203             var cr = node.getBoundingClientRect();
59204             var prop = [cr.width, cr.height];
59205             selection.property('__dimensions__', prop);
59206             return prop;
59207         }
59208
59209         function utilGetDimensions(selection, force) {
59210             if (!selection || selection.empty()) {
59211                 return [0, 0];
59212             }
59213             var node = selection.node(),
59214                 cached = selection.property('__dimensions__');
59215             return (!cached || force) ? refresh(selection, node) : cached;
59216         }
59217
59218
59219         function utilSetDimensions(selection, dimensions) {
59220             if (!selection || selection.empty()) {
59221                 return selection;
59222             }
59223             var node = selection.node();
59224             if (dimensions === null) {
59225                 refresh(selection, node);
59226                 return selection;
59227             }
59228             return selection
59229                 .property('__dimensions__', [dimensions[0], dimensions[1]])
59230                 .attr('width', dimensions[0])
59231                 .attr('height', dimensions[1]);
59232         }
59233
59234         function behaviorTail() {
59235             var container;
59236             var xmargin = 25;
59237             var tooltipSize = [0, 0];
59238             var selectionSize = [0, 0];
59239             var _text;
59240
59241
59242             function behavior(selection) {
59243                 if (!_text) { return; }
59244
59245                 d3_select(window)
59246                     .on('resize.tail', function() { selectionSize = utilGetDimensions(selection); });
59247
59248                 container = d3_select(document.body)
59249                     .append('div')
59250                     .style('display', 'none')
59251                     .attr('class', 'tail popover-inner');
59252
59253                 container.append('div')
59254                     .text(_text);
59255
59256                 selection
59257                     .on('mousemove.tail', mousemove)
59258                     .on('mouseenter.tail', mouseenter)
59259                     .on('mouseleave.tail', mouseleave);
59260
59261                 container
59262                     .on('mousemove.tail', mousemove);
59263
59264                 tooltipSize = utilGetDimensions(container);
59265                 selectionSize = utilGetDimensions(selection);
59266
59267
59268                 function show() {
59269                     container.style('display', 'block');
59270                     tooltipSize = utilGetDimensions(container);
59271                 }
59272
59273
59274                 function mousemove() {
59275                     if (container.style('display') === 'none') { show(); }
59276                     var xoffset = ((event.clientX + tooltipSize[0] + xmargin) > selectionSize[0]) ?
59277                         -tooltipSize[0] - xmargin : xmargin;
59278                     container.classed('left', xoffset > 0);
59279                     utilSetTransform(container, event.clientX + xoffset, event.clientY);
59280                 }
59281
59282
59283                 function mouseleave() {
59284                     if (event.relatedTarget !== container.node()) {
59285                         container.style('display', 'none');
59286                     }
59287                 }
59288
59289
59290                 function mouseenter() {
59291                     if (event.relatedTarget !== container.node()) {
59292                         show();
59293                     }
59294                 }
59295             }
59296
59297
59298             behavior.off = function(selection) {
59299                 if (!_text) { return; }
59300
59301                 container
59302                     .on('mousemove.tail', null)
59303                     .remove();
59304
59305                 selection
59306                     .on('mousemove.tail', null)
59307                     .on('mouseenter.tail', null)
59308                     .on('mouseleave.tail', null);
59309
59310                 d3_select(window)
59311                     .on('resize.tail', null);
59312             };
59313
59314
59315             behavior.text = function(val) {
59316                 if (!arguments.length) { return _text; }
59317                 _text = val;
59318                 return behavior;
59319             };
59320
59321
59322             return behavior;
59323         }
59324
59325         var _usedTails = {};
59326         var _disableSpace = false;
59327         var _lastSpace = null;
59328
59329
59330         function behaviorDraw(context) {
59331             var dispatch$1 = dispatch(
59332                 'move', 'click', 'clickWay', 'clickNode', 'undo', 'cancel', 'finish'
59333             );
59334
59335             var keybinding = utilKeybinding('draw');
59336
59337             var _hover = behaviorHover(context).altDisables(true).ignoreVertex(true)
59338                 .on('hover', context.ui().sidebar.hover);
59339             var tail = behaviorTail();
59340             var edit = behaviorEdit(context);
59341
59342             var closeTolerance = 4;
59343             var tolerance = 12;
59344             var _mouseLeave = false;
59345             var _lastMouse = null;
59346
59347
59348             // related code
59349             // - `mode/drag_node.js` `datum()`
59350             function datum() {
59351                 var mode = context.mode();
59352                 var isNote = mode && (mode.id.indexOf('note') !== -1);
59353                 if (event.altKey || isNote) { return {}; }
59354
59355                 var element;
59356                 if (event.type === 'keydown') {
59357                     element = _lastMouse && _lastMouse.target;
59358                 } else {
59359                     element = event.target;
59360                 }
59361
59362                 // When drawing, snap only to touch targets..
59363                 // (this excludes area fills and active drawing elements)
59364                 var d = element.__data__;
59365                 return (d && d.properties && d.properties.target) ? d : {};
59366             }
59367
59368
59369             function mousedown() {
59370
59371                 function point() {
59372                     var p = context.container().node();
59373                     return touchId !== null ? d3_touches(p).filter(function(p) {
59374                         return p.identifier === touchId;
59375                     })[0] : d3_mouse(p);
59376                 }
59377
59378                 var element = d3_select(this);
59379                 var touchId = event.touches ? event.changedTouches[0].identifier : null;
59380                 var t1 = +new Date();
59381                 var p1 = point();
59382
59383                 element.on('mousemove.draw', null);
59384
59385                 d3_select(window).on('mouseup.draw', function() {
59386                     var t2 = +new Date();
59387                     var p2 = point();
59388                     var dist = geoVecLength(p1, p2);
59389
59390                     element.on('mousemove.draw', mousemove);
59391                     d3_select(window).on('mouseup.draw', null);
59392
59393                     if (dist < closeTolerance || (dist < tolerance && (t2 - t1) < 500)) {
59394                         // Prevent a quick second click
59395                         d3_select(window).on('click.draw-block', function() {
59396                             event.stopPropagation();
59397                         }, true);
59398
59399                         context.map().dblclickEnable(false);
59400
59401                         window.setTimeout(function() {
59402                             context.map().dblclickEnable(true);
59403                             d3_select(window).on('click.draw-block', null);
59404                         }, 500);
59405
59406                         click();
59407                     }
59408                 }, true);
59409             }
59410
59411
59412             function mousemove() {
59413                 _lastMouse = event;
59414                 dispatch$1.call('move', this, datum());
59415             }
59416
59417
59418             function mouseenter() {
59419                 _mouseLeave = false;
59420             }
59421
59422
59423             function mouseleave() {
59424                 _mouseLeave = true;
59425             }
59426
59427             function allowsVertex(d) {
59428                 return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
59429             }
59430
59431             // related code
59432             // - `mode/drag_node.js`     `doMode()`
59433             // - `behavior/draw.js`      `click()`
59434             // - `behavior/draw_way.js`  `move()`
59435             function click() {
59436                 var d = datum();
59437                 var target = d && d.properties && d.properties.entity;
59438
59439                 var mode = context.mode();
59440
59441                 if (target && target.type === 'node' && allowsVertex(target)) {   // Snap to a node
59442                     dispatch$1.call('clickNode', this, target, d);
59443                     return;
59444
59445                 } else if (target && target.type === 'way' && (mode.id !== 'add-point' || mode.preset.matchGeometry('vertex'))) {   // Snap to a way
59446                     var choice = geoChooseEdge(
59447                         context.childNodes(target), context.mouse(), context.projection, context.activeID()
59448                     );
59449                     if (choice) {
59450                         var edge = [target.nodes[choice.index - 1], target.nodes[choice.index]];
59451                         dispatch$1.call('clickWay', this, choice.loc, edge, d);
59452                         return;
59453                     }
59454                 } else if (mode.id !== 'add-point' || mode.preset.matchGeometry('point')) {
59455                     dispatch$1.call('click', this, context.map().mouseCoordinates(), d);
59456                 }
59457
59458             }
59459
59460
59461             function space() {
59462                 event.preventDefault();
59463                 event.stopPropagation();
59464
59465                 var currSpace = context.mouse();
59466                 if (_disableSpace && _lastSpace) {
59467                     var dist = geoVecLength(_lastSpace, currSpace);
59468                     if (dist > tolerance) {
59469                         _disableSpace = false;
59470                     }
59471                 }
59472
59473                 if (_disableSpace || _mouseLeave || !_lastMouse) { return; }
59474
59475                 // user must move mouse or release space bar to allow another click
59476                 _lastSpace = currSpace;
59477                 _disableSpace = true;
59478
59479                 d3_select(window).on('keyup.space-block', function() {
59480                     event.preventDefault();
59481                     event.stopPropagation();
59482                     _disableSpace = false;
59483                     d3_select(window).on('keyup.space-block', null);
59484                 });
59485
59486                 click();
59487             }
59488
59489
59490             function backspace() {
59491                 event.preventDefault();
59492                 dispatch$1.call('undo');
59493             }
59494
59495
59496             function del() {
59497                 event.preventDefault();
59498                 dispatch$1.call('cancel');
59499             }
59500
59501
59502             function ret() {
59503                 event.preventDefault();
59504                 dispatch$1.call('finish');
59505             }
59506
59507
59508             function behavior(selection) {
59509                 context.install(_hover);
59510                 context.install(edit);
59511
59512                 if (!context.inIntro() && !_usedTails[tail.text()]) {
59513                     context.install(tail);
59514                 }
59515
59516                 keybinding
59517                     .on('⌫', backspace)
59518                     .on('⌦', del)
59519                     .on('⎋', ret)
59520                     .on('↩', ret)
59521                     .on('space', space)
59522                     .on('⌥space', space);
59523
59524                 selection
59525                     .on('mouseenter.draw', mouseenter)
59526                     .on('mouseleave.draw', mouseleave)
59527                     .on('mousedown.draw', mousedown)
59528                     .on('mousemove.draw', mousemove);
59529
59530                 d3_select(document)
59531                     .call(keybinding);
59532
59533                 return behavior;
59534             }
59535
59536
59537             behavior.off = function(selection) {
59538                 context.ui().sidebar.hover.cancel();
59539                 context.uninstall(_hover);
59540                 context.uninstall(edit);
59541
59542                 if (!context.inIntro() && !_usedTails[tail.text()]) {
59543                     context.uninstall(tail);
59544                     _usedTails[tail.text()] = true;
59545                 }
59546
59547                 selection
59548                     .on('mouseenter.draw', null)
59549                     .on('mouseleave.draw', null)
59550                     .on('mousedown.draw', null)
59551                     .on('mousemove.draw', null);
59552
59553                 d3_select(window)
59554                     .on('mouseup.draw', null);
59555                     // note: keyup.space-block, click.draw-block should remain
59556
59557                 d3_select(document)
59558                     .call(keybinding.unbind);
59559             };
59560
59561
59562             behavior.tail = function(_) {
59563                 tail.text(_);
59564                 return behavior;
59565             };
59566
59567             behavior.hover = function() {
59568                 return _hover;
59569             };
59570
59571
59572             return utilRebind(behavior, dispatch$1, 'on');
59573         }
59574
59575         function behaviorBreathe() {
59576             var duration = 800;
59577             var steps = 4;
59578             var selector = '.selected.shadow, .selected .shadow';
59579             var _selected = d3_select(null);
59580             var _classed = '';
59581             var _params = {};
59582             var _done = false;
59583             var _timer;
59584
59585
59586             function ratchetyInterpolator(a, b, steps, units) {
59587                 a = parseFloat(a);
59588                 b = parseFloat(b);
59589                 var sample = quantize()
59590                     .domain([0, 1])
59591                     .range(d3_quantize(d3_interpolateNumber(a, b), steps));
59592
59593                 return function(t) {
59594                     return String(sample(t)) + (units || '');
59595                 };
59596             }
59597
59598
59599             function reset(selection) {
59600                 selection
59601                     .style('stroke-opacity', null)
59602                     .style('stroke-width', null)
59603                     .style('fill-opacity', null)
59604                     .style('r', null);
59605             }
59606
59607
59608             function setAnimationParams(transition, fromTo) {
59609                 var toFrom = (fromTo === 'from' ? 'to' : 'from');
59610
59611                 transition
59612                     .styleTween('stroke-opacity', function(d) {
59613                         return ratchetyInterpolator(
59614                             _params[d.id][toFrom].opacity,
59615                             _params[d.id][fromTo].opacity,
59616                             steps
59617                         );
59618                     })
59619                     .styleTween('stroke-width', function(d) {
59620                         return ratchetyInterpolator(
59621                             _params[d.id][toFrom].width,
59622                             _params[d.id][fromTo].width,
59623                             steps,
59624                             'px'
59625                         );
59626                     })
59627                     .styleTween('fill-opacity', function(d) {
59628                         return ratchetyInterpolator(
59629                             _params[d.id][toFrom].opacity,
59630                             _params[d.id][fromTo].opacity,
59631                             steps
59632                         );
59633                     })
59634                     .styleTween('r', function(d) {
59635                         return ratchetyInterpolator(
59636                             _params[d.id][toFrom].width,
59637                             _params[d.id][fromTo].width,
59638                             steps,
59639                             'px'
59640                         );
59641                     });
59642             }
59643
59644
59645             function calcAnimationParams(selection) {
59646                 selection
59647                     .call(reset)
59648                     .each(function(d) {
59649                         var s = d3_select(this);
59650                         var tag = s.node().tagName;
59651                         var p = {'from': {}, 'to': {}};
59652                         var opacity;
59653                         var width;
59654
59655                         // determine base opacity and width
59656                         if (tag === 'circle') {
59657                             opacity = parseFloat(s.style('fill-opacity') || 0.5);
59658                             width = parseFloat(s.style('r') || 15.5);
59659                         } else {
59660                             opacity = parseFloat(s.style('stroke-opacity') || 0.7);
59661                             width = parseFloat(s.style('stroke-width') || 10);
59662                         }
59663
59664                         // calculate from/to interpolation params..
59665                         p.tag = tag;
59666                         p.from.opacity = opacity * 0.6;
59667                         p.to.opacity = opacity * 1.25;
59668                         p.from.width = width * 0.7;
59669                         p.to.width = width * (tag === 'circle' ? 1.5 : 1);
59670                         _params[d.id] = p;
59671                     });
59672             }
59673
59674
59675             function run(surface, fromTo) {
59676                 var toFrom = (fromTo === 'from' ? 'to' : 'from');
59677                 var currSelected = surface.selectAll(selector);
59678                 var currClassed = surface.attr('class');
59679
59680                 if (_done || currSelected.empty()) {
59681                     _selected.call(reset);
59682                     _selected = d3_select(null);
59683                     return;
59684                 }
59685
59686                 if (!fastDeepEqual(currSelected.data(), _selected.data()) || currClassed !== _classed) {
59687                     _selected.call(reset);
59688                     _classed = currClassed;
59689                     _selected = currSelected.call(calcAnimationParams);
59690                 }
59691
59692                 var didCallNextRun = false;
59693
59694                 _selected
59695                     .transition()
59696                     .duration(duration)
59697                     .call(setAnimationParams, fromTo)
59698                     .on('end', function() {
59699                         // `end` event is called for each selected element, but we want
59700                         // it to run only once
59701                         if (!didCallNextRun) {
59702                             surface.call(run, toFrom);
59703                             didCallNextRun = true;
59704                         }
59705
59706                         // if entity was deselected, remove breathe styling
59707                         if (!d3_select(this).classed('selected')) {
59708                             reset(d3_select(this));
59709                         }
59710                     });
59711             }
59712
59713             function behavior(surface) {
59714                 _done = false;
59715                 _timer = timer(function() {
59716                     // wait for elements to actually become selected
59717                     if (surface.selectAll(selector).empty()) {
59718                         return false;
59719                     }
59720
59721                     surface.call(run, 'from');
59722                     _timer.stop();
59723                     return true;
59724                 }, 20);
59725             }
59726
59727             behavior.restartIfNeeded = function(surface) {
59728                 if (_selected.empty()) {
59729                     surface.call(run, 'from');
59730                     if (_timer) {
59731                         _timer.stop();
59732                     }
59733                 }
59734             };
59735
59736             behavior.off = function() {
59737                 _done = true;
59738                 if (_timer) {
59739                     _timer.stop();
59740                 }
59741                 _selected
59742                     .interrupt()
59743                     .call(reset);
59744             };
59745
59746
59747             return behavior;
59748         }
59749
59750         // Translate a MacOS key command into the appropriate Windows/Linux equivalent.
59751         // For example, ⌘Z -> Ctrl+Z
59752         var uiCmd = function (code) {
59753             var detected = utilDetect();
59754
59755             if (detected.os === 'mac') {
59756                 return code;
59757             }
59758
59759             if (detected.os === 'win') {
59760                 if (code === '⌘⇧Z') { return 'Ctrl+Y'; }
59761             }
59762
59763             var result = '',
59764                 replacements = {
59765                     '⌘': 'Ctrl',
59766                     '⇧': 'Shift',
59767                     '⌥': 'Alt',
59768                     '⌫': 'Backspace',
59769                     '⌦': 'Delete'
59770                 };
59771
59772             for (var i = 0; i < code.length; i++) {
59773                 if (code[i] in replacements) {
59774                     result += replacements[code[i]] + (i < code.length - 1 ? '+' : '');
59775                 } else {
59776                     result += code[i];
59777                 }
59778             }
59779
59780             return result;
59781         };
59782
59783
59784         // return a display-focused string for a given keyboard code
59785         uiCmd.display = function(code) {
59786             if (code.length !== 1) { return code; }
59787
59788             var detected = utilDetect();
59789             var mac = (detected.os === 'mac');
59790             var replacements = {
59791                 '⌘': mac ? '⌘ ' + t('shortcuts.key.cmd')    : t('shortcuts.key.ctrl'),
59792                 '⇧': mac ? '⇧ ' + t('shortcuts.key.shift')  : t('shortcuts.key.shift'),
59793                 '⌥': mac ? '⌥ ' + t('shortcuts.key.option') : t('shortcuts.key.alt'),
59794                 '⌃': mac ? '⌃ ' + t('shortcuts.key.ctrl')   : t('shortcuts.key.ctrl'),
59795                 '⌫': mac ? '⌫ ' + t('shortcuts.key.delete') : t('shortcuts.key.backspace'),
59796                 '⌦': mac ? '⌦ ' + t('shortcuts.key.del')    : t('shortcuts.key.del'),
59797                 '↖': mac ? '↖ ' + t('shortcuts.key.pgup')   : t('shortcuts.key.pgup'),
59798                 '↘': mac ? '↘ ' + t('shortcuts.key.pgdn')   : t('shortcuts.key.pgdn'),
59799                 '⇞': mac ? '⇞ ' + t('shortcuts.key.home')   : t('shortcuts.key.home'),
59800                 '⇟': mac ? '⇟ ' + t('shortcuts.key.end')    : t('shortcuts.key.end'),
59801                 '↵': mac ? '↵ ' + t('shortcuts.key.return') : t('shortcuts.key.enter'),
59802                 '⎋': mac ? '⎋ ' + t('shortcuts.key.esc')    : t('shortcuts.key.esc'),
59803             };
59804
59805             return replacements[code] || code;
59806         };
59807
59808         function behaviorCopy(context) {
59809
59810             function groupEntities(ids, graph) {
59811                 var entities = ids.map(function (id) { return graph.entity(id); });
59812                 return Object.assign(
59813                     { relation: [], way: [], node: [] },
59814                     utilArrayGroupBy(entities, 'type')
59815                 );
59816             }
59817
59818
59819             function getDescendants(id, graph, descendants) {
59820                 var entity = graph.entity(id);
59821                 var children;
59822
59823                 descendants = descendants || {};
59824
59825                 if (entity.type === 'relation') {
59826                     children = entity.members.map(function(m) { return m.id; });
59827                 } else if (entity.type === 'way') {
59828                     children = entity.nodes;
59829                 } else {
59830                     children = [];
59831                 }
59832
59833                 for (var i = 0; i < children.length; i++) {
59834                     if (!descendants[children[i]]) {
59835                         descendants[children[i]] = true;
59836                         descendants = getDescendants(children[i], graph, descendants);
59837                     }
59838                 }
59839
59840                 return descendants;
59841             }
59842
59843
59844             function getSelectionText() {
59845                 return window.getSelection().toString();
59846             }
59847
59848
59849             function doCopy() {
59850                 // prevent copy during low zoom selection
59851                 if (!context.map().withinEditableZoom()) { return; }
59852
59853                 if (!getSelectionText()) {
59854                     event.preventDefault();
59855                 }
59856
59857                 var graph = context.graph();
59858                 var selected = groupEntities(context.selectedIDs(), graph);
59859                 var canCopy = [];
59860                 var skip = {};
59861                 var entity;
59862                 var i;
59863
59864                 for (i = 0; i < selected.relation.length; i++) {
59865                     entity = selected.relation[i];
59866                     if (!skip[entity.id] && entity.isComplete(graph)) {
59867                         canCopy.push(entity.id);
59868                         skip = getDescendants(entity.id, graph, skip);
59869                     }
59870                 }
59871                 for (i = 0; i < selected.way.length; i++) {
59872                     entity = selected.way[i];
59873                     if (!skip[entity.id]) {
59874                         canCopy.push(entity.id);
59875                         skip = getDescendants(entity.id, graph, skip);
59876                     }
59877                 }
59878                 for (i = 0; i < selected.node.length; i++) {
59879                     entity = selected.node[i];
59880                     if (!skip[entity.id]) {
59881                         canCopy.push(entity.id);
59882                     }
59883                 }
59884
59885                 context.copyIDs(canCopy);
59886             }
59887
59888
59889             function behavior() {
59890                 context.keybinding().on(uiCmd('⌘C'), doCopy);
59891                 return behavior;
59892             }
59893
59894             behavior.off = function() {
59895                 context.keybinding().off(uiCmd('⌘C'));
59896             };
59897
59898
59899             return behavior;
59900         }
59901
59902         var _flashTimer;
59903
59904
59905         function uiFlash() {
59906             var _duration = 2000;
59907             var _iconName = '#iD-icon-no';
59908             var _iconClass = 'disabled';
59909             var _text = '';
59910             var _textClass;
59911
59912
59913             function flash() {
59914                 if (_flashTimer) {
59915                     _flashTimer.stop();
59916                 }
59917
59918                 d3_select('#footer-wrap')
59919                     .attr('class', 'footer-hide');
59920                 d3_select('#flash-wrap')
59921                     .attr('class', 'footer-show');
59922
59923                 var content = d3_select('#flash-wrap').selectAll('.flash-content')
59924                     .data([0]);
59925
59926                 // Enter
59927                 var contentEnter = content.enter()
59928                     .append('div')
59929                     .attr('class', 'flash-content');
59930
59931                 var iconEnter = contentEnter
59932                     .append('svg')
59933                     .attr('class', 'flash-icon')
59934                     .append('g')
59935                     .attr('transform', 'translate(10,10)');
59936
59937                 iconEnter
59938                     .append('circle')
59939                     .attr('r', 9);
59940
59941                 iconEnter
59942                     .append('use')
59943                     .attr('transform', 'translate(-7,-7)')
59944                     .attr('width', '14')
59945                     .attr('height', '14');
59946
59947                 contentEnter
59948                     .append('div')
59949                     .attr('class', 'flash-text');
59950
59951
59952                 // Update
59953                 content = content
59954                     .merge(contentEnter);
59955
59956                 content
59957                     .selectAll('.flash-icon')
59958                     .attr('class', 'flash-icon ' + (_iconClass || ''));
59959
59960                 content
59961                     .selectAll('.flash-icon use')
59962                     .attr('xlink:href', _iconName);
59963
59964                 content
59965                     .selectAll('.flash-text')
59966                     .attr('class', 'flash-text ' + (_textClass || ''))
59967                     .text(_text);
59968
59969
59970                 _flashTimer = d3_timeout(function() {
59971                     _flashTimer = null;
59972                     d3_select('#footer-wrap')
59973                         .attr('class', 'footer-show');
59974                     d3_select('#flash-wrap')
59975                         .attr('class', 'footer-hide');
59976                 }, _duration);
59977
59978                 return content;
59979             }
59980
59981
59982             flash.duration = function(_) {
59983                 if (!arguments.length) { return _duration; }
59984                 _duration = _;
59985                 return flash;
59986             };
59987
59988             flash.text = function(_) {
59989                 if (!arguments.length) { return _text; }
59990                 _text = _;
59991                 return flash;
59992             };
59993
59994             flash.textClass = function(_) {
59995                 if (!arguments.length) { return _textClass; }
59996                 _textClass = _;
59997                 return flash;
59998             };
59999
60000             flash.iconName = function(_) {
60001                 if (!arguments.length) { return _iconName; }
60002                 _iconName = _;
60003                 return flash;
60004             };
60005
60006             flash.iconClass = function(_) {
60007                 if (!arguments.length) { return _iconClass; }
60008                 _iconClass = _;
60009                 return flash;
60010             };
60011
60012             return flash;
60013         }
60014
60015         /* Creates a keybinding behavior for an operation */
60016         function behaviorOperation(context) {
60017             var _operation;
60018
60019             function keypress() {
60020                 // prevent operations during low zoom selection
60021                 if (!context.map().withinEditableZoom()) { return; }
60022
60023                 event.preventDefault();
60024                 var disabled = _operation.disabled();
60025                 var flash;
60026
60027                 if (disabled) {
60028                     flash = uiFlash()
60029                         .duration(4000)
60030                         .iconName('#iD-operation-' + _operation.id)
60031                         .iconClass('operation disabled')
60032                         .text(_operation.tooltip);
60033
60034                     flash();
60035
60036                 } else {
60037                     flash = uiFlash()
60038                         .duration(2000)
60039                         .iconName('#iD-operation-' + _operation.id)
60040                         .iconClass('operation')
60041                         .text(_operation.annotation() || _operation.title);
60042
60043                     flash();
60044                     _operation();
60045                 }
60046             }
60047
60048
60049             function behavior() {
60050                 if (_operation && _operation.available()) {
60051                     context.keybinding()
60052                         .on(_operation.keys, keypress);
60053                 }
60054
60055                 return behavior;
60056             }
60057
60058
60059             behavior.off = function() {
60060                 context.keybinding()
60061                     .off(_operation.keys);
60062             };
60063
60064
60065             behavior.which = function (_) {
60066                 if (!arguments.length) { return _operation; }
60067                 _operation = _;
60068                 return behavior;
60069             };
60070
60071
60072             return behavior;
60073         }
60074
60075         function operationCircularize(selectedIDs, context) {
60076             var entityID = selectedIDs[0];
60077             var entity = context.entity(entityID);
60078             var extent = entity.extent(context.graph());
60079             var geometry = context.geometry(entityID);
60080             var action = actionCircularize(entityID, context.projection);
60081             var nodes = utilGetAllNodes(selectedIDs, context.graph());
60082             var coords = nodes.map(function(n) { return n.loc; });
60083
60084             var operation = function() {
60085                 context.perform(action, operation.annotation());
60086
60087                 window.setTimeout(function() {
60088                     context.validator().validate();
60089                 }, 300);  // after any transition
60090             };
60091
60092
60093             operation.available = function() {
60094                 return selectedIDs.length === 1 &&
60095                     entity.type === 'way' &&
60096                     new Set(entity.nodes).size > 1;
60097             };
60098
60099
60100             // don't cache this because the visible extent could change
60101             operation.disabled = function() {
60102                 var actionDisabled = action.disabled(context.graph());
60103                 if (actionDisabled) {
60104                     return actionDisabled;
60105                 } else if (extent.percentContainedIn(context.extent()) < 0.8) {
60106                     return 'too_large';
60107                 } else if (someMissing()) {
60108                     return 'not_downloaded';
60109                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
60110                     return 'connected_to_hidden';
60111                 }
60112
60113                 return false;
60114
60115
60116                 function someMissing() {
60117                     if (context.inIntro()) { return false; }
60118                     var osm = context.connection();
60119                     if (osm) {
60120                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
60121                         if (missing.length) {
60122                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
60123                             return true;
60124                         }
60125                     }
60126                     return false;
60127                 }
60128             };
60129
60130
60131             operation.tooltip = function() {
60132                 var disable = operation.disabled();
60133                 return disable ?
60134                     t('operations.circularize.' + disable) :
60135                     t('operations.circularize.description.' + geometry);
60136             };
60137
60138
60139             operation.annotation = function() {
60140                 return t('operations.circularize.annotation.' + geometry);
60141             };
60142
60143
60144             operation.id = 'circularize';
60145             operation.keys = [t('operations.circularize.key')];
60146             operation.title = t('operations.circularize.title');
60147             operation.behavior = behaviorOperation(context).which(operation);
60148
60149             return operation;
60150         }
60151
60152         function operationDelete(selectedIDs, context) {
60153             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
60154             var action = actionDeleteMultiple(selectedIDs);
60155             var nodes = utilGetAllNodes(selectedIDs, context.graph());
60156             var coords = nodes.map(function(n) { return n.loc; });
60157             var extent = nodes.reduce(function(extent, node) {
60158                 return extent.extend(node.extent(context.graph()));
60159             }, geoExtent());
60160
60161
60162             var operation = function() {
60163                 var nextSelectedID;
60164                 var nextSelectedLoc;
60165
60166                 if (selectedIDs.length === 1) {
60167                     var id = selectedIDs[0];
60168                     var entity = context.entity(id);
60169                     var geometry = context.geometry(id);
60170                     var parents = context.graph().parentWays(entity);
60171                     var parent = parents[0];
60172
60173                     // Select the next closest node in the way.
60174                     if (geometry === 'vertex') {
60175                         var nodes = parent.nodes;
60176                         var i = nodes.indexOf(id);
60177
60178                         if (i === 0) {
60179                             i++;
60180                         } else if (i === nodes.length - 1) {
60181                             i--;
60182                         } else {
60183                             var a = geoSphericalDistance(entity.loc, context.entity(nodes[i - 1]).loc);
60184                             var b = geoSphericalDistance(entity.loc, context.entity(nodes[i + 1]).loc);
60185                             i = a < b ? i - 1 : i + 1;
60186                         }
60187
60188                         nextSelectedID = nodes[i];
60189                         nextSelectedLoc = context.entity(nextSelectedID).loc;
60190                     }
60191                 }
60192
60193                 context.perform(action, operation.annotation());
60194                 context.validator().validate();
60195
60196                 if (nextSelectedID && nextSelectedLoc) {
60197                     if (context.hasEntity(nextSelectedID)) {
60198                         context.enter(modeSelect(context, [nextSelectedID]).follow(true));
60199                     } else {
60200                         context.map().centerEase(nextSelectedLoc);
60201                         context.enter(modeBrowse(context));
60202                     }
60203                 } else {
60204                     context.enter(modeBrowse(context));
60205                 }
60206
60207             };
60208
60209
60210             operation.available = function() {
60211                 return true;
60212             };
60213
60214
60215             operation.disabled = function() {
60216                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
60217                     return 'too_large';
60218                 } else if (someMissing()) {
60219                     return 'not_downloaded';
60220                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
60221                     return 'connected_to_hidden';
60222                 } else if (selectedIDs.some(protectedMember)) {
60223                     return 'part_of_relation';
60224                 } else if (selectedIDs.some(incompleteRelation)) {
60225                     return 'incomplete_relation';
60226                 } else if (selectedIDs.some(hasWikidataTag)) {
60227                     return 'has_wikidata_tag';
60228                 }
60229
60230                 return false;
60231
60232
60233                 function someMissing() {
60234                     if (context.inIntro()) { return false; }
60235                     var osm = context.connection();
60236                     if (osm) {
60237                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
60238                         if (missing.length) {
60239                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
60240                             return true;
60241                         }
60242                     }
60243                     return false;
60244                 }
60245
60246                 function hasWikidataTag(id) {
60247                     var entity = context.entity(id);
60248                     return entity.tags.wikidata && entity.tags.wikidata.trim().length > 0;
60249                 }
60250
60251                 function incompleteRelation(id) {
60252                     var entity = context.entity(id);
60253                     return entity.type === 'relation' && !entity.isComplete(context.graph());
60254                 }
60255
60256                 function protectedMember(id) {
60257                     var entity = context.entity(id);
60258                     if (entity.type !== 'way') { return false; }
60259
60260                     var parents = context.graph().parentRelations(entity);
60261                     for (var i = 0; i < parents.length; i++) {
60262                         var parent = parents[i];
60263                         var type = parent.tags.type;
60264                         var role = parent.memberById(id).role || 'outer';
60265                         if (type === 'route' || type === 'boundary' || (type === 'multipolygon' && role === 'outer')) {
60266                             return true;
60267                         }
60268                     }
60269                     return false;
60270                 }
60271             };
60272
60273
60274             operation.tooltip = function() {
60275                 var disable = operation.disabled();
60276                 return disable ?
60277                     t('operations.delete.' + disable + '.' + multi) :
60278                     t('operations.delete.description' + '.' + multi);
60279             };
60280
60281
60282             operation.annotation = function() {
60283                 return selectedIDs.length === 1 ?
60284                     t('operations.delete.annotation.' + context.geometry(selectedIDs[0])) :
60285                     t('operations.delete.annotation.multiple', { n: selectedIDs.length });
60286             };
60287
60288
60289             operation.id = 'delete';
60290             operation.keys = [uiCmd('⌘⌫'), uiCmd('⌘⌦'), uiCmd('⌦')];
60291             operation.title = t('operations.delete.title');
60292             operation.behavior = behaviorOperation(context).which(operation);
60293
60294             return operation;
60295         }
60296
60297         function operationOrthogonalize(selectedIDs, context) {
60298             var _extent;
60299             var type;
60300             var actions = selectedIDs.map(chooseAction).filter(Boolean);
60301             var amount = actions.length === 1 ? 'single' : 'multiple';
60302             var nodes = utilGetAllNodes(selectedIDs, context.graph());
60303             var coords = nodes.map(function(n) { return n.loc; });
60304
60305
60306             function chooseAction(entityID) {
60307
60308                 var entity = context.entity(entityID);
60309                 var geometry = context.geometry(entityID);
60310
60311                 if (!_extent) {
60312                     _extent =  entity.extent(context.graph());
60313                 } else {
60314                     _extent = _extent.extend(entity.extent(context.graph()));
60315                 }
60316
60317                 // square a line/area
60318                 if (entity.type === 'way' && new Set(entity.nodes).size > 2 ) {
60319                     if (type && type !== 'feature') { return null; }
60320                     type = 'feature';
60321                     return actionOrthogonalize(entityID, context.projection);
60322
60323                 // square a single vertex
60324                 } else if (geometry === 'vertex') {
60325                     if (type && type !== 'corner') { return null; }
60326                     type = 'corner';
60327                     var graph = context.graph();
60328                     var parents = graph.parentWays(entity);
60329                     if (parents.length === 1) {
60330                         var way = parents[0];
60331                         if (way.nodes.indexOf(entityID) !== -1) {
60332                             return actionOrthogonalize(way.id, context.projection, entityID);
60333                         }
60334                     }
60335                 }
60336
60337                 return null;
60338             }
60339
60340
60341             var operation = function() {
60342                 if (!actions.length) { return; }
60343
60344                 var combinedAction = function(graph, t) {
60345                     actions.forEach(function(action) {
60346                         if (!action.disabled(graph)) {
60347                             graph = action(graph, t);
60348                         }
60349                     });
60350                     return graph;
60351                 };
60352                 combinedAction.transitionable = true;
60353
60354                 context.perform(combinedAction, operation.annotation());
60355
60356                 window.setTimeout(function() {
60357                     context.validator().validate();
60358                 }, 300);  // after any transition
60359             };
60360
60361
60362             operation.available = function() {
60363                 return actions.length && selectedIDs.length === actions.length;
60364             };
60365
60366
60367             // don't cache this because the visible extent could change
60368             operation.disabled = function() {
60369                 if (!actions.length) { return ''; }
60370
60371                 var actionDisabled;
60372
60373                 var actionDisableds = {};
60374
60375                 if (actions.every(function(action) {
60376                     var disabled = action.disabled(context.graph());
60377                     if (disabled) { actionDisableds[disabled] = true; }
60378                     return disabled;
60379                 })) {
60380                     actionDisabled = actions[0].disabled(context.graph());
60381                 }
60382
60383                 if (actionDisabled) {
60384                     if (Object.keys(actionDisableds).length > 1) {
60385                         return 'multiple_blockers';
60386                     }
60387                     return actionDisabled;
60388                 } else if (type !== 'corner' &&
60389                            _extent.percentContainedIn(context.extent()) < 0.8) {
60390                     return 'too_large';
60391                 } else if (someMissing()) {
60392                     return 'not_downloaded';
60393                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
60394                     return 'connected_to_hidden';
60395                 }
60396
60397                 return false;
60398
60399
60400                 function someMissing() {
60401                     if (context.inIntro()) { return false; }
60402                     var osm = context.connection();
60403                     if (osm) {
60404                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
60405                         if (missing.length) {
60406                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
60407                             return true;
60408                         }
60409                     }
60410                     return false;
60411                 }
60412             };
60413
60414
60415             operation.tooltip = function() {
60416                 var disable = operation.disabled();
60417                 return disable ?
60418                     t('operations.orthogonalize.' + disable + '.' + amount) :
60419                     t('operations.orthogonalize.description.' + type + '.' + amount);
60420             };
60421
60422
60423             operation.annotation = function() {
60424                 return t('operations.orthogonalize.annotation.' + type + '.' + amount);
60425             };
60426
60427
60428             operation.id = 'orthogonalize';
60429             operation.keys = [t('operations.orthogonalize.key')];
60430             operation.title = t('operations.orthogonalize.title');
60431             operation.behavior = behaviorOperation(context).which(operation);
60432
60433             return operation;
60434         }
60435
60436         function operationReflectShort(selectedIDs, context) {
60437             return operationReflect(selectedIDs, context, 'short');
60438         }
60439
60440
60441         function operationReflectLong(selectedIDs, context) {
60442             return operationReflect(selectedIDs, context, 'long');
60443         }
60444
60445
60446         function operationReflect(selectedIDs, context, axis) {
60447             axis = axis || 'long';
60448             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
60449             var nodes = utilGetAllNodes(selectedIDs, context.graph());
60450             var coords = nodes.map(function(n) { return n.loc; });
60451             var extent = nodes.reduce(function(extent, node) {
60452                 return extent.extend(node.extent(context.graph()));
60453             }, geoExtent());
60454
60455
60456             var operation = function() {
60457                 var action = actionReflect(selectedIDs, context.projection)
60458                     .useLongAxis(Boolean(axis === 'long'));
60459
60460                 context.perform(action, operation.annotation());
60461
60462                 window.setTimeout(function() {
60463                     context.validator().validate();
60464                 }, 300);  // after any transition
60465             };
60466
60467
60468             operation.available = function() {
60469                 return nodes.length >= 3;
60470             };
60471
60472
60473             // don't cache this because the visible extent could change
60474             operation.disabled = function() {
60475                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
60476                     return 'too_large';
60477                 } else if (someMissing()) {
60478                     return 'not_downloaded';
60479                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
60480                     return 'connected_to_hidden';
60481                 } else if (selectedIDs.some(incompleteRelation)) {
60482                     return 'incomplete_relation';
60483                 }
60484
60485                 return false;
60486
60487
60488                 function someMissing() {
60489                     if (context.inIntro()) { return false; }
60490                     var osm = context.connection();
60491                     if (osm) {
60492                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
60493                         if (missing.length) {
60494                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
60495                             return true;
60496                         }
60497                     }
60498                     return false;
60499                 }
60500
60501                 function incompleteRelation(id) {
60502                     var entity = context.entity(id);
60503                     return entity.type === 'relation' && !entity.isComplete(context.graph());
60504                 }
60505             };
60506
60507
60508             operation.tooltip = function() {
60509                 var disable = operation.disabled();
60510                 return disable ?
60511                     t('operations.reflect.' + disable + '.' + multi) :
60512                     t('operations.reflect.description.' + axis + '.' + multi);
60513             };
60514
60515
60516             operation.annotation = function() {
60517                 return t('operations.reflect.annotation.' + axis + '.' + multi);
60518             };
60519
60520
60521             operation.id = 'reflect-' + axis;
60522             operation.keys = [t('operations.reflect.key.' + axis)];
60523             operation.title = t('operations.reflect.title.' + axis);
60524             operation.behavior = behaviorOperation(context).which(operation);
60525
60526             return operation;
60527         }
60528
60529         function operationMove(selectedIDs, context) {
60530             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
60531             var nodes = utilGetAllNodes(selectedIDs, context.graph());
60532             var coords = nodes.map(function(n) { return n.loc; });
60533             var extent = nodes.reduce(function(extent, node) {
60534                 return extent.extend(node.extent(context.graph()));
60535             }, geoExtent());
60536
60537
60538             var operation = function() {
60539                 context.enter(modeMove(context, selectedIDs));
60540             };
60541
60542
60543             operation.available = function() {
60544                 return selectedIDs.length > 1 ||
60545                     context.entity(selectedIDs[0]).type !== 'node';
60546             };
60547
60548
60549             operation.disabled = function() {
60550                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
60551                     return 'too_large';
60552                 } else if (someMissing()) {
60553                     return 'not_downloaded';
60554                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
60555                     return 'connected_to_hidden';
60556                 } else if (selectedIDs.some(incompleteRelation)) {
60557                     return 'incomplete_relation';
60558                 }
60559
60560                 return false;
60561
60562
60563                 function someMissing() {
60564                     if (context.inIntro()) { return false; }
60565                     var osm = context.connection();
60566                     if (osm) {
60567                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
60568                         if (missing.length) {
60569                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
60570                             return true;
60571                         }
60572                     }
60573                     return false;
60574                 }
60575
60576                 function incompleteRelation(id) {
60577                     var entity = context.entity(id);
60578                     return entity.type === 'relation' && !entity.isComplete(context.graph());
60579                 }
60580             };
60581
60582
60583             operation.tooltip = function() {
60584                 var disable = operation.disabled();
60585                 return disable ?
60586                     t('operations.move.' + disable + '.' + multi) :
60587                     t('operations.move.description.' + multi);
60588             };
60589
60590
60591             operation.annotation = function() {
60592                 return selectedIDs.length === 1 ?
60593                     t('operations.move.annotation.' + context.geometry(selectedIDs[0])) :
60594                     t('operations.move.annotation.multiple');
60595             };
60596
60597
60598             operation.id = 'move';
60599             operation.keys = [t('operations.move.key')];
60600             operation.title = t('operations.move.title');
60601             operation.behavior = behaviorOperation(context).which(operation);
60602
60603             return operation;
60604         }
60605
60606         function modeRotate(context, entityIDs) {
60607             var mode = {
60608                 id: 'rotate',
60609                 button: 'browse'
60610             };
60611
60612             var keybinding = utilKeybinding('rotate');
60613             var behaviors = [
60614                 behaviorEdit(context),
60615                 operationCircularize(entityIDs, context).behavior,
60616                 operationDelete(entityIDs, context).behavior,
60617                 operationMove(entityIDs, context).behavior,
60618                 operationOrthogonalize(entityIDs, context).behavior,
60619                 operationReflectLong(entityIDs, context).behavior,
60620                 operationReflectShort(entityIDs, context).behavior
60621             ];
60622             var annotation = entityIDs.length === 1 ?
60623                 t('operations.rotate.annotation.' + context.geometry(entityIDs[0])) :
60624                 t('operations.rotate.annotation.multiple');
60625
60626             var _prevGraph;
60627             var _prevAngle;
60628             var _prevTransform;
60629             var _pivot;
60630
60631
60632             function doRotate() {
60633                 var fn;
60634                 if (context.graph() !== _prevGraph) {
60635                     fn = context.perform;
60636                 } else {
60637                     fn = context.replace;
60638                 }
60639
60640                 // projection changed, recalculate _pivot
60641                 var projection = context.projection;
60642                 var currTransform = projection.transform();
60643                 if (!_prevTransform ||
60644                     currTransform.k !== _prevTransform.k ||
60645                     currTransform.x !== _prevTransform.x ||
60646                     currTransform.y !== _prevTransform.y) {
60647
60648                     var nodes = utilGetAllNodes(entityIDs, context.graph());
60649                     var points = nodes.map(function(n) { return projection(n.loc); });
60650                     _pivot = getPivot(points);
60651                     _prevAngle = undefined;
60652                 }
60653
60654
60655                 var currMouse = context.mouse();
60656                 var currAngle = Math.atan2(currMouse[1] - _pivot[1], currMouse[0] - _pivot[0]);
60657
60658                 if (typeof _prevAngle === 'undefined') { _prevAngle = currAngle; }
60659                 var delta = currAngle - _prevAngle;
60660
60661                 fn(actionRotate(entityIDs, _pivot, delta, projection));
60662
60663                 _prevTransform = currTransform;
60664                 _prevAngle = currAngle;
60665                 _prevGraph = context.graph();
60666             }
60667
60668             function getPivot(points) {
60669                 var _pivot;
60670                 if (points.length === 1) {
60671                     _pivot = points[0];
60672                 } else if (points.length === 2) {
60673                     _pivot = geoVecInterp(points[0], points[1], 0.5);
60674                 } else {
60675                     var polygonHull = d3_polygonHull(points);
60676                     if (polygonHull.length === 2) {
60677                         _pivot = geoVecInterp(points[0], points[1], 0.5);
60678                     } else {
60679                         _pivot = d3_polygonCentroid(d3_polygonHull(points));
60680                     }
60681                 }
60682                 return _pivot;
60683             }
60684
60685
60686             function finish() {
60687                 event.stopPropagation();
60688                 context.replace(actionNoop(), annotation);
60689                 context.enter(modeSelect(context, entityIDs));
60690             }
60691
60692
60693             function cancel() {
60694                 context.pop();
60695                 context.enter(modeSelect(context, entityIDs));
60696             }
60697
60698
60699             function undone() {
60700                 context.enter(modeBrowse(context));
60701             }
60702
60703
60704             mode.enter = function() {
60705                 context.features().forceVisible(entityIDs);
60706
60707                 behaviors.forEach(context.install);
60708
60709                 context.surface()
60710                     .on('mousemove.rotate', doRotate)
60711                     .on('click.rotate', finish);
60712
60713                 context.history()
60714                     .on('undone.rotate', undone);
60715
60716                 keybinding
60717                     .on('⎋', cancel)
60718                     .on('↩', finish);
60719
60720                 d3_select(document)
60721                     .call(keybinding);
60722             };
60723
60724
60725             mode.exit = function() {
60726                 behaviors.forEach(context.uninstall);
60727
60728                 context.surface()
60729                     .on('mousemove.rotate', null)
60730                     .on('click.rotate', null);
60731
60732                 context.history()
60733                     .on('undone.rotate', null);
60734
60735                 d3_select(document)
60736                     .call(keybinding.unbind);
60737
60738                 context.features().forceVisible([]);
60739             };
60740
60741
60742             mode.selectedIDs = function() {
60743                 if (!arguments.length) { return entityIDs; }
60744                 // no assign
60745                 return mode;
60746             };
60747
60748
60749             return mode;
60750         }
60751
60752         function operationRotate(selectedIDs, context) {
60753             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
60754             var nodes = utilGetAllNodes(selectedIDs, context.graph());
60755             var coords = nodes.map(function(n) { return n.loc; });
60756             var extent = nodes.reduce(function(extent, node) {
60757                 return extent.extend(node.extent(context.graph()));
60758             }, geoExtent());
60759
60760
60761             var operation = function() {
60762                 context.enter(modeRotate(context, selectedIDs));
60763             };
60764
60765
60766             operation.available = function() {
60767                 return nodes.length >= 2;
60768             };
60769
60770
60771             operation.disabled = function() {
60772
60773                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
60774                     return 'too_large';
60775                 } else if (someMissing()) {
60776                     return 'not_downloaded';
60777                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
60778                     return 'connected_to_hidden';
60779                 } else if (selectedIDs.some(incompleteRelation)) {
60780                     return 'incomplete_relation';
60781                 }
60782
60783                 return false;
60784
60785
60786                 function someMissing() {
60787                     if (context.inIntro()) { return false; }
60788                     var osm = context.connection();
60789                     if (osm) {
60790                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
60791                         if (missing.length) {
60792                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
60793                             return true;
60794                         }
60795                     }
60796                     return false;
60797                 }
60798
60799                 function incompleteRelation(id) {
60800                     var entity = context.entity(id);
60801                     return entity.type === 'relation' && !entity.isComplete(context.graph());
60802                 }
60803             };
60804
60805
60806             operation.tooltip = function() {
60807                 var disable = operation.disabled();
60808                 return disable ?
60809                     t('operations.rotate.' + disable + '.' + multi) :
60810                     t('operations.rotate.description.' + multi);
60811             };
60812
60813
60814             operation.annotation = function() {
60815                 return selectedIDs.length === 1 ?
60816                     t('operations.rotate.annotation.' + context.geometry(selectedIDs[0])) :
60817                     t('operations.rotate.annotation.multiple');
60818             };
60819
60820
60821             operation.id = 'rotate';
60822             operation.keys = [t('operations.rotate.key')];
60823             operation.title = t('operations.rotate.title');
60824             operation.behavior = behaviorOperation(context).which(operation);
60825
60826             return operation;
60827         }
60828
60829         function modeMove(context, entityIDs, baseGraph) {
60830             var mode = {
60831                 id: 'move',
60832                 button: 'browse'
60833             };
60834
60835             var keybinding = utilKeybinding('move');
60836             var behaviors = [
60837                 behaviorEdit(context),
60838                 operationCircularize(entityIDs, context).behavior,
60839                 operationDelete(entityIDs, context).behavior,
60840                 operationOrthogonalize(entityIDs, context).behavior,
60841                 operationReflectLong(entityIDs, context).behavior,
60842                 operationReflectShort(entityIDs, context).behavior,
60843                 operationRotate(entityIDs, context).behavior
60844             ];
60845             var annotation = entityIDs.length === 1 ?
60846                 t('operations.move.annotation.' + context.geometry(entityIDs[0])) :
60847                 t('operations.move.annotation.multiple');
60848
60849             var _prevGraph;
60850             var _cache;
60851             var _origin;
60852             var _nudgeInterval;
60853
60854
60855             function doMove(nudge) {
60856                 nudge = nudge || [0, 0];
60857
60858                 var fn;
60859                 if (_prevGraph !== context.graph()) {
60860                     _cache = {};
60861                     _origin = context.map().mouseCoordinates();
60862                     fn = context.perform;
60863                 } else {
60864                     fn = context.overwrite;
60865                 }
60866
60867                 var currMouse = context.mouse();
60868                 var origMouse = context.projection(_origin);
60869                 var delta = geoVecSubtract(geoVecSubtract(currMouse, origMouse), nudge);
60870
60871                 fn(actionMove(entityIDs, delta, context.projection, _cache));
60872                 _prevGraph = context.graph();
60873             }
60874
60875
60876             function startNudge(nudge) {
60877                 if (_nudgeInterval) { window.clearInterval(_nudgeInterval); }
60878                 _nudgeInterval = window.setInterval(function() {
60879                     context.pan(nudge);
60880                     doMove(nudge);
60881                 }, 50);
60882             }
60883
60884
60885             function stopNudge() {
60886                 if (_nudgeInterval) {
60887                     window.clearInterval(_nudgeInterval);
60888                     _nudgeInterval = null;
60889                 }
60890             }
60891
60892
60893             function move() {
60894                 doMove();
60895                 var nudge = geoViewportEdge(context.mouse(), context.map().dimensions());
60896                 if (nudge) {
60897                     startNudge(nudge);
60898                 } else {
60899                     stopNudge();
60900                 }
60901             }
60902
60903
60904             function finish() {
60905                 event.stopPropagation();
60906                 context.replace(actionNoop(), annotation);
60907                 context.enter(modeSelect(context, entityIDs));
60908                 stopNudge();
60909             }
60910
60911
60912             function cancel() {
60913                 if (baseGraph) {
60914                     while (context.graph() !== baseGraph) { context.pop(); }
60915                     context.enter(modeBrowse(context));
60916                 } else {
60917                     context.pop();
60918                     context.enter(modeSelect(context, entityIDs));
60919                 }
60920                 stopNudge();
60921             }
60922
60923
60924             function undone() {
60925                 context.enter(modeBrowse(context));
60926             }
60927
60928
60929             mode.enter = function() {
60930                 _origin = context.map().mouseCoordinates();
60931                 _prevGraph = null;
60932                 _cache = {};
60933
60934                 context.features().forceVisible(entityIDs);
60935
60936                 behaviors.forEach(context.install);
60937
60938                 context.surface()
60939                     .on('mousemove.move', move)
60940                     .on('click.move', finish);
60941
60942                 context.history()
60943                     .on('undone.move', undone);
60944
60945                 keybinding
60946                     .on('⎋', cancel)
60947                     .on('↩', finish);
60948
60949                 d3_select(document)
60950                     .call(keybinding);
60951             };
60952
60953
60954             mode.exit = function() {
60955                 stopNudge();
60956
60957                 behaviors.forEach(function(behavior) {
60958                     context.uninstall(behavior);
60959                 });
60960
60961                 context.surface()
60962                     .on('mousemove.move', null)
60963                     .on('click.move', null);
60964
60965                 context.history()
60966                     .on('undone.move', null);
60967
60968                 d3_select(document)
60969                     .call(keybinding.unbind);
60970
60971                 context.features().forceVisible([]);
60972             };
60973
60974
60975             mode.selectedIDs = function() {
60976                 if (!arguments.length) { return entityIDs; }
60977                 // no assign
60978                 return mode;
60979             };
60980
60981
60982             return mode;
60983         }
60984
60985         function behaviorPaste(context) {
60986
60987             function doPaste() {
60988                 // prevent paste during low zoom selection
60989                 if (!context.map().withinEditableZoom()) { return; }
60990
60991                 event.preventDefault();
60992
60993                 var baseGraph = context.graph();
60994                 var mouse = context.mouse();
60995                 var projection = context.projection;
60996                 var viewport = geoExtent(projection.clipExtent()).polygon();
60997
60998                 if (!geoPointInPolygon(mouse, viewport)) { return; }
60999
61000                 var extent = geoExtent();
61001                 var oldIDs = context.copyIDs();
61002                 var oldGraph = context.copyGraph();
61003                 var newIDs = [];
61004
61005                 if (!oldIDs.length) { return; }
61006
61007                 var action = actionCopyEntities(oldIDs, oldGraph);
61008                 context.perform(action);
61009
61010                 var copies = action.copies();
61011                 var originals = new Set();
61012                 Object.values(copies).forEach(function(entity) { originals.add(entity.id); });
61013
61014                 for (var id in copies) {
61015                     var oldEntity = oldGraph.entity(id);
61016                     var newEntity = copies[id];
61017
61018                     extent._extend(oldEntity.extent(oldGraph));
61019
61020                     // Exclude child nodes from newIDs if their parent way was also copied.
61021                     var parents = context.graph().parentWays(newEntity);
61022                     var parentCopied = parents.some(function(parent) {
61023                         return originals.has(parent.id);
61024                     });
61025
61026                     if (!parentCopied) {
61027                         newIDs.push(newEntity.id);
61028                     }
61029                 }
61030
61031                 // Put pasted objects where mouse pointer is..
61032                 var center = projection(extent.center());
61033                 var delta = geoVecSubtract(mouse, center);
61034
61035                 context.perform(actionMove(newIDs, delta, projection));
61036                 context.enter(modeMove(context, newIDs, baseGraph));
61037             }
61038
61039
61040             function behavior() {
61041                 context.keybinding().on(uiCmd('⌘V'), doPaste);
61042                 return behavior;
61043             }
61044
61045
61046             behavior.off = function() {
61047                 context.keybinding().off(uiCmd('⌘V'));
61048             };
61049
61050
61051             return behavior;
61052         }
61053
61054         /*
61055             `behaviorDrag` is like `d3_behavior.drag`, with the following differences:
61056
61057             * The `origin` function is expected to return an [x, y] tuple rather than an
61058               {x, y} object.
61059             * The events are `start`, `move`, and `end`.
61060               (https://github.com/mbostock/d3/issues/563)
61061             * The `start` event is not dispatched until the first cursor movement occurs.
61062               (https://github.com/mbostock/d3/pull/368)
61063             * The `move` event has a `point` and `delta` [x, y] tuple properties rather
61064               than `x`, `y`, `dx`, and `dy` properties.
61065             * The `end` event is not dispatched if no movement occurs.
61066             * An `off` function is available that unbinds the drag's internal event handlers.
61067          */
61068
61069         function behaviorDrag() {
61070             var dispatch$1 = dispatch('start', 'move', 'end');
61071             var _origin = null;
61072             var _selector = '';
61073             var _event;
61074             var _target;
61075             var _surface;
61076
61077
61078             var d3_event_userSelectProperty = utilPrefixCSSProperty('UserSelect');
61079             var d3_event_userSelectSuppress = function() {
61080                     var selection$1 = selection();
61081                     var select = selection$1.style(d3_event_userSelectProperty);
61082                     selection$1.style(d3_event_userSelectProperty, 'none');
61083                     return function() {
61084                         selection$1.style(d3_event_userSelectProperty, select);
61085                     };
61086                 };
61087
61088
61089             function d3_eventCancel() {
61090                 event.stopPropagation();
61091                 event.preventDefault();
61092             }
61093
61094
61095             function eventOf(thiz, argumentz) {
61096                 return function(e1) {
61097                     e1.target = behavior;
61098                     customEvent(e1, dispatch$1.apply, dispatch$1, [e1.type, thiz, argumentz]);
61099                 };
61100             }
61101
61102
61103             function dragstart() {
61104                 _target = this;
61105                 _event = eventOf(_target, arguments);
61106
61107                 var eventTarget = event.target;
61108                 var touchId = event.touches ? event.changedTouches[0].identifier : null;
61109                 var offset;
61110                 var startOrigin = point();
61111                 var started = false;
61112                 var selectEnable = d3_event_userSelectSuppress();
61113
61114                 d3_select(window)
61115                     .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', dragmove)
61116                     .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', dragend, true);
61117
61118                 if (_origin) {
61119                     offset = _origin.apply(_target, arguments);
61120                     offset = [offset[0] - startOrigin[0], offset[1] - startOrigin[1]];
61121                 } else {
61122                     offset = [0, 0];
61123                 }
61124
61125                 if (touchId === null) {
61126                     event.stopPropagation();
61127                 }
61128
61129
61130                 function point() {
61131                     var p = _surface || _target.parentNode;
61132                     return touchId !== null ? d3_touches(p).filter(function(p) {
61133                         return p.identifier === touchId;
61134                     })[0] : d3_mouse(p);
61135                 }
61136
61137
61138                 function dragmove() {
61139                     var p = point();
61140                     var dx = p[0] - startOrigin[0];
61141                     var dy = p[1] - startOrigin[1];
61142
61143                     if (dx === 0 && dy === 0)
61144                         { return; }
61145
61146                     startOrigin = p;
61147                     d3_eventCancel();
61148
61149                     if (!started) {
61150                         started = true;
61151                         _event({ type: 'start' });
61152                     } else {
61153                         _event({
61154                             type: 'move',
61155                             point: [p[0] + offset[0],  p[1] + offset[1]],
61156                             delta: [dx, dy]
61157                         });
61158                     }
61159                 }
61160
61161
61162                 function dragend() {
61163                     if (started) {
61164                         _event({ type: 'end' });
61165
61166                         d3_eventCancel();
61167                         if (event.target === eventTarget) {
61168                             d3_select(window)
61169                                 .on('click.drag', click, true);
61170                         }
61171                     }
61172
61173                     d3_select(window)
61174                         .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', null)
61175                         .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', null);
61176
61177                     selectEnable();
61178                 }
61179
61180
61181                 function click() {
61182                     d3_eventCancel();
61183                     d3_select(window)
61184                         .on('click.drag', null);
61185                 }
61186             }
61187
61188
61189             function behavior(selection) {
61190                 var matchesSelector = utilPrefixDOMProperty('matchesSelector');
61191                 var delegate = dragstart;
61192
61193                 if (_selector) {
61194                     delegate = function() {
61195                         var root = this;
61196                         var target = event.target;
61197                         for (; target && target !== root; target = target.parentNode) {
61198                             var datum = target.__data__;
61199
61200                             var entity = datum instanceof osmNote ? datum
61201                                 : datum && datum.properties && datum.properties.entity;
61202
61203                             if (entity && target[matchesSelector](_selector)) {
61204                                 return dragstart.call(target, entity);
61205                             }
61206                         }
61207                     };
61208                 }
61209
61210                 selection
61211                     .on('mousedown.drag' + _selector, delegate)
61212                     .on('touchstart.drag' + _selector, delegate);
61213             }
61214
61215
61216             behavior.off = function(selection) {
61217                 selection
61218                     .on('mousedown.drag' + _selector, null)
61219                     .on('touchstart.drag' + _selector, null);
61220             };
61221
61222
61223             behavior.selector = function(_) {
61224                 if (!arguments.length) { return _selector; }
61225                 _selector = _;
61226                 return behavior;
61227             };
61228
61229
61230             behavior.origin = function(_) {
61231                 if (!arguments.length) { return _origin; }
61232                 _origin = _;
61233                 return behavior;
61234             };
61235
61236
61237             behavior.cancel = function() {
61238                 d3_select(window)
61239                     .on('mousemove.drag', null)
61240                     .on('mouseup.drag', null);
61241                 return behavior;
61242             };
61243
61244
61245             behavior.target = function() {
61246                 if (!arguments.length) { return _target; }
61247                 _target = arguments[0];
61248                 _event = eventOf(_target, Array.prototype.slice.call(arguments, 1));
61249                 return behavior;
61250             };
61251
61252
61253             behavior.surface = function() {
61254                 if (!arguments.length) { return _surface; }
61255                 _surface = arguments[0];
61256                 return behavior;
61257             };
61258
61259
61260             return utilRebind(behavior, dispatch$1, 'on');
61261         }
61262
61263         function modeDragNode(context) {
61264             var mode = {
61265                 id: 'drag-node',
61266                 button: 'browse'
61267             };
61268             var hover = behaviorHover(context).altDisables(true)
61269                 .on('hover', context.ui().sidebar.hover);
61270             var edit = behaviorEdit(context);
61271
61272             var _nudgeInterval;
61273             var _restoreSelectedIDs = [];
61274             var _wasMidpoint = false;
61275             var _isCancelled = false;
61276             var _activeEntity;
61277             var _startLoc;
61278             var _lastLoc;
61279
61280
61281             function startNudge(entity, nudge) {
61282                 if (_nudgeInterval) { window.clearInterval(_nudgeInterval); }
61283                 _nudgeInterval = window.setInterval(function() {
61284                     context.pan(nudge);
61285                     doMove(entity, nudge);
61286                 }, 50);
61287             }
61288
61289
61290             function stopNudge() {
61291                 if (_nudgeInterval) {
61292                     window.clearInterval(_nudgeInterval);
61293                     _nudgeInterval = null;
61294                 }
61295             }
61296
61297
61298             function moveAnnotation(entity) {
61299                 return t('operations.move.annotation.' + entity.geometry(context.graph()));
61300             }
61301
61302
61303             function connectAnnotation(nodeEntity, targetEntity) {
61304                 var nodeGeometry = nodeEntity.geometry(context.graph());
61305                 var targetGeometry = targetEntity.geometry(context.graph());
61306                 if (nodeGeometry === 'vertex' && targetGeometry === 'vertex') {
61307                     var nodeParentWayIDs = context.graph().parentWays(nodeEntity);
61308                     var targetParentWayIDs = context.graph().parentWays(targetEntity);
61309                     var sharedParentWays = utilArrayIntersection(nodeParentWayIDs, targetParentWayIDs);
61310                     // if both vertices are part of the same way
61311                     if (sharedParentWays.length !== 0) {
61312                         // if the nodes are next to each other, they are merged
61313                         if (sharedParentWays[0].areAdjacent(nodeEntity.id, targetEntity.id)) {
61314                             return t('operations.connect.annotation.from_vertex.to_adjacent_vertex');
61315                         }
61316                         return t('operations.connect.annotation.from_vertex.to_sibling_vertex');
61317                     }
61318                 }
61319                 return t('operations.connect.annotation.from_' + nodeGeometry + '.to_' + targetGeometry);
61320             }
61321
61322
61323             function shouldSnapToNode(target) {
61324                 if (!_activeEntity) { return false; }
61325                 return _activeEntity.geometry(context.graph()) !== 'vertex' ||
61326                     (target.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(target, context.graph()));
61327             }
61328
61329
61330             function origin(entity) {
61331                 return context.projection(entity.loc);
61332             }
61333
61334
61335             function keydown() {
61336                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
61337                     if (context.surface().classed('nope')) {
61338                         context.surface()
61339                             .classed('nope-suppressed', true);
61340                     }
61341                     context.surface()
61342                         .classed('nope', false)
61343                         .classed('nope-disabled', true);
61344                 }
61345             }
61346
61347
61348             function keyup() {
61349                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
61350                     if (context.surface().classed('nope-suppressed')) {
61351                         context.surface()
61352                             .classed('nope', true);
61353                     }
61354                     context.surface()
61355                         .classed('nope-suppressed', false)
61356                         .classed('nope-disabled', false);
61357                 }
61358             }
61359
61360
61361             function start(entity) {
61362                 _wasMidpoint = entity.type === 'midpoint';
61363                 var hasHidden = context.features().hasHiddenConnections(entity, context.graph());
61364                 _isCancelled = !context.editable() || event.sourceEvent.shiftKey || hasHidden;
61365
61366
61367                 if (_isCancelled) {
61368                     if (hasHidden) {
61369                         uiFlash()
61370                             .duration(4000)
61371                             .text(t('modes.drag_node.connected_to_hidden'))();
61372                     }
61373                     return drag.cancel();
61374                 }
61375
61376                 if (_wasMidpoint) {
61377                     var midpoint = entity;
61378                     entity = osmNode();
61379                     context.perform(actionAddMidpoint(midpoint, entity));
61380                     entity = context.entity(entity.id);   // get post-action entity
61381
61382                     var vertex = context.surface().selectAll('.' + entity.id);
61383                     drag.target(vertex.node(), entity);
61384
61385                 } else {
61386                     context.perform(actionNoop());
61387                 }
61388
61389                 _activeEntity = entity;
61390                 _startLoc = entity.loc;
61391
61392                 hover.ignoreVertex(entity.geometry(context.graph()) === 'vertex');
61393
61394                 context.surface().selectAll('.' + _activeEntity.id)
61395                     .classed('active', true);
61396
61397                 context.enter(mode);
61398             }
61399
61400
61401             // related code
61402             // - `behavior/draw.js` `datum()`
61403             function datum() {
61404                 var event$1 = event && event.sourceEvent;
61405                 if (!event$1 || event$1.altKey) {
61406                     return {};
61407                 } else {
61408                     // When dragging, snap only to touch targets..
61409                     // (this excludes area fills and active drawing elements)
61410                     var d = event$1.target.__data__;
61411                     return (d && d.properties && d.properties.target) ? d : {};
61412                 }
61413             }
61414
61415
61416             function doMove(entity, nudge) {
61417                 nudge = nudge || [0, 0];
61418
61419                 var currPoint = (event && event.point) || context.projection(_lastLoc);
61420                 var currMouse = geoVecSubtract(currPoint, nudge);
61421                 var loc = context.projection.invert(currMouse);
61422
61423                 if (!_nudgeInterval) {   // If not nudging at the edge of the viewport, try to snap..
61424                     // related code
61425                     // - `mode/drag_node.js`     `doMode()`
61426                     // - `behavior/draw.js`      `click()`
61427                     // - `behavior/draw_way.js`  `move()`
61428                     var d = datum();
61429                     var target = d && d.properties && d.properties.entity;
61430                     var targetLoc = target && target.loc;
61431                     var targetNodes = d && d.properties && d.properties.nodes;
61432                     var edge;
61433
61434                     if (targetLoc) {   // snap to node/vertex - a point target with `.loc`
61435                         if (shouldSnapToNode(target)) {
61436                             loc = targetLoc;
61437                         }
61438
61439                     } else if (targetNodes) {   // snap to way - a line target with `.nodes`
61440                         edge = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id);
61441                         if (edge) {
61442                             loc = edge.loc;
61443                         }
61444                     }
61445                 }
61446
61447                 context.replace(
61448                     actionMoveNode(entity.id, loc)
61449                 );
61450
61451                 // Below here: validations
61452                 var isInvalid = false;
61453
61454                 // Check if this connection to `target` could cause relations to break..
61455                 if (target) {
61456                     isInvalid = hasRelationConflict(entity, target, edge, context.graph());
61457                 }
61458
61459                 // Check if this drag causes the geometry to break..
61460                 if (!isInvalid) {
61461                     isInvalid = hasInvalidGeometry(entity, context.graph());
61462                 }
61463
61464
61465                 var nope = context.surface().classed('nope');
61466                 if (isInvalid === 'relation' || isInvalid === 'restriction') {
61467                     if (!nope) {   // about to nope - show hint
61468                         uiFlash()
61469                             .duration(4000)
61470                             .text(t('operations.connect.' + isInvalid,
61471                                 { relation: context.presets().item('type/restriction').name() }
61472                             ))();
61473                     }
61474                 } else {
61475                     if (nope) {   // about to un-nope, remove hint
61476                         uiFlash()
61477                             .duration(1)
61478                             .text('')();
61479                     }
61480                 }
61481
61482
61483                 var nopeDisabled = context.surface().classed('nope-disabled');
61484                 if (nopeDisabled) {
61485                     context.surface()
61486                         .classed('nope', false)
61487                         .classed('nope-suppressed', isInvalid);
61488                 } else {
61489                     context.surface()
61490                         .classed('nope', isInvalid)
61491                         .classed('nope-suppressed', false);
61492                 }
61493
61494                 _lastLoc = loc;
61495             }
61496
61497
61498             // Uses `actionConnect.disabled()` to know whether this connection is ok..
61499             function hasRelationConflict(entity, target, edge, graph) {
61500                 var testGraph = graph.update();  // copy
61501
61502                 // if snapping to way - add midpoint there and consider that the target..
61503                 if (edge) {
61504                     var midpoint = osmNode();
61505                     var action = actionAddMidpoint({
61506                         loc: edge.loc,
61507                         edge: [target.nodes[edge.index - 1], target.nodes[edge.index]]
61508                     }, midpoint);
61509
61510                     testGraph = action(testGraph);
61511                     target = midpoint;
61512                 }
61513
61514                 // can we connect to it?
61515                 var ids = [entity.id, target.id];
61516                 return actionConnect(ids).disabled(testGraph);
61517             }
61518
61519
61520             function hasInvalidGeometry(entity, graph) {
61521                 var parents = graph.parentWays(entity);
61522                 var i, j, k;
61523
61524                 for (i = 0; i < parents.length; i++) {
61525                     var parent = parents[i];
61526                     var nodes = [];
61527                     var activeIndex = null;    // which multipolygon ring contains node being dragged
61528
61529                     // test any parent multipolygons for valid geometry
61530                     var relations = graph.parentRelations(parent);
61531                     for (j = 0; j < relations.length; j++) {
61532                         if (!relations[j].isMultipolygon()) { continue; }
61533
61534                         var rings = osmJoinWays(relations[j].members, graph);
61535
61536                         // find active ring and test it for self intersections
61537                         for (k = 0; k < rings.length; k++) {
61538                             nodes = rings[k].nodes;
61539                             if (nodes.find(function(n) { return n.id === entity.id; })) {
61540                                 activeIndex = k;
61541                                 if (geoHasSelfIntersections(nodes, entity.id)) {
61542                                     return true;
61543                                 }
61544                             }
61545                             rings[k].coords = nodes.map(function(n) { return n.loc; });
61546                         }
61547
61548                         // test active ring for intersections with other rings in the multipolygon
61549                         for (k = 0; k < rings.length; k++) {
61550                             if (k === activeIndex) { continue; }
61551
61552                             // make sure active ring doesnt cross passive rings
61553                             if (geoHasLineIntersections(rings[activeIndex].nodes, rings[k].nodes, entity.id)) {
61554                                 return true;
61555                             }
61556                         }
61557                     }
61558
61559
61560                     // If we still haven't tested this node's parent way for self-intersections.
61561                     // (because it's not a member of a multipolygon), test it now.
61562                     if (activeIndex === null) {
61563                         nodes = parent.nodes.map(function(nodeID) { return graph.entity(nodeID); });
61564                         if (nodes.length && geoHasSelfIntersections(nodes, entity.id)) {
61565                             return true;
61566                         }
61567                     }
61568
61569                 }
61570
61571                 return false;
61572             }
61573
61574
61575             function move(entity) {
61576                 if (_isCancelled) { return; }
61577                 event.sourceEvent.stopPropagation();
61578
61579                 context.surface().classed('nope-disabled', event.sourceEvent.altKey);
61580
61581                 _lastLoc = context.projection.invert(event.point);
61582
61583                 doMove(entity);
61584                 var nudge = geoViewportEdge(event.point, context.map().dimensions());
61585                 if (nudge) {
61586                     startNudge(entity, nudge);
61587                 } else {
61588                     stopNudge();
61589                 }
61590             }
61591
61592             function end(entity) {
61593                 if (_isCancelled) { return; }
61594
61595                 var wasPoint = entity.geometry(context.graph()) === 'point';
61596
61597                 var d = datum();
61598                 var nope = (d && d.properties && d.properties.nope) || context.surface().classed('nope');
61599                 var target = d && d.properties && d.properties.entity;   // entity to snap to
61600
61601                 if (nope) {   // bounce back
61602                     context.perform(
61603                         _actionBounceBack(entity.id, _startLoc)
61604                     );
61605
61606                 } else if (target && target.type === 'way') {
61607                     var choice = geoChooseEdge(context.childNodes(target), context.mouse(), context.projection, entity.id);
61608                     context.replace(
61609                         actionAddMidpoint({
61610                             loc: choice.loc,
61611                             edge: [target.nodes[choice.index - 1], target.nodes[choice.index]]
61612                         }, entity),
61613                         connectAnnotation(entity, target)
61614                     );
61615
61616                 } else if (target && target.type === 'node' && shouldSnapToNode(target)) {
61617                     context.replace(
61618                         actionConnect([target.id, entity.id]),
61619                         connectAnnotation(entity, target)
61620                     );
61621
61622                 } else if (_wasMidpoint) {
61623                     context.replace(
61624                         actionNoop(),
61625                         t('operations.add.annotation.vertex')
61626                     );
61627
61628                 } else {
61629                     context.replace(
61630                         actionNoop(),
61631                         moveAnnotation(entity)
61632                     );
61633                 }
61634
61635                 if (wasPoint) {
61636                     context.enter(modeSelect(context, [entity.id]));
61637
61638                 } else {
61639                     var reselection = _restoreSelectedIDs.filter(function(id) {
61640                         return context.graph().hasEntity(id);
61641                     });
61642
61643                     if (reselection.length) {
61644                         context.enter(modeSelect(context, reselection));
61645                     } else {
61646                         context.enter(modeBrowse(context));
61647                     }
61648                 }
61649             }
61650
61651
61652             function _actionBounceBack(nodeID, toLoc) {
61653                 var moveNode = actionMoveNode(nodeID, toLoc);
61654                 var action = function(graph, t) {
61655                     // last time through, pop off the bounceback perform.
61656                     // it will then overwrite the initial perform with a moveNode that does nothing
61657                     if (t === 1) { context.pop(); }
61658                     return moveNode(graph, t);
61659                 };
61660                 action.transitionable = true;
61661                 return action;
61662             }
61663
61664
61665             function cancel() {
61666                 drag.cancel();
61667                 context.enter(modeBrowse(context));
61668             }
61669
61670
61671             var drag = behaviorDrag()
61672                 .selector('.layer-touch.points .target')
61673                 .surface(d3_select('#map').node())
61674                 .origin(origin)
61675                 .on('start', start)
61676                 .on('move', move)
61677                 .on('end', end);
61678
61679
61680             mode.enter = function() {
61681                 context.install(hover);
61682                 context.install(edit);
61683
61684                 d3_select(window)
61685                     .on('keydown.drawWay', keydown)
61686                     .on('keyup.drawWay', keyup);
61687
61688                 context.history()
61689                     .on('undone.drag-node', cancel);
61690             };
61691
61692
61693             mode.exit = function() {
61694                 context.ui().sidebar.hover.cancel();
61695                 context.uninstall(hover);
61696                 context.uninstall(edit);
61697
61698                 d3_select(window)
61699                     .on('keydown.hover', null)
61700                     .on('keyup.hover', null);
61701
61702                 context.history()
61703                     .on('undone.drag-node', null);
61704
61705                 _activeEntity = null;
61706
61707                 context.surface()
61708                     .classed('nope', false)
61709                     .classed('nope-suppressed', false)
61710                     .classed('nope-disabled', false)
61711                     .selectAll('.active')
61712                     .classed('active', false);
61713
61714                 stopNudge();
61715             };
61716
61717
61718             mode.selectedIDs = function() {
61719                 if (!arguments.length) { return _activeEntity ? [_activeEntity.id] : []; }
61720                 // no assign
61721                 return mode;
61722             };
61723
61724
61725             mode.activeID = function() {
61726                 if (!arguments.length) { return _activeEntity && _activeEntity.id; }
61727                 // no assign
61728                 return mode;
61729             };
61730
61731
61732             mode.restoreSelectedIDs = function(_) {
61733                 if (!arguments.length) { return _restoreSelectedIDs; }
61734                 _restoreSelectedIDs = _;
61735                 return mode;
61736             };
61737
61738
61739             mode.behavior = drag;
61740
61741
61742             return mode;
61743         }
61744
61745         function quickselect$1(arr, k, left, right, compare) {
61746             quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);
61747         }
61748
61749         function quickselectStep(arr, k, left, right, compare) {
61750
61751             while (right > left) {
61752                 if (right - left > 600) {
61753                     var n = right - left + 1;
61754                     var m = k - left + 1;
61755                     var z = Math.log(n);
61756                     var s = 0.5 * Math.exp(2 * z / 3);
61757                     var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
61758                     var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
61759                     var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
61760                     quickselectStep(arr, k, newLeft, newRight, compare);
61761                 }
61762
61763                 var t = arr[k];
61764                 var i = left;
61765                 var j = right;
61766
61767                 swap(arr, left, k);
61768                 if (compare(arr[right], t) > 0) { swap(arr, left, right); }
61769
61770                 while (i < j) {
61771                     swap(arr, i, j);
61772                     i++;
61773                     j--;
61774                     while (compare(arr[i], t) < 0) { i++; }
61775                     while (compare(arr[j], t) > 0) { j--; }
61776                 }
61777
61778                 if (compare(arr[left], t) === 0) { swap(arr, left, j); }
61779                 else {
61780                     j++;
61781                     swap(arr, j, right);
61782                 }
61783
61784                 if (j <= k) { left = j + 1; }
61785                 if (k <= j) { right = j - 1; }
61786             }
61787         }
61788
61789         function swap(arr, i, j) {
61790             var tmp = arr[i];
61791             arr[i] = arr[j];
61792             arr[j] = tmp;
61793         }
61794
61795         function defaultCompare(a, b) {
61796             return a < b ? -1 : a > b ? 1 : 0;
61797         }
61798
61799         var RBush = function RBush(maxEntries) {
61800             if ( maxEntries === void 0 ) maxEntries = 9;
61801
61802             // max entries in a node is 9 by default; min node fill is 40% for best performance
61803             this._maxEntries = Math.max(4, maxEntries);
61804             this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));
61805             this.clear();
61806         };
61807
61808         RBush.prototype.all = function all () {
61809             return this._all(this.data, []);
61810         };
61811
61812         RBush.prototype.search = function search (bbox) {
61813             var node = this.data;
61814             var result = [];
61815
61816             if (!intersects$2(bbox, node)) { return result; }
61817
61818             var toBBox = this.toBBox;
61819             var nodesToSearch = [];
61820
61821             while (node) {
61822                 for (var i = 0; i < node.children.length; i++) {
61823                     var child = node.children[i];
61824                     var childBBox = node.leaf ? toBBox(child) : child;
61825
61826                     if (intersects$2(bbox, childBBox)) {
61827                         if (node.leaf) { result.push(child); }
61828                         else if (contains$5(bbox, childBBox)) { this._all(child, result); }
61829                         else { nodesToSearch.push(child); }
61830                     }
61831                 }
61832                 node = nodesToSearch.pop();
61833             }
61834
61835             return result;
61836         };
61837
61838         RBush.prototype.collides = function collides (bbox) {
61839             var node = this.data;
61840
61841             if (!intersects$2(bbox, node)) { return false; }
61842
61843             var nodesToSearch = [];
61844             while (node) {
61845                 for (var i = 0; i < node.children.length; i++) {
61846                     var child = node.children[i];
61847                     var childBBox = node.leaf ? this.toBBox(child) : child;
61848
61849                     if (intersects$2(bbox, childBBox)) {
61850                         if (node.leaf || contains$5(bbox, childBBox)) { return true; }
61851                         nodesToSearch.push(child);
61852                     }
61853                 }
61854                 node = nodesToSearch.pop();
61855             }
61856
61857             return false;
61858         };
61859
61860         RBush.prototype.load = function load (data) {
61861             if (!(data && data.length)) { return this; }
61862
61863             if (data.length < this._minEntries) {
61864                 for (var i = 0; i < data.length; i++) {
61865                     this.insert(data[i]);
61866                 }
61867                 return this;
61868             }
61869
61870             // recursively build the tree with the given data from scratch using OMT algorithm
61871             var node = this._build(data.slice(), 0, data.length - 1, 0);
61872
61873             if (!this.data.children.length) {
61874                 // save as is if tree is empty
61875                 this.data = node;
61876
61877             } else if (this.data.height === node.height) {
61878                 // split root if trees have the same height
61879                 this._splitRoot(this.data, node);
61880
61881             } else {
61882                 if (this.data.height < node.height) {
61883                     // swap trees if inserted one is bigger
61884                     var tmpNode = this.data;
61885                     this.data = node;
61886                     node = tmpNode;
61887                 }
61888
61889                 // insert the small tree into the large tree at appropriate level
61890                 this._insert(node, this.data.height - node.height - 1, true);
61891             }
61892
61893             return this;
61894         };
61895
61896         RBush.prototype.insert = function insert (item) {
61897             if (item) { this._insert(item, this.data.height - 1); }
61898             return this;
61899         };
61900
61901         RBush.prototype.clear = function clear () {
61902             this.data = createNode$1([]);
61903             return this;
61904         };
61905
61906         RBush.prototype.remove = function remove (item, equalsFn) {
61907             if (!item) { return this; }
61908
61909             var node = this.data;
61910             var bbox = this.toBBox(item);
61911             var path = [];
61912             var indexes = [];
61913             var i, parent, goingUp;
61914
61915             // depth-first iterative tree traversal
61916             while (node || path.length) {
61917
61918                 if (!node) { // go up
61919                     node = path.pop();
61920                     parent = path[path.length - 1];
61921                     i = indexes.pop();
61922                     goingUp = true;
61923                 }
61924
61925                 if (node.leaf) { // check current node
61926                     var index = findItem$1(item, node.children, equalsFn);
61927
61928                     if (index !== -1) {
61929                         // item found, remove the item and condense tree upwards
61930                         node.children.splice(index, 1);
61931                         path.push(node);
61932                         this._condense(path);
61933                         return this;
61934                     }
61935                 }
61936
61937                 if (!goingUp && !node.leaf && contains$5(node, bbox)) { // go down
61938                     path.push(node);
61939                     indexes.push(i);
61940                     i = 0;
61941                     parent = node;
61942                     node = node.children[0];
61943
61944                 } else if (parent) { // go right
61945                     i++;
61946                     node = parent.children[i];
61947                     goingUp = false;
61948
61949                 } else { node = null; } // nothing found
61950             }
61951
61952             return this;
61953         };
61954
61955         RBush.prototype.toBBox = function toBBox (item) { return item; };
61956
61957         RBush.prototype.compareMinX = function compareMinX (a, b) { return a.minX - b.minX; };
61958         RBush.prototype.compareMinY = function compareMinY (a, b) { return a.minY - b.minY; };
61959
61960         RBush.prototype.toJSON = function toJSON () { return this.data; };
61961
61962         RBush.prototype.fromJSON = function fromJSON (data) {
61963             this.data = data;
61964             return this;
61965         };
61966
61967         RBush.prototype._all = function _all (node, result) {
61968             var nodesToSearch = [];
61969             while (node) {
61970                 if (node.leaf) { result.push.apply(result, node.children); }
61971                 else { nodesToSearch.push.apply(nodesToSearch, node.children); }
61972
61973                 node = nodesToSearch.pop();
61974             }
61975             return result;
61976         };
61977
61978         RBush.prototype._build = function _build (items, left, right, height) {
61979
61980             var N = right - left + 1;
61981             var M = this._maxEntries;
61982             var node;
61983
61984             if (N <= M) {
61985                 // reached leaf level; return leaf
61986                 node = createNode$1(items.slice(left, right + 1));
61987                 calcBBox$1(node, this.toBBox);
61988                 return node;
61989             }
61990
61991             if (!height) {
61992                 // target height of the bulk-loaded tree
61993                 height = Math.ceil(Math.log(N) / Math.log(M));
61994
61995                 // target number of root entries to maximize storage utilization
61996                 M = Math.ceil(N / Math.pow(M, height - 1));
61997             }
61998
61999             node = createNode$1([]);
62000             node.leaf = false;
62001             node.height = height;
62002
62003             // split the items into M mostly square tiles
62004
62005             var N2 = Math.ceil(N / M);
62006             var N1 = N2 * Math.ceil(Math.sqrt(M));
62007
62008             multiSelect$1(items, left, right, N1, this.compareMinX);
62009
62010             for (var i = left; i <= right; i += N1) {
62011
62012                 var right2 = Math.min(i + N1 - 1, right);
62013
62014                 multiSelect$1(items, i, right2, N2, this.compareMinY);
62015
62016                 for (var j = i; j <= right2; j += N2) {
62017
62018                     var right3 = Math.min(j + N2 - 1, right2);
62019
62020                     // pack each entry recursively
62021                     node.children.push(this._build(items, j, right3, height - 1));
62022                 }
62023             }
62024
62025             calcBBox$1(node, this.toBBox);
62026
62027             return node;
62028         };
62029
62030         RBush.prototype._chooseSubtree = function _chooseSubtree (bbox, node, level, path) {
62031             while (true) {
62032                 path.push(node);
62033
62034                 if (node.leaf || path.length - 1 === level) { break; }
62035
62036                 var minArea = Infinity;
62037                 var minEnlargement = Infinity;
62038                 var targetNode = (void 0);
62039
62040                 for (var i = 0; i < node.children.length; i++) {
62041                     var child = node.children[i];
62042                     var area = bboxArea$1(child);
62043                     var enlargement = enlargedArea$1(bbox, child) - area;
62044
62045                     // choose entry with the least area enlargement
62046                     if (enlargement < minEnlargement) {
62047                         minEnlargement = enlargement;
62048                         minArea = area < minArea ? area : minArea;
62049                         targetNode = child;
62050
62051                     } else if (enlargement === minEnlargement) {
62052                         // otherwise choose one with the smallest area
62053                         if (area < minArea) {
62054                             minArea = area;
62055                             targetNode = child;
62056                         }
62057                     }
62058                 }
62059
62060                 node = targetNode || node.children[0];
62061             }
62062
62063             return node;
62064         };
62065
62066         RBush.prototype._insert = function _insert (item, level, isNode) {
62067             var bbox = isNode ? item : this.toBBox(item);
62068             var insertPath = [];
62069
62070             // find the best node for accommodating the item, saving all nodes along the path too
62071             var node = this._chooseSubtree(bbox, this.data, level, insertPath);
62072
62073             // put the item into the node
62074             node.children.push(item);
62075             extend$2(node, bbox);
62076
62077             // split on node overflow; propagate upwards if necessary
62078             while (level >= 0) {
62079                 if (insertPath[level].children.length > this._maxEntries) {
62080                     this._split(insertPath, level);
62081                     level--;
62082                 } else { break; }
62083             }
62084
62085             // adjust bboxes along the insertion path
62086             this._adjustParentBBoxes(bbox, insertPath, level);
62087         };
62088
62089         // split overflowed node into two
62090         RBush.prototype._split = function _split (insertPath, level) {
62091             var node = insertPath[level];
62092             var M = node.children.length;
62093             var m = this._minEntries;
62094
62095             this._chooseSplitAxis(node, m, M);
62096
62097             var splitIndex = this._chooseSplitIndex(node, m, M);
62098
62099             var newNode = createNode$1(node.children.splice(splitIndex, node.children.length - splitIndex));
62100             newNode.height = node.height;
62101             newNode.leaf = node.leaf;
62102
62103             calcBBox$1(node, this.toBBox);
62104             calcBBox$1(newNode, this.toBBox);
62105
62106             if (level) { insertPath[level - 1].children.push(newNode); }
62107             else { this._splitRoot(node, newNode); }
62108         };
62109
62110         RBush.prototype._splitRoot = function _splitRoot (node, newNode) {
62111             // split root node
62112             this.data = createNode$1([node, newNode]);
62113             this.data.height = node.height + 1;
62114             this.data.leaf = false;
62115             calcBBox$1(this.data, this.toBBox);
62116         };
62117
62118         RBush.prototype._chooseSplitIndex = function _chooseSplitIndex (node, m, M) {
62119             var index;
62120             var minOverlap = Infinity;
62121             var minArea = Infinity;
62122
62123             for (var i = m; i <= M - m; i++) {
62124                 var bbox1 = distBBox$1(node, 0, i, this.toBBox);
62125                 var bbox2 = distBBox$1(node, i, M, this.toBBox);
62126
62127                 var overlap = intersectionArea$1(bbox1, bbox2);
62128                 var area = bboxArea$1(bbox1) + bboxArea$1(bbox2);
62129
62130                 // choose distribution with minimum overlap
62131                 if (overlap < minOverlap) {
62132                     minOverlap = overlap;
62133                     index = i;
62134
62135                     minArea = area < minArea ? area : minArea;
62136
62137                 } else if (overlap === minOverlap) {
62138                     // otherwise choose distribution with minimum area
62139                     if (area < minArea) {
62140                         minArea = area;
62141                         index = i;
62142                     }
62143                 }
62144             }
62145
62146             return index || M - m;
62147         };
62148
62149         // sorts node children by the best axis for split
62150         RBush.prototype._chooseSplitAxis = function _chooseSplitAxis (node, m, M) {
62151             var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX$1;
62152             var compareMinY = node.leaf ? this.compareMinY : compareNodeMinY$1;
62153             var xMargin = this._allDistMargin(node, m, M, compareMinX);
62154             var yMargin = this._allDistMargin(node, m, M, compareMinY);
62155
62156             // if total distributions margin value is minimal for x, sort by minX,
62157             // otherwise it's already sorted by minY
62158             if (xMargin < yMargin) { node.children.sort(compareMinX); }
62159         };
62160
62161         // total margin of all possible split distributions where each node is at least m full
62162         RBush.prototype._allDistMargin = function _allDistMargin (node, m, M, compare) {
62163             node.children.sort(compare);
62164
62165             var toBBox = this.toBBox;
62166             var leftBBox = distBBox$1(node, 0, m, toBBox);
62167             var rightBBox = distBBox$1(node, M - m, M, toBBox);
62168             var margin = bboxMargin$1(leftBBox) + bboxMargin$1(rightBBox);
62169
62170             for (var i = m; i < M - m; i++) {
62171                 var child = node.children[i];
62172                 extend$2(leftBBox, node.leaf ? toBBox(child) : child);
62173                 margin += bboxMargin$1(leftBBox);
62174             }
62175
62176             for (var i$1 = M - m - 1; i$1 >= m; i$1--) {
62177                 var child$1 = node.children[i$1];
62178                 extend$2(rightBBox, node.leaf ? toBBox(child$1) : child$1);
62179                 margin += bboxMargin$1(rightBBox);
62180             }
62181
62182             return margin;
62183         };
62184
62185         RBush.prototype._adjustParentBBoxes = function _adjustParentBBoxes (bbox, path, level) {
62186             // adjust bboxes along the given tree path
62187             for (var i = level; i >= 0; i--) {
62188                 extend$2(path[i], bbox);
62189             }
62190         };
62191
62192         RBush.prototype._condense = function _condense (path) {
62193             // go through the path, removing empty nodes and updating bboxes
62194             for (var i = path.length - 1, siblings = (void 0); i >= 0; i--) {
62195                 if (path[i].children.length === 0) {
62196                     if (i > 0) {
62197                         siblings = path[i - 1].children;
62198                         siblings.splice(siblings.indexOf(path[i]), 1);
62199
62200                     } else { this.clear(); }
62201
62202                 } else { calcBBox$1(path[i], this.toBBox); }
62203             }
62204         };
62205
62206         function findItem$1(item, items, equalsFn) {
62207             if (!equalsFn) { return items.indexOf(item); }
62208
62209             for (var i = 0; i < items.length; i++) {
62210                 if (equalsFn(item, items[i])) { return i; }
62211             }
62212             return -1;
62213         }
62214
62215         // calculate node's bbox from bboxes of its children
62216         function calcBBox$1(node, toBBox) {
62217             distBBox$1(node, 0, node.children.length, toBBox, node);
62218         }
62219
62220         // min bounding rectangle of node children from k to p-1
62221         function distBBox$1(node, k, p, toBBox, destNode) {
62222             if (!destNode) { destNode = createNode$1(null); }
62223             destNode.minX = Infinity;
62224             destNode.minY = Infinity;
62225             destNode.maxX = -Infinity;
62226             destNode.maxY = -Infinity;
62227
62228             for (var i = k; i < p; i++) {
62229                 var child = node.children[i];
62230                 extend$2(destNode, node.leaf ? toBBox(child) : child);
62231             }
62232
62233             return destNode;
62234         }
62235
62236         function extend$2(a, b) {
62237             a.minX = Math.min(a.minX, b.minX);
62238             a.minY = Math.min(a.minY, b.minY);
62239             a.maxX = Math.max(a.maxX, b.maxX);
62240             a.maxY = Math.max(a.maxY, b.maxY);
62241             return a;
62242         }
62243
62244         function compareNodeMinX$1(a, b) { return a.minX - b.minX; }
62245         function compareNodeMinY$1(a, b) { return a.minY - b.minY; }
62246
62247         function bboxArea$1(a)   { return (a.maxX - a.minX) * (a.maxY - a.minY); }
62248         function bboxMargin$1(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }
62249
62250         function enlargedArea$1(a, b) {
62251             return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *
62252                    (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));
62253         }
62254
62255         function intersectionArea$1(a, b) {
62256             var minX = Math.max(a.minX, b.minX);
62257             var minY = Math.max(a.minY, b.minY);
62258             var maxX = Math.min(a.maxX, b.maxX);
62259             var maxY = Math.min(a.maxY, b.maxY);
62260
62261             return Math.max(0, maxX - minX) *
62262                    Math.max(0, maxY - minY);
62263         }
62264
62265         function contains$5(a, b) {
62266             return a.minX <= b.minX &&
62267                    a.minY <= b.minY &&
62268                    b.maxX <= a.maxX &&
62269                    b.maxY <= a.maxY;
62270         }
62271
62272         function intersects$2(a, b) {
62273             return b.minX <= a.maxX &&
62274                    b.minY <= a.maxY &&
62275                    b.maxX >= a.minX &&
62276                    b.maxY >= a.minY;
62277         }
62278
62279         function createNode$1(children) {
62280             return {
62281                 children: children,
62282                 height: 1,
62283                 leaf: true,
62284                 minX: Infinity,
62285                 minY: Infinity,
62286                 maxX: -Infinity,
62287                 maxY: -Infinity
62288             };
62289         }
62290
62291         // sort an array so that items come in groups of n unsorted items, with groups sorted between each other;
62292         // combines selection algorithm with binary divide & conquer approach
62293
62294         function multiSelect$1(arr, left, right, n, compare) {
62295             var stack = [left, right];
62296
62297             while (stack.length) {
62298                 right = stack.pop();
62299                 left = stack.pop();
62300
62301                 if (right - left <= n) { continue; }
62302
62303                 var mid = left + Math.ceil((right - left) / n / 2) * n;
62304                 quickselect$1(arr, mid, left, right, compare);
62305
62306                 stack.push(left, mid, mid, right);
62307             }
62308         }
62309
62310         var localizeStrings = {"this node":"this_node","this way":"this_way","this relation":"this_relation","this one-way":"this_oneway","this highway":"this_highway","this railway":"this_railway","this waterway":"this_waterway","this cycleway":"this_cycleway","this footpath":"this_footpath","this cycleway/footpath":"this_cycleway_footpath","this riverbank":"this_riverbank","this crossing":"this_crossing","this railway crossing":"this_railway_crossing","this bridge":"this_bridge","this tunnel":"this_tunnel","this boundary":"this_boundary","this turn-restriction":"this_turn_restriction","this roundabout":"this_roundabout","this mini-roundabout":"this_mini_roundabout","this track":"this_track","this feature":"this_feature",highway:"highway",railway:"railway",waterway:"waterway",cycleway:"cycleway",cycleway_footpath:"cycleway/footpath",riverbank:"riverbank",place_of_worship:"place_of_worship",pub:"pub",restaurant:"restaurant",school:"school",university:"university",hospital:"hospital",library:"library",theatre:"theatre",courthouse:"courthouse",bank:"bank",cinema:"cinema",pharmacy:"pharmacy",cafe:"cafe",fast_food:"fast_food",fuel:"fuel",from:"from",to:"to","left-hand":"left_hand","right-hand":"right_hand"};
62311         var errorTypes = {"20":{title:"multiple nodes on the same spot",severity:"warning",description:"There is more than one node in this spot. Offending node IDs: $1",IDs:["20"],regex:"IDs: ((?:#\\d+,?)+)"},"30":{title:"non-closed_areas",severity:"error",description:"This way is tagged with '$1' and should be closed-loop.",IDs:["this",""],regex:"(this way) is tagged with '(.+)'"},"40":{title:"dead-ended one-ways",severity:"error",description:"The first node (id $1) of this one-way is not connected to any other way",IDs:["n","this"],regex:"\\(id (\\d+)\\) of (this one-way)"},"41":{title:"",severity:"error",description:"The last node (id $1) of this one-way is not connected to any other way",IDs:["n","this"],regex:"\\(id (\\d+)\\) of (this one-way)"},"42":{title:"",severity:"error",description:"This node cannot be reached because one-ways only lead away from here",IDs:["this"],regex:"(this node)"},"43":{title:"",severity:"error",description:"You cannot escape from this node because one-ways only lead to here",IDs:["this"],regex:"(this node)"},"50":{title:"almost-junctions",severity:"error",description:"This node is very close but not connected to way #$1",IDs:["this","w"],regex:"(this node) is very close but not connected to way #(\\d+)"},"60":{title:"deprecated tags",severity:"warning",description:"This $1 uses deprecated tag $2. Please use $3 instead!",IDs:["this","",""],regex:"(this (?:node|way|relation)) uses deprecated tag '(.+)'\\. Please use &quot;(.+)&quot;"},"70":{title:"missing tags",severity:"error",description:"This $1 has an empty tag: $2",IDs:["this",""],regex:"(this (?:node|way|relation)) has an empty tag: &quot;(.+)=&quot;"},"71":{title:"",severity:"error",description:"This way has no tags",IDs:["this"],regex:"(this way)"},"72":{title:"",severity:"error",description:"This node is not member of any way and does not have any tags",IDs:["this"],regex:"(this node)"},"73":{title:"",severity:"error",description:"This way has a $1 tag but no highway tag",IDs:["this",""],regex:"(this way) has a (.+) tag"},"74":{title:"missing tags",severity:"error",description:"This $1 has an empty tag: $2",IDs:["this",""],regex:"(this (?:node|way|relation)) has an empty tag: &quot;(.+)=&quot;"},"75":{description:"This (node|way|relation) has a name \\((.+)\\) but no other tag",IDs:["this",""],regex:"(this (?:node|way|relation)) has a name \\((.+)\\)"},"90":{title:"motorways without ref",severity:"error",description:"This way is tagged as motorway and therefore needs a ref nat_ref or int_ref tag",IDs:["this"],regex:"(this way)"},"100":{title:"places of worship without religion",severity:"error",description:"This $1 is tagged as place of worship and therefore needs a religion tag",IDs:["this"],regex:"(this (?:node|way|relation))"},"110":{title:"point of interest without name",severity:"error",description:"This node is tagged as $1 and therefore needs a name tag",IDs:["this",""],regex:"(this (?:node|way|relation)) is tagged as (.+) and"},"120":{title:"ways without nodes",severity:"error",description:"This way has just one single node",IDs:["this"],regex:"(this way)"},"130":{title:"floating islands",severity:"error",description:"This way is not connected to the rest of the map",IDs:["this"],regex:"(this way)"},"150":{title:"railway crossing without tag",severity:"error",description:"This crossing of a highway and a railway needs to be tagged as railway=crossing or railway=level_crossing",IDs:["this"],regex:"(this crossing)"},"160":{title:"wrongly used railway tag",severity:"error",description:"There are ways in different layers coming together in this railway crossing. There are ways tagged as tunnel or bridge coming together in this railway crossing",IDs:["this"],regex:"(this railway crossing)"},"170":{title:"FIXME tagged items",severity:"error",description:"This feature has a FIXME tag: (.*)",IDs:["this"],regex:"(this feature) has a FIXME tag: (.*)"},"180":{title:"relations without type",severity:"error",description:"This relation has no type tag which is mandatory for relations",IDs:["this"],regex:"(this relation)"},"190":{title:"intersections without junctions",severity:"error",description:"This $1 intersects the $2 #$3 but there is no junction node",IDs:["this","","w"],regex:"(this .+) intersects the (.+) #(\\d+)"},"200":{title:"overlapping ways",severity:"error",description:"This $1 overlaps the $2 #$3",IDs:["this","","w"],regex:"(this .+) overlaps the (.+) #(\\d+)"},"210":{title:"loopings",severity:"error",description:"These errors contain self intersecting ways"},"211":{title:"",severity:"error",description:"This way contains more than one node at least twice. Nodes are $1.",IDs:["this","211"],regex:"(this way) contains more than one node at least twice. Nodes are ((?:#\\d+(?:, )?)+)\\."},"212":{title:"",severity:"error",description:"This way has only two different nodes and contains one of them more than once",IDs:["this"],regex:"(this way)"},"220":{title:"misspelled tags",severity:"error",description:"This $1 is tagged '$2' where $3 looks like $4",regex:"(this (?:node|way|relation)) is tagged '(.+)' where &quot;(.+)&quot; looks like &quot;(.+)&quot;"},"221":{title:"",severity:"error",description:"The key of this $1's tag is 'key': $2",regex:"(this (?:node|way|relation))\\'s tag is \\'key\\': (.+)"},"230":{title:"layer conflicts",severity:"error",description:"This node is a junction of ways on different layers.",IDs:["this"],regex:"(this node)"},"231":{title:"mixed layers intersection",severity:"error",description:"This node is a junction of ways on different layers: $1",IDs:["this","231"],regex:"(this node) is a junction of ways on different layers: (.+)"},"232":{title:"strange layers",severity:"error",description:"This $1 is tagged with layer $2. This need not be an error, but it looks strange",IDs:["this",""],regex:"(this (?:bridge|tunnel)) is tagged with layer (-?\\d+)\\."},"270":{title:"motorways connected directly",severity:"error",description:"This node is a junction of a motorway and a highway other than motorway, motorway_link, trunk, rest_area or construction. Service or unclassified is only valid if it has access=no/private or it leads to a motorway service area or if it is a service=parking_aisle.",IDs:["this"],regex:"(this node)"},"280":{title:"boundaries",severity:"error",description:"Administrative Boundaries can be expressed either by tagging ways or by adding them to a relation. They should be closed-loop sequences of ways, they must not self-intersect or split and they must have a name and an admin_level."},"281":{title:"missing name",severity:"error",description:"This boundary has no name",IDs:["this"],regex:"(this boundary)"},"282":{title:"missing admin level",severity:"error",description:"The boundary of $1 has no (?:valid numeric)?admin_level",regex:"of (.+) has"},"283":{title:"no closed loop",severity:"error",description:"The boundary of $1 is not closed-loop",regex:"boundary of (.+) is"},"284":{title:"splitting boundary",severity:"error",description:"The boundary of $1 splits here",regex:"boundary of (.+) splits"},"285":{title:"admin_level too high",severity:"error",description:"This boundary-way has admin_level $1 but belongs to a relation with lower admin_level (higher priority); it should have the lowest admin_level of all relations",IDs:["this",""],regex:"(this boundary)-way has admin_level (-?\\d+) but"},"290":{title:"restrictions",severity:"error",description:"Analyses all relations tagged type=restriction or following variations type=restriction:hgv type=restriction:caravan type=restriction:motorcar type=restriction:bus type=restriction:agricultural type=restriction:motorcycle type=restriction:bicycle and type=restriction:hazmat"},"291":{title:"missing type",severity:"error",description:"This turn-restriction has no (?:known )?restriction type",IDs:["this"],regex:"(this turn-restriction) has"},"292":{title:"missing from way",severity:"error",description:"This turn-restriction needs exactly one from member. This one has $1",IDs:["this",""],regex:"(this turn-restriction) needs.+has (\\d+)"},"293":{title:"missing to way",severity:"error",description:"This turn-restriction needs exactly one to member. This one has $1",IDs:["this",""],regex:"(this turn-restriction) needs.+has (\\d+)"},"294":{title:"from or to not a way",severity:"error",description:"From- and To-members of this turn-restriction need to be ways. $1",IDs:["this","294"],regex:"(this turn-restriction)~.+ways\\. ((?:(?:from|to) (?:node|relation) #\\d+,?)+)"},"295":{title:"via is not on the way ends",severity:"error",description:"via (node #$1) is not the first or the last member of (from|to) (way #$3)",IDs:["this","n","","w"],regex:"(this turn-restriction)~via \\(node #(\\d+)\\).+ of (from|to) \\(way #(\\d+)\\)"},"296":{title:"wrong restriction angle",severity:"error",description:"This turn-restriction type is $1, but angle is $2 degrees. Maybe the restriction type is not appropriate?",IDs:["this","",""],regex:"(this turn-restriction)~.+is (\\w+), but angle is (-?\\d+)"},"297":{title:"wrong direction of to member",severity:"error",description:"wrong direction of to way $1",IDs:["this","w"],regex:"(this turn-restriction)~.+to way (\\d+)"},"298":{title:"already restricted by oneway",severity:"error",description:"entry already prohibited by oneway tag on $1",IDs:["this","w"],regex:"(this turn-restriction)~.+tag on (\\d+)"},"300":{title:"missing maxspeed",severity:"warning",description:"This highway is missing a maxspeed tag",IDs:["this"],regex:"(this highway)"},"310":{title:"roundabouts",severity:"error",description:"Analyses ways with tag junction=roundabout. More then one way can form a roundabout. It supports tag oneway=-1"},"311":{title:"not closed loop",severity:"error",description:"This way is part of a roundabout but is not closed-loop. (split carriageways approaching a roundabout should not be tagged as roundabout)",IDs:["this"],regex:"(this way)"},"312":{title:"wrong direction",severity:"error",description:"If this ((?:mini_)?roundabout) is in a country with (left|right)-hand traffic then its orientation goes the wrong way around",IDs:["this",""],regex:"(this (?:mini_)?roundabout) is in a country with ((?:left|right)-hand)"},"313":{title:"faintly connected",severity:"error",description:"This roundabout has only $1 other roads connected. Roundabouts typically have three",IDs:["this",""],regex:"(this roundabout) has only (\\d) other"},"320":{title:"*_link connections",severity:"error",description:"This way is tagged as highway=$1_link but doesn't have a connection to any other $1 or $1_link",IDs:["this","","","",""],regex:"(this way) is tagged as (highway=.+) but doesn't have a connection to any other (.+) or (.+)"},"350":{title:"bridge-tags",severity:"error",description:"This bridge does not have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: (.+)",NOTE:"Group can be arbitrary list of form: key=value,key=value,key=value...",IDs:["this",""],regex:"(this bridge).*tags: (.+)"},"360":{title:"language unknown",severity:"warning",description:"It would be nice if this (node|way|relation) had an additional tag 'name:XX=(.+)' where XX shows the language of its name '\\2'",IDs:["this",""],regex:"(this (?:node|way|relation)) had an additional tag 'name:XX=(.+)' where"},"370":{title:"doubled places",severity:"error",description:"This node has tags in common with the surrounding way #$1 ((?:\\(including the name '.+'\\) )?)and seems to be redundand",IDs:["this","w","370"],regex:"(this node) has tags in common with the surrounding way #(\\d+) ((?:\\(including the name '.+'\\) )?)and"},"380":{title:"non-physical use of sport-tag",severity:"error",description:"This way is tagged sport=$1 but has no physical tag like e.g. leisure, building, amenity or highway",IDs:["this",""],regex:"(this way) is tagged (sport=.+) but"},"390":{title:"missing tracktype",severity:"warning",description:"This track doesn''t have a tracktype",IDs:["this"],regex:"(this track)"},"400":{title:"geometry glitches",severity:"error",description:""},"401":{title:"missing turn restriction",severity:"error",description:"ways $1 and $2 join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning( from way (\\1|\\2) to (\\1|\\2))?",IDs:["w","w"],regex:"ways (\\d+) and (\\d+) join"},"402":{title:"impossible angles",severity:"error",description:"this way bends in a very sharp angle here",IDs:["this"],regex:"(this way)"},"410":{title:"website",severity:"error",description:"Web pages are analyzed. Web page is defined by any of the following tags website=* url=* website:mobile=* contact:website=* contact:url=* image=* source:website=* or source:url=*"},"411":{title:"http error",severity:"error",description:"The URL (<a target=_blank href=$1>$1</a>) cannot be opened (HTTP status code $2)",IDs:["this","url",""],regex:"(this feature)~.+ href=([^>]+)>.+ code (\\d+)\\)"},"412":{title:"domain hijacking",severity:"error",description:"Possible domain squatting: <a target=_blank href=$1>$1</a>. Suspicious text is: \"$2\"",IDs:["this","url",""],regex:"(this feature)~.+ href=([^>]+)>.+ is: &quot;(.+)&quot;"},"413":{title:"non-match",severity:"error",description:"Content of the URL (<a target=_blank href=$1>$1</a>) did not contain these keywords: ($2)",IDs:["this","url",""],regex:"(this feature)~.+ href=([^>]+)>.+ keywords: \\((.+)\\)"}};
62312
62313         var tiler = utilTiler();
62314         var dispatch$1 = dispatch('loaded');
62315
62316         var _krCache;
62317         var _krZoom = 14;
62318         var _krUrlRoot = 'https://www.keepright.at/';
62319
62320         var _krRuleset = [
62321             // no 20 - multiple node on same spot - these are mostly boundaries overlapping roads
62322             30, 40, 50, 60, 70, 90, 100, 110, 120, 130, 150, 160, 170, 180,
62323             190, 191, 192, 193, 194, 195, 196, 197, 198,
62324             200, 201, 202, 203, 204, 205, 206, 207, 208, 210, 220,
62325             230, 231, 232, 270, 280, 281, 282, 283, 284, 285,
62326             290, 291, 292, 293, 294, 295, 296, 297, 298, 300, 310, 311, 312, 313,
62327             320, 350, 360, 370, 380, 390, 400, 401, 402, 410, 411, 412, 413
62328         ];
62329
62330
62331         function abortRequest(controller) {
62332             if (controller) {
62333                 controller.abort();
62334             }
62335         }
62336
62337         function abortUnwantedRequests(cache, tiles) {
62338             Object.keys(cache.inflightTile).forEach(function(k) {
62339                 var wanted = tiles.find(function(tile) { return k === tile.id; });
62340                 if (!wanted) {
62341                     abortRequest(cache.inflightTile[k]);
62342                     delete cache.inflightTile[k];
62343                 }
62344             });
62345         }
62346
62347
62348         function encodeErrorRtree(d) {
62349             return { minX: d.loc[0], minY: d.loc[1], maxX: d.loc[0], maxY: d.loc[1], data: d };
62350         }
62351
62352
62353         // replace or remove error from rtree
62354         function updateRtree(item, replace) {
62355             _krCache.rtree.remove(item, function isEql(a, b) {
62356                 return a.data.id === b.data.id;
62357             });
62358
62359             if (replace) {
62360                 _krCache.rtree.insert(item);
62361             }
62362         }
62363
62364
62365         function tokenReplacements(d) {
62366             if (!(d instanceof qaError)) { return; }
62367
62368             var htmlRegex = new RegExp(/<\/[a-z][\s\S]*>/);
62369             var replacements = {};
62370
62371             var errorTemplate = errorTypes[d.which_type];
62372             if (!errorTemplate) {
62373                 /* eslint-disable no-console */
62374                 console.log('No Template: ', d.which_type);
62375                 console.log('  ', d.description);
62376                 /* eslint-enable no-console */
62377                 return;
62378             }
62379
62380             // some descriptions are just fixed text
62381             if (!errorTemplate.regex) { return; }
62382
62383             // regex pattern should match description with variable details captured
62384             var errorRegex = new RegExp(errorTemplate.regex, 'i');
62385             var errorMatch = errorRegex.exec(d.description);
62386             if (!errorMatch) {
62387                 /* eslint-disable no-console */
62388                 console.log('Unmatched: ', d.which_type);
62389                 console.log('  ', d.description);
62390                 console.log('  ', errorRegex);
62391                 /* eslint-enable no-console */
62392                 return;
62393             }
62394
62395             for (var i = 1; i < errorMatch.length; i++) {   // skip first
62396                 var capture = errorMatch[i];
62397                 var idType;
62398
62399                 idType = 'IDs' in errorTemplate ? errorTemplate.IDs[i-1] : '';
62400                 if (idType && capture) {   // link IDs if present in the capture
62401                     capture = parseError(capture, idType);
62402                 } else if (htmlRegex.test(capture)) {   // escape any html in non-IDs
62403                     capture = '\\' +  capture + '\\';
62404                 } else {
62405                     var compare = capture.toLowerCase();
62406                     if (localizeStrings[compare]) {   // some replacement strings can be localized
62407                         capture = t('QA.keepRight.error_parts.' + localizeStrings[compare]);
62408                     }
62409                 }
62410
62411                 replacements['var' + i] = capture;
62412             }
62413
62414             return replacements;
62415         }
62416
62417
62418         function parseError(capture, idType) {
62419             var compare = capture.toLowerCase();
62420             if (localizeStrings[compare]) {   // some replacement strings can be localized
62421                 capture = t('QA.keepRight.error_parts.' + localizeStrings[compare]);
62422             }
62423
62424             switch (idType) {
62425                 // link a string like "this node"
62426                 case 'this':
62427                     capture = linkErrorObject(capture);
62428                     break;
62429
62430                 case 'url':
62431                     capture = linkURL(capture);
62432                     break;
62433
62434                 // link an entity ID
62435                 case 'n':
62436                 case 'w':
62437                 case 'r':
62438                     capture = linkEntity(idType + capture);
62439                     break;
62440
62441                 // some errors have more complex ID lists/variance
62442                 case '20':
62443                     capture = parse20(capture);
62444                     break;
62445                 case '211':
62446                     capture = parse211(capture);
62447                     break;
62448                 case '231':
62449                     capture = parse231(capture);
62450                     break;
62451                 case '294':
62452                     capture = parse294(capture);
62453                     break;
62454                 case '370':
62455                     capture = parse370(capture);
62456                     break;
62457             }
62458
62459             return capture;
62460
62461
62462             function linkErrorObject(d) {
62463                 return '<a class="error_object_link">' + d + '</a>';
62464             }
62465
62466             function linkEntity(d) {
62467                 return '<a class="error_entity_link">' + d + '</a>';
62468             }
62469
62470             function linkURL(d) {
62471                 return '<a class="kr_external_link" target="_blank" href="' + d + '">' + d + '</a>';
62472             }
62473
62474             // arbitrary node list of form: #ID, #ID, #ID...
62475             function parse211(capture) {
62476                 var newList = [];
62477                 var items = capture.split(', ');
62478
62479                 items.forEach(function(item) {
62480                     // ID has # at the front
62481                     var id = linkEntity('n' + item.slice(1));
62482                     newList.push(id);
62483                 });
62484
62485                 return newList.join(', ');
62486             }
62487
62488             // arbitrary way list of form: #ID(layer),#ID(layer),#ID(layer)...
62489             function parse231(capture) {
62490                 var newList = [];
62491                 // unfortunately 'layer' can itself contain commas, so we split on '),'
62492                 var items = capture.split('),');
62493
62494                 items.forEach(function(item) {
62495                     var match = item.match(/\#(\d+)\((.+)\)?/);
62496                     if (match !== null && match.length > 2) {
62497                         newList.push(linkEntity('w' + match[1]) + ' ' +
62498                             t('QA.keepRight.errorTypes.231.layer', { layer: match[2] })
62499                         );
62500                     }
62501                 });
62502
62503                 return newList.join(', ');
62504             }
62505
62506             // arbitrary node/relation list of form: from node #ID,to relation #ID,to node #ID...
62507             function parse294(capture) {
62508                 var newList = [];
62509                 var items = capture.split(',');
62510
62511                 items.forEach(function(item) {
62512                     var role;
62513                     var idType;
62514                     var id;
62515
62516                     // item of form "from/to node/relation #ID"
62517                     item = item.split(' ');
62518
62519                     // to/from role is more clear in quotes
62520                     role = '"' + item[0] + '"';
62521
62522                     // first letter of node/relation provides the type
62523                     idType = item[1].slice(0,1);
62524
62525                     // ID has # at the front
62526                     id = item[2].slice(1);
62527                     id = linkEntity(idType + id);
62528
62529                     item = [role, item[1], id].join(' ');
62530                     newList.push(item);
62531                 });
62532
62533                 return newList.join(', ');
62534             }
62535
62536             // may or may not include the string "(including the name 'name')"
62537             function parse370(capture) {
62538                 if (!capture) { return ''; }
62539
62540                 var match = capture.match(/\(including the name (\'.+\')\)/);
62541                 if (match !== null && match.length) {
62542                     return t('QA.keepRight.errorTypes.370.including_the_name', { name: match[1] });
62543                 }
62544                 return '';
62545             }
62546
62547             // arbitrary node list of form: #ID,#ID,#ID...
62548             function parse20(capture) {
62549                 var newList = [];
62550                 var items = capture.split(',');
62551
62552                 items.forEach(function(item) {
62553                     // ID has # at the front
62554                     var id = linkEntity('n' + item.slice(1));
62555                     newList.push(id);
62556                 });
62557
62558                 return newList.join(', ');
62559             }
62560         }
62561
62562
62563         var serviceKeepRight = {
62564             init: function() {
62565                 if (!_krCache) {
62566                     this.reset();
62567                 }
62568
62569                 this.event = utilRebind(this, dispatch$1, 'on');
62570             },
62571
62572             reset: function() {
62573                 if (_krCache) {
62574                     Object.values(_krCache.inflightTile).forEach(abortRequest);
62575                 }
62576
62577                 _krCache = {
62578                     data: {},
62579                     loadedTile: {},
62580                     inflightTile: {},
62581                     inflightPost: {},
62582                     closed: {},
62583                     rtree: new RBush()
62584                 };
62585             },
62586
62587
62588             // KeepRight API:  http://osm.mueschelsoft.de/keepright/interfacing.php
62589             loadErrors: function(projection) {
62590                 var options = { format: 'geojson' };
62591                 var rules = _krRuleset.join();
62592
62593                 // determine the needed tiles to cover the view
62594                 var tiles = tiler
62595                     .zoomExtent([_krZoom, _krZoom])
62596                     .getTiles(projection);
62597
62598                 // abort inflight requests that are no longer needed
62599                 abortUnwantedRequests(_krCache, tiles);
62600
62601                 // issue new requests..
62602                 tiles.forEach(function(tile) {
62603                     if (_krCache.loadedTile[tile.id] || _krCache.inflightTile[tile.id]) { return; }
62604
62605                     var rect = tile.extent.rectangle();
62606                     var params = Object.assign({}, options, { left: rect[0], bottom: rect[3], right: rect[2], top: rect[1] });
62607                     var url = _krUrlRoot + 'export.php?' + utilQsString(params) + '&ch=' + rules;
62608
62609                     var controller = new AbortController();
62610                     _krCache.inflightTile[tile.id] = controller;
62611
62612                     d3_json(url, { signal: controller.signal })
62613                         .then(function(data) {
62614                             delete _krCache.inflightTile[tile.id];
62615                             _krCache.loadedTile[tile.id] = true;
62616                             if (!data || !data.features || !data.features.length) {
62617                                 throw new Error('No Data');
62618                             }
62619
62620                             data.features.forEach(function(feature) {
62621                                 var loc = feature.geometry.coordinates;
62622                                 var props = feature.properties;
62623
62624                                 // if there is a parent, save its error type e.g.:
62625                                 //  Error 191 = "highway-highway"
62626                                 //  Error 190 = "intersections without junctions"  (parent)
62627                                 var errorType = props.error_type;
62628                                 var errorTemplate = errorTypes[errorType];
62629                                 var parentErrorType = (Math.floor(errorType / 10) * 10).toString();
62630
62631                                 // try to handle error type directly, fallback to parent error type.
62632                                 var whichType = errorTemplate ? errorType : parentErrorType;
62633                                 var whichTemplate = errorTypes[whichType];
62634
62635                                 // Rewrite a few of the errors at this point..
62636                                 // This is done to make them easier to linkify and translate.
62637                                 switch (whichType) {
62638                                     case '170':
62639                                         props.description = 'This feature has a FIXME tag: ' + props.description;
62640                                         break;
62641                                     case '292':
62642                                     case '293':
62643                                         props.description = props.description.replace('A turn-', 'This turn-');
62644                                         break;
62645                                     case '294':
62646                                     case '295':
62647                                     case '296':
62648                                     case '297':
62649                                     case '298':
62650                                         props.description = 'This turn-restriction~' + props.description;
62651                                         break;
62652                                     case '300':
62653                                         props.description = 'This highway is missing a maxspeed tag';
62654                                         break;
62655                                     case '411':
62656                                     case '412':
62657                                     case '413':
62658                                         props.description = 'This feature~' + props.description;
62659                                         break;
62660                                 }
62661
62662                                 // - move markers slightly so it doesn't obscure the geometry,
62663                                 // - then move markers away from other coincident markers
62664                                 var coincident = false;
62665                                 do {
62666                                     // first time, move marker up. after that, move marker right.
62667                                     var delta = coincident ? [0.00001, 0] : [0, 0.00001];
62668                                     loc = geoVecAdd(loc, delta);
62669                                     var bbox = geoExtent(loc).bbox();
62670                                     coincident = _krCache.rtree.search(bbox).length;
62671                                 } while (coincident);
62672
62673                                 var d = new qaError({
62674                                     // Required values
62675                                     loc: loc,
62676                                     service: 'keepRight',
62677                                     error_type: errorType,
62678                                     // Extra values for this service
62679                                     id: props.error_id,
62680                                     comment: props.comment || null,
62681                                     description: props.description || '',
62682                                     error_id: props.error_id,
62683                                     which_type: whichType,
62684                                     parent_error_type: parentErrorType,
62685                                     severity: whichTemplate.severity || 'error',
62686                                     object_id: props.object_id,
62687                                     object_type: props.object_type,
62688                                     schema: props.schema,
62689                                     title: props.title
62690                                 });
62691
62692                                 d.replacements = tokenReplacements(d);
62693
62694                                 _krCache.data[d.id] = d;
62695                                 _krCache.rtree.insert(encodeErrorRtree(d));
62696                             });
62697
62698                             dispatch$1.call('loaded');
62699                         })
62700                         .catch(function() {
62701                             delete _krCache.inflightTile[tile.id];
62702                             _krCache.loadedTile[tile.id] = true;
62703                         });
62704
62705                 });
62706             },
62707
62708
62709             postKeepRightUpdate: function(d, callback) {
62710                 if (_krCache.inflightPost[d.id]) {
62711                     return callback({ message: 'Error update already inflight', status: -2 }, d);
62712                 }
62713
62714                 var that = this;
62715                 var params = { schema: d.schema, id: d.error_id };
62716
62717                 if (d.state) {
62718                     params.st = d.state;
62719                 }
62720                 if (d.newComment !== undefined) {
62721                     params.co = d.newComment;
62722                 }
62723
62724                 // NOTE: This throws a CORS err, but it seems successful.
62725                 // We don't care too much about the response, so this is fine.
62726                 var url = _krUrlRoot + 'comment.php?' + utilQsString(params);
62727
62728                 var controller = new AbortController();
62729                 _krCache.inflightPost[d.id] = controller;
62730
62731                 fetch(url, { method: 'POST', signal: controller.signal })
62732                     .then(function(response) {
62733                         delete _krCache.inflightPost[d.id];
62734                         if (!response.ok) {
62735                             throw new Error(response.status + ' ' + response.statusText);
62736                         }
62737
62738                         if (d.state === 'ignore') {   // ignore permanently (false positive)
62739                             that.removeError(d);
62740
62741                         } else if (d.state === 'ignore_t') {  // ignore temporarily (error fixed)
62742                             that.removeError(d);
62743                             _krCache.closed[d.schema + ':' + d.error_id] = true;
62744
62745                         } else {
62746                             d = that.replaceError(d.update({
62747                                 comment: d.newComment,
62748                                 newComment: undefined,
62749                                 state: undefined
62750                             }));
62751                         }
62752
62753                         if (callback) { callback(null, d); }
62754                     })
62755                     .catch(function(err) {
62756                         delete _krCache.inflightPost[d.id];
62757                         if (callback) { callback(err.message); }
62758                     });
62759             },
62760
62761
62762             // get all cached errors covering the viewport
62763             getErrors: function(projection) {
62764                 var viewport = projection.clipExtent();
62765                 var min = [viewport[0][0], viewport[1][1]];
62766                 var max = [viewport[1][0], viewport[0][1]];
62767                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
62768
62769                 return _krCache.rtree.search(bbox).map(function(d) {
62770                     return d.data;
62771                 });
62772             },
62773
62774
62775             // get a single error from the cache
62776             getError: function(id) {
62777                 return _krCache.data[id];
62778             },
62779
62780
62781             // replace a single error in the cache
62782             replaceError: function(error) {
62783                 if (!(error instanceof qaError) || !error.id) { return; }
62784
62785                 _krCache.data[error.id] = error;
62786                 updateRtree(encodeErrorRtree(error), true); // true = replace
62787                 return error;
62788             },
62789
62790
62791             // remove a single error from the cache
62792             removeError: function(error) {
62793                 if (!(error instanceof qaError) || !error.id) { return; }
62794
62795                 delete _krCache.data[error.id];
62796                 updateRtree(encodeErrorRtree(error), false); // false = remove
62797             },
62798
62799
62800             errorURL: function(error) {
62801                 return _krUrlRoot + 'report_map.php?schema=' + error.schema + '&error=' + error.id;
62802             },
62803
62804
62805             // Get an array of errors closed during this session.
62806             // Used to populate `closed:keepright` changeset tag
62807             getClosedIDs: function() {
62808                 return Object.keys(_krCache.closed).sort();
62809             }
62810
62811         };
62812
62813         var tiler$1 = utilTiler();
62814         var dispatch$2 = dispatch('loaded');
62815
62816         var _erCache;
62817         var _erZoom = 14;
62818
62819         var _impOsmUrls = {
62820             ow: 'https://grab.community.improve-osm.org/directionOfFlowService',
62821             mr: 'https://grab.community.improve-osm.org/missingGeoService',
62822             tr: 'https://grab.community.improve-osm.org/turnRestrictionService'
62823         };
62824
62825         function abortRequest$1(i) {
62826             Object.values(i).forEach(function(controller) {
62827                 if (controller) {
62828                     controller.abort();
62829                 }
62830             });
62831         }
62832
62833         function abortUnwantedRequests$1(cache, tiles) {
62834             Object.keys(cache.inflightTile).forEach(function(k) {
62835                 var wanted = tiles.find(function(tile) { return k === tile.id; });
62836                 if (!wanted) {
62837                     abortRequest$1(cache.inflightTile[k]);
62838                     delete cache.inflightTile[k];
62839                 }
62840             });
62841         }
62842
62843
62844         function encodeErrorRtree$1(d) {
62845             return { minX: d.loc[0], minY: d.loc[1], maxX: d.loc[0], maxY: d.loc[1], data: d };
62846         }
62847
62848
62849         // replace or remove error from rtree
62850         function updateRtree$1(item, replace) {
62851             _erCache.rtree.remove(item, function isEql(a, b) {
62852                 return a.data.id === b.data.id;
62853             });
62854
62855             if (replace) {
62856                 _erCache.rtree.insert(item);
62857             }
62858         }
62859
62860         function linkErrorObject(d) {
62861             return '<a class="error_object_link">' + d + '</a>';
62862         }
62863
62864         function linkEntity(d) {
62865             return '<a class="error_entity_link">' + d + '</a>';
62866         }
62867
62868         function pointAverage(points) {
62869             if (points.length) {
62870                 var sum = points.reduce(function(acc, point) {
62871                     return geoVecAdd(acc, [point.lon, point.lat]);
62872                 }, [0,0]);
62873                 return geoVecScale(sum, 1 / points.length);
62874             } else {
62875                 return [0,0];
62876             }
62877         }
62878
62879         function relativeBearing(p1, p2) {
62880             var angle = Math.atan2(p2.lon - p1.lon, p2.lat - p1.lat);
62881             if (angle < 0) {
62882                 angle += 2 * Math.PI;
62883             }
62884
62885             // Return degrees
62886             return angle * 180 / Math.PI;
62887         }
62888
62889         // Assuming range [0,360)
62890         function cardinalDirection(bearing) {
62891             var dir = 45 * Math.round(bearing / 45);
62892             var compass = {
62893                 0: 'north',
62894                 45: 'northeast',
62895                 90: 'east',
62896                 135: 'southeast',
62897                 180: 'south',
62898                 225: 'southwest',
62899                 270: 'west',
62900                 315: 'northwest',
62901                 360: 'north'
62902             };
62903
62904             return t('QA.improveOSM.directions.' + compass[dir]);
62905         }
62906
62907         // Errors shouldn't obscure eachother
62908         function preventCoincident(loc, bumpUp) {
62909             var coincident = false;
62910             do {
62911                 // first time, move marker up. after that, move marker right.
62912                 var delta = coincident ? [0.00001, 0] : (bumpUp ? [0, 0.00001] : [0, 0]);
62913                 loc = geoVecAdd(loc, delta);
62914                 var bbox = geoExtent(loc).bbox();
62915                 coincident = _erCache.rtree.search(bbox).length;
62916             } while (coincident);
62917
62918             return loc;
62919         }
62920
62921         var serviceImproveOSM = {
62922             init: function() {
62923                 if (!_erCache) {
62924                     this.reset();
62925                 }
62926
62927                 this.event = utilRebind(this, dispatch$2, 'on');
62928             },
62929
62930             reset: function() {
62931                 if (_erCache) {
62932                     Object.values(_erCache.inflightTile).forEach(abortRequest$1);
62933                 }
62934                 _erCache = {
62935                     data: {},
62936                     loadedTile: {},
62937                     inflightTile: {},
62938                     inflightPost: {},
62939                     closed: {},
62940                     rtree: new RBush()
62941                 };
62942             },
62943
62944             loadErrors: function(projection) {
62945                 var options = {
62946                     client: 'iD',
62947                     status: 'OPEN',
62948                     zoom: '19' // Use a high zoom so that clusters aren't returned
62949                 };
62950
62951                 // determine the needed tiles to cover the view
62952                 var tiles = tiler$1
62953                     .zoomExtent([_erZoom, _erZoom])
62954                     .getTiles(projection);
62955
62956                 // abort inflight requests that are no longer needed
62957                 abortUnwantedRequests$1(_erCache, tiles);
62958
62959                 // issue new requests..
62960                 tiles.forEach(function(tile) {
62961                     if (_erCache.loadedTile[tile.id] || _erCache.inflightTile[tile.id]) { return; }
62962
62963                     var rect = tile.extent.rectangle();
62964                     var params = Object.assign({}, options, { east: rect[0], south: rect[3], west: rect[2], north: rect[1] });
62965
62966                     // 3 separate requests to store for each tile
62967                     var requests = {};
62968
62969                     Object.keys(_impOsmUrls).forEach(function(k) {
62970                         var v = _impOsmUrls[k];
62971                         // We exclude WATER from missing geometry as it doesn't seem useful
62972                         // We use most confident one-way and turn restrictions only, still have false positives
62973                         var kParams = Object.assign({},
62974                             params,
62975                             (k === 'mr') ? { type: 'PARKING,ROAD,BOTH,PATH' } : { confidenceLevel: 'C1' }
62976                         );
62977                         var url = v + '/search?' + utilQsString(kParams);
62978
62979                         var controller = new AbortController();
62980                         requests[k] = controller;
62981
62982                         d3_json(url, { signal: controller.signal })
62983                             .then(function(data) {
62984                                 delete _erCache.inflightTile[tile.id][k];
62985                                 if (!Object.keys(_erCache.inflightTile[tile.id]).length) {
62986                                     delete _erCache.inflightTile[tile.id];
62987                                     _erCache.loadedTile[tile.id] = true;
62988                                 }
62989
62990                                 // Road segments at high zoom == oneways
62991                                 if (data.roadSegments) {
62992                                     data.roadSegments.forEach(function(feature) {
62993                                         // Position error at the approximate middle of the segment
62994                                         var points = feature.points;
62995                                         var mid = points.length / 2;
62996                                         var loc;
62997
62998                                         // Even number of points, find midpoint of the middle two
62999                                         // Odd number of points, use position of very middle point
63000                                         if (mid % 1 === 0) {
63001                                             loc = pointAverage([points[mid - 1], points[mid]]);
63002                                         } else {
63003                                             mid = points[Math.floor(mid)];
63004                                             loc = [mid.lon, mid.lat];
63005                                         }
63006
63007                                         // One-ways can land on same segment in opposite direction
63008                                         loc = preventCoincident(loc, false);
63009
63010                                         var d = new qaError({
63011                                             // Info required for every error
63012                                             loc: loc,
63013                                             service: 'improveOSM',
63014                                             error_type: k,
63015                                             // Extra details needed for this service
63016                                             error_key: k,
63017                                             identifier: { // this is used to post changes to the error
63018                                                 wayId: feature.wayId,
63019                                                 fromNodeId: feature.fromNodeId,
63020                                                 toNodeId: feature.toNodeId
63021                                             },
63022                                             object_id: feature.wayId,
63023                                             object_type: 'way',
63024                                             status: feature.status
63025                                         });
63026
63027                                         // Variables used in the description
63028                                         d.replacements = {
63029                                             percentage: feature.percentOfTrips,
63030                                             num_trips: feature.numberOfTrips,
63031                                             highway: linkErrorObject(t('QA.keepRight.error_parts.highway')),
63032                                             from_node: linkEntity('n' + feature.fromNodeId),
63033                                             to_node: linkEntity('n' + feature.toNodeId)
63034                                         };
63035
63036                                         _erCache.data[d.id] = d;
63037                                         _erCache.rtree.insert(encodeErrorRtree$1(d));
63038                                     });
63039                                 }
63040
63041                                 // Tiles at high zoom == missing roads
63042                                 if (data.tiles) {
63043                                     data.tiles.forEach(function(feature) {
63044                                         var geoType = feature.type.toLowerCase();
63045
63046                                         // Average of recorded points should land on the missing geometry
63047                                         // Missing geometry could happen to land on another error
63048                                         var loc = pointAverage(feature.points);
63049                                         loc = preventCoincident(loc, false);
63050
63051                                         var d = new qaError({
63052                                             // Info required for every error
63053                                             loc: loc,
63054                                             service: 'improveOSM',
63055                                             error_type: k + '-' + geoType,
63056                                             // Extra details needed for this service
63057                                             error_key: k,
63058                                             identifier: { x: feature.x, y: feature.y },
63059                                             status: feature.status
63060                                         });
63061
63062                                         d.replacements = {
63063                                             num_trips: feature.numberOfTrips,
63064                                             geometry_type: t('QA.improveOSM.geometry_types.' + geoType)
63065                                         };
63066
63067                                         // -1 trips indicates data came from a 3rd party
63068                                         if (feature.numberOfTrips === -1) {
63069                                             d.desc = t('QA.improveOSM.error_types.mr.description_alt', d.replacements);
63070                                         }
63071
63072                                         _erCache.data[d.id] = d;
63073                                         _erCache.rtree.insert(encodeErrorRtree$1(d));
63074                                     });
63075                                 }
63076
63077                                 // Entities at high zoom == turn restrictions
63078                                 if (data.entities) {
63079                                     data.entities.forEach(function(feature) {
63080                                         // Turn restrictions could be missing at same junction
63081                                         // We also want to bump the error up so node is accessible
63082                                         var loc = feature.point;
63083                                         loc = preventCoincident([loc.lon, loc.lat], true);
63084
63085                                         // Elements are presented in a strange way
63086                                         var ids = feature.id.split(',');
63087                                         var from_way = ids[0];
63088                                         var via_node = ids[3];
63089                                         var to_way = ids[2].split(':')[1];
63090
63091                                         var d = new qaError({
63092                                             // Info required for every error
63093                                             loc: loc,
63094                                             service: 'improveOSM',
63095                                             error_type: k,
63096                                             // Extra details needed for this service
63097                                             error_key: k,
63098                                             identifier: feature.id,
63099                                             object_id: via_node,
63100                                             object_type: 'node',
63101                                             status: feature.status
63102                                         });
63103
63104                                         // Travel direction along from_way clarifies the turn restriction
63105                                         var p1 = feature.segments[0].points[0];
63106                                         var p2 = feature.segments[0].points[1];
63107
63108                                         var dir_of_travel = cardinalDirection(relativeBearing(p1, p2));
63109
63110                                         // Variables used in the description
63111                                         d.replacements = {
63112                                             num_passed: feature.numberOfPasses,
63113                                             num_trips: feature.segments[0].numberOfTrips,
63114                                             turn_restriction: feature.turnType.toLowerCase(),
63115                                             from_way: linkEntity('w' + from_way),
63116                                             to_way: linkEntity('w' + to_way),
63117                                             travel_direction: dir_of_travel,
63118                                             junction: linkErrorObject(t('QA.keepRight.error_parts.this_node'))
63119                                         };
63120
63121                                         _erCache.data[d.id] = d;
63122                                         _erCache.rtree.insert(encodeErrorRtree$1(d));
63123                                         dispatch$2.call('loaded');
63124                                     });
63125                                 }
63126                             })
63127                             .catch(function() {
63128                                 delete _erCache.inflightTile[tile.id][k];
63129                                 if (!Object.keys(_erCache.inflightTile[tile.id]).length) {
63130                                     delete _erCache.inflightTile[tile.id];
63131                                     _erCache.loadedTile[tile.id] = true;
63132                                 }
63133                             });
63134                     });
63135
63136                     _erCache.inflightTile[tile.id] = requests;
63137                 });
63138             },
63139
63140             getComments: function(d, callback) {
63141                 // If comments already retrieved no need to do so again
63142                 if (d.comments !== undefined) {
63143                     if (callback) { callback({}, d); }
63144                     return;
63145                 }
63146
63147                 var key = d.error_key;
63148                 var qParams = {};
63149
63150                 if (key === 'ow') {
63151                     qParams = d.identifier;
63152                 } else if (key === 'mr') {
63153                     qParams.tileX = d.identifier.x;
63154                     qParams.tileY = d.identifier.y;
63155                 } else if (key === 'tr') {
63156                     qParams.targetId = d.identifier;
63157                 }
63158
63159                 var url = _impOsmUrls[key] + '/retrieveComments?' + utilQsString(qParams);
63160
63161                 var that = this;
63162                 d3_json(url)
63163                     .then(function(data) {
63164                         // Assign directly for immediate use in the callback
63165                         // comments are served newest to oldest
63166                         d.comments = data.comments ? data.comments.reverse() : [];
63167                         that.replaceError(d);
63168                         if (callback) { callback(null, d); }
63169                     })
63170                     .catch(function(err) {
63171                         if (callback) { callback(err.message); }
63172                     });
63173             },
63174
63175             postUpdate: function(d, callback) {
63176                 if (!serviceOsm.authenticated()) { // Username required in payload
63177                     return callback({ message: 'Not Authenticated', status: -3}, d);
63178                 }
63179                 if (_erCache.inflightPost[d.id]) {
63180                     return callback({ message: 'Error update already inflight', status: -2 }, d);
63181                 }
63182
63183                 var that = this;
63184
63185                 // Payload can only be sent once username is established
63186                 serviceOsm.userDetails(sendPayload);
63187
63188                 function sendPayload(err, user) {
63189                     if (err) { return callback(err, d); }
63190
63191                     var key = d.error_key;
63192                     var url = _impOsmUrls[key] + '/comment';
63193                     var payload = {
63194                         username: user.display_name,
63195                         targetIds: [ d.identifier ]
63196                     };
63197
63198                     if (d.newStatus !== undefined) {
63199                         payload.status = d.newStatus;
63200                         payload.text = 'status changed';
63201                     }
63202
63203                     // Comment take place of default text
63204                     if (d.newComment !== undefined) {
63205                         payload.text = d.newComment;
63206                     }
63207
63208                     var controller = new AbortController();
63209                     _erCache.inflightPost[d.id] = controller;
63210
63211                     var options = {
63212                         method: 'POST',
63213                         signal: controller.signal,
63214                         body: JSON.stringify(payload)
63215                     };
63216
63217                      d3_json(url, options)
63218                         .then(function() {
63219                             delete _erCache.inflightPost[d.id];
63220
63221                             // Just a comment, update error in cache
63222                             if (d.newStatus === undefined) {
63223                                 var now = new Date();
63224                                 var comments = d.comments ? d.comments : [];
63225
63226                                 comments.push({
63227                                     username: payload.username,
63228                                     text: payload.text,
63229                                     timestamp: now.getTime() / 1000
63230                                 });
63231
63232                                 that.replaceError(d.update({
63233                                     comments: comments,
63234                                     newComment: undefined
63235                                 }));
63236                             } else {
63237                                 that.removeError(d);
63238                                 if (d.newStatus === 'SOLVED') {
63239                                     // No pretty identifier, so we just use coordinates
63240                                     var closedID = d.loc[1].toFixed(5) + '/' + d.loc[0].toFixed(5);
63241                                     _erCache.closed[key + ':' + closedID] = true;
63242                                 }
63243                             }
63244                             if (callback) { callback(null, d); }
63245                         })
63246                         .catch(function(err) {
63247                             delete _erCache.inflightPost[d.id];
63248                             if (callback) { callback(err.message); }
63249                         });
63250                 }
63251             },
63252
63253
63254             // get all cached errors covering the viewport
63255             getErrors: function(projection) {
63256                 var viewport = projection.clipExtent();
63257                 var min = [viewport[0][0], viewport[1][1]];
63258                 var max = [viewport[1][0], viewport[0][1]];
63259                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
63260
63261                 return _erCache.rtree.search(bbox).map(function(d) {
63262                     return d.data;
63263                 });
63264             },
63265
63266             // get a single error from the cache
63267             getError: function(id) {
63268                 return _erCache.data[id];
63269             },
63270
63271             // replace a single error in the cache
63272             replaceError: function(error) {
63273                 if (!(error instanceof qaError) || !error.id) { return; }
63274
63275                 _erCache.data[error.id] = error;
63276                 updateRtree$1(encodeErrorRtree$1(error), true); // true = replace
63277                 return error;
63278             },
63279
63280             // remove a single error from the cache
63281             removeError: function(error) {
63282                 if (!(error instanceof qaError) || !error.id) { return; }
63283
63284                 delete _erCache.data[error.id];
63285                 updateRtree$1(encodeErrorRtree$1(error), false); // false = remove
63286             },
63287
63288             // Used to populate `closed:improveosm` changeset tag
63289             getClosedIDs: function() {
63290                 return Object.keys(_erCache.closed).sort();
63291             }
63292         };
63293
63294         /*
63295             A standalone SVG element that contains only a `defs` sub-element. To be
63296             used once globally, since defs IDs must be unique within a document.
63297         */
63298         function svgDefs(context) {
63299
63300             function drawDefs(selection) {
63301                 var defs = selection.append('defs');
63302
63303                 // add markers
63304                 defs
63305                     .append('marker')
63306                     .attr('id', 'oneway-marker')
63307                     .attr('viewBox', '0 0 10 5')
63308                     .attr('refX', 2.5)
63309                     .attr('refY', 2.5)
63310                     .attr('markerWidth', 2)
63311                     .attr('markerHeight', 2)
63312                     .attr('markerUnits', 'strokeWidth')
63313                     .attr('orient', 'auto')
63314                     .append('path')
63315                     .attr('class', 'oneway-marker-path')
63316                     .attr('d', 'M 5,3 L 0,3 L 0,2 L 5,2 L 5,0 L 10,2.5 L 5,5 z')
63317                     .attr('stroke', 'none')
63318                     .attr('fill', '#000')
63319                     .attr('opacity', '0.75');
63320
63321                 // SVG markers have to be given a colour where they're defined
63322                 // (they can't inherit it from the line they're attached to),
63323                 // so we need to manually define markers for each color of tag
63324                 // (also, it's slightly nicer if we can control the
63325                 // positioning for different tags)
63326                 function addSidedMarker(name, color, offset) {
63327                     defs
63328                         .append('marker')
63329                         .attr('id', 'sided-marker-' + name)
63330                         .attr('viewBox', '0 0 2 2')
63331                         .attr('refX', 1)
63332                         .attr('refY', -offset)
63333                         .attr('markerWidth', 1.5)
63334                         .attr('markerHeight', 1.5)
63335                         .attr('markerUnits', 'strokeWidth')
63336                         .attr('orient', 'auto')
63337                         .append('path')
63338                         .attr('class', 'sided-marker-path sided-marker-' + name + '-path')
63339                         .attr('d', 'M 0,0 L 1,1 L 2,0 z')
63340                         .attr('stroke', 'none')
63341                         .attr('fill', color);
63342                 }
63343                 addSidedMarker('natural', 'rgb(170, 170, 170)', 0);
63344                 // for a coastline, the arrows are (somewhat unintuitively) on
63345                 // the water side, so let's color them blue (with a gap) to
63346                 // give a stronger indication
63347                 addSidedMarker('coastline', '#77dede', 1);
63348                 addSidedMarker('waterway', '#77dede', 1);
63349                 // barriers have a dashed line, and separating the triangle
63350                 // from the line visually suits that
63351                 addSidedMarker('barrier', '#ddd', 1);
63352                 addSidedMarker('man_made', '#fff', 0);
63353
63354                 defs
63355                     .append('marker')
63356                     .attr('id', 'viewfield-marker')
63357                     .attr('viewBox', '0 0 16 16')
63358                     .attr('refX', 8)
63359                     .attr('refY', 16)
63360                     .attr('markerWidth', 4)
63361                     .attr('markerHeight', 4)
63362                     .attr('markerUnits', 'strokeWidth')
63363                     .attr('orient', 'auto')
63364                     .append('path')
63365                     .attr('class', 'viewfield-marker-path')
63366                     .attr('d', 'M 6,14 C 8,13.4 8,13.4 10,14 L 16,3 C 12,0 4,0 0,3 z')
63367                     .attr('fill', '#333')
63368                     .attr('fill-opacity', '0.75')
63369                     .attr('stroke', '#fff')
63370                     .attr('stroke-width', '0.5px')
63371                     .attr('stroke-opacity', '0.75');
63372
63373                 defs
63374                     .append('marker')
63375                     .attr('id', 'viewfield-marker-wireframe')
63376                     .attr('viewBox', '0 0 16 16')
63377                     .attr('refX', 8)
63378                     .attr('refY', 16)
63379                     .attr('markerWidth', 4)
63380                     .attr('markerHeight', 4)
63381                     .attr('markerUnits', 'strokeWidth')
63382                     .attr('orient', 'auto')
63383                     .append('path')
63384                     .attr('class', 'viewfield-marker-path')
63385                     .attr('d', 'M 6,14 C 8,13.4 8,13.4 10,14 L 16,3 C 12,0 4,0 0,3 z')
63386                     .attr('fill', 'none')
63387                     .attr('stroke', '#fff')
63388                     .attr('stroke-width', '0.5px')
63389                     .attr('stroke-opacity', '0.75');
63390
63391                 // add patterns
63392                 var patterns = defs.selectAll('pattern')
63393                     .data([
63394                         // pattern name, pattern image name
63395                         ['beach', 'dots'],
63396                         ['construction', 'construction'],
63397                         ['cemetery', 'cemetery'],
63398                         ['cemetery_christian', 'cemetery_christian'],
63399                         ['cemetery_buddhist', 'cemetery_buddhist'],
63400                         ['cemetery_muslim', 'cemetery_muslim'],
63401                         ['cemetery_jewish', 'cemetery_jewish'],
63402                         ['farmland', 'farmland'],
63403                         ['farmyard', 'farmyard'],
63404                         ['forest', 'forest'],
63405                         ['forest_broadleaved', 'forest_broadleaved'],
63406                         ['forest_needleleaved', 'forest_needleleaved'],
63407                         ['forest_leafless', 'forest_leafless'],
63408                         ['golf_green', 'grass'],
63409                         ['grass', 'grass'],
63410                         ['landfill', 'landfill'],
63411                         ['meadow', 'grass'],
63412                         ['orchard', 'orchard'],
63413                         ['pond', 'pond'],
63414                         ['quarry', 'quarry'],
63415                         ['scrub', 'bushes'],
63416                         ['vineyard', 'vineyard'],
63417                         ['water_standing', 'lines'],
63418                         ['waves', 'waves'],
63419                         ['wetland', 'wetland'],
63420                         ['wetland_marsh', 'wetland_marsh'],
63421                         ['wetland_swamp', 'wetland_swamp'],
63422                         ['wetland_bog', 'wetland_bog'],
63423                         ['wetland_reedbed', 'wetland_reedbed']
63424                     ])
63425                     .enter()
63426                     .append('pattern')
63427                     .attr('id', function (d) { return 'pattern-' + d[0]; })
63428                     .attr('width', 32)
63429                     .attr('height', 32)
63430                     .attr('patternUnits', 'userSpaceOnUse');
63431
63432                 patterns
63433                     .append('rect')
63434                     .attr('x', 0)
63435                     .attr('y', 0)
63436                     .attr('width', 32)
63437                     .attr('height', 32)
63438                     .attr('class', function (d) { return 'pattern-color-' + d[0]; });
63439
63440                 patterns
63441                     .append('image')
63442                     .attr('x', 0)
63443                     .attr('y', 0)
63444                     .attr('width', 32)
63445                     .attr('height', 32)
63446                     .attr('xlink:href', function (d) {
63447                         return context.imagePath('pattern/' + d[1] + '.png');
63448                     });
63449
63450                 // add clip paths
63451                 defs.selectAll('clipPath')
63452                     .data([12, 18, 20, 32, 45])
63453                     .enter()
63454                     .append('clipPath')
63455                     .attr('id', function (d) { return 'clip-square-' + d; })
63456                     .append('rect')
63457                     .attr('x', 0)
63458                     .attr('y', 0)
63459                     .attr('width', function (d) { return d; })
63460                     .attr('height', function (d) { return d; });
63461
63462                 // add symbol spritesheets
63463                 defs
63464                     .call(drawDefs.addSprites, [
63465                         'iD-sprite', 'maki-sprite', 'temaki-sprite', 'fa-sprite', 'tnp-sprite', 'community-sprite'
63466                     ], true);
63467             }
63468
63469
63470             drawDefs.addSprites = function(selection, ids, overrideColors) {
63471                 var spritesheets = selection.selectAll('.spritesheet');
63472                 var currData = spritesheets.data();
63473                 var data = utilArrayUniq(currData.concat(ids));
63474
63475                 spritesheets
63476                     .data(data)
63477                     .enter()
63478                     .append('g')
63479                     .attr('class', function(d) { return 'spritesheet spritesheet-' + d; })
63480                     .each(function(d) {
63481                         var url = context.imagePath(d + '.svg');
63482                         var node = d3_select(this).node();
63483
63484                         svg(url)
63485                             .then(function(svg) {
63486                                 node.appendChild(
63487                                     d3_select(svg.documentElement).attr('id', d).node()
63488                                 );
63489                                 if (overrideColors && d !== 'iD-sprite') {   // allow icon colors to be overridden..
63490                                     d3_select(node).selectAll('path')
63491                                         .attr('fill', 'currentColor');
63492                                 }
63493                             })
63494                             .catch(function() {
63495                                 /* ignore */
63496                             });
63497                     });
63498             };
63499
63500
63501             return drawDefs;
63502         }
63503
63504         /* global Mapillary:false */
63505
63506
63507         var apibase = 'https://a.mapillary.com/v3/';
63508         var viewercss = 'mapillary-js/mapillary.min.css';
63509         var viewerjs = 'mapillary-js/mapillary.min.js';
63510         var clientId = 'NzNRM2otQkR2SHJzaXJmNmdQWVQ0dzo1ZWYyMmYwNjdmNDdlNmVi';
63511         var mapFeatureConfig = {
63512             organizationKey: 'FI3NAFfzQQgdF081TRdgTy',
63513             values: [
63514                 'construction--flat--crosswalk-plain',
63515                 'marking--discrete--crosswalk-zebra',
63516                 'object--banner',
63517                 'object--bench',
63518                 'object--bike-rack',
63519                 'object--billboard',
63520                 'object--catch-basin',
63521                 'object--cctv-camera',
63522                 'object--fire-hydrant',
63523                 'object--mailbox',
63524                 'object--manhole',
63525                 'object--phone-booth',
63526                 'object--sign--advertisement',
63527                 'object--sign--information',
63528                 'object--sign--store',
63529                 'object--street-light',
63530                 'object--support--utility-pole',
63531                 'object--traffic-light--*',
63532                 'object--traffic-light--pedestrians',
63533                 'object--trash-can'
63534             ].join(',')
63535         };
63536         var maxResults = 1000;
63537         var tileZoom = 14;
63538         var tiler$2 = utilTiler().zoomExtent([tileZoom, tileZoom]).skipNullIsland(true);
63539         var dispatch$3 = dispatch('loadedImages', 'loadedSigns', 'loadedMapFeatures', 'bearingChanged');
63540         var _mlyFallback = false;
63541         var _mlyCache;
63542         var _mlyClicks;
63543         var _mlySelectedImageKey;
63544         var _mlyViewer;
63545
63546
63547         function abortRequest$2(controller) {
63548             controller.abort();
63549         }
63550
63551
63552         function maxPageAtZoom(z) {
63553             if (z < 15)   { return 2; }
63554             if (z === 15) { return 5; }
63555             if (z === 16) { return 10; }
63556             if (z === 17) { return 20; }
63557             if (z === 18) { return 40; }
63558             if (z > 18)   { return 80; }
63559         }
63560
63561
63562         function loadTiles(which, url, projection) {
63563             var currZoom = Math.floor(geoScaleToZoom(projection.scale()));
63564             var tiles = tiler$2.getTiles(projection);
63565
63566             // abort inflight requests that are no longer needed
63567             var cache = _mlyCache[which];
63568             Object.keys(cache.inflight).forEach(function(k) {
63569                 var wanted = tiles.find(function(tile) { return k.indexOf(tile.id + ',') === 0; });
63570                 if (!wanted) {
63571                     abortRequest$2(cache.inflight[k]);
63572                     delete cache.inflight[k];
63573                 }
63574             });
63575
63576             tiles.forEach(function(tile) {
63577                 loadNextTilePage(which, currZoom, url, tile);
63578             });
63579         }
63580
63581
63582         function loadNextTilePage(which, currZoom, url, tile) {
63583             var cache = _mlyCache[which];
63584             var rect = tile.extent.rectangle();
63585             var maxPages = maxPageAtZoom(currZoom);
63586             var nextPage = cache.nextPage[tile.id] || 0;
63587             var nextURL = cache.nextURL[tile.id] || url +
63588                 utilQsString({
63589                     per_page: maxResults,
63590                     page: nextPage,
63591                     client_id: clientId,
63592                     bbox: [rect[0], rect[1], rect[2], rect[3]].join(','),
63593                 });
63594
63595             if (nextPage > maxPages) { return; }
63596
63597             var id = tile.id + ',' + String(nextPage);
63598             if (cache.loaded[id] || cache.inflight[id]) { return; }
63599
63600             var controller = new AbortController();
63601             cache.inflight[id] = controller;
63602
63603             var options = {
63604                 method: 'GET',
63605                 signal: controller.signal,
63606                 headers: { 'Content-Type': 'application/json' }
63607             };
63608
63609             fetch(nextURL, options)
63610                 .then(function(response) {
63611                     if (!response.ok) {
63612                         throw new Error(response.status + ' ' + response.statusText);
63613                     }
63614                     var linkHeader = response.headers.get('Link');
63615                     if (linkHeader) {
63616                         var pagination = parsePagination(linkHeader);
63617                         if (pagination.next) {
63618                             cache.nextURL[tile.id] = pagination.next;
63619                         }
63620                     }
63621                     return response.json();
63622                 })
63623                 .then(function(data) {
63624                     cache.loaded[id] = true;
63625                     delete cache.inflight[id];
63626                     if (!data || !data.features || !data.features.length) {
63627                         throw new Error('No Data');
63628                     }
63629
63630                     var features = data.features.map(function(feature) {
63631                         var loc = feature.geometry.coordinates;
63632                         var d;
63633
63634                         // An image (shown as a green dot on the map) is a single street photo with extra
63635                         // information such as location, camera angle (CA), camera model, and so on.
63636                         // Each image feature is a GeoJSON Point
63637                         if (which === 'images') {
63638                             d = {
63639                                 loc: loc,
63640                                 key: feature.properties.key,
63641                                 ca: feature.properties.ca,
63642                                 captured_at: feature.properties.captured_at,
63643                                 captured_by: feature.properties.username,
63644                                 pano: feature.properties.pano
63645                             };
63646
63647                             cache.forImageKey[d.key] = d;     // cache imageKey -> image
63648
63649                         // Mapillary organizes images as sequences. A sequence of images are continuously captured
63650                         // by a user at a give time. Sequences are shown on the map as green lines.
63651                         // Each sequence feature is a GeoJSON LineString
63652                         } else if (which === 'sequences') {
63653                             var sequenceKey = feature.properties.key;
63654                             cache.lineString[sequenceKey] = feature;           // cache sequenceKey -> lineString
63655                             feature.properties.coordinateProperties.image_keys.forEach(function(imageKey) {
63656                                 cache.forImageKey[imageKey] = sequenceKey;     // cache imageKey -> sequenceKey
63657                             });
63658                             return false;    // because no `d` data worth loading into an rbush
63659
63660                         // An image detection is a semantic pixel area on an image. The area could indicate
63661                         // sky, trees, sidewalk in the image. A detection can be a polygon, a bounding box, or a point.
63662                         // Each image_detection feature is a GeoJSON Point (located where the image was taken)
63663                         } else if (which === 'image_detections') {
63664                             d = {
63665                                 key: feature.properties.key,
63666                                 image_key: feature.properties.image_key,
63667                                 value: feature.properties.value,
63668                                 package: feature.properties.package,
63669                                 shape: feature.properties.shape
63670                             };
63671
63672                             // cache imageKey -> image_detections
63673                             if (!cache.forImageKey[d.image_key]) {
63674                                 cache.forImageKey[d.image_key] = [];
63675                             }
63676                             cache.forImageKey[d.image_key].push(d);
63677                             return false;    // because no `d` data worth loading into an rbush
63678
63679
63680                         // A map feature is a real world object that can be shown on a map. It could be any object
63681                         // recognized from images, manually added in images, or added on the map.
63682                         // Each map feature is a GeoJSON Point (located where the feature is)
63683                         } else if (which === 'map_features' || which === 'points') {
63684                             d = {
63685                                 loc: loc,
63686                                 key: feature.properties.key,
63687                                 value: feature.properties.value,
63688                                 package: feature.properties.package,
63689                                 detections: feature.properties.detections
63690                             };
63691                         }
63692
63693                         return {
63694                             minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
63695                         };
63696
63697                     }).filter(Boolean);
63698
63699                     if (cache.rtree && features) {
63700                         cache.rtree.load(features);
63701                     }
63702
63703                     if (data.features.length === maxResults) {  // more pages to load
63704                         cache.nextPage[tile.id] = nextPage + 1;
63705                         loadNextTilePage(which, currZoom, url, tile);
63706                     } else {
63707                         cache.nextPage[tile.id] = Infinity;     // no more pages to load
63708                     }
63709
63710                     if (which === 'images' || which === 'sequences') {
63711                         dispatch$3.call('loadedImages');
63712                     } else if (which === 'map_features') {
63713                         dispatch$3.call('loadedSigns');
63714                     } else if (which === 'points') {
63715                         dispatch$3.call('loadedMapFeatures');
63716                     }
63717                 })
63718                 .catch(function() {
63719                     cache.loaded[id] = true;
63720                     delete cache.inflight[id];
63721                 });
63722         }
63723
63724         // extract links to pages of API results
63725         function parsePagination(links) {
63726             return links.split(',').map(function(rel) {
63727                 var elements = rel.split(';');
63728                 if (elements.length === 2) {
63729                     return [
63730                         /<(.+)>/.exec(elements[0])[1],
63731                         /rel="(.+)"/.exec(elements[1])[1]
63732                     ];
63733                 } else {
63734                     return ['',''];
63735                 }
63736             }).reduce(function(pagination, val) {
63737                 pagination[val[1]] = val[0];
63738                 return pagination;
63739             }, {});
63740         }
63741
63742
63743         // partition viewport into higher zoom tiles
63744         function partitionViewport(projection) {
63745             var z = geoScaleToZoom(projection.scale());
63746             var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
63747             var tiler = utilTiler().zoomExtent([z2, z2]);
63748
63749             return tiler.getTiles(projection)
63750                 .map(function(tile) { return tile.extent; });
63751         }
63752
63753
63754         // no more than `limit` results per partition.
63755         function searchLimited(limit, projection, rtree) {
63756             limit = limit || 5;
63757
63758             return partitionViewport(projection)
63759                 .reduce(function(result, extent) {
63760                     var found = rtree.search(extent.bbox())
63761                         .slice(0, limit)
63762                         .map(function(d) { return d.data; });
63763
63764                     return (found.length ? result.concat(found) : result);
63765                 }, []);
63766         }
63767
63768
63769
63770         var serviceMapillary = {
63771
63772             init: function() {
63773                 if (!_mlyCache) {
63774                     this.reset();
63775                 }
63776
63777                 this.event = utilRebind(this, dispatch$3, 'on');
63778             },
63779
63780             reset: function() {
63781                 if (_mlyCache) {
63782                     Object.values(_mlyCache.images.inflight).forEach(abortRequest$2);
63783                     Object.values(_mlyCache.image_detections.inflight).forEach(abortRequest$2);
63784                     Object.values(_mlyCache.map_features.inflight).forEach(abortRequest$2);
63785                     Object.values(_mlyCache.points.inflight).forEach(abortRequest$2);
63786                     Object.values(_mlyCache.sequences.inflight).forEach(abortRequest$2);
63787                 }
63788
63789                 _mlyCache = {
63790                     images: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: new RBush(), forImageKey: {} },
63791                     image_detections: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, forImageKey: {} },
63792                     map_features: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: new RBush() },
63793                     points: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: new RBush() },
63794                     sequences: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: new RBush(), forImageKey: {}, lineString: {} }
63795                 };
63796
63797                 _mlySelectedImageKey = null;
63798                 _mlyClicks = [];
63799             },
63800
63801
63802             images: function(projection) {
63803                 var limit = 5;
63804                 return searchLimited(limit, projection, _mlyCache.images.rtree);
63805             },
63806
63807
63808             signs: function(projection) {
63809                 var limit = 5;
63810                 return searchLimited(limit, projection, _mlyCache.map_features.rtree);
63811             },
63812
63813
63814             mapFeatures: function(projection) {
63815                 var limit = 5;
63816                 return searchLimited(limit, projection, _mlyCache.points.rtree);
63817             },
63818
63819
63820             cachedImage: function(imageKey) {
63821                 return _mlyCache.images.forImageKey[imageKey];
63822             },
63823
63824
63825             sequences: function(projection) {
63826                 var viewport = projection.clipExtent();
63827                 var min = [viewport[0][0], viewport[1][1]];
63828                 var max = [viewport[1][0], viewport[0][1]];
63829                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
63830                 var sequenceKeys = {};
63831
63832                 // all sequences for images in viewport
63833                 _mlyCache.images.rtree.search(bbox)
63834                     .forEach(function(d) {
63835                         var sequenceKey = _mlyCache.sequences.forImageKey[d.data.key];
63836                         if (sequenceKey) {
63837                             sequenceKeys[sequenceKey] = true;
63838                         }
63839                     });
63840
63841                 // Return lineStrings for the sequences
63842                 return Object.keys(sequenceKeys).map(function(sequenceKey) {
63843                     return _mlyCache.sequences.lineString[sequenceKey];
63844                 });
63845             },
63846
63847
63848             signsSupported: function() {
63849                 return true;
63850             },
63851
63852
63853             loadImages: function(projection) {
63854                 loadTiles('images', apibase + 'images?sort_by=key&', projection);
63855                 loadTiles('sequences', apibase + 'sequences?sort_by=key&', projection);
63856             },
63857
63858
63859             loadSigns: function(projection) {
63860                 // if we are looking at signs, we'll actually need to fetch images too
63861                 loadTiles('images', apibase + 'images?sort_by=key&', projection);
63862                 loadTiles('map_features', apibase + 'map_features?layers=trafficsigns&min_nbr_image_detections=2&sort_by=key&', projection);
63863                 loadTiles('image_detections', apibase + 'image_detections?layers=trafficsigns&sort_by=key&', projection);
63864             },
63865
63866
63867             loadMapFeatures: function(projection) {
63868                 // if we are looking at signs, we'll actually need to fetch images too
63869                 loadTiles('images', apibase + 'images?sort_by=key', projection);
63870                 loadTiles('points', apibase + 'map_features?layers=points&min_nbr_image_detections=2&sort_by=key&shapes_by_organization_keys=' + mapFeatureConfig.organizationKey + '&' + 'values=' + mapFeatureConfig.values + '&', projection);
63871                 loadTiles('image_detections', apibase + 'image_detections?layers=points&sort_by=key&shapes_by_organization_keys=' + mapFeatureConfig.organizationKey + '&' + 'values=' + mapFeatureConfig.values + '&', projection);
63872             },
63873
63874
63875             loadViewer: function(context) {
63876                 // add mly-wrapper
63877                 var wrap = d3_select('#photoviewer').selectAll('.mly-wrapper')
63878                     .data([0]);
63879
63880                 wrap.enter()
63881                     .append('div')
63882                     .attr('id', 'mly')
63883                     .attr('class', 'photo-wrapper mly-wrapper')
63884                     .classed('hide', true);
63885
63886                 // load mapillary-viewercss
63887                 d3_select('head').selectAll('#mapillary-viewercss')
63888                     .data([0])
63889                     .enter()
63890                     .append('link')
63891                     .attr('id', 'mapillary-viewercss')
63892                     .attr('rel', 'stylesheet')
63893                     .attr('href', context.asset(viewercss));
63894
63895                 // load mapillary-viewerjs
63896                 d3_select('head').selectAll('#mapillary-viewerjs')
63897                     .data([0])
63898                     .enter()
63899                     .append('script')
63900                     .attr('id', 'mapillary-viewerjs')
63901                     .attr('src', context.asset(viewerjs));
63902
63903                 // load mapillary signs sprite
63904                 var defs = context.container().select('defs');
63905                 defs.call(svgDefs(context).addSprites, ['mapillary-sprite', 'mapillary-object-sprite'], false /* don't override colors */ );
63906
63907                 // Register viewer resize handler
63908                 context.ui().photoviewer.on('resize.mapillary', function() {
63909                     if (_mlyViewer) {
63910                         _mlyViewer.resize();
63911                     }
63912                 });
63913             },
63914
63915
63916             showViewer: function() {
63917                 var wrap = d3_select('#photoviewer')
63918                     .classed('hide', false);
63919
63920                 var isHidden = wrap.selectAll('.photo-wrapper.mly-wrapper.hide').size();
63921
63922                 if (isHidden && _mlyViewer) {
63923                     wrap
63924                         .selectAll('.photo-wrapper:not(.mly-wrapper)')
63925                         .classed('hide', true);
63926
63927                     wrap
63928                         .selectAll('.photo-wrapper.mly-wrapper')
63929                         .classed('hide', false);
63930
63931                     _mlyViewer.resize();
63932                 }
63933
63934                 return this;
63935             },
63936
63937
63938             hideViewer: function() {
63939                 _mlySelectedImageKey = null;
63940
63941                 if (!_mlyFallback && _mlyViewer) {
63942                     _mlyViewer.getComponent('sequence').stop();
63943                 }
63944
63945                 var viewer = d3_select('#photoviewer');
63946                 if (!viewer.empty()) { viewer.datum(null); }
63947
63948                 viewer
63949                     .classed('hide', true)
63950                     .selectAll('.photo-wrapper')
63951                     .classed('hide', true);
63952
63953                 d3_selectAll('.viewfield-group, .sequence, .icon-detected')
63954                     .classed('currentView', false);
63955
63956                 return this.setStyles(null, true);
63957             },
63958
63959
63960             parsePagination: parsePagination,
63961
63962
63963             updateViewer: function(imageKey, context) {
63964                 if (!imageKey) { return this; }
63965
63966                 if (!_mlyViewer) {
63967                     this.initViewer(imageKey, context);
63968                 } else {
63969                     _mlyViewer.moveToKey(imageKey)
63970                         .catch(function(e) { console.error('mly3', e); });  // eslint-disable-line no-console
63971                 }
63972
63973                 return this;
63974             },
63975
63976
63977             initViewer: function(imageKey, context) {
63978                 var that = this;
63979                 if (window.Mapillary && imageKey) {
63980                     var opts = {
63981                         baseImageSize: 320,
63982                         component: {
63983                             cover: false,
63984                             keyboard: false,
63985                             tag: true
63986                         }
63987                     };
63988
63989                     // Disable components requiring WebGL support
63990                     if (!Mapillary.isSupported() && Mapillary.isFallbackSupported()) {
63991                         _mlyFallback = true;
63992                         opts.component = {
63993                             cover: false,
63994                             direction: false,
63995                             imagePlane: false,
63996                             keyboard: false,
63997                             mouse: false,
63998                             sequence: false,
63999                             tag: false,
64000                             image: true,        // fallback
64001                             navigation: true    // fallback
64002                         };
64003                     }
64004
64005                     _mlyViewer = new Mapillary.Viewer('mly', clientId, null, opts);
64006                     _mlyViewer.on('nodechanged', nodeChanged);
64007                     _mlyViewer.on('bearingchanged', bearingChanged);
64008                     _mlyViewer.moveToKey(imageKey)
64009                         .catch(function(e) { console.error('mly3', e); });  // eslint-disable-line no-console
64010                 }
64011
64012                 // nodeChanged: called after the viewer has changed images and is ready.
64013                 //
64014                 // There is some logic here to batch up clicks into a _mlyClicks array
64015                 // because the user might click on a lot of markers quickly and nodechanged
64016                 // may be called out of order asychronously.
64017                 //
64018                 // Clicks are added to the array in `selectedImage` and removed here.
64019                 //
64020                 function nodeChanged(node) {
64021                     if (!_mlyFallback) {
64022                         _mlyViewer.getComponent('tag').removeAll();  // remove previous detections
64023                     }
64024
64025                     var clicks = _mlyClicks;
64026                     var index = clicks.indexOf(node.key);
64027                     var selectedKey = _mlySelectedImageKey;
64028
64029                     if (index > -1) {              // `nodechanged` initiated from clicking on a marker..
64030                         clicks.splice(index, 1);   // remove the click
64031                         // If `node.key` matches the current _mlySelectedImageKey, call `selectImage()`
64032                         // one more time to update the detections and attribution..
64033                         if (node.key === selectedKey) {
64034                             that.selectImage(_mlySelectedImageKey, true);
64035                         }
64036                     } else {             // `nodechanged` initiated from the Mapillary viewer controls..
64037                         var loc = node.computedLatLon ? [node.computedLatLon.lon, node.computedLatLon.lat] : [node.latLon.lon, node.latLon.lat];
64038                         context.map().centerEase(loc);
64039                         that.selectImage(node.key, true);
64040                     }
64041                 }
64042
64043                 function bearingChanged(e) {
64044                     dispatch$3.call('bearingChanged', undefined, e);
64045                 }
64046             },
64047
64048
64049             // Pass in the image key string as `imageKey`.
64050             // This allows images to be selected from places that dont have access
64051             // to the full image datum (like the street signs layer or the js viewer)
64052             selectImage: function(imageKey, fromViewer) {
64053
64054                 _mlySelectedImageKey = imageKey;
64055
64056                 // Note the datum could be missing, but we'll try to carry on anyway.
64057                 // There just might be a delay before user sees detections, captured_at, etc.
64058                 var d = _mlyCache.images.forImageKey[imageKey];
64059
64060                 var viewer = d3_select('#photoviewer');
64061                 if (!viewer.empty()) { viewer.datum(d); }
64062
64063                 imageKey = (d && d.key) || imageKey;
64064                 if (!fromViewer && imageKey) {
64065                     _mlyClicks.push(imageKey);
64066                 }
64067
64068                 this.setStyles(null, true);
64069
64070                 // if signs signs are shown, highlight the ones that appear in this image
64071                 d3_selectAll('.layer-mapillary-signs .icon-detected')
64072                     .classed('currentView', function(d) {
64073                         return d.detections.some(function(detection) {
64074                             return detection.image_key === imageKey;
64075                         });
64076                     });
64077
64078                 if (d) {
64079                     this.updateDetections(d);
64080                 }
64081
64082                 return this;
64083             },
64084
64085
64086             getSelectedImageKey: function() {
64087                 return _mlySelectedImageKey;
64088             },
64089
64090
64091             getSequenceKeyForImageKey: function(imageKey) {
64092                 return _mlyCache.sequences.forImageKey[imageKey];
64093             },
64094
64095
64096             // Updates the currently highlighted sequence and selected bubble.
64097             // Reset is only necessary when interacting with the viewport because
64098             // this implicitly changes the currently selected bubble/sequence
64099             setStyles: function(hovered, reset) {
64100                 if (reset) {  // reset all layers
64101                     d3_selectAll('.viewfield-group')
64102                         .classed('highlighted', false)
64103                         .classed('hovered', false)
64104                         .classed('currentView', false);
64105
64106                     d3_selectAll('.sequence')
64107                         .classed('highlighted', false)
64108                         .classed('currentView', false);
64109                 }
64110
64111                 var hoveredImageKey = hovered && hovered.key;
64112                 var hoveredSequenceKey = hoveredImageKey && this.getSequenceKeyForImageKey(hoveredImageKey);
64113                 var hoveredLineString = hoveredSequenceKey && _mlyCache.sequences.lineString[hoveredSequenceKey];
64114                 var hoveredImageKeys = (hoveredLineString && hoveredLineString.properties.coordinateProperties.image_keys) || [];
64115
64116                 var selectedImageKey = _mlySelectedImageKey;
64117                 var selectedSequenceKey = selectedImageKey && this.getSequenceKeyForImageKey(selectedImageKey);
64118                 var selectedLineString = selectedSequenceKey && _mlyCache.sequences.lineString[selectedSequenceKey];
64119                 var selectedImageKeys = (selectedLineString && selectedLineString.properties.coordinateProperties.image_keys) || [];
64120
64121                 // highlight sibling viewfields on either the selected or the hovered sequences
64122                 var highlightedImageKeys = utilArrayUnion(hoveredImageKeys, selectedImageKeys);
64123
64124                 d3_selectAll('.layer-mapillary .viewfield-group')
64125                     .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
64126                     .classed('hovered', function(d) { return d.key === hoveredImageKey; })
64127                     .classed('currentView', function(d) { return d.key === selectedImageKey; });
64128
64129                 d3_selectAll('.layer-mapillary .sequence')
64130                     .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
64131                     .classed('currentView', function(d) { return d.properties.key === selectedSequenceKey; });
64132
64133                 // update viewfields if needed
64134                 d3_selectAll('.viewfield-group .viewfield')
64135                     .attr('d', viewfieldPath);
64136
64137                 function viewfieldPath() {
64138                     var d = this.parentNode.__data__;
64139                     if (d.pano && d.key !== selectedImageKey) {
64140                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
64141                     } else {
64142                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
64143                     }
64144                 }
64145
64146                 return this;
64147             },
64148
64149
64150             updateDetections: function(d) {
64151                 if (!_mlyViewer || _mlyFallback) { return; }
64152
64153                 var imageKey = d && d.key;
64154                 if (!imageKey) { return; }
64155
64156                 var detections = _mlyCache.image_detections.forImageKey[imageKey] || [];
64157                 detections.forEach(function(data) {
64158                     var tag = makeTag(data);
64159                     if (tag) {
64160                         var tagComponent = _mlyViewer.getComponent('tag');
64161                         tagComponent.add([tag]);
64162                     }
64163                 });
64164
64165                 function makeTag(data) {
64166                     var valueParts = data.value.split('--');
64167                     if (valueParts.length !== 3) { return; }
64168
64169                     var text = valueParts[1].replace(/-/g, ' ');
64170                     var tag;
64171
64172                     // Currently only two shapes <Polygon|Point>
64173                     if (data.shape.type === 'Polygon') {
64174                         var polygonGeometry = new Mapillary
64175                             .TagComponent
64176                             .PolygonGeometry(data.shape.coordinates[0]);
64177
64178                         tag = new Mapillary.TagComponent.OutlineTag(
64179                             data.key,
64180                             polygonGeometry,
64181                             {
64182                                 text: text,
64183                                 textColor: 0xffff00,
64184                                 lineColor: 0xffff00,
64185                                 lineWidth: 2,
64186                                 fillColor: 0xffff00,
64187                                 fillOpacity: 0.3,
64188                             }
64189                         );
64190
64191                     } else if (data.shape.type === 'Point') {
64192                         var pointGeometry = new Mapillary
64193                             .TagComponent
64194                             .PointGeometry(data.shape.coordinates[0]);
64195
64196                         tag = new Mapillary.TagComponent.SpotTag(
64197                             data.key,
64198                             pointGeometry,
64199                             {
64200                                 text: text,
64201                                 color: 0xffff00,
64202                                 textColor: 0xffff00
64203                             }
64204                         );
64205                     }
64206
64207                     return tag;
64208                 }
64209             },
64210
64211
64212             cache: function() {
64213                 return _mlyCache;
64214             }
64215
64216         };
64217
64218         function validationIssue(attrs) {
64219             this.type = attrs.type;                // required - name of rule that created the issue (e.g. 'missing_tag')
64220             this.subtype = attrs.subtype;          // optional - category of the issue within the type (e.g. 'relation_type' under 'missing_tag')
64221             this.severity = attrs.severity;        // required - 'warning' or 'error'
64222             this.message = attrs.message;          // required - function returning localized string
64223             this.reference = attrs.reference;      // optional - function(selection) to render reference information
64224             this.entityIds = attrs.entityIds;      // optional - array of IDs of entities involved in the issue
64225             this.loc = attrs.loc;                  // optional - [lon, lat] to zoom in on to see the issue
64226             this.data = attrs.data;                // optional - object containing extra data for the fixes
64227             this.dynamicFixes = attrs.dynamicFixes;// optional - function(context) returning fixes
64228             this.hash = attrs.hash;                // optional - string to further differentiate the issue
64229
64230             this.id = generateID.apply(this);      // generated - see below
64231             this.autoFix = null;                   // generated - if autofix exists, will be set below
64232
64233             // A unique, deterministic string hash.
64234             // Issues with identical id values are considered identical.
64235             function generateID() {
64236                 var parts = [this.type];
64237
64238                 if (this.hash) {   // subclasses can pass in their own differentiator
64239                     parts.push(this.hash);
64240                 }
64241
64242                 if (this.subtype) {
64243                     parts.push(this.subtype);
64244                 }
64245
64246                 // include the entities this issue is for
64247                 // (sort them so the id is deterministic)
64248                 if (this.entityIds) {
64249                     var entityKeys = this.entityIds.slice().sort();
64250                     parts.push.apply(parts, entityKeys);
64251                 }
64252
64253                 return parts.join(':');
64254             }
64255
64256             this.extent = function(resolver) {
64257                 if (this.loc) {
64258                     return geoExtent(this.loc);
64259                 }
64260                 if (this.entityIds && this.entityIds.length) {
64261                     return this.entityIds.reduce(function(extent, entityId) {
64262                         return extent.extend(resolver.entity(entityId).extent(resolver));
64263                     }, geoExtent());
64264                 }
64265                 return null;
64266             };
64267
64268             this.fixes = function(context) {
64269                 var fixes = this.dynamicFixes ? this.dynamicFixes(context) : [];
64270                 var issue = this;
64271
64272                 if (issue.severity === 'warning') {
64273                     // allow ignoring any issue that's not an error
64274                     fixes.push(new validationIssueFix({
64275                         title: t('issues.fix.ignore_issue.title'),
64276                         icon: 'iD-icon-close',
64277                         onClick: function() {
64278                             context.validator().ignoreIssue(this.issue.id);
64279                         }
64280                     }));
64281                 }
64282
64283                 fixes.forEach(function(fix) {
64284                     fix.id = fix.title;
64285                     // add a reference to the issue for use in actions
64286                     fix.issue = issue;
64287                     if (fix.autoArgs) {
64288                         issue.autoFix = fix;
64289                     }
64290                 });
64291                 return fixes;
64292             };
64293
64294         }
64295
64296
64297         function validationIssueFix(attrs) {
64298             this.title = attrs.title;                   // Required
64299             this.onClick = attrs.onClick;               // Optional - the function to run to apply the fix
64300             this.disabledReason = attrs.disabledReason; // Optional - a string explaining why the fix is unavailable, if any
64301             this.icon = attrs.icon;                     // Optional - shows 'iD-icon-wrench' if not set
64302             this.entityIds = attrs.entityIds || [];     // Optional - used for hover-higlighting.
64303             this.autoArgs = attrs.autoArgs;             // Optional - pass [actions, annotation] arglist if this fix can automatically run
64304
64305             this.issue = null;    // Generated link - added by validationIssue
64306         }
64307
64308         var buildRuleChecks = function() {
64309             return {
64310                 equals: function (equals) {
64311                     return function(tags) {
64312                         return Object.keys(equals).every(function(k) {
64313                             return equals[k] === tags[k];
64314                         });
64315                     };
64316                 },
64317                 notEquals: function (notEquals) {
64318                     return function(tags) {
64319                         return Object.keys(notEquals).some(function(k) {
64320                             return notEquals[k] !== tags[k];
64321                         });
64322                     };
64323                 },
64324                 absence: function(absence) {
64325                     return function(tags) {
64326                         return Object.keys(tags).indexOf(absence) === -1;
64327                     };
64328                 },
64329                 presence: function(presence) {
64330                     return function(tags) {
64331                         return Object.keys(tags).indexOf(presence) > -1;
64332                     };
64333                 },
64334                 greaterThan: function(greaterThan) {
64335                     var key = Object.keys(greaterThan)[0];
64336                     var value = greaterThan[key];
64337
64338                     return function(tags) {
64339                         return tags[key] > value;
64340                     };
64341                 },
64342                 greaterThanEqual: function(greaterThanEqual) {
64343                     var key = Object.keys(greaterThanEqual)[0];
64344                     var value = greaterThanEqual[key];
64345
64346                     return function(tags) {
64347                         return tags[key] >= value;
64348                     };
64349                 },
64350                 lessThan: function(lessThan) {
64351                     var key = Object.keys(lessThan)[0];
64352                     var value = lessThan[key];
64353
64354                     return function(tags) {
64355                         return tags[key] < value;
64356                     };
64357                 },
64358                 lessThanEqual: function(lessThanEqual) {
64359                     var key = Object.keys(lessThanEqual)[0];
64360                     var value = lessThanEqual[key];
64361
64362                     return function(tags) {
64363                         return tags[key] <= value;
64364                     };
64365                 },
64366                 positiveRegex: function(positiveRegex) {
64367                     var tagKey = Object.keys(positiveRegex)[0];
64368                     var expression = positiveRegex[tagKey].join('|');
64369                     var regex = new RegExp(expression);
64370
64371                     return function(tags) {
64372                         return regex.test(tags[tagKey]);
64373                     };
64374                 },
64375                 negativeRegex: function(negativeRegex) {
64376                     var tagKey = Object.keys(negativeRegex)[0];
64377                     var expression = negativeRegex[tagKey].join('|');
64378                     var regex = new RegExp(expression);
64379
64380                     return function(tags) {
64381                         return !regex.test(tags[tagKey]);
64382                     };
64383                 }
64384             };
64385         };
64386
64387         var buildLineKeys = function() {
64388             return {
64389                 highway: {
64390                     rest_area: true,
64391                     services: true
64392                 },
64393                 railway: {
64394                     roundhouse: true,
64395                     station: true,
64396                     traverser: true,
64397                     turntable: true,
64398                     wash: true
64399                 }
64400             };
64401         };
64402
64403         var serviceMapRules = {
64404             init: function() {
64405                 this._ruleChecks  = buildRuleChecks();
64406                 this._validationRules = [];
64407                 this._areaKeys = osmAreaKeys;
64408                 this._lineKeys = buildLineKeys();
64409             },
64410
64411             // list of rules only relevant to tag checks...
64412             filterRuleChecks: function(selector) {
64413                 var _ruleChecks = this._ruleChecks;
64414                 return Object.keys(selector).reduce(function(rules, key) {
64415                     if (['geometry', 'error', 'warning'].indexOf(key) === -1) {
64416                         rules.push(_ruleChecks[key](selector[key]));
64417                     }
64418                     return rules;
64419                 }, []);
64420             },
64421
64422             // builds tagMap from mapcss-parse selector object...
64423             buildTagMap: function(selector) {
64424                 var getRegexValues = function(regexes) {
64425                     return regexes.map(function(regex) {
64426                         return regex.replace(/\$|\^/g, '');
64427                     });
64428                 };
64429
64430                 var tagMap = Object.keys(selector).reduce(function (expectedTags, key) {
64431                     var values;
64432                     var isRegex = /regex/gi.test(key);
64433                     var isEqual = /equals/gi.test(key);
64434
64435                     if (isRegex || isEqual) {
64436                         Object.keys(selector[key]).forEach(function(selectorKey) {
64437                             values = isEqual ? [selector[key][selectorKey]] : getRegexValues(selector[key][selectorKey]);
64438
64439                             if (expectedTags.hasOwnProperty(selectorKey)) {
64440                                 values = values.concat(expectedTags[selectorKey]);
64441                             }
64442
64443                             expectedTags[selectorKey] = values;
64444                         });
64445
64446                     } else if (/(greater|less)Than(Equal)?|presence/g.test(key)) {
64447                         var tagKey = /presence/.test(key) ? selector[key] : Object.keys(selector[key])[0];
64448
64449                         values = [selector[key][tagKey]];
64450
64451                         if (expectedTags.hasOwnProperty(tagKey)) {
64452                             values = values.concat(expectedTags[tagKey]);
64453                         }
64454
64455                         expectedTags[tagKey] = values;
64456                     }
64457
64458                     return expectedTags;
64459                 }, {});
64460
64461                 return tagMap;
64462             },
64463
64464             // inspired by osmWay#isArea()
64465             inferGeometry: function(tagMap) {
64466                 var _lineKeys = this._lineKeys;
64467                 var _areaKeys = this._areaKeys;
64468
64469                 var isAreaKeyBlackList = function(key) {
64470                     return utilArrayIntersection(tagMap[key], Object.keys(_areaKeys[key])).length > 0;
64471                 };
64472                 var isLineKeysWhiteList = function(key) {
64473                     return utilArrayIntersection(tagMap[key], Object.keys(_lineKeys[key])).length > 0;
64474                 };
64475
64476                 if (tagMap.hasOwnProperty('area')) {
64477                     if (tagMap.area.indexOf('yes') > -1) {
64478                         return 'area';
64479                     }
64480                     if (tagMap.area.indexOf('no') > -1) {
64481                         return 'line';
64482                     }
64483                 }
64484
64485                 for (var key in tagMap) {
64486                     if (key in _areaKeys && !isAreaKeyBlackList(key)) {
64487                         return 'area';
64488                     }
64489                     if (key in _lineKeys && isLineKeysWhiteList(key)) {
64490                         return 'area';
64491                     }
64492                 }
64493
64494                 return 'line';
64495             },
64496
64497             // adds from mapcss-parse selector check...
64498             addRule: function(selector) {
64499                 var rule = {
64500                     // checks relevant to mapcss-selector
64501                     checks: this.filterRuleChecks(selector),
64502                     // true if all conditions for a tag error are true..
64503                     matches: function(entity) {
64504                         return this.checks.every(function(check) {
64505                             return check(entity.tags);
64506                         });
64507                     },
64508                     // borrowed from Way#isArea()
64509                     inferredGeometry: this.inferGeometry(this.buildTagMap(selector), this._areaKeys),
64510                     geometryMatches: function(entity, graph) {
64511                         if (entity.type === 'node' || entity.type === 'relation') {
64512                             return selector.geometry === entity.type;
64513                         } else if (entity.type === 'way') {
64514                             return this.inferredGeometry === entity.geometry(graph);
64515                         }
64516                     },
64517                     // when geometries match and tag matches are present, return a warning...
64518                     findIssues: function (entity, graph, issues) {
64519                         if (this.geometryMatches(entity, graph) && this.matches(entity)) {
64520                             var severity = Object.keys(selector).indexOf('error') > -1
64521                                     ? 'error'
64522                                     : 'warning';
64523                             var message = selector[severity];
64524                             issues.push(new validationIssue({
64525                                 type: 'maprules',
64526                                 severity: severity,
64527                                 message: function() {
64528                                     return message;
64529                                 },
64530                                 entityIds: [entity.id]
64531                             }));
64532                         }
64533                     }
64534                 };
64535                 this._validationRules.push(rule);
64536             },
64537
64538             clearRules: function() { this._validationRules = []; },
64539
64540             // returns validationRules...
64541             validationRules: function() { return this._validationRules; },
64542
64543             // returns ruleChecks
64544             ruleChecks: function() { return this._ruleChecks; }
64545         };
64546
64547         var apibase$1 = 'https://nominatim.openstreetmap.org/';
64548         var _inflight = {};
64549         var _nominatimCache;
64550
64551
64552         var serviceNominatim = {
64553
64554             init: function() {
64555                 _inflight = {};
64556                 _nominatimCache = new RBush();
64557             },
64558
64559             reset: function() {
64560                 Object.values(_inflight).forEach(function(controller) { controller.abort(); });
64561                 _inflight = {};
64562                 _nominatimCache = new RBush();
64563             },
64564
64565
64566             countryCode: function (location, callback) {
64567                 this.reverse(location, function(err, result) {
64568                     if (err) {
64569                         return callback(err);
64570                     } else if (result.address) {
64571                         return callback(null, result.address.country_code);
64572                     } else {
64573                         return callback('Unable to geocode', null);
64574                     }
64575                 });
64576             },
64577
64578
64579             reverse: function (loc, callback) {
64580                 var cached = _nominatimCache.search(
64581                     { minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1] }
64582                 );
64583
64584                 if (cached.length > 0) {
64585                     if (callback) { callback(null, cached[0].data); }
64586                     return;
64587                 }
64588
64589                 var params = { zoom: 13, format: 'json', addressdetails: 1, lat: loc[1], lon: loc[0] };
64590                 var url = apibase$1 + 'reverse?' + utilQsString(params);
64591
64592                 if (_inflight[url]) { return; }
64593                 var controller = new AbortController();
64594                 _inflight[url] = controller;
64595
64596                 d3_json(url, { signal: controller.signal })
64597                     .then(function(result) {
64598                         delete _inflight[url];
64599                         if (result && result.error) {
64600                             throw new Error(result.error);
64601                         }
64602                         var extent = geoExtent(loc).padByMeters(200);
64603                         _nominatimCache.insert(Object.assign(extent.bbox(), {data: result}));
64604                         if (callback) { callback(null, result); }
64605                     })
64606                     .catch(function(err) {
64607                         delete _inflight[url];
64608                         if (err.name === 'AbortError') { return; }
64609                         if (callback) { callback(err.message); }
64610                     });
64611             },
64612
64613
64614             search: function (val, callback) {
64615                 var searchVal = encodeURIComponent(val);
64616                 var url = apibase$1 + 'search/' + searchVal + '?limit=10&format=json';
64617
64618                 if (_inflight[url]) { return; }
64619                 var controller = new AbortController();
64620                 _inflight[url] = controller;
64621
64622                 d3_json(url, { signal: controller.signal })
64623                     .then(function(result) {
64624                         delete _inflight[url];
64625                         if (result && result.error) {
64626                             throw new Error(result.error);
64627                         }
64628                         if (callback) { callback(null, result); }
64629                     })
64630                     .catch(function(err) {
64631                         delete _inflight[url];
64632                         if (err.name === 'AbortError') { return; }
64633                         if (callback) { callback(err.message); }
64634                     });
64635             }
64636
64637         };
64638
64639         var apibase$2 = 'https://openstreetcam.org';
64640         var maxResults$1 = 1000;
64641         var tileZoom$1 = 14;
64642         var tiler$3 = utilTiler().zoomExtent([tileZoom$1, tileZoom$1]).skipNullIsland(true);
64643         var dispatch$4 = dispatch('loadedImages');
64644         var imgZoom = d3_zoom()
64645             .extent([[0, 0], [320, 240]])
64646             .translateExtent([[0, 0], [320, 240]])
64647             .scaleExtent([1, 15])
64648             .on('zoom', zoomPan);
64649         var _oscCache;
64650         var _oscSelectedImage;
64651
64652
64653         function abortRequest$3(controller) {
64654             controller.abort();
64655         }
64656
64657
64658         function maxPageAtZoom$1(z) {
64659             if (z < 15)   { return 2; }
64660             if (z === 15) { return 5; }
64661             if (z === 16) { return 10; }
64662             if (z === 17) { return 20; }
64663             if (z === 18) { return 40; }
64664             if (z > 18)   { return 80; }
64665         }
64666
64667
64668         function loadTiles$1(which, url, projection) {
64669             var currZoom = Math.floor(geoScaleToZoom(projection.scale()));
64670             var tiles = tiler$3.getTiles(projection);
64671
64672             // abort inflight requests that are no longer needed
64673             var cache = _oscCache[which];
64674             Object.keys(cache.inflight).forEach(function(k) {
64675                 var wanted = tiles.find(function(tile) { return k.indexOf(tile.id + ',') === 0; });
64676                 if (!wanted) {
64677                     abortRequest$3(cache.inflight[k]);
64678                     delete cache.inflight[k];
64679                 }
64680             });
64681
64682             tiles.forEach(function(tile) {
64683                 loadNextTilePage$1(which, currZoom, url, tile);
64684             });
64685         }
64686
64687
64688         function loadNextTilePage$1(which, currZoom, url, tile) {
64689             var cache = _oscCache[which];
64690             var bbox = tile.extent.bbox();
64691             var maxPages = maxPageAtZoom$1(currZoom);
64692             var nextPage = cache.nextPage[tile.id] || 1;
64693             var params = utilQsString({
64694                 ipp: maxResults$1,
64695                 page: nextPage,
64696                 // client_id: clientId,
64697                 bbTopLeft: [bbox.maxY, bbox.minX].join(','),
64698                 bbBottomRight: [bbox.minY, bbox.maxX].join(',')
64699             }, true);
64700
64701             if (nextPage > maxPages) { return; }
64702
64703             var id = tile.id + ',' + String(nextPage);
64704             if (cache.loaded[id] || cache.inflight[id]) { return; }
64705
64706             var controller = new AbortController();
64707             cache.inflight[id] = controller;
64708
64709             var options = {
64710                 method: 'POST',
64711                 signal: controller.signal,
64712                 body: params,
64713                 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
64714             };
64715
64716             d3_json(url, options)
64717                 .then(function(data) {
64718                     cache.loaded[id] = true;
64719                     delete cache.inflight[id];
64720                     if (!data || !data.currentPageItems || !data.currentPageItems.length) {
64721                         throw new Error('No Data');
64722                     }
64723
64724                     var features = data.currentPageItems.map(function(item) {
64725                         var loc = [+item.lng, +item.lat];
64726                         var d;
64727
64728                         if (which === 'images') {
64729                             d = {
64730                                 loc: loc,
64731                                 key: item.id,
64732                                 ca: +item.heading,
64733                                 captured_at: (item.shot_date || item.date_added),
64734                                 captured_by: item.username,
64735                                 imagePath: item.lth_name,
64736                                 sequence_id: item.sequence_id,
64737                                 sequence_index: +item.sequence_index
64738                             };
64739
64740                             // cache sequence info
64741                             var seq = _oscCache.sequences[d.sequence_id];
64742                             if (!seq) {
64743                                 seq = { rotation: 0, images: [] };
64744                                 _oscCache.sequences[d.sequence_id] = seq;
64745                             }
64746                             seq.images[d.sequence_index] = d;
64747                         }
64748
64749                         return {
64750                             minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
64751                         };
64752                     });
64753
64754                     cache.rtree.load(features);
64755
64756                     if (data.currentPageItems.length === maxResults$1) {  // more pages to load
64757                         cache.nextPage[tile.id] = nextPage + 1;
64758                         loadNextTilePage$1(which, currZoom, url, tile);
64759                     } else {
64760                         cache.nextPage[tile.id] = Infinity;     // no more pages to load
64761                     }
64762
64763                     if (which === 'images') {
64764                         dispatch$4.call('loadedImages');
64765                     }
64766                 })
64767                 .catch(function() {
64768                     cache.loaded[id] = true;
64769                     delete cache.inflight[id];
64770                 });
64771         }
64772
64773
64774         // partition viewport into higher zoom tiles
64775         function partitionViewport$1(projection) {
64776             var z = geoScaleToZoom(projection.scale());
64777             var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
64778             var tiler = utilTiler().zoomExtent([z2, z2]);
64779
64780             return tiler.getTiles(projection)
64781                 .map(function(tile) { return tile.extent; });
64782         }
64783
64784
64785         // no more than `limit` results per partition.
64786         function searchLimited$1(limit, projection, rtree) {
64787             limit = limit || 5;
64788
64789             return partitionViewport$1(projection)
64790                 .reduce(function(result, extent) {
64791                     var found = rtree.search(extent.bbox())
64792                         .slice(0, limit)
64793                         .map(function(d) { return d.data; });
64794
64795                     return (found.length ? result.concat(found) : result);
64796                 }, []);
64797         }
64798
64799
64800         function zoomPan() {
64801             var t = event.transform;
64802             d3_select('#photoviewer .osc-image-wrap')
64803                 .call(utilSetTransform, t.x, t.y, t.k);
64804         }
64805
64806
64807         var serviceOpenstreetcam = {
64808
64809             init: function() {
64810                 if (!_oscCache) {
64811                     this.reset();
64812                 }
64813
64814                 this.event = utilRebind(this, dispatch$4, 'on');
64815             },
64816
64817             reset: function() {
64818                 if (_oscCache) {
64819                     Object.values(_oscCache.images.inflight).forEach(abortRequest$3);
64820                 }
64821
64822                 _oscCache = {
64823                     images: { inflight: {}, loaded: {}, nextPage: {}, rtree: new RBush() },
64824                     sequences: {}
64825                 };
64826
64827                 _oscSelectedImage = null;
64828             },
64829
64830
64831             images: function(projection) {
64832                 var limit = 5;
64833                 return searchLimited$1(limit, projection, _oscCache.images.rtree);
64834             },
64835
64836
64837             sequences: function(projection) {
64838                 var viewport = projection.clipExtent();
64839                 var min = [viewport[0][0], viewport[1][1]];
64840                 var max = [viewport[1][0], viewport[0][1]];
64841                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
64842                 var sequenceKeys = {};
64843
64844                 // all sequences for images in viewport
64845                 _oscCache.images.rtree.search(bbox)
64846                     .forEach(function(d) { sequenceKeys[d.data.sequence_id] = true; });
64847
64848                 // make linestrings from those sequences
64849                 var lineStrings = [];
64850                 Object.keys(sequenceKeys)
64851                     .forEach(function(sequenceKey) {
64852                         var seq = _oscCache.sequences[sequenceKey];
64853                         var images = seq && seq.images;
64854                         if (images) {
64855                             lineStrings.push({
64856                                 type: 'LineString',
64857                                 coordinates: images.map(function (d) { return d.loc; }).filter(Boolean),
64858                                 properties: { key: sequenceKey }
64859                             });
64860                         }
64861                     });
64862                 return lineStrings;
64863             },
64864
64865
64866             loadImages: function(projection) {
64867                 var url = apibase$2 + '/1.0/list/nearby-photos/';
64868                 loadTiles$1('images', url, projection);
64869             },
64870
64871
64872             loadViewer: function(context) {
64873                 var that = this;
64874
64875                 // add osc-wrapper
64876                 var wrap = d3_select('#photoviewer').selectAll('.osc-wrapper')
64877                     .data([0]);
64878
64879                 var wrapEnter = wrap.enter()
64880                     .append('div')
64881                     .attr('class', 'photo-wrapper osc-wrapper')
64882                     .classed('hide', true)
64883                     .call(imgZoom)
64884                     .on('dblclick.zoom', null);
64885
64886                 wrapEnter
64887                     .append('div')
64888                     .attr('class', 'photo-attribution fillD');
64889
64890                 var controlsEnter = wrapEnter
64891                     .append('div')
64892                     .attr('class', 'photo-controls-wrap')
64893                     .append('div')
64894                     .attr('class', 'photo-controls');
64895
64896                 controlsEnter
64897                     .append('button')
64898                     .on('click.back', step(-1))
64899                     .text('◄');
64900
64901                 controlsEnter
64902                     .append('button')
64903                     .on('click.rotate-ccw', rotate(-90))
64904                     .text('⤿');
64905
64906                 controlsEnter
64907                     .append('button')
64908                     .on('click.rotate-cw', rotate(90))
64909                     .text('⤾');
64910
64911                 controlsEnter
64912                     .append('button')
64913                     .on('click.forward', step(1))
64914                     .text('►');
64915
64916                 wrapEnter
64917                     .append('div')
64918                     .attr('class', 'osc-image-wrap');
64919
64920
64921                 // Register viewer resize handler
64922                 context.ui().photoviewer.on('resize.openstreetcam', function(dimensions) {
64923                     imgZoom = d3_zoom()
64924                         .extent([[0, 0], dimensions])
64925                         .translateExtent([[0, 0], dimensions])
64926                         .scaleExtent([1, 15])
64927                         .on('zoom', zoomPan);
64928                 });
64929
64930
64931                 function rotate(deg) {
64932                     return function() {
64933                         if (!_oscSelectedImage) { return; }
64934                         var sequenceKey = _oscSelectedImage.sequence_id;
64935                         var sequence = _oscCache.sequences[sequenceKey];
64936                         if (!sequence) { return; }
64937
64938                         var r = sequence.rotation || 0;
64939                         r += deg;
64940
64941                         if (r > 180) { r -= 360; }
64942                         if (r < -180) { r += 360; }
64943                         sequence.rotation = r;
64944
64945                         var wrap = d3_select('#photoviewer .osc-wrapper');
64946
64947                         wrap
64948                             .transition()
64949                             .duration(100)
64950                             .call(imgZoom.transform, identity$8);
64951
64952                         wrap.selectAll('.osc-image')
64953                             .transition()
64954                             .duration(100)
64955                             .style('transform', 'rotate(' + r + 'deg)');
64956                     };
64957                 }
64958
64959                 function step(stepBy) {
64960                     return function() {
64961                         if (!_oscSelectedImage) { return; }
64962                         var sequenceKey = _oscSelectedImage.sequence_id;
64963                         var sequence = _oscCache.sequences[sequenceKey];
64964                         if (!sequence) { return; }
64965
64966                         var nextIndex = _oscSelectedImage.sequence_index + stepBy;
64967                         var nextImage = sequence.images[nextIndex];
64968                         if (!nextImage) { return; }
64969
64970                         context.map().centerEase(nextImage.loc);
64971
64972                         that
64973                             .selectImage(nextImage)
64974                             .updateViewer(nextImage);
64975                     };
64976                 }
64977             },
64978
64979
64980             showViewer: function() {
64981                 var viewer = d3_select('#photoviewer')
64982                     .classed('hide', false);
64983
64984                 var isHidden = viewer.selectAll('.photo-wrapper.osc-wrapper.hide').size();
64985
64986                 if (isHidden) {
64987                     viewer
64988                         .selectAll('.photo-wrapper:not(.osc-wrapper)')
64989                         .classed('hide', true);
64990
64991                     viewer
64992                         .selectAll('.photo-wrapper.osc-wrapper')
64993                         .classed('hide', false);
64994                 }
64995
64996                 return this;
64997             },
64998
64999
65000             hideViewer: function() {
65001                 _oscSelectedImage = null;
65002
65003                 var viewer = d3_select('#photoviewer');
65004                 if (!viewer.empty()) { viewer.datum(null); }
65005
65006                 viewer
65007                     .classed('hide', true)
65008                     .selectAll('.photo-wrapper')
65009                     .classed('hide', true);
65010
65011                 d3_selectAll('.viewfield-group, .sequence, .icon-sign')
65012                     .classed('currentView', false);
65013
65014                 return this.setStyles(null, true);
65015             },
65016
65017
65018             updateViewer: function(d) {
65019                 var wrap = d3_select('#photoviewer .osc-wrapper');
65020                 var imageWrap = wrap.selectAll('.osc-image-wrap');
65021                 var attribution = wrap.selectAll('.photo-attribution').html('');
65022
65023                 wrap
65024                     .transition()
65025                     .duration(100)
65026                     .call(imgZoom.transform, identity$8);
65027
65028                 imageWrap
65029                     .selectAll('.osc-image')
65030                     .remove();
65031
65032                 if (d) {
65033                     var sequence = _oscCache.sequences[d.sequence_id];
65034                     var r = (sequence && sequence.rotation) || 0;
65035
65036                     imageWrap
65037                         .append('img')
65038                         .attr('class', 'osc-image')
65039                         .attr('src', apibase$2 + '/' + d.imagePath)
65040                         .style('transform', 'rotate(' + r + 'deg)');
65041
65042                     if (d.captured_by) {
65043                         attribution
65044                             .append('a')
65045                             .attr('class', 'captured_by')
65046                             .attr('target', '_blank')
65047                             .attr('href', 'https://openstreetcam.org/user/' + encodeURIComponent(d.captured_by))
65048                             .text('@' + d.captured_by);
65049
65050                         attribution
65051                             .append('span')
65052                             .text('|');
65053                     }
65054
65055                     if (d.captured_at) {
65056                         attribution
65057                             .append('span')
65058                             .attr('class', 'captured_at')
65059                             .text(localeDateString(d.captured_at));
65060
65061                         attribution
65062                             .append('span')
65063                             .text('|');
65064                     }
65065
65066                     attribution
65067                         .append('a')
65068                         .attr('class', 'image-link')
65069                         .attr('target', '_blank')
65070                         .attr('href', 'https://openstreetcam.org/details/' + d.sequence_id + '/' + d.sequence_index)
65071                         .text('openstreetcam.org');
65072                 }
65073
65074                 return this;
65075
65076
65077                 function localeDateString(s) {
65078                     if (!s) { return null; }
65079                     var detected = utilDetect();
65080                     var options = { day: 'numeric', month: 'short', year: 'numeric' };
65081                     var d = new Date(s);
65082                     if (isNaN(d.getTime())) { return null; }
65083                     return d.toLocaleDateString(detected.locale, options);
65084                 }
65085             },
65086
65087
65088             selectImage: function(d) {
65089                 _oscSelectedImage = d;
65090                 var viewer = d3_select('#photoviewer');
65091                 if (!viewer.empty()) { viewer.datum(d); }
65092
65093                 this.setStyles(null, true);
65094
65095                 d3_selectAll('.icon-sign')
65096                     .classed('currentView', false);
65097
65098                 return this;
65099             },
65100
65101
65102             getSelectedImage: function() {
65103                 return _oscSelectedImage;
65104             },
65105
65106
65107             getSequenceKeyForImage: function(d) {
65108                 return d && d.sequence_id;
65109             },
65110
65111
65112             // Updates the currently highlighted sequence and selected bubble.
65113             // Reset is only necessary when interacting with the viewport because
65114             // this implicitly changes the currently selected bubble/sequence
65115             setStyles: function(hovered, reset) {
65116                 if (reset) {  // reset all layers
65117                     d3_selectAll('.viewfield-group')
65118                         .classed('highlighted', false)
65119                         .classed('hovered', false)
65120                         .classed('currentView', false);
65121
65122                     d3_selectAll('.sequence')
65123                         .classed('highlighted', false)
65124                         .classed('currentView', false);
65125                 }
65126
65127                 var hoveredImageKey = hovered && hovered.key;
65128                 var hoveredSequenceKey = this.getSequenceKeyForImage(hovered);
65129                 var hoveredSequence = hoveredSequenceKey && _oscCache.sequences[hoveredSequenceKey];
65130                 var hoveredImageKeys = (hoveredSequence && hoveredSequence.images.map(function (d) { return d.key; })) || [];
65131
65132                 var viewer = d3_select('#photoviewer');
65133                 var selected = viewer.empty() ? undefined : viewer.datum();
65134                 var selectedImageKey = selected && selected.key;
65135                 var selectedSequenceKey = this.getSequenceKeyForImage(selected);
65136                 var selectedSequence = selectedSequenceKey && _oscCache.sequences[selectedSequenceKey];
65137                 var selectedImageKeys = (selectedSequence && selectedSequence.images.map(function (d) { return d.key; })) || [];
65138
65139                 // highlight sibling viewfields on either the selected or the hovered sequences
65140                 var highlightedImageKeys = utilArrayUnion(hoveredImageKeys, selectedImageKeys);
65141
65142                 d3_selectAll('.layer-openstreetcam .viewfield-group')
65143                     .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
65144                     .classed('hovered', function(d) { return d.key === hoveredImageKey; })
65145                     .classed('currentView', function(d) { return d.key === selectedImageKey; });
65146
65147                 d3_selectAll('.layer-openstreetcam .sequence')
65148                     .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
65149                     .classed('currentView', function(d) { return d.properties.key === selectedSequenceKey; });
65150
65151                 // update viewfields if needed
65152                 d3_selectAll('.viewfield-group .viewfield')
65153                     .attr('d', viewfieldPath);
65154
65155                 function viewfieldPath() {
65156                     var d = this.parentNode.__data__;
65157                     if (d.pano && d.key !== selectedImageKey) {
65158                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
65159                     } else {
65160                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
65161                     }
65162                 }
65163
65164                 return this;
65165             },
65166
65167
65168             cache: function() {
65169                 return _oscCache;
65170             }
65171
65172         };
65173
65174         /**
65175          * Checks if `value` is the
65176          * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
65177          * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
65178          *
65179          * @static
65180          * @memberOf _
65181          * @since 0.1.0
65182          * @category Lang
65183          * @param {*} value The value to check.
65184          * @returns {boolean} Returns `true` if `value` is an object, else `false`.
65185          * @example
65186          *
65187          * _.isObject({});
65188          * // => true
65189          *
65190          * _.isObject([1, 2, 3]);
65191          * // => true
65192          *
65193          * _.isObject(_.noop);
65194          * // => true
65195          *
65196          * _.isObject(null);
65197          * // => false
65198          */
65199         function isObject$3(value) {
65200           var type = typeof value;
65201           return value != null && (type == 'object' || type == 'function');
65202         }
65203
65204         /** Detect free variable `global` from Node.js. */
65205         var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
65206
65207         /** Detect free variable `self`. */
65208         var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
65209
65210         /** Used as a reference to the global object. */
65211         var root$3 = freeGlobal || freeSelf || Function('return this')();
65212
65213         /**
65214          * Gets the timestamp of the number of milliseconds that have elapsed since
65215          * the Unix epoch (1 January 1970 00:00:00 UTC).
65216          *
65217          * @static
65218          * @memberOf _
65219          * @since 2.4.0
65220          * @category Date
65221          * @returns {number} Returns the timestamp.
65222          * @example
65223          *
65224          * _.defer(function(stamp) {
65225          *   console.log(_.now() - stamp);
65226          * }, _.now());
65227          * // => Logs the number of milliseconds it took for the deferred invocation.
65228          */
65229         var now$1 = function() {
65230           return root$3.Date.now();
65231         };
65232
65233         /** Built-in value references. */
65234         var Symbol$1 = root$3.Symbol;
65235
65236         /** Used for built-in method references. */
65237         var objectProto = Object.prototype;
65238
65239         /** Used to check objects for own properties. */
65240         var hasOwnProperty$2 = objectProto.hasOwnProperty;
65241
65242         /**
65243          * Used to resolve the
65244          * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
65245          * of values.
65246          */
65247         var nativeObjectToString = objectProto.toString;
65248
65249         /** Built-in value references. */
65250         var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;
65251
65252         /**
65253          * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
65254          *
65255          * @private
65256          * @param {*} value The value to query.
65257          * @returns {string} Returns the raw `toStringTag`.
65258          */
65259         function getRawTag(value) {
65260           var isOwn = hasOwnProperty$2.call(value, symToStringTag),
65261               tag = value[symToStringTag];
65262
65263           try {
65264             value[symToStringTag] = undefined;
65265             var unmasked = true;
65266           } catch (e) {}
65267
65268           var result = nativeObjectToString.call(value);
65269           if (unmasked) {
65270             if (isOwn) {
65271               value[symToStringTag] = tag;
65272             } else {
65273               delete value[symToStringTag];
65274             }
65275           }
65276           return result;
65277         }
65278
65279         /** Used for built-in method references. */
65280         var objectProto$1 = Object.prototype;
65281
65282         /**
65283          * Used to resolve the
65284          * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
65285          * of values.
65286          */
65287         var nativeObjectToString$1 = objectProto$1.toString;
65288
65289         /**
65290          * Converts `value` to a string using `Object.prototype.toString`.
65291          *
65292          * @private
65293          * @param {*} value The value to convert.
65294          * @returns {string} Returns the converted string.
65295          */
65296         function objectToString$1(value) {
65297           return nativeObjectToString$1.call(value);
65298         }
65299
65300         /** `Object#toString` result references. */
65301         var nullTag = '[object Null]',
65302             undefinedTag = '[object Undefined]';
65303
65304         /** Built-in value references. */
65305         var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined;
65306
65307         /**
65308          * The base implementation of `getTag` without fallbacks for buggy environments.
65309          *
65310          * @private
65311          * @param {*} value The value to query.
65312          * @returns {string} Returns the `toStringTag`.
65313          */
65314         function baseGetTag(value) {
65315           if (value == null) {
65316             return value === undefined ? undefinedTag : nullTag;
65317           }
65318           return (symToStringTag$1 && symToStringTag$1 in Object(value))
65319             ? getRawTag(value)
65320             : objectToString$1(value);
65321         }
65322
65323         /**
65324          * Checks if `value` is object-like. A value is object-like if it's not `null`
65325          * and has a `typeof` result of "object".
65326          *
65327          * @static
65328          * @memberOf _
65329          * @since 4.0.0
65330          * @category Lang
65331          * @param {*} value The value to check.
65332          * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
65333          * @example
65334          *
65335          * _.isObjectLike({});
65336          * // => true
65337          *
65338          * _.isObjectLike([1, 2, 3]);
65339          * // => true
65340          *
65341          * _.isObjectLike(_.noop);
65342          * // => false
65343          *
65344          * _.isObjectLike(null);
65345          * // => false
65346          */
65347         function isObjectLike(value) {
65348           return value != null && typeof value == 'object';
65349         }
65350
65351         /** `Object#toString` result references. */
65352         var symbolTag = '[object Symbol]';
65353
65354         /**
65355          * Checks if `value` is classified as a `Symbol` primitive or object.
65356          *
65357          * @static
65358          * @memberOf _
65359          * @since 4.0.0
65360          * @category Lang
65361          * @param {*} value The value to check.
65362          * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
65363          * @example
65364          *
65365          * _.isSymbol(Symbol.iterator);
65366          * // => true
65367          *
65368          * _.isSymbol('abc');
65369          * // => false
65370          */
65371         function isSymbol$3(value) {
65372           return typeof value == 'symbol' ||
65373             (isObjectLike(value) && baseGetTag(value) == symbolTag);
65374         }
65375
65376         /** Used as references for various `Number` constants. */
65377         var NAN = 0 / 0;
65378
65379         /** Used to match leading and trailing whitespace. */
65380         var reTrim = /^\s+|\s+$/g;
65381
65382         /** Used to detect bad signed hexadecimal string values. */
65383         var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
65384
65385         /** Used to detect binary string values. */
65386         var reIsBinary = /^0b[01]+$/i;
65387
65388         /** Used to detect octal string values. */
65389         var reIsOctal = /^0o[0-7]+$/i;
65390
65391         /** Built-in method references without a dependency on `root`. */
65392         var freeParseInt = parseInt;
65393
65394         /**
65395          * Converts `value` to a number.
65396          *
65397          * @static
65398          * @memberOf _
65399          * @since 4.0.0
65400          * @category Lang
65401          * @param {*} value The value to process.
65402          * @returns {number} Returns the number.
65403          * @example
65404          *
65405          * _.toNumber(3.2);
65406          * // => 3.2
65407          *
65408          * _.toNumber(Number.MIN_VALUE);
65409          * // => 5e-324
65410          *
65411          * _.toNumber(Infinity);
65412          * // => Infinity
65413          *
65414          * _.toNumber('3.2');
65415          * // => 3.2
65416          */
65417         function toNumber(value) {
65418           if (typeof value == 'number') {
65419             return value;
65420           }
65421           if (isSymbol$3(value)) {
65422             return NAN;
65423           }
65424           if (isObject$3(value)) {
65425             var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
65426             value = isObject$3(other) ? (other + '') : other;
65427           }
65428           if (typeof value != 'string') {
65429             return value === 0 ? value : +value;
65430           }
65431           value = value.replace(reTrim, '');
65432           var isBinary = reIsBinary.test(value);
65433           return (isBinary || reIsOctal.test(value))
65434             ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
65435             : (reIsBadHex.test(value) ? NAN : +value);
65436         }
65437
65438         /** Error message constants. */
65439         var FUNC_ERROR_TEXT = 'Expected a function';
65440
65441         /* Built-in method references for those with the same name as other `lodash` methods. */
65442         var nativeMax = Math.max,
65443             nativeMin = Math.min;
65444
65445         /**
65446          * Creates a debounced function that delays invoking `func` until after `wait`
65447          * milliseconds have elapsed since the last time the debounced function was
65448          * invoked. The debounced function comes with a `cancel` method to cancel
65449          * delayed `func` invocations and a `flush` method to immediately invoke them.
65450          * Provide `options` to indicate whether `func` should be invoked on the
65451          * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
65452          * with the last arguments provided to the debounced function. Subsequent
65453          * calls to the debounced function return the result of the last `func`
65454          * invocation.
65455          *
65456          * **Note:** If `leading` and `trailing` options are `true`, `func` is
65457          * invoked on the trailing edge of the timeout only if the debounced function
65458          * is invoked more than once during the `wait` timeout.
65459          *
65460          * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
65461          * until to the next tick, similar to `setTimeout` with a timeout of `0`.
65462          *
65463          * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
65464          * for details over the differences between `_.debounce` and `_.throttle`.
65465          *
65466          * @static
65467          * @memberOf _
65468          * @since 0.1.0
65469          * @category Function
65470          * @param {Function} func The function to debounce.
65471          * @param {number} [wait=0] The number of milliseconds to delay.
65472          * @param {Object} [options={}] The options object.
65473          * @param {boolean} [options.leading=false]
65474          *  Specify invoking on the leading edge of the timeout.
65475          * @param {number} [options.maxWait]
65476          *  The maximum time `func` is allowed to be delayed before it's invoked.
65477          * @param {boolean} [options.trailing=true]
65478          *  Specify invoking on the trailing edge of the timeout.
65479          * @returns {Function} Returns the new debounced function.
65480          * @example
65481          *
65482          * // Avoid costly calculations while the window size is in flux.
65483          * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
65484          *
65485          * // Invoke `sendMail` when clicked, debouncing subsequent calls.
65486          * jQuery(element).on('click', _.debounce(sendMail, 300, {
65487          *   'leading': true,
65488          *   'trailing': false
65489          * }));
65490          *
65491          * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
65492          * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
65493          * var source = new EventSource('/stream');
65494          * jQuery(source).on('message', debounced);
65495          *
65496          * // Cancel the trailing debounced invocation.
65497          * jQuery(window).on('popstate', debounced.cancel);
65498          */
65499         function debounce(func, wait, options) {
65500           var lastArgs,
65501               lastThis,
65502               maxWait,
65503               result,
65504               timerId,
65505               lastCallTime,
65506               lastInvokeTime = 0,
65507               leading = false,
65508               maxing = false,
65509               trailing = true;
65510
65511           if (typeof func != 'function') {
65512             throw new TypeError(FUNC_ERROR_TEXT);
65513           }
65514           wait = toNumber(wait) || 0;
65515           if (isObject$3(options)) {
65516             leading = !!options.leading;
65517             maxing = 'maxWait' in options;
65518             maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
65519             trailing = 'trailing' in options ? !!options.trailing : trailing;
65520           }
65521
65522           function invokeFunc(time) {
65523             var args = lastArgs,
65524                 thisArg = lastThis;
65525
65526             lastArgs = lastThis = undefined;
65527             lastInvokeTime = time;
65528             result = func.apply(thisArg, args);
65529             return result;
65530           }
65531
65532           function leadingEdge(time) {
65533             // Reset any `maxWait` timer.
65534             lastInvokeTime = time;
65535             // Start the timer for the trailing edge.
65536             timerId = setTimeout(timerExpired, wait);
65537             // Invoke the leading edge.
65538             return leading ? invokeFunc(time) : result;
65539           }
65540
65541           function remainingWait(time) {
65542             var timeSinceLastCall = time - lastCallTime,
65543                 timeSinceLastInvoke = time - lastInvokeTime,
65544                 timeWaiting = wait - timeSinceLastCall;
65545
65546             return maxing
65547               ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
65548               : timeWaiting;
65549           }
65550
65551           function shouldInvoke(time) {
65552             var timeSinceLastCall = time - lastCallTime,
65553                 timeSinceLastInvoke = time - lastInvokeTime;
65554
65555             // Either this is the first call, activity has stopped and we're at the
65556             // trailing edge, the system time has gone backwards and we're treating
65557             // it as the trailing edge, or we've hit the `maxWait` limit.
65558             return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
65559               (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
65560           }
65561
65562           function timerExpired() {
65563             var time = now$1();
65564             if (shouldInvoke(time)) {
65565               return trailingEdge(time);
65566             }
65567             // Restart the timer.
65568             timerId = setTimeout(timerExpired, remainingWait(time));
65569           }
65570
65571           function trailingEdge(time) {
65572             timerId = undefined;
65573
65574             // Only invoke if we have `lastArgs` which means `func` has been
65575             // debounced at least once.
65576             if (trailing && lastArgs) {
65577               return invokeFunc(time);
65578             }
65579             lastArgs = lastThis = undefined;
65580             return result;
65581           }
65582
65583           function cancel() {
65584             if (timerId !== undefined) {
65585               clearTimeout(timerId);
65586             }
65587             lastInvokeTime = 0;
65588             lastArgs = lastCallTime = lastThis = timerId = undefined;
65589           }
65590
65591           function flush() {
65592             return timerId === undefined ? result : trailingEdge(now$1());
65593           }
65594
65595           function debounced() {
65596             var time = now$1(),
65597                 isInvoking = shouldInvoke(time);
65598
65599             lastArgs = arguments;
65600             lastThis = this;
65601             lastCallTime = time;
65602
65603             if (isInvoking) {
65604               if (timerId === undefined) {
65605                 return leadingEdge(lastCallTime);
65606               }
65607               if (maxing) {
65608                 // Handle invocations in a tight loop.
65609                 clearTimeout(timerId);
65610                 timerId = setTimeout(timerExpired, wait);
65611                 return invokeFunc(lastCallTime);
65612               }
65613             }
65614             if (timerId === undefined) {
65615               timerId = setTimeout(timerExpired, wait);
65616             }
65617             return result;
65618           }
65619           debounced.cancel = cancel;
65620           debounced.flush = flush;
65621           return debounced;
65622         }
65623
65624         /** Error message constants. */
65625         var FUNC_ERROR_TEXT$1 = 'Expected a function';
65626
65627         /**
65628          * Creates a throttled function that only invokes `func` at most once per
65629          * every `wait` milliseconds. The throttled function comes with a `cancel`
65630          * method to cancel delayed `func` invocations and a `flush` method to
65631          * immediately invoke them. Provide `options` to indicate whether `func`
65632          * should be invoked on the leading and/or trailing edge of the `wait`
65633          * timeout. The `func` is invoked with the last arguments provided to the
65634          * throttled function. Subsequent calls to the throttled function return the
65635          * result of the last `func` invocation.
65636          *
65637          * **Note:** If `leading` and `trailing` options are `true`, `func` is
65638          * invoked on the trailing edge of the timeout only if the throttled function
65639          * is invoked more than once during the `wait` timeout.
65640          *
65641          * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
65642          * until to the next tick, similar to `setTimeout` with a timeout of `0`.
65643          *
65644          * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
65645          * for details over the differences between `_.throttle` and `_.debounce`.
65646          *
65647          * @static
65648          * @memberOf _
65649          * @since 0.1.0
65650          * @category Function
65651          * @param {Function} func The function to throttle.
65652          * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
65653          * @param {Object} [options={}] The options object.
65654          * @param {boolean} [options.leading=true]
65655          *  Specify invoking on the leading edge of the timeout.
65656          * @param {boolean} [options.trailing=true]
65657          *  Specify invoking on the trailing edge of the timeout.
65658          * @returns {Function} Returns the new throttled function.
65659          * @example
65660          *
65661          * // Avoid excessively updating the position while scrolling.
65662          * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
65663          *
65664          * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
65665          * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
65666          * jQuery(element).on('click', throttled);
65667          *
65668          * // Cancel the trailing throttled invocation.
65669          * jQuery(window).on('popstate', throttled.cancel);
65670          */
65671         function throttle(func, wait, options) {
65672           var leading = true,
65673               trailing = true;
65674
65675           if (typeof func != 'function') {
65676             throw new TypeError(FUNC_ERROR_TEXT$1);
65677           }
65678           if (isObject$3(options)) {
65679             leading = 'leading' in options ? !!options.leading : leading;
65680             trailing = 'trailing' in options ? !!options.trailing : trailing;
65681           }
65682           return debounce(func, wait, {
65683             'leading': leading,
65684             'maxWait': wait,
65685             'trailing': trailing
65686           });
65687         }
65688
65689         var hashes = createCommonjsModule(function (module, exports) {
65690         /**
65691          * jshashes - https://github.com/h2non/jshashes
65692          * Released under the "New BSD" license
65693          *
65694          * Algorithms specification:
65695          *
65696          * MD5 - http://www.ietf.org/rfc/rfc1321.txt
65697          * RIPEMD-160 - http://homes.esat.kuleuven.be/~bosselae/ripemd160.html
65698          * SHA1   - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
65699          * SHA256 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
65700          * SHA512 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
65701          * HMAC - http://www.ietf.org/rfc/rfc2104.txt
65702          */
65703         (function() {
65704           var Hashes;
65705
65706           function utf8Encode(str) {
65707             var x, y, output = '',
65708               i = -1,
65709               l;
65710
65711             if (str && str.length) {
65712               l = str.length;
65713               while ((i += 1) < l) {
65714                 /* Decode utf-16 surrogate pairs */
65715                 x = str.charCodeAt(i);
65716                 y = i + 1 < l ? str.charCodeAt(i + 1) : 0;
65717                 if (0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) {
65718                   x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
65719                   i += 1;
65720                 }
65721                 /* Encode output as utf-8 */
65722                 if (x <= 0x7F) {
65723                   output += String.fromCharCode(x);
65724                 } else if (x <= 0x7FF) {
65725                   output += String.fromCharCode(0xC0 | ((x >>> 6) & 0x1F),
65726                     0x80 | (x & 0x3F));
65727                 } else if (x <= 0xFFFF) {
65728                   output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
65729                     0x80 | ((x >>> 6) & 0x3F),
65730                     0x80 | (x & 0x3F));
65731                 } else if (x <= 0x1FFFFF) {
65732                   output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
65733                     0x80 | ((x >>> 12) & 0x3F),
65734                     0x80 | ((x >>> 6) & 0x3F),
65735                     0x80 | (x & 0x3F));
65736                 }
65737               }
65738             }
65739             return output;
65740           }
65741
65742           function utf8Decode(str) {
65743             var i, ac, c1, c2, c3, arr = [],
65744               l;
65745             i = ac = c1 = c2 = c3 = 0;
65746
65747             if (str && str.length) {
65748               l = str.length;
65749               str += '';
65750
65751               while (i < l) {
65752                 c1 = str.charCodeAt(i);
65753                 ac += 1;
65754                 if (c1 < 128) {
65755                   arr[ac] = String.fromCharCode(c1);
65756                   i += 1;
65757                 } else if (c1 > 191 && c1 < 224) {
65758                   c2 = str.charCodeAt(i + 1);
65759                   arr[ac] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
65760                   i += 2;
65761                 } else {
65762                   c2 = str.charCodeAt(i + 1);
65763                   c3 = str.charCodeAt(i + 2);
65764                   arr[ac] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
65765                   i += 3;
65766                 }
65767               }
65768             }
65769             return arr.join('');
65770           }
65771
65772           /**
65773            * Add integers, wrapping at 2^32. This uses 16-bit operations internally
65774            * to work around bugs in some JS interpreters.
65775            */
65776
65777           function safe_add(x, y) {
65778             var lsw = (x & 0xFFFF) + (y & 0xFFFF),
65779               msw = (x >> 16) + (y >> 16) + (lsw >> 16);
65780             return (msw << 16) | (lsw & 0xFFFF);
65781           }
65782
65783           /**
65784            * Bitwise rotate a 32-bit number to the left.
65785            */
65786
65787           function bit_rol(num, cnt) {
65788             return (num << cnt) | (num >>> (32 - cnt));
65789           }
65790
65791           /**
65792            * Convert a raw string to a hex string
65793            */
65794
65795           function rstr2hex(input, hexcase) {
65796             var hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef',
65797               output = '',
65798               x, i = 0,
65799               l = input.length;
65800             for (; i < l; i += 1) {
65801               x = input.charCodeAt(i);
65802               output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt(x & 0x0F);
65803             }
65804             return output;
65805           }
65806
65807           /**
65808            * Convert an array of big-endian words to a string
65809            */
65810
65811           function binb2rstr(input) {
65812             var i, l = input.length * 32,
65813               output = '';
65814             for (i = 0; i < l; i += 8) {
65815               output += String.fromCharCode((input[i >> 5] >>> (24 - i % 32)) & 0xFF);
65816             }
65817             return output;
65818           }
65819
65820           /**
65821            * Convert an array of little-endian words to a string
65822            */
65823
65824           function binl2rstr(input) {
65825             var i, l = input.length * 32,
65826               output = '';
65827             for (i = 0; i < l; i += 8) {
65828               output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
65829             }
65830             return output;
65831           }
65832
65833           /**
65834            * Convert a raw string to an array of little-endian words
65835            * Characters >255 have their high-byte silently ignored.
65836            */
65837
65838           function rstr2binl(input) {
65839             var i, l = input.length * 8,
65840               output = Array(input.length >> 2),
65841               lo = output.length;
65842             for (i = 0; i < lo; i += 1) {
65843               output[i] = 0;
65844             }
65845             for (i = 0; i < l; i += 8) {
65846               output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
65847             }
65848             return output;
65849           }
65850
65851           /**
65852            * Convert a raw string to an array of big-endian words
65853            * Characters >255 have their high-byte silently ignored.
65854            */
65855
65856           function rstr2binb(input) {
65857             var i, l = input.length * 8,
65858               output = Array(input.length >> 2),
65859               lo = output.length;
65860             for (i = 0; i < lo; i += 1) {
65861               output[i] = 0;
65862             }
65863             for (i = 0; i < l; i += 8) {
65864               output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (24 - i % 32);
65865             }
65866             return output;
65867           }
65868
65869           /**
65870            * Convert a raw string to an arbitrary string encoding
65871            */
65872
65873           function rstr2any(input, encoding) {
65874             var divisor = encoding.length,
65875               remainders = Array(),
65876               i, q, x, ld, quotient, dividend, output, full_length;
65877
65878             /* Convert to an array of 16-bit big-endian values, forming the dividend */
65879             dividend = Array(Math.ceil(input.length / 2));
65880             ld = dividend.length;
65881             for (i = 0; i < ld; i += 1) {
65882               dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);
65883             }
65884
65885             /**
65886              * Repeatedly perform a long division. The binary array forms the dividend,
65887              * the length of the encoding is the divisor. Once computed, the quotient
65888              * forms the dividend for the next step. We stop when the dividend is zerHashes.
65889              * All remainders are stored for later use.
65890              */
65891             while (dividend.length > 0) {
65892               quotient = Array();
65893               x = 0;
65894               for (i = 0; i < dividend.length; i += 1) {
65895                 x = (x << 16) + dividend[i];
65896                 q = Math.floor(x / divisor);
65897                 x -= q * divisor;
65898                 if (quotient.length > 0 || q > 0) {
65899                   quotient[quotient.length] = q;
65900                 }
65901               }
65902               remainders[remainders.length] = x;
65903               dividend = quotient;
65904             }
65905
65906             /* Convert the remainders to the output string */
65907             output = '';
65908             for (i = remainders.length - 1; i >= 0; i--) {
65909               output += encoding.charAt(remainders[i]);
65910             }
65911
65912             /* Append leading zero equivalents */
65913             full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2)));
65914             for (i = output.length; i < full_length; i += 1) {
65915               output = encoding[0] + output;
65916             }
65917             return output;
65918           }
65919
65920           /**
65921            * Convert a raw string to a base-64 string
65922            */
65923
65924           function rstr2b64(input, b64pad) {
65925             var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
65926               output = '',
65927               len = input.length,
65928               i, j, triplet;
65929             b64pad = b64pad || '=';
65930             for (i = 0; i < len; i += 3) {
65931               triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0);
65932               for (j = 0; j < 4; j += 1) {
65933                 if (i * 8 + j * 6 > input.length * 8) {
65934                   output += b64pad;
65935                 } else {
65936                   output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F);
65937                 }
65938               }
65939             }
65940             return output;
65941           }
65942
65943           Hashes = {
65944             /**
65945              * @property {String} version
65946              * @readonly
65947              */
65948             VERSION: '1.0.6',
65949             /**
65950              * @member Hashes
65951              * @class Base64
65952              * @constructor
65953              */
65954             Base64: function() {
65955               // private properties
65956               var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
65957                 pad = '=', // default pad according with the RFC standard
65958                 utf8 = true; // by default enable UTF-8 support encoding
65959
65960               // public method for encoding
65961               this.encode = function(input) {
65962                 var i, j, triplet,
65963                   output = '',
65964                   len = input.length;
65965
65966                 pad = pad || '=';
65967                 input = (utf8) ? utf8Encode(input) : input;
65968
65969                 for (i = 0; i < len; i += 3) {
65970                   triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0);
65971                   for (j = 0; j < 4; j += 1) {
65972                     if (i * 8 + j * 6 > len * 8) {
65973                       output += pad;
65974                     } else {
65975                       output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F);
65976                     }
65977                   }
65978                 }
65979                 return output;
65980               };
65981
65982               // public method for decoding
65983               this.decode = function(input) {
65984                 // var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
65985                 var i, o1, o2, o3, h1, h2, h3, h4, bits, ac,
65986                   dec = '',
65987                   arr = [];
65988                 if (!input) {
65989                   return input;
65990                 }
65991
65992                 i = ac = 0;
65993                 input = input.replace(new RegExp('\\' + pad, 'gi'), ''); // use '='
65994                 //input += '';
65995
65996                 do { // unpack four hexets into three octets using index points in b64
65997                   h1 = tab.indexOf(input.charAt(i += 1));
65998                   h2 = tab.indexOf(input.charAt(i += 1));
65999                   h3 = tab.indexOf(input.charAt(i += 1));
66000                   h4 = tab.indexOf(input.charAt(i += 1));
66001
66002                   bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
66003
66004                   o1 = bits >> 16 & 0xff;
66005                   o2 = bits >> 8 & 0xff;
66006                   o3 = bits & 0xff;
66007                   ac += 1;
66008
66009                   if (h3 === 64) {
66010                     arr[ac] = String.fromCharCode(o1);
66011                   } else if (h4 === 64) {
66012                     arr[ac] = String.fromCharCode(o1, o2);
66013                   } else {
66014                     arr[ac] = String.fromCharCode(o1, o2, o3);
66015                   }
66016                 } while (i < input.length);
66017
66018                 dec = arr.join('');
66019                 dec = (utf8) ? utf8Decode(dec) : dec;
66020
66021                 return dec;
66022               };
66023
66024               // set custom pad string
66025               this.setPad = function(str) {
66026                 pad = str || pad;
66027                 return this;
66028               };
66029               // set custom tab string characters
66030               this.setTab = function(str) {
66031                 tab = str || tab;
66032                 return this;
66033               };
66034               this.setUTF8 = function(bool) {
66035                 if (typeof bool === 'boolean') {
66036                   utf8 = bool;
66037                 }
66038                 return this;
66039               };
66040             },
66041
66042             /**
66043              * CRC-32 calculation
66044              * @member Hashes
66045              * @method CRC32
66046              * @static
66047              * @param {String} str Input String
66048              * @return {String}
66049              */
66050             CRC32: function(str) {
66051               var crc = 0,
66052                 x = 0,
66053                 y = 0,
66054                 table, i, iTop;
66055               str = utf8Encode(str);
66056
66057               table = [
66058                 '00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 ',
66059                 '79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 ',
66060                 '84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F ',
66061                 '63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD ',
66062                 'A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC ',
66063                 '51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 ',
66064                 'B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 ',
66065                 '06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 ',
66066                 'E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 ',
66067                 '12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 ',
66068                 'D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 ',
66069                 '33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 ',
66070                 'CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 ',
66071                 '9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E ',
66072                 '7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D ',
66073                 '806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 ',
66074                 '60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA ',
66075                 'AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 ',
66076                 '5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 ',
66077                 'B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 ',
66078                 '05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 ',
66079                 'F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA ',
66080                 '11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 ',
66081                 'D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F ',
66082                 '30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E ',
66083                 'C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D'
66084               ].join('');
66085
66086               crc = crc ^ (-1);
66087               for (i = 0, iTop = str.length; i < iTop; i += 1) {
66088                 y = (crc ^ str.charCodeAt(i)) & 0xFF;
66089                 x = '0x' + table.substr(y * 9, 8);
66090                 crc = (crc >>> 8) ^ x;
66091               }
66092               // always return a positive number (that's what >>> 0 does)
66093               return (crc ^ (-1)) >>> 0;
66094             },
66095             /**
66096              * @member Hashes
66097              * @class MD5
66098              * @constructor
66099              * @param {Object} [config]
66100              *
66101              * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
66102              * Digest Algorithm, as defined in RFC 1321.
66103              * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
66104              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
66105              * See <http://pajhome.org.uk/crypt/md5> for more infHashes.
66106              */
66107             MD5: function(options) {
66108               /**
66109                * Private config properties. You may need to tweak these to be compatible with
66110                * the server-side, but the defaults work in most cases.
66111                * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase}
66112                */
66113               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase
66114                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance
66115                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding
66116
66117               // privileged (public) methods
66118               this.hex = function(s) {
66119                 return rstr2hex(rstr(s), hexcase);
66120               };
66121               this.b64 = function(s) {
66122                 return rstr2b64(rstr(s), b64pad);
66123               };
66124               this.any = function(s, e) {
66125                 return rstr2any(rstr(s), e);
66126               };
66127               this.raw = function(s) {
66128                 return rstr(s);
66129               };
66130               this.hex_hmac = function(k, d) {
66131                 return rstr2hex(rstr_hmac(k, d), hexcase);
66132               };
66133               this.b64_hmac = function(k, d) {
66134                 return rstr2b64(rstr_hmac(k, d), b64pad);
66135               };
66136               this.any_hmac = function(k, d, e) {
66137                 return rstr2any(rstr_hmac(k, d), e);
66138               };
66139               /**
66140                * Perform a simple self-test to see if the VM is working
66141                * @return {String} Hexadecimal hash sample
66142                */
66143               this.vm_test = function() {
66144                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
66145               };
66146               /**
66147                * Enable/disable uppercase hexadecimal returned string
66148                * @param {Boolean}
66149                * @return {Object} this
66150                */
66151               this.setUpperCase = function(a) {
66152                 if (typeof a === 'boolean') {
66153                   hexcase = a;
66154                 }
66155                 return this;
66156               };
66157               /**
66158                * Defines a base64 pad string
66159                * @param {String} Pad
66160                * @return {Object} this
66161                */
66162               this.setPad = function(a) {
66163                 b64pad = a || b64pad;
66164                 return this;
66165               };
66166               /**
66167                * Defines a base64 pad string
66168                * @param {Boolean}
66169                * @return {Object} [this]
66170                */
66171               this.setUTF8 = function(a) {
66172                 if (typeof a === 'boolean') {
66173                   utf8 = a;
66174                 }
66175                 return this;
66176               };
66177
66178               // private methods
66179
66180               /**
66181                * Calculate the MD5 of a raw string
66182                */
66183
66184               function rstr(s) {
66185                 s = (utf8) ? utf8Encode(s) : s;
66186                 return binl2rstr(binl(rstr2binl(s), s.length * 8));
66187               }
66188
66189               /**
66190                * Calculate the HMAC-MD5, of a key and some data (raw strings)
66191                */
66192
66193               function rstr_hmac(key, data) {
66194                 var bkey, ipad, opad, hash, i;
66195
66196                 key = (utf8) ? utf8Encode(key) : key;
66197                 data = (utf8) ? utf8Encode(data) : data;
66198                 bkey = rstr2binl(key);
66199                 if (bkey.length > 16) {
66200                   bkey = binl(bkey, key.length * 8);
66201                 }
66202
66203                 ipad = Array(16), opad = Array(16);
66204                 for (i = 0; i < 16; i += 1) {
66205                   ipad[i] = bkey[i] ^ 0x36363636;
66206                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
66207                 }
66208                 hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
66209                 return binl2rstr(binl(opad.concat(hash), 512 + 128));
66210               }
66211
66212               /**
66213                * Calculate the MD5 of an array of little-endian words, and a bit length.
66214                */
66215
66216               function binl(x, len) {
66217                 var i, olda, oldb, oldc, oldd,
66218                   a = 1732584193,
66219                   b = -271733879,
66220                   c = -1732584194,
66221                   d = 271733878;
66222
66223                 /* append padding */
66224                 x[len >> 5] |= 0x80 << ((len) % 32);
66225                 x[(((len + 64) >>> 9) << 4) + 14] = len;
66226
66227                 for (i = 0; i < x.length; i += 16) {
66228                   olda = a;
66229                   oldb = b;
66230                   oldc = c;
66231                   oldd = d;
66232
66233                   a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
66234                   d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
66235                   c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
66236                   b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
66237                   a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
66238                   d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
66239                   c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
66240                   b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
66241                   a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
66242                   d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
66243                   c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
66244                   b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
66245                   a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
66246                   d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
66247                   c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
66248                   b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
66249
66250                   a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
66251                   d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
66252                   c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
66253                   b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
66254                   a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
66255                   d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
66256                   c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
66257                   b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
66258                   a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
66259                   d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
66260                   c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
66261                   b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
66262                   a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
66263                   d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
66264                   c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
66265                   b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
66266
66267                   a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
66268                   d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
66269                   c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
66270                   b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
66271                   a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
66272                   d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
66273                   c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
66274                   b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
66275                   a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
66276                   d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
66277                   c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
66278                   b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
66279                   a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
66280                   d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
66281                   c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
66282                   b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
66283
66284                   a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
66285                   d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
66286                   c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
66287                   b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
66288                   a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
66289                   d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
66290                   c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
66291                   b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
66292                   a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
66293                   d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
66294                   c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
66295                   b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
66296                   a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
66297                   d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
66298                   c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
66299                   b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
66300
66301                   a = safe_add(a, olda);
66302                   b = safe_add(b, oldb);
66303                   c = safe_add(c, oldc);
66304                   d = safe_add(d, oldd);
66305                 }
66306                 return Array(a, b, c, d);
66307               }
66308
66309               /**
66310                * These functions implement the four basic operations the algorithm uses.
66311                */
66312
66313               function md5_cmn(q, a, b, x, s, t) {
66314                 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
66315               }
66316
66317               function md5_ff(a, b, c, d, x, s, t) {
66318                 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
66319               }
66320
66321               function md5_gg(a, b, c, d, x, s, t) {
66322                 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
66323               }
66324
66325               function md5_hh(a, b, c, d, x, s, t) {
66326                 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
66327               }
66328
66329               function md5_ii(a, b, c, d, x, s, t) {
66330                 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
66331               }
66332             },
66333             /**
66334              * @member Hashes
66335              * @class Hashes.SHA1
66336              * @param {Object} [config]
66337              * @constructor
66338              *
66339              * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined in FIPS 180-1
66340              * Version 2.2 Copyright Paul Johnston 2000 - 2009.
66341              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
66342              * See http://pajhome.org.uk/crypt/md5 for details.
66343              */
66344             SHA1: function(options) {
66345               /**
66346                * Private config properties. You may need to tweak these to be compatible with
66347                * the server-side, but the defaults work in most cases.
66348                * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase}
66349                */
66350               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase
66351                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance
66352                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding
66353
66354               // public methods
66355               this.hex = function(s) {
66356                 return rstr2hex(rstr(s), hexcase);
66357               };
66358               this.b64 = function(s) {
66359                 return rstr2b64(rstr(s), b64pad);
66360               };
66361               this.any = function(s, e) {
66362                 return rstr2any(rstr(s), e);
66363               };
66364               this.raw = function(s) {
66365                 return rstr(s);
66366               };
66367               this.hex_hmac = function(k, d) {
66368                 return rstr2hex(rstr_hmac(k, d));
66369               };
66370               this.b64_hmac = function(k, d) {
66371                 return rstr2b64(rstr_hmac(k, d), b64pad);
66372               };
66373               this.any_hmac = function(k, d, e) {
66374                 return rstr2any(rstr_hmac(k, d), e);
66375               };
66376               /**
66377                * Perform a simple self-test to see if the VM is working
66378                * @return {String} Hexadecimal hash sample
66379                * @public
66380                */
66381               this.vm_test = function() {
66382                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
66383               };
66384               /**
66385                * @description Enable/disable uppercase hexadecimal returned string
66386                * @param {boolean}
66387                * @return {Object} this
66388                * @public
66389                */
66390               this.setUpperCase = function(a) {
66391                 if (typeof a === 'boolean') {
66392                   hexcase = a;
66393                 }
66394                 return this;
66395               };
66396               /**
66397                * @description Defines a base64 pad string
66398                * @param {string} Pad
66399                * @return {Object} this
66400                * @public
66401                */
66402               this.setPad = function(a) {
66403                 b64pad = a || b64pad;
66404                 return this;
66405               };
66406               /**
66407                * @description Defines a base64 pad string
66408                * @param {boolean}
66409                * @return {Object} this
66410                * @public
66411                */
66412               this.setUTF8 = function(a) {
66413                 if (typeof a === 'boolean') {
66414                   utf8 = a;
66415                 }
66416                 return this;
66417               };
66418
66419               // private methods
66420
66421               /**
66422                * Calculate the SHA-512 of a raw string
66423                */
66424
66425               function rstr(s) {
66426                 s = (utf8) ? utf8Encode(s) : s;
66427                 return binb2rstr(binb(rstr2binb(s), s.length * 8));
66428               }
66429
66430               /**
66431                * Calculate the HMAC-SHA1 of a key and some data (raw strings)
66432                */
66433
66434               function rstr_hmac(key, data) {
66435                 var bkey, ipad, opad, i, hash;
66436                 key = (utf8) ? utf8Encode(key) : key;
66437                 data = (utf8) ? utf8Encode(data) : data;
66438                 bkey = rstr2binb(key);
66439
66440                 if (bkey.length > 16) {
66441                   bkey = binb(bkey, key.length * 8);
66442                 }
66443                 ipad = Array(16), opad = Array(16);
66444                 for (i = 0; i < 16; i += 1) {
66445                   ipad[i] = bkey[i] ^ 0x36363636;
66446                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
66447                 }
66448                 hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
66449                 return binb2rstr(binb(opad.concat(hash), 512 + 160));
66450               }
66451
66452               /**
66453                * Calculate the SHA-1 of an array of big-endian words, and a bit length
66454                */
66455
66456               function binb(x, len) {
66457                 var i, j, t, olda, oldb, oldc, oldd, olde,
66458                   w = Array(80),
66459                   a = 1732584193,
66460                   b = -271733879,
66461                   c = -1732584194,
66462                   d = 271733878,
66463                   e = -1009589776;
66464
66465                 /* append padding */
66466                 x[len >> 5] |= 0x80 << (24 - len % 32);
66467                 x[((len + 64 >> 9) << 4) + 15] = len;
66468
66469                 for (i = 0; i < x.length; i += 16) {
66470                   olda = a;
66471                   oldb = b;
66472                   oldc = c;
66473                   oldd = d;
66474                   olde = e;
66475
66476                   for (j = 0; j < 80; j += 1) {
66477                     if (j < 16) {
66478                       w[j] = x[i + j];
66479                     } else {
66480                       w[j] = bit_rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
66481                     }
66482                     t = safe_add(safe_add(bit_rol(a, 5), sha1_ft(j, b, c, d)),
66483                       safe_add(safe_add(e, w[j]), sha1_kt(j)));
66484                     e = d;
66485                     d = c;
66486                     c = bit_rol(b, 30);
66487                     b = a;
66488                     a = t;
66489                   }
66490
66491                   a = safe_add(a, olda);
66492                   b = safe_add(b, oldb);
66493                   c = safe_add(c, oldc);
66494                   d = safe_add(d, oldd);
66495                   e = safe_add(e, olde);
66496                 }
66497                 return Array(a, b, c, d, e);
66498               }
66499
66500               /**
66501                * Perform the appropriate triplet combination function for the current
66502                * iteration
66503                */
66504
66505               function sha1_ft(t, b, c, d) {
66506                 if (t < 20) {
66507                   return (b & c) | ((~b) & d);
66508                 }
66509                 if (t < 40) {
66510                   return b ^ c ^ d;
66511                 }
66512                 if (t < 60) {
66513                   return (b & c) | (b & d) | (c & d);
66514                 }
66515                 return b ^ c ^ d;
66516               }
66517
66518               /**
66519                * Determine the appropriate additive constant for the current iteration
66520                */
66521
66522               function sha1_kt(t) {
66523                 return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
66524                   (t < 60) ? -1894007588 : -899497514;
66525               }
66526             },
66527             /**
66528              * @class Hashes.SHA256
66529              * @param {config}
66530              *
66531              * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined in FIPS 180-2
66532              * Version 2.2 Copyright Angel Marin, Paul Johnston 2000 - 2009.
66533              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
66534              * See http://pajhome.org.uk/crypt/md5 for details.
66535              * Also http://anmar.eu.org/projects/jssha2/
66536              */
66537             SHA256: function(options) {
66538               /**
66539                * Private properties configuration variables. You may need to tweak these to be compatible with
66540                * the server-side, but the defaults work in most cases.
66541                * @see this.setUpperCase() method
66542                * @see this.setPad() method
66543                */
66544               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase  */
66545                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=',
66546                 /* base-64 pad character. Default '=' for strict RFC compliance   */
66547                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
66548                 /* enable/disable utf8 encoding */
66549                 sha256_K;
66550
66551               /* privileged (public) methods */
66552               this.hex = function(s) {
66553                 return rstr2hex(rstr(s, utf8));
66554               };
66555               this.b64 = function(s) {
66556                 return rstr2b64(rstr(s, utf8), b64pad);
66557               };
66558               this.any = function(s, e) {
66559                 return rstr2any(rstr(s, utf8), e);
66560               };
66561               this.raw = function(s) {
66562                 return rstr(s, utf8);
66563               };
66564               this.hex_hmac = function(k, d) {
66565                 return rstr2hex(rstr_hmac(k, d));
66566               };
66567               this.b64_hmac = function(k, d) {
66568                 return rstr2b64(rstr_hmac(k, d), b64pad);
66569               };
66570               this.any_hmac = function(k, d, e) {
66571                 return rstr2any(rstr_hmac(k, d), e);
66572               };
66573               /**
66574                * Perform a simple self-test to see if the VM is working
66575                * @return {String} Hexadecimal hash sample
66576                * @public
66577                */
66578               this.vm_test = function() {
66579                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
66580               };
66581               /**
66582                * Enable/disable uppercase hexadecimal returned string
66583                * @param {boolean}
66584                * @return {Object} this
66585                * @public
66586                */
66587               this.setUpperCase = function(a) {
66588                 if (typeof a === 'boolean') {
66589                   hexcase = a;
66590                 }
66591                 return this;
66592               };
66593               /**
66594                * @description Defines a base64 pad string
66595                * @param {string} Pad
66596                * @return {Object} this
66597                * @public
66598                */
66599               this.setPad = function(a) {
66600                 b64pad = a || b64pad;
66601                 return this;
66602               };
66603               /**
66604                * Defines a base64 pad string
66605                * @param {boolean}
66606                * @return {Object} this
66607                * @public
66608                */
66609               this.setUTF8 = function(a) {
66610                 if (typeof a === 'boolean') {
66611                   utf8 = a;
66612                 }
66613                 return this;
66614               };
66615
66616               // private methods
66617
66618               /**
66619                * Calculate the SHA-512 of a raw string
66620                */
66621
66622               function rstr(s, utf8) {
66623                 s = (utf8) ? utf8Encode(s) : s;
66624                 return binb2rstr(binb(rstr2binb(s), s.length * 8));
66625               }
66626
66627               /**
66628                * Calculate the HMAC-sha256 of a key and some data (raw strings)
66629                */
66630
66631               function rstr_hmac(key, data) {
66632                 key = (utf8) ? utf8Encode(key) : key;
66633                 data = (utf8) ? utf8Encode(data) : data;
66634                 var hash, i = 0,
66635                   bkey = rstr2binb(key),
66636                   ipad = Array(16),
66637                   opad = Array(16);
66638
66639                 if (bkey.length > 16) {
66640                   bkey = binb(bkey, key.length * 8);
66641                 }
66642
66643                 for (; i < 16; i += 1) {
66644                   ipad[i] = bkey[i] ^ 0x36363636;
66645                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
66646                 }
66647
66648                 hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
66649                 return binb2rstr(binb(opad.concat(hash), 512 + 256));
66650               }
66651
66652               /*
66653                * Main sha256 function, with its support functions
66654                */
66655
66656               function sha256_S(X, n) {
66657                 return (X >>> n) | (X << (32 - n));
66658               }
66659
66660               function sha256_R(X, n) {
66661                 return (X >>> n);
66662               }
66663
66664               function sha256_Ch(x, y, z) {
66665                 return ((x & y) ^ ((~x) & z));
66666               }
66667
66668               function sha256_Maj(x, y, z) {
66669                 return ((x & y) ^ (x & z) ^ (y & z));
66670               }
66671
66672               function sha256_Sigma0256(x) {
66673                 return (sha256_S(x, 2) ^ sha256_S(x, 13) ^ sha256_S(x, 22));
66674               }
66675
66676               function sha256_Sigma1256(x) {
66677                 return (sha256_S(x, 6) ^ sha256_S(x, 11) ^ sha256_S(x, 25));
66678               }
66679
66680               function sha256_Gamma0256(x) {
66681                 return (sha256_S(x, 7) ^ sha256_S(x, 18) ^ sha256_R(x, 3));
66682               }
66683
66684               function sha256_Gamma1256(x) {
66685                 return (sha256_S(x, 17) ^ sha256_S(x, 19) ^ sha256_R(x, 10));
66686               }
66687
66688               sha256_K = [
66689                 1116352408, 1899447441, -1245643825, -373957723, 961987163, 1508970993, -1841331548, -1424204075, -670586216, 310598401, 607225278, 1426881987,
66690                 1925078388, -2132889090, -1680079193, -1046744716, -459576895, -272742522,
66691                 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, -1740746414, -1473132947, -1341970488, -1084653625, -958395405, -710438585,
66692                 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291,
66693                 1695183700, 1986661051, -2117940946, -1838011259, -1564481375, -1474664885, -1035236496, -949202525, -778901479, -694614492, -200395387, 275423344,
66694                 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218,
66695                 1537002063, 1747873779, 1955562222, 2024104815, -2067236844, -1933114872, -1866530822, -1538233109, -1090935817, -965641998
66696               ];
66697
66698               function binb(m, l) {
66699                 var HASH = [1779033703, -1150833019, 1013904242, -1521486534,
66700                   1359893119, -1694144372, 528734635, 1541459225
66701                 ];
66702                 var W = new Array(64);
66703                 var a, b, c, d, e, f, g, h;
66704                 var i, j, T1, T2;
66705
66706                 /* append padding */
66707                 m[l >> 5] |= 0x80 << (24 - l % 32);
66708                 m[((l + 64 >> 9) << 4) + 15] = l;
66709
66710                 for (i = 0; i < m.length; i += 16) {
66711                   a = HASH[0];
66712                   b = HASH[1];
66713                   c = HASH[2];
66714                   d = HASH[3];
66715                   e = HASH[4];
66716                   f = HASH[5];
66717                   g = HASH[6];
66718                   h = HASH[7];
66719
66720                   for (j = 0; j < 64; j += 1) {
66721                     if (j < 16) {
66722                       W[j] = m[j + i];
66723                     } else {
66724                       W[j] = safe_add(safe_add(safe_add(sha256_Gamma1256(W[j - 2]), W[j - 7]),
66725                         sha256_Gamma0256(W[j - 15])), W[j - 16]);
66726                     }
66727
66728                     T1 = safe_add(safe_add(safe_add(safe_add(h, sha256_Sigma1256(e)), sha256_Ch(e, f, g)),
66729                       sha256_K[j]), W[j]);
66730                     T2 = safe_add(sha256_Sigma0256(a), sha256_Maj(a, b, c));
66731                     h = g;
66732                     g = f;
66733                     f = e;
66734                     e = safe_add(d, T1);
66735                     d = c;
66736                     c = b;
66737                     b = a;
66738                     a = safe_add(T1, T2);
66739                   }
66740
66741                   HASH[0] = safe_add(a, HASH[0]);
66742                   HASH[1] = safe_add(b, HASH[1]);
66743                   HASH[2] = safe_add(c, HASH[2]);
66744                   HASH[3] = safe_add(d, HASH[3]);
66745                   HASH[4] = safe_add(e, HASH[4]);
66746                   HASH[5] = safe_add(f, HASH[5]);
66747                   HASH[6] = safe_add(g, HASH[6]);
66748                   HASH[7] = safe_add(h, HASH[7]);
66749                 }
66750                 return HASH;
66751               }
66752
66753             },
66754
66755             /**
66756              * @class Hashes.SHA512
66757              * @param {config}
66758              *
66759              * A JavaScript implementation of the Secure Hash Algorithm, SHA-512, as defined in FIPS 180-2
66760              * Version 2.2 Copyright Anonymous Contributor, Paul Johnston 2000 - 2009.
66761              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
66762              * See http://pajhome.org.uk/crypt/md5 for details.
66763              */
66764             SHA512: function(options) {
66765               /**
66766                * Private properties configuration variables. You may need to tweak these to be compatible with
66767                * the server-side, but the defaults work in most cases.
66768                * @see this.setUpperCase() method
66769                * @see this.setPad() method
66770                */
66771               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false,
66772                 /* hexadecimal output case format. false - lowercase; true - uppercase  */
66773                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=',
66774                 /* base-64 pad character. Default '=' for strict RFC compliance   */
66775                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
66776                 /* enable/disable utf8 encoding */
66777                 sha512_k;
66778
66779               /* privileged (public) methods */
66780               this.hex = function(s) {
66781                 return rstr2hex(rstr(s));
66782               };
66783               this.b64 = function(s) {
66784                 return rstr2b64(rstr(s), b64pad);
66785               };
66786               this.any = function(s, e) {
66787                 return rstr2any(rstr(s), e);
66788               };
66789               this.raw = function(s) {
66790                 return rstr(s);
66791               };
66792               this.hex_hmac = function(k, d) {
66793                 return rstr2hex(rstr_hmac(k, d));
66794               };
66795               this.b64_hmac = function(k, d) {
66796                 return rstr2b64(rstr_hmac(k, d), b64pad);
66797               };
66798               this.any_hmac = function(k, d, e) {
66799                 return rstr2any(rstr_hmac(k, d), e);
66800               };
66801               /**
66802                * Perform a simple self-test to see if the VM is working
66803                * @return {String} Hexadecimal hash sample
66804                * @public
66805                */
66806               this.vm_test = function() {
66807                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
66808               };
66809               /**
66810                * @description Enable/disable uppercase hexadecimal returned string
66811                * @param {boolean}
66812                * @return {Object} this
66813                * @public
66814                */
66815               this.setUpperCase = function(a) {
66816                 if (typeof a === 'boolean') {
66817                   hexcase = a;
66818                 }
66819                 return this;
66820               };
66821               /**
66822                * @description Defines a base64 pad string
66823                * @param {string} Pad
66824                * @return {Object} this
66825                * @public
66826                */
66827               this.setPad = function(a) {
66828                 b64pad = a || b64pad;
66829                 return this;
66830               };
66831               /**
66832                * @description Defines a base64 pad string
66833                * @param {boolean}
66834                * @return {Object} this
66835                * @public
66836                */
66837               this.setUTF8 = function(a) {
66838                 if (typeof a === 'boolean') {
66839                   utf8 = a;
66840                 }
66841                 return this;
66842               };
66843
66844               /* private methods */
66845
66846               /**
66847                * Calculate the SHA-512 of a raw string
66848                */
66849
66850               function rstr(s) {
66851                 s = (utf8) ? utf8Encode(s) : s;
66852                 return binb2rstr(binb(rstr2binb(s), s.length * 8));
66853               }
66854               /*
66855                * Calculate the HMAC-SHA-512 of a key and some data (raw strings)
66856                */
66857
66858               function rstr_hmac(key, data) {
66859                 key = (utf8) ? utf8Encode(key) : key;
66860                 data = (utf8) ? utf8Encode(data) : data;
66861
66862                 var hash, i = 0,
66863                   bkey = rstr2binb(key),
66864                   ipad = Array(32),
66865                   opad = Array(32);
66866
66867                 if (bkey.length > 32) {
66868                   bkey = binb(bkey, key.length * 8);
66869                 }
66870
66871                 for (; i < 32; i += 1) {
66872                   ipad[i] = bkey[i] ^ 0x36363636;
66873                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
66874                 }
66875
66876                 hash = binb(ipad.concat(rstr2binb(data)), 1024 + data.length * 8);
66877                 return binb2rstr(binb(opad.concat(hash), 1024 + 512));
66878               }
66879
66880               /**
66881                * Calculate the SHA-512 of an array of big-endian dwords, and a bit length
66882                */
66883
66884               function binb(x, len) {
66885                 var j, i, l,
66886                   W = new Array(80),
66887                   hash = new Array(16),
66888                   //Initial hash values
66889                   H = [
66890                     new int64(0x6a09e667, -205731576),
66891                     new int64(-1150833019, -2067093701),
66892                     new int64(0x3c6ef372, -23791573),
66893                     new int64(-1521486534, 0x5f1d36f1),
66894                     new int64(0x510e527f, -1377402159),
66895                     new int64(-1694144372, 0x2b3e6c1f),
66896                     new int64(0x1f83d9ab, -79577749),
66897                     new int64(0x5be0cd19, 0x137e2179)
66898                   ],
66899                   T1 = new int64(0, 0),
66900                   T2 = new int64(0, 0),
66901                   a = new int64(0, 0),
66902                   b = new int64(0, 0),
66903                   c = new int64(0, 0),
66904                   d = new int64(0, 0),
66905                   e = new int64(0, 0),
66906                   f = new int64(0, 0),
66907                   g = new int64(0, 0),
66908                   h = new int64(0, 0),
66909                   //Temporary variables not specified by the document
66910                   s0 = new int64(0, 0),
66911                   s1 = new int64(0, 0),
66912                   Ch = new int64(0, 0),
66913                   Maj = new int64(0, 0),
66914                   r1 = new int64(0, 0),
66915                   r2 = new int64(0, 0),
66916                   r3 = new int64(0, 0);
66917
66918                 if (sha512_k === undefined) {
66919                   //SHA512 constants
66920                   sha512_k = [
66921                     new int64(0x428a2f98, -685199838), new int64(0x71374491, 0x23ef65cd),
66922                     new int64(-1245643825, -330482897), new int64(-373957723, -2121671748),
66923                     new int64(0x3956c25b, -213338824), new int64(0x59f111f1, -1241133031),
66924                     new int64(-1841331548, -1357295717), new int64(-1424204075, -630357736),
66925                     new int64(-670586216, -1560083902), new int64(0x12835b01, 0x45706fbe),
66926                     new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, -704662302),
66927                     new int64(0x72be5d74, -226784913), new int64(-2132889090, 0x3b1696b1),
66928                     new int64(-1680079193, 0x25c71235), new int64(-1046744716, -815192428),
66929                     new int64(-459576895, -1628353838), new int64(-272742522, 0x384f25e3),
66930                     new int64(0xfc19dc6, -1953704523), new int64(0x240ca1cc, 0x77ac9c65),
66931                     new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483),
66932                     new int64(0x5cb0a9dc, -1119749164), new int64(0x76f988da, -2096016459),
66933                     new int64(-1740746414, -295247957), new int64(-1473132947, 0x2db43210),
66934                     new int64(-1341970488, -1728372417), new int64(-1084653625, -1091629340),
66935                     new int64(-958395405, 0x3da88fc2), new int64(-710438585, -1828018395),
66936                     new int64(0x6ca6351, -536640913), new int64(0x14292967, 0xa0e6e70),
66937                     new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926),
66938                     new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, -1651133473),
66939                     new int64(0x650a7354, -1951439906), new int64(0x766a0abb, 0x3c77b2a8),
66940                     new int64(-2117940946, 0x47edaee6), new int64(-1838011259, 0x1482353b),
66941                     new int64(-1564481375, 0x4cf10364), new int64(-1474664885, -1136513023),
66942                     new int64(-1035236496, -789014639), new int64(-949202525, 0x654be30),
66943                     new int64(-778901479, -688958952), new int64(-694614492, 0x5565a910),
66944                     new int64(-200395387, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8),
66945                     new int64(0x19a4c116, -1194143544), new int64(0x1e376c08, 0x5141ab53),
66946                     new int64(0x2748774c, -544281703), new int64(0x34b0bcb5, -509917016),
66947                     new int64(0x391c0cb3, -976659869), new int64(0x4ed8aa4a, -482243893),
66948                     new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, -692930397),
66949                     new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60),
66950                     new int64(-2067236844, -1578062990), new int64(-1933114872, 0x1a6439ec),
66951                     new int64(-1866530822, 0x23631e28), new int64(-1538233109, -561857047),
66952                     new int64(-1090935817, -1295615723), new int64(-965641998, -479046869),
66953                     new int64(-903397682, -366583396), new int64(-779700025, 0x21c0c207),
66954                     new int64(-354779690, -840897762), new int64(-176337025, -294727304),
66955                     new int64(0x6f067aa, 0x72176fba), new int64(0xa637dc5, -1563912026),
66956                     new int64(0x113f9804, -1090974290), new int64(0x1b710b35, 0x131c471b),
66957                     new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493),
66958                     new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, -1676669620),
66959                     new int64(0x4cc5d4be, -885112138), new int64(0x597f299c, -60457430),
66960                     new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)
66961                   ];
66962                 }
66963
66964                 for (i = 0; i < 80; i += 1) {
66965                   W[i] = new int64(0, 0);
66966                 }
66967
66968                 // append padding to the source string. The format is described in the FIPS.
66969                 x[len >> 5] |= 0x80 << (24 - (len & 0x1f));
66970                 x[((len + 128 >> 10) << 5) + 31] = len;
66971                 l = x.length;
66972                 for (i = 0; i < l; i += 32) { //32 dwords is the block size
66973                   int64copy(a, H[0]);
66974                   int64copy(b, H[1]);
66975                   int64copy(c, H[2]);
66976                   int64copy(d, H[3]);
66977                   int64copy(e, H[4]);
66978                   int64copy(f, H[5]);
66979                   int64copy(g, H[6]);
66980                   int64copy(h, H[7]);
66981
66982                   for (j = 0; j < 16; j += 1) {
66983                     W[j].h = x[i + 2 * j];
66984                     W[j].l = x[i + 2 * j + 1];
66985                   }
66986
66987                   for (j = 16; j < 80; j += 1) {
66988                     //sigma1
66989                     int64rrot(r1, W[j - 2], 19);
66990                     int64revrrot(r2, W[j - 2], 29);
66991                     int64shr(r3, W[j - 2], 6);
66992                     s1.l = r1.l ^ r2.l ^ r3.l;
66993                     s1.h = r1.h ^ r2.h ^ r3.h;
66994                     //sigma0
66995                     int64rrot(r1, W[j - 15], 1);
66996                     int64rrot(r2, W[j - 15], 8);
66997                     int64shr(r3, W[j - 15], 7);
66998                     s0.l = r1.l ^ r2.l ^ r3.l;
66999                     s0.h = r1.h ^ r2.h ^ r3.h;
67000
67001                     int64add4(W[j], s1, W[j - 7], s0, W[j - 16]);
67002                   }
67003
67004                   for (j = 0; j < 80; j += 1) {
67005                     //Ch
67006                     Ch.l = (e.l & f.l) ^ (~e.l & g.l);
67007                     Ch.h = (e.h & f.h) ^ (~e.h & g.h);
67008
67009                     //Sigma1
67010                     int64rrot(r1, e, 14);
67011                     int64rrot(r2, e, 18);
67012                     int64revrrot(r3, e, 9);
67013                     s1.l = r1.l ^ r2.l ^ r3.l;
67014                     s1.h = r1.h ^ r2.h ^ r3.h;
67015
67016                     //Sigma0
67017                     int64rrot(r1, a, 28);
67018                     int64revrrot(r2, a, 2);
67019                     int64revrrot(r3, a, 7);
67020                     s0.l = r1.l ^ r2.l ^ r3.l;
67021                     s0.h = r1.h ^ r2.h ^ r3.h;
67022
67023                     //Maj
67024                     Maj.l = (a.l & b.l) ^ (a.l & c.l) ^ (b.l & c.l);
67025                     Maj.h = (a.h & b.h) ^ (a.h & c.h) ^ (b.h & c.h);
67026
67027                     int64add5(T1, h, s1, Ch, sha512_k[j], W[j]);
67028                     int64add(T2, s0, Maj);
67029
67030                     int64copy(h, g);
67031                     int64copy(g, f);
67032                     int64copy(f, e);
67033                     int64add(e, d, T1);
67034                     int64copy(d, c);
67035                     int64copy(c, b);
67036                     int64copy(b, a);
67037                     int64add(a, T1, T2);
67038                   }
67039                   int64add(H[0], H[0], a);
67040                   int64add(H[1], H[1], b);
67041                   int64add(H[2], H[2], c);
67042                   int64add(H[3], H[3], d);
67043                   int64add(H[4], H[4], e);
67044                   int64add(H[5], H[5], f);
67045                   int64add(H[6], H[6], g);
67046                   int64add(H[7], H[7], h);
67047                 }
67048
67049                 //represent the hash as an array of 32-bit dwords
67050                 for (i = 0; i < 8; i += 1) {
67051                   hash[2 * i] = H[i].h;
67052                   hash[2 * i + 1] = H[i].l;
67053                 }
67054                 return hash;
67055               }
67056
67057               //A constructor for 64-bit numbers
67058
67059               function int64(h, l) {
67060                 this.h = h;
67061                 this.l = l;
67062                 //this.toString = int64toString;
67063               }
67064
67065               //Copies src into dst, assuming both are 64-bit numbers
67066
67067               function int64copy(dst, src) {
67068                 dst.h = src.h;
67069                 dst.l = src.l;
67070               }
67071
67072               //Right-rotates a 64-bit number by shift
67073               //Won't handle cases of shift>=32
67074               //The function revrrot() is for that
67075
67076               function int64rrot(dst, x, shift) {
67077                 dst.l = (x.l >>> shift) | (x.h << (32 - shift));
67078                 dst.h = (x.h >>> shift) | (x.l << (32 - shift));
67079               }
67080
67081               //Reverses the dwords of the source and then rotates right by shift.
67082               //This is equivalent to rotation by 32+shift
67083
67084               function int64revrrot(dst, x, shift) {
67085                 dst.l = (x.h >>> shift) | (x.l << (32 - shift));
67086                 dst.h = (x.l >>> shift) | (x.h << (32 - shift));
67087               }
67088
67089               //Bitwise-shifts right a 64-bit number by shift
67090               //Won't handle shift>=32, but it's never needed in SHA512
67091
67092               function int64shr(dst, x, shift) {
67093                 dst.l = (x.l >>> shift) | (x.h << (32 - shift));
67094                 dst.h = (x.h >>> shift);
67095               }
67096
67097               //Adds two 64-bit numbers
67098               //Like the original implementation, does not rely on 32-bit operations
67099
67100               function int64add(dst, x, y) {
67101                 var w0 = (x.l & 0xffff) + (y.l & 0xffff);
67102                 var w1 = (x.l >>> 16) + (y.l >>> 16) + (w0 >>> 16);
67103                 var w2 = (x.h & 0xffff) + (y.h & 0xffff) + (w1 >>> 16);
67104                 var w3 = (x.h >>> 16) + (y.h >>> 16) + (w2 >>> 16);
67105                 dst.l = (w0 & 0xffff) | (w1 << 16);
67106                 dst.h = (w2 & 0xffff) | (w3 << 16);
67107               }
67108
67109               //Same, except with 4 addends. Works faster than adding them one by one.
67110
67111               function int64add4(dst, a, b, c, d) {
67112                 var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff);
67113                 var w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (w0 >>> 16);
67114                 var w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (w1 >>> 16);
67115                 var w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (w2 >>> 16);
67116                 dst.l = (w0 & 0xffff) | (w1 << 16);
67117                 dst.h = (w2 & 0xffff) | (w3 << 16);
67118               }
67119
67120               //Same, except with 5 addends
67121
67122               function int64add5(dst, a, b, c, d, e) {
67123                 var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff) + (e.l & 0xffff),
67124                   w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (e.l >>> 16) + (w0 >>> 16),
67125                   w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (e.h & 0xffff) + (w1 >>> 16),
67126                   w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (e.h >>> 16) + (w2 >>> 16);
67127                 dst.l = (w0 & 0xffff) | (w1 << 16);
67128                 dst.h = (w2 & 0xffff) | (w3 << 16);
67129               }
67130             },
67131             /**
67132              * @class Hashes.RMD160
67133              * @constructor
67134              * @param {Object} [config]
67135              *
67136              * A JavaScript implementation of the RIPEMD-160 Algorithm
67137              * Version 2.2 Copyright Jeremy Lin, Paul Johnston 2000 - 2009.
67138              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
67139              * See http://pajhome.org.uk/crypt/md5 for details.
67140              * Also http://www.ocf.berkeley.edu/~jjlin/jsotp/
67141              */
67142             RMD160: function(options) {
67143               /**
67144                * Private properties configuration variables. You may need to tweak these to be compatible with
67145                * the server-side, but the defaults work in most cases.
67146                * @see this.setUpperCase() method
67147                * @see this.setPad() method
67148                */
67149               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false,
67150                 /* hexadecimal output case format. false - lowercase; true - uppercase  */
67151                 b64pad = (options && typeof options.pad === 'string') ? options.pa : '=',
67152                 /* base-64 pad character. Default '=' for strict RFC compliance   */
67153                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
67154                 /* enable/disable utf8 encoding */
67155                 rmd160_r1 = [
67156                   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
67157                   7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
67158                   3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
67159                   1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
67160                   4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
67161                 ],
67162                 rmd160_r2 = [
67163                   5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
67164                   6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
67165                   15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
67166                   8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
67167                   12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
67168                 ],
67169                 rmd160_s1 = [
67170                   11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
67171                   7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
67172                   11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
67173                   11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
67174                   9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
67175                 ],
67176                 rmd160_s2 = [
67177                   8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
67178                   9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
67179                   9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
67180                   15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
67181                   8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
67182                 ];
67183
67184               /* privileged (public) methods */
67185               this.hex = function(s) {
67186                 return rstr2hex(rstr(s));
67187               };
67188               this.b64 = function(s) {
67189                 return rstr2b64(rstr(s), b64pad);
67190               };
67191               this.any = function(s, e) {
67192                 return rstr2any(rstr(s), e);
67193               };
67194               this.raw = function(s) {
67195                 return rstr(s);
67196               };
67197               this.hex_hmac = function(k, d) {
67198                 return rstr2hex(rstr_hmac(k, d));
67199               };
67200               this.b64_hmac = function(k, d) {
67201                 return rstr2b64(rstr_hmac(k, d), b64pad);
67202               };
67203               this.any_hmac = function(k, d, e) {
67204                 return rstr2any(rstr_hmac(k, d), e);
67205               };
67206               /**
67207                * Perform a simple self-test to see if the VM is working
67208                * @return {String} Hexadecimal hash sample
67209                * @public
67210                */
67211               this.vm_test = function() {
67212                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
67213               };
67214               /**
67215                * @description Enable/disable uppercase hexadecimal returned string
67216                * @param {boolean}
67217                * @return {Object} this
67218                * @public
67219                */
67220               this.setUpperCase = function(a) {
67221                 if (typeof a === 'boolean') {
67222                   hexcase = a;
67223                 }
67224                 return this;
67225               };
67226               /**
67227                * @description Defines a base64 pad string
67228                * @param {string} Pad
67229                * @return {Object} this
67230                * @public
67231                */
67232               this.setPad = function(a) {
67233                 if (typeof a !== 'undefined') {
67234                   b64pad = a;
67235                 }
67236                 return this;
67237               };
67238               /**
67239                * @description Defines a base64 pad string
67240                * @param {boolean}
67241                * @return {Object} this
67242                * @public
67243                */
67244               this.setUTF8 = function(a) {
67245                 if (typeof a === 'boolean') {
67246                   utf8 = a;
67247                 }
67248                 return this;
67249               };
67250
67251               /* private methods */
67252
67253               /**
67254                * Calculate the rmd160 of a raw string
67255                */
67256
67257               function rstr(s) {
67258                 s = (utf8) ? utf8Encode(s) : s;
67259                 return binl2rstr(binl(rstr2binl(s), s.length * 8));
67260               }
67261
67262               /**
67263                * Calculate the HMAC-rmd160 of a key and some data (raw strings)
67264                */
67265
67266               function rstr_hmac(key, data) {
67267                 key = (utf8) ? utf8Encode(key) : key;
67268                 data = (utf8) ? utf8Encode(data) : data;
67269                 var i, hash,
67270                   bkey = rstr2binl(key),
67271                   ipad = Array(16),
67272                   opad = Array(16);
67273
67274                 if (bkey.length > 16) {
67275                   bkey = binl(bkey, key.length * 8);
67276                 }
67277
67278                 for (i = 0; i < 16; i += 1) {
67279                   ipad[i] = bkey[i] ^ 0x36363636;
67280                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
67281                 }
67282                 hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
67283                 return binl2rstr(binl(opad.concat(hash), 512 + 160));
67284               }
67285
67286               /**
67287                * Convert an array of little-endian words to a string
67288                */
67289
67290               function binl2rstr(input) {
67291                 var i, output = '',
67292                   l = input.length * 32;
67293                 for (i = 0; i < l; i += 8) {
67294                   output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
67295                 }
67296                 return output;
67297               }
67298
67299               /**
67300                * Calculate the RIPE-MD160 of an array of little-endian words, and a bit length.
67301                */
67302
67303               function binl(x, len) {
67304                 var T, j, i, l,
67305                   h0 = 0x67452301,
67306                   h1 = 0xefcdab89,
67307                   h2 = 0x98badcfe,
67308                   h3 = 0x10325476,
67309                   h4 = 0xc3d2e1f0,
67310                   A1, B1, C1, D1, E1,
67311                   A2, B2, C2, D2, E2;
67312
67313                 /* append padding */
67314                 x[len >> 5] |= 0x80 << (len % 32);
67315                 x[(((len + 64) >>> 9) << 4) + 14] = len;
67316                 l = x.length;
67317
67318                 for (i = 0; i < l; i += 16) {
67319                   A1 = A2 = h0;
67320                   B1 = B2 = h1;
67321                   C1 = C2 = h2;
67322                   D1 = D2 = h3;
67323                   E1 = E2 = h4;
67324                   for (j = 0; j <= 79; j += 1) {
67325                     T = safe_add(A1, rmd160_f(j, B1, C1, D1));
67326                     T = safe_add(T, x[i + rmd160_r1[j]]);
67327                     T = safe_add(T, rmd160_K1(j));
67328                     T = safe_add(bit_rol(T, rmd160_s1[j]), E1);
67329                     A1 = E1;
67330                     E1 = D1;
67331                     D1 = bit_rol(C1, 10);
67332                     C1 = B1;
67333                     B1 = T;
67334                     T = safe_add(A2, rmd160_f(79 - j, B2, C2, D2));
67335                     T = safe_add(T, x[i + rmd160_r2[j]]);
67336                     T = safe_add(T, rmd160_K2(j));
67337                     T = safe_add(bit_rol(T, rmd160_s2[j]), E2);
67338                     A2 = E2;
67339                     E2 = D2;
67340                     D2 = bit_rol(C2, 10);
67341                     C2 = B2;
67342                     B2 = T;
67343                   }
67344
67345                   T = safe_add(h1, safe_add(C1, D2));
67346                   h1 = safe_add(h2, safe_add(D1, E2));
67347                   h2 = safe_add(h3, safe_add(E1, A2));
67348                   h3 = safe_add(h4, safe_add(A1, B2));
67349                   h4 = safe_add(h0, safe_add(B1, C2));
67350                   h0 = T;
67351                 }
67352                 return [h0, h1, h2, h3, h4];
67353               }
67354
67355               // specific algorithm methods
67356
67357               function rmd160_f(j, x, y, z) {
67358                 return (0 <= j && j <= 15) ? (x ^ y ^ z) :
67359                   (16 <= j && j <= 31) ? (x & y) | (~x & z) :
67360                   (32 <= j && j <= 47) ? (x | ~y) ^ z :
67361                   (48 <= j && j <= 63) ? (x & z) | (y & ~z) :
67362                   (64 <= j && j <= 79) ? x ^ (y | ~z) :
67363                   'rmd160_f: j out of range';
67364               }
67365
67366               function rmd160_K1(j) {
67367                 return (0 <= j && j <= 15) ? 0x00000000 :
67368                   (16 <= j && j <= 31) ? 0x5a827999 :
67369                   (32 <= j && j <= 47) ? 0x6ed9eba1 :
67370                   (48 <= j && j <= 63) ? 0x8f1bbcdc :
67371                   (64 <= j && j <= 79) ? 0xa953fd4e :
67372                   'rmd160_K1: j out of range';
67373               }
67374
67375               function rmd160_K2(j) {
67376                 return (0 <= j && j <= 15) ? 0x50a28be6 :
67377                   (16 <= j && j <= 31) ? 0x5c4dd124 :
67378                   (32 <= j && j <= 47) ? 0x6d703ef3 :
67379                   (48 <= j && j <= 63) ? 0x7a6d76e9 :
67380                   (64 <= j && j <= 79) ? 0x00000000 :
67381                   'rmd160_K2: j out of range';
67382               }
67383             }
67384           };
67385
67386           // exposes Hashes
67387           (function(window, undefined$1) {
67388             var freeExports = false;
67389             {
67390               freeExports = exports;
67391               if (exports && typeof commonjsGlobal === 'object' && commonjsGlobal && commonjsGlobal === commonjsGlobal.global) {
67392                 window = commonjsGlobal;
67393               }
67394             }
67395
67396             if (typeof undefined$1 === 'function' && typeof undefined$1.amd === 'object' && undefined$1.amd) {
67397               // define as an anonymous module, so, through path mapping, it can be aliased
67398               undefined$1(function() {
67399                 return Hashes;
67400               });
67401             } else if (freeExports) {
67402               // in Node.js or RingoJS v0.8.0+
67403               if ( module && module.exports === freeExports) {
67404                 module.exports = Hashes;
67405               }
67406               // in Narwhal or RingoJS v0.7.0-
67407               else {
67408                 freeExports.Hashes = Hashes;
67409               }
67410             } else {
67411               // in a browser or Rhino
67412               window.Hashes = Hashes;
67413             }
67414           }(this));
67415         }()); // IIFE
67416         });
67417
67418         var immutable = extend$3;
67419
67420         var hasOwnProperty$3 = Object.prototype.hasOwnProperty;
67421
67422         function extend$3() {
67423             var arguments$1 = arguments;
67424
67425             var target = {};
67426
67427             for (var i = 0; i < arguments.length; i++) {
67428                 var source = arguments$1[i];
67429
67430                 for (var key in source) {
67431                     if (hasOwnProperty$3.call(source, key)) {
67432                         target[key] = source[key];
67433                     }
67434                 }
67435             }
67436
67437             return target
67438         }
67439
67440         var sha1 = new hashes.SHA1();
67441
67442         var ohauth = {};
67443
67444         ohauth.qsString = function(obj) {
67445             return Object.keys(obj).sort().map(function(key) {
67446                 return ohauth.percentEncode(key) + '=' +
67447                     ohauth.percentEncode(obj[key]);
67448             }).join('&');
67449         };
67450
67451         ohauth.stringQs = function(str) {
67452             return str.split('&').filter(function (pair) {
67453                 return pair !== '';
67454             }).reduce(function(obj, pair){
67455                 var parts = pair.split('=');
67456                 obj[decodeURIComponent(parts[0])] = (null === parts[1]) ?
67457                     '' : decodeURIComponent(parts[1]);
67458                 return obj;
67459             }, {});
67460         };
67461
67462         ohauth.rawxhr = function(method, url, data, headers, callback) {
67463             var xhr = new XMLHttpRequest(),
67464                 twoHundred = /^20\d$/;
67465             xhr.onreadystatechange = function() {
67466                 if (4 === xhr.readyState && 0 !== xhr.status) {
67467                     if (twoHundred.test(xhr.status)) { callback(null, xhr); }
67468                     else { return callback(xhr, null); }
67469                 }
67470             };
67471             xhr.onerror = function(e) { return callback(e, null); };
67472             xhr.open(method, url, true);
67473             for (var h in headers) { xhr.setRequestHeader(h, headers[h]); }
67474             xhr.send(data);
67475             return xhr;
67476         };
67477
67478         ohauth.xhr = function(method, url, auth, data, options, callback) {
67479             var headers = (options && options.header) || {
67480                 'Content-Type': 'application/x-www-form-urlencoded'
67481             };
67482             headers.Authorization = 'OAuth ' + ohauth.authHeader(auth);
67483             return ohauth.rawxhr(method, url, data, headers, callback);
67484         };
67485
67486         ohauth.nonce = function() {
67487             for (var o = ''; o.length < 6;) {
67488                 o += '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'[Math.floor(Math.random() * 61)];
67489             }
67490             return o;
67491         };
67492
67493         ohauth.authHeader = function(obj) {
67494             return Object.keys(obj).sort().map(function(key) {
67495                 return encodeURIComponent(key) + '="' + encodeURIComponent(obj[key]) + '"';
67496             }).join(', ');
67497         };
67498
67499         ohauth.timestamp = function() { return ~~((+new Date()) / 1000); };
67500
67501         ohauth.percentEncode = function(s) {
67502             return encodeURIComponent(s)
67503                 .replace(/\!/g, '%21').replace(/\'/g, '%27')
67504                 .replace(/\*/g, '%2A').replace(/\(/g, '%28').replace(/\)/g, '%29');
67505         };
67506
67507         ohauth.baseString = function(method, url, params) {
67508             if (params.oauth_signature) { delete params.oauth_signature; }
67509             return [
67510                 method,
67511                 ohauth.percentEncode(url),
67512                 ohauth.percentEncode(ohauth.qsString(params))].join('&');
67513         };
67514
67515         ohauth.signature = function(oauth_secret, token_secret, baseString) {
67516             return sha1.b64_hmac(
67517                 ohauth.percentEncode(oauth_secret) + '&' +
67518                 ohauth.percentEncode(token_secret),
67519                 baseString);
67520         };
67521
67522         /**
67523          * Takes an options object for configuration (consumer_key,
67524          * consumer_secret, version, signature_method, token, token_secret)
67525          * and returns a function that generates the Authorization header
67526          * for given data.
67527          *
67528          * The returned function takes these parameters:
67529          * - method: GET/POST/...
67530          * - uri: full URI with protocol, port, path and query string
67531          * - extra_params: any extra parameters (that are passed in the POST data),
67532          *   can be an object or a from-urlencoded string.
67533          *
67534          * Returned function returns full OAuth header with "OAuth" string in it.
67535          */
67536
67537         ohauth.headerGenerator = function(options) {
67538             options = options || {};
67539             var consumer_key = options.consumer_key || '',
67540                 consumer_secret = options.consumer_secret || '',
67541                 signature_method = options.signature_method || 'HMAC-SHA1',
67542                 version = options.version || '1.0',
67543                 token = options.token || '',
67544                 token_secret = options.token_secret || '';
67545
67546             return function(method, uri, extra_params) {
67547                 method = method.toUpperCase();
67548                 if (typeof extra_params === 'string' && extra_params.length > 0) {
67549                     extra_params = ohauth.stringQs(extra_params);
67550                 }
67551
67552                 var uri_parts = uri.split('?', 2),
67553                 base_uri = uri_parts[0];
67554
67555                 var query_params = uri_parts.length === 2 ?
67556                     ohauth.stringQs(uri_parts[1]) : {};
67557
67558                 var oauth_params = {
67559                     oauth_consumer_key: consumer_key,
67560                     oauth_signature_method: signature_method,
67561                     oauth_version: version,
67562                     oauth_timestamp: ohauth.timestamp(),
67563                     oauth_nonce: ohauth.nonce()
67564                 };
67565
67566                 if (token) { oauth_params.oauth_token = token; }
67567
67568                 var all_params = immutable({}, oauth_params, query_params, extra_params),
67569                     base_str = ohauth.baseString(method, base_uri, all_params);
67570
67571                 oauth_params.oauth_signature = ohauth.signature(consumer_secret, token_secret, base_str);
67572
67573                 return 'OAuth ' + ohauth.authHeader(oauth_params);
67574             };
67575         };
67576
67577         var ohauth_1 = ohauth;
67578
67579         var resolveUrl = createCommonjsModule(function (module, exports) {
67580         // Copyright 2014 Simon Lydell
67581         // X11 (“MIT”) Licensed. (See LICENSE.)
67582
67583         void (function(root, factory) {
67584           {
67585             module.exports = factory();
67586           }
67587         }(commonjsGlobal, function() {
67588
67589           function resolveUrl(/* ...urls */) {
67590             var arguments$1 = arguments;
67591
67592             var numUrls = arguments.length;
67593
67594             if (numUrls === 0) {
67595               throw new Error("resolveUrl requires at least one argument; got none.")
67596             }
67597
67598             var base = document.createElement("base");
67599             base.href = arguments[0];
67600
67601             if (numUrls === 1) {
67602               return base.href
67603             }
67604
67605             var head = document.getElementsByTagName("head")[0];
67606             head.insertBefore(base, head.firstChild);
67607
67608             var a = document.createElement("a");
67609             var resolved;
67610
67611             for (var index = 1; index < numUrls; index++) {
67612               a.href = arguments$1[index];
67613               resolved = a.href;
67614               base.href = resolved;
67615             }
67616
67617             head.removeChild(base);
67618
67619             return resolved
67620           }
67621
67622           return resolveUrl
67623
67624         }));
67625         });
67626
67627         var assign$2 = make_assign();
67628         var create$9 = make_create();
67629         var trim$1 = make_trim();
67630         var Global = (typeof window !== 'undefined' ? window : commonjsGlobal);
67631
67632         var util = {
67633                 assign: assign$2,
67634                 create: create$9,
67635                 trim: trim$1,
67636                 bind: bind$3,
67637                 slice: slice$b,
67638                 each: each,
67639                 map: map$6,
67640                 pluck: pluck,
67641                 isList: isList,
67642                 isFunction: isFunction$2,
67643                 isObject: isObject$4,
67644                 Global: Global
67645         };
67646
67647         function make_assign() {
67648                 if (Object.assign) {
67649                         return Object.assign
67650                 } else {
67651                         return function shimAssign(obj, props1, props2, etc) {
67652                                 var arguments$1 = arguments;
67653
67654                                 for (var i = 1; i < arguments.length; i++) {
67655                                         each(Object(arguments$1[i]), function(val, key) {
67656                                                 obj[key] = val;
67657                                         });
67658                                 }                       
67659                                 return obj
67660                         }
67661                 }
67662         }
67663
67664         function make_create() {
67665                 if (Object.create) {
67666                         return function create(obj, assignProps1, assignProps2, etc) {
67667                                 var assignArgsList = slice$b(arguments, 1);
67668                                 return assign$2.apply(this, [Object.create(obj)].concat(assignArgsList))
67669                         }
67670                 } else {
67671                         function F() {} // eslint-disable-line no-inner-declarations
67672                         return function create(obj, assignProps1, assignProps2, etc) {
67673                                 var assignArgsList = slice$b(arguments, 1);
67674                                 F.prototype = obj;
67675                                 return assign$2.apply(this, [new F()].concat(assignArgsList))
67676                         }
67677                 }
67678         }
67679
67680         function make_trim() {
67681                 if (String.prototype.trim) {
67682                         return function trim(str) {
67683                                 return String.prototype.trim.call(str)
67684                         }
67685                 } else {
67686                         return function trim(str) {
67687                                 return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '')
67688                         }
67689                 }
67690         }
67691
67692         function bind$3(obj, fn) {
67693                 return function() {
67694                         return fn.apply(obj, Array.prototype.slice.call(arguments, 0))
67695                 }
67696         }
67697
67698         function slice$b(arr, index) {
67699                 return Array.prototype.slice.call(arr, index || 0)
67700         }
67701
67702         function each(obj, fn) {
67703                 pluck(obj, function(val, key) {
67704                         fn(val, key);
67705                         return false
67706                 });
67707         }
67708
67709         function map$6(obj, fn) {
67710                 var res = (isList(obj) ? [] : {});
67711                 pluck(obj, function(v, k) {
67712                         res[k] = fn(v, k);
67713                         return false
67714                 });
67715                 return res
67716         }
67717
67718         function pluck(obj, fn) {
67719                 if (isList(obj)) {
67720                         for (var i=0; i<obj.length; i++) {
67721                                 if (fn(obj[i], i)) {
67722                                         return obj[i]
67723                                 }
67724                         }
67725                 } else {
67726                         for (var key in obj) {
67727                                 if (obj.hasOwnProperty(key)) {
67728                                         if (fn(obj[key], key)) {
67729                                                 return obj[key]
67730                                         }
67731                                 }
67732                         }
67733                 }
67734         }
67735
67736         function isList(val) {
67737                 return (val != null && typeof val != 'function' && typeof val.length == 'number')
67738         }
67739
67740         function isFunction$2(val) {
67741                 return val && {}.toString.call(val) === '[object Function]'
67742         }
67743
67744         function isObject$4(val) {
67745                 return val && {}.toString.call(val) === '[object Object]'
67746         }
67747
67748         var slice$c = util.slice;
67749         var pluck$1 = util.pluck;
67750         var each$1 = util.each;
67751         var bind$4 = util.bind;
67752         var create$a = util.create;
67753         var isList$1 = util.isList;
67754         var isFunction$3 = util.isFunction;
67755         var isObject$5 = util.isObject;
67756
67757         var storeEngine = {
67758                 createStore: createStore
67759         };
67760
67761         var storeAPI = {
67762                 version: '2.0.12',
67763                 enabled: false,
67764                 
67765                 // get returns the value of the given key. If that value
67766                 // is undefined, it returns optionalDefaultValue instead.
67767                 get: function(key, optionalDefaultValue) {
67768                         var data = this.storage.read(this._namespacePrefix + key);
67769                         return this._deserialize(data, optionalDefaultValue)
67770                 },
67771
67772                 // set will store the given value at key and returns value.
67773                 // Calling set with value === undefined is equivalent to calling remove.
67774                 set: function(key, value) {
67775                         if (value === undefined) {
67776                                 return this.remove(key)
67777                         }
67778                         this.storage.write(this._namespacePrefix + key, this._serialize(value));
67779                         return value
67780                 },
67781
67782                 // remove deletes the key and value stored at the given key.
67783                 remove: function(key) {
67784                         this.storage.remove(this._namespacePrefix + key);
67785                 },
67786
67787                 // each will call the given callback once for each key-value pair
67788                 // in this store.
67789                 each: function(callback) {
67790                         var self = this;
67791                         this.storage.each(function(val, namespacedKey) {
67792                                 callback.call(self, self._deserialize(val), (namespacedKey || '').replace(self._namespaceRegexp, ''));
67793                         });
67794                 },
67795
67796                 // clearAll will remove all the stored key-value pairs in this store.
67797                 clearAll: function() {
67798                         this.storage.clearAll();
67799                 },
67800
67801                 // additional functionality that can't live in plugins
67802                 // ---------------------------------------------------
67803
67804                 // hasNamespace returns true if this store instance has the given namespace.
67805                 hasNamespace: function(namespace) {
67806                         return (this._namespacePrefix == '__storejs_'+namespace+'_')
67807                 },
67808
67809                 // createStore creates a store.js instance with the first
67810                 // functioning storage in the list of storage candidates,
67811                 // and applies the the given mixins to the instance.
67812                 createStore: function() {
67813                         return createStore.apply(this, arguments)
67814                 },
67815                 
67816                 addPlugin: function(plugin) {
67817                         this._addPlugin(plugin);
67818                 },
67819                 
67820                 namespace: function(namespace) {
67821                         return createStore(this.storage, this.plugins, namespace)
67822                 }
67823         };
67824
67825         function _warn() {
67826                 var _console = (typeof console == 'undefined' ? null : console);
67827                 if (!_console) { return }
67828                 var fn = (_console.warn ? _console.warn : _console.log);
67829                 fn.apply(_console, arguments);
67830         }
67831
67832         function createStore(storages, plugins, namespace) {
67833                 if (!namespace) {
67834                         namespace = '';
67835                 }
67836                 if (storages && !isList$1(storages)) {
67837                         storages = [storages];
67838                 }
67839                 if (plugins && !isList$1(plugins)) {
67840                         plugins = [plugins];
67841                 }
67842
67843                 var namespacePrefix = (namespace ? '__storejs_'+namespace+'_' : '');
67844                 var namespaceRegexp = (namespace ? new RegExp('^'+namespacePrefix) : null);
67845                 var legalNamespaces = /^[a-zA-Z0-9_\-]*$/; // alpha-numeric + underscore and dash
67846                 if (!legalNamespaces.test(namespace)) {
67847                         throw new Error('store.js namespaces can only have alphanumerics + underscores and dashes')
67848                 }
67849                 
67850                 var _privateStoreProps = {
67851                         _namespacePrefix: namespacePrefix,
67852                         _namespaceRegexp: namespaceRegexp,
67853
67854                         _testStorage: function(storage) {
67855                                 try {
67856                                         var testStr = '__storejs__test__';
67857                                         storage.write(testStr, testStr);
67858                                         var ok = (storage.read(testStr) === testStr);
67859                                         storage.remove(testStr);
67860                                         return ok
67861                                 } catch(e) {
67862                                         return false
67863                                 }
67864                         },
67865
67866                         _assignPluginFnProp: function(pluginFnProp, propName) {
67867                                 var oldFn = this[propName];
67868                                 this[propName] = function pluginFn() {
67869                                         var args = slice$c(arguments, 0);
67870                                         var self = this;
67871
67872                                         // super_fn calls the old function which was overwritten by
67873                                         // this mixin.
67874                                         function super_fn() {
67875                                                 if (!oldFn) { return }
67876                                                 each$1(arguments, function(arg, i) {
67877                                                         args[i] = arg;
67878                                                 });
67879                                                 return oldFn.apply(self, args)
67880                                         }
67881
67882                                         // Give mixing function access to super_fn by prefixing all mixin function
67883                                         // arguments with super_fn.
67884                                         var newFnArgs = [super_fn].concat(args);
67885
67886                                         return pluginFnProp.apply(self, newFnArgs)
67887                                 };
67888                         },
67889
67890                         _serialize: function(obj) {
67891                                 return JSON.stringify(obj)
67892                         },
67893
67894                         _deserialize: function(strVal, defaultVal) {
67895                                 if (!strVal) { return defaultVal }
67896                                 // It is possible that a raw string value has been previously stored
67897                                 // in a storage without using store.js, meaning it will be a raw
67898                                 // string value instead of a JSON serialized string. By defaulting
67899                                 // to the raw string value in case of a JSON parse error, we allow
67900                                 // for past stored values to be forwards-compatible with store.js
67901                                 var val = '';
67902                                 try { val = JSON.parse(strVal); }
67903                                 catch(e) { val = strVal; }
67904
67905                                 return (val !== undefined ? val : defaultVal)
67906                         },
67907                         
67908                         _addStorage: function(storage) {
67909                                 if (this.enabled) { return }
67910                                 if (this._testStorage(storage)) {
67911                                         this.storage = storage;
67912                                         this.enabled = true;
67913                                 }
67914                         },
67915
67916                         _addPlugin: function(plugin) {
67917                                 var self = this;
67918
67919                                 // If the plugin is an array, then add all plugins in the array.
67920                                 // This allows for a plugin to depend on other plugins.
67921                                 if (isList$1(plugin)) {
67922                                         each$1(plugin, function(plugin) {
67923                                                 self._addPlugin(plugin);
67924                                         });
67925                                         return
67926                                 }
67927
67928                                 // Keep track of all plugins we've seen so far, so that we
67929                                 // don't add any of them twice.
67930                                 var seenPlugin = pluck$1(this.plugins, function(seenPlugin) {
67931                                         return (plugin === seenPlugin)
67932                                 });
67933                                 if (seenPlugin) {
67934                                         return
67935                                 }
67936                                 this.plugins.push(plugin);
67937
67938                                 // Check that the plugin is properly formed
67939                                 if (!isFunction$3(plugin)) {
67940                                         throw new Error('Plugins must be function values that return objects')
67941                                 }
67942
67943                                 var pluginProperties = plugin.call(this);
67944                                 if (!isObject$5(pluginProperties)) {
67945                                         throw new Error('Plugins must return an object of function properties')
67946                                 }
67947
67948                                 // Add the plugin function properties to this store instance.
67949                                 each$1(pluginProperties, function(pluginFnProp, propName) {
67950                                         if (!isFunction$3(pluginFnProp)) {
67951                                                 throw new Error('Bad plugin property: '+propName+' from plugin '+plugin.name+'. Plugins should only return functions.')
67952                                         }
67953                                         self._assignPluginFnProp(pluginFnProp, propName);
67954                                 });
67955                         },
67956                         
67957                         // Put deprecated properties in the private API, so as to not expose it to accidential
67958                         // discovery through inspection of the store object.
67959                         
67960                         // Deprecated: addStorage
67961                         addStorage: function(storage) {
67962                                 _warn('store.addStorage(storage) is deprecated. Use createStore([storages])');
67963                                 this._addStorage(storage);
67964                         }
67965                 };
67966
67967                 var store = create$a(_privateStoreProps, storeAPI, {
67968                         plugins: []
67969                 });
67970                 store.raw = {};
67971                 each$1(store, function(prop, propName) {
67972                         if (isFunction$3(prop)) {
67973                                 store.raw[propName] = bind$4(store, prop);                      
67974                         }
67975                 });
67976                 each$1(storages, function(storage) {
67977                         store._addStorage(storage);
67978                 });
67979                 each$1(plugins, function(plugin) {
67980                         store._addPlugin(plugin);
67981                 });
67982                 return store
67983         }
67984
67985         var Global$1 = util.Global;
67986
67987         var localStorage_1 = {
67988                 name: 'localStorage',
67989                 read: read,
67990                 write: write,
67991                 each: each$2,
67992                 remove: remove$2,
67993                 clearAll: clearAll,
67994         };
67995
67996         function localStorage$1() {
67997                 return Global$1.localStorage
67998         }
67999
68000         function read(key) {
68001                 return localStorage$1().getItem(key)
68002         }
68003
68004         function write(key, data) {
68005                 return localStorage$1().setItem(key, data)
68006         }
68007
68008         function each$2(fn) {
68009                 for (var i = localStorage$1().length - 1; i >= 0; i--) {
68010                         var key = localStorage$1().key(i);
68011                         fn(read(key), key);
68012                 }
68013         }
68014
68015         function remove$2(key) {
68016                 return localStorage$1().removeItem(key)
68017         }
68018
68019         function clearAll() {
68020                 return localStorage$1().clear()
68021         }
68022
68023         // oldFF-globalStorage provides storage for Firefox
68024         // versions 6 and 7, where no localStorage, etc
68025         // is available.
68026
68027
68028         var Global$2 = util.Global;
68029
68030         var oldFFGlobalStorage = {
68031                 name: 'oldFF-globalStorage',
68032                 read: read$1,
68033                 write: write$1,
68034                 each: each$3,
68035                 remove: remove$3,
68036                 clearAll: clearAll$1,
68037         };
68038
68039         var globalStorage = Global$2.globalStorage;
68040
68041         function read$1(key) {
68042                 return globalStorage[key]
68043         }
68044
68045         function write$1(key, data) {
68046                 globalStorage[key] = data;
68047         }
68048
68049         function each$3(fn) {
68050                 for (var i = globalStorage.length - 1; i >= 0; i--) {
68051                         var key = globalStorage.key(i);
68052                         fn(globalStorage[key], key);
68053                 }
68054         }
68055
68056         function remove$3(key) {
68057                 return globalStorage.removeItem(key)
68058         }
68059
68060         function clearAll$1() {
68061                 each$3(function(key, _) {
68062                         delete globalStorage[key];
68063                 });
68064         }
68065
68066         // oldIE-userDataStorage provides storage for Internet Explorer
68067         // versions 6 and 7, where no localStorage, sessionStorage, etc
68068         // is available.
68069
68070
68071         var Global$3 = util.Global;
68072
68073         var oldIEUserDataStorage = {
68074                 name: 'oldIE-userDataStorage',
68075                 write: write$2,
68076                 read: read$2,
68077                 each: each$4,
68078                 remove: remove$4,
68079                 clearAll: clearAll$2,
68080         };
68081
68082         var storageName = 'storejs';
68083         var doc = Global$3.document;
68084         var _withStorageEl = _makeIEStorageElFunction();
68085         var disable = (Global$3.navigator ? Global$3.navigator.userAgent : '').match(/ (MSIE 8|MSIE 9|MSIE 10)\./); // MSIE 9.x, MSIE 10.x
68086
68087         function write$2(unfixedKey, data) {
68088                 if (disable) { return }
68089                 var fixedKey = fixKey(unfixedKey);
68090                 _withStorageEl(function(storageEl) {
68091                         storageEl.setAttribute(fixedKey, data);
68092                         storageEl.save(storageName);
68093                 });
68094         }
68095
68096         function read$2(unfixedKey) {
68097                 if (disable) { return }
68098                 var fixedKey = fixKey(unfixedKey);
68099                 var res = null;
68100                 _withStorageEl(function(storageEl) {
68101                         res = storageEl.getAttribute(fixedKey);
68102                 });
68103                 return res
68104         }
68105
68106         function each$4(callback) {
68107                 _withStorageEl(function(storageEl) {
68108                         var attributes = storageEl.XMLDocument.documentElement.attributes;
68109                         for (var i=attributes.length-1; i>=0; i--) {
68110                                 var attr = attributes[i];
68111                                 callback(storageEl.getAttribute(attr.name), attr.name);
68112                         }
68113                 });
68114         }
68115
68116         function remove$4(unfixedKey) {
68117                 var fixedKey = fixKey(unfixedKey);
68118                 _withStorageEl(function(storageEl) {
68119                         storageEl.removeAttribute(fixedKey);
68120                         storageEl.save(storageName);
68121                 });
68122         }
68123
68124         function clearAll$2() {
68125                 _withStorageEl(function(storageEl) {
68126                         var attributes = storageEl.XMLDocument.documentElement.attributes;
68127                         storageEl.load(storageName);
68128                         for (var i=attributes.length-1; i>=0; i--) {
68129                                 storageEl.removeAttribute(attributes[i].name);
68130                         }
68131                         storageEl.save(storageName);
68132                 });
68133         }
68134
68135         // Helpers
68136         //////////
68137
68138         // In IE7, keys cannot start with a digit or contain certain chars.
68139         // See https://github.com/marcuswestin/store.js/issues/40
68140         // See https://github.com/marcuswestin/store.js/issues/83
68141         var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g");
68142         function fixKey(key) {
68143                 return key.replace(/^\d/, '___$&').replace(forbiddenCharsRegex, '___')
68144         }
68145
68146         function _makeIEStorageElFunction() {
68147                 if (!doc || !doc.documentElement || !doc.documentElement.addBehavior) {
68148                         return null
68149                 }
68150                 var scriptTag = 'script',
68151                         storageOwner,
68152                         storageContainer,
68153                         storageEl;
68154
68155                 // Since #userData storage applies only to specific paths, we need to
68156                 // somehow link our data to a specific path.  We choose /favicon.ico
68157                 // as a pretty safe option, since all browsers already make a request to
68158                 // this URL anyway and being a 404 will not hurt us here.  We wrap an
68159                 // iframe pointing to the favicon in an ActiveXObject(htmlfile) object
68160                 // (see: http://msdn.microsoft.com/en-us/library/aa752574(v=VS.85).aspx)
68161                 // since the iframe access rules appear to allow direct access and
68162                 // manipulation of the document element, even for a 404 page.  This
68163                 // document can be used instead of the current document (which would
68164                 // have been limited to the current path) to perform #userData storage.
68165                 try {
68166                         /* global ActiveXObject */
68167                         storageContainer = new ActiveXObject('htmlfile');
68168                         storageContainer.open();
68169                         storageContainer.write('<'+scriptTag+'>document.w=window</'+scriptTag+'><iframe src="/favicon.ico"></iframe>');
68170                         storageContainer.close();
68171                         storageOwner = storageContainer.w.frames[0].document;
68172                         storageEl = storageOwner.createElement('div');
68173                 } catch(e) {
68174                         // somehow ActiveXObject instantiation failed (perhaps some special
68175                         // security settings or otherwse), fall back to per-path storage
68176                         storageEl = doc.createElement('div');
68177                         storageOwner = doc.body;
68178                 }
68179
68180                 return function(storeFunction) {
68181                         var args = [].slice.call(arguments, 0);
68182                         args.unshift(storageEl);
68183                         // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx
68184                         // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx
68185                         storageOwner.appendChild(storageEl);
68186                         storageEl.addBehavior('#default#userData');
68187                         storageEl.load(storageName);
68188                         storeFunction.apply(this, args);
68189                         storageOwner.removeChild(storageEl);
68190                         return
68191                 }
68192         }
68193
68194         // cookieStorage is useful Safari private browser mode, where localStorage
68195         // doesn't work but cookies do. This implementation is adopted from
68196         // https://developer.mozilla.org/en-US/docs/Web/API/Storage/LocalStorage
68197
68198
68199         var Global$4 = util.Global;
68200         var trim$2 = util.trim;
68201
68202         var cookieStorage = {
68203                 name: 'cookieStorage',
68204                 read: read$3,
68205                 write: write$3,
68206                 each: each$5,
68207                 remove: remove$5,
68208                 clearAll: clearAll$3,
68209         };
68210
68211         var doc$1 = Global$4.document;
68212
68213         function read$3(key) {
68214                 if (!key || !_has(key)) { return null }
68215                 var regexpStr = "(?:^|.*;\\s*)" +
68216                         escape(key).replace(/[\-\.\+\*]/g, "\\$&") +
68217                         "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*";
68218                 return unescape(doc$1.cookie.replace(new RegExp(regexpStr), "$1"))
68219         }
68220
68221         function each$5(callback) {
68222                 var cookies = doc$1.cookie.split(/; ?/g);
68223                 for (var i = cookies.length - 1; i >= 0; i--) {
68224                         if (!trim$2(cookies[i])) {
68225                                 continue
68226                         }
68227                         var kvp = cookies[i].split('=');
68228                         var key = unescape(kvp[0]);
68229                         var val = unescape(kvp[1]);
68230                         callback(val, key);
68231                 }
68232         }
68233
68234         function write$3(key, data) {
68235                 if(!key) { return }
68236                 doc$1.cookie = escape(key) + "=" + escape(data) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/";
68237         }
68238
68239         function remove$5(key) {
68240                 if (!key || !_has(key)) {
68241                         return
68242                 }
68243                 doc$1.cookie = escape(key) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
68244         }
68245
68246         function clearAll$3() {
68247                 each$5(function(_, key) {
68248                         remove$5(key);
68249                 });
68250         }
68251
68252         function _has(key) {
68253                 return (new RegExp("(?:^|;\\s*)" + escape(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(doc$1.cookie)
68254         }
68255
68256         var Global$5 = util.Global;
68257
68258         var sessionStorage_1 = {
68259                 name: 'sessionStorage',
68260                 read: read$4,
68261                 write: write$4,
68262                 each: each$6,
68263                 remove: remove$6,
68264                 clearAll: clearAll$4
68265         };
68266
68267         function sessionStorage() {
68268                 return Global$5.sessionStorage
68269         }
68270
68271         function read$4(key) {
68272                 return sessionStorage().getItem(key)
68273         }
68274
68275         function write$4(key, data) {
68276                 return sessionStorage().setItem(key, data)
68277         }
68278
68279         function each$6(fn) {
68280                 for (var i = sessionStorage().length - 1; i >= 0; i--) {
68281                         var key = sessionStorage().key(i);
68282                         fn(read$4(key), key);
68283                 }
68284         }
68285
68286         function remove$6(key) {
68287                 return sessionStorage().removeItem(key)
68288         }
68289
68290         function clearAll$4() {
68291                 return sessionStorage().clear()
68292         }
68293
68294         // memoryStorage is a useful last fallback to ensure that the store
68295         // is functions (meaning store.get(), store.set(), etc will all function).
68296         // However, stored values will not persist when the browser navigates to
68297         // a new page or reloads the current page.
68298
68299         var memoryStorage_1 = {
68300                 name: 'memoryStorage',
68301                 read: read$5,
68302                 write: write$5,
68303                 each: each$7,
68304                 remove: remove$7,
68305                 clearAll: clearAll$5,
68306         };
68307
68308         var memoryStorage = {};
68309
68310         function read$5(key) {
68311                 return memoryStorage[key]
68312         }
68313
68314         function write$5(key, data) {
68315                 memoryStorage[key] = data;
68316         }
68317
68318         function each$7(callback) {
68319                 for (var key in memoryStorage) {
68320                         if (memoryStorage.hasOwnProperty(key)) {
68321                                 callback(memoryStorage[key], key);
68322                         }
68323                 }
68324         }
68325
68326         function remove$7(key) {
68327                 delete memoryStorage[key];
68328         }
68329
68330         function clearAll$5(key) {
68331                 memoryStorage = {};
68332         }
68333
68334         var all = [
68335                 // Listed in order of usage preference
68336                 localStorage_1,
68337                 oldFFGlobalStorage,
68338                 oldIEUserDataStorage,
68339                 cookieStorage,
68340                 sessionStorage_1,
68341                 memoryStorage_1
68342         ];
68343
68344         /* eslint-disable */
68345
68346         //  json2.js
68347         //  2016-10-28
68348         //  Public Domain.
68349         //  NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
68350         //  See http://www.JSON.org/js.html
68351         //  This code should be minified before deployment.
68352         //  See http://javascript.crockford.com/jsmin.html
68353
68354         //  USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
68355         //  NOT CONTROL.
68356
68357         //  This file creates a global JSON object containing two methods: stringify
68358         //  and parse. This file provides the ES5 JSON capability to ES3 systems.
68359         //  If a project might run on IE8 or earlier, then this file should be included.
68360         //  This file does nothing on ES5 systems.
68361
68362         //      JSON.stringify(value, replacer, space)
68363         //          value       any JavaScript value, usually an object or array.
68364         //          replacer    an optional parameter that determines how object
68365         //                      values are stringified for objects. It can be a
68366         //                      function or an array of strings.
68367         //          space       an optional parameter that specifies the indentation
68368         //                      of nested structures. If it is omitted, the text will
68369         //                      be packed without extra whitespace. If it is a number,
68370         //                      it will specify the number of spaces to indent at each
68371         //                      level. If it is a string (such as "\t" or "&nbsp;"),
68372         //                      it contains the characters used to indent at each level.
68373         //          This method produces a JSON text from a JavaScript value.
68374         //          When an object value is found, if the object contains a toJSON
68375         //          method, its toJSON method will be called and the result will be
68376         //          stringified. A toJSON method does not serialize: it returns the
68377         //          value represented by the name/value pair that should be serialized,
68378         //          or undefined if nothing should be serialized. The toJSON method
68379         //          will be passed the key associated with the value, and this will be
68380         //          bound to the value.
68381
68382         //          For example, this would serialize Dates as ISO strings.
68383
68384         //              Date.prototype.toJSON = function (key) {
68385         //                  function f(n) {
68386         //                      // Format integers to have at least two digits.
68387         //                      return (n < 10)
68388         //                          ? "0" + n
68389         //                          : n;
68390         //                  }
68391         //                  return this.getUTCFullYear()   + "-" +
68392         //                       f(this.getUTCMonth() + 1) + "-" +
68393         //                       f(this.getUTCDate())      + "T" +
68394         //                       f(this.getUTCHours())     + ":" +
68395         //                       f(this.getUTCMinutes())   + ":" +
68396         //                       f(this.getUTCSeconds())   + "Z";
68397         //              };
68398
68399         //          You can provide an optional replacer method. It will be passed the
68400         //          key and value of each member, with this bound to the containing
68401         //          object. The value that is returned from your method will be
68402         //          serialized. If your method returns undefined, then the member will
68403         //          be excluded from the serialization.
68404
68405         //          If the replacer parameter is an array of strings, then it will be
68406         //          used to select the members to be serialized. It filters the results
68407         //          such that only members with keys listed in the replacer array are
68408         //          stringified.
68409
68410         //          Values that do not have JSON representations, such as undefined or
68411         //          functions, will not be serialized. Such values in objects will be
68412         //          dropped; in arrays they will be replaced with null. You can use
68413         //          a replacer function to replace those with JSON values.
68414
68415         //          JSON.stringify(undefined) returns undefined.
68416
68417         //          The optional space parameter produces a stringification of the
68418         //          value that is filled with line breaks and indentation to make it
68419         //          easier to read.
68420
68421         //          If the space parameter is a non-empty string, then that string will
68422         //          be used for indentation. If the space parameter is a number, then
68423         //          the indentation will be that many spaces.
68424
68425         //          Example:
68426
68427         //          text = JSON.stringify(["e", {pluribus: "unum"}]);
68428         //          // text is '["e",{"pluribus":"unum"}]'
68429
68430         //          text = JSON.stringify(["e", {pluribus: "unum"}], null, "\t");
68431         //          // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
68432
68433         //          text = JSON.stringify([new Date()], function (key, value) {
68434         //              return this[key] instanceof Date
68435         //                  ? "Date(" + this[key] + ")"
68436         //                  : value;
68437         //          });
68438         //          // text is '["Date(---current time---)"]'
68439
68440         //      JSON.parse(text, reviver)
68441         //          This method parses a JSON text to produce an object or array.
68442         //          It can throw a SyntaxError exception.
68443
68444         //          The optional reviver parameter is a function that can filter and
68445         //          transform the results. It receives each of the keys and values,
68446         //          and its return value is used instead of the original value.
68447         //          If it returns what it received, then the structure is not modified.
68448         //          If it returns undefined then the member is deleted.
68449
68450         //          Example:
68451
68452         //          // Parse the text. Values that look like ISO date strings will
68453         //          // be converted to Date objects.
68454
68455         //          myData = JSON.parse(text, function (key, value) {
68456         //              var a;
68457         //              if (typeof value === "string") {
68458         //                  a =
68459         //   /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
68460         //                  if (a) {
68461         //                      return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
68462         //                          +a[5], +a[6]));
68463         //                  }
68464         //              }
68465         //              return value;
68466         //          });
68467
68468         //          myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
68469         //              var d;
68470         //              if (typeof value === "string" &&
68471         //                      value.slice(0, 5) === "Date(" &&
68472         //                      value.slice(-1) === ")") {
68473         //                  d = new Date(value.slice(5, -1));
68474         //                  if (d) {
68475         //                      return d;
68476         //                  }
68477         //              }
68478         //              return value;
68479         //          });
68480
68481         //  This is a reference implementation. You are free to copy, modify, or
68482         //  redistribute.
68483
68484         /*jslint
68485             eval, for, this
68486         */
68487
68488         /*property
68489             JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
68490             getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
68491             lastIndex, length, parse, prototype, push, replace, slice, stringify,
68492             test, toJSON, toString, valueOf
68493         */
68494
68495
68496         // Create a JSON object only if one does not already exist. We create the
68497         // methods in a closure to avoid creating global variables.
68498
68499         if (typeof JSON !== "object") {
68500             JSON = {};
68501         }
68502
68503         (function () {
68504
68505             var rx_one = /^[\],:{}\s]*$/;
68506             var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
68507             var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
68508             var rx_four = /(?:^|:|,)(?:\s*\[)+/g;
68509             var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
68510             var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
68511
68512             function f(n) {
68513                 // Format integers to have at least two digits.
68514                 return n < 10
68515                     ? "0" + n
68516                     : n;
68517             }
68518
68519             function this_value() {
68520                 return this.valueOf();
68521             }
68522
68523             if (typeof Date.prototype.toJSON !== "function") {
68524
68525                 Date.prototype.toJSON = function () {
68526
68527                     return isFinite(this.valueOf())
68528                         ? this.getUTCFullYear() + "-" +
68529                                 f(this.getUTCMonth() + 1) + "-" +
68530                                 f(this.getUTCDate()) + "T" +
68531                                 f(this.getUTCHours()) + ":" +
68532                                 f(this.getUTCMinutes()) + ":" +
68533                                 f(this.getUTCSeconds()) + "Z"
68534                         : null;
68535                 };
68536
68537                 Boolean.prototype.toJSON = this_value;
68538                 Number.prototype.toJSON = this_value;
68539                 String.prototype.toJSON = this_value;
68540             }
68541
68542             var gap;
68543             var indent;
68544             var meta;
68545             var rep;
68546
68547
68548             function quote(string) {
68549
68550         // If the string contains no control characters, no quote characters, and no
68551         // backslash characters, then we can safely slap some quotes around it.
68552         // Otherwise we must also replace the offending characters with safe escape
68553         // sequences.
68554
68555                 rx_escapable.lastIndex = 0;
68556                 return rx_escapable.test(string)
68557                     ? "\"" + string.replace(rx_escapable, function (a) {
68558                         var c = meta[a];
68559                         return typeof c === "string"
68560                             ? c
68561                             : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
68562                     }) + "\""
68563                     : "\"" + string + "\"";
68564             }
68565
68566
68567             function str(key, holder) {
68568
68569         // Produce a string from holder[key].
68570
68571                 var i;          // The loop counter.
68572                 var k;          // The member key.
68573                 var v;          // The member value.
68574                 var length;
68575                 var mind = gap;
68576                 var partial;
68577                 var value = holder[key];
68578
68579         // If the value has a toJSON method, call it to obtain a replacement value.
68580
68581                 if (value && typeof value === "object" &&
68582                         typeof value.toJSON === "function") {
68583                     value = value.toJSON(key);
68584                 }
68585
68586         // If we were called with a replacer function, then call the replacer to
68587         // obtain a replacement value.
68588
68589                 if (typeof rep === "function") {
68590                     value = rep.call(holder, key, value);
68591                 }
68592
68593         // What happens next depends on the value's type.
68594
68595                 switch (typeof value) {
68596                 case "string":
68597                     return quote(value);
68598
68599                 case "number":
68600
68601         // JSON numbers must be finite. Encode non-finite numbers as null.
68602
68603                     return isFinite(value)
68604                         ? String(value)
68605                         : "null";
68606
68607                 case "boolean":
68608                 case "null":
68609
68610         // If the value is a boolean or null, convert it to a string. Note:
68611         // typeof null does not produce "null". The case is included here in
68612         // the remote chance that this gets fixed someday.
68613
68614                     return String(value);
68615
68616         // If the type is "object", we might be dealing with an object or an array or
68617         // null.
68618
68619                 case "object":
68620
68621         // Due to a specification blunder in ECMAScript, typeof null is "object",
68622         // so watch out for that case.
68623
68624                     if (!value) {
68625                         return "null";
68626                     }
68627
68628         // Make an array to hold the partial results of stringifying this object value.
68629
68630                     gap += indent;
68631                     partial = [];
68632
68633         // Is the value an array?
68634
68635                     if (Object.prototype.toString.apply(value) === "[object Array]") {
68636
68637         // The value is an array. Stringify every element. Use null as a placeholder
68638         // for non-JSON values.
68639
68640                         length = value.length;
68641                         for (i = 0; i < length; i += 1) {
68642                             partial[i] = str(i, value) || "null";
68643                         }
68644
68645         // Join all of the elements together, separated with commas, and wrap them in
68646         // brackets.
68647
68648                         v = partial.length === 0
68649                             ? "[]"
68650                             : gap
68651                                 ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]"
68652                                 : "[" + partial.join(",") + "]";
68653                         gap = mind;
68654                         return v;
68655                     }
68656
68657         // If the replacer is an array, use it to select the members to be stringified.
68658
68659                     if (rep && typeof rep === "object") {
68660                         length = rep.length;
68661                         for (i = 0; i < length; i += 1) {
68662                             if (typeof rep[i] === "string") {
68663                                 k = rep[i];
68664                                 v = str(k, value);
68665                                 if (v) {
68666                                     partial.push(quote(k) + (
68667                                         gap
68668                                             ? ": "
68669                                             : ":"
68670                                     ) + v);
68671                                 }
68672                             }
68673                         }
68674                     } else {
68675
68676         // Otherwise, iterate through all of the keys in the object.
68677
68678                         for (k in value) {
68679                             if (Object.prototype.hasOwnProperty.call(value, k)) {
68680                                 v = str(k, value);
68681                                 if (v) {
68682                                     partial.push(quote(k) + (
68683                                         gap
68684                                             ? ": "
68685                                             : ":"
68686                                     ) + v);
68687                                 }
68688                             }
68689                         }
68690                     }
68691
68692         // Join all of the member texts together, separated with commas,
68693         // and wrap them in braces.
68694
68695                     v = partial.length === 0
68696                         ? "{}"
68697                         : gap
68698                             ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}"
68699                             : "{" + partial.join(",") + "}";
68700                     gap = mind;
68701                     return v;
68702                 }
68703             }
68704
68705         // If the JSON object does not yet have a stringify method, give it one.
68706
68707             if (typeof JSON.stringify !== "function") {
68708                 meta = {    // table of character substitutions
68709                     "\b": "\\b",
68710                     "\t": "\\t",
68711                     "\n": "\\n",
68712                     "\f": "\\f",
68713                     "\r": "\\r",
68714                     "\"": "\\\"",
68715                     "\\": "\\\\"
68716                 };
68717                 JSON.stringify = function (value, replacer, space) {
68718
68719         // The stringify method takes a value and an optional replacer, and an optional
68720         // space parameter, and returns a JSON text. The replacer can be a function
68721         // that can replace values, or an array of strings that will select the keys.
68722         // A default replacer method can be provided. Use of the space parameter can
68723         // produce text that is more easily readable.
68724
68725                     var i;
68726                     gap = "";
68727                     indent = "";
68728
68729         // If the space parameter is a number, make an indent string containing that
68730         // many spaces.
68731
68732                     if (typeof space === "number") {
68733                         for (i = 0; i < space; i += 1) {
68734                             indent += " ";
68735                         }
68736
68737         // If the space parameter is a string, it will be used as the indent string.
68738
68739                     } else if (typeof space === "string") {
68740                         indent = space;
68741                     }
68742
68743         // If there is a replacer, it must be a function or an array.
68744         // Otherwise, throw an error.
68745
68746                     rep = replacer;
68747                     if (replacer && typeof replacer !== "function" &&
68748                             (typeof replacer !== "object" ||
68749                             typeof replacer.length !== "number")) {
68750                         throw new Error("JSON.stringify");
68751                     }
68752
68753         // Make a fake root object containing our value under the key of "".
68754         // Return the result of stringifying the value.
68755
68756                     return str("", {"": value});
68757                 };
68758             }
68759
68760
68761         // If the JSON object does not yet have a parse method, give it one.
68762
68763             if (typeof JSON.parse !== "function") {
68764                 JSON.parse = function (text, reviver) {
68765
68766         // The parse method takes a text and an optional reviver function, and returns
68767         // a JavaScript value if the text is a valid JSON text.
68768
68769                     var j;
68770
68771                     function walk(holder, key) {
68772
68773         // The walk method is used to recursively walk the resulting structure so
68774         // that modifications can be made.
68775
68776                         var k;
68777                         var v;
68778                         var value = holder[key];
68779                         if (value && typeof value === "object") {
68780                             for (k in value) {
68781                                 if (Object.prototype.hasOwnProperty.call(value, k)) {
68782                                     v = walk(value, k);
68783                                     if (v !== undefined) {
68784                                         value[k] = v;
68785                                     } else {
68786                                         delete value[k];
68787                                     }
68788                                 }
68789                             }
68790                         }
68791                         return reviver.call(holder, key, value);
68792                     }
68793
68794
68795         // Parsing happens in four stages. In the first stage, we replace certain
68796         // Unicode characters with escape sequences. JavaScript handles many characters
68797         // incorrectly, either silently deleting them, or treating them as line endings.
68798
68799                     text = String(text);
68800                     rx_dangerous.lastIndex = 0;
68801                     if (rx_dangerous.test(text)) {
68802                         text = text.replace(rx_dangerous, function (a) {
68803                             return "\\u" +
68804                                     ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
68805                         });
68806                     }
68807
68808         // In the second stage, we run the text against regular expressions that look
68809         // for non-JSON patterns. We are especially concerned with "()" and "new"
68810         // because they can cause invocation, and "=" because it can cause mutation.
68811         // But just to be safe, we want to reject all unexpected forms.
68812
68813         // We split the second stage into 4 regexp operations in order to work around
68814         // crippling inefficiencies in IE's and Safari's regexp engines. First we
68815         // replace the JSON backslash pairs with "@" (a non-JSON character). Second, we
68816         // replace all simple value tokens with "]" characters. Third, we delete all
68817         // open brackets that follow a colon or comma or that begin the text. Finally,
68818         // we look to see that the remaining characters are only whitespace or "]" or
68819         // "," or ":" or "{" or "}". If that is so, then the text is safe for eval.
68820
68821                     if (
68822                         rx_one.test(
68823                             text
68824                                 .replace(rx_two, "@")
68825                                 .replace(rx_three, "]")
68826                                 .replace(rx_four, "")
68827                         )
68828                     ) {
68829
68830         // In the third stage we use the eval function to compile the text into a
68831         // JavaScript structure. The "{" operator is subject to a syntactic ambiguity
68832         // in JavaScript: it can begin a block or an object literal. We wrap the text
68833         // in parens to eliminate the ambiguity.
68834
68835                         j = eval("(" + text + ")");
68836
68837         // In the optional fourth stage, we recursively walk the new structure, passing
68838         // each name/value pair to a reviver function for possible transformation.
68839
68840                         return (typeof reviver === "function")
68841                             ? walk({"": j}, "")
68842                             : j;
68843                     }
68844
68845         // If the text is not JSON parseable, then a SyntaxError is thrown.
68846
68847                     throw new SyntaxError("JSON.parse");
68848                 };
68849             }
68850         }());
68851
68852         var json2 = json2Plugin;
68853
68854         function json2Plugin() {
68855                 
68856                 return {}
68857         }
68858
68859         var plugins = [json2];
68860
68861         var store_legacy = storeEngine.createStore(all, plugins);
68862
68863         // # osm-auth
68864         //
68865         // This code is only compatible with IE10+ because the [XDomainRequest](http://bit.ly/LfO7xo)
68866         // object, IE<10's idea of [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing),
68867         // does not support custom headers, which this uses everywhere.
68868         var osmAuth = function(o) {
68869
68870             var oauth = {};
68871
68872             // authenticated users will also have a request token secret, but it's
68873             // not used in transactions with the server
68874             oauth.authenticated = function() {
68875                 return !!(token('oauth_token') && token('oauth_token_secret'));
68876             };
68877
68878             oauth.logout = function() {
68879                 token('oauth_token', '');
68880                 token('oauth_token_secret', '');
68881                 token('oauth_request_token_secret', '');
68882                 return oauth;
68883             };
68884
68885             // TODO: detect lack of click event
68886             oauth.authenticate = function(callback) {
68887                 if (oauth.authenticated()) { return callback(); }
68888
68889                 oauth.logout();
68890
68891                 // ## Getting a request token
68892                 var params = timenonce(getAuth(o)),
68893                     url = o.url + '/oauth/request_token';
68894
68895                 params.oauth_signature = ohauth_1.signature(
68896                     o.oauth_secret, '',
68897                     ohauth_1.baseString('POST', url, params));
68898
68899                 if (!o.singlepage) {
68900                     // Create a 600x550 popup window in the center of the screen
68901                     var w = 600, h = 550,
68902                         settings = [
68903                             ['width', w], ['height', h],
68904                             ['left', screen.width / 2 - w / 2],
68905                             ['top', screen.height / 2 - h / 2]].map(function(x) {
68906                                 return x.join('=');
68907                             }).join(','),
68908                         popup = window.open('about:blank', 'oauth_window', settings);
68909                 }
68910
68911                 // Request a request token. When this is complete, the popup
68912                 // window is redirected to OSM's authorization page.
68913                 ohauth_1.xhr('POST', url, params, null, {}, reqTokenDone);
68914                 o.loading();
68915
68916                 function reqTokenDone(err, xhr) {
68917                     o.done();
68918                     if (err) { return callback(err); }
68919                     var resp = ohauth_1.stringQs(xhr.response);
68920                     token('oauth_request_token_secret', resp.oauth_token_secret);
68921                     var authorize_url = o.url + '/oauth/authorize?' + ohauth_1.qsString({
68922                         oauth_token: resp.oauth_token,
68923                         oauth_callback: resolveUrl(o.landing)
68924                     });
68925
68926                     if (o.singlepage) {
68927                         location.href = authorize_url;
68928                     } else {
68929                         popup.location = authorize_url;
68930                     }
68931                 }
68932
68933                 // Called by a function in a landing page, in the popup window. The
68934                 // window closes itself.
68935                 window.authComplete = function(token) {
68936                     var oauth_token = ohauth_1.stringQs(token.split('?')[1]);
68937                     get_access_token(oauth_token.oauth_token);
68938                     delete window.authComplete;
68939                 };
68940
68941                 // ## Getting an request token
68942                 //
68943                 // At this point we have an `oauth_token`, brought in from a function
68944                 // call on a landing page popup.
68945                 function get_access_token(oauth_token) {
68946                     var url = o.url + '/oauth/access_token',
68947                         params = timenonce(getAuth(o)),
68948                         request_token_secret = token('oauth_request_token_secret');
68949                     params.oauth_token = oauth_token;
68950                     params.oauth_signature = ohauth_1.signature(
68951                         o.oauth_secret,
68952                         request_token_secret,
68953                         ohauth_1.baseString('POST', url, params));
68954
68955                     // ## Getting an access token
68956                     //
68957                     // The final token required for authentication. At this point
68958                     // we have a `request token secret`
68959                     ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone);
68960                     o.loading();
68961                 }
68962
68963                 function accessTokenDone(err, xhr) {
68964                     o.done();
68965                     if (err) { return callback(err); }
68966                     var access_token = ohauth_1.stringQs(xhr.response);
68967                     token('oauth_token', access_token.oauth_token);
68968                     token('oauth_token_secret', access_token.oauth_token_secret);
68969                     callback(null, oauth);
68970                 }
68971             };
68972
68973             oauth.bootstrapToken = function(oauth_token, callback) {
68974                 // ## Getting an request token
68975                 // At this point we have an `oauth_token`, brought in from a function
68976                 // call on a landing page popup.
68977                 function get_access_token(oauth_token) {
68978                     var url = o.url + '/oauth/access_token',
68979                         params = timenonce(getAuth(o)),
68980                         request_token_secret = token('oauth_request_token_secret');
68981                     params.oauth_token = oauth_token;
68982                     params.oauth_signature = ohauth_1.signature(
68983                         o.oauth_secret,
68984                         request_token_secret,
68985                         ohauth_1.baseString('POST', url, params));
68986
68987                     // ## Getting an access token
68988                     // The final token required for authentication. At this point
68989                     // we have a `request token secret`
68990                     ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone);
68991                     o.loading();
68992                 }
68993
68994                 function accessTokenDone(err, xhr) {
68995                     o.done();
68996                     if (err) { return callback(err); }
68997                     var access_token = ohauth_1.stringQs(xhr.response);
68998                     token('oauth_token', access_token.oauth_token);
68999                     token('oauth_token_secret', access_token.oauth_token_secret);
69000                     callback(null, oauth);
69001                 }
69002
69003                 get_access_token(oauth_token);
69004             };
69005
69006             // # xhr
69007             //
69008             // A single XMLHttpRequest wrapper that does authenticated calls if the
69009             // user has logged in.
69010             oauth.xhr = function(options, callback) {
69011                 if (!oauth.authenticated()) {
69012                     if (o.auto) {
69013                         return oauth.authenticate(run);
69014                     } else {
69015                         callback('not authenticated', null);
69016                         return;
69017                     }
69018                 } else {
69019                     return run();
69020                 }
69021
69022                 function run() {
69023                     var params = timenonce(getAuth(o)),
69024                         oauth_token_secret = token('oauth_token_secret'),
69025                         url = (options.prefix !== false) ? o.url + options.path : options.path,
69026                         url_parts = url.replace(/#.*$/, '').split('?', 2),
69027                         base_url = url_parts[0],
69028                         query = (url_parts.length === 2) ? url_parts[1] : '';
69029
69030                     // https://tools.ietf.org/html/rfc5849#section-3.4.1.3.1
69031                     if ((!options.options || !options.options.header ||
69032                         options.options.header['Content-Type'] === 'application/x-www-form-urlencoded') &&
69033                         options.content) {
69034                         params = immutable(params, ohauth_1.stringQs(options.content));
69035                     }
69036
69037                     params.oauth_token = token('oauth_token');
69038                     params.oauth_signature = ohauth_1.signature(
69039                         o.oauth_secret,
69040                         oauth_token_secret,
69041                         ohauth_1.baseString(options.method, base_url, immutable(params, ohauth_1.stringQs(query)))
69042                     );
69043
69044                     return ohauth_1.xhr(options.method, url, params, options.content, options.options, done);
69045                 }
69046
69047                 function done(err, xhr) {
69048                     if (err) { return callback(err); }
69049                     else if (xhr.responseXML) { return callback(err, xhr.responseXML); }
69050                     else { return callback(err, xhr.response); }
69051                 }
69052             };
69053
69054             // pre-authorize this object, if we can just get a token and token_secret
69055             // from the start
69056             oauth.preauth = function(c) {
69057                 if (!c) { return; }
69058                 if (c.oauth_token) { token('oauth_token', c.oauth_token); }
69059                 if (c.oauth_token_secret) { token('oauth_token_secret', c.oauth_token_secret); }
69060                 return oauth;
69061             };
69062
69063             oauth.options = function(_) {
69064                 if (!arguments.length) { return o; }
69065
69066                 o = _;
69067                 o.url = o.url || 'https://www.openstreetmap.org';
69068                 o.landing = o.landing || 'land.html';
69069                 o.singlepage = o.singlepage || false;
69070
69071                 // Optional loading and loading-done functions for nice UI feedback.
69072                 // by default, no-ops
69073                 o.loading = o.loading || function() {};
69074                 o.done = o.done || function() {};
69075
69076                 return oauth.preauth(o);
69077             };
69078
69079             // 'stamp' an authentication object from `getAuth()`
69080             // with a [nonce](http://en.wikipedia.org/wiki/Cryptographic_nonce)
69081             // and timestamp
69082             function timenonce(o) {
69083                 o.oauth_timestamp = ohauth_1.timestamp();
69084                 o.oauth_nonce = ohauth_1.nonce();
69085                 return o;
69086             }
69087
69088             // get/set tokens. These are prefixed with the base URL so that `osm-auth`
69089             // can be used with multiple APIs and the keys in `localStorage`
69090             // will not clash
69091             var token;
69092
69093             if (store_legacy.enabled) {
69094                 token = function (x, y) {
69095                     if (arguments.length === 1) { return store_legacy.get(o.url + x); }
69096                     else if (arguments.length === 2) { return store_legacy.set(o.url + x, y); }
69097                 };
69098             } else {
69099                 var storage = {};
69100                 token = function (x, y) {
69101                     if (arguments.length === 1) { return storage[o.url + x]; }
69102                     else if (arguments.length === 2) { return storage[o.url + x] = y; }
69103                 };
69104             }
69105
69106             // Get an authentication object. If you just add and remove properties
69107             // from a single object, you'll need to use `delete` to make sure that
69108             // it doesn't contain undesired properties for authentication
69109             function getAuth(o) {
69110                 return {
69111                     oauth_consumer_key: o.oauth_consumer_key,
69112                     oauth_signature_method: 'HMAC-SHA1'
69113                 };
69114             }
69115
69116             // potentially pre-authorize
69117             oauth.options(o);
69118
69119             return oauth;
69120         };
69121
69122         var JXON = new (function () {
69123           var
69124             sValueProp = 'keyValue', sAttributesProp = 'keyAttributes', sAttrPref = '@', /* you can customize these values */
69125             aCache = [], rIsNull = /^\s*$/, rIsBool = /^(?:true|false)$/i;
69126
69127           function parseText (sValue) {
69128             if (rIsNull.test(sValue)) { return null; }
69129             if (rIsBool.test(sValue)) { return sValue.toLowerCase() === 'true'; }
69130             if (isFinite(sValue)) { return parseFloat(sValue); }
69131             if (isFinite(Date.parse(sValue))) { return new Date(sValue); }
69132             return sValue;
69133           }
69134
69135           function EmptyTree () { }
69136           EmptyTree.prototype.toString = function () { return 'null'; };
69137           EmptyTree.prototype.valueOf = function () { return null; };
69138
69139           function objectify (vValue) {
69140             return vValue === null ? new EmptyTree() : vValue instanceof Object ? vValue : new vValue.constructor(vValue);
69141           }
69142
69143           function createObjTree (oParentNode, nVerb, bFreeze, bNesteAttr) {
69144             var
69145               nLevelStart = aCache.length, bChildren = oParentNode.hasChildNodes(),
69146               bAttributes = oParentNode.hasAttributes(), bHighVerb = Boolean(nVerb & 2);
69147
69148             var
69149               sProp, vContent, nLength = 0, sCollectedTxt = '',
69150               vResult = bHighVerb ? {} : /* put here the default value for empty nodes: */ true;
69151
69152             if (bChildren) {
69153               for (var oNode, nItem = 0; nItem < oParentNode.childNodes.length; nItem++) {
69154                 oNode = oParentNode.childNodes.item(nItem);
69155                 if (oNode.nodeType === 4) { sCollectedTxt += oNode.nodeValue; } /* nodeType is 'CDATASection' (4) */
69156                 else if (oNode.nodeType === 3) { sCollectedTxt += oNode.nodeValue.trim(); } /* nodeType is 'Text' (3) */
69157                 else if (oNode.nodeType === 1 && !oNode.prefix) { aCache.push(oNode); } /* nodeType is 'Element' (1) */
69158               }
69159             }
69160
69161             var nLevelEnd = aCache.length, vBuiltVal = parseText(sCollectedTxt);
69162
69163             if (!bHighVerb && (bChildren || bAttributes)) { vResult = nVerb === 0 ? objectify(vBuiltVal) : {}; }
69164
69165             for (var nElId = nLevelStart; nElId < nLevelEnd; nElId++) {
69166               sProp = aCache[nElId].nodeName.toLowerCase();
69167               vContent = createObjTree(aCache[nElId], nVerb, bFreeze, bNesteAttr);
69168               if (vResult.hasOwnProperty(sProp)) {
69169                 if (vResult[sProp].constructor !== Array) { vResult[sProp] = [vResult[sProp]]; }
69170                 vResult[sProp].push(vContent);
69171               } else {
69172                 vResult[sProp] = vContent;
69173                 nLength++;
69174               }
69175             }
69176
69177             if (bAttributes) {
69178               var
69179                 nAttrLen = oParentNode.attributes.length,
69180                 sAPrefix = bNesteAttr ? '' : sAttrPref, oAttrParent = bNesteAttr ? {} : vResult;
69181
69182               for (var oAttrib, nAttrib = 0; nAttrib < nAttrLen; nLength++, nAttrib++) {
69183                 oAttrib = oParentNode.attributes.item(nAttrib);
69184                 oAttrParent[sAPrefix + oAttrib.name.toLowerCase()] = parseText(oAttrib.value.trim());
69185               }
69186
69187               if (bNesteAttr) {
69188                 if (bFreeze) { Object.freeze(oAttrParent); }
69189                 vResult[sAttributesProp] = oAttrParent;
69190                 nLength -= nAttrLen - 1;
69191               }
69192             }
69193
69194             if (nVerb === 3 || (nVerb === 2 || nVerb === 1 && nLength > 0) && sCollectedTxt) {
69195               vResult[sValueProp] = vBuiltVal;
69196             } else if (!bHighVerb && nLength === 0 && sCollectedTxt) {
69197               vResult = vBuiltVal;
69198             }
69199
69200             if (bFreeze && (bHighVerb || nLength > 0)) { Object.freeze(vResult); }
69201
69202             aCache.length = nLevelStart;
69203
69204             return vResult;
69205           }
69206
69207           function loadObjTree (oXMLDoc, oParentEl, oParentObj) {
69208             var vValue, oChild;
69209
69210             if (oParentObj instanceof String || oParentObj instanceof Number || oParentObj instanceof Boolean) {
69211               oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toString())); /* verbosity level is 0 */
69212             } else if (oParentObj.constructor === Date) {
69213               oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toGMTString()));    
69214             }
69215
69216             for (var sName in oParentObj) {
69217               vValue = oParentObj[sName];
69218               if (isFinite(sName) || vValue instanceof Function) { continue; } /* verbosity level is 0 */
69219               if (sName === sValueProp) {
69220                 if (vValue !== null && vValue !== true) { oParentEl.appendChild(oXMLDoc.createTextNode(vValue.constructor === Date ? vValue.toGMTString() : String(vValue))); }
69221               } else if (sName === sAttributesProp) { /* verbosity level is 3 */
69222                 for (var sAttrib in vValue) { oParentEl.setAttribute(sAttrib, vValue[sAttrib]); }
69223               } else if (sName.charAt(0) === sAttrPref) {
69224                 oParentEl.setAttribute(sName.slice(1), vValue);
69225               } else if (vValue.constructor === Array) {
69226                 for (var nItem = 0; nItem < vValue.length; nItem++) {
69227                   oChild = oXMLDoc.createElement(sName);
69228                   loadObjTree(oXMLDoc, oChild, vValue[nItem]);
69229                   oParentEl.appendChild(oChild);
69230                 }
69231               } else {
69232                 oChild = oXMLDoc.createElement(sName);
69233                 if (vValue instanceof Object) {
69234                   loadObjTree(oXMLDoc, oChild, vValue);
69235                 } else if (vValue !== null && vValue !== true) {
69236                   oChild.appendChild(oXMLDoc.createTextNode(vValue.toString()));
69237                 }
69238                 oParentEl.appendChild(oChild);
69239              }
69240            }
69241           }
69242
69243           this.build = function (oXMLParent, nVerbosity /* optional */, bFreeze /* optional */, bNesteAttributes /* optional */) {
69244             var _nVerb = arguments.length > 1 && typeof nVerbosity === 'number' ? nVerbosity & 3 : /* put here the default verbosity level: */ 1;
69245             return createObjTree(oXMLParent, _nVerb, bFreeze || false, arguments.length > 3 ? bNesteAttributes : _nVerb === 3);    
69246           };
69247
69248           this.unbuild = function (oObjTree) {    
69249             var oNewDoc = document.implementation.createDocument('', '', null);
69250             loadObjTree(oNewDoc, oNewDoc, oObjTree);
69251             return oNewDoc;
69252           };
69253
69254           this.stringify = function (oObjTree) {
69255             return (new XMLSerializer()).serializeToString(JXON.unbuild(oObjTree));
69256           };
69257         })();
69258
69259         // var myObject = JXON.build(doc);
69260         // we got our javascript object! try: alert(JSON.stringify(myObject));
69261
69262         // var newDoc = JXON.unbuild(myObject);
69263         // we got our Document instance! try: alert((new XMLSerializer()).serializeToString(newDoc));
69264
69265         var tiler$4 = utilTiler();
69266         var dispatch$5 = dispatch('apiStatusChange', 'authLoading', 'authDone', 'change', 'loading', 'loaded', 'loadedNotes');
69267         var urlroot = 'https://www.openstreetmap.org';
69268         var oauth = osmAuth({
69269             url: urlroot,
69270             oauth_consumer_key: '5A043yRSEugj4DJ5TljuapfnrflWDte8jTOcWLlT',
69271             oauth_secret: 'aB3jKq1TRsCOUrfOIZ6oQMEDmv2ptV76PA54NGLL',
69272             loading: authLoading,
69273             done: authDone
69274         });
69275
69276         var _blacklists = ['.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*'];
69277         var _tileCache = { toLoad: {}, loaded: {}, inflight: {}, seen: {}, rtree: new RBush() };
69278         var _noteCache = { toLoad: {}, loaded: {}, inflight: {}, inflightPost: {}, note: {}, closed: {}, rtree: new RBush() };
69279         var _userCache = { toLoad: {}, user: {} };
69280         var _cachedApiStatus;
69281         var _changeset = {};
69282
69283         var _deferred = new Set();
69284         var _connectionID = 1;
69285         var _tileZoom = 16;
69286         var _noteZoom = 12;
69287         var _rateLimitError;
69288         var _userChangesets;
69289         var _userDetails;
69290         var _off;
69291
69292
69293         function authLoading() {
69294             dispatch$5.call('authLoading');
69295         }
69296
69297
69298         function authDone() {
69299             dispatch$5.call('authDone');
69300         }
69301
69302
69303         function abortRequest$4(controllerOrXHR) {
69304             if (controllerOrXHR) {
69305                 controllerOrXHR.abort();
69306             }
69307         }
69308
69309
69310         function hasInflightRequests(cache) {
69311             return Object.keys(cache.inflight).length;
69312         }
69313
69314
69315         function abortUnwantedRequests$2(cache, visibleTiles) {
69316             Object.keys(cache.inflight).forEach(function(k) {
69317                 if (cache.toLoad[k]) { return; }
69318                 if (visibleTiles.find(function(tile) { return k === tile.id; })) { return; }
69319
69320                 abortRequest$4(cache.inflight[k]);
69321                 delete cache.inflight[k];
69322             });
69323         }
69324
69325
69326         function getLoc(attrs) {
69327             var lon = attrs.lon && attrs.lon.value;
69328             var lat = attrs.lat && attrs.lat.value;
69329             return [parseFloat(lon), parseFloat(lat)];
69330         }
69331
69332
69333         function getNodes(obj) {
69334             var elems = obj.getElementsByTagName('nd');
69335             var nodes = new Array(elems.length);
69336             for (var i = 0, l = elems.length; i < l; i++) {
69337                 nodes[i] = 'n' + elems[i].attributes.ref.value;
69338             }
69339             return nodes;
69340         }
69341
69342         function getTags(obj) {
69343             var elems = obj.getElementsByTagName('tag');
69344             var tags = {};
69345             for (var i = 0, l = elems.length; i < l; i++) {
69346                 var attrs = elems[i].attributes;
69347                 tags[attrs.k.value] = attrs.v.value;
69348             }
69349
69350             return tags;
69351         }
69352
69353
69354         function getMembers(obj) {
69355             var elems = obj.getElementsByTagName('member');
69356             var members = new Array(elems.length);
69357             for (var i = 0, l = elems.length; i < l; i++) {
69358                 var attrs = elems[i].attributes;
69359                 members[i] = {
69360                     id: attrs.type.value[0] + attrs.ref.value,
69361                     type: attrs.type.value,
69362                     role: attrs.role.value
69363                 };
69364             }
69365             return members;
69366         }
69367
69368         function getVisible(attrs) {
69369             return (!attrs.visible || attrs.visible.value !== 'false');
69370         }
69371
69372
69373         function parseComments(comments) {
69374             var parsedComments = [];
69375
69376             // for each comment
69377             for (var i = 0; i < comments.length; i++) {
69378                 var comment = comments[i];
69379                 if (comment.nodeName === 'comment') {
69380                     var childNodes = comment.childNodes;
69381                     var parsedComment = {};
69382
69383                     for (var j = 0; j < childNodes.length; j++) {
69384                         var node = childNodes[j];
69385                         var nodeName = node.nodeName;
69386                         if (nodeName === '#text') { continue; }
69387                         parsedComment[nodeName] = node.textContent;
69388
69389                         if (nodeName === 'uid') {
69390                             var uid = node.textContent;
69391                             if (uid && !_userCache.user[uid]) {
69392                                 _userCache.toLoad[uid] = true;
69393                             }
69394                         }
69395                     }
69396
69397                     if (parsedComment) {
69398                         parsedComments.push(parsedComment);
69399                     }
69400                 }
69401             }
69402             return parsedComments;
69403         }
69404
69405
69406         function encodeNoteRtree(note) {
69407             return {
69408                 minX: note.loc[0],
69409                 minY: note.loc[1],
69410                 maxX: note.loc[0],
69411                 maxY: note.loc[1],
69412                 data: note
69413             };
69414         }
69415
69416         var parsers = {
69417             node: function nodeData(obj, uid) {
69418                 var attrs = obj.attributes;
69419                 return new osmNode({
69420                     id: uid,
69421                     visible: getVisible(attrs),
69422                     version: attrs.version.value,
69423                     changeset: attrs.changeset && attrs.changeset.value,
69424                     timestamp: attrs.timestamp && attrs.timestamp.value,
69425                     user: attrs.user && attrs.user.value,
69426                     uid: attrs.uid && attrs.uid.value,
69427                     loc: getLoc(attrs),
69428                     tags: getTags(obj)
69429                 });
69430             },
69431
69432             way: function wayData(obj, uid) {
69433                 var attrs = obj.attributes;
69434                 return new osmWay({
69435                     id: uid,
69436                     visible: getVisible(attrs),
69437                     version: attrs.version.value,
69438                     changeset: attrs.changeset && attrs.changeset.value,
69439                     timestamp: attrs.timestamp && attrs.timestamp.value,
69440                     user: attrs.user && attrs.user.value,
69441                     uid: attrs.uid && attrs.uid.value,
69442                     tags: getTags(obj),
69443                     nodes: getNodes(obj),
69444                 });
69445             },
69446
69447             relation: function relationData(obj, uid) {
69448                 var attrs = obj.attributes;
69449                 return new osmRelation({
69450                     id: uid,
69451                     visible: getVisible(attrs),
69452                     version: attrs.version.value,
69453                     changeset: attrs.changeset && attrs.changeset.value,
69454                     timestamp: attrs.timestamp && attrs.timestamp.value,
69455                     user: attrs.user && attrs.user.value,
69456                     uid: attrs.uid && attrs.uid.value,
69457                     tags: getTags(obj),
69458                     members: getMembers(obj)
69459                 });
69460             },
69461
69462             note: function parseNote(obj, uid) {
69463                 var attrs = obj.attributes;
69464                 var childNodes = obj.childNodes;
69465                 var props = {};
69466
69467                 props.id = uid;
69468                 props.loc = getLoc(attrs);
69469
69470                 // if notes are coincident, move them apart slightly
69471                 var coincident = false;
69472                 var epsilon = 0.00001;
69473                 do {
69474                     if (coincident) {
69475                         props.loc = geoVecAdd(props.loc, [epsilon, epsilon]);
69476                     }
69477                     var bbox = geoExtent(props.loc).bbox();
69478                     coincident = _noteCache.rtree.search(bbox).length;
69479                 } while (coincident);
69480
69481                 // parse note contents
69482                 for (var i = 0; i < childNodes.length; i++) {
69483                     var node = childNodes[i];
69484                     var nodeName = node.nodeName;
69485                     if (nodeName === '#text') { continue; }
69486
69487                     // if the element is comments, parse the comments
69488                     if (nodeName === 'comments') {
69489                         props[nodeName] = parseComments(node.childNodes);
69490                     } else {
69491                         props[nodeName] = node.textContent;
69492                     }
69493                 }
69494
69495                 var note = new osmNote(props);
69496                 var item = encodeNoteRtree(note);
69497                 _noteCache.note[note.id] = note;
69498                 _noteCache.rtree.insert(item);
69499
69500                 return note;
69501             },
69502
69503             user: function parseUser(obj, uid) {
69504                 var attrs = obj.attributes;
69505                 var user = {
69506                     id: uid,
69507                     display_name: attrs.display_name && attrs.display_name.value,
69508                     account_created: attrs.account_created && attrs.account_created.value,
69509                     changesets_count: '0',
69510                     active_blocks: '0'
69511                 };
69512
69513                 var img = obj.getElementsByTagName('img');
69514                 if (img && img[0] && img[0].getAttribute('href')) {
69515                     user.image_url = img[0].getAttribute('href');
69516                 }
69517
69518                 var changesets = obj.getElementsByTagName('changesets');
69519                 if (changesets && changesets[0] && changesets[0].getAttribute('count')) {
69520                     user.changesets_count = changesets[0].getAttribute('count');
69521                 }
69522
69523                 var blocks = obj.getElementsByTagName('blocks');
69524                 if (blocks && blocks[0]) {
69525                     var received = blocks[0].getElementsByTagName('received');
69526                     if (received && received[0] && received[0].getAttribute('active')) {
69527                         user.active_blocks = received[0].getAttribute('active');
69528                     }
69529                 }
69530
69531                 _userCache.user[uid] = user;
69532                 delete _userCache.toLoad[uid];
69533                 return user;
69534             }
69535         };
69536
69537
69538         function parseXML(xml, callback, options) {
69539             options = Object.assign({ skipSeen: true }, options);
69540             if (!xml || !xml.childNodes) {
69541                 return callback({ message: 'No XML', status: -1 });
69542             }
69543
69544             var root = xml.childNodes[0];
69545             var children = root.childNodes;
69546
69547             var handle = window.requestIdleCallback(function() {
69548                 var results = [];
69549                 var result;
69550                 for (var i = 0; i < children.length; i++) {
69551                     result = parseChild(children[i]);
69552                     if (result) { results.push(result); }
69553                 }
69554                 callback(null, results);
69555             });
69556
69557             _deferred.add(handle);
69558
69559
69560             function parseChild(child) {
69561                 var parser = parsers[child.nodeName];
69562                 if (!parser) { return null; }
69563
69564                 var uid;
69565                 if (child.nodeName === 'user') {
69566                     uid = child.attributes.id.value;
69567                     if (options.skipSeen && _userCache.user[uid]) {
69568                         delete _userCache.toLoad[uid];
69569                         return null;
69570                     }
69571
69572                 } else if (child.nodeName === 'note') {
69573                     uid = child.getElementsByTagName('id')[0].textContent;
69574
69575                 } else {
69576                     uid = osmEntity.id.fromOSM(child.nodeName, child.attributes.id.value);
69577                     if (options.skipSeen) {
69578                         if (_tileCache.seen[uid]) { return null; }  // avoid reparsing a "seen" entity
69579                         _tileCache.seen[uid] = true;
69580                     }
69581                 }
69582
69583                 return parser(child, uid);
69584             }
69585         }
69586
69587
69588         // replace or remove note from rtree
69589         function updateRtree$2(item, replace) {
69590             _noteCache.rtree.remove(item, function isEql(a, b) { return a.data.id === b.data.id; });
69591
69592             if (replace) {
69593                 _noteCache.rtree.insert(item);
69594             }
69595         }
69596
69597
69598         function wrapcb(thisArg, callback, cid) {
69599             return function(err, result) {
69600                 if (err) {
69601                     // 400 Bad Request, 401 Unauthorized, 403 Forbidden..
69602                     if (err.status === 400 || err.status === 401 || err.status === 403) {
69603                         thisArg.logout();
69604                     }
69605                     return callback.call(thisArg, err);
69606
69607                 } else if (thisArg.getConnectionId() !== cid) {
69608                     return callback.call(thisArg, { message: 'Connection Switched', status: -1 });
69609
69610                 } else {
69611                     return callback.call(thisArg, err, result);
69612                 }
69613             };
69614         }
69615
69616
69617         var serviceOsm = {
69618
69619             init: function() {
69620                 utilRebind(this, dispatch$5, 'on');
69621             },
69622
69623
69624             reset: function() {
69625                 Array.from(_deferred).forEach(function(handle) {
69626                     window.cancelIdleCallback(handle);
69627                     _deferred.delete(handle);
69628                 });
69629
69630                 _connectionID++;
69631                 _userChangesets = undefined;
69632                 _userDetails = undefined;
69633                 _rateLimitError = undefined;
69634
69635                 Object.values(_tileCache.inflight).forEach(abortRequest$4);
69636                 Object.values(_noteCache.inflight).forEach(abortRequest$4);
69637                 Object.values(_noteCache.inflightPost).forEach(abortRequest$4);
69638                 if (_changeset.inflight) { abortRequest$4(_changeset.inflight); }
69639
69640                 _tileCache = { toLoad: {}, loaded: {}, inflight: {}, seen: {}, rtree: new RBush() };
69641                 _noteCache = { toLoad: {}, loaded: {}, inflight: {}, inflightPost: {}, note: {}, closed: {}, rtree: new RBush() };
69642                 _userCache = { toLoad: {}, user: {} };
69643                 _cachedApiStatus = undefined;
69644                 _changeset = {};
69645
69646                 return this;
69647             },
69648
69649
69650             getConnectionId: function() {
69651                 return _connectionID;
69652             },
69653
69654
69655             changesetURL: function(changesetID) {
69656                 return urlroot + '/changeset/' + changesetID;
69657             },
69658
69659
69660             changesetsURL: function(center, zoom) {
69661                 var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
69662                 return urlroot + '/history#map=' +
69663                     Math.floor(zoom) + '/' +
69664                     center[1].toFixed(precision) + '/' +
69665                     center[0].toFixed(precision);
69666             },
69667
69668
69669             entityURL: function(entity) {
69670                 return urlroot + '/' + entity.type + '/' + entity.osmId();
69671             },
69672
69673
69674             historyURL: function(entity) {
69675                 return urlroot + '/' + entity.type + '/' + entity.osmId() + '/history';
69676             },
69677
69678
69679             userURL: function(username) {
69680                 return urlroot + '/user/' + username;
69681             },
69682
69683
69684             noteURL: function(note) {
69685                 return urlroot + '/note/' + note.id;
69686             },
69687
69688
69689             noteReportURL: function(note) {
69690                 return urlroot + '/reports/new?reportable_type=Note&reportable_id=' + note.id;
69691             },
69692
69693
69694             // Generic method to load data from the OSM API
69695             // Can handle either auth or unauth calls.
69696             loadFromAPI: function(path, callback, options) {
69697                 options = Object.assign({ skipSeen: true }, options);
69698                 var that = this;
69699                 var cid = _connectionID;
69700
69701                 function done(err, payload) {
69702                     if (that.getConnectionId() !== cid) {
69703                         if (callback) { callback({ message: 'Connection Switched', status: -1 }); }
69704                         return;
69705                     }
69706
69707                     var isAuthenticated = that.authenticated();
69708
69709                     // 400 Bad Request, 401 Unauthorized, 403 Forbidden
69710                     // Logout and retry the request..
69711                     if (isAuthenticated && err && err.status &&
69712                             (err.status === 400 || err.status === 401 || err.status === 403)) {
69713                         that.logout();
69714                         that.loadFromAPI(path, callback, options);
69715
69716                     // else, no retry..
69717                     } else {
69718                         // 509 Bandwidth Limit Exceeded, 429 Too Many Requests
69719                         // Set the rateLimitError flag and trigger a warning..
69720                         if (!isAuthenticated && !_rateLimitError && err && err.status &&
69721                                 (err.status === 509 || err.status === 429)) {
69722                             _rateLimitError = err;
69723                             dispatch$5.call('change');
69724                             that.reloadApiStatus();
69725
69726                         } else if ((err && _cachedApiStatus === 'online') ||
69727                             (!err && _cachedApiStatus !== 'online')) {
69728                             // If the response's error state doesn't match the status,
69729                             // it's likely we lost or gained the connection so reload the status
69730                             that.reloadApiStatus();
69731                         }
69732
69733                         if (callback) {
69734                             if (err) {
69735                                 return callback(err);
69736                             } else {
69737                                 return parseXML(payload, callback, options);
69738                             }
69739                         }
69740                     }
69741                 }
69742
69743                 if (this.authenticated()) {
69744                     return oauth.xhr({ method: 'GET', path: path }, done);
69745                 } else {
69746                     var url = urlroot + path;
69747                     var controller = new AbortController();
69748                     d3_xml(url, { signal: controller.signal })
69749                         .then(function(data) {
69750                             done(null, data);
69751                         })
69752                         .catch(function(err) {
69753                             if (err.name === 'AbortError') { return; }
69754                             // d3-fetch includes status in the error message,
69755                             // but we can't access the response itself
69756                             // https://github.com/d3/d3-fetch/issues/27
69757                             var match = err.message.match(/^\d{3}/);
69758                             if (match) {
69759                                 done({ status: +match[0], statusText: err.message });
69760                             } else {
69761                                 done(err.message);
69762                             }
69763                         });
69764                     return controller;
69765                 }
69766             },
69767
69768
69769             // Load a single entity by id (ways and relations use the `/full` call)
69770             // GET /api/0.6/node/#id
69771             // GET /api/0.6/[way|relation]/#id/full
69772             loadEntity: function(id, callback) {
69773                 var type = osmEntity.id.type(id);
69774                 var osmID = osmEntity.id.toOSM(id);
69775                 var options = { skipSeen: false };
69776
69777                 this.loadFromAPI(
69778                     '/api/0.6/' + type + '/' + osmID + (type !== 'node' ? '/full' : ''),
69779                     function(err, entities) {
69780                         if (callback) { callback(err, { data: entities }); }
69781                     },
69782                     options
69783                 );
69784             },
69785
69786
69787             // Load a single entity with a specific version
69788             // GET /api/0.6/[node|way|relation]/#id/#version
69789             loadEntityVersion: function(id, version, callback) {
69790                 var type = osmEntity.id.type(id);
69791                 var osmID = osmEntity.id.toOSM(id);
69792                 var options = { skipSeen: false };
69793
69794                 this.loadFromAPI(
69795                     '/api/0.6/' + type + '/' + osmID + '/' + version,
69796                     function(err, entities) {
69797                         if (callback) { callback(err, { data: entities }); }
69798                     },
69799                     options
69800                 );
69801             },
69802
69803
69804             // Load multiple entities in chunks
69805             // (note: callback may be called multiple times)
69806             // Unlike `loadEntity`, child nodes and members are not fetched
69807             // GET /api/0.6/[nodes|ways|relations]?#parameters
69808             loadMultiple: function(ids, callback) {
69809                 var that = this;
69810                 var groups = utilArrayGroupBy(utilArrayUniq(ids), osmEntity.id.type);
69811
69812                 Object.keys(groups).forEach(function(k) {
69813                     var type = k + 's';   // nodes, ways, relations
69814                     var osmIDs = groups[k].map(function(id) { return osmEntity.id.toOSM(id); });
69815                     var options = { skipSeen: false };
69816
69817                     utilArrayChunk(osmIDs, 150).forEach(function(arr) {
69818                         that.loadFromAPI(
69819                             '/api/0.6/' + type + '?' + type + '=' + arr.join(),
69820                             function(err, entities) {
69821                                 if (callback) { callback(err, { data: entities }); }
69822                             },
69823                             options
69824                         );
69825                     });
69826                 });
69827             },
69828
69829
69830             // Create, upload, and close a changeset
69831             // PUT /api/0.6/changeset/create
69832             // POST /api/0.6/changeset/#id/upload
69833             // PUT /api/0.6/changeset/#id/close
69834             putChangeset: function(changeset, changes, callback) {
69835                 var cid = _connectionID;
69836
69837                 if (_changeset.inflight) {
69838                     return callback({ message: 'Changeset already inflight', status: -2 }, changeset);
69839
69840                 } else if (_changeset.open) {   // reuse existing open changeset..
69841                     return createdChangeset.call(this, null, _changeset.open);
69842
69843                 } else {   // Open a new changeset..
69844                     var options = {
69845                         method: 'PUT',
69846                         path: '/api/0.6/changeset/create',
69847                         options: { header: { 'Content-Type': 'text/xml' } },
69848                         content: JXON.stringify(changeset.asJXON())
69849                     };
69850                     _changeset.inflight = oauth.xhr(
69851                         options,
69852                         wrapcb(this, createdChangeset, cid)
69853                     );
69854                 }
69855
69856
69857                 function createdChangeset(err, changesetID) {
69858                     _changeset.inflight = null;
69859                     if (err) { return callback(err, changeset); }
69860
69861                     _changeset.open = changesetID;
69862                     changeset = changeset.update({ id: changesetID });
69863
69864                     // Upload the changeset..
69865                     var options = {
69866                         method: 'POST',
69867                         path: '/api/0.6/changeset/' + changesetID + '/upload',
69868                         options: { header: { 'Content-Type': 'text/xml' } },
69869                         content: JXON.stringify(changeset.osmChangeJXON(changes))
69870                     };
69871                     _changeset.inflight = oauth.xhr(
69872                         options,
69873                         wrapcb(this, uploadedChangeset, cid)
69874                     );
69875                 }
69876
69877
69878                 function uploadedChangeset(err) {
69879                     _changeset.inflight = null;
69880                     if (err) { return callback(err, changeset); }
69881
69882                     // Upload was successful, safe to call the callback.
69883                     // Add delay to allow for postgres replication #1646 #2678
69884                     window.setTimeout(function() { callback(null, changeset); }, 2500);
69885                     _changeset.open = null;
69886
69887                     // At this point, we don't really care if the connection was switched..
69888                     // Only try to close the changeset if we're still talking to the same server.
69889                     if (this.getConnectionId() === cid) {
69890                         // Still attempt to close changeset, but ignore response because #2667
69891                         oauth.xhr({
69892                             method: 'PUT',
69893                             path: '/api/0.6/changeset/' + changeset.id + '/close',
69894                             options: { header: { 'Content-Type': 'text/xml' } }
69895                         }, function() { return true; });
69896                     }
69897                 }
69898             },
69899
69900
69901             // Load multiple users in chunks
69902             // (note: callback may be called multiple times)
69903             // GET /api/0.6/users?users=#id1,#id2,...,#idn
69904             loadUsers: function(uids, callback) {
69905                 var toLoad = [];
69906                 var cached = [];
69907
69908                 utilArrayUniq(uids).forEach(function(uid) {
69909                     if (_userCache.user[uid]) {
69910                         delete _userCache.toLoad[uid];
69911                         cached.push(_userCache.user[uid]);
69912                     } else {
69913                         toLoad.push(uid);
69914                     }
69915                 });
69916
69917                 if (cached.length || !this.authenticated()) {
69918                     callback(undefined, cached);
69919                     if (!this.authenticated()) { return; }  // require auth
69920                 }
69921
69922                 utilArrayChunk(toLoad, 150).forEach(function(arr) {
69923                     oauth.xhr(
69924                         { method: 'GET', path: '/api/0.6/users?users=' + arr.join() },
69925                         wrapcb(this, done, _connectionID)
69926                     );
69927                 }.bind(this));
69928
69929                 function done(err, xml) {
69930                     if (err) { return callback(err); }
69931
69932                     var options = { skipSeen: true };
69933                     return parseXML(xml, function(err, results) {
69934                         if (err) {
69935                             return callback(err);
69936                         } else {
69937                             return callback(undefined, results);
69938                         }
69939                     }, options);
69940                 }
69941             },
69942
69943
69944             // Load a given user by id
69945             // GET /api/0.6/user/#id
69946             loadUser: function(uid, callback) {
69947                 if (_userCache.user[uid] || !this.authenticated()) {   // require auth
69948                     delete _userCache.toLoad[uid];
69949                     return callback(undefined, _userCache.user[uid]);
69950                 }
69951
69952                 oauth.xhr(
69953                     { method: 'GET', path: '/api/0.6/user/' + uid },
69954                     wrapcb(this, done, _connectionID)
69955                 );
69956
69957                 function done(err, xml) {
69958                     if (err) { return callback(err); }
69959
69960                     var options = { skipSeen: true };
69961                     return parseXML(xml, function(err, results) {
69962                         if (err) {
69963                             return callback(err);
69964                         } else {
69965                             return callback(undefined, results[0]);
69966                         }
69967                     }, options);
69968                 }
69969             },
69970
69971
69972             // Load the details of the logged-in user
69973             // GET /api/0.6/user/details
69974             userDetails: function(callback) {
69975                 if (_userDetails) {    // retrieve cached
69976                     return callback(undefined, _userDetails);
69977                 }
69978
69979                 oauth.xhr(
69980                     { method: 'GET', path: '/api/0.6/user/details' },
69981                     wrapcb(this, done, _connectionID)
69982                 );
69983
69984                 function done(err, xml) {
69985                     if (err) { return callback(err); }
69986
69987                     var options = { skipSeen: false };
69988                     return parseXML(xml, function(err, results) {
69989                         if (err) {
69990                             return callback(err);
69991                         } else {
69992                             _userDetails = results[0];
69993                             return callback(undefined, _userDetails);
69994                         }
69995                     }, options);
69996                 }
69997             },
69998
69999
70000             // Load previous changesets for the logged in user
70001             // GET /api/0.6/changesets?user=#id
70002             userChangesets: function(callback) {
70003                 if (_userChangesets) {    // retrieve cached
70004                     return callback(undefined, _userChangesets);
70005                 }
70006
70007                 this.userDetails(
70008                     wrapcb(this, gotDetails, _connectionID)
70009                 );
70010
70011
70012                 function gotDetails(err, user) {
70013                     if (err) { return callback(err); }
70014
70015                     oauth.xhr(
70016                         { method: 'GET', path: '/api/0.6/changesets?user=' + user.id },
70017                         wrapcb(this, done, _connectionID)
70018                     );
70019                 }
70020
70021                 function done(err, xml) {
70022                     if (err) { return callback(err); }
70023
70024                     _userChangesets = Array.prototype.map.call(
70025                         xml.getElementsByTagName('changeset'),
70026                         function (changeset) { return { tags: getTags(changeset) }; }
70027                     ).filter(function (changeset) {
70028                         var comment = changeset.tags.comment;
70029                         return comment && comment !== '';
70030                     });
70031
70032                     return callback(undefined, _userChangesets);
70033                 }
70034             },
70035
70036
70037             // Fetch the status of the OSM API
70038             // GET /api/capabilities
70039             status: function(callback) {
70040                 var url = urlroot + '/api/capabilities';
70041                 var errback = wrapcb(this, done, _connectionID);
70042                 d3_xml(url)
70043                     .then(function(data) { errback(null, data); })
70044                     .catch(function(err) { errback(err.message); });
70045
70046                 function done(err, xml) {
70047                     if (err) {
70048                         // the status is null if no response could be retrieved
70049                         return callback(err, null);
70050                     }
70051
70052                     // update blacklists
70053                     var elements = xml.getElementsByTagName('blacklist');
70054                     var regexes = [];
70055                     for (var i = 0; i < elements.length; i++) {
70056                         var regex = elements[i].getAttribute('regex');  // needs unencode?
70057                         if (regex) {
70058                             regexes.push(regex);
70059                         }
70060                     }
70061                     if (regexes.length) {
70062                         _blacklists = regexes;
70063                     }
70064
70065                     if (_rateLimitError) {
70066                         return callback(_rateLimitError, 'rateLimited');
70067                     } else {
70068                         var apiStatus = xml.getElementsByTagName('status');
70069                         var val = apiStatus[0].getAttribute('api');
70070                         return callback(undefined, val);
70071                     }
70072                 }
70073             },
70074
70075             // Calls `status` and dispatches an `apiStatusChange` event if the returned
70076             // status differs from the cached status.
70077             reloadApiStatus: function() {
70078                 // throttle to avoid unncessary API calls
70079                 if (!this.throttledReloadApiStatus) {
70080                     var that = this;
70081                     this.throttledReloadApiStatus = throttle(function() {
70082                         that.status(function(err, status) {
70083                             if (status !== _cachedApiStatus) {
70084                                 _cachedApiStatus = status;
70085                                 dispatch$5.call('apiStatusChange', that, err, status);
70086                             }
70087                         });
70088                     }, 500);
70089                 }
70090                 this.throttledReloadApiStatus();
70091             },
70092
70093
70094             // Load data (entities) from the API in tiles
70095             // GET /api/0.6/map?bbox=
70096             loadTiles: function(projection, callback) {
70097                 if (_off) { return; }
70098
70099                 // determine the needed tiles to cover the view
70100                 var tiles = tiler$4.zoomExtent([_tileZoom, _tileZoom]).getTiles(projection);
70101
70102                 // abort inflight requests that are no longer needed
70103                 var hadRequests = hasInflightRequests(_tileCache);
70104                 abortUnwantedRequests$2(_tileCache, tiles);
70105                 if (hadRequests && !hasInflightRequests(_tileCache)) {
70106                     dispatch$5.call('loaded');    // stop the spinner
70107                 }
70108
70109                 // issue new requests..
70110                 tiles.forEach(function(tile) {
70111                     this.loadTile(tile, callback);
70112                 }, this);
70113             },
70114
70115
70116             // Load a single data tile
70117             // GET /api/0.6/map?bbox=
70118             loadTile: function(tile, callback) {
70119                 if (_off) { return; }
70120                 if (_tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) { return; }
70121
70122                 if (!hasInflightRequests(_tileCache)) {
70123                     dispatch$5.call('loading');   // start the spinner
70124                 }
70125
70126                 var path = '/api/0.6/map?bbox=';
70127                 var options = { skipSeen: true };
70128
70129                 _tileCache.inflight[tile.id] = this.loadFromAPI(
70130                     path + tile.extent.toParam(),
70131                     tileCallback,
70132                     options
70133                 );
70134
70135                 function tileCallback(err, parsed) {
70136                     delete _tileCache.inflight[tile.id];
70137                     if (!err) {
70138                         delete _tileCache.toLoad[tile.id];
70139                         _tileCache.loaded[tile.id] = true;
70140                         var bbox = tile.extent.bbox();
70141                         bbox.id = tile.id;
70142                         _tileCache.rtree.insert(bbox);
70143                     }
70144                     if (callback) {
70145                         callback(err, Object.assign({ data: parsed }, tile));
70146                     }
70147                     if (!hasInflightRequests(_tileCache)) {
70148                         dispatch$5.call('loaded');     // stop the spinner
70149                     }
70150                 }
70151             },
70152
70153
70154             isDataLoaded: function(loc) {
70155                 var bbox = { minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1] };
70156                 return _tileCache.rtree.collides(bbox);
70157             },
70158
70159
70160             // load the tile that covers the given `loc`
70161             loadTileAtLoc: function(loc, callback) {
70162                 // Back off if the toLoad queue is filling up.. re #6417
70163                 // (Currently `loadTileAtLoc` requests are considered low priority - used by operations to
70164                 // let users safely edit geometries which extend to unloaded tiles.  We can drop some.)
70165                 if (Object.keys(_tileCache.toLoad).length > 50) { return; }
70166
70167                 var k = geoZoomToScale(_tileZoom + 1);
70168                 var offset = geoRawMercator().scale(k)(loc);
70169                 var projection = geoRawMercator().transform({ k: k, x: -offset[0], y: -offset[1] });
70170                 var tiles = tiler$4.zoomExtent([_tileZoom, _tileZoom]).getTiles(projection);
70171
70172                 tiles.forEach(function(tile) {
70173                     if (_tileCache.toLoad[tile.id] || _tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) { return; }
70174
70175                     _tileCache.toLoad[tile.id] = true;
70176                     this.loadTile(tile, callback);
70177                 }, this);
70178             },
70179
70180
70181             // Load notes from the API in tiles
70182             // GET /api/0.6/notes?bbox=
70183             loadNotes: function(projection, noteOptions) {
70184                 noteOptions = Object.assign({ limit: 10000, closed: 7 }, noteOptions);
70185                 if (_off) { return; }
70186
70187                 var that = this;
70188                 var path = '/api/0.6/notes?limit=' + noteOptions.limit + '&closed=' + noteOptions.closed + '&bbox=';
70189                 var throttleLoadUsers = throttle(function() {
70190                     var uids = Object.keys(_userCache.toLoad);
70191                     if (!uids.length) { return; }
70192                     that.loadUsers(uids, function() {});  // eagerly load user details
70193                 }, 750);
70194
70195                 // determine the needed tiles to cover the view
70196                 var tiles = tiler$4.zoomExtent([_noteZoom, _noteZoom]).getTiles(projection);
70197
70198                 // abort inflight requests that are no longer needed
70199                 abortUnwantedRequests$2(_noteCache, tiles);
70200
70201                 // issue new requests..
70202                 tiles.forEach(function(tile) {
70203                     if (_noteCache.loaded[tile.id] || _noteCache.inflight[tile.id]) { return; }
70204
70205                     var options = { skipSeen: false };
70206                     _noteCache.inflight[tile.id] = that.loadFromAPI(
70207                         path + tile.extent.toParam(),
70208                         function(err) {
70209                             delete _noteCache.inflight[tile.id];
70210                             if (!err) {
70211                                 _noteCache.loaded[tile.id] = true;
70212                             }
70213                             throttleLoadUsers();
70214                             dispatch$5.call('loadedNotes');
70215                         },
70216                         options
70217                     );
70218                 });
70219             },
70220
70221
70222             // Create a note
70223             // POST /api/0.6/notes?params
70224             postNoteCreate: function(note, callback) {
70225                 if (!this.authenticated()) {
70226                     return callback({ message: 'Not Authenticated', status: -3 }, note);
70227                 }
70228                 if (_noteCache.inflightPost[note.id]) {
70229                     return callback({ message: 'Note update already inflight', status: -2 }, note);
70230                 }
70231
70232                 if (!note.loc[0] || !note.loc[1] || !note.newComment) { return; } // location & description required
70233
70234                 var comment = note.newComment;
70235                 if (note.newCategory && note.newCategory !== 'None') { comment += ' #' + note.newCategory; }
70236
70237                 var path = '/api/0.6/notes?' + utilQsString({ lon: note.loc[0], lat: note.loc[1], text: comment });
70238
70239                 _noteCache.inflightPost[note.id] = oauth.xhr(
70240                     { method: 'POST', path: path },
70241                     wrapcb(this, done, _connectionID)
70242                 );
70243
70244
70245                 function done(err, xml) {
70246                     delete _noteCache.inflightPost[note.id];
70247                     if (err) { return callback(err); }
70248
70249                     // we get the updated note back, remove from caches and reparse..
70250                     this.removeNote(note);
70251
70252                     var options = { skipSeen: false };
70253                     return parseXML(xml, function(err, results) {
70254                         if (err) {
70255                             return callback(err);
70256                         } else {
70257                             return callback(undefined, results[0]);
70258                         }
70259                     }, options);
70260                 }
70261             },
70262
70263
70264             // Update a note
70265             // POST /api/0.6/notes/#id/comment?text=comment
70266             // POST /api/0.6/notes/#id/close?text=comment
70267             // POST /api/0.6/notes/#id/reopen?text=comment
70268             postNoteUpdate: function(note, newStatus, callback) {
70269                 if (!this.authenticated()) {
70270                     return callback({ message: 'Not Authenticated', status: -3 }, note);
70271                 }
70272                 if (_noteCache.inflightPost[note.id]) {
70273                     return callback({ message: 'Note update already inflight', status: -2 }, note);
70274                 }
70275
70276                 var action;
70277                 if (note.status !== 'closed' && newStatus === 'closed') {
70278                     action = 'close';
70279                 } else if (note.status !== 'open' && newStatus === 'open') {
70280                     action = 'reopen';
70281                 } else {
70282                     action = 'comment';
70283                     if (!note.newComment) { return; } // when commenting, comment required
70284                 }
70285
70286                 var path = '/api/0.6/notes/' + note.id + '/' + action;
70287                 if (note.newComment) {
70288                     path += '?' + utilQsString({ text: note.newComment });
70289                 }
70290
70291                 _noteCache.inflightPost[note.id] = oauth.xhr(
70292                     { method: 'POST', path: path },
70293                     wrapcb(this, done, _connectionID)
70294                 );
70295
70296
70297                 function done(err, xml) {
70298                     delete _noteCache.inflightPost[note.id];
70299                     if (err) { return callback(err); }
70300
70301                     // we get the updated note back, remove from caches and reparse..
70302                     this.removeNote(note);
70303
70304                     // update closed note cache - used to populate `closed:note` changeset tag
70305                     if (action === 'close') {
70306                         _noteCache.closed[note.id] = true;
70307                     } else if (action === 'reopen') {
70308                         delete _noteCache.closed[note.id];
70309                     }
70310
70311                     var options = { skipSeen: false };
70312                     return parseXML(xml, function(err, results) {
70313                         if (err) {
70314                             return callback(err);
70315                         } else {
70316                             return callback(undefined, results[0]);
70317                         }
70318                     }, options);
70319                 }
70320             },
70321
70322
70323             switch: function(options) {
70324                 urlroot = options.urlroot;
70325
70326                 oauth.options(Object.assign({
70327                     url: urlroot,
70328                     loading: authLoading,
70329                     done: authDone
70330                 }, options));
70331
70332                 this.reset();
70333                 this.userChangesets(function() {});  // eagerly load user details/changesets
70334                 dispatch$5.call('change');
70335                 return this;
70336             },
70337
70338
70339             toggle: function(val) {
70340                 _off = !val;
70341                 return this;
70342             },
70343
70344
70345             isChangesetInflight: function() {
70346                 return !!_changeset.inflight;
70347             },
70348
70349
70350             // get/set cached data
70351             // This is used to save/restore the state when entering/exiting the walkthrough
70352             // Also used for testing purposes.
70353             caches: function(obj) {
70354                 function cloneCache(source) {
70355                     var target = {};
70356                     Object.keys(source).forEach(function(k) {
70357                         if (k === 'rtree') {
70358                             target.rtree = new RBush().fromJSON(source.rtree.toJSON());  // clone rbush
70359                         } else if (k === 'note') {
70360                             target.note = {};
70361                             Object.keys(source.note).forEach(function(id) {
70362                                 target.note[id] = osmNote(source.note[id]);   // copy notes
70363                             });
70364                         } else {
70365                             target[k] = JSON.parse(JSON.stringify(source[k]));   // clone deep
70366                         }
70367                     });
70368                     return target;
70369                 }
70370
70371                 if (!arguments.length) {
70372                     return {
70373                         tile: cloneCache(_tileCache),
70374                         note: cloneCache(_noteCache),
70375                         user: cloneCache(_userCache)
70376                     };
70377                 }
70378
70379                 // access caches directly for testing (e.g., loading notes rtree)
70380                 if (obj === 'get') {
70381                     return {
70382                         tile: _tileCache,
70383                         note: _noteCache,
70384                         user: _userCache
70385                     };
70386                 }
70387
70388                 if (obj.tile) {
70389                     _tileCache = obj.tile;
70390                     _tileCache.inflight = {};
70391                 }
70392                 if (obj.note) {
70393                     _noteCache = obj.note;
70394                     _noteCache.inflight = {};
70395                     _noteCache.inflightPost = {};
70396                 }
70397                 if (obj.user) {
70398                     _userCache = obj.user;
70399                 }
70400
70401                 return this;
70402             },
70403
70404
70405             logout: function() {
70406                 _userChangesets = undefined;
70407                 _userDetails = undefined;
70408                 oauth.logout();
70409                 dispatch$5.call('change');
70410                 return this;
70411             },
70412
70413
70414             authenticated: function() {
70415                 return oauth.authenticated();
70416             },
70417
70418
70419             authenticate: function(callback) {
70420                 var that = this;
70421                 var cid = _connectionID;
70422                 _userChangesets = undefined;
70423                 _userDetails = undefined;
70424
70425                 function done(err, res) {
70426                     if (err) {
70427                         if (callback) { callback(err); }
70428                         return;
70429                     }
70430                     if (that.getConnectionId() !== cid) {
70431                         if (callback) { callback({ message: 'Connection Switched', status: -1 }); }
70432                         return;
70433                     }
70434                     _rateLimitError = undefined;
70435                     dispatch$5.call('change');
70436                     if (callback) { callback(err, res); }
70437                     that.userChangesets(function() {});  // eagerly load user details/changesets
70438                 }
70439
70440                 return oauth.authenticate(done);
70441             },
70442
70443
70444             imageryBlacklists: function() {
70445                 return _blacklists;
70446             },
70447
70448
70449             tileZoom: function(val) {
70450                 if (!arguments.length) { return _tileZoom; }
70451                 _tileZoom = val;
70452                 return this;
70453             },
70454
70455
70456             // get all cached notes covering the viewport
70457             notes: function(projection) {
70458                 var viewport = projection.clipExtent();
70459                 var min = [viewport[0][0], viewport[1][1]];
70460                 var max = [viewport[1][0], viewport[0][1]];
70461                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
70462
70463                 return _noteCache.rtree.search(bbox)
70464                     .map(function(d) { return d.data; });
70465             },
70466
70467
70468             // get a single note from the cache
70469             getNote: function(id) {
70470                 return _noteCache.note[id];
70471             },
70472
70473
70474             // remove a single note from the cache
70475             removeNote: function(note) {
70476                 if (!(note instanceof osmNote) || !note.id) { return; }
70477
70478                 delete _noteCache.note[note.id];
70479                 updateRtree$2(encodeNoteRtree(note), false);  // false = remove
70480             },
70481
70482
70483             // replace a single note in the cache
70484             replaceNote: function(note) {
70485                 if (!(note instanceof osmNote) || !note.id) { return; }
70486
70487                 _noteCache.note[note.id] = note;
70488                 updateRtree$2(encodeNoteRtree(note), true);  // true = replace
70489                 return note;
70490             },
70491
70492
70493             // Get an array of note IDs closed during this session.
70494             // Used to populate `closed:note` changeset tag
70495             getClosedIDs: function() {
70496                 return Object.keys(_noteCache.closed).sort();
70497             }
70498
70499         };
70500
70501         var apibase$3 = 'https://wiki.openstreetmap.org/w/api.php';
70502         var _inflight$1 = {};
70503         var _wikibaseCache = {};
70504         var _localeIDs = { en: false };
70505
70506
70507         var debouncedRequest = debounce(request, 500, { leading: false });
70508
70509         function request(url, callback) {
70510             if (_inflight$1[url]) { return; }
70511             var controller = new AbortController();
70512             _inflight$1[url] = controller;
70513
70514             d3_json(url, { signal: controller.signal })
70515                 .then(function(result) {
70516                     delete _inflight$1[url];
70517                     if (callback) { callback(null, result); }
70518                 })
70519                 .catch(function(err) {
70520                     delete _inflight$1[url];
70521                     if (err.name === 'AbortError') { return; }
70522                     if (callback) { callback(err.message); }
70523                 });
70524         }
70525
70526
70527         /**
70528          * Get the best string value from the descriptions/labels result
70529          * Note that if mediawiki doesn't recognize language code, it will return all values.
70530          * In that case, fallback to use English.
70531          * @param values object - either descriptions or labels
70532          * @param langCode String
70533          * @returns localized string
70534          */
70535         function localizedToString(values, langCode) {
70536             if (values) {
70537                 values = values[langCode] || values.en;
70538             }
70539             return values ? values.value : '';
70540         }
70541
70542
70543         var serviceOsmWikibase = {
70544
70545             init: function() {
70546                 _inflight$1 = {};
70547                 _wikibaseCache = {};
70548                 _localeIDs = {};
70549             },
70550
70551
70552             reset: function() {
70553                 Object.values(_inflight$1).forEach(function(controller) { controller.abort(); });
70554                 _inflight$1 = {};
70555             },
70556
70557
70558             /**
70559              * Get the best value for the property, or undefined if not found
70560              * @param entity object from wikibase
70561              * @param property string e.g. 'P4' for image
70562              * @param langCode string e.g. 'fr' for French
70563              */
70564             claimToValue: function(entity, property, langCode) {
70565                 if (!entity.claims[property]) { return undefined; }
70566                 var locale = _localeIDs[langCode];
70567                 var preferredPick, localePick;
70568
70569                 entity.claims[property].forEach(function(stmt) {
70570                     // If exists, use value limited to the needed language (has a qualifier P26 = locale)
70571                     // Or if not found, use the first value with the "preferred" rank
70572                     if (!preferredPick && stmt.rank === 'preferred') {
70573                         preferredPick = stmt;
70574                     }
70575                     if (locale && stmt.qualifiers && stmt.qualifiers.P26 &&
70576                         stmt.qualifiers.P26[0].datavalue.value.id === locale
70577                     ) {
70578                         localePick = stmt;
70579                     }
70580                 });
70581
70582                 var result = localePick || preferredPick;
70583                 if (result) {
70584                     var datavalue = result.mainsnak.datavalue;
70585                     return datavalue.type === 'wikibase-entityid' ? datavalue.value.id : datavalue.value;
70586                 } else {
70587                     return undefined;
70588                 }
70589             },
70590
70591
70592             /**
70593              * Convert monolingual property into a key-value object (language -> value)
70594              * @param entity object from wikibase
70595              * @param property string e.g. 'P31' for monolingual wiki page title
70596              */
70597             monolingualClaimToValueObj: function(entity, property) {
70598                 if (!entity || !entity.claims[property]) { return undefined; }
70599
70600                 return entity.claims[property].reduce(function(acc, obj) {
70601                     var value = obj.mainsnak.datavalue.value;
70602                     acc[value.language] = value.text;
70603                     return acc;
70604                 }, {});
70605             },
70606
70607
70608             toSitelink: function(key, value) {
70609                 var result = value ? ('Tag:' + key + '=' + value) : 'Key:' + key;
70610                 return result.replace(/_/g, ' ').trim();
70611             },
70612
70613
70614             //
70615             // Pass params object of the form:
70616             // {
70617             //   key: 'string',
70618             //   value: 'string',
70619             //   rtype: 'string',
70620             //   langCode: 'string'
70621             // }
70622             //
70623             getEntity: function(params, callback) {
70624                 var doRequest = params.debounce ? debouncedRequest : request;
70625                 var that = this;
70626                 var titles = [];
70627                 var result = {};
70628                 var rtypeSitelink = params.rtype ? ('Relation:' + params.rtype).replace(/_/g, ' ').trim() : false;
70629                 var keySitelink = params.key ? this.toSitelink(params.key) : false;
70630                 var tagSitelink = (params.key && params.value) ? this.toSitelink(params.key, params.value) : false;
70631                 var localeSitelink;
70632
70633                 if (params.langCode && _localeIDs[params.langCode] === undefined) {
70634                     // If this is the first time we are asking about this locale,
70635                     // fetch corresponding entity (if it exists), and cache it.
70636                     // If there is no such entry, cache `false` value to avoid re-requesting it.
70637                     localeSitelink = ('Locale:' + params.langCode).replace(/_/g, ' ').trim();
70638                     titles.push(localeSitelink);
70639                 }
70640
70641                 if (rtypeSitelink) {
70642                     if (_wikibaseCache[rtypeSitelink]) {
70643                         result.rtype = _wikibaseCache[rtypeSitelink];
70644                     } else {
70645                         titles.push(rtypeSitelink);
70646                     }
70647                 }
70648
70649                 if (keySitelink) {
70650                     if (_wikibaseCache[keySitelink]) {
70651                         result.key = _wikibaseCache[keySitelink];
70652                     } else {
70653                         titles.push(keySitelink);
70654                     }
70655                 }
70656
70657                 if (tagSitelink) {
70658                     if (_wikibaseCache[tagSitelink]) {
70659                         result.tag = _wikibaseCache[tagSitelink];
70660                     } else {
70661                         titles.push(tagSitelink);
70662                     }
70663                 }
70664
70665                 if (!titles.length) {
70666                     // Nothing to do, we already had everything in the cache
70667                     return callback(null, result);
70668                 }
70669
70670                 // Requesting just the user language code
70671                 // If backend recognizes the code, it will perform proper fallbacks,
70672                 // and the result will contain the requested code. If not, all values are returned:
70673                 // {"zh-tw":{"value":"...","language":"zh-tw","source-language":"zh-hant"}
70674                 // {"pt-br":{"value":"...","language":"pt","for-language":"pt-br"}}
70675                 var obj = {
70676                     action: 'wbgetentities',
70677                     sites: 'wiki',
70678                     titles: titles.join('|'),
70679                     languages: params.langCode,
70680                     languagefallback: 1,
70681                     origin: '*',
70682                     format: 'json',
70683                     // There is an MW Wikibase API bug https://phabricator.wikimedia.org/T212069
70684                     // We shouldn't use v1 until it gets fixed, but should switch to it afterwards
70685                     // formatversion: 2,
70686                 };
70687
70688                 var url = apibase$3 + '?' + utilQsString(obj);
70689                 doRequest(url, function(err, d) {
70690                     if (err) {
70691                         callback(err);
70692                     } else if (!d.success || d.error) {
70693                         callback(d.error.messages.map(function(v) { return v.html['*']; }).join('<br>'));
70694                     } else {
70695                         var localeID = false;
70696                         Object.values(d.entities).forEach(function(res) {
70697                             if (res.missing !== '') {
70698                                 // Simplify access to the localized values
70699                                 res.description = localizedToString(res.descriptions, params.langCode);
70700                                 res.label = localizedToString(res.labels, params.langCode);
70701
70702                                 var title = res.sitelinks.wiki.title;
70703                                 if (title === rtypeSitelink) {
70704                                     _wikibaseCache[rtypeSitelink] = res;
70705                                     result.rtype = res;
70706                                 } else if (title === keySitelink) {
70707                                     _wikibaseCache[keySitelink] = res;
70708                                     result.key = res;
70709                                 } else if (title === tagSitelink) {
70710                                     _wikibaseCache[tagSitelink] = res;
70711                                     result.tag = res;
70712                                 } else if (title === localeSitelink) {
70713                                     localeID = res.id;
70714                                 } else {
70715                                     console.log('Unexpected title ' + title);  // eslint-disable-line no-console
70716                                 }
70717                             }
70718                         });
70719
70720                         if (localeSitelink) {
70721                             // If locale ID is not found, store false to prevent repeated queries
70722                             that.addLocale(params.langCode, localeID);
70723                         }
70724
70725                         callback(null, result);
70726                     }
70727                 });
70728             },
70729
70730
70731             //
70732             // Pass params object of the form:
70733             // {
70734             //   key: 'string',     // required
70735             //   value: 'string'    // optional
70736             // }
70737             //   -or-
70738             // {
70739             //   rtype: 'rtype'     // relation type  (e.g. 'multipolygon')
70740             // }
70741             //
70742             // Get an result object used to display tag documentation
70743             // {
70744             //   title:        'string',
70745             //   description:  'string',
70746             //   editURL:      'string',
70747             //   imageURL:     'string',
70748             //   wiki:         { title: 'string', text: 'string', url: 'string' }
70749             // }
70750             //
70751             getDocs: function(params, callback) {
70752                 var that = this;
70753                 var langCode = utilDetect().locale.toLowerCase();
70754                 params.langCode = langCode;
70755
70756                 this.getEntity(params, function(err, data) {
70757                     if (err) {
70758                         callback(err);
70759                         return;
70760                     }
70761
70762                     var entity = data.rtype || data.tag || data.key;
70763                     if (!entity) {
70764                         callback('No entity');
70765                         return;
70766                     }
70767
70768                     // prepare result
70769                     var result = {
70770                         title: entity.title,
70771                         description: entity.description,
70772                         editURL: 'https://wiki.openstreetmap.org/wiki/' + entity.title
70773                     };
70774
70775                     // add image
70776                     if (entity.claims) {
70777                         var imageroot;
70778                         var image = that.claimToValue(entity, 'P4', langCode);
70779                         if (image) {
70780                             imageroot = 'https://commons.wikimedia.org/w/index.php';
70781                         } else {
70782                             image = that.claimToValue(entity, 'P28', langCode);
70783                             if (image) {
70784                                 imageroot = 'https://wiki.openstreetmap.org/w/index.php';
70785                             }
70786                         }
70787                         if (imageroot && image) {
70788                             result.imageURL = imageroot + '?' + utilQsString({
70789                                 title: 'Special:Redirect/file/' + image,
70790                                 width: 400
70791                             });
70792                         }
70793                     }
70794
70795                     // Try to get a wiki page from tag data item first, followed by the corresponding key data item.
70796                     // If neither tag nor key data item contain a wiki page in the needed language nor English,
70797                     // get the first found wiki page from either the tag or the key item.
70798                     var rtypeWiki = that.monolingualClaimToValueObj(data.rtype, 'P31');
70799                     var tagWiki = that.monolingualClaimToValueObj(data.tag, 'P31');
70800                     var keyWiki = that.monolingualClaimToValueObj(data.key, 'P31');
70801
70802                     // If exact language code does not exist, try to find the first part before the '-'
70803                     // BUG: in some cases, a more elaborate fallback logic might be needed
70804                     var langPrefix = langCode.split('-', 2)[0];
70805
70806                     // use the first acceptable wiki page
70807                     result.wiki =
70808                         getWikiInfo(rtypeWiki, langCode, 'inspector.wiki_reference') ||
70809                         getWikiInfo(rtypeWiki, langPrefix, 'inspector.wiki_reference') ||
70810                         getWikiInfo(rtypeWiki, 'en', 'inspector.wiki_en_reference') ||
70811                         getWikiInfo(tagWiki, langCode, 'inspector.wiki_reference') ||
70812                         getWikiInfo(tagWiki, langPrefix, 'inspector.wiki_reference') ||
70813                         getWikiInfo(tagWiki, 'en', 'inspector.wiki_en_reference') ||
70814                         getWikiInfo(keyWiki, langCode, 'inspector.wiki_reference') ||
70815                         getWikiInfo(keyWiki, langPrefix, 'inspector.wiki_reference') ||
70816                         getWikiInfo(keyWiki, 'en', 'inspector.wiki_en_reference');
70817
70818                     callback(null, result);
70819
70820
70821                     // Helper method to get wiki info if a given language exists
70822                     function getWikiInfo(wiki, langCode, tKey) {
70823                         if (wiki && wiki[langCode]) {
70824                             return {
70825                                 title: wiki[langCode],
70826                                 text: tKey,
70827                                 url: 'https://wiki.openstreetmap.org/wiki/' + wiki[langCode]
70828                             };
70829                         }
70830                     }
70831                 });
70832             },
70833
70834
70835             addLocale: function(langCode, qid) {
70836                 // Makes it easier to unit test
70837                 _localeIDs[langCode] = qid;
70838             },
70839
70840
70841             apibase: function(val) {
70842                 if (!arguments.length) { return apibase$3; }
70843                 apibase$3 = val;
70844                 return this;
70845             }
70846
70847         };
70848
70849         var jsonpCache = {};
70850         window.jsonpCache = jsonpCache;
70851
70852         function jsonpRequest(url, callback) {
70853             var request = {
70854                 abort: function() {}
70855             };
70856
70857             if (window.JSONP_FIX) {
70858                 if (window.JSONP_DELAY === 0) {
70859                     callback(window.JSONP_FIX);
70860                 } else {
70861                     var t = window.setTimeout(function() {
70862                         callback(window.JSONP_FIX);
70863                     }, window.JSONP_DELAY || 0);
70864
70865                     request.abort = function() { window.clearTimeout(t); };
70866                 }
70867
70868                 return request;
70869             }
70870
70871             function rand() {
70872                 var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
70873                 var c = '';
70874                 var i = -1;
70875                 while (++i < 15) { c += chars.charAt(Math.floor(Math.random() * 52)); }
70876                 return c;
70877             }
70878
70879             function create(url) {
70880                 var e = url.match(/callback=(\w+)/);
70881                 var c = e ? e[1] : rand();
70882
70883                 jsonpCache[c] = function(data) {
70884                     if (jsonpCache[c]) {
70885                         callback(data);
70886                     }
70887                     finalize();
70888                 };
70889
70890                 function finalize() {
70891                     delete jsonpCache[c];
70892                     script.remove();
70893                 }
70894
70895                 request.abort = finalize;
70896                 return 'jsonpCache.' + c;
70897             }
70898
70899             var cb = create(url);
70900
70901             var script = d3_select('head')
70902                 .append('script')
70903                 .attr('type', 'text/javascript')
70904                 .attr('src', url.replace(/(\{|%7B)callback(\}|%7D)/, cb));
70905
70906             return request;
70907         }
70908
70909         var bubbleApi = 'https://dev.virtualearth.net/mapcontrol/HumanScaleServices/GetBubbles.ashx?';
70910         var streetsideImagesApi = 'https://t.ssl.ak.tiles.virtualearth.net/tiles/';
70911         var bubbleAppKey = 'AuftgJsO0Xs8Ts4M1xZUQJQXJNsvmh3IV8DkNieCiy3tCwCUMq76-WpkrBtNAuEm';
70912         var pannellumViewerCSS = 'pannellum-streetside/pannellum.css';
70913         var pannellumViewerJS = 'pannellum-streetside/pannellum.js';
70914         var maxResults$2 = 2000;
70915         var tileZoom$2 = 16.5;
70916         var tiler$5 = utilTiler().zoomExtent([tileZoom$2, tileZoom$2]).skipNullIsland(true);
70917         var dispatch$6 = dispatch('loadedBubbles', 'viewerChanged');
70918         var minHfov = 10;         // zoom in degrees:  20, 10, 5
70919         var maxHfov = 90;         // zoom out degrees
70920         var defaultHfov = 45;
70921
70922         var _hires = false;
70923         var _resolution = 512;    // higher numbers are slower - 512, 1024, 2048, 4096
70924         var _currScene = 0;
70925         var _ssCache;
70926         var _pannellumViewer;
70927         var _sceneOptions;
70928         var _dataUrlArray = [];
70929
70930
70931         /**
70932          * abortRequest().
70933          */
70934         function abortRequest$5(i) {
70935           i.abort();
70936         }
70937
70938
70939         /**
70940          * localeTimeStamp().
70941          */
70942         function localeTimestamp(s) {
70943           if (!s) { return null; }
70944           var detected = utilDetect();
70945           var options = { day: 'numeric', month: 'short', year: 'numeric' };
70946           var d = new Date(s);
70947           if (isNaN(d.getTime())) { return null; }
70948           return d.toLocaleString(detected.locale, options);
70949         }
70950
70951
70952         /**
70953          * loadTiles() wraps the process of generating tiles and then fetching image points for each tile.
70954          */
70955         function loadTiles$2(which, url, projection, margin) {
70956           var tiles = tiler$5.margin(margin).getTiles(projection);
70957
70958           // abort inflight requests that are no longer needed
70959           var cache = _ssCache[which];
70960           Object.keys(cache.inflight).forEach(function (k) {
70961             var wanted = tiles.find(function (tile) { return k.indexOf(tile.id + ',') === 0; });
70962             if (!wanted) {
70963               abortRequest$5(cache.inflight[k]);
70964               delete cache.inflight[k];
70965             }
70966           });
70967
70968           tiles.forEach(function (tile) { return loadNextTilePage$2(which, url, tile); });
70969         }
70970
70971
70972         /**
70973          * loadNextTilePage() load data for the next tile page in line.
70974          */
70975         function loadNextTilePage$2(which, url, tile) {
70976           var cache = _ssCache[which];
70977           var nextPage = cache.nextPage[tile.id] || 0;
70978           var id = tile.id + ',' + String(nextPage);
70979           if (cache.loaded[id] || cache.inflight[id]) { return; }
70980
70981           cache.inflight[id] = getBubbles(url, tile, function (bubbles) {
70982             cache.loaded[id] = true;
70983             delete cache.inflight[id];
70984             if (!bubbles) { return; }
70985
70986             // [].shift() removes the first element, some statistics info, not a bubble point
70987             bubbles.shift();
70988
70989             var features = bubbles.map(function (bubble) {
70990               if (cache.points[bubble.id]) { return null; }  // skip duplicates
70991
70992               var loc = [bubble.lo, bubble.la];
70993               var d = {
70994                 loc: loc,
70995                 key: bubble.id,
70996                 ca: bubble.he,
70997                 captured_at: bubble.cd,
70998                 captured_by: 'microsoft',
70999                 // nbn: bubble.nbn,
71000                 // pbn: bubble.pbn,
71001                 // ad: bubble.ad,
71002                 // rn: bubble.rn,
71003                 pr: bubble.pr,  // previous
71004                 ne: bubble.ne,  // next
71005                 pano: true,
71006                 sequenceKey: null
71007               };
71008
71009               cache.points[bubble.id] = d;
71010
71011               // a sequence starts here
71012               if (bubble.pr === undefined) {
71013                 cache.leaders.push(bubble.id);
71014               }
71015
71016               return {
71017                 minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
71018               };
71019
71020             }).filter(Boolean);
71021
71022             cache.rtree.load(features);
71023
71024             connectSequences();
71025
71026             if (which === 'bubbles') {
71027               dispatch$6.call('loadedBubbles');
71028             }
71029           });
71030         }
71031
71032
71033         // call this sometimes to connect the bubbles into sequences
71034         function connectSequences() {
71035           var cache = _ssCache.bubbles;
71036           var keepLeaders = [];
71037
71038           for (var i = 0; i < cache.leaders.length; i++) {
71039             var bubble = cache.points[cache.leaders[i]];
71040             var seen = {};
71041
71042             // try to make a sequence.. use the key of the leader bubble.
71043             var sequence = { key: bubble.key, bubbles: [] };
71044             var complete = false;
71045
71046             do {
71047               sequence.bubbles.push(bubble);
71048               seen[bubble.key] = true;
71049
71050               if (bubble.ne === undefined) {
71051                 complete = true;
71052               } else {
71053                 bubble = cache.points[bubble.ne];  // advance to next
71054               }
71055             } while (bubble && !seen[bubble.key] && !complete);
71056
71057
71058             if (complete) {
71059               _ssCache.sequences[sequence.key] = sequence;
71060
71061               // assign bubbles to the sequence
71062               for (var j = 0; j < sequence.bubbles.length; j++) {
71063                 sequence.bubbles[j].sequenceKey = sequence.key;
71064               }
71065
71066               // create a GeoJSON LineString
71067               sequence.geojson = {
71068                 type: 'LineString',
71069                 properties: { key: sequence.key },
71070                 coordinates: sequence.bubbles.map(function (d) { return d.loc; })
71071               };
71072
71073             } else {
71074               keepLeaders.push(cache.leaders[i]);
71075             }
71076           }
71077
71078           // couldn't complete these, save for later
71079           cache.leaders = keepLeaders;
71080         }
71081
71082
71083         /**
71084          * getBubbles() handles the request to the server for a tile extent of 'bubbles' (streetside image locations).
71085          */
71086         function getBubbles(url, tile, callback) {
71087           var rect = tile.extent.rectangle();
71088           var urlForRequest = url + utilQsString({
71089             n: rect[3],
71090             s: rect[1],
71091             e: rect[2],
71092             w: rect[0],
71093             c: maxResults$2,
71094             appkey: bubbleAppKey,
71095             jsCallback: '{callback}'
71096           });
71097
71098           return jsonpRequest(urlForRequest, function (data) {
71099             if (!data || data.error) {
71100               callback(null);
71101             } else {
71102               callback(data);
71103             }
71104           });
71105         }
71106
71107
71108         // partition viewport into higher zoom tiles
71109         function partitionViewport$2(projection) {
71110           var z = geoScaleToZoom(projection.scale());
71111           var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
71112           var tiler = utilTiler().zoomExtent([z2, z2]);
71113
71114           return tiler.getTiles(projection)
71115             .map(function (tile) { return tile.extent; });
71116         }
71117
71118
71119         // no more than `limit` results per partition.
71120         function searchLimited$2(limit, projection, rtree) {
71121           limit = limit || 5;
71122
71123           return partitionViewport$2(projection)
71124             .reduce(function (result, extent) {
71125               var found = rtree.search(extent.bbox())
71126                 .slice(0, limit)
71127                 .map(function (d) { return d.data; });
71128
71129               return (found.length ? result.concat(found) : result);
71130             }, []);
71131         }
71132
71133
71134         /**
71135          * loadImage()
71136          */
71137         function loadImage(imgInfo) {
71138           return new Promise(function (resolve) {
71139             var img = new Image();
71140             img.onload = function () {
71141               var canvas = document.getElementById('canvas' + imgInfo.face);
71142               var ctx = canvas.getContext('2d');
71143               ctx.drawImage(img, imgInfo.x, imgInfo.y);
71144               resolve({ imgInfo: imgInfo, status: 'ok' });
71145             };
71146             img.onerror = function () {
71147               resolve({ data: imgInfo, status: 'error' });
71148             };
71149             img.setAttribute('crossorigin', '');
71150             img.src = imgInfo.url;
71151           });
71152         }
71153
71154
71155         /**
71156          * loadCanvas()
71157          */
71158         function loadCanvas(imageGroup) {
71159           return Promise.all(imageGroup.map(loadImage))
71160             .then(function (data) {
71161               var canvas = document.getElementById('canvas' + data[0].imgInfo.face);
71162               var which = { '01': 0, '02': 1, '03': 2, '10': 3, '11': 4, '12': 5 };
71163               var face = data[0].imgInfo.face;
71164               _dataUrlArray[which[face]] = canvas.toDataURL('image/jpeg', 1.0);
71165               return { status: 'loadCanvas for face ' + data[0].imgInfo.face + 'ok'};
71166             });
71167         }
71168
71169
71170         /**
71171          * loadFaces()
71172          */
71173         function loadFaces(faceGroup) {
71174           return Promise.all(faceGroup.map(loadCanvas))
71175             .then(function () { return { status: 'loadFaces done' }; });
71176         }
71177
71178
71179         function setupCanvas(selection, reset) {
71180           if (reset) {
71181             selection.selectAll('#divForCanvasWork')
71182               .remove();
71183           }
71184
71185           // Add the Streetside working canvases. These are used for 'stitching', or combining,
71186           // multiple images for each of the six faces, before passing to the Pannellum control as DataUrls
71187           selection.selectAll('#divForCanvasWork')
71188             .data([0])
71189             .enter()
71190             .append('div')
71191             .attr('id', 'divForCanvasWork')
71192             .attr('display', 'none')
71193             .selectAll('canvas')
71194             .data(['canvas01', 'canvas02', 'canvas03', 'canvas10', 'canvas11', 'canvas12'])
71195             .enter()
71196             .append('canvas')
71197             .attr('id', function (d) { return d; })
71198             .attr('width', _resolution)
71199             .attr('height', _resolution);
71200         }
71201
71202
71203         function qkToXY(qk) {
71204           var x = 0;
71205           var y = 0;
71206           var scale = 256;
71207           for (var i = qk.length; i > 0; i--) {
71208             var key = qk[i-1];
71209             x += (+(key === '1' || key === '3')) * scale;
71210             y += (+(key === '2' || key === '3')) * scale;
71211             scale *= 2;
71212           }
71213           return [x, y];
71214         }
71215
71216
71217         function getQuadKeys() {
71218           var dim = _resolution / 256;
71219           var quadKeys;
71220
71221           if (dim === 16) {
71222             quadKeys = [
71223               '0000','0001','0010','0011','0100','0101','0110','0111',  '1000','1001','1010','1011','1100','1101','1110','1111',
71224               '0002','0003','0012','0013','0102','0103','0112','0113',  '1002','1003','1012','1013','1102','1103','1112','1113',
71225               '0020','0021','0030','0031','0120','0121','0130','0131',  '1020','1021','1030','1031','1120','1121','1130','1131',
71226               '0022','0023','0032','0033','0122','0123','0132','0133',  '1022','1023','1032','1033','1122','1123','1132','1133',
71227               '0200','0201','0210','0211','0300','0301','0310','0311',  '1200','1201','1210','1211','1300','1301','1310','1311',
71228               '0202','0203','0212','0213','0302','0303','0312','0313',  '1202','1203','1212','1213','1302','1303','1312','1313',
71229               '0220','0221','0230','0231','0320','0321','0330','0331',  '1220','1221','1230','1231','1320','1321','1330','1331',
71230               '0222','0223','0232','0233','0322','0323','0332','0333',  '1222','1223','1232','1233','1322','1323','1332','1333',
71231
71232               '2000','2001','2010','2011','2100','2101','2110','2111',  '3000','3001','3010','3011','3100','3101','3110','3111',
71233               '2002','2003','2012','2013','2102','2103','2112','2113',  '3002','3003','3012','3013','3102','3103','3112','3113',
71234               '2020','2021','2030','2031','2120','2121','2130','2131',  '3020','3021','3030','3031','3120','3121','3130','3131',
71235               '2022','2023','2032','2033','2122','2123','2132','2133',  '3022','3023','3032','3033','3122','3123','3132','3133',
71236               '2200','2201','2210','2211','2300','2301','2310','2311',  '3200','3201','3210','3211','3300','3301','3310','3311',
71237               '2202','2203','2212','2213','2302','2303','2312','2313',  '3202','3203','3212','3213','3302','3303','3312','3313',
71238               '2220','2221','2230','2231','2320','2321','2330','2331',  '3220','3221','3230','3231','3320','3321','3330','3331',
71239               '2222','2223','2232','2233','2322','2323','2332','2333',  '3222','3223','3232','3233','3322','3323','3332','3333'
71240             ];
71241
71242           } else if (dim === 8) {
71243             quadKeys = [
71244               '000','001','010','011',  '100','101','110','111',
71245               '002','003','012','013',  '102','103','112','113',
71246               '020','021','030','031',  '120','121','130','131',
71247               '022','023','032','033',  '122','123','132','133',
71248
71249               '200','201','210','211',  '300','301','310','311',
71250               '202','203','212','213',  '302','303','312','313',
71251               '220','221','230','231',  '320','321','330','331',
71252               '222','223','232','233',  '322','323','332','333'
71253             ];
71254
71255           } else if (dim === 4) {
71256             quadKeys = [
71257               '00','01',  '10','11',
71258               '02','03',  '12','13',
71259
71260               '20','21',  '30','31',
71261               '22','23',  '32','33'
71262             ];
71263
71264           } else {  // dim === 2
71265             quadKeys = [
71266               '0', '1',
71267               '2', '3'
71268             ];
71269           }
71270
71271           return quadKeys;
71272         }
71273
71274
71275
71276         var serviceStreetside = {
71277           /**
71278            * init() initialize streetside.
71279            */
71280           init: function() {
71281             if (!_ssCache) {
71282               this.reset();
71283             }
71284
71285             this.event = utilRebind(this, dispatch$6, 'on');
71286           },
71287
71288           /**
71289            * reset() reset the cache.
71290            */
71291           reset: function() {
71292             if (_ssCache) {
71293               Object.values(_ssCache.bubbles.inflight).forEach(abortRequest$5);
71294             }
71295
71296             _ssCache = {
71297               bubbles: { inflight: {}, loaded: {}, nextPage: {}, rtree: new RBush(), points: {}, leaders: [] },
71298               sequences: {}
71299             };
71300           },
71301
71302           /**
71303            * bubbles()
71304            */
71305           bubbles: function(projection) {
71306             var limit = 5;
71307             return searchLimited$2(limit, projection, _ssCache.bubbles.rtree);
71308           },
71309
71310
71311           sequences: function(projection) {
71312             var viewport = projection.clipExtent();
71313             var min = [viewport[0][0], viewport[1][1]];
71314             var max = [viewport[1][0], viewport[0][1]];
71315             var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
71316             var seen = {};
71317             var results = [];
71318
71319             // all sequences for bubbles in viewport
71320             _ssCache.bubbles.rtree.search(bbox)
71321               .forEach(function (d) {
71322                 var key = d.data.sequenceKey;
71323                 if (key && !seen[key]) {
71324                     seen[key] = true;
71325                     results.push(_ssCache.sequences[key].geojson);
71326                 }
71327               });
71328
71329             return results;
71330           },
71331
71332
71333           /**
71334            * loadBubbles()
71335            */
71336           loadBubbles: function(projection, margin) {
71337             // by default: request 2 nearby tiles so we can connect sequences.
71338             if (margin === undefined) { margin = 2; }
71339
71340             loadTiles$2('bubbles', bubbleApi, projection, margin);
71341           },
71342
71343
71344           viewer: function() {
71345             return _pannellumViewer;
71346           },
71347
71348
71349           initViewer: function () {
71350             if (!window.pannellum) { return; }
71351             if (_pannellumViewer) { return; }
71352
71353             var sceneID = ++_currScene + '';
71354             var options = {
71355               'default': { firstScene: sceneID },
71356               scenes: {}
71357             };
71358             options.scenes[sceneID] = _sceneOptions;
71359
71360             _pannellumViewer = window.pannellum.viewer('viewer-streetside', options);
71361
71362             _pannellumViewer
71363               .on('mousedown', function () {
71364                 d3_select(window)
71365                   .on('mousemove.pannellum', function () { dispatch$6.call('viewerChanged'); });
71366               })
71367               .on('mouseup', function () {
71368                 d3_select(window)
71369                   .on('mousemove.pannellum', null);
71370
71371                 // continue dispatching events for a few seconds, in case viewer has inertia.
71372                 var t = timer(function (elapsed) {
71373                   dispatch$6.call('viewerChanged');
71374                   if (elapsed > 2000) {
71375                     t.stop();
71376                   }
71377                 });
71378               });
71379           },
71380
71381
71382           /**
71383            * loadViewer() create the streeside viewer.
71384            */
71385           loadViewer: function(context) {
71386             var that = this;
71387
71388             // create ms-wrapper, a photo wrapper class
71389             var wrap = d3_select('#photoviewer').selectAll('.ms-wrapper')
71390               .data([0]);
71391
71392             // inject ms-wrapper into the photoviewer div
71393             // (used by all to house each custom photo viewer)
71394             var wrapEnter = wrap.enter()
71395               .append('div')
71396               .attr('id', 'ms')
71397               .attr('class', 'photo-wrapper ms-wrapper')
71398               .classed('hide', true);
71399
71400             // inject div to support streetside viewer (pannellum) and attribution line
71401             wrapEnter
71402               .append('div')
71403               .attr('id', 'viewer-streetside')
71404               .append('div')
71405               .attr('class', 'photo-attribution fillD');
71406
71407             var controlsEnter = wrapEnter
71408               .append('div')
71409               .attr('class', 'photo-controls-wrap')
71410               .append('div')
71411               .attr('class', 'photo-controls');
71412
71413             controlsEnter
71414               .append('button')
71415               .on('click.back', step(-1))
71416               .text('◄');
71417
71418             controlsEnter
71419               .append('button')
71420               .on('click.forward', step(1))
71421               .text('►');
71422
71423
71424             // create working canvas for stitching together images
71425             wrap = wrap
71426               .merge(wrapEnter)
71427               .call(setupCanvas, true);
71428
71429             // load streetside pannellum viewer css
71430             d3_select('head').selectAll('#streetside-viewercss')
71431               .data([0])
71432               .enter()
71433               .append('link')
71434               .attr('id', 'streetside-viewercss')
71435               .attr('rel', 'stylesheet')
71436               .attr('href', context.asset(pannellumViewerCSS));
71437
71438             // load streetside pannellum viewer js
71439             d3_select('head').selectAll('#streetside-viewerjs')
71440               .data([0])
71441               .enter()
71442               .append('script')
71443               .attr('id', 'streetside-viewerjs')
71444               .attr('src', context.asset(pannellumViewerJS));
71445
71446
71447             // Register viewer resize handler
71448             context.ui().photoviewer.on('resize.streetside', function () {
71449               if (_pannellumViewer) {
71450                 _pannellumViewer.resize();
71451               }
71452             });
71453
71454
71455             function step(stepBy) {
71456               return function () {
71457                 var viewer = d3_select('#photoviewer');
71458                 var selected = viewer.empty() ? undefined : viewer.datum();
71459                 if (!selected) { return; }
71460
71461                 var nextID = (stepBy === 1 ? selected.ne : selected.pr);
71462                 var yaw = _pannellumViewer.getYaw();
71463                 var ca = selected.ca + yaw;
71464                 var origin = selected.loc;
71465
71466                 // construct a search trapezoid pointing out from current bubble
71467                 var meters = 35;
71468                 var p1 = [
71469                   origin[0] + geoMetersToLon(meters / 5, origin[1]),
71470                   origin[1]
71471                 ];
71472                 var p2 = [
71473                   origin[0] + geoMetersToLon(meters / 2, origin[1]),
71474                   origin[1] + geoMetersToLat(meters)
71475                 ];
71476                 var p3 = [
71477                   origin[0] - geoMetersToLon(meters / 2, origin[1]),
71478                   origin[1] + geoMetersToLat(meters)
71479                 ];
71480                 var p4 = [
71481                   origin[0] - geoMetersToLon(meters / 5, origin[1]),
71482                   origin[1]
71483                 ];
71484
71485                 var poly = [p1, p2, p3, p4, p1];
71486
71487                 // rotate it to face forward/backward
71488                 var angle = (stepBy === 1 ? ca : ca + 180) * (Math.PI / 180);
71489                 poly = geoRotate(poly, -angle, origin);
71490
71491                 var extent = poly.reduce(function (extent, point) {
71492                   return extent.extend(geoExtent(point));
71493                 }, geoExtent());
71494
71495                 // find nearest other bubble in the search polygon
71496                 var minDist = Infinity;
71497                 _ssCache.bubbles.rtree.search(extent.bbox())
71498                   .forEach(function (d) {
71499                     if (d.data.key === selected.key) { return; }
71500                     if (!geoPointInPolygon(d.data.loc, poly)) { return; }
71501
71502                     var dist = geoVecLength(d.data.loc, selected.loc);
71503                     var theta = selected.ca - d.data.ca;
71504                     var minTheta = Math.min(Math.abs(theta), 360 - Math.abs(theta));
71505                     if (minTheta > 20) {
71506                       dist += 5;  // penalize distance if camera angles don't match
71507                     }
71508
71509                     if (dist < minDist) {
71510                       nextID = d.data.key;
71511                       minDist = dist;
71512                     }
71513                   });
71514
71515                 var nextBubble = nextID && _ssCache.bubbles.points[nextID];
71516                 if (!nextBubble) { return; }
71517
71518                 context.map().centerEase(nextBubble.loc);
71519
71520                 that.selectImage(nextBubble)
71521                   .then(function (response) {
71522                     if (response.status === 'ok') {
71523                       _sceneOptions.yaw = yaw;
71524                       that.showViewer();
71525                     }
71526                   });
71527               };
71528             }
71529           },
71530
71531
71532           /**
71533            * showViewer()
71534            */
71535           showViewer: function(yaw) {
71536             if (!_sceneOptions) { return; }
71537
71538             if (yaw !== undefined) {
71539               _sceneOptions.yaw = yaw;
71540             }
71541
71542             if (!_pannellumViewer) {
71543               this.initViewer();
71544             } else {
71545               // make a new scene
71546               var sceneID = ++_currScene + '';
71547               _pannellumViewer
71548                 .addScene(sceneID, _sceneOptions)
71549                 .loadScene(sceneID);
71550
71551               // remove previous scene
71552               if (_currScene > 2) {
71553                 sceneID = (_currScene - 1) + '';
71554                 _pannellumViewer
71555                   .removeScene(sceneID);
71556               }
71557             }
71558
71559             var wrap = d3_select('#photoviewer')
71560               .classed('hide', false);
71561
71562             var isHidden = wrap.selectAll('.photo-wrapper.ms-wrapper.hide').size();
71563
71564             if (isHidden) {
71565               wrap
71566                 .selectAll('.photo-wrapper:not(.ms-wrapper)')
71567                 .classed('hide', true);
71568
71569               wrap
71570                 .selectAll('.photo-wrapper.ms-wrapper')
71571                 .classed('hide', false);
71572             }
71573
71574             return this;
71575           },
71576
71577
71578           /**
71579            * hideViewer()
71580            */
71581           hideViewer: function () {
71582             var viewer = d3_select('#photoviewer');
71583             if (!viewer.empty()) { viewer.datum(null); }
71584
71585             viewer
71586               .classed('hide', true)
71587               .selectAll('.photo-wrapper')
71588               .classed('hide', true);
71589
71590             d3_selectAll('.viewfield-group, .sequence, .icon-sign')
71591               .classed('currentView', false);
71592
71593             return this.setStyles(null, true);
71594           },
71595
71596
71597           /**
71598            * selectImage().
71599            */
71600           selectImage: function (d) {
71601             var that = this;
71602             var viewer = d3_select('#photoviewer');
71603             if (!viewer.empty()) { viewer.datum(d); }
71604
71605             this.setStyles(null, true);
71606
71607             var wrap = d3_select('#photoviewer .ms-wrapper');
71608             var attribution = wrap.selectAll('.photo-attribution').html('');
71609
71610             wrap.selectAll('.pnlm-load-box')   // display "loading.."
71611               .style('display', 'block');
71612
71613             if (!d) {
71614               return Promise.resolve({ status: 'ok' });
71615             }
71616
71617             var line1 = attribution
71618               .append('div')
71619               .attr('class', 'attribution-row');
71620
71621             // Add hires checkbox
71622             var label = line1
71623               .append('label')
71624               .attr('class', 'streetside-hires');
71625
71626             label
71627               .append('input')
71628               .attr('type', 'checkbox')
71629               .attr('id', 'streetside-hires-input')
71630               .property('checked', _hires)
71631               .on('click', function () {
71632                 event.stopPropagation();
71633
71634                 _hires = !_hires;
71635                 _resolution = _hires ? 1024 : 512;
71636                 wrap.call(setupCanvas, true);
71637
71638                 var viewstate = {
71639                   yaw: _pannellumViewer.getYaw(),
71640                   pitch: _pannellumViewer.getPitch(),
71641                   hfov: _pannellumViewer.getHfov()
71642                 };
71643
71644                 that.selectImage(d)
71645                   .then(function (response) {
71646                     if (response.status === 'ok') {
71647                       _sceneOptions = Object.assign(_sceneOptions, viewstate);
71648                       that.showViewer();
71649                     }
71650                   });
71651               });
71652
71653             label
71654               .append('span')
71655               .text(t('streetside.hires'));
71656
71657
71658             var captureInfo = line1
71659               .append('div')
71660               .attr('class', 'attribution-capture-info');
71661
71662             // Add capture date
71663             if (d.captured_by) {
71664               var yyyy = (new Date()).getFullYear();
71665
71666               captureInfo
71667                 .append('a')
71668                 .attr('class', 'captured_by')
71669                 .attr('target', '_blank')
71670                 .attr('href', 'https://www.microsoft.com/en-us/maps/streetside')
71671                 .text('©' + yyyy + ' Microsoft');
71672
71673               captureInfo
71674                 .append('span')
71675                 .text('|');
71676             }
71677
71678             if (d.captured_at) {
71679               captureInfo
71680                 .append('span')
71681                 .attr('class', 'captured_at')
71682                 .text(localeTimestamp(d.captured_at));
71683             }
71684
71685             // Add image links
71686             var line2 = attribution
71687               .append('div')
71688               .attr('class', 'attribution-row');
71689
71690             line2
71691               .append('a')
71692               .attr('class', 'image-view-link')
71693               .attr('target', '_blank')
71694               .attr('href', 'https://www.bing.com/maps?cp=' + d.loc[1] + '~' + d.loc[0] +
71695                 '&lvl=17&dir=' + d.ca + '&style=x&v=2&sV=1')
71696               .text(t('streetside.view_on_bing'));
71697
71698             line2
71699               .append('a')
71700               .attr('class', 'image-report-link')
71701               .attr('target', '_blank')
71702               .attr('href', 'https://www.bing.com/maps/privacyreport/streetsideprivacyreport?bubbleid=' +
71703                 encodeURIComponent(d.key) + '&focus=photo&lat=' + d.loc[1] + '&lng=' + d.loc[0] + '&z=17')
71704               .text(t('streetside.report'));
71705
71706
71707             var bubbleIdQuadKey = d.key.toString(4);
71708             var paddingNeeded = 16 - bubbleIdQuadKey.length;
71709             for (var i = 0; i < paddingNeeded; i++) {
71710               bubbleIdQuadKey = '0' + bubbleIdQuadKey;
71711             }
71712             var imgUrlPrefix = streetsideImagesApi + 'hs' + bubbleIdQuadKey;
71713             var imgUrlSuffix = '.jpg?g=6338&n=z';
71714
71715             // Cubemap face code order matters here: front=01, right=02, back=03, left=10, up=11, down=12
71716             var faceKeys = ['01','02','03','10','11','12'];
71717
71718             // Map images to cube faces
71719             var quadKeys = getQuadKeys();
71720             var faces = faceKeys.map(function (faceKey) {
71721               return quadKeys.map(function (quadKey) {
71722                 var xy = qkToXY(quadKey);
71723                 return {
71724                   face: faceKey,
71725                   url: imgUrlPrefix + faceKey + quadKey + imgUrlSuffix,
71726                   x: xy[0],
71727                   y: xy[1]
71728                 };
71729               });
71730             });
71731
71732             return loadFaces(faces)
71733               .then(function () {
71734                 _sceneOptions = {
71735                   showFullscreenCtrl: false,
71736                   autoLoad: true,
71737                   compass: true,
71738                   northOffset: d.ca,
71739                   yaw: 0,
71740                   minHfov: minHfov,
71741                   maxHfov: maxHfov,
71742                   hfov: defaultHfov,
71743                   type: 'cubemap',
71744                   cubeMap: [
71745                     _dataUrlArray[0],
71746                     _dataUrlArray[1],
71747                     _dataUrlArray[2],
71748                     _dataUrlArray[3],
71749                     _dataUrlArray[4],
71750                     _dataUrlArray[5]
71751                   ]
71752                 };
71753                 return { status: 'ok' };
71754               });
71755           },
71756
71757
71758           getSequenceKeyForBubble: function(d) {
71759             return d && d.sequenceKey;
71760           },
71761
71762
71763           // Updates the currently highlighted sequence and selected bubble.
71764           // Reset is only necessary when interacting with the viewport because
71765           // this implicitly changes the currently selected bubble/sequence
71766           setStyles: function (hovered, reset) {
71767             if (reset) {  // reset all layers
71768               d3_selectAll('.viewfield-group')
71769                 .classed('highlighted', false)
71770                 .classed('hovered', false)
71771                 .classed('currentView', false);
71772
71773               d3_selectAll('.sequence')
71774                 .classed('highlighted', false)
71775                 .classed('currentView', false);
71776             }
71777
71778             var hoveredBubbleKey = hovered && hovered.key;
71779             var hoveredSequenceKey = this.getSequenceKeyForBubble(hovered);
71780             var hoveredSequence = hoveredSequenceKey && _ssCache.sequences[hoveredSequenceKey];
71781             var hoveredBubbleKeys =  (hoveredSequence && hoveredSequence.bubbles.map(function (d) { return d.key; })) || [];
71782
71783             var viewer = d3_select('#photoviewer');
71784             var selected = viewer.empty() ? undefined : viewer.datum();
71785             var selectedBubbleKey = selected && selected.key;
71786             var selectedSequenceKey = this.getSequenceKeyForBubble(selected);
71787             var selectedSequence = selectedSequenceKey && _ssCache.sequences[selectedSequenceKey];
71788             var selectedBubbleKeys = (selectedSequence && selectedSequence.bubbles.map(function (d) { return d.key; })) || [];
71789
71790             // highlight sibling viewfields on either the selected or the hovered sequences
71791             var highlightedBubbleKeys = utilArrayUnion(hoveredBubbleKeys, selectedBubbleKeys);
71792
71793             d3_selectAll('.layer-streetside-images .viewfield-group')
71794               .classed('highlighted', function (d) { return highlightedBubbleKeys.indexOf(d.key) !== -1; })
71795               .classed('hovered',     function (d) { return d.key === hoveredBubbleKey; })
71796               .classed('currentView', function (d) { return d.key === selectedBubbleKey; });
71797
71798             d3_selectAll('.layer-streetside-images .sequence')
71799               .classed('highlighted', function (d) { return d.properties.key === hoveredSequenceKey; })
71800               .classed('currentView', function (d) { return d.properties.key === selectedSequenceKey; });
71801
71802             // update viewfields if needed
71803             d3_selectAll('.viewfield-group .viewfield')
71804               .attr('d', viewfieldPath);
71805
71806             function viewfieldPath() {
71807               var d = this.parentNode.__data__;
71808               if (d.pano && d.key !== selectedBubbleKey) {
71809                 return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
71810               } else {
71811                 return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
71812               }
71813             }
71814
71815             return this;
71816           },
71817
71818
71819           /**
71820            * cache().
71821            */
71822           cache: function () {
71823             return _ssCache;
71824           }
71825         };
71826
71827         var apibase$4 = 'https://taginfo.openstreetmap.org/api/4/';
71828         var _inflight$2 = {};
71829         var _popularKeys = {};
71830         var _taginfoCache = {};
71831
71832         var tag_sorts = {
71833             point: 'count_nodes',
71834             vertex: 'count_nodes',
71835             area: 'count_ways',
71836             line: 'count_ways'
71837         };
71838         var tag_sort_members = {
71839             point: 'count_node_members',
71840             vertex: 'count_node_members',
71841             area: 'count_way_members',
71842             line: 'count_way_members',
71843             relation: 'count_relation_members'
71844         };
71845         var tag_filters = {
71846             point: 'nodes',
71847             vertex: 'nodes',
71848             area: 'ways',
71849             line: 'ways'
71850         };
71851         var tag_members_fractions = {
71852             point: 'count_node_members_fraction',
71853             vertex: 'count_node_members_fraction',
71854             area: 'count_way_members_fraction',
71855             line: 'count_way_members_fraction',
71856             relation: 'count_relation_members_fraction'
71857         };
71858
71859
71860         function sets(params, n, o) {
71861             if (params.geometry && o[params.geometry]) {
71862                 params[n] = o[params.geometry];
71863             }
71864             return params;
71865         }
71866
71867
71868         function setFilter(params) {
71869             return sets(params, 'filter', tag_filters);
71870         }
71871
71872
71873         function setSort(params) {
71874             return sets(params, 'sortname', tag_sorts);
71875         }
71876
71877
71878         function setSortMembers(params) {
71879             return sets(params, 'sortname', tag_sort_members);
71880         }
71881
71882
71883         function clean(params) {
71884             return utilObjectOmit(params, ['geometry', 'debounce']);
71885         }
71886
71887
71888         function filterKeys(type) {
71889             var count_type = type ? 'count_' + type : 'count_all';
71890             return function(d) {
71891                 return parseFloat(d[count_type]) > 2500 || d.in_wiki;
71892             };
71893         }
71894
71895
71896         function filterMultikeys(prefix) {
71897             return function(d) {
71898                 // d.key begins with prefix, and d.key contains no additional ':'s
71899                 var re = new RegExp('^' + prefix + '(.*)$');
71900                 var matches = d.key.match(re) || [];
71901                 return (matches.length === 2 && matches[1].indexOf(':') === -1);
71902             };
71903         }
71904
71905
71906         function filterValues(allowUpperCase) {
71907             return function(d) {
71908                 if (d.value.match(/[;,]/) !== null) { return false; }  // exclude some punctuation
71909                 if (!allowUpperCase && d.value.match(/[A-Z*]/) !== null) { return false; }  // exclude uppercase letters
71910                 return parseFloat(d.fraction) > 0.0;
71911             };
71912         }
71913
71914
71915         function filterRoles(geometry) {
71916             return function(d) {
71917                 if (d.role === '') { return false; } // exclude empty role
71918                 if (d.role.match(/[A-Z*;,]/) !== null) { return false; }  // exclude uppercase letters and some punctuation
71919                 return parseFloat(d[tag_members_fractions[geometry]]) > 0.0;
71920             };
71921         }
71922
71923
71924         function valKey(d) {
71925             return {
71926                 value: d.key,
71927                 title: d.key
71928             };
71929         }
71930
71931
71932         function valKeyDescription(d) {
71933             var obj = {
71934                 value: d.value,
71935                 title: d.description || d.value
71936             };
71937             if (d.count) {
71938                 obj.count = d.count;
71939             }
71940             return obj;
71941         }
71942
71943
71944         function roleKey(d) {
71945             return {
71946                 value: d.role,
71947                 title: d.role
71948             };
71949         }
71950
71951
71952         // sort keys with ':' lower than keys without ':'
71953         function sortKeys(a, b) {
71954             return (a.key.indexOf(':') === -1 && b.key.indexOf(':') !== -1) ? -1
71955                 : (a.key.indexOf(':') !== -1 && b.key.indexOf(':') === -1) ? 1
71956                 : 0;
71957         }
71958
71959
71960         var debouncedRequest$1 = debounce(request$1, 300, { leading: false });
71961
71962         function request$1(url, params, exactMatch, callback, loaded) {
71963             if (_inflight$2[url]) { return; }
71964
71965             if (checkCache(url, params, exactMatch, callback)) { return; }
71966
71967             var controller = new AbortController();
71968             _inflight$2[url] = controller;
71969
71970             d3_json(url, { signal: controller.signal })
71971                 .then(function(result) {
71972                     delete _inflight$2[url];
71973                     if (loaded) { loaded(null, result); }
71974                 })
71975                 .catch(function(err) {
71976                     delete _inflight$2[url];
71977                     if (err.name === 'AbortError') { return; }
71978                     if (loaded) { loaded(err.message); }
71979                 });
71980         }
71981
71982
71983         function checkCache(url, params, exactMatch, callback) {
71984             var rp = params.rp || 25;
71985             var testQuery = params.query || '';
71986             var testUrl = url;
71987
71988             do {
71989                 var hit = _taginfoCache[testUrl];
71990
71991                 // exact match, or shorter match yielding fewer than max results (rp)
71992                 if (hit && (url === testUrl || hit.length < rp)) {
71993                     callback(null, hit);
71994                     return true;
71995                 }
71996
71997                 // don't try to shorten the query
71998                 if (exactMatch || !testQuery.length) { return false; }
71999
72000                 // do shorten the query to see if we already have a cached result
72001                 // that has returned fewer than max results (rp)
72002                 testQuery = testQuery.slice(0, -1);
72003                 testUrl = url.replace(/&query=(.*?)&/, '&query=' + testQuery + '&');
72004             } while (testQuery.length >= 0);
72005
72006             return false;
72007         }
72008
72009
72010         var serviceTaginfo = {
72011
72012             init: function() {
72013                 _inflight$2 = {};
72014                 _taginfoCache = {};
72015                 _popularKeys = {
72016                     postal_code: true   // #5377
72017                 };
72018
72019                 // Fetch popular keys.  We'll exclude these from `values`
72020                 // lookups because they stress taginfo, and they aren't likely
72021                 // to yield meaningful autocomplete results.. see #3955
72022                 var params = {
72023                     rp: 100,
72024                     sortname: 'values_all',
72025                     sortorder: 'desc',
72026                     page: 1,
72027                     debounce: false,
72028                     lang: currentLocale
72029                 };
72030                 this.keys(params, function(err, data) {
72031                     if (err) { return; }
72032                     data.forEach(function(d) {
72033                         if (d.value === 'opening_hours') { return; }  // exception
72034                         _popularKeys[d.value] = true;
72035                     });
72036                 });
72037             },
72038
72039
72040             reset: function() {
72041                 Object.values(_inflight$2).forEach(function(controller) { controller.abort(); });
72042                 _inflight$2 = {};
72043             },
72044
72045
72046             keys: function(params, callback) {
72047                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
72048                 params = clean(setSort(params));
72049                 params = Object.assign({
72050                     rp: 10,
72051                     sortname: 'count_all',
72052                     sortorder: 'desc',
72053                     page: 1,
72054                     lang: currentLocale
72055                 }, params);
72056
72057                 var url = apibase$4 + 'keys/all?' + utilQsString(params);
72058                 doRequest(url, params, false, callback, function(err, d) {
72059                     if (err) {
72060                         callback(err);
72061                     } else {
72062                         var f = filterKeys(params.filter);
72063                         var result = d.data.filter(f).sort(sortKeys).map(valKey);
72064                         _taginfoCache[url] = result;
72065                         callback(null, result);
72066                     }
72067                 });
72068             },
72069
72070
72071             multikeys: function(params, callback) {
72072                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
72073                 params = clean(setSort(params));
72074                 params = Object.assign({
72075                     rp: 25,
72076                     sortname: 'count_all',
72077                     sortorder: 'desc',
72078                     page: 1,
72079                     lang: currentLocale
72080                 }, params);
72081
72082                 var prefix = params.query;
72083                 var url = apibase$4 + 'keys/all?' + utilQsString(params);
72084                 doRequest(url, params, true, callback, function(err, d) {
72085                     if (err) {
72086                         callback(err);
72087                     } else {
72088                         var f = filterMultikeys(prefix);
72089                         var result = d.data.filter(f).map(valKey);
72090                         _taginfoCache[url] = result;
72091                         callback(null, result);
72092                     }
72093                 });
72094             },
72095
72096
72097             values: function(params, callback) {
72098                 // Exclude popular keys from values lookups.. see #3955
72099                 var key = params.key;
72100                 if (key && _popularKeys[key]) {
72101                     callback(null, []);
72102                     return;
72103                 }
72104
72105                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
72106                 params = clean(setSort(setFilter(params)));
72107                 params = Object.assign({
72108                     rp: 25,
72109                     sortname: 'count_all',
72110                     sortorder: 'desc',
72111                     page: 1,
72112                     lang: currentLocale
72113                 }, params);
72114
72115                 var url = apibase$4 + 'key/values?' + utilQsString(params);
72116                 doRequest(url, params, false, callback, function(err, d) {
72117                     if (err) {
72118                         callback(err);
72119                     } else {
72120                         // In most cases we prefer taginfo value results with lowercase letters.
72121                         // A few OSM keys expect values to contain uppercase values (see #3377).
72122                         // This is not an exhaustive list (e.g. `name` also has uppercase values)
72123                         // but these are the fields where taginfo value lookup is most useful.
72124                         var re = /network|taxon|genus|species|brand|grape_variety|royal_cypher|listed_status|booth|rating|stars|:output|_hours|_times|_ref|manufacturer|country|target|brewery/;
72125                         var allowUpperCase = re.test(params.key);
72126                         var f = filterValues(allowUpperCase);
72127
72128                         var result = d.data.filter(f).map(valKeyDescription);
72129                         _taginfoCache[url] = result;
72130                         callback(null, result);
72131                     }
72132                 });
72133             },
72134
72135
72136             roles: function(params, callback) {
72137                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
72138                 var geometry = params.geometry;
72139                 params = clean(setSortMembers(params));
72140                 params = Object.assign({
72141                     rp: 25,
72142                     sortname: 'count_all_members',
72143                     sortorder: 'desc',
72144                     page: 1,
72145                     lang: currentLocale
72146                 }, params);
72147
72148                 var url = apibase$4 + 'relation/roles?' + utilQsString(params);
72149                 doRequest(url, params, true, callback, function(err, d) {
72150                     if (err) {
72151                         callback(err);
72152                     } else {
72153                         var f = filterRoles(geometry);
72154                         var result = d.data.filter(f).map(roleKey);
72155                         _taginfoCache[url] = result;
72156                         callback(null, result);
72157                     }
72158                 });
72159             },
72160
72161
72162             docs: function(params, callback) {
72163                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
72164                 params = clean(setSort(params));
72165
72166                 var path = 'key/wiki_pages?';
72167                 if (params.value) {
72168                     path = 'tag/wiki_pages?';
72169                 } else if (params.rtype) {
72170                     path = 'relation/wiki_pages?';
72171                 }
72172
72173                 var url = apibase$4 + path + utilQsString(params);
72174                 doRequest(url, params, true, callback, function(err, d) {
72175                     if (err) {
72176                         callback(err);
72177                     } else {
72178                         _taginfoCache[url] = d.data;
72179                         callback(null, d.data);
72180                     }
72181                 });
72182             },
72183
72184
72185             apibase: function(_) {
72186                 if (!arguments.length) { return apibase$4; }
72187                 apibase$4 = _;
72188                 return this;
72189             }
72190
72191         };
72192
72193         var helpers = createCommonjsModule(function (module, exports) {
72194         Object.defineProperty(exports, "__esModule", { value: true });
72195         /**
72196          * @module helpers
72197          */
72198         /**
72199          * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
72200          *
72201          * @memberof helpers
72202          * @type {number}
72203          */
72204         exports.earthRadius = 6371008.8;
72205         /**
72206          * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.
72207          *
72208          * @memberof helpers
72209          * @type {Object}
72210          */
72211         exports.factors = {
72212             centimeters: exports.earthRadius * 100,
72213             centimetres: exports.earthRadius * 100,
72214             degrees: exports.earthRadius / 111325,
72215             feet: exports.earthRadius * 3.28084,
72216             inches: exports.earthRadius * 39.370,
72217             kilometers: exports.earthRadius / 1000,
72218             kilometres: exports.earthRadius / 1000,
72219             meters: exports.earthRadius,
72220             metres: exports.earthRadius,
72221             miles: exports.earthRadius / 1609.344,
72222             millimeters: exports.earthRadius * 1000,
72223             millimetres: exports.earthRadius * 1000,
72224             nauticalmiles: exports.earthRadius / 1852,
72225             radians: 1,
72226             yards: exports.earthRadius / 1.0936,
72227         };
72228         /**
72229          * Units of measurement factors based on 1 meter.
72230          *
72231          * @memberof helpers
72232          * @type {Object}
72233          */
72234         exports.unitsFactors = {
72235             centimeters: 100,
72236             centimetres: 100,
72237             degrees: 1 / 111325,
72238             feet: 3.28084,
72239             inches: 39.370,
72240             kilometers: 1 / 1000,
72241             kilometres: 1 / 1000,
72242             meters: 1,
72243             metres: 1,
72244             miles: 1 / 1609.344,
72245             millimeters: 1000,
72246             millimetres: 1000,
72247             nauticalmiles: 1 / 1852,
72248             radians: 1 / exports.earthRadius,
72249             yards: 1 / 1.0936,
72250         };
72251         /**
72252          * Area of measurement factors based on 1 square meter.
72253          *
72254          * @memberof helpers
72255          * @type {Object}
72256          */
72257         exports.areaFactors = {
72258             acres: 0.000247105,
72259             centimeters: 10000,
72260             centimetres: 10000,
72261             feet: 10.763910417,
72262             inches: 1550.003100006,
72263             kilometers: 0.000001,
72264             kilometres: 0.000001,
72265             meters: 1,
72266             metres: 1,
72267             miles: 3.86e-7,
72268             millimeters: 1000000,
72269             millimetres: 1000000,
72270             yards: 1.195990046,
72271         };
72272         /**
72273          * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
72274          *
72275          * @name feature
72276          * @param {Geometry} geometry input geometry
72277          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
72278          * @param {Object} [options={}] Optional Parameters
72279          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
72280          * @param {string|number} [options.id] Identifier associated with the Feature
72281          * @returns {Feature} a GeoJSON Feature
72282          * @example
72283          * var geometry = {
72284          *   "type": "Point",
72285          *   "coordinates": [110, 50]
72286          * };
72287          *
72288          * var feature = turf.feature(geometry);
72289          *
72290          * //=feature
72291          */
72292         function feature(geom, properties, options) {
72293             if (options === void 0) { options = {}; }
72294             var feat = { type: "Feature" };
72295             if (options.id === 0 || options.id) {
72296                 feat.id = options.id;
72297             }
72298             if (options.bbox) {
72299                 feat.bbox = options.bbox;
72300             }
72301             feat.properties = properties || {};
72302             feat.geometry = geom;
72303             return feat;
72304         }
72305         exports.feature = feature;
72306         /**
72307          * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.
72308          * For GeometryCollection type use `helpers.geometryCollection`
72309          *
72310          * @name geometry
72311          * @param {string} type Geometry Type
72312          * @param {Array<any>} coordinates Coordinates
72313          * @param {Object} [options={}] Optional Parameters
72314          * @returns {Geometry} a GeoJSON Geometry
72315          * @example
72316          * var type = "Point";
72317          * var coordinates = [110, 50];
72318          * var geometry = turf.geometry(type, coordinates);
72319          * // => geometry
72320          */
72321         function geometry(type, coordinates, options) {
72322             switch (type) {
72323                 case "Point": return point(coordinates).geometry;
72324                 case "LineString": return lineString(coordinates).geometry;
72325                 case "Polygon": return polygon(coordinates).geometry;
72326                 case "MultiPoint": return multiPoint(coordinates).geometry;
72327                 case "MultiLineString": return multiLineString(coordinates).geometry;
72328                 case "MultiPolygon": return multiPolygon(coordinates).geometry;
72329                 default: throw new Error(type + " is invalid");
72330             }
72331         }
72332         exports.geometry = geometry;
72333         /**
72334          * Creates a {@link Point} {@link Feature} from a Position.
72335          *
72336          * @name point
72337          * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)
72338          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
72339          * @param {Object} [options={}] Optional Parameters
72340          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
72341          * @param {string|number} [options.id] Identifier associated with the Feature
72342          * @returns {Feature<Point>} a Point feature
72343          * @example
72344          * var point = turf.point([-75.343, 39.984]);
72345          *
72346          * //=point
72347          */
72348         function point(coordinates, properties, options) {
72349             if (options === void 0) { options = {}; }
72350             var geom = {
72351                 type: "Point",
72352                 coordinates: coordinates,
72353             };
72354             return feature(geom, properties, options);
72355         }
72356         exports.point = point;
72357         /**
72358          * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.
72359          *
72360          * @name points
72361          * @param {Array<Array<number>>} coordinates an array of Points
72362          * @param {Object} [properties={}] Translate these properties to each Feature
72363          * @param {Object} [options={}] Optional Parameters
72364          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
72365          * associated with the FeatureCollection
72366          * @param {string|number} [options.id] Identifier associated with the FeatureCollection
72367          * @returns {FeatureCollection<Point>} Point Feature
72368          * @example
72369          * var points = turf.points([
72370          *   [-75, 39],
72371          *   [-80, 45],
72372          *   [-78, 50]
72373          * ]);
72374          *
72375          * //=points
72376          */
72377         function points(coordinates, properties, options) {
72378             if (options === void 0) { options = {}; }
72379             return featureCollection(coordinates.map(function (coords) {
72380                 return point(coords, properties);
72381             }), options);
72382         }
72383         exports.points = points;
72384         /**
72385          * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.
72386          *
72387          * @name polygon
72388          * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
72389          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
72390          * @param {Object} [options={}] Optional Parameters
72391          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
72392          * @param {string|number} [options.id] Identifier associated with the Feature
72393          * @returns {Feature<Polygon>} Polygon Feature
72394          * @example
72395          * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });
72396          *
72397          * //=polygon
72398          */
72399         function polygon(coordinates, properties, options) {
72400             if (options === void 0) { options = {}; }
72401             for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {
72402                 var ring = coordinates_1[_i];
72403                 if (ring.length < 4) {
72404                     throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");
72405                 }
72406                 for (var j = 0; j < ring[ring.length - 1].length; j++) {
72407                     // Check if first point of Polygon contains two numbers
72408                     if (ring[ring.length - 1][j] !== ring[0][j]) {
72409                         throw new Error("First and last Position are not equivalent.");
72410                     }
72411                 }
72412             }
72413             var geom = {
72414                 type: "Polygon",
72415                 coordinates: coordinates,
72416             };
72417             return feature(geom, properties, options);
72418         }
72419         exports.polygon = polygon;
72420         /**
72421          * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.
72422          *
72423          * @name polygons
72424          * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates
72425          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
72426          * @param {Object} [options={}] Optional Parameters
72427          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
72428          * @param {string|number} [options.id] Identifier associated with the FeatureCollection
72429          * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection
72430          * @example
72431          * var polygons = turf.polygons([
72432          *   [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],
72433          *   [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],
72434          * ]);
72435          *
72436          * //=polygons
72437          */
72438         function polygons(coordinates, properties, options) {
72439             if (options === void 0) { options = {}; }
72440             return featureCollection(coordinates.map(function (coords) {
72441                 return polygon(coords, properties);
72442             }), options);
72443         }
72444         exports.polygons = polygons;
72445         /**
72446          * Creates a {@link LineString} {@link Feature} from an Array of Positions.
72447          *
72448          * @name lineString
72449          * @param {Array<Array<number>>} coordinates an array of Positions
72450          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
72451          * @param {Object} [options={}] Optional Parameters
72452          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
72453          * @param {string|number} [options.id] Identifier associated with the Feature
72454          * @returns {Feature<LineString>} LineString Feature
72455          * @example
72456          * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
72457          * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});
72458          *
72459          * //=linestring1
72460          * //=linestring2
72461          */
72462         function lineString(coordinates, properties, options) {
72463             if (options === void 0) { options = {}; }
72464             if (coordinates.length < 2) {
72465                 throw new Error("coordinates must be an array of two or more positions");
72466             }
72467             var geom = {
72468                 type: "LineString",
72469                 coordinates: coordinates,
72470             };
72471             return feature(geom, properties, options);
72472         }
72473         exports.lineString = lineString;
72474         /**
72475          * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.
72476          *
72477          * @name lineStrings
72478          * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
72479          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
72480          * @param {Object} [options={}] Optional Parameters
72481          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
72482          * associated with the FeatureCollection
72483          * @param {string|number} [options.id] Identifier associated with the FeatureCollection
72484          * @returns {FeatureCollection<LineString>} LineString FeatureCollection
72485          * @example
72486          * var linestrings = turf.lineStrings([
72487          *   [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],
72488          *   [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]
72489          * ]);
72490          *
72491          * //=linestrings
72492          */
72493         function lineStrings(coordinates, properties, options) {
72494             if (options === void 0) { options = {}; }
72495             return featureCollection(coordinates.map(function (coords) {
72496                 return lineString(coords, properties);
72497             }), options);
72498         }
72499         exports.lineStrings = lineStrings;
72500         /**
72501          * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.
72502          *
72503          * @name featureCollection
72504          * @param {Feature[]} features input features
72505          * @param {Object} [options={}] Optional Parameters
72506          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
72507          * @param {string|number} [options.id] Identifier associated with the Feature
72508          * @returns {FeatureCollection} FeatureCollection of Features
72509          * @example
72510          * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});
72511          * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});
72512          * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});
72513          *
72514          * var collection = turf.featureCollection([
72515          *   locationA,
72516          *   locationB,
72517          *   locationC
72518          * ]);
72519          *
72520          * //=collection
72521          */
72522         function featureCollection(features, options) {
72523             if (options === void 0) { options = {}; }
72524             var fc = { type: "FeatureCollection" };
72525             if (options.id) {
72526                 fc.id = options.id;
72527             }
72528             if (options.bbox) {
72529                 fc.bbox = options.bbox;
72530             }
72531             fc.features = features;
72532             return fc;
72533         }
72534         exports.featureCollection = featureCollection;
72535         /**
72536          * Creates a {@link Feature<MultiLineString>} based on a
72537          * coordinate array. Properties can be added optionally.
72538          *
72539          * @name multiLineString
72540          * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings
72541          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
72542          * @param {Object} [options={}] Optional Parameters
72543          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
72544          * @param {string|number} [options.id] Identifier associated with the Feature
72545          * @returns {Feature<MultiLineString>} a MultiLineString feature
72546          * @throws {Error} if no coordinates are passed
72547          * @example
72548          * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);
72549          *
72550          * //=multiLine
72551          */
72552         function multiLineString(coordinates, properties, options) {
72553             if (options === void 0) { options = {}; }
72554             var geom = {
72555                 type: "MultiLineString",
72556                 coordinates: coordinates,
72557             };
72558             return feature(geom, properties, options);
72559         }
72560         exports.multiLineString = multiLineString;
72561         /**
72562          * Creates a {@link Feature<MultiPoint>} based on a
72563          * coordinate array. Properties can be added optionally.
72564          *
72565          * @name multiPoint
72566          * @param {Array<Array<number>>} coordinates an array of Positions
72567          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
72568          * @param {Object} [options={}] Optional Parameters
72569          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
72570          * @param {string|number} [options.id] Identifier associated with the Feature
72571          * @returns {Feature<MultiPoint>} a MultiPoint feature
72572          * @throws {Error} if no coordinates are passed
72573          * @example
72574          * var multiPt = turf.multiPoint([[0,0],[10,10]]);
72575          *
72576          * //=multiPt
72577          */
72578         function multiPoint(coordinates, properties, options) {
72579             if (options === void 0) { options = {}; }
72580             var geom = {
72581                 type: "MultiPoint",
72582                 coordinates: coordinates,
72583             };
72584             return feature(geom, properties, options);
72585         }
72586         exports.multiPoint = multiPoint;
72587         /**
72588          * Creates a {@link Feature<MultiPolygon>} based on a
72589          * coordinate array. Properties can be added optionally.
72590          *
72591          * @name multiPolygon
72592          * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons
72593          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
72594          * @param {Object} [options={}] Optional Parameters
72595          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
72596          * @param {string|number} [options.id] Identifier associated with the Feature
72597          * @returns {Feature<MultiPolygon>} a multipolygon feature
72598          * @throws {Error} if no coordinates are passed
72599          * @example
72600          * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);
72601          *
72602          * //=multiPoly
72603          *
72604          */
72605         function multiPolygon(coordinates, properties, options) {
72606             if (options === void 0) { options = {}; }
72607             var geom = {
72608                 type: "MultiPolygon",
72609                 coordinates: coordinates,
72610             };
72611             return feature(geom, properties, options);
72612         }
72613         exports.multiPolygon = multiPolygon;
72614         /**
72615          * Creates a {@link Feature<GeometryCollection>} based on a
72616          * coordinate array. Properties can be added optionally.
72617          *
72618          * @name geometryCollection
72619          * @param {Array<Geometry>} geometries an array of GeoJSON Geometries
72620          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
72621          * @param {Object} [options={}] Optional Parameters
72622          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
72623          * @param {string|number} [options.id] Identifier associated with the Feature
72624          * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature
72625          * @example
72626          * var pt = turf.geometry("Point", [100, 0]);
72627          * var line = turf.geometry("LineString", [[101, 0], [102, 1]]);
72628          * var collection = turf.geometryCollection([pt, line]);
72629          *
72630          * // => collection
72631          */
72632         function geometryCollection(geometries, properties, options) {
72633             if (options === void 0) { options = {}; }
72634             var geom = {
72635                 type: "GeometryCollection",
72636                 geometries: geometries,
72637             };
72638             return feature(geom, properties, options);
72639         }
72640         exports.geometryCollection = geometryCollection;
72641         /**
72642          * Round number to precision
72643          *
72644          * @param {number} num Number
72645          * @param {number} [precision=0] Precision
72646          * @returns {number} rounded number
72647          * @example
72648          * turf.round(120.4321)
72649          * //=120
72650          *
72651          * turf.round(120.4321, 2)
72652          * //=120.43
72653          */
72654         function round(num, precision) {
72655             if (precision === void 0) { precision = 0; }
72656             if (precision && !(precision >= 0)) {
72657                 throw new Error("precision must be a positive number");
72658             }
72659             var multiplier = Math.pow(10, precision || 0);
72660             return Math.round(num * multiplier) / multiplier;
72661         }
72662         exports.round = round;
72663         /**
72664          * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.
72665          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
72666          *
72667          * @name radiansToLength
72668          * @param {number} radians in radians across the sphere
72669          * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
72670          * meters, kilometres, kilometers.
72671          * @returns {number} distance
72672          */
72673         function radiansToLength(radians, units) {
72674             if (units === void 0) { units = "kilometers"; }
72675             var factor = exports.factors[units];
72676             if (!factor) {
72677                 throw new Error(units + " units is invalid");
72678             }
72679             return radians * factor;
72680         }
72681         exports.radiansToLength = radiansToLength;
72682         /**
72683          * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians
72684          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
72685          *
72686          * @name lengthToRadians
72687          * @param {number} distance in real units
72688          * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
72689          * meters, kilometres, kilometers.
72690          * @returns {number} radians
72691          */
72692         function lengthToRadians(distance, units) {
72693             if (units === void 0) { units = "kilometers"; }
72694             var factor = exports.factors[units];
72695             if (!factor) {
72696                 throw new Error(units + " units is invalid");
72697             }
72698             return distance / factor;
72699         }
72700         exports.lengthToRadians = lengthToRadians;
72701         /**
72702          * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees
72703          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet
72704          *
72705          * @name lengthToDegrees
72706          * @param {number} distance in real units
72707          * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
72708          * meters, kilometres, kilometers.
72709          * @returns {number} degrees
72710          */
72711         function lengthToDegrees(distance, units) {
72712             return radiansToDegrees(lengthToRadians(distance, units));
72713         }
72714         exports.lengthToDegrees = lengthToDegrees;
72715         /**
72716          * Converts any bearing angle from the north line direction (positive clockwise)
72717          * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line
72718          *
72719          * @name bearingToAzimuth
72720          * @param {number} bearing angle, between -180 and +180 degrees
72721          * @returns {number} angle between 0 and 360 degrees
72722          */
72723         function bearingToAzimuth(bearing) {
72724             var angle = bearing % 360;
72725             if (angle < 0) {
72726                 angle += 360;
72727             }
72728             return angle;
72729         }
72730         exports.bearingToAzimuth = bearingToAzimuth;
72731         /**
72732          * Converts an angle in radians to degrees
72733          *
72734          * @name radiansToDegrees
72735          * @param {number} radians angle in radians
72736          * @returns {number} degrees between 0 and 360 degrees
72737          */
72738         function radiansToDegrees(radians) {
72739             var degrees = radians % (2 * Math.PI);
72740             return degrees * 180 / Math.PI;
72741         }
72742         exports.radiansToDegrees = radiansToDegrees;
72743         /**
72744          * Converts an angle in degrees to radians
72745          *
72746          * @name degreesToRadians
72747          * @param {number} degrees angle between 0 and 360 degrees
72748          * @returns {number} angle in radians
72749          */
72750         function degreesToRadians(degrees) {
72751             var radians = degrees % 360;
72752             return radians * Math.PI / 180;
72753         }
72754         exports.degreesToRadians = degreesToRadians;
72755         /**
72756          * Converts a length to the requested unit.
72757          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
72758          *
72759          * @param {number} length to be converted
72760          * @param {Units} [originalUnit="kilometers"] of the length
72761          * @param {Units} [finalUnit="kilometers"] returned unit
72762          * @returns {number} the converted length
72763          */
72764         function convertLength(length, originalUnit, finalUnit) {
72765             if (originalUnit === void 0) { originalUnit = "kilometers"; }
72766             if (finalUnit === void 0) { finalUnit = "kilometers"; }
72767             if (!(length >= 0)) {
72768                 throw new Error("length must be a positive number");
72769             }
72770             return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);
72771         }
72772         exports.convertLength = convertLength;
72773         /**
72774          * Converts a area to the requested unit.
72775          * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches
72776          * @param {number} area to be converted
72777          * @param {Units} [originalUnit="meters"] of the distance
72778          * @param {Units} [finalUnit="kilometers"] returned unit
72779          * @returns {number} the converted distance
72780          */
72781         function convertArea(area, originalUnit, finalUnit) {
72782             if (originalUnit === void 0) { originalUnit = "meters"; }
72783             if (finalUnit === void 0) { finalUnit = "kilometers"; }
72784             if (!(area >= 0)) {
72785                 throw new Error("area must be a positive number");
72786             }
72787             var startFactor = exports.areaFactors[originalUnit];
72788             if (!startFactor) {
72789                 throw new Error("invalid original units");
72790             }
72791             var finalFactor = exports.areaFactors[finalUnit];
72792             if (!finalFactor) {
72793                 throw new Error("invalid final units");
72794             }
72795             return (area / startFactor) * finalFactor;
72796         }
72797         exports.convertArea = convertArea;
72798         /**
72799          * isNumber
72800          *
72801          * @param {*} num Number to validate
72802          * @returns {boolean} true/false
72803          * @example
72804          * turf.isNumber(123)
72805          * //=true
72806          * turf.isNumber('foo')
72807          * //=false
72808          */
72809         function isNumber(num) {
72810             return !isNaN(num) && num !== null && !Array.isArray(num) && !/^\s*$/.test(num);
72811         }
72812         exports.isNumber = isNumber;
72813         /**
72814          * isObject
72815          *
72816          * @param {*} input variable to validate
72817          * @returns {boolean} true/false
72818          * @example
72819          * turf.isObject({elevation: 10})
72820          * //=true
72821          * turf.isObject('foo')
72822          * //=false
72823          */
72824         function isObject(input) {
72825             return (!!input) && (input.constructor === Object);
72826         }
72827         exports.isObject = isObject;
72828         /**
72829          * Validate BBox
72830          *
72831          * @private
72832          * @param {Array<number>} bbox BBox to validate
72833          * @returns {void}
72834          * @throws Error if BBox is not valid
72835          * @example
72836          * validateBBox([-180, -40, 110, 50])
72837          * //=OK
72838          * validateBBox([-180, -40])
72839          * //=Error
72840          * validateBBox('Foo')
72841          * //=Error
72842          * validateBBox(5)
72843          * //=Error
72844          * validateBBox(null)
72845          * //=Error
72846          * validateBBox(undefined)
72847          * //=Error
72848          */
72849         function validateBBox(bbox) {
72850             if (!bbox) {
72851                 throw new Error("bbox is required");
72852             }
72853             if (!Array.isArray(bbox)) {
72854                 throw new Error("bbox must be an Array");
72855             }
72856             if (bbox.length !== 4 && bbox.length !== 6) {
72857                 throw new Error("bbox must be an Array of 4 or 6 numbers");
72858             }
72859             bbox.forEach(function (num) {
72860                 if (!isNumber(num)) {
72861                     throw new Error("bbox must only contain numbers");
72862                 }
72863             });
72864         }
72865         exports.validateBBox = validateBBox;
72866         /**
72867          * Validate Id
72868          *
72869          * @private
72870          * @param {string|number} id Id to validate
72871          * @returns {void}
72872          * @throws Error if Id is not valid
72873          * @example
72874          * validateId([-180, -40, 110, 50])
72875          * //=Error
72876          * validateId([-180, -40])
72877          * //=Error
72878          * validateId('Foo')
72879          * //=OK
72880          * validateId(5)
72881          * //=OK
72882          * validateId(null)
72883          * //=Error
72884          * validateId(undefined)
72885          * //=Error
72886          */
72887         function validateId(id) {
72888             if (!id) {
72889                 throw new Error("id is required");
72890             }
72891             if (["string", "number"].indexOf(typeof id) === -1) {
72892                 throw new Error("id must be a number or a string");
72893             }
72894         }
72895         exports.validateId = validateId;
72896         // Deprecated methods
72897         function radians2degrees() {
72898             throw new Error("method has been renamed to `radiansToDegrees`");
72899         }
72900         exports.radians2degrees = radians2degrees;
72901         function degrees2radians() {
72902             throw new Error("method has been renamed to `degreesToRadians`");
72903         }
72904         exports.degrees2radians = degrees2radians;
72905         function distanceToDegrees() {
72906             throw new Error("method has been renamed to `lengthToDegrees`");
72907         }
72908         exports.distanceToDegrees = distanceToDegrees;
72909         function distanceToRadians() {
72910             throw new Error("method has been renamed to `lengthToRadians`");
72911         }
72912         exports.distanceToRadians = distanceToRadians;
72913         function radiansToDistance() {
72914             throw new Error("method has been renamed to `radiansToLength`");
72915         }
72916         exports.radiansToDistance = radiansToDistance;
72917         function bearingToAngle() {
72918             throw new Error("method has been renamed to `bearingToAzimuth`");
72919         }
72920         exports.bearingToAngle = bearingToAngle;
72921         function convertDistance() {
72922             throw new Error("method has been renamed to `convertLength`");
72923         }
72924         exports.convertDistance = convertDistance;
72925         });
72926
72927         unwrapExports(helpers);
72928         var helpers_1 = helpers.earthRadius;
72929         var helpers_2 = helpers.factors;
72930         var helpers_3 = helpers.unitsFactors;
72931         var helpers_4 = helpers.areaFactors;
72932         var helpers_5 = helpers.feature;
72933         var helpers_6 = helpers.geometry;
72934         var helpers_7 = helpers.point;
72935         var helpers_8 = helpers.points;
72936         var helpers_9 = helpers.polygon;
72937         var helpers_10 = helpers.polygons;
72938         var helpers_11 = helpers.lineString;
72939         var helpers_12 = helpers.lineStrings;
72940         var helpers_13 = helpers.featureCollection;
72941         var helpers_14 = helpers.multiLineString;
72942         var helpers_15 = helpers.multiPoint;
72943         var helpers_16 = helpers.multiPolygon;
72944         var helpers_17 = helpers.geometryCollection;
72945         var helpers_18 = helpers.round;
72946         var helpers_19 = helpers.radiansToLength;
72947         var helpers_20 = helpers.lengthToRadians;
72948         var helpers_21 = helpers.lengthToDegrees;
72949         var helpers_22 = helpers.bearingToAzimuth;
72950         var helpers_23 = helpers.radiansToDegrees;
72951         var helpers_24 = helpers.degreesToRadians;
72952         var helpers_25 = helpers.convertLength;
72953         var helpers_26 = helpers.convertArea;
72954         var helpers_27 = helpers.isNumber;
72955         var helpers_28 = helpers.isObject;
72956         var helpers_29 = helpers.validateBBox;
72957         var helpers_30 = helpers.validateId;
72958         var helpers_31 = helpers.radians2degrees;
72959         var helpers_32 = helpers.degrees2radians;
72960         var helpers_33 = helpers.distanceToDegrees;
72961         var helpers_34 = helpers.distanceToRadians;
72962         var helpers_35 = helpers.radiansToDistance;
72963         var helpers_36 = helpers.bearingToAngle;
72964         var helpers_37 = helpers.convertDistance;
72965
72966         var invariant = createCommonjsModule(function (module, exports) {
72967         Object.defineProperty(exports, "__esModule", { value: true });
72968
72969         /**
72970          * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.
72971          *
72972          * @name getCoord
72973          * @param {Array<number>|Geometry<Point>|Feature<Point>} coord GeoJSON Point or an Array of numbers
72974          * @returns {Array<number>} coordinates
72975          * @example
72976          * var pt = turf.point([10, 10]);
72977          *
72978          * var coord = turf.getCoord(pt);
72979          * //= [10, 10]
72980          */
72981         function getCoord(coord) {
72982             if (!coord) {
72983                 throw new Error("coord is required");
72984             }
72985             if (!Array.isArray(coord)) {
72986                 if (coord.type === "Feature" && coord.geometry !== null && coord.geometry.type === "Point") {
72987                     return coord.geometry.coordinates;
72988                 }
72989                 if (coord.type === "Point") {
72990                     return coord.coordinates;
72991                 }
72992             }
72993             if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {
72994                 return coord;
72995             }
72996             throw new Error("coord must be GeoJSON Point or an Array of numbers");
72997         }
72998         exports.getCoord = getCoord;
72999         /**
73000          * Unwrap coordinates from a Feature, Geometry Object or an Array
73001          *
73002          * @name getCoords
73003          * @param {Array<any>|Geometry|Feature} coords Feature, Geometry Object or an Array
73004          * @returns {Array<any>} coordinates
73005          * @example
73006          * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);
73007          *
73008          * var coords = turf.getCoords(poly);
73009          * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]
73010          */
73011         function getCoords(coords) {
73012             if (Array.isArray(coords)) {
73013                 return coords;
73014             }
73015             // Feature
73016             if (coords.type === "Feature") {
73017                 if (coords.geometry !== null) {
73018                     return coords.geometry.coordinates;
73019                 }
73020             }
73021             else {
73022                 // Geometry
73023                 if (coords.coordinates) {
73024                     return coords.coordinates;
73025                 }
73026             }
73027             throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array");
73028         }
73029         exports.getCoords = getCoords;
73030         /**
73031          * Checks if coordinates contains a number
73032          *
73033          * @name containsNumber
73034          * @param {Array<any>} coordinates GeoJSON Coordinates
73035          * @returns {boolean} true if Array contains a number
73036          */
73037         function containsNumber(coordinates) {
73038             if (coordinates.length > 1 && helpers.isNumber(coordinates[0]) && helpers.isNumber(coordinates[1])) {
73039                 return true;
73040             }
73041             if (Array.isArray(coordinates[0]) && coordinates[0].length) {
73042                 return containsNumber(coordinates[0]);
73043             }
73044             throw new Error("coordinates must only contain numbers");
73045         }
73046         exports.containsNumber = containsNumber;
73047         /**
73048          * Enforce expectations about types of GeoJSON objects for Turf.
73049          *
73050          * @name geojsonType
73051          * @param {GeoJSON} value any GeoJSON object
73052          * @param {string} type expected GeoJSON type
73053          * @param {string} name name of calling function
73054          * @throws {Error} if value is not the expected type.
73055          */
73056         function geojsonType(value, type, name) {
73057             if (!type || !name) {
73058                 throw new Error("type and name required");
73059             }
73060             if (!value || value.type !== type) {
73061                 throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + value.type);
73062             }
73063         }
73064         exports.geojsonType = geojsonType;
73065         /**
73066          * Enforce expectations about types of {@link Feature} inputs for Turf.
73067          * Internally this uses {@link geojsonType} to judge geometry types.
73068          *
73069          * @name featureOf
73070          * @param {Feature} feature a feature with an expected geometry type
73071          * @param {string} type expected GeoJSON type
73072          * @param {string} name name of calling function
73073          * @throws {Error} error if value is not the expected type.
73074          */
73075         function featureOf(feature, type, name) {
73076             if (!feature) {
73077                 throw new Error("No feature passed");
73078             }
73079             if (!name) {
73080                 throw new Error(".featureOf() requires a name");
73081             }
73082             if (!feature || feature.type !== "Feature" || !feature.geometry) {
73083                 throw new Error("Invalid input to " + name + ", Feature with geometry required");
73084             }
73085             if (!feature.geometry || feature.geometry.type !== type) {
73086                 throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
73087             }
73088         }
73089         exports.featureOf = featureOf;
73090         /**
73091          * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.
73092          * Internally this uses {@link geojsonType} to judge geometry types.
73093          *
73094          * @name collectionOf
73095          * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged
73096          * @param {string} type expected GeoJSON type
73097          * @param {string} name name of calling function
73098          * @throws {Error} if value is not the expected type.
73099          */
73100         function collectionOf(featureCollection, type, name) {
73101             if (!featureCollection) {
73102                 throw new Error("No featureCollection passed");
73103             }
73104             if (!name) {
73105                 throw new Error(".collectionOf() requires a name");
73106             }
73107             if (!featureCollection || featureCollection.type !== "FeatureCollection") {
73108                 throw new Error("Invalid input to " + name + ", FeatureCollection required");
73109             }
73110             for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {
73111                 var feature = _a[_i];
73112                 if (!feature || feature.type !== "Feature" || !feature.geometry) {
73113                     throw new Error("Invalid input to " + name + ", Feature with geometry required");
73114                 }
73115                 if (!feature.geometry || feature.geometry.type !== type) {
73116                     throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
73117                 }
73118             }
73119         }
73120         exports.collectionOf = collectionOf;
73121         /**
73122          * Get Geometry from Feature or Geometry Object
73123          *
73124          * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object
73125          * @returns {Geometry|null} GeoJSON Geometry Object
73126          * @throws {Error} if geojson is not a Feature or Geometry Object
73127          * @example
73128          * var point = {
73129          *   "type": "Feature",
73130          *   "properties": {},
73131          *   "geometry": {
73132          *     "type": "Point",
73133          *     "coordinates": [110, 40]
73134          *   }
73135          * }
73136          * var geom = turf.getGeom(point)
73137          * //={"type": "Point", "coordinates": [110, 40]}
73138          */
73139         function getGeom(geojson) {
73140             if (geojson.type === "Feature") {
73141                 return geojson.geometry;
73142             }
73143             return geojson;
73144         }
73145         exports.getGeom = getGeom;
73146         /**
73147          * Get GeoJSON object's type, Geometry type is prioritize.
73148          *
73149          * @param {GeoJSON} geojson GeoJSON object
73150          * @param {string} [name="geojson"] name of the variable to display in error message
73151          * @returns {string} GeoJSON type
73152          * @example
73153          * var point = {
73154          *   "type": "Feature",
73155          *   "properties": {},
73156          *   "geometry": {
73157          *     "type": "Point",
73158          *     "coordinates": [110, 40]
73159          *   }
73160          * }
73161          * var geom = turf.getType(point)
73162          * //="Point"
73163          */
73164         function getType(geojson, name) {
73165             if (geojson.type === "FeatureCollection") {
73166                 return "FeatureCollection";
73167             }
73168             if (geojson.type === "GeometryCollection") {
73169                 return "GeometryCollection";
73170             }
73171             if (geojson.type === "Feature" && geojson.geometry !== null) {
73172                 return geojson.geometry.type;
73173             }
73174             return geojson.type;
73175         }
73176         exports.getType = getType;
73177         });
73178
73179         unwrapExports(invariant);
73180         var invariant_1 = invariant.getCoord;
73181         var invariant_2 = invariant.getCoords;
73182         var invariant_3 = invariant.containsNumber;
73183         var invariant_4 = invariant.geojsonType;
73184         var invariant_5 = invariant.featureOf;
73185         var invariant_6 = invariant.collectionOf;
73186         var invariant_7 = invariant.getGeom;
73187         var invariant_8 = invariant.getType;
73188
73189         var lineclip_1$1 = lineclip$1;
73190         var default_1$1 = lineclip$1;
73191
73192         lineclip$1.polyline = lineclip$1;
73193         lineclip$1.polygon = polygonclip$1;
73194
73195
73196         // Cohen-Sutherland line clippign algorithm, adapted to efficiently
73197         // handle polylines rather than just segments
73198
73199         function lineclip$1(points, bbox, result) {
73200
73201             var len = points.length,
73202                 codeA = bitCode$1(points[0], bbox),
73203                 part = [],
73204                 i, a, b, codeB, lastCode;
73205
73206             if (!result) { result = []; }
73207
73208             for (i = 1; i < len; i++) {
73209                 a = points[i - 1];
73210                 b = points[i];
73211                 codeB = lastCode = bitCode$1(b, bbox);
73212
73213                 while (true) {
73214
73215                     if (!(codeA | codeB)) { // accept
73216                         part.push(a);
73217
73218                         if (codeB !== lastCode) { // segment went outside
73219                             part.push(b);
73220
73221                             if (i < len - 1) { // start a new line
73222                                 result.push(part);
73223                                 part = [];
73224                             }
73225                         } else if (i === len - 1) {
73226                             part.push(b);
73227                         }
73228                         break;
73229
73230                     } else if (codeA & codeB) { // trivial reject
73231                         break;
73232
73233                     } else if (codeA) { // a outside, intersect with clip edge
73234                         a = intersect$2(a, b, codeA, bbox);
73235                         codeA = bitCode$1(a, bbox);
73236
73237                     } else { // b outside
73238                         b = intersect$2(a, b, codeB, bbox);
73239                         codeB = bitCode$1(b, bbox);
73240                     }
73241                 }
73242
73243                 codeA = lastCode;
73244             }
73245
73246             if (part.length) { result.push(part); }
73247
73248             return result;
73249         }
73250
73251         // Sutherland-Hodgeman polygon clipping algorithm
73252
73253         function polygonclip$1(points, bbox) {
73254
73255             var result, edge, prev, prevInside, i, p, inside;
73256
73257             // clip against each side of the clip rectangle
73258             for (edge = 1; edge <= 8; edge *= 2) {
73259                 result = [];
73260                 prev = points[points.length - 1];
73261                 prevInside = !(bitCode$1(prev, bbox) & edge);
73262
73263                 for (i = 0; i < points.length; i++) {
73264                     p = points[i];
73265                     inside = !(bitCode$1(p, bbox) & edge);
73266
73267                     // if segment goes through the clip window, add an intersection
73268                     if (inside !== prevInside) { result.push(intersect$2(prev, p, edge, bbox)); }
73269
73270                     if (inside) { result.push(p); } // add a point if it's inside
73271
73272                     prev = p;
73273                     prevInside = inside;
73274                 }
73275
73276                 points = result;
73277
73278                 if (!points.length) { break; }
73279             }
73280
73281             return result;
73282         }
73283
73284         // intersect a segment against one of the 4 lines that make up the bbox
73285
73286         function intersect$2(a, b, edge, bbox) {
73287             return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top
73288                    edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom
73289                    edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right
73290                    edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left
73291                    null;
73292         }
73293
73294         // bit code reflects the point position relative to the bbox:
73295
73296         //         left  mid  right
73297         //    top  1001  1000  1010
73298         //    mid  0001  0000  0010
73299         // bottom  0101  0100  0110
73300
73301         function bitCode$1(p, bbox) {
73302             var code = 0;
73303
73304             if (p[0] < bbox[0]) { code |= 1; } // left
73305             else if (p[0] > bbox[2]) { code |= 2; } // right
73306
73307             if (p[1] < bbox[1]) { code |= 4; } // bottom
73308             else if (p[1] > bbox[3]) { code |= 8; } // top
73309
73310             return code;
73311         }
73312         lineclip_1$1.default = default_1$1;
73313
73314         var bboxClip_1 = createCommonjsModule(function (module, exports) {
73315         var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
73316             if (mod && mod.__esModule) { return mod; }
73317             var result = {};
73318             if (mod != null) { for (var k in mod) { if (Object.hasOwnProperty.call(mod, k)) { result[k] = mod[k]; } } }
73319             result["default"] = mod;
73320             return result;
73321         };
73322         Object.defineProperty(exports, "__esModule", { value: true });
73323
73324
73325         var lineclip = __importStar(lineclip_1$1);
73326         /**
73327          * Takes a {@link Feature} and a bbox and clips the feature to the bbox using
73328          * [lineclip](https://github.com/mapbox/lineclip).
73329          * May result in degenerate edges when clipping Polygons.
73330          *
73331          * @name bboxClip
73332          * @param {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature feature to clip to the bbox
73333          * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order
73334          * @returns {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} clipped Feature
73335          * @example
73336          * var bbox = [0, 0, 10, 10];
73337          * var poly = turf.polygon([[[2, 2], [8, 4], [12, 8], [3, 7], [2, 2]]]);
73338          *
73339          * var clipped = turf.bboxClip(poly, bbox);
73340          *
73341          * //addToMap
73342          * var addToMap = [bbox, poly, clipped]
73343          */
73344         function bboxClip(feature, bbox) {
73345             var geom = invariant.getGeom(feature);
73346             var type = geom.type;
73347             var properties = feature.type === "Feature" ? feature.properties : {};
73348             var coords = geom.coordinates;
73349             switch (type) {
73350                 case "LineString":
73351                 case "MultiLineString":
73352                     var lines_1 = [];
73353                     if (type === "LineString") {
73354                         coords = [coords];
73355                     }
73356                     coords.forEach(function (line) {
73357                         lineclip.polyline(line, bbox, lines_1);
73358                     });
73359                     if (lines_1.length === 1) {
73360                         return helpers.lineString(lines_1[0], properties);
73361                     }
73362                     return helpers.multiLineString(lines_1, properties);
73363                 case "Polygon":
73364                     return helpers.polygon(clipPolygon(coords, bbox), properties);
73365                 case "MultiPolygon":
73366                     return helpers.multiPolygon(coords.map(function (poly) {
73367                         return clipPolygon(poly, bbox);
73368                     }), properties);
73369                 default:
73370                     throw new Error("geometry " + type + " not supported");
73371             }
73372         }
73373         exports.default = bboxClip;
73374         function clipPolygon(rings, bbox) {
73375             var outRings = [];
73376             for (var _i = 0, rings_1 = rings; _i < rings_1.length; _i++) {
73377                 var ring = rings_1[_i];
73378                 var clipped = lineclip.polygon(ring, bbox);
73379                 if (clipped.length > 0) {
73380                     if (clipped[0][0] !== clipped[clipped.length - 1][0] || clipped[0][1] !== clipped[clipped.length - 1][1]) {
73381                         clipped.push(clipped[0]);
73382                     }
73383                     if (clipped.length >= 4) {
73384                         outRings.push(clipped);
73385                     }
73386                 }
73387             }
73388             return outRings;
73389         }
73390         });
73391
73392         var turf_bboxClip = unwrapExports(bboxClip_1);
73393
73394         var fastJsonStableStringify = function (data, opts) {
73395             if (!opts) { opts = {}; }
73396             if (typeof opts === 'function') { opts = { cmp: opts }; }
73397             var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;
73398
73399             var cmp = opts.cmp && (function (f) {
73400                 return function (node) {
73401                     return function (a, b) {
73402                         var aobj = { key: a, value: node[a] };
73403                         var bobj = { key: b, value: node[b] };
73404                         return f(aobj, bobj);
73405                     };
73406                 };
73407             })(opts.cmp);
73408
73409             var seen = [];
73410             return (function stringify (node) {
73411                 if (node && node.toJSON && typeof node.toJSON === 'function') {
73412                     node = node.toJSON();
73413                 }
73414
73415                 if (node === undefined) { return; }
73416                 if (typeof node == 'number') { return isFinite(node) ? '' + node : 'null'; }
73417                 if (typeof node !== 'object') { return JSON.stringify(node); }
73418
73419                 var i, out;
73420                 if (Array.isArray(node)) {
73421                     out = '[';
73422                     for (i = 0; i < node.length; i++) {
73423                         if (i) { out += ','; }
73424                         out += stringify(node[i]) || 'null';
73425                     }
73426                     return out + ']';
73427                 }
73428
73429                 if (node === null) { return 'null'; }
73430
73431                 if (seen.indexOf(node) !== -1) {
73432                     if (cycles) { return JSON.stringify('__cycle__'); }
73433                     throw new TypeError('Converting circular structure to JSON');
73434                 }
73435
73436                 var seenIndex = seen.push(node) - 1;
73437                 var keys = Object.keys(node).sort(cmp && cmp(node));
73438                 out = '';
73439                 for (i = 0; i < keys.length; i++) {
73440                     var key = keys[i];
73441                     var value = stringify(node[key]);
73442
73443                     if (!value) { continue; }
73444                     if (out) { out += ','; }
73445                     out += JSON.stringify(key) + ':' + value;
73446                 }
73447                 seen.splice(seenIndex, 1);
73448                 return '{' + out + '}';
73449             })(data);
73450         };
73451
73452         var martinez_umd = createCommonjsModule(function (module, exports) {
73453         /**
73454          * martinez v0.5.0
73455          * Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor
73456          *
73457          * @author Alex Milevski <info@w8r.name>
73458          * @license MIT
73459          * @preserve
73460          */
73461
73462         (function (global, factory) {
73463            factory(exports) ;
73464         }(commonjsGlobal, (function (exports) {
73465           function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; }
73466
73467           var SplayTree = function SplayTree(compare, noDuplicates) {
73468             if ( compare === void 0 ) { compare = DEFAULT_COMPARE; }
73469             if ( noDuplicates === void 0 ) { noDuplicates = false; }
73470
73471             this._compare = compare;
73472             this._root = null;
73473             this._size = 0;
73474             this._noDuplicates = !!noDuplicates;
73475           };
73476
73477           var prototypeAccessors = { size: { configurable: true } };
73478
73479
73480           SplayTree.prototype.rotateLeft = function rotateLeft (x) {
73481             var y = x.right;
73482             if (y) {
73483               x.right = y.left;
73484               if (y.left) { y.left.parent = x; }
73485               y.parent = x.parent;
73486             }
73487
73488             if (!x.parent)              { this._root = y; }
73489             else if (x === x.parent.left) { x.parent.left = y; }
73490             else                        { x.parent.right = y; }
73491             if (y) { y.left = x; }
73492             x.parent = y;
73493           };
73494
73495
73496           SplayTree.prototype.rotateRight = function rotateRight (x) {
73497             var y = x.left;
73498             if (y) {
73499               x.left = y.right;
73500               if (y.right) { y.right.parent = x; }
73501               y.parent = x.parent;
73502             }
73503
73504             if (!x.parent)             { this._root = y; }
73505             else if(x === x.parent.left) { x.parent.left = y; }
73506             else                       { x.parent.right = y; }
73507             if (y) { y.right = x; }
73508             x.parent = y;
73509           };
73510
73511
73512           SplayTree.prototype._splay = function _splay (x) {
73513               var this$1 = this;
73514
73515             while (x.parent) {
73516               var p = x.parent;
73517               if (!p.parent) {
73518                 if (p.left === x) { this$1.rotateRight(p); }
73519                 else            { this$1.rotateLeft(p); }
73520               } else if (p.left === x && p.parent.left === p) {
73521                 this$1.rotateRight(p.parent);
73522                 this$1.rotateRight(p);
73523               } else if (p.right === x && p.parent.right === p) {
73524                 this$1.rotateLeft(p.parent);
73525                 this$1.rotateLeft(p);
73526               } else if (p.left === x && p.parent.right === p) {
73527                 this$1.rotateRight(p);
73528                 this$1.rotateLeft(p);
73529               } else {
73530                 this$1.rotateLeft(p);
73531                 this$1.rotateRight(p);
73532               }
73533             }
73534           };
73535
73536
73537           SplayTree.prototype.splay = function splay (x) {
73538               var this$1 = this;
73539
73540             var p, gp, ggp, l, r;
73541
73542             while (x.parent) {
73543               p = x.parent;
73544               gp = p.parent;
73545
73546               if (gp && gp.parent) {
73547                 ggp = gp.parent;
73548                 if (ggp.left === gp) { ggp.left= x; }
73549                 else               { ggp.right = x; }
73550                 x.parent = ggp;
73551               } else {
73552                 x.parent = null;
73553                 this$1._root = x;
73554               }
73555
73556               l = x.left; r = x.right;
73557
73558               if (x === p.left) { // left
73559                 if (gp) {
73560                   if (gp.left === p) {
73561                     /* zig-zig */
73562                     if (p.right) {
73563                       gp.left = p.right;
73564                       gp.left.parent = gp;
73565                     } else { gp.left = null; }
73566
73567                     p.right = gp;
73568                     gp.parent = p;
73569                   } else {
73570                     /* zig-zag */
73571                     if (l) {
73572                       gp.right = l;
73573                       l.parent = gp;
73574                     } else { gp.right = null; }
73575
73576                     x.left  = gp;
73577                     gp.parent = x;
73578                   }
73579                 }
73580                 if (r) {
73581                   p.left = r;
73582                   r.parent = p;
73583                 } else { p.left = null; }
73584
73585                 x.right= p;
73586                 p.parent = x;
73587               } else { // right
73588                 if (gp) {
73589                   if (gp.right === p) {
73590                     /* zig-zig */
73591                     if (p.left) {
73592                       gp.right = p.left;
73593                       gp.right.parent = gp;
73594                     } else { gp.right = null; }
73595
73596                     p.left = gp;
73597                     gp.parent = p;
73598                   } else {
73599                     /* zig-zag */
73600                     if (r) {
73601                       gp.left = r;
73602                       r.parent = gp;
73603                     } else { gp.left = null; }
73604
73605                     x.right = gp;
73606                     gp.parent = x;
73607                   }
73608                 }
73609                 if (l) {
73610                   p.right = l;
73611                   l.parent = p;
73612                 } else { p.right = null; }
73613
73614                 x.left = p;
73615                 p.parent = x;
73616               }
73617             }
73618           };
73619
73620
73621           SplayTree.prototype.replace = function replace (u, v) {
73622             if (!u.parent) { this._root = v; }
73623             else if (u === u.parent.left) { u.parent.left = v; }
73624             else { u.parent.right = v; }
73625             if (v) { v.parent = u.parent; }
73626           };
73627
73628
73629           SplayTree.prototype.minNode = function minNode (u) {
73630               if ( u === void 0 ) { u = this._root; }
73631
73632             if (u) { while (u.left) { u = u.left; } }
73633             return u;
73634           };
73635
73636
73637           SplayTree.prototype.maxNode = function maxNode (u) {
73638               if ( u === void 0 ) { u = this._root; }
73639
73640             if (u) { while (u.right) { u = u.right; } }
73641             return u;
73642           };
73643
73644
73645           SplayTree.prototype.insert = function insert (key, data) {
73646             var z = this._root;
73647             var p = null;
73648             var comp = this._compare;
73649             var cmp;
73650
73651             if (this._noDuplicates) {
73652               while (z) {
73653                 p = z;
73654                 cmp = comp(z.key, key);
73655                 if (cmp === 0) { return; }
73656                 else if (comp(z.key, key) < 0) { z = z.right; }
73657                 else { z = z.left; }
73658               }
73659             } else {
73660               while (z) {
73661                 p = z;
73662                 if (comp(z.key, key) < 0) { z = z.right; }
73663                 else { z = z.left; }
73664               }
73665             }
73666
73667             z = { key: key, data: data, left: null, right: null, parent: p };
73668
73669             if (!p)                        { this._root = z; }
73670             else if (comp(p.key, z.key) < 0) { p.right = z; }
73671             else                           { p.left= z; }
73672
73673             this.splay(z);
73674             this._size++;
73675             return z;
73676           };
73677
73678
73679           SplayTree.prototype.find = function find (key) {
73680             var z  = this._root;
73681             var comp = this._compare;
73682             while (z) {
73683               var cmp = comp(z.key, key);
73684               if    (cmp < 0) { z = z.right; }
73685               else if (cmp > 0) { z = z.left; }
73686               else            { return z; }
73687             }
73688             return null;
73689           };
73690
73691           /**
73692            * Whether the tree contains a node with the given key
73693            * @param{Key} key
73694            * @return {boolean} true/false
73695            */
73696           SplayTree.prototype.contains = function contains (key) {
73697             var node     = this._root;
73698             var comparator = this._compare;
73699             while (node){
73700               var cmp = comparator(key, node.key);
73701               if    (cmp === 0) { return true; }
73702               else if (cmp < 0) { node = node.left; }
73703               else              { node = node.right; }
73704             }
73705
73706             return false;
73707           };
73708
73709
73710           SplayTree.prototype.remove = function remove (key) {
73711             var z = this.find(key);
73712
73713             if (!z) { return false; }
73714
73715             this.splay(z);
73716
73717             if (!z.left) { this.replace(z, z.right); }
73718             else if (!z.right) { this.replace(z, z.left); }
73719             else {
73720               var y = this.minNode(z.right);
73721               if (y.parent !== z) {
73722                 this.replace(y, y.right);
73723                 y.right = z.right;
73724                 y.right.parent = y;
73725               }
73726               this.replace(z, y);
73727               y.left = z.left;
73728               y.left.parent = y;
73729             }
73730
73731             this._size--;
73732             return true;
73733           };
73734
73735
73736           SplayTree.prototype.removeNode = function removeNode (z) {
73737             if (!z) { return false; }
73738
73739             this.splay(z);
73740
73741             if (!z.left) { this.replace(z, z.right); }
73742             else if (!z.right) { this.replace(z, z.left); }
73743             else {
73744               var y = this.minNode(z.right);
73745               if (y.parent !== z) {
73746                 this.replace(y, y.right);
73747                 y.right = z.right;
73748                 y.right.parent = y;
73749               }
73750               this.replace(z, y);
73751               y.left = z.left;
73752               y.left.parent = y;
73753             }
73754
73755             this._size--;
73756             return true;
73757           };
73758
73759
73760           SplayTree.prototype.erase = function erase (key) {
73761             var z = this.find(key);
73762             if (!z) { return; }
73763
73764             this.splay(z);
73765
73766             var s = z.left;
73767             var t = z.right;
73768
73769             var sMax = null;
73770             if (s) {
73771               s.parent = null;
73772               sMax = this.maxNode(s);
73773               this.splay(sMax);
73774               this._root = sMax;
73775             }
73776             if (t) {
73777               if (s) { sMax.right = t; }
73778               else { this._root = t; }
73779               t.parent = sMax;
73780             }
73781
73782             this._size--;
73783           };
73784
73785           /**
73786            * Removes and returns the node with smallest key
73787            * @return {?Node}
73788            */
73789           SplayTree.prototype.pop = function pop () {
73790             var node = this._root, returnValue = null;
73791             if (node) {
73792               while (node.left) { node = node.left; }
73793               returnValue = { key: node.key, data: node.data };
73794               this.remove(node.key);
73795             }
73796             return returnValue;
73797           };
73798
73799
73800           /* eslint-disable class-methods-use-this */
73801
73802           /**
73803            * Successor node
73804            * @param{Node} node
73805            * @return {?Node}
73806            */
73807           SplayTree.prototype.next = function next (node) {
73808             var successor = node;
73809             if (successor) {
73810               if (successor.right) {
73811                 successor = successor.right;
73812                 while (successor && successor.left) { successor = successor.left; }
73813               } else {
73814                 successor = node.parent;
73815                 while (successor && successor.right === node) {
73816                   node = successor; successor = successor.parent;
73817                 }
73818               }
73819             }
73820             return successor;
73821           };
73822
73823
73824           /**
73825            * Predecessor node
73826            * @param{Node} node
73827            * @return {?Node}
73828            */
73829           SplayTree.prototype.prev = function prev (node) {
73830             var predecessor = node;
73831             if (predecessor) {
73832               if (predecessor.left) {
73833                 predecessor = predecessor.left;
73834                 while (predecessor && predecessor.right) { predecessor = predecessor.right; }
73835               } else {
73836                 predecessor = node.parent;
73837                 while (predecessor && predecessor.left === node) {
73838                   node = predecessor;
73839                   predecessor = predecessor.parent;
73840                 }
73841               }
73842             }
73843             return predecessor;
73844           };
73845           /* eslint-enable class-methods-use-this */
73846
73847
73848           /**
73849            * @param{forEachCallback} callback
73850            * @return {SplayTree}
73851            */
73852           SplayTree.prototype.forEach = function forEach (callback) {
73853             var current = this._root;
73854             var s = [], done = false, i = 0;
73855
73856             while (!done) {
73857               // Reach the left most Node of the current Node
73858               if (current) {
73859                 // Place pointer to a tree node on the stack
73860                 // before traversing the node's left subtree
73861                 s.push(current);
73862                 current = current.left;
73863               } else {
73864                 // BackTrack from the empty subtree and visit the Node
73865                 // at the top of the stack; however, if the stack is
73866                 // empty you are done
73867                 if (s.length > 0) {
73868                   current = s.pop();
73869                   callback(current, i++);
73870
73871                   // We have visited the node and its left
73872                   // subtree. Now, it's right subtree's turn
73873                   current = current.right;
73874                 } else { done = true; }
73875               }
73876             }
73877             return this;
73878           };
73879
73880
73881           /**
73882            * Walk key range from `low` to `high`. Stops if `fn` returns a value.
73883            * @param{Key}    low
73884            * @param{Key}    high
73885            * @param{Function} fn
73886            * @param{*?}     ctx
73887            * @return {SplayTree}
73888            */
73889           SplayTree.prototype.range = function range (low, high, fn, ctx) {
73890               var this$1 = this;
73891
73892             var Q = [];
73893             var compare = this._compare;
73894             var node = this._root, cmp;
73895
73896             while (Q.length !== 0 || node) {
73897               if (node) {
73898                 Q.push(node);
73899                 node = node.left;
73900               } else {
73901                 node = Q.pop();
73902                 cmp = compare(node.key, high);
73903                 if (cmp > 0) {
73904                   break;
73905                 } else if (compare(node.key, low) >= 0) {
73906                   if (fn.call(ctx, node)) { return this$1; } // stop if smth is returned
73907                 }
73908                 node = node.right;
73909               }
73910             }
73911             return this;
73912           };
73913
73914           /**
73915            * Returns all keys in order
73916            * @return {Array<Key>}
73917            */
73918           SplayTree.prototype.keys = function keys () {
73919             var current = this._root;
73920             var s = [], r = [], done = false;
73921
73922             while (!done) {
73923               if (current) {
73924                 s.push(current);
73925                 current = current.left;
73926               } else {
73927                 if (s.length > 0) {
73928                   current = s.pop();
73929                   r.push(current.key);
73930                   current = current.right;
73931                 } else { done = true; }
73932               }
73933             }
73934             return r;
73935           };
73936
73937
73938           /**
73939            * Returns `data` fields of all nodes in order.
73940            * @return {Array<Value>}
73941            */
73942           SplayTree.prototype.values = function values () {
73943             var current = this._root;
73944             var s = [], r = [], done = false;
73945
73946             while (!done) {
73947               if (current) {
73948                 s.push(current);
73949                 current = current.left;
73950               } else {
73951                 if (s.length > 0) {
73952                   current = s.pop();
73953                   r.push(current.data);
73954                   current = current.right;
73955                 } else { done = true; }
73956               }
73957             }
73958             return r;
73959           };
73960
73961
73962           /**
73963            * Returns node at given index
73964            * @param{number} index
73965            * @return {?Node}
73966            */
73967           SplayTree.prototype.at = function at (index) {
73968             // removed after a consideration, more misleading than useful
73969             // index = index % this.size;
73970             // if (index < 0) index = this.size - index;
73971
73972             var current = this._root;
73973             var s = [], done = false, i = 0;
73974
73975             while (!done) {
73976               if (current) {
73977                 s.push(current);
73978                 current = current.left;
73979               } else {
73980                 if (s.length > 0) {
73981                   current = s.pop();
73982                   if (i === index) { return current; }
73983                   i++;
73984                   current = current.right;
73985                 } else { done = true; }
73986               }
73987             }
73988             return null;
73989           };
73990
73991           /**
73992            * Bulk-load items. Both array have to be same size
73993            * @param{Array<Key>}  keys
73994            * @param{Array<Value>}[values]
73995            * @param{Boolean}     [presort=false] Pre-sort keys and values, using
73996            *                                       tree's comparator. Sorting is done
73997            *                                       in-place
73998            * @return {AVLTree}
73999            */
74000           SplayTree.prototype.load = function load (keys, values, presort) {
74001               if ( keys === void 0 ) { keys = []; }
74002               if ( values === void 0 ) { values = []; }
74003               if ( presort === void 0 ) { presort = false; }
74004
74005             if (this._size !== 0) { throw new Error('bulk-load: tree is not empty'); }
74006             var size = keys.length;
74007             if (presort) { sort(keys, values, 0, size - 1, this._compare); }
74008             this._root = loadRecursive(null, keys, values, 0, size);
74009             this._size = size;
74010             return this;
74011           };
74012
74013
74014           SplayTree.prototype.min = function min () {
74015             var node = this.minNode(this._root);
74016             if (node) { return node.key; }
74017             else    { return null; }
74018           };
74019
74020
74021           SplayTree.prototype.max = function max () {
74022             var node = this.maxNode(this._root);
74023             if (node) { return node.key; }
74024             else    { return null; }
74025           };
74026
74027           SplayTree.prototype.isEmpty = function isEmpty () { return this._root === null; };
74028           prototypeAccessors.size.get = function () { return this._size; };
74029
74030
74031           /**
74032            * Create a tree and load it with items
74033            * @param{Array<Key>}        keys
74034            * @param{Array<Value>?}      [values]
74035
74036            * @param{Function?}          [comparator]
74037            * @param{Boolean?}           [presort=false] Pre-sort keys and values, using
74038            *                                             tree's comparator. Sorting is done
74039            *                                             in-place
74040            * @param{Boolean?}           [noDuplicates=false] Allow duplicates
74041            * @return {SplayTree}
74042            */
74043           SplayTree.createTree = function createTree (keys, values, comparator, presort, noDuplicates) {
74044             return new SplayTree(comparator, noDuplicates).load(keys, values, presort);
74045           };
74046
74047           Object.defineProperties( SplayTree.prototype, prototypeAccessors );
74048
74049
74050           function loadRecursive (parent, keys, values, start, end) {
74051             var size = end - start;
74052             if (size > 0) {
74053               var middle = start + Math.floor(size / 2);
74054               var key    = keys[middle];
74055               var data   = values[middle];
74056               var node   = { key: key, data: data, parent: parent };
74057               node.left    = loadRecursive(node, keys, values, start, middle);
74058               node.right   = loadRecursive(node, keys, values, middle + 1, end);
74059               return node;
74060             }
74061             return null;
74062           }
74063
74064
74065           function sort(keys, values, left, right, compare) {
74066             if (left >= right) { return; }
74067
74068             var pivot = keys[(left + right) >> 1];
74069             var i = left - 1;
74070             var j = right + 1;
74071
74072             while (true) {
74073               do { i++; } while (compare(keys[i], pivot) < 0);
74074               do { j--; } while (compare(keys[j], pivot) > 0);
74075               if (i >= j) { break; }
74076
74077               var tmp = keys[i];
74078               keys[i] = keys[j];
74079               keys[j] = tmp;
74080
74081               tmp = values[i];
74082               values[i] = values[j];
74083               values[j] = tmp;
74084             }
74085
74086             sort(keys, values,  left,     j, compare);
74087             sort(keys, values, j + 1, right, compare);
74088           }
74089
74090           var NORMAL               = 0;
74091           var NON_CONTRIBUTING     = 1;
74092           var SAME_TRANSITION      = 2;
74093           var DIFFERENT_TRANSITION = 3;
74094
74095           var INTERSECTION = 0;
74096           var UNION        = 1;
74097           var DIFFERENCE   = 2;
74098           var XOR          = 3;
74099
74100           /**
74101            * @param  {SweepEvent} event
74102            * @param  {SweepEvent} prev
74103            * @param  {Operation} operation
74104            */
74105           function computeFields (event, prev, operation) {
74106             // compute inOut and otherInOut fields
74107             if (prev === null) {
74108               event.inOut      = false;
74109               event.otherInOut = true;
74110
74111             // previous line segment in sweepline belongs to the same polygon
74112             } else {
74113               if (event.isSubject === prev.isSubject) {
74114                 event.inOut      = !prev.inOut;
74115                 event.otherInOut = prev.otherInOut;
74116
74117               // previous line segment in sweepline belongs to the clipping polygon
74118               } else {
74119                 event.inOut      = !prev.otherInOut;
74120                 event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut;
74121               }
74122
74123               // compute prevInResult field
74124               if (prev) {
74125                 event.prevInResult = (!inResult(prev, operation) || prev.isVertical())
74126                   ? prev.prevInResult : prev;
74127               }
74128             }
74129
74130             // check if the line segment belongs to the Boolean operation
74131             event.inResult = inResult(event, operation);
74132           }
74133
74134
74135           /* eslint-disable indent */
74136           function inResult(event, operation) {
74137             switch (event.type) {
74138               case NORMAL:
74139                 switch (operation) {
74140                   case INTERSECTION:
74141                     return !event.otherInOut;
74142                   case UNION:
74143                     return event.otherInOut;
74144                   case DIFFERENCE:
74145                     // return (event.isSubject && !event.otherInOut) ||
74146                     //         (!event.isSubject && event.otherInOut);
74147                     return (event.isSubject && event.otherInOut) ||
74148                             (!event.isSubject && !event.otherInOut);
74149                   case XOR:
74150                     return true;
74151                 }
74152                 break;
74153               case SAME_TRANSITION:
74154                 return operation === INTERSECTION || operation === UNION;
74155               case DIFFERENT_TRANSITION:
74156                 return operation === DIFFERENCE;
74157               case NON_CONTRIBUTING:
74158                 return false;
74159             }
74160             return false;
74161           }
74162           /* eslint-enable indent */
74163
74164           var SweepEvent = function SweepEvent (point, left, otherEvent, isSubject, edgeType) {
74165
74166             /**
74167              * Is left endpoint?
74168              * @type {Boolean}
74169              */
74170             this.left = left;
74171
74172             /**
74173              * @type {Array.<Number>}
74174              */
74175             this.point = point;
74176
74177             /**
74178              * Other edge reference
74179              * @type {SweepEvent}
74180              */
74181             this.otherEvent = otherEvent;
74182
74183             /**
74184              * Belongs to source or clipping polygon
74185              * @type {Boolean}
74186              */
74187             this.isSubject = isSubject;
74188
74189             /**
74190              * Edge contribution type
74191              * @type {Number}
74192              */
74193             this.type = edgeType || NORMAL;
74194
74195
74196             /**
74197              * In-out transition for the sweepline crossing polygon
74198              * @type {Boolean}
74199              */
74200             this.inOut = false;
74201
74202
74203             /**
74204              * @type {Boolean}
74205              */
74206             this.otherInOut = false;
74207
74208             /**
74209              * Previous event in result?
74210              * @type {SweepEvent}
74211              */
74212             this.prevInResult = null;
74213
74214             /**
74215              * Does event belong to result?
74216              * @type {Boolean}
74217              */
74218             this.inResult = false;
74219
74220
74221             // connection step
74222
74223             /**
74224              * @type {Boolean}
74225              */
74226             this.resultInOut = false;
74227
74228             this.isExteriorRing = true;
74229           };
74230
74231
74232           /**
74233            * @param{Array.<Number>}p
74234            * @return {Boolean}
74235            */
74236           SweepEvent.prototype.isBelow = function isBelow (p) {
74237             var p0 = this.point, p1 = this.otherEvent.point;
74238             return this.left
74239               ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0
74240               // signedArea(this.point, this.otherEvent.point, p) > 0 :
74241               : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0;
74242               //signedArea(this.otherEvent.point, this.point, p) > 0;
74243           };
74244
74245
74246           /**
74247            * @param{Array.<Number>}p
74248            * @return {Boolean}
74249            */
74250           SweepEvent.prototype.isAbove = function isAbove (p) {
74251             return !this.isBelow(p);
74252           };
74253
74254
74255           /**
74256            * @return {Boolean}
74257            */
74258           SweepEvent.prototype.isVertical = function isVertical () {
74259             return this.point[0] === this.otherEvent.point[0];
74260           };
74261
74262
74263           SweepEvent.prototype.clone = function clone () {
74264             var copy = new SweepEvent(
74265               this.point, this.left, this.otherEvent, this.isSubject, this.type);
74266
74267             copy.inResult     = this.inResult;
74268             copy.prevInResult = this.prevInResult;
74269             copy.isExteriorRing = this.isExteriorRing;
74270             copy.inOut        = this.inOut;
74271             copy.otherInOut   = this.otherInOut;
74272
74273             return copy;
74274           };
74275
74276           function equals(p1, p2) {
74277             if (p1[0] === p2[0]) {
74278               if (p1[1] === p2[1]) {
74279                 return true;
74280               } else {
74281                 return false;
74282               }
74283             }
74284             return false;
74285           }
74286
74287           // const EPSILON = 1e-9;
74288           // const abs = Math.abs;
74289           // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164
74290           // Precision problem.
74291           //
74292           // module.exports = function equals(p1, p2) {
74293           //   return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON;
74294           // };
74295
74296           /**
74297            * Signed area of the triangle (p0, p1, p2)
74298            * @param  {Array.<Number>} p0
74299            * @param  {Array.<Number>} p1
74300            * @param  {Array.<Number>} p2
74301            * @return {Number}
74302            */
74303           function signedArea(p0, p1, p2) {
74304             return (p0[0] - p2[0]) * (p1[1] - p2[1]) - (p1[0] - p2[0]) * (p0[1] - p2[1]);
74305           }
74306
74307           /**
74308            * @param  {SweepEvent} e1
74309            * @param  {SweepEvent} e2
74310            * @return {Number}
74311            */
74312           function compareEvents(e1, e2) {
74313             var p1 = e1.point;
74314             var p2 = e2.point;
74315
74316             // Different x-coordinate
74317             if (p1[0] > p2[0]) { return 1; }
74318             if (p1[0] < p2[0]) { return -1; }
74319
74320             // Different points, but same x-coordinate
74321             // Event with lower y-coordinate is processed first
74322             if (p1[1] !== p2[1]) { return p1[1] > p2[1] ? 1 : -1; }
74323
74324             return specialCases(e1, e2, p1);
74325           }
74326
74327
74328           /* eslint-disable no-unused-vars */
74329           function specialCases(e1, e2, p1, p2) {
74330             // Same coordinates, but one is a left endpoint and the other is
74331             // a right endpoint. The right endpoint is processed first
74332             if (e1.left !== e2.left)
74333               { return e1.left ? 1 : -1; }
74334
74335             // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point;
74336             // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1])
74337             // Same coordinates, both events
74338             // are left endpoints or right endpoints.
74339             // not collinear
74340             if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) {
74341               // the event associate to the bottom segment is processed first
74342               return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1;
74343             }
74344
74345             return (!e1.isSubject && e2.isSubject) ? 1 : -1;
74346           }
74347           /* eslint-enable no-unused-vars */
74348
74349           /**
74350            * @param  {SweepEvent} se
74351            * @param  {Array.<Number>} p
74352            * @param  {Queue} queue
74353            * @return {Queue}
74354            */
74355           function divideSegment(se, p, queue)  {
74356             var r = new SweepEvent(p, false, se,            se.isSubject);
74357             var l = new SweepEvent(p, true,  se.otherEvent, se.isSubject);
74358
74359             /* eslint-disable no-console */
74360             if (equals(se.point, se.otherEvent.point)) {
74361
74362               console.warn('what is that, a collapsed segment?', se);
74363             }
74364             /* eslint-enable no-console */
74365
74366             r.contourId = l.contourId = se.contourId;
74367
74368             // avoid a rounding error. The left event would be processed after the right event
74369             if (compareEvents(l, se.otherEvent) > 0) {
74370               se.otherEvent.left = true;
74371               l.left = false;
74372             }
74373
74374             // avoid a rounding error. The left event would be processed after the right event
74375             // if (compareEvents(se, r) > 0) {}
74376
74377             se.otherEvent.otherEvent = l;
74378             se.otherEvent = r;
74379
74380             queue.push(l);
74381             queue.push(r);
74382
74383             return queue;
74384           }
74385
74386           //const EPS = 1e-9;
74387
74388           /**
74389            * Finds the magnitude of the cross product of two vectors (if we pretend
74390            * they're in three dimensions)
74391            *
74392            * @param {Object} a First vector
74393            * @param {Object} b Second vector
74394            * @private
74395            * @returns {Number} The magnitude of the cross product
74396            */
74397           function crossProduct(a, b) {
74398             return (a[0] * b[1]) - (a[1] * b[0]);
74399           }
74400
74401           /**
74402            * Finds the dot product of two vectors.
74403            *
74404            * @param {Object} a First vector
74405            * @param {Object} b Second vector
74406            * @private
74407            * @returns {Number} The dot product
74408            */
74409           function dotProduct(a, b) {
74410             return (a[0] * b[0]) + (a[1] * b[1]);
74411           }
74412
74413           /**
74414            * Finds the intersection (if any) between two line segments a and b, given the
74415            * line segments' end points a1, a2 and b1, b2.
74416            *
74417            * This algorithm is based on Schneider and Eberly.
74418            * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf
74419            * Page 244.
74420            *
74421            * @param {Array.<Number>} a1 point of first line
74422            * @param {Array.<Number>} a2 point of first line
74423            * @param {Array.<Number>} b1 point of second line
74424            * @param {Array.<Number>} b2 point of second line
74425            * @param {Boolean=}       noEndpointTouch whether to skip single touchpoints
74426            *                                         (meaning connected segments) as
74427            *                                         intersections
74428            * @returns {Array.<Array.<Number>>|Null} If the lines intersect, the point of
74429            * intersection. If they overlap, the two end points of the overlapping segment.
74430            * Otherwise, null.
74431            */
74432           function intersection (a1, a2, b1, b2, noEndpointTouch) {
74433             // The algorithm expects our lines in the form P + sd, where P is a point,
74434             // s is on the interval [0, 1], and d is a vector.
74435             // We are passed two points. P can be the first point of each pair. The
74436             // vector, then, could be thought of as the distance (in x and y components)
74437             // from the first point to the second point.
74438             // So first, let's make our vectors:
74439             var va = [a2[0] - a1[0], a2[1] - a1[1]];
74440             var vb = [b2[0] - b1[0], b2[1] - b1[1]];
74441             // We also define a function to convert back to regular point form:
74442
74443             /* eslint-disable arrow-body-style */
74444
74445             function toPoint(p, s, d) {
74446               return [
74447                 p[0] + s * d[0],
74448                 p[1] + s * d[1]
74449               ];
74450             }
74451
74452             /* eslint-enable arrow-body-style */
74453
74454             // The rest is pretty much a straight port of the algorithm.
74455             var e = [b1[0] - a1[0], b1[1] - a1[1]];
74456             var kross    = crossProduct(va, vb);
74457             var sqrKross = kross * kross;
74458             var sqrLenA  = dotProduct(va, va);
74459             //const sqrLenB  = dotProduct(vb, vb);
74460
74461             // Check for line intersection. This works because of the properties of the
74462             // cross product -- specifically, two vectors are parallel if and only if the
74463             // cross product is the 0 vector. The full calculation involves relative error
74464             // to account for possible very small line segments. See Schneider & Eberly
74465             // for details.
74466             if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) {
74467               // If they're not parallel, then (because these are line segments) they
74468               // still might not actually intersect. This code checks that the
74469               // intersection point of the lines is actually on both line segments.
74470               var s = crossProduct(e, vb) / kross;
74471               if (s < 0 || s > 1) {
74472                 // not on line segment a
74473                 return null;
74474               }
74475               var t = crossProduct(e, va) / kross;
74476               if (t < 0 || t > 1) {
74477                 // not on line segment b
74478                 return null;
74479               }
74480               if (s === 0 || s === 1) {
74481                 // on an endpoint of line segment a
74482                 return noEndpointTouch ? null : [toPoint(a1, s, va)];
74483               }
74484               if (t === 0 || t === 1) {
74485                 // on an endpoint of line segment b
74486                 return noEndpointTouch ? null : [toPoint(b1, t, vb)];
74487               }
74488               return [toPoint(a1, s, va)];
74489             }
74490
74491             // If we've reached this point, then the lines are either parallel or the
74492             // same, but the segments could overlap partially or fully, or not at all.
74493             // So we need to find the overlap, if any. To do that, we can use e, which is
74494             // the (vector) difference between the two initial points. If this is parallel
74495             // with the line itself, then the two lines are the same line, and there will
74496             // be overlap.
74497             //const sqrLenE = dotProduct(e, e);
74498             kross = crossProduct(e, va);
74499             sqrKross = kross * kross;
74500
74501             if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) {
74502             // Lines are just parallel, not the same. No overlap.
74503               return null;
74504             }
74505
74506             var sa = dotProduct(va, e) / sqrLenA;
74507             var sb = sa + dotProduct(va, vb) / sqrLenA;
74508             var smin = Math.min(sa, sb);
74509             var smax = Math.max(sa, sb);
74510
74511             // this is, essentially, the FindIntersection acting on floats from
74512             // Schneider & Eberly, just inlined into this function.
74513             if (smin <= 1 && smax >= 0) {
74514
74515               // overlap on an end point
74516               if (smin === 1) {
74517                 return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)];
74518               }
74519
74520               if (smax === 0) {
74521                 return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)];
74522               }
74523
74524               if (noEndpointTouch && smin === 0 && smax === 1) { return null; }
74525
74526               // There's overlap on a segment -- two points of intersection. Return both.
74527               return [
74528                 toPoint(a1, smin > 0 ? smin : 0, va),
74529                 toPoint(a1, smax < 1 ? smax : 1, va)
74530               ];
74531             }
74532
74533             return null;
74534           }
74535
74536           /**
74537            * @param  {SweepEvent} se1
74538            * @param  {SweepEvent} se2
74539            * @param  {Queue}      queue
74540            * @return {Number}
74541            */
74542           function possibleIntersection (se1, se2, queue) {
74543             // that disallows self-intersecting polygons,
74544             // did cost us half a day, so I'll leave it
74545             // out of respect
74546             // if (se1.isSubject === se2.isSubject) return;
74547             var inter = intersection(
74548               se1.point, se1.otherEvent.point,
74549               se2.point, se2.otherEvent.point
74550             );
74551
74552             var nintersections = inter ? inter.length : 0;
74553             if (nintersections === 0) { return 0; } // no intersection
74554
74555             // the line segments intersect at an endpoint of both line segments
74556             if ((nintersections === 1) &&
74557                 (equals(se1.point, se2.point) ||
74558                  equals(se1.otherEvent.point, se2.otherEvent.point))) {
74559               return 0;
74560             }
74561
74562             if (nintersections === 2 && se1.isSubject === se2.isSubject) {
74563               // if(se1.contourId === se2.contourId){
74564               // console.warn('Edges of the same polygon overlap',
74565               //   se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point);
74566               // }
74567               //throw new Error('Edges of the same polygon overlap');
74568               return 0;
74569             }
74570
74571             // The line segments associated to se1 and se2 intersect
74572             if (nintersections === 1) {
74573
74574               // if the intersection point is not an endpoint of se1
74575               if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) {
74576                 divideSegment(se1, inter[0], queue);
74577               }
74578
74579               // if the intersection point is not an endpoint of se2
74580               if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) {
74581                 divideSegment(se2, inter[0], queue);
74582               }
74583               return 1;
74584             }
74585
74586             // The line segments associated to se1 and se2 overlap
74587             var events        = [];
74588             var leftCoincide  = false;
74589             var rightCoincide = false;
74590
74591             if (equals(se1.point, se2.point)) {
74592               leftCoincide = true; // linked
74593             } else if (compareEvents(se1, se2) === 1) {
74594               events.push(se2, se1);
74595             } else {
74596               events.push(se1, se2);
74597             }
74598
74599             if (equals(se1.otherEvent.point, se2.otherEvent.point)) {
74600               rightCoincide = true;
74601             } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) {
74602               events.push(se2.otherEvent, se1.otherEvent);
74603             } else {
74604               events.push(se1.otherEvent, se2.otherEvent);
74605             }
74606
74607             if ((leftCoincide && rightCoincide) || leftCoincide) {
74608               // both line segments are equal or share the left endpoint
74609               se2.type = NON_CONTRIBUTING;
74610               se1.type = (se2.inOut === se1.inOut)
74611                 ? SAME_TRANSITION : DIFFERENT_TRANSITION;
74612
74613               if (leftCoincide && !rightCoincide) {
74614                 // honestly no idea, but changing events selection from [2, 1]
74615                 // to [0, 1] fixes the overlapping self-intersecting polygons issue
74616                 divideSegment(events[1].otherEvent, events[0].point, queue);
74617               }
74618               return 2;
74619             }
74620
74621             // the line segments share the right endpoint
74622             if (rightCoincide) {
74623               divideSegment(events[0], events[1].point, queue);
74624               return 3;
74625             }
74626
74627             // no line segment includes totally the other one
74628             if (events[0] !== events[3].otherEvent) {
74629               divideSegment(events[0], events[1].point, queue);
74630               divideSegment(events[1], events[2].point, queue);
74631               return 3;
74632             }
74633
74634             // one line segment includes the other one
74635             divideSegment(events[0], events[1].point, queue);
74636             divideSegment(events[3].otherEvent, events[2].point, queue);
74637
74638             return 3;
74639           }
74640
74641           /**
74642            * @param  {SweepEvent} le1
74643            * @param  {SweepEvent} le2
74644            * @return {Number}
74645            */
74646           function compareSegments(le1, le2) {
74647             if (le1 === le2) { return 0; }
74648
74649             // Segments are not collinear
74650             if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 ||
74651               signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) {
74652
74653               // If they share their left endpoint use the right endpoint to sort
74654               if (equals(le1.point, le2.point)) { return le1.isBelow(le2.otherEvent.point) ? -1 : 1; }
74655
74656               // Different left endpoint: use the left endpoint to sort
74657               if (le1.point[0] === le2.point[0]) { return le1.point[1] < le2.point[1] ? -1 : 1; }
74658
74659               // has the line segment associated to e1 been inserted
74660               // into S after the line segment associated to e2 ?
74661               if (compareEvents(le1, le2) === 1) { return le2.isAbove(le1.point) ? -1 : 1; }
74662
74663               // The line segment associated to e2 has been inserted
74664               // into S after the line segment associated to e1
74665               return le1.isBelow(le2.point) ? -1 : 1;
74666             }
74667
74668             if (le1.isSubject === le2.isSubject) { // same polygon
74669               var p1 = le1.point, p2 = le2.point;
74670               if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) {
74671                 p1 = le1.otherEvent.point; p2 = le2.otherEvent.point;
74672                 if (p1[0] === p2[0] && p1[1] === p2[1]) { return 0; }
74673                 else { return le1.contourId > le2.contourId ? 1 : -1; }
74674               }
74675             } else { // Segments are collinear, but belong to separate polygons
74676               return le1.isSubject ? -1 : 1;
74677             }
74678
74679             return compareEvents(le1, le2) === 1 ? 1 : -1;
74680           }
74681
74682           function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) {
74683             var sweepLine = new SplayTree(compareSegments);
74684             var sortedEvents = [];
74685
74686             var rightbound = Math.min(sbbox[2], cbbox[2]);
74687
74688             var prev, next, begin;
74689
74690             while (eventQueue.length !== 0) {
74691               var event = eventQueue.pop();
74692               sortedEvents.push(event);
74693
74694               // optimization by bboxes for intersection and difference goes here
74695               if ((operation === INTERSECTION && event.point[0] > rightbound) ||
74696                   (operation === DIFFERENCE   && event.point[0] > sbbox[2])) {
74697                 break;
74698               }
74699
74700               if (event.left) {
74701                 next  = prev = sweepLine.insert(event);
74702                 begin = sweepLine.minNode();
74703
74704                 if (prev !== begin) { prev = sweepLine.prev(prev); }
74705                 else                { prev = null; }
74706
74707                 next = sweepLine.next(next);
74708
74709                 var prevEvent = prev ? prev.key : null;
74710                 var prevprevEvent = (void 0);
74711                 computeFields(event, prevEvent, operation);
74712                 if (next) {
74713                   if (possibleIntersection(event, next.key, eventQueue) === 2) {
74714                     computeFields(event, prevEvent, operation);
74715                     computeFields(event, next.key, operation);
74716                   }
74717                 }
74718
74719                 if (prev) {
74720                   if (possibleIntersection(prev.key, event, eventQueue) === 2) {
74721                     var prevprev = prev;
74722                     if (prevprev !== begin) { prevprev = sweepLine.prev(prevprev); }
74723                     else                    { prevprev = null; }
74724
74725                     prevprevEvent = prevprev ? prevprev.key : null;
74726                     computeFields(prevEvent, prevprevEvent, operation);
74727                     computeFields(event,     prevEvent,     operation);
74728                   }
74729                 }
74730               } else {
74731                 event = event.otherEvent;
74732                 next = prev = sweepLine.find(event);
74733
74734                 if (prev && next) {
74735
74736                   if (prev !== begin) { prev = sweepLine.prev(prev); }
74737                   else                { prev = null; }
74738
74739                   next = sweepLine.next(next);
74740                   sweepLine.remove(event);
74741
74742                   if (next && prev) {
74743                     possibleIntersection(prev.key, next.key, eventQueue);
74744                   }
74745                 }
74746               }
74747             }
74748             return sortedEvents;
74749           }
74750
74751           /**
74752            * @param  {Array.<SweepEvent>} sortedEvents
74753            * @return {Array.<SweepEvent>}
74754            */
74755           function orderEvents(sortedEvents) {
74756             var event, i, len, tmp;
74757             var resultEvents = [];
74758             for (i = 0, len = sortedEvents.length; i < len; i++) {
74759               event = sortedEvents[i];
74760               if ((event.left && event.inResult) ||
74761                 (!event.left && event.otherEvent.inResult)) {
74762                 resultEvents.push(event);
74763               }
74764             }
74765             // Due to overlapping edges the resultEvents array can be not wholly sorted
74766             var sorted = false;
74767             while (!sorted) {
74768               sorted = true;
74769               for (i = 0, len = resultEvents.length; i < len; i++) {
74770                 if ((i + 1) < len &&
74771                   compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) {
74772                   tmp = resultEvents[i];
74773                   resultEvents[i] = resultEvents[i + 1];
74774                   resultEvents[i + 1] = tmp;
74775                   sorted = false;
74776                 }
74777               }
74778             }
74779
74780
74781             for (i = 0, len = resultEvents.length; i < len; i++) {
74782               event = resultEvents[i];
74783               event.pos = i;
74784             }
74785
74786             // imagine, the right event is found in the beginning of the queue,
74787             // when his left counterpart is not marked yet
74788             for (i = 0, len = resultEvents.length; i < len; i++) {
74789               event = resultEvents[i];
74790               if (!event.left) {
74791                 tmp = event.pos;
74792                 event.pos = event.otherEvent.pos;
74793                 event.otherEvent.pos = tmp;
74794               }
74795             }
74796
74797             return resultEvents;
74798           }
74799
74800
74801           /**
74802            * @param  {Number} pos
74803            * @param  {Array.<SweepEvent>} resultEvents
74804            * @param  {Object>}    processed
74805            * @return {Number}
74806            */
74807           function nextPos(pos, resultEvents, processed, origIndex) {
74808             var p, p1;
74809             var newPos = pos + 1;
74810             var length = resultEvents.length;
74811
74812             p  = resultEvents[pos].point;
74813
74814             if (newPos < length)
74815               { p1 = resultEvents[newPos].point; }
74816
74817
74818             // while in range and not the current one by value
74819             while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) {
74820               if (!processed[newPos]) {
74821                 return newPos;
74822               } else   {
74823                 newPos++;
74824               }
74825               p1 = resultEvents[newPos].point;
74826             }
74827
74828             newPos = pos - 1;
74829
74830             while (processed[newPos] && newPos >= origIndex) {
74831               newPos--;
74832             }
74833             return newPos;
74834           }
74835
74836
74837           /**
74838            * @param  {Array.<SweepEvent>} sortedEvents
74839            * @return {Array.<*>} polygons
74840            */
74841           function connectEdges(sortedEvents, operation) {
74842             var i, len;
74843             var resultEvents = orderEvents(sortedEvents);
74844
74845             // "false"-filled array
74846             var processed = {};
74847             var result = [];
74848             var event;
74849
74850             for (i = 0, len = resultEvents.length; i < len; i++) {
74851               if (processed[i]) { continue; }
74852               var contour = [[]];
74853
74854               if (!resultEvents[i].isExteriorRing) {
74855                 if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length === 0) {
74856                   result.push(contour);
74857                 } else if (result.length === 0) {
74858                   result.push([[contour]]);
74859                 } else {
74860                   result[result.length - 1].push(contour[0]);
74861                 }
74862               } else if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length > 1) {
74863                 result[result.length - 1].push(contour[0]);
74864               } else {
74865                 result.push(contour);
74866               }
74867
74868               var ringId = result.length - 1;
74869               var pos = i;
74870
74871               var initial = resultEvents[i].point;
74872               contour[0].push(initial);
74873
74874               while (pos >= i) {
74875                 event = resultEvents[pos];
74876                 processed[pos] = true;
74877
74878                 if (event.left) {
74879                   event.resultInOut = false;
74880                   event.contourId   = ringId;
74881                 } else {
74882                   event.otherEvent.resultInOut = true;
74883                   event.otherEvent.contourId   = ringId;
74884                 }
74885
74886                 pos = event.pos;
74887                 processed[pos] = true;
74888                 contour[0].push(resultEvents[pos].point);
74889                 pos = nextPos(pos, resultEvents, processed, i);
74890               }
74891
74892               pos = pos === -1 ? i : pos;
74893
74894               event = resultEvents[pos];
74895               processed[pos] = processed[event.pos] = true;
74896               event.otherEvent.resultInOut = true;
74897               event.otherEvent.contourId   = ringId;
74898             }
74899
74900             // Handle if the result is a polygon (eg not multipoly)
74901             // Commented it again, let's see what do we mean by that
74902             // if (result.length === 1) result = result[0];
74903             return result;
74904           }
74905
74906           var tinyqueue = TinyQueue;
74907           var default_1 = TinyQueue;
74908
74909           function TinyQueue(data, compare) {
74910               var this$1 = this;
74911
74912               if (!(this instanceof TinyQueue)) { return new TinyQueue(data, compare); }
74913
74914               this.data = data || [];
74915               this.length = this.data.length;
74916               this.compare = compare || defaultCompare;
74917
74918               if (this.length > 0) {
74919                   for (var i = (this.length >> 1) - 1; i >= 0; i--) { this$1._down(i); }
74920               }
74921           }
74922
74923           function defaultCompare(a, b) {
74924               return a < b ? -1 : a > b ? 1 : 0;
74925           }
74926
74927           TinyQueue.prototype = {
74928
74929               push: function (item) {
74930                   this.data.push(item);
74931                   this.length++;
74932                   this._up(this.length - 1);
74933               },
74934
74935               pop: function () {
74936                   if (this.length === 0) { return undefined; }
74937
74938                   var top = this.data[0];
74939                   this.length--;
74940
74941                   if (this.length > 0) {
74942                       this.data[0] = this.data[this.length];
74943                       this._down(0);
74944                   }
74945                   this.data.pop();
74946
74947                   return top;
74948               },
74949
74950               peek: function () {
74951                   return this.data[0];
74952               },
74953
74954               _up: function (pos) {
74955                   var data = this.data;
74956                   var compare = this.compare;
74957                   var item = data[pos];
74958
74959                   while (pos > 0) {
74960                       var parent = (pos - 1) >> 1;
74961                       var current = data[parent];
74962                       if (compare(item, current) >= 0) { break; }
74963                       data[pos] = current;
74964                       pos = parent;
74965                   }
74966
74967                   data[pos] = item;
74968               },
74969
74970               _down: function (pos) {
74971                   var this$1 = this;
74972
74973                   var data = this.data;
74974                   var compare = this.compare;
74975                   var halfLength = this.length >> 1;
74976                   var item = data[pos];
74977
74978                   while (pos < halfLength) {
74979                       var left = (pos << 1) + 1;
74980                       var right = left + 1;
74981                       var best = data[left];
74982
74983                       if (right < this$1.length && compare(data[right], best) < 0) {
74984                           left = right;
74985                           best = data[right];
74986                       }
74987                       if (compare(best, item) >= 0) { break; }
74988
74989                       data[pos] = best;
74990                       pos = left;
74991                   }
74992
74993                   data[pos] = item;
74994               }
74995           };
74996           tinyqueue.default = default_1;
74997
74998           var max = Math.max;
74999           var min = Math.min;
75000
75001           var contourId = 0;
75002
75003
75004           function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) {
75005             var i, len, s1, s2, e1, e2;
75006             for (i = 0, len = contourOrHole.length - 1; i < len; i++) {
75007               s1 = contourOrHole[i];
75008               s2 = contourOrHole[i + 1];
75009               e1 = new SweepEvent(s1, false, undefined, isSubject);
75010               e2 = new SweepEvent(s2, false, e1,        isSubject);
75011               e1.otherEvent = e2;
75012
75013               if (s1[0] === s2[0] && s1[1] === s2[1]) {
75014                 continue; // skip collapsed edges, or it breaks
75015               }
75016
75017               e1.contourId = e2.contourId = depth;
75018               if (!isExteriorRing) {
75019                 e1.isExteriorRing = false;
75020                 e2.isExteriorRing = false;
75021               }
75022               if (compareEvents(e1, e2) > 0) {
75023                 e2.left = true;
75024               } else {
75025                 e1.left = true;
75026               }
75027
75028               var x = s1[0], y = s1[1];
75029               bbox[0] = min(bbox[0], x);
75030               bbox[1] = min(bbox[1], y);
75031               bbox[2] = max(bbox[2], x);
75032               bbox[3] = max(bbox[3], y);
75033
75034               // Pushing it so the queue is sorted from left to right,
75035               // with object on the left having the highest priority.
75036               Q.push(e1);
75037               Q.push(e2);
75038             }
75039           }
75040
75041
75042           function fillQueue(subject, clipping, sbbox, cbbox, operation) {
75043             var eventQueue = new tinyqueue(null, compareEvents);
75044             var polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk;
75045
75046             for (i = 0, ii = subject.length; i < ii; i++) {
75047               polygonSet = subject[i];
75048               for (j = 0, jj = polygonSet.length; j < jj; j++) {
75049                 isExteriorRing = j === 0;
75050                 if (isExteriorRing) { contourId++; }
75051                 processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing);
75052               }
75053             }
75054
75055             for (i = 0, ii = clipping.length; i < ii; i++) {
75056               polygonSet = clipping[i];
75057               for (j = 0, jj = polygonSet.length; j < jj; j++) {
75058                 isExteriorRing = j === 0;
75059                 if (operation === DIFFERENCE) { isExteriorRing = false; }
75060                 if (isExteriorRing) { contourId++; }
75061                 processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing);
75062               }
75063             }
75064
75065             return eventQueue;
75066           }
75067
75068           var EMPTY = [];
75069
75070
75071           function trivialOperation(subject, clipping, operation) {
75072             var result = null;
75073             if (subject.length * clipping.length === 0) {
75074               if        (operation === INTERSECTION) {
75075                 result = EMPTY;
75076               } else if (operation === DIFFERENCE) {
75077                 result = subject;
75078               } else if (operation === UNION ||
75079                          operation === XOR) {
75080                 result = (subject.length === 0) ? clipping : subject;
75081               }
75082             }
75083             return result;
75084           }
75085
75086
75087           function compareBBoxes(subject, clipping, sbbox, cbbox, operation) {
75088             var result = null;
75089             if (sbbox[0] > cbbox[2] ||
75090                 cbbox[0] > sbbox[2] ||
75091                 sbbox[1] > cbbox[3] ||
75092                 cbbox[1] > sbbox[3]) {
75093               if        (operation === INTERSECTION) {
75094                 result = EMPTY;
75095               } else if (operation === DIFFERENCE) {
75096                 result = subject;
75097               } else if (operation === UNION ||
75098                          operation === XOR) {
75099                 result = subject.concat(clipping);
75100               }
75101             }
75102             return result;
75103           }
75104
75105
75106           function boolean(subject, clipping, operation) {
75107             if (typeof subject[0][0][0] === 'number') {
75108               subject = [subject];
75109             }
75110             if (typeof clipping[0][0][0] === 'number') {
75111               clipping = [clipping];
75112             }
75113             var trivial = trivialOperation(subject, clipping, operation);
75114             if (trivial) {
75115               return trivial === EMPTY ? null : trivial;
75116             }
75117             var sbbox = [Infinity, Infinity, -Infinity, -Infinity];
75118             var cbbox = [Infinity, Infinity, -Infinity, -Infinity];
75119
75120             //console.time('fill queue');
75121             var eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation);
75122             //console.timeEnd('fill queue');
75123
75124             trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation);
75125             if (trivial) {
75126               return trivial === EMPTY ? null : trivial;
75127             }
75128             //console.time('subdivide edges');
75129             var sortedEvents = subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation);
75130             //console.timeEnd('subdivide edges');
75131
75132             //console.time('connect vertices');
75133             var result = connectEdges(sortedEvents, operation);
75134             //console.timeEnd('connect vertices');
75135             return result;
75136           }
75137
75138           function union (subject, clipping) {
75139             return boolean(subject, clipping, UNION);
75140           }
75141
75142           function diff (subject, clipping) {
75143             return boolean(subject, clipping, DIFFERENCE);
75144           }
75145
75146           function xor (subject, clipping){
75147             return boolean(subject, clipping, XOR);
75148           }
75149
75150           function intersection$1 (subject, clipping) {
75151             return boolean(subject, clipping, INTERSECTION);
75152           }
75153
75154           /**
75155            * @enum {Number}
75156            */
75157           var operations = { UNION: UNION, DIFFERENCE: DIFFERENCE, INTERSECTION: INTERSECTION, XOR: XOR };
75158
75159           exports.union = union;
75160           exports.diff = diff;
75161           exports.xor = xor;
75162           exports.intersection = intersection$1;
75163           exports.operations = operations;
75164
75165           Object.defineProperty(exports, '__esModule', { value: true });
75166
75167         })));
75168
75169         });
75170
75171         var martinez = unwrapExports(martinez_umd);
75172
75173         var read$6 = function (buffer, offset, isLE, mLen, nBytes) {
75174           var e, m;
75175           var eLen = (nBytes * 8) - mLen - 1;
75176           var eMax = (1 << eLen) - 1;
75177           var eBias = eMax >> 1;
75178           var nBits = -7;
75179           var i = isLE ? (nBytes - 1) : 0;
75180           var d = isLE ? -1 : 1;
75181           var s = buffer[offset + i];
75182
75183           i += d;
75184
75185           e = s & ((1 << (-nBits)) - 1);
75186           s >>= (-nBits);
75187           nBits += eLen;
75188           for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
75189
75190           m = e & ((1 << (-nBits)) - 1);
75191           e >>= (-nBits);
75192           nBits += mLen;
75193           for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
75194
75195           if (e === 0) {
75196             e = 1 - eBias;
75197           } else if (e === eMax) {
75198             return m ? NaN : ((s ? -1 : 1) * Infinity)
75199           } else {
75200             m = m + Math.pow(2, mLen);
75201             e = e - eBias;
75202           }
75203           return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
75204         };
75205
75206         var write$6 = function (buffer, value, offset, isLE, mLen, nBytes) {
75207           var e, m, c;
75208           var eLen = (nBytes * 8) - mLen - 1;
75209           var eMax = (1 << eLen) - 1;
75210           var eBias = eMax >> 1;
75211           var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);
75212           var i = isLE ? 0 : (nBytes - 1);
75213           var d = isLE ? 1 : -1;
75214           var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
75215
75216           value = Math.abs(value);
75217
75218           if (isNaN(value) || value === Infinity) {
75219             m = isNaN(value) ? 1 : 0;
75220             e = eMax;
75221           } else {
75222             e = Math.floor(Math.log(value) / Math.LN2);
75223             if (value * (c = Math.pow(2, -e)) < 1) {
75224               e--;
75225               c *= 2;
75226             }
75227             if (e + eBias >= 1) {
75228               value += rt / c;
75229             } else {
75230               value += rt * Math.pow(2, 1 - eBias);
75231             }
75232             if (value * c >= 2) {
75233               e++;
75234               c /= 2;
75235             }
75236
75237             if (e + eBias >= eMax) {
75238               m = 0;
75239               e = eMax;
75240             } else if (e + eBias >= 1) {
75241               m = ((value * c) - 1) * Math.pow(2, mLen);
75242               e = e + eBias;
75243             } else {
75244               m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
75245               e = 0;
75246             }
75247           }
75248
75249           for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
75250
75251           e = (e << mLen) | m;
75252           eLen += mLen;
75253           for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
75254
75255           buffer[offset + i - d] |= s * 128;
75256         };
75257
75258         var ieee754 = {
75259                 read: read$6,
75260                 write: write$6
75261         };
75262
75263         var pbf = Pbf;
75264
75265
75266
75267         function Pbf(buf) {
75268             this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);
75269             this.pos = 0;
75270             this.type = 0;
75271             this.length = this.buf.length;
75272         }
75273
75274         Pbf.Varint  = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum
75275         Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64
75276         Pbf.Bytes   = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields
75277         Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32
75278
75279         var SHIFT_LEFT_32 = (1 << 16) * (1 << 16),
75280             SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;
75281
75282         // Threshold chosen based on both benchmarking and knowledge about browser string
75283         // data structures (which currently switch structure types at 12 bytes or more)
75284         var TEXT_DECODER_MIN_LENGTH = 12;
75285         var utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf8');
75286
75287         Pbf.prototype = {
75288
75289             destroy: function() {
75290                 this.buf = null;
75291             },
75292
75293             // === READING =================================================================
75294
75295             readFields: function(readField, result, end) {
75296                 end = end || this.length;
75297
75298                 while (this.pos < end) {
75299                     var val = this.readVarint(),
75300                         tag = val >> 3,
75301                         startPos = this.pos;
75302
75303                     this.type = val & 0x7;
75304                     readField(tag, result, this);
75305
75306                     if (this.pos === startPos) { this.skip(val); }
75307                 }
75308                 return result;
75309             },
75310
75311             readMessage: function(readField, result) {
75312                 return this.readFields(readField, result, this.readVarint() + this.pos);
75313             },
75314
75315             readFixed32: function() {
75316                 var val = readUInt32(this.buf, this.pos);
75317                 this.pos += 4;
75318                 return val;
75319             },
75320
75321             readSFixed32: function() {
75322                 var val = readInt32(this.buf, this.pos);
75323                 this.pos += 4;
75324                 return val;
75325             },
75326
75327             // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)
75328
75329             readFixed64: function() {
75330                 var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
75331                 this.pos += 8;
75332                 return val;
75333             },
75334
75335             readSFixed64: function() {
75336                 var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
75337                 this.pos += 8;
75338                 return val;
75339             },
75340
75341             readFloat: function() {
75342                 var val = ieee754.read(this.buf, this.pos, true, 23, 4);
75343                 this.pos += 4;
75344                 return val;
75345             },
75346
75347             readDouble: function() {
75348                 var val = ieee754.read(this.buf, this.pos, true, 52, 8);
75349                 this.pos += 8;
75350                 return val;
75351             },
75352
75353             readVarint: function(isSigned) {
75354                 var buf = this.buf,
75355                     val, b;
75356
75357                 b = buf[this.pos++]; val  =  b & 0x7f;        if (b < 0x80) { return val; }
75358                 b = buf[this.pos++]; val |= (b & 0x7f) << 7;  if (b < 0x80) { return val; }
75359                 b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) { return val; }
75360                 b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) { return val; }
75361                 b = buf[this.pos];   val |= (b & 0x0f) << 28;
75362
75363                 return readVarintRemainder(val, isSigned, this);
75364             },
75365
75366             readVarint64: function() { // for compatibility with v2.0.1
75367                 return this.readVarint(true);
75368             },
75369
75370             readSVarint: function() {
75371                 var num = this.readVarint();
75372                 return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding
75373             },
75374
75375             readBoolean: function() {
75376                 return Boolean(this.readVarint());
75377             },
75378
75379             readString: function() {
75380                 var end = this.readVarint() + this.pos;
75381                 var pos = this.pos;
75382                 this.pos = end;
75383
75384                 if (end - pos >= TEXT_DECODER_MIN_LENGTH && utf8TextDecoder) {
75385                     // longer strings are fast with the built-in browser TextDecoder API
75386                     return readUtf8TextDecoder(this.buf, pos, end);
75387                 }
75388                 // short strings are fast with our custom implementation
75389                 return readUtf8(this.buf, pos, end);
75390             },
75391
75392             readBytes: function() {
75393                 var end = this.readVarint() + this.pos,
75394                     buffer = this.buf.subarray(this.pos, end);
75395                 this.pos = end;
75396                 return buffer;
75397             },
75398
75399             // verbose for performance reasons; doesn't affect gzipped size
75400
75401             readPackedVarint: function(arr, isSigned) {
75402                 if (this.type !== Pbf.Bytes) { return arr.push(this.readVarint(isSigned)); }
75403                 var end = readPackedEnd(this);
75404                 arr = arr || [];
75405                 while (this.pos < end) { arr.push(this.readVarint(isSigned)); }
75406                 return arr;
75407             },
75408             readPackedSVarint: function(arr) {
75409                 if (this.type !== Pbf.Bytes) { return arr.push(this.readSVarint()); }
75410                 var end = readPackedEnd(this);
75411                 arr = arr || [];
75412                 while (this.pos < end) { arr.push(this.readSVarint()); }
75413                 return arr;
75414             },
75415             readPackedBoolean: function(arr) {
75416                 if (this.type !== Pbf.Bytes) { return arr.push(this.readBoolean()); }
75417                 var end = readPackedEnd(this);
75418                 arr = arr || [];
75419                 while (this.pos < end) { arr.push(this.readBoolean()); }
75420                 return arr;
75421             },
75422             readPackedFloat: function(arr) {
75423                 if (this.type !== Pbf.Bytes) { return arr.push(this.readFloat()); }
75424                 var end = readPackedEnd(this);
75425                 arr = arr || [];
75426                 while (this.pos < end) { arr.push(this.readFloat()); }
75427                 return arr;
75428             },
75429             readPackedDouble: function(arr) {
75430                 if (this.type !== Pbf.Bytes) { return arr.push(this.readDouble()); }
75431                 var end = readPackedEnd(this);
75432                 arr = arr || [];
75433                 while (this.pos < end) { arr.push(this.readDouble()); }
75434                 return arr;
75435             },
75436             readPackedFixed32: function(arr) {
75437                 if (this.type !== Pbf.Bytes) { return arr.push(this.readFixed32()); }
75438                 var end = readPackedEnd(this);
75439                 arr = arr || [];
75440                 while (this.pos < end) { arr.push(this.readFixed32()); }
75441                 return arr;
75442             },
75443             readPackedSFixed32: function(arr) {
75444                 if (this.type !== Pbf.Bytes) { return arr.push(this.readSFixed32()); }
75445                 var end = readPackedEnd(this);
75446                 arr = arr || [];
75447                 while (this.pos < end) { arr.push(this.readSFixed32()); }
75448                 return arr;
75449             },
75450             readPackedFixed64: function(arr) {
75451                 if (this.type !== Pbf.Bytes) { return arr.push(this.readFixed64()); }
75452                 var end = readPackedEnd(this);
75453                 arr = arr || [];
75454                 while (this.pos < end) { arr.push(this.readFixed64()); }
75455                 return arr;
75456             },
75457             readPackedSFixed64: function(arr) {
75458                 if (this.type !== Pbf.Bytes) { return arr.push(this.readSFixed64()); }
75459                 var end = readPackedEnd(this);
75460                 arr = arr || [];
75461                 while (this.pos < end) { arr.push(this.readSFixed64()); }
75462                 return arr;
75463             },
75464
75465             skip: function(val) {
75466                 var type = val & 0x7;
75467                 if (type === Pbf.Varint) { while (this.buf[this.pos++] > 0x7f) {} }
75468                 else if (type === Pbf.Bytes) { this.pos = this.readVarint() + this.pos; }
75469                 else if (type === Pbf.Fixed32) { this.pos += 4; }
75470                 else if (type === Pbf.Fixed64) { this.pos += 8; }
75471                 else { throw new Error('Unimplemented type: ' + type); }
75472             },
75473
75474             // === WRITING =================================================================
75475
75476             writeTag: function(tag, type) {
75477                 this.writeVarint((tag << 3) | type);
75478             },
75479
75480             realloc: function(min) {
75481                 var length = this.length || 16;
75482
75483                 while (length < this.pos + min) { length *= 2; }
75484
75485                 if (length !== this.length) {
75486                     var buf = new Uint8Array(length);
75487                     buf.set(this.buf);
75488                     this.buf = buf;
75489                     this.length = length;
75490                 }
75491             },
75492
75493             finish: function() {
75494                 this.length = this.pos;
75495                 this.pos = 0;
75496                 return this.buf.subarray(0, this.length);
75497             },
75498
75499             writeFixed32: function(val) {
75500                 this.realloc(4);
75501                 writeInt32(this.buf, val, this.pos);
75502                 this.pos += 4;
75503             },
75504
75505             writeSFixed32: function(val) {
75506                 this.realloc(4);
75507                 writeInt32(this.buf, val, this.pos);
75508                 this.pos += 4;
75509             },
75510
75511             writeFixed64: function(val) {
75512                 this.realloc(8);
75513                 writeInt32(this.buf, val & -1, this.pos);
75514                 writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
75515                 this.pos += 8;
75516             },
75517
75518             writeSFixed64: function(val) {
75519                 this.realloc(8);
75520                 writeInt32(this.buf, val & -1, this.pos);
75521                 writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
75522                 this.pos += 8;
75523             },
75524
75525             writeVarint: function(val) {
75526                 val = +val || 0;
75527
75528                 if (val > 0xfffffff || val < 0) {
75529                     writeBigVarint(val, this);
75530                     return;
75531                 }
75532
75533                 this.realloc(4);
75534
75535                 this.buf[this.pos++] =           val & 0x7f  | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) { return; }
75536                 this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) { return; }
75537                 this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) { return; }
75538                 this.buf[this.pos++] =   (val >>> 7) & 0x7f;
75539             },
75540
75541             writeSVarint: function(val) {
75542                 this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);
75543             },
75544
75545             writeBoolean: function(val) {
75546                 this.writeVarint(Boolean(val));
75547             },
75548
75549             writeString: function(str) {
75550                 str = String(str);
75551                 this.realloc(str.length * 4);
75552
75553                 this.pos++; // reserve 1 byte for short string length
75554
75555                 var startPos = this.pos;
75556                 // write the string directly to the buffer and see how much was written
75557                 this.pos = writeUtf8(this.buf, str, this.pos);
75558                 var len = this.pos - startPos;
75559
75560                 if (len >= 0x80) { makeRoomForExtraLength(startPos, len, this); }
75561
75562                 // finally, write the message length in the reserved place and restore the position
75563                 this.pos = startPos - 1;
75564                 this.writeVarint(len);
75565                 this.pos += len;
75566             },
75567
75568             writeFloat: function(val) {
75569                 this.realloc(4);
75570                 ieee754.write(this.buf, val, this.pos, true, 23, 4);
75571                 this.pos += 4;
75572             },
75573
75574             writeDouble: function(val) {
75575                 this.realloc(8);
75576                 ieee754.write(this.buf, val, this.pos, true, 52, 8);
75577                 this.pos += 8;
75578             },
75579
75580             writeBytes: function(buffer) {
75581                 var len = buffer.length;
75582                 this.writeVarint(len);
75583                 this.realloc(len);
75584                 for (var i = 0; i < len; i++) { this.buf[this.pos++] = buffer[i]; }
75585             },
75586
75587             writeRawMessage: function(fn, obj) {
75588                 this.pos++; // reserve 1 byte for short message length
75589
75590                 // write the message directly to the buffer and see how much was written
75591                 var startPos = this.pos;
75592                 fn(obj, this);
75593                 var len = this.pos - startPos;
75594
75595                 if (len >= 0x80) { makeRoomForExtraLength(startPos, len, this); }
75596
75597                 // finally, write the message length in the reserved place and restore the position
75598                 this.pos = startPos - 1;
75599                 this.writeVarint(len);
75600                 this.pos += len;
75601             },
75602
75603             writeMessage: function(tag, fn, obj) {
75604                 this.writeTag(tag, Pbf.Bytes);
75605                 this.writeRawMessage(fn, obj);
75606             },
75607
75608             writePackedVarint:   function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedVarint, arr); }   },
75609             writePackedSVarint:  function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedSVarint, arr); }  },
75610             writePackedBoolean:  function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedBoolean, arr); }  },
75611             writePackedFloat:    function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedFloat, arr); }    },
75612             writePackedDouble:   function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedDouble, arr); }   },
75613             writePackedFixed32:  function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedFixed32, arr); }  },
75614             writePackedSFixed32: function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedSFixed32, arr); } },
75615             writePackedFixed64:  function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedFixed64, arr); }  },
75616             writePackedSFixed64: function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedSFixed64, arr); } },
75617
75618             writeBytesField: function(tag, buffer) {
75619                 this.writeTag(tag, Pbf.Bytes);
75620                 this.writeBytes(buffer);
75621             },
75622             writeFixed32Field: function(tag, val) {
75623                 this.writeTag(tag, Pbf.Fixed32);
75624                 this.writeFixed32(val);
75625             },
75626             writeSFixed32Field: function(tag, val) {
75627                 this.writeTag(tag, Pbf.Fixed32);
75628                 this.writeSFixed32(val);
75629             },
75630             writeFixed64Field: function(tag, val) {
75631                 this.writeTag(tag, Pbf.Fixed64);
75632                 this.writeFixed64(val);
75633             },
75634             writeSFixed64Field: function(tag, val) {
75635                 this.writeTag(tag, Pbf.Fixed64);
75636                 this.writeSFixed64(val);
75637             },
75638             writeVarintField: function(tag, val) {
75639                 this.writeTag(tag, Pbf.Varint);
75640                 this.writeVarint(val);
75641             },
75642             writeSVarintField: function(tag, val) {
75643                 this.writeTag(tag, Pbf.Varint);
75644                 this.writeSVarint(val);
75645             },
75646             writeStringField: function(tag, str) {
75647                 this.writeTag(tag, Pbf.Bytes);
75648                 this.writeString(str);
75649             },
75650             writeFloatField: function(tag, val) {
75651                 this.writeTag(tag, Pbf.Fixed32);
75652                 this.writeFloat(val);
75653             },
75654             writeDoubleField: function(tag, val) {
75655                 this.writeTag(tag, Pbf.Fixed64);
75656                 this.writeDouble(val);
75657             },
75658             writeBooleanField: function(tag, val) {
75659                 this.writeVarintField(tag, Boolean(val));
75660             }
75661         };
75662
75663         function readVarintRemainder(l, s, p) {
75664             var buf = p.buf,
75665                 h, b;
75666
75667             b = buf[p.pos++]; h  = (b & 0x70) >> 4;  if (b < 0x80) { return toNum(l, h, s); }
75668             b = buf[p.pos++]; h |= (b & 0x7f) << 3;  if (b < 0x80) { return toNum(l, h, s); }
75669             b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) { return toNum(l, h, s); }
75670             b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) { return toNum(l, h, s); }
75671             b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) { return toNum(l, h, s); }
75672             b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) { return toNum(l, h, s); }
75673
75674             throw new Error('Expected varint not more than 10 bytes');
75675         }
75676
75677         function readPackedEnd(pbf) {
75678             return pbf.type === Pbf.Bytes ?
75679                 pbf.readVarint() + pbf.pos : pbf.pos + 1;
75680         }
75681
75682         function toNum(low, high, isSigned) {
75683             if (isSigned) {
75684                 return high * 0x100000000 + (low >>> 0);
75685             }
75686
75687             return ((high >>> 0) * 0x100000000) + (low >>> 0);
75688         }
75689
75690         function writeBigVarint(val, pbf) {
75691             var low, high;
75692
75693             if (val >= 0) {
75694                 low  = (val % 0x100000000) | 0;
75695                 high = (val / 0x100000000) | 0;
75696             } else {
75697                 low  = ~(-val % 0x100000000);
75698                 high = ~(-val / 0x100000000);
75699
75700                 if (low ^ 0xffffffff) {
75701                     low = (low + 1) | 0;
75702                 } else {
75703                     low = 0;
75704                     high = (high + 1) | 0;
75705                 }
75706             }
75707
75708             if (val >= 0x10000000000000000 || val < -0x10000000000000000) {
75709                 throw new Error('Given varint doesn\'t fit into 10 bytes');
75710             }
75711
75712             pbf.realloc(10);
75713
75714             writeBigVarintLow(low, high, pbf);
75715             writeBigVarintHigh(high, pbf);
75716         }
75717
75718         function writeBigVarintLow(low, high, pbf) {
75719             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
75720             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
75721             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
75722             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
75723             pbf.buf[pbf.pos]   = low & 0x7f;
75724         }
75725
75726         function writeBigVarintHigh(high, pbf) {
75727             var lsb = (high & 0x07) << 4;
75728
75729             pbf.buf[pbf.pos++] |= lsb         | ((high >>>= 3) ? 0x80 : 0); if (!high) { return; }
75730             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) { return; }
75731             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) { return; }
75732             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) { return; }
75733             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) { return; }
75734             pbf.buf[pbf.pos++]  = high & 0x7f;
75735         }
75736
75737         function makeRoomForExtraLength(startPos, len, pbf) {
75738             var extraLen =
75739                 len <= 0x3fff ? 1 :
75740                 len <= 0x1fffff ? 2 :
75741                 len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7));
75742
75743             // if 1 byte isn't enough for encoding message length, shift the data to the right
75744             pbf.realloc(extraLen);
75745             for (var i = pbf.pos - 1; i >= startPos; i--) { pbf.buf[i + extraLen] = pbf.buf[i]; }
75746         }
75747
75748         function writePackedVarint(arr, pbf)   { for (var i = 0; i < arr.length; i++) { pbf.writeVarint(arr[i]); }   }
75749         function writePackedSVarint(arr, pbf)  { for (var i = 0; i < arr.length; i++) { pbf.writeSVarint(arr[i]); }  }
75750         function writePackedFloat(arr, pbf)    { for (var i = 0; i < arr.length; i++) { pbf.writeFloat(arr[i]); }    }
75751         function writePackedDouble(arr, pbf)   { for (var i = 0; i < arr.length; i++) { pbf.writeDouble(arr[i]); }   }
75752         function writePackedBoolean(arr, pbf)  { for (var i = 0; i < arr.length; i++) { pbf.writeBoolean(arr[i]); }  }
75753         function writePackedFixed32(arr, pbf)  { for (var i = 0; i < arr.length; i++) { pbf.writeFixed32(arr[i]); }  }
75754         function writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) { pbf.writeSFixed32(arr[i]); } }
75755         function writePackedFixed64(arr, pbf)  { for (var i = 0; i < arr.length; i++) { pbf.writeFixed64(arr[i]); }  }
75756         function writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) { pbf.writeSFixed64(arr[i]); } }
75757
75758         // Buffer code below from https://github.com/feross/buffer, MIT-licensed
75759
75760         function readUInt32(buf, pos) {
75761             return ((buf[pos]) |
75762                 (buf[pos + 1] << 8) |
75763                 (buf[pos + 2] << 16)) +
75764                 (buf[pos + 3] * 0x1000000);
75765         }
75766
75767         function writeInt32(buf, val, pos) {
75768             buf[pos] = val;
75769             buf[pos + 1] = (val >>> 8);
75770             buf[pos + 2] = (val >>> 16);
75771             buf[pos + 3] = (val >>> 24);
75772         }
75773
75774         function readInt32(buf, pos) {
75775             return ((buf[pos]) |
75776                 (buf[pos + 1] << 8) |
75777                 (buf[pos + 2] << 16)) +
75778                 (buf[pos + 3] << 24);
75779         }
75780
75781         function readUtf8(buf, pos, end) {
75782             var str = '';
75783             var i = pos;
75784
75785             while (i < end) {
75786                 var b0 = buf[i];
75787                 var c = null; // codepoint
75788                 var bytesPerSequence =
75789                     b0 > 0xEF ? 4 :
75790                     b0 > 0xDF ? 3 :
75791                     b0 > 0xBF ? 2 : 1;
75792
75793                 if (i + bytesPerSequence > end) { break; }
75794
75795                 var b1, b2, b3;
75796
75797                 if (bytesPerSequence === 1) {
75798                     if (b0 < 0x80) {
75799                         c = b0;
75800                     }
75801                 } else if (bytesPerSequence === 2) {
75802                     b1 = buf[i + 1];
75803                     if ((b1 & 0xC0) === 0x80) {
75804                         c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);
75805                         if (c <= 0x7F) {
75806                             c = null;
75807                         }
75808                     }
75809                 } else if (bytesPerSequence === 3) {
75810                     b1 = buf[i + 1];
75811                     b2 = buf[i + 2];
75812                     if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {
75813                         c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);
75814                         if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {
75815                             c = null;
75816                         }
75817                     }
75818                 } else if (bytesPerSequence === 4) {
75819                     b1 = buf[i + 1];
75820                     b2 = buf[i + 2];
75821                     b3 = buf[i + 3];
75822                     if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {
75823                         c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);
75824                         if (c <= 0xFFFF || c >= 0x110000) {
75825                             c = null;
75826                         }
75827                     }
75828                 }
75829
75830                 if (c === null) {
75831                     c = 0xFFFD;
75832                     bytesPerSequence = 1;
75833
75834                 } else if (c > 0xFFFF) {
75835                     c -= 0x10000;
75836                     str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);
75837                     c = 0xDC00 | c & 0x3FF;
75838                 }
75839
75840                 str += String.fromCharCode(c);
75841                 i += bytesPerSequence;
75842             }
75843
75844             return str;
75845         }
75846
75847         function readUtf8TextDecoder(buf, pos, end) {
75848             return utf8TextDecoder.decode(buf.subarray(pos, end));
75849         }
75850
75851         function writeUtf8(buf, str, pos) {
75852             for (var i = 0, c, lead; i < str.length; i++) {
75853                 c = str.charCodeAt(i); // code point
75854
75855                 if (c > 0xD7FF && c < 0xE000) {
75856                     if (lead) {
75857                         if (c < 0xDC00) {
75858                             buf[pos++] = 0xEF;
75859                             buf[pos++] = 0xBF;
75860                             buf[pos++] = 0xBD;
75861                             lead = c;
75862                             continue;
75863                         } else {
75864                             c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;
75865                             lead = null;
75866                         }
75867                     } else {
75868                         if (c > 0xDBFF || (i + 1 === str.length)) {
75869                             buf[pos++] = 0xEF;
75870                             buf[pos++] = 0xBF;
75871                             buf[pos++] = 0xBD;
75872                         } else {
75873                             lead = c;
75874                         }
75875                         continue;
75876                     }
75877                 } else if (lead) {
75878                     buf[pos++] = 0xEF;
75879                     buf[pos++] = 0xBF;
75880                     buf[pos++] = 0xBD;
75881                     lead = null;
75882                 }
75883
75884                 if (c < 0x80) {
75885                     buf[pos++] = c;
75886                 } else {
75887                     if (c < 0x800) {
75888                         buf[pos++] = c >> 0x6 | 0xC0;
75889                     } else {
75890                         if (c < 0x10000) {
75891                             buf[pos++] = c >> 0xC | 0xE0;
75892                         } else {
75893                             buf[pos++] = c >> 0x12 | 0xF0;
75894                             buf[pos++] = c >> 0xC & 0x3F | 0x80;
75895                         }
75896                         buf[pos++] = c >> 0x6 & 0x3F | 0x80;
75897                     }
75898                     buf[pos++] = c & 0x3F | 0x80;
75899                 }
75900             }
75901             return pos;
75902         }
75903
75904         var pointGeometry = Point$1;
75905
75906         /**
75907          * A standalone point geometry with useful accessor, comparison, and
75908          * modification methods.
75909          *
75910          * @class Point
75911          * @param {Number} x the x-coordinate. this could be longitude or screen
75912          * pixels, or any other sort of unit.
75913          * @param {Number} y the y-coordinate. this could be latitude or screen
75914          * pixels, or any other sort of unit.
75915          * @example
75916          * var point = new Point(-77, 38);
75917          */
75918         function Point$1(x, y) {
75919             this.x = x;
75920             this.y = y;
75921         }
75922
75923         Point$1.prototype = {
75924
75925             /**
75926              * Clone this point, returning a new point that can be modified
75927              * without affecting the old one.
75928              * @return {Point} the clone
75929              */
75930             clone: function() { return new Point$1(this.x, this.y); },
75931
75932             /**
75933              * Add this point's x & y coordinates to another point,
75934              * yielding a new point.
75935              * @param {Point} p the other point
75936              * @return {Point} output point
75937              */
75938             add:     function(p) { return this.clone()._add(p); },
75939
75940             /**
75941              * Subtract this point's x & y coordinates to from point,
75942              * yielding a new point.
75943              * @param {Point} p the other point
75944              * @return {Point} output point
75945              */
75946             sub:     function(p) { return this.clone()._sub(p); },
75947
75948             /**
75949              * Multiply this point's x & y coordinates by point,
75950              * yielding a new point.
75951              * @param {Point} p the other point
75952              * @return {Point} output point
75953              */
75954             multByPoint:    function(p) { return this.clone()._multByPoint(p); },
75955
75956             /**
75957              * Divide this point's x & y coordinates by point,
75958              * yielding a new point.
75959              * @param {Point} p the other point
75960              * @return {Point} output point
75961              */
75962             divByPoint:     function(p) { return this.clone()._divByPoint(p); },
75963
75964             /**
75965              * Multiply this point's x & y coordinates by a factor,
75966              * yielding a new point.
75967              * @param {Point} k factor
75968              * @return {Point} output point
75969              */
75970             mult:    function(k) { return this.clone()._mult(k); },
75971
75972             /**
75973              * Divide this point's x & y coordinates by a factor,
75974              * yielding a new point.
75975              * @param {Point} k factor
75976              * @return {Point} output point
75977              */
75978             div:     function(k) { return this.clone()._div(k); },
75979
75980             /**
75981              * Rotate this point around the 0, 0 origin by an angle a,
75982              * given in radians
75983              * @param {Number} a angle to rotate around, in radians
75984              * @return {Point} output point
75985              */
75986             rotate:  function(a) { return this.clone()._rotate(a); },
75987
75988             /**
75989              * Rotate this point around p point by an angle a,
75990              * given in radians
75991              * @param {Number} a angle to rotate around, in radians
75992              * @param {Point} p Point to rotate around
75993              * @return {Point} output point
75994              */
75995             rotateAround:  function(a,p) { return this.clone()._rotateAround(a,p); },
75996
75997             /**
75998              * Multiply this point by a 4x1 transformation matrix
75999              * @param {Array<Number>} m transformation matrix
76000              * @return {Point} output point
76001              */
76002             matMult: function(m) { return this.clone()._matMult(m); },
76003
76004             /**
76005              * Calculate this point but as a unit vector from 0, 0, meaning
76006              * that the distance from the resulting point to the 0, 0
76007              * coordinate will be equal to 1 and the angle from the resulting
76008              * point to the 0, 0 coordinate will be the same as before.
76009              * @return {Point} unit vector point
76010              */
76011             unit:    function() { return this.clone()._unit(); },
76012
76013             /**
76014              * Compute a perpendicular point, where the new y coordinate
76015              * is the old x coordinate and the new x coordinate is the old y
76016              * coordinate multiplied by -1
76017              * @return {Point} perpendicular point
76018              */
76019             perp:    function() { return this.clone()._perp(); },
76020
76021             /**
76022              * Return a version of this point with the x & y coordinates
76023              * rounded to integers.
76024              * @return {Point} rounded point
76025              */
76026             round:   function() { return this.clone()._round(); },
76027
76028             /**
76029              * Return the magitude of this point: this is the Euclidean
76030              * distance from the 0, 0 coordinate to this point's x and y
76031              * coordinates.
76032              * @return {Number} magnitude
76033              */
76034             mag: function() {
76035                 return Math.sqrt(this.x * this.x + this.y * this.y);
76036             },
76037
76038             /**
76039              * Judge whether this point is equal to another point, returning
76040              * true or false.
76041              * @param {Point} other the other point
76042              * @return {boolean} whether the points are equal
76043              */
76044             equals: function(other) {
76045                 return this.x === other.x &&
76046                        this.y === other.y;
76047             },
76048
76049             /**
76050              * Calculate the distance from this point to another point
76051              * @param {Point} p the other point
76052              * @return {Number} distance
76053              */
76054             dist: function(p) {
76055                 return Math.sqrt(this.distSqr(p));
76056             },
76057
76058             /**
76059              * Calculate the distance from this point to another point,
76060              * without the square root step. Useful if you're comparing
76061              * relative distances.
76062              * @param {Point} p the other point
76063              * @return {Number} distance
76064              */
76065             distSqr: function(p) {
76066                 var dx = p.x - this.x,
76067                     dy = p.y - this.y;
76068                 return dx * dx + dy * dy;
76069             },
76070
76071             /**
76072              * Get the angle from the 0, 0 coordinate to this point, in radians
76073              * coordinates.
76074              * @return {Number} angle
76075              */
76076             angle: function() {
76077                 return Math.atan2(this.y, this.x);
76078             },
76079
76080             /**
76081              * Get the angle from this point to another point, in radians
76082              * @param {Point} b the other point
76083              * @return {Number} angle
76084              */
76085             angleTo: function(b) {
76086                 return Math.atan2(this.y - b.y, this.x - b.x);
76087             },
76088
76089             /**
76090              * Get the angle between this point and another point, in radians
76091              * @param {Point} b the other point
76092              * @return {Number} angle
76093              */
76094             angleWith: function(b) {
76095                 return this.angleWithSep(b.x, b.y);
76096             },
76097
76098             /*
76099              * Find the angle of the two vectors, solving the formula for
76100              * the cross product a x b = |a||b|sin(θ) for θ.
76101              * @param {Number} x the x-coordinate
76102              * @param {Number} y the y-coordinate
76103              * @return {Number} the angle in radians
76104              */
76105             angleWithSep: function(x, y) {
76106                 return Math.atan2(
76107                     this.x * y - this.y * x,
76108                     this.x * x + this.y * y);
76109             },
76110
76111             _matMult: function(m) {
76112                 var x = m[0] * this.x + m[1] * this.y,
76113                     y = m[2] * this.x + m[3] * this.y;
76114                 this.x = x;
76115                 this.y = y;
76116                 return this;
76117             },
76118
76119             _add: function(p) {
76120                 this.x += p.x;
76121                 this.y += p.y;
76122                 return this;
76123             },
76124
76125             _sub: function(p) {
76126                 this.x -= p.x;
76127                 this.y -= p.y;
76128                 return this;
76129             },
76130
76131             _mult: function(k) {
76132                 this.x *= k;
76133                 this.y *= k;
76134                 return this;
76135             },
76136
76137             _div: function(k) {
76138                 this.x /= k;
76139                 this.y /= k;
76140                 return this;
76141             },
76142
76143             _multByPoint: function(p) {
76144                 this.x *= p.x;
76145                 this.y *= p.y;
76146                 return this;
76147             },
76148
76149             _divByPoint: function(p) {
76150                 this.x /= p.x;
76151                 this.y /= p.y;
76152                 return this;
76153             },
76154
76155             _unit: function() {
76156                 this._div(this.mag());
76157                 return this;
76158             },
76159
76160             _perp: function() {
76161                 var y = this.y;
76162                 this.y = this.x;
76163                 this.x = -y;
76164                 return this;
76165             },
76166
76167             _rotate: function(angle) {
76168                 var cos = Math.cos(angle),
76169                     sin = Math.sin(angle),
76170                     x = cos * this.x - sin * this.y,
76171                     y = sin * this.x + cos * this.y;
76172                 this.x = x;
76173                 this.y = y;
76174                 return this;
76175             },
76176
76177             _rotateAround: function(angle, p) {
76178                 var cos = Math.cos(angle),
76179                     sin = Math.sin(angle),
76180                     x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y),
76181                     y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);
76182                 this.x = x;
76183                 this.y = y;
76184                 return this;
76185             },
76186
76187             _round: function() {
76188                 this.x = Math.round(this.x);
76189                 this.y = Math.round(this.y);
76190                 return this;
76191             }
76192         };
76193
76194         /**
76195          * Construct a point from an array if necessary, otherwise if the input
76196          * is already a Point, or an unknown type, return it unchanged
76197          * @param {Array<Number>|Point|*} a any kind of input value
76198          * @return {Point} constructed point, or passed-through value.
76199          * @example
76200          * // this
76201          * var point = Point.convert([0, 1]);
76202          * // is equivalent to
76203          * var point = new Point(0, 1);
76204          */
76205         Point$1.convert = function (a) {
76206             if (a instanceof Point$1) {
76207                 return a;
76208             }
76209             if (Array.isArray(a)) {
76210                 return new Point$1(a[0], a[1]);
76211             }
76212             return a;
76213         };
76214
76215         var vectortilefeature = VectorTileFeature;
76216
76217         function VectorTileFeature(pbf, end, extent, keys, values) {
76218             // Public
76219             this.properties = {};
76220             this.extent = extent;
76221             this.type = 0;
76222
76223             // Private
76224             this._pbf = pbf;
76225             this._geometry = -1;
76226             this._keys = keys;
76227             this._values = values;
76228
76229             pbf.readFields(readFeature, this, end);
76230         }
76231
76232         function readFeature(tag, feature, pbf) {
76233             if (tag == 1) { feature.id = pbf.readVarint(); }
76234             else if (tag == 2) { readTag(pbf, feature); }
76235             else if (tag == 3) { feature.type = pbf.readVarint(); }
76236             else if (tag == 4) { feature._geometry = pbf.pos; }
76237         }
76238
76239         function readTag(pbf, feature) {
76240             var end = pbf.readVarint() + pbf.pos;
76241
76242             while (pbf.pos < end) {
76243                 var key = feature._keys[pbf.readVarint()],
76244                     value = feature._values[pbf.readVarint()];
76245                 feature.properties[key] = value;
76246             }
76247         }
76248
76249         VectorTileFeature.types = ['Unknown', 'Point', 'LineString', 'Polygon'];
76250
76251         VectorTileFeature.prototype.loadGeometry = function() {
76252             var pbf = this._pbf;
76253             pbf.pos = this._geometry;
76254
76255             var end = pbf.readVarint() + pbf.pos,
76256                 cmd = 1,
76257                 length = 0,
76258                 x = 0,
76259                 y = 0,
76260                 lines = [],
76261                 line;
76262
76263             while (pbf.pos < end) {
76264                 if (length <= 0) {
76265                     var cmdLen = pbf.readVarint();
76266                     cmd = cmdLen & 0x7;
76267                     length = cmdLen >> 3;
76268                 }
76269
76270                 length--;
76271
76272                 if (cmd === 1 || cmd === 2) {
76273                     x += pbf.readSVarint();
76274                     y += pbf.readSVarint();
76275
76276                     if (cmd === 1) { // moveTo
76277                         if (line) { lines.push(line); }
76278                         line = [];
76279                     }
76280
76281                     line.push(new pointGeometry(x, y));
76282
76283                 } else if (cmd === 7) {
76284
76285                     // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90
76286                     if (line) {
76287                         line.push(line[0].clone()); // closePolygon
76288                     }
76289
76290                 } else {
76291                     throw new Error('unknown command ' + cmd);
76292                 }
76293             }
76294
76295             if (line) { lines.push(line); }
76296
76297             return lines;
76298         };
76299
76300         VectorTileFeature.prototype.bbox = function() {
76301             var pbf = this._pbf;
76302             pbf.pos = this._geometry;
76303
76304             var end = pbf.readVarint() + pbf.pos,
76305                 cmd = 1,
76306                 length = 0,
76307                 x = 0,
76308                 y = 0,
76309                 x1 = Infinity,
76310                 x2 = -Infinity,
76311                 y1 = Infinity,
76312                 y2 = -Infinity;
76313
76314             while (pbf.pos < end) {
76315                 if (length <= 0) {
76316                     var cmdLen = pbf.readVarint();
76317                     cmd = cmdLen & 0x7;
76318                     length = cmdLen >> 3;
76319                 }
76320
76321                 length--;
76322
76323                 if (cmd === 1 || cmd === 2) {
76324                     x += pbf.readSVarint();
76325                     y += pbf.readSVarint();
76326                     if (x < x1) { x1 = x; }
76327                     if (x > x2) { x2 = x; }
76328                     if (y < y1) { y1 = y; }
76329                     if (y > y2) { y2 = y; }
76330
76331                 } else if (cmd !== 7) {
76332                     throw new Error('unknown command ' + cmd);
76333                 }
76334             }
76335
76336             return [x1, y1, x2, y2];
76337         };
76338
76339         VectorTileFeature.prototype.toGeoJSON = function(x, y, z) {
76340             var size = this.extent * Math.pow(2, z),
76341                 x0 = this.extent * x,
76342                 y0 = this.extent * y,
76343                 coords = this.loadGeometry(),
76344                 type = VectorTileFeature.types[this.type],
76345                 i, j;
76346
76347             function project(line) {
76348                 for (var j = 0; j < line.length; j++) {
76349                     var p = line[j], y2 = 180 - (p.y + y0) * 360 / size;
76350                     line[j] = [
76351                         (p.x + x0) * 360 / size - 180,
76352                         360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90
76353                     ];
76354                 }
76355             }
76356
76357             switch (this.type) {
76358             case 1:
76359                 var points = [];
76360                 for (i = 0; i < coords.length; i++) {
76361                     points[i] = coords[i][0];
76362                 }
76363                 coords = points;
76364                 project(coords);
76365                 break;
76366
76367             case 2:
76368                 for (i = 0; i < coords.length; i++) {
76369                     project(coords[i]);
76370                 }
76371                 break;
76372
76373             case 3:
76374                 coords = classifyRings(coords);
76375                 for (i = 0; i < coords.length; i++) {
76376                     for (j = 0; j < coords[i].length; j++) {
76377                         project(coords[i][j]);
76378                     }
76379                 }
76380                 break;
76381             }
76382
76383             if (coords.length === 1) {
76384                 coords = coords[0];
76385             } else {
76386                 type = 'Multi' + type;
76387             }
76388
76389             var result = {
76390                 type: "Feature",
76391                 geometry: {
76392                     type: type,
76393                     coordinates: coords
76394                 },
76395                 properties: this.properties
76396             };
76397
76398             if ('id' in this) {
76399                 result.id = this.id;
76400             }
76401
76402             return result;
76403         };
76404
76405         // classifies an array of rings into polygons with outer rings and holes
76406
76407         function classifyRings(rings) {
76408             var len = rings.length;
76409
76410             if (len <= 1) { return [rings]; }
76411
76412             var polygons = [],
76413                 polygon,
76414                 ccw;
76415
76416             for (var i = 0; i < len; i++) {
76417                 var area = signedArea(rings[i]);
76418                 if (area === 0) { continue; }
76419
76420                 if (ccw === undefined) { ccw = area < 0; }
76421
76422                 if (ccw === area < 0) {
76423                     if (polygon) { polygons.push(polygon); }
76424                     polygon = [rings[i]];
76425
76426                 } else {
76427                     polygon.push(rings[i]);
76428                 }
76429             }
76430             if (polygon) { polygons.push(polygon); }
76431
76432             return polygons;
76433         }
76434
76435         function signedArea(ring) {
76436             var sum = 0;
76437             for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {
76438                 p1 = ring[i];
76439                 p2 = ring[j];
76440                 sum += (p2.x - p1.x) * (p1.y + p2.y);
76441             }
76442             return sum;
76443         }
76444
76445         var vectortilelayer = VectorTileLayer;
76446
76447         function VectorTileLayer(pbf, end) {
76448             // Public
76449             this.version = 1;
76450             this.name = null;
76451             this.extent = 4096;
76452             this.length = 0;
76453
76454             // Private
76455             this._pbf = pbf;
76456             this._keys = [];
76457             this._values = [];
76458             this._features = [];
76459
76460             pbf.readFields(readLayer, this, end);
76461
76462             this.length = this._features.length;
76463         }
76464
76465         function readLayer(tag, layer, pbf) {
76466             if (tag === 15) { layer.version = pbf.readVarint(); }
76467             else if (tag === 1) { layer.name = pbf.readString(); }
76468             else if (tag === 5) { layer.extent = pbf.readVarint(); }
76469             else if (tag === 2) { layer._features.push(pbf.pos); }
76470             else if (tag === 3) { layer._keys.push(pbf.readString()); }
76471             else if (tag === 4) { layer._values.push(readValueMessage(pbf)); }
76472         }
76473
76474         function readValueMessage(pbf) {
76475             var value = null,
76476                 end = pbf.readVarint() + pbf.pos;
76477
76478             while (pbf.pos < end) {
76479                 var tag = pbf.readVarint() >> 3;
76480
76481                 value = tag === 1 ? pbf.readString() :
76482                     tag === 2 ? pbf.readFloat() :
76483                     tag === 3 ? pbf.readDouble() :
76484                     tag === 4 ? pbf.readVarint64() :
76485                     tag === 5 ? pbf.readVarint() :
76486                     tag === 6 ? pbf.readSVarint() :
76487                     tag === 7 ? pbf.readBoolean() : null;
76488             }
76489
76490             return value;
76491         }
76492
76493         // return feature `i` from this layer as a `VectorTileFeature`
76494         VectorTileLayer.prototype.feature = function(i) {
76495             if (i < 0 || i >= this._features.length) { throw new Error('feature index out of bounds'); }
76496
76497             this._pbf.pos = this._features[i];
76498
76499             var end = this._pbf.readVarint() + this._pbf.pos;
76500             return new vectortilefeature(this._pbf, end, this.extent, this._keys, this._values);
76501         };
76502
76503         var vectortile = VectorTile;
76504
76505         function VectorTile(pbf, end) {
76506             this.layers = pbf.readFields(readTile, {}, end);
76507         }
76508
76509         function readTile(tag, layers, pbf) {
76510             if (tag === 3) {
76511                 var layer = new vectortilelayer(pbf, pbf.readVarint() + pbf.pos);
76512                 if (layer.length) { layers[layer.name] = layer; }
76513             }
76514         }
76515
76516         var VectorTile$1 = vectortile;
76517         var VectorTileFeature$1 = vectortilefeature;
76518         var VectorTileLayer$1 = vectortilelayer;
76519
76520         var vectorTile = {
76521                 VectorTile: VectorTile$1,
76522                 VectorTileFeature: VectorTileFeature$1,
76523                 VectorTileLayer: VectorTileLayer$1
76524         };
76525
76526         var tiler$6 = utilTiler().tileSize(512).margin(1);
76527         var dispatch$7 = dispatch('loadedData');
76528         var _vtCache;
76529
76530
76531         function abortRequest$6(controller) {
76532             controller.abort();
76533         }
76534
76535
76536         function vtToGeoJSON(data, tile, mergeCache) {
76537             var vectorTile$1 = new vectorTile.VectorTile(new pbf(data));
76538             var layers = Object.keys(vectorTile$1.layers);
76539             if (!Array.isArray(layers)) { layers = [layers]; }
76540
76541             var features = [];
76542             layers.forEach(function(layerID) {
76543                 var layer = vectorTile$1.layers[layerID];
76544                 if (layer) {
76545                     for (var i = 0; i < layer.length; i++) {
76546                         var feature = layer.feature(i).toGeoJSON(tile.xyz[0], tile.xyz[1], tile.xyz[2]);
76547                         var geometry = feature.geometry;
76548
76549                         // Treat all Polygons as MultiPolygons
76550                         if (geometry.type === 'Polygon') {
76551                             geometry.type = 'MultiPolygon';
76552                             geometry.coordinates = [geometry.coordinates];
76553                         }
76554
76555                         // Clip to tile bounds
76556                         if (geometry.type === 'MultiPolygon') {
76557                             var isClipped = false;
76558                             var featureClip = turf_bboxClip(feature, tile.extent.rectangle());
76559                             if (!fastDeepEqual(feature.geometry, featureClip.geometry)) {
76560                                 // feature = featureClip;
76561                                 isClipped = true;
76562                             }
76563                             if (!feature.geometry.coordinates.length) { continue; }   // not actually on this tile
76564                             if (!feature.geometry.coordinates[0].length) { continue; }   // not actually on this tile
76565                         }
76566
76567                         // Generate some unique IDs and add some metadata
76568                         var featurehash = utilHashcode(fastJsonStableStringify(feature));
76569                         var propertyhash = utilHashcode(fastJsonStableStringify(feature.properties || {}));
76570                         feature.__layerID__ = layerID.replace(/[^_a-zA-Z0-9\-]/g, '_');
76571                         feature.__featurehash__ = featurehash;
76572                         feature.__propertyhash__ = propertyhash;
76573                         features.push(feature);
76574
76575                         // Clipped Polygons at same zoom with identical properties can get merged
76576                         if (isClipped && geometry.type === 'MultiPolygon') {
76577                             var merged = mergeCache[propertyhash];
76578                             if (merged && merged.length) {
76579                                 var other = merged[0];
76580                                 var coords = martinez.union(
76581                                     feature.geometry.coordinates, other.geometry.coordinates
76582                                 );
76583
76584                                 if (!coords || !coords.length) {
76585                                     continue;  // something failed in martinez union
76586                                 }
76587
76588                                 merged.push(feature);
76589                                 for (var j = 0; j < merged.length; j++) {      // all these features get...
76590                                     merged[j].geometry.coordinates = coords;   // same coords
76591                                     merged[j].__featurehash__ = featurehash;   // same hash, so deduplication works
76592                                 }
76593                             } else {
76594                                 mergeCache[propertyhash] = [feature];
76595                             }
76596                         }
76597                     }
76598                 }
76599             });
76600
76601             return features;
76602         }
76603
76604
76605         function loadTile(source, tile) {
76606             if (source.loaded[tile.id] || source.inflight[tile.id]) { return; }
76607
76608             var url = source.template
76609                 .replace('{x}', tile.xyz[0])
76610                 .replace('{y}', tile.xyz[1])
76611                 // TMS-flipped y coordinate
76612                 .replace(/\{[t-]y\}/, Math.pow(2, tile.xyz[2]) - tile.xyz[1] - 1)
76613                 .replace(/\{z(oom)?\}/, tile.xyz[2])
76614                 .replace(/\{switch:([^}]+)\}/, function(s, r) {
76615                     var subdomains = r.split(',');
76616                     return subdomains[(tile.xyz[0] + tile.xyz[1]) % subdomains.length];
76617                 });
76618
76619
76620             var controller = new AbortController();
76621             source.inflight[tile.id] = controller;
76622
76623             fetch(url, { signal: controller.signal })
76624                 .then(function(response) {
76625                     if (!response.ok) {
76626                         throw new Error(response.status + ' ' + response.statusText);
76627                     }
76628                     source.loaded[tile.id] = [];
76629                     delete source.inflight[tile.id];
76630                     return response.arrayBuffer();
76631                 })
76632                 .then(function(data) {
76633                     if (!data) {
76634                         throw new Error('No Data');
76635                     }
76636
76637                     var z = tile.xyz[2];
76638                     if (!source.canMerge[z]) {
76639                         source.canMerge[z] = {};  // initialize mergeCache
76640                     }
76641
76642                     source.loaded[tile.id] = vtToGeoJSON(data, tile, source.canMerge[z]);
76643                     dispatch$7.call('loadedData');
76644                 })
76645                 .catch(function() {
76646                     source.loaded[tile.id] = [];
76647                     delete source.inflight[tile.id];
76648                 });
76649         }
76650
76651
76652         var serviceVectorTile = {
76653
76654             init: function() {
76655                 if (!_vtCache) {
76656                     this.reset();
76657                 }
76658
76659                 this.event = utilRebind(this, dispatch$7, 'on');
76660             },
76661
76662
76663             reset: function() {
76664                 for (var sourceID in _vtCache) {
76665                     var source = _vtCache[sourceID];
76666                     if (source && source.inflight) {
76667                         Object.values(source.inflight).forEach(abortRequest$6);
76668                     }
76669                 }
76670
76671                 _vtCache = {};
76672             },
76673
76674
76675             addSource: function(sourceID, template) {
76676                 _vtCache[sourceID] = { template: template, inflight: {}, loaded: {}, canMerge: {} };
76677                 return _vtCache[sourceID];
76678             },
76679
76680
76681             data: function(sourceID, projection) {
76682                 var source = _vtCache[sourceID];
76683                 if (!source) { return []; }
76684
76685                 var tiles = tiler$6.getTiles(projection);
76686                 var seen = {};
76687                 var results = [];
76688
76689                 for (var i = 0; i < tiles.length; i++) {
76690                     var features = source.loaded[tiles[i].id];
76691                     if (!features || !features.length) { continue; }
76692
76693                     for (var j = 0; j < features.length; j++) {
76694                         var feature = features[j];
76695                         var hash = feature.__featurehash__;
76696                         if (seen[hash]) { continue; }
76697                         seen[hash] = true;
76698
76699                         // return a shallow copy, because the hash may change
76700                         // later if this feature gets merged with another
76701                         results.push(Object.assign({}, feature));  // shallow copy
76702                     }
76703                 }
76704
76705                 return results;
76706             },
76707
76708
76709             loadTiles: function(sourceID, template, projection) {
76710                 var source = _vtCache[sourceID];
76711                 if (!source) {
76712                     source = this.addSource(sourceID, template);
76713                 }
76714
76715                 var tiles = tiler$6.getTiles(projection);
76716
76717                 // abort inflight requests that are no longer needed
76718                 Object.keys(source.inflight).forEach(function(k) {
76719                     var wanted = tiles.find(function(tile) { return k === tile.id; });
76720                     if (!wanted) {
76721                         abortRequest$6(source.inflight[k]);
76722                         delete source.inflight[k];
76723                     }
76724                 });
76725
76726                 tiles.forEach(function(tile) {
76727                     loadTile(source, tile);
76728                 });
76729             },
76730
76731
76732             cache: function() {
76733                 return _vtCache;
76734             }
76735
76736         };
76737
76738         var apibase$5 = 'https://www.wikidata.org/w/api.php?';
76739         var _wikidataCache = {};
76740
76741
76742         var serviceWikidata = {
76743
76744             init: function() {},
76745
76746             reset: function() {
76747                 _wikidataCache = {};
76748             },
76749
76750
76751             // Search for Wikidata items matching the query
76752             itemsForSearchQuery: function(query, callback) {
76753                 if (!query) {
76754                     if (callback) { callback('No query', {}); }
76755                     return;
76756                 }
76757
76758                 var url = apibase$5 + utilQsString({
76759                     action: 'wbsearchentities',
76760                     format: 'json',
76761                     formatversion: 2,
76762                     search: query,
76763                     type: 'item',
76764                     language: this.languagesToQuery()[0],
76765                     limit: 10,
76766                     origin: '*'
76767                 });
76768
76769                 d3_json(url)
76770                     .then(function(result) {
76771                         if (result && result.error) {
76772                             throw new Error(result.error);
76773                         }
76774                         if (callback) { callback(null, result.search || {}); }
76775                     })
76776                     .catch(function(err) {
76777                         if (callback) { callback(err.message, {}); }
76778                     });
76779             },
76780
76781
76782             // Given a Wikipedia language and article title,
76783             // return an array of corresponding Wikidata entities.
76784             itemsByTitle: function(lang, title, callback) {
76785                 if (!title) {
76786                     if (callback) { callback('No title', {}); }
76787                     return;
76788                 }
76789
76790                 lang = lang || 'en';
76791                 var url = apibase$5 + utilQsString({
76792                     action: 'wbgetentities',
76793                     format: 'json',
76794                     formatversion: 2,
76795                     sites: lang.replace(/-/g, '_') + 'wiki',
76796                     titles: title,
76797                     languages: 'en', // shrink response by filtering to one language
76798                     origin: '*'
76799                 });
76800
76801                 d3_json(url)
76802                     .then(function(result) {
76803                         if (result && result.error) {
76804                             throw new Error(result.error);
76805                         }
76806                         if (callback) { callback(null, result.entities || {}); }
76807                     })
76808                     .catch(function(err) {
76809                         if (callback) { callback(err.message, {}); }
76810                     });
76811             },
76812
76813
76814             languagesToQuery: function() {
76815                 return utilArrayUniq([
76816                     currentLocale.toLowerCase(),
76817                     currentLocale.split('-', 2)[0].toLowerCase(),
76818                     'en'
76819                 ]);
76820             },
76821
76822
76823             entityByQID: function(qid, callback) {
76824                 if (!qid) {
76825                     callback('No qid', {});
76826                     return;
76827                 }
76828                 if (_wikidataCache[qid]) {
76829                     if (callback) { callback(null, _wikidataCache[qid]); }
76830                     return;
76831                 }
76832
76833                 var langs = this.languagesToQuery();
76834                 var url = apibase$5 + utilQsString({
76835                     action: 'wbgetentities',
76836                     format: 'json',
76837                     formatversion: 2,
76838                     ids: qid,
76839                     props: 'labels|descriptions|claims|sitelinks',
76840                     sitefilter: langs.map(function(d) { return d + 'wiki'; }).join('|'),
76841                     languages: langs.join('|'),
76842                     languagefallback: 1,
76843                     origin: '*'
76844                 });
76845
76846                 d3_json(url)
76847                     .then(function(result) {
76848                         if (result && result.error) {
76849                             throw new Error(result.error);
76850                         }
76851                         if (callback) { callback(null, result.entities[qid] || {}); }
76852                     })
76853                     .catch(function(err) {
76854                         if (callback) { callback(err.message, {}); }
76855                     });
76856             },
76857
76858
76859             // Pass `params` object of the form:
76860             // {
76861             //   qid: 'string'      // brand wikidata  (e.g. 'Q37158')
76862             // }
76863             //
76864             // Get an result object used to display tag documentation
76865             // {
76866             //   title:        'string',
76867             //   description:  'string',
76868             //   editURL:      'string',
76869             //   imageURL:     'string',
76870             //   wiki:         { title: 'string', text: 'string', url: 'string' }
76871             // }
76872             //
76873             getDocs: function(params, callback) {
76874                 var langs = this.languagesToQuery();
76875                 this.entityByQID(params.qid, function(err, entity) {
76876                     if (err || !entity) {
76877                         callback(err || 'No entity');
76878                         return;
76879                     }
76880
76881                     var i;
76882                     var description;
76883                     if (entity.descriptions && Object.keys(entity.descriptions).length > 0) {
76884                         description = entity.descriptions[Object.keys(entity.descriptions)[0]].value;
76885                     }
76886
76887                     // prepare result
76888                     var result = {
76889                         title: entity.id,
76890                         description: description,
76891                         editURL: 'https://www.wikidata.org/wiki/' + entity.id
76892                     };
76893
76894                     // add image
76895                     if (entity.claims) {
76896                         var imageroot = 'https://commons.wikimedia.org/w/index.php';
76897                         var props = ['P154','P18'];  // logo image, image
76898                         var prop, image;
76899                         for (i = 0; i < props.length; i++) {
76900                             prop = entity.claims[props[i]];
76901                             if (prop && Object.keys(prop).length > 0) {
76902                                 image = prop[Object.keys(prop)[0]].mainsnak.datavalue.value;
76903                                 if (image) {
76904                                     result.imageURL = imageroot + '?' + utilQsString({
76905                                         title: 'Special:Redirect/file/' + image,
76906                                         width: 400
76907                                     });
76908                                     break;
76909                                 }
76910                             }
76911                         }
76912                     }
76913
76914                     if (entity.sitelinks) {
76915                         var englishLocale = (currentLocale.split('-', 2)[0].toLowerCase() === 'en');
76916
76917                         // must be one of these that we requested..
76918                         for (i = 0; i < langs.length; i++) {   // check each, in order of preference
76919                             var w = langs[i] + 'wiki';
76920                             if (entity.sitelinks[w]) {
76921                                 var title = entity.sitelinks[w].title;
76922                                 var tKey = 'inspector.wiki_reference';
76923                                 if (!englishLocale && langs[i] === 'en') {   // user's currentLocale isn't English but
76924                                     tKey = 'inspector.wiki_en_reference';    // we are sending them to enwiki anyway..
76925                                 }
76926
76927                                 result.wiki = {
76928                                     title: title,
76929                                     text: tKey,
76930                                     url: 'https://' + langs[i] + '.wikipedia.org/wiki/' + title.replace(/ /g, '_')
76931                                 };
76932                                 break;
76933                             }
76934                         }
76935                     }
76936
76937                     callback(null, result);
76938                 });
76939             }
76940
76941         };
76942
76943         var endpoint = 'https://en.wikipedia.org/w/api.php?';
76944
76945         var serviceWikipedia = {
76946
76947             init: function() {},
76948             reset: function() {},
76949
76950
76951             search: function(lang, query, callback) {
76952                 if (!query) {
76953                     if (callback) { callback('No Query', []); }
76954                     return;
76955                 }
76956
76957                 lang = lang || 'en';
76958                 var url = endpoint.replace('en', lang) +
76959                     utilQsString({
76960                         action: 'query',
76961                         list: 'search',
76962                         srlimit: '10',
76963                         srinfo: 'suggestion',
76964                         format: 'json',
76965                         origin: '*',
76966                         srsearch: query
76967                     });
76968
76969                 d3_json(url)
76970                     .then(function(result) {
76971                         if (result && result.error) {
76972                             throw new Error(result.error);
76973                         } else if (!result || !result.query || !result.query.search) {
76974                             throw new Error('No Results');
76975                         }
76976                         if (callback) {
76977                             var titles = result.query.search.map(function(d) { return d.title; });
76978                             callback(null, titles);
76979                         }
76980                     })
76981                     .catch(function(err) {
76982                         if (callback) { callback(err, []); }
76983                     });
76984             },
76985
76986
76987             suggestions: function(lang, query, callback) {
76988                 if (!query) {
76989                     if (callback) { callback('', []); }
76990                     return;
76991                 }
76992
76993                 lang = lang || 'en';
76994                 var url = endpoint.replace('en', lang) +
76995                     utilQsString({
76996                         action: 'opensearch',
76997                         namespace: 0,
76998                         suggest: '',
76999                         format: 'json',
77000                         origin: '*',
77001                         search: query
77002                     });
77003
77004                 d3_json(url)
77005                     .then(function(result) {
77006                         if (result && result.error) {
77007                             throw new Error(result.error);
77008                         } else if (!result || result.length < 2) {
77009                             throw new Error('No Results');
77010                         }
77011                         if (callback) { callback(null, result[1] || []); }
77012                     })
77013                     .catch(function(err) {
77014                         if (callback) { callback(err.message, []); }
77015                     });
77016             },
77017
77018
77019             translations: function(lang, title, callback) {
77020                 if (!title) {
77021                     if (callback) { callback('No Title'); }
77022                     return;
77023                 }
77024
77025                 var url = endpoint.replace('en', lang) +
77026                     utilQsString({
77027                         action: 'query',
77028                         prop: 'langlinks',
77029                         format: 'json',
77030                         origin: '*',
77031                         lllimit: 500,
77032                         titles: title
77033                     });
77034
77035                 d3_json(url)
77036                     .then(function(result) {
77037                         if (result && result.error) {
77038                             throw new Error(result.error);
77039                         } else if (!result || !result.query || !result.query.pages) {
77040                             throw new Error('No Results');
77041                         }
77042                         if (callback) {
77043                             var list = result.query.pages[Object.keys(result.query.pages)[0]];
77044                             var translations = {};
77045                             if (list && list.langlinks) {
77046                                 list.langlinks.forEach(function(d) { translations[d.lang] = d['*']; });
77047                             }
77048                             callback(null, translations);
77049                         }
77050                     })
77051                     .catch(function(err) {
77052                         if (callback) { callback(err.message); }
77053                     });
77054             }
77055
77056         };
77057
77058         var services$1 = {
77059             geocoder: serviceNominatim,
77060             keepRight: serviceKeepRight,
77061             improveOSM: serviceImproveOSM,
77062             mapillary: serviceMapillary,
77063             openstreetcam: serviceOpenstreetcam,
77064             osm: serviceOsm,
77065             osmWikibase: serviceOsmWikibase,
77066             maprules: serviceMapRules,
77067             streetside: serviceStreetside,
77068             taginfo: serviceTaginfo,
77069             vectorTile: serviceVectorTile,
77070             wikidata: serviceWikidata,
77071             wikipedia: serviceWikipedia
77072         };
77073
77074         function svgIcon(name, svgklass, useklass) {
77075             return function drawIcon(selection) {
77076                 selection.selectAll('svg.icon' + (svgklass ? '.' + svgklass.split(' ')[0] : ''))
77077                     .data([0])
77078                     .enter()
77079                     .append('svg')
77080                     .attr('class', 'icon ' + (svgklass || ''))
77081                     .append('use')
77082                     .attr('xlink:href', name)
77083                     .attr('class', useklass);
77084             };
77085         }
77086
77087         function uiNoteComments(context) {
77088             var _note;
77089
77090
77091             function noteComments(selection) {
77092                 if (_note.isNew()) { return; } // don't draw .comments-container
77093
77094                 var comments = selection.selectAll('.comments-container')
77095                     .data([0]);
77096
77097                 comments = comments.enter()
77098                     .append('div')
77099                     .attr('class', 'comments-container')
77100                     .merge(comments);
77101
77102                 var commentEnter = comments.selectAll('.comment')
77103                     .data(_note.comments)
77104                     .enter()
77105                     .append('div')
77106                     .attr('class', 'comment');
77107
77108                 commentEnter
77109                     .append('div')
77110                     .attr('class', function(d) { return 'comment-avatar user-' + d.uid; })
77111                     .call(svgIcon('#iD-icon-avatar', 'comment-avatar-icon'));
77112
77113                 var mainEnter = commentEnter
77114                     .append('div')
77115                     .attr('class', 'comment-main');
77116
77117                 var metadataEnter = mainEnter
77118                     .append('div')
77119                     .attr('class', 'comment-metadata');
77120
77121                 metadataEnter
77122                     .append('div')
77123                     .attr('class', 'comment-author')
77124                     .each(function(d) {
77125                         var selection = d3_select(this);
77126                         var osm = services$1.osm;
77127                         if (osm && d.user) {
77128                             selection = selection
77129                                 .append('a')
77130                                 .attr('class', 'comment-author-link')
77131                                 .attr('href', osm.userURL(d.user))
77132                                 .attr('tabindex', -1)
77133                                 .attr('target', '_blank');
77134                         }
77135                         selection
77136                             .text(function(d) { return d.user || t('note.anonymous'); });
77137                     });
77138
77139                 metadataEnter
77140                     .append('div')
77141                     .attr('class', 'comment-date')
77142                     .text(function(d) {
77143                         return t('note.status.' + d.action, { when: localeDateString(d.date) });
77144                     });
77145
77146                 mainEnter
77147                     .append('div')
77148                     .attr('class', 'comment-text')
77149                     .html(function(d) { return d.html; });
77150
77151                 comments
77152                     .call(replaceAvatars);
77153             }
77154
77155
77156             function replaceAvatars(selection) {
77157                 var showThirdPartyIcons = context.storage('preferences.privacy.thirdpartyicons') || 'true';
77158                 var osm = services$1.osm;
77159                 if (showThirdPartyIcons !== 'true' || !osm) { return; }
77160
77161                 var uids = {};  // gather uids in the comment thread
77162                 _note.comments.forEach(function(d) {
77163                     if (d.uid) { uids[d.uid] = true; }
77164                 });
77165
77166                 Object.keys(uids).forEach(function(uid) {
77167                     osm.loadUser(uid, function(err, user) {
77168                         if (!user || !user.image_url) { return; }
77169
77170                         selection.selectAll('.comment-avatar.user-' + uid)
77171                             .html('')
77172                             .append('img')
77173                             .attr('class', 'icon comment-avatar-icon')
77174                             .attr('src', user.image_url)
77175                             .attr('alt', user.display_name);
77176                     });
77177                 });
77178             }
77179
77180
77181             function localeDateString(s) {
77182                 if (!s) { return null; }
77183                 var detected = utilDetect();
77184                 var options = { day: 'numeric', month: 'short', year: 'numeric' };
77185                 s = s.replace(/-/g, '/'); // fix browser-specific Date() issues
77186                 var d = new Date(s);
77187                 if (isNaN(d.getTime())) { return null; }
77188                 return d.toLocaleDateString(detected.locale, options);
77189             }
77190
77191
77192             noteComments.note = function(val) {
77193                 if (!arguments.length) { return _note; }
77194                 _note = val;
77195                 return noteComments;
77196             };
77197
77198
77199             return noteComments;
77200         }
77201
77202         function uiNoteHeader() {
77203             var _note;
77204
77205
77206             function noteHeader(selection) {
77207                 var header = selection.selectAll('.note-header')
77208                     .data(
77209                         (_note ? [_note] : []),
77210                         function(d) { return d.status + d.id; }
77211                     );
77212
77213                 header.exit()
77214                     .remove();
77215
77216                 var headerEnter = header.enter()
77217                     .append('div')
77218                     .attr('class', 'note-header');
77219
77220                 var iconEnter = headerEnter
77221                     .append('div')
77222                     .attr('class', function(d) { return 'note-header-icon ' + d.status; })
77223                     .classed('new', function(d) { return d.id < 0; });
77224
77225                 iconEnter
77226                     .append('div')
77227                     .attr('class', 'preset-icon-28')
77228                     .call(svgIcon('#iD-icon-note', 'note-fill'));
77229
77230                 iconEnter.each(function(d) {
77231                     var statusIcon = '#iD-icon-' + (d.id < 0 ? 'plus' : (d.status === 'open' ? 'close' : 'apply'));
77232                     iconEnter
77233                         .append('div')
77234                         .attr('class', 'note-icon-annotation')
77235                         .call(svgIcon(statusIcon, 'icon-annotation'));
77236                 });
77237
77238                 headerEnter
77239                     .append('div')
77240                     .attr('class', 'note-header-label')
77241                     .text(function(d) {
77242                         if (_note.isNew()) { return t('note.new'); }
77243                         return t('note.note') + ' ' + d.id + ' ' +
77244                             (d.status === 'closed' ? t('note.closed') : '');
77245                     });
77246             }
77247
77248
77249             noteHeader.note = function(val) {
77250                 if (!arguments.length) { return _note; }
77251                 _note = val;
77252                 return noteHeader;
77253             };
77254
77255
77256             return noteHeader;
77257         }
77258
77259         function uiNoteReport() {
77260             var _note;
77261
77262             function noteReport(selection) {
77263                 var url;
77264                 if (services$1.osm && (_note instanceof osmNote) && (!_note.isNew())) {
77265                     url = services$1.osm.noteReportURL(_note);
77266                 }
77267
77268                 var link = selection.selectAll('.note-report')
77269                     .data(url ? [url] : []);
77270
77271                 // exit
77272                 link.exit()
77273                     .remove();
77274
77275                 // enter
77276                 var linkEnter = link.enter()
77277                     .append('a')
77278                     .attr('class', 'note-report')
77279                     .attr('target', '_blank')
77280                     .attr('href', function(d) { return d; })
77281                     .call(svgIcon('#iD-icon-out-link', 'inline'));
77282
77283                 linkEnter
77284                     .append('span')
77285                     .text(t('note.report'));
77286             }
77287
77288
77289             noteReport.note = function(val) {
77290                 if (!arguments.length) { return _note; }
77291                 _note = val;
77292                 return noteReport;
77293             };
77294
77295             return noteReport;
77296         }
77297
77298         var _popoverID = 0;
77299
77300         function popover(klass) {
77301             var _id = _popoverID++;
77302             var _anchorSelection = d3_select(null);
77303             var popover = function(selection) {
77304                 _anchorSelection = selection;
77305                 selection.each(setup);
77306             };
77307             var _animation = utilFunctor(false);
77308             var _placement = utilFunctor('top'); // top, bottom, left, right
77309             var _alignment = utilFunctor('center');  // leading, center, trailing
77310             var _scrollContainer = utilFunctor(d3_select(null));
77311             var _content;
77312             var _displayType = utilFunctor('');
77313             var _hasArrow = utilFunctor(true);
77314
77315             popover.displayType = function(val) {
77316                 if (arguments.length) {
77317                     _displayType = utilFunctor(val);
77318                     return popover;
77319                 } else {
77320                     return _displayType;
77321                 }
77322             };
77323
77324             popover.hasArrow = function(val) {
77325                 if (arguments.length) {
77326                     _hasArrow = utilFunctor(val);
77327                     return popover;
77328                 } else {
77329                     return _hasArrow;
77330                 }
77331             };
77332
77333             popover.placement = function(val) {
77334                 if (arguments.length) {
77335                     _placement = utilFunctor(val);
77336                     return popover;
77337                 } else {
77338                     return _placement;
77339                 }
77340             };
77341
77342             popover.alignment = function(val) {
77343                 if (arguments.length) {
77344                     _alignment = utilFunctor(val);
77345                     return popover;
77346                 } else {
77347                     return _alignment;
77348                 }
77349             };
77350
77351             popover.scrollContainer = function(val) {
77352                 if (arguments.length) {
77353                     _scrollContainer = utilFunctor(val);
77354                     return popover;
77355                 } else {
77356                     return _scrollContainer;
77357                 }
77358             };
77359
77360             popover.content = function(val) {
77361                 if (arguments.length) {
77362                     _content = val;
77363                     return popover;
77364                 } else {
77365                     return _content;
77366                 }
77367             };
77368
77369             popover.isShown = function() {
77370                 var popoverSelection = d3_select('.popover-' + _id);
77371                 return !popoverSelection.empty() && popoverSelection.classed('in');
77372             };
77373
77374             popover.show = function() {
77375                 _anchorSelection.each(show);
77376             };
77377
77378             popover.updateContent = function() {
77379                 _anchorSelection.each(updateContent);
77380             };
77381
77382             popover.hide = function() {
77383                 _anchorSelection.each(hide);
77384             };
77385
77386             popover.toggle = function() {
77387                 _anchorSelection.each(toggle);
77388             };
77389
77390             popover.destroy = function(selection, selector) {
77391                 // by default, just destroy the current popover
77392                 selector = selector || '.popover-' + _id;
77393
77394                 selection
77395                     .on('mouseenter.popover', null)
77396                     .on('mouseleave.popover', null)
77397                     .on('mouseup.popover', null)
77398                     .on('mousedown.popover', null)
77399                     .on('click.popover', null)
77400                     .attr('title', function() {
77401                         return this.getAttribute('data-original-title') || this.getAttribute('title');
77402                     })
77403                     .attr('data-original-title', null)
77404                     .selectAll(selector)
77405                     .remove();
77406             };
77407
77408
77409             popover.destroyAny = function(selection) {
77410                 selection.call(popover.destroy, '.popover');
77411             };
77412
77413             var isTouchEvent = false;
77414
77415             function setup() {
77416                 var anchor = d3_select(this);
77417                 var animate = _animation.apply(this, arguments);
77418                 var popoverSelection = anchor.selectAll('.popover-' + _id)
77419                     .data([0]);
77420
77421
77422                 var enter = popoverSelection.enter()
77423                     .append('div')
77424                     .attr('class', 'popover popover-' + _id + ' ' + (klass ? klass : ''))
77425                     .classed('arrowed', _hasArrow.apply(this, arguments));
77426
77427                 enter
77428                     .append('div')
77429                     .attr('class', 'popover-arrow');
77430
77431                 enter
77432                     .append('div')
77433                     .attr('class', 'popover-inner');
77434
77435                 popoverSelection = enter
77436                     .merge(popoverSelection);
77437
77438                 if (animate) {
77439                     popoverSelection.classed('fade', true);
77440                 }
77441
77442                 var placement = _placement.apply(this, arguments);
77443                 popoverSelection.classed(placement, true);
77444
77445                 var display = _displayType.apply(this, arguments);
77446
77447                 if (display === 'hover') {
77448                     anchor.on('touchstart.popover', function() {
77449                         // hack to avoid showing popovers upon touch input
77450                         isTouchEvent = true;
77451                     });
77452                     anchor.on('mouseenter.popover', show);
77453                     anchor.on('mouseleave.popover', hide);
77454
77455                 } else if (display === 'clickFocus') {
77456                     anchor
77457                         .on('mousedown.popover', function() {
77458                             event.preventDefault();
77459                             event.stopPropagation();
77460                         })
77461                         .on('mouseup.popover', function() {
77462                             event.preventDefault();
77463                             event.stopPropagation();
77464                         })
77465                         .on('click.popover', toggle);
77466
77467                     popoverSelection
77468                         .attr('tabindex', 0)
77469                         .on('blur.popover', function() {
77470                             anchor.each(function() {
77471                                 hide.apply(this, arguments);
77472                             });
77473                         });
77474                 }
77475             }
77476
77477
77478             function show() {
77479                 if (isTouchEvent) {
77480                     isTouchEvent = false;
77481                     return;
77482                 }
77483                 var anchor = d3_select(this);
77484                 var popoverSelection = anchor.selectAll('.popover-' + _id);
77485
77486                 if (popoverSelection.empty()) {   // popover was removed somehow, put it back
77487                     anchor.call(popover.destroy);
77488                     anchor.each(setup);
77489                     popoverSelection = anchor.selectAll('.popover-' + _id);
77490                 }
77491
77492                 popoverSelection.classed('in', true);
77493
77494                 if (_displayType.apply(this, arguments) === 'clickFocus') {
77495                     anchor.classed('active', true);
77496                     popoverSelection.node().focus();
77497                 }
77498
77499                 anchor.each(updateContent);
77500             }
77501
77502             function updateContent() {
77503                 var anchor = d3_select(this);
77504                 var popoverSelection = anchor.selectAll('.popover-' + _id);
77505
77506                 if (_content) { popoverSelection.selectAll('.popover-inner').call(_content.apply(this, arguments)); }
77507
77508                 updatePosition.apply(this, arguments);
77509                 // hack: update twice to fix instances where the absolute offset is
77510                 // set before the dynamic popover size is calculated by the browser
77511                 updatePosition.apply(this, arguments);
77512             }
77513
77514
77515             function updatePosition() {
77516
77517                 var anchor = d3_select(this);
77518                 var popoverSelection = anchor.selectAll('.popover-' + _id);
77519
77520                 var scrollContainer = _scrollContainer && _scrollContainer.apply(this, arguments);
77521                 var scrollNode = scrollContainer && !scrollContainer.empty() && scrollContainer.node();
77522                 var scrollLeft = scrollNode ? scrollNode.scrollLeft : 0;
77523                 var scrollTop = scrollNode ? scrollNode.scrollTop : 0;
77524
77525                 var placement = _placement.apply(this, arguments);
77526                 var alignment = _alignment.apply(this, arguments);
77527                 var alignFactor = 0.5;
77528                 if (alignment === 'leading') {
77529                     alignFactor = 0;
77530                 } else if (alignment === 'trailing') {
77531                     alignFactor = 1;
77532                 }
77533                 var anchorFrame = getFrame(anchor.node());
77534                 var popoverFrame = getFrame(popoverSelection.node());
77535                 var position;
77536
77537                 switch (placement) {
77538                     case 'top':
77539                     position = {
77540                         x: anchorFrame.x + (anchorFrame.w - popoverFrame.w) * alignFactor,
77541                         y: anchorFrame.y - popoverFrame.h
77542                     };
77543                     break;
77544                     case 'bottom':
77545                     position = {
77546                         x: anchorFrame.x + (anchorFrame.w - popoverFrame.w) * alignFactor,
77547                         y: anchorFrame.y + anchorFrame.h
77548                     };
77549                     break;
77550                     case 'left':
77551                     position = {
77552                         x: anchorFrame.x - popoverFrame.w,
77553                         y: anchorFrame.y + (anchorFrame.h - popoverFrame.h) * alignFactor
77554                     };
77555                     break;
77556                     case 'right':
77557                     position = {
77558                         x: anchorFrame.x + anchorFrame.w,
77559                         y: anchorFrame.y + (anchorFrame.h - popoverFrame.h) * alignFactor
77560                     };
77561                     break;
77562                 }
77563
77564                 if (position) {
77565
77566                     if (scrollNode && (placement === 'top' || placement === 'bottom')) {
77567
77568                         var initialPosX = position.x;
77569
77570                         if (position.x + popoverFrame.w > scrollNode.offsetWidth - 10) {
77571                             position.x = scrollNode.offsetWidth - 10 - popoverFrame.w;
77572                         } else if (position.x < 10) {
77573                             position.x = 10;
77574                         }
77575
77576                         var arrow = popoverSelection.selectAll('.popover-arrow');
77577                         // keep the arrow centered on the button, or as close as possible
77578                         var arrowPosX = Math.min(Math.max(popoverFrame.w / 2 - (position.x - initialPosX), 10), popoverFrame.w - 10);
77579                         arrow.style('left', ~~arrowPosX + 'px');
77580                     }
77581
77582                     popoverSelection.style('left', ~~position.x + 'px').style('top', ~~position.y + 'px');
77583                 } else {
77584                     popoverSelection.style('left', null).style('top', null);
77585                 }
77586
77587                 function getFrame(node) {
77588                     var positionStyle = d3_select(node).style('position');
77589                     if (positionStyle === 'absolute' || positionStyle === 'static') {
77590                         return {
77591                             x: node.offsetLeft - scrollLeft,
77592                             y: node.offsetTop - scrollTop,
77593                             w: node.offsetWidth,
77594                             h: node.offsetHeight
77595                         };
77596                     } else {
77597                         return {
77598                             x: 0,
77599                             y: 0,
77600                             w: node.offsetWidth,
77601                             h: node.offsetHeight
77602                         };
77603                     }
77604                 }
77605             }
77606
77607
77608             function hide() {
77609                 var anchor = d3_select(this);
77610                 if (_displayType.apply(this, arguments) === 'clickFocus') {
77611                     anchor.classed('active', false);
77612                 }
77613                 anchor.selectAll('.popover-' + _id).classed('in', false);
77614             }
77615
77616
77617             function toggle() {
77618                 if (d3_select(this).select('.popover-' + _id).classed('in')) {
77619                     hide.apply(this, arguments);
77620                 } else {
77621                     show.apply(this, arguments);
77622                 }
77623             }
77624
77625
77626             return popover;
77627         }
77628
77629         function tooltip(klass) {
77630
77631             var tooltip = popover((klass || '') + ' tooltip')
77632                 .displayType('hover');
77633
77634             var _title = function() {
77635                 var title = this.getAttribute('data-original-title');
77636                 if (title) {
77637                     return title;
77638                 } else {
77639                     title = this.getAttribute('title');
77640                     this.removeAttribute('title');
77641                     this.setAttribute('data-original-title', title);
77642                 }
77643                 return title;
77644             };
77645             var _html = utilFunctor(false);
77646
77647
77648             tooltip.title = function(val) {
77649                 if (arguments.length) {
77650                     _title = utilFunctor(val);
77651                     return tooltip;
77652                 } else {
77653                     return _title;
77654                 }
77655             };
77656
77657
77658             tooltip.html = function(val) {
77659                 if (arguments.length) {
77660                     _html = utilFunctor(val);
77661                     return tooltip;
77662                 } else {
77663                     return _html;
77664                 }
77665             };
77666
77667             tooltip.content(function() {
77668                 var content = _title.apply(this, arguments);
77669                 var markup = _html.apply(this, arguments);
77670
77671                 return function(selection) {
77672                     selection[markup ? 'html' : 'text'](content);
77673                 };
77674             });
77675
77676             return tooltip;
77677         }
77678
77679         function uiQuickLinks() {
77680             var _choices = [];
77681
77682
77683             function quickLinks(selection) {
77684                 var container = selection.selectAll('.quick-links')
77685                     .data([0]);
77686
77687                 container = container.enter()
77688                     .append('div')
77689                     .attr('class', 'quick-links')
77690                     .merge(container);
77691
77692                 var items = container.selectAll('.quick-link')
77693                     .data(_choices, function(d) { return d.id; });
77694
77695                 items.exit()
77696                     .remove();
77697
77698                 items.enter()
77699                     .append('a')
77700                     .attr('class', function(d) { return 'quick-link quick-link-' + d.id; })
77701                     .attr('href', '#')
77702                     .text(function(d) { return t(d.label); })
77703                     .each(function(d) {
77704                         if (typeof d.tooltip !== 'function') { return; }
77705                         d3_select(this)
77706                             .call(tooltip().html(true).title(d.tooltip).placement('bottom'));
77707                     })
77708                     .on('click', function(d) {
77709                         if (typeof d.click !== 'function') { return; }
77710                         event.preventDefault();
77711                         d.click(d);
77712                     });
77713             }
77714
77715
77716             //  val should be an array of choices like:
77717             //    [{
77718             //       id: 'link-id',
77719             //       label: 'translation.key',
77720             //       tooltip: function(d),
77721             //       click: function(d)
77722             //    }, ..]
77723             quickLinks.choices = function(val) {
77724                 if (!arguments.length) { return _choices; }
77725                 _choices = val;
77726                 return quickLinks;
77727             };
77728
77729
77730             return quickLinks;
77731         }
77732
77733         function uiTooltipHtml(text, keys, heading) {
77734             var s = '';
77735
77736             if (heading) {
77737                 s += '<div class="tooltip-heading"><span>' + heading + '</span></div>';
77738             }
77739             if (text) {
77740                 s += '<div class="tooltip-text"><span>' + text + '</span></div>';
77741             }
77742             if (keys) {
77743                 if (!Array.isArray(keys)) { keys = [keys]; }
77744                 s += '<div class="keyhint-wrap"><span>' + t('tooltip_keyhint') + '</span>';
77745                 keys.forEach(function(key) {
77746                     s += '<kbd class="shortcut">' + key + '</kbd>';
77747                 });
77748                 s += '</div>';
77749             }
77750
77751             return s;
77752         }
77753
77754         function uiViewOnOSM(context) {
77755             var _what;   // an osmEntity or osmNote
77756
77757
77758             function viewOnOSM(selection) {
77759                 var url;
77760                 if (_what instanceof osmEntity) {
77761                     url = context.connection().entityURL(_what);
77762                 } else if (_what instanceof osmNote) {
77763                     url = context.connection().noteURL(_what);
77764                 }
77765
77766                 var data = ((!_what || _what.isNew()) ? [] : [_what]);
77767                 var link = selection.selectAll('.view-on-osm')
77768                     .data(data, function(d) { return d.id; });
77769
77770                 // exit
77771                 link.exit()
77772                     .remove();
77773
77774                 // enter
77775                 var linkEnter = link.enter()
77776                     .append('a')
77777                     .attr('class', 'view-on-osm')
77778                     .attr('target', '_blank')
77779                     .attr('href', url)
77780                     .call(svgIcon('#iD-icon-out-link', 'inline'));
77781
77782                 linkEnter
77783                     .append('span')
77784                     .text(t('inspector.view_on_osm'));
77785             }
77786
77787
77788             viewOnOSM.what = function(_) {
77789                 if (!arguments.length) { return _what; }
77790                 _what = _;
77791                 return viewOnOSM;
77792             };
77793
77794             return viewOnOSM;
77795         }
77796
77797         function uiNoteEditor(context) {
77798             var dispatch$1 = dispatch('change');
77799             var quickLinks = uiQuickLinks();
77800             var noteComments = uiNoteComments(context);
77801             var noteHeader = uiNoteHeader();
77802
77803             // var formFields = uiFormFields(context);
77804
77805             var _note;
77806             // var _fieldsArr;
77807
77808
77809             function noteEditor(selection) {
77810                 // quick links
77811                 var choices = [{
77812                     id: 'zoom_to',
77813                     label: 'inspector.zoom_to.title',
77814                     tooltip: function() {
77815                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_note'), t('inspector.zoom_to.key'));
77816                     },
77817                     click: function zoomTo() {
77818                         context.mode().zoomToSelected();
77819                     }
77820                 }];
77821
77822
77823                 var header = selection.selectAll('.header')
77824                     .data([0]);
77825
77826                 var headerEnter = header.enter()
77827                     .append('div')
77828                     .attr('class', 'header fillL');
77829
77830                 headerEnter
77831                     .append('button')
77832                     .attr('class', 'fr note-editor-close')
77833                     .on('click', function() {
77834                         context.enter(modeBrowse(context));
77835                     })
77836                     .call(svgIcon('#iD-icon-close'));
77837
77838                 headerEnter
77839                     .append('h3')
77840                     .text(t('note.title'));
77841
77842
77843                 var body = selection.selectAll('.body')
77844                     .data([0]);
77845
77846                 body = body.enter()
77847                     .append('div')
77848                     .attr('class', 'body')
77849                     .merge(body);
77850
77851                 var editor = body.selectAll('.note-editor')
77852                     .data([0]);
77853
77854                 editor.enter()
77855                     .append('div')
77856                     .attr('class', 'modal-section note-editor')
77857                     .merge(editor)
77858                     .call(noteHeader.note(_note))
77859                     .call(quickLinks.choices(choices))
77860                     .call(noteComments.note(_note))
77861                     .call(noteSaveSection);
77862
77863
77864                 var footer = selection.selectAll('.footer')
77865                     .data([0]);
77866
77867                 footer.enter()
77868                     .append('div')
77869                     .attr('class', 'footer')
77870                     .merge(footer)
77871                     .call(uiViewOnOSM(context).what(_note))
77872                     .call(uiNoteReport().note(_note));
77873
77874
77875                 // rerender the note editor on any auth change
77876                 var osm = services$1.osm;
77877                 if (osm) {
77878                     osm.on('change.note-save', function() {
77879                         selection.call(noteEditor);
77880                     });
77881                 }
77882             }
77883
77884
77885             function noteSaveSection(selection) {
77886                 var isSelected = (_note && _note.id === context.selectedNoteID());
77887                 var noteSave = selection.selectAll('.note-save')
77888                     .data((isSelected ? [_note] : []), function(d) { return d.status + d.id; });
77889
77890                 // exit
77891                 noteSave.exit()
77892                     .remove();
77893
77894                 // enter
77895                 var noteSaveEnter = noteSave.enter()
77896                     .append('div')
77897                     .attr('class', 'note-save save-section cf');
77898
77899                 // // if new note, show categories to pick from
77900                 // if (_note.isNew()) {
77901                 //     var presets = context.presets();
77902
77903                 //     // NOTE: this key isn't a age and therefore there is no documentation (yet)
77904                 //     _fieldsArr = [
77905                 //         uiField(context, presets.field('category'), null, { show: true, revert: false }),
77906                 //     ];
77907
77908                 //     _fieldsArr.forEach(function(field) {
77909                 //         field
77910                 //             .on('change', changeCategory);
77911                 //     });
77912
77913                 //     noteSaveEnter
77914                 //         .append('div')
77915                 //         .attr('class', 'note-category')
77916                 //         .call(formFields.fieldsArr(_fieldsArr));
77917                 // }
77918
77919                 // function changeCategory() {
77920                 //     // NOTE: perhaps there is a better way to get value
77921                 //     var val = d3_select('input[name=\'category\']:checked').property('__data__') || undefined;
77922
77923                 //     // store the unsaved category with the note itself
77924                 //     _note = _note.update({ newCategory: val });
77925                 //     var osm = services.osm;
77926                 //     if (osm) {
77927                 //         osm.replaceNote(_note);  // update note cache
77928                 //     }
77929                 //     noteSave
77930                 //         .call(noteSaveButtons);
77931                 // }
77932
77933                 noteSaveEnter
77934                     .append('h4')
77935                     .attr('class', '.note-save-header')
77936                     .text(function() {
77937                         return _note.isNew() ? t('note.newDescription') : t('note.newComment');
77938                     });
77939
77940                 noteSaveEnter
77941                     .append('textarea')
77942                     .attr('class', 'new-comment-input')
77943                     .attr('placeholder', t('note.inputPlaceholder'))
77944                     .attr('maxlength', 1000)
77945                     .property('value', function(d) { return d.newComment; })
77946                     .call(utilNoAuto)
77947                     .on('keydown.note-input', keydown)
77948                     .on('input.note-input', changeInput)
77949                     .on('blur.note-input', changeInput);
77950
77951                 // update
77952                 noteSave = noteSaveEnter
77953                     .merge(noteSave)
77954                     .call(userDetails)
77955                     .call(noteSaveButtons);
77956
77957
77958                 // fast submit if user presses cmd+enter
77959                 function keydown() {
77960                     if (!(event.keyCode === 13 && event.metaKey)) { return; }
77961
77962                     var osm = services$1.osm;
77963                     if (!osm) { return; }
77964
77965                     var hasAuth = osm.authenticated();
77966                     if (!hasAuth) { return; }
77967
77968                     if (!_note.newComment) { return; }
77969
77970                     event.preventDefault();
77971
77972                     d3_select(this)
77973                         .on('keydown.note-input', null);
77974
77975                     // focus on button and submit
77976                     window.setTimeout(function() {
77977                         if (_note.isNew()) {
77978                             noteSave.selectAll('.save-button').node().focus();
77979                             clickSave(_note);
77980                         } else  {
77981                             noteSave.selectAll('.comment-button').node().focus();
77982                             clickComment(_note);
77983                         }
77984                     }, 10);
77985                 }
77986
77987
77988                 function changeInput() {
77989                     var input = d3_select(this);
77990                     var val = input.property('value').trim() || undefined;
77991
77992                     // store the unsaved comment with the note itself
77993                     _note = _note.update({ newComment: val });
77994
77995                     var osm = services$1.osm;
77996                     if (osm) {
77997                         osm.replaceNote(_note);  // update note cache
77998                     }
77999
78000                     noteSave
78001                         .call(noteSaveButtons);
78002                 }
78003             }
78004
78005
78006             function userDetails(selection) {
78007                 var detailSection = selection.selectAll('.detail-section')
78008                     .data([0]);
78009
78010                 detailSection = detailSection.enter()
78011                     .append('div')
78012                     .attr('class', 'detail-section')
78013                     .merge(detailSection);
78014
78015                 var osm = services$1.osm;
78016                 if (!osm) { return; }
78017
78018                 // Add warning if user is not logged in
78019                 var hasAuth = osm.authenticated();
78020                 var authWarning = detailSection.selectAll('.auth-warning')
78021                     .data(hasAuth ? [] : [0]);
78022
78023                 authWarning.exit()
78024                     .transition()
78025                     .duration(200)
78026                     .style('opacity', 0)
78027                     .remove();
78028
78029                 var authEnter = authWarning.enter()
78030                     .insert('div', '.tag-reference-body')
78031                     .attr('class', 'field-warning auth-warning')
78032                     .style('opacity', 0);
78033
78034                 authEnter
78035                     .call(svgIcon('#iD-icon-alert', 'inline'));
78036
78037                 authEnter
78038                     .append('span')
78039                     .text(t('note.login'));
78040
78041                 authEnter
78042                     .append('a')
78043                     .attr('target', '_blank')
78044                     .call(svgIcon('#iD-icon-out-link', 'inline'))
78045                     .append('span')
78046                     .text(t('login'))
78047                     .on('click.note-login', function() {
78048                         event.preventDefault();
78049                         osm.authenticate();
78050                     });
78051
78052                 authEnter
78053                     .transition()
78054                     .duration(200)
78055                     .style('opacity', 1);
78056
78057
78058                 var prose = detailSection.selectAll('.note-save-prose')
78059                     .data(hasAuth ? [0] : []);
78060
78061                 prose.exit()
78062                     .remove();
78063
78064                 prose = prose.enter()
78065                     .append('p')
78066                     .attr('class', 'note-save-prose')
78067                     .text(t('note.upload_explanation'))
78068                     .merge(prose);
78069
78070                 osm.userDetails(function(err, user) {
78071                     if (err) { return; }
78072
78073                     var userLink = d3_select(document.createElement('div'));
78074
78075                     if (user.image_url) {
78076                         userLink
78077                             .append('img')
78078                             .attr('src', user.image_url)
78079                             .attr('class', 'icon pre-text user-icon');
78080                     }
78081
78082                     userLink
78083                         .append('a')
78084                         .attr('class', 'user-info')
78085                         .text(user.display_name)
78086                         .attr('href', osm.userURL(user.display_name))
78087                         .attr('tabindex', -1)
78088                         .attr('target', '_blank');
78089
78090                     prose
78091                         .html(t('note.upload_explanation_with_user', { user: userLink.html() }));
78092                 });
78093             }
78094
78095
78096             function noteSaveButtons(selection) {
78097                 var osm = services$1.osm;
78098                 var hasAuth = osm && osm.authenticated();
78099
78100                 var isSelected = (_note && _note.id === context.selectedNoteID());
78101                 var buttonSection = selection.selectAll('.buttons')
78102                     .data((isSelected ? [_note] : []), function(d) { return d.status + d.id; });
78103
78104                 // exit
78105                 buttonSection.exit()
78106                     .remove();
78107
78108                 // enter
78109                 var buttonEnter = buttonSection.enter()
78110                     .append('div')
78111                     .attr('class', 'buttons');
78112
78113                 if (_note.isNew()) {
78114                     buttonEnter
78115                         .append('button')
78116                         .attr('class', 'button cancel-button secondary-action')
78117                         .text(t('confirm.cancel'));
78118
78119                     buttonEnter
78120                         .append('button')
78121                         .attr('class', 'button save-button action')
78122                         .text(t('note.save'));
78123
78124                 } else {
78125                     buttonEnter
78126                         .append('button')
78127                         .attr('class', 'button status-button action');
78128
78129                     buttonEnter
78130                         .append('button')
78131                         .attr('class', 'button comment-button action')
78132                         .text(t('note.comment'));
78133                 }
78134
78135
78136                 // update
78137                 buttonSection = buttonSection
78138                     .merge(buttonEnter);
78139
78140                 buttonSection.select('.cancel-button')   // select and propagate data
78141                     .on('click.cancel', clickCancel);
78142
78143                 buttonSection.select('.save-button')     // select and propagate data
78144                     .attr('disabled', isSaveDisabled)
78145                     .on('click.save', clickSave);
78146
78147                 buttonSection.select('.status-button')   // select and propagate data
78148                     .attr('disabled', (hasAuth ? null : true))
78149                     .text(function(d) {
78150                         var action = (d.status === 'open' ? 'close' : 'open');
78151                         var andComment = (d.newComment ? '_comment' : '');
78152                         return t('note.' + action + andComment);
78153                     })
78154                     .on('click.status', clickStatus);
78155
78156                 buttonSection.select('.comment-button')   // select and propagate data
78157                     .attr('disabled', isSaveDisabled)
78158                     .on('click.comment', clickComment);
78159
78160
78161                 function isSaveDisabled(d) {
78162                     return (hasAuth && d.status === 'open' && d.newComment) ? null : true;
78163                 }
78164             }
78165
78166
78167
78168             function clickCancel(d) {
78169                 this.blur();    // avoid keeping focus on the button - #4641
78170                 var osm = services$1.osm;
78171                 if (osm) {
78172                     osm.removeNote(d);
78173                 }
78174                 context.enter(modeBrowse(context));
78175                 dispatch$1.call('change');
78176             }
78177
78178
78179             function clickSave(d) {
78180                 this.blur();    // avoid keeping focus on the button - #4641
78181                 var osm = services$1.osm;
78182                 if (osm) {
78183                     osm.postNoteCreate(d, function(err, note) {
78184                         dispatch$1.call('change', note);
78185                     });
78186                 }
78187             }
78188
78189
78190             function clickStatus(d) {
78191                 this.blur();    // avoid keeping focus on the button - #4641
78192                 var osm = services$1.osm;
78193                 if (osm) {
78194                     var setStatus = (d.status === 'open' ? 'closed' : 'open');
78195                     osm.postNoteUpdate(d, setStatus, function(err, note) {
78196                         dispatch$1.call('change', note);
78197                     });
78198                 }
78199             }
78200
78201             function clickComment(d) {
78202                 this.blur();    // avoid keeping focus on the button - #4641
78203                 var osm = services$1.osm;
78204                 if (osm) {
78205                     osm.postNoteUpdate(d, d.status, function(err, note) {
78206                         dispatch$1.call('change', note);
78207                     });
78208                 }
78209             }
78210
78211
78212             noteEditor.note = function(val) {
78213                 if (!arguments.length) { return _note; }
78214                 _note = val;
78215                 return noteEditor;
78216             };
78217
78218
78219             return utilRebind(noteEditor, dispatch$1, 'on');
78220         }
78221
78222         function modeSelectNote(context, selectedNoteID) {
78223             var mode = {
78224                 id: 'select-note',
78225                 button: 'browse'
78226             };
78227
78228             var osm = services$1.osm;
78229             var keybinding = utilKeybinding('select-note');
78230             var noteEditor = uiNoteEditor(context)
78231                 .on('change', function() {
78232                     context.map().pan([0,0]);  // trigger a redraw
78233                     var note = checkSelectedID();
78234                     if (!note) { return; }
78235                     context.ui().sidebar
78236                         .show(noteEditor.note(note));
78237                 });
78238
78239             var behaviors = [
78240                 behaviorBreathe(),
78241                 behaviorHover(context),
78242                 behaviorSelect(context),
78243                 behaviorLasso(context),
78244                 modeDragNode(context).behavior,
78245                 modeDragNote(context).behavior
78246             ];
78247
78248             var newFeature = false;
78249
78250
78251             function checkSelectedID() {
78252                 if (!osm) { return; }
78253                 var note = osm.getNote(selectedNoteID);
78254                 if (!note) {
78255                     context.enter(modeBrowse(context));
78256                 }
78257                 return note;
78258             }
78259
78260
78261             // class the note as selected, or return to browse mode if the note is gone
78262             function selectNote(drawn) {
78263                 if (!checkSelectedID()) { return; }
78264
78265                 var selection = context.surface().selectAll('.layer-notes .note-' + selectedNoteID);
78266
78267                 if (selection.empty()) {
78268                     // Return to browse mode if selected DOM elements have
78269                     // disappeared because the user moved them out of view..
78270                     var source = event && event.type === 'zoom' && event.sourceEvent;
78271                     if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
78272                         context.enter(modeBrowse(context));
78273                     }
78274
78275                 } else {
78276                     selection
78277                         .classed('selected', true);
78278
78279                     context.selectedNoteID(selectedNoteID);
78280                 }
78281             }
78282
78283
78284             function esc() {
78285                 if (d3_select('.combobox').size()) { return; }
78286                 context.enter(modeBrowse(context));
78287             }
78288
78289
78290             mode.zoomToSelected = function() {
78291                 if (!osm) { return; }
78292                 var note = osm.getNote(selectedNoteID);
78293                 if (note) {
78294                     context.map().centerZoomEase(note.loc, 20);
78295                 }
78296             };
78297
78298
78299             mode.newFeature = function(val) {
78300                 if (!arguments.length) { return newFeature; }
78301                 newFeature = val;
78302                 return mode;
78303             };
78304
78305
78306             mode.enter = function() {
78307                 var note = checkSelectedID();
78308                 if (!note) { return; }
78309
78310                 behaviors.forEach(context.install);
78311
78312                 keybinding
78313                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
78314                     .on('⎋', esc, true);
78315
78316                 d3_select(document)
78317                     .call(keybinding);
78318
78319                 selectNote();
78320
78321                 var sidebar = context.ui().sidebar;
78322                 sidebar.show(noteEditor.note(note));
78323
78324                 // expand the sidebar, avoid obscuring the note if needed
78325                 sidebar.expand(sidebar.intersects(note.extent()));
78326
78327                 context.map()
78328                     .on('drawn.select', selectNote);
78329             };
78330
78331
78332             mode.exit = function() {
78333                 behaviors.forEach(context.uninstall);
78334
78335                 d3_select(document)
78336                     .call(keybinding.unbind);
78337
78338                 context.surface()
78339                     .selectAll('.layer-notes .selected')
78340                     .classed('selected hover', false);
78341
78342                 context.map()
78343                     .on('drawn.select', null);
78344
78345                 context.ui().sidebar
78346                     .hide();
78347
78348                 context.selectedNoteID(null);
78349             };
78350
78351
78352             return mode;
78353         }
78354
78355         function modeDragNote(context) {
78356             var mode = {
78357                 id: 'drag-note',
78358                 button: 'browse'
78359             };
78360
78361             var edit = behaviorEdit(context);
78362
78363             var _nudgeInterval;
78364             var _lastLoc;
78365             var _note;    // most current note.. dragged note may have stale datum.
78366
78367
78368             function startNudge(nudge) {
78369                 if (_nudgeInterval) { window.clearInterval(_nudgeInterval); }
78370                 _nudgeInterval = window.setInterval(function() {
78371                     context.pan(nudge);
78372                     doMove(nudge);
78373                 }, 50);
78374             }
78375
78376
78377             function stopNudge() {
78378                 if (_nudgeInterval) {
78379                     window.clearInterval(_nudgeInterval);
78380                     _nudgeInterval = null;
78381                 }
78382             }
78383
78384
78385             function origin(note) {
78386                 return context.projection(note.loc);
78387             }
78388
78389
78390             function start(note) {
78391                 _note = note;
78392                 var osm = services$1.osm;
78393                 if (osm) {
78394                     // Get latest note from cache.. The marker may have a stale datum bound to it
78395                     // and dragging it around can sometimes delete the users note comment.
78396                     _note = osm.getNote(_note.id);
78397                 }
78398
78399                 context.surface().selectAll('.note-' + _note.id)
78400                     .classed('active', true);
78401
78402                 context.perform(actionNoop());
78403                 context.enter(mode);
78404                 context.selectedNoteID(_note.id);
78405             }
78406
78407
78408             function move() {
78409                 event.sourceEvent.stopPropagation();
78410                 _lastLoc = context.projection.invert(event.point);
78411
78412                 doMove();
78413                 var nudge = geoViewportEdge(event.point, context.map().dimensions());
78414                 if (nudge) {
78415                     startNudge(nudge);
78416                 } else {
78417                     stopNudge();
78418                 }
78419             }
78420
78421
78422             function doMove(nudge) {
78423                 nudge = nudge || [0, 0];
78424
78425                 var currPoint = (event && event.point) || context.projection(_lastLoc);
78426                 var currMouse = geoVecSubtract(currPoint, nudge);
78427                 var loc = context.projection.invert(currMouse);
78428
78429                 _note = _note.move(loc);
78430
78431                 var osm = services$1.osm;
78432                 if (osm) {
78433                     osm.replaceNote(_note);  // update note cache
78434                 }
78435
78436                 context.replace(actionNoop());   // trigger redraw
78437             }
78438
78439
78440             function end() {
78441                 context.replace(actionNoop());   // trigger redraw
78442
78443                 context
78444                     .selectedNoteID(_note.id)
78445                     .enter(modeSelectNote(context, _note.id));
78446             }
78447
78448
78449             var drag = behaviorDrag()
78450                 .selector('.layer-touch.markers .target.note.new')
78451                 .surface(d3_select('#map').node())
78452                 .origin(origin)
78453                 .on('start', start)
78454                 .on('move', move)
78455                 .on('end', end);
78456
78457
78458             mode.enter = function() {
78459                 context.install(edit);
78460             };
78461
78462
78463             mode.exit = function() {
78464                 context.ui().sidebar.hover.cancel();
78465                 context.uninstall(edit);
78466
78467                 context.surface()
78468                     .selectAll('.active')
78469                     .classed('active', false);
78470
78471                 stopNudge();
78472             };
78473
78474             mode.behavior = drag;
78475
78476             return mode;
78477         }
78478
78479         function uiDataHeader() {
78480             var _datum;
78481
78482
78483             function dataHeader(selection) {
78484                 var header = selection.selectAll('.data-header')
78485                     .data(
78486                         (_datum ? [_datum] : []),
78487                         function(d) { return d.__featurehash__; }
78488                     );
78489
78490                 header.exit()
78491                     .remove();
78492
78493                 var headerEnter = header.enter()
78494                     .append('div')
78495                     .attr('class', 'data-header');
78496
78497                 var iconEnter = headerEnter
78498                     .append('div')
78499                     .attr('class', 'data-header-icon');
78500
78501                 iconEnter
78502                     .append('div')
78503                     .attr('class', 'preset-icon-28')
78504                     .call(svgIcon('#iD-icon-data', 'note-fill'));
78505
78506                 headerEnter
78507                     .append('div')
78508                     .attr('class', 'data-header-label')
78509                     .text(t('map_data.layers.custom.title'));
78510             }
78511
78512
78513             dataHeader.datum = function(val) {
78514                 if (!arguments.length) { return _datum; }
78515                 _datum = val;
78516                 return this;
78517             };
78518
78519
78520             return dataHeader;
78521         }
78522
78523         // This code assumes that the combobox values will not have duplicate entries.
78524         // It is keyed on the `value` of the entry. Data should be an array of objects like:
78525         //   [{
78526         //       value:  'display text',  // required
78527         //       title:  'hover text'     // optional
78528         //   }, ...]
78529
78530         var _comboHideTimerID;
78531
78532         function uiCombobox(context, klass) {
78533             var dispatch$1 = dispatch('accept', 'cancel');
78534             var container = context.container();
78535
78536             var _suggestions = [];
78537             var _data = [];
78538             var _fetched = {};
78539             var _selected = null;
78540             var _canAutocomplete = true;
78541             var _caseSensitive = false;
78542             var _cancelFetch = false;
78543             var _minItems = 2;
78544             var _tDown = 0;
78545             var _mouseEnterHandler, _mouseLeaveHandler;
78546
78547             var _fetcher = function(val, cb) {
78548                 cb(_data.filter(function(d) {
78549                     var terms = d.terms || [];
78550                     terms.push(d.value);
78551                     return terms.some(function(term) {
78552                         return term
78553                             .toString()
78554                             .toLowerCase()
78555                             .indexOf(val.toLowerCase()) !== -1;
78556                     });
78557                 }));
78558             };
78559
78560             var combobox = function(input, attachTo) {
78561                 if (!input || input.empty()) { return; }
78562
78563                 input
78564                     .classed('combobox-input', true)
78565                     .on('focus.combo-input', focus)
78566                     .on('blur.combo-input', blur)
78567                     .on('keydown.combo-input', keydown)
78568                     .on('keyup.combo-input', keyup)
78569                     .on('input.combo-input', change)
78570                     .on('mousedown.combo-input', mousedown)
78571                     .each(function() {
78572                         var parent = this.parentNode;
78573                         var sibling = this.nextSibling;
78574
78575                         d3_select(parent).selectAll('.combobox-caret')
78576                             .filter(function(d) { return d === input.node(); })
78577                             .data([input.node()])
78578                             .enter()
78579                             .insert('div', function() { return sibling; })
78580                             .attr('class', 'combobox-caret')
78581                             .on('mousedown.combo-caret', function() {
78582                                 event.preventDefault(); // don't steal focus from input
78583                                 input.node().focus(); // focus the input as if it was clicked
78584                                 mousedown();
78585                             })
78586                             .on('mouseup.combo-caret', function() {
78587                                 event.preventDefault(); // don't steal focus from input
78588                                 mouseup();
78589                             });
78590                     });
78591
78592
78593                 function mousedown() {
78594                     if (event.button !== 0) { return; }    // left click only
78595                     _tDown = +new Date();
78596
78597                     // clear selection
78598                     var start = input.property('selectionStart');
78599                     var end = input.property('selectionEnd');
78600                     if (start !== end) {
78601                         var val = utilGetSetValue(input);
78602                         input.node().setSelectionRange(val.length, val.length);
78603                         return;
78604                     }
78605
78606                     input.on('mouseup.combo-input', mouseup);
78607                 }
78608
78609
78610                 function mouseup() {
78611                     input.on('mouseup.combo-input', null);
78612                     if (event.button !== 0) { return; }    // left click only
78613                     if (input.node() !== document.activeElement) { return; }   // exit if this input is not focused
78614
78615                     var start = input.property('selectionStart');
78616                     var end = input.property('selectionEnd');
78617                     if (start !== end) { return; }  // exit if user is selecting
78618
78619                     // not showing or showing for a different field - try to show it.
78620                     var combo = container.selectAll('.combobox');
78621                     if (combo.empty() || combo.datum() !== input.node()) {
78622                         var tOrig = _tDown;
78623                         window.setTimeout(function() {
78624                             if (tOrig !== _tDown) { return; }   // exit if user double clicked
78625                             fetchComboData('', function() {
78626                                 show();
78627                                 render();
78628                             });
78629                         }, 250);
78630
78631                     } else {
78632                         hide();
78633                     }
78634                 }
78635
78636
78637                 function focus() {
78638                     fetchComboData('');   // prefetch values (may warm taginfo cache)
78639                 }
78640
78641
78642                 function blur() {
78643                     _comboHideTimerID = window.setTimeout(hide, 75);
78644                 }
78645
78646
78647                 function show() {
78648                     hide();   // remove any existing
78649
78650                     container
78651                         .insert('div', ':first-child')
78652                         .datum(input.node())
78653                         .attr('class', 'combobox' + (klass ? ' combobox-' + klass : ''))
78654                         .style('position', 'absolute')
78655                         .style('display', 'block')
78656                         .style('left', '0px')
78657                         .on('mousedown.combo-container', function () {
78658                             // prevent moving focus out of the input field
78659                             event.preventDefault();
78660                         });
78661
78662                     d3_select('body')
78663                         .on('scroll.combo-scroll', render, true);
78664                 }
78665
78666
78667                 function hide() {
78668                     if (_comboHideTimerID) {
78669                         window.clearTimeout(_comboHideTimerID);
78670                         _comboHideTimerID = undefined;
78671                     }
78672
78673                     container.selectAll('.combobox')
78674                         .remove();
78675
78676                     d3_select('body')
78677                         .on('scroll.combo-scroll', null);
78678                 }
78679
78680
78681                 function keydown() {
78682                     var shown = !container.selectAll('.combobox').empty();
78683                     var tagName = input.node() ? input.node().tagName.toLowerCase() : '';
78684
78685                     switch (event.keyCode) {
78686                         case 8:   // ⌫ Backspace
78687                         case 46:  // ⌦ Delete
78688                             event.stopPropagation();
78689                             _selected = null;
78690                             render();
78691                             input.on('input.combo-input', function() {
78692                                 var start = input.property('selectionStart');
78693                                 input.node().setSelectionRange(start, start);
78694                                 input.on('input.combo-input', change);
78695                             });
78696                             break;
78697
78698                         case 9:   // ⇥ Tab
78699                             accept();
78700                             break;
78701
78702                         case 13:  // ↩ Return
78703                             event.preventDefault();
78704                             event.stopPropagation();
78705                             break;
78706
78707                         case 38:  // ↑ Up arrow
78708                             if (tagName === 'textarea' && !shown) { return; }
78709                             event.preventDefault();
78710                             if (tagName === 'input' && !shown) {
78711                                 show();
78712                             }
78713                             nav(-1);
78714                             break;
78715
78716                         case 40:  // ↓ Down arrow
78717                             if (tagName === 'textarea' && !shown) { return; }
78718                             event.preventDefault();
78719                             if (tagName === 'input' && !shown) {
78720                                 show();
78721                             }
78722                             nav(+1);
78723                             break;
78724                     }
78725                 }
78726
78727
78728                 function keyup() {
78729                     switch (event.keyCode) {
78730                         case 27:  // ⎋ Escape
78731                             cancel();
78732                             break;
78733
78734                         case 13:  // ↩ Return
78735                             accept();
78736                             break;
78737                     }
78738                 }
78739
78740
78741                 // Called whenever the input value is changed (e.g. on typing)
78742                 function change() {
78743                     fetchComboData(value(), function() {
78744                         _selected = null;
78745                         var val = input.property('value');
78746
78747                         if (_suggestions.length) {
78748                             if (input.property('selectionEnd') === val.length) {
78749                                 _selected = tryAutocomplete();
78750                             }
78751
78752                             if (!_selected) {
78753                                 _selected = val;
78754                             }
78755                         }
78756
78757                         if (val.length) {
78758                             var combo = container.selectAll('.combobox');
78759                             if (combo.empty()) {
78760                                 show();
78761                             }
78762                         } else {
78763                             hide();
78764                         }
78765
78766                         render();
78767                     });
78768                 }
78769
78770
78771                 // Called when the user presses up/down arrows to navigate the list
78772                 function nav(dir) {
78773                     if (_suggestions.length) {
78774                         // try to determine previously selected index..
78775                         var index = -1;
78776                         for (var i = 0; i < _suggestions.length; i++) {
78777                             if (_selected && _suggestions[i].value === _selected) {
78778                                 index = i;
78779                                 break;
78780                             }
78781                         }
78782
78783                         // pick new _selected
78784                         index = Math.max(Math.min(index + dir, _suggestions.length - 1), 0);
78785                         _selected = _suggestions[index].value;
78786                         input.property('value', _selected);
78787                     }
78788
78789                     render();
78790                     ensureVisible();
78791                 }
78792
78793
78794                 function ensureVisible() {
78795                     var combo = container.selectAll('.combobox');
78796                     if (combo.empty()) { return; }
78797
78798                     var containerRect = container.node().getBoundingClientRect();
78799                     var comboRect = combo.node().getBoundingClientRect();
78800
78801                     if (comboRect.bottom > containerRect.bottom) {
78802                         var node = attachTo ? attachTo.node() : input.node();
78803                         node.scrollIntoView({ behavior: 'instant', block: 'center' });
78804                         render();
78805                     }
78806
78807                     // https://stackoverflow.com/questions/11039885/scrollintoview-causing-the-whole-page-to-move
78808                     var selected = combo.selectAll('.combobox-option.selected').node();
78809                     if (selected) {
78810                         selected.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
78811                     }
78812                 }
78813
78814
78815                 function value() {
78816                     var value = input.property('value');
78817                     var start = input.property('selectionStart');
78818                     var end = input.property('selectionEnd');
78819
78820                     if (start && end) {
78821                         value = value.substring(0, start);
78822                     }
78823
78824                     return value;
78825                 }
78826
78827
78828                 function fetchComboData(v, cb) {
78829                     _cancelFetch = false;
78830
78831                     _fetcher.call(input, v, function(results) {
78832                         // already chose a value, don't overwrite or autocomplete it
78833                         if (_cancelFetch) { return; }
78834
78835                         _suggestions = results;
78836                         results.forEach(function(d) { _fetched[d.value] = d; });
78837
78838                         if (cb) {
78839                             cb();
78840                         }
78841                     });
78842                 }
78843
78844
78845                 function tryAutocomplete() {
78846                     if (!_canAutocomplete) { return; }
78847
78848                     var val = _caseSensitive ? value() : value().toLowerCase();
78849                     if (!val) { return; }
78850
78851                     // Don't autocomplete if user is typing a number - #4935
78852                     if (!isNaN(parseFloat(val)) && isFinite(val)) { return; }
78853
78854                     var bestIndex = -1;
78855                     for (var i = 0; i < _suggestions.length; i++) {
78856                         var suggestion = _suggestions[i].value;
78857                         var compare = _caseSensitive ? suggestion : suggestion.toLowerCase();
78858
78859                         // if search string matches suggestion exactly, pick it..
78860                         if (compare === val) {
78861                             bestIndex = i;
78862                             break;
78863
78864                         // otherwise lock in the first result that starts with the search string..
78865                         } else if (bestIndex === -1 && compare.indexOf(val) === 0) {
78866                             bestIndex = i;
78867                         }
78868                     }
78869
78870                     if (bestIndex !== -1) {
78871                         var bestVal = _suggestions[bestIndex].value;
78872                         input.property('value', bestVal);
78873                         input.node().setSelectionRange(val.length, bestVal.length);
78874                         return bestVal;
78875                     }
78876                 }
78877
78878
78879                 function render() {
78880                     if (_suggestions.length < _minItems || document.activeElement !== input.node()) {
78881                         hide();
78882                         return;
78883                     }
78884
78885                     var shown = !container.selectAll('.combobox').empty();
78886                     if (!shown) { return; }
78887
78888                     var combo = container.selectAll('.combobox');
78889                     var options = combo.selectAll('.combobox-option')
78890                         .data(_suggestions, function(d) { return d.value; });
78891
78892                     options.exit()
78893                         .remove();
78894
78895                     // enter/update
78896                     options.enter()
78897                         .append('a')
78898                         .attr('class', 'combobox-option')
78899                         .attr('title', function(d) { return d.title; })
78900                         .text(function(d) { return d.display || d.value; })
78901                         .on('mouseenter', _mouseEnterHandler)
78902                         .on('mouseleave', _mouseLeaveHandler)
78903                         .merge(options)
78904                         .classed('selected', function(d) { return d.value === _selected; })
78905                         .on('click.combo-option', accept)
78906                         .order();
78907
78908                     var node = attachTo ? attachTo.node() : input.node();
78909                     var rect = node.getBoundingClientRect();
78910
78911                     combo
78912                         .style('left', (rect.left + 5) + 'px')
78913                         .style('width', (rect.width - 10) + 'px')
78914                         .style('top', rect.height + rect.top + 'px');
78915                 }
78916
78917
78918                 // Dispatches an 'accept' event
78919                 // Then hides the combobox.
78920                 function accept(d) {
78921                     _cancelFetch = true;
78922                     var thiz = input.node();
78923
78924                     if (d) {   // user clicked on a suggestion
78925                         utilGetSetValue(input, d.value);    // replace field contents
78926                         utilTriggerEvent(input, 'change');
78927                     }
78928
78929                     // clear (and keep) selection
78930                     var val = utilGetSetValue(input);
78931                     thiz.setSelectionRange(val.length, val.length);
78932
78933                     d = _fetched[val];
78934                     dispatch$1.call('accept', thiz, d, val);
78935                     hide();
78936                 }
78937
78938
78939                 // Dispatches an 'cancel' event
78940                 // Then hides the combobox.
78941                 function cancel() {
78942                     _cancelFetch = true;
78943                     var thiz = input.node();
78944
78945                     // clear (and remove) selection, and replace field contents
78946                     var val = utilGetSetValue(input);
78947                     var start = input.property('selectionStart');
78948                     var end = input.property('selectionEnd');
78949                     val = val.slice(0, start) + val.slice(end);
78950                     utilGetSetValue(input, val);
78951                     thiz.setSelectionRange(val.length, val.length);
78952
78953                     dispatch$1.call('cancel', thiz);
78954                     hide();
78955                 }
78956
78957             };
78958
78959
78960             combobox.canAutocomplete = function(val) {
78961                 if (!arguments.length) { return _canAutocomplete; }
78962                 _canAutocomplete = val;
78963                 return combobox;
78964             };
78965
78966             combobox.caseSensitive = function(val) {
78967                 if (!arguments.length) { return _caseSensitive; }
78968                 _caseSensitive = val;
78969                 return combobox;
78970             };
78971
78972             combobox.data = function(val) {
78973                 if (!arguments.length) { return _data; }
78974                 _data = val;
78975                 return combobox;
78976             };
78977
78978             combobox.fetcher = function(val) {
78979                 if (!arguments.length) { return _fetcher; }
78980                 _fetcher = val;
78981                 return combobox;
78982             };
78983
78984             combobox.minItems = function(val) {
78985                 if (!arguments.length) { return _minItems; }
78986                 _minItems = val;
78987                 return combobox;
78988             };
78989
78990             combobox.itemsMouseEnter = function(val) {
78991                 if (!arguments.length) { return _mouseEnterHandler; }
78992                 _mouseEnterHandler = val;
78993                 return combobox;
78994             };
78995
78996             combobox.itemsMouseLeave = function(val) {
78997                 if (!arguments.length) { return _mouseLeaveHandler; }
78998                 _mouseLeaveHandler = val;
78999                 return combobox;
79000             };
79001
79002             return utilRebind(combobox, dispatch$1, 'on');
79003         }
79004
79005
79006         uiCombobox.off = function(input) {
79007             input
79008                 .on('focus.combo-input', null)
79009                 .on('blur.combo-input', null)
79010                 .on('keydown.combo-input', null)
79011                 .on('keyup.combo-input', null)
79012                 .on('input.combo-input', null)
79013                 .on('mousedown.combo-input', null)
79014                 .on('mouseup.combo-input', null);
79015
79016
79017             d3_select('body')
79018                 .on('scroll.combo-scroll', null);
79019         };
79020
79021         // toggles the visibility of ui elements, using a combination of the
79022         // hide class, which sets display=none, and a d3 transition for opacity.
79023         // this will cause blinking when called repeatedly, so check that the
79024         // value actually changes between calls.
79025         function uiToggle(show, callback) {
79026             return function(selection) {
79027                 selection
79028                     .style('opacity', show ? 0 : 1)
79029                     .classed('hide', false)
79030                     .transition()
79031                     .style('opacity', show ? 1 : 0)
79032                     .on('end', function() {
79033                         d3_select(this)
79034                             .classed('hide', !show)
79035                             .style('opacity', null);
79036                         if (callback) { callback.apply(this); }
79037                     });
79038             };
79039         }
79040
79041         function uiDisclosure(context, key, expandedDefault) {
79042             var dispatch$1 = dispatch('toggled');
79043             var _preference = (context.storage('disclosure.' + key + '.expanded'));
79044             var _expanded = (_preference === null ? !!expandedDefault : (_preference === 'true'));
79045             var _title;
79046             var _updatePreference = true;
79047             var _content = function () {};
79048
79049
79050             var disclosure = function(selection) {
79051                 var hideToggle = selection.selectAll('.hide-toggle-' + key)
79052                     .data([0]);
79053
79054                 // enter
79055                 var hideToggleEnter = hideToggle.enter()
79056                     .append('a')
79057                     .attr('href', '#')
79058                     .attr('class', 'hide-toggle hide-toggle-' + key)
79059                     .call(svgIcon('', 'pre-text', 'hide-toggle-icon'));
79060
79061                 hideToggleEnter
79062                     .append('span')
79063                     .attr('class', 'hide-toggle-text');
79064
79065                 // update
79066                 hideToggle = hideToggleEnter
79067                     .merge(hideToggle);
79068
79069                 hideToggle
79070                     .on('click', toggle)
79071                     .classed('expanded', _expanded);
79072
79073                 hideToggle.selectAll('.hide-toggle-text')
79074                     .text(_title);
79075
79076                 hideToggle.selectAll('.hide-toggle-icon')
79077                     .attr('xlink:href', _expanded ? '#iD-icon-down'
79078                         : (textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'
79079                     );
79080
79081
79082                 var wrap = selection.selectAll('.disclosure-wrap')
79083                     .data([0]);
79084
79085                 // enter/update
79086                 wrap = wrap.enter()
79087                     .append('div')
79088                     .attr('class', 'disclosure-wrap disclosure-wrap-' + key)
79089                     .merge(wrap)
79090                     .classed('hide', !_expanded);
79091
79092                 if (_expanded) {
79093                     wrap
79094                         .call(_content);
79095                 }
79096
79097
79098                 function toggle() {
79099                     event.preventDefault();
79100
79101                     _expanded = !_expanded;
79102
79103                     if (_updatePreference) {
79104                         context.storage('disclosure.' + key + '.expanded', _expanded);
79105                     }
79106
79107                     hideToggle
79108                         .classed('expanded', _expanded);
79109
79110                     hideToggle.selectAll('.hide-toggle-icon')
79111                         .attr('xlink:href', _expanded ? '#iD-icon-down'
79112                             : (textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'
79113                         );
79114
79115                     wrap
79116                         .call(uiToggle(_expanded));
79117
79118                     if (_expanded) {
79119                         wrap
79120                             .call(_content);
79121                     }
79122
79123                     dispatch$1.call('toggled', this, _expanded);
79124                 }
79125             };
79126
79127
79128             disclosure.title = function(val) {
79129                 if (!arguments.length) { return _title; }
79130                 _title = val;
79131                 return disclosure;
79132             };
79133
79134
79135             disclosure.expanded = function(val) {
79136                 if (!arguments.length) { return _expanded; }
79137                 _expanded = val;
79138                 return disclosure;
79139             };
79140
79141
79142             disclosure.updatePreference = function(val) {
79143                 if (!arguments.length) { return _updatePreference; }
79144                 _updatePreference = val;
79145                 return disclosure;
79146             };
79147
79148
79149             disclosure.content = function(val) {
79150                 if (!arguments.length) { return _content; }
79151                 _content = val;
79152                 return disclosure;
79153             };
79154
79155
79156             return utilRebind(disclosure, dispatch$1, 'on');
79157         }
79158
79159         // Pass `which` object of the form:
79160         // {
79161         //   key: 'string',     // required
79162         //   value: 'string'    // optional
79163         // }
79164         //   -or-
79165         // {
79166         //   rtype: 'string'    // relation type  (e.g. 'multipolygon')
79167         // }
79168         //   -or-
79169         // {
79170         //   qid: 'string'      // brand wikidata  (e.g. 'Q37158')
79171         // }
79172         //
79173         function uiTagReference(what) {
79174             var wikibase = what.qid ? services$1.wikidata : services$1.osmWikibase;
79175             var tagReference = {};
79176
79177             var _button = d3_select(null);
79178             var _body = d3_select(null);
79179             var _loaded;
79180             var _showing;
79181
79182
79183             function load() {
79184                 if (!wikibase) { return; }
79185
79186                 _button
79187                     .classed('tag-reference-loading', true);
79188
79189                 wikibase.getDocs(what, gotDocs);
79190             }
79191
79192
79193             function gotDocs(err, docs) {
79194                 _body.html('');
79195
79196                 if (!docs || !docs.title) {
79197                     _body
79198                         .append('p')
79199                         .attr('class', 'tag-reference-description')
79200                         .text(t('inspector.no_documentation_key'));
79201                     done();
79202                     return;
79203                 }
79204
79205                 if (docs.imageURL) {
79206                     _body
79207                         .append('img')
79208                         .attr('class', 'tag-reference-wiki-image')
79209                         .attr('src', docs.imageURL)
79210                         .on('load', function() { done(); })
79211                         .on('error', function() { d3_select(this).remove(); done(); });
79212                 } else {
79213                     done();
79214                 }
79215
79216                 _body
79217                     .append('p')
79218                     .attr('class', 'tag-reference-description')
79219                     .text(docs.description || t('inspector.no_documentation_key'))
79220                     .append('a')
79221                     .attr('class', 'tag-reference-edit')
79222                     .attr('target', '_blank')
79223                     .attr('tabindex', -1)
79224                     .attr('title', t('inspector.edit_reference'))
79225                     .attr('href', docs.editURL)
79226                     .call(svgIcon('#iD-icon-edit', 'inline'));
79227
79228                 if (docs.wiki) {
79229                     _body
79230                       .append('a')
79231                       .attr('class', 'tag-reference-link')
79232                       .attr('target', '_blank')
79233                       .attr('tabindex', -1)
79234                       .attr('href', docs.wiki.url)
79235                       .call(svgIcon('#iD-icon-out-link', 'inline'))
79236                       .append('span')
79237                       .text(t(docs.wiki.text));
79238                 }
79239
79240                 // Add link to info about "good changeset comments" - #2923
79241                 if (what.key === 'comment') {
79242                     _body
79243                         .append('a')
79244                         .attr('class', 'tag-reference-comment-link')
79245                         .attr('target', '_blank')
79246                         .attr('tabindex', -1)
79247                         .call(svgIcon('#iD-icon-out-link', 'inline'))
79248                         .attr('href', t('commit.about_changeset_comments_link'))
79249                         .append('span')
79250                         .text(t('commit.about_changeset_comments'));
79251                 }
79252             }
79253
79254
79255             function done() {
79256                 _loaded = true;
79257
79258                 _button
79259                     .classed('tag-reference-loading', false);
79260
79261                 _body
79262                     .classed('expanded', true)
79263                     .transition()
79264                     .duration(200)
79265                     .style('max-height', '200px')
79266                     .style('opacity', '1');
79267
79268                 _showing = true;
79269
79270                 _button.selectAll('svg.icon use').each(function() {
79271                     var iconUse = d3_select(this);
79272                     if (iconUse.attr('href') === '#iD-icon-info') {
79273                         iconUse.attr('href', '#iD-icon-info-filled');
79274                     }
79275                 });
79276             }
79277
79278
79279             function hide() {
79280                 _body
79281                     .transition()
79282                     .duration(200)
79283                     .style('max-height', '0px')
79284                     .style('opacity', '0')
79285                     .on('end', function () {
79286                         _body.classed('expanded', false);
79287                     });
79288
79289                 _showing = false;
79290
79291                 _button.selectAll('svg.icon use').each(function() {
79292                     var iconUse = d3_select(this);
79293                     if (iconUse.attr('href') === '#iD-icon-info-filled') {
79294                         iconUse.attr('href', '#iD-icon-info');
79295                     }
79296                 });
79297
79298             }
79299
79300
79301             tagReference.button = function(selection, klass, iconName) {
79302                 _button = selection.selectAll('.tag-reference-button')
79303                     .data([0]);
79304
79305                 _button = _button.enter()
79306                     .append('button')
79307                     .attr('class', 'tag-reference-button ' + klass)
79308                     .attr('title', t('icons.information'))
79309                     .attr('tabindex', -1)
79310                     .call(svgIcon('#iD-icon-' + (iconName || 'inspect')))
79311                     .merge(_button);
79312
79313                 _button
79314                     .on('click', function () {
79315                         event.stopPropagation();
79316                         event.preventDefault();
79317                         this.blur();    // avoid keeping focus on the button - #4641
79318                         if (_showing) {
79319                             hide();
79320                         } else if (_loaded) {
79321                             done();
79322                         } else {
79323                             load();
79324                         }
79325                     });
79326             };
79327
79328
79329             tagReference.body = function(selection) {
79330                 var itemID = what.qid || what.rtype || (what.key + '-' + what.value);
79331                 _body = selection.selectAll('.tag-reference-body')
79332                     .data([itemID], function(d) { return d; });
79333
79334                 _body.exit()
79335                     .remove();
79336
79337                 _body = _body.enter()
79338                     .append('div')
79339                     .attr('class', 'tag-reference-body')
79340                     .style('max-height', '0')
79341                     .style('opacity', '0')
79342                     .merge(_body);
79343
79344                 if (_showing === false) {
79345                     hide();
79346                 }
79347             };
79348
79349
79350             tagReference.showing = function(val) {
79351                 if (!arguments.length) { return _showing; }
79352                 _showing = val;
79353                 return tagReference;
79354             };
79355
79356
79357             return tagReference;
79358         }
79359
79360         function uiRawTagEditor(context) {
79361             var taginfo = services$1.taginfo;
79362             var dispatch$1 = dispatch('change');
79363             var availableViews = [
79364                 { id: 'text', icon: '#fas-i-cursor' },
79365                 { id: 'list', icon: '#fas-th-list' }
79366             ];
79367
79368             var _tagView = (context.storage('raw-tag-editor-view') || 'list');   // 'list, 'text'
79369             var _readOnlyTags = [];
79370             // the keys in the order we want them to display
79371             var _orderedKeys = [];
79372             var _showBlank = false;
79373             var _updatePreference = true;
79374             var _expanded = false;
79375             var _pendingChange = null;
79376             var _state;
79377             var _preset;
79378             var _tags;
79379             var _entityID;
79380
79381
79382             function rawTagEditor(selection) {
79383                 var count = Object.keys(_tags).filter(function(d) { return d; }).length;
79384
79385                 var disclosure = uiDisclosure(context, 'raw_tag_editor', false)
79386                     .title(t('inspector.all_tags') + ' (' + count + ')')
79387                     .on('toggled', toggled)
79388                     .updatePreference(_updatePreference)
79389                     .content(content);
79390
79391                 // Sometimes we want to force the raw_tag_editor to be opened/closed..
79392                 // When undefined, uiDisclosure will use the user's stored preference.
79393                 if (_expanded !== undefined) {
79394                     disclosure.expanded(_expanded);
79395                 }
79396
79397                 selection.call(disclosure);
79398
79399                 function toggled(expanded) {
79400                     _expanded = expanded;
79401                     if (expanded) {
79402                         selection.node().parentNode.scrollTop += 200;
79403                     }
79404                 }
79405             }
79406
79407
79408             function content(wrap) {
79409
79410                 // remove deleted keys
79411                 _orderedKeys = _orderedKeys.filter(function(key) {
79412                     return _tags[key] !== undefined;
79413                 });
79414
79415                 // When switching to a different entity or changing the state (hover/select)
79416                 // reorder the keys alphabetically.
79417                 // We trigger this by emptying the `_orderedKeys` array, then it will be rebuilt here.
79418                 // Otherwise leave their order alone - #5857, #5927
79419                 var all = Object.keys(_tags).sort();
79420                 var missingKeys = utilArrayDifference(all, _orderedKeys);
79421                 for (var i in missingKeys) {
79422                     _orderedKeys.push(missingKeys[i]);
79423                 }
79424
79425                 // assemble row data
79426                 var rowData = _orderedKeys.map(function(key, i) {
79427                     return { index: i, key: key, value: _tags[key] };
79428                 });
79429
79430                 // append blank row last, if necessary
79431                 if (!rowData.length || _showBlank) {
79432                     _showBlank = false;
79433                     rowData.push({ index: rowData.length, key: '', value: '' });
79434                 }
79435
79436
79437                 // View Options
79438                 var options = wrap.selectAll('.raw-tag-options')
79439                     .data([0]);
79440
79441                 var optionsEnter = options.enter()
79442                     .append('div')
79443                     .attr('class', 'raw-tag-options');
79444
79445                 var optionEnter = optionsEnter.selectAll('.raw-tag-option')
79446                     .data(availableViews, function(d) { return d.id; })
79447                     .enter();
79448
79449                 optionEnter
79450                     .append('button')
79451                     .attr('class', function(d) {
79452                         return 'raw-tag-option raw-tag-option-' + d.id + (_tagView === d.id ? ' selected' : '');
79453                     })
79454                     .attr('title', function(d) { return d.id; })
79455                     .on('click', function(d) {
79456                         _tagView = d.id;
79457                         context.storage('raw-tag-editor-view', d.id);
79458
79459                         wrap.selectAll('.raw-tag-option')
79460                             .classed('selected', function(datum) { return datum === d; });
79461
79462                         wrap.selectAll('.tag-text')
79463                             .classed('hide', (d.id !== 'text'))
79464                             .each(setTextareaHeight);
79465
79466                         wrap.selectAll('.tag-list, .add-row')
79467                             .classed('hide', (d.id !== 'list'));
79468                     })
79469                     .each(function(d) {
79470                         d3_select(this)
79471                             .call(svgIcon(d.icon));
79472                     });
79473
79474
79475                 // View as Text
79476                 var textData = rowsToText(rowData);
79477                 var textarea = wrap.selectAll('.tag-text')
79478                     .data([0]);
79479
79480                 textarea = textarea.enter()
79481                     .append('textarea')
79482                     .attr('class', 'tag-text' + (_tagView !== 'text' ? ' hide' : ''))
79483                     .call(utilNoAuto)
79484                     .attr('spellcheck', 'false')
79485                     .merge(textarea);
79486
79487                 textarea
79488                     .call(utilGetSetValue, textData)
79489                     .each(setTextareaHeight)
79490                     .on('input', setTextareaHeight)
79491                     .on('blur', textChanged)
79492                     .on('change', textChanged);
79493
79494
79495                 // View as List
79496                 var list = wrap.selectAll('.tag-list')
79497                     .data([0]);
79498
79499                 list = list.enter()
79500                     .append('ul')
79501                     .attr('class', 'tag-list' + (_tagView !== 'list' ? ' hide' : ''))
79502                     .merge(list);
79503
79504
79505                 // Container for the Add button
79506                 var addRowEnter = wrap.selectAll('.add-row')
79507                     .data([0])
79508                     .enter()
79509                     .append('div')
79510                     .attr('class', 'add-row' + (_tagView !== 'list' ? ' hide' : ''));
79511
79512                 addRowEnter
79513                     .append('button')
79514                     .attr('class', 'add-tag')
79515                     .call(svgIcon('#iD-icon-plus', 'light'))
79516                     .on('click', addTag);
79517
79518                 addRowEnter
79519                     .append('div')
79520                     .attr('class', 'space-value');   // preserve space
79521
79522                 addRowEnter
79523                     .append('div')
79524                     .attr('class', 'space-buttons');  // preserve space
79525
79526
79527                 // Tag list items
79528                 var items = list.selectAll('.tag-row')
79529                     .data(rowData, function(d) { return d.key; });
79530
79531                 items.exit()
79532                     .each(unbind)
79533                     .remove();
79534
79535
79536                 // Enter
79537                 var itemsEnter = items.enter()
79538                     .append('li')
79539                     .attr('class', 'tag-row')
79540                     .classed('readonly', isReadOnly);
79541
79542                 var innerWrap = itemsEnter.append('div')
79543                     .attr('class', 'inner-wrap');
79544
79545                 innerWrap
79546                     .append('div')
79547                     .attr('class', 'key-wrap')
79548                     .append('input')
79549                     .property('type', 'text')
79550                     .attr('class', 'key')
79551                     .attr('maxlength', 255)
79552                     .call(utilNoAuto)
79553                     .on('blur', keyChange)
79554                     .on('change', keyChange);
79555
79556                 innerWrap
79557                     .append('div')
79558                     .attr('class', 'value-wrap')
79559                     .append('input')
79560                     .property('type', 'text')
79561                     .attr('class', 'value')
79562                     .attr('maxlength', 255)
79563                     .call(utilNoAuto)
79564                     .on('blur', valueChange)
79565                     .on('change', valueChange)
79566                     .on('keydown.push-more', pushMore);
79567
79568                 innerWrap
79569                     .append('button')
79570                     .attr('tabindex', -1)
79571                     .attr('class', 'form-field-button remove')
79572                     .attr('title', t('icons.remove'))
79573                     .call(svgIcon('#iD-operation-delete'));
79574
79575
79576                 // Update
79577                 items = items
79578                     .merge(itemsEnter)
79579                     .sort(function(a, b) { return a.index - b.index; });
79580
79581                 items
79582                     .each(function(d) {
79583                         var row = d3_select(this);
79584                         var key = row.select('input.key');      // propagate bound data
79585                         var value = row.select('input.value');  // propagate bound data
79586
79587                         if (_entityID && taginfo && _state !== 'hover') {
79588                             bindTypeahead(key, value);
79589                         }
79590
79591                         var isRelation = (_entityID && context.entity(_entityID).type === 'relation');
79592                         var reference;
79593
79594                         if (isRelation && d.key === 'type') {
79595                             reference = uiTagReference({ rtype: d.value });
79596                         } else {
79597                             reference = uiTagReference({ key: d.key, value: d.value });
79598                         }
79599
79600                         if (_state === 'hover') {
79601                             reference.showing(false);
79602                         }
79603
79604                         row.select('.inner-wrap')      // propagate bound data
79605                             .call(reference.button);
79606
79607                         row.call(reference.body);
79608
79609                         row.select('button.remove');   // propagate bound data
79610                     });
79611
79612                 items.selectAll('input.key')
79613                     .attr('title', function(d) { return d.key; })
79614                     .call(utilGetSetValue, function(d) { return d.key; })
79615                     .attr('readonly', function(d) {
79616                         return isReadOnly(d) || null;
79617                     });
79618
79619                 items.selectAll('input.value')
79620                     .attr('title', function(d) { return d.value; })
79621                     .call(utilGetSetValue, function(d) { return d.value; })
79622                     .attr('readonly', function(d) {
79623                         return isReadOnly(d) || null;
79624                     });
79625
79626                 items.selectAll('button.remove')
79627                     .on('mousedown', removeTag);  // 'click' fires too late - #5878
79628
79629
79630
79631                 function isReadOnly(d) {
79632                     for (var i = 0; i < _readOnlyTags.length; i++) {
79633                         if (d.key.match(_readOnlyTags[i]) !== null) {
79634                             return true;
79635                         }
79636                     }
79637                     return false;
79638                 }
79639
79640
79641                 function setTextareaHeight() {
79642                     if (_tagView !== 'text') { return; }
79643
79644                     var selection = d3_select(this);
79645                     selection.style('height', null);
79646                     selection.style('height', selection.node().scrollHeight + 5 + 'px');
79647                 }
79648
79649
79650                 function stringify(s) {
79651                     return JSON.stringify(s).slice(1, -1);   // without leading/trailing "
79652                 }
79653
79654                 function unstringify(s) {
79655                     var leading = '';
79656                     var trailing = '';
79657                     if (s.length < 1 || s.charAt(0) !== '"') {
79658                         leading = '"';
79659                     }
79660                     if (s.length < 2 || s.charAt(s.length - 1) !== '"' ||
79661                         (s.charAt(s.length - 1) === '"' && s.charAt(s.length - 2) === '\\')
79662                     ) {
79663                         trailing = '"';
79664                     }
79665                     return JSON.parse(leading + s + trailing);
79666                 }
79667
79668
79669                 function rowsToText(rows) {
79670                     var str = rows
79671                         .filter(function(row) { return row.key && row.key.trim() !== ''; })
79672                         .map(function(row) {
79673                             var val = row.value ? stringify(row.value) : '';
79674                             return stringify(row.key) + '=' + val;
79675                         })
79676                         .join('\n');
79677
79678                     return _state === 'hover' ? str : str + '\n';
79679                 }
79680
79681
79682                 function textChanged() {
79683                     var newText = this.value.trim();
79684                     var newTags = {};
79685                     newText.split('\n').forEach(function(row) {
79686                         var m = row.match(/^\s*([^=]+)=(.*)$/);
79687                         if (m !== null) {
79688                             var k = unstringify(m[1].trim());
79689                             var v = unstringify(m[2].trim());
79690                             newTags[k] = v;
79691                         }
79692                     });
79693
79694                     var tagDiff = utilTagDiff(_tags, newTags);
79695                     if (!tagDiff.length) { return; }
79696
79697                     _pendingChange  = _pendingChange || {};
79698
79699                     tagDiff.forEach(function(change) {
79700                         if (isReadOnly({ key: change.key })) { return; }
79701
79702                         if (change.type === '-') {
79703                             _pendingChange[change.key] = undefined;
79704                         } else if (change.type === '+') {
79705                             _pendingChange[change.key] = change.newVal || '';
79706                         }
79707                     });
79708
79709                     scheduleChange();
79710                 }
79711
79712
79713                 function pushMore() {
79714                     // if pressing Tab on the last value field with content, add a blank row
79715                     if (event.keyCode === 9 && !event.shiftKey &&
79716                         list.selectAll('li:last-child input.value').node() === this &&
79717                         utilGetSetValue(d3_select(this))) {
79718                         addTag();
79719                     }
79720                 }
79721
79722
79723                 function bindTypeahead(key, value) {
79724                     if (isReadOnly(key.datum())) { return; }
79725
79726                     var geometry = context.geometry(_entityID);
79727
79728                     key.call(uiCombobox(context, 'tag-key')
79729                         .fetcher(function(value, callback) {
79730                             taginfo.keys({
79731                                 debounce: true,
79732                                 geometry: geometry,
79733                                 query: value
79734                             }, function(err, data) {
79735                                 if (!err) {
79736                                     var filtered = data.filter(function(d) { return _tags[d.value] === undefined; });
79737                                     callback(sort(value, filtered));
79738                                 }
79739                             });
79740                         }));
79741
79742                     value.call(uiCombobox(context, 'tag-value')
79743                         .fetcher(function(value, callback) {
79744                             taginfo.values({
79745                                 debounce: true,
79746                                 key: utilGetSetValue(key),
79747                                 geometry: geometry,
79748                                 query: value
79749                             }, function(err, data) {
79750                                 if (!err) { callback(sort(value, data)); }
79751                             });
79752                         }));
79753
79754
79755                     function sort(value, data) {
79756                         var sameletter = [];
79757                         var other = [];
79758                         for (var i = 0; i < data.length; i++) {
79759                             if (data[i].value.substring(0, value.length) === value) {
79760                                 sameletter.push(data[i]);
79761                             } else {
79762                                 other.push(data[i]);
79763                             }
79764                         }
79765                         return sameletter.concat(other);
79766                     }
79767                 }
79768
79769
79770                 function unbind() {
79771                     var row = d3_select(this);
79772
79773                     row.selectAll('input.key')
79774                         .call(uiCombobox.off);
79775
79776                     row.selectAll('input.value')
79777                         .call(uiCombobox.off);
79778                 }
79779
79780
79781                 function keyChange(d) {
79782                     var kOld = d.key;
79783                     var kNew = this.value.trim();
79784                     var row = this.parentNode.parentNode;
79785                     var inputVal = d3_select(row).selectAll('input.value');
79786                     var vNew = utilGetSetValue(inputVal);
79787
79788                     // allow no change if the key should be readonly
79789                     if (isReadOnly({ key: kNew })) {
79790                         this.value = kOld;
79791                         return;
79792                     }
79793
79794                     // switch focus if key is already in use
79795                     if (kNew && kNew !== kOld) {
79796                         if (_tags[kNew] !== undefined) {      // new key is already in use
79797                             this.value = kOld;                // reset the key
79798                             list.selectAll('input.value')
79799                                 .each(function(d) {
79800                                     if (d.key === kNew) {     // send focus to that other value combo instead
79801                                         var input = d3_select(this).node();
79802                                         input.focus();
79803                                         input.select();
79804                                     }
79805                                 });
79806                             return;
79807                         }
79808                     }
79809
79810                     _pendingChange  = _pendingChange || {};
79811
79812                     // exit if we are currently about to delete this row anyway - #6366
79813                     if (_pendingChange.hasOwnProperty(d.key) && _pendingChange[d.key] === undefined) { return; }
79814
79815                     if (kOld) {
79816                         _pendingChange[kOld] = undefined;
79817                     }
79818
79819                     _pendingChange[kNew] = vNew;
79820
79821                     // update the ordered key index so this row doesn't change position
79822                     var existingKeyIndex = _orderedKeys.indexOf(kOld);
79823                     if (existingKeyIndex !== -1) { _orderedKeys[existingKeyIndex] = kNew; }
79824
79825                     d.key = kNew;    // update datum to avoid exit/enter on tag update
79826                     d.value = vNew;
79827
79828                     this.value = kNew;
79829                     utilGetSetValue(inputVal, vNew);
79830                     scheduleChange();
79831                 }
79832
79833
79834                 function valueChange(d) {
79835                     if (isReadOnly(d)) { return; }
79836
79837                     _pendingChange  = _pendingChange || {};
79838
79839                     // exit if we are currently about to delete this row anyway - #6366
79840                     if (_pendingChange.hasOwnProperty(d.key) && _pendingChange[d.key] === undefined) { return; }
79841
79842                     _pendingChange[d.key] = this.value;
79843                     scheduleChange();
79844                 }
79845
79846
79847                 function removeTag(d) {
79848                     if (isReadOnly(d)) { return; }
79849
79850                     if (d.key === '') {    // removing the blank row
79851                         _showBlank = false;
79852                         content(wrap);
79853
79854                     } else {
79855                         // remove the key from the ordered key index
79856                         _orderedKeys = _orderedKeys.filter(function(key) { return key !== d.key; });
79857
79858                         _pendingChange  = _pendingChange || {};
79859                         _pendingChange[d.key] = undefined;
79860                         scheduleChange();
79861                     }
79862                 }
79863
79864
79865                 function addTag() {
79866                     // Delay render in case this click is blurring an edited combo.
79867                     // Without the setTimeout, the `content` render would wipe out the pending tag change.
79868                     window.setTimeout(function() {
79869                         _showBlank = true;
79870                         content(wrap);
79871                         list.selectAll('li:last-child input.key').node().focus();
79872                     }, 20);
79873                 }
79874
79875
79876                 function scheduleChange() {
79877                     // Delay change in case this change is blurring an edited combo. - #5878
79878                     window.setTimeout(function() {
79879                         dispatch$1.call('change', this, _pendingChange);
79880                         _pendingChange = null;
79881                     }, 10);
79882                 }
79883
79884             }
79885
79886
79887             rawTagEditor.state = function(val) {
79888                 if (!arguments.length) { return _state; }
79889                 if (_state !== val) {
79890                     _orderedKeys = [];
79891                     _state = val;
79892                 }
79893                 return rawTagEditor;
79894             };
79895
79896
79897             rawTagEditor.preset = function(val) {
79898                 if (!arguments.length) { return _preset; }
79899                 _preset = val;
79900                 if (_preset.isFallback()) {
79901                     _expanded = true;
79902                     _updatePreference = false;
79903                 } else {
79904                     _expanded = undefined;
79905                     _updatePreference = true;
79906                 }
79907                 return rawTagEditor;
79908             };
79909
79910
79911             rawTagEditor.tags = function(val) {
79912                 if (!arguments.length) { return _tags; }
79913                 _tags = val;
79914                 return rawTagEditor;
79915             };
79916
79917
79918             rawTagEditor.entityID = function(val) {
79919                 if (!arguments.length) { return _entityID; }
79920                 if (_entityID !== val) {
79921                     _orderedKeys = [];
79922                     _entityID = val;
79923                 }
79924                 return rawTagEditor;
79925             };
79926
79927
79928             rawTagEditor.expanded = function(val) {
79929                 if (!arguments.length) { return _expanded; }
79930                 _expanded = val;
79931                 _updatePreference = false;
79932                 return rawTagEditor;
79933             };
79934
79935
79936             // pass an array of regular expressions to test against the tag key
79937             rawTagEditor.readOnlyTags = function(val) {
79938                 if (!arguments.length) { return _readOnlyTags; }
79939                 _readOnlyTags = val;
79940                 return rawTagEditor;
79941             };
79942
79943
79944             return utilRebind(rawTagEditor, dispatch$1, 'on');
79945         }
79946
79947         function uiDataEditor(context) {
79948             var dataHeader = uiDataHeader();
79949             var quickLinks = uiQuickLinks();
79950             var rawTagEditor = uiRawTagEditor(context);
79951             var _datum;
79952
79953
79954             function dataEditor(selection) {
79955                 // quick links
79956                 var choices = [{
79957                     id: 'zoom_to',
79958                     label: 'inspector.zoom_to.title',
79959                     tooltip: function() {
79960                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_data'), t('inspector.zoom_to.key'));
79961                     },
79962                     click: function zoomTo() {
79963                         context.mode().zoomToSelected();
79964                     }
79965                 }];
79966
79967
79968                 var header = selection.selectAll('.header')
79969                     .data([0]);
79970
79971                 var headerEnter = header.enter()
79972                     .append('div')
79973                     .attr('class', 'header fillL');
79974
79975                 headerEnter
79976                     .append('button')
79977                     .attr('class', 'fr data-editor-close')
79978                     .on('click', function() {
79979                         context.enter(modeBrowse(context));
79980                     })
79981                     .call(svgIcon('#iD-icon-close'));
79982
79983                 headerEnter
79984                     .append('h3')
79985                     .text(t('map_data.title'));
79986
79987
79988                 var body = selection.selectAll('.body')
79989                     .data([0]);
79990
79991                 body = body.enter()
79992                     .append('div')
79993                     .attr('class', 'body')
79994                     .merge(body);
79995
79996                 var editor = body.selectAll('.data-editor')
79997                     .data([0]);
79998
79999                 // enter/update
80000                 editor.enter()
80001                     .append('div')
80002                     .attr('class', 'modal-section data-editor')
80003                     .merge(editor)
80004                     .call(dataHeader.datum(_datum))
80005                     .call(quickLinks.choices(choices));
80006
80007                 var rte = body.selectAll('.raw-tag-editor')
80008                     .data([0]);
80009
80010                 // enter/update
80011                 rte.enter()
80012                     .append('div')
80013                     .attr('class', 'raw-tag-editor inspector-inner data-editor')
80014                     .merge(rte)
80015                     .call(rawTagEditor
80016                         .expanded(true)
80017                         .readOnlyTags([/./])
80018                         .tags((_datum && _datum.properties) || {})
80019                         .state('hover')
80020                     )
80021                     .selectAll('textarea.tag-text')
80022                     .attr('readonly', true)
80023                     .classed('readonly', true);
80024             }
80025
80026
80027             dataEditor.datum = function(val) {
80028                 if (!arguments.length) { return _datum; }
80029                 _datum = val;
80030                 return this;
80031             };
80032
80033
80034             return dataEditor;
80035         }
80036
80037         function modeSelectData(context, selectedDatum) {
80038             var mode = {
80039                 id: 'select-data',
80040                 button: 'browse'
80041             };
80042
80043             var keybinding = utilKeybinding('select-data');
80044             var dataEditor = uiDataEditor(context);
80045
80046             var behaviors = [
80047                 behaviorBreathe(),
80048                 behaviorHover(context),
80049                 behaviorSelect(context),
80050                 behaviorLasso(context),
80051                 modeDragNode(context).behavior,
80052                 modeDragNote(context).behavior
80053             ];
80054
80055
80056             // class the data as selected, or return to browse mode if the data is gone
80057             function selectData(drawn) {
80058                 var selection = context.surface().selectAll('.layer-mapdata .data' + selectedDatum.__featurehash__);
80059
80060                 if (selection.empty()) {
80061                     // Return to browse mode if selected DOM elements have
80062                     // disappeared because the user moved them out of view..
80063                     var source = event && event.type === 'zoom' && event.sourceEvent;
80064                     if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
80065                         context.enter(modeBrowse(context));
80066                     }
80067                 } else {
80068                     selection.classed('selected', true);
80069                 }
80070             }
80071
80072
80073             function esc() {
80074                 if (d3_select('.combobox').size()) { return; }
80075                 context.enter(modeBrowse(context));
80076             }
80077
80078
80079             mode.zoomToSelected = function() {
80080                 var extent = geoExtent(d3_geoBounds(selectedDatum));
80081                 context.map().centerZoomEase(extent.center(), context.map().trimmedExtentZoom(extent));
80082             };
80083
80084
80085             mode.enter = function() {
80086                 behaviors.forEach(context.install);
80087
80088                 keybinding
80089                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
80090                     .on('⎋', esc, true);
80091
80092                 d3_select(document)
80093                     .call(keybinding);
80094
80095                 selectData();
80096
80097                 var sidebar = context.ui().sidebar;
80098                 sidebar.show(dataEditor.datum(selectedDatum));
80099
80100                 // expand the sidebar, avoid obscuring the data if needed
80101                 var extent = geoExtent(d3_geoBounds(selectedDatum));
80102                 sidebar.expand(sidebar.intersects(extent));
80103
80104                 context.map()
80105                     .on('drawn.select-data', selectData);
80106             };
80107
80108
80109             mode.exit = function() {
80110                 behaviors.forEach(context.uninstall);
80111
80112                 d3_select(document)
80113                     .call(keybinding.unbind);
80114
80115                 context.surface()
80116                     .selectAll('.layer-mapdata .selected')
80117                     .classed('selected hover', false);
80118
80119                 context.map()
80120                     .on('drawn.select-data', null);
80121
80122                 context.ui().sidebar
80123                     .hide();
80124             };
80125
80126
80127             return mode;
80128         }
80129
80130         function uiImproveOsmComments() {
80131             var _error;
80132
80133
80134             function errorComments(selection) {
80135                 // make the div immediately so it appears above the buttons
80136                 var comments = selection.selectAll('.comments-container')
80137                     .data([0]);
80138
80139                 comments = comments.enter()
80140                     .append('div')
80141                     .attr('class', 'comments-container')
80142                     .merge(comments);
80143
80144                 // must retrieve comments from API before they can be displayed
80145                 services$1.improveOSM.getComments(_error, function(err, d) {
80146                     if (!d.comments) { return; } // nothing to do here
80147
80148                     var commentEnter = comments.selectAll('.comment')
80149                         .data(d.comments)
80150                         .enter()
80151                         .append('div')
80152                         .attr('class', 'comment');
80153
80154                     commentEnter
80155                         .append('div')
80156                         .attr('class', 'comment-avatar')
80157                         .call(svgIcon('#iD-icon-avatar', 'comment-avatar-icon'));
80158
80159                     var mainEnter = commentEnter
80160                         .append('div')
80161                         .attr('class', 'comment-main');
80162
80163                     var metadataEnter = mainEnter
80164                         .append('div')
80165                         .attr('class', 'comment-metadata');
80166
80167                     metadataEnter
80168                         .append('div')
80169                         .attr('class', 'comment-author')
80170                         .each(function(d) {
80171                             var selection = d3_select(this);
80172                             var osm = services$1.osm;
80173                             if (osm && d.username) {
80174                                 selection = selection
80175                                     .append('a')
80176                                     .attr('class', 'comment-author-link')
80177                                     .attr('href', osm.userURL(d.username))
80178                                     .attr('tabindex', -1)
80179                                     .attr('target', '_blank');
80180                             }
80181                             selection
80182                                 .text(function(d) { return d.username; });
80183                         });
80184
80185                     metadataEnter
80186                         .append('div')
80187                         .attr('class', 'comment-date')
80188                         .text(function(d) {
80189                             return t('note.status.commented', { when: localeDateString(d.timestamp) });
80190                         });
80191
80192                     mainEnter
80193                         .append('div')
80194                         .attr('class', 'comment-text')
80195                         .append('p')
80196                         .text(function(d) { return d.text; });
80197                 });
80198             }
80199
80200             function localeDateString(s) {
80201                 if (!s) { return null; }
80202                 var detected = utilDetect();
80203                 var options = { day: 'numeric', month: 'short', year: 'numeric' };
80204                 var d = new Date(s * 1000); // timestamp is served in seconds, date takes ms
80205                 if (isNaN(d.getTime())) { return null; }
80206                 return d.toLocaleDateString(detected.locale, options);
80207             }
80208
80209             errorComments.error = function(val) {
80210                 if (!arguments.length) { return _error; }
80211                 _error = val;
80212                 return errorComments;
80213             };
80214
80215             return errorComments;
80216         }
80217
80218         function uiImproveOsmDetails(context) {
80219             var _error;
80220
80221
80222             function errorDetail(d) {
80223                 var unknown = t('inspector.unknown');
80224
80225                 if (!d) { return unknown; }
80226
80227                 if (d.desc) { return d.desc; }
80228
80229                 var errorType = d.error_key;
80230                 var et = en.QA.improveOSM.error_types[errorType];
80231
80232                 var detail;
80233                 if (et && et.description) {
80234                     detail = t('QA.improveOSM.error_types.' + errorType + '.description', d.replacements);
80235                 } else {
80236                     detail = unknown;
80237                 }
80238
80239                 return detail;
80240             }
80241
80242
80243             function improveOsmDetails(selection) {
80244                 var details = selection.selectAll('.error-details')
80245                     .data(
80246                         (_error ? [_error] : []),
80247                         function(d) { return d.id + '-' + (d.status || 0); }
80248                     );
80249
80250                 details.exit()
80251                     .remove();
80252
80253                 var detailsEnter = details.enter()
80254                     .append('div')
80255                     .attr('class', 'error-details error-details-container');
80256
80257
80258                 // description
80259                 var descriptionEnter = detailsEnter
80260                     .append('div')
80261                     .attr('class', 'error-details-description');
80262
80263                 descriptionEnter
80264                     .append('h4')
80265                     .text(function() { return t('QA.keepRight.detail_description'); });
80266
80267                 descriptionEnter
80268                     .append('div')
80269                     .attr('class', 'error-details-description-text')
80270                     .html(errorDetail);
80271
80272                 // If there are entity links in the error message..
80273                 var relatedEntities = [];
80274                 descriptionEnter.selectAll('.error_entity_link, .error_object_link')
80275                     .each(function() {
80276                         var link = d3_select(this);
80277                         var isObjectLink = link.classed('error_object_link');
80278                         var entityID = isObjectLink ?
80279                             (utilEntityRoot(_error.object_type) + _error.object_id)
80280                             : this.textContent;
80281                         var entity = context.hasEntity(entityID);
80282
80283                         relatedEntities.push(entityID);
80284
80285                         // Add click handler
80286                         link
80287                             .on('mouseover', function() {
80288                                 context.surface().selectAll(utilEntityOrMemberSelector([entityID], context.graph()))
80289                                     .classed('hover', true);
80290                             })
80291                             .on('mouseout', function() {
80292                                 context.surface().selectAll('.hover')
80293                                     .classed('hover', false);
80294                             })
80295                             .on('click', function() {
80296                                 event.preventDefault();
80297                                 var osmlayer = context.layers().layer('osm');
80298                                 if (!osmlayer.enabled()) {
80299                                     osmlayer.enabled(true);
80300                                 }
80301
80302                                 context.map().centerZoom(_error.loc, 20);
80303
80304                                 if (entity) {
80305                                     context.enter(modeSelect(context, [entityID]));
80306                                 } else {
80307                                     context.loadEntity(entityID, function() {
80308                                         context.enter(modeSelect(context, [entityID]));
80309                                     });
80310                                 }
80311                             });
80312
80313                         // Replace with friendly name if possible
80314                         // (The entity may not yet be loaded into the graph)
80315                         if (entity) {
80316                             var name = utilDisplayName(entity);  // try to use common name
80317
80318                             if (!name && !isObjectLink) {
80319                                 var preset = context.presets().match(entity, context.graph());
80320                                 name = preset && !preset.isFallback() && preset.name();  // fallback to preset name
80321                             }
80322
80323                             if (name) {
80324                                 this.innerText = name;
80325                             }
80326                         }
80327                     });
80328
80329                 // Don't hide entities related to this error - #5880
80330                 context.features().forceVisible(relatedEntities);
80331             }
80332
80333
80334             improveOsmDetails.error = function(val) {
80335                 if (!arguments.length) { return _error; }
80336                 _error = val;
80337                 return improveOsmDetails;
80338             };
80339
80340
80341             return improveOsmDetails;
80342         }
80343
80344         function uiImproveOsmHeader() {
80345             var _error;
80346
80347
80348             function errorTitle(d) {
80349                 var unknown = t('inspector.unknown');
80350
80351                 if (!d) { return unknown; }
80352                 var errorType = d.error_key;
80353                 var et = en.QA.improveOSM.error_types[errorType];
80354
80355                 if (et && et.title) {
80356                     return t('QA.improveOSM.error_types.' + errorType + '.title');
80357                 } else {
80358                     return unknown;
80359                 }
80360             }
80361
80362
80363             function improveOsmHeader(selection) {
80364                 var header = selection.selectAll('.error-header')
80365                     .data(
80366                         (_error ? [_error] : []),
80367                         function(d) { return d.id + '-' + (d.status || 0); }
80368                     );
80369
80370                 header.exit()
80371                     .remove();
80372
80373                 var headerEnter = header.enter()
80374                     .append('div')
80375                     .attr('class', 'error-header');
80376
80377                 var iconEnter = headerEnter
80378                     .append('div')
80379                     .attr('class', 'error-header-icon')
80380                     .classed('new', function(d) { return d.id < 0; });
80381
80382                 var svgEnter = iconEnter
80383                     .append('svg')
80384                     .attr('width', '20px')
80385                     .attr('height', '30px')
80386                     .attr('viewbox', '0 0 20 30')
80387                     .attr('class', function(d) {
80388                         return [
80389                             'preset-icon-28',
80390                             'qa_error',
80391                             d.service,
80392                             'error_id-' + d.id,
80393                             'error_type-' + d.error_type,
80394                             'category-' + d.category
80395                         ].join(' ');
80396                     });
80397
80398                 svgEnter
80399                     .append('polygon')
80400                     .attr('fill', 'currentColor')
80401                     .attr('class', 'qa_error-fill')
80402                     .attr('points', '16,3 4,3 1,6 1,17 4,20 7,20 10,27 13,20 16,20 19,17.033 19,6');
80403
80404                 svgEnter
80405                     .append('use')
80406                     .attr('class', 'icon-annotation')
80407                     .attr('width', '11px')
80408                     .attr('height', '11px')
80409                     .attr('transform', 'translate(4.5, 7)')
80410                     .attr('xlink:href', function(d) {
80411                         var picon = d.icon;
80412
80413                         if (!picon) {
80414                             return '';
80415                         } else {
80416                             var isMaki = /^maki-/.test(picon);
80417                             return '#' + picon + (isMaki ? '-11' : '');
80418                         }
80419                     });
80420
80421                 headerEnter
80422                     .append('div')
80423                     .attr('class', 'error-header-label')
80424                     .text(errorTitle);
80425             }
80426
80427
80428             improveOsmHeader.error = function(val) {
80429                 if (!arguments.length) { return _error; }
80430                 _error = val;
80431                 return improveOsmHeader;
80432             };
80433
80434
80435             return improveOsmHeader;
80436         }
80437
80438         function uiImproveOsmEditor(context) {
80439             var dispatch$1 = dispatch('change');
80440             var errorDetails = uiImproveOsmDetails(context);
80441             var errorComments = uiImproveOsmComments();
80442             var errorHeader = uiImproveOsmHeader();
80443             var quickLinks = uiQuickLinks();
80444
80445             var _error;
80446
80447
80448             function improveOsmEditor(selection) {
80449                 // quick links
80450                 var choices = [{
80451                     id: 'zoom_to',
80452                     label: 'inspector.zoom_to.title',
80453                     tooltip: function() {
80454                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_issue'), t('inspector.zoom_to.key'));
80455                     },
80456                     click: function zoomTo() {
80457                         context.mode().zoomToSelected();
80458                     }
80459                 }];
80460
80461
80462                 var header = selection.selectAll('.header')
80463                     .data([0]);
80464
80465                 var headerEnter = header.enter()
80466                     .append('div')
80467                     .attr('class', 'header fillL');
80468
80469                 headerEnter
80470                     .append('button')
80471                     .attr('class', 'fr error-editor-close')
80472                     .on('click', function() {
80473                         context.enter(modeBrowse(context));
80474                     })
80475                     .call(svgIcon('#iD-icon-close'));
80476
80477                 headerEnter
80478                     .append('h3')
80479                     .text(t('QA.improveOSM.title'));
80480
80481
80482                 var body = selection.selectAll('.body')
80483                     .data([0]);
80484
80485                 body = body.enter()
80486                     .append('div')
80487                     .attr('class', 'body')
80488                     .merge(body);
80489
80490                 var editor = body.selectAll('.error-editor')
80491                     .data([0]);
80492
80493                 editor.enter()
80494                     .append('div')
80495                     .attr('class', 'modal-section error-editor')
80496                     .merge(editor)
80497                     .call(errorHeader.error(_error))
80498                     .call(quickLinks.choices(choices))
80499                     .call(errorDetails.error(_error))
80500                     .call(errorComments.error(_error))
80501                     .call(improveOsmSaveSection);
80502             }
80503
80504             function improveOsmSaveSection(selection) {
80505                 var isSelected = (_error && _error.id === context.selectedErrorID());
80506                 var isShown = (_error && (isSelected || _error.newComment || _error.comment));
80507                 var saveSection = selection.selectAll('.error-save')
80508                     .data(
80509                         (isShown ? [_error] : []),
80510                         function(d) { return d.id + '-' + (d.status || 0); }
80511                     );
80512
80513                 // exit
80514                 saveSection.exit()
80515                     .remove();
80516
80517                 // enter
80518                 var saveSectionEnter = saveSection.enter()
80519                     .append('div')
80520                     .attr('class', 'error-save save-section cf');
80521
80522                 saveSectionEnter
80523                     .append('h4')
80524                     .attr('class', '.error-save-header')
80525                     .text(t('note.newComment'));
80526
80527                 saveSectionEnter
80528                     .append('textarea')
80529                     .attr('class', 'new-comment-input')
80530                     .attr('placeholder', t('QA.keepRight.comment_placeholder'))
80531                     .attr('maxlength', 1000)
80532                     .property('value', function(d) { return d.newComment; })
80533                     .call(utilNoAuto)
80534                     .on('input', changeInput)
80535                     .on('blur', changeInput);
80536
80537                 // update
80538                 saveSection = saveSectionEnter
80539                     .merge(saveSection)
80540                     .call(errorSaveButtons);
80541
80542                 function changeInput() {
80543                     var input = d3_select(this);
80544                     var val = input.property('value').trim();
80545
80546                     if (val === '') {
80547                         val = undefined;
80548                     }
80549
80550                     // store the unsaved comment with the error itself
80551                     _error = _error.update({ newComment: val });
80552
80553                     var errorService = services$1.improveOSM;
80554                     if (errorService) {
80555                         errorService.replaceError(_error);
80556                     }
80557
80558                     saveSection
80559                         .call(errorSaveButtons);
80560                 }
80561             }
80562
80563             function errorSaveButtons(selection) {
80564                 var isSelected = (_error && _error.id === context.selectedErrorID());
80565                 var buttonSection = selection.selectAll('.buttons')
80566                     .data((isSelected ? [_error] : []), function(d) { return d.status + d.id; });
80567
80568                 // exit
80569                 buttonSection.exit()
80570                     .remove();
80571
80572                 // enter
80573                 var buttonEnter = buttonSection.enter()
80574                     .append('div')
80575                     .attr('class', 'buttons');
80576
80577                 buttonEnter
80578                     .append('button')
80579                     .attr('class', 'button comment-button action')
80580                     .text(t('QA.keepRight.save_comment'));
80581
80582                 buttonEnter
80583                     .append('button')
80584                     .attr('class', 'button close-button action');
80585
80586                 buttonEnter
80587                     .append('button')
80588                     .attr('class', 'button ignore-button action');
80589
80590
80591                 // update
80592                 buttonSection = buttonSection
80593                     .merge(buttonEnter);
80594
80595                 buttonSection.select('.comment-button')
80596                     .attr('disabled', function(d) {
80597                         return d.newComment === undefined ? true : null;
80598                     })
80599                     .on('click.comment', function(d) {
80600                         this.blur();    // avoid keeping focus on the button - #4641
80601                         var errorService = services$1.improveOSM;
80602                         if (errorService) {
80603                             errorService.postUpdate(d, function(err, error) {
80604                                 dispatch$1.call('change', error);
80605                             });
80606                         }
80607                     });
80608
80609                 buttonSection.select('.close-button')
80610                     .text(function(d) {
80611                         var andComment = (d.newComment !== undefined ? '_comment' : '');
80612                         return t('QA.keepRight.close' + andComment);
80613                     })
80614                     .on('click.close', function(d) {
80615                         this.blur();    // avoid keeping focus on the button - #4641
80616                         var errorService = services$1.improveOSM;
80617                         if (errorService) {
80618                             d.newStatus = 'SOLVED';
80619                             errorService.postUpdate(d, function(err, error) {
80620                                 dispatch$1.call('change', error);
80621                             });
80622                         }
80623                     });
80624
80625                 buttonSection.select('.ignore-button')
80626                     .text(function(d) {
80627                         var andComment = (d.newComment !== undefined ? '_comment' : '');
80628                         return t('QA.keepRight.ignore' + andComment);
80629                     })
80630                     .on('click.ignore', function(d) {
80631                         this.blur();    // avoid keeping focus on the button - #4641
80632                         var errorService = services$1.improveOSM;
80633                         if (errorService) {
80634                             d.newStatus = 'INVALID';
80635                             errorService.postUpdate(d, function(err, error) {
80636                                 dispatch$1.call('change', error);
80637                             });
80638                         }
80639                     });
80640             }
80641
80642             improveOsmEditor.error = function(val) {
80643                 if (!arguments.length) { return _error; }
80644                 _error = val;
80645                 return improveOsmEditor;
80646             };
80647
80648
80649             return utilRebind(improveOsmEditor, dispatch$1, 'on');
80650         }
80651
80652         function uiKeepRightDetails(context) {
80653             var _error;
80654
80655
80656             function errorDetail(d) {
80657                 var unknown = t('inspector.unknown');
80658
80659                 if (!d) { return unknown; }
80660                 var errorType = d.error_type;
80661                 var parentErrorType = d.parent_error_type;
80662
80663                 var et = en.QA.keepRight.errorTypes[errorType];
80664                 var pt = en.QA.keepRight.errorTypes[parentErrorType];
80665
80666                 var detail;
80667                 if (et && et.description) {
80668                     detail = t('QA.keepRight.errorTypes.' + errorType + '.description', d.replacements);
80669                 } else if (pt && pt.description) {
80670                     detail = t('QA.keepRight.errorTypes.' + parentErrorType + '.description', d.replacements);
80671                 } else {
80672                     detail = unknown;
80673                 }
80674
80675                 return detail;
80676             }
80677
80678
80679             function keepRightDetails(selection) {
80680                 var details = selection.selectAll('.error-details')
80681                     .data(
80682                         (_error ? [_error] : []),
80683                         function(d) { return d.id + '-' + (d.status || 0); }
80684                     );
80685
80686                 details.exit()
80687                     .remove();
80688
80689                 var detailsEnter = details.enter()
80690                     .append('div')
80691                     .attr('class', 'error-details error-details-container');
80692
80693
80694                 // description
80695                 var descriptionEnter = detailsEnter
80696                     .append('div')
80697                     .attr('class', 'error-details-description');
80698
80699                 descriptionEnter
80700                     .append('h4')
80701                     .text(function() { return t('QA.keepRight.detail_description'); });
80702
80703                 descriptionEnter
80704                     .append('div')
80705                     .attr('class', 'error-details-description-text')
80706                     .html(errorDetail);
80707
80708                 // If there are entity links in the error message..
80709                 var relatedEntities = [];
80710                 descriptionEnter.selectAll('.error_entity_link, .error_object_link')
80711                     .each(function() {
80712                         var link = d3_select(this);
80713                         var isObjectLink = link.classed('error_object_link');
80714                         var entityID = isObjectLink ?
80715                             (utilEntityRoot(_error.object_type) + _error.object_id)
80716                             : this.textContent;
80717                         var entity = context.hasEntity(entityID);
80718
80719                         relatedEntities.push(entityID);
80720
80721                         // Add click handler
80722                         link
80723                             .on('mouseover', function() {
80724                                 context.surface().selectAll(utilEntityOrMemberSelector([entityID], context.graph()))
80725                                     .classed('hover', true);
80726                             })
80727                             .on('mouseout', function() {
80728                                 context.surface().selectAll('.hover')
80729                                     .classed('hover', false);
80730                             })
80731                             .on('click', function() {
80732                                 event.preventDefault();
80733                                 var osmlayer = context.layers().layer('osm');
80734                                 if (!osmlayer.enabled()) {
80735                                     osmlayer.enabled(true);
80736                                 }
80737
80738                                 context.map().centerZoomEase(_error.loc, 20);
80739
80740                                 if (entity) {
80741                                     context.enter(modeSelect(context, [entityID]));
80742                                 } else {
80743                                     context.loadEntity(entityID, function() {
80744                                         context.enter(modeSelect(context, [entityID]));
80745                                     });
80746                                 }
80747                             });
80748
80749                         // Replace with friendly name if possible
80750                         // (The entity may not yet be loaded into the graph)
80751                         if (entity) {
80752                             var name = utilDisplayName(entity);  // try to use common name
80753
80754                             if (!name && !isObjectLink) {
80755                                 var preset = context.presets().match(entity, context.graph());
80756                                 name = preset && !preset.isFallback() && preset.name();  // fallback to preset name
80757                             }
80758
80759                             if (name) {
80760                                 this.innerText = name;
80761                             }
80762                         }
80763                     });
80764
80765                 // Don't hide entities related to this error - #5880
80766                 context.features().forceVisible(relatedEntities);
80767             }
80768
80769
80770             keepRightDetails.error = function(val) {
80771                 if (!arguments.length) { return _error; }
80772                 _error = val;
80773                 return keepRightDetails;
80774             };
80775
80776
80777             return keepRightDetails;
80778         }
80779
80780         function uiKeepRightHeader() {
80781             var _error;
80782
80783
80784             function errorTitle(d) {
80785                 var unknown = t('inspector.unknown');
80786
80787                 if (!d) { return unknown; }
80788                 var errorType = d.error_type;
80789                 var parentErrorType = d.parent_error_type;
80790
80791                 var et = en.QA.keepRight.errorTypes[errorType];
80792                 var pt = en.QA.keepRight.errorTypes[parentErrorType];
80793
80794                 if (et && et.title) {
80795                     return t('QA.keepRight.errorTypes.' + errorType + '.title');
80796                 } else if (pt && pt.title) {
80797                     return t('QA.keepRight.errorTypes.' + parentErrorType + '.title');
80798                 } else {
80799                     return unknown;
80800                 }
80801             }
80802
80803
80804             function keepRightHeader(selection) {
80805                 var header = selection.selectAll('.error-header')
80806                     .data(
80807                         (_error ? [_error] : []),
80808                         function(d) { return d.id + '-' + (d.status || 0); }
80809                     );
80810
80811                 header.exit()
80812                     .remove();
80813
80814                 var headerEnter = header.enter()
80815                     .append('div')
80816                     .attr('class', 'error-header');
80817
80818                 var iconEnter = headerEnter
80819                     .append('div')
80820                     .attr('class', 'error-header-icon')
80821                     .classed('new', function(d) { return d.id < 0; });
80822
80823                 iconEnter
80824                     .append('div')
80825                     .attr('class', function(d) {
80826                         return 'preset-icon-28 qa_error ' + d.service + ' error_id-' + d.id + ' error_type-' + d.parent_error_type;
80827                     })
80828                     .call(svgIcon('#iD-icon-bolt', 'qa_error-fill'));
80829
80830                 headerEnter
80831                     .append('div')
80832                     .attr('class', 'error-header-label')
80833                     .text(errorTitle);
80834             }
80835
80836
80837             keepRightHeader.error = function(val) {
80838                 if (!arguments.length) { return _error; }
80839                 _error = val;
80840                 return keepRightHeader;
80841             };
80842
80843
80844             return keepRightHeader;
80845         }
80846
80847         function uiViewOnKeepRight() {
80848             var _error;   // a keepright error
80849
80850
80851             function viewOnKeepRight(selection) {
80852                 var url;
80853                 if (services$1.keepRight && (_error instanceof qaError)) {
80854                     url = services$1.keepRight.errorURL(_error);
80855                 }
80856
80857                 var link = selection.selectAll('.view-on-keepRight')
80858                     .data(url ? [url] : []);
80859
80860                 // exit
80861                 link.exit()
80862                     .remove();
80863
80864                 // enter
80865                 var linkEnter = link.enter()
80866                     .append('a')
80867                     .attr('class', 'view-on-keepRight')
80868                     .attr('target', '_blank')
80869                     .attr('href', function(d) { return d; })
80870                     .call(svgIcon('#iD-icon-out-link', 'inline'));
80871
80872                 linkEnter
80873                     .append('span')
80874                     .text(t('inspector.view_on_keepRight'));
80875             }
80876
80877
80878             viewOnKeepRight.what = function(val) {
80879                 if (!arguments.length) { return _error; }
80880                 _error = val;
80881                 return viewOnKeepRight;
80882             };
80883
80884             return viewOnKeepRight;
80885         }
80886
80887         function uiKeepRightEditor(context) {
80888             var dispatch$1 = dispatch('change');
80889             var keepRightDetails = uiKeepRightDetails(context);
80890             var keepRightHeader = uiKeepRightHeader();
80891             var quickLinks = uiQuickLinks();
80892
80893             var _error;
80894
80895
80896             function keepRightEditor(selection) {
80897                 // quick links
80898                 var choices = [{
80899                     id: 'zoom_to',
80900                     label: 'inspector.zoom_to.title',
80901                     tooltip: function() {
80902                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_issue'), t('inspector.zoom_to.key'));
80903                     },
80904                     click: function zoomTo() {
80905                         context.mode().zoomToSelected();
80906                     }
80907                 }];
80908
80909
80910                 var header = selection.selectAll('.header')
80911                     .data([0]);
80912
80913                 var headerEnter = header.enter()
80914                     .append('div')
80915                     .attr('class', 'header fillL');
80916
80917                 headerEnter
80918                     .append('button')
80919                     .attr('class', 'fr error-editor-close')
80920                     .on('click', function() {
80921                         context.enter(modeBrowse(context));
80922                     })
80923                     .call(svgIcon('#iD-icon-close'));
80924
80925                 headerEnter
80926                     .append('h3')
80927                     .text(t('QA.keepRight.title'));
80928
80929
80930                 var body = selection.selectAll('.body')
80931                     .data([0]);
80932
80933                 body = body.enter()
80934                     .append('div')
80935                     .attr('class', 'body')
80936                     .merge(body);
80937
80938                 var editor = body.selectAll('.error-editor')
80939                     .data([0]);
80940
80941                 editor.enter()
80942                     .append('div')
80943                     .attr('class', 'modal-section error-editor')
80944                     .merge(editor)
80945                     .call(keepRightHeader.error(_error))
80946                     .call(quickLinks.choices(choices))
80947                     .call(keepRightDetails.error(_error))
80948                     .call(keepRightSaveSection);
80949
80950
80951                 var footer = selection.selectAll('.footer')
80952                     .data([0]);
80953
80954                 footer.enter()
80955                     .append('div')
80956                     .attr('class', 'footer')
80957                     .merge(footer)
80958                     .call(uiViewOnKeepRight().what(_error));
80959             }
80960
80961
80962             function keepRightSaveSection(selection) {
80963                 var isSelected = (_error && _error.id === context.selectedErrorID());
80964                 var isShown = (_error && (isSelected || _error.newComment || _error.comment));
80965                 var saveSection = selection.selectAll('.error-save')
80966                     .data(
80967                         (isShown ? [_error] : []),
80968                         function(d) { return d.id + '-' + (d.status || 0); }
80969                     );
80970
80971                 // exit
80972                 saveSection.exit()
80973                     .remove();
80974
80975                 // enter
80976                 var saveSectionEnter = saveSection.enter()
80977                     .append('div')
80978                     .attr('class', 'error-save save-section cf');
80979
80980                 saveSectionEnter
80981                     .append('h4')
80982                     .attr('class', '.error-save-header')
80983                     .text(t('QA.keepRight.comment'));
80984
80985                 saveSectionEnter
80986                     .append('textarea')
80987                     .attr('class', 'new-comment-input')
80988                     .attr('placeholder', t('QA.keepRight.comment_placeholder'))
80989                     .attr('maxlength', 1000)
80990                     .property('value', function(d) { return d.newComment || d.comment; })
80991                     .call(utilNoAuto)
80992                     .on('input', changeInput)
80993                     .on('blur', changeInput);
80994
80995                 // update
80996                 saveSection = saveSectionEnter
80997                     .merge(saveSection)
80998                     .call(keepRightSaveButtons);
80999
81000
81001                 function changeInput() {
81002                     var input = d3_select(this);
81003                     var val = input.property('value').trim();
81004
81005                     if (val === _error.comment) {
81006                         val = undefined;
81007                     }
81008
81009                     // store the unsaved comment with the error itself
81010                     _error = _error.update({ newComment: val });
81011
81012                     var keepRight = services$1.keepRight;
81013                     if (keepRight) {
81014                         keepRight.replaceError(_error);  // update keepright cache
81015                     }
81016
81017                     saveSection
81018                         .call(keepRightSaveButtons);
81019                 }
81020             }
81021
81022
81023             function keepRightSaveButtons(selection) {
81024                 var isSelected = (_error && _error.id === context.selectedErrorID());
81025                 var buttonSection = selection.selectAll('.buttons')
81026                     .data((isSelected ? [_error] : []), function(d) { return d.status + d.id; });
81027
81028                 // exit
81029                 buttonSection.exit()
81030                     .remove();
81031
81032                 // enter
81033                 var buttonEnter = buttonSection.enter()
81034                     .append('div')
81035                     .attr('class', 'buttons');
81036
81037                 buttonEnter
81038                     .append('button')
81039                     .attr('class', 'button comment-button action')
81040                     .text(t('QA.keepRight.save_comment'));
81041
81042                 buttonEnter
81043                     .append('button')
81044                     .attr('class', 'button close-button action');
81045
81046                 buttonEnter
81047                     .append('button')
81048                     .attr('class', 'button ignore-button action');
81049
81050
81051                 // update
81052                 buttonSection = buttonSection
81053                     .merge(buttonEnter);
81054
81055                 buttonSection.select('.comment-button')   // select and propagate data
81056                     .attr('disabled', function(d) {
81057                         return d.newComment === undefined ? true : null;
81058                     })
81059                     .on('click.comment', function(d) {
81060                         this.blur();    // avoid keeping focus on the button - #4641
81061                         var keepRight = services$1.keepRight;
81062                         if (keepRight) {
81063                             keepRight.postKeepRightUpdate(d, function(err, error) {
81064                                 dispatch$1.call('change', error);
81065                             });
81066                         }
81067                     });
81068
81069                 buttonSection.select('.close-button')   // select and propagate data
81070                     .text(function(d) {
81071                         var andComment = (d.newComment !== undefined ? '_comment' : '');
81072                         return t('QA.keepRight.close' + andComment);
81073                     })
81074                     .on('click.close', function(d) {
81075                         this.blur();    // avoid keeping focus on the button - #4641
81076                         var keepRight = services$1.keepRight;
81077                         if (keepRight) {
81078                             d.state = 'ignore_t';   // ignore temporarily (error fixed)
81079                             keepRight.postKeepRightUpdate(d, function(err, error) {
81080                                 dispatch$1.call('change', error);
81081                             });
81082                         }
81083                     });
81084
81085                 buttonSection.select('.ignore-button')   // select and propagate data
81086                     .text(function(d) {
81087                         var andComment = (d.newComment !== undefined ? '_comment' : '');
81088                         return t('QA.keepRight.ignore' + andComment);
81089                     })
81090                     .on('click.ignore', function(d) {
81091                         this.blur();    // avoid keeping focus on the button - #4641
81092                         var keepRight = services$1.keepRight;
81093                         if (keepRight) {
81094                             d.state = 'ignore';   // ignore permanently (false positive)
81095                             keepRight.postKeepRightUpdate(d, function(err, error) {
81096                                 dispatch$1.call('change', error);
81097                             });
81098                         }
81099                     });
81100             }
81101
81102
81103             keepRightEditor.error = function(val) {
81104                 if (!arguments.length) { return _error; }
81105                 _error = val;
81106                 return keepRightEditor;
81107             };
81108
81109
81110             return utilRebind(keepRightEditor, dispatch$1, 'on');
81111         }
81112
81113         function modeSelectError(context, selectedErrorID, selectedErrorService) {
81114             var mode = {
81115                 id: 'select-error',
81116                 button: 'browse'
81117             };
81118
81119             var keybinding = utilKeybinding('select-error');
81120
81121             var errorService = services$1[selectedErrorService];
81122             var errorEditor;
81123             switch (selectedErrorService) {
81124                 case 'improveOSM':
81125                     errorEditor = uiImproveOsmEditor(context)
81126                     .on('change', function() {
81127                         context.map().pan([0,0]);  // trigger a redraw
81128                         var error = checkSelectedID();
81129                         if (!error) { return; }
81130                         context.ui().sidebar
81131                             .show(errorEditor.error(error));
81132                     });
81133                     break;
81134                 case 'keepRight':
81135                     errorEditor = uiKeepRightEditor(context)
81136                     .on('change', function() {
81137                         context.map().pan([0,0]);  // trigger a redraw
81138                         var error = checkSelectedID();
81139                         if (!error) { return; }
81140                         context.ui().sidebar
81141                             .show(errorEditor.error(error));
81142                     });
81143                     break;
81144             }
81145
81146
81147             var behaviors = [
81148                 behaviorBreathe(),
81149                 behaviorHover(context),
81150                 behaviorSelect(context),
81151                 behaviorLasso(context),
81152                 modeDragNode(context).behavior,
81153                 modeDragNote(context).behavior
81154             ];
81155
81156
81157             function checkSelectedID() {
81158                 if (!errorService) { return; }
81159                 var error = errorService.getError(selectedErrorID);
81160                 if (!error) {
81161                     context.enter(modeBrowse(context));
81162                 }
81163                 return error;
81164             }
81165
81166
81167             mode.zoomToSelected = function() {
81168                 if (!errorService) { return; }
81169                 var error = errorService.getError(selectedErrorID);
81170                 if (error) {
81171                     context.map().centerZoomEase(error.loc, 20);
81172                 }
81173             };
81174
81175
81176             mode.enter = function() {
81177                 var error = checkSelectedID();
81178                 if (!error) { return; }
81179
81180                 behaviors.forEach(context.install);
81181                 keybinding
81182                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
81183                     .on('⎋', esc, true);
81184
81185                 d3_select(document)
81186                     .call(keybinding);
81187
81188                 selectError();
81189
81190                 var sidebar = context.ui().sidebar;
81191                 sidebar.show(errorEditor.error(error));
81192
81193                 context.map()
81194                     .on('drawn.select-error', selectError);
81195
81196
81197                 // class the error as selected, or return to browse mode if the error is gone
81198                 function selectError(drawn) {
81199                     if (!checkSelectedID()) { return; }
81200
81201                     var selection = context.surface()
81202                         .selectAll('.error_id-' + selectedErrorID + '.' + selectedErrorService);
81203
81204                     if (selection.empty()) {
81205                         // Return to browse mode if selected DOM elements have
81206                         // disappeared because the user moved them out of view..
81207                         var source = event && event.type === 'zoom' && event.sourceEvent;
81208                         if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
81209                             context.enter(modeBrowse(context));
81210                         }
81211
81212                     } else {
81213                         selection
81214                             .classed('selected', true);
81215
81216                         context.selectedErrorID(selectedErrorID);
81217                     }
81218                 }
81219
81220                 function esc() {
81221                     if (d3_select('.combobox').size()) { return; }
81222                     context.enter(modeBrowse(context));
81223                 }
81224             };
81225
81226
81227             mode.exit = function() {
81228                 behaviors.forEach(context.uninstall);
81229
81230                 d3_select(document)
81231                     .call(keybinding.unbind);
81232
81233                 context.surface()
81234                     .selectAll('.qa_error.selected')
81235                     .classed('selected hover', false);
81236
81237                 context.map()
81238                     .on('drawn.select-error', null);
81239
81240                 context.ui().sidebar
81241                     .hide();
81242
81243                 context.selectedErrorID(null);
81244                 context.features().forceVisible([]);
81245             };
81246
81247
81248             return mode;
81249         }
81250
81251         function behaviorSelect(context) {
81252             // legacy option to show menu on every click
81253             var isShowAlways = +context.storage('edit-menu-show-always') === 1;
81254             var tolerance = 4;
81255             var _lastMouse = null;
81256             var _suppressMenu = true;
81257             var _p1 = null;
81258
81259
81260             function point() {
81261                 return d3_mouse(context.container().node());
81262             }
81263
81264
81265             function keydown() {
81266                 var e = event;
81267                 if (e && e.shiftKey) {
81268                     context.surface()
81269                         .classed('behavior-multiselect', true);
81270                 }
81271
81272                 if (e && e.keyCode === 93) {  // context menu
81273                     e.preventDefault();
81274                     e.stopPropagation();
81275                 }
81276             }
81277
81278
81279             function keyup() {
81280                 var e = event;
81281                 if (!e || !e.shiftKey) {
81282                     context.surface()
81283                         .classed('behavior-multiselect', false);
81284                 }
81285
81286
81287                 if (e && e.keyCode === 93) {  // context menu
81288                     e.preventDefault();
81289                     e.stopPropagation();
81290                     contextmenu();
81291                 }
81292             }
81293
81294
81295             function mousedown() {
81296                 if (!_p1) {
81297                     _p1 = point();
81298                 }
81299                 d3_select(window)
81300                     .on('mouseup.select', mouseup, true);
81301
81302                 _suppressMenu = !isShowAlways;
81303             }
81304
81305
81306             function mousemove() {
81307                 if (event) {
81308                     _lastMouse = event;
81309                 }
81310             }
81311
81312
81313             function mouseup() {
81314                 click();
81315             }
81316
81317
81318             function contextmenu() {
81319                 var e = event;
81320                 e.preventDefault();
81321                 e.stopPropagation();
81322
81323                 if (!+e.clientX && !+e.clientY) {
81324                     if (_lastMouse) {
81325                         e.sourceEvent = _lastMouse;
81326                     } else {
81327                         return;
81328                     }
81329                 }
81330
81331                 if (!_p1) {
81332                     _p1 = point();
81333                 }
81334                 _suppressMenu = false;
81335                 click();
81336             }
81337
81338
81339             function click() {
81340                 d3_select(window)
81341                     .on('mouseup.select', null, true);
81342
81343                 if (!_p1) { return; }
81344                 var p2 = point();
81345                 var dist = geoVecLength(_p1, p2);
81346                 _p1 = null;
81347                 if (dist > tolerance) { return; }
81348
81349                 // Defer processing the click,
81350                 // because this click may trigger a blur event,
81351                 // and the blur event may trigger a tag change,
81352                 // and we really want that tag change to go to the already selected entity
81353                 // and not the one that we are about to select with the click  #6028, #5878
81354                 // (Be very careful entering modeSelect anywhere that might also blur a field!)
81355                 var datum = event.target.__data__ || (_lastMouse && _lastMouse.target.__data__);
81356                 var isMultiselect = event.shiftKey || d3_select('#surface .lasso').node();
81357                 window.setTimeout(function() {
81358                     processClick(datum, isMultiselect);
81359                 }, 20);  // delay > whatever raw_tag_editor.js `scheduleChange` does (10ms).
81360             }
81361
81362
81363             function processClick(datum, isMultiselect) {
81364                 var mode = context.mode();
81365
81366                 var entity = datum && datum.properties && datum.properties.entity;
81367                 if (entity) { datum = entity; }
81368
81369                 if (datum && datum.type === 'midpoint') {
81370                     datum = datum.parents[0];
81371                 }
81372
81373                 if (datum instanceof osmEntity) {    // clicked an entity..
81374                     var selectedIDs = context.selectedIDs();
81375                     context.selectedNoteID(null);
81376                     context.selectedErrorID(null);
81377
81378                     if (!isMultiselect) {
81379                         if (selectedIDs.length > 1 && (!_suppressMenu && !isShowAlways)) {
81380                             // multiple things already selected, just show the menu...
81381                             mode.suppressMenu(false).reselect();
81382                         } else {
81383                             // select a single thing..
81384                             context.enter(modeSelect(context, [datum.id]).suppressMenu(_suppressMenu));
81385                         }
81386
81387                     } else {
81388                         if (selectedIDs.indexOf(datum.id) !== -1) {
81389                             // clicked entity is already in the selectedIDs list..
81390                             if (!_suppressMenu && !isShowAlways) {
81391                                 // don't deselect clicked entity, just show the menu.
81392                                 mode.suppressMenu(false).reselect();
81393                             } else {
81394                                 // deselect clicked entity, then reenter select mode or return to browse mode..
81395                                 selectedIDs = selectedIDs.filter(function(id) { return id !== datum.id; });
81396                                 context.enter(selectedIDs.length ? modeSelect(context, selectedIDs) : modeBrowse(context));
81397                             }
81398                         } else {
81399                             // clicked entity is not in the selected list, add it..
81400                             selectedIDs = selectedIDs.concat([datum.id]);
81401                             context.enter(modeSelect(context, selectedIDs).suppressMenu(_suppressMenu));
81402                         }
81403                     }
81404
81405                 } else if (datum && datum.__featurehash__ && !isMultiselect) {    // clicked Data..
81406                     context
81407                         .selectedNoteID(null)
81408                         .enter(modeSelectData(context, datum));
81409
81410                 } else if (datum instanceof osmNote && !isMultiselect) {    // clicked a Note..
81411                     context
81412                         .selectedNoteID(datum.id)
81413                         .enter(modeSelectNote(context, datum.id));
81414
81415                 } else if (datum instanceof qaError & !isMultiselect) {  // clicked an external QA error
81416                     context
81417                         .selectedErrorID(datum.id)
81418                         .enter(modeSelectError(context, datum.id, datum.service));
81419
81420                 } else {    // clicked nothing..
81421                     context.selectedNoteID(null);
81422                     context.selectedErrorID(null);
81423                     if (!isMultiselect && mode.id !== 'browse') {
81424                         context.enter(modeBrowse(context));
81425                     }
81426                 }
81427
81428                 // reset for next time..
81429                 _suppressMenu = true;
81430             }
81431
81432
81433             function behavior(selection) {
81434                 _lastMouse = null;
81435                 _suppressMenu = true;
81436                 _p1 = null;
81437
81438                 d3_select(window)
81439                     .on('keydown.select', keydown)
81440                     .on('keyup.select', keyup)
81441                     .on('contextmenu.select-window', function() {
81442                         // Edge and IE really like to show the contextmenu on the
81443                         // menubar when user presses a keyboard menu button
81444                         // even after we've already preventdefaulted the key event.
81445                         var e = event;
81446                         if (+e.clientX === 0 && +e.clientY === 0) {
81447                             event.preventDefault();
81448                             event.stopPropagation();
81449                         }
81450                     });
81451
81452                 selection
81453                     .on('mousedown.select', mousedown)
81454                     .on('mousemove.select', mousemove)
81455                     .on('contextmenu.select', contextmenu);
81456
81457                 if (event && event.shiftKey) {
81458                     context.surface()
81459                         .classed('behavior-multiselect', true);
81460                 }
81461             }
81462
81463
81464             behavior.off = function(selection) {
81465                 d3_select(window)
81466                     .on('keydown.select', null)
81467                     .on('keyup.select', null)
81468                     .on('contextmenu.select-window', null)
81469                     .on('mouseup.select', null, true);
81470
81471                 selection
81472                     .on('mousedown.select', null)
81473                     .on('mousemove.select', null)
81474                     .on('contextmenu.select', null);
81475
81476                 context.surface()
81477                     .classed('behavior-multiselect', false);
81478             };
81479
81480
81481             return behavior;
81482         }
81483
81484         function behaviorDrawWay(context, wayID, index, mode, startGraph, baselineGraph) {
81485
81486             var origWay = context.entity(wayID);
81487
81488             var annotation = t((origWay.isDegenerate() ?
81489                 'operations.start.annotation.' :
81490                 'operations.continue.annotation.') + context.geometry(wayID)
81491             );
81492
81493             var behavior = behaviorDraw(context);
81494             behavior.hover().initialNodeID(index ? origWay.nodes[index] :
81495                 (origWay.isClosed() ? origWay.nodes[origWay.nodes.length - 2] : origWay.nodes[origWay.nodes.length - 1]));
81496
81497             var _tempEdits = 0;
81498
81499             var end = osmNode({ loc: context.map().mouseCoordinates() });
81500
81501             // Push an annotated state for undo to return back to.
81502             // We must make sure to remove this edit later.
81503             context.pauseChangeDispatch();
81504             context.perform(actionNoop(), annotation);
81505             _tempEdits++;
81506
81507             // Add the drawing node to the graph.
81508             // We must make sure to remove this edit later.
81509             context.perform(_actionAddDrawNode());
81510             _tempEdits++;
81511             context.resumeChangeDispatch();
81512
81513
81514             function keydown() {
81515                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
81516                     if (context.surface().classed('nope')) {
81517                         context.surface()
81518                             .classed('nope-suppressed', true);
81519                     }
81520                     context.surface()
81521                         .classed('nope', false)
81522                         .classed('nope-disabled', true);
81523                 }
81524             }
81525
81526
81527             function keyup() {
81528                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
81529                     if (context.surface().classed('nope-suppressed')) {
81530                         context.surface()
81531                             .classed('nope', true);
81532                     }
81533                     context.surface()
81534                         .classed('nope-suppressed', false)
81535                         .classed('nope-disabled', false);
81536                 }
81537             }
81538
81539
81540             function allowsVertex(d) {
81541                 return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
81542             }
81543
81544
81545             // related code
81546             // - `mode/drag_node.js`     `doMode()`
81547             // - `behavior/draw.js`      `click()`
81548             // - `behavior/draw_way.js`  `move()`
81549             function move(datum) {
81550                 context.surface().classed('nope-disabled', event.altKey);
81551
81552                 var targetLoc = datum && datum.properties && datum.properties.entity && allowsVertex(datum.properties.entity) && datum.properties.entity.loc;
81553                 var targetNodes = datum && datum.properties && datum.properties.nodes;
81554                 var loc = context.map().mouseCoordinates();
81555
81556                 if (targetLoc) {   // snap to node/vertex - a point target with `.loc`
81557                     loc = targetLoc;
81558
81559                 } else if (targetNodes) {   // snap to way - a line target with `.nodes`
81560                     var choice = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id);
81561                     if (choice) {
81562                         loc = choice.loc;
81563                     }
81564                 }
81565
81566                 context.replace(actionMoveNode(end.id, loc));
81567                 end = context.entity(end.id);
81568                 checkGeometry(false);
81569             }
81570
81571
81572             // Check whether this edit causes the geometry to break.
81573             // If so, class the surface with a nope cursor.
81574             // `finishDraw` - Only checks the relevant line segments if finishing drawing
81575             function checkGeometry(finishDraw) {
81576                 var nopeDisabled = context.surface().classed('nope-disabled');
81577                 var isInvalid = isInvalidGeometry(end, context.graph(), finishDraw);
81578
81579                 if (nopeDisabled) {
81580                     context.surface()
81581                         .classed('nope', false)
81582                         .classed('nope-suppressed', isInvalid);
81583                 } else {
81584                     context.surface()
81585                         .classed('nope', isInvalid)
81586                         .classed('nope-suppressed', false);
81587                 }
81588             }
81589
81590
81591             function isInvalidGeometry(entity, graph, finishDraw) {
81592                 var parents = graph.parentWays(entity);
81593
81594                 for (var i = 0; i < parents.length; i++) {
81595                     var parent = parents[i];
81596                     var nodes = graph.childNodes(parent).slice();  // shallow copy
81597
81598                     if (origWay.isClosed()) { // Check if Area
81599                         if (finishDraw) {
81600                             if (nodes.length < 3) { return false; }
81601                             nodes.splice(-2, 1);
81602                             entity = nodes[nodes.length-2];
81603                         } else {
81604                             nodes.pop();
81605                         }
81606                     } else { // Line
81607                         if (finishDraw) {
81608                             nodes.pop();
81609                         }
81610                     }
81611
81612                     if (geoHasSelfIntersections(nodes, entity.id)) {
81613                         return true;
81614                     }
81615                 }
81616
81617                 return false;
81618             }
81619
81620
81621             function undone() {
81622                 context.pauseChangeDispatch();
81623                 // Undo popped the history back to the initial annotated no-op edit.
81624                 _tempEdits = 0;     // We will deal with the temp edits here
81625                 context.pop(1);     // Remove initial no-op edit
81626
81627                 if (context.graph() === baselineGraph) {    // We've undone back to the beginning
81628                     // baselineGraph may be behind startGraph if this way was added rather than continued
81629                     resetToStartGraph();
81630                     context.resumeChangeDispatch();
81631                     context.enter(modeSelect(context, [wayID]));
81632                 } else {
81633                     // Remove whatever segment was drawn previously and continue drawing
81634                     context.pop(1);
81635                     context.resumeChangeDispatch();
81636                     context.enter(mode);
81637                 }
81638             }
81639
81640
81641             function setActiveElements() {
81642                 context.surface().selectAll('.' + end.id)
81643                     .classed('active', true);
81644             }
81645
81646
81647             function resetToStartGraph() {
81648                 while (context.graph() !== startGraph) {
81649                     context.pop();
81650                 }
81651             }
81652
81653
81654             var drawWay = function(surface) {
81655                 behavior
81656                     .on('move', move)
81657                     .on('click', drawWay.add)
81658                     .on('clickWay', drawWay.addWay)
81659                     .on('clickNode', drawWay.addNode)
81660                     .on('undo', context.undo)
81661                     .on('cancel', drawWay.cancel)
81662                     .on('finish', drawWay.finish);
81663
81664                 d3_select(window)
81665                     .on('keydown.drawWay', keydown)
81666                     .on('keyup.drawWay', keyup);
81667
81668                 context.map()
81669                     .dblclickEnable(false)
81670                     .on('drawn.draw', setActiveElements);
81671
81672                 setActiveElements();
81673
81674                 surface.call(behavior);
81675
81676                 context.history()
81677                     .on('undone.draw', undone);
81678             };
81679
81680
81681             drawWay.off = function(surface) {
81682                 // Drawing was interrupted unexpectedly.
81683                 // This can happen if the user changes modes,
81684                 // clicks geolocate button, a hashchange event occurs, etc.
81685                 if (_tempEdits) {
81686                     context.pauseChangeDispatch();
81687                     context.pop(_tempEdits);
81688                     resetToStartGraph();
81689                     context.resumeChangeDispatch();
81690                 }
81691
81692                 context.map()
81693                     .on('drawn.draw', null);
81694
81695                 surface.call(behavior.off)
81696                     .selectAll('.active')
81697                     .classed('active', false);
81698
81699                 surface
81700                     .classed('nope', false)
81701                     .classed('nope-suppressed', false)
81702                     .classed('nope-disabled', false);
81703
81704                 d3_select(window)
81705                     .on('keydown.hover', null)
81706                     .on('keyup.hover', null);
81707
81708                 context.history()
81709                     .on('undone.draw', null);
81710             };
81711
81712
81713             function _actionAddDrawNode() {
81714                 return function(graph) {
81715                     return graph
81716                         .replace(end)
81717                         .replace(origWay.addNode(end.id, index));
81718                 };
81719             }
81720
81721
81722             function _actionReplaceDrawNode(newNode) {
81723                 return function(graph) {
81724                     return graph
81725                         .replace(origWay.addNode(newNode.id, index))
81726                         .remove(end);
81727                 };
81728             }
81729
81730
81731             // Accept the current position of the drawing node and continue drawing.
81732             drawWay.add = function(loc, d) {
81733                 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
81734                     return;   // can't click here
81735                 }
81736
81737                 context.pauseChangeDispatch();
81738                 context.pop(_tempEdits);
81739                 _tempEdits = 0;
81740
81741                 context.perform(
81742                     _actionAddDrawNode(),
81743                     annotation
81744                 );
81745
81746                 context.resumeChangeDispatch();
81747                 checkGeometry(false);   // finishDraw = false
81748                 context.enter(mode);
81749             };
81750
81751
81752             // Connect the way to an existing way.
81753             drawWay.addWay = function(loc, edge, d) {
81754                 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
81755                     return;   // can't click here
81756                 }
81757
81758                 context.pauseChangeDispatch();
81759                 context.pop(_tempEdits);
81760                 _tempEdits = 0;
81761
81762                 context.perform(
81763                     _actionAddDrawNode(),
81764                     actionAddMidpoint({ loc: loc, edge: edge }, end),
81765                     annotation
81766                 );
81767
81768                 context.resumeChangeDispatch();
81769                 checkGeometry(false);   // finishDraw = false
81770                 context.enter(mode);
81771             };
81772
81773
81774             // Connect the way to an existing node and continue drawing.
81775             drawWay.addNode = function(node, d) {
81776                 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
81777                     return;   // can't click here
81778                 }
81779
81780                 context.pauseChangeDispatch();
81781                 context.pop(_tempEdits);
81782                 _tempEdits = 0;
81783
81784                 context.perform(
81785                     _actionReplaceDrawNode(node),
81786                     annotation
81787                 );
81788
81789                 context.resumeChangeDispatch();
81790                 checkGeometry(false);   // finishDraw = false
81791                 context.enter(mode);
81792             };
81793
81794
81795             // Finish the draw operation, removing the temporary edits.
81796             // If the way has enough nodes to be valid, it's selected.
81797             // Otherwise, delete everything and return to browse mode.
81798             drawWay.finish = function() {
81799                 checkGeometry(true);   // finishDraw = true
81800                 if (context.surface().classed('nope')) {
81801                     return;   // can't click here
81802                 }
81803
81804                 context.pauseChangeDispatch();
81805                 context.pop(_tempEdits);
81806                 _tempEdits = 0;
81807
81808                 var way = context.hasEntity(wayID);
81809                 if (!way || way.isDegenerate()) {
81810                     drawWay.cancel();
81811                     return;
81812                 }
81813
81814                 context.resumeChangeDispatch();
81815
81816                 window.setTimeout(function() {
81817                     context.map().dblclickEnable(true);
81818                 }, 1000);
81819
81820                 var isNewFeature = !mode.isContinuing;
81821                 context.enter(modeSelect(context, [wayID]).newFeature(isNewFeature));
81822             };
81823
81824
81825             // Cancel the draw operation, delete everything, and return to browse mode.
81826             drawWay.cancel = function() {
81827                 context.pauseChangeDispatch();
81828                 context.pop(_tempEdits);
81829                 _tempEdits = 0;
81830
81831                 resetToStartGraph();
81832                 context.resumeChangeDispatch();
81833
81834                 window.setTimeout(function() {
81835                     context.map().dblclickEnable(true);
81836                 }, 1000);
81837
81838                 context.surface()
81839                     .classed('nope', false)
81840                     .classed('nope-disabled', false)
81841                     .classed('nope-suppressed', false);
81842
81843                 context.enter(modeBrowse(context));
81844             };
81845
81846
81847             drawWay.activeID = function() {
81848                 if (!arguments.length) { return end.id; }
81849                 // no assign
81850                 return drawWay;
81851             };
81852
81853
81854             drawWay.tail = function(text) {
81855                 behavior.tail(text);
81856                 return drawWay;
81857             };
81858
81859
81860             return drawWay;
81861         }
81862
81863         function modeDrawLine(context, wayID, startGraph, baselineGraph, button, affix, continuing) {
81864             var mode = {
81865                 button: button,
81866                 id: 'draw-line'
81867             };
81868
81869             var behavior;
81870
81871             mode.wayID = wayID;
81872
81873             mode.isContinuing = continuing;
81874
81875             mode.enter = function() {
81876                 var way = context.entity(wayID);
81877                 var index = (affix === 'prefix') ? 0 : undefined;
81878                 var headID = (affix === 'prefix') ? way.first() : way.last();
81879
81880                 behavior = behaviorDrawWay(context, wayID, index, mode, startGraph, baselineGraph)
81881                     .tail(t('modes.draw_line.tail'));
81882
81883                 var addNode = behavior.addNode;
81884                 behavior.addNode = function(node, d) {
81885                     if (node.id === headID) {
81886                         behavior.finish();
81887                     } else {
81888                         addNode(node, d);
81889                     }
81890                 };
81891
81892                 context.install(behavior);
81893             };
81894
81895
81896             mode.exit = function() {
81897                 context.uninstall(behavior);
81898             };
81899
81900
81901             mode.selectedIDs = function() {
81902                 return [wayID];
81903             };
81904
81905
81906             mode.activeID = function() {
81907                 return (behavior && behavior.activeID()) || [];
81908             };
81909
81910             return mode;
81911         }
81912
81913         function operationContinue(selectedIDs, context) {
81914             var graph = context.graph();
81915             var entities = selectedIDs.map(function(id) { return graph.entity(id); });
81916             var geometries = Object.assign(
81917                 { line: [], vertex: [] },
81918                 utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
81919             );
81920             var vertex = geometries.vertex[0];
81921
81922
81923             function candidateWays() {
81924                 return graph.parentWays(vertex).filter(function(parent) {
81925                     return parent.geometry(graph) === 'line' &&
81926                         !parent.isClosed() &&
81927                         parent.affix(vertex.id) &&
81928                         (geometries.line.length === 0 || geometries.line[0] === parent);
81929                 });
81930             }
81931
81932
81933             var operation = function() {
81934                 var candidate = candidateWays()[0];
81935                 context.enter(
81936                     modeDrawLine(context, candidate.id, context.graph(), context.graph(), 'line', candidate.affix(vertex.id), true)
81937                 );
81938             };
81939
81940
81941             operation.available = function() {
81942                 return geometries.vertex.length === 1 &&
81943                     geometries.line.length <= 1 &&
81944                     !context.features().hasHiddenConnections(vertex, context.graph());
81945             };
81946
81947
81948             operation.disabled = function() {
81949                 var candidates = candidateWays();
81950                 if (candidates.length === 0) {
81951                     return 'not_eligible';
81952                 } else if (candidates.length > 1) {
81953                     return 'multiple';
81954                 }
81955
81956                 return false;
81957             };
81958
81959
81960             operation.tooltip = function() {
81961                 var disable = operation.disabled();
81962                 return disable ?
81963                     t('operations.continue.' + disable) :
81964                     t('operations.continue.description');
81965             };
81966
81967
81968             operation.annotation = function() {
81969                 return t('operations.continue.annotation.line');
81970             };
81971
81972
81973             operation.id = 'continue';
81974             operation.keys = [t('operations.continue.key')];
81975             operation.title = t('operations.continue.title');
81976             operation.behavior = behaviorOperation(context).which(operation);
81977
81978             return operation;
81979         }
81980
81981         function operationDisconnect(selectedIDs, context) {
81982             var vertexIDs = [];
81983             var wayIDs = [];
81984             var otherIDs = [];
81985             var actions = [];
81986
81987             selectedIDs.forEach(function(id) {
81988                 if (context.geometry(id) === 'vertex') {
81989                     vertexIDs.push(id);
81990                 } else if (context.entity(id).type === 'way'){
81991                     wayIDs.push(id);
81992                 } else {
81993                     otherIDs.push(id);
81994                 }
81995             });
81996
81997             var disconnectingWayID = (vertexIDs.length === 0 && wayIDs.length === 1 && wayIDs[0]);
81998             var extent, nodes, coords;
81999
82000             if (disconnectingWayID) {   // disconnecting a way
82001                 var way = context.entity(disconnectingWayID);
82002                 extent = way.extent(context.graph());
82003                 nodes = utilGetAllNodes([disconnectingWayID], context.graph());
82004                 coords = nodes.map(function(n) { return n.loc; });
82005
82006                 way.nodes.forEach(function(vertexID) {
82007                     var action = actionDisconnect(vertexID).limitWays(wayIDs);
82008                     if (action.disabled(context.graph()) !== 'not_connected') {
82009                         actions.push(action);
82010                     }
82011                 });
82012
82013             } else {    // disconnecting a vertex
82014                 vertexIDs.forEach(function(vertexID) {
82015                     var action = actionDisconnect(vertexID);
82016
82017                     if (wayIDs.length > 0) {
82018                         var waysIDsForVertex = wayIDs.filter(function(wayID) {
82019                             var way = context.entity(wayID);
82020                             return way.nodes.indexOf(vertexID) !== -1;
82021                         });
82022                         action.limitWays(waysIDsForVertex);
82023                     }
82024                     actions.push(action);
82025                 });
82026             }
82027
82028
82029             var operation = function() {
82030                 context.perform(function(graph) {
82031                     return actions.reduce(function(graph, action) { return action(graph); }, graph);
82032                 }, operation.annotation());
82033
82034                 context.validator().validate();
82035             };
82036
82037
82038             operation.available = function() {
82039                 if (actions.length === 0) { return false; }
82040                 if (otherIDs.length !== 0) { return false; }
82041
82042                 if (vertexIDs.length !== 0 && wayIDs.length !== 0 && !wayIDs.every(function(wayID) {
82043                     return vertexIDs.some(function(vertexID) {
82044                         var way = context.entity(wayID);
82045                         return way.nodes.indexOf(vertexID) !== -1;
82046                     });
82047                 })) { return false; }
82048
82049                 return true;
82050             };
82051
82052
82053             operation.disabled = function() {
82054                 var reason;
82055                 for (var actionIndex in actions) {
82056                     reason = actions[actionIndex].disabled(context.graph());
82057                     if (reason) { return reason; }
82058                 }
82059
82060                 if (disconnectingWayID && extent.percentContainedIn(context.extent()) < 0.8) {
82061                     return 'too_large.single';
82062                 } else if (disconnectingWayID && someMissing()) {
82063                     return 'not_downloaded';
82064                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
82065                     return 'connected_to_hidden';
82066                 }
82067
82068                 return false;
82069
82070
82071                 function someMissing() {
82072                     if (context.inIntro()) { return false; }
82073                     var osm = context.connection();
82074                     if (osm) {
82075                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
82076                         if (missing.length) {
82077                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
82078                             return true;
82079                         }
82080                     }
82081                     return false;
82082                 }
82083             };
82084
82085
82086             operation.tooltip = function() {
82087                 var disable = operation.disabled();
82088                 if (disable) {
82089                     return t('operations.disconnect.' + disable);
82090                 }
82091                 if (disconnectingWayID) {
82092                     return t('operations.disconnect.' + context.geometry(disconnectingWayID) + '.description');
82093                 }
82094                 return t('operations.disconnect.description');
82095             };
82096
82097
82098             operation.annotation = function() {
82099                 return t('operations.disconnect.annotation');
82100             };
82101
82102
82103             operation.id = 'disconnect';
82104             operation.keys = [t('operations.disconnect.key')];
82105             operation.title = t('operations.disconnect.title');
82106             operation.behavior = behaviorOperation(context).which(operation);
82107
82108             return operation;
82109         }
82110
82111         function operationDowngrade(selectedIDs, context) {
82112             var affectedFeatureCount = 0;
82113             var downgradeType;
82114
82115             setDowngradeTypeForEntityIDs();
82116
82117             var multi = affectedFeatureCount === 1 ? 'single' : 'multiple';
82118
82119             function setDowngradeTypeForEntityIDs() {
82120                 for (var i in selectedIDs) {
82121                     var entityID = selectedIDs[i];
82122                     var type = downgradeTypeForEntityID(entityID);
82123                     if (type) {
82124                         affectedFeatureCount += 1;
82125                         if (downgradeType && type !== downgradeType) {
82126                             downgradeType = 'building_address';
82127                         } else {
82128                             downgradeType = type;
82129                         }
82130                     }
82131                 }
82132             }
82133
82134             function downgradeTypeForEntityID(entityID) {
82135                 var graph = context.graph();
82136                 var entity = graph.entity(entityID);
82137                 var preset = context.presets().match(entity, graph);
82138
82139                 if (preset.isFallback()) { return null; }
82140
82141                 if (entity.type === 'node' &&
82142                     preset.id !== 'address' &&
82143                     Object.keys(entity.tags).some(function(key) {
82144                         return key.match(/^addr:.{1,}/);
82145                     })) {
82146
82147                     return 'address';
82148                 }
82149                 if (entity.geometry(graph) === 'area' &&
82150                     entity.tags.building &&
82151                     !preset.tags.building) {
82152
82153                     return 'building';
82154                 }
82155
82156                 return null;
82157             }
82158
82159             var buildingKeysToKeep = ['architect', 'building', 'height', 'layer', 'source', 'type', 'wheelchair'];
82160             var addressKeysToKeep = ['source'];
82161
82162             var operation = function () {
82163                 context.perform(function(graph) {
82164
82165                     for (var i in selectedIDs) {
82166                         var entityID = selectedIDs[i];
82167                         var type = downgradeTypeForEntityID(entityID);
82168                         if (!type) { continue; }
82169
82170                         var tags = Object.assign({}, graph.entity(entityID).tags);  // shallow copy
82171                         for (var key in tags) {
82172                             if (type === 'address' && addressKeysToKeep.indexOf(key) !== -1) { continue; }
82173                             if (type === 'building') {
82174                                 if (buildingKeysToKeep.indexOf(key) !== -1 ||
82175                                     key.match(/^building:.{1,}/) ||
82176                                     key.match(/^roof:.{1,}/)) { continue; }
82177                             }
82178                             // keep address tags for buildings too
82179                             if (key.match(/^addr:.{1,}/)) { continue; }
82180
82181                             delete tags[key];
82182                         }
82183                         graph = actionChangeTags(entityID, tags)(graph);
82184                     }
82185                     return graph;
82186                 }, operation.annotation());
82187
82188                 context.validator().validate();
82189
82190                 // refresh the select mode to enable the delete operation
82191                 context.enter(modeSelect(context, selectedIDs));
82192             };
82193
82194
82195             operation.available = function () {
82196                 return downgradeType;
82197             };
82198
82199
82200             operation.disabled = function () {
82201                 if (selectedIDs.some(hasWikidataTag)) {
82202                     return 'has_wikidata_tag';
82203                 }
82204                 return false;
82205
82206                 function hasWikidataTag(id) {
82207                     var entity = context.entity(id);
82208                     return entity.tags.wikidata && entity.tags.wikidata.trim().length > 0;
82209                 }
82210             };
82211
82212
82213             operation.tooltip = function () {
82214                 var disable = operation.disabled();
82215                 return disable ?
82216                     t('operations.downgrade.' + disable + '.' + multi) :
82217                     t('operations.downgrade.description.' + downgradeType);
82218             };
82219
82220
82221             operation.annotation = function () {
82222                 var suffix;
82223                 if (downgradeType === 'building_address') {
82224                     suffix = 'multiple';
82225                 } else {
82226                     suffix = downgradeType + '.' + multi;
82227                 }
82228                 return t('operations.downgrade.annotation.' + suffix, { n: affectedFeatureCount});
82229             };
82230
82231
82232             operation.id = 'downgrade';
82233             operation.keys = [uiCmd('⌘⌫'), uiCmd('⌘⌦'), uiCmd('⌦')];
82234             operation.title = t('operations.downgrade.title');
82235             operation.behavior = behaviorOperation(context).which(operation);
82236
82237
82238             return operation;
82239         }
82240
82241         function operationExtract(selectedIDs, context) {
82242             var entityID = selectedIDs.length && selectedIDs[0];
82243             var action = actionExtract(entityID, context.projection);
82244
82245             var geometry = entityID && context.geometry(entityID);
82246             var extent = geometry === 'area' && context.entity(entityID).extent(context.graph());
82247
82248
82249             var operation = function () {
82250                 context.perform(action);  // do the extract
82251                 context.validator().validate();
82252
82253                 var extractedNodeID = action.getExtractedNodeID();
82254
82255                 var mouse = context.map().mouseCoordinates();
82256                 if (mouse.some(isNaN)) {
82257                     enterMoveMode();
82258
82259                 } else {
82260                     // move detached node to the mouse location (transitioned)
82261                     context.perform(actionMoveNode(extractedNodeID, mouse));
82262
82263                     // after transition completes, put at final mouse location and enter move mode.
82264                     window.setTimeout(function() {
82265                         mouse = context.map().mouseCoordinates();
82266                         context.replace(actionMoveNode(extractedNodeID, mouse));
82267                         enterMoveMode();
82268                     }, 150);
82269                 }
82270
82271                 function enterMoveMode() {
82272                     var baseGraph = context.graph();
82273                     context.enter(modeMove(context, [extractedNodeID], baseGraph));
82274                 }
82275             };
82276
82277
82278             operation.available = function () {
82279                 if (selectedIDs.length !== 1) { return false; }
82280
82281                 var graph = context.graph();
82282                 var entity = graph.hasEntity(entityID);
82283                 if (!entity) { return false; }
82284
82285                 if (!entity.hasInterestingTags()) { return false; }
82286
82287                 if (geometry === 'area') {
82288                     var preset = context.presets().match(entity, graph);
82289                     return preset.geometry.indexOf('point') !== -1;
82290                 }
82291
82292                 return entity.type === 'node' && graph.parentWays(entity).length > 0;
82293             };
82294
82295
82296             operation.disabled = function () {
82297                 var reason = action.disabled(context.graph());
82298                 if (reason) {
82299                     return reason;
82300                 } else if (geometry === 'vertex' && selectedIDs.some(context.hasHiddenConnections)) {
82301                     return 'connected_to_hidden';
82302                 } else if (extent && extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
82303                     return 'too_large';
82304                 }
82305
82306                 return false;
82307             };
82308
82309
82310             operation.tooltip = function () {
82311                 var disableReason = operation.disabled();
82312                 if (disableReason) {
82313                     return t('operations.extract.' + disableReason + '.' + geometry + '.single',
82314                         { relation: context.presets().item('type/restriction').name() });
82315                 } else {
82316                     return t('operations.extract.description.' + geometry + '.single');
82317                 }
82318             };
82319
82320
82321             operation.annotation = function () {
82322                 return t('operations.extract.annotation.single');
82323             };
82324
82325
82326             operation.id = 'extract';
82327             operation.keys = [t('operations.extract.key')];
82328             operation.title = t('operations.extract.title');
82329             operation.behavior = behaviorOperation(context).which(operation);
82330
82331
82332             return operation;
82333         }
82334
82335         function operationMerge(selectedIDs, context) {
82336
82337             function updatePresetTags(newGraph, ids) {
82338                 var id = ids[0];
82339                 var newEntity = newGraph.hasEntity(id);
82340
82341                 if (!newEntity) { return; }
82342                 var newPreset = context.presets().match(newEntity, newGraph);
82343                 context.replace(actionChangePreset(id, null, newPreset), operation.annotation());
82344             }
82345
82346
82347             var join = actionJoin(selectedIDs);
82348             var merge = actionMerge(selectedIDs);
82349             var mergePolygon = actionMergePolygon(selectedIDs);
82350             var mergeNodes = actionMergeNodes(selectedIDs);
82351
82352
82353             var operation = function() {
82354                 var doUpdateTags;
82355                 var action;
82356
82357                 if (!join.disabled(context.graph())) {
82358                     doUpdateTags = false;
82359                     action = join;
82360                 } else if (!merge.disabled(context.graph())) {
82361                     doUpdateTags = true;
82362                     action = merge;
82363                 } else if (!mergePolygon.disabled(context.graph())) {
82364                     doUpdateTags = false;
82365                     action = mergePolygon;
82366                 } else {
82367                     doUpdateTags = true;
82368                     action = mergeNodes;
82369                 }
82370
82371                 context.perform(action, operation.annotation());
82372
82373                 var ids = selectedIDs.filter(function(id) {
82374                     var entity = context.hasEntity(id);
82375                     return entity && entity.type !== 'node';
82376                 });
82377
82378                 // if we merged tags, rematch preset to update tags if necessary (#3851)
82379                 if (doUpdateTags) {
82380                     updatePresetTags(context.graph(), ids);
82381                 }
82382
82383                 context.validator().validate();
82384                 context.enter(modeSelect(context, ids));
82385             };
82386
82387
82388             operation.available = function() {
82389                 return selectedIDs.length >= 2;
82390             };
82391
82392
82393             operation.disabled = function() {
82394                 return join.disabled(context.graph()) &&
82395                     merge.disabled(context.graph()) &&
82396                     mergePolygon.disabled(context.graph()) &&
82397                     mergeNodes.disabled(context.graph());
82398             };
82399
82400
82401             operation.tooltip = function() {
82402                 var j = join.disabled(context.graph());          // 'not_eligible', 'not_adjacent', 'restriction', 'conflicting_tags'
82403                 var m = merge.disabled(context.graph());         // 'not_eligible'
82404                 var p = mergePolygon.disabled(context.graph());  // 'not_eligible', 'incomplete_relation'
82405                 var n = mergeNodes.disabled(context.graph());    // 'not_eligible', 'relation', 'restriction'
82406
82407                 // disabled for one of various reasons
82408                 if (j && m && p && n) {
82409                     if (j === 'restriction' || n === 'restriction') {
82410                         return t('operations.merge.restriction',
82411                             { relation: context.presets().item('type/restriction').name() });
82412
82413                     } else if (p === 'incomplete_relation') {
82414                         return t('operations.merge.incomplete_relation');
82415
82416                     } else if (n === 'relation') {
82417                         return t('operations.merge.relation');
82418
82419                     } else {
82420                         return t('operations.merge.' + j);
82421                     }
82422
82423                 } else {
82424                     return t('operations.merge.description');
82425                 }
82426             };
82427
82428
82429             operation.annotation = function() {
82430                 return t('operations.merge.annotation', { n: selectedIDs.length });
82431             };
82432
82433
82434             operation.id = 'merge';
82435             operation.keys = [t('operations.merge.key')];
82436             operation.title = t('operations.merge.title');
82437             operation.behavior = behaviorOperation(context).which(operation);
82438
82439             return operation;
82440         }
82441
82442         function operationReverse(selectedIDs, context) {
82443
82444             var operation = function() {
82445                 context.perform(function combinedReverseAction(graph) {
82446                     actions().forEach(function(action) {
82447                         graph = action(graph);
82448                     });
82449                     return graph;
82450                 }, operation.annotation());
82451                 context.validator().validate();
82452             };
82453
82454             function actions(situation) {
82455                 return selectedIDs.map(function(entityID) {
82456                     var entity = context.hasEntity(entityID);
82457                     if (!entity) { return; }
82458
82459                     if (situation === 'toolbar') {
82460                         if (entity.type === 'way' &&
82461                             (!entity.isOneWay() && !entity.isSided())) { return; }
82462                     }
82463
82464                     var geometry = entity.geometry(context.graph());
82465                     if (entity.type !== 'node' && geometry !== 'line') { return; }
82466
82467                     var action = actionReverse(entityID);
82468                     if (action.disabled(context.graph())) { return; }
82469
82470                     return action;
82471                 }).filter(Boolean);
82472             }
82473
82474             function reverseTypeID() {
82475                 var acts = actions();
82476                 var nodeActionCount = acts.filter(function(act) {
82477                     var entity = context.hasEntity(act.entityID());
82478                     return entity && entity.type === 'node';
82479                 }).length;
82480                 var typeID = nodeActionCount === 0 ? 'line' : (nodeActionCount === acts.length ? 'point' : 'features');
82481                 if (typeID !== 'features' && acts.length > 1) { typeID += 's'; }
82482                 return typeID;
82483             }
82484
82485
82486             operation.available = function(situation) {
82487                 return actions(situation).length > 0;
82488             };
82489
82490
82491             operation.disabled = function() {
82492                 return false;
82493             };
82494
82495
82496             operation.tooltip = function() {
82497                 return t('operations.reverse.description.' + reverseTypeID());
82498             };
82499
82500
82501             operation.annotation = function() {
82502                 return t('operations.reverse.annotation.' + reverseTypeID());
82503             };
82504
82505
82506             operation.id = 'reverse';
82507             operation.keys = [t('operations.reverse.key')];
82508             operation.title = t('operations.reverse.title');
82509             operation.behavior = behaviorOperation(context).which(operation);
82510
82511             return operation;
82512         }
82513
82514         function operationSplit(selectedIDs, context) {
82515             var vertices = selectedIDs
82516                 .filter(function(id) { return context.geometry(id) === 'vertex'; });
82517             var entityID = vertices[0];
82518             var action = actionSplit(entityID);
82519             var ways = [];
82520
82521             if (vertices.length === 1) {
82522                 if (entityID && selectedIDs.length > 1) {
82523                     var ids = selectedIDs.filter(function(id) { return id !== entityID; });
82524                     action.limitWays(ids);
82525                 }
82526                 ways = action.ways(context.graph());
82527             }
82528
82529
82530             var operation = function() {
82531                 var difference = context.perform(action, operation.annotation());
82532                 context.enter(modeSelect(context, difference.extantIDs()));
82533             };
82534
82535
82536             operation.available = function() {
82537                 return vertices.length === 1;
82538             };
82539
82540
82541             operation.disabled = function() {
82542                 var reason = action.disabled(context.graph());
82543                 if (reason) {
82544                     return reason;
82545                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
82546                     return 'connected_to_hidden';
82547                 }
82548
82549                 return false;
82550             };
82551
82552
82553             operation.tooltip = function() {
82554                 var disable = operation.disabled();
82555                 if (disable) {
82556                     return t('operations.split.' + disable);
82557                 } else if (ways.length === 1) {
82558                     return t('operations.split.description.' + context.geometry(ways[0].id));
82559                 } else {
82560                     return t('operations.split.description.multiple');
82561                 }
82562             };
82563
82564
82565             operation.annotation = function() {
82566                 return ways.length === 1 ?
82567                     t('operations.split.annotation.' + context.geometry(ways[0].id)) :
82568                     t('operations.split.annotation.multiple', { n: ways.length });
82569             };
82570
82571
82572             operation.id = 'split';
82573             operation.keys = [t('operations.split.key')];
82574             operation.title = t('operations.split.title');
82575             operation.behavior = behaviorOperation(context).which(operation);
82576
82577             return operation;
82578         }
82579
82580         function operationStraighten(selectedIDs, context) {
82581             var wayIDs = selectedIDs.filter(function(id) { return id.charAt(0) === 'w'; });
82582             var nodeIDs = selectedIDs.filter(function(id) { return id.charAt(0) === 'n'; });
82583
82584             var nodes = utilGetAllNodes(selectedIDs, context.graph());
82585             var coords = nodes.map(function(n) { return n.loc; });
82586             var action = chooseAction();
82587             var geometry;
82588
82589
82590             function chooseAction() {
82591                 // straighten selected nodes
82592                 if (wayIDs.length === 0 && nodeIDs.length > 2) {
82593                     geometry = 'points';
82594                     return actionStraightenNodes(nodeIDs, context.projection);
82595
82596                 // straighten selected ways (possibly between range of 2 selected nodes)
82597                 } else if (wayIDs.length > 0 && (nodeIDs.length === 0 || nodeIDs.length === 2)) {
82598                     var startNodeIDs = [];
82599                     var endNodeIDs = [];
82600
82601                     for (var i = 0; i < selectedIDs.length; i++) {
82602                         var entity = context.entity(selectedIDs[i]);
82603                         if (entity.type === 'node') {
82604                             continue;
82605                         } else if (entity.type !== 'way' || entity.isClosed()) {
82606                             return false;  // exit early, can't straighten these
82607                         }
82608
82609                         startNodeIDs.push(entity.first());
82610                         endNodeIDs.push(entity.last());
82611                     }
82612
82613                     // Remove duplicate end/startNodeIDs (duplicate nodes cannot be at the line end)
82614                     startNodeIDs = startNodeIDs.filter(function(n) {
82615                         return startNodeIDs.indexOf(n) === startNodeIDs.lastIndexOf(n);
82616                     });
82617                     endNodeIDs = endNodeIDs.filter(function(n) {
82618                         return endNodeIDs.indexOf(n) === endNodeIDs.lastIndexOf(n);
82619                     });
82620
82621                     // Ensure all ways are connected (i.e. only 2 unique endpoints/startpoints)
82622                     if (utilArrayDifference(startNodeIDs, endNodeIDs).length +
82623                         utilArrayDifference(endNodeIDs, startNodeIDs).length !== 2) { return false; }
82624
82625                     // Ensure path contains at least 3 unique nodes
82626                     var wayNodeIDs = utilGetAllNodes(wayIDs, context.graph())
82627                         .map(function(node) { return node.id; });
82628                     if (wayNodeIDs.length <= 2) { return false; }
82629
82630                     // If range of 2 selected nodes is supplied, ensure nodes lie on the selected path
82631                     if (nodeIDs.length === 2 && (
82632                         wayNodeIDs.indexOf(nodeIDs[0]) === -1 || wayNodeIDs.indexOf(nodeIDs[1]) === -1
82633                     )) { return false; }
82634
82635                     geometry = 'line';
82636                     return actionStraightenWay(selectedIDs, context.projection);
82637                 }
82638
82639                 return false;
82640             }
82641
82642
82643             function operation() {
82644                 if (!action) { return; }
82645
82646                 context.perform(action, operation.annotation());
82647
82648                 window.setTimeout(function() {
82649                     context.validator().validate();
82650                 }, 300);  // after any transition
82651             }
82652
82653
82654             operation.available = function() {
82655                 return Boolean(action);
82656             };
82657
82658
82659             operation.disabled = function() {
82660                 var reason = action.disabled(context.graph());
82661                 if (reason) {
82662                     return reason;
82663                 } else if (someMissing()) {
82664                     return 'not_downloaded';
82665                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
82666                     return 'connected_to_hidden';
82667                 }
82668
82669                 return false;
82670
82671
82672                 function someMissing() {
82673                     if (context.inIntro()) { return false; }
82674                     var osm = context.connection();
82675                     if (osm) {
82676                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
82677                         if (missing.length) {
82678                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
82679                             return true;
82680                         }
82681                     }
82682                     return false;
82683                 }
82684             };
82685
82686
82687             operation.tooltip = function() {
82688                 var disable = operation.disabled();
82689                 return disable ?
82690                     t('operations.straighten.' + disable) :
82691                     t('operations.straighten.description.' + geometry);
82692             };
82693
82694
82695             operation.annotation = function() {
82696                 return t('operations.straighten.annotation.' + geometry);
82697             };
82698
82699
82700             operation.id = 'straighten';
82701             operation.keys = [t('operations.straighten.key')];
82702             operation.title = t('operations.straighten.title');
82703             operation.behavior = behaviorOperation(context).which(operation);
82704
82705             return operation;
82706         }
82707
82708
82709
82710         var Operations = /*#__PURE__*/Object.freeze({
82711                 __proto__: null,
82712                 operationCircularize: operationCircularize,
82713                 operationContinue: operationContinue,
82714                 operationDelete: operationDelete,
82715                 operationDisconnect: operationDisconnect,
82716                 operationDowngrade: operationDowngrade,
82717                 operationExtract: operationExtract,
82718                 operationMerge: operationMerge,
82719                 operationMove: operationMove,
82720                 operationOrthogonalize: operationOrthogonalize,
82721                 operationReflectShort: operationReflectShort,
82722                 operationReflectLong: operationReflectLong,
82723                 operationReverse: operationReverse,
82724                 operationRotate: operationRotate,
82725                 operationSplit: operationSplit,
82726                 operationStraighten: operationStraighten
82727         });
82728
82729         function uiEditMenu(context, operations) {
82730             var menu;
82731             var center = [0, 0];
82732             var offset = [0, 0];
82733             var tooltip;
82734
82735             var p = 8;               // top padding
82736             var m = 4;               // top margin
82737             var h = 15;              // height of icon
82738             var vpBottomMargin = 45; // viewport bottom margin
82739             var vpSideMargin = 35;   // viewport side margin
82740             var buttonWidth = 44;
82741             var buttonHeight = (2 * p + h);
82742             var menuWidth = buttonWidth;
82743             var menuHeight = (2 * m) + operations.length * buttonHeight;
82744             var menuSideMargin = 10;
82745             var tooltipWidth = 200;
82746             var tooltipHeight = 200;  // a reasonable guess, real height depends on tooltip contents
82747
82748
82749             var editMenu = function (selection) {
82750                 if (!operations.length) { return; }
82751
82752                 selection.node().parentNode.focus();
82753
82754                 var isRTL = textDirection === 'rtl';
82755                 var viewport = context.surfaceRect();
82756
82757                 if (!isRTL && (center[0] + menuSideMargin + menuWidth) > (viewport.width - vpSideMargin)) {
82758                     // menu is going left-to-right and near right viewport edge, go left instead
82759                     isRTL = true;
82760                 } else if (isRTL && (center[0] - menuSideMargin - menuWidth) < vpSideMargin) {
82761                     // menu is going right-to-left and near left viewport edge, go right instead
82762                     isRTL = false;
82763                 }
82764
82765                 offset[0] = (isRTL ? -1 * (menuSideMargin + menuWidth) : menuSideMargin);
82766
82767                 if (center[1] + menuHeight > (viewport.height - vpBottomMargin)) {
82768                     // menu is near bottom viewport edge, shift upwards
82769                     offset[1] = -1 * (center[1] + menuHeight - viewport.height + vpBottomMargin);
82770                 }
82771
82772                 var origin = geoVecAdd(center, offset);
82773
82774                 menu = selection
82775                     .append('g')
82776                     .attr('class', 'edit-menu')
82777                     .attr('transform', 'translate(' + origin + ')')
82778                     .attr('opacity', 0);
82779
82780                 menu
82781                     .transition()
82782                     .attr('opacity', 1);
82783
82784                 menu
82785                     .append('rect')
82786                     .attr('class', 'edit-menu-background')
82787                     .attr('x', 4)
82788                     .attr('rx', 4)
82789                     .attr('ry', 4)
82790                     .attr('width', menuWidth)
82791                     .attr('height', menuHeight)
82792                     .attr('stroke-linecap', 'round');
82793
82794
82795                 var buttons = menu.selectAll('.edit-menu-item')
82796                     .data(operations);
82797
82798                 // enter
82799                 var buttonsEnter = buttons.enter()
82800                     .append('g')
82801                     .attr('class', function (d) { return 'edit-menu-item edit-menu-item-' + d.id; })
82802                     .attr('transform', function(d, i) {
82803                         return 'translate(' + geoVecFloor([0, m + i * buttonHeight]).join(',') + ')';
82804                     });
82805
82806                 buttonsEnter
82807                     .append('rect')
82808                     .attr('x', 4)
82809                     .attr('width', buttonWidth)
82810                     .attr('height', buttonHeight)
82811                     .on('click', click)
82812                     .on('mousedown', mousedown)
82813                     .on('mouseover', mouseover)
82814                     .on('mouseout', mouseout);
82815
82816                 buttonsEnter
82817                     .append('use')
82818                     .attr('class', 'operation-icon')
82819                     .attr('width', '20')
82820                     .attr('height', '20')
82821                     .attr('transform', function () { return 'translate(' + [2 * p, 5] + ')'; })
82822                     .attr('xlink:href', function (d) { return '#iD-operation-' + d.id; });
82823
82824                 // update
82825                 buttons = buttonsEnter
82826                     .merge(buttons)
82827                     .classed('disabled', function(d) { return d.disabled(); });
82828
82829
82830                 tooltip = d3_select('#id-container')
82831                     .append('div')
82832                     .attr('class', 'popover tooltip edit-menu-tooltip');
82833
82834                 tooltip
82835                     .append('div')
82836                     .attr('class', 'popover-inner');
82837
82838
82839                 function click(operation) {
82840                     event.stopPropagation();
82841                     if (operation.disabled()) { return; }
82842                     operation();
82843                     editMenu.close();
82844                 }
82845
82846                 function mousedown() {
82847                     event.stopPropagation();  // https://github.com/openstreetmap/iD/issues/1869
82848                 }
82849
82850                 function mouseover(d, i) {
82851                     var tipX, tipY;
82852
82853                     if (!isRTL) {
82854                         tipX = viewport.left + origin[0] + menuSideMargin + menuWidth;
82855                     } else {
82856                         tipX = viewport.left + origin[0] - 4 - tooltipWidth;
82857                     }
82858
82859                     if (tipX + tooltipWidth > viewport.right) {
82860                         // tip is going left-to-right and near right viewport edge, go left instead
82861                         tipX = viewport.left + origin[0] - 4 - tooltipWidth;
82862                     } else if (tipX < viewport.left) {
82863                         // tip is going right-to-left and near left viewport edge, go right instead
82864                         tipX = viewport.left + origin[0] + menuSideMargin + menuWidth;
82865                     }
82866
82867                     tipY = viewport.top + origin[1] + (i * buttonHeight);
82868                     if (tipY + tooltipHeight > viewport.bottom) {
82869                         // tip is near bottom viewport edge, shift upwards
82870                         tipY -= tipY + tooltipHeight - viewport.bottom;
82871                     }
82872
82873                     tooltip
82874                         .style('left', tipX + 'px')
82875                         .style('top', tipY + 'px')
82876                         .style('display', 'block')
82877                         .selectAll('.popover-inner')
82878                         .html(uiTooltipHtml(d.tooltip(), d.keys[0], d.title));
82879
82880                     // update disabled again, just in case tooltip and disabled state disagree
82881                     // https://github.com/openstreetmap/iD/issues/6296#issuecomment-489259027
82882                     d3_select(this.parentNode)
82883                         .classed('disabled', d.disabled());
82884
82885                 }
82886
82887                 function mouseout() {
82888                     tooltip.style('display', 'none');
82889                 }
82890             };
82891
82892
82893             editMenu.close = function () {
82894                 if (menu) {
82895                     menu
82896                         .style('pointer-events', 'none')
82897                         .transition()
82898                         .attr('opacity', 0)
82899                         .remove();
82900                 }
82901
82902                 if (tooltip) {
82903                     tooltip.remove();
82904                 }
82905             };
82906
82907
82908             editMenu.center = function(val) {
82909                 if (!arguments.length) { return center; }
82910                 center = val;
82911                 return editMenu;
82912             };
82913
82914
82915             return editMenu;
82916         }
82917
82918         function uiSelectionList(context, selectedIDs) {
82919
82920             function selectEntity(entity) {
82921                 context.enter(modeSelect(context, [entity.id]));
82922             }
82923
82924
82925             function deselectEntity(entity) {
82926                 event.stopPropagation();
82927                 var index = selectedIDs.indexOf(entity.id);
82928                 if (index > -1) {
82929                     selectedIDs.splice(index, 1);
82930                 }
82931                 context.enter(modeSelect(context, selectedIDs));
82932             }
82933
82934
82935             function selectionList(selection) {
82936                 selection.classed('selection-list-pane', true);
82937
82938                 var header = selection
82939                     .append('div')
82940                     .attr('class', 'header fillL cf');
82941
82942                 header
82943                     .append('h3')
82944                     .text(t('inspector.multiselect'));
82945
82946                 var listWrap = selection
82947                     .append('div')
82948                     .attr('class', 'inspector-body');
82949
82950                 var list = listWrap
82951                     .append('div')
82952                     .attr('class', 'feature-list cf');
82953
82954
82955                 context.history()
82956                     .on('change.selectionList', function(difference) {
82957                         if (difference) { drawList(); }
82958                     });
82959
82960                 drawList();
82961
82962
82963                 function drawList() {
82964                     var entities = selectedIDs
82965                         .map(function(id) { return context.hasEntity(id); })
82966                         .filter(function(entity) { return entity; });
82967
82968                     var items = list.selectAll('.feature-list-item')
82969                         .data(entities, osmEntity.key);
82970
82971                     items.exit()
82972                         .remove();
82973
82974                     // Enter
82975                     var enter = items.enter()
82976                         .append('div')
82977                         .attr('class', 'feature-list-item')
82978                         .on('click', selectEntity);
82979
82980                     enter
82981                         .each(function(d) {
82982                             d3_select(this).on('mouseover', function() {
82983                                 utilHighlightEntities([d.id], true, context);
82984                             });
82985                             d3_select(this).on('mouseout', function() {
82986                                 utilHighlightEntities([d.id], false, context);
82987                             });
82988                         });
82989
82990                     var label = enter
82991                         .append('button')
82992                         .attr('class', 'label');
82993
82994                     enter
82995                         .append('button')
82996                         .attr('class', 'close')
82997                         .on('click', deselectEntity)
82998                         .call(svgIcon('#iD-icon-close'));
82999
83000                     label
83001                         .append('span')
83002                         .attr('class', 'entity-geom-icon')
83003                         .call(svgIcon('', 'pre-text'));
83004
83005                     label
83006                         .append('span')
83007                         .attr('class', 'entity-type');
83008
83009                     label
83010                         .append('span')
83011                         .attr('class', 'entity-name');
83012
83013                     // Update
83014                     items = items.merge(enter);
83015
83016                     items.selectAll('.entity-geom-icon use')
83017                         .attr('href', function() {
83018                             var entity = this.parentNode.parentNode.__data__;
83019                             return '#iD-icon-' + context.geometry(entity.id);
83020                         });
83021
83022                     items.selectAll('.entity-type')
83023                         .text(function(entity) { return context.presets().match(entity, context.graph()).name(); });
83024
83025                     items.selectAll('.entity-name')
83026                         .text(function(entity) { return utilDisplayName(entity); });
83027                 }
83028             }
83029
83030             return selectionList;
83031         }
83032
83033         function uiRadialMenu(context, operations) {
83034             var menu;
83035             var center = [0, 0];
83036             var tooltip;
83037
83038
83039             var radialMenu = function(selection) {
83040                 if (!operations.length) { return; }
83041
83042                 selection.node().parentNode.focus();
83043
83044                 function click(operation) {
83045                     event.stopPropagation();
83046                     if (operation.disabled()) { return; }
83047                     operation();
83048                     radialMenu.close();
83049                 }
83050
83051                 menu = selection
83052                     .append('g')
83053                     .attr('class', 'radial-menu')
83054                     .attr('transform', 'translate(' + center + ')')
83055                     .attr('opacity', 0);
83056
83057                 menu
83058                     .transition()
83059                     .attr('opacity', 1);
83060
83061                 var r = 50;
83062                 var a = Math.PI / 4;
83063                 var a0 = -Math.PI / 4;
83064                 var a1 = a0 + (operations.length - 1) * a;
83065
83066                 menu
83067                     .append('path')
83068                     .attr('class', 'radial-menu-background')
83069                     .attr('d', 'M' + r * Math.sin(a0) + ',' +
83070                                      r * Math.cos(a0) +
83071                               ' A' + r + ',' + r + ' 0 ' + (operations.length > 5 ? '1' : '0') + ',0 ' +
83072                                      (r * Math.sin(a1) + 1e-3) + ',' +
83073                                      (r * Math.cos(a1) + 1e-3)) // Force positive-length path (#1305)
83074                     .attr('stroke-width', 50)
83075                     .attr('stroke-linecap', 'round');
83076
83077                 var button = menu.selectAll()
83078                     .data(operations)
83079                     .enter()
83080                     .append('g')
83081                     .attr('class', function(d) { return 'radial-menu-item radial-menu-item-' + d.id; })
83082                     .classed('disabled', function(d) { return d.disabled(); })
83083                     .attr('transform', function(d, i) {
83084                         return 'translate(' + geoVecFloor([
83085                                 r * Math.sin(a0 + i * a),
83086                                 r * Math.cos(a0 + i * a)]).join(',') + ')';
83087                     });
83088
83089                 button
83090                     .append('circle')
83091                     .attr('r', 15)
83092                     .on('click', click)
83093                     .on('mousedown', mousedown)
83094                     .on('mouseover', mouseover)
83095                     .on('mouseout', mouseout);
83096
83097                 button
83098                     .append('use')
83099                     .attr('transform', 'translate(-10,-10)')
83100                     .attr('width', '20')
83101                     .attr('height', '20')
83102                     .attr('xlink:href', function(d) { return '#iD-operation-' + d.id; });
83103
83104                 tooltip = d3_select(document.body)
83105                     .append('div')
83106                     .attr('class', 'popover-inner radial-menu-tooltip');
83107
83108                 function mousedown() {
83109                     event.stopPropagation(); // https://github.com/openstreetmap/iD/issues/1869
83110                 }
83111
83112                 function mouseover(d, i) {
83113                     var rect = context.surfaceRect();
83114                     var angle = a0 + i * a;
83115                     var top = rect.top + (r + 25) * Math.cos(angle) + center[1] + 'px';
83116                     var left = rect.left + (r + 25) * Math.sin(angle) + center[0] + 'px';
83117                     var bottom = rect.height - (r + 25) * Math.cos(angle) - center[1] + 'px';
83118                     var right = rect.width - (r + 25) * Math.sin(angle) - center[0] + 'px';
83119
83120                     tooltip
83121                         .style('top', null)
83122                         .style('left', null)
83123                         .style('bottom', null)
83124                         .style('right', null)
83125                         .style('display', 'block')
83126                         .html(uiTooltipHtml(d.tooltip(), d.keys[0]));
83127
83128                     if (i === 0) {
83129                         tooltip
83130                             .style('right', right)
83131                             .style('top', top);
83132                     } else if (i >= 4) {
83133                         tooltip
83134                             .style('left', left)
83135                             .style('bottom', bottom);
83136                     } else {
83137                         tooltip
83138                             .style('left', left)
83139                             .style('top', top);
83140                     }
83141                 }
83142
83143                 function mouseout() {
83144                     tooltip.style('display', 'none');
83145                 }
83146             };
83147
83148
83149             radialMenu.close = function() {
83150                 if (menu) {
83151                     menu
83152                         .style('pointer-events', 'none')
83153                         .transition()
83154                         .attr('opacity', 0)
83155                         .remove();
83156                 }
83157
83158                 if (tooltip) {
83159                     tooltip.remove();
83160                 }
83161             };
83162
83163
83164             radialMenu.center = function(_) {
83165                 if (!arguments.length) { return center; }
83166                 center = _;
83167                 return radialMenu;
83168             };
83169
83170
83171             return radialMenu;
83172         }
83173
83174         var _relatedParent;
83175
83176
83177         function modeSelect(context, selectedIDs) {
83178             var mode = {
83179                 id: 'select',
83180                 button: 'browse'
83181             };
83182
83183             var keybinding = utilKeybinding('select');
83184             var breatheBehavior = behaviorBreathe();
83185             var behaviors = [
83186                 behaviorCopy(context),
83187                 behaviorPaste(context),
83188                 breatheBehavior,
83189                 behaviorHover(context),
83190                 behaviorSelect(context),
83191                 behaviorLasso(context),
83192                 modeDragNode(context).restoreSelectedIDs(selectedIDs).behavior,
83193                 modeDragNote(context).behavior
83194             ];
83195             var editMenu;
83196             var _timeout = null;
83197             var _newFeature = false;
83198             var _suppressMenu = true;
83199             var _follow = false;
83200
83201
83202             var wrap = context.container()
83203                 .select('.inspector-wrap');
83204
83205
83206             function singular() {
83207                 if (selectedIDs && selectedIDs.length === 1) {
83208                     return context.hasEntity(selectedIDs[0]);
83209                 }
83210             }
83211
83212             function selectedEntities() {
83213                 return selectedIDs.map(function(id) {
83214                     return context.hasEntity(id);
83215                 }).filter(Boolean);
83216             }
83217
83218
83219             function checkSelectedIDs() {
83220                 var ids = [];
83221                 if (Array.isArray(selectedIDs)) {
83222                     ids = selectedIDs.filter(function(id) {
83223                         return context.hasEntity(id);
83224                     });
83225                 }
83226
83227                 if (!ids.length) {
83228                     context.enter(modeBrowse(context));
83229                     return false;
83230                 } else if ((selectedIDs.length > 1 && ids.length === 1) ||
83231                     (selectedIDs.length === 1 && ids.length > 1)) {
83232                     // switch between single- and multi-select UI
83233                     context.enter(modeSelect(context, ids));
83234                     return false;
83235                 }
83236
83237                 selectedIDs = ids;
83238                 return true;
83239             }
83240
83241
83242             // find the common parent ways for nextVertex, previousVertex
83243             function commonParents() {
83244                 var graph = context.graph();
83245                 var commonParents = [];
83246
83247                 for (var i = 0; i < selectedIDs.length; i++) {
83248                     var entity = context.hasEntity(selectedIDs[i]);
83249                     if (!entity || entity.geometry(graph) !== 'vertex') {
83250                         return [];  // selection includes some not vertexes
83251                     }
83252
83253                     var currParents = graph.parentWays(entity).map(function(w) { return w.id; });
83254                     if (!commonParents.length) {
83255                         commonParents = currParents;
83256                         continue;
83257                     }
83258
83259                     commonParents = utilArrayIntersection(commonParents, currParents);
83260                     if (!commonParents.length) {
83261                         return [];
83262                     }
83263                 }
83264
83265                 return commonParents;
83266             }
83267
83268
83269             function singularParent() {
83270                 var parents = commonParents();
83271                 if (!parents || parents.length === 0) {
83272                     _relatedParent = null;
83273                     return null;
83274                 }
83275
83276                 // relatedParent is used when we visit a vertex with multiple
83277                 // parents, and we want to remember which parent line we started on.
83278
83279                 if (parents.length === 1) {
83280                     _relatedParent = parents[0];  // remember this parent for later
83281                     return _relatedParent;
83282                 }
83283
83284                 if (parents.indexOf(_relatedParent) !== -1) {
83285                     return _relatedParent;   // prefer the previously seen parent
83286                 }
83287
83288                 return parents[0];
83289             }
83290
83291
83292             function closeMenu() {
83293                 if (editMenu) {
83294                     context.surface().call(editMenu.close);
83295                 }
83296             }
83297
83298
83299             function positionMenu() {
83300                 if (!editMenu) { return; }
83301
83302                 var entity = singular();
83303                 if (entity && context.geometry(entity.id) === 'relation') {
83304                     _suppressMenu = true;
83305                 } else {
83306                     var point = context.mouse();
83307                     var viewport = geoExtent(context.projection.clipExtent()).polygon();
83308
83309                     if (point && geoPointInPolygon(point, viewport)) {
83310                         editMenu.center(point);
83311                     } else {
83312                         _suppressMenu = true;
83313                     }
83314                 }
83315             }
83316
83317
83318             function showMenu() {
83319                 closeMenu();
83320                 if (editMenu) {
83321
83322                     // disable menu if in wide selection, for example
83323                     if (!context.map().editableDataEnabled()) { return; }
83324
83325                     context.surface().call(editMenu);
83326                 }
83327             }
83328
83329
83330             function toggleMenu() {
83331                 // deprecation warning - Radial Menu to be removed in iD v3
83332                 if (d3_select('.edit-menu, .radial-menu').empty()) {
83333                     positionMenu();
83334                     showMenu();
83335                 } else {
83336                     closeMenu();
83337                 }
83338             }
83339
83340
83341             mode.selectedIDs = function() {
83342                 return selectedIDs;
83343             };
83344
83345
83346             mode.zoomToSelected = function() {
83347                 context.map().zoomToEase(selectedEntities());
83348             };
83349
83350
83351             mode.reselect = function() {
83352                 if (!checkSelectedIDs()) { return; }
83353
83354                 var surfaceNode = context.surface().node();
83355                 if (surfaceNode.focus) {   // FF doesn't support it
83356                     surfaceNode.focus();
83357                 }
83358
83359                 positionMenu();
83360                 if (!_suppressMenu) {
83361                     showMenu();
83362                 }
83363             };
83364
83365
83366             mode.newFeature = function(val) {
83367                 if (!arguments.length) { return _newFeature; }
83368                 _newFeature = val;
83369                 return mode;
83370             };
83371
83372
83373             mode.suppressMenu = function(val) {
83374                 if (!arguments.length) { return _suppressMenu; }
83375                 _suppressMenu = val;
83376                 return mode;
83377             };
83378
83379
83380             mode.follow = function(val) {
83381                 if (!arguments.length) { return _follow; }
83382                 _follow = val;
83383                 return mode;
83384             };
83385
83386             var operations = [];
83387
83388             function loadOperations() {
83389
83390                 operations.forEach(function(operation) {
83391                     if (operation.behavior) {
83392                         context.uninstall(operation.behavior);
83393                     }
83394                 });
83395
83396                 operations = Object.values(Operations)
83397                     .map(function(o) { return o(selectedIDs, context); })
83398                     .filter(function(o) { return o.available() && o.id !== 'delete' && o.id !== 'downgrade'; });
83399
83400                 var downgradeOperation = operationDowngrade(selectedIDs, context);
83401                 // don't allow delete if downgrade is available
83402                 var lastOperation = !context.inIntro() && downgradeOperation.available() ? downgradeOperation : operationDelete(selectedIDs, context);
83403
83404                 // deprecation warning - Radial Menu to be removed in iD v3
83405                 var isRadialMenu = context.storage('edit-menu-style') === 'radial';
83406                 if (isRadialMenu) {
83407                     operations = operations.slice(0,7);
83408                     operations.unshift(lastOperation);
83409                 } else {
83410                     operations.push(lastOperation);
83411                 }
83412
83413                 operations.forEach(function(operation) {
83414                     if (operation.behavior) {
83415                         context.install(operation.behavior);
83416                     }
83417                 });
83418
83419                 // deprecation warning - Radial Menu to be removed in iD v3
83420                 editMenu = isRadialMenu
83421                     ? uiRadialMenu(context, operations)
83422                     : uiEditMenu(context, operations);
83423
83424             }
83425
83426
83427             mode.enter = function() {
83428                 if (!checkSelectedIDs()) { return; }
83429
83430                 context.features().forceVisible(selectedIDs);
83431
83432                 loadOperations();
83433
83434                 behaviors.forEach(context.install);
83435
83436                 keybinding
83437                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
83438                     .on(['[', 'pgup'], previousVertex)
83439                     .on([']', 'pgdown'], nextVertex)
83440                     .on(['{', uiCmd('⌘['), 'home'], firstVertex)
83441                     .on(['}', uiCmd('⌘]'), 'end'], lastVertex)
83442                     .on(['\\', 'pause'], nextParent)
83443                     .on('⎋', esc, true)
83444                     .on('space', toggleMenu);
83445
83446                 d3_select(document)
83447                     .call(keybinding);
83448
83449                 context.ui().sidebar
83450                     .select(singular() ? singular().id : null, _newFeature);
83451
83452                 context.history()
83453                     .on('change.select', function() {
83454                         loadOperations();
83455                         // reselect after change in case relation members were removed or added
83456                         selectElements();
83457                     })
83458                     .on('undone.select', update)
83459                     .on('redone.select', update);
83460
83461                 context.map()
83462                     .on('move.select', closeMenu)
83463                     .on('drawn.select', selectElements)
83464                     .on('crossEditableZoom.select', function() {
83465                         selectElements();
83466                         breatheBehavior.restartIfNeeded(context.surface());
83467                     });
83468
83469                 context.surface()
83470                     .on('dblclick.select', dblclick);
83471
83472
83473                 selectElements();
83474
83475                 if (selectedIDs.length > 1) {
83476                     var entities = uiSelectionList(context, selectedIDs);
83477                     context.ui().sidebar.show(entities);
83478                 }
83479
83480                 if (_follow) {
83481                     var extent = geoExtent();
83482                     var graph = context.graph();
83483                     selectedIDs.forEach(function(id) {
83484                         var entity = context.entity(id);
83485                         extent._extend(entity.extent(graph));
83486                     });
83487
83488                     var loc = extent.center();
83489                     context.map().centerEase(loc);
83490                 } else if (singular() && singular().type === 'way') {
83491                     context.map().pan([0,0]);  // full redraw, to adjust z-sorting #2914
83492                 }
83493
83494                 _timeout = window.setTimeout(function() {
83495                     positionMenu();
83496                     if (!_suppressMenu) {
83497                         showMenu();
83498                     }
83499                 }, 270);  /* after any centerEase completes */
83500
83501
83502                 function update() {
83503                     closeMenu();
83504                     checkSelectedIDs();
83505                 }
83506
83507
83508                 function dblclick() {
83509                     if (!context.map().withinEditableZoom()) { return; }
83510
83511                     var target = d3_select(event.target);
83512
83513                     var datum = target.datum();
83514                     var entity = datum && datum.properties && datum.properties.entity;
83515                     if (!entity) { return; }
83516
83517                     if (entity instanceof osmWay && target.classed('target')) {
83518                         var choice = geoChooseEdge(context.childNodes(entity), context.mouse(), context.projection);
83519                         var prev = entity.nodes[choice.index - 1];
83520                         var next = entity.nodes[choice.index];
83521
83522                         context.perform(
83523                             actionAddMidpoint({ loc: choice.loc, edge: [prev, next] }, osmNode()),
83524                             t('operations.add.annotation.vertex')
83525                         );
83526
83527                         event.preventDefault();
83528                         event.stopPropagation();
83529
83530                     } else if (entity.type === 'midpoint') {
83531                         context.perform(
83532                             actionAddMidpoint({ loc: entity.loc, edge: entity.edge }, osmNode()),
83533                             t('operations.add.annotation.vertex'));
83534
83535                         event.preventDefault();
83536                         event.stopPropagation();
83537                     }
83538                 }
83539
83540
83541                 function selectElements() {
83542                     if (!checkSelectedIDs()) { return; }
83543
83544                     var surface = context.surface();
83545                     var entity = singular();
83546
83547                     if (entity && context.geometry(entity.id) === 'relation') {
83548                         _suppressMenu = true;
83549                     }
83550
83551                     surface.selectAll('.selected-member')
83552                         .classed('selected-member', false);
83553
83554                     surface.selectAll('.selected')
83555                         .classed('selected', false);
83556
83557                     surface.selectAll('.related')
83558                         .classed('related', false);
83559
83560                     singularParent();
83561                     if (_relatedParent) {
83562                         surface.selectAll(utilEntitySelector([_relatedParent]))
83563                             .classed('related', true);
83564                     }
83565
83566                     if (context.map().withinEditableZoom()) {
83567                         // Apply selection styling if not in wide selection
83568
83569                         surface
83570                             .selectAll(utilDeepMemberSelector(selectedIDs, context.graph(), true /* skipMultipolgonMembers */))
83571                             .classed('selected-member', true);
83572                         surface
83573                             .selectAll(utilEntityOrDeepMemberSelector(selectedIDs, context.graph()))
83574                             .classed('selected', true);
83575                     }
83576
83577                 }
83578
83579
83580                 function esc() {
83581                     if (d3_select('.combobox').size()) { return; }
83582                     context.enter(modeBrowse(context));
83583                 }
83584
83585
83586                 function firstVertex() {
83587                     event.preventDefault();
83588                     var entity = singular();
83589                     var parent = singularParent();
83590                     var way;
83591
83592                     if (entity && entity.type === 'way') {
83593                         way = entity;
83594                     } else if (parent) {
83595                         way = context.entity(parent);
83596                     }
83597
83598                     if (way) {
83599                         context.enter(
83600                             modeSelect(context, [way.first()]).follow(true)
83601                         );
83602                     }
83603                 }
83604
83605
83606                 function lastVertex() {
83607                     event.preventDefault();
83608                     var entity = singular();
83609                     var parent = singularParent();
83610                     var way;
83611
83612                     if (entity && entity.type === 'way') {
83613                         way = entity;
83614                     } else if (parent) {
83615                         way = context.entity(parent);
83616                     }
83617
83618                     if (way) {
83619                         context.enter(
83620                             modeSelect(context, [way.last()]).follow(true)
83621                         );
83622                     }
83623                 }
83624
83625
83626                 function previousVertex() {
83627                     event.preventDefault();
83628                     var parent = singularParent();
83629                     if (!parent) { return; }
83630
83631                     var way = context.entity(parent);
83632                     var length = way.nodes.length;
83633                     var curr = way.nodes.indexOf(selectedIDs[0]);
83634                     var index = -1;
83635
83636                     if (curr > 0) {
83637                         index = curr - 1;
83638                     } else if (way.isClosed()) {
83639                         index = length - 2;
83640                     }
83641
83642                     if (index !== -1) {
83643                         context.enter(
83644                             modeSelect(context, [way.nodes[index]]).follow(true)
83645                         );
83646                     }
83647                 }
83648
83649
83650                 function nextVertex() {
83651                     event.preventDefault();
83652                     var parent = singularParent();
83653                     if (!parent) { return; }
83654
83655                     var way = context.entity(parent);
83656                     var length = way.nodes.length;
83657                     var curr = way.nodes.indexOf(selectedIDs[0]);
83658                     var index = -1;
83659
83660                     if (curr < length - 1) {
83661                         index = curr + 1;
83662                     } else if (way.isClosed()) {
83663                         index = 0;
83664                     }
83665
83666                     if (index !== -1) {
83667                         context.enter(
83668                             modeSelect(context, [way.nodes[index]]).follow(true)
83669                         );
83670                     }
83671                 }
83672
83673
83674                 function nextParent() {
83675                     event.preventDefault();
83676                     var parents = commonParents();
83677                     if (!parents || parents.length < 2) { return; }
83678
83679                     var index = parents.indexOf(_relatedParent);
83680                     if (index < 0 || index > parents.length - 2) {
83681                         _relatedParent = parents[0];
83682                     } else {
83683                         _relatedParent = parents[index + 1];
83684                     }
83685
83686                     var surface = context.surface();
83687                     surface.selectAll('.related')
83688                         .classed('related', false);
83689
83690                     if (_relatedParent) {
83691                         surface.selectAll(utilEntitySelector([_relatedParent]))
83692                             .classed('related', true);
83693                     }
83694                 }
83695             };
83696
83697
83698             mode.exit = function() {
83699                 if (_timeout) { window.clearTimeout(_timeout); }
83700
83701                 operations.forEach(function(operation) {
83702                     if (operation.behavior) {
83703                         context.uninstall(operation.behavior);
83704                     }
83705                 });
83706
83707                 behaviors.forEach(context.uninstall);
83708
83709                 d3_select(document)
83710                     .call(keybinding.unbind);
83711
83712                 closeMenu();
83713                 editMenu = undefined;
83714
83715                 context.history()
83716                     .on('change.select', null)
83717                     .on('undone.select', null)
83718                     .on('redone.select', null);
83719
83720                 var surface = context.surface();
83721
83722                 surface
83723                     .on('dblclick.select', null);
83724
83725                 surface
83726                     .selectAll('.selected-member')
83727                     .classed('selected-member', false);
83728
83729                 surface
83730                     .selectAll('.selected')
83731                     .classed('selected', false);
83732
83733                 surface
83734                     .selectAll('.highlighted')
83735                     .classed('highlighted', false);
83736
83737                 surface
83738                     .selectAll('.related')
83739                     .classed('related', false);
83740
83741                 context.map().on('drawn.select', null);
83742                 context.ui().sidebar.hide();
83743                 context.features().forceVisible([]);
83744
83745                 var entity = singular();
83746                 if (_newFeature && entity && entity.type === 'relation' &&
83747                     // no tags
83748                     Object.keys(entity.tags).length === 0 &&
83749                     // no parent relations
83750                     context.graph().parentRelations(entity).length === 0 &&
83751                     // no members or one member with no role
83752                     (entity.members.length === 0 || (entity.members.length === 1 && !entity.members[0].role))
83753                 ) {
83754                     // the user added this relation but didn't edit it at all, so just delete it
83755                     var deleteAction = actionDeleteRelation(entity.id, true /* don't delete untagged members */);
83756                     context.perform(deleteAction, t('operations.delete.annotation.relation'));
83757                 }
83758             };
83759
83760
83761             return mode;
83762         }
83763
83764         function uiLasso(context) {
83765             var group, polygon;
83766
83767             lasso.coordinates = [];
83768
83769             function lasso(selection) {
83770                 context.container()
83771                     .classed('lasso', true);
83772
83773                 group = selection
83774                     .append('g')
83775                     .attr('class', 'lasso hide');
83776
83777                 polygon = group
83778                     .append('path')
83779                     .attr('class', 'lasso-path');
83780
83781                 group
83782                     .call(uiToggle(true));
83783             }
83784
83785
83786             function draw() {
83787                 if (polygon) {
83788                     polygon.data([lasso.coordinates])
83789                         .attr('d', function(d) { return 'M' + d.join(' L') + ' Z'; });
83790                 }
83791             }
83792
83793
83794             lasso.extent = function () {
83795                 return lasso.coordinates.reduce(function(extent, point) {
83796                     return extent.extend(geoExtent(point));
83797                 }, geoExtent());
83798             };
83799
83800
83801             lasso.p = function(_) {
83802                 if (!arguments.length) { return lasso; }
83803                 lasso.coordinates.push(_);
83804                 draw();
83805                 return lasso;
83806             };
83807
83808
83809             lasso.close = function() {
83810                 if (group) {
83811                     group.call(uiToggle(false, function() {
83812                         d3_select(this).remove();
83813                     }));
83814                 }
83815                 context.container().classed('lasso', false);
83816             };
83817
83818
83819             return lasso;
83820         }
83821
83822         function behaviorLasso(context) {
83823
83824             var behavior = function(selection) {
83825                 var lasso;
83826
83827
83828                 function mousedown() {
83829                     var button = 0;  // left
83830                     if (event.button === button && event.shiftKey === true) {
83831                         lasso = null;
83832
83833                         d3_select(window)
83834                             .on('mousemove.lasso', mousemove)
83835                             .on('mouseup.lasso', mouseup);
83836
83837                         event.stopPropagation();
83838                     }
83839                 }
83840
83841
83842                 function mousemove() {
83843                     if (!lasso) {
83844                         lasso = uiLasso(context);
83845                         context.surface().call(lasso);
83846                     }
83847
83848                     lasso.p(context.mouse());
83849                 }
83850
83851
83852                 function normalize(a, b) {
83853                     return [
83854                         [Math.min(a[0], b[0]), Math.min(a[1], b[1])],
83855                         [Math.max(a[0], b[0]), Math.max(a[1], b[1])]
83856                     ];
83857                 }
83858
83859
83860                 function lassoed() {
83861                     if (!lasso) { return []; }
83862
83863                     var graph = context.graph();
83864                     var bounds = lasso.extent().map(context.projection.invert);
83865                     var extent = geoExtent(normalize(bounds[0], bounds[1]));
83866
83867                     var intersects = context.intersects(extent).filter(function(entity) {
83868                         return entity.type === 'node' &&
83869                             geoPointInPolygon(context.projection(entity.loc), lasso.coordinates) &&
83870                             !context.features().isHidden(entity, graph, entity.geometry(graph));
83871                     });
83872
83873                     return intersects.map(function(entity) { return entity.id; });
83874                 }
83875
83876
83877                 function mouseup() {
83878                     d3_select(window)
83879                         .on('mousemove.lasso', null)
83880                         .on('mouseup.lasso', null);
83881
83882                     if (!lasso) { return; }
83883
83884                     var ids = lassoed();
83885                     lasso.close();
83886
83887                     if (ids.length) {
83888                         context.enter(modeSelect(context, ids));
83889                     }
83890                 }
83891
83892                 selection
83893                     .on('mousedown.lasso', mousedown);
83894             };
83895
83896
83897             behavior.off = function(selection) {
83898                 selection.on('mousedown.lasso', null);
83899             };
83900
83901
83902             return behavior;
83903         }
83904
83905         function modeBrowse(context) {
83906             var mode = {
83907                 button: 'browse',
83908                 id: 'browse',
83909                 title: t('modes.browse.title'),
83910                 description: t('modes.browse.description')
83911             }, sidebar;
83912
83913             var behaviors = [
83914                 behaviorPaste(context),
83915                 behaviorHover(context).on('hover', context.ui().sidebar.hover),
83916                 behaviorSelect(context),
83917                 behaviorLasso(context),
83918                 modeDragNode(context).behavior,
83919                 modeDragNote(context).behavior
83920             ];
83921
83922
83923             mode.enter = function() {
83924                 behaviors.forEach(context.install);
83925
83926                 // Get focus on the body.
83927                 if (document.activeElement && document.activeElement.blur) {
83928                     document.activeElement.blur();
83929                 }
83930
83931                 if (sidebar) {
83932                     context.ui().sidebar.show(sidebar);
83933                 } else {
83934                     context.ui().sidebar.select(null);
83935                 }
83936             };
83937
83938
83939             mode.exit = function() {
83940                 context.ui().sidebar.hover.cancel();
83941                 behaviors.forEach(context.uninstall);
83942
83943                 if (sidebar) {
83944                     context.ui().sidebar.hide();
83945                 }
83946             };
83947
83948
83949             mode.sidebar = function(_) {
83950                 if (!arguments.length) { return sidebar; }
83951                 sidebar = _;
83952                 return mode;
83953             };
83954
83955
83956             return mode;
83957         }
83958
83959         function behaviorAddWay(context) {
83960             var dispatch$1 = dispatch('start', 'startFromWay', 'startFromNode');
83961             var draw = behaviorDraw(context);
83962
83963             function behavior(surface) {
83964                 draw.on('click', function() { dispatch$1.apply('start', this, arguments); })
83965                     .on('clickWay', function() { dispatch$1.apply('startFromWay', this, arguments); })
83966                     .on('clickNode', function() { dispatch$1.apply('startFromNode', this, arguments); })
83967                     .on('cancel', behavior.cancel)
83968                     .on('finish', behavior.cancel);
83969
83970                 context.map()
83971                     .dblclickEnable(false);
83972
83973                 surface.call(draw);
83974             }
83975
83976
83977             behavior.off = function(surface) {
83978                 surface.call(draw.off);
83979             };
83980
83981
83982             behavior.cancel = function() {
83983                 window.setTimeout(function() {
83984                     context.map().dblclickEnable(true);
83985                 }, 1000);
83986
83987                 context.enter(modeBrowse(context));
83988             };
83989
83990
83991             behavior.tail = function(text) {
83992                 draw.tail(text);
83993                 return behavior;
83994             };
83995
83996
83997             return utilRebind(behavior, dispatch$1, 'on');
83998         }
83999
84000         function behaviorHash(context) {
84001             var s0 = null; // cached window.location.hash
84002             var lat = 90 - 1e-8; // allowable latitude range
84003
84004
84005             var parser = function(map, s) {
84006                 var q = utilStringQs(s);
84007                 var args = (q.map || '').split('/').map(Number);
84008
84009                 if (args.length < 3 || args.some(isNaN)) {
84010                     return true; // replace bogus hash
84011
84012                 } else if (s !== formatter(map).slice(1)) {   // hash has changed
84013                     var mode = context.mode();
84014                     var dist = geoSphericalDistance(map.center(), [args[2], args[1]]);
84015                     var maxdist = 500;
84016
84017                     // Don't allow the hash location to change too much while drawing
84018                     // This can happen if the user accidently hit the back button.  #3996
84019                     if (mode && mode.id.match(/^draw/) !== null && dist > maxdist) {
84020                         context.enter(modeBrowse(context));
84021                     }
84022
84023                     map.centerZoom([args[2], Math.min(lat, Math.max(-lat, args[1]))], args[0]);
84024                 }
84025             };
84026
84027
84028             var formatter = function(map) {
84029                 var center = map.center();
84030                 var zoom = map.zoom();
84031                 var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
84032                 var q = utilObjectOmit(utilStringQs(window.location.hash.substring(1)),
84033                     ['comment', 'source', 'hashtags', 'walkthrough']
84034                 );
84035                 var newParams = {};
84036
84037                 delete q.id;
84038                 var selected = context.selectedIDs().filter(function(id) {
84039                     return !context.entity(id).isNew();
84040                 });
84041                 if (selected.length) {
84042                     newParams.id = selected.join(',');
84043                 }
84044
84045                 newParams.map = zoom.toFixed(2) +
84046                     '/' + center[1].toFixed(precision) +
84047                     '/' + center[0].toFixed(precision);
84048
84049                 return '#' + utilQsString(Object.assign(q, newParams), true);
84050             };
84051
84052
84053             function update() {
84054                 if (context.inIntro()) { return; }
84055                 var s1 = formatter(context.map());
84056                 if (s0 !== s1) {
84057                     window.location.replace(s0 = s1);  // don't recenter the map!
84058                 }
84059             }
84060
84061
84062             var throttledUpdate = throttle(update, 500);
84063
84064
84065             function hashchange() {
84066                 if (window.location.hash === s0) { return; }  // ignore spurious hashchange events
84067                 if (parser(context.map(), (s0 = window.location.hash).substring(1))) {
84068                     update(); // replace bogus hash
84069                 }
84070             }
84071
84072
84073             function behavior() {
84074                 context.map()
84075                     .on('move.hash', throttledUpdate);
84076
84077                 context
84078                     .on('enter.hash', throttledUpdate);
84079
84080                 d3_select(window)
84081                     .on('hashchange.hash', hashchange);
84082
84083                 if (window.location.hash) {
84084                     var q = utilStringQs(window.location.hash.substring(1));
84085
84086                     if (q.id) {
84087                         context.zoomToEntity(q.id.split(',')[0], !q.map);
84088                     }
84089
84090                     // Store these here instead of updating local storage since local
84091                     // storage could be flushed if the user discards pending changes
84092                     if (q.comment)  { behavior.comment = q.comment; }
84093                     if (q.source)   { behavior.source = q.source; }
84094                     if (q.hashtags) { behavior.hashtags = q.hashtags; }
84095
84096                     if (q.walkthrough === 'true') {
84097                         behavior.startWalkthrough = true;
84098                     }
84099
84100                     hashchange();
84101
84102                     if (q.map) {
84103                         behavior.hadHash = true;
84104                     }
84105                 }
84106             }
84107
84108
84109             behavior.off = function() {
84110                 throttledUpdate.cancel();
84111
84112                 context.map()
84113                     .on('move.hash', null);
84114
84115                 context
84116                     .on('enter.hash', null);
84117
84118                 d3_select(window)
84119                     .on('hashchange.hash', null);
84120
84121                 window.location.hash = '';
84122             };
84123
84124
84125             return behavior;
84126         }
84127
84128         /*
84129             iD.coreDifference represents the difference between two graphs.
84130             It knows how to calculate the set of entities that were
84131             created, modified, or deleted, and also contains the logic
84132             for recursively extending a difference to the complete set
84133             of entities that will require a redraw, taking into account
84134             child and parent relationships.
84135          */
84136         function coreDifference(base, head) {
84137             var _changes = {};
84138             var _didChange = {};  // 'addition', 'deletion', 'geometry', 'properties'
84139             var _diff = {};
84140
84141             function checkEntityID(id) {
84142                 var h = head.entities[id];
84143                 var b = base.entities[id];
84144
84145                 if (h === b) { return; }
84146                 if (_changes[id]) { return; }
84147
84148                 if (!h && b) {
84149                     _changes[id] = { base: b, head: h };
84150                     _didChange.deletion = true;
84151                     return;
84152                 }
84153                 if (h && !b) {
84154                     _changes[id] = { base: b, head: h };
84155                     _didChange.addition = true;
84156                     return;
84157                 }
84158
84159                 if (h && b) {
84160                     if (h.members && b.members && !fastDeepEqual(h.members, b.members)) {
84161                         _changes[id] = { base: b, head: h };
84162                         _didChange.geometry = true;
84163                         _didChange.properties = true;
84164                         return;
84165                     }
84166                     if (h.loc && b.loc && !geoVecEqual(h.loc, b.loc)) {
84167                         _changes[id] = { base: b, head: h };
84168                         _didChange.geometry = true;
84169                     }
84170                     if (h.nodes && b.nodes && !fastDeepEqual(h.nodes, b.nodes)) {
84171                         _changes[id] = { base: b, head: h };
84172                         _didChange.geometry = true;
84173                     }
84174                     if (h.tags && b.tags && !fastDeepEqual(h.tags, b.tags)) {
84175                         _changes[id] = { base: b, head: h };
84176                         _didChange.properties = true;
84177                     }
84178                 }
84179             }
84180
84181             Object.keys(head.entities).forEach(checkEntityID);
84182             Object.keys(base.entities).forEach(checkEntityID);
84183
84184
84185             _diff.length = function length() {
84186                 return Object.keys(_changes).length;
84187             };
84188
84189
84190             _diff.changes = function changes() {
84191                 return _changes;
84192             };
84193
84194             _diff.didChange = _didChange;
84195
84196
84197             // pass true to include affected relation members
84198             _diff.extantIDs = function extantIDs(includeRelMembers) {
84199                 var result = new Set();
84200                 Object.keys(_changes).forEach(function(id) {
84201                     if (_changes[id].head) {
84202                         result.add(id);
84203                     }
84204
84205                     var h = _changes[id].head;
84206                     var b = _changes[id].base;
84207                     var entity = h || b;
84208
84209                     if (includeRelMembers && entity.type === 'relation') {
84210                         var mh = h ? h.members.map(function(m) { return m.id; }) : [];
84211                         var mb = b ? b.members.map(function(m) { return m.id; }) : [];
84212                         utilArrayUnion(mh, mb).forEach(function(memberID) {
84213                             if (head.hasEntity(memberID)) {
84214                                 result.add(memberID);
84215                             }
84216                         });
84217                     }
84218                 });
84219
84220                 return Array.from(result);
84221             };
84222
84223
84224             _diff.modified = function modified() {
84225                 var result = [];
84226                 Object.values(_changes).forEach(function(change) {
84227                     if (change.base && change.head) {
84228                         result.push(change.head);
84229                     }
84230                 });
84231                 return result;
84232             };
84233
84234
84235             _diff.created = function created() {
84236                 var result = [];
84237                 Object.values(_changes).forEach(function(change) {
84238                     if (!change.base && change.head) {
84239                         result.push(change.head);
84240                     }
84241                 });
84242                 return result;
84243             };
84244
84245
84246             _diff.deleted = function deleted() {
84247                 var result = [];
84248                 Object.values(_changes).forEach(function(change) {
84249                     if (change.base && !change.head) {
84250                         result.push(change.base);
84251                     }
84252                 });
84253                 return result;
84254             };
84255
84256
84257             _diff.summary = function summary() {
84258                 var relevant = {};
84259
84260                 var keys = Object.keys(_changes);
84261                 for (var i = 0; i < keys.length; i++) {
84262                     var change = _changes[keys[i]];
84263
84264                     if (change.head && change.head.geometry(head) !== 'vertex') {
84265                         addEntity(change.head, head, change.base ? 'modified' : 'created');
84266
84267                     } else if (change.base && change.base.geometry(base) !== 'vertex') {
84268                         addEntity(change.base, base, 'deleted');
84269
84270                     } else if (change.base && change.head) { // modified vertex
84271                         var moved    = !fastDeepEqual(change.base.loc,  change.head.loc);
84272                         var retagged = !fastDeepEqual(change.base.tags, change.head.tags);
84273
84274                         if (moved) {
84275                             addParents(change.head);
84276                         }
84277
84278                         if (retagged || (moved && change.head.hasInterestingTags())) {
84279                             addEntity(change.head, head, 'modified');
84280                         }
84281
84282                     } else if (change.head && change.head.hasInterestingTags()) { // created vertex
84283                         addEntity(change.head, head, 'created');
84284
84285                     } else if (change.base && change.base.hasInterestingTags()) { // deleted vertex
84286                         addEntity(change.base, base, 'deleted');
84287                     }
84288                 }
84289
84290                 return Object.values(relevant);
84291
84292
84293                 function addEntity(entity, graph, changeType) {
84294                     relevant[entity.id] = {
84295                         entity: entity,
84296                         graph: graph,
84297                         changeType: changeType
84298                     };
84299                 }
84300
84301                 function addParents(entity) {
84302                     var parents = head.parentWays(entity);
84303                     for (var j = parents.length - 1; j >= 0; j--) {
84304                         var parent = parents[j];
84305                         if (!(parent.id in relevant)) {
84306                             addEntity(parent, head, 'modified');
84307                         }
84308                     }
84309                 }
84310             };
84311
84312
84313             // returns complete set of entities that require a redraw
84314             //  (optionally within given `extent`)
84315             _diff.complete = function complete(extent) {
84316                 var result = {};
84317                 var id, change;
84318
84319                 for (id in _changes) {
84320                     change = _changes[id];
84321
84322                     var h = change.head;
84323                     var b = change.base;
84324                     var entity = h || b;
84325                     var i;
84326
84327                     if (extent &&
84328                         (!h || !h.intersects(extent, head)) &&
84329                         (!b || !b.intersects(extent, base)))
84330                         { continue; }
84331
84332                     result[id] = h;
84333
84334                     if (entity.type === 'way') {
84335                         var nh = h ? h.nodes : [];
84336                         var nb = b ? b.nodes : [];
84337                         var diff;
84338
84339                         diff = utilArrayDifference(nh, nb);
84340                         for (i = 0; i < diff.length; i++) {
84341                             result[diff[i]] = head.hasEntity(diff[i]);
84342                         }
84343
84344                         diff = utilArrayDifference(nb, nh);
84345                         for (i = 0; i < diff.length; i++) {
84346                             result[diff[i]] = head.hasEntity(diff[i]);
84347                         }
84348                     }
84349
84350                     if (entity.type === 'relation' && entity.isMultipolygon()) {
84351                         var mh = h ? h.members.map(function(m) { return m.id; }) : [];
84352                         var mb = b ? b.members.map(function(m) { return m.id; }) : [];
84353                         var ids = utilArrayUnion(mh, mb);
84354                         for (i = 0; i < ids.length; i++) {
84355                             var member = head.hasEntity(ids[i]);
84356                             if (!member) { continue; }   // not downloaded
84357                             if (extent && !member.intersects(extent, head)) { continue; }   // not visible
84358                             result[ids[i]] = member;
84359                         }
84360                     }
84361
84362                     addParents(head.parentWays(entity), result);
84363                     addParents(head.parentRelations(entity), result);
84364                 }
84365
84366                 return result;
84367
84368
84369                 function addParents(parents, result) {
84370                     for (var i = 0; i < parents.length; i++) {
84371                         var parent = parents[i];
84372                         if (parent.id in result) { continue; }
84373
84374                         result[parent.id] = parent;
84375                         addParents(head.parentRelations(parent), result);
84376                     }
84377                 }
84378             };
84379
84380
84381             return _diff;
84382         }
84383
84384         function coreTree(head) {
84385             var rtree = new RBush();
84386             var bboxes = {};
84387             var tree = {};
84388
84389
84390             function entityBBox(entity) {
84391                 var bbox = entity.extent(head).bbox();
84392                 bbox.id = entity.id;
84393                 bboxes[entity.id] = bbox;
84394                 return bbox;
84395             }
84396
84397
84398             function updateParents(entity, insertions, memo) {
84399                 head.parentWays(entity).forEach(function(way) {
84400                     if (bboxes[way.id]) {
84401                         rtree.remove(bboxes[way.id]);
84402                         insertions[way.id] = way;
84403                     }
84404                     updateParents(way, insertions, memo);
84405                 });
84406
84407                 head.parentRelations(entity).forEach(function(relation) {
84408                     if (memo[entity.id]) { return; }
84409                     memo[entity.id] = true;
84410                     if (bboxes[relation.id]) {
84411                         rtree.remove(bboxes[relation.id]);
84412                         insertions[relation.id] = relation;
84413                     }
84414                     updateParents(relation, insertions, memo);
84415                 });
84416             }
84417
84418
84419             tree.rebase = function(entities, force) {
84420                 var insertions = {};
84421
84422                 for (var i = 0; i < entities.length; i++) {
84423                     var entity = entities[i];
84424                     if (!entity.visible) { continue; }
84425
84426                     if (head.entities.hasOwnProperty(entity.id) || bboxes[entity.id]) {
84427                         if (!force) {
84428                             continue;
84429                         } else if (bboxes[entity.id]) {
84430                             rtree.remove(bboxes[entity.id]);
84431                         }
84432                     }
84433
84434                     insertions[entity.id] = entity;
84435                     updateParents(entity, insertions, {});
84436                 }
84437
84438                 rtree.load(Object.values(insertions).map(entityBBox));
84439
84440                 return tree;
84441             };
84442
84443
84444             tree.intersects = function(extent, graph) {
84445                 if (graph !== head) {
84446                     var diff = coreDifference(head, graph);
84447                     var changed = diff.didChange;
84448
84449                     if (changed.addition || changed.deletion || changed.geometry) {
84450                         var insertions = {};
84451                         head = graph;
84452
84453                         if (changed.deletion) {
84454                             diff.deleted().forEach(function(entity) {
84455                                 rtree.remove(bboxes[entity.id]);
84456                                 delete bboxes[entity.id];
84457                             });
84458                         }
84459
84460                         if (changed.geometry) {
84461                             diff.modified().forEach(function(entity) {
84462                                 rtree.remove(bboxes[entity.id]);
84463                                 insertions[entity.id] = entity;
84464                                 updateParents(entity, insertions, {});
84465                             });
84466                         }
84467
84468                         if (changed.addition) {
84469                             diff.created().forEach(function(entity) {
84470                                 insertions[entity.id] = entity;
84471                             });
84472                         }
84473
84474                         rtree.load(Object.values(insertions).map(entityBBox));
84475                     }
84476                 }
84477
84478                 return rtree.search(extent.bbox())
84479                     .map(function(bbox) { return graph.entity(bbox.id); });
84480             };
84481
84482
84483             return tree;
84484         }
84485
84486         function uiModal(selection, blocking) {
84487           var this$1 = this;
84488
84489           var keybinding = utilKeybinding('modal');
84490           var previous = selection.select('div.modal');
84491           var animate = previous.empty();
84492
84493           previous.transition()
84494             .duration(200)
84495             .style('opacity', 0)
84496             .remove();
84497
84498           var shaded = selection
84499             .append('div')
84500             .attr('class', 'shaded')
84501             .style('opacity', 0);
84502
84503           shaded.close = function () {
84504             shaded
84505               .transition()
84506               .duration(200)
84507               .style('opacity',0)
84508               .remove();
84509
84510             modal
84511               .transition()
84512               .duration(200)
84513               .style('top','0px');
84514
84515             d3_select(document)
84516               .call(keybinding.unbind);
84517           };
84518
84519
84520           var modal = shaded
84521             .append('div')
84522             .attr('class', 'modal fillL');
84523
84524           if (!blocking) {
84525             shaded.on('click.remove-modal', function () {
84526               if (event.target === this$1) {
84527                 shaded.close();
84528               }
84529             });
84530
84531             modal
84532               .append('button')
84533               .attr('class', 'close')
84534               .on('click', shaded.close)
84535               .call(svgIcon('#iD-icon-close'));
84536
84537             keybinding
84538               .on('⌫', shaded.close)
84539               .on('⎋', shaded.close);
84540
84541             d3_select(document)
84542               .call(keybinding);
84543           }
84544
84545           modal
84546             .append('div')
84547             .attr('class', 'content');
84548
84549           if (animate) {
84550             shaded.transition().style('opacity', 1);
84551           } else {
84552             shaded.style('opacity', 1);
84553           }
84554
84555           return shaded;
84556         }
84557
84558         function uiLoading(context) {
84559           var arguments$1 = arguments;
84560
84561           var _modalSelection = d3_select(null);
84562           var _message = '';
84563           var _blocking = false;
84564
84565
84566           var loading = function (selection) {
84567             _modalSelection = uiModal(selection, _blocking);
84568
84569             var loadertext = _modalSelection.select('.content')
84570               .classed('loading-modal', true)
84571               .append('div')
84572               .attr('class', 'modal-section fillL');
84573
84574             loadertext
84575               .append('img')
84576               .attr('class', 'loader')
84577               .attr('src', context.imagePath('loader-white.gif'));
84578
84579             loadertext
84580               .append('h3')
84581               .text(_message);
84582
84583             _modalSelection.select('button.close')
84584               .attr('class', 'hide');
84585
84586             return loading;
84587           };
84588
84589
84590           loading.message = function (val) {
84591             if (!arguments$1.length) { return _message; }
84592             _message = val;
84593             return loading;
84594           };
84595
84596
84597           loading.blocking = function (val) {
84598             if (!arguments$1.length) { return _blocking; }
84599             _blocking = val;
84600             return loading;
84601           };
84602
84603
84604           loading.close = function () {
84605             _modalSelection.remove();
84606           };
84607
84608
84609           return loading;
84610         }
84611
84612         function coreHistory(context) {
84613             var dispatch$1 = dispatch('change', 'merge', 'restore', 'undone', 'redone');
84614             var lock = utilSessionMutex('lock');
84615
84616             // restorable if iD not open in another window/tab and a saved history exists in localStorage
84617             var _hasUnresolvedRestorableChanges = lock.lock() && !!context.storage(getKey('saved_history'));
84618
84619             var duration = 150;
84620             var _imageryUsed = [];
84621             var _photoOverlaysUsed = [];
84622             var _checkpoints = {};
84623             var _pausedGraph;
84624             var _stack;
84625             var _index;
84626             var _tree;
84627
84628
84629             // internal _act, accepts list of actions and eased time
84630             function _act(actions, t) {
84631                 actions = Array.prototype.slice.call(actions);
84632
84633                 var annotation;
84634                 if (typeof actions[actions.length - 1] !== 'function') {
84635                     annotation = actions.pop();
84636                 }
84637
84638                 var graph = _stack[_index].graph;
84639                 for (var i = 0; i < actions.length; i++) {
84640                     graph = actions[i](graph, t);
84641                 }
84642
84643                 return {
84644                     graph: graph,
84645                     annotation: annotation,
84646                     imageryUsed: _imageryUsed,
84647                     photoOverlaysUsed: _photoOverlaysUsed,
84648                     transform: context.projection.transform(),
84649                     selectedIDs: context.selectedIDs()
84650                 };
84651             }
84652
84653
84654             // internal _perform with eased time
84655             function _perform(args, t) {
84656                 var previous = _stack[_index].graph;
84657                 _stack = _stack.slice(0, _index + 1);
84658                 var actionResult = _act(args, t);
84659                 _stack.push(actionResult);
84660                 _index++;
84661                 return change(previous);
84662             }
84663
84664
84665             // internal _replace with eased time
84666             function _replace(args, t) {
84667                 var previous = _stack[_index].graph;
84668                 // assert(_index == _stack.length - 1)
84669                 var actionResult = _act(args, t);
84670                 _stack[_index] = actionResult;
84671                 return change(previous);
84672             }
84673
84674
84675             // internal _overwrite with eased time
84676             function _overwrite(args, t) {
84677                 var previous = _stack[_index].graph;
84678                 if (_index > 0) {
84679                     _index--;
84680                     _stack.pop();
84681                 }
84682                 _stack = _stack.slice(0, _index + 1);
84683                 var actionResult = _act(args, t);
84684                 _stack.push(actionResult);
84685                 _index++;
84686                 return change(previous);
84687             }
84688
84689
84690             // determine difference and dispatch a change event
84691             function change(previous) {
84692                 var difference = coreDifference(previous, history.graph());
84693                 if (!_pausedGraph) {
84694                     dispatch$1.call('change', this, difference);
84695                 }
84696                 return difference;
84697             }
84698
84699
84700             // iD uses namespaced keys so multiple installations do not conflict
84701             function getKey(n) {
84702                 return 'iD_' + window.location.origin + '_' + n;
84703             }
84704
84705
84706             var history = {
84707
84708                 graph: function() {
84709                     return _stack[_index].graph;
84710                 },
84711
84712
84713                 tree: function() {
84714                     return _tree;
84715                 },
84716
84717
84718                 base: function() {
84719                     return _stack[0].graph;
84720                 },
84721
84722
84723                 merge: function(entities, extent) {
84724                     var stack = _stack.map(function(state) { return state.graph; });
84725                     _stack[0].graph.rebase(entities, stack, false);
84726                     _tree.rebase(entities, false);
84727
84728                     dispatch$1.call('merge', this, entities);
84729                 },
84730
84731
84732                 perform: function() {
84733                     // complete any transition already in progress
84734                     d3_select(document).interrupt('history.perform');
84735
84736                     var transitionable = false;
84737                     var action0 = arguments[0];
84738
84739                     if (arguments.length === 1 ||
84740                         (arguments.length === 2 && (typeof arguments[1] !== 'function'))) {
84741                         transitionable = !!action0.transitionable;
84742                     }
84743
84744                     if (transitionable) {
84745                         var origArguments = arguments;
84746                         d3_select(document)
84747                             .transition('history.perform')
84748                             .duration(duration)
84749                             .ease(linear$1)
84750                             .tween('history.tween', function() {
84751                                 return function(t) {
84752                                     if (t < 1) { _overwrite([action0], t); }
84753                                 };
84754                             })
84755                             .on('start', function() {
84756                                 _perform([action0], 0);
84757                             })
84758                             .on('end interrupt', function() {
84759                                 _overwrite(origArguments, 1);
84760                             });
84761
84762                     } else {
84763                         return _perform(arguments);
84764                     }
84765                 },
84766
84767
84768                 replace: function() {
84769                     d3_select(document).interrupt('history.perform');
84770                     return _replace(arguments, 1);
84771                 },
84772
84773
84774                 // Same as calling pop and then perform
84775                 overwrite: function() {
84776                     d3_select(document).interrupt('history.perform');
84777                     return _overwrite(arguments, 1);
84778                 },
84779
84780
84781                 pop: function(n) {
84782                     d3_select(document).interrupt('history.perform');
84783
84784                     var previous = _stack[_index].graph;
84785                     if (isNaN(+n) || +n < 0) {
84786                         n = 1;
84787                     }
84788                     while (n-- > 0 && _index > 0) {
84789                         _index--;
84790                         _stack.pop();
84791                     }
84792                     return change(previous);
84793                 },
84794
84795
84796                 // Back to the previous annotated state or _index = 0.
84797                 undo: function() {
84798                     d3_select(document).interrupt('history.perform');
84799
84800                     var previousStack = _stack[_index];
84801                     var previous = previousStack.graph;
84802                     while (_index > 0) {
84803                         _index--;
84804                         if (_stack[_index].annotation) { break; }
84805                     }
84806
84807                     dispatch$1.call('undone', this, _stack[_index], previousStack);
84808                     return change(previous);
84809                 },
84810
84811
84812                 // Forward to the next annotated state.
84813                 redo: function() {
84814                     d3_select(document).interrupt('history.perform');
84815
84816                     var previousStack = _stack[_index];
84817                     var previous = previousStack.graph;
84818                     var tryIndex = _index;
84819                     while (tryIndex < _stack.length - 1) {
84820                         tryIndex++;
84821                         if (_stack[tryIndex].annotation) {
84822                             _index = tryIndex;
84823                             dispatch$1.call('redone', this, _stack[_index], previousStack);
84824                             break;
84825                         }
84826                     }
84827
84828                     return change(previous);
84829                 },
84830
84831
84832                 pauseChangeDispatch: function() {
84833                     if (!_pausedGraph) {
84834                         _pausedGraph = _stack[_index].graph;
84835                     }
84836                 },
84837
84838
84839                 resumeChangeDispatch: function() {
84840                     if (_pausedGraph) {
84841                         var previous = _pausedGraph;
84842                         _pausedGraph = null;
84843                         return change(previous);
84844                     }
84845                 },
84846
84847
84848                 undoAnnotation: function() {
84849                     var i = _index;
84850                     while (i >= 0) {
84851                         if (_stack[i].annotation) { return _stack[i].annotation; }
84852                         i--;
84853                     }
84854                 },
84855
84856
84857                 redoAnnotation: function() {
84858                     var i = _index + 1;
84859                     while (i <= _stack.length - 1) {
84860                         if (_stack[i].annotation) { return _stack[i].annotation; }
84861                         i++;
84862                     }
84863                 },
84864
84865
84866                 intersects: function(extent) {
84867                     return _tree.intersects(extent, _stack[_index].graph);
84868                 },
84869
84870
84871                 difference: function() {
84872                     var base = _stack[0].graph;
84873                     var head = _stack[_index].graph;
84874                     return coreDifference(base, head);
84875                 },
84876
84877
84878                 changes: function(action) {
84879                     var base = _stack[0].graph;
84880                     var head = _stack[_index].graph;
84881
84882                     if (action) {
84883                         head = action(head);
84884                     }
84885
84886                     var difference = coreDifference(base, head);
84887
84888                     return {
84889                         modified: difference.modified(),
84890                         created: difference.created(),
84891                         deleted: difference.deleted()
84892                     };
84893                 },
84894
84895
84896                 hasChanges: function() {
84897                     return this.difference().length() > 0;
84898                 },
84899
84900
84901                 imageryUsed: function(sources) {
84902                     if (sources) {
84903                         _imageryUsed = sources;
84904                         return history;
84905                     } else {
84906                         var s = new Set();
84907                         _stack.slice(1, _index + 1).forEach(function(state) {
84908                             state.imageryUsed.forEach(function(source) {
84909                                 if (source !== 'Custom') {
84910                                     s.add(source);
84911                                 }
84912                             });
84913                         });
84914                         return Array.from(s);
84915                     }
84916                 },
84917
84918
84919                 photoOverlaysUsed: function(sources) {
84920                     if (sources) {
84921                         _photoOverlaysUsed = sources;
84922                         return history;
84923                     } else {
84924                         var s = new Set();
84925                         _stack.slice(1, _index + 1).forEach(function(state) {
84926                             if (state.photoOverlaysUsed && Array.isArray(state.photoOverlaysUsed)) {
84927                                 state.photoOverlaysUsed.forEach(function(photoOverlay) {
84928                                     s.add(photoOverlay);
84929                                 });
84930                             }
84931                         });
84932                         return Array.from(s);
84933                     }
84934                 },
84935
84936
84937                 // save the current history state
84938                 checkpoint: function(key) {
84939                     _checkpoints[key] = {
84940                         stack: _stack,
84941                         index: _index
84942                     };
84943                     return history;
84944                 },
84945
84946
84947                 // restore history state to a given checkpoint or reset completely
84948                 reset: function(key) {
84949                     if (key !== undefined && _checkpoints.hasOwnProperty(key)) {
84950                         _stack = _checkpoints[key].stack;
84951                         _index = _checkpoints[key].index;
84952                     } else {
84953                         _stack = [{graph: coreGraph()}];
84954                         _index = 0;
84955                         _tree = coreTree(_stack[0].graph);
84956                         _checkpoints = {};
84957                     }
84958                     dispatch$1.call('change');
84959                     return history;
84960                 },
84961
84962
84963                 // `toIntroGraph()` is used to export the intro graph used by the walkthrough.
84964                 //
84965                 // To use it:
84966                 //  1. Start the walkthrough.
84967                 //  2. Get to a "free editing" tutorial step
84968                 //  3. Make your edits to the walkthrough map
84969                 //  4. In your browser dev console run:
84970                 //        `id.history().toIntroGraph()`
84971                 //  5. This outputs stringified JSON to the browser console
84972                 //  6. Copy it to `data/intro_graph.json` and prettify it in your code editor
84973                 toIntroGraph: function() {
84974                     var nextID = { n: 0, r: 0, w: 0 };
84975                     var permIDs = {};
84976                     var graph = this.graph();
84977                     var baseEntities = {};
84978
84979                     // clone base entities..
84980                     Object.values(graph.base().entities).forEach(function(entity) {
84981                         var copy = copyIntroEntity(entity);
84982                         baseEntities[copy.id] = copy;
84983                     });
84984
84985                     // replace base entities with head entities..
84986                     Object.keys(graph.entities).forEach(function(id) {
84987                         var entity = graph.entities[id];
84988                         if (entity) {
84989                             var copy = copyIntroEntity(entity);
84990                             baseEntities[copy.id] = copy;
84991                         } else {
84992                             delete baseEntities[id];
84993                         }
84994                     });
84995
84996                     // swap temporary for permanent ids..
84997                     Object.values(baseEntities).forEach(function(entity) {
84998                         if (Array.isArray(entity.nodes)) {
84999                             entity.nodes = entity.nodes.map(function(node) {
85000                                 return permIDs[node] || node;
85001                             });
85002                         }
85003                         if (Array.isArray(entity.members)) {
85004                             entity.members = entity.members.map(function(member) {
85005                                 member.id = permIDs[member.id] || member.id;
85006                                 return member;
85007                             });
85008                         }
85009                     });
85010
85011                     return JSON.stringify({ dataIntroGraph: baseEntities });
85012
85013
85014                     function copyIntroEntity(source) {
85015                         var copy = utilObjectOmit(source, ['type', 'user', 'v', 'version', 'visible']);
85016
85017                         // Note: the copy is no longer an osmEntity, so it might not have `tags`
85018                         if (copy.tags && !Object.keys(copy.tags)) {
85019                             delete copy.tags;
85020                         }
85021
85022                         if (Array.isArray(copy.loc)) {
85023                             copy.loc[0] = +copy.loc[0].toFixed(6);
85024                             copy.loc[1] = +copy.loc[1].toFixed(6);
85025                         }
85026
85027                         var match = source.id.match(/([nrw])-\d*/);  // temporary id
85028                         if (match !== null) {
85029                             var nrw = match[1];
85030                             var permID;
85031                             do { permID = nrw + (++nextID[nrw]); }
85032                             while (baseEntities.hasOwnProperty(permID));
85033
85034                             copy.id = permIDs[source.id] = permID;
85035                         }
85036                         return copy;
85037                     }
85038                 },
85039
85040
85041                 toJSON: function() {
85042                     if (!this.hasChanges()) { return; }
85043
85044                     var allEntities = {};
85045                     var baseEntities = {};
85046                     var base = _stack[0];
85047
85048                     var s = _stack.map(function(i) {
85049                         var modified = [];
85050                         var deleted = [];
85051
85052                         Object.keys(i.graph.entities).forEach(function(id) {
85053                             var entity = i.graph.entities[id];
85054                             if (entity) {
85055                                 var key = osmEntity.key(entity);
85056                                 allEntities[key] = entity;
85057                                 modified.push(key);
85058                             } else {
85059                                 deleted.push(id);
85060                             }
85061
85062                             // make sure that the originals of changed or deleted entities get merged
85063                             // into the base of the _stack after restoring the data from JSON.
85064                             if (id in base.graph.entities) {
85065                                 baseEntities[id] = base.graph.entities[id];
85066                             }
85067                             if (entity && entity.nodes) {
85068                                 // get originals of pre-existing child nodes
85069                                 entity.nodes.forEach(function(nodeID) {
85070                                     if (nodeID in base.graph.entities) {
85071                                         baseEntities[nodeID] = base.graph.entities[nodeID];
85072                                     }
85073                                 });
85074                             }
85075                             // get originals of parent entities too
85076                             var baseParents = base.graph._parentWays[id];
85077                             if (baseParents) {
85078                                 baseParents.forEach(function(parentID) {
85079                                     if (parentID in base.graph.entities) {
85080                                         baseEntities[parentID] = base.graph.entities[parentID];
85081                                     }
85082                                 });
85083                             }
85084                         });
85085
85086                         var x = {};
85087
85088                         if (modified.length) { x.modified = modified; }
85089                         if (deleted.length) { x.deleted = deleted; }
85090                         if (i.imageryUsed) { x.imageryUsed = i.imageryUsed; }
85091                         if (i.photoOverlaysUsed) { x.photoOverlaysUsed = i.photoOverlaysUsed; }
85092                         if (i.annotation) { x.annotation = i.annotation; }
85093                         if (i.transform) { x.transform = i.transform; }
85094                         if (i.selectedIDs) { x.selectedIDs = i.selectedIDs; }
85095
85096                         return x;
85097                     });
85098
85099                     return JSON.stringify({
85100                         version: 3,
85101                         entities: Object.values(allEntities),
85102                         baseEntities: Object.values(baseEntities),
85103                         stack: s,
85104                         nextIDs: osmEntity.id.next,
85105                         index: _index,
85106                         // note the time the changes were saved
85107                         timestamp: (new Date()).getTime()
85108                     });
85109                 },
85110
85111
85112                 fromJSON: function(json, loadChildNodes) {
85113                     var h = JSON.parse(json);
85114                     var loadComplete = true;
85115
85116                     osmEntity.id.next = h.nextIDs;
85117                     _index = h.index;
85118
85119                     if (h.version === 2 || h.version === 3) {
85120                         var allEntities = {};
85121
85122                         h.entities.forEach(function(entity) {
85123                             allEntities[osmEntity.key(entity)] = osmEntity(entity);
85124                         });
85125
85126                         if (h.version === 3) {
85127                             // This merges originals for changed entities into the base of
85128                             // the _stack even if the current _stack doesn't have them (for
85129                             // example when iD has been restarted in a different region)
85130                             var baseEntities = h.baseEntities.map(function(d) { return osmEntity(d); });
85131                             var stack = _stack.map(function(state) { return state.graph; });
85132                             _stack[0].graph.rebase(baseEntities, stack, true);
85133                             _tree.rebase(baseEntities, true);
85134
85135                             // When we restore a modified way, we also need to fetch any missing
85136                             // childnodes that would normally have been downloaded with it.. #2142
85137                             if (loadChildNodes) {
85138                                 var osm = context.connection();
85139                                 var baseWays = baseEntities
85140                                     .filter(function(e) { return e.type === 'way'; });
85141                                 var nodeIDs = baseWays
85142                                     .reduce(function(acc, way) { return utilArrayUnion(acc, way.nodes); }, []);
85143                                 var missing = nodeIDs
85144                                     .filter(function(n) { return !_stack[0].graph.hasEntity(n); });
85145
85146                                 if (missing.length && osm) {
85147                                     loadComplete = false;
85148                                     context.redrawEnable(false);
85149
85150                                     var loading = uiLoading(context).blocking(true);
85151                                     context.container().call(loading);
85152
85153                                     var childNodesLoaded = function(err, result) {
85154                                         if (!err) {
85155                                             var visibleGroups = utilArrayGroupBy(result.data, 'visible');
85156                                             var visibles = visibleGroups.true || [];      // alive nodes
85157                                             var invisibles = visibleGroups.false || [];   // deleted nodes
85158
85159                                             if (visibles.length) {
85160                                                 var visibleIDs = visibles.map(function(entity) { return entity.id; });
85161                                                 var stack = _stack.map(function(state) { return state.graph; });
85162                                                 missing = utilArrayDifference(missing, visibleIDs);
85163                                                 _stack[0].graph.rebase(visibles, stack, true);
85164                                                 _tree.rebase(visibles, true);
85165                                             }
85166
85167                                             // fetch older versions of nodes that were deleted..
85168                                             invisibles.forEach(function(entity) {
85169                                                 osm.loadEntityVersion(entity.id, +entity.version - 1, childNodesLoaded);
85170                                             });
85171                                         }
85172
85173                                         if (err || !missing.length) {
85174                                             loading.close();
85175                                             context.redrawEnable(true);
85176                                             dispatch$1.call('change');
85177                                             dispatch$1.call('restore', this);
85178                                         }
85179                                     };
85180
85181                                     osm.loadMultiple(missing, childNodesLoaded);
85182                                 }
85183                             }
85184                         }
85185
85186                         _stack = h.stack.map(function(d) {
85187                             var entities = {}, entity;
85188
85189                             if (d.modified) {
85190                                 d.modified.forEach(function(key) {
85191                                     entity = allEntities[key];
85192                                     entities[entity.id] = entity;
85193                                 });
85194                             }
85195
85196                             if (d.deleted) {
85197                                 d.deleted.forEach(function(id) {
85198                                     entities[id] = undefined;
85199                                 });
85200                             }
85201
85202                             return {
85203                                 graph: coreGraph(_stack[0].graph).load(entities),
85204                                 annotation: d.annotation,
85205                                 imageryUsed: d.imageryUsed,
85206                                 photoOverlaysUsed: d.photoOverlaysUsed,
85207                                 transform: d.transform,
85208                                 selectedIDs: d.selectedIDs
85209                             };
85210                         });
85211
85212                     } else { // original version
85213                         _stack = h.stack.map(function(d) {
85214                             var entities = {};
85215
85216                             for (var i in d.entities) {
85217                                 var entity = d.entities[i];
85218                                 entities[i] = entity === 'undefined' ? undefined : osmEntity(entity);
85219                             }
85220
85221                             d.graph = coreGraph(_stack[0].graph).load(entities);
85222                             return d;
85223                         });
85224                     }
85225
85226                     var transform = _stack[_index].transform;
85227                     if (transform) {
85228                         context.map().transformEase(transform, 0);   // 0 = immediate, no easing
85229                     }
85230
85231                     if (loadComplete) {
85232                         dispatch$1.call('change');
85233                         dispatch$1.call('restore', this);
85234                     }
85235
85236                     return history;
85237                 },
85238
85239
85240                 lock: function() {
85241                     return lock.lock();
85242                 },
85243
85244
85245                 unlock: function() {
85246                     lock.unlock();
85247                 },
85248
85249
85250                 save: function() {
85251                     if (lock.locked() &&
85252                         // don't overwrite existing, unresolved changes
85253                         !_hasUnresolvedRestorableChanges) {
85254
85255                         context.storage(getKey('saved_history'), history.toJSON() || null);
85256                     }
85257                     return history;
85258                 },
85259
85260
85261                 // delete the history version saved in localStorage
85262                 clearSaved: function() {
85263                     context.debouncedSave.cancel();
85264                     if (lock.locked()) {
85265                         _hasUnresolvedRestorableChanges = false;
85266                         context.storage(getKey('saved_history'), null);
85267
85268                         // clear the changeset metadata associated with the saved history
85269                         context.storage('comment', null);
85270                         context.storage('hashtags', null);
85271                         context.storage('source', null);
85272                     }
85273                     return history;
85274                 },
85275
85276
85277                 savedHistoryJSON: function() {
85278                     return context.storage(getKey('saved_history'));
85279                 },
85280
85281
85282                 hasRestorableChanges: function() {
85283                     return _hasUnresolvedRestorableChanges;
85284                 },
85285
85286
85287                 // load history from a version stored in localStorage
85288                 restore: function() {
85289                     if (lock.locked()) {
85290                         _hasUnresolvedRestorableChanges = false;
85291                         var json = this.savedHistoryJSON();
85292                         if (json) { history.fromJSON(json, true); }
85293                     }
85294                 },
85295
85296
85297                 _getKey: getKey
85298
85299             };
85300
85301
85302             history.reset();
85303
85304             return utilRebind(history, dispatch$1, 'on');
85305         }
85306
85307         /**
85308          * Look for roads that can be connected to other roads with a short extension
85309          */
85310         function validationAlmostJunction(context) {
85311             var type = 'almost_junction';
85312
85313
85314             function isHighway(entity) {
85315                 return entity.type === 'way' &&
85316                     osmRoutableHighwayTagValues[entity.tags.highway];
85317             }
85318
85319             function isTaggedAsNotContinuing(node) {
85320                 return node.tags.noexit === 'yes' ||
85321                     node.tags.amenity === 'parking_entrance' ||
85322                     (node.tags.entrance && node.tags.entrance !== 'no');
85323             }
85324
85325
85326             var validation = function checkAlmostJunction(entity, graph) {
85327                 if (!isHighway(entity)) { return []; }
85328                 if (entity.isDegenerate()) { return []; }
85329
85330                 var tree = context.history().tree();
85331                 var issues = [];
85332
85333                 var extendableNodeInfos = findConnectableEndNodesByExtension(entity);
85334                 extendableNodeInfos.forEach(function(extendableNodeInfo) {
85335                     issues.push(new validationIssue({
85336                         type: type,
85337                         subtype: 'highway-highway',
85338                         severity: 'warning',
85339                         message: function(context) {
85340                             var entity1 = context.hasEntity(this.entityIds[0]);
85341                             if (this.entityIds[0] === this.entityIds[2]) {
85342                                 return entity1 ? t('issues.almost_junction.self.message', {
85343                                     feature: utilDisplayLabel(entity1, context)
85344                                 }) : '';
85345                             } else {
85346                                 var entity2 = context.hasEntity(this.entityIds[2]);
85347                                 return (entity1 && entity2) ? t('issues.almost_junction.message', {
85348                                     feature: utilDisplayLabel(entity1, context),
85349                                     feature2: utilDisplayLabel(entity2, context)
85350                                 }) : '';
85351                             }
85352                         },
85353                         reference: showReference,
85354                         entityIds: [entity.id, extendableNodeInfo.node.id, extendableNodeInfo.wid],
85355                         loc: extendableNodeInfo.node.loc,
85356                         hash: JSON.stringify(extendableNodeInfo.node.loc),
85357                         data: {
85358                             edge: extendableNodeInfo.edge,
85359                             cross_loc: extendableNodeInfo.cross_loc
85360                         },
85361                         dynamicFixes: makeFixes
85362                     }));
85363                 });
85364
85365                 return issues;
85366
85367
85368                 function makeFixes(context) {
85369                     var fixes = [new validationIssueFix({
85370                         icon: 'iD-icon-abutment',
85371                         title: t('issues.fix.connect_features.title'),
85372                         onClick: function(context) {
85373                             var endNodeId = this.issue.entityIds[1];
85374                             var endNode = context.entity(endNodeId);
85375                             var targetEdge = this.issue.data.edge;
85376                             var crossLoc = this.issue.data.cross_loc;
85377                             var edgeNodes = [context.entity(targetEdge[0]), context.entity(targetEdge[1])];
85378                             var closestNodeInfo = geoSphericalClosestNode(edgeNodes, crossLoc);
85379
85380                             var annotation = t('issues.fix.connect_almost_junction.annotation');
85381                             // already a point nearby, just connect to that
85382                             if (closestNodeInfo.distance < 0.75) {
85383                                 context.perform(
85384                                     actionMergeNodes([closestNodeInfo.node.id, endNode.id], closestNodeInfo.node.loc),
85385                                     annotation
85386                                 );
85387                             // else add the end node to the edge way
85388                             } else {
85389                                 context.perform(
85390                                     actionAddMidpoint({loc: crossLoc, edge: targetEdge}, endNode),
85391                                     annotation
85392                                 );
85393                             }
85394                         }
85395                     })];
85396
85397                     var node = context.hasEntity(this.entityIds[1]);
85398                     if (node && !node.hasInterestingTags()) {
85399                         // node has no descriptive tags, suggest noexit fix
85400                         fixes.push(new validationIssueFix({
85401                             icon: 'maki-barrier',
85402                             title: t('issues.fix.tag_as_disconnected.title'),
85403                             onClick: function(context) {
85404                                 var nodeID = this.issue.entityIds[1];
85405                                 var tags = Object.assign({}, context.entity(nodeID).tags);
85406                                 tags.noexit = 'yes';
85407                                 context.perform(
85408                                     actionChangeTags(nodeID, tags),
85409                                     t('issues.fix.tag_as_disconnected.annotation')
85410                                 );
85411                             }
85412                         }));
85413                     }
85414
85415                     return fixes;
85416                 }
85417
85418
85419                 function showReference(selection) {
85420                     selection.selectAll('.issue-reference')
85421                         .data([0])
85422                         .enter()
85423                         .append('div')
85424                         .attr('class', 'issue-reference')
85425                         .text(t('issues.almost_junction.highway-highway.reference'));
85426                 }
85427
85428
85429                 function isExtendableCandidate(node, way) {
85430                     // can not accurately test vertices on tiles not downloaded from osm - #5938
85431                     var osm = services$1.osm;
85432                     if (osm && !osm.isDataLoaded(node.loc)) {
85433                         return false;
85434                     }
85435                     if (isTaggedAsNotContinuing(node) || graph.parentWays(node).length !== 1) {
85436                         return false;
85437                     }
85438
85439                     var occurences = 0;
85440                     for (var index in way.nodes) {
85441                         if (way.nodes[index] === node.id) {
85442                             occurences += 1;
85443                             if (occurences > 1) {
85444                                 return false;
85445                             }
85446                         }
85447                     }
85448                     return true;
85449                 }
85450
85451
85452                 function findConnectableEndNodesByExtension(way) {
85453                     var results = [];
85454                     if (way.isClosed()) { return results; }
85455
85456                     var testNodes;
85457                     var indices = [0, way.nodes.length - 1];
85458                     indices.forEach(function(nodeIndex) {
85459                         var nodeID = way.nodes[nodeIndex];
85460                         var node = graph.entity(nodeID);
85461
85462                         if (!isExtendableCandidate(node, way)) { return; }
85463
85464                         var connectionInfo = canConnectByExtend(way, nodeIndex);
85465                         if (!connectionInfo) { return; }
85466
85467                         testNodes = graph.childNodes(way).slice();   // shallow copy
85468                         testNodes[nodeIndex] = testNodes[nodeIndex].move(connectionInfo.cross_loc);
85469
85470                         // don't flag issue if connecting the ways would cause self-intersection
85471                         if (geoHasSelfIntersections(testNodes, nodeID)) { return; }
85472
85473                         results.push(connectionInfo);
85474                     });
85475
85476                     return results;
85477                 }
85478
85479                 function hasTag(tags, key) {
85480                     return tags[key] !== undefined && tags[key] !== 'no';
85481                 }
85482
85483                 function canConnectWays(way, way2) {
85484
85485                     // allow self-connections
85486                     if (way.id === way2.id) { return true; }
85487
85488                     // if one is bridge or tunnel, both must be bridge or tunnel
85489                     if ((hasTag(way.tags, 'bridge') || hasTag(way2.tags, 'bridge')) &&
85490                         !(hasTag(way.tags, 'bridge') && hasTag(way2.tags, 'bridge'))) { return false; }
85491                     if ((hasTag(way.tags, 'tunnel') || hasTag(way2.tags, 'tunnel')) &&
85492                         !(hasTag(way.tags, 'tunnel') && hasTag(way2.tags, 'tunnel'))) { return false; }
85493
85494                     // must have equivalent layers and levels
85495                     var layer1 = way.tags.layer || '0',
85496                         layer2 = way2.tags.layer || '0';
85497                     if (layer1 !== layer2) { return false; }
85498
85499                     var level1 = way.tags.level || '0',
85500                         level2 = way2.tags.level || '0';
85501                     if (level1 !== level2) { return false; }
85502
85503                     return true;
85504                 }
85505
85506
85507                 function canConnectByExtend(way, endNodeIdx) {
85508                     var EXTEND_TH_METERS = 5;
85509                     var tipNid = way.nodes[endNodeIdx];  // the 'tip' node for extension point
85510                     var midNid = endNodeIdx === 0 ? way.nodes[1] : way.nodes[way.nodes.length - 2];  // the other node of the edge
85511                     var tipNode = graph.entity(tipNid);
85512                     var midNode = graph.entity(midNid);
85513                     var lon = tipNode.loc[0];
85514                     var lat = tipNode.loc[1];
85515                     var lon_range = geoMetersToLon(EXTEND_TH_METERS, lat) / 2;
85516                     var lat_range = geoMetersToLat(EXTEND_TH_METERS) / 2;
85517                     var queryExtent = geoExtent([
85518                         [lon - lon_range, lat - lat_range],
85519                         [lon + lon_range, lat + lat_range]
85520                     ]);
85521
85522                     // first, extend the edge of [midNode -> tipNode] by EXTEND_TH_METERS and find the "extended tip" location
85523                     var edgeLen = geoSphericalDistance(midNode.loc, tipNode.loc);
85524                     var t = EXTEND_TH_METERS / edgeLen + 1.0;
85525                     var extTipLoc = geoVecInterp(midNode.loc, tipNode.loc, t);
85526
85527                     // then, check if the extension part [tipNode.loc -> extTipLoc] intersects any other ways
85528                     var intersected = tree.intersects(queryExtent, graph);
85529                     for (var i = 0; i < intersected.length; i++) {
85530                         var way2 = intersected[i];
85531
85532                         if (!isHighway(way2)) { continue; }
85533
85534                         if (!canConnectWays(way, way2)) { continue; }
85535
85536                         for (var j = 0; j < way2.nodes.length - 1; j++) {
85537                             var nAid = way2.nodes[j],
85538                                 nBid = way2.nodes[j + 1];
85539
85540                             if (nAid === tipNid || nBid === tipNid) { continue; }
85541
85542                             var nA = graph.entity(nAid),
85543                                 nB = graph.entity(nBid);
85544                             var crossLoc = geoLineIntersection([tipNode.loc, extTipLoc], [nA.loc, nB.loc]);
85545                             if (crossLoc) {
85546                                 return {
85547                                     node: tipNode,
85548                                     wid: way2.id,
85549                                     edge: [nA.id, nB.id],
85550                                     cross_loc: crossLoc
85551                                 };
85552                             }
85553                         }
85554                     }
85555                     return null;
85556                 }
85557             };
85558
85559             validation.type = type;
85560
85561             return validation;
85562         }
85563
85564         function validationCloseNodes(context) {
85565             var type = 'close_nodes';
85566
85567             var pointThresholdMeters = 0.2;
85568
85569             var defaultWayThresholdMeters = 0.2;
85570             // expect some features to be mapped with higher levels of detail
85571             var indoorThresholdMeters = 0.01;
85572             var buildingThresholdMeters = 0.05;
85573             var pathThresholdMeters = 0.1;
85574
85575             var validation = function(entity, graph) {
85576                 if (entity.type === 'node') {
85577                     return getIssuesForNode(entity);
85578                 } else if (entity.type === 'way') {
85579                     return getIssuesForWay(entity);
85580                 }
85581                 return [];
85582
85583                 function featureTypeForWay(way) {
85584
85585                     if (way.tags.boundary && way.tags.boundary !== 'no') { return 'boundary'; }
85586                     if (way.tags.indoor && way.tags.indoor !== 'no') { return 'indoor'; }
85587                     if ((way.tags.building && way.tags.building !== 'no') ||
85588                         (way.tags['building:part'] && way.tags['building:part'] !== 'no')) { return 'building'; }
85589                     if (osmPathHighwayTagValues[way.tags.highway]) { return 'path'; }
85590
85591                     var parentRelations = graph.parentRelations(way);
85592                     for (var i in parentRelations) {
85593                         var relation = parentRelations[i];
85594
85595                         if (relation.tags.type === 'boundary') { return 'boundary'; }
85596
85597                         if (relation.isMultipolygon()) {
85598                             if (relation.tags.indoor && relation.tags.indoor !== 'no') { return 'indoor'; }
85599                             if ((relation.tags.building && relation.tags.building !== 'no') ||
85600                                 (relation.tags['building:part'] && relation.tags['building:part'] !== 'no')) { return 'building'; }
85601                         }
85602                     }
85603
85604                     return 'other';
85605                 }
85606
85607                 function shouldCheckWay(way) {
85608
85609                     // don't flag issues where merging would create degenerate ways
85610                     if (way.nodes.length <= 2 ||
85611                         (way.isClosed() && way.nodes.length <= 4)) { return false; }
85612
85613                     var featureType = featureTypeForWay(way);
85614                     // don't flag boundaries since they might be highly detailed and can't be easily verified
85615                     if (featureType === 'boundary') { return false; }
85616
85617                     var bbox = way.extent(graph).bbox();
85618                     var hypotenuseMeters = geoSphericalDistance([bbox.minX, bbox.minY], [bbox.maxX, bbox.maxY]);
85619                     // don't flag close nodes in very small ways
85620                     if (hypotenuseMeters < 1.5) { return false; }
85621
85622                     return true;
85623                 }
85624
85625                 function getIssuesForWay(way) {
85626                     if (!shouldCheckWay(way)) { return []; }
85627
85628                     var issues = [],
85629                         nodes = graph.childNodes(way);
85630                     for (var i = 0; i < nodes.length - 1; i++) {
85631                         var node1 = nodes[i];
85632                         var node2 = nodes[i+1];
85633
85634                         var issue = getWayIssueIfAny(node1, node2, way);
85635                         if (issue) { issues.push(issue); }
85636                     }
85637                     return issues;
85638                 }
85639
85640                 function getIssuesForVertex(node, parentWays) {
85641                     var issues = [];
85642
85643                     function checkForCloseness(node1, node2, way) {
85644                         var issue = getWayIssueIfAny(node1, node2, way);
85645                         if (issue) { issues.push(issue); }
85646                     }
85647
85648                     for (var i = 0; i < parentWays.length; i++) {
85649                         var parentWay = parentWays[i];
85650
85651                         if (!shouldCheckWay(parentWay)) { continue; }
85652
85653                         var lastIndex = parentWay.nodes.length - 1;
85654                         for (var j = 0; j < parentWay.nodes.length; j++) {
85655                             if (j !== 0) {
85656                                 if (parentWay.nodes[j-1] === node.id) {
85657                                     checkForCloseness(node, graph.entity(parentWay.nodes[j]), parentWay);
85658                                 }
85659                             }
85660                             if (j !== lastIndex) {
85661                                 if (parentWay.nodes[j+1] === node.id) {
85662                                     checkForCloseness(graph.entity(parentWay.nodes[j]), node, parentWay);
85663                                 }
85664                             }
85665                         }
85666                     }
85667                     return issues;
85668                 }
85669
85670                 function getIssuesForDetachedPoint(node) {
85671
85672                     var issues = [];
85673
85674                     var lon = node.loc[0];
85675                     var lat = node.loc[1];
85676                     var lon_range = geoMetersToLon(pointThresholdMeters, lat) / 2;
85677                     var lat_range = geoMetersToLat(pointThresholdMeters) / 2;
85678                     var queryExtent = geoExtent([
85679                         [lon - lon_range, lat - lat_range],
85680                         [lon + lon_range, lat + lat_range]
85681                     ]);
85682
85683                     var intersected = context.history().tree().intersects(queryExtent, graph);
85684                     for (var j = 0; j < intersected.length; j++) {
85685                         var nearby = intersected[j];
85686
85687                         if (nearby.id === node.id) { continue; }
85688                         if (nearby.type !== 'node' || nearby.geometry(graph) !== 'point') { continue; }
85689
85690                         if (nearby.loc === node.loc ||
85691                             geoSphericalDistance(node.loc, nearby.loc) < pointThresholdMeters) {
85692
85693                             // allow very close points if tags indicate the z-axis might vary
85694                             var zAxisKeys = { layer: true, level: true, 'addr:housenumber': true, 'addr:unit': true };
85695                             var zAxisDifferentiates = false;
85696                             for (var key in zAxisKeys) {
85697                                 var nodeValue = node.tags[key] || '0';
85698                                 var nearbyValue = nearby.tags[key] || '0';
85699                                 if (nodeValue !== nearbyValue) {
85700                                     zAxisDifferentiates = true;
85701                                     break;
85702                                 }
85703                             }
85704                             if (zAxisDifferentiates) { continue; }
85705
85706                             issues.push(new validationIssue({
85707                                 type: type,
85708                                 subtype: 'detached',
85709                                 severity: 'warning',
85710                                 message: function(context) {
85711                                     var entity = context.hasEntity(this.entityIds[0]),
85712                                         entity2 = context.hasEntity(this.entityIds[1]);
85713                                     return (entity && entity2) ? t('issues.close_nodes.detached.message', {
85714                                         feature: utilDisplayLabel(entity, context),
85715                                         feature2: utilDisplayLabel(entity2, context)
85716                                     }) : '';
85717                                 },
85718                                 reference: showReference,
85719                                 entityIds: [node.id, nearby.id],
85720                                 dynamicFixes: function() {
85721                                     return [
85722                                         new validationIssueFix({
85723                                             icon: 'iD-operation-disconnect',
85724                                             title: t('issues.fix.move_points_apart.title')
85725                                         }),
85726                                         new validationIssueFix({
85727                                             icon: 'iD-icon-layers',
85728                                             title: t('issues.fix.use_different_layers_or_levels.title')
85729                                         })
85730                                     ];
85731                                 }
85732                             }));
85733                         }
85734                     }
85735
85736                     return issues;
85737
85738                     function showReference(selection) {
85739                         var referenceText = t('issues.close_nodes.detached.reference');
85740                         selection.selectAll('.issue-reference')
85741                             .data([0])
85742                             .enter()
85743                             .append('div')
85744                             .attr('class', 'issue-reference')
85745                             .text(referenceText);
85746                     }
85747                 }
85748
85749                 function getIssuesForNode(node) {
85750                     var parentWays = graph.parentWays(node);
85751                     if (parentWays.length) {
85752                         return getIssuesForVertex(node, parentWays);
85753                     } else {
85754                         return getIssuesForDetachedPoint(node);
85755                     }
85756                 }
85757
85758                 function getWayIssueIfAny(node1, node2, way) {
85759                     if (node1.id === node2.id ||
85760                         (node1.hasInterestingTags() && node2.hasInterestingTags())) {
85761                         return null;
85762                     }
85763
85764                     if (node1.loc !== node2.loc) {
85765
85766                         var featureType = featureTypeForWay(way);
85767                         var threshold = defaultWayThresholdMeters;
85768                         if (featureType === 'indoor') { threshold = indoorThresholdMeters; }
85769                         else if (featureType === 'building') { threshold = buildingThresholdMeters; }
85770                         else if (featureType === 'path') { threshold = pathThresholdMeters; }
85771
85772                         var distance = geoSphericalDistance(node1.loc, node2.loc);
85773                         if (distance > threshold) { return null; }
85774                     }
85775
85776                     return new validationIssue({
85777                         type: type,
85778                         subtype: 'vertices',
85779                         severity: 'warning',
85780                         message: function(context) {
85781                             var entity = context.hasEntity(this.entityIds[0]);
85782                             return entity ? t('issues.close_nodes.message', { way: utilDisplayLabel(entity, context) }) : '';
85783                         },
85784                         reference: showReference,
85785                         entityIds: [way.id, node1.id, node2.id],
85786                         loc: node1.loc,
85787                         dynamicFixes: function() {
85788                             return [
85789                                 new validationIssueFix({
85790                                     icon: 'iD-icon-plus',
85791                                     title: t('issues.fix.merge_points.title'),
85792                                     onClick: function(context) {
85793                                         var entityIds = this.issue.entityIds;
85794                                         var action = actionMergeNodes([entityIds[1], entityIds[2]]);
85795                                         context.perform(action, t('issues.fix.merge_close_vertices.annotation'));
85796                                     }
85797                                 }),
85798                                 new validationIssueFix({
85799                                     icon: 'iD-operation-disconnect',
85800                                     title: t('issues.fix.move_points_apart.title')
85801                                 })
85802                             ];
85803                         }
85804                     });
85805
85806                     function showReference(selection) {
85807                         var referenceText = t('issues.close_nodes.reference');
85808                         selection.selectAll('.issue-reference')
85809                             .data([0])
85810                             .enter()
85811                             .append('div')
85812                             .attr('class', 'issue-reference')
85813                             .text(referenceText);
85814                     }
85815                 }
85816
85817             };
85818
85819
85820             validation.type = type;
85821
85822             return validation;
85823         }
85824
85825         function validationCrossingWays(context) {
85826             var type = 'crossing_ways';
85827
85828             // returns the way or its parent relation, whichever has a useful feature type
85829             function getFeatureWithFeatureTypeTagsForWay(way, graph) {
85830                 if (getFeatureTypeForTags(way.tags) === null) {
85831                     // if the way doesn't match a feature type, check its parent relations
85832                     var parentRels = graph.parentRelations(way);
85833                     for (var i = 0; i < parentRels.length; i++) {
85834                         var rel = parentRels[i];
85835                         if (getFeatureTypeForTags(rel.tags) !== null) {
85836                             return rel;
85837                         }
85838                     }
85839                 }
85840                 return way;
85841             }
85842
85843
85844             function hasTag(tags, key) {
85845                 return tags[key] !== undefined && tags[key] !== 'no';
85846             }
85847
85848             function taggedAsIndoor(tags) {
85849                 return hasTag(tags, 'indoor') ||
85850                     hasTag(tags, 'level') ||
85851                     tags.highway === 'corridor';
85852             }
85853
85854             function allowsBridge(featureType) {
85855                 return featureType === 'highway' || featureType === 'railway' || featureType === 'waterway';
85856             }
85857             function allowsTunnel(featureType) {
85858                 return featureType === 'highway' || featureType === 'railway' || featureType === 'waterway';
85859             }
85860
85861
85862             function getFeatureTypeForCrossingCheck(way, graph) {
85863                 var tags = getFeatureWithFeatureTypeTagsForWay(way, graph).tags;
85864                 return getFeatureTypeForTags(tags);
85865             }
85866
85867             // blacklist
85868             var ignoredBuildings = {
85869                 demolished: true, dismantled: true, proposed: true, razed: true
85870             };
85871
85872
85873             function getFeatureTypeForTags(tags) {
85874                 if (hasTag(tags, 'building') && !ignoredBuildings[tags.building]) { return 'building'; }
85875
85876                 // don't check non-building areas
85877                 if (hasTag(tags, 'area')) { return null; }
85878
85879                 if (hasTag(tags, 'highway') && osmRoutableHighwayTagValues[tags.highway]) { return 'highway'; }
85880                 if (hasTag(tags, 'railway') && osmRailwayTrackTagValues[tags.railway]) { return 'railway'; }
85881                 if (hasTag(tags, 'waterway') && osmFlowingWaterwayTagValues[tags.waterway]) { return 'waterway'; }
85882
85883                 return null;
85884             }
85885
85886
85887             function isLegitCrossing(way1, featureType1, way2, featureType2) {
85888                 var tags1 = way1.tags;
85889                 var tags2 = way2.tags;
85890
85891                 // assume 0 by default
85892                 var level1 = tags1.level || '0';
85893                 var level2 = tags2.level || '0';
85894
85895                 if (taggedAsIndoor(tags1) && taggedAsIndoor(tags2) && level1 !== level2) {
85896                     // assume features don't interact if they're indoor on different levels
85897                     return true;
85898                 }
85899
85900                 // assume 0 by default; don't use way.layer() since we account for structures here
85901                 var layer1 = tags1.layer || '0';
85902                 var layer2 = tags2.layer || '0';
85903
85904                 if (allowsBridge(featureType1) && allowsBridge(featureType2)) {
85905                     if (hasTag(tags1, 'bridge') && !hasTag(tags2, 'bridge')) { return true; }
85906                     if (!hasTag(tags1, 'bridge') && hasTag(tags2, 'bridge')) { return true; }
85907                     // crossing bridges must use different layers
85908                     if (hasTag(tags1, 'bridge') && hasTag(tags2, 'bridge') && layer1 !== layer2) { return true; }
85909                 } else if (allowsBridge(featureType1) && hasTag(tags1, 'bridge')) { return true; }
85910                 else if (allowsBridge(featureType2) && hasTag(tags2, 'bridge')) { return true; }
85911
85912                 if (allowsTunnel(featureType1) && allowsTunnel(featureType2)) {
85913                     if (hasTag(tags1, 'tunnel') && !hasTag(tags2, 'tunnel')) { return true; }
85914                     if (!hasTag(tags1, 'tunnel') && hasTag(tags2, 'tunnel')) { return true; }
85915                     // crossing tunnels must use different layers
85916                     if (hasTag(tags1, 'tunnel') && hasTag(tags2, 'tunnel') && layer1 !== layer2) { return true; }
85917                 } else if (allowsTunnel(featureType1) && hasTag(tags1, 'tunnel')) { return true; }
85918                 else if (allowsTunnel(featureType2) && hasTag(tags2, 'tunnel')) { return true; }
85919
85920                 // don't flag crossing waterways and pier/highways
85921                 if (featureType1 === 'waterway' && featureType2 === 'highway' && tags2.man_made === 'pier') { return true; }
85922                 if (featureType2 === 'waterway' && featureType1 === 'highway' && tags1.man_made === 'pier') { return true; }
85923
85924                 if (featureType1 === 'building' || featureType2 === 'building') {
85925                     // for building crossings, different layers are enough
85926                     if (layer1 !== layer2) { return true; }
85927                 }
85928                 return false;
85929             }
85930
85931
85932             // highway values for which we shouldn't recommend connecting to waterways
85933             var highwaysDisallowingFords = {
85934                 motorway: true, motorway_link: true, trunk: true, trunk_link: true,
85935                 primary: true, primary_link: true, secondary: true, secondary_link: true
85936             };
85937             var nonCrossingHighways = { track: true };
85938
85939             function tagsForConnectionNodeIfAllowed(entity1, entity2) {
85940                 var featureType1 = getFeatureTypeForTags(entity1.tags);
85941                 var featureType2 = getFeatureTypeForTags(entity2.tags);
85942                 if (featureType1 === featureType2) {
85943                     if (featureType1 === 'highway') {
85944                         var entity1IsPath = osmPathHighwayTagValues[entity1.tags.highway];
85945                         var entity2IsPath = osmPathHighwayTagValues[entity2.tags.highway];
85946                         if ((entity1IsPath || entity2IsPath) && entity1IsPath !== entity2IsPath) {
85947                             // one feature is a path but not both
85948
85949                             var roadFeature = entity1IsPath ? entity2 : entity1;
85950                             if (nonCrossingHighways[roadFeature.tags.highway]) {
85951                                 // don't mark path connections with certain roads as crossings
85952                                 return {};
85953                             }
85954                             var pathFeature = entity1IsPath ? entity1 : entity2;
85955                             if (['marked', 'unmarked'].indexOf(pathFeature.tags.crossing) !== -1) {
85956                                 // if the path is a crossing, match the crossing type
85957                                 return { highway: 'crossing', crossing: pathFeature.tags.crossing };
85958                             }
85959                             // don't add a `crossing` subtag to ambiguous crossings
85960                             return { highway: 'crossing' };
85961                         }
85962                         return {};
85963                     }
85964                     if (featureType1 === 'waterway') { return {}; }
85965                     if (featureType1 === 'railway') { return {}; }
85966
85967                 } else {
85968                     var featureTypes = [featureType1, featureType2];
85969                     if (featureTypes.indexOf('highway') !== -1) {
85970                         if (featureTypes.indexOf('railway') !== -1) {
85971                             if (osmPathHighwayTagValues[entity1.tags.highway] ||
85972                                 osmPathHighwayTagValues[entity2.tags.highway]) {
85973                                 // path-rail connections use this tag
85974                                 return { railway: 'crossing' };
85975                             } else {
85976                                 // road-rail connections use this tag
85977                                 return { railway: 'level_crossing' };
85978                             }
85979                         }
85980
85981                         if (featureTypes.indexOf('waterway') !== -1) {
85982                             // do not allow fords on structures
85983                             if (hasTag(entity1.tags, 'tunnel') && hasTag(entity2.tags, 'tunnel')) { return null; }
85984                             if (hasTag(entity1.tags, 'bridge') && hasTag(entity2.tags, 'bridge')) { return null; }
85985
85986                             if (highwaysDisallowingFords[entity1.tags.highway] ||
85987                                 highwaysDisallowingFords[entity2.tags.highway]) {
85988                                 // do not allow fords on major highways
85989                                 return null;
85990                             }
85991                             return { ford: 'yes' };
85992                         }
85993                     }
85994                 }
85995                 return null;
85996             }
85997
85998
85999             function findCrossingsByWay(way1, graph, tree) {
86000                 var edgeCrossInfos = [];
86001                 if (way1.type !== 'way') { return edgeCrossInfos; }
86002
86003                 var way1FeatureType = getFeatureTypeForCrossingCheck(way1, graph);
86004                 if (way1FeatureType === null) { return edgeCrossInfos; }
86005
86006                 var checkedSingleCrossingWays = {};
86007
86008                 // declare vars ahead of time to reduce garbage collection
86009                 var i, j, nodeIndex;
86010                 var extent;
86011                 var n1, n2, nA, nB;
86012                 var segment1, segment2;
86013                 var oneOnly;
86014                 var intersected, way2, way2FeatureType, way2Nodes;
86015                 var way1Nodes = graph.childNodes(way1);
86016                 var comparedWays = {};
86017                 for (i = 0; i < way1Nodes.length - 1; i++) {
86018                     n1 = way1Nodes[i];
86019                     n2 = way1Nodes[i + 1];
86020                     extent = geoExtent([
86021                         [
86022                             Math.min(n1.loc[0], n2.loc[0]),
86023                             Math.min(n1.loc[1], n2.loc[1])
86024                         ],
86025                         [
86026                             Math.max(n1.loc[0], n2.loc[0]),
86027                             Math.max(n1.loc[1], n2.loc[1])
86028                         ]
86029                     ]);
86030
86031                     intersected = tree.intersects(extent, graph);
86032                     for (j = 0; j < intersected.length; j++) {
86033                         way2 = intersected[j];
86034
86035                         if (way2.type !== 'way') { continue; }
86036
86037                         // don't check for self-intersection in this validation
86038                         if (way2.id === way1.id) { continue; }
86039
86040                         // skip if this way was already checked and only one issue is needed
86041                         if (checkedSingleCrossingWays[way2.id]) { continue; }
86042
86043                         // mark this way as checked even if there are no crossings
86044                         comparedWays[way2.id] = true;
86045
86046                         // only check crossing highway, waterway, building, and railway
86047                         way2FeatureType = getFeatureTypeForCrossingCheck(way2, graph);
86048                         if (way2FeatureType === null ||
86049                             isLegitCrossing(way1, way1FeatureType, way2, way2FeatureType)) {
86050                             continue;
86051                         }
86052
86053                         // create only one issue for building crossings
86054                         oneOnly = way1FeatureType === 'building' || way2FeatureType === 'building';
86055                         segment1 = [n1.loc, n2.loc];
86056
86057                         way2Nodes = graph.childNodes(way2);
86058                         for (nodeIndex = 0; nodeIndex < way2Nodes.length - 1; nodeIndex++) {
86059                             nA = way2Nodes[nodeIndex];
86060                             nB = way2Nodes[nodeIndex + 1];
86061                             if (nA.id === n1.id || nA.id === n2.id ||
86062                                 nB.id === n1.id || nB.id === n2.id) {
86063                                 // n1 or n2 is a connection node; skip
86064                                 continue;
86065                             }
86066                             segment2 = [nA.loc, nB.loc];
86067                             var point = geoLineIntersection(segment1, segment2);
86068                             if (point) {
86069                                 edgeCrossInfos.push({
86070                                     wayInfos: [
86071                                         {
86072                                             way: way1,
86073                                             featureType: way1FeatureType,
86074                                             edge: [n1.id, n2.id]
86075                                         },
86076                                         {
86077                                             way: way2,
86078                                             featureType: way2FeatureType,
86079                                             edge: [nA.id, nB.id]
86080                                         }
86081                                     ],
86082                                     crossPoint: point
86083                                 });
86084                                 if (oneOnly) {
86085                                     checkedSingleCrossingWays[way2.id] = true;
86086                                     break;
86087                                 }
86088                             }
86089                         }
86090                     }
86091                 }
86092                 return edgeCrossInfos;
86093             }
86094
86095
86096             function waysToCheck(entity, graph) {
86097                 if (!getFeatureTypeForTags(entity.tags)) {
86098                     return [];
86099                 }
86100                 if (entity.type === 'way') {
86101                     return [entity];
86102                 } else if (entity.type === 'relation' &&
86103                     entity.isMultipolygon() &&
86104                     // only check multipolygons if they are buildings
86105                     hasTag(entity.tags, 'building')) {
86106                     return entity.members.reduce(function(array, member) {
86107                         if (member.type === 'way' &&
86108                             //(member.role === 'outer' || member.role === 'inner') &&
86109                             graph.hasEntity(member.id)) {
86110                             var entity = graph.entity(member.id);
86111                             array.push(entity);
86112                         }
86113                         return array;
86114                     }, []);
86115                 }
86116                 return [];
86117             }
86118
86119
86120             var validation = function checkCrossingWays(entity, graph) {
86121
86122                 var tree = context.history().tree();
86123
86124                 var ways = waysToCheck(entity, graph);
86125
86126                 var issues = [];
86127                 // declare these here to reduce garbage collection
86128                 var wayIndex, crossingIndex, crossings;
86129                 for (wayIndex in ways) {
86130                     crossings = findCrossingsByWay(ways[wayIndex], graph, tree);
86131                     for (crossingIndex in crossings) {
86132                         issues.push(createIssue(crossings[crossingIndex], graph));
86133                     }
86134                 }
86135                 return issues;
86136             };
86137
86138
86139             function createIssue(crossing, graph) {
86140
86141                 // use the entities with the tags that define the feature type
86142                 crossing.wayInfos.sort(function(way1Info, way2Info) {
86143                     var type1 = way1Info.featureType;
86144                     var type2 = way2Info.featureType;
86145                     if (type1 === type2) {
86146                         return utilDisplayLabel(way1Info.way, context) > utilDisplayLabel(way2Info.way, context);
86147                     } else if (type1 === 'waterway') {
86148                         return true;
86149                     } else if (type2 === 'waterway') {
86150                         return false;
86151                     }
86152                     return type1 < type2;
86153                 });
86154                 var entities = crossing.wayInfos.map(function(wayInfo) {
86155                     return getFeatureWithFeatureTypeTagsForWay(wayInfo.way, graph);
86156                 });
86157                 var edges = [crossing.wayInfos[0].edge, crossing.wayInfos[1].edge];
86158                 var featureTypes = [crossing.wayInfos[0].featureType, crossing.wayInfos[1].featureType];
86159
86160                 var connectionTags = tagsForConnectionNodeIfAllowed(entities[0], entities[1]);
86161
86162                 var featureType1 = crossing.wayInfos[0].featureType;
86163                 var featureType2 = crossing.wayInfos[1].featureType;
86164
86165                 var isCrossingIndoors = taggedAsIndoor(entities[0].tags) && taggedAsIndoor(entities[1].tags);
86166                 var isCrossingTunnels = allowsTunnel(featureType1) && hasTag(entities[0].tags, 'tunnel') &&
86167                                         allowsTunnel(featureType2) && hasTag(entities[1].tags, 'tunnel');
86168                 var isCrossingBridges = allowsBridge(featureType1) && hasTag(entities[0].tags, 'bridge') &&
86169                                         allowsBridge(featureType2) && hasTag(entities[1].tags, 'bridge');
86170
86171                 var subtype = [featureType1, featureType2].sort().join('-');
86172
86173                 var crossingTypeID = subtype;
86174
86175                 if (isCrossingIndoors) {
86176                     crossingTypeID = 'indoor-indoor';
86177                 } else if (isCrossingTunnels) {
86178                     crossingTypeID = 'tunnel-tunnel';
86179                 } else if (isCrossingBridges) {
86180                     crossingTypeID = 'bridge-bridge';
86181                 }
86182                 if (connectionTags && (isCrossingIndoors || isCrossingTunnels || isCrossingBridges)) {
86183                     crossingTypeID += '_connectable';
86184                 }
86185
86186                 return new validationIssue({
86187                     type: type,
86188                     subtype: subtype,
86189                     severity: 'warning',
86190                     message: function(context) {
86191                         var entity1 = context.hasEntity(this.entityIds[0]),
86192                             entity2 = context.hasEntity(this.entityIds[1]);
86193                         return (entity1 && entity2) ? t('issues.crossing_ways.message', {
86194                             feature: utilDisplayLabel(entity1, context),
86195                             feature2: utilDisplayLabel(entity2, context)
86196                         }) : '';
86197                     },
86198                     reference: showReference,
86199                     entityIds: entities.map(function(entity) {
86200                         return entity.id;
86201                     }),
86202                     data: {
86203                         edges: edges,
86204                         featureTypes: featureTypes,
86205                         connectionTags: connectionTags
86206                     },
86207                     // differentiate based on the loc since two ways can cross multiple times
86208                     hash: crossing.crossPoint.toString() +
86209                         // if the edges change then so does the fix
86210                         edges.slice().sort(function(edge1, edge2) {
86211                             // order to assure hash is deterministic
86212                             return edge1[0] < edge2[0] ? -1 : 1;
86213                         }).toString() +
86214                         // ensure the correct connection tags are added in the fix
86215                         JSON.stringify(connectionTags),
86216                     loc: crossing.crossPoint,
86217                     dynamicFixes: function() {
86218                         var mode = context.mode();
86219                         if (!mode || mode.id !== 'select' || mode.selectedIDs().length !== 1) { return []; }
86220
86221                         var selectedIndex = this.entityIds[0] === mode.selectedIDs()[0] ? 0 : 1;
86222                         var selectedFeatureType = this.data.featureTypes[selectedIndex];
86223
86224                         var fixes = [];
86225
86226                         if (connectionTags) {
86227                             fixes.push(makeConnectWaysFix(this.data.connectionTags));
86228                         }
86229
86230                         if (isCrossingIndoors) {
86231                             fixes.push(new validationIssueFix({
86232                                 icon: 'iD-icon-layers',
86233                                 title: t('issues.fix.use_different_levels.title')
86234                             }));
86235                         } else if (isCrossingTunnels ||
86236                             isCrossingBridges ||
86237                             featureType1 === 'building' ||
86238                             featureType2 === 'building')  {
86239
86240                             fixes.push(makeChangeLayerFix('higher'));
86241                             fixes.push(makeChangeLayerFix('lower'));
86242                         } else {
86243                             // don't recommend adding bridges to waterways since they're uncommmon
86244                             if (allowsBridge(selectedFeatureType) && selectedFeatureType !== 'waterway') {
86245                                 fixes.push(makeAddBridgeOrTunnelFix('add_a_bridge', 'temaki-bridge', 'bridge'));
86246                             }
86247
86248                             if (allowsTunnel(selectedFeatureType)) {
86249                                 fixes.push(makeAddBridgeOrTunnelFix('add_a_tunnel', 'temaki-tunnel', 'tunnel'));
86250                             }
86251                         }
86252
86253                         // repositioning the features is always an option
86254                         fixes.push(new validationIssueFix({
86255                             icon: 'iD-operation-move',
86256                             title: t('issues.fix.reposition_features.title')
86257                         }));
86258
86259                         return fixes;
86260                     }
86261                 });
86262
86263                 function showReference(selection) {
86264                     selection.selectAll('.issue-reference')
86265                         .data([0])
86266                         .enter()
86267                         .append('div')
86268                         .attr('class', 'issue-reference')
86269                         .text(t('issues.crossing_ways.' + crossingTypeID + '.reference'));
86270                 }
86271             }
86272
86273             function makeAddBridgeOrTunnelFix(fixTitleID, iconName, bridgeOrTunnel){
86274                 return new validationIssueFix({
86275                     icon: iconName,
86276                     title: t('issues.fix.' + fixTitleID + '.title'),
86277                     onClick: function(context) {
86278                         var mode = context.mode();
86279                         if (!mode || mode.id !== 'select') { return; }
86280
86281                         var selectedIDs = mode.selectedIDs();
86282                         if (selectedIDs.length !== 1) { return; }
86283
86284                         var selectedWayID = selectedIDs[0];
86285                         if (!context.hasEntity(selectedWayID)) { return; }
86286
86287                         var resultWayIDs = [selectedWayID];
86288
86289                         var edge, crossedEdge, crossedWayID;
86290                         if (this.issue.entityIds[0] === selectedWayID) {
86291                             edge = this.issue.data.edges[0];
86292                             crossedEdge = this.issue.data.edges[1];
86293                             crossedWayID = this.issue.entityIds[1];
86294                         } else {
86295                             edge = this.issue.data.edges[1];
86296                             crossedEdge = this.issue.data.edges[0];
86297                             crossedWayID = this.issue.entityIds[0];
86298                         }
86299
86300                         var crossingLoc = this.issue.loc;
86301
86302                         var projection = context.projection;
86303
86304                         var action = function actionAddStructure(graph) {
86305
86306                             var edgeNodes = [graph.entity(edge[0]), graph.entity(edge[1])];
86307
86308                             var crossedWay = graph.hasEntity(crossedWayID);
86309                             // use the explicit width of the crossed feature as the structure length, if available
86310                             var structLengthMeters = crossedWay && crossedWay.tags.width && parseFloat(crossedWay.tags.width);
86311                             if (!structLengthMeters) {
86312                                 // if no explicit width is set, approximate the width based on the tags
86313                                 structLengthMeters = crossedWay && crossedWay.impliedLineWidthMeters();
86314                             }
86315                             if (structLengthMeters) {
86316                                 if (getFeatureTypeForTags(crossedWay.tags) === 'railway') {
86317                                     // bridges over railways are generally much longer than the rail bed itself, compensate
86318                                     structLengthMeters *= 2;
86319                                 }
86320                             } else {
86321                                 // should ideally never land here since all rail/water/road tags should have an implied width
86322                                 structLengthMeters = 8;
86323                             }
86324
86325                             var a1 = geoAngle(edgeNodes[0], edgeNodes[1], projection) + Math.PI;
86326                             var a2 = geoAngle(graph.entity(crossedEdge[0]), graph.entity(crossedEdge[1]), projection) + Math.PI;
86327                             var crossingAngle = Math.max(a1, a2) - Math.min(a1, a2);
86328                             if (crossingAngle > Math.PI) { crossingAngle -= Math.PI; }
86329                             // lengthen the structure to account for the angle of the crossing
86330                             structLengthMeters = ((structLengthMeters / 2) / Math.sin(crossingAngle)) * 2;
86331
86332                             // add padding since the structure must extend past the edges of the crossed feature
86333                             structLengthMeters += 4;
86334
86335                             // clamp the length to a reasonable range
86336                             structLengthMeters = Math.min(Math.max(structLengthMeters, 4), 50);
86337
86338                             function geomToProj(geoPoint) {
86339                                 return [
86340                                     geoLonToMeters(geoPoint[0], geoPoint[1]),
86341                                     geoLatToMeters(geoPoint[1])
86342                                 ];
86343                             }
86344                             function projToGeom(projPoint) {
86345                                 var lat = geoMetersToLat(projPoint[1]);
86346                                 return [
86347                                     geoMetersToLon(projPoint[0], lat),
86348                                     lat
86349                                 ];
86350                             }
86351
86352                             var projEdgeNode1 = geomToProj(edgeNodes[0].loc);
86353                             var projEdgeNode2 = geomToProj(edgeNodes[1].loc);
86354
86355                             var projectedAngle = geoVecAngle(projEdgeNode1, projEdgeNode2);
86356
86357                             var projectedCrossingLoc = geomToProj(crossingLoc);
86358                             var linearToSphericalMetersRatio = geoVecLength(projEdgeNode1, projEdgeNode2) /
86359                                 geoSphericalDistance(edgeNodes[0].loc, edgeNodes[1].loc);
86360
86361                             function locSphericalDistanceFromCrossingLoc(angle, distanceMeters) {
86362                                 var lengthSphericalMeters = distanceMeters * linearToSphericalMetersRatio;
86363                                 return projToGeom([
86364                                     projectedCrossingLoc[0] + Math.cos(angle) * lengthSphericalMeters,
86365                                     projectedCrossingLoc[1] + Math.sin(angle) * lengthSphericalMeters
86366                                 ]);
86367                             }
86368
86369                             var endpointLocGetter1 = function(lengthMeters) {
86370                                 return locSphericalDistanceFromCrossingLoc(projectedAngle, lengthMeters);
86371                             };
86372                             var endpointLocGetter2 = function(lengthMeters) {
86373                                 return locSphericalDistanceFromCrossingLoc(projectedAngle + Math.PI, lengthMeters);
86374                             };
86375
86376                             // avoid creating very short edges from splitting too close to another node
86377                             var minEdgeLengthMeters = 0.55;
86378
86379                             // decide where to bound the structure along the way, splitting as necessary
86380                             function determineEndpoint(edge, endNode, locGetter) {
86381                                 var newNode;
86382
86383                                 var idealLengthMeters = structLengthMeters / 2;
86384
86385                                 // distance between the crossing location and the end of the edge,
86386                                 // the maximum length of this side of the structure
86387                                 var crossingToEdgeEndDistance = geoSphericalDistance(crossingLoc, endNode.loc);
86388
86389                                 if (crossingToEdgeEndDistance - idealLengthMeters > minEdgeLengthMeters) {
86390                                     // the edge is long enough to insert a new node
86391
86392                                     // the loc that would result in the full expected length
86393                                     var idealNodeLoc = locGetter(idealLengthMeters);
86394
86395                                     newNode = osmNode();
86396                                     graph = actionAddMidpoint({ loc: idealNodeLoc, edge: edge }, newNode)(graph);
86397
86398                                 } else {
86399                                     var edgeCount = 0;
86400                                     endNode.parentIntersectionWays(graph).forEach(function(way) {
86401                                         way.nodes.forEach(function(nodeID) {
86402                                             if (nodeID === endNode.id) {
86403                                                 if ((endNode.id === way.first() && endNode.id !== way.last()) ||
86404                                                     (endNode.id === way.last() && endNode.id !== way.first())) {
86405                                                     edgeCount += 1;
86406                                                 } else {
86407                                                     edgeCount += 2;
86408                                                 }
86409                                             }
86410                                         });
86411                                     });
86412
86413                                     if (edgeCount >= 3) {
86414                                         // the end node is a junction, try to leave a segment
86415                                         // between it and the structure - #7202
86416
86417                                         var insetLength = crossingToEdgeEndDistance - minEdgeLengthMeters;
86418                                         if (insetLength > minEdgeLengthMeters) {
86419                                             var insetNodeLoc = locGetter(insetLength);
86420                                             newNode = osmNode();
86421                                             graph = actionAddMidpoint({ loc: insetNodeLoc, edge: edge }, newNode)(graph);
86422                                         }
86423                                     }
86424                                 }
86425
86426                                 // if the edge is too short to subdivide as desired, then
86427                                 // just bound the structure at the existing end node
86428                                 if (!newNode) { newNode = endNode; }
86429
86430                                 var splitAction = actionSplit(newNode.id)
86431                                     .limitWays(resultWayIDs); // only split selected or created ways
86432
86433                                 // do the split
86434                                 graph = splitAction(graph);
86435                                 if (splitAction.getCreatedWayIDs().length) {
86436                                     resultWayIDs.push(splitAction.getCreatedWayIDs()[0]);
86437                                 }
86438
86439                                 return newNode;
86440                             }
86441
86442                             var structEndNode1 = determineEndpoint(edge, edgeNodes[1], endpointLocGetter1);
86443                             var structEndNode2 = determineEndpoint([edgeNodes[0].id, structEndNode1.id], edgeNodes[0], endpointLocGetter2);
86444
86445                             var structureWay = resultWayIDs.map(function(id) {
86446                                 return graph.entity(id);
86447                             }).find(function(way) {
86448                                 return way.nodes.indexOf(structEndNode1.id) !== -1 &&
86449                                     way.nodes.indexOf(structEndNode2.id) !== -1;
86450                             });
86451
86452                             var tags = Object.assign({}, structureWay.tags); // copy tags
86453                             if (bridgeOrTunnel === 'bridge'){
86454                                 tags.bridge = 'yes';
86455                                 tags.layer = '1';
86456                             } else {
86457                                 var tunnelValue = 'yes';
86458                                 if (getFeatureTypeForTags(tags) === 'waterway') {
86459                                     // use `tunnel=culvert` for waterways by default
86460                                     tunnelValue = 'culvert';
86461                                 }
86462                                 tags.tunnel = tunnelValue;
86463                                 tags.layer = '-1';
86464                             }
86465                             // apply the structure tags to the way
86466                             graph = actionChangeTags(structureWay.id, tags)(graph);
86467                             return graph;
86468                         };
86469
86470                         context.perform(action, t('issues.fix.' + fixTitleID + '.annotation'));
86471                         context.enter(modeSelect(context, resultWayIDs));
86472                     }
86473                 });
86474             }
86475
86476
86477
86478             function makeConnectWaysFix(connectionTags) {
86479
86480                 var fixTitleID = 'connect_features';
86481                 if (connectionTags.ford) {
86482                     fixTitleID = 'connect_using_ford';
86483                 }
86484
86485                 return new validationIssueFix({
86486                     icon: 'iD-icon-crossing',
86487                     title: t('issues.fix.' + fixTitleID + '.title'),
86488                     onClick: function(context) {
86489                         var loc = this.issue.loc;
86490                         var connectionTags = this.issue.data.connectionTags;
86491                         var edges = this.issue.data.edges;
86492
86493                         context.perform(
86494                             function actionConnectCrossingWays(graph) {
86495                                 // create the new node for the points
86496                                 var node = osmNode({ loc: loc, tags: connectionTags });
86497                                 graph = graph.replace(node);
86498
86499                                 var nodesToMerge = [node.id];
86500                                 var mergeThresholdInMeters = 0.75;
86501
86502                                 edges.forEach(function(edge) {
86503                                     var edgeNodes = [graph.entity(edge[0]), graph.entity(edge[1])];
86504                                     var closestNodeInfo = geoSphericalClosestNode(edgeNodes, loc);
86505                                     // if there is already a point nearby, use that
86506                                     if (closestNodeInfo.distance < mergeThresholdInMeters) {
86507                                         nodesToMerge.push(closestNodeInfo.node.id);
86508                                     // else add the new node to the way
86509                                     } else {
86510                                         graph = actionAddMidpoint({loc: loc, edge: edge}, node)(graph);
86511                                     }
86512                                 });
86513
86514                                 if (nodesToMerge.length > 1) {
86515                                     // if we're using nearby nodes, merge them with the new node
86516                                     graph = actionMergeNodes(nodesToMerge, loc)(graph);
86517                                 }
86518
86519                                 return graph;
86520                             },
86521                             t('issues.fix.connect_crossing_features.annotation')
86522                         );
86523                     }
86524                 });
86525             }
86526
86527             function makeChangeLayerFix(higherOrLower) {
86528                 return new validationIssueFix({
86529                     icon: 'iD-icon-' + (higherOrLower === 'higher' ? 'up' : 'down'),
86530                     title: t('issues.fix.tag_this_as_' + higherOrLower + '.title'),
86531                     onClick: function(context) {
86532
86533                         var mode = context.mode();
86534                         if (!mode || mode.id !== 'select') { return; }
86535
86536                         var selectedIDs = mode.selectedIDs();
86537                         if (selectedIDs.length !== 1) { return; }
86538
86539                         var selectedID = selectedIDs[0];
86540                         if (!this.issue.entityIds.some(function(entityId) {
86541                             return entityId === selectedID;
86542                         })) { return; }
86543
86544                         var entity = context.hasEntity(selectedID);
86545                         if (!entity) { return; }
86546
86547                         var tags = Object.assign({}, entity.tags);   // shallow copy
86548                         var layer = tags.layer && Number(tags.layer);
86549                         if (layer && !isNaN(layer)) {
86550                             if (higherOrLower === 'higher') {
86551                                 layer += 1;
86552                             } else {
86553                                 layer -= 1;
86554                             }
86555                         } else {
86556                             if (higherOrLower === 'higher') {
86557                                 layer = 1;
86558                             } else {
86559                                 layer = -1;
86560                             }
86561                         }
86562                         tags.layer = layer.toString();
86563                         context.perform(
86564                             actionChangeTags(entity.id, tags),
86565                             t('operations.change_tags.annotation')
86566                         );
86567                     }
86568                 });
86569             }
86570
86571             validation.type = type;
86572
86573             return validation;
86574         }
86575
86576         function validationDisconnectedWay() {
86577             var type = 'disconnected_way';
86578
86579             function isTaggedAsHighway(entity) {
86580                 return osmRoutableHighwayTagValues[entity.tags.highway];
86581             }
86582
86583             var validation = function checkDisconnectedWay(entity, graph) {
86584
86585                 var routingIslandWays = routingIslandForEntity(entity);
86586                 if (!routingIslandWays) { return []; }
86587
86588                 return [new validationIssue({
86589                     type: type,
86590                     subtype: 'highway',
86591                     severity: 'warning',
86592                     message: function(context) {
86593                         if (this.entityIds.length === 1) {
86594                             var entity = context.hasEntity(this.entityIds[0]);
86595                             return entity ? t('issues.disconnected_way.highway.message', { highway: utilDisplayLabel(entity, context) }) : '';
86596                         }
86597                         return t('issues.disconnected_way.routable.message.multiple', { count: this.entityIds.length.toString() });
86598                     },
86599                     reference: showReference,
86600                     entityIds: Array.from(routingIslandWays).map(function(way) { return way.id; }),
86601                     dynamicFixes: makeFixes
86602                 })];
86603
86604
86605                 function makeFixes(context) {
86606
86607                     var fixes = [];
86608
86609                     var singleEntity = this.entityIds.length === 1 && context.hasEntity(this.entityIds[0]);
86610
86611                     if (singleEntity) {
86612
86613                         if (singleEntity.type === 'way' && !singleEntity.isClosed()) {
86614
86615                             var startFix = makeContinueDrawingFixIfAllowed(singleEntity.first(), 'start');
86616                             if (startFix) { fixes.push(startFix); }
86617
86618                             var endFix = makeContinueDrawingFixIfAllowed(singleEntity.last(), 'end');
86619                             if (endFix) { fixes.push(endFix); }
86620                         }
86621                         if (!fixes.length) {
86622                             fixes.push(new validationIssueFix({
86623                                 title: t('issues.fix.connect_feature.title')
86624                             }));
86625                         }
86626
86627                         fixes.push(new validationIssueFix({
86628                             icon: 'iD-operation-delete',
86629                             title: t('issues.fix.delete_feature.title'),
86630                             entityIds: [singleEntity.id],
86631                             onClick: function(context) {
86632                                 var id = this.issue.entityIds[0];
86633                                 var operation = operationDelete([id], context);
86634                                 if (!operation.disabled()) {
86635                                     operation();
86636                                 }
86637                             }
86638                         }));
86639                     } else {
86640                         fixes.push(new validationIssueFix({
86641                             title: t('issues.fix.connect_features.title')
86642                         }));
86643                     }
86644
86645                     return fixes;
86646                 }
86647
86648
86649                 function showReference(selection) {
86650                     selection.selectAll('.issue-reference')
86651                         .data([0])
86652                         .enter()
86653                         .append('div')
86654                         .attr('class', 'issue-reference')
86655                         .text(t('issues.disconnected_way.routable.reference'));
86656                 }
86657
86658                 function routingIslandForEntity(entity) {
86659
86660                     var routingIsland = new Set();  // the interconnected routable features
86661                     var waysToCheck = [];           // the queue of remaining routable ways to traverse
86662
86663                     function queueParentWays(node) {
86664                         graph.parentWays(node).forEach(function(parentWay) {
86665                             if (!routingIsland.has(parentWay) &&    // only check each feature once
86666                                 isRoutableWay(parentWay, false)) {  // only check routable features
86667                                 routingIsland.add(parentWay);
86668                                 waysToCheck.push(parentWay);
86669                             }
86670                         });
86671                     }
86672
86673                     if (entity.type === 'way' && isRoutableWay(entity, true)) {
86674
86675                         routingIsland.add(entity);
86676                         waysToCheck.push(entity);
86677
86678                     } else if (entity.type === 'node' && isRoutableNode(entity)) {
86679
86680                         routingIsland.add(entity);
86681                         queueParentWays(entity);
86682
86683                     } else {
86684                         // this feature isn't routable, cannot be a routing island
86685                         return null;
86686                     }
86687
86688                     while (waysToCheck.length) {
86689                         var wayToCheck = waysToCheck.pop();
86690                         var childNodes = graph.childNodes(wayToCheck);
86691                         for (var i in childNodes) {
86692                             var vertex = childNodes[i];
86693
86694                             if (isConnectedVertex(vertex)) {
86695                                 // found a link to the wider network, not a routing island
86696                                 return null;
86697                             }
86698
86699                             if (isRoutableNode(vertex)) {
86700                                 routingIsland.add(vertex);
86701                             }
86702
86703                             queueParentWays(vertex);
86704                         }
86705                     }
86706
86707                     // no network link found, this is a routing island, return its members
86708                     return routingIsland;
86709                 }
86710
86711                 function isConnectedVertex(vertex) {
86712                     // assume ways overlapping unloaded tiles are connected to the wider road network  - #5938
86713                     var osm = services$1.osm;
86714                     if (osm && !osm.isDataLoaded(vertex.loc)) { return true; }
86715
86716                     // entrances are considered connected
86717                     if (vertex.tags.entrance &&
86718                         vertex.tags.entrance !== 'no') { return true; }
86719                     if (vertex.tags.amenity === 'parking_entrance') { return true; }
86720
86721                     return false;
86722                 }
86723
86724                 function isRoutableNode(node) {
86725                     // treat elevators as distinct features in the highway network
86726                     if (node.tags.highway === 'elevator') { return true; }
86727                     return false;
86728                 }
86729
86730                 function isRoutableWay(way, ignoreInnerWays) {
86731                     if (isTaggedAsHighway(way) || way.tags.route === 'ferry') { return true; }
86732
86733                     return graph.parentRelations(way).some(function(parentRelation) {
86734                         if (parentRelation.tags.type === 'route' &&
86735                             parentRelation.tags.route === 'ferry') { return true; }
86736
86737                         if (parentRelation.isMultipolygon() &&
86738                             isTaggedAsHighway(parentRelation) &&
86739                             (!ignoreInnerWays || parentRelation.memberById(way.id).role !== 'inner')) { return true; }
86740                     });
86741                 }
86742
86743                 function makeContinueDrawingFixIfAllowed(vertexID, whichEnd) {
86744                     var vertex = graph.hasEntity(vertexID);
86745                     if (!vertex || vertex.tags.noexit === 'yes') { return null; }
86746
86747                     var useLeftContinue = (whichEnd === 'start' && textDirection === 'ltr') ||
86748                         (whichEnd === 'end' && textDirection === 'rtl');
86749
86750                     return new validationIssueFix({
86751                         icon: 'iD-operation-continue' + (useLeftContinue ? '-left' : ''),
86752                         title: t('issues.fix.continue_from_' + whichEnd + '.title'),
86753                         entityIds: [vertexID],
86754                         onClick: function(context) {
86755                             var wayId = this.issue.entityIds[0];
86756                             var way = context.hasEntity(wayId);
86757                             var vertexId = this.entityIds[0];
86758                             var vertex = context.hasEntity(vertexId);
86759
86760                             if (!way || !vertex) { return; }
86761
86762                             // make sure the vertex is actually visible and editable
86763                             var map = context.map();
86764                             if (!context.editable() || !map.trimmedExtent().contains(vertex.loc)) {
86765                                 map.zoomToEase(vertex);
86766                             }
86767
86768                             context.enter(
86769                                 modeDrawLine(context, wayId, context.graph(), context.graph(), 'line', way.affix(vertexId), true)
86770                             );
86771                         }
86772                     });
86773                 }
86774
86775             };
86776
86777             validation.type = type;
86778
86779             return validation;
86780         }
86781
86782         function validationFormatting() {
86783             var type = 'invalid_format';
86784
86785             var validation = function(entity) {
86786                 var issues = [];
86787
86788                 function isValidEmail(email) {
86789                     // Emails in OSM are going to be official so they should be pretty simple
86790                     // Using negated lists to better support all possible unicode characters (#6494)
86791                     var valid_email = /^[^\(\)\\,":;<>@\[\]]+@[^\(\)\\,":;<>@\[\]\.]+(?:\.[a-z0-9-]+)*$/i;
86792
86793                     // An empty value is also acceptable
86794                     return (!email || valid_email.test(email));
86795                 }
86796                 /*
86797                 function isSchemePresent(url) {
86798                     var valid_scheme = /^https?:\/\//i;
86799                     return (!url || valid_scheme.test(url));
86800                 }
86801                 */
86802                 function showReferenceEmail(selection) {
86803                     selection.selectAll('.issue-reference')
86804                         .data([0])
86805                         .enter()
86806                         .append('div')
86807                         .attr('class', 'issue-reference')
86808                         .text(t('issues.invalid_format.email.reference'));
86809                 }
86810                 /*
86811                 function showReferenceWebsite(selection) {
86812                     selection.selectAll('.issue-reference')
86813                         .data([0])
86814                         .enter()
86815                         .append('div')
86816                         .attr('class', 'issue-reference')
86817                         .text(t('issues.invalid_format.website.reference'));
86818                 }
86819
86820                 if (entity.tags.website) {
86821                     // Multiple websites are possible
86822                     // If ever we support ES6, arrow functions make this nicer
86823                     var websites = entity.tags.website
86824                         .split(';')
86825                         .map(function(s) { return s.trim(); })
86826                         .filter(function(x) { return !isSchemePresent(x); });
86827
86828                     if (websites.length) {
86829                         issues.push(new validationIssue({
86830                             type: type,
86831                             subtype: 'website',
86832                             severity: 'warning',
86833                             message: function(context) {
86834                                 var entity = context.hasEntity(this.entityIds[0]);
86835                                 return entity ? t('issues.invalid_format.website.message' + this.data,
86836                                     { feature: utilDisplayLabel(entity, context), site: websites.join(', ') }) : '';
86837                             },
86838                             reference: showReferenceWebsite,
86839                             entityIds: [entity.id],
86840                             hash: websites.join(),
86841                             data: (websites.length > 1) ? '_multi' : ''
86842                         }));
86843                     }
86844                 }
86845                 */
86846                 if (entity.tags.email) {
86847                     // Multiple emails are possible
86848                     var emails = entity.tags.email
86849                         .split(';')
86850                         .map(function(s) { return s.trim(); })
86851                         .filter(function(x) { return !isValidEmail(x); });
86852
86853                     if (emails.length) {
86854                         issues.push(new validationIssue({
86855                             type: type,
86856                             subtype: 'email',
86857                             severity: 'warning',
86858                             message: function(context) {
86859                                 var entity = context.hasEntity(this.entityIds[0]);
86860                                 return entity ? t('issues.invalid_format.email.message' + this.data,
86861                                     { feature: utilDisplayLabel(entity, context), email: emails.join(', ') }) : '';
86862                             },
86863                             reference: showReferenceEmail,
86864                             entityIds: [entity.id],
86865                             hash: emails.join(),
86866                             data: (emails.length > 1) ? '_multi' : ''
86867                         }));
86868                     }
86869                 }
86870
86871                 return issues;
86872             };
86873
86874             validation.type = type;
86875
86876             return validation;
86877         }
86878
86879         function validationHelpRequest(context) {
86880             var type = 'help_request';
86881
86882             var validation = function checkFixmeTag(entity) {
86883
86884                 if (!entity.tags.fixme) { return []; }
86885
86886                 // don't flag fixmes on features added by the user
86887                 if (entity.version === undefined) { return []; }
86888
86889                 if (entity.v !== undefined) {
86890                     var baseEntity = context.history().base().hasEntity(entity.id);
86891                     // don't flag fixmes added by the user on existing features
86892                     if (!baseEntity || !baseEntity.tags.fixme) { return []; }
86893                 }
86894
86895                 return [new validationIssue({
86896                     type: type,
86897                     subtype: 'fixme_tag',
86898                     severity: 'warning',
86899                     message: function(context) {
86900                         var entity = context.hasEntity(this.entityIds[0]);
86901                         return entity ? t('issues.fixme_tag.message', { feature: utilDisplayLabel(entity, context) }) : '';
86902                     },
86903                     dynamicFixes: function() {
86904                         return [
86905                             new validationIssueFix({
86906                                 title: t('issues.fix.address_the_concern.title')
86907                             })
86908                         ];
86909                     },
86910                     reference: showReference,
86911                     entityIds: [entity.id]
86912                 })];
86913
86914                 function showReference(selection) {
86915                     selection.selectAll('.issue-reference')
86916                         .data([0])
86917                         .enter()
86918                         .append('div')
86919                         .attr('class', 'issue-reference')
86920                         .text(t('issues.fixme_tag.reference'));
86921                 }
86922             };
86923
86924             validation.type = type;
86925
86926             return validation;
86927         }
86928
86929         function validationImpossibleOneway() {
86930             var type = 'impossible_oneway';
86931
86932             var validation = function checkImpossibleOneway(entity, graph) {
86933
86934                 if (entity.type !== 'way' || entity.geometry(graph) !== 'line') { return []; }
86935
86936                 if (entity.isClosed()) { return []; }
86937
86938                 if (!typeForWay(entity)) { return []; }
86939
86940                 if (!isOneway(entity)) { return []; }
86941
86942                 var firstIssues = issuesForNode(entity, entity.first());
86943                 var lastIssues = issuesForNode(entity, entity.last());
86944
86945                 return firstIssues.concat(lastIssues);
86946
86947                 function typeForWay(way) {
86948                     if (way.geometry(graph) !== 'line') { return null; }
86949
86950                     if (osmRoutableHighwayTagValues[way.tags.highway]) { return 'highway'; }
86951                     if (osmFlowingWaterwayTagValues[way.tags.waterway]) { return 'waterway'; }
86952                     return null;
86953                 }
86954
86955                 function isOneway(way) {
86956                     if (way.tags.oneway === 'yes') { return true; }
86957                     if (way.tags.oneway) { return false; }
86958
86959                     for (var key in way.tags) {
86960                         if (osmOneWayTags[key] && osmOneWayTags[key][way.tags[key]]) {
86961                             return true;
86962                         }
86963                     }
86964                     return false;
86965                 }
86966
86967                 function nodeOccursMoreThanOnce(way, nodeID) {
86968                     var occurences = 0;
86969                     for (var index in way.nodes) {
86970                         if (way.nodes[index] === nodeID) {
86971                             occurences += 1;
86972                             if (occurences > 1) { return true; }
86973                         }
86974                     }
86975                     return false;
86976                 }
86977
86978                 function isConnectedViaOtherTypes(way, node) {
86979
86980                     var wayType = typeForWay(way);
86981
86982                     if (wayType === 'highway') {
86983                         // entrances are considered connected
86984                         if (node.tags.entrance && node.tags.entrance !== 'no') { return true; }
86985                         if (node.tags.amenity === 'parking_entrance') { return true; }
86986                     } else if (wayType === 'waterway') {
86987                         if (node.id === way.first()) {
86988                             // multiple waterways may start at the same spring
86989                             if (node.tags.natural === 'spring') { return true; }
86990                         } else {
86991                             // multiple waterways may end at the same drain
86992                             if (node.tags.manhole === 'drain') { return true; }
86993                         }
86994                     }
86995
86996                     return graph.parentWays(node).some(function(parentWay) {
86997                         if (parentWay.id === way.id) { return false; }
86998
86999                         if (wayType === 'highway') {
87000
87001                             // allow connections to highway areas
87002                             if (parentWay.geometry(graph) === 'area' &&
87003                                 osmRoutableHighwayTagValues[parentWay.tags.highway]) { return true; }
87004
87005                             // count connections to ferry routes as connected
87006                             if (parentWay.tags.route === 'ferry') { return true; }
87007
87008                             return graph.parentRelations(parentWay).some(function(parentRelation) {
87009                                 if (parentRelation.tags.type === 'route' &&
87010                                     parentRelation.tags.route === 'ferry') { return true; }
87011
87012                                 // allow connections to highway multipolygons
87013                                 return parentRelation.isMultipolygon() && osmRoutableHighwayTagValues[parentRelation.tags.highway];
87014                             });
87015                         } else if (wayType === 'waterway') {
87016                             // multiple waterways may start or end at a water body at the same node
87017                             if (parentWay.tags.natural === 'water' ||
87018                                 parentWay.tags.natural === 'coastline') { return true; }
87019                         }
87020                         return false;
87021                     });
87022                 }
87023
87024                 function issuesForNode(way, nodeID) {
87025
87026                     var isFirst = nodeID === way.first();
87027
87028                     var wayType = typeForWay(way);
87029
87030                     // ignore if this way is self-connected at this node
87031                     if (nodeOccursMoreThanOnce(way, nodeID)) { return []; }
87032
87033                     var osm = services$1.osm;
87034                     if (!osm) { return []; }
87035
87036                     var node = graph.hasEntity(nodeID);
87037
87038                     // ignore if this node or its tile are unloaded
87039                     if (!node || !osm.isDataLoaded(node.loc)) { return []; }
87040
87041                     if (isConnectedViaOtherTypes(way, node)) { return []; }
87042
87043                     var attachedWaysOfSameType = graph.parentWays(node).filter(function(parentWay) {
87044                         if (parentWay.id === way.id) { return false; }
87045                         return typeForWay(parentWay) === wayType;
87046                     });
87047
87048                     // assume it's okay for waterways to start or end disconnected for now
87049                     if (wayType === 'waterway' && attachedWaysOfSameType.length === 0) { return []; }
87050
87051                     var attachedOneways = attachedWaysOfSameType.filter(function(attachedWay) {
87052                         return isOneway(attachedWay);
87053                     });
87054
87055                     // ignore if the way is connected to some non-oneway features
87056                     if (attachedOneways.length < attachedWaysOfSameType.length) { return []; }
87057
87058                     if (attachedOneways.length) {
87059                         var connectedEndpointsOkay = attachedOneways.some(function(attachedOneway) {
87060                             if ((isFirst ? attachedOneway.first() : attachedOneway.last()) !== nodeID) { return true; }
87061                             if (nodeOccursMoreThanOnce(attachedOneway, nodeID)) { return true; }
87062                             return false;
87063                         });
87064                         if (connectedEndpointsOkay) { return []; }
87065                     }
87066
87067                     var placement = isFirst ? 'start' : 'end',
87068                         messageID = wayType + '.',
87069                         referenceID = wayType + '.';
87070
87071                     if (wayType === 'waterway') {
87072                         messageID += 'connected.' + placement;
87073                         referenceID += 'connected';
87074                     } else {
87075                         messageID += placement;
87076                         referenceID += placement;
87077                     }
87078
87079                     return [new validationIssue({
87080                         type: type,
87081                         subtype: wayType,
87082                         severity: 'warning',
87083                         message: function(context) {
87084                             var entity = context.hasEntity(this.entityIds[0]);
87085                             return entity ? t('issues.impossible_oneway.' + messageID + '.message', {
87086                                 feature: utilDisplayLabel(entity, context)
87087                             }) : '';
87088                         },
87089                         reference: getReference(referenceID),
87090                         entityIds: [way.id, node.id],
87091                         dynamicFixes: function() {
87092
87093                             var fixes = [];
87094
87095                             if (attachedOneways.length) {
87096                                 fixes.push(new validationIssueFix({
87097                                     icon: 'iD-operation-reverse',
87098                                     title: t('issues.fix.reverse_feature.title'),
87099                                     entityIds: [way.id],
87100                                     onClick: function(context) {
87101                                         var id = this.issue.entityIds[0];
87102                                         context.perform(actionReverse(id), t('operations.reverse.annotation'));
87103                                     }
87104                                 }));
87105                             }
87106                             if (node.tags.noexit !== 'yes') {
87107                                 var useLeftContinue = (isFirst && textDirection === 'ltr') ||
87108                                     (!isFirst && textDirection === 'rtl');
87109                                 fixes.push(new validationIssueFix({
87110                                     icon: 'iD-operation-continue' + (useLeftContinue ? '-left' : ''),
87111                                     title: t('issues.fix.continue_from_' + (isFirst ? 'start' : 'end') + '.title'),
87112                                     onClick: function(context) {
87113                                         var entityID = this.issue.entityIds[0];
87114                                         var vertexID = this.issue.entityIds[1];
87115                                         var way = context.entity(entityID);
87116                                         var vertex = context.entity(vertexID);
87117                                         continueDrawing(way, vertex, context);
87118                                     }
87119                                 }));
87120                             }
87121
87122                             return fixes;
87123                         },
87124                         loc: node.loc
87125                     })];
87126
87127                     function getReference(referenceID) {
87128                         return function showReference(selection) {
87129                             selection.selectAll('.issue-reference')
87130                                 .data([0])
87131                                 .enter()
87132                                 .append('div')
87133                                 .attr('class', 'issue-reference')
87134                                 .text(t('issues.impossible_oneway.' + referenceID + '.reference'));
87135                         };
87136                     }
87137                 }
87138             };
87139
87140             function continueDrawing(way, vertex, context) {
87141                 // make sure the vertex is actually visible and editable
87142                 var map = context.map();
87143                 if (!context.editable() || !map.trimmedExtent().contains(vertex.loc)) {
87144                     map.zoomToEase(vertex);
87145                 }
87146
87147                 context.enter(
87148                     modeDrawLine(context, way.id, context.graph(), context.graph(), 'line', way.affix(vertex.id), true)
87149                 );
87150             }
87151
87152             validation.type = type;
87153
87154             return validation;
87155         }
87156
87157         function validationIncompatibleSource() {
87158             var type = 'incompatible_source';
87159             var invalidSources = [
87160                 {
87161                     id:'google', regex:'google', exceptRegex: 'books.google|Google Books'
87162                 }
87163             ];
87164
87165             var validation = function checkIncompatibleSource(entity) {
87166
87167                 var entitySources = entity.tags && entity.tags.source && entity.tags.source.split(';');
87168
87169                 if (!entitySources) { return []; }
87170
87171                 var issues = [];
87172
87173                 invalidSources.forEach(function(invalidSource) {
87174
87175                     var hasInvalidSource = entitySources.some(function(source) {
87176                         if (!source.match(new RegExp(invalidSource.regex, 'i'))) { return false; }
87177                         if (invalidSource.exceptRegex && source.match(new RegExp(invalidSource.exceptRegex, 'i'))) { return false; }
87178                         return true;
87179                     });
87180
87181                     if (!hasInvalidSource) { return; }
87182
87183                     issues.push(new validationIssue({
87184                         type: type,
87185                         severity: 'warning',
87186                         message: function(context) {
87187                             var entity = context.hasEntity(this.entityIds[0]);
87188                             return entity ? t('issues.incompatible_source.' + invalidSource.id + '.feature.message', {
87189                                 feature: utilDisplayLabel(entity, context)
87190                             }) : '';
87191                         },
87192                         reference: getReference(invalidSource.id),
87193                         entityIds: [entity.id],
87194                         dynamicFixes: function() {
87195                             return [
87196                                 new validationIssueFix({
87197                                     title: t('issues.fix.remove_proprietary_data.title')
87198                                 })
87199                             ];
87200                         }
87201                     }));
87202                 });
87203
87204                 return issues;
87205
87206
87207                 function getReference(id) {
87208                     return function showReference(selection) {
87209                         selection.selectAll('.issue-reference')
87210                             .data([0])
87211                             .enter()
87212                             .append('div')
87213                             .attr('class', 'issue-reference')
87214                             .text(t('issues.incompatible_source.' + id + '.reference'));
87215                     };
87216                 }
87217             };
87218
87219             validation.type = type;
87220
87221             return validation;
87222         }
87223
87224         function validationMaprules() {
87225             var type = 'maprules';
87226
87227             var validation = function checkMaprules(entity, graph) {
87228                 if (!services$1.maprules) { return []; }
87229
87230                 var rules = services$1.maprules.validationRules();
87231                 var issues = [];
87232
87233                 for (var i = 0; i < rules.length; i++) {
87234                     var rule = rules[i];
87235                     rule.findIssues(entity, graph, issues);
87236                 }
87237
87238                 return issues;
87239             };
87240
87241
87242             validation.type = type;
87243
87244             return validation;
87245         }
87246
87247         function validationMismatchedGeometry(context) {
87248             var type = 'mismatched_geometry';
87249
87250             function tagSuggestingLineIsArea(entity) {
87251                 if (entity.type !== 'way' || entity.isClosed()) { return null; }
87252
87253                 var tagSuggestingArea = entity.tagSuggestingArea();
87254                 if (!tagSuggestingArea) {
87255                     return null;
87256                 }
87257
87258                 if (context.presets().matchTags(tagSuggestingArea, 'line') ===
87259                     context.presets().matchTags(tagSuggestingArea, 'area')) {
87260                     // these tags also allow lines and making this an area wouldn't matter
87261                     return null;
87262                 }
87263
87264                 return tagSuggestingArea;
87265             }
87266
87267             function makeConnectEndpointsFixOnClick(way, graph) {
87268                 // must have at least three nodes to close this automatically
87269                 if (way.nodes.length < 3) { return null; }
87270
87271                 var nodes = graph.childNodes(way), testNodes;
87272                 var firstToLastDistanceMeters = geoSphericalDistance(nodes[0].loc, nodes[nodes.length-1].loc);
87273
87274                 // if the distance is very small, attempt to merge the endpoints
87275                 if (firstToLastDistanceMeters < 0.75) {
87276                     testNodes = nodes.slice();   // shallow copy
87277                     testNodes.pop();
87278                     testNodes.push(testNodes[0]);
87279                     // make sure this will not create a self-intersection
87280                     if (!geoHasSelfIntersections(testNodes, testNodes[0].id)) {
87281                         return function(context) {
87282                             var way = context.entity(this.issue.entityIds[0]);
87283                             context.perform(
87284                                 actionMergeNodes([way.nodes[0], way.nodes[way.nodes.length-1]], nodes[0].loc),
87285                                 t('issues.fix.connect_endpoints.annotation')
87286                             );
87287                         };
87288                     }
87289                 }
87290
87291                 // if the points were not merged, attempt to close the way
87292                 testNodes = nodes.slice();   // shallow copy
87293                 testNodes.push(testNodes[0]);
87294                 // make sure this will not create a self-intersection
87295                 if (!geoHasSelfIntersections(testNodes, testNodes[0].id)) {
87296                     return function(context) {
87297                         var wayId = this.issue.entityIds[0];
87298                         var way = context.entity(wayId);
87299                         var nodeId = way.nodes[0];
87300                         var index = way.nodes.length;
87301                         context.perform(
87302                             actionAddVertex(wayId, nodeId, index),
87303                             t('issues.fix.connect_endpoints.annotation')
87304                         );
87305                     };
87306                 }
87307             }
87308
87309             function lineTaggedAsAreaIssue(entity) {
87310
87311                 var tagSuggestingArea = tagSuggestingLineIsArea(entity);
87312                 if (!tagSuggestingArea) { return null; }
87313
87314                 return new validationIssue({
87315                     type: type,
87316                     subtype: 'area_as_line',
87317                     severity: 'warning',
87318                     message: function(context) {
87319                         var entity = context.hasEntity(this.entityIds[0]);
87320                         return entity ? t('issues.tag_suggests_area.message', {
87321                             feature: utilDisplayLabel(entity, context),
87322                             tag: utilTagText({ tags: tagSuggestingArea })
87323                         }) : '';
87324                     },
87325                     reference: showReference,
87326                     entityIds: [entity.id],
87327                     hash: JSON.stringify(tagSuggestingArea),
87328                     dynamicFixes: function(context) {
87329
87330                         var fixes = [];
87331
87332                         var entity = context.entity(this.entityIds[0]);
87333                         var connectEndsOnClick = makeConnectEndpointsFixOnClick(entity, context.graph());
87334
87335                         fixes.push(new validationIssueFix({
87336                             title: t('issues.fix.connect_endpoints.title'),
87337                             onClick: connectEndsOnClick
87338                         }));
87339
87340                         fixes.push(new validationIssueFix({
87341                             icon: 'iD-operation-delete',
87342                             title: t('issues.fix.remove_tag.title'),
87343                             onClick: function(context) {
87344                                 var entityId = this.issue.entityIds[0];
87345                                 var entity = context.entity(entityId);
87346                                 var tags = Object.assign({}, entity.tags);  // shallow copy
87347                                 for (var key in tagSuggestingArea) {
87348                                     delete tags[key];
87349                                 }
87350                                 context.perform(
87351                                     actionChangeTags(entityId, tags),
87352                                     t('issues.fix.remove_tag.annotation')
87353                                 );
87354                             }
87355                         }));
87356
87357                         return fixes;
87358                     }
87359                 });
87360
87361
87362                 function showReference(selection) {
87363                     selection.selectAll('.issue-reference')
87364                         .data([0])
87365                         .enter()
87366                         .append('div')
87367                         .attr('class', 'issue-reference')
87368                         .text(t('issues.tag_suggests_area.reference'));
87369                 }
87370             }
87371
87372             function vertexTaggedAsPointIssue(entity, graph) {
87373                 // we only care about nodes
87374                 if (entity.type !== 'node') { return null; }
87375
87376                 // ignore tagless points
87377                 if (Object.keys(entity.tags).length === 0) { return null; }
87378
87379                 // address lines are special so just ignore them
87380                 if (entity.isOnAddressLine(graph)) { return null; }
87381
87382                 var geometry = entity.geometry(graph);
87383                 var allowedGeometries = osmNodeGeometriesForTags(entity.tags);
87384
87385                 if (geometry === 'point' && !allowedGeometries.point && allowedGeometries.vertex) {
87386
87387                     return new validationIssue({
87388                         type: type,
87389                         subtype: 'vertex_as_point',
87390                         severity: 'warning',
87391                         message: function(context) {
87392                             var entity = context.hasEntity(this.entityIds[0]);
87393                             return entity ? t('issues.vertex_as_point.message', {
87394                                 feature: utilDisplayLabel(entity, context)
87395                             }) : '';
87396                         },
87397                         reference: function showReference(selection) {
87398                             selection.selectAll('.issue-reference')
87399                                 .data([0])
87400                                 .enter()
87401                                 .append('div')
87402                                 .attr('class', 'issue-reference')
87403                                 .text(t('issues.vertex_as_point.reference'));
87404                         },
87405                         entityIds: [entity.id]
87406                     });
87407
87408                 } else if (geometry === 'vertex' && !allowedGeometries.vertex && allowedGeometries.point) {
87409
87410                     return new validationIssue({
87411                         type: type,
87412                         subtype: 'point_as_vertex',
87413                         severity: 'warning',
87414                         message: function(context) {
87415                             var entity = context.hasEntity(this.entityIds[0]);
87416                             return entity ? t('issues.point_as_vertex.message', {
87417                                 feature: utilDisplayLabel(entity, context)
87418                             }) : '';
87419                         },
87420                         reference: function showReference(selection) {
87421                             selection.selectAll('.issue-reference')
87422                                 .data([0])
87423                                 .enter()
87424                                 .append('div')
87425                                 .attr('class', 'issue-reference')
87426                                 .text(t('issues.point_as_vertex.reference'));
87427                         },
87428                         entityIds: [entity.id],
87429                         dynamicFixes: function(context) {
87430
87431                             var entityId = this.entityIds[0];
87432
87433                             var extractOnClick = null;
87434                             if (!context.hasHiddenConnections(entityId) &&
87435                                 !actionExtract(entityId, context.projection).disabled(context.graph())) {
87436
87437                                 extractOnClick = function(context) {
87438                                     var entityId = this.issue.entityIds[0];
87439                                     var action = actionExtract(entityId, context.projection);
87440                                     context.perform(
87441                                         action,
87442                                         t('operations.extract.annotation.single')
87443                                     );
87444                                     // re-enter mode to trigger updates
87445                                     context.enter(modeSelect(context, [action.getExtractedNodeID()]));
87446                                 };
87447                             }
87448
87449                             return [
87450                                 new validationIssueFix({
87451                                     icon: 'iD-operation-extract',
87452                                     title: t('issues.fix.extract_point.title'),
87453                                     onClick: extractOnClick
87454                                 })
87455                             ];
87456                         }
87457                     });
87458                 }
87459
87460                 return null;
87461             }
87462
87463             function unclosedMultipolygonPartIssues(entity, graph) {
87464
87465                 if (entity.type !== 'relation' ||
87466                     !entity.isMultipolygon() ||
87467                     entity.isDegenerate() ||
87468                     // cannot determine issues for incompletely-downloaded relations
87469                     !entity.isComplete(graph)) { return null; }
87470
87471                 var sequences = osmJoinWays(entity.members, graph);
87472
87473                 var issues = [];
87474
87475                 for (var i in sequences) {
87476                     var sequence = sequences[i];
87477
87478                     if (!sequence.nodes) { continue; }
87479
87480                     var firstNode = sequence.nodes[0];
87481                     var lastNode = sequence.nodes[sequence.nodes.length - 1];
87482
87483                     // part is closed if the first and last nodes are the same
87484                     if (firstNode === lastNode) { continue; }
87485
87486                     var issue = new validationIssue({
87487                         type: type,
87488                         subtype: 'unclosed_multipolygon_part',
87489                         severity: 'warning',
87490                         message: function(context) {
87491                             var entity = context.hasEntity(this.entityIds[0]);
87492                             return entity ? t('issues.unclosed_multipolygon_part.message', {
87493                                 feature: utilDisplayLabel(entity, context)
87494                             }) : '';
87495                         },
87496                         reference: showReference,
87497                         loc: sequence.nodes[0].loc,
87498                         entityIds: [entity.id],
87499                         hash: sequence.map(function(way) {
87500                             return way.id;
87501                         }).join()
87502                     });
87503                     issues.push(issue);
87504                 }
87505
87506                 return issues;
87507
87508                 function showReference(selection) {
87509                     selection.selectAll('.issue-reference')
87510                         .data([0])
87511                         .enter()
87512                         .append('div')
87513                         .attr('class', 'issue-reference')
87514                         .text(t('issues.unclosed_multipolygon_part.reference'));
87515                 }
87516             }
87517
87518             var validation = function checkMismatchedGeometry(entity, graph) {
87519                 var issues = [
87520                     vertexTaggedAsPointIssue(entity, graph),
87521                     lineTaggedAsAreaIssue(entity)
87522                 ];
87523                 issues = issues.concat(unclosedMultipolygonPartIssues(entity, graph));
87524                 return issues.filter(Boolean);
87525             };
87526
87527             validation.type = type;
87528
87529             return validation;
87530         }
87531
87532         function validationMissingRole() {
87533             var type = 'missing_role';
87534
87535             var validation = function checkMissingRole(entity, graph) {
87536                 var issues = [];
87537                 if (entity.type === 'way') {
87538                     graph.parentRelations(entity).forEach(function(relation) {
87539                         if (!relation.isMultipolygon()) { return; }
87540
87541                         var member = relation.memberById(entity.id);
87542                         if (member && isMissingRole(member)) {
87543                             issues.push(makeIssue(entity, relation, member));
87544                         }
87545                     });
87546                 } else if (entity.type === 'relation' && entity.isMultipolygon()) {
87547                     entity.indexedMembers().forEach(function(member) {
87548                         var way = graph.hasEntity(member.id);
87549                         if (way && isMissingRole(member)) {
87550                             issues.push(makeIssue(way, entity, member));
87551                         }
87552                     });
87553                 }
87554
87555                 return issues;
87556             };
87557
87558
87559             function isMissingRole(member) {
87560                 return !member.role || !member.role.trim().length;
87561             }
87562
87563
87564             function makeIssue(way, relation, member) {
87565                 return new validationIssue({
87566                     type: type,
87567                     severity: 'warning',
87568                     message: function(context) {
87569                         var member = context.hasEntity(this.entityIds[1]),
87570                             relation = context.hasEntity(this.entityIds[0]);
87571                         return (member && relation) ? t('issues.missing_role.message', {
87572                             member: utilDisplayLabel(member, context),
87573                             relation: utilDisplayLabel(relation, context)
87574                         }) : '';
87575                     },
87576                     reference: showReference,
87577                     entityIds: [relation.id, way.id],
87578                     data: {
87579                         member: member
87580                     },
87581                     hash: member.index.toString(),
87582                     dynamicFixes: function() {
87583                         return [
87584                             makeAddRoleFix('inner'),
87585                             makeAddRoleFix('outer'),
87586                             new validationIssueFix({
87587                                 icon: 'iD-operation-delete',
87588                                 title: t('issues.fix.remove_from_relation.title'),
87589                                 onClick: function(context) {
87590                                     context.perform(
87591                                         actionDeleteMember(this.issue.entityIds[0], this.issue.data.member.index),
87592                                         t('operations.delete_member.annotation')
87593                                     );
87594                                 }
87595                             })
87596                         ];
87597                     }
87598                 });
87599
87600
87601                 function showReference(selection) {
87602                     selection.selectAll('.issue-reference')
87603                         .data([0])
87604                         .enter()
87605                         .append('div')
87606                         .attr('class', 'issue-reference')
87607                         .text(t('issues.missing_role.multipolygon.reference'));
87608                 }
87609             }
87610
87611
87612             function makeAddRoleFix(role) {
87613                 return new validationIssueFix({
87614                     title: t('issues.fix.set_as_' + role + '.title'),
87615                     onClick: function(context) {
87616                         var oldMember = this.issue.data.member;
87617                         var member = { id: this.issue.entityIds[1], type: oldMember.type, role: role };
87618                         context.perform(
87619                             actionChangeMember(this.issue.entityIds[0], member, oldMember.index),
87620                             t('operations.change_role.annotation')
87621                         );
87622                     }
87623                 });
87624             }
87625
87626             validation.type = type;
87627
87628             return validation;
87629         }
87630
87631         function validationMissingTag(context) {
87632             var type = 'missing_tag';
87633
87634             function hasDescriptiveTags(entity, graph) {
87635                 var keys = Object.keys(entity.tags)
87636                     .filter(function(k) {
87637                         if (k === 'area' || k === 'name') {
87638                             return false;
87639                         } else {
87640                             return osmIsInterestingTag(k);
87641                         }
87642                     });
87643
87644                 if (entity.type === 'relation' &&
87645                     keys.length === 1 &&
87646                     entity.tags.type === 'multipolygon') {
87647                     // this relation's only interesting tag just says its a multipolygon,
87648                     // which is not descriptive enough
87649
87650                     // It's okay for a simple multipolygon to have no descriptive tags
87651                     // if its outer way has them (old model, see `outdated_tags.js`)
87652                     return osmOldMultipolygonOuterMemberOfRelation(entity, graph);
87653                 }
87654
87655                 return keys.length > 0;
87656             }
87657
87658             function isUnknownRoad(entity) {
87659                 return entity.type === 'way' && entity.tags.highway === 'road';
87660             }
87661
87662             function isUntypedRelation(entity) {
87663                 return entity.type === 'relation' && !entity.tags.type;
87664             }
87665
87666             var validation = function checkMissingTag(entity, graph) {
87667
87668                 var subtype;
87669
87670                 var osm = context.connection();
87671                 var isUnloadedNode = entity.type === 'node' && osm && !osm.isDataLoaded(entity.loc);
87672
87673                 // we can't know if the node is a vertex if the tile is undownloaded
87674                 if (!isUnloadedNode &&
87675                     // allow untagged nodes that are part of ways
87676                     entity.geometry(graph) !== 'vertex' &&
87677                     // allow untagged entities that are part of relations
87678                     !entity.hasParentRelations(graph)) {
87679
87680                     if (Object.keys(entity.tags).length === 0) {
87681                         subtype = 'any';
87682                     } else if (!hasDescriptiveTags(entity, graph)) {
87683                         subtype = 'descriptive';
87684                     } else if (isUntypedRelation(entity)) {
87685                         subtype = 'relation_type';
87686                     }
87687                 }
87688
87689                 // flag an unknown road even if it's a member of a relation
87690                 if (!subtype && isUnknownRoad(entity)) {
87691                     subtype = 'highway_classification';
87692                 }
87693
87694                 if (!subtype) { return []; }
87695
87696                 var messageID = subtype === 'highway_classification' ? 'unknown_road' : 'missing_tag.' + subtype;
87697                 var referenceID = subtype === 'highway_classification' ? 'unknown_road' : 'missing_tag';
87698
87699                 // can always delete if the user created it in the first place..
87700                 var canDelete = (entity.version === undefined || entity.v !== undefined);
87701                 var severity = (canDelete && subtype !== 'highway_classification') ? 'error' : 'warning';
87702
87703                 return [new validationIssue({
87704                     type: type,
87705                     subtype: subtype,
87706                     severity: severity,
87707                     message: function(context) {
87708                         var entity = context.hasEntity(this.entityIds[0]);
87709                         return entity ? t('issues.' + messageID + '.message', {
87710                             feature: utilDisplayLabel(entity, context)
87711                         }) : '';
87712                     },
87713                     reference: showReference,
87714                     entityIds: [entity.id],
87715                     dynamicFixes: function(context) {
87716
87717                         var fixes = [];
87718
87719                         var selectFixType = subtype === 'highway_classification' ? 'select_road_type' : 'select_preset';
87720
87721                         fixes.push(new validationIssueFix({
87722                             icon: 'iD-icon-search',
87723                             title: t('issues.fix.' + selectFixType + '.title'),
87724                             onClick: function(context) {
87725                                 context.ui().sidebar.showPresetList();
87726                             }
87727                         }));
87728
87729                         var deleteOnClick;
87730
87731                         var id = this.entityIds[0];
87732                         var operation = operationDelete([id], context);
87733                         var disabledReasonID = operation.disabled();
87734                         if (!disabledReasonID) {
87735                             deleteOnClick = function(context) {
87736                                 var id = this.issue.entityIds[0];
87737                                 var operation = operationDelete([id], context);
87738                                 if (!operation.disabled()) {
87739                                     operation();
87740                                 }
87741                             };
87742                         }
87743
87744                         fixes.push(
87745                             new validationIssueFix({
87746                                 icon: 'iD-operation-delete',
87747                                 title: t('issues.fix.delete_feature.title'),
87748                                 disabledReason: disabledReasonID ? t('operations.delete.' + disabledReasonID + '.single') : undefined,
87749                                 onClick: deleteOnClick
87750                             })
87751                         );
87752
87753                         return fixes;
87754                     }
87755                 })];
87756
87757                 function showReference(selection) {
87758                     selection.selectAll('.issue-reference')
87759                         .data([0])
87760                         .enter()
87761                         .append('div')
87762                         .attr('class', 'issue-reference')
87763                         .text(t('issues.' + referenceID + '.reference'));
87764                 }
87765             };
87766
87767             validation.type = type;
87768
87769             return validation;
87770         }
87771
87772         var brands = {"amenity/animal_boarding|PetsHotel":{countryCodes:["ca","us"],tags:{amenity:"animal_boarding",animal_boarding:"dog;cat",brand:"PetsHotel","brand:wikidata":"Q67141961",name:"PetsHotel"}},"amenity/bank|ABANCA":{countryCodes:["es"],tags:{amenity:"bank",brand:"ABANCA","brand:wikidata":"Q9598744","brand:wikipedia":"es:Abanca",name:"ABANCA",official_name:"ABANCA Corporación Bancaria"}},"amenity/bank|ABN AMRO":{countryCodes:["nl"],tags:{amenity:"bank",brand:"ABN AMRO","brand:wikidata":"Q287471","brand:wikipedia":"nl:ABN AMRO Group",name:"ABN AMRO",official_name:"ABN AMRO Bank N.V."}},"amenity/bank|ABSA":{countryCodes:["za"],tags:{amenity:"bank",brand:"ABSA","brand:wikidata":"Q58641733","brand:wikipedia":"en:Absa Group Limited",name:"ABSA"}},"amenity/bank|AIB":{countryCodes:["gb","ie"],matchNames:["aib bank","allied irish bank"],tags:{amenity:"bank",brand:"AIB","brand:wikidata":"Q1642179","brand:wikipedia":"en:Allied Irish Banks",name:"AIB",official_name:"Allied Irish Banks"}},"amenity/bank|AMP":{countryCodes:["au","nz"],matchNames:["amp bank"],tags:{amenity:"bank",brand:"AMP","brand:wikidata":"Q295261","brand:wikipedia":"en:AMP Limited",name:"AMP",official_name:"AMP Limited"}},"amenity/bank|ANZ":{countryCodes:["au","nz"],matchNames:["anz bank"],tags:{amenity:"bank",brand:"ANZ","brand:wikidata":"Q714641","brand:wikipedia":"en:Australia and New Zealand Banking Group",name:"ANZ",official_name:"Australia and New Zealand Banking Group Limited"}},"amenity/bank|ASB Bank":{countryCodes:["nz"],tags:{amenity:"bank",brand:"ASB Bank","brand:wikidata":"Q297214","brand:wikipedia":"en:ASB Bank",name:"ASB Bank"}},"amenity/bank|ATB Financial":{countryCodes:["ca"],tags:{amenity:"bank",brand:"ATB Financial","brand:wikidata":"Q298762","brand:wikipedia":"en:ATB Financial",name:"ATB Financial",official_name:"Alberta Treasury Branches"}},"amenity/bank|AXA":{nomatch:["office/insurance|AXA"],tags:{amenity:"bank",brand:"AXA","brand:wikidata":"Q160054","brand:wikipedia":"en:AXA",name:"AXA"}},"amenity/bank|Access Bank":{tags:{amenity:"bank",brand:"Access Bank","brand:wikidata":"Q4672418","brand:wikipedia":"en:Access Bank plc",name:"Access Bank"}},"amenity/bank|ActivoBank":{countryCodes:["pt"],tags:{amenity:"bank",brand:"ActivoBank","brand:wikidata":"Q9581725","brand:wikipedia":"pt:ActivoBank",name:"ActivoBank"}},"amenity/bank|Addiko Bank":{countryCodes:["ba","hr","me","rs","si"],tags:{amenity:"bank",brand:"Addiko Bank","brand:wikidata":"Q27926559","brand:wikipedia":"en:Addiko Bank",name:"Addiko Bank"}},"amenity/bank|Affinity Credit Union":{countryCodes:["ca"],matchNames:["affinity"],tags:{amenity:"bank",brand:"Affinity Credit Union","brand:wikidata":"Q4688969","brand:wikipedia":"en:Affinity Credit Union",name:"Affinity Credit Union"}},"amenity/bank|Agribank~(USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q4693829","brand:wikipedia":"en:AgriBank",name:"Agribank"}},"amenity/bank|Agribank~(Vietnam)":{countryCodes:["vn"],tags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q1924723","brand:wikipedia":"vi:Ngân hàng Nông nghiệp và Phát triển Nông thôn Việt Nam",name:"Agribank",official_name:"Ngân hàng Nông nghiệp và Phát triển Nông thôn Việt Nam","official_name:en":"Vietnam Bank for Agriculture and Rural Development"}},"amenity/bank|Agribank~(Zimbabwe)":{countryCodes:["zw"],tags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q4693887","brand:wikipedia":"en:Agricultural Development Bank of Zimbabwe",name:"Agribank"}},"amenity/bank|Akbank":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Akbank","brand:wikidata":"Q416624","brand:wikipedia":"tr:Akbank",name:"Akbank"}},"amenity/bank|Aktia":{countryCodes:["fi"],tags:{amenity:"bank",brand:"Aktia","brand:wikidata":"Q4353753","brand:wikipedia":"fi:Aktia Pankki",name:"Aktia"}},"amenity/bank|Alior Bank":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Alior Bank","brand:wikidata":"Q9148395","brand:wikipedia":"pl:Alior Bank",name:"Alior Bank"}},"amenity/bank|Allahabad Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Allahabad Bank","brand:wikidata":"Q2018840","brand:wikipedia":"en:Allahabad Bank",name:"Allahabad Bank"}},"amenity/bank|Allied Bank~(Pakistan)":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732553","brand:wikipedia":"en:Allied Bank Limited",name:"Allied Bank"}},"amenity/bank|Allied Bank~(defunct bank in Philipiness)":{countryCodes:["ph"],tags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732555","brand:wikipedia":"en:Allied Banking Corporation",name:"Allied Bank"}},"amenity/bank|Alpha Bank":{tags:{amenity:"bank",brand:"Alpha Bank","brand:wikidata":"Q747394","brand:wikipedia":"en:Alpha Bank",name:"Alpha Bank"}},"amenity/bank|Alterna Savings":{countryCodes:["ca"],tags:{amenity:"bank",brand:"Alterna Savings","brand:wikidata":"Q4736322","brand:wikipedia":"en:Alterna Savings",name:"Alterna Savings"}},"amenity/bank|America First Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"America First Credit Union","brand:wikidata":"Q4742758","brand:wikipedia":"en:America First Credit Union",name:"America First Credit Union",short_name:"AFCU"}},"amenity/bank|Andhra Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Andhra Bank","brand:wikidata":"Q2003476","brand:wikipedia":"en:Andhra Bank",name:"Andhra Bank"}},"amenity/bank|Antonveneta":{countryCodes:["it"],tags:{amenity:"bank",brand:"Antonveneta","brand:wikidata":"Q3633689","brand:wikipedia":"en:Banca Antonveneta",name:"Antonveneta"}},"amenity/bank|Apple Bank":{countryCodes:["us"],nomatch:["shop/electronics|Apple Store"],tags:{amenity:"bank",brand:"Apple Bank","brand:wikidata":"Q4781125","brand:wikipedia":"en:Apple Bank for Savings",name:"Apple Bank"}},"amenity/bank|Argenta":{countryCodes:["be","lu","nl"],tags:{amenity:"bank",brand:"Argenta","brand:wikidata":"Q932856","brand:wikipedia":"nl:Argenta Groep",name:"Argenta"}},"amenity/bank|Arvest Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Arvest Bank","brand:wikidata":"Q4802393","brand:wikipedia":"en:Arvest Bank",name:"Arvest Bank"}},"amenity/bank|Asia United Bank":{countryCodes:["ph"],tags:{amenity:"bank",brand:"Asia United Bank","brand:wikidata":"Q4806482","brand:wikipedia":"tl:Asia United Bank",name:"Asia United Bank"}},"amenity/bank|Askari Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Askari Bank","brand:wikidata":"Q4807137","brand:wikipedia":"en:Askari Bank",name:"Askari Bank"}},"amenity/bank|Associated Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Associated Bank","brand:wikidata":"Q4809155","brand:wikipedia":"en:Associated Banc-Corp",name:"Associated Bank"}},"amenity/bank|Attijariwafa Bank":{tags:{amenity:"bank",brand:"Attijariwafa Bank","brand:wikidata":"Q758052","brand:wikipedia":"en:Attijariwafa Bank",name:"Attijariwafa Bank"}},"amenity/bank|Axis Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Axis Bank","brand:wikidata":"Q2003549","brand:wikipedia":"en:Axis Bank",name:"Axis Bank"}},"amenity/bank|BAC Credomatic":{matchNames:["bac"],tags:{amenity:"bank",brand:"BAC Credomatic","brand:wikidata":"Q5715556","brand:wikipedia":"en:BAC Credomatic",name:"BAC Credomatic"}},"amenity/bank|BAI":{countryCodes:["ao"],matchNames:["banco africano de investimentos"],tags:{amenity:"bank",brand:"BAI","brand:wikidata":"Q806172","brand:wikipedia":"en:Banco Angolano de Investimentos",name:"BAI",official_name:"Banco Angolano de Investimentos"}},"amenity/bank|BAWAG PSK":{countryCodes:["at"],tags:{amenity:"bank",brand:"BAWAG PSK","brand:wikidata":"Q379938","brand:wikipedia":"en:BAWAG P.S.K.",name:"BAWAG PSK"}},"amenity/bank|BB&T":{countryCodes:["us"],tags:{amenity:"bank",brand:"BB&T","brand:wikidata":"Q795486","brand:wikipedia":"en:BB&T",name:"BB&T",official_name:"Branch Banking and Trust Company"}},"amenity/bank|BBBank":{countryCodes:["de"],tags:{amenity:"bank",brand:"BBBank","brand:wikidata":"Q795504","brand:wikipedia":"en:BBBank",name:"BBBank"}},"amenity/bank|BBVA":{tags:{amenity:"bank",brand:"BBVA","brand:wikidata":"Q806189","brand:wikipedia":"en:Banco Bilbao Vizcaya Argentaria",name:"BBVA",official_name:"Banco Bilbao Vizcaya Argentaria"}},"amenity/bank|BBVA Bancomer":{countryCodes:["mx"],tags:{amenity:"bank",brand:"BBVA Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"BBVA Bancomer"}},"amenity/bank|BBVA Compass":{countryCodes:["us"],tags:{amenity:"bank",brand:"BBVA Compass","brand:wikidata":"Q4835088","brand:wikipedia":"en:BBVA Compass",name:"BBVA Compass",official_name:"BBVA Compass Bancshares"}},"amenity/bank|BBVA Continental":{countryCodes:["pe"],tags:{amenity:"bank",brand:"BBVA Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"BBVA Continental"}},"amenity/bank|BBVA Francés":{countryCodes:["ar"],tags:{amenity:"bank",brand:"BBVA Francés","brand:en":"BBVA France","brand:fr":"BBVA France","brand:wikidata":"Q2876788","brand:wikipedia":"en:BBVA Francés",name:"BBVA Francés","name:en":"BBVA France","name:fr":"BBVA Francés"}},"amenity/bank|BCA":{matchNames:["bank bca"],tags:{amenity:"bank",brand:"BCA","brand:wikidata":"Q806626","brand:wikipedia":"id:Bank Central Asia",name:"BCA",official_name:"Bank Central Asia"}},"amenity/bank|BCEE":{countryCodes:["lu"],tags:{amenity:"bank",brand:"BCEE","brand:wikidata":"Q668996","brand:wikipedia":"fr:Banque et caisse d'épargne de l'État",name:"BCEE",official_name:"Banque et Caisse d'Épargne de l'État"}},"amenity/bank|BCI":{matchNames:["banco bci"],tags:{amenity:"bank",brand:"BCI","brand:wikidata":"Q2882083","brand:wikipedia":"es:Banco de Crédito e Inversiones",name:"BCI",official_name:"Banco de Crédito e Inversiones","official_name:en":"Bank of Credit and Investments","official_name:es":"Banco de Crédito e Inversiones"}},"amenity/bank|BCP~(Bolivia)":{countryCodes:["bo"],nomatch:["amenity/bank|BCP~(France)","amenity/bank|BCP~(Luxembourg)","amenity/bank|BCP~(Peru)"],tags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q16826675","brand:wikipedia":"es:Banco de Crédito de Bolivia",name:"BCP",official_name:"Banco de Crédito de Bolivia","official_name:en":"Credit Bank of Bolivia","official_name:es":"Banco de Crédito de Bolivia"}},"amenity/bank|BCP~(France)":{countryCodes:["fr"],matchNames:["banque bcp","bcp"],nomatch:["amenity/bank|BCP~(Bolivia)","amenity/bank|BCP~(Luxembourg)","amenity/bank|BCP~(Peru)"],tags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"}},"amenity/bank|BCP~(Luxembourg)":{countryCodes:["lu"],matchNames:["banque bcp","bcp"],nomatch:["amenity/bank|BCP~(Bolivia)","amenity/bank|BCP~(France)","amenity/bank|BCP~(Peru)"],tags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"}},"amenity/bank|BCP~(Peru)":{countryCodes:["pe"],matchNames:["banco de crédito del perú"],nomatch:["amenity/bank|BCP~(Bolivia)","amenity/bank|BCP~(France)","amenity/bank|BCP~(Luxembourg)"],tags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q4854124","brand:wikipedia":"es:Banco de Crédito del Perú",name:"BCP",official_name:"Banco de Crédito del Perú","official_name:en":"Credit Bank of Peru","official_name:es":"Banco de Crédito del Perú"}},"amenity/bank|BCR~(Banca Comercială Română)":{countryCodes:["ro"],matchNames:["banca comercială română"],tags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q806149","brand:wikipedia":"ro:Banca Comercială Română",name:"BCR",official_name:"Banca Comercială Română","official_name:en":"Romanian Commercial Bank","official_name:ro":"Banca Comercială Română"}},"amenity/bank|BCR~(Costa Rica)":{countryCodes:["cr"],matchNames:["banco de costa rica"],tags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q6951632","brand:wikipedia":"es:Banco de Costa Rica",name:"BCR",official_name:"Banco de Costa Rica","official_name:en":"Bank of Costa Rica","official_name:es":"Banco de Costa Rica"}},"amenity/bank|BDM":{countryCodes:["ml"],tags:{amenity:"bank",brand:"BDM","brand:wikidata":"Q2883022","brand:wikipedia":"fr:Banque de développement du Mali",name:"BDM",official_name:"Banque du Développement du Mali","official_name:en":"Mali Development Bank","official_name:fr":"Banque du Développement du Mali"}},"amenity/bank|BDO":{countryCodes:["ph"],tags:{alt_name:"Banco de Oro",amenity:"bank",brand:"BDO","brand:wikidata":"Q4854129","brand:wikipedia":"en:Banco de Oro",name:"BDO"}},"amenity/bank|BECU":{countryCodes:["us"],tags:{amenity:"bank",brand:"BECU","brand:wikidata":"Q4835409","brand:wikipedia":"en:BECU",name:"BECU"}},"amenity/bank|BGL BNP Paribas":{countryCodes:["lu"],nomatch:["amenity/bank|BGŻ BNP Paribas"],tags:{amenity:"bank",brand:"BGL BNP Paribas","brand:wikidata":"Q795898","brand:wikipedia":"fr:BGL BNP Paribas",name:"BGL BNP Paribas"}},"amenity/bank|BGŻ BNP Paribas":{countryCodes:["pl"],tags:{amenity:"bank",brand:"BGŻ BNP Paribas","brand:wikidata":"Q20744004","brand:wikipedia":"pl:BNP Paribas Bank Polska",name:"BGŻ BNP Paribas"}},"amenity/bank|BIAT":{countryCodes:["tn"],tags:{amenity:"bank",brand:"BIAT","brand:wikidata":"Q690739","brand:wikipedia":"fr:Banque internationale arabe de Tunisie",name:"BIAT",official_name:"Banque internationale arabe de Tunisie","official_name:en":"Arab International Bank of Tunisia","official_name:fr":"Banque internationale arabe de Tunisie"}},"amenity/bank|BIDV":{countryCodes:["vn"],tags:{amenity:"bank",brand:"BIDV","brand:wikidata":"Q1003180","brand:wikipedia":"vi:Ngân hàng Đầu tư và Phát triển Việt Nam",name:"BIDV",official_name:"Ngân hàng Đầu tư và Phát triển Việt Nam","official_name:en":"Bank for Investment and Development of Vietnam","official_name:vi":"Ngân hàng Đầu tư và Phát triển Việt Nam"}},"amenity/bank|BIL":{countryCodes:["lu"],tags:{amenity:"bank",brand:"BIL","brand:wikidata":"Q2883404","brand:wikipedia":"en:Banque Internationale à Luxembourg",name:"BIL",official_name:"Banque Internationale à Luxembourg","official_name:en":"International Bank in Luxembourg","official_name:fr":"Banque Internationale à Luxembourg"}},"amenity/bank|BMCE Bank":{countryCodes:["ma"],matchNames:["bmce"],tags:{amenity:"bank",brand:"BMCE Bank","brand:wikidata":"Q2300433","brand:wikipedia":"ar:البنك المغربي للتجارة الخارجية",name:"BMCE Bank",official_name:"البنك المغربي للتجارة الخارجية‎","official_name:ar":"البنك المغربي للتجارة الخارجية‎","official_name:en":"Moroccan Bank of Foreign Commerce"}},"amenity/bank|BMCI":{countryCodes:["ma"],matchNames:["bmci bank"],tags:{amenity:"bank",brand:"BMCI","brand:wikidata":"Q2883409","brand:wikipedia":"ar:البنك المغربي للتجارة والصناعة",name:"BMCI"}},"amenity/bank|BMN":{countryCodes:["es"],tags:{amenity:"bank",brand:"BMN","brand:wikidata":"Q3754900","brand:wikipedia":"es:Banco Mare Nostrum",name:"BMN",official_name:"Banco Mare Nostrum"}},"amenity/bank|BMO Harris Bank~(USA)":{countryCodes:["us"],matchNames:["bank of montreal","bmo","bmo bank of montreal","bmo harris bank","harris bank"],tags:{amenity:"bank",brand:"BMO Harris Bank","brand:wikidata":"Q4835981","brand:wikipedia":"en:BMO Harris Bank",name:"BMO Harris Bank"}},"amenity/bank|BMO~(Canada)":{countryCodes:["ca"],matchNames:["bank of montreal","banque de montréal","bmo","bmo bank of montreal","bmo banque de montréal"],tags:{amenity:"bank",brand:"BMO","brand:wikidata":"Q806693","brand:wikipedia":"en:Bank of Montreal",name:"BMO",official_name:"Bank of Montreal"}},"amenity/bank|BNA~(Algeria)":{countryCodes:["dz"],tags:{amenity:"bank",brand:"BNA","brand:wikidata":"Q2883410","brand:wikipedia":"fr:Banque nationale d'Algérie",name:"BNA",official_name:"Banque nationale d'Algérie","official_name:en":"National Bank of Algeria","official_name:fr":"Banque nationale d'Algérie"}},"amenity/bank|BNA~(Tunisia)":{countryCodes:["tn"],tags:{amenity:"bank",brand:"BNA","brand:wikidata":"Q2883413","brand:wikipedia":"fr:Banque nationale agricole",name:"BNA"}},"amenity/bank|BNDA":{countryCodes:["ml"],tags:{amenity:"bank",brand:"BNDA","brand:wikidata":"Q30594734","brand:wikipedia":"en:Banque Nationale de Développement Agricole",name:"BNDA",official_name:"Banque Nationale de Développement Agricole"}},"amenity/bank|BNI":{matchNames:["bank bni"],tags:{amenity:"bank",brand:"BNI","brand:wikidata":"Q2882611","brand:wikipedia":"id:Bank Negara Indonesia",name:"BNI",official_name:"Bank Negara Indonesia","official_name:en":"State Bank of Indonesia","official_name:id":"Bank Negara Indonesia"}},"amenity/bank|BNL":{countryCodes:["it"],tags:{amenity:"bank",brand:"BNL","brand:wikidata":"Q2201225","brand:wikipedia":"it:Banca Nazionale del Lavoro",name:"BNL",official_name:"Banca Nazionale del Lavoro","official_name:en":"National Labor Bank","official_name:it":"Banca Nazionale del Lavoro"}},"amenity/bank|BNP Paribas":{tags:{amenity:"bank",brand:"BNP Paribas","brand:wikidata":"Q499707","brand:wikipedia":"en:BNP Paribas",name:"BNP Paribas"}},"amenity/bank|BNP Paribas Fortis":{countryCodes:["be"],tags:{amenity:"bank",brand:"BNP Paribas Fortis","brand:wikidata":"Q796827","brand:wikipedia":"en:BNP Paribas Fortis",name:"BNP Paribas Fortis"}},"amenity/bank|BOC":{tags:{amenity:"bank",brand:"BOC","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"BOC",official_name:"Bank of China"}},"amenity/bank|BOM":{countryCodes:["au"],tags:{amenity:"bank",brand:"BOM","brand:wikidata":"Q4856151","brand:wikipedia":"en:Bank of Melbourne (2011)",name:"BOM",official_name:"Bank of Melbourne"}},"amenity/bank|BOQ":{countryCodes:["au"],tags:{amenity:"bank",brand:"BOQ","brand:wikidata":"Q4856173","brand:wikipedia":"en:Bank of Queensland",name:"BOQ",official_name:"Bank of Queensland"}},"amenity/bank|BPC":{countryCodes:["ao"],tags:{amenity:"bank",brand:"BPC","brand:wikidata":"Q4854132","brand:wikipedia":"en:Banco de Poupança e Crédito",name:"BPC",official_name:"Banco de Poupança e Crédito"}},"amenity/bank|BPER Banca":{countryCodes:["it"],tags:{amenity:"bank",brand:"BPER Banca","brand:wikidata":"Q806167","brand:wikipedia":"it:BPER Banca",name:"BPER Banca",official_name:"Banca Popolare dell'Emilia Romagna"}},"amenity/bank|BPI~(Global)":{matchNames:["bpi family savings bank"],nomatch:["amenity/bank|Banco BPI~(Portugal)"],tags:{amenity:"bank",brand:"BPI","brand:wikidata":"Q2501256","brand:wikipedia":"en:Bank of the Philippine Islands",name:"BPI",official_name:"Bank of the Philippine Islands"}},"amenity/bank|BRD":{countryCodes:["ro"],tags:{amenity:"bank",brand:"BRD","brand:wikidata":"Q796927","brand:wikipedia":"ro:BRD - Groupe Société Générale",name:"BRD"}},"amenity/bank|BRED":{countryCodes:["fr"],tags:{amenity:"bank",brand:"BRED","brand:wikidata":"Q2877455","brand:wikipedia":"fr:BRED Banque populaire",name:"BRED",official_name:"Banque régionale d'escompte et de dépôts","official_name:en":"Regional Discount and Deposit Bank","official_name:fr":"Banque régionale d'escompte et de dépôts"}},"amenity/bank|BRI":{countryCodes:["id"],matchNames:["bank bri"],tags:{amenity:"bank",brand:"BRI","brand:wikidata":"Q623042","brand:wikipedia":"id:Bank Rakyat Indonesia",name:"BRI",official_name:"Bank Rakyat Indonesia","official_name:en":"People's Bank of Indonesia","official_name:id":"Bank Rakyat Indonesia"}},"amenity/bank|BTN":{countryCodes:["id"],tags:{amenity:"bank",brand:"BTN","brand:en":"BTN","brand:id":"BTN","brand:wikidata":"Q12474534","brand:wikipedia":"id:Bank Tabungan Negara",name:"BTN","name:en":"BTN","name:id":"BTN",official_name:"Bank Tabungan Negara","official_name:en":"State Savings Bank","official_name:id":"Bank Tabungan Negara"}},"amenity/bank|BW-Bank":{countryCodes:["de"],matchNames:["baden-württembergische bank"],tags:{amenity:"bank",brand:"BW-Bank","brand:de":"BW-Bank","brand:en":"BW-Bank","brand:wikidata":"Q798891","brand:wikipedia":"de:Baden-Württembergische Bank",name:"BW-Bank","name:de":"BW-Bank","name:en":"BW-Bank"}},"amenity/bank|Banamex":{countryCodes:["mx"],tags:{amenity:"bank",brand:"Banamex","brand:wikidata":"Q749474","brand:wikipedia":"en:Grupo Financiero Banamex",name:"Banamex",official_name:"Grupo Financiero Banamex","official_name:en":"Banamex Financial Group","official_name:es":"Grupo Financiero Banamex"}},"amenity/bank|Banca Intesa":{countryCodes:["it","rs"],tags:{amenity:"bank",brand:"Banca Intesa","brand:wikidata":"Q647092","brand:wikipedia":"en:Banca Intesa",name:"Banca Intesa","name:en":"Intesa Bank","name:it":"Banca Intesa"}},"amenity/bank|Banca March":{countryCodes:["es"],tags:{amenity:"bank",brand:"Banca March","brand:wikidata":"Q578252","brand:wikipedia":"en:Banca March",name:"Banca March"}},"amenity/bank|Banca Mediolanum":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Mediolanum","brand:wikidata":"Q3633712","brand:wikipedia":"en:Banca Mediolanum",name:"Banca Mediolanum"}},"amenity/bank|Banca Popolare di Bari":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Bari","brand:wikidata":"Q3633730","brand:wikipedia":"en:Banca Popolare di Bari",name:"Banca Popolare di Bari"}},"amenity/bank|Banca Popolare di Milano":{countryCodes:["it"],matchNames:["bpm"],tags:{amenity:"bank",brand:"Banca Popolare di Milano","brand:en":"Popular Bank of Milan","brand:it":"Banca Popolare di Milano","brand:wikidata":"Q806154","brand:wikipedia":"en:Banca Popolare di Milano",name:"Banca Popolare di Milano","name:en":"Popular Bank of Milan","name:it":"Banca Popolare di Milano"}},"amenity/bank|Banca Popolare di Novara":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Novara","brand:en":"Popular Bank of Novara","brand:it":"Banca Popolare di Novara","brand:wikidata":"Q3633742","brand:wikipedia":"en:Banca Popolare di Novara",name:"Banca Popolare di Novara","name:en":"Popular Bank of Novara","name:it":"Banca Popolare di Novara"}},"amenity/bank|Banca Popolare di Sondrio":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Sondrio","brand:en":"Popular Bank of Sandrio","brand:it":"Banca Popolare di Sondrio","brand:wikidata":"Q686176","brand:wikipedia":"en:Banca Popolare di Sondrio",name:"Banca Popolare di Sondrio","name:en":"Popular Bank of Sandrio","name:it":"Banca Popolare di Sondrio"}},"amenity/bank|Banca Popolare di Verona":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Verona","brand:en":"Popular Bank of Verona","brand:it":"Banca Popolare di Verona","brand:wikidata":"Q3167468","brand:wikipedia":"en:Banca Popolare di Verona",name:"Banca Popolare di Verona","name:en":"Popular Bank of Verona","name:it":"Banca Popolare di Verona"}},"amenity/bank|Banca Popolare di Vicenza":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Vicenza","brand:en":"Popular Bank of Vicenza","brand:it":"Banca Popolare di Vicenza","brand:wikidata":"Q3127200","brand:wikipedia":"en:Banca Popolare di Vicenza",name:"Banca Popolare di Vicenza","name:en":"Popular Bank of Vicena","name:it":"Banca Popolare di Vicenza"}},"amenity/bank|Banca Românească":{countryCodes:["ro"],tags:{amenity:"bank",brand:"Banca Românească","brand:en":"Romanian Bank","brand:ro":"Banca Românească","brand:wikidata":"Q4854052","brand:wikipedia":"ro:Banca Românească",name:"Banca Românească","name:en":"Popular Bank of Vicena","name:ro":"Banca Românească"}},"amenity/bank|Banca Sella":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Sella","brand:en":"Sella Bank","brand:it":"Banca Sella","brand:wikidata":"Q3633749","brand:wikipedia":"en:Banca Sella Group",name:"Banca Sella","name:en":"Sella Bank","name:it":"Banca Sella"}},"amenity/bank|Banca Transilvania":{countryCodes:["ro"],tags:{amenity:"bank",brand:"Banca Transilvania","brand:en":"Transilvania Bank","brand:ro":"Banca Transilvania","brand:wikidata":"Q806161","brand:wikipedia":"en:Banca Transilvania",name:"Banca Transilvania","name:en":"Transilvania Bank","name:ro":"Banca Transilvania"}},"amenity/bank|Bancaribe":{countryCodes:["ve"],tags:{amenity:"bank",brand:"Bancaribe","brand:wikidata":"Q5717827","brand:wikipedia":"en:Bancaribe",name:"Bancaribe"}},"amenity/bank|Banco AV Villas":{countryCodes:["co"],tags:{amenity:"bank",brand:"Banco AV Villas","brand:en":"Bank of Villas","brand:es":"Banco AV Villas","brand:wikidata":"Q4854068","brand:wikipedia":"en:Banco AV Villas",name:"Banco AV Villas","name:en":"Bank of Villas","name:es":"Banco AV Villas"}},"amenity/bank|Banco Agrario":{countryCodes:["co"],tags:{amenity:"bank",brand:"Banco Agrario","brand:en":"Agrarian Bank","brand:wikidata":"Q20013358","brand:wikipedia":"es:Banco Agrario de Colombia",name:"Banco Agrario","name:en":"Agrarian Bank","name:es":"Banco Agrario",official_name:"Banco Agrario de Colombia","official_name:en":"Agrarian Bank of Colombia","official_name:es":"Banco Agrario de Colombia"}},"amenity/bank|Banco Azteca":{tags:{amenity:"bank",brand:"Banco Azteca","brand:en":"Aztec Bank","brand:es":"Banco Azteca","brand:wikidata":"Q4854076","brand:wikipedia":"en:Banco Azteca",name:"Banco Azteca","name:en":"Aztec Bank","name:es":"Banco Azteca"}},"amenity/bank|Banco BPI~(Portugal)":{countryCodes:["pt"],nomatch:["amenity/bank|BPI~(Global)"],tags:{amenity:"bank",brand:"Branco BPI","brand:wikidata":"Q537886","brand:wikipedia":"en:Banco Português de Investimento",name:"Banco BPI",official_name:"Banco Português de Investimento",short_name:"BPI"}},"amenity/bank|Banco BPM":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banco BPM","brand:en":"BPM Bank","brand:es":"Banco BPM","brand:wikidata":"Q27331643","brand:wikipedia":"en:Banco BPM",name:"Banco BPM","name:en":"BPM Bank","name:es":"Banco BPM"}},"amenity/bank|Banco CTT":{countryCodes:["pt"],tags:{amenity:"bank",brand:"Banco CTT","brand:wikidata":"Q65161642","brand:wikipedia":"pt:Banco CTT",name:"Banco CTT"}},"amenity/bank|Banco Caja Social":{countryCodes:["co"],tags:{amenity:"bank",brand:"Banco Caja Social","brand:en":"Social Housing Bank","brand:es":"Banco Caja Social","brand:wikidata":"Q5717869","brand:wikipedia":"es:Banco Caja Social",name:"Banco Caja Social","name:en":"Social Housing Bank","name:es":"Banco Caja Social"}},"amenity/bank|Banco Ciudad":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco Ciudad","brand:en":"City Bank","brand:es":"Banco Ciudad","brand:wikidata":"Q4856204","brand:wikipedia":"en:Bank of the City of Buenos Aires",name:"Banco Ciudad","name:en":"City Bank","name:es":"Banco Ciudad",official_name:"Banco Ciudad de Buenos Aires","official_name:en":"Bank of the City of Buenos Aires","official_name:es":"Banco Ciudad de Buenos Aires"}},"amenity/bank|Banco Continental~(Paraguay)":{countryCodes:["py"],tags:{amenity:"bank",brand:"Banco Continental","brand:en":"Continental Bank","brand:es":"Banco Continental","brand:wikidata":"Q62054564",name:"Banco Continental","name:en":"Continental Bank","name:es":"Banco Continental"}},"amenity/bank|Banco Continental~(Peru)":{countryCodes:["pe"],tags:{amenity:"bank",brand:"Banco Continental","brand:en":"Continental Bank","brand:es":"Banco Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"Banco Continental","name:en":"Continental Bank","name:es":"Banco Continental"}},"amenity/bank|Banco Estado":{countryCodes:["cl"],tags:{amenity:"bank",brand:"Banco Estado","brand:en":"State Bank","brand:es":"Banco Estado","brand:wikidata":"Q5718188","brand:wikipedia":"es:Banco del Estado de Chile",name:"Banco Estado","name:en":"State Bank","name:es":"Banco Estado",official_name:"Banco del Estado de Chile","official_name:en":"Bank of the State of Chile","official_name:es":"Banco del Estado de Chile"}},"amenity/bank|Banco Falabella":{countryCodes:["cl","co","pe"],nomatch:["shop/department_store|Falabella"],tags:{amenity:"bank",brand:"Banco Falabella","brand:en":"Falabella Bank","brand:es":"Banco Falabella","brand:wikidata":"Q4854088","brand:wikipedia":"en:Banco Falabella",name:"Banco Falabella","name:en":"Falabella Bank","name:es":"Banco Falabella"}},"amenity/bank|Banco Fassil":{countryCodes:["bo"],tags:{amenity:"bank",brand:"Banco Fassil","brand:en":"Fassil Bank","brand:es":"Banco Fassil","brand:wikidata":"Q62118592",name:"Banco Fassil","name:en":"Fassil Bank","name:es":"Banco Fassil"}},"amenity/bank|Banco Fie":{tags:{amenity:"bank",brand:"Banco Fie",name:"Banco Fie"}},"amenity/bank|Banco G&T Continental":{countryCodes:["gt","sv"],tags:{amenity:"bank",brand:"Banco G&T Continental","brand:en":"G&T Continental Bank","brand:es":"Banco G&T Continental","brand:wikidata":"Q5717949","brand:wikipedia":"es:Banco GYT Continental, S.A.",name:"Banco G&T Continental","name:en":"G&T Continental Bank","name:es":"Banco G&T Continental"}},"amenity/bank|Banco General":{countryCodes:["cr","pa"],tags:{amenity:"bank",brand:"BW-Bank","brand:en":"BW-Bank","brand:es":"BW-Bank","brand:wikidata":"Q27618271","brand:wikipedia":"es:Banco General (Panamá)",name:"Banco General","name:en":"General Bank","name:es":"Banco General"}},"amenity/bank|Banco Industrial":{tags:{amenity:"bank",brand:"Banco Industrial","brand:en":"Industrial Bank","brand:es":"Banco Industrial","brand:wikidata":"Q16489444","brand:wikipedia":"es:Banco Industrial",name:"Banco Industrial","name:en":"Industrial Bank","name:es":"Banco Industrial"}},"amenity/bank|Banco Internacional~(Chile)":{countryCodes:["cl"],tags:{amenity:"bank",brand:"Banco Internacional","brand:en":"International Bank","brand:es":"Banco Internacional","brand:wikidata":"Q56605586","brand:wikipedia":"es:Banco Internacional (Chile)",name:"Banco Internacional","name:en":"International Bank","name:es":"Banco Internacional"}},"amenity/bank|Banco Internacional~(Ecuador)":{countryCodes:["ec"],tags:{amenity:"bank",brand:"Banco Internacional","brand:en":"International Bank","brand:es":"Banco Internacional","brand:wikidata":"Q806187","brand:wikipedia":"es:Banco Internacional",name:"Banco Internacional","name:en":"International Bank","name:es":"Banco Internacional"}},"amenity/bank|Banco Metropolitano":{countryCodes:["cu"],tags:{amenity:"bank",brand:"Banco Metropolitano","brand:en":"Metroplitan Bank","brand:es":"Banco Metropolitano","brand:wikidata":"Q62118612",name:"Banco Metropolitano","name:en":"Metropolitan Bank","name:es":"Banco Metropolitano"}},"amenity/bank|Banco Nacional":{countryCodes:["cr","pa"],tags:{amenity:"bank",brand:"Banco Nacional de Costa Rica","brand:en":"National Bank of Costa Rica","brand:es":"Banco Nacional de Costa Rica","brand:wikidata":"Q2917708","brand:wikipedia":"es:Banco Nacional de Costa Rica",name:"Banco Nacional","name:en":"National Bank","name:es":"Banco Nacional",official_name:"Banco Nacional de Costa Rica","official_name:en":"National Bank of Costa Rica","official_name:es":"Banco Nacional de Costa Rica",short_name:"BNCR"}},"amenity/bank|Banco Nación":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco Nación","brand:en":"Nation Bank","brand:es":"Banco Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco Nación","name:en":"Nation Bank","name:es":"Banco Nación",official_name:"Banco de la Nación Argentina","official_name:en":"Bank of the Argentine Nation","official_name:es":"Banco de la Nación Argentina"}},"amenity/bank|Banco Pastor":{countryCodes:["es"],tags:{amenity:"bank",brand:"Banco Pastor","brand:en":"Shepherd Bank","brand:es":"Banco Pastor","brand:wikidata":"Q806193","brand:wikipedia":"en:Banco Pastor",name:"Banco Pastor","name:en":"Shepherd Bank","name:es":"Banco Pastor",official_name:"Banco Popular Pastor","official_name:en":"Popular Shepherd Bank","official_name:es":"Banco Popular Pastor"}},"amenity/bank|Banco Pichincha":{tags:{amenity:"bank",brand:"Banco Pichincha","brand:en":"Pichincha Bank","brand:es":"Banco Pichincha","brand:wikidata":"Q4854135","brand:wikipedia":"en:Banco Pichincha",name:"Banco Pichincha","name:en":"Pichincha Bank","name:es":"Banco Pichincha"}},"amenity/bank|Banco Popular de Ahorro":{countryCodes:["cu"],matchNames:["bpa"],tags:{amenity:"bank",brand:"Banco Popular de Ahorro","brand:en":"Popular Saving Bank","brand:es":"Banco Popular de Ahorro","brand:wikidata":"Q62118626",name:"Banco Popular de Ahorro","name:en":"Popular Saving Bank","name:es":"Banco Popular de Ahorro"}},"amenity/bank|Banco Provincia":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco Provincia","brand:en":"Province Bank","brand:es":"Banco Provincia","brand:wikidata":"Q4856209","brand:wikipedia":"es:Banco de la Provincia de Buenos Aires",name:"Banco Provincia","name:en":"Province Bank","name:es":"Banco Provincia",official_name:"Banco de la Provincia de Buenos Aires","official_name:en":"Bank of the Province of Buenos Aires","official_name:es":"Banco de la Provincia de Buenos Aires"}},"amenity/bank|Banco Sabadell":{countryCodes:["es"],matchNames:["banc sabadell","sabadell"],tags:{amenity:"bank",brand:"Banco Sabadell","brand:ca":"Banc Sabadell","brand:es":"Banco Sabadell","brand:wikidata":"Q762330","brand:wikipedia":"es:Banco Sabadell",name:"Banco Sabadell","name:ca":"Banc Sabadell","name:es":"Banco Sabadell",official_name:"Banco de Sabadell, S.A."}},"amenity/bank|Banco Santa Fe":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco Santa Fe","brand:en":"Santa Fe Bank","brand:es":"Banco Santa Fe","brand:wikidata":"Q6046871","brand:wikipedia":"es:Nuevo Banco de Santa Fe",name:"Banco Santa Fe","name:en":"Santa Fe Bank","name:es":"Banco Santa Fe",official_name:"Nuevo Banco de Santa Fe","official_name:en":"New Bank of Santa Fe","official_name:es":"Nuevo Banco de Santa Fe"}},"amenity/bank|Banco Santander":{nomatch:["amenity/bank|Santander"],tags:{amenity:"bank",brand:"Banco Santander","brand:en":"Santander Bank","brand:es":"Banco Santander","brand:wikidata":"Q6496310","brand:wikipedia":"es:Banco Santander",name:"Banco Santander","name:en":"Santander Bank","name:es":"Banco Santander",official_name:"Santander Group"}},"amenity/bank|Banco Sol~(Angola)":{countryCodes:["ao"],tags:{amenity:"bank",brand:"Banco Sol","brand:en":"Sol Bank","brand:pt":"Banco Sol","brand:wikidata":"Q62118744",name:"Banco Sol","name:en":"Sol Bank","name:pt":"Banco Sol"}},"amenity/bank|Banco Sol~(Bolivia)":{countryCodes:["bo"],tags:{amenity:"bank",brand:"Banco Sol","brand:en":"Sol Bank","brand:pt":"Banco Sol","brand:wikidata":"Q62118746",name:"Banco Sol","name:en":"Sol Bank","name:pt":"Banco Sol"}},"amenity/bank|Banco Unión":{countryCodes:["bo"],nomatch:["amenity/bank|UnionBank","amenity/money_transfer|Express Union"],tags:{amenity:"bank",brand:"Banco Unión","brand:en":"Union Bank","brand:es":"Banco Unión","brand:wikidata":"Q72315494",name:"Banco Unión","name:en":"Union Bank","name:es":"Banco Unión"}},"amenity/bank|Banco de Bogotá":{countryCodes:["co"],tags:{amenity:"bank",brand:"Banco de Bogotá","brand:en":"Bank of Bogota","brand:es":"Banco de Bogotá","brand:wikidata":"Q4854122","brand:wikipedia":"es:Banco de Bogotá",name:"Banco de Bogotá","name:en":"Bank of Bogota","name:es":"Banco de Bogotá"}},"amenity/bank|Banco de Chile":{countryCodes:["cl"],tags:{amenity:"bank",brand:"Banco de Chile","brand:en":"Bank of Chile","brand:es":"Banco de Chile","brand:wikidata":"Q2882085","brand:wikipedia":"es:Banco de Chile",name:"Banco de Chile","name:en":"Bank of Chile","name:es":"Banco de Chile"}},"amenity/bank|Banco de Desarrollo Banrural":{countryCodes:["gt"],tags:{amenity:"bank",brand:"Banco de Desarrollo Banrural","brand:en":"Bank of Banrural Development","brand:es":"Banco de Desarrollo Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banco de Desarrollo Banrural","name:en":"Bank of Banrural Development","name:es":"Banco de Desarrollo Banrural"}},"amenity/bank|Banco de Fomento Angola (BFA)":{countryCodes:["ao"],tags:{amenity:"bank",brand:"Banco de Fomento Angola (BFA)","brand:en":"Angola Development Bank (BFA)","brand:es":"Banco de Fomento Angola (BFA)","brand:wikidata":"Q806197","brand:wikipedia":"de:Banco de Fomento Angola",name:"Banco de Fomento Angola (BFA)","name:en":"Angola Development Bank (BFA)","name:es":"Banco de Fomento Angola (BFA)"}},"amenity/bank|Banco de Occidente":{tags:{amenity:"bank",brand:"Banco de Occidente","brand:wikidata":"Q4854127","brand:wikipedia":"es:Banco de Occidente (Colombia)",name:"Banco de Occidente"}},"amenity/bank|Banco de Venezuela":{countryCodes:["ve"],matchNames:["de venezuela"],tags:{amenity:"bank",brand:"Banco de Venezuela","brand:wikidata":"Q517093","brand:wikipedia":"es:Banco de Venezuela",name:"Banco de Venezuela"}},"amenity/bank|Banco de la Nación~(Argentina)":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco de la Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco de la Nación"}},"amenity/bank|Banco de la Nación~(Peru)":{countryCodes:["pe"],tags:{amenity:"bank",brand:"Banco de la Nación","brand:wikidata":"Q4856206","brand:wikipedia":"en:Bank of the Nation (Peru)",name:"Banco de la Nación"}},"amenity/bank|Banco del Austro":{countryCodes:["ec"],tags:{amenity:"bank",brand:"Banco del Austro","brand:wikidata":"Q62122344",name:"Banco del Austro"}},"amenity/bank|Banco di Napoli":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banco di Napoli","brand:wikidata":"Q3633835","brand:wikipedia":"en:Banco di Napoli",name:"Banco di Napoli"}},"amenity/bank|Banco di Sardegna":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banco di Sardegna","brand:wikidata":"Q806205","brand:wikipedia":"en:Banco di Sardegna",name:"Banco di Sardegna"}},"amenity/bank|Banco di Sicilia":{tags:{amenity:"bank",brand:"Banco di Sicilia",name:"Banco di Sicilia"}},"amenity/bank|Banco do Brasil":{countryCodes:["br"],tags:{amenity:"bank",brand:"Banco do Brasil","brand:wikidata":"Q610817","brand:wikipedia":"en:Banco do Brasil",name:"Banco do Brasil"}},"amenity/bank|Banco do Nordeste":{countryCodes:["br"],tags:{amenity:"bank",brand:"Banco do Nordeste","brand:wikidata":"Q4854137","brand:wikipedia":"en:Banco do Nordeste",name:"Banco do Nordeste"}},"amenity/bank|Bancolombia":{countryCodes:["co"],tags:{amenity:"bank",brand:"Bancolombia","brand:wikidata":"Q806206","brand:wikipedia":"en:Bancolombia",name:"Bancolombia"}},"amenity/bank|Bancomer":{countryCodes:["mx"],tags:{amenity:"bank",brand:"Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"Bancomer"}},"amenity/bank|Bancpost":{countryCodes:["ro"],nomatch:["amenity/bank|Postbank"],tags:{amenity:"bank",brand:"Bancpost","brand:wikidata":"Q4854143","brand:wikipedia":"ro:Bancpost",name:"Bancpost"}},"amenity/bank|Banesco":{tags:{amenity:"bank",brand:"Banesco","brand:wikidata":"Q4854841","brand:wikipedia":"en:Banesco",name:"Banesco"}},"amenity/bank|Bangkok Bank":{countryCodes:["th"],tags:{amenity:"bank",brand:"Bangkok Bank","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"Bangkok Bank"}},"amenity/bank|Bank Al Habib":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Bank Al Habib","brand:wikidata":"Q4034833","brand:wikipedia":"ur:بينک الحبيب لمیٹڈ",name:"Bank Al Habib"}},"amenity/bank|Bank Alfalah":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Bank Alfalah","brand:wikidata":"Q4855895","brand:wikipedia":"en:Bank Alfalah",name:"Bank Alfalah"}},"amenity/bank|Bank Austria":{countryCodes:["at"],tags:{amenity:"bank",brand:"Bank Austria","brand:wikidata":"Q697619","brand:wikipedia":"en:Bank Austria",name:"Bank Austria"}},"amenity/bank|Bank Danamon":{countryCodes:["id"],tags:{amenity:"bank",brand:"Bank Danamon","brand:wikidata":"Q4855913","brand:wikipedia":"en:Bank Danamon",name:"Bank Danamon"}},"amenity/bank|Bank Islam":{countryCodes:["my"],tags:{amenity:"bank",brand:"Bank Islam","brand:wikidata":"Q4115279","brand:wikipedia":"en:Bank Islam Malaysia",name:"Bank Islam"}},"amenity/bank|Bank Mandiri":{countryCodes:["id"],tags:{amenity:"bank",brand:"Bank Mandiri","brand:wikidata":"Q806639","brand:wikipedia":"en:Bank Mandiri",name:"Bank Mandiri"}},"amenity/bank|Bank Mandiri Syariah":{countryCodes:["id"],tags:{amenity:"bank",brand:"Bank Mandiri Syariah","brand:wikidata":"Q12474533","brand:wikipedia":"id:Bank Syariah Mandiri",name:"Bank Mandiri Syariah"}},"amenity/bank|Bank Mega":{countryCodes:["id"],tags:{amenity:"bank",brand:"Bank Mega","brand:wikidata":"Q12474504","brand:wikipedia":"id:Bank Mega",name:"Bank Mega"}},"amenity/bank|Bank Muamalat":{countryCodes:["id","my"],tags:{amenity:"bank",brand:"Bank Muamalat","brand:wikidata":"Q4855949","brand:wikipedia":"en:Bank Muamalat",name:"Bank Muamalat"}},"amenity/bank|Bank Pekao":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Bank Pekao","brand:wikidata":"Q806642","brand:wikipedia":"pl:Bank Polska Kasa Opieki",name:"Bank Pekao"}},"amenity/bank|Bank Rakyat":{countryCodes:["my"],tags:{amenity:"bank",brand:"Bank Rakyat","brand:wikidata":"Q4855964","brand:wikipedia":"ms:Bank Rakyat",name:"Bank Rakyat"}},"amenity/bank|Bank of Africa":{tags:{amenity:"bank",brand:"Bank of Africa","brand:wikidata":"Q2882627","brand:wikipedia":"en:Bank of Africa Group",name:"Bank of Africa",short_name:"BOA"}},"amenity/bank|Bank of America":{countryCodes:["us"],tags:{amenity:"bank",brand:"Bank of America","brand:wikidata":"Q487907","brand:wikipedia":"en:Bank of America",name:"Bank of America"}},"amenity/bank|Bank of Baroda":{tags:{amenity:"bank",brand:"Bank of Baroda","brand:wikidata":"Q2003797","brand:wikipedia":"en:Bank of Baroda",name:"Bank of Baroda"}},"amenity/bank|Bank of Ceylon":{countryCodes:["lk"],tags:{amenity:"bank",brand:"Bank of Ceylon","brand:wikidata":"Q2882652","brand:wikipedia":"en:Bank of Ceylon",name:"Bank of Ceylon"}},"amenity/bank|Bank of Commerce":{countryCodes:["ph"],tags:{amenity:"bank",brand:"Bank of Commerce","brand:wikidata":"Q4856092","brand:wikipedia":"en:Bank of Commerce",name:"Bank of Commerce"}},"amenity/bank|Bank of Cyprus":{countryCodes:["cy","gr"],tags:{amenity:"bank",brand:"Bank of Cyprus","brand:wikidata":"Q806678","brand:wikipedia":"en:Bank of Cyprus",name:"Bank of Cyprus"}},"amenity/bank|Bank of India":{tags:{amenity:"bank",brand:"Bank of India","brand:wikidata":"Q2004439","brand:wikipedia":"en:Bank of India",name:"Bank of India"}},"amenity/bank|Bank of Ireland":{countryCodes:["gb","ie"],tags:{amenity:"bank",brand:"Bank of Ireland","brand:wikidata":"Q806689","brand:wikipedia":"en:Bank of Ireland",name:"Bank of Ireland"}},"amenity/bank|Bank of Maharashtra":{countryCodes:["in"],tags:{amenity:"bank",brand:"Bank of Maharashtra","brand:wikidata":"Q2004304","brand:wikipedia":"en:Bank of Maharashtra",name:"Bank of Maharashtra"}},"amenity/bank|Bank of New Zealand":{countryCodes:["nz"],tags:{amenity:"bank",brand:"Bank of New Zealand","brand:wikidata":"Q806687","brand:wikipedia":"en:Bank of New Zealand",name:"Bank of New Zealand"}},"amenity/bank|Bank of Scotland":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Bank of Scotland","brand:wikidata":"Q627381","brand:wikipedia":"en:Bank of Scotland",name:"Bank of Scotland"}},"amenity/bank|Bank of the West":{countryCodes:["us"],tags:{amenity:"bank",brand:"Bank of the West","brand:wikidata":"Q2881919","brand:wikipedia":"en:Bank of the West",name:"Bank of the West"}},"amenity/bank|Bankia":{countryCodes:["es"],tags:{amenity:"bank",brand:"Bankia","brand:wikidata":"Q806807","brand:wikipedia":"en:Bankia",name:"Bankia"}},"amenity/bank|Bankinter":{countryCodes:["es","pt"],nomatch:["amenity/bank|Interbank"],tags:{amenity:"bank",brand:"Bankinter","brand:wikidata":"Q806808","brand:wikipedia":"es:Bankinter",name:"Bankinter"}},"amenity/bank|Bankwest":{countryCodes:["au"],tags:{amenity:"bank",brand:"Bankwest","brand:wikidata":"Q4856817","brand:wikipedia":"en:Bankwest",name:"Bankwest"}},"amenity/bank|Banner Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Banner Bank","brand:wikidata":"Q4856910","brand:wikipedia":"en:Banner Bank",name:"Banner Bank"}},"amenity/bank|Banorte":{countryCodes:["mx"],tags:{amenity:"bank",brand:"Banorte","brand:wikidata":"Q806914","brand:wikipedia":"en:Banorte",name:"Banorte"}},"amenity/bank|Banque Atlantique":{tags:{amenity:"bank",brand:"Banque Atlantique","brand:wikidata":"Q2882890","brand:wikipedia":"en:Atlantic Bank Group",name:"Banque Atlantique"}},"amenity/bank|Banque Laurentienne":{countryCodes:["ca"],tags:{amenity:"bank",brand:"Banque Laurentienne","brand:wikidata":"Q1360087","brand:wikipedia":"en:Laurentian Bank of Canada",name:"Banque Laurentienne"}},"amenity/bank|Banque Populaire~(France)":{tags:{amenity:"bank",brand:"Banque Populaire","brand:wikidata":"Q846647","brand:wikipedia":"fr:Banque populaire",name:"Banque Populaire"}},"amenity/bank|Banque Populaire~(Maroc)":{countryCodes:["de","es","fr","gb","it","ma","nl"],tags:{amenity:"bank",brand:"Banque Populaire","brand:wikidata":"Q2883441","brand:wikipedia":"en:Banque Populaire du Maroc",name:"Banque Populaire"}},"amenity/bank|Banque de France":{tags:{amenity:"bank",brand:"Banque de France","brand:wikidata":"Q806950","brand:wikipedia":"en:Bank of France",name:"Banque de France"}},"amenity/bank|Banque de l'Habitat du Mali":{countryCodes:["ml"],tags:{amenity:"bank",brand:"Banque de l'Habitat du Mali","brand:wikidata":"Q4857076","brand:wikipedia":"en:Banque de l'Habitat du Mali",name:"Banque de l'Habitat du Mali"}},"amenity/bank|Banrisul":{countryCodes:["br"],tags:{amenity:"bank",brand:"Banrisul","brand:wikidata":"Q4857098","brand:wikipedia":"en:Banrisul",name:"Banrisul"}},"amenity/bank|Banrural":{countryCodes:["gt","hn"],tags:{amenity:"bank",brand:"Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banrural"}},"amenity/bank|Barclays":{matchNames:["barclays bank"],tags:{amenity:"bank",brand:"Barclays","brand:wikidata":"Q245343","brand:wikipedia":"en:Barclays",name:"Barclays"}},"amenity/bank|Bcc":{countryCodes:["it"],tags:{amenity:"bank",brand:"Bcc","brand:wikidata":"Q25060394","brand:wikipedia":"en:Banca di Credito Cooperativo di Roma",name:"Bcc"}},"amenity/bank|Belfius":{countryCodes:["be"],tags:{amenity:"bank",brand:"Belfius","brand:wikidata":"Q1956014","brand:wikipedia":"en:Belfius",name:"Belfius"}},"amenity/bank|Bendigo Bank":{countryCodes:["au"],tags:{amenity:"bank",brand:"Bendigo Bank","brand:wikidata":"Q4887077","brand:wikipedia":"en:Bendigo and Adelaide Bank",name:"Bendigo Bank"}},"amenity/bank|Berliner Volksbank":{countryCodes:["de"],tags:{amenity:"bank",brand:"Berliner Volksbank","brand:wikidata":"Q821855","brand:wikipedia":"de:Berliner Volksbank",name:"Berliner Volksbank"}},"amenity/bank|Bicentenario":{countryCodes:["ve"],tags:{amenity:"bank",brand:"Bicentenario","brand:wikidata":"Q5728123","brand:wikipedia":"es:Bicentenario Banco Universal",name:"Bicentenario"}},"amenity/bank|Bicici":{countryCodes:["ci"],matchNames:["agence bicici"],tags:{amenity:"bank",brand:"Bicici","brand:wikidata":"Q1667302","brand:wikipedia":"fr:Banque internationale pour le commerce et l'industrie de la Côte d'Ivoire",name:"Bicici"}},"amenity/bank|Bradesco":{countryCodes:["br"],matchNames:["banco bradesco"],tags:{amenity:"bank",brand:"Bradesco","brand:wikidata":"Q806181","brand:wikipedia":"en:Banco Bradesco",name:"Bradesco"}},"amenity/bank|Budapest Bank":{countryCodes:["hu"],tags:{amenity:"bank",brand:"Budapest Bank","brand:wikidata":"Q27493463","brand:wikipedia":"en:Budapest Bank",name:"Budapest Bank"}},"amenity/bank|CBAO":{countryCodes:["sn"],tags:{amenity:"bank",brand:"CBAO","brand:wikidata":"Q532104","brand:wikipedia":"fr:CBAO Groupe Attijariwafa bank",name:"CBAO"}},"amenity/bank|CEC Bank":{countryCodes:["ro"],tags:{amenity:"bank",brand:"CEC Bank","brand:wikidata":"Q1023306","brand:wikipedia":"en:CEC Bank",name:"CEC Bank"}},"amenity/bank|CIB Bank":{tags:{amenity:"bank",brand:"CIB Bank","brand:wikidata":"Q839566","brand:wikipedia":"en:CIB Bank",name:"CIB Bank"}},"amenity/bank|CIBC":{countryCodes:["ca"],matchNames:["cibc banking centre"],tags:{amenity:"bank",brand:"CIBC","brand:wikidata":"Q666694","brand:wikipedia":"en:Canadian Imperial Bank of Commerce",name:"CIBC"}},"amenity/bank|CIC":{countryCodes:["fr"],tags:{amenity:"bank",brand:"CIC","brand:wikidata":"Q746525","brand:wikipedia":"en:Crédit Industriel et Commercial",name:"CIC"}},"amenity/bank|CIH Bank":{countryCodes:["ma"],tags:{amenity:"bank",brand:"CIH Bank","brand:wikidata":"Q3006220","brand:wikipedia":"en:CIH Bank",name:"CIH Bank"}},"amenity/bank|CIMB Bank":{countryCodes:["my"],tags:{amenity:"bank",brand:"CIMB Bank","brand:wikidata":"Q3045976","brand:wikipedia":"en:CIMB",name:"CIMB Bank"}},"amenity/bank|CIMB Niaga":{countryCodes:["id"],tags:{amenity:"bank",brand:"CIMB Niaga","brand:wikidata":"Q5011747","brand:wikipedia":"en:CIMB Niaga",name:"CIMB Niaga"}},"amenity/bank|CNEP":{countryCodes:["dz"],tags:{amenity:"bank",brand:"CNEP","brand:wikidata":"Q2931752","brand:wikipedia":"fr:CNEP-Banque",name:"CNEP"}},"amenity/bank|CRDB Bank":{countryCodes:["tz"],tags:{amenity:"bank",brand:"CRDB Bank","brand:wikidata":"Q5013848","brand:wikipedia":"en:CRDB Bank",name:"CRDB Bank"}},"amenity/bank|Caisse d'Épargne":{tags:{amenity:"bank",brand:"Caisse d'Épargne","brand:wikidata":"Q1547738","brand:wikipedia":"fr:Caisse d'épargne (banque)",name:"Caisse d'Épargne"}},"amenity/bank|Caixa Econômica Federal~(Brazil)":{countryCodes:["br"],matchNames:["caixa","caixabank"],nomatch:["amenity/bank|Caixabank~(Spain)"],tags:{amenity:"bank",brand:"Caixa Econômica Federal","brand:wikidata":"Q835283","brand:wikipedia":"pt:Caixa Econômica Federal",name:"Caixa Econômica Federal"}},"amenity/bank|Caixa Geral de Depósitos":{countryCodes:["es","fr","pt"],tags:{amenity:"bank",brand:"Caixa Geral de Depósitos","brand:wikidata":"Q1026044","brand:wikipedia":"pt:Caixa Geral de Depósitos",name:"Caixa Geral de Depósitos"}},"amenity/bank|Caixabank~(Spain)":{countryCodes:["es"],nomatch:["amenity/bank|Caixa Econômica Federal~(Brazil)"],tags:{amenity:"bank",brand:"Caixabank","brand:wikidata":"Q847225","brand:wikipedia":"en:CaixaBank",name:"Caixabank"}},"amenity/bank|Caja Duero":{countryCodes:["es"],tags:{amenity:"bank",brand:"Caja Duero","brand:wikidata":"Q3821055","brand:wikipedia":"es:Caja Duero",name:"Caja Duero"}},"amenity/bank|Caja España":{countryCodes:["es"],tags:{amenity:"bank",brand:"Caja España","brand:wikidata":"Q966985","brand:wikipedia":"es:Caja España",name:"Caja España"}},"amenity/bank|Caja Rural":{countryCodes:["es"],tags:{amenity:"bank",brand:"Caja Rural","brand:wikidata":"Q3649971","brand:wikipedia":"es:Caja Rural",name:"Caja Rural"}},"amenity/bank|Caja Rural de Jaén":{countryCodes:["es"],tags:{amenity:"bank",brand:"Caja Rural de Jaén","brand:wikidata":"Q18720350","brand:wikipedia":"es:Caja Rural de Jaén",name:"Caja Rural de Jaén"}},"amenity/bank|CajaSur":{countryCodes:["es"],tags:{amenity:"bank",brand:"CajaSur","brand:wikidata":"Q3751637","brand:wikipedia":"en:CajaSur",name:"CajaSur"}},"amenity/bank|Cajamar":{countryCodes:["es"],tags:{amenity:"bank",brand:"Cajamar","brand:wikidata":"Q8254971","brand:wikipedia":"es:Cajamar",name:"Cajamar"}},"amenity/bank|California Coast Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"California Coast Credit Union","brand:wikidata":"Q25025281","brand:wikipedia":"en:California Coast Credit Union",name:"California Coast Credit Union"}},"amenity/bank|Canara Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Canara Bank","brand:wikidata":"Q2003777","brand:wikipedia":"en:Canara Bank",name:"Canara Bank"}},"amenity/bank|Capital Bank":{tags:{amenity:"bank",brand:"Capital Bank","brand:wikidata":"Q5035481","brand:wikipedia":"en:Capital Bank Financial",name:"Capital Bank"}},"amenity/bank|Capital One":{countryCodes:["us"],matchNames:["capital one bank"],tags:{amenity:"bank",brand:"Capital One","brand:wikidata":"Q1034654","brand:wikipedia":"en:Capital One",name:"Capital One"}},"amenity/bank|Carige":{countryCodes:["it"],tags:{amenity:"bank",brand:"Carige","brand:wikidata":"Q3633695","brand:wikipedia":"en:Banca Carige",name:"Carige"}},"amenity/bank|Cariparma":{countryCodes:["it"],tags:{amenity:"bank",brand:"Cariparma","brand:wikidata":"Q2938832","brand:wikipedia":"en:Crédit Agricole Italia",name:"Cariparma"}},"amenity/bank|Carisbo":{countryCodes:["it"],tags:{amenity:"bank",brand:"Carisbo","brand:wikidata":"Q3661937","brand:wikipedia":"en:Cassa di Risparmio in Bologna",name:"Carisbo"}},"amenity/bank|Casden":{countryCodes:["fr"],tags:{amenity:"bank",brand:"Casden","brand:wikidata":"Q2930976","brand:wikipedia":"fr:CASDEN Banque populaire",name:"Casden"}},"amenity/bank|Cassa di Risparmio del Veneto":{countryCodes:["it"],tags:{amenity:"bank",brand:"Cassa di Risparmio del Veneto","brand:wikidata":"Q3661909","brand:wikipedia":"en:Cassa di Risparmio del Veneto",name:"Cassa di Risparmio del Veneto"}},"amenity/bank|CatalunyaCaixa":{countryCodes:["es"],tags:{amenity:"bank",brand:"CatalunyaCaixa","brand:wikidata":"Q3750952","brand:wikipedia":"en:CatalunyaCaixa",name:"CatalunyaCaixa"}},"amenity/bank|Cathay Bank":{countryCodes:["cn","tw","us"],tags:{amenity:"bank",brand:"Cathay Bank","brand:wikidata":"Q4189507","brand:wikipedia":"en:Cathay Bank",name:"Cathay Bank"}},"amenity/bank|Central Bank":{tags:{amenity:"bank",brand:"Central Bank",name:"Central Bank"}},"amenity/bank|Central Bank of India":{countryCodes:["in"],tags:{amenity:"bank",brand:"Central Bank of India","brand:wikidata":"Q2007090","brand:wikipedia":"en:Central Bank of India",name:"Central Bank of India"}},"amenity/bank|Chase":{matchNames:["chase bank"],tags:{amenity:"bank",brand:"Chase","brand:wikidata":"Q524629","brand:wikipedia":"en:Chase Bank",name:"Chase"}},"amenity/bank|China Bank":{tags:{amenity:"bank",brand:"China Bank","brand:wikidata":"Q5100080","brand:wikipedia":"en:Chinabank",name:"China Bank"}},"amenity/bank|China Bank Savings":{countryCodes:["ph"],tags:{amenity:"bank",brand:"China Bank Savings","brand:wikidata":"Q18387359","brand:wikipedia":"en:China Bank Savings",name:"China Bank Savings"}},"amenity/bank|China Construction Bank":{tags:{amenity:"bank",brand:"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"China Construction Bank",short_name:"CCB"}},"amenity/bank|Citibank":{tags:{amenity:"bank",brand:"Citibank","brand:wikidata":"Q857063","brand:wikipedia":"en:Citibank",name:"Citibank",short_name:"Citi"}},"amenity/bank|Citizens Bank~(Eastern USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Citizens Bank","brand:wikidata":"Q5122694","brand:wikipedia":"en:Citizens Financial Group",name:"Citizens Bank",short_name:"Citizens"}},"amenity/bank|Citizens Bank~(Kentucky)":{countryCodes:["us"],tags:{alt_name:"Citizens Bank of Kentucky",amenity:"bank",brand:"Citizens Bank","brand:wikidata":"Q5122711","brand:wikipedia":"en:Citizens National Bank (Eastern Kentucky)",name:"Citizens Bank",official_name:"Citizens National Bank",short_name:"Citizens"}},"amenity/bank|Citizens Bank~(Nepal)":{countryCodes:["np"],tags:{amenity:"bank",brand:"Citizens Bank International","brand:wikidata":"Q13186934","brand:wikipedia":"en:Citizens Bank International",name:"Citizens Bank",official_name:"Citizens Bank International Ltd.",short_name:"Citizens"}},"amenity/bank|City National Bank~(California)":{countryCodes:["us"],tags:{amenity:"bank",brand:"City National Bank","brand:wikidata":"Q5123314","brand:wikipedia":"en:City National Bank (California)",name:"City National Bank"}},"amenity/bank|City National Bank~(Florida)":{countryCodes:["us"],tags:{amenity:"bank",brand:"City National Bank","brand:wikidata":"Q16958644","brand:wikipedia":"en:City National Bank of Florida",name:"City National Bank",official_name:"City National Bank of Florida"}},"amenity/bank|Clydesdale Bank":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Clydesdale Bank","brand:wikidata":"Q971680","brand:wikipedia":"en:Clydesdale Bank",name:"Clydesdale Bank"}},"amenity/bank|Coast Capital Savings":{countryCodes:["ca"],matchNames:["coast capital","coast capital savings credit union"],tags:{amenity:"bank",brand:"Coast Capital Savings","brand:wikidata":"Q5138088","brand:wikipedia":"en:Coast Capital Savings",name:"Coast Capital Savings",official_name:"Coast Capital Savings Federal Credit Union"}},"amenity/bank|Columbia Bank~(New Jersey)":{countryCodes:["us"],nomatch:["amenity/bank|Columbia Bank~(Washington)","shop/clothes|Columbia"],tags:{amenity:"bank",brand:"Columbia Bank","brand:wikidata":"Q62084096",name:"Columbia Bank"}},"amenity/bank|Columbia Bank~(Washington)":{countryCodes:["us"],nomatch:["amenity/bank|Columbia Bank~(New Jersey)","shop/clothes|Columbia"],tags:{amenity:"bank",brand:"Columbia Bank","brand:wikidata":"Q62084089",name:"Columbia Bank"}},"amenity/bank|Comerica Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Comerica Bank","brand:wikidata":"Q1114148","brand:wikipedia":"en:Comerica",name:"Comerica Bank"}},"amenity/bank|Commerce Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Commerce Bank","brand:wikidata":"Q5152411","brand:wikipedia":"en:Commerce Bancshares",name:"Commerce Bank"}},"amenity/bank|Commercial Bank":{tags:{amenity:"bank",brand:"Commercial Bank",name:"Commercial Bank"}},"amenity/bank|Commercial Bank of Ceylon PLC":{countryCodes:["lk"],tags:{amenity:"bank",brand:"Commercial Bank of Ceylon PLC","brand:wikidata":"Q5152468","brand:wikipedia":"en:Commercial Bank of Ceylon",name:"Commercial Bank of Ceylon PLC"}},"amenity/bank|Commerzbank":{countryCodes:["de"],tags:{amenity:"bank",brand:"Commerzbank","brand:wikidata":"Q157617","brand:wikipedia":"en:Commerzbank",name:"Commerzbank"}},"amenity/bank|Commonwealth Bank":{tags:{amenity:"bank",brand:"Commonwealth Bank","brand:wikidata":"Q285328","brand:wikipedia":"en:Commonwealth Bank",name:"Commonwealth Bank"}},"amenity/bank|Community Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Community Bank","brand:wikidata":"Q5154635","brand:wikipedia":"en:Community Bank, N.A.",name:"Community Bank"}},"amenity/bank|Corporation Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Corporation Bank","brand:wikidata":"Q2003387","brand:wikipedia":"en:Corporation Bank",name:"Corporation Bank"}},"amenity/bank|Credem":{countryCodes:["it"],tags:{amenity:"bank",brand:"Credem","brand:wikidata":"Q3696881","brand:wikipedia":"en:Credito Emiliano",name:"Credem"}},"amenity/bank|Credicoop":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Credicoop","brand:wikidata":"Q4854086","brand:wikipedia":"en:Banco Credicoop",name:"Credicoop"}},"amenity/bank|Credit Suisse":{countryCodes:["ch"],tags:{amenity:"bank",brand:"Credit Suisse","brand:wikidata":"Q372657","brand:wikipedia":"en:Credit Suisse",name:"Credit Suisse"}},"amenity/bank|Credito Valtellinese":{countryCodes:["it"],tags:{amenity:"bank",brand:"Credito Valtellinese","brand:wikidata":"Q3696888","brand:wikipedia":"en:Credito Valtellinese",name:"Credito Valtellinese"}},"amenity/bank|Crelan":{countryCodes:["be"],tags:{amenity:"bank",brand:"Crelan","brand:wikidata":"Q389872","brand:wikipedia":"en:Crelan",name:"Crelan"}},"amenity/bank|Crédit Agricole":{tags:{amenity:"bank",brand:"Crédit Agricole","brand:wikidata":"Q590952","brand:wikipedia":"fr:Crédit agricole",name:"Crédit Agricole"}},"amenity/bank|Crédit Maritime":{countryCodes:["fr"],tags:{amenity:"bank",brand:"Crédit Maritime","brand:wikidata":"Q17176866","brand:wikipedia":"fr:Crédit maritime",name:"Crédit Maritime"}},"amenity/bank|Crédit Mutuel":{tags:{amenity:"bank",brand:"Crédit Mutuel","brand:wikidata":"Q642627","brand:wikipedia":"en:Crédit Mutuel",name:"Crédit Mutuel"}},"amenity/bank|Crédit Mutuel de Bretagne":{countryCodes:["fr"],tags:{amenity:"bank",brand:"Crédit Mutuel de Bretagne","brand:wikidata":"Q3006236","brand:wikipedia":"fr:Crédit mutuel Arkéa",name:"Crédit Mutuel de Bretagne"}},"amenity/bank|Crédit du Nord":{countryCodes:["fr"],tags:{amenity:"bank",brand:"Crédit du Nord","brand:wikidata":"Q3006209","brand:wikipedia":"en:Crédit du Nord",name:"Crédit du Nord"}},"amenity/bank|Crédito Agrícola":{countryCodes:["pt"],tags:{amenity:"bank",brand:"Crédito Agrícola","brand:wikidata":"Q10262017","brand:wikipedia":"pt:Crédito Agrícola",name:"Crédito Agrícola"}},"amenity/bank|Danske Bank":{countryCodes:["dk","fi","gb","lt","no","se"],tags:{amenity:"bank",brand:"Danske Bank","brand:wikidata":"Q1636974","brand:wikipedia":"en:Danske Bank",name:"Danske Bank"}},"amenity/bank|Davivienda":{countryCodes:["co","cr","hn","pa","sv"],matchNames:["banco davivienda"],tags:{amenity:"bank",brand:"Davivienda","brand:wikidata":"Q5242054","brand:wikipedia":"es:Davivienda",name:"Davivienda"}},"amenity/bank|Denizbank":{tags:{amenity:"bank",brand:"Denizbank","brand:wikidata":"Q1115064","brand:wikipedia":"en:DenizBank",name:"Denizbank"}},"amenity/bank|Desjardins":{countryCodes:["ca"],matchNames:["caisse desjardins"],tags:{amenity:"bank",brand:"Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Desjardins"}},"amenity/bank|Deutsche Bank":{tags:{amenity:"bank",brand:"Deutsche Bank","brand:wikidata":"Q66048","brand:wikipedia":"en:Deutsche Bank",name:"Deutsche Bank"}},"amenity/bank|Dollar Bank":{countryCodes:["us"],nomatch:["amenity/car_rental|Dollar","shop/variety_store|Dollar General","shop/variety_store|Dollar Tree","shop/variety_store|Dollarama","shop/variety_store|Family Dollar"],tags:{amenity:"bank",brand:"Dollar Bank","brand:wikidata":"Q5289205","brand:wikipedia":"en:Dollar Bank",name:"Dollar Bank"}},"amenity/bank|Dubai Islamic Bank":{tags:{amenity:"bank",brand:"Dubai Islamic Bank","brand:wikidata":"Q5310570","brand:wikipedia":"en:Dubai Islamic Bank",name:"Dubai Islamic Bank"}},"amenity/bank|EastWest Unibank":{countryCodes:["ph"],matchNames:["eastwest bank"],tags:{amenity:"bank",brand:"EastWest Unibank","brand:wikidata":"Q5327595","brand:wikipedia":"en:EastWest Bank",name:"EastWest Unibank"}},"amenity/bank|Ecobank":{matchNames:["agence ecobank"],tags:{amenity:"bank",brand:"Ecobank","brand:wikidata":"Q930225","brand:wikipedia":"en:Ecobank",name:"Ecobank"}},"amenity/bank|Emigrant Savings Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Emigrant Savings Bank","brand:wikidata":"Q5371104","brand:wikipedia":"en:Emigrant Savings Bank",name:"Emigrant Savings Bank"}},"amenity/bank|Emirates NBD":{countryCodes:["ae"],tags:{amenity:"bank",brand:"Emirates NBD","brand:wikidata":"Q5372575","brand:wikipedia":"en:Emirates NBD",name:"Emirates NBD"}},"amenity/bank|Equity Bank~(Congo)":{countryCodes:["cd"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q21178738","brand:wikipedia":"en:Equity Bank Congo",name:"Equity Bank"}},"amenity/bank|Equity Bank~(Kenya)":{countryCodes:["ke"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384664","brand:wikipedia":"en:Equity Bank Kenya Limited",name:"Equity Bank"}},"amenity/bank|Equity Bank~(Rwanda)":{countryCodes:["rw"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384665","brand:wikipedia":"en:Equity Bank Rwanda Limited",name:"Equity Bank"}},"amenity/bank|Equity Bank~(South Sudan)":{countryCodes:["ss"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384666","brand:wikipedia":"en:Equity Bank South Sudan Limited",name:"Equity Bank"}},"amenity/bank|Equity Bank~(Tanzania)":{countryCodes:["tz"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384667","brand:wikipedia":"en:Equity Bank Tanzania Limited",name:"Equity Bank"}},"amenity/bank|Equity Bank~(USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q62260414","brand:wikipedia":"en:Equity Bank USA",name:"Equity Bank"}},"amenity/bank|Equity Bank~(Uganda)":{countryCodes:["ug"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384668","brand:wikipedia":"en:Equity Bank Uganda Limited",name:"Equity Bank"}},"amenity/bank|Erste Bank":{countryCodes:["at","hr","hu","rs"],tags:{amenity:"bank",brand:"Erste Bank","brand:wikidata":"Q696867","brand:wikipedia":"de:Erste Bank",name:"Erste Bank"}},"amenity/bank|EuroBic":{countryCodes:["pt"],matchNames:["banco bic"],tags:{amenity:"bank",brand:"EuroBic","brand:wikidata":"Q806175","brand:wikipedia":"pt:EuroBic",name:"EuroBic",official_name:"Banco BIC Português"}},"amenity/bank|Eurobank~(Greece)":{countryCodes:["gr"],matchNames:["eurobank ergasias"],tags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q951850","brand:wikipedia":"el:Eurobank",name:"Eurobank"}},"amenity/bank|Eurobank~(Poland)":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q9256201","brand:wikipedia":"pl:Euro Bank",name:"Eurobank"}},"amenity/bank|Eurobank~(Serbia)":{countryCodes:["rs"],tags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q5411684","brand:wikipedia":"sr:Eurobanka",name:"Eurobank"}},"amenity/bank|FNB~(South Africa)":{countryCodes:["bw","mz","na","us","za","zm"],tags:{amenity:"bank",brand:"FNB","brand:wikidata":"Q3072956","brand:wikipedia":"en:First National Bank (South Africa)",name:"FNB",official_name:"First National Bank"}},"amenity/bank|Faysal Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Faysal Bank","brand:wikidata":"Q5439099","brand:wikipedia":"en:Faysal Bank",name:"Faysal Bank"}},"amenity/bank|Federal Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Federal Bank","brand:wikidata":"Q2044983","brand:wikipedia":"en:Federal Bank",name:"Federal Bank"}},"amenity/bank|Fidelity Bank~(Ghana)":{countryCodes:["gh"],tags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q5446778","brand:wikipedia":"en:Fidelity Bank Ghana",name:"Fidelity Bank"}},"amenity/bank|Fidelity Bank~(Nigeria)":{countryCodes:["ng"],tags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q5446777","brand:wikipedia":"en:Fidelity Bank Nigeria",name:"Fidelity Bank"}},"amenity/bank|Fidelity Bank~(USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q1411292","brand:wikipedia":"en:Fidelity Investments",name:"Fidelity Bank"}},"amenity/bank|Fifth Third Bank":{countryCodes:["us"],matchNames:["5/3"],tags:{amenity:"bank",brand:"Fifth Third Bank","brand:wikidata":"Q1411810","brand:wikipedia":"en:Fifth Third Bank",name:"Fifth Third Bank",short_name:"5/3 Bank"}},"amenity/bank|Finansbank":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Finansbank","brand:wikidata":"Q1416237","brand:wikipedia":"en:Finansbank",name:"Finansbank"}},"amenity/bank|First Bank~(North and South Carolina)":{countryCodes:["us"],matchNames:["1st bancorp","1st bank","first bancorp"],tags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452332","brand:wikipedia":"en:First Bancorp",name:"First Bank"}},"amenity/bank|First Bank~(Puerto Rico)":{countryCodes:["us"],matchNames:["1st bancorp","1st bank","first bancorp"],tags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452333","brand:wikipedia":"en:First BanCorp",name:"First Bank"}},"amenity/bank|First Bank~(Western USA)":{countryCodes:["us"],matchNames:["1st bank"],tags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452217","brand:wikipedia":"en:FirstBank Holding Co",name:"First Bank",short_name:"1STBank"}},"amenity/bank|First Citizens Bank~(Trinidad and Tobago)":{countryCodes:["bb","tt"],matchNames:["1st citizens bank"],tags:{amenity:"bank",brand:"First Citizens Bank","brand:wikidata":"Q5452734","brand:wikipedia":"en:First Citizens Bank (Trinidad and Tobago)",name:"First Citizens Bank"}},"amenity/bank|First Citizens Bank~(USA)":{countryCodes:["us"],matchNames:["1st citizens bank"],tags:{amenity:"bank",brand:"First Citizens Bank","brand:wikidata":"Q5452733","brand:wikipedia":"en:First Citizens BancShares",name:"First Citizens Bank"}},"amenity/bank|First Financial Bank":{countryCodes:["us"],matchNames:["1st financial bank"],tags:{amenity:"bank",brand:"First Financial Bank","brand:wikidata":"Q5453009","brand:wikipedia":"en:First Financial Bank (Ohio)",name:"First Financial Bank"}},"amenity/bank|First Interstate Bank":{countryCodes:["us"],matchNames:["1st interstate","1st interstate bancsystem","1st interstate bank","first interstate","first interstate bancsystem"],tags:{amenity:"bank",brand:"First Interstate BancSystem","brand:wikidata":"Q5453107","brand:wikipedia":"en:First Interstate BancSystem",name:"First Interstate Bank"}},"amenity/bank|First Midwest Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"First Midwest Bank","brand:wikidata":"Q5453331","brand:wikipedia":"en:First Midwest Bank",name:"First Midwest Bank"}},"amenity/bank|First National Bank~(USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"First National Bank","brand:wikidata":"Q5426765","brand:wikipedia":"en:F.N.B. Corporation",name:"First National Bank"}},"amenity/bank|First State Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"First State Bank",name:"First State Bank"}},"amenity/bank|First West Credit Union":{countryCodes:["ca"],tags:{alt_name:"First West",amenity:"bank",brand:"First West Credit Union","brand:wikidata":"Q5454073","brand:wikipedia":"en:First West Credit Union",name:"First West Credit Union"}},"amenity/bank|Frost Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Frost Bank","brand:wikidata":"Q5506152","brand:wikipedia":"en:Frost Bank",name:"Frost Bank"}},"amenity/bank|Fulton Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Fulton Bank","brand:wikidata":"Q16976594",name:"Fulton Bank"}},"amenity/bank|GCB Bank":{countryCodes:["gh"],tags:{amenity:"bank",brand:"GCB Bank","brand:wikidata":"Q1521346","brand:wikipedia":"en:GCB Bank",name:"GCB Bank"}},"amenity/bank|GT Bank":{tags:{amenity:"bank",brand:"GT Bank",name:"GT Bank"}},"amenity/bank|Galicia":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Galicia","brand:wikidata":"Q5717952","brand:wikipedia":"es:Banco Galicia",name:"Galicia"}},"amenity/bank|Garanti":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Garanti","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti"}},"amenity/bank|Garanti Bankası":{tags:{amenity:"bank",brand:"Garanti Bankası","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti Bankası"}},"amenity/bank|Getin Bank":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Getin Bank","brand:wikidata":"Q9267646","brand:wikipedia":"pl:Getin Bank",name:"Getin Bank"}},"amenity/bank|Golden 1 Credit Union":{countryCodes:["us"],matchNames:["golden 1","golden one","golden one credit union","the golden 1 credit union","the golden one credit union"],tags:{amenity:"bank",brand:"Golden 1 Credit Union","brand:wikidata":"Q7736976","brand:wikipedia":"en:Golden 1 Credit Union",name:"Golden 1 Credit Union"}},"amenity/bank|Great Western Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Great Western Bank","brand:wikidata":"Q5600185","brand:wikipedia":"en:Great Western Bank (1907–present)",name:"Great Western Bank"}},"amenity/bank|Groupama":{tags:{amenity:"bank",brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"en:Groupama",name:"Groupama"}},"amenity/bank|HBL Bank":{countryCodes:["pk"],matchNames:["hbl"],tags:{amenity:"bank",brand:"HBL Bank","brand:wikidata":"Q1566843","brand:wikipedia":"ur:ایچ بی ایل پاکستان",name:"HBL Bank"}},"amenity/bank|HDFC Bank":{tags:{amenity:"bank",brand:"HDFC Bank","brand:wikidata":"Q631047","brand:wikipedia":"en:HDFC Bank",name:"HDFC Bank"}},"amenity/bank|HNB":{tags:{amenity:"bank",brand:"HNB","brand:wikidata":"Q3532080","brand:wikipedia":"en:Hatton National Bank",name:"HNB"}},"amenity/bank|HSBC UK~(UK)":{countryCodes:["gb"],matchNames:["hsbc"],tags:{amenity:"bank",brand:"HSBC UK","brand:wikidata":"Q64767453",name:"HSBC UK"}},"amenity/bank|HSBC~(Global)":{tags:{amenity:"bank",brand:"HSBC","brand:wikidata":"Q190464","brand:wikipedia":"en:HSBC",name:"HSBC"}},"amenity/bank|Halifax":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Halifax","brand:wikidata":"Q3310164","brand:wikipedia":"en:Halifax (bank)",name:"Halifax"}},"amenity/bank|Halkbank":{tags:{amenity:"bank",brand:"Halkbank","brand:wikidata":"Q3593818","brand:wikipedia":"en:Halkbank a.d.",name:"Halkbank"}},"amenity/bank|Hamburger Sparkasse":{countryCodes:["de"],tags:{amenity:"bank",brand:"Hamburger Sparkasse","brand:wikidata":"Q1573140","brand:wikipedia":"de:Hamburger Sparkasse",name:"Hamburger Sparkasse",short_name:"Haspa"}},"amenity/bank|Handelsbanken":{countryCodes:["dk","fi","gb","no","se"],tags:{amenity:"bank",brand:"Handelsbanken","brand:wikidata":"Q1421630","brand:wikipedia":"en:Handelsbanken",name:"Handelsbanken"}},"amenity/bank|Heritage Bank":{tags:{amenity:"bank",brand:"Heritage Bank","brand:wikidata":"Q5738690","brand:wikipedia":"en:Heritage Bank",name:"Heritage Bank"}},"amenity/bank|Hong Leong Bank":{countryCodes:["my"],tags:{amenity:"bank",brand:"Hong Leong Bank","brand:wikidata":"Q4383943","brand:wikipedia":"en:Hong Leong Bank",name:"Hong Leong Bank"}},"amenity/bank|Hrvatska poštanska banka":{countryCodes:["hr"],tags:{amenity:"bank",brand:"Hrvatska poštanska banka","brand:wikidata":"Q5923981","brand:wikipedia":"en:Hrvatska poštanska banka",name:"Hrvatska poštanska banka"}},"amenity/bank|Huntington Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Huntington Bank","brand:wikidata":"Q798819","brand:wikipedia":"en:Huntington Bancshares",name:"Huntington Bank"}},"amenity/bank|HypoVereinsbank":{countryCodes:["de"],tags:{amenity:"bank",brand:"HypoVereinsbank","brand:wikidata":"Q220189","brand:wikipedia":"en:HypoVereinsbank",name:"HypoVereinsbank"}},"amenity/bank|ICBC":{tags:{amenity:"bank",brand:"ICBC","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"ICBC"}},"amenity/bank|ICICI Bank":{countryCodes:["ca","gb","in"],tags:{amenity:"bank",brand:"ICICI Bank","brand:wikidata":"Q1653258","brand:wikipedia":"en:ICICI Bank",name:"ICICI Bank"}},"amenity/bank|IDBI Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"IDBI Bank","brand:wikidata":"Q3633485","brand:wikipedia":"en:IDBI Bank",name:"IDBI Bank"}},"amenity/bank|ING":{matchNames:["ing bank"],tags:{amenity:"bank",brand:"ING","brand:wikidata":"Q645708","brand:wikipedia":"en:ING Group",name:"ING"}},"amenity/bank|ING Bank Śląski":{countryCodes:["pl"],tags:{amenity:"bank",brand:"ING Bank Śląski","brand:wikidata":"Q1410383","brand:wikipedia":"pl:ING Bank Śląski",name:"ING Bank Śląski"}},"amenity/bank|Ibercaja":{countryCodes:["es"],tags:{amenity:"bank",brand:"Ibercaja","brand:wikidata":"Q5907815","brand:wikipedia":"es:Ibercaja (banco)",name:"Ibercaja"}},"amenity/bank|Indian Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Indian Bank","brand:wikidata":"Q2003789","brand:wikipedia":"en:Indian Bank",name:"Indian Bank"}},"amenity/bank|Indian Overseas Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Indian Overseas Bank","brand:wikidata":"Q2003611","brand:wikipedia":"en:Indian Overseas Bank",name:"Indian Overseas Bank"}},"amenity/bank|Interbank":{nomatch:["amenity/bank|Bankinter"],tags:{amenity:"bank",brand:"Interbank","brand:wikidata":"Q2835558","brand:wikipedia":"es:Interbank",name:"Interbank"}},"amenity/bank|Intesa Sanpaolo":{tags:{amenity:"bank",brand:"Intesa Sanpaolo","brand:wikidata":"Q1343118","brand:wikipedia":"it:Intesa Sanpaolo",name:"Intesa Sanpaolo"}},"amenity/bank|Investors Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Investors Bank","brand:wikidata":"Q15109896","brand:wikipedia":"en:Investors Bank",name:"Investors Bank"}},"amenity/bank|Itaú~(Brazil)":{countryCodes:["br"],matchNames:["banco itau"],nomatch:["amenity/bank|Itaú~(Chile)"],tags:{amenity:"bank",brand:"Itaú Unibanco","brand:wikidata":"Q1424293","brand:wikipedia":"pt:Itaú Unibanco",name:"Itaú"}},"amenity/bank|Itaú~(Chile)":{countryCodes:["cl"],matchNames:["banco itau"],nomatch:["amenity/bank|Itaú~(Brazil)"],tags:{amenity:"bank",brand:"Itaú Corpbanca","brand:wikidata":"Q2423252","brand:wikipedia":"en:Itaú Corpbanca",name:"Itaú"}},"amenity/bank|JS Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"JS Bank","brand:wikidata":"Q6108986","brand:wikipedia":"en:JS Bank",name:"JS Bank"}},"amenity/bank|Jyske Bank":{countryCodes:["dk"],tags:{amenity:"bank",brand:"Jyske Bank","brand:wikidata":"Q136672","brand:wikipedia":"en:Jyske Bank",name:"Jyske Bank"}},"amenity/bank|K&H Bank":{countryCodes:["hu"],tags:{amenity:"bank",brand:"K&H Bank","brand:wikidata":"Q6393834","brand:wikipedia":"en:K&H Bank",name:"K&H Bank"}},"amenity/bank|KBC":{countryCodes:["be","ie"],tags:{amenity:"bank",brand:"KBC","brand:wikidata":"Q941020","brand:wikipedia":"en:KBC Bank",name:"KBC"}},"amenity/bank|KBZ Bank":{countryCodes:["mm"],tags:{amenity:"bank",brand:"KBZ Bank","brand:wikidata":"Q6360949","brand:wikipedia":"en:Kanbawza Bank",name:"KBZ Bank"}},"amenity/bank|Karnataka Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Karnataka Bank","brand:wikidata":"Q2042632","brand:wikipedia":"en:Karnataka Bank",name:"Karnataka Bank"}},"amenity/bank|Karur Vysya Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Karur Vysya Bank","brand:wikidata":"Q6373724","brand:wikipedia":"en:Karur Vysya Bank",name:"Karur Vysya Bank"}},"amenity/bank|Kasa Stefczyka":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Kasa Stefczyka","brand:wikidata":"Q57624461",name:"Kasa Stefczyka"}},"amenity/bank|KeyBank":{countryCodes:["us"],tags:{amenity:"bank",brand:"KeyBank","brand:wikidata":"Q1740314","brand:wikipedia":"en:KeyBank",name:"KeyBank"}},"amenity/bank|Komerční banka":{countryCodes:["cz"],tags:{amenity:"bank",brand:"Komerční banka","brand:wikidata":"Q1541079","brand:wikipedia":"en:Komerční banka",name:"Komerční banka"}},"amenity/bank|Kotak Mahindra Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Kotak Mahindra Bank","brand:wikidata":"Q2040404","brand:wikipedia":"en:Kotak Mahindra Bank",name:"Kotak Mahindra Bank"}},"amenity/bank|Kutxabank":{countryCodes:["es"],tags:{amenity:"bank",brand:"Kutxabank","brand:wikidata":"Q5139377","brand:wikipedia":"en:Kutxabank",name:"Kutxabank"}},"amenity/bank|Kuveyt Türk":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Kuveyt Türk","brand:wikidata":"Q6036058","brand:wikipedia":"tr:Kuveyt Türk",name:"Kuveyt Türk"}},"amenity/bank|LBS":{tags:{amenity:"bank",brand:"LBS",name:"LBS"}},"amenity/bank|LCL":{countryCodes:["fr"],tags:{amenity:"bank",brand:"LCL","brand:wikidata":"Q779722","brand:wikipedia":"fr:Crédit lyonnais",name:"LCL"}},"amenity/bank|LCNB":{countryCodes:["us"],tags:{alt_name:"Lebanon Citizens National Bank",amenity:"bank",brand:"LCNB","brand:wikidata":"Q65095575",name:"LCNB",official_name:"LCNB National Bank"}},"amenity/bank|La Banque Postale":{countryCodes:["fr"],tags:{amenity:"bank",brand:"La Banque Postale","brand:wikidata":"Q3206431","brand:wikipedia":"en:La Banque postale",name:"La Banque Postale"}},"amenity/bank|La Caixa":{countryCodes:["es"],tags:{amenity:"bank",brand:"La Caixa","brand:wikidata":"Q287753","brand:wikipedia":"en:La Caixa",name:"La Caixa"}},"amenity/bank|Laboral Kutxa":{countryCodes:["es"],tags:{amenity:"bank",brand:"Laboral Kutxa","brand:wikidata":"Q12052386","brand:wikipedia":"en:Laboral Kutxa",name:"Laboral Kutxa"}},"amenity/bank|Lake Michigan Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"Lake Michigan Credit Union","brand:wikidata":"Q6476906","brand:wikipedia":"en:Lake Michigan Credit Union",name:"Lake Michigan Credit Union",short_name:"LMCU"}},"amenity/bank|Landbank":{countryCodes:["ph"],matchNames:["bangko sa lupa ng pilipinas","land bank of the philippines","lbp"],tags:{amenity:"bank",brand:"Landbank","brand:wikidata":"Q6483872","brand:wikipedia":"en:Land Bank of the Philippines",name:"Landbank"}},"amenity/bank|Leeds Building Society":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Leeds Building Society","brand:wikidata":"Q6515848","brand:wikipedia":"en:Leeds Building Society",name:"Leeds Building Society"}},"amenity/bank|Liberbank":{countryCodes:["es"],tags:{amenity:"bank",brand:"Liberbank","brand:wikidata":"Q2891018","brand:wikipedia":"en:Liberbank",name:"Liberbank"}},"amenity/bank|Liberty Bank~(Connecticut)":{countryCodes:["us"],nomatch:["amenity/fuel|Liberty"],tags:{amenity:"bank",brand:"Liberty Bank","brand:wikidata":"Q6541584","brand:wikipedia":"en:Liberty Bank",name:"Liberty Bank"}},"amenity/bank|Lloyds Bank":{countryCodes:["gb","im"],matchNames:["lloyds","lloyds tsb"],tags:{amenity:"bank",brand:"Lloyds Bank","brand:wikidata":"Q1152847","brand:wikipedia":"en:Lloyds Bank",name:"Lloyds Bank"}},"amenity/bank|M&T Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"M&T Bank","brand:wikidata":"Q3272257","brand:wikipedia":"en:M&T Bank",name:"M&T Bank"}},"amenity/bank|MCB":{matchNames:["mcb bank"],tags:{amenity:"bank",brand:"MCB","brand:wikidata":"Q15982510","brand:wikipedia":"ur:ایم سی بی بینک لمیٹڈ",name:"MCB"}},"amenity/bank|MONETA Money Bank":{countryCodes:["cz"],tags:{amenity:"bank",brand:"MONETA Money Bank","brand:wikidata":"Q24282966","brand:wikipedia":"cs:Moneta Money Bank",name:"MONETA Money Bank"}},"amenity/bank|Macro":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Macro","brand:wikidata":"Q2335199","brand:wikipedia":"en:Banco Macro",name:"Macro"}},"amenity/bank|Maybank":{tags:{amenity:"bank",brand:"Maybank","brand:wikidata":"Q1364018","brand:wikipedia":"en:Maybank",name:"Maybank"}},"amenity/bank|Meezan Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Meezan Bank","brand:wikidata":"Q6807934","brand:wikipedia":"en:Meezan Bank",name:"Meezan Bank"}},"amenity/bank|Mercantil":{tags:{amenity:"bank",brand:"Mercantil","brand:wikidata":"Q6818004","brand:wikipedia":"en:Mercantil Servicios Financieros",name:"Mercantil"}},"amenity/bank|Meridian Credit Union":{countryCodes:["ca"],tags:{alt_name:"Meridian",amenity:"bank",brand:"Meridian Credit Union","brand:wikidata":"Q6819303","brand:wikipedia":"en:Meridian Credit Union",name:"Meridian Credit Union"}},"amenity/bank|Metro Bank~(UK)":{countryCodes:["gb"],nomatch:["amenity/bank|Metrobank~(Philippines)","shop/mobile_phone|MetroPCS","shop/supermarket|Metro~(Ontario)","shop/supermarket|Metro~(Peru)","shop/supermarket|Metro~(Quebec)","shop/wholesale|Metro"],tags:{amenity:"bank",brand:"Metro Bank","brand:wikidata":"Q6824499","brand:wikipedia":"en:Metro Bank (United Kingdom)",name:"Metro Bank"}},"amenity/bank|Metrobank~(Philippines)":{countryCodes:["ph"],nomatch:["amenity/bank|Metro Bank~(UK)","shop/mobile_phone|MetroPCS","shop/supermarket|Metro~(Ontario)","shop/supermarket|Metro~(Peru)","shop/supermarket|Metro~(Quebec)","shop/wholesale|Metro"],tags:{amenity:"bank",brand:"Metrobank","brand:wikidata":"Q1925799","brand:wikipedia":"en:Metrobank (Philippines)",name:"Metrobank"}},"amenity/bank|Mibanco":{countryCodes:["pe"],tags:{amenity:"bank",brand:"Mibanco","brand:wikidata":"Q5558589",name:"Mibanco"}},"amenity/bank|MidFirst Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"MidFirst Bank","brand:wikidata":"Q17081131","brand:wikipedia":"en:MidFirst Bank",name:"MidFirst Bank"}},"amenity/bank|Millennium Bank":{countryCodes:["pl"],matchNames:["bank millennium"],tags:{amenity:"bank",brand:"Millennium Bank","brand:wikidata":"Q4855947","brand:wikipedia":"pl:Bank Millennium",name:"Millennium Bank"}},"amenity/bank|Millennium bcp":{countryCodes:["pt"],tags:{amenity:"bank",brand:"Millennium bcp","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"Millennium bcp",official_name:"Banco Comercial Português","official_name:en":"Portuguese Commercial Bank","official_name:es":"Banco Comercial Português"}},"amenity/bank|Mission Federal Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"Mission Federal Credit Union","brand:wikidata":"Q18345955","brand:wikipedia":"en:Mission Federal Credit Union",name:"Mission Federal Credit Union"}},"amenity/bank|Mittelbrandenburgische Sparkasse":{countryCodes:["de"],tags:{amenity:"bank",brand:"Mittelbrandenburgische Sparkasse","brand:wikidata":"Q1940058","brand:wikipedia":"de:Mittelbrandenburgische Sparkasse",name:"Mittelbrandenburgische Sparkasse"}},"amenity/bank|Monte dei Paschi di Siena":{countryCodes:["it"],tags:{amenity:"bank",brand:"Monte dei Paschi di Siena","brand:wikidata":"Q46730","brand:wikipedia":"en:Banca Monte dei Paschi di Siena",name:"Monte dei Paschi di Siena"}},"amenity/bank|Montepio":{countryCodes:["pt"],tags:{amenity:"bank",brand:"Montepio","brand:wikidata":"Q1946091","brand:wikipedia":"en:Montepio (bank)",name:"Montepio"}},"amenity/bank|Mountain America Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"Mountain America Credit Union","brand:wikidata":"Q6924862","brand:wikipedia":"en:Mountain America Credit Union",name:"Mountain America Credit Union"}},"amenity/bank|NAB":{tags:{amenity:"bank",brand:"NAB","brand:wikidata":"Q1430985","brand:wikipedia":"en:National Australia Bank",name:"NAB"}},"amenity/bank|NASA Federal Credit Union":{tags:{amenity:"bank",brand:"NASA Federal Credit Union","brand:wikidata":"Q6952409","brand:wikipedia":"en:NASA Federal Credit Union",name:"NASA Federal Credit Union"}},"amenity/bank|NLB":{countryCodes:["si"],tags:{amenity:"bank",brand:"NLB","brand:wikidata":"Q1481509","brand:wikipedia":"en:NLB Group",name:"NLB"}},"amenity/bank|NSB":{countryCodes:["lk"],matchNames:["national savings bank"],tags:{amenity:"bank",brand:"NSB","brand:wikidata":"Q12500189","brand:wikipedia":"en:National Savings Bank (Sri Lanka)",name:"NSB"}},"amenity/bank|NatWest":{countryCodes:["gb","gg"],tags:{amenity:"bank",brand:"NatWest","brand:wikidata":"Q2740021","brand:wikipedia":"en:NatWest",name:"NatWest"}},"amenity/bank|National Bank":{countryCodes:["ca"],matchNames:["banque nationale","banque nationale du canada"],tags:{amenity:"bank",brand:"National Bank","brand:en":"National Bank","brand:fr":"Banque Nationale","brand:wikidata":"Q634298","brand:wikipedia":"en:National Bank of Canada",name:"National Bank","name:en":"National Bank","name:fr":"Banque Nationale",official_name:"National Bank of Canada","official_name:en":"National Bank of Canada","official_name:fr":"Banque Nationale du Canada"}},"amenity/bank|Nationwide":{countryCodes:["gb"],nomatch:["office/insurance|Nationwide"],tags:{amenity:"bank",brand:"Nationwide","brand:wikidata":"Q846735","brand:wikipedia":"en:Nationwide Building Society",name:"Nationwide"}},"amenity/bank|Navy Federal Credit Union":{tags:{amenity:"bank",brand:"Navy Federal Credit Union","brand:wikidata":"Q6982632","brand:wikipedia":"en:Navy Federal Credit Union",name:"Navy Federal Credit Union"}},"amenity/bank|Nedbank":{tags:{amenity:"bank",brand:"Nedbank","brand:wikidata":"Q2751701","brand:wikipedia":"en:Nedbank",name:"Nedbank"}},"amenity/bank|Nordea":{tags:{amenity:"bank",brand:"Nordea","brand:wikidata":"Q1123823","brand:wikipedia":"en:Nordea",name:"Nordea"}},"amenity/bank|Novo Banco":{countryCodes:["es","pt"],tags:{amenity:"bank",brand:"Novo Banco","brand:wikidata":"Q17488861","brand:wikipedia":"en:Novo Banco",name:"Novo Banco"}},"amenity/bank|OLB":{countryCodes:["de"],tags:{amenity:"bank",brand:"OLB","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"OLB"}},"amenity/bank|OTP":{matchNames:["otp bank"],tags:{amenity:"bank",brand:"OTP","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"OTP Bank"}},"amenity/bank|Oberbank":{countryCodes:["at","cz","de","hu"],tags:{amenity:"bank",brand:"Oberbank","brand:wikidata":"Q2009139","brand:wikipedia":"de:Oberbank",name:"Oberbank"}},"amenity/bank|Occidental de Descuento":{countryCodes:["ve"],tags:{amenity:"bank",brand:"Occidental de Descuento","brand:wikidata":"Q4854108","brand:wikipedia":"en:Banco Occidental de Descuento",name:"Occidental de Descuento"}},"amenity/bank|Oldenburgische Landesbank":{countryCodes:["de"],tags:{amenity:"bank",brand:"Oldenburgische Landesbank","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"Oldenburgische Landesbank"}},"amenity/bank|One Network Bank":{countryCodes:["ph"],tags:{amenity:"bank",brand:"One Network Bank","brand:wikidata":"Q7093019","brand:wikipedia":"en:One Network Bank",name:"One Network Bank"}},"amenity/bank|Oriental":{countryCodes:["us"],tags:{alt_name:"Oriental Bank",amenity:"bank",brand:"Oriental","brand:wikidata":"Q64887002",name:"Oriental"}},"amenity/bank|Oriental Bank of Commerce":{countryCodes:["in"],tags:{amenity:"bank",brand:"Oriental Bank of Commerce","brand:wikidata":"Q367008","brand:wikipedia":"en:Oriental Bank of Commerce",name:"Oriental Bank of Commerce"}},"amenity/bank|Osuuspankki":{countryCodes:["fi"],tags:{amenity:"bank",brand:"Osuuspankki","brand:wikidata":"Q4045597","brand:wikipedia":"fi:OP (finanssiryhmä)",name:"Osuuspankki"}},"amenity/bank|PBZ":{countryCodes:["hr"],tags:{amenity:"bank",brand:"PBZ","brand:wikidata":"Q7246343","brand:wikipedia":"en:Privredna banka Zagreb",name:"PBZ"}},"amenity/bank|PKO BP":{countryCodes:["pl"],matchNames:["pko bank polski"],tags:{amenity:"bank",brand:"PKO BP","brand:wikidata":"Q578832","brand:wikipedia":"pl:Powszechna Kasa Oszczędności Bank Polski",name:"PKO BP"}},"amenity/bank|PNB":{countryCodes:["ph"],tags:{amenity:"bank",brand:"PNB","brand:wikidata":"Q1657971","brand:wikipedia":"en:Philippine National Bank",name:"PNB",official_name:"Philippine National Bank"}},"amenity/bank|PNC Bank":{countryCodes:["us"],matchNames:["pnc"],tags:{amenity:"bank",brand:"PNC Bank","brand:wikidata":"Q38928","brand:wikipedia":"en:PNC Financial Services",name:"PNC Bank"}},"amenity/bank|PSBank":{countryCodes:["ph"],tags:{amenity:"bank",brand:"PSBank","brand:wikidata":"Q7185203","brand:wikipedia":"en:Philippine Savings Bank",name:"PSBank"}},"amenity/bank|Panin Bank":{countryCodes:["id"],tags:{amenity:"bank",brand:"Panin Bank","brand:wikidata":"Q12502751","brand:wikipedia":"id:Panin Bank",name:"Panin Bank"}},"amenity/bank|Patagonia":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Patagonia","brand:wikidata":"Q2882078","brand:wikipedia":"en:Banco Patagonia",name:"Patagonia"}},"amenity/bank|Pekao SA":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Pekao SA","brand:wikidata":"Q806642","brand:wikipedia":"pl:Bank Polska Kasa Opieki",name:"Pekao SA"}},"amenity/bank|PenFed Credit Union":{countryCodes:["us"],tags:{alt_name:"Pentagon Federal Credit Union",amenity:"bank",brand:"PenFed Credit Union","brand:wikidata":"Q3374885","brand:wikipedia":"en:Pentagon Federal Credit Union",name:"PenFed Credit Union",short_name:"PenFed"}},"amenity/bank|People's United Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"People's United Bank","brand:wikidata":"Q7165802","brand:wikipedia":"en:People's United Financial",name:"People's United Bank"}},"amenity/bank|Peoples Bank~(Flemingsburg, Kentucky)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Peoples Bank",name:"Peoples Bank",official_name:"Peoples Bank of Kentucky"}},"amenity/bank|Peoples Bank~(Ohio)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Peoples Bank","brand:wikidata":"Q65716607",name:"Peoples Bank"}},"amenity/bank|Peoples Bank~(Washington)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Peoples Bank","brand:wikidata":"Q7166050","brand:wikipedia":"en:Peoples Bank",name:"Peoples Bank"}},"amenity/bank|Permanent TSB":{tags:{amenity:"bank",brand:"Permanent TSB",name:"Permanent TSB"}},"amenity/bank|Piraeus Bank":{countryCodes:["bg","cy","gr","ro","ua"],tags:{amenity:"bank",brand:"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Piraeus Bank"}},"amenity/bank|Popular":{countryCodes:["us"],matchNames:["popular bank"],tags:{alt_name:"Banco Popular","alt_name:en":"Popular Bank","alt_name:es":"Banco Popular",amenity:"bank",brand:"Popular","brand:en":"Popular","brand:es":"Popular","brand:wikidata":"Q7229656","brand:wikipedia":"en:Popular, Inc.",name:"Popular","name:en":"Popular","name:es":"Popular",official_name:"Banco Popular de Puerto Rico","official_name:es":"Banco Popular de Puerto Rico",short_name:"BPPR"}},"amenity/bank|Postbank~(Bulgaria)":{countryCodes:["bg"],nomatch:["amenity/bank|Bancpost"],tags:{amenity:"bank",brand:"Postbank","brand:wikidata":"Q7234083","brand:wikipedia":"en:Bulgarian Postbank",name:"Postbank"}},"amenity/bank|Postbank~(Germany)":{countryCodes:["de"],matchNames:["postbank finanzcenter"],nomatch:["amenity/bank|Bancpost"],tags:{amenity:"bank",brand:"Postbank","brand:wikidata":"Q708835","brand:wikipedia":"en:Deutsche Postbank",name:"Postbank"}},"amenity/bank|Prima banka":{countryCodes:["sk"],tags:{amenity:"bank",brand:"Prima banka","brand:wikidata":"Q13538661","brand:wikipedia":"sk:Prima banka Slovensko",name:"Prima banka"}},"amenity/bank|Provincial":{countryCodes:["ve"],matchNames:["bbva provincial"],tags:{amenity:"bank",brand:"Provincial","brand:wikidata":"Q4835087","brand:wikipedia":"es:BBVA Provincial",name:"Provincial"}},"amenity/bank|Public Bank~(Malaysia)":{matchNames:["public bank berhad"],tags:{amenity:"bank",brand:"Public Bank","brand:wikidata":"Q3046561","brand:wikipedia":"en:Public Bank Berhad",name:"Public Bank"}},"amenity/bank|Punjab National Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Punjab National Bank","brand:wikidata":"Q2743499","brand:wikipedia":"en:Punjab National Bank",name:"Punjab National Bank"}},"amenity/bank|RBC":{matchNames:["rbc financial group","rbc royal bank","royal bank"],tags:{amenity:"bank",brand:"RBC","brand:wikidata":"Q735261","brand:wikipedia":"en:Royal Bank of Canada",name:"RBC",official_name:"Royal Bank of Canada"}},"amenity/bank|RBS":{countryCodes:["gb","je","ro"],tags:{amenity:"bank",brand:"RBS","brand:wikidata":"Q160126","brand:wikipedia":"en:Royal Bank of Scotland",name:"RBS",official_name:"Royal Bank of Scotland"}},"amenity/bank|RCBC":{countryCodes:["ph"],matchNames:["rcbc savings bank"],tags:{amenity:"bank",brand:"RCBC","brand:wikidata":"Q7339070","brand:wikipedia":"en:Rizal Commercial Banking Corporation",name:"RCBC",official_name:"Rizal Commercial Banking Corporation"}},"amenity/bank|Rabobank":{countryCodes:["au","id","nl","nz","us"],tags:{amenity:"bank",brand:"Rabobank","brand:wikidata":"Q252004","brand:wikipedia":"en:Rabobank",name:"Rabobank"}},"amenity/bank|Raiffeisen Polbank":{countryCodes:["de","pl"],nomatch:["amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Raiffeisen Polbank","brand:wikidata":"Q9303218","brand:wikipedia":"pl:Raiffeisen Bank Polska",name:"Raiffeisen Polbank"}},"amenity/bank|Raiffeisenbank~(Albania)":{countryCodes:["al"],matchNames:["raiffeisen"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q2127541","brand:wikipedia":"sq:Raiffeisen Bank Shqipëri",name:"Raiffeisenbank"}},"amenity/bank|Raiffeisenbank~(Bulgaria)":{countryCodes:["bg"],matchNames:["raiffeisen"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q7283808","brand:wikipedia":"bg:Райфайзенбанк (България)",name:"Raiffeisenbank"}},"amenity/bank|Raiffeisenbank~(Czech Republic)":{countryCodes:["cz"],matchNames:["raiffeisen","raiffeisenkasse"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q24282825","brand:wikipedia":"cs:Raiffeisenbank",name:"Raiffeisenbank"}},"amenity/bank|Raiffeisenbank~(Romania)":{countryCodes:["ro"],matchNames:["raiffeisen"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q7283806","brand:wikipedia":"ro:Raiffeisen Bank România",name:"Raiffeisenbank"}},"amenity/bank|Raiffeisenbank~(Serbia)":{countryCodes:["rs"],matchNames:["raiffeisen"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q7283807","brand:wikipedia":"en:Raiffeisen Bank (Serbia)",name:"Raiffeisenbank"}},"amenity/bank|Raiffeisen~(Luxembourg)":{countryCodes:["lu"],matchNames:["raiffeisen"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Raiffeisen","brand:wikidata":"Q11220162","brand:wikipedia":"en:Banque Raiffeisen",name:"Raiffeisen"}},"amenity/bank|Regions Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Regions Bank","brand:wikidata":"Q917131","brand:wikipedia":"en:Regions Financial Corporation",name:"Regions Bank"}},"amenity/bank|Republic Bank~(Eastern Caribbean)":{countryCodes:["bb","gd","gy","tt"],tags:{amenity:"bank",brand:"Republic Bank","brand:wikidata":"Q7314386","brand:wikipedia":"en:Republic Bank",name:"Republic Bank"}},"amenity/bank|Republic Bank~(USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Republic Bank","brand:wikidata":"Q7314387","brand:wikipedia":"en:Republic Bank & Trust Company",name:"Republic Bank",official_name:"Republic Bank & Trust Company"}},"amenity/bank|República":{countryCodes:["uy"],tags:{amenity:"bank",brand:"República","brand:wikidata":"Q4077337","brand:wikipedia":"en:Banco de la República Oriental del Uruguay",name:"República"}},"amenity/bank|S-Pankki":{countryCodes:["fi"],tags:{amenity:"bank",brand:"S-Pankki","brand:wikidata":"Q7387053","brand:wikipedia":"fi:S-Pankki",name:"S-Pankki"}},"amenity/bank|SC제일은행":{countryCodes:["kr"],tags:{amenity:"bank",brand:"SC제일은행","brand:ko":"SC제일은행","brand:wikidata":"Q625531","brand:wikipedia":"en:Standard Chartered Korea",name:"SC제일은행","name:ko":"SC제일은행"}},"amenity/bank|SEB":{countryCodes:["de","ee","lt","lv","se"],tags:{amenity:"bank",brand:"SEB","brand:wikidata":"Q975655","brand:wikipedia":"en:SEB Group",name:"SEB"}},"amenity/bank|SMBC信託銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"SMBC信託銀行","brand:en":"SMBC Trust Bank","brand:wikidata":"Q17218805","brand:wikipedia":"jp:SMBC信託銀行",name:"SMBC信託銀行","name:en":" SMBC Trust Bank "}},"amenity/bank|SNS Bank":{countryCodes:["nl"],tags:{amenity:"bank",brand:"SNS Bank","brand:wikidata":"Q1857899","brand:wikipedia":"en:De Volksbank",name:"SNS Bank"}},"amenity/bank|Sacombank":{tags:{amenity:"bank",brand:"Sacombank","brand:wikidata":"Q6123772","brand:wikipedia":"vi:Ngân hàng thương mại cổ phần Sài Gòn Thương Tín",name:"Sacombank"}},"amenity/bank|Sampath Bank":{countryCodes:["lk"],tags:{amenity:"bank",brand:"Sampath Bank","brand:wikidata":"Q7410095","brand:wikipedia":"en:Sampath Bank",name:"Sampath Bank"}},"amenity/bank|San Diego County Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"San Diego County Credit Union","brand:wikidata":"Q7413628","brand:wikipedia":"en:San Diego County Credit Union",name:"San Diego County Credit Union",short_name:"SDCCU"}},"amenity/bank|Santander":{matchNames:["santander consumer bank"],nomatch:["amenity/bank|Banco Santander"],tags:{amenity:"bank",brand:"Santander","brand:wikidata":"Q5835668","brand:wikipedia":"en:Santander Bank",name:"Santander"}},"amenity/bank|Santander Río":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Santander Río","brand:wikidata":"Q3385268","brand:wikipedia":"es:Banco Santander (Argentina)",name:"Santander Río"}},"amenity/bank|Santander Totta":{countryCodes:["pt"],tags:{amenity:"bank",brand:"Santander Totta","brand:wikidata":"Q4854116","brand:wikipedia":"pt:Banco Santander Portugal",name:"Santander Totta"}},"amenity/bank|Sberbank":{tags:{amenity:"bank",brand:"Sberbank","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Sberbank"}},"amenity/bank|Scotiabank~(Québec)":{countryCodes:["ca"],matchNames:["scotia"],nomatch:["amenity/bank|Scotiabank"],tags:{amenity:"bank",brand:"Banque Scotia","brand:wikidata":"Q451476","brand:wikipedia":"fr:Banque Scotia",name:"Banque Scotia"}},"amenity/bank|Scotiabank~(non-Québec)":{matchNames:["scotia"],nomatch:["amenity/bank|Scotiabank~(Québec)"],tags:{amenity:"bank",brand:"Scotiabank","brand:wikidata":"Q451476","brand:wikipedia":"en:Scotiabank",name:"Scotiabank"}},"amenity/bank|Security Bank":{countryCodes:["ph"],tags:{amenity:"bank",brand:"Security Bank","brand:wikidata":"Q7444945","brand:wikipedia":"en:Security Bank",name:"Security Bank"}},"amenity/bank|Security Service Federal Credit Union":{countryCodes:["us"],matchNames:["security service fcu"],tags:{amenity:"bank",brand:"Security Service Federal Credit Union","brand:wikidata":"Q7444993","brand:wikipedia":"en:Security Service Federal Credit Union",name:"Security Service Federal Credit Union",short_name:"SSFCU"}},"amenity/bank|Service Credit Union":{countryCodes:["de","us"],tags:{amenity:"bank",brand:"Service Credit Union","brand:wikidata":"Q7455675","brand:wikipedia":"en:Service Credit Union",name:"Service Credit Union"}},"amenity/bank|Servus Credit Union":{countryCodes:["ca"],tags:{alt_name:"Servus",amenity:"bank",brand:"Servus Credit Union","brand:wikidata":"Q2274396","brand:wikipedia":"en:Servus Credit Union",name:"Servus Credit Union"}},"amenity/bank|Seylan Bank":{countryCodes:["lk"],tags:{amenity:"bank",brand:"Seylan Bank","brand:wikidata":"Q3532083","brand:wikipedia":"en:Seylan Bank",name:"Seylan Bank"}},"amenity/bank|Siam Commercial Bank":{countryCodes:["th"],tags:{amenity:"bank",brand:"Siam Commercial Bank","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"Siam Commercial Bank"}},"amenity/bank|Sicoob":{countryCodes:["br"],tags:{amenity:"bank",brand:"Sicoob","brand:wikidata":"Q28679754","brand:wikipedia":"pt:Sistema de Cooperativas de Crédito do Brasil",name:"Sicoob"}},"amenity/bank|Sicredi":{countryCodes:["br"],tags:{amenity:"bank",brand:"Sicredi","brand:wikidata":"Q3483060","brand:wikipedia":"pt:Sistema de Crédito Cooperativo",name:"Sicredi"}},"amenity/bank|Simmons Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Simmons Bank","brand:wikidata":"Q28402389","brand:wikipedia":"en:Simmons Bank",name:"Simmons Bank"}},"amenity/bank|Skipton Building Society":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Skipton Building Society","brand:wikidata":"Q16931747","brand:wikipedia":"en:Skipton Building Society",name:"Skipton Building Society"}},"amenity/bank|Slovenská sporiteľňa":{countryCodes:["sk"],tags:{amenity:"bank",brand:"Slovenská sporiteľňa","brand:wikidata":"Q7541907","brand:wikipedia":"en:Slovenská sporiteľňa",name:"Slovenská sporiteľňa"}},"amenity/bank|Société Générale":{tags:{amenity:"bank",brand:"Société Générale","brand:wikidata":"Q270363","brand:wikipedia":"en:Société Générale",name:"Société Générale"}},"amenity/bank|Société Marseillaise de Crédit":{countryCodes:["fr"],tags:{amenity:"bank",brand:"Société Marseillaise de Crédit","brand:wikidata":"Q3488479","brand:wikipedia":"fr:Société marseillaise de crédit",name:"Société Marseillaise de Crédit"}},"amenity/bank|Société générale Côte d’Ivoire":{countryCodes:["ci"],matchNames:["agence sgbci","sgbci"],tags:{amenity:"bank",brand:"Société générale Côte d’Ivoire","brand:wikidata":"Q3488360","brand:wikipedia":"fr:Société générale Côte d'Ivoire",name:"Société générale Côte d’Ivoire","name:fr":"Société générale Côte d’Ivoire",old_name:"SGBCI"}},"amenity/bank|South Indian Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"South Indian Bank","brand:wikidata":"Q2044973","brand:wikipedia":"en:South Indian Bank",name:"South Indian Bank"}},"amenity/bank|South State Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"South State Bank","brand:wikidata":"Q55633597","brand:wikipedia":"en:South State Bank",name:"South State Bank"}},"amenity/bank|Southern Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Southern Bank","brand:wikidata":"Q7569660","brand:wikipedia":"en:Southern Bank",name:"Southern Bank"}},"amenity/bank|Sparda-Bank":{countryCodes:["at","de"],tags:{amenity:"bank",brand:"Sparda-Bank","brand:wikidata":"Q2307136","brand:wikipedia":"en:Sparda-Bank",name:"Sparda-Bank"}},"amenity/bank|Stanbic Bank":{tags:{amenity:"bank",brand:"Stanbic Bank","brand:wikidata":"Q7597999","brand:wikipedia":"en:Stanbic Bank",name:"Stanbic Bank"}},"amenity/bank|Standard Bank":{tags:{amenity:"bank",brand:"Standard Bank","brand:wikidata":"Q1576610","brand:wikipedia":"en:Standard Bank",name:"Standard Bank"}},"amenity/bank|Standard Chartered":{matchNames:["standard chartered bank"],tags:{amenity:"bank",brand:"Standard Chartered","brand:wikidata":"Q548278","brand:wikipedia":"en:Standard Chartered",name:"Standard Chartered"}},"amenity/bank|State Bank of India":{tags:{amenity:"bank",brand:"State Bank of India","brand:wikidata":"Q1340361","brand:wikipedia":"en:State Bank of India",name:"State Bank of India"}},"amenity/bank|State Employees Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"State Employees Credit Union","brand:wikidata":"Q7603196","brand:wikipedia":"en:State Employees Credit Union",name:"State Employees Credit Union",short_name:"SECU"}},"amenity/bank|Summit Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Summit Bank","brand:wikidata":"Q7637775","brand:wikipedia":"en:Summit Bank",name:"Summit Bank"}},"amenity/bank|SunTrust":{countryCodes:["us"],matchNames:["suntrust bank"],tags:{amenity:"bank",brand:"SunTrust","brand:wikidata":"Q181507","brand:wikipedia":"en:SunTrust Banks",name:"SunTrust"}},"amenity/bank|Suncorp":{countryCodes:["au"],tags:{amenity:"bank",brand:"Suncorp","brand:wikidata":"Q24189567","brand:wikipedia":"en:Suncorp Bank",name:"Suncorp"}},"amenity/bank|Supervielle":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Supervielle","brand:wikidata":"Q5718035","brand:wikipedia":"es:Banco Supervielle",name:"Supervielle"}},"amenity/bank|Swedbank":{countryCodes:["ee","lt","lv","se"],tags:{amenity:"bank",brand:"Swedbank","brand:wikidata":"Q1145493","brand:wikipedia":"en:Swedbank",name:"Swedbank"}},"amenity/bank|Syndicate Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Syndicate Bank","brand:wikidata":"Q2004088","brand:wikipedia":"en:Syndicate Bank",name:"Syndicate Bank"}},"amenity/bank|Synovus":{countryCodes:["us"],tags:{amenity:"bank",brand:"Synovus","brand:wikidata":"Q3508889","brand:wikipedia":"en:Synovus",name:"Synovus"}},"amenity/bank|TCF Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"TCF Bank","brand:wikidata":"Q7669687","brand:wikipedia":"en:TCF Bank",name:"TCF Bank"}},"amenity/bank|TD Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"TD Bank","brand:wikidata":"Q7669891","brand:wikipedia":"en:TD Bank, N.A.",name:"TD Bank"}},"amenity/bank|TD Canada Trust":{countryCodes:["ca"],tags:{amenity:"bank",brand:"TD Canada Trust","brand:wikidata":"Q1080670","brand:wikipedia":"en:TD Canada Trust",name:"TD Canada Trust"}},"amenity/bank|TEB":{countryCodes:["tr"],tags:{amenity:"bank",brand:"TEB","brand:wikidata":"Q7862447","brand:wikipedia":"en:Türk Ekonomi Bankası",name:"TEB"}},"amenity/bank|TSB":{countryCodes:["gb"],tags:{amenity:"bank",brand:"TSB","brand:wikidata":"Q7671560","brand:wikipedia":"en:TSB Bank (United Kingdom)",name:"TSB"}},"amenity/bank|Takarékszövetkezet":{countryCodes:["hu"],tags:{amenity:"bank",brand:"Takarékszövetkezet","brand:wikidata":"Q30324674","brand:wikipedia":"en:TakarékBank",name:"Takarékszövetkezet"}},"amenity/bank|Tangerine":{countryCodes:["ca"],tags:{amenity:"bank",brand:"Tangerine","brand:wikidata":"Q15238797","brand:wikipedia":"en:Tangerine Bank",name:"Tangerine"}},"amenity/bank|Targobank":{countryCodes:["de","es"],tags:{amenity:"bank",brand:"Targobank","brand:wikidata":"Q1455437","brand:wikipedia":"en:Targobank",name:"Targobank"}},"amenity/bank|Tatra banka":{countryCodes:["sk"],tags:{amenity:"bank",brand:"Tatra banka","brand:wikidata":"Q1718069","brand:wikipedia":"en:Tatra banka",name:"Tatra banka"}},"amenity/bank|Taytay sa Kauswagan":{countryCodes:["ph"],tags:{amenity:"bank",brand:"Taytay sa Kauswagan","brand:wikidata":"Q72361196",name:"Taytay sa Kauswagan"}},"amenity/bank|The Co-operative Bank":{countryCodes:["gb"],matchNames:["co-op bank"],tags:{amenity:"bank",brand:"The Co-operative Bank","brand:wikidata":"Q3520318","brand:wikipedia":"en:The Co-operative Bank",name:"The Co-operative Bank"}},"amenity/bank|Türkiye İş Bankası":{tags:{amenity:"bank",brand:"Türkiye İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"Türkiye İş Bankası"}},"amenity/bank|U.S. Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"U.S. Bank","brand:wikidata":"Q739084","brand:wikipedia":"en:U.S. Bancorp",name:"U.S. Bank"}},"amenity/bank|UBA":{tags:{amenity:"bank",brand:"UBA","brand:wikidata":"Q513457","brand:wikipedia":"en:United Bank for Africa",name:"UBA",official_name:"United Bank for Africa"}},"amenity/bank|UBI Banca":{countryCodes:["it"],tags:{amenity:"bank",brand:"UBI Banca","brand:wikidata":"Q1476162","brand:wikipedia":"en:UBI Banca",name:"UBI Banca"}},"amenity/bank|UBL":{countryCodes:["pk"],matchNames:["ubl bank"],tags:{amenity:"bank",brand:"UBL","brand:en":"United Bank Limited Pakistan","brand:wikidata":"Q7887504","brand:wikipedia":"ur:یونائیٹڈ بینک (پاکستان)",name:"UBL","name:en":"United Bank Limited Pakistan"}},"amenity/bank|UBS":{tags:{amenity:"bank",brand:"UBS","brand:wikidata":"Q193199","brand:wikipedia":"en:UBS",name:"UBS"}},"amenity/bank|UCO Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"UCO Bank","brand:wikidata":"Q2005310","brand:wikipedia":"en:UCO Bank",name:"UCO Bank"}},"amenity/bank|UCPB":{countryCodes:["ph"],tags:{amenity:"bank",brand:"UCPB","brand:wikidata":"Q7887615","brand:wikipedia":"en:United Coconut Planters Bank",name:"UCPB"}},"amenity/bank|UIB":{countryCodes:["tn"],tags:{amenity:"bank",brand:"UIB","brand:wikidata":"Q3550305","brand:wikipedia":"ar:الاتحاد الدولي للبنوك",name:"UIB",official_name:"Union internationale de banques"}},"amenity/bank|UMB Bank":{tags:{amenity:"bank",brand:"UMB Bank","brand:wikidata":"Q7865088","brand:wikipedia":"en:UMB Financial Corporation",name:"UMB Bank"}},"amenity/bank|UNI":{countryCodes:["ca"],matchNames:["caisse populaire","caisse populaire acadienne"],tags:{amenity:"bank",brand:"UNI","brand:wikidata":"Q2933348","brand:wikipedia":"fr:UNI Coopération financière",name:"UNI",official_name:"UNI Coopération financière"}},"amenity/bank|UOB":{tags:{amenity:"bank",brand:"UOB","brand:wikidata":"Q2064074","brand:wikipedia":"en:United Overseas Bank",name:"UOB"}},"amenity/bank|USAA":{tags:{amenity:"bank",brand:"USAA","brand:wikidata":"Q7865722","brand:wikipedia":"en:USAA",name:"USAA",official_name:"United Services Automobile Association"}},"amenity/bank|Ulster Bank":{countryCodes:["gb","ie"],tags:{amenity:"bank",brand:"Ulster Bank","brand:wikidata":"Q2613366","brand:wikipedia":"en:Ulster Bank",name:"Ulster Bank"}},"amenity/bank|Umpqua Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Umpqua Bank","brand:wikidata":"Q7881772","brand:wikipedia":"en:Umpqua Holdings Corporation",name:"Umpqua Bank"}},"amenity/bank|UniCredit Bank":{matchNames:["unicredit","unicredit banca"],tags:{amenity:"bank",brand:"UniCredit Bank","brand:wikidata":"Q45568","brand:wikipedia":"en:UniCredit",name:"UniCredit Bank"}},"amenity/bank|Unicaja Banco":{countryCodes:["es"],tags:{amenity:"bank",brand:"Unicaja Banco","brand:wikidata":"Q2543704","brand:wikipedia":"en:Unicaja",name:"Unicaja Banco",short_name:"Unicaja"}},"amenity/bank|Union Bank of India":{countryCodes:["in"],tags:{amenity:"bank",brand:"Union Bank of India","brand:wikidata":"Q2004078","brand:wikipedia":"en:Union Bank of India",name:"Union Bank of India"}},"amenity/bank|Union Bank~(USA)":{countryCodes:["us"],matchNames:["mufg union bank","union bank of california"],nomatch:["amenity/bank|Banco Unión","amenity/money_transfer|Express Union"],tags:{alt_name:"UnionBank",amenity:"bank",brand:"Union Bank","brand:wikidata":"Q1442804","brand:wikipedia":"en:MUFG Union Bank",name:"Union Bank"}},"amenity/bank|UnionBank~(Philippines)":{countryCodes:["ph"],matchNames:["union bank of the philippines"],nomatch:["amenity/bank|Banco Unión","amenity/money_transfer|Express Union"],tags:{amenity:"bank",brand:"UnionBank","brand:wikidata":"Q7885403","brand:wikipedia":"en:Union Bank of the Philippines",name:"UnionBank"}},"amenity/bank|United Bank~(Connecticut)":{countryCodes:["us"],nomatch:["amenity/bank|United Bank~(West Virginia)","amenity/fuel|United","shop/convenience|United"],tags:{amenity:"bank",brand:"United Bank","brand:wikidata":"Q64825157",name:"United Bank"}},"amenity/bank|United Bank~(West Virginia)":{countryCodes:["us"],nomatch:["amenity/bank|United Bank~(Connecticut)","amenity/fuel|United","shop/convenience|United"],tags:{amenity:"bank",brand:"United Bank","brand:wikidata":"Q16920636","brand:wikipedia":"en:United Bank (West Virginia)",name:"United Bank"}},"amenity/bank|United Community Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"United Community Bank","brand:wikidata":"Q7887635","brand:wikipedia":"en:United Community Bank",name:"United Community Bank"}},"amenity/bank|Vakıfbank":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Vakıfbank","brand:wikidata":"Q1148521","brand:wikipedia":"en:VakıfBank",name:"Vakıfbank"}},"amenity/bank|Vancity":{countryCodes:["ca"],matchNames:["vancouver city savings"],tags:{amenity:"bank",brand:"Vancity","brand:wikidata":"Q7914085","brand:wikipedia":"en:Vancity",name:"Vancity",official_name:"Vancouver City Savings Credit Union"}},"amenity/bank|Veneto Banca":{countryCodes:["it"],tags:{amenity:"bank",brand:"Veneto Banca","brand:wikidata":"Q3127221","brand:wikipedia":"en:Veneto Banca",name:"Veneto Banca"}},"amenity/bank|Venezuela":{tags:{amenity:"bank",brand:"Venezuela",name:"Venezuela"}},"amenity/bank|Vietcombank":{countryCodes:["vn"],tags:{amenity:"bank",brand:"Vietcombank","brand:wikidata":"Q6122995","brand:wikipedia":"en:Vietcombank",name:"Vietcombank"}},"amenity/bank|VietinBank":{tags:{amenity:"bank",brand:"VietinBank","brand:wikidata":"Q7928459","brand:wikipedia":"en:Vietinbank",name:"VietinBank"}},"amenity/bank|Vijaya Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Vijaya Bank","brand:wikidata":"Q2003171","brand:wikipedia":"en:Vijaya Bank",name:"Vijaya Bank"}},"amenity/bank|Virgin Money":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Virgin Money","brand:wikidata":"Q2527746","brand:wikipedia":"en:Virgin Money UK",name:"Virgin Money"}},"amenity/bank|Volksbank Köln Bonn eG":{countryCodes:["de"],tags:{amenity:"bank",brand:"Volksbank Köln Bonn eG","brand:wikidata":"Q41680844","brand:wikipedia":"de:Volksbank Köln Bonn",name:"Volksbank Köln Bonn eG"}},"amenity/bank|VÚB":{countryCodes:["sk"],tags:{amenity:"bank",brand:"VÚB","brand:wikidata":"Q12778981","brand:wikipedia":"en:Všeobecná úverová banka",name:"VÚB"}},"amenity/bank|Washington Federal":{countryCodes:["us"],tags:{amenity:"bank",brand:"Washington Federal","brand:wikidata":"Q7971859","brand:wikipedia":"en:Washington Federal",name:"Washington Federal"}},"amenity/bank|Webster Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Webster Bank","brand:wikidata":"Q7978891","brand:wikipedia":"en:Webster Bank",name:"Webster Bank"}},"amenity/bank|Wells Fargo":{countryCodes:["us"],matchNames:["wells fargo bank"],tags:{amenity:"bank",brand:"Wells Fargo","brand:wikidata":"Q744149","brand:wikipedia":"en:Wells Fargo",name:"Wells Fargo"}},"amenity/bank|WesBanco":{countryCodes:["us"],tags:{amenity:"bank",brand:"WesBanco","brand:wikidata":"Q7983629","brand:wikipedia":"en:WesBanco",name:"WesBanco"}},"amenity/bank|Western Union":{nomatch:["amenity/money_transfer|Western Union"],tags:{amenity:"bank",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"}},"amenity/bank|Westpac":{countryCodes:["au","nz"],tags:{amenity:"bank",brand:"Westpac","brand:wikidata":"Q2031726","brand:wikipedia":"en:Westpac",name:"Westpac"}},"amenity/bank|Wings Financial Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"Wings Financial Credit Union","brand:wikidata":"Q8025267","brand:wikipedia":"en:Wings Financial Credit Union",name:"Wings Financial Credit Union"}},"amenity/bank|Yapı Kredi":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Yapı Kredi","brand:wikidata":"Q8049138","brand:wikipedia":"en:Yapı ve Kredi Bankası",name:"Yapı Kredi"}},"amenity/bank|Yorkshire Bank":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Yorkshire Bank","brand:wikidata":"Q8055678","brand:wikipedia":"en:Yorkshire Bank",name:"Yorkshire Bank"}},"amenity/bank|Yorkshire Building Society":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Yorkshire Building Society","brand:wikidata":"Q12073381","brand:wikipedia":"en:Yorkshire Building Society",name:"Yorkshire Building Society"}},"amenity/bank|Zagrebačka banka":{countryCodes:["hr"],tags:{amenity:"bank",brand:"Zagrebačka banka","brand:wikidata":"Q140381","brand:wikipedia":"en:Zagrebačka banka",name:"Zagrebačka banka"}},"amenity/bank|Zenith Bank":{countryCodes:["gb","gh","gm","ng","sl","za"],tags:{amenity:"bank",brand:"Zenith Bank","brand:wikidata":"Q5978240","brand:wikipedia":"en:Zenith Bank",name:"Zenith Bank"}},"amenity/bank|Zions Bank":{tags:{amenity:"bank",brand:"Zions Bank","brand:wikidata":"Q8072576",name:"Zions Bank"}},"amenity/bank|Ziraat Bankası":{tags:{amenity:"bank",brand:"Ziraat Bankası","brand:wikidata":"Q696003","brand:wikipedia":"en:Ziraat Bankası",name:"Ziraat Bankası"}},"amenity/bank|mBank":{tags:{amenity:"bank",brand:"mBank","brand:wikidata":"Q1160928","brand:wikipedia":"en:MBank",name:"mBank"}},"amenity/bank|st.george":{countryCodes:["au"],matchNames:["st.george bank"],tags:{amenity:"bank",brand:"st.george","brand:wikidata":"Q1606050","brand:wikipedia":"en:St.George Bank",name:"st.george"}},"amenity/bank|Ålandsbanken":{countryCodes:["fi"],tags:{amenity:"bank",brand:"Ålandsbanken","brand:wikidata":"Q4349236","brand:wikipedia":"sv:Ålandsbanken",name:"Ålandsbanken"}},"amenity/bank|ČSOB":{countryCodes:["cz","sk"],tags:{amenity:"bank",brand:"ČSOB","brand:wikidata":"Q340135","brand:wikipedia":"en:Československá obchodní banka",name:"ČSOB"}},"amenity/bank|Česká spořitelna":{countryCodes:["cz"],tags:{amenity:"bank",brand:"Česká spořitelna","brand:wikidata":"Q341100","brand:wikipedia":"en:Česká spořitelna",name:"Česká spořitelna"}},"amenity/bank|İş Bankası":{countryCodes:["tr"],tags:{amenity:"bank",brand:"İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"İş Bankası"}},"amenity/bank|Εθνική Τράπεζα":{countryCodes:["gr"],tags:{amenity:"bank",brand:"Εθνική Τράπεζα","brand:el":"Εθνική Τράπεζα","brand:en":"National Bank of Greece","brand:wikidata":"Q1816028","brand:wikipedia":"en:National Bank of Greece",name:"Εθνική Τράπεζα","name:el":"Εθνική Τράπεζα","name:en":"National Bank of Greece"}},"amenity/bank|Τράπεζα Πειραιώς":{countryCodes:["gr"],tags:{amenity:"bank",brand:"Τράπεζα Πειραιώς","brand:el":"Τράπεζα Πειραιώς","brand:en":"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Τράπεζα Πειραιώς","name:el":"Τράπεζα Πειραιώς","name:en":"Piraeus Bank",short_name:"Πειραιώς","short_name:el":"Πειραιώς","short_name:en":"Piraeus"}},"amenity/bank|А-Банк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"А-Банк","brand:wikidata":"Q28705400","brand:wikipedia":"uk:А-Банк",name:"А-Банк"}},"amenity/bank|Авангард":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Авангард","brand:wikidata":"Q62122617",name:"Авангард"}},"amenity/bank|Альфа-Банк~(Россия)":{countryCodes:["by","kz","ru"],tags:{amenity:"bank",brand:"Альфа-Банк","brand:en":"Alfa-Bank","brand:ru":"Альфа-Банк","brand:wikidata":"Q1377835","brand:wikipedia":"ru:Альфа-банк",name:"Альфа-Банк","name:en":"Alfa-Bank","name:ru":"Альфа-Банк"}},"amenity/bank|Альфа-Банк~(Украина)":{countryCodes:["ua"],tags:{amenity:"bank",brand:"Альфа-Банк","brand:en":"Alfa-Bank","brand:ru":"Альфа-Банк","brand:ua":"Альфа-Банк","brand:wikidata":"Q16691757","brand:wikipedia":"uk:Альфа-Банк (Україна)",name:"Альфа-Банк","name:en":"Alfa-Bank","name:ru":"Альфа-Банк"}},"amenity/bank|БПС-Сбербанк":{countryCodes:["by"],tags:{amenity:"bank",brand:"БПС-Сбербанк","brand:wikidata":"Q2074915","brand:wikipedia":"be:БПС-Сбербанк",name:"БПС-Сбербанк"}},"amenity/bank|Банк Дабрабыт":{countryCodes:["by"],tags:{amenity:"bank",brand:"Банк Дабрабыт","brand:wikidata":"Q63981850",name:"Банк Дабрабыт"}},"amenity/bank|Банка ДСК":{countryCodes:["bg"],tags:{amenity:"bank",brand:"Банка ДСК","brand:bg":"Банка ДСК","brand:en":"DSK Bank","brand:wikidata":"Q5206146","brand:wikipedia":"en:DSK Bank",name:"Банка ДСК","name:bg":"Банка ДСК","name:en":"DSK Bank"}},"amenity/bank|Белагропромбанк":{countryCodes:["by"],tags:{amenity:"bank",brand:"Белагропромбанк","brand:en":"Belagroprom Bank","brand:wikidata":"Q1991373","brand:wikipedia":"be:Белаграпрамбанк",name:"Белагропромбанк","name:en":"Belagroprom Bank"}},"amenity/bank|Беларусбанк":{countryCodes:["by"],tags:{amenity:"bank",brand:"Беларусбанк","brand:en":"Belarusbank","brand:wikidata":"Q1997334","brand:wikipedia":"en:Belarusbank",name:"Беларусбанк","name:en":"Belarusbank"}},"amenity/bank|Белинвестбанк":{countryCodes:["by"],tags:{amenity:"bank",brand:"Белинвестбанк","brand:wikidata":"Q4081940","brand:wikipedia":"ru:Белинвестбанк",name:"Белинвестбанк"}},"amenity/bank|Бинбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Бинбанк","brand:en":"B&N Bank","brand:wikidata":"Q4086829","brand:wikipedia":"en:B&N Bank",name:"Бинбанк","name:en":"B&N Bank"}},"amenity/bank|ВТБ~(Россия)":{countryCodes:["ru"],matchNames:["втб банк москвы"],tags:{amenity:"bank",brand:"ВТБ","brand:en":"VTB Bank","brand:wikidata":"Q1549389","brand:wikipedia":"en:VTB Bank",name:"ВТБ","name:en":"VTB Bank"}},"amenity/bank|ВТБ~(Украина)":{countryCodes:["ua"],matchNames:["втб банк"],tags:{amenity:"bank",brand:"ВТБ","brand:en":"VTB Bank","brand:wikidata":"Q16628820","brand:wikipedia":"uk:ВТБ#ПАТ «ВТБ Банк (Україна)»",name:"ВТБ","name:en":"VTB Bank"}},"amenity/bank|Возрождение":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Возрождение","brand:wikidata":"Q4114952","brand:wikipedia":"ru:Возрождение (банк)",name:"Возрождение"}},"amenity/bank|Газпромбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Газпромбанк","brand:en":"Gazprombank","brand:wikidata":"Q1924338","brand:wikipedia":"en:Gazprombank",name:"Газпромбанк","name:en":"Gazprombank"}},"amenity/bank|Генбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Генбанк","brand:wikidata":"Q62122630",name:"Генбанк"}},"amenity/bank|Зенит":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Зенит","brand:en":"Zenit","brand:ru":"Зенит","brand:wikidata":"Q4191388","brand:wikipedia":"ru:Зенит (банк)",name:"Зенит","name:en":"Zenit","name:ru":"Зенит"}},"amenity/bank|Казкоммерцбанк":{countryCodes:["kz"],tags:{amenity:"bank",brand:"Казкоммерцбанк","brand:en":"Kazkommertsbank","brand:wikidata":"Q1168179","brand:wikipedia":"en:Kazkommertsbank",name:"Казкоммерцбанк","name:en":"Kazkommertsbank"}},"amenity/bank|Московский индустриальный банк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Московский индустриальный банк","brand:en":"Moscow Industrial Bank","brand:wikidata":"Q4304145","brand:wikipedia":"ru:Московский индустриальный банк",name:"Московский индустриальный банк","name:en":"Moscow Industrial Bank"}},"amenity/bank|Мособлбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Мособлбанк","brand:en":"Mosobl Bank","brand:wikidata":"Q4304446","brand:wikipedia":"ru:Мособлбанк",name:"Мособлбанк","name:en":"Mosobl Bank"}},"amenity/bank|Народный банк":{countryCodes:["kg","kz","uz"],tags:{amenity:"bank",brand:"Народный банк","brand:wikidata":"Q1046186","brand:wikipedia":"kk:Қазақстан Халық банкі",name:"Народный банк"}},"amenity/bank|ОТП Банк":{countryCodes:["ru","ua"],tags:{amenity:"bank",brand:"ОТП Банк","brand:en":"OTP Bank","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"ОТП Банк","name:en":"OTP Bank"}},"amenity/bank|Обединена Българска Банка":{countryCodes:["bg"],tags:{amenity:"bank",brand:"Обединена Българска Банка","brand:en":"United Bulgarian Bank","brand:wikidata":"Q7887555","brand:wikipedia":"en:United Bulgarian Bank",name:"Обединена Българска Банка","name:en":"United Bulgarian Bank"}},"amenity/bank|Открытие":{countryCodes:["ru"],matchNames:["банк открытие"],tags:{amenity:"bank",brand:"Открытие","brand:wikidata":"Q4327204","brand:wikipedia":"ru:Банк «Финансовая корпорация Открытие»",name:"Открытие"}},"amenity/bank|Ощадбанк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"Ощадбанк","brand:en":"State Savings Bank of Ukraine","brand:wikidata":"Q4340839","brand:wikipedia":"uk:Ощадбанк",name:"Ощадбанк","name:en":"State Savings Bank of Ukraine"}},"amenity/bank|ПУМБ":{countryCodes:["ua"],tags:{amenity:"bank",brand:"ПУМБ","brand:en":"First Ukrainian International Bank","brand:wikidata":"Q4341156","brand:wikipedia":"en:First Ukrainian International Bank",name:"ПУМБ","name:en":"First Ukrainian International Bank"}},"amenity/bank|Почта Банк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Почта Банк","brand:en":"Post Bank","brand:wikidata":"Q24930461","brand:wikipedia":"en:Post Bank (Russia)",name:"Почта Банк","name:en":"Post Bank"}},"amenity/bank|Пощенска банка":{countryCodes:["bg"],tags:{amenity:"bank",brand:"Пощенска банка","brand:wikidata":"Q7234083","brand:wikipedia":"bg:Пощенска банка",name:"Пощенска банка","name:en":"Postbank"}},"amenity/bank|ПриватБанк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"ПриватБанк","brand:en":"PrivatBank","brand:wikidata":"Q1515015","brand:wikipedia":"uk:ПриватБанк",name:"ПриватБанк","name:en":"PrivatBank"}},"amenity/bank|Приднестровский Сбербанк":{countryCodes:["md"],matchNames:["приднестровский cбербанк"],tags:{amenity:"bank",brand:"Приднестровский Сбербанк","brand:en":"Pridnestrovian Savings Bank","brand:ru":"Приднестровский Сбербанк","brand:wikidata":"Q4378147","brand:wikipedia":"ru:Приднестровский Сбербанк",name:"Приднестровский Сбербанк","name:en":"Pridnestrovian Savings Bank","name:ru":"Приднестровский Сбербанк"}},"amenity/bank|Приорбанк":{countryCodes:["by"],tags:{amenity:"bank",brand:"Приорбанк","brand:en":"PriorBank","brand:wikidata":"Q3919658","brand:wikipedia":"be:Пріорбанк",name:"Приорбанк","name:en":"PriorBank"}},"amenity/bank|Промсвязьбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Промсвязьбанк","brand:en":"Promsvyazbank","brand:wikidata":"Q649100","brand:wikipedia":"en:Promsvyazbank",name:"Промсвязьбанк","name:en":"Promsvyazbank"}},"amenity/bank|РНКБ":{countryCodes:["ru","ua"],tags:{amenity:"bank",brand:"РНКБ","brand:wikidata":"Q16912944","brand:wikipedia":"en:Russian National Commercial Bank",name:"РНКБ"}},"amenity/bank|Райффайзен":{countryCodes:["ru"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Райффайзен","brand:en":"Raiffeisenbank","brand:ru":"Райффайзен","brand:wikidata":"Q4389244","brand:wikipedia":"en:Raiffeisenbank (Russia)",name:"Райффайзен","name:en":"Raiffeisenbank","name:ru":"Райффайзен"}},"amenity/bank|Райффайзен Банк Аваль":{countryCodes:["ua"],matchNames:["аваль","банк аваль"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Райффайзен Банк Аваль","brand:en":"Raiffeisen Bank Aval","brand:ru":"Райффайзен Банк Аваль","brand:ua":"Райффайзен Банк Аваль","brand:wikidata":"Q4389243","brand:wikipedia":"en:Raiffeisen Bank Aval",name:"Райффайзен Банк Аваль","name:en":"Raiffeisen Bank Aval","name:ru":"Райффайзен Банк Аваль","name:ua":"Райффайзен Банк Аваль"}},"amenity/bank|Росбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Росбанк","brand:en":"Rosbank","brand:ru":"Росбанк","brand:wikidata":"Q1119857","brand:wikipedia":"en:Rosbank",name:"Росбанк","name:en":"Rosbank","name:ru":"Росбанк"}},"amenity/bank|Россельхозбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Россельхозбанк","brand:en":"Rosselkhozbank","brand:ru":"Россельхозбанк","brand:wikidata":"Q3920226","brand:wikipedia":"en:Russian Agricultural Bank",name:"Россельхозбанк","name:en":"Rosselkhozbank","name:ru":"Россельхозбанк"}},"amenity/bank|Русский Стандарт":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Русский Стандарт","brand:en":"Russian Standard Bank","brand:ru":"Русский Стандарт","brand:wikidata":"Q4400854","brand:wikipedia":"en:Russian Standard Bank",name:"Русский Стандарт","name:en":"Russian Standard Bank","name:ru":"Русский Стандарт"}},"amenity/bank|Сбербанк":{countryCodes:["kz","ru"],matchNames:["cбербанк","cбербанк россии","сбербанк россии"],tags:{amenity:"bank",brand:"Сбербанк","brand:en":"Sberbank","brand:ru":"Сбербанк","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Сбербанк","name:en":"Sberbank","name:ru":"Сбербанк"}},"amenity/bank|Совкомбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Совкомбанк","brand:en":"Sovcom Bank","brand:ru":"Совкомбанк","brand:wikidata":"Q4426566","brand:wikipedia":"ru:Совкомбанк",name:"Совкомбанк","name:en":"Sovcom Bank","name:ru":"Совкомбанк"}},"amenity/bank|УкрСиббанк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"УкрСиббанк","brand:en":"UkrSibbank","brand:uk":"УкрСиббанк","brand:wikidata":"Q1976290","brand:wikipedia":"uk:Ukrsibbank BNP Paribas Group",name:"УкрСиббанк","name:en":"UkrSibbank","name:uk":"УкрСиббанк"}},"amenity/bank|Укргазбанк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"Укргазбанк","brand:en":"Ukrgasbank","brand:uk":"Укргазбанк","brand:wikidata":"Q4470692","brand:wikipedia":"uk:Укргазбанк",name:"Укргазбанк","name:en":"Ukrgasbank","name:uk":"Укргазбанк"}},"amenity/bank|Укрсоцбанк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"Укрсоцбанк","brand:en":"Ukrsotsbank","brand:uk":"Укрсоцбанк","brand:wikidata":"Q3547885","brand:wikipedia":"uk:Укрсоцбанк",name:"Укрсоцбанк","name:en":"Ukrsotsbank","name:uk":"Укрсоцбанк"}},"amenity/bank|Уралсиб":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Уралсиб","brand:en":"Uralsib Bank","brand:ru":"Уралсиб","brand:wikidata":"Q4476693","brand:wikipedia":"ru:Уралсиб (банк)",name:"Уралсиб","name:en":"Uralsib Bank","name:ru":"Уралсиб"}},"amenity/bank|Уральский банк реконструкции и развития":{tags:{amenity:"bank",brand:"Уральский банк реконструкции и развития",name:"Уральский банк реконструкции и развития"}},"amenity/bank|Хаан банк":{countryCodes:["mn"],tags:{amenity:"bank",brand:"Хаан банк","brand:en":"Khan Bank","brand:mn":"Хаан банк","brand:wikidata":"Q25632240","brand:wikipedia":"mn:ХААН банк",name:"Хаан банк","name:en":"Khan Bank","name:mn":"Хаан банк"}},"amenity/bank|Хоум Кредит":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Хоум Кредит","brand:en":"Home Credit & Finance Bank","brand:ru":"Хоум Кредит","brand:wikidata":"Q4500466","brand:wikipedia":"en:Home Credit & Finance Bank",name:"Хоум Кредит","name:en":"Home Credit & Finance Bank","name:ru":"Хоум Кредит"}},"amenity/bank|בנק אגוד":{countryCodes:["il"],tags:{"alt_name:en":"Bank Igud",amenity:"bank",brand:"בנק אגוד","brand:en":"Union Bank of Israel","brand:he":"בנק אגוד","brand:wikidata":"Q2903265","brand:wikipedia":"en:Union Bank of Israel",name:"בנק אגוד","name:en":"Union Bank of Israel","name:he":"בנק אגוד"}},"amenity/bank|בנק אוצר החייל":{countryCodes:["il"],tags:{amenity:"bank",brand:"בנק אוצר החייל","brand:en":"Bank Otsar Ha-Hayal","brand:he":"בנק אוצר החייל","brand:wikidata":"Q2900674","brand:wikipedia":"en:Bank Otsar Ha-Hayal",name:"בנק אוצר החייל","name:en":"Bank Otsar Ha-Hayal","name:he":"בנק אוצר החייל"}},"amenity/bank|בנק דיסקונט":{countryCodes:["il"],tags:{amenity:"bank",brand:"בנק דיסקונט לישראל","brand:en":"Israel Discount Bank","brand:he":"בנק דיסקונט לישראל","brand:wikidata":"Q250362","brand:wikipedia":"en:Israel Discount Bank",name:"בנק דיסקונט","name:en":"Bank Discount","name:he":"בנק דיסקונט"}},"amenity/bank|בנק הפועלים":{countryCodes:["il"],tags:{amenity:"bank",brand:"בנק הפועלים","brand:en":"Bank Hapoalim","brand:he":"בנק הפועלים","brand:wikidata":"Q2666775","brand:wikipedia":"en:Bank Hapoalim",name:"בנק הפועלים","name:en":"Bank Hapoalim","name:he":"בנק הפועלים"}},"amenity/bank|בנק יהד":{countryCodes:["il"],tags:{amenity:"bank",brand:"בנק יהד","brand:en":"Bank Yahav","brand:he":"בנק יהד","brand:wikidata":"Q7187611","brand:wikipedia":"he:בנק יהב",name:"בנק יהד","name:en":"Bank Yahav","name:he":"בנק יהד"}},"amenity/bank|בנק ירושלים":{countryCodes:["il"],tags:{amenity:"bank",brand:"בנק ירושלים","brand:en":"Bank of Jerusalem","brand:he":"בנק ירושלים","brand:wikidata":"Q2900227","brand:wikipedia":"en:Bank of Jerusalem",name:"בנק ירושלים","name:en":"Bank of Jerusalem","name:he":"בנק ירושלים"}},"amenity/bank|בנק לאומי":{countryCodes:["il"],tags:{amenity:"bank",brand:"בנק לאומי","brand:en":"Bank Leumi","brand:he":"בנק לאומי","brand:wikidata":"Q806641","brand:wikipedia":"en:Bank Leumi",name:"בנק לאומי","name:en":"Bank Leumi","name:he":"בנק לאומי"}},"amenity/bank|בנק מסד":{countryCodes:["il"],tags:{amenity:"bank",brand:"בנק מסד","brand:en":"Bank Massad","brand:he":"בנק מסד","brand:wikidata":"Q7187667","brand:wikipedia":"en:Bank Massad",name:"בנק מסד","name:en":"Bank Massad","name:he":"בנק מסד"}},"amenity/bank|הבנק הבינלאומי":{countryCodes:["il"],tags:{amenity:"bank",brand:"הבנק הבינלאומי","brand:en":"First International Bank of Israel","brand:he":"הבנק הבינלאומי","brand:wikidata":"Q2777497","brand:wikipedia":"en:First International Bank of Israel",name:"הבנק הבינלאומי","name:en":"First International Bank of Israel","name:he":"הבנק הבינלאומי"}},"amenity/bank|מזרחי טפחות":{countryCodes:["il"],tags:{amenity:"bank",brand:"מזרחי טפחות","brand:en":"Mizrahi-Tefahot","brand:he":"מזרחי טפחות","brand:wikidata":"Q2777129","brand:wikipedia":"en:Bank Mizrahi-Tefahot",name:"בנק מזרחי טפחות","name:en":"Bank Mizrahi-Tefahot","name:he":"בנק מזרחי טפחות"}},"amenity/bank|بانک آینده":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک آینده","brand:en":"Ayandeh Bank","brand:wikidata":"Q5938144","brand:wikipedia":"en:Ayandeh Bank",name:"بانک آینده","name:en":"Ayandeh Bank"}},"amenity/bank|بانک اقتصاد نوین":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک اقتصاد نوین","brand:en":"EN Bank","brand:wikidata":"Q5323768","brand:wikipedia":"en:EN Bank",name:"بانک اقتصاد نوین","name:en":"EN Bank"}},"amenity/bank|بانک انصار":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک انصار","brand:wikidata":"Q5862675","brand:wikipedia":"fa:بانک انصار",name:"بانک انصار"}},"amenity/bank|بانک ایران زمین":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک ایران زمین","brand:wikidata":"Q5934423","brand:wikipedia":"en:Iran Zamin Bank",name:"بانک ایران زمین"}},"amenity/bank|بانک تجارت":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک تجارت","brand:wikidata":"Q7695198","brand:wikipedia":"en:Tejarat Bank",name:"بانک تجارت"}},"amenity/bank|بانک توسعه تعاون":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک توسعه تعاون","brand:wikidata":"Q5684450","brand:wikipedia":"fa:بانک توسعه تعاون",name:"بانک توسعه تعاون"}},"amenity/bank|بانک رفاه":{countryCodes:["ir"],matchNames:["بانک رفاه کارگران"],tags:{amenity:"bank",brand:"بانک رفاه","brand:en":"Refah Bank","brand:wikidata":"Q7307083","brand:wikipedia":"en:Refah Bank",name:"بانک رفاه","name:en":"Refah Bank"}},"amenity/bank|بانک سامان":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک سامان","brand:en":"Saman Bank","brand:wikidata":"Q4117676","brand:wikipedia":"en:Saman Bank",name:"بانک سامان","name:en":"Saman Bank"}},"amenity/bank|بانک سرمایه":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک سرمایه","brand:en":"Sarmayeh Bank","brand:wikidata":"Q7424291","brand:wikipedia":"en:Sarmayeh Bank",name:"بانک سرمایه","name:en":"Sarmayeh Bank"}},"amenity/bank|بانک سپه":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک سپه","brand:en":"Bank Sepah","brand:wikidata":"Q2882624","brand:wikipedia":"en:Bank Sepah",name:"بانک سپه","name:en":"Bank Sepah"}},"amenity/bank|بانک سینا":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک سینا","brand:en":"Sina Bank","brand:wikidata":"Q10860246","brand:wikipedia":"en:Sina Bank",name:"بانک سینا","name:en":"Sina Bank"}},"amenity/bank|بانک شهر":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک شهر","brand:en":"Shahr Bank","brand:wikidata":"Q5941033","brand:wikipedia":"fa:بانک شهر",name:"بانک شهر","name:en":"Shahr Bank"}},"amenity/bank|بانک صادرات":{countryCodes:["ir"],matchNames:["بانک صادرات ایران","صادرات"],tags:{amenity:"bank",brand:"بانک صادرات","brand:en":"Bank Saderat Iran","brand:wikidata":"Q2882608","brand:wikipedia":"en:Bank Saderat Iran",name:"بانک صادرات","name:en":"Bank Saderat Iran"}},"amenity/bank|بانک قوامین":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک قوامین","brand:en":"Ghavamin Bank","brand:wikidata":"Q10860253","brand:wikipedia":"en:Ghavamin Bank",name:"بانک قوامین","name:en":"Ghavamin Bank"}},"amenity/bank|بانک مسکن":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک مسکن","brand:en":"Bank Maskan","brand:wikidata":"Q4855942","brand:wikipedia":"en:Bank Maskan",name:"بانک مسکن","name:en":"Bank Maskan"}},"amenity/bank|بانک ملت":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک ملت","brand:en":"Bank Mellat","brand:wikidata":"Q4855944","brand:wikipedia":"en:Bank Mellat",name:"بانک ملت","name:en":"Bank Mellat"}},"amenity/bank|بانک ملی":{countryCodes:["ir"],matchNames:["بانک ملی ایران","ملی"],tags:{amenity:"bank",brand:"بانک ملی","brand:en":"Bank Melli Iran","brand:wikidata":"Q806640","brand:wikipedia":"en:Bank Melli Iran",name:"بانک ملی","name:en":"Bank Melli Iran"}},"amenity/bank|بانک مهر اقتصاد":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک مهر اقتصاد","brand:wikidata":"Q5942921","brand:wikipedia":"fa:بانک مهر اقتصاد",name:"بانک مهر اقتصاد","name:en":"Mehr Eqtesad Bank"}},"amenity/bank|بانک پارسیان":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک پارسیان","brand:en":"Parsian Bank","brand:wikidata":"Q2410404","brand:wikipedia":"en:Parsian Bank",name:"بانک پارسیان","name:en":"Parsian Bank"}},"amenity/bank|بانک پاسارگاد":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک پاسارگاد","brand:en":"Bank Pasargad","brand:wikidata":"Q4855962","brand:wikipedia":"en:Bank Pasargad",name:"بانک پاسارگاد","name:en":"Bank Pasargad"}},"amenity/bank|بانک کشاورزی":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک کشاورزی","brand:en":"Bank Keshavarzi Iran","brand:wikidata":"Q6395007","brand:wikipedia":"en:Bank Keshavarzi Iran",name:"بانک کشاورزی","name:en":"Bank Keshavarzi Iran"}},"amenity/bank|پست بانک":{countryCodes:["ir"],tags:{amenity:"bank",brand:"پست بانک","brand:en":"Post Bank of Iran","brand:wikidata":"Q7233625","brand:wikipedia":"en:Post Bank of Iran",name:"پست بانک","name:en":"Post Bank of Iran"}},"amenity/bank|অগ্রণী ব্যাংক":{countryCodes:["bd"],matchNames:["agrani bank","agrani bank limited","agrani bank limited অগ্রণী ব্যাংক লিমিটেড","agrani bank ltd","agrani bank ltd অগ্রণী ব্যাংক লিমিটেড","অগ্রণী ব্যাংক লিমিটেড"],tags:{amenity:"bank",brand:"অগ্রণী ব্যাংক","brand:bn":"অগ্রণী ব্যাংক","brand:en":"Agrani Bank","brand:wikidata":"Q517050","brand:wikipedia":"bn:অগ্রণী ব্যাংক",name:"অগ্রণী ব্যাংক","name:bn":"অগ্রণী ব্যাংক","name:en":"Agrani Bank"}},"amenity/bank|গ্রামীণ ব্যাংক":{countryCodes:["bd"],tags:{amenity:"bank",brand:"গ্রামীণ ব্যাংক","brand:bn":"গ্রামীণ ব্যাংক","brand:en":"Grameen Bank","brand:wikidata":"Q188567","brand:wikipedia":"en:Grameen Bank",name:"গ্রামীণ ব্যাংক","name:bn":"গ্রামীণ ব্যাংক","name:en":"Grameen Bank"}},"amenity/bank|জনতা ব্যাংক লিমিটেড":{countryCodes:["bd"],matchNames:["janata bank","janata bank limited","janata bank limited জনতা ব্যাংক লিমিটেড"],tags:{amenity:"bank",brand:"জনতা ব্যাংক লিমিটেড","brand:bn":"জনতা ব্যাংক লিমিটেড","brand:en":"Janata Bank Limited","brand:wikidata":"Q3347028","brand:wikipedia":"bn:জনতা ব্যাংক",name:"জনতা ব্যাংক লিমিটেড","name:bn":"জনতা ব্যাংক লিমিটেড","name:en":"Janata Bank Limited"}},"amenity/bank|বাংলাদেশ কৃষি ব্যাংক":{countryCodes:["bd"],tags:{amenity:"bank",brand:"বাংলাদেশ কৃষি ব্যাংক","brand:bn":"বাংলাদেশ কৃষি ব্যাংক","brand:en":"Bangladesh Krishi Bank","brand:wikidata":"Q16345932","brand:wikipedia":"en:Bangladesh Krishi Bank",name:"বাংলাদেশ কৃষি ব্যাংক","name:bn":"বাংলাদেশ কৃষি ব্যাংক","name:en":"Bangladesh Krishi Bank"}},"amenity/bank|সোনালী ব্যাংক লিমিটেড":{countryCodes:["bd"],matchNames:["sonali bank","sonali bank limited","sonali bank limited সোনালী ব্যাংক লিমিটেড"],tags:{amenity:"bank",brand:"সোনালী ব্যাংক লিমিটেড","brand:bn":"সোনালী ব্যাংক লিমিটেড","brand:en":"Sonali Bank","brand:wikidata":"Q3350382","brand:wikipedia":"en:Sonali Bank",name:"সোনালী ব্যাংক লিমিটেড","name:bn":"সোনালী ব্যাংক লিমিটেড","name:en":"Sonali Bank"}},"amenity/bank|ธนาคารกรุงเทพ":{countryCodes:["th"],tags:{amenity:"bank",brand:"ธนาคารกรุงเทพ","brand:en":"Bangkok Bank","brand:th":"ธนาคารกรุงเทพ","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"ธนาคารกรุงเทพ","name:en":"Bangkok Bank","name:th":"ธนาคารกรุงเทพ"}},"amenity/bank|ธนาคารกรุงไทย":{countryCodes:["th"],tags:{amenity:"bank",brand:"ธนาคารกรุงไทย","brand:en":"Krung Thai Bank","brand:th":"ธนาคารกรุงไทย","brand:wikidata":"Q962865","brand:wikipedia":"en:Krung Thai Bank",name:"ธนาคารกรุงไทย","name:en":"Krung Thai Bank","name:th":"ธนาคารกรุงไทย"}},"amenity/bank|ธนาคารกสิกรไทย":{countryCodes:["th"],tags:{amenity:"bank",brand:"ธนาคารกสิกรไทย","brand:en":"Kasikornbank","brand:th":"ธนาคารกสิกรไทย","brand:wikidata":"Q276557","brand:wikipedia":"en:Kasikornbank",name:"ธนาคารกสิกรไทย","name:en":"Kasikornbank","name:th":"ธนาคารกสิกรไทย"}},"amenity/bank|ธนาคารออมสิน":{countryCodes:["th"],tags:{amenity:"bank",brand:"ธนาคารออมสิน","brand:en":"Government Savings Bank","brand:th":"ธนาคารออมสิน","brand:wikidata":"Q6579041","brand:wikipedia":"en:Government Savings Bank (Thailand)",name:"ธนาคารออมสิน","name:en":"Government Savings Bank","name:th":"ธนาคารออมสิน"}},"amenity/bank|ธนาคารไทยพาณิชย์":{countryCodes:["th"],tags:{amenity:"bank",brand:"ธนาคารไทยพาณิชย์","brand:en":"Siam Commercial Bank","brand:th":"ธนาคารไทยพาณิชย์","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"ธนาคารไทยพาณิชย์","name:en":"Siam Commercial Bank","name:th":"ธนาคารไทยพาณิชย์"}},"amenity/bank|みずほ銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"みずほ銀行","brand:en":"Mizuho Bank","brand:ja":"みずほ銀行","brand:wikidata":"Q2882956","brand:wikipedia":"en:Mizuho Bank",name:"みずほ銀行","name:en":"Mizuho Bank","name:ja":"みずほ銀行"}},"amenity/bank|ゆうちょ銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"ゆうちょ銀行","brand:en":"Japan Post Bank","brand:ja":"ゆうちょ銀行","brand:wikidata":"Q907103","brand:wikipedia":"ja:ゆうちょ銀行",name:"ゆうちょ銀行","name:en":"Japan Post Bank","name:ja":"ゆうちょ銀行"}},"amenity/bank|りそな銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"りそな銀行","brand:en":"Resona Bank","brand:ja":"りそな銀行","brand:wikidata":"Q11281447","brand:wikipedia":"ja:りそな銀行",name:"りそな銀行","name:en":"Resona Bank","name:ja":"りそな銀行"}},"amenity/bank|イオン銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"イオン銀行","brand:en":"Aeon Bank","brand:ja":"イオン銀行","brand:wikidata":"Q11286327","brand:wikipedia":"ja:イオン銀行",name:"イオン銀行","name:en":"Aeon Bank","name:ja":"イオン銀行"}},"amenity/bank|スルガ銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"スルガ銀行","brand:en":"Suruga Bank","brand:ja":"スルガ銀行","brand:wikidata":"Q11313470","brand:wikipedia":"ja:スルガ銀行",name:"スルガ銀行","name:en":"Suruga Bank","name:ja":"スルガ銀行"}},"amenity/bank|三井住友信託銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"三井住友信託銀行","brand:en":"Sumitomo Mitsui Trust Bank","brand:wikidata":"Q5215421","brand:wikipedia":"jp:三井住友信託銀行",name:"三井住友信託銀行","name:en":"Sumitomo Mitsui Trust Bank"}},"amenity/bank|三井住友銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"三井住友銀行","brand:en":"Sumitomo Mitsui Banking Corporation","brand:ja":"三井住友銀行","brand:wikidata":"Q2660418","brand:wikipedia":"en:Sumitomo Mitsui Banking Corporation",name:"三井住友銀行","name:en":"Sumitomo Mitsui Banking Corporation","name:ja":"三井住友銀行","short_name:en":"SMBC"}},"amenity/bank|三菱UFJ信託銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"三菱UFJ信託銀行","brand:en":"Mitsubishi UFJ Trust and Banking Corporation","brand:ja":"三菱UFJ信託銀行","brand:wikidata":"Q6883178","brand:wikipedia":"en:Mitsubishi UFJ Trust and Banking Corporation",name:"三菱UFJ信託銀行","name:en":"Mitsubishi UFJ Trust and Banking Corporation","name:ja":"三菱UFJ信託銀行"}},"amenity/bank|三菱UFJ銀行":{matchNames:["三菱東京ufj銀行"],tags:{amenity:"bank",brand:"三菱UFJ銀行","brand:en":"MUFG Bank","brand:ja":"三菱UFJ銀行","brand:wikidata":"Q988284","brand:wikipedia":"en:MUFG Bank",name:"三菱UFJ銀行","name:en":"MUFG Bank","name:ja":"三菱UFJ銀行"}},"amenity/bank|上海商業儲蓄銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"上海商業儲蓄銀行","brand:en":"Shanghai Commercial and Savings Bank","brand:wikidata":"Q4207208","brand:wikipedia":"en:Shanghai Commercial and Savings Bank",name:"上海商業儲蓄銀行","name:en":"Shanghai Commercial and Savings Bank"}},"amenity/bank|上海浦东发展银行":{tags:{amenity:"bank",brand:"上海浦东发展银行","brand:en":"Shanghai Pudong Development Bank","brand:wikidata":"Q1479076","brand:wikipedia":"zh:上海浦东发展银行",name:"上海浦东发展银行","name:en":"Shanghai Pudong Development Bank"}},"amenity/bank|东亚银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"东亚银行","brand:wikidata":"Q806679","brand:wikipedia":"en:Bank of East Asia",name:"东亚银行","name:en":"Bank of East Asia"}},"amenity/bank|中信银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"中信银行","brand:en":"China CITIC Bank","brand:wikidata":"Q38960","brand:wikipedia":"en:China CITIC Bank",name:"中信银行","name:en":"China CITIC Bank"}},"amenity/bank|中国光大银行":{tags:{amenity:"bank",brand:"中国光大银行","brand:en":"China Everbright Bank","brand:wikidata":"Q10873167","brand:wikipedia":"zh:中国光大银行",name:"中国光大银行","name:en":"China Everbright Bank"}},"amenity/bank|中国农业银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"中国农业银行","brand:en":"Agricultural Bank of China","brand:wikidata":"Q26298","brand:wikipedia":"en:Agricultural Bank of China",name:"中国农业银行","name:en":"Agricultural Bank of China"}},"amenity/bank|中国工商银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"中国工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"中国工商银行","name:en":"Industrial and Commercial Bank of China"}},"amenity/bank|中国建设银行":{countryCodes:["cn"],matchNames:["建设银行"],tags:{amenity:"bank",brand:"中国建设银行","brand:en":"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"中国建设银行","name:en":"China Construction Bank"}},"amenity/bank|中国民生银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"中国民生银行","brand:en":"China Minsheng Bank","brand:wikidata":"Q911543","brand:wikipedia":"en:China Minsheng Bank",name:"中国民生银行","name:en":"China Minsheng Bank"}},"amenity/bank|中国邮政储蓄银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"中国邮政储蓄银行","brand:en":"Postal Savings Bank of China","brand:wikidata":"Q986744","brand:wikipedia":"en:Postal Savings Bank of China",name:"中国邮政储蓄银行","name:en":"Postal Savings Bank of China"}},"amenity/bank|中国银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"中国银行","brand:en":"Bank of China","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"中国银行","name:en":"Bank of China"}},"amenity/bank|中國信託商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"中國信託商業銀行","brand:en":"CTBC Bank","brand:wikidata":"Q5100191","brand:wikipedia":"en:CTBC Bank",name:"中國信託商業銀行","name:en":"CTBC Bank"}},"amenity/bank|交通银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"交通银行","brand:en":"Bank of Communications","brand:wikidata":"Q806680","brand:wikipedia":"en:Bank of Communications",name:"交通银行","name:en":"Bank of Communications"}},"amenity/bank|京城商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"京城商業銀行","brand:wikidata":"Q10883132","brand:wikipedia":"zh:京城商業銀行",name:"京城商業銀行"}},"amenity/bank|京都中央信用金庫":{countryCodes:["jp"],tags:{amenity:"bank",brand:"京都中央信用金庫","brand:en":"Kyoto Chuo Shinkin Bank","brand:wikidata":"Q11374844","brand:wikipedia":"ja:京都中央信用金庫",name:"京都中央信用金庫","name:en":"Kyoto Chuo Shinkin Bank"}},"amenity/bank|京都銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"京都銀行","brand:en":"Bank of Kyoto","brand:wikidata":"Q11375713","brand:wikipedia":"en:Bank of Kyoto",name:"京都銀行","name:en":"Bank of Kyoto"}},"amenity/bank|元大商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"元大商業銀行","brand:en":"Yuanta Commercial Bank","brand:wikidata":"Q10889602","brand:wikipedia":"zh:元大商業銀行",name:"元大商業銀行","name:en":"Yuanta Commercial Bank"}},"amenity/bank|兆豐國際商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"兆豐國際商業銀行","brand:en":"Mega International Commercial Bank","brand:wikidata":"Q709757","brand:wikipedia":"en:Mega International Commercial Bank",name:"兆豐國際商業銀行","name:en":"Mega International Commercial Bank"}},"amenity/bank|兴业银行":{tags:{amenity:"bank",brand:"兴业银行","brand:wikidata":"Q1410821","brand:wikipedia":"zh:兴业银行",name:"兴业银行"}},"amenity/bank|农业银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"农业银行","brand:wikidata":"Q26298","brand:wikipedia":"zh:中国农业银行",name:"农业银行"}},"amenity/bank|北京银行":{tags:{amenity:"bank",brand:"北京银行","brand:wikidata":"Q39146","brand:wikipedia":"zh:北京银行",name:"北京银行"}},"amenity/bank|北洋銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"北洋銀行","brand:en":"North Pacific Bank","brand:wikidata":"Q11402354","brand:wikipedia":"ja:北洋銀行",name:"北洋銀行","name:en":"North Pacific Bank"}},"amenity/bank|北海道銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"北海道銀行","brand:en":"Hokkaido Bank","brand:wikidata":"Q5878076","brand:wikipedia":"en:Hokkaido Bank",name:"北海道銀行","name:en":"Hokkaido Bank"}},"amenity/bank|千葉銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"千葉銀行","brand:en":"The Chiba Bank","brand:ja":"千葉銀行","brand:wikidata":"Q1071712","brand:wikipedia":"en:Chiba Bank",name:"千葉銀行","name:en":"Chiba Bank","name:ja":"千葉銀行"}},"amenity/bank|台中商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"台中商業銀行","brand:en":"Taichung Bank","brand:wikidata":"Q6136958","brand:wikipedia":"en:Taichung Bank",name:"台中商業銀行","name:en":"Taichung Bank"}},"amenity/bank|台北富邦商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"台北富邦商業銀行","brand:en":"Taipei Fubon Bank","brand:wikidata":"Q697293","brand:wikipedia":"en:Taipei Fubon Bank",name:"台北富邦商業銀行","name:en":"Taipei Fubon Bank"}},"amenity/bank|台新國際商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"台新國際商業銀行","brand:en":"Taishin International Bank","brand:wikidata":"Q7676420","brand:wikipedia":"en:Taishin International Bank",name:"台新國際商業銀行","name:en":"Taishin International Bank"}},"amenity/bank|合作金庫商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"合作金庫商業銀行","brand:en":"Taiwan Cooperative Bank","brand:wikidata":"Q701540","brand:wikipedia":"en:Taiwan Cooperative Bank",name:"合作金庫商業銀行","name:en":"Taiwan Cooperative Bank"}},"amenity/bank|國泰世華商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"國泰世華商業銀行","brand:en":"Cathay United Bank","brand:wikidata":"Q702656","brand:wikipedia":"en:Cathay United Bank",name:"國泰世華商業銀行","name:en":"Cathay United Bank"}},"amenity/bank|埼玉りそな銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"埼玉りそな銀行","brand:en":"Saitama Resona Bank","brand:ja":"埼玉りそな銀行","brand:wikidata":"Q4671591","brand:wikipedia":"ja:埼玉りそな銀行",name:"埼玉りそな銀行","name:en":"Saitama Resona Bank","name:ja":"埼玉りそな銀行"}},"amenity/bank|大眾商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"大眾商業銀行","brand:en":"Ta Chong Commercial Bank","brand:wikidata":"Q10937047","brand:wikipedia":"zh:大眾商業銀行",name:"大眾商業銀行","name:en":"Ta Chong Commercial Bank"}},"amenity/bank|宁波银行":{tags:{amenity:"bank",brand:"宁波银行",name:"宁波银行"}},"amenity/bank|安泰商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"安泰商業銀行","brand:en":"Entie Commercial Bank","brand:wikidata":"Q10946952","brand:wikipedia":"zh:安泰商業銀行",name:"安泰商業銀行","name:en":"Entie Commercial Bank"}},"amenity/bank|工商银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"工商银行","name:en":"Industrial and Commercial Bank of China"}},"amenity/bank|常陽銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"常陽銀行","brand:en":"Joyo Bank","brand:wikidata":"Q6297774","brand:wikipedia":"en:Joyo Bank",name:"常陽銀行","name:en":"Joyo Bank"}},"amenity/bank|彰化商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"彰化商業銀行","brand:en":"Chang Hwa Bank","brand:wikidata":"Q5071627","brand:wikipedia":"en:Chang Hwa Bank",name:"彰化商業銀行","name:en":"Chang Hwa Bank"}},"amenity/bank|招商银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"招商银行","brand:en":"China Merchants Bank","brand:wikidata":"Q1073327","brand:wikipedia":"en:China Merchants Bank",name:"招商银行","name:en":"China Merchants Bank"}},"amenity/bank|新生銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"新生銀行","brand:en":"Shinsei Bank","brand:ja":"新生銀行","brand:wikidata":"Q571997","brand:wikipedia":"ja:新生銀行",name:"新生銀行","name:en":"Shinsei Bank","name:ja":"新生銀行"}},"amenity/bank|日本銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"日本銀行","brand:en":"Bank of Japan","brand:wikidata":"Q333101","brand:wikipedia":"ja:日本銀行",name:"日本銀行","name:en":"Bank of Japan"}},"amenity/bank|東亞銀行":{countryCodes:["hk"],tags:{amenity:"bank",brand:"東亞銀行","brand:en":"Bank of East Asia","brand:wikidata":"Q806679","brand:wikipedia":"zh:東亞銀行","brand:zh-Hans":"东亚银行","brand:zh-Hant":"東亞銀行",name:"東亞銀行 BEA","name:en":"Bank of East Asia","name:zh-Hans":"东亚银行","name:zh-Hant":"東亞銀行"}},"amenity/bank|東日本銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"東日本銀行","brand:en":"Higashi-Nippon Bank","brand:ja":"東日本銀行","brand:wikidata":"Q11527211","brand:wikipedia":"ja:東日本銀行",name:"東日本銀行","name:en":"Higashi-Nippon Bank","name:ja":"東日本銀行"}},"amenity/bank|板信商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"板信商業銀行","brand:en":"Bank of Panshin","brand:wikidata":"Q11104946","brand:wikipedia":"zh:板信商業銀行",name:"板信商業銀行","name:en":"Bank of Panshin"}},"amenity/bank|横浜銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"横浜銀行","brand:en":"Bank of Yokohama","brand:wikidata":"Q2744340","brand:wikipedia":"en:Bank of Yokohama",name:"横浜銀行","name:en":"Bank of Yokohama"}},"amenity/bank|永豐商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"永豐商業銀行","brand:en":"Bank SinoPac","brand:wikidata":"Q4855976","brand:wikipedia":"en:Bank SinoPac",name:"永豐商業銀行","name:en":"Bank SinoPac"}},"amenity/bank|渣打國際商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"渣打國際商業銀行","brand:wikidata":"Q62267023",name:"渣打國際商業銀行"}},"amenity/bank|玉山商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"玉山商業銀行","brand:en":"E.SUN Commercial Bank","brand:wikidata":"Q5321663","brand:wikipedia":"en:E.SUN Commercial Bank",name:"玉山商業銀行","name:en":"E.SUN Commercial Bank"}},"amenity/bank|第一商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"第一商業銀行","brand:en":"First Commercial Bank","brand:wikidata":"Q11602128","brand:wikipedia":"zh:第一商業銀行",name:"第一商業銀行","name:en":"First Commercial Bank"}},"amenity/bank|聯邦商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"聯邦商業銀行","brand:en":"Union Bank of Taiwan","brand:wikidata":"Q15927195","brand:wikipedia":"zh:聯邦商業銀行",name:"聯邦商業銀行","name:en":"Union Bank of Taiwan"}},"amenity/bank|臺灣中小企業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"臺灣中小企業銀行","brand:en":"Taiwan Business Bank","brand:wikidata":"Q15913812","brand:wikipedia":"zh:臺灣中小企業銀行",name:"臺灣中小企業銀行","name:en":"Taiwan Business Bank"}},"amenity/bank|臺灣土地銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"臺灣土地銀行","brand:en":"Land Bank of Taiwan","brand:wikidata":"Q717592","brand:wikipedia":"en:Land Bank of Taiwan",name:"臺灣土地銀行","name:en":"Land Bank of Taiwan"}},"amenity/bank|臺灣新光商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"臺灣新光商業銀行","brand:en":"Shin Kong Commercial Bank","brand:wikidata":"Q15909616","brand:wikipedia":"zh:臺灣新光商業銀行",name:"臺灣新光商業銀行","name:en":"Shin Kong Commercial Bank"}},"amenity/bank|臺灣銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"臺灣銀行","brand:en":"Bank of Taiwan","brand:wikidata":"Q706533","brand:wikipedia":"en:Bank of Taiwan",name:"臺灣銀行","name:en":"Bank of Taiwan"}},"amenity/bank|芝信用金庫":{tags:{amenity:"bank",brand:"芝信用金庫","brand:en":"Shiba Shinkin Bank","brand:ja":"芝信用金庫","brand:wikidata":"Q11614605","brand:wikipedia":"ja:芝信用金庫",name:"芝信用金庫","name:en":"Shiba Shinkin Bank","name:ja":"芝信用金庫"}},"amenity/bank|華南商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"華南商業銀行","brand:en":"Hua Nan Commercial Bank","brand:wikidata":"Q11620043","brand:wikipedia":"zh:華南銀行",name:"華南商業銀行","name:en":"Hua Nan Commercial Bank"}},"amenity/bank|近畿大阪銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"近畿大阪銀行","brand:en":"The Kinki Osaka Bank","brand:ja":"近畿大阪銀行","brand:wikidata":"Q11638628","brand:wikipedia":"ja:近畿大阪銀行",name:"近畿大阪銀行","name:en":"Kinki Osaka Bank","name:ja":"近畿大阪銀行"}},"amenity/bank|遠東國際商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"遠東國際商業銀行","brand:en":"Far Eastern International Bank","brand:wikidata":"Q15911143","brand:wikipedia":"zh:遠東國際商業銀行",name:"遠東國際商業銀行","name:en":"Far Eastern International Bank"}},"amenity/bank|陽信商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"陽信商業銀行","brand:en":"Sunny Commercial Bank","brand:wikidata":"Q11658759","brand:wikipedia":"zh:陽信商業銀行",name:"陽信商業銀行","name:en":"Sunny Commercial Bank"}},"amenity/bank|静岡銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"静岡銀行","brand:en":"Shizuoka Bank","brand:ja":"静岡銀行","brand:wikidata":"Q7499501","brand:wikipedia":"en:Shizuoka Bank",name:"静岡銀行","name:en":"Shizuoka Bank","name:ja":"静岡銀行"}},"amenity/bank|국민은행":{countryCodes:["kr"],matchNames:["국민은행 (gungmin bank)"],tags:{amenity:"bank",brand:"국민은행","brand:en":"KB Kookmin Bank","brand:ko":"국민은행","brand:wikidata":"Q496606","brand:wikipedia":"en:KB Financial Group Inc",name:"국민은행","name:en":"KB Kookmin Bank","name:ko":"국민은행"}},"amenity/bank|기업은행":{countryCodes:["kr"],tags:{amenity:"bank",brand:"기업은행","brand:en":"Industrial Bank of Korea","brand:ko":"기업은행","brand:wikidata":"Q483855","brand:wikipedia":"en:Industrial Bank of Korea",name:"기업은행","name:en":"Industrial Bank of Korea","name:ko":"기업은행"}},"amenity/bank|농협":{countryCodes:["kr"],matchNames:["nh농협은행"],tags:{amenity:"bank",brand:"농협","brand:en":"NH","brand:ko":"농협","brand:wikidata":"Q15283673","brand:wikipedia":"ko:NH농협은행",name:"농협","name:en":"NH","name:ko":"농협"}},"amenity/bank|새마을금고":{countryCodes:["kr"],tags:{amenity:"bank",brand:"새마을금고","brand:ko":"새마을금고","brand:wikidata":"Q12600614","brand:wikipedia":"ko:새마을금고",name:"새마을금고","name:ko":"새마을금고"}},"amenity/bank|신한은행":{countryCodes:["kr"],matchNames:["신한은행 (sinhan bank)"],tags:{amenity:"bank",brand:"신한은행","brand:en":"Sinhan Bank","brand:ko":"신한은행","brand:wikidata":"Q487230","brand:wikipedia":"en:Shinhan Bank",name:"신한은행","name:en":"Sinhan Bank","name:ko":"신한은행"}},"amenity/bank|우리은행":{countryCodes:["kr"],matchNames:["우리은행 (uri bank)"],tags:{amenity:"bank",brand:"우리은행","brand:en":"Woori Bank","brand:ko":"우리은행","brand:wikidata":"Q494369","brand:wikipedia":"en:Woori Bank",name:"우리은행","name:en":"Woori Bank","name:ko":"우리은행"}},"amenity/bank|하나은행":{countryCodes:["kr"],tags:{amenity:"bank",brand:"하나은행","brand:en":"Korea Exchange Bank","brand:ko":"하나은행","brand:wikidata":"Q484047","brand:wikipedia":"en:Korea Exchange Bank",name:"하나은행","name:en":"Korea Exchange Bank","name:ko":"하나은행"}},"amenity/bar|All Bar One":{countryCodes:["gb"],tags:{amenity:"bar",brand:"All Bar One","brand:wikidata":"Q4728624","brand:wikipedia":"en:All Bar One",name:"All Bar One"}},"amenity/bar|Revolución de Cuba":{countryCodes:["gb"],tags:{amenity:"bar",brand:"Revolución de Cuba","brand:wikidata":"Q64024691",name:"Revolución de Cuba"}},"amenity/bar|Revolution":{countryCodes:["gb"],tags:{amenity:"bar",brand:"Revolution","brand:wikidata":"Q64024398",name:"Revolution"}},"amenity/bicycle_rental|Call a Bike":{countryCodes:["de"],tags:{amenity:"bicycle_rental",brand:"Call a Bike","brand:wikidata":"Q1060525","brand:wikipedia":"en:Call a Bike",name:"Call a Bike"}},"amenity/bicycle_rental|Explore Bike Share":{tags:{amenity:"bicycle_rental",brand:"Explore Bike Share",name:"Explore Bike Share"}},"amenity/bicycle_rental|Grid":{countryCodes:["us"],tags:{amenity:"bicycle_rental",brand:"Grid","brand:wikidata":"Q62104168",name:"Grid"}},"amenity/bicycle_rental|MiBici":{countryCodes:["mx"],tags:{amenity:"bicycle_rental",brand:"MiBici","brand:wikidata":"Q60966987","brand:wikipedia":"es:MiBici",name:"MiBici"}},"amenity/bicycle_rental|Swapfiets":{countryCodes:["be","de","dk","nl"],tags:{amenity:"bicycle_rental",brand:"Swapfiets","brand:wikidata":"Q62104374",name:"Swapfiets"}},"amenity/bicycle_rental|metropolradruhr":{countryCodes:["de"],tags:{amenity:"bicycle_rental",brand:"metropolradruhr","brand:wikidata":"Q62104274",name:"metropolradruhr"}},"amenity/bureau_de_change|CADECA":{countryCodes:["cu"],tags:{amenity:"bureau_de_change",brand:"CADECA","brand:wikidata":"Q62122716",name:"CADECA"}},"amenity/bureau_de_change|Travelex":{tags:{amenity:"bureau_de_change",brand:"Travelex","brand:wikidata":"Q2337964","brand:wikipedia":"en:Travelex",name:"Travelex"}},"amenity/bureau_de_change|Беларусбанк":{tags:{amenity:"bureau_de_change",brand:"Беларусбанк",name:"Беларусбанк"}},"amenity/bureau_de_change|Обмен валют Кит Group":{tags:{amenity:"bureau_de_change",brand:"Обмен валют Кит Group",name:"Обмен валют Кит Group"}},"amenity/cafe|85°C":{countryCodes:["au","us"],matchNames:["85 cafe","85 degrees","85 degrees c","85 degrees celsius","85c bakery cafe","85c daily cafe","85oc"],tags:{alt_name:"85C",amenity:"cafe",brand:"85°C","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",cuisine:"coffee_shop;chinese",name:"85°C",takeaway:"yes"}},"amenity/cafe|85度C":{countryCodes:["cn","tw"],tags:{amenity:"cafe",brand:"85度C","brand:en":"85C Bakery Cafe","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",cuisine:"coffee_shop",name:"85度C","name:en":"85C Bakery Cafe",takeaway:"yes"}},"amenity/cafe|Aroma":{tags:{amenity:"cafe",brand:"Aroma",cuisine:"coffee_shop",name:"Aroma",takeaway:"yes"}},"amenity/cafe|Aroma Espresso Bar":{countryCodes:["ca","kz","ro","ua","us"],nomatch:["amenity/cafe|Aroma"],tags:{amenity:"cafe",brand:"Aroma Espresso Bar","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",cuisine:"coffee_shop",name:"Aroma Espresso Bar",takeaway:"yes"}},"amenity/cafe|Barista":{countryCodes:["in","lk","mv","np"],tags:{amenity:"cafe",brand:"Barista","brand:wikidata":"Q644735","brand:wikipedia":"en:Barista (company)",cuisine:"coffee_shop",name:"Barista",takeaway:"yes"}},"amenity/cafe|Beck's Coffee Shop":{countryCodes:["jp"],matchNames:["beck's coffe shop"],tags:{alt_name:"ベックス・コーヒーショップ",amenity:"cafe",brand:"Beck's Coffee Shop","brand:wikidata":"Q11191008","brand:wikipedia":"ja:BECK'S COFFEE SHOP",cuisine:"coffee_shop",name:"Beck's Coffee Shop",takeaway:"yes"}},"amenity/cafe|Biggby Coffee":{countryCodes:["us"],tags:{amenity:"cafe",brand:"Biggby Coffee","brand:wikidata":"Q4906876","brand:wikipedia":"en:Biggby Coffee",cuisine:"coffee_shop",name:"Biggby Coffee",takeaway:"yes"}},"amenity/cafe|Black Rock Coffee":{countryCodes:["us"],tags:{amenity:"cafe",brand:"Black Rock Coffee","brand:wikidata":"Q64225934",cuisine:"coffee_shop",name:"Black Rock Coffee",takeaway:"yes"}},"amenity/cafe|Blue Bottle Coffee":{countryCodes:["jp","kr","us"],tags:{amenity:"cafe",brand:"Blue Bottle Coffee","brand:wikidata":"Q4928917","brand:wikipedia":"en:Blue Bottle Coffee",cuisine:"coffee_shop",name:"Blue Bottle Coffee",takeaway:"yes"}},"amenity/cafe|Bonafide":{countryCodes:["ar","cl"],tags:{amenity:"cafe",brand:"Bonafide","brand:wikidata":"Q62122746",cuisine:"coffee_shop",name:"Bonafide",takeaway:"yes"}},"amenity/cafe|Boston Tea Party":{countryCodes:["gb"],tags:{amenity:"cafe",brand:"Boston Tea Party","brand:wikidata":"Q23461358","brand:wikipedia":"en:Boston Tea Party (café chain)",cuisine:"coffee_shop",name:"Boston Tea Party",takeaway:"yes"}},"amenity/cafe|Bridgehead":{countryCodes:["ca"],tags:{amenity:"cafe",brand:"Bridgehead","brand:wikidata":"Q4966509","brand:wikipedia":"en:Bridgehead Coffee",cuisine:"coffee_shop",name:"Bridgehead",takeaway:"yes"}},"amenity/cafe|Cafe Coffee Day":{tags:{amenity:"cafe",brand:"Cafe Coffee Day","brand:wikidata":"Q5017235","brand:wikipedia":"en:Café Coffee Day",cuisine:"coffee_shop",name:"Cafe Coffee Day",takeaway:"yes"}},"amenity/cafe|Caffè Nero":{countryCodes:["gb","ie","tr","us"],matchNames:["cafe nero"],tags:{amenity:"cafe",brand:"Caffè Nero","brand:wikidata":"Q675808","brand:wikipedia":"en:Caffè Nero",cuisine:"coffee_shop",name:"Caffè Nero",takeaway:"yes"}},"amenity/cafe|Café Amazon":{tags:{amenity:"cafe",brand:"Café Amazon","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",cuisine:"coffee_shop",name:"Café Amazon",takeaway:"yes"}},"amenity/cafe|Café Dépôt":{countryCodes:["ca"],tags:{amenity:"cafe",brand:"Café Dépôt","brand:wikidata":"Q64924449",cuisine:"coffee_shop;cake;bagel;bistro",name:"Café Dépôt",takeaway:"yes"}},"amenity/cafe|Café Martínez":{countryCodes:["ar"],tags:{amenity:"cafe",brand:"Café Martínez","brand:wikidata":"Q16540032","brand:wikipedia":"es:Café Martínez",cuisine:"coffee_shop",name:"Café Martínez",takeaway:"yes"}},"amenity/cafe|Café de Paris":{tags:{amenity:"cafe",brand:"Café de Paris",cuisine:"coffee_shop",name:"Café de Paris",takeaway:"yes"}},"amenity/cafe|Café de la Mairie":{tags:{amenity:"cafe",brand:"Café de la Mairie",cuisine:"coffee_shop",name:"Café de la Mairie",takeaway:"yes"}},"amenity/cafe|Café de la Poste":{tags:{amenity:"cafe",brand:"Café de la Poste",cuisine:"coffee_shop",name:"Café de la Poste",takeaway:"yes"}},"amenity/cafe|Cappuccino":{countryCodes:["at","be","de","es","se"],tags:{amenity:"cafe",brand:"Cappuccino",cuisine:"coffee_shop",name:"Cappuccino",takeaway:"yes"}},"amenity/cafe|Caribou Coffee":{tags:{amenity:"cafe",brand:"Caribou Coffee","brand:wikidata":"Q5039494","brand:wikipedia":"en:Caribou Coffee",cuisine:"coffee_shop",name:"Caribou Coffee",takeaway:"yes"}},"amenity/cafe|Chatime":{tags:{amenity:"cafe",brand:"Chatime","brand:en":"Chatime","brand:wikidata":"Q16829306","brand:wikipedia":"en:Chatime","brand:zh":"日出茶太",cuisine:"bubble_tea",name:"Chatime","name:en":"Chatime","name:zh":"日出茶太",takeaway:"yes"}},"amenity/cafe|CoCo":{countryCodes:["au"],tags:{amenity:"cafe",brand:"CoCo","brand:wikidata":"Q64827025",cuisine:"bubble_tea",name:"Coco",takeaway:"yes"}},"amenity/cafe|Coffee Bean":{tags:{amenity:"cafe",brand:"Coffee Bean",cuisine:"coffee_shop",name:"Coffee Bean",takeaway:"yes"}},"amenity/cafe|Coffee Culture~(Canada/USA)":{countryCodes:["ca","us"],tags:{amenity:"cafe",brand:"Coffee Culture",cuisine:"coffee_shop",name:"Coffee Culture",takeaway:"yes"}},"amenity/cafe|Coffee Culture~(New Zealand)":{countryCodes:["nz"],tags:{amenity:"cafe",brand:"Coffee Culture",cuisine:"coffee_shop",name:"Coffee Culture",takeaway:"yes"}},"amenity/cafe|Coffee Fellows":{countryCodes:["de","lu","nl"],tags:{amenity:"cafe",brand:"Coffee Fellows","brand:wikidata":"Q23461429","brand:wikipedia":"en:Coffee Fellows",cuisine:"coffee_shop",name:"Coffee Fellows",takeaway:"yes"}},"amenity/cafe|Coffee House~(Finland)":{countryCodes:["fi"],nomatch:["amenity/cafe|The Coffee House~(Vietnam)"],tags:{amenity:"cafe",brand:"Coffee House","brand:wikidata":"Q11855430","brand:wikipedia":"fi:Coffee House",cuisine:"coffee_shop",name:"Coffee House",takeaway:"yes"}},"amenity/cafe|Coffee Island":{countryCodes:["cy","gr"],tags:{amenity:"cafe",brand:"Coffee Island","brand:wikidata":"Q60867333","brand:wikipedia":"en:Coffee Island",cuisine:"coffee_shop",name:"Coffee Island",takeaway:"yes"}},"amenity/cafe|Coffee Like":{countryCodes:["kz","ru"],tags:{amenity:"cafe",brand:"Coffee Like","brand:wikidata":"Q55662627","brand:wikipedia":"ru:Coffee Like",cuisine:"coffee_shop",name:"Coffee Like",takeaway:"yes"}},"amenity/cafe|Coffee Time":{tags:{amenity:"cafe",brand:"Coffee Time","brand:wikidata":"Q5140932","brand:wikipedia":"en:Coffee Time",cuisine:"coffee_shop",name:"Coffee Time",takeaway:"yes"}},"amenity/cafe|Coffee#1":{countryCodes:["gb"],matchNames:["coffee number 1","coffee number one"],tags:{amenity:"cafe",brand:"Coffee#1","brand:wikidata":"Q22032058","brand:wikipedia":"en:Coffee 1",cuisine:"coffee_shop",name:"Coffee#1",takeaway:"yes"}},"amenity/cafe|Cofix":{countryCodes:["il","ru"],tags:{amenity:"cafe",brand:"Cofix","brand:en":"Cofix","brand:he":"קפויקס","brand:wikidata":"Q16132717","brand:wikipedia":"he:קופיקס",cuisine:"coffee_shop",name:"Cofix","name:en":"Cofix","name:he":"קופיקס",takeaway:"yes"}},"amenity/cafe|Cofizz":{countryCodes:["il"],tags:{amenity:"cafe",brand:"Cofizz","brand:en":"Cofizz","brand:he":"קופיז","brand:wikidata":"Q64606270",cuisine:"coffee_shop",name:"Cofizz","name:en":"Cofizz","name:he":"קופיז",takeaway:"yes"}},"amenity/cafe|Costa":{matchNames:["costa coffee"],tags:{amenity:"cafe",brand:"Costa","brand:wikidata":"Q608845","brand:wikipedia":"en:Costa Coffee",cuisine:"coffee_shop",name:"Costa",takeaway:"yes"}},"amenity/cafe|Country Style":{countryCodes:["ca"],tags:{amenity:"cafe",brand:"Country Style","brand:wikidata":"Q5177435","brand:wikipedia":"en:Country Style",cuisine:"coffee_shop",name:"Country Style",takeaway:"yes"}},"amenity/cafe|Cộng Cà Phê":{countryCodes:["kr","vn"],matchNames:["cong"],tags:{amenity:"cafe",brand:"Cộng Cà Phê","brand:wikidata":"Q63864181",cuisine:"coffee_shop;vietnamese",name:"Cộng Cà Phê","name:vi":"Cộng Cà Phê",takeaway:"yes"}},"amenity/cafe|Dolce Vita":{tags:{amenity:"cafe",brand:"Dolce Vita",cuisine:"coffee_shop",name:"Dolce Vita",takeaway:"yes"}},"amenity/cafe|Dutch Bros. Coffee":{countryCodes:["us"],matchNames:["dutch bros","dutch brothers"],tags:{amenity:"cafe",brand:"Dutch Bros. Coffee","brand:wikidata":"Q5317253","brand:wikipedia":"en:Dutch Bros. Coffee",cuisine:"coffee_shop",name:"Dutch Bros. Coffee",takeaway:"only"}},"amenity/cafe|Espresso House":{countryCodes:["dk","fi","no","se"],tags:{amenity:"cafe",brand:"Espresso House","brand:wikidata":"Q10489162","brand:wikipedia":"en:Espresso House",cuisine:"coffee_shop",name:"Espresso House",takeaway:"yes"}},"amenity/cafe|Fran's Café":{countryCodes:["br"],tags:{amenity:"cafe",brand:"Fran's Café","brand:wikidata":"Q62075645",cuisine:"coffee_shop",name:"Fran's Café",takeaway:"yes"}},"amenity/cafe|Gloria Jean's":{nomatch:["shop/clothes|Gloria Jeans"],tags:{amenity:"cafe",brand:"Gloria Jean's","brand:wikidata":"Q2666365","brand:wikipedia":"en:Gloria Jean's Coffees",cuisine:"coffee_shop",name:"Gloria Jean's",official_name:"Gloria Jean's Coffees",takeaway:"yes"}},"amenity/cafe|Gong Cha~(Vietnam)":{countryCodes:["vn"],tags:{"alt_name:vi":"Cống Trà",amenity:"cafe",brand:"Gong Cha","brand:vi":"Gong Cha","brand:wikidata":"Q5581670","brand:wikipedia":"vi:Gong Cha","brand:zh":"貢茶",cuisine:"bubble_tea",name:"Gong Cha","name:vi":"Gong Cha","name:zh":"貢茶",takeaway:"yes"}},"amenity/cafe|Gong Cha~(worldwide)":{countryCodes:["au","bn","ca","mm","mo","my","nz","ph","sg","us"],tags:{amenity:"cafe",brand:"Gong Cha","brand:wikidata":"Q5581670","brand:wikipedia":"en:Gong Cha","brand:zh":"貢茶",cuisine:"bubble_tea",int_name:"Gong Cha",name:"Gong Cha","name:zh":"貢茶",takeaway:"yes"}},"amenity/cafe|Havanna":{countryCodes:["ar","pe"],tags:{amenity:"cafe",brand:"Havanna","brand:wikidata":"Q2900869","brand:wikipedia":"es:Havanna",cuisine:"coffee_shop",name:"Havanna",takeaway:"yes"}},"amenity/cafe|Highlands Coffee":{countryCodes:["vn"],matchNames:["highlands"],tags:{amenity:"cafe",brand:"Highlands Coffee","brand:wikidata":"Q5759361","brand:wikipedia":"vi:Highlands Coffee",cuisine:"coffee_shop;vietnamese",name:"Highlands Coffee","name:en":"Highlands Coffee",takeaway:"yes"}},"amenity/cafe|Hudsons Coffee":{countryCodes:["au","sg"],tags:{amenity:"cafe",brand:"Hudsons Coffee","brand:wikidata":"Q5929076","brand:wikipedia":"en:Hudsons Coffee",cuisine:"coffee_shop",name:"Hudsons Coffee",takeaway:"yes"}},"amenity/cafe|Insomnia":{countryCodes:["ie"],tags:{amenity:"cafe",brand:"Insomnia","brand:wikidata":"Q6038271","brand:wikipedia":"en:Insomnia Coffee Company",cuisine:"coffee_shop",name:"Insomnia",takeaway:"yes"}},"amenity/cafe|Jamaica Blue":{countryCodes:["ae","au","cn","gb","my","nz","sg"],tags:{amenity:"cafe",brand:"Jamaica Blue","brand:wikidata":"Q24965819","brand:wikipedia":"en:Jamaica Blue",cuisine:"coffee_shop",name:"Jamaica Blue",takeaway:"yes"}},"amenity/cafe|Joe & The Juice":{tags:{amenity:"cafe",brand:"Joe & The Juice","brand:wikidata":"Q26221514","brand:wikipedia":"en:Joe & The Juice",cuisine:"coffee_shop",name:"Joe & The Juice",takeaway:"yes"}},"amenity/cafe|La Colombe Coffee Roasters":{countryCodes:["us"],tags:{amenity:"cafe",brand:"La Colombe Coffee Roasters","brand:wikidata":"Q23461663","brand:wikipedia":"en:La Colombe Coffee Roasters",cuisine:"coffee_shop",name:"La Colombe Coffee Roasters",short_name:"La Colombe",takeaway:"yes"}},"amenity/cafe|Le Pain Quotidien":{tags:{amenity:"cafe",brand:"Le Pain Quotidien","brand:wikidata":"Q2046903","brand:wikipedia":"en:Le Pain Quotidien",cuisine:"coffee_shop",name:"Le Pain Quotidien",takeaway:"yes"}},"amenity/cafe|Mado":{countryCodes:["tr"],tags:{amenity:"cafe",brand:"Mado","brand:wikidata":"Q17116336","brand:wikipedia":"en:Mado (food company)",cuisine:"coffee_shop",name:"Mado",takeaway:"yes"}},"amenity/cafe|McCafé":{tags:{amenity:"cafe",brand:"McCafé","brand:wikidata":"Q3114287","brand:wikipedia":"en:McCafé",cuisine:"coffee_shop",name:"McCafé",takeaway:"yes"}},"amenity/cafe|Michel's Patisserie":{countryCodes:["au","cn","id","nz"],tags:{amenity:"cafe",brand:"Michel's Patisserie","brand:wikidata":"Q6836235","brand:wikipedia":"en:Michel's Patisserie",cuisine:"coffee_shop",name:"Michel's Patisserie",takeaway:"yes"}},"amenity/cafe|Mikel":{countryCodes:["ae","au","cy","de","eg","gb","gr","sa","us"],tags:{amenity:"cafe",brand:"Mikel","brand:wikidata":"Q16952021","brand:wikipedia":"el:Mikel",cuisine:"coffee_shop",name:"Mikel",takeaway:"yes"}},"amenity/cafe|Muffin Break":{countryCodes:["au","gb","in","nz"],tags:{amenity:"cafe",brand:"Muffin Break","brand:wikidata":"Q16964876","brand:wikipedia":"en:Muffin Break",cuisine:"coffee_shop",name:"Muffin Break",takeaway:"yes"}},"amenity/cafe|Muzz Buzz":{countryCodes:["au","nz"],tags:{amenity:"cafe",brand:"Muzz Buzz","brand:wikidata":"Q6944483","brand:wikipedia":"en:Muzz Buzz",cuisine:"coffee_shop",name:"Muzz Buzz",takeaway:"yes"}},"amenity/cafe|Patisserie Valerie":{countryCodes:["gb"],tags:{amenity:"cafe",brand:"Patisserie Valerie","brand:wikidata":"Q22101966","brand:wikipedia":"en:Patisserie Valerie",cuisine:"coffee_shop",name:"Patisserie Valerie",takeaway:"yes"}},"amenity/cafe|Peet's Coffee":{countryCodes:["us"],matchNames:["peets","peets coffee & tea"],tags:{amenity:"cafe",brand:"Peet's Coffee","brand:wikidata":"Q1094101","brand:wikipedia":"en:Peet's Coffee",cuisine:"coffee_shop",name:"Peet's Coffee",takeaway:"yes"}},"amenity/cafe|Pie Face":{countryCodes:["au"],tags:{amenity:"cafe",brand:"Pie Face","brand:wikidata":"Q18166370","brand:wikipedia":"en:Pie Face",cuisine:"coffee_shop",name:"Pie Face",takeaway:"yes"}},"amenity/cafe|Prime":{countryCodes:["ru"],tags:{amenity:"cafe",brand:"Prime","brand:wikidata":"Q62122839",cuisine:"coffee_shop",name:"Prime",takeaway:"yes"}},"amenity/cafe|Pronto":{countryCodes:["jp"],matchNames:["プロント"],nomatch:["shop/convenience|Coop Pronto"],tags:{amenity:"cafe",brand:"Pronto","brand:wikidata":"Q11336224","brand:wikipedia":"ja:プロントコーポレーション",cuisine:"coffee_shop",name:"Pronto","name:ja":"プロント",takeaway:"yes"}},"amenity/cafe|Pumpkin":{countryCodes:["gb"],matchNames:["pumpkin cafe","pumpkin cafe shop"],tags:{amenity:"cafe",brand:"Pumpkin","brand:wikidata":"Q27825961","brand:wikipedia":"en:Pumpkin Café Shop",cuisine:"coffee_shop",name:"Pumpkin",takeaway:"yes"}},"amenity/cafe|Quickly":{tags:{amenity:"cafe",brand:"Quickly","brand:en":"Quickly","brand:wikidata":"Q3771463","brand:wikipedia":"en:Quickly","brand:zh":"快可立",cuisine:"bubble_tea",name:"Quickly","name:en":"Quickly","name:zh":"快可立",takeaway:"yes"}},"amenity/cafe|Second Cup":{tags:{amenity:"cafe",brand:"Second Cup","brand:wikidata":"Q862180","brand:wikipedia":"en:Second Cup",cuisine:"coffee_shop",name:"Second Cup",takeaway:"yes"}},"amenity/cafe|Segafredo":{tags:{amenity:"cafe",brand:"Segafredo","brand:wikidata":"Q21282762","brand:wikipedia":"it:Segafredo Zanetti",cuisine:"coffee_shop",name:"Segafredo",takeaway:"yes"}},"amenity/cafe|Sharetea":{countryCodes:["au","us"],tags:{amenity:"cafe",brand:"Sharetea","brand:wikidata":"Q64827032",cuisine:"bubble_tea",name:"Sharetea","name:en":"Sharetea","name:zh":"歇腳亭",takeaway:"yes"}},"amenity/cafe|Starbucks":{tags:{amenity:"cafe",brand:"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Starbucks",official_name:"Starbucks Coffee",takeaway:"yes"}},"amenity/cafe|The Coffee Bean & Tea Leaf":{tags:{amenity:"cafe",brand:"The Coffee Bean & Tea Leaf","brand:wikidata":"Q1141384","brand:wikipedia":"en:The Coffee Bean & Tea Leaf",cuisine:"coffee_shop",name:"The Coffee Bean & Tea Leaf",takeaway:"yes"}},"amenity/cafe|The Coffee Club":{tags:{amenity:"cafe",brand:"The Coffee Club","brand:wikidata":"Q7726599","brand:wikipedia":"en:The Coffee Club",cuisine:"coffee_shop",name:"The Coffee Club",takeaway:"yes"}},"amenity/cafe|The Coffee House~(Vietnam)":{countryCodes:["vn"],matchNames:["coffee house"],nomatch:["amenity/cafe|Coffee House~(Finland)"],tags:{amenity:"cafe",brand:"The Coffee House","brand:wikidata":"Q60775742","brand:wikipedia":"en:The Coffee House (coffeehouse chain)",cuisine:"coffee_shop;vietnamese",name:"The Coffee House","name:en":"The Coffee House",takeaway:"yes"}},"amenity/cafe|The Human Bean":{countryCodes:["us"],matchNames:["human bean"],tags:{amenity:"cafe",brand:"The Human Bean","brand:wikidata":"Q7740821","brand:wikipedia":"en:The Human Bean",cuisine:"coffee_shop",name:"The Human Bean",takeaway:"yes"}},"amenity/cafe|Tim Hortons":{tags:{amenity:"cafe",brand:"Tim Hortons","brand:wikidata":"Q175106","brand:wikipedia":"en:Tim Hortons",cuisine:"coffee_shop",name:"Tim Hortons",takeaway:"yes"}},"amenity/cafe|Timothy's":{countryCodes:["ca"],tags:{amenity:"cafe",brand:"Timothy's","brand:wikidata":"Q7807011","brand:wikipedia":"en:Timothy's World Coffee",cuisine:"coffee_shop",name:"Timothy's",takeaway:"yes"}},"amenity/cafe|Toast Box":{tags:{amenity:"cafe",brand:"Toast Box",cuisine:"coffee_shop",name:"Toast Box",takeaway:"yes"}},"amenity/cafe|Tostao’":{countryCodes:["co"],tags:{amenity:"cafe",brand:"Tostao’","brand:wikidata":"Q60632476",cuisine:"coffee_shop",name:"Tostao’","name:es":"Tostao’",official_name:"TOSTAO’ Café & Pan",takeaway:"yes"}},"amenity/cafe|Traveler's Coffee":{countryCodes:["ru"],tags:{amenity:"cafe",brand:"Traveler's Coffee","brand:wikidata":"Q4051716","brand:wikipedia":"ru:Traveler’s Coffee",cuisine:"coffee_shop",name:"Traveler's Coffee",takeaway:"yes"}},"amenity/cafe|Trung Nguyên Coffee":{countryCodes:["vn"],matchNames:["trung nguyen"],tags:{amenity:"cafe",brand:"Trung Nguyên","brand:wikidata":"Q3541154","brand:wikipedia":"vi:Trung Nguyên (công ty)",cuisine:"coffee_shop;vietnamese",name:"Trung Nguyên Coffee","name:en":"Trung Nguyen Coffee","name:vi":"Cà phê Trung Nguyên",takeaway:"yes"}},"amenity/cafe|Wayne's Coffee":{countryCodes:["fi","no","se"],tags:{amenity:"cafe",brand:"Wayne's Coffee","brand:wikidata":"Q2637272","brand:wikipedia":"en:Wayne's Coffee",cuisine:"coffee_shop",name:"Wayne's Coffee",takeaway:"yes"}},"amenity/cafe|Wild Bean Cafe":{tags:{amenity:"cafe",brand:"Wild Bean Cafe","brand:wikidata":"Q61804826",cuisine:"coffee_shop",name:"Wild Bean Cafe",takeaway:"yes"}},"amenity/cafe|Ya Kun Kaya Toast":{tags:{amenity:"cafe",brand:"Ya Kun Kaya Toast","brand:wikidata":"Q8046237","brand:wikipedia":"en:Ya Kun Kaya Toast",cuisine:"coffee_shop",name:"Ya Kun Kaya Toast",takeaway:"yes"}},"amenity/cafe|Zarraffa's Coffee":{countryCodes:["au"],tags:{amenity:"cafe",brand:"Zarraffa's Coffee ","brand:wikidata":"Q8066878","brand:wikipedia":"en:Zarraffa's Coffee",cuisine:"coffee_shop",name:"Zarraffa's Coffee",takeaway:"yes"}},"amenity/cafe|Їдальня":{tags:{amenity:"cafe",brand:"Їдальня",cuisine:"coffee_shop",name:"Їдальня",takeaway:"yes"}},"amenity/cafe|Берёзка":{tags:{amenity:"cafe",brand:"Берёзка",cuisine:"coffee_shop",name:"Берёзка",takeaway:"yes"}},"amenity/cafe|Виктория":{nomatch:["shop/hairdresser|Виктория","shop/supermarket|Виктория"],tags:{amenity:"cafe",brand:"Виктория",cuisine:"coffee_shop",name:"Виктория",takeaway:"yes"}},"amenity/cafe|Гурман":{tags:{amenity:"cafe",brand:"Гурман",cuisine:"coffee_shop",name:"Гурман",takeaway:"yes"}},"amenity/cafe|Даблби":{countryCodes:["ru"],tags:{amenity:"cafe",brand:"Даблби","brand:en":"Double B","brand:wikidata":"Q62501686",cuisine:"coffee_shop",name:"Даблби","name:en":"Double B",takeaway:"yes"}},"amenity/cafe|Лагуна":{countryCodes:["ru","ua"],tags:{amenity:"cafe",brand:"Лагуна",cuisine:"coffee_shop",name:"Лагуна",takeaway:"yes"}},"amenity/cafe|Лакомка":{tags:{amenity:"cafe",brand:"Лакомка",cuisine:"coffee_shop",name:"Лакомка",takeaway:"yes"}},"amenity/cafe|Оазис":{tags:{amenity:"cafe",brand:"Оазис","brand:en":"Oasis",cuisine:"coffee_shop",name:"Оазис","name:en":"Oasis",takeaway:"yes"}},"amenity/cafe|Парус":{tags:{amenity:"cafe",brand:"Парус",cuisine:"coffee_shop",name:"Парус",takeaway:"yes"}},"amenity/cafe|Сказка":{tags:{amenity:"cafe",brand:"Сказка",cuisine:"coffee_shop",name:"Сказка",takeaway:"yes"}},"amenity/cafe|Смак":{countryCodes:["kz","ru","ua","uz"],matchTags:["shop/convenience"],tags:{amenity:"cafe",brand:"Смак","brand:en":"Taste",cuisine:"coffee_shop",name:"Смак","name:en":"Taste",takeaway:"yes"}},"amenity/cafe|Старбакс":{countryCodes:["ru"],tags:{amenity:"cafe",brand:"Старбакс","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Старбакс","name:en":"Starbucks",takeaway:"yes"}},"amenity/cafe|Трактир":{tags:{amenity:"cafe",brand:"Трактир",cuisine:"coffee_shop",name:"Трактир",takeaway:"yes"}},"amenity/cafe|Транзит":{countryCodes:["kz","ru","ua"],tags:{amenity:"cafe",brand:"Транзит",cuisine:"coffee_shop",name:"Транзит",takeaway:"yes"}},"amenity/cafe|Уют":{tags:{amenity:"cafe",brand:"Уют",cuisine:"coffee_shop",name:"Уют",takeaway:"yes"}},"amenity/cafe|Фортуна":{tags:{amenity:"cafe",brand:"Фортуна",cuisine:"coffee_shop",name:"Фортуна",takeaway:"yes"}},"amenity/cafe|Хуторок":{tags:{amenity:"cafe",brand:"Хуторок",cuisine:"coffee_shop",name:"Хуторок",takeaway:"yes"}},"amenity/cafe|Шоколадница":{countryCodes:["ru"],matchNames:["шоколад"],tags:{amenity:"cafe",brand:"Шоколадница","brand:en":"Chocolate","brand:wikidata":"Q30891188","brand:wikipedia":"ru:Шоколадница (сеть кофеен)",cuisine:"coffee_shop",name:"Шоколадница","name:en":"Shokoladnitsa",takeaway:"yes"}},"amenity/cafe|Штолле":{countryCodes:["by","ru","ua"],tags:{amenity:"cafe",brand:"Штолле","brand:en":"Stolle","brand:wikidata":"Q62502236",cuisine:"coffee_shop",name:"Штолле","name:en":"Stolle",takeaway:"yes"}},"amenity/cafe|ארומה":{countryCodes:["il"],tags:{amenity:"cafe",brand:"ארומה","brand:en":"Aroma Espresso Bar","brand:he":"ארומה","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",cuisine:"coffee_shop",name:"ארומה","name:en":"Aroma Espresso Bar","name:he":"ארומה",takeaway:"yes"}},"amenity/cafe|לנדוור":{countryCodes:["il"],matchNames:["קפה לדנוור"],matchTags:["amenity/restaurant"],tags:{amenity:"cafe",brand:"קפה לנדוור","brand:en":"Landwer Coffee","brand:he":"קפה לנדוור","brand:wikidata":"Q6485288","brand:wikipedia":"he:קפה לנדוור",cuisine:"coffee_shop",name:"לנדוור","name:en":"Landwer","name:he":"לנדוור",takeaway:"yes"}},"amenity/cafe|סי קפה":{countryCodes:["il"],matchNames:["si cafe","si espresso"],tags:{alt_name:"סי אספרסו","alt_name:en":"Si Espresso","alt_name:he":"סי אספרסו",amenity:"cafe",brand:"סי קפה","brand:en":"Si Cafe","brand:he":"סי קפה","brand:wikidata":"Q64606227",cuisine:"coffee_shop",name:"סי קפה","name:en":"Si Cafe","name:he":"סי קפה",takeaway:"yes"}},"amenity/cafe|קפה ג'ו":{countryCodes:["il"],matchNames:["ג'ו קפה"],tags:{alt_name:"קפה Joe",amenity:"cafe",brand:"קפה ג'ו","brand:en":"Cafe Joe","brand:he":"קפה ג'ו","brand:wikidata":"Q6774425","brand:wikipedia":"he:קפה ג'ו",cuisine:"coffee_shop",name:"קפה ג'ו","name:en":"Cafe Joe","name:he":"קפה ג'ו",takeaway:"yes"}},"amenity/cafe|קפה גרג":{countryCodes:["il"],matchTags:["amenity/restaurant"],tags:{amenity:"cafe",brand:"קפה גרג","brand:en":"Greg Cafe","brand:he":"קפה גרג","brand:wikidata":"Q43295499","brand:wikipedia":"he:קפה גרג",cuisine:"coffee_shop",name:"קפה גרג","name:en":"Greg Cafe","name:he":"קפה גרג",takeaway:"yes"}},"amenity/cafe|קפה נמרוד":{countryCodes:["il"],matchTags:["amenity/restaurant"],tags:{amenity:"cafe",brand:"קפה נמרוד","brand:en":"Cafe Nimrod","brand:he":"קפה נמרוד","brand:wikidata":"Q64606192",cuisine:"coffee_shop",name:"קפה נמרוד","name:en":"Cafe Nimrod","name:he":"קפה נמרוד",takeaway:"yes"}},"amenity/cafe|קפה קפה":{countryCodes:["il"],matchTags:["amenity/fast_food","amenity/restaurant"],tags:{amenity:"cafe",brand:"קפה קפה","brand:en":"Cafe Cafe","brand:he":"קפה קפה","brand:wikidata":"Q5017233","brand:wikipedia":"he:קפה קפה",cuisine:"coffee_shop",name:"קפה קפה","name:en":"Cafe Cafe","name:he":"קפה קפה",takeaway:"yes"}},"amenity/cafe|רולדין":{countryCodes:["il"],matchTags:["amenity/restaurant","shop/bakery","shop/pastry"],tags:{amenity:"cafe",brand:"רולדין","brand:en":"Roladin","brand:he":"רולדין","brand:wikidata":"Q18390972","brand:wikipedia":"he:רולדין",cuisine:"coffee_shop",name:"רולדין","name:en":"Roladin","name:he":"רולדין",takeaway:"yes"}},"amenity/cafe|คาเฟ่ อเมซอน":{countryCodes:["th"],tags:{amenity:"cafe",brand:"คาเฟ่ อเมซอน","brand:en":"Café Amazon","brand:th":"คาเฟ่ อเมซอน","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",cuisine:"coffee_shop",name:"คาเฟ่ อเมซอน","name:en":"Café Amazon","name:th":"คาเฟ่ อเมซอน",takeaway:"yes"}},"amenity/cafe|エクセルシオール カフェ":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"エクセルシオール カフェ","brand:en":"EXCELSIOR CAFFÉ","brand:ja":"エクセルシオール カフェ","brand:wikidata":"Q11289828","brand:wikipedia":"ja:エクセルシオール カフェ",cuisine:"coffee_shop",name:"エクセルシオール カフェ","name:ja":"エクセルシオール カフェ",takeaway:"yes"}},"amenity/cafe|カフェ・ド・クリエ":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"カフェ・ド・クリエ","brand:en":"Cafe de CRIE","brand:ja":"カフェ・ド・クリエ","brand:wikidata":"Q17219077","brand:wikipedia":"ja:ポッカクリエイト",cuisine:"coffee_shop",name:"カフェ・ド・クリエ","name:en":"Cafe de CRIE","name:ja":"カフェ・ド・クリエ",takeaway:"yes"}},"amenity/cafe|カフェ・ベローチェ":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"カフェ・ベローチェ","brand:en":"CAFFÈ VELOCE","brand:ja":"カフェ・ベローチェ","brand:wikidata":"Q11294597","brand:wikipedia":"ja:カフェ・ベローチェ",cuisine:"coffee_shop",name:"カフェ・ベローチェ","name:en":"CAFFÈ VELOCE","name:ja":"カフェ・ベローチェ",takeaway:"yes"}},"amenity/cafe|コメダ珈琲店":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"コメダ珈琲店","brand:en":"Komeda Coffee Shop","brand:ja":"コメダ珈琲店","brand:wikidata":"Q11302679","brand:wikipedia":"ja:コメダ",cuisine:"coffee_shop",name:"コメダ珈琲店","name:en":"Komeda Coffee Shop","name:ja":"コメダ珈琲店",takeaway:"yes"}},"amenity/cafe|サンマルクカフェ":{countryCodes:["jp"],tags:{"alt_name:en":"Saint Marc Café",amenity:"cafe",brand:"サンマルクカフェ","brand:en":"ST.MARC CAFÉ","brand:ja":"サンマルクカフェ","brand:wikidata":"Q11305989","brand:wikipedia":"ja:サンマルクホールディングス",cuisine:"coffee_shop",name:"サンマルクカフェ","name:en":"ST.MARC CAFÉ","name:ja":"サンマルクカフェ",takeaway:"yes"}},"amenity/cafe|スターバックス":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"スターバックス","brand:en":"Starbucks","brand:ja":"スターバックス","brand:wikidata":"Q37158","brand:wikipedia":"ja:スターバックス",cuisine:"coffee_shop",name:"スターバックス","name:en":"Starbucks","name:ja":"スターバックス",official_name:"スターバックスコーヒー","official_name:en":"Starbucks Coffee","official_name:ja":"スターバックスコーヒー",takeaway:"yes"}},"amenity/cafe|タリーズコーヒー":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"タリーズコーヒー","brand:en":"Tully's Coffee","brand:ja":"タリーズコーヒー","brand:wikidata":"Q3541983","brand:wikipedia":"en:Tully's Coffee",cuisine:"coffee_shop",name:"タリーズコーヒー","name:en":"Tully's Coffee","name:ja":"タリーズコーヒー",takeaway:"yes"}},"amenity/cafe|ドトールコーヒーショップ":{countryCodes:["jp"],matchNames:["ドトールコーヒー"],tags:{amenity:"cafe",brand:"ドトールコーヒーショップ","brand:en":"Doutor","brand:ja":"ドトールコーヒーショップ","brand:wikidata":"Q11322732","brand:wikipedia":"ja:ドトールコーヒーショップ",cuisine:"coffee_shop",name:"ドトールコーヒーショップ","name:en":"Doutor Coffee Shop","name:ja":"ドトールコーヒーショップ",takeaway:"yes"}},"amenity/cafe|ルノアール":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"ルノアール","brand:en":"Renoir","brand:ja":"ルノアール","brand:wikidata":"Q11649991","brand:wikipedia":"ja:銀座ルノアール",cuisine:"coffee_shop",name:"ルノアール","name:en":"Renoir","name:ja":"ルノアール",official_name:"喫茶室ルノアール","official_name:en":"Ginza Renoir","official_name:ja":"喫茶室ルノアール",takeaway:"yes"}},"amenity/cafe|快可立":{countryCodes:["tw"],tags:{amenity:"cafe",brand:"快可立","brand:en":"Quickly","brand:wikidata":"Q3771463","brand:wikipedia":"zh:快可立","brand:zh":"快可立",cuisine:"bubble_tea",name:"快可立","name:en":"Quickly","name:zh":"快可立",takeaway:"yes"}},"amenity/cafe|日出茶太":{countryCodes:["tw"],tags:{amenity:"cafe",brand:"日出茶太","brand:en":"Chatime","brand:wikidata":"Q16829306","brand:wikipedia":"zh:日出茶太","brand:zh":"日出茶太",cuisine:"bubble_tea",name:"日出茶太","name:en":"Chatime","name:zh":"日出茶太",takeaway:"yes"}},"amenity/cafe|星巴克":{countryCodes:["cn","tw"],tags:{amenity:"cafe",brand:"星巴克","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"zh:星巴克","brand:zh":"星巴克",cuisine:"coffee_shop",name:"星巴克","name:en":"Starbucks","name:zh":"星巴克",takeaway:"yes"}},"amenity/cafe|珈琲館":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"珈琲館","brand:en":"Kohikan","brand:ja":"珈琲館","brand:wikidata":"Q11573290","brand:wikipedia":"ja:珈琲館",cuisine:"coffee_shop",name:"珈琲館","name:en":"Kohikan","name:ja":"珈琲館",takeaway:"yes"}},"amenity/cafe|貢茶 Gong Cha":{countryCodes:["hk"],tags:{amenity:"cafe",brand:"貢茶 Gong Cha","brand:en":"Gong Cha","brand:wikidata":"Q5581670","brand:wikipedia":"zh:貢茶 (連鎖店)","brand:zh":"貢茶",cuisine:"bubble_tea",name:"貢茶 Gong Cha","name:en":"Gong Cha","name:zh":"貢茶",takeaway:"yes"}},"amenity/cafe|貢茶~(Japan)":{countryCodes:["ja"],tags:{amenity:"cafe",brand:"貢茶","brand:ja":"貢茶","brand:wikidata":"Q5581670","brand:wikipedia":"ja:貢茶","brand:zh":"貢茶",cuisine:"bubble_tea",int_name:"Gong Cha",name:"貢茶","name:ja":"貢茶","name:zh":"貢茶",takeaway:"yes"}},"amenity/cafe|貢茶~(Taiwan)":{countryCodes:["tw"],tags:{amenity:"cafe",brand:"貢茶","brand:wikidata":"Q5581670","brand:wikipedia":"zh:貢茶 (連鎖店)",cuisine:"bubble_tea",int_name:"Gong Cha",name:"貢茶","name:zh":"貢茶",takeaway:"yes"}},"amenity/cafe|贡茶~(China)":{countryCodes:["cn"],tags:{amenity:"cafe",brand:"贡茶","brand:wikidata":"Q5581670","brand:wikipedia":"zh:贡茶 (连锁店)","brand:zh-Hans":"贡茶","brand:zh-Hant":"貢茶",cuisine:"bubble_tea",int_name:"Gong Cha",name:"贡茶","name:zh-Hans":"贡茶","name:zh-Hant":"貢茶",takeaway:"yes"}},"amenity/cafe|공차":{countryCodes:["kr"],tags:{amenity:"cafe",brand:"공차","brand:ko":"공차","brand:wikidata":"Q5581670","brand:wikipedia":"ko:공차","brand:zh":"貢茶",cuisine:"bubble_tea",int_name:"Gong Cha",name:"공차","name:ko":"공차","name:zh":"貢茶",takeaway:"yes"}},"amenity/cafe|스타벅스":{countryCodes:["kr"],tags:{amenity:"cafe",brand:"스타벅스","brand:en":"Starbucks","brand:ko":"스타벅스","brand:wikidata":"Q37158","brand:wikipedia":"ko:스타벅스",cuisine:"coffee_shop",name:"스타벅스","name:en":"Starbucks","name:ko":"스타벅스",takeaway:"yes"}},"amenity/car_rental|Alamo":{tags:{amenity:"car_rental",brand:"Alamo","brand:wikidata":"Q1429287","brand:wikipedia":"en:Alamo Rent a Car",name:"Alamo"}},"amenity/car_rental|Avis":{matchNames:["avis car rental"],tags:{amenity:"car_rental",brand:"Avis","brand:wikidata":"Q791136","brand:wikipedia":"en:Avis Car Rental",name:"Avis"}},"amenity/car_rental|Buchbinder":{tags:{amenity:"car_rental",brand:"Buchbinder",name:"Buchbinder"}},"amenity/car_rental|Budget":{matchNames:["budget car rental"],tags:{amenity:"car_rental",brand:"Budget","brand:wikidata":"Q1001437","brand:wikipedia":"en:Budget Rent a Car",name:"Budget",official_name:"Budget Rent a Car"}},"amenity/car_rental|Dollar":{countryCodes:["us"],nomatch:["amenity/bank|Dollar Bank","shop/variety_store|Dollar General","shop/variety_store|Dollar Tree","shop/variety_store|Dollarama","shop/variety_store|Family Dollar"],tags:{amenity:"car_rental",brand:"Dollar","brand:wikidata":"Q1235661","brand:wikipedia":"en:Dollar Rent A Car",name:"Dollar",official_name:"Dollar Rent A Car"}},"amenity/car_rental|Enterprise":{matchNames:["enterprise car rental"],tags:{amenity:"car_rental",brand:"Enterprise","brand:wikidata":"Q17085454","brand:wikipedia":"en:Enterprise Rent-A-Car",name:"Enterprise",official_name:"Enterprise Rent-A-Car"}},"amenity/car_rental|Europcar":{tags:{amenity:"car_rental",brand:"Europcar","brand:wikidata":"Q1376256","brand:wikipedia":"en:Europcar",name:"Europcar"}},"amenity/car_rental|Hertz":{matchNames:["hertz car rental"],tags:{amenity:"car_rental",brand:"Hertz","brand:wikidata":"Q1543874","brand:wikipedia":"en:The Hertz Corporation",name:"Hertz"}},"amenity/car_rental|Localiza":{tags:{amenity:"car_rental",brand:"Localiza","brand:wikidata":"Q10319490","brand:wikipedia":"en:Localiza",name:"Localiza"}},"amenity/car_rental|National":{countryCodes:["ca","gb","us"],nomatch:["amenity/bank|National Bank"],tags:{amenity:"car_rental",brand:"National","brand:wikidata":"Q1424142","brand:wikipedia":"en:National Car Rental",name:"National",official_name:"National Car Rental"}},"amenity/car_rental|Sixt":{tags:{amenity:"car_rental",brand:"Sixt","brand:wikidata":"Q705664","brand:wikipedia":"en:Sixt",name:"Sixt"}},"amenity/car_rental|Thrifty":{matchNames:["thrifty car rental"],tags:{amenity:"car_rental",brand:"Thrifty","brand:wikidata":"Q2429546","brand:wikipedia":"en:Thrifty Car Rental",name:"Thrifty"}},"amenity/car_rental|オリックスレンタカー":{countryCodes:["jp"],tags:{amenity:"car_rental",brand:"オリックスレンタカー","brand:en":"ORIX Car Rental","brand:ja":"オリックスレンタカー","brand:wikidata":"Q11123021","brand:wikipedia":"ja:オリックスレンタカー",name:"オリックスレンタカー","name:en":"ORIX Car Rental","name:ja":"オリックスレンタカー"}},"amenity/car_rental|トヨタレンタカー":{countryCodes:["jp"],matchNames:["トヨタレンタリース"],tags:{amenity:"car_rental",brand:"トヨタレンタカー","brand:en":"Toyota Rental Car","brand:ja":"トヨタレンタカー","brand:wikidata":"Q11321580","brand:wikipedia":"ja:トヨタレンタリース",name:"トヨタレンタカー","name:en":"Toyota Rental Car","name:ja":"トヨタレンタカー"}},"amenity/car_rental|ニッポンレンタカー":{countryCodes:["jp"],tags:{amenity:"car_rental",brand:"ニッポンレンタカー","brand:en":"Nippon Car Rental","brand:ja":"ニッポンレンタカー","brand:wikidata":"Q11086533","brand:wikipedia":"ja:ニッポンレンタカー",name:"ニッポンレンタカー","name:en":"Nippon Car Rental","name:ja":"ニッポンレンタカー"}},"amenity/car_rental|日産レンタカー":{countryCodes:["jp"],tags:{amenity:"car_rental",brand:"日産レンタカー","brand:en":"Nissan Car Rental","brand:ja":"日産レンタカー","brand:wikidata":"Q11086838","brand:wikipedia":"ja:日産レンタカー",name:"日産レンタカー","name:en":"Nissan Car Rental","name:ja":"日産レンタカー"}},"amenity/car_sharing|Bluely":{countryCodes:["fr"],matchNames:["station bluely"],tags:{amenity:"car_sharing",brand:"Bluely","brand:wikidata":"Q16039715","brand:wikipedia":"fr:Bluely",name:"Bluely"}},"amenity/car_sharing|Enterprise Car Club":{countryCodes:["gb"],matchNames:["city car club"],tags:{amenity:"car_sharing",brand:"Enterprise Car Club","brand:wikidata":"Q5123055","brand:wikipedia":"en:Enterprise Car Club",name:"Enterprise Car Club"}},"amenity/car_sharing|Greenwheels":{countryCodes:["de","nl"],tags:{amenity:"car_sharing",brand:"Greenwheels","brand:wikidata":"Q316782","brand:wikipedia":"en:Greenwheels",name:"Greenwheels"}},"amenity/car_sharing|Zipcar":{tags:{amenity:"car_sharing",brand:"Zipcar","brand:wikidata":"Q1069924","brand:wikipedia":"en:Zipcar",name:"Zipcar"}},"amenity/car_sharing|stadtmobil":{countryCodes:["de"],matchNames:["stadtmobil carsharing-station"],tags:{amenity:"car_sharing",brand:"stadtmobil","brand:wikidata":"Q2327629","brand:wikipedia":"en:Stadtmobil",name:"stadtmobil"}},"amenity/car_sharing|teilAuto":{countryCodes:["de"],tags:{amenity:"car_sharing",brand:"teilAuto","brand:wikidata":"Q2400658","brand:wikipedia":"de:TeilAuto",name:"teilAuto"}},"amenity/car_sharing|タイムズカーシェア":{countryCodes:["jp"],tags:{amenity:"car_sharing",brand:"タイムズカーシェア","brand:en":"Times Car Share","brand:ja":"タイムズカーシェア","brand:wikidata":"Q17987881","brand:wikipedia":"ja:タイムズカーシェア",name:"タイムズカーシェア","name:en":"Times Car Share","name:ja":"タイムズカーシェア"}},"amenity/casino|Luckia":{tags:{amenity:"casino",brand:"Luckia","brand:wikidata":"Q42304308",name:"Luckia"}},"amenity/charging_station|Blink":{countryCodes:["us"],tags:{amenity:"charging_station",brand:"Blink","brand:wikidata":"Q62065645",name:"Blink"}},"amenity/charging_station|ChargePoint":{tags:{amenity:"charging_station",brand:"ChargePoint","brand:wikidata":"Q5176149","brand:wikipedia":"en:ChargePoint",name:"ChargePoint"}},"amenity/charging_station|Chargy":{countryCodes:["lu"],tags:{amenity:"charging_station",brand:"Chargy","brand:wikidata":"Q62702950","brand:wikipedia":"lb:Chargy",name:"Chargy"}},"amenity/charging_station|Circuit électrique":{countryCodes:["ca"],tags:{amenity:"charging_station",brand:"Circuit électrique","brand:en":"Electric Circuit","brand:fr":"Circuit électrique","brand:wikidata":"Q24934590","brand:wikipedia":"fr:Le Circuit électrique",name:"Circuit électrique","name:en":"Electric Circuit","name:fr":"Circuit électrique"}},"amenity/charging_station|E-WALD":{countryCodes:["de"],matchNames:["e-wald ladestation"],tags:{amenity:"charging_station",brand:"E-WALD","brand:wikidata":"Q61804335",name:"E-WALD"}},"amenity/charging_station|Enel":{countryCodes:["it"],matchNames:["enel - stazione di ricarica"],tags:{amenity:"charging_station",brand:"Enel","brand:wikidata":"Q651222","brand:wikipedia":"en:Enel",name:"Enel"}},"amenity/charging_station|Enel X":{tags:{amenity:"charging_station",brand:"Enel X",name:"Enel X"}},"amenity/charging_station|Enel x Metbus":{tags:{amenity:"charging_station",brand:"Enel x Metbus",name:"Enel x Metbus"}},"amenity/charging_station|FLO":{countryCodes:["ca","us"],nomatch:["shop/shoes|FLO"],tags:{amenity:"charging_station",brand:"FLO","brand:wikidata":"Q64971203",name:"FLO"}},"amenity/charging_station|InCharge":{matchNames:["vattenfall"],tags:{amenity:"charging_station",brand:"InCharge","brand:wikidata":"Q71041027",name:"InCharge"}},"amenity/charging_station|Innogy":{matchNames:["rwe"],tags:{amenity:"charging_station",brand:"Innogy","brand:wikidata":"Q2124721","brand:wikipedia":"de:Innogy",name:"Innogy"}},"amenity/charging_station|Source London":{countryCodes:["gb"],tags:{amenity:"charging_station",brand:"Source London","brand:wikidata":"Q7565133","brand:wikipedia":"en:Source London",name:"Source London"}},"amenity/charging_station|Tesla Supercharger":{tags:{amenity:"charging_station",brand:"Tesla Supercharger","brand:wikidata":"Q17089620","brand:wikipedia":"en:Tesla Supercharger",name:"Tesla Supercharger"}},"amenity/charging_station|bike-energy":{countryCodes:["at","ch","de","fr","it","lu"],matchNames:["bike-energy ladestation"],tags:{amenity:"charging_station",brand:"bike-energy","brand:wikidata":"Q67770877",name:"bike-energy"}},"amenity/charging_station|eVgo":{countryCodes:["us"],tags:{amenity:"charging_station",brand:"eVgo","brand:wikidata":"Q61803820",name:"eVgo"}},"amenity/childcare|Kids 'R' Kids":{countryCodes:["us"],matchNames:["kids are kids"],tags:{after_school:"yes",amenity:"childcare",brand:"Kids 'R' Kids","brand:wikidata":"Q65560342",grades:"PK",name:"Kids 'R' Kids",nursery:"yes",official_name:"Kids 'R' Kids Learning Academies",preschool:"yes"}},"amenity/childcare|YMCA Child Care":{countryCodes:["us"],matchNames:["ymca","ymca child care center"],tags:{amenity:"childcare",brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",name:"YMCA Child Care"}},"amenity/cinema|109シネマズ":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"109シネマズ","brand:en":"109 Cinemas","brand:ja":"109シネマズ","brand:wikidata":"Q10854269","brand:wikipedia":"ja:109シネマズ",name:"109シネマズ","name:en":"109 Cinemas","name:ja":"109シネマズ"}},"amenity/cinema|AMC":{countryCodes:["us"],matchNames:["amc cinema","amc cinemas","amc theater","amc theaters","amc theatre","amc theatres"],tags:{amenity:"cinema",brand:"AMC","brand:wikidata":"Q294721","brand:wikipedia":"en:AMC Theatres",name:"AMC"}},"amenity/cinema|B&B Theatres":{countryCodes:["us"],matchNames:["b&b theaters"],tags:{amenity:"cinema",brand:"B&B Theatres","brand:wikidata":"Q4833576","brand:wikipedia":"en:B&B Theatres",name:"B&B Theatres",short_name:"B&B"}},"amenity/cinema|CGR":{countryCodes:["fr"],tags:{amenity:"cinema",brand:"CGR","brand:wikidata":"Q2931406","brand:wikipedia":"fr:Circuit Georges-Raymond",name:"CGR Cinémas"}},"amenity/cinema|Caribbean Cinemas":{countryCodes:["ag","do","fr","gy","kn","lc","nl","pa","tt","us"],tags:{amenity:"cinema",brand:"Caribbean Cinemas","brand:wikidata":"Q5039364","brand:wikipedia":"en:Caribbean Cinemas",name:"Caribbean Cinemas"}},"amenity/cinema|Century Theatres":{countryCodes:["us"],matchNames:["century theater","century theaters","century theatre"],tags:{amenity:"cinema",brand:"Century Theatres","brand:wikidata":"Q2946307","brand:wikipedia":"en:Century Theatres",name:"Century Theatres",short_name:"Century"}},"amenity/cinema|CineStar":{countryCodes:["de"],tags:{amenity:"cinema",brand:"CineStar","brand:wikidata":"Q321889","brand:wikipedia":"de:Cinestar",name:"CineStar"}},"amenity/cinema|Cinema City":{countryCodes:["cz","hu","pl","ro"],tags:{amenity:"cinema",brand:"Cinema City","brand:wikidata":"Q543651","brand:wikipedia":"en:Cinema City International",name:"Cinema City"}},"amenity/cinema|Cinema NOS":{countryCodes:["pt"],tags:{amenity:"cinema",brand:"Cinemas NOS","brand:wikidata":"Q8063259","brand:wikipedia":"en:NOS Audiovisuais",name:"Cinema NOS"}},"amenity/cinema|Cinemark":{tags:{amenity:"cinema",brand:"Cinemark","brand:wikidata":"Q707530","brand:wikipedia":"en:Cinemark Theatres",name:"Cinemark"}},"amenity/cinema|Cinemaxx~(Europe)":{countryCodes:["de","dk"],nomatch:["amenity/cinema|Cinemaxx~(Indonesia)"],tags:{amenity:"cinema",brand:"Cinemaxx","brand:wikidata":"Q881860","brand:wikipedia":"de:Cinemaxx",name:"Cinemaxx"}},"amenity/cinema|Cinemaxx~(Indonesia)":{countryCodes:["id"],nomatch:["amenity/cinema|Cinemaxx~(Europe)"],tags:{amenity:"cinema",brand:"Cinemaxx","brand:wikidata":"Q19942740","brand:wikipedia":"id:Cinemaxx",name:"Cinemaxx"}},"amenity/cinema|Cinemex":{countryCodes:["mx"],tags:{amenity:"cinema",brand:"Cinemex","brand:wikidata":"Q3333072","brand:wikipedia":"en:Cinemex",name:"Cinemex"}},"amenity/cinema|Cineplanet":{countryCodes:["cl","pe"],tags:{amenity:"cinema",brand:"Cineplanet","brand:wikidata":"Q5769680","brand:wikipedia":"es:Cineplanet",name:"Cineplanet"}},"amenity/cinema|Cineplex":{countryCodes:["ca"],matchNames:["cineplex cinema","cineplex cinemas","cineplex entertainment","cineplex odeon","cineplex theatre","cineplex theatres"],tags:{amenity:"cinema",brand:"Cineplex","brand:wikidata":"Q2972807","brand:wikipedia":"en:Cineplex Entertainment",name:"Cineplex"}},"amenity/cinema|Cineplexx":{countryCodes:["at","si"],tags:{amenity:"cinema",brand:"Cineplexx","brand:wikidata":"Q873340","brand:wikipedia":"en:Cineplexx Cinemas",name:"Cineplexx"}},"amenity/cinema|Cinepolis":{tags:{amenity:"cinema",brand:"Cinepolis","brand:wikidata":"Q5686673","brand:wikipedia":"en:Cinépolis",name:"Cinepolis"}},"amenity/cinema|Cineworld":{countryCodes:["gb"],tags:{amenity:"cinema",brand:"Cineworld","brand:wikidata":"Q5120901","brand:wikipedia":"en:Cineworld",name:"Cineworld"}},"amenity/cinema|Event":{countryCodes:["au","nz"],matchNames:["event cinema"],tags:{amenity:"cinema",brand:"Event","brand:wikidata":"Q5416698","brand:wikipedia":"en:Event Cinemas",name:"Event",official_name:"Event Cinemas"}},"amenity/cinema|Harkins Theatres":{countryCodes:["us"],matchNames:["harkins theater","harkins theaters","harkins theatre"],tags:{amenity:"cinema",brand:"Harkins Theatres","brand:wikidata":"Q5658199","brand:wikipedia":"en:Harkins Theatres",name:"Harkins Theatres",short_name:"Harkins"}},"amenity/cinema|Hoyts":{countryCodes:["au","nz"],tags:{amenity:"cinema",brand:"Hoyts","brand:wikidata":"Q5922976","brand:wikipedia":"en:Hoyts",name:"Hoyts"}},"amenity/cinema|Landmark Theatres":{countryCodes:["us"],matchNames:["landmark theater","landmark theaters","landmark theatre"],tags:{amenity:"cinema",brand:"Landmark Theatres","brand:wikidata":"Q6484805","brand:wikipedia":"en:Landmark Theatres",name:"Landmark Theatres",short_name:"Landmark"}},"amenity/cinema|MOVIX":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"MOVIX","brand:wikidata":"Q11532184","brand:wikipedia":"ja:松竹マルチプレックスシアターズ",name:"MOVIX",official_name:"松竹マルチプレックスシアターズ","official_name:en":"Shochiku Multiplex Theatres"}},"amenity/cinema|Marcus Cinema":{countryCodes:["us"],matchNames:["marcus cinemas","marcus theater","marcus theaters","marcus theatre","marcus theatres"],tags:{amenity:"cinema",brand:"Marcus Cinema","brand:wikidata":"Q64083352",name:"Marcus Cinema",short_name:"Marcus"}},"amenity/cinema|Movie Tavern":{countryCodes:["us"],tags:{amenity:"cinema",brand:"Movie Tavern","brand:wikidata":"Q64083534",name:"Movie Tavern"}},"amenity/cinema|Multikino":{countryCodes:["lt","lv","pl"],tags:{amenity:"cinema",brand:"Multikino","brand:wikidata":"Q1144802","brand:wikipedia":"pl:Multikino",name:"Multikino"}},"amenity/cinema|Odeon":{countryCodes:["gb","gr","ie","it"],matchNames:["odeon cinema"],tags:{amenity:"cinema",brand:"Odeon","brand:wikidata":"Q6127470","brand:wikipedia":"en:Odeon Cinemas",name:"Odeon"}},"amenity/cinema|Pathé Gaumont":{countryCodes:["be","ch","fr","nl"],tags:{amenity:"cinema",brand:"Pathé Gaumont","brand:wikidata":"Q3060526","brand:wikipedia":"fr:Les cinémas Gaumont Pathé",name:"Pathé Gaumont"}},"amenity/cinema|Regal Cinemas":{countryCodes:["us"],matchNames:["regal cinema"],tags:{amenity:"cinema",brand:"Regal Cinemas","brand:wikidata":"Q835638","brand:wikipedia":"en:Regal Cinemas",name:"Regal Cinemas",short_name:"Regal"}},"amenity/cinema|Showcase Cinemas":{countryCodes:["ar","gb","us"],matchNames:["showcase cinema"],tags:{amenity:"cinema",brand:"Showcase Cinemas","brand:wikidata":"Q7503170","brand:wikipedia":"en:Showcase Cinemas",name:"Showcase Cinemas",short_name:"Showcase"}},"amenity/cinema|TOHOシネマズ":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"TOHOシネマズ","brand:en":"TOHO CINEMAS","brand:ja":"TOHOシネマズ","brand:wikidata":"Q11235261","brand:wikipedia":"ja:TOHOシネマズ",name:"TOHOシネマズ","name:en":"Toho Cinemas","name:ja":"TOHOシネマズ",short_name:"TOHO"}},"amenity/cinema|The Space Cinema":{countryCodes:["it"],matchNames:["the space"],tags:{amenity:"cinema",brand:"The Space Cinema","brand:wikidata":"Q3989406","brand:wikipedia":"it:The Space Cinema",name:"The Space Cinema"}},"amenity/cinema|UGC":{countryCodes:["fr"],tags:{amenity:"cinema",brand:"UGC","brand:wikidata":"Q1643241","brand:wikipedia":"fr:Union générale cinématographique",name:"UGC"}},"amenity/cinema|Vue~(IrelandAndUK)":{countryCodes:["gb","ie"],matchNames:["vue cinema","vue cinemas"],nomatch:["amenity/cinema|Vue~(Netherlands)"],tags:{amenity:"cinema",brand:"Vue","brand:wikidata":"Q2535134","brand:wikipedia":"en:Vue Cinemas",name:"Vue"}},"amenity/cinema|Vue~(Netherlands)":{countryCodes:["nl"],matchNames:["vue cinema"],nomatch:["amenity/cinema|Vue~(IrelandAndUK)"],tags:{amenity:"cinema",brand:"Vue","brand:wikidata":"Q2421690","brand:wikipedia":"nl:Vue (bioscoopketen)",name:"Vue"}},"amenity/cinema|イオンシネマ":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"イオンシネマ","brand:en":"AEON Cinema","brand:ja":"イオンシネマ","brand:wikidata":"Q17192792","brand:wikipedia":"ja:イオンエンターテイメント",name:"イオンシネマ","name:en":"AEON Cinema","name:ja":"イオンシネマ"}},"amenity/cinema|ユナイテッド・シネマ":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"ユナイテッド・シネマ","brand:en":"United Cinemas","brand:ja":"ユナイテッド・シネマ","brand:wikidata":"Q11345629","brand:wikipedia":"ja:ユナイテッド・シネマ",name:"ユナイテッド・シネマ","name:en":"United Cinemas","name:ja":"ユナイテッド・シネマ"}},"amenity/clinic|Aid Post":{tags:{amenity:"clinic",brand:"Aid Post",name:"Aid Post"}},"amenity/clinic|Asepeyo":{countryCodes:["es"],nomatch:["office/insurance|Asepeyo"],tags:{amenity:"clinic",brand:"Asepeyo","brand:wikidata":"Q11906879","brand:wikipedia":"es:Asepeyo",healthcare:"clinic",name:"Asepeyo"}},"amenity/clinic|CityMD":{countryCodes:["us"],tags:{amenity:"clinic",brand:"CityMD","brand:wikidata":"Q22295471","brand:wikipedia":"en:CityMD",healthcare:"clinic",name:"CityMD"}},"amenity/clinic|DaVita Dialysis":{countryCodes:["us"],matchNames:["davita","davita dialysis center","davita kidney care"],tags:{amenity:"clinic",brand:"DaVita Dialysis","brand:wikidata":"Q5207184",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"DaVita Dialysis"}},"amenity/clinic|Dialysis Clinic":{countryCodes:["us"],matchNames:["dialysis clinic inc"],tags:{amenity:"clinic",brand:"Dialysis Clinic","brand:wikidata":"Q5270633","brand:wikipedia":"en:Dialysis Clinic, Inc.",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Dialysis Clinic",short_name:"DCI"}},"amenity/clinic|Fresenius Kidney Care":{countryCodes:["us"],tags:{amenity:"clinic",brand:"Fresenius Kidney Care","brand:wikidata":"Q650259","brand:wikipedia":"en:Fresenius Medical Care",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Fresenius Kidney Care"}},"amenity/clinic|Fresenius Medical Care":{countryCodes:["us"],tags:{amenity:"clinic",brand:"Fresenius Medical Care","brand:wikidata":"Q650259","brand:wikipedia":"en:Fresenius Medical Care",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Fresenius Medical Care"}},"amenity/clinic|Planned Parenthood":{countryCodes:["us"],matchTags:["amenity/doctors","amenity/social_facility"],tags:{amenity:"clinic",brand:"Planned Parenthood","brand:wikidata":"Q2553262","brand:wikipedia":"en:Planned Parenthood",healthcare:"counselling","healthcare:counselling":"antenatal;sexual",name:"Planned Parenthood"}},"amenity/clinic|Posyandu":{tags:{amenity:"clinic",brand:"Posyandu",name:"Posyandu"}},"amenity/clinic|Puskesmas":{tags:{amenity:"clinic",brand:"Puskesmas",name:"Puskesmas"}},"amenity/clinic|Puskesmas Pembantu":{tags:{amenity:"clinic",brand:"Puskesmas Pembantu",name:"Puskesmas Pembantu"}},"amenity/clinic|Satellite Healthcare":{countryCodes:["us"],matchNames:["satellite","satellite dialysis"],tags:{amenity:"clinic",brand:"Satellite Healthcare","brand:wikidata":"Q50039787",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Satellite Healthcare"}},"amenity/clinic|Terveystalo":{countryCodes:["fi"],tags:{amenity:"clinic",brand:"Terveystalo","brand:wikidata":"Q11897034","brand:wikipedia":"fi:Terveystalo",healthcare:"clinic",name:"Terveystalo"}},"amenity/clinic|VA Clinic":{countryCodes:["us"],matchNames:["department of veterans affairs clinic","veterans administration","veterans administration clinic","veterans affairs","veterans affairs clinic"],tags:{amenity:"clinic",brand:"VA","brand:wikidata":"Q6580225","brand:wikipedia":"en:Veterans Health Administration",healthcare:"clinic","healthcare:for":"veterans",name:"VA Clinic",short_name:"VA"}},"amenity/clinic|ZoomCare":{countryCodes:["us"],tags:{amenity:"clinic",brand:"ZoomCare","brand:wikidata":"Q64120374","brand:wikipedia":"en:ZoomCare",healthcare:"clinic",name:"ZoomCare",urgent_care:"yes"}},"amenity/dentist|Aspen Dental":{countryCodes:["us"],matchTags:["healthcare/dentist"],tags:{amenity:"dentist",brand:"Aspen Dental","brand:wikidata":"Q4807808","brand:wikipedia":"en:Aspen Dental",healthcare:"dentist",name:"Aspen Dental"}},"amenity/dentist|Comfort Dental":{countryCodes:["us"],matchTags:["healthcare/dentist"],tags:{amenity:"dentist",brand:"Comfort Dental","brand:wikidata":"Q22079521","brand:wikipedia":"en:Comfort Dental",healthcare:"dentist",name:"Comfort Dental"}},"amenity/dentist|Dentix":{tags:{amenity:"dentist",brand:"Dentix","brand:wikidata":"Q30505320","brand:wikipedia":"es:Dentix",name:"Dentix"}},"amenity/dentist|Folktandvården":{countryCodes:["se"],tags:{amenity:"dentist",brand:"Folktandvården","brand:wikidata":"Q10497476","brand:wikipedia":"sv:Folktandvården",name:"Folktandvården"}},"amenity/dentist|Gentle Dental":{countryCodes:["us"],tags:{amenity:"dentist",brand:"Gentle Dental",name:"Gentle Dental"}},"amenity/dentist|Kool Smiles":{countryCodes:["us"],matchTags:["healthcare/dentist"],tags:{amenity:"dentist",brand:"Kool Smiles","brand:wikidata":"Q6430587","brand:wikipedia":"en:Kool Smiles",healthcare:"dentist",name:"Kool Smiles"}},"amenity/dentist|Vitaldent":{countryCodes:["es","it"],tags:{amenity:"dentist",brand:"Vitaldent","brand:wikidata":"Q5860599","brand:wikipedia":"es:Vitaldent",name:"Vitaldent"}},"amenity/dentist|Western Dental":{countryCodes:["us"],matchTags:["healthcare/dentist"],tags:{alt_name:"Western Dental & Orthodontics",amenity:"dentist",brand:"Western Dental","brand:wikidata":"Q64211989","brand:wikipedia":"en:Western Dental",healthcare:"dentist",name:"Western Dental"}},"amenity/doctors|MinuteClinic":{countryCodes:["us"],matchTags:["amenity/clinic"],tags:{amenity:"doctors",brand:"MinuteClinic","brand:wikidata":"Q6871141","brand:wikipedia":"en:MinuteClinic",healthcare:"doctor","healthcare:speciality":"community",name:"MinuteClinic"}},"amenity/doctors|RediClinic":{countryCodes:["us"],matchTags:["amenity/clinic"],tags:{amenity:"doctors",brand:"RediClinic","brand:wikidata":"Q64138408",healthcare:"doctor","healthcare:speciality":"community",name:"RediClinic"}},"amenity/doctors|The Little Clinic":{countryCodes:["us"],matchNames:["little clinic"],matchTags:["amenity/clinic"],tags:{amenity:"doctors",brand:"The Little Clinic","brand:wikidata":"Q64138262",healthcare:"doctor","healthcare:speciality":"community",name:"The Little Clinic"}},"amenity/doctors|Walgreens Healthcare Clinic":{countryCodes:["us"],matchNames:["healthcare clinic","takecare","takecare clinic","walgreens"],matchTags:["amenity/clinic"],tags:{amenity:"doctors",brand:"Walgreens","brand:wikidata":"Q1591889",healthcare:"doctor","healthcare:speciality":"community",name:"Walgreens Healthcare Clinic"}},"amenity/fast_food|241 Pizza":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"241 Pizza","brand:wikidata":"Q4631768","brand:wikipedia":"en:241 Pizza",cuisine:"pizza",name:"241 Pizza",takeaway:"yes"}},"amenity/fast_food|A&W~(Canada)":{countryCodes:["ca"],nomatch:["amenity/fast_food|A&W~(USA)"],tags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q2818848","brand:wikipedia":"en:A&W (Canada)",cuisine:"burger",name:"A&W",takeaway:"yes"}},"amenity/fast_food|A&W~(USA)":{countryCodes:["us"],nomatch:["amenity/fast_food|A&W~(Canada)"],tags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q277641","brand:wikipedia":"en:A&W Restaurants",cuisine:"burger",name:"A&W",takeaway:"yes"}},"amenity/fast_food|Andok's":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Andok's","brand:wikidata":"Q62267166",cuisine:"chicken",name:"Andok's",takeaway:"yes"}},"amenity/fast_food|Angel's Burger":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Angel's Burger","brand:wikidata":"Q62267228",cuisine:"burger",name:"Angel's Burger",takeaway:"yes"}},"amenity/fast_food|Arby's":{countryCodes:["ca","tr","us"],tags:{amenity:"fast_food",brand:"Arby's","brand:wikidata":"Q630866","brand:wikipedia":"en:Arby's",cuisine:"sandwich",name:"Arby's",takeaway:"yes"}},"amenity/fast_food|Arctic Circle":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Arctic Circle","brand:wikidata":"Q4787501","brand:wikipedia":"en:Arctic Circle Restaurants",cuisine:"burger",name:"Arctic Circle",takeaway:"yes"}},"amenity/fast_food|Asia-Imbiss":{tags:{amenity:"fast_food",brand:"Asia-Imbiss",name:"Asia-Imbiss",takeaway:"yes"}},"amenity/fast_food|Au Bon Pain":{countryCodes:["in","th","us"],tags:{amenity:"fast_food",brand:"Au Bon Pain","brand:wikidata":"Q4818942","brand:wikipedia":"en:Au Bon Pain",cuisine:"sandwich",name:"Au Bon Pain",takeaway:"yes"}},"amenity/fast_food|Auntie Anne's":{countryCodes:["us"],matchNames:["auntie annes pretzels"],tags:{amenity:"fast_food",brand:"Auntie Anne's","brand:wikidata":"Q4822010","brand:wikipedia":"en:Auntie Anne's",cuisine:"pretzel",name:"Auntie Anne's",takeaway:"yes"}},"amenity/fast_food|Back Yard Burgers":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Back Yard Burgers","brand:wikidata":"Q2878376","brand:wikipedia":"en:Back Yard Burgers",cuisine:"burger",name:"Back Yard Burgers",takeaway:"yes"}},"amenity/fast_food|Baja Fresh":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Baja Fresh","brand:wikidata":"Q2880019","brand:wikipedia":"en:Baja Fresh",cuisine:"mexican",name:"Baja Fresh",takeaway:"yes"}},"amenity/fast_food|Barburrito":{countryCodes:["gb"],tags:{amenity:"fast_food",brand:"Barburrito","brand:wikidata":"Q16983668","brand:wikipedia":"en:Barburrito",cuisine:"mexican",name:"Barburrito",takeaway:"yes"}},"amenity/fast_food|Bembos":{countryCodes:["pe"],tags:{amenity:"fast_food",brand:"Bembos","brand:wikidata":"Q466971","brand:wikipedia":"en:Bembos",cuisine:"burger",name:"Bembos",takeaway:"yes"}},"amenity/fast_food|Big Fernand":{countryCodes:["ae","fr","lu"],tags:{amenity:"fast_food",brand:"Big Fernand","brand:wikidata":"Q19521346","brand:wikipedia":"fr:Big Fernand",cuisine:"burger",name:"Big Fernand",takeaway:"yes"}},"amenity/fast_food|Biscuitville":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Biscuitville","brand:wikidata":"Q4917274","brand:wikipedia":"en:Biscuitville",cuisine:"american;breakfast",name:"Biscuitville",takeaway:"yes"}},"amenity/fast_food|Blackjack Pizza":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Blackjack Pizza","brand:wikidata":"Q4923061","brand:wikipedia":"en:Blackjack Pizza",cuisine:"pizza",name:"Blackjack Pizza",takeaway:"yes"}},"amenity/fast_food|Blimpie":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Blimpie","brand:wikidata":"Q4926479","brand:wikipedia":"en:Blimpie",cuisine:"sandwich",name:"Blimpie",takeaway:"yes"}},"amenity/fast_food|Bob's":{countryCodes:["ao","br","cl","pt"],tags:{amenity:"fast_food",brand:"Bob's","brand:wikidata":"Q1392113","brand:wikipedia":"en:Bob's",cuisine:"burger",name:"Bob's",takeaway:"yes"}},"amenity/fast_food|Bojangles'":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Bojangles'","brand:wikidata":"Q891163","brand:wikipedia":"en:Bojangles' Famous Chicken 'n Biscuits",cuisine:"chicken",name:"Bojangles'",official_name:"Bojangles' Famous Chicken 'n Biscuits",takeaway:"yes"}},"amenity/fast_food|Booster Juice":{countryCodes:["ca"],matchTags:["shop/beverages"],tags:{amenity:"fast_food",brand:"Booster Juice","brand:wikidata":"Q4943796","brand:wikipedia":"en:Booster Juice",cuisine:"juice",name:"Booster Juice",takeaway:"yes"}},"amenity/fast_food|Boston Market":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Boston Market","brand:wikidata":"Q603617","brand:wikipedia":"en:Boston Market",cuisine:"american;chicken",name:"Boston Market",takeaway:"yes"}},"amenity/fast_food|Braum's":{countryCodes:["us"],matchTags:["shop/dairy"],tags:{amenity:"fast_food",brand:"Braum's","brand:wikidata":"Q4958263","brand:wikipedia":"en:Braum's",cuisine:"ice_cream",name:"Braum's",shop:"dairy",takeaway:"yes"}},"amenity/fast_food|Bruegger's Bagels":{countryCodes:["us"],matchNames:["breuger's","breugger's","bruger's","brugger's"],tags:{amenity:"fast_food",brand:"Bruegger's Bagels","brand:wikidata":"Q4978656","brand:wikipedia":"en:Bruegger's",cuisine:"bagel",name:"Bruegger's Bagels",short_name:"Bruegger's",takeaway:"yes"}},"amenity/fast_food|Burger Fuel":{countryCodes:["ae","iq","nz","sa","us"],tags:{amenity:"fast_food",brand:"Burger Fuel","brand:wikidata":"Q4998537","brand:wikipedia":"en:Burger Fuel",cuisine:"burger",name:"Burger Fuel",takeaway:"yes"}},"amenity/fast_food|Burger King":{matchNames:["burguer king"],tags:{amenity:"fast_food",brand:"Burger King","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Burger King",takeaway:"yes"}},"amenity/fast_food|Burger Machine":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Burger Machine","brand:wikidata":"Q4998549","brand:wikipedia":"en:Burger Machine",cuisine:"burger",name:"Burger Machine",takeaway:"yes"}},"amenity/fast_food|BurgerFi":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"BurgerFi","brand:wikidata":"Q39045496","brand:wikipedia":"en:BurgerFi",cuisine:"burger",name:"BurgerFi",takeaway:"yes"}},"amenity/fast_food|Burgerim":{countryCodes:["il"],tags:{amenity:"fast_food",brand:"Burgerim","brand:en":"Burgerim","brand:he":"בורגרים","brand:wikidata":"Q64760354",cuisine:"burger",name:"Burgerim","name:en":"Burgerim","name:he":"בורגרים",takeaway:"yes"}},"amenity/fast_food|Burgers Bar":{countryCodes:["il"],tags:{amenity:"fast_food",brand:"Burgers Bar","brand:en":"Burgers Bar","brand:he":"בורגרס בר","brand:wikidata":"Q64760337",cuisine:"burger","diet:kosher":"yes",name:"Burgers Bar","name:en":"Burgers Bar","name:he":"בורגרס בר",takeaway:"yes"}},"amenity/fast_food|Burgerville":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Burgerville","brand:wikidata":"Q4998570","brand:wikipedia":"en:Burgerville",cuisine:"burger",name:"Burgerville",takeaway:"yes"}},"amenity/fast_food|California Fish Grill":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"California Fish Grill","brand:wikidata":"Q55606435","brand:wikipedia":"en:California Fish Grill",cuisine:"seafood",name:"California Fish Grill",takeaway:"yes"}},"amenity/fast_food|Captain D's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Captain D's","brand:wikidata":"Q5036616","brand:wikipedia":"en:Captain D's",cuisine:"seafood",name:"Captain D's",takeaway:"yes"}},"amenity/fast_food|Carl's Jr.":{tags:{amenity:"fast_food",brand:"Carl's Jr.","brand:wikidata":"Q1043486","brand:wikipedia":"en:Carl's Jr.",cuisine:"burger",name:"Carl's Jr.",takeaway:"yes"}},"amenity/fast_food|Charleys Philly Steaks":{countryCodes:["us"],matchNames:["charleys"],tags:{amenity:"fast_food",brand:"Charleys Philly Steaks","brand:wikidata":"Q1066777","brand:wikipedia":"en:Charleys Philly Steaks",cuisine:"sandwich",name:"Charleys Philly Steaks",takeaway:"yes"}},"amenity/fast_food|Checkers":{nomatch:["shop/supermarket|Checkers"],tags:{amenity:"fast_food",brand:"Checkers","brand:wikidata":"Q63919315",cuisine:"burger",name:"Checkers",takeaway:"yes"}},"amenity/fast_food|Chester's":{countryCodes:["us"],matchNames:["chesters chicken"],tags:{amenity:"fast_food",brand:"Chester's","brand:wikidata":"Q5093401","brand:wikipedia":"en:Chester's International",cuisine:"chicken",name:"Chester's",takeaway:"yes"}},"amenity/fast_food|Chick-fil-A":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Chick-fil-A","brand:wikidata":"Q491516","brand:wikipedia":"en:Chick-fil-A",cuisine:"chicken",name:"Chick-fil-A",takeaway:"yes"}},"amenity/fast_food|Chicken Express":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Chicken Express","brand:wikidata":"Q5096235","brand:wikipedia":"en:Chicken Express",cuisine:"chicken",name:"Chicken Express",takeaway:"yes"}},"amenity/fast_food|Chicken Treat":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Chicken Treat","brand:wikidata":"Q5096274","brand:wikipedia":"en:Chicken Treat",cuisine:"chicken",name:"Chicken Treat",takeaway:"yes"}},"amenity/fast_food|China Wok":{tags:{amenity:"fast_food",brand:"China Wok","brand:wikidata":"Q5766542","brand:wikipedia":"es:China Wok",cuisine:"chinese",name:"China Wok",takeaway:"yes"}},"amenity/fast_food|Chipotle":{tags:{amenity:"fast_food",brand:"Chipotle","brand:wikidata":"Q465751","brand:wikipedia":"en:Chipotle Mexican Grill",cuisine:"mexican",name:"Chipotle",official_name:"Chipotle Mexican Grill",takeaway:"yes"}},"amenity/fast_food|Chopt":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Chopt","brand:wikidata":"Q17509305","brand:wikipedia":"en:Chopt",cuisine:"salad",name:"Chopt",takeaway:"yes"}},"amenity/fast_food|Chowking":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Chowking","brand:wikidata":"Q1076816","brand:wikipedia":"en:Chowking",cuisine:"asian",name:"Chowking",takeaway:"yes"}},"amenity/fast_food|Church's Chicken":{tags:{amenity:"fast_food",brand:"Church's Chicken","brand:wikidata":"Q1089932","brand:wikipedia":"en:Church's Chicken",cuisine:"chicken",name:"Church's Chicken",takeaway:"yes"}},"amenity/fast_food|Cinnabon":{matchTags:["shop/confectionery"],tags:{amenity:"fast_food",brand:"Cinnabon","brand:wikidata":"Q1092539","brand:wikipedia":"en:Cinnabon",cuisine:"dessert",name:"Cinnabon",takeaway:"yes"}},"amenity/fast_food|CoCo壱番屋":{countryCodes:["cn","jp"],tags:{amenity:"fast_food",brand:"CoCo壱番屋","brand:en":"CoCo Ichibanya","brand:ja":"CoCo壱番屋","brand:wikidata":"Q5986105","brand:wikipedia":"en:Ichibanya",cuisine:"japanese",name:"CoCo壱番屋","name:en":"CoCo Ichibanya","name:ja":"CoCo壱番屋",takeaway:"yes"}},"amenity/fast_food|Cook Out":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Cook Out","brand:wikidata":"Q5166992","brand:wikipedia":"en:Cook Out (restaurant)",cuisine:"american",name:"Cook Out",takeaway:"yes"}},"amenity/fast_food|Così":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Così","brand:wikidata":"Q5175243","brand:wikipedia":"en:Così (restaurant)",cuisine:"sandwich",name:"Così",takeaway:"yes"}},"amenity/fast_food|Crust":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Crust",cuisine:"pizza",name:"Crust",official_name:"Crust Gourmet Pizza Bar",takeaway:"yes"}},"amenity/fast_food|Cultures":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Cultures","brand:wikidata":"Q64876898",cuisine:"sandwich",name:"Cultures",takeaway:"yes"}},"amenity/fast_food|Culver's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Culver's","brand:wikidata":"Q1143589","brand:wikipedia":"en:Culver's",cuisine:"burger",name:"Culver's",takeaway:"yes"}},"amenity/fast_food|DQ Grill & Chill":{countryCodes:["ca","us"],matchNames:["dairy queen chill & grill"],nomatch:["amenity/fast_food|Dairy Queen"],tags:{amenity:"fast_food",brand:"DQ Grill & Chill","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream;burger",name:"DQ Grill & Chill",takeaway:"yes"}},"amenity/fast_food|Dairy Queen":{matchNames:["dq"],nomatch:["amenity/fast_food|DQ Grill & Chill"],tags:{amenity:"fast_food",brand:"Dairy Queen","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream;burger",name:"Dairy Queen",takeaway:"yes"}},"amenity/fast_food|Daylight Donuts":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Daylight Donuts","brand:wikidata":"Q48970508","brand:wikipedia":"en:Daylight Donuts",cuisine:"donut",name:"Daylight Donuts",takeaway:"yes"}},"amenity/fast_food|Debonairs Pizza":{countryCodes:["ae","bw","ke","ls","mu","mw","mz","na","ng","sd","ss","sz","za","zm"],matchNames:["debonairs"],tags:{amenity:"fast_food",brand:"Debonairs Pizza","brand:wikidata":"Q65079407","brand:wikipedia":"en:Debonairs Pizza",cuisine:"pizza",name:"Debonairs Pizza",takeaway:"yes"}},"amenity/fast_food|Del Taco":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Del Taco","brand:wikidata":"Q1183818","brand:wikipedia":"en:Del Taco",cuisine:"mexican",name:"Del Taco",takeaway:"yes"}},"amenity/fast_food|Dig Inn":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Dig Inn","brand:wikidata":"Q28226241","brand:wikipedia":"en:Dig Inn",cuisine:"regional",name:"Dig Inn",takeaway:"yes"}},"amenity/fast_food|Domino's":{matchNames:["dominos pizza"],tags:{amenity:"fast_food",brand:"Domino's","brand:wikidata":"Q839466","brand:wikipedia":"en:Domino's Pizza",cuisine:"pizza",name:"Domino's",takeaway:"yes"}},"amenity/fast_food|Donut King":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Donut King","brand:wikidata":"Q5296921","brand:wikipedia":"en:Donut King",cuisine:"donut;coffee_shop",name:"Donut King",takeaway:"yes"}},"amenity/fast_food|Dunkin' Donuts":{matchNames:["dunkin doughnuts"],tags:{amenity:"fast_food",brand:"Dunkin' Donuts","brand:wikidata":"Q847743","brand:wikipedia":"en:Dunkin' Donuts",cuisine:"donut;coffee_shop",name:"Dunkin' Donuts",takeaway:"yes"}},"amenity/fast_food|EAT.":{countryCodes:["gb"],tags:{amenity:"fast_food",brand:"EAT.","brand:wikidata":"Q5331219","brand:wikipedia":"en:Eat (restaurant)",cuisine:"sandwich",name:"EAT.",takeaway:"yes"}},"amenity/fast_food|Einstein Bros. Bagels":{countryCodes:["us"],matchNames:["einstein bros","einstein brothers"],tags:{alt_name:"Einstein Brothers Bagels",amenity:"fast_food",brand:"Einstein Bros. Bagels","brand:wikidata":"Q5349788","brand:wikipedia":"en:Einstein Bros. Bagels",cuisine:"bagel",name:"Einstein Bros. Bagels",takeaway:"yes"}},"amenity/fast_food|El Pollo Loco":{countryCodes:["mx","us"],tags:{amenity:"fast_food",brand:"El Pollo Loco","brand:wikidata":"Q2353849","brand:wikipedia":"en:El Pollo Loco",cuisine:"mexican",name:"El Pollo Loco",takeaway:"yes"}},"amenity/fast_food|Elevation Burger":{countryCodes:["bh","kw","qa","us"],tags:{amenity:"fast_food",brand:"Elevation Burger","brand:wikidata":"Q15291092","brand:wikipedia":"en:Elevation Burger",cuisine:"burger",name:"Elevation Burger",takeaway:"yes"}},"amenity/fast_food|Es Teler 77":{tags:{amenity:"fast_food",brand:"Es Teler 77","brand:wikidata":"Q5396630",cuisine:"indonesian",name:"Es Teler 77",takeaway:"yes"}},"amenity/fast_food|Everest":{countryCodes:["gr"],tags:{amenity:"fast_food",brand:"Everest","brand:wikidata":"Q62273299",cuisine:"burger",name:"Everest",takeaway:"yes"}},"amenity/fast_food|Extreme Pita":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Extreme Pita","brand:wikidata":"Q5422367","brand:wikipedia":"en:Extreme Pita",cuisine:"pita",name:"Extreme Pita",takeaway:"yes"}},"amenity/fast_food|Extreme Pizza":{tags:{amenity:"fast_food",brand:"Extreme Pizza","brand:wikidata":"Q5422364","brand:wikipedia":"en:Extreme Pizza",cuisine:"pizza",name:"Extreme Pizza",takeaway:"yes"}},"amenity/fast_food|Fazoli's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Fazoli's","brand:wikidata":"Q1399195","brand:wikipedia":"en:Fazoli's",cuisine:"italian",name:"Fazoli's",takeaway:"yes"}},"amenity/fast_food|Figaro's Pizza":{tags:{amenity:"fast_food",brand:"Figaro's Pizza","brand:wikidata":"Q48802600","brand:wikipedia":"en:Figaro's Pizza",cuisine:"pizza",name:"Figaro's Pizza",takeaway:"yes"}},"amenity/fast_food|Firehouse Subs":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Firehouse Subs","brand:wikidata":"Q5451873","brand:wikipedia":"en:Firehouse Subs",cuisine:"sandwich",name:"Firehouse Subs",takeaway:"yes"}},"amenity/fast_food|Five Guys":{tags:{amenity:"fast_food",brand:"Five Guys","brand:wikidata":"Q1131810","brand:wikipedia":"en:Five Guys",cuisine:"burger",name:"Five Guys",official_name:"Five Guys Burgers and Fries",takeaway:"yes"}},"amenity/fast_food|Freddy's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Freddy's","brand:wikidata":"Q5496837","brand:wikipedia":"en:Freddy's Frozen Custard & Steakburgers",cuisine:"ice_cream;burger",name:"Freddy's",official_name:"Freddys Frozen Custard & Steakburgers",takeaway:"yes"}},"amenity/fast_food|Freebirds":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Freebirds","brand:wikidata":"Q5500367","brand:wikipedia":"en:Freebirds World Burrito",cuisine:"mexican",name:"Freebirds",takeaway:"yes"}},"amenity/fast_food|Freshslice Pizza":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Freshslice Pizza","brand:wikidata":"Q5503082","brand:wikipedia":"en:Freshslice Pizza",cuisine:"pizza",name:"Freshslice Pizza",takeaway:"yes"}},"amenity/fast_food|Gabriel Pizza":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Gabriel Pizza","brand:wikidata":"Q5515791","brand:wikipedia":"en:Gabriel Pizza",cuisine:"pizza",name:"Gabriel Pizza",takeaway:"yes"}},"amenity/fast_food|Gino's Pizza":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Gino's Pizza","brand:wikidata":"Q5563205","brand:wikipedia":"en:Gino's Pizza and Spaghetti",cuisine:"pizza",name:"Gino's Pizza",takeaway:"yes"}},"amenity/fast_food|Gold Star Chili":{countryCodes:["us"],tags:{alt_name:"Gold Star",amenity:"fast_food",brand:"Gold Star Chili","brand:wikidata":"Q16994254","brand:wikipedia":"en:Gold Star Chili",cuisine:"chili",name:"Gold Star Chili",takeaway:"yes"}},"amenity/fast_food|Golden Chick":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Golden Chick","brand:wikidata":"Q3772930","brand:wikipedia":"en:Golden Chick",cuisine:"chicken",name:"Golden Chick",takeaway:"yes"}},"amenity/fast_food|Golden Krust Caribbean Bakery & Grill":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Golden Krust Caribbean Bakery & Grill","brand:wikidata":"Q5579615","brand:wikipedia":"en:Golden Krust Caribbean Bakery & Grill",cuisine:"caribbean",name:"Golden Krust",takeaway:"yes"}},"amenity/fast_food|Good Times":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Good Times","brand:wikidata":"Q1143589","brand:wikipedia":"en:Good Times Burgers & Frozen Custard",cuisine:"burger;ice_cream",name:"Good Times",official_name:"Good Times Burgers & Frozen Custard",takeaway:"yes"}},"amenity/fast_food|Great American Cookies":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Great American Cookies","brand:wikidata":"Q5598629","brand:wikipedia":"en:Great American Cookies",cuisine:"cookies",name:"Great American Cookies",takeaway:"yes"}},"amenity/fast_food|Greenwich":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Greenwich","brand:wikidata":"Q2691308","brand:wikipedia":"en:Greenwich Pizza",cuisine:"pizza",name:"Greenwich",takeaway:"yes"}},"amenity/fast_food|Greggs":{countryCodes:["gb"],tags:{amenity:"fast_food",brand:"Greggs","brand:wikidata":"Q3403981","brand:wikipedia":"en:Greggs",cuisine:"sandwich;bakery",name:"Greggs",takeaway:"yes"}},"amenity/fast_food|Grill'd":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Grill'd","brand:wikidata":"Q18165852","brand:wikipedia":"en:Grill'd",cuisine:"burger",name:"Grill'd",takeaway:"yes"}},"amenity/fast_food|Habib's":{countryCodes:["br","mx"],tags:{amenity:"fast_food",brand:"Habib's","brand:wikidata":"Q2504930","brand:wikipedia":"en:Habib's",cuisine:"middle_eastern",name:"Habib's",takeaway:"yes"}},"amenity/fast_food|Hallo Pizza":{countryCodes:["de"],tags:{amenity:"fast_food",brand:"Hallo Pizza","brand:wikidata":"Q1571798","brand:wikipedia":"de:Hallo Pizza",cuisine:"pizza",name:"Hallo Pizza",takeaway:"yes"}},"amenity/fast_food|Hardee's":{tags:{amenity:"fast_food",brand:"Hardee's","brand:wikidata":"Q1585088","brand:wikipedia":"en:Hardee's",cuisine:"burger",name:"Hardee's",takeaway:"yes"}},"amenity/fast_food|Harry Ramsden's":{countryCodes:["gb","ie"],tags:{amenity:"fast_food",brand:"Harry Ramsden's","brand:wikidata":"Q5671849","brand:wikipedia":"en:Harry Ramsden's",cuisine:"fish_and_chips",name:"Harry Ramsden's",takeaway:"yes"}},"amenity/fast_food|Harvey's":{countryCodes:["ca"],nomatch:["shop/furniture|Harveys"],tags:{amenity:"fast_food",brand:"Harvey's","brand:wikidata":"Q1466184","brand:wikipedia":"en:Harvey's",cuisine:"burger",name:"Harvey's",takeaway:"yes"}},"amenity/fast_food|Herfy":{countryCodes:["ae","bd","bh","kw","sa"],tags:{amenity:"fast_food",brand:"Herfy","brand:ar":"هرفي","brand:en":"Herfy","brand:wikidata":"Q5738371","brand:wikipedia":"en:Herfy",cuisine:"burger",name:"Herfy","name:ar":"هرفي","name:en":"Herfy",takeaway:"yes"}},"amenity/fast_food|Hero Certified Burgers":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Hero Certified Burgers","brand:wikidata":"Q5742641","brand:wikipedia":"en:Hero Certified Burgers",cuisine:"burger",name:"Hero Certified Burgers",takeaway:"yes"}},"amenity/fast_food|Hesburger":{tags:{amenity:"fast_food",brand:"Hesburger","brand:wikidata":"Q1276832","brand:wikipedia":"en:Hesburger",cuisine:"burger",name:"Hesburger",takeaway:"yes"}},"amenity/fast_food|Honey Baked Ham":{countryCodes:["us"],matchNames:["honey baked ham company"],matchTags:["shop/butcher","shop/deli"],tags:{alt_name:"HoneyBaked Ham",amenity:"fast_food",brand:"Honey Baked Ham","brand:wikidata":"Q5893363","brand:wikipedia":"en:The Honey Baked Ham Company",cuisine:"american",name:"Honey Baked Ham",official_name:"The Honey Baked Ham Company",takeaway:"yes"}},"amenity/fast_food|Hot Dog on a Stick":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Hot Dog on a Stick","brand:wikidata":"Q5909922","brand:wikipedia":"en:Hot Dog on a Stick",cuisine:"hot_dog",name:"Hot Dog on a Stick",takeaway:"yes"}},"amenity/fast_food|Hot Head Burritos":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Hot Head Burritos","brand:wikidata":"Q5910008","brand:wikipedia":"en:Hot Head Burritos",cuisine:"mexican",name:"Hot Head Burritos",short_name:"Hot Head",takeaway:"yes"}},"amenity/fast_food|HuHot":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"HuHot","brand:wikidata":"Q5924606","brand:wikipedia":"en:HuHot Mongolian Grill",cuisine:"bbq",name:"HuHot",official_name:"HuHot Mongolian Grill",takeaway:"yes"}},"amenity/fast_food|Hungry Howie's":{countryCodes:["us"],matchNames:["hungry howies pizza"],tags:{amenity:"fast_food",brand:"Hungry Howie's","brand:wikidata":"Q16985303","brand:wikipedia":"en:Hungry Howie's Pizza",cuisine:"pizza",name:"Hungry Howie's",takeaway:"yes"}},"amenity/fast_food|Hungry Jacks":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Hungry Jacks","brand:wikidata":"Q3036373","brand:wikipedia":"en:Hungry Jack's",cuisine:"burger",name:"Hungry Jacks",takeaway:"yes"}},"amenity/fast_food|IKEA Restaurant":{tags:{amenity:"fast_food",brand:"IKEA","brand:wikidata":"Q54078","brand:wikipedia":"en:IKEA",cuisine:"swedish",name:"IKEA Restaurant",takeaway:"yes"}},"amenity/fast_food|Imo's Pizza":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Imo's Pizza","brand:wikidata":"Q6005623","brand:wikipedia":"en:Imo's Pizza",cuisine:"pizza",name:"Imo's Pizza",takeaway:"yes"}},"amenity/fast_food|In-N-Out Burger":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"In-N-Out Burger","brand:wikidata":"Q1205312","brand:wikipedia":"en:In-N-Out Burger",cuisine:"burger",name:"In-N-Out Burger",takeaway:"yes"}},"amenity/fast_food|Jack in the Box":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Jack in the Box","brand:wikidata":"Q1538507","brand:wikipedia":"en:Jack in the Box",cuisine:"burger",name:"Jack in the Box",takeaway:"yes"}},"amenity/fast_food|Jamba Juice":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Jamba Juice","brand:wikidata":"Q3088784","brand:wikipedia":"en:Jamba Juice",cuisine:"juice",name:"Jamba Juice",takeaway:"yes"}},"amenity/fast_food|Jersey Mike's Subs":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Jersey Mike's Subs","brand:wikidata":"Q6184897","brand:wikipedia":"en:Jersey Mike's Subs",cuisine:"sandwich",name:"Jersey Mike's Subs",short_name:"Jersey Mike's",takeaway:"yes"}},"amenity/fast_food|Jimmy John's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Jimmy John's","brand:wikidata":"Q1689380","brand:wikipedia":"en:Jimmy John's",cuisine:"sandwich",name:"Jimmy John's",official_name:"Jimmy John's Gourmet Sandwiches",takeaway:"yes"}},"amenity/fast_food|Jimmy the Greek":{countryCodes:["ae","ca"],tags:{amenity:"fast_food",brand:"Jimmy the Greek","brand:wikidata":"Q17077817","brand:wikipedia":"en:Jimmy the Greek (restaurant)",cuisine:"greek",name:"Jimmy the Greek",takeaway:"yes"}},"amenity/fast_food|Jollibee":{tags:{amenity:"fast_food",brand:"Jollibee","brand:wikidata":"Q37614","brand:wikipedia":"en:Jollibee",cuisine:"burger",name:"Jollibee",takeaway:"yes"}},"amenity/fast_food|Just Salad":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Just Salad","brand:wikidata":"Q23091823","brand:wikipedia":"en:Just Salad",cuisine:"salad",name:"Just Salad",takeaway:"yes"}},"amenity/fast_food|KFC":{tags:{alt_name:"Kentucky Fried Chicken",amenity:"fast_food",brand:"KFC","brand:wikidata":"Q524757","brand:wikipedia":"en:KFC",cuisine:"chicken",name:"KFC",takeaway:"yes"}},"amenity/fast_food|Kernels Popcorn":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Kernels Popcorn","brand:wikidata":"Q64876684",cuisine:"popcorn",name:"Kernels Popcorn",takeaway:"yes"}},"amenity/fast_food|Kochlöffel":{countryCodes:["de","tr"],tags:{amenity:"fast_food",brand:"Kochlöffel","brand:wikidata":"Q315539","brand:wikipedia":"en:Kochlöffel",cuisine:"burger",name:"Kochlöffel",takeaway:"yes"}},"amenity/fast_food|Kotipizza":{countryCodes:["fi"],tags:{amenity:"fast_food",brand:"Kotipizza","brand:wikidata":"Q1628625","brand:wikipedia":"en:Kotipizza",cuisine:"pizza",name:"Kotipizza",takeaway:"yes"}},"amenity/fast_food|Krispy Kreme":{matchNames:["krispy kreme doughnuts"],tags:{amenity:"fast_food",brand:"Krispy Kreme","brand:wikidata":"Q1192805","brand:wikipedia":"en:Krispy Kreme",cuisine:"donut",name:"Krispy Kreme",takeaway:"yes"}},"amenity/fast_food|Krispy Krunchy Chicken":{countryCodes:["mx","us"],matchNames:["crispy crunchy chicken"],tags:{amenity:"fast_food",brand:"Krispy Krunchy Chicken","brand:wikidata":"Q65087447","brand:wikipedia":"en:Krispy Krunchy Chicken",cuisine:"chicken",name:"Krispy Krunchy Chicken",takeaway:"yes"}},"amenity/fast_food|Krystal":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Krystal","brand:wikidata":"Q472195","brand:wikipedia":"en:Krystal (restaurant)",cuisine:"burger",name:"Krystal",takeaway:"yes"}},"amenity/fast_food|Kudu":{countryCodes:["bh","jo","sa"],tags:{amenity:"fast_food",brand:"Kudu","brand:wikidata":"Q6441777","brand:wikipedia":"en:Kudu (restaurant)",cuisine:"sandwich",name:"Kudu",takeaway:"yes"}},"amenity/fast_food|L&L Drive-Inn~(Hawaii)":{countryCodes:["us"],matchNames:["l&l","l&l drive-in"],tags:{amenity:"fast_food",brand:"L&L Drive-Inn","brand:wikidata":"Q6455441","brand:wikipedia":"en:L&L Hawaiian Barbecue",cuisine:"hawaiian",name:"L&L Drive-Inn",takeaway:"yes"}},"amenity/fast_food|L&L Hawaiian Barbecue":{countryCodes:["us"],matchNames:["l&l","l&l hawaiian bbq"],tags:{amenity:"fast_food",brand:"L&L Hawaiian Barbecue","brand:wikidata":"Q6455441","brand:wikipedia":"en:L&L Hawaiian Barbecue",cuisine:"hawaiian",name:"L&L Hawaiian Barbecue",takeaway:"yes"}},"amenity/fast_food|LEON":{countryCodes:["ch","gb","ie","nl","us"],tags:{amenity:"fast_food",brand:"LEON","brand:wikidata":"Q6524851","brand:wikipedia":"en:Leon Restaurants",name:"LEON",takeaway:"yes"}},"amenity/fast_food|La Belle Province":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"La Belle Province","brand:wikidata":"Q3206579","brand:wikipedia":"fr:La Belle Province (restaurant)",cuisine:"burger;sandwich",name:"La Belle Province",takeaway:"yes"}},"amenity/fast_food|La Salsa":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"La Salsa","brand:wikidata":"Q48835190","brand:wikipedia":"en:La Salsa",cuisine:"tex-mex",name:"La Salsa",takeaway:"yes"}},"amenity/fast_food|Lee's Famous Recipe Chicken":{countryCodes:["ca","us"],matchNames:["lee's"],tags:{amenity:"fast_food",brand:"Lee's Famous Recipe Chicken","brand:wikidata":"Q6512810","brand:wikipedia":"en:Lee's Famous Recipe Chicken",cuisine:"chicken",name:"Lee's Famous Recipe Chicken",takeaway:"yes"}},"amenity/fast_food|Lee's Sandwiches":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Lee's Sandwiches","brand:wikidata":"Q6512823","brand:wikipedia":"en:Lee's Sandwiches",cuisine:"vietnamese;sandwich",name:"Lee's Sandwiches",takeaway:"yes"}},"amenity/fast_food|Little Caesars":{matchNames:["little caesars pizza","little ceasars","little ceasars pizza"],tags:{amenity:"fast_food",brand:"Little Caesars","brand:wikidata":"Q1393809","brand:wikipedia":"en:Little Caesars",cuisine:"pizza",name:"Little Caesars",takeaway:"yes"}},"amenity/fast_food|Long John Silver's":{tags:{amenity:"fast_food",brand:"Long John Silver's","brand:wikidata":"Q1535221","brand:wikipedia":"en:Long John Silver's",cuisine:"seafood",name:"Long John Silver's",takeaway:"yes"}},"amenity/fast_food|Lotteria":{tags:{amenity:"fast_food",brand:"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"en:Lotteria",cuisine:"burger",name:"Lotteria",takeaway:"yes"}},"amenity/fast_food|MOD Pizza":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"MOD Pizza","brand:wikidata":"Q19903469","brand:wikipedia":"en:MOD Pizza",cuisine:"pizza",name:"MOD Pizza",takeaway:"yes"}},"amenity/fast_food|Manchu Wok":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Manchu Wok","brand:wikidata":"Q6747622","brand:wikipedia":"en:Manchu Wok",cuisine:"chinese",name:"Manchu Wok",takeaway:"yes"}},"amenity/fast_food|Mang Inasal":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Mang Inasal","brand:wikidata":"Q6748573","brand:wikipedia":"en:Mang Inasal",cuisine:"barbecue",name:"Mang Inasal",takeaway:"yes"}},"amenity/fast_food|Manhattan Bagel":{countryCodes:["us"],matchNames:["manhattan bagels"],tags:{amenity:"fast_food",brand:"Manhattan Bagel","brand:wikidata":"Q64517333",cuisine:"bagel",name:"Manhattan Bagel",takeaway:"yes"}},"amenity/fast_food|Mary Brown's":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Mary Brown's","brand:wikidata":"Q6779125","brand:wikipedia":"en:Mary Brown's",cuisine:"chicken",name:"Mary Brown's",takeaway:"yes"}},"amenity/fast_food|Max":{countryCodes:["se"],tags:{amenity:"fast_food",brand:"Max","brand:wikidata":"Q1912172","brand:wikipedia":"en:Max Hamburgers",cuisine:"burger",name:"Max",takeaway:"yes"}},"amenity/fast_food|McDonald's":{tags:{amenity:"fast_food",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"McDonald's",takeaway:"yes"}},"amenity/fast_food|Meson Sandwiches":{countryCodes:["us"],matchNames:["el meson"],tags:{alt_name:"El Meson Sandwiches",amenity:"fast_food",brand:"Meson Sandwiches","brand:wikidata":"Q5351585","brand:wikipedia":"en:El Meson Sandwiches",cuisine:"sandwich",name:"Meson Sandwiches",short_name:"Meson",takeaway:"yes"}},"amenity/fast_food|Mighty Taco":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Mighty Taco","brand:wikidata":"Q6844210","brand:wikipedia":"en:Mighty Taco",cuisine:"mexican",name:"Mighty Taco",takeaway:"yes"}},"amenity/fast_food|Minute Burger":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Minute Burger","brand:wikidata":"Q62273503",cuisine:"burger",name:"Minute Burger",takeaway:"yes"}},"amenity/fast_food|Moe's Southwest Grill":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Moe's Southwest Grill","brand:wikidata":"Q6889938","brand:wikipedia":"en:Moe's Southwest Grill",cuisine:"mexican",name:"Moe's Southwest Grill",short_name:"Moe's",takeaway:"yes"}},"amenity/fast_food|Morley's":{countryCodes:["gb"],tags:{amenity:"fast_food",brand:"Morley's","brand:wikidata":"Q21008528","brand:wikipedia":"en:Morley's",cuisine:"chicken",name:"Morley's",takeaway:"yes"}},"amenity/fast_food|Mr. Sub":{tags:{amenity:"fast_food",brand:"Mr. Sub","brand:wikidata":"Q6929225","brand:wikipedia":"en:Mr. Sub",cuisine:"sandwich",name:"Mr. Sub",takeaway:"yes"}},"amenity/fast_food|Mucho Burrito":{countryCodes:["ca","gb","us"],tags:{amenity:"fast_food",brand:"Mucho Burrito","brand:wikidata":"Q65148332",cuisine:"mexican",name:"Mucho Burrito",takeaway:"yes"}},"amenity/fast_food|Nathan's":{countryCodes:["us"],matchNames:["nathans famous"],tags:{amenity:"fast_food",brand:"Nathan's","brand:wikidata":"Q1319505","brand:wikipedia":"en:Nathan's Famous",cuisine:"hot_dog",name:"Nathan's",takeaway:"yes"}},"amenity/fast_food|Nestlé Toll House Café":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Nestlé Toll House Café","brand:wikidata":"Q6997922","brand:wikipedia":"en:Nestlé Toll House Café",cuisine:"dessert",name:"Nestlé Toll House Café",takeaway:"yes"}},"amenity/fast_food|New York Fries":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"New York Fries","brand:wikidata":"Q7013558","brand:wikipedia":"en:New York Fries",cuisine:"fries",name:"New York Fries",takeaway:"yes"}},"amenity/fast_food|New York Pizza":{countryCodes:["nl"],tags:{amenity:"fast_food",brand:"New York Pizza","brand:wikidata":"Q2639128","brand:wikipedia":"nl:New York Pizza",cuisine:"pizza",name:"New York Pizza",takeaway:"yes"}},"amenity/fast_food|Noah's Bagels":{countryCodes:["us"],matchNames:["noahs ny bagels"],tags:{amenity:"fast_food",brand:"Noah's Bagels","brand:wikidata":"Q64517373",cuisine:"bagel",name:"Noah's Bagels",official_name:"Noah's New York Bagels",takeaway:"yes"}},"amenity/fast_food|Noodle Box":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Noodle Box","brand:wikidata":"Q7049671","brand:wikipedia":"en:Noodle Box",cuisine:"noodle",name:"Noodle Box",takeaway:"yes"}},"amenity/fast_food|Nordsee":{countryCodes:["at","ch","de"],tags:{amenity:"fast_food",brand:"Nordsee","brand:wikidata":"Q74866","brand:wikipedia":"en:Nordsee",cuisine:"seafood",name:"Nordsee",takeaway:"yes"}},"amenity/fast_food|Num Pang":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Num Pang","brand:wikidata":"Q62079702","brand:wikipedia":"en:Num Pang",cuisine:"cambodian;sandwich",name:"Num Pang",takeaway:"yes"}},"amenity/fast_food|O'Tacos":{countryCodes:["be","fr"],tags:{amenity:"fast_food",brand:"O'Tacos","brand:wikidata":"Q28494040","brand:wikipedia":"en:O'Tacos",cuisine:"mexican",name:"O'Tacos",takeaway:"yes"}},"amenity/fast_food|Oporto":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Oporto","brand:wikidata":"Q4412342","brand:wikipedia":"en:Oporto (restaurant)",cuisine:"burger;chicken",name:"Oporto",takeaway:"yes"}},"amenity/fast_food|Orange Julius":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Orange Julius","brand:wikidata":"Q3355059","brand:wikipedia":"en:Orange Julius",cuisine:"juice",name:"Orange Julius",takeaway:"yes"}},"amenity/fast_food|P. Terry's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"P. Terry's","brand:wikidata":"Q19903521","brand:wikipedia":"en:P. Terry's",cuisine:"burger",name:"P. Terry's",official_name:"P. Terry's Burger Stand",takeaway:"yes"}},"amenity/fast_food|Pal's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Pal's","brand:wikidata":"Q7126094","brand:wikipedia":"en:Pal's",cuisine:"burger",name:"Pal's",official_name:"Pal's Sudden Service",takeaway:"yes"}},"amenity/fast_food|Panago":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Panago","brand:wikidata":"Q17111672","brand:wikipedia":"en:Panago",cuisine:"pizza",name:"Panago",takeaway:"yes"}},"amenity/fast_food|Panda Express":{matchNames:["panda"],tags:{amenity:"fast_food",brand:"Panda Express","brand:wikidata":"Q1358690","brand:wikipedia":"en:Panda Express",cuisine:"chinese",name:"Panda Express",takeaway:"yes"}},"amenity/fast_food|Panera Bread":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Panera Bread","brand:wikidata":"Q7130852","brand:wikipedia":"en:Panera Bread",cuisine:"sandwich;bakery",name:"Panera Bread",short_name:"Panera",takeaway:"yes"}},"amenity/fast_food|Panos":{countryCodes:["ae","be","cz","nl","pl","sk","tw"],tags:{amenity:"fast_food",brand:"Panos","brand:wikidata":"Q3384496","brand:wikipedia":"nl:Panos",cuisine:"sandwich",name:"Panos",takeaway:"yes"}},"amenity/fast_food|Pans & Company":{countryCodes:["es","it","pt"],tags:{amenity:"fast_food",brand:"Pans & Company","brand:wikidata":"Q11697586","brand:wikipedia":"es:Pans & Company",cuisine:"sandwich",name:"Pans & Company",takeaway:"yes"}},"amenity/fast_food|Papa John's":{matchNames:["papa john","papa john pizza","papa johns pizza"],tags:{amenity:"fast_food",brand:"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"en:Papa John's Pizza",cuisine:"pizza",name:"Papa John's",takeaway:"yes"}},"amenity/fast_food|Papa Murphy's":{countryCodes:["ca","us"],matchNames:["papa murphy","papa murphy pizza","papa murphys pizza"],tags:{amenity:"fast_food",brand:"Papa Murphy's","brand:wikidata":"Q7132349","brand:wikipedia":"en:Papa Murphy's",cuisine:"pizza",name:"Papa Murphy's",official_name:"Papa Murphy's Take 'N' Bake Pizza",takeaway:"only"}},"amenity/fast_food|Penn Station":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Penn Station","brand:wikidata":"Q7163311","brand:wikipedia":"en:Penn Station (restaurant)",cuisine:"sandwich",name:"Penn Station",takeaway:"yes"}},"amenity/fast_food|Philly Pretzel Factory":{countryCodes:["us"],matchNames:["philadelphia pretzel factory","philadelphia soft pretzel factory","philly soft pretzel factory"],tags:{amenity:"fast_food",brand:"Philly Pretzel Factory","brand:wikidata":"Q60097339",cuisine:"pretzel",name:"Philly Pretzel Factory",takeaway:"yes"}},"amenity/fast_food|Pinulito":{countryCodes:["gt"],tags:{amenity:"fast_food",brand:"Pinulito","brand:wikidata":"Q62273613",cuisine:"chicken",name:"Pinulito",takeaway:"yes"}},"amenity/fast_food|Pita Pit":{tags:{amenity:"fast_food",brand:"Pita Pit","brand:wikidata":"Q7757289","brand:wikipedia":"en:Pita Pit",cuisine:"pita",name:"Pita Pit",takeaway:"yes"}},"amenity/fast_food|Pizza 73":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Pizza 73","brand:wikidata":"Q7199950","brand:wikipedia":"en:Pizza 73",cuisine:"pizza",name:"Pizza 73",takeaway:"yes"}},"amenity/fast_food|Pizza Capers":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Pizza Capers",cuisine:"pizza",name:"Pizza Capers",takeaway:"yes"}},"amenity/fast_food|Pizza Hut Delivery":{tags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Delivery",takeaway:"yes"}},"amenity/fast_food|Pizza Hut Express":{nomatch:["amenity/restaurant|Pizza Hut"],tags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Express",takeaway:"yes"}},"amenity/fast_food|Pizza Inn":{tags:{amenity:"fast_food",brand:"Pizza Inn","brand:wikidata":"Q4118850","brand:wikipedia":"en:Pizza Inn",cuisine:"pizza",name:"Pizza Inn",takeaway:"yes"}},"amenity/fast_food|Pizza King":{tags:{amenity:"fast_food",brand:"Pizza King",cuisine:"pizza",name:"Pizza King",takeaway:"yes"}},"amenity/fast_food|Pizza Móvil":{countryCodes:["es"],tags:{amenity:"fast_food",brand:"Pizza Móvil","brand:wikidata":"Q12397697","brand:wikipedia":"gl:Pizza Móvil",cuisine:"pizza",name:"Pizza Móvil",takeaway:"yes"}},"amenity/fast_food|Pizza Nova":{tags:{amenity:"fast_food",brand:"Pizza Nova","brand:wikidata":"Q7199971","brand:wikipedia":"en:Pizza Nova",cuisine:"pizza",name:"Pizza Nova",takeaway:"yes"}},"amenity/fast_food|Pizza Pizza":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Pizza Pizza","brand:wikidata":"Q1194143","brand:wikipedia":"en:Pizza Pizza",cuisine:"pizza",name:"Pizza Pizza",takeaway:"yes"}},"amenity/fast_food|Pizza Schmizza":{tags:{amenity:"fast_food",brand:"Pizza Schmizza","brand:wikidata":"Q7199979","brand:wikipedia":"en:Pizza Schmizza",cuisine:"pizza",name:"Pizza Schmizza",takeaway:"yes"}},"amenity/fast_food|Pizza Tutto":{countryCodes:["es"],tags:{amenity:"fast_food",brand:"Pizza Tutto",cuisine:"pizza",name:"Pizza Tutto",takeaway:"yes"}},"amenity/fast_food|Pizzaville":{tags:{amenity:"fast_food",brand:"Pizzaville",name:"Pizzaville",takeaway:"yes"}},"amenity/fast_food|Pollo Campero":{tags:{amenity:"fast_food",brand:"Pollo Campero","brand:wikidata":"Q942741","brand:wikipedia":"en:Pollo Campero",cuisine:"chicken",name:"Pollo Campero",takeaway:"yes"}},"amenity/fast_food|Pollo Granjero~(Costa Rica)":{countryCodes:["cr"],tags:{amenity:"fast_food",brand:"Pollo Granjero","brand:wikidata":"Q62273665",cuisine:"chicken",name:"Pollo Granjero",takeaway:"yes"}},"amenity/fast_food|Pollo Granjero~(Guatemala)":{countryCodes:["gt"],tags:{amenity:"fast_food",brand:"Pollo Granjero","brand:wikidata":"Q62273652",cuisine:"chicken",name:"Pollo Granjero",takeaway:"yes"}},"amenity/fast_food|Pollo Tropical":{tags:{amenity:"fast_food",brand:"Pollo Tropical","brand:wikidata":"Q3395356","brand:wikipedia":"en:Pollo Tropical",cuisine:"chicken",name:"Pollo Tropical",takeaway:"yes"}},"amenity/fast_food|Pollolandia":{tags:{amenity:"fast_food",brand:"Pollolandia",cuisine:"chicken",name:"Pollolandia",takeaway:"yes"}},"amenity/fast_food|Popeyes":{tags:{amenity:"fast_food",brand:"Popeyes","brand:wikidata":"Q1330910","brand:wikipedia":"en:Popeyes",cuisine:"chicken",name:"Popeyes",official_name:"Popeyes Louisiana Kitchen",takeaway:"yes"}},"amenity/fast_food|Portillo's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Portillo's","brand:wikidata":"Q3399307","brand:wikipedia":"en:Portillo's Restaurants",cuisine:"hot_dog;burger",name:"Portillo's",takeaway:"yes"}},"amenity/fast_food|Potbelly":{countryCodes:["us"],matchNames:["potbelly sandwich shop"],tags:{amenity:"fast_food",brand:"Potbelly","brand:wikidata":"Q7234777","brand:wikipedia":"en:Potbelly Sandwich Shop",cuisine:"sandwich",name:"Potbelly",official_name:"Potbelly Sandwich Works",takeaway:"yes"}},"amenity/fast_food|Pret A Manger":{countryCodes:["ae","cn","de","dk","fr","gb","hk","nl","sg","us"],tags:{amenity:"fast_food",brand:"Pret A Manger","brand:wikidata":"Q2109109","brand:wikipedia":"en:Pret a Manger",cuisine:"sandwich",name:"Pret A Manger",short_name:"Pret",takeaway:"yes"}},"amenity/fast_food|Pretzelmaker":{countryCodes:["us"],matchNames:["pretzel time"],tags:{amenity:"fast_food",brand:"Pretzelmaker","brand:wikidata":"Q7242321","brand:wikipedia":"en:Pretzelmaker",cuisine:"pretzel",name:"Pretzelmaker",takeaway:"yes"}},"amenity/fast_food|Qdoba":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Qdoba","brand:wikidata":"Q1363885","brand:wikipedia":"en:Qdoba",cuisine:"mexican",name:"Qdoba",official_name:"Qdoba Mexican Grill",takeaway:"yes"}},"amenity/fast_food|Quesada":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Quesada","brand:wikidata":"Q66070360",cuisine:"mexican",name:"Quesada",official_name:"Quesada Burritos & Tacos",takeaway:"yes"}},"amenity/fast_food|Quick":{countryCodes:["be","fr","lu"],tags:{amenity:"fast_food",brand:"Quick","brand:wikidata":"Q286494","brand:wikipedia":"en:Quick (restaurant)",cuisine:"burger",name:"Quick",takeaway:"yes"}},"amenity/fast_food|Quiznos":{matchNames:["quiznos sub","quiznos subs"],tags:{amenity:"fast_food",brand:"Quiznos","brand:wikidata":"Q1936229","brand:wikipedia":"en:Quiznos",cuisine:"sandwich",name:"Quiznos",takeaway:"yes"}},"amenity/fast_food|Raising Cane's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Raising Cane's","brand:wikidata":"Q7285144","brand:wikipedia":"en:Raising Cane's Chicken Fingers",cuisine:"chicken",name:"Raising Cane's",official_name:"Raising Cane's Chicken Fingers",takeaway:"yes"}},"amenity/fast_food|Rally's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Rally's","brand:wikidata":"Q63919323",cuisine:"burger",name:"Rally's",takeaway:"yes"}},"amenity/fast_food|Red Rooster":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Red Rooster","brand:wikidata":"Q376466","brand:wikipedia":"en:Red Rooster",cuisine:"chicken",name:"Red Rooster",takeaway:"yes"}},"amenity/fast_food|Robin's Donuts":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Robin's Donuts","brand:wikidata":"Q7352199","brand:wikipedia":"en:Robin's Donuts",cuisine:"donut",name:"Robin's Donuts",short_name:"Robin's",takeaway:"yes"}},"amenity/fast_food|Roy Rogers":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Roy Rogers","brand:wikidata":"Q7373311","brand:wikipedia":"en:Roy Rogers Restaurants",cuisine:"burger;sandwich;chicken",name:"Roy Rogers",takeaway:"yes"}},"amenity/fast_food|Rubio's":{countryCodes:["us"],matchNames:["rubios fresh mexican grill"],tags:{amenity:"fast_food",brand:"Rubio's","brand:wikidata":"Q7376154","brand:wikipedia":"en:Rubio's Coastal Grill",cuisine:"mexican",name:"Rubio's",official_name:"Rubio's Coastal Grill",takeaway:"yes"}},"amenity/fast_food|SUSU & Sons":{countryCodes:["il"],matchNames:["סוסו ובניו"],tags:{amenity:"fast_food",brand:"SUSU & Sons","brand:en":"SUSU & Sons","brand:he":"סוסו אנד סאנס","brand:wikidata":"Q64760081",cuisine:"burger",name:"SUSU & Sons","name:en":"SUSU & Sons","name:he":"סוסו אנד סאנס",takeaway:"yes"}},"amenity/fast_food|Sarku Japan":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Sarku Japan","brand:wikidata":"Q7424243",cuisine:"japanese",name:"Sarku Japan",takeaway:"yes"}},"amenity/fast_food|Sarpino's Pizzeria":{tags:{amenity:"fast_food",brand:"Sarpino's Pizzeria","brand:wikidata":"Q28229116","brand:wikipedia":"en:Sarpino's Pizzeria",cuisine:"pizza",name:"Sarpino's Pizzeria",takeaway:"yes"}},"amenity/fast_food|Sbarro":{matchNames:["sbarro pizzeria"],tags:{amenity:"fast_food",brand:"Sbarro","brand:wikidata":"Q2589409","brand:wikipedia":"en:Sbarro",cuisine:"pizza",name:"Sbarro",takeaway:"yes"}},"amenity/fast_food|Schlotzsky's":{countryCodes:["us"],matchNames:["schlotzskys deli"],tags:{amenity:"fast_food",brand:"Schlotzsky's","brand:wikidata":"Q2244796","brand:wikipedia":"en:Schlotzsky's",cuisine:"sandwich",name:"Schlotzsky's",takeaway:"yes"}},"amenity/fast_food|Schnitz":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Schnitz","brand:wikidata":"Q48792277","brand:wikipedia":"en:Schnitz",cuisine:"chicken",name:"Schnitz",takeaway:"yes"}},"amenity/fast_food|Shake Shack":{countryCodes:["gb","us"],tags:{amenity:"fast_food",brand:"Shake Shack","brand:wikidata":"Q1058722","brand:wikipedia":"en:Shake Shack",cuisine:"burger",name:"Shake Shack",takeaway:"yes"}},"amenity/fast_food|Sibylla":{countryCodes:["fi","se"],tags:{amenity:"fast_food",brand:"Sibylla","brand:wikidata":"Q488643","brand:wikipedia":"en:Sibylla (fast food)",cuisine:"burger",name:"Sibylla",takeaway:"yes"}},"amenity/fast_food|Smashburger":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Smashburger","brand:wikidata":"Q17061332","brand:wikipedia":"en:Smashburger",cuisine:"burger",name:"Smashburger",takeaway:"yes"}},"amenity/fast_food|Smoothie King":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Smoothie King","brand:wikidata":"Q5491421","brand:wikipedia":"en:Smoothie King",cuisine:"juice",name:"Smoothie King",takeaway:"yes"}},"amenity/fast_food|Sonic":{matchNames:["sonic drive in"],nomatch:["amenity/fuel|Sonic"],tags:{amenity:"fast_food",brand:"Sonic","brand:wikidata":"Q7561808","brand:wikipedia":"en:Sonic Drive-In",cuisine:"burger",drive_in:"yes",name:"Sonic",takeaway:"yes"}},"amenity/fast_food|Specialty's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Specialty's","brand:wikidata":"Q64339210",cuisine:"sandwich;bakery",name:"Specialty's",takeaway:"yes"}},"amenity/fast_food|St-Hubert Express":{countryCodes:["ca"],nomatch:["amenity/restaurant|St-Hubert"],tags:{amenity:"fast_food",brand:"St-Hubert","brand:wikidata":"Q3495225","brand:wikipedia":"fr:St-Hubert (restaurant)",cuisine:"chicken;barbecue",name:"St-Hubert Express",takeaway:"yes"}},"amenity/fast_food|Steak 'n Shake":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Steak 'n Shake","brand:wikidata":"Q7605233","brand:wikipedia":"en:Steak 'n Shake",cuisine:"burger",name:"Steak 'n Shake",takeaway:"yes"}},"amenity/fast_food|Steak Escape":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Steak Escape","brand:wikidata":"Q7605235","brand:wikipedia":"en:Steak Escape",cuisine:"sandwich",name:"Steak Escape",takeaway:"yes"}},"amenity/fast_food|Steers":{tags:{amenity:"fast_food",brand:"Steers","brand:wikidata":"Q56599145","brand:wikipedia":"en:Steers",cuisine:"burger",name:"Steers",takeaway:"yes"}},"amenity/fast_food|Subway":{matchNames:["subway sandwiches"],tags:{amenity:"fast_food",brand:"Subway","brand:wikidata":"Q244457","brand:wikipedia":"en:Subway (restaurant)",cuisine:"sandwich",name:"Subway",takeaway:"yes"}},"amenity/fast_food|Sumo Salad":{countryCodes:["ae","au","br","nz","sg","us"],tags:{amenity:"fast_food",brand:"Sumo Salad","brand:wikidata":"Q16951700","brand:wikipedia":"en:Sumo Salad",cuisine:"salad",name:"Sumo Salad",takeaway:"yes"}},"amenity/fast_food|Supermac's":{countryCodes:["gb","ie"],tags:{amenity:"fast_food",brand:"Supermac's","brand:wikidata":"Q7643750","brand:wikipedia":"en:Supermac's",cuisine:"burger",name:"Supermac's",takeaway:"yes"}},"amenity/fast_food|Sushi Shop":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Sushi Shop","brand:wikidata":"Q64840990",cuisine:"sushi",name:"Sushi Shop",takeaway:"yes"}},"amenity/fast_food|Taco Bell":{tags:{amenity:"fast_food",brand:"Taco Bell","brand:wikidata":"Q752941","brand:wikipedia":"en:Taco Bell",cuisine:"tex-mex",name:"Taco Bell",takeaway:"yes"}},"amenity/fast_food|Taco Bueno":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Taco Bueno","brand:wikidata":"Q7673958","brand:wikipedia":"en:Taco Bueno",cuisine:"mexican",name:"Taco Bueno",takeaway:"yes"}},"amenity/fast_food|Taco Cabana":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Taco Cabana","brand:wikidata":"Q12070488","brand:wikipedia":"en:Taco Cabana",cuisine:"mexican",name:"Taco Cabana",takeaway:"yes"}},"amenity/fast_food|Taco Del Mar":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Taco Del Mar","brand:wikidata":"Q7673972","brand:wikipedia":"en:Taco del Mar",cuisine:"mexican",name:"Taco Del Mar",takeaway:"yes"}},"amenity/fast_food|Taco John's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Taco John's","brand:wikidata":"Q7673962","brand:wikipedia":"en:Taco John's",cuisine:"mexican",name:"Taco John's",takeaway:"yes"}},"amenity/fast_food|Taco Mayo":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Taco Mayo","brand:wikidata":"Q2386946","brand:wikipedia":"en:Taco Mayo",cuisine:"tex-mex",name:"Taco Mayo",takeaway:"yes"}},"amenity/fast_food|Taco Time":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Taco Time","brand:wikidata":"Q7673969","brand:wikipedia":"en:Taco Time",cuisine:"mexican",name:"Taco Time",takeaway:"yes"}},"amenity/fast_food|Ted's Hot Dogs":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Ted's Hot Dogs","brand:wikidata":"Q7692930","brand:wikipedia":"en:Ted's Hot Dogs",cuisine:"hot_dog",name:"Ted's Hot Dogs",takeaway:"yes"}},"amenity/fast_food|Telepizza":{tags:{amenity:"fast_food",brand:"Telepizza","brand:wikidata":"Q2699863","brand:wikipedia":"en:Telepizza",cuisine:"pizza",name:"Telepizza",takeaway:"yes"}},"amenity/fast_food|Teriyaki Experience":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Teriyaki Experience","brand:wikidata":"Q7702453",cuisine:"japanese",name:"Teriyaki Experience",takeaway:"yes"}},"amenity/fast_food|Texas Burger":{tags:{amenity:"fast_food",brand:"Texas Burger",cuisine:"burger",name:"Texas Burger",takeaway:"yes"}},"amenity/fast_food|Texas Chicken":{tags:{amenity:"fast_food",brand:"Texas Chicken",cuisine:"chicken",name:"Texas Chicken",takeaway:"yes"}},"amenity/fast_food|Thai Express~(Singapore)":{countryCodes:["sg"],nomatch:["amenity/fast_food|Thaï Express~(North America)"],tags:{amenity:"fast_food",brand:"Thai Express","brand:wikidata":"Q7709119","brand:wikipedia":"en:Thai Express",cuisine:"thai",name:"Thai Express",takeaway:"yes"}},"amenity/fast_food|Thaï Express~(North America)":{countryCodes:["ca","us"],matchNames:["thai express"],nomatch:["amenity/fast_food|Thai Express~(Singapore)"],tags:{amenity:"fast_food",brand:"Thaï Express","brand:wikidata":"Q7711610","brand:wikipedia":"en:Thaï Express",cuisine:"thai",name:"Thaï Express",takeaway:"yes"}},"amenity/fast_food|The Habit Burger Grill":{countryCodes:["us"],matchNames:["the habit burger"],tags:{alt_name:"Habit Burger Grill",amenity:"fast_food",brand:"The Habit Burger Grill","brand:wikidata":"Q18158741","brand:wikipedia":"en:The Habit Burger Grill",cuisine:"burger",name:"The Habit Burger Grill",short_name:"Habit Burger",takeaway:"yes"}},"amenity/fast_food|The Pizza Company":{countryCodes:["ae","bh","cn","jo","kh","la","mm","my","sa","th","vn"],tags:{alt_name:"Pizza Company",amenity:"fast_food",brand:"The Pizza Company","brand:wikidata":"Q2413520","brand:wikipedia":"en:The Pizza Company",cuisine:"pizza",name:"The Pizza Company",takeaway:"yes"}},"amenity/fast_food|Togo's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Togo's","brand:wikidata":"Q3530375","brand:wikipedia":"en:Togo's",cuisine:"sandwich",name:"Togo's",takeaway:"yes"}},"amenity/fast_food|Tropical Smoothie Cafe":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Tropical Smoothie Cafe","brand:wikidata":"Q7845817","brand:wikipedia":"en:Tropical Smoothie Cafe",cuisine:"juice",name:"Tropical Smoothie Cafe",takeaway:"yes"}},"amenity/fast_food|Upper Crust":{countryCodes:["de","dk","eg","es","fi","gb","ie","no","se"],tags:{amenity:"fast_food",brand:"Upper Crust","brand:wikidata":"Q7898585","brand:wikipedia":"en:Upper Crust (restaurant chain)",cuisine:"sandwich",name:"Upper Crust",takeaway:"yes"}},"amenity/fast_food|Valentine":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Valentine","brand:wikidata":"Q3553635","brand:wikipedia":"fr:Valentine (restaurant)",cuisine:"burger",name:"Valentine",takeaway:"yes"}},"amenity/fast_food|Veggie Grill":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Veggie Grill","brand:wikidata":"Q18636427","brand:wikipedia":"en:Veggie Grill",cuisine:"american","diet:vegan":"only",name:"Veggie Grill",takeaway:"yes"}},"amenity/fast_food|Villa Madina":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Villa Madina","brand:wikidata":"Q64876884",cuisine:"mediterranean",name:"Villa Madina",takeaway:"yes"}},"amenity/fast_food|Wahoo's Fish Taco":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Wahoo's Fish Taco","brand:wikidata":"Q7959827","brand:wikipedia":"en:Wahoo's Fish Taco",cuisine:"seafood",name:"Wahoo's Fish Taco",short_name:"Wahoo's",takeaway:"yes"}},"amenity/fast_food|Wayback Burgers":{tags:{amenity:"fast_food",brand:"Wayback Burgers","brand:wikidata":"Q16997570","brand:wikipedia":"en:Wayback Burgers",cuisine:"burger",name:"Wayback Burgers",takeaway:"yes"}},"amenity/fast_food|Wendy's":{tags:{amenity:"fast_food",brand:"Wendy's","brand:wikidata":"Q550258","brand:wikipedia":"en:Wendy's",cuisine:"burger",name:"Wendy's",takeaway:"yes"}},"amenity/fast_food|West Cornwall Pasty Co.":{countryCodes:["gb"],tags:{amenity:"fast_food",brand:"West Cornwall Pasty Co.","brand:wikidata":"Q7774268","brand:wikipedia":"en:The West Cornwall Pasty Company",cuisine:"pasty",name:"West Cornwall Pasty Co.",takeaway:"yes"}},"amenity/fast_food|Wetzel's Pretzels":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Wetzel's Pretzels","brand:wikidata":"Q7990205","brand:wikipedia":"en:Wetzel's Pretzels",cuisine:"pretzel",name:"Wetzel's Pretzels",takeaway:"yes"}},"amenity/fast_food|Whataburger":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Whataburger","brand:wikidata":"Q376627","brand:wikipedia":"en:Whataburger",cuisine:"burger",name:"Whataburger",takeaway:"yes"}},"amenity/fast_food|Which Wich?":{countryCodes:["ae","gb","gt","mx","om","qa","sa","us"],tags:{amenity:"fast_food",brand:"Which Wich?","brand:wikidata":"Q7993556","brand:wikipedia":"en:Which Wich?",cuisine:"sandwich",name:"Which Wich?",takeaway:"yes"}},"amenity/fast_food|White Castle":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"White Castle","brand:wikidata":"Q1244034","brand:wikipedia":"en:White Castle (restaurant)",cuisine:"burger",name:"White Castle",takeaway:"yes"}},"amenity/fast_food|Wienerschnitzel":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Wienerschnitzel","brand:wikidata":"Q324679","brand:wikipedia":"en:Wienerschnitzel",cuisine:"hot_dog",name:"Wienerschnitzel",takeaway:"yes"}},"amenity/fast_food|Wimpy":{tags:{amenity:"fast_food",brand:"Wimpy","brand:wikidata":"Q2811992","brand:wikipedia":"en:Wimpy (restaurant)",cuisine:"burger",name:"Wimpy",takeaway:"yes"}},"amenity/fast_food|WingStreet":{countryCodes:["au","ca","cy","us"],tags:{amenity:"fast_food",brand:"WingStreet","brand:wikidata":"Q946630","brand:wikipedia":"en:WingStreet",cuisine:"wings",name:"WingStreet",takeaway:"yes"}},"amenity/fast_food|Wingstop":{countryCodes:["mx","us"],tags:{amenity:"fast_food",brand:"Wingstop","brand:wikidata":"Q8025339","brand:wikipedia":"en:Wingstop",cuisine:"wings",name:"Wingstop",takeaway:"yes"}},"amenity/fast_food|Xi'an Famous Foods":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Xi'an Famous Foods","brand:wikidata":"Q8044020","brand:wikipedia":"en:Xi'an Famous Foods",cuisine:"chinese",name:"Xi'an Famous Foods",takeaway:"yes"}},"amenity/fast_food|Yellow Cab Pizza":{tags:{amenity:"fast_food",brand:"Yellow Cab Pizza","brand:wikidata":"Q8051689","brand:wikipedia":"en:Yellow Cab Pizza",cuisine:"pizza",name:"Yellow Cab Pizza",takeaway:"yes"}},"amenity/fast_food|Zaxby's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Zaxby's","brand:wikidata":"Q8067525","brand:wikipedia":"en:Zaxby's",cuisine:"chicken",name:"Zaxby's",official_name:"Zaxby's Chicken Fingers & Buffalo Wings",takeaway:"yes"}},"amenity/fast_food|Zoës Kitchen":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Zoës Kitchen","brand:wikidata":"Q8074747","brand:wikipedia":"en:Zoës Kitchen",cuisine:"mediterranean",name:"Zoës Kitchen",takeaway:"yes"}},"amenity/fast_food|immergrün":{countryCodes:["de"],matchNames:["immergün"],tags:{amenity:"fast_food",brand:"immergrün","brand:wikidata":"Q62589254",cuisine:"sandwich;salad;juice",name:"immergün",takeaway:"yes"}},"amenity/fast_food|itsu":{countryCodes:["gb","us"],tags:{amenity:"fast_food",brand:"itsu","brand:wikidata":"Q6094914","brand:wikipedia":"en:Itsu",cuisine:"asian",name:"itsu",takeaway:"yes"}},"amenity/fast_food|Γρηγόρης":{countryCodes:["gr"],tags:{amenity:"fast_food",brand:"Γρηγόρης","brand:el":"Γρηγόρης","brand:en":"Gregorys","brand:wikidata":"Q62273834",cuisine:"sandwich",name:"Γρηγόρης","name:el":"Γρηγόρης","name:en":"Gregorys",takeaway:"yes"}},"amenity/fast_food|Бургер Кинг":{countryCodes:["by","kz","ru"],tags:{amenity:"fast_food",brand:"Бургер Кинг","brand:en":"Burger King","brand:ru":"Бургер Кинг","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Бургер Кинг","name:en":"Burger King","name:ru":"Бургер Кинг",takeaway:"yes"}},"amenity/fast_food|Домино'c":{matchNames:["доминоc пицца"],tags:{amenity:"fast_food",brand:"Домино'c","brand:en":"Domino's","brand:ru":"Домино'c","brand:wikidata":"Q839466","brand:wikipedia":"ru:Domino’s Pizza",cuisine:"pizza",name:"Домино'c","name:en":"Domino's","name:ru":"Домино'c",takeaway:"yes"}},"amenity/fast_food|Крошка Картошка":{countryCodes:["ru"],tags:{amenity:"fast_food",brand:"Крошка Картошка","brand:en":"Kroshka Kartoshka","brand:ru":"Крошка Картошка","brand:wikidata":"Q4241838","brand:wikipedia":"ru:Крошка Картошка",cuisine:"potato",name:"Крошка Картошка","name:en":"Kroshka Kartoshka","name:ru":"Крошка Картошка",takeaway:"yes"}},"amenity/fast_food|Макдоналдс":{tags:{amenity:"fast_food",brand:"Макдоналдс","brand:en":"McDonald's","brand:ru":"Макдоналдс","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"Макдоналдс","name:en":"McDonald's","name:ru":"Макдоналдс",takeaway:"yes"}},"amenity/fast_food|Папа Джонс":{countryCodes:["by","ru"],tags:{amenity:"fast_food",brand:"Папа Джонс","brand:en":"Papa John's","brand:ru":"Папа Джонс","brand:wikidata":"Q2759586","brand:wikipedia":"ru:Papa John’s",cuisine:"pizza",name:"Папа Джонс","name:en":"Papa John's","name:ru":"Папа Джонс",takeaway:"yes"}},"amenity/fast_food|Пузата хата":{countryCodes:["ru"],matchTags:["amenity/cafe","amenity/restaurant"],tags:{amenity:"fast_food",brand:"Пузата Хата","brand:en":"Puzata hata","brand:ru":"Пузата Хата","brand:ua":"Пузата Хата","brand:wikidata":"Q11832009","brand:wikipedia":"uk:Пузата Хата",cuisine:"ukrainian;western",name:"Пузата Хата","name:en":"Puzata hata","name:ru":"Пузата Хата","name:ua":"Пузата Хата",takeaway:"yes"}},"amenity/fast_food|Робин Сдобин":{countryCodes:["ru"],tags:{amenity:"fast_food",brand:"Робин Сдобин","brand:en":"Robins Dobin","brand:ru":"Робин Сдобин","brand:wikidata":"Q62273880",cuisine:"burger",name:"Робин Сдобин","name:en":"Robins Dobin","name:ru":"Робин Сдобин",takeaway:"yes"}},"amenity/fast_food|Русский Аппетит":{countryCodes:["ru"],tags:{amenity:"fast_food",brand:"Русский Аппетит","brand:en":"Russkiy Appetit","brand:ru":"Русский Аппетит","brand:wikidata":"Q62086063",cuisine:"sandwich;salad;regional",name:"Русский Аппетит","name:en":"Russkiy Appetit","name:ru":"Русский Аппетит",takeaway:"yes"}},"amenity/fast_food|Стардог!s":{countryCodes:["ru"],tags:{amenity:"fast_food",brand:"Стардог!s","brand:en":"Stardog!s","brand:ru":"Стардог!s","brand:wikidata":"Q4439856","brand:wikipedia":"ru:Стардогс",cuisine:"sausage",name:"Стардог!s","name:en":"Stardog!s","name:ru":"Стардог!s",takeaway:"yes"}},"amenity/fast_food|Суши Wok":{countryCodes:["ru","ua"],matchTags:["shop/convenience"],tags:{amenity:"fast_food",brand:"Суши Wok","brand:en":"Sushi Wok","brand:ru":"Суши Wok","brand:wikidata":"Q25444754","brand:wikipedia":"uk:Суши Wok (мережа магазинів)",cuisine:"asian",name:"Суши Wok","name:en":"Sushi Wok","name:ru":"Суши Wok",takeaway:"yes"}},"amenity/fast_food|Теремок":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{amenity:"fast_food",brand:"Теремок","brand:en":"Teremok","brand:ru":"Теремок","brand:wikidata":"Q4455593","brand:wikipedia":"ru:Теремок (сеть быстрого питания)",cuisine:"crepe;russian",name:"Теремок","name:en":"Teremok","name:ru":"Теремок",takeaway:"yes"}},"amenity/fast_food|אגדיר":{countryCodes:["il"],tags:{amenity:"fast_food",brand:"אגדיר","brand:en":"Agadir","brand:he":"אגדיר","brand:wikidata":"Q64760070",cuisine:"burger",name:"אגדיר","name:en":"Agadir","name:he":"אגדיר",takeaway:"yes"}},"amenity/fast_food|מקדונלד'ס":{countryCodes:["il"],tags:{amenity:"fast_food",brand:"מקדונלד'ס","brand:en":"McDonald's","brand:he":"מקדונלד'ס","brand:wikidata":"Q12061542","brand:wikipedia":"en:McDonald's Israel",cuisine:"burger",name:"מקדונלד'ס","name:en":"McDonald's","name:he":"מקדונלד'ס",takeaway:"yes"}},"amenity/fast_food|עד העצם אקספרס":{countryCodes:["il"],tags:{amenity:"fast_food",brand:"עד העצם אקספרס","brand:en":"Ad Haetzem Express","brand:he":"עד העצם אקספרס","brand:wikidata":"Q64760165",cuisine:"burger",name:"עד העצם אקספרס","name:en":"Ad Haetzem Express","name:he":"עד העצם אקספרס",takeaway:"yes"}},"amenity/fast_food|دجاج كنتاكي":{tags:{amenity:"fast_food",brand:"دجاج كنتاكي","brand:ar":"دجاج كنتاكي","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"ar:دجاج كنتاكي",cuisine:"chicken",name:"دجاج كنتاكي","name:ar":"دجاج كنتاكي","name:en":"KFC",takeaway:"yes"}},"amenity/fast_food|ماكدونالدز":{tags:{amenity:"fast_food",brand:"ماكدونالدز","brand:ar":"ماكدونالدز","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"ar:ماكدونالدز",cuisine:"burger",name:"ماكدونالدز","name:ar":"ماكدونالدز","name:en":"McDonald's",takeaway:"yes"}},"amenity/fast_food|هرفي":{countryCodes:["ae","bh","kw","sa"],tags:{amenity:"fast_food",brand:"هرفي","brand:ar":"هرفي","brand:en":"Herfy","brand:wikidata":"Q5738371","brand:wikipedia":"ar:هرفي",cuisine:"burger",name:"هرفي","name:ar":"هرفي","name:en":"Herfy",takeaway:"yes"}},"amenity/fast_food|かっぱ寿司":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"かっぱ寿司","brand:en":"Kappazushi","brand:ja":"かっぱ寿司","brand:wikidata":"Q11263916","brand:wikipedia":"ja:かっぱ寿司",cuisine:"sushi",name:"かっぱ寿司","name:en":"Kappazushi","name:ja":"かっぱ寿司",takeaway:"yes"}},"amenity/fast_food|かつや":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"かつや","brand:en":"Katsuya","brand:ja":"かつや","brand:wikidata":"Q2855257","brand:wikipedia":"ja:かつや",cuisine:"fried_food",name:"かつや","name:en":"Katsuya","name:ja":"かつや","name:ko":"카쯔야","name:zh":"吉豚屋",takeaway:"yes"}},"amenity/fast_food|くら寿司":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"くら寿司","brand:en":"Kurazushi","brand:ja":"くら寿司","brand:wikidata":"Q6445491","brand:wikipedia":"ja:くら寿司",cuisine:"sushi",name:"くら寿司","name:en":"Kurazushi","name:ja":"くら寿司",takeaway:"yes"}},"amenity/fast_food|すき家":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"すき家","brand:en":"Sukiya","brand:ja":"すき家","brand:wikidata":"Q6137375","brand:wikipedia":"ja:すき家",cuisine:"beef_bowl",name:"すき家","name:en":"Sukiya","name:ja":"すき家",takeaway:"yes"}},"amenity/fast_food|てんや":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"てんや","brand:en":"Tenya","brand:ja":"てんや","brand:wikidata":"Q11319830","brand:wikipedia":"ja:テンコーポレーション",cuisine:"fries",name:"てんや","name:en":"Tenya","name:ja":"てんや",takeaway:"yes"}},"amenity/fast_food|なか卯":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"なか卯","brand:en":"Nakau","brand:ja":"なか卯","brand:wikidata":"Q11274132","brand:wikipedia":"ja:なか卯",cuisine:"udon",name:"なか卯","name:en":"Nakau","name:ja":"なか卯",takeaway:"yes"}},"amenity/fast_food|はま寿司":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"はま寿司","brand:en":"Hamazushi","brand:ja":"はま寿司","brand:wikidata":"Q17220385","brand:wikipedia":"ja:はま寿司",cuisine:"sushi",name:"はま寿司","name:en":"Hamazushi","name:ja":"はま寿司",takeaway:"yes"}},"amenity/fast_food|ほっかほっか亭":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ほっかほっか亭","brand:en":"Hokka Hokka Tei","brand:ja":"ほっかほっか亭","brand:wikidata":"Q5878035","brand:wikipedia":"ja:ほっかほっか亭",cuisine:"japanese",name:"ほっかほっか亭","name:en":"Hokka Hokka Tei","name:ja":"ほっかほっか亭",takeaway:"yes"}},"amenity/fast_food|ほっともっと":{countryCodes:["jp"],nomatch:["shop/deli|ほっともっと"],tags:{amenity:"fast_food",brand:"ほっともっと","brand:en":"Hotto Motto","brand:ja":"ほっともっと","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",cuisine:"japanese",name:"ほっともっと","name:en":"Hotto Motto","name:ja":"ほっともっと",takeaway:"yes"}},"amenity/fast_food|ゆで太郎":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ゆで太郎","brand:en":"Yudetaro","brand:ja":"ゆで太郎","brand:wikidata":"Q11280824","brand:wikipedia":"ja:ゆで太郎",cuisine:"noodle",name:"ゆで太郎","name:en":"Yudetaro","name:ja":"ゆで太郎",takeaway:"yes"}},"amenity/fast_food|ウェンディーズ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ウェンディーズ","brand:en":"Wendy's","brand:ja":"ウェンディーズ","brand:wikidata":"Q550258","brand:wikipedia":"en:Wendy's",cuisine:"burger",name:"ウェンディーズ","name:en":"Wendy's","name:ja":"ウェンディーズ",takeaway:"yes"}},"amenity/fast_food|オリジン弁当":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"オリジン弁当","brand:en":"Origin Bentō","brand:ja":"オリジン弁当","brand:wikidata":"Q11292632","brand:wikipedia":"ja:オリジン東秀",cuisine:"japanese",name:"オリジン弁当","name:en":"Origin Bentō","name:ja":"オリジン弁当",takeaway:"yes"}},"amenity/fast_food|ケンタッキーフライドチキン":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ケンタッキーフライドチキン","brand:en":"KFC","brand:ja":"ケンタッキーフライドチキン","brand:wikidata":"Q524757","brand:wikipedia":"ja:KFCコーポレーション",cuisine:"chicken",name:"ケンタッキーフライドチキン","name:en":"KFC","name:ja":"ケンタッキーフライドチキン",takeaway:"yes"}},"amenity/fast_food|ゴーゴーカレー":{countryCodes:["jp"],tags:{"alt_name:en":"Go Go Curry",amenity:"fast_food",brand:"ゴーゴーカレー","brand:en":"Go!Go!Curry","brand:ja":"ゴーゴーカレー","brand:wikidata":"Q11303801","brand:wikipedia":"ja:ゴーゴーカレー",cuisine:"curry",name:"ゴーゴーカレー","name:en":"Go!Go!Curry","name:ja":"ゴーゴーカレー",takeaway:"yes"}},"amenity/fast_food|サブウェイ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"サブウェイ","brand:en":"Subway","brand:ja":"サブウェイ","brand:wikidata":"Q244457","brand:wikipedia":"ja:サブウェイ",cuisine:"sandwich",name:"サブウェイ","name:en":"Subway","name:ja":"サブウェイ",takeaway:"yes"}},"amenity/fast_food|スシロー":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"スシロー","brand:en":"Sushiro","brand:ja":"スシロー","brand:wikidata":"Q11257037","brand:wikipedia":"ja:あきんどスシロー",cuisine:"sushi",name:"スシロー","name:en":"Sushiro","name:ja":"スシロー","name:zh":"壽司郎",takeaway:"yes"}},"amenity/fast_food|ドミノ":{countryCodes:["jp"],matchNames:["ドミノ・ピザ"],tags:{amenity:"fast_food",brand:"ドミノ","brand:en":"Domino's","brand:ja":"ドミノ","brand:wikidata":"Q839466","brand:wikipedia":"ja:ドミノ・ピザ",cuisine:"pizza",name:"ドミノ","name:en":"Domino's","name:ja":"ドミノ",takeaway:"yes"}},"amenity/fast_food|バーガーキング":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"バーガーキング","brand:en":"Burger King","brand:ja":"バーガーキング","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"バーガーキング","name:en":"Burger King","name:ja":"バーガーキング",takeaway:"yes"}},"amenity/fast_food|ピザハット":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ピザハット","brand:en":"Pizza Hut","brand:ja":"ピザハット","brand:wikidata":"Q191615","brand:wikipedia":"ja:ピザハット",cuisine:"pizza",name:"ピザハット","name:en":"Pizza Hut","name:ja":"ピザハット",takeaway:"yes"}},"amenity/fast_food|ピザ・カリフォルニア":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ピザ・カリフォルニア","brand:en":"Pizza California","brand:ja":"ピザ・カリフォルニア","brand:wikidata":"Q75324","brand:wikipedia":"ja:ピザ・カリフォルニア",cuisine:"pizza",name:"ピザ・カリフォルニア","name:en":"Pizza California","name:ja":"ピザ・カリフォルニア",takeaway:"yes"}},"amenity/fast_food|ピザーラ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ピザーラ","brand:en":"Pizza-La","brand:ja":"ピザーラ","brand:wikidata":"Q7199948","brand:wikipedia":"ja:ピザーラ",cuisine:"pizza",name:"ピザーラ","name:en":"Pizza-La","name:ja":"ピザーラ",takeaway:"yes"}},"amenity/fast_food|ファーストキッチン":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ファーストキッチン","brand:en":"First Kitchen","brand:ja":"ファーストキッチン","brand:wikidata":"Q5453133","brand:wikipedia":"ja:ファーストキッチン",cuisine:"pizza",name:"ファーストキッチン","name:en":"First Kitchen","name:ja":"ファーストキッチン",takeaway:"yes"}},"amenity/fast_food|フレッシュネスバーガー":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"フレッシュネスバーガー","brand:en":"Freshness Burger","brand:ja":"フレッシュネスバーガー","brand:wikidata":"Q5503087","brand:wikipedia":"ja:フレッシュネスバーガー",cuisine:"burger",name:"フレッシュネスバーガー","name:en":"Freshness Burger","name:ja":"フレッシュネスバーガー",takeaway:"yes"}},"amenity/fast_food|マクドナルド":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"マクドナルド","brand:en":"McDonald's","brand:ja":"マクドナルド","brand:wikidata":"Q38076","brand:wikipedia":"ja:マクドナルド",cuisine:"burger",name:"マクドナルド","name:en":"McDonald's","name:ja":"マクドナルド",takeaway:"yes"}},"amenity/fast_food|ミスタードーナツ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ミスタードーナツ","brand:en":"Mister Donut","brand:ja":"ミスタードーナツ","brand:wikidata":"Q1065819","brand:wikipedia":"en:Mister Donut",cuisine:"donut",name:"ミスタードーナツ","name:en":"Mister Donut","name:ja":"ミスタードーナツ",takeaway:"yes"}},"amenity/fast_food|モスバーガー":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"モスバーガー","brand:en":"MOS Burger","brand:ja":"モスバーガー","brand:wikidata":"Q1204169","brand:wikipedia":"ja:モスバーガー",cuisine:"burger",name:"モスバーガー","name:en":"MOS Burger","name:ja":"モスバーガー",takeaway:"yes"}},"amenity/fast_food|ラーメン二郎":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ラーメン二郎","brand:en":"Ramen Jiro","brand:ja":"ラーメン二郎","brand:wikidata":"Q11347765","brand:wikipedia":"ja:ラーメン二郎",cuisine:"ramen",name:"ラーメン二郎","name:en":"Ramen Jiro","name:ja":"ラーメン二郎",takeaway:"yes"}},"amenity/fast_food|ロッテリア":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ロッテリア","brand:en":"Lotteria","brand:ja":"ロッテリア","brand:wikidata":"Q249525","brand:wikipedia":"ja:ロッテリア",cuisine:"burger",name:"ロッテリア","name:en":"Lotteria","name:ja":"ロッテリア",takeaway:"yes"}},"amenity/fast_food|吉野家":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"吉野家","brand:en":"Yoshinoya","brand:ja":"吉野家","brand:wikidata":"Q776272","brand:wikipedia":"ja:吉野家",cuisine:"beef_bowl",name:"吉野家","name:en":"Yoshinoya","name:ja":"吉野家",takeaway:"yes"}},"amenity/fast_food|富士そば":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"富士そば","brand:en":"Fuji Soba","brand:ja":"富士そば","brand:wikidata":"Q11414722","brand:wikipedia":"ja:名代富士そば",cuisine:"soba",name:"富士そば","name:en":"Fuji Soba","name:ja":"富士そば",takeaway:"yes"}},"amenity/fast_food|幸楽苑":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"幸楽苑","brand:en":"Kourakuen","brand:ja":"幸楽苑","brand:wikidata":"Q11484003","brand:wikipedia":"ja:幸楽苑",cuisine:"ramen",name:"幸楽苑","name:en":"Kourakuen","name:ja":"幸楽苑",takeaway:"yes"}},"amenity/fast_food|摩斯漢堡":{countryCodes:["cn","hk","mo","sg","tw"],tags:{amenity:"fast_food",brand:"摩斯漢堡","brand:en":"MOS Burger","brand:wikidata":"Q1204169","brand:wikipedia":"zh:摩斯漢堡","brand:zh":"摩斯漢堡",cuisine:"burger",name:"摩斯漢堡","name:en":"MOS Burger","name:zh":"摩斯漢堡",takeaway:"yes"}},"amenity/fast_food|日高屋":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"日高屋","brand:en":"Hidakaya","brand:wikidata":"Q11326050","brand:wikipedia":"ja:ハイデイ日高",cuisine:"noodle",name:"日高屋","name:en":"Hidakaya",takeaway:"yes"}},"amenity/fast_food|松屋":{countryCodes:["cn","hk","jp","mo","sg","tw"],tags:{amenity:"fast_food",brand:"松屋","brand:en":"Matsuya","brand:ja":"松屋","brand:wikidata":"Q848773","brand:wikipedia":"ja:松屋フーズ",cuisine:"japanese",name:"松屋","name:en":"Matsuya","name:ja":"松屋",official_name:"松屋フーズ","official_name:en":"Matsuya Foods","official_name:ja":"松屋フーズ",takeaway:"yes"}},"amenity/fast_food|箱根そば":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"箱根そば","brand:en":"Hakone Soba","brand:ja":"箱根そば","brand:wikidata":"Q11603345","brand:wikipedia":"ja:箱根そば",cuisine:"soba",name:"箱根そば","name:en":"Hakone Soba","name:ja":"箱根そば",takeaway:"yes"}},"amenity/fast_food|築地銀だこ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"築地銀だこ","brand:en":"Gindaco","brand:ja":"築地銀だこ","brand:wikidata":"Q11603490","brand:wikipedia":"ja:築地銀だこ",cuisine:"takoyaki",name:"築地銀だこ","name:en":"Gindaco","name:ja":"築地銀だこ",takeaway:"yes"}},"amenity/fast_food|肯德基":{countryCodes:["cn","hk","mo","sg","tw"],tags:{amenity:"fast_food",brand:"肯德基","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"zh:肯德基",cuisine:"chicken",name:"肯德基","name:en":"KFC",takeaway:"yes"}},"amenity/fast_food|麥當勞":{countryCodes:["hk","mo","tw"],tags:{amenity:"fast_food",brand:"麥當勞","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麥當勞","brand:zh":"麥當勞","brand:zh-Hant":"麥當勞",cuisine:"burger",name:"麥當勞","name:en":"McDonald's","name:zh":"麥當勞","name:zh-Hant":"麥當勞",takeaway:"yes"}},"amenity/fast_food|麦当劳":{countryCodes:["cn","sg"],tags:{amenity:"fast_food",brand:"麦当劳","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麦当劳","brand:zh":"麦当劳","brand:zh-Hans":"麦当劳",cuisine:"burger",name:"麦当劳","name:en":"McDonald's","name:zh":"麦当劳","name:zh-Hans":"麦当劳",takeaway:"yes"}},"amenity/fast_food|롯데리아":{countryCodes:["kr"],tags:{amenity:"fast_food",brand:"롯데리아","brand:en":"Lotteria","brand:ko":"롯데리아","brand:wikidata":"Q249525","brand:wikipedia":"ko:롯데리아",cuisine:"burger",name:"롯데리아","name:en":"Lotteria","name:ko":"롯데리아",takeaway:"yes"}},"amenity/fast_food|맘스터치":{countryCodes:["kr"],tags:{amenity:"fast_food",brand:"맘스터치","brand:ko":"맘스터치","brand:wikidata":"Q23044856","brand:wikipedia":"en:Mom's Touch",cuisine:"burger",name:"맘스터치","name:ko":"맘스터치",takeaway:"yes"}},"amenity/fast_food|맥도날드":{countryCodes:["kr"],tags:{amenity:"fast_food",brand:"맥도날드","brand:en":"McDonald's","brand:ko":"맥도날드","brand:wikidata":"Q38076","brand:wikipedia":"ko:맥도날드",cuisine:"burger",name:"맥도날드","name:en":"McDonald's","name:ko":"맥도날드",takeaway:"yes"}},"amenity/fuel|1-2-3":{countryCodes:["dk","pl"],tags:{amenity:"fuel",brand:"1-2-3","brand:wikidata":"Q4545742","brand:wikipedia":"en:1-2-3 (fuel station)",name:"1-2-3"}},"amenity/fuel|7-Eleven":{matchNames:["7-11","seven eleven"],nomatch:["shop/convenience|7-Eleven"],tags:{amenity:"fuel",brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven"}},"amenity/fuel|76":{nomatch:["shop/convenience|76"],tags:{amenity:"fuel",brand:"76","brand:wikidata":"Q1658320","brand:wikipedia":"en:76 (gas station)",name:"76"}},"amenity/fuel|8 à Huit":{countryCodes:["fr"],nomatch:["shop/convenience|8 à Huit","shop/supermarket|8 à Huit"],tags:{amenity:"fuel",brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit"}},"amenity/fuel|ABC":{countryCodes:["fi"],nomatch:["shop/convenience|ABC"],tags:{amenity:"fuel",brand:"ABC","brand:wikidata":"Q10397504","brand:wikipedia":"fi:ABC-ketju",name:"ABC"}},"amenity/fuel|ADNOC":{countryCodes:["ae"],tags:{amenity:"fuel",brand:"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ADNOC"}},"amenity/fuel|ANCAP":{countryCodes:["uy"],tags:{amenity:"fuel",brand:"ANCAP","brand:wikidata":"Q2824522","brand:wikipedia":"es:Administración Nacional de Combustibles, Alcohol y Portland",name:"ANCAP",official_name:"Administración Nacional de Combustibles, Alcoholes y Portland"}},"amenity/fuel|ANP":{countryCodes:["ru","ua"],tags:{amenity:"fuel",brand:"ANP",name:"ANP"}},"amenity/fuel|AS 24":{countryCodes:["at","be","bg","cz","de","dk","es","fr","gb","ge","gr","hr","hu","ie","it","lt","lu","mk","nl","pl","pt","ro","rs","se","si","sk","ua"],tags:{amenity:"fuel",brand:"AS 24","brand:wikidata":"Q2819394","brand:wikipedia":"fr:AS 24 (entreprise)",hgv:"only",name:"AS 24"}},"amenity/fuel|Aegean":{countryCodes:["gr"],tags:{amenity:"fuel",brand:"Aegean","brand:wikidata":"Q28146598","brand:wikipedia":"el:Aegean Oil",name:"Aegean"}},"amenity/fuel|Afriquia":{tags:{amenity:"fuel",brand:"Afriquia","brand:wikidata":"Q2829178","brand:wikipedia":"en:Akwa Group",name:"Afriquia"}},"amenity/fuel|Agil":{countryCodes:["tn"],tags:{amenity:"fuel",brand:"Agil",name:"Agil"}},"amenity/fuel|Agip":{tags:{amenity:"fuel",brand:"Agip","brand:wikidata":"Q377915","brand:wikipedia":"en:Agip",name:"Agip"}},"amenity/fuel|Agrola":{countryCodes:["ch"],tags:{amenity:"fuel",brand:"Agrola","brand:wikidata":"Q397351","brand:wikipedia":"de:Agrola",name:"Agrola"}},"amenity/fuel|Aloha Petroleum":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Aloha Petroleum","brand:wikidata":"Q4734197","brand:wikipedia":"en:Aloha Petroleum",name:"Aloha Petroleum",official_name:"Aloha Petroleum Ltd"}},"amenity/fuel|Alon":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Alon","brand:wikidata":"Q62274304",name:"Alon"}},"amenity/fuel|Alpet":{countryCodes:["al","tr"],tags:{amenity:"fuel",brand:"Alpet","brand:wikidata":"Q62131561",name:"Alpet"}},"amenity/fuel|Amic":{tags:{amenity:"fuel",brand:"Amic",name:"Amic"}},"amenity/fuel|Amoco":{countryCodes:["us"],nomatch:["shop/convenience|Amoco"],tags:{amenity:"fuel",brand:"Amoco","brand:wikidata":"Q465952","brand:wikipedia":"en:Amoco",name:"Amoco"}},"amenity/fuel|Ampol":{countryCodes:["au"],tags:{amenity:"fuel",brand:"Ampol","brand:wikidata":"Q4748528","brand:wikipedia":"en:Ampol",name:"Ampol"}},"amenity/fuel|Api":{countryCodes:["it"],tags:{amenity:"fuel",brand:"Api","brand:wikidata":"Q466043","brand:wikipedia":"en:American Petroleum Institute",name:"Api"}},"amenity/fuel|Aral":{countryCodes:["de","lu"],matchNames:["aral tankstelle"],nomatch:["shop/convenience|Aral"],tags:{amenity:"fuel",brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral"}},"amenity/fuel|Arco":{countryCodes:["mx","us"],tags:{amenity:"fuel",brand:"Arco","brand:wikidata":"Q304769","brand:wikipedia":"en:ARCO",name:"Arco"}},"amenity/fuel|Asda":{countryCodes:["gb"],nomatch:["shop/supermarket|ASDA","shop/supermarket|Asda"],tags:{amenity:"fuel",brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda"}},"amenity/fuel|Atem":{countryCodes:["br"],matchNames:["posto atem"],tags:{amenity:"fuel",brand:"Atem","brand:wikidata":"Q62332255",name:"Atem"}},"amenity/fuel|Auchan":{nomatch:["shop/supermarket|Auchan"],tags:{amenity:"fuel",brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan"}},"amenity/fuel|Avanti":{countryCodes:["at"],tags:{amenity:"fuel",brand:"Avanti","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"Avanti"}},"amenity/fuel|Avia":{countryCodes:["at","be","bg","ch","cz","de","es","fr","hu","it","nl","pl","pt","rs","ua"],matchNames:["station avia"],tags:{amenity:"fuel",brand:"Avia","brand:wikidata":"Q300147","brand:wikipedia":"de:Avia International",name:"Avia"}},"amenity/fuel|Avin":{countryCodes:["gr"],tags:{amenity:"fuel",brand:"Avin","brand:wikidata":"Q19903165","brand:wikipedia":"en:Avin International",name:"Avin"}},"amenity/fuel|Axion":{countryCodes:["ar","py","uy"],tags:{amenity:"fuel",brand:"Axion","brand:wikidata":"Q62131749",name:"Axion"}},"amenity/fuel|Aytemiz":{countryCodes:["tr"],tags:{amenity:"fuel",brand:"Aytemiz","brand:wikidata":"Q62274352",name:"Aytemiz"}},"amenity/fuel|Azpetrol":{countryCodes:["az"],tags:{amenity:"fuel",brand:"Azpetrol","brand:wikidata":"Q4034661","brand:wikipedia":"az:Azpetrol",name:"Azpetrol"}},"amenity/fuel|BEBECO":{countryCodes:["ch"],tags:{amenity:"fuel",brand:"BEBECO","brand:wikidata":"Q62274373",name:"BEBECO"}},"amenity/fuel|BHPetrol":{countryCodes:["my"],tags:{amenity:"fuel",brand:"BHPetrol","brand:wikidata":"Q62274381",name:"BHPetrol"}},"amenity/fuel|BP":{matchNames:["bp gas station"],nomatch:["shop/convenience|BP Shop"],tags:{amenity:"fuel",brand:"BP","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP"}},"amenity/fuel|BR":{countryCodes:["br"],matchNames:["br petrobras","petrobras","posto br"],tags:{amenity:"fuel",brand:"BR","brand:wikidata":"Q4836468","brand:wikipedia":"pt:Petrobras Distribuidora",name:"BR"}},"amenity/fuel|BWOC":{countryCodes:["gb"],tags:{amenity:"fuel",brand:"BWOC","brand:wikidata":"Q4836845","brand:wikipedia":"en:BWOC",name:"BWOC",official_name:"Bob Wayne's Oil Company"}},"amenity/fuel|Baltic Petroleum":{tags:{amenity:"fuel",brand:"Baltic Petroleum",name:"Baltic Petroleum"}},"amenity/fuel|Bangchak":{countryCodes:["th"],tags:{amenity:"fuel",brand:"Bangchak","brand:wikidata":"Q6579719","brand:wikipedia":"zh:曼差石油股份",name:"Bangchak"}},"amenity/fuel|Bapco":{countryCodes:["bh"],matchNames:["bahrain petroleum"],tags:{amenity:"fuel",brand:"Bapco","brand:wikidata":"Q803640","brand:wikipedia":"en:Bahrain Petroleum Company",name:"Bapco",official_name:"Bahrain Petroleum Company"}},"amenity/fuel|Benzina":{countryCodes:["cz"],tags:{amenity:"fuel",brand:"Benzina","brand:wikidata":"Q11130894","brand:wikipedia":"cs:Benzina",name:"Benzina"}},"amenity/fuel|Beyfin":{tags:{amenity:"fuel",brand:"Beyfin",name:"Beyfin"}},"amenity/fuel|Bharat Petroleum":{countryCodes:["in"],tags:{amenity:"fuel",brand:"Bharat Petroleum","brand:wikidata":"Q854826","brand:wikipedia":"en:Bharat Petroleum",name:"Bharat Petroleum"}},"amenity/fuel|Biomax":{countryCodes:["co"],tags:{amenity:"fuel",brand:"Biomax","brand:wikidata":"Q62274413",name:"Biomax"}},"amenity/fuel|Bliska":{countryCodes:["pl"],tags:{amenity:"fuel",brand:"Bliska","brand:wikidata":"Q4016378","brand:wikipedia":"pl:Bliska",name:"Bliska"}},"amenity/fuel|CAMPSA":{countryCodes:["es"],tags:{amenity:"fuel",brand:"CAMPSA","brand:wikidata":"Q1031623","brand:wikipedia":"en:Campsa",name:"CAMPSA",official_name:"Compañía Arrendataria del Monopolio del Petróleo, S.A."}},"amenity/fuel|Caltex":{tags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q277470","brand:wikipedia":"en:Caltex",name:"Caltex"}},"amenity/fuel|Canadian Tire Gas+":{matchNames:["canadian tire","canadian tire gas bar"],nomatch:["shop/department_store|Canadian Tire"],tags:{amenity:"fuel",brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire"}},"amenity/fuel|Carrefour":{matchNames:["carrefour market"],nomatch:["shop/convenience|Carrefour Express","shop/supermarket|Carrefour"],tags:{amenity:"fuel",brand:"Carrefour","brand:wikidata":"Q217599","brand:wikipedia":"fr:Carrefour (enseigne)",name:"Carrefour"}},"amenity/fuel|Casey's General Store":{matchNames:["caseys"],nomatch:["shop/convenience|Casey's General Store"],tags:{amenity:"fuel",brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store"}},"amenity/fuel|Casino":{tags:{amenity:"fuel",brand:"Casino",name:"Casino"}},"amenity/fuel|Cenex":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Cenex","brand:wikidata":"Q5011381","brand:wikipedia":"en:CHS Inc.",name:"Cenex"}},"amenity/fuel|Cepsa":{countryCodes:["es","pt"],tags:{amenity:"fuel",brand:"Cepsa","brand:wikidata":"Q608819","brand:wikipedia":"en:Cepsa",name:"Cepsa",official_name:"Compañía Española de Petróleos, S.A.U."}},"amenity/fuel|Ceypetco":{countryCodes:["lk"],matchNames:["lanka filling station"],tags:{amenity:"fuel",brand:"Ceypetco","brand:wikidata":"Q5065795","brand:wikipedia":"en:Ceylon Petroleum Corporation",name:"Ceypetco"}},"amenity/fuel|Challenge":{countryCodes:["nz"],tags:{amenity:"fuel",brand:"Challenge","brand:wikidata":"Q5068888","brand:wikipedia":"en:Challenge (gasoline)",name:"Challenge"}},"amenity/fuel|Chevron":{nomatch:["shop/convenience|Chevron"],tags:{amenity:"fuel",brand:"Chevron","brand:wikidata":"Q319642","brand:wikipedia":"en:Chevron Corporation",name:"Chevron"}},"amenity/fuel|Circle K":{nomatch:["shop/convenience|Circle K"],tags:{amenity:"fuel",brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K"}},"amenity/fuel|Citgo":{nomatch:["shop/convenience|Citgo"],tags:{amenity:"fuel",brand:"Citgo","brand:wikidata":"Q2974437","brand:wikipedia":"en:Citgo",name:"Citgo"}},"amenity/fuel|Clark":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Clark","brand:wikidata":"Q5127157","brand:wikipedia":"en:Clark Brands",name:"Clark"}},"amenity/fuel|Classic":{countryCodes:["de"],tags:{amenity:"fuel",brand:"Classic",name:"Classic"}},"amenity/fuel|Co-op~(Canada)":{countryCodes:["ca"],matchNames:["coop"],nomatch:["shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)","shop/supermarket|The Co-operative Food~(UK)"],tags:{amenity:"fuel",brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op"}},"amenity/fuel|Coles Express":{countryCodes:["au"],nomatch:["shop/convenience|Coles Express"],tags:{amenity:"fuel",brand:"Coles Express","brand:wikidata":"Q5144653","brand:wikipedia":"en:Coles Express",name:"Coles Express"}},"amenity/fuel|Conoco":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Conoco","brand:wikidata":"Q1126518","brand:wikipedia":"en:Conoco",name:"Conoco"}},"amenity/fuel|Copec":{countryCodes:["cl"],tags:{amenity:"fuel",brand:"Copec","brand:wikidata":"Q11681461","brand:wikipedia":"en:Empresas Copec",name:"Copec"}},"amenity/fuel|Copetrol":{countryCodes:["py"],tags:{amenity:"fuel",brand:"Copetrol","brand:wikidata":"Q62274431",name:"Copetrol"}},"amenity/fuel|Cosan":{countryCodes:["br"],tags:{amenity:"fuel",brand:"Cosan","brand:wikidata":"Q2998228","brand:wikipedia":"pt:Cosan",name:"Cosan"}},"amenity/fuel|Cosmo":{countryCodes:["jp"],nomatch:["amenity/restaurant|Cosmo"],tags:{amenity:"fuel",brand:"Cosmo","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"Cosmo"}},"amenity/fuel|Costco Gasoline":{countryCodes:["au","ca","mx","us"],matchNames:["costco","costco gas","costco wholesale"],nomatch:["amenity/pharmacy|Costco Pharmacy","shop/wholesale|Costco"],tags:{amenity:"fuel",brand:"Costco Gasoline","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco Gasoline"}},"amenity/fuel|Couche-Tard":{countryCodes:["ca"],nomatch:["shop/convenience|Couche-Tard"],tags:{amenity:"fuel",brand:"Couche-Tard","brand:wikidata":"Q2836957","brand:wikipedia":"en:Alimentation Couche-Tard",name:"Couche-Tard"}},"amenity/fuel|Crevier":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Crevier","brand:wikidata":"Q61743451",name:"Crevier"}},"amenity/fuel|Crodux":{countryCodes:["hr"],tags:{amenity:"fuel",brand:"Crodux","brand:wikidata":"Q62274622",name:"Crodux"}},"amenity/fuel|Cumberland Farms":{countryCodes:["us"],nomatch:["shop/convenience|Cumberland Farms"],tags:{amenity:"fuel",brand:"Cumberland Farms","brand:wikidata":"Q1143685","brand:wikipedia":"en:Cumberland Farms",name:"Cumberland Farms"}},"amenity/fuel|Cupet":{countryCodes:["cu"],matchNames:["cuba oil union","cuba petróleo union"],tags:{amenity:"fuel",brand:"Cupet","brand:wikidata":"Q3007579","brand:wikipedia":"en:Cuba Petróleo Union",name:"Cupet"}},"amenity/fuel|Delek":{countryCodes:["il"],tags:{amenity:"fuel",brand:"Delek","brand:wikidata":"Q1184087","brand:wikipedia":"en:Delek",name:"Delek"}},"amenity/fuel|Delta~(Panama & Costa Rica)":{countryCodes:["cr","us"],tags:{amenity:"fuel",brand:"Delta","brand:wikidata":"Q62274638",name:"Delta"}},"amenity/fuel|Delta~(USA)":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Delta","brand:wikidata":"Q62274661",name:"Delta"}},"amenity/fuel|Depot Tela":{countryCodes:["kh"],tags:{amenity:"fuel",brand:"Depot Tela",name:"Depot Tela"}},"amenity/fuel|Diamond Shamrock":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Diamond Shamrock","brand:wikidata":"Q16973722","brand:wikipedia":"en:Diamond Shamrock",name:"Diamond Shamrock"}},"amenity/fuel|Domo":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Domo","brand:wikidata":"Q5291326","brand:wikipedia":"en:Domo Gasoline",name:"Domo"}},"amenity/fuel|Dyneff":{countryCodes:["es","fr"],tags:{amenity:"fuel",brand:"Dyneff","brand:wikidata":"Q16630266","brand:wikipedia":"fr:Dyneff",name:"Dyneff"}},"amenity/fuel|EKO~(Canada)":{countryCodes:["ca"],nomatch:["amenity/fuel|EKO~(Greece)","shop/supermarket|Eko"],tags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q3045934","brand:wikipedia":"fr:EKO",name:"EKO"}},"amenity/fuel|EKO~(Greece)":{countryCodes:["bg","cy","gr","me","mk","rs"],matchNames:["εκο"],nomatch:["amenity/fuel|EKO~(Canada)","shop/supermarket|Eko"],tags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q903198","brand:wikipedia":"el:Ελληνικά Πετρέλαια",name:"EKO"}},"amenity/fuel|ENEOS":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"ENEOS","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"ENEOS"}},"amenity/fuel|Elan":{countryCodes:["de","fr","nl"],tags:{amenity:"fuel",brand:"Elan","brand:wikidata":"Q57980752",name:"Elan"}},"amenity/fuel|Engen":{tags:{amenity:"fuel",brand:"Engen","brand:wikidata":"Q3054251","brand:wikipedia":"en:Engen Petroleum",name:"Engen"}},"amenity/fuel|Eni":{countryCodes:["at","ch","fr","it"],tags:{amenity:"fuel",brand:"Eni","brand:wikidata":"Q565594","brand:wikipedia":"en:Eni",name:"Eni"}},"amenity/fuel|Erg":{countryCodes:["it"],tags:{amenity:"fuel",brand:"Erg","brand:wikidata":"Q739503","brand:wikipedia":"it:ERG (azienda)",name:"Erg"}},"amenity/fuel|Esso":{matchNames:["station esso"],nomatch:["amenity/fuel|Esso Express","shop/convenience|Esso"],tags:{amenity:"fuel",brand:"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"Esso"}},"amenity/fuel|Esso Express":{nomatch:["amenity/fuel|Esso"],tags:{amenity:"fuel",brand:"Esso Express","brand:wikidata":"Q2350336","brand:wikipedia":"nl:Esso Express",name:"Esso Express"}},"amenity/fuel|Exxon":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Exxon","brand:wikidata":"Q4781944","brand:wikipedia":"en:Exxon",name:"Exxon"}},"amenity/fuel|F24":{countryCodes:["dk"],tags:{amenity:"fuel",brand:"F24","brand:wikidata":"Q12310853","brand:wikipedia":"da:F24",name:"F24"}},"amenity/fuel|Fas Gas":{countryCodes:["ca"],matchNames:["fas gas plus"],tags:{amenity:"fuel",brand:"Fas Gas","brand:wikidata":"Q61743505","brand:wikipedia":"en:Parkland Fuel",name:"Fas Gas"}},"amenity/fuel|Firezone":{countryCodes:["nl"],tags:{amenity:"fuel",brand:"Firezone","brand:wikidata":"Q14628080","brand:wikipedia":"nl:Firezone",name:"Firezone"}},"amenity/fuel|Flying J":{countryCodes:["ca","us"],matchNames:["flying j travel plaza"],tags:{amenity:"fuel",brand:"Flying J","brand:wikidata":"Q64130592",name:"Flying J"}},"amenity/fuel|Flying V":{countryCodes:["ph"],tags:{amenity:"fuel",brand:"Flying V","brand:wikidata":"Q62275048",name:"Flying V"}},"amenity/fuel|Freie Tankstelle":{countryCodes:["de"],tags:{amenity:"fuel",brand:"Freie Tankstelle","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"Freie Tankstelle"}},"amenity/fuel|GALP":{tags:{amenity:"fuel",brand:"GALP","brand:wikidata":"Q1492739","brand:wikipedia":"en:Galp Energia",name:"GALP"}},"amenity/fuel|Gas Plus":{nomatch:["shop/mobile_phone|Plus","shop/supermarket|PLUS"],tags:{amenity:"fuel",brand:"Gas Plus",name:"Gas Plus"}},"amenity/fuel|Gazel":{countryCodes:["co","mx","pe"],tags:{amenity:"fuel",brand:"Gazel","brand:wikidata":"Q62529885",name:"Gazel"}},"amenity/fuel|Gazprom":{tags:{amenity:"fuel",brand:"Gazprom","brand:wikidata":"Q102673","brand:wikipedia":"en:Gazprom",name:"Gazprom"}},"amenity/fuel|GetGo":{countryCodes:["us"],matchNames:["giant eagle","giant eagle fuel"],tags:{amenity:"fuel",brand:"GetGo","brand:wikidata":"Q5553766","brand:wikipedia":"en:GetGo",name:"GetGo"}},"amenity/fuel|Giant~(Carlisle)":{countryCodes:["us"],nomatch:["shop/bicycle|Giant","shop/supermarket|Giant~(Carlisle)","shop/supermarket|Giant~(Landover)"],tags:{amenity:"fuel",brand:"Giant","brand:wikidata":"Q5558332","brand:wikipedia":"en:Giant Food Stores",name:"Giant"}},"amenity/fuel|Global":{tags:{amenity:"fuel",brand:"Global",name:"Global"}},"amenity/fuel|Glusco":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"Glusco","brand:wikidata":"Q62284719",name:"Glusco"}},"amenity/fuel|Goil":{countryCodes:["gh"],tags:{amenity:"fuel",brand:"Goil","brand:wikidata":"Q5555383","brand:wikipedia":"en:Ghana Oil Company",name:"Goil"}},"amenity/fuel|Gulf":{tags:{amenity:"fuel",brand:"Gulf","brand:wikidata":"Q1296860","brand:wikipedia":"en:Gulf Oil",name:"Gulf"}},"amenity/fuel|Gull":{countryCodes:["au","nz"],tags:{amenity:"fuel",brand:"Gull","brand:wikidata":"Q5617739","brand:wikipedia":"en:Gull Petroleum",name:"Gull"}},"amenity/fuel|H-E-B Fuel":{countryCodes:["us"],matchNames:["h-e-b gas"],nomatch:["shop/supermarket|H-E-B"],tags:{amenity:"fuel",brand:"H-E-B Fuel","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B Fuel"}},"amenity/fuel|HEM":{countryCodes:["de"],tags:{amenity:"fuel",brand:"HEM","brand:wikidata":"Q1563517","brand:wikipedia":"de:Deutsche Tamoil",name:"HEM"}},"amenity/fuel|HP":{countryCodes:["in"],matchNames:["hp petrol pump"],tags:{amenity:"fuel",brand:"Hindustan Petroleum","brand:wikidata":"Q1619375","brand:wikipedia":"en:Hindustan Petroleum",name:"HP",official_name:"Hindustan Petroleum"}},"amenity/fuel|Harnois":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Harnois","brand:wikidata":"Q61743558",name:"Harnois"}},"amenity/fuel|Hess":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Hess","brand:wikidata":"Q1615684","brand:wikipedia":"en:Hess Corporation",name:"Hess"}},"amenity/fuel|Hofer":{countryCodes:["at","si"],nomatch:["shop/supermarket|Hofer"],tags:{amenity:"fuel",brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer"}},"amenity/fuel|Holiday":{countryCodes:["us"],nomatch:["shop/convenience|Holiday"],tags:{amenity:"fuel",brand:"Holiday","brand:wikidata":"Q5880490","brand:wikipedia":"en:Holiday Stationstores",name:"Holiday"}},"amenity/fuel|Huck's Food & Fuel":{countryCodes:["us"],nomatch:["shop/convenience|Huck's Food & Fuel"],tags:{amenity:"fuel",brand:"Huck's Food & Fuel","brand:wikidata":"Q56276328","brand:wikipedia":"en:Huck's Food & Fuel",name:"Huck's Food & Fuel",short_name:"Huck's"}},"amenity/fuel|Husky":{countryCodes:["ca"],nomatch:["amenity/restaurant|Husky House","shop/convenience|Husky"],tags:{amenity:"fuel",brand:"Husky","brand:wikidata":"Q702049","brand:wikipedia":"en:Husky Energy",name:"Husky"}},"amenity/fuel|Hy-Vee Gas":{countryCodes:["us"],nomatch:["shop/supermarket|Hy-Vee"],tags:{amenity:"fuel",brand:"Hy-Vee Gas","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",name:"Hy-Vee Gas"}},"amenity/fuel|IES":{countryCodes:["it"],tags:{amenity:"fuel",brand:"IES","brand:wikidata":"Q62287387",name:"IES"}},"amenity/fuel|IP":{tags:{amenity:"fuel",brand:"IP","brand:wikidata":"Q646807","brand:wikipedia":"en:Anonima Petroli Italiana",name:"IP"}},"amenity/fuel|Indian Oil":{tags:{amenity:"fuel",brand:"Indian Oil","brand:wikidata":"Q1289348","brand:wikipedia":"en:Indian Oil Corporation",name:"Indian Oil"}},"amenity/fuel|Indian Oil Petrol Pump":{countryCodes:["in"],tags:{amenity:"fuel",brand:"Indian Oil Petrol Pump",name:"Indian Oil Petrol Pump"}},"amenity/fuel|Ingo":{countryCodes:["dk","se"],tags:{amenity:"fuel",brand:"Ingo","brand:wikidata":"Q17048617","brand:wikipedia":"en:Ingo (brand)",name:"Ingo"}},"amenity/fuel|Intermarché":{matchNames:["intermarché super"],nomatch:["shop/supermarket|Intermarché"],tags:{amenity:"fuel",brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché"}},"amenity/fuel|Ipiranga":{countryCodes:["br"],matchNames:["posto ipiranga"],tags:{amenity:"fuel",brand:"Ipiranga","brand:wikidata":"Q2081136","brand:wikipedia":"pt:Ipiranga (empresa)",name:"Ipiranga"}},"amenity/fuel|Irving":{countryCodes:["ca","us"],nomatch:["shop/convenience|Irving"],tags:{amenity:"fuel",brand:"Irving","brand:wikidata":"Q1673286","brand:wikipedia":"en:Irving Oil",name:"Irving"}},"amenity/fuel|JA-SS":{countryCodes:["jp"],matchNames:["ja"],tags:{amenity:"fuel",brand:"JA-SS","brand:wikidata":"Q11225213","brand:wikipedia":"ja:JA-SS",name:"JA-SS"}},"amenity/fuel|Jet":{nomatch:["shop/clothes|Jet"],tags:{amenity:"fuel",brand:"Jet","brand:wikidata":"Q568940","brand:wikipedia":"en:Jet (brand)",name:"Jet"}},"amenity/fuel|Jetti":{countryCodes:["ph"],tags:{amenity:"fuel",brand:"Jetti","brand:wikidata":"Q62288720",name:"Jetti"}},"amenity/fuel|Kadoil":{tags:{amenity:"fuel",brand:"Kadoil",name:"Kadoil"}},"amenity/fuel|Kangaroo Express":{countryCodes:["us"],nomatch:["shop/convenience|Kangaroo Express"],tags:{amenity:"fuel",brand:"Kangaroo Express","brand:wikidata":"Q61747408",name:"Kangaroo Express",short_name:"Kangaroo"}},"amenity/fuel|Kastrati":{tags:{amenity:"fuel",brand:"Kastrati",name:"Kastrati"}},"amenity/fuel|Kobil":{countryCodes:["bi","et","ke","rw","tz","ug","zm"],tags:{amenity:"fuel",brand:"Kobil","brand:wikidata":"Q22906119","brand:wikipedia":"en:KenolKobil",name:"Kobil"}},"amenity/fuel|Krist":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Krist","brand:wikidata":"Q77885501",name:"Krist"}},"amenity/fuel|Kroger":{matchNames:["kroger fuel","kroger gas"],nomatch:["shop/supermarket|Kroger"],tags:{amenity:"fuel",brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger"}},"amenity/fuel|Kum & Go":{countryCodes:["us"],nomatch:["shop/convenience|Kum & Go"],tags:{amenity:"fuel",brand:"Kum & Go","brand:wikidata":"Q6443340","brand:wikipedia":"en:Kum & Go",name:"Kum & Go"}},"amenity/fuel|Kwik Fill":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Kwik Fill",name:"Kwik Fill"}},"amenity/fuel|Kwik Trip":{countryCodes:["us"],nomatch:["shop/convenience|Kwik Trip"],tags:{amenity:"fuel",brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip"}},"amenity/fuel|Liberty":{countryCodes:["au","us"],nomatch:["amenity/bank|Liberty Bank"],tags:{amenity:"fuel",brand:"Liberty",name:"Liberty"}},"amenity/fuel|Lotos":{countryCodes:["pl"],nomatch:["amenity/fuel|Lotos Optima"],tags:{amenity:"fuel",brand:"Lotos","brand:wikidata":"Q1256909","brand:wikipedia":"pl:Grupa Lotos",name:"Lotos"}},"amenity/fuel|Lotos Optima":{countryCodes:["pl"],nomatch:["amenity/fuel|Lotos"],tags:{amenity:"fuel",brand:"Lotos Optima","brand:wikidata":"Q1256909","brand:wikipedia":"pl:Grupa Lotos",name:"Lotos Optima"}},"amenity/fuel|Love's":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Love's","brand:wikidata":"Q1872496","brand:wikipedia":"en:Love's Travel Stops & Country Stores",name:"Love's"}},"amenity/fuel|Lukoil":{tags:{amenity:"fuel",brand:"Lukoil","brand:wikidata":"Q329347","brand:wikipedia":"en:Lukoil",name:"Lukoil"}},"amenity/fuel|MEROIL":{countryCodes:["es"],tags:{amenity:"fuel",brand:"MEROIL","brand:wikidata":"Q62292559",name:"MEROIL"}},"amenity/fuel|MOL":{tags:{amenity:"fuel",brand:"MOL","brand:wikidata":"Q549181","brand:wikipedia":"en:MOL (company)",name:"MOL"}},"amenity/fuel|MRS":{countryCodes:["ng"],tags:{amenity:"fuel",brand:"MRS","brand:wikidata":"Q56274919","brand:wikipedia":"en:MRS Oil Nigeria Plc",name:"MRS"}},"amenity/fuel|Mac's":{countryCodes:["ca"],nomatch:["shop/convenience|Mac's"],tags:{amenity:"fuel",brand:"Mac's","brand:wikidata":"Q4043527","brand:wikipedia":"en:Mac's Convenience Stores",name:"Mac's"}},"amenity/fuel|MacEwen":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"MacEwen","brand:wikidata":"Q61740335",name:"MacEwen"}},"amenity/fuel|Marathon":{matchNames:["marathon gas"],nomatch:["shop/convenience|Marathon"],tags:{amenity:"fuel",brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon"}},"amenity/fuel|Maverik":{countryCodes:["us"],nomatch:["shop/convenience|Maverik"],tags:{amenity:"fuel",brand:"Maverik","brand:wikidata":"Q64149010","brand:wikipedia":"en:Maverik, Inc.",name:"Maverik"}},"amenity/fuel|Maxol":{countryCodes:["gb","ie"],tags:{amenity:"fuel",brand:"Maxol","brand:wikidata":"Q3302837","brand:wikipedia":"en:Maxol",name:"Maxol"}},"amenity/fuel|Meijer":{countryCodes:["us"],nomatch:["shop/supermarket|Meijer"],tags:{amenity:"fuel",brand:"Meijer","brand:wikidata":"Q1917753","brand:wikipedia":"en:Meijer",name:"Meijer"}},"amenity/fuel|Metano":{countryCodes:["it"],tags:{amenity:"fuel",brand:"Metano","brand:wikidata":"Q62294765",name:"Metano"}},"amenity/fuel|Migrol":{countryCodes:["ch"],tags:{amenity:"fuel",brand:"Migrol","brand:wikidata":"Q1747771","brand:wikipedia":"de:Migrol",name:"Migrol"}},"amenity/fuel|Mobil":{matchNames:["mobile"],nomatch:["shop/convenience|Mobil Mart"],tags:{amenity:"fuel",brand:"Mobil","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil"}},"amenity/fuel|Mohawk":{countryCodes:["ca"],matchNames:["mohawk oil"],tags:{amenity:"fuel",brand:"Mohawk","brand:wikidata":"Q6893796","brand:wikipedia":"en:Mohawk Oil",name:"Mohawk"}},"amenity/fuel|Moil":{countryCodes:["tr"],tags:{amenity:"fuel",brand:"Moil","brand:wikidata":"Q62296914",name:"Moil"}},"amenity/fuel|Morrisons":{countryCodes:["gb"],nomatch:["shop/supermarket|Morrisons"],tags:{amenity:"fuel",brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons"}},"amenity/fuel|Moya":{countryCodes:["pl"],tags:{amenity:"fuel",brand:"Moya","brand:wikidata":"Q62297700",name:"Moya"}},"amenity/fuel|Murco":{countryCodes:["gb"],matchNames:["murco petroleum"],tags:{amenity:"fuel",brand:"Murco","brand:wikidata":"Q16998281","brand:wikipedia":"en:Murco Petroleum",name:"Murco"}},"amenity/fuel|Murphy USA":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Murphy USA","brand:wikidata":"Q19604459","brand:wikipedia":"en:Murphy USA",name:"Murphy USA"}},"amenity/fuel|N1":{countryCodes:["is"],tags:{amenity:"fuel",brand:"N1",name:"N1"}},"amenity/fuel|NP":{countryCodes:["tt"],tags:{amenity:"fuel",brand:"NP","brand:wikidata":"Q7842382","brand:wikipedia":"en:Trinidad & Tobago National Petroleum Marketing Company Limited",name:"NP"}},"amenity/fuel|Neste":{tags:{amenity:"fuel",brand:"Neste","brand:wikidata":"Q616376","brand:wikipedia":"en:Neste",name:"Neste"}},"amenity/fuel|OIL!":{tags:{amenity:"fuel",brand:"OIL!","brand:wikidata":"Q2007561","brand:wikipedia":"de:OIL! Tankstellen",name:"OIL!"}},"amenity/fuel|OK":{countryCodes:["dk"],tags:{amenity:"fuel",brand:"OK","brand:wikidata":"Q12329785","brand:wikipedia":"da:OK a.m.b.a.",name:"OK"}},"amenity/fuel|OKQ8":{countryCodes:["se"],tags:{amenity:"fuel",brand:"OKQ8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"OKQ8"}},"amenity/fuel|OMV":{tags:{amenity:"fuel",brand:"OMV","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"OMV"}},"amenity/fuel|Octa+":{tags:{amenity:"fuel",brand:"Octa+",name:"Octa+"}},"amenity/fuel|Oilibya":{matchNames:["oilibia","oilibiya","oillibia","oilliby","oillibya","oillybia","oilybia","olibya","olybia"],tags:{amenity:"fuel",brand:"Oilibya","brand:wikidata":"Q7081491","brand:wikipedia":"en:Oilibya",name:"Oilibya","name:ar":"أويليبيا"}},"amenity/fuel|Olerex":{countryCodes:["ee"],tags:{amenity:"fuel",brand:"Olerex","brand:wikidata":"Q16931205","brand:wikipedia":"et:AS Olerex",name:"Olerex"}},"amenity/fuel|Opet":{countryCodes:["tr"],tags:{amenity:"fuel",brand:"Opet","brand:wikidata":"Q7072824","brand:wikipedia":"en:Opet",name:"Opet"}},"amenity/fuel|Orlen":{countryCodes:["lt","pl"],nomatch:["shop/convenience|Orlen"],tags:{amenity:"fuel",brand:"Orlen","brand:wikidata":"Q971649","brand:wikipedia":"en:PKN Orlen",name:"Orlen"}},"amenity/fuel|Oxxo":{nomatch:["shop/convenience|Oxxo"],tags:{amenity:"fuel",brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo"}},"amenity/fuel|PSO":{countryCodes:["pk"],matchNames:["pso petrol pump"],tags:{amenity:"fuel",brand:"PSO","brand:wikidata":"Q2741455","brand:wikipedia":"en:Pakistan State Oil",name:"PSO"}},"amenity/fuel|PT":{countryCodes:["th"],tags:{amenity:"fuel",brand:"PT","brand:wikidata":"Q62298612",name:"PT"}},"amenity/fuel|PTT":{nomatch:["amenity/post_office|PTT"],tags:{amenity:"fuel",brand:"PTT","brand:wikidata":"Q1810389","brand:wikipedia":"en:PTT Public Company Limited",name:"PTT"}},"amenity/fuel|PV Oil":{tags:{amenity:"fuel",brand:"PV Oil","brand:wikidata":"Q2089536","brand:wikipedia":"en:Petrovietnam",name:"PV Oil"}},"amenity/fuel|Pacific Pride":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Pacific Pride","brand:wikidata":"Q7122637","brand:wikipedia":"en:Pacific Pride",name:"Pacific Pride"}},"amenity/fuel|Pecsa":{countryCodes:["pe"],tags:{amenity:"fuel",brand:"Pecsa","brand:wikidata":"Q62299262",name:"Pecsa"}},"amenity/fuel|Pemex":{countryCodes:["mx"],tags:{amenity:"fuel",brand:"Pemex","brand:wikidata":"Q871308","brand:wikipedia":"en:Pemex",name:"Pemex"}},"amenity/fuel|Pertamina":{countryCodes:["id"],tags:{amenity:"fuel",brand:"Pertamina","brand:wikidata":"Q1641044","brand:wikipedia":"en:Pertamina",name:"Pertamina"}},"amenity/fuel|Petro":{countryCodes:["ca","us"],matchNames:["petro stopping center"],tags:{alt_name:"Petro Stopping Centers",amenity:"fuel",brand:"Petro","brand:wikidata":"Q64051305",name:"Petro"}},"amenity/fuel|Petro-Canada":{countryCodes:["ca"],nomatch:["shop/convenience|Petro-Canada"],tags:{amenity:"fuel",brand:"Petro-Canada","brand:wikidata":"Q1208279","brand:wikipedia":"en:Petro-Canada",name:"Petro-Canada"}},"amenity/fuel|Petro-T":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Petro-T","brand:wikidata":"Q61743540",name:"Petro-T"}},"amenity/fuel|PetroPerú":{countryCodes:["pe"],tags:{amenity:"fuel",brand:"PetroPerú","brand:wikidata":"Q2506390","brand:wikipedia":"es:Petroperú",name:"PetroPerú"}},"amenity/fuel|Petrochina":{countryCodes:["cn"],tags:{amenity:"fuel",brand:"Petrochina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina",name:"Petrochina"}},"amenity/fuel|Petroecuador":{countryCodes:["ec"],tags:{amenity:"fuel",brand:"Petroecuador","brand:wikidata":"Q1812822","brand:wikipedia":"en:Petroecuador",name:"Petroecuador"}},"amenity/fuel|Petrol Ofisi":{tags:{amenity:"fuel",brand:"Petrol Ofisi","brand:wikidata":"Q1278087","brand:wikipedia":"en:Petrol Ofisi",name:"Petrol Ofisi"}},"amenity/fuel|Petrolimex":{tags:{amenity:"fuel",brand:"Petrolimex","brand:wikidata":"Q10831598","brand:wikipedia":"en:Petrolimex",name:"Petrolimex"}},"amenity/fuel|Petrolina":{countryCodes:["cy"],tags:{amenity:"fuel",brand:"Petrolina","brand:wikidata":"Q17013948","brand:wikipedia":"en:Petrolina (company)",name:"Petrolina"}},"amenity/fuel|Petrom":{tags:{amenity:"fuel",brand:"Petrom","brand:wikidata":"Q1755034","brand:wikipedia":"en:Petrom",name:"Petrom"}},"amenity/fuel|Petron":{countryCodes:["my","ph"],tags:{amenity:"fuel",brand:"Petron","brand:wikidata":"Q7179011","brand:wikipedia":"en:Petron Corporation",name:"Petron"}},"amenity/fuel|Petronas":{tags:{amenity:"fuel",brand:"Petronas","brand:wikidata":"Q221692","brand:wikipedia":"en:Petronas",name:"Petronas"}},"amenity/fuel|Petronor":{countryCodes:["es"],tags:{amenity:"fuel",brand:"Petronor","brand:wikidata":"Q1726547","brand:wikipedia":"es:Petronor",name:"Petronor"}},"amenity/fuel|Phillips 66":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Phillips 66","brand:wikidata":"Q1656230","brand:wikipedia":"en:Phillips 66",name:"Phillips 66"}},"amenity/fuel|Phoenix":{countryCodes:["ph"],tags:{amenity:"fuel",brand:"Phoenix","brand:wikidata":"Q7186949","brand:wikipedia":"en:Phoenix Petroleum",name:"Phoenix"}},"amenity/fuel|Pilot":{countryCodes:["ca","us"],matchNames:["pilot travel centers"],tags:{amenity:"fuel",brand:"Pilot","brand:wikidata":"Q64128179",name:"Pilot"}},"amenity/fuel|Pioneer":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Pioneer","brand:wikidata":"Q7196684","brand:wikipedia":"en:Pioneer Energy",name:"Pioneer"}},"amenity/fuel|Power":{countryCodes:["be"],nomatch:["shop/electronics|Power"],tags:{amenity:"fuel",brand:"Power",name:"Power"}},"amenity/fuel|Preem":{countryCodes:["pl","se"],tags:{amenity:"fuel",brand:"Preem","brand:wikidata":"Q598835","brand:wikipedia":"en:Preem",name:"Preem"}},"amenity/fuel|Primax~(Ecuador)":{countryCodes:["ec"],tags:{amenity:"fuel",brand:"Primax","brand:wikidata":"Q62332857",name:"Primax"}},"amenity/fuel|Primax~(Peru)":{countryCodes:["pe"],tags:{amenity:"fuel",brand:"Primax","brand:wikidata":"Q62332638",name:"Primax"}},"amenity/fuel|Prio":{countryCodes:["pt"],tags:{amenity:"fuel",brand:"Prio","brand:wikidata":"Q62530421",name:"Prio"}},"amenity/fuel|Puma":{nomatch:["shop/clothes|Puma"],tags:{amenity:"fuel",brand:"Puma","brand:wikidata":"Q7259769","brand:wikipedia":"en:Puma Energy",name:"Puma"}},"amenity/fuel|Q1":{countryCodes:["de"],tags:{amenity:"fuel",brand:"Q1","brand:wikidata":"Q62086498",name:"Q1"}},"amenity/fuel|Q8":{countryCodes:["be","dk","es","it","lu","nl","pt"],tags:{amenity:"fuel",brand:"Q8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"Q8"}},"amenity/fuel|Q8 Easy":{countryCodes:["be","it"],tags:{amenity:"fuel",brand:"Q8 Easy","brand:wikidata":"Q1806948","brand:wikipedia":"nl:Q8 Easy",name:"Q8 Easy"}},"amenity/fuel|Qstar":{countryCodes:["se"],tags:{amenity:"fuel",brand:"Qstar","brand:wikidata":"Q10647961","brand:wikipedia":"sv:Qstar",name:"Qstar"}},"amenity/fuel|QuickChek":{countryCodes:["us"],nomatch:["shop/convenience|QuickChek"],tags:{amenity:"fuel",brand:"QuickChek","brand:wikidata":"Q7271689","brand:wikipedia":"en:QuickChek",name:"QuickChek"}},"amenity/fuel|QuikTrip":{nomatch:["shop/convenience|QuikTrip"],tags:{amenity:"fuel",brand:"QuikTrip","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QuikTrip",short_name:"QT"}},"amenity/fuel|RaceTrac":{nomatch:["shop/convenience|RaceTrac"],tags:{amenity:"fuel",brand:"RaceTrac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"RaceTrac"}},"amenity/fuel|RaceWay":{countryCodes:["us"],nomatch:["shop/convenience|RaceWay"],tags:{amenity:"fuel",brand:"RaceWay","brand:wikidata":"Q73039084",name:"RaceWay"}},"amenity/fuel|Raiffeisen":{countryCodes:["de"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль"],tags:{amenity:"fuel",brand:"Raiffeisen",name:"Raiffeisen"}},"amenity/fuel|Repsol":{tags:{amenity:"fuel",brand:"Repsol","brand:wikidata":"Q174747","brand:wikipedia":"es:Repsol",name:"Repsol"}},"amenity/fuel|Revoil":{countryCodes:["gr"],tags:{amenity:"fuel",brand:"Revoil","brand:wikidata":"Q62530755",name:"Revoil"}},"amenity/fuel|Rompetrol":{tags:{amenity:"fuel",brand:"Rompetrol","brand:wikidata":"Q1788862","brand:wikipedia":"en:Rompetrol",name:"Rompetrol"}},"amenity/fuel|Royal Farms":{countryCodes:["us"],nomatch:["shop/convenience|Royal Farms"],tags:{amenity:"fuel",brand:"Royal Farms","brand:wikidata":"Q7374169","brand:wikipedia":"en:Royal Farms",name:"Royal Farms"}},"amenity/fuel|Rubis":{tags:{amenity:"fuel",brand:"Rubis","brand:wikidata":"Q3446514","brand:wikipedia":"en:Rubis (company)",name:"Rubis"}},"amenity/fuel|Rutter's":{countryCodes:["us"],nomatch:["shop/convenience|Rutter's"],tags:{amenity:"fuel",brand:"Rutter's","brand:wikidata":"Q7383544","brand:wikipedia":"en:Rutter's",name:"Rutter's"}},"amenity/fuel|SK주유소":{countryCodes:["kr"],tags:{amenity:"fuel",brand:"SK주유소","brand:ko":"SK주유소",name:"SK주유소","name:ko":"SK주유소"}},"amenity/fuel|SP":{tags:{amenity:"fuel",brand:"SP",name:"SP"}},"amenity/fuel|Safeway":{nomatch:["amenity/pharmacy|Safeway","shop/supermarket|Safeway"],tags:{amenity:"fuel",brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway"}},"amenity/fuel|Sainsbury's":{countryCodes:["gb"],nomatch:["shop/supermarket|Sainsbury's"],tags:{amenity:"fuel",brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's"}},"amenity/fuel|Sam's Club":{matchNames:["sams club fuel center","sams club gas"],nomatch:["shop/wholesale|Sam's Club"],tags:{amenity:"fuel",brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club"}},"amenity/fuel|Sasol":{countryCodes:["za"],tags:{amenity:"fuel",brand:"Sasol","brand:wikidata":"Q905998","brand:wikipedia":"en:Sasol",name:"Sasol"}},"amenity/fuel|Sea Oil":{countryCodes:["ph"],tags:{amenity:"fuel",brand:"Sea Oil","brand:wikidata":"Q7389549","brand:wikipedia":"en:Seaoil Philippines",name:"Sea Oil"}},"amenity/fuel|Sheetz":{nomatch:["shop/convenience|Sheetz"],tags:{amenity:"fuel",brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz"}},"amenity/fuel|Shell":{matchNames:["posto shell","shell gas station","shell petrol station","shell station","station shell"],nomatch:["amenity/fuel|Shell Express","shop/convenience|Shell Select"],tags:{amenity:"fuel",brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell"}},"amenity/fuel|Shell Express":{nomatch:["amenity/fuel|Shell","shop/convenience|Shell Select"],tags:{amenity:"fuel",brand:"Shell Express","brand:wikidata":"Q2289188","brand:wikipedia":"nl:Shell Express",name:"Shell Express"}},"amenity/fuel|Sinclair":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Sinclair","brand:wikidata":"Q1290900","brand:wikipedia":"en:Sinclair Oil Corporation",name:"Sinclair"}},"amenity/fuel|Slovnaft":{countryCodes:["cz","pl","sk"],tags:{amenity:"fuel",brand:"Slovnaft","brand:wikidata":"Q1587563","brand:wikipedia":"en:Slovnaft",name:"Slovnaft"}},"amenity/fuel|Socar":{tags:{amenity:"fuel",brand:"Socar","brand:wikidata":"Q1622293","brand:wikipedia":"en:SOCAR",name:"Socar"}},"amenity/fuel|Sokimex":{countryCodes:["kh"],tags:{amenity:"fuel",brand:"Sokimex","brand:wikidata":"Q1149575","brand:wikipedia":"en:Sokimex",name:"Sokimex"}},"amenity/fuel|Sonangol":{tags:{amenity:"fuel",brand:"Sonangol",name:"Sonangol"}},"amenity/fuel|Sonic":{countryCodes:["ca"],nomatch:["amenity/fast_food|Sonic"],tags:{amenity:"fuel",brand:"Sonic",name:"Sonic"}},"amenity/fuel|Speedway":{nomatch:["shop/convenience|Speedway"],tags:{amenity:"fuel",brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway"}},"amenity/fuel|Sprint":{countryCodes:["de"],nomatch:["shop/mobile_phone|Sprint"],tags:{amenity:"fuel",brand:"Sprint","brand:wikidata":"Q57588452",name:"Sprint"}},"amenity/fuel|St1":{countryCodes:["fi","se"],tags:{amenity:"fuel",brand:"St1","brand:wikidata":"Q7592214","brand:wikipedia":"en:St1",name:"St1"}},"amenity/fuel|Star":{countryCodes:["de"],tags:{amenity:"fuel",brand:"Star","brand:wikidata":"Q2031095","brand:wikipedia":"de:Orlen Deutschland",name:"Star"}},"amenity/fuel|Star Oil":{tags:{amenity:"fuel",brand:"Star Oil",name:"Star Oil"}},"amenity/fuel|Station Service E. Leclerc":{matchNames:["e. leclerc"],tags:{amenity:"fuel",brand:"E.Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"Station Service E. Leclerc"}},"amenity/fuel|Statoil":{countryCodes:["dk","ee","ie","pl","ru","se"],tags:{amenity:"fuel",brand:"Statoil","brand:wikidata":"Q1776022","brand:wikipedia":"en:Equinor",name:"Statoil"}},"amenity/fuel|Stewart's":{countryCodes:["us"],nomatch:["shop/convenience|Stewart's"],tags:{amenity:"fuel",brand:"Stewart's","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's"}},"amenity/fuel|Sunoco":{nomatch:["shop/convenience|Sunoco"],tags:{amenity:"fuel",brand:"Sunoco","brand:wikidata":"Q1423218","brand:wikipedia":"en:Sunoco",name:"Sunoco"}},"amenity/fuel|Super U":{countryCodes:["fr"],nomatch:["shop/convenience|Utile","shop/supermarket|Hyper U","shop/supermarket|Super U","shop/supermarket|U Express"],tags:{amenity:"fuel",brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U"}},"amenity/fuel|Susco":{countryCodes:["th"],tags:{amenity:"fuel",brand:"Susco",name:"Susco"}},"amenity/fuel|TA":{countryCodes:["us"],tags:{amenity:"fuel",brand:"TA","brand:wikidata":"Q7835892","brand:wikipedia":"en:TravelCenters of America",name:"TA"}},"amenity/fuel|Tamoil":{countryCodes:["ch","de","es","fr","it","nl"],tags:{amenity:"fuel",brand:"Tamoil","brand:wikidata":"Q706793","brand:wikipedia":"en:Tamoil",name:"Tamoil"}},"amenity/fuel|Tango":{countryCodes:["nl"],tags:{amenity:"fuel",brand:"Tango","brand:wikidata":"Q2423920","brand:wikipedia":"nl:Tango CV",name:"Tango"}},"amenity/fuel|Tanka":{countryCodes:["se"],tags:{amenity:"fuel",brand:"Tanka","brand:wikidata":"Q10690640","brand:wikipedia":"sv:Tanka (bensinstationskedja)",name:"Tanka"}},"amenity/fuel|Teboil":{countryCodes:["fi"],tags:{amenity:"fuel",brand:"Teboil","brand:wikidata":"Q7692079","brand:wikipedia":"en:Teboil",name:"Teboil"}},"amenity/fuel|Tela":{countryCodes:["kh"],tags:{amenity:"fuel",brand:"Tela","brand:wikidata":"Q62534875",name:"Tela"}},"amenity/fuel|Tempo":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Tempo","brand:wikidata":"Q62535175",name:"Tempo"}},"amenity/fuel|Terpel":{tags:{amenity:"fuel",brand:"Terpel","brand:wikidata":"Q7703003","brand:wikipedia":"en:Terpel",name:"Terpel"}},"amenity/fuel|Terrible's":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Terrible's","brand:wikidata":"Q7703648","brand:wikipedia":"en:Terrible Herbst",name:"Terrible's"}},"amenity/fuel|Tesco":{nomatch:["shop/convenience|Tesco","shop/convenience|Tesco Express","shop/convenience|Tesco Lotus Express","shop/supermarket|Tesco","shop/supermarket|Tesco Extra","shop/supermarket|Tesco Lotus","shop/supermarket|Tesco Metro"],tags:{amenity:"fuel",brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco"}},"amenity/fuel|Tesoro":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Tesoro",name:"Tesoro"}},"amenity/fuel|Texaco":{nomatch:["shop/convenience|Texaco"],tags:{amenity:"fuel",brand:"Texaco","brand:wikidata":"Q775060","brand:wikipedia":"en:Texaco",name:"Texaco"}},"amenity/fuel|Thorntons":{countryCodes:["us"],nomatch:["shop/confectionery|Thorntons","shop/convenience|Thorntons"],tags:{amenity:"fuel",brand:"Thorntons","brand:wikidata":"Q7796584","brand:wikipedia":"en:Thorntons LLC",name:"Thorntons"}},"amenity/fuel|Tinq":{countryCodes:["nl"],tags:{amenity:"fuel",brand:"Tinq","brand:wikidata":"Q2132028","brand:wikipedia":"nl:Tinq",name:"Tinq"}},"amenity/fuel|Top":{countryCodes:["ie"],matchNames:["top oil"],nomatch:["shop/clothes|Topshop"],tags:{amenity:"fuel",brand:"Top","brand:wikidata":"Q7693933","brand:wikipedia":"en:Tedcastles Oil Products",name:"Top",official_name:"Tedcastles Oil Products"}},"amenity/fuel|Topaz":{countryCodes:["ie"],tags:{amenity:"fuel",brand:"Topaz","brand:wikidata":"Q7824764","brand:wikipedia":"en:Topaz Energy",name:"Topaz"}},"amenity/fuel|Total":{matchNames:["station total"],nomatch:["shop/convenience|Total"],tags:{amenity:"fuel",brand:"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total"}},"amenity/fuel|Total Access":{countryCodes:["fr"],tags:{amenity:"fuel",brand:"Total Access","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total Access"}},"amenity/fuel|TotalErg":{countryCodes:["it"],tags:{amenity:"fuel",brand:"TotalErg","brand:wikidata":"Q3995933","brand:wikipedia":"it:TotalErg",name:"TotalErg"}},"amenity/fuel|Turkey Hill":{countryCodes:["us"],nomatch:["shop/convenience|Turkey Hill"],tags:{amenity:"fuel",brand:"Turkey Hill","brand:wikidata":"Q42376970","brand:wikipedia":"en:Turkey Hill Minit Markets",name:"Turkey Hill"}},"amenity/fuel|Turmöl":{countryCodes:["at"],tags:{amenity:"fuel",brand:"Turmöl","brand:wikidata":"Q1473279","brand:wikipedia":"de:Turmöl",name:"Turmöl"}},"amenity/fuel|UDF Fuel":{countryCodes:["us"],matchNames:["udf fuels","united dairy farmers"],nomatch:["shop/convenience|United Dairy Farmers"],tags:{amenity:"fuel",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"UDF Fuel",short_name:"UDF"}},"amenity/fuel|USA Gasoline":{countryCodes:["us"],tags:{amenity:"fuel",brand:"USA Gasoline","brand:wikidata":"Q17126373","brand:wikipedia":"en:USA Gasoline",name:"USA Gasoline"}},"amenity/fuel|Ultramar":{nomatch:["shop/convenience|Ultramar"],tags:{amenity:"fuel",brand:"Ultramar","brand:wikidata":"Q3548078","brand:wikipedia":"en:Ultramar",name:"Ultramar"}},"amenity/fuel|United":{countryCodes:["au"],matchNames:["united petroleum"],nomatch:["amenity/bank|United Bank~(Connecticut)","amenity/bank|United Bank~(West Virginia)","shop/convenience|United"],tags:{amenity:"fuel",brand:"United","brand:wikidata":"Q28224393","brand:wikipedia":"en:United Petroleum",name:"United"}},"amenity/fuel|Uno":{countryCodes:["bz","cr","gt","hn","ni","sv"],tags:{amenity:"fuel",brand:"Uno","brand:wikidata":"Q62535574",name:"Uno"}},"amenity/fuel|Uno-X":{countryCodes:["dk"],tags:{amenity:"fuel",brand:"Uno-X","brand:wikidata":"Q3362746","brand:wikipedia":"en:Uno-X",name:"Uno-X"}},"amenity/fuel|Valero":{nomatch:["shop/convenience|Valero"],tags:{amenity:"fuel",brand:"Valero","brand:wikidata":"Q1283291","brand:wikipedia":"en:Valero Energy",name:"Valero"}},"amenity/fuel|Viada":{countryCodes:["lt","lv"],tags:{amenity:"fuel",brand:"Viada","brand:wikidata":"Q12663942","brand:wikipedia":"en:Lukoil Baltija",name:"Viada"}},"amenity/fuel|Vito":{countryCodes:["fr"],tags:{amenity:"fuel",brand:"Vito","brand:wikidata":"Q62536473",name:"Vito"}},"amenity/fuel|WOG":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"WOG","brand:wikidata":"Q12072939","brand:wikipedia":"en:WOG (gas stations)",name:"WOG"}},"amenity/fuel|Walmart":{nomatch:["shop/department_store|Walmart","shop/supermarket|Walmart Neighborhood Market","shop/supermarket|Walmart Supercenter"],tags:{amenity:"fuel",brand:"Walmart","brand:wikidata":"Q62606411","brand:wikipedia":"en:Walmart",name:"Walmart"}},"amenity/fuel|Wawa":{nomatch:["shop/convenience|Wawa"],tags:{amenity:"fuel",brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa"}},"amenity/fuel|Westfalen":{countryCodes:["de"],tags:{amenity:"fuel",brand:"Westfalen","brand:wikidata":"Q1411209","brand:wikipedia":"en:Westfalen AG",name:"Westfalen"}},"amenity/fuel|Woolworths Petrol":{countryCodes:["au"],nomatch:["shop/convenience|Woolworths Petrol"],tags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol"}},"amenity/fuel|XTR":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"XTR","brand:wikidata":"Q62537250",name:"XTR"}},"amenity/fuel|YPF":{tags:{amenity:"fuel",brand:"YPF","brand:wikidata":"Q2006989","brand:wikipedia":"en:YPF",name:"YPF"}},"amenity/fuel|YX Energi":{countryCodes:["dk","no"],tags:{amenity:"fuel",brand:"YX Energi","brand:wikidata":"Q4580519","brand:wikipedia":"en:YX Energi",name:"YX Energi"}},"amenity/fuel|Z":{countryCodes:["nz"],nomatch:["shop/clothes|Z"],tags:{amenity:"fuel",brand:"Z","brand:wikidata":"Q8063337","brand:wikipedia":"en:Z Energy",name:"Z"}},"amenity/fuel|bft":{countryCodes:["de"],tags:{amenity:"fuel",brand:"bft","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"bft"}},"amenity/fuel|bi1":{countryCodes:["fr"],nomatch:["shop/supermarket|bi1"],tags:{amenity:"fuel",brand:"bi1",name:"bi1"}},"amenity/fuel|din-X":{countryCodes:["se"],tags:{amenity:"fuel",brand:"din-X","brand:wikidata":"Q10472858","brand:wikipedia":"sv:Din-X",name:"din-X"}},"amenity/fuel|uSmile 昆仑好客":{countryCodes:["cn"],matchNames:["usmile","usmile 便利店","昆仑好","昆仑好客"],nomatch:["shop/convenience|uSmile 昆仑好客"],tags:{amenity:"fuel",brand:"uSmile 昆仑好客","brand:en":"uSmile","brand:wikidata":"Q66480830","brand:zh":"昆仑好客",name:"uSmile 昆仑好","name:en":"uSmile","name:zh":"昆仑好客"}},"amenity/fuel|Авіас":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"Авіас","brand:wikidata":"Q12122687","brand:wikipedia":"uk:Мережа АЗС Приват",name:"Авіас"}},"amenity/fuel|БРСМ-Нафта":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"БРСМ-Нафта","brand:wikidata":"Q56356523","brand:wikipedia":"uk:БРСМ-Нафта",name:"БРСМ-Нафта"}},"amenity/fuel|Башнефть":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"Башнефть","brand:en":"Bashneft","brand:wikidata":"Q809985","brand:wikipedia":"en:Bashneft",name:"Башнефть","name:en":"Bashneft"}},"amenity/fuel|Белоруснефть":{countryCodes:["by"],tags:{amenity:"fuel",brand:"Белоруснефть","brand:wikidata":"Q4082693","brand:wikipedia":"ru:Белоруснефть",name:"Белоруснефть"}},"amenity/fuel|Газпромнефть":{countryCodes:["by","kg","kz","ru","tj"],matchNames:["газпром"],tags:{amenity:"fuel",brand:"Газпромнефть","brand:wikidata":"Q1461799","brand:wikipedia":"en:Gazprom Neft",name:"Газпромнефть"}},"amenity/fuel|Гелиос":{countryCodes:["kz"],matchNames:["helios"],tags:{amenity:"fuel",brand:"Гелиос","brand:en":"Helios","brand:wikidata":"Q62286471",name:"Гелиос","name:en":"Helios"}},"amenity/fuel|Движение":{tags:{amenity:"fuel",brand:"Движение",name:"Движение"}},"amenity/fuel|ЕКА":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"ЕКА","brand:wikidata":"Q62543029",name:"ЕКА"}},"amenity/fuel|КЛО":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"КЛО","brand:en":"Klo","brand:wikidata":"Q60966526","brand:wikipedia":"ru:КЛО (сеть АЗС)",name:"КЛО","name:en":"Klo"}},"amenity/fuel|КазМунайГаз":{countryCodes:["kz"],nomatch:["shop/convenience|КазМунайГаз"],tags:{amenity:"fuel",brand:"КазМунайГаз","brand:wikidata":"Q1417227","brand:wikipedia":"en:KazMunayGas",name:"КазМунайГаз"}},"amenity/fuel|Лукойл":{matchNames:["лукоил"],nomatch:["shop/convenience|Лукойл"],tags:{amenity:"fuel",brand:"Лукойл","brand:wikidata":"Q329347","brand:wikipedia":"ru:Лукойл",name:"Лукойл"}},"amenity/fuel|Макпетрол":{countryCodes:["mk"],tags:{amenity:"fuel",brand:"Макпетрол","brand:wikidata":"Q1886438","brand:wikipedia":"en:Makpetrol",name:"Макпетрол"}},"amenity/fuel|НК Альянс":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"НК Альянс","brand:en":"Alliance Oil","brand:ru":"НК Альянс","brand:wikidata":"Q4063700","brand:wikipedia":"ru:Альянс (компания)",name:"НК Альянс","name:en":"Alliance Oil","name:ru":"НК Альянс"}},"amenity/fuel|Нефтьмагистраль":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"Нефтьмагистраль","brand:en":"Neftmagistral","brand:wikidata":"Q62544323",name:"Нефтьмагистраль","name:en":"Neftmagistral"}},"amenity/fuel|ОККО":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"ОККО","brand:en":"OKKO","brand:wikidata":"Q7072617","brand:wikipedia":"en:OKKO",name:"ОККО","name:en":"OKKO"}},"amenity/fuel|ОМВ":{countryCodes:["bg","rs"],tags:{amenity:"fuel",brand:"ОМВ","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"ОМВ"}},"amenity/fuel|ПТК":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"ПТК","brand:en":"The Petersburg Fuel Company","brand:ru":"ПТК","brand:wikidata":"Q4360193","brand:wikipedia":"ru:Петербургская топливная компания",name:"ПТК","name:en":"The Petersburg Fuel Company","name:ru":"ПТК"}},"amenity/fuel|Петрол":{countryCodes:["bg"],tags:{amenity:"fuel",brand:"Петрол","brand:en":"Petrol AD","brand:wikidata":"Q24315","brand:wikipedia":"en:Petrol AD",name:"Петрол","name:en":"Petrol AD"}},"amenity/fuel|Роснефть":{tags:{amenity:"fuel",brand:"Роснефть","brand:en":"Rosneft","brand:ru":"Роснефть","brand:wikidata":"Q1141123","brand:wikipedia":"ru:Роснефть",name:"Роснефть","name:en":"Rosneft","name:ru":"Роснефть"}},"amenity/fuel|Сургутнефтегаз":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"Сургутнефтегаз","brand:en":"Surgutneftegas","brand:ru":"Сургутнефтегаз","brand:wikidata":"Q680776","brand:wikipedia":"en:Surgutneftegas",name:"Сургутнефтегаз","name:en":"Surgutneftegas","name:ru":"Сургутнефтегаз"}},"amenity/fuel|ТНК":{countryCodes:["ru","ua"],tags:{amenity:"fuel",brand:"ТНК","brand:wikidata":"Q2298901","brand:wikipedia":"en:TNK-BP",name:"ТНК"}},"amenity/fuel|Татнефтепродукт":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"Татнефтепродукт","brand:en":"Tatnefteprodukt","brand:ru":"Татнефтепродукт","brand:wikidata":"Q62545686",name:"Татнефтепродукт","name:en":"Tatnefteprodukt","name:ru":"Татнефтепродукт"}},"amenity/fuel|Татнефть":{countryCodes:["ru","ua"],tags:{amenity:"fuel",brand:"Татнефть","brand:en":"Tatneft","brand:ru":"Татнефть","brand:wikidata":"Q1616858","brand:wikipedia":"en:Tatneft",name:"Татнефть","name:en":"Tatneft","name:ru":"Татнефть"}},"amenity/fuel|Укрнафта":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"Укрнафта","brand:en":"Ukrnafta","brand:uk":"Укрнафта","brand:wikidata":"Q2447961","brand:wikipedia":"uk:Укрнафта",name:"Укрнафта","name:en":"Ukrnafta","name:uk":"Укрнафта"}},"amenity/fuel|דור אלון":{countryCodes:["il"],tags:{amenity:"fuel",brand:"דור אלון","brand:en":"Dor Alon","brand:he":"דור אלון","brand:wikidata":"Q16130352","brand:wikipedia":"he:דור אלון אנרגיה בישראל (1988)",name:"דור אלון","name:en":"Dor Alon","name:he":"דור אלון"}},"amenity/fuel|סונול":{countryCodes:["il"],tags:{amenity:"fuel",brand:"סונול","brand:en":"Sonol","brand:he":"סונול","brand:wikidata":"Q3701622","brand:wikipedia":"en:Sonol",name:"סונול","name:en":"Sonol","name:he":"סונול"}},"amenity/fuel|פז":{countryCodes:["il"],tags:{amenity:"fuel",brand:"פז","brand:en":"Paz","brand:he":"פז","brand:wikidata":"Q2211731","brand:wikipedia":"en:Paz Oil Company",name:"פז","name:en":"Paz","name:he":"פז"}},"amenity/fuel|ادنوك":{countryCodes:["ae"],tags:{amenity:"fuel",brand:"ادنوك","brand:ar":"ادنوك","brand:en":"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ادنوك","name:ar":"ادنوك","name:en":"ADNOC"}},"amenity/fuel|اينوك":{tags:{amenity:"fuel",brand:"اينوك",name:"اينوك"}},"amenity/fuel|توتال":{tags:{amenity:"fuel",brand:"توتال",name:"توتال"}},"amenity/fuel|บางจาก":{countryCodes:["th"],tags:{amenity:"fuel",brand:"บางจาก","brand:en":"Bangchak","brand:th":"บางจาก","brand:wikidata":"Q6579719","brand:wikipedia":"th:บางจาก คอร์ปอเรชัน",name:"บางจาก","name:en":"Bangchak","name:th":"บางจาก"}},"amenity/fuel|ป.ต.ท.":{countryCodes:["th"],tags:{amenity:"fuel",brand:"ป.ต.ท.","brand:en":"PTT","brand:th":"ป.ต.ท.","brand:wikidata":"Q1810389","brand:wikipedia":"th:ปตท.",name:"ป.ต.ท.","name:en":"PTT","name:th":"ป.ต.ท."}},"amenity/fuel|เชลล์":{countryCodes:["th"],tags:{amenity:"fuel",brand:"เชลล์","brand:en":"Shell","brand:th":"เชลล์","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"เชลล์","name:en":"Shell","name:th":"เชลล์"}},"amenity/fuel|เอสโซ่":{countryCodes:["th"],tags:{amenity:"fuel",brand:"เอสโซ่","brand:en":"Esso","brand:th":"เอสโซ่","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"เอสโซ่","name:en":"Esso","name:th":"เอสโซ่"}},"amenity/fuel|エッソ":{countryCodes:["jp"],matchNames:["エッソ石油"],tags:{amenity:"fuel",brand:"エッソ","brand:en":"Esso","brand:ja":"エッソ","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"エッソ","name:en":"Esso","name:ja":"エッソ"}},"amenity/fuel|エネオス":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"エネオス","brand:en":"JXTG Nippon Oil & Energy","brand:ja":"エネオス","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"エネオス","name:en":"JXTG Nippon Oil & Energy","name:ja":"エネオス"}},"amenity/fuel|キグナス石油":{countryCodes:["jp"],matchNames:["キグナス"],tags:{amenity:"fuel",brand:"キグナス石油","brand:en":"KYGNUS","brand:ja":"キグナス石油","brand:wikidata":"Q11296629","brand:wikipedia":"ja:キグナス石油",name:"キグナス石油","name:en":"Kygnus","name:ja":"キグナス石油"}},"amenity/fuel|コスモ石油":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"コスモ石油","brand:en":"Cosmo Oil Company","brand:ja":"コスモ石油","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"コスモ石油","name:en":"Cosmo Oil Company","name:ja":"コスモ石油"}},"amenity/fuel|ゼネラル":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"ゼネラル","brand:en":"Tonen General","brand:ja":"ゼネラル","brand:wikidata":"Q11528048","brand:wikipedia":"ja:東燃ゼネラル石油",name:"ゼネラル","name:en":"Tonen General","name:ja":"ゼネラル"}},"amenity/fuel|モービル":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"モービル","brand:en":"Mobil","brand:ja":"モービル","brand:wikidata":"Q3088656","brand:wikipedia":"ja:モービル (ブランド)",name:"モービル","name:en":"Mobil","name:ja":"モービル"}},"amenity/fuel|中国石化 Sinopec":{countryCodes:["cn"],matchNames:["sinopec","sinopec fuel","中国石化","中国石化加油站"],tags:{amenity:"fuel",brand:"中国石化 Sinopec","brand:en":"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec","brand:zh":"中国石化",name:"中国石化 Sinopec","name:en":"Sinopec","name:zh":"中国石化"}},"amenity/fuel|中国石油":{countryCodes:["cn"],matchNames:["中油加油站"],tags:{amenity:"fuel",brand:"中国石油","brand:en":"PetroChina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina","brand:zh":"中国石油",name:"中国石油","name:en":"PetroChina","name:zh":"中国石油"}},"amenity/fuel|全國加油站":{countryCodes:["tw"],tags:{amenity:"fuel",brand:"全國加油站","brand:en":"NPC","brand:wikidata":"Q20410455","brand:wikipedia":"zh:全國加油站","brand:zh":"全國加油站",name:"全國加油站","name:en":"NPC","name:zh":"全國加油站"}},"amenity/fuel|出光":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"出光","brand:en":"Idemitsu Kosan","brand:ja":"出光","brand:wikidata":"Q2216770","brand:wikipedia":"en:Idemitsu Kosan",name:"出光","name:en":"Idemitsu Kosan","name:ja":"出光"}},"amenity/fuel|台塑石油":{tags:{amenity:"fuel",brand:"台塑石油",name:"台塑石油"}},"amenity/fuel|台灣中油":{countryCodes:["tw"],matchNames:["中油"],tags:{amenity:"fuel",brand:"台灣中油","brand:en":"CPC Corporation, Taiwan","brand:wikidata":"Q21527177","brand:wikipedia":"en:CPC Corporation, Taiwan","brand:zh":"台灣中油",name:"台灣中油","name:en":"CPC Corporation, Taiwan","name:zh":"台灣中油"}},"amenity/fuel|昭和シェル":{countryCodes:["jp"],matchNames:["昭和シェル石油"],tags:{amenity:"fuel",brand:"昭和シェル","brand:en":"Showa Shell Sekiyu","brand:ja":"昭和シェル","brand:wikidata":"Q277115","brand:wikipedia":"en:Showa Shell Sekiyu",name:"昭和シェル","name:en":"Showa Shell Sekiyu","name:ja":"昭和シェル"}},"amenity/fuel|福懋加油站":{tags:{amenity:"fuel",brand:"福懋加油站",name:"福懋加油站"}},"amenity/gambling|Buzz Bingo":{countryCodes:["gb"],matchTags:["leisure/adult_gaming_centre"],tags:{amenity:"gambling",brand:"Buzz Bingo","brand:wikidata":"Q60746117","brand:wikipedia":"en:Buzz Bingo",gambling:"bingo;slot_machines",name:"Buzz Bingo"}},"amenity/hospital|Cruz Roja":{tags:{amenity:"hospital",brand:"Cruz Roja",name:"Cruz Roja"}},"amenity/hospital|IMSS":{tags:{amenity:"hospital",brand:"IMSS",name:"IMSS"}},"amenity/hospital|Select Specialty Hospital":{countryCodes:["us"],matchNames:["select speciality"],tags:{amenity:"hospital",brand:"Select Specialty Hospital","brand:wikidata":"Q66360902",healthcare:"hospital",name:"Select Specialty Hospital"}},"amenity/hospital|Shriners Hospital for Children":{countryCodes:["us"],matchNames:["shriners burn hospital","shriners hospital","shriners hospitals for children"],tags:{amenity:"hospital",brand:"Shriners Hospitals for Children","brand:wikidata":"Q7504109","brand:wikipedia":"en:Shriners Hospitals for Children",healthcare:"hospital","healthcare:speciality":"paediatrics",name:"Shriners Hospitals for Children"}},"amenity/hospital|VA Medical Center":{countryCodes:["us"],matchNames:["department of veterans affairs medical center","veterans administration","veterans administration hospital","veterans administration medical center","veterans affairs","veterans affairs hospital","veterans affairs medical center"],tags:{amenity:"hospital",brand:"VA","brand:wikidata":"Q6580225","brand:wikipedia":"en:Veterans Health Administration",healthcare:"hospital","healthcare:for":"veterans",name:"VA Medical Center",short_name:"VA"}},"amenity/hospital|Больница":{tags:{amenity:"hospital",brand:"Больница",name:"Больница"}},"amenity/hospital|Городская больница":{tags:{amenity:"hospital",brand:"Городская больница",name:"Городская больница"}},"amenity/hospital|Детская больница":{tags:{amenity:"hospital",brand:"Детская больница",name:"Детская больница"}},"amenity/hospital|Медпункт":{tags:{amenity:"hospital",brand:"Медпункт",name:"Медпункт"}},"amenity/hospital|Противотуберкулезный диспансер":{tags:{amenity:"hospital",brand:"Противотуберкулезный диспансер",name:"Противотуберкулезный диспансер"}},"amenity/hospital|Районная больница":{tags:{amenity:"hospital",brand:"Районная больница",name:"Районная больница"}},"amenity/hospital|Роддом":{tags:{amenity:"hospital",brand:"Роддом",name:"Роддом"}},"amenity/hospital|Родильный дом":{tags:{amenity:"hospital",brand:"Родильный дом",name:"Родильный дом"}},"amenity/hospital|Скорая помощь":{tags:{amenity:"hospital",brand:"Скорая помощь",name:"Скорая помощь"}},"amenity/hospital|ЦРБ":{tags:{amenity:"hospital",brand:"ЦРБ",name:"ЦРБ"}},"amenity/hospital|Центральная районная больница":{tags:{amenity:"hospital",brand:"Центральная районная больница",name:"Центральная районная больница"}},"amenity/hospital|โรงพยาบาลส่งเสริมสุขภาพตำบล":{countryCodes:["th"],tags:{amenity:"hospital",brand:"โรงพยาบาลส่งเสริมสุขภาพตำบล","brand:th":"โรงพยาบาลส่งเสริมสุขภาพตำบล",name:"โรงพยาบาลส่งเสริมสุขภาพตำบล","name:th":"โรงพยาบาลส่งเสริมสุขภาพตำบล"}},"amenity/ice_cream|33 пингвина":{tags:{amenity:"ice_cream",brand:"33 пингвина",name:"33 пингвина"}},"amenity/ice_cream|Abbott's Frozen Custard":{countryCodes:["us"],tags:{amenity:"ice_cream",brand:"Abbott's Frozen Custard","brand:wikidata":"Q4664334","brand:wikipedia":"en:Abbott's Frozen Custard",name:"Abbott's Frozen Custard",short_name:"Abbott's"}},"amenity/ice_cream|Amorino":{countryCodes:["ae","ch","cz","de","es","fr","gb","gr","ie","it","lu","ma","mt","mx","nc","pt","qa","re","us"],tags:{amenity:"ice_cream",brand:"Amorino","brand:wikidata":"Q2843884","brand:wikipedia":"fr:Amorino",name:"Amorino"}},"amenity/ice_cream|Amy's Ice Creams":{tags:{amenity:"ice_cream",brand:"Amy's Ice Creams","brand:wikidata":"Q4749045","brand:wikipedia":"en:Amy's Ice Creams",name:"Amy's Ice Creams"}},"amenity/ice_cream|Andy's Frozen Custard":{countryCodes:["us"],tags:{amenity:"ice_cream",brand:"Andy's Frozen Custard","brand:wikidata":"Q4760327","brand:wikipedia":"en:Andy's Frozen Custard",name:"Andy's Frozen Custard",short_name:"Andy's"}},"amenity/ice_cream|Baskin-Robbins":{tags:{amenity:"ice_cream",brand:"Baskin-Robbins","brand:wikidata":"Q584601","brand:wikipedia":"en:Baskin-Robbins",cuisine:"ice_cream",name:"Baskin-Robbins"}},"amenity/ice_cream|Ben & Jerry's":{tags:{amenity:"ice_cream",brand:"Ben & Jerry's","brand:wikidata":"Q816412","brand:wikipedia":"en:Ben & Jerry's",cuisine:"ice_cream",name:"Ben & Jerry's"}},"amenity/ice_cream|Bruster's Ice Cream":{countryCodes:["us"],matchNames:["brusters"],tags:{amenity:"ice_cream",brand:"Bruster's Ice Cream","brand:wikidata":"Q4979810","brand:wikipedia":"en:Bruster's Ice Cream",cuisine:"ice_cream",name:"Bruster's Ice Cream"}},"amenity/ice_cream|Carvel":{countryCodes:["us"],tags:{amenity:"ice_cream",brand:"Carvel","brand:wikidata":"Q5047520","brand:wikipedia":"en:Carvel (franchise)",cuisine:"ice_cream",name:"Carvel",takeaway:"yes"}},"amenity/ice_cream|Cold Rock Ice Creamery":{countryCodes:["au"],tags:{amenity:"ice_cream",brand:"Cold Rock Ice Creamery","brand:wikidata":"Q2982390","brand:wikipedia":"en:Cold Rock Ice Creamery",cuisine:"ice_cream",name:"Cold Rock Ice Creamery",takeaway:"yes"}},"amenity/ice_cream|Cold Stone Creamery":{countryCodes:["ng","us"],matchNames:["cold stone"],tags:{amenity:"ice_cream",brand:"Cold Stone Creamery","brand:wikidata":"Q1094923","brand:wikipedia":"en:Cold Stone Creamery",cuisine:"ice_cream",name:"Cold Stone Creamery"}},"amenity/ice_cream|D'Onofrio":{countryCodes:["pe"],tags:{amenity:"ice_cream",brand:"D'Onofrio","brand:wikidata":"Q5203166","brand:wikipedia":"es:D'Onofrio",cuisine:"ice_cream",name:"D'Onofrio"}},"amenity/ice_cream|Freddo":{tags:{amenity:"ice_cream",brand:"Freddo","brand:wikidata":"Q28823999","brand:wikipedia":"es:Freddo",cuisine:"ice_cream",name:"Freddo"}},"amenity/ice_cream|Graeter's":{countryCodes:["us"],matchNames:["greaters"],tags:{amenity:"ice_cream",brand:"Graeter's","brand:wikidata":"Q5592430","brand:wikipedia":"en:Graeter's",cuisine:"ice_cream",name:"Graeter's",takeaway:"yes"}},"amenity/ice_cream|Grido":{countryCodes:["ar"],matchNames:["grido helado"],matchTags:["shop/confectionary"],tags:{amenity:"ice_cream",brand:"Grido","brand:wikidata":"Q5885724","brand:wikipedia":"es:Grido Helado",cuisine:"ice_cream",name:"Grido"}},"amenity/ice_cream|Häagen-Dazs":{tags:{amenity:"ice_cream",brand:"Häagen-Dazs","brand:wikidata":"Q1143333","brand:wikipedia":"en:Häagen-Dazs",name:"Häagen-Dazs"}},"amenity/ice_cream|La Michoacana":{countryCodes:["mx"],matchNames:["paleteria la michoacana"],tags:{amenity:"ice_cream",brand:"La Michoacana","brand:wikidata":"Q17118857","brand:wikipedia":"en:Paletería La Michoacana",name:"La Michoacana"}},"amenity/ice_cream|Marble Slab Creamery":{countryCodes:["ca","us"],tags:{amenity:"ice_cream",brand:"Marble Slab Creamery","brand:wikidata":"Q17020087","brand:wikipedia":"en:Marble Slab Creamery",cuisine:"ice_cream",name:"Marble Slab Creamery"}},"amenity/ice_cream|Menchie's":{countryCodes:["ae","bh","bs","ca","cn","gb","in","jp","kw","qa","sa","us"],matchNames:["menchie's frozen yoghurt","menchie's frozen yogurt"],tags:{amenity:"ice_cream",brand:"Menchie's","brand:wikidata":"Q6816528","brand:wikipedia":"en:Menchie's Frozen Yogurt",cuisine:"frozen_yogurt",name:"Menchie's"}},"amenity/ice_cream|Pinkberry":{tags:{amenity:"ice_cream",brand:"Pinkberry","brand:wikidata":"Q2904053","brand:wikipedia":"en:Pinkberry",cuisine:"frozen_yogurt",name:"Pinkberry",takeaway:"yes"}},"amenity/ice_cream|Ralph's Italian Ices":{countryCodes:["us"],matchNames:["ralphs famous italian ices and ice cream","ralphs italian ice","ralphs italian ices and ice cream"],tags:{amenity:"ice_cream",brand:"Ralph's Italian Ices","brand:wikidata":"Q62576909",cuisine:"ice_cream",name:"Ralph's Italian Ices",official_name:"Ralph's Famous Italian Ices"}},"amenity/ice_cream|Rita's Italian Ice":{countryCodes:["us"],matchNames:["ritas","ritas water ice"],tags:{amenity:"ice_cream",brand:"Rita's Italian Ice","brand:wikidata":"Q7336456","brand:wikipedia":"en:Rita's Italian Ice",cuisine:"ice_cream",name:"Rita's Italian Ice"}},"amenity/ice_cream|Shake's":{countryCodes:["us"],tags:{amenity:"ice_cream",brand:"Shake's","brand:wikidata":"Q17032842","brand:wikipedia":"en:Shake's Frozen Custard",name:"Shake's",official_name:"Shake’s Frozen Custard"}},"amenity/ice_cream|TCBY":{tags:{amenity:"ice_cream",brand:"TCBY","brand:wikidata":"Q7669631","brand:wikipedia":"en:TCBY",cuisine:"frozen_yogurt",name:"TCBY",takeaway:"yes"}},"amenity/ice_cream|Yogen Früz":{tags:{amenity:"ice_cream",brand:"Yogen Früz","brand:wikidata":"Q8054358","brand:wikipedia":"en:Yogen Früz",cuisine:"frozen_yogurt",name:"Yogen Früz",takeaway:"yes"}},"amenity/ice_cream|Yogurt Mountain":{tags:{amenity:"ice_cream",brand:"Yogurt Mountain","brand:wikidata":"Q8054427","brand:wikipedia":"en:Yogurt Mountain",cuisine:"frozen_yogurt",name:"Yogurt Mountain",takeaway:"yes"}},"amenity/ice_cream|Yogurtland":{countryCodes:["ae","au","sg","th","us","ve"],tags:{amenity:"ice_cream",brand:"Yogurtland","brand:wikidata":"Q8054428","brand:wikipedia":"en:Yogurtland",cuisine:"frozen_yogurt",name:"Yogurtland",takeaway:"yes"}},"amenity/ice_cream|smöoy":{countryCodes:["ao","ci","cn","dz","ec","es","fr","gb","gn","it","ma","pa","pe","pt","re","sa"],tags:{amenity:"ice_cream",brand:"smöoy","brand:wikidata":"Q21573945","brand:wikipedia":"es:Smöoy",name:"smöoy",official_name:"Softy Cream"}},"amenity/ice_cream|sweetFrog":{countryCodes:["us"],matchNames:["sweetfrog frozen yogurt","sweetfrog premium frozen yogurt"],tags:{amenity:"ice_cream",brand:"sweetFrog","brand:wikidata":"Q16952110","brand:wikipedia":"en:Sweet Frog",cuisine:"frozen_yogurt",name:"sweetFrog"}},"amenity/ice_cream|サーティワンアイスクリーム":{countryCodes:["jp"],tags:{amenity:"ice_cream",brand:"バスキン・ロビンス","brand:en":"Baskin-Robbins","brand:ja":"バスキン・ロビンス","brand:wikidata":"Q584601","brand:wikipedia":"ja:バスキン・ロビンス",cuisine:"ice_cream",name:"サーティワンアイスクリーム","name:en":"Baskin-Robbins","name:ja":"サーティワンアイスクリーム"}},"amenity/kindergarten|Children's Learning Adventure":{countryCodes:["us"],tags:{after_school:"yes",amenity:"kindergarten",brand:"Children's Learning Adventure","brand:wikidata":"Q64821213","brand:wikipedia":"en:Children's Learning Adventure",fee:"yes","isced:level":"0",name:"Children's Learning Adventure",nursery:"yes",preschool:"yes",short_name:"CLA"}},"amenity/kindergarten|Childtime":{countryCodes:["us"],matchNames:["childtime learning center","childtime learning centers"],tags:{amenity:"kindergarten",brand:"Childtime","brand:wikidata":"Q64877793",fee:"yes","isced:level":"0",name:"Childtime",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|KinderCare":{countryCodes:["us"],tags:{after_school:"yes",alt_name:"KinderCare Learning Center",amenity:"kindergarten",brand:"KinderCare","brand:wikidata":"Q6410551","brand:wikipedia":"en:KinderCare Learning Centers",fee:"yes","isced:level":"0",name:"KinderCare",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|La Petite Academy":{countryCodes:["us"],matchNames:["la petite"],tags:{amenity:"kindergarten",brand:"La Petite Academy","brand:wikidata":"Q64877784",fee:"yes","isced:level":"0",name:"La Petite Academy",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|New Horizon Academy":{countryCodes:["us"],tags:{after_school:"yes",amenity:"kindergarten",brand:"New Horizon Academy","brand:wikidata":"Q64821306",fee:"yes","isced:level":"0",name:"New Horizon Academy",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|Primrose School":{countryCodes:["us"],matchNames:["primrose"],tags:{after_school:"yes",alt_name:"Primrose Schools",amenity:"kindergarten",brand:"Primrose School","brand:wikidata":"Q7243677","brand:wikipedia":"en:Primrose Schools",fee:"yes","isced:level":"0",max_age:"12",min_age:"6 weeks",name:"Primrose School",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|The Children's Courtyard":{countryCodes:["us"],matchNames:["children's courtyard"],tags:{amenity:"kindergarten",brand:"The Children's Courtyard","brand:wikidata":"Q64877852",fee:"yes","isced:level":"0",name:"The Children's Courtyard",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|The Goddard School":{countryCodes:["us"],tags:{after_school:"yes",alt_name:"Goddard School",amenity:"kindergarten",brand:"The Goddard School","brand:wikidata":"Q5576260","brand:wikipedia":"en:Goddard School",fee:"yes","isced:level":"0",min_age:"6 weeks",name:"The Goddard School",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|Tutor Time":{countryCodes:["us"],matchNames:["tutor time child care","tutor time child care learning center","tutor time learning center","tutor time learning centers"],tags:{amenity:"kindergarten",brand:"Tutor Time","brand:wikidata":"Q64877826",fee:"yes","isced:level":"0",name:"Tutor Time",nursery:"yes",preschool:"yes"}},"amenity/language_school|AEON":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"AEON","brand:en":"Aeon","brand:ja":"AEON","brand:ja-Hira":"イーオン","brand:ja-Latn":"AEON","brand:wikidata":"Q4687898","brand:wikipedia":"ja:イーオン","language:en":"main",name:"AEON","name:en":"Aeon","name:ja":"AEON","name:ja-Hira":"イーオン","name:ja-Latn":"AEON"}},"amenity/language_school|Berlitz":{tags:{amenity:"language_school",brand:"Berlitz","brand:wikidata":"Q821960","brand:wikipedia":"en:Berlitz Corporation",name:"Berlitz"}},"amenity/language_school|ECC外語学院":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"ECC外語学院","brand:en":"ECC Foreign Language Institute","brand:ja":"ECC外語学院","brand:ja-Hira":"イーシーシーがいごがくいん","brand:ja-Latn":"ECC Gaigo Gakuin","brand:wikidata":"Q5322655","brand:wikipedia":"ja:ECC総合教育機関","language:en":"main",name:"ECC外語学院","name:en":"ECC Foreign Language Institute","name:ja":"ECC外語学院","name:ja-Hira":"イーシーシーがいごがくいん","name:ja-Latn":"ECC Gaigo Gakuin",short_name:"ECC","short_name:en":"ECC","short_name:ja":"ECC","short_name:ja-Hira":"イーシーシー","short_name:ja-Latn":"ECC"}},"amenity/language_school|ELS":{countryCodes:["ca","in","my","pa","sa","tr","us","vn"],tags:{amenity:"language_school",brand:"ELS","brand:en":"ELS","brand:wikidata":"Q5323325","brand:wikipedia":"en:ELS Language Centers","language:en":"main",name:"ELS","name:en":"ELS",official_name:"ELS Language Centers","official_name:en":"ELS Language Centers"}},"amenity/language_school|GABA":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"GABA","brand:en":"Gaba","brand:ja":"GABA","brand:ja-Kana":"ガバ","brand:ja-Latn":"GABA","brand:wikidata":"Q5515241","brand:wikipedia":"ja:GABA (企業)","language:en":"main",name:"GABA","name:en":"Gaba","name:ja":"GABA","name:ja-Kana":"ガバ","name:ja-Latn":"GABA"}},"amenity/language_school|NOVA":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"NOVA","brand:en":"Nova","brand:ja":"NOVA","brand:ja-Hira":"ノヴァ","brand:ja-Latn":"NOVA","brand:wikidata":"Q7064000","brand:wikipedia":"ja:NOVA","language:en":"main",name:"NOVA","name:en":"Nova","name:ja":"NOVA","name:ja-Hira":"ノヴァ","name:ja-Latn":"NOVA"}},"amenity/language_school|Shane English School":{countryCodes:["cn","dz","gb","hk","id","kr","pl","th","tw","vn"],tags:{amenity:"language_school",brand:"Shane English School","brand:en":"Shane English School","brand:ja":"シェーン英会話","brand:ja-Latn":"Shēn Eikaiwa","brand:wikidata":"Q17054332","brand:wikipedia":"en:Shane English School","language:en":"main",name:"Shane English School","name:en":"Shane English School","name:ja":"シェーン英会話","name:ja-Latn":"Shēn Eikaiwa"}},"amenity/language_school|シェーン英会話":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"シェーン英会話","brand:en":"Shane English School","brand:ja":"シェーン英会話","brand:ja-Latn":"Shēn Eikaiwa","brand:wikidata":"Q17054332","brand:wikipedia":"ja:シェーン英会話スクール","language:en":"main",name:"シェーン英会話","name:en":"Shane English School","name:ja":"シェーン英会話","name:ja-Latn":"Shēn Eikaiwa"}},"amenity/language_school|セイハ英語学院":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"セイハ英語学院","brand:en":"Seiha English Academy","brand:ja":"セイハ英語学院","brand:ja-Hani":"セイハえいごがくいん","brand:ja-Latn":"Seiha Eigo Gakuin","brand:wikidata":"Q7446694","language:en":"main",name:"セイハ英語学院","name:en":"Seiha English Academy","name:ja":"セイハ英語学院","name:ja-Hani":"セイハえいごがくいん","name:ja-Latn":"Seiha Eigo Gakuin"}},"amenity/language_school|ベルリッツ":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"ベルリッツ","brand:en":"Berlitz","brand:ja":"ベルリッツ","brand:ja-Hira":"ベルリッツ","brand:wikidata":"Q4892545","brand:wikipedia":"ja:ベルリッツ・ジャパン",name:"ベルリッツ","name:en":"Berlitz","name:ja":"ベルリッツ","name:ja-Hira":"ベルリッツ"}},"amenity/language_school|ペッピーキッズクラブ":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"ペッピーキッズクラブ","brand:en":"Peppy Kids Club","brand:ja":"ペッピーキッズクラブ","brand:ja-Latn":"Peppi Kizzu Kurabu","brand:wikidata":"Q7166471","brand:wikipedia":"ja:ペッピーキッズクラブ","language:en":"main",name:"ペッピーキッズクラブ","name:en":"Peppy Kids Club","name:ja":"ペッピーキッズクラブ","name:ja-Latn":"Peppi Kizzu Kurabu"}},"amenity/money_transfer|Express Union":{countryCodes:["td"],matchTags:["amenity/bank"],nomatch:["amenity/bank|Banco Unión","amenity/bank|UnionBank"],tags:{amenity:"money_transfer",brand:"Express Union","brand:wikidata":"Q3062276","brand:wikipedia":"fr:Express Union",name:"Express Union"}},"amenity/money_transfer|Hoa Phát":{countryCodes:["us"],matchNames:["hoa phat goi tien","hoa phat gui tien"],tags:{amenity:"money_transfer",brand:"Hoa Phát","brand:wikidata":"Q65116775",name:"Hoa Phát","name:vi":"Hoa Phát"}},"amenity/money_transfer|MoneyGram":{countryCodes:["de","fr","gr"],tags:{amenity:"money_transfer",brand:"MoneyGram","brand:wikidata":"Q1944412","brand:wikipedia":"en:MoneyGram",name:"MoneyGram"}},"amenity/money_transfer|Orange Money":{countryCodes:["ml"],tags:{amenity:"money_transfer",brand:"Orange Money","brand:wikidata":"Q16668220","brand:wikipedia":"en:Orange Money",name:"Orange Money"}},"amenity/money_transfer|Western Union":{matchTags:["amenity/bureau_de_change"],nomatch:["amenity/bank|Western Union"],tags:{amenity:"money_transfer",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"}},"amenity/parking|Diamond Parking":{countryCodes:["ca","us"],tags:{amenity:"parking",brand:"Diamond Parking","brand:wikidata":"Q5270887","brand:wikipedia":"en:Diamond Parking",name:"Diamond Parking"}},"amenity/parking|Parking Company of America":{countryCodes:["us"],tags:{amenity:"parking",brand:"Parking Company of America","brand:wikidata":"Q65491376",fee:"yes",name:"Parking Company of America",short_name:"PCA"}},"amenity/parking|SP+":{countryCodes:["ca","us"],matchNames:["central parking","central parking system","standard parking"],nomatch:["amenity/fuel|SP"],tags:{alt_name:"SP Plus",amenity:"parking",brand:"SP+","brand:wikidata":"Q7598289","brand:wikipedia":"en:SP Plus Corporation",fee:"yes",name:"SP+"}},"amenity/parking|Wilson Parking":{countryCodes:["au","cn","hk","ko","nz","sg"],matchNames:["wilson"],tags:{amenity:"parking",brand:"Wilson Parking","brand:wikidata":"Q28448427","brand:wikipedia":"en:Wilson Parking",fee:"yes",name:"Wilson Parking"}},"amenity/parking|タイムズ":{countryCodes:["jp"],matchNames:["times 24th","タイムズ24"],tags:{amenity:"parking",brand:"タイムズ","brand:en":"Times","brand:ja":"タイムズ","brand:wikidata":"Q11089693","brand:wikipedia":"ja:パーク24",fee:"yes",name:"Times","name:en":"タイムズ","name:ja":"Times"}},"amenity/payment_centre|Abitab":{countryCodes:["uy"],matchTags:["amenity/bureau_de_change"],tags:{amenity:"payment_centre",brand:"Abitab","brand:wikidata":"Q16488129","brand:wikipedia":"es:Abitab",name:"Abitab"}},"amenity/payment_centre|Rapipago":{countryCodes:["ar"],tags:{amenity:"payment_centre",brand:"Rapipago","brand:wikidata":"Q6100413","brand:wikipedia":"es:Rapipago",name:"Rapipago"}},"amenity/payment_terminal|Qiwi":{countryCodes:["ru"],tags:{amenity:"payment_terminal",brand:"Qiwi","brand:wikidata":"Q4047736","brand:wikipedia":"en:Qiwi",name:"Qiwi"}},"amenity/payment_terminal|ПриватБанк":{countryCodes:["ua"],tags:{amenity:"payment_terminal",brand:"ПриватБанк","brand:wikidata":"Q1515015","brand:wikipedia":"en:PrivatBank",name:"ПриватБанк"}},"amenity/payment_terminal|Сбербанк":{tags:{amenity:"payment_terminal",brand:"Сбербанк",name:"Сбербанк"}},"amenity/payment_terminal|Элекснет":{countryCodes:["ru"],tags:{amenity:"payment_terminal",brand:"Элекснет","brand:wikidata":"Q4530795","brand:wikipedia":"ru:Элекснет",name:"Элекснет"}},"amenity/pharmacy|36,6":{countryCodes:["ru"],matchNames:["аптека 36,6"],tags:{amenity:"pharmacy",brand:"36,6","brand:wikidata":"Q226889","brand:wikipedia":"ru:36,6 (аптечная сеть)",healthcare:"pharmacy",name:"36,6"}},"amenity/pharmacy|Amavita":{countryCodes:["ch"],tags:{amenity:"pharmacy",brand:"Amavita",healthcare:"pharmacy",name:"Amavita"}},"amenity/pharmacy|Amcal":{countryCodes:["au"],matchNames:["amcal pharmacy"],tags:{amenity:"pharmacy",brand:"Amcal","brand:wikidata":"Q63367373",healthcare:"pharmacy",name:"Amcal"}},"amenity/pharmacy|Apollo Pharmacy":{countryCodes:["in"],nomatch:["shop/optician|Apollo-Optik"],tags:{amenity:"pharmacy",brand:"Apollo Pharmacy","brand:wikidata":"Q62562612",healthcare:"pharmacy",name:"Apollo Pharmacy"}},"amenity/pharmacy|Apotek Hjärtat":{countryCodes:["se"],tags:{amenity:"pharmacy",brand:"Apotek Hjärtat","brand:wikidata":"Q10416114","brand:wikipedia":"sv:Apotek Hjärtat",healthcare:"pharmacy",name:"Apotek Hjärtat"}},"amenity/pharmacy|Aptek":{tags:{amenity:"pharmacy",brand:"Aptek",healthcare:"pharmacy",name:"Aptek"}},"amenity/pharmacy|Bartell Drugs":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Bartell Drugs","brand:wikidata":"Q4865152","brand:wikipedia":"en:Bartell Drugs",healthcare:"pharmacy",name:"Bartell Drugs"}},"amenity/pharmacy|Benavides":{countryCodes:["mx"],tags:{amenity:"pharmacy",brand:"Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Benavides"}},"amenity/pharmacy|Benu":{tags:{amenity:"pharmacy",brand:"Benu","brand:wikidata":"Q62562792",healthcare:"pharmacy",name:"Benu"}},"amenity/pharmacy|Blooms The Chemist":{countryCodes:["au"],tags:{amenity:"pharmacy",brand:"Blooms The Chemist","brand:wikidata":"Q63367543",healthcare:"pharmacy",name:"Blooms The Chemist",shop:"chemist"}},"amenity/pharmacy|Boots":{countryCodes:["gb"],matchNames:["boots pharmacy"],nomatch:["shop/chemist|Boots"],tags:{amenity:"pharmacy",brand:"Boots","brand:wikidata":"Q6123139","brand:wikipedia":"en:Boots UK",healthcare:"pharmacy",name:"Boots"}},"amenity/pharmacy|Boticas y Salud":{countryCodes:["pe"],tags:{amenity:"pharmacy",brand:"Boticas y Salud","brand:wikidata":"Q62563126",healthcare:"pharmacy",name:"Boticas y Salud"}},"amenity/pharmacy|Brookshire Brothers Pharmacy":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Brookshire Brothers Pharmacy","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",healthcare:"pharmacy",name:"Brookshire Brothers Pharmacy"}},"amenity/pharmacy|Brookshire's Pharmacy":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Brookshire's Pharmacy",healthcare:"pharmacy",name:"Brookshire's Pharmacy"}},"amenity/pharmacy|CVS Pharmacy":{countryCodes:["us"],nomatch:["amenity/vending_machine|CVS Pharmacy","shop/chemist|CVS Pharmacy"],tags:{amenity:"pharmacy",brand:"CVS Pharmacy","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",healthcare:"pharmacy",name:"CVS Pharmacy",short_name:"CVS"}},"amenity/pharmacy|Camelia":{countryCodes:["lt"],tags:{amenity:"pharmacy",brand:"Camelia","brand:wikidata":"Q15867413","brand:wikipedia":"lt:Nemuno vaistinė",healthcare:"pharmacy",name:"Camelia"}},"amenity/pharmacy|Catena":{countryCodes:["ro"],tags:{amenity:"pharmacy",brand:"Catena","brand:wikidata":"Q24035728","brand:wikipedia":"ro:Farmacia Catena",healthcare:"pharmacy",name:"Catena"}},"amenity/pharmacy|Chemist King Discount Pharmacy":{countryCodes:["au"],matchNames:["chemist king","chemist king discount pharmacies"],tags:{amenity:"pharmacy",brand:"Chemist King Discount Pharmacy","brand:wikidata":"Q63367667",healthcare:"pharmacy",name:"Chemist King Discount Pharmacy"}},"amenity/pharmacy|Chemist Warehouse":{countryCodes:["au","nz"],tags:{amenity:"pharmacy",brand:"Chemist Warehouse","brand:wikidata":"Q48782120","brand:wikipedia":"en:Chemist Warehouse",healthcare:"pharmacy",name:"Chemist Warehouse"}},"amenity/pharmacy|Clicks":{countryCodes:["za"],tags:{amenity:"pharmacy",brand:"Clicks","brand:wikidata":"Q62563622",healthcare:"pharmacy",name:"Clicks"}},"amenity/pharmacy|Costco Pharmacy":{countryCodes:["us"],nomatch:["amenity/fuel|Costco Gasoline","shop/wholesale|Costco"],tags:{amenity:"pharmacy",brand:"Costco Pharmacy","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",healthcare:"pharmacy",name:"Costco Pharmacy"}},"amenity/pharmacy|Cruz Azul":{countryCodes:["ec"],matchNames:["farmacias cruz azul"],tags:{amenity:"pharmacy",brand:"Cruz Azul","brand:wikidata":"Q62108219",healthcare:"pharmacy",name:"Cruz Azul"}},"amenity/pharmacy|Cruz Verde":{countryCodes:["cl"],matchNames:["farmacias cruz verde"],tags:{amenity:"pharmacy",brand:"Cruz Verde","brand:wikidata":"Q5856071","brand:wikipedia":"es:Farmacias Cruz Verde",healthcare:"pharmacy",name:"Cruz Verde"}},"amenity/pharmacy|Day Lewis Pharmacy":{countryCodes:["gb"],tags:{amenity:"pharmacy",brand:"Day Lewis Pharmacy","brand:wikidata":"Q62563772",healthcare:"pharmacy",name:"Day Lewis Pharmacy"}},"amenity/pharmacy|Dbam o Zdrowie":{countryCodes:["pl"],tags:{amenity:"pharmacy",brand:"Dbam o Zdrowie","brand:wikidata":"Q62563833",healthcare:"pharmacy",name:"Dbam o Zdrowie"}},"amenity/pharmacy|Dona":{tags:{amenity:"pharmacy",brand:"Dona",healthcare:"pharmacy",name:"Dona"}},"amenity/pharmacy|Dr. Max":{countryCodes:["cz","pl","sk"],tags:{amenity:"pharmacy",brand:"Dr. Max","brand:wikidata":"Q56317371","brand:wikipedia":"fr:Dr.Max",healthcare:"pharmacy",name:"Dr. Max"}},"amenity/pharmacy|Droga Raia":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"Droga Raia","brand:wikidata":"Q10357101","brand:wikipedia":"pt:RaiaDrogasil",healthcare:"pharmacy",name:"Droga Raia"}},"amenity/pharmacy|Drogaria São Paulo":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"Drogaria São Paulo","brand:wikidata":"Q5308184","brand:wikipedia":"en:Grupo DPSP",healthcare:"pharmacy",name:"Drogaria São Paulo"}},"amenity/pharmacy|Drogasil":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"Drogasil","brand:wikidata":"Q5308185","brand:wikipedia":"pt:Drogasil",healthcare:"pharmacy",name:"Drogasil",wheelchair:"yes"}},"amenity/pharmacy|Duane Reade":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Duane Reade","brand:wikidata":"Q5310380","brand:wikipedia":"en:Duane Reade",healthcare:"pharmacy",name:"Duane Reade"}},"amenity/pharmacy|Einhorn-Apotheke":{tags:{amenity:"pharmacy",brand:"Einhorn-Apotheke",healthcare:"pharmacy",name:"Einhorn-Apotheke"}},"amenity/pharmacy|Eurovaistinė":{countryCodes:["lt"],tags:{amenity:"pharmacy",brand:"Eurovaistinė","brand:wikidata":"Q267205","brand:wikipedia":"en:Euroapotheca",healthcare:"pharmacy",name:"Eurovaistinė"}},"amenity/pharmacy|Extrafarma":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"Extrafarma","brand:wikidata":"Q20055480","brand:wikipedia":"pt:Extrafarma",healthcare:"pharmacy",name:"Extrafarma"}},"amenity/pharmacy|Familiprix":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Familiprix","brand:wikidata":"Q3064881","brand:wikipedia":"fr:Familiprix",healthcare:"pharmacy",name:"Familiprix"}},"amenity/pharmacy|Farmacenter~(Colombia)":{countryCodes:["co"],tags:{amenity:"pharmacy",brand:"Farmacenter","brand:wikidata":"Q62563928",healthcare:"pharmacy",name:"Farmacenter"}},"amenity/pharmacy|Farmacenter~(Paraguay)":{countryCodes:["py"],tags:{amenity:"pharmacy",brand:"Farmacenter","brand:wikidata":"",healthcare:"pharmacy",name:"Farmacenter"}},"amenity/pharmacy|Farmacia Benavides":{countryCodes:["mx"],tags:{amenity:"pharmacy",brand:"Farmacia Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Farmacia Benavides"}},"amenity/pharmacy|Farmacia Familiei":{countryCodes:["md"],tags:{amenity:"pharmacy",brand:"Farmacia Familiei",healthcare:"pharmacy",name:"Farmacia Familiei"}},"amenity/pharmacy|Farmacia Guadalajara":{countryCodes:["mx"],matchNames:["farmacias guadalajara"],tags:{amenity:"pharmacy",brand:"Farmacia Guadalajara","brand:wikidata":"Q5435609","brand:wikipedia":"en:Farmacias Guadalajara",healthcare:"pharmacy",name:"Farmacia Guadalajara"}},"amenity/pharmacy|Farmacias Ahumada":{tags:{amenity:"pharmacy",brand:"Farmacias Ahumada","brand:wikidata":"Q5856069","brand:wikipedia":"es:Farmacias Ahumada",healthcare:"pharmacy",name:"Farmacias Ahumada"}},"amenity/pharmacy|Farmacias Benavides":{tags:{amenity:"pharmacy",brand:"Farmacias Benavides",healthcare:"pharmacy",name:"Farmacias Benavides"}},"amenity/pharmacy|Farmacias Económicas~(Ecuador)":{countryCodes:["ec"],tags:{amenity:"pharmacy",brand:"Farmacias Económicas","brand:wikidata":"Q62108380",healthcare:"pharmacy",name:"Farmacias Económicas"}},"amenity/pharmacy|Farmacias Económicas~(El Salvador)":{countryCodes:["sv"],tags:{amenity:"pharmacy",brand:"Farmacias Económicas","brand:wikidata":"Q62108397",healthcare:"pharmacy",name:"Farmacias Económicas"}},"amenity/pharmacy|Farmacias Similares":{countryCodes:["cl","gt","mx"],matchNames:["similares"],tags:{amenity:"pharmacy",brand:"Farmacias Similares","brand:wikidata":"Q62564610",healthcare:"pharmacy",name:"Farmacias Similares"}},"amenity/pharmacy|Farmacias del Ahorro":{countryCodes:["mx"],matchNames:["farmacia del ahorro"],tags:{amenity:"pharmacy",brand:"Farmacias del Ahorro","brand:wikidata":"Q62086647",healthcare:"pharmacy",name:"Farmacias del Ahorro"}},"amenity/pharmacy|Farmacias del Dr. Simi":{countryCodes:["cl","gt","mx"],tags:{amenity:"pharmacy",brand:"Farmacias del Dr. Simi","brand:wikidata":"Q62564610",healthcare:"pharmacy",name:"Farmacias del Dr. Simi"}},"amenity/pharmacy|Farmacity":{countryCodes:["ra"],tags:{amenity:"pharmacy",brand:"Farmacity","brand:wikidata":"Q5856076","brand:wikipedia":"es:Farmacity",healthcare:"pharmacy",name:"Farmacity"}},"amenity/pharmacy|Farmacorp":{countryCodes:["bo"],tags:{amenity:"pharmacy",brand:"Farmacorp",healthcare:"pharmacy",name:"Farmacorp"}},"amenity/pharmacy|Farmahorro":{tags:{amenity:"pharmacy",brand:"Farmahorro","brand:wikidata":"Q20015002","brand:wikipedia":"es:Farmahorro",healthcare:"pharmacy",name:"Farmahorro"}},"amenity/pharmacy|Farmatodo":{tags:{amenity:"pharmacy",brand:"Farmatodo","brand:wikidata":"Q5856092","brand:wikipedia":"es:Farmatodo",healthcare:"pharmacy",name:"Farmatodo"}},"amenity/pharmacy|Farmácia São João":{tags:{amenity:"pharmacy",brand:"Farmácia São João",healthcare:"pharmacy",name:"Farmácia São João"}},"amenity/pharmacy|Felicia":{countryCodes:["md"],tags:{amenity:"pharmacy",brand:"Felicia","brand:wikidata":"Q62564805",healthcare:"pharmacy",name:"Felicia"}},"amenity/pharmacy|Fred Meyer Pharmacy":{countryCodes:["us"],matchNames:["fred meyer"],nomatch:["shop/supermarket|Fred Meyer"],tags:{amenity:"pharmacy",brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",healthcare:"pharmacy",name:"Fred Meyer Pharmacy"}},"amenity/pharmacy|Fybeca":{countryCodes:["ec"],tags:{amenity:"pharmacy",brand:"Fybeca","brand:wikidata":"Q62564822",healthcare:"pharmacy",name:"Fybeca"}},"amenity/pharmacy|Generika":{countryCodes:["ph"],matchNames:["generika drugstore"],tags:{amenity:"pharmacy",brand:"Generika","brand:wikidata":"Q62564876",healthcare:"pharmacy",name:"Generika"}},"amenity/pharmacy|Gintarinė vaistinė":{countryCodes:["lt"],tags:{amenity:"pharmacy",brand:"Gintarinė vaistinė","brand:wikidata":"Q15857801","brand:wikipedia":"lt:Gintarinė vaistinė",healthcare:"pharmacy",name:"Gintarinė vaistinė"}},"amenity/pharmacy|Guardian~(Asia)":{countryCodes:["bn","id","kh","my","sg","vn"],tags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q63371124","brand:wikipedia":"ms:Guardian Malaysia",healthcare:"pharmacy",name:"Guardian"}},"amenity/pharmacy|Guardian~(Australia)":{countryCodes:["au"],matchNames:["guardian pharmacies","guardian pharmacy"],tags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q63367814",healthcare:"pharmacy",name:"Guardian"}},"amenity/pharmacy|Guardian~(Canada)":{countryCodes:["ca"],nomatch:["amenity/pharmacy|Guardian~(Asia)","amenity/pharmacy|Guardian~(Australia)"],tags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q65553864",healthcare:"pharmacy",name:"Guardian"}},"amenity/pharmacy|H-E-B Pharmacy":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"H-E-B Pharmacy","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",healthcare:"pharmacy",name:"H-E-B Pharmacy"}},"amenity/pharmacy|Health Mart":{countryCodes:["us"],matchNames:["health mart pharmacy"],tags:{amenity:"pharmacy",brand:"Health Mart","brand:wikidata":"Q5690597","brand:wikipedia":"en:Health Mart",healthcare:"pharmacy",name:"Health Mart"}},"amenity/pharmacy|Hy-Vee Pharmacy":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Hy-Vee Pharmacy","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",healthcare:"pharmacy",name:"Hy-Vee Pharmacy"}},"amenity/pharmacy|I.D.A.":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"I.D.A.","brand:wikidata":"Q65553883",healthcare:"pharmacy",name:"I.D.A."}},"amenity/pharmacy|Inkafarma":{countryCodes:["pe"],tags:{amenity:"pharmacy",brand:"Inkafarma","brand:wikidata":"Q10997748","brand:wikipedia":"es:Inkafarma",healthcare:"pharmacy",name:"Inkafarma"}},"amenity/pharmacy|Jean Coutu":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Jean Coutu","brand:wikidata":"Q3117457","brand:wikipedia":"fr:Groupe Jean Coutu",healthcare:"pharmacy",name:"Jean Coutu"}},"amenity/pharmacy|Kimia Farma":{countryCodes:["id"],tags:{amenity:"pharmacy",brand:"Kimia Farma","brand:wikidata":"Q11264892","brand:wikipedia":"en:Kimia Farma",healthcare:"pharmacy",name:"Kimia Farma"}},"amenity/pharmacy|Kinney Drugs":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Kinney Drugs","brand:wikidata":"Q6414090","brand:wikipedia":"en:Kinney Drugs",healthcare:"pharmacy",name:"Kinney Drugs"}},"amenity/pharmacy|Kroger Pharmacy":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Kroger Pharmacy",healthcare:"pharmacy",name:"Kroger Pharmacy"}},"amenity/pharmacy|Kronans Apotek":{countryCodes:["se"],tags:{amenity:"pharmacy",brand:"Kronans Apotek",healthcare:"pharmacy",name:"Kronans Apotek"}},"amenity/pharmacy|Life Pharmacy":{tags:{amenity:"pharmacy",brand:"Life Pharmacy",healthcare:"pharmacy",name:"Life Pharmacy"}},"amenity/pharmacy|Lloyds Pharmacy":{countryCodes:["be","gb","ie","im"],matchNames:["lloyds"],tags:{amenity:"pharmacy",brand:"Lloyds Pharmacy","brand:wikidata":"Q6662870","brand:wikipedia":"en:LloydsPharmacy",healthcare:"pharmacy",name:"Lloyds Pharmacy"}},"amenity/pharmacy|Locatel":{tags:{amenity:"pharmacy",brand:"Locatel",healthcare:"pharmacy",name:"Locatel"}},"amenity/pharmacy|London Drugs":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"London Drugs","brand:wikidata":"Q3258955","brand:wikipedia":"en:London Drugs",healthcare:"pharmacy",name:"London Drugs"}},"amenity/pharmacy|Longs Drugs~(Hawaii)":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Longs Drugs","brand:wikidata":"Q16931196","brand:wikipedia":"en:Longs Drugs",healthcare:"pharmacy",name:"Longs Drugs",short_name:"Longs"}},"amenity/pharmacy|Mannings":{countryCodes:["cn","hk","mo"],tags:{amenity:"pharmacy",brand:"Mannings","brand:wikidata":"Q13646560","brand:wikipedia":"en:Mannings",healthcare:"pharmacy",name:"Mannings"}},"amenity/pharmacy|Marc's Pharmacy":{countryCodes:["us"],nomatch:["shop/supermarket|Marc's"],tags:{amenity:"pharmacy",brand:"Marc's","brand:wikidata":"Q17080259","brand:wikipedia":"en:Marc's",healthcare:"pharmacy",name:"Marc's Pharmacy"}},"amenity/pharmacy|MedPlus":{countryCodes:["in"],tags:{amenity:"pharmacy",brand:"MedPlus","brand:wikidata":"Q65684234","brand:wikipedia":"en:MedPlus",healthcare:"pharmacy",name:"MedPlus"}},"amenity/pharmacy|Mercury Drug":{countryCodes:["ph"],tags:{amenity:"pharmacy",brand:"Mercury Drug","brand:wikidata":"Q6818610","brand:wikipedia":"en:Mercury Drug",healthcare:"pharmacy",name:"Mercury Drug"}},"amenity/pharmacy|Mifarma":{countryCodes:["pe"],tags:{amenity:"pharmacy",brand:"Mifarma","brand:wikidata":"Q62564998",healthcare:"pharmacy",name:"Mifarma"}},"amenity/pharmacy|Multipharma":{countryCodes:["be"],tags:{amenity:"pharmacy",brand:"Multipharma","brand:wikidata":"Q62565018",healthcare:"pharmacy",name:"Multipharma"}},"amenity/pharmacy|Mēness aptieka":{countryCodes:["lv"],tags:{amenity:"pharmacy",brand:"Mēness aptieka","brand:wikidata":"Q57583051",healthcare:"pharmacy",name:"Mēness aptieka"}},"amenity/pharmacy|Pague Menos":{countryCodes:["br"],matchNames:["farmácia pague menos"],tags:{amenity:"pharmacy",brand:"Pague Menos","brand:wikidata":"Q7124466","brand:wikipedia":"pt:Pague Menos",healthcare:"pharmacy",name:"Pague Menos"}},"amenity/pharmacy|Panvel":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"Panvel","brand:wikidata":"Q10344254","brand:wikipedia":"pt:Panvel",healthcare:"pharmacy",name:"Panvel"}},"amenity/pharmacy|PharmaChoice":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"PharmaChoice","brand:wikidata":"Q7180716","brand:wikipedia":"en:PharmaChoice",healthcare:"pharmacy",name:"PharmaChoice"}},"amenity/pharmacy|PharmaSave~(Australia)":{countryCodes:["au"],nomatch:["amenity/pharmacy|Pharmasave~(Canada)"],tags:{amenity:"pharmacy",brand:"PharmaSave","brand:wikidata":"Q63367906",healthcare:"pharmacy",name:"PharmaSave"}},"amenity/pharmacy|Pharmacie Principale":{tags:{amenity:"pharmacy",brand:"Pharmacie Principale","brand:wikidata":"Q1547749","brand:wikipedia":"fr:Groupe PP Holding",healthcare:"pharmacy",name:"Pharmacie Principale"}},"amenity/pharmacy|Pharmacy 4 Less":{countryCodes:["au"],tags:{amenity:"pharmacy",brand:"Pharmacy 4 Less","brand:wikidata":"Q63367608",healthcare:"pharmacy",name:"Pharmacy 4 Less"}},"amenity/pharmacy|Pharmaprix":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Pharmaprix","brand:wikidata":"Q1820137","brand:wikipedia":"fr:Pharmaprix",healthcare:"pharmacy",name:"Pharmaprix"}},"amenity/pharmacy|Pharmasave~(Canada)":{countryCodes:["ca"],nomatch:["amenity/pharmacy|Pharmasave~(Australia)"],tags:{amenity:"pharmacy",brand:"Pharmasave","brand:wikidata":"Q17093822","brand:wikipedia":"en:Pharmasave",healthcare:"pharmacy",name:"Pharmasave"}},"amenity/pharmacy|Priceline Pharmacy":{countryCodes:["au"],matchNames:["priceline"],tags:{amenity:"pharmacy",brand:"Priceline Pharmacy","brand:wikidata":"Q7242652","brand:wikipedia":"en:Priceline (Australia)",healthcare:"pharmacy",name:"Priceline Pharmacy"}},"amenity/pharmacy|Punto Farma~(Colombia)":{countryCodes:["co"],tags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595271",healthcare:"pharmacy",name:"Punto Farma"}},"amenity/pharmacy|Punto Farma~(Honduras)":{countryCodes:["hn"],tags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595229",healthcare:"pharmacy",name:"Punto Farma"}},"amenity/pharmacy|Punto Farma~(Paraguay)":{countryCodes:["py"],tags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595220",healthcare:"pharmacy",name:"Punto Farma"}},"amenity/pharmacy|Remedy'sRx":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Remedy'sRx","brand:wikidata":"Q65553833",healthcare:"pharmacy",name:"Remedy'sRx"}},"amenity/pharmacy|Rexall":{countryCodes:["ca","us"],tags:{amenity:"pharmacy",brand:"Rexall","brand:wikidata":"Q7319360","brand:wikipedia":"en:Rexall",healthcare:"pharmacy",name:"Rexall"}},"amenity/pharmacy|Rite Aid":{countryCodes:["us"],matchNames:["rite aid pharmacy"],nomatch:["shop/chemist|Rite Aid"],tags:{amenity:"pharmacy",brand:"Rite Aid","brand:wikidata":"Q3433273","brand:wikipedia":"en:Rite Aid",healthcare:"pharmacy",name:"Rite Aid"}},"amenity/pharmacy|Rose Pharmacy":{countryCodes:["ph"],tags:{amenity:"pharmacy",brand:"Rose Pharmacy","brand:wikidata":"Q62663208",healthcare:"pharmacy",name:"Rose Pharmacy"}},"amenity/pharmacy|Rowlands Pharmacy":{countryCodes:["gb"],tags:{amenity:"pharmacy",brand:"Rowlands Pharmacy","brand:wikidata":"Q62663235",healthcare:"pharmacy",name:"Rowlands Pharmacy"}},"amenity/pharmacy|Safeway":{countryCodes:["us"],nomatch:["amenity/fuel|Safeway","shop/supermarket|Safeway"],tags:{amenity:"pharmacy",brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",healthcare:"pharmacy",name:"Safeway"}},"amenity/pharmacy|SalcoBrand":{countryCodes:["cl"],matchNames:["farmacias salcobrand"],tags:{amenity:"pharmacy",brand:"SalcoBrand","brand:wikidata":"Q2877054","brand:wikipedia":"es:Farmacias Salcobrand",healthcare:"pharmacy",name:"SalcoBrand"}},"amenity/pharmacy|Sana Sana":{countryCodes:["ec"],matchNames:["farmacias sana sana"],tags:{amenity:"pharmacy",brand:"Sana Sana","brand:wikidata":"Q62564499",healthcare:"pharmacy",name:"Sana Sana"}},"amenity/pharmacy|Sensiblu":{countryCodes:["ro"],tags:{amenity:"pharmacy",brand:"Sensiblu","brand:wikidata":"Q12740640","brand:wikipedia":"ro:Sensiblu",healthcare:"pharmacy",name:"Sensiblu"}},"amenity/pharmacy|Shoppers Drug Mart":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Shoppers Drug Mart","brand:wikidata":"Q1820137","brand:wikipedia":"en:Shoppers Drug Mart",healthcare:"pharmacy",name:"Shoppers Drug Mart"}},"amenity/pharmacy|South Star Drug":{countryCodes:["ph"],tags:{amenity:"pharmacy",brand:"South Star Drug","brand:wikidata":"Q7568544","brand:wikipedia":"en:South Star Drug",healthcare:"pharmacy",name:"South Star Drug"}},"amenity/pharmacy|Superdrug":{countryCodes:["gb"],nomatch:["shop/chemist|Superdrug"],tags:{amenity:"pharmacy",brand:"Superdrug","brand:wikidata":"Q7643261","brand:wikipedia":"en:Superdrug",healthcare:"pharmacy",name:"Superdrug"}},"amenity/pharmacy|São João":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"São João","brand:wikidata":"Q62663306",healthcare:"pharmacy",name:"São João"}},"amenity/pharmacy|Słoneczna":{countryCodes:["pl"],tags:{amenity:"pharmacy",brand:"Słoneczna",healthcare:"pharmacy",name:"Słoneczna"}},"amenity/pharmacy|TGP":{countryCodes:["ph"],tags:{amenity:"pharmacy",brand:"The Generics Pharmacy","brand:wikidata":"Q61948677",healthcare:"pharmacy",name:"TGP",official_name:"The Generics Pharmacy"}},"amenity/pharmacy|TerryWhite Chemmart":{countryCodes:["au"],matchNames:["terrywhite","terrywhite chemist","terrywhite chemists"],tags:{amenity:"pharmacy",brand:"TerryWhite Chemmart","brand:wikidata":"Q24089773","brand:wikipedia":"en:Terry White Chemmart",healthcare:"pharmacy",name:"TerryWhite Chemmart"}},"amenity/pharmacy|UFS":{countryCodes:["au"],matchNames:["ufs dispensaries"],tags:{amenity:"pharmacy",brand:"UFS","brand:wikidata":"Q63367573",healthcare:"pharmacy",name:"UFS"}},"amenity/pharmacy|Unichem Pharmacy":{countryCodes:["nz"],tags:{amenity:"pharmacy",brand:"Unichem Pharmacy","brand:wikidata":"Q62663379",healthcare:"pharmacy",name:"Unichem Pharmacy"}},"amenity/pharmacy|Uniprix":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Uniprix","brand:wikidata":"Q683265","brand:wikipedia":"fr:Uniprix (pharmacies)",healthcare:"pharmacy",name:"Uniprix"}},"amenity/pharmacy|Walgreens":{countryCodes:["us"],matchNames:["walgreens pharmacy"],nomatch:["shop/chemist|Walgreens"],tags:{amenity:"pharmacy",brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",healthcare:"pharmacy",name:"Walgreens"}},"amenity/pharmacy|Walmart Pharmacy":{countryCodes:["ca","us"],matchNames:["walmart"],nomatch:["amenity/fuel|Walmart","shop/department_store|Walmart","shop/supermarket|Walmart"],tags:{amenity:"pharmacy",brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",healthcare:"pharmacy",name:"Walmart Pharmacy"}},"amenity/pharmacy|Watsons":{nomatch:["shop/chemist|Watsons"],tags:{amenity:"pharmacy",brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",healthcare:"pharmacy",name:"Watsons"}},"amenity/pharmacy|Well Pharmacy":{countryCodes:["gb"],matchNames:["well"],tags:{amenity:"pharmacy",brand:"Well Pharmacy","brand:wikidata":"Q7726524","brand:wikipedia":"en:Well Pharmacy",healthcare:"pharmacy",name:"Well Pharmacy"}},"amenity/pharmacy|Ziko Apteka":{countryCodes:["pl"],tags:{amenity:"pharmacy",brand:"Ziko Apteka","brand:wikidata":"Q63432892",healthcare:"pharmacy",name:"Ziko Apteka",short_name:"Ziko"}},"amenity/pharmacy|А-мега":{tags:{amenity:"pharmacy",brand:"А-мега",healthcare:"pharmacy",name:"А-мега"}},"amenity/pharmacy|А5":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"А5","brand:wikidata":"Q62663476",healthcare:"pharmacy",name:"А5"}},"amenity/pharmacy|Алоэ":{tags:{amenity:"pharmacy",brand:"Алоэ",healthcare:"pharmacy",name:"Алоэ"}},"amenity/pharmacy|Апрель":{tags:{amenity:"pharmacy",brand:"Апрель",healthcare:"pharmacy",name:"Апрель"}},"amenity/pharmacy|Бажаємо здоров'я":{countryCodes:["ua"],tags:{amenity:"pharmacy",brand:"Бажаємо здоров'я",healthcare:"pharmacy",name:"Бажаємо здоров'я"}},"amenity/pharmacy|Бережная аптека":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Бережная аптека","brand:wikidata":"Q62664194",healthcare:"pharmacy",name:"Бережная аптека"}},"amenity/pharmacy|Будь здоров":{countryCodes:["ru","ua"],tags:{amenity:"pharmacy",brand:"Будь здоров",healthcare:"pharmacy",name:"Будь здоров"}},"amenity/pharmacy|Вита":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Вита",healthcare:"pharmacy",name:"Вита"}},"amenity/pharmacy|Горздрав":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Горздрав",healthcare:"pharmacy",name:"Горздрав"}},"amenity/pharmacy|Добрая аптека":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Добрая аптека",healthcare:"pharmacy",name:"Добрая аптека"}},"amenity/pharmacy|Доктор Столетов":{tags:{amenity:"pharmacy",brand:"Доктор Столетов",healthcare:"pharmacy",name:"Доктор Столетов"}},"amenity/pharmacy|Живика":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Живика",healthcare:"pharmacy",name:"Живика"}},"amenity/pharmacy|Здоровье":{countryCodes:["kz","ru","ua"],tags:{amenity:"pharmacy",brand:"Здоровье",healthcare:"pharmacy",name:"Здоровье"}},"amenity/pharmacy|Зеленая аптека":{countryCodes:["by"],matchTags:["shop/health_food"],tags:{amenity:"pharmacy",brand:"Зеленая аптека",healthcare:"pharmacy",name:"Зеленая аптека"}},"amenity/pharmacy|Имплозия":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Имплозия",healthcare:"pharmacy",name:"Имплозия"}},"amenity/pharmacy|Классика":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Классика",healthcare:"pharmacy",name:"Классика"}},"amenity/pharmacy|Ладушка":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Ладушка",healthcare:"pharmacy",name:"Ладушка"}},"amenity/pharmacy|Максавит":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Максавит",healthcare:"pharmacy",name:"Максавит"}},"amenity/pharmacy|Марешки":{countryCodes:["bg"],tags:{amenity:"pharmacy",brand:"Марешки",healthcare:"pharmacy",name:"Марешки"}},"amenity/pharmacy|Мед-сервіс":{countryCodes:["ua"],tags:{amenity:"pharmacy",brand:"Мед-сервіс",healthcare:"pharmacy",name:"Мед-сервіс"}},"amenity/pharmacy|Мелодия здоровья":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Мелодия здоровья",healthcare:"pharmacy",name:"Мелодия здоровья"}},"amenity/pharmacy|Невис":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Невис",healthcare:"pharmacy",name:"Невис"}},"amenity/pharmacy|Неофарм":{tags:{amenity:"pharmacy",brand:"Неофарм",healthcare:"pharmacy",name:"Неофарм"}},"amenity/pharmacy|Норма":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Норма",healthcare:"pharmacy",name:"Норма"}},"amenity/pharmacy|Озерки":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Озерки",healthcare:"pharmacy",name:"Озерки"}},"amenity/pharmacy|Панацея":{countryCodes:["kz","ru","ua"],tags:{amenity:"pharmacy",brand:"Панацея",healthcare:"pharmacy",name:"Панацея"}},"amenity/pharmacy|Первая помощь":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Первая помощь",healthcare:"pharmacy",name:"Первая помощь"}},"amenity/pharmacy|Планета здоровья":{countryCodes:["by","ru"],tags:{amenity:"pharmacy",brand:"Планета здоровья",healthcare:"pharmacy",name:"Планета здоровья"}},"amenity/pharmacy|Подорожник":{countryCodes:["ua"],tags:{amenity:"pharmacy",brand:"Подорожник",healthcare:"pharmacy",name:"Подорожник"}},"amenity/pharmacy|Пульс":{tags:{amenity:"pharmacy",brand:"Пульс",healthcare:"pharmacy",name:"Пульс"}},"amenity/pharmacy|Радуга":{tags:{amenity:"pharmacy",brand:"Радуга",healthcare:"pharmacy",name:"Радуга"}},"amenity/pharmacy|Ригла":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Ригла","brand:wikidata":"Q4394431","brand:wikipedia":"ru:Ригла",healthcare:"pharmacy",name:"Ригла"}},"amenity/pharmacy|Семейная":{countryCodes:["kz","ru"],tags:{amenity:"pharmacy",brand:"Семейная",healthcare:"pharmacy",name:"Семейная"}},"amenity/pharmacy|Семейная аптека":{countryCodes:["ru","ua"],tags:{amenity:"pharmacy",brand:"Семейная аптека",healthcare:"pharmacy",name:"Семейная аптека"}},"amenity/pharmacy|Социальная аптека":{countryCodes:["ru","ua"],tags:{amenity:"pharmacy",brand:"Социальная аптека",healthcare:"pharmacy",name:"Социальная аптека"}},"amenity/pharmacy|Столички":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Столички",healthcare:"pharmacy",name:"Столички"}},"amenity/pharmacy|Фармакопейка":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Фармакопейка",healthcare:"pharmacy",name:"Фармакопейка"}},"amenity/pharmacy|Фармакор":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Фармакор",healthcare:"pharmacy",name:"Фармакор"}},"amenity/pharmacy|Фармленд":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Фармленд",healthcare:"pharmacy",name:"Фармленд"}},"amenity/pharmacy|Центральная аптека":{countryCodes:["by","kz","ru","uz"],tags:{amenity:"pharmacy",brand:"Центральная аптека",healthcare:"pharmacy",name:"Центральная аптека"}},"amenity/pharmacy|Экона":{tags:{amenity:"pharmacy",brand:"Экона",healthcare:"pharmacy",name:"Экона"}},"amenity/pharmacy|סופר-פארם":{countryCodes:["il"],tags:{amenity:"pharmacy",brand:"סופר-פארם","brand:he":"סופר-פארם","brand:wikidata":"Q13220217","brand:wikipedia":"en:Super-Pharm",healthcare:"pharmacy",name:"סופר-פארם","name:he":"סופר-פארם"}},"amenity/pharmacy|くすりの福太郎":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"くすりの福太郎","brand:en":"Kusurino FUKUTARO","brand:ja":"くすりの福太郎","brand:wikidata":"Q17214460","brand:wikipedia":"ja:くすりの福太郎",healthcare:"pharmacy",name:"くすりの福太郎","name:en":"Kusurino Fukutaro","name:ja":"くすりの福太郎"}},"amenity/pharmacy|さくら薬局":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"さくら薬局","brand:ja":"さくら薬局",healthcare:"pharmacy",name:"さくら薬局","name:en":"Sakura Pharmacy","name:ja":"さくら薬局"}},"amenity/pharmacy|ウェルパーク":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ウェルパーク","brand:ja":"ウェルパーク","brand:wikidata":"Q11288610","brand:wikipedia":"ja:ウェルパーク",healthcare:"pharmacy",name:"ウェルパーク","name:en":"Welpark","name:ja":"ウェルパーク"}},"amenity/pharmacy|ウエルシア":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ウエルシア","brand:en":"Welcia","brand:ja":"ウエルシア","brand:wikidata":"Q11288684","brand:wikipedia":"ja:ウエルシアホールディングス",healthcare:"pharmacy",name:"ウエルシア","name:en":"Welcia","name:ja":"ウエルシア"}},"amenity/pharmacy|ウエルシア薬局":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ウエルシア薬局","brand:en":"Welcia Yakkyoku","brand:ja":"ウエルシア薬局","brand:wikidata":"Q11288687","brand:wikipedia":"ja:ウエルシア薬局",healthcare:"pharmacy",name:"ウエルシア薬局","name:en":"Welcia Yakkyoku","name:ja":"ウエルシア薬局"}},"amenity/pharmacy|カワチ薬品":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"カワチ薬品","brand:en":"Cawachi","brand:ja":"カワチ薬品","brand:wikidata":"Q11295397","brand:wikipedia":"ja:カワチ薬品",healthcare:"pharmacy",name:"カワチ薬品","name:en":"Cawachi","name:ja":"カワチ薬品"}},"amenity/pharmacy|キリン堂":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"キリン堂","brand:en":"Kirindo","brand:ja":"キリン堂","brand:wikidata":"Q11297751","brand:wikipedia":"ja:キリン堂",healthcare:"pharmacy",name:"キリン堂","name:en":"Kirindo","name:ja":"キリン堂"}},"amenity/pharmacy|クスリのアオキ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"クスリのアオキ","brand:en":"Kusuri no Aoki","brand:ja":"クスリのアオキ","brand:wikidata":"Q11298661","brand:wikipedia":"ja:クスリのアオキ",healthcare:"pharmacy",name:"クスリのアオキ","name:en":"Kusuri no Aoki","name:ja":"クスリのアオキ"}},"amenity/pharmacy|クリエイト":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"クリエイト","brand:en":"Create","brand:ja":"クリエイト","brand:wikidata":"Q17215731","brand:wikipedia":"ja:クリエイト",healthcare:"pharmacy",name:"クリエイト","name:en":"Create","name:ja":"クリエイト"}},"amenity/pharmacy|クリエイトSD":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"クリエイトSD","brand:en":"CreateSD","brand:ja":"クリエイトSD","brand:wikidata":"Q11299163","brand:wikipedia":"ja:クリエイトSDホールディングス",healthcare:"pharmacy",name:"クリエイトSD","name:en":"CreateSD","name:ja":"クリエイトSD"}},"amenity/pharmacy|コクミン":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"コクミン","brand:en":"Kokumin","brand:ja":"コクミン","brand:wikidata":"Q11301923","brand:wikipedia":"ja:コクミン",healthcare:"pharmacy",name:"コクミン","name:en":"Kokumin","name:ja":"コクミン",official_name:"コクミンドラッグ","official_name:en":"Kokumin Drug","official_name:ja":"コクミンドラッグ"}},"amenity/pharmacy|ココカラファイン":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ココカラファイン","brand:en":"Cocokara Fine","brand:ja":"ココカラファイン","brand:wikidata":"Q11301948","brand:wikipedia":"ja:ココカラファイン",healthcare:"pharmacy",name:"ココカラファイン","name:en":"Cocokara Fine","name:ja":"ココカラファイン"}},"amenity/pharmacy|サツドラ":{countryCodes:["jp"],matchNames:["サッポロドラッグストアー"],tags:{"alt_name:en":"Satsudora",amenity:"pharmacy",brand:"サツドラ","brand:en":"Sapporo Drug Store","brand:ja":"サツドラ","brand:wikidata":"Q11304804",healthcare:"pharmacy",name:"サツドラ","name:en":"Sapporo Drug Store","name:ja":"サツドラ"}},"amenity/pharmacy|サンドラッグ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"サンドラッグ","brand:en":"Sundrug","brand:ja":"サンドラッグ","brand:wikidata":"Q11305867","brand:wikipedia":"ja:サンドラッグ",healthcare:"pharmacy",name:"サンドラッグ","name:en":"Sundrug","name:ja":"サンドラッグ"}},"amenity/pharmacy|スギ薬局":{countryCodes:["jp"],nomatch:["shop/chemist|スギ薬局"],tags:{amenity:"pharmacy",brand:"スギ薬局","brand:en":"Sugi Pharmacy","brand:ja":"スギ薬局","brand:wikidata":"Q11311460","brand:wikipedia":"ja:スギ薬局",healthcare:"pharmacy",name:"スギ薬局","name:en":"Sugi Pharmacy","name:ja":"スギ薬局"}},"amenity/pharmacy|セイジョー":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"セイジョー","brand:en":"Seijo","brand:ja":"セイジョー","brand:wikidata":"Q11314133","brand:wikipedia":"ja:セイジョー",healthcare:"pharmacy",name:"セイジョー","name:en":"Seijo","name:ja":"セイジョー"}},"amenity/pharmacy|ダイコクドラッグ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ダイコクドラッグ","brand:en":"Daikoku Drug","brand:ja":"ダイコクドラッグ","brand:wikidata":"Q11316754","brand:wikipedia":"ja:ダイコク",healthcare:"pharmacy",name:"ダイコクドラッグ","name:en":"Daikoku Drug","name:ja":"ダイコクドラッグ"}},"amenity/pharmacy|ツルハドラッグ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ツルハドラッグ","brand:en":"Tsuruha","brand:ja":"ツルハドラッグ","brand:wikidata":"Q11318826","brand:wikipedia":"ja:ツルハ",healthcare:"pharmacy",name:"ツルハドラッグ","name:en":"Tsuruha","name:ja":"ツルハドラッグ"}},"amenity/pharmacy|トモズ":{countryCodes:["jp"],matchNames:["トモズエキスプレス"],tags:{amenity:"pharmacy",brand:"トモズ","brand:en":"Tomod's","brand:ja":"トモズ","brand:wikidata":"Q7820097","brand:wikipedia":"ja:トモズ",healthcare:"pharmacy",name:"トモズ","name:en":"Tomod's","name:ja":"トモズ"}},"amenity/pharmacy|ドラッグイレブン":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ドラッグイレブン","brand:en":"Drug Eleven","brand:ja":"ドラッグイレブン","brand:wikidata":"Q11323075","brand:wikipedia":"ja:ドラッグイレブン",healthcare:"pharmacy",name:"ドラッグイレブン","name:en":"Drug Eleven","name:ja":"ドラッグイレブン"}},"amenity/pharmacy|ドラッグセイムス":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ドラッグセイムス","brand:en":"Seims","brand:ja":"ドラッグセイムス","brand:wikidata":"Q11456137","brand:wikipedia":"ja:富士薬品",healthcare:"pharmacy",name:"ドラッグセイムス","name:en":"Drug Seims","name:ja":"ドラッグセイムス"}},"amenity/pharmacy|マツモトキヨシ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"マツモトキヨシ","brand:en":"Matsukiyo","brand:ja":"マツモトキヨシ","brand:wikidata":"Q8014776","brand:wikipedia":"ja:マツモトキヨシ",healthcare:"pharmacy",name:"マツモトキヨシ","name:en":"Matsukiyo","name:ja":"マツモトキヨシ"}},"amenity/pharmacy|丁丁藥局":{nomatch:["shop/chemist|丁丁藥局"],tags:{amenity:"pharmacy",brand:"丁丁藥局",healthcare:"pharmacy",name:"丁丁藥局"}},"amenity/pharmacy|屈臣氏":{nomatch:["shop/chemist|屈臣氏"],tags:{amenity:"pharmacy",brand:"屈臣氏",healthcare:"pharmacy",name:"屈臣氏"}},"amenity/post_office|Australia Post":{countryCodes:["au"],tags:{amenity:"post_office",brand:"Australia Post","brand:wikidata":"Q1142936","brand:wikipedia":"en:Australia Post",name:"Australia Post"}},"amenity/post_office|CTT~(Macau)":{countryCodes:["mo"],nomatch:["amenity/post_office|CTT~(Portugal)"],tags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q909429","brand:wikipedia":"en:CTT (Macau)",name:"CTT"}},"amenity/post_office|CTT~(Portugal)":{countryCodes:["pt"],nomatch:["amenity/post_office|CTT~(Macau)"],tags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q1024518","brand:wikipedia":"en:CTT Correios de Portugal, S.A.",name:"CTT"}},"amenity/post_office|Canada Post":{countryCodes:["ca"],nomatch:["amenity/post_box|Canada Post"],tags:{amenity:"post_office",brand:"Canada Post","brand:wikidata":"Q1032001","brand:wikipedia":"en:Canada Post",name:"Canada Post"}},"amenity/post_office|Chilexpress":{countryCodes:["cl"],tags:{amenity:"post_office",brand:"Chilexpress",name:"Chilexpress"}},"amenity/post_office|Correios":{countryCodes:["br"],tags:{amenity:"post_office",brand:"Correios","brand:wikidata":"Q3375004","brand:wikipedia":"en:Correios",name:"Correios"}},"amenity/post_office|Correo Argentino":{countryCodes:["ar"],tags:{amenity:"post_office",brand:"Correo Argentino","brand:wikidata":"Q4036566","brand:wikipedia":"en:Correo Argentino",name:"Correo Argentino"}},"amenity/post_office|Correos de Chile":{countryCodes:["cl"],tags:{amenity:"post_office",brand:"Correos de Chile","brand:wikidata":"Q5172893","brand:wikipedia":"en:Correos de Chile",name:"Correos de Chile"}},"amenity/post_office|Correos de Costa Rica":{countryCodes:["cr"],tags:{amenity:"post_office",brand:"Correos de Costa Rica","brand:wikidata":"Q5172894","brand:wikipedia":"en:Correos de Costa Rica",name:"Correos de Costa Rica"}},"amenity/post_office|Correos de México":{countryCodes:["mx"],tags:{amenity:"post_office",brand:"Correos de México","brand:wikidata":"Q5172898","brand:wikipedia":"en:Correos de México",name:"Correos de México"}},"amenity/post_office|DHL":{matchNames:["dhl paketshop"],tags:{amenity:"post_office",brand:"DHL","brand:wikidata":"Q489815","brand:wikipedia":"en:DHL",name:"DHL"}},"amenity/post_office|DPD Paketshop":{countryCodes:["at","de","pl"],tags:{amenity:"post_office",brand:"DPD Paketshop","brand:wikidata":"Q541030","brand:wikipedia":"en:DPDgroup",name:"DPD Paketshop"}},"amenity/post_office|Deutsche Post":{countryCodes:["de"],matchNames:["deutsche post ag","deutsche post filiale"],tags:{amenity:"post_office",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"}},"amenity/post_office|Fancourier":{countryCodes:["ro"],tags:{amenity:"post_office",brand:"Fancourier","brand:wikidata":"Q12727984","brand:wikipedia":"ro:FAN Courier Express",name:"Fancourier"}},"amenity/post_office|FedEx":{nomatch:["amenity/post_box|FedEx"],tags:{amenity:"post_office",brand:"FedEx","brand:wikidata":"Q459477","brand:wikipedia":"en:FedEx",name:"FedEx"}},"amenity/post_office|Hermes Paketshop":{countryCodes:["de"],matchNames:["hermes"],tags:{amenity:"post_office",brand:"Hermes Paketshop","brand:wikidata":"Q1613532","brand:wikipedia":"en:Hermes Group",name:"Hermes Paketshop"}},"amenity/post_office|LBC":{countryCodes:["ph"],matchNames:["lbc express"],tags:{amenity:"post_office",brand:"LBC","brand:wikidata":"Q17075584","brand:wikipedia":"en:LBC Express",name:"LBC"}},"amenity/post_office|La Poste":{tags:{amenity:"post_office",brand:"La Poste","brand:wikidata":"Q373724","brand:wikipedia":"fr:La Poste (entreprise française)",name:"La Poste"}},"amenity/post_office|MRW":{countryCodes:["ad","es","gi","pt","ve"],tags:{amenity:"post_office",brand:"MRW","brand:wikidata":"Q23767821","brand:wikipedia":"es:MRW",name:"MRW"}},"amenity/post_office|Mail Boxes Etc.":{tags:{amenity:"post_office",brand:"Mail Boxes Etc.","brand:wikidata":"Q1139182","brand:wikipedia":"en:Mail Boxes Etc.",name:"Mail Boxes Etc."}},"amenity/post_office|OCA":{countryCodes:["ar"],tags:{amenity:"post_office",brand:"OCA","brand:wikidata":"Q5172887","brand:wikipedia":"es:Correo OCA",name:"OCA"}},"amenity/post_office|Oficina de Correos":{countryCodes:["es"],matchNames:["correos"],tags:{amenity:"post_office",brand:"Oficina de Correos","brand:wikidata":"Q776605","brand:wikipedia":"es:Correos (España)",name:"Oficina de Correos"}},"amenity/post_office|PHLPost":{countryCodes:["ph"],matchNames:["phl"],tags:{amenity:"post_office",brand:"PHLPost","brand:wikidata":"Q1406037","brand:wikipedia":"en:Philippine Postal Corporation",name:"PHLPost",official_name:"Philippine Postal Corporation"}},"amenity/post_office|PTT":{nomatch:["amenity/fuel|PTT"],tags:{amenity:"post_office",brand:"PTT",name:"PTT"}},"amenity/post_office|Poczta Polska":{countryCodes:["pl"],tags:{amenity:"post_office",brand:"Poczta Polska","brand:wikidata":"Q168833","brand:wikipedia":"pl:Poczta Polska",name:"Poczta Polska"}},"amenity/post_office|Post Office~(UK)":{countryCodes:["gb"],tags:{amenity:"post_office",brand:"Post Office","brand:wikidata":"Q1783168","brand:wikipedia":"en:Post Office Ltd",name:"Post Office"}},"amenity/post_office|PostalAnnex":{countryCodes:["us"],matchTags:["shop/post_office"],tags:{amenity:"post_office",brand:"PostalAnnex","brand:wikidata":"Q61960357",name:"PostalAnnex"}},"amenity/post_office|Postbank Finanzcenter":{tags:{amenity:"post_office",brand:"Postbank Finanzcenter",name:"Postbank Finanzcenter"}},"amenity/post_office|Poste Italiane":{countryCodes:["it"],tags:{amenity:"post_office",brand:"Poste Italiane","brand:wikidata":"Q495026","brand:wikipedia":"en:Poste italiane",name:"Poste Italiane"}},"amenity/post_office|Posti":{tags:{amenity:"post_office",brand:"Posti",name:"Posti"}},"amenity/post_office|Serpost":{countryCodes:["pe"],matchNames:["servicios postales del perú"],matchTags:["shop/post_office"],tags:{amenity:"post_office",brand:"Serpost","brand:wikidata":"Q19521863","brand:wikipedia":"es:Servicios Postales del Perú",name:"Serpost"}},"amenity/post_office|Servientrega":{tags:{amenity:"post_office",brand:"Servientrega",name:"Servientrega"}},"amenity/post_office|Slovenská pošta":{countryCodes:["sk"],tags:{amenity:"post_office",brand:"Slovenská pošta","brand:wikidata":"Q1191849","brand:wikipedia":"en:Slovenská pošta",name:"Slovenská pošta"}},"amenity/post_office|The UPS Store":{countryCodes:["ca","us"],matchNames:["ups store"],matchTags:["shop/copyshop"],nomatch:["amenity/post_box|UPS"],tags:{amenity:"post_office",brand:"The UPS Store","brand:wikidata":"Q7771029","brand:wikipedia":"en:The UPS Store",name:"The UPS Store",short_name:"UPS"}},"amenity/post_office|United States Post Office":{countryCodes:["us"],matchNames:["united states postal service","us post office","us postal service","usps","usps post office"],tags:{amenity:"post_office",brand:"United States Post Office","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"United States Post Office"}},"amenity/post_office|ΕΛΤΑ":{countryCodes:["gr"],tags:{amenity:"post_office",brand:"ΕΛΤΑ","brand:wikidata":"Q1275135","brand:wikipedia":"el:Ελληνικά Ταχυδρομεία",name:"ΕΛΤΑ"}},"amenity/post_office|Белпошта":{countryCodes:["by"],matchNames:["белпочта"],tags:{amenity:"post_office",brand:"Белпошта","brand:be":"Белпошта","brand:en":"Belposhta","brand:ru":"Белпочта","brand:wikidata":"Q2662336","brand:wikipedia":"be:Белпошта",name:"Белпошта","name:be":"Белпошта","name:en":"Belposhta","name:ru":"Белпочта"}},"amenity/post_office|Казпочта":{countryCodes:["kz"],tags:{amenity:"post_office",brand:"Казпочта","brand:wikidata":"Q746263","brand:wikipedia":"ru:Казпочта",name:"Казпочта"}},"amenity/post_office|Нова Пошта":{countryCodes:["ua"],matchNames:["нова пошта №1","нова пошта №2","нова пошта №3","нова пошта №4"],tags:{amenity:"post_office",brand:"Нова Пошта","brand:wikidata":"Q12133863","brand:wikipedia":"uk:Нова пошта",name:"Нова Пошта"}},"amenity/post_office|Почта России":{countryCodes:["ru"],tags:{amenity:"post_office",brand:"Почта России","brand:wikidata":"Q1502763","brand:wikipedia":"ru:Почта России",name:"Почта России"}},"amenity/post_office|СДЭК":{countryCodes:["ru"],tags:{amenity:"post_office",brand:"СДЭК","brand:wikidata":"Q28665980","brand:wikipedia":"ru:СДЭК",name:"СДЭК"}},"amenity/post_office|Укрпошта":{countryCodes:["ua"],tags:{amenity:"post_office",brand:"Укрпошта","brand:wikidata":"Q2470783","brand:wikipedia":"en:Ukrposhta",name:"Укрпошта"}},"amenity/post_office|中国邮政":{countryCodes:["cn"],tags:{amenity:"post_office",brand:"中国邮政","brand:en":"China Post","brand:wikidata":"Q1066476","brand:wikipedia":"en:China Post",name:"中国邮政","name:en":"China Post"}},"amenity/prep_school|Huntington Learning Center":{countryCodes:["us"],matchNames:["huntington"],tags:{amenity:"prep_school",brand:"Huntington Learning Center","brand:wikidata":"Q5945399","brand:wikipedia":"en:Huntington Learning Center",name:"Huntington Learning Center"}},"amenity/prep_school|KUMON~(Japan)":{countryCodes:["jp"],matchNames:["くもん","公文"],tags:{amenity:"prep_school",brand:"KUMON","brand:wikidata":"Q142054","brand:wikipedia":"ja:日本公文教育研究会",name:"KUMON","name:ja":"公文","name:ja-Hira":"くもん","name:ja-Latn":"KUMON"}},"amenity/prep_school|Kumon~(International)":{matchNames:["kumon learning center"],tags:{amenity:"prep_school",brand:"Kumon","brand:wikidata":"Q142054","brand:wikipedia":"en:Kumon",name:"Kumon"}},"amenity/prep_school|Mathnasium":{countryCodes:["ca","us"],matchNames:["mathnasium learning center"],matchTags:["office/educational_institution"],tags:{amenity:"prep_school",brand:"Mathnasium","brand:wikidata":"Q6787302","brand:wikipedia":"en:Mathnasium",name:"Mathnasium"}},"amenity/prep_school|Russian School of Mathematics":{countryCodes:["us"],matchNames:["rsm","russian school of math"],tags:{amenity:"prep_school",brand:"Russian School of Mathematics","brand:wikidata":"Q7382122","brand:wikipedia":"en:Russian School of Mathematics",name:"Russian School of Mathematics"}},"amenity/prep_school|Sylvan":{countryCodes:["us"],matchNames:["sylvan learning"],tags:{alt_name:"Sylvan Learning Center",amenity:"prep_school",brand:"Sylvan","brand:wikidata":"Q7660663","brand:wikipedia":"en:Sylvan Learning",name:"Sylvan"}},"amenity/prep_school|栄光ゼミナール":{countryCodes:["jp"],matchNames:["eikoh"],tags:{amenity:"prep_school",brand:"栄光ゼミナール","brand:ja":"栄光ゼミナール","brand:ja-Hira":"えいこうゼミナール","brand:ja-Latn":"Eikō Zemināru","brand:wikidata":"Q11535632","brand:wikipedia":"ja:栄光ゼミナール",name:"栄光ゼミナール","name:en":"Eikoh Seminar","name:ja":"栄光ゼミナール","name:ja-Hira":"えいこうゼミナール","name:ja-Latn":"Eikō Zemināru"}},"amenity/pub|Ezītis miglā":{countryCodes:["lv"],tags:{amenity:"pub",brand:"Ezītis miglā",name:"Ezītis miglā"}},"amenity/pub|Walkabout":{countryCodes:["gb"],tags:{amenity:"pub",brand:"Walkabout","brand:wikidata":"Q7962149","brand:wikipedia":"en:Walkabout (pub chain)",name:"Walkabout"}},"amenity/public_bookcase|Little Free Library":{tags:{amenity:"public_bookcase",brand:"Little Free Library","brand:wikidata":"Q6650101","brand:wikipedia":"en:Little Free Library",name:"Little Free Library"}},"amenity/recycling|Planet Aid":{countryCodes:["us"],tags:{amenity:"recycling",brand:"Planet Aid","brand:wikidata":"Q7201055","brand:wikipedia":"en:Planet Aid",name:"Planet Aid","recycling:clothes":"yes","recycling:shoes":"yes",recycling_type:"container"}},"amenity/recycling|Saint Vincent de Paul":{countryCodes:["us"],matchNames:["st vincent de paul"],tags:{amenity:"recycling",brand:"Saint Vincent de Paul","brand:wikidata":"Q66581837",name:"Saint Vincent de Paul","recycling:clothes":"yes","recycling:shoes":"yes",short_name:"SVdP"}},"amenity/recycling|The Salvation Army":{countryCodes:["us"],matchNames:["salvation army"],nomatch:["shop/charity|The Salvation Army"],tags:{amenity:"recycling",brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army","recycling:clothes":"yes"}},"amenity/restaurant|100 Montaditos":{countryCodes:["es","it","pt"],tags:{amenity:"restaurant",brand:"100 Montaditos","brand:wikidata":"Q8355805","brand:wikipedia":"en:Cervecería 100 Montaditos",cuisine:"sandwich",name:"100 Montaditos"}},"amenity/restaurant|3 Brewers~(On)":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"3 Brasseurs","brand:wikidata":"Q3230326","brand:wikipedia":"fr:Les 3 Brasseurs",cuisine:"burger;pizza;seafood",name:"3 Brewers","name:fr":"3 Brasseurs",official_name:"Les 3 Brasseurs"}},"amenity/restaurant|ASK Italian":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"ASK Italian","brand:wikidata":"Q4807056","brand:wikipedia":"en:ASK Italian",cuisine:"italian",name:"ASK Italian"}},"amenity/restaurant|Amici's East Coast Pizzeria":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Amici","brand:wikidata":"Q66133409",cuisine:"pizza",name:"Amici"}},"amenity/restaurant|Applebee's":{matchNames:["applebees bar and grill","applebees grill and bar","applebees neighborhood bar and grill"],tags:{amenity:"restaurant",brand:"Applebee's Neighborhood Grill & Bar","brand:wikidata":"Q621532","brand:wikipedia":"en:Applebee's",cuisine:"american",name:"Applebee's",official_name:"Applebee's Neighborhood Grill & Bar"}},"amenity/restaurant|Arooga's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Arooga's","brand:wikidata":"Q72963322",cuisine:"american",name:"Arooga's",official_name:"Arooga's Grille House and Sports Bar"}},"amenity/restaurant|Au Bureau":{tags:{amenity:"restaurant",brand:"Au Bureau",name:"Au Bureau"}},"amenity/restaurant|Autogrill":{countryCodes:["at","es","fr","it"],tags:{amenity:"restaurant",brand:"Autogrill","brand:wikidata":"Q786790","brand:wikipedia":"en:Autogrill",cuisine:"italian;regional",name:"Autogrill"}},"amenity/restaurant|BBB":{countryCodes:["il"],tags:{alt_name:"Burgus Burger Bar","alt_name:en":"Burgus Burger Bar",amenity:"restaurant",brand:"Burgus Burger Bar","brand:en":"Burgus Burger Bar","brand:wikidata":"Q64760094",cuisine:"burger",name:"BBB","name:en":"BBB"}},"amenity/restaurant|BJ's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"BJ's","brand:wikidata":"Q4835755","brand:wikipedia":"en:BJ's Restaurants",cuisine:"american",name:"BJ's",official_name:"BJ's Restaurant & Brewhouse"}},"amenity/restaurant|Bella Italia":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Bella Italia","brand:wikidata":"Q4883362","brand:wikipedia":"en:Bella Italia",cuisine:"italian",name:"Bella Italia"}},"amenity/restaurant|Benihana":{countryCodes:["aw","br","ca","pa","sv","us"],matchNames:["benihana of tokyo"],tags:{amenity:"restaurant",brand:"Benihana","brand:wikidata":"Q4887996","brand:wikipedia":"en:Benihana",cuisine:"japanese;teppanyaki;steak",name:"Benihana"}},"amenity/restaurant|Bertucci's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Bertucci's","brand:wikidata":"Q4895917","brand:wikipedia":"en:Bertucci's",cuisine:"pizza;italian",name:"Bertucci's"}},"amenity/restaurant|Big Boy":{tags:{amenity:"restaurant",brand:"Big Boy","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",cuisine:"burger",name:"Big Boy",official_name:"Big Boy Restaurant & Bakery"}},"amenity/restaurant|Bill's":{countryCodes:["gb"],matchTags:["amenity/bar","amenity/pub"],tags:{amenity:"restaurant",brand:"Bill's","brand:wikidata":"Q47012702","brand:wikipedia":"en:Bill's",cuisine:"british",name:"Bill's"}},"amenity/restaurant|Black":{countryCodes:["il"],tags:{amenity:"restaurant",brand:"Black Bar Burger","brand:en":"Black Bar Burger","brand:he":"בלאק בורגר","brand:wikidata":"Q64760158",cuisine:"burger",name:"Black","name:en":"Black","name:he":"בלאק"}},"amenity/restaurant|Black Angus":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Black Angus","brand:wikidata":"Q4920269","brand:wikipedia":"en:Black Angus Steakhouse",cuisine:"steakhouse",name:"Black Angus"}},"amenity/restaurant|Black Bear Diner":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Black Bear Diner","brand:wikidata":"Q4920343","brand:wikipedia":"en:Black Bear Diner",cuisine:"american",name:"Black Bear Diner"}},"amenity/restaurant|Blaze Pizza":{countryCodes:["bh","ca","kw","sa","us"],tags:{amenity:"restaurant",brand:"Blaze Pizza","brand:wikidata":"Q23016666","brand:wikipedia":"en:Blaze Pizza",cuisine:"pizza",name:"Blaze Pizza"}},"amenity/restaurant|Bob Evans":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Bob Evans","brand:wikidata":"Q4932386","brand:wikipedia":"en:Bob Evans Restaurants",cuisine:"american",name:"Bob Evans"}},"amenity/restaurant|Bonanza Steakhouse":{countryCodes:["us"],matchNames:["bonanza"],tags:{amenity:"restaurant",brand:"Bonanza Steakhouse","brand:wikidata":"Q64045992",cuisine:"american;steak;buffet",name:"Bonanza Steakhouse"}},"amenity/restaurant|Bonchon Chicken":{countryCodes:["bh","kh","kr","kw","my","ph","sg","th","us"],tags:{amenity:"restaurant",brand:"Bonchon Chicken","brand:wikidata":"Q4941248","brand:wikipedia":"en:Bonchon Chicken",cuisine:"chicken;korean;sushi",name:"Bonchon Chicken"}},"amenity/restaurant|Bonefish Grill":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Bonefish Grill","brand:wikidata":"Q4941599","brand:wikipedia":"en:Bonefish Grill",cuisine:"seafood",name:"Bonefish Grill"}},"amenity/restaurant|Boston Pizza":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Boston Pizza","brand:wikidata":"Q894578","brand:wikipedia":"en:Boston Pizza",cuisine:"pizza",name:"Boston Pizza"}},"amenity/restaurant|Bravo":{countryCodes:["us"],nomatch:["shop/supermarket|Bravo"],tags:{alt_name:"Bravo Cucina Italiana",amenity:"restaurant",brand:"Bravo","brand:wikidata":"Q64055574",cuisine:"italian",name:"Bravo"}},"amenity/restaurant|Brewers Fayre":{countryCodes:["gb"],matchTags:["amenity/pub"],tags:{amenity:"restaurant",brand:"Brewers Fayre","brand:wikidata":"Q4962678","brand:wikipedia":"en:Brewers Fayre",name:"Brewers Fayre"}},"amenity/restaurant|Brio":{countryCodes:["us"],tags:{alt_name:"Brio Tuscan Grille",amenity:"restaurant",brand:"Brio","brand:wikidata":"Q64055835",cuisine:"italian",name:"Brio"}},"amenity/restaurant|Bubba Gump Shrimp Company":{countryCodes:["ca","co","gb","hk","id","jp","mp","mx","ph","us"],tags:{amenity:"restaurant",brand:"Bubba Gump Shrimp Company","brand:wikidata":"Q50024","brand:wikipedia":"en:Bubba Gump Shrimp Company",cuisine:"seafood",name:"Bubba Gump Shrimp Company"}},"amenity/restaurant|Buca di Beppo":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Buca di Beppo","brand:wikidata":"Q4982340","brand:wikipedia":"en:Buca di Beppo",cuisine:"italian",name:"Buca di Beppo"}},"amenity/restaurant|Bucking Bull":{countryCodes:["au"],tags:{amenity:"restaurant",brand:"Bucking Bull","brand:wikidata":"Q18208286","brand:wikipedia":"en:Bucking Bull",cuisine:"steak_house",name:"Bucking Bull"}},"amenity/restaurant|Buffalo Grill":{countryCodes:["es","fr"],tags:{amenity:"restaurant",brand:"Buffalo Grill","brand:wikidata":"Q944655","brand:wikipedia":"en:Buffalo Grill",cuisine:"steak_house",name:"Buffalo Grill"}},"amenity/restaurant|Buffalo Wild Wings":{tags:{amenity:"restaurant",brand:"Buffalo Wild Wings","brand:wikidata":"Q509255","brand:wikipedia":"en:Buffalo Wild Wings",cuisine:"wings",name:"Buffalo Wild Wings"}},"amenity/restaurant|Buffalo Wings & Rings":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Buffalo Wings & Rings","brand:wikidata":"Q4985900","brand:wikipedia":"en:Buffalo Wings & Rings",cuisine:"wings",name:"Buffalo Wings & Rings",takeaway:"yes"}},"amenity/restaurant|Byron":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Byron","brand:wikidata":"Q16828673","brand:wikipedia":"en:Byron Hamburgers",cuisine:"burger",name:"Byron"}},"amenity/restaurant|Cafe Rio":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Cafe Rio","brand:wikidata":"Q5017108","brand:wikipedia":"en:Cafe Rio",cuisine:"mexican",name:"Cafe Rio"}},"amenity/restaurant|Café Rouge":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Café Rouge","brand:wikidata":"Q5017261","brand:wikipedia":"en:Café Rouge",cuisine:"french",name:"Café Rouge"}},"amenity/restaurant|California Pizza Kitchen":{tags:{amenity:"restaurant",brand:"California Pizza Kitchen","brand:wikidata":"Q15109854","brand:wikipedia":"en:California Pizza Kitchen",cuisine:"pizza",name:"California Pizza Kitchen"}},"amenity/restaurant|Campanile":{countryCodes:["fr","gb","nl"],tags:{amenity:"restaurant",brand:"Campanile","brand:wikidata":"Q2412064","brand:wikipedia":"fr:Campanile (chaîne d'hôtels)",cuisine:"french",name:"Campanile"}},"amenity/restaurant|Carluccio's":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Carluccio's","brand:wikidata":"Q25111797","brand:wikipedia":"en:Carluccio's Ltd",cuisine:"italian",name:"Carluccio's"}},"amenity/restaurant|Carrabba's Italian Grill":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Carrabba's Italian Grill","brand:wikidata":"Q5045999","brand:wikipedia":"en:Carrabba's Italian Grill",cuisine:"italian",name:"Carrabba's Italian Grill"}},"amenity/restaurant|Cheddar's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Cheddar's","brand:wikidata":"Q5089187","brand:wikipedia":"en:Cheddar's Scratch Kitchen",cuisine:"american",name:"Cheddar's",official_name:"Cheddar's Scratch Kitchen"}},"amenity/restaurant|Cheeburger Cheeburger":{countryCodes:["ca","sa","us"],tags:{amenity:"restaurant",brand:"Cheeburger Cheeburger","brand:wikidata":"Q5089247","brand:wikipedia":"en:Cheeburger Cheeburger",cuisine:"burger",name:"Cheeburger Cheeburger"}},"amenity/restaurant|Chevys":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Chevys Fresh Mex","brand:wikidata":"Q5094466","brand:wikipedia":"en:Chevys Fresh Mex",cuisine:"mexican",name:"Chevys",official_name:"Chevys Fresh Mex"}},"amenity/restaurant|Chili's":{tags:{amenity:"restaurant",brand:"Chili's","brand:wikidata":"Q1072948","brand:wikipedia":"en:Chili's",cuisine:"tex-mex",name:"Chili's",official_name:"Chili's Grill & Bar"}},"amenity/restaurant|China Palace":{tags:{amenity:"restaurant",brand:"China Palace",name:"China Palace"}},"amenity/restaurant|Chiquito":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Chiquito","brand:wikidata":"Q5101775","brand:wikipedia":"en:Chiquito (restaurant)",cuisine:"tex-mex",name:"Chiquito"}},"amenity/restaurant|Chuck E. Cheese's":{countryCodes:["ca","us"],matchNames:["chuck e cheese"],matchTags:["leisure/amusement_arcade"],tags:{amenity:"restaurant",brand:"Chuck E. Cheese's","brand:wikidata":"Q2438391","brand:wikipedia":"en:Chuck E. Cheese's",cuisine:"pizza",leisure:"amusement_arcade",name:"Chuck E. Cheese's"}},"amenity/restaurant|Chuy's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Chuy's","brand:wikidata":"Q5118415","brand:wikipedia":"en:Chuy's",cuisine:"tex-mex",name:"Chuy's"}},"amenity/restaurant|Cici's Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Cici's Pizza","brand:wikidata":"Q2972189","brand:wikipedia":"en:Cicis",cuisine:"pizza;buffet",name:"Cici's Pizza"}},"amenity/restaurant|Claim Jumper":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Claim Jumper","brand:wikidata":"Q5125081","brand:wikipedia":"en:Claim Jumper",cuisine:"american",name:"Claim Jumper"}},"amenity/restaurant|Coast to Coast":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Coast to Coast","brand:wikidata":"Q22000729","brand:wikipedia":"en:Coast to Coast (restaurant)",cuisine:"american",name:"Coast to Coast"}},"amenity/restaurant|Copeland's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Copeland's","brand:wikidata":"Q5168346","brand:wikipedia":"en:Copeland's",cuisine:"american",name:"Copeland's"}},"amenity/restaurant|Cora~(Quebec)":{countryCodes:["ca"],nomatch:["amenity/restaurant|Cora~(non-Quebec)","shop/supermarket|Cora"],tags:{amenity:"restaurant",brand:"Cora","brand:wikidata":"Q2996960","brand:wikipedia":"fr:Cora (chaîne de restaurants)",cuisine:"breakfast",name:"Cora"}},"amenity/restaurant|Cora~(non-Quebec)":{countryCodes:["ca"],nomatch:["amenity/restaurant|Cora~(Quebec)","shop/supermarket|Cora"],tags:{amenity:"restaurant",brand:"Cora","brand:wikidata":"Q2996960","brand:wikipedia":"en:Cora (restaurant)",cuisine:"breakfast",name:"Cora"}},"amenity/restaurant|Cosmo":{countryCodes:["gb","ie"],nomatch:["amenity/fuel|Cosmo"],tags:{amenity:"restaurant",brand:"Cosmo","brand:wikidata":"Q5174239","brand:wikipedia":"en:Cosmo (restaurant)",cuisine:"international",name:"Cosmo"}},"amenity/restaurant|Country Pride":{countryCodes:["us"],matchNames:["country pride restaurant"],tags:{amenity:"restaurant",brand:"Country Pride","brand:wikidata":"Q64051992",cuisine:"american",name:"Country Pride"}},"amenity/restaurant|Courtepaille":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Courtepaille","brand:wikidata":"Q3116688","brand:wikipedia":"fr:Grill Courtepaille",cuisine:"french",name:"Courtepaille"}},"amenity/restaurant|Cracker Barrel":{countryCodes:["us"],nomatch:["shop/gift|Cracker Barrel"],tags:{amenity:"restaurant",brand:"Cracker Barrel","brand:wikidata":"Q4492609","brand:wikipedia":"en:Cracker Barrel",cuisine:"american",name:"Cracker Barrel",official_name:"Cracker Barrel Old Country Store"}},"amenity/restaurant|Côte Brasserie":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Côte Brasserie","brand:wikidata":"Q48699908","brand:wikipedia":"en:Côte",cuisine:"french",name:"Côte Brasserie"}},"amenity/restaurant|Dave & Buster's":{countryCodes:["us"],matchTags:["leisure/amusement_arcade"],tags:{amenity:"restaurant",brand:"Dave & Buster's","brand:wikidata":"Q5228205","brand:wikipedia":"en:Dave & Buster's",cuisine:"american",leisure:"amusement_arcade",name:"Dave & Buster's"}},"amenity/restaurant|Denny's":{tags:{amenity:"restaurant",brand:"Denny's","brand:wikidata":"Q1189695","brand:wikipedia":"en:Denny's",cuisine:"american",name:"Denny's"}},"amenity/restaurant|Dickey's Barbecue Pit":{countryCodes:["us"],matchNames:["dickeys barbecue"],tags:{amenity:"restaurant",brand:"Dickey's Barbecue Pit","brand:wikidata":"Q19880747","brand:wikipedia":"en:Dickey's Barbecue Pit",cuisine:"barbecue",name:"Dickey's Barbecue Pit"}},"amenity/restaurant|Din Tai Fung":{countryCodes:["ae","au","gb","hk","id","jp","kr","mo","my","ph","sg","th","tw","us"],tags:{amenity:"restaurant",brand:"Din Tai Fung","brand:wikidata":"Q699142","brand:wikipedia":"en:Din Tai Fung",cuisine:"taiwanese",name:"Din Tai Fung","name:zh":"鼎泰丰"}},"amenity/restaurant|Donatos Pizza":{countryCodes:["us"],matchNames:["donatos"],tags:{amenity:"restaurant",brand:"Donatos Pizza","brand:wikidata":"Q1240741","brand:wikipedia":"en:Donatos Pizza",cuisine:"pizza",name:"Donatos Pizza",takeaway:"yes"}},"amenity/restaurant|East Side Mario's":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"East Side Mario's","brand:wikidata":"Q5329375","brand:wikipedia":"en:East Side Mario's",cuisine:"italian",name:"East Side Mario's"}},"amenity/restaurant|Eat'n Park":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Eat'n Park","brand:wikidata":"Q5331211","brand:wikipedia":"en:Eat'n Park",cuisine:"american",name:"Eat'n Park"}},"amenity/restaurant|Elephant Bar":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Elephant Bar","brand:wikidata":"Q5359302","brand:wikipedia":"en:Elephant Bar",cuisine:"american",name:"Elephant Bar"}},"amenity/restaurant|Famous Dave's":{countryCodes:["us"],matchNames:["famous daves bbq"],tags:{amenity:"restaurant",brand:"Famous Dave's","brand:wikidata":"Q5433448","brand:wikipedia":"en:Famous Dave's",cuisine:"barbecue",name:"Famous Dave's"}},"amenity/restaurant|Fernandez":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Fernandez",cuisine:"steak",name:"Fernandez"}},"amenity/restaurant|First Watch":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"First Watch","brand:wikidata":"Q5454064","brand:wikipedia":"en:First Watch (restaurant chain)",cuisine:"american;breakfast",name:"First Watch"}},"amenity/restaurant|Flunch":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Flunch","brand:wikidata":"Q629326","brand:wikipedia":"en:Flunch",cuisine:"french",name:"Flunch"}},"amenity/restaurant|Foster's Hollywood":{countryCodes:["es"],tags:{amenity:"restaurant",brand:"Foster's Hollywood","brand:wikidata":"Q5864366","brand:wikipedia":"en:Foster's Hollywood",cuisine:"american",name:"Foster's Hollywood"}},"amenity/restaurant|Frankie & Benny's":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Frankie & Benny's","brand:wikidata":"Q5490892","brand:wikipedia":"en:Frankie & Benny's",cuisine:"american",name:"Frankie & Benny's"}},"amenity/restaurant|Freshii":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Freshii","brand:wikidata":"Q5503051","brand:wikipedia":"en:Freshii",cuisine:"salad",name:"Freshii"}},"amenity/restaurant|Friendly's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Friendly's","brand:wikidata":"Q1464513","brand:wikipedia":"en:Friendly's",cuisine:"american",name:"Friendly's"}},"amenity/restaurant|Frisch's Big Boy":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Frisch's Big Boy","brand:wikidata":"Q5504660","brand:wikipedia":"en:Frisch's",cuisine:"burger",name:"Frisch's Big Boy",takeaway:"yes"}},"amenity/restaurant|Fuddruckers":{tags:{amenity:"restaurant",brand:"Fuddruckers","brand:wikidata":"Q5507056","brand:wikipedia":"en:Fuddruckers",cuisine:"burger",name:"Fuddruckers"}},"amenity/restaurant|Gatti's Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Gatti's Pizza","brand:wikidata":"Q5527509","brand:wikipedia":"en:Gatti's Pizza",cuisine:"pizza",name:"Gatti's Pizza"}},"amenity/restaurant|Giordano's Pizzeria":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Giordano's Pizzeria","brand:wikidata":"Q5563393","brand:wikipedia":"en:Giordano's Pizzeria",cuisine:"pizza",name:"Giordano's Pizzeria"}},"amenity/restaurant|Godfather's Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Godfather's Pizza","brand:wikidata":"Q5576353","brand:wikipedia":"en:Godfather's Pizza",cuisine:"pizza",name:"Godfather's Pizza"}},"amenity/restaurant|Golden Corral":{countryCodes:["us"],matchNames:["golden corral buffet","golden corral buffet and grill"],tags:{amenity:"restaurant",brand:"Golden Corral","brand:wikidata":"Q4039560","brand:wikipedia":"en:Golden Corral",cuisine:"american;buffet",name:"Golden Corral"}},"amenity/restaurant|Gourmet Burger Kitchen":{countryCodes:["gb","gr","ie"],tags:{amenity:"restaurant",brand:"Gourmet Burger Kitchen","brand:wikidata":"Q5588445","brand:wikipedia":"en:Gourmet Burger Kitchen",cuisine:"burger",name:"Gourmet Burger Kitchen",short_name:"GBK"}},"amenity/restaurant|Grotto Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Grotto Pizza","brand:wikidata":"Q20709024","brand:wikipedia":"en:Grotto Pizza",cuisine:"pizza",name:"Grotto Pizza"}},"amenity/restaurant|Gusto~(United Kingdom)":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Gusto","brand:wikidata":"Q66087781",cuisine:"italian",name:"Gusto"}},"amenity/restaurant|Guzman y Gomez":{countryCodes:["au","jp","sg"],tags:{amenity:"restaurant",brand:"Guzman y Gomez","brand:wikidata":"Q23019759","brand:wikipedia":"en:Guzman y Gomez",cuisine:"mexican",name:"Guzman y Gomez"}},"amenity/restaurant|Handmade Burger Co.":{countryCodes:["gb"],matchNames:["handmade burger company"],tags:{amenity:"restaurant",brand:"Handmade Burger Co.","brand:wikidata":"Q56154673",cuisine:"burger",name:"Handmade Burger Co."}},"amenity/restaurant|Hans im Glück":{countryCodes:["at","ch","de","sg"],tags:{amenity:"restaurant",brand:"Hans im Glück","brand:wikidata":"Q22569868","brand:wikipedia":"de:Hans im Glück (Restaurantkette)",cuisine:"burger",name:"Hans im Glück"}},"amenity/restaurant|Happy's Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Happy's Pizza","brand:wikidata":"Q5652393","brand:wikipedia":"en:Happy's Pizza",cuisine:"pizza",name:"Happy's Pizza"}},"amenity/restaurant|Hard Rock Cafe":{tags:{amenity:"restaurant",brand:"Hard Rock Cafe","brand:wikidata":"Q918151","brand:wikipedia":"en:Hard Rock Cafe",cuisine:"american",name:"Hard Rock Cafe"}},"amenity/restaurant|Harvester":{countryCodes:["gb"],matchTags:["amenity/pub"],tags:{amenity:"restaurant",brand:"Harvester","brand:wikidata":"Q5676915","brand:wikipedia":"en:Harvester (restaurant)",cuisine:"american",name:"Harvester"}},"amenity/restaurant|Hippopotamus":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Hippopotamus","brand:wikidata":"Q3136174","brand:wikipedia":"fr:Hippopotamus (restaurant)",cuisine:"steak_house",name:"Hippopotamus"}},"amenity/restaurant|Hog's Australia's Steakhouse":{countryCodes:["au"],tags:{amenity:"restaurant",brand:"Hog's Australia's Steakhouse","brand:wikidata":"Q5876920","brand:wikipedia":"en:Hog's Australia's Steakhouse",cuisine:"steak_house",name:"Hog's Australia's Steakhouse"}},"amenity/restaurant|Hooters":{tags:{amenity:"restaurant",brand:"Hooters","brand:wikidata":"Q1025921","brand:wikipedia":"en:Hooters",cuisine:"burger",name:"Hooters"}},"amenity/restaurant|House of Blues":{tags:{amenity:"restaurant",brand:"House of Blues","brand:wikidata":"Q648898","brand:wikipedia":"en:House of Blues",cuisine:"american",name:"House of Blues"}},"amenity/restaurant|Huddle House":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Huddle House","brand:wikidata":"Q5928324","brand:wikipedia":"en:Huddle House",cuisine:"american",name:"Huddle House"}},"amenity/restaurant|Husky House":{countryCodes:["ca"],nomatch:["amenity/fuel|Husky","shop/convenience|Husky"],tags:{amenity:"restaurant",brand:"Husky","brand:wikidata":"Q702049","brand:wikipedia":"en:Husky Energy",cuisine:"diner",name:"Husky House"}},"amenity/restaurant|IHOP":{matchNames:["international house of pancakes"],tags:{amenity:"restaurant",brand:"IHOP","brand:wikidata":"Q1185675","brand:wikipedia":"en:IHOP",cuisine:"breakfast;pancake",name:"IHOP"}},"amenity/restaurant|IL Патио":{countryCodes:["ru"],tags:{amenity:"restaurant",brand:"IL Патио","brand:wikidata":"Q4397763","brand:wikipedia":"en:Росинтер",cuisine:"italian",name:"IL Патио"}},"amenity/restaurant|Iron Skillet":{countryCodes:["us"],matchNames:["iron skillet restaurant"],tags:{amenity:"restaurant",brand:"Iron Skillet","brand:wikidata":"Q64052855",cuisine:"american;buffet",name:"Iron Skillet"}},"amenity/restaurant|Italia":{tags:{amenity:"restaurant",brand:"Italia",name:"Italia"}},"amenity/restaurant|Jack Astor's":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Jack Astor's","brand:wikidata":"Q6111066","brand:wikipedia":"en:Jack Astor's Bar and Grill",cuisine:"american",name:"Jack Astor's"}},"amenity/restaurant|Jason's Deli":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Jason's Deli","brand:wikidata":"Q16997641","brand:wikipedia":"en:Jason's Deli",cuisine:"sandwich",name:"Jason's Deli"}},"amenity/restaurant|Jet's Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Jet's Pizza","brand:wikidata":"Q16997713","brand:wikipedia":"en:Jet's Pizza",cuisine:"pizza",name:"Jet's Pizza"}},"amenity/restaurant|Jinya Ramen Bar":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Jinya Ramen Bar","brand:wikidata":"Q16997755","brand:wikipedia":"en:Jinya Ramen Bar",cuisine:"ramen",name:"Jinya Ramen Bar"}},"amenity/restaurant|Joe's Crab Shack":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Joe's Crab Shack","brand:wikidata":"Q6208210","brand:wikipedia":"en:Joe's Crab Shack",cuisine:"seafood",name:"Joe's Crab Shack"}},"amenity/restaurant|Johnny Carino's":{countryCodes:["us"],matchNames:["carinios"],tags:{amenity:"restaurant",brand:"Johnny Carino's","brand:wikidata":"Q5039637","brand:wikipedia":"en:Carino's Italian",cuisine:"italian",name:"Johnny Carino's"}},"amenity/restaurant|Johnny Rockets":{matchNames:["johnny rocket"],tags:{amenity:"restaurant",brand:"Johnny Rockets","brand:wikidata":"Q1051593","brand:wikipedia":"en:Johnny Rockets",cuisine:"burger",name:"Johnny Rockets"}},"amenity/restaurant|Kelsey's":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Kelsey's","brand:wikidata":"Q6386459","brand:wikipedia":"en:Kelseys Original Roadhouse",cuisine:"american",name:"Kelsey's"}},"amenity/restaurant|Kona Grill":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Kona Grill","brand:wikidata":"Q6428706","brand:wikipedia":"en:Kona Grill",cuisine:"sushi;cocktails",name:"Kona Grill"}},"amenity/restaurant|L'Atelier":{tags:{amenity:"restaurant",brand:"L'Atelier",cuisine:"french",name:"L'Atelier"}},"amenity/restaurant|L'Osteria":{countryCodes:["at","ch","cz","de","fr","gb","nl"],tags:{amenity:"restaurant",brand:"L'Osteria","brand:wikidata":"Q17323478","brand:wikipedia":"de:L’Osteria",cuisine:"italian",name:"L'Osteria"}},"amenity/restaurant|La Boucherie":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"La Boucherie","brand:wikidata":"Q21427479","brand:wikipedia":"fr:La Boucherie (restaurant)",cuisine:"steak_house",name:"La Boucherie"}},"amenity/restaurant|La Cage":{countryCodes:["ca"],matchNames:["la cage aux sports"],tags:{amenity:"restaurant",brand:"La Cage","brand:wikidata":"Q3206980","brand:wikipedia":"fr:La Cage aux Sports",cuisine:"burger;chicken;sandwich;fish;pasta",name:"La Cage"}},"amenity/restaurant|LaRosa's Pizzeria":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"LaRosa's Pizzeria","brand:wikidata":"Q6460833","brand:wikipedia":"en:LaRosa's Pizzeria",cuisine:"pizza",name:"LaRosa's Pizzeria",takeaway:"yes"}},"amenity/restaurant|Ledo Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Ledo Pizza","brand:wikidata":"Q6512734","brand:wikipedia":"en:Ledo Pizza",cuisine:"pizza",name:"Ledo Pizza"}},"amenity/restaurant|Legal Sea Foods":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Legal Sea Foods","brand:wikidata":"Q6517417","brand:wikipedia":"en:Legal Sea Foods",cuisine:"seafood",name:"Legal Sea Foods"}},"amenity/restaurant|Les 3 Brasseurs~(Qc,Br,Fr)":{countryCodes:["br","ca","fr"],matchNames:["3 brasseurs"],tags:{amenity:"restaurant",brand:"3 Brasseurs","brand:wikidata":"Q3230326","brand:wikipedia":"fr:Les 3 Brasseurs",cuisine:"burger;pizza;seafood",name:"3 Brasseurs","name:en":"3 Brewers",official_name:"Les 3 Brasseurs"}},"amenity/restaurant|Logan's Roadhouse":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Logan's Roadhouse","brand:wikidata":"Q6666872","brand:wikipedia":"en:Logan's Roadhouse",cuisine:"american",name:"Logan's Roadhouse"}},"amenity/restaurant|LongHorn Steakhouse":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"LongHorn Steakhouse","brand:wikidata":"Q3259007","brand:wikipedia":"en:LongHorn Steakhouse",cuisine:"steak_house",name:"LongHorn Steakhouse"}},"amenity/restaurant|Lou Malnati's Pizzeria":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Lou Malnati's Pizzeria","brand:wikidata":"Q6685628","brand:wikipedia":"en:Lou Malnati's Pizzeria",cuisine:"pizza",name:"Lou Malnati's Pizzeria"}},"amenity/restaurant|Loving Hut":{tags:{amenity:"restaurant",brand:"Loving Hut","brand:wikidata":"Q3491655","brand:wikipedia":"en:Loving Hut",cuisine:"international","diet:vegan":"only","diet:vegetarian":"only",name:"Loving Hut"}},"amenity/restaurant|Luby's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Luby's","brand:wikidata":"Q6695701","brand:wikipedia":"en:Luby's",cuisine:"american",name:"Luby's"}},"amenity/restaurant|Léon de Bruxelles":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Léon de Bruxelles","brand:wikidata":"Q21041507","brand:wikipedia":"en:Léon de Bruxelles",cuisine:"friture",name:"Léon de Bruxelles"}},"amenity/restaurant|MK Restaurants":{countryCodes:["th"],tags:{amenity:"restaurant",brand:"MK Restaurants","brand:wikidata":"Q62075359",cuisine:"thai",name:"MK Restaurants"}},"amenity/restaurant|Mad Mex Fresh Mexican":{countryCodes:["au","nz"],tags:{amenity:"restaurant",brand:"Mad Mex Fresh Mexican Grill","brand:wikidata":"Q19589766","brand:wikipedia":"en:Mad Mex Fresh Mexican Grill",cuisine:"mexican",name:"Mad Mex Fresh Mexican Grill"}},"amenity/restaurant|Marco's Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Marco's Pizza","brand:wikidata":"Q6757382","brand:wikipedia":"en:Marco's Pizza",cuisine:"pizza",name:"Marco's Pizza"}},"amenity/restaurant|Marie Callender's":{countryCodes:["mx","us"],matchNames:["marie calendar","marie calendar's","marie callendar's"],tags:{amenity:"restaurant",brand:"Marie Callender's","brand:wikidata":"Q6762784","brand:wikipedia":"en:Marie Callender's",cuisine:"american",name:"Marie Callender's"}},"amenity/restaurant|Max's Restaurant":{countryCodes:["ph"],matchNames:["max's"],tags:{amenity:"restaurant",brand:"Max's Restaurant","brand:wikidata":"Q6794477","brand:wikipedia":"en:Max's Restaurant",cuisine:"asian",name:"Max's Restaurant"}},"amenity/restaurant|McAlister's Deli":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"McAlister's Deli","brand:wikidata":"Q17020829","brand:wikipedia":"en:McAlister's Deli",cuisine:"sandwich",name:"McAlister's Deli"}},"amenity/restaurant|McCormick & Schmick's":{countryCodes:["us"],matchNames:["mccormick and schmick","mccormick and schmicks grill"],tags:{amenity:"restaurant",brand:"McCormick & Schmick's","brand:wikidata":"Q6800562","brand:wikipedia":"en:McCormick & Schmick's",cuisine:"seafood;steak",name:"McCormick & Schmick's"}},"amenity/restaurant|Mellow Mushroom":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Mellow Mushroom","brand:wikidata":"Q17021360","brand:wikipedia":"en:Mellow Mushroom",cuisine:"pizza",name:"Mellow Mushroom"}},"amenity/restaurant|Migros Restaurant":{tags:{amenity:"restaurant",brand:"Migros Restaurant",cuisine:"international",name:"Migros Restaurant"}},"amenity/restaurant|Mikes":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Mikes","brand:wikidata":"Q3313615","brand:wikipedia":"fr:Mikes",cuisine:"pizza;pasta;sandwich",name:"Mikes"}},"amenity/restaurant|Mimi's Cafe":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Mimi's Cafe","brand:wikidata":"Q17022081","brand:wikipedia":"en:Mimi's Cafe",cuisine:"french",name:"Mimi's Cafe"}},"amenity/restaurant|Montana's":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Montana's","brand:wikidata":"Q17022490","brand:wikipedia":"en:Montana's BBQ & Bar",cuisine:"barbecue",name:"Montana's",official_name:"Montana's BBQ & Bar"}},"amenity/restaurant|Morton's The Steakhouse":{countryCodes:["us"],matchNames:["mortons"],tags:{amenity:"restaurant",brand:"Morton's The Steakhouse","brand:wikidata":"Q17022759","brand:wikipedia":"en:Morton's The Steakhouse",cuisine:"steak_house",name:"Morton's The Steakhouse"}},"amenity/restaurant|Moses":{countryCodes:["il"],tags:{amenity:"restaurant",brand:"Moses","brand:en":"Moses","brand:he":"מוזס","brand:wikidata":"Q64760150",cuisine:"burger",name:"Moses","name:en":"Moses","name:he":"מוזס"}},"amenity/restaurant|Mountain Mike's":{countryCodes:["us"],tags:{alt_name:"Mountain Mike's Pizza",amenity:"restaurant",brand:"Mountain Mike's","brand:wikidata":"Q6925120","brand:wikipedia":"en:Mountain Mike's Pizza",cuisine:"pizza",name:"Mountain Mike's",takeaway:"yes"}},"amenity/restaurant|Mr. Greek":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Mr. Greek","brand:wikidata":"Q6928719","brand:wikipedia":"en:Mr. Greek",cuisine:"greek",name:"Mr. Greek"}},"amenity/restaurant|Nando's":{tags:{amenity:"restaurant",brand:"Nando's","brand:wikidata":"Q3472954","brand:wikipedia":"en:Nando's",cuisine:"chicken;portuguese",name:"Nando's"}},"amenity/restaurant|Noodles & Company":{countryCodes:["us"],matchNames:["noodles and co","noodles co","noodles company"],tags:{amenity:"restaurant",brand:"Noodles & Company","brand:wikidata":"Q7049673","brand:wikipedia":"en:Noodles & Company",cuisine:"pasta",name:"Noodles & Company"}},"amenity/restaurant|Norky's":{countryCodes:["pe"],tags:{amenity:"restaurant",brand:"Norky's",cuisine:"peruvian",name:"Norky's"}},"amenity/restaurant|O'Charley's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"O'Charley's","brand:wikidata":"Q7071703","brand:wikipedia":"en:O'Charley's",cuisine:"american",name:"O'Charley's"}},"amenity/restaurant|Ocean Basket":{countryCodes:["za"],tags:{amenity:"restaurant",brand:"Ocean Basket","brand:wikidata":"Q62075311",cuisine:"seafood",name:"Ocean Basket"}},"amenity/restaurant|Old Chicago":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Old Chicago","brand:wikidata":"Q64411347",cuisine:"pizza",name:"Old Chicago",official_name:"Old Chicago Pizza & Taproom"}},"amenity/restaurant|Old Country Buffet":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Old Country Buffet","brand:wikidata":"Q75243208",cuisine:"american",name:"Old Country Buffet"}},"amenity/restaurant|Old Wild West":{countryCodes:["it"],tags:{amenity:"restaurant",brand:"Old Wild West","brand:wikidata":"Q25402475","brand:wikipedia":"it:Old Wild West",cuisine:"american",name:"Old Wild West"}},"amenity/restaurant|Olive Garden":{tags:{amenity:"restaurant",brand:"Olive Garden","brand:wikidata":"Q3045312","brand:wikipedia":"en:Olive Garden",cuisine:"italian",name:"Olive Garden"}},"amenity/restaurant|On The Border":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"On The Border","brand:wikidata":"Q7091305","brand:wikipedia":"en:On the Border Mexican Grill & Cantina",cuisine:"tex-mex",name:"On The Border",official_name:"On The Border Mexican Grill & Cantina"}},"amenity/restaurant|Outback Steakhouse":{tags:{amenity:"restaurant",brand:"Outback Steakhouse","brand:wikidata":"Q1064893","brand:wikipedia":"en:Outback Steakhouse",cuisine:"american;steak",name:"Outback Steakhouse"}},"amenity/restaurant|P.F. Chang's":{countryCodes:["mx","us"],matchNames:["pf chang"],tags:{amenity:"restaurant",brand:"P.F. Chang's","brand:wikidata":"Q5360181","brand:wikipedia":"en:P. F. Chang's China Bistro",cuisine:"asian",name:"P.F. Chang's",official_name:"P.F. Chang's China Bistro"}},"amenity/restaurant|Papa Gino's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Papa Gino's","brand:wikidata":"Q7132333","brand:wikipedia":"en:Papa Gino's",cuisine:"pizza",name:"Papa Gino's"}},"amenity/restaurant|Pardos Chicken":{countryCodes:["pe"],tags:{amenity:"restaurant",brand:"Pardos Chicken","brand:wikidata":"Q17624435","brand:wikipedia":"en:Pardos chicken",cuisine:"peruvian",name:"Pardos Chicken"}},"amenity/restaurant|Pei Wei":{countryCodes:["us"],matchNames:["pei wei asian diner"],tags:{amenity:"restaurant",brand:"Pei Wei","brand:wikidata":"Q7160898","brand:wikipedia":"en:Pei Wei Asian Diner",cuisine:"asian",name:"Pei Wei"}},"amenity/restaurant|Perkins":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Perkins","brand:wikidata":"Q7169056","brand:wikipedia":"en:Perkins Restaurant and Bakery",cuisine:"american",name:"Perkins",official_name:"Perkins Restaurant and Bakery"}},"amenity/restaurant|Peter Pane":{countryCodes:["at","de"],tags:{amenity:"restaurant",brand:"Peter Pane","brand:wikidata":"Q66084419",cuisine:"burger",name:"Peter Pane"}},"amenity/restaurant|Peter Piper Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Peter Piper Pizza","brand:wikidata":"Q7176401",cuisine:"pizza",name:"Peter Piper Pizza"}},"amenity/restaurant|Phở 24":{countryCodes:["vn"],tags:{amenity:"restaurant",brand:"Phở 24","brand:wikidata":"Q63863118",cuisine:"vietnamese;noodle",name:"Phở 24","name:en":"Pho 24","name:vi":"Phở 24"}},"amenity/restaurant|Phở Hòa":{countryCodes:["ca","id","kr","ms","ph","tw","us"],tags:{alt_name:"Phở Hoà","alt_name:en":"Pho Hoa","alt_name:vi":"Phở Hoà",amenity:"restaurant",brand:"Phở Hòa","brand:wikidata":"Q55629932","brand:wikipedia":"en:Phở Hòa",cuisine:"vietnamese;noodle",name:"Phở Hòa","name:vi":"Phở Hòa"}},"amenity/restaurant|Pieology Pizzeria":{countryCodes:["us"],matchNames:["pieology"],tags:{amenity:"restaurant",brand:"Pieology Pizzeria","brand:wikidata":"Q60746053","brand:wikipedia":"en:Pieology",cuisine:"pizza",name:"Pieology Pizzeria"}},"amenity/restaurant|Pizza Delight":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Pizza Delight","brand:wikidata":"Q3389502","brand:wikipedia":"en:Pizza Delight",cuisine:"pizza",name:"Pizza Delight"}},"amenity/restaurant|Pizza Factory":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Pizza Factory","brand:wikidata":"Q39054369","brand:wikipedia":"en:Pizza Factory",cuisine:"pizza",name:"Pizza Factory"}},"amenity/restaurant|Pizza Hut":{nomatch:["amenity/fast_food|Pizza Hut Express"],tags:{amenity:"restaurant",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut"}},"amenity/restaurant|Pizza Ranch":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Pizza Ranch","brand:wikidata":"Q7199978","brand:wikipedia":"en:Pizza Ranch",cuisine:"pizza",name:"Pizza Ranch"}},"amenity/restaurant|PizzaExpress":{tags:{amenity:"restaurant",brand:"PizzaExpress","brand:wikidata":"Q662845","brand:wikipedia":"en:PizzaExpress",cuisine:"pizza",name:"PizzaExpress"}},"amenity/restaurant|Poivre Rouge":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Poivre Rouge","brand:wikidata":"Q7316076","brand:wikipedia":"fr:Poivre Rouge (restauration)",cuisine:"french",name:"Poivre Rouge"}},"amenity/restaurant|Ponderosa Steakhouse":{countryCodes:["ae","eg","qa","tw","us"],matchNames:["ponderosa"],tags:{amenity:"restaurant",brand:"Ponderosa Steakhouse","brand:wikidata":"Q64038204",cuisine:"american;steak;buffet",name:"Ponderosa Steakhouse"}},"amenity/restaurant|Prezzo":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Prezzo","brand:wikidata":"Q7242489","brand:wikipedia":"en:Prezzo (restaurant)",cuisine:"italian",name:"Prezzo"}},"amenity/restaurant|Primavera":{tags:{amenity:"restaurant",brand:"Primavera",name:"Primavera"}},"amenity/restaurant|Quaker Steak & Lube":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Quaker Steak & Lube","brand:wikidata":"Q7268570","brand:wikipedia":"en:Quaker Steak & Lube",cuisine:"wings",name:"Quaker Steak & Lube"}},"amenity/restaurant|Rainforest Cafe":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Rainforest Cafe","brand:wikidata":"Q3391111","brand:wikipedia":"en:Rainforest Cafe",cuisine:"american",name:"Rainforest Cafe"}},"amenity/restaurant|Red Lobster":{tags:{amenity:"restaurant",brand:"Red Lobster","brand:wikidata":"Q846301","brand:wikipedia":"en:Red Lobster",cuisine:"seafood",name:"Red Lobster"}},"amenity/restaurant|Red Robin":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Red Robin","brand:wikidata":"Q7304886","brand:wikipedia":"en:Red Robin",cuisine:"burger",name:"Red Robin",official_name:"Red Robin Gourmet Burgers and Brews"}},"amenity/restaurant|Romano's Macaroni Grill":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Romano's Macaroni Grill","brand:wikidata":"Q7362714","brand:wikipedia":"en:Romano's Macaroni Grill",cuisine:"italian",name:"Romano's Macaroni Grill"}},"amenity/restaurant|Round Table Pizza":{countryCodes:["us"],matchNames:["round table"],tags:{amenity:"restaurant",brand:"Round Table Pizza","brand:wikidata":"Q7371139","brand:wikipedia":"en:Round Table Pizza",cuisine:"pizza",name:"Round Table Pizza"}},"amenity/restaurant|Ruby Tuesday":{tags:{amenity:"restaurant",brand:"Ruby Tuesday","brand:wikidata":"Q7376400","brand:wikipedia":"en:Ruby Tuesday (restaurant)",cuisine:"american",name:"Ruby Tuesday"}},"amenity/restaurant|Ruth's Chris Steak House":{countryCodes:["ca","mx","us"],tags:{amenity:"restaurant",brand:"Ruth's Chris Steak House","brand:wikidata":"Q7382829","brand:wikipedia":"en:Ruth's Chris Steak House",cuisine:"american",name:"Ruth's Chris Steak House"}},"amenity/restaurant|Saltgrass Steak House":{countryCodes:["us"],matchNames:["saltgrass"],tags:{amenity:"restaurant",brand:"Saltgrass Steak House","brand:wikidata":"Q7406113","brand:wikipedia":"en:Saltgrass Steak House",cuisine:"steak_house",name:"Saltgrass Steak House"}},"amenity/restaurant|Sausalitos":{countryCodes:["de"],matchTags:["amenity/bar"],tags:{amenity:"restaurant",brand:"Sausalitos","brand:wikidata":"Q2227783","brand:wikipedia":"de:Sausalitos",cuisine:"mexican",name:"Sausalitos"}},"amenity/restaurant|Scores":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Scores","brand:wikidata":"Q3476059","brand:wikipedia":"fr:Scores",cuisine:"chicken;barbecue",name:"Scores"}},"amenity/restaurant|Shakey's":{tags:{amenity:"restaurant",brand:"Shakey's","brand:wikidata":"Q6134929","brand:wikipedia":"en:Shakey's Pizza",cuisine:"pizza",name:"Shakey's"}},"amenity/restaurant|Shari's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Shari's","brand:wikidata":"Q7489612","brand:wikipedia":"en:Shari's Cafe & Pies",cuisine:"american",name:"Shari's"}},"amenity/restaurant|Shingle Inn":{countryCodes:["au"],tags:{amenity:"restaurant",brand:"Shingle Inn","brand:wikidata":"Q7497463","brand:wikipedia":"en:Shingle Inn",cuisine:"bakery",name:"Shingle Inn"}},"amenity/restaurant|Shoney's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Shoney's","brand:wikidata":"Q7500392","brand:wikipedia":"en:Shoney's",cuisine:"american",name:"Shoney's"}},"amenity/restaurant|Sizzler":{tags:{amenity:"restaurant",brand:"Sizzler","brand:wikidata":"Q1848822","brand:wikipedia":"en:Sizzler",cuisine:"steak_house",name:"Sizzler"}},"amenity/restaurant|Skyline Chili":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Skyline Chili","brand:wikidata":"Q151224","brand:wikipedia":"en:Skyline Chili",cuisine:"chili",name:"Skyline Chili",takeaway:"yes"}},"amenity/restaurant|Smitty's":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Smitty's","brand:wikidata":"Q7545728","brand:wikipedia":"en:Smitty's",cuisine:"pancake",name:"Smitty's"}},"amenity/restaurant|Snappy Tomato Pizza":{countryCodes:["gb","us"],tags:{amenity:"restaurant",brand:"Snappy Tomato Pizza","brand:wikidata":"Q7547352","brand:wikipedia":"en:Snappy Tomato Pizza",cuisine:"pizza",name:"Snappy Tomato Pizza",takeaway:"yes"}},"amenity/restaurant|Sonny's BBQ":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Sonny's BBQ","brand:wikidata":"Q7561989","brand:wikipedia":"en:Sonny's BBQ",cuisine:"bbq",name:"Sonny's BBQ"}},"amenity/restaurant|Spudbar":{countryCodes:["au"],tags:{amenity:"restaurant",brand:"Spudbar","brand:wikidata":"Q19589778","brand:wikipedia":"en:Spudbar",cuisine:"baked_potato",name:"Spudbar"}},"amenity/restaurant|Spur":{countryCodes:["za"],matchNames:["spur steak ranches"],tags:{amenity:"restaurant",brand:"Spur","brand:wikidata":"Q7581546","brand:wikipedia":"en:Spur Steak Ranches",cuisine:"steak_house",name:"Spur"}},"amenity/restaurant|St-Hubert":{countryCodes:["ca"],nomatch:["amenity/fast_food|St-Hubert Express"],tags:{amenity:"restaurant",brand:"St-Hubert","brand:wikidata":"Q3495225","brand:wikipedia":"fr:St-Hubert (restaurant)",cuisine:"chicken;barbecue",name:"St-Hubert"}},"amenity/restaurant|St. Louis Bar & Grill":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"St. Louis Bar & Grill","brand:wikidata":"Q65567668",cuisine:"chicken",name:"St. Louis Bar & Grill"}},"amenity/restaurant|Stoney River":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Stoney River","brand:wikidata":"Q7619422","brand:wikipedia":"en:Stoney River Legendary Steaks",cuisine:"steak_house",name:"Stoney River"}},"amenity/restaurant|Sunset Grill":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Sunset Grill","brand:wikidata":"Q62112489","brand:wikipedia":"en:Sunset Grill (Canadian restaurant chain)",cuisine:"american",name:"Sunset Grill"}},"amenity/restaurant|Swiss Chalet":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Swiss Chalet","brand:wikidata":"Q2372909","brand:wikipedia":"en:Swiss Chalet",cuisine:"chicken",name:"Swiss Chalet"}},"amenity/restaurant|TGI Friday's":{tags:{amenity:"restaurant",brand:"TGI Friday's","brand:wikidata":"Q1524184","brand:wikipedia":"en:TGI Fridays",cuisine:"american",name:"TGI Friday's"}},"amenity/restaurant|Ted's Montana Grill":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Ted's Montana Grill","brand:wikidata":"Q16953170","brand:wikipedia":"en:Ted's Montana Grill",cuisine:"american",name:"Ted's Montana Grill"}},"amenity/restaurant|Tempero Manero":{countryCodes:["br"],tags:{amenity:"restaurant",brand:"Tempero Manero",cuisine:"brazilian",name:"Tempero Manero"}},"amenity/restaurant|Texas Roadhouse":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Texas Roadhouse","brand:wikidata":"Q7707945","brand:wikipedia":"en:Texas Roadhouse",cuisine:"steak_house",name:"Texas Roadhouse"}},"amenity/restaurant|The Cheesecake Factory":{countryCodes:["us"],tags:{alt_name:"Cheesecake Factory",amenity:"restaurant",brand:"The Cheesecake Factory","brand:wikidata":"Q1045842","brand:wikipedia":"en:The Cheesecake Factory",cuisine:"american",name:"The Cheesecake Factory"}},"amenity/restaurant|The Counter":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"The Counter","brand:wikidata":"Q7727763","brand:wikipedia":"en:The Counter",cuisine:"burger",name:"The Counter"}},"amenity/restaurant|The Keg":{countryCodes:["ca","us"],matchNames:["keg"],tags:{amenity:"restaurant",brand:"The Keg","brand:wikidata":"Q7744066","brand:wikipedia":"en:The Keg",cuisine:"steak_house",name:"The Keg"}},"amenity/restaurant|The Melting Pot":{countryCodes:["us"],tags:{alt_name:"Melting Pot",amenity:"restaurant",brand:"The Melting Pot","brand:wikidata":"Q7750948","brand:wikipedia":"en:The Melting Pot (restaurant)",cuisine:"fondue",name:"The Melting Pot"}},"amenity/restaurant|The Original Pancake House":{countryCodes:["jp","kr","us"],matchNames:["original pancake house"],tags:{amenity:"restaurant",brand:"The Original Pancake House","brand:wikidata":"Q7755384","brand:wikipedia":"en:The Original Pancake House",cuisine:"breakfast;pancake",name:"The Original Pancake House"}},"amenity/restaurant|Tinseltown":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Tinseltown",cuisine:"american",name:"Tinseltown"}},"amenity/restaurant|Toby Carvery":{countryCodes:["gb"],matchTags:["amenity/pub"],tags:{amenity:"restaurant",brand:"Toby Carvery","brand:wikidata":"Q7811777","brand:wikipedia":"en:Toby Carvery",cuisine:"british",name:"Toby Carvery"}},"amenity/restaurant|Toks":{countryCodes:["mx"],tags:{amenity:"restaurant",brand:"Toks","brand:wikidata":"Q48835586","brand:wikipedia":"en:Toks",cuisine:"mexican",name:"Toks"}},"amenity/restaurant|Tony Roma's":{matchNames:["tony roma"],tags:{amenity:"restaurant",brand:"Tony Roma's","brand:wikidata":"Q2213883","brand:wikipedia":"en:Tony Roma's",cuisine:"barbecue",name:"Tony Roma's"}},"amenity/restaurant|Topper's Pizza~(Canada)":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Topper's Pizza","brand:wikidata":"Q7825105","brand:wikipedia":"en:Topper's Pizza (Canadian restaurant)",cuisine:"pizza",name:"Topper's Pizza"}},"amenity/restaurant|Toppers Pizza~(USA)":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Toppers Pizza","brand:wikidata":"Q7825113","brand:wikipedia":"en:Toppers Pizza (American restaurant)",cuisine:"pizza",name:"Toppers Pizza"}},"amenity/restaurant|Unos":{tags:{amenity:"restaurant",brand:"Unos","brand:wikidata":"Q7897209","brand:wikipedia":"en:Uno Pizzeria & Grill",cuisine:"pizza",name:"Unos"}},"amenity/restaurant|Vapiano":{tags:{amenity:"restaurant",brand:"Vapiano","brand:wikidata":"Q506252","brand:wikipedia":"en:Vapiano",cuisine:"italian",name:"Vapiano"}},"amenity/restaurant|Village Inn":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Village Inn","brand:wikidata":"Q7930659","brand:wikipedia":"en:Village Inn",cuisine:"american",name:"Village Inn"}},"amenity/restaurant|Vips~(Asia)":{countryCodes:["cn","kr"],tags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q12599540","brand:wikipedia":"ko:빕스",cuisine:"salad;steak_house",name:"Vips"}},"amenity/restaurant|Vips~(Mexico)":{countryCodes:["mx"],tags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q48783378","brand:wikipedia":"es:Vips",cuisine:"mexican",name:"Vips"}},"amenity/restaurant|Vips~(Spain)":{countryCodes:["es"],tags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q66087862",cuisine:"international",name:"Vips"}},"amenity/restaurant|Waffle House":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Waffle House","brand:wikidata":"Q1701206","brand:wikipedia":"en:Waffle House",cuisine:"american",name:"Waffle House",opening_hours:"24/7"}},"amenity/restaurant|Wagamama":{tags:{amenity:"restaurant",brand:"Wagamama","brand:wikidata":"Q503715","brand:wikipedia":"en:Wagamama",cuisine:"asian",name:"Wagamama"}},"amenity/restaurant|Wasabi":{tags:{amenity:"restaurant",brand:"Wasabi","brand:wikidata":"Q23891278","brand:wikipedia":"en:Wasabi (restaurant)",cuisine:"japanese",name:"Wasabi"}},"amenity/restaurant|Western Sizzlin'":{countryCodes:["us"],matchNames:["western sizzling"],tags:{amenity:"restaurant",brand:"Western Sizzlin'","brand:wikidata":"Q7988295","brand:wikipedia":"en:Western Sizzlin'",cuisine:"american;steak",name:"Western Sizzlin'"}},"amenity/restaurant|White Spot":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"White Spot","brand:wikidata":"Q7995414","brand:wikipedia":"en:White Spot",cuisine:"burger",name:"White Spot"}},"amenity/restaurant|Wild Wing":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Wild Wing","brand:wikidata":"Q8000869","brand:wikipedia":"en:Wild Wing Restaurants",cuisine:"chicken",name:"Wild Wing"}},"amenity/restaurant|YO! Sushi":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"YO! Sushi","brand:wikidata":"Q3105441","brand:wikipedia":"en:YO! Sushi",cuisine:"sushi",name:"YO! Sushi"}},"amenity/restaurant|Yard House":{countryCodes:["us"],tags:{alcohol:"yes",amenity:"restaurant",brand:"Yard House","brand:wikidata":"Q21189156","brand:wikipedia":"en:Yard House",cuisine:"american",name:"Yard House"}},"amenity/restaurant|Zambrero":{countryCodes:["au","ie","nl","th","us"],tags:{amenity:"restaurant",brand:"Zambrero","brand:wikidata":"Q18636431","brand:wikipedia":"en:Zambrero",cuisine:"mexican",name:"Zambrero"}},"amenity/restaurant|Zizzi":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Zizzi","brand:wikidata":"Q8072944","brand:wikipedia":"en:Zizzi",cuisine:"italian",name:"Zizzi"}},"amenity/restaurant|bd's Mongolian Grill":{countryCodes:["mn","us"],matchNames:["bd mongolian grill"],tags:{amenity:"restaurant",brand:"bd's Mongolian Grill","brand:wikidata":"Q69890408",cuisine:"mongolian_bbq",name:"bd's Mongolian Grill"}},"amenity/restaurant|dean&david":{countryCodes:["at","ch","de","lu","qa"],tags:{amenity:"restaurant",brand:"dean&david","brand:wikidata":"Q66132404",cuisine:"salad;sandwich",name:"dean&david"}},"amenity/restaurant|Евразия~(Russia)":{countryCodes:["ru"],tags:{amenity:"restaurant",brand:"Евразия","brand:wikidata":"Q66087936",cuisine:"international",name:"Евразия"}},"amenity/restaurant|Евразия~(Ukraine)":{countryCodes:["ua"],matchNames:["євразія"],tags:{amenity:"restaurant",brand:"Євразія","brand:ru":"Евразия","brand:ua":"Євразія","brand:wikidata":"Q66088028",cuisine:"western;japanese",name:"Євразія","name:ru":"Евразия","name:ua":"Євразія"}},"amenity/restaurant|Планета Суши":{countryCodes:["ru"],tags:{amenity:"restaurant",brand:"Планета Суши","brand:wikidata":"Q62739250",cuisine:"sushi",name:"Планета Суши","name:en":"Planet Sushi"}},"amenity/restaurant|Тануки":{countryCodes:["kz","ru"],tags:{amenity:"restaurant",brand:"Тануки","brand:wikidata":"Q62758690",cuisine:"japanese",name:"Тануки","name:en":"Tanuki","name:ru":"Тануки"}},"amenity/restaurant|Якитория":{countryCodes:["ru"],tags:{amenity:"restaurant",brand:"Якитория","brand:wikidata":"Q66088063",cuisine:"japanese;international",name:"Якитория"}},"amenity/restaurant|בורגר סאלון":{countryCodes:["il"],tags:{amenity:"restaurant",brand:"בורגר סאלון","brand:en":"Burger Saloon","brand:he":"בורגר סאלון","brand:wikidata":"Q64760057",cuisine:"burger",name:"בורגר סאלון","name:en":"Burger Saloon","name:he":"בורגר סאלון"}},"amenity/restaurant|あさくま":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"あさくま","brand:en":"Asakuma","brand:ja":"あさくま","brand:wikidata":"Q11257174","brand:wikipedia":"ja:あさくま",cuisine:"steak_house",name:"あさくま","name:en":"Asakuma","name:ja":"あさくま"}},"amenity/restaurant|いきなり!ステーキ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"いきなり!ステーキ","brand:en":"Ikinari Steak","brand:ja":"いきなり!ステーキ","brand:wikidata":"Q21652405","brand:wikipedia":"ja:いきなり!ステーキ",cuisine:"steak_house",name:"いきなり!ステーキ","name:en":"Ikinari Steak","name:ja":"いきなり!ステーキ"}},"amenity/restaurant|しゃぶ葉":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"しゃぶ葉","brand:ja":"しゃぶ葉",name:"しゃぶ葉","name:ja":"しゃぶ葉"}},"amenity/restaurant|とんでん":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"とんでん","brand:en":"Tonden","brand:ja":"とんでん","brand:wikidata":"Q11273585","brand:wikipedia":"jp:とんでん",name:"とんでん","name:en":"Tonden","name:ja":"とんでん"}},"amenity/restaurant|はなまるうどん":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"はなまるうどん","brand:en":"Hanamarūdon","brand:ja":"はなまるうどん","brand:wikidata":"Q11275674","brand:wikipedia":"ja:はなまるうどん",cuisine:"japanese;udon",name:"はなまるうどん","name:en":"Hanamarūdon","name:ja":"はなまるうどん"}},"amenity/restaurant|びっくりドンキー":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"びっくりドンキー","brand:en":"Bikkuri Donkey","brand:ja":"びっくりドンキー","brand:wikidata":"Q11276815","brand:wikipedia":"ja:びっくりドンキー",cuisine:"burger",name:"びっくりドンキー","name:en":"Bikkuri Donkey","name:ja":"びっくりドンキー"}},"amenity/restaurant|やよい軒":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"やよい軒","brand:en":"Yayoiken","brand:ja":"やよい軒","brand:wikidata":"Q11280577","brand:wikipedia":"ja:やよい軒",cuisine:"japanese",name:"やよい軒","name:en":"Yayoiken","name:ja":"やよい軒"}},"amenity/restaurant|カプリチョーザ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"カプリチョーザ","brand:en":"Capricciosa","brand:ja":"カプリチョーザ","brand:wikidata":"Q11294660","brand:wikipedia":"ja:カプリチョーザ",cuisine:"italian",name:"カプリチョーザ","name:en":"Capricciosa","name:ja":"カプリチョーザ"}},"amenity/restaurant|ガスト":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ガスト","brand:en":"Gusto","brand:ja":"ガスト",cuisine:"western;japanese",name:"ガスト","name:en":"Gusto","name:ja":"ガスト"}},"amenity/restaurant|ココス":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ココス","brand:en":"Coco's","brand:ja":"ココス","brand:wikidata":"Q11301951","brand:wikipedia":"ja:ココスジャパン",cuisine:"western;japanese",name:"ココス","name:en":"Coco's","name:ja":"ココス"}},"amenity/restaurant|サイゼリヤ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"サイゼリヤ","brand:en":"Saizeriya","brand:ja":"サイゼリヤ","brand:wikidata":"Q886564","brand:wikipedia":"en:Saizeriya",cuisine:"italian",name:"サイゼリヤ","name:en":"Saizeriya","name:ja":"サイゼリヤ"}},"amenity/restaurant|ジョイフル":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ジョイフル","brand:en":"Joyfull","brand:ja":"ジョイフル","brand:wikidata":"Q11310517","brand:wikipedia":"ja:ジョイフル",cuisine:"western",name:"ジョイフル","name:en":"Joyfull","name:ja":"ジョイフル"}},"amenity/restaurant|ジョナサン":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ジョナサン","brand:en":"Jonathan's","brand:ja":"ジョナサン","brand:wikidata":"Q11310628","brand:wikipedia":"ja:ジョナサン (ファミリーレストラン)",cuisine:"italian;japanese",name:"ジョナサン","name:en":"Jonathan's","name:ja":"ジョナサン"}},"amenity/restaurant|ジョリーパスタ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ジョリーパスタ","brand:en":"Jolly-Pasta","brand:ja":"ジョリーパスタ","brand:wikidata":"Q10852718","brand:wikipedia":"ja:ジョリーパスタ",cuisine:"pasta",name:"ジョリーパスタ","name:en":"Jolly-Pasta","name:ja":"ジョリーパスタ"}},"amenity/restaurant|ステーキガスト":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ステーキガスト","brand:en":"Skylark","brand:ja":"ステーキガスト","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",cuisine:"steak",name:"ステーキガスト","name:en":"Skylark","name:ja":"ステーキガスト"}},"amenity/restaurant|デニーズ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"デニーズ","brand:en":"Denny's","brand:ja":"デニーズ","brand:wikidata":"Q11320661","brand:wikipedia":"ja:デニーズ (日本)",cuisine:"western;japanese",name:"デニーズ","name:en":"Denny's","name:ja":"デニーズ"}},"amenity/restaurant|バーミヤン":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"バーミヤン","brand:en":"Bamiyan","brand:ja":"バーミヤン","brand:wikidata":"Q11328598","brand:wikipedia":"ja:バーミヤン (レストランチェーン)",cuisine:"chinese",name:"バーミヤン","name:en":"Bamiyan","name:ja":"バーミヤン"}},"amenity/restaurant|ビッグボーイ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ビッグボーイ","brand:en":"Big Boy Restaurants","brand:ja":"ビッグボーイ","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",cuisine:"burger",name:"ビッグボーイ","name:en":"Big Boy Restaurants","name:ja":"ビッグボーイ"}},"amenity/restaurant|リンガーハット":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"リンガーハット","brand:en":"Ringer Hut","brand:ja":"リンガーハット","brand:wikidata":"Q7334856","brand:wikipedia":"en:Ringer Hut",cuisine:"japanese",name:"リンガーハット","name:en":"Ringer Hut","name:ja":"リンガーハット"}},"amenity/restaurant|ロイヤルホスト":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ロイヤルホスト","brand:en":"Royal Host","brand:ja":"ロイヤルホスト","brand:wikidata":"Q11120884","brand:wikipedia":"ja:ロイヤルホスト",cuisine:"japanese;italian;french",name:"ロイヤルホスト","name:en":"Royal Host","name:ja":"ロイヤルホスト"}},"amenity/restaurant|丸亀製麺":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"丸亀製麺","brand:en":"Marugame Seimen","brand:ja":"丸亀製麺","brand:wikidata":"Q10877253","brand:wikipedia":"ja:丸亀製麺",cuisine:"noodle",name:"丸亀製麺","name:en":"Marugame Seimen","name:ja":"丸亀製麺"}},"amenity/restaurant|八方雲集":{countryCodes:["cn","tw"],tags:{amenity:"restaurant",brand:"八方雲集","brand:en":"Eight Way","brand:wikidata":"Q28417381","brand:wikipedia":"zh:八方雲集","brand:zh":"八方雲集",cuisine:"chinese",name:"八方雲集","name:en":"Eight Way","name:zh":"八方雲集"}},"amenity/restaurant|和食さと":{countryCodes:["jp"],matchNames:["さと"],tags:{amenity:"restaurant",brand:"和食さと","brand:en":"Washoku Sato","brand:ja":"和食さと","brand:wikidata":"Q11304897","brand:wikipedia":"ja:SRSホールディングス",cuisine:"japanese",name:"和食さと","name:en":"Washoku Sato","name:ja":"和食さと"}},"amenity/restaurant|夢庵":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"夢庵","brand:en":"Yumean","brand:ja":"夢庵","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",cuisine:"japanese",name:"夢庵","name:en":"Yumean","name:ja":"夢庵"}},"amenity/restaurant|大戸屋":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"大戸屋","brand:en":"Ootoya","brand:ja":"大戸屋","brand:wikidata":"Q11435522","brand:wikipedia":"ja:大戸屋ホールディングス",cuisine:"japanese",name:"大戸屋","name:en":"Ootoya","name:ja":"大戸屋"}},"amenity/restaurant|大阪王将":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"大阪王将","brand:en":"Osaka Ohsho","brand:ja":"大阪王将","brand:wikidata":"Q48743717","brand:wikipedia":"ja:大阪王将",cuisine:"japanese;chinese",name:"大阪王将","name:en":"Osaka Ohsho","name:ja":"大阪王将"}},"amenity/restaurant|天下一品":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"天下一品","brand:en":"Tenkaippin","brand:wikidata":"Q11442172","brand:wikipedia":"en:Tenkaippin",cuisine:"ramen",name:"天下一品","name:en":"Tenkaippin"}},"amenity/restaurant|安楽亭":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"安楽亭","brand:en":"Anrakutei","brand:wikidata":"Q11450866","brand:wikipedia":"ja:安楽亭",cuisine:"barbecue",name:"安楽亭","name:en":"Anrakutei"}},"amenity/restaurant|木曽路":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"木曽路","brand:en":"Kisoji","brand:jp":"木曽路","brand:wikidata":"Q11518589","brand:wikipedia":"ja:木曽路 (企業)",cuisine:"japanese",name:"木曽路","name:en":"Kisoji","name:jp":"木曽路"}},"amenity/restaurant|永和豆浆":{countryCodes:["cn"],tags:{amenity:"restaurant",brand:"永和豆浆","brand:en":"Yonghe Soy Milk",cuisine:"chinese;breakfast",name:"永和豆浆","name:en":"Yonghe Soy Milk"}},"amenity/restaurant|海底捞火锅":{countryCodes:["cn"],tags:{amenity:"restaurant",brand:"海底捞火锅","brand:en":"Hai Di Lao Hot Pot","brand:wikidata":"Q5638920","brand:wikipedia":"zh:海底捞",cuisine:"chinese",name:"海底捞火锅","name:en":"Hai Di Lao Hot Pot"}},"amenity/restaurant|牛角":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"牛角","brand:en":"Gyū-Kaku","brand:wikidata":"Q11349387","brand:wikipedia":"en:Gyu-Kaku",cuisine:"barbecue",name:"牛角","name:en":"Gyū-Kaku"}},"amenity/restaurant|華屋与兵衛":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"華屋与兵衛","brand:en":"Hanaya Yohei","brand:ja":"華屋与兵衛","brand:wikidata":"Q11620063","brand:wikipedia":"ja:華屋与兵衛 (レストラン)",cuisine:"japanese",name:"華屋与兵衛","name:en":"Hanaya Yohei","name:ja":"華屋与兵衛"}},"amenity/restaurant|餃子の王将":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"餃子の王将","brand:en":"Gyoza no Ohsho","brand:ja":"餃子の王将","brand:wikidata":"Q11666805","brand:wikipedia":"en:Gyoza no Ohsho",cuisine:"chinese;gyoza",name:"餃子の王将","name:en":"Gyoza no Ohsho","name:ja":"餃子の王将"}},"amenity/restaurant|麥味登":{tags:{amenity:"restaurant",brand:"麥味登",name:"麥味登"}},"amenity/restaurant|바다횟집":{countryCodes:["kr"],tags:{amenity:"restaurant",brand:"바다횟집","brand:en":"Bada Fish Restaurant","brand:ko":"바다횟집",cuisine:"fish",name:"바다횟집","name:en":"Bada Fish Restaurant","name:ko":"바다횟집"}},"amenity/restaurant|빕스":{countryCodes:["kr"],tags:{amenity:"restaurant",brand:"빕스","brand:en":"Vips","brand:ko":"빕스","brand:wikidata":"Q12599540","brand:wikipedia":"ko:빕스",cuisine:"salad;steak_house",name:"빕스","name:en":"Vips","name:ko":"빕스"}},"amenity/school|Imagine Schools":{countryCodes:["us"],matchNames:["imagine","imagine school"],tags:{amenity:"school",brand:"Imagine Schools","brand:wikidata":"Q6002737","brand:wikipedia":"en:Imagine Schools",name:"Imagine Schools","operator:type":"private_non_profit"}},"amenity/school|KIPP":{countryCodes:["us"],tags:{amenity:"school",brand:"KIPP","brand:wikidata":"Q6423304","brand:wikipedia":"en:KIPP (organization)",name:"KIPP",official_name:"Knowledge Is Power Program","operator:type":"private_non_profit"}},"amenity/school|Success Academy":{countryCodes:["us"],tags:{amenity:"school",brand:"Success Academy","brand:wikidata":"Q14707388","brand:wikipedia":"en:Success Academy Charter Schools",name:"Success Academy","operator:type":"private_non_profit"}},"amenity/social_centre|American Legion Hall":{countryCodes:["us"],matchNames:["american legion"],tags:{amenity:"social_centre",brand:"American Legion","brand:wikidata":"Q468865","brand:wikipedia":"en:American Legion",name:"American Legion Hall","social_centre:for":"veterans"}},"amenity/social_centre|Eagles Lodge":{countryCodes:["us"],matchNames:["aeries","eagles"],tags:{alt_name:"Aeries Lodge",amenity:"social_centre",brand:"Fraternal Order of Eagles","brand:wikidata":"Q5493810","brand:wikipedia":"en:Fraternal Order of Eagles",name:"Eagles Lodge",official_name:"Fraternal Order of Eagles",short_name:"FOE"}},"amenity/social_centre|Elks Lodge":{countryCodes:["us"],matchNames:["elks"],tags:{amenity:"social_centre",brand:"Benevolent and Protective Order of Elks","brand:wikidata":"Q2895789","brand:wikipedia":"en:Benevolent and Protective Order of Elks",name:"Elks Lodge",official_name:"Benevolent and Protective Order of Elks",short_name:"BPOE"}},"amenity/social_centre|Lions Clubs International":{matchNames:["lions club","lions club international","lions clubs"],tags:{amenity:"social_centre",brand:"Lions Clubs International","brand:wikidata":"Q270029","brand:wikipedia":"en:Lions Clubs International",name:"Lions Clubs International"}},"amenity/social_centre|Moose Lodge":{countryCodes:["bm","ca","us"],matchNames:["moose"],tags:{amenity:"social_centre",brand:"Loyal Order of Moose","brand:wikidata":"Q6908585","brand:wikipedia":"en:Loyal Order of Moose",name:"Moose Lodge",official_name:"Loyal Order of Moose"}},"amenity/social_centre|Odd Fellows Hall":{matchNames:["odd fellow","odd fellows"],tags:{amenity:"social_centre",brand:"Independent Order of Odd Fellows","brand:wikidata":"Q1425508","brand:wikipedia":"en:Independent Order of Odd Fellows",name:"Odd Fellows Hall",official_name:"Independent Order of Odd Fellows",short_name:"IOOF"}},"amenity/social_centre|Orioles Nest":{countryCodes:["us"],matchNames:["fraternal order of orioles","oriole nest","orioles"],tags:{amenity:"social_centre",brand:"Fraternal Order Orioles","brand:wikidata":"Q5493805","brand:wikipedia":"en:Fraternal Order Orioles",name:"Orioles Nest",official_name:"Fraternal Order Orioles",short_name:"FOO"}},"amenity/social_centre|Royal Canadian Legion Hall":{countryCodes:["ca"],tags:{amenity:"social_centre",brand:"Royal Canadian Legion","brand:wikidata":"Q3270231","brand:wikipedia":"en:Royal Canadian Legion",name:"Royal Canadian Legion Hall",short_name:"RCL"}},"amenity/social_centre|VFW Post":{countryCodes:["de","jp","kr","ph","th","us"],tags:{amenity:"social_centre",brand:"Veterans of Foreign Wars of the United States","brand:wikidata":"Q3556413","brand:wikipedia":"en:Veterans of Foreign Wars",name:"VFW Post","name:en":"VFW Post",official_name:"Veterans of Foreign Wars of the United States",short_name:"VFW","social_centre:for":"veterans"}},"amenity/social_facility|Boys & Girls Club":{countryCodes:["us"],tags:{amenity:"social_facility",brand:"Boys & Girls Club","brand:wikidata":"Q2923055","brand:wikipedia":"en:Boys & Girls Clubs of America",name:"Boys & Girls Club",social_facility:"outreach","social_facility:for":"children"}},"amenity/social_facility|ONCE":{countryCodes:["es"],nomatch:["shop/lottery|ONCE"],tags:{amenity:"social_facility",brand:"ONCE","brand:wikidata":"Q1750397","brand:wikipedia":"es:Organización Nacional de Ciegos Españoles",name:"ONCE",official_name:"Organización Nacional de Ciegos Españoles",social_facility:"outreach","social_facility:for":"blind"}},"amenity/social_facility|Vet Center":{countryCodes:["us"],tags:{amenity:"social_facility",brand:"VA","brand:wikidata":"Q6580225","brand:wikipedia":"en:Veterans Health Administration",healthcare:"counselling","healthcare:counselling":"psychiatry","healthcare:for":"veterans",name:"Vet Center",social_facility:"healthcare;outreach","social_facility:for":"veterans"}},"amenity/university|DeVry University":{countryCodes:["us"],tags:{amenity:"university",brand:"DeVry University","brand:wikidata":"Q3298441","brand:wikipedia":"en:DeVry University",name:"DeVry University",short_name:"DeVry"}},"amenity/university|Strayer University":{countryCodes:["us"],tags:{amenity:"university",brand:"Strayer University","brand:wikidata":"Q7622587","brand:wikipedia":"en:Strayer University",name:"Strayer University",short_name:"Strayer"}},"amenity/university|University of Phoenix":{countryCodes:["us"],tags:{amenity:"university",brand:"University of Phoenix","brand:wikidata":"Q1889100","brand:wikipedia":"en:University of Phoenix",name:"University of Phoenix",short_name:"UOPX"}},"amenity/vehicle_inspection|Autosur":{countryCodes:["fr"],tags:{amenity:"vehicle_inspection",brand:"Autosur","brand:wikidata":"Q64224807",name:"Autosur"}},"amenity/vehicle_inspection|Autovision":{countryCodes:["fr"],tags:{amenity:"vehicle_inspection",brand:"Autovision","brand:wikidata":"Q64224842",name:"Autovision"}},"amenity/vehicle_inspection|Dekra":{countryCodes:["de","fr"],tags:{amenity:"vehicle_inspection",brand:"Dekra","brand:wikidata":"Q383711","brand:wikipedia":"en:Dekra",name:"Dekra",official_name:"Dekra Automotive"}},"amenity/vehicle_inspection|Sécuritest":{countryCodes:["fr"],tags:{amenity:"vehicle_inspection",brand:"Sécuritest","brand:wikidata":"Q64224992",name:"Sécuritest"}},"amenity/vehicle_inspection|TÜV Hanse":{countryCodes:["de"],tags:{amenity:"vehicle_inspection",brand:"TÜV Hanse","brand:wikidata":"Q2463537","brand:wikipedia":"de:TÜV Hanse",name:"TÜV Hanse",short_name:"TÜV"}},"amenity/vehicle_inspection|TÜV Hessen":{countryCodes:["de"],tags:{amenity:"vehicle_inspection",brand:"TÜV Hessen","brand:wikidata":"Q2463542","brand:wikipedia":"de:TÜV Hessen",name:"TÜV Hessen",short_name:"TÜV"}},"amenity/vehicle_inspection|TÜV Nord":{countryCodes:["de"],tags:{amenity:"vehicle_inspection",brand:"TÜV Nord","brand:wikidata":"Q2463547","brand:wikipedia":"de:TÜV Nord",name:"TÜV Nord",short_name:"TÜV"}},"amenity/vehicle_inspection|TÜV Rheinland":{countryCodes:["de"],tags:{amenity:"vehicle_inspection",brand:"TÜV Rheinland","brand:wikidata":"Q632391","brand:wikipedia":"de:TÜV Rheinland",name:"TÜV Rheinland",short_name:"TÜV"}},"amenity/vehicle_inspection|TÜV Saarland":{countryCodes:["de"],tags:{amenity:"vehicle_inspection",brand:"TÜV Saarland","brand:wikidata":"Q996314","brand:wikipedia":"de:TÜV Saarland",name:"TÜV Saarland",short_name:"TÜV"}},"amenity/vehicle_inspection|TÜV Süd":{countryCodes:["de"],tags:{amenity:"vehicle_inspection",brand:"TÜV Süd","brand:wikidata":"Q880718","brand:wikipedia":"de:TÜV Süd",name:"TÜV Süd",short_name:"TÜV"}},"amenity/vehicle_inspection|TÜV Thüringen":{countryCodes:["de"],tags:{amenity:"vehicle_inspection",brand:"TÜV Thüringen","brand:wikidata":"Q2463551","brand:wikipedia":"de:TÜV Thüringen",name:"TÜV Thüringen",short_name:"TÜV"}},"amenity/vending_machine|Amazon Locker":{countryCodes:["de","us"],tags:{amenity:"vending_machine",brand:"Amazon Locker","brand:wikidata":"Q16974764","brand:wikipedia":"en:Amazon Locker",name:"Amazon Locker",vending:"parcel_pickup"}},"amenity/vending_machine|AmeriGas":{countryCodes:["us"],tags:{amenity:"vending_machine",brand:"AmeriGas","brand:wikidata":"Q23130318","fuel:lpg":"yes",name:"AmeriGas",vending:"gas"}},"amenity/vending_machine|Automat ŚKUP":{countryCodes:["pl"],tags:{amenity:"vending_machine",brand:"Automat ŚKUP","brand:wikidata":"Q24945427","brand:wikipedia":"pl:Śląska Karta Usług Publicznych",name:"Automat ŚKUP",vending:"public_transport_tickets"}},"amenity/vending_machine|BKK-automata":{countryCodes:["hu"],tags:{amenity:"vending_machine",brand:"BKK-automata","brand:wikidata":"Q608917","brand:wikipedia":"hu:Budapesti Közlekedési Központ",name:"BKK-automata",vending:"public_transport_tickets"}},"amenity/vending_machine|Best Buy Express":{countryCodes:["us"],nomatch:["shop/electronics|Best Buy","shop/mobile_phone|Best Buy Mobile"],tags:{amenity:"vending_machine",brand:"Best Buy Express","brand:wikidata":"Q533415",name:"Best Buy Express",vending:"electronics"}},"amenity/vending_machine|Blue Rhino":{countryCodes:["us"],tags:{amenity:"vending_machine",brand:"Blue Rhino","brand:wikidata":"Q65681213","fuel:lpg":"yes",name:"Blue Rhino",vending:"gas"}},"amenity/vending_machine|CVS Pharmacy":{countryCodes:["us"],nomatch:["amenity/pharmacy|CVS Pharmacy","shop/chemist|CVS Pharmacy"],tags:{amenity:"vending_machine",brand:"CVS Pharmacy","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",name:"CVS Pharmacy",short_name:"CVS",vending:"chemist"}},"amenity/vending_machine|DHL Packstation":{countryCodes:["de"],matchTags:["amenity/post_box"],tags:{amenity:"vending_machine",brand:"Packstation","brand:wikidata":"Q1766703","brand:wikipedia":"en:Packstation",name:"DHL Packstation",vending:"parcel_pickup;parcel_mail_in"}},"amenity/vending_machine|DHL Paketbox":{countryCodes:["de"],tags:{amenity:"vending_machine",brand:"Paketbox","brand:wikidata":"Q2046604","brand:wikipedia":"de:Paketbox",name:"DHL Paketbox",vending:"parcel_mail_in"}},"amenity/vending_machine|Dog-Station":{countryCodes:["at","de","dk"],tags:{amenity:"vending_machine",brand:"Dog-Station","brand:wikidata":"Q63720061",name:"Dog-Station",vending:"excrement_bags"}},"amenity/vending_machine|Foxpost":{tags:{amenity:"vending_machine",brand:"Foxpost",name:"Foxpost"}},"amenity/vending_machine|Home City Ice":{countryCodes:["us"],tags:{amenity:"vending_machine",brand:"Home City Ice","brand:wikidata":"Q5888287",name:"Home City Ice",vending:"ice_cubes"}},"amenity/vending_machine|KKM":{countryCodes:["pl"],tags:{amenity:"vending_machine",brand:"KKM","brand:wikidata":"Q57515549",name:"KKM",vending:"public_transport_tickets"}},"amenity/vending_machine|Ozon Box":{countryCodes:["ru"],matchNames:["постамат ozon box"],matchTags:["amenity/post_box"],tags:{amenity:"vending_machine",brand:"Ozon Box","brand:wikidata":"Q2365235","brand:wikipedia":"ru:Ozon.ru",name:"Ozon Box",vending:"parcel_pickup"}},"amenity/vending_machine|Paczkomat InPost":{countryCodes:["pl"],tags:{amenity:"vending_machine",brand:"InPost","brand:wikidata":"Q3182097","brand:wikipedia":"pl:InPost",name:"Paczkomat InPost",vending:"parcel_pickup;parcel_mail_in"}},"amenity/vending_machine|ParkPlus~(Calgary)":{countryCodes:["ca"],tags:{amenity:"vending_machine",brand:"ParkPlus","brand:wikidata":"Q63719595",name:"ParkPlus",vending:"parking_tickets"}},"amenity/vending_machine|Redbox":{countryCodes:["us"],tags:{amenity:"vending_machine",brand:"Redbox","brand:wikidata":"Q7305489","brand:wikipedia":"en:Redbox",name:"Redbox",vending:"movies"}},"amenity/vending_machine|Reddy Ice":{countryCodes:["us"],tags:{amenity:"vending_machine",brand:"Reddy Ice","brand:wikidata":"Q7305666","brand:wikipedia":"en:Reddy Ice",name:"Reddy Ice",vending:"ice_cubes"}},"amenity/vending_machine|Robidog":{countryCodes:["ch"],tags:{amenity:"vending_machine",brand:"Robidog","brand:wikidata":"Q2159689","brand:wikipedia":"de:Robidog",name:"Robidog",vending:"excrement_bags"}},"amenity/vending_machine|Schlauchomat":{countryCodes:["at","de","it"],tags:{amenity:"vending_machine",brand:"Schlauchomat",name:"Schlauchomat",vending:"bicycle_tube"}},"amenity/vending_machine|Smartpost":{countryCodes:["fi"],matchTags:["amenity/post_box"],tags:{amenity:"vending_machine",brand:"Smartpost","brand:wikidata":"Q7543889","brand:wikipedia":"fi:SmartPOST",name:"Smartpost",vending:"parcel_pickup;parcel_mail_in"}},"amenity/vending_machine|Tobaccoland":{countryCodes:["de"],tags:{amenity:"vending_machine",brand:"Tobaccoland","brand:wikidata":"Q1439872","brand:wikipedia":"de:Tobaccoland Automatengesellschaft",name:"Tobaccoland",vending:"cigarettes"}},"amenity/vending_machine|VVO Fahrausweise":{countryCodes:["de"],tags:{amenity:"vending_machine",brand:"VVO Fahrausweise",name:"VVO Fahrausweise",vending:"public_transport_tickets"}},"amenity/vending_machine|Ключ здоровья":{countryCodes:["ru"],matchTags:["shop/water"],tags:{amenity:"vending_machine",brand:"Ключ здоровья",name:"Ключ здоровья",vending:"water"}},"amenity/vending_machine|コカ・コーラ":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"コカ・コーラ","brand:en":"Coca-Cola","brand:ja":"コカ・コーラ","brand:wikidata":"Q2813","brand:wikipedia":"ja:コカ・コーラ",drink:"cola",name:"コカ・コーラ","name:en":"Coca-Cola","name:ja":"コカ・コーラ",vending:"drinks"}},"amenity/vending_machine|ポッカサッポロ":{countryCodes:["jp"],matchNames:["pokka sapporo"],tags:{amenity:"vending_machine",brand:"ポッカサッポロ","brand:en":"Pokka Sapporo","brand:ja":"ポッカサッポロ","brand:wikidata":"Q7208665","brand:wikipedia":"ja:ポッカサッポロフード&ビバレッジ",name:"ポッカサッポロ","name:en":"Pokka Sapporo","name:ja":"ポッカサッポロ",vending:"water;food"}},"amenity/veterinary|Banfield Pet Hospital":{countryCodes:["us"],tags:{amenity:"veterinary",brand:"Banfield Pet Hospital","brand:wikidata":"Q2882416","brand:wikipedia":"en:Banfield Pet Hospital",name:"Banfield Pet Hospital"}},"amenity/veterinary|VCA Animal Hospital":{countryCodes:["ca","us"],tags:{amenity:"veterinary",brand:"VCA Animal Hospital","brand:wikidata":"Q7906620","brand:wikipedia":"en:VCA Animal Hospitals",name:"VCA Animal Hospital"}},"craft/cleaning|Molly Maid":{countryCodes:["ca","gb","jp","pt","us"],tags:{brand:"Molly Maid","brand:wikidata":"Q6896624","brand:wikipedia":"en:Molly Maid",craft:"cleaning",name:"Molly Maid"}},"craft/plumber|Mr. Rooter":{countryCodes:["us"],tags:{alt_name:"Mister Rooter",brand:"Mr. Rooter","brand:wikidata":"Q6929145","brand:wikipedia":"en:Mr. Rooter",craft:"plumber",name:"Mr. Rooter",official_name:"Mr. Rooter Plumbing"}},"craft/signmaker|Fastsigns":{countryCodes:["ae","ca","cl","gb","ky","mx","sa","us"],matchTags:["shop/sign"],tags:{brand:"Fastsigns","brand:wikidata":"Q5437127","brand:wikipedia":"en:Fastsigns",craft:"signmaker",name:"Fastsigns"}},"craft/window_construction|K par K":{countryCodes:["fr"],tags:{brand:"K par K","brand:wikidata":"Q3191596","brand:wikipedia":"fr:K par K",craft:"window_construction",name:"K par K"}},"healthcare/blood_donation|American Red Cross":{countryCodes:["us"],tags:{brand:"American Red Cross","brand:wikidata":"Q470110","brand:wikipedia":"en:The American National Red Cross","donation:compensation":"no",healthcare:"blood_donation",name:"American Red Cross",official_name:"The American National Red Cross",short_name:"Red Cross"}},"healthcare/blood_donation|Australian Red Cross Blood Service":{countryCodes:["au"],tags:{brand:"Australian Red Cross Blood Service","brand:wikidata":"Q4824602","brand:wikipedia":"en:Australian Red Cross Blood Service","donation:compensation":"no",healthcare:"blood_donation",name:"Australian Red Cross Blood Service",short_name:"Blood Service"}},"healthcare/blood_donation|Thai Red Cross Society":{countryCodes:["th"],tags:{brand:"Thai Red Cross Society","brand:wikidata":"Q4922087","brand:wikipedia":"en:Thai Red Cross Society","donation:compensation":"no",healthcare:"blood_donation",name:"Thai Red Cross Society",short_name:"Thai Red Cross"}},"healthcare/counselling|Jenny Craig":{countryCodes:["au","ca","nz","us"],matchTags:["amenity/doctors","amenity/weight_clinic","leisure/fitness_centre","office/therapist","shop/beauty","shop/diet","shop/food","shop/health_food","shop/herbalist","shop/nutrition","shop/nutrition_supplements","shop/weight_loss"],tags:{brand:"Jenny Craig","brand:wikidata":"Q6179221","brand:wikipedia":"en:Jenny Craig, Inc.",healthcare:"counselling","healthcare:counselling":"dietitian","healthcare:speciality":"weight_loss",name:"Jenny Craig"}},"healthcare/counselling|WW Studio":{matchNames:["ww"],matchTags:["amenity/doctors","amenity/weight_clinic","leisure/fitness_centre","office/therapist","shop/beauty","shop/diet","shop/food","shop/health_food","shop/herbalist","shop/nutrition","shop/nutrition_supplements","shop/weight_loss"],tags:{alt_name:"Weight Watchers",brand:"WW Studio","brand:wikidata":"Q1929466","brand:wikipedia":"en:WW International",healthcare:"counselling","healthcare:counselling":"dietitian","healthcare:speciality":"weight_loss",name:"WW Studio"}},"landuse/residential|Avalon":{countryCodes:["us"],tags:{brand:"Avalon","brand:wikidata":"Q64665938",landuse:"residential",name:"Avalon",residential:"apartments"}},"leisure/bowling_alley|Hollywood Bowl":{countryCodes:["gb"],tags:{brand:"Hollywood Bowl","brand:wikidata":"Q80971952","brand:wikipedia":"en:Hollywood Bowl Group",leisure:"bowling_alley",name:"Hollywood Bowl"}},"leisure/bowling_alley|Strike Bowling Bar":{countryCodes:["au"],tags:{brand:"Strike Bowling Bar","brand:wikidata":"Q7623769","brand:wikipedia":"en:Strike Bowling Bar",leisure:"bowling_alley",name:"Strike Bowling Bar"}},"leisure/dog_park|Kamp K9":{countryCodes:["ca","us"],matchTags:["leisure/park"],tags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",leisure:"dog_park",name:"Kamp K9"}},"leisure/escape_game|Escapology":{countryCodes:["us"],matchTags:["tourism/attraction"],tags:{brand:"Escapology","brand:wikidata":"Q64137163",leisure:"escape_game",name:"Escapology"}},"leisure/fitness_centre|24 Hour Fitness":{countryCodes:["us"],tags:{brand:"24 Hour Fitness","brand:wikidata":"Q4631849","brand:wikipedia":"en:24 Hour Fitness",leisure:"fitness_centre",name:"24 Hour Fitness"}},"leisure/fitness_centre|Academia ao ar livre":{tags:{brand:"Academia ao ar livre",leisure:"fitness_centre",name:"Academia ao ar livre"}},"leisure/fitness_centre|Anytime Fitness":{tags:{brand:"Anytime Fitness","brand:wikidata":"Q4778364","brand:wikipedia":"en:Anytime Fitness",leisure:"fitness_centre",name:"Anytime Fitness"}},"leisure/fitness_centre|Basic-Fit":{countryCodes:["be","es","fr","lu","nl"],tags:{brand:"Basic-Fit","brand:wikidata":"Q40165577","brand:wikipedia":"nl:Basic-Fit",leisure:"fitness_centre",name:"Basic-Fit"}},"leisure/fitness_centre|Blink Fitness":{countryCodes:["us"],matchNames:["blink"],tags:{brand:"Blink Fitness","brand:wikidata":"Q65621568",leisure:"fitness_centre",name:"Blink Fitness"}},"leisure/fitness_centre|Clever fit":{countryCodes:["at","ch","de"],tags:{brand:"Clever fit","brand:wikidata":"Q27909675","brand:wikipedia":"de:Clever fit",leisure:"fitness_centre",name:"Clever fit"}},"leisure/fitness_centre|CorePower Yoga":{countryCodes:["us"],matchNames:["corepower"],matchTags:["club/sport","leisure/sports_centre"],tags:{brand:"CorePower Yoga","brand:wikidata":"Q21015663","brand:wikipedia":"en:CorePower Yoga",leisure:"fitness_centre",name:"CorePower Yoga",sport:"yoga"}},"leisure/fitness_centre|Crunch Fitness":{countryCodes:["au","ca","us"],matchNames:["crunch"],tags:{brand:"Crunch Fitness","brand:wikidata":"Q5190093","brand:wikipedia":"en:Crunch Fitness",leisure:"fitness_centre",name:"Crunch Fitness"}},"leisure/fitness_centre|Curves":{tags:{brand:"Curves","brand:wikidata":"Q5196080","brand:wikipedia":"en:Curves International",leisure:"fitness_centre",name:"Curves"}},"leisure/fitness_centre|F45 Training":{tags:{brand:"F45 Training","brand:wikidata":"Q64390973",leisure:"fitness_centre",name:"F45 Training"}},"leisure/fitness_centre|Fit4Less~(Canada)":{countryCodes:["ca"],tags:{brand:"Fit4Less","brand:wikidata":"Q64821050",leisure:"fitness_centre",name:"Fit4Less"}},"leisure/fitness_centre|Fit4less~(UK)":{countryCodes:["gb"],tags:{brand:"Fit4less","brand:wikidata":"Q64821053",leisure:"fitness_centre",name:"Fit4less"}},"leisure/fitness_centre|Fitness First":{countryCodes:["ae","au","de","gb","ph","th"],tags:{brand:"Fitness First","brand:wikidata":"Q127120","brand:wikipedia":"en:Fitness First",leisure:"fitness_centre",name:"Fitness First"}},"leisure/fitness_centre|Fitness24Seven":{countryCodes:["fi","se"],tags:{brand:"Fitness24Seven","brand:wikidata":"Q61112447","brand:wikipedia":"sv:Fitness24Seven",leisure:"fitness_centre",name:"Fitness24Seven"}},"leisure/fitness_centre|Gold's Gym":{countryCodes:["ae","in","ph","us"],tags:{brand:"Gold's Gym","brand:wikidata":"Q1536234","brand:wikipedia":"en:Gold's Gym",leisure:"fitness_centre",name:"Gold's Gym"}},"leisure/fitness_centre|GoodLife Fitness":{countryCodes:["ca"],tags:{brand:"GoodLife Fitness","brand:wikidata":"Q3110654","brand:wikipedia":"en:GoodLife Fitness",leisure:"fitness_centre",name:"GoodLife Fitness"}},"leisure/fitness_centre|Jazzercise":{countryCodes:["us"],matchTags:["leisure/dance"],tags:{brand:"Jazzercise","brand:wikidata":"Q6168434","brand:wikipedia":"en:Jazzercise",leisure:"fitness_centre",name:"Jazzercise"}},"leisure/fitness_centre|LA Fitness":{countryCodes:["ca","gb","us"],tags:{brand:"LA Fitness","brand:wikidata":"Q6457180","brand:wikipedia":"en:LA Fitness",leisure:"fitness_centre",name:"LA Fitness"}},"leisure/fitness_centre|Life Time":{countryCodes:["ca","us"],matchNames:["life time athletic","life time fitness"],tags:{brand:"Life Time","brand:wikidata":"Q6545004","brand:wikipedia":"en:Life Time Fitness",leisure:"fitness_centre",name:"Life Time"}},"leisure/fitness_centre|McFit":{countryCodes:["at","de","es","it","pl"],tags:{brand:"McFit","brand:wikidata":"Q871302","brand:wikipedia":"en:McFit",leisure:"fitness_centre",name:"McFit"}},"leisure/fitness_centre|Mrs. Sporty":{tags:{brand:"Mrs. Sporty",leisure:"fitness_centre",name:"Mrs. Sporty"}},"leisure/fitness_centre|Orangetheory Fitness":{countryCodes:["ca","es","us"],matchNames:["orangetheory"],tags:{brand:"Orangetheory Fitness","brand:wikidata":"Q25005163","brand:wikipedia":"en:Orangetheory Fitness",leisure:"fitness_centre",name:"Orangetheory Fitness"}},"leisure/fitness_centre|Planet Fitness":{countryCodes:["ca","us"],tags:{brand:"Planet Fitness","brand:wikidata":"Q7201095","brand:wikipedia":"en:Planet Fitness",leisure:"fitness_centre",name:"Planet Fitness"}},"leisure/fitness_centre|PureGym":{countryCodes:["gb"],tags:{brand:"PureGym","brand:wikidata":"Q18345898","brand:wikipedia":"en:PureGym",leisure:"fitness_centre",name:"PureGym"}},"leisure/fitness_centre|Retro Fitness":{countryCodes:["us"],tags:{brand:"Retro Fitness","brand:wikidata":"Q61994955",leisure:"fitness_centre",name:"Retro Fitness"}},"leisure/fitness_centre|Smart Fit":{countryCodes:["br","cl","co","do","mx","pe"],tags:{brand:"Smart Fit","brand:wikidata":"Q30930959","brand:wikipedia":"pt:Smart Fit",leisure:"fitness_centre",name:"Smart Fit"}},"leisure/fitness_centre|Snap Fitness":{tags:{brand:"Snap Fitness","brand:wikidata":"Q7547254","brand:wikipedia":"en:Snap Fitness",leisure:"fitness_centre",name:"Snap Fitness"}},"leisure/fitness_centre|SoulCycle":{countryCodes:["ca","us"],tags:{brand:"SoulCycle","brand:wikidata":"Q17084730","brand:wikipedia":"en:SoulCycle",leisure:"fitness_centre",name:"SoulCycle",sport:"cycling"}},"leisure/fitness_centre|The Gym":{countryCodes:["gb"],matchNames:["the gym group"],tags:{brand:"The Gym","brand:wikidata":"Q48815022","brand:wikipedia":"en:The Gym Group",leisure:"fitness_centre",name:"The Gym"}},"leisure/fitness_centre|Virgin Active":{tags:{brand:"Virgin Active","brand:wikidata":"Q4013942","brand:wikipedia":"en:Virgin Active",leisure:"fitness_centre",name:"Virgin Active"}},"leisure/fitness_centre|Xercise4Less":{countryCodes:["gb"],tags:{brand:"Xercise4Less","brand:wikidata":"Q79244612",leisure:"fitness_centre",name:"Xercise4Less"}},"leisure/fitness_centre|エニタイムフィットネス":{countryCodes:["jp"],tags:{"alt_name:en":"Fast Fitness",brand:"エニタイムフィットネス","brand:en":"Anytime Fitness","brand:ja":"エニタイムフィットネス","brand:wikidata":"Q4778364","brand:wikipedia":"ja:エニタイムフィットネス",leisure:"fitness_centre",name:"エニタイムフィットネス","name:en":"Anytime Fitness","name:ja":"エニタイムフィットネス"}},"leisure/fitness_centre|カーブス":{countryCodes:["jp"],tags:{brand:"カーブス","brand:en":"Curves","brand:ja":"カーブス","brand:wikidata":"Q5196080","brand:wikipedia":"ja:カーブス",leisure:"fitness_centre",name:"カーブス","name:en":"Curves","name:ja":"カーブス"}},"leisure/playground|McDonald's PlayPlace":{matchNames:["mcdonald's"],tags:{access:"customers",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",leisure:"playground",name:"McDonald's PlayPlace"}},"leisure/sports_centre|YMCA":{tags:{brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",leisure:"sports_centre",name:"YMCA"}},"leisure/sports_centre|iFLY":{tags:{brand:"iFLY","brand:wikidata":"Q64767105",leisure:"sports_centre",name:"iFLY",sport:"indoor_skydiving"}},"office/bail_bond_agent|Aladdin Bail Bonds":{countryCodes:["us"],matchNames:["aladdin","aladin bail bonds","alladin bail bonds"],matchTags:["amenity/bail_bond","amenity/bail_bonds","office/bail_bond","office/bail_bonds","shop/bail_bond","shop/bail_bonds","shop/money_lender"],tags:{brand:"Aladdin Bail Bonds","brand:wikidata":"Q64166257","brand:wikipedia":"en:Aladdin Bail Bonds",name:"Aladdin Bail Bonds",office:"bail_bond_agent",opening_hours:"24/7"}},"office/consulting|Deloitte":{matchTags:["office/accountant","office/financial","office/tax_adivsor"],tags:{brand:"Deloitte","brand:wikidata":"Q491748","brand:wikipedia":"en:Deloitte",name:"Deloitte",office:"consulting"}},"office/consulting|EY":{matchTags:["office/accountant","office/financial","office/tax_adivsor"],tags:{brand:"EY","brand:wikidata":"Q489097","brand:wikipedia":"en:Ernst & Young",name:"EY",office:"consulting",official_name:"Ernst & Young"}},"office/consulting|Indra":{matchTags:["office/financial","office/it","office/telecommunication"],tags:{brand:"Indra","brand:wikidata":"Q1661823","brand:wikipedia":"es:Indra Sistemas",name:"Indra",office:"consulting",official_name:"Indra Sistemas, S.A."}},"office/consulting|KPMG":{matchTags:["office/accountant","office/financial","office/tax_adivsor"],tags:{brand:"KPMG","brand:wikidata":"Q493751","brand:wikipedia":"en:KPMG",name:"KPMG",office:"consulting"}},"office/consulting|PwC":{matchTags:["office/accountant","office/financial","office/tax_adivsor"],tags:{brand:"PwC","brand:wikidata":"Q488048","brand:wikipedia":"en:PricewaterhouseCoopers",name:"PwC",office:"consulting",official_name:"PricewaterhouseCoopers"}},"office/coworking|Awfis":{countryCodes:["in"],tags:{brand:"Awfis","brand:wikidata":"Q60747757","brand:wikipedia":"en:Awfis",fee:"yes",name:"Awfis",office:"coworking"}},"office/coworking|Ucommune~(China)":{countryCodes:["cn"],tags:{brand:"优客工场","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"优客工场","brand:zh-Hans":"优客工场",fee:"yes",name:"优客工场","name:en":"Ucommune","name:zh":"优客工场","name:zh-Hans":"优客工场",office:"coworking"}},"office/coworking|Ucommune~(Hong Kong)":{countryCodes:["hk"],tags:{brand:"優客工場 Ucommune","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"優客工場","brand:zh-Hans":"优客工场","brand:zh-Hant":"優客工場",fee:"yes",name:"優客工場 Ucommune","name:en":"Ucommune","name:zh":"優客工場","name:zh-Hans":"优客工场","name:zh-Hant":"優客工場",office:"coworking"}},"office/coworking|Ucommune~(Singapore)":{countryCodes:["sg"],tags:{brand:"Ucommune","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"优客工场","brand:zh-Hans":"优客工场",fee:"yes",name:"Ucommune","name:en":"Ucommune","name:zh":"优客工场","name:zh-Hans":"优客工场",office:"coworking"}},"office/coworking|Ucommune~(Taiwan)":{countryCodes:["tw"],tags:{brand:"優客工場","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"優客工場","brand:zh-Hans":"优客工场","brand:zh-Hant":"優客工場",fee:"yes",name:"優客工場","name:en":"Ucommune","name:zh":"優客工場","name:zh-Hans":"优客工场","name:zh-Hant":"優客工場",office:"coworking"}},"office/coworking|WeWork":{countryCodes:["us"],tags:{brand:"WeWork","brand:wikidata":"Q19995004","brand:wikipedia":"en:WeWork",fee:"yes",name:"WeWork",office:"coworking"}},"office/employment_agency|Adecco":{tags:{brand:"Adecco","brand:wikidata":"Q353494","brand:wikipedia":"en:The Adecco Group",name:"Adecco",office:"employment_agency"}},"office/employment_agency|Agentur für Arbeit":{countryCodes:["de"],tags:{brand:"Agentur für Arbeit","brand:wikidata":"Q1478016","brand:wikipedia":"de:Bundesagentur für Arbeit",name:"Agentur für Arbeit",office:"employment_agency"}},"office/employment_agency|Appel Médical":{countryCodes:["fr"],tags:{brand:"Appel Médical",name:"Appel Médical",office:"employment_agency"}},"office/employment_agency|Jobcentre Plus":{countryCodes:["gb"],tags:{brand:"Jobcentre Plus","brand:wikidata":"Q6206793","brand:wikipedia":"en:Jobcentre Plus",name:"Jobcentre Plus",office:"employment_agency"}},"office/employment_agency|Manpower":{tags:{brand:"Manpower","brand:wikidata":"Q1472539","brand:wikipedia":"en:ManpowerGroup",name:"Manpower",office:"employment_agency"}},"office/employment_agency|Pôle Emploi":{countryCodes:["fr"],tags:{brand:"Pôle Emploi","brand:wikidata":"Q8901192","brand:wikipedia":"en:Pôle emploi",name:"Pôle Emploi",office:"employment_agency"}},"office/employment_agency|Randstad":{tags:{brand:"Randstad","brand:wikidata":"Q267840","brand:wikipedia":"en:Randstad Holding",name:"Randstad",office:"employment_agency"}},"office/energy_supplier|Endesa":{tags:{brand:"Endesa","brand:wikidata":"Q1275336","brand:wikipedia":"es:Endesa",name:"Endesa",office:"energy_supplier"}},"office/energy_supplier|Iberdrola":{tags:{brand:"Iberdrola","brand:wikidata":"Q1437502","brand:wikipedia":"es:Iberdrola",name:"Iberdrola",office:"energy_supplier"}},"office/energy_supplier|Naturgy":{countryCodes:["ar","au","be","br","cl","cn","cr","de","do","dz","eg","es","fr","gb","ie","in","jm","jo","jp","lu","ma","mx","nl","om","pa","pe","pk","pr","pt","sg"],tags:{brand:"Naturgy","brand:wikidata":"Q474690","brand:wikipedia":"es:Naturgy",name:"Naturgy",office:"energy_supplier"}},"office/estate_agent|Allen & Harris":{countryCodes:["gb"],tags:{brand:"Allen & Harris","brand:wikidata":"Q81856601",name:"Allen & Harris",office:"estate_agent"}},"office/estate_agent|Bagshaws Residential":{countryCodes:["gb"],tags:{brand:"Bagshaws Residential","brand:wikidata":"Q81859084",name:"Bagshaws Residential",office:"estate_agent"}},"office/estate_agent|Bairstow Eves":{countryCodes:["gb"],tags:{brand:"Bairstow Eves","brand:wikidata":"Q81074787",name:"Bairstow Eves",office:"estate_agent"}},"office/estate_agent|Barnard Marcus":{countryCodes:["gb"],tags:{brand:"Barnard Marcus","brand:wikidata":"Q81860444",name:"Barnard Marcus",office:"estate_agent"}},"office/estate_agent|Brown & Merry":{countryCodes:["gb"],tags:{brand:"Brown & Merry","brand:wikidata":"Q81859714",name:"Brown & Merry",office:"estate_agent"}},"office/estate_agent|Century 21":{matchNames:["century 21 real estate"],nomatch:["shop/department_store|Century 21"],tags:{brand:"Century 21","brand:wikidata":"Q1054480","brand:wikipedia":"en:Century 21 (real estate)",name:"Century 21",office:"estate_agent"}},"office/estate_agent|Coldwell Banker":{matchNames:["coldwell banker real estate"],tags:{brand:"Coldwell Banker","brand:wikidata":"Q738853","brand:wikipedia":"en:Coldwell Banker",name:"Coldwell Banker",office:"estate_agent"}},"office/estate_agent|Connells":{countryCodes:["gb"],tags:{brand:"Connells","brand:wikidata":"Q5161738","brand:wikipedia":"en:Connells Group",name:"Connells",office:"estate_agent"}},"office/estate_agent|Engel & Völkers":{tags:{brand:"Engel & Völkers","brand:wikidata":"Q1341765","brand:wikipedia":"en:Engel & Völkers",name:"Engel & Völkers",office:"estate_agent"}},"office/estate_agent|Foncia":{countryCodes:["fr"],tags:{brand:"Foncia","brand:wikidata":"Q1435638","brand:wikipedia":"fr:Foncia",name:"Foncia",office:"estate_agent"}},"office/estate_agent|Fox & Sons":{countryCodes:["gb"],tags:{brand:"Fox & Sons","brand:wikidata":"Q81855298",name:"Fox & Sons",office:"estate_agent"}},"office/estate_agent|Foxtons":{countryCodes:["gb"],tags:{brand:"Foxtons","brand:wikidata":"Q5477251","brand:wikipedia":"en:Foxtons",name:"Foxtons",office:"estate_agent"}},"office/estate_agent|Greenslade Taylor Hunt":{countryCodes:["gb"],matchNames:["gth"],tags:{brand:"Greenslade Taylor Hunt","brand:wikidata":"Q81052826",name:"Greenslade Taylor Hunt",office:"estate_agent"}},"office/estate_agent|Guy Hoquet":{countryCodes:["fr"],tags:{brand:"Guy Hoquet","brand:wikidata":"Q25383970","brand:wikipedia":"fr:Guy Hoquet l'immobilier",name:"Guy Hoquet",office:"estate_agent"}},"office/estate_agent|Haart":{countryCodes:["gb"],tags:{brand:"Haart","brand:wikidata":"Q75006731","brand:wikipedia":"en: Spicerhaart",name:"Haart",office:"estate_agent"}},"office/estate_agent|Hamptons International":{countryCodes:["gb"],matchNames:["hamptons international lettings","hamptons international sales"],tags:{brand:"Hamptons International","brand:wikidata":"Q5646350","brand:wikipedia":"en:Hamptons International",name:"Hamptons International",office:"estate_agent",short_name:"Hamptons"}},"office/estate_agent|Harcourts":{tags:{brand:"Harcourts","brand:wikidata":"Q5655056","brand:wikipedia":"en:Harcourts International",name:"Harcourts",office:"estate_agent"}},"office/estate_agent|John L. Scott":{countryCodes:["us"],tags:{brand:"John L. Scott","brand:wikidata":"Q6243687","brand:wikipedia":"en:John L. Scott",name:"John L. Scott",office:"estate_agent"}},"office/estate_agent|Jones & Chapman":{countryCodes:["gb"],tags:{brand:"Jones & Chapman","brand:wikidata":"Q81858007",name:"Jones & Chapman",office:"estate_agent"}},"office/estate_agent|Knight Frank":{tags:{brand:"Knight Frank","brand:wikidata":"Q3197998","brand:wikipedia":"en:Knight Frank",name:"Knight Frank",office:"estate_agent"}},"office/estate_agent|Laforêt":{countryCodes:["fr"],tags:{brand:"Laforêt","brand:wikidata":"Q56310946","brand:wikipedia":"fr:Laforêt (immobilier)",name:"Laforêt",office:"estate_agent"}},"office/estate_agent|Manners & Harrison":{countryCodes:["gb"],tags:{brand:"Manners & Harrison","brand:wikidata":"Q81857241",name:"Manners & Harrison",office:"estate_agent"}},"office/estate_agent|Martin & Co":{countryCodes:["gb"],tags:{brand:"Martin & Co","brand:wikidata":"Q81066918",name:"Martin & Co",office:"estate_agent"}},"office/estate_agent|Orpi":{countryCodes:["fr"],tags:{brand:"Orpi","brand:wikidata":"Q3356080","brand:wikipedia":"fr:Organisation régionale des professionnels de l'immobilier",name:"Orpi",office:"estate_agent"}},"office/estate_agent|Palmer Snell":{countryCodes:["gb"],tags:{brand:"Palmer Snell","brand:wikidata":"Q81068923",name:"Palmer Snell",office:"estate_agent"}},"office/estate_agent|RE/MAX":{tags:{brand:"RE/MAX","brand:wikidata":"Q965845","brand:wikipedia":"en:RE/MAX",name:"RE/MAX",office:"estate_agent"}},"office/estate_agent|Ray White":{countryCodes:["au","nz"],tags:{brand:"Ray White","brand:wikidata":"Q81077729",name:"Ray White",office:"estate_agent"}},"office/estate_agent|Roger Platt":{countryCodes:["gb"],tags:{brand:"Roger Platt","brand:wikidata":"Q81859999",name:"Roger Platt",office:"estate_agent"}},"office/estate_agent|Royal LePage":{countryCodes:["ca"],tags:{brand:"Royal LePage","brand:wikidata":"Q7374385","brand:wikipedia":"en:Royal LePage",name:"Royal LePage",office:"estate_agent"}},"office/estate_agent|Shipways":{countryCodes:["gb"],tags:{brand:"Shipways","brand:wikidata":"Q81859397",name:"Shipways",office:"estate_agent"}},"office/estate_agent|Square Habitat":{countryCodes:["fr"],tags:{brand:"Square Habitat","brand:wikidata":"Q64027038","brand:wikipedia":"fr:Square Habitat",name:"Square Habitat",office:"estate_agent"}},"office/estate_agent|Stirling Ackroyd":{countryCodes:["gb"],tags:{brand:"Stirling Ackroyd","brand:wikidata":"Q81062228",name:"Stirling Ackroyd",office:"estate_agent"}},"office/estate_agent|Swetenhams":{countryCodes:["gb"],tags:{brand:"Swetenhams","brand:wikidata":"Q81858340",name:"Swetenhams",office:"estate_agent"}},"office/estate_agent|Tecnocasa":{countryCodes:["es","it","pl"],tags:{brand:"Tecnocasa","brand:wikidata":"Q2399658","brand:wikipedia":"de:Tecnocasa",name:"Tecnocasa",office:"estate_agent"}},"office/estate_agent|Townends":{countryCodes:["gb"],tags:{brand:"Townends","brand:wikidata":"Q81061275",name:"Townends",office:"estate_agent"}},"office/estate_agent|Webbers":{countryCodes:["gb"],tags:{brand:"Webbers","brand:wikidata":"Q81068176",name:"Webbers",office:"estate_agent"}},"office/estate_agent|William H. Brown":{countryCodes:["gb"],tags:{brand:"William H. Brown","brand:wikidata":"Q81787271",name:"William H. Brown",office:"estate_agent"}},"office/estate_agent|Your Move":{countryCodes:["gb"],tags:{brand:"Your Move","brand:wikidata":"Q81078416",name:"Your Move",office:"estate_agent"}},"office/estate_agent|アパマンショップ":{countryCodes:["jp"],tags:{brand:"アパマンショップ","brand:en":"Apaman Shop","brand:ja":"アパマンショップ","brand:wikidata":"Q11284512","brand:wikipedia":"ja:Apaman Network",name:"アパマンショップ","name:en":"Apaman Shop","name:ja":"アパマンショップ",office:"estate_agent"}},"office/estate_agent|エイブル":{countryCodes:["jp"],tags:{brand:"エイブル","brand:en":"Able","brand:ja":"エイブル","brand:wikidata":"Q11289620","brand:wikipedia":"ja:エイブル",name:"エイブル","name:en":"Able","name:ja":"エイブル",office:"estate_agent"}},"office/estate_agent|ピタットハウス":{countryCodes:["jp"],matchNames:["ピタットハウスネットワーク"],tags:{brand:"ピタットハウス","brand:en":"Pitat House","brand:ja":"ピタットハウス","brand:wikidata":"Q11331484","brand:wikipedia":"ja:ピタットハウスネットワーク",name:"ピタットハウス","name:en":"Pitat House","name:ja":"ピタットハウス",office:"estate_agent"}},"office/estate_agent|三菱UFJ不動産販売":{countryCodes:["jp"],tags:{brand:"三菱UFJ不動産販売","brand:en":"Mitsubishi UFJ Real Estate Services","brand:ja":"三菱UFJ不動産販売","brand:wikidata":"Q11357004","brand:wikipedia":"ja:三菱UFJ不動産販売",name:"三菱UFJ不動産販売","name:en":"Mitsubishi UFJ Real Estate Services","name:ja":"三菱UFJ不動産販売",office:"estate_agent"}},"office/estate_agent|信義房屋":{countryCodes:["tw"],tags:{brand:"信義房屋","brand:en":"Sinyi Realty","brand:wikidata":"Q10888034","brand:wikipedia":"zh:信義房屋","brand:zh":"信義房屋",name:"信義房屋","name:en":"Sinyi Realty","name:zh":"信義房屋",office:"estate_agent"}},"office/estate_agent|永慶房屋":{countryCodes:["tw"],tags:{brand:"永慶房屋","brand:en":"Yung Ching","brand:wikidata":"Q11132113","brand:wikipedia":"zh:永慶房屋","brand:zh":"永慶房屋",name:"永慶房屋","name:en":"Yung Ching","name:zh":"永慶房屋",office:"estate_agent"}},"office/financial_advisor|Edward Jones":{countryCodes:["ca","us"],tags:{alt_name:"Edward Jones Investments",brand:"Edward Jones","brand:wikidata":"Q5343830","brand:wikipedia":"en:Edward Jones Investments",name:"Edward Jones",office:"financial_advisor"}},"office/financial_advisor|TD Ameritrade":{countryCodes:["us"],tags:{brand:"TD Ameritrade","brand:wikidata":"Q7669886","brand:wikipedia":"en:TD Ameritrade",name:"TD Ameritrade",office:"financial_advisor"}},"office/insurance|A-MAX Auto Insurance":{countryCodes:["us"],tags:{brand:"A-MAX Auto Insurance","brand:wikidata":"Q75767609",name:"A-MAX Auto Insurance",office:"insurance",short_name:"A-MAX"}},"office/insurance|AAA Insurance":{countryCodes:["us"],matchNames:["american automobile association"],nomatch:["office/travel_agency|American Automobile Association"],tags:{brand:"American Automobile Association","brand:wikidata":"Q463436","brand:wikipedia":"en:American Automobile Association",name:"AAA Insurance",office:"insurance",short_name:"AAA"}},"office/insurance|AOK":{countryCodes:["de"],tags:{brand:"AOK","brand:wikidata":"Q835141","brand:wikipedia":"de:Allgemeine Ortskrankenkasse",name:"AOK",office:"insurance"}},"office/insurance|AXA":{nomatch:["amenity/bank|AXA"],tags:{brand:"AXA","brand:wikidata":"Q160054","brand:wikipedia":"en:AXA",name:"AXA",office:"insurance"}},"office/insurance|Allianz":{tags:{brand:"Allianz","brand:wikidata":"Q487292","brand:wikipedia":"en:Allianz",name:"Allianz",office:"insurance"}},"office/insurance|Allstate":{countryCodes:["us"],matchNames:["allstate insurance"],tags:{brand:"Allstate","brand:wikidata":"Q2645636","brand:wikipedia":"en:Allstate",name:"Allstate",office:"insurance"}},"office/insurance|American Family Insurance":{countryCodes:["us"],matchNames:["american family","amfam"],tags:{brand:"American Family Insurance","brand:wikidata":"Q4743730","brand:wikipedia":"en:American Family Insurance",name:"American Family Insurance",office:"insurance"}},"office/insurance|Asepeyo":{countryCodes:["es"],nomatch:["amenity/clinic|Asepeyo"],tags:{brand:"Asepeyo","brand:wikidata":"Q11906879","brand:wikipedia":"es:Asepeyo",name:"Asepeyo",office:"insurance"}},"office/insurance|Assu 2000":{countryCodes:["fr"],tags:{brand:"Assu 2000",name:"Assu 2000",office:"insurance"}},"office/insurance|Aviva":{countryCodes:["fr","ie","pl"],tags:{brand:"Aviva","brand:wikidata":"Q791179","brand:wikipedia":"en:Aviva",name:"Aviva",office:"insurance"}},"office/insurance|BGV":{countryCodes:["de"],tags:{alt_name:"Badische Versicherungen",brand:"BGV","brand:wikidata":"Q795911","brand:wikipedia":"de:BGV / Badische Versicherungen",name:"BGV",office:"insurance"}},"office/insurance|Banco do Brasil Seguridade":{countryCodes:["br"],tags:{brand:"Banco do Brasil Seguridade","brand:wikidata":"Q18499520","brand:wikipedia":"pt:BB Seguridade",name:"Banco do Brasil Seguridade",office:"insurance",short_name:"BB Seguridade"}},"office/insurance|Bâloise":{countryCodes:["be","ch","de","li","lu"],tags:{brand:"Bâloise","brand:wikidata":"Q457912","brand:wikipedia":"en:Bâloise",name:"Bâloise",office:"insurance"}},"office/insurance|CUK Ubezpieczenia":{countryCodes:["pl"],tags:{brand:"CUK Ubezpieczenia",name:"CUK Ubezpieczenia",office:"insurance"}},"office/insurance|DAK":{countryCodes:["de"],tags:{brand:"DAK","brand:wikidata":"Q1151671","brand:wikipedia":"de:DAK-Gesundheit",name:"DAK",office:"insurance"}},"office/insurance|DEVK":{countryCodes:["de"],tags:{brand:"DEVK","brand:wikidata":"Q1153049","brand:wikipedia":"de:DEVK",name:"DEVK",office:"insurance"}},"office/insurance|Debeka":{countryCodes:["de"],tags:{brand:"Debeka","brand:wikidata":"Q1181452","brand:wikipedia":"de:Debeka",name:"Debeka",office:"insurance"}},"office/insurance|Erie Insurance":{countryCodes:["us"],matchNames:["erie"],tags:{brand:"Erie Insurance","brand:wikidata":"Q5388314","brand:wikipedia":"en:Erie Insurance Group",name:"Erie Insurance",office:"insurance"}},"office/insurance|Farmers Insurance":{countryCodes:["us"],matchNames:["farmers"],tags:{brand:"Farmers Insurance","brand:wikidata":"Q1396863","brand:wikipedia":"en:Farmers Insurance Group",name:"Farmers Insurance",office:"insurance"}},"office/insurance|Foyer":{countryCodes:["lu"],tags:{brand:"Foyer","brand:wikidata":"Q1344573","brand:wikipedia":"lb:Foyer",name:"Foyer",office:"insurance"}},"office/insurance|Fremap":{countryCodes:["es"],tags:{brand:"Fremap","brand:wikidata":"Q5869232","brand:wikipedia":"es:Fremap",name:"Fremap",office:"insurance"}},"office/insurance|GEICO":{countryCodes:["us"],tags:{brand:"GEICO","brand:wikidata":"Q1498689","brand:wikipedia":"en:GEICO",name:"GEICO",office:"insurance"}},"office/insurance|GMF":{countryCodes:["fr"],tags:{brand:"GMF","brand:wikidata":"Q3095296","brand:wikipedia":"fr:Garantie mutuelle des fonctionnaires",name:"GMF",office:"insurance"}},"office/insurance|Generali":{tags:{brand:"Generali","brand:wikidata":"Q670482","brand:wikipedia":"it:Assicurazioni Generali",name:"Generali",office:"insurance"}},"office/insurance|Grange Insurance":{countryCodes:["us"],matchNames:["grange"],tags:{brand:"Grange Insurance","brand:wikidata":"Q17183481","brand:wikipedia":"en:Grange Insurance",name:"Grange Insurance",office:"insurance"}},"office/insurance|Groupama":{matchTags:["amenity/bank|groupama"],tags:{brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"fr:Groupama",name:"Groupama",office:"insurance",official_name:"Groupe des Assurances Mutuelles Agricoles"}},"office/insurance|HUK-Coburg":{countryCodes:["de"],tags:{brand:"HUK-Coburg",name:"HUK-Coburg",office:"insurance"}},"office/insurance|Harmonie Mutuelle":{countryCodes:["fr"],tags:{brand:"Harmonie Mutuelle","brand:wikidata":"Q3127528","brand:wikipedia":"fr:Harmonie mutuelle",name:"Harmonie Mutuelle",office:"insurance"}},"office/insurance|Helvetia":{countryCodes:["at","ch","de","es","fr","it"],tags:{brand:"Helvetia","brand:wikidata":"Q933766","brand:wikipedia":"it:Helvetia Assicurazioni",name:"Helvetia",office:"insurance"}},"office/insurance|Knappschaft":{countryCodes:["de"],tags:{brand:"Knappschaft","brand:wikidata":"Q1313465","brand:wikipedia":"de:Knappschaft (Krankenkasse)",name:"Knappschaft",office:"insurance"}},"office/insurance|LaLux":{countryCodes:["lu"],matchNames:["la luxembourgeoise"],tags:{brand:"LaLux","brand:wikipedia":"lb:La Luxembourgeoise",name:"LaLux",office:"insurance"}},"office/insurance|MAAF":{countryCodes:["fr"],tags:{brand:"MAAF","brand:wikidata":"Q3331028","brand:wikipedia":"fr:Mutuelle d'assurance des artisans de France",name:"MAAF",office:"insurance"}},"office/insurance|MMA":{countryCodes:["fr"],tags:{brand:"MMA","brand:wikidata":"Q3331046","brand:wikipedia":"fr:MMA (assurance)",name:"MMA",office:"insurance",official_name:"Mutuelles du Mans Assurances"}},"office/insurance|Macif":{countryCodes:["fr"],tags:{brand:"Macif","brand:wikidata":"Q3331021","brand:wikipedia":"fr:Mutuelle assurance des commerçants et industriels de France et des cadres et des salariés de l'industrie et du commerce",name:"Macif",office:"insurance"}},"office/insurance|Maif":{countryCodes:["fr"],tags:{brand:"Maif","brand:wikidata":"Q3331029","brand:wikipedia":"fr:Mutuelle d'assurance des instituteurs de France",name:"Maif",office:"insurance",official_name:"Mutuelle d'assurance des instituteurs de France"}},"office/insurance|Mapfre":{tags:{brand:"Mapfre","brand:wikidata":"Q544532","brand:wikipedia":"en:Mapfre",name:"Mapfre",office:"insurance"}},"office/insurance|Matmut":{countryCodes:["fr"],tags:{brand:"Matmut","brand:wikidata":"Q3299185","brand:wikipedia":"fr:Matmut",name:"Matmut",office:"insurance"}},"office/insurance|Nationwide":{countryCodes:["us"],matchNames:["nationwide insurance"],nomatch:["amenity/bank|Nationwide"],tags:{brand:"Nationwide","brand:wikidata":"Q6979886","brand:wikipedia":"en:Nationwide Mutual Insurance Company",name:"Nationwide",office:"insurance"}},"office/insurance|Ocaso":{countryCodes:["es","gb"],matchNames:["ocaso seguros","seguros ocaso"],tags:{brand:"Ocaso","brand:wikidata":"Q6123955","brand:wikipedia":"es:Seguros Ocaso",name:"Ocaso",office:"insurance"}},"office/insurance|PZU":{countryCodes:["pl"],tags:{brand:"PZU","brand:wikidata":"Q1807170","brand:wikipedia":"pl:Powszechny Zakład Ubezpieczeń",name:"PZU",office:"insurance"}},"office/insurance|Progressive":{countryCodes:["us"],matchNames:["progressive insurance"],tags:{brand:"Progressive","brand:wikidata":"Q7248721","brand:wikipedia":"en:Progressive Corporation",name:"Progressive",office:"insurance"}},"office/insurance|Provinzial":{countryCodes:["de"],tags:{brand:"Provinzial",name:"Provinzial",office:"insurance"}},"office/insurance|Reale":{countryCodes:["cl","es","it"],matchNames:["reale chile","reale immobili","reale mutua assicurazioni","reale seguros","seguros reale"],tags:{brand:"Reale","brand:wikidata":"Q3931092","brand:wikipedia":"it:Reale Mutua Assicurazioni",name:"Reale",office:"insurance"}},"office/insurance|SV SparkassenVersicherung":{countryCodes:["de"],tags:{brand:"SV SparkassenVersicherung","brand:wikidata":"Q2208645","brand:wikipedia":"de:SV SparkassenVersicherung",name:"SV SparkassenVersicherung",office:"insurance"}},"office/insurance|State Farm":{countryCodes:["us"],matchNames:["state farm insurance"],tags:{brand:"State Farm","brand:wikidata":"Q2007336","brand:wikipedia":"en:State Farm",name:"State Farm",office:"insurance"}},"office/insurance|Swinton":{countryCodes:["gb"],tags:{brand:"Swinton","brand:wikidata":"Q7658785","brand:wikipedia":"en:Swinton Insurance",name:"Swinton",office:"insurance"}},"office/insurance|Techniker Krankenkasse":{countryCodes:["de"],tags:{brand:"Techniker Krankenkasse","brand:wikidata":"Q607531","brand:wikipedia":"de:Techniker Krankenkasse",name:"Techniker Krankenkasse",office:"insurance"}},"office/insurance|The Co-operators":{countryCodes:["ca"],tags:{brand:"The Co-operators","brand:wikidata":"Q3520320","brand:wikipedia":"en:The Co-operators",name:"The Co-operators",office:"insurance"}},"office/insurance|Tranquilidade":{countryCodes:["pt"],tags:{brand:"Tranquilidade Seguros","brand:wikidata":"Q7833457","brand:wikipedia":"en:Tranquilidade",name:"Tranquilidade",office:"insurance"}},"office/insurance|Württembergische":{countryCodes:["de"],tags:{brand:"Württembergische","brand:wikidata":"Q1412465","brand:wikipedia":"de:Württembergische Versicherung",name:"Württembergische",office:"insurance"}},"office/insurance|Wüstenrot":{countryCodes:["at","cz","de","sk"],tags:{brand:"Wüstenrot",name:"Wüstenrot",office:"insurance"}},"office/insurance|Zurich":{tags:{brand:"Zurich","brand:wikidata":"Q230426","brand:wikipedia":"en:Zurich Insurance Group",name:"Zurich",office:"insurance"}},"office/insurance|Белгосстрах":{countryCodes:["by"],tags:{brand:"Белгосстрах",name:"Белгосстрах",office:"insurance"}},"office/insurance|Ингосстрах":{countryCodes:["ru"],tags:{brand:"Ингосстрах","brand:en":"Ingosstrakh","brand:ru":"Ингосстрах","brand:wikidata":"Q4200631","brand:wikipedia":"ru:Ингосстрах",name:"Ингосстрах","name:en":"Ingosstrakh","name:ru":"Ингосстрах",office:"insurance"}},"office/insurance|РЕСО-Гарантия":{countryCodes:["ru"],tags:{brand:"РЕСО-Гарантия","brand:en":"RESO-Guarantee","brand:ru":"РЕСО-Гарантия","brand:wikidata":"Q4386516","brand:wikipedia":"ru:РЕСО-Гарантия",name:"РЕСО-Гарантия","name:en":"RESO-Guarantee","name:ru":"РЕСО-Гарантия",office:"insurance"}},"office/insurance|Росгосстрах":{countryCodes:["ru"],tags:{brand:"Росгосстрах","brand:wikidata":"Q4397745","brand:wikipedia":"en:Rosgosstrakh",name:"Росгосстрах",office:"insurance"}},"office/insurance|Согласие":{countryCodes:["ru"],tags:{brand:"Согласие","brand:en":"Soglasie","brand:ru":"Согласие","brand:wikidata":"Q4426689","brand:wikipedia":"ru:Согласие (компания)",name:"Согласие","name:en":"Soglasie","name:ru":"Согласие",office:"insurance"}},"office/insurance|بیمه ایران":{countryCodes:["ir"],tags:{brand:"بیمه ایران","brand:en":"Iran Insurance","brand:fa":"بیمه ایران","brand:wikidata":"Q5930269","brand:wikipedia":"fa:بیمه ایران",name:"بیمه ایران","name:en":"Iran Insurance","name:fa":"بیمه ایران",office:"insurance"}},"office/tax_advisor|Block Advisors":{countryCodes:["us"],tags:{brand:"Block Advisors","brand:wikidata":"Q64166231",name:"Block Advisors",office:"tax_advisor"}},"office/tax_advisor|H&R Block":{countryCodes:["au","ca","in","us"],tags:{brand:"H&R Block","brand:wikidata":"Q5627799","brand:wikipedia":"en:H&R Block",name:"H&R Block",office:"tax_advisor"}},"office/tax_advisor|Jackson Hewitt":{countryCodes:["us"],tags:{brand:"Jackson Hewitt","brand:wikidata":"Q6117132","brand:wikipedia":"en:Jackson Hewitt",name:"Jackson Hewitt",office:"tax_advisor",official_name:"Jackson Hewitt Tax Service"}},"office/tax_advisor|Liberty Tax":{countryCodes:["ca","us"],tags:{alt_name:"Liberty Tax Service",brand:"Liberty Tax","brand:wikidata":"Q6541978","brand:wikipedia":"en:Liberty Tax Service",name:"Liberty Tax",office:"tax_advisor"}},"shop/agrarian|Granngården":{countryCodes:["se"],tags:{brand:"Granngården","brand:wikidata":"Q10508136","brand:wikipedia":"sv:Granngården AB",name:"Granngården",shop:"agrarian"}},"shop/agrarian|Southern States":{countryCodes:["us"],tags:{agrarian:"seed;feed;tools",brand:"Southern States","brand:wikidata":"Q7570508","brand:wikipedia":"en:Southern States Cooperative",name:"Southern States",official_name:"Southern States Cooperative",shop:"agrarian"}},"shop/alcohol|Alko":{countryCodes:["fi"],tags:{brand:"Alko","brand:wikidata":"Q1849187","brand:wikipedia":"en:Alko",name:"Alko",shop:"alcohol"}},"shop/alcohol|BC Liquor Store":{countryCodes:["ca"],tags:{brand:"BC Liquor Store","brand:wikidata":"Q43079557","brand:wikipedia":"en:BC Liquor Stores",name:"BC Liquor Store",shop:"alcohol"}},"shop/alcohol|BWS":{countryCodes:["au"],tags:{brand:"BWS","brand:wikidata":"Q4836848","brand:wikipedia":"en:BWS (liquor retailer)",name:"BWS",shop:"alcohol"}},"shop/alcohol|Bargain Booze":{countryCodes:["gb"],tags:{brand:"Bargain Booze","brand:wikidata":"Q16971315","brand:wikipedia":"en:Bargain Booze",name:"Bargain Booze",shop:"alcohol"}},"shop/alcohol|BevMo!":{countryCodes:["us"],tags:{brand:"BevMo!","brand:wikidata":"Q4899308","brand:wikipedia":"en:BevMo!",name:"BevMo!",shop:"alcohol"}},"shop/alcohol|Cellarbrations":{countryCodes:["au"],tags:{brand:"Cellarbrations",name:"Cellarbrations",shop:"alcohol"}},"shop/alcohol|Dan Murphy's":{countryCodes:["au"],tags:{brand:"Dan Murphy's","brand:wikidata":"Q5214075","brand:wikipedia":"en:Dan Murphy's",name:"Dan Murphy's",shop:"alcohol"}},"shop/alcohol|Fine Wine & Good Spirits":{countryCodes:["us"],tags:{brand:"Fine Wine & Good Spirits","brand:wikidata":"Q64514776",name:"Fine Wine & Good Spirits",shop:"alcohol"}},"shop/alcohol|Gall & Gall":{countryCodes:["nl"],tags:{brand:"Gall & Gall","brand:wikidata":"Q13639185","brand:wikipedia":"nl:Gall & Gall",name:"Gall & Gall",shop:"alcohol"}},"shop/alcohol|LCBO":{countryCodes:["ca"],tags:{brand:"LCBO","brand:wikidata":"Q845263","brand:wikipedia":"en:Liquor Control Board of Ontario",name:"LCBO",shop:"alcohol"}},"shop/alcohol|Liquor Depot":{countryCodes:["ca"],tags:{brand:"Liquor Depot",name:"Liquor Depot",shop:"alcohol"}},"shop/alcohol|Liquorland":{countryCodes:["au"],tags:{brand:"Liquorland","brand:wikidata":"Q2283837","brand:wikipedia":"en:Liquorland",name:"Liquorland",shop:"alcohol"}},"shop/alcohol|Majestic":{countryCodes:["gb"],matchNames:["majestic wine","majestic wine warehouse"],tags:{brand:"Majestic","brand:wikidata":"Q6737725","brand:wikipedia":"en:Majestic Wine",name:"Majestic",shop:"alcohol"}},"shop/alcohol|Mitra":{countryCodes:["nl"],tags:{brand:"Mitra",name:"Mitra",shop:"alcohol"}},"shop/alcohol|Nicolas":{countryCodes:["be","fr","gb"],tags:{brand:"Nicolas","brand:wikidata":"Q3340012","brand:wikipedia":"en:Nicolas (wine retailer)",name:"Nicolas",shop:"alcohol"}},"shop/alcohol|Oddbins":{countryCodes:["gb"],tags:{brand:"Oddbins","brand:wikidata":"Q7077472","brand:wikipedia":"en:Oddbins",name:"Oddbins",shop:"alcohol"}},"shop/alcohol|SAQ":{countryCodes:["ca"],nomatch:["shop/alcohol|SAQ Express","shop/alcohol|SAQ Sélection"],tags:{brand:"SAQ","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ",shop:"alcohol"}},"shop/alcohol|SAQ Express":{countryCodes:["ca"],nomatch:["shop/alcohol|SAQ","shop/alcohol|SAQ Sélection"],tags:{brand:"SAQ Express","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ Express",shop:"alcohol"}},"shop/alcohol|SAQ Sélection":{countryCodes:["ca"],nomatch:["shop/alcohol|SAQ","shop/alcohol|SAQ Express"],tags:{brand:"SAQ Sélection","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ Sélection",shop:"alcohol"}},"shop/alcohol|Spec's":{countryCodes:["us"],tags:{brand:"Spec's","brand:wikidata":"Q7574415","brand:wikipedia":"en:Spec's Wine, Spirits & Finer Foods",name:"Spec's",shop:"alcohol"}},"shop/alcohol|Super Liquor":{countryCodes:["nz"],tags:{brand:"Super Liquor",name:"Super Liquor",shop:"alcohol"}},"shop/alcohol|Systembolaget":{countryCodes:["se"],tags:{brand:"Systembolaget","brand:wikidata":"Q1476113","brand:wikipedia":"en:Systembolaget",name:"Systembolaget",shop:"alcohol"}},"shop/alcohol|The Beer Store":{countryCodes:["ca"],tags:{brand:"The Beer Store","brand:wikidata":"Q16243674","brand:wikipedia":"en:The Beer Store",name:"The Beer Store",shop:"alcohol"}},"shop/alcohol|Thirsty Camel":{countryCodes:["au"],tags:{brand:"Thirsty Camel",name:"Thirsty Camel",shop:"alcohol"}},"shop/alcohol|Total Wine":{countryCodes:["us"],tags:{brand:"Total Wine","brand:wikidata":"Q7828084","brand:wikipedia":"en:Total Wine & More",name:"Total Wine",official_name:"Total Wine & More",shop:"alcohol"}},"shop/alcohol|Virginia ABC":{countryCodes:["us"],tags:{brand:"Virginia ABC","brand:wikidata":"Q7934236","brand:wikipedia":"en:Virginia Alcoholic Beverage Control Authority",name:"Virginia ABC",shop:"alcohol"}},"shop/alcohol|Алкомаркет":{countryCodes:["kz"],tags:{brand:"Алкомаркет",name:"Алкомаркет",shop:"alcohol"}},"shop/alcohol|Ароматный мир":{countryCodes:["ru"],tags:{brand:"Ароматный мир",name:"Ароматный мир",shop:"alcohol"}},"shop/alcohol|Бристоль":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{brand:"Бристоль","brand:wikidata":"Q59155583","brand:wikipedia":"ru:Бристоль (сеть магазинов)",name:"Бристоль",shop:"alcohol"}},"shop/alcohol|Винлаб":{countryCodes:["ru"],tags:{brand:"Винлаб",name:"Винлаб",shop:"alcohol"}},"shop/alcohol|Горилка":{countryCodes:["kz","ru"],tags:{brand:"Горилка",name:"Горилка",shop:"alcohol"}},"shop/alcohol|Градус":{countryCodes:["ru"],tags:{brand:"Градус",name:"Градус",shop:"alcohol"}},"shop/alcohol|Градусы":{countryCodes:["ru"],tags:{brand:"Градусы",name:"Градусы",shop:"alcohol"}},"shop/alcohol|Красное & Белое":{countryCodes:["ru"],matchNames:["красное и белое"],tags:{brand:"Красное & Белое","brand:en":"Red&White","brand:wikidata":"Q24933790","brand:wikipedia":"en:Krasnoe & Beloe",name:"Красное & Белое","name:en":"Red&White",shop:"alcohol"}},"shop/alcohol|Кристалл":{countryCodes:["by","ru"],matchTags:["shop/convenience"],tags:{brand:"Кристалл",name:"Кристалл",shop:"alcohol"}},"shop/alcohol|Лион":{countryCodes:["ru"],tags:{brand:"Лион",name:"Лион",shop:"alcohol"}},"shop/alcohol|Норман":{countryCodes:["ru"],tags:{brand:"Норман",name:"Норман",shop:"alcohol"}},"shop/alcohol|Отдохни":{countryCodes:["ru"],tags:{brand:"Отдохни",name:"Отдохни",shop:"alcohol"}},"shop/alcohol|Чарка до свята":{tags:{brand:"Чарка до свята",name:"Чарка до свята",shop:"alcohol"}},"shop/alcohol|カクヤス":{countryCodes:["jp"],tags:{brand:"カクヤス","brand:en":"Kakuyasu","brand:ja":"カクヤス","brand:wikidata":"Q11293990","brand:wikipedia":"ja:カクヤス",name:"カクヤス","name:en":"Kakuyasu","name:ja":"カクヤス",shop:"alcohol"}},"shop/art|YellowKorner":{tags:{brand:"YellowKorner","brand:wikidata":"Q3572115","brand:wikipedia":"fr:YellowKorner",name:"YellowKorner",shop:"art"}},"shop/baby_goods|Aubert":{countryCodes:["fr"],tags:{brand:"Aubert","brand:wikidata":"Q62964657",name:"Aubert",shop:"baby_goods"}},"shop/baby_goods|Babies R Us":{countryCodes:["ca","us"],tags:{brand:"Babies R Us","brand:wikidata":"Q17232036",name:"Babies R Us",shop:"baby_goods"}},"shop/baby_goods|BabyOne":{countryCodes:["de"],tags:{brand:"BabyOne","brand:wikidata":"Q57540408",name:"BabyOne",shop:"baby_goods"}},"shop/baby_goods|Buy Buy Baby":{countryCodes:["ca","us"],tags:{brand:"Buy Buy Baby","brand:wikidata":"Q5003352","brand:wikipedia":"en:Buy Buy Baby",name:"Buy Buy Baby",shop:"baby_goods"}},"shop/baby_goods|Mothercare":{tags:{brand:"Mothercare","brand:wikidata":"Q136738","brand:wikipedia":"en:Mothercare",name:"Mothercare",shop:"baby_goods"}},"shop/baby_goods|Zippy":{countryCodes:["es","pt"],tags:{brand:"Zippy","brand:wikidata":"Q10395161","brand:wikipedia":"en:Zippy Kidstore",name:"Zippy",shop:"baby_goods"}},"shop/baby_goods|Дочки-сыночки":{tags:{brand:"Дочки-сыночки",name:"Дочки-сыночки",shop:"baby_goods"}},"shop/baby_goods|西松屋":{countryCodes:["jp"],matchTags:["shop/clothes"],tags:{brand:"西松屋","brand:en":"Nishimatsuya Chain","brand:ja":"西松屋","brand:wikidata":"Q11628761","brand:wikipedia":"ja:西松屋",name:"西松屋","name:en":"Nishimatsuya Chain","name:ja":"西松屋",shop:"baby_goods"}},"shop/bag|Bentley":{countryCodes:["ca"],nomatch:["shop/car|Bentley"],tags:{brand:"Bentley","brand:wikidata":"Q65947700",name:"Bentley",shop:"bag"}},"shop/bag|Carpisa":{countryCodes:["it"],tags:{brand:"Carpisa","brand:wikidata":"Q28035409","brand:wikipedia":"en:Carpisa",name:"Carpisa",shop:"bag"}},"shop/bag|Coach":{countryCodes:["ca","us"],matchNames:["coach new york","coach ny"],tags:{brand:"Coach","brand:wikidata":"Q727697","brand:wikipedia":"en:Coach New York",name:"Coach",shop:"bag"}},"shop/bag|Kipling":{countryCodes:["be","gb"],tags:{brand:"Kipling","brand:wikidata":"Q6414641","brand:wikipedia":"en:Kipling (brand)",name:"Kipling",shop:"bag"}},"shop/bag|Samsonite":{tags:{brand:"Samsonite","brand:wikidata":"Q1203426","brand:wikipedia":"en:Samsonite",name:"Samsonite",shop:"bag"}},"shop/bag|Tumi":{tags:{brand:"Tumi","brand:wikidata":"Q4465402","brand:wikipedia":"en:Tumi Inc.",name:"Tumi",shop:"bag"}},"shop/bag|Vera Bradley":{countryCodes:["us"],tags:{brand:"Vera Bradley","brand:wikidata":"Q7920749","brand:wikipedia":"en:Vera Bradley",name:"Vera Bradley",shop:"bag"}},"shop/bakery|AILI":{countryCodes:["cn"],tags:{brand:"AILI",name:"AILI",shop:"bakery"}},"shop/bakery|Anker":{countryCodes:["at","sk"],tags:{brand:"Anker","brand:wikidata":"Q557116","brand:wikipedia":"de:Ankerbrot",name:"Anker",shop:"bakery"}},"shop/bakery|Armbruster":{countryCodes:["de"],tags:{brand:"Armbruster","brand:wikidata":"Q67987954",name:"Armbruster",shop:"bakery"}},"shop/bakery|Arome Bakery":{countryCodes:["hk"],tags:{brand:"Arome Bakery","brand:wikidata":"Q1305627","brand:wikipedia":"zh:東海堂",name:"Arome Bakery",shop:"bakery"}},"shop/bakery|Awiteks":{countryCodes:["pl"],tags:{brand:"Awiteks","brand:wikidata":"Q62054190",name:"Awiteks",shop:"bakery"}},"shop/bakery|Back-Factory":{countryCodes:["de"],tags:{brand:"Back-Factory","brand:wikidata":"Q21200483","brand:wikipedia":"de:Back-Factory",name:"Back-Factory",shop:"bakery"}},"shop/bakery|Backstube Wünsche":{countryCodes:["de"],matchNames:["wünsche"],tags:{brand:"Backstube Wünsche","brand:wikidata":"Q66085325",name:"Backstube Wünsche",shop:"bakery"}},"shop/bakery|Backwerk":{countryCodes:["at","ch","de","gb","nl"],tags:{brand:"BackWerk","brand:wikidata":"Q798298","brand:wikipedia":"de:BackWerk",name:"Backwerk",shop:"bakery"}},"shop/bakery|Baguette":{countryCodes:["at"],tags:{brand:"Baguette","brand:wikidata":"Q82512635",name:"Baguette",shop:"bakery"}},"shop/bakery|Bakers Delight":{countryCodes:["au","ca","nz","us"],tags:{brand:"Bakers Delight","brand:wikidata":"Q4849261","brand:wikipedia":"en:Bakers Delight",name:"Bakers Delight",shop:"bakery"}},"shop/bakery|Bakker Bart":{countryCodes:["be","nl"],tags:{brand:"Bakker Bart","brand:wikidata":"Q2177445","brand:wikipedia":"nl:Bakker Bart",name:"Bakker Bart",shop:"bakery"}},"shop/bakery|Balfours":{countryCodes:["au"],tags:{brand:"Balfours","brand:wikidata":"Q4850765",name:"Balfours",shop:"bakery",takeaway:"yes"}},"shop/bakery|Banette":{tags:{brand:"Banette","brand:wikidata":"Q2882405","brand:wikipedia":"fr:Banette (entreprise)",name:"Banette",shop:"bakery"}},"shop/bakery|Beechworth Bakery":{countryCodes:["au"],tags:{brand:"Beechworth Bakery","brand:wikidata":"Q28183324","brand:wikipedia":"en:Beechworth Bakery",name:"Beechworth Bakery",shop:"bakery"}},"shop/bakery|Birds":{countryCodes:["gb"],tags:{brand:"Birds","brand:wikidata":"Q63001935","brand:wikipedia":"en:Birds Bakery",name:"Birds",official_name:"Birds Bakery",shop:"bakery"}},"shop/bakery|BreadTalk":{countryCodes:["sg"],tags:{brand:"BreadTalk","brand:wikidata":"Q1106640","brand:wikipedia":"en:BreadTalk",name:"BreadTalk",shop:"bakery"}},"shop/bakery|Breadtop":{countryCodes:["au"],tags:{brand:"Breadtop","brand:wikidata":"Q4959217","brand:wikipedia":"en:Breadtop",cuisine:"chinese",name:"Breadtop",shop:"bakery"}},"shop/bakery|Brumby's Bakeries":{countryCodes:["au"],tags:{brand:"Brumby's Bakeries","brand:wikidata":"Q4978794","brand:wikipedia":"en:Brumby's Bakeries",name:"Brumby's Bakeries",shop:"bakery"}},"shop/bakery|Bäckerei Fuchs":{countryCodes:["de"],tags:{brand:"Bäckerei Fuchs","brand:wikidata":"Q42825993","brand:wikipedia":"de:Harald Fuchs Bäckerei – Konditorei",name:"Bäckerei Fuchs",shop:"bakery"}},"shop/bakery|Bäckerei Grimminger":{countryCodes:["de"],tags:{brand:"Bäckerei Grimminger",name:"Bäckerei Grimminger",shop:"bakery"}},"shop/bakery|Bäckerei Schmidt":{countryCodes:["de"],tags:{brand:"Bäckerei Schmidt",name:"Bäckerei Schmidt",shop:"bakery"}},"shop/bakery|Bäckerei Schneider":{countryCodes:["de"],tags:{brand:"Bäckerei Schneider",name:"Bäckerei Schneider",shop:"bakery"}},"shop/bakery|Büsch":{countryCodes:["de"],tags:{brand:"Büsch",name:"Büsch",shop:"bakery"}},"shop/bakery|COBS Bread":{countryCodes:["ca","us"],tags:{brand:"COBS Bread","brand:wikidata":"Q4849261","brand:wikipedia":"en:Bakers Delight",name:"COBS Bread",shop:"bakery"}},"shop/bakery|Cadera":{countryCodes:["de"],tags:{brand:"Cadera","brand:wikidata":"Q62086410",name:"Cadera",shop:"bakery"}},"shop/bakery|Castaño":{countryCodes:["cl"],tags:{brand:"Castaño","brand:wikidata":"Q5049629","brand:wikipedia":"en:Castaño (bakery)",name:"Castaño",shop:"bakery"}},"shop/bakery|Cooplands":{countryCodes:["gb"],tags:{brand:"Cooplands","brand:wikidata":"Q5167971","brand:wikipedia":"en:Cooplands",name:"Cooplands",shop:"bakery"}},"shop/bakery|Dat Backhus":{countryCodes:["de"],tags:{brand:"Dat Backhus","brand:wikidata":"Q62093175",name:"Dat Backhus",shop:"bakery"}},"shop/bakery|Der Beck":{countryCodes:["de"],tags:{brand:"Der Beck","brand:wikidata":"Q1192443","brand:wikipedia":"en:Der Beck",name:"Der Beck",shop:"bakery"}},"shop/bakery|Der Mann":{countryCodes:["at"],tags:{brand:"Der Mann",name:"Der Mann",shop:"bakery"}},"shop/bakery|Ditsch":{countryCodes:["de"],tags:{brand:"Ditsch","brand:wikidata":"Q911573","brand:wikipedia":"en:Ditsch",name:"Ditsch",shop:"bakery"}},"shop/bakery|Fischer":{countryCodes:["be","fr","lu"],tags:{brand:"Fischer","brand:wikipedia":"lb:Panelux",name:"Fischer",shop:"bakery"}},"shop/bakery|Fornetti":{tags:{brand:"Fornetti","brand:wikidata":"Q1003020","brand:wikipedia":"en:Fornetti",name:"Fornetti",shop:"bakery"}},"shop/bakery|Goeken backen":{countryCodes:["de"],tags:{brand:"Goeken backen",name:"Goeken backen",shop:"bakery"}},"shop/bakery|Goldilocks":{countryCodes:["ca","ph","th","us"],tags:{brand:"Goldilocks","brand:wikidata":"Q5580198","brand:wikipedia":"en:Goldilocks Bakeshop",name:"Goldilocks",shop:"bakery"}},"shop/bakery|Granier":{countryCodes:["es"],tags:{brand:"Granier",name:"Granier",shop:"bakery"}},"shop/bakery|Great Harvest Bread Company":{countryCodes:["us"],tags:{brand:"Great Harvest Bread Company","brand:wikidata":"Q5599297","brand:wikipedia":"en:Great Harvest Bread Company",name:"Great Harvest Bread Company",shop:"bakery"}},"shop/bakery|Görtz":{nomatch:["shop/shoes|Görtz"],tags:{brand:"Görtz",name:"Görtz",shop:"bakery"}},"shop/bakery|Hert":{countryCodes:["pl"],tags:{brand:"Hert",name:"Hert",shop:"bakery"}},"shop/bakery|Hinnerbäcker":{countryCodes:["de"],tags:{brand:"Hinnerbäcker",name:"Hinnerbäcker",shop:"bakery"}},"shop/bakery|Hofpfisterei":{countryCodes:["de"],tags:{brand:"Hofpfisterei","brand:wikidata":"Q1623217","brand:wikipedia":"en:Hofpfisterei",name:"Hofpfisterei",shop:"bakery"}},"shop/bakery|Hosselmann":{tags:{brand:"Hosselmann",name:"Hosselmann",shop:"bakery"}},"shop/bakery|Ihle":{countryCodes:["de"],matchNames:["landbäckerei ihle"],tags:{brand:"Ihle","brand:wikidata":"Q1626371","brand:wikipedia":"de:Landbäckerei Ihle",name:"Ihle",shop:"bakery"}},"shop/bakery|Il Fornaio":{tags:{brand:"Il Fornaio",name:"Il Fornaio",shop:"bakery"}},"shop/bakery|Julie's Bakeshop":{countryCodes:["ph"],tags:{brand:"Julie's Bakeshop",name:"Julie's Bakeshop",shop:"bakery"}},"shop/bakery|K&U Bäckerei":{countryCodes:["de"],matchNames:["k&u"],tags:{brand:"K&U Bäckerei","brand:wikidata":"Q1719433","brand:wikipedia":"de:K & U Bäckerei",name:"K&U Bäckerei",shop:"bakery"}},"shop/bakery|Kamps":{countryCodes:["de"],tags:{brand:"Kamps","brand:wikidata":"Q1723381","brand:wikipedia":"de:Kamps (Unternehmen)",name:"Kamps",shop:"bakery"}},"shop/bakery|La Mie Câline":{countryCodes:["fr"],tags:{brand:"La Mie Câline","brand:wikidata":"Q3210704","brand:wikipedia":"fr:La Mie câline",name:"La Mie Câline",shop:"bakery"}},"shop/bakery|Le Crobag":{countryCodes:["at","de","pl","ru"],tags:{brand:"Le Crobag","brand:wikidata":"Q1558025","brand:wikipedia":"de:Le Crobag",name:"Le Crobag",shop:"bakery"}},"shop/bakery|Le Fournil":{countryCodes:["fr"],tags:{brand:"Le Fournil",name:"Le Fournil",shop:"bakery"}},"shop/bakery|Leifert":{countryCodes:["de"],matchNames:["bäckerei leifert"],tags:{brand:"Leifert","brand:wikidata":"Q66086129",name:"Leifert",shop:"bakery"}},"shop/bakery|Lila Bäcker":{countryCodes:["de"],tags:{brand:"Lila Bäcker","brand:wikidata":"Q57516591",name:"Lila Bäcker",shop:"bakery"}},"shop/bakery|Lipóti Pékség":{countryCodes:["hu"],tags:{brand:"Lipóti Pékség",name:"Lipóti Pékség",shop:"bakery"}},"shop/bakery|Löwenbäcker Schaper":{countryCodes:["de"],matchNames:["schaper"],tags:{brand:"Löwenbäcker Schaper","brand:wikidata":"Q62075965",name:"Löwenbäcker Schaper",shop:"bakery"}},"shop/bakery|Marie Blachère":{countryCodes:["fr"],tags:{brand:"Marie Blachère","brand:wikidata":"Q62082410","brand:wikipedia":"fr:Marie Blachère",name:"Marie Blachère",shop:"bakery"}},"shop/bakery|Milkau":{countryCodes:["de"],tags:{brand:"Milkau","brand:wikidata":"Q66208652",name:"Milkau",shop:"bakery"}},"shop/bakery|Mlinar":{countryCodes:["ba","hr","sl"],tags:{brand:"Mlinar","brand:wikidata":"Q62082464",name:"Mlinar",shop:"bakery"}},"shop/bakery|Musmanni":{countryCodes:["cr"],tags:{brand:"Musmanni","brand:wikidata":"Q19382082","brand:wikipedia":"no:Musmanni",name:"Musmanni",shop:"bakery"}},"shop/bakery|Nothing Bundt Cakes":{countryCodes:["ca","us"],tags:{brand:"Nothing Bundt Cakes","brand:wikidata":"Q62082526",name:"Nothing Bundt Cakes",shop:"bakery"}},"shop/bakery|Nur Hier":{countryCodes:["de"],tags:{brand:"Nur Hier",name:"Nur Hier",shop:"bakery"}},"shop/bakery|Oebel":{countryCodes:["de"],tags:{brand:"Oebel",name:"Oebel",shop:"bakery"}},"shop/bakery|Pan de Manila":{countryCodes:["ph"],tags:{brand:"Pan de Manila",name:"Pan de Manila",shop:"bakery"}},"shop/bakery|Paris Baguette~(worldwide)":{countryCodes:["sg","us","vn"],matchNames:["paris baguette cafe"],nomatch:["shop/bakery|巴黎贝甜","shop/bakery|파리바게뜨"],tags:{brand:"Paris Baguette","brand:wikidata":"Q62605260",name:"Paris Baguette",shop:"bakery"}},"shop/bakery|Paul":{tags:{brand:"Paul","brand:wikidata":"Q3370417","brand:wikipedia":"en:Paul (bakery)",name:"Paul",shop:"bakery"}},"shop/bakery|Peter's gute Backstube":{countryCodes:["de"],tags:{brand:"Peter's gute Backstube","brand:wikidata":"Q67987587",name:"Peter's gute Backstube",shop:"bakery"}},"shop/bakery|Red Ribbon":{countryCodes:["ph","us"],tags:{brand:"Red Ribbon","brand:wikidata":"Q7304789","brand:wikipedia":"en:Red Ribbon Bakeshop",name:"Red Ribbon",shop:"bakery"}},"shop/bakery|Richters Altstadt-Bäckerei":{countryCodes:["de"],tags:{brand:"Richters Altstadt-Bäckerei","brand:wikidata":"Q66212346",name:"Richters Altstadt-Bäckerei",shop:"bakery"}},"shop/bakery|Ronde des Pains":{countryCodes:["be","fr"],tags:{brand:"Ronde des Pains","brand:wikidata":"Q3441707","brand:wikipedia":"fr:Ronde des Pains",name:"Ronde des Pains",shop:"bakery"}},"shop/bakery|Schäfer's":{countryCodes:["de"],tags:{brand:"Schäfer's","brand:wikidata":"Q1464562","brand:wikipedia":"de:Schäfers Brot",name:"Schäfer's",shop:"bakery"}},"shop/bakery|Sehne":{countryCodes:["de"],tags:{brand:"Sehne","brand:wikidata":"Q1314761","brand:wikipedia":"de:Sehne Backwaren",name:"Sehne",shop:"bakery"}},"shop/bakery|Starke Bäcker":{countryCodes:["de"],tags:{brand:"Starke Bäcker","brand:wikidata":"Q66133336",name:"Starke Bäcker",shop:"bakery"}},"shop/bakery|Steinecke":{countryCodes:["de"],tags:{brand:"Steinecke","brand:wikidata":"Q57516278","brand:wikipedia":"de:Meisterbäckerei Steinecke",name:"Steinecke",shop:"bakery"}},"shop/bakery|Sternenbäck":{countryCodes:["de"],tags:{brand:"Sternenbäck","brand:wikidata":"Q62595021",name:"Sternenbäck",shop:"bakery"}},"shop/bakery|Ströck":{countryCodes:["at"],tags:{brand:"Ströck","brand:wikidata":"Q2357607","brand:wikipedia":"de:Ströck-Brot",name:"Ströck",shop:"bakery"}},"shop/bakery|Wiener Feinbäcker":{countryCodes:["de"],tags:{brand:"Wiener Feinbäcker","brand:wikidata":"Q15854357","brand:wikipedia":"de:Wiener Feinbäckerei Heberer",name:"Wiener Feinbäcker",shop:"bakery"}},"shop/bakery|Woops!":{countryCodes:["us"],tags:{brand:"Woops!",name:"Woops!",shop:"bakery"}},"shop/bakery|sander's backstube":{countryCodes:["de"],matchNames:["bäckerei sander"],tags:{brand:"sander's backstube","brand:wikidata":"Q66207337",name:"sander's backstube",shop:"bakery"}},"shop/bakery|von Allwörden":{countryCodes:["de"],tags:{brand:"von Allwörden","brand:wikidata":"Q60411349","brand:wikipedia":"nds:Heinrich von Allwörden GmbH",name:"von Allwörden",shop:"bakery"}},"shop/bakery|Булочная Ф. Вольчека":{countryCodes:["ru"],tags:{brand:"Булочная Ф. Вольчека",name:"Булочная Ф. Вольчека",shop:"bakery"}},"shop/bakery|Кулинария":{tags:{brand:"Кулинария",name:"Кулинария",shop:"bakery"}},"shop/bakery|Кулиничи":{countryCodes:["ua"],tags:{brand:"Кулиничи",name:"Кулиничи",shop:"bakery"}},"shop/bakery|Кулиничі":{countryCodes:["ua"],tags:{brand:"Кулиничі",name:"Кулиничі",shop:"bakery"}},"shop/bakery|بربری":{tags:{brand:"بربری",name:"بربری",shop:"bakery"}},"shop/bakery|サンジェルマン":{countryCodes:["jp"],tags:{brand:"サンジェルマン","brand:en":"Saint-Germain","brand:ja":"サンジェルマン","brand:wikidata":"Q11305612","brand:wikipedia":"ja:サンジェルマン (製パン)",name:"サンジェルマン","name:en":"Saint-Germain","name:ja":"サンジェルマン",shop:"bakery"}},"shop/bakery|ヴィ・ド・フランス":{countryCodes:["jp"],tags:{brand:"ヴィ・ド・フランス","brand:en":"Vie de France","brand:ja":"ヴィ・ド・フランス","brand:wikidata":"Q7928249","brand:wikipedia":"ja:ヴィ・ド・フランス",name:"ヴィ・ド・フランス","name:en":"Vie de France","name:ja":"ヴィ・ド・フランス",shop:"bakery"}},"shop/bakery|巴黎贝甜~(China)":{countryCodes:["cn"],matchNames:["paris baguette","paris baguette cafe","巴黎貝甜"],nomatch:["shop/bakery|Paris Baguette","shop/bakery|파리바게뜨"],tags:{brand:"巴黎贝甜","brand:en":"Paris Baguette","brand:wikidata":"Q62605260","brand:zh":"巴黎贝甜",name:"巴黎贝甜","name:en":"Paris Baguette","name:zh":"巴黎贝甜",shop:"bakery"}},"shop/bakery|뚜레쥬르":{countryCodes:["kr"],matchNames:["뚜레주르"],tags:{brand:"뚜레쥬르","brand:en":"Tous Les Jours","brand:ko":"뚜레쥬르","brand:wikidata":"Q3535609","brand:wikipedia":"ko:뚜레쥬르",name:"뚜레쥬르","name:en":"Tous Les Jours","name:ko":"뚜레쥬르",shop:"bakery"}},"shop/bakery|파리바게뜨~(South Korea)":{countryCodes:["kr"],matchNames:["paris baguette","paris baguette cafe","파리바게트"],nomatch:["shop/bakery|Paris Baguette","shop/bakery|巴黎贝甜"],tags:{"alt_name:ko":"파리바게트",brand:"파리바게뜨","brand:en":"Paris Baguette","brand:ko":"파리바게뜨","brand:wikidata":"Q62605260",name:"파리바게뜨","name:en":"Paris Baguette","name:ko":"파리바게뜨",shop:"bakery"}},"shop/beauty|Benefit Brow Bar":{countryCodes:["us"],matchNames:["benefit","ulta brow bar"],tags:{beauty:"eyebrow;eyelash;waxing",brand:"Benefit","brand:wikidata":"Q2895769","brand:wikipedia":"en:Benefit Cosmetics",name:"Benefit Brow Bar",shop:"beauty"}},"shop/beauty|Body Minute":{tags:{brand:"Body Minute",name:"Body Minute",shop:"beauty"}},"shop/beauty|European Wax Center":{countryCodes:["us"],tags:{beauty:"waxing",brand:"European Wax Center","brand:wikidata":"Q5413426","brand:wikipedia":"en:European Wax Center",name:"European Wax Center",shop:"beauty"}},"shop/beauty|Hollywood Nails":{countryCodes:["de","gb","us"],tags:{beauty:"nails",brand:"Hollywood Nails",name:"Hollywood Nails",shop:"beauty"}},"shop/beauty|Indigo Sun":{countryCodes:["gb"],matchTags:["leisure/tanning_salon","shop/solarium"],tags:{beauty:"tanning",brand:"Indigo Sun","brand:wikidata":"Q63436906",name:"Indigo Sun",shop:"beauty"}},"shop/beauty|Nails for You":{tags:{beauty:"nails",brand:"Nails for You",name:"Nails for You",shop:"beauty"}},"shop/beauty|Palm Beach Tan":{countryCodes:["us"],matchTags:["leisure/tanning_salon","shop/solarium"],tags:{beauty:"tanning",brand:"Palm Beach Tan","brand:wikidata":"Q64027086","brand:wikipedia":"en:Palm Beach Tan",name:"Palm Beach Tan",shop:"beauty"}},"shop/beauty|Perfect Brows NYC":{countryCodes:["us"],matchNames:["perfect brows"],tags:{beauty:"eyebrow;eyelash;waxing",brand:"Perfect Brows NYC",name:"Perfect Brows NYC",shop:"beauty"}},"shop/beauty|Sola Salons":{countryCodes:["us"],matchNames:["sola","sola salon studios"],tags:{beauty:"hair;nails;skin_care;massage",brand:"Sola Salons","brand:wikidata":"Q64337426",name:"Sola Salons",shop:"beauty"}},"shop/beauty|Star Nails":{tags:{beauty:"nails",brand:"Star Nails",name:"Star Nails",shop:"beauty"}},"shop/beauty|The Skin Bar at Ulta Beauty":{countryCodes:["us"],nomatch:["shop/beauty|Ulta Beauty","shop/cosmetics|Ulta Beauty"],tags:{alt_name:"Ulta Skin Bar",beauty:"skin_care",brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"The Skin Bar at Ulta Beauty",shop:"beauty"}},"shop/beauty|Yves Rocher":{matchNames:["ив роше"],matchTags:["shop/chemist","shop/cosmetics"],tags:{beauty:"cosmetics",brand:"Yves Rocher","brand:wikidata":"Q28496595","brand:wikipedia":"en:Yves Rocher (company)",name:"Yves Rocher",shop:"beauty"}},"shop/bed|Bensons for Beds":{countryCodes:["gb"],matchNames:["bensons"],tags:{brand:"Bensons for Beds","brand:wikidata":"Q4890299","brand:wikipedia":"en:Bensons for Beds",name:"Bensons for Beds",shop:"bed"}},"shop/bed|Beter Bed":{countryCodes:["be","nl"],tags:{brand:"Beter Bed","brand:wikidata":"Q831076","brand:wikipedia":"nl:Beter Bed",name:"Beter Bed",shop:"bed"}},"shop/bed|Casper":{tags:{brand:"Casper","brand:wikidata":"Q20539294","brand:wikipedia":"en:Casper Sleep",name:"Casper",shop:"bed"}},"shop/bed|Dreams":{countryCodes:["gb"],tags:{brand:"Dreams","brand:wikidata":"Q5306688","brand:wikipedia":"en:Dreams (bed retailer)",name:"Dreams",shop:"bed"}},"shop/bed|Grand Litier":{countryCodes:["fr"],tags:{brand:"Grand Litier","brand:wikidata":"Q21030208","brand:wikipedia":"fr:Grand Litier",name:"Grand Litier",shop:"bed"}},"shop/bed|Maison de la Literie":{countryCodes:["fr"],tags:{brand:"Maison de la Literie","brand:wikidata":"Q80955776",name:"Maison de la Literie",shop:"bed"}},"shop/bed|Matratzen Concord":{countryCodes:["at","ch","de"],tags:{brand:"Matratzen Concord","brand:wikidata":"Q18629057","brand:wikipedia":"de:Matratzen Concord",name:"Matratzen Concord",shop:"bed"}},"shop/bed|Mattress Firm":{countryCodes:["us"],matchNames:["sleepys"],tags:{brand:"Mattress Firm","brand:wikidata":"Q6791878","brand:wikipedia":"en:Mattress Firm",name:"Mattress Firm",shop:"bed"}},"shop/bed|Mattress Warehouse":{countryCodes:["us"],tags:{brand:"Mattress Warehouse","brand:wikidata":"Q61995079",name:"Mattress Warehouse",shop:"bed"}},"shop/bed|Sleep Country":{countryCodes:["ca"],matchNames:["sleep country canada"],tags:{brand:"Sleep Country","brand:wikidata":"Q7539684","brand:wikipedia":"en:Sleep Country Canada",name:"Sleep Country",shop:"bed"}},"shop/bed|Sleep Experts":{countryCodes:["us"],tags:{brand:"Sleep Experts","brand:wikidata":"Q7539688","brand:wikipedia":"en:Sleep Experts",name:"Sleep Experts",shop:"bed"}},"shop/bed|Sleep Number":{countryCodes:["us"],tags:{brand:"Sleep Number","brand:wikidata":"Q7447640","brand:wikipedia":"en:Sleep Number",name:"Sleep Number",shop:"bed"}},"shop/beverages|50嵐":{countryCodes:["cn","tw"],tags:{brand:"50嵐",name:"50嵐",shop:"beverages"}},"shop/beverages|CoCo都可":{tags:{brand:"CoCo都可",name:"CoCo都可",shop:"beverages"}},"shop/beverages|Dursty":{countryCodes:["de"],tags:{brand:"Dursty","brand:wikidata":"Q1267518","brand:wikipedia":"de:Dursty Getränkemärkte",name:"Dursty",shop:"beverages"}},"shop/beverages|Edeka Getränkemarkt":{countryCodes:["de"],tags:{brand:"Edeka Getränkemarkt","brand:wikidata":"Q57450576",name:"Edeka Getränkemarkt",shop:"beverages"}},"shop/beverages|Fristo":{countryCodes:["at","de"],matchNames:["fristo getränkemarkt"],tags:{brand:"Fristo","brand:wikidata":"Q1465151","brand:wikipedia":"de:Fristo",name:"Fristo",shop:"beverages"}},"shop/beverages|Getränke Hoffmann":{countryCodes:["de"],tags:{brand:"Getränke Hoffmann","brand:wikidata":"Q19284021","brand:wikipedia":"de:Getränke Hoffmann",name:"Getränke Hoffmann",shop:"beverages"}},"shop/beverages|Getränkeland":{countryCodes:["de"],tags:{brand:"Getränkeland","brand:wikidata":"Q62594849",name:"Getränkeland",shop:"beverages"}},"shop/beverages|Hol'ab":{countryCodes:["de"],tags:{brand:"Hol'ab","brand:wikidata":"Q57557270",name:"Hol'ab",shop:"beverages"}},"shop/beverages|Orterer Getränkemarkt":{countryCodes:["de"],tags:{brand:"Orterer Getränkemarkt","brand:wikidata":"Q23787118","brand:wikipedia":"de:Orterer Gruppe",name:"Orterer Getränkemarkt",shop:"beverages"}},"shop/beverages|Rewe Getränkemarkt":{countryCodes:["de"],tags:{brand:"Rewe Getränkemarkt","brand:wikidata":"Q57519344",name:"Rewe Getränkemarkt",shop:"beverages"}},"shop/beverages|Trinkgut":{countryCodes:["de"],tags:{brand:"Trinkgut","brand:wikidata":"Q2453627","brand:wikipedia":"de:Trinkgut",name:"Trinkgut",shop:"beverages"}},"shop/beverages|大苑子":{tags:{brand:"大苑子","brand:en":"DaYung's","brand:wikipedia":"zh:大苑子","brand:zh":"大苑子",name:"大苑子","name:en":"DaYung's","name:zh":"大苑子",shop:"beverages"}},"shop/beverages|清心福全":{countryCodes:["tw"],tags:{brand:"清心福全","brand:en":"Ching Shin","brand:wikidata":"Q10391229","brand:wikipedia":"zh:清心福全冷飲站","brand:zh":"清心福全",name:"清心福全","name:en":"Ching Shin","name:zh":"清心福全",shop:"beverages"}},"shop/beverages|茶湯會":{countryCodes:["tw"],tags:{brand:"茶湯會",name:"茶湯會",shop:"beverages"}},"shop/bicycle|Cycle Republic":{countryCodes:["gb"],tags:{brand:"Cycle Republic","brand:wikidata":"Q65042920","brand:wikipedia":"en:Cycle Republic",name:"Cycle Republic",shop:"bicycle"}},"shop/bicycle|Evans Cycles":{countryCodes:["gb"],tags:{brand:"Evans Cycles","brand:wikidata":"Q5415901","brand:wikipedia":"en:Evans Cycles",name:"Evans Cycles",shop:"bicycle"}},"shop/bicycle|Fri BikeShop":{countryCodes:["dk"],tags:{brand:"Fri BikeShop","brand:wikidata":"Q26721030",name:"Fri BikeShop",shop:"bicycle"}},"shop/bicycle|Giant":{nomatch:["amenity/fuel|Giant","shop/supermarket|Giant"],tags:{brand:"Giant","brand:wikidata":"Q703557","brand:wikipedia":"en:Giant Bicycles",name:"Giant",shop:"bicycle"}},"shop/bicycle|Trek":{matchNames:["treck","trek bicycle"],tags:{alt_name:"Trek Bicycle Store",brand:"Trek","brand:wikidata":"Q1067617","brand:wikipedia":"en:Trek Bicycle Corporation",name:"Trek",shop:"bicycle"}},"shop/bicycle|サイクルベースあさひ":{countryCodes:["jp"],tags:{brand:"サイクルベースあさひ","brand:en":"Cycle Base Asahi","brand:ja":"サイクルベースあさひ","brand:wikidata":"Q11257202","brand:wikipedia":"ja:あさひ (企業)",name:"サイクルベースあさひ","name:en":"Cycle Base Asahi","name:ja":"サイクルベースあさひ",shop:"bicycle"}},"shop/boat|West Marine":{countryCodes:["us"],tags:{brand:"West Marine","brand:wikidata":"Q7985852","brand:wikipedia":"en:West Marine",name:"West Marine",shop:"boat"}},"shop/bookmaker|Betfred":{countryCodes:["gb"],tags:{brand:"Betfred","brand:wikidata":"Q4897425","brand:wikipedia":"en:Betfred",name:"Betfred",shop:"bookmaker"}},"shop/bookmaker|Coral":{countryCodes:["gb"],tags:{brand:"Coral","brand:wikidata":"Q54621344","brand:wikipedia":"en:Coral (bookmaker)",name:"Coral",shop:"bookmaker"}},"shop/bookmaker|Fortuna":{countryCodes:["cz","hr","pl","ro","sk"],tags:{brand:"Fortuna","brand:wikidata":"Q25857973","brand:wikipedia":"en:Fortuna Entertainment Group",name:"Fortuna",shop:"bookmaker"}},"shop/bookmaker|Ladbrokes":{countryCodes:["gb"],tags:{brand:"Ladbrokes","brand:wikidata":"Q1799875","brand:wikipedia":"en:Ladbrokes Coral",name:"Ladbrokes",shop:"bookmaker"}},"shop/bookmaker|Paddy Power":{countryCodes:["gb","ie"],tags:{brand:"Paddy Power","brand:wikidata":"Q3888718","brand:wikipedia":"en:Paddy Power",name:"Paddy Power",shop:"bookmaker"}},"shop/bookmaker|Tipico":{countryCodes:["at","co","de","gi","hr","mt"],tags:{brand:"Tipico","brand:wikidata":"Q15851003","brand:wikipedia":"en:Tipico",name:"Tipico",shop:"bookmaker"}},"shop/bookmaker|William Hill":{countryCodes:["gb"],tags:{brand:"William Hill","brand:wikidata":"Q4053147","brand:wikipedia":"en:William Hill (bookmaker)",name:"William Hill",shop:"bookmaker"}},"shop/bookmaker|ΟΠΑΠ":{countryCodes:["gr"],tags:{brand:"ΟΠΑΠ","brand:wikidata":"Q2007823","brand:wikipedia":"el:ΟΠΑΠ",name:"ΟΠΑΠ",shop:"bookmaker"}},"shop/bookmaker|Лига ставок":{countryCodes:["ru"],tags:{brand:"Лига ставок","brand:en":"Liga Stavok","brand:ru":"Лига ставок","brand:wikidata":"Q6545804","brand:wikipedia":"ru:Лига Ставок",name:"Лига ставок","name:en":"Liga Stavok","name:ru":"Лига ставок",shop:"bookmaker"}},"shop/bookmaker|Фонбет":{countryCodes:["ru"],tags:{brand:"Фонбет","brand:en":"Fonbet","brand:ru":"Фонбет","brand:wikidata":"Q49137910","brand:wikipedia":"ru:Фонбет",name:"Фонбет","name:en":"Fonbet","name:ru":"Фонбет",shop:"bookmaker"}},"shop/books|Akademibokhandeln":{countryCodes:["se"],tags:{brand:"Akademibokhandeln","brand:wikidata":"Q10403918","brand:wikipedia":"sv:Akademibokhandeln",name:"Akademibokhandeln",shop:"books"}},"shop/books|Akateeminen Kirjakauppa":{countryCodes:["fi"],tags:{brand:"Akateeminen Kirjakauppa","brand:wikidata":"Q10403942","brand:wikipedia":"fi:Akateeminen Kirjakauppa",name:"Akateeminen Kirjakauppa",shop:"books"}},"shop/books|Barnes & Noble":{countryCodes:["us"],tags:{brand:"Barnes & Noble","brand:wikidata":"Q795454","brand:wikipedia":"en:Barnes & Noble",name:"Barnes & Noble",shop:"books"}},"shop/books|Bertrand":{countryCodes:["pt"],tags:{brand:"Bertrand","brand:wikidata":"Q1866547","brand:wikipedia":"en:Livraria Bertrand",name:"Bertrand",shop:"books"}},"shop/books|Books-A-Million":{countryCodes:["us"],tags:{brand:"Books-A-Million","brand:wikidata":"Q4943266","brand:wikipedia":"en:Books-A-Million",name:"Books-A-Million",shop:"books"}},"shop/books|Bruna":{countryCodes:["nl"],tags:{brand:"Bruna","brand:wikidata":"Q3317555","brand:wikipedia":"en:Bruna (company)",name:"Bruna",shop:"books"}},"shop/books|Chapters":{countryCodes:["ca","us"],tags:{brand:"Chapters","brand:wikidata":"Q5073540","brand:wikipedia":"en:Chapters (bookstore)",name:"Chapters",shop:"books"}},"shop/books|Coles":{countryCodes:["ca"],nomatch:["amenity/fuel|Coles Express","shop/convenience|Coles Express","shop/supermarket|Coles"],tags:{brand:"Coles","brand:wikidata":"Q5144641","brand:wikipedia":"en:Coles (bookstore)",name:"Coles",shop:"books"}},"shop/books|Cultura":{countryCodes:["fr"],tags:{brand:"Cultura","brand:wikidata":"Q3007154","brand:wikipedia":"fr:Cultura",name:"Cultura",shop:"books"}},"shop/books|Empik":{countryCodes:["pl"],tags:{brand:"Empik","brand:wikidata":"Q3045978","brand:wikipedia":"pl:Empik",name:"Empik",shop:"books"}},"shop/books|Fnac":{countryCodes:["be","ch","es","fr","nl","pt"],tags:{brand:"Fnac","brand:wikidata":"Q676585","brand:wikipedia":"en:Fnac",name:"Fnac",shop:"books"}},"shop/books|Gramedia":{countryCodes:["id"],tags:{brand:"Gramedia","brand:wikidata":"Q19646130","brand:wikipedia":"id:Gramedia (toko buku)",name:"Gramedia",shop:"books"}},"shop/books|Half Price Books":{countryCodes:["us"],tags:{brand:"Half Price Books","brand:wikidata":"Q5641744","brand:wikipedia":"en:Half Price Books",name:"Half Price Books",shop:"books"}},"shop/books|Hugendubel":{countryCodes:["de"],tags:{brand:"Hugendubel","brand:wikidata":"Q1634142","brand:wikipedia":"en:Hugendubel",name:"Hugendubel",shop:"books"}},"shop/books|Indigo":{countryCodes:["ca","us"],tags:{alt_name:"!ndigo",brand:"Indigo","brand:wikidata":"Q2477358","brand:wikipedia":"en:Indigo Books and Music",name:"Indigo",shop:"books"}},"shop/books|Libro":{countryCodes:["at"],tags:{brand:"Libro","brand:wikidata":"Q1823138","brand:wikipedia":"de:Libro",name:"Libro",shop:"books"}},"shop/books|Mondadori":{countryCodes:["it"],tags:{brand:"Mondadori","brand:wikidata":"Q85355","brand:wikipedia":"en:Arnoldo Mondadori Editore",name:"Mondadori",shop:"books"}},"shop/books|National Book Store":{countryCodes:["ph"],tags:{brand:"National Book Store","brand:wikidata":"Q6971094","brand:wikipedia":"en:National Book Store",name:"National Book Store",shop:"books"}},"shop/books|Osiander":{countryCodes:["de"],tags:{brand:"Osiander","brand:wikidata":"Q1800686","brand:wikipedia":"de:Osiandersche Buchhandlung",name:"Osiander",shop:"books"}},"shop/books|Oxfam Bookshop":{countryCodes:["gb"],tags:{brand:"Oxfam Bookshop","brand:wikidata":"Q7115196","brand:wikipedia":"en:Oxfam bookshops",name:"Oxfam Bookshop",second_hand:"only",shop:"books"}},"shop/books|Saraiva":{countryCodes:["br"],tags:{alt_name:"Livraria Saraiva",brand:"Saraiva","brand:wikidata":"Q10319337","brand:wikipedia":"pt:Livraria Saraiva",name:"Saraiva",shop:"books"}},"shop/books|Seagull Book":{countryCodes:["us"],tags:{brand:"Seagull Book","brand:wikidata":"Q7440458","brand:wikipedia":"en:Seagull Book",name:"Seagull Book",shop:"books"}},"shop/books|Standaard Boekhandel":{countryCodes:["be"],tags:{brand:"Standaard Boekhandel","brand:wikidata":"Q3496554","brand:wikipedia":"nl:Standaard Boekhandel",name:"Standaard Boekhandel",shop:"books"}},"shop/books|Suomalainen Kirjakauppa":{countryCodes:["fi"],tags:{brand:"Suomalainen Kirjakauppa","brand:wikidata":"Q7641808","brand:wikipedia":"fi:Suomalainen Kirjakauppa",name:"Suomalainen Kirjakauppa",shop:"books"}},"shop/books|TSUTAYA":{countryCodes:["jp"],nomatch:["shop/music|TSUTAYA","shop/video|TSUTAYA"],tags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"books"}},"shop/books|Thalia":{countryCodes:["at","ch","de"],tags:{brand:"Thalia","brand:wikidata":"Q2408854","brand:wikipedia":"de:Thalia Bücher",name:"Thalia",shop:"books"}},"shop/books|The Works":{countryCodes:["gb","ie"],tags:{brand:"The Works","brand:wikidata":"Q7775853","brand:wikipedia":"en:The Works (retailer)",name:"The Works",shop:"books"}},"shop/books|WHSmith":{nomatch:["shop/newsagent|WHSmith"],tags:{brand:"WHSmith","brand:wikidata":"Q1548712","brand:wikipedia":"en:WHSmith",name:"WHSmith",shop:"books"}},"shop/books|Waterstones":{countryCodes:["be","gb","ie","je","nl"],tags:{brand:"Waterstones","brand:wikidata":"Q151779","brand:wikipedia":"en:Waterstones",name:"Waterstones",shop:"books"}},"shop/books|Weltbild":{countryCodes:["de"],tags:{brand:"Weltbild","brand:wikidata":"Q883522","brand:wikipedia":"en:Weltbild Publishing Group",name:"Weltbild",shop:"books"}},"shop/books|Буквоед":{countryCodes:["ru"],tags:{brand:"Буквоед","brand:wikidata":"Q4098549","brand:wikipedia":"ru:Буквоед",name:"Буквоед",shop:"books"}},"shop/books|Дом книги":{countryCodes:["ru"],tags:{brand:"Дом книги","brand:wikidata":"Q48950742","brand:wikipedia":"ru:Московский дом книги",name:"Дом книги",shop:"books"}},"shop/books|Читай-город":{countryCodes:["ru"],tags:{brand:"Читай-город","brand:wikidata":"Q4516645","brand:wikipedia":"ru:Читай-город",name:"Читай-город",shop:"books"}},"shop/books|סטימצקי":{countryCodes:["il"],tags:{brand:"סטימצקי","brand:en":"Steimatzky","brand:he":"סטימצקי","brand:wikidata":"Q2903995","brand:wikipedia":"he:סטימצקי",name:"סטימצקי","name:en":"Steimatzky","name:he":"סטימצקי",shop:"books"}},"shop/books|צומת ספרים":{countryCodes:["il"],matchNames:["zomet sfarim"],tags:{brand:"צומת ספרים","brand:en":"Tzomet Sfarim","brand:he":"צומת ספרים","brand:wikidata":"Q6743833","brand:wikipedia":"he:צומת ספרים",name:"צומת ספרים","name:en":"Tzomet Sfarm","name:he":"צומת ספרים",shop:"books"}},"shop/books|あおい書店":{countryCodes:["jp"],tags:{brand:"あおい書店","brand:en":"AOI","brand:ja":"あおい書店","brand:wikidata":"Q11256783","brand:wikipedia":"ja:あおい書店",name:"あおい書店","name:en":"AOI","name:ja":"あおい書店",shop:"books"}},"shop/books|オリオン書房":{countryCodes:["jp"],tags:{brand:"オリオン書房","brand:en":"Orion Books","brand:ja":"オリオン書房","brand:wikidata":"Q11292597","brand:wikipedia":"ja:オリオン書房",name:"オリオン書房","name:en":"Orion Books","name:ja":"オリオン書房",shop:"books"}},"shop/books|ブックオフ":{countryCodes:["jp"],tags:{brand:"ブックオフ","brand:en":"Book Off","brand:ja":"ブックオフ","brand:wikidata":"Q893011","brand:wikipedia":"en:Book Off",name:"ブックオフ","name:en":"Book Off","name:ja":"ブックオフ",shop:"books"}},"shop/books|メロンブックス":{countryCodes:["jp"],tags:{brand:"メロンブックス","brand:en":"Melonbooks","brand:ja":"メロンブックス","brand:wikidata":"Q10851653","brand:wikipedia":"ja:メロンブックス",name:"メロンブックス","name:en":"Melonbooks","name:ja":"メロンブックス",shop:"books"}},"shop/books|リブロ":{countryCodes:["jp"],tags:{brand:"リブロ","brand:en":"LIBRO","brand:ja":"リブロ","brand:wikidata":"Q6542768","brand:wikipedia":"ja:リブロ",name:"リブロ","name:en":"Libro","name:ja":"リブロ",shop:"books"}},"shop/books|三省堂書店":{countryCodes:["jp"],tags:{brand:"三省堂書店","brand:en":"Books Sanseido","brand:ja":"三省堂書店","brand:wikidata":"Q10866539","brand:wikipedia":"ja:三省堂書店",name:"三省堂書店","name:en":"Books Sanseido","name:ja":"三省堂書店",shop:"books"}},"shop/books|宮脇書店":{tags:{brand:"宮脇書店",name:"宮脇書店",shop:"books"}},"shop/books|文教堂":{countryCodes:["jp"],matchNames:["文教堂書店"],tags:{brand:"文教堂","brand:en":"Bunkyodo","brand:ja":"文教堂","brand:wikidata":"Q11499974","brand:wikipedia":"ja:文教堂",name:"文教堂","name:en":"Bunkyodo","name:ja":"文教堂",shop:"books"}},"shop/books|新华书店":{countryCodes:["cn"],tags:{brand:"新华书店","brand:en":"Xinhua Bookstore","brand:wikidata":"Q6124193","brand:wikipedia":"en:Xinhua Bookstore","brand:zh":"新华书店",name:"新华书店","name:en":"Xinhua Bookstore","name:zh":"新华书店",shop:"books"}},"shop/books|有隣堂":{countryCodes:["jp"],tags:{brand:"有隣堂","brand:en":"Yurindo","brand:ja":"有隣堂","brand:wikidata":"Q8061680","brand:wikipedia":"ja:有隣堂",name:"有隣堂","name:en":"Yurindo","name:ja":"有隣堂",shop:"books"}},"shop/books|未来屋書店":{countryCodes:["jp"],tags:{brand:"未来屋書店","brand:en":"Miraiya Shoten","brand:ja":"未来屋書店","brand:wikidata":"Q11519563","brand:wikipedia":"ja:未来屋書店",name:"未来屋書店","name:en":"Miraiya Shoten","name:ja":"未来屋書店",shop:"books"}},"shop/butcher|Coqivoire":{countryCodes:["ci"],tags:{brand:"Coqivoire","brand:wikidata":"Q60183284",butcher:"poultry",name:"Coqivoire",shop:"butcher"}},"shop/butcher|Fleischerei Richter":{countryCodes:["de"],tags:{brand:"Fleischerei Richter",name:"Fleischerei Richter",shop:"butcher"}},"shop/butcher|Foani":{countryCodes:["ci"],tags:{brand:"Foani","brand:wikidata":"Q60183335",butcher:"poultry",name:"Foani",shop:"butcher"}},"shop/butcher|Gzella":{countryCodes:["pl"],tags:{brand:"Gzella",name:"Gzella",shop:"butcher"}},"shop/butcher|M&M Food Market":{countryCodes:["ca"],tags:{brand:"M&M Food Market","brand:wikidata":"Q6711827","brand:wikipedia":"en:M&M Food Market",name:"M&M Food Market",shop:"butcher"}},"shop/butcher|Renmans":{tags:{brand:"Renmans",name:"Renmans",shop:"butcher"}},"shop/butcher|Vinzenzmurr":{countryCodes:["de"],tags:{brand:"Vinzenzmurr","brand:wikidata":"Q2527361","brand:wikipedia":"de:Vinzenzmurr",name:"Vinzenzmurr",shop:"butcher"}},"shop/butcher|Ариант":{countryCodes:["ru"],tags:{brand:"Ариант",name:"Ариант",shop:"butcher"}},"shop/butcher|Великолукский мясокомбинат":{countryCodes:["ru"],tags:{brand:"Великолукский мясокомбинат","brand:wikidata":"Q18401767","brand:wikipedia":"ru:Великолукский мясокомбинат",name:"Великолукский мясокомбинат",shop:"butcher"}},"shop/butcher|Мясницкий ряд":{countryCodes:["ru"],tags:{brand:"Мясницкий ряд",name:"Мясницкий ряд",shop:"butcher"}},"shop/butcher|Наша Ряба":{countryCodes:["ua"],tags:{brand:"Наша Ряба",name:"Наша Ряба",shop:"butcher"}},"shop/butcher|Родинна ковбаска":{countryCodes:["ua"],tags:{brand:"Родинна ковбаска","brand:en":"Rodynna-kovbaska","brand:wikidata":"Q30969660","brand:wikipedia":"uk:ТзОВ «Барком»",name:"Родинна ковбаска","name:en":"Rodynna-kovbaska",shop:"butcher"}},"shop/butcher|肉のハナマサ":{countryCodes:["jp"],matchNames:["ハナマサ"],tags:{brand:"ハナマサ","brand:en":"Hanamasa","brand:ja":"ハナマサ","brand:wikidata":"Q11326564","brand:wikipedia":"ja:ハナマサ",butcher:"beef",name:"肉のハナマサ","name:en":"Hanamasa Meat","name:ja":"肉のハナマサ",shop:"butcher"}},"shop/camera|Jessops":{countryCodes:["gb"],matchTags:["shop/electronics","shop/photo"],tags:{brand:"Jessops","brand:wikidata":"Q3191701","brand:wikipedia":"en:Jessops",name:"Jessops",shop:"camera"}},"shop/candles|Yankee Candle":{countryCodes:["ca","gb","us"],tags:{brand:"Yankee Candle","brand:wikidata":"Q8048733","brand:wikipedia":"en:Yankee Candle",name:"Yankee Candle",shop:"candles"}},"shop/car_parts|Advance Auto Parts":{countryCodes:["ca","us","vi"],matchTags:["shop/doityourself"],tags:{brand:"Advance Auto Parts","brand:wikidata":"Q4686051","brand:wikipedia":"en:Advance Auto Parts",name:"Advance Auto Parts",shop:"car_parts"}},"shop/car_parts|Auto Plus":{countryCodes:["us"],tags:{brand:"Auto Plus","brand:wikidata":"Q65121114",name:"Auto Plus",official_name:"Auto Plus Auto Parts",shop:"car_parts"}},"shop/car_parts|AutoZone":{countryCodes:["br","mx","us"],matchTags:["shop/doityourself"],tags:{brand:"AutoZone","brand:wikidata":"Q4826087","brand:wikipedia":"en:AutoZone",name:"AutoZone",shop:"car_parts"}},"shop/car_parts|Automat":{countryCodes:["nl"],tags:{brand:"Automat","brand:wikidata":"Q70623238",name:"Automat",shop:"car_parts"}},"shop/car_parts|Brezan":{countryCodes:["be","nl"],tags:{brand:"Brezan",name:"Brezan",shop:"car_parts"}},"shop/car_parts|Carquest":{countryCodes:["us"],tags:{brand:"Carquest","brand:wikidata":"Q5045948","brand:wikipedia":"en:Carquest",name:"Carquest",official_name:"Carquest Auto Parts",shop:"car_parts"}},"shop/car_parts|Euro Car Parts":{countryCodes:["gb","ie"],tags:{brand:"Euro Car Parts","brand:wikidata":"Q23782692","brand:wikipedia":"en:Euro Car Parts",name:"Euro Car Parts",shop:"car_parts"}},"shop/car_parts|GSF Car Parts":{countryCodes:["gb","ie"],tags:{brand:"GSF Car Parts","brand:wikidata":"Q80963064",name:"GSF Car Parts",shop:"car_parts"}},"shop/car_parts|Halfords":{countryCodes:["gb","ie"],matchTags:["shop/bicycle"],nomatch:["shop/car_repair|Halfords Autocentre"],tags:{brand:"Halfords","brand:wikidata":"Q3398786","brand:wikipedia":"en:Halfords",name:"Halfords","service:bicycle:retail":"yes",shop:"car_parts"}},"shop/car_parts|KOI Auto Parts":{countryCodes:["us"],tags:{brand:"KOI Auto Parts","brand:wikidata":"Q6334934","brand:wikipedia":"en:KOI Auto Parts",name:"KOI Auto Parts",shop:"car_parts",short_name:"KOI"}},"shop/car_parts|NAPA Auto Parts":{countryCodes:["ca","mx","us"],matchNames:["napa"],tags:{brand:"NAPA Auto Parts","brand:wikidata":"Q6970842","brand:wikipedia":"en:National Automotive Parts Association",name:"NAPA Auto Parts",shop:"car_parts"}},"shop/car_parts|O'Reilly Auto Parts":{countryCodes:["us"],matchNames:["o'reilly"],matchTags:["shop/doityourself"],tags:{brand:"O'Reilly Auto Parts","brand:wikidata":"Q7071951","brand:wikipedia":"en:O'Reilly Auto Parts",name:"O'Reilly Auto Parts",shop:"car_parts"}},"shop/car_parts|Repco":{countryCodes:["au","nz"],tags:{brand:"Repco","brand:wikidata":"Q173425","brand:wikipedia":"en:Repco",name:"Repco",shop:"car_parts"}},"shop/car_parts|Supercheap Auto":{countryCodes:["au","nz"],tags:{brand:"Supercheap Auto","brand:wikidata":"Q7643119","brand:wikipedia":"en:Supercheap Auto",name:"Supercheap Auto",shop:"car_parts"}},"shop/car_parts|The Parts Alliance":{countryCodes:["gb"],tags:{brand:"The Parts Alliance","brand:wikidata":"Q80964997",name:"The Parts Alliance",shop:"car_parts"}},"shop/car_parts|Tokić":{countryCodes:["ba","hr"],tags:{brand:"Tokić",name:"Tokić",shop:"car_parts"}},"shop/car_parts|Армтек":{countryCodes:["by","kz","ru"],tags:{brand:"Армтек",name:"Армтек",shop:"car_parts"}},"shop/car_parts|Форсаж":{tags:{brand:"Форсаж",name:"Форсаж",shop:"car_parts"}},"shop/car_parts|イエローハット":{countryCodes:["jp"],tags:{brand:"イエローハット","brand:en":"Yellow Hat","brand:ja":"イエローハット","brand:wikidata":"Q11285915","brand:wikipedia":"ja:イエローハット",name:"イエローハット","name:en":"Yellow Hat","name:ja":"イエローハット",shop:"car_parts"}},"shop/car_parts|オートバックス":{countryCodes:["jp"],tags:{brand:"オートバックス","brand:en":"Autobacs","brand:ja":"オートバックス","brand:wikidata":"Q7886426","brand:wikipedia":"ja:オートバックスセブン",name:"オートバックス","name:en":"Autobacs","name:ja":"オートバックス",shop:"car_parts"}},"shop/car_parts|ジェームス":{countryCodes:["jp"],tags:{brand:"ジェームス","brand:en":"JMS","brand:ja":"ジェームス","brand:wikidata":"Q11309404","brand:wikipedia":"ja:ジェームス",name:"ジェームス","name:en":"JMS","name:ja":"ジェームス","official_name:en":"Joyful Motorist Shop",shop:"car_parts"}},"shop/car_parts|タイヤ館":{countryCodes:["jp"],tags:{brand:"タイヤ館","brand:en":"Taiyakan","brand:ja":"タイヤ館","brand:wikidata":"Q11315808","brand:wikipedia":"ja:タイヤ館",name:"タイヤ館","name:en":"Taiyakan","name:ja":"タイヤ館",shop:"car_parts"}},"shop/car_repair|A.T.U":{countryCodes:["at","de"],matchNames:["auto-teile-unger"],tags:{brand:"A.T.U","brand:wikidata":"Q784721","brand:wikipedia":"de:Auto-Teile-Unger",name:"A.T.U",shop:"car_repair"}},"shop/car_repair|AAMCO":{countryCodes:["ca","us"],matchNames:["aamco transmissions","aamco transmissions and total car care"],tags:{brand:"AAMCO","brand:wikidata":"Q4649902","brand:wikipedia":"en:AAMCO Transmissions",name:"AAMCO","service:vehicle:transmission":"yes",shop:"car_repair"}},"shop/car_repair|ATS Euromaster":{countryCodes:["gb"],tags:{brand:"ATS Euromaster","brand:wikidata":"Q4654920","brand:wikipedia":"en:ATS Euromaster",name:"ATS Euromaster",shop:"car_repair"}},"shop/car_repair|Autoservis":{tags:{brand:"Autoservis",name:"Autoservis",shop:"car_repair"}},"shop/car_repair|Avatacar":{countryCodes:["fr"],tags:{brand:"Avatacar","brand:wikidata":"Q65156251","brand:wikipedia":"fr:Avatacar",name:"Avatacar",shop:"car_repair"}},"shop/car_repair|BestDrive":{countryCodes:["cz","fr","sk"],tags:{brand:"BestDrive","brand:wikidata":"Q63057183",name:"BestDrive",shop:"car_repair"}},"shop/car_repair|Bosch Car Service":{matchNames:["bosch service"],tags:{brand:"Bosch Car Service","brand:wikidata":"Q234021","brand:wikipedia":"en:Robert Bosch GmbH",name:"Bosch Car Service",shop:"car_repair"}},"shop/car_repair|Brakes Plus":{countryCodes:["us"],tags:{brand:"Brakes Plus","brand:wikidata":"Q62075246",name:"Brakes Plus",shop:"car_repair"}},"shop/car_repair|Car-X":{countryCodes:["us"],tags:{brand:"Car-X","brand:wikidata":"Q63859189",name:"Car-X",shop:"car_repair"}},"shop/car_repair|Carglass":{tags:{brand:"Carglass","brand:wikidata":"Q1035997","brand:wikipedia":"de:Carglass",name:"Carglass",shop:"car_repair"}},"shop/car_repair|Carstar":{countryCodes:["ca","us"],matchNames:["carstar auto body repair experts"],tags:{brand:"Carstar","brand:wikidata":"Q64187891",name:"Carstar","service:vehicle:body_repair":"yes",shop:"car_repair"}},"shop/car_repair|Citroën":{nomatch:["shop/car|Citroën"],tags:{brand:"Citroën","brand:wikidata":"Q6746","brand:wikipedia":"fr:Citroën",name:"Citroën",shop:"car_repair"}},"shop/car_repair|Euromaster":{countryCodes:["ch","de","es","fi","fr","nl","pt"],tags:{brand:"Euromaster","brand:wikidata":"Q3060668","brand:wikipedia":"de:Euromaster",name:"Euromaster",shop:"car_repair"}},"shop/car_repair|F1 Autocentre":{countryCodes:["gb"],tags:{brand:"F1 Autocentre","brand:wikidata":"Q79239635",name:"F1 Autocentre",shop:"car_repair"}},"shop/car_repair|Feu Vert":{countryCodes:["fr"],tags:{brand:"Feu Vert","brand:wikidata":"Q3070922","brand:wikipedia":"fr:Feu vert (entreprise)",name:"Feu Vert",shop:"car_repair"}},"shop/car_repair|Firestone":{countryCodes:["ca","cl","us"],tags:{brand:"Firestone","brand:wikidata":"Q420837","brand:wikipedia":"en:Firestone Tire and Rubber Company",name:"Firestone",official_name:"Firestone Complete Auto Care",shop:"car_repair"}},"shop/car_repair|First Stop":{tags:{brand:"First Stop","brand:wikidata":"Q3072965","brand:wikipedia":"fr:First Stop",name:"First Stop",shop:"car_repair"}},"shop/car_repair|Ford":{nomatch:["shop/car|Ford"],tags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car_repair"}},"shop/car_repair|Goodyear":{countryCodes:["au","ca","cl","pe","us"],tags:{brand:"Goodyear","brand:wikidata":"Q620875","brand:wikipedia":"en:Goodyear Tire and Rubber Company",name:"Goodyear",shop:"car_repair"}},"shop/car_repair|Grease Monkey":{countryCodes:["cn","us"],tags:{brand:"Grease Monkey","brand:wikidata":"Q5598563","brand:wikipedia":"en:Grease Monkey (business)",name:"Grease Monkey",shop:"car_repair"}},"shop/car_repair|Halfords Autocentre":{countryCodes:["gb"],matchNames:["halfords"],nomatch:["shop/car_parts|Halfords"],tags:{brand:"Halfords Autocentre","brand:wikidata":"Q5641894","brand:wikipedia":"en:Halfords Autocentre",name:"Halfords Autocentre",shop:"car_repair"}},"shop/car_repair|Jiffy Lube":{countryCodes:["ca","us"],tags:{brand:"Jiffy Lube","brand:wikidata":"Q6192247","brand:wikipedia":"en:Jiffy Lube",name:"Jiffy Lube",shop:"car_repair"}},"shop/car_repair|Kwik Fit":{countryCodes:["gb","ie"],tags:{brand:"Kwik Fit","brand:wikidata":"Q958053","brand:wikipedia":"en:Kwik Fit",name:"Kwik Fit",shop:"car_repair"}},"shop/car_repair|MAACO":{countryCodes:["ca","us"],matchNames:["maaco collision repair & auto painting"],tags:{brand:"MAACO","brand:wikidata":"Q6714015","brand:wikipedia":"en:MAACO",name:"MAACO","service:vehicle:body_repair":"yes","service:vehicle:painting":"yes",shop:"car_repair"}},"shop/car_repair|Meineke":{countryCodes:["us"],tags:{brand:"Meineke","brand:wikidata":"Q6810159","brand:wikipedia":"en:Meineke Car Care Centers",name:"Meineke",official_name:"Meineke Car Care Center",shop:"car_repair"}},"shop/car_repair|Mekonomen":{countryCodes:["dk","no","se"],tags:{brand:"Mekonomen","brand:wikidata":"Q10580079","brand:wikipedia":"sv:Mekonomen",name:"Mekonomen",shop:"car_repair"}},"shop/car_repair|Midas":{tags:{brand:"Midas","brand:wikidata":"Q3312613","brand:wikipedia":"en:Midas (automotive service)",name:"Midas",shop:"car_repair"}},"shop/car_repair|Monro Muffler Brake":{countryCodes:["us"],matchNames:["monro","monro muffler"],tags:{brand:"Monro Muffler Brake","brand:wikidata":"Q6902090","brand:wikipedia":"en:Monro Muffler Brake",name:"Monro Muffler Brake",shop:"car_repair"}},"shop/car_repair|Mr. Lube":{countryCodes:["ca"],tags:{brand:"Mr. Lube","brand:wikidata":"Q17104067","brand:wikipedia":"en:Mr. Lube",name:"Mr. Lube",shop:"car_repair"}},"shop/car_repair|National Tire and Battery":{countryCodes:["us"],tags:{brand:"National Tire and Battery","brand:wikidata":"Q6978944","brand:wikipedia":"en:National Tire and Battery",name:"National Tire and Battery",shop:"car_repair"}},"shop/car_repair|Norauto":{countryCodes:["ar","es","fr","hu","it","pl","pt","ro"],tags:{brand:"Norauto","brand:wikidata":"Q3317698","brand:wikipedia":"en:Mobivia Groupe",name:"Norauto",shop:"car_repair"}},"shop/car_repair|Pep Boys":{countryCodes:["us"],tags:{brand:"Pep Boys","brand:wikidata":"Q3375007","brand:wikipedia":"en:Pep Boys",name:"Pep Boys",shop:"car_repair"}},"shop/car_repair|Peugeot":{nomatch:["shop/car|Peugeot"],tags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car_repair"}},"shop/car_repair|Point S":{tags:{brand:"Point S","brand:wikidata":"Q3393358","brand:wikipedia":"fr:Point S",name:"Point S",shop:"car_repair"}},"shop/car_repair|Renault":{matchNames:["garage renault"],nomatch:["shop/car|Renault"],tags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"fr:Renault",name:"Renault",shop:"car_repair"}},"shop/car_repair|Roady":{countryCodes:["fr"],tags:{brand:"Roady","brand:wikidata":"Q3434112","brand:wikipedia":"en:Roady (Mousquetaires)",name:"Roady",shop:"car_repair"}},"shop/car_repair|Safelite AutoGlass":{countryCodes:["us"],matchNames:["safelight auto glass"],tags:{brand:"Safelite AutoGlass","brand:wikidata":"Q28797369","brand:wikipedia":"en:Safelite",name:"Safelite AutoGlass","service:vehicle:glass":"yes",shop:"car_repair"}},"shop/car_repair|Sears Auto Center":{countryCodes:["mx","us"],nomatch:["shop/department_store|Sears"],tags:{brand:"Sears Auto Center","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears Auto Center",shop:"car_repair"}},"shop/car_repair|Speedy":{countryCodes:["fr"],nomatch:["shop/car_repair|Speedy Auto Service"],tags:{brand:"Speedy","brand:wikidata":"Q3492969","brand:wikipedia":"fr:Speedy (entreprise)",name:"Speedy",shop:"car_repair"}},"shop/car_repair|Speedy Auto Service":{countryCodes:["ca"],nomatch:["shop/car_repair|Speedy"],tags:{brand:"Speedy Auto Service","brand:wikidata":"Q22318193",name:"Speedy Auto Service",shop:"car_repair"}},"shop/car_repair|Toyota":{nomatch:["shop/car|Toyota"],tags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car_repair"}},"shop/car_repair|Tuffy":{countryCodes:["us"],matchNames:["tuffy auto service","tuffy auto service center","tuffy auto service centers","tuffy service","tuffy service center","tuffy service centers","tuffy tire and auto service","tuffy tire and auto service center","tuffy tire and auto service centers"],tags:{brand:"Tuffy","brand:wikidata":"Q17125314","brand:wikipedia":"en:Tuffy Auto Service Centers",name:"Tuffy",shop:"car_repair"}},"shop/car_repair|Valvoline":{countryCodes:["us"],tags:{brand:"Valvoline","brand:wikidata":"Q7912852","brand:wikipedia":"en:Valvoline Instant Oil Change",name:"Valvoline",official_name:"Valvoline Instant Oil Change",shop:"car_repair"}},"shop/car_repair|Valvoline Express Care":{countryCodes:["us"],tags:{alt_name:"Express Care",brand:"Valvoline Express Care","brand:wikidata":"Q74273584",name:"Valvoline Express Care",shop:"car_repair"}},"shop/car_repair|Vulco":{countryCodes:["fr"],tags:{brand:"Vulco","brand:wikidata":"Q80184403",name:"Vulco",shop:"car_repair"}},"shop/car_repair|pitstop":{countryCodes:["de"],tags:{brand:"pitstop","brand:wikidata":"Q1310014","brand:wikipedia":"de:Pitstop (Werkstattkette)",name:"pitstop",shop:"car_repair"}},"shop/car_repair|ÖAMTC":{countryCodes:["at"],tags:{brand:"ÖAMTC","brand:wikidata":"Q306057","brand:wikipedia":"de:Österreichischer Automobil-, Motorrad- und Touring Club",name:"ÖAMTC",shop:"car_repair"}},"shop/car_repair|Автоэлектрик":{tags:{brand:"Автоэлектрик",name:"Автоэлектрик",shop:"car_repair"}},"shop/car_repair|Вилгуд":{tags:{brand:"Вилгуд",name:"Вилгуд",shop:"car_repair"}},"shop/car_repair|СТО":{tags:{brand:"СТО",name:"СТО",shop:"car_repair"}},"shop/car_repair|カーコンビニ倶楽部":{countryCodes:["jp"],tags:{brand:"カーコンビニ倶楽部","brand:en":"Car Convenience Club","brand:ja":"カーコンビニ倶楽部","brand:wikidata":"Q11295590","brand:wikipedia":"ja:カーコンビニ倶楽部",name:"カーコンビニ倶楽部","name:en":"Car Convenience Club","name:ja":"カーコンビニ倶楽部",shop:"car_repair"}},"shop/car|Alfa Romeo":{tags:{brand:"Alfa Romeo","brand:wikidata":"Q26921","brand:wikipedia":"en:Alfa Romeo",name:"Alfa Romeo",shop:"car"}},"shop/car|Aston Martin":{tags:{brand:"Aston Martin","brand:wikidata":"Q27074","brand:wikipedia":"en:Aston Martin",name:"Aston Martin",shop:"car"}},"shop/car|Audi":{tags:{brand:"Audi","brand:wikidata":"Q23317","brand:wikipedia":"en:Audi",name:"Audi",shop:"car"}},"shop/car|BMW":{tags:{brand:"BMW","brand:wikidata":"Q26678","brand:wikipedia":"en:BMW",name:"BMW",shop:"car"}},"shop/car|Bentley":{nomatch:["shop/bag|Bentley"],tags:{brand:"Bentley","brand:wikidata":"Q27224","brand:wikipedia":"en:Bentley",name:"Bentley",shop:"car"}},"shop/car|Buick":{countryCodes:["ca","cn","mx","us"],tags:{brand:"Buick","brand:wikidata":"Q27415","brand:wikipedia":"en:Buick",name:"Buick",shop:"car"}},"shop/car|Cadillac":{tags:{brand:"Cadillac","brand:wikidata":"Q27436","brand:wikipedia":"en:Cadillac",name:"Cadillac",shop:"car"}},"shop/car|CarMax":{countryCodes:["us"],tags:{brand:"CarMax","brand:wikidata":"Q5037190","brand:wikipedia":"en:CarMax",name:"CarMax",second_hand:"only",shop:"car"}},"shop/car|Chevrolet":{tags:{brand:"Chevrolet","brand:wikidata":"Q29570","brand:wikipedia":"en:Chevrolet",name:"Chevrolet",shop:"car"}},"shop/car|Chrysler":{tags:{brand:"Chrysler","brand:wikidata":"Q181114","brand:wikipedia":"en:Chrysler",name:"Chrysler",shop:"car"}},"shop/car|Citroën":{nomatch:["shop/car_repair|Citroën"],tags:{brand:"Citroën","brand:wikidata":"Q6746","brand:wikipedia":"fr:Citroën",name:"Citroën",shop:"car"}},"shop/car|Dacia":{tags:{brand:"Dacia","brand:wikidata":"Q27460","brand:wikipedia":"en:Automobile Dacia",name:"Dacia",shop:"car"}},"shop/car|Dodge":{tags:{brand:"Dodge","brand:wikidata":"Q27564","brand:wikipedia":"en:Dodge",name:"Dodge",shop:"car"}},"shop/car|Fiat":{tags:{brand:"Fiat","brand:wikidata":"Q27597","brand:wikipedia":"en:Fiat Automobiles",name:"Fiat",shop:"car"}},"shop/car|Ford":{nomatch:["shop/car_repair|Ford"],tags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car"}},"shop/car|Freightliner":{tags:{brand:"Freightliner","brand:wikidata":"Q1420724","brand:wikipedia":"en:Freightliner Trucks",name:"Freightliner",shop:"car"}},"shop/car|GMC":{tags:{brand:"GMC","brand:wikidata":"Q28993","brand:wikipedia":"en:GMC (automobile)",name:"GMC",shop:"car"}},"shop/car|Holden":{countryCodes:["au","nz"],tags:{brand:"Holden","brand:wikidata":"Q29281","brand:wikipedia":"en:Holden",name:"Holden",shop:"car"}},"shop/car|Honda":{matchNames:["honda cars"],nomatch:["shop/motorcycle|Honda"],tags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"car"}},"shop/car|Hyundai":{tags:{brand:"Hyundai","brand:wikidata":"Q55931","brand:wikipedia":"en:Hyundai Motor Company",name:"Hyundai",shop:"car"}},"shop/car|Isuzu":{tags:{brand:"Isuzu","brand:wikidata":"Q29803","brand:wikipedia":"en:Isuzu Motors",name:"Isuzu",shop:"car"}},"shop/car|Jaguar":{tags:{brand:"Jaguar","brand:wikidata":"Q26742231",name:"Jaguar",shop:"car"}},"shop/car|Jeep":{tags:{brand:"Jeep","brand:wikidata":"Q30113","brand:wikipedia":"en:Jeep",name:"Jeep",shop:"car"}},"shop/car|Kia":{matchNames:["kia motors"],tags:{brand:"Kia","brand:wikidata":"Q35349","brand:wikipedia":"en:Kia Motors",name:"Kia",shop:"car"}},"shop/car|Lada":{tags:{brand:"Lada","brand:en":"Lada","brand:ru":"Лада","brand:wikidata":"Q35676","brand:wikipedia":"en:Lada",name:"Lada","name:en":"Lada","name:ru":"Лада",shop:"car"}},"shop/car|Land Rover":{tags:{brand:"Land Rover","brand:wikidata":"Q26777551",name:"Land Rover",shop:"car"}},"shop/car|Lexus":{tags:{brand:"Lexus","brand:wikidata":"Q35919","brand:wikipedia":"en:Lexus",name:"Lexus",shop:"car"}},"shop/car|Lincoln":{tags:{brand:"Lincoln","brand:wikidata":"Q216796","brand:wikipedia":"en:Lincoln Motor Company",name:"Lincoln",shop:"car"}},"shop/car|Mazda":{tags:{brand:"Mazda","brand:wikidata":"Q35996","brand:wikipedia":"en:Mazda",name:"Mazda",shop:"car"}},"shop/car|Mercedes-Benz":{matchNames:["mercedes"],tags:{brand:"Mercedes-Benz","brand:wikidata":"Q36008","brand:wikipedia":"en:Mercedes-Benz",name:"Mercedes-Benz",shop:"car"}},"shop/car|Mitsubishi":{matchNames:["mitsubishi motors"],tags:{brand:"Mitsubishi","brand:wikidata":"Q36033","brand:wikipedia":"en:Mitsubishi Motors",name:"Mitsubishi",shop:"car"}},"shop/car|Netz":{countryCodes:["jp"],tags:{brand:"Netz","brand:wikidata":"Q11325416","brand:wikipedia":"ja:ネッツ店",name:"Netz",shop:"car"}},"shop/car|Nissan":{tags:{brand:"Nissan","brand:wikidata":"Q20165","brand:wikipedia":"ja:日産自動車",name:"Nissan",shop:"car"}},"shop/car|Opel":{tags:{brand:"Opel","brand:wikidata":"Q40966","brand:wikipedia":"en:Opel",name:"Opel",shop:"car"}},"shop/car|Peterbilt":{tags:{brand:"Peterbilt","brand:wikidata":"Q944640","brand:wikipedia":"en:Peterbilt",name:"Peterbilt",shop:"car"}},"shop/car|Peugeot":{nomatch:["shop/car_repair|Peugeot"],tags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car"}},"shop/car|Porsche":{tags:{brand:"Porsche","brand:wikidata":"Q40993","brand:wikipedia":"en:Porsche",name:"Porsche",shop:"car"}},"shop/car|Proton":{countryCodes:["cl","eg","id","my","sg","th"],tags:{brand:"Proton","brand:wikidata":"Q827306","brand:wikipedia":"en:PROTON Holdings",name:"Proton",shop:"car"}},"shop/car|Ram":{tags:{brand:"Ram","brand:wikidata":"Q165708","brand:wikipedia":"en:Ram Trucks",name:"Ram",shop:"car"}},"shop/car|Renault":{nomatch:["shop/car_repair|Renault"],tags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"fr:Renault",name:"Renault",shop:"car"}},"shop/car|Seat":{tags:{brand:"Seat","brand:wikidata":"Q188217","brand:wikipedia":"en:SEAT",name:"Seat",shop:"car"}},"shop/car|Subaru":{tags:{brand:"Subaru","brand:wikidata":"Q172741","brand:wikipedia":"en:Subaru",name:"Subaru",shop:"car"}},"shop/car|Suzuki":{nomatch:["shop/motorcycle|Suzuki"],tags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"car"}},"shop/car|Tesla":{matchNames:["tesla motors"],tags:{brand:"Tesla","brand:wikidata":"Q478214","brand:wikipedia":"en:Tesla, Inc.",name:"Tesla",shop:"car"}},"shop/car|Toyota":{nomatch:["shop/car_repair|Toyota"],tags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car"}},"shop/car|Volkswagen":{matchNames:["vw"],tags:{brand:"Volkswagen","brand:wikidata":"Q246","brand:wikipedia":"en:Volkswagen",name:"Volkswagen",shop:"car"}},"shop/car|Volvo":{tags:{brand:"Volvo","brand:wikidata":"Q215293","brand:wikipedia":"en:Volvo Cars",name:"Volvo",shop:"car"}},"shop/car|Škoda":{tags:{brand:"Škoda","brand:wikidata":"Q29637","brand:wikipedia":"en:Škoda Auto",name:"Škoda",shop:"car"}},"shop/car|Автомир":{countryCodes:["ru"],matchTags:["shop/car_parts"],tags:{brand:"Автомир","brand:en":"Autoworld","brand:ru":"Автомир","brand:wikidata":"Q4056321","brand:wikipedia":"ru:Автомир (автодилер)",name:"Автомир","name:en":"Autoworld","name:ru":"Автомир",shop:"car"}},"shop/car|سایپا":{countryCodes:["ir"],tags:{brand:"سایپا","brand:en":"Saipa","brand:fa":"سایپا","brand:wikidata":"Q116234","brand:wikipedia":"en:Saipa",name:"سایپا","name:en":"Saipa","name:fa":"سایپا",shop:"car"}},"shop/car|ガリバー":{countryCodes:["jp"],tags:{brand:"ガリバー","brand:en":"Gulliver","brand:ja":"ガリバー","brand:wikidata":"Q11296264","brand:wikipedia":"ja:IDOM",name:"ガリバー","name:en":"Gulliver","name:ja":"ガリバー",shop:"car"}},"shop/car|ダイハツ":{countryCodes:["jp"],tags:{brand:"ダイハツ","brand:en":"Daihatsu","brand:ja":"ダイハツ","brand:wikidata":"Q27511","brand:wikipedia":"ja:ダイハツ工業",name:"ダイハツ","name:en":"Daihatsu","name:ja":"ダイハツ",shop:"car"}},"shop/car|トヨタ":{countryCodes:["jp"],matchNames:["トヨタカローラ","トヨタ自動車"],tags:{brand:"トヨタ","brand:en":"Toyota","brand:ja":"トヨタ","brand:wikidata":"Q53268","brand:wikipedia":"ja:トヨタ自動車",name:"トヨタ","name:en":"Toyota","name:ja":"トヨタ",shop:"car"}},"shop/car|ホンダ":{countryCodes:["jp"],tags:{brand:"ホンダ","brand:en":"Honda","brand:ja":"ホンダ","brand:wikidata":"Q9584","brand:wikipedia":"ja:本田技研工業",name:"ホンダ","name:en":"Honda","name:ja":"ホンダ",shop:"car"}},"shop/carpet|Carpetright":{countryCodes:["be","gb","ie","nl"],matchTags:["shop/furniture"],tags:{brand:"Carpetright","brand:wikidata":"Q5045782","brand:wikipedia":"en:Carpetright",name:"Carpetright",shop:"carpet"}},"shop/carpet|Tapi Carpets":{countryCodes:["gb"],tags:{brand:"Tapi Carpets","brand:wikidata":"Q79223951",name:"Tapi Carpets",shop:"carpet"}},"shop/catalogue|Argos":{countryCodes:["gb","ie"],matchTags:["shop/department_store"],tags:{brand:"Argos","brand:wikidata":"Q4789707","brand:wikipedia":"en:Argos (retailer)",name:"Argos",shop:"catalogue"}},"shop/charity|Age UK":{countryCodes:["gb"],tags:{brand:"Age UK","brand:wikidata":"Q4691850","brand:wikipedia":"en:Age UK",name:"Age UK",shop:"charity"}},"shop/charity|Barnardo's":{countryCodes:["gb","ie"],tags:{brand:"Barnardo's","brand:wikidata":"Q2884670","brand:wikipedia":"en:Barnardo's",name:"Barnardo's",shop:"charity"}},"shop/charity|British Heart Foundation":{countryCodes:["gb"],tags:{brand:"British Heart Foundation","brand:wikidata":"Q4970039","brand:wikipedia":"en:British Heart Foundation",name:"British Heart Foundation",shop:"charity"}},"shop/charity|British Red Cross":{countryCodes:["gb","gg","im"],tags:{brand:"British Red Cross","brand:wikidata":"Q4970966","brand:wikipedia":"en:British Red Cross",name:"British Red Cross",shop:"charity"}},"shop/charity|Cancer Research UK":{countryCodes:["gb","gg"],tags:{brand:"Cancer Research UK","brand:wikidata":"Q326079","brand:wikipedia":"en:Cancer Research UK",name:"Cancer Research UK",shop:"charity"}},"shop/charity|Goodwill":{countryCodes:["ca","us"],matchTags:["shop/clothes","shop/second_hand"],tags:{brand:"Goodwill","brand:wikidata":"Q5583655","brand:wikipedia":"en:Goodwill Industries",name:"Goodwill",shop:"charity"}},"shop/charity|Humana":{matchNames:["humana people to people"],matchTags:["shop/clothes","shop/second_hand"],tags:{brand:"Humana","brand:wikidata":"Q1636581","brand:wikipedia":"de:Humana People to People",name:"Humana",shop:"charity"}},"shop/charity|Kirkens Korshær Genbrug":{countryCodes:["dk"],tags:{brand:"Kirkens Korshær Genbrug","brand:wikidata":"Q12321915","brand:wikipedia":"da:Kirkens Korshær",name:"Kirkens Korshær Genbrug",shop:"charity"}},"shop/charity|Marie Curie":{countryCodes:["gb"],tags:{brand:"Marie Curie","brand:wikidata":"Q16997351","brand:wikipedia":"en:Marie Curie (charity)",name:"Marie Curie",shop:"charity"}},"shop/charity|Mind":{countryCodes:["gb"],tags:{brand:"Mind","brand:wikidata":"Q3314763","brand:wikipedia":"en:Mind (charity)",name:"Mind",shop:"charity"}},"shop/charity|Myrorna":{countryCodes:["se"],matchTags:["shop/clothes","shop/second_hand"],tags:{brand:"Myrorna","brand:wikidata":"Q10592609","brand:wikipedia":"sv:Myrorna",name:"Myrorna",shop:"charity"}},"shop/charity|Oxfam":{countryCodes:["be","de","gb","ie","im"],tags:{brand:"Oxfam","brand:wikidata":"Q267941","brand:wikipedia":"en:Oxfam",name:"Oxfam",shop:"charity"}},"shop/charity|PDSA":{countryCodes:["gb"],tags:{brand:"PDSA","brand:wikidata":"Q7165541","brand:wikipedia":"en:People's Dispensary for Sick Animals",name:"PDSA",shop:"charity"}},"shop/charity|RSPCA":{countryCodes:["au","gb"],tags:{brand:"RSPCA","brand:wikidata":"Q584819","brand:wikipedia":"en:Royal Society for the Prevention of Cruelty to Animals",name:"RSPCA",shop:"charity"}},"shop/charity|Saint Vincent de Paul Thrift Store":{countryCodes:["us"],matchNames:["saint vincent de paul","saint vincent de paul society","society of saint vincent de paul","society of st vincent de paul","st vincent de paul","st vincent de paul society","st vincent de paul thrift store","svdp thrift store","the society of saint vincent de paul","the society of st vincent de paul"],matchTags:["shop/clothes","shop/department_store","shop/second_hand"],tags:{brand:"Saint Vincent de Paul Thrift Store","brand:wikidata":"Q66581837",name:"Saint Vincent de Paul Thrift Store",shop:"charity",short_name:"SVdP"}},"shop/charity|Samaritans":{countryCodes:["gb","ie"],tags:{brand:"Samaritans","brand:wikidata":"Q7408851","brand:wikipedia":"en:Samaritans (charity)",name:"Samaritans",shop:"charity"}},"shop/charity|Scope":{countryCodes:["gb"],tags:{brand:"Scope","brand:wikidata":"Q7434435","brand:wikipedia":"en:Scope (charity)",name:"Scope",shop:"charity"}},"shop/charity|Sue Ryder":{countryCodes:["gb","ie"],tags:{brand:"Sue Ryder","brand:wikidata":"Q7634271","brand:wikipedia":"en:Sue Ryder (charity)",name:"Sue Ryder",shop:"charity"}},"shop/charity|The Children's Society":{countryCodes:["gb"],tags:{brand:"The Children's Society","brand:wikidata":"Q7722484","brand:wikipedia":"en:The Children's Society",name:"The Children's Society",shop:"charity"}},"shop/charity|The Salvation Army":{countryCodes:["au","ca","gb","us"],matchNames:["salvation army"],tags:{brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army",shop:"charity"}},"shop/charity|Vinnies":{tags:{brand:"Vinnies",name:"Vinnies",shop:"charity"}},"shop/charity|YMCA":{nomatch:["leisure/sports_centre|YMCA"],tags:{brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",name:"YMCA",shop:"charity"}},"shop/chemist|101 Drogerie":{countryCodes:["sk"],tags:{brand:"101 Drogerie","brand:wikidata":"Q67197464",name:"101 Drogerie",shop:"chemist"}},"shop/chemist|7 Дней":{countryCodes:["ru"],tags:{brand:"7 Дней",name:"7 Дней",shop:"chemist"}},"shop/chemist|Acqua & Sapone":{countryCodes:["it"],tags:{brand:"Acqua & Sapone","brand:wikidata":"Q51079044","brand:wikipedia":"it:Acqua & Sapone (azienda)",name:"Acqua & Sapone",shop:"chemist"}},"shop/chemist|Bipa":{countryCodes:["at","hr"],tags:{brand:"Bipa","brand:wikidata":"Q864933","brand:wikipedia":"de:Bipa",name:"Bipa",shop:"chemist"}},"shop/chemist|Boots":{countryCodes:["gb"],nomatch:["amenity/pharmacy|Boots"],tags:{brand:"Boots","brand:wikidata":"Q6123139",name:"Boots",shop:"chemist"}},"shop/chemist|Budnikowsky":{countryCodes:["de"],tags:{brand:"Budnikowsky","brand:wikidata":"Q1001516","brand:wikipedia":"de:Budnikowsky",name:"Budnikowsky",shop:"chemist"}},"shop/chemist|CVS Pharmacy":{countryCodes:["us"],nomatch:["amenity/pharmacy|CVS Pharmacy","amenity/vending_machine|CVS Pharmacy"],tags:{brand:"CVS Pharmacy","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",name:"CVS Pharmacy",shop:"chemist",short_name:"CVS"}},"shop/chemist|Clarel":{tags:{brand:"Clarel",name:"Clarel",shop:"chemist"}},"shop/chemist|Drogeria Natura":{countryCodes:["pl"],tags:{brand:"Drogeria Natura","brand:wikidata":"Q9212032","brand:wikipedia":"pl:Drogerie Natura",name:"Drogeria Natura",shop:"chemist"}},"shop/chemist|Etos":{countryCodes:["nl"],tags:{brand:"Etos","brand:wikidata":"Q2609459","brand:wikipedia":"en:Etos",name:"Etos",shop:"chemist"}},"shop/chemist|Hebe":{countryCodes:["pl"],tags:{brand:"Hebe",name:"Hebe",shop:"chemist"}},"shop/chemist|Kruidvat":{countryCodes:["be","fr","nl"],tags:{brand:"Kruidvat","brand:wikidata":"Q2226366","brand:wikipedia":"en:Kruidvat",name:"Kruidvat",shop:"chemist"}},"shop/chemist|Longs Drugs~(Hawaii)":{countryCodes:["us"],tags:{brand:"Longs Drugs","brand:wikidata":"Q16931196","brand:wikipedia":"en:Longs Drugs",name:"Longs Drugs",shop:"chemist",short_name:"Longs"}},"shop/chemist|Matas":{countryCodes:["dk"],tags:{brand:"Matas","brand:wikidata":"Q6786143","brand:wikipedia":"en:Matas (drug store)",name:"Matas",shop:"chemist"}},"shop/chemist|Müller":{countryCodes:["at","ch","de","es","hr","hu"],tags:{brand:"Müller","brand:wikidata":"Q1958759","brand:wikipedia":"en:Müller (German trade company)",name:"Müller",shop:"chemist"}},"shop/chemist|Natura":{tags:{brand:"Natura",name:"Natura",shop:"chemist"}},"shop/chemist|Rite Aid":{nomatch:["amenity/pharmacy|Rite Aid"],tags:{brand:"Rite Aid","brand:wikidata":"Q3433273","brand:wikipedia":"en:Rite Aid",name:"Rite Aid",shop:"chemist"}},"shop/chemist|Rossmann":{countryCodes:["cz","de","hu","pl"],tags:{brand:"Rossmann","brand:wikidata":"Q316004","brand:wikipedia":"de:Dirk Rossmann GmbH",name:"Rossmann",shop:"chemist"}},"shop/chemist|Savers":{countryCodes:["gb"],matchNames:["savers drugstores"],matchTags:["shop/variety_store"],nomatch:["shop/second_hand|Savers"],tags:{brand:"Savers","brand:wikidata":"Q7428189","brand:wikipedia":"en:Savers (UK retailer)",name:"Savers",official_name:"Savers Health & Beauty",shop:"chemist"}},"shop/chemist|Superdrug":{countryCodes:["gb"],nomatch:["amenity/pharmacy|Superdrug"],tags:{brand:"Superdrug","brand:wikidata":"Q7643261","brand:wikipedia":"en:Superdrug",name:"Superdrug",shop:"chemist"}},"shop/chemist|Teta":{countryCodes:["cz","sk"],tags:{brand:"Teta","brand:wikidata":"Q20860823","brand:wikipedia":"cs:Teta drogerie",name:"Teta",shop:"chemist"}},"shop/chemist|Tigotà":{countryCodes:["it"],tags:{brand:"Tigotà",name:"Tigotà",shop:"chemist"}},"shop/chemist|Trekpleister":{countryCodes:["nl"],tags:{brand:"Trekpleister","brand:wikidata":"Q2551576","brand:wikipedia":"nl:Trekpleister (drogisterij)",name:"Trekpleister",shop:"chemist"}},"shop/chemist|Walgreens":{countryCodes:["us"],matchNames:["walgreens pharmacy"],tags:{brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",name:"Walgreens",shop:"chemist"}},"shop/chemist|Watsons":{matchTags:["shop/cosmetics"],nomatch:["amenity/pharmacy|Watsons"],tags:{brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",name:"Watsons",shop:"chemist"}},"shop/chemist|dm":{countryCodes:["at","ba","bg","cz","de","hr","hu","it","mk","ro","rs","si","sk"],matchNames:["dm drogerie markt"],tags:{brand:"dm","brand:wikidata":"Q266572","brand:wikipedia":"en:Dm-drogerie markt",name:"dm",shop:"chemist"}},"shop/chemist|Мила":{countryCodes:["by"],tags:{brand:"Мила",name:"Мила",shop:"chemist"}},"shop/chemist|Новэкс":{countryCodes:["ru"],tags:{brand:"Новэкс",name:"Новэкс",shop:"chemist"}},"shop/chemist|Остров чистоты":{countryCodes:["by"],tags:{brand:"Остров чистоты",name:"Остров чистоты",shop:"chemist"}},"shop/chemist|Рубль Бум":{countryCodes:["ru"],tags:{brand:"Рубль Бум",name:"Рубль Бум",shop:"chemist"}},"shop/chemist|Улыбка радуги":{countryCodes:["ru"],tags:{brand:"Улыбка радуги",name:"Улыбка радуги",shop:"chemist"}},"shop/chemist|スギ薬局":{countryCodes:["jp"],nomatch:["amenity/pharmacy|スギ薬局"],tags:{brand:"スギ薬局","brand:ja":"スギ薬局",name:"スギ薬局","name:ja":"スギ薬局",shop:"chemist"}},"shop/chemist|丁丁藥局":{nomatch:["amenity/pharmacy|丁丁藥局"],tags:{brand:"丁丁藥局",name:"丁丁藥局",shop:"chemist"}},"shop/chemist|屈臣氏":{countryCodes:["cn","hk","tw"],nomatch:["amenity/pharmacy|屈臣氏"],tags:{brand:"屈臣氏","brand:wikidata":"Q7974785","brand:wikipedia":"zh:屈臣氏",name:"屈臣氏",shop:"chemist"}},"shop/chemist|康是美":{countryCodes:["tw"],tags:{brand:"康是美","brand:wikidata":"Q11063876","brand:wikipedia":"zh:康是美藥妝店",name:"康是美",shop:"chemist"}},"shop/chocolate|Cacau Show":{countryCodes:["br"],tags:{brand:"Cacau Show","brand:wikidata":"Q9671713","brand:wikipedia":"en:Cacau Show",name:"Cacau Show",shop:"chocolate"}},"shop/chocolate|Chocolates Brasil Cacau":{countryCodes:["br"],tags:{brand:"Chocolates Brasil Cacau","brand:wikidata":"Q9750569","brand:wikipedia":"pt:Chocolates Brasil Cacau",name:"Chocolates Brasil Cacau",shop:"chocolate",short_name:"Brasil Cacau"}},"shop/chocolate|Gertrude Hawk Chocolates":{countryCodes:["us"],tags:{brand:"Gertrude Hawk Chocolates","brand:wikidata":"Q5553326","brand:wikipedia":"en:Gertrude Hawk Chocolates",name:"Gertrude Hawk Chocolates",shop:"chocolate",short_name:"Gertrude Hawk"}},"shop/chocolate|Godiva Chocolatier":{countryCodes:["us"],tags:{brand:"Godiva Chocolatier","brand:wikidata":"Q931084","brand:wikipedia":"en:Godiva Chocolatier",name:"Godiva Chocolatier",shop:"chocolate",short_name:"Godiva"}},"shop/chocolate|Jeff de Bruges":{countryCodes:["ca","cz","fr","gb"],tags:{brand:"Jeff de Bruges","brand:wikidata":"Q3176626","brand:wikipedia":"fr:Jeff de Bruges",name:"Jeff de Bruges",shop:"chocolate"}},"shop/chocolate|Laura Secord":{countryCodes:["ca"],tags:{brand:"Laura Secord","brand:wikidata":"Q6499418","brand:wikipedia":"en:Laura Secord Chocolates",name:"Laura Secord",shop:"chocolate"}},"shop/chocolate|Leonidas":{countryCodes:["be","cz","fr","gb","gr","nl"],tags:{brand:"Leonidas","brand:wikidata":"Q80335","brand:wikipedia":"en:Leonidas (chocolate maker)",name:"Leonidas",shop:"chocolate"}},"shop/chocolate|Lindt":{tags:{brand:"Lindt","brand:wikidata":"Q152822","brand:wikipedia":"en:Lindt & Sprüngli",name:"Lindt",shop:"chocolate"}},"shop/chocolate|Purdys Chocolatier":{countryCodes:["ca"],tags:{brand:"Purdys Chocolatier","brand:wikidata":"Q7261007","brand:wikipedia":"en:Purdy's Chocolates",name:"Purdys Chocolatier",shop:"chocolate"}},"shop/clothes|A Pea in the Pod":{countryCodes:["us"],tags:{brand:"A Pea in the Pod","brand:wikidata":"Q79051737",clothes:"maternity",name:"A Pea in the Pod",shop:"clothes"}},"shop/clothes|AOKI":{countryCodes:["jp"],tags:{brand:"AOKI","brand:wikidata":"Q11189480","brand:wikipedia":"ja:AOKIホールディングス",clothes:"men",name:"AOKI","name:ja":"アオキ",shop:"clothes"}},"shop/clothes|AWG":{countryCodes:["bg","de"],tags:{brand:"AWG",name:"AWG",shop:"clothes"}},"shop/clothes|Abercrombie & Fitch":{countryCodes:["ae","be","ca","cn","de","es","fr","gb","hk","ie","it","jp","kw","mx","nl","qa","sa","sg"],tags:{brand:"Abercrombie & Fitch","brand:wikidata":"Q319344","brand:wikipedia":"en:Abercrombie & Fitch",clothes:"men;women",name:"Abercrombie & Fitch",shop:"clothes"}},"shop/clothes|Abercrombie Kids":{countryCodes:["ae","ca","cn","de","gb","it","nl","sg","sp","us"],tags:{brand:"Abercrombie Kids","brand:wikidata":"Q429856","brand:wikipedia":"en:Abercrombie Kids",clothes:"children",name:"Abercrombie Kids",shop:"clothes"}},"shop/clothes|Accessorize":{countryCodes:["gb","it","ru"],tags:{brand:"Accessorize","brand:wikidata":"Q65007482",name:"Accessorize",shop:"clothes"}},"shop/clothes|Ackermans":{tags:{brand:"Ackermans","brand:wikidata":"Q4674255","brand:wikipedia":"en:Ackermans",name:"Ackermans",shop:"clothes"}},"shop/clothes|Addition Elle":{countryCodes:["ca"],tags:{brand:"Addition Elle","brand:wikidata":"Q4681311","brand:wikipedia":"en:Addition Elle",clothes:"women",name:"Addition Elle",shop:"clothes"}},"shop/clothes|Adler":{countryCodes:["at","de","lu"],tags:{brand:"Adler",name:"Adler",shop:"clothes"}},"shop/clothes|Aerie":{countryCodes:["ca","us"],tags:{brand:"Aerie","brand:wikidata":"Q25351619","brand:wikipedia":"en:Aerie (clothing retailer)",name:"Aerie",shop:"clothes"}},"shop/clothes|Aeropostale":{tags:{brand:"Aeropostale","brand:wikidata":"Q794565","brand:wikipedia":"en:Aéropostale (clothing)",clothes:"men;women",name:"Aeropostale",shop:"clothes"}},"shop/clothes|Alia N TanJay":{countryCodes:["ca"],tags:{brand:"Alia N TanJay","brand:wikidata":"Q65947844",clothes:"women",name:"Alia N TanJay",shop:"clothes"}},"shop/clothes|AllSaints":{countryCodes:["gb"],tags:{brand:"AllSaints","brand:wikidata":"Q4728473","brand:wikipedia":"en:AllSaints",name:"AllSaints",shop:"clothes"}},"shop/clothes|Altar'd State":{countryCodes:["us"],tags:{brand:"Altar'd State","brand:wikidata":"Q71022008",name:"Altar'd State",shop:"clothes"}},"shop/clothes|American Eagle Outfitters":{countryCodes:["ca","us"],tags:{brand:"American Eagle Outfitters","brand:wikidata":"Q2842931","brand:wikipedia":"en:American Eagle Outfitters",clothes:"men;women",name:"American Eagle Outfitters",shop:"clothes",short_name:"American Eagle"}},"shop/clothes|An Phước":{tags:{brand:"An Phước",name:"An Phước",shop:"clothes"}},"shop/clothes|Animal":{countryCodes:["gb"],tags:{brand:"Animal","brand:wikidata":"Q4764749",name:"Animal",shop:"clothes"}},"shop/clothes|Ann Taylor":{countryCodes:["ca","us"],tags:{brand:"Ann Taylor","brand:wikidata":"Q4766699","brand:wikipedia":"en:Ann Inc.",clothes:"women",name:"Ann Taylor",shop:"clothes"}},"shop/clothes|Anthropologie":{countryCodes:["ca","gb","us"],tags:{brand:"Anthropologie","brand:wikidata":"Q4773903","brand:wikipedia":"en:Anthropologie",clothes:"women",name:"Anthropologie",shop:"clothes"}},"shop/clothes|Arc'teryx":{tags:{brand:"Arc'teryx","brand:wikidata":"Q3271455","brand:wikipedia":"en:Arc'teryx",clothes:"men;women",name:"Arc'teryx",shop:"clothes"}},"shop/clothes|Ardene":{countryCodes:["ca","sn"],tags:{brand:"Ardene","brand:wikidata":"Q2860764","brand:wikipedia":"en:Ardene",name:"Ardene",shop:"clothes"}},"shop/clothes|Aritzia":{countryCodes:["ca","us"],tags:{brand:"Aritzia","brand:wikidata":"Q4791147","brand:wikipedia":"en:Aritzia",clothes:"women",name:"Aritzia",shop:"clothes"}},"shop/clothes|Armand Thiery":{countryCodes:["be","fr"],tags:{brand:"Armand Thiery","brand:wikidata":"Q2861975","brand:wikipedia":"fr:Armand Thiery",name:"Armand Thiery",shop:"clothes"}},"shop/clothes|Armani Exchange":{countryCodes:["us"],tags:{brand:"Armani Exchange","brand:wikidata":"Q56045740",clothes:"men;women",name:"Armani Exchange",shop:"clothes"}},"shop/clothes|Avenue":{tags:{brand:"Avenue","brand:wikidata":"Q4828182","brand:wikipedia":"en:Avenue (store)",clothes:"women;oversize",name:"Avenue",shop:"clothes"}},"shop/clothes|Baby Gap":{countryCodes:["us"],tags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Baby Gap",shop:"clothes"}},"shop/clothes|Banana Republic":{countryCodes:["ca","gb","us"],tags:{brand:"Banana Republic","brand:wikidata":"Q806085","brand:wikipedia":"en:Banana Republic",clothes:"men;women",name:"Banana Republic",shop:"clothes"}},"shop/clothes|Bench.":{tags:{brand:"Bench.","brand:wikidata":"Q816714","brand:wikipedia":"en:Bench (British clothing brand)",name:"Bench.",shop:"clothes"}},"shop/clothes|Bershka":{tags:{brand:"Bershka","brand:wikidata":"Q827258","brand:wikipedia":"en:Bershka",name:"Bershka",shop:"clothes"}},"shop/clothes|Betty Barclay":{tags:{brand:"Betty Barclay","brand:wikidata":"Q850250","brand:wikipedia":"de:Betty Barclay",name:"Betty Barclay",shop:"clothes"}},"shop/clothes|Big Star":{countryCodes:["by","pl"],tags:{brand:"Big Star","brand:wikidata":"Q9171569","brand:wikipedia":"pl:Big Star Limited",name:"Big Star",shop:"clothes"}},"shop/clothes|Billabong":{tags:{brand:"Billabong","brand:wikidata":"Q862718","brand:wikipedia":"en:Billabong (clothing)",clothes:"men;women",name:"Billabong",shop:"clothes"}},"shop/clothes|Bluenotes":{countryCodes:["ca"],tags:{brand:"Bluenotes","brand:wikidata":"Q4930395","brand:wikipedia":"en:Bluenotes",name:"Bluenotes",shop:"clothes"}},"shop/clothes|BonWorth":{countryCodes:["us"],tags:{brand:"BonWorth","brand:wikidata":"Q4941034","brand:wikipedia":"en:BonWorth",clothes:"women",name:"BonWorth",shop:"clothes"}},"shop/clothes|Bonita":{countryCodes:["at","ch","de","nl"],tags:{brand:"Bonita","brand:wikidata":"Q892598","brand:wikipedia":"de:Bonita (Unternehmen)",name:"Bonita",shop:"clothes"}},"shop/clothes|Bonmarché":{countryCodes:["gb"],tags:{brand:"Bonmarché","brand:wikidata":"Q4942146","brand:wikipedia":"en:Bonmarché",name:"Bonmarché",shop:"clothes"}},"shop/clothes|Bonobo":{countryCodes:["fr"],nomatch:["shop/clothes|Bonobos"],tags:{brand:"Bonobo","brand:wikidata":"Q63682093",clothes:"men;women",name:"Bonobo",shop:"clothes"}},"shop/clothes|Bonobos":{countryCodes:["us"],nomatch:["shop/clothes|Bonobo"],tags:{brand:"Bonobos","brand:wikidata":"Q4942546","brand:wikipedia":"en:Bonobos (apparel)",clothes:"men",name:"Bonobos",shop:"clothes"}},"shop/clothes|Bootlegger":{tags:{brand:"Bootlegger","brand:wikidata":"Q65947984",clothes:"women",name:"Bootlegger",shop:"clothes"}},"shop/clothes|Boux Avenue":{tags:{brand:"Boux Avenue","brand:wikidata":"Q4950489","brand:wikipedia":"en:Boux Avenue",clothes:"underwear",name:"Boux Avenue",shop:"clothes"}},"shop/clothes|Brice":{countryCodes:["be","fr"],tags:{brand:"Brice","brand:wikidata":"Q2925067","brand:wikipedia":"fr:Brice (enseigne)",name:"Brice",shop:"clothes"}},"shop/clothes|Bristol":{countryCodes:["nl"],tags:{brand:"Bristol",name:"Bristol",shop:"clothes"}},"shop/clothes|Brooks Brothers":{tags:{brand:"Brooks Brothers","brand:wikidata":"Q929722","brand:wikipedia":"en:Brooks Brothers",name:"Brooks Brothers",shop:"clothes"}},"shop/clothes|Brunello Cucinelli":{tags:{brand:"Brunello Cucinelli","brand:wikidata":"Q3645582","brand:wikipedia":"en:Brunello Cucinelli (company)",name:"Brunello Cucinelli",shop:"clothes"}},"shop/clothes|Buckle":{countryCodes:["us"],matchNames:["the buckle"],tags:{brand:"Buckle","brand:wikidata":"Q4983306","brand:wikipedia":"en:Buckle (clothing retailer)",clothes:"men;women;children",name:"Buckle",shop:"clothes"}},"shop/clothes|Buffalo Exchange":{countryCodes:["us"],matchTags:["shop/second_hand"],tags:{brand:"Buffalo Exchange","brand:wikidata":"Q4985721","brand:wikipedia":"en:Buffalo Exchange",name:"Buffalo Exchange",second_hand:"only",shop:"clothes"}},"shop/clothes|Burberry":{tags:{brand:"Burberry","brand:wikidata":"Q390107","brand:wikipedia":"en:Burberry",clothes:"men;women",name:"Burberry",shop:"clothes"}},"shop/clothes|Burlington Coat Factory":{countryCodes:["us"],tags:{brand:"Burlington Coat Factory","brand:wikidata":"Q4999220","brand:wikipedia":"en:Burlington (department store)",name:"Burlington Coat Factory",shop:"clothes"}},"shop/clothes|Burton":{countryCodes:["fr","gb"],tags:{brand:"Burton","brand:wikidata":"Q5000795","brand:wikipedia":"en:Burton (retailer)",name:"Burton",shop:"clothes"}},"shop/clothes|C&A":{tags:{brand:"C&A","brand:wikidata":"Q701338","brand:wikipedia":"en:C&A",name:"C&A",shop:"clothes"}},"shop/clothes|COS":{tags:{brand:"COS","brand:wikidata":"Q60772401","brand:wikipedia":"en:COS (clothing)",name:"COS",shop:"clothes"}},"shop/clothes|Cache Cache":{countryCodes:["fr","it","lu"],tags:{brand:"Cache Cache","brand:wikidata":"Q63064086",name:"Cache Cache",shop:"clothes"}},"shop/clothes|Calvin Klein":{tags:{brand:"Calvin Klein","brand:wikidata":"Q1068628","brand:wikipedia":"en:Calvin Klein (company)",name:"Calvin Klein",shop:"clothes"}},"shop/clothes|Calzedonia":{tags:{brand:"Calzedonia","brand:wikidata":"Q1027874","brand:wikipedia":"en:Calzedonia",name:"Calzedonia",shop:"clothes"}},"shop/clothes|Camaïeu":{countryCodes:["be","cz","fr","it","pl"],tags:{brand:"Camaïeu","brand:wikidata":"Q2934647","brand:wikipedia":"en:Camaïeu (company)",name:"Camaïeu",shop:"clothes"}},"shop/clothes|Camp David":{countryCodes:["at","de","ee","sk"],tags:{brand:"Camp David","brand:wikidata":"Q50540636","brand:wikipedia":"en:Camp David (fashion)",name:"Camp David",shop:"clothes"}},"shop/clothes|Canada Goose":{tags:{brand:"Canada Goose","brand:wikidata":"Q2988422","brand:wikipedia":"en:Canada Goose (clothing)",name:"Canada Goose",shop:"clothes"}},"shop/clothes|Carhartt":{countryCodes:["gb","us"],tags:{brand:"Carhartt","brand:wikidata":"Q527877","brand:wikipedia":"en:Carhartt",clothes:"workwear",name:"Carhartt",shop:"clothes"}},"shop/clothes|Carlings":{countryCodes:["at","fi","no","se"],tags:{brand:"Carlings","brand:wikidata":"Q10443115","brand:wikipedia":"no:Carlings",name:"Carlings",shop:"clothes"}},"shop/clothes|Caroll":{countryCodes:["ch","fr"],tags:{brand:"Caroll","brand:wikidata":"Q63063871",name:"Caroll",shop:"clothes"}},"shop/clothes|Carter's":{matchNames:["carters babies and kids"],tags:{brand:"Carter's","brand:wikidata":"Q5047083","brand:wikipedia":"en:Carter's",clothes:"children",name:"Carter's",shop:"clothes"}},"shop/clothes|Carter's OshKosh":{tags:{brand:"Carter's OshKosh",name:"Carter's OshKosh",shop:"clothes"}},"shop/clothes|Catherines":{countryCodes:["us"],tags:{brand:"Catherines","brand:wikidata":"Q64026208",clothes:"oversize;women",name:"Catherines",shop:"clothes"}},"shop/clothes|Cato":{countryCodes:["us"],tags:{brand:"Cato","brand:wikidata":"Q16956136","brand:wikipedia":"en:Cato Corporation",clothes:"women",name:"Cato",official_name:"Cato Fashions",shop:"clothes"}},"shop/clothes|Cecil":{countryCodes:["at","de","nl"],tags:{brand:"Cecil",name:"Cecil",shop:"clothes"}},"shop/clothes|Celio":{tags:{brand:"Celio","brand:wikidata":"Q2672003","brand:wikipedia":"en:Celio (retailer)",name:"Celio",shop:"clothes"}},"shop/clothes|Chanel":{tags:{brand:"Chanel","brand:wikidata":"Q218115","brand:wikipedia":"en:Chanel",name:"Chanel",shop:"clothes"}},"shop/clothes|Charles Vögele":{countryCodes:["at","be","ch","de","hu","nl"],tags:{brand:"Charles Vögele","brand:wikidata":"Q1066326","brand:wikipedia":"de:Charles Vögele Holding",name:"Charles Vögele",shop:"clothes",short_name:"Vögele"}},"shop/clothes|Charlotte Russe":{countryCodes:["us"],tags:{brand:"Charlotte Russe","brand:wikidata":"Q5086126","brand:wikipedia":"en:Charlotte Russe (clothing retailer)",name:"Charlotte Russe",shop:"clothes"}},"shop/clothes|Charming Charlie":{countryCodes:["us"],tags:{brand:"Charming Charlie","brand:wikidata":"Q16829286","brand:wikipedia":"en:Charming Charlie",clothes:"women",name:"Charming Charlie",shop:"clothes"}},"shop/clothes|Chico's":{countryCodes:["ar","us"],tags:{brand:"Chico's","brand:wikidata":"Q5096393","brand:wikipedia":"en:Chico's (clothing retailer)",name:"Chico's",shop:"clothes"}},"shop/clothes|Christopher & Banks":{countryCodes:["us"],tags:{brand:"Christopher & Banks","brand:wikidata":"Q5111816","brand:wikipedia":"en:Christopher & Banks",name:"Christopher & Banks",shop:"clothes"}},"shop/clothes|Citi Trends":{countryCodes:["us"],tags:{brand:"Citi Trends","brand:wikidata":"Q5122438","brand:wikipedia":"en:Citi Trends",name:"Citi Trends",shop:"clothes"}},"shop/clothes|City Gear":{countryCodes:["us"],tags:{brand:"City Gear","brand:wikidata":"Q16958629","brand:wikipedia":"en:City Gear",name:"City Gear",shop:"clothes"}},"shop/clothes|Cleo":{tags:{brand:"Cleo","brand:wikidata":"Q65947963",clothes:"women",name:"Cleo",shop:"clothes"}},"shop/clothes|Club Monaco":{countryCodes:["ca","gb","us"],tags:{brand:"Club Monaco","brand:wikidata":"Q2979949","brand:wikipedia":"en:Club Monaco",name:"Club Monaco",shop:"clothes"}},"shop/clothes|Colin's":{tags:{brand:"Colin's","brand:wikidata":"Q28729658",name:"Colin's",shop:"clothes"}},"shop/clothes|Colloseum":{countryCodes:["at","cz","de","gr","lv","pl","ru","sk"],tags:{brand:"Colloseum","brand:wikidata":"Q15794685","brand:wikipedia":"de:Colloseum",name:"Colloseum",shop:"clothes"}},"shop/clothes|Columbia":{nomatch:["amenity/bank|Columbia Bank"],tags:{brand:"Columbia","brand:wikidata":"Q1112588","brand:wikipedia":"en:Columbia Sportswear",name:"Columbia",official_name:"Columbia Sportswear",shop:"clothes"}},"shop/clothes|Cotton On":{tags:{brand:"Cotton On","brand:wikidata":"Q5175717","brand:wikipedia":"en:Cotton On Group",name:"Cotton On",shop:"clothes"}},"shop/clothes|Cropp":{countryCodes:["cs","hu","pl","ro","ru","sk","ua"],tags:{brand:"Cropp","brand:wikidata":"Q9196793","brand:wikipedia":"pl:Cropp",name:"Cropp",shop:"clothes"}},"shop/clothes|Cubus":{countryCodes:["de","fi","lv","no","pl","se"],tags:{brand:"Cubus","brand:wikidata":"Q3439593","brand:wikipedia":"no:Cubus",name:"Cubus",shop:"clothes"}},"shop/clothes|DTLR":{countryCodes:["us"],tags:{brand:"DTLR",name:"DTLR",shop:"clothes"}},"shop/clothes|DXL Men's Apparel":{countryCodes:["us"],matchNames:["casual male xl"],tags:{brand:"DXL Men's Apparel","brand:wikidata":"Q61981830",clothes:"oversize;men",name:"DXL Men's Apparel",shop:"clothes",short_name:"DXL"}},"shop/clothes|Damart":{countryCodes:["be","fr","lu"],tags:{brand:"Damart","brand:wikidata":"Q3012602","brand:wikipedia":"en:Damart",name:"Damart",shop:"clothes"}},"shop/clothes|David's Bridal":{countryCodes:["ca","us"],tags:{brand:"David's Bridal","brand:wikidata":"Q5230388","brand:wikipedia":"en:David's Bridal",clothes:"wedding",name:"David's Bridal",shop:"clothes"}},"shop/clothes|Desigual":{tags:{brand:"Desigual","brand:wikidata":"Q83750","brand:wikipedia":"en:Desigual",name:"Desigual",shop:"clothes"}},"shop/clothes|Destination Maternity":{countryCodes:["ca","us"],tags:{brand:"Destination Maternity","brand:wikidata":"Q79051770",clothes:"maternity",name:"Destination Maternity",shop:"clothes"}},"shop/clothes|Devred":{countryCodes:["be","fr","ma"],tags:{brand:"Devred","brand:wikidata":"Q3025542","brand:wikipedia":"fr:Devred 1902",name:"Devred",shop:"clothes"}},"shop/clothes|Didi":{countryCodes:["be","nl"],tags:{brand:"Didi",name:"Didi",shop:"clothes"}},"shop/clothes|Diesel":{tags:{brand:"Diesel","brand:wikidata":"Q158285","brand:wikipedia":"en:Diesel (brand)",name:"Diesel",shop:"clothes"}},"shop/clothes|Dior":{tags:{brand:"Dior","brand:wikidata":"Q542767","brand:wikipedia":"en:Christian Dior (fashion house)",name:"Dior",shop:"clothes"}},"shop/clothes|Diverse":{countryCodes:["pl"],tags:{brand:"Diverse","brand:wikidata":"Q11694298","brand:wikipedia":"pl:Diverse",name:"Diverse",shop:"clothes"}},"shop/clothes|Dolce & Gabbana":{matchNames:["d and g","dg","dolce and gabana","dolce and gabanna","dolce and gabbanna","dolce y gabana","dolce y gabanna","dolce y gabbana","dolce y gabbanna"],tags:{brand:"Dolce & Gabbana","brand:wikidata":"Q214480","brand:wikipedia":"en:Dolce & Gabbana",name:"Dolce & Gabbana",shop:"clothes"}},"shop/clothes|Dorothy Perkins":{countryCodes:["gb","gg","ie","im"],tags:{brand:"Dorothy Perkins","brand:wikidata":"Q5298588","brand:wikipedia":"en:Dorothy Perkins",name:"Dorothy Perkins",shop:"clothes"}},"shop/clothes|Dress Barn":{tags:{brand:"Dress Barn","brand:wikidata":"Q65090033","brand:wikipedia":"en:DressBarn",name:"Dress Barn",shop:"clothes"}},"shop/clothes|Dressmann":{countryCodes:["at","fi","no","se"],tags:{brand:"Dressmann","brand:wikidata":"Q3357081","brand:wikipedia":"en:Dressmann",name:"Dressmann",shop:"clothes"}},"shop/clothes|Du Pareil au Même":{tags:{brand:"Du Pareil au Même",name:"Du Pareil au Même",shop:"clothes"}},"shop/clothes|Dynamite":{countryCodes:["ca","jo","ku","sa","us"],tags:{brand:"Dynamite","brand:wikidata":"Q3117385","brand:wikipedia":"en:Groupe Dynamite",clothes:"women",name:"Dynamite",shop:"clothes"}},"shop/clothes|Eddie Bauer":{countryCodes:["ca","jp","us"],tags:{brand:"Eddie Bauer","brand:wikidata":"Q842174","brand:wikipedia":"en:Eddie Bauer",name:"Eddie Bauer",shop:"clothes"}},"shop/clothes|Edgars":{tags:{brand:"Edgars",name:"Edgars",shop:"clothes"}},"shop/clothes|Edinburgh Woollen Mill":{countryCodes:["gb"],tags:{brand:"Edinburgh Woollen Mill","brand:wikidata":"Q16834657","brand:wikipedia":"en:Edinburgh Woollen Mill",name:"Edinburgh Woollen Mill",shop:"clothes"}},"shop/clothes|Engbers":{countryCodes:["at","de"],tags:{brand:"Engbers","brand:wikidata":"Q1290088","brand:wikipedia":"de:Engbers",name:"Engbers",shop:"clothes"}},"shop/clothes|Ermenegildo Zegna":{countryCodes:["ch","it"],tags:{brand:"Ermenegildo Zegna","brand:wikidata":"Q1355904","brand:wikipedia":"en:Ermenegildo Zegna",clothes:"men",name:"Ermenegildo Zegna",shop:"clothes",short_name:"Zegna"}},"shop/clothes|Ernsting's family":{countryCodes:["at","de"],tags:{brand:"Ernsting's family","brand:wikidata":"Q1361016","brand:wikipedia":"de:Ernsting’s family",name:"Ernsting's family",shop:"clothes"}},"shop/clothes|Esprit":{tags:{brand:"Esprit","brand:wikidata":"Q532746","brand:wikipedia":"en:Esprit Holdings",name:"Esprit",shop:"clothes"}},"shop/clothes|Etam":{tags:{brand:"Etam","brand:wikidata":"Q3059202","brand:wikipedia":"en:Etam Développement",name:"Etam",shop:"clothes"}},"shop/clothes|Evans":{tags:{brand:"Evans","brand:wikidata":"Q5415877","brand:wikipedia":"en:Evans (retailer)",clothes:"women",name:"Evans",shop:"clothes"}},"shop/clothes|Evereve":{countryCodes:["us"],tags:{brand:"Evereve","brand:wikidata":"Q69891997",clothes:"women",name:"Evereve",shop:"clothes"}},"shop/clothes|Everything But Water":{countryCodes:["us"],tags:{brand:"Everything But Water",clothes:"swimwear",name:"Everything But Water",shop:"clothes"}},"shop/clothes|Express":{nomatch:["shop/convenience|Express"],tags:{brand:"Express","brand:wikidata":"Q1384784","brand:wikipedia":"en:Express, Inc.",name:"Express",shop:"clothes"}},"shop/clothes|Fairweather":{countryCodes:["ca"],tags:{brand:"Fairweather","brand:wikidata":"Q64861806",clothes:"women",name:"Fairweather",shop:"clothes"}},"shop/clothes|Fat Face":{countryCodes:["gb","gg","ie"],tags:{brand:"Fat Face","brand:wikidata":"Q5437186","brand:wikipedia":"en:Fat Face",name:"Fat Face",shop:"clothes"}},"shop/clothes|Fendi":{countryCodes:["fr","it"],tags:{brand:"Fendi","brand:wikidata":"Q926575","brand:wikipedia":"en:Fendi",name:"Fendi",shop:"clothes"}},"shop/clothes|Forever 21":{tags:{brand:"Forever 21","brand:wikidata":"Q1060537","brand:wikipedia":"en:Forever 21",name:"Forever 21",shop:"clothes"}},"shop/clothes|Francesca's":{countryCodes:["us"],tags:{brand:"Francesca's","brand:wikidata":"Q72982331",clothes:"women;luxury",name:"Francesca's",shop:"clothes"}},"shop/clothes|Free People":{countryCodes:["ca","us"],tags:{brand:"Free People","brand:wikidata":"Q5499945","brand:wikipedia":"en:Free People",name:"Free People",shop:"clothes"}},"shop/clothes|French Connection":{tags:{brand:"French Connection","brand:wikidata":"Q306457","brand:wikipedia":"en:French Connection (clothing)",name:"French Connection",shop:"clothes",short_name:"FCUK"}},"shop/clothes|Fussl":{countryCodes:["at","de"],matchNames:["fussl modestraße"],tags:{alt_name:"Fussl Modestraße",brand:"Fussl","brand:wikidata":"Q24266366","brand:wikipedia":"de:Fussl Modestraße",name:"Fussl",shop:"clothes"}},"shop/clothes|G-Star Raw":{matchNames:["g-star"],tags:{brand:"G-Star Raw","brand:wikidata":"Q1484081","brand:wikipedia":"en:G-Star Raw",name:"G-Star Raw",shop:"clothes"}},"shop/clothes|GU":{countryCodes:["cl","jp","tw"],tags:{brand:"GU","brand:wikidata":"Q5512642","brand:wikipedia":"en:GU (retailer)",name:"GU",shop:"clothes"}},"shop/clothes|Gabe's":{countryCodes:["us"],matchNames:["gabriel brothers"],tags:{brand:"Gabe's","brand:wikidata":"Q5515554","brand:wikipedia":"en:Gabe's",name:"Gabe's",shop:"clothes"}},"shop/clothes|Gant":{tags:{brand:"Gant","brand:wikidata":"Q1493667","brand:wikipedia":"en:Gant (retailer)",name:"Gant",shop:"clothes"}},"shop/clothes|Gap":{matchNames:["the gap"],tags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap",shop:"clothes"}},"shop/clothes|Gap Factory":{countryCodes:["us"],tags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap Factory",shop:"clothes"}},"shop/clothes|Gap Kids":{tags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap Kids",shop:"clothes"}},"shop/clothes|Garage":{countryCodes:["am","ca","jo","om","qa","sa","us"],tags:{brand:"Garage","brand:wikidata":"Q5521860","brand:wikipedia":"en:Garage (clothing retailer)",clothes:"women",name:"Garage",shop:"clothes"}},"shop/clothes|Gerry Weber":{tags:{brand:"Gerry Weber","brand:wikidata":"Q873447","brand:wikipedia":"en:Gerry Weber",name:"Gerry Weber",shop:"clothes"}},"shop/clothes|Gina Laura":{countryCodes:["at","de"],tags:{brand:"Gina Laura","brand:wikidata":"Q2700576","brand:wikipedia":"de:Gina Laura",name:"Gina Laura",shop:"clothes"}},"shop/clothes|Gloria Jeans":{countryCodes:["ru","ua"],nomatch:["amenity/cafe|Gloria Jean's"],tags:{brand:"Gloria Jeans","brand:wikidata":"Q4139985","brand:wikipedia":"ru:Глория Джинс",name:"Gloria Jeans",shop:"clothes"}},"shop/clothes|Gucci":{tags:{brand:"Gucci","brand:wikidata":"Q178516","brand:wikipedia":"en:Gucci",name:"Gucci",shop:"clothes"}},"shop/clothes|Guess":{tags:{brand:"Guess","brand:wikidata":"Q2470307","brand:wikipedia":"en:Guess (clothing)",name:"Guess",shop:"clothes"}},"shop/clothes|Gymboree":{countryCodes:["ca","us"],tags:{brand:"Gymboree","brand:wikidata":"Q4039771","brand:wikipedia":"en:Gymboree",name:"Gymboree",shop:"clothes"}},"shop/clothes|Gémo":{countryCodes:["be","ch","fr"],tags:{brand:"Gémo","brand:wikidata":"Q3122954","brand:wikipedia":"fr:Gémo",name:"Gémo",shop:"clothes"}},"shop/clothes|H&M":{tags:{brand:"H&M","brand:wikidata":"Q188326","brand:wikipedia":"en:H&M",name:"H&M",shop:"clothes"}},"shop/clothes|Haggar":{countryCodes:["us"],matchNames:["haggar clothing"],tags:{alt_name:"Haggar Clothing Co.",brand:"Haggar","brand:wikidata":"Q5638669","brand:wikipedia":"en:Haggar Clothing",name:"Haggar",shop:"clothes"}},"shop/clothes|Hallhuber":{countryCodes:["at","ch","de","lu","nl"],tags:{brand:"Hallhuber","brand:wikidata":"Q1571714","brand:wikipedia":"de:Hallhuber (Bekleidungshaus)",name:"Hallhuber",shop:"clothes"}},"shop/clothes|Hanna Andersson":{countryCodes:["us"],matchNames:["hanna anderssen"],tags:{brand:"Hanna Andersson","brand:wikidata":"Q17460802","brand:wikipedia":"en:Hanna Andersson",clothes:"baby;children;women",name:"Hanna Andersson",shop:"clothes"}},"shop/clothes|Hermès":{countryCodes:["ch","fr"],nomatch:["amenity/post_office|Hermes Paketshop"],tags:{brand:"Hermès","brand:wikidata":"Q843887","brand:wikipedia":"en:Hermès",name:"Hermès",shop:"clothes"}},"shop/clothes|Hobbs":{countryCodes:["gb"],tags:{brand:"Hobbs","brand:wikidata":"Q25108740",name:"Hobbs",shop:"clothes"}},"shop/clothes|Hollister":{tags:{brand:"Hollister","brand:wikidata":"Q1257477","brand:wikipedia":"en:Hollister Co.",name:"Hollister",official_name:"Hollister Co.",shop:"clothes"}},"shop/clothes|Hot Topic":{countryCodes:["ca","us"],tags:{brand:"Hot Topic","brand:wikidata":"Q9294032","brand:wikipedia":"en:Hot Topic",name:"Hot Topic",shop:"clothes"}},"shop/clothes|House":{tags:{brand:"House","brand:wikidata":"Q9294202","brand:wikipedia":"pl:House (marka)",name:"House",shop:"clothes"}},"shop/clothes|Hugo Boss":{tags:{brand:"Hugo Boss","brand:wikidata":"Q491627","brand:wikipedia":"en:Hugo Boss",name:"Hugo Boss",shop:"clothes",short_name:"Boss"}},"shop/clothes|Hunkemöller":{countryCodes:["at","be","de","dk","es","lu","nl"],tags:{brand:"Hunkemöller","brand:wikidata":"Q2604175","brand:wikipedia":"en:Hunkemöller",name:"Hunkemöller",shop:"clothes"}},"shop/clothes|IZOD":{tags:{brand:"IZOD","brand:wikidata":"Q17152556","brand:wikipedia":"en:Izod",clothes:"men",name:"IZOD",shop:"clothes"}},"shop/clothes|Indochino":{countryCodes:["ca","us"],tags:{brand:"Indochino","brand:wikidata":"Q64448127","brand:wikipedia":"en:Indochino",clothes:"suits",name:"Indochino",shop:"clothes"}},"shop/clothes|Inside":{tags:{brand:"Inside",name:"Inside",shop:"clothes"}},"shop/clothes|Intimissimi":{tags:{brand:"Intimissimi","brand:wikidata":"Q305404","brand:wikipedia":"en:Intimissimi",clothes:"underwear",name:"Intimissimi",shop:"clothes"}},"shop/clothes|J.Crew":{countryCodes:["ca","gb","us"],tags:{brand:"J.Crew","brand:wikidata":"Q5370765","brand:wikipedia":"en:J.Crew",clothes:"men;women;children",name:"J.Crew",shop:"clothes"}},"shop/clothes|J.Jill":{countryCodes:["us"],tags:{brand:"J.Jill","brand:wikidata":"Q64448268","brand:wikipedia":"en:J.Jill",clothes:"women",name:"J.Jill",shop:"clothes"}},"shop/clothes|JBC":{countryCodes:["be","lu"],tags:{brand:"JBC","brand:wikidata":"Q2671470","brand:wikipedia":"nl:JBC",name:"JBC",shop:"clothes"}},"shop/clothes|Jack & Jones":{tags:{brand:"Jack & Jones","brand:wikidata":"Q6077665","brand:wikipedia":"en:Jack & Jones",name:"Jack & Jones",shop:"clothes"}},"shop/clothes|Jack Wills":{countryCodes:["ae","gb","hk","ie","kw","lb","mo","sg","us"],tags:{brand:"Jack Wills","brand:wikidata":"Q6115814","brand:wikipedia":"en:Jack Wills",name:"Jack Wills",shop:"clothes"}},"shop/clothes|Janie & Jack":{countryCodes:["ca","us"],tags:{brand:"Janie & Jack","brand:wikidata":"Q64449634","brand:wikipedia":"en:Janie & Jack",clothes:"children",name:"Janie & Jack",shop:"clothes"}},"shop/clothes|Jeans Centre":{countryCodes:["nl"],tags:{brand:"Jeans Centre",name:"Jeans Centre",shop:"clothes"}},"shop/clothes|Jeans Fritz":{countryCodes:["de"],tags:{brand:"Jeans Fritz","brand:wikidata":"Q1686071","brand:wikipedia":"de:Jeans Fritz",name:"Jeans Fritz",shop:"clothes"}},"shop/clothes|Jennyfer":{countryCodes:["fr","it","lu"],tags:{brand:"Jennyfer","brand:wikidata":"Q3177174","brand:wikipedia":"fr:Jennyfer",name:"Jennyfer",shop:"clothes"}},"shop/clothes|Jet":{countryCodes:["za"],nomatch:["amenity/fuel|Jet"],tags:{brand:"Jet","brand:wikidata":"Q61995123",name:"Jet",shop:"clothes"}},"shop/clothes|Jigsaw":{countryCodes:["au","gb","us"],tags:{brand:"Jigsaw","brand:wikidata":"Q6192383","brand:wikipedia":"en:Jigsaw (clothing retailer)",name:"Jigsaw",shop:"clothes"}},"shop/clothes|JoJo Maman Bébé":{countryCodes:["gb"],tags:{brand:"JoJo Maman Bébé","brand:wikidata":"Q6204064",clothes:"maternity;babies",name:"JoJo Maman Bébé",shop:"clothes"}},"shop/clothes|JoS. A. Bank":{countryCodes:["us"],matchNames:["jos bank","joseph a bank"],tags:{brand:"JoS. A. Bank","brand:wikidata":"Q6204078","brand:wikipedia":"en:JoS. A. Bank Clothiers",name:"JoS. A. Bank",official_name:"Jos. A. Bank Clothiers",shop:"clothes"}},"shop/clothes|Jockey":{tags:{brand:"Jockey","brand:wikidata":"Q534235","brand:wikipedia":"en:Jockey International",name:"Jockey",shop:"clothes"}},"shop/clothes|Joe Fresh":{tags:{brand:"Joe Fresh","brand:wikidata":"Q6209926","brand:wikipedia":"en:Joe Fresh",name:"Joe Fresh",shop:"clothes"}},"shop/clothes|Johnny Was":{countryCodes:["us"],tags:{brand:"Johnny Was",clothes:"women",name:"Johnny Was",shop:"clothes"}},"shop/clothes|Joules":{countryCodes:["gb","gg","ie"],tags:{brand:"Joules","brand:wikidata":"Q25351738","brand:wikipedia":"en:Joules (clothing)",name:"Joules",shop:"clothes"}},"shop/clothes|Jules":{countryCodes:["be","fr","it"],tags:{brand:"Jules","brand:wikidata":"Q3188386","brand:wikipedia":"fr:Jules (enseigne)",clothes:"men",name:"Jules",shop:"clothes"}},"shop/clothes|Justice":{countryCodes:["ca","us"],tags:{brand:"Justice","brand:wikidata":"Q7857512","brand:wikipedia":"en:Tween Brands",name:"Justice",shop:"clothes"}},"shop/clothes|K&Ö":{countryCodes:["at"],matchNames:["kastner & öhler"],tags:{alt_name:"Kastner & Öhler",brand:"K&Ö","brand:wikidata":"Q1735474","brand:wikipedia":"de:Kastner & Öhler",name:"K&Ö",shop:"clothes"}},"shop/clothes|KappAhl":{countryCodes:["fi","no","pl","se"],tags:{brand:"KappAhl","brand:wikidata":"Q4349016","brand:wikipedia":"sv:Kappahl",name:"KappAhl",shop:"clothes"}},"shop/clothes|Karen Millen":{countryCodes:["gb"],tags:{brand:"Karen Millen","brand:wikidata":"Q6369889",name:"Karen Millen",shop:"clothes"}},"shop/clothes|Kate Spade New York":{countryCodes:["ca","us"],matchNames:["kate spade ny"],tags:{brand:"Kate Spade New York","brand:wikidata":"Q6375797","brand:wikipedia":"en:Kate Spade New York",name:"Kate Spade New York",shop:"clothes",short_name:"Kate Spade"}},"shop/clothes|Kendra Scott":{tags:{brand:"Kendra Scott",name:"Kendra Scott",shop:"clothes"}},"shop/clothes|KiK":{tags:{brand:"KiK","brand:wikidata":"Q883965","brand:wikipedia":"en:KiK",name:"KiK",shop:"clothes"}},"shop/clothes|Kiabi":{tags:{brand:"Kiabi","brand:wikidata":"Q3196299","brand:wikipedia":"fr:Kiabi",name:"Kiabi",shop:"clothes"}},"shop/clothes|Koton":{tags:{brand:"Koton","brand:wikidata":"Q6063877","brand:wikipedia":"tr:Koton",name:"Koton",shop:"clothes"}},"shop/clothes|LC Waikiki":{tags:{brand:"LC Waikiki","brand:wikidata":"Q3205965","brand:wikipedia":"fr:LC Waikiki",name:"LC Waikiki",shop:"clothes"}},"shop/clothes|La Halle":{countryCodes:["ch","fr"],tags:{brand:"La Halle",name:"La Halle",shop:"clothes"}},"shop/clothes|La Senza":{countryCodes:["ca","gb"],tags:{brand:"La Senza","brand:wikidata":"Q3212802","brand:wikipedia":"en:La Senza",name:"La Senza",shop:"clothes"}},"shop/clothes|La Vie en Rose":{tags:{brand:"La Vie en Rose","brand:wikidata":"Q4950452","brand:wikipedia":"en:Boutique La Vie en Rose",clothes:"underwear;women",name:"La Vie en Rose",shop:"clothes"}},"shop/clothes|Lacoste":{tags:{brand:"Lacoste","brand:wikidata":"Q309031","brand:wikipedia":"en:Lacoste",name:"Lacoste",shop:"clothes"}},"shop/clothes|Lane Bryant":{countryCodes:["us"],tags:{brand:"Lane Bryant","brand:wikidata":"Q6485350","brand:wikipedia":"en:Lane Bryant",clothes:"oversize;women",name:"Lane Bryant",shop:"clothes"}},"shop/clothes|Laura":{countryCodes:["ca"],tags:{brand:"Laura","brand:wikidata":"Q6498590","brand:wikipedia":"en:Laura (clothing retailer)",clothes:"women",name:"Laura",shop:"clothes"}},"shop/clothes|Laura Ashley":{countryCodes:["gb"],tags:{brand:"Laura Ashley","brand:wikidata":"Q1523089","brand:wikipedia":"en:Laura Ashley plc",name:"Laura Ashley",shop:"clothes"}},"shop/clothes|Le Château":{countryCodes:["ae","ca","sa"],tags:{brand:"Le Château","brand:wikidata":"Q6506731","brand:wikipedia":"en:Le Château",name:"Le Château",shop:"clothes"}},"shop/clothes|Levi's":{tags:{brand:"Levi's","brand:wikidata":"Q127962","brand:wikipedia":"en:Levi Strauss & Co.",clothes:"denim;men;women",name:"Levi's",shop:"clothes"}},"shop/clothes|Lids":{countryCodes:["ca","us"],tags:{brand:"Lids","brand:wikidata":"Q19841609","brand:wikipedia":"en:Lids (store)",clothes:"hats",name:"Lids",shop:"clothes"}},"shop/clothes|Lindex":{countryCodes:["cz","ee","fi","no","se","sk"],tags:{brand:"Lindex","brand:wikidata":"Q1786717","brand:wikipedia":"en:Lindex",name:"Lindex",shop:"clothes"}},"shop/clothes|Loft":{matchNames:["ann taylor loft","the loft"],tags:{brand:"Loft","brand:wikidata":"Q62075137",clothes:"women",name:"Loft",shop:"clothes"}},"shop/clothes|Loro Piana":{countryCodes:["fr","it"],tags:{brand:"Loro Piana","brand:wikidata":"Q1686544","brand:wikipedia":"en:Loro Piana",name:"Loro Piana",shop:"clothes"}},"shop/clothes|Louis Vuitton":{tags:{brand:"Louis Vuitton","brand:wikidata":"Q191485","brand:wikipedia":"en:Louis Vuitton",name:"Louis Vuitton",shop:"clothes"}},"shop/clothes|Lowes":{countryCodes:["au"],nomatch:["shop/doityourself|Lowe's","shop/supermarket|Lowe's Market","shop/supermarket|Lowes Foods"],tags:{brand:"Lowes","brand:wikidata":"Q6693996","brand:wikipedia":"en:Lowes Menswear",name:"Lowes",shop:"clothes"}},"shop/clothes|Lucky Brand":{countryCodes:["ca","us"],matchNames:["lucky brand jeans"],tags:{brand:"Lucky Brand","brand:wikidata":"Q6697865","brand:wikipedia":"en:Lucky Brand Jeans",name:"Lucky Brand",shop:"clothes"}},"shop/clothes|Lululemon":{countryCodes:["au","ca","us"],tags:{brand:"Lululemon","brand:wikidata":"Q6702957","brand:wikipedia":"en:Lululemon Athletica",clothes:"men;women",name:"Lululemon",official_name:"Lululemon Athletica",shop:"clothes"}},"shop/clothes|M&Co":{countryCodes:["gb"],tags:{brand:"M&Co","brand:wikidata":"Q6711808","brand:wikipedia":"en:M&Co.",name:"M&Co",shop:"clothes"}},"shop/clothes|MO":{countryCodes:["pt"],tags:{brand:"MO","brand:wikidata":"Q51882883","brand:wikipedia":"pt:MO (lojas)",name:"MO",shop:"clothes"}},"shop/clothes|MS Mode":{countryCodes:["be","de","fr","lu","nl"],tags:{brand:"MS Mode","brand:wikidata":"Q6718117","brand:wikipedia":"nl:MS Mode",name:"MS Mode",shop:"clothes"}},"shop/clothes|Mackage":{tags:{brand:"Mackage",name:"Mackage",shop:"clothes"}},"shop/clothes|Madewell":{countryCodes:["us"],tags:{brand:"Madewell","brand:wikidata":"Q64026213",clothes:"men;women",name:"Madewell",shop:"clothes"}},"shop/clothes|Maidenform":{countryCodes:["us"],tags:{brand:"Maidenform","brand:wikidata":"Q6735419","brand:wikipedia":"en:Maidenform",clothes:"underwear;women",name:"Maidenform",shop:"clothes"}},"shop/clothes|Mandee":{countryCodes:["us"],tags:{brand:"Mandee","brand:wikidata":"Q71035705",clothes:"women",name:"Mandee",shop:"clothes"}},"shop/clothes|Mango":{tags:{brand:"Mango","brand:wikidata":"Q136503","brand:wikipedia":"en:Mango (retailer)",name:"Mango",shop:"clothes"}},"shop/clothes|Marc O'Polo":{countryCodes:["at","be","ch","de","nl","pl"],tags:{brand:"Marc O'Polo","brand:wikidata":"Q1892752","brand:wikipedia":"en:Marc O'Polo",name:"Marc O'Polo",shop:"clothes"}},"shop/clothes|Marimekko":{countryCodes:["fi"],tags:{brand:"Marimekko","brand:wikidata":"Q534903","brand:wikipedia":"fi:Marimekko",name:"Marimekko",shop:"clothes"}},"shop/clothes|Marisa":{tags:{brand:"Marisa",name:"Marisa",shop:"clothes"}},"shop/clothes|Mark Formelle":{countryCodes:["by","kz","ru"],tags:{brand:"Mark Formelle","brand:wikidata":"Q25381083","brand:wikipedia":"ru:Mark Formelle",name:"Mark Formelle",shop:"clothes"}},"shop/clothes|Mark's":{countryCodes:["ca"],tags:{brand:"Mark's","brand:wikidata":"Q6766373","brand:wikipedia":"en:Mark's",name:"Mark's",shop:"clothes"}},"shop/clothes|Massimo Dutti":{tags:{brand:"Massimo Dutti","brand:wikidata":"Q788231","brand:wikipedia":"en:Massimo Dutti",name:"Massimo Dutti",shop:"clothes"}},"shop/clothes|Matalan":{countryCodes:["ae","gb"],tags:{brand:"Matalan","brand:wikidata":"Q12061509","brand:wikipedia":"en:Matalan",name:"Matalan",shop:"clothes"}},"shop/clothes|Maurices":{countryCodes:["ca","fr","us"],tags:{brand:"Maurices","brand:wikidata":"Q6793571","brand:wikipedia":"en:Maurices",clothes:"women",name:"Maurices",shop:"clothes"}},"shop/clothes|Max Mara":{tags:{brand:"Max Mara","brand:wikidata":"Q1151774","brand:wikipedia":"en:Max Mara",name:"Max Mara",shop:"clothes"}},"shop/clothes|Melanie Lyne":{countryCodes:["ca"],tags:{brand:"Melanie Lyne","brand:wikidata":"Q64861470",clothes:"women",name:"Melanie Lyne",shop:"clothes"}},"shop/clothes|Men's Wearhouse":{countryCodes:["us"],matchNames:["mens warehouse"],tags:{brand:"Men's Wearhouse","brand:wikidata":"Q57405513","brand:wikipedia":"en:Men's Wearhouse",clothes:"suits",name:"Men's Wearhouse",shop:"clothes"}},"shop/clothes|Mexx":{tags:{brand:"Mexx","brand:wikidata":"Q1837290","brand:wikipedia":"en:Mexx",name:"Mexx",shop:"clothes"}},"shop/clothes|Michael Kors":{tags:{brand:"Michael Kors","brand:wikidata":"Q19572998","brand:wikipedia":"en:Capri Holdings",name:"Michael Kors",shop:"clothes"}},"shop/clothes|Miller & Monroe":{countryCodes:["at","de","nl"],tags:{brand:"Miller & Monroe",name:"Miller & Monroe",shop:"clothes"}},"shop/clothes|Mim":{countryCodes:["fr","it"],tags:{brand:"Mim",name:"Mim",shop:"clothes"}},"shop/clothes|Minimax":{countryCodes:["by"],tags:{brand:"Minimax",name:"Minimax",shop:"clothes"}},"shop/clothes|Miss Etam":{countryCodes:["nl"],tags:{brand:"Miss Etam",name:"Miss Etam",shop:"clothes"}},"shop/clothes|Miss Selfridge":{tags:{brand:"Miss Selfridge","brand:wikidata":"Q6877374","brand:wikipedia":"en:Miss Selfridge",clothes:"women",name:"Miss Selfridge",shop:"clothes"}},"shop/clothes|Mohito":{tags:{brand:"Mohito",name:"Mohito",shop:"clothes"}},"shop/clothes|Monsoon":{countryCodes:["gb","gg","ie"],tags:{brand:"Monsoon","brand:wikidata":"Q65007501",name:"Monsoon",shop:"clothes"}},"shop/clothes|Moores":{countryCodes:["ca"],tags:{brand:"Moores","brand:wikidata":"Q6908309","brand:wikipedia":"en:Moores",clothes:"men",name:"Moores",shop:"clothes"}},"shop/clothes|Moss Bros":{countryCodes:["ae","gb","gg","je"],tags:{brand:"Moss Bros","brand:wikidata":"Q6916538","brand:wikipedia":"en:Moss Bros Group",clothes:"men",name:"Moss Bros",shop:"clothes"}},"shop/clothes|Motherhood Maternity":{countryCodes:["ca","us"],tags:{brand:"Motherhood Maternity","brand:wikidata":"Q79051139",clothes:"maternity",name:"Motherhood Maternity",shop:"clothes"}},"shop/clothes|Motivi":{tags:{brand:"Motivi",name:"Motivi",shop:"clothes"}},"shop/clothes|Mr Price":{tags:{brand:"Mr Price","brand:wikidata":"Q6929120","brand:wikipedia":"en:Mr. Price",name:"Mr Price",shop:"clothes"}},"shop/clothes|Mustang":{tags:{brand:"Mustang","brand:wikidata":"Q221562","brand:wikipedia":"de:Mustang (Jeans)",name:"Mustang",shop:"clothes"}},"shop/clothes|NKD":{countryCodes:["at","de","it","si"],tags:{brand:"NKD","brand:wikidata":"Q927272","brand:wikipedia":"de:NKD",name:"NKD",shop:"clothes"}},"shop/clothes|Naf Naf":{countryCodes:["ch","fr"],tags:{brand:"Naf Naf","brand:wikidata":"Q3334188","brand:wikipedia":"fr:Naf Naf",name:"Naf Naf",shop:"clothes"}},"shop/clothes|Napapijri":{tags:{brand:"Napapijri","brand:wikidata":"Q2782017","brand:wikipedia":"en:Napapijri",name:"Napapijri",shop:"clothes"}},"shop/clothes|Nautica":{tags:{brand:"Nautica","brand:wikidata":"Q6981479","brand:wikipedia":"en:Nautica (clothing company)",name:"Nautica",shop:"clothes"}},"shop/clothes|New Look":{countryCodes:["be","de","fr","gb","ie","pl"],tags:{brand:"New Look","brand:wikidata":"Q12063852","brand:wikipedia":"en:New Look (company)",name:"New Look",shop:"clothes"}},"shop/clothes|New York & Company":{countryCodes:["us"],tags:{brand:"New York & Company","brand:wikidata":"Q7012977","brand:wikipedia":"en:New York & Company",name:"New York & Company",shop:"clothes"}},"shop/clothes|New Yorker":{tags:{brand:"New Yorker","brand:wikidata":"Q706421","brand:wikipedia":"en:New Yorker (clothing)",name:"New Yorker",shop:"clothes"}},"shop/clothes|Next":{tags:{brand:"Next","brand:wikidata":"Q246655","brand:wikipedia":"en:Next plc",name:"Next",shop:"clothes"}},"shop/clothes|Nike":{tags:{brand:"Nike","brand:wikidata":"Q483915","brand:wikipedia":"en:Nike, Inc.",name:"Nike",shop:"clothes"}},"shop/clothes|Nordstrom Rack":{countryCodes:["ca","us"],tags:{brand:"Nordstrom Rack","brand:wikidata":"Q21463374","brand:wikipedia":"en:Nordstrom Rack",name:"Nordstrom Rack",shop:"clothes"}},"shop/clothes|Northern Reflections":{countryCodes:["ca"],tags:{brand:"Northern Reflections","brand:wikidata":"Q65947797",name:"Northern Reflections",shop:"clothes"}},"shop/clothes|OVS":{countryCodes:["at","ch","fr","it","si"],tags:{brand:"OVS","brand:wikidata":"Q2042514","brand:wikipedia":"en:OVS (company)",name:"OVS",shop:"clothes"}},"shop/clothes|Oasis":{countryCodes:["es","gb","ie"],tags:{brand:"Oasis","brand:wikidata":"Q64532852",name:"Oasis",shop:"clothes"}},"shop/clothes|Okaïdi":{countryCodes:["be","ch","es","fr","it","pl"],tags:{brand:"Okaïdi","brand:wikidata":"Q3350027","brand:wikipedia":"fr:Okaïdi",name:"Okaïdi",shop:"clothes"}},"shop/clothes|Old Navy":{tags:{brand:"Old Navy","brand:wikidata":"Q2735242","brand:wikipedia":"en:Old Navy",name:"Old Navy",shop:"clothes"}},"shop/clothes|Only":{tags:{brand:"Only","brand:wikidata":"Q61799370",name:"Only",shop:"clothes"}},"shop/clothes|Orchestra":{tags:{brand:"Orchestra","brand:wikidata":"Q28042940","brand:wikipedia":"fr:Orchestra Prémaman",name:"Orchestra",shop:"clothes"}},"shop/clothes|Original Marines":{countryCodes:["it"],tags:{brand:"Original Marines",name:"Original Marines",shop:"clothes"}},"shop/clothes|Orsay":{tags:{brand:"Orsay","brand:wikidata":"Q883245","brand:wikipedia":"de:Orsay (Modeunternehmen)",name:"Orsay",shop:"clothes"}},"shop/clothes|Outfit":{countryCodes:["de","gb"],tags:{brand:"Outfit","brand:wikidata":"Q7112061","brand:wikipedia":"en:Outfit (retailer)",name:"Outfit",shop:"clothes"}},"shop/clothes|Oysho":{tags:{brand:"Oysho","brand:wikidata":"Q3327046","brand:wikipedia":"en:Oysho",name:"Oysho",shop:"clothes"}},"shop/clothes|PacSun":{countryCodes:["us"],tags:{brand:"PacSun","brand:wikidata":"Q7121857","brand:wikipedia":"en:PacSun",name:"PacSun",shop:"clothes"}},"shop/clothes|Palmers":{countryCodes:["at","de"],tags:{brand:"Palmers","brand:wikidata":"Q1509985","brand:wikipedia":"de:Palmers",name:"Palmers",shop:"clothes"}},"shop/clothes|Peacocks":{countryCodes:["cy","gb"],tags:{brand:"Peacocks","brand:wikidata":"Q7157762","brand:wikipedia":"en:Peacocks (clothing)",name:"Peacocks",shop:"clothes"}},"shop/clothes|Peek & Cloppenburg":{countryCodes:["at","be","de","nl","pl"],tags:{brand:"Peek & Cloppenburg","brand:wikidata":"Q2066959","brand:wikipedia":"en:Peek & Cloppenburg",name:"Peek & Cloppenburg",shop:"clothes"}},"shop/clothes|Penningtons":{countryCodes:["ca"],tags:{brand:"Penningtons","brand:wikidata":"Q16956527","brand:wikipedia":"en:Penningtons",clothes:"women",name:"Penningtons",shop:"clothes"}},"shop/clothes|Pep":{tags:{brand:"Pep","brand:wikidata":"Q7166182","brand:wikipedia":"en:Pep (store)",name:"Pep",shop:"clothes"}},"shop/clothes|Pep&Co":{countryCodes:["gb","ie"],nomatch:["shop/clothes|Pepco"],tags:{brand:"Pep&Co","brand:wikidata":"Q24908166","brand:wikipedia":"en:Pep&Co",name:"Pep&Co",shop:"clothes"}},"shop/clothes|Pepco":{countryCodes:["cz","hu","pl","ro","sk"],matchTags:["shop/variety_store"],nomatch:["shop/clothes|Pep&Co"],tags:{brand:"Pepco","brand:wikidata":"Q11815580","brand:wikipedia":"pl:Pepco",name:"Pepco",shop:"clothes"}},"shop/clothes|Pepe Jeans":{tags:{brand:"Pepe Jeans","brand:wikidata":"Q426992","brand:wikipedia":"en:Pepe Jeans",name:"Pepe Jeans",shop:"clothes"}},"shop/clothes|Petit Bateau":{countryCodes:["be","de","fr","gb","it","lu"],tags:{brand:"Petit Bateau","brand:wikidata":"Q3377090","brand:wikipedia":"en:Petit Bateau",name:"Petit Bateau",shop:"clothes"}},"shop/clothes|Phase Eight":{countryCodes:["ch","de","gb"],tags:{brand:"Phase Eight","brand:wikidata":"Q17020730","brand:wikipedia":"en:Phase Eight",name:"Phase Eight",shop:"clothes"}},"shop/clothes|Piazza Italia":{countryCodes:["it"],tags:{brand:"Piazza Italia","brand:wikidata":"Q3902241","brand:wikipedia":"it:Piazza Italia (azienda)",name:"Piazza Italia",shop:"clothes"}},"shop/clothes|Pierre Cardin":{tags:{brand:"Pierre Cardin","brand:wikidata":"Q22921009",name:"Pierre Cardin",shop:"clothes"}},"shop/clothes|Pimkie":{countryCodes:["at","be","de","es","fr","it"],tags:{brand:"Pimkie","brand:wikidata":"Q1758066","brand:wikipedia":"en:Pimkie",name:"Pimkie",shop:"clothes"}},"shop/clothes|Pink":{tags:{brand:"Pink","brand:wikidata":"Q20716793","brand:wikipedia":"en:Pink (Victoria's Secret)",clothes:"underwear;women",name:"Pink",shop:"clothes"}},"shop/clothes|Plato's Closet":{countryCodes:["ca","us"],tags:{brand:"Plato's Closet","brand:wikidata":"Q61779112",name:"Plato's Closet",second_hand:"only",shop:"clothes"}},"shop/clothes|Polo Ralph Lauren":{tags:{brand:"Polo Ralph Lauren","brand:wikidata":"Q1641437","brand:wikipedia":"en:Ralph Lauren Corporation",name:"Polo Ralph Lauren",shop:"clothes"}},"shop/clothes|Prada":{tags:{brand:"Prada","brand:wikidata":"Q193136","brand:wikipedia":"en:Prada",name:"Prada",shop:"clothes"}},"shop/clothes|Primark":{tags:{brand:"Primark","brand:wikidata":"Q137023","brand:wikipedia":"en:Primark",name:"Primark",shop:"clothes"}},"shop/clothes|Promod":{tags:{brand:"Promod","brand:wikidata":"Q3407429","brand:wikipedia":"en:Promod",name:"Promod",shop:"clothes"}},"shop/clothes|Pull & Bear":{tags:{brand:"Pull & Bear","brand:wikidata":"Q691029","brand:wikipedia":"en:Pull&Bear",name:"Pull & Bear",shop:"clothes"}},"shop/clothes|Puma":{nomatch:["amenity/fuel|Puma"],tags:{brand:"Puma","brand:wikidata":"Q157064","brand:wikipedia":"en:Puma (brand)",name:"Puma",shop:"clothes"}},"shop/clothes|Quiksilver":{matchNames:["quicksilver"],tags:{brand:"Quiksilver","brand:wikidata":"Q1329463","brand:wikipedia":"en:Quiksilver",name:"Quiksilver",shop:"clothes"}},"shop/clothes|Quiz":{tags:{brand:"Quiz","brand:wikidata":"Q29995941","brand:wikipedia":"en:Quiz (clothing)",clothes:"women",name:"Quiz",shop:"clothes"}},"shop/clothes|RW&CO.":{countryCodes:["ca"],tags:{brand:"RW&CO.","brand:wikidata":"Q65965663",clothes:"women;men",name:"RW&CO.",shop:"clothes"}},"shop/clothes|Rainbow":{countryCodes:["de","us"],tags:{brand:"Rainbow","brand:wikidata":"Q7284708","brand:wikipedia":"en:Rainbow Shops",name:"Rainbow",shop:"clothes"}},"shop/clothes|Reebok":{tags:{brand:"Reebok","brand:wikidata":"Q466183","brand:wikipedia":"en:Reebok",name:"Reebok",shop:"clothes"}},"shop/clothes|Reiss":{tags:{brand:"Reiss","brand:wikidata":"Q7310479","brand:wikipedia":"en:Reiss (brand)",name:"Reiss",shop:"clothes"}},"shop/clothes|Reitmans":{countryCodes:["ca"],tags:{brand:"Reitmans","brand:wikidata":"Q7310506","brand:wikipedia":"en:Reitmans",name:"Reitmans",shop:"clothes"}},"shop/clothes|Reserved":{tags:{brand:"Reserved","brand:wikidata":"Q21809354","brand:wikipedia":"en:Reserved",name:"Reserved",shop:"clothes"}},"shop/clothes|Ricki's":{tags:{brand:"Ricki's","brand:wikidata":"Q65947929",clothes:"women",name:"Ricki's",shop:"clothes"}},"shop/clothes|River Island":{countryCodes:["gb","ie","im","nl","pl"],tags:{brand:"River Island","brand:wikidata":"Q2670328","brand:wikipedia":"en:River Island",name:"River Island",shop:"clothes"}},"shop/clothes|Robert Graham":{countryCodes:["us"],tags:{brand:"Robert Graham","brand:wikidata":"Q18390679","brand:wikipedia":"en:Robert Graham (fashion brand)",clothes:"men",name:"Robert Graham",shop:"clothes"}},"shop/clothes|Roots":{tags:{brand:"Roots","brand:wikidata":"Q7366633","brand:wikipedia":"en:Roots Canada",name:"Roots",shop:"clothes"}},"shop/clothes|Saint Laurent":{tags:{alt_name:"Yves Saint Laurent",brand:"Saint Laurent","brand:wikidata":"Q2282172","brand:wikipedia":"en:Yves Saint Laurent (brand)",name:"Saint Laurent",shop:"clothes",short_name:"YSL"}},"shop/clothes|Saltrock":{countryCodes:["gb"],tags:{brand:"Saltrock","brand:wikidata":"Q7406195","brand:wikipedia":"en:Saltrock",name:"Saltrock",shop:"clothes"}},"shop/clothes|Sandro":{tags:{brand:"Sandro",name:"Sandro",shop:"clothes"}},"shop/clothes|Scotch & Soda":{tags:{brand:"Scotch & Soda","brand:wikidata":"Q17141914","brand:wikipedia":"en:Scotch and Soda (clothing)",name:"Scotch & Soda",shop:"clothes"}},"shop/clothes|Sela":{countryCodes:["kg","ru"],tags:{brand:"Sela","brand:wikidata":"Q62075111",name:"Sela",shop:"clothes"}},"shop/clothes|Select":{countryCodes:["gb"],nomatch:["shop/convenience|Select"],tags:{brand:"Select",name:"Select",shop:"clothes"}},"shop/clothes|Sergent Major":{countryCodes:["be","de","es","fr","gb","it"],tags:{brand:"Sergent Major","brand:wikidata":"Q62521738","brand:wikipedia":"fr:Sergent Major (entreprise)",clothes:"babies;children",name:"Sergent Major",shop:"clothes"}},"shop/clothes|Shoeby":{countryCodes:["nl"],tags:{brand:"Shoeby",name:"Shoeby",shop:"clothes"}},"shop/clothes|Sinsay":{countryCodes:["pl"],tags:{brand:"Sinsay",name:"Sinsay",shop:"clothes"}},"shop/clothes|Sisley":{countryCodes:["at","ch","de","hr","it","ru"],tags:{brand:"Sisley","brand:wikidata":"Q12054325","brand:wikipedia":"cs:Sisley",name:"Sisley",shop:"clothes"}},"shop/clothes|Slaters":{countryCodes:["gb"],tags:{brand:"Slaters","brand:wikidata":"Q7538912","brand:wikipedia":"en:Slater Menswear",clothes:"suits",name:"Slaters",shop:"clothes"}},"shop/clothes|Soma":{countryCodes:["us"],tags:{alt_name:"Soma Intimates",brand:"Soma","brand:wikidata":"Q69882213",clothes:"underwear;women",name:"Soma",shop:"clothes"}},"shop/clothes|Spanx":{countryCodes:["us"],tags:{brand:"Spanx","brand:wikidata":"Q1932886","brand:wikipedia":"en:Spanx",clothes:"underwear",name:"Spanx",shop:"clothes"}},"shop/clothes|Springfield":{tags:{brand:"Springfield","brand:wikidata":"Q958209","brand:wikipedia":"es:Springfield (cadena de tiendas)",name:"Springfield",shop:"clothes"}},"shop/clothes|Stefanel":{countryCodes:["at","de","fr","it"],tags:{brand:"Stefanel","brand:wikidata":"Q2338087","brand:wikipedia":"ro:Stefanel (companie)",name:"Stefanel",shop:"clothes"}},"shop/clothes|Steps":{countryCodes:["nl"],tags:{brand:"Steps",name:"Steps",shop:"clothes"}},"shop/clothes|Stitches":{countryCodes:["ca"],tags:{brand:"Stitches","brand:wikidata":"Q7617652","brand:wikipedia":"en:Stitches (store)",name:"Stitches",shop:"clothes"}},"shop/clothes|Stradivarius":{tags:{brand:"Stradivarius","brand:wikidata":"Q3322945","brand:wikipedia":"en:Stradivarius (clothing brand)",name:"Stradivarius",shop:"clothes"}},"shop/clothes|Street One":{countryCodes:["at","be","ch","de","dk","nl"],tags:{brand:"Street One","brand:wikidata":"Q61997265",name:"Street One",shop:"clothes"}},"shop/clothes|Suburbia":{countryCodes:["mx"],tags:{brand:"Suburbia","brand:wikidata":"Q6134992","brand:wikipedia":"en:Suburbia (department store)",name:"Suburbia",shop:"clothes"}},"shop/clothes|Superdry":{tags:{brand:"Superdry","brand:wikidata":"Q1684445","brand:wikipedia":"en:Superdry",name:"Superdry",shop:"clothes"}},"shop/clothes|Suzy Shier":{countryCodes:["ca"],tags:{brand:"Suzy Shier","brand:wikidata":"Q65464976",clothes:"women",name:"Suzy Shier",shop:"clothes"}},"shop/clothes|T.M.Lewin":{tags:{brand:"T.M.Lewin","brand:wikidata":"Q16933755","brand:wikipedia":"en:T. M. Lewin",name:"T.M.Lewin",shop:"clothes"}},"shop/clothes|Takko":{countryCodes:["at","cz","de","hu","nl"],matchNames:["takko fashion"],tags:{brand:"Takko","brand:wikidata":"Q1371302","brand:wikipedia":"de:Takko",name:"Takko",shop:"clothes"}},"shop/clothes|Talbots":{countryCodes:["ca","us"],tags:{brand:"Talbots","brand:wikidata":"Q7679064","brand:wikipedia":"en:Talbots",name:"Talbots",shop:"clothes"}},"shop/clothes|Tally Weijl":{tags:{brand:"Tally Weijl","brand:wikidata":"Q689695","brand:wikipedia":"en:Tally Weijl",name:"Tally Weijl",shop:"clothes"}},"shop/clothes|Tati":{countryCodes:["dz","fr"],tags:{brand:"Tati","brand:wikidata":"Q3516026","brand:wikipedia":"fr:Tati (entreprise)",name:"Tati",shop:"clothes"}},"shop/clothes|Ted Baker":{tags:{brand:"Ted Baker","brand:wikidata":"Q2913458","brand:wikipedia":"en:Ted Baker",name:"Ted Baker",shop:"clothes"}},"shop/clothes|Terranova":{tags:{brand:"Terranova",name:"Terranova",shop:"clothes"}},"shop/clothes|Tezenis":{tags:{brand:"Tezenis","brand:wikidata":"Q28056374",name:"Tezenis",shop:"clothes"}},"shop/clothes|The Children's Place":{countryCodes:["ca","us"],tags:{alt_name:"Children's Place",brand:"The Children's Place","brand:wikidata":"Q3520257","brand:wikipedia":"en:The Children's Place",name:"The Children's Place",shop:"clothes"}},"shop/clothes|The Kooples":{tags:{brand:"The Kooples","brand:wikidata":"Q3521493","brand:wikipedia":"fr:The Kooples",name:"The Kooples",shop:"clothes"}},"shop/clothes|The North Face":{tags:{alt_name:"North Face",brand:"The North Face","brand:wikidata":"Q152784","brand:wikipedia":"en:The North Face",name:"The North Face",shop:"clothes"}},"shop/clothes|The Sting":{countryCodes:["be","de","gb","nl"],tags:{brand:"The Sting","brand:wikidata":"Q2518794","brand:wikipedia":"nl:The Sting Companies",name:"The Sting",shop:"clothes"}},"shop/clothes|The Walking Company":{tags:{alt_name:"Walking Company",brand:"The Walking Company","brand:wikidata":"Q30716262","brand:wikipedia":"en:The Walking Company",name:"The Walking Company",shop:"clothes"}},"shop/clothes|Thyme Maternity":{countryCodes:["ca"],tags:{brand:"Thyme Maternity","brand:wikidata":"Q17033572","brand:wikipedia":"en:Thyme Maternity",clothes:"maternity",name:"Thyme Maternity",shop:"clothes"}},"shop/clothes|Tillys":{countryCodes:["us"],tags:{brand:"Tillys","brand:wikidata":"Q7802889","brand:wikipedia":"en:Tillys",clothes:"children;men;women",name:"Tillys",shop:"clothes"}},"shop/clothes|Timberland":{tags:{brand:"Timberland","brand:wikidata":"Q1539185","brand:wikipedia":"en:The Timberland Company",name:"Timberland",shop:"clothes"}},"shop/clothes|Tip Top Tailors":{countryCodes:["ca"],tags:{brand:"Tip Top Tailors","brand:wikidata":"Q7808781","brand:wikipedia":"en:Tip Top Tailors",clothes:"men",name:"Tip Top Tailors",shop:"clothes"}},"shop/clothes|Tom Tailor":{tags:{brand:"Tom Tailor","brand:wikidata":"Q571206","brand:wikipedia":"en:Tom Tailor",name:"Tom Tailor",shop:"clothes"}},"shop/clothes|Tommy Bahama":{countryCodes:["ca","us"],tags:{brand:"Tommy Bahama","brand:wikidata":"Q3531299","brand:wikipedia":"en:Tommy Bahama",name:"Tommy Bahama",shop:"clothes"}},"shop/clothes|Tommy Hilfiger":{tags:{brand:"Tommy Hilfiger","brand:wikidata":"Q634881","brand:wikipedia":"en:Tommy Hilfiger (company)",name:"Tommy Hilfiger",shop:"clothes"}},"shop/clothes|Top Secret":{countryCodes:["fr","pl","ru"],tags:{brand:"Top Secret",name:"Top Secret",shop:"clothes"}},"shop/clothes|Topman":{tags:{brand:"Topman","brand:wikidata":"Q1090880","brand:wikipedia":"en:Topman",clothes:"men",name:"Topman",shop:"clothes"}},"shop/clothes|Topshop":{nomatch:["amenity/fuel|Top"],tags:{brand:"Topshop","brand:wikidata":"Q1893576","brand:wikipedia":"en:Topshop",clothes:"women",name:"Topshop",shop:"clothes"}},"shop/clothes|Torrid":{countryCodes:["us"],tags:{brand:"Torrid","brand:wikidata":"Q7827120","brand:wikipedia":"en:Torrid (clothing retailer)",name:"Torrid",shop:"clothes"}},"shop/clothes|Tory Burch":{countryCodes:["us"],tags:{brand:"Tory Burch","brand:wikidata":"Q19988222","brand:wikipedia":"en:Tory Burch (company)",name:"Tory Burch",shop:"clothes"}},"shop/clothes|Triumph":{tags:{brand:"Triumph","brand:wikidata":"Q671216","brand:wikipedia":"en:Triumph International",name:"Triumph",shop:"clothes"}},"shop/clothes|Truworths":{countryCodes:["za"],tags:{brand:"Truworths","brand:wikidata":"Q24233998","brand:wikipedia":"en:Truworths",name:"Truworths",shop:"clothes"}},"shop/clothes|UNTUCKit":{countryCodes:["ca","us"],tags:{brand:"UNTUCKit","brand:wikidata":"Q28207006","brand:wikipedia":"en:Untuckit",name:"UNTUCKit",shop:"clothes"}},"shop/clothes|USC":{countryCodes:["gb","ie"],tags:{brand:"USC","brand:wikidata":"Q7866331","brand:wikipedia":"en:USC (clothing retailer)",name:"USC",shop:"clothes"}},"shop/clothes|Ulla Popken":{countryCodes:["at","be","ch","de","fr","nl"],tags:{brand:"Ulla Popken","brand:wikidata":"Q2475146","brand:wikipedia":"en:Ulla Popken",name:"Ulla Popken",shop:"clothes"}},"shop/clothes|Under Armour":{matchNames:["under armor"],tags:{brand:"Under Armour","brand:wikidata":"Q2031485","brand:wikipedia":"en:Under Armour",clothes:"men;women",name:"Under Armour",shop:"clothes"}},"shop/clothes|Undiz":{tags:{brand:"Undiz",name:"Undiz",shop:"clothes"}},"shop/clothes|Uniqlo":{tags:{brand:"Uniqlo","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"Uniqlo",shop:"clothes"}},"shop/clothes|United Colors of Benetton":{tags:{brand:"United Colors of Benetton","brand:wikidata":"Q817139","brand:wikipedia":"en:Benetton Group",name:"United Colors of Benetton",shop:"clothes",short_name:"Benetton"}},"shop/clothes|Urban Outfitters":{tags:{brand:"Urban Outfitters","brand:wikidata":"Q3552193","brand:wikipedia":"en:Urban Outfitters",name:"Urban Outfitters",shop:"clothes"}},"shop/clothes|Urban Planet":{tags:{brand:"Urban Planet",name:"Urban Planet",shop:"clothes"}},"shop/clothes|V.I.M.":{countryCodes:["us"],tags:{brand:"V.I.M.","brand:wikidata":"Q71042495",clothes:"children;men;women",name:"V.I.M.",shop:"clothes"}},"shop/clothes|Van Heusen":{tags:{brand:"Van Heusen","brand:wikidata":"Q7913397","brand:wikipedia":"en:Van Heusen",clothes:"men",name:"Van Heusen",shop:"clothes"}},"shop/clothes|Vero Moda":{tags:{brand:"Vero Moda","brand:wikidata":"Q594721","brand:wikipedia":"en:Bestseller (company)",name:"Vero Moda",shop:"clothes"}},"shop/clothes|Victoria's Secret":{tags:{brand:"Victoria's Secret","brand:wikidata":"Q332477","brand:wikipedia":"en:Victoria's Secret",clothes:"underwear;women",name:"Victoria's Secret",shop:"clothes"}},"shop/clothes|Vilebrequin":{countryCodes:["fr","it"],tags:{brand:"Vilebrequin","brand:wikidata":"Q3558391","brand:wikipedia":"en:Vilebrequin",clothes:"swimwear",name:"Vilebrequin",shop:"clothes"}},"shop/clothes|Vineyard Vines":{countryCodes:["us"],tags:{brand:"Vineyard Vines","brand:wikidata":"Q7932495","brand:wikipedia":"en:Vineyard Vines",name:"Vineyard Vines",shop:"clothes"}},"shop/clothes|Volcom":{tags:{brand:"Volcom","brand:wikidata":"Q2021416","brand:wikipedia":"en:Volcom",name:"Volcom",shop:"clothes"}},"shop/clothes|WE":{countryCodes:["be","ch","de","nl"],tags:{brand:"WE","brand:wikidata":"Q1987861","brand:wikipedia":"en:WE (clothing)",name:"WE",shop:"clothes"}},"shop/clothes|Wacoal":{tags:{brand:"Wacoal","brand:wikidata":"Q909522","brand:wikipedia":"en:Wacoal",clothes:"underwear",name:"Wacoal",shop:"clothes"}},"shop/clothes|Wallis":{countryCodes:["gb","ie"],tags:{brand:"Wallis","brand:wikidata":"Q7963123","brand:wikipedia":"en:Wallis (retailer)",name:"Wallis",shop:"clothes"}},"shop/clothes|Warehouse":{countryCodes:["gb"],tags:{brand:"Warehouse","brand:wikidata":"Q28135370",name:"Warehouse",shop:"clothes"}},"shop/clothes|Wellensteyn":{tags:{brand:"Wellensteyn",name:"Wellensteyn",shop:"clothes"}},"shop/clothes|West 49":{countryCodes:["ca"],tags:{brand:"West 49","brand:wikidata":"Q7984218","brand:wikipedia":"en:West 49",name:"West 49",shop:"clothes"}},"shop/clothes|White House Black Market":{countryCodes:["ca","us"],matchNames:["white house | black market"],tags:{brand:"White House Black Market","brand:wikidata":"Q7994858","brand:wikipedia":"en:White House Black Market",name:"White House Black Market",shop:"clothes"}},"shop/clothes|White Stuff":{countryCodes:["de","dk","gb","gg"],tags:{brand:"White Stuff","brand:wikidata":"Q7995442","brand:wikipedia":"en:White Stuff Clothing",name:"White Stuff",shop:"clothes"}},"shop/clothes|Wibra":{countryCodes:["be","nl"],tags:{brand:"Wibra","brand:wikidata":"Q943405","brand:wikipedia":"en:Wibra",name:"Wibra",shop:"clothes"}},"shop/clothes|Wilsons Leather":{countryCodes:["ca","us"],tags:{brand:"Wilsons Leather","brand:wikidata":"Q8023296","brand:wikipedia":"en:Wilsons Leather",clothes:"men;women",name:"Wilsons Leather",shop:"clothes"}},"shop/clothes|Windsor":{countryCodes:["us"],tags:{brand:"Windsor","brand:wikidata":"Q72981668",clothes:"women",name:"Windsor",shop:"clothes"}},"shop/clothes|Winners":{countryCodes:["ca","es"],tags:{brand:"Winners","brand:wikidata":"Q845257","brand:wikipedia":"en:Winners",name:"Winners",shop:"clothes"}},"shop/clothes|Wolford":{countryCodes:["at","de","fr","gb","it","nl"],tags:{brand:"Wolford","brand:wikidata":"Q431607","brand:wikipedia":"en:Wolford",name:"Wolford",shop:"clothes"}},"shop/clothes|Women'secret":{matchNames:["women's secret"],tags:{brand:"Women'secret","brand:wikidata":"Q16648226","brand:wikipedia":"es:Women'secret",clothes:"underwear;women",name:"Women'secret",shop:"clothes"}},"shop/clothes|Woolworths":{countryCodes:["za"],nomatch:["shop/supermarket|Woolworths"],tags:{brand:"Woolworths","brand:wikidata":"Q8033997","brand:wikipedia":"en:Woolworths Holdings Limited",name:"Woolworths",shop:"clothes"}},"shop/clothes|XIOS":{countryCodes:["us"],tags:{brand:"XIOS","brand:wikidata":"Q66149584",clothes:"men",name:"XIOS",shop:"clothes"}},"shop/clothes|XXI Forever":{countryCodes:["us"],tags:{brand:"Forever 21","brand:wikidata":"Q1060537","brand:wikipedia":"en:Forever 21",name:"XXI Forever",shop:"clothes"}},"shop/clothes|Yamamay":{countryCodes:["es","it"],tags:{brand:"Yamamay","brand:wikidata":"Q2599214","brand:wikipedia":"it:Yamamay",name:"Yamamay",shop:"clothes"}},"shop/clothes|Z":{nomatch:["amenity/fuel|Z"],tags:{brand:"Z",clothes:"babies;children",name:"Z",shop:"clothes"}},"shop/clothes|Zara":{tags:{brand:"Zara","brand:wikidata":"Q147662","brand:wikipedia":"en:Zara (retailer)",name:"Zara",shop:"clothes"}},"shop/clothes|Zeeman":{countryCodes:["be","de","fr","lu","nl"],tags:{brand:"Zeeman","brand:wikidata":"Q184399","brand:wikipedia":"en:Zeeman (store)",name:"Zeeman",shop:"clothes"}},"shop/clothes|Zolla":{tags:{brand:"Zolla",name:"Zolla",shop:"clothes"}},"shop/clothes|Zumiez":{countryCodes:["ca","us"],tags:{brand:"Zumiez","brand:wikidata":"Q8075252","brand:wikipedia":"en:Zumiez",name:"Zumiez",shop:"clothes"}},"shop/clothes|mister*lady":{countryCodes:["at","de"],tags:{brand:"mister*lady","brand:wikidata":"Q18640136","brand:wikipedia":"de:Mister*lady",name:"mister*lady",shop:"clothes"}},"shop/clothes|rue21":{countryCodes:["us"],tags:{brand:"rue21","brand:wikidata":"Q7377762","brand:wikipedia":"en:Rue21",name:"rue21",shop:"clothes"}},"shop/clothes|s.Oliver":{countryCodes:["at","be","de","fr","hr"],tags:{brand:"s.Oliver","brand:wikidata":"Q265056","brand:wikipedia":"en:S.Oliver",name:"s.Oliver",shop:"clothes"}},"shop/clothes|Липненски":{countryCodes:["bg"],tags:{brand:"Липненски",name:"Липненски",shop:"clothes"}},"shop/clothes|Московская ярмарка":{countryCodes:["ru"],tags:{brand:"Московская ярмарка",name:"Московская ярмарка",shop:"clothes"}},"shop/clothes|Смешные цены":{countryCodes:["kz","ru"],tags:{brand:"Смешные цены",name:"Смешные цены",shop:"clothes"}},"shop/clothes|しまむら":{countryCodes:["jp"],tags:{brand:"しまむら","brand:en":"Shimamura","brand:ja":"しまむら","brand:wikidata":"Q7758173","brand:wikipedia":"ja:しまむら",name:"しまむら","name:en":"Shimamura","name:ja":"しまむら",shop:"clothes"}},"shop/clothes|はるやま":{countryCodes:["jp"],tags:{brand:"はるやま","brand:en":"Haruyama","brand:ja":"はるやま","brand:wikidata":"Q11275918","brand:wikipedia":"ja:はるやま商事",name:"はるやま","name:en":"Haruyama","name:ja":"はるやま",shop:"clothes"}},"shop/clothes|コナカ":{countryCodes:["jp"],tags:{brand:"コナカ","brand:en":"Konaka","brand:ja":"コナカ","brand:wikidata":"Q11302278","brand:wikipedia":"jp:コナカ",name:"コナカ","name:en":"Konaka","name:ja":"コナカ",shop:"clothes"}},"shop/clothes|ユニクロ":{countryCodes:["jp"],tags:{brand:"ユニクロ","brand:en":"UNIQLO","brand:ja":"ユニクロ","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"ユニクロ","name:en":"UNIQLO","name:ja":"ユニクロ",shop:"clothes"}},"shop/clothes|ライトオン":{countryCodes:["jp"],tags:{brand:"ライトオン","brand:en":"Right-on","brand:ja":"ライトオン","brand:wikidata":"Q11346416","brand:wikipedia":"ja:ライトオン",name:"ライトオン","name:en":"Right-on","name:ja":"ライトオン",shop:"clothes"}},"shop/clothes|ワークマン":{countryCodes:["jp"],tags:{brand:"ワークマン","brand:en":"Workman","brand:ja":"ワークマン","brand:wikidata":"Q11351660","brand:wikipedia":"ja:ワークマン",name:"ワークマン","name:en":"Workman","name:ja":"ワークマン",shop:"clothes"}},"shop/clothes|洋服の青山":{countryCodes:["jp"],tags:{brand:"洋服の青山","brand:en":"Aoyama Tailor","brand:ja":"洋服の青山","brand:wikidata":"Q11661241","brand:wikipedia":"ja:青山商事",name:"洋服の青山","name:en":"Aoyama Tailor","name:ja":"洋服の青山",shop:"clothes"}},"shop/coffee|Nespresso":{tags:{brand:"Nespresso","brand:wikidata":"Q301301","brand:wikipedia":"en:Nespresso",name:"Nespresso",shop:"coffee"}},"shop/coffee|Tchibo":{countryCodes:["at","ch","cz","de","pl","sk"],matchTags:["shop/convenience"],tags:{brand:"Tchibo","brand:wikidata":"Q564213","brand:wikipedia":"de:Tchibo",name:"Tchibo",shop:"coffee"}},"shop/computer|DNS":{countryCodes:["ru","ua"],tags:{alt_name:"ДНС",brand:"DNS","brand:en":"DNS","brand:ru":"ДНС","brand:wikidata":"Q4036922","brand:wikipedia":"ru:DNS (компания)",name:"DNS","name:en":"DNS","name:ru":"ДНС",shop:"computer"}},"shop/computer|PCデポ":{countryCodes:["jp"],matchNames:["pc depot","ピーシーデポ"],tags:{brand:"PCデポ","brand:en":"PC Depot","brand:ja":"PCデポ","brand:wikidata":"Q11331723","brand:wikipedia":"ja:ピーシーデポコーポレーション",name:"PCデポ","name:en":"PC Depot","name:ja":"PCデポ",shop:"computer"}},"shop/computer|じゃんぱら":{countryCodes:["jp"],tags:{brand:"じゃんぱら","brand:en":"Janpara","brand:ja":"じゃんぱら","brand:wikidata":"Q11306198","brand:wikipedia":"ja:じゃんぱら",name:"じゃんぱら","name:en":"Janpara","name:ja":"じゃんぱら",shop:"computer"}},"shop/confectionery|Adyar Ananda Bhavan":{countryCodes:["in"],matchTags:["amenity/restaurant"],tags:{brand:"Adyar Ananda Bhavan","brand:wikidata":"Q15178238","brand:wikipedia":"en:Adyar Ananda Bhavan",name:"Adyar Ananda Bhavan",shop:"confectionery"}},"shop/confectionery|Hemmakvall":{countryCodes:["se"],tags:{brand:"Hemmakväll","brand:wikidata":"Q10521791","brand:wikipedia":"sv:Hemmakväll",name:"Hemmakväll",shop:"confectionery"}},"shop/confectionery|Hotel Chocolat":{countryCodes:["gb"],tags:{brand:"Hotel Chocolat","brand:wikidata":"Q5911369","brand:wikipedia":"en:Hotel Chocolat",name:"Hotel Chocolat",shop:"confectionery"}},"shop/confectionery|Hussel":{countryCodes:["at","de"],tags:{brand:"Hussel","brand:wikidata":"Q17123688","brand:wikipedia":"de:Hussel",name:"Hussel",shop:"confectionery"}},"shop/confectionery|Jamin":{countryCodes:["nl"],tags:{brand:"Jamin","brand:wikidata":"Q2291848","brand:wikipedia":"nl:Jamin",name:"Jamin",shop:"confectionery"}},"shop/confectionery|Kilwins":{countryCodes:["us"],matchTags:["amenity/ice_cream"],tags:{brand:"Kilwins","brand:wikidata":"Q38250832","brand:wikipedia":"en:Kilwins",cuisine:"chocolate;ice_cream;popcorn",name:"Kilwins",shop:"confectionery"}},"shop/confectionery|Rocky Mountain Chocolate Factory":{countryCodes:["ca","us"],tags:{brand:"Rocky Mountain Chocolate Factory","brand:wikidata":"Q7355878","brand:wikipedia":"en:Rocky Mountain Chocolate Factory",name:"Rocky Mountain Chocolate Factory",shop:"confectionery"}},"shop/confectionery|See's Candies":{countryCodes:["us"],matchNames:["sees candy"],tags:{brand:"See's Candies","brand:wikidata":"Q2103510","brand:wikipedia":"en:See's Candies",name:"See's Candies",shop:"confectionery"}},"shop/confectionery|T. SN":{countryCodes:["ec"],tags:{brand:"T. SN",name:"T. SN",shop:"confectionery"}},"shop/confectionery|Thorntons":{countryCodes:["gb"],tags:{brand:"Thorntons","brand:wikidata":"Q683102","brand:wikipedia":"en:Thorntons",name:"Thorntons",shop:"confectionery"}},"shop/confectionery|Вацак":{countryCodes:["ua"],tags:{brand:"Вацак","brand:wikidata":"Q30966576","brand:wikipedia":"uk:Кондитерський Дім «Вацак»",name:"Вацак",shop:"confectionery"}},"shop/confectionery|Лакомка":{tags:{brand:"Лакомка",name:"Лакомка",shop:"confectionery"}},"shop/confectionery|シャトレーゼ":{countryCodes:["jp"],tags:{brand:"シャトレーゼ","brand:en":"Chateraise","brand:ja":"シャトレーゼ","brand:wikidata":"Q11307696","brand:wikipedia":"ja:シャトレーゼ",name:"シャトレーゼ","name:en":"Chateraise","name:ja":"シャトレーゼ",shop:"confectionery"}},"shop/confectionery|不二家":{countryCodes:["jp"],tags:{brand:"不二家","brand:en":"Fujiya","brand:ja":"不二家","brand:wikidata":"Q858452","brand:wikipedia":"ja:不二家",name:"不二家","name:en":"Fujiya","name:ja":"不二家",shop:"confectionery"}},"shop/convenience|10-11":{countryCodes:["is"],tags:{brand:"10-11","brand:wikidata":"Q65336720","brand:wikipedia":"is:10-11",name:"10-11",shop:"convenience"}},"shop/convenience|1st Stop":{countryCodes:["us"],matchNames:["first stop"],tags:{brand:"1st Stop","brand:wikidata":"Q65706152",name:"1st Stop",shop:"convenience"}},"shop/convenience|3COINS":{countryCodes:["jp"],matchNames:["スリーコインズ"],tags:{alt_name:"スリーコインズ",brand:"3COINS","brand:wikidata":"Q60997353","brand:wikipedia":"ja:3COINS",name:"3COINS",shop:"convenience"}},"shop/convenience|7-Eleven":{matchNames:["7-11","seven eleven"],matchTags:["shop/supermarket"],nomatch:["amenity/fuel|7-Eleven"],tags:{brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven",shop:"convenience"}},"shop/convenience|759 Store":{countryCodes:["hk"],tags:{brand:"759 Store","brand:wikidata":"Q10846179","brand:wikipedia":"en:759 Store",name:"759 Store",shop:"convenience"}},"shop/convenience|76":{nomatch:["amenity/fuel|76"],tags:{brand:"76","brand:wikidata":"Q1658320","brand:wikipedia":"en:76 (gas station)",name:"76",shop:"convenience"}},"shop/convenience|8 à Huit":{countryCodes:["fr"],nomatch:["amenity/fuel|8 à Huit","shop/supermarket|8 à Huit"],tags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit",shop:"convenience"}},"shop/convenience|99 Speedmart":{countryCodes:["br","my","us"],tags:{brand:"99 Speedmart","brand:wikidata":"Q62075061",name:"99 Speedmart",shop:"convenience"}},"shop/convenience|ABC~(Hawaii)":{countryCodes:["us"],matchNames:["abc stores"],nomatch:["amenity/fuel|ABC"],tags:{brand:"ABC","brand:wikidata":"Q4650251","brand:wikipedia":"en:ABC Stores (Hawaii)",name:"ABC",shop:"convenience"}},"shop/convenience|Aibė":{countryCodes:["lt"],tags:{brand:"Aibė","brand:wikidata":"Q1022952","brand:wikipedia":"de:Aibė",name:"Aibė",shop:"convenience"}},"shop/convenience|Albert Heijn to go":{countryCodes:["nl"],tags:{brand:"Albert Heijn to go","brand:wikidata":"Q77971185","brand:wikipedia":"en:Albert Heijn",name:"Albert Heijn to go",official_name:"AH to go",shop:"convenience"}},"shop/convenience|Alepa":{countryCodes:["fi"],tags:{brand:"Alepa","brand:wikidata":"Q4716167","brand:wikipedia":"fi:Alepa",name:"Alepa",shop:"convenience"}},"shop/convenience|Alfamidi":{countryCodes:["id"],tags:{brand:"Alfamidi","brand:wikidata":"Q12471462","brand:wikipedia":"id:Alfamidi",name:"Alfamidi",shop:"convenience"}},"shop/convenience|Allsup's":{countryCodes:["us"],tags:{brand:"Allsup's","brand:wikidata":"Q4733292","brand:wikipedia":"en:Allsup's",name:"Allsup's",shop:"convenience"}},"shop/convenience|AmeriStop":{countryCodes:["us"],tags:{brand:"AmeriStop","brand:wikidata":"Q66048258",name:"AmeriStop",shop:"convenience"}},"shop/convenience|Amoco":{countryCodes:["us"],nomatch:["amenity/fuel|Amoco"],tags:{brand:"Amoco","brand:wikidata":"Q465952","brand:wikipedia":"en:Amoco",name:"Amoco",shop:"convenience"}},"shop/convenience|Aral":{countryCodes:["de"],matchNames:["aral tankstelle"],matchTags:["shop/kiosk"],nomatch:["amenity/fuel|Aral"],tags:{brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral",shop:"convenience"}},"shop/convenience|BP Shop":{countryCodes:["au","ch","fr","gb","us"],nomatch:["amenity/fuel|BP"],tags:{brand:"BP Shop","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP Shop",shop:"convenience"}},"shop/convenience|Best-one":{countryCodes:["gb"],tags:{brand:"Best-one","brand:wikidata":"Q4896532","brand:wikipedia":"en:Best-one",name:"Best-one",shop:"convenience"}},"shop/convenience|Bonjour":{tags:{brand:"Bonjour",name:"Bonjour",shop:"convenience"}},"shop/convenience|Buc-ee's":{countryCodes:["us"],tags:{brand:"Buc-ee's","brand:wikidata":"Q4982335","brand:wikipedia":"en:Buc-ee's",name:"Buc-ee's",shop:"convenience"}},"shop/convenience|Budgens":{nomatch:["shop/supermarket|Budgens"],tags:{brand:"Budgens","brand:wikidata":"Q4985016","brand:wikipedia":"en:Budgens",name:"Budgens",shop:"convenience"}},"shop/convenience|CBA":{nomatch:["shop/supermarket|CBA"],tags:{brand:"CBA","brand:wikidata":"Q779845","brand:wikipedia":"en:CBA (food retail)",name:"CBA",shop:"convenience"}},"shop/convenience|COOP Jednota":{countryCodes:["cz","sk"],matchNames:["jednota"],nomatch:["shop/supermarket|COOP Jednota"],tags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"convenience"}},"shop/convenience|CU":{countryCodes:["kr"],tags:{brand:"CU","brand:wikidata":"Q12580836","brand:wikipedia":"ko:CU (편의점)",name:"CU",shop:"convenience"}},"shop/convenience|Carrefour Express":{matchTags:["shop/supermarket"],nomatch:["amenity/fuel|Carrefour","shop/supermarket|Carrefour"],tags:{brand:"Carrefour Express","brand:wikidata":"Q2940190","brand:wikipedia":"fr:Carrefour Express",name:"Carrefour Express",shop:"convenience"}},"shop/convenience|Casey's General Store":{nomatch:["amenity/fuel|Casey's General Store"],tags:{brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store",shop:"convenience"}},"shop/convenience|Casino":{tags:{brand:"Casino",name:"Casino",shop:"convenience"}},"shop/convenience|Casino Shop":{countryCodes:["fr"],tags:{brand:"Casino Shop",name:"Casino Shop",shop:"convenience"}},"shop/convenience|Centra":{countryCodes:["gb","ie"],tags:{brand:"Centra","brand:wikidata":"Q747678","brand:wikipedia":"en:Centra",name:"Centra",shop:"convenience"}},"shop/convenience|Central Convenience Store":{tags:{brand:"Central Convenience Store",name:"Central Convenience Store",shop:"convenience"}},"shop/convenience|Chata Polska":{nomatch:["shop/supermarket|Chata Polska"],tags:{brand:"Chata Polska","brand:wikidata":"Q61994406",name:"Chata Polska",shop:"convenience"}},"shop/convenience|Cheers":{countryCodes:["sg","vn"],tags:{brand:"Cheers","brand:wikidata":"Q64154066",name:"Cheers",opening_hours:"24/7",shop:"convenience"}},"shop/convenience|Chevron":{nomatch:["amenity/fuel|Chevron"],tags:{brand:"Chevron","brand:wikidata":"Q319642","brand:wikipedia":"en:Chevron Corporation",name:"Chevron",shop:"convenience"}},"shop/convenience|Circle K":{matchNames:["ok","ok-mart"],nomatch:["amenity/fuel|Circle K"],tags:{brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K",shop:"convenience"}},"shop/convenience|Citgo":{nomatch:["amenity/fuel|Citgo"],tags:{brand:"Citgo","brand:wikidata":"Q2974437","brand:wikipedia":"en:Citgo",name:"Citgo",shop:"convenience"}},"shop/convenience|Clark's Pump-N-Shop":{countryCodes:["us"],tags:{brand:"Clark's Pump-N-Shop","brand:wikidata":"Q65118218",name:"Clark's Pump-N-Shop",shop:"convenience"}},"shop/convenience|Co-op~(Canada)":{countryCodes:["ca"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)","shop/supermarket|The Co-operative Food~(UK)"],tags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"convenience"}},"shop/convenience|CocciMarket":{countryCodes:["fr"],tags:{brand:"CocciMarket",name:"CocciMarket",shop:"convenience"}},"shop/convenience|Coles Express":{nomatch:["amenity/fuel|Coles Express","shop/books|Coles","shop/supermarket|Coles"],tags:{brand:"Coles Express","brand:wikidata":"Q5144653","brand:wikipedia":"en:Coles Express",name:"Coles Express",shop:"convenience"}},"shop/convenience|Coop Pronto":{countryCodes:["ch","li"],nomatch:["amenity/cafe|Pronto"],tags:{brand:"Coop Pronto","brand:wikidata":"Q1129777","brand:wikipedia":"de:Coop Mineraloel",name:"Coop Pronto",shop:"convenience"}},"shop/convenience|Coop~(Schweiz)":{countryCodes:["ch"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op~(Canada)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)","shop/supermarket|The Co-operative Food~(UK)"],tags:{brand:"Coop","brand:wikidata":"Q432564","brand:wikipedia":"de:Coop (Schweiz)",name:"Coop",shop:"convenience"}},"shop/convenience|Costcutter":{nomatch:["shop/supermarket|Costcutter"],tags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"convenience"}},"shop/convenience|Couche-Tard":{nomatch:["amenity/fuel|Couche-Tard"],tags:{brand:"Couche-Tard","brand:wikidata":"Q2836957","brand:wikipedia":"en:Alimentation Couche-Tard",name:"Couche-Tard",shop:"convenience"}},"shop/convenience|Cruizers":{countryCodes:["us"],tags:{brand:"Cruizers","brand:wikidata":"Q66134801",name:"Cruizers",shop:"convenience"}},"shop/convenience|Cumberland Farms":{nomatch:["amenity/fuel|Cumberland Farms"],tags:{brand:"Cumberland Farms","brand:wikidata":"Q1143685","brand:wikipedia":"en:Cumberland Farms",name:"Cumberland Farms",shop:"convenience"}},"shop/convenience|Daisy Mart":{countryCodes:["ca"],tags:{brand:"Daisy Mart","brand:wikidata":"Q61994934",name:"Daisy Mart",shop:"convenience"}},"shop/convenience|Dari Mart":{countryCodes:["us"],tags:{brand:"Dari Mart","brand:wikidata":"Q5222675","brand:wikipedia":"en:Dari Mart",name:"Dari Mart",shop:"convenience"}},"shop/convenience|Delikatesy Centrum":{countryCodes:["pl"],nomatch:["shop/supermarket|Delikatesy Centrum"],tags:{brand:"Delikatesy Centrum","brand:wikidata":"Q11693824","brand:wikipedia":"pl:Delikatesy Centrum",name:"Delikatesy Centrum",shop:"convenience"}},"shop/convenience|Express":{nomatch:["shop/clothes|Express"],tags:{brand:"Express",name:"Express",shop:"convenience"}},"shop/convenience|ExtraMile":{countryCodes:["us"],tags:{brand:"ExtraMile","brand:wikidata":"Q64224605",name:"ExtraMile",shop:"convenience"}},"shop/convenience|FamilyMart":{tags:{brand:"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"FamilyMart",shop:"convenience"}},"shop/convenience|Food Mart":{tags:{brand:"Food Mart",name:"Food Mart",shop:"convenience"}},"shop/convenience|Four Square":{countryCodes:["nz"],tags:{brand:"Four Square","brand:wikidata":"Q5475558","brand:wikipedia":"en:Four Square (supermarket)",name:"Four Square",shop:"convenience"}},"shop/convenience|Franprix":{countryCodes:["fr"],matchTags:["shop/supermarket"],tags:{brand:"Franprix","brand:wikidata":"Q2420096","brand:wikipedia":"fr:Franprix",name:"Franprix",shop:"convenience"}},"shop/convenience|Fresh":{tags:{brand:"Fresh",name:"Fresh",shop:"convenience"}},"shop/convenience|Freshmarket":{countryCodes:["pl"],tags:{brand:"Freshmarket","brand:wikidata":"Q16546326","brand:wikipedia":"pl:Freshmarket",name:"Freshmarket",shop:"convenience"}},"shop/convenience|GS25":{countryCodes:["kr"],matchTags:["shop/supermarket"],tags:{brand:"GS25","brand:wikidata":"Q624041","brand:wikipedia":"ko:GS25",name:"GS25",shop:"convenience"}},"shop/convenience|Groszek":{countryCodes:["pl"],nomatch:["shop/supermarket|Groszek"],tags:{brand:"Groszek","brand:wikidata":"Q9280965","brand:wikipedia":"pl:Groszek (sieć sklepów)",name:"Groszek",shop:"convenience"}},"shop/convenience|Hasty Market":{countryCodes:["ca"],tags:{brand:"Hasty Market","brand:wikidata":"Q58022603",name:"Hasty Market",shop:"convenience"}},"shop/convenience|Holiday":{countryCodes:["us"],nomatch:["amenity/fuel|Holiday"],tags:{brand:"Holiday","brand:wikidata":"Q5880490","brand:wikipedia":"en:Holiday Stationstores",name:"Holiday",shop:"convenience"}},"shop/convenience|Hruška":{countryCodes:["cz"],nomatch:["shop/supermarket|Hruška"],tags:{brand:"Hruška",name:"Hruška",shop:"convenience"}},"shop/convenience|Huck's Food & Fuel":{countryCodes:["us"],nomatch:["amenity/fuel|Huck's Food & Fuel"],tags:{brand:"Huck's Food & Fuel","brand:wikidata":"Q56276328","brand:wikipedia":"en:Huck's Food & Fuel",name:"Huck's Food & Fuel",shop:"convenience",short_name:"Huck's"}},"shop/convenience|Hudson":{nomatch:["shop/newsagent|Hudson News"],tags:{brand:"Hudson","brand:wikidata":"Q5928682","brand:wikipedia":"en:Hudson Group",name:"Hudson",shop:"convenience"}},"shop/convenience|Hursts":{countryCodes:["gb"],tags:{brand:"Hursts","brand:wikidata":"Q80975681",name:"Hursts",shop:"convenience"}},"shop/convenience|Husky":{countryCodes:["ca"],nomatch:["amenity/fuel|Husky","amenity/restaurant|Husky House"],tags:{brand:"Husky","brand:wikidata":"Q702049","brand:wikipedia":"en:Husky Energy",name:"Husky",shop:"convenience"}},"shop/convenience|Indomaret":{countryCodes:["id"],matchTags:["shop/supermarket"],tags:{brand:"Indomaret","brand:wikidata":"Q4262825","brand:wikipedia":"en:Indomaret",name:"Indomaret",shop:"convenience"}},"shop/convenience|Indomart":{countryCodes:["id"],tags:{brand:"Indomart",name:"Indomart",shop:"convenience"}},"shop/convenience|Intermarché Contact":{countryCodes:["fr"],matchTags:["shop/supermarket"],tags:{brand:"Intermarché Contact","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Contact",shop:"convenience"}},"shop/convenience|Irving":{countryCodes:["ca","us"],nomatch:["amenity/fuel|Irving"],tags:{brand:"Irving","brand:wikidata":"Q1673286","brand:wikipedia":"en:Irving Oil",name:"Irving",shop:"convenience"}},"shop/convenience|Jacksons":{countryCodes:["us"],tags:{brand:"Jacksons","brand:wikidata":"Q64617393",name:"Jacksons",shop:"convenience"}},"shop/convenience|Jiffy":{tags:{brand:"Jiffy",name:"Jiffy",shop:"convenience"}},"shop/convenience|Joker":{countryCodes:["no"],matchTags:["shop/supermarket"],tags:{brand:"Joker","brand:wikidata":"Q716328","brand:wikipedia":"en:Joker (store)",name:"Joker",shop:"convenience"}},"shop/convenience|K-Market":{countryCodes:["fi"],matchTags:["shop/supermarket"],tags:{brand:"K-Market","brand:wikidata":"Q11868562","brand:wikipedia":"fi:K-Market",name:"K-Market",shop:"convenience"}},"shop/convenience|Kangaroo Express":{countryCodes:["us"],nomatch:["amenity/fuel|Kangaroo Express"],tags:{brand:"Kangaroo Express","brand:wikidata":"Q61747408",name:"Kangaroo Express",shop:"convenience",short_name:"Kangaroo"}},"shop/convenience|Konzum~(Balkans)":{countryCodes:["ba","hr","rs"],nomatch:["shop/convenience|Konzum~(Czechia)","shop/supermarket|Konzum~(Balkans)","shop/supermarket|Konzum~(Czechia)"],tags:{brand:"Konzum","brand:wikidata":"Q518563","brand:wikipedia":"hr:Konzum",name:"Konzum",shop:"convenience"}},"shop/convenience|Konzum~(Czechia)":{countryCodes:["cz","sk"],nomatch:["shop/convenience|Konzum~(Balkans)","shop/supermarket|Konzum~(Balkans)","shop/supermarket|Konzum~(Czechia)"],tags:{brand:"Konzum",name:"Konzum",shop:"convenience"}},"shop/convenience|Kum & Go":{nomatch:["amenity/fuel|Kum & Go"],tags:{brand:"Kum & Go","brand:wikidata":"Q6443340","brand:wikipedia":"en:Kum & Go",name:"Kum & Go",shop:"convenience"}},"shop/convenience|Kwik Shop":{countryCodes:["us"],tags:{brand:"Kwik Shop","brand:wikidata":"Q6450417","brand:wikipedia":"en:Kwik Shop",name:"Kwik Shop",shop:"convenience"}},"shop/convenience|Kwik Trip":{countryCodes:["us"],nomatch:["amenity/fuel|Kwik Trip"],tags:{brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip",shop:"convenience"}},"shop/convenience|La Vie Claire":{countryCodes:["fr"],nomatch:["shop/supermarket|La Vie Claire"],tags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"fr:La Vie Claire",name:"La Vie Claire",organic:"only",shop:"convenience"}},"shop/convenience|Lawson":{tags:{brand:"Lawson","brand:wikidata":"Q1557223","brand:wikipedia":"en:Lawson (store)",name:"Lawson",shop:"convenience"}},"shop/convenience|Lewiatan":{countryCodes:["pl"],nomatch:["shop/supermarket|Lewiatan"],tags:{brand:"Lewiatan","brand:wikidata":"Q11755396","brand:wikipedia":"pl:Lewiatan (sieć handlowa)",name:"Lewiatan",shop:"convenience"}},"shop/convenience|Lifestyle Express":{countryCodes:["gb"],tags:{brand:"Lifestyle Express","brand:wikidata":"Q61994869",name:"Lifestyle Express",shop:"convenience"}},"shop/convenience|Little Waitrose":{countryCodes:["gb","je"],nomatch:["shop/convenience|Waitrose","shop/supermarket|Waitrose"],tags:{brand:"Little Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose & Partners",name:"Little Waitrose",shop:"convenience"}},"shop/convenience|Livio":{tags:{brand:"Livio",name:"Livio",shop:"convenience"}},"shop/convenience|Loaf 'N Jug":{countryCodes:["us"],tags:{brand:"Loaf 'N Jug","brand:wikidata":"Q6663398","brand:wikipedia":"en:Loaf 'N Jug",name:"Loaf 'N Jug",shop:"convenience"}},"shop/convenience|Londis~(Ireland)":{countryCodes:["ie"],nomatch:["shop/convenience|Londis~(UK)","shop/supermarket|Londis~(Ireland)","shop/supermarket|Londis~(UK)"],tags:{brand:"Londis","brand:wikidata":"Q21015800","brand:wikipedia":"en:Londis (Ireland)",name:"Londis",shop:"convenience"}},"shop/convenience|Londis~(UK)":{countryCodes:["gb"],nomatch:["shop/convenience|Londis~(Ireland)","shop/supermarket|Londis~(Ireland)","shop/supermarket|Londis~(UK)"],tags:{brand:"Londis","brand:wikidata":"Q21008564","brand:wikipedia":"en:Londis (United Kingdom)",name:"Londis",shop:"convenience"}},"shop/convenience|Lonia":{countryCodes:["hr"],tags:{brand:"Lonia",name:"Lonia",shop:"convenience"}},"shop/convenience|M&S Simply Food":{matchNames:["marks & spencer simply food"],nomatch:["shop/supermarket|M&S Simply Food"],tags:{brand:"M&S Simply Food","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Simply Food",shop:"convenience"}},"shop/convenience|METSS":{tags:{brand:"METSS",name:"METSS",shop:"convenience"}},"shop/convenience|Mac's":{countryCodes:["ca"],nomatch:["amenity/fuel|Mac's"],tags:{brand:"Mac's","brand:wikidata":"Q4043527","brand:wikipedia":"en:Mac's Convenience Stores",name:"Mac's",shop:"convenience"}},"shop/convenience|Mace~(Ireland)":{countryCodes:["ie"],nomatch:["shop/convenience|Mace~(Northern Ireland)","shop/convenience|Mace~(UK)"],tags:{brand:"Mace","brand:wikidata":"Q75236910","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"}},"shop/convenience|Mace~(Northern Ireland)":{countryCodes:["gb"],nomatch:["shop/convenience|Mace~(Ireland)","shop/convenience|Mace~(UK)"],tags:{brand:"Mace","brand:wikidata":"Q75238536","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"}},"shop/convenience|Mace~(UK)":{countryCodes:["gb"],nomatch:["shop/convenience|Mace~(Ireland)","shop/convenience|Mace~(Northern Ireland)"],tags:{brand:"Mace","brand:wikidata":"Q75240338","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"}},"shop/convenience|Maisto prekės":{tags:{brand:"Maisto prekės",name:"Maisto prekės",shop:"convenience"}},"shop/convenience|Marathon":{nomatch:["amenity/fuel|Marathon"],tags:{brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon",shop:"convenience"}},"shop/convenience|Maverik":{countryCodes:["us"],nomatch:["amenity/fuel|Maverik"],tags:{brand:"Maverik","brand:wikidata":"Q64149010","brand:wikipedia":"en:Maverik, Inc.",name:"Maverik",shop:"convenience"}},"shop/convenience|Maxikiosco":{countryCodes:["ar","uy"],tags:{brand:"Maxikiosco",name:"Maxikiosco",shop:"convenience"}},"shop/convenience|Małpka Express":{countryCodes:["pl"],tags:{brand:"Małpka Express","brand:wikidata":"Q18431946","brand:wikipedia":"pl:Małpka Express",name:"Małpka Express",shop:"convenience"}},"shop/convenience|McColl's":{countryCodes:["gb"],matchTags:["shop/newsagent"],tags:{brand:"McColl's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"McColl's",shop:"convenience"}},"shop/convenience|Mercator":{countryCodes:["ba","hr","me","rs","si"],nomatch:["shop/supermarket|Mercator"],tags:{brand:"Mercator","brand:wikidata":"Q738412","brand:wikipedia":"en:Mercator (retail)",name:"Mercator",shop:"convenience"}},"shop/convenience|Migrolino":{countryCodes:["ch"],tags:{brand:"Migrolino","brand:wikidata":"Q56745088","brand:wikipedia":"de:Migrolino",name:"Migrolino",shop:"convenience"}},"shop/convenience|Ministop":{tags:{brand:"Ministop","brand:wikidata":"Q1038929","brand:wikipedia":"en:Ministop",name:"Ministop",shop:"convenience"}},"shop/convenience|Minit Mart":{countryCodes:["us"],tags:{brand:"Minit Mart","brand:wikidata":"Q18154470","brand:wikipedia":"en:Minit Mart Foods Inc.",name:"Minit Mart",shop:"convenience"}},"shop/convenience|Mlin i pekare":{countryCodes:["hr"],tags:{brand:"Mlin i pekare",name:"Mlin i pekare",shop:"convenience"}},"shop/convenience|Mobil Mart":{nomatch:["amenity/fuel|Mobil"],tags:{brand:"Mobil Mart","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil Mart",shop:"convenience"}},"shop/convenience|MrMax":{countryCodes:["jp"],matchNames:["ミスターマックス"],tags:{alt_name:"ミスターマックス",brand:"MrMax","brand:wikidata":"Q11342034","brand:wikipedia":"ja:ミスターマックス",name:"MrMax",shop:"convenience"}},"shop/convenience|Nasz Sklep":{countryCodes:["pl"],tags:{brand:"Nasz Sklep","brand:wikidata":"Q62070369",name:"Nasz Sklep",shop:"convenience"}},"shop/convenience|Neste K":{countryCodes:["fi"],tags:{brand:"Neste K","brand:wikidata":"Q42901270","brand:wikipedia":"fi:Neste K",name:"Neste K",shop:"convenience"}},"shop/convenience|NewDays":{countryCodes:["jp"],matchNames:["newdays ミニ"],tags:{alt_name:"ニューデイズ",brand:"NewDays","brand:wikidata":"Q11234763","brand:wikipedia":"ja:NewDays",name:"NewDays",shop:"convenience"}},"shop/convenience|Nisa":{countryCodes:["gb"],tags:{brand:"Nisa","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa",shop:"convenience"}},"shop/convenience|Nisa Local":{countryCodes:["gb"],tags:{brand:"Nisa Local","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa Local",shop:"convenience"}},"shop/convenience|OK Market":{countryCodes:["cl"],tags:{brand:"OK Market","brand:wikidata":"Q6047736","brand:wikipedia":"es:OK Market",name:"OK Market",shop:"convenience"}},"shop/convenience|OK便利店":{countryCodes:["cn","hk","mo"],matchNames:["ok便利商店","ok便利店 circle k"],tags:{brand:"OK便利店","brand:en":"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"zh:OK便利店",name:"OK便利店","name:en":"Circle K",shop:"convenience"}},"shop/convenience|OK超商":{countryCodes:["tw"],tags:{brand:"OK超商","brand:en":"OK mart","brand:wikidata":"Q10851968","brand:wikipedia":"zh:OK超商",name:"OK超商","name:en":"OK mart",shop:"convenience"}},"shop/convenience|Odido":{countryCodes:["pl"],tags:{brand:"Odido",name:"Odido",shop:"convenience"}},"shop/convenience|On the Run":{tags:{brand:"On the Run","brand:wikidata":"Q16931259","brand:wikipedia":"en:On the Run (convenience store)",name:"On the Run",shop:"convenience"}},"shop/convenience|One Stop":{countryCodes:["gb"],tags:{brand:"One Stop","brand:wikidata":"Q65954217",name:"One Stop",shop:"convenience"}},"shop/convenience|Orlen":{countryCodes:["pl"],nomatch:["amenity/fuel|Orlen"],tags:{brand:"Orlen","brand:wikidata":"Q971649","brand:wikipedia":"en:PKN Orlen",name:"Orlen",shop:"convenience"}},"shop/convenience|Oxxo":{matchTags:["shop/supermarket"],nomatch:["amenity/fuel|Oxxo"],tags:{brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo",shop:"convenience"}},"shop/convenience|Panier Sympa":{tags:{brand:"Panier Sympa",name:"Panier Sympa",shop:"convenience"}},"shop/convenience|Petit Casino":{countryCodes:["fr"],matchTags:["shop/supermarket"],tags:{brand:"Petit Casino",name:"Petit Casino",shop:"convenience"}},"shop/convenience|Petro-Canada":{nomatch:["amenity/fuel|Petro-Canada"],tags:{brand:"Petro-Canada","brand:wikidata":"Q1208279","brand:wikipedia":"en:Petro-Canada",name:"Petro-Canada",shop:"convenience"}},"shop/convenience|Plaid Pantry":{countryCodes:["us"],tags:{brand:"Plaid Pantry","brand:wikidata":"Q7200591","brand:wikipedia":"en:Plaid Pantry",name:"Plaid Pantry",shop:"convenience"}},"shop/convenience|Premier":{countryCodes:["gb"],tags:{brand:"Premier","brand:wikidata":"Q7240340","brand:wikipedia":"en:Premier Stores",name:"Premier",shop:"convenience"}},"shop/convenience|Proxi":{countryCodes:["ch","fr"],matchTags:["shop/supermarket"],tags:{brand:"Proxi","brand:wikidata":"Q3408522","brand:wikipedia":"fr:Proxi",name:"Proxi",shop:"convenience"}},"shop/convenience|Proxy":{countryCodes:["fr"],tags:{brand:"Proxy",name:"Proxy",shop:"convenience"}},"shop/convenience|Quality Mart":{countryCodes:["us"],tags:{brand:"Quality Mart","brand:wikidata":"Q66134834",name:"Quality Mart",shop:"convenience"}},"shop/convenience|Quick Stop":{tags:{brand:"Quick Stop",name:"Quick Stop",shop:"convenience"}},"shop/convenience|QuickChek":{countryCodes:["us"],nomatch:["amenity/fuel|QuickChek"],tags:{brand:"QuickChek","brand:wikidata":"Q7271689","brand:wikipedia":"en:QuickChek",name:"QuickChek",shop:"convenience"}},"shop/convenience|QuikTrip":{nomatch:["amenity/fuel|QuikTrip"],tags:{brand:"QuikTrip","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QuikTrip",shop:"convenience",short_name:"QT"}},"shop/convenience|Rabat":{countryCodes:["pl"],tags:{brand:"Rabat",name:"Rabat",shop:"convenience"}},"shop/convenience|RaceTrac":{countryCodes:["us"],nomatch:["amenity/fuel|RaceTrac"],tags:{brand:"RaceTrac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"RaceTrac",shop:"convenience"}},"shop/convenience|RaceWay":{countryCodes:["us"],nomatch:["amenity/fuel|RaceWay"],tags:{brand:"RaceWay","brand:wikidata":"Q73039084",name:"RaceWay",shop:"convenience"}},"shop/convenience|Rewe To Go":{countryCodes:["de"],nomatch:["shop/supermarket|Rewe","shop/supermarket|Rewe City"],tags:{brand:"Rewe To Go","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe To Go",shop:"convenience"}},"shop/convenience|Royal Farms":{countryCodes:["us"],nomatch:["amenity/fuel|Royal Farms"],tags:{brand:"Royal Farms","brand:wikidata":"Q7374169","brand:wikipedia":"en:Royal Farms",name:"Royal Farms",shop:"convenience"}},"shop/convenience|Rutter's":{countryCodes:["us"],nomatch:["amenity/fuel|Rutter's"],tags:{brand:"Rutter's","brand:wikidata":"Q7383544","brand:wikipedia":"en:Rutter's",name:"Rutter's",shop:"convenience"}},"shop/convenience|Sainsbury's Local":{countryCodes:["gb"],matchTags:["shop/supermarket"],tags:{brand:"Sainsbury's Local","brand:wikidata":"Q13218434","brand:wikipedia":"en:Sainsbury's Local",name:"Sainsbury's Local",shop:"convenience"}},"shop/convenience|Sale":{countryCodes:["fi"],tags:{brand:"Sale","brand:wikidata":"Q11892046","brand:wikipedia":"fi:Sale",name:"Sale",shop:"convenience"}},"shop/convenience|Select":{nomatch:["shop/clothes|Select"],tags:{brand:"Select",name:"Select",shop:"convenience"}},"shop/convenience|Sheetz":{nomatch:["amenity/fuel|Sheetz"],tags:{brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz",shop:"convenience"}},"shop/convenience|Shell":{nomatch:["amenity/fuel|Shell","amenity/fuel|Shell Express"],tags:{brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell",shop:"convenience"}},"shop/convenience|Shell Select":{nomatch:["amenity/fuel|Shell","amenity/fuel|Shell Express"],tags:{brand:"Shell Select","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell Select",shop:"convenience"}},"shop/convenience|Shop & Go":{tags:{brand:"Shop & Go",name:"Shop & Go",shop:"convenience"}},"shop/convenience|Siwa":{countryCodes:["fi"],tags:{brand:"Siwa","brand:wikidata":"Q11893827","brand:wikipedia":"fi:Siwa",name:"Siwa",shop:"convenience"}},"shop/convenience|Spar":{nomatch:["shop/convenience|Spar Express","shop/supermarket|Spar"],tags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"convenience"}},"shop/convenience|Spar Express":{matchTags:["shop/supermarket"],nomatch:["shop/convenience|Spar","shop/supermarket|Spar"],tags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar Express",shop:"convenience"}},"shop/convenience|Speedway":{nomatch:["amenity/fuel|Speedway"],tags:{brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway",shop:"convenience"}},"shop/convenience|Społem":{nomatch:["shop/supermarket|Społem"],tags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"convenience"}},"shop/convenience|Star Mart":{tags:{brand:"Star Mart","brand:wikidata":"Q61994857",name:"Star Mart",shop:"convenience"}},"shop/convenience|Stewart's Shops":{countryCodes:["us"],matchNames:["stewarts"],nomatch:["amenity/fuel|Stewart's"],tags:{brand:"Stewart's Shops","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's Shops",shop:"convenience"}},"shop/convenience|Stripes":{countryCodes:["cl","us"],tags:{brand:"Stripes","brand:wikidata":"Q7624135","brand:wikipedia":"en:Stripes Convenience Stores",name:"Stripes",shop:"convenience"}},"shop/convenience|Studenac":{tags:{brand:"Studenac",name:"Studenac",shop:"convenience"}},"shop/convenience|Sunoco":{nomatch:["amenity/fuel|Sunoco"],tags:{brand:"Sunoco","brand:wikidata":"Q1423218","brand:wikipedia":"en:Sunoco",name:"Sunoco",shop:"convenience"}},"shop/convenience|Supérette":{tags:{brand:"Supérette",name:"Supérette",shop:"convenience"}},"shop/convenience|Słoneczko":{countryCodes:["pl"],tags:{brand:"Słoneczko",name:"Słoneczko",shop:"convenience"}},"shop/convenience|Tesco":{nomatch:["amenity/fuel|Tesco","shop/convenience|Tesco Express","shop/convenience|Tesco Lotus Express","shop/supermarket|Tesco","shop/supermarket|Tesco Extra","shop/supermarket|Tesco Lotus","shop/supermarket|Tesco Metro"],tags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"convenience"}},"shop/convenience|Tesco Express":{nomatch:["amenity/fuel|Tesco","shop/convenience|Tesco","shop/convenience|Tesco Lotus Express","shop/supermarket|Tesco","shop/supermarket|Tesco Extra","shop/supermarket|Tesco Lotus","shop/supermarket|Tesco Metro"],tags:{brand:"Tesco Express","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco Express",shop:"convenience"}},"shop/convenience|Tesco Lotus Express":{countryCodes:["th"],nomatch:["amenity/fuel|Tesco","shop/convenience|Tesco","shop/convenience|Tesco Express","shop/supermarket|Tesco","shop/supermarket|Tesco Extra","shop/supermarket|Tesco Lotus","shop/supermarket|Tesco Metro"],tags:{brand:"Tesco Lotus Express",name:"Tesco Lotus Express",shop:"convenience"}},"shop/convenience|Texaco":{nomatch:["amenity/fuel|Texaco"],tags:{brand:"Texaco","brand:wikidata":"Q775060","brand:wikipedia":"en:Texaco",name:"Texaco",shop:"convenience"}},"shop/convenience|The Co-operative Food~(UK)":{countryCodes:["gb"],matchNames:["coop","coop food","cooperative food","the cooperative"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)","shop/supermarket|The Co-operative Food~(UK)"],tags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"convenience"}},"shop/convenience|Thorntons":{countryCodes:["us"],nomatch:["amenity/fuel|Thorntons","shop/confectionery|Thorntons"],tags:{brand:"Thorntons","brand:wikidata":"Q7796584","brand:wikipedia":"en:Thorntons LLC",name:"Thorntons",shop:"convenience"}},"shop/convenience|Tiendita":{countryCodes:["mx"],tags:{brand:"Tiendita",name:"Tiendita",shop:"convenience"}},"shop/convenience|Tiger Mart":{tags:{brand:"Tiger Mart","brand:wikidata":"Q57643977",name:"Tiger Mart",shop:"convenience"}},"shop/convenience|Total":{nomatch:["amenity/fuel|Total"],tags:{brand:"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total",shop:"convenience"}},"shop/convenience|Turkey Hill":{nomatch:["amenity/fuel|Turkey Hill"],tags:{brand:"Turkey Hill","brand:wikidata":"Q42376970","brand:wikipedia":"en:Turkey Hill Minit Markets",name:"Turkey Hill",shop:"convenience"}},"shop/convenience|Ultramar":{nomatch:["amenity/fuel|Ultramar"],tags:{brand:"Ultramar","brand:wikidata":"Q3548078","brand:wikipedia":"en:Ultramar",name:"Ultramar",shop:"convenience"}},"shop/convenience|United":{countryCodes:["au"],matchNames:["united petroleum"],nomatch:["amenity/bank|United Bank~(Connecticut)","amenity/bank|United Bank~(West Virginia)","amenity/fuel|United"],tags:{brand:"United","brand:wikidata":"Q28224393","brand:wikipedia":"en:United Petroleum",name:"United",shop:"convenience"}},"shop/convenience|United Dairy Farmers":{countryCodes:["us"],matchTags:["amenity/ice_cream","shop/ice_cream"],nomatch:["amenity/fuel|United Dairy Farmers"],tags:{amenity:"ice_cream",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"United Dairy Farmers",shop:"convenience",short_name:"UDF"}},"shop/convenience|Utile":{countryCodes:["fr"],matchTags:["shop/supermarket"],nomatch:["amenity/fuel|Super U","shop/supermarket|Hyper U","shop/supermarket|Super U","shop/supermarket|U Express"],tags:{brand:"Utile","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Utile",shop:"convenience"}},"shop/convenience|Valero":{nomatch:["amenity/fuel|Valero"],tags:{brand:"Valero","brand:wikidata":"Q1283291","brand:wikipedia":"en:Valero Energy",name:"Valero",shop:"convenience"}},"shop/convenience|VinMart+":{countryCodes:["vn"],nomatch:["shop/supermarket|VinMart"],tags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart+",shop:"convenience"}},"shop/convenience|Vival":{countryCodes:["fr","pe"],matchTags:["shop/supermarket"],tags:{brand:"Vival","brand:wikidata":"Q7937525","brand:wikipedia":"en:Vival (shop)",name:"Vival",shop:"convenience"}},"shop/convenience|Waitrose":{countryCodes:["gb","je"],nomatch:["shop/convenience|Little Waitrose","shop/supermarket|Waitrose"],tags:{brand:"Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose & Partners",name:"Waitrose",shop:"convenience"}},"shop/convenience|Wawa":{nomatch:["amenity/fuel|Wawa"],tags:{brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa",shop:"convenience"}},"shop/convenience|Weltladen":{countryCodes:["at","ch","de"],tags:{brand:"Weltladen","brand:wikidata":"Q1640782","brand:wikipedia":"de:Weltladen",name:"Weltladen",shop:"convenience"}},"shop/convenience|Woolworths Petrol":{countryCodes:["au"],nomatch:["amenity/fuel|Woolworths Petrol"],tags:{brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol",shop:"convenience"}},"shop/convenience|abc~(Poland)":{countryCodes:["pl"],matchTags:["shop/supermarket"],nomatch:["amenity/fuel|ABC"],tags:{brand:"abc","brand:wikidata":"Q11683985","brand:wikipedia":"pl:Abc (sieć handlowa)",name:"abc",shop:"convenience"}},"shop/convenience|ampm":{tags:{brand:"ampm","brand:wikidata":"Q306960","brand:wikipedia":"en:Ampm",name:"ampm",shop:"convenience"}},"shop/convenience|miniピアゴ":{countryCodes:["jp"],matchNames:["ミニピアゴ"],tags:{brand:"miniピアゴ","brand:en":"mini Piago","brand:ja":"miniピアゴ","brand:wikidata":"Q11188499","brand:wikipedia":"ja:Miniピアゴ",name:"miniピアゴ","name:en":"mini Piago","name:ja":"miniピアゴ",shop:"convenience"}},"shop/convenience|uSmile 昆仑好客":{countryCodes:["cn"],matchNames:["usmile","usmile 便利店","昆仑好","昆仑好客"],matchTags:["shop/supermarket"],nomatch:["amenity/fuel|uSmile 昆仑好"],tags:{brand:"uSmile 昆仑好客","brand:en":"uSmile","brand:wikidata":"Q66480830","brand:zh":"昆仑好客",name:"uSmile 昆仑好客","name:en":"uSmile","name:zh":"昆仑好客",shop:"convenience"}},"shop/convenience|Żabka":{countryCodes:["pl"],tags:{brand:"Żabka","brand:wikidata":"Q2589061","brand:wikipedia":"pl:Żabka (sieć sklepów)",name:"Żabka",shop:"convenience"}},"shop/convenience|АВ Daily":{countryCodes:["ru"],tags:{brand:"АВ Daily",name:"АВ Daily",shop:"convenience"}},"shop/convenience|АТБ":{countryCodes:["ua"],tags:{brand:"АТБ",name:"АТБ",shop:"convenience"}},"shop/convenience|Абсолют":{countryCodes:["ru"],matchNames:["абсолют cash&carry"],tags:{brand:"Абсолют",name:"Абсолют",shop:"convenience"}},"shop/convenience|Авоська":{countryCodes:["ru"],tags:{brand:"Авоська",name:"Авоська",shop:"convenience"}},"shop/convenience|Агрокомплекс":{countryCodes:["ru"],tags:{brand:"Агрокомплекс",name:"Агрокомплекс",shop:"convenience"}},"shop/convenience|Ассорти-продукт":{countryCodes:["ru"],tags:{brand:"Ассорти-продукт",name:"Ассорти-продукт",shop:"convenience"}},"shop/convenience|Береке":{countryCodes:["kg","kz"],tags:{brand:"Береке",name:"Береке",shop:"convenience"}},"shop/convenience|Везунчик":{countryCodes:["ru","ua"],tags:{brand:"Везунчик",name:"Везунчик",shop:"convenience"}},"shop/convenience|Верный":{countryCodes:["ru"],tags:{brand:"Верный",name:"Верный",shop:"convenience"}},"shop/convenience|ВкусВилл":{countryCodes:["ru"],tags:{brand:"ВкусВилл","brand:wikidata":"Q57271676","brand:wikipedia":"ru:Вкусвилл",name:"ВкусВилл",shop:"convenience"}},"shop/convenience|Гастрономчикъ":{countryCodes:["ru"],matchNames:["гастрономчик"],tags:{brand:"Гастрономчикъ",name:"Гастрономчикъ",shop:"convenience"}},"shop/convenience|Гроздь":{countryCodes:["ru"],nomatch:["shop/supermarketk|Гроздь"],tags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"convenience"}},"shop/convenience|Доброном":{countryCodes:["by","ru"],tags:{brand:"Доброном","brand:wikidata":"Q2565040","brand:wikipedia":"be:Eurotorg",name:"Доброном",shop:"convenience"}},"shop/convenience|Евроопт Market":{countryCodes:["by"],matchNames:["евроопт маркет"],matchTags:["shop/supermarket"],tags:{brand:"Евроопт Market","brand:wikidata":"Q65455869",name:"Евроопт Market",shop:"convenience"}},"shop/convenience|Евроопт Минимаркет":{countryCodes:["by"],matchTags:["shop/supermarket"],tags:{brand:"Евроопт Минимаркет","brand:wikidata":"Q65455911",name:"Евроопт Минимаркет",shop:"convenience"}},"shop/convenience|Ермолино":{countryCodes:["ru","ua"],matchNames:["продукты ермолино"],tags:{brand:"Ермолино",name:"Ермолино",shop:"convenience"}},"shop/convenience|КазМунайГаз":{nomatch:["amenity/fuel|КазМунайГаз"],tags:{brand:"КазМунайГаз",name:"КазМунайГаз",shop:"convenience"}},"shop/convenience|Квартал вкуса":{countryCodes:["by"],tags:{brand:"Квартал вкуса",name:"Квартал вкуса",shop:"convenience"}},"shop/convenience|Копеечка":{countryCodes:["by"],tags:{brand:"Копеечка","brand:wikidata":"Q68207105",name:"Копеечка",shop:"convenience"}},"shop/convenience|Копейка":{countryCodes:["ru"],tags:{brand:"Копейка","brand:en":"Kopeyka","brand:wikidata":"Q1783878","brand:wikipedia":"en:Kopeyka (supermarket)",name:"Копейка","name:en":"Kopeyka",shop:"convenience"}},"shop/convenience|Лукойл":{nomatch:["amenity/fuel|Лукойл"],tags:{brand:"Лукойл",name:"Лукойл",shop:"convenience"}},"shop/convenience|Магнит":{matchNames:["магнит у дома"],nomatch:["shop/cosmetics|Магнит Косметик","shop/supermarket|Магнит"],tags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"convenience"}},"shop/convenience|Мария-Ра":{countryCodes:["ru"],nomatch:["shop/supermarket|Мария-Ра"],tags:{brand:"Мария-Ра","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра",shop:"convenience"}},"shop/convenience|Маяк":{countryCodes:["ru"],tags:{brand:"Маяк",name:"Маяк",shop:"convenience"}},"shop/convenience|Монетка":{countryCodes:["ru"],tags:{brand:"Монетка",name:"Монетка",shop:"convenience"}},"shop/convenience|Мрія":{countryCodes:["ua"],tags:{brand:"Мрія",name:"Мрія",shop:"convenience"}},"shop/convenience|Продовольственный магазин":{tags:{brand:"Продовольственный магазин",name:"Продовольственный магазин",shop:"convenience"}},"shop/convenience|Родны кут":{tags:{brand:"Родны кут",name:"Родны кут",shop:"convenience"}},"shop/convenience|Руслан":{tags:{brand:"Руслан",name:"Руслан",shop:"convenience"}},"shop/convenience|Сильпо":{countryCodes:["ua"],tags:{brand:"Сильпо","brand:wikidata":"Q4419434","brand:wikipedia":"ru:Сильпо",name:"Сильпо",shop:"convenience"}},"shop/convenience|У Палыча":{countryCodes:["ru"],tags:{brand:"У Палыча",name:"У Палыча",shop:"convenience"}},"shop/convenience|Фасоль":{countryCodes:["ru"],tags:{brand:"Фасоль",name:"Фасоль",shop:"convenience"}},"shop/convenience|Ярче":{countryCodes:["ru"],tags:{brand:"Ярче",name:"Ярче",shop:"convenience"}},"shop/convenience|アンスリー":{countryCodes:["jp"],tags:{brand:"アンスリー","brand:en":"Ansuri","brand:ja":"アンスリー","brand:wikidata":"Q17192555","brand:wikipedia":"ja:アンスリー",name:"アンスリー","name:en":"Ansuri","name:ja":"アンスリー",shop:"convenience"}},"shop/convenience|サンクス":{countryCodes:["jp"],tags:{brand:"サンクス","brand:en":"Sunkus","brand:ja":"サンクス","brand:wikidata":"Q16141064","brand:wikipedia":"ja:サークルKサンクス",name:"サンクス","name:en":"Sunkus","name:ja":"サンクス",shop:"convenience"}},"shop/convenience|サークルK":{countryCodes:["jp"],tags:{brand:"サークルK","brand:en":"Circle K","brand:ja":"サークルK","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"サークルK","name:en":"Circle K","name:ja":"サークルK",shop:"convenience"}},"shop/convenience|スリーエフ":{countryCodes:["jp"],tags:{brand:"スリーエフ","brand:en":"Three F","brand:ja":"スリーエフ","brand:wikidata":"Q11313419","brand:wikipedia":"ja:スリーエフ",name:"スリーエフ","name:en":"Three F","name:ja":"スリーエフ",shop:"convenience"}},"shop/convenience|セイコーマート":{countryCodes:["jp"],tags:{brand:"セイコーマート","brand:en":"Seicomart","brand:ja":"セイコーマート","brand:wikidata":"Q11314123","brand:wikipedia":"ja:セイコーマート",name:"セイコーマート","name:en":"Seicomart","name:ja":"セイコーマート",shop:"convenience"}},"shop/convenience|セブン-イレブン":{countryCodes:["jp"],matchNames:["セブンイレブン(7-11)","セブンイレブン(seven-eleven)"],tags:{brand:"セブン-イレブン","brand:en":"7-Eleven","brand:ja":"セブン-イレブン","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"セブン-イレブン","name:en":"7-Eleven","name:ja":"セブン-イレブン","official_name:en":"Seven-Eleven",shop:"convenience"}},"shop/convenience|セーブオン":{countryCodes:["jp"],tags:{brand:"セーブオン","brand:en":"Save On","brand:ja":"セーブオン","brand:wikidata":"Q11314868","brand:wikipedia":"ja:セーブオン",name:"セーブオン","name:en":"Save On","name:ja":"セーブオン",shop:"convenience"}},"shop/convenience|デイリーヤマザキ":{countryCodes:["jp"],tags:{brand:"デイリーヤマザキ","brand:en":"Daily Yamazaki","brand:ja":"デイリーヤマザキ","brand:wikidata":"Q5209392","brand:wikipedia":"en:Daily Yamazaki",name:"デイリーヤマザキ","name:en":"Daily Yamazaki","name:ja":"デイリーヤマザキ",shop:"convenience"}},"shop/convenience|ナチュラルローソン":{countryCodes:["jp"],tags:{brand:"ナチュラルローソン","brand:en":"NATURAL LAWSON","brand:ja":"ナチュラルローソン","brand:wikidata":"Q11323850","brand:wikipedia":"ja:ナチュラルローソン",name:"ナチュラルローソン","name:en":"Natural Lawson","name:ja":"ナチュラルローソン",shop:"convenience"}},"shop/convenience|ファミリーマート":{countryCodes:["jp"],tags:{brand:"ファミリーマート","brand:en":"FamilyMart","brand:ja":"ファミリーマート","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"ファミリーマート","name:en":"FamilyMart","name:ja":"ファミリーマート",shop:"convenience"}},"shop/convenience|ポプラ":{countryCodes:["jp"],tags:{brand:"ポプラ","brand:en":"Poplar","brand:ja":"ポプラ","brand:wikidata":"Q7229380","brand:wikipedia":"ja:ポプラ (コンビニエンスストア)",name:"ポプラ","name:en":"Poplar","name:ja":"ポプラ",shop:"convenience"}},"shop/convenience|ミニストップ":{countryCodes:["jp"],tags:{brand:"ミニストップ","brand:en":"Ministop","brand:ja":"ミニストップ","brand:wikidata":"Q1038929","brand:wikipedia":"ja:ミニストップ",name:"ミニストップ","name:en":"Ministop","name:ja":"ミニストップ",shop:"convenience"}},"shop/convenience|ヤマザキショップ":{countryCodes:["jp"],tags:{brand:"ヤマザキショップ","brand:ja":"ヤマザキショップ","brand:wikidata":"Q11345131","brand:wikipedia":"ja:ヤマザキショップ",name:"ヤマザキショップ","name:en":"Yamazaki Shop","name:ja":"ヤマザキショップ",shop:"convenience"}},"shop/convenience|ローソン":{countryCodes:["jp"],matchNames:["ローソン"],tags:{brand:"ローソン","brand:en":"LAWSON","brand:ja":"ローソン","brand:wikidata":"Q1557223","brand:wikipedia":"ja:ローソン",name:"ローソン","name:en":"Lawson","name:ja":"ローソン",shop:"convenience"}},"shop/convenience|ローソンストア100":{countryCodes:["jp"],tags:{brand:"ローソンストア100","brand:en":"LAWSON STORE 100","brand:ja":"ローソンストア100","brand:wikidata":"Q11350960","brand:wikipedia":"ja:ローソンストア100",name:"ローソンストア100","name:en":"Lawson Store 100","name:ja":"ローソンストア100",shop:"convenience"}},"shop/convenience|ローソン・スリーエフ":{countryCodes:["jp"],matchNames:["lawson+スリーエフ","ローソン・スリーエフ"],tags:{brand:"ローソン・スリーエフ","brand:en":"LAWSON・Three F","brand:ja":"ローソン・スリーエフ","brand:wikidata":"Q24866804","brand:wikipedia":"ja:ローソン・スリーエフ",name:"ローソン・スリーエフ","name:en":"Lawson・Three F","name:ja":"ローソン・スリーエフ",shop:"convenience"}},"shop/convenience|全家":{countryCodes:["cn"],tags:{brand:"全家","brand:en":"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"zh:FamilyMart",name:"全家","name:en":"FamilyMart",shop:"convenience"}},"shop/convenience|全家便利商店":{countryCodes:["tw"],tags:{brand:"全家便利商店","brand:en":"FamilyMart","brand:wikidata":"Q10891564","brand:wikipedia":"zh:全家便利商店",name:"全家便利商店","name:en":"FamilyMart",shop:"convenience"}},"shop/convenience|萊爾富":{countryCodes:["tw"],tags:{brand:"萊爾富","brand:en":"Hi-Life","brand:wikidata":"Q11326216","brand:wikipedia":"zh:萊爾富",name:"萊爾富","name:en":"Hi-Life",shop:"convenience"}},"shop/convenience|미니스톱":{countryCodes:["kr"],tags:{brand:"미니스톱","brand:ko":"미니스톱",name:"미니스톱","name:ko":"미니스톱",shop:"convenience"}},"shop/convenience|세븐일레븐":{countryCodes:["kr"],tags:{brand:"세븐일레븐","brand:en":"7-Eleven","brand:ko":"세븐일레븐","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"세븐일레븐","name:en":"7-Eleven","name:ko":"세븐일레븐",shop:"convenience"}},"shop/copyshop|FedEx Office":{countryCodes:["us"],matchNames:["fedex office print and ship center"],matchTags:["amenity/post_office"],tags:{brand:"FedEx Office","brand:wikidata":"Q474379","brand:wikipedia":"en:FedEx Office",name:"FedEx Office",shop:"copyshop"}},"shop/copyshop|Minuteman Press":{tags:{brand:"Minuteman Press","brand:wikidata":"Q64866081",name:"Minuteman Press",shop:"copyshop"}},"shop/copyshop|Photocopie":{tags:{brand:"Photocopie",name:"Photocopie",shop:"copyshop"}},"shop/copyshop|Sir Speedy":{countryCodes:["us"],matchTags:["amenity/post_office"],tags:{brand:"Sir Speedy","brand:wikidata":"Q17088225","brand:wikipedia":"en:Sir Speedy",name:"Sir Speedy",shop:"copyshop"}},"shop/copyshop|Xerox":{tags:{brand:"Xerox",name:"Xerox",shop:"copyshop"}},"shop/copyshop|Копирка":{tags:{brand:"Копирка",name:"Копирка",shop:"copyshop"}},"shop/cosmetics|Aveda":{countryCodes:["us"],tags:{brand:"Aveda","brand:wikidata":"Q4827965","brand:wikipedia":"en:Aveda",name:"Aveda",shop:"cosmetics"}},"shop/cosmetics|Bath & Body Works":{tags:{brand:"Bath & Body Works","brand:wikidata":"Q810773","brand:wikipedia":"en:Bath & Body Works",name:"Bath & Body Works",shop:"cosmetics"}},"shop/cosmetics|Eva":{countryCodes:["ru","ua"],tags:{brand:"Eva",name:"Eva",shop:"cosmetics"}},"shop/cosmetics|Jurlique":{tags:{brand:"Jurlique","brand:wikidata":"Q17008691","brand:wikipedia":"en:Jurlique",name:"Jurlique",shop:"cosmetics"}},"shop/cosmetics|KIKO Milano":{countryCodes:["be","de","es","fr","gb","nl"],matchNames:["kiko"],tags:{brand:"KIKO Milano","brand:wikidata":"Q3812045","brand:wikipedia":"it:KIKO",name:"KIKO Milano",shop:"cosmetics"}},"shop/cosmetics|Kiehl's":{countryCodes:["ca","us"],matchNames:["kiehl's since 1851"],tags:{brand:"Kiehl's","brand:wikidata":"Q3196447","brand:wikipedia":"en:Kiehl's",name:"Kiehl's",shop:"cosmetics"}},"shop/cosmetics|L'Occitane":{matchNames:["l'occitane en provence"],tags:{brand:"L'Occitane","brand:wikidata":"Q1880676","brand:wikipedia":"en:L'Occitane en Provence",name:"L'Occitane",shop:"cosmetics"}},"shop/cosmetics|Lush":{tags:{brand:"Lush","brand:wikidata":"Q1585448","brand:wikipedia":"en:Lush (company)",name:"Lush",shop:"cosmetics"}},"shop/cosmetics|MAC Cosmetics":{countryCodes:["ca","de","us"],tags:{brand:"MAC Cosmetics","brand:wikidata":"Q2624442","brand:wikipedia":"en:MAC Cosmetics",name:"MAC Cosmetics",shop:"cosmetics",short_name:"M·A·C"}},"shop/cosmetics|Mixit":{countryCodes:["by","kz","ru"],tags:{brand:"Mixit",name:"Mixit",shop:"cosmetics"}},"shop/cosmetics|Nature Republic":{tags:{brand:"Nature Republic","brand:wikidata":"Q16935507","brand:wikipedia":"en:Nature Republic",name:"Nature Republic",shop:"cosmetics"}},"shop/cosmetics|Nocibé":{countryCodes:["fr"],tags:{brand:"Nocibé","brand:wikidata":"Q3342592","brand:wikipedia":"fr:Nocibé",name:"Nocibé",shop:"cosmetics"}},"shop/cosmetics|Origins":{countryCodes:["us"],tags:{brand:"Origins","brand:wikidata":"Q6643229","brand:wikipedia":"en:Origins (cosmetics)",name:"Origins",shop:"cosmetics"}},"shop/cosmetics|Rituals":{countryCodes:["be","ch","de","es","gb","nl","se","us"],tags:{brand:"Rituals","brand:wikidata":"Q62874140",name:"Rituals",shop:"cosmetics"}},"shop/cosmetics|Saje":{countryCodes:["ca","us"],tags:{brand:"Saje","brand:wikidata":"Q44631749","brand:wikipedia":"en:Saje Natural Wellness",name:"Saje",shop:"cosmetics"}},"shop/cosmetics|Sephora":{matchTags:["shop/perfumery"],tags:{brand:"Sephora","brand:wikidata":"Q2408041","brand:wikipedia":"en:Sephora",name:"Sephora",shop:"cosmetics"}},"shop/cosmetics|The Body Shop":{matchTags:["shop/chemist"],tags:{brand:"The Body Shop","brand:wikidata":"Q837851","brand:wikipedia":"en:The Body Shop",name:"The Body Shop",shop:"cosmetics"}},"shop/cosmetics|Ulta Beauty":{countryCodes:["us"],matchNames:["ulta"],tags:{brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"Ulta Beauty",shop:"cosmetics"}},"shop/cosmetics|bareMinerals":{countryCodes:["au","ca","dk","gb","ie","us"],tags:{brand:"bareMinerals","brand:wikidata":"Q66740659",name:"bareMinerals",shop:"cosmetics"}},"shop/cosmetics|Л'Этуаль":{countryCodes:["ru"],tags:{brand:"Л'Этуаль","brand:wikidata":"Q18400706","brand:wikipedia":"ru:Л’Этуаль",name:"Л'Этуаль",shop:"cosmetics"}},"shop/cosmetics|Магнит Косметик":{countryCodes:["ru"],matchTags:["shop/chemist"],nomatch:["shop/convenience|Магнит","shop/supermarket|Магнит"],tags:{brand:"Магнит Косметик","brand:en":"Magnit Cosmetics","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит Косметик","name:en":"Magnit Cosmetics",shop:"cosmetics"}},"shop/cosmetics|Подружка":{countryCodes:["ru","ua"],tags:{brand:"Подружка",name:"Подружка",shop:"cosmetics"}},"shop/cosmetics|Чистый дом":{countryCodes:["ru","ua"],tags:{brand:"Чистый дом",name:"Чистый дом",shop:"cosmetics"}},"shop/country_store|Atwoods":{countryCodes:["us"],tags:{brand:"Atwoods","brand:wikidata":"Q4818874","brand:wikipedia":"en:Atwoods",name:"Atwoods",shop:"country_store"}},"shop/country_store|Blain's Farm & Fleet":{countryCodes:["us"],matchTags:["shop/department_store"],tags:{brand:"Blain's Farm & Fleet","brand:wikidata":"Q4923906","brand:wikipedia":"en:Blain's Farm & Fleet",name:"Blain's Farm & Fleet",shop:"country_store"}},"shop/country_store|Bomgaars":{countryCodes:["us"],tags:{brand:"Bomgaars","brand:wikidata":"Q22059070","brand:wikipedia":"en:Bomgaars",name:"Bomgaars",shop:"country_store"}},"shop/country_store|Fleet Farm":{countryCodes:["us"],matchNames:["mills fleet farm"],tags:{brand:"Fleet Farm","brand:wikidata":"Q6859973","brand:wikipedia":"en:Fleet Farm",name:"Fleet Farm",shop:"country_store"}},"shop/country_store|Grange Co-op":{countryCodes:["us"],tags:{brand:"Grange Co-op","brand:wikidata":"Q5595639","brand:wikipedia":"en:Grange Cooperative",name:"Grange Co-op",shop:"country_store"}},"shop/country_store|Home of Economy":{countryCodes:["us"],tags:{brand:"Home of Economy","brand:wikidata":"Q5889100","brand:wikipedia":"en:Home of Economy",name:"Home of Economy",shop:"country_store"}},"shop/country_store|Norbys Farm Fleet":{countryCodes:["us"],tags:{brand:"Norbys Farm Fleet","brand:wikidata":"Q7050461","brand:wikipedia":"en:Norby's Farm Fleet",name:"Norbys Farm Fleet",shop:"country_store"}},"shop/country_store|Orscheln Farm & Home":{countryCodes:["us"],tags:{brand:"Orscheln Farm & Home","brand:wikidata":"Q22060331","brand:wikipedia":"en:Orscheln Farm & Home",name:"Orscheln Farm & Home",shop:"country_store"}},"shop/country_store|Peavey Mart":{countryCodes:["ca"],tags:{brand:"Peavey Mart","brand:wikidata":"Q7158483","brand:wikipedia":"en:Peavey Mart",name:"Peavey Mart",shop:"country_store"}},"shop/country_store|Rural King":{countryCodes:["us"],tags:{brand:"Rural King","brand:wikidata":"Q7380525","brand:wikipedia":"en:Rural King",name:"Rural King",shop:"country_store"}},"shop/country_store|TSC Stores":{countryCodes:["ca"],tags:{brand:"TSC Stores","brand:wikidata":"Q62720230",name:"TSC Stores",shop:"country_store"}},"shop/country_store|Theisen's":{countryCodes:["us"],tags:{brand:"Theisen's","brand:wikidata":"Q7777850","brand:wikipedia":"en:Theisen's",name:"Theisen's",shop:"country_store"}},"shop/country_store|Tractor Supply Company":{countryCodes:["us"],matchNames:["tractor supply co"],tags:{brand:"Tractor Supply Company","brand:wikidata":"Q15109925","brand:wikipedia":"en:Tractor Supply Company",name:"Tractor Supply Company",shop:"country_store"}},"shop/country_store|Wynnstay":{countryCodes:["gb"],tags:{brand:"Wynnstay","brand:wikidata":"Q63016351",name:"Wynnstay",shop:"country_store"}},"shop/craft|A.C. Moore":{countryCodes:["us"],tags:{brand:"A.C. Moore","brand:wikidata":"Q4647066","brand:wikipedia":"en:A.C. Moore",name:"A.C. Moore",shop:"craft"}},"shop/craft|Hobby Lobby":{countryCodes:["in","us"],tags:{brand:"Hobby Lobby","brand:wikidata":"Q5874938","brand:wikipedia":"en:Hobby Lobby",name:"Hobby Lobby",shop:"craft"}},"shop/craft|Hobbycraft":{countryCodes:["gb"],matchTags:["shop/art"],tags:{brand:"Hobbycraft","brand:wikidata":"Q16984508","brand:wikipedia":"en:Hobbycraft",name:"Hobbycraft",shop:"craft"}},"shop/craft|Jo-Ann":{countryCodes:["us"],tags:{brand:"Jo-Ann","brand:wikidata":"Q6203968","brand:wikipedia":"en:Jo-Ann Stores",name:"Jo-Ann",shop:"craft"}},"shop/craft|Michaels":{countryCodes:["ca","us"],tags:{brand:"Michaels","brand:wikidata":"Q6835667","brand:wikipedia":"en:Michaels",name:"Michaels",shop:"craft"}},"shop/craft|Woodcraft":{countryCodes:["us"],matchTags:["craft/carpenter","shop/doityourself","shop/hardware","shop/hobby"],tags:{brand:"Woodcraft","brand:wikidata":"Q22026341","brand:wikipedia":"en:Woodcraft Supply",name:"Woodcraft",shop:"craft"}},"shop/deli|ほっともっと":{countryCodes:["jp"],nomatch:["amenity/fast_food|ほっともっと"],tags:{brand:"ほっともっと","brand:en":"Hotto Motto","brand:ja":"ほっともっと","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",name:"ほっともっと","name:en":"Hotto Motto","name:ja":"ほっともっと",shop:"deli"}},"shop/deli|京樽":{countryCodes:["jp"],matchTags:["amenity/fast_food"],tags:{brand:"京樽","brand:en":"Kyotaru","brand:ja":"京樽","brand:wikidata":"Q11374503","brand:wikipedia":"ja:京樽",name:"京樽","name:en":"Kyotaru","name:ja":"京樽",shop:"deli"}},"shop/department_store|Barneys New York":{countryCodes:["us"],matchNames:["barneys"],tags:{brand:"Barneys New York","brand:wikidata":"Q59465","brand:wikipedia":"en:Barneys New York",name:"Barneys New York",shop:"department_store"}},"shop/department_store|Beales":{countryCodes:["gb"],tags:{brand:"Beales","brand:wikidata":"Q4876141","brand:wikipedia":"en:Beales (department store)",name:"Beales",shop:"department_store"}},"shop/department_store|Bealls~(Florida-based)":{countryCodes:["us"],tags:{brand:"Bealls","brand:wikidata":"Q4876153","brand:wikipedia":"en:Bealls (Florida)",name:"Bealls",shop:"department_store"}},"shop/department_store|Bealls~(Texas-based)":{countryCodes:["us"],tags:{brand:"Bealls","brand:wikidata":"Q4876156","brand:wikipedia":"en:Bealls (Texas)",name:"Bealls",shop:"department_store"}},"shop/department_store|Belk":{countryCodes:["us"],tags:{brand:"Belk","brand:wikidata":"Q127428","brand:wikipedia":"en:Belk",name:"Belk",shop:"department_store"}},"shop/department_store|Bi-Mart":{countryCodes:["us"],tags:{brand:"Bi-Mart","brand:wikidata":"Q4902331","brand:wikipedia":"en:Bi-Mart",name:"Bi-Mart",shop:"department_store"}},"shop/department_store|Big Lots":{countryCodes:["us"],matchTags:["shop/variety_store"],tags:{brand:"Big Lots","brand:wikidata":"Q4905973","brand:wikipedia":"en:Big Lots",name:"Big Lots",shop:"department_store"}},"shop/department_store|Big W":{countryCodes:["au"],tags:{brand:"Big W","brand:wikidata":"Q4906646","brand:wikipedia":"en:Big W",name:"Big W",shop:"department_store"}},"shop/department_store|Bloomingdale's":{countryCodes:["us"],tags:{brand:"Bloomingdale's","brand:wikidata":"Q283383","brand:wikipedia":"en:Bloomingdale's",name:"Bloomingdale's",shop:"department_store"}},"shop/department_store|Boscov's":{countryCodes:["us"],tags:{brand:"Boscov's","brand:wikidata":"Q4947190","brand:wikipedia":"en:Boscov's",name:"Boscov's",shop:"department_store"}},"shop/department_store|Boyes":{countryCodes:["gb"],tags:{brand:"Boyes","brand:wikidata":"Q7958471","brand:wikipedia":"en:Boyes (retailer)",name:"Boyes",shop:"department_store"}},"shop/department_store|BrightHouse":{countryCodes:["gb"],tags:{brand:"BrightHouse","brand:wikidata":"Q4967357","brand:wikipedia":"en:BrightHouse (retailer)",name:"BrightHouse",shop:"department_store"}},"shop/department_store|Canadian Tire":{countryCodes:["ca"],matchTags:["shop/doityourself"],nomatch:["amenity/fuel|Canadian Tire"],tags:{brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire",shop:"department_store"}},"shop/department_store|Casas Bahia":{countryCodes:["br"],tags:{brand:"Casas Bahia","brand:wikidata":"Q5048048","brand:wikipedia":"en:Casas Bahia",name:"Casas Bahia",shop:"department_store"}},"shop/department_store|Century 21":{countryCodes:["us"],matchNames:["c21"],nomatch:["office/estate_agent|Century 21"],tags:{brand:"Century 21","brand:wikidata":"Q5063125","brand:wikipedia":"en:Century 21 (department store)",name:"Century 21",shop:"department_store"}},"shop/department_store|Coppel":{tags:{brand:"Coppel","brand:wikidata":"Q2497795","brand:wikipedia":"en:Coppel",name:"Coppel",shop:"department_store"}},"shop/department_store|David Jones":{countryCodes:["au"],tags:{brand:"David Jones","brand:wikidata":"Q5235753","brand:wikipedia":"en:David Jones Limited",name:"David Jones",shop:"department_store"}},"shop/department_store|Debenhams":{countryCodes:["gb","ie"],tags:{brand:"Debenhams","brand:wikidata":"Q1181484","brand:wikipedia":"en:Debenhams",name:"Debenhams",shop:"department_store"}},"shop/department_store|Dillard's":{countryCodes:["us"],tags:{brand:"Dillard's","brand:wikidata":"Q844805","brand:wikipedia":"en:Dillard's",name:"Dillard's",shop:"department_store"}},"shop/department_store|El Corte Inglés":{countryCodes:["es"],matchNames:["corte ingles"],tags:{brand:"El Corte Inglés","brand:wikidata":"Q623133","brand:wikipedia":"en:El Corte Inglés",name:"El Corte Inglés",shop:"department_store"}},"shop/department_store|Falabella":{matchNames:["saga falabella"],nomatch:["amenity/bank|Banco Falabella"],tags:{brand:"Falabella","brand:wikidata":"Q5135229","brand:wikipedia":"en:Falabella (retail store)",name:"Falabella",shop:"department_store"}},"shop/department_store|Galeria Kaufhof":{countryCodes:["de"],tags:{brand:"Galeria Kaufhof","brand:wikidata":"Q322598","brand:wikipedia":"en:Galeria Kaufhof",name:"Galeria Kaufhof",shop:"department_store"}},"shop/department_store|Giant Tiger":{countryCodes:["ca"],tags:{brand:"Giant Tiger","brand:wikidata":"Q5558429","brand:wikipedia":"en:Giant Tiger",name:"Giant Tiger",shop:"department_store"}},"shop/department_store|Goody's":{countryCodes:["us"],tags:{brand:"Goody's","brand:wikidata":"Q5583733","brand:wikipedia":"en:Goody's (store)",name:"Goody's",shop:"department_store"}},"shop/department_store|Gordmans":{countryCodes:["us"],tags:{brand:"Gordmans","brand:wikidata":"Q5584725","brand:wikipedia":"en:Gordmans",name:"Gordmans",shop:"department_store"}},"shop/department_store|HEMA":{countryCodes:["ae","at","be","de","es","fr","gb","lu","nl","qa"],tags:{brand:"HEMA","brand:wikidata":"Q903805","brand:wikipedia":"en:HEMA (store)",name:"HEMA",shop:"department_store"}},"shop/department_store|Harvey Norman":{countryCodes:["au","nz"],tags:{brand:"Harvey Norman","brand:wikidata":"Q4040441","brand:wikipedia":"en:Harvey Norman",name:"Harvey Norman",shop:"department_store"}},"shop/department_store|Havan":{countryCodes:["br"],tags:{brand:"Havan","brand:wikidata":"Q10294065","brand:wikipedia":"pt:Havan",name:"Havan",shop:"department_store"}},"shop/department_store|House of Fraser":{countryCodes:["gb"],tags:{brand:"House of Fraser","brand:wikidata":"Q5928422","brand:wikipedia":"en:House of Fraser",name:"House of Fraser",shop:"department_store"}},"shop/department_store|Hudson's Bay":{countryCodes:["ca","nl"],tags:{alt_name:"The Bay",brand:"Hudson's Bay","brand:wikidata":"Q641129","brand:wikipedia":"en:Hudson's Bay (retailer)",name:"Hudson's Bay",shop:"department_store"}},"shop/department_store|JCPenney":{countryCodes:["us"],matchNames:["jcpenny"],tags:{brand:"JCPenney","brand:wikidata":"Q920037","brand:wikipedia":"en:J. C. Penney",name:"JCPenney",official_name:"J.C. Penney Company",shop:"department_store"}},"shop/department_store|John Lewis":{countryCodes:["gb"],tags:{brand:"John Lewis","brand:wikidata":"Q1918981","brand:wikipedia":"en:John Lewis & Partners",name:"John Lewis",official_name:"John Lewis & Partners",shop:"department_store"}},"shop/department_store|Karstadt":{countryCodes:["de"],tags:{brand:"Karstadt","brand:wikidata":"Q182910","brand:wikipedia":"en:Karstadt",name:"Karstadt",shop:"department_store"}},"shop/department_store|Kmart~(Australia)":{countryCodes:["au"],matchTags:["shop/supermarket"],nomatch:["shop/department_store|Kmart~(USA)"],tags:{brand:"Kmart","brand:wikidata":"Q6421682","brand:wikipedia":"en:Kmart Australia",name:"Kmart",shop:"department_store"}},"shop/department_store|Kmart~(USA)":{countryCodes:["us"],matchNames:["k-mart"],matchTags:["shop/supermarket"],nomatch:["shop/department_store|Kmart~(Australia)"],tags:{brand:"Kmart","brand:wikidata":"Q1753080","brand:wikipedia":"en:Kmart",name:"Kmart",shop:"department_store"}},"shop/department_store|Kohl's":{countryCodes:["us"],tags:{brand:"Kohl's","brand:wikidata":"Q967265","brand:wikipedia":"en:Kohl's",name:"Kohl's",shop:"department_store"}},"shop/department_store|Lojas Americanas":{countryCodes:["br"],tags:{brand:"Lojas Americanas","brand:wikidata":"Q3064093","brand:wikipedia":"en:Lojas Americanas",name:"Lojas Americanas",shop:"department_store"}},"shop/department_store|Lord & Taylor":{countryCodes:["us"],tags:{brand:"Lord & Taylor","brand:wikidata":"Q2749082","brand:wikipedia":"en:Lord & Taylor",name:"Lord & Taylor",shop:"department_store"}},"shop/department_store|Lotte Department Store":{matchNames:["lotte"],tags:{brand:"Lotte Department Store","brand:wikidata":"Q489905","brand:wikipedia":"en:Lotte Department Store",name:"Lotte Department Store",shop:"department_store"}},"shop/department_store|M&S Outlet":{matchNames:["marks & spencer outlet"],matchTags:["shop/supermarket"],tags:{brand:"M&S Outlet","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Outlet",shop:"department_store"}},"shop/department_store|Macy's":{countryCodes:["us"],tags:{brand:"Macy's","brand:wikidata":"Q629269","brand:wikipedia":"en:Macy's",name:"Macy's",shop:"department_store"}},"shop/department_store|Manor":{countryCodes:["ch"],tags:{brand:"Manor","brand:wikidata":"Q382686","brand:wikipedia":"en:Manor (department store)",name:"Manor",shop:"department_store"}},"shop/department_store|Marks & Spencer":{countryCodes:["gb","gr","ie"],matchNames:["m and s"],matchTags:["shop/supermarket"],tags:{brand:"Marks & Spencer","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"Marks & Spencer",shop:"department_store"}},"shop/department_store|Marshalls":{countryCodes:["ca","us"],tags:{brand:"Marshalls","brand:wikidata":"Q15903261","brand:wikipedia":"en:Marshalls",name:"Marshalls",shop:"department_store"}},"shop/department_store|Muji":{countryCodes:["it"],tags:{brand:"Muji","brand:en":"Muji","brand:ja":"無印良品","brand:wikidata":"Q708789","brand:wikipedia":"en:Muji",name:"Muji","name:en":"Muji","name:ja":"無印良品",shop:"department_store"}},"shop/department_store|Myer":{countryCodes:["au"],tags:{brand:"Myer","brand:wikidata":"Q1110323","brand:wikipedia":"en:Myer",name:"Myer",shop:"department_store"}},"shop/department_store|Neiman Marcus":{countryCodes:["us"],tags:{brand:"Neiman Marcus","brand:wikidata":"Q743497","brand:wikipedia":"en:Neiman Marcus",name:"Neiman Marcus",shop:"department_store"}},"shop/department_store|Nordstrom":{countryCodes:["ca","us"],tags:{brand:"Nordstrom","brand:wikidata":"Q174310","brand:wikipedia":"en:Nordstrom",name:"Nordstrom",shop:"department_store"}},"shop/department_store|Oechsle":{countryCodes:["pe"],tags:{brand:"Oechsle","brand:wikidata":"Q6049096","brand:wikipedia":"es:Oechsle",name:"Oechsle",shop:"department_store"}},"shop/department_store|París":{countryCodes:["cl","pe"],tags:{brand:"París","brand:wikidata":"Q20812805","brand:wikipedia":"en:París (retail store)",name:"París",shop:"department_store"}},"shop/department_store|Printemps":{countryCodes:["ad","cn","fr","jp","sa"],tags:{brand:"Printemps","brand:wikidata":"Q1535260","brand:wikipedia":"fr:Printemps (grands magasins)",name:"Printemps",shop:"department_store"}},"shop/department_store|Ripley":{countryCodes:["cl","pe"],tags:{brand:"Ripley","brand:wikidata":"Q3433040","brand:wikipedia":"en:Ripley S.A.",name:"Ripley",shop:"department_store"}},"shop/department_store|Ross":{countryCodes:["us"],tags:{brand:"Ross","brand:wikidata":"Q3442791","brand:wikipedia":"en:Ross Stores",name:"Ross",official_name:"Ross Dress for Less",shop:"department_store"}},"shop/department_store|Saks Fifth Avenue":{countryCodes:["ca","us"],tags:{brand:"Saks Fifth Avenue","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Fifth Avenue",shop:"department_store"}},"shop/department_store|Saks Off 5th":{countryCodes:["ca","us"],tags:{brand:"Saks Off 5th","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Off 5th",shop:"department_store"}},"shop/department_store|Sears":{countryCodes:["mx","us"],nomatch:["shop/car_repair|Sears Auto Center"],tags:{brand:"Sears","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears",shop:"department_store"}},"shop/department_store|Sears Hometown":{countryCodes:["us"],matchNames:["sears hometown store","sears hometown stores"],tags:{brand:"Sears Hometown","brand:wikidata":"Q69926963",name:"Sears Hometown",shop:"department_store"}},"shop/department_store|Sears Outlet":{countryCodes:["us"],matchNames:["sears outlet store","sears outlet stores"],tags:{brand:"Sears Outlet","brand:wikidata":"Q20080412",name:"Sears Outlet",shop:"department_store"}},"shop/department_store|Shopko":{countryCodes:["us"],tags:{brand:"Shopko","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shopko",name:"Shopko",shop:"department_store"}},"shop/department_store|Shoppers Stop":{countryCodes:["in"],tags:{brand:"Shoppers Stop","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shoppers Stop",name:"Shoppers Stop",shop:"department_store"}},"shop/department_store|Stein Mart":{countryCodes:["us"],tags:{brand:"Stein Mart","brand:wikidata":"Q7606770","brand:wikipedia":"en:Stein Mart",name:"Stein Mart",shop:"department_store"}},"shop/department_store|Stockmann":{countryCodes:["fi"],tags:{brand:"Stockmann","brand:wikidata":"Q1543093","brand:wikipedia":"fi:Stockmann",name:"Stockmann",shop:"department_store"}},"shop/department_store|TJ Maxx":{countryCodes:["us"],tags:{brand:"TJ Maxx","brand:wikidata":"Q10860683","brand:wikipedia":"en:TJ Maxx",name:"TJ Maxx",shop:"department_store"}},"shop/department_store|TK Maxx":{tags:{brand:"TK Maxx","brand:wikidata":"Q23823668","brand:wikipedia":"en:TK Maxx",name:"TK Maxx",shop:"department_store"}},"shop/department_store|Target~(Australia)":{countryCodes:["au"],matchTags:["shop/supermarket"],nomatch:["shop/department_store|Target~(USA)"],tags:{brand:"Target","brand:wikidata":"Q7685854","brand:wikipedia":"en:Target Australia",name:"Target",shop:"department_store"}},"shop/department_store|Target~(USA)":{countryCodes:["us"],matchNames:["super target"],matchTags:["shop/supermarket"],nomatch:["shop/department_store|Target~(Australia)"],tags:{brand:"Target","brand:wikidata":"Q1046951","brand:wikipedia":"en:Target Corporation",name:"Target",shop:"department_store"}},"shop/department_store|The Warehouse":{countryCodes:["nz"],tags:{brand:"The Warehouse","brand:wikidata":"Q3566291","brand:wikipedia":"en:The Warehouse Group",name:"The Warehouse",shop:"department_store"}},"shop/department_store|Walmart":{matchTags:["shop/supermarket"],tags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart",shop:"department_store"}},"shop/department_store|Woolworth":{countryCodes:["de"],tags:{brand:"Woolworth","brand:wikidata":"Q183538","brand:wikipedia":"de:Woolworth Deutschland",name:"Woolworth",shop:"department_store"}},"shop/department_store|Åhléns":{countryCodes:["se"],tags:{brand:"Åhléns","brand:wikidata":"Q270851","brand:wikipedia":"sv:Åhléns",name:"Åhléns",shop:"department_store"}},"shop/department_store|Épicerie":{countryCodes:["ma"],tags:{brand:"Épicerie",name:"Épicerie",shop:"department_store"}},"shop/department_store|Éxito":{countryCodes:["co"],matchTags:["shop/supermarket"],tags:{brand:"Éxito",name:"Éxito",shop:"department_store"}},"shop/department_store|東急ハンズ":{countryCodes:["jp"],tags:{brand:"東急ハンズ","brand:en":"Tokyu Hands","brand:ja":"東急ハンズ","brand:wikidata":"Q859212","brand:wikipedia":"ja:東急ハンズ",name:"東急ハンズ","name:en":"Tokyu Hands","name:ja":"東急ハンズ",shop:"department_store"}},"shop/department_store|無印良品":{countryCodes:["jp","tw"],tags:{brand:"無印良品","brand:en":"Muji","brand:ja":"無印良品","brand:wikidata":"Q708789","brand:wikipedia":"ja:無印良品",name:"無印良品","name:en":"Muji","name:ja":"無印良品",shop:"department_store"}},"shop/department_store|롯데백화점":{countryCodes:["kr"],tags:{brand:"롯데백화점","brand:ko":"롯데백화점","brand:wikidata":"Q489905","brand:wikipedia":"ko:롯데백화점",name:"롯데백화점","name:en":"Lotte Department Store","name:ko":"롯데백화점",shop:"department_store"}},"shop/doityourself|Ace Hardware":{tags:{brand:"Ace Hardware","brand:wikidata":"Q4672981","brand:wikipedia":"en:Ace Hardware",name:"Ace Hardware",shop:"doityourself"}},"shop/doityourself|B&Q":{tags:{brand:"B&Q","brand:wikidata":"Q707602","brand:wikipedia":"en:B&Q",name:"B&Q",shop:"doityourself"}},"shop/doityourself|Bauhaus":{countryCodes:["at","bg","ch","cz","de","dk","ee","es","fi","hr","hu","is","lu","nl","no","se","si","sk","tr"],tags:{brand:"Bauhaus","brand:wikidata":"Q672043","brand:wikipedia":"en:Bauhaus (company)",name:"Bauhaus",shop:"doityourself"}},"shop/doityourself|Biltema":{countryCodes:["dk","fi","no","se"],tags:{brand:"Biltema","brand:wikidata":"Q3355552","brand:wikipedia":"en:Biltema",name:"Biltema",shop:"doityourself"}},"shop/doityourself|Brico":{countryCodes:["be","fr","it"],tags:{brand:"Brico","brand:wikidata":"Q2510786","brand:wikipedia":"en:Brico",name:"Brico",shop:"doityourself"}},"shop/doityourself|Brico Dépôt":{countryCodes:["es","fr","pt","ro"],tags:{brand:"Brico Dépôt","brand:wikidata":"Q2889702","brand:wikipedia":"fr:Brico Dépôt",name:"Brico Dépôt",shop:"doityourself"}},"shop/doityourself|Bricoman":{countryCodes:["fr","it","pl"],tags:{brand:"Bricoman","brand:wikidata":"Q2925142","brand:wikipedia":"it:Bricoman",name:"Bricoman",shop:"doityourself"}},"shop/doityourself|Bricomarché":{countryCodes:["fr","pl","pt"],tags:{brand:"Bricomarché","brand:wikidata":"Q2925147","brand:wikipedia":"en:Bricomarché",name:"Bricomarché",shop:"doityourself"}},"shop/doityourself|Bricorama":{countryCodes:["es","fr"],tags:{brand:"Bricorama","brand:wikidata":"Q2925146","brand:wikipedia":"en:Bricorama",name:"Bricorama",shop:"doityourself"}},"shop/doityourself|Bunnings Warehouse":{countryCodes:["au","nz"],tags:{brand:"Bunnings Warehouse","brand:wikidata":"Q4997829","brand:wikipedia":"en:Bunnings Warehouse",name:"Bunnings Warehouse",shop:"doityourself"}},"shop/doityourself|Castorama":{countryCodes:["fr","pl","ru"],tags:{brand:"Castorama","brand:wikidata":"Q966971","brand:wikipedia":"en:Castorama",name:"Castorama",shop:"doityourself"}},"shop/doityourself|Chausson Matériaux":{countryCodes:["fr"],tags:{brand:"Chausson Matériaux",name:"Chausson Matériaux",shop:"doityourself"}},"shop/doityourself|Clas Ohlson":{countryCodes:["fi","no","se"],tags:{brand:"Clas Ohlson","brand:wikidata":"Q3356220","brand:wikipedia":"en:Clas Ohlson",name:"Clas Ohlson",shop:"doityourself"}},"shop/doityourself|Easy":{countryCodes:["ar","cl","co"],tags:{brand:"Easy","brand:wikidata":"Q5331091","brand:wikipedia":"en:Easy (store)",name:"Easy",shop:"doityourself"}},"shop/doityourself|Gamma":{countryCodes:["be","nl"],tags:{brand:"Gamma","brand:wikidata":"Q2294120","brand:wikipedia":"en:Gamma (store)",name:"Gamma",shop:"doityourself"}},"shop/doityourself|Gedimat":{countryCodes:["fr"],tags:{brand:"Gedimat",name:"Gedimat",shop:"doityourself"}},"shop/doityourself|Globus Baumarkt":{countryCodes:["de","lu"],tags:{brand:"Globus Baumarkt","brand:wikidata":"Q457503","brand:wikipedia":"de:Globus Holding",name:"Globus Baumarkt",shop:"doityourself"}},"shop/doityourself|Hagebaumarkt":{countryCodes:["at","be","ch","de","es","fr","lu","nl"],matchNames:["hagebau"],tags:{brand:"Hagebaumarkt","brand:wikidata":"Q1568279","brand:wikipedia":"de:Hagebau",name:"Hagebaumarkt",shop:"doityourself"}},"shop/doityourself|Hammer":{countryCodes:["de"],tags:{brand:"Hammer","brand:wikidata":"Q52159668","brand:wikipedia":"de:Hammer (Fachmarktkette)",name:"Hammer",shop:"doityourself"}},"shop/doityourself|Hellweg":{countryCodes:["at","de"],tags:{brand:"Hellweg","brand:wikidata":"Q1603084","brand:wikipedia":"de:Hellweg (Baumarkt)",name:"Hellweg",shop:"doityourself"}},"shop/doityourself|Home Building Centre~(Canada)":{countryCodes:["ca"],nomatch:["shop/hardware|Home Hardware Building Centre"],tags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Building Centre",shop:"doityourself"}},"shop/doityourself|Home Hardware Building Centre~(Canada)":{countryCodes:["ca"],matchNames:["home hardware"],nomatch:["shop/hardware|Home Hardware"],tags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Hardware Building Centre",shop:"doityourself"}},"shop/doityourself|Home Timber & Hardware~(Australia)":{countryCodes:["au"],tags:{alt_name:"Home Hardware",brand:"Home Timber & Hardware","brand:wikidata":"Q17006984","brand:wikipedia":"en:Home Timber & Hardware",name:"Home Timber & Hardware",shop:"doityourself",short_name:"Home"}},"shop/doityourself|Homebase":{countryCodes:["gb","ie"],tags:{brand:"Homebase","brand:wikidata":"Q9293447","brand:wikipedia":"en:Homebase",name:"Homebase",shop:"doityourself"}},"shop/doityourself|Hornbach":{countryCodes:["at","ch","cz","de","lu","nl","ro","se","sk"],tags:{brand:"Hornbach","brand:wikidata":"Q685926","brand:wikipedia":"en:Hornbach (retailer)",name:"Hornbach",shop:"doityourself"}},"shop/doityourself|Hubo":{countryCodes:["be","nl"],tags:{brand:"Hubo","brand:wikidata":"Q3142153","brand:wikipedia":"en:Hubo Belgium",name:"Hubo",shop:"doityourself"}},"shop/doityourself|Jewson":{countryCodes:["gb"],tags:{brand:"Jewson","brand:wikidata":"Q6190226","brand:wikipedia":"en:Jewson",name:"Jewson",shop:"doityourself"}},"shop/doityourself|Jula":{tags:{brand:"Jula",name:"Jula",shop:"doityourself"}},"shop/doityourself|Karwei":{countryCodes:["nl"],tags:{brand:"Karwei","brand:wikidata":"Q2097480","brand:wikipedia":"en:Karwei",name:"Karwei",shop:"doityourself"}},"shop/doityourself|Lapeyre":{tags:{brand:"Lapeyre",name:"Lapeyre",shop:"doityourself"}},"shop/doityourself|Leroy Merlin":{tags:{brand:"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Leroy Merlin",shop:"doityourself"}},"shop/doityourself|Lowe's":{countryCodes:["ca","mx","us"],matchNames:["lowes home improvement"],nomatch:["shop/clothes|Lowes","shop/supermarket|Lowe's Market","shop/supermarket|Lowes Foods"],tags:{brand:"Lowe's","brand:wikidata":"Q1373493","brand:wikipedia":"en:Lowe's",name:"Lowe's",shop:"doityourself"}},"shop/doityourself|Menards":{countryCodes:["us"],tags:{brand:"Menards","brand:wikidata":"Q1639897","brand:wikipedia":"en:Menards",name:"Menards",shop:"doityourself"}},"shop/doityourself|Mitre 10":{countryCodes:["au"],tags:{brand:"Mitre 10","brand:wikidata":"Q6882393","brand:wikipedia":"en:Mitre 10",name:"Mitre 10",shop:"doityourself"}},"shop/doityourself|Mr.Bricolage":{countryCodes:["be","fr"],tags:{brand:"Mr.Bricolage","brand:wikidata":"Q3141657","brand:wikipedia":"fr:Mr Bricolage",name:"Mr.Bricolage",shop:"doityourself"}},"shop/doityourself|OBI":{tags:{brand:"OBI","brand:wikidata":"Q300518","brand:wikipedia":"en:Obi (store)",name:"OBI",shop:"doityourself"}},"shop/doityourself|Point P":{countryCodes:["fr"],tags:{brand:"Point P",name:"Point P",shop:"doityourself"}},"shop/doityourself|Praktiker":{countryCodes:["bg","gr","hu","ro"],tags:{brand:"Praktiker","brand:wikidata":"Q680214","brand:wikipedia":"en:Praktiker",name:"Praktiker",shop:"doityourself"}},"shop/doityourself|Praxis":{countryCodes:["nl"],tags:{brand:"Praxis","brand:wikidata":"Q2741995","brand:wikipedia":"nl:Praxis (winkel)",name:"Praxis",shop:"doityourself"}},"shop/doityourself|Promart":{countryCodes:["pe"],tags:{brand:"Promart","brand:wikidata":"Q17626095","brand:wikipedia":"en:Promart",name:"Promart",shop:"doityourself"}},"shop/doityourself|Rona":{countryCodes:["ca"],tags:{brand:"Rona","brand:wikidata":"Q3415283","brand:wikipedia":"en:Rona, Inc.",name:"Rona",shop:"doityourself"}},"shop/doityourself|Screwfix":{countryCodes:["de","gb"],tags:{brand:"Screwfix","brand:wikidata":"Q7439115","brand:wikipedia":"en:Screwfix",name:"Screwfix",shop:"doityourself"}},"shop/doityourself|Sodimac":{countryCodes:["ar","br","cl","co","mx","pe","uy"],matchNames:["sodimac constructor"],tags:{brand:"Sodimac","brand:wikidata":"Q7553274","brand:wikipedia":"es:Sodimac",name:"Sodimac",shop:"doityourself"}},"shop/doityourself|Sonderpreis Baumarkt":{countryCodes:["de"],tags:{brand:"Sonderpreis Baumarkt",name:"Sonderpreis Baumarkt",shop:"doityourself"}},"shop/doityourself|Tekzen":{countryCodes:["tr"],tags:{brand:"Tekzen","brand:wikidata":"Q25475379","brand:wikipedia":"tr:Tekzen",name:"Tekzen",shop:"doityourself"}},"shop/doityourself|The Home Depot":{countryCodes:["ca","mx","us"],tags:{alt_name:"Home Depot",brand:"The Home Depot","brand:wikidata":"Q864407","brand:wikipedia":"en:The Home Depot",name:"The Home Depot",shop:"doityourself"}},"shop/doityourself|Toolstation":{countryCodes:["fr","gb","nl"],tags:{brand:"Toolstation","brand:wikidata":"Q7824103","brand:wikipedia":"en:Toolstation",name:"Toolstation",shop:"doityourself"}},"shop/doityourself|Toom Baumarkt":{countryCodes:["de"],matchNames:["toom"],tags:{brand:"Toom Baumarkt","brand:wikidata":"Q2442970","brand:wikipedia":"de:Toom Baumarkt",name:"Toom Baumarkt",shop:"doityourself"}},"shop/doityourself|Travis Perkins":{countryCodes:["gb"],tags:{brand:"Travis Perkins","brand:wikidata":"Q2450664","brand:wikipedia":"en:Travis Perkins",name:"Travis Perkins",shop:"doityourself"}},"shop/doityourself|Weldom":{countryCodes:["fr"],tags:{brand:"Weldom","brand:wikidata":"Q16683226","brand:wikipedia":"fr:Weldom",name:"Weldom",shop:"doityourself"}},"shop/doityourself|Wickes":{countryCodes:["gb"],tags:{brand:"Wickes","brand:wikidata":"Q7998350","brand:wikipedia":"en:Wickes",name:"Wickes",shop:"doityourself"}},"shop/doityourself|jem & fix":{countryCodes:["dk"],tags:{brand:"jem & fix","brand:wikidata":"Q12319200","brand:wikipedia":"da:Jem & fix",name:"jem & fix",shop:"doityourself"}},"shop/doityourself|Леруа Мерлен":{countryCodes:["ru","ua"],tags:{brand:"Леруа Мерлен","brand:en":"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Леруа Мерлен","name:en":"Leroy Merlin",shop:"doityourself"}},"shop/doityourself|Мастер":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Мастер",name:"Мастер",shop:"doityourself"}},"shop/doityourself|Строитель":{tags:{brand:"Строитель",name:"Строитель",shop:"doityourself"}},"shop/doityourself|カインズホーム":{countryCodes:["jp"],tags:{brand:"カインズホーム","brand:en":"Cainz Home","brand:ja":"カインズホーム","brand:wikidata":"Q11293852","brand:wikipedia":"ja:カインズ",name:"カインズホーム","name:en":"Cainz Home","name:ja":"カインズホーム",shop:"doityourself"}},"shop/doityourself|ケーヨー":{countryCodes:["jp"],tags:{brand:"ケーヨー","brand:en":"Keiyo","brand:ja":"ケーヨー","brand:wikidata":"Q11301462","brand:wikipedia":"ja:ケーヨー",name:"ケーヨー","name:en":"Keiyo","name:ja":"ケーヨー",shop:"doityourself"}},"shop/doityourself|コメリ":{countryCodes:["jp"],tags:{brand:"コメリ","brand:en":"Komeri","brand:ja":"コメリ","brand:wikidata":"Q11302690","brand:wikipedia":"ja:コメリ",name:"コメリ","name:en":"Komeri","name:ja":"コメリ",shop:"doityourself"}},"shop/doityourself|コーナン":{countryCodes:["jp"],tags:{brand:"コーナン","brand:en":"Kohnan","brand:ja":"コーナン","brand:wikidata":"Q11303403","brand:wikipedia":"ja:コーナン",name:"コーナン","name:en":"Kohnan","name:ja":"コーナン",shop:"doityourself"}},"shop/doityourself|ナフコ":{countryCodes:["jp"],tags:{brand:"ナフコ","brand:en":"Nafco","brand:ja":"ナフコ","brand:wikidata":"Q11323981","brand:wikipedia":"ja:ナフコ (ホームセンター)",name:"ナフコ","name:en":"Nafco","name:ja":"ナフコ",shop:"doityourself"}},"shop/doors|Юркас":{countryCodes:["by"],tags:{brand:"Юркас",name:"Юркас",shop:"doors"}},"shop/dry_cleaning|5àsec":{tags:{brand:"5àsec","brand:wikidata":"Q2817899","brand:wikipedia":"fr:5àsec",name:"5àsec",shop:"dry_cleaning"}},"shop/dry_cleaning|Johnsons":{countryCodes:["gb"],matchNames:["johnson","johnsons cleaners"],tags:{brand:"Johnsons","brand:wikidata":"Q6268527","brand:wikipedia":"en:Johnsons Cleaners UK",name:"Johnsons",shop:"dry_cleaning"}},"shop/dry_cleaning|Martinizing Dry Cleaning":{tags:{brand:"Martinizing Dry Cleaning","brand:wikidata":"Q6777169","brand:wikipedia":"en:Martinizing Dry Cleaning",name:"Martinizing Dry Cleaning",shop:"dry_cleaning"}},"shop/dry_cleaning|Tide Cleaners":{countryCodes:["us"],matchNames:["tide","tide dry cleaners"],tags:{brand:"Tide Cleaners","brand:wikidata":"Q66048841",name:"Tide Cleaners",shop:"dry_cleaning"}},"shop/dry_cleaning|Диана":{countryCodes:["ru"],tags:{brand:"Диана","brand:wikidata":"Q62105088",name:"Диана",shop:"dry_cleaning"}},"shop/dry_cleaning|タカケンサンシャイン":{countryCodes:["jp"],matchNames:["タカケンクリーング"],tags:{brand:"タカケンサンシャイン","brand:en":"Takaken Sunshine","brand:ja":"タカケンサンシャイン","brand:wikidata":"Q11315914","brand:wikipedia":"ja:タカケンサンシャイン",name:"タカケンサンシャイン","name:en":"Takaken Sunshine","name:ja":"タカケンサンシャイン",shop:"dry_cleaning"}},"shop/dry_cleaning|ホワイト急便":{countryCodes:["jp"],tags:{brand:"ホワイト急便","brand:en":"White Kyuubin","brand:ja":"ホワイト急便","brand:wikidata":"Q11505557","brand:wikipedia":"ja:日本さわやかグループ",name:"ホワイト急便","name:en":"White Kyuubin","name:ja":"ホワイト急便",shop:"dry_cleaning"}},"shop/dry_cleaning|白洋舎":{countryCodes:["jp"],tags:{brand:"白洋舎","brand:en":"Hakuyosha","brand:wikidata":"Q11579995","brand:wikipedia":"ja:白洋舎",name:"白洋舎","name:en":"Hakuyosha",shop:"dry_cleaning"}},"shop/e-cigarette|Vardex":{tags:{brand:"Vardex",name:"Vardex",shop:"e-cigarette"}},"shop/electrical|Kafkas":{countryCodes:["gr"],tags:{brand:"Kafkas","brand:wikidata":"Q68201770",name:"Kafkas",shop:"electrical"}},"shop/electronics|Apple Store":{nomatch:["amenity/bank|Apple Bank"],tags:{brand:"Apple Store","brand:wikidata":"Q421253","brand:wikipedia":"en:Apple Store",name:"Apple Store",shop:"electronics",short_name:"Apple"}},"shop/electronics|BCC":{countryCodes:["nl"],nomatch:["amenity/bank|Bcc"],tags:{brand:"BCC",name:"BCC",shop:"electronics"}},"shop/electronics|Batteries Plus Bulbs":{countryCodes:["us"],matchNames:["batteries plus"],tags:{brand:"Batteries Plus Bulbs","brand:wikidata":"Q17005157","brand:wikipedia":"en:Batteries Plus Bulbs",name:"Batteries Plus Bulbs",shop:"electronics"}},"shop/electronics|Best Buy":{nomatch:["amenity/vending_machine|Best Buy Express","shop/mobile_phone|Best Buy Mobile"],tags:{brand:"Best Buy","brand:wikidata":"Q533415","brand:wikipedia":"en:Best Buy",name:"Best Buy",shop:"electronics"}},"shop/electronics|Boulanger":{countryCodes:["fr"],tags:{brand:"Boulanger","brand:wikidata":"Q2921695","brand:wikipedia":"fr:Boulanger (entreprise)",name:"Boulanger",shop:"electronics"}},"shop/electronics|CeX":{countryCodes:["au","es","gb","ie","in","it","mx","nl","pl","pt"],tags:{brand:"CeX","brand:wikidata":"Q5055676","brand:wikipedia":"en:CeX (company)",name:"CeX",shop:"electronics"}},"shop/electronics|Coolblue":{countryCodes:["be","nl"],tags:{brand:"Coolblue","brand:wikidata":"Q4992516","brand:wikipedia":"en:Coolblue",name:"Coolblue",shop:"electronics"}},"shop/electronics|Currys PC World":{countryCodes:["gb","ie"],matchNames:["currys","pc world"],tags:{brand:"Currys PC World","brand:wikidata":"Q3246464","brand:wikipedia":"en:Currys",name:"Currys PC World",shop:"electronics"}},"shop/electronics|Darty":{countryCodes:["fr"],tags:{brand:"Darty","brand:wikidata":"Q2439098","brand:wikipedia":"fr:Darty",name:"Darty",shop:"electronics"}},"shop/electronics|Elektra":{countryCodes:["gt","hn","pa","pe","sv"],tags:{brand:"Elektra","brand:wikidata":"Q1142753","brand:wikipedia":"es:Grupo Elektra",name:"Elektra",shop:"electronics"}},"shop/electronics|Elgiganten":{countryCodes:["dk","se"],tags:{brand:"Elgiganten","brand:wikidata":"Q17050121","brand:wikipedia":"en:Elgiganten",name:"Elgiganten",shop:"electronics"}},"shop/electronics|Euronics":{tags:{brand:"Euronics","brand:wikidata":"Q184860","brand:wikipedia":"en:Euronics",name:"Euronics",shop:"electronics"}},"shop/electronics|Expert":{tags:{brand:"Expert","brand:wikidata":"Q680990","brand:wikipedia":"en:Expert (company)",name:"Expert",shop:"electronics"}},"shop/electronics|Fry's Electronics":{countryCodes:["us"],tags:{brand:"Fry's Electronics","brand:wikidata":"Q5506545","brand:wikipedia":"en:Fry's Electronics",name:"Fry's Electronics",shop:"electronics",short_name:"Fry's"}},"shop/electronics|Frávega":{countryCodes:["ar"],tags:{brand:"Frávega","brand:wikidata":"Q5401467","brand:wikipedia":"es:Frávega",name:"Frávega",shop:"electronics"}},"shop/electronics|Garbarino":{tags:{brand:"Garbarino","brand:wikidata":"Q5875270","brand:wikipedia":"es:Garbarino",name:"Garbarino",shop:"electronics"}},"shop/electronics|Gigantti":{countryCodes:["fi"],tags:{brand:"Gigantti","brand:wikidata":"Q42512186","brand:wikipedia":"fi:Gigantti (tavarataloketju)",name:"Gigantti",shop:"electronics"}},"shop/electronics|Hartlauer":{countryCodes:["at"],tags:{brand:"Hartlauer","brand:wikidata":"Q1587223","brand:wikipedia":"de:Hartlauer",name:"Hartlauer",shop:"electronics"}},"shop/electronics|Interdiscount":{countryCodes:["ch"],tags:{brand:"Interdiscount","brand:wikidata":"Q1665980","brand:wikipedia":"de:Interdiscount",name:"Interdiscount",shop:"electronics"}},"shop/electronics|JB Hi-Fi":{countryCodes:["au","nz"],tags:{brand:"JB Hi-Fi","brand:wikidata":"Q3310113","brand:wikipedia":"en:JB Hi-Fi",name:"JB Hi-Fi",shop:"electronics"}},"shop/electronics|Jaycar":{countryCodes:["au","nz"],tags:{brand:"Jaycar","brand:wikidata":"Q6167713","brand:wikipedia":"en:Jaycar",name:"Jaycar",shop:"electronics"}},"shop/electronics|Kjell & Company":{countryCodes:["no","se"],matchNames:["kjell och company"],tags:{brand:"Kjell & Company","brand:wikidata":"Q6419332","brand:wikipedia":"en:Kjell & Company",name:"Kjell & Company",shop:"electronics"}},"shop/electronics|Komputronik":{countryCodes:["pl"],tags:{brand:"Komputronik","brand:wikidata":"Q11742085","brand:wikipedia":"pl:Komputronik",name:"Komputronik",shop:"electronics"}},"shop/electronics|LG":{matchNames:["lg electronics"],tags:{brand:"LG","brand:wikidata":"Q162345","brand:wikipedia":"en:LG Electronics",name:"LG",shop:"electronics"}},"shop/electronics|La Curacao":{tags:{brand:"La Curacao","brand:wikidata":"Q5194599","brand:wikipedia":"en:Curacao (retail store)",name:"La Curacao",shop:"electronics"}},"shop/electronics|MDA":{countryCodes:["fr"],tags:{brand:"MDA",name:"MDA",shop:"electronics"}},"shop/electronics|Maplin":{countryCodes:["gb"],tags:{brand:"Maplin","brand:wikidata":"Q6754124","brand:wikipedia":"en:Maplin (retailer)",name:"Maplin",shop:"electronics"}},"shop/electronics|Media Expert":{countryCodes:["pl"],tags:{brand:"Media Expert","brand:wikidata":"Q11776794","brand:wikipedia":"pl:Media Expert",name:"Media Expert",shop:"electronics"}},"shop/electronics|Media Markt":{tags:{brand:"Media Markt","brand:wikidata":"Q2381223","brand:wikipedia":"en:Media Markt",name:"Media Markt",shop:"electronics"}},"shop/electronics|Medimax":{countryCodes:["de"],tags:{brand:"Medimax","brand:wikidata":"Q62872450",name:"Medimax",shop:"electronics"}},"shop/electronics|Microsoft Store":{tags:{brand:"Microsoft Store","brand:wikidata":"Q1688786","brand:wikipedia":"en:Microsoft Store",name:"Microsoft Store",shop:"electronics",short_name:"Microsoft"}},"shop/electronics|Musimundo":{countryCodes:["ar"],tags:{brand:"Musimundo","brand:wikidata":"Q6034719","brand:wikipedia":"es:Musimundo",name:"Musimundo",shop:"electronics"}},"shop/electronics|Neonet":{countryCodes:["pl"],tags:{brand:"Neonet","brand:wikidata":"Q11790622","brand:wikipedia":"pl:Neonet",name:"Neonet",shop:"electronics"}},"shop/electronics|P. C. Richard & Son":{countryCodes:["us"],matchNames:["pc richard"],tags:{brand:"P. C. Richard & Son","brand:wikidata":"Q7117161","brand:wikipedia":"en:P. C. Richard & Son",name:"P. C. Richard & Son",shop:"electronics"}},"shop/electronics|Power":{countryCodes:["dk","fi","no","se"],nomatch:["amenity/fuel|Power"],tags:{brand:"Power","brand:wikidata":"Q20857751","brand:wikipedia":"fi:Power",name:"Power",shop:"electronics"}},"shop/electronics|RTV Euro AGD":{countryCodes:["pl"],tags:{brand:"RTV Euro AGD","brand:wikidata":"Q7277895","brand:wikipedia":"pl:RTV Euro AGD",name:"RTV Euro AGD",shop:"electronics"}},"shop/electronics|RadioShack":{tags:{brand:"RadioShack","brand:wikidata":"Q1195490","brand:wikipedia":"en:RadioShack",name:"RadioShack",shop:"electronics"}},"shop/electronics|Robert Dyas":{countryCodes:["gb"],tags:{brand:"Robert Dyas","brand:wikidata":"Q7343720","brand:wikipedia":"en:Robert Dyas",name:"Robert Dyas",shop:"electronics"}},"shop/electronics|Samsung":{tags:{brand:"Samsung","brand:wikidata":"Q20718","brand:wikipedia":"en:Samsung Electronics",name:"Samsung",shop:"electronics"}},"shop/electronics|Saturn":{countryCodes:["at","de","lu","pl"],tags:{brand:"Saturn","brand:wikidata":"Q2543504","brand:wikipedia":"en:Saturn (retailer)",name:"Saturn",shop:"electronics"}},"shop/electronics|Sony":{tags:{brand:"Sony","brand:wikidata":"Q41187","brand:wikipedia":"en:Sony",name:"Sony",shop:"electronics"}},"shop/electronics|Sony Centre":{matchNames:["sony center"],tags:{brand:"Sony Centre","brand:wikidata":"Q3437496","brand:wikipedia":"en:Sony Centre",name:"Sony Centre",shop:"electronics"}},"shop/electronics|Teknikmagasinet":{countryCodes:["fi","no","se"],tags:{brand:"Teknikmagasinet","brand:wikidata":"Q3357520","brand:wikipedia":"en:Teknikmagasinet",name:"Teknikmagasinet",shop:"electronics"}},"shop/electronics|The Good Guys":{countryCodes:["au"],tags:{brand:"The Good Guys","brand:wikidata":"Q7737217","brand:wikipedia":"en:The Good Guys (Australian company)",name:"The Good Guys",shop:"electronics"}},"shop/electronics|The Source":{countryCodes:["ca"],tags:{brand:"The Source","brand:wikidata":"Q3212934","brand:wikipedia":"en:The Source (retailer)",name:"The Source",shop:"electronics"}},"shop/electronics|Trony":{countryCodes:["it"],tags:{brand:"Trony","brand:wikidata":"Q3999692","brand:wikipedia":"it:Trony",name:"Trony",shop:"electronics"}},"shop/electronics|Unieuro":{countryCodes:["it"],tags:{brand:"Unieuro","brand:wikidata":"Q4004687","brand:wikipedia":"en:Unieuro",name:"Unieuro",shop:"electronics"}},"shop/electronics|Worten":{countryCodes:["es","pt"],tags:{brand:"Worten","brand:wikidata":"Q10394039","brand:wikipedia":"pt:Worten",name:"Worten",shop:"electronics"}},"shop/electronics|b8ta":{countryCodes:["us"],tags:{brand:"b8ta","brand:wikidata":"Q55604609","brand:wikipedia":"en:B8ta",name:"b8ta",shop:"electronics"}},"shop/electronics|М.Видео":{countryCodes:["ru"],tags:{brand:"М.Видео","brand:en":"M.video","brand:wikidata":"Q6558800","brand:wikipedia":"en:M.video",name:"М.Видео","name:en":"M.video",shop:"electronics"}},"shop/electronics|Фокстрот":{countryCodes:["ua"],tags:{brand:"Фокстрот","brand:wikidata":"Q16721578","brand:wikipedia":"uk:Фокстрот (торгова мережа)",name:"Фокстрот",shop:"electronics"}},"shop/electronics|Эксперт":{countryCodes:["ru"],tags:{brand:"Эксперт","brand:en":"Expert","brand:ru":"Эксперт","brand:wikidata":"Q4530590","brand:wikipedia":"ru:Эксперт (сеть магазинов)",name:"Эксперт","name:en":"Expert","name:ru":"Эксперт",shop:"electronics"}},"shop/electronics|Эльдорадо":{countryCodes:["ru","ua"],tags:{brand:"Эльдорадо","brand:wikidata":"Q4531492","brand:wikipedia":"ru:Эльдорадо (сеть магазинов)",name:"Эльдорадо",shop:"electronics"}},"shop/electronics|あきばお〜":{countryCodes:["jp"],matchNames:["あきばお~"],tags:{brand:"あきばお〜","brand:en":"Akibaoo","brand:ja":"あきばお〜","brand:wikidata":"Q11257009","brand:wikipedia":"ja:あきばお〜",name:"あきばお〜","name:en":"Akibaoo","name:ja":"あきばお〜",shop:"electronics"}},"shop/electronics|エディオン":{countryCodes:["jp"],tags:{brand:"エディオン","brand:en":"EDION","brand:ja":"エディオン","brand:wikidata":"Q11290252","brand:wikipedia":"ja:エディオン",name:"エディオン","name:en":"EDION","name:ja":"エディオン",shop:"electronics"}},"shop/electronics|ケーズデンキ":{countryCodes:["jp"],matchTags:["shop/appliance"],tags:{brand:"ケーズデンキ","brand:en":"K's Denki","brand:ja":"ケーズデンキ","brand:wikidata":"Q6322472","brand:wikipedia":"ja:ケーズホールディングス",name:"ケーズデンキ","name:en":"K's Denki","name:ja":"ケーズデンキ",shop:"electronics"}},"shop/electronics|コジマ":{countryCodes:["jp"],tags:{brand:"コジマ","brand:en":"Kojima","brand:ja":"コジマ","brand:wikidata":"Q11302052","brand:wikipedia":"ja:コジマ",name:"コジマ","name:en":"Kojima","name:ja":"コジマ",shop:"electronics"}},"shop/electronics|ソフマップ":{countryCodes:["jp"],tags:{brand:"ソフマップ","brand:en":"Sofmap","brand:ja":"ソフマップ","brand:wikidata":"Q7553789","brand:wikipedia":"ja:ソフマップ",name:"ソフマップ","name:en":"Sofmap","name:ja":"ソフマップ",shop:"electronics"}},"shop/electronics|ノジマ":{countryCodes:["jp"],tags:{brand:"ノジマ","brand:en":"Nojima","brand:ja":"ノジマ","brand:wikidata":"Q11325660","brand:wikipedia":"ja:ノジマ",name:"ノジマ","name:en":"Nojima","name:ja":"ノジマ",shop:"electronics"}},"shop/electronics|ビックカメラ":{countryCodes:["jp"],tags:{brand:"ビックカメラ","brand:en":"Bic Camera","brand:ja":"ビックカメラ","brand:wikidata":"Q4903531","brand:wikipedia":"ja:ビックカメラ",name:"ビックカメラ","name:en":"Bic Camera","name:ja":"ビックカメラ",shop:"electronics"}},"shop/electronics|ヤマダ電機":{countryCodes:["jp"],tags:{brand:"ヤマダ電機","brand:en":"Yamada Denki","brand:ja":"ヤマダ電機","brand:wikidata":"Q1096390","brand:wikipedia":"en:Yamada Denki",name:"ヤマダ電機","name:en":"Yamada Denki","name:ja":"ヤマダ電機",shop:"electronics"}},"shop/electronics|ヨドバシカメラ":{countryCodes:["jp"],tags:{brand:"ヨドバシカメラ","brand:en":"Yodobashi Camera","brand:ja":"ヨドバシカメラ","brand:wikidata":"Q168467","brand:wikipedia":"ja:ヨドバシカメラ",name:"ヨドバシカメラ","name:en":"Yodobashi Camera","name:ja":"ヨドバシカメラ",shop:"electronics"}},"shop/electronics|全國電子":{countryCodes:["tw"],tags:{brand:"全國電子","brand:en":"E-life Mall","brand:wikidata":"Q10891540","brand:wikipedia":"zh:全國電子",name:"全國電子","name:en":"E-life Mall",shop:"electronics"}},"shop/electronics|燦坤3C":{countryCodes:["tw"],tags:{brand:"燦坤3C","brand:en":"Tsannkuen 3C","brand:wikidata":"Q11569285","brand:wikipedia":"zh:燦坤",name:"燦坤3C","name:en":"Tsannkuen 3C",shop:"electronics"}},"shop/erotic|Adam & Eve":{countryCodes:["ca","pe","us"],tags:{brand:"Adam & Eve","brand:wikidata":"Q4678604","brand:wikipedia":"en:Adam & Eve (company)",name:"Adam & Eve",shop:"erotic"}},"shop/erotic|Amazing Intimate Essentials":{countryCodes:["us"],tags:{brand:"Amazing Intimate Essentials","brand:wikidata":"Q66305936",name:"Amazing Intimate Essentials",shop:"erotic",short_name:"Amazing.net"}},"shop/erotic|Ann Summers":{countryCodes:["gb","ie"],tags:{brand:"Ann Summers","brand:wikidata":"Q579524","brand:wikipedia":"en:Ann Summers",name:"Ann Summers",shop:"erotic"}},"shop/erotic|Orion":{countryCodes:["at","de"],tags:{brand:"Orion","brand:wikidata":"Q1609577","brand:wikipedia":"de:Orion (Erotik)",name:"Orion",shop:"erotic"}},"shop/erotic|Pulse and Cocktails":{countryCodes:["gb"],tags:{brand:"Pulse and Cocktails","brand:wikidata":"Q7259672","brand:wikipedia":"en:Pulse and Cocktails",name:"Pulse and Cocktails",shop:"erotic"}},"shop/fabric|Mondial Tissus":{countryCodes:["fr"],matchTags:["shop/curtain","shop/department_store"],tags:{brand:"Mondial Tissus","brand:wikidata":"Q17635288","brand:wikipedia":"fr:Mondial Tissus",name:"Mondial Tissus",shop:"fabric"}},"shop/fashion_accessories|Brighton Collectibles":{countryCodes:["us"],matchNames:["brighton"],tags:{brand:"Brighton Collectibles","brand:wikidata":"Q4967623","brand:wikipedia":"en:Brighton Collectibles",name:"Brighton Collectibles",shop:"fashion_accessories"}},"shop/fashion_accessories|Bvlgari":{matchNames:["bulgari"],tags:{brand:"Bulgari","brand:wikidata":"Q752515","brand:wikipedia":"en:Bulgari",name:"Bvlgari",shop:"fashion_accessories"}},"shop/fashion_accessories|Claire's":{matchTags:["shop/jewelry"],tags:{brand:"Claire's","brand:wikidata":"Q2974996","brand:wikipedia":"en:Claire's",name:"Claire's",shop:"fashion_accessories"}},"shop/fashion_accessories|Radley London":{countryCodes:["gb"],tags:{brand:"Radley London","brand:wikidata":"Q7281436",name:"Radley London",shop:"fashion_accessories",short_name:"Radley"}},"shop/fashion_accessories|Van Cleef & Arpels":{matchNames:["van cleef & arples"],tags:{brand:"Van Cleef & Arpels","brand:wikidata":"Q2708181","brand:wikipedia":"en:Van Cleef & Arpels",name:"Van Cleef & Arpels",shop:"fashion_accessories"}},"shop/flooring|Floor & Decor":{countryCodes:["us"],tags:{brand:"Floor & Decor","brand:wikidata":"Q56280964","brand:wikipedia":"en:Floor & Decor",name:"Floor & Decor",shop:"flooring"}},"shop/florist|Blume 2000":{countryCodes:["de"],tags:{brand:"Blume 2000","brand:wikidata":"Q886166","brand:wikipedia":"de:Blume 2000",name:"Blume 2000",shop:"florist"}},"shop/florist|Blumen Risse":{countryCodes:["de"],tags:{brand:"Blumen Risse","brand:wikidata":"Q886177","brand:wikipedia":"de:Blumen Risse",name:"Blumen Risse",shop:"florist"}},"shop/florist|Holland Blumen Mark":{countryCodes:["at"],matchNames:["holland blumen"],tags:{brand:"Holland Blumen Mark","brand:wikidata":"Q1624739","brand:wikipedia":"de:Holland Blumen Mark",name:"Holland Blumen Mark",shop:"florist"}},"shop/florist|Interflora":{countryCodes:["fr","gb","no","se"],tags:{brand:"Interflora","brand:wikidata":"Q692179","brand:wikipedia":"en:Interflora",name:"Interflora",shop:"florist"}},"shop/florist|Monceau Fleurs":{countryCodes:["be","fr"],tags:{brand:"Monceau Fleurs","brand:wikidata":"Q17629431","brand:wikipedia":"fr:Emova Group",name:"Monceau Fleurs",shop:"florist"}},"shop/florist|Азалия":{tags:{brand:"Азалия",name:"Азалия",shop:"florist"}},"shop/florist|Мосцветторг":{countryCodes:["ru"],tags:{brand:"Мосцветторг",name:"Мосцветторг",shop:"florist"}},"shop/frame|Aaron Brothers":{countryCodes:["us"],matchNames:["aaron brothers art & framing","aaron brothers custom framing"],tags:{brand:"Aaron Brothers","brand:wikidata":"Q64979251",name:"Aaron Brothers",shop:"frame"}},"shop/frozen_food|Dream Dinners":{countryCodes:["us"],matchTags:["amenity/fast_food","amenity/restaurant"],tags:{brand:"Dream Dinners","brand:wikidata":"Q5306355","brand:wikipedia":"en:Dream Dinners",name:"Dream Dinners",opening_hours:"\"by appointment\"",shop:"frozen_food"}},"shop/frozen_food|Farmfoods":{countryCodes:["gb"],matchTags:["shop/convenience","shop/supermarket"],tags:{brand:"Farmfoods","brand:wikidata":"Q5435841","brand:wikipedia":"en:Farmfoods",name:"Farmfoods",shop:"frozen_food"}},"shop/frozen_food|Fulton's Foods":{countryCodes:["gb"],matchTags:["shop/convenience","shop/supermarket"],tags:{brand:"Fulton's Foods","brand:wikidata":"Q6112633","brand:wikipedia":"en:Fulton's Foods",name:"Fulton's Foods",shop:"frozen_food"}},"shop/frozen_food|Iceland":{matchTags:["shop/convenience"],tags:{brand:"Iceland","brand:wikidata":"Q721810","brand:wikipedia":"en:Iceland (supermarket)",name:"Iceland",shop:"frozen_food"}},"shop/frozen_food|Picard":{countryCodes:["be","fr","lu"],tags:{brand:"Picard","brand:wikidata":"Q3382454","brand:wikipedia":"en:Picard Surgelés",name:"Picard",shop:"frozen_food"}},"shop/frozen_food|Thiriet":{countryCodes:["fr"],tags:{brand:"Thiriet","brand:wikidata":"Q3524695","brand:wikipedia":"fr:Thiriet (entreprise)",name:"Thiriet",shop:"frozen_food"}},"shop/funeral_directors|PFG":{countryCodes:["fr"],tags:{brand:"PFG","brand:wikidata":"Q3396087","brand:wikipedia":"fr:Pompes funèbres générales",name:"PFG",official_name:"Pompes Funèbres Générales",shop:"funeral_directors"}},"shop/funeral_directors|Roblot":{countryCodes:["fr"],tags:{brand:"Roblot","brand:wikidata":"Q63247414",name:"Roblot",shop:"funeral_directors"}},"shop/funeral_directors|Roc-Eclerc":{countryCodes:["fr"],tags:{brand:"Roc-Eclerc","brand:wikidata":"Q62558102",name:"Roc-Eclerc",shop:"funeral_directors"}},"shop/funeral_directors|The Co-operative Funeralcare":{countryCodes:["gb"],tags:{brand:"The Co-operative Funeralcare","brand:wikidata":"Q7726521","brand:wikipedia":"en:Co-op Funeralcare",name:"The Co-operative Funeralcare",shop:"funeral_directors"}},"shop/furniture|AHF":{countryCodes:["gb"],tags:{brand:"AHF","brand:wikidata":"Q50132485",name:"AHF",shop:"furniture"}},"shop/furniture|Aaron's":{countryCodes:["ca","us"],tags:{brand:"Aaron's","brand:wikidata":"Q10397787","brand:wikipedia":"en:Aaron's, Inc.",name:"Aaron's",shop:"furniture"}},"shop/furniture|American Signature Furniture":{countryCodes:["us"],tags:{brand:"American Signature Furniture","brand:wikidata":"Q63859411",name:"American Signature Furniture",shop:"furniture"}},"shop/furniture|Arhaus":{countryCodes:["us"],tags:{brand:"Arhaus","brand:wikidata":"Q35689887","brand:wikipedia":"en:Arhaus",name:"Arhaus",shop:"furniture"}},"shop/furniture|Ashley HomeStore":{countryCodes:["ca","us"],matchNames:["ashley furniture homestore"],tags:{alt_name:"Ashley Furniture",brand:"Ashley HomeStore","brand:wikidata":"Q4805437","brand:wikipedia":"en:Ashley HomeStore",name:"Ashley HomeStore",shop:"furniture"}},"shop/furniture|Asko":{countryCodes:["fi"],tags:{brand:"Asko","brand:wikidata":"Q11853132","brand:wikipedia":"fi:Asko",name:"Asko",shop:"furniture"}},"shop/furniture|Askona":{countryCodes:["ru"],tags:{brand:"Askona","brand:wikidata":"Q4071319","brand:wikipedia":"ru:Аскона (компания)",name:"Askona",shop:"furniture"}},"shop/furniture|Black Red White":{tags:{brand:"Black Red White","brand:wikidata":"Q4921546","brand:wikipedia":"en:Black Red White",name:"Black Red White",shop:"furniture"}},"shop/furniture|BoConcept":{tags:{brand:"BoConcept","brand:wikidata":"Q11338915","brand:wikipedia":"en:BoConcept",name:"BoConcept",shop:"furniture"}},"shop/furniture|Bob's Discount Furniture":{countryCodes:["us"],tags:{brand:"Bob's Discount Furniture","brand:wikidata":"Q4931582","brand:wikipedia":"en:Bob's Discount Furniture",name:"Bob's Discount Furniture",shop:"furniture"}},"shop/furniture|Bodzio":{countryCodes:["pl"],tags:{brand:"Bodzio","brand:wikidata":"Q20034845","brand:wikipedia":"pl:Fabryka Mebli Bodzio",name:"Bodzio",shop:"furniture"}},"shop/furniture|But":{countryCodes:["fr"],tags:{brand:"But","brand:wikidata":"Q18720442","brand:wikipedia":"en:BUT (retailer)",name:"But",shop:"furniture"}},"shop/furniture|Cabinets To Go":{countryCodes:["us"],tags:{brand:"Cabinets To Go","brand:wikidata":"Q25245346","brand:wikipedia":"en:Cabinets To Go",name:"Cabinets To Go",shop:"furniture"}},"shop/furniture|Casa":{countryCodes:["be","ch","es","fr","it","lu","pt"],matchTags:["shop/interior_decoration"],tags:{brand:"Casa","brand:wikidata":"Q1991755","brand:wikipedia":"fr:Casa (enseigne)",name:"Casa",shop:"furniture"}},"shop/furniture|Conforama":{countryCodes:["ch","es","fr","it","lu"],tags:{brand:"Conforama","brand:wikidata":"Q541134","brand:wikipedia":"en:Conforama",name:"Conforama",shop:"furniture"}},"shop/furniture|Crate & Barrel":{countryCodes:["us"],tags:{brand:"Crate & Barrel","brand:wikidata":"Q5182604","brand:wikipedia":"en:Crate & Barrel",name:"Crate & Barrel",shop:"furniture"}},"shop/furniture|DFS":{countryCodes:["gb"],tags:{brand:"DFS","brand:wikidata":"Q5204927","brand:wikipedia":"en:DFS Furniture",name:"DFS",shop:"furniture"}},"shop/furniture|Dunelm":{countryCodes:["gb"],matchNames:["dunelm hill"],tags:{brand:"Dunelm","brand:wikidata":"Q5315020","brand:wikipedia":"en:Dunelm Group",name:"Dunelm",shop:"furniture"}},"shop/furniture|Dänisches Bettenlager":{countryCodes:["at","de"],matchTags:["shop/bed"],tags:{brand:"Dänisches Bettenlager","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"Dänisches Bettenlager",shop:"furniture"}},"shop/furniture|Ethan Allen":{countryCodes:["ca","us"],tags:{brand:"Ethan Allen","brand:wikidata":"Q5402870","brand:wikipedia":"en:Ethan Allen (company)",name:"Ethan Allen",shop:"furniture"}},"shop/furniture|Fly":{countryCodes:["fr"],tags:{brand:"Fly","brand:wikidata":"Q1389184","brand:wikipedia":"fr:Fly (entreprise)",name:"Fly",shop:"furniture"}},"shop/furniture|Freedom":{countryCodes:["au"],matchNames:["freedom furniture"],tags:{brand:"Freedom","brand:wikidata":"Q5500546","brand:wikipedia":"en:Freedom Furniture",name:"Freedom",shop:"furniture"}},"shop/furniture|Furniture Village":{countryCodes:["gb"],tags:{brand:"Furniture Village","brand:wikidata":"Q5509685","brand:wikipedia":"en:Furniture Village",name:"Furniture Village",shop:"furniture"}},"shop/furniture|HSL":{countryCodes:["gb"],tags:{brand:"HSL","brand:wikidata":"Q64284324",name:"HSL",official_name:"High Seat Limited",shop:"furniture"}},"shop/furniture|Harveys":{countryCodes:["gb"],nomatch:["amenity/fast_food|Harvey's"],tags:{brand:"Harveys","brand:wikidata":"Q5677754","brand:wikipedia":"en:Harveys Furniture",name:"Harveys",shop:"furniture"}},"shop/furniture|Havertys":{countryCodes:["us"],tags:{brand:"Havertys","brand:wikidata":"Q5683881","brand:wikipedia":"en:Havertys",name:"Havertys",shop:"furniture"}},"shop/furniture|IKEA":{tags:{brand:"IKEA","brand:wikidata":"Q54078","brand:wikipedia":"en:IKEA",name:"IKEA",shop:"furniture"}},"shop/furniture|Isku":{countryCodes:["fi"],tags:{brand:"Isku","brand:wikidata":"Q11865127","brand:wikipedia":"fi:Isku (yritys)",name:"Isku",shop:"furniture"}},"shop/furniture|JYSK":{tags:{brand:"JYSK","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"JYSK",shop:"furniture"}},"shop/furniture|Jerome's Furniture":{countryCodes:["us"],tags:{brand:"Jerome's Furniture","brand:wikidata":"Q16997693","brand:wikipedia":"en:Jerome's",name:"Jerome's Furniture",shop:"furniture",short_name:"Jerome's"}},"shop/furniture|Kika":{countryCodes:["at"],tags:{brand:"Kika","brand:wikidata":"Q256456","brand:wikipedia":"de:Kika (Möbelhaus)",name:"Kika",shop:"furniture"}},"shop/furniture|Kwantum":{countryCodes:["nl"],tags:{brand:"Kwantum","brand:wikidata":"Q2262591","brand:wikipedia":"nl:Kwantum (winkelketen)",name:"Kwantum",shop:"furniture"}},"shop/furniture|La-Z-Boy":{countryCodes:["ca","us"],matchNames:["la-z-boy furniture gallery"],tags:{brand:"La-Z-Boy","brand:wikidata":"Q6391583","brand:wikipedia":"en:La-Z-Boy",name:"La-Z-Boy",shop:"furniture"}},"shop/furniture|Laura Ashley Home":{countryCodes:["gb"],tags:{brand:"Laura Ashley","brand:wikidata":"Q1523089","brand:wikipedia":"en:Laura Ashley plc",name:"Laura Ashley Home",shop:"furniture"}},"shop/furniture|Leen Bakker":{countryCodes:["nl"],tags:{brand:"Leen Bakker","brand:wikidata":"Q3333662","brand:wikipedia":"nl:Leen Bakker",name:"Leen Bakker",shop:"furniture"}},"shop/furniture|Leiner":{countryCodes:["at"],tags:{brand:"Leiner","brand:wikidata":"Q1661472","brand:wikipedia":"de:Rudolf Leiner (Unternehmen)",name:"Leiner",shop:"furniture"}},"shop/furniture|LoveSac":{countryCodes:["us"],tags:{brand:"LoveSac","brand:wikidata":"Q6690181","brand:wikipedia":"en:LoveSac",name:"LoveSac",shop:"furniture"}},"shop/furniture|Maisons du Monde":{countryCodes:["be","ch","de","es","fr","gb","it","lu"],tags:{brand:"Maisons du Monde","brand:wikidata":"Q3280364","brand:wikipedia":"fr:Maisons du Monde",name:"Maisons du Monde",shop:"furniture"}},"shop/furniture|Möbelix":{countryCodes:["at","cz","hu","sk"],tags:{brand:"Möbelix","brand:wikidata":"Q877547","brand:wikipedia":"hu:Möbelix",name:"Möbelix",shop:"furniture"}},"shop/furniture|Mömax":{countryCodes:["at","de","hu","si"],tags:{brand:"Mömax","brand:wikidata":"Q56388481","brand:wikipedia":"hu:Mömax",name:"Mömax",shop:"furniture"}},"shop/furniture|Oak Furnitureland":{countryCodes:["gb"],tags:{brand:"Oak Furnitureland","brand:wikidata":"Q16959724","brand:wikipedia":"en:Oak Furniture Land",name:"Oak Furnitureland",shop:"furniture"}},"shop/furniture|Poltronesofà":{countryCodes:["be","ch","cy","fr","it","mt"],tags:{brand:"Poltronesofà","brand:wikidata":"Q80833069",name:"Poltronesofà",shop:"furniture"}},"shop/furniture|Pottery Barn":{countryCodes:["au","ca","mx","ph","us"],tags:{brand:"Pottery Barn","brand:wikidata":"Q3400126","brand:wikipedia":"en:Pottery Barn",name:"Pottery Barn",shop:"furniture"}},"shop/furniture|Raymour & Flanigan":{countryCodes:["us"],tags:{brand:"Raymour & Flanigan","brand:wikidata":"Q7299290","brand:wikipedia":"en:Raymour & Flanigan",name:"Raymour & Flanigan",shop:"furniture"}},"shop/furniture|Rent-A-Center":{countryCodes:["mx","us"],tags:{brand:"Rent-A-Center","brand:wikidata":"Q7313497","brand:wikipedia":"en:Rent-A-Center",name:"Rent-A-Center",shop:"furniture"}},"shop/furniture|Restoration Hardware":{countryCodes:["ca","us"],tags:{brand:"Restoration Hardware","brand:wikidata":"Q7316207","brand:wikipedia":"en:Restoration Hardware",name:"Restoration Hardware",shop:"furniture"}},"shop/furniture|Roche Bobois":{tags:{brand:"Roche Bobois","brand:wikidata":"Q3437504","brand:wikipedia":"fr:Roche Bobois",name:"Roche Bobois",shop:"furniture"}},"shop/furniture|Roller":{countryCodes:["de","lu"],tags:{brand:"Roller","brand:wikidata":"Q1621286","brand:wikipedia":"de:Roller (Möbelhaus)",name:"Roller",shop:"furniture"}},"shop/furniture|Rooms To Go":{countryCodes:["us"],tags:{brand:"Rooms To Go","brand:wikidata":"Q7366329","brand:wikipedia":"en:Rooms To Go",name:"Rooms To Go",shop:"furniture"}},"shop/furniture|Rutar":{countryCodes:["at"],tags:{brand:"Rutar","brand:wikidata":"Q22910157","brand:wikipedia":"de:RUTAR Group",name:"Rutar",shop:"furniture"}},"shop/furniture|ScS":{countryCodes:["gb"],tags:{brand:"ScS","brand:wikidata":"Q19654399","brand:wikipedia":"en:ScS",name:"ScS",shop:"furniture"}},"shop/furniture|The Brick":{countryCodes:["ca"],tags:{brand:"The Brick","brand:wikidata":"Q7720000","brand:wikipedia":"en:The Brick",name:"The Brick",shop:"furniture"}},"shop/furniture|Urban Barn":{countryCodes:["ca"],tags:{brand:"Urban Barn","brand:wikidata":"Q62515207",name:"Urban Barn",shop:"furniture"}},"shop/furniture|Value City Furniture":{countryCodes:["us"],tags:{brand:"Value City Furniture","brand:wikidata":"Q63859417",name:"Value City Furniture",shop:"furniture"}},"shop/furniture|XXXLutz":{countryCodes:["at","de"],tags:{brand:"XXXLutz","brand:wikidata":"Q70339467","brand:wikipedia":"de:XXXLutz",name:"XXXLutz",shop:"furniture"}},"shop/furniture|west elm":{tags:{brand:"west elm","brand:wikidata":"Q7985021","brand:wikipedia":"en:Williams-Sonoma",name:"west elm",shop:"furniture"}},"shop/furniture|İstikbal":{countryCodes:["tr"],tags:{brand:"İstikbal","brand:wikidata":"Q6031999","brand:wikipedia":"tr:İstikbal",name:"İstikbal",shop:"furniture"}},"shop/furniture|Много мебели":{countryCodes:["ru"],tags:{brand:"Много мебели",name:"Много мебели",shop:"furniture"}},"shop/furniture|ニトリ":{countryCodes:["jp"],tags:{brand:"ニトリ","brand:en":"Nitori","brand:ja":"ニトリ","brand:wikidata":"Q10801453","brand:wikipedia":"en:Nitori",name:"ニトリ","name:en":"Nitori","name:ja":"ニトリ",shop:"furniture"}},"shop/games|Games Workshop":{countryCodes:["de","fr","gb","nl","us"],tags:{brand:"Games Workshop","brand:wikidata":"Q587270","brand:wikipedia":"en:Games Workshop",name:"Games Workshop",shop:"games"}},"shop/garden_centre|Bellaflora":{countryCodes:["at"],tags:{brand:"Bellaflora","brand:wikidata":"Q815787","brand:wikipedia":"de:Bellaflora",name:"Bellaflora",shop:"garden_centre"}},"shop/garden_centre|Blue Diamond Garden Centres":{tags:{brand:"Blue Diamond Garden Centres","brand:wikidata":"Q81097207",name:"Blue Diamond Garden Centres",shop:"garden_centre"}},"shop/garden_centre|Dehner":{countryCodes:["at","de"],tags:{brand:"Dehner","brand:wikidata":"Q1183029","brand:wikipedia":"de:Dehner",name:"Dehner",shop:"garden_centre"}},"shop/garden_centre|Dobbies":{countryCodes:["gb"],tags:{brand:"Dobbies","brand:wikidata":"Q5286529","brand:wikipedia":"en:Dobbies Garden Centres",name:"Dobbies",shop:"garden_centre"}},"shop/garden_centre|Gamm Vert":{countryCodes:["fr"],tags:{brand:"Gamm Vert","brand:wikidata":"Q3095006","brand:wikipedia":"fr:Gamm Vert",name:"Gamm Vert",shop:"garden_centre"}},"shop/garden_centre|Intratuin":{countryCodes:["be","nl"],tags:{brand:"Intratuin","brand:wikidata":"Q2927176","brand:wikipedia":"nl:Intratuin",name:"Intratuin",shop:"garden_centre"}},"shop/garden_centre|Jardiland":{countryCodes:["fr"],tags:{brand:"Jardiland","brand:wikidata":"Q3162276","brand:wikipedia":"fr:Jardiland",name:"Jardiland",shop:"garden_centre"}},"shop/garden_centre|Otter Garden Centres":{countryCodes:["gb"],tags:{brand:"Otter Garden Centres","brand:wikidata":"Q81095450",name:"Otter Garden Centres",shop:"garden_centre"}},"shop/garden_centre|Point Vert":{countryCodes:["fr"],tags:{brand:"Point Vert","brand:wikidata":"Q16661975","brand:wikipedia":"fr:Magasin vert",name:"Point Vert",shop:"garden_centre"}},"shop/garden_centre|Truffaut":{countryCodes:["fr"],tags:{brand:"Truffaut","brand:wikidata":"Q3162640","brand:wikipedia":"fr:Jardineries Truffaut",name:"Truffaut",shop:"garden_centre"}},"shop/garden_centre|Walmart Garden Center":{tags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Garden Center",shop:"garden_centre"}},"shop/garden_centre|Welkoop":{countryCodes:["nl"],tags:{brand:"Welkoop","brand:wikidata":"Q72799253",name:"Welkoop",shop:"garden_centre"}},"shop/garden_centre|Wyevale":{countryCodes:["gb"],tags:{brand:"Wyevale","brand:wikidata":"Q7735819","brand:wikipedia":"en:Wyevale Garden Centres",name:"Wyevale",shop:"garden_centre"}},"shop/garden_centre|ZG Raiffeisen":{countryCodes:["de"],nomatch:["amenity/fuel|ZG Raiffeisen"],tags:{brand:"ZG Raiffeisen","brand:wikidata":"Q136135","brand:wikipedia":"de:ZG Raiffeisen",name:"ZG Raiffeisen",shop:"garden_centre"}},"shop/gas|Airgas":{countryCodes:["us"],matchTags:["amenity/fuel","shop/fuel","shop/trade"],tags:{brand:"Airgas","brand:wikidata":"Q80635","brand:wikipedia":"en:Airgas",name:"Airgas",shop:"gas"}},"shop/gas|AmeriGas":{countryCodes:["us"],nomatch:["amenity/vending_machine|AmeriGas"],tags:{brand:"AmeriGas","brand:wikidata":"Q23130318","brand:wikipedia":"en:AmeriGas","fuel:lpg":"yes",name:"AmeriGas",shop:"gas"}},"shop/gas|Ferrellgas":{countryCodes:["us"],tags:{brand:"Ferrellgas","brand:wikidata":"Q5445299","brand:wikipedia":"en:Ferrellgas","fuel:lpg":"yes",name:"Ferrellgas",shop:"gas"}},"shop/gift|American Greetings":{countryCodes:["us"],tags:{brand:"American Greetings","brand:wikidata":"Q464767","brand:wikipedia":"en:American Greetings",name:"American Greetings",shop:"gift"}},"shop/gift|Card Factory":{countryCodes:["gb","im"],tags:{brand:"Card Factory","brand:wikidata":"Q5038192","brand:wikipedia":"en:Card Factory",name:"Card Factory",shop:"gift"}},"shop/gift|Carlton Cards":{countryCodes:["ca"],matchNames:["carlton"],tags:{brand:"Carlton Cards","brand:wikidata":"Q5042968","brand:wikipedia":"en:Carlton Cards",name:"Carlton Cards",shop:"gift"}},"shop/gift|Clintons":{countryCodes:["gb"],matchNames:["clinton cards"],tags:{brand:"Clintons","brand:wikidata":"Q5134299","brand:wikipedia":"en:Clintons",name:"Clintons",shop:"gift"}},"shop/gift|Cracker Barrel":{countryCodes:["us"],nomatch:["amenity/restaurant|Cracker Barrel"],tags:{brand:"Cracker Barrel","brand:wikidata":"Q4492609","brand:wikipedia":"en:Cracker Barrel",name:"Cracker Barrel",official_name:"Cracker Barrel Old Country Store",shop:"gift"}},"shop/gift|Disney Store":{countryCodes:["ca","fr","us"],matchNames:["the disney store"],matchTags:["shop/toys"],tags:{brand:"Disney Store","brand:wikidata":"Q1047009","brand:wikipedia":"en:Disney Store",name:"Disney Store",shop:"gift"}},"shop/gift|Edible Arrangements":{countryCodes:["ca","us"],tags:{brand:"Edible Arrangements","brand:wikidata":"Q5337996","brand:wikipedia":"en:Edible Arrangements",name:"Edible Arrangements",shop:"gift"}},"shop/gift|Hallmark":{countryCodes:["ca","gb","us"],matchNames:["hallmark gold crown"],tags:{brand:"Hallmark","brand:wikidata":"Q1521910","brand:wikipedia":"en:Hallmark Cards",name:"Hallmark",shop:"gift"}},"shop/gift|Nanu-Nana":{countryCodes:["at","de"],tags:{brand:"Nanu-Nana","brand:wikidata":"Q1720245","brand:wikipedia":"de:Nanu-Nana",name:"Nanu-Nana",shop:"gift"}},"shop/gift|Papyrus":{countryCodes:["us"],tags:{brand:"Papyrus","brand:wikidata":"Q28222692","brand:wikipedia":"en:Papyrus (company)",name:"Papyrus",shop:"gift"}},"shop/gift|Showcase":{countryCodes:["ca","us"],tags:{brand:"Showcase","brand:wikidata":"Q7503163","brand:wikipedia":"en:Showcase (retailer)",name:"Showcase",shop:"gift"}},"shop/gift|Spencer's":{countryCodes:["ca","us"],tags:{brand:"Spencer Gifts","brand:wikidata":"Q7576055","brand:wikipedia":"en:Spencer Gifts",name:"Spencer's",official_name:"Spencer Gifts",shop:"gift"}},"shop/gift|Things Remembered":{countryCodes:["ca","us"],tags:{brand:"Things Remembered","brand:wikidata":"Q54958287","brand:wikipedia":"en:Things Remembered",name:"Things Remembered",shop:"gift"}},"shop/gift|Wereldwinkel":{countryCodes:["be","nl"],tags:{brand:"Wereldwinkel",name:"Wereldwinkel",shop:"gift"}},"shop/greengrocer|Produce Junction":{countryCodes:["us"],tags:{brand:"Produce Junction","brand:wikidata":"Q60583541",name:"Produce Junction",shop:"greengrocer"}},"shop/hairdresser_supply|Sally Beauty Supply":{countryCodes:["be","ca","cl","de","es","fr","gb","ie","mx","nl","pe","pr","us"],matchNames:["sally beauty"],tags:{brand:"Sally Beauty Supply","brand:wikidata":"Q7405065","brand:wikipedia":"en:Sally Beauty Holdings",name:"Sally Beauty Supply",shop:"hairdresser_supply"}},"shop/hairdresser|Camille Albane":{countryCodes:["fr"],tags:{brand:"Camille Albane","brand:wikidata":"Q62965183",name:"Camille Albane",shop:"hairdresser"}},"shop/hairdresser|Coiff&Co":{countryCodes:["fr"],tags:{brand:"Coiff&Co",name:"Coiff&Co",shop:"hairdresser"}},"shop/hairdresser|Cost Cutters":{countryCodes:["us"],tags:{brand:"Cost Cutters","brand:wikidata":"Q62029366",name:"Cost Cutters",shop:"hairdresser"}},"shop/hairdresser|Dessange":{tags:{brand:"Dessange","brand:wikidata":"Q62979914",name:"Dessange",shop:"hairdresser"}},"shop/hairdresser|Fantastic Sams":{countryCodes:["us"],tags:{brand:"Fantastic Sams","brand:wikidata":"Q5434222","brand:wikipedia":"en:Fantastic Sams",name:"Fantastic Sams",shop:"hairdresser"}},"shop/hairdresser|First Choice Haircutters":{countryCodes:["ca"],tags:{brand:"First Choice Haircutters","brand:wikidata":"Q5452622","brand:wikipedia":"en:First Choice Haircutters",name:"First Choice Haircutters",shop:"hairdresser"}},"shop/hairdresser|Fodrászat":{tags:{brand:"Fodrászat",name:"Fodrászat",shop:"hairdresser"}},"shop/hairdresser|Franck Provost":{countryCodes:["be","fr","pl"],tags:{brand:"Franck Provost","brand:wikidata":"Q62805922","brand:wikipedia":"fr:Franck Provost (Salons de coiffure)",name:"Franck Provost",shop:"hairdresser"}},"shop/hairdresser|Great Clips":{countryCodes:["ca","us"],tags:{brand:"Great Clips","brand:wikidata":"Q5598967","brand:wikipedia":"en:Great Clips",name:"Great Clips",shop:"hairdresser"}},"shop/hairdresser|Hair Cuttery":{countryCodes:["us"],tags:{brand:"Hair Cuttery","brand:wikidata":"Q5639484","brand:wikipedia":"en:Hair Cuttery",name:"Hair Cuttery",shop:"hairdresser"}},"shop/hairdresser|Hair Express":{countryCodes:["de","us"],tags:{brand:"Hair Express","brand:wikidata":"Q57550814",name:"Hair Express",shop:"hairdresser"}},"shop/hairdresser|Hair Studio":{tags:{brand:"Hair Studio",name:"Hair Studio",shop:"hairdresser"}},"shop/hairdresser|Hairkiller":{countryCodes:["at","de","lu"],tags:{brand:"Hairkiller","brand:wikidata":"Q58305998",name:"Hairkiller",shop:"hairdresser"}},"shop/hairdresser|Jean Louis David":{countryCodes:["es","fr","it","pl"],tags:{brand:"Jean Louis David","brand:wikidata":"Q64445174",name:"Jean Louis David",shop:"hairdresser"}},"shop/hairdresser|Kirpykla":{countryCodes:["lt"],tags:{brand:"Kirpykla",name:"Kirpykla",shop:"hairdresser"}},"shop/hairdresser|Klier":{countryCodes:["at","cz","de","sk"],tags:{brand:"Klier","brand:wikidata":"Q1465159","brand:wikipedia":"de:Frisör Klier",name:"Klier",shop:"hairdresser"}},"shop/hairdresser|Klipp":{countryCodes:["at"],tags:{brand:"Klipp","brand:wikidata":"Q1737304","brand:wikipedia":"de:Klipp Frisör",name:"Klipp",shop:"hairdresser"}},"shop/hairdresser|Magicuts":{tags:{brand:"Magicuts",name:"Magicuts",shop:"hairdresser"}},"shop/hairdresser|Marco Aldany":{tags:{brand:"Marco Aldany",name:"Marco Aldany",shop:"hairdresser"}},"shop/hairdresser|Mastercuts":{countryCodes:["ca","us"],tags:{brand:"Mastercuts","brand:wikidata":"Q64026258",name:"Mastercuts",shop:"hairdresser"}},"shop/hairdresser|Pascal Coste":{countryCodes:["fr"],tags:{brand:"Pascal Coste","brand:wikidata":"Q66555630",name:"Pascal Coste",shop:"hairdresser"}},"shop/hairdresser|Saint Algue":{tags:{brand:"Saint Algue","brand:wikidata":"Q62973210",name:"Saint Algue",shop:"hairdresser"}},"shop/hairdresser|Sport Clips":{countryCodes:["ca","us"],matchNames:["sport clips haircuts","sports clips"],tags:{brand:"Sport Clips","brand:wikidata":"Q7579310",name:"Sport Clips",shop:"hairdresser"}},"shop/hairdresser|Super Cut":{tags:{brand:"Super Cut","brand:wikidata":"Q64139077",name:"Super Cut",shop:"hairdresser"}},"shop/hairdresser|Supercuts":{countryCodes:["ca","gb","us"],tags:{brand:"Supercuts","brand:wikidata":"Q7643239","brand:wikipedia":"en:Supercuts",name:"Supercuts",shop:"hairdresser"}},"shop/hairdresser|Tchip":{countryCodes:["fr"],tags:{brand:"Tchip","brand:wikidata":"Q62871250",name:"Tchip",shop:"hairdresser"}},"shop/hairdresser|The Salon at Ulta Beauty":{countryCodes:["us"],tags:{alt_name:"Ulta Salon",brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"The Salon at Ulta Beauty",shop:"hairdresser"}},"shop/hairdresser|Toni & Guy":{tags:{brand:"Toni & Guy","brand:wikidata":"Q324784","brand:wikipedia":"en:Toni & Guy",name:"Toni & Guy",shop:"hairdresser"}},"shop/hairdresser|Top Hair":{countryCodes:["de"],tags:{brand:"Top Hair","brand:wikidata":"Q62523343",name:"Top Hair",shop:"hairdresser"}},"shop/hairdresser|Виктория":{nomatch:["amenity/cafe|Виктория","shop/supermarket|Виктория"],tags:{brand:"Виктория",name:"Виктория",shop:"hairdresser"}},"shop/hairdresser|Елена":{tags:{brand:"Елена",name:"Елена",shop:"hairdresser"}},"shop/hairdresser|Каприз":{countryCodes:["ru","ua"],tags:{brand:"Каприз",name:"Каприз",shop:"hairdresser"}},"shop/hairdresser|Фея":{countryCodes:["ru","ua"],tags:{brand:"Фея",name:"Фея",shop:"hairdresser"}},"shop/hairdresser|Чио Чио":{tags:{brand:"Чио Чио",name:"Чио Чио",shop:"hairdresser"}},"shop/hardware|220 вольт":{countryCodes:["by","ru","ua"],tags:{brand:"220 вольт","brand:en":"220 Volt","brand:ru":"220 вольт","brand:wikidata":"Q18635304","brand:wikipedia":"ru:220 Вольт (компания)",name:"220 вольт","name:en":"220 Volt","name:ru":"220 вольт",shop:"hardware"}},"shop/hardware|Harbor Freight Tools":{countryCodes:["us"],tags:{brand:"Harbor Freight Tools","brand:wikidata":"Q5654601","brand:wikipedia":"en:Harbor Freight Tools",name:"Harbor Freight Tools",shop:"hardware"}},"shop/hardware|Home Hardware":{countryCodes:["ca"],nomatch:["shop/doityourself|Home Hardware Building Centre"],tags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Hardware",shop:"hardware"}},"shop/hardware|K-Rauta":{countryCodes:["fi"],tags:{brand:"K-Rauta","brand:wikidata":"Q4206187","brand:wikipedia":"fi:K-Rauta",name:"K-Rauta",shop:"hardware"}},"shop/hardware|Kodin Terra":{countryCodes:["fi"],tags:{brand:"Kodin Terra","brand:wikidata":"Q11872038","brand:wikipedia":"fi:Kodin Terra",name:"Kodin Terra",shop:"hardware"}},"shop/hardware|True Value":{countryCodes:["us"],tags:{brand:"True Value","brand:wikidata":"Q7847545","brand:wikipedia":"en:True Value",name:"True Value",shop:"hardware"}},"shop/hardware|Würth":{countryCodes:["be","de","fi","fr","it","no"],tags:{brand:"Würth","brand:wikidata":"Q679750","brand:wikipedia":"de:Würth-Gruppe",name:"Würth",shop:"hardware"}},"shop/hardware|Мосхозторг":{countryCodes:["ru"],tags:{brand:"Мосхозторг","brand:wikidata":"Q62499092",name:"Мосхозторг",shop:"hardware"}},"shop/hardware|Хозяин":{countryCodes:["by","ru","ua"],tags:{brand:"Хозяин",name:"Хозяин",shop:"hardware"}},"shop/hardware|ロフト":{countryCodes:["jp"],tags:{brand:"ロフト","brand:en":"Loft","brand:ja":"ロフト","brand:wikidata":"Q5358428","brand:wikipedia":"ja:ロフト (雑貨店)",name:"ロフト","name:en":"Loft","name:ja":"ロフト",shop:"hardware"}},"shop/health_food|Holland & Barrett":{countryCodes:["gb","ie","nl"],matchTags:["shop/chemist","shop/supermarket"],tags:{brand:"Holland & Barrett","brand:wikidata":"Q5880870","brand:wikipedia":"en:Holland & Barrett",name:"Holland & Barrett",shop:"health_food"}},"shop/hearing_aids|Amplifon":{tags:{brand:"Amplifon","brand:wikidata":"Q477222","brand:wikipedia":"en:Amplifon",name:"Amplifon",shop:"hearing_aids"}},"shop/hearing_aids|Audika":{countryCodes:["ch","fr"],tags:{brand:"Audika","brand:wikidata":"Q2870745","brand:wikipedia":"fr:Audika",name:"Audika",shop:"hearing_aids"}},"shop/hearing_aids|Beter Horen":{countryCodes:["nl"],tags:{brand:"Beter Horen",name:"Beter Horen",shop:"hearing_aids"}},"shop/hearing_aids|Geers":{countryCodes:["de","pl"],tags:{brand:"Geers","brand:wikidata":"Q1497707","brand:wikipedia":"de:Geers Hörakustik",name:"Geers",shop:"hearing_aids"}},"shop/hearing_aids|Kind Hörgeräte":{countryCodes:["de"],matchNames:["kind"],tags:{brand:"Kind Hörgeräte","brand:wikidata":"Q43598590","brand:wikipedia":"de:Kind Hörgeräte",name:"Kind Hörgeräte",shop:"hearing_aids"}},"shop/hearing_aids|Miracle-Ear":{countryCodes:["ca","us"],tags:{brand:"Miracle-Ear","brand:wikidata":"Q17108572","brand:wikipedia":"en:Miracle-Ear",name:"Miracle-Ear",shop:"hearing_aids"}},"shop/hearing_aids|Neuroth":{countryCodes:["at","de"],tags:{brand:"Neuroth","brand:wikidata":"Q15836645","brand:wikipedia":"de:Neuroth AG",name:"Neuroth",shop:"hearing_aids"}},"shop/hifi|Bang & Olufsen":{tags:{brand:"Bang & Olufsen","brand:wikidata":"Q790020","brand:wikipedia":"en:Bang & Olufsen",name:"Bang & Olufsen",shop:"hifi"}},"shop/hifi|Bose":{tags:{brand:"Bose","brand:wikidata":"Q328568","brand:wikipedia":"en:Bose Corporation",name:"Bose",shop:"hifi"}},"shop/hifi|Devialet":{tags:{brand:"Devialet","brand:wikidata":"Q3025419","brand:wikipedia":"fr:Devialet",name:"Devialet",shop:"hifi"}},"shop/hifi|Harman Kardon":{tags:{brand:"Harman Kardon","brand:wikidata":"Q1476454","brand:wikipedia":"en:Harman Kardon",name:"Harman Kardon",shop:"hifi"}},"shop/hifi|JBL":{tags:{brand:"JBL","brand:wikidata":"Q1153754","brand:wikipedia":"en:JBL",name:"JBL",shop:"hifi"}},"shop/hobby|アニメイト":{countryCodes:["jp"],tags:{brand:"アニメイト","brand:en":"Animate","brand:ja":"アニメイト","brand:wikidata":"Q1041890","brand:wikipedia":"ja:アニメイト",name:"アニメイト","name:en":"Animate","name:ja":"アニメイト",shop:"hobby"}},"shop/houseware|At Home":{countryCodes:["us"],matchNames:["garden ridge"],tags:{brand:"At Home","brand:wikidata":"Q5522290","brand:wikipedia":"en:At Home (store)",name:"At Home",shop:"houseware"}},"shop/houseware|Bed Bath & Beyond":{countryCodes:["ca","mx","nz","us"],matchTags:["shop/department_store"],tags:{brand:"Bed Bath & Beyond","brand:wikidata":"Q813782","brand:wikipedia":"en:Bed Bath & Beyond",name:"Bed Bath & Beyond",shop:"houseware"}},"shop/houseware|Blokker":{countryCodes:["be","nl"],tags:{brand:"Blokker","brand:wikidata":"Q884934","brand:wikipedia":"en:Blokker Holding",name:"Blokker",shop:"houseware"}},"shop/houseware|Cervera":{countryCodes:["se"],tags:{brand:"Cervera","brand:wikidata":"Q10447179","brand:wikipedia":"sv:Cervera (företag)",name:"Cervera",shop:"houseware"}},"shop/houseware|HomeGoods":{countryCodes:["us"],matchTags:["shop/department_store"],tags:{brand:"HomeGoods","brand:wikidata":"Q5887941","brand:wikipedia":"en:HomeGoods",name:"HomeGoods",shop:"houseware"}},"shop/houseware|Kitchen Collection":{countryCodes:["us"],tags:{brand:"Kitchen Collection","brand:wikidata":"Q64149036",name:"Kitchen Collection",shop:"houseware"}},"shop/houseware|Lagerhaus":{matchTags:["shop/doityourself"],tags:{brand:"Lagerhaus","brand:wikidata":"Q10553211","brand:wikipedia":"sv:Lagerhaus",name:"Lagerhaus",shop:"houseware"}},"shop/houseware|Lakeland":{countryCodes:["gb"],tags:{brand:"Lakeland","brand:wikidata":"Q16256199","brand:wikipedia":"en:Lakeland (company)",name:"Lakeland",shop:"houseware"}},"shop/houseware|Le Creuset":{matchTags:["shop/kitchen"],tags:{brand:"Le Creuset","brand:wikidata":"Q555861","brand:wikipedia":"en:Le Creuset",name:"Le Creuset",shop:"houseware"}},"shop/houseware|Marskramer":{countryCodes:["nl"],tags:{brand:"Marskramer","brand:wikidata":"Q2305917","brand:wikipedia":"nl:Marskramer (warenhuis)",name:"Marskramer",shop:"houseware"}},"shop/houseware|Old Time Pottery":{countryCodes:["us"],tags:{brand:"Old Time Pottery","brand:wikidata":"Q7085222","brand:wikipedia":"en:Old Time Pottery",name:"Old Time Pottery",shop:"houseware"}},"shop/houseware|Stokes":{countryCodes:["ca"],tags:{brand:"Stokes","brand:wikidata":"Q66481382",name:"Stokes",shop:"houseware"}},"shop/houseware|Sur La Table":{countryCodes:["us"],tags:{brand:"Sur La Table","brand:wikidata":"Q7645220","brand:wikipedia":"en:Sur La Table",name:"Sur La Table",shop:"houseware"}},"shop/houseware|Tescoma":{tags:{brand:"Tescoma",name:"Tescoma",shop:"houseware"}},"shop/houseware|The Container Store":{countryCodes:["us"],tags:{brand:"The Container Store","brand:wikidata":"Q7727445","brand:wikipedia":"en:The Container Store",name:"The Container Store",shop:"houseware"}},"shop/houseware|The Range":{countryCodes:["gb","ie"],matchTags:["shop/department_store","shop/doityourself","shop/furniture","shop/garden_centre","shop/variety_store"],tags:{brand:"The Range","brand:wikidata":"Q7759409",name:"The Range",shop:"houseware"}},"shop/houseware|Think Kitchen":{countryCodes:["ca"],tags:{brand:"Think Kitchen","brand:wikidata":"Q66481390",name:"Think Kitchen",shop:"houseware"}},"shop/houseware|Tuesday Morning":{countryCodes:["us"],matchTags:["shop/convenience","shop/department_store","shop/gift","shop/variety_store"],tags:{brand:"Tuesday Morning","brand:wikidata":"Q7851426","brand:wikipedia":"en:Tuesday Morning",name:"Tuesday Morning",shop:"houseware"}},"shop/houseware|WMF":{countryCodes:["at","de"],tags:{brand:"WMF","brand:wikidata":"Q451423","brand:wikipedia":"en:WMF Group",name:"WMF",shop:"houseware"}},"shop/houseware|Williams-Sonoma":{countryCodes:["ca","us"],matchNames:["william sonoma"],matchTags:["shop/furniture"],tags:{brand:"Williams-Sonoma","brand:wikidata":"Q2581220","brand:wikipedia":"en:Williams-Sonoma",name:"Williams-Sonoma",shop:"houseware"}},"shop/houseware|Xenos":{countryCodes:["de","nl"],tags:{brand:"Xenos","brand:wikidata":"Q16547960","brand:wikipedia":"nl:Xenos",name:"Xenos",shop:"houseware"}},"shop/houseware|Еврочехол":{countryCodes:["ru"],tags:{brand:"Еврочехол",name:"Еврочехол",shop:"houseware"}},"shop/houseware|京王アートマン":{countryCodes:["jp"],matchNames:["アートマン"],matchTags:["shop/variety_store"],tags:{brand:"京王アートマン","brand:en":"Keio Atman","brand:ja":"京王アートマン","brand:wikidata":"Q11374580","brand:wikipedia":"ja:京王アートマン",name:"京王アートマン","name:en":"Keio Atman","name:ja":"京王アートマン",shop:"houseware"}},"shop/interior_decoration|Centrakor":{countryCodes:["fr"],matchTags:["shop/variety_store"],tags:{brand:"Centrakor","brand:wikidata":"Q64079345","brand:wikipedia":"fr:Centrakor",name:"Centrakor",shop:"interior_decoration"}},"shop/interior_decoration|Depot":{countryCodes:["at","ch","de"],tags:{brand:"Depot","brand:wikidata":"Q1191740","brand:wikipedia":"de:Gries Deco Holding",name:"Depot",shop:"interior_decoration"}},"shop/interior_decoration|Fired Earth":{countryCodes:["gb"],matchTags:["shop/bathroom_furnishing","shop/tiles"],tags:{brand:"Fired Earth","brand:wikidata":"Q20594569",name:"Fired Earth",shop:"interior_decoration"}},"shop/interior_decoration|Hemtex":{countryCodes:["ee","fi","se"],tags:{brand:"Hemtex","brand:wikidata":"Q10521868","brand:wikipedia":"sv:Hemtex",name:"Hemtex",shop:"interior_decoration"}},"shop/interior_decoration|HomeSense":{countryCodes:["ca","gb","ie","us"],matchTags:["shop/department_store","shop/furniture"],tags:{brand:"HomeSense","brand:wikidata":"Q16844433","brand:wikipedia":"en:HomeSense",name:"HomeSense",shop:"interior_decoration"}},"shop/interior_decoration|Kirkland's":{countryCodes:["us"],matchTags:["shop/department_store"],tags:{brand:"Kirkland's","brand:wikidata":"Q6415714","brand:wikipedia":"en:Kirkland's",name:"Kirkland's",shop:"interior_decoration"}},"shop/interior_decoration|Pier 1 Imports":{countryCodes:["ca","us"],matchTags:["shop/furniture"],tags:{brand:"Pier 1 Imports","brand:wikidata":"Q7191691","brand:wikipedia":"en:Pier 1 Imports",name:"Pier 1 Imports",shop:"interior_decoration"}},"shop/interior_decoration|Ten Thousand Villages":{countryCodes:["ca","us"],matchNames:["10 thousand villages","10,000 villages"],matchTags:["shop/boutique","shop/gift"],tags:{brand:"Ten Thousand Villages","brand:wikidata":"Q2403252","brand:wikipedia":"en:Ten Thousand Villages",fair_trade:"only",name:"Ten Thousand Villages",shop:"interior_decoration"}},"shop/interior_decoration|World Market":{countryCodes:["us"],matchNames:["cost plus"],matchTags:["shop/department_store","shop/furniture","shop/supermarket"],tags:{brand:"World Market","brand:wikidata":"Q5174750","brand:wikipedia":"en:Cost Plus World Market",name:"World Market",official_name:"Cost Plus World Market",shop:"interior_decoration"}},"shop/interior_decoration|Zara Home":{tags:{brand:"Zara Home",name:"Zara Home",shop:"interior_decoration"}},"shop/jewelry|Alex and Ani":{countryCodes:["us"],tags:{brand:"Alex and Ani","brand:wikidata":"Q16198810","brand:wikipedia":"en:Alex and Ani",name:"Alex and Ani",shop:"jewelry"}},"shop/jewelry|Apart":{countryCodes:["pl"],tags:{brand:"Apart","brand:wikidata":"Q11686561","brand:wikipedia":"pl:Apart",name:"Apart",shop:"jewelry"}},"shop/jewelry|Bijou Brigitte":{tags:{brand:"Bijou Brigitte","brand:wikidata":"Q599545","brand:wikipedia":"de:Bijou Brigitte",name:"Bijou Brigitte",shop:"jewelry"}},"shop/jewelry|Cartier":{tags:{brand:"Cartier","brand:wikidata":"Q538587","brand:wikipedia":"en:Cartier (jeweler)",name:"Cartier",shop:"jewelry"}},"shop/jewelry|Charm Diamond Centres":{countryCodes:["ca"],matchNames:["charm diamond","charm diamond centre"],tags:{brand:"Charm Diamond Centres","brand:wikidata":"Q5086396","brand:wikipedia":"en:Charm Diamond Centres",name:"Charm Diamond Centres",shop:"jewelry"}},"shop/jewelry|Chisholm Hunter":{countryCodes:["gb"],tags:{brand:"Chisholm Hunter","brand:wikidata":"Q66662001",name:"Chisholm Hunter",shop:"jewelry"}},"shop/jewelry|Christ":{countryCodes:["ch","de","nl"],tags:{brand:"Christ","brand:wikidata":"Q1077957","brand:wikipedia":"de:Christ (Juwelier)",name:"Christ",shop:"jewelry"}},"shop/jewelry|David Yurman":{countryCodes:["us"],tags:{brand:"David Yurman","brand:wikidata":"Q5241390","brand:wikipedia":"en:David Yurman",name:"David Yurman",shop:"jewelry"}},"shop/jewelry|Ernest Jones":{countryCodes:["gb"],tags:{brand:"Ernest Jones","brand:wikidata":"Q5393358","brand:wikipedia":"en:Ernest Jones (retailer)",name:"Ernest Jones",shop:"jewelry"}},"shop/jewelry|F.Hinds":{countryCodes:["gb"],tags:{brand:"F.Hinds","brand:wikidata":"Q5423915","brand:wikipedia":"en:F. Hinds",name:"F.Hinds",shop:"jewelry"}},"shop/jewelry|Fred Meyer":{countryCodes:["us"],nomatch:["shop/department_store|Fred Meyer","shop/supermarket|Fred Meyer"],tags:{brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer",shop:"jewelry"}},"shop/jewelry|Goldsmiths":{countryCodes:["gb"],tags:{brand:"Goldsmiths","brand:wikidata":"Q16993095","brand:wikipedia":"en:Goldsmiths (retailer)",name:"Goldsmiths",shop:"jewelry"}},"shop/jewelry|Guldfynd":{countryCodes:["se"],tags:{brand:"Guldfynd","brand:wikidata":"Q49099223","brand:wikipedia":"sv:Guldfynd",name:"Guldfynd",shop:"jewelry"}},"shop/jewelry|H.Samuel":{countryCodes:["gb"],tags:{brand:"H.Samuel","brand:wikidata":"Q5628558","brand:wikipedia":"en:H. Samuel",name:"H.Samuel",shop:"jewelry"}},"shop/jewelry|Helzberg Diamonds":{countryCodes:["us"],tags:{brand:"Helzberg Diamonds","brand:wikidata":"Q16995161","brand:wikipedia":"en:Helzberg Diamonds",name:"Helzberg Diamonds",shop:"jewelry"}},"shop/jewelry|Histoire d'Or":{countryCodes:["be","fr","it","nl"],tags:{brand:"Histoire d'Or","brand:wikidata":"Q62529245",name:"Histoire d'Or",shop:"jewelry"}},"shop/jewelry|Icing":{countryCodes:["ca","us"],tags:{brand:"Icing",name:"Icing",shop:"jewelry"}},"shop/jewelry|James Avery Jewelry":{countryCodes:["us"],tags:{brand:"James Avery Jewelry","brand:wikidata":"Q6129024","brand:wikipedia":"en:James Avery Artisan Jewelry",name:"James Avery Jewelry",shop:"jewelry"}},"shop/jewelry|Jared":{countryCodes:["us"],tags:{brand:"Jared","brand:wikidata":"Q62029282",name:"Jared",shop:"jewelry"}},"shop/jewelry|Jubiler":{tags:{brand:"Jubiler",name:"Jubiler",shop:"jewelry"}},"shop/jewelry|Julien d'Orcel":{countryCodes:["fr"],tags:{brand:"Julien d'Orcel","brand:wikidata":"Q62497463",name:"Julien d'Orcel",shop:"jewelry"}},"shop/jewelry|Kay Jewelers":{countryCodes:["us"],tags:{brand:"Kay Jewelers","brand:wikidata":"Q62029290",name:"Kay Jewelers",shop:"jewelry"}},"shop/jewelry|Lucardi":{countryCodes:["nl"],tags:{brand:"Lucardi","brand:wikidata":"Q13774940","brand:wikipedia":"nl:Lucardi",name:"Lucardi",shop:"jewelry"}},"shop/jewelry|Michael Hill":{countryCodes:["au","ca","nz","us"],tags:{brand:"Michael Hill","brand:wikidata":"Q3308250","brand:wikipedia":"en:Michael Hill Jeweller",name:"Michael Hill",shop:"jewelry"}},"shop/jewelry|PNJ":{countryCodes:["vn"],tags:{brand:"PNJ","brand:wikidata":"Q61129183","brand:wikipedia":"vi:PNJ",name:"PNJ",shop:"jewelry"}},"shop/jewelry|Pandora":{tags:{brand:"Pandora","brand:wikidata":"Q2241604","brand:wikipedia":"en:Pandora (jewelry)",name:"Pandora",shop:"jewelry"}},"shop/jewelry|Peoples Jewellers":{countryCodes:["ca"],tags:{brand:"Peoples Jewellers","brand:wikidata":"Q64995558",name:"Peoples Jewellers",shop:"jewelry"}},"shop/jewelry|Piercing Pagoda":{countryCodes:["us"],tags:{brand:"Piercing Pagoda",name:"Piercing Pagoda",shop:"jewelry"}},"shop/jewelry|Swarovski":{tags:{brand:"Swarovski","brand:wikidata":"Q611115","brand:wikipedia":"en:Swarovski",name:"Swarovski",shop:"jewelry"}},"shop/jewelry|Thomas Sabo":{tags:{brand:"Thomas Sabo","brand:wikidata":"Q13415716","brand:wikipedia":"en:Thomas Sabo",name:"Thomas Sabo",shop:"jewelry"}},"shop/jewelry|Tiffany & Company":{countryCodes:["us"],matchNames:["tiffany","tiffany's"],tags:{brand:"Tiffany & Company","brand:wikidata":"Q1066858","brand:wikipedia":"en:Tiffany & Co.",name:"Tiffany & Company",official_name:"Tiffany & Co.",shop:"jewelry"}},"shop/jewelry|Tous":{tags:{brand:"Tous","brand:wikidata":"Q3815128","brand:wikipedia":"en:Tous (company)",name:"Tous",shop:"jewelry"}},"shop/jewelry|Warren James":{countryCodes:["gb"],tags:{brand:"Warren James","brand:wikidata":"Q19604616","brand:wikipedia":"en:Warren James Jewellers",name:"Warren James",shop:"jewelry"}},"shop/jewelry|Zales":{countryCodes:["us"],tags:{brand:"Zales","brand:wikidata":"Q8065305","brand:wikipedia":"en:Zale Corporation",name:"Zales",shop:"jewelry"}},"shop/jewelry|Адамас":{countryCodes:["ru"],tags:{brand:"Адамас","brand:en":"Adamas","brand:ru":"Адамас","brand:wikidata":"Q62393709",name:"Адамас","name:en":"Adamas","name:ru":"Адамас",shop:"jewelry"}},"shop/jewelry|Золотая мечта":{countryCodes:["by"],tags:{brand:"Золотая мечта","brand:en":"Gold Dream","brand:ru":"Золотая мечта",name:"Золотая мечта","name:en":"Gold Dream","name:ru":"Золотая мечта",shop:"jewelry"}},"shop/kiosk|Lietuvos spauda":{countryCodes:["lt"],tags:{brand:"Lietuvos spauda","brand:wikidata":"Q6514414","brand:wikipedia":"lt:Lietuvos spauda",name:"Lietuvos spauda",shop:"kiosk"}},"shop/kiosk|Lotto":{tags:{brand:"Lotto",name:"Lotto",shop:"kiosk"}},"shop/kiosk|Narvesen":{countryCodes:["lt","lv","no"],tags:{brand:"Narvesen","brand:wikidata":"Q6514414","brand:wikipedia":"en:Narvesen",name:"Narvesen",shop:"kiosk"}},"shop/kiosk|Pressbyrån":{countryCodes:["se"],tags:{brand:"Pressbyrån","brand:wikidata":"Q2489072","brand:wikipedia":"en:Pressbyrån",name:"Pressbyrån",shop:"kiosk"}},"shop/kiosk|R-Kioski":{countryCodes:["fi"],tags:{brand:"R-Kioski","brand:wikidata":"Q1571400","brand:wikipedia":"en:R-kioski",name:"R-Kioski",shop:"kiosk"}},"shop/kiosk|Ruch":{countryCodes:["pl"],tags:{brand:"Ruch","brand:wikidata":"Q1260314","brand:wikipedia":"pl:Ruch (przedsiębiorstwo)",name:"Ruch",shop:"kiosk"}},"shop/kiosk|Tisak":{countryCodes:["hr"],tags:{brand:"Tisak","brand:wikidata":"Q12643627","brand:wikipedia":"hr:Tisak (tvrtka)",name:"Tisak",shop:"kiosk"}},"shop/kiosk|k kiosk":{countryCodes:["ch"],nomatch:["shop/newsagent|k kiosk"],tags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"kiosk"}},"shop/kiosk|Роспечать":{tags:{brand:"Роспечать",name:"Роспечать",shop:"kiosk"}},"shop/kiosk|キヨスク":{countryCodes:["jp"],tags:{brand:"キヨスク","brand:en":"KIOSK","brand:ja":"キヨスク","brand:wikidata":"Q1334796","brand:wikipedia":"ja:キヨスク",name:"キヨスク","name:en":"KIOSK","name:ja":"キヨスク",shop:"kiosk"}},"shop/kitchen|Cuisinella":{countryCodes:["fr","tn"],tags:{brand:"Cuisinella","brand:wikidata":"Q3007012","brand:wikipedia":"fr:Cuisinella",name:"Cuisinella",shop:"kitchen"}},"shop/kitchen|Ixina":{countryCodes:["ae","au","be","bf","bh","bj","ca","ci","cm","cn","cz","dz","ee","eg","fr","gh","hr","ke","kw","lu","ly","ma","mu","nl","pl","qa","ro","ru","sa","se","sn","tg","th","tn","vn"],tags:{brand:"Ixina","brand:wikidata":"Q3156424","brand:wikipedia":"fr:Ixina",name:"Ixina",shop:"kitchen"}},"shop/kitchen|Magnet":{countryCodes:["gb"],matchNames:["magnet kitchens"],tags:{brand:"Magnet","brand:wikidata":"Q6731427","brand:wikipedia":"en:Magnet Kitchens",name:"Magnet",shop:"kitchen"}},"shop/kitchen|Mobalpa":{countryCodes:["be","fr","gb"],tags:{brand:"Mobalpa","brand:wikidata":"Q3317571","brand:wikipedia":"fr:Mobalpa",name:"Mobalpa",shop:"kitchen"}},"shop/kitchen|Schmidt":{countryCodes:["be","es","fr","gb"],tags:{brand:"Schmidt","brand:wikidata":"Q3487620","brand:wikipedia":"de:Schmidt Groupe",name:"Schmidt",shop:"kitchen"}},"shop/kitchen|SoCoo'c":{countryCodes:["fr"],tags:{brand:"SoCoo'c","brand:wikidata":"Q62783840","brand:wikipedia":"fr:SoCoo'c",name:"SoCoo'c",shop:"kitchen"}},"shop/lottery|Loterías y Apuestas del Estado":{countryCodes:["es"],matchNames:["apuestas del estado","lotería del estado","loterías del estado"],tags:{brand:"Loterías y Apuestas del Estado","brand:wikidata":"Q1311806","brand:wikipedia":"es:Loterías y Apuestas del Estado",name:"Loterías y Apuestas del Estado",shop:"lottery"}},"shop/lottery|ONCE":{countryCodes:["es"],nomatch:["amenity/social_facility|ONCE"],tags:{brand:"ONCE","brand:wikidata":"Q1750397","brand:wikipedia":"es:Organización Nacional de Ciegos Españoles",name:"ONCE",official_name:"Organización Nacional de Ciegos Españoles",shop:"lottery"}},"shop/massage|Hand & Stone Massage and Facial Spa":{countryCodes:["us"],matchNames:["hand and stone massage"],tags:{brand:"Hand & Stone Massage and Facial Spa","brand:wikidata":"Q55613342","brand:wikipedia":"en:Hand & Stone Massage and Facial Spa",name:"Hand & Stone Massage and Facial Spa",shop:"massage"}},"shop/massage|Massage Envy":{countryCodes:["us"],matchNames:["massage envy spa"],tags:{brand:"Massage Envy","brand:wikidata":"Q22922899","brand:wikipedia":"en:Massage Envy",name:"Massage Envy",shop:"massage"}},"shop/massage|Massage Heights":{countryCodes:["ca","us"],tags:{brand:"Massage Heights","brand:wikidata":"Q64573956",name:"Massage Heights",shop:"massage"}},"shop/medical_supply|Pofam-Poznań":{countryCodes:["pl"],tags:{brand:"Pofam-Poznań","brand:wikidata":"Q62057457",name:"Pofam-Poznań",shop:"medical_supply"}},"shop/medical_supply|Ортека":{countryCodes:["ru"],tags:{brand:"Ортека","brand:wikidata":"Q62393660",name:"Ортека",shop:"medical_supply"}},"shop/mobile_phone|3 Store":{countryCodes:["gb","it"],matchNames:["3","three","three store"],tags:{brand:"3 Store","brand:wikidata":"Q407009","brand:wikipedia":"en:3 (telecommunications)",name:"3 Store",shop:"mobile_phone"}},"shop/mobile_phone|A1":{countryCodes:["at","bg","by","hr","si"],matchNames:["velcom","velcom|a1","велком"],nomatch:["shop/telecommunication|A1"],tags:{brand:"A1","brand:wikidata":"Q688755","brand:wikipedia":"en:A1 Telekom Austria Group",name:"A1",shop:"mobile_phone"}},"shop/mobile_phone|AT&T":{countryCodes:["mx","us"],matchNames:["att mobile","att mobility","att wireless"],tags:{brand:"AT&T","brand:wikidata":"Q298594","brand:wikipedia":"en:AT&T Mobility",name:"AT&T",shop:"mobile_phone"}},"shop/mobile_phone|Bell":{countryCodes:["ca"],matchNames:["bell mobile","bell mobility","bell wireless"],nomatch:["shop/telecommunication|Bell"],tags:{brand:"Bell","brand:wikidata":"Q2894594","brand:wikipedia":"en:Bell Mobility",name:"Bell",shop:"mobile_phone"}},"shop/mobile_phone|Best Buy Mobile":{countryCodes:["ca"],nomatch:["amenity/vending_machine|Best Buy Express","shop/electronics|Best Buy"],tags:{brand:"Best Buy Mobile","brand:wikidata":"Q533415","brand:wikipedia":"en:Best Buy",name:"Best Buy Mobile",shop:"mobile_phone"}},"shop/mobile_phone|Bitė":{countryCodes:["lt"],tags:{brand:"Bitė","brand:wikidata":"Q796010","brand:wikipedia":"lt:Bitės grupė",name:"Bitė",shop:"mobile_phone"}},"shop/mobile_phone|Boost Mobile":{countryCodes:["us"],matchNames:["boost"],tags:{brand:"Boost Mobile","brand:wikidata":"Q4943790","brand:wikipedia":"en:Boost Mobile",name:"Boost Mobile",shop:"mobile_phone"}},"shop/mobile_phone|Bouygues Telecom":{countryCodes:["fr"],tags:{brand:"Bouygues Telecom","brand:wikidata":"Q581438","brand:wikipedia":"fr:Bouygues Telecom",name:"Bouygues Telecom",shop:"mobile_phone"}},"shop/mobile_phone|Carphone Warehouse":{countryCodes:["by","gb","ie"],matchNames:["the carphone warehouse"],tags:{brand:"Carphone Warehouse","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Carphone Warehouse",shop:"mobile_phone"}},"shop/mobile_phone|Chatr":{countryCodes:["ca"],matchNames:["chatr mobile"],tags:{brand:"Chatr","brand:wikidata":"Q5087766","brand:wikipedia":"en:Chatr",name:"Chatr",shop:"mobile_phone"}},"shop/mobile_phone|Claro":{tags:{brand:"Claro","brand:wikidata":"Q1770208","brand:wikipedia":"en:Claro (company)",name:"Claro",shop:"mobile_phone"}},"shop/mobile_phone|Cricket Wireless":{countryCodes:["us"],matchNames:["cricket"],tags:{brand:"Cricket Wireless","brand:wikidata":"Q5184987","brand:wikipedia":"en:Cricket Wireless",name:"Cricket Wireless",shop:"mobile_phone"}},"shop/mobile_phone|Digicel":{tags:{brand:"Digicel","brand:wikidata":"Q2117506","brand:wikipedia":"en:Digicel",name:"Digicel",shop:"mobile_phone"}},"shop/mobile_phone|EE":{countryCodes:["gb"],tags:{brand:"EE","brand:wikidata":"Q5322942","brand:wikipedia":"en:EE Limited",name:"EE",shop:"mobile_phone"}},"shop/mobile_phone|Entel":{countryCodes:["cl","pe"],tags:{brand:"Entel","brand:wikidata":"Q450420","brand:wikipedia":"en:Entel (Chile)",name:"Entel",shop:"mobile_phone"}},"shop/mobile_phone|Fido":{countryCodes:["ca"],tags:{brand:"Fido","brand:wikidata":"Q3071471","brand:wikipedia":"en:Fido Solutions",name:"Fido",shop:"mobile_phone"}},"shop/mobile_phone|Freedom Mobile":{countryCodes:["ca"],matchNames:["freedom","wind mobile"],tags:{brand:"Freedom Mobile","brand:wikidata":"Q8023931","brand:wikipedia":"en:Freedom Mobile",name:"Freedom Mobile",shop:"mobile_phone"}},"shop/mobile_phone|Koodo":{countryCodes:["ca"],tags:{brand:"Koodo","brand:wikidata":"Q6430529","brand:wikipedia":"en:Koodo Mobile",name:"Koodo",shop:"mobile_phone"}},"shop/mobile_phone|MEO":{matchNames:["loja meo"],tags:{brand:"MEO","brand:wikidata":"Q3306167","brand:wikipedia":"en:MEO (telecommunications company)",name:"MEO",shop:"mobile_phone"}},"shop/mobile_phone|MTN":{matchNames:["agence mtn"],tags:{brand:"MTN","brand:wikidata":"Q1813361","brand:wikipedia":"en:MTN Group",name:"MTN",shop:"mobile_phone"}},"shop/mobile_phone|MetroPCS":{countryCodes:["us"],nomatch:["amenity/bank|Metro Bank~(UK)","amenity/bank|Metrobank~(Philippines)","shop/supermarket|Metro~(Ontario)","shop/supermarket|Metro~(Peru)","shop/supermarket|Metro~(Quebec)","shop/wholesale|Metro"],tags:{brand:"MetroPCS","brand:wikidata":"Q1925685","brand:wikipedia":"en:Metro by T-Mobile",name:"MetroPCS",shop:"mobile_phone"}},"shop/mobile_phone|Mobilcom Debitel":{countryCodes:["de","ir"],matchNames:["debitel"],tags:{brand:"Mobilcom Debitel","brand:wikidata":"Q344744","brand:wikipedia":"en:Debitel",name:"Mobilcom Debitel",shop:"mobile_phone"}},"shop/mobile_phone|Moov":{countryCodes:["ci","tg"],matchNames:["agence moov"],tags:{brand:"Moov","brand:wikidata":"Q3323637","brand:wikipedia":"fr:Moov Côte d'Ivoire",name:"Moov",shop:"mobile_phone"}},"shop/mobile_phone|Movistar":{tags:{brand:"Movistar","brand:wikidata":"Q967735","brand:wikipedia":"en:Movistar",name:"Movistar",shop:"mobile_phone"}},"shop/mobile_phone|NOS":{tags:{brand:"NOS","brand:wikidata":"Q136331","brand:wikipedia":"en:NOS (Portuguese media company)",name:"NOS",shop:"mobile_phone"}},"shop/mobile_phone|O2":{countryCodes:["cz","de","gb","ie","sk"],tags:{brand:"O2","brand:wikidata":"Q1759255","brand:wikipedia":"en:Telefónica Europe",name:"O2",shop:"mobile_phone"}},"shop/mobile_phone|Optie1":{countryCodes:["nl"],tags:{brand:"Optie1","brand:wikidata":"Q62393564",name:"Optie1",shop:"mobile_phone"}},"shop/mobile_phone|Optus":{countryCodes:["au"],tags:{brand:"Optus","brand:wikidata":"Q865038",name:"Optus",shop:"mobile_phone"}},"shop/mobile_phone|Orange":{matchNames:["agence orange"],tags:{brand:"Orange","brand:wikidata":"Q1431486","brand:wikipedia":"fr:Orange (entreprise)",name:"Orange",shop:"mobile_phone"}},"shop/mobile_phone|Personal":{countryCodes:["ar","py"],tags:{brand:"Personal","brand:wikidata":"Q10933021","brand:wikipedia":"es:Personal (Argentina)",name:"Personal",shop:"mobile_phone"}},"shop/mobile_phone|Phone House":{countryCodes:["de","es","fr","nl","pt"],matchNames:["the phone house"],tags:{brand:"Phone House","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Phone House",shop:"mobile_phone"}},"shop/mobile_phone|Play":{countryCodes:["pl"],tags:{brand:"Play","brand:wikidata":"Q7202998","brand:wikipedia":"pl:Play (sieć telefonii komórkowej)",name:"Play",shop:"mobile_phone"}},"shop/mobile_phone|Plus":{countryCodes:["pl"],nomatch:["amenity/fuel|Gas Plus","shop/supermarket|PLUS"],tags:{brand:"Plus","brand:wikidata":"Q7205598","brand:wikipedia":"pl:Plus (sieć telefonii komórkowej)",name:"Plus",shop:"mobile_phone"}},"shop/mobile_phone|Rogers":{countryCodes:["ca"],tags:{brand:"Rogers","brand:wikidata":"Q3439663","brand:wikipedia":"en:Rogers Wireless",name:"Rogers",shop:"mobile_phone"}},"shop/mobile_phone|SFR":{countryCodes:["fr","lu"],matchNames:["espace sfr"],tags:{brand:"SFR","brand:wikidata":"Q218765","brand:wikipedia":"en:SFR",name:"SFR",shop:"mobile_phone"}},"shop/mobile_phone|Sprint":{nomatch:["amenity/fuel|Sprint"],tags:{brand:"Sprint","brand:wikidata":"Q301965","brand:wikipedia":"en:Sprint Corporation",name:"Sprint",shop:"mobile_phone"}},"shop/mobile_phone|T-Mobile":{tags:{brand:"T-Mobile","brand:wikidata":"Q327634","brand:wikipedia":"en:T-Mobile",name:"T-Mobile",shop:"mobile_phone"}},"shop/mobile_phone|TIM":{countryCodes:["br","it"],tags:{brand:"TIM","brand:wikidata":"Q144617","brand:wikipedia":"en:Telecom Italia",name:"TIM",shop:"mobile_phone"}},"shop/mobile_phone|Tbooth Wireless":{countryCodes:["ca"],tags:{brand:"Tbooth Wireless","brand:wikidata":"Q7690597",name:"Tbooth Wireless",shop:"mobile_phone"}},"shop/mobile_phone|Telcel":{countryCodes:["cu","mx"],tags:{brand:"Telcel","brand:wikidata":"Q3517255","brand:wikipedia":"en:Telcel",name:"Telcel",shop:"mobile_phone"}},"shop/mobile_phone|Tele2":{tags:{brand:"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Tele2",shop:"mobile_phone"}},"shop/mobile_phone|Telekom":{countryCodes:["de","hu","ro","si","sk"],matchNames:["telekom shop"],tags:{brand:"Telekom","brand:wikidata":"Q9396","brand:wikipedia":"en:Deutsche Telekom",name:"Telekom",shop:"mobile_phone"}},"shop/mobile_phone|Telenor":{tags:{brand:"Telenor","brand:wikidata":"Q845632","brand:wikipedia":"en:Telenor",name:"Telenor",shop:"mobile_phone"}},"shop/mobile_phone|Telia":{countryCodes:["dk","fi","lt","no","se"],tags:{brand:"Telia","brand:wikidata":"Q862303","brand:wikipedia":"en:Telia Company",name:"Telia",shop:"mobile_phone"}},"shop/mobile_phone|Telstra":{countryCodes:["au"],tags:{brand:"Telstra","brand:wikidata":"Q721162","brand:wikipedia":"en:Telstra",name:"Telstra",shop:"mobile_phone"}},"shop/mobile_phone|Telus":{countryCodes:["ca"],tags:{brand:"Telus","brand:wikidata":"Q165858","brand:wikipedia":"en:Telus",name:"Telus",shop:"mobile_phone"}},"shop/mobile_phone|Turkcell":{countryCodes:["cy","tr"],tags:{brand:"Turkcell","brand:wikidata":"Q283852","brand:wikipedia":"en:Turkcell",name:"Turkcell",shop:"mobile_phone"}},"shop/mobile_phone|U.S. Cellular":{countryCodes:["us"],tags:{brand:"U.S. Cellular","brand:wikidata":"Q2466256","brand:wikipedia":"en:U.S. Cellular",name:"U.S. Cellular",shop:"mobile_phone"}},"shop/mobile_phone|UQモバイル":{countryCodes:["jp"],matchNames:["ユーキューモバイル"],tags:{brand:"UQモバイル","brand:en":"UQ mobile","brand:ja":"UQモバイル","brand:wikidata":"Q11252091","brand:wikipedia":"ja:UQコミュニケーションズ",name:"UQモバイル","name:en":"UQ mobile","name:ja":"UQモバイル",shop:"mobile_phone"}},"shop/mobile_phone|Verizon Wireless":{countryCodes:["us"],matchNames:["verizon"],tags:{brand:"Verizon Wireless","brand:wikidata":"Q919641","brand:wikipedia":"en:Verizon Wireless",name:"Verizon Wireless",shop:"mobile_phone"}},"shop/mobile_phone|Vidéotron":{countryCodes:["ca"],tags:{brand:"Vidéotron","brand:wikidata":"Q2396830","brand:wikipedia":"en:Vidéotron",name:"Vidéotron",shop:"mobile_phone"}},"shop/mobile_phone|Virgin Mobile~(Canada)":{countryCodes:["ca"],tags:{brand:"Virgin Mobile","brand:wikidata":"Q3560641","brand:wikipedia":"en:Virgin Mobile Canada",name:"Virgin Mobile",shop:"mobile_phone"}},"shop/mobile_phone|Vivo":{tags:{brand:"Vivo","brand:wikidata":"Q18301787","brand:wikipedia":"en:Vivo (technology company)",name:"Vivo",shop:"mobile_phone"}},"shop/mobile_phone|Vodafone":{matchNames:["vodafone shop"],tags:{brand:"Vodafone","brand:wikidata":"Q122141","brand:wikipedia":"en:Vodafone",name:"Vodafone",shop:"mobile_phone"}},"shop/mobile_phone|WIFI_ETECSA":{countryCodes:["cu"],tags:{brand:"WIFI_ETECSA","brand:wikidata":"Q490323","brand:wikipedia":"es:Empresa de Telecomunicaciones de Cuba",name:"WIFI_ETECSA",shop:"mobile_phone"}},"shop/mobile_phone|WOW! Mobile Boutique":{countryCodes:["ca"],tags:{brand:"WOW! Mobile Boutique","brand:wikidata":"Q64847598",name:"WOW! Mobile Boutique",shop:"mobile_phone"}},"shop/mobile_phone|Wind":{countryCodes:["it"],tags:{brand:"Wind","brand:wikidata":"Q650467","brand:wikipedia":"en:WIND (Italy)",name:"Wind",shop:"mobile_phone"}},"shop/mobile_phone|WirelessWave":{countryCodes:["ca"],tags:{brand:"WirelessWave","brand:wikidata":"Q8026815",name:"WirelessWave",shop:"mobile_phone"}},"shop/mobile_phone|Yoigo":{countryCodes:["es"],tags:{brand:"Yoigo","brand:wikidata":"Q2630989","brand:wikipedia":"en:Yoigo",name:"Yoigo",shop:"mobile_phone"}},"shop/mobile_phone|auショップ":{countryCodes:["jp"],matchNames:["au"],tags:{brand:"au","brand:ja":"au","brand:wikidata":"Q307110","brand:wikipedia":"ja:Au (携帯電話)",name:"auショップ","name:en":"au","name:ja":"auショップ",shop:"mobile_phone"}},"shop/mobile_phone|lifecell":{matchNames:["магазин lifecell"],matchTags:["shop/telecommunication"],tags:{brand:"lifecell","brand:wikidata":"Q1936895","brand:wikipedia":"uk:Lifecell",name:"lifecell",shop:"mobile_phone"}},"shop/mobile_phone|Алло":{countryCodes:["md","ua"],tags:{brand:"Алло","brand:wikidata":"Q18683057","brand:wikipedia":"uk:Алло (торгова мережа)",name:"Алло",shop:"mobile_phone"}},"shop/mobile_phone|Билайн":{countryCodes:["kg","kz","ru"],tags:{brand:"Билайн","brand:en":"Beeline","brand:wikidata":"Q402880","brand:wikipedia":"en:Beeline (brand)",name:"Билайн","name:en":"Beeline",shop:"mobile_phone"}},"shop/mobile_phone|Евросеть":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Евросеть","brand:en":"Euroset","brand:wikidata":"Q65310","brand:wikipedia":"en:Euroset",name:"Евросеть","name:en":"Euroset",shop:"mobile_phone"}},"shop/mobile_phone|Київстар":{countryCodes:["ua"],tags:{brand:"Київстар","brand:en":"Kyivstar","brand:wikidata":"Q2288463","brand:wikipedia":"en:Kyivstar",name:"Київстар","name:en":"Kyivstar",shop:"mobile_phone"}},"shop/mobile_phone|МТС":{countryCodes:["by","ru","ua"],nomatch:["shop/telecommunication|МТС"],tags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"mobile_phone"}},"shop/mobile_phone|Мегафон":{countryCodes:["ru","tj"],tags:{brand:"Мегафон","brand:en":"MegaFon","brand:wikidata":"Q1720713","brand:wikipedia":"en:MegaFon",name:"Мегафон","name:en":"MegaFon",shop:"mobile_phone"}},"shop/mobile_phone|НА'СВЯЗИ":{countryCodes:["by"],tags:{brand:"НА'СВЯЗИ",name:"НА'СВЯЗИ",shop:"mobile_phone"}},"shop/mobile_phone|Связной":{countryCodes:["by","ru","uz"],tags:{brand:"Связной","brand:en":"Svyaznoy","brand:wikidata":"Q65371","brand:wikipedia":"en:Svyaznoy",name:"Связной","name:en":"Svyaznoy",shop:"mobile_phone"}},"shop/mobile_phone|Теле2":{countryCodes:["ru"],tags:{brand:"Теле2","brand:en":"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Теле2","name:en":"Tele2",shop:"mobile_phone"}},"shop/mobile_phone|ソフトバンク":{countryCodes:["jp"],tags:{brand:"ソフトバンク","brand:en":"SoftBank Telecom","brand:ja":"ソフトバンク","brand:wikidata":"Q7553832","brand:wikipedia":"en:SoftBank Telecom",name:"ソフトバンク","name:en":"SoftBank Telecom","name:ja":"ソフトバンク",shop:"mobile_phone"}},"shop/mobile_phone|ソフトバンクショップ":{countryCodes:["jp"],tags:{brand:"ソフトバンクショップ","brand:en":"SoftBankShop","brand:ja":"ソフトバンクショップ","brand:wikidata":"Q11315281","brand:wikipedia":"ja:ソフトバンクショップ",name:"ソフトバンクショップ","name:en":"SoftBankShop","name:ja":"ソフトバンクショップ",shop:"mobile_phone"}},"shop/mobile_phone|ドコモショップ":{countryCodes:["jp"],tags:{brand:"ドコモショップ","brand:en":"DoCoMo Shop","brand:ja":"ドコモショップ","brand:wikidata":"Q853958","brand:wikipedia":"ja:NTTドコモ",name:"ドコモショップ","name:en":"DoCoMo Shop","name:ja":"ドコモショップ",shop:"mobile_phone"}},"shop/mobile_phone|ワイモバイル":{countryCodes:["jp"],matchNames:["ymobile, y!mobile"],tags:{brand:"ワイモバイル","brand:en":"Ymobile","brand:ja":"ワイモバイル","brand:wikidata":"Q5322556","brand:wikipedia":"ja:ワイモバイル",name:"ワイモバイル","name:en":"Ymobile","name:ja":"ワイモバイル",shop:"mobile_phone"}},"shop/mobile_phone|台灣大哥大":{countryCodes:["tw"],tags:{brand:"台灣大哥大","brand:en":"Taiwan Mobile","brand:wikidata":"Q5943259","brand:wikipedia":"zh:台灣大哥大","brand:zh":"台灣大哥大",name:"台灣大哥大","name:en":"Taiwan Mobile","name:zh":"台灣大哥大",shop:"mobile_phone"}},"shop/money_lender|ACE Cash Express":{countryCodes:["us"],matchNames:["ace"],tags:{brand:"ACE Cash Express","brand:wikidata":"Q24260962","brand:wikipedia":"en:ACE Cash Express",name:"ACE Cash Express",shop:"money_lender"}},"shop/money_lender|Advance America":{countryCodes:["us"],tags:{brand:"Advance America","brand:wikidata":"Q4686044",name:"Advance America",shop:"money_lender"}},"shop/money_lender|California Check Cashing Stores":{countryCodes:["us"],matchNames:["california check cashing"],tags:{brand:"California Check Cashing Stores","brand:wikidata":"Q64390932",name:"California Check Cashing Stores",shop:"money_lender"}},"shop/money_lender|Cash Money":{tags:{brand:"Cash Money",name:"Cash Money",shop:"money_lender"}},"shop/money_lender|Cash Store":{countryCodes:["us"],tags:{brand:"Cash Store","brand:wikidata":"Q61943411",name:"Cash Store",shop:"money_lender"}},"shop/money_lender|CashMax":{countryCodes:["us"],tags:{brand:"CashMax","brand:wikidata":"Q69365478",name:"CashMax",shop:"money_lender"}},"shop/money_lender|Check Into Cash":{countryCodes:["us"],tags:{brand:"Check Into Cash","brand:wikidata":"Q16961246","brand:wikipedia":"en:Check Into Cash",name:"Check Into Cash",shop:"money_lender"}},"shop/money_lender|CheckSmart":{countryCodes:["us"],tags:{alt_name:"Check$mart",brand:"CheckSmart","brand:wikidata":"Q65640213",name:"CheckSmart",shop:"money_lender"}},"shop/money_lender|First Virginia":{countryCodes:["us"],matchNames:["1st virginia"],tags:{brand:"First Virginia","brand:wikidata":"Q65640051",name:"First Virginia",shop:"money_lender"}},"shop/money_lender|Money Mart":{countryCodes:["ca","us"],tags:{brand:"Money Mart","brand:wikidata":"Q6899166","brand:wikipedia":"en:Money Mart",name:"Money Mart",shop:"money_lender"}},"shop/money_lender|Moneytree":{countryCodes:["us"],tags:{brand:"Moneytree","brand:wikidata":"Q6899361","brand:wikipedia":"en:Moneytree",name:"Moneytree",shop:"money_lender"}},"shop/motorcycle|Harley-Davidson":{tags:{brand:"Harley-Davidson","brand:wikidata":"Q192814","brand:wikipedia":"en:Harley-Davidson",name:"Harley-Davidson",shop:"motorcycle"}},"shop/motorcycle|Honda":{nomatch:["shop/car|Honda"],tags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"motorcycle"}},"shop/motorcycle|Kawasaki":{tags:{brand:"Kawasaki","brand:wikidata":"Q6379855","brand:wikipedia":"en:Kawasaki motorcycles",name:"Kawasaki",shop:"motorcycle"}},"shop/motorcycle|Motortrade":{countryCodes:["ph"],tags:{brand:"Motortrade","brand:wikidata":"Q48803162","brand:wikipedia":"en:Motortrade",name:"Motortrade",shop:"motorcycle"}},"shop/motorcycle|Suzuki":{nomatch:["shop/car|Suzuki"],tags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"motorcycle"}},"shop/motorcycle|Yamaha":{tags:{brand:"Yamaha","brand:wikidata":"Q158888","brand:wikipedia":"en:Yamaha Motor Company",name:"Yamaha",shop:"motorcycle"}},"shop/motorcycle|レッドバロン":{countryCodes:["jp"],tags:{brand:"レッドバロン","brand:en":"Red Baron","brand:ja":"レッドバロン","brand:wikidata":"Q11349759","brand:wikipedia":"ja:レッドバロン (企業)",name:"レッドバロン","name:en":"Red Baron","name:ja":"レッドバロン",shop:"motorcycle"}},"shop/music|FYE":{countryCodes:["us"],tags:{brand:"FYE","brand:wikidata":"Q5424141","brand:wikipedia":"en:FYE (retailer)",name:"FYE",shop:"music"}},"shop/music|HMV":{countryCodes:["ca","gb"],tags:{brand:"HMV","brand:wikidata":"Q10854572","brand:wikipedia":"en:HMV",name:"HMV",shop:"music"}},"shop/music|Sunrise Records":{countryCodes:["ca","gb"],tags:{brand:"Sunrise Records","brand:wikidata":"Q30600373","brand:wikipedia":"en:Sunrise Records (retailer)",name:"Sunrise Records",shop:"music"}},"shop/music|TSUTAYA":{nomatch:["shop/books|TSUTAYA","shop/video|TSUTAYA"],tags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"music"}},"shop/music|タワーレコード":{countryCodes:["jp"],matchNames:["タワレコ"],tags:{alt_name:"タワレコ",brand:"タワーレコード","brand:en":"Tower Records","brand:ja":"タワーレコード","brand:wikidata":"Q3265728","brand:wikipedia":"ja:タワーレコード",name:"タワーレコード","name:en":"Tower Records","name:ja":"タワーレコード",shop:"music"}},"shop/musical_instrument|Guitar Center":{countryCodes:["us"],tags:{brand:"Guitar Center","brand:wikidata":"Q3622794","brand:wikipedia":"en:Guitar Center",name:"Guitar Center",shop:"musical_instrument"}},"shop/musical_instrument|Long & McQuade":{countryCodes:["ca"],tags:{brand:"Long & McQuade","brand:wikidata":"Q6672180","brand:wikipedia":"en:Long & McQuade",name:"Long & McQuade",shop:"musical_instrument"}},"shop/newsagent|Cigo":{countryCodes:["de","nl"],tags:{brand:"Cigo","brand:wikidata":"Q62391977",name:"Cigo",shop:"newsagent"}},"shop/newsagent|Hudson News":{tags:{brand:"Hudson News",name:"Hudson News",shop:"newsagent"}},"shop/newsagent|Inmedio":{countryCodes:["hu","pl","ro"],tags:{brand:"Inmedio",name:"Inmedio",shop:"newsagent"}},"shop/newsagent|Kolporter":{countryCodes:["pl"],matchTags:["shop/kiosk"],tags:{brand:"Kolporter","brand:wikidata":"Q6427874","brand:wikipedia":"pl:Kolporter (przedsiębiorstwo)",name:"Kolporter",shop:"newsagent"}},"shop/newsagent|Maison de la Presse":{countryCodes:["fr"],matchTags:["shop/books"],tags:{brand:"Maison de la Presse","brand:wikidata":"Q62085960",name:"Maison de la Presse",shop:"newsagent"}},"shop/newsagent|Martin's":{countryCodes:["gb"],matchTags:["shop/convenience"],tags:{brand:"Martin's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"Martin's",shop:"newsagent"}},"shop/newsagent|Primera":{countryCodes:["nl"],tags:{brand:"Primera","brand:wikidata":"Q2176149","brand:wikipedia":"nl:Primera (winkelketen)",name:"Primera",shop:"newsagent"}},"shop/newsagent|Relay":{matchTags:["shop/kiosk"],tags:{brand:"Relay","brand:wikidata":"Q3424298","brand:wikipedia":"en:Relay (shop)",name:"Relay",shop:"newsagent"}},"shop/newsagent|WHSmith":{matchTags:["shop/convenience","shop/kiosk","shop/stationery"],nomatch:["shop/books|WHSmith"],tags:{brand:"WHSmith","brand:wikidata":"Q1548712","brand:wikipedia":"en:WHSmith",name:"WHSmith",shop:"newsagent"}},"shop/newsagent|k kiosk":{countryCodes:["ch"],nomatch:["shop/kiosk|k kiosk"],tags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"newsagent"}},"shop/newsagent|Белсоюзпечать":{countryCodes:["by"],matchTags:["shop/kiosk"],nomatch:["shop/newsagent|Витебскоблсоюзпечать","shop/newsagent|Союзпечать"],tags:{brand:"Белсоюзпечать","brand:wikidata":"Q67723214",name:"Белсоюзпечать",shop:"newsagent"}},"shop/newsagent|Витебскоблсоюзпечать":{countryCodes:["by"],matchTags:["shop/kiosk"],nomatch:["shop/newsagent|Белсоюзпечать","shop/newsagent|Союзпечать"],tags:{brand:"Витебскоблсоюзпечать","brand:wikidata":"Q67723214",name:"Витебскоблсоюзпечать",shop:"newsagent"}},"shop/newsagent|Первая полоса":{countryCodes:["ru"],tags:{brand:"Первая полоса","brand:wikidata":"Q62736412",name:"Первая полоса",shop:"newsagent"}},"shop/newsagent|Роспечать":{tags:{brand:"Роспечать",name:"Роспечать",shop:"newsagent"}},"shop/newsagent|Союзпечать":{countryCodes:["ru","ua"],matchTags:["shop/kiosk"],nomatch:["shop/newsagent|Белсоюзпечать","shop/newsagent|Витебскоблсоюзпечать"],tags:{brand:"Союзпечать","brand:wikidata":"Q4430611","brand:wikipedia":"ru:Союзпечать",name:"Союзпечать",shop:"newsagent"}},"shop/newsagent|読売新聞":{countryCodes:["jp"],tags:{brand:"読売新聞","brand:en":"Yomiuri Shimbun","brand:wikidata":"Q645218","brand:wikipedia":"en:Yomiuri Shimbun",name:"読売新聞","name:en":"Yomiuri Shimbun",shop:"newsagent"}},"shop/nutrition_supplements|GNC":{matchNames:["gnc live well"],tags:{brand:"GNC","brand:wikidata":"Q4808595","brand:wikipedia":"en:GNC (store)",name:"GNC",shop:"nutrition_supplements"}},"shop/nutrition_supplements|Popeye's Supplements":{countryCodes:["ca"],tags:{brand:"Popeye's Supplements","brand:wikidata":"Q71096495",name:"Popeye's Supplements",shop:"nutrition_supplements"}},"shop/nutrition_supplements|The Vitamin Shoppe":{countryCodes:["us"],matchTags:["shop/chemist"],tags:{brand:"The Vitamin Shoppe","brand:wikidata":"Q7772938","brand:wikipedia":"en:The Vitamin Shoppe",name:"The Vitamin Shoppe",shop:"nutrition_supplements"}},"shop/nutrition_supplements|Vitamin World":{countryCodes:["us"],tags:{brand:"Vitamin World","brand:wikidata":"Q7936979","brand:wikipedia":"en:Vitamin World",name:"Vitamin World",shop:"nutrition_supplements"}},"shop/optician|Alain Afflelou":{countryCodes:["be","ch","es","fr","pt"],tags:{brand:"Alain Afflelou","brand:wikidata":"Q2829511","brand:wikipedia":"fr:Alain Afflelou (entreprise)",name:"Alain Afflelou",shop:"optician"}},"shop/optician|America's Best Contacts & Eyeglasses":{countryCodes:["us"],tags:{brand:"America's Best Contacts & Eyeglasses","brand:wikidata":"Q4742504","brand:wikipedia":"en:America's Best Contacts & Eyeglasses",name:"America's Best Contacts & Eyeglasses",shop:"optician",short_name:"America's Best"}},"shop/optician|Apollo-Optik":{countryCodes:["de"],nomatch:["amenity/pharmacy|Apollo Pharmacy"],tags:{brand:"Apollo-Optik","brand:wikidata":"Q618940","brand:wikipedia":"de:Apollo-Optik",name:"Apollo-Optik",shop:"optician",short_name:"Apollo"}},"shop/optician|Atol":{countryCodes:["fr"],tags:{brand:"Atol","brand:wikidata":"Q2869542","brand:wikipedia":"fr:Atol (opticien)",name:"Atol",shop:"optician"}},"shop/optician|Boots Opticians":{countryCodes:["gb"],tags:{brand:"Boots Opticians","brand:wikidata":"Q4944037","brand:wikipedia":"en:Boots Opticians",name:"Boots Opticians",shop:"optician",short_name:"Boots"}},"shop/optician|Clarkson Eyecare":{countryCodes:["us"],tags:{brand:"Clarkson Eyecare","brand:wikidata":"Q64027001",healthcare:"optometrist",name:"Clarkson Eyecare",shop:"optician",short_name:"Clarkson"}},"shop/optician|Cohen's Fashion Optical":{countryCodes:["us"],matchNames:["cohen's optical"],tags:{brand:"Cohen's Fashion Optical","brand:wikidata":"Q5141313","brand:wikipedia":"en:Cohen's Fashion Optical",healthcare:"optometrist",name:"Cohen's Fashion Optical",shop:"optician",short_name:"Cohen's"}},"shop/optician|Die Brille":{countryCodes:["de"],tags:{brand:"Die Brille",name:"Die Brille",shop:"optician"}},"shop/optician|Eye Wish":{countryCodes:["nl"],tags:{brand:"Eye Wish","brand:wikidata":"Q62391641",name:"Eye Wish",shop:"optician"}},"shop/optician|Fielmann":{tags:{brand:"Fielmann","brand:wikidata":"Q457822","brand:wikipedia":"en:Fielmann",name:"Fielmann",shop:"optician"}},"shop/optician|GMO":{countryCodes:["cl","co","ec","pe"],tags:{brand:"GMO",name:"GMO",shop:"optician"}},"shop/optician|General Óptica":{countryCodes:["es"],tags:{brand:"General Óptica","brand:wikidata":"Q62391672",name:"General Óptica",shop:"optician"}},"shop/optician|Grand Optical":{countryCodes:["fr"],tags:{brand:"Grand Optical","brand:wikidata":"Q3113677","brand:wikipedia":"fr:Grand Optical",name:"Grand Optical",shop:"optician"}},"shop/optician|Générale d'Optique":{countryCodes:["fr"],tags:{brand:"Générale d'Optique","brand:wikidata":"Q62391701",name:"Générale d'Optique",shop:"optician"}},"shop/optician|Hakim Optical":{countryCodes:["ca"],tags:{brand:"Hakim Optical","brand:wikidata":"Q28232761","brand:wikipedia":"en:Hakim Optical",name:"Hakim Optical",shop:"optician"}},"shop/optician|Hans Anders":{countryCodes:["be","fr","nl"],tags:{brand:"Hans Anders","brand:wikidata":"Q1884976","brand:wikipedia":"nl:Hans Anders",name:"Hans Anders",shop:"optician"}},"shop/optician|Instrumentarium":{countryCodes:["fi"],tags:{brand:"Instrumentarium","brand:wikidata":"Q11864937","brand:wikipedia":"fi:Instrumentarium",name:"Instrumentarium",shop:"optician"}},"shop/optician|Krys":{countryCodes:["fr"],tags:{brand:"Krys","brand:wikidata":"Q3119538","brand:wikipedia":"fr:Krys Group",name:"Krys",shop:"optician"}},"shop/optician|LensCrafters":{countryCodes:["ca","us"],tags:{brand:"LensCrafters","brand:wikidata":"Q6523209","brand:wikipedia":"en:LensCrafters",name:"LensCrafters",shop:"optician"}},"shop/optician|Lenskart":{countryCodes:["in"],tags:{brand:"Lenskart","brand:wikidata":"Q17068753",name:"Lenskart",shop:"optician"}},"shop/optician|Les Opticiens Mutualistes":{countryCodes:["fr"],tags:{brand:"Les Opticiens Mutualistes","brand:wikidata":"Q18414551","brand:wikipedia":"fr:Les Opticiens Mutualistes",name:"Les Opticiens Mutualistes",shop:"optician"}},"shop/optician|Lissac":{countryCodes:["fr"],tags:{brand:"Lissac","brand:wikidata":"Q63102559",name:"Lissac",shop:"optician"}},"shop/optician|Multiópticas~(Portugal)":{countryCodes:["pt"],tags:{brand:"Multiópticas","brand:wikidata":"Q62391722",name:"Multiópticas",shop:"optician"}},"shop/optician|Multiópticas~(Spain)":{countryCodes:["es"],tags:{brand:"Multiópticas","brand:wikidata":"Q62391719",name:"Multiópticas",shop:"optician"}},"shop/optician|Nissen":{countryCodes:["fi"],tags:{brand:"Nissen",name:"Nissen",shop:"optician"}},"shop/optician|Oakley":{countryCodes:["us"],matchTags:["shop/clothes","shop/sports"],tags:{brand:"Oakley","brand:wikidata":"Q161906","brand:wikipedia":"en:Oakley, Inc.",name:"Oakley",shop:"optician"}},"shop/optician|Oliver Peoples":{tags:{brand:"Oliver Peoples","brand:wikidata":"Q7087746","brand:wikipedia":"en:Oliver Peoples",name:"Oliver Peoples",shop:"optician"}},"shop/optician|Optic 2000":{countryCodes:["ch","fr"],tags:{brand:"Optic 2000","brand:wikidata":"Q3354445","brand:wikipedia":"fr:Optic 2000",name:"Optic 2000",shop:"optician"}},"shop/optician|Optical Center":{tags:{brand:"Optical Center","brand:wikidata":"Q3354448","brand:wikipedia":"fr:Optical Center",name:"Optical Center",shop:"optician"}},"shop/optician|Optical Express":{countryCodes:["gb"],tags:{brand:"Optical Express","brand:wikidata":"Q7098810","brand:wikipedia":"en:Optical Express",name:"Optical Express",shop:"optician"}},"shop/optician|Opticalia":{tags:{brand:"Opticalia","brand:wikidata":"Q62082114",name:"Opticalia",shop:"optician"}},"shop/optician|Pearle Vision":{countryCodes:["ca","us"],tags:{brand:"Pearle Vision","brand:wikidata":"Q2231148","brand:wikipedia":"en:Pearle Vision",name:"Pearle Vision",shop:"optician",short_name:"Pearle"}},"shop/optician|Scrivens":{countryCodes:["gb"],tags:{brand:"Scrivens","brand:wikidata":"Q79424133",name:"Scrivens",shop:"optician"}},"shop/optician|Silmäasema":{countryCodes:["fi"],tags:{brand:"Silmäasema","brand:wikidata":"Q15994200","brand:wikipedia":"fi:Silmäasema",name:"Silmäasema",shop:"optician"}},"shop/optician|Solstice Sunglasses":{tags:{brand:"Solstice Sunglasses",name:"Solstice Sunglasses",shop:"optician",short_name:"Solstice"}},"shop/optician|Specsavers":{tags:{brand:"Specsavers","brand:wikidata":"Q2000610","brand:wikipedia":"en:Specsavers",name:"Specsavers",shop:"optician"}},"shop/optician|Sunglass Hut":{matchTags:["shop/sunglasses"],tags:{brand:"Sunglass Hut","brand:wikidata":"Q136311","brand:wikipedia":"en:Sunglass Hut",name:"Sunglass Hut",shop:"optician"}},"shop/optician|Synoptik":{countryCodes:["se"],tags:{brand:"Synoptik","brand:wikidata":"Q10687541","brand:wikipedia":"sv:Synoptik",name:"Synoptik",shop:"optician"}},"shop/optician|Synsam":{countryCodes:["fi","no","se"],tags:{brand:"Synsam","brand:wikidata":"Q12004589","brand:wikipedia":"sv:Synsam",name:"Synsam",shop:"optician"}},"shop/optician|Target Optical":{countryCodes:["us"],tags:{brand:"Target Optical","brand:wikidata":"Q19903688","brand:wikipedia":"en:Target Optical",name:"Target Optical",shop:"optician"}},"shop/optician|Vision Express":{tags:{brand:"Vision Express","brand:wikidata":"Q7936150","brand:wikipedia":"en:Vision Express",name:"Vision Express",shop:"optician"}},"shop/optician|Visionworks":{countryCodes:["us"],tags:{brand:"Visionworks","brand:wikidata":"Q5422607","brand:wikipedia":"en:Visionworks",name:"Visionworks",shop:"optician"}},"shop/optician|Warby Parker":{countryCodes:["ca","us"],tags:{brand:"Warby Parker","brand:wikidata":"Q7968882","brand:wikipedia":"en:Warby Parker",name:"Warby Parker",shop:"optician"}},"shop/optician|Люксоптика":{tags:{brand:"Люксоптика",name:"Люксоптика",shop:"optician"}},"shop/optician|Оптимист Оптика":{countryCodes:["ru"],tags:{brand:"Оптимист Оптика",name:"Оптимист Оптика",shop:"optician"}},"shop/optician|Счастливый взгляд":{tags:{brand:"Счастливый взгляд",name:"Счастливый взгляд",shop:"optician"}},"shop/optician|แว่นท็อปเจริญ":{countryCodes:["th"],tags:{brand:"แว่นท็อปเจริญ","brand:th":"แว่นท็อปเจริญ","brand:wikidata":"Q62391732",name:"แว่นท็อปเจริญ","name:th":"แว่นท็อปเจริญ",shop:"optician"}},"shop/optician|メガネの三城":{countryCodes:["jp"],tags:{brand:"メガネの三城","brand:ja":"メガネの三城",name:"メガネの三城","name:ja":"メガネの三城",shop:"optician"}},"shop/optician|メガネストアー":{countryCodes:["jp"],tags:{brand:"メガネストアー","brand:ja":"メガネストアー",name:"メガネストアー","name:ja":"メガネストアー",shop:"optician"}},"shop/optician|メガネスーパー":{countryCodes:["jp"],tags:{brand:"メガネスーパー","brand:ja":"メガネスーパー","brand:wikidata":"Q11343504","brand:wikipedia":"ja:メガネスーパー",name:"メガネスーパー","name:en":"Meganesuper","name:ja":"メガネスーパー",shop:"optician"}},"shop/optician|寶島眼鏡":{countryCodes:["zh"],tags:{brand:"寶島眼鏡","brand:wikidata":"Q62391741",name:"寶島眼鏡",shop:"optician"}},"shop/optician|眼鏡市場":{countryCodes:["jp"],tags:{brand:"眼鏡市場","brand:en":"Megane Ichiba","brand:wikidata":"Q11343506","brand:wikipedia":"ja:メガネトップ",name:"眼鏡市場","name:en":"Megane Ichiba",shop:"optician"}},"shop/outdoor|Bass Pro Shops":{countryCodes:["ca","us"],tags:{brand:"Bass Pro Shops","brand:wikidata":"Q4867953","brand:wikipedia":"en:Bass Pro Shops",name:"Bass Pro Shops",shop:"outdoor"}},"shop/outdoor|Blacks":{countryCodes:["gb"],tags:{brand:"Blacks","brand:wikidata":"Q64822933",name:"Blacks",shop:"outdoor"}},"shop/outdoor|Cabela's":{countryCodes:["ca","us"],tags:{brand:"Cabela's","brand:wikidata":"Q2793714","brand:wikipedia":"en:Cabela's",name:"Cabela's",shop:"outdoor"}},"shop/outdoor|Cotswold Outdoor":{countryCodes:["gb"],matchNames:["cotswold"],tags:{brand:"Cotswold Outdoor","brand:wikidata":"Q5175488","brand:wikipedia":"en:Cotswold Outdoor",name:"Cotswold Outdoor",shop:"outdoor"}},"shop/outdoor|Gander Outdoors":{countryCodes:["us"],matchNames:["gander mountain"],tags:{brand:"Gander Outdoors","brand:wikidata":"Q64357426","brand:wikipedia":"en:Gander Outdoors",name:"Gander Outdoors",shop:"outdoor"}},"shop/outdoor|Go Outdoors":{countryCodes:["gb"],tags:{brand:"Go Outdoors","brand:wikidata":"Q75293941",name:"Go Outdoors",shop:"outdoor"}},"shop/outdoor|Jack Wolfskin":{countryCodes:["ch","de","fr"],matchTags:["shop/clothes"],tags:{brand:"Jack Wolfskin","brand:wikidata":"Q536133","brand:wikipedia":"en:Jack Wolfskin",name:"Jack Wolfskin",shop:"outdoor"}},"shop/outdoor|Kathmandu":{countryCodes:["au","nz"],tags:{brand:"Kathmandu","brand:wikidata":"Q1736294","brand:wikipedia":"en:Kathmandu (company)",name:"Kathmandu",shop:"outdoor"}},"shop/outdoor|Millets":{countryCodes:["gb"],tags:{brand:"Millets","brand:wikidata":"Q64822903",name:"Millets",shop:"outdoor"}},"shop/outdoor|Mountain Warehouse":{countryCodes:["gb","pl"],tags:{brand:"Mountain Warehouse","brand:wikidata":"Q6925414","brand:wikipedia":"en:Mountain Warehouse",name:"Mountain Warehouse",shop:"outdoor"}},"shop/outdoor|REI":{countryCodes:["id","us"],tags:{brand:"REI","brand:wikidata":"Q3414933","brand:wikipedia":"en:Recreational Equipment, Inc.",name:"REI",official_name:"Recreational Equipment, Inc.",shop:"outdoor"}},"shop/outdoor|Sportsman's Warehouse":{countryCodes:["us"],tags:{brand:"Sportsman's Warehouse","brand:wikidata":"Q7579979","brand:wikipedia":"en:Sportsman's Warehouse",name:"Sportsman's Warehouse",shop:"outdoor"}},"shop/outdoor|Trespass":{countryCodes:["fr","gb","ie"],tags:{brand:"Trespass","brand:wikidata":"Q17035733","brand:wikipedia":"en:Trespass (clothing)",name:"Trespass",shop:"outdoor"}},"shop/outpost|Wildberries":{countryCodes:["by","ru"],matchTags:["shop/clothes"],tags:{brand:"Wildberries","brand:wikidata":"Q24933714","brand:wikipedia":"ru:Wildberries",name:"Wildberries",shop:"outpost"}},"shop/paint|Benjamin Moore":{countryCodes:["ca","us"],tags:{brand:"Benjamin Moore","brand:wikidata":"Q4889038","brand:wikipedia":"en:Benjamin Moore & Co.",name:"Benjamin Moore",shop:"paint"}},"shop/paint|Comex":{tags:{brand:"Comex","brand:wikidata":"Q5151654","brand:wikipedia":"en:Comex Group",name:"Comex",shop:"paint"}},"shop/paint|Jotun":{tags:{brand:"Jotun","brand:wikidata":"Q1778870","brand:wikipedia":"en:Jotun (company)",name:"Jotun",shop:"paint"}},"shop/paint|National Paints":{countryCodes:["ae","qa"],tags:{brand:"National Paints","brand:wikidata":"Q62073521",name:"National Paints",shop:"paint"}},"shop/paint|Sherwin-Williams":{matchNames:["sherwin williams paint store","sherwin williams paints"],tags:{brand:"Sherwin-Williams","brand:wikidata":"Q48881","brand:wikipedia":"en:Sherwin-Williams",name:"Sherwin-Williams",shop:"paint"}},"shop/party|Party City":{countryCodes:["ca","us"],tags:{brand:"Party City","brand:wikidata":"Q7140896","brand:wikipedia":"en:Party City",name:"Party City",shop:"party"}},"shop/pastry|Cookies by Design":{countryCodes:["us"],matchTags:["shop/confectionery","shop/gift"],tags:{brand:"Cookies by Design","brand:wikidata":"Q5167112","brand:wikipedia":"en:Cookies by Design",craft:"bakery",name:"Cookies by Design",shop:"pastry"}},"shop/pastry|Namur":{countryCodes:["lu"],matchTags:["shop/bakery","shop/confectionery"],tags:{brand:"Namur",name:"Namur",shop:"pastry"}},"shop/pastry|Oberweis":{countryCodes:["lu"],matchTags:["shop/bakery","shop/confectionery"],tags:{brand:"Oberweis",name:"Oberweis",shop:"pastry"}},"shop/pastry|Smallcakes":{countryCodes:["us"],tags:{brand:"Smallcakes","brand:wikidata":"Q62384749",name:"Smallcakes",shop:"pastry"}},"shop/pawnbroker|Cash Converters":{tags:{brand:"Cash Converters","brand:wikidata":"Q5048645","brand:wikipedia":"en:Cash Converters",name:"Cash Converters",shop:"pawnbroker"}},"shop/pawnbroker|Cebuana Lhuillier":{countryCodes:["ph"],matchNames:["agencia cebuana","m lhuillier"],tags:{brand:"Cebuana Lhuillier","brand:wikidata":"Q17064661","brand:wikipedia":"en:Cebuana Lhuillier",name:"Cebuana Lhuillier",shop:"pawnbroker",short_name:"Cebuana"}},"shop/pawnbroker|Loombard":{countryCodes:["pl"],tags:{brand:"Loombard",name:"Loombard",shop:"pawnbroker"}},"shop/pawnbroker|Palawan Pawnshop":{countryCodes:["ph"],tags:{brand:"Palawan Pawnshop","brand:wikidata":"Q62391488",name:"Palawan Pawnshop",shop:"pawnbroker"}},"shop/pawnbroker|RD Pawnshop":{countryCodes:["ph"],tags:{brand:"RD Pawnshop",name:"RD Pawnshop",shop:"pawnbroker"}},"shop/pawnbroker|Villarica Pawnshop":{countryCodes:["ph"],tags:{brand:"Villarica Pawnshop","brand:wikidata":"Q62391438",name:"Villarica Pawnshop",shop:"pawnbroker"}},"shop/pawnbroker|Скарбниця":{countryCodes:["ua"],tags:{brand:"Скарбниця",name:"Скарбниця",shop:"pawnbroker"}},"shop/pawnbroker|大黒屋":{countryCodes:["jp"],tags:{brand:"大黒屋","brand:en":"Daikokuya","brand:ja":"大黒屋","brand:wikidata":"Q11442068","brand:wikipedia":"ja:大黒屋 (チケット)",name:"大黒屋","name:en":"Daikokuya","name:ja":"大黒屋",shop:"pawnbroker"}},"shop/perfumery|Douglas":{countryCodes:["at","ch","de","es","it","nl","pl"],matchTags:["shop/beauty","shop/chemist","shop/cosmetics"],tags:{brand:"Douglas","brand:wikidata":"Q2052213","brand:wikipedia":"de:Parfümerie Douglas",name:"Douglas",shop:"perfumery"}},"shop/perfumery|FAnn":{countryCodes:["cz","sk"],tags:{brand:"FAnn","brand:wikidata":"Q62391353",name:"FAnn",shop:"perfumery"}},"shop/perfumery|ICI PARIS XL":{countryCodes:["be","lu","nl"],tags:{brand:"ICI PARIS XL","brand:wikidata":"Q769749","brand:wikipedia":"en:ICI Paris XL",name:"ICI PARIS XL",shop:"perfumery"}},"shop/perfumery|Marionnaud":{countryCodes:["at","ch","es","fr","it","sk"],matchTags:["shop/beauty","shop/cosmetics"],tags:{brand:"Marionnaud","brand:wikidata":"Q1129073","brand:wikipedia":"fr:Marionnaud",name:"Marionnaud",shop:"perfumery"}},"shop/perfumery|O Boticário":{countryCodes:["br"],tags:{brand:"O Boticário","brand:wikidata":"Q7073219","brand:wikipedia":"en:O Boticário",name:"O Boticário",shop:"perfumery"}},"shop/perfumery|Perfumania":{countryCodes:["us"],matchTags:["shop/beauty","shop/cosmetics"],tags:{brand:"Perfumania","brand:wikidata":"Q72983916",name:"Perfumania",shop:"perfumery"}},"shop/perfumery|The Perfume Shop":{countryCodes:["gb"],matchTags:["shop/beauty","shop/cosmetics"],tags:{brand:"The Perfume Shop","brand:wikidata":"Q7756719","brand:wikipedia":"en:The Perfume Shop",name:"The Perfume Shop",shop:"perfumery"}},"shop/pet|Arcaplanet":{tags:{brand:"Arcaplanet",name:"Arcaplanet",shop:"pet"}},"shop/pet|Das Futterhaus":{countryCodes:["at","de"],tags:{brand:"Das Futterhaus","brand:wikidata":"Q1167914","brand:wikipedia":"de:Das Futterhaus",name:"Das Futterhaus",shop:"pet"}},"shop/pet|Faunatar":{countryCodes:["fi"],tags:{brand:"Faunatar","brand:wikidata":"Q11859415","brand:wikipedia":"fi:Faunatar",name:"Faunatar",shop:"pet"}},"shop/pet|Fressnapf":{countryCodes:["at","ch","de","hu","lu"],tags:{brand:"Fressnapf","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Fressnapf",shop:"pet"}},"shop/pet|Global Pet Foods":{countryCodes:["ca"],tags:{brand:"Global Pet Foods","brand:wikidata":"Q57985699",name:"Global Pet Foods",shop:"pet"}},"shop/pet|Maxi Zoo":{countryCodes:["be","ch","dk","fr","ie","it","pl"],tags:{brand:"Maxi Zoo","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Maxi Zoo",shop:"pet"}},"shop/pet|Mud Bay":{countryCodes:["us"],tags:{brand:"Mud Bay","brand:wikidata":"Q30324179","brand:wikipedia":"en:Mud Bay pet store",name:"Mud Bay",shop:"pet"}},"shop/pet|Musti ja Mirri":{countryCodes:["fi"],tags:{brand:"Musti ja Mirri","brand:wikidata":"Q11883558","brand:wikipedia":"fi:Musti ja Mirri",name:"Musti ja Mirri",shop:"pet"}},"shop/pet|Pet Food Express":{countryCodes:["us"],tags:{brand:"Pet Food Express","brand:wikidata":"Q7171541","brand:wikipedia":"en:Pet Food Express",name:"Pet Food Express",shop:"pet"}},"shop/pet|Pet Supermarket":{countryCodes:["us"],tags:{brand:"Pet Supermarket","brand:wikidata":"Q61968363",name:"Pet Supermarket",shop:"pet"}},"shop/pet|Pet Supplies Plus":{countryCodes:["us"],tags:{brand:"Pet Supplies Plus","brand:wikidata":"Q7171563","brand:wikipedia":"en:Pet Supplies Plus",name:"Pet Supplies Plus",shop:"pet"}},"shop/pet|Pet Valu":{countryCodes:["ca","us"],tags:{brand:"Pet Valu","brand:wikidata":"Q58009635",name:"Pet Valu",shop:"pet"}},"shop/pet|PetSmart":{countryCodes:["ca","us"],tags:{brand:"PetSmart","brand:wikidata":"Q3307147","brand:wikipedia":"en:PetSmart",name:"PetSmart",shop:"pet"}},"shop/pet|Petco":{countryCodes:["us"],tags:{brand:"Petco","brand:wikidata":"Q7171798","brand:wikipedia":"en:Petco",name:"Petco",shop:"pet"}},"shop/pet|Petland":{countryCodes:["us"],tags:{brand:"Petland","brand:wikidata":"Q17111474","brand:wikipedia":"en:Petland",name:"Petland",shop:"pet"}},"shop/pet|Petland Discounts":{countryCodes:["us"],tags:{brand:"Petland Discounts","brand:wikidata":"Q7178463","brand:wikipedia":"en:Petland Discounts",name:"Petland Discounts",shop:"pet"}},"shop/pet|Pets at Home":{countryCodes:["gb"],tags:{brand:"Pets at Home","brand:wikidata":"Q7179258","brand:wikipedia":"en:Pets at Home",name:"Pets at Home",shop:"pet"}},"shop/pet|Unleashed":{countryCodes:["us"],tags:{alt_name:"Unleashed by Petco",brand:"Unleashed","brand:wikidata":"Q62122874",name:"Unleashed",shop:"pet"}},"shop/pet|Wild Birds Unlimited":{countryCodes:["us"],tags:{brand:"Wild Birds Unlimited","brand:wikidata":"Q8000542","brand:wikipedia":"en:Wild Birds Unlimited",name:"Wild Birds Unlimited",shop:"pet"}},"shop/pet|Бетховен":{countryCodes:["ru"],tags:{brand:"Бетховен","brand:wikidata":"Q62390798",name:"Бетховен",shop:"pet"}},"shop/pet|Четыре лапы":{countryCodes:["kz","ru"],tags:{brand:"Четыре лапы","brand:wikidata":"Q62390783",name:"Четыре лапы",shop:"pet"}},"shop/pet|イオンペット":{countryCodes:["jp"],tags:{brand:"イオンペット","brand:en":"Aeonpet","brand:ja":"イオンペット","brand:wikidata":"Q11286064","brand:wikipedia":"ja:イオンペット",name:"イオンペット","name:en":"Aeonpet","name:ja":"イオンペット",shop:"pet"}},"shop/photo|Kamera Express":{countryCodes:["be","de","nl"],tags:{brand:"Kamera Express","brand:wikidata":"Q77976400",name:"Kamera Express",shop:"photo"}},"shop/photo|Kodak Express":{matchNames:["kodak"],tags:{brand:"Kodak Express","brand:wikidata":"Q6425126","brand:wikipedia":"en:Kodak Express",name:"Kodak Express",shop:"photo"}},"shop/photo|Max Spielmann":{countryCodes:["gb"],tags:{brand:"Max Spielmann","brand:wikidata":"Q76221051",name:"Max Spielmann",shop:"photo"}},"shop/photo|カメラのキタムラ":{countryCodes:["jp"],tags:{brand:"カメラのキタムラ","brand:en":"Kitamura Camera","brand:ja":"カメラのキタムラ","brand:wikidata":"Q11294821","brand:wikipedia":"ja:カメラのキタムラ",name:"カメラのキタムラ","name:en":"Kitamura Camera","name:ja":"カメラのキタムラ",shop:"photo"}},"shop/pottery|Sargadelos":{tags:{brand:"Sargadelos","brand:wikidata":"Q12390201","brand:wikipedia":"gl:Grupo Sargadelos",name:"Sargadelos",shop:"pottery"}},"shop/printer_ink|Cartridge World":{matchTags:["shop/computer"],tags:{brand:"Cartridge World","brand:wikidata":"Q5047439","brand:wikipedia":"en:Cartridge World",name:"Cartridge World",shop:"printer_ink"}},"shop/rental|Penske Truck Rental":{countryCodes:["ca","us"],matchTags:["amenity/car_rental","office/moving_company"],tags:{brand:"Penske Truck Rental","brand:wikidata":"Q81234570",name:"Penske Truck Rental",shop:"rental",short_name:"Penske"}},"shop/rental|Ryder":{countryCodes:["ca","gb","mx","us"],matchTags:["amenity/car_rental"],tags:{brand:"Ryder","brand:wikidata":"Q2178198","brand:wikipedia":"en:Ryder",name:"Ryder",shop:"rental"}},"shop/rental|U-Haul":{countryCodes:["ca","us"],matchNames:["uhaul neighborhood dealer"],nomatch:["shop/storage_rental|U-Haul"],tags:{brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul",shop:"rental"}},"shop/rental|United Rentals":{countryCodes:["ca","us"],matchNames:["united rental"],matchTags:["amenity/car_rental","amenity/tool_rental","shop/doityourself","shop/hardware","shop/tool_hire","shop/trade"],tags:{brand:"United Rentals","brand:wikidata":"Q7889101","brand:wikipedia":"en:United Rentals",name:"United Rentals",shop:"rental"}},"shop/seafood|Рыба":{tags:{brand:"Рыба",name:"Рыба",shop:"seafood"}},"shop/second_hand|Savers":{countryCodes:["au","ca","us"],nomatch:["shop/chemist|Savers"],tags:{brand:"Savers","brand:wikidata":"Q7428188","brand:wikipedia":"en:Savers",name:"Savers",shop:"second_hand"}},"shop/second_hand|Value Village":{countryCodes:["ca","us"],tags:{brand:"Value Village","brand:wikidata":"Q7428188","brand:wikipedia":"en:Savers",name:"Value Village",shop:"second_hand"}},"shop/shoes|ABC Schuh-Center":{countryCodes:["de"],matchNames:["abc schuhe"],tags:{brand:"ABC Schuh-Center","brand:wikidata":"Q66007228",name:"ABC Schuh-Center",shop:"shoes"}},"shop/shoes|ABCマート":{countryCodes:["jp"],tags:{brand:"ABCマート","brand:ja":"ABCマート","brand:wikidata":"Q11188787","brand:wikipedia":"en:ABC-Mart",name:"ABCマート","name:ja":"ABCマート",shop:"shoes"}},"shop/shoes|Aldo":{tags:{brand:"Aldo","brand:wikidata":"Q2832297","brand:wikipedia":"en:Aldo Group",name:"Aldo",shop:"shoes"}},"shop/shoes|Allen Edmonds":{countryCodes:["us"],tags:{brand:"Allen Edmonds","brand:wikidata":"Q4731627","brand:wikipedia":"en:Allen Edmonds",name:"Allen Edmonds",shop:"shoes"}},"shop/shoes|André":{countryCodes:["fr"],tags:{brand:"André","brand:wikidata":"Q2847114","brand:wikipedia":"fr:André (chaussure)",name:"André",shop:"shoes"}},"shop/shoes|Bata":{tags:{brand:"Bata","brand:wikidata":"Q688082","brand:wikipedia":"en:Bata (company)",name:"Bata",shop:"shoes"}},"shop/shoes|Belwest":{countryCodes:["by","ru"],matchNames:["белвест"],tags:{brand:"Belwest",name:"Belwest",shop:"shoes"}},"shop/shoes|Besson Chaussures":{countryCodes:["fr"],tags:{brand:"Besson Chaussures","brand:wikidata":"Q2899930","brand:wikipedia":"fr:Besson Chaussures",name:"Besson Chaussures",shop:"shoes"}},"shop/shoes|Birkenstock":{tags:{brand:"Birkenstock","brand:wikidata":"Q648458","brand:wikipedia":"en:Birkenstock",name:"Birkenstock",shop:"shoes"}},"shop/shoes|Brantano":{countryCodes:["be","gb","lu"],tags:{brand:"Brantano","brand:wikidata":"Q4957616","brand:wikipedia":"en:Brantano Footwear",name:"Brantano",shop:"shoes"}},"shop/shoes|Browns":{countryCodes:["ca"],tags:{brand:"Browns","brand:wikidata":"Q16954153","brand:wikipedia":"en:Browns Shoes",name:"Browns",shop:"shoes"}},"shop/shoes|CCC":{tags:{brand:"CCC","brand:wikidata":"Q11788344","brand:wikipedia":"de:CCC (Unternehmen)",name:"CCC",shop:"shoes"}},"shop/shoes|Call It Spring":{tags:{brand:"Call It Spring","brand:wikidata":"Q7580363","brand:wikipedia":"en:Call It Spring",name:"Call It Spring",shop:"shoes"}},"shop/shoes|Camper":{tags:{brand:"Camper","brand:wikidata":"Q1030922","brand:wikipedia":"en:Camper (company)",name:"Camper",shop:"shoes"}},"shop/shoes|Chaussea":{countryCodes:["be","es","fr","lu"],tags:{brand:"Chaussea","brand:wikidata":"Q62082044",name:"Chaussea",shop:"shoes"}},"shop/shoes|Christian Louboutin":{tags:{brand:"Christian Louboutin","brand:wikidata":"Q23681835",name:"Christian Louboutin",shop:"shoes"}},"shop/shoes|Clarks":{tags:{brand:"Clarks","brand:wikidata":"Q1095857","brand:wikipedia":"en:C. & J. Clark",name:"Clarks",shop:"shoes"}},"shop/shoes|Cole Haan":{countryCodes:["us"],tags:{brand:"Cole Haan","brand:wikidata":"Q4356504","brand:wikipedia":"en:Cole Haan",name:"Cole Haan",shop:"shoes"}},"shop/shoes|Converse":{tags:{brand:"Converse","brand:wikidata":"Q319515","brand:wikipedia":"en:Converse (shoe company)",name:"Converse",shop:"shoes"}},"shop/shoes|Courir":{tags:{brand:"Courir","brand:wikidata":"Q3001258","brand:wikipedia":"fr:Courir (chaîne de magasins)",name:"Courir",shop:"shoes"}},"shop/shoes|Crocs":{tags:{brand:"Crocs","brand:wikidata":"Q926699","brand:wikipedia":"en:Crocs",name:"Crocs",shop:"shoes"}},"shop/shoes|DSW":{countryCodes:["ca","us"],matchNames:["designer shoe warehouse","dsw shoes"],tags:{brand:"DSW","brand:wikidata":"Q5206207","brand:wikipedia":"en:Designer Brands",name:"DSW",shop:"shoes"}},"shop/shoes|Deichmann":{tags:{brand:"Deichmann","brand:wikidata":"Q664543","brand:wikipedia":"en:Deichmann SE",name:"Deichmann",shop:"shoes"}},"shop/shoes|Din sko":{countryCodes:["no","se"],tags:{brand:"Din sko","brand:wikidata":"Q10472869","brand:wikipedia":"sv:Din sko",name:"Din sko",shop:"shoes"}},"shop/shoes|Dosenbach":{countryCodes:["ch"],tags:{brand:"Dosenbach","brand:wikidata":"Q2677329","brand:wikipedia":"de:Dosenbach-Ochsner",name:"Dosenbach",shop:"shoes"}},"shop/shoes|Dr. Martens":{matchNames:["doc marten","doc martens","doctor marten","doctor martens","martens"],tags:{brand:"Dr. Martens","brand:wikidata":"Q1126126","brand:wikipedia":"en:Dr. Martens",name:"Dr. Martens",shop:"shoes"}},"shop/shoes|Dune London":{countryCodes:["ch","de","fr","gb","nl"],tags:{brand:"Dune London","brand:wikidata":"Q65557112",name:"Dune London",shop:"shoes",short_name:"Dune"}},"shop/shoes|Ecco":{tags:{brand:"Ecco","brand:wikidata":"Q1280255","brand:wikipedia":"en:ECCO",name:"Ecco",shop:"shoes"}},"shop/shoes|FLO":{countryCodes:["al","tr"],nomatch:["amenity/charging_station|FLO"],tags:{brand:"FLO","brand:wikidata":"Q61994802",name:"FLO",shop:"shoes"}},"shop/shoes|Famous Footwear":{countryCodes:["us"],tags:{brand:"Famous Footwear","brand:wikidata":"Q5433457","brand:wikipedia":"en:Famous Footwear",name:"Famous Footwear",shop:"shoes"}},"shop/shoes|Foot Locker":{tags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Foot Locker",shop:"shoes"}},"shop/shoes|Foot Solutions":{tags:{brand:"Foot Solutions","brand:wikidata":"Q69982369","healthcare:speciality":"pedorthist",name:"Foot Solutions",shoes:"orthopaedic",shop:"shoes"}},"shop/shoes|Footaction":{countryCodes:["ca","pr","us"],tags:{brand:"Footaction","brand:wikidata":"Q71022064",name:"Footaction",shop:"shoes"}},"shop/shoes|G.H. Bass & Co.":{countryCodes:["gb","us"],tags:{brand:"G.H. Bass & Co.","brand:wikidata":"Q16993893","brand:wikipedia":"en:G.H. Bass & Co.",name:"G.H. Bass & Co.",shop:"shoes"}},"shop/shoes|Gabor":{countryCodes:["de","it"],tags:{brand:"Gabor","brand:wikidata":"Q1488760","brand:wikipedia":"de:Gabor Shoes",name:"Gabor",shop:"shoes"}},"shop/shoes|Geox":{tags:{brand:"Geox","brand:wikidata":"Q588001","brand:wikipedia":"en:Geox",name:"Geox",shop:"shoes"}},"shop/shoes|Görtz":{countryCodes:["de"],nomatch:["shop/bakery|Görtz"],tags:{brand:"Görtz","brand:wikidata":"Q1559593","brand:wikipedia":"de:Ludwig Görtz",name:"Görtz",shop:"shoes"}},"shop/shoes|Havaianas":{tags:{brand:"Havaianas","brand:wikidata":"Q3128675","brand:wikipedia":"en:Havaianas",name:"Havaianas",shop:"shoes"}},"shop/shoes|Humanic":{countryCodes:["at","cz","de","hu","ro","sk"],tags:{brand:"Humanic","brand:wikidata":"Q1636668","brand:wikipedia":"en:Humanic",name:"Humanic",shop:"shoes"}},"shop/shoes|Hush Puppies":{tags:{brand:"Hush Puppies","brand:wikidata":"Q1828588","brand:wikipedia":"en:Hush Puppies",name:"Hush Puppies",shop:"shoes"}},"shop/shoes|Jimmy Choo":{tags:{brand:"Jimmy Choo","brand:wikidata":"Q5213855","brand:wikipedia":"en:Jimmy Choo Ltd",name:"Jimmy Choo",shop:"shoes"}},"shop/shoes|Johnston & Murphy":{countryCodes:["ca","us"],tags:{brand:"Johnston & Murphy","brand:wikidata":"Q6268615","brand:wikipedia":"en:Johnston & Murphy",name:"Johnston & Murphy",shop:"shoes"}},"shop/shoes|Jones Bootmaker":{countryCodes:["gb"],tags:{brand:"Jones Bootmaker","brand:wikidata":"Q6275139","brand:wikipedia":"en:Jones Bootmaker",name:"Jones Bootmaker",shop:"shoes",short_name:"Jones"}},"shop/shoes|Journeys":{countryCodes:["ca","us"],tags:{brand:"Journeys","brand:wikidata":"Q61994838",name:"Journeys",shop:"shoes"}},"shop/shoes|Kari":{tags:{brand:"Kari","brand:wikidata":"Q47155680","brand:wikipedia":"ru:Kari (компания)",name:"Kari",shop:"shoes"}},"shop/shoes|Kids Foot Locker":{countryCodes:["us"],tags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Kids Foot Locker",shop:"shoes"}},"shop/shoes|Kurt Geiger":{countryCodes:["gb"],tags:{brand:"Kurt Geiger","brand:wikidata":"Q17063744",name:"Kurt Geiger",shop:"shoes"}},"shop/shoes|La Halle aux Chaussures":{countryCodes:["fr"],tags:{brand:"La Halle aux Chaussures","brand:wikidata":"Q62390731",name:"La Halle aux Chaussures",shop:"shoes"}},"shop/shoes|Lady Foot Locker":{countryCodes:["us"],tags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Lady Foot Locker",shop:"shoes"}},"shop/shoes|Little Burgundy":{countryCodes:["ca"],tags:{brand:"Little Burgundy","brand:wikidata":"Q72984664",name:"Little Burgundy",shop:"shoes"}},"shop/shoes|Manfield~(France)":{countryCodes:["fr"],tags:{brand:"Manfield",name:"Manfield",shop:"shoes"}},"shop/shoes|Manfield~(Netherlands)":{countryCodes:["be","de","nl"],tags:{brand:"Manfield","brand:wikidata":"Q58328872","brand:wikipedia":"nl:Manfield schoenen",name:"Manfield",shop:"shoes"}},"shop/shoes|Marko":{countryCodes:["by","ru"],matchNames:["марко"],tags:{brand:"Marko","brand:wikidata":"Q67861181",name:"Marko","name:ru":"Марко",shop:"shoes"}},"shop/shoes|Mephisto":{tags:{brand:"Mephisto","brand:wikidata":"Q822975","brand:wikipedia":"fr:Mephisto (chaussure)",name:"Mephisto",shop:"shoes"}},"shop/shoes|Merrell":{countryCodes:["us"],tags:{brand:"Merrell","brand:wikidata":"Q1921997","brand:wikipedia":"en:Merrell (company)",name:"Merrell",shop:"shoes"}},"shop/shoes|Minelli":{tags:{brand:"Minelli","brand:wikidata":"Q61994831",name:"Minelli",shop:"shoes"}},"shop/shoes|Moshulu":{countryCodes:["gb"],tags:{brand:"Moshulu","brand:wikidata":"Q81555702",name:"Moshulu",shop:"shoes"}},"shop/shoes|Naturalizer":{countryCodes:["ca","cn","gu","us"],tags:{brand:"Naturalizer","brand:wikidata":"Q65012038",name:"Naturalizer",shop:"shoes"}},"shop/shoes|New Balance":{tags:{brand:"New Balance","brand:wikidata":"Q742988","brand:wikipedia":"en:New Balance",name:"New Balance",shop:"shoes"}},"shop/shoes|Office":{countryCodes:["de","gb","ie","ro"],tags:{brand:"Office","brand:wikidata":"Q7079121","brand:wikipedia":"en:Office Holdings",name:"Office",shop:"shoes"}},"shop/shoes|Payless ShoeSource":{matchNames:["payless"],tags:{brand:"Payless ShoeSource","brand:wikidata":"Q7156755","brand:wikipedia":"en:Payless ShoeSource",name:"Payless ShoeSource",shop:"shoes"}},"shop/shoes|Quick Schuh":{countryCodes:["at","de"],tags:{brand:"Quick Schuh","brand:wikidata":"Q2123069","brand:wikipedia":"de:Quick Schuh",name:"Quick Schuh",shop:"shoes"}},"shop/shoes|R.M.Williams":{tags:{brand:"R.M.Williams","brand:wikidata":"Q65042966","brand:wikipedia":"en:R. M. Williams (company)",name:"R.M.Williams",shop:"shoes"}},"shop/shoes|Rack Room Shoes":{countryCodes:["us"],tags:{brand:"Rack Room Shoes","brand:wikidata":"Q17109937","brand:wikipedia":"en:Rack Room Shoes",name:"Rack Room Shoes",shop:"shoes"}},"shop/shoes|Ralf Ringer":{countryCodes:["ru"],tags:{brand:"Ralf Ringer",name:"Ralf Ringer",shop:"shoes"}},"shop/shoes|Red Wing":{countryCodes:["de","gb","nl","us"],matchNames:["red wing shoes"],tags:{brand:"Red Wing","brand:wikidata":"Q934096","brand:wikipedia":"en:Red Wing Shoes",name:"Red Wing",shop:"shoes"}},"shop/shoes|Reno":{countryCodes:["at","ch","de","hu","sk"],tags:{brand:"Reno","brand:wikidata":"Q2144204","brand:wikipedia":"de:Reno (Schuhhandel)",name:"Reno",shop:"shoes"}},"shop/shoes|Respect":{countryCodes:["by","ru","ua"],tags:{brand:"Respect",name:"Respect",shop:"shoes"}},"shop/shoes|Rieker":{tags:{brand:"Rieker","brand:wikidata":"Q2152193","brand:wikipedia":"en:Rieker Shoes",name:"Rieker",shop:"shoes"}},"shop/shoes|Rockport":{tags:{brand:"Rockport","brand:wikidata":"Q4048384","brand:wikipedia":"en:Rockport (company)",name:"Rockport",shop:"shoes"}},"shop/shoes|Runners Point":{countryCodes:["de"],tags:{brand:"Runners Point","brand:wikidata":"Q2176418","brand:wikipedia":"de:Runners Point",name:"Runners Point",shop:"shoes"}},"shop/shoes|Salamander":{tags:{brand:"Salamander","brand:wikidata":"Q878354","brand:wikipedia":"de:Salamander (Schuhe)",name:"Salamander",shop:"shoes"}},"shop/shoes|Salvatore Ferragamo":{tags:{brand:"Salvatore Ferragamo","brand:wikidata":"Q3946053","brand:wikipedia":"en:Salvatore Ferragamo S.p.A.",name:"Salvatore Ferragamo",shop:"shoes"}},"shop/shoes|San Marina":{countryCodes:["fr"],tags:{brand:"San Marina","brand:wikidata":"Q3471558","brand:wikipedia":"fr:San Marina",name:"San Marina",shop:"shoes"}},"shop/shoes|Scapino":{countryCodes:["nl"],tags:{brand:"Scapino","brand:wikidata":"Q2298792","brand:wikipedia":"nl:Scapino (winkelketen)",name:"Scapino",shop:"shoes"}},"shop/shoes|Schuh":{countryCodes:["de","gb","gg","ie"],tags:{brand:"Schuh","brand:wikidata":"Q7432952","brand:wikipedia":"en:Schuh",name:"Schuh",shop:"shoes"}},"shop/shoes|Schuh-Mann":{countryCodes:["de"],tags:{brand:"Schuh-Mann","brand:wikidata":"Q66133314",name:"Schuh-Mann",shop:"shoes"}},"shop/shoes|Schuhkay":{countryCodes:["de"],tags:{brand:"Schuhkay","brand:wikidata":"Q66009415",name:"Schuhkay",shop:"shoes"}},"shop/shoes|Shoe Carnival":{countryCodes:["us"],tags:{brand:"Shoe Carnival","brand:wikidata":"Q7500007","brand:wikipedia":"en:Shoe Carnival",name:"Shoe Carnival",shop:"shoes"}},"shop/shoes|Shoe Show":{tags:{brand:"Shoe Show",name:"Shoe Show",shop:"shoes"}},"shop/shoes|Shoe Zone":{countryCodes:["gb","ie"],tags:{brand:"Shoe Zone","brand:wikidata":"Q7500016","brand:wikipedia":"en:Shoe Zone",name:"Shoe Zone",shop:"shoes"}},"shop/shoes|Siemes Schuhcenter":{countryCodes:["de"],tags:{brand:"Siemes Schuhcenter","brand:wikidata":"Q2800720","brand:wikipedia":"de:Siemes (Unternehmen)",name:"Siemes Schuhcenter",shop:"shoes"}},"shop/shoes|Skechers":{matchNames:["sketchers"],tags:{brand:"Skechers","brand:wikidata":"Q2945643","brand:wikipedia":"en:Skechers",name:"Skechers",shop:"shoes"}},"shop/shoes|Snipes":{countryCodes:["at","ch","de","es","fr","it","nl","us"],tags:{brand:"Snipes","brand:wikidata":"Q42306166","brand:wikipedia":"de:Snipes (Unternehmen)",name:"Snipes",shop:"shoes"}},"shop/shoes|Soft Moc":{countryCodes:["ca"],tags:{brand:"Soft Moc","brand:wikidata":"Q65012391",name:"Soft Moc",shop:"shoes"}},"shop/shoes|Sperry":{countryCodes:["us"],matchNames:["sperry top sider"],tags:{brand:"Sperry","brand:wikidata":"Q7576421","brand:wikipedia":"en:Sperry Top-Sider",name:"Sperry",shop:"shoes"}},"shop/shoes|Steve Madden":{countryCodes:["ca","us"],tags:{brand:"Steve Madden","brand:wikidata":"Q25352034","brand:wikipedia":"en:Steve Madden (company)",name:"Steve Madden",shop:"shoes"}},"shop/shoes|Stride Rite":{countryCodes:["us"],tags:{brand:"Stride Rite","brand:wikidata":"Q2356171","brand:wikipedia":"en:Stride Rite Corporation",name:"Stride Rite",shop:"shoes"}},"shop/shoes|Stuart Weitzman":{countryCodes:["ca","us"],tags:{brand:"Stuart Weitzman","brand:wikidata":"Q75244763",name:"Stuart Weitzman",shop:"shoes"}},"shop/shoes|Tamaris":{countryCodes:["at","be","de","fr","nl"],tags:{brand:"Tamaris","brand:wikidata":"Q61994827",name:"Tamaris",shop:"shoes"}},"shop/shoes|The Shoe Company":{countryCodes:["ca"],tags:{brand:"The Shoe Company","brand:wikidata":"Q7763892","brand:wikipedia":"en:The Shoe Company",name:"The Shoe Company",shop:"shoes"}},"shop/shoes|UGG":{countryCodes:["au","us"],tags:{brand:"UGG","brand:wikidata":"Q1138480","brand:wikipedia":"en:UGG (brand)",name:"UGG",shop:"shoes"}},"shop/shoes|Vans":{tags:{brand:"Vans","brand:wikidata":"Q1135366","brand:wikipedia":"en:Vans",name:"Vans",shop:"shoes"}},"shop/shoes|Walking on a Cloud":{countryCodes:["ca"],tags:{brand:"Walking on a Cloud","brand:wikidata":"Q65012662",name:"Walking on a Cloud",shop:"shoes"}},"shop/shoes|tReds":{countryCodes:["gb"],matchTags:["shop/clothes"],tags:{brand:"tReds","brand:wikidata":"Q81647338",name:"tReds",shop:"shoes"}},"shop/shoes|vanHaren":{countryCodes:["be","nl"],tags:{brand:"vanHaren","brand:wikidata":"Q62390668",name:"vanHaren",shop:"shoes"}},"shop/shoes|Éram":{countryCodes:["be","fr"],tags:{brand:"Éram","brand:wikidata":"Q16684192","brand:wikipedia":"fr:Éram",name:"Éram",shop:"shoes"}},"shop/shoes|ЦентрОбувь":{countryCodes:["by","ru","ua"],tags:{brand:"ЦентрОбувь","brand:wikidata":"Q4504072","brand:wikipedia":"ru:ЦентрОбувь",name:"ЦентрОбувь",shop:"shoes"}},"shop/shoes|Юничел":{countryCodes:["kz","ru"],tags:{brand:"Юничел","brand:wikidata":"Q62390569",name:"Юничел",shop:"shoes"}},"shop/shoes|つるや":{countryCodes:["jp"],tags:{brand:"つるや","brand:en":"Tsuruya","brand:ja":"つるや","brand:wikidata":"Q11272578","brand:wikipedia":"ja:つるや (靴屋)",name:"つるや","name:en":"Tsuruya","name:ja":"つるや",shop:"shoes"}},"shop/shoes|東京靴流通センター":{countryCodes:["jp"],tags:{brand:"東京靴流通センター","brand:en":"Tokyo Shoes Retailing Center","brand:ja":"東京靴流通センター","brand:wikidata":"Q11318515","brand:wikipedia":"ja:チヨダ",name:"東京靴流通センター","name:en":"Tokyo Shoes Retailing Center","name:ja":"東京靴流通センター",shop:"shoes"}},"shop/sports|Academy Sports + Outdoors":{countryCodes:["us"],matchNames:["academy","academy sports and outdoors"],matchTags:["shop/outdoor"],tags:{brand:"Academy Sports + Outdoors","brand:wikidata":"Q4671380","brand:wikipedia":"en:Academy Sports + Outdoors",name:"Academy Sports + Outdoors",shop:"sports"}},"shop/sports|Adidas":{tags:{brand:"Adidas","brand:wikidata":"Q3895","brand:wikipedia":"en:Adidas",name:"Adidas",shop:"sports"}},"shop/sports|Aktiesport":{countryCodes:["nl"],tags:{brand:"Aktiesport","brand:wikidata":"Q57546889",name:"Aktiesport",shop:"sports"}},"shop/sports|American Golf":{countryCodes:["gb","ie"],matchTags:["shop/golf"],tags:{brand:"American Golf","brand:wikidata":"Q62657494",name:"American Golf",shop:"sports",sport:"golf"}},"shop/sports|Big 5 Sporting Goods":{countryCodes:["us"],matchNames:["big 5"],tags:{brand:"Big 5 Sporting Goods","brand:wikidata":"Q4904902","brand:wikipedia":"en:Big 5 Sporting Goods",name:"Big 5 Sporting Goods",shop:"sports"}},"shop/sports|Centauro":{countryCodes:["br"],tags:{brand:"Centauro","brand:wikidata":"Q28679561","brand:wikipedia":"pt:Lojas Centauro",name:"Centauro",shop:"sports"}},"shop/sports|Champs Sports":{countryCodes:["ca","pr","us"],tags:{brand:"Champs Sports","brand:wikidata":"Q2955924","brand:wikipedia":"en:Champs Sports",name:"Champs Sports",shop:"sports"}},"shop/sports|Decathlon":{tags:{brand:"Decathlon","brand:wikidata":"Q509349","brand:wikipedia":"en:Decathlon Group",name:"Decathlon",shop:"sports"}},"shop/sports|Dick's Sporting Goods":{countryCodes:["us"],matchNames:["dicks"],tags:{brand:"Dick's Sporting Goods","brand:wikidata":"Q5272601","brand:wikipedia":"en:Dick's Sporting Goods",name:"Dick's Sporting Goods",shop:"sports"}},"shop/sports|Finish Line":{countryCodes:["us"],tags:{brand:"Finish Line","brand:wikidata":"Q5450341","brand:wikipedia":"en:Finish Line, Inc.",name:"Finish Line",shop:"sports"}},"shop/sports|Golf Galaxy":{countryCodes:["us"],matchTags:["shop/golf"],tags:{brand:"Golf Galaxy","brand:wikidata":"Q69364358",name:"Golf Galaxy",shop:"sports",sport:"golf"}},"shop/sports|Hervis":{countryCodes:["at","cz","de","hr","hu","ro","si"],matchNames:["hervis sport","hervis sports"],tags:{brand:"Hervis","brand:wikidata":"Q1614816","brand:wikipedia":"de:Hervis",name:"Hervis",shop:"sports"}},"shop/sports|Hibbett Sports":{countryCodes:["us"],tags:{brand:"Hibbett Sports","brand:wikidata":"Q5750671","brand:wikipedia":"en:Hibbett Sports",name:"Hibbett Sports",shop:"sports"}},"shop/sports|Intersport":{tags:{brand:"Intersport","brand:wikidata":"Q666888","brand:wikipedia":"en:Intersport",name:"Intersport",shop:"sports"}},"shop/sports|JD Sports":{countryCodes:["de","es","fr","gb","ie","nl"],matchNames:["jd"],tags:{brand:"JD Sports","brand:wikidata":"Q6108019","brand:wikipedia":"en:JD Sports",name:"JD Sports",shop:"sports"}},"shop/sports|Marathon Sports":{countryCodes:["bo","ec","pe"],tags:{brand:"Marathon Sports","brand:wikidata":"Q3027516","brand:wikipedia":"es:Marathon Sports",name:"Marathon Sports",shop:"sports"}},"shop/sports|Martes Sport":{countryCodes:["pl"],tags:{brand:"Martes Sport","brand:wikidata":"Q62073490",name:"Martes Sport",shop:"sports"}},"shop/sports|Modell's Sporting Goods":{countryCodes:["us"],matchNames:["modells"],tags:{brand:"Modell's Sporting Goods","brand:wikidata":"Q3317844","brand:wikipedia":"en:Modell's Sporting Goods",name:"Modell's Sporting Goods",shop:"sports"}},"shop/sports|Peloton":{countryCodes:["ca","gb","us"],tags:{brand:"Peloton","brand:wikidata":"Q56276186","brand:wikipedia":"en:Peloton (company)",name:"Peloton",shop:"sports"}},"shop/sports|Planeta Sport":{countryCodes:["rs"],matchNames:["planeta"],tags:{brand:"Planeta Sport","brand:en":"Planeta Sport","brand:rs":"Planeta Sport","brand:wikidata":"Q72193528",name:"Planeta Sport",shop:"sports"}},"shop/sports|Play It Again Sports":{countryCodes:["ca","us"],tags:{brand:"Play It Again Sports","brand:wikidata":"Q7203029","brand:wikipedia":"en:Play It Again Sports",name:"Play It Again Sports",shop:"sports"}},"shop/sports|Rebel":{countryCodes:["au","nz"],tags:{brand:"Rebel","brand:wikidata":"Q18636397","brand:wikipedia":"en:Rebel (company)",name:"Rebel",shop:"sports"}},"shop/sports|Sport 2000":{countryCodes:["at","de","fr","nl"],tags:{brand:"Sport 2000","brand:wikidata":"Q262394","brand:wikipedia":"de:Sport 2000",name:"Sport 2000",shop:"sports"}},"shop/sports|Sport Chek":{countryCodes:["ca"],tags:{brand:"Sport Chek","brand:wikidata":"Q3494037","brand:wikipedia":"en:Sport Chek",name:"Sport Chek",shop:"sports"}},"shop/sports|Sport Zone":{countryCodes:["pt"],tags:{brand:"Sport Zone","brand:wikidata":"Q18485899","brand:wikipedia":"pt:Sport Zone",name:"Sport Zone",shop:"sports"}},"shop/sports|Sporting Life":{countryCodes:["ca"],tags:{brand:"Sporting Life","brand:wikidata":"Q7579583","brand:wikipedia":"en:Sporting Life (retailer)",name:"Sporting Life",shop:"sports"}},"shop/sports|Sportisimo":{countryCodes:["cz","sk"],tags:{brand:"Sportisimo","brand:wikidata":"Q54974273",name:"Sportisimo",shop:"sports"}},"shop/sports|Sports Authority":{tags:{brand:"Sports Authority","brand:wikidata":"Q7579688","brand:wikipedia":"en:Sports Authority",name:"Sports Authority",shop:"sports"}},"shop/sports|Sports Direct":{matchNames:["sportsdirect.com"],tags:{brand:"Sports Direct","brand:wikidata":"Q7579661","brand:wikipedia":"en:SportsDirect.com",name:"Sports Direct",shop:"sports"}},"shop/sports|Sprinter":{countryCodes:["es"],tags:{brand:"Sprinter","brand:wikidata":"Q6133465","brand:wikipedia":"es:Sprinter (tienda)",name:"Sprinter",shop:"sports"}},"shop/sports|Stadium":{countryCodes:["de","dk","fi","se"],tags:{brand:"Stadium","brand:wikidata":"Q4993863","brand:wikipedia":"sv:Stadium (detaljhandelskedja)",name:"Stadium",shop:"sports"}},"shop/sports|XXL":{countryCodes:["fi","no","se"],tags:{brand:"XXL","brand:wikidata":"Q12010840","brand:wikipedia":"no:XXL",name:"XXL",shop:"sports"}},"shop/sports|Декатлон":{countryCodes:["bg","ru","ua"],tags:{brand:"Декатлон","brand:en":"Decathlon","brand:ru":"Декатлон","brand:wikidata":"Q509349","brand:wikipedia":"ru:Decathlon",name:"Декатлон","name:en":"Decathlon","name:ru":"Декатлон",shop:"sports"}},"shop/sports|Спортмастер":{countryCodes:["by","kz","ru","ua"],matchNames:["спортмастер гипер"],tags:{brand:"Спортмастер","brand:en":"Sportmaster","brand:ru":"Спортмастер","brand:wikidata":"Q4438176","brand:wikipedia":"ru:Спортмастер",name:"Спортмастер","name:en":"Sportmaster","name:ru":"Спортмастер",shop:"sports"}},"shop/stationery|Buffetti":{countryCodes:["it"],tags:{brand:"Buffetti",name:"Buffetti",shop:"stationery"}},"shop/stationery|Bureau Vallée":{countryCodes:["fr"],tags:{brand:"Bureau Vallée","brand:wikidata":"Q18385014","brand:wikipedia":"fr:Bureau Vallée",name:"Bureau Vallée",shop:"stationery"}},"shop/stationery|McPaper":{countryCodes:["ch","de"],tags:{brand:"McPaper","brand:wikidata":"Q1915329","brand:wikipedia":"de:McPaper",name:"McPaper",shop:"stationery"}},"shop/stationery|Office Depot":{matchTags:["shop/office_supplies"],tags:{brand:"Office Depot","brand:wikidata":"Q1337797","brand:wikipedia":"en:Office Depot",name:"Office Depot",shop:"stationery"}},"shop/stationery|OfficeMax":{countryCodes:["mx","nz","us"],tags:{brand:"OfficeMax","brand:wikidata":"Q7079111","brand:wikipedia":"en:OfficeMax",name:"OfficeMax",shop:"stationery"}},"shop/stationery|Officeworks":{countryCodes:["au"],tags:{brand:"Officeworks","brand:wikidata":"Q7079486","brand:wikipedia":"en:Officeworks",name:"Officeworks",shop:"stationery"}},"shop/stationery|Pagro":{countryCodes:["at"],tags:{brand:"Pagro","brand:wikidata":"Q57550022",name:"Pagro",shop:"stationery"}},"shop/stationery|Paper Source":{countryCodes:["us"],tags:{brand:"Paper Source","brand:wikidata":"Q25000269","brand:wikipedia":"en:Paper Source",name:"Paper Source",shop:"stationery"}},"shop/stationery|Paperchase":{countryCodes:["gb"],tags:{brand:"Paperchase","brand:wikidata":"Q7132739","brand:wikipedia":"en:Paperchase",name:"Paperchase",shop:"stationery"}},"shop/stationery|Ryman":{countryCodes:["gb"],tags:{brand:"Ryman","brand:wikidata":"Q7385188","brand:wikipedia":"en:Ryman",name:"Ryman",shop:"stationery"}},"shop/stationery|Smiggle":{countryCodes:["at","gb","hk","ie","my","nz","sg"],tags:{brand:"Smiggle","brand:wikidata":"Q7544536",name:"Smiggle",shop:"stationery"}},"shop/stationery|Staples":{matchTags:["shop/office_supplies"],tags:{brand:"Staples","brand:wikidata":"Q785943","brand:wikipedia":"en:Staples Inc.",name:"Staples",shop:"stationery"}},"shop/stationery|Комус":{countryCodes:["ru"],tags:{brand:"Комус","brand:en":"Komus","brand:wikidata":"Q4230314","brand:wikipedia":"en:Komus (company)",name:"Комус","name:en":"Komus",shop:"stationery"}},"shop/storage_rental|Extra Space Storage":{countryCodes:["us"],matchNames:["extra space"],tags:{brand:"Extra Space Storage","brand:wikidata":"Q5422162","brand:wikipedia":"en:Extra Space Storage",name:"Extra Space Storage",shop:"storage_rental"}},"shop/storage_rental|Public Storage":{countryCodes:["ca","us"],matchTags:["shop/storage_units"],tags:{brand:"Public Storage","brand:wikidata":"Q1156045","brand:wikipedia":"en:Public Storage",name:"Public Storage",shop:"storage_rental"}},"shop/storage_rental|U-Haul":{countryCodes:["ca","us"],matchNames:["uhaul neighborhood dealer"],nomatch:["shop/rental|U-Haul"],tags:{brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul",shop:"storage_rental"}},"shop/supermarket|8 à Huit":{nomatch:["amenity/fuel|8 à Huit","shop/convenience|8 à Huit"],tags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit",shop:"supermarket"}},"shop/supermarket|99 Ranch Market":{countryCodes:["us"],matchNames:["99 ranch","ranch 99"],tags:{brand:"99 Ranch Market","brand:wikidata":"Q4646307","brand:wikipedia":"en:99 Ranch Market",cuisine:"asian",name:"99 Ranch Market","name:en":"99 Ranch Market","name:zh-Hans":"大华超级市场","name:zh-Hant":"大華超級市場",shop:"supermarket"}},"shop/supermarket|A&O":{countryCodes:["it"],tags:{brand:"A&O","brand:wikidata":"Q3600279","brand:wikipedia":"it:A&O",name:"A&O",shop:"supermarket"}},"shop/supermarket|A101":{countryCodes:["tr"],tags:{brand:"A101","brand:wikidata":"Q6034496","brand:wikipedia":"tr:A101",name:"A101",shop:"supermarket"}},"shop/supermarket|AD Delhaize":{countryCodes:["be","lu"],tags:{brand:"AD Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"AD Delhaize",shop:"supermarket"}},"shop/supermarket|ADEG":{countryCodes:["at"],tags:{brand:"ADEG","brand:wikidata":"Q290211","brand:wikipedia":"de:ADEG Österreich",name:"ADEG",shop:"supermarket"}},"shop/supermarket|Acme":{countryCodes:["us"],tags:{brand:"Acme","brand:wikidata":"Q341975","brand:wikipedia":"en:Acme Markets",name:"Acme",shop:"supermarket"}},"shop/supermarket|Ahorramás":{countryCodes:["es"],tags:{brand:"Ahorramás","brand:wikidata":"Q58221883",name:"Ahorramás",shop:"supermarket"}},"shop/supermarket|Albert":{countryCodes:["cz"],tags:{brand:"Albert","brand:wikidata":"Q9144241","brand:wikipedia":"cs:Albert (obchodní řetězec)",name:"Albert",shop:"supermarket"}},"shop/supermarket|Albert Heijn":{countryCodes:["be","nl"],tags:{brand:"Albert Heijn","brand:wikidata":"Q1653985","brand:wikipedia":"nl:Albert Heijn (supermarkt)",name:"Albert Heijn",shop:"supermarket"}},"shop/supermarket|Albert Heijn XL":{countryCodes:["nl"],tags:{brand:"Albert Heijn XL","brand:wikidata":"Q78163765","brand:wikipedia":"nl:Albert Heijn (supermarkt)",name:"Albert Heijn XL",shop:"supermarket"}},"shop/supermarket|Albertsons":{countryCodes:["us"],matchNames:["albertsons supermarket"],tags:{brand:"Albertsons","brand:wikidata":"Q4712282","brand:wikipedia":"en:Albertsons",name:"Albertsons",shop:"supermarket"}},"shop/supermarket|Alcampo":{countryCodes:["es"],tags:{brand:"Alcampo","brand:wikidata":"Q2832081","brand:wikipedia":"es:Alcampo",name:"Alcampo",shop:"supermarket"}},"shop/supermarket|Aldi":{tags:{brand:"Aldi","brand:wikidata":"Q125054","brand:wikipedia":"en:Aldi",name:"Aldi",shop:"supermarket"}},"shop/supermarket|Aldi Nord":{countryCodes:["de"],tags:{brand:"Aldi Nord","brand:wikidata":"Q41171373","brand:wikipedia":"en:Aldi",name:"Aldi Nord",shop:"supermarket"}},"shop/supermarket|Aldi Süd":{countryCodes:["de"],tags:{brand:"Aldi Süd","brand:wikidata":"Q41171672","brand:wikipedia":"en:Aldi",name:"Aldi Süd",shop:"supermarket"}},"shop/supermarket|Alfamart":{countryCodes:["id","ph"],matchTags:["shop/convenience"],tags:{brand:"Alfamart","brand:wikidata":"Q23745600","brand:wikipedia":"en:Alfamart",name:"Alfamart",shop:"supermarket"}},"shop/supermarket|Alimerka":{countryCodes:["es"],tags:{brand:"Alimerka","brand:wikidata":"Q16482738","brand:wikipedia":"es:Alimerka",name:"Alimerka",shop:"supermarket"}},"shop/supermarket|Alnatura":{countryCodes:["ch","de"],tags:{brand:"Alnatura","brand:wikidata":"Q876811","brand:wikipedia":"en:Alnatura",name:"Alnatura",organic:"only",shop:"supermarket"}},"shop/supermarket|Amigo":{countryCodes:["us"],matchNames:["amigo puerto rico","amigo supermarket","supermercado amigo"],tags:{alt_name:"Supermercados Amigo",brand:"Amigo","brand:wikidata":"Q4746234","brand:wikipedia":"en:Amigo Supermarkets",name:"Amigo",shop:"supermarket"}},"shop/supermarket|Ara":{countryCodes:["co"],tags:{brand:"Ara",name:"Ara",shop:"supermarket"}},"shop/supermarket|Asda":{countryCodes:["gb"],nomatch:["amenity/fuel|Asda"],tags:{brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda",shop:"supermarket"}},"shop/supermarket|Assaí Atacadista":{tags:{brand:"Assaí Atacadista",name:"Assaí Atacadista",shop:"supermarket"}},"shop/supermarket|Atacadão":{countryCodes:["br"],tags:{brand:"Atacadão","brand:wikidata":"Q2868739","brand:wikipedia":"en:Atacadão",name:"Atacadão",shop:"supermarket"}},"shop/supermarket|Auchan":{nomatch:["amenity/fuel|Auchan"],tags:{brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan",shop:"supermarket"}},"shop/supermarket|Auchan Drive":{countryCodes:["fr","lu"],tags:{brand:"Auchan Drive",name:"Auchan Drive",shop:"supermarket"}},"shop/supermarket|BI-LO":{countryCodes:["us"],tags:{brand:"BI-LO","brand:wikidata":"Q4835620","brand:wikipedia":"en:BI-LO (United States)",name:"BI-LO",shop:"supermarket"}},"shop/supermarket|BM":{countryCodes:["es"],tags:{brand:"BM","brand:wikidata":"Q62073462",name:"BM",shop:"supermarket"}},"shop/supermarket|Bashas'":{countryCodes:["us"],tags:{brand:"Bashas'","brand:wikidata":"Q4866786","brand:wikipedia":"en:Bashas'",name:"Bashas'",shop:"supermarket"}},"shop/supermarket|Biedronka":{countryCodes:["pl"],tags:{brand:"Biedronka","brand:wikidata":"Q857182","brand:wikipedia":"pl:Biedronka (sieć handlowa)",name:"Biedronka",shop:"supermarket"}},"shop/supermarket|Big Bazaar":{countryCodes:["in"],tags:{brand:"Big Bazaar","brand:wikidata":"Q3631008","brand:wikipedia":"en:Big Bazaar",name:"Big Bazaar",shop:"supermarket"}},"shop/supermarket|Big C":{countryCodes:["th","vn"],tags:{brand:"Big C","brand:wikidata":"Q858665","brand:wikipedia":"en:Big C",name:"Big C",shop:"supermarket"}},"shop/supermarket|Big Market":{tags:{brand:"Big Market",name:"Big Market",shop:"supermarket"}},"shop/supermarket|Big-A":{countryCodes:["jp"],tags:{brand:"Big-A","brand:en":"Big-A","brand:jp":"ビッグ・エー","brand:wikidata":"Q11330804","brand:wikipedia":"jp:ビッグ・エー",name:"Big-A","name:en":"Big-A","name:ja":"ビッグ・エー",shop:"supermarket"}},"shop/supermarket|Billa":{tags:{brand:"Billa","brand:wikidata":"Q537781","brand:wikipedia":"en:Billa (supermarket)",name:"Billa",shop:"supermarket"}},"shop/supermarket|Bim":{countryCodes:["ma","tr"],tags:{brand:"Bim","brand:wikidata":"Q1022075","brand:wikipedia":"en:Bim (company)",name:"Bim",shop:"supermarket"}},"shop/supermarket|Bingo":{countryCodes:["ba"],tags:{brand:"Bingo","brand:wikidata":"Q16842066","brand:wikipedia":"bs:Bingo (kompanija)",name:"Bingo",shop:"supermarket"}},"shop/supermarket|Bio C' Bon":{countryCodes:["es","fr","jp"],tags:{brand:"Bio C' Bon","brand:wikidata":"Q54312551","brand:wikipedia":"fr:Bio c'bon",name:"Bio C' Bon",shop:"supermarket"}},"shop/supermarket|Bio Company":{countryCodes:["de"],tags:{brand:"Bio Company","brand:wikidata":"Q864179","brand:wikipedia":"de:Bio Company",name:"Bio Company",organic:"only",shop:"supermarket"}},"shop/supermarket|Biocoop":{countryCodes:["fr"],tags:{brand:"Biocoop","brand:wikidata":"Q2904039","brand:wikipedia":"fr:Biocoop",name:"Biocoop",shop:"supermarket"}},"shop/supermarket|Bodega Aurrera":{tags:{brand:"Bodega Aurrera","brand:wikidata":"Q3365858","brand:wikipedia":"en:Bodega Aurrerá",name:"Bodega Aurrera",shop:"supermarket"}},"shop/supermarket|Bodega Aurrera Express":{countryCodes:["mx"],tags:{brand:"Bodega Aurrera Express",name:"Bodega Aurrera Express",shop:"supermarket"}},"shop/supermarket|Bonpreu":{countryCodes:["es"],tags:{brand:"Bonpreu",name:"Bonpreu",shop:"supermarket"}},"shop/supermarket|Bravo":{countryCodes:["us"],tags:{brand:"Bravo","brand:wikidata":"Q16985159","brand:wikipedia":"en:Bravo (supermarket)",name:"Bravo",shop:"supermarket"}},"shop/supermarket|Brookshire Brothers":{countryCodes:["us"],tags:{brand:"Brookshire Brothers","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",name:"Brookshire Brothers",shop:"supermarket"}},"shop/supermarket|Brookshire's":{countryCodes:["us"],tags:{brand:"Brookshire's","brand:wikidata":"Q4975085","brand:wikipedia":"en:Brookshire Grocery Company",name:"Brookshire's",shop:"supermarket"}},"shop/supermarket|Budgens":{countryCodes:["gb"],nomatch:["shop/convenience|Budgens"],tags:{brand:"Budgens","brand:wikidata":"Q4985016","brand:wikipedia":"en:Budgens",name:"Budgens",shop:"supermarket"}},"shop/supermarket|Bulk Barn":{countryCodes:["ca"],tags:{brand:"Bulk Barn","brand:wikidata":"Q4996466",name:"Bulk Barn",shop:"supermarket"}},"shop/supermarket|Bunnpris":{countryCodes:["no"],tags:{brand:"Bunnpris","brand:wikidata":"Q1774634","brand:wikipedia":"en:Bunnpris",name:"Bunnpris",shop:"supermarket"}},"shop/supermarket|Bónus":{countryCodes:["fo","is"],tags:{brand:"Bónus","brand:wikidata":"Q3480158","brand:wikipedia":"en:Bónus",name:"Bónus",shop:"supermarket"}},"shop/supermarket|C-Town Supermarkets":{countryCodes:["us"],tags:{brand:"C-Town Supermarkets","brand:wikidata":"Q5005929","brand:wikipedia":"en:C-Town Supermarkets",name:"C-Town",shop:"supermarket"}},"shop/supermarket|CAP-Markt":{countryCodes:["de"],matchNames:["cap"],tags:{brand:"CAP","brand:wikidata":"Q1022827","brand:wikipedia":"de:CAP (Markt)",name:"CAP-Markt",shop:"supermarket"}},"shop/supermarket|CBA":{nomatch:["shop/convenience|CBA"],tags:{brand:"CBA","brand:wikidata":"Q779845","brand:wikipedia":"en:CBA (food retail)",name:"CBA",shop:"supermarket"}},"shop/supermarket|COOP Jednota":{countryCodes:["cz","sk"],matchNames:["jednota"],nomatch:["shop/convenience|COOP Jednota"],tags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"supermarket"}},"shop/supermarket|Cactus":{countryCodes:["lu"],tags:{brand:"Cactus","brand:wikidata":"Q466918","brand:wikipedia":"lb:Cactus",name:"Cactus",shop:"supermarket"}},"shop/supermarket|Caprabo":{countryCodes:["ad","es"],tags:{brand:"Caprabo","brand:wikidata":"Q1980781","brand:wikipedia":"en:Caprabo",name:"Caprabo",shop:"supermarket"}},"shop/supermarket|Cardenas":{countryCodes:["us"],matchNames:["mi pueblo","mi pueblo food center"],tags:{brand:"Cardenas","brand:wikidata":"Q64149543","brand:wikipedia":"en:Cardenas (supermarket)",cuisine:"latin_american",name:"Cardenas",shop:"supermarket"}},"shop/supermarket|Cargills Food City~(Sri Lanka)":{countryCodes:["lk"],nomatch:["shop/supermarket|Food City~(USA)"],tags:{brand:"Cargills Food City","brand:wikidata":"Q58353955",name:"Cargills Food City",shop:"supermarket"}},"shop/supermarket|Carrefour":{nomatch:["amenity/fuel|Carrefour","shop/convenience|Carrefour Express"],tags:{brand:"Carrefour","brand:wikidata":"Q217599","brand:wikipedia":"fr:Carrefour (enseigne)",name:"Carrefour",shop:"supermarket"}},"shop/supermarket|Carrefour City":{countryCodes:["be","fr"],matchTags:["shop/convenience"],tags:{brand:"Carrefour City","brand:wikidata":"Q2940187","brand:wikipedia":"fr:Carrefour City",name:"Carrefour City",shop:"supermarket"}},"shop/supermarket|Carrefour Contact":{countryCodes:["fr"],tags:{brand:"Carrefour Contact","brand:wikidata":"Q2940188","brand:wikipedia":"fr:Carrefour Contact",name:"Carrefour Contact",shop:"supermarket"}},"shop/supermarket|Carrefour Market":{tags:{brand:"Carrefour Market","brand:wikidata":"Q2689639","brand:wikipedia":"fr:Carrefour Market",name:"Carrefour Market",shop:"supermarket"}},"shop/supermarket|Carulla":{countryCodes:["co"],tags:{brand:"Carulla","brand:wikidata":"Q5047480","brand:wikipedia":"en:Carulla",name:"Carulla",shop:"supermarket"}},"shop/supermarket|Casino":{tags:{brand:"Casino",name:"Casino",shop:"supermarket"}},"shop/supermarket|Centra":{tags:{brand:"Centra",name:"Centra",shop:"supermarket"}},"shop/supermarket|Centre Commercial E. Leclerc":{countryCodes:["fr","pl"],tags:{brand:"Centre Commercial E. Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"Centre Commercial E. Leclerc",shop:"supermarket"}},"shop/supermarket|Chata Polska":{countryCodes:["pl"],nomatch:["shop/convenience|Chata Polska"],tags:{brand:"Chata Polska","brand:wikidata":"Q61994406",name:"Chata Polska",shop:"supermarket"}},"shop/supermarket|Checkers":{countryCodes:["bw","na","za"],nomatch:["amenity/fast_food|Checkers"],tags:{brand:"Checkers","brand:wikidata":"Q5089126","brand:wikipedia":"en:Checkers (supermarket chain)",name:"Checkers",shop:"supermarket"}},"shop/supermarket|Chedraui":{countryCodes:["mx"],tags:{brand:"Chedraui","brand:wikidata":"Q2961952","brand:wikipedia":"en:Chedraui",name:"Chedraui",shop:"supermarket"}},"shop/supermarket|City Market":{tags:{brand:"City Market","brand:wikidata":"Q5123299","brand:wikipedia":"en:City Market (US grocery store chain)",name:"City Market",shop:"supermarket"}},"shop/supermarket|Co-op~(Canada)":{countryCodes:["ca"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Coop~(Schweiz)","shop/supermarket|The Co-operative Food~(UK)"],tags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"supermarket"}},"shop/supermarket|Coles":{countryCodes:["au","gb"],nomatch:["amenity/fuel|Coles Express","shop/books|Coles","shop/convenience|Coles Express"],tags:{brand:"Coles","brand:wikidata":"Q1108172","brand:wikipedia":"en:Coles Supermarkets",name:"Coles",shop:"supermarket"}},"shop/supermarket|Colruyt":{countryCodes:["be","fr","lu"],tags:{brand:"Colruyt","brand:wikidata":"Q2363991","brand:wikipedia":"en:Colruyt (supermarket)",name:"Colruyt",shop:"supermarket"}},"shop/supermarket|Combi":{countryCodes:["de"],tags:{brand:"Combi","brand:wikidata":"Q1113618","brand:wikipedia":"de:Combi (Einkaufsmarkt)",name:"Combi",shop:"supermarket"}},"shop/supermarket|Comercial Mexicana":{countryCodes:["mx"],tags:{brand:"Comercial Mexicana","brand:wikidata":"Q2985173","brand:wikipedia":"es:Comercial Mexicana",name:"Comercial Mexicana",shop:"supermarket"}},"shop/supermarket|Conad":{countryCodes:["al","it"],tags:{brand:"Conad","brand:wikidata":"Q639075","brand:wikipedia":"it:Conad",name:"Conad",shop:"supermarket"}},"shop/supermarket|Conad City":{countryCodes:["it"],tags:{brand:"Conad City","brand:wikidata":"Q57543102",name:"Conad City",shop:"supermarket"}},"shop/supermarket|Condis":{countryCodes:["es"],tags:{brand:"Condis","brand:wikidata":"Q57417581",name:"Condis",shop:"supermarket"}},"shop/supermarket|Consum":{countryCodes:["es"],tags:{brand:"Consum","brand:wikidata":"Q8350308","brand:wikipedia":"es:Consum",name:"Consum",shop:"supermarket"}},"shop/supermarket|Continente":{countryCodes:["pt"],tags:{brand:"Continente","brand:wikidata":"Q2995683","brand:wikipedia":"en:Continente (Supermarket)",name:"Continente",shop:"supermarket"}},"shop/supermarket|Coop Konsum":{countryCodes:["se"],tags:{brand:"Coop Konsum",name:"Coop Konsum",shop:"supermarket"}},"shop/supermarket|Coop Prix":{countryCodes:["no"],tags:{brand:"Coop Prix","brand:wikidata":"Q5167705","brand:wikipedia":"no:Coop Prix",name:"Coop Prix",shop:"supermarket"}},"shop/supermarket|Coop~(Schweiz)":{countryCodes:["ch"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Co-op~(Canada)","shop/supermarket|The Co-operative Food~(UK)"],tags:{brand:"Coop","brand:wikidata":"Q432564","brand:wikipedia":"de:Coop (Schweiz)",name:"Coop",shop:"supermarket"}},"shop/supermarket|Cora":{countryCodes:["be","fr","lu","ro"],nomatch:["amenity/restaurant|Cora~(Quebec)","amenity/restaurant|Cora~(non-Quebec)"],tags:{brand:"Cora","brand:wikidata":"Q686643","brand:wikipedia":"en:Cora (hypermarket)",name:"Cora",shop:"supermarket"}},"shop/supermarket|Costcutter":{nomatch:["shop/convenience|Costcutter"],tags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"supermarket"}},"shop/supermarket|Coto":{countryCodes:["ar"],tags:{brand:"Coto","brand:wikidata":"Q5175411","brand:wikipedia":"es:Coto (supermercado)",name:"Coto",shop:"supermarket"}},"shop/supermarket|Countdown":{countryCodes:["nz"],tags:{brand:"Countdown","brand:wikidata":"Q5176845","brand:wikipedia":"en:Countdown (supermarket)",name:"Countdown",shop:"supermarket"}},"shop/supermarket|Covirán":{countryCodes:["es","pt"],tags:{brand:"Covirán","brand:wikidata":"Q61070539","brand:wikipedia":"eu:Covirán",name:"Covirán","name:pt":"Coviran",shop:"supermarket"}},"shop/supermarket|Crai":{countryCodes:["ch","it"],tags:{brand:"Crai",name:"Crai",shop:"supermarket"}},"shop/supermarket|Cub Foods":{countryCodes:["us"],tags:{brand:"Cub Foods","brand:wikidata":"Q5191916","brand:wikipedia":"en:Cub Foods",name:"Cub Foods",shop:"supermarket"}},"shop/supermarket|D'Agostino":{countryCodes:["us"],tags:{brand:"D'Agostino","brand:wikidata":"Q20656844","brand:wikipedia":"en:D'Agostino Supermarkets",name:"D'Agostino",shop:"supermarket"}},"shop/supermarket|D1":{countryCodes:["co"],tags:{brand:"D1","brand:wikidata":"Q43403418","brand:wikipedia":"es:Tiendas D1",name:"D1",shop:"supermarket"}},"shop/supermarket|Dagli'Brugsen":{countryCodes:["dk"],tags:{brand:"Dagli'Brugsen","brand:wikidata":"Q12307017","brand:wikipedia":"en:Dagli'Brugsen",name:"Dagli'Brugsen",shop:"supermarket"}},"shop/supermarket|Decò":{countryCodes:["it"],tags:{brand:"Decò","brand:wikidata":"Q65127915","brand:wikipedia":"it:Decò",name:"Decò",shop:"supermarket"}},"shop/supermarket|Deen":{countryCodes:["nl"],tags:{brand:"Deen","brand:wikidata":"Q13571727","brand:wikipedia":"nl:Deen (supermarkt)",name:"Deen",shop:"supermarket"}},"shop/supermarket|Delhaize":{countryCodes:["be","lu"],tags:{brand:"Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"Delhaize",shop:"supermarket"}},"shop/supermarket|Delikatesy Centrum":{countryCodes:["pl"],nomatch:["shop/convenience|Delikatesy Centrum"],tags:{brand:"Delikatesy Centrum","brand:wikidata":"Q11693824","brand:wikipedia":"pl:Delikatesy Centrum",name:"Delikatesy Centrum",shop:"supermarket"}},"shop/supermarket|Denner":{countryCodes:["ch","li"],tags:{brand:"Denner","brand:wikidata":"Q379911","brand:wikipedia":"en:Denner (supermarket)",name:"Denner",shop:"supermarket"}},"shop/supermarket|Despar":{countryCodes:["it"],tags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Despar",shop:"supermarket"}},"shop/supermarket|Despensa Familiar":{countryCodes:["gt","hn","sv"],tags:{brand:"Despensa Familiar","brand:wikidata":"Q61994849",name:"Despensa Familiar",shop:"supermarket"}},"shop/supermarket|Dia":{matchNames:["supermercado dia"],tags:{brand:"Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Dia",shop:"supermarket"}},"shop/supermarket|Dia Market":{tags:{brand:"Dia Market","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Dia Market",shop:"supermarket"}},"shop/supermarket|Dierbergs":{countryCodes:["us"],tags:{brand:"Dierbergs","brand:wikidata":"Q5274978","brand:wikipedia":"en:Dierbergs Markets",name:"Dierbergs",shop:"supermarket"}},"shop/supermarket|Dino":{countryCodes:["pl"],tags:{brand:"Dino","brand:wikidata":"Q11694239","brand:wikipedia":"pl:Dino Polska",name:"Dino",shop:"supermarket"}},"shop/supermarket|Dirk van den Broek":{countryCodes:["nl"],tags:{brand:"Dirk van den Broek","brand:wikidata":"Q17502722","brand:wikipedia":"en:Dirk (supermarket)",name:"Dirk van den Broek",shop:"supermarket"}},"shop/supermarket|Disco~(Argentina)":{countryCodes:["ar"],tags:{brand:"Disco","brand:wikidata":"Q6135978","brand:wikipedia":"es:Disco (supermercado de Argentina)",name:"Disco",shop:"supermarket"}},"shop/supermarket|Disco~(Uruguay)":{countryCodes:["uy"],tags:{brand:"Disco","brand:wikidata":"Q16636819","brand:wikipedia":"es:Disco (supermercado de Uruguay)",name:"Disco",shop:"supermarket"}},"shop/supermarket|Diska":{countryCodes:["de"],tags:{brand:"Diska","brand:wikidata":"Q62390177",name:"Diska",shop:"supermarket"}},"shop/supermarket|Dollar General Market":{countryCodes:["us"],matchTags:["shop/convenience","shop/variet_store"],nomatch:["amenity/bank|Dollar Bank","amenity/car_rental|Dollar","shop/variety_store|Dollar General","shop/variety_store|Dollar Tree","shop/variety_store|Dollarama","shop/variety_store|Family Dollar"],tags:{brand:"Dollar General Market","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General Market",shop:"supermarket"}},"shop/supermarket|Dunnes Stores":{countryCodes:["gb","ie"],tags:{brand:"Dunnes Stores","brand:wikidata":"Q1266203","brand:wikipedia":"en:Dunnes Stores",name:"Dunnes Stores",shop:"supermarket"}},"shop/supermarket|E-Center":{countryCodes:["de"],tags:{brand:"E-Center","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"E-Center",shop:"supermarket"}},"shop/supermarket|E. Leclerc":{countryCodes:["es","fr","pl","pt"],tags:{brand:"E. Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"en:E.Leclerc",name:"E. Leclerc",shop:"supermarket"}},"shop/supermarket|E. Leclerc Drive":{countryCodes:["fr"],tags:{brand:"E. Leclerc Drive","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"E. Leclerc Drive",shop:"supermarket"}},"shop/supermarket|EMTÉ":{countryCodes:["nl"],tags:{brand:"EMTÉ","brand:wikidata":"Q3119122","brand:wikipedia":"en:EMTÉ",name:"EMTÉ",shop:"supermarket"}},"shop/supermarket|Edeka":{countryCodes:["de"],matchNames:["edeka neukauf"],tags:{brand:"Edeka","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Edeka",shop:"supermarket"}},"shop/supermarket|Edeka xpress":{countryCodes:["de"],tags:{brand:"Edeka","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Edeka xpress",shop:"supermarket"}},"shop/supermarket|Eko":{countryCodes:["pl"],nomatch:["amenity/fuel|EKO~(Canada)","amenity/fuel|EKO~(Greece)"],tags:{brand:"Eko","brand:wikidata":"Q9251859","brand:wikipedia":"pl:Eko Holding",name:"Eko",shop:"supermarket"}},"shop/supermarket|Ekom":{countryCodes:["it"],tags:{brand:"Ekom","brand:wikidata":"Q62073442",name:"Ekom",shop:"supermarket"}},"shop/supermarket|Ekono":{countryCodes:["cl"],tags:{brand:"Ekono","brand:wikidata":"Q2842729","brand:wikipedia":"es:Ekono",name:"Ekono",shop:"supermarket"}},"shop/supermarket|Eroski":{countryCodes:["es","gi"],matchNames:["charter","eroski center"],tags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski",shop:"supermarket"}},"shop/supermarket|Eroski City":{countryCodes:["es"],tags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski City",shop:"supermarket"}},"shop/supermarket|Esselunga":{countryCodes:["it"],tags:{brand:"Esselunga","brand:wikidata":"Q1059636","brand:wikipedia":"en:Esselunga",name:"Esselunga",shop:"supermarket"}},"shop/supermarket|EuroSpin":{countryCodes:["it","si"],tags:{brand:"EuroSpin","brand:wikidata":"Q1374674","brand:wikipedia":"it:Eurospin",name:"EuroSpin",shop:"supermarket"}},"shop/supermarket|Eurospar":{tags:{brand:"Eurospar","brand:wikidata":"Q12309283","brand:wikipedia":"da:Eurospar",name:"Eurospar",shop:"supermarket"}},"shop/supermarket|Extra":{matchNames:["coop extra"],matchTags:["shop/convenience"],tags:{brand:"Extra","brand:wikidata":"Q11964085","brand:wikipedia":"no:Extra (Coop)",name:"Extra",shop:"supermarket"}},"shop/supermarket|Famila":{countryCodes:["de","it"],tags:{brand:"Famila","brand:wikidata":"Q1395108","brand:wikipedia":"de:Famila",name:"Famila",shop:"supermarket"}},"shop/supermarket|Family Fare":{countryCodes:["us"],tags:{brand:"Family Fare","brand:wikidata":"Q19868045","brand:wikipedia":"en:Family Fare",name:"Family Fare",shop:"supermarket"}},"shop/supermarket|Fareway":{countryCodes:["us"],tags:{brand:"Fareway","brand:wikidata":"Q5434998","brand:wikipedia":"en:Fareway",name:"Fareway",shop:"supermarket"}},"shop/supermarket|Farm Boy":{countryCodes:["ca"],tags:{brand:"Farm Boy","brand:wikidata":"Q5435469","brand:wikipedia":"en:Farm Boy",name:"Farm Boy",shop:"supermarket"}},"shop/supermarket|Feneberg":{countryCodes:["at","de"],tags:{brand:"Feneberg","brand:wikidata":"Q5345378","brand:wikipedia":"de:Feneberg Lebensmittel",name:"Feneberg",shop:"supermarket"}},"shop/supermarket|Food 4 Less":{countryCodes:["us"],tags:{brand:"Food 4 Less","brand:wikidata":"Q5465282","brand:wikipedia":"en:Food 4 Less",name:"Food 4 Less",shop:"supermarket"}},"shop/supermarket|Food Basics":{tags:{brand:"Food Basics","brand:wikidata":"Q5465300","brand:wikipedia":"en:Food Basics",name:"Food Basics",shop:"supermarket"}},"shop/supermarket|Food City~(USA)":{countryCodes:["us"],nomatch:["shop/supermarket|Cargills Food City~(Sri Lanka)"],tags:{brand:"Food City","brand:wikidata":"Q16981107","brand:wikipedia":"en:Food City (K-VA-T)",name:"Food City",shop:"supermarket"}},"shop/supermarket|Food Lion":{countryCodes:["es","us"],tags:{brand:"Food Lion","brand:wikidata":"Q1435950","brand:wikipedia":"en:Food Lion",name:"Food Lion",shop:"supermarket"}},"shop/supermarket|FoodLand~(USA)":{countryCodes:["us"],nomatch:["shop/supermarket|Foodland~(Australia)","shop/supermarket|Foodland~(Canada)","shop/supermarket|Foodland~(Hawaii)"],tags:{brand:"FoodLand","brand:wikidata":"Q5465271","brand:wikipedia":"en:FoodLand",name:"FoodLand",shop:"supermarket"}},"shop/supermarket|FoodMaxx":{countryCodes:["us"],tags:{brand:"FoodMaxx","brand:wikidata":"Q61894844",name:"FoodMaxx",shop:"supermarket"}},"shop/supermarket|Foodland~(Australia)":{countryCodes:["au"],nomatch:["shop/supermarket|Foodland~(Canada)","shop/supermarket|Foodland~(Hawaii)","shop/supermarket|Foodland~(USA)"],tags:{brand:"Foodland","brand:wikidata":"Q5465555","brand:wikipedia":"en:Foodland (South Australia)",name:"Foodland",shop:"supermarket"}},"shop/supermarket|Foodland~(Canada)":{countryCodes:["ca"],nomatch:["shop/supermarket|Foodland~(Australia)","shop/supermarket|Foodland~(Hawaii)","shop/supermarket|Foodland~(USA)"],tags:{brand:"Foodland","brand:wikidata":"Q5465554","brand:wikipedia":"en:Foodland (Canada)",name:"Foodland",shop:"supermarket"}},"shop/supermarket|Foodland~(Hawaii)":{countryCodes:["us"],nomatch:["shop/supermarket|Foodland~(Australia)","shop/supermarket|Foodland~(Canada)","shop/supermarket|Foodland~(USA)"],tags:{brand:"Foodland","brand:wikidata":"Q5465560","brand:wikipedia":"en:Foodland Hawaii",name:"Foodland",shop:"supermarket"}},"shop/supermarket|Foodworks":{countryCodes:["au"],tags:{brand:"Foodworks","brand:wikidata":"Q5465579","brand:wikipedia":"en:FoodWorks",name:"Foodworks",shop:"supermarket"}},"shop/supermarket|Fortinos":{countryCodes:["ca"],tags:{brand:"Fortinos","brand:wikidata":"Q5472662","brand:wikipedia":"en:Fortinos",name:"Fortinos",shop:"supermarket"}},"shop/supermarket|Four Square":{countryCodes:["nz"],tags:{brand:"Four Square","brand:wikidata":"Q5475558","brand:wikipedia":"en:Four Square (supermarket)",name:"Four Square",shop:"supermarket"}},"shop/supermarket|Fred Meyer":{countryCodes:["us"],matchTags:["shop/department_store"],tags:{brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer",shop:"supermarket"}},"shop/supermarket|Fresh":{tags:{brand:"Fresh","brand:wikidata":"Q50737403","brand:wikipedia":"sk:Fresh",name:"Fresh",shop:"supermarket"}},"shop/supermarket|Fresh Thyme":{countryCodes:["us"],matchNames:["fresh thyme farmers market"],tags:{brand:"Fresh Thyme","brand:wikidata":"Q64132791",name:"Fresh Thyme",shop:"supermarket"}},"shop/supermarket|FreshCo":{countryCodes:["ca"],tags:{brand:"FreshCo","brand:wikidata":"Q5502915","brand:wikipedia":"en:FreshCo",name:"FreshCo",shop:"supermarket"}},"shop/supermarket|Froiz":{countryCodes:["es","pt"],tags:{brand:"Froiz","brand:wikidata":"Q17070775","brand:wikipedia":"en:Froiz",name:"Froiz",shop:"supermarket"}},"shop/supermarket|Fry's Food and Drug":{countryCodes:["us"],matchNames:["frys"],nomatch:["shop/electronics|Fry's Electronics"],tags:{brand:"Fry's Food and Drug","brand:wikidata":"Q5506547","brand:wikipedia":"en:Fry's Food and Drug",name:"Fry's Food and Drug",shop:"supermarket"}},"shop/supermarket|Føtex":{countryCodes:["dk"],tags:{brand:"Føtex","brand:wikidata":"Q1480395","brand:wikipedia":"en:Føtex",name:"Føtex",shop:"supermarket"}},"shop/supermarket|G20":{countryCodes:["fr"],tags:{brand:"G20","brand:wikidata":"Q3504731","brand:wikipedia":"fr:Supermarchés G20",name:"G20",shop:"supermarket"}},"shop/supermarket|GBarbosa":{countryCodes:["br"],tags:{brand:"GBarbosa","brand:wikidata":"Q10287817","brand:wikipedia":"pt:GBarbosa",name:"GBarbosa",shop:"supermarket"}},"shop/supermarket|Gadis":{countryCodes:["es"],tags:{brand:"Gadis","brand:wikidata":"Q12389151","brand:wikipedia":"gl:Gadisa",name:"Gadis",shop:"supermarket"}},"shop/supermarket|Giant Eagle":{countryCodes:["us"],matchNames:["giant eagle supermarket"],tags:{brand:"Giant Eagle","brand:wikidata":"Q1522721","brand:wikipedia":"en:Giant Eagle",name:"Giant Eagle",shop:"supermarket"}},"shop/supermarket|Giant Hypermarket":{countryCodes:["id","my","sg","vn"],tags:{brand:"Giant Hypermarket","brand:wikidata":"Q4217013","brand:wikipedia":"en:Giant Hypermarket",name:"Giant Hypermarket",shop:"supermarket"}},"shop/supermarket|Giant~(Carlisle)":{countryCodes:["us"],nomatch:["amenity/fuel|Giant~(Carlisle)","shop/bicycle|Giant","shop/supermarket|Giant~(Landover)"],tags:{brand:"Giant","brand:wikidata":"Q5558332","brand:wikipedia":"en:Giant Food Stores",name:"Giant",shop:"supermarket"}},"shop/supermarket|Giant~(Landover)":{countryCodes:["us"],nomatch:["amenity/fuel|Giant~(Carlisle)","shop/bicycle|Giant","shop/supermarket|Giant~(Carlisle)"],tags:{brand:"Giant","brand:wikidata":"Q5558336","brand:wikipedia":"en:Giant Food (Landover)",name:"Giant",shop:"supermarket"}},"shop/supermarket|Globus":{tags:{brand:"Globus","brand:wikidata":"Q457503","brand:wikipedia":"en:Globus (hypermarket)",name:"Globus",shop:"supermarket"}},"shop/supermarket|Gordon Food Service":{countryCodes:["ca","us"],tags:{brand:"Gordon Food Service","brand:wikidata":"Q1538006","brand:wikipedia":"en:Gordon Food Service",name:"Gordon Food Service",shop:"supermarket"}},"shop/supermarket|Grand Frais":{countryCodes:["fr"],tags:{brand:"Grand Frais","brand:wikidata":"Q3114675","brand:wikipedia":"fr:Grand Frais",name:"Grand Frais",shop:"supermarket"}},"shop/supermarket|Grocery Outlet":{countryCodes:["us"],tags:{brand:"Grocery Outlet","brand:wikidata":"Q5609934","brand:wikipedia":"en:Grocery Outlet",name:"Grocery Outlet",official_name:"Grocery Outlet Bargain Market",shop:"supermarket"}},"shop/supermarket|Groszek":{countryCodes:["pl"],nomatch:["shop/convenience|Groszek"],tags:{brand:"Groszek","brand:wikidata":"Q9280965","brand:wikipedia":"pl:Groszek (sieć sklepów)",name:"Groszek",shop:"supermarket"}},"shop/supermarket|Géant Casino":{countryCodes:["cg","fr"],tags:{brand:"Géant Casino","brand:wikidata":"Q1380537","brand:wikipedia":"fr:Enseignes du groupe Casino",name:"Géant Casino",shop:"supermarket"}},"shop/supermarket|H Mart":{countryCodes:["ca","gb","us"],tags:{"alt_name:ko":"H 마트",brand:"H Mart","brand:wikidata":"Q5636306","brand:wikipedia":"en:H Mart",cuisine:"asian",name:"H Mart","name:en":"H Mart","name:ko":"한아름","name:zh-Hans":"韩亚龙","name:zh-Hant":"韓亞龍",shop:"supermarket"}},"shop/supermarket|H-E-B":{countryCodes:["mx","us"],tags:{brand:"H-E-B","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B",shop:"supermarket"}},"shop/supermarket|HIT":{countryCodes:["de"],tags:{brand:"HIT","brand:wikidata":"Q1548713","brand:wikipedia":"de:HIT Handelsgruppe",name:"HIT",shop:"supermarket"}},"shop/supermarket|HalpaHalli":{countryCodes:["ee","fi","ru"],tags:{brand:"HalpaHalli","brand:wikidata":"Q11861256","brand:wikipedia":"fi:HalpaHalli",name:"HalpaHalli",shop:"supermarket"}},"shop/supermarket|Hannaford":{countryCodes:["us"],tags:{brand:"Hannaford","brand:wikidata":"Q5648760","brand:wikipedia":"en:Hannaford Brothers Company",name:"Hannaford",shop:"supermarket"}},"shop/supermarket|Harris Teeter":{countryCodes:["us"],tags:{brand:"Harris Teeter","brand:wikidata":"Q5665067","brand:wikipedia":"en:Harris Teeter",name:"Harris Teeter",shop:"supermarket"}},"shop/supermarket|Hemköp":{countryCodes:["se"],tags:{brand:"Hemköp","brand:wikidata":"Q10521746","brand:wikipedia":"sv:Hemköp",name:"Hemköp",shop:"supermarket"}},"shop/supermarket|Hero Supermarket":{countryCodes:["id"],tags:{brand:"Hero Supermarket","brand:wikidata":"Q12485604","brand:wikipedia":"en:Hero Supermarket",name:"Hero Supermarket",shop:"supermarket"}},"shop/supermarket|Heron Foods":{countryCodes:["gb"],tags:{brand:"Heron Foods","brand:wikidata":"Q5743472","brand:wikipedia":"en:Heron Foods",name:"Heron Foods",shop:"supermarket"}},"shop/supermarket|Hofer":{countryCodes:["at","si"],nomatch:["amenity/fuel|Hofer"],tags:{brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer",shop:"supermarket"}},"shop/supermarket|Hoogvliet":{countryCodes:["nl"],tags:{brand:"Hoogvliet","brand:wikidata":"Q2770647","brand:wikipedia":"nl:Hoogvliet (supermarkt)",name:"Hoogvliet",shop:"supermarket"}},"shop/supermarket|Hruška":{countryCodes:["cz"],nomatch:["shop/convenience|Hruška"],tags:{brand:"Hruška",name:"Hruška",shop:"supermarket"}},"shop/supermarket|Hy-Vee":{countryCodes:["us"],nomatch:["amenity/fuel|Hy-Vee Gas"],tags:{brand:"Hy-Vee","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",name:"Hy-Vee",shop:"supermarket"}},"shop/supermarket|Hyper U":{countryCodes:["fr"],nomatch:["amenity/fuel|Super U","shop/convenience|Utile","shop/supermarket|Super U","shop/supermarket|U Express"],tags:{brand:"Hyper U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Hyper U",shop:"supermarket"}},"shop/supermarket|ICA":{countryCodes:["no","se"],matchNames:["ica supermarket"],nomatch:["shop/supermarket|ICA Kvantum","shop/supermarket|ICA Maxi"],tags:{brand:"ICA","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA",shop:"supermarket"}},"shop/supermarket|ICA Kvantum":{countryCodes:["se"],nomatch:["shop/supermarket|ICA","shop/supermarket|ICA Maxi"],tags:{brand:"ICA Kvantum","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Kvantum",shop:"supermarket"}},"shop/supermarket|ICA Maxi":{countryCodes:["no","se"],matchNames:["maxi"],nomatch:["shop/supermarket|ICA","shop/supermarket|ICA Kvantum"],tags:{brand:"ICA Maxi","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Maxi",shop:"supermarket"}},"shop/supermarket|IDEA":{countryCodes:["rs"],tags:{brand:"IDEA","brand:wikidata":"Q23461622","brand:wikipedia":"en:Idea (supermarkets)",name:"IDEA",shop:"supermarket"}},"shop/supermarket|IGA":{countryCodes:["au","ca","us"],tags:{brand:"IGA","brand:wikidata":"Q3146662","brand:wikipedia":"en:IGA (supermarkets)",name:"IGA",shop:"supermarket"}},"shop/supermarket|Ingles":{countryCodes:["us"],tags:{brand:"Ingles","brand:wikidata":"Q6032595","brand:wikipedia":"en:Ingles",name:"Ingles",shop:"supermarket"}},"shop/supermarket|Intermarché":{tags:{brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché",shop:"supermarket"}},"shop/supermarket|Intermarché Super":{countryCodes:["be","fr","pl","pt"],tags:{brand:"Intermarché Super","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Super",shop:"supermarket"}},"shop/supermarket|Interspar":{countryCodes:["at"],tags:{brand:"Interspar","brand:wikidata":"Q15820339","brand:wikipedia":"de:Interspar (Österreich)",name:"Interspar",shop:"supermarket"}},"shop/supermarket|Ipercoop":{tags:{brand:"Ipercoop",name:"Ipercoop",shop:"supermarket"}},"shop/supermarket|Irma":{countryCodes:["dk"],tags:{brand:"Irma","brand:wikidata":"Q797150","brand:wikipedia":"en:Irma (supermarket)",name:"Irma",shop:"supermarket"}},"shop/supermarket|Jack's":{countryCodes:["gb"],tags:{brand:"Jack's","brand:wikidata":"Q60741213","brand:wikipedia":"en:Jack's (store)",name:"Jack's",shop:"supermarket"}},"shop/supermarket|Jan Linders":{countryCodes:["nl"],tags:{brand:"Jan Linders","brand:wikidata":"Q2200982","brand:wikipedia":"nl:Jan Linders Supermarkten",name:"Jan Linders",shop:"supermarket"}},"shop/supermarket|Jewel-Osco":{countryCodes:["us"],tags:{brand:"Jewel-Osco","brand:wikidata":"Q3178470","brand:wikipedia":"en:Jewel (supermarket)",name:"Jewel-Osco",shop:"supermarket"}},"shop/supermarket|Jumbo":{tags:{brand:"Jumbo","brand:wikidata":"Q2262314","brand:wikipedia":"en:Jumbo (supermarket)",name:"Jumbo",shop:"supermarket"}},"shop/supermarket|K+K":{countryCodes:["de"],tags:{brand:"K+K","brand:wikidata":"Q1718009","brand:wikipedia":"de:K+K Klaas & Kock",name:"K+K",shop:"supermarket"}},"shop/supermarket|K-Citymarket":{countryCodes:["fi"],tags:{brand:"K-Citymarket","brand:wikidata":"Q11868561","brand:wikipedia":"fi:K-Citymarket",name:"K-Citymarket",shop:"supermarket"}},"shop/supermarket|K-Supermarket":{countryCodes:["fi"],tags:{brand:"K-Supermarket","brand:wikidata":"Q5408668","brand:wikipedia":"fi:K-Supermarket",name:"K-Supermarket",shop:"supermarket"}},"shop/supermarket|Kaufland":{countryCodes:["bg","cz","de","hr","pl","ro","sk"],tags:{brand:"Kaufland","brand:wikidata":"Q685967","brand:wikipedia":"en:Kaufland",name:"Kaufland",shop:"supermarket"}},"shop/supermarket|King Soopers":{countryCodes:["us"],tags:{brand:"King Soopers","brand:wikidata":"Q6412065","brand:wikipedia":"en:King Soopers",name:"King Soopers",shop:"supermarket"}},"shop/supermarket|Kings":{countryCodes:["us"],tags:{brand:"Kings","brand:wikidata":"Q6412914","brand:wikipedia":"en:Kings Food Markets",name:"Kings",shop:"supermarket"}},"shop/supermarket|Kiwi":{countryCodes:["dk","no"],tags:{brand:"Kiwi","brand:wikidata":"Q1613639","brand:wikipedia":"en:Kiwi (store)",name:"Kiwi",shop:"supermarket"}},"shop/supermarket|Konsum":{countryCodes:["de","ee","se"],tags:{brand:"Konsum",name:"Konsum",shop:"supermarket"}},"shop/supermarket|Konzum~(Balkans)":{countryCodes:["ba","hr","rs"],nomatch:["shop/convenience|Konzum~(Balkans)","shop/convenience|Konzum~(Czechia)","shop/supermarket|Konzum~(Czechia)"],tags:{brand:"Konzum","brand:wikidata":"Q518563","brand:wikipedia":"hr:Konzum",name:"Konzum",shop:"supermarket"}},"shop/supermarket|Konzum~(Czechia)":{countryCodes:["cz","sk"],nomatch:["shop/convenience|Konzum~(Balkans)","shop/convenience|Konzum~(Czechia)","shop/supermarket|Konzum~(Balkans)"],tags:{brand:"Konzum",name:"Konzum",shop:"supermarket"}},"shop/supermarket|Kroger":{matchNames:["kroger food and drug","krogers"],nomatch:["amenity/fuel|Kroger"],tags:{brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger",shop:"supermarket"}},"shop/supermarket|Kroger Marketplace":{nomatch:["amenity/fuel|Kroger"],tags:{brand:"Kroger Marketplace","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger Marketplace",shop:"supermarket"}},"shop/supermarket|Krónan":{countryCodes:["is"],tags:{brand:"Krónan","brand:wikidata":"Q16419327","brand:wikipedia":"is:Krónan (verslun)",name:"Krónan",shop:"supermarket"}},"shop/supermarket|Kvickly":{countryCodes:["dk"],tags:{brand:"Kvickly","brand:wikidata":"Q7061148","brand:wikipedia":"en:Kvickly",name:"Kvickly",shop:"supermarket"}},"shop/supermarket|La Anónima":{countryCodes:["ar"],tags:{brand:"La Anónima","brand:wikidata":"Q6135985","brand:wikipedia":"es:La Anónima",name:"La Anónima",shop:"supermarket"}},"shop/supermarket|La Comer":{countryCodes:["mx"],tags:{brand:"La Comer","brand:wikidata":"Q26765126","brand:wikipedia":"es:La Comer",name:"La Comer",shop:"supermarket"}},"shop/supermarket|La Michoacana Meat Market":{countryCodes:["us"],matchNames:["la michoacana"],tags:{brand:"La Michoacana Meat Market","brand:en":"La Michoacana Meat Market","brand:es":"La Michoacana","brand:wikidata":"Q6463872","brand:wikipedia":"en:La Michoacana Meat Market",cuisine:"latin_american",name:"La Michoacana Meat Market","name:en":"La Michoacana Meat Market","name:es":"La Michoacana",shop:"supermarket"}},"shop/supermarket|La Plaza de DIA":{countryCodes:["es"],tags:{brand:"La Plaza de DIA","brand:wikidata":"Q58904673",name:"La Plaza de DIA",shop:"supermarket"}},"shop/supermarket|La Vie Claire":{countryCodes:["fr"],nomatch:["shop/convenience|La Vie Claire"],tags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"fr:La Vie Claire",name:"La Vie Claire",organic:"only",shop:"supermarket"}},"shop/supermarket|Landi":{countryCodes:["ch"],tags:{brand:"Landi","brand:wikidata":"Q1803010","brand:wikipedia":"de:Landi (Unternehmen)",name:"Landi",shop:"supermarket"}},"shop/supermarket|Leader Price":{tags:{brand:"Leader Price","brand:wikidata":"Q2181426","brand:wikipedia":"fr:Leader Price",name:"Leader Price",shop:"supermarket"}},"shop/supermarket|Leclerc Drive":{countryCodes:["fr"],tags:{brand:"Leclerc Drive",name:"Leclerc Drive",shop:"supermarket"}},"shop/supermarket|Lewiatan":{countryCodes:["pl"],nomatch:["shop/convenience|Lewiatan"],tags:{brand:"Lewiatan","brand:wikidata":"Q11755396","brand:wikipedia":"pl:Lewiatan (sieć handlowa)",name:"Lewiatan",shop:"supermarket"}},"shop/supermarket|Lider":{countryCodes:["cl"],nomatch:["shop/supermarket|Lider Express"],tags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider",shop:"supermarket"}},"shop/supermarket|Lider Express":{countryCodes:["cl"],nomatch:["shop/supermarket|Lider"],tags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider Express",shop:"supermarket"}},"shop/supermarket|Lidl":{tags:{brand:"Lidl","brand:wikidata":"Q151954","brand:wikipedia":"en:Lidl",name:"Lidl",shop:"supermarket"}},"shop/supermarket|Lincolnshire Co-op":{countryCodes:["gb"],tags:{brand:"Lincolnshire Co-op","brand:wikidata":"Q6551231","brand:wikipedia":"en:Lincolnshire Co-operative",name:"Lincolnshire Co-op",shop:"supermarket"}},"shop/supermarket|Linella":{countryCodes:["md"],tags:{brand:"Linella","brand:wikidata":"Q61085990","brand:wikipedia":"ro:Linella",name:"Linella",shop:"supermarket"}},"shop/supermarket|Loblaws":{countryCodes:["ca"],matchNames:["loblaws great food"],tags:{brand:"Loblaws","brand:wikidata":"Q3257626","brand:wikipedia":"en:Loblaws",name:"Loblaws",shop:"supermarket"}},"shop/supermarket|Londis~(Ireland)":{countryCodes:["ie"],nomatch:["shop/convenience|Londis~(Ireland)","shop/convenience|Londis~(UK)","shop/supermarket|Londis~(UK)"],tags:{brand:"Londis","brand:wikidata":"Q21015800","brand:wikipedia":"en:Londis (Ireland)",name:"Londis",shop:"supermarket"}},"shop/supermarket|Londis~(UK)":{countryCodes:["gb"],nomatch:["shop/convenience|Londis~(Ireland)","shop/convenience|Londis~(UK)","shop/supermarket|Londis~(Ireland)"],tags:{brand:"Londis","brand:wikidata":"Q21008564","brand:wikipedia":"en:Londis (United Kingdom)",name:"Londis",shop:"supermarket"}},"shop/supermarket|Lotte Mart":{countryCodes:["id","kr"],tags:{brand:"Lotte Mart","brand:wikidata":"Q326715","brand:wikipedia":"en:Lotte Mart",name:"Lotte Mart",shop:"supermarket"}},"shop/supermarket|Lowe's Market":{countryCodes:["us"],nomatch:["shop/clothes|Lowes","shop/doityourself|Lowe's","shop/supermarket|Lowes Foods"],tags:{brand:"Lowe's Market","brand:wikidata":"Q6693107","brand:wikipedia":"en:Lowe's Market",name:"Lowe's Market",shop:"supermarket"}},"shop/supermarket|Lowes Foods":{countryCodes:["us"],nomatch:["shop/clothes|Lowes","shop/doityourself|Lowe's","shop/supermarket|Lowe's Market"],tags:{brand:"Lowes Foods","brand:wikidata":"Q6693991","brand:wikipedia":"en:Lowes Foods",name:"Lowes Foods",shop:"supermarket"}},"shop/supermarket|Lucky":{countryCodes:["us"],matchNames:["luckys"],tags:{brand:"Lucky","brand:wikidata":"Q6698032","brand:wikipedia":"en:Lucky Stores",name:"Lucky",shop:"supermarket"}},"shop/supermarket|Lupa":{countryCodes:["es"],tags:{brand:"Lupa","brand:wikidata":"Q58044048",name:"Lupa",shop:"supermarket"}},"shop/supermarket|M&S Foodhall":{matchNames:["marks & spencer foodhall"],tags:{brand:"M&S Foodhall","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Foodhall",shop:"supermarket"}},"shop/supermarket|M&S Simply Food":{matchNames:["marks & spencer simply food"],nomatch:["shop/convenience|M&S Simply Food"],tags:{brand:"M&S Simply Food","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Simply Food",shop:"supermarket"}},"shop/supermarket|MD":{countryCodes:["it"],matchNames:["md discount"],tags:{brand:"MD","brand:wikidata":"Q3841263","brand:wikipedia":"en:MD Discount",name:"MD",shop:"supermarket"}},"shop/supermarket|MPREIS":{countryCodes:["at","it"],tags:{brand:"MPREIS","brand:wikidata":"Q873491","brand:wikipedia":"de:MPreis",name:"MPREIS",shop:"supermarket"}},"shop/supermarket|Marc's":{countryCodes:["us"],nomatch:["amenity/pharmacy|Marc's"],tags:{brand:"Marc's","brand:wikidata":"Q17080259","brand:wikipedia":"en:Marc's",name:"Marc's",shop:"supermarket"}},"shop/supermarket|Markant":{countryCodes:["de"],tags:{brand:"Markant","brand:wikidata":"Q57523365",name:"Markant",shop:"supermarket"}},"shop/supermarket|Market Basket":{tags:{brand:"Market Basket","brand:wikidata":"Q2079198","brand:wikipedia":"en:Market Basket (New England)",name:"Market Basket",shop:"supermarket"}},"shop/supermarket|Market In":{tags:{brand:"Market In",name:"Market In",shop:"supermarket"}},"shop/supermarket|Marktkauf":{countryCodes:["de"],tags:{brand:"Marktkauf","brand:wikidata":"Q1533254","brand:wikipedia":"de:Marktkauf Holding",name:"Marktkauf",shop:"supermarket"}},"shop/supermarket|Martin's Super Markets":{countryCodes:["us"],tags:{brand:"Martin's Super Markets","brand:wikidata":"Q6774803","brand:wikipedia":"en:Martin's Super Markets",name:"Martin's Super Markets",shop:"supermarket"}},"shop/supermarket|Masymas":{countryCodes:["es"],tags:{brand:"Masymas","brand:wikidata":"Q6135987","brand:wikipedia":"es:Supermercados Masymas",name:"Masymas",shop:"supermarket"}},"shop/supermarket|Match":{countryCodes:["be","fr","hu","lu"],tags:{brand:"Match","brand:wikidata":"Q513977","brand:wikipedia":"en:Match (supermarket)",name:"Match",shop:"supermarket"}},"shop/supermarket|Maxi Dia":{countryCodes:["es"],tags:{brand:"Maxi Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Maxi Dia",shop:"supermarket"}},"shop/supermarket|Maxima X":{countryCodes:["bg","ee","lt","lv"],nomatch:["shop/supermarket|Maxima XX","shop/supermarket|Maxima XXX"],tags:{brand:"Maxima X","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima X",shop:"supermarket"}},"shop/supermarket|Maxima XX":{countryCodes:["bg","ee","lt","lv","pl"],nomatch:["shop/supermarket|Maxima X","shop/supermarket|Maxima XXX"],tags:{brand:"Maxima XX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XX",shop:"supermarket"}},"shop/supermarket|Maxima XXX":{countryCodes:["bg","ee","lt","lv","pl"],matchNames:["maxima"],nomatch:["shop/supermarket|Maxima X","shop/supermarket|Maxima XX"],tags:{brand:"Maxima XXX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XXX",shop:"supermarket"}},"shop/supermarket|Maximarkt":{countryCodes:["at"],tags:{brand:"Maximarkt","brand:wikidata":"Q55524814","brand:wikipedia":"de:Maximarkt",name:"Maximarkt",shop:"supermarket"}},"shop/supermarket|Maxi~(Canada)":{countryCodes:["ca"],nomatch:["shop/supermarket|Maxi~(Serbia)"],tags:{brand:"Maxi","brand:wikidata":"Q3302441","brand:wikipedia":"fr:Maxi (supermarché)",name:"Maxi",shop:"supermarket"}},"shop/supermarket|Maxi~(Serbia)":{countryCodes:["rs"],nomatch:["shop/supermarket|Maxi~(Canada)"],tags:{brand:"Maxi","brand:wikidata":"Q6795490","brand:wikipedia":"en:Maxi (Serbian supermarket)",name:"Maxi",shop:"supermarket"}},"shop/supermarket|Mega Image":{countryCodes:["ro"],tags:{brand:"Mega Image","brand:wikidata":"Q6808085","brand:wikipedia":"en:Mega Image",name:"Mega Image",shop:"supermarket"}},"shop/supermarket|Mego":{countryCodes:["lv"],tags:{brand:"Mego","brand:wikidata":"Q16363314","brand:wikipedia":"lv:Mego",name:"Mego",shop:"supermarket"}},"shop/supermarket|Meijer":{countryCodes:["us"],tags:{brand:"Meijer","brand:wikidata":"Q1917753","brand:wikipedia":"en:Meijer",name:"Meijer",shop:"supermarket"}},"shop/supermarket|Meny":{countryCodes:["dk","no"],tags:{brand:"Meny","brand:wikidata":"Q10581720","brand:wikipedia":"en:Meny",name:"Meny",shop:"supermarket"}},"shop/supermarket|Mercadona":{countryCodes:["es","pt"],tags:{brand:"Mercadona","brand:wikidata":"Q377705","brand:wikipedia":"en:Mercadona",name:"Mercadona",shop:"supermarket"}},"shop/supermarket|Mercator":{countryCodes:["ba","hr","me","rs","si"],nomatch:["shop/convenience|Mercator"],tags:{brand:"Mercator","brand:wikidata":"Q738412","brand:wikipedia":"en:Mercator (retail)",name:"Mercator",shop:"supermarket"}},"shop/supermarket|Merkur":{countryCodes:["at"],tags:{brand:"Merkur","brand:wikidata":"Q1921857","brand:wikipedia":"de:Merkur (Österreich)",name:"Merkur",shop:"supermarket"}},"shop/supermarket|Metro~(Ontario)":{countryCodes:["ca"],nomatch:["amenity/bank|Metro Bank~(UK)","amenity/bank|Metrobank~(Philippines)","shop/mobile_phone|MetroPCS","shop/supermarket|Metro~(Peru)","shop/supermarket|Metro~(Quebec)","shop/wholesale|Metro"],tags:{brand:"Metro","brand:wikidata":"Q1145669","brand:wikipedia":"en:Metro Inc.",name:"Metro",shop:"supermarket"}},"shop/supermarket|Metro~(Peru)":{countryCodes:["pe"],nomatch:["amenity/bank|Metro Bank~(UK)","amenity/bank|Metrobank~(Philippines)","shop/mobile_phone|MetroPCS","shop/supermarket|Metro~(Ontario)","shop/supermarket|Metro~(Quebec)","shop/wholesale|Metro"],tags:{brand:"Metro","brand:wikidata":"Q16640217","brand:wikipedia":"en:Tiendas Metro",name:"Metro",shop:"supermarket"}},"shop/supermarket|Metro~(Quebec)":{countryCodes:["ca"],nomatch:["amenity/bank|Metro Bank~(UK)","amenity/bank|Metrobank~(Philippines)","shop/mobile_phone|MetroPCS","shop/supermarket|Metro~(Ontario)","shop/supermarket|Metro~(Peru)","shop/wholesale|Metro"],tags:{brand:"Metro","brand:wikidata":"Q1145669","brand:wikipedia":"fr:Metro (entreprise québécoise)",name:"Metro",shop:"supermarket"}},"shop/supermarket|Migros":{tags:{brand:"Migros","brand:wikidata":"Q680727","brand:wikipedia":"en:Migros",name:"Migros",shop:"supermarket"}},"shop/supermarket|Mila":{countryCodes:["pl"],tags:{brand:"Mila","brand:wikidata":"Q48844636","brand:wikipedia":"pl:Mila (sieć sklepów)",name:"Mila",shop:"supermarket"}},"shop/supermarket|Minipreço":{tags:{brand:"Minipreço","brand:wikidata":"Q3042224","brand:wikipedia":"en:Minipreço",name:"Minipreço",shop:"supermarket"}},"shop/supermarket|Mix Markt":{countryCodes:["de"],tags:{brand:"Mix Markt","brand:wikidata":"Q327854","brand:wikipedia":"de:Mix Markt",name:"Mix Markt",shop:"supermarket"}},"shop/supermarket|Monoprix":{tags:{brand:"Monoprix","brand:wikidata":"Q3321241","brand:wikipedia":"en:Monoprix",name:"Monoprix",shop:"supermarket"}},"shop/supermarket|More":{countryCodes:["in"],tags:{brand:"More","brand:wikidata":"Q6910891","brand:wikipedia":"en:More (store)",name:"More",shop:"supermarket"}},"shop/supermarket|Morrisons":{countryCodes:["gb"],nomatch:["amenity/fuel|Morrisons"],tags:{brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons",shop:"supermarket"}},"shop/supermarket|My Basket":{tags:{brand:"My Basket",name:"My Basket",shop:"supermarket"}},"shop/supermarket|NP":{matchNames:["np-markt"],nomatch:["amenity/fuel|NP"],tags:{brand:"NP","brand:wikidata":"Q15836148","brand:wikipedia":"de:NP-Markt",name:"NP",shop:"supermarket"}},"shop/supermarket|NTUC Fairprice":{tags:{brand:"NTUC Fairprice",name:"NTUC Fairprice",shop:"supermarket"}},"shop/supermarket|Nah & Frisch":{countryCodes:["at","de"],matchNames:["nah und frisch"],tags:{brand:"Nah & Frisch","brand:wikidata":"Q1963643","brand:wikipedia":"de:Nah & Frisch",name:"Nah & Frisch",shop:"supermarket"}},"shop/supermarket|Nahkauf":{countryCodes:["de"],tags:{brand:"Nahkauf","brand:wikidata":"Q57515238",name:"Nahkauf",shop:"supermarket"}},"shop/supermarket|Natural Grocers":{countryCodes:["us"],tags:{brand:"Natural Grocers",name:"Natural Grocers",shop:"supermarket"}},"shop/supermarket|Naturalia":{countryCodes:["fr"],tags:{brand:"Naturalia","brand:wikidata":"Q3337081","brand:wikipedia":"fr:Naturalia",name:"Naturalia",shop:"supermarket"}},"shop/supermarket|Netto City":{tags:{brand:"Netto City",name:"Netto City",shop:"supermarket"}},"shop/supermarket|Netto Marken-Discount":{countryCodes:["de"],tags:{brand:"Netto Marken-Discount","brand:wikidata":"Q879858","brand:wikipedia":"de:Netto Marken-Discount",name:"Netto Marken-Discount",shop:"supermarket"}},"shop/supermarket|Netto~(Les Mousquetaires)":{countryCodes:["fr","pt"],tags:{brand:"Netto","brand:wikidata":"Q2720988","brand:wikipedia":"fr:Netto",name:"Netto",shop:"supermarket"}},"shop/supermarket|Netto~(Salling)":{countryCodes:["da","de","pl","se"],tags:{brand:"Netto","brand:wikidata":"Q552652","brand:wikipedia":"da:Netto (supermarkedskæde)",name:"Netto",shop:"supermarket"}},"shop/supermarket|Nettó~(Iceland)":{countryCodes:["is"],tags:{brand:"Nettó","brand:wikidata":"Q67205962",name:"Nettó",shop:"supermarket"}},"shop/supermarket|New World":{countryCodes:["nz"],tags:{brand:"New World","brand:wikidata":"Q7012488","brand:wikipedia":"en:New World (supermarket)",name:"New World",shop:"supermarket"}},"shop/supermarket|Nisa Extra":{countryCodes:["gb"],tags:{brand:"Nisa Extra","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa Extra",shop:"supermarket"}},"shop/supermarket|No Frills":{countryCodes:["ca"],tags:{brand:"No Frills","brand:wikidata":"Q3342407","brand:wikipedia":"en:No Frills (grocery store)",name:"No Frills",shop:"supermarket"}},"shop/supermarket|Norfa XL":{countryCodes:["lt"],tags:{brand:"Norfa XL","brand:wikidata":"Q1998983","brand:wikipedia":"lt:Norfa",name:"Norfa XL",shop:"supermarket"}},"shop/supermarket|Norma":{countryCodes:["at","cz","de","fr"],tags:{brand:"Norma","brand:wikidata":"Q450180","brand:wikipedia":"de:Norma (Handelskette)",name:"Norma",shop:"supermarket"}},"shop/supermarket|Northern Store":{countryCodes:["ca"],tags:{brand:"Northern Store","brand:wikidata":"Q7754361","brand:wikipedia":"en:The North West Company",name:"Northern Store",shop:"supermarket"}},"shop/supermarket|Okay":{countryCodes:["be"],tags:{brand:"Okay","brand:wikidata":"Q2159701","brand:wikipedia":"fr:OKay",name:"Okay",shop:"supermarket"}},"shop/supermarket|Olímpica":{countryCodes:["co"],tags:{brand:"Olímpica","brand:wikidata":"Q24749847","brand:wikipedia":"es:Grupo Empresarial Olímpica",name:"Olímpica",shop:"supermarket"}},"shop/supermarket|PLUS":{countryCodes:["nl"],nomatch:["amenity/fuel|Gas Plus","shop/mobile_phone|Plus"],tags:{brand:"PLUS","brand:wikidata":"Q1978981","brand:wikipedia":"nl:PLUS (Nederlandse supermarkt)",name:"PLUS",shop:"supermarket"}},"shop/supermarket|POLOmarket":{countryCodes:["pl"],tags:{brand:"POLOmarket","brand:wikidata":"Q11821937","brand:wikipedia":"pl:Polomarket",name:"POLOmarket",shop:"supermarket"}},"shop/supermarket|Palí":{countryCodes:["cr","ni"],tags:{brand:"Palí","brand:wikidata":"Q1064887","brand:wikipedia":"es:Walmart de México y Centroamérica",name:"Palí",shop:"supermarket"}},"shop/supermarket|Pam":{countryCodes:["ch","it"],tags:{brand:"Pam","brand:wikidata":"Q3777398","brand:wikipedia":"it:Gruppo PAM",name:"Pam",shop:"supermarket"}},"shop/supermarket|Patel Brothers":{countryCodes:["us"],tags:{brand:"Patel Brothers","brand:wikidata":"Q55641396","brand:wikipedia":"en:Patel Brothers",cuisine:"indian",name:"Patel Brothers",shop:"supermarket"}},"shop/supermarket|Pavilions":{countryCodes:["us"],tags:{brand:"Pavilions","brand:wikidata":"Q7155886","brand:wikipedia":"en:Pavilions (supermarket)",name:"Pavilions",shop:"supermarket"}},"shop/supermarket|Penny":{countryCodes:["at","cz","de","hu","it","ro"],matchNames:["penny market","penny markt"],tags:{brand:"Penny","brand:wikidata":"Q284688","brand:wikipedia":"en:Penny (supermarket)",name:"Penny",shop:"supermarket"}},"shop/supermarket|Pick 'n Save":{countryCodes:["us","za"],tags:{brand:"Pick 'n Save","brand:wikidata":"Q7371288","brand:wikipedia":"en:Roundy's",name:"Pick 'n Save",shop:"supermarket"}},"shop/supermarket|Pick n Pay":{tags:{brand:"Pick n Pay","brand:wikidata":"Q7190735","brand:wikipedia":"en:Pick n Pay Stores",name:"Pick n Pay",shop:"supermarket"}},"shop/supermarket|Piggly Wiggly":{countryCodes:["gb","us"],tags:{brand:"Piggly Wiggly","brand:wikidata":"Q3388303","brand:wikipedia":"en:Piggly Wiggly",name:"Piggly Wiggly",shop:"supermarket"}},"shop/supermarket|Pingo Doce":{countryCodes:["pt"],tags:{brand:"Pingo Doce","brand:wikidata":"Q1575057","brand:wikipedia":"en:Pingo Doce",name:"Pingo Doce",shop:"supermarket"}},"shop/supermarket|Piotr i Paweł":{countryCodes:["pl"],tags:{brand:"Piotr i Paweł","brand:wikidata":"Q2096356","brand:wikipedia":"pl:Piotr i Paweł",name:"Piotr i Paweł",shop:"supermarket"}},"shop/supermarket|Plaza Vea":{tags:{brand:"Plaza Vea","brand:wikidata":"Q7203672","brand:wikipedia":"en:Plaza Vea",name:"Plaza Vea",shop:"supermarket"}},"shop/supermarket|Plodine":{countryCodes:["hr"],tags:{brand:"Plodine","brand:wikidata":"Q58040098",name:"Plodine",shop:"supermarket"}},"shop/supermarket|Poiesz":{countryCodes:["nl"],tags:{brand:"Poiesz","brand:wikidata":"Q2521700","brand:wikipedia":"nl:Poiesz Supermarkten",name:"Poiesz",shop:"supermarket"}},"shop/supermarket|Price Chopper~(Kansas City)":{countryCodes:["us"],nomatch:["shop/supermarket|Price Chopper~(New York)"],tags:{brand:"Price Chopper","brand:wikidata":"Q7242572","brand:wikipedia":"en:Price Chopper (supermarket)",name:"Price Chopper",shop:"supermarket"}},"shop/supermarket|Price Chopper~(New York)":{countryCodes:["us"],nomatch:["shop/supermarket|Price Chopper~(Kansas City)"],tags:{brand:"Price Chopper","brand:wikidata":"Q7242574","brand:wikipedia":"en:Price Chopper Supermarkets",name:"Price Chopper",shop:"supermarket"}},"shop/supermarket|Prisma":{countryCodes:["ee","fi","ru"],tags:{brand:"Prisma","brand:wikidata":"Q12047031","brand:wikipedia":"fi:Prisma (kauppaketju)",name:"Prisma",shop:"supermarket"}},"shop/supermarket|Prix":{countryCodes:["it"],matchNames:["prix quality"],tags:{brand:"Prix","brand:wikidata":"Q61994819",name:"Prix",shop:"supermarket"}},"shop/supermarket|Profi":{countryCodes:["be","hu","ro"],tags:{brand:"Profi","brand:wikidata":"Q956664","brand:wikipedia":"en:Profi",name:"Profi",shop:"supermarket"}},"shop/supermarket|Profi City":{countryCodes:["ro"],tags:{brand:"Profi City",name:"Profi City",shop:"supermarket"}},"shop/supermarket|Provigo":{countryCodes:["ca"],tags:{brand:"Provigo","brand:wikidata":"Q3408306","brand:wikipedia":"fr:Provigo",name:"Provigo",shop:"supermarket"}},"shop/supermarket|Proxy Delhaize":{countryCodes:["be","lu"],tags:{brand:"Proxy Delhaize","brand:wikidata":"Q14903417","brand:wikipedia":"en:Delhaize Group",name:"Proxy Delhaize",shop:"supermarket"}},"shop/supermarket|Publix":{countryCodes:["br","us"],tags:{brand:"Publix","brand:wikidata":"Q672170","brand:wikipedia":"en:Publix",name:"Publix",shop:"supermarket"}},"shop/supermarket|Pueblo":{countryCodes:["us"],tags:{brand:"Pueblo","brand:wikidata":"Q7258464","brand:wikipedia":"en:Pueblo Supermarkets",name:"Pueblo",official_name:"Supermercados Pueblo","official_name:en":"Pueblo Supermarkets","official_name:es":"Supermercados Pueblo",shop:"supermarket"}},"shop/supermarket|Punto Simply":{countryCodes:["it"],tags:{brand:"Punto Simply","brand:wikidata":"Q3484790","brand:wikipedia":"it:Simply Market",name:"Punto Simply",shop:"supermarket"}},"shop/supermarket|Puregold":{countryCodes:["ph"],tags:{brand:"Puregold","brand:wikidata":"Q7261170","brand:wikipedia":"en:Puregold",name:"Puregold",shop:"supermarket"}},"shop/supermarket|Pão de Açúcar":{countryCodes:["br","pt"],tags:{brand:"Pão de Açúcar","brand:wikidata":"Q3411543","brand:wikipedia":"pt:Pão de Açúcar (supermercado brasileiro)",name:"Pão de Açúcar",shop:"supermarket"}},"shop/supermarket|QFC":{countryCodes:["us"],tags:{brand:"QFC","brand:wikidata":"Q7265425","brand:wikipedia":"en:QFC",name:"QFC",shop:"supermarket"}},"shop/supermarket|Raley's":{countryCodes:["us"],tags:{brand:"Raley's","brand:wikidata":"Q7286970","brand:wikipedia":"en:Raley's Supermarkets",name:"Raley's",shop:"supermarket"}},"shop/supermarket|Ralphs":{countryCodes:["us"],tags:{brand:"Ralphs","brand:wikidata":"Q3929820","brand:wikipedia":"en:Ralphs",name:"Ralphs",shop:"supermarket"}},"shop/supermarket|Real":{tags:{brand:"Real","brand:wikidata":"Q698473","brand:wikipedia":"en:Real (hypermarket)",name:"Real",shop:"supermarket"}},"shop/supermarket|Real Canadian Superstore":{countryCodes:["ca"],tags:{brand:"Real Canadian Superstore","brand:wikidata":"Q7300856","brand:wikipedia":"en:Real Canadian Superstore",name:"Real Canadian Superstore",shop:"supermarket"}},"shop/supermarket|Redner's":{countryCodes:["us"],matchNames:["redners warehouse market"],tags:{brand:"Redner's","brand:wikidata":"Q7306166","brand:wikipedia":"en:Redner's Markets",name:"Redner's",shop:"supermarket"}},"shop/supermarket|Reliance Fresh":{countryCodes:["in"],tags:{brand:"Reliance Fresh","brand:wikidata":"Q7311014","brand:wikipedia":"en:Reliance Fresh",name:"Reliance Fresh",shop:"supermarket"}},"shop/supermarket|Rema 1000":{countryCodes:["dk","no"],tags:{brand:"Rema 1000","brand:wikidata":"Q28459","brand:wikipedia":"en:REMA 1000",name:"Rema 1000",shop:"supermarket"}},"shop/supermarket|Rewe":{countryCodes:["de"],nomatch:["shop/convenience|Rewe To Go","shop/supermarket|Rewe City"],tags:{brand:"Rewe","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe",shop:"supermarket"}},"shop/supermarket|Rewe City":{countryCodes:["de"],nomatch:["shop/convenience|Rewe To Go","shop/supermarket|Rewe"],tags:{brand:"Rewe City","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe City",shop:"supermarket"}},"shop/supermarket|Rimi":{countryCodes:["ee","lt","lv"],tags:{brand:"Rimi","brand:wikidata":"Q7334456","brand:wikipedia":"en:Rimi (Norway)",name:"Rimi",shop:"supermarket"}},"shop/supermarket|S-market":{countryCodes:["fi"],tags:{brand:"S-market","brand:wikidata":"Q11891613","brand:wikipedia":"fi:S-market",name:"S-market",shop:"supermarket"}},"shop/supermarket|Safeway":{nomatch:["amenity/fuel|Safeway","amenity/pharmacy|Safeway"],tags:{brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway",shop:"supermarket"}},"shop/supermarket|Sainsbury's":{countryCodes:["gb"],nomatch:["amenity/fuel|Sainsbury's"],tags:{brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's",shop:"supermarket"}},"shop/supermarket|Santa Isabel":{countryCodes:["cl"],tags:{brand:"Santa Isabel","brand:wikidata":"Q7419620","brand:wikipedia":"es:Santa Isabel (supermercado)",name:"Santa Isabel",shop:"supermarket"}},"shop/supermarket|Save-A-Lot":{countryCodes:["us"],tags:{brand:"Save-A-Lot","brand:wikidata":"Q7427972","brand:wikipedia":"en:Save-A-Lot",name:"Save-A-Lot",shop:"supermarket"}},"shop/supermarket|Save-On-Foods":{countryCodes:["ca"],tags:{brand:"Save-On-Foods","brand:wikidata":"Q7427974","brand:wikipedia":"en:Save-On-Foods",name:"Save-On-Foods",shop:"supermarket"}},"shop/supermarket|Schnucks":{countryCodes:["us"],tags:{brand:"Schnucks","brand:wikidata":"Q7431920","brand:wikipedia":"en:Schnucks",name:"Schnucks",shop:"supermarket"}},"shop/supermarket|Shaw's":{countryCodes:["us"],tags:{brand:"Shaw's","brand:wikidata":"Q578387","brand:wikipedia":"en:Shaw's and Star Market",name:"Shaw's",shop:"supermarket"}},"shop/supermarket|Sheng Siong":{tags:{brand:"Sheng Siong","brand:wikidata":"Q3481878","brand:wikipedia":"en:Sheng Siong",name:"Sheng Siong",shop:"supermarket"}},"shop/supermarket|ShopRite~(USA)":{countryCodes:["us"],nomatch:["shop/supermarket|Shoprite~(Africa)","shop/supermarket|Shoprite~(Isle of Man)"],tags:{brand:"ShopRite","brand:wikidata":"Q7501097","brand:wikipedia":"en:ShopRite (United States)",name:"ShopRite",shop:"supermarket"}},"shop/supermarket|Shoprite~(Africa)":{countryCodes:["ao","bw","cd","gh","ls","mg","mu","mw","mz","na","ng","sz","ug","za","zm"],nomatch:["shop/supermarket|ShopRite~(USA)","shop/supermarket|Shoprite~(Isle of Man)"],tags:{brand:"Shoprite","brand:wikidata":"Q1857639","brand:wikipedia":"en:Shoprite (South Africa)",name:"Shoprite",shop:"supermarket"}},"shop/supermarket|Shoprite~(Isle of Man)":{countryCodes:["im"],nomatch:["shop/supermarket|ShopRite~(USA)","shop/supermarket|Shoprite~(Africa)"],tags:{brand:"Shoprite","brand:wikidata":"Q7501242","brand:wikipedia":"en:Shoprite (Isle of Man)",name:"Shoprite",shop:"supermarket"}},"shop/supermarket|Sigma":{countryCodes:["it"],tags:{brand:"Sigma","brand:wikidata":"Q3977979","brand:wikipedia":"it:Supermercati Sigma",name:"Sigma",shop:"supermarket"}},"shop/supermarket|Simply Market":{matchNames:["simply"],tags:{brand:"Simply Market","brand:wikidata":"Q3484790","brand:wikipedia":"en:Simply Market",name:"Simply Market",shop:"supermarket"}},"shop/supermarket|Sky":{countryCodes:["de","lv","nl"],tags:{brand:"Sky","brand:wikidata":"Q1129779","brand:wikipedia":"de:Coop eG",name:"Sky",shop:"supermarket"}},"shop/supermarket|Smart & Final":{countryCodes:["mx","us"],tags:{brand:"Smart & Final","brand:wikidata":"Q7543916","brand:wikipedia":"en:Smart & Final",name:"Smart & Final",shop:"supermarket"}},"shop/supermarket|Smith's":{countryCodes:["ca","us"],nomatch:["amenity/fuel|Smith's"],tags:{brand:"Smith's","brand:wikidata":"Q7544856","brand:wikipedia":"en:Smith's Food and Drug",name:"Smith's",shop:"supermarket"}},"shop/supermarket|Sobeys":{countryCodes:["ca"],tags:{brand:"Sobeys","brand:wikidata":"Q1143340","brand:wikipedia":"en:Sobeys",name:"Sobeys",shop:"supermarket"}},"shop/supermarket|Soriana":{countryCodes:["mx"],tags:{brand:"Soriana","brand:wikidata":"Q735562","brand:wikipedia":"en:Soriana",name:"Soriana",shop:"supermarket"}},"shop/supermarket|Spar":{nomatch:["shop/convenience|Spar","shop/convenience|Spar Express"],tags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"supermarket"}},"shop/supermarket|Społem":{nomatch:["shop/convenience|Społem"],tags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"supermarket"}},"shop/supermarket|Sprouts Farmers Market":{countryCodes:["us"],tags:{brand:"Sprouts Farmers Market","brand:wikidata":"Q7581369","brand:wikipedia":"en:Sprouts Farmers Market",name:"Sprouts Farmers Market",shop:"supermarket",short_name:"Sprouts"}},"shop/supermarket|Stater Bros.":{countryCodes:["us"],matchNames:["stater brothers"],tags:{brand:"Stater Bros.","brand:wikidata":"Q7604016","brand:wikipedia":"en:Stater Bros.",name:"Stater Bros.",shop:"supermarket"}},"shop/supermarket|Stokrotka":{countryCodes:["pl"],tags:{brand:"Stokrotka","brand:wikidata":"Q9345945","brand:wikipedia":"pl:Stokrotka (sieć handlowa)",name:"Stokrotka",shop:"supermarket"}},"shop/supermarket|Stop & Shop":{countryCodes:["us"],tags:{brand:"Stop & Shop","brand:wikidata":"Q3658429","brand:wikipedia":"en:Stop & Shop",name:"Stop & Shop",shop:"supermarket"}},"shop/supermarket|Studenac":{tags:{brand:"Studenac",name:"Studenac",shop:"supermarket"}},"shop/supermarket|Suma":{countryCodes:["es"],tags:{brand:"Suma","brand:wikidata":"Q58012362",name:"Suma",shop:"supermarket"}},"shop/supermarket|Supabarn":{countryCodes:["au"],tags:{brand:"Supabarn","brand:wikidata":"Q7641883","brand:wikipedia":"en:Supabarn Supermarkets",name:"Supabarn",official_name:"Supabarn Supermarkets",shop:"supermarket"}},"shop/supermarket|Super 1 Foods":{countryCodes:["us"],tags:{brand:"Super 1 Foods",name:"Super 1 Foods",shop:"supermarket"}},"shop/supermarket|Super C":{tags:{brand:"Super C","brand:wikidata":"Q3504127","brand:wikipedia":"fr:Super C (entreprise)",name:"Super C",shop:"supermarket"}},"shop/supermarket|Super H Mart":{countryCodes:["us"],tags:{brand:"H Mart","brand:wikidata":"Q5636306","brand:wikipedia":"en:H Mart",cuisine:"asian",name:"Super H Mart",shop:"supermarket"}},"shop/supermarket|Super One Foods":{countryCodes:["us"],tags:{brand:"Super One Foods","brand:wikidata":"Q17108733","brand:wikipedia":"en:Super One Foods",name:"Super One Foods",shop:"supermarket"}},"shop/supermarket|Super U":{countryCodes:["fr"],nomatch:["amenity/fuel|Super U","shop/convenience|Utile","shop/supermarket|Hyper U","shop/supermarket|U Express"],tags:{brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U",shop:"supermarket"}},"shop/supermarket|SuperBrugsen":{countryCodes:["dk"],tags:{brand:"SuperBrugsen","brand:wikidata":"Q12337746","brand:wikipedia":"en:SuperBrugsen",name:"SuperBrugsen",shop:"supermarket"}},"shop/supermarket|SuperValu":{tags:{brand:"SuperValu","brand:wikidata":"Q7642081","brand:wikipedia":"en:SuperValu (Ireland)",name:"SuperValu",shop:"supermarket"}},"shop/supermarket|Superama":{countryCodes:["mx"],tags:{brand:"Superama","brand:wikidata":"Q6135762","brand:wikipedia":"es:Superama",name:"Superama",shop:"supermarket"}},"shop/supermarket|Supercor":{countryCodes:["es","pt"],tags:{brand:"Supercor","brand:wikidata":"Q6135841","brand:wikipedia":"es:Supercor",name:"Supercor",shop:"supermarket"}},"shop/supermarket|Supersol":{countryCodes:["ar","es","ma","uy"],tags:{brand:"Supersol","brand:wikidata":"Q62073427",name:"Supersol",shop:"supermarket"}},"shop/supermarket|Superspar":{countryCodes:["es","za"],tags:{brand:"Superspar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Superspar",shop:"supermarket"}},"shop/supermarket|T&T Supermarket":{countryCodes:["ca"],tags:{brand:"T&T Supermarket","brand:wikidata":"Q837893","brand:wikipedia":"en:T & T Supermarket",name:"T&T Supermarket",shop:"supermarket"}},"shop/supermarket|Tegut":{countryCodes:["de"],tags:{brand:"Tegut","brand:wikidata":"Q1547993","brand:wikipedia":"en:Tegut",name:"Tegut",shop:"supermarket"}},"shop/supermarket|Tesco":{nomatch:["amenity/fuel|Tesco","shop/convenience|Tesco","shop/convenience|Tesco Express","shop/convenience|Tesco Lotus Express","shop/supermarket|Tesco Extra","shop/supermarket|Tesco Lotus","shop/supermarket|Tesco Metro"],tags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"supermarket"}},"shop/supermarket|Tesco Extra":{nomatch:["amenity/fuel|Tesco","shop/convenience|Tesco","shop/convenience|Tesco Express","shop/convenience|Tesco Lotus Express","shop/supermarket|Tesco","shop/supermarket|Tesco Lotus","shop/supermarket|Tesco Metro"],tags:{brand:"Tesco Extra","brand:wikidata":"Q25172225","brand:wikipedia":"en:Tesco Extra",name:"Tesco Extra",shop:"supermarket"}},"shop/supermarket|Tesco Lotus":{countryCodes:["th"],nomatch:["amenity/fuel|Tesco","shop/convenience|Tesco","shop/convenience|Tesco Express","shop/convenience|Tesco Lotus Express","shop/supermarket|Tesco","shop/supermarket|Tesco Extra","shop/supermarket|Tesco Metro"],tags:{brand:"Tesco Lotus","brand:wikidata":"Q2378901","brand:wikipedia":"th:เทสโก้ โลตัส",name:"Tesco Lotus",shop:"supermarket"}},"shop/supermarket|Tesco Metro":{countryCodes:["gb"],nomatch:["amenity/fuel|Tesco","shop/convenience|Tesco","shop/convenience|Tesco Express","shop/convenience|Tesco Lotus Express","shop/supermarket|Tesco","shop/supermarket|Tesco Extra","shop/supermarket|Tesco Lotus"],tags:{brand:"Tesco Metro","brand:wikidata":"Q57551648",name:"Tesco Metro",shop:"supermarket"}},"shop/supermarket|The Co-operative Food~(UK)":{countryCodes:["gb"],matchNames:["coop","coop food","cooperative food","the cooperative"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)"],tags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"supermarket"}},"shop/supermarket|The Fresh Market":{countryCodes:["us"],matchNames:["fresh market"],tags:{brand:"The Fresh Market","brand:wikidata":"Q7735265","brand:wikipedia":"en:The Fresh Market",name:"The Fresh Market",shop:"supermarket"}},"shop/supermarket|The Grocery Outlet":{countryCodes:["ca"],tags:{brand:"The Grocery Outlet","brand:wikidata":"Q16062155","brand:wikipedia":"en:The Grocery Outlet",name:"The Grocery Outlet",shop:"supermarket"}},"shop/supermarket|Tigros":{countryCodes:["it"],tags:{brand:"Tigros","brand:wikidata":"Q24935610","brand:wikipedia":"it:Tigros",name:"Tigros",shop:"supermarket"}},"shop/supermarket|Todis":{countryCodes:["it"],tags:{brand:"Todis","brand:wikidata":"Q3992174","brand:wikipedia":"it:Todis",name:"Todis",shop:"supermarket"}},"shop/supermarket|Tommy":{countryCodes:["hr"],tags:{brand:"Tommy","brand:wikidata":"Q12643718","brand:wikipedia":"hr:Tommy",name:"Tommy",shop:"supermarket"}},"shop/supermarket|Top Market":{countryCodes:["pl"],tags:{brand:"Top Market","brand:wikidata":"Q9360044","brand:wikipedia":"pl:Top Market",name:"Top Market",shop:"supermarket"}},"shop/supermarket|Tops":{countryCodes:["us"],tags:{brand:"Tops","brand:wikidata":"Q7825137","brand:wikipedia":"en:Tops Friendly Markets",name:"Tops",official_name:"Tops Friendly Markets",shop:"supermarket"}},"shop/supermarket|Tottus":{countryCodes:["cl","pe"],tags:{brand:"Tottus","brand:wikidata":"Q7828510","brand:wikipedia":"en:Tottus",name:"Tottus",shop:"supermarket"}},"shop/supermarket|Trader Joe's":{countryCodes:["us"],tags:{brand:"Trader Joe's","brand:wikidata":"Q688825","brand:wikipedia":"en:Trader Joe's",name:"Trader Joe's",shop:"supermarket"}},"shop/supermarket|Treff 3000":{countryCodes:["de"],tags:{brand:"Treff 3000","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Treff 3000",shop:"supermarket"}},"shop/supermarket|Tuodì":{countryCodes:["it"],tags:{brand:"Tuodì","brand:wikidata":"Q3706995","brand:wikipedia":"it:Tuodì",name:"Tuodì",shop:"supermarket"}},"shop/supermarket|U Express":{countryCodes:["fr"],nomatch:["amenity/fuel|Super U","shop/convenience|Utile","shop/supermarket|Hyper U","shop/supermarket|Super U"],tags:{brand:"U Express","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"U Express",shop:"supermarket"}},"shop/supermarket|Unimarc":{countryCodes:["cl"],tags:{brand:"Unimarc","brand:wikidata":"Q6156244","brand:wikipedia":"es:Unimarc",name:"Unimarc",shop:"supermarket"}},"shop/supermarket|Unimarkt":{countryCodes:["at"],tags:{brand:"Unimarkt","brand:wikidata":"Q1169599","brand:wikipedia":"de:Unimarkt",name:"Unimarkt",shop:"supermarket"}},"shop/supermarket|Vallarta":{countryCodes:["us"],tags:{brand:"Vallarta","brand:wikidata":"Q7911833","brand:wikipedia":"en:Vallarta Supermarkets",cuisine:"latin_american",name:"Vallarta","name:es":"Vallarta",official_name:"Vallarta Supermarkets",shop:"supermarket"}},"shop/supermarket|Valu-mart":{countryCodes:["ca"],tags:{brand:"Valu-mart","brand:wikidata":"Q7912687","brand:wikipedia":"en:Valu-mart",name:"Valu-mart",shop:"supermarket"}},"shop/supermarket|Vea":{countryCodes:["ar"],tags:{brand:"Vea","brand:wikidata":"Q5858167","brand:wikipedia":"es:Vea (supermercado)",name:"Vea",shop:"supermarket"}},"shop/supermarket|VinMart":{countryCodes:["vn"],matchTags:["shop/department_store"],nomatch:["shop/convenience|VinMart+"],tags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart",shop:"supermarket"}},"shop/supermarket|Volg":{countryCodes:["ch","li"],matchTags:["shop/convenience"],tags:{brand:"Volg","brand:wikidata":"Q2530746","brand:wikipedia":"de:Volg",name:"Volg",shop:"supermarket"}},"shop/supermarket|Vomar":{countryCodes:["nl"],tags:{brand:"Vomar","brand:wikidata":"Q3202837","brand:wikipedia":"nl:Vomar",name:"Vomar",shop:"supermarket"}},"shop/supermarket|Vons":{countryCodes:["us"],tags:{brand:"Vons","brand:wikidata":"Q7941609","brand:wikipedia":"en:Vons",name:"Vons",shop:"supermarket"}},"shop/supermarket|Waitrose":{countryCodes:["gb","je"],nomatch:["shop/convenience|Little Waitrose","shop/convenience|Waitrose"],tags:{brand:"Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose & Partners",name:"Waitrose",official_name:"Waitrose & Partners",shop:"supermarket"}},"shop/supermarket|Walmart Neighborhood Market":{countryCodes:["ca","mx","us"],tags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Neighborhood Market",shop:"supermarket"}},"shop/supermarket|Walmart Supercenter":{matchNames:["walmart supercentre"],matchTags:["shop/department_store"],tags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Supercenter",shop:"supermarket"}},"shop/supermarket|Wasgau":{countryCodes:["de"],tags:{brand:"Wasgau","brand:wikidata":"Q2536857","brand:wikipedia":"de:Wasgau (Unternehmen)",name:"Wasgau",shop:"supermarket"}},"shop/supermarket|Wegmans":{countryCodes:["us"],tags:{brand:"Wegmans","brand:wikidata":"Q11288478","brand:wikipedia":"en:Wegmans",name:"Wegmans",shop:"supermarket"}},"shop/supermarket|Weis":{countryCodes:["us"],tags:{brand:"Weis","brand:wikidata":"Q7980370","brand:wikipedia":"en:Weis Markets",name:"Weis",shop:"supermarket"}},"shop/supermarket|Whole Foods Market":{countryCodes:["ca","gb","us"],matchNames:["whole foods"],tags:{brand:"Whole Foods Market","brand:wikidata":"Q1809448","brand:wikipedia":"en:Whole Foods Market",name:"Whole Foods Market",shop:"supermarket"}},"shop/supermarket|Willys":{countryCodes:["se"],tags:{brand:"Willys","brand:wikidata":"Q10720214","brand:wikipedia":"sv:Willys",name:"Willys",shop:"supermarket"}},"shop/supermarket|WinCo Foods":{countryCodes:["us"],tags:{brand:"WinCo Foods","brand:wikidata":"Q8023592","brand:wikipedia":"en:WinCo Foods",name:"WinCo Foods",shop:"supermarket"}},"shop/supermarket|Winn-Dixie":{countryCodes:["us"],tags:{brand:"Winn-Dixie","brand:wikidata":"Q1264366","brand:wikipedia":"en:Winn-Dixie",name:"Winn-Dixie",shop:"supermarket"}},"shop/supermarket|Woolworths":{countryCodes:["au"],nomatch:["shop/clothes|Woolworths"],tags:{brand:"Woolworths","brand:wikidata":"Q3249145","brand:wikipedia":"en:Woolworths Supermarkets",name:"Woolworths",shop:"supermarket"}},"shop/supermarket|Your Independent Grocer":{countryCodes:["ca"],matchNames:["independent"],tags:{brand:"Your Independent Grocer","brand:wikidata":"Q8058833","brand:wikipedia":"en:Your Independent Grocer",name:"Your Independent Grocer",shop:"supermarket"}},"shop/supermarket|Zehrs":{countryCodes:["ca"],tags:{brand:"Zehrs","brand:wikidata":"Q8068546","brand:wikipedia":"en:Zehrs Markets",name:"Zehrs",shop:"supermarket"}},"shop/supermarket|basic":{countryCodes:["de"],tags:{brand:"basic","brand:wikidata":"Q809994","brand:wikipedia":"de:Basic AG",name:"basic",organic:"only",shop:"supermarket"}},"shop/supermarket|bi1":{countryCodes:["fr"],nomatch:["amenity/fuel|bi1"],tags:{brand:"bi1",name:"bi1",shop:"supermarket"}},"shop/supermarket|denn's Biomarkt":{countryCodes:["at","de"],tags:{brand:"denn's Biomarkt","brand:wikidata":"Q48883773",name:"denn's Biomarkt",organic:"only",shop:"supermarket"}},"shop/supermarket|fakta":{countryCodes:["dk"],tags:{brand:"fakta","brand:wikidata":"Q3172238","brand:wikipedia":"en:Fakta",name:"fakta",shop:"supermarket"}},"shop/supermarket|nah und gut":{countryCodes:["de"],tags:{brand:"nah und gut","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"nah und gut",shop:"supermarket"}},"shop/supermarket|Şok":{countryCodes:["tr"],tags:{brand:"Şok","brand:wikidata":"Q19613992","brand:wikipedia":"tr:Şok (market)",name:"Şok",shop:"supermarket"}},"shop/supermarket|ΑΒ Βασιλόπουλος":{countryCodes:["gr"],tags:{brand:"ΑΒ Βασιλόπουλος","brand:el":"ΑΒ Βασιλόπουλος","brand:en":"AB Vassilopoulos","brand:wikidata":"Q4721807","brand:wikipedia":"el:Άλφα Βήτα Βασιλόπουλος",name:"ΑΒ Βασιλόπουλος","name:el":"ΑΒ Βασιλόπουλος","name:en":"AB Vassilopoulos",shop:"supermarket"}},"shop/supermarket|Γαλαξίας":{countryCodes:["gr"],tags:{brand:"Γαλαξίας","brand:el":"Γαλαξίας","brand:en":"Galaxias","brand:wikidata":"Q5518063","brand:wikipedia":"el:Γαλαξίας (σούπερ μάρκετ)",name:"Γαλαξίας","name:el":"Γαλαξίας","name:en":"Galaxias",shop:"supermarket"}},"shop/supermarket|Μασούτης":{countryCodes:["gr"],tags:{brand:"Μασούτης","brand:el":"Μασούτης","brand:en":"Masoutis","brand:wikidata":"Q6783887","brand:wikipedia":"en:Masoutis",name:"Μασούτης","name:el":"Μασούτης","name:en":"Masoutis",shop:"supermarket"}},"shop/supermarket|Σκλαβενίτης":{countryCodes:["gr"],tags:{brand:"Σκλαβενίτης","brand:el":"Σκλαβενίτης","brand:en":"Sklavenitis","brand:wikidata":"Q7536037","brand:wikipedia":"el:Σκλαβενίτης",name:"Σκλαβενίτης","name:el":"Σκλαβενίτης","name:en":"Sklavenitis",shop:"supermarket"}},"shop/supermarket|АТБ":{tags:{brand:"АТБ",name:"АТБ",shop:"supermarket"}},"shop/supermarket|Абсолют~(Russia)":{countryCodes:["ru"],tags:{brand:"Абсолют","brand:wikidata":"Q62389597",name:"Абсолют",shop:"supermarket"}},"shop/supermarket|Абсолют~(Ukraine)":{countryCodes:["ua"],tags:{brand:"Абсолют","brand:wikidata":"Q62389546",name:"Абсолют",shop:"supermarket"}},"shop/supermarket|Авоська":{tags:{brand:"Авоська",name:"Авоська",shop:"supermarket"}},"shop/supermarket|Азбука Вкуса":{countryCodes:["ru"],tags:{brand:"Азбука Вкуса","brand:en":"Azbuka Vkusa","brand:wikidata":"Q4058209","brand:wikipedia":"en:Azbuka Vkusa",name:"Азбука Вкуса","name:en":"Azbuka Vkusa",shop:"supermarket"}},"shop/supermarket|Атак":{countryCodes:["ru"],tags:{brand:"Атак","brand:en":"Atac","brand:wikidata":"Q2868738","brand:wikipedia":"ru:Atac",name:"Атак","name:en":"Atac",shop:"supermarket"}},"shop/supermarket|Ашан":{countryCodes:["ru","ua"],tags:{brand:"Ашан","brand:en":"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"ru:Auchan",name:"Ашан","name:en":"Auchan",shop:"supermarket"}},"shop/supermarket|Байрам":{countryCodes:["ru"],tags:{brand:"Байрам",name:"Байрам",shop:"supermarket"}},"shop/supermarket|Брусничка":{countryCodes:["ua"],tags:{brand:"Брусничка","brand:en":"Brusnichka","brand:wikidata":"Q21656645","brand:wikipedia":"uk:Брусничка (торгова мережа)",name:"Брусничка","name:en":"Brusnichka",shop:"supermarket"}},"shop/supermarket|Булмаг":{countryCodes:["bg"],tags:{brand:"Булмаг","brand:en":"BulMag","brand:wikidata":"Q66133376",name:"Булмаг","name:en":"BulMag",shop:"supermarket"}},"shop/supermarket|Верный":{tags:{brand:"Верный",name:"Верный",shop:"supermarket"}},"shop/supermarket|Виктория":{countryCodes:["ru"],matchTags:["shop/convenience"],nomatch:["amenity/cafe|Виктория","shop/hairdresser|Виктория"],tags:{brand:"Виктория","brand:wikidata":"Q4111046","brand:wikipedia":"ru:Виктория (сеть магазинов)",name:"Виктория",shop:"supermarket"}},"shop/supermarket|Виталюр":{countryCodes:["by"],tags:{brand:"Виталюр","brand:wikidata":"Q55663075","brand:wikipedia":"ru:Виталюр",name:"Виталюр",shop:"supermarket"}},"shop/supermarket|Вопак":{countryCodes:["ua"],tags:{brand:"Вопак","brand:en":"Vopak","brand:wikidata":"Q30966107","brand:wikipedia":"uk:Вопак",name:"Вопак","name:en":"Vopak",shop:"supermarket"}},"shop/supermarket|Гастроном":{tags:{brand:"Гастроном",name:"Гастроном",shop:"supermarket"}},"shop/supermarket|Гроздь":{nomatch:["shop/convenience|Гроздь"],tags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"supermarket"}},"shop/supermarket|Гулливер":{countryCodes:["ru"],tags:{brand:"Гулливер","brand:wikidata":"Q58003470",name:"Гулливер",shop:"supermarket"}},"shop/supermarket|Десяточка":{countryCodes:["ru"],tags:{brand:"Десяточка","brand:en":"Desyatochka","brand:wikidata":"Q61876182",name:"Десяточка",shop:"supermarket"}},"shop/supermarket|Дикси":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{brand:"Дикси","brand:en":"Dixy","brand:wikidata":"Q4161561","brand:wikipedia":"ru:Дикси (сеть магазинов)",name:"Дикси",shop:"supermarket"}},"shop/supermarket|Евроопт":{countryCodes:["by"],matchTags:["shop/convenience"],tags:{brand:"Евроопт","brand:en":"Euroopt","brand:ru":"Евроопт","brand:wikidata":"Q2565040","brand:wikipedia":"be:Еўрагандаль",name:"Евроопт","name:en":"Euroopt","name:ru":"Евроопт",shop:"supermarket"}},"shop/supermarket|Евроопт Hyper":{countryCodes:["by"],matchNames:["евроопт гипер"],tags:{brand:"Евроопт Hyper","brand:wikidata":"Q65455975",name:"Евроопт Hyper",shop:"supermarket"}},"shop/supermarket|Евроопт Super":{countryCodes:["by"],matchNames:["евроопт супер"],tags:{brand:"Евроопт Super","brand:wikidata":"Q65455960",name:"Евроопт Super",shop:"supermarket"}},"shop/supermarket|Караван":{countryCodes:["ru","ua"],tags:{brand:"Караван",name:"Караван",shop:"supermarket"}},"shop/supermarket|Карусель":{countryCodes:["ru"],tags:{brand:"Карусель","brand:en":"Karusel","brand:wikidata":"Q4216307","brand:wikipedia":"ru:Карусель (сеть магазинов)",name:"Карусель","name:en":"Karusel",shop:"supermarket"}},"shop/supermarket|Квартал":{tags:{brand:"Квартал",name:"Квартал",shop:"supermarket"}},"shop/supermarket|Кировский":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{brand:"Кировский","brand:wikidata":"Q63301903",name:"Кировский",shop:"supermarket"}},"shop/supermarket|Командор":{countryCodes:["ru"],tags:{brand:"Командор","brand:en":"Komandor","brand:wikidata":"Q61876152",name:"Командор",shop:"supermarket"}},"shop/supermarket|Красный Яр":{countryCodes:["ru"],tags:{brand:"Красный Яр","brand:en":"Krasnyj Jar","brand:wikidata":"Q1786753","brand:wikipedia":"ru:Красный Яр",name:"Красный Яр",shop:"supermarket"}},"shop/supermarket|Лента":{countryCodes:["ru"],tags:{brand:"Лента","brand:en":"Lenta","brand:wikidata":"Q4258608","brand:wikipedia":"ru:Лента (сеть магазинов)",name:"Лента","name:en":"Lenta",shop:"supermarket"}},"shop/supermarket|ЛотОК":{tags:{brand:"ЛотОК",name:"ЛотОК",shop:"supermarket"}},"shop/supermarket|Магазин":{tags:{brand:"Магазин",name:"Магазин",shop:"supermarket"}},"shop/supermarket|Магнит":{matchTags:["shop/department_store"],nomatch:["shop/convenience|Магнит","shop/cosmetics|Магнит Косметик"],tags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"supermarket"}},"shop/supermarket|Магнит у дома":{countryCodes:["ru"],tags:{brand:"Магнит у дома",name:"Магнит у дома",shop:"supermarket"}},"shop/supermarket|Магнолия":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{brand:"Магнолия","brand:wikipedia":"ru:Магнолия (сеть магазинов)",name:"Магнолия",shop:"supermarket"}},"shop/supermarket|Мария-Ра":{countryCodes:["ru"],nomatch:["shop/convenience|Мария-Ра"],tags:{brand:"Мария-Ра","brand:en":"Maria-ra","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра","name:en":"Maria-ra",shop:"supermarket"}},"shop/supermarket|Мираторг":{countryCodes:["ru"],tags:{brand:"Мираторг",name:"Мираторг",shop:"supermarket"}},"shop/supermarket|Монетка":{countryCodes:["ru"],tags:{brand:"Монетка","brand:en":"Monetka","brand:wikidata":"Q4301704","brand:wikipedia":"ru:Монетка (сеть магазинов)",name:"Монетка","name:en":"Monetka",shop:"supermarket"}},"shop/supermarket|Народная 7Я семьЯ":{countryCodes:["ru"],matchNames:["семья"],tags:{brand:"Народная 7Я семьЯ","brand:en":"People's 7th Family","brand:wikidata":"Q4032436","brand:wikipedia":"ru:Народная 7Я семья",name:"Народная 7Я семьЯ","name:en":"People's 7th Family",shop:"supermarket"}},"shop/supermarket|Перекрёсток":{countryCodes:["ru"],matchNames:["перекресток"],matchTags:["shop/convenience"],tags:{brand:"Перекрёсток","brand:en":"Perekryostok","brand:wikidata":"Q1684639","brand:wikipedia":"en:Perekrestok (supermarket chain)",name:"Перекрёсток",shop:"supermarket"}},"shop/supermarket|Покупочка":{countryCodes:["ru"],tags:{brand:"Покупочка","brand:wikidata":"Q58003270",name:"Покупочка",shop:"supermarket"}},"shop/supermarket|Полушка":{countryCodes:["ru"],tags:{brand:"Полушка","brand:en":"Polushka","brand:wikidata":"Q4371080","brand:wikipedia":"ru:Полушка (сеть магазинов)",name:"Полушка","name:en":"Polushka",shop:"supermarket"}},"shop/supermarket|Пятёрочка":{countryCodes:["ru"],matchNames:["пятерочка"],matchTags:["shop/convenience"],tags:{brand:"Пятёрочка","brand:en":"Pyaterochka","brand:wikidata":"Q1768969","brand:wikipedia":"ru:Пятёрочка",name:"Пятёрочка","name:en":"Pyaterochka",shop:"supermarket"}},"shop/supermarket|Радеж":{countryCodes:["ru"],tags:{brand:"Радеж","brand:en":"Radezh","brand:wikidata":"Q4387165","brand:wikipedia":"ru:Радеж (торговая сеть)",name:"Радеж","name:en":"Radezh",shop:"supermarket"}},"shop/supermarket|Рублёвский":{countryCodes:["by"],tags:{brand:"Рублёвский",name:"Рублёвский",shop:"supermarket"}},"shop/supermarket|Рукавичка":{countryCodes:["ua"],tags:{brand:"Рукавичка","brand:en":"Rukavychka","brand:wikidata":"Q20092568","brand:wikipedia":"uk:Рукавичка (торгова мережа)",name:"Рукавичка","name:en":"Rukavychka",shop:"supermarket"}},"shop/supermarket|Светофор":{countryCodes:["ru"],tags:{brand:"Светофор","brand:en":"Svetofor","brand:wikidata":"Q61875920",name:"Светофор",shop:"supermarket"}},"shop/supermarket|Семишагофф":{countryCodes:["ru"],tags:{brand:"Семишагофф","brand:wikidata":"Q58003374",name:"Семишагофф",shop:"supermarket"}},"shop/supermarket|Сільпо":{countryCodes:["ua"],tags:{brand:"Сільпо","brand:en":"Silpo","brand:wikidata":"Q4419434","brand:wikipedia":"en:Silpo",name:"Сільпо","name:en":"Silpo",shop:"supermarket"}},"shop/supermarket|Таврия В":{countryCodes:["ua"],tags:{brand:"Таврия В","brand:wikidata":"Q61823146","brand:wikipedia":"uk:Таврія В",name:"Таврия В",shop:"supermarket"}},"shop/supermarket|Фора":{countryCodes:["ua"],tags:{brand:"Фора","brand:en":"Fora","brand:wikidata":"Q12165977","brand:wikipedia":"uk:Фора (мережа магазинів)",name:"Фора","name:en":"Fora",shop:"supermarket"}},"shop/supermarket|Фуршет":{countryCodes:["ua"],tags:{brand:"Фуршет","brand:en":"Furshet","brand:wikidata":"Q4493564","brand:wikipedia":"uk:Фуршет (мережа супермаркетів)",name:"Фуршет","name:en":"Furshet",shop:"supermarket"}},"shop/supermarket|Эдельвейс":{countryCodes:["ru"],tags:{brand:"Эдельвейс","brand:en":"Edelveis","brand:wikidata":"Q57979368",name:"Эдельвейс","name:en":"Edelveis",shop:"supermarket"}},"shop/supermarket|Ярче":{tags:{brand:"Ярче",name:"Ярче",shop:"supermarket"}},"shop/supermarket|שופרסל דיל":{countryCodes:["il"],tags:{brand:"שופרסל דיל","brand:he":"שופרסל דיל",name:"שופרסל דיל","name:he":"שופרסל דיל",shop:"supermarket"}},"shop/supermarket|سوبر ماركت":{tags:{brand:"سوبر ماركت",name:"سوبر ماركت",shop:"supermarket"}},"shop/supermarket|いなげや":{countryCodes:["jp"],tags:{brand:"いなげや","brand:en":"Inageya","brand:ja":"いなげや","brand:wikidata":"Q17193392","brand:wikipedia":"ja:いなげや",name:"いなげや","name:en":"Inageya","name:ja":"いなげや",shop:"supermarket"}},"shop/supermarket|まいばすけっと":{countryCodes:["jp"],tags:{brand:"まいばすけっと","brand:en":"My Basket","brand:ja":"まいばすけっと","brand:wikidata":"Q11278154","brand:wikipedia":"ja:まいばすけっと",name:"まいばすけっと","name:en":"My Basket","name:ja":"まいばすけっと",shop:"supermarket"}},"shop/supermarket|アコレ":{countryCodes:["jp"],tags:{"alt_name:en":"Acolle",brand:"アコレ","brand:en":"A・Colle","brand:ja":"アコレ","brand:wikidata":"Q11283128","brand:wikipedia":"ja:アコレ",name:"アコレ","name:en":"A・Colle","name:ja":"アコレ",shop:"supermarket"}},"shop/supermarket|イオン":{countryCodes:["jp"],tags:{brand:"イオン","brand:en":"AEON","brand:ja":"イオン","brand:wikidata":"Q11285951","brand:wikipedia":"ja:イオン (店舗ブランド)",name:"イオン","name:en":"AEON","name:ja":"イオン",shop:"supermarket"}},"shop/supermarket|イズミヤ":{countryCodes:["jp"],matchNames:["いづみや"],tags:{brand:"イズミヤ","brand:en":"Izumiya","brand:ja":"イズミヤ","brand:wikidata":"Q11286632","brand:wikipedia":"ja:イズミヤ",name:"イズミヤ","name:en":"Izumiya","name:ja":"イズミヤ",shop:"supermarket"}},"shop/supermarket|イトーヨーカドー":{countryCodes:["jp"],matchNames:["イトーヨーカ堂"],tags:{brand:"イトーヨーカドー","brand:en":"Ito-Yokado","brand:ja":"イトーヨーカドー","brand:wikidata":"Q3088746","brand:wikipedia":"en:Ito-Yokado",name:"イトーヨーカドー","name:en":"Ito-Yokado","name:ja":"イトーヨーカドー",shop:"supermarket"}},"shop/supermarket|オリンピック":{countryCodes:["jp"],tags:{brand:"オリンピック","brand:en":"Olympic","brand:ja":"オリンピック","brand:wikidata":"Q11292764","brand:wikipedia":"ja:Olympicグループ",name:"オリンピック","name:en":"Olympic","name:ja":"オリンピック",shop:"supermarket"}},"shop/supermarket|カスミ":{countryCodes:["jp"],tags:{brand:"カスミ","brand:en":"Kasumi","brand:ja":"カスミ","brand:wikidata":"Q11294160","brand:wikipedia":"ja:カスミ",name:"カスミ","name:en":"Kasumi","name:ja":"カスミ",shop:"supermarket"}},"shop/supermarket|コープ":{countryCodes:["jp"],tags:{"alt_name:en":"Co-op",brand:"コープ","brand:en":"CO・OP","brand:ja":"コープ","brand:wikidata":"Q11508615","brand:wikipedia":"ja:日本生活協同組合連合会",name:"コープ","name:ja":"コープ",official_name:"日本生活協同組合連合会","official_name:en":"Japanese Consumers' Co-operative Union",shop:"supermarket"}},"shop/supermarket|コープこう":{countryCodes:["jp"],tags:{"alt_name:en":"Co-op Kobe",brand:"コープこう","brand:en":"CO・OP Kobe","brand:ja":"コープこう","brand:wikidata":"Q5137453","brand:wikipedia":"ja:生活協同組合コープこうべ",name:"コープこう","name:en":"CO・OP Kobe","name:ja":"コープこう",official_name:"生活協同組合コープこうべ","official_name:en":"The Consumer Co-operative Kobe",shop:"supermarket"}},"shop/supermarket|サミット":{countryCodes:["jp"],tags:{brand:"サミット","brand:en":"Summit","brand:ja":"サミット","brand:wikidata":"Q11305129","brand:wikipedia":"ja:サミット (チェーンストア)",name:"サミット","name:en":"Summit","name:ja":"サミット",shop:"supermarket"}},"shop/supermarket|スーパーバリュー":{countryCodes:["jp"],tags:{brand:"スーパーバリュー","brand:en":"Super Value","brand:ja":"スーパーバリュー","brand:wikidata":"Q11313802","brand:wikipedia":"ja:スーパーバリュー",name:"スーパーバリュー","name:en":"Super Value","name:ja":"スーパーバリュー",shop:"supermarket"}},"shop/supermarket|ダイエー":{countryCodes:["jp"],tags:{brand:"ダイエー","brand:en":"daiei","brand:ja":"ダイエー","brand:wikidata":"Q11316644","brand:wikipedia":"ja:ダイエー (店舗ブランド)",name:"ダイエー","name:en":"Daiei","name:ja":"ダイエー",shop:"supermarket"}},"shop/supermarket|トウズ":{countryCodes:["jp"],tags:{brand:"トウズ","brand:en":"Tou's","brand:ja":"トウズ","brand:wikidata":"Q53308796","brand:wikipedia":"ja:トウズ",name:"トウズ","name:en":"Tou's","name:ja":"トウズ",shop:"supermarket"}},"shop/supermarket|バロー":{countryCodes:["jp"],tags:{brand:"バロー","brand:en":"Valor","brand:ja":"バロー","brand:wikidata":"Q11328346","brand:wikipedia":"ja:バロー (チェーンストア)",name:"バロー","name:en":"Valor","name:ja":"バロー",shop:"supermarket"}},"shop/supermarket|ベイシア":{countryCodes:["jp"],tags:{brand:"ベイシア","brand:en":"Beisia","brand:ja":"ベイシア","brand:wikidata":"Q11336776","brand:wikipedia":"ja:ベイシア",name:"ベイシア","name:en":"Beisia","name:ja":"ベイシア",shop:"supermarket"}},"shop/supermarket|マックスバリュ":{countryCodes:["jp"],tags:{brand:"マックスバリュ","brand:en":"Maxvalu Tokai","brand:ja":"マックスバリュ","brand:wikidata":"Q1960109","brand:wikipedia":"en:MaxValu",name:"マックスバリュ","name:en":"Maxvalu Tokai","name:ja":"マックスバリュ",shop:"supermarket"}},"shop/supermarket|マルエツ":{countryCodes:["jp"],tags:{brand:"マルエツ","brand:en":"Maruetsu","brand:ja":"マルエツ","brand:wikidata":"Q11341197","brand:wikipedia":"ja:マルエツ",name:"マルエツ","name:en":"Maruetsu","name:ja":"マルエツ",shop:"supermarket"}},"shop/supermarket|ヤオコー":{countryCodes:["jp"],tags:{brand:"ヤオコー","brand:en":"Yaoko","brand:ja":"ヤオコー","brand:wikidata":"Q11344967","brand:wikipedia":"ja:ヤオコー",name:"ヤオコー","name:en":"Yaoko","name:ja":"ヤオコー",shop:"supermarket"}},"shop/supermarket|ヨークベニマル":{countryCodes:["jp"],tags:{brand:"ヨークベニマル","brand:en":"York Benimaru","brand:ja":"ヨークベニマル","brand:wikidata":"Q11346199","brand:wikipedia":"ja:ヨークベニマル",name:"ヨークベニマル","name:en":"York Benimaru","name:ja":"ヨークベニマル",shop:"supermarket"}},"shop/supermarket|ヨークマート":{countryCodes:["jp"],tags:{brand:"ヨークマート","brand:en":"YorkMart","brand:ja":"ヨークマート","brand:wikidata":"Q11346201","brand:wikipedia":"ja:ヨークマート",name:"ヨークマート","name:en":"YorkMart","name:ja":"ヨークマート",shop:"supermarket"}},"shop/supermarket|ライフ":{countryCodes:["jp"],tags:{brand:"ライフ","brand:en":"Life","brand:ja":"ライフ","brand:wikidata":"Q11346476","brand:wikipedia":"ja:ライフコーポレーション",name:"ライフ","name:en":"Life","name:ja":"ライフ",shop:"supermarket"}},"shop/supermarket|ワイズマート":{countryCodes:["jp"],matchNames:["よしのぶっさん"],tags:{brand:"ワイズマート","brand:en":"Y'smart","brand:ja":"ワイズマート","brand:wikidata":"Q11351175","brand:wikipedia":"ja:ワイズマート",name:"ワイズマート","name:en":"Y'smart","name:ja":"ワイズマート",shop:"supermarket"}},"shop/supermarket|全聯":{countryCodes:["tw"],tags:{brand:"全聯","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯","name:en":"Pxmart",shop:"supermarket"}},"shop/supermarket|全聯福利中心":{countryCodes:["tw"],tags:{brand:"全聯福利中心","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯福利中心","name:en":"Pxmart",shop:"supermarket"}},"shop/supermarket|家乐福":{countryCodes:["cn"],tags:{brand:"家乐福","brand:wikidata":"Q217599","brand:wikipedia":"wuu:家乐福",name:"家乐福",shop:"supermarket"}},"shop/supermarket|惠康 Wellcome":{countryCodes:["hk"],tags:{brand:"惠康 Wellcome","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"zh:惠康",name:"惠康 Wellcome","name:en":"Wellcome",shop:"supermarket"}},"shop/supermarket|東急ストア":{countryCodes:["jp"],tags:{brand:"東急ストア","brand:en":"Tokyu Store","brand:ja":"東急ストア","brand:wikidata":"Q11526963","brand:wikipedia":"ja:東急ストア",name:"東急ストア","name:en":"Tokyu Store","name:ja":"東急ストア",shop:"supermarket"}},"shop/supermarket|東武ストア":{countryCodes:["jp"],tags:{brand:"東武ストア","brand:en":"Tobu Store","brand:ja":"東武ストア","brand:wikidata":"Q11527478","brand:wikipedia":"ja:東武ストア",name:"東武ストア","name:en":"Tobu Store","name:ja":"東武ストア",shop:"supermarket"}},"shop/supermarket|業務スーパー":{countryCodes:["jp"],tags:{brand:"業務スーパー","brand:en":"Gyomu Super","brand:ja":"業務スーパー","brand:wikidata":"Q11590183","brand:wikipedia":"ja:神戸物産",name:"業務スーパー","name:en":"Gyōmu sūpā","name:ja":"業務スーパー",shop:"supermarket"}},"shop/supermarket|沃尔玛":{countryCodes:["cn"],tags:{brand:"沃尔玛","brand:en":"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"wuu:沃尔玛",name:"沃尔玛","name:en":"Walmart",shop:"supermarket"}},"shop/supermarket|美廉社":{countryCodes:["tw"],tags:{brand:"美廉社","brand:en":"Simple Mart","brand:wikidata":"Q15914017","brand:wikipedia":"zh:美廉社",name:"美廉社","name:en":"Simple Mart",shop:"supermarket"}},"shop/supermarket|西友":{countryCodes:["jp"],tags:{brand:"西友","brand:en":"Seiyu","brand:wikidata":"Q3108542","brand:wikipedia":"en:Seiyu Group",name:"西友","name:en":"Seiyu",shop:"supermarket"}},"shop/supermarket|頂好":{countryCodes:["tw"],tags:{brand:"頂好","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好","name:en":"Wellcome",shop:"supermarket"}},"shop/supermarket|頂好超市":{countryCodes:["tw"],tags:{brand:"頂好超市","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好超市","name:en":"Wellcome",shop:"supermarket"}},"shop/supermarket|롯데마트":{countryCodes:["kr"],tags:{brand:"롯데마트","brand:ko":"롯데마트","brand:wikidata":"Q326715","brand:wikipedia":"ko:롯데마트",name:"롯데마트","name:en":"Lotte Mart","name:ko":"롯데마트",shop:"supermarket"}},"shop/supermarket|우리마트":{countryCodes:["kr"],tags:{brand:"우리마트","brand:ko":"우리마트",name:"우리마트","name:ko":"우리마트",shop:"supermarket"}},"shop/supermarket|하나로마트":{countryCodes:["kr"],tags:{brand:"하나로마트","brand:en":"Hanaro Mart","brand:ko":"하나로마트","brand:wikidata":"Q12590611","brand:wikipedia":"ko:농협유통",name:"하나로마트","name:ko":"하나로마트",shop:"supermarket"}},"shop/swimming_pool|Leslie's Pool Supplies":{countryCodes:["us"],matchNames:["leslies pool supply","leslies swimming pool supplies"],matchTags:["shop/outdoor","shop/pool","shop/water_sports"],tags:{brand:"Leslie's Pool Supplies","brand:wikidata":"Q6530568","brand:wikipedia":"en:Leslie's Poolmart",name:"Leslie's Pool Supplies",official_name:"Leslie's Pool Supplies Service & Repair",shop:"swimming_pool"}},"shop/tea|DavidsTea":{countryCodes:["ca","us"],tags:{brand:"DavidsTea","brand:wikidata":"Q3019129","brand:wikipedia":"en:DavidsTea",name:"DavidsTea",shop:"tea"}},"shop/tea|T2":{countryCodes:["au"],tags:{brand:"T2","brand:wikidata":"Q48802134","brand:wikipedia":"en:T2 (Australian company)",name:"T2",shop:"tea"}},"shop/tea|TeeGschwendner":{countryCodes:["de"],tags:{brand:"TeeGschwendner","brand:wikidata":"Q2399969","brand:wikipedia":"de:TeeGschwendner",name:"TeeGschwendner",shop:"tea"}},"shop/telecommunication|A1":{countryCodes:["at","bg","by","hr","si"],matchNames:["velcom","velcom|a1","велком"],nomatch:["shop/mobile_phone|A1"],tags:{brand:"A1","brand:wikidata":"Q688755","brand:wikipedia":"en:A1 Telekom Austria Group",name:"A1",shop:"telecommunication"}},"shop/telecommunication|Agencia ICE":{tags:{brand:"Agencia ICE",name:"Agencia ICE",shop:"telecommunication"}},"shop/telecommunication|Bell":{countryCodes:["ca"],matchNames:["bell canada"],nomatch:["shop/mobile_phone|Bell"],tags:{brand:"Bell","brand:wikidata":"Q815694","brand:wikipedia":"en:Bell Canada",name:"Bell",shop:"telecommunication"}},"shop/telecommunication|Malitel":{countryCodes:["ml"],tags:{brand:"Malitel","brand:wikidata":"Q6743829","brand:wikipedia":"en:Malitel",name:"Malitel",shop:"telecommunication"}},"shop/telecommunication|Ooredoo":{tags:{brand:"Ooredoo","brand:wikidata":"Q919935","brand:wikipedia":"en:Ooredoo",name:"Ooredoo",shop:"telecommunication"}},"shop/telecommunication|Orange Mali":{countryCodes:["ml"],tags:{brand:"Orange Mali","brand:wikidata":"Q3355061","brand:wikipedia":"fr:Orange Mali",name:"Orange Mali",shop:"telecommunication"}},"shop/telecommunication|Spectrum":{countryCodes:["us"],tags:{brand:"Spectrum","brand:wikidata":"Q7805197","brand:wikipedia":"en:Spectrum (cable service)",name:"Spectrum",shop:"telecommunication"}},"shop/telecommunication|Xfinity":{countryCodes:["us"],tags:{brand:"Xfinity","brand:wikidata":"Q5151002","brand:wikipedia":"en:Xfinity",name:"Xfinity",shop:"telecommunication"}},"shop/telecommunication|Дом.ru":{tags:{brand:"Дом.ru",name:"Дом.ru",shop:"telecommunication"}},"shop/telecommunication|МТС":{countryCodes:["by","ru","ua"],nomatch:["shop/mobile_phone|МТС"],tags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"telecommunication"}},"shop/telecommunication|Ростелеком":{countryCodes:["ru"],tags:{brand:"Ростелеком","brand:wikidata":"Q1477012","brand:wikipedia":"en:Rostelecom",name:"Ростелеком",shop:"telecommunication"}},"shop/telecommunication|Укртелеком":{countryCodes:["ua"],tags:{brand:"Укртелеком","brand:wikidata":"Q1505321","brand:wikipedia":"en:Ukrtelecom",name:"Укртелеком",shop:"telecommunication"}},"shop/telecommunication|中華電信":{countryCodes:["tw"],tags:{brand:"中華電信","brand:en":"Chunghwa Telecom","brand:wikidata":"Q717531","brand:wikipedia":"zh:中華電信","brand:zh":"中華電信",name:"中華電信","name:en":"Chunghwa Telecom","name:zh":"中華電信",shop:"telecommunication"}},"shop/telecommunication|遠傳電信":{countryCodes:["tw"],tags:{brand:"遠傳電信","brand:en":"FarEasTone","brand:wikidata":"Q5434486","brand:wikipedia":"zh:遠傳電信","brand:zh":"遠傳電信",name:"遠傳電信","name:en":"FarEasTone","name:zh":"遠傳電信",shop:"telecommunication"}},"shop/ticket|Boutique Grandes Lignes":{countryCodes:["fr"],tags:{brand:"Boutique Grandes Lignes","brand:wikidata":"Q13646","brand:wikipedia":"fr:Société nationale des chemins de fer français",name:"Boutique Grandes Lignes",shop:"ticket"}},"shop/ticket|DB Reisezentrum":{countryCodes:["de"],matchNames:["reisezentrum"],tags:{brand:"DB Reisezentrum","brand:wikidata":"Q15842100","brand:wikipedia":"de:Reisezentrum",name:"DB Reisezentrum",shop:"ticket"}},"shop/ticket|Guichet Transilien":{countryCodes:["fr"],tags:{brand:"Guichet Transilien","brand:wikidata":"Q389554","brand:wikipedia":"fr:Transilien",name:"Guichet Transilien",shop:"ticket"}},"shop/tiles|Topps Tiles":{countryCodes:["gb"],matchTags:["shop/diy"],tags:{brand:"Topps Tiles","brand:wikidata":"Q17026595","brand:wikipedia":"en:Topps Tiles",name:"Topps Tiles",shop:"tiles"}},"shop/tobacco|Nemzeti Dohánybolt":{countryCodes:["hu"],matchNames:["dohánybolt"],matchTags:["shop/kiosk"],tags:{brand:"Nemzeti Dohánybolt","brand:wikidata":"Q20639040","brand:wikipedia":"en:Dohánybolt",name:"Nemzeti Dohánybolt",shop:"tobacco"}},"shop/tool_hire|HSS Hire":{countryCodes:["gb","ie"],tags:{brand:"HSS Hire","brand:wikidata":"Q5636000","brand:wikipedia":"en:HSS Hire",name:"HSS Hire",shop:"tool_hire"}},"shop/toys|Build-A-Bear Workshop":{countryCodes:["ca","gb","us"],matchNames:["build a bear"],matchTags:["shop/gift"],tags:{brand:"Build-A-Bear Workshop","brand:wikidata":"Q1002992","brand:wikipedia":"en:Build-A-Bear Workshop",name:"Build-A-Bear Workshop",shop:"toys"}},"shop/toys|Dráčik":{countryCodes:["cz","sk"],tags:{brand:"Dráčik","brand:wikidata":"Q57653669",name:"Dráčik",shop:"toys"}},"shop/toys|Early Learning Centre":{matchNames:["early learning center"],tags:{alt_name:"ELC",brand:"Early Learning Centre","brand:wikidata":"Q5326681","brand:wikipedia":"en:Early Learning Centre",name:"Early Learning Centre",shop:"toys"}},"shop/toys|Hawkin's Bazaar":{countryCodes:["gb"],tags:{brand:"Hawkin's Bazaar","brand:wikidata":"Q16983539",name:"Hawkin's Bazaar",shop:"toys"}},"shop/toys|Intertoys":{countryCodes:["be","de","nl"],tags:{brand:"Intertoys","brand:wikidata":"Q1891407","brand:wikipedia":"nl:Intertoys",name:"Intertoys",shop:"toys"}},"shop/toys|JouéClub":{countryCodes:["ad","fr","it","lb","ma","qa"],tags:{brand:"JouéClub","brand:wikidata":"Q3187152","brand:wikipedia":"fr:JouéClub",name:"JouéClub",shop:"toys"}},"shop/toys|Juguettos":{tags:{brand:"Juguettos",name:"Juguettos",shop:"toys"}},"shop/toys|King Jouet":{countryCodes:["fr"],tags:{brand:"King Jouet","brand:en":"King Toy","brand:wikidata":"Q3197009","brand:wikipedia":"fr:King Jouet",name:"King Jouet","name:en":"King Toy",shop:"toys"}},"shop/toys|La Grande Récré":{countryCodes:["be","ci","es","fr","ma"],tags:{brand:"La Grande Récré","brand:wikidata":"Q3209556","brand:wikipedia":"fr:La Grande Récré (magasin)",name:"La Grande Récré",shop:"toys"}},"shop/toys|Lego":{matchNames:["lego store"],tags:{brand:"Lego","brand:wikidata":"Q1063455","brand:wikipedia":"en:The Lego Group",name:"Lego",shop:"toys"}},"shop/toys|Lekia":{countryCodes:["no","se"],tags:{brand:"Lekia","brand:wikidata":"Q56303274","brand:wikipedia":"sv:Lekia",name:"Lekia",shop:"toys"}},"shop/toys|Maxi Toys":{countryCodes:["be","de","fr","it"],tags:{brand:"Maxi Toys","brand:wikidata":"Q16663879","brand:wikipedia":"fr:Maxi Toys",name:"Maxi Toys",shop:"toys"}},"shop/toys|Menkind":{countryCodes:["gb"],tags:{brand:"Menkind","brand:wikidata":"Q66725844",name:"Menkind",shop:"toys"}},"shop/toys|Ri Happy Brinquedos":{countryCodes:["pt"],tags:{brand:"Ri Happy Brinquedos","brand:wikidata":"Q10360441","brand:wikipedia":"pt:Ri Happy Brinquedos",name:"Ri Happy Brinquedos",shop:"toys"}},"shop/toys|Smyths":{countryCodes:["at","ch","de","gb","ie"],tags:{brand:"Smyths","brand:wikidata":"Q7546779","brand:wikipedia":"en:Smyths",name:"Smyths",shop:"toys"}},"shop/toys|The Entertainer":{countryCodes:["gb","je"],tags:{brand:"The Entertainer","brand:wikidata":"Q7732289","brand:wikipedia":"en:The Entertainer (retailer)",name:"The Entertainer",shop:"toys"}},"shop/toys|Toys Center":{countryCodes:["it"],tags:{brand:"Toys Center",name:"Toys Center",shop:"toys"}},"shop/toys|Toys R Us":{tags:{brand:"Toys R Us","brand:wikidata":"Q696334","brand:wikipedia":"en:Toys \"R\" Us",name:"Toys R Us",shop:"toys"}},"shop/toys|Бегемотик":{countryCodes:["ru"],tags:{brand:"Бегемотик",name:"Бегемотик",shop:"toys"}},"shop/toys|Детский мир":{countryCodes:["kz","ru"],tags:{brand:"Детский мир","brand:en":"Detskiy Mir","brand:wikidata":"Q16643324","brand:wikipedia":"en:Detsky Mir",name:"Детский мир","name:en":"Detskiy Mir",shop:"toys"}},"shop/toys|Кораблик":{countryCodes:["ru"],tags:{brand:"Кораблик","brand:wikidata":"Q57653416",name:"Кораблик",shop:"toys"}},"shop/trade|84 Lumber":{countryCodes:["us"],matchNames:["84","eighty-four lumber"],tags:{brand:"84 Lumber","brand:wikidata":"Q4644779","brand:wikipedia":"en:84 Lumber",name:"84 Lumber",shop:"trade",trade:"building_supplies"}},"shop/trade|Caterpillar":{matchTags:["shop/car","shop/farm","shop/hardware","shop/tractor"],tags:{brand:"Caterpillar","brand:wikidata":"Q459965","brand:wikipedia":"en:Caterpillar Inc.",name:"Caterpillar",shop:"trade",short_name:"CAT",trade:"agricultural_equipment"}},"shop/trade|Fastenal":{countryCodes:["ca","pa","us"],tags:{brand:"Fastenal","brand:wikidata":"Q3067119","brand:wikipedia":"en:Fastenal",name:"Fastenal",shop:"trade"}},"shop/trade|Grainger":{countryCodes:["ca","us"],matchNames:["granger","w. w. grainger"],tags:{brand:"Grainger","brand:wikidata":"Q1627894","brand:wikipedia":"en:W. W. Grainger",name:"Grainger",shop:"trade"}},"shop/trade|John Deere":{countryCodes:["ca","us"],matchTags:["shop/car","shop/farm","shop/hardware","shop/tractor"],tags:{brand:"John Deere","brand:wikidata":"Q496302","brand:wikipedia":"en:John Deere",name:"John Deere",shop:"trade",trade:"agricultural_equipment"}},"shop/travel_agency|Alltours":{countryCodes:["de"],tags:{brand:"Alltours","brand:wikidata":"Q2649481","brand:wikipedia":"de:Alltours",name:"Alltours",shop:"travel_agency"}},"shop/travel_agency|American Automobile Association":{countryCodes:["us"],matchTags:["office/travel_agent","shop/car"],nomatch:["office/insurance|AAA Insurance"],tags:{brand:"American Automobile Association","brand:wikidata":"Q463436","brand:wikipedia":"en:American Automobile Association",name:"American Automobile Association",shop:"travel_agency",short_name:"AAA"}},"shop/travel_agency|Coral Travel":{countryCodes:["pl","ru","ua"],tags:{brand:"Coral Travel","brand:wikidata":"Q58011479",name:"Coral Travel",shop:"travel_agency"}},"shop/travel_agency|D-reizen":{countryCodes:["nl"],tags:{brand:"D-reizen","brand:wikidata":"Q2445498","brand:wikipedia":"nl:D-reizen",name:"D-reizen",shop:"travel_agency"}},"shop/travel_agency|DER Reisebüro":{countryCodes:["de"],matchNames:["der deutsches reisebüro"],tags:{brand:"DER Reisebüro","brand:wikidata":"Q56729186","brand:wikipedia":"de:Deutsches Reisebüro",name:"DER Reisebüro",shop:"travel_agency"}},"shop/travel_agency|Expedia CruiseShipCenters":{countryCodes:["ca","us"],tags:{brand:"Expedia CruiseShipCenters","brand:wikidata":"Q5189985","brand:wikipedia":"en:Expedia CruiseShipCenters",name:"Expedia CruiseShipCenters",shop:"travel_agency"}},"shop/travel_agency|First Reisebüro":{countryCodes:["de"],tags:{brand:"First Reisebüro","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI AG",name:"First Reisebüro",shop:"travel_agency"}},"shop/travel_agency|Flight Centre":{tags:{brand:"Flight Centre","brand:wikidata":"Q5459202","brand:wikipedia":"en:Flight Centre",name:"Flight Centre",shop:"travel_agency"}},"shop/travel_agency|Halcón Viajes":{countryCodes:["es"],tags:{brand:"Halcón Viajes","brand:wikidata":"Q57591939",name:"Halcón Viajes",shop:"travel_agency"}},"shop/travel_agency|Havas Voyages":{countryCodes:["fr"],tags:{brand:"Havas Voyages","brand:wikidata":"Q57628091",name:"Havas Voyages",shop:"travel_agency"}},"shop/travel_agency|Hays Travel":{countryCodes:["gb"],tags:{brand:"Hays Travel","brand:wikidata":"Q70250954","brand:wikipedia":"en:Hays Travel",name:"Hays Travel",shop:"travel_agency"}},"shop/travel_agency|JTB":{countryCodes:["jp"],tags:{brand:"JTB","brand:wikidata":"Q6109053","brand:wikipedia":"ja:JTB",name:"JTB",official_name:"日本交通公社","official_name:en":"Japan Travel Bureau",shop:"travel_agency"}},"shop/travel_agency|Kuoni":{tags:{brand:"Kuoni","brand:wikidata":"Q684355","brand:wikipedia":"en:Kuoni Travel",name:"Kuoni",shop:"travel_agency"}},"shop/travel_agency|Last Minute Tour":{countryCodes:["it"],tags:{brand:"Last Minute Tour",name:"Last Minute Tour",shop:"travel_agency"}},"shop/travel_agency|Liberty Travel":{countryCodes:["us"],tags:{brand:"Liberty Travel","brand:wikidata":"Q17031665","brand:wikipedia":"en:Liberty Travel",name:"Liberty Travel",shop:"travel_agency"}},"shop/travel_agency|Neckermann Reisen":{countryCodes:["de"],tags:{brand:"Neckermann Reisen","brand:wikidata":"Q17300280",name:"Neckermann Reisen",shop:"travel_agency"}},"shop/travel_agency|Reiseland":{countryCodes:["de"],tags:{brand:"Reiseland","brand:wikidata":"Q40387610","brand:wikipedia":"de:OTTO Reisen",name:"Reiseland",shop:"travel_agency"}},"shop/travel_agency|Selectour":{countryCodes:["fr"],tags:{brand:"Selectour","brand:wikidata":"Q3478073","brand:wikipedia":"fr:Selectour",name:"Selectour",shop:"travel_agency"}},"shop/travel_agency|TUI~(Group)":{matchNames:["tui reisecenter"],tags:{brand:"TUI","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI AG",name:"TUI",shop:"travel_agency"}},"shop/travel_agency|TUI~(UK)":{countryCodes:["gb"],matchNames:["thomson"],tags:{brand:"TUI","brand:wikidata":"Q7795876","brand:wikipedia":"en:TUI UK",name:"TUI",shop:"travel_agency"}},"shop/travel_agency|The Co-operative Travel":{countryCodes:["gb"],tags:{brand:"The Co-operative Travel","brand:wikidata":"Q7726526","brand:wikipedia":"en:The Co-operative Travel",name:"The Co-operative Travel",shop:"travel_agency"}},"shop/travel_agency|Thomas Cook":{tags:{brand:"Thomas Cook","brand:wikidata":"Q2141800","brand:wikipedia":"en:Thomas Cook Group",name:"Thomas Cook",shop:"travel_agency"}},"shop/travel_agency|Turkish Airlines":{tags:{brand:"Turkish Airlines","brand:wikidata":"Q4548","brand:wikipedia":"en:Turkish Airlines",name:"Turkish Airlines",shop:"travel_agency"}},"shop/travel_agency|ltur":{countryCodes:["de"],tags:{brand:"ltur","brand:wikidata":"Q519040","brand:wikipedia":"de:L’TUR",name:"ltur",shop:"travel_agency"}},"shop/travel_agency|Поехали с нами":{countryCodes:["ua"],tags:{brand:"Поехали с нами","brand:wikidata":"Q25439141","brand:wikipedia":"uk:Поїхали з нами",name:"Поехали с нами",shop:"travel_agency"}},"shop/travel_agency|エイチ・アイ・エス":{countryCodes:["jp"],tags:{"alt_name:en":"HIS",brand:"エイチ・アイ・エス","brand:en":"H.I.S.","brand:ja":"エイチ・アイ・エス","brand:wikidata":"Q1452225","brand:wikipedia":"ja:エイチ・アイ・エス",name:"エイチ・アイ・エス","name:en":"H.I.S.","name:ja":"エイチ・アイ・エス",shop:"travel_agency"}},"shop/travel_agency|近畿日本ツーリスト":{countryCodes:["jp"],tags:{brand:"近畿日本ツーリスト","brand:en":"KNT","brand:ja":"近畿日本ツーリスト","brand:wikidata":"Q11638632","brand:wikipedia":"ja:近畿日本ツーリスト",name:"近畿日本ツーリスト","name:en":"KNT","name:ja":"近畿日本ツーリスト","official_name:en":"Kinki Nippon Tourist",shop:"travel_agency"}},"shop/tyres|Big O Tires":{countryCodes:["ca","us"],tags:{brand:"Big O Tires","brand:wikidata":"Q4906085","brand:wikipedia":"en:Big O Tires",name:"Big O Tires",shop:"tyres"}},"shop/tyres|Bridgestone":{tags:{brand:"Bridgestone","brand:wikidata":"Q179433","brand:wikipedia":"en:Bridgestone",name:"Bridgestone",shop:"tyres"}},"shop/tyres|Discount Tire":{countryCodes:["us"],tags:{brand:"Discount Tire","brand:wikidata":"Q5281735","brand:wikipedia":"en:Discount Tire",name:"Discount Tire",shop:"tyres"}},"shop/tyres|Express Oil Change & Tire Engineers":{countryCodes:["us"],tags:{brand:"Express Oil Change & Tire Engineers","brand:wikidata":"Q39057654","brand:wikipedia":"en:Express Oil Change & Tire Engineers",name:"Express Oil Change & Tire Engineers",shop:"tyres"}},"shop/tyres|Les Schwab Tire Center":{countryCodes:["us"],matchNames:["les schwab"],tags:{brand:"Les Schwab Tire Center","brand:wikidata":"Q6529977","brand:wikipedia":"en:Les Schwab Tire Centers",name:"Les Schwab Tire Center",shop:"tyres"}},"shop/tyres|Michelin":{tags:{brand:"Michelin","brand:wikidata":"Q151107","brand:wikipedia":"en:Michelin",name:"Michelin",shop:"tyres"}},"shop/tyres|Pneuhage":{countryCodes:["de"],tags:{brand:"Pneuhage","brand:wikidata":"Q2099972","brand:wikipedia":"de:Pneuhage",name:"Pneuhage",shop:"tyres"}},"shop/tyres|Tire Discounters":{countryCodes:["us"],tags:{brand:"Tire Discounters","brand:wikidata":"Q29093639","brand:wikipedia":"en:Tire Discounters",name:"Tire Discounters",shop:"tyres"}},"shop/tyres|Tires Plus":{countryCodes:["us"],tags:{brand:"Tires Plus","brand:wikidata":"Q64015091",name:"Tires Plus",shop:"tyres"}},"shop/tyres|Vianor":{tags:{brand:"Vianor","brand:wikidata":"Q10714920","brand:wikipedia":"sv:Vianor",name:"Vianor",shop:"tyres"}},"shop/vacuum_cleaner|Oreck":{countryCodes:["us"],matchNames:["oreck vacuums"],tags:{brand:"Oreck","brand:wikidata":"Q57273844",name:"Oreck",shop:"vacuum_cleaner"}},"shop/variety_store|99 Cents Only Stores":{countryCodes:["us"],matchNames:["99 cent only stores","99 cents only"],tags:{brand:"99 Cents Only Stores","brand:wikidata":"Q4646294","brand:wikipedia":"en:99 Cents Only Stores",name:"99 Cents Only Stores",shop:"variety_store"}},"shop/variety_store|Action":{countryCodes:["at","be","de","fr","lu","nl","pl"],tags:{brand:"Action","brand:wikidata":"Q2634111","brand:wikipedia":"nl:Action (winkel)",name:"Action",shop:"variety_store"}},"shop/variety_store|B&M":{tags:{brand:"B&M",name:"B&M",shop:"variety_store"}},"shop/variety_store|B&M Bargains":{countryCodes:["gb"],tags:{brand:"B&M Bargains","brand:wikidata":"Q4836931","brand:wikipedia":"en:B & M",name:"B&M Bargains",shop:"variety_store"}},"shop/variety_store|Big Bazar":{countryCodes:["be","nl"],tags:{brand:"Big Bazar","brand:wikidata":"Q15873104","brand:wikipedia":"nl:Big Bazar",name:"Big Bazar",shop:"variety_store"}},"shop/variety_store|D9150":{tags:{brand:"D9150",name:"D9150",shop:"variety_store"}},"shop/variety_store|D9300":{tags:{brand:"D9300",name:"D9300",shop:"variety_store"}},"shop/variety_store|Daiso Japan":{countryCodes:["au","us"],tags:{brand:"Daiso","brand:wikidata":"Q866991","brand:wikipedia":"en:Daiso",name:"Daiso Japan",shop:"variety_store",short_name:"Daiso"}},"shop/variety_store|Dealz":{tags:{brand:"Dealz","brand:wikidata":"Q16942585","brand:wikipedia":"en:Dealz",name:"Dealz",shop:"variety_store"}},"shop/variety_store|Dollar General":{countryCodes:["us"],nomatch:["amenity/bank|Dollar Bank","amenity/car_rental|Dollar","shop/supermarket|Dollar General Market","shop/variety_store|Dollar Tree","shop/variety_store|Dollarama","shop/variety_store|Family Dollar"],tags:{brand:"Dollar General","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General",shop:"variety_store"}},"shop/variety_store|Dollar Tree":{countryCodes:["ca","us"],nomatch:["amenity/bank|Dollar Bank","amenity/car_rental|Dollar","shop/variety_store|Dollar General","shop/variety_store|Dollarama","shop/variety_store|Family Dollar"],tags:{brand:"Dollar Tree","brand:wikidata":"Q5289230","brand:wikipedia":"en:Dollar Tree",name:"Dollar Tree",shop:"variety_store"}},"shop/variety_store|Dollarama":{countryCodes:["ca"],nomatch:["amenity/bank|Dollar Bank","amenity/car_rental|Dollar","shop/variety_store|Dollar General","shop/variety_store|Dollar Tree","shop/variety_store|Family Dollar"],tags:{brand:"Dollarama","brand:wikidata":"Q3033947","brand:wikipedia":"en:Dollarama",name:"Dollarama",shop:"variety_store"}},"shop/variety_store|EuroShop":{countryCodes:["de"],tags:{brand:"EuroShop","brand:wikidata":"Q15846763","brand:wikipedia":"de:Schum EuroShop",name:"EuroShop",shop:"variety_store"}},"shop/variety_store|Family Dollar":{countryCodes:["us"],nomatch:["amenity/bank|Dollar Bank","amenity/car_rental|Dollar","shop/variety_store|Dollar General","shop/variety_store|Dollar Tree","shop/variety_store|Dollarama"],tags:{brand:"Family Dollar","brand:wikidata":"Q5433101","brand:wikipedia":"en:Family Dollar",name:"Family Dollar",shop:"variety_store"}},"shop/variety_store|Five Below":{countryCodes:["us"],tags:{brand:"Five Below","brand:wikidata":"Q5455836","brand:wikipedia":"en:Five Below",name:"Five Below",shop:"variety_store"}},"shop/variety_store|Fix Price":{countryCodes:["by","ru"],tags:{brand:"Fix Price","brand:wikidata":"Q4038791","brand:wikipedia":"ru:Fix Price (сеть магазинов)",name:"Fix Price",shop:"variety_store"}},"shop/variety_store|Flying Tiger Copenhagen":{matchNames:["tgr","tiger"],matchTags:["shop/gift"],tags:{brand:"Flying Tiger Copenhagen","brand:wikidata":"Q2786319","brand:wikipedia":"en:Flying Tiger Copenhagen",name:"Flying Tiger Copenhagen",shop:"variety_store",short_name:"Flying Tiger"}},"shop/variety_store|GiFi":{countryCodes:["fr"],tags:{brand:"GiFi","brand:wikidata":"Q3105439","brand:wikipedia":"fr:Gifi",name:"GiFi",shop:"variety_store"}},"shop/variety_store|Home Bargains":{countryCodes:["gb"],tags:{brand:"Home Bargains","brand:wikidata":"Q5888229","brand:wikipedia":"en:Home Bargains",name:"Home Bargains",shop:"variety_store"}},"shop/variety_store|La Foir'Fouille":{countryCodes:["be","fr","lu","mu","nc"],tags:{brand:"La Foir'Fouille","brand:wikidata":"Q3209040","brand:wikipedia":"fr:La Foir'Fouille",name:"La Foir'Fouille",shop:"variety_store"}},"shop/variety_store|M9":{tags:{brand:"M9",name:"M9",shop:"variety_store"}},"shop/variety_store|Miniso":{tags:{brand:"Miniso","brand:wikidata":"Q20732498","brand:wikipedia":"en:Miniso",name:"Miniso",shop:"variety_store"}},"shop/variety_store|Mäc-Geiz":{countryCodes:["de"],tags:{brand:"Mäc-Geiz","brand:wikidata":"Q1957126","brand:wikipedia":"de:Mäc-Geiz",name:"Mäc-Geiz",shop:"variety_store"}},"shop/variety_store|NOZ":{countryCodes:["fr"],tags:{brand:"NOZ","brand:wikidata":"Q3345688","brand:wikipedia":"fr:Noz",name:"NOZ",shop:"variety_store"}},"shop/variety_store|Ocean State Job Lot":{countryCodes:["us"],tags:{brand:"Ocean State Job Lot","brand:wikidata":"Q7076076","brand:wikipedia":"en:Ocean State Job Lot",name:"Ocean State Job Lot",shop:"variety_store",short_name:"Job Lot"}},"shop/variety_store|Ollie's Bargain Outlet":{countryCodes:["us"],tags:{brand:"Ollie's Bargain Outlet","brand:wikidata":"Q7088304","brand:wikipedia":"en:Ollie's Bargain Outlet",name:"Ollie's Bargain Outlet",shop:"variety_store",short_name:"Ollie's"}},"shop/variety_store|Poundland":{countryCodes:["gb"],tags:{brand:"Poundland","brand:wikidata":"Q1434528","brand:wikipedia":"en:Poundland",name:"Poundland",shop:"variety_store"}},"shop/variety_store|Poundstretcher":{countryCodes:["gb"],tags:{brand:"Poundstretcher","brand:wikidata":"Q7235675","brand:wikipedia":"en:Poundstretcher",name:"Poundstretcher",shop:"variety_store"}},"shop/variety_store|Poundworld":{countryCodes:["gb","ie"],tags:{brand:"Poundworld","brand:wikidata":"Q16967516","brand:wikipedia":"en:Poundworld",name:"Poundworld",shop:"variety_store"}},"shop/variety_store|Roses":{countryCodes:["us"],tags:{brand:"Roses","brand:wikidata":"Q7368644","brand:wikipedia":"en:Roses (store)",name:"Roses",shop:"variety_store"}},"shop/variety_store|TEDi":{countryCodes:["at","de","es","hr","si","sk"],tags:{brand:"TEDi","brand:wikidata":"Q1364603","brand:wikipedia":"de:TEDi",name:"TEDi",shop:"variety_store"}},"shop/variety_store|Tokmanni":{countryCodes:["fi"],tags:{brand:"Tokmanni","brand:wikidata":"Q13423470","brand:wikipedia":"fi:Tokmanni",name:"Tokmanni",shop:"variety_store"}},"shop/variety_store|Wilko":{countryCodes:["gb"],tags:{brand:"Wilko","brand:wikidata":"Q8002536","brand:wikipedia":"en:Wilko (retailer)",name:"Wilko",shop:"variety_store"}},"shop/variety_store|キャンドゥ":{countryCodes:["jp"],tags:{brand:"キャンドゥ","brand:en":"CAN DO","brand:ja":"キャンドゥ","brand:wikidata":"Q11297367","brand:wikipedia":"ja:キャンドゥ",name:"キャンドゥ","name:en":"CAN DO","name:ja":"キャンドゥ",shop:"variety_store"}},"shop/variety_store|セリア":{countryCodes:["jp"],tags:{brand:"セリア","brand:en":"Seria","brand:ja":"セリア","brand:wikidata":"Q11314509","brand:wikipedia":"ja:セリア (100円ショップ)",name:"セリア","name:en":"Seria","name:ja":"セリア",shop:"variety_store"}},"shop/variety_store|ダイソー":{countryCodes:["jp"],matchNames:["ザ・ダイソー"],tags:{brand:"ダイソー","brand:en":"Daiso","brand:ja":"ダイソー","brand:wikidata":"Q866991","brand:wikipedia":"ja:大創産業",name:"ダイソー","name:en":"Daiso","name:ja":"ダイソー",shop:"variety_store"}},"shop/variety_store|ダイレックス":{countryCodes:["jp"],tags:{brand:"ダイレックス","brand:en":"Direx","brand:ja":"ダイレックス","brand:wikidata":"Q11317051","brand:wikipedia":"ja:ダイレックス (ディスカウントストア)",name:"ダイレックス","name:en":"Direx","name:ja":"ダイレックス",shop:"variety_store"}},"shop/variety_store|トライアル":{countryCodes:["jp"],tags:{brand:"トライアル","brand:en":"Trial","brand:ja":"トライアル","brand:wikidata":"Q11321723","brand:wikipedia":"ja:トライアルカンパニー",name:"トライアル","name:en":"Trial","name:ja":"トライアル",shop:"variety_store"}},"shop/variety_store|ドン・キホーテ":{countryCodes:["jp"],tags:{brand:"ドン・キホーテ","brand:en":"Don Quijote","brand:ja":"ドン・キホーテ","brand:wikidata":"Q1185381","brand:wikipedia":"ja:ドン・キホーテ (企業)",name:"ドン・キホーテ","name:en":"Don Quijote","name:ja":"ドン・キホーテ",opening_hours:"24/7",shop:"variety_store",short_name:"ドンキ","short_name:en":"Donki","short_name:ja":"ドンキ"}},"shop/video_games|EB Games":{countryCodes:["au","ca","nz"],tags:{brand:"EB Games","brand:wikidata":"Q4993686","brand:wikipedia":"en:EB Games",name:"EB Games",shop:"video_games"}},"shop/video_games|Game":{countryCodes:["es","gb"],tags:{brand:"Game","brand:wikidata":"Q5519813","brand:wikipedia":"en:Game (retailer)",name:"Game",shop:"video_games"}},"shop/video_games|Game Mania":{countryCodes:["be","nl"],tags:{brand:"Game Mania","brand:wikidata":"Q18069429","brand:wikipedia":"nl:Game Mania",name:"Game Mania",shop:"video_games"}},"shop/video_games|GameStop":{tags:{brand:"GameStop","brand:wikidata":"Q202210","brand:wikipedia":"en:GameStop",name:"GameStop",shop:"video_games"}},"shop/video_games|Micromania":{countryCodes:["fr"],tags:{brand:"Micromania","brand:wikidata":"Q3312221","brand:wikipedia":"en:Micromania (video game retailer)",name:"Micromania",shop:"video_games"}},"shop/video|Blockbuster":{tags:{brand:"Blockbuster","brand:wikidata":"Q884711","brand:wikipedia":"en:Blockbuster LLC",name:"Blockbuster",shop:"video"}},"shop/video|Family Video":{countryCodes:["us"],tags:{brand:"Family Video","brand:wikidata":"Q5433297","brand:wikipedia":"en:Family Video",name:"Family Video",shop:"video"}},"shop/video|TSUTAYA":{nomatch:["shop/books|TSUTAYA","shop/music|TSUTAYA"],tags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"video"}},"shop/video|ゲオ":{countryCodes:["jp"],matchNames:["geo"],tags:{brand:"GEO","brand:ja":"GEO","brand:wikidata":"Q5533938","brand:wikipedia":"ja:ゲオ",name:"ゲオ","name:en":"GEO","name:ja":"ゲオ",shop:"video"}},"shop/watches|Fossil":{countryCodes:["ca","de","us"],matchTags:["shop/jewelry"],tags:{brand:"Fossil","brand:wikidata":"Q356212","brand:wikipedia":"en:Fossil Group",name:"Fossil",shop:"watches"}},"shop/watches|Omega":{countryCodes:["ch","fr"],tags:{brand:"Omega","brand:wikidata":"Q659224","brand:wikipedia":"en:Omega SA",name:"Omega",shop:"watches"}},"shop/watches|Rolex":{countryCodes:["us"],tags:{brand:"Rolex","brand:wikidata":"Q62288","brand:wikipedia":"en:Rolex",name:"Rolex",shop:"watches"}},"shop/watches|Swatch":{matchTags:["shop/jewelry"],tags:{brand:"Swatch","brand:wikidata":"Q573422","brand:wikipedia":"en:Swatch",name:"Swatch",shop:"watches"}},"shop/wholesale|BJ's Wholesale Club":{countryCodes:["us"],matchNames:["bjs","bjs wholesale"],tags:{brand:"BJ's Wholesale Club","brand:wikidata":"Q4835754","brand:wikipedia":"en:BJ's Wholesale Club",name:"BJ's Wholesale Club",shop:"wholesale"}},"shop/wholesale|Costco":{matchNames:["costco wholesale"],nomatch:["amenity/fuel|Costco Gasoline","amenity/pharmacy|Costco Pharmacy"],tags:{brand:"Costco","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco",shop:"wholesale"}},"shop/wholesale|Makro":{tags:{brand:"Makro","brand:wikidata":"Q704606","brand:wikipedia":"en:Makro",name:"Makro",shop:"wholesale"}},"shop/wholesale|Metro":{nomatch:["amenity/bank|Metro Bank~(UK)","amenity/bank|Metrobank~(Philippines)","shop/mobile_phone|MetroPCS","shop/supermarket|Metro~(Ontario)","shop/supermarket|Metro~(Peru)","shop/supermarket|Metro~(Quebec)"],tags:{brand:"Metro","brand:wikidata":"Q13610282","brand:wikipedia":"en:Metro Cash & Carry",name:"Metro",shop:"wholesale"}},"shop/wholesale|Sam's Club":{nomatch:["amenity/fuel|Sam's Club"],tags:{brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club",shop:"wholesale"}},"shop/wholesale|Sligro":{tags:{brand:"Sligro","brand:wikidata":"Q3170052","brand:wikipedia":"nl:Sligro Food Group",name:"Sligro",shop:"wholesale"}},"shop/wholesale|コストコ":{countryCodes:["jp"],tags:{brand:"コストコ","brand:en":"Costco","brand:ja":"コストコ","brand:wikidata":"Q715583","brand:wikipedia":"ja:コストコ",name:"コストコ","name:en":"Costco","name:ja":"コストコ",shop:"wholesale"}},"tourism/caravan_site|Big 4 Holiday Parks":{countryCodes:["au","nz"],tags:{brand:"Big 4 Holiday Parks","brand:wikidata":"Q18636678","brand:wikipedia":"en:BIG4 Holiday Parks",name:"BIG4 Holiday Parks",short_name:"Big4",tourism:"caravan_site"}},"tourism/caravan_site|KOA Holiday":{countryCodes:["ca","us"],tags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",name:"KOA Holiday",short_name:"KOA",tourism:"caravan_site"}},"tourism/caravan_site|KOA Journey":{countryCodes:["ca","us"],tags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",name:"KOA Journey",short_name:"KOA",tourism:"caravan_site"}},"tourism/caravan_site|KOA Kampground":{countryCodes:["ca","us"],matchNames:["kampgrounds of america","koa"],tags:{alt_name:"KOA Campground",brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",name:"KOA Kampground",short_name:"KOA",tourism:"caravan_site"}},"tourism/caravan_site|KOA Resort":{countryCodes:["ca","us"],tags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",name:"KOA Resort",short_name:"KOA",tourism:"caravan_site"}},"tourism/hotel|AC Hotel":{tags:{brand:"AC Hotel","brand:wikidata":"Q5653536","brand:wikipedia":"en:AC Hotels",name:"AC Hotel",tourism:"hotel"}},"tourism/hotel|Aloft":{tags:{brand:"Aloft","brand:wikidata":"Q4734166","brand:wikipedia":"en:Aloft Hotels",name:"Aloft",tourism:"hotel"}},"tourism/hotel|AmericInn":{countryCodes:["us"],tags:{brand:"AmericInn","brand:wikidata":"Q4742493","brand:wikipedia":"en:AmericInn",name:"AmericInn",official_name:"AmericInn by Wyndham",tourism:"hotel"}},"tourism/hotel|B&B Hôtel":{countryCodes:["fr"],tags:{brand:"B&B Hôtel","brand:wikidata":"Q794939","brand:wikipedia":"en:B&B Hotels",name:"B&B Hôtel",tourism:"hotel"}},"tourism/hotel|Baymont":{countryCodes:["ca","mx","us"],matchNames:["baymont inn","baymont inn & suites"],tags:{brand:"Baymont","brand:wikidata":"Q4874634","brand:wikipedia":"en:Baymont Inn & Suites",name:"Baymont",official_name:"Baymont by Wyndham",tourism:"hotel"}},"tourism/hotel|Best Western":{nomatch:["tourism/hotel|Best Western Plus","tourism/hotel|Best Western Premier"],tags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western",tourism:"hotel"}},"tourism/hotel|Best Western Plus":{nomatch:["tourism/hotel|Best Western","tourism/hotel|Best Western Premier"],tags:{brand:"Best Western Plus","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western Plus",tourism:"hotel"}},"tourism/hotel|Best Western Premier":{nomatch:["tourism/hotel|Best Western","tourism/hotel|Best Western Plus"],tags:{brand:"Best Western Premier","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western Premier",tourism:"hotel"}},"tourism/hotel|Campanile":{nomatch:["amenity/restaurant|Campanile"],tags:{brand:"Campanile","brand:wikidata":"Q2412064","brand:wikipedia":"fr:Campanile (chaîne d'hôtels)",name:"Campanile",tourism:"hotel"}},"tourism/hotel|Candlewood Suites":{countryCodes:["us"],tags:{brand:"Candlewood Suites","brand:wikidata":"Q5032010","brand:wikipedia":"en:Candlewood Suites",name:"Candlewood Suites",tourism:"hotel"}},"tourism/hotel|Centro Hotels":{countryCodes:["de"],tags:{brand:"Centro Hotels","brand:wikidata":"Q73645443",name:"Centro Hotel",tourism:"hotel"}},"tourism/hotel|Clarion":{countryCodes:["us"],tags:{brand:"Clarion","brand:wikidata":"Q78165540",name:"Clarion",tourism:"hotel"}},"tourism/hotel|Comfort Inn":{countryCodes:["ca","gb","us"],nomatch:["tourism/hotel|Comfort Suites"],tags:{brand:"Comfort Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn",tourism:"hotel"}},"tourism/hotel|Comfort Inn & Suites":{countryCodes:["ca","us"],tags:{brand:"Comfort Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn & Suites",tourism:"hotel"}},"tourism/hotel|Comfort Suites":{nomatch:["tourism/hotel|Comfort Inn"],tags:{brand:"Comfort Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Suites",tourism:"hotel"}},"tourism/hotel|Country Inn & Suites":{countryCodes:["ca","us"],tags:{brand:"Country Inn & Suites","brand:wikidata":"Q5177332","brand:wikipedia":"en:Country Inns & Suites",name:"Country Inn & Suites",tourism:"hotel"}},"tourism/hotel|Courtyard":{matchNames:["courtyard marriott"],tags:{brand:"Courtyard","brand:wikidata":"Q1053170","brand:wikipedia":"en:Courtyard by Marriott",name:"Courtyard",official_name:"Courtyard by Marriott",tourism:"hotel"}},"tourism/hotel|Crowne Plaza":{tags:{brand:"Crowne Plaza","brand:wikidata":"Q2746220","brand:wikipedia":"en:Crowne Plaza",name:"Crowne Plaza",tourism:"hotel"}},"tourism/hotel|Days Inn":{countryCodes:["ca","ch","gb","id","in","kr","mx","my","ph","sg","sn","th","us"],tags:{brand:"Days Inn","brand:wikidata":"Q1047239","brand:wikipedia":"en:Days Inn",name:"Days Inn",tourism:"hotel"}},"tourism/hotel|Delta Hotels":{matchNames:["delta"],tags:{brand:"Delta Hotels","brand:wikidata":"Q5254663","brand:wikipedia":"en:Delta Hotels",name:"Delta Hotels",tourism:"hotel"}},"tourism/hotel|DoubleTree":{tags:{brand:"DoubleTree","brand:wikidata":"Q2504643","brand:wikipedia":"en:DoubleTree",name:"DoubleTree",official_name:"DoubleTree by Hilton",tourism:"hotel"}},"tourism/hotel|Drury Inn & Suites":{countryCodes:["us"],tags:{brand:"Drury Inn & Suites","brand:wikidata":"Q5309391","brand:wikipedia":"en:Drury Hotels",name:"Drury Inn & Suites",tourism:"hotel"}},"tourism/hotel|EVEN Hotels":{countryCodes:["us"],tags:{brand:"EVEN Hotels","brand:wikidata":"Q5416522","brand:wikipedia":"en:Even Hotels",name:"EVEN Hotels",tourism:"hotel"}},"tourism/hotel|Embassy Suites":{countryCodes:["us"],tags:{brand:"Embassy Suites","brand:wikidata":"Q5369524","brand:wikipedia":"en:Embassy Suites by Hilton",name:"Embassy Suites",official_name:"Embassy Suites by Hilton",tourism:"hotel"}},"tourism/hotel|Extended Stay America":{countryCodes:["us"],tags:{brand:"Extended Stay America","brand:wikidata":"Q5421850","brand:wikipedia":"en:Extended Stay America",name:"Extended Stay America",tourism:"hotel"}},"tourism/hotel|Fairfield Inn":{countryCodes:["ca","cn","id","in","kr","mx","my","sv","us"],nomatch:["tourism/hotel|Fairfield Inn & Suites"],tags:{alt_name:"Fairfield by Marriott",brand:"Fairfield Inn","brand:wikidata":"Q5430314","brand:wikipedia":"en:Fairfield Inn by Marriott",name:"Fairfield Inn",tourism:"hotel"}},"tourism/hotel|Fairfield Inn & Suites":{countryCodes:["ca","mx","us"],nomatch:["tourism/hotel|Fairfield Inn"],tags:{brand:"Fairfield Inn & Suites","brand:wikidata":"Q5430314","brand:wikipedia":"en:Fairfield Inn by Marriott",name:"Fairfield Inn & Suites",tourism:"hotel"}},"tourism/hotel|Formule 1":{countryCodes:["fr"],tags:{brand:"Formule 1","brand:wikidata":"Q1630895","brand:wikipedia":"en:Hotel Formule 1",name:"Formule 1",tourism:"hotel"}},"tourism/hotel|Four Points by Sheraton":{tags:{brand:"Four Points by Sheraton","brand:wikidata":"Q1439966","brand:wikipedia":"en:Four Points by Sheraton",name:"Four Points by Sheraton",short_name:"Four Points",tourism:"hotel"}},"tourism/hotel|Gaylord":{tags:{brand:"Gaylord","brand:wikidata":"Q3099664","brand:wikipedia":"en:Gaylord Hotels",name:"Gaylord",tourism:"hotel"}},"tourism/hotel|Grand Hyatt":{tags:{brand:"Grand Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Grand Hyatt",tourism:"hotel"}},"tourism/hotel|Grupo Barceló":{countryCodes:["es","us"],tags:{brand:"Grupo Barceló","brand:en":"Barceló Group","brand:es":"Grupo Barceló","brand:wikidata":"Q15148996","brand:wikipedia":"es:Grupo Barceló",name:"Grupo Barceló","name:en":"Barceló Group","name:es":"Grupo Barceló",tourism:"hotel"}},"tourism/hotel|Hampton":{tags:{alt_name:"Hampton Inn",brand:"Hampton","brand:wikidata":"Q5646230","brand:wikipedia":"en:Hampton by Hilton",name:"Hampton",official_name:"Hampton by Hilton",tourism:"hotel"}},"tourism/hotel|Hampton Inn & Suites":{countryCodes:["us"],nomatch:["tourism/hotel|Hampton","tourism/hotel|Hampton Inn"],tags:{brand:"Hampton Inn & Suites","brand:wikidata":"Q5646230","brand:wikipedia":"en:Hampton by Hilton",name:"Hampton Inn & Suites",official_name:"Hampton Inn & Suites by Hilton",tourism:"hotel"}},"tourism/hotel|Hawthorn Suites":{countryCodes:["us"],tags:{brand:"Hawthorn Suites","brand:wikidata":"Q5685511","brand:wikipedia":"en:Hawthorn Suites",name:"Hawthorn Suites",official_name:"Hawthorn Suites by Wyndham",short_name:"Hawthorn",tourism:"hotel"}},"tourism/hotel|Hilton":{tags:{brand:"Hilton","brand:wikidata":"Q598884","brand:wikipedia":"en:Hilton Hotels & Resorts",name:"Hilton",tourism:"hotel"}},"tourism/hotel|Hilton Garden Inn":{countryCodes:["ca","mx","us"],tags:{brand:"Hilton Garden Inn","brand:wikidata":"Q1162859","brand:wikipedia":"en:Hilton Garden Inn",name:"Hilton Garden Inn",tourism:"hotel"}},"tourism/hotel|Holiday Inn":{nomatch:["tourism/hotel|Holiday Inn Express"],tags:{brand:"Holiday Inn","brand:wikidata":"Q2717882","brand:wikipedia":"en:Holiday Inn",name:"Holiday Inn",tourism:"hotel"}},"tourism/hotel|Holiday Inn Express":{nomatch:["tourism/hotel|Holiday Inn"],tags:{brand:"Holiday Inn Express","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express",tourism:"hotel"}},"tourism/hotel|Holiday Inn Express & Suites":{tags:{brand:"Holiday Inn Express & Suites","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express & Suites",tourism:"hotel"}},"tourism/hotel|Home2 Suites":{countryCodes:["ca","mx","us"],matchNames:["home2"],tags:{brand:"Home2 Suites","brand:wikidata":"Q5887912","brand:wikipedia":"en:Home2 Suites by Hilton",name:"Home2 Suites",official_name:"Home2 Suites by Hilton",tourism:"hotel"}},"tourism/hotel|Homewood Suites":{countryCodes:["ca","us"],tags:{brand:"Homewood Suites","brand:wikidata":"Q5890701","brand:wikipedia":"en:Homewood Suites by Hilton",name:"Homewood Suites",official_name:"Homewood Suites by Hilton",tourism:"hotel"}},"tourism/hotel|Hotel Belvedere":{tags:{brand:"Hotel Belvedere",name:"Hotel Belvedere",tourism:"hotel"}},"tourism/hotel|Hotel Indigo":{countryCodes:["ca","us"],tags:{brand:"Hotel Indigo","brand:wikidata":"Q5911596","brand:wikipedia":"en:Hotel Indigo",name:"Hotel Indigo",tourism:"hotel"}},"tourism/hotel|Hyatt":{tags:{brand:"Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt",tourism:"hotel"}},"tourism/hotel|Hyatt Centric":{tags:{brand:"Hyatt Centric","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Centric",tourism:"hotel"}},"tourism/hotel|Hyatt House":{countryCodes:["us"],tags:{brand:"Hyatt House","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt House",tourism:"hotel"}},"tourism/hotel|Hyatt Place":{countryCodes:["us"],tags:{brand:"Hyatt Place","brand:wikidata":"Q72629292",name:"Hyatt Place",tourism:"hotel"}},"tourism/hotel|Hyatt Regency":{tags:{brand:"Hyatt Regency","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Regency",tourism:"hotel"}},"tourism/hotel|Ibis":{matchNames:["hotel ibis","ibis hotel"],tags:{brand:"Ibis","brand:wikidata":"Q920166","brand:wikipedia":"en:Ibis (hotel)",name:"Ibis",tourism:"hotel"}},"tourism/hotel|Ibis Budget":{tags:{brand:"Ibis Budget","brand:wikidata":"Q1458135","brand:wikipedia":"en:Ibis Budget",name:"Ibis Budget",tourism:"hotel"}},"tourism/hotel|Ibis Styles":{tags:{brand:"Ibis Styles","brand:wikidata":"Q3147425","brand:wikipedia":"en:Ibis Styles",name:"Ibis Styles",tourism:"hotel"}},"tourism/hotel|InterContinental":{matchNames:["intercontinental hotels & resorts"],tags:{brand:"InterContinental","brand:wikidata":"Q1825730","brand:wikipedia":"en:InterContinental",name:"InterContinental",tourism:"hotel"}},"tourism/hotel|Intercity Hotel":{countryCodes:["at","cn","de","nl","om","sa"],tags:{brand:"Intercity Hotel","brand:wikidata":"Q73642490",name:"Intercity Hotel",tourism:"hotel"}},"tourism/hotel|JW Marriott":{matchNames:["jw marriott hotels"],tags:{brand:"JW Marriott","brand:wikidata":"Q1067636","brand:wikipedia":"en:JW Marriott Hotels",name:"JW Marriott",tourism:"hotel"}},"tourism/hotel|Jurys Inn":{countryCodes:["cz","gb","ie"],tags:{brand:"Jurys Inn","brand:wikidata":"Q12060924","brand:wikipedia":"en:Jurys Inn",name:"Jurys Inn",tourism:"hotel"}},"tourism/hotel|Kimpton":{tags:{brand:"Kimpton","brand:wikidata":"Q6410248","brand:wikipedia":"en:Kimpton Hotels & Restaurants",name:"Kimpton",tourism:"hotel"}},"tourism/hotel|Kyriad":{countryCodes:["fr"],tags:{brand:"Kyriad","brand:wikidata":"Q11751808","brand:wikipedia":"pl:Kyriad",name:"Kyriad",tourism:"hotel"}},"tourism/hotel|La Quinta Inn":{countryCodes:["ca","cl","co","hn","mx","us"],matchNames:["la quinta"],nomatch:["tourism/hotel|La Quinta Inn & Suites"],tags:{brand:"La Quinta Inn","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta Inn",official_name:"La Quinta Inn by Wyndham",tourism:"hotel"}},"tourism/hotel|La Quinta Inn & Suites":{countryCodes:["ca","us"],matchNames:["la quinta inns and suites"],nomatch:["tourism/hotel|La Quinta Inn"],tags:{brand:"La Quinta Inn & Suites","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta Inn & Suites",official_name:"La Quinta Inn & Suites by Wyndham",tourism:"hotel"}},"tourism/hotel|Le Méridien":{tags:{brand:"Le Méridien","brand:wikidata":"Q261077","brand:wikipedia":"en:Le Méridien",name:"Le Méridien",tourism:"hotel"}},"tourism/hotel|Marriott":{tags:{brand:"Marriott","brand:wikidata":"Q1141173","brand:wikipedia":"en:Marriott International",name:"Marriott",tourism:"hotel"}},"tourism/hotel|Marriott Executive Apartments":{tags:{brand:"Marriott Executive Apartments","brand:wikidata":"Q72636824",name:"Marriott Executive Apartments",tourism:"hotel"}},"tourism/hotel|Meininger":{matchNames:["hoteles meininger"],tags:{brand:"Meininger","brand:wikidata":"Q42773330","brand:wikipedia":"de:Meininger Hotel Gruppe",name:"Meininger",official_name:"Meininger Hotels",tourism:"hotel"}},"tourism/hotel|Mercure":{tags:{brand:"Mercure","brand:wikidata":"Q1709809","brand:wikipedia":"en:Mercure (hotel)",name:"Mercure",tourism:"hotel"}},"tourism/hotel|Microtel":{countryCodes:["ca","cn","mx","ph","us"],matchNames:["microtel inn"],nomatch:["tourism/hotel|Microtel Inn & Suites"],tags:{brand:"Microtel","brand:wikidata":"Q6840402","brand:wikipedia":"en:Microtel Inn and Suites",name:"Microtel",official_name:"Microtel by Wyndham",tourism:"hotel"}},"tourism/hotel|Microtel Inn & Suites":{countryCodes:["ca","mx","us"],nomatch:["tourism/hotel|Microtel"],tags:{brand:"Microtel Inn & Suites","brand:wikidata":"Q6840402","brand:wikipedia":"en:Microtel Inn and Suites",name:"Microtel Inn & Suites",official_name:"Microtel Inn & Suites by Wyndham",tourism:"hotel"}},"tourism/hotel|Moxy":{tags:{brand:"Moxy","brand:wikidata":"Q70287020","brand:wikipedia":"en:Marriott International",name:"Moxy",tourism:"hotel"}},"tourism/hotel|Novotel":{tags:{brand:"Novotel","brand:wikidata":"Q420545","brand:wikipedia":"en:Novotel",name:"Novotel",tourism:"hotel"}},"tourism/hotel|Park Hyatt":{tags:{brand:"Park Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Park Hyatt",tourism:"hotel"}},"tourism/hotel|Park Inn":{tags:{brand:"Park Inn","brand:wikidata":"Q60711675","brand:wikipedia":"ru:Park Inn by Radisson",name:"Park Inn",tourism:"hotel"}},"tourism/hotel|Park Plaza":{tags:{brand:"Park Plaza","brand:wikidata":"Q2052550","brand:wikipedia":"en:Park Plaza Hotels & Resorts",name:"Park Plaza Hotels",tourism:"hotel"}},"tourism/hotel|Premier Inn":{countryCodes:["gb"],tags:{brand:"Premier Inn","brand:wikidata":"Q2108626","brand:wikipedia":"en:Premier Inn",name:"Premier Inn",tourism:"hotel"}},"tourism/hotel|Première Classe":{countryCodes:["fr"],tags:{brand:"Première Classe","brand:wikidata":"Q5964551","brand:wikipedia":"en:Hôtel Première Classe",name:"Première Classe",tourism:"hotel"}},"tourism/hotel|Protea Hotel":{tags:{brand:"Protea Hotel","brand:wikidata":"Q17092570","brand:wikipedia":"en:Protea Hotels by Marriott",name:"Protea Hotel",tourism:"hotel"}},"tourism/hotel|Quality Inn":{countryCodes:["ca","mx","us"],tags:{brand:"Quality Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn",tourism:"hotel"}},"tourism/hotel|Quality Inn & Suites":{countryCodes:["ca","us"],tags:{brand:"Quality Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn & Suites",tourism:"hotel"}},"tourism/hotel|Qubus":{countryCodes:["pl"],tags:{brand:"Qubus","brand:wikidata":"Q11832868","brand:wikipedia":"pl:Qubus Hotel",name:"Qubus",official_name:"Qubus Hotel",tourism:"hotel"}},"tourism/hotel|Radisson":{matchNames:["radisson hotels"],tags:{brand:"Radisson","brand:wikidata":"Q1751979","brand:wikipedia":"en:Radisson Hotels",name:"Radisson",tourism:"hotel"}},"tourism/hotel|Radisson Blu":{tags:{brand:"Radisson Blu","brand:wikidata":"Q7281341","brand:wikipedia":"en:Radisson Blu",name:"Radisson Blu",tourism:"hotel"}},"tourism/hotel|Ramada":{tags:{brand:"Ramada","brand:wikidata":"Q1502859","brand:wikipedia":"en:Ramada",name:"Ramada",tourism:"hotel"}},"tourism/hotel|Red Lion Hotels":{countryCodes:["us"],tags:{brand:"Red Lion Hotels","brand:wikidata":"Q25047720","brand:wikipedia":"en:Red Lion Hotels",name:"Red Lion Hotels",tourism:"hotel"}},"tourism/hotel|Red Roof Inn":{countryCodes:["us"],tags:{brand:"Red Roof Inn","brand:wikidata":"Q7304949","brand:wikipedia":"en:Red Roof Inn",name:"Red Roof Inn",tourism:"hotel"}},"tourism/hotel|Renaissance":{matchNames:["renaissance hotel"],tags:{brand:"Renaissance","brand:wikidata":"Q2143252","brand:wikipedia":"en:Renaissance Hotels",name:"Renaissance",tourism:"hotel"}},"tourism/hotel|Residence Inn":{tags:{brand:"Residence Inn","brand:wikidata":"Q7315394","brand:wikipedia":"en:Residence Inn by Marriott",name:"Residence Inn",tourism:"hotel"}},"tourism/hotel|Sheraton":{tags:{brand:"Sheraton","brand:wikidata":"Q634831","brand:wikipedia":"en:Sheraton Hotels and Resorts",name:"Sheraton",tourism:"hotel"}},"tourism/hotel|Sleep Inn":{countryCodes:["us"],tags:{brand:"Sleep Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Sleep Inn",tourism:"hotel"}},"tourism/hotel|SpringHill Suites":{countryCodes:["ca","mx","us"],tags:{brand:"SpringHill Suites","brand:wikidata":"Q7580351","brand:wikipedia":"en:SpringHill Suites",name:"SpringHill Suites",tourism:"hotel"}},"tourism/hotel|St. Regis":{tags:{alt_name:"Saint Regis",brand:"St. Regis","brand:wikidata":"Q30715430","brand:wikipedia":"en:St. Regis Hotels & Resorts",name:"St. Regis",tourism:"hotel"}},"tourism/hotel|Staybridge Suites":{countryCodes:["ca","gb","us"],tags:{brand:"Staybridge Suites","brand:wikidata":"Q7605116","brand:wikipedia":"en:Staybridge Suites",name:"Staybridge Suites",tourism:"hotel"}},"tourism/hotel|TRYP":{tags:{brand:"TRYP","brand:wikidata":"Q6153452","brand:wikipedia":"en:TRYP by Wyndham",name:"TRYP",official_name:"TRYP by Wyndham",tourism:"hotel"}},"tourism/hotel|The Ritz-Carlton":{matchNames:["ritz","ritz carlton","the ritz"],tags:{brand:"The Ritz-Carlton","brand:wikidata":"Q782200","brand:wikipedia":"en:The Ritz-Carlton Hotel Company",name:"The Ritz-Carlton",tourism:"hotel"}},"tourism/hotel|The Westin":{tags:{brand:"Westin","brand:wikidata":"Q1969162","brand:wikipedia":"en:Westin Hotels & Resorts",name:"The Westin",tourism:"hotel"}},"tourism/hotel|TownePlace Suites":{countryCodes:["ca","us"],matchNames:["towneplace marriott","towneplace suites marriott"],tags:{brand:"TownePlace Suites","brand:wikidata":"Q7830092","brand:wikipedia":"en:TownePlace Suites",name:"TownePlace Suites",official_name:"TownePlace Suites by Marriott",tourism:"hotel"}},"tourism/hotel|Travelodge~(Asia/Oceania)":{countryCodes:["au","hk","id","kr","my","nz","sg","th"],tags:{brand:"Travelodge","brand:wikidata":"Q24997583","brand:wikipedia":"en:Travelodge Australia",name:"Travelodge",tourism:"hotel"}},"tourism/hotel|Travelodge~(Europe)":{countryCodes:["es","gb","ie"],tags:{brand:"Travelodge","brand:wikidata":"Q9361374","brand:wikipedia":"en:Travelodge UK",name:"Travelodge",tourism:"hotel"}},"tourism/hotel|Travelodge~(North America)":{countryCodes:["ca","us"],tags:{brand:"Travelodge","brand:wikidata":"Q7836087","brand:wikipedia":"en:Travelodge",name:"Travelodge",tourism:"hotel"}},"tourism/hotel|Tru":{tags:{brand:"Tru","brand:wikidata":"Q24907770","brand:wikipedia":"en:Tru by Hilton",name:"Tru",official_name:"Tru by Hilton",tourism:"hotel"}},"tourism/hotel|Van der Valk Hotel":{countryCodes:["be","de","es","fr","nl","us"],tags:{brand:"Van der Valk","brand:wikidata":"Q2802214","brand:wikipedia":"en:Van der Valk (company)",name:"Van der Valk Hotel",tourism:"hotel"}},"tourism/hotel|W Hotels":{tags:{brand:"W Hotels","brand:wikidata":"Q7958488","brand:wikipedia":"en:W Hotels",name:"W Hotels",short_name:"W",tourism:"hotel"}},"tourism/hotel|Wingate":{countryCodes:["us"],matchNames:["wingate inn"],tags:{brand:"Wingate","brand:wikidata":"Q8025144","brand:wikipedia":"en:Wingate by Wyndham",name:"Wingate",official_name:"Wingate by Wyndham",tourism:"hotel"}},"tourism/hotel|easyHotel":{tags:{brand:"easyHotel","brand:wikidata":"Q17011598","brand:wikipedia":"en:EasyHotel",name:"easyHotel",tourism:"hotel"}},"tourism/hotel|Уют":{tags:{brand:"Уют",name:"Уют",tourism:"hotel"}},"tourism/hotel|東横イン":{countryCodes:["jp"],tags:{brand:"東横イン","brand:en":"Toyoko Inn","brand:ja":"東横イン","brand:wikidata":"Q1320541","brand:wikipedia":"en:Toyoko Inn",name:"東横イン","name:en":"Toyoko Inn","name:ja":"東横イン",tourism:"hotel"}},"tourism/motel|Americas Best Value Inn":{tags:{brand:"Americas Best Value Inn",name:"Americas Best Value Inn",tourism:"motel"}},"tourism/motel|Budget Host Inn":{countryCodes:["us"],tags:{alt_name:"Budget Host",brand:"Budget Host Inn","brand:wikidata":"Q16954336","brand:wikipedia":"en:Budget Host",name:"Budget Host Inn",tourism:"motel"}},"tourism/motel|Econo Lodge":{tags:{brand:"Econo Lodge","brand:wikidata":"Q5333330","brand:wikipedia":"en:Econo Lodge",name:"Econo Lodge",tourism:"motel"}},"tourism/motel|Knights Inn":{countryCodes:["ca","us"],tags:{brand:"Knights Inn","brand:wikidata":"Q6422409","brand:wikipedia":"en:Knights Inn",name:"Knights Inn",tourism:"motel"}},"tourism/motel|Motel 6":{countryCodes:["ca","us"],tags:{brand:"Motel 6","brand:wikidata":"Q2188884","brand:wikipedia":"en:Motel 6",name:"Motel 6",tourism:"motel"}},"tourism/motel|Rodeway Inn":{countryCodes:["ca","us"],tags:{brand:"Rodeway Inn","brand:wikidata":"Q7356709","brand:wikipedia":"en:Rodeway Inn",name:"Rodeway Inn",tourism:"motel"}},"tourism/motel|Super 8":{countryCodes:["ca","us"],tags:{brand:"Super 8","brand:wikidata":"Q5364003","brand:wikipedia":"en:Super 8 Motels",name:"Super 8",tourism:"motel"}}};
87773         var brands$1 = {
87774         brands: brands
87775         };
87776
87777         var keepTags = ["^amenity/bank$","^amenity/bicycle_rental$","^amenity/bureau_de_change$","^amenity/cafe$","^amenity/car_rental$","^amenity/car_sharing$","^amenity/charging_station$","^amenity/cinema$","^amenity/clinic$","^amenity/dentist$","^amenity/fast_food$","^amenity/fuel$","^amenity/hospital$","^amenity/ice_cream$","^amenity/money_transfer$","^amenity/payment_(centre|terminal)$","^amenity/pharmacy$","^amenity/post_office$","^amenity/public_bookcase$","^amenity/restaurant$","^amenity/social_(centre|facility)$","^amenity/vending_machine$","^amenity/veterinary$","^leisure/fitness_centre$","^office/accountant$","^office/employment_agency$","^office/estate_agent$","^office/financial(_advisor)?$","^office/insurance$","^office/tax_advisor$","^office/telecommunication$","^shop/(?!(yes|no|gas|convenience;gas|laundry|lottery|mall))","^tourism/(h|m)otel$"];
87778         var discardKeys = ["^amenity/bank\\|(bank zachodni|bz) wbk$","^amenity/bank\\|(kreis|stadt)?sparkasse.*$","^amenity/bank\\|bank spółdzielczy$","^amenity/bank\\|pko$","^amenity/bank\\|volks- und raiffeisenbank$","^amenity/bank\\|volksbank$","^amenity/bank\\|volksbank( |-)raiffeisenbank$","^amenity/bank\\|vr( |-)bank$","^amenity/bar\\|уют$","^amenity/bicycle_rental\\|nextbike$","^amenity/cafe\\|((eiscaf(e|é)\\s)?(dolomiti|venezia)|kiosque(\\sà)?\\scafé|caf(e|é)\\sexpress|встреча|рандеву|чайхана|жемчужина)$","^amenity/cinema\\|октябрь$","^amenity/clinic\\|(clinic|health center|health sub center|urgent care|consultorio|фап)$","^amenity/fast_food\\|(ali\\sbaba|antalya|asia\\s(bistro|imbiss|wok)|(berlin|city)\\sdöner|city\\s(grill|pizza)|kfc/taco\\sbell)$","^amenity/fast_food\\|(marmaris|pizza\\s(house|time))$","^amenity/fuel\\|gnv|gpl|posto|spbu|جایگاه\\scng$","^amenity/hospital\\|(clinic|health center|(government )?hospital( municipal)?)$","^amenity/hospital\\|фап$","^amenity/ice_cream\\|gelateria|venezia$","^amenity/pharmacy\\|(adler|bahnhof|brunnen|burg|bären|engel|hirsch|hubertus|kur|linden|löwen)(-| )?apotheke$","^amenity/pharmacy\\|(centrum|farm(a|á)cia\\s(central(e)?|comunale))$","^amenity/pharmacy\\|(marien|markt|neue|park|rathaus|rats|rosen|schloss|sonnen|stadt|stern)(-| )?apotheke$","^amenity/pharmacy\\|(айболит|арніка|фармация|фармація)$","^amenity/pharmacy\\|pharmacie\\s(centrale|comunale|de\\s(l'hôtel\\sde\\sville|la\\s(gare|mairie|poste))|du\\s(centre|marché|parc))$","^amenity/restaurant\\|((gasthaus|gasthof|schwarzer)?\\s?(adler|löwen))$","^amenity/restaurant\\|(ali\\sbaba|adria|akropolis|amici|aroma|asia|athen|athos|bahnhof|bamboo|bären|bella\\s(vista|napoli))","^amenity/restaurant\\|(belvedere|canteen|cantina|capri|carpe\\sdiem|casa\\s?(blanca|mia)|casino)","^amenity/restaurant\\|(china\\s(buffet|garden|house|king|star|town|wok)|(da|la|las|el)\\s)","^amenity/restaurant\\|(delphi|deutsches\\shaus|dionysos|dolce\\svita|dorfkrug|europa|frohsinn)","^amenity/restaurant\\|(golden\\sdragon|great\\swall)$","^amenity/restaurant\\|(grüner\\sbaum|hellas|hirsch(en)?|hong\\skong|ichiban|il\\sgiardino|jade\\sgarden|jägerhof)","^amenity/restaurant\\|(kirchenwirt|koliba|kreta|kreuz|krone|lamm|le\\s(bistrot|patio))","^amenity/restaurant\\|(l'escale|lemongrass|linde|lindenhof|little\\s(italy|india)|los\\s(amigos|arcos))","^amenity/restaurant\\|(lotus|löwen|maharaja|mamma\\smia|mandarin|marco\\spolo|marmaris|mediterraneo|mensa|milano|mykonos|mythos)","^amenity/restaurant\\|(namaste|napoli|new\\schina|oasis|ochsen|olympia|osaka|paradise|parrilla|peking|pho|pinocchio)","^amenity/restaurant\\|(pizza\\shouse|pizz(a|e)ria|pizza\\sking|pomodoro|portofino|poseidon|ratskeller|rhodos|ristorante\\s)","^amenity/restaurant\\|(roma|rose|rössl(e|i)|saffron|saigon|sakura|san\\smarco|santorini|schützenhaus|shalimar|shanghai|sonne|sphinx)","^amenity/restaurant\\|(sportheim|sternen|syrtaki|taj\\smahal|taste\\sof\\sindia|the\\skitchen|toscana|tokyo|traube)","^amenity/restaurant\\|(venezia|waldschänke|wok|zorbas|(zum|zur)\\s)","^amenity/restaurant\\|永和豆漿$","^amenity/social_facility\\|dom pomocy społecznej$","^amenity/social_facility\\|maison de retraite$","^amenity/social_facility\\|safe haven$","^shop/(convenience|kiosk)\\|(777|bp|esso|exxon|mobil|shell)$","^shop/bakery\\|(backshop|schneider|schäfer|каравай)$","^shop/bakery\\|(bäckerei\\s)?müller","^shop/butcher\\|butcher$","^shop/clothes\\|трикотаж$","^shop/convenience\\|(24 часа|августина|альянс|апельсин|ассорти|бер(е|ё)зка|бриз|валентина|весна|визит|ветеран|водолей|гастроном|гермес|гурман|диана|добрый|дружба|домашний|елена)$","^shop/convenience\\|(milk bar|юлия)$","^shop/convenience\\|(калинка|каштан|квартал|колобок|колос(ок)?|каравай|кооператор|корзинка|кулинария|лакомка|ласточка|лидер|луч|любава|любимый|людмила|люкс)$","^shop/convenience\\|(меркурий|мечта|мини маркет|мираж|белорусские продукты|продукты 24|натали|надежда|ника)$","^shop/convenience\\|(оазис|околица|олимп|парус|пеликан|престиж|подсолнух|радуга|росинка|ромашка|родник|рассвет|русь)$","^shop/convenience\\|(сельпо|семейный|сказка|солнышко|спутник|солнечный|светлана|удача|ивушка)$","^shop/convenience\\|(юбилейный|южный|эконом|шанс|чайка|центральный|хороший|хуторок|фаворит|фортуна|татьяна|тройка|эдем|уют)$","^shop/convenience\\|almac[eé]n$","^shop/cosmetics\\|(vente de )?cosm[eé]tiques?$","^shop/fishing\\|рыболов$","^shop/florist\\|(мир цветов|орхидея)$","^shop/frame\\|rumah\\spenduduk$","^shop/hairdresser\\|(haarwerk|стиль|локон|шарм)$","^shop/hardware\\|(всё для дома|1000 мелочей|хозяюшка)$","^shop/jewelry\\|585$","^shop/money_transfer|mobil(e)?\\smoney$","^shop/null|null$","^shop/optician\\|(vision plus|оптика|[oó]ptica)$","^shop/supermarket\\|(famiglia cooperativa|семейный)$","^shop/tailor\\|couture\\s?(dame|homme|mixte)?$","^shop/tailor|tailor$","^shop/ticket\\|ticket office$","^tourism/(h|m)otel\\|budget inn$","^tourism/hotel\\|(belvedere|krone|victoria)","^tourism/hotel\\|(central|city|europa|grand|palace|park|royal)\\s?hotel$","^tourism/hotel\\|h(o|ô)tel\\s(astoria|central|continental|europa|imperial|krone|panorama|plaza|royal|victoria|(zur\\s)?post|de france)$","^tourism/hotel\\|строитель$"];
87779         var discardNames = ["^((drummed|independent) )?(cng|filling|fuel|gas|lpg|petrol)(\\s(station|pump))?$","^((le|the) )?salo(o)?n( de)?( coiffure| fryzjerski| beauté)?( homme| dame)?$","^((горячий|свежий) )?хлеб(ница)?$","^((разливное|живое) )?пиво$","^(beer|convenience|corner|general|liquor|variety)(\\sstore)?$","^(bureau de |)change$","^(buzón\\sde\\s)?correos$","^(cl(i|í)nica )?dental$","^(cl(i|í)nica )?veterinari(a|o)$","^(clinique )?vétérinaire$","^(coffee|pet|vulcanizing|gift|local)(\\sshop)?$","^(hof|dorf)laden$","^(h|m)otel$","^(polyclinique|poliklinika)$","^(sklep )?(spożywcz(y|o))(-przemysłowy)?$","^(strom|milch)tankstelle$","^(the )?barber(ia|shop|\\sshop)?$","^(é|e)pic(erie|ier)$","^(агзс|азс|мережа азс приват|магазин при азс)$","^(газовая\\s)?заправка$","^(летнее )?кафе(терий)?$","^(парикмахерская|персона|перукарня)$","^(проездные )?билет(ы)?$","^(свежее )?мяс(ной|о)$","^(спец|детская|женская)?\\s?(одежда|консультация|поликлиника)$","^agencja pocztowa$","^alimentación$","^alimentar(a|i)$","^alimentation\\sgénérale$","^alte (apotheke|post)$","^apotek(a|et)$","^apotheke( am markt)?$","^apteka$","^atelier de couture$","^atm$","^auto serwis$","^bakery$","^bakkal$","^bank$","^baqala$","^bar (centrale|kafe)$","^bar$","^barbea?r(i|í)a$","^bazar$","^benzina$","^berber$","^bijouterie$","^bike sharing$","^biletomat$","^bistro$","^blumen(laden)?$","^bo(u)?tique$","^bodega$","^borrachar(i|í)a$","^botica$","^botiller(i|í)a$","^boucherie(\\scharcuterie)?$","^boulangerie(\\sp(a|â)tisserie)?$","^bread$","^briefkasten$","^bureau de poste$","^bäckerei$","^büfé$","^cabinet dentaire$","^caf(e|é) de(s)? (la )?(place|sports|gare)$","^caf(e|é)(t(e|é)r(i|í)a)?( )?(central)?$","^cajero\\sautomatico\\sbancared$","^carnicer(i|í)a$","^central$","^centro (de salud|de saúde|médico)$","^centro naturista$","^chifa$","^chinese restaurant$","^cine(ma)?$","^cleaners$","^co-operative$","^coffee$","^coiff(eur|ure)\\s?(homme|dame)?$","^colmado$","^comedor$","^comida china$","^commercial hotel$","^consultorio (dental|odontologico|local|médico)$","^credit union$","^currency exchange$","^d(ö|o)ner(\\skebab)?$","^delikatesy$","^dental(\\s(clinic|surgery))?$","^dentist(a|e)?$","^drinks$","^droguer(i|í)a$","^dép(ô|o)t de gaz$","^dépanneur$","^eczane$","^edicola$","^eiscaf(e|é)$","^eisdiele","^el árbol$","^estanco$","^exchange$","^fagyizó$","^family dentistry$","^farm(a|à|á)ci(a|à|á|e)?$","^fast food$","^ferramenta$","^ferreter(i|í)a$","^figaro$","^fish (and|&) chips$","^fleuriste$","^florărie$","^food court$","^fotocopias$","^fri(t|z)erie$","^fris(eu|ö)r$","^frituur$","^frutería$","^fryzjer$","^funeraria$","^game$","^garage\\s?(moto|auto)?$","^garba(drome)?$","^gasoline(ra)?$","^gast(haus|hof)\\s(krone|(zur)\\s(linde|post))?$","^getränkemarkt$","^gimnasio( municipal)?$","^gomer(i|í)a$","^gym(nase|nasium)?$","^gyógyszertár$","^haar(genau|monie|scharf)$","^hair\\s?(design|lounge|salon|dresser)$","^hardware$","^home\\sutensils$","^horodateur$","^hospedaje$","^húsbolt$","^imbiss$","^indipend\\.$","^internet cafe$","^istanbul(\\skebab)?$","^kaf(e|é)$","^kantine$","^kantor pos$","^kantor$","^kebab(ai|\\shouse)?$","^kios(co|k|ko|que)?$","^kisbolt$","^kitchen$","^księgarnia$","^kwiaciarnia$","^kwiaty$","^kулинария$","^ladestation$","^librairie$","^librer(i|í)a$","^libro$","^licorer(i|í)a$","^ljekarna$","^lombard$","^lot 1$","^lubri(centro|ficantes)$","^lékárna$","^maceller(i|í)a$","^magazin","^mailbox$","^maison$","^market$","^mercado( municipal)?$","^mercerie$","^mini\\s?(abc|market|mart|mercado|pump)","^money exchange$","^máquina de tickets$","^mécanique$","^nagelstudio$","^nails$","^no name$","^obuwie$","^odontologia$","^offener bücherschrank$","^oplaadpunt$","^opti(c|k)a$","^optical center$","^optyk$","^outlet$","^pa(r|cz)komat$","^pac?k(etbox|station)$","^padaria$","^panader(i|í)a$","^pancake house$","^panificio$","^panorama$","^papeler(i|í)a$","^parafarmacia$","^parduotuvė$","^parkscheinautomat$","^parquímetro$","^peluquer(i|í)a$","^pharmac(ie|y)$","^piekarnia$","^piscine$","^pizz(eri)?a$","^po(s|š)t(a|e|o)$","^poczta$","^poissonnerie$","^post\\s?(agentur|filiale|partner|stelle)?$","^potraviny$","^prehrana$","^pressing$","^pulper(i|í)a$","^punkt apteczny$","^quin?cai?llerie$","^quiosco$","^rent a car$","^repuestos automotrices$","^restaurant(e)?(\\suniversit(ário|aire))?$","^rzeźnik$","^sale$","^salle (omnisport|polyvalente)$","^salão de beleza$","^sari-sari store$","^sb\\stank$","^second\\shand$","^shops?$","^sklep$","^smíšené zboží$","^snacks?$","^souvenir(s)?( shop)?$","^spätkauf$","^stacja (benzynowa|paliw)$","^stadium$","^stadtbäckerei$","^station service$","^steak house$","^stores?$","^super ?america","^super\\s?m(arket|ercado)$","^sushi(\\sbar)?$","^taba(c|k)(os|chi)?(\\strafi(k|c))?$","^tabac\\spresse$","^tabaccher(i|í)a$","^tacos$","^taller( mec(á|a)nico)?$","^tanatorio$","^tankstelle$","^tattoo$","^taverna$","^tea stall$","^tesha$","^tienda(\\sde\\s(barrio|abarrotes))?$","^toko pakaian$","^trafik(a)?$","^trattoria$","^trinkhalle$","^télécentre$","^ufficio postale$","^unidade?( básica)? de (saúde|salud)$","^urząd pocztowy$","^vegyesbolt$","^verduler(i|í)a$","^večerka$","^virágbolt$","^vulcanizare$","^warung$","^warzywniak$","^windmill$","^wulkanizacja$","^zahnarzt$","^zigarettenautomat$","^zöldséges$","^änderungsschneiderei$","^élelmiszer(bolt)?$","^φαρμακε[ιί]ο$","^авто(рынок|ремонт|сервис|запчасти(ни)?)?$","^автома(г|газин|стерская)?$","^автосервис\\+шиномонтаж$","^амбулатор(и|і)я$","^аптека","^аптечный (пункт|склад)$","^ателье$","^бассейн$","^бистро$","^булочная$","^буфет$","^бытовая химия$","^ветеринарная клиника$","^ветлечебница$","^вс(е|ё) для дома$","^вулканизация$","^газ$","^главпочтамт$","^гостиница$","^детский дом$","^закусочная$","^замена масла$","^золото(й)?$","^зоо(магазин|товары)$","^игрушки$","^инфекционн(ая|ое) (больница|отделение)","^канцтовары$","^касса$","^квіти$","^киоск$","^книги$","^кожно-?венерологический диспансер","^кофе(йня|\\sхауз)$","^крамниця$","^купец$","^ломбард$","^магазин","^маркет$","^меб(ель|лі)$","^метан$","^мини-?маркет$","^мороженое$","^мясная лавка$","^обувь$","^овощи(\\sи\\s|-)фрукты$","^октан$","^памятники$","^парикмахер(ская)?$","^пекарня$","^пельменная$","^печать$","^пиццерия$","^по(чт|шт|щ)а$","^подарки$","^пол(и|і)кл(и|і)н(и|і)ка( №1)?$","^почтовое отделение$","^пресса$","^продукт(ы|и)?$","^продуктовый( магазин)?$","^промтовары$","^пропан$","^ремонт\\sобуви$","^ресторан$","^ритуал(ьные услуги)?$","^рыб(a|олов)$","^салон красоты$","^сантехника$","^семена$","^социальный участковый$","^спорт(зал|комплекс|товары)$","^столовая$","^стоматолог","^стройматериалы$","^сувениры$","^супермаркет$","^табак(ерка)?$","^ткани$","^товары для дома$","^универ(маг|сам)$","^фельдшерско-акушерский пункт$","^фрукты и овощи$","^химчистка$","^хинкальная$","^хоз(товары)$","^хүнсний дэлгүүр$","^цвет(овик|очный|ы)(\\sмагазин)?$","^церковная( лавка)?$","^чайхана$","^ша(ве|у)рма$","^шашлычная$","^шиномонтаж$","^דלק$","^اداره پست$","^باشگاه بدنسازی$","^بانک$","^بقال(ة)?$","^حلاق$","^داروخانه شبانه روزی$","^داروخانه$","^درمانگاه$","^رستوران$","^سوپر\\s?مارکت$","^صيدلية$","^قصابی$","^محط(ه|ة) وقود$","^مخابرات$","^مخبز(ة)?$","^مطعم$","^مقهى$","^مكتب البريد$","^میوه فروشی$","^نان\\s?(سنگک|بربری|لواش)?$","^نانوایی\\s?(سنگک|بربری|لواش)?ی?$","^پمپ (بنزین|گاز)$","^მარკეტი( \\(market\\))?","^カフェ$","^ポスト$","^体育館$","^加油站$","^早餐店$","^珈琲館$","^租$","^自動販売機$","^自販機$","^郵便ポスト$","^郵局$","^食堂$","automat na jizdenky"];
87780         var filters = {
87781         keepTags: keepTags,
87782         discardKeys: discardKeys,
87783         discardNames: discardNames
87784         };
87785
87786         // remove spaces, punctuation, diacritics
87787         var simplify = function simplify(str) {
87788           return diacritics.remove(
87789             str
87790               .replace(/&/g, 'and')
87791               .replace(/[\s\-=_!"#%'*{},.\/:;?\(\)\[\]@\\$\^*+<>~`’\u00a1\u00a7\u00b6\u00b7\u00bf\u037e\u0387\u055a-\u055f\u0589\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u166d\u166e\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00\u2e01\u2e06-\u2e08\u2e0b\u2e0e-\u2e16\u2e18\u2e19\u2e1b\u2e1e\u2e1f\u2e2a-\u2e2e\u2e30-\u2e39\u3001-\u3003\u303d\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufe10-\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65]+/g,'')
87792               .toLowerCase()
87793           );
87794         };
87795
87796         // toParts - split a name-suggestion-index key into parts
87797         // {
87798         //   kvnd:        "amenity/fast_food|Thaï Express~(North America)",
87799         //   kvn:         "amenity/fast_food|Thaï Express",
87800         //   kv:          "amenity/fast_food",
87801         //   k:           "amenity",
87802         //   v:           "fast_food",
87803         //   n:           "Thaï Express",
87804         //   d:           "(North America)",
87805         //   nsimple:     "thaiexpress",
87806         //   kvnnsimple:  "amenity/fast_food|thaiexpress"
87807         // }
87808         var to_parts = function toParts(kvnd) {
87809           var parts = {};
87810           parts.kvnd = kvnd;
87811
87812           var kvndparts = kvnd.split('~', 2);
87813           if (kvndparts.length > 1) { parts.d = kvndparts[1]; }
87814
87815           parts.kvn = kvndparts[0];
87816           var kvnparts = parts.kvn.split('|', 2);
87817           if (kvnparts.length > 1) { parts.n = kvnparts[1]; }
87818
87819           parts.kv = kvnparts[0];
87820           var kvparts = parts.kv.split('/', 2);
87821           parts.k = kvparts[0];
87822           parts.v = kvparts[1];
87823
87824           parts.nsimple = simplify(parts.n);
87825           parts.kvnsimple = parts.kv + '|' + parts.nsimple;
87826           return parts;
87827         };
87828
87829         var matchGroups = {beauty:["shop/beauty","shop/hairdresser_supply"],bed:["shop/bed","shop/furniture"],beverages:["shop/alcohol","shop/beverages"],camping:["leisure/park","tourism/camp_site","tourism/caravan_site"],car_parts:["shop/car_parts","shop/car_repair","shop/tires","shop/tyres"],confectionery:["shop/candy","shop/chocolate","shop/confectionery"],convenience:["shop/beauty","shop/chemist","shop/convenience","shop/cosmetics"],coworking:["amenity/coworking_space","office/coworking","office/coworking_space"],electronics:["office/telecommunication","shop/computer","shop/electronics","shop/hifi","shop/mobile","shop/mobile_phone","shop/telecommunication"],fashion:["shop/accessories","shop/bag","shop/botique","shop/clothes","shop/department_store","shop/fashion","shop/fashion_accessories","shop/sports","shop/shoes"],financial:["amenity/bank","office/accountant","office/financial","office/financial_advisor","office/tax_advisor","shop/tax"],fitness:["leisure/fitness_centre","leisure/fitness_center","leisure/sports_centre","leisure/sports_center"],food:["amenity/cafe","amenity/fast_food","amenity/ice_cream","amenity/restaurant","shop/bakery","shop/ice_cream","shop/pastry","shop/tea","shop/coffee"],fuel:["amenity/fuel","shop/gas","shop/convenience;gas","shop/gas;convenience"],gift:["shop/gift","shop/card","shop/cards","shop/stationery"],hardware:["shop/carpet","shop/diy","shop/doityourself","shop/doors","shop/electrical","shop/flooring","shop/hardware","shop/power_tools","shop/tool_hire","shop/tools","shop/trade"],health_food:["shop/health","shop/health_food","shop/herbalist","shop/nutrition_supplements"],houseware:["shop/houseware","shop/interior_decoration"],lodging:["tourism/hotel","tourism/motel"],money_transfer:["amenity/money_transfer","shop/money_transfer"],outdoor:["shop/outdoor","shop/sports"],rental:["amenity/bicycle_rental","amenity/boat_rental","amenity/car_rental","amenity/truck_rental","amenity/vehicle_rental","shop/rental"],school:["amenity/childcare","amenity/college","amenity/kindergarten","amenity/language_school","amenity/prep_school","amenity/school","amenity/university"],supermarket:["shop/food","shop/frozen_food","shop/greengrocer","shop/grocery","shop/supermarket","shop/wholesale"],variety_store:["shop/variety_store","shop/supermarket","shop/discount","shop/convenience"],vending:["amenity/vending_machine","shop/vending_machine"],wholesale:["shop/wholesale","shop/supermarket","shop/department_store"]};
87830         var match_groups = {
87831         matchGroups: matchGroups
87832         };
87833
87834         var match_groups$1 = /*#__PURE__*/Object.freeze({
87835                 __proto__: null,
87836                 matchGroups: matchGroups,
87837                 'default': match_groups
87838         });
87839
87840         var require$$0 = getCjsExportFromNamespace(match_groups$1);
87841
87842         var matchGroups$1 = require$$0.matchGroups;
87843
87844
87845         var matcher$1 = function () {
87846           var _warnings = [];  // array of match conflict pairs
87847           var _ambiguous = {};
87848           var _matchIndex = {};
87849           var matcher = {};
87850
87851
87852           // Create an index of all the keys/simplenames for fast matching
87853           matcher.buildMatchIndex = function (brands) {
87854             // two passes - once for primary names, once for secondary/alternate names
87855             Object.keys(brands).forEach(function (kvnd) { return insertNames(kvnd, 'primary'); });
87856             Object.keys(brands).forEach(function (kvnd) { return insertNames(kvnd, 'secondary'); });
87857
87858
87859             function insertNames(kvnd, which) {
87860               var obj = brands[kvnd];
87861               var parts = to_parts(kvnd);
87862
87863               // Exit early for ambiguous names in the second pass.
87864               // They were collected in the first pass and we don't gather alt names for them.
87865               if (which === 'secondary' && parts.d) { return; }
87866
87867
87868               if (obj.countryCodes) {
87869                 parts.countryCodes = obj.countryCodes.slice();  // copy
87870               }
87871
87872               var nomatches = (obj.nomatch || []);
87873               if (nomatches.some(function (s) { return s === kvnd; })) {
87874                 console.log(("WARNING match/nomatch conflict for " + kvnd));
87875                 return;
87876               }
87877
87878               var match_kv = [parts.kv]
87879                 .concat(obj.matchTags || [])
87880                 .concat([((parts.k) + "/yes"), "building/yes"])   // #3454 - match some generic tags
87881                 .map(function (s) { return s.toLowerCase(); });
87882
87883               var match_nsimple = [];
87884               if (which === 'primary') {
87885                 match_nsimple = [parts.n]
87886                   .concat(obj.matchNames || [])
87887                   .concat(obj.tags.official_name || [])   // #2732 - match alternate names
87888                   .map(simplify);
87889
87890               } else if (which === 'secondary') {
87891                 match_nsimple = []
87892                   .concat(obj.tags.alt_name || [])        // #2732 - match alternate names
87893                   .concat(obj.tags.short_name || [])      // #2732 - match alternate names
87894                   .map(simplify);
87895               }
87896
87897               if (!match_nsimple.length) { return; }  // nothing to do
87898
87899               match_kv.forEach(function (kv) {
87900                 match_nsimple.forEach(function (nsimple) {
87901                   if (parts.d) {
87902                     // Known ambiguous names with disambiguation string ~(USA) / ~(Canada)
87903                     // FIXME: Name collisions will overwrite the initial entry (ok for now)
87904                     if (!_ambiguous[kv]) { _ambiguous[kv] = {}; }
87905                     _ambiguous[kv][nsimple] = parts;
87906
87907                   } else {
87908                     // Names we mostly expect to be unique..
87909                     if (!_matchIndex[kv]) { _matchIndex[kv] = {}; }
87910
87911                     var m = _matchIndex[kv][nsimple];
87912                     if (m) {  // There already is a match for this name, skip it
87913                       // Warn if we detect collisions in a primary name.
87914                       // Skip warning if a secondary name or a generic `*=yes` tag - #2972 / #3454
87915                       if (which === 'primary' && !/\/yes$/.test(kv)) {
87916                         _warnings.push([m.kvnd, (kvnd + " (" + kv + "/" + nsimple + ")")]);
87917                       }
87918                     } else {
87919                       _matchIndex[kv][nsimple] = parts;   // insert
87920                     }
87921                   }
87922                 });
87923               });
87924
87925             }
87926           };
87927
87928
87929           // pass a `key`, `value`, `name` and return the best match,
87930           // `countryCode` optional (if supplied, must match that too)
87931           matcher.matchKVN = function (key, value, name, countryCode) {
87932             return matcher.matchParts(to_parts((key + "/" + value + "|" + name)), countryCode);
87933           };
87934
87935
87936           // pass a parts object and return the best match,
87937           // `countryCode` optional (if supplied, must match that too)
87938           matcher.matchParts = function (parts, countryCode) {
87939             var match = null;
87940             var inGroup = false;
87941
87942             // fixme: we currently return a single match for ambiguous
87943             match = _ambiguous[parts.kv] && _ambiguous[parts.kv][parts.nsimple];
87944             if (match && matchesCountryCode(match)) { return match; }
87945
87946             // try to return an exact match
87947             match = _matchIndex[parts.kv] && _matchIndex[parts.kv][parts.nsimple];
87948             if (match && matchesCountryCode(match)) { return match; }
87949
87950             // look in match groups
87951             for (var mg in matchGroups$1) {
87952               var matchGroup = matchGroups$1[mg];
87953               match = null;
87954               inGroup = false;
87955
87956               for (var i = 0; i < matchGroup.length; i++) {
87957                 var otherkv = matchGroup[i].toLowerCase();
87958                 if (!inGroup) {
87959                   inGroup = otherkv === parts.kv;
87960                 }
87961                 if (!match) {
87962                   // fixme: we currently return a single match for ambiguous
87963                   match = _ambiguous[otherkv] && _ambiguous[otherkv][parts.nsimple];
87964                 }
87965                 if (!match) {
87966                   match = _matchIndex[otherkv] && _matchIndex[otherkv][parts.nsimple];
87967                 }
87968
87969                 if (match && !matchesCountryCode(match)) {
87970                   match = null;
87971                 }
87972
87973                 if (inGroup && match) {
87974                   return match;
87975                 }
87976               }
87977             }
87978
87979             return null;
87980
87981             function matchesCountryCode(match) {
87982               if (!countryCode) { return true; }
87983               if (!match.countryCodes) { return true; }
87984               return match.countryCodes.indexOf(countryCode) !== -1;
87985             }
87986           };
87987
87988           matcher.getWarnings = function () {
87989             return _warnings;
87990           };
87991
87992           return matcher;
87993         };
87994
87995         function validationOutdatedTags(context) {
87996             var type = 'outdated_tags';
87997
87998             // initialize name-suggestion-index matcher
87999             var nsiMatcher = matcher$1();
88000             nsiMatcher.buildMatchIndex(brands$1.brands);
88001             var nsiKeys = ['amenity', 'shop', 'tourism', 'leisure', 'office'];
88002
88003             var allWD = {};
88004             var allWP = {};
88005             Object.keys(brands$1.brands).forEach(function(kvnd) {
88006                 var brand = brands$1.brands[kvnd];
88007                 var wd = brand.tags['brand:wikidata'];
88008                 var wp = brand.tags['brand:wikipedia'];
88009                 if (wd) { allWD[wd] = kvnd; }
88010                 if (wp) { allWP[wp] = kvnd; }
88011             });
88012
88013
88014             function oldTagIssues(entity, graph) {
88015                 var oldTags = Object.assign({}, entity.tags);  // shallow copy
88016                 var preset = context.presets().match(entity, graph);
88017                 var subtype = 'deprecated_tags';
88018
88019                 // upgrade preset..
88020                 if (preset.replacement) {
88021                     var newPreset = context.presets().item(preset.replacement);
88022                     graph = actionChangePreset(entity.id, preset, newPreset)(graph);
88023                     entity = graph.entity(entity.id);
88024                     preset = newPreset;
88025                 }
88026
88027                 // upgrade tags..
88028                 var deprecatedTags = entity.deprecatedTags();
88029                 if (deprecatedTags.length) {
88030                     deprecatedTags.forEach(function(tag) {
88031                         graph = actionUpgradeTags(entity.id, tag.old, tag.replace)(graph);
88032                     });
88033                     entity = graph.entity(entity.id);
88034                 }
88035
88036                 // add missing addTags..
88037                 var newTags = Object.assign({}, entity.tags);  // shallow copy
88038                 if (preset.tags !== preset.addTags) {
88039                     Object.keys(preset.addTags).forEach(function(k) {
88040                         if (!newTags[k]) {
88041                             if (preset.addTags[k] === '*') {
88042                                 newTags[k] = 'yes';
88043                             } else {
88044                                 newTags[k] = preset.addTags[k];
88045                             }
88046                         }
88047                     });
88048                 }
88049
88050                 // Do `wikidata` or `wikipedia` identify this entity as a brand?  #6416
88051                 // If so, these tags can be swapped to `brand:wikidata`/`brand:wikipedia`
88052                 var isBrand;
88053                 if (newTags.wikidata) {                 // try matching `wikidata`
88054                     isBrand = allWD[newTags.wikidata];
88055                 }
88056                 if (!isBrand && newTags.wikipedia) {    // fallback to `wikipedia`
88057                     isBrand = allWP[newTags.wikipedia];
88058                 }
88059                 if (isBrand && !newTags.office) {       // but avoid doing this for corporate offices
88060                     if (newTags.wikidata) {
88061                         newTags['brand:wikidata'] = newTags.wikidata;
88062                         delete newTags.wikidata;
88063                     }
88064                     if (newTags.wikipedia) {
88065                         newTags['brand:wikipedia'] = newTags.wikipedia;
88066                         delete newTags.wikipedia;
88067                     }
88068                     // I considered setting `name` and other tags here, but they aren't unique per wikidata
88069                     // (Q2759586 -> in USA "Papa John's", in Russia "Папа Джонс")
88070                     // So users will really need to use a preset or assign `name` themselves.
88071                 }
88072
88073                 // try key/value|name match against name-suggestion-index
88074                 if (newTags.name) {
88075                     for (var i = 0; i < nsiKeys.length; i++) {
88076                         var k = nsiKeys[i];
88077                         if (!newTags[k]) { continue; }
88078
88079                         var center = entity.extent(graph).center();
88080                         var countryCode = iso1A2Code(center);
88081                         var match = nsiMatcher.matchKVN(k, newTags[k], newTags.name, countryCode && countryCode.toLowerCase());
88082                         if (!match) { continue; }
88083
88084                         // for now skip ambiguous matches (like Target~(USA) vs Target~(Australia))
88085                         if (match.d) { continue; }
88086
88087                         var brand = brands$1.brands[match.kvnd];
88088                         if (brand && brand.tags['brand:wikidata'] &&
88089                             brand.tags['brand:wikidata'] !== entity.tags['not:brand:wikidata']) {
88090                             subtype = 'noncanonical_brand';
88091
88092                             var keepTags = ['takeaway'].reduce(function(acc, k) {
88093                                 if (newTags[k]) {
88094                                     acc[k] = newTags[k];
88095                                 }
88096                                 return acc;
88097                             }, {});
88098
88099                             nsiKeys.forEach(function(k) { delete newTags[k]; });
88100                             Object.assign(newTags, brand.tags, keepTags);
88101                             break;
88102                         }
88103                     }
88104                 }
88105
88106                 // determine diff
88107                 var tagDiff = utilTagDiff(oldTags, newTags);
88108                 if (!tagDiff.length) { return []; }
88109
88110                 var isOnlyAddingTags = tagDiff.every(function(d) {
88111                     return d.type === '+';
88112                 });
88113
88114                 var prefix = '';
88115                 if (subtype === 'noncanonical_brand') {
88116                     prefix = 'noncanonical_brand.';
88117                 } else if (subtype === 'deprecated_tags' && isOnlyAddingTags) {
88118                     subtype = 'incomplete_tags';
88119                     prefix = 'incomplete.';
88120                 }
88121
88122                 // don't allow autofixing brand tags
88123                 var autoArgs = subtype !== 'noncanonical_brand' ? [doUpgrade, t('issues.fix.upgrade_tags.annotation')] : null;
88124
88125                 return [new validationIssue({
88126                     type: type,
88127                     subtype: subtype,
88128                     severity: 'warning',
88129                     message: showMessage,
88130                     reference: showReference,
88131                     entityIds: [entity.id],
88132                     hash: JSON.stringify(tagDiff),
88133                     dynamicFixes: function() {
88134                         return [
88135                             new validationIssueFix({
88136                                 autoArgs: autoArgs,
88137                                 title: t('issues.fix.upgrade_tags.title'),
88138                                 onClick: function(context) {
88139                                     context.perform(doUpgrade, t('issues.fix.upgrade_tags.annotation'));
88140                                 }
88141                             })
88142                         ];
88143                     }
88144                 })];
88145
88146
88147                 function doUpgrade(graph) {
88148                     var currEntity = graph.hasEntity(entity.id);
88149                     if (!currEntity) { return graph; }
88150
88151                     var newTags = Object.assign({}, currEntity.tags);  // shallow copy
88152                     tagDiff.forEach(function(diff) {
88153                         if (diff.type === '-') {
88154                             delete newTags[diff.key];
88155                         } else if (diff.type === '+') {
88156                             newTags[diff.key] = diff.newVal;
88157                         }
88158                     });
88159
88160                     return actionChangeTags(currEntity.id, newTags)(graph);
88161                 }
88162
88163
88164                 function showMessage(context) {
88165                     var currEntity = context.hasEntity(entity.id);
88166                     if (!currEntity) { return ''; }
88167
88168                     var messageID = 'issues.outdated_tags.' + prefix + 'message';
88169
88170                     if (subtype === 'noncanonical_brand' && isOnlyAddingTags) {
88171                         messageID += '_incomplete';
88172                     }
88173
88174                     return t(messageID,
88175                         { feature: utilDisplayLabel(currEntity, context) }
88176                     );
88177                 }
88178
88179
88180                 function showReference(selection) {
88181                     var enter = selection.selectAll('.issue-reference')
88182                         .data([0])
88183                         .enter();
88184
88185                     enter
88186                         .append('div')
88187                         .attr('class', 'issue-reference')
88188                         .text(t('issues.outdated_tags.' + prefix + 'reference'));
88189
88190                     enter
88191                         .append('strong')
88192                         .text(t('issues.suggested'));
88193
88194                     enter
88195                         .append('table')
88196                         .attr('class', 'tagDiff-table')
88197                         .selectAll('.tagDiff-row')
88198                         .data(tagDiff)
88199                         .enter()
88200                         .append('tr')
88201                         .attr('class', 'tagDiff-row')
88202                         .append('td')
88203                         .attr('class', function(d) {
88204                             var klass = d.type === '+' ? 'add' : 'remove';
88205                             return 'tagDiff-cell tagDiff-cell-' + klass;
88206                         })
88207                         .text(function(d) { return d.display; });
88208                 }
88209             }
88210
88211
88212             function oldMultipolygonIssues(entity, graph) {
88213
88214                 var multipolygon, outerWay;
88215                 if (entity.type === 'relation') {
88216                     outerWay = osmOldMultipolygonOuterMemberOfRelation(entity, graph);
88217                     multipolygon = entity;
88218                 } else if (entity.type === 'way') {
88219                     multipolygon = osmIsOldMultipolygonOuterMember(entity, graph);
88220                     outerWay = entity;
88221                 } else {
88222                     return [];
88223                 }
88224
88225                 if (!multipolygon || !outerWay) { return []; }
88226
88227                 return [new validationIssue({
88228                     type: type,
88229                     subtype: 'old_multipolygon',
88230                     severity: 'warning',
88231                     message: showMessage,
88232                     reference: showReference,
88233                     entityIds: [outerWay.id, multipolygon.id],
88234                     dynamicFixes: function() {
88235                         return [
88236                             new validationIssueFix({
88237                                 autoArgs: [doUpgrade, t('issues.fix.move_tags.annotation')],
88238                                 title: t('issues.fix.move_tags.title'),
88239                                 onClick: function(context) {
88240                                     context.perform(doUpgrade, t('issues.fix.move_tags.annotation'));
88241                                 }
88242                             })
88243                         ];
88244                     }
88245                 })];
88246
88247
88248                 function doUpgrade(graph) {
88249                     var currMultipolygon = graph.hasEntity(multipolygon.id);
88250                     var currOuterWay = graph.hasEntity(outerWay.id);
88251                     if (!currMultipolygon || !currOuterWay) { return graph; }
88252
88253                     currMultipolygon = currMultipolygon.mergeTags(currOuterWay.tags);
88254                     graph = graph.replace(currMultipolygon);
88255                     return actionChangeTags(currOuterWay.id, {})(graph);
88256                 }
88257
88258
88259                 function showMessage(context) {
88260                     var currMultipolygon = context.hasEntity(multipolygon.id);
88261                     if (!currMultipolygon) { return ''; }
88262
88263                     return t('issues.old_multipolygon.message',
88264                         { multipolygon: utilDisplayLabel(currMultipolygon, context) }
88265                     );
88266                 }
88267
88268
88269                 function showReference(selection) {
88270                     selection.selectAll('.issue-reference')
88271                         .data([0])
88272                         .enter()
88273                         .append('div')
88274                         .attr('class', 'issue-reference')
88275                         .text(t('issues.old_multipolygon.reference'));
88276                 }
88277             }
88278
88279
88280             var validation = function checkOutdatedTags(entity, graph) {
88281                 var issues = oldMultipolygonIssues(entity, graph);
88282                 if (!issues.length) { issues = oldTagIssues(entity, graph); }
88283                 return issues;
88284             };
88285
88286
88287             validation.type = type;
88288
88289             return validation;
88290         }
88291
88292         function validationPrivateData() {
88293             var type = 'private_data';
88294
88295             // assume that some buildings are private
88296             var privateBuildingValues = {
88297                 detached: true,
88298                 farm: true,
88299                 house: true,
88300                 houseboat: true,
88301                 residential: true,
88302                 semidetached_house: true,
88303                 static_caravan: true
88304             };
88305
88306             // but they might be public if they have one of these other tags
88307             var publicKeys = {
88308                 amenity: true,
88309                 craft: true,
88310                 historic: true,
88311                 leisure: true,
88312                 office: true,
88313                 shop: true,
88314                 tourism: true
88315             };
88316
88317             // these tags may contain personally identifying info
88318             var personalTags = {
88319                 'contact:email': true,
88320                 'contact:fax': true,
88321                 'contact:phone': true,
88322                 email: true,
88323                 fax: true,
88324                 phone: true
88325             };
88326
88327
88328             var validation = function checkPrivateData(entity) {
88329                 var tags = entity.tags;
88330                 if (!tags.building || !privateBuildingValues[tags.building]) { return []; }
88331
88332                 var keepTags = {};
88333                 for (var k in tags) {
88334                     if (publicKeys[k]) { return []; }  // probably a public feature
88335                     if (!personalTags[k]) {
88336                         keepTags[k] = tags[k];
88337                     }
88338                 }
88339
88340                 var tagDiff = utilTagDiff(tags, keepTags);
88341                 if (!tagDiff.length) { return []; }
88342
88343                 var fixID = tagDiff.length === 1 ? 'remove_tag' : 'remove_tags';
88344
88345                 return [new validationIssue({
88346                     type: type,
88347                     severity: 'warning',
88348                     message: showMessage,
88349                     reference: showReference,
88350                     entityIds: [entity.id],
88351                     dynamicFixes: function() {
88352                         return [
88353                             new validationIssueFix({
88354                                 icon: 'iD-operation-delete',
88355                                 title: t('issues.fix.' + fixID + '.title'),
88356                                 onClick: function(context) {
88357                                     context.perform(doUpgrade, t('issues.fix.upgrade_tags.annotation'));
88358                                 }
88359                             })
88360                         ];
88361                     }
88362                 })];
88363
88364
88365                 function doUpgrade(graph) {
88366                     var currEntity = graph.hasEntity(entity.id);
88367                     if (!currEntity) { return graph; }
88368
88369                     var newTags = Object.assign({}, currEntity.tags);  // shallow copy
88370                     tagDiff.forEach(function(diff) {
88371                         if (diff.type === '-') {
88372                             delete newTags[diff.key];
88373                         } else if (diff.type === '+') {
88374                             newTags[diff.key] = diff.newVal;
88375                         }
88376                     });
88377
88378                     return actionChangeTags(currEntity.id, newTags)(graph);
88379                 }
88380
88381
88382                 function showMessage(context) {
88383                     var currEntity = context.hasEntity(this.entityIds[0]);
88384                     if (!currEntity) { return ''; }
88385
88386                     return t('issues.private_data.contact.message',
88387                         { feature: utilDisplayLabel(currEntity, context) }
88388                     );
88389                 }
88390
88391
88392                 function showReference(selection) {
88393                     var enter = selection.selectAll('.issue-reference')
88394                         .data([0])
88395                         .enter();
88396
88397                     enter
88398                         .append('div')
88399                         .attr('class', 'issue-reference')
88400                         .text(t('issues.private_data.reference'));
88401
88402                     enter
88403                         .append('strong')
88404                         .text(t('issues.suggested'));
88405
88406                     enter
88407                         .append('table')
88408                         .attr('class', 'tagDiff-table')
88409                         .selectAll('.tagDiff-row')
88410                         .data(tagDiff)
88411                         .enter()
88412                         .append('tr')
88413                         .attr('class', 'tagDiff-row')
88414                         .append('td')
88415                         .attr('class', function(d) {
88416                             var klass = d.type === '+' ? 'add' : 'remove';
88417                             return 'tagDiff-cell tagDiff-cell-' + klass;
88418                         })
88419                         .text(function(d) { return d.display; });
88420                 }
88421             };
88422
88423
88424             validation.type = type;
88425
88426             return validation;
88427         }
88428
88429         function validationSuspiciousName() {
88430             var type = 'suspicious_name';
88431
88432             // known list of generic names (e.g. "bar")
88433             var discardNamesRegexes = filters.discardNames.map(function(discardName) {
88434                 return new RegExp(discardName, 'i');
88435             });
88436
88437             var keysToTestForGenericValues = ['amenity', 'building', 'leisure', 'man_made', 'shop', 'tourism'];
88438
88439             function isDiscardedSuggestionName(lowercaseName) {
88440                 for (var i = 0; i < discardNamesRegexes.length; i++) {
88441                     if (discardNamesRegexes[i].test(lowercaseName)) {
88442                         return true;
88443                     }
88444                 }
88445                 return false;
88446             }
88447
88448             // test if the name is just the key or tag value (e.g. "park")
88449             function nameMatchesRawTag(lowercaseName, tags) {
88450                 var i, key, val;
88451                 for (i = 0; i < keysToTestForGenericValues.length; i++) {
88452                     key = keysToTestForGenericValues[i];
88453                     val = tags[key];
88454                     if (val) {
88455                         val = val.toLowerCase();
88456                         if (key === lowercaseName ||
88457                             val === lowercaseName ||
88458                             key.replace(/\_/g, ' ') === lowercaseName ||
88459                             val.replace(/\_/g, ' ') === lowercaseName) {
88460                             return true;
88461                         }
88462                     }
88463                 }
88464                 return false;
88465             }
88466
88467             function isGenericName(name, tags) {
88468                 name = name.toLowerCase();
88469                 return nameMatchesRawTag(name, tags) || isDiscardedSuggestionName(name);
88470             }
88471
88472             function makeGenericNameIssue(entityId, nameKey, genericName, langCode) {
88473                 return new validationIssue({
88474                     type: type,
88475                     subtype: 'generic_name',
88476                     severity: 'warning',
88477                     message: function(context) {
88478                         var entity = context.hasEntity(this.entityIds[0]);
88479                         if (!entity) { return ''; }
88480                         var preset = utilPreset(entity, context);
88481                         var langName = langCode && languageName(langCode);
88482                         return t('issues.generic_name.message' + (langName ? '_language' : ''),
88483                             { feature: preset.name(), name: genericName, language: langName }
88484                         );
88485                     },
88486                     reference: showReference,
88487                     entityIds: [entityId],
88488                     hash: nameKey + '=' + genericName,
88489                     dynamicFixes: function() {
88490                         return [
88491                             new validationIssueFix({
88492                                 icon: 'iD-operation-delete',
88493                                 title: t('issues.fix.remove_the_name.title'),
88494                                 onClick: function(context) {
88495                                     var entityId = this.issue.entityIds[0];
88496                                     var entity = context.entity(entityId);
88497                                     var tags = Object.assign({}, entity.tags);   // shallow copy
88498                                     delete tags[nameKey];
88499                                     context.perform(
88500                                         actionChangeTags(entityId, tags),
88501                                         t('issues.fix.remove_generic_name.annotation')
88502                                     );
88503                                 }
88504                             })
88505                         ];
88506                     }
88507                 });
88508
88509                 function showReference(selection) {
88510                     selection.selectAll('.issue-reference')
88511                         .data([0])
88512                         .enter()
88513                         .append('div')
88514                         .attr('class', 'issue-reference')
88515                         .text(t('issues.generic_name.reference'));
88516                 }
88517             }
88518
88519             function makeIncorrectNameIssue(entityId, nameKey, incorrectName, langCode) {
88520                 return new validationIssue({
88521                     type: type,
88522                     subtype: 'not_name',
88523                     severity: 'warning',
88524                     message: function(context) {
88525                         var entity = context.hasEntity(this.entityIds[0]);
88526                         if (!entity) { return ''; }
88527                         var preset = utilPreset(entity, context);
88528                         var langName = langCode && languageName(langCode);
88529                         return t('issues.incorrect_name.message' + (langName ? '_language' : ''),
88530                             { feature: preset.name(), name: incorrectName, language: langName }
88531                         );
88532                     },
88533                     reference: showReference,
88534                     entityIds: [entityId],
88535                     hash: nameKey + '=' + incorrectName,
88536                     dynamicFixes: function() {
88537                         return [
88538                             new validationIssueFix({
88539                                 icon: 'iD-operation-delete',
88540                                 title: t('issues.fix.remove_the_name.title'),
88541                                 onClick: function(context) {
88542                                     var entityId = this.issue.entityIds[0];
88543                                     var entity = context.entity(entityId);
88544                                     var tags = Object.assign({}, entity.tags);   // shallow copy
88545                                     delete tags[nameKey];
88546                                     context.perform(
88547                                         actionChangeTags(entityId, tags),
88548                                         t('issues.fix.remove_mistaken_name.annotation')
88549                                     );
88550                                 }
88551                             })
88552                         ];
88553                     }
88554                 });
88555
88556                 function showReference(selection) {
88557                     selection.selectAll('.issue-reference')
88558                         .data([0])
88559                         .enter()
88560                         .append('div')
88561                         .attr('class', 'issue-reference')
88562                         .text(t('issues.generic_name.reference'));
88563                 }
88564             }
88565
88566
88567             var validation = function checkGenericName(entity) {
88568                 // a generic name is okay if it's a known brand or entity
88569                 if (entity.hasWikidata()) { return []; }
88570
88571                 var issues = [];
88572
88573                 var notNames = (entity.tags['not:name'] || '').split(';');
88574
88575                 for (var key in entity.tags) {
88576                     var m = key.match(/^name(?:(?::)([a-zA-Z_-]+))?$/);
88577                     if (!m) { continue; }
88578
88579                     var langCode = m.length >= 2 ? m[1] : null;
88580
88581                     var value = entity.tags[key];
88582                     if (notNames.length) {
88583                         for (var i in notNames) {
88584                             var notName = notNames[i];
88585                             if (notName && value === notName) {
88586                                 issues.push(makeIncorrectNameIssue(entity.id, key, value, langCode));
88587                                 continue;
88588                             }
88589                         }
88590                     }
88591                     if (isGenericName(value, entity.tags)) {
88592                         issues.push(makeGenericNameIssue(entity.id, key, value, langCode));
88593                     }
88594                 }
88595
88596                 return issues;
88597             };
88598
88599             validation.type = type;
88600
88601             return validation;
88602         }
88603
88604         function validationUnsquareWay(context) {
88605             var type = 'unsquare_way';
88606             var DEFAULT_DEG_THRESHOLD = 5;   // see also issues.js
88607
88608             // use looser epsilon for detection to reduce warnings of buildings that are essentially square already
88609             var epsilon = 0.05;
88610             var nodeThreshold = 10;
88611
88612             function isBuilding(entity, graph) {
88613                 if (entity.type !== 'way' || entity.geometry(graph) !== 'area') { return false; }
88614                 return entity.tags.building && entity.tags.building !== 'no';
88615             }
88616
88617
88618             var validation = function checkUnsquareWay(entity, graph) {
88619
88620                 if (!isBuilding(entity, graph)) { return []; }
88621
88622                 // don't flag ways marked as physically unsquare
88623                 if (entity.tags.nonsquare === 'yes') { return []; }
88624
88625                 var isClosed = entity.isClosed();
88626                 if (!isClosed) { return []; }        // this building has bigger problems
88627
88628                 // don't flag ways with lots of nodes since they are likely detail-mapped
88629                 var nodes = graph.childNodes(entity).slice();    // shallow copy
88630                 if (nodes.length > nodeThreshold + 1) { return []; }   // +1 because closing node appears twice
88631
88632                 // ignore if not all nodes are fully downloaded
88633                 var osm = services$1.osm;
88634                 if (!osm || nodes.some(function(node) { return !osm.isDataLoaded(node.loc); })) { return []; }
88635
88636                 // don't flag connected ways to avoid unresolvable unsquare loops
88637                 var hasConnectedSquarableWays = nodes.some(function(node) {
88638                     return graph.parentWays(node).some(function(way) {
88639                         if (way.id === entity.id) { return false; }
88640                         if (isBuilding(way, graph)) { return true; }
88641                         return graph.parentRelations(way).some(function(parentRelation) {
88642                             return parentRelation.isMultipolygon() &&
88643                                 parentRelation.tags.building &&
88644                                 parentRelation.tags.building !== 'no';
88645                         });
88646                     });
88647                 });
88648                 if (hasConnectedSquarableWays) { return []; }
88649
88650
88651                 // user-configurable square threshold
88652                 var storedDegreeThreshold = context.storage('validate-square-degrees');
88653                 var degreeThreshold = isNaN(storedDegreeThreshold) ? DEFAULT_DEG_THRESHOLD : parseFloat(storedDegreeThreshold);
88654
88655                 var points = nodes.map(function(node) { return context.projection(node.loc); });
88656                 if (!geoOrthoCanOrthogonalize(points, isClosed, epsilon, degreeThreshold, true)) { return []; }
88657
88658                 var autoArgs;
88659                 // don't allow autosquaring features linked to wikidata
88660                 if (!entity.tags.wikidata) {
88661                     // use same degree threshold as for detection
88662                     var autoAction = actionOrthogonalize(entity.id, context.projection, undefined, degreeThreshold);
88663                     autoAction.transitionable = false;  // when autofixing, do it instantly
88664                     autoArgs = [autoAction, t('operations.orthogonalize.annotation.feature.single')];
88665                 }
88666
88667                 return [new validationIssue({
88668                     type: type,
88669                     subtype: 'building',
88670                     severity: 'warning',
88671                     message: function(context) {
88672                         var entity = context.hasEntity(this.entityIds[0]);
88673                         return entity ? t('issues.unsquare_way.message', { feature: utilDisplayLabel(entity, context) }) : '';
88674                     },
88675                     reference: showReference,
88676                     entityIds: [entity.id],
88677                     hash: JSON.stringify(autoArgs !== undefined) + degreeThreshold,
88678                     dynamicFixes: function() {
88679                         return [
88680                             new validationIssueFix({
88681                                 icon: 'iD-operation-orthogonalize',
88682                                 title: t('issues.fix.square_feature.title'),
88683                                 autoArgs: autoArgs,
88684                                 onClick: function(context, completionHandler) {
88685                                     var entityId = this.issue.entityIds[0];
88686                                     // use same degree threshold as for detection
88687                                     context.perform(
88688                                         actionOrthogonalize(entityId, context.projection, undefined, degreeThreshold),
88689                                         t('operations.orthogonalize.annotation.feature.single')
88690                                     );
88691                                     // run after the squaring transition (currently 150ms)
88692                                     window.setTimeout(function() { completionHandler(); }, 175);
88693                                 }
88694                             }) ];
88695                     }
88696                 })];
88697
88698                 function showReference(selection) {
88699                     selection.selectAll('.issue-reference')
88700                         .data([0])
88701                         .enter()
88702                         .append('div')
88703                         .attr('class', 'issue-reference')
88704                         .text(t('issues.unsquare_way.buildings.reference'));
88705                 }
88706             };
88707
88708             validation.type = type;
88709
88710             return validation;
88711         }
88712
88713
88714
88715         var Validations = /*#__PURE__*/Object.freeze({
88716                 __proto__: null,
88717                 validationAlmostJunction: validationAlmostJunction,
88718                 validationCloseNodes: validationCloseNodes,
88719                 validationCrossingWays: validationCrossingWays,
88720                 validationDisconnectedWay: validationDisconnectedWay,
88721                 validationFormatting: validationFormatting,
88722                 validationHelpRequest: validationHelpRequest,
88723                 validationImpossibleOneway: validationImpossibleOneway,
88724                 validationIncompatibleSource: validationIncompatibleSource,
88725                 validationMaprules: validationMaprules,
88726                 validationMismatchedGeometry: validationMismatchedGeometry,
88727                 validationMissingRole: validationMissingRole,
88728                 validationMissingTag: validationMissingTag,
88729                 validationOutdatedTags: validationOutdatedTags,
88730                 validationPrivateData: validationPrivateData,
88731                 validationSuspiciousName: validationSuspiciousName,
88732                 validationUnsquareWay: validationUnsquareWay
88733         });
88734
88735         function coreValidator(context) {
88736             var dispatch$1 = dispatch('validated', 'focusedIssue');
88737             var validator = utilRebind({}, dispatch$1, 'on');
88738
88739             var _rules = {};
88740             var _disabledRules = {};
88741
88742             var _ignoredIssueIDs = {};          // issue.id -> true
88743             var _baseCache = validationCache(); // issues before any user edits
88744             var _headCache = validationCache(); // issues after all user edits
88745             var _validatedGraph = null;
88746             var _deferred = new Set();
88747
88748             //
88749             // initialize the validator rulesets
88750             //
88751             validator.init = function() {
88752                 Object.values(Validations).forEach(function(validation) {
88753                     if (typeof validation !== 'function') { return; }
88754
88755                     var fn = validation(context);
88756                     var key = fn.type;
88757                     _rules[key] = fn;
88758                 });
88759
88760                 var disabledRules = context.storage('validate-disabledRules');
88761                 if (disabledRules) {
88762                     disabledRules.split(',')
88763                         .forEach(function(key) { _disabledRules[key] = true; });
88764                 }
88765             };
88766
88767
88768             //
88769             // clear caches, called whenever iD resets after a save
88770             //
88771             validator.reset = function() {
88772                 Array.from(_deferred).forEach(function(handle) {
88773                     window.cancelIdleCallback(handle);
88774                     _deferred.delete(handle);
88775                 });
88776
88777                 // clear caches
88778                 _ignoredIssueIDs = {};
88779                 _baseCache = validationCache();
88780                 _headCache = validationCache();
88781                 _validatedGraph = null;
88782             };
88783
88784             validator.resetIgnoredIssues = function() {
88785                 _ignoredIssueIDs = {};
88786                 // reload UI
88787                 dispatch$1.call('validated');
88788             };
88789
88790
88791             // must update issues when the user changes the unsquare thereshold
88792             validator.reloadUnsquareIssues = function() {
88793
88794                 reloadUnsquareIssues(_headCache, context.graph());
88795                 reloadUnsquareIssues(_baseCache, context.history().base());
88796
88797                 dispatch$1.call('validated');
88798             };
88799
88800             function reloadUnsquareIssues(cache, graph) {
88801
88802                 var checkUnsquareWay = _rules.unsquare_way;
88803                 if (typeof checkUnsquareWay !== 'function') { return; }
88804
88805                 // uncache existing
88806                 cache.uncacheIssuesOfType('unsquare_way');
88807
88808                 var buildings = context.history().tree().intersects(geoExtent([-180,-90],[180, 90]), graph)  // everywhere
88809                     .filter(function(entity) {
88810                         return entity.type === 'way' && entity.tags.building && entity.tags.building !== 'no';
88811                     });
88812
88813                 // rerun for all buildings
88814                 buildings.forEach(function(entity) {
88815                     var detected = checkUnsquareWay(entity, graph);
88816                     if (detected.length !== 1) { return; }
88817                     var issue = detected[0];
88818                     if (!cache.issuesByEntityID[entity.id]) {
88819                         cache.issuesByEntityID[entity.id] = new Set();
88820                     }
88821                     cache.issuesByEntityID[entity.id].add(issue.id);
88822                     cache.issuesByIssueID[issue.id] = issue;
88823                 });
88824             }
88825
88826             // options = {
88827             //     what: 'all',     // 'all' or 'edited'
88828             //     where: 'all',   // 'all' or 'visible'
88829             //     includeIgnored: false   // true, false, or 'only'
88830             //     includeDisabledRules: false   // true, false, or 'only'
88831             // };
88832             validator.getIssues = function(options) {
88833                 var opts = Object.assign({ what: 'all', where: 'all', includeIgnored: false, includeDisabledRules: false }, options);
88834                 var issues = Object.values(_headCache.issuesByIssueID);
88835                 var view = context.map().extent();
88836
88837                 return issues.filter(function(issue) {
88838                     if (opts.includeDisabledRules === 'only' && !_disabledRules[issue.type]) { return false; }
88839                     if (!opts.includeDisabledRules && _disabledRules[issue.type]) { return false; }
88840
88841                     if (opts.includeIgnored === 'only' && !_ignoredIssueIDs[issue.id]) { return false; }
88842                     if (!opts.includeIgnored && _ignoredIssueIDs[issue.id]) { return false; }
88843
88844                     // Sanity check:  This issue may be for an entity that not longer exists.
88845                     // If we detect this, uncache and return false so it is not included..
88846                     var entityIds = issue.entityIds || [];
88847                     for (var i = 0; i < entityIds.length; i++) {
88848                         var entityId = entityIds[i];
88849                         if (!context.hasEntity(entityId)) {
88850                             delete _headCache.issuesByEntityID[entityId];
88851                             delete _headCache.issuesByIssueID[issue.id];
88852                             return false;
88853                         }
88854                     }
88855
88856                     if (opts.what === 'edited' && _baseCache.issuesByIssueID[issue.id]) { return false; }
88857
88858                     if (opts.where === 'visible') {
88859                         var extent = issue.extent(context.graph());
88860                         if (!view.intersects(extent)) { return false; }
88861                     }
88862
88863                     return true;
88864                 });
88865             };
88866
88867             validator.getResolvedIssues = function() {
88868                 var baseIssues = Object.values(_baseCache.issuesByIssueID);
88869                 return baseIssues.filter(function(issue) {
88870                     return !_headCache.issuesByIssueID[issue.id];
88871                 });
88872             };
88873
88874             validator.focusIssue = function(issue) {
88875                 var extent = issue.extent(context.graph());
88876
88877                 if (extent) {
88878                     var setZoom = Math.max(context.map().zoom(), 19);
88879                     context.map().unobscuredCenterZoomEase(extent.center(), setZoom);
88880
88881                     // select the first entity
88882                     if (issue.entityIds && issue.entityIds.length) {
88883                         window.setTimeout(function() {
88884                             var ids = issue.entityIds;
88885                             context.enter(modeSelect(context, [ids[0]]));
88886                             dispatch$1.call('focusedIssue', this, issue);
88887                         }, 250);  // after ease
88888                     }
88889                 }
88890             };
88891
88892
88893             validator.getIssuesBySeverity = function(options) {
88894                 var groups = utilArrayGroupBy(validator.getIssues(options), 'severity');
88895                 groups.error = groups.error || [];
88896                 groups.warning = groups.warning || [];
88897                 return groups;
88898             };
88899
88900             // show some issue types in a particular order
88901             var orderedIssueTypes = [
88902                 // flag missing data first
88903                 'missing_tag', 'missing_role',
88904                 // then flag identity issues
88905                 'outdated_tags', 'mismatched_geometry',
88906                 // flag geometry issues where fixing them might solve connectivity issues
88907                 'crossing_ways', 'almost_junction',
88908                 // then flag connectivity issues
88909                 'disconnected_way', 'impossible_oneway'
88910             ];
88911
88912             validator.getEntityIssues = function(entityID, options) {
88913                 var cache = _headCache;
88914
88915                 var issueIDs = cache.issuesByEntityID[entityID];
88916                 if (!issueIDs) { return []; }
88917
88918                 var opts = options || {};
88919
88920                 return Array.from(issueIDs)
88921                     .map(function(id) { return cache.issuesByIssueID[id]; })
88922                     .filter(function(issue) {
88923                         if (opts.includeDisabledRules === 'only' && !_disabledRules[issue.type]) { return false; }
88924                         if (!opts.includeDisabledRules && _disabledRules[issue.type]) { return false; }
88925
88926                         if (opts.includeIgnored === 'only' && !_ignoredIssueIDs[issue.id]) { return false; }
88927                         if (!opts.includeIgnored && _ignoredIssueIDs[issue.id]) { return false; }
88928
88929                         return true;
88930                     }).sort(function(issue1, issue2) {
88931                         if (issue1.type === issue2.type) {
88932                             // issues of the same type, sort deterministically
88933                             return issue1.id < issue2.id ? -1 : 1;
88934                         }
88935                         var index1 = orderedIssueTypes.indexOf(issue1.type);
88936                         var index2 = orderedIssueTypes.indexOf(issue2.type);
88937                         if (index1 !== -1 && index2 !== -1) {
88938                             // both issue types have explicit sort orders
88939                             return index1 - index2;
88940                         } else if (index1 === -1 && index2 === -1) {
88941                             // neither issue type has an explicit sort order, sort by type
88942                             return issue1.type < issue2.type ? -1 : 1;
88943                         } else {
88944                             // order explicit types before everything else
88945                             return index1 !== -1 ? -1 : 1;
88946                         }
88947                     });
88948             };
88949
88950
88951             validator.getRuleKeys = function() {
88952                 return Object.keys(_rules)
88953                     .filter(function(key) { return key !== 'maprules'; })
88954                     .sort(function(key1, key2) {
88955                         // alphabetize by localized title
88956                         return t('issues.' + key1 + '.title') < t('issues.' + key2 + '.title') ? -1 : 1;
88957                     });
88958             };
88959
88960
88961             validator.isRuleEnabled = function(key) {
88962                 return !_disabledRules[key];
88963             };
88964
88965
88966             validator.toggleRule = function(key) {
88967                 if (_disabledRules[key]) {
88968                     delete _disabledRules[key];
88969                 } else {
88970                     _disabledRules[key] = true;
88971                 }
88972
88973                 context.storage('validate-disabledRules', Object.keys(_disabledRules).join(','));
88974                 validator.validate();
88975             };
88976
88977
88978             validator.disableRules = function(keys) {
88979                 _disabledRules = {};
88980                 keys.forEach(function(k) {
88981                     _disabledRules[k] = true;
88982                 });
88983
88984                 context.storage('validate-disabledRules', Object.keys(_disabledRules).join(','));
88985                 validator.validate();
88986             };
88987
88988
88989             validator.ignoreIssue = function(id) {
88990                 _ignoredIssueIDs[id] = true;
88991             };
88992
88993
88994             //
88995             // Run validation on a single entity for the given graph
88996             //
88997             function validateEntity(entity, graph) {
88998                 var entityIssues = [];
88999
89000                 // runs validation and appends resulting issues
89001                 function runValidation(key) {
89002
89003                     var fn = _rules[key];
89004                     if (typeof fn !== 'function') {
89005                         console.error('no such validation rule = ' + key);  // eslint-disable-line no-console
89006                         return;
89007                     }
89008
89009                     var detected = fn(entity, graph);
89010                     entityIssues = entityIssues.concat(detected);
89011                 }
89012
89013                 // run all rules
89014                 Object.keys(_rules).forEach(runValidation);
89015
89016                 return entityIssues;
89017             }
89018
89019             function entityIDsToValidate(entityIDs, graph) {
89020                 var processedIDs = new Set();
89021                 return entityIDs.reduce(function(acc, entityID) {
89022                     // keep redundancy check separate from `acc` because an `entityID`
89023                     // could have been added to `acc` as a related entity through an earlier pass
89024                     if (processedIDs.has(entityID)) { return acc; }
89025                     processedIDs.add(entityID);
89026
89027                     var entity = graph.hasEntity(entityID);
89028                     if (!entity) { return acc; }
89029
89030                     acc.add(entityID);
89031
89032                     var checkParentRels = [entity];
89033
89034                     if (entity.type === 'node') {
89035                         graph.parentWays(entity).forEach(function(parentWay) {
89036                             acc.add(parentWay.id); // include parent ways
89037                             checkParentRels.push(parentWay);
89038                         });
89039                     } else if (entity.type === 'relation') {
89040                         entity.members.forEach(function(member) {
89041                             acc.add(member.id); // include members
89042                         });
89043                     } else if (entity.type === 'way') {
89044                         entity.nodes.forEach(function(nodeID) {
89045                             acc.add(nodeID); // include child nodes
89046                             graph._parentWays[nodeID].forEach(function(wayID) {
89047                                 acc.add(wayID); // include connected ways
89048                             });
89049                         });
89050                     }
89051
89052                     checkParentRels.forEach(function(entity) {   // include parent relations
89053                         if (entity.type !== 'relation') {        // but not super-relations
89054                             graph.parentRelations(entity).forEach(function(parentRelation) {
89055                                 acc.add(parentRelation.id);
89056                             });
89057                         }
89058                     });
89059
89060                     return acc;
89061
89062                 }, new Set());
89063             }
89064
89065             //
89066             // Run validation for several entities, supplied `entityIDs`,
89067             // against `graph` for the given `cache`
89068             //
89069             function validateEntities(entityIDs, graph, cache) {
89070
89071                 // clear caches for existing issues related to these entities
89072                 entityIDs.forEach(cache.uncacheEntityID);
89073
89074                 // detect new issues and update caches
89075                 entityIDs.forEach(function(entityID) {
89076                     var entity = graph.hasEntity(entityID);
89077                     // don't validate deleted entities
89078                     if (!entity) { return; }
89079
89080                     var issues = validateEntity(entity, graph);
89081                     cache.cacheIssues(issues);
89082                 });
89083             }
89084
89085
89086             //
89087             // Validates anything that has changed since the last time it was run.
89088             // Also updates the "validatedGraph" to be the current graph
89089             // and dispatches a `validated` event when finished.
89090             //
89091             validator.validate = function() {
89092
89093                 var currGraph = context.graph();
89094                 _validatedGraph = _validatedGraph || context.history().base();
89095                 if (currGraph === _validatedGraph) {
89096                     dispatch$1.call('validated');
89097                     return;
89098                 }
89099                 var oldGraph = _validatedGraph;
89100                 var difference = coreDifference(oldGraph, currGraph);
89101                 _validatedGraph = currGraph;
89102
89103                 var createdAndModifiedEntityIDs = difference.extantIDs(true);   // created/modified (true = w/relation members)
89104                 var entityIDsToCheck = entityIDsToValidate(createdAndModifiedEntityIDs, currGraph);
89105
89106                 // check modified and deleted entities against the old graph in order to update their related entities
89107                 // (e.g. deleting the only highway connected to a road should create a disconnected highway issue)
89108                 var modifiedAndDeletedEntityIDs = difference.deleted().concat(difference.modified())
89109                     .map(function(entity) { return entity.id; });
89110                 var entityIDsToCheckForOldGraph = entityIDsToValidate(modifiedAndDeletedEntityIDs, oldGraph);
89111
89112                 // concat the sets
89113                 entityIDsToCheckForOldGraph.forEach(entityIDsToCheck.add, entityIDsToCheck);
89114
89115                 validateEntities(entityIDsToCheck, context.graph(), _headCache);
89116
89117                 dispatch$1.call('validated');
89118             };
89119
89120
89121             // WHEN TO RUN VALIDATION:
89122             // When graph changes:
89123             context.history()
89124                 .on('restore.validator', validator.validate)   // restore saved history
89125                 .on('undone.validator', validator.validate)    // undo
89126                 .on('redone.validator', validator.validate);   // redo
89127                 // but not on 'change' (e.g. while drawing)
89128
89129             // When user chages editing modes:
89130             context
89131                 .on('exit.validator', validator.validate);
89132
89133             // When merging fetched data:
89134             context.history()
89135                 .on('merge.validator', function(entities) {
89136                     if (!entities) { return; }
89137                     var handle = window.requestIdleCallback(function() {
89138                         var entityIDs = entities.map(function(entity) { return entity.id; });
89139                         var headGraph = context.graph();
89140                         validateEntities(entityIDsToValidate(entityIDs, headGraph), headGraph, _headCache);
89141
89142                         var baseGraph = context.history().base();
89143                         validateEntities(entityIDsToValidate(entityIDs, baseGraph), baseGraph, _baseCache);
89144
89145                         dispatch$1.call('validated');
89146                     });
89147                     _deferred.add(handle);
89148                 });
89149
89150
89151             return validator;
89152         }
89153
89154
89155         function validationCache() {
89156
89157             var cache = {
89158                 issuesByIssueID: {},  // issue.id -> issue
89159                 issuesByEntityID: {} // entity.id -> set(issue.id)
89160             };
89161
89162             cache.cacheIssues = function(issues) {
89163                 issues.forEach(function(issue) {
89164                     var entityIds = issue.entityIds || [];
89165                     entityIds.forEach(function(entityId) {
89166                         if (!cache.issuesByEntityID[entityId]) {
89167                             cache.issuesByEntityID[entityId] = new Set();
89168                         }
89169                         cache.issuesByEntityID[entityId].add(issue.id);
89170                     });
89171                     cache.issuesByIssueID[issue.id] = issue;
89172                 });
89173             };
89174
89175             cache.uncacheIssue = function(issue) {
89176                 // When multiple entities are involved (e.g. crossing_ways),
89177                 // remove this issue from the other entity caches too..
89178                 var entityIds = issue.entityIds || [];
89179                 entityIds.forEach(function(entityId) {
89180                     if (cache.issuesByEntityID[entityId]) {
89181                         cache.issuesByEntityID[entityId].delete(issue.id);
89182                     }
89183                 });
89184                 delete cache.issuesByIssueID[issue.id];
89185             };
89186
89187             cache.uncacheIssues = function(issues) {
89188                 issues.forEach(cache.uncacheIssue);
89189             };
89190
89191             cache.uncacheIssuesOfType = function(type) {
89192                 var issuesOfType = Object.values(cache.issuesByIssueID)
89193                     .filter(function(issue) { return issue.type === type; });
89194                 cache.uncacheIssues(issuesOfType);
89195             };
89196
89197             //
89198             // Remove a single entity and all its related issues from the caches
89199             //
89200             cache.uncacheEntityID = function(entityID) {
89201                 var issueIDs = cache.issuesByEntityID[entityID];
89202                 if (!issueIDs) { return; }
89203
89204                 issueIDs.forEach(function(issueID) {
89205                     var issue = cache.issuesByIssueID[issueID];
89206                     if (issue) {
89207                         cache.uncacheIssue(issue);
89208                     } else {
89209                         delete cache.issuesByIssueID[issueID];
89210                     }
89211                 });
89212
89213                 delete cache.issuesByEntityID[entityID];
89214             };
89215
89216             return cache;
89217         }
89218
89219         function presetCollection(collection) {
89220             var maxSearchResults = 50;
89221
89222             var presets = {
89223
89224                 collection: collection,
89225
89226
89227                 item: function(id) {
89228                     return this.collection.find(function(d) {
89229                         return d.id === id;
89230                     });
89231                 },
89232
89233                 index: function(id) {
89234                     return this.collection.findIndex(function(d) {
89235                         return d.id === id;
89236                     });
89237                 },
89238
89239                 matchGeometry: function(geometry) {
89240                     return presetCollection(this.collection.filter(function(d) {
89241                         return d.matchGeometry(geometry);
89242                     }));
89243                 },
89244
89245                 matchAnyGeometry: function(geometries) {
89246                     return presetCollection(this.collection.filter(function(d) {
89247                         return geometries.some(function(geometry) {
89248                             return d.matchGeometry(geometry);
89249                         });
89250                     }));
89251                 },
89252
89253                 fallback: function(geometry) {
89254                     var id = geometry;
89255                     if (id === 'vertex') { id = 'point'; }
89256                     return this.item(id);
89257                 },
89258
89259                 search: function(value, geometry, countryCode) {
89260                     if (!value) { return this; }
89261
89262                     value = value.toLowerCase().trim();
89263
89264                     // match at name beginning or just after a space (e.g. "office" -> match "Law Office")
89265                     function leading(a) {
89266                         var index = a.indexOf(value);
89267                         return index === 0 || a[index - 1] === ' ';
89268                     }
89269
89270                     // match at name beginning only
89271                     function leadingStrict(a) {
89272                         var index = a.indexOf(value);
89273                         return index === 0;
89274                     }
89275
89276                     function sortNames(a, b) {
89277                         var aCompare = (a.suggestion ? a.originalName : a.name()).toLowerCase();
89278                         var bCompare = (b.suggestion ? b.originalName : b.name()).toLowerCase();
89279
89280                         // priority if search string matches preset name exactly - #4325
89281                         if (value === aCompare) { return -1; }
89282                         if (value === bCompare) { return 1; }
89283
89284                         // priority for higher matchScore
89285                         var i = b.originalScore - a.originalScore;
89286                         if (i !== 0) { return i; }
89287
89288                         // priority if search string appears earlier in preset name
89289                         i = aCompare.indexOf(value) - bCompare.indexOf(value);
89290                         if (i !== 0) { return i; }
89291
89292                         // priority for shorter preset names
89293                         return aCompare.length - bCompare.length;
89294                     }
89295
89296                     var pool = this.collection;
89297                     if (countryCode) {
89298                         pool = pool.filter(function(a) {
89299                             if (a.countryCodes && a.countryCodes.indexOf(countryCode) === -1) {
89300                                 return false;
89301                             }
89302                             if (a.notCountryCodes && a.notCountryCodes.indexOf(countryCode) !== -1) {
89303                                 return false;
89304                             }
89305                             return true;
89306                         });
89307                     }
89308                     var searchable = pool.filter(function(a) {
89309                         return a.searchable !== false && a.suggestion !== true;
89310                     });
89311                     var suggestions = pool.filter(function(a) {
89312                         return a.suggestion === true;
89313                     });
89314
89315                     // matches value to preset.name
89316                     var leading_name = searchable
89317                         .filter(function(a) {
89318                             return leading(a.name().toLowerCase());
89319                         }).sort(sortNames);
89320
89321                     // matches value to preset.terms values
89322                     var leading_terms = searchable
89323                         .filter(function(a) {
89324                             return (a.terms() || []).some(leading);
89325                         });
89326
89327                     // matches value to preset.tags values
89328                     var leading_tag_values = searchable
89329                         .filter(function(a) {
89330                             return Object.values(a.tags || {})
89331                                 .filter(function(val) { return val !== '*'; })
89332                                 .some(leading);
89333                         });
89334
89335                     var leading_suggestions = suggestions
89336                         .filter(function(a) {
89337                             return leadingStrict(a.originalName.toLowerCase());
89338                         }).sort(sortNames);
89339
89340                     // finds close matches to value in preset.name
89341                     var similar_name = searchable
89342                         .map(function(a) {
89343                             return { preset: a, dist: utilEditDistance(value, a.name()) };
89344                         }).filter(function(a) {
89345                             return a.dist + Math.min(value.length - a.preset.name().length, 0) < 3;
89346                         }).sort(function(a, b) {
89347                             return a.dist - b.dist;
89348                         }).map(function(a) {
89349                             return a.preset;
89350                         });
89351
89352                     // finds close matches to value in preset.terms
89353                     var similar_terms = searchable
89354                         .filter(function(a) {
89355                             return (a.terms() || []).some(function(b) {
89356                                 return utilEditDistance(value, b) + Math.min(value.length - b.length, 0) < 3;
89357                             });
89358                         });
89359
89360                     var similar_suggestions = suggestions
89361                         .map(function(a) {
89362                             return { preset: a, dist: utilEditDistance(value, a.originalName.toLowerCase()) };
89363                         }).filter(function(a) {
89364                             return a.dist + Math.min(value.length - a.preset.originalName.length, 0) < 1;
89365                         }).sort(function(a, b) {
89366                             return a.dist - b.dist;
89367                         }).map(function(a) {
89368                             return a.preset;
89369                         });
89370
89371                     var results = leading_name.concat(
89372                         leading_suggestions,
89373                         leading_terms,
89374                         leading_tag_values,
89375                         similar_name,
89376                         similar_suggestions,
89377                         similar_terms
89378                     ).slice(0, maxSearchResults - 1);
89379
89380                     if (geometry) {
89381                         if (typeof geometry === 'string') {
89382                             results.push(presets.fallback(geometry));
89383                         } else {
89384                             geometry.forEach(function(geom) {
89385                                 results.push(presets.fallback(geom));
89386                             });
89387                         }
89388                     }
89389
89390                     return presetCollection(utilArrayUniq(results));
89391                 }
89392             };
89393
89394
89395             return presets;
89396         }
89397
89398         function presetCategory(id, category, all) {
89399             category = Object.assign({}, category);   // shallow copy
89400
89401             category.id = id;
89402
89403
89404             category.members = presetCollection(category.members.map(function(id) {
89405                 return all.item(id);
89406             }));
89407
89408
89409             category.geometry = category.members.collection.reduce(function(geometries, preset) {
89410                 for (var index in preset.geometry) {
89411                     var geometry = preset.geometry[index];
89412                     if (geometries.indexOf(geometry) === -1) {
89413                         geometries.push(geometry);
89414                     }
89415                 }
89416                 return geometries;
89417             }, []);
89418
89419
89420             category.matchGeometry = function(geometry) {
89421                 return category.geometry.indexOf(geometry) >= 0;
89422             };
89423
89424
89425             category.matchScore = function() {
89426                 return -1;
89427             };
89428
89429
89430             category.name = function() {
89431                 return t('presets.categories.' + id + '.name', {'default': id});
89432             };
89433
89434
89435             category.terms = function() {
89436                 return [];
89437             };
89438
89439
89440             return category;
89441         }
89442
89443         function presetField(id, field) {
89444             field = Object.assign({}, field);   // shallow copy
89445
89446             field.id = id;
89447
89448             // for use in classes, element ids, css selectors
89449             field.safeid = utilSafeClassName(id);
89450
89451             field.matchGeometry = function(geometry) {
89452                 return !field.geometry || field.geometry === geometry;
89453             };
89454
89455
89456             field.t = function(scope, options) {
89457                 return t('presets.fields.' + id + '.' + scope, options);
89458             };
89459
89460
89461             field.label = function() {
89462                 return field.overrideLabel || field.t('label', {'default': id});
89463             };
89464
89465
89466             var placeholder = field.placeholder;
89467             field.placeholder = function() {
89468                 return field.t('placeholder', {'default': placeholder});
89469             };
89470
89471
89472             field.originalTerms = (field.terms || []).join();
89473
89474             field.terms = function() {
89475                 return field.t('terms', { 'default': field.originalTerms }).toLowerCase().trim().split(/\s*,+\s*/);
89476             };
89477
89478
89479             return field;
89480         }
89481
89482         function presetPreset(id, preset, fields, addable, rawPresets) {
89483             preset = Object.assign({}, preset);   // shallow copy
89484
89485             preset.id = id;
89486
89487             // for use in classes, element ids, css selectors
89488             preset.safeid = utilSafeClassName(id);
89489
89490             preset.parentPresetID = function() {
89491                 var endIndex = preset.id.lastIndexOf('/');
89492                 if (endIndex < 0) { return null; }
89493
89494                 return preset.id.substring(0, endIndex);
89495             };
89496
89497
89498             // For a preset without fields, use the fields of the parent preset.
89499             // Replace {preset} placeholders with the fields of the specified presets.
89500             function resolveFieldInheritance() {
89501
89502                 // Skip `fields` for the keys which define the preset.
89503                 // These are usually `typeCombo` fields like `shop=*`
89504                 function shouldInheritFieldWithID(fieldID) {
89505                     var f = fields[fieldID];
89506                     if (f.key) {
89507                         if (preset.tags[f.key] !== undefined &&
89508                             // inherit anyway if multiple values are allowed or just a checkbox
89509                             f.type !== 'multiCombo' && f.type !== 'semiCombo' && f.type !== 'check') {
89510                             return false;
89511                         }
89512                     }
89513                     return true;
89514                 }
89515
89516                 // returns an array of field IDs to inherit from the given presetID, if found
89517                 function inheritedFieldIDs(presetID, prop) {
89518                     if (!presetID) { return null; }
89519
89520                     var inheritPreset = rawPresets[presetID];
89521                     if (!inheritPreset) { return null; }
89522
89523                     var inheritFieldIDs = inheritPreset[prop] || [];
89524
89525                     if (prop === 'fields') {
89526                         inheritFieldIDs = inheritFieldIDs.filter(shouldInheritFieldWithID);
89527                     }
89528
89529                     return inheritFieldIDs;
89530                 }
89531
89532
89533                 ['fields', 'moreFields'].forEach(function(prop) {
89534                     var fieldIDs = [];
89535                     if (preset[prop] && preset[prop].length) {    // fields were defined
89536                         preset[prop].forEach(function(fieldID) {
89537                             var match = fieldID.match(/\{(.*)\}/);
89538                             if (match !== null) {        // presetID wrapped in braces {}
89539                                 var inheritIDs = inheritedFieldIDs(match[1], prop);
89540                                 if (inheritIDs !== null) {
89541                                     fieldIDs = fieldIDs.concat(inheritIDs);
89542                                 } else {
89543                                     /* eslint-disable no-console */
89544                                     console.log('Cannot resolve presetID ' + match[0] +
89545                                         ' found in ' + preset.id + ' ' + prop);
89546                                     /* eslint-enable no-console */
89547                                 }
89548                             } else {
89549                                 fieldIDs.push(fieldID);  // no braces - just a normal field
89550                             }
89551                         });
89552
89553                     } else {  // no fields defined, so use the parent's if possible
89554                         fieldIDs = inheritedFieldIDs(preset.parentPresetID(), prop);
89555                     }
89556                     // resolve duplicate fields
89557                     fieldIDs = utilArrayUniq(fieldIDs);
89558
89559                     // update this preset with the results
89560                     preset[prop] = fieldIDs;
89561
89562                     // update the raw object to allow for multiple levels of inheritance
89563                     rawPresets[preset.id][prop] = fieldIDs;
89564                 });
89565             }
89566
89567             if (rawPresets) {
89568                 resolveFieldInheritance();
89569             }
89570
89571             preset.fields = (preset.fields || []).map(getFields);
89572             preset.moreFields = (preset.moreFields || []).map(getFields);
89573             preset.geometry = (preset.geometry || []);
89574
89575             addable = addable || false;
89576
89577             function getFields(f) {
89578                 return fields[f];
89579             }
89580
89581
89582             preset.matchGeometry = function(geometry) {
89583                 return preset.geometry.indexOf(geometry) >= 0;
89584             };
89585
89586
89587             preset.originalScore = preset.matchScore || 1;
89588
89589
89590             preset.matchScore = function(entityTags) {
89591                 var tags = preset.tags;
89592                 var seen = {};
89593                 var score = 0;
89594                 var k;
89595
89596                 // match on tags
89597                 for (k in tags) {
89598                     seen[k] = true;
89599                     if (entityTags[k] === tags[k]) {
89600                         score += preset.originalScore;
89601                     } else if (tags[k] === '*' && k in entityTags) {
89602                         score += preset.originalScore / 2;
89603                     } else {
89604                         return -1;
89605                     }
89606                 }
89607
89608                 // boost score for additional matches in addTags - #6802
89609                 var addTags = preset.addTags;
89610                 for (k in addTags) {
89611                     if (!seen[k] && entityTags[k] === addTags[k]) {
89612                         score += preset.originalScore;
89613                     }
89614                 }
89615
89616                 return score;
89617             };
89618
89619
89620             var _textCache = {};
89621
89622             preset.t = function(scope, options) {
89623                 var textID = 'presets.presets.' + id + '.' + scope;
89624
89625                 if (_textCache[textID]) { return _textCache[textID]; }
89626
89627                 var text = t(textID, options);
89628                 _textCache[textID] = text;
89629                 return text;
89630             };
89631
89632
89633             preset.originalName = preset.name || '';
89634
89635
89636             preset.name = function() {
89637                 if (preset.suggestion) {
89638                     var path = id.split('/');
89639                     path.pop();  // remove brand name
89640                     // NOTE: insert an en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
89641                     return preset.originalName + ' – ' + t('presets.presets.' + path.join('/') + '.name');
89642                 }
89643                 return preset.t('name', { 'default': preset.originalName });
89644             };
89645
89646
89647             preset.originalTerms = (preset.terms || []).join();
89648
89649
89650             preset.terms = function() {
89651                 return preset.t('terms', { 'default': preset.originalTerms }).toLowerCase().trim().split(/\s*,+\s*/);
89652             };
89653
89654
89655             preset.isFallback = function() {
89656                 var tagCount = Object.keys(preset.tags).length;
89657                 return tagCount === 0 || (tagCount === 1 && preset.tags.hasOwnProperty('area'));
89658             };
89659
89660             preset.addable = function(val) {
89661                 if (!arguments.length) { return addable; }
89662                 addable = val;
89663                 return addable;
89664             };
89665
89666
89667             var reference = preset.reference || {};
89668             preset.reference = function(geometry) {
89669                 // Lookup documentation on Wikidata...
89670                 var qid = preset.tags.wikidata || preset.tags['brand:wikidata'] || preset.tags['operator:wikidata'];
89671                 if (qid) {
89672                     return { qid: qid };
89673                 }
89674
89675                 // Lookup documentation on OSM Wikibase...
89676                 var key = reference.key || Object.keys(utilObjectOmit(preset.tags, 'name'))[0];
89677                 var value = reference.value || preset.tags[key];
89678
89679                 if (geometry === 'relation' && key === 'type') {
89680                     if (value in preset.tags) {
89681                         key = value;
89682                         value = preset.tags[key];
89683                     } else {
89684                         return { rtype: value };
89685                     }
89686                 }
89687
89688                 if (value === '*') {
89689                     return { key: key };
89690                 } else {
89691                     return { key: key, value: value };
89692                 }
89693             };
89694
89695
89696             preset.removeTags = preset.removeTags || preset.addTags || preset.tags || {};
89697             preset.unsetTags = function(tags, geometry) {
89698                 tags = utilObjectOmit(tags, Object.keys(preset.removeTags));
89699
89700                 for (var f in preset.fields) {
89701                     var field = preset.fields[f];
89702                     if (field.matchGeometry(geometry) && field.default === tags[field.key]) {
89703                         delete tags[field.key];
89704                     }
89705                 }
89706
89707                 delete tags.area;
89708                 return tags;
89709             };
89710
89711
89712             preset.addTags = preset.addTags || preset.tags || {};
89713             preset.setTags = function(tags, geometry, skipFieldDefaults) {
89714                 var addTags = preset.addTags;
89715                 var k;
89716
89717                 tags = Object.assign({}, tags);   // shallow copy
89718
89719                 for (k in addTags) {
89720                     if (addTags[k] === '*') {
89721                         tags[k] = 'yes';
89722                     } else {
89723                         tags[k] = addTags[k];
89724                     }
89725                 }
89726
89727                 // Add area=yes if necessary.
89728                 // This is necessary if the geometry is already an area (e.g. user drew an area) AND any of:
89729                 // 1. chosen preset could be either an area or a line (`barrier=city_wall`)
89730                 // 2. chosen preset doesn't have a key in osmAreaKeys (`railway=station`)
89731                 if (!addTags.hasOwnProperty('area')) {
89732                     delete tags.area;
89733                     if (geometry === 'area') {
89734                         var needsAreaTag = true;
89735                         if (preset.geometry.indexOf('line') === -1) {
89736                             for (k in addTags) {
89737                                 if (k in osmAreaKeys) {
89738                                     needsAreaTag = false;
89739                                     break;
89740                                 }
89741                             }
89742                         }
89743                         if (needsAreaTag) {
89744                             tags.area = 'yes';
89745                         }
89746                     }
89747                 }
89748                 if (geometry && !skipFieldDefaults) {
89749                     for (var f in preset.fields) {
89750                         var field = preset.fields[f];
89751                         if (field.matchGeometry(geometry) && field.key && !tags[field.key] && field.default) {
89752                             tags[field.key] = field.default;
89753                         }
89754                     }
89755                 }
89756
89757                 return tags;
89758             };
89759
89760
89761             return preset;
89762         }
89763
89764         function presetIndex(context) {
89765             // a presetCollection with methods for
89766             // loading new data and returning defaults
89767
89768             var dispatch$1 = dispatch('recentsChange');
89769
89770             var all = presetCollection([]);
89771             var _defaults = { area: all, line: all, point: all, vertex: all, relation: all };
89772             var _fields = {};
89773             var _universal = [];
89774             var _recents;
89775             // presets that the user can add
89776             var _addablePresetIDs;
89777
89778             // Index of presets by (geometry, tag key).
89779             var _index = {
89780                 point: {},
89781                 vertex: {},
89782                 line: {},
89783                 area: {},
89784                 relation: {}
89785             };
89786
89787             all.match = function(entity, resolver) {
89788                 return resolver.transient(entity, 'presetMatch', function() {
89789                     var geometry = entity.geometry(resolver);
89790
89791                     // Treat entities on addr:interpolation lines as points, not vertices - #3241
89792                     if (geometry === 'vertex' && entity.isOnAddressLine(resolver)) {
89793                         geometry = 'point';
89794                     }
89795
89796                     return all.matchTags(entity.tags, geometry);
89797                 });
89798             };
89799
89800             all.matchTags = function(tags, geometry) {
89801
89802                 var address;
89803                 var geometryMatches = _index[geometry];
89804                 var best = -1;
89805                 var match;
89806
89807                 for (var k in tags) {
89808                     // If any part of an address is present,
89809                     // allow fallback to "Address" preset - #4353
89810                     if (/^addr:/.test(k) && geometryMatches['addr:*']) {
89811                         address = geometryMatches['addr:*'][0];
89812                     }
89813
89814                     var keyMatches = geometryMatches[k];
89815                     if (!keyMatches) { continue; }
89816
89817                     for (var i = 0; i < keyMatches.length; i++) {
89818                         var score = keyMatches[i].matchScore(tags);
89819                         if (score > best) {
89820                             best = score;
89821                             match = keyMatches[i];
89822                         }
89823                     }
89824
89825                 }
89826
89827                 if (address && (!match || match.isFallback())) {
89828                     match = address;
89829                 }
89830                 return match || all.fallback(geometry);
89831             };
89832
89833             all.allowsVertex = function(entity, resolver) {
89834                 if (entity.type !== 'node') { return false; }
89835                 if (Object.keys(entity.tags).length === 0) { return true; }
89836
89837                 return resolver.transient(entity, 'vertexMatch', function() {
89838                     // address lines allow vertices to act as standalone points
89839                     if (entity.isOnAddressLine(resolver)) { return true; }
89840
89841                     var geometries = osmNodeGeometriesForTags(entity.tags);
89842                     if (geometries.vertex) { return true; }
89843                     if (geometries.point) { return false; }
89844                     // allow vertices for unspecified points
89845                     return true;
89846                 });
89847             };
89848
89849
89850             // Because of the open nature of tagging, iD will never have a complete
89851             // list of tags used in OSM, so we want it to have logic like "assume
89852             // that a closed way with an amenity tag is an area, unless the amenity
89853             // is one of these specific types". This function computes a structure
89854             // that allows testing of such conditions, based on the presets designated
89855             // as as supporting (or not supporting) the area geometry.
89856             //
89857             // The returned object L is a whitelist/blacklist of tags. A closed way
89858             // with a tag (k, v) is considered to be an area if `k in L && !(v in L[k])`
89859             // (see `Way#isArea()`). In other words, the keys of L form the whitelist,
89860             // and the subkeys form the blacklist.
89861             all.areaKeys = function() {
89862                 var areaKeys = {};
89863                 var ignore = ['barrier', 'highway', 'footway', 'railway', 'junction', 'type'];  // probably a line..
89864
89865                 // ignore name-suggestion-index and deprecated presets
89866                 var presets = all.collection.filter(function(p) {
89867                     return !p.suggestion && !p.replacement;
89868                 });
89869
89870                 // whitelist
89871                 presets.forEach(function(d) {
89872                     for (var key in d.tags) { break; }
89873                     if (!key) { return; }
89874                     if (ignore.indexOf(key) !== -1) { return; }
89875
89876                     if (d.geometry.indexOf('area') !== -1) {    // probably an area..
89877                         areaKeys[key] = areaKeys[key] || {};
89878                     }
89879                 });
89880
89881                 // blacklist
89882                 presets.forEach(function(d) {
89883                     for (var key in d.addTags) {
89884                         // examine all addTags to get a better sense of what can be tagged on lines - #6800
89885                         var value = d.addTags[key];
89886                         if (key in areaKeys &&                      // probably an area...
89887                             d.geometry.indexOf('line') !== -1 &&    // but sometimes a line
89888                             value !== '*') {
89889                             areaKeys[key][value] = true;
89890                         }
89891                     }
89892                 });
89893
89894                 return areaKeys;
89895             };
89896
89897             all.pointTags = function() {
89898                 return all.collection.reduce(function(pointTags, d) {
89899                     // ignore name-suggestion-index, deprecated, and generic presets
89900                     if (d.suggestion || d.replacement || d.searchable === false) { return pointTags; }
89901
89902                     // only care about the primary tag
89903                     for (var key in d.tags) { break; }
89904                     if (!key) { return pointTags; }
89905
89906                     // if this can be a point
89907                     if (d.geometry.indexOf('point') !== -1) {
89908                         pointTags[key] = pointTags[key] || {};
89909                         pointTags[key][d.tags[key]] = true;
89910                     }
89911                     return pointTags;
89912                 }, {});
89913             };
89914
89915             all.vertexTags = function() {
89916                 return all.collection.reduce(function(vertexTags, d) {
89917                     // ignore name-suggestion-index, deprecated, and generic presets
89918                     if (d.suggestion || d.replacement || d.searchable === false) { return vertexTags; }
89919
89920                     // only care about the primary tag
89921                     for (var key in d.tags) { break; }
89922                     if (!key) { return vertexTags; }
89923
89924                     // if this can be a vertex
89925                     if (d.geometry.indexOf('vertex') !== -1) {
89926                         vertexTags[key] = vertexTags[key] || {};
89927                         vertexTags[key][d.tags[key]] = true;
89928                     }
89929                     return vertexTags;
89930                 }, {});
89931             };
89932
89933             all.build = function(d, addable) {
89934                 if (d.fields) {
89935                     Object.keys(d.fields).forEach(function(id) {
89936                         var f = d.fields[id];
89937                         _fields[id] = presetField(id, f);
89938                         if (f.universal) {
89939                             _universal.push(_fields[id]);
89940                         }
89941                     });
89942                 }
89943
89944                 if (d.presets) {
89945                     var rawPresets = d.presets;
89946                     Object.keys(d.presets).forEach(function(id) {
89947                         var p = d.presets[id];
89948                         var existing = all.index(id);
89949                         var isAddable = typeof addable === 'function' ? addable(id, p) : addable;
89950                         if (existing !== -1) {
89951                             all.collection[existing] = presetPreset(id, p, _fields, isAddable, rawPresets);
89952                         } else {
89953                             all.collection.push(presetPreset(id, p, _fields, isAddable, rawPresets));
89954                         }
89955                     });
89956                 }
89957
89958                 if (d.categories) {
89959                     Object.keys(d.categories).forEach(function(id) {
89960                         var c = d.categories[id];
89961                         var existing = all.index(id);
89962                         if (existing !== -1) {
89963                             all.collection[existing] = presetCategory(id, c, all);
89964                         } else {
89965                             all.collection.push(presetCategory(id, c, all));
89966                         }
89967                     });
89968                 }
89969
89970                 var getItem = (all.item).bind(all);
89971                 if (_addablePresetIDs) {
89972                     ['area', 'line', 'point', 'vertex', 'relation'].forEach(function(geometry) {
89973                         _defaults[geometry] = presetCollection(_addablePresetIDs.map(getItem).filter(function(preset) {
89974                             return preset.geometry.indexOf(geometry) !== -1;
89975                         }));
89976                     });
89977                 } else if (d.defaults) {
89978                     _defaults = {
89979                         area: presetCollection(d.defaults.area.map(getItem)),
89980                         line: presetCollection(d.defaults.line.map(getItem)),
89981                         point: presetCollection(d.defaults.point.map(getItem)),
89982                         vertex: presetCollection(d.defaults.vertex.map(getItem)),
89983                         relation: presetCollection(d.defaults.relation.map(getItem))
89984                     };
89985                 }
89986
89987                 for (var i = 0; i < all.collection.length; i++) {
89988                     var preset = all.collection[i];
89989                     var geometry = preset.geometry;
89990
89991                     for (var j = 0; j < geometry.length; j++) {
89992                         var g = _index[geometry[j]];
89993                         for (var k in preset.tags) {
89994                             (g[k] = g[k] || []).push(preset);
89995                         }
89996                     }
89997                 }
89998                 return all;
89999             };
90000
90001             all.init = function(addablePresetIDs) {
90002                 all.collection = [];
90003                 _recents = null;
90004                 _addablePresetIDs = addablePresetIDs;
90005                 _fields = {};
90006                 _universal = [];
90007                 _index = { point: {}, vertex: {}, line: {}, area: {}, relation: {} };
90008
90009                 var addable = true;
90010                 if (addablePresetIDs) {
90011                     addable = function(presetID) {
90012                         return addablePresetIDs.indexOf(presetID) !== -1;
90013                     };
90014                 }
90015
90016                 return all.build(data.presets, addable);
90017             };
90018
90019
90020             all.reset = function() {
90021                 all.collection = [];
90022                 _defaults = { area: all, line: all, point: all, vertex: all, relation: all };
90023                 _fields = {};
90024                 _universal = [];
90025                 _recents = null;
90026
90027                 // Index of presets by (geometry, tag key).
90028                 _index = {
90029                     point: {},
90030                     vertex: {},
90031                     line: {},
90032                     area: {},
90033                     relation: {}
90034                 };
90035
90036                 return all;
90037             };
90038
90039             all.fromExternal = function(external, done) {
90040                 all.reset();
90041                 d3_json(external)
90042                     .then(function(externalPresets) {
90043                         all.build(data.presets, false);    // load the default presets as non-addable to start
90044
90045                         _addablePresetIDs = externalPresets.presets && Object.keys(externalPresets.presets);
90046
90047                         all.build(externalPresets, true);  // then load the external presets as addable
90048                     })
90049                     .catch(function() {
90050                         all.init();
90051                     })
90052                     .finally(function() {
90053                         done(all);
90054                     });
90055             };
90056
90057             all.field = function(id) {
90058                 return _fields[id];
90059             };
90060
90061             all.universal = function() {
90062                 return _universal;
90063             };
90064
90065             all.defaults = function(geometry, n) {
90066                 var rec = [];
90067                 if (!context.inIntro()) {
90068                     rec = all.recent().matchGeometry(geometry).collection.slice(0, 4);
90069                 }
90070                 var def = utilArrayUniq(rec.concat(_defaults[geometry].collection)).slice(0, n - 1);
90071                 return presetCollection(utilArrayUniq(rec.concat(def).concat(all.fallback(geometry))));
90072             };
90073
90074             all.recent = function() {
90075                 return presetCollection(utilArrayUniq(all.getRecents().map(function(d) {
90076                     return d.preset;
90077                 })));
90078             };
90079
90080             function RibbonItem(preset, geometry, source) {
90081                 var item = {};
90082                 item.preset = preset;
90083                 item.geometry = geometry;
90084                 item.source = source;
90085
90086                 item.isRecent = function() {
90087                     return item.source === 'recent';
90088                 };
90089                 item.matches = function(preset, geometry) {
90090                     return item.preset.id === preset.id && item.geometry === geometry;
90091                 };
90092                 item.minified = function() {
90093                     return {
90094                         pID: item.preset.id,
90095                         geom: item.geometry
90096                     };
90097                 };
90098                 return item;
90099             }
90100
90101             function ribbonItemForMinified(d, source) {
90102                 if (d && d.pID && d.geom) {
90103                     var preset = all.item(d.pID);
90104                     if (!preset) { return null; }
90105
90106                     var geom = d.geom;
90107                     // treat point and vertex features as one geometry
90108                     if (geom === 'vertex') { geom = 'point'; }
90109
90110                     // iD's presets could have changed since this was saved,
90111                     // so make sure it's still valid.
90112                     if (preset.matchGeometry(geom) || (geom === 'point' && preset.matchGeometry('vertex'))) {
90113                         return RibbonItem(preset, geom, source);
90114                     }
90115                 }
90116                 return null;
90117             }
90118
90119             function setRecents(items) {
90120                 _recents = items;
90121                 var minifiedItems = items.map(function(d) { return d.minified(); });
90122                 context.storage('preset_recents', JSON.stringify(minifiedItems));
90123
90124                 dispatch$1.call('recentsChange');
90125             }
90126
90127             all.getRecents = function() {
90128                 if (!_recents) {
90129                     // fetch from local storage
90130                     _recents = (JSON.parse(context.storage('preset_recents')) || [])
90131                         .reduce(function(output, d) {
90132                             var item = ribbonItemForMinified(d, 'recent');
90133                             if (item && item.preset.addable()) { output.push(item); }
90134                             return output;
90135                         }, []);
90136                 }
90137                 return _recents;
90138             };
90139
90140             all.removeRecent = function(preset, geometry) {
90141                 var item = all.recentMatching(preset, geometry);
90142                 if (item) {
90143                     var items = all.getRecents();
90144                     items.splice(items.indexOf(item), 1);
90145                     setRecents(items);
90146                 }
90147             };
90148
90149             all.recentMatching = function(preset, geometry) {
90150                 geometry = all.fallback(geometry).id;
90151                 var items = all.getRecents();
90152                 for (var index in items) {
90153                     if (items[index].matches(preset, geometry)) {
90154                         return items[index];
90155                     }
90156                 }
90157                 return null;
90158             };
90159
90160             all.moveItem = function(items, fromIndex, toIndex) {
90161                 if (fromIndex === toIndex ||
90162                     fromIndex < 0 || toIndex < 0 ||
90163                     fromIndex >= items.length || toIndex >= items.length) { return null; }
90164                 items.splice(toIndex, 0, items.splice(fromIndex, 1)[0]);
90165                 return items;
90166             };
90167
90168             all.moveRecent = function(item, beforeItem) {
90169                 var recents = all.getRecents();
90170                 var fromIndex = recents.indexOf(item);
90171                 var toIndex = recents.indexOf(beforeItem);
90172                 var items = all.moveItem(recents, fromIndex, toIndex);
90173                 if (items) { setRecents(items); }
90174             };
90175
90176             all.setMostRecent = function(preset, geometry) {
90177                 if (context.inIntro()) { return; }
90178                 if (preset.searchable === false) { return; }
90179
90180                 geometry = all.fallback(geometry).id;
90181
90182                 var items = all.getRecents();
90183                 var item = all.recentMatching(preset, geometry);
90184                 if (item) {
90185                     items.splice(items.indexOf(item), 1);
90186                 } else {
90187                     item = RibbonItem(preset, geometry, 'recent');
90188                 }
90189                 // allow 30 recents
90190                 if (items.length === 30) {
90191                     // remove the last recent (first in, first out)
90192                     items.pop();
90193                 }
90194                 // prepend array
90195                 items.unshift(item);
90196                 setRecents(items);
90197             };
90198
90199             return utilRebind(all, dispatch$1, 'on');
90200         }
90201
90202         function localeDateString(s) {
90203             if (!s) { return null; }
90204             var detected = utilDetect();
90205             var options = { day: 'numeric', month: 'short', year: 'numeric' };
90206             var d = new Date(s);
90207             if (isNaN(d.getTime())) { return null; }
90208             return d.toLocaleDateString(detected.locale, options);
90209         }
90210
90211         function vintageRange(vintage) {
90212             var s;
90213             if (vintage.start || vintage.end) {
90214                 s = (vintage.start || '?');
90215                 if (vintage.start !== vintage.end) {
90216                     s += ' - ' + (vintage.end || '?');
90217                 }
90218             }
90219             return s;
90220         }
90221
90222
90223         function rendererBackgroundSource(data) {
90224             var source = Object.assign({}, data);   // shallow copy
90225             var offset = [0, 0];
90226             var name = source.name;
90227             var description = source.description;
90228             var best = !!source.best;
90229             var template = source.template;
90230
90231             source.tileSize = data.tileSize || 256;
90232             source.zoomExtent = data.zoomExtent || [0, 22];
90233             source.overzoom = data.overzoom !== false;
90234
90235             source.offset = function(_) {
90236                 if (!arguments.length) { return offset; }
90237                 offset = _;
90238                 return source;
90239             };
90240
90241
90242             source.nudge = function(val, zoomlevel) {
90243                 offset[0] += val[0] / Math.pow(2, zoomlevel);
90244                 offset[1] += val[1] / Math.pow(2, zoomlevel);
90245                 return source;
90246             };
90247
90248
90249             source.name = function() {
90250                 var id_safe = source.id.replace(/\./g, '<TX_DOT>');
90251                 return t('imagery.' + id_safe + '.name', { default: name });
90252             };
90253
90254
90255             source.description = function() {
90256                 var id_safe = source.id.replace(/\./g, '<TX_DOT>');
90257                 return t('imagery.' + id_safe + '.description', { default: description });
90258             };
90259
90260
90261             source.best = function() {
90262                 return best;
90263             };
90264
90265
90266             source.area = function() {
90267                 if (!data.polygon) { return Number.MAX_VALUE; }  // worldwide
90268                 var area = d3_geoArea({ type: 'MultiPolygon', coordinates: [ data.polygon ] });
90269                 return isNaN(area) ? 0 : area;
90270             };
90271
90272
90273             source.imageryUsed = function() {
90274                 return name || source.id;
90275             };
90276
90277
90278             source.template = function(_) {
90279                 if (!arguments.length) { return template; }
90280                 if (source.id === 'custom') { template = _; }
90281                 return source;
90282             };
90283
90284
90285             source.url = function(coord) {
90286                 if (this.type === 'wms') {
90287                     var tileToProjectedCoords = (function(x, y, z) {
90288                         //polyfill for IE11, PhantomJS
90289                         var sinh = Math.sinh || function(x) {
90290                             var y = Math.exp(x);
90291                             return (y - 1 / y) / 2;
90292                         };
90293
90294                         var zoomSize = Math.pow(2, z);
90295                         var lon = x / zoomSize * Math.PI * 2 - Math.PI;
90296                         var lat = Math.atan(sinh(Math.PI * (1 - 2 * y / zoomSize)));
90297
90298                         switch (this.projection) {
90299                             case 'EPSG:4326':
90300                                 return {
90301                                     x: lon * 180 / Math.PI,
90302                                     y: lat * 180 / Math.PI
90303                                 };
90304                             default: // EPSG:3857 and synonyms
90305                                 var mercCoords = mercatorRaw(lon, lat);
90306                                 return {
90307                                     x: 20037508.34 / Math.PI * mercCoords[0],
90308                                     y: 20037508.34 / Math.PI * mercCoords[1]
90309                                 };
90310                         }
90311                     }).bind(this);
90312
90313                     var tileSize = this.tileSize;
90314                     var projection = this.projection;
90315                     var minXmaxY = tileToProjectedCoords(coord[0], coord[1], coord[2]);
90316                     var maxXminY = tileToProjectedCoords(coord[0]+1, coord[1]+1, coord[2]);
90317                     return template.replace(/\{(\w+)\}/g, function (token, key) {
90318                       switch (key) {
90319                         case 'width':
90320                         case 'height':
90321                           return tileSize;
90322                         case 'proj':
90323                           return projection;
90324                         case 'wkid':
90325                           return projection.replace(/^EPSG:/, '');
90326                         case 'bbox':
90327                           return minXmaxY.x + ',' + maxXminY.y + ',' + maxXminY.x + ',' + minXmaxY.y;
90328                         case 'w':
90329                           return minXmaxY.x;
90330                         case 's':
90331                           return maxXminY.y;
90332                         case 'n':
90333                           return maxXminY.x;
90334                         case 'e':
90335                           return minXmaxY.y;
90336                         default:
90337                           return token;
90338                       }
90339                     });
90340                 }
90341                 return template
90342                     .replace('{x}', coord[0])
90343                     .replace('{y}', coord[1])
90344                     // TMS-flipped y coordinate
90345                     .replace(/\{[t-]y\}/, Math.pow(2, coord[2]) - coord[1] - 1)
90346                     .replace(/\{z(oom)?\}/, coord[2])
90347                     .replace(/\{switch:([^}]+)\}/, function(s, r) {
90348                         var subdomains = r.split(',');
90349                         return subdomains[(coord[0] + coord[1]) % subdomains.length];
90350                     })
90351                     .replace('{u}', function() {
90352                         var u = '';
90353                         for (var zoom = coord[2]; zoom > 0; zoom--) {
90354                             var b = 0;
90355                             var mask = 1 << (zoom - 1);
90356                             if ((coord[0] & mask) !== 0) { b++; }
90357                             if ((coord[1] & mask) !== 0) { b += 2; }
90358                             u += b.toString();
90359                         }
90360                         return u;
90361                     });
90362             };
90363
90364
90365             source.validZoom = function(z) {
90366                 return source.zoomExtent[0] <= z &&
90367                     (source.overzoom || source.zoomExtent[1] > z);
90368             };
90369
90370
90371             source.isLocatorOverlay = function() {
90372                 return source.id === 'mapbox_locator_overlay';
90373             };
90374
90375
90376             /* hides a source from the list, but leaves it available for use */
90377             source.isHidden = function() {
90378                 return source.id === 'DigitalGlobe-Premium-vintage' ||
90379                     source.id === 'DigitalGlobe-Standard-vintage';
90380             };
90381
90382
90383             source.copyrightNotices = function() {};
90384
90385
90386             source.getMetadata = function(center, tileCoord, callback) {
90387                 var vintage = {
90388                     start: localeDateString(source.startDate),
90389                     end: localeDateString(source.endDate)
90390                 };
90391                 vintage.range = vintageRange(vintage);
90392
90393                 var metadata = { vintage: vintage };
90394                 callback(null, metadata);
90395             };
90396
90397
90398             return source;
90399         }
90400
90401
90402         rendererBackgroundSource.Bing = function(data, dispatch) {
90403             // http://msdn.microsoft.com/en-us/library/ff701716.aspx
90404             // http://msdn.microsoft.com/en-us/library/ff701701.aspx
90405
90406             data.template = 'https://ecn.t{switch:0,1,2,3}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z';
90407
90408             var bing = rendererBackgroundSource(data);
90409             // var key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU'; // P2, JOSM, etc
90410             var key = 'Ak5oTE46TUbjRp08OFVcGpkARErDobfpuyNKa-W2mQ8wbt1K1KL8p1bIRwWwcF-Q';    // iD
90411
90412
90413             var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' + key;
90414             var cache = {};
90415             var inflight = {};
90416             var providers = [];
90417
90418             d3_json(url)
90419                 .then(function(json) {
90420                     providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) {
90421                         return {
90422                             attribution: provider.attribution,
90423                             areas: provider.coverageAreas.map(function(area) {
90424                                 return {
90425                                     zoom: [area.zoomMin, area.zoomMax],
90426                                     extent: geoExtent([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]])
90427                                 };
90428                             })
90429                         };
90430                     });
90431                     dispatch.call('change');
90432                 })
90433                 .catch(function() {
90434                     /* ignore */
90435                 });
90436
90437
90438             bing.copyrightNotices = function(zoom, extent) {
90439                 zoom = Math.min(zoom, 21);
90440                 return providers.filter(function(provider) {
90441                     return provider.areas.some(function(area) {
90442                         return extent.intersects(area.extent) &&
90443                             area.zoom[0] <= zoom &&
90444                             area.zoom[1] >= zoom;
90445                     });
90446                 }).map(function(provider) {
90447                     return provider.attribution;
90448                 }).join(', ');
90449             };
90450
90451
90452             bing.getMetadata = function(center, tileCoord, callback) {
90453                 var tileID = tileCoord.slice(0, 3).join('/');
90454                 var zoom = Math.min(tileCoord[2], 21);
90455                 var centerPoint = center[1] + ',' + center[0];  // lat,lng
90456                 var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/' + centerPoint +
90457                         '?zl=' + zoom + '&key=' + key;
90458
90459                 if (inflight[tileID]) { return; }
90460
90461                 if (!cache[tileID]) {
90462                     cache[tileID] = {};
90463                 }
90464                 if (cache[tileID] && cache[tileID].metadata) {
90465                     return callback(null, cache[tileID].metadata);
90466                 }
90467
90468                 inflight[tileID] = true;
90469                 d3_json(url)
90470                     .then(function(result) {
90471                         delete inflight[tileID];
90472                         if (!result) {
90473                             throw new Error('Unknown Error');
90474                         }
90475                         var vintage = {
90476                             start: localeDateString(result.resourceSets[0].resources[0].vintageStart),
90477                             end: localeDateString(result.resourceSets[0].resources[0].vintageEnd)
90478                         };
90479                         vintage.range = vintageRange(vintage);
90480
90481                         var metadata = { vintage: vintage };
90482                         cache[tileID].metadata = metadata;
90483                         if (callback) { callback(null, metadata); }
90484                     })
90485                     .catch(function(err) {
90486                         delete inflight[tileID];
90487                         if (callback) { callback(err.message); }
90488                     });
90489             };
90490
90491
90492             bing.terms_url = 'https://blog.openstreetmap.org/2010/11/30/microsoft-imagery-details';
90493
90494
90495             return bing;
90496         };
90497
90498
90499
90500         rendererBackgroundSource.Esri = function(data) {
90501             // in addition to using the tilemap at zoom level 20, overzoom real tiles - #4327 (deprecated technique, but it works)
90502             if (data.template.match(/blankTile/) === null) {
90503                 data.template = data.template + '?blankTile=false';
90504             }
90505
90506             var esri = rendererBackgroundSource(data);
90507             var cache = {};
90508             var inflight = {};
90509             var _prevCenter;
90510
90511             // use a tilemap service to set maximum zoom for esri tiles dynamically
90512             // https://developers.arcgis.com/documentation/tiled-elevation-service/
90513             esri.fetchTilemap = function(center) {
90514                 // skip if we have already fetched a tilemap within 5km
90515                 if (_prevCenter && geoSphericalDistance(center, _prevCenter) < 5000) { return; }
90516                 _prevCenter = center;
90517
90518                 // tiles are available globally to zoom level 19, afterward they may or may not be present
90519                 var z = 20;
90520
90521                 // first generate a random url using the template
90522                 var dummyUrl = esri.url([1,2,3]);
90523
90524                 // calculate url z/y/x from the lat/long of the center of the map
90525                 var x = (Math.floor((center[0] + 180) / 360 * Math.pow(2, z)));
90526                 var y = (Math.floor((1 - Math.log(Math.tan(center[1] * Math.PI / 180) + 1 / Math.cos(center[1] * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, z)));
90527
90528                 // fetch an 8x8 grid to leverage cache
90529                 var tilemapUrl = dummyUrl.replace(/tile\/[0-9]+\/[0-9]+\/[0-9]+\?blankTile=false/, 'tilemap') + '/' + z + '/' + y + '/' + x + '/8/8';
90530
90531                 // make the request and introspect the response from the tilemap server
90532                 d3_json(tilemapUrl)
90533                     .then(function(tilemap) {
90534                         if (!tilemap) {
90535                             throw new Error('Unknown Error');
90536                         }
90537                         var hasTiles = true;
90538                         for (var i = 0; i < tilemap.data.length; i++) {
90539                             // 0 means an individual tile in the grid doesn't exist
90540                             if (!tilemap.data[i]) {
90541                                 hasTiles = false;
90542                                 break;
90543                             }
90544                         }
90545
90546                         // if any tiles are missing at level 20 we restrict maxZoom to 19
90547                         esri.zoomExtent[1] = (hasTiles ? 22 : 19);
90548                     })
90549                     .catch(function() {
90550                         /* ignore */
90551                     });
90552             };
90553
90554
90555             esri.getMetadata = function(center, tileCoord, callback) {
90556                 var tileID = tileCoord.slice(0, 3).join('/');
90557                 var zoom = Math.min(tileCoord[2], esri.zoomExtent[1]);
90558                 var centerPoint = center[0] + ',' + center[1];  // long, lat (as it should be)
90559                 var unknown = t('info_panels.background.unknown');
90560                 var metadataLayer;
90561                 var vintage = {};
90562                 var metadata = {};
90563
90564                 if (inflight[tileID]) { return; }
90565
90566                 switch (true) {
90567                     case (zoom >= 20 && esri.id === 'EsriWorldImageryClarity'):
90568                         metadataLayer = 4;
90569                         break;
90570                     case zoom >= 19:
90571                         metadataLayer = 3;
90572                         break;
90573                     case zoom >= 17:
90574                         metadataLayer = 2;
90575                         break;
90576                     case zoom >= 13:
90577                         metadataLayer = 0;
90578                         break;
90579                     default:
90580                         metadataLayer = 99;
90581                 }
90582
90583                 var url;
90584                 // build up query using the layer appropriate to the current zoom
90585                 if (esri.id === 'EsriWorldImagery') {
90586                     url = 'https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/';
90587                 } else if (esri.id === 'EsriWorldImageryClarity') {
90588                     url = 'https://serviceslab.arcgisonline.com/arcgis/rest/services/Clarity_World_Imagery/MapServer/';
90589                 }
90590
90591                 url += metadataLayer + '/query?returnGeometry=false&geometry=' + centerPoint + '&inSR=4326&geometryType=esriGeometryPoint&outFields=*&f=json';
90592
90593                 if (!cache[tileID]) {
90594                     cache[tileID] = {};
90595                 }
90596                 if (cache[tileID] && cache[tileID].metadata) {
90597                     return callback(null, cache[tileID].metadata);
90598                 }
90599
90600                 // accurate metadata is only available >= 13
90601                 if (metadataLayer === 99) {
90602                     vintage = {
90603                         start: null,
90604                         end: null,
90605                         range: null
90606                     };
90607                     metadata = {
90608                         vintage: null,
90609                         source: unknown,
90610                         description: unknown,
90611                         resolution: unknown,
90612                         accuracy: unknown
90613                     };
90614
90615                     callback(null, metadata);
90616
90617                 } else {
90618                     inflight[tileID] = true;
90619                     d3_json(url)
90620                         .then(function(result) {
90621                             delete inflight[tileID];
90622                             if (!result) {
90623                                 throw new Error('Unknown Error');
90624                             } else if (result.features && result.features.length < 1) {
90625                                 throw new Error('No Results');
90626                             } else if (result.error && result.error.message) {
90627                                 throw new Error(result.error.message);
90628                             }
90629
90630                             // pass through the discrete capture date from metadata
90631                             var captureDate = localeDateString(result.features[0].attributes.SRC_DATE2);
90632                             vintage = {
90633                                 start: captureDate,
90634                                 end: captureDate,
90635                                 range: captureDate
90636                             };
90637                             metadata = {
90638                                 vintage: vintage,
90639                                 source: clean(result.features[0].attributes.NICE_NAME),
90640                                 description: clean(result.features[0].attributes.NICE_DESC),
90641                                 resolution: clean(result.features[0].attributes.SRC_RES),
90642                                 accuracy: clean(result.features[0].attributes.SRC_ACC)
90643                             };
90644
90645                             // append units - meters
90646                             if (isFinite(metadata.resolution)) {
90647                                 metadata.resolution += ' m';
90648                             }
90649                             if (isFinite(metadata.accuracy)) {
90650                                 metadata.accuracy += ' m';
90651                             }
90652
90653                             cache[tileID].metadata = metadata;
90654                             if (callback) { callback(null, metadata); }
90655                         })
90656                         .catch(function(err) {
90657                             delete inflight[tileID];
90658                             if (callback) { callback(err.message); }
90659                         });
90660                 }
90661
90662
90663                 function clean(val) {
90664                     return String(val).trim() || unknown;
90665                 }
90666             };
90667
90668             return esri;
90669         };
90670
90671
90672         rendererBackgroundSource.None = function() {
90673             var source = rendererBackgroundSource({ id: 'none', template: '' });
90674
90675
90676             source.name = function() {
90677                 return t('background.none');
90678             };
90679
90680
90681             source.imageryUsed = function() {
90682                 return null;
90683             };
90684
90685
90686             source.area = function() {
90687                 return -1;  // sources in background pane are sorted by area
90688             };
90689
90690
90691             return source;
90692         };
90693
90694
90695         rendererBackgroundSource.Custom = function(template) {
90696             var source = rendererBackgroundSource({ id: 'custom', template: template });
90697
90698
90699             source.name = function() {
90700                 return t('background.custom');
90701             };
90702
90703
90704             source.imageryUsed = function() {
90705                 return 'Custom (' + source.template() + ' )';
90706             };
90707
90708
90709             source.area = function() {
90710                 return -2;  // sources in background pane are sorted by area
90711             };
90712
90713
90714             return source;
90715         };
90716
90717         function rendererTileLayer(context) {
90718             var transformProp = utilPrefixCSSProperty('Transform');
90719             var tiler = utilTiler();
90720
90721             var _tileSize = 256;
90722             var _projection;
90723             var _cache = {};
90724             var _tileOrigin;
90725             var _zoom;
90726             var _source;
90727
90728
90729             function tileSizeAtZoom(d, z) {
90730                 var EPSILON = 0.002;    // close seams
90731                 return ((_tileSize * Math.pow(2, z - d[2])) / _tileSize) + EPSILON;
90732             }
90733
90734
90735             function atZoom(t, distance) {
90736                 var power = Math.pow(2, distance);
90737                 return [
90738                     Math.floor(t[0] * power),
90739                     Math.floor(t[1] * power),
90740                     t[2] + distance
90741                 ];
90742             }
90743
90744
90745             function lookUp(d) {
90746                 for (var up = -1; up > -d[2]; up--) {
90747                     var tile = atZoom(d, up);
90748                     if (_cache[_source.url(tile)] !== false) {
90749                         return tile;
90750                     }
90751                 }
90752             }
90753
90754
90755             function uniqueBy(a, n) {
90756                 var o = [];
90757                 var seen = {};
90758                 for (var i = 0; i < a.length; i++) {
90759                     if (seen[a[i][n]] === undefined) {
90760                         o.push(a[i]);
90761                         seen[a[i][n]] = true;
90762                     }
90763                 }
90764                 return o;
90765             }
90766
90767
90768             function addSource(d) {
90769                 d.push(_source.url(d));
90770                 return d;
90771             }
90772
90773
90774             // Update tiles based on current state of `projection`.
90775             function background(selection) {
90776                 _zoom = geoScaleToZoom(_projection.scale(), _tileSize);
90777
90778                 var pixelOffset;
90779                 if (_source) {
90780                     pixelOffset = [
90781                         _source.offset()[0] * Math.pow(2, _zoom),
90782                         _source.offset()[1] * Math.pow(2, _zoom)
90783                     ];
90784                 } else {
90785                     pixelOffset = [0, 0];
90786                 }
90787
90788                 var translate = [
90789                     _projection.translate()[0] + pixelOffset[0],
90790                     _projection.translate()[1] + pixelOffset[1]
90791                 ];
90792
90793                 tiler
90794                     .scale(_projection.scale() * 2 * Math.PI)
90795                     .translate(translate);
90796
90797                 _tileOrigin = [
90798                     _projection.scale() * Math.PI - translate[0],
90799                     _projection.scale() * Math.PI - translate[1]
90800                 ];
90801
90802                 render(selection);
90803             }
90804
90805
90806             // Derive the tiles onscreen, remove those offscreen and position them.
90807             // Important that this part not depend on `_projection` because it's
90808             // rentered when tiles load/error (see #644).
90809             function render(selection) {
90810                 if (!_source) { return; }
90811                 var requests = [];
90812                 var showDebug = context.getDebug('tile') && !_source.overlay;
90813
90814                 if (_source.validZoom(_zoom)) {
90815                     tiler.skipNullIsland(!!_source.overlay);
90816
90817                     tiler().forEach(function(d) {
90818                         addSource(d);
90819                         if (d[3] === '') { return; }
90820                         if (typeof d[3] !== 'string') { return; } // Workaround for #2295
90821                         requests.push(d);
90822                         if (_cache[d[3]] === false && lookUp(d)) {
90823                             requests.push(addSource(lookUp(d)));
90824                         }
90825                     });
90826
90827                     requests = uniqueBy(requests, 3).filter(function(r) {
90828                         // don't re-request tiles which have failed in the past
90829                         return _cache[r[3]] !== false;
90830                     });
90831                 }
90832
90833                 function load(d) {
90834                     _cache[d[3]] = true;
90835                     d3_select(this)
90836                         .on('error', null)
90837                         .on('load', null)
90838                         .classed('tile-loaded', true);
90839                     render(selection);
90840                 }
90841
90842                 function error(d) {
90843                     _cache[d[3]] = false;
90844                     d3_select(this)
90845                         .on('error', null)
90846                         .on('load', null)
90847                         .remove();
90848                     render(selection);
90849                 }
90850
90851                 function imageTransform(d) {
90852                     var ts = _tileSize * Math.pow(2, _zoom - d[2]);
90853                     var scale = tileSizeAtZoom(d, _zoom);
90854                     return 'translate(' +
90855                         ((d[0] * ts) - _tileOrigin[0]) + 'px,' +
90856                         ((d[1] * ts) - _tileOrigin[1]) + 'px) ' +
90857                         'scale(' + scale + ',' + scale + ')';
90858                 }
90859
90860                 function tileCenter(d) {
90861                     var ts = _tileSize * Math.pow(2, _zoom - d[2]);
90862                     return [
90863                         ((d[0] * ts) - _tileOrigin[0] + (ts / 2)),
90864                         ((d[1] * ts) - _tileOrigin[1] + (ts / 2))
90865                     ];
90866                 }
90867
90868                 function debugTransform(d) {
90869                     var coord = tileCenter(d);
90870                     return 'translate(' + coord[0] + 'px,' + coord[1] + 'px)';
90871                 }
90872
90873
90874                 // Pick a representative tile near the center of the viewport
90875                 // (This is useful for sampling the imagery vintage)
90876                 var dims = tiler.size();
90877                 var mapCenter = [dims[0] / 2, dims[1] / 2];
90878                 var minDist = Math.max(dims[0], dims[1]);
90879                 var nearCenter;
90880
90881                 requests.forEach(function(d) {
90882                     var c = tileCenter(d);
90883                     var dist = geoVecLength(c, mapCenter);
90884                     if (dist < minDist) {
90885                         minDist = dist;
90886                         nearCenter = d;
90887                     }
90888                 });
90889
90890
90891                 var image = selection.selectAll('img')
90892                     .data(requests, function(d) { return d[3]; });
90893
90894                 image.exit()
90895                     .style(transformProp, imageTransform)
90896                     .classed('tile-removing', true)
90897                     .classed('tile-center', false)
90898                     .each(function() {
90899                         var tile = d3_select(this);
90900                         window.setTimeout(function() {
90901                             if (tile.classed('tile-removing')) {
90902                                 tile.remove();
90903                             }
90904                         }, 300);
90905                     });
90906
90907                 image.enter()
90908                   .append('img')
90909                     .attr('class', 'tile')
90910                     .style('width', _tileSize + 'px')
90911                     .style('height', _tileSize + 'px')
90912                     .attr('src', function(d) { return d[3]; })
90913                     .on('error', error)
90914                     .on('load', load)
90915                   .merge(image)
90916                     .style(transformProp, imageTransform)
90917                     .classed('tile-debug', showDebug)
90918                     .classed('tile-removing', false)
90919                     .classed('tile-center', function(d) { return d === nearCenter; });
90920
90921
90922
90923                 var debug = selection.selectAll('.tile-label-debug')
90924                     .data(showDebug ? requests : [], function(d) { return d[3]; });
90925
90926                 debug.exit()
90927                     .remove();
90928
90929                 if (showDebug) {
90930                     var debugEnter = debug.enter()
90931                         .append('div')
90932                         .attr('class', 'tile-label-debug');
90933
90934                     debugEnter
90935                         .append('div')
90936                         .attr('class', 'tile-label-debug-coord');
90937
90938                     debugEnter
90939                         .append('div')
90940                         .attr('class', 'tile-label-debug-vintage');
90941
90942                     debug = debug.merge(debugEnter);
90943
90944                     debug
90945                         .style(transformProp, debugTransform);
90946
90947                     debug
90948                         .selectAll('.tile-label-debug-coord')
90949                         .text(function(d) { return d[2] + ' / ' + d[0] + ' / ' + d[1]; });
90950
90951                     debug
90952                         .selectAll('.tile-label-debug-vintage')
90953                         .each(function(d) {
90954                             var span = d3_select(this);
90955                             var center = context.projection.invert(tileCenter(d));
90956                             _source.getMetadata(center, d, function(err, result) {
90957                                 span.text((result && result.vintage && result.vintage.range) ||
90958                                     t('info_panels.background.vintage') + ': ' + t('info_panels.background.unknown')
90959                                 );
90960                             });
90961                         });
90962                 }
90963
90964             }
90965
90966
90967             background.projection = function(val) {
90968                 if (!arguments.length) { return _projection; }
90969                 _projection = val;
90970                 return background;
90971             };
90972
90973
90974             background.dimensions = function(val) {
90975                 if (!arguments.length) { return tiler.size(); }
90976                 tiler.size(val);
90977                 return background;
90978             };
90979
90980
90981             background.source = function(val) {
90982                 if (!arguments.length) { return _source; }
90983                 _source = val;
90984                 _tileSize = _source.tileSize;
90985                 _cache = {};
90986                 tiler.tileSize(_source.tileSize).zoomExtent(_source.zoomExtent);
90987                 return background;
90988             };
90989
90990
90991             return background;
90992         }
90993
90994         function rendererBackground(context) {
90995             var dispatch$1 = dispatch('change');
90996             var detected = utilDetect();
90997             var baseLayer = rendererTileLayer(context).projection(context.projection);
90998             var _isValid = true;
90999             var _overlayLayers = [];
91000             var _backgroundSources = [];
91001             var _brightness = 1;
91002             var _contrast = 1;
91003             var _saturation = 1;
91004             var _sharpness = 1;
91005
91006
91007             function background(selection) {
91008                 // If we are displaying an Esri basemap at high zoom,
91009                 // check its tilemap to see how high the zoom can go
91010                 if (context.map().zoom() > 18) {
91011                     var basemap = baseLayer.source();
91012                     if (basemap && /^EsriWorldImagery/.test(basemap.id)) {
91013                         var center = context.map().center();
91014                         basemap.fetchTilemap(center);
91015                     }
91016                 }
91017
91018                 // Is the imagery valid here? - #4827
91019                 var sources = background.sources(context.map().extent());
91020                 var wasValid = _isValid;
91021                 _isValid = !!sources
91022                     .filter(function(d) { return d === baseLayer.source(); }).length;
91023
91024                 if (wasValid !== _isValid) {      // change in valid status
91025                     background.updateImagery();
91026                 }
91027
91028
91029                 var baseFilter = '';
91030                 if (detected.cssfilters) {
91031                     if (_brightness !== 1) {
91032                         baseFilter += 'brightness(' + _brightness + ')';
91033                     }
91034                     if (_contrast !== 1) {
91035                         baseFilter += 'contrast(' + _contrast + ')';
91036                     }
91037                     if (_saturation !== 1) {
91038                         baseFilter += 'saturate(' + _saturation + ')';
91039                     }
91040                     if (_sharpness < 1) {  // gaussian blur
91041                         var blur = d3_interpolateNumber(0.5, 5)(1 - _sharpness);
91042                         baseFilter += 'blur(' + blur + 'px)';
91043                     }
91044                 }
91045
91046                 var base = selection.selectAll('.layer-background')
91047                     .data([0]);
91048
91049                 base = base.enter()
91050                     .insert('div', '.layer-data')
91051                     .attr('class', 'layer layer-background')
91052                     .merge(base);
91053
91054                 if (detected.cssfilters) {
91055                     base.style('filter', baseFilter || null);
91056                 } else {
91057                     base.style('opacity', _brightness);
91058                 }
91059
91060
91061                 var imagery = base.selectAll('.layer-imagery')
91062                     .data([0]);
91063
91064                 imagery.enter()
91065                     .append('div')
91066                     .attr('class', 'layer layer-imagery')
91067                     .merge(imagery)
91068                     .call(baseLayer);
91069
91070
91071                 var maskFilter = '';
91072                 var mixBlendMode = '';
91073                 if (detected.cssfilters && _sharpness > 1) {  // apply unsharp mask
91074                     mixBlendMode = 'overlay';
91075                     maskFilter = 'saturate(0) blur(3px) invert(1)';
91076
91077                     var contrast = _sharpness - 1;
91078                     maskFilter += ' contrast(' + contrast + ')';
91079
91080                     var brightness = d3_interpolateNumber(1, 0.85)(_sharpness - 1);
91081                     maskFilter += ' brightness(' + brightness + ')';
91082                 }
91083
91084                 var mask = base.selectAll('.layer-unsharp-mask')
91085                     .data(detected.cssfilters && _sharpness > 1 ? [0] : []);
91086
91087                 mask.exit()
91088                     .remove();
91089
91090                 mask.enter()
91091                     .append('div')
91092                     .attr('class', 'layer layer-mask layer-unsharp-mask')
91093                     .merge(mask)
91094                     .call(baseLayer)
91095                     .style('filter', maskFilter || null)
91096                     .style('mix-blend-mode', mixBlendMode || null);
91097
91098
91099                 var overlays = selection.selectAll('.layer-overlay')
91100                     .data(_overlayLayers, function(d) { return d.source().name(); });
91101
91102                 overlays.exit()
91103                     .remove();
91104
91105                 overlays.enter()
91106                     .insert('div', '.layer-data')
91107                     .attr('class', 'layer layer-overlay')
91108                     .merge(overlays)
91109                     .each(function(layer) { d3_select(this).call(layer); });
91110             }
91111
91112
91113             background.updateImagery = function() {
91114                 var b = baseLayer.source();
91115                 if (context.inIntro() || !b) { return; }
91116
91117                 var o = _overlayLayers
91118                     .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); })
91119                     .map(function (d) { return d.source().id; })
91120                     .join(',');
91121
91122                 var meters = geoOffsetToMeters(b.offset());
91123                 var epsilon = 0.01;
91124                 var x = +meters[0].toFixed(2);
91125                 var y = +meters[1].toFixed(2);
91126                 var q = utilStringQs(window.location.hash.substring(1));
91127
91128                 var id = b.id;
91129                 if (id === 'custom') {
91130                     id = 'custom:' + b.template();
91131                 }
91132
91133                 if (id) {
91134                     q.background = id;
91135                 } else {
91136                     delete q.background;
91137                 }
91138
91139                 if (o) {
91140                     q.overlays = o;
91141                 } else {
91142                     delete q.overlays;
91143                 }
91144
91145                 if (Math.abs(x) > epsilon || Math.abs(y) > epsilon) {
91146                     q.offset = x + ',' + y;
91147                 } else {
91148                     delete q.offset;
91149                 }
91150
91151                 if (!window.mocha) {
91152                     window.location.replace('#' + utilQsString(q, true));
91153                 }
91154
91155                 var imageryUsed = [];
91156                 var photoOverlaysUsed = [];
91157
91158                 var current = b.imageryUsed();
91159                 if (current && _isValid) {
91160                     imageryUsed.push(current);
91161                 }
91162
91163                 _overlayLayers
91164                     .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); })
91165                     .forEach(function (d) { imageryUsed.push(d.source().imageryUsed()); });
91166
91167                 var data = context.layers().layer('data');
91168                 if (data && data.enabled() && data.hasData()) {
91169                     imageryUsed.push(data.getSrc());
91170                 }
91171
91172                 var photoOverlayLayers = {
91173                     streetside: 'Bing Streetside',
91174                     mapillary: 'Mapillary Images',
91175                     'mapillary-map-features': 'Mapillary Map Features',
91176                     'mapillary-signs': 'Mapillary Signs',
91177                     openstreetcam: 'OpenStreetCam Images'
91178                 };
91179
91180                 for (var layerID in photoOverlayLayers) {
91181                     var layer = context.layers().layer(layerID);
91182                     if (layer && layer.enabled()) {
91183                         photoOverlaysUsed.push(layerID);
91184                         imageryUsed.push(photoOverlayLayers[layerID]);
91185                     }
91186                 }
91187
91188                 context.history().photoOverlaysUsed(photoOverlaysUsed);
91189                 context.history().imageryUsed(imageryUsed);
91190             };
91191
91192
91193             background.sources = function(extent, zoom, alwaysIncludeSelected) {
91194                 if (!data.imagery || !data.imagery.query) { return []; }   // called before init()?
91195
91196                 var matchIDs = {};
91197                 var matchImagery = data.imagery.query.bbox(extent.rectangle(), true) || [];
91198                 matchImagery.forEach(function(d) { matchIDs[d.id] = true; });
91199
91200                 var currentSource = baseLayer.source();
91201
91202                 return _backgroundSources.filter(function(source) {
91203                     // optionally always include the selected source
91204                     if (alwaysIncludeSelected && currentSource === source) { return true; }
91205
91206                     // always show sources with worldwide coverage
91207                     if (!source.polygon) { return true; }
91208
91209                     // optionally don't include non-worldwide sources at low zooms
91210                     if (zoom && zoom < 6) { return false; }
91211
91212                     // don't include sources outside the extent
91213                     return matchIDs[source.id];
91214                 });
91215             };
91216
91217
91218             background.dimensions = function(d) {
91219                 if (!d) { return; }
91220                 baseLayer.dimensions(d);
91221
91222                 _overlayLayers.forEach(function(layer) {
91223                     layer.dimensions(d);
91224                 });
91225             };
91226
91227
91228             background.baseLayerSource = function(d) {
91229                 if (!arguments.length) { return baseLayer.source(); }
91230
91231                 // test source against OSM imagery blacklists..
91232                 var osm = context.connection();
91233                 if (!osm) { return background; }
91234
91235                 var blacklists = context.connection().imageryBlacklists();
91236                 var template = d.template();
91237                 var fail = false;
91238                 var tested = 0;
91239                 var regex;
91240
91241                 for (var i = 0; i < blacklists.length; i++) {
91242                     try {
91243                         regex = new RegExp(blacklists[i]);
91244                         fail = regex.test(template);
91245                         tested++;
91246                         if (fail) { break; }
91247                     } catch (e) {
91248                         /* noop */
91249                     }
91250                 }
91251
91252                 // ensure at least one test was run.
91253                 if (!tested) {
91254                     regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*');
91255                     fail = regex.test(template);
91256                 }
91257
91258                 baseLayer.source(!fail ? d : background.findSource('none'));
91259                 dispatch$1.call('change');
91260                 background.updateImagery();
91261                 return background;
91262             };
91263
91264
91265             background.findSource = function(id) {
91266                 return _backgroundSources.find(function(d) {
91267                     return d.id && d.id === id;
91268                 });
91269             };
91270
91271
91272             background.bing = function() {
91273                 background.baseLayerSource(background.findSource('Bing'));
91274             };
91275
91276
91277             background.showsLayer = function(d) {
91278                 var baseSource = baseLayer.source();
91279                 if (!d || !baseSource) { return false; }
91280                 return d.id === baseSource.id ||
91281                     _overlayLayers.some(function(layer) { return d.id === layer.source().id; });
91282             };
91283
91284
91285             background.overlayLayerSources = function() {
91286                 return _overlayLayers.map(function (l) { return l.source(); });
91287             };
91288
91289
91290             background.toggleOverlayLayer = function(d) {
91291                 var layer;
91292                 for (var i = 0; i < _overlayLayers.length; i++) {
91293                     layer = _overlayLayers[i];
91294                     if (layer.source() === d) {
91295                         _overlayLayers.splice(i, 1);
91296                         dispatch$1.call('change');
91297                         background.updateImagery();
91298                         return;
91299                     }
91300                 }
91301
91302                 layer = rendererTileLayer(context)
91303                     .source(d)
91304                     .projection(context.projection)
91305                     .dimensions(baseLayer.dimensions()
91306                 );
91307
91308                 _overlayLayers.push(layer);
91309                 dispatch$1.call('change');
91310                 background.updateImagery();
91311             };
91312
91313
91314             background.nudge = function(d, zoom) {
91315                 baseLayer.source().nudge(d, zoom);
91316                 dispatch$1.call('change');
91317                 background.updateImagery();
91318                 return background;
91319             };
91320
91321
91322             background.offset = function(d) {
91323                 if (!arguments.length) { return baseLayer.source().offset(); }
91324                 baseLayer.source().offset(d);
91325                 dispatch$1.call('change');
91326                 background.updateImagery();
91327                 return background;
91328             };
91329
91330
91331             background.brightness = function(d) {
91332                 if (!arguments.length) { return _brightness; }
91333                 _brightness = d;
91334                 if (context.mode()) { dispatch$1.call('change'); }
91335                 return background;
91336             };
91337
91338
91339             background.contrast = function(d) {
91340                 if (!arguments.length) { return _contrast; }
91341                 _contrast = d;
91342                 if (context.mode()) { dispatch$1.call('change'); }
91343                 return background;
91344             };
91345
91346
91347             background.saturation = function(d) {
91348                 if (!arguments.length) { return _saturation; }
91349                 _saturation = d;
91350                 if (context.mode()) { dispatch$1.call('change'); }
91351                 return background;
91352             };
91353
91354
91355             background.sharpness = function(d) {
91356                 if (!arguments.length) { return _sharpness; }
91357                 _sharpness = d;
91358                 if (context.mode()) { dispatch$1.call('change'); }
91359                 return background;
91360             };
91361
91362
91363             background.init = function() {
91364                 function parseMap(qmap) {
91365                     if (!qmap) { return false; }
91366                     var args = qmap.split('/').map(Number);
91367                     if (args.length < 3 || args.some(isNaN)) { return false; }
91368                     return geoExtent([args[2], args[1]]);
91369                 }
91370
91371                 var q = utilStringQs(window.location.hash.substring(1));
91372                 var requested = q.background || q.layer;
91373                 var extent = parseMap(q.map);
91374                 var first;
91375                 var best;
91376
91377
91378                 data.imagery = data.imagery || [];
91379                 data.imagery.features = {};
91380
91381                 // build efficient index and querying for data.imagery
91382                 var features = data.imagery.map(function(source) {
91383                     if (!source.polygon) { return null; }
91384
91385                     // Add an extra array nest to each element in `source.polygon`
91386                     // so the rings are not treated as a bunch of holes:
91387                     // what we have: [ [[outer],[hole],[hole]] ]
91388                     // what we want: [ [[outer]],[[outer]],[[outer]] ]
91389                     var rings = source.polygon.map(function(ring) { return [ring]; });
91390
91391                     var feature = {
91392                         type: 'Feature',
91393                         properties: { id: source.id },
91394                         geometry: { type: 'MultiPolygon', coordinates: rings }
91395                     };
91396
91397                     data.imagery.features[source.id] = feature;
91398                     return feature;
91399
91400                 }).filter(Boolean);
91401
91402                 data.imagery.query = whichPolygon_1({
91403                     type: 'FeatureCollection',
91404                     features: features
91405                 });
91406
91407
91408                 // Add all the available imagery sources
91409                 _backgroundSources = data.imagery.map(function(source) {
91410                     if (source.type === 'bing') {
91411                         return rendererBackgroundSource.Bing(source, dispatch$1);
91412                     } else if (/^EsriWorldImagery/.test(source.id)) {
91413                         return rendererBackgroundSource.Esri(source);
91414                     } else {
91415                         return rendererBackgroundSource(source);
91416                     }
91417                 });
91418
91419                 first = _backgroundSources.length && _backgroundSources[0];
91420
91421                 // Add 'None'
91422                 _backgroundSources.unshift(rendererBackgroundSource.None());
91423
91424                 // Add 'Custom'
91425                 var template = context.storage('background-custom-template') || '';
91426                 var custom = rendererBackgroundSource.Custom(template);
91427                 _backgroundSources.unshift(custom);
91428
91429
91430                 // Decide which background layer to display
91431                 if (!requested && extent) {
91432                     best = this.sources(extent).find(function(s) { return s.best(); });
91433                 }
91434                 if (requested && requested.indexOf('custom:') === 0) {
91435                     template = requested.replace(/^custom:/, '');
91436                     background.baseLayerSource(custom.template(template));
91437                     context.storage('background-custom-template', template);
91438                 } else {
91439                     background.baseLayerSource(
91440                         background.findSource(requested) ||
91441                         best ||
91442                         background.findSource(context.storage('background-last-used')) ||
91443                         background.findSource('Bing') ||
91444                         first ||
91445                         background.findSource('none')
91446                     );
91447                 }
91448
91449                 var locator = _backgroundSources.find(function(d) {
91450                     return d.overlay && d.default;
91451                 });
91452
91453                 if (locator) {
91454                     background.toggleOverlayLayer(locator);
91455                 }
91456
91457                 var overlays = (q.overlays || '').split(',');
91458                 overlays.forEach(function(overlay) {
91459                     overlay = background.findSource(overlay);
91460                     if (overlay) {
91461                         background.toggleOverlayLayer(overlay);
91462                     }
91463                 });
91464
91465                 if (q.gpx) {
91466                     var gpx = context.layers().layer('data');
91467                     if (gpx) {
91468                         gpx.url(q.gpx, '.gpx');
91469                     }
91470                 }
91471
91472                 if (q.offset) {
91473                     var offset = q.offset.replace(/;/g, ',').split(',').map(function(n) {
91474                         return !isNaN(n) && n;
91475                     });
91476
91477                     if (offset.length === 2) {
91478                         background.offset(geoMetersToOffset(offset));
91479                     }
91480                 }
91481             };
91482
91483
91484             return utilRebind(background, dispatch$1, 'on');
91485         }
91486
91487         function rendererFeatures(context) {
91488             var dispatch$1 = dispatch('change', 'redraw');
91489             var features = utilRebind({}, dispatch$1, 'on');
91490             var _deferred = new Set();
91491
91492             var traffic_roads = {
91493                 'motorway': true,
91494                 'motorway_link': true,
91495                 'trunk': true,
91496                 'trunk_link': true,
91497                 'primary': true,
91498                 'primary_link': true,
91499                 'secondary': true,
91500                 'secondary_link': true,
91501                 'tertiary': true,
91502                 'tertiary_link': true,
91503                 'residential': true,
91504                 'unclassified': true,
91505                 'living_street': true
91506             };
91507
91508             var service_roads = {
91509                 'service': true,
91510                 'road': true,
91511                 'track': true
91512             };
91513
91514             var paths = {
91515                 'path': true,
91516                 'footway': true,
91517                 'cycleway': true,
91518                 'bridleway': true,
91519                 'steps': true,
91520                 'pedestrian': true,
91521                 'corridor': true
91522             };
91523
91524             var past_futures = {
91525                 'proposed': true,
91526                 'construction': true,
91527                 'abandoned': true,
91528                 'dismantled': true,
91529                 'disused': true,
91530                 'razed': true,
91531                 'demolished': true,
91532                 'obliterated': true
91533             };
91534
91535             var _cullFactor = 1;
91536             var _cache = {};
91537             var _rules = {};
91538             var _stats = {};
91539             var _keys = [];
91540             var _hidden = [];
91541             var _forceVisible = {};
91542
91543
91544             function update() {
91545                 if (!window.mocha) {
91546                     var q = utilStringQs(window.location.hash.substring(1));
91547                     var disabled = features.disabled();
91548                     if (disabled.length) {
91549                         q.disable_features = disabled.join(',');
91550                     } else {
91551                         delete q.disable_features;
91552                     }
91553                     window.location.replace('#' + utilQsString(q, true));
91554                     context.storage('disabled-features', disabled.join(','));
91555                 }
91556                 _hidden = features.hidden();
91557                 dispatch$1.call('change');
91558                 dispatch$1.call('redraw');
91559             }
91560
91561
91562             function defineRule(k, filter, max) {
91563                 var isEnabled = true;
91564
91565                 _keys.push(k);
91566                 _rules[k] = {
91567                     filter: filter,
91568                     enabled: isEnabled,   // whether the user wants it enabled..
91569                     count: 0,
91570                     currentMax: (max || Infinity),
91571                     defaultMax: (max || Infinity),
91572                     enable: function() { this.enabled = true; this.currentMax = this.defaultMax; },
91573                     disable: function() { this.enabled = false; this.currentMax = 0; },
91574                     hidden: function() {
91575                         return !context.editableDataEnabled() ||
91576                             (this.count === 0 && !this.enabled) ||
91577                             this.count > this.currentMax * _cullFactor;
91578                     },
91579                     autoHidden: function() { return this.hidden() && this.currentMax > 0; }
91580                 };
91581             }
91582
91583
91584             defineRule('points', function isPoint(tags, geometry) {
91585                 return geometry === 'point';
91586             }, 200);
91587
91588             defineRule('traffic_roads', function isTrafficRoad(tags) {
91589                 return traffic_roads[tags.highway];
91590             });
91591
91592             defineRule('service_roads', function isServiceRoad(tags) {
91593                 return service_roads[tags.highway];
91594             });
91595
91596             defineRule('paths', function isPath(tags) {
91597                 return paths[tags.highway];
91598             });
91599
91600             defineRule('buildings', function isBuilding(tags) {
91601                 return (
91602                     (!!tags.building && tags.building !== 'no') ||
91603                     tags.parking === 'multi-storey' ||
91604                     tags.parking === 'sheds' ||
91605                     tags.parking === 'carports' ||
91606                     tags.parking === 'garage_boxes'
91607                 );
91608             }, 250);
91609
91610             defineRule('building_parts', function isBuildingPart(tags) {
91611                 return tags['building:part'];
91612             });
91613
91614             defineRule('indoor', function isIndoor(tags) {
91615                 return tags.indoor;
91616             });
91617
91618             defineRule('landuse', function isLanduse(tags, geometry) {
91619                 return geometry === 'area' &&
91620                     !_rules.buildings.filter(tags) &&
91621                     !_rules.building_parts.filter(tags) &&
91622                     !_rules.indoor.filter(tags) &&
91623                     !_rules.water.filter(tags) &&
91624                     !_rules.pistes.filter(tags);
91625             });
91626
91627             defineRule('boundaries', function isBoundary(tags) {
91628                 return (
91629                     !!tags.boundary
91630                 ) && !(
91631                     traffic_roads[tags.highway] ||
91632                     service_roads[tags.highway] ||
91633                     paths[tags.highway] ||
91634                     tags.waterway ||
91635                     tags.railway ||
91636                     tags.landuse ||
91637                     tags.natural ||
91638                     tags.building ||
91639                     tags.power
91640                 );
91641             });
91642
91643             defineRule('water', function isWater(tags) {
91644                 return (
91645                     !!tags.waterway ||
91646                     tags.natural === 'water' ||
91647                     tags.natural === 'coastline' ||
91648                     tags.natural === 'bay' ||
91649                     tags.landuse === 'pond' ||
91650                     tags.landuse === 'basin' ||
91651                     tags.landuse === 'reservoir' ||
91652                     tags.landuse === 'salt_pond'
91653                 );
91654             });
91655
91656             defineRule('rail', function isRail(tags) {
91657                 return (
91658                     !!tags.railway ||
91659                     tags.landuse === 'railway'
91660                 ) && !(
91661                     traffic_roads[tags.highway] ||
91662                     service_roads[tags.highway] ||
91663                     paths[tags.highway]
91664                 );
91665             });
91666
91667             defineRule('pistes', function isPiste(tags) {
91668                 return tags['piste:type'];
91669             });
91670
91671             defineRule('aerialways', function isPiste(tags) {
91672                 return tags.aerialway &&
91673                     tags.aerialway !== 'yes' &&
91674                     tags.aerialway !== 'station';
91675             });
91676
91677             defineRule('power', function isPower(tags) {
91678                 return !!tags.power;
91679             });
91680
91681             // contains a past/future tag, but not in active use as a road/path/cycleway/etc..
91682             defineRule('past_future', function isPastFuture(tags) {
91683                 if (
91684                     traffic_roads[tags.highway] ||
91685                     service_roads[tags.highway] ||
91686                     paths[tags.highway]
91687                 ) { return false; }
91688
91689                 var strings = Object.keys(tags);
91690
91691                 for (var i = 0; i < strings.length; i++) {
91692                     var s = strings[i];
91693                     if (past_futures[s] || past_futures[tags[s]]) { return true; }
91694                 }
91695                 return false;
91696             });
91697
91698             // Lines or areas that don't match another feature filter.
91699             // IMPORTANT: The 'others' feature must be the last one defined,
91700             //   so that code in getMatches can skip this test if `hasMatch = true`
91701             defineRule('others', function isOther(tags, geometry) {
91702                 return (geometry === 'line' || geometry === 'area');
91703             });
91704
91705
91706
91707             features.features = function() {
91708                 return _rules;
91709             };
91710
91711
91712             features.keys = function() {
91713                 return _keys;
91714             };
91715
91716
91717             features.enabled = function(k) {
91718                 if (!arguments.length) {
91719                     return _keys.filter(function(k) { return _rules[k].enabled; });
91720                 }
91721                 return _rules[k] && _rules[k].enabled;
91722             };
91723
91724
91725             features.disabled = function(k) {
91726                 if (!arguments.length) {
91727                     return _keys.filter(function(k) { return !_rules[k].enabled; });
91728                 }
91729                 return _rules[k] && !_rules[k].enabled;
91730             };
91731
91732
91733             features.hidden = function(k) {
91734                 if (!arguments.length) {
91735                     return _keys.filter(function(k) { return _rules[k].hidden(); });
91736                 }
91737                 return _rules[k] && _rules[k].hidden();
91738             };
91739
91740
91741             features.autoHidden = function(k) {
91742                 if (!arguments.length) {
91743                     return _keys.filter(function(k) { return _rules[k].autoHidden(); });
91744                 }
91745                 return _rules[k] && _rules[k].autoHidden();
91746             };
91747
91748
91749             features.enable = function(k) {
91750                 if (_rules[k] && !_rules[k].enabled) {
91751                     _rules[k].enable();
91752                     update();
91753                 }
91754             };
91755
91756             features.enableAll = function() {
91757                 var didEnable = false;
91758                 for (var k in _rules) {
91759                     if (!_rules[k].enabled) {
91760                         didEnable = true;
91761                         _rules[k].enable();
91762                     }
91763                 }
91764                 if (didEnable) { update(); }
91765             };
91766
91767
91768             features.disable = function(k) {
91769                 if (_rules[k] && _rules[k].enabled) {
91770                     _rules[k].disable();
91771                     update();
91772                 }
91773             };
91774
91775             features.disableAll = function() {
91776                 var didDisable = false;
91777                 for (var k in _rules) {
91778                     if (_rules[k].enabled) {
91779                         didDisable = true;
91780                         _rules[k].disable();
91781                     }
91782                 }
91783                 if (didDisable) { update(); }
91784             };
91785
91786
91787             features.toggle = function(k) {
91788                 if (_rules[k]) {
91789                     (function(f) { return f.enabled ? f.disable() : f.enable(); }(_rules[k]));
91790                     update();
91791                 }
91792             };
91793
91794
91795             features.resetStats = function() {
91796                 for (var i = 0; i < _keys.length; i++) {
91797                     _rules[_keys[i]].count = 0;
91798                 }
91799                 dispatch$1.call('change');
91800             };
91801
91802
91803             features.gatherStats = function(d, resolver, dimensions) {
91804                 var needsRedraw = false;
91805                 var types = utilArrayGroupBy(d, 'type');
91806                 var entities = [].concat(types.relation || [], types.way || [], types.node || []);
91807                 var currHidden, geometry, matches, i, j;
91808
91809                 for (i = 0; i < _keys.length; i++) {
91810                     _rules[_keys[i]].count = 0;
91811                 }
91812
91813                 // adjust the threshold for point/building culling based on viewport size..
91814                 // a _cullFactor of 1 corresponds to a 1000x1000px viewport..
91815                 _cullFactor = dimensions[0] * dimensions[1] / 1000000;
91816
91817                 for (i = 0; i < entities.length; i++) {
91818                     geometry = entities[i].geometry(resolver);
91819                     matches = Object.keys(features.getMatches(entities[i], resolver, geometry));
91820                     for (j = 0; j < matches.length; j++) {
91821                         _rules[matches[j]].count++;
91822                     }
91823                 }
91824
91825                 currHidden = features.hidden();
91826                 if (currHidden !== _hidden) {
91827                     _hidden = currHidden;
91828                     needsRedraw = true;
91829                     dispatch$1.call('change');
91830                 }
91831
91832                 return needsRedraw;
91833             };
91834
91835
91836             features.stats = function() {
91837                 for (var i = 0; i < _keys.length; i++) {
91838                     _stats[_keys[i]] = _rules[_keys[i]].count;
91839                 }
91840
91841                 return _stats;
91842             };
91843
91844
91845             features.clear = function(d) {
91846                 for (var i = 0; i < d.length; i++) {
91847                     features.clearEntity(d[i]);
91848                 }
91849             };
91850
91851
91852             features.clearEntity = function(entity) {
91853                 delete _cache[osmEntity.key(entity)];
91854             };
91855
91856
91857             features.reset = function() {
91858                 Array.from(_deferred).forEach(function(handle) {
91859                     window.cancelIdleCallback(handle);
91860                     _deferred.delete(handle);
91861                 });
91862
91863                 _cache = {};
91864             };
91865
91866             // only certain relations are worth checking
91867             function relationShouldBeChecked(relation) {
91868                 // multipolygon features have `area` geometry and aren't checked here
91869                 return relation.tags.type === 'boundary';
91870             }
91871
91872             features.getMatches = function(entity, resolver, geometry) {
91873                 if (geometry === 'vertex' ||
91874                     (geometry === 'relation' && !relationShouldBeChecked(entity))) { return {}; }
91875
91876                 var ent = osmEntity.key(entity);
91877                 if (!_cache[ent]) {
91878                     _cache[ent] = {};
91879                 }
91880
91881                 if (!_cache[ent].matches) {
91882                     var matches = {};
91883                     var hasMatch = false;
91884
91885                     for (var i = 0; i < _keys.length; i++) {
91886                         if (_keys[i] === 'others') {
91887                             if (hasMatch) { continue; }
91888
91889                             // If an entity...
91890                             //   1. is a way that hasn't matched other 'interesting' feature rules,
91891                             if (entity.type === 'way') {
91892                                 var parents = features.getParents(entity, resolver, geometry);
91893
91894                                 //   2a. belongs only to a single multipolygon relation
91895                                 if ((parents.length === 1 && parents[0].isMultipolygon()) ||
91896                                     // 2b. or belongs only to boundary relations
91897                                     (parents.length > 0 && parents.every(function(parent) { return parent.tags.type === 'boundary'; }))) {
91898
91899                                     // ...then match whatever feature rules the parent relation has matched.
91900                                     // see #2548, #2887
91901                                     //
91902                                     // IMPORTANT:
91903                                     // For this to work, getMatches must be called on relations before ways.
91904                                     //
91905                                     var pkey = osmEntity.key(parents[0]);
91906                                     if (_cache[pkey] && _cache[pkey].matches) {
91907                                         matches = Object.assign({}, _cache[pkey].matches);  // shallow copy
91908                                         continue;
91909                                     }
91910                                 }
91911                             }
91912                         }
91913
91914                         if (_rules[_keys[i]].filter(entity.tags, geometry)) {
91915                             matches[_keys[i]] = hasMatch = true;
91916                         }
91917                     }
91918                     _cache[ent].matches = matches;
91919                 }
91920
91921                 return _cache[ent].matches;
91922             };
91923
91924
91925             features.getParents = function(entity, resolver, geometry) {
91926                 if (geometry === 'point') { return []; }
91927
91928                 var ent = osmEntity.key(entity);
91929                 if (!_cache[ent]) {
91930                     _cache[ent] = {};
91931                 }
91932
91933                 if (!_cache[ent].parents) {
91934                     var parents = [];
91935                     if (geometry === 'vertex') {
91936                         parents = resolver.parentWays(entity);
91937                     } else {   // 'line', 'area', 'relation'
91938                         parents = resolver.parentRelations(entity);
91939                     }
91940                     _cache[ent].parents = parents;
91941                 }
91942                 return _cache[ent].parents;
91943             };
91944
91945
91946             features.isHiddenPreset = function(preset, geometry) {
91947                 if (!_hidden.length) { return false; }
91948                 if (!preset.tags) { return false; }
91949
91950                 var test = preset.setTags({}, geometry);
91951                 for (var key in _rules) {
91952                     if (_rules[key].filter(test, geometry)) {
91953                         if (_hidden.indexOf(key) !== -1) {
91954                             return key;
91955                         }
91956                         return false;
91957                     }
91958                 }
91959                 return false;
91960             };
91961
91962
91963             features.isHiddenFeature = function(entity, resolver, geometry) {
91964                 if (!_hidden.length) { return false; }
91965                 if (!entity.version) { return false; }
91966                 if (_forceVisible[entity.id]) { return false; }
91967
91968                 var matches = Object.keys(features.getMatches(entity, resolver, geometry));
91969                 return matches.length && matches.every(function(k) { return features.hidden(k); });
91970             };
91971
91972
91973             features.isHiddenChild = function(entity, resolver, geometry) {
91974                 if (!_hidden.length) { return false; }
91975                 if (!entity.version || geometry === 'point') { return false; }
91976                 if (_forceVisible[entity.id]) { return false; }
91977
91978                 var parents = features.getParents(entity, resolver, geometry);
91979                 if (!parents.length) { return false; }
91980
91981                 for (var i = 0; i < parents.length; i++) {
91982                     if (!features.isHidden(parents[i], resolver, parents[i].geometry(resolver))) {
91983                         return false;
91984                     }
91985                 }
91986                 return true;
91987             };
91988
91989
91990             features.hasHiddenConnections = function(entity, resolver) {
91991                 if (!_hidden.length) { return false; }
91992
91993                 var childNodes, connections;
91994                 if (entity.type === 'midpoint') {
91995                     childNodes = [resolver.entity(entity.edge[0]), resolver.entity(entity.edge[1])];
91996                     connections = [];
91997                 } else {
91998                     childNodes = entity.nodes ? resolver.childNodes(entity) : [];
91999                     connections = features.getParents(entity, resolver, entity.geometry(resolver));
92000                 }
92001
92002                 // gather ways connected to child nodes..
92003                 connections = childNodes.reduce(function(result, e) {
92004                     return resolver.isShared(e) ? utilArrayUnion(result, resolver.parentWays(e)) : result;
92005                 }, connections);
92006
92007                 return connections.some(function(e) {
92008                     return features.isHidden(e, resolver, e.geometry(resolver));
92009                 });
92010             };
92011
92012
92013             features.isHidden = function(entity, resolver, geometry) {
92014                 if (!_hidden.length) { return false; }
92015                 if (!entity.version) { return false; }
92016
92017                 var fn = (geometry === 'vertex' ? features.isHiddenChild : features.isHiddenFeature);
92018                 return fn(entity, resolver, geometry);
92019             };
92020
92021
92022             features.filter = function(d, resolver) {
92023                 if (!_hidden.length) { return d; }
92024
92025                 var result = [];
92026                 for (var i = 0; i < d.length; i++) {
92027                     var entity = d[i];
92028                     if (!features.isHidden(entity, resolver, entity.geometry(resolver))) {
92029                         result.push(entity);
92030                     }
92031                 }
92032                 return result;
92033             };
92034
92035
92036             features.forceVisible = function(entityIDs) {
92037                 if (!arguments.length) { return Object.keys(_forceVisible); }
92038
92039                 _forceVisible = {};
92040                 for (var i = 0; i < entityIDs.length; i++) {
92041                     _forceVisible[entityIDs[i]] = true;
92042                     var entity = context.hasEntity(entityIDs[i]);
92043                     if (entity && entity.type === 'relation') {
92044                         // also show relation members (one level deep)
92045                         for (var j in entity.members) {
92046                             _forceVisible[entity.members[j].id] = true;
92047                         }
92048                     }
92049                 }
92050                 return features;
92051             };
92052
92053
92054             features.init = function() {
92055                 var storage = context.storage('disabled-features');
92056                 if (storage) {
92057                     var storageDisabled = storage.replace(/;/g, ',').split(',');
92058                     storageDisabled.forEach(features.disable);
92059                 }
92060
92061                 var q = utilStringQs(window.location.hash.substring(1));
92062                 if (q.disable_features) {
92063                     var hashDisabled = q.disable_features.replace(/;/g, ',').split(',');
92064                     hashDisabled.forEach(features.disable);
92065                 }
92066             };
92067
92068
92069             // warm up the feature matching cache upon merging fetched data
92070             context.history().on('merge.features', function(newEntities) {
92071                 if (!newEntities) { return; }
92072                 var handle = window.requestIdleCallback(function() {
92073                     var graph = context.graph();
92074                     var types = utilArrayGroupBy(newEntities, 'type');
92075                     // ensure that getMatches is called on relations before ways
92076                     var entities = [].concat(types.relation || [], types.way || [], types.node || []);
92077                     for (var i = 0; i < entities.length; i++) {
92078                         var geometry = entities[i].geometry(graph);
92079                         features.getMatches(entities[i], graph, geometry);
92080                     }
92081                 });
92082                 _deferred.add(handle);
92083             });
92084
92085
92086             return features;
92087         }
92088
92089         // Touch targets control which other vertices we can drag a vertex onto.
92090         //
92091         // - the activeID - nope
92092         // - 1 away (adjacent) to the activeID - yes (vertices will be merged)
92093         // - 2 away from the activeID - nope (would create a self intersecting segment)
92094         // - all others on a linear way - yes
92095         // - all others on a closed way - nope (would create a self intersecting polygon)
92096         //
92097         // returns
92098         // 0 = active vertex - no touch/connect
92099         // 1 = passive vertex - yes touch/connect
92100         // 2 = adjacent vertex - yes but pay attention segmenting a line here
92101         //
92102         function svgPassiveVertex(node, graph, activeID) {
92103             if (!activeID) { return 1; }
92104             if (activeID === node.id) { return 0; }
92105
92106             var parents = graph.parentWays(node);
92107
92108             for (var i = 0; i < parents.length; i++) {
92109                 var nodes = parents[i].nodes;
92110                 var isClosed = parents[i].isClosed();
92111                 for (var j = 0; j < nodes.length; j++) {   // find this vertex, look nearby
92112                     if (nodes[j] === node.id) {
92113                         var ix1 = j - 2;
92114                         var ix2 = j - 1;
92115                         var ix3 = j + 1;
92116                         var ix4 = j + 2;
92117
92118                         if (isClosed) {  // wraparound if needed
92119                             var max = nodes.length - 1;
92120                             if (ix1 < 0)   { ix1 = max + ix1; }
92121                             if (ix2 < 0)   { ix2 = max + ix2; }
92122                             if (ix3 > max) { ix3 = ix3 - max; }
92123                             if (ix4 > max) { ix4 = ix4 - max; }
92124                         }
92125
92126                         if (nodes[ix1] === activeID) { return 0; }        // no - prevent self intersect
92127                         else if (nodes[ix2] === activeID) { return 2; }   // ok - adjacent
92128                         else if (nodes[ix3] === activeID) { return 2; }   // ok - adjacent
92129                         else if (nodes[ix4] === activeID) { return 0; }   // no - prevent self intersect
92130                         else if (isClosed && nodes.indexOf(activeID) !== -1) { return 0; }  // no - prevent self intersect
92131                     }
92132                 }
92133             }
92134
92135             return 1;   // ok
92136         }
92137
92138
92139         function svgMarkerSegments(projection, graph, dt,
92140                                           shouldReverse,
92141                                           bothDirections) {
92142             return function(entity) {
92143                 var i = 0;
92144                 var offset = dt;
92145                 var segments = [];
92146                 var clip = d3_geoIdentity().clipExtent(projection.clipExtent()).stream;
92147                 var coordinates = graph.childNodes(entity).map(function(n) { return n.loc; });
92148                 var a, b;
92149
92150                 if (shouldReverse(entity)) {
92151                     coordinates.reverse();
92152                 }
92153
92154                 d3_geoStream({
92155                     type: 'LineString',
92156                     coordinates: coordinates
92157                 }, projection.stream(clip({
92158                     lineStart: function() {},
92159                     lineEnd: function() { a = null; },
92160                     point: function(x, y) {
92161                         b = [x, y];
92162
92163                         if (a) {
92164                             var span = geoVecLength(a, b) - offset;
92165
92166                             if (span >= 0) {
92167                                 var heading = geoVecAngle(a, b);
92168                                 var dx = dt * Math.cos(heading);
92169                                 var dy = dt * Math.sin(heading);
92170                                 var p = [
92171                                     a[0] + offset * Math.cos(heading),
92172                                     a[1] + offset * Math.sin(heading)
92173                                 ];
92174
92175                                 // gather coordinates
92176                                 var coord = [a, p];
92177                                 for (span -= dt; span >= 0; span -= dt) {
92178                                     p = geoVecAdd(p, [dx, dy]);
92179                                     coord.push(p);
92180                                 }
92181                                 coord.push(b);
92182
92183                                 // generate svg paths
92184                                 var segment = '';
92185                                 var j;
92186
92187                                 for (j = 0; j < coord.length; j++) {
92188                                     segment += (j === 0 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1];
92189                                 }
92190                                 segments.push({ id: entity.id, index: i++, d: segment });
92191
92192                                 if (bothDirections(entity)) {
92193                                     segment = '';
92194                                     for (j = coord.length - 1; j >= 0; j--) {
92195                                         segment += (j === coord.length - 1 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1];
92196                                     }
92197                                     segments.push({ id: entity.id, index: i++, d: segment });
92198                                 }
92199                             }
92200
92201                             offset = -span;
92202                         }
92203
92204                         a = b;
92205                     }
92206                 })));
92207
92208                 return segments;
92209             };
92210         }
92211
92212
92213         function svgPath(projection, graph, isArea) {
92214
92215             // Explanation of magic numbers:
92216             // "padding" here allows space for strokes to extend beyond the viewport,
92217             // so that the stroke isn't drawn along the edge of the viewport when
92218             // the shape is clipped.
92219             //
92220             // When drawing lines, pad viewport by 5px.
92221             // When drawing areas, pad viewport by 65px in each direction to allow
92222             // for 60px area fill stroke (see ".fill-partial path.fill" css rule)
92223
92224             var cache = {};
92225             var padding = isArea ? 65 : 5;
92226             var viewport = projection.clipExtent();
92227             var paddedExtent = [
92228                 [viewport[0][0] - padding, viewport[0][1] - padding],
92229                 [viewport[1][0] + padding, viewport[1][1] + padding]
92230             ];
92231             var clip = d3_geoIdentity().clipExtent(paddedExtent).stream;
92232             var project = projection.stream;
92233             var path = d3_geoPath()
92234                 .projection({stream: function(output) { return project(clip(output)); }});
92235
92236             var svgpath = function(entity) {
92237                 if (entity.id in cache) {
92238                     return cache[entity.id];
92239                 } else {
92240                     return cache[entity.id] = path(entity.asGeoJSON(graph));
92241                 }
92242             };
92243
92244             svgpath.geojson = function(d) {
92245                 if (d.__featurehash__ !== undefined) {
92246                     if (d.__featurehash__ in cache) {
92247                         return cache[d.__featurehash__];
92248                     } else {
92249                         return cache[d.__featurehash__] = path(d);
92250                     }
92251                 } else {
92252                     return path(d);
92253                 }
92254             };
92255
92256             return svgpath;
92257         }
92258
92259
92260         function svgPointTransform(projection) {
92261             var svgpoint = function(entity) {
92262                 // http://jsperf.com/short-array-join
92263                 var pt = projection(entity.loc);
92264                 return 'translate(' + pt[0] + ',' + pt[1] + ')';
92265             };
92266
92267             svgpoint.geojson = function(d) {
92268                 return svgpoint(d.properties.entity);
92269             };
92270
92271             return svgpoint;
92272         }
92273
92274
92275         function svgRelationMemberTags(graph) {
92276             return function(entity) {
92277                 var tags = entity.tags;
92278                 var shouldCopyMultipolygonTags = !entity.hasInterestingTags();
92279                 graph.parentRelations(entity).forEach(function(relation) {
92280                     var type = relation.tags.type;
92281                     if ((type === 'multipolygon' && shouldCopyMultipolygonTags) || type === 'boundary') {
92282                         tags = Object.assign({}, relation.tags, tags);
92283                     }
92284                 });
92285                 return tags;
92286             };
92287         }
92288
92289
92290         function svgSegmentWay(way, graph, activeID) {
92291             // When there is no activeID, we can memoize this expensive computation
92292             if (activeID === undefined) {
92293                 return graph.transient(way, 'waySegments', getWaySegments);
92294             } else {
92295                 return getWaySegments();
92296             }
92297
92298             function getWaySegments() {
92299                 var isActiveWay = (way.nodes.indexOf(activeID) !== -1);
92300                 var features = { passive: [], active: [] };
92301                 var start = {};
92302                 var end = {};
92303                 var node, type;
92304
92305                 for (var i = 0; i < way.nodes.length; i++) {
92306                     node = graph.entity(way.nodes[i]);
92307                     type = svgPassiveVertex(node, graph, activeID);
92308                     end = { node: node, type: type };
92309
92310                     if (start.type !== undefined) {
92311                         if (start.node.id === activeID || end.node.id === activeID) ; else if (isActiveWay && (start.type === 2 || end.type === 2)) {   // one adjacent vertex
92312                             pushActive(start, end, i);
92313                         } else if (start.type === 0 && end.type === 0) {   // both active vertices
92314                             pushActive(start, end, i);
92315                         } else {
92316                             pushPassive(start, end, i);
92317                         }
92318                     }
92319
92320                     start = end;
92321                 }
92322
92323                 return features;
92324
92325                 function pushActive(start, end, index) {
92326                     features.active.push({
92327                         type: 'Feature',
92328                         id: way.id + '-' + index + '-nope',
92329                         properties: {
92330                             nope: true,
92331                             target: true,
92332                             entity: way,
92333                             nodes: [start.node, end.node],
92334                             index: index
92335                         },
92336                         geometry: {
92337                             type: 'LineString',
92338                             coordinates: [start.node.loc, end.node.loc]
92339                         }
92340                     });
92341                 }
92342
92343                 function pushPassive(start, end, index) {
92344                     features.passive.push({
92345                         type: 'Feature',
92346                         id: way.id + '-' + index,
92347                         properties: {
92348                             target: true,
92349                             entity: way,
92350                             nodes: [start.node, end.node],
92351                             index: index
92352                         },
92353                         geometry: {
92354                             type: 'LineString',
92355                             coordinates: [start.node.loc, end.node.loc]
92356                         }
92357                     });
92358                 }
92359             }
92360         }
92361
92362         function svgTagClasses() {
92363             var primaries = [
92364                 'building', 'highway', 'railway', 'waterway', 'aeroway', 'aerialway',
92365                 'piste:type', 'boundary', 'power', 'amenity', 'natural', 'landuse',
92366                 'leisure', 'military', 'place', 'man_made', 'route', 'attraction',
92367                 'building:part', 'indoor'
92368             ];
92369             var statuses = [
92370                 'proposed', 'construction', 'disused', 'abandoned', 'dismantled',
92371                 'razed', 'demolished', 'obliterated', 'intermittent'
92372             ];
92373             var secondaries = [
92374                 'oneway', 'bridge', 'tunnel', 'embankment', 'cutting', 'barrier',
92375                 'surface', 'tracktype', 'footway', 'crossing', 'service', 'sport',
92376                 'public_transport', 'location', 'parking', 'golf', 'type', 'leisure',
92377                 'man_made', 'indoor'
92378             ];
92379             var _tags = function(entity) { return entity.tags; };
92380
92381
92382             var tagClasses = function(selection) {
92383                 selection.each(function tagClassesEach(entity) {
92384                     var value = this.className;
92385
92386                     if (value.baseVal !== undefined) {
92387                         value = value.baseVal;
92388                     }
92389
92390                     var t = _tags(entity);
92391
92392                     var computed = tagClasses.getClassesString(t, value);
92393
92394                     if (computed !== value) {
92395                         d3_select(this).attr('class', computed);
92396                     }
92397                 });
92398             };
92399
92400
92401             tagClasses.getClassesString = function(t, value) {
92402                 var primary, status;
92403                 var i, j, k, v;
92404
92405                 // in some situations we want to render perimeter strokes a certain way
92406                 var overrideGeometry;
92407                 if (/\bstroke\b/.test(value)) {
92408                     if (!!t.barrier && t.barrier !== 'no') {
92409                         overrideGeometry = 'line';
92410                     }
92411                 }
92412
92413                 // preserve base classes (nothing with `tag-`)
92414                 var classes = value.trim().split(/\s+/)
92415                     .filter(function(klass) {
92416                         return klass.length && !/^tag-/.test(klass);
92417                     })
92418                     .map(function(klass) {  // special overrides for some perimeter strokes
92419                         return (klass === 'line' || klass === 'area') ? (overrideGeometry || klass) : klass;
92420                     });
92421
92422                 // pick at most one primary classification tag..
92423                 for (i = 0; i < primaries.length; i++) {
92424                     k = primaries[i];
92425                     v = t[k];
92426                     if (!v || v === 'no') { continue; }
92427
92428                     if (k === 'piste:type') {  // avoid a ':' in the class name
92429                         k = 'piste';
92430                     } else if (k === 'building:part') {  // avoid a ':' in the class name
92431                         k = 'building_part';
92432                     }
92433
92434                     primary = k;
92435                     if (statuses.indexOf(v) !== -1) {   // e.g. `railway=abandoned`
92436                         status = v;
92437                         classes.push('tag-' + k);
92438                     } else {
92439                         classes.push('tag-' + k);
92440                         classes.push('tag-' + k + '-' + v);
92441                     }
92442
92443                     break;
92444                 }
92445
92446                 if (!primary) {
92447                     for (i = 0; i < statuses.length; i++) {
92448                         for (j = 0; j < primaries.length; j++) {
92449                             k = statuses[i] + ':' + primaries[j];  // e.g. `demolished:building=yes`
92450                             v = t[k];
92451                             if (!v || v === 'no') { continue; }
92452
92453                             status = statuses[i];
92454                             break;
92455                         }
92456                     }
92457                 }
92458
92459                 // add at most one status tag, only if relates to primary tag..
92460                 if (!status) {
92461                     for (i = 0; i < statuses.length; i++) {
92462                         k = statuses[i];
92463                         v = t[k];
92464                         if (!v || v === 'no') { continue; }
92465
92466                         if (v === 'yes') {   // e.g. `railway=rail + abandoned=yes`
92467                             status = k;
92468                         }
92469                         else if (primary && primary === v) {  // e.g. `railway=rail + abandoned=railway`
92470                             status = k;
92471                         } else if (!primary && primaries.indexOf(v) !== -1) {  // e.g. `abandoned=railway`
92472                             status = k;
92473                             primary = v;
92474                             classes.push('tag-' + v);
92475                         }  // else ignore e.g.  `highway=path + abandoned=railway`
92476
92477                         if (status) { break; }
92478                     }
92479                 }
92480
92481                 if (status) {
92482                     classes.push('tag-status');
92483                     classes.push('tag-status-' + status);
92484                 }
92485
92486                 // add any secondary tags
92487                 for (i = 0; i < secondaries.length; i++) {
92488                     k = secondaries[i];
92489                     v = t[k];
92490                     if (!v || v === 'no' || k === primary) { continue; }
92491                     classes.push('tag-' + k);
92492                     classes.push('tag-' + k + '-' + v);
92493                 }
92494
92495                 // For highways, look for surface tagging..
92496                 if (primary === 'highway' || primary === 'aeroway') {
92497                     var paved = (t.highway !== 'track');
92498                     for (k in t) {
92499                         v = t[k];
92500                         if (k in osmPavedTags) {
92501                             paved = !!osmPavedTags[k][v];
92502                             break;
92503                         }
92504                     }
92505                     if (!paved) {
92506                         classes.push('tag-unpaved');
92507                     }
92508                 }
92509
92510                 // If this is a wikidata-tagged item, add a class for that..
92511                 if (t.wikidata || t['brand:wikidata']) {
92512                     classes.push('tag-wikidata');
92513                 }
92514
92515                 return classes.join(' ').trim();
92516             };
92517
92518
92519             tagClasses.tags = function(val) {
92520                 if (!arguments.length) { return _tags; }
92521                 _tags = val;
92522                 return tagClasses;
92523             };
92524
92525             return tagClasses;
92526         }
92527
92528         // Patterns only work in Firefox when set directly on element.
92529         // (This is not a bug: https://bugzilla.mozilla.org/show_bug.cgi?id=750632)
92530         var patterns = {
92531             // tag - pattern name
92532             // -or-
92533             // tag - value - pattern name
92534             // -or-
92535             // tag - value - rules (optional tag-values, pattern name)
92536             // (matches earlier rules first, so fallback should be last entry)
92537             amenity: {
92538                 grave_yard: 'cemetery',
92539                 fountain: 'water_standing'
92540             },
92541             landuse: {
92542                 cemetery: [
92543                     { religion: 'christian', pattern: 'cemetery_christian' },
92544                     { religion: 'buddhist', pattern: 'cemetery_buddhist' },
92545                     { religion: 'muslim', pattern: 'cemetery_muslim' },
92546                     { religion: 'jewish', pattern: 'cemetery_jewish' },
92547                     { pattern: 'cemetery' }
92548                 ],
92549                 construction: 'construction',
92550                 farmland: 'farmland',
92551                 farmyard: 'farmyard',
92552                 forest: [
92553                     { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' },
92554                     { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' },
92555                     { leaf_type: 'leafless', pattern: 'forest_leafless' },
92556                     { pattern: 'forest' } // same as 'leaf_type:mixed'
92557                 ],
92558                 grave_yard: 'cemetery',
92559                 grass: [
92560                     { golf: 'green', pattern: 'golf_green' },
92561                     { pattern: 'grass' } ],
92562                 landfill: 'landfill',
92563                 meadow: 'meadow',
92564                 military: 'construction',
92565                 orchard: 'orchard',
92566                 quarry: 'quarry',
92567                 vineyard: 'vineyard'
92568             },
92569             natural: {
92570                 beach: 'beach',
92571                 grassland: 'grass',
92572                 sand: 'beach',
92573                 scrub: 'scrub',
92574                 water: [
92575                     { water: 'pond', pattern: 'pond' },
92576                     { water: 'reservoir', pattern: 'water_standing' },
92577                     { pattern: 'waves' }
92578                 ],
92579                 wetland: [
92580                     { wetland: 'marsh', pattern: 'wetland_marsh' },
92581                     { wetland: 'swamp', pattern: 'wetland_swamp' },
92582                     { wetland: 'bog', pattern: 'wetland_bog' },
92583                     { wetland: 'reedbed', pattern: 'wetland_reedbed' },
92584                     { pattern: 'wetland' }
92585                 ],
92586                 wood: [
92587                     { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' },
92588                     { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' },
92589                     { leaf_type: 'leafless', pattern: 'forest_leafless' },
92590                     { pattern: 'forest' } // same as 'leaf_type:mixed'
92591                 ]
92592             },
92593             traffic_calming: {
92594                 island: [
92595                     { surface: 'grass', pattern: 'grass' } ],
92596                 chicane: [
92597                     { surface: 'grass', pattern: 'grass' } ],
92598                 choker: [
92599                     { surface: 'grass', pattern: 'grass' } ]
92600             }
92601         };
92602
92603         function svgTagPattern(tags) {
92604             // Skip pattern filling if this is a building (buildings don't get patterns applied)
92605             if (tags.building && tags.building !== 'no') {
92606                 return null;
92607             }
92608
92609             for (var tag in patterns) {
92610                 var entityValue = tags[tag];
92611                 if (!entityValue) { continue; }
92612
92613                 if (typeof patterns[tag] === 'string') { // extra short syntax (just tag) - pattern name
92614                     return 'pattern-' + patterns[tag];
92615                 } else {
92616                     var values = patterns[tag];
92617                     for (var value in values) {
92618                         if (entityValue !== value) { continue; }
92619
92620                         var rules = values[value];
92621                         if (typeof rules === 'string') { // short syntax - pattern name
92622                             return 'pattern-' + rules;
92623                         }
92624
92625                         // long syntax - rule array
92626                         for (var ruleKey in rules) {
92627                             var rule = rules[ruleKey];
92628
92629                             var pass = true;
92630                             for (var criterion in rule) {
92631                                 if (criterion !== 'pattern') { // reserved for pattern name
92632                                     // The only rule is a required tag-value pair
92633                                     var v = tags[criterion];
92634                                     if (!v || v !== rule[criterion]) {
92635                                         pass = false;
92636                                         break;
92637                                     }
92638                                 }
92639                             }
92640
92641                             if (pass) {
92642                                 return 'pattern-' + rule.pattern;
92643                             }
92644                         }
92645                     }
92646                 }
92647             }
92648
92649             return null;
92650         }
92651
92652         function svgAreas(projection, context) {
92653
92654
92655             function getPatternStyle(tags) {
92656                 var imageID = svgTagPattern(tags);
92657                 if (imageID) {
92658                     return 'url("#' + imageID + '")';
92659                 }
92660                 return '';
92661             }
92662
92663
92664             function drawTargets(selection, graph, entities, filter) {
92665                 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
92666                 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
92667                 var getPath = svgPath(projection).geojson;
92668                 var activeID = context.activeID();
92669                 var base = context.history().base();
92670
92671                 // The targets and nopes will be MultiLineString sub-segments of the ways
92672                 var data = { targets: [], nopes: [] };
92673
92674                 entities.forEach(function(way) {
92675                     var features = svgSegmentWay(way, graph, activeID);
92676                     data.targets.push.apply(data.targets, features.passive);
92677                     data.nopes.push.apply(data.nopes, features.active);
92678                 });
92679
92680
92681                 // Targets allow hover and vertex snapping
92682                 var targetData = data.targets.filter(getPath);
92683                 var targets = selection.selectAll('.area.target-allowed')
92684                     .filter(function(d) { return filter(d.properties.entity); })
92685                     .data(targetData, function key(d) { return d.id; });
92686
92687                 // exit
92688                 targets.exit()
92689                     .remove();
92690
92691                 var segmentWasEdited = function(d) {
92692                     var wayID = d.properties.entity.id;
92693                     // if the whole line was edited, don't draw segment changes
92694                     if (!base.entities[wayID] ||
92695                         !fastDeepEqual(graph.entities[wayID].nodes, base.entities[wayID].nodes)) {
92696                         return false;
92697                     }
92698                     return d.properties.nodes.some(function(n) {
92699                         return !base.entities[n.id] ||
92700                                !fastDeepEqual(graph.entities[n.id].loc, base.entities[n.id].loc);
92701                     });
92702                 };
92703
92704                 // enter/update
92705                 targets.enter()
92706                     .append('path')
92707                     .merge(targets)
92708                     .attr('d', getPath)
92709                     .attr('class', function(d) { return 'way area target target-allowed ' + targetClass + d.id; })
92710                     .classed('segment-edited', segmentWasEdited);
92711
92712
92713                 // NOPE
92714                 var nopeData = data.nopes.filter(getPath);
92715                 var nopes = selection.selectAll('.area.target-nope')
92716                     .filter(function(d) { return filter(d.properties.entity); })
92717                     .data(nopeData, function key(d) { return d.id; });
92718
92719                 // exit
92720                 nopes.exit()
92721                     .remove();
92722
92723                 // enter/update
92724                 nopes.enter()
92725                     .append('path')
92726                     .merge(nopes)
92727                     .attr('d', getPath)
92728                     .attr('class', function(d) { return 'way area target target-nope ' + nopeClass + d.id; })
92729                     .classed('segment-edited', segmentWasEdited);
92730             }
92731
92732
92733             function drawAreas(selection, graph, entities, filter) {
92734                 var path = svgPath(projection, graph, true);
92735                 var areas = {};
92736                 var multipolygon;
92737                 var base = context.history().base();
92738
92739                 for (var i = 0; i < entities.length; i++) {
92740                     var entity = entities[i];
92741                     if (entity.geometry(graph) !== 'area') { continue; }
92742
92743                     multipolygon = osmIsOldMultipolygonOuterMember(entity, graph);
92744                     if (multipolygon) {
92745                         areas[multipolygon.id] = {
92746                             entity: multipolygon.mergeTags(entity.tags),
92747                             area: Math.abs(entity.area(graph))
92748                         };
92749                     } else if (!areas[entity.id]) {
92750                         areas[entity.id] = {
92751                             entity: entity,
92752                             area: Math.abs(entity.area(graph))
92753                         };
92754                     }
92755                 }
92756
92757                 var fills = Object.values(areas).filter(function hasPath(a) { return path(a.entity); });
92758                 fills.sort(function areaSort(a, b) { return b.area - a.area; });
92759                 fills = fills.map(function(a) { return a.entity; });
92760
92761                 var strokes = fills.filter(function(area) { return area.type === 'way'; });
92762
92763                 var data = {
92764                     clip: fills,
92765                     shadow: strokes,
92766                     stroke: strokes,
92767                     fill: fills
92768                 };
92769
92770                 var clipPaths = context.surface().selectAll('defs').selectAll('.clipPath-osm')
92771                    .filter(filter)
92772                    .data(data.clip, osmEntity.key);
92773
92774                 clipPaths.exit()
92775                    .remove();
92776
92777                 var clipPathsEnter = clipPaths.enter()
92778                    .append('clipPath')
92779                    .attr('class', 'clipPath-osm')
92780                    .attr('id', function(entity) { return entity.id + '-clippath'; });
92781
92782                 clipPathsEnter
92783                    .append('path');
92784
92785                 clipPaths.merge(clipPathsEnter)
92786                    .selectAll('path')
92787                    .attr('d', path);
92788
92789
92790                 var drawLayer = selection.selectAll('.layer-osm.areas');
92791                 var touchLayer = selection.selectAll('.layer-touch.areas');
92792
92793                 // Draw areas..
92794                 var areagroup = drawLayer
92795                     .selectAll('g.areagroup')
92796                     .data(['fill', 'shadow', 'stroke']);
92797
92798                 areagroup = areagroup.enter()
92799                     .append('g')
92800                     .attr('class', function(d) { return 'areagroup area-' + d; })
92801                     .merge(areagroup);
92802
92803                 var paths = areagroup
92804                     .selectAll('path')
92805                     .filter(filter)
92806                     .data(function(layer) { return data[layer]; }, osmEntity.key);
92807
92808                 paths.exit()
92809                     .remove();
92810
92811
92812                 var fillpaths = selection.selectAll('.area-fill path.area').nodes();
92813                 var bisect = d3_bisector(function(node) { return -node.__data__.area(graph); }).left;
92814
92815                 function sortedByArea(entity) {
92816                     if (this._parent.__data__ === 'fill') {
92817                         return fillpaths[bisect(fillpaths, -entity.area(graph))];
92818                     }
92819                 }
92820
92821                 paths = paths.enter()
92822                     .insert('path', sortedByArea)
92823                     .merge(paths)
92824                     .each(function(entity) {
92825                         var layer = this.parentNode.__data__;
92826                         this.setAttribute('class', entity.type + ' area ' + layer + ' ' + entity.id);
92827
92828                         if (layer === 'fill') {
92829                             this.setAttribute('clip-path', 'url(#' + entity.id + '-clippath)');
92830                             this.style.fill = this.style.stroke = getPatternStyle(entity.tags);
92831                         }
92832                     })
92833                     .classed('added', function(d) {
92834                         return !base.entities[d.id];
92835                     })
92836                     .classed('geometry-edited', function(d) {
92837                         return graph.entities[d.id] &&
92838                             base.entities[d.id] &&
92839                             !fastDeepEqual(graph.entities[d.id].nodes, base.entities[d.id].nodes);
92840                     })
92841                     .classed('retagged', function(d) {
92842                         return graph.entities[d.id] &&
92843                             base.entities[d.id] &&
92844                             !fastDeepEqual(graph.entities[d.id].tags, base.entities[d.id].tags);
92845                     })
92846                     .call(svgTagClasses())
92847                     .attr('d', path);
92848
92849
92850                 // Draw touch targets..
92851                 touchLayer
92852                     .call(drawTargets, graph, data.stroke, filter);
92853             }
92854
92855             return drawAreas;
92856         }
92857
92858         //[4]           NameStartChar      ::=          ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
92859         //[4a]          NameChar           ::=          NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
92860         //[5]           Name       ::=          NameStartChar (NameChar)*
92861         var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;//\u10000-\uEFFFF
92862         var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
92863         var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
92864         //var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
92865         //var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')
92866
92867         //S_TAG,        S_ATTR, S_EQ,   S_ATTR_NOQUOT_VALUE
92868         //S_ATTR_SPACE, S_ATTR_END,     S_TAG_SPACE, S_TAG_CLOSE
92869         var S_TAG = 0;//tag name offerring
92870         var S_ATTR = 1;//attr name offerring 
92871         var S_ATTR_SPACE=2;//attr name end and space offer
92872         var S_EQ = 3;//=space?
92873         var S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)
92874         var S_ATTR_END = 5;//attr value end and no space(quot end)
92875         var S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)
92876         var S_TAG_CLOSE = 7;//closed el<el />
92877
92878         function XMLReader(){
92879                 
92880         }
92881
92882         XMLReader.prototype = {
92883                 parse:function(source,defaultNSMap,entityMap){
92884                         var domBuilder = this.domBuilder;
92885                         domBuilder.startDocument();
92886                         _copy(defaultNSMap ,defaultNSMap = {});
92887                         parse$2(source,defaultNSMap,entityMap,
92888                                         domBuilder,this.errorHandler);
92889                         domBuilder.endDocument();
92890                 }
92891         };
92892         function parse$2(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
92893                 function fixedFromCharCode(code) {
92894                         // String.prototype.fromCharCode does not supports
92895                         // > 2 bytes unicode chars directly
92896                         if (code > 0xffff) {
92897                                 code -= 0x10000;
92898                                 var surrogate1 = 0xd800 + (code >> 10)
92899                                         , surrogate2 = 0xdc00 + (code & 0x3ff);
92900
92901                                 return String.fromCharCode(surrogate1, surrogate2);
92902                         } else {
92903                                 return String.fromCharCode(code);
92904                         }
92905                 }
92906                 function entityReplacer(a){
92907                         var k = a.slice(1,-1);
92908                         if(k in entityMap){
92909                                 return entityMap[k]; 
92910                         }else if(k.charAt(0) === '#'){
92911                                 return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))
92912                         }else{
92913                                 errorHandler.error('entity not found:'+a);
92914                                 return a;
92915                         }
92916                 }
92917                 function appendText(end){//has some bugs
92918                         if(end>start){
92919                                 var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
92920                                 locator&&position(start);
92921                                 domBuilder.characters(xt,0,end-start);
92922                                 start = end;
92923                         }
92924                 }
92925                 function position(p,m){
92926                         while(p>=lineEnd && (m = linePattern.exec(source))){
92927                                 lineStart = m.index;
92928                                 lineEnd = lineStart + m[0].length;
92929                                 locator.lineNumber++;
92930                                 //console.log('line++:',locator,startPos,endPos)
92931                         }
92932                         locator.columnNumber = p-lineStart+1;
92933                 }
92934                 var lineStart = 0;
92935                 var lineEnd = 0;
92936                 var linePattern = /.*(?:\r\n?|\n)|.*$/g;
92937                 var locator = domBuilder.locator;
92938                 
92939                 var parseStack = [{currentNSMap:defaultNSMapCopy}];
92940                 var closeMap = {};
92941                 var start = 0;
92942                 while(true){
92943                         try{
92944                                 var tagStart = source.indexOf('<',start);
92945                                 if(tagStart<0){
92946                                         if(!source.substr(start).match(/^\s*$/)){
92947                                                 var doc = domBuilder.doc;
92948                                         var text = doc.createTextNode(source.substr(start));
92949                                         doc.appendChild(text);
92950                                         domBuilder.currentElement = text;
92951                                         }
92952                                         return;
92953                                 }
92954                                 if(tagStart>start){
92955                                         appendText(tagStart);
92956                                 }
92957                                 switch(source.charAt(tagStart+1)){
92958                                 case '/':
92959                                         var end = source.indexOf('>',tagStart+3);
92960                                         var tagName = source.substring(tagStart+2,end);
92961                                         var config = parseStack.pop();
92962                                         if(end<0){
92963                                                 
92964                                         tagName = source.substring(tagStart+2).replace(/[\s<].*/,'');
92965                                         //console.error('#@@@@@@'+tagName)
92966                                         errorHandler.error("end tag name: "+tagName+' is not complete:'+config.tagName);
92967                                         end = tagStart+1+tagName.length;
92968                                 }else if(tagName.match(/\s</)){
92969                                         tagName = tagName.replace(/[\s<].*/,'');
92970                                         errorHandler.error("end tag name: "+tagName+' maybe not complete');
92971                                         end = tagStart+1+tagName.length;
92972                                         }
92973                                         //console.error(parseStack.length,parseStack)
92974                                         //console.error(config);
92975                                         var localNSMap = config.localNSMap;
92976                                         var endMatch = config.tagName == tagName;
92977                                         var endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase();
92978                                 if(endIgnoreCaseMach){
92979                                         domBuilder.endElement(config.uri,config.localName,tagName);
92980                                                 if(localNSMap){
92981                                                         for(var prefix in localNSMap){
92982                                                                 domBuilder.endPrefixMapping(prefix) ;
92983                                                         }
92984                                                 }
92985                                                 if(!endMatch){
92986                                         errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName );
92987                                                 }
92988                                 }else{
92989                                         parseStack.push(config);
92990                                 }
92991                                         
92992                                         end++;
92993                                         break;
92994                                         // end elment
92995                                 case '?':// <?...?>
92996                                         locator&&position(tagStart);
92997                                         end = parseInstruction(source,tagStart,domBuilder);
92998                                         break;
92999                                 case '!':// <!doctype,<![CDATA,<!--
93000                                         locator&&position(tagStart);
93001                                         end = parseDCC(source,tagStart,domBuilder,errorHandler);
93002                                         break;
93003                                 default:
93004                                         locator&&position(tagStart);
93005                                         var el = new ElementAttributes();
93006                                         var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
93007                                         //elStartEnd
93008                                         var end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);
93009                                         var len = el.length;
93010                                         
93011                                         
93012                                         if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){
93013                                                 el.closed = true;
93014                                                 if(!entityMap.nbsp){
93015                                                         errorHandler.warning('unclosed xml attribute');
93016                                                 }
93017                                         }
93018                                         if(locator && len){
93019                                                 var locator2 = copyLocator(locator,{});
93020                                                 //try{//attribute position fixed
93021                                                 for(var i = 0;i<len;i++){
93022                                                         var a = el[i];
93023                                                         position(a.offset);
93024                                                         a.locator = copyLocator(locator,{});
93025                                                 }
93026                                                 //}catch(e){console.error('@@@@@'+e)}
93027                                                 domBuilder.locator = locator2;
93028                                                 if(appendElement(el,domBuilder,currentNSMap)){
93029                                                         parseStack.push(el);
93030                                                 }
93031                                                 domBuilder.locator = locator;
93032                                         }else{
93033                                                 if(appendElement(el,domBuilder,currentNSMap)){
93034                                                         parseStack.push(el);
93035                                                 }
93036                                         }
93037                                         
93038                                         
93039                                         
93040                                         if(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){
93041                                                 end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder);
93042                                         }else{
93043                                                 end++;
93044                                         }
93045                                 }
93046                         }catch(e){
93047                                 errorHandler.error('element parse error: '+e);
93048                                 //errorHandler.error('element parse error: '+e);
93049                                 end = -1;
93050                                 //throw e;
93051                         }
93052                         if(end>start){
93053                                 start = end;
93054                         }else{
93055                                 //TODO: 这里有可能sax回退,有位置错误风险
93056                                 appendText(Math.max(tagStart,start)+1);
93057                         }
93058                 }
93059         }
93060         function copyLocator(f,t){
93061                 t.lineNumber = f.lineNumber;
93062                 t.columnNumber = f.columnNumber;
93063                 return t;
93064         }
93065
93066         /**
93067          * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);
93068          * @return end of the elementStartPart(end of elementEndPart for selfClosed el)
93069          */
93070         function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){
93071                 var attrName;
93072                 var value;
93073                 var p = ++start;
93074                 var s = S_TAG;//status
93075                 while(true){
93076                         var c = source.charAt(p);
93077                         switch(c){
93078                         case '=':
93079                                 if(s === S_ATTR){//attrName
93080                                         attrName = source.slice(start,p);
93081                                         s = S_EQ;
93082                                 }else if(s === S_ATTR_SPACE){
93083                                         s = S_EQ;
93084                                 }else{
93085                                         //fatalError: equal must after attrName or space after attrName
93086                                         throw new Error('attribute equal must after attrName');
93087                                 }
93088                                 break;
93089                         case '\'':
93090                         case '"':
93091                                 if(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE
93092                                         ){//equal
93093                                         if(s === S_ATTR){
93094                                                 errorHandler.warning('attribute value must after "="');
93095                                                 attrName = source.slice(start,p);
93096                                         }
93097                                         start = p+1;
93098                                         p = source.indexOf(c,start);
93099                                         if(p>0){
93100                                                 value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
93101                                                 el.add(attrName,value,start-1);
93102                                                 s = S_ATTR_END;
93103                                         }else{
93104                                                 //fatalError: no end quot match
93105                                                 throw new Error('attribute value no end \''+c+'\' match');
93106                                         }
93107                                 }else if(s == S_ATTR_NOQUOT_VALUE){
93108                                         value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
93109                                         //console.log(attrName,value,start,p)
93110                                         el.add(attrName,value,start);
93111                                         //console.dir(el)
93112                                         errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!');
93113                                         start = p+1;
93114                                         s = S_ATTR_END;
93115                                 }else{
93116                                         //fatalError: no equal before
93117                                         throw new Error('attribute value must after "="');
93118                                 }
93119                                 break;
93120                         case '/':
93121                                 switch(s){
93122                                 case S_TAG:
93123                                         el.setTagName(source.slice(start,p));
93124                                 case S_ATTR_END:
93125                                 case S_TAG_SPACE:
93126                                 case S_TAG_CLOSE:
93127                                         s =S_TAG_CLOSE;
93128                                         el.closed = true;
93129                                 case S_ATTR_NOQUOT_VALUE:
93130                                 case S_ATTR:
93131                                 case S_ATTR_SPACE:
93132                                         break;
93133                                 //case S_EQ:
93134                                 default:
93135                                         throw new Error("attribute invalid close char('/')")
93136                                 }
93137                                 break;
93138                         case ''://end document
93139                                 //throw new Error('unexpected end of input')
93140                                 errorHandler.error('unexpected end of input');
93141                                 if(s == S_TAG){
93142                                         el.setTagName(source.slice(start,p));
93143                                 }
93144                                 return p;
93145                         case '>':
93146                                 switch(s){
93147                                 case S_TAG:
93148                                         el.setTagName(source.slice(start,p));
93149                                 case S_ATTR_END:
93150                                 case S_TAG_SPACE:
93151                                 case S_TAG_CLOSE:
93152                                         break;//normal
93153                                 case S_ATTR_NOQUOT_VALUE://Compatible state
93154                                 case S_ATTR:
93155                                         value = source.slice(start,p);
93156                                         if(value.slice(-1) === '/'){
93157                                                 el.closed  = true;
93158                                                 value = value.slice(0,-1);
93159                                         }
93160                                 case S_ATTR_SPACE:
93161                                         if(s === S_ATTR_SPACE){
93162                                                 value = attrName;
93163                                         }
93164                                         if(s == S_ATTR_NOQUOT_VALUE){
93165                                                 errorHandler.warning('attribute "'+value+'" missed quot(")!!');
93166                                                 el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start);
93167                                         }else{
93168                                                 if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !value.match(/^(?:disabled|checked|selected)$/i)){
93169                                                         errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!');
93170                                                 }
93171                                                 el.add(value,value,start);
93172                                         }
93173                                         break;
93174                                 case S_EQ:
93175                                         throw new Error('attribute value missed!!');
93176                                 }
93177         //                      console.log(tagName,tagNamePattern,tagNamePattern.test(tagName))
93178                                 return p;
93179                         /*xml space '\x20' | #x9 | #xD | #xA; */
93180                         case '\u0080':
93181                                 c = ' ';
93182                         default:
93183                                 if(c<= ' '){//space
93184                                         switch(s){
93185                                         case S_TAG:
93186                                                 el.setTagName(source.slice(start,p));//tagName
93187                                                 s = S_TAG_SPACE;
93188                                                 break;
93189                                         case S_ATTR:
93190                                                 attrName = source.slice(start,p);
93191                                                 s = S_ATTR_SPACE;
93192                                                 break;
93193                                         case S_ATTR_NOQUOT_VALUE:
93194                                                 var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
93195                                                 errorHandler.warning('attribute "'+value+'" missed quot(")!!');
93196                                                 el.add(attrName,value,start);
93197                                         case S_ATTR_END:
93198                                                 s = S_TAG_SPACE;
93199                                                 break;
93200                                         //case S_TAG_SPACE:
93201                                         //case S_EQ:
93202                                         //case S_ATTR_SPACE:
93203                                         //      void();break;
93204                                         //case S_TAG_CLOSE:
93205                                                 //ignore warning
93206                                         }
93207                                 }else{//not space
93208         //S_TAG,        S_ATTR, S_EQ,   S_ATTR_NOQUOT_VALUE
93209         //S_ATTR_SPACE, S_ATTR_END,     S_TAG_SPACE, S_TAG_CLOSE
93210                                         switch(s){
93211                                         //case S_TAG:void();break;
93212                                         //case S_ATTR:void();break;
93213                                         //case S_ATTR_NOQUOT_VALUE:void();break;
93214                                         case S_ATTR_SPACE:
93215                                                 var tagName =  el.tagName;
93216                                                 if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !attrName.match(/^(?:disabled|checked|selected)$/i)){
93217                                                         errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead2!!');
93218                                                 }
93219                                                 el.add(attrName,attrName,start);
93220                                                 start = p;
93221                                                 s = S_ATTR;
93222                                                 break;
93223                                         case S_ATTR_END:
93224                                                 errorHandler.warning('attribute space is required"'+attrName+'"!!');
93225                                         case S_TAG_SPACE:
93226                                                 s = S_ATTR;
93227                                                 start = p;
93228                                                 break;
93229                                         case S_EQ:
93230                                                 s = S_ATTR_NOQUOT_VALUE;
93231                                                 start = p;
93232                                                 break;
93233                                         case S_TAG_CLOSE:
93234                                                 throw new Error("elements closed character '/' and '>' must be connected to");
93235                                         }
93236                                 }
93237                         }//end outer switch
93238                         //console.log('p++',p)
93239                         p++;
93240                 }
93241         }
93242         /**
93243          * @return true if has new namespace define
93244          */
93245         function appendElement(el,domBuilder,currentNSMap){
93246                 var tagName = el.tagName;
93247                 var localNSMap = null;
93248                 //var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
93249                 var i = el.length;
93250                 while(i--){
93251                         var a = el[i];
93252                         var qName = a.qName;
93253                         var value = a.value;
93254                         var nsp = qName.indexOf(':');
93255                         if(nsp>0){
93256                                 var prefix = a.prefix = qName.slice(0,nsp);
93257                                 var localName = qName.slice(nsp+1);
93258                                 var nsPrefix = prefix === 'xmlns' && localName;
93259                         }else{
93260                                 localName = qName;
93261                                 prefix = null;
93262                                 nsPrefix = qName === 'xmlns' && '';
93263                         }
93264                         //can not set prefix,because prefix !== ''
93265                         a.localName = localName ;
93266                         //prefix == null for no ns prefix attribute 
93267                         if(nsPrefix !== false){//hack!!
93268                                 if(localNSMap == null){
93269                                         localNSMap = {};
93270                                         //console.log(currentNSMap,0)
93271                                         _copy(currentNSMap,currentNSMap={});
93272                                         //console.log(currentNSMap,1)
93273                                 }
93274                                 currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
93275                                 a.uri = 'http://www.w3.org/2000/xmlns/';
93276                                 domBuilder.startPrefixMapping(nsPrefix, value); 
93277                         }
93278                 }
93279                 var i = el.length;
93280                 while(i--){
93281                         a = el[i];
93282                         var prefix = a.prefix;
93283                         if(prefix){//no prefix attribute has no namespace
93284                                 if(prefix === 'xml'){
93285                                         a.uri = 'http://www.w3.org/XML/1998/namespace';
93286                                 }if(prefix !== 'xmlns'){
93287                                         a.uri = currentNSMap[prefix || ''];
93288                                         
93289                                         //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}
93290                                 }
93291                         }
93292                 }
93293                 var nsp = tagName.indexOf(':');
93294                 if(nsp>0){
93295                         prefix = el.prefix = tagName.slice(0,nsp);
93296                         localName = el.localName = tagName.slice(nsp+1);
93297                 }else{
93298                         prefix = null;//important!!
93299                         localName = el.localName = tagName;
93300                 }
93301                 //no prefix element has default namespace
93302                 var ns = el.uri = currentNSMap[prefix || ''];
93303                 domBuilder.startElement(ns,localName,tagName,el);
93304                 //endPrefixMapping and startPrefixMapping have not any help for dom builder
93305                 //localNSMap = null
93306                 if(el.closed){
93307                         domBuilder.endElement(ns,localName,tagName);
93308                         if(localNSMap){
93309                                 for(prefix in localNSMap){
93310                                         domBuilder.endPrefixMapping(prefix); 
93311                                 }
93312                         }
93313                 }else{
93314                         el.currentNSMap = currentNSMap;
93315                         el.localNSMap = localNSMap;
93316                         //parseStack.push(el);
93317                         return true;
93318                 }
93319         }
93320         function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){
93321                 if(/^(?:script|textarea)$/i.test(tagName)){
93322                         var elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);
93323                         var text = source.substring(elStartEnd+1,elEndStart);
93324                         if(/[&<]/.test(text)){
93325                                 if(/^script$/i.test(tagName)){
93326                                         //if(!/\]\]>/.test(text)){
93327                                                 //lexHandler.startCDATA();
93328                                                 domBuilder.characters(text,0,text.length);
93329                                                 //lexHandler.endCDATA();
93330                                                 return elEndStart;
93331                                         //}
93332                                 }//}else{//text area
93333                                         text = text.replace(/&#?\w+;/g,entityReplacer);
93334                                         domBuilder.characters(text,0,text.length);
93335                                         return elEndStart;
93336                                 //}
93337                                 
93338                         }
93339                 }
93340                 return elStartEnd+1;
93341         }
93342         function fixSelfClosed(source,elStartEnd,tagName,closeMap){
93343                 //if(tagName in closeMap){
93344                 var pos = closeMap[tagName];
93345                 if(pos == null){
93346                         //console.log(tagName)
93347                         pos =  source.lastIndexOf('</'+tagName+'>');
93348                         if(pos<elStartEnd){//忘记闭合
93349                                 pos = source.lastIndexOf('</'+tagName);
93350                         }
93351                         closeMap[tagName] =pos;
93352                 }
93353                 return pos<elStartEnd;
93354                 //} 
93355         }
93356         function _copy(source,target){
93357                 for(var n in source){target[n] = source[n];}
93358         }
93359         function parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'
93360                 var next= source.charAt(start+2);
93361                 switch(next){
93362                 case '-':
93363                         if(source.charAt(start + 3) === '-'){
93364                                 var end = source.indexOf('-->',start+4);
93365                                 //append comment source.substring(4,end)//<!--
93366                                 if(end>start){
93367                                         domBuilder.comment(source,start+4,end-start-4);
93368                                         return end+3;
93369                                 }else{
93370                                         errorHandler.error("Unclosed comment");
93371                                         return -1;
93372                                 }
93373                         }else{
93374                                 //error
93375                                 return -1;
93376                         }
93377                 default:
93378                         if(source.substr(start+3,6) == 'CDATA['){
93379                                 var end = source.indexOf(']]>',start+9);
93380                                 domBuilder.startCDATA();
93381                                 domBuilder.characters(source,start+9,end-start-9);
93382                                 domBuilder.endCDATA(); 
93383                                 return end+3;
93384                         }
93385                         //<!DOCTYPE
93386                         //startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId) 
93387                         var matchs = split(source,start);
93388                         var len = matchs.length;
93389                         if(len>1 && /!doctype/i.test(matchs[0][0])){
93390                                 var name = matchs[1][0];
93391                                 var pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0];
93392                                 var sysid = len>4 && matchs[4][0];
93393                                 var lastMatch = matchs[len-1];
93394                                 domBuilder.startDTD(name,pubid && pubid.replace(/^(['"])(.*?)\1$/,'$2'),
93395                                                 sysid && sysid.replace(/^(['"])(.*?)\1$/,'$2'));
93396                                 domBuilder.endDTD();
93397                                 
93398                                 return lastMatch.index+lastMatch[0].length
93399                         }
93400                 }
93401                 return -1;
93402         }
93403
93404
93405
93406         function parseInstruction(source,start,domBuilder){
93407                 var end = source.indexOf('?>',start);
93408                 if(end){
93409                         var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
93410                         if(match){
93411                                 var len = match[0].length;
93412                                 domBuilder.processingInstruction(match[1], match[2]) ;
93413                                 return end+2;
93414                         }else{//error
93415                                 return -1;
93416                         }
93417                 }
93418                 return -1;
93419         }
93420
93421         /**
93422          * @param source
93423          */
93424         function ElementAttributes(source){
93425                 
93426         }
93427         ElementAttributes.prototype = {
93428                 setTagName:function(tagName){
93429                         if(!tagNamePattern.test(tagName)){
93430                                 throw new Error('invalid tagName:'+tagName)
93431                         }
93432                         this.tagName = tagName;
93433                 },
93434                 add:function(qName,value,offset){
93435                         if(!tagNamePattern.test(qName)){
93436                                 throw new Error('invalid attribute:'+qName)
93437                         }
93438                         this[this.length++] = {qName:qName,value:value,offset:offset};
93439                 },
93440                 length:0,
93441                 getLocalName:function(i){return this[i].localName},
93442                 getLocator:function(i){return this[i].locator},
93443                 getQName:function(i){return this[i].qName},
93444                 getURI:function(i){return this[i].uri},
93445                 getValue:function(i){return this[i].value}
93446         //      ,getIndex:function(uri, localName)){
93447         //              if(localName){
93448         //                      
93449         //              }else{
93450         //                      var qName = uri
93451         //              }
93452         //      },
93453         //      getValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},
93454         //      getType:function(uri,localName){}
93455         //      getType:function(i){},
93456         };
93457
93458
93459
93460
93461         function _set_proto_(thiz,parent){
93462                 thiz.__proto__ = parent;
93463                 return thiz;
93464         }
93465         if(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){
93466                 _set_proto_ = function(thiz,parent){
93467                         function p(){}          p.prototype = parent;
93468                         p = new p();
93469                         for(parent in thiz){
93470                                 p[parent] = thiz[parent];
93471                         }
93472                         return p;
93473                 };
93474         }
93475
93476         function split(source,start){
93477                 var match;
93478                 var buf = [];
93479                 var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
93480                 reg.lastIndex = start;
93481                 reg.exec(source);//skip <
93482                 while(match = reg.exec(source)){
93483                         buf.push(match);
93484                         if(match[1]){ return buf; }
93485                 }
93486         }
93487
93488         var XMLReader_1 = XMLReader;
93489
93490         var sax = {
93491                 XMLReader: XMLReader_1
93492         };
93493
93494         /*
93495          * DOM Level 2
93496          * Object DOMException
93497          * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html
93498          * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html
93499          */
93500
93501         function copy$3(src,dest){
93502                 for(var p in src){
93503                         dest[p] = src[p];
93504                 }
93505         }
93506         /**
93507         ^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));?
93508         ^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));?
93509          */
93510         function _extends(Class,Super){
93511                 var pt = Class.prototype;
93512                 if(Object.create){
93513                         var ppt = Object.create(Super.prototype);
93514                         pt.__proto__ = ppt;
93515                 }
93516                 if(!(pt instanceof Super)){
93517                         function t(){}          t.prototype = Super.prototype;
93518                         t = new t();
93519                         copy$3(pt,t);
93520                         Class.prototype = pt = t;
93521                 }
93522                 if(pt.constructor != Class){
93523                         if(typeof Class != 'function'){
93524                                 console.error("unknow Class:"+Class);
93525                         }
93526                         pt.constructor = Class;
93527                 }
93528         }
93529         var htmlns = 'http://www.w3.org/1999/xhtml' ;
93530         // Node Types
93531         var NodeType = {};
93532         var ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;
93533         var ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;
93534         var TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;
93535         var CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;
93536         var ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;
93537         var ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;
93538         var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;
93539         var COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;
93540         var DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;
93541         var DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;
93542         var DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;
93543         var NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;
93544
93545         // ExceptionCode
93546         var ExceptionCode = {};
93547         var ExceptionMessage = {};
93548         var INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]="Index size error"),1);
93549         var DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]="DOMString size error"),2);
93550         var HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]="Hierarchy request error"),3);
93551         var WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]="Wrong document"),4);
93552         var INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]="Invalid character"),5);
93553         var NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]="No data allowed"),6);
93554         var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7);
93555         var NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]="Not found"),8);
93556         var NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]="Not supported"),9);
93557         var INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]="Attribute in use"),10);
93558         //level2
93559         var INVALID_STATE_ERR           = ExceptionCode.INVALID_STATE_ERR               = ((ExceptionMessage[11]="Invalid state"),11);
93560         var SYNTAX_ERR                  = ExceptionCode.SYNTAX_ERR                      = ((ExceptionMessage[12]="Syntax error"),12);
93561         var INVALID_MODIFICATION_ERR    = ExceptionCode.INVALID_MODIFICATION_ERR        = ((ExceptionMessage[13]="Invalid modification"),13);
93562         var NAMESPACE_ERR               = ExceptionCode.NAMESPACE_ERR                   = ((ExceptionMessage[14]="Invalid namespace"),14);
93563         var INVALID_ACCESS_ERR          = ExceptionCode.INVALID_ACCESS_ERR              = ((ExceptionMessage[15]="Invalid access"),15);
93564
93565
93566         function DOMException$2(code, message) {
93567                 if(message instanceof Error){
93568                         var error = message;
93569                 }else{
93570                         error = this;
93571                         Error.call(this, ExceptionMessage[code]);
93572                         this.message = ExceptionMessage[code];
93573                         if(Error.captureStackTrace) { Error.captureStackTrace(this, DOMException$2); }
93574                 }
93575                 error.code = code;
93576                 if(message) { this.message = this.message + ": " + message; }
93577                 return error;
93578         }DOMException$2.prototype = Error.prototype;
93579         copy$3(ExceptionCode,DOMException$2);
93580         /**
93581          * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177
93582          * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.
93583          * The items in the NodeList are accessible via an integral index, starting from 0.
93584          */
93585         function NodeList() {
93586         }NodeList.prototype = {
93587                 /**
93588                  * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.
93589                  * @standard level1
93590                  */
93591                 length:0, 
93592                 /**
93593                  * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.
93594                  * @standard level1
93595                  * @param index  unsigned long 
93596                  *   Index into the collection.
93597                  * @return Node
93598                  *      The node at the indexth position in the NodeList, or null if that is not a valid index. 
93599                  */
93600                 item: function(index) {
93601                         return this[index] || null;
93602                 },
93603                 toString:function(isHTML,nodeFilter){
93604                         for(var buf = [], i = 0;i<this.length;i++){
93605                                 serializeToString(this[i],buf,isHTML,nodeFilter);
93606                         }
93607                         return buf.join('');
93608                 }
93609         };
93610         function LiveNodeList(node,refresh){
93611                 this._node = node;
93612                 this._refresh = refresh;
93613                 _updateLiveList(this);
93614         }
93615         function _updateLiveList(list){
93616                 var inc = list._node._inc || list._node.ownerDocument._inc;
93617                 if(list._inc != inc){
93618                         var ls = list._refresh(list._node);
93619                         //console.log(ls.length)
93620                         __set__(list,'length',ls.length);
93621                         copy$3(ls,list);
93622                         list._inc = inc;
93623                 }
93624         }
93625         LiveNodeList.prototype.item = function(i){
93626                 _updateLiveList(this);
93627                 return this[i];
93628         };
93629
93630         _extends(LiveNodeList,NodeList);
93631         /**
93632          * 
93633          * Objects implementing the NamedNodeMap interface are used to represent collections of nodes that can be accessed by name. Note that NamedNodeMap does not inherit from NodeList; NamedNodeMaps are not maintained in any particular order. Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index, but this is simply to allow convenient enumeration of the contents of a NamedNodeMap, and does not imply that the DOM specifies an order to these Nodes.
93634          * NamedNodeMap objects in the DOM are live.
93635          * used for attributes or DocumentType entities 
93636          */
93637         function NamedNodeMap() {
93638         }
93639         function _findNodeIndex(list,node){
93640                 var i = list.length;
93641                 while(i--){
93642                         if(list[i] === node){return i}
93643                 }
93644         }
93645
93646         function _addNamedNode(el,list,newAttr,oldAttr){
93647                 if(oldAttr){
93648                         list[_findNodeIndex(list,oldAttr)] = newAttr;
93649                 }else{
93650                         list[list.length++] = newAttr;
93651                 }
93652                 if(el){
93653                         newAttr.ownerElement = el;
93654                         var doc = el.ownerDocument;
93655                         if(doc){
93656                                 oldAttr && _onRemoveAttribute(doc,el,oldAttr);
93657                                 _onAddAttribute(doc,el,newAttr);
93658                         }
93659                 }
93660         }
93661         function _removeNamedNode(el,list,attr){
93662                 //console.log('remove attr:'+attr)
93663                 var i = _findNodeIndex(list,attr);
93664                 if(i>=0){
93665                         var lastIndex = list.length-1;
93666                         while(i<lastIndex){
93667                                 list[i] = list[++i];
93668                         }
93669                         list.length = lastIndex;
93670                         if(el){
93671                                 var doc = el.ownerDocument;
93672                                 if(doc){
93673                                         _onRemoveAttribute(doc,el,attr);
93674                                         attr.ownerElement = null;
93675                                 }
93676                         }
93677                 }else{
93678                         throw DOMException$2(NOT_FOUND_ERR,new Error(el.tagName+'@'+attr))
93679                 }
93680         }
93681         NamedNodeMap.prototype = {
93682                 length:0,
93683                 item:NodeList.prototype.item,
93684                 getNamedItem: function(key) {
93685         //              if(key.indexOf(':')>0 || key == 'xmlns'){
93686         //                      return null;
93687         //              }
93688                         //console.log()
93689                         var i = this.length;
93690                         while(i--){
93691                                 var attr = this[i];
93692                                 //console.log(attr.nodeName,key)
93693                                 if(attr.nodeName == key){
93694                                         return attr;
93695                                 }
93696                         }
93697                 },
93698                 setNamedItem: function(attr) {
93699                         var el = attr.ownerElement;
93700                         if(el && el!=this._ownerElement){
93701                                 throw new DOMException$2(INUSE_ATTRIBUTE_ERR);
93702                         }
93703                         var oldAttr = this.getNamedItem(attr.nodeName);
93704                         _addNamedNode(this._ownerElement,this,attr,oldAttr);
93705                         return oldAttr;
93706                 },
93707                 /* returns Node */
93708                 setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR
93709                         var el = attr.ownerElement, oldAttr;
93710                         if(el && el!=this._ownerElement){
93711                                 throw new DOMException$2(INUSE_ATTRIBUTE_ERR);
93712                         }
93713                         oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);
93714                         _addNamedNode(this._ownerElement,this,attr,oldAttr);
93715                         return oldAttr;
93716                 },
93717
93718                 /* returns Node */
93719                 removeNamedItem: function(key) {
93720                         var attr = this.getNamedItem(key);
93721                         _removeNamedNode(this._ownerElement,this,attr);
93722                         return attr;
93723                         
93724                         
93725                 },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR
93726                 
93727                 //for level2
93728                 removeNamedItemNS:function(namespaceURI,localName){
93729                         var attr = this.getNamedItemNS(namespaceURI,localName);
93730                         _removeNamedNode(this._ownerElement,this,attr);
93731                         return attr;
93732                 },
93733                 getNamedItemNS: function(namespaceURI, localName) {
93734                         var i = this.length;
93735                         while(i--){
93736                                 var node = this[i];
93737                                 if(node.localName == localName && node.namespaceURI == namespaceURI){
93738                                         return node;
93739                                 }
93740                         }
93741                         return null;
93742                 }
93743         };
93744         /**
93745          * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490
93746          */
93747         function DOMImplementation(/* Object */ features) {
93748                 this._features = {};
93749                 if (features) {
93750                         for (var feature in features) {
93751                                  this._features = features[feature];
93752                         }
93753                 }
93754         }
93755         DOMImplementation.prototype = {
93756                 hasFeature: function(/* string */ feature, /* string */ version) {
93757                         var versions = this._features[feature.toLowerCase()];
93758                         if (versions && (!version || version in versions)) {
93759                                 return true;
93760                         } else {
93761                                 return false;
93762                         }
93763                 },
93764                 // Introduced in DOM Level 2:
93765                 createDocument:function(namespaceURI,  qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR
93766                         var doc = new Document();
93767                         doc.implementation = this;
93768                         doc.childNodes = new NodeList();
93769                         doc.doctype = doctype;
93770                         if(doctype){
93771                                 doc.appendChild(doctype);
93772                         }
93773                         if(qualifiedName){
93774                                 var root = doc.createElementNS(namespaceURI,qualifiedName);
93775                                 doc.appendChild(root);
93776                         }
93777                         return doc;
93778                 },
93779                 // Introduced in DOM Level 2:
93780                 createDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR
93781                         var node = new DocumentType();
93782                         node.name = qualifiedName;
93783                         node.nodeName = qualifiedName;
93784                         node.publicId = publicId;
93785                         node.systemId = systemId;
93786                         // Introduced in DOM Level 2:
93787                         //readonly attribute DOMString        internalSubset;
93788                         
93789                         //TODO:..
93790                         //  readonly attribute NamedNodeMap     entities;
93791                         //  readonly attribute NamedNodeMap     notations;
93792                         return node;
93793                 }
93794         };
93795
93796
93797         /**
93798          * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247
93799          */
93800
93801         function Node$3() {
93802         }
93803         Node$3.prototype = {
93804                 firstChild : null,
93805                 lastChild : null,
93806                 previousSibling : null,
93807                 nextSibling : null,
93808                 attributes : null,
93809                 parentNode : null,
93810                 childNodes : null,
93811                 ownerDocument : null,
93812                 nodeValue : null,
93813                 namespaceURI : null,
93814                 prefix : null,
93815                 localName : null,
93816                 // Modified in DOM Level 2:
93817                 insertBefore:function(newChild, refChild){//raises 
93818                         return _insertBefore(this,newChild,refChild);
93819                 },
93820                 replaceChild:function(newChild, oldChild){//raises 
93821                         this.insertBefore(newChild,oldChild);
93822                         if(oldChild){
93823                                 this.removeChild(oldChild);
93824                         }
93825                 },
93826                 removeChild:function(oldChild){
93827                         return _removeChild(this,oldChild);
93828                 },
93829                 appendChild:function(newChild){
93830                         return this.insertBefore(newChild,null);
93831                 },
93832                 hasChildNodes:function(){
93833                         return this.firstChild != null;
93834                 },
93835                 cloneNode:function(deep){
93836                         return cloneNode(this.ownerDocument||this,this,deep);
93837                 },
93838                 // Modified in DOM Level 2:
93839                 normalize:function(){
93840                         var child = this.firstChild;
93841                         while(child){
93842                                 var next = child.nextSibling;
93843                                 if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){
93844                                         this.removeChild(next);
93845                                         child.appendData(next.data);
93846                                 }else{
93847                                         child.normalize();
93848                                         child = next;
93849                                 }
93850                         }
93851                 },
93852                 // Introduced in DOM Level 2:
93853                 isSupported:function(feature, version){
93854                         return this.ownerDocument.implementation.hasFeature(feature,version);
93855                 },
93856             // Introduced in DOM Level 2:
93857             hasAttributes:function(){
93858                 return this.attributes.length>0;
93859             },
93860             lookupPrefix:function(namespaceURI){
93861                 var el = this;
93862                 while(el){
93863                         var map = el._nsMap;
93864                         //console.dir(map)
93865                         if(map){
93866                                 for(var n in map){
93867                                         if(map[n] == namespaceURI){
93868                                                 return n;
93869                                         }
93870                                 }
93871                         }
93872                         el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;
93873                 }
93874                 return null;
93875             },
93876             // Introduced in DOM Level 3:
93877             lookupNamespaceURI:function(prefix){
93878                 var el = this;
93879                 while(el){
93880                         var map = el._nsMap;
93881                         //console.dir(map)
93882                         if(map){
93883                                 if(prefix in map){
93884                                         return map[prefix] ;
93885                                 }
93886                         }
93887                         el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;
93888                 }
93889                 return null;
93890             },
93891             // Introduced in DOM Level 3:
93892             isDefaultNamespace:function(namespaceURI){
93893                 var prefix = this.lookupPrefix(namespaceURI);
93894                 return prefix == null;
93895             }
93896         };
93897
93898
93899         function _xmlEncoder(c){
93900                 return c == '<' && '&lt;' ||
93901                  c == '>' && '&gt;' ||
93902                  c == '&' && '&amp;' ||
93903                  c == '"' && '&quot;' ||
93904                  '&#'+c.charCodeAt()+';'
93905         }
93906
93907
93908         copy$3(NodeType,Node$3);
93909         copy$3(NodeType,Node$3.prototype);
93910
93911         /**
93912          * @param callback return true for continue,false for break
93913          * @return boolean true: break visit;
93914          */
93915         function _visitNode(node,callback){
93916                 if(callback(node)){
93917                         return true;
93918                 }
93919                 if(node = node.firstChild){
93920                         do{
93921                                 if(_visitNode(node,callback)){return true}
93922                 }while(node=node.nextSibling)
93923             }
93924         }
93925
93926
93927
93928         function Document(){
93929         }
93930         function _onAddAttribute(doc,el,newAttr){
93931                 doc && doc._inc++;
93932                 var ns = newAttr.namespaceURI ;
93933                 if(ns == 'http://www.w3.org/2000/xmlns/'){
93934                         //update namespace
93935                         el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value;
93936                 }
93937         }
93938         function _onRemoveAttribute(doc,el,newAttr,remove){
93939                 doc && doc._inc++;
93940                 var ns = newAttr.namespaceURI ;
93941                 if(ns == 'http://www.w3.org/2000/xmlns/'){
93942                         //update namespace
93943                         delete el._nsMap[newAttr.prefix?newAttr.localName:''];
93944                 }
93945         }
93946         function _onUpdateChild(doc,el,newChild){
93947                 if(doc && doc._inc){
93948                         doc._inc++;
93949                         //update childNodes
93950                         var cs = el.childNodes;
93951                         if(newChild){
93952                                 cs[cs.length++] = newChild;
93953                         }else{
93954                                 //console.log(1)
93955                                 var child = el.firstChild;
93956                                 var i = 0;
93957                                 while(child){
93958                                         cs[i++] = child;
93959                                         child =child.nextSibling;
93960                                 }
93961                                 cs.length = i;
93962                         }
93963                 }
93964         }
93965
93966         /**
93967          * attributes;
93968          * children;
93969          * 
93970          * writeable properties:
93971          * nodeValue,Attr:value,CharacterData:data
93972          * prefix
93973          */
93974         function _removeChild(parentNode,child){
93975                 var previous = child.previousSibling;
93976                 var next = child.nextSibling;
93977                 if(previous){
93978                         previous.nextSibling = next;
93979                 }else{
93980                         parentNode.firstChild = next;
93981                 }
93982                 if(next){
93983                         next.previousSibling = previous;
93984                 }else{
93985                         parentNode.lastChild = previous;
93986                 }
93987                 _onUpdateChild(parentNode.ownerDocument,parentNode);
93988                 return child;
93989         }
93990         /**
93991          * preformance key(refChild == null)
93992          */
93993         function _insertBefore(parentNode,newChild,nextChild){
93994                 var cp = newChild.parentNode;
93995                 if(cp){
93996                         cp.removeChild(newChild);//remove and update
93997                 }
93998                 if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
93999                         var newFirst = newChild.firstChild;
94000                         if (newFirst == null) {
94001                                 return newChild;
94002                         }
94003                         var newLast = newChild.lastChild;
94004                 }else{
94005                         newFirst = newLast = newChild;
94006                 }
94007                 var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;
94008
94009                 newFirst.previousSibling = pre;
94010                 newLast.nextSibling = nextChild;
94011                 
94012                 
94013                 if(pre){
94014                         pre.nextSibling = newFirst;
94015                 }else{
94016                         parentNode.firstChild = newFirst;
94017                 }
94018                 if(nextChild == null){
94019                         parentNode.lastChild = newLast;
94020                 }else{
94021                         nextChild.previousSibling = newLast;
94022                 }
94023                 do{
94024                         newFirst.parentNode = parentNode;
94025                 }while(newFirst !== newLast && (newFirst= newFirst.nextSibling))
94026                 _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);
94027                 //console.log(parentNode.lastChild.nextSibling == null)
94028                 if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {
94029                         newChild.firstChild = newChild.lastChild = null;
94030                 }
94031                 return newChild;
94032         }
94033         function _appendSingleChild(parentNode,newChild){
94034                 var cp = newChild.parentNode;
94035                 if(cp){
94036                         var pre = parentNode.lastChild;
94037                         cp.removeChild(newChild);//remove and update
94038                         var pre = parentNode.lastChild;
94039                 }
94040                 var pre = parentNode.lastChild;
94041                 newChild.parentNode = parentNode;
94042                 newChild.previousSibling = pre;
94043                 newChild.nextSibling = null;
94044                 if(pre){
94045                         pre.nextSibling = newChild;
94046                 }else{
94047                         parentNode.firstChild = newChild;
94048                 }
94049                 parentNode.lastChild = newChild;
94050                 _onUpdateChild(parentNode.ownerDocument,parentNode,newChild);
94051                 return newChild;
94052                 //console.log("__aa",parentNode.lastChild.nextSibling == null)
94053         }
94054         Document.prototype = {
94055                 //implementation : null,
94056                 nodeName :  '#document',
94057                 nodeType :  DOCUMENT_NODE,
94058                 doctype :  null,
94059                 documentElement :  null,
94060                 _inc : 1,
94061                 
94062                 insertBefore :  function(newChild, refChild){//raises 
94063                         if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){
94064                                 var child = newChild.firstChild;
94065                                 while(child){
94066                                         var next = child.nextSibling;
94067                                         this.insertBefore(child,refChild);
94068                                         child = next;
94069                                 }
94070                                 return newChild;
94071                         }
94072                         if(this.documentElement == null && newChild.nodeType == ELEMENT_NODE){
94073                                 this.documentElement = newChild;
94074                         }
94075                         
94076                         return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;
94077                 },
94078                 removeChild :  function(oldChild){
94079                         if(this.documentElement == oldChild){
94080                                 this.documentElement = null;
94081                         }
94082                         return _removeChild(this,oldChild);
94083                 },
94084                 // Introduced in DOM Level 2:
94085                 importNode : function(importedNode,deep){
94086                         return importNode(this,importedNode,deep);
94087                 },
94088                 // Introduced in DOM Level 2:
94089                 getElementById :        function(id){
94090                         var rtv = null;
94091                         _visitNode(this.documentElement,function(node){
94092                                 if(node.nodeType == ELEMENT_NODE){
94093                                         if(node.getAttribute('id') == id){
94094                                                 rtv = node;
94095                                                 return true;
94096                                         }
94097                                 }
94098                         });
94099                         return rtv;
94100                 },
94101                 
94102                 //document factory method:
94103                 createElement : function(tagName){
94104                         var node = new Element();
94105                         node.ownerDocument = this;
94106                         node.nodeName = tagName;
94107                         node.tagName = tagName;
94108                         node.childNodes = new NodeList();
94109                         var attrs       = node.attributes = new NamedNodeMap();
94110                         attrs._ownerElement = node;
94111                         return node;
94112                 },
94113                 createDocumentFragment :        function(){
94114                         var node = new DocumentFragment();
94115                         node.ownerDocument = this;
94116                         node.childNodes = new NodeList();
94117                         return node;
94118                 },
94119                 createTextNode :        function(data){
94120                         var node = new Text();
94121                         node.ownerDocument = this;
94122                         node.appendData(data);
94123                         return node;
94124                 },
94125                 createComment : function(data){
94126                         var node = new Comment();
94127                         node.ownerDocument = this;
94128                         node.appendData(data);
94129                         return node;
94130                 },
94131                 createCDATASection :    function(data){
94132                         var node = new CDATASection();
94133                         node.ownerDocument = this;
94134                         node.appendData(data);
94135                         return node;
94136                 },
94137                 createProcessingInstruction :   function(target,data){
94138                         var node = new ProcessingInstruction();
94139                         node.ownerDocument = this;
94140                         node.tagName = node.target = target;
94141                         node.nodeValue= node.data = data;
94142                         return node;
94143                 },
94144                 createAttribute :       function(name){
94145                         var node = new Attr();
94146                         node.ownerDocument      = this;
94147                         node.name = name;
94148                         node.nodeName   = name;
94149                         node.localName = name;
94150                         node.specified = true;
94151                         return node;
94152                 },
94153                 createEntityReference : function(name){
94154                         var node = new EntityReference();
94155                         node.ownerDocument      = this;
94156                         node.nodeName   = name;
94157                         return node;
94158                 },
94159                 // Introduced in DOM Level 2:
94160                 createElementNS :       function(namespaceURI,qualifiedName){
94161                         var node = new Element();
94162                         var pl = qualifiedName.split(':');
94163                         var attrs       = node.attributes = new NamedNodeMap();
94164                         node.childNodes = new NodeList();
94165                         node.ownerDocument = this;
94166                         node.nodeName = qualifiedName;
94167                         node.tagName = qualifiedName;
94168                         node.namespaceURI = namespaceURI;
94169                         if(pl.length == 2){
94170                                 node.prefix = pl[0];
94171                                 node.localName = pl[1];
94172                         }else{
94173                                 //el.prefix = null;
94174                                 node.localName = qualifiedName;
94175                         }
94176                         attrs._ownerElement = node;
94177                         return node;
94178                 },
94179                 // Introduced in DOM Level 2:
94180                 createAttributeNS :     function(namespaceURI,qualifiedName){
94181                         var node = new Attr();
94182                         var pl = qualifiedName.split(':');
94183                         node.ownerDocument = this;
94184                         node.nodeName = qualifiedName;
94185                         node.name = qualifiedName;
94186                         node.namespaceURI = namespaceURI;
94187                         node.specified = true;
94188                         if(pl.length == 2){
94189                                 node.prefix = pl[0];
94190                                 node.localName = pl[1];
94191                         }else{
94192                                 //el.prefix = null;
94193                                 node.localName = qualifiedName;
94194                         }
94195                         return node;
94196                 }
94197         };
94198         _extends(Document,Node$3);
94199
94200
94201         function Element() {
94202                 this._nsMap = {};
94203         }Element.prototype = {
94204                 nodeType : ELEMENT_NODE,
94205                 hasAttribute : function(name){
94206                         return this.getAttributeNode(name)!=null;
94207                 },
94208                 getAttribute : function(name){
94209                         var attr = this.getAttributeNode(name);
94210                         return attr && attr.value || '';
94211                 },
94212                 getAttributeNode : function(name){
94213                         return this.attributes.getNamedItem(name);
94214                 },
94215                 setAttribute : function(name, value){
94216                         var attr = this.ownerDocument.createAttribute(name);
94217                         attr.value = attr.nodeValue = "" + value;
94218                         this.setAttributeNode(attr);
94219                 },
94220                 removeAttribute : function(name){
94221                         var attr = this.getAttributeNode(name);
94222                         attr && this.removeAttributeNode(attr);
94223                 },
94224                 
94225                 //four real opeartion method
94226                 appendChild:function(newChild){
94227                         if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
94228                                 return this.insertBefore(newChild,null);
94229                         }else{
94230                                 return _appendSingleChild(this,newChild);
94231                         }
94232                 },
94233                 setAttributeNode : function(newAttr){
94234                         return this.attributes.setNamedItem(newAttr);
94235                 },
94236                 setAttributeNodeNS : function(newAttr){
94237                         return this.attributes.setNamedItemNS(newAttr);
94238                 },
94239                 removeAttributeNode : function(oldAttr){
94240                         //console.log(this == oldAttr.ownerElement)
94241                         return this.attributes.removeNamedItem(oldAttr.nodeName);
94242                 },
94243                 //get real attribute name,and remove it by removeAttributeNode
94244                 removeAttributeNS : function(namespaceURI, localName){
94245                         var old = this.getAttributeNodeNS(namespaceURI, localName);
94246                         old && this.removeAttributeNode(old);
94247                 },
94248                 
94249                 hasAttributeNS : function(namespaceURI, localName){
94250                         return this.getAttributeNodeNS(namespaceURI, localName)!=null;
94251                 },
94252                 getAttributeNS : function(namespaceURI, localName){
94253                         var attr = this.getAttributeNodeNS(namespaceURI, localName);
94254                         return attr && attr.value || '';
94255                 },
94256                 setAttributeNS : function(namespaceURI, qualifiedName, value){
94257                         var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);
94258                         attr.value = attr.nodeValue = "" + value;
94259                         this.setAttributeNode(attr);
94260                 },
94261                 getAttributeNodeNS : function(namespaceURI, localName){
94262                         return this.attributes.getNamedItemNS(namespaceURI, localName);
94263                 },
94264                 
94265                 getElementsByTagName : function(tagName){
94266                         return new LiveNodeList(this,function(base){
94267                                 var ls = [];
94268                                 _visitNode(base,function(node){
94269                                         if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){
94270                                                 ls.push(node);
94271                                         }
94272                                 });
94273                                 return ls;
94274                         });
94275                 },
94276                 getElementsByTagNameNS : function(namespaceURI, localName){
94277                         return new LiveNodeList(this,function(base){
94278                                 var ls = [];
94279                                 _visitNode(base,function(node){
94280                                         if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){
94281                                                 ls.push(node);
94282                                         }
94283                                 });
94284                                 return ls;
94285                                 
94286                         });
94287                 }
94288         };
94289         Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;
94290         Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;
94291
94292
94293         _extends(Element,Node$3);
94294         function Attr() {
94295         }Attr.prototype.nodeType = ATTRIBUTE_NODE;
94296         _extends(Attr,Node$3);
94297
94298
94299         function CharacterData() {
94300         }CharacterData.prototype = {
94301                 data : '',
94302                 substringData : function(offset, count) {
94303                         return this.data.substring(offset, offset+count);
94304                 },
94305                 appendData: function(text) {
94306                         text = this.data+text;
94307                         this.nodeValue = this.data = text;
94308                         this.length = text.length;
94309                 },
94310                 insertData: function(offset,text) {
94311                         this.replaceData(offset,0,text);
94312                 
94313                 },
94314                 appendChild:function(newChild){
94315                         throw new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])
94316                 },
94317                 deleteData: function(offset, count) {
94318                         this.replaceData(offset,count,"");
94319                 },
94320                 replaceData: function(offset, count, text) {
94321                         var start = this.data.substring(0,offset);
94322                         var end = this.data.substring(offset+count);
94323                         text = start + text + end;
94324                         this.nodeValue = this.data = text;
94325                         this.length = text.length;
94326                 }
94327         };
94328         _extends(CharacterData,Node$3);
94329         function Text() {
94330         }Text.prototype = {
94331                 nodeName : "#text",
94332                 nodeType : TEXT_NODE,
94333                 splitText : function(offset) {
94334                         var text = this.data;
94335                         var newText = text.substring(offset);
94336                         text = text.substring(0, offset);
94337                         this.data = this.nodeValue = text;
94338                         this.length = text.length;
94339                         var newNode = this.ownerDocument.createTextNode(newText);
94340                         if(this.parentNode){
94341                                 this.parentNode.insertBefore(newNode, this.nextSibling);
94342                         }
94343                         return newNode;
94344                 }
94345         };
94346         _extends(Text,CharacterData);
94347         function Comment() {
94348         }Comment.prototype = {
94349                 nodeName : "#comment",
94350                 nodeType : COMMENT_NODE
94351         };
94352         _extends(Comment,CharacterData);
94353
94354         function CDATASection() {
94355         }CDATASection.prototype = {
94356                 nodeName : "#cdata-section",
94357                 nodeType : CDATA_SECTION_NODE
94358         };
94359         _extends(CDATASection,CharacterData);
94360
94361
94362         function DocumentType() {
94363         }DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;
94364         _extends(DocumentType,Node$3);
94365
94366         function Notation() {
94367         }Notation.prototype.nodeType = NOTATION_NODE;
94368         _extends(Notation,Node$3);
94369
94370         function Entity() {
94371         }Entity.prototype.nodeType = ENTITY_NODE;
94372         _extends(Entity,Node$3);
94373
94374         function EntityReference() {
94375         }EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;
94376         _extends(EntityReference,Node$3);
94377
94378         function DocumentFragment() {
94379         }DocumentFragment.prototype.nodeName =  "#document-fragment";
94380         DocumentFragment.prototype.nodeType =   DOCUMENT_FRAGMENT_NODE;
94381         _extends(DocumentFragment,Node$3);
94382
94383
94384         function ProcessingInstruction() {
94385         }
94386         ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;
94387         _extends(ProcessingInstruction,Node$3);
94388         function XMLSerializer$1(){}
94389         XMLSerializer$1.prototype.serializeToString = function(node,isHtml,nodeFilter){
94390                 return nodeSerializeToString.call(node,isHtml,nodeFilter);
94391         };
94392         Node$3.prototype.toString = nodeSerializeToString;
94393         function nodeSerializeToString(isHtml,nodeFilter){
94394                 var buf = [];
94395                 var refNode = this.nodeType == 9?this.documentElement:this;
94396                 var prefix = refNode.prefix;
94397                 var uri = refNode.namespaceURI;
94398                 
94399                 if(uri && prefix == null){
94400                         //console.log(prefix)
94401                         var prefix = refNode.lookupPrefix(uri);
94402                         if(prefix == null){
94403                                 //isHTML = true;
94404                                 var visibleNamespaces=[
94405                                 {namespace:uri,prefix:null} ];
94406                         }
94407                 }
94408                 serializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);
94409                 //console.log('###',this.nodeType,uri,prefix,buf.join(''))
94410                 return buf.join('');
94411         }
94412         function needNamespaceDefine(node,isHTML, visibleNamespaces) {
94413                 var prefix = node.prefix||'';
94414                 var uri = node.namespaceURI;
94415                 if (!prefix && !uri){
94416                         return false;
94417                 }
94418                 if (prefix === "xml" && uri === "http://www.w3.org/XML/1998/namespace" 
94419                         || uri == 'http://www.w3.org/2000/xmlns/'){
94420                         return false;
94421                 }
94422                 
94423                 var i = visibleNamespaces.length; 
94424                 //console.log('@@@@',node.tagName,prefix,uri,visibleNamespaces)
94425                 while (i--) {
94426                         var ns = visibleNamespaces[i];
94427                         // get namespace prefix
94428                         //console.log(node.nodeType,node.tagName,ns.prefix,prefix)
94429                         if (ns.prefix == prefix){
94430                                 return ns.namespace != uri;
94431                         }
94432                 }
94433                 //console.log(isHTML,uri,prefix=='')
94434                 //if(isHTML && prefix ==null && uri == 'http://www.w3.org/1999/xhtml'){
94435                 //      return false;
94436                 //}
94437                 //node.flag = '11111'
94438                 //console.error(3,true,node.flag,node.prefix,node.namespaceURI)
94439                 return true;
94440         }
94441         function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){
94442                 if(nodeFilter){
94443                         node = nodeFilter(node);
94444                         if(node){
94445                                 if(typeof node == 'string'){
94446                                         buf.push(node);
94447                                         return;
94448                                 }
94449                         }else{
94450                                 return;
94451                         }
94452                         //buf.sort.apply(attrs, attributeSorter);
94453                 }
94454                 switch(node.nodeType){
94455                 case ELEMENT_NODE:
94456                         if (!visibleNamespaces) { visibleNamespaces = []; }
94457                         var startVisibleNamespaces = visibleNamespaces.length;
94458                         var attrs = node.attributes;
94459                         var len = attrs.length;
94460                         var child = node.firstChild;
94461                         var nodeName = node.tagName;
94462                         
94463                         isHTML =  (htmlns === node.namespaceURI) ||isHTML; 
94464                         buf.push('<',nodeName);
94465                         
94466                         
94467                         
94468                         for(var i=0;i<len;i++){
94469                                 // add namespaces for attributes
94470                                 var attr = attrs.item(i);
94471                                 if (attr.prefix == 'xmlns') {
94472                                         visibleNamespaces.push({ prefix: attr.localName, namespace: attr.value });
94473                                 }else if(attr.nodeName == 'xmlns'){
94474                                         visibleNamespaces.push({ prefix: '', namespace: attr.value });
94475                                 }
94476                         }
94477                         for(var i=0;i<len;i++){
94478                                 var attr = attrs.item(i);
94479                                 if (needNamespaceDefine(attr,isHTML, visibleNamespaces)) {
94480                                         var prefix = attr.prefix||'';
94481                                         var uri = attr.namespaceURI;
94482                                         var ns = prefix ? ' xmlns:' + prefix : " xmlns";
94483                                         buf.push(ns, '="' , uri , '"');
94484                                         visibleNamespaces.push({ prefix: prefix, namespace:uri });
94485                                 }
94486                                 serializeToString(attr,buf,isHTML,nodeFilter,visibleNamespaces);
94487                         }
94488                         // add namespace for current node               
94489                         if (needNamespaceDefine(node,isHTML, visibleNamespaces)) {
94490                                 var prefix = node.prefix||'';
94491                                 var uri = node.namespaceURI;
94492                                 var ns = prefix ? ' xmlns:' + prefix : " xmlns";
94493                                 buf.push(ns, '="' , uri , '"');
94494                                 visibleNamespaces.push({ prefix: prefix, namespace:uri });
94495                         }
94496                         
94497                         if(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){
94498                                 buf.push('>');
94499                                 //if is cdata child node
94500                                 if(isHTML && /^script$/i.test(nodeName)){
94501                                         while(child){
94502                                                 if(child.data){
94503                                                         buf.push(child.data);
94504                                                 }else{
94505                                                         serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
94506                                                 }
94507                                                 child = child.nextSibling;
94508                                         }
94509                                 }else
94510                                 {
94511                                         while(child){
94512                                                 serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
94513                                                 child = child.nextSibling;
94514                                         }
94515                                 }
94516                                 buf.push('</',nodeName,'>');
94517                         }else{
94518                                 buf.push('/>');
94519                         }
94520                         // remove added visible namespaces
94521                         //visibleNamespaces.length = startVisibleNamespaces;
94522                         return;
94523                 case DOCUMENT_NODE:
94524                 case DOCUMENT_FRAGMENT_NODE:
94525                         var child = node.firstChild;
94526                         while(child){
94527                                 serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
94528                                 child = child.nextSibling;
94529                         }
94530                         return;
94531                 case ATTRIBUTE_NODE:
94532                         return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"');
94533                 case TEXT_NODE:
94534                         return buf.push(node.data.replace(/[<&]/g,_xmlEncoder));
94535                 case CDATA_SECTION_NODE:
94536                         return buf.push( '<![CDATA[',node.data,']]>');
94537                 case COMMENT_NODE:
94538                         return buf.push( "<!--",node.data,"-->");
94539                 case DOCUMENT_TYPE_NODE:
94540                         var pubid = node.publicId;
94541                         var sysid = node.systemId;
94542                         buf.push('<!DOCTYPE ',node.name);
94543                         if(pubid){
94544                                 buf.push(' PUBLIC "',pubid);
94545                                 if (sysid && sysid!='.') {
94546                                         buf.push( '" "',sysid);
94547                                 }
94548                                 buf.push('">');
94549                         }else if(sysid && sysid!='.'){
94550                                 buf.push(' SYSTEM "',sysid,'">');
94551                         }else{
94552                                 var sub = node.internalSubset;
94553                                 if(sub){
94554                                         buf.push(" [",sub,"]");
94555                                 }
94556                                 buf.push(">");
94557                         }
94558                         return;
94559                 case PROCESSING_INSTRUCTION_NODE:
94560                         return buf.push( "<?",node.target," ",node.data,"?>");
94561                 case ENTITY_REFERENCE_NODE:
94562                         return buf.push( '&',node.nodeName,';');
94563                 //case ENTITY_NODE:
94564                 //case NOTATION_NODE:
94565                 default:
94566                         buf.push('??',node.nodeName);
94567                 }
94568         }
94569         function importNode(doc,node,deep){
94570                 var node2;
94571                 switch (node.nodeType) {
94572                 case ELEMENT_NODE:
94573                         node2 = node.cloneNode(false);
94574                         node2.ownerDocument = doc;
94575                         //var attrs = node2.attributes;
94576                         //var len = attrs.length;
94577                         //for(var i=0;i<len;i++){
94578                                 //node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));
94579                         //}
94580                 case DOCUMENT_FRAGMENT_NODE:
94581                         break;
94582                 case ATTRIBUTE_NODE:
94583                         deep = true;
94584                         break;
94585                 //case ENTITY_REFERENCE_NODE:
94586                 //case PROCESSING_INSTRUCTION_NODE:
94587                 ////case TEXT_NODE:
94588                 //case CDATA_SECTION_NODE:
94589                 //case COMMENT_NODE:
94590                 //      deep = false;
94591                 //      break;
94592                 //case DOCUMENT_NODE:
94593                 //case DOCUMENT_TYPE_NODE:
94594                 //cannot be imported.
94595                 //case ENTITY_NODE:
94596                 //case NOTATION_NODE:
94597                 //can not hit in level3
94598                 //default:throw e;
94599                 }
94600                 if(!node2){
94601                         node2 = node.cloneNode(false);//false
94602                 }
94603                 node2.ownerDocument = doc;
94604                 node2.parentNode = null;
94605                 if(deep){
94606                         var child = node.firstChild;
94607                         while(child){
94608                                 node2.appendChild(importNode(doc,child,deep));
94609                                 child = child.nextSibling;
94610                         }
94611                 }
94612                 return node2;
94613         }
94614         //
94615         //var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,
94616         //                                      attributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};
94617         function cloneNode(doc,node,deep){
94618                 var node2 = new node.constructor();
94619                 for(var n in node){
94620                         var v = node[n];
94621                         if(typeof v != 'object' ){
94622                                 if(v != node2[n]){
94623                                         node2[n] = v;
94624                                 }
94625                         }
94626                 }
94627                 if(node.childNodes){
94628                         node2.childNodes = new NodeList();
94629                 }
94630                 node2.ownerDocument = doc;
94631                 switch (node2.nodeType) {
94632                 case ELEMENT_NODE:
94633                         var attrs       = node.attributes;
94634                         var attrs2      = node2.attributes = new NamedNodeMap();
94635                         var len = attrs.length;
94636                         attrs2._ownerElement = node2;
94637                         for(var i=0;i<len;i++){
94638                                 node2.setAttributeNode(cloneNode(doc,attrs.item(i),true));
94639                         }
94640                         break;  case ATTRIBUTE_NODE:
94641                         deep = true;
94642                 }
94643                 if(deep){
94644                         var child = node.firstChild;
94645                         while(child){
94646                                 node2.appendChild(cloneNode(doc,child,deep));
94647                                 child = child.nextSibling;
94648                         }
94649                 }
94650                 return node2;
94651         }
94652
94653         function __set__(object,key,value){
94654                 object[key] = value;
94655         }
94656         //do dynamic
94657         try{
94658                 if(Object.defineProperty){
94659                         Object.defineProperty(LiveNodeList.prototype,'length',{
94660                                 get:function(){
94661                                         _updateLiveList(this);
94662                                         return this.$$length;
94663                                 }
94664                         });
94665                         Object.defineProperty(Node$3.prototype,'textContent',{
94666                                 get:function(){
94667                                         return getTextContent(this);
94668                                 },
94669                                 set:function(data){
94670                                         switch(this.nodeType){
94671                                         case ELEMENT_NODE:
94672                                         case DOCUMENT_FRAGMENT_NODE:
94673                                                 while(this.firstChild){
94674                                                         this.removeChild(this.firstChild);
94675                                                 }
94676                                                 if(data || String(data)){
94677                                                         this.appendChild(this.ownerDocument.createTextNode(data));
94678                                                 }
94679                                                 break;
94680                                         default:
94681                                                 //TODO:
94682                                                 this.data = data;
94683                                                 this.value = data;
94684                                                 this.nodeValue = data;
94685                                         }
94686                                 }
94687                         });
94688                         
94689                         function getTextContent(node){
94690                                 switch(node.nodeType){
94691                                 case ELEMENT_NODE:
94692                                 case DOCUMENT_FRAGMENT_NODE:
94693                                         var buf = [];
94694                                         node = node.firstChild;
94695                                         while(node){
94696                                                 if(node.nodeType!==7 && node.nodeType !==8){
94697                                                         buf.push(getTextContent(node));
94698                                                 }
94699                                                 node = node.nextSibling;
94700                                         }
94701                                         return buf.join('');
94702                                 default:
94703                                         return node.nodeValue;
94704                                 }
94705                         }
94706                         __set__ = function(object,key,value){
94707                                 //console.log(value)
94708                                 object['$$'+key] = value;
94709                         };
94710                 }
94711         }catch(e){//ie8
94712         }
94713
94714         //if(typeof require == 'function'){
94715                 var DOMImplementation_1 = DOMImplementation;
94716                 var XMLSerializer_1 = XMLSerializer$1;
94717         //}
94718
94719         var dom = {
94720                 DOMImplementation: DOMImplementation_1,
94721                 XMLSerializer: XMLSerializer_1
94722         };
94723
94724         var domParser = createCommonjsModule(function (module, exports) {
94725         function DOMParser(options){
94726                 this.options = options ||{locator:{}};
94727                 
94728         }
94729         DOMParser.prototype.parseFromString = function(source,mimeType){
94730                 var options = this.options;
94731                 var sax =  new XMLReader();
94732                 var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler
94733                 var errorHandler = options.errorHandler;
94734                 var locator = options.locator;
94735                 var defaultNSMap = options.xmlns||{};
94736                 var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"};
94737                 if(locator){
94738                         domBuilder.setDocumentLocator(locator);
94739                 }
94740                 
94741                 sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);
94742                 sax.domBuilder = options.domBuilder || domBuilder;
94743                 if(/\/x?html?$/.test(mimeType)){
94744                         entityMap.nbsp = '\xa0';
94745                         entityMap.copy = '\xa9';
94746                         defaultNSMap['']= 'http://www.w3.org/1999/xhtml';
94747                 }
94748                 defaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace';
94749                 if(source){
94750                         sax.parse(source,defaultNSMap,entityMap);
94751                 }else{
94752                         sax.errorHandler.error("invalid doc source");
94753                 }
94754                 return domBuilder.doc;
94755         };
94756         function buildErrorHandler(errorImpl,domBuilder,locator){
94757                 if(!errorImpl){
94758                         if(domBuilder instanceof DOMHandler){
94759                                 return domBuilder;
94760                         }
94761                         errorImpl = domBuilder ;
94762                 }
94763                 var errorHandler = {};
94764                 var isCallback = errorImpl instanceof Function;
94765                 locator = locator||{};
94766                 function build(key){
94767                         var fn = errorImpl[key];
94768                         if(!fn && isCallback){
94769                                 fn = errorImpl.length == 2?function(msg){errorImpl(key,msg);}:errorImpl;
94770                         }
94771                         errorHandler[key] = fn && function(msg){
94772                                 fn('[xmldom '+key+']\t'+msg+_locator(locator));
94773                         }||function(){};
94774                 }
94775                 build('warning');
94776                 build('error');
94777                 build('fatalError');
94778                 return errorHandler;
94779         }
94780
94781         //console.log('#\n\n\n\n\n\n\n####')
94782         /**
94783          * +ContentHandler+ErrorHandler
94784          * +LexicalHandler+EntityResolver2
94785          * -DeclHandler-DTDHandler 
94786          * 
94787          * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler
94788          * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2
94789          * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html
94790          */
94791         function DOMHandler() {
94792             this.cdata = false;
94793         }
94794         function position(locator,node){
94795                 node.lineNumber = locator.lineNumber;
94796                 node.columnNumber = locator.columnNumber;
94797         }
94798         /**
94799          * @see org.xml.sax.ContentHandler#startDocument
94800          * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html
94801          */ 
94802         DOMHandler.prototype = {
94803                 startDocument : function() {
94804                 this.doc = new DOMImplementation().createDocument(null, null, null);
94805                 if (this.locator) {
94806                         this.doc.documentURI = this.locator.systemId;
94807                 }
94808                 },
94809                 startElement:function(namespaceURI, localName, qName, attrs) {
94810                         var doc = this.doc;
94811                     var el = doc.createElementNS(namespaceURI, qName||localName);
94812                     var len = attrs.length;
94813                     appendElement(this, el);
94814                     this.currentElement = el;
94815                     
94816                         this.locator && position(this.locator,el);
94817                     for (var i = 0 ; i < len; i++) {
94818                         var namespaceURI = attrs.getURI(i);
94819                         var value = attrs.getValue(i);
94820                         var qName = attrs.getQName(i);
94821                                 var attr = doc.createAttributeNS(namespaceURI, qName);
94822                                 this.locator &&position(attrs.getLocator(i),attr);
94823                                 attr.value = attr.nodeValue = value;
94824                                 el.setAttributeNode(attr);
94825                     }
94826                 },
94827                 endElement:function(namespaceURI, localName, qName) {
94828                         var current = this.currentElement;
94829                         var tagName = current.tagName;
94830                         this.currentElement = current.parentNode;
94831                 },
94832                 startPrefixMapping:function(prefix, uri) {
94833                 },
94834                 endPrefixMapping:function(prefix) {
94835                 },
94836                 processingInstruction:function(target, data) {
94837                     var ins = this.doc.createProcessingInstruction(target, data);
94838                     this.locator && position(this.locator,ins);
94839                     appendElement(this, ins);
94840                 },
94841                 ignorableWhitespace:function(ch, start, length) {
94842                 },
94843                 characters:function(chars, start, length) {
94844                         chars = _toString.apply(this,arguments);
94845                         //console.log(chars)
94846                         if(chars){
94847                                 if (this.cdata) {
94848                                         var charNode = this.doc.createCDATASection(chars);
94849                                 } else {
94850                                         var charNode = this.doc.createTextNode(chars);
94851                                 }
94852                                 if(this.currentElement){
94853                                         this.currentElement.appendChild(charNode);
94854                                 }else if(/^\s*$/.test(chars)){
94855                                         this.doc.appendChild(charNode);
94856                                         //process xml
94857                                 }
94858                                 this.locator && position(this.locator,charNode);
94859                         }
94860                 },
94861                 skippedEntity:function(name) {
94862                 },
94863                 endDocument:function() {
94864                         this.doc.normalize();
94865                 },
94866                 setDocumentLocator:function (locator) {
94867                     if(this.locator = locator){// && !('lineNumber' in locator)){
94868                         locator.lineNumber = 0;
94869                     }
94870                 },
94871                 //LexicalHandler
94872                 comment:function(chars, start, length) {
94873                         chars = _toString.apply(this,arguments);
94874                     var comm = this.doc.createComment(chars);
94875                     this.locator && position(this.locator,comm);
94876                     appendElement(this, comm);
94877                 },
94878                 
94879                 startCDATA:function() {
94880                     //used in characters() methods
94881                     this.cdata = true;
94882                 },
94883                 endCDATA:function() {
94884                     this.cdata = false;
94885                 },
94886                 
94887                 startDTD:function(name, publicId, systemId) {
94888                         var impl = this.doc.implementation;
94889                     if (impl && impl.createDocumentType) {
94890                         var dt = impl.createDocumentType(name, publicId, systemId);
94891                         this.locator && position(this.locator,dt);
94892                         appendElement(this, dt);
94893                     }
94894                 },
94895                 /**
94896                  * @see org.xml.sax.ErrorHandler
94897                  * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html
94898                  */
94899                 warning:function(error) {
94900                         console.warn('[xmldom warning]\t'+error,_locator(this.locator));
94901                 },
94902                 error:function(error) {
94903                         console.error('[xmldom error]\t'+error,_locator(this.locator));
94904                 },
94905                 fatalError:function(error) {
94906                         console.error('[xmldom fatalError]\t'+error,_locator(this.locator));
94907                     throw error;
94908                 }
94909         };
94910         function _locator(l){
94911                 if(l){
94912                         return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'
94913                 }
94914         }
94915         function _toString(chars,start,length){
94916                 if(typeof chars == 'string'){
94917                         return chars.substr(start,length)
94918                 }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)")
94919                         if(chars.length >= start+length || start){
94920                                 return new java.lang.String(chars,start,length)+'';
94921                         }
94922                         return chars;
94923                 }
94924         }
94925
94926         /*
94927          * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html
94928          * used method of org.xml.sax.ext.LexicalHandler:
94929          *  #comment(chars, start, length)
94930          *  #startCDATA()
94931          *  #endCDATA()
94932          *  #startDTD(name, publicId, systemId)
94933          *
94934          *
94935          * IGNORED method of org.xml.sax.ext.LexicalHandler:
94936          *  #endDTD()
94937          *  #startEntity(name)
94938          *  #endEntity(name)
94939          *
94940          *
94941          * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html
94942          * IGNORED method of org.xml.sax.ext.DeclHandler
94943          *      #attributeDecl(eName, aName, type, mode, value)
94944          *  #elementDecl(name, model)
94945          *  #externalEntityDecl(name, publicId, systemId)
94946          *  #internalEntityDecl(name, value)
94947          * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html
94948          * IGNORED method of org.xml.sax.EntityResolver2
94949          *  #resolveEntity(String name,String publicId,String baseURI,String systemId)
94950          *  #resolveEntity(publicId, systemId)
94951          *  #getExternalSubset(name, baseURI)
94952          * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html
94953          * IGNORED method of org.xml.sax.DTDHandler
94954          *  #notationDecl(name, publicId, systemId) {};
94955          *  #unparsedEntityDecl(name, publicId, systemId, notationName) {};
94956          */
94957         "endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){
94958                 DOMHandler.prototype[key] = function(){return null};
94959         });
94960
94961         /* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */
94962         function appendElement (hander,node) {
94963             if (!hander.currentElement) {
94964                 hander.doc.appendChild(node);
94965             } else {
94966                 hander.currentElement.appendChild(node);
94967             }
94968         }//appendChild and setAttributeNS are preformance key
94969
94970         //if(typeof require == 'function'){
94971                 var XMLReader = sax.XMLReader;
94972                 var DOMImplementation = exports.DOMImplementation = dom.DOMImplementation;
94973                 exports.XMLSerializer = dom.XMLSerializer ;
94974                 exports.DOMParser = DOMParser;
94975         //}
94976         });
94977         var domParser_1 = domParser.DOMImplementation;
94978         var domParser_2 = domParser.XMLSerializer;
94979         var domParser_3 = domParser.DOMParser;
94980
94981         var togeojson = createCommonjsModule(function (module, exports) {
94982         var toGeoJSON = (function() {
94983
94984             var removeSpace = /\s*/g,
94985                 trimSpace = /^\s*|\s*$/g,
94986                 splitSpace = /\s+/;
94987             // generate a short, numeric hash of a string
94988             function okhash(x) {
94989                 if (!x || !x.length) { return 0; }
94990                 for (var i = 0, h = 0; i < x.length; i++) {
94991                     h = ((h << 5) - h) + x.charCodeAt(i) | 0;
94992                 } return h;
94993             }
94994             // all Y children of X
94995             function get(x, y) { return x.getElementsByTagName(y); }
94996             function attr(x, y) { return x.getAttribute(y); }
94997             function attrf(x, y) { return parseFloat(attr(x, y)); }
94998             // one Y child of X, if any, otherwise null
94999             function get1(x, y) { var n = get(x, y); return n.length ? n[0] : null; }
95000             // https://developer.mozilla.org/en-US/docs/Web/API/Node.normalize
95001             function norm(el) { if (el.normalize) { el.normalize(); } return el; }
95002             // cast array x into numbers
95003             function numarray(x) {
95004                 for (var j = 0, o = []; j < x.length; j++) { o[j] = parseFloat(x[j]); }
95005                 return o;
95006             }
95007             // get the content of a text node, if any
95008             function nodeVal(x) {
95009                 if (x) { norm(x); }
95010                 return (x && x.textContent) || '';
95011             }
95012             // get the contents of multiple text nodes, if present
95013             function getMulti(x, ys) {
95014                 var o = {}, n, k;
95015                 for (k = 0; k < ys.length; k++) {
95016                     n = get1(x, ys[k]);
95017                     if (n) { o[ys[k]] = nodeVal(n); }
95018                 }
95019                 return o;
95020             }
95021             // add properties of Y to X, overwriting if present in both
95022             function extend(x, y) { for (var k in y) { x[k] = y[k]; } }
95023             // get one coordinate from a coordinate array, if any
95024             function coord1(v) { return numarray(v.replace(removeSpace, '').split(',')); }
95025             // get all coordinates from a coordinate array as [[],[]]
95026             function coord(v) {
95027                 var coords = v.replace(trimSpace, '').split(splitSpace),
95028                     o = [];
95029                 for (var i = 0; i < coords.length; i++) {
95030                     o.push(coord1(coords[i]));
95031                 }
95032                 return o;
95033             }
95034             function coordPair(x) {
95035                 var ll = [attrf(x, 'lon'), attrf(x, 'lat')],
95036                     ele = get1(x, 'ele'),
95037                     // handle namespaced attribute in browser
95038                     heartRate = get1(x, 'gpxtpx:hr') || get1(x, 'hr'),
95039                     time = get1(x, 'time'),
95040                     e;
95041                 if (ele) {
95042                     e = parseFloat(nodeVal(ele));
95043                     if (!isNaN(e)) {
95044                         ll.push(e);
95045                     }
95046                 }
95047                 return {
95048                     coordinates: ll,
95049                     time: time ? nodeVal(time) : null,
95050                     heartRate: heartRate ? parseFloat(nodeVal(heartRate)) : null
95051                 };
95052             }
95053
95054             // create a new feature collection parent object
95055             function fc() {
95056                 return {
95057                     type: 'FeatureCollection',
95058                     features: []
95059                 };
95060             }
95061
95062             var serializer;
95063             if (typeof XMLSerializer !== 'undefined') {
95064                 /* istanbul ignore next */
95065                 serializer = new XMLSerializer();
95066             // only require xmldom in a node environment
95067             } else if ( typeof process === 'object' && !process.browser) {
95068                 serializer = new (domParser.XMLSerializer)();
95069             }
95070             function xml2str(str) {
95071                 // IE9 will create a new XMLSerializer but it'll crash immediately.
95072                 // This line is ignored because we don't run coverage tests in IE9
95073                 /* istanbul ignore next */
95074                 if (str.xml !== undefined) { return str.xml; }
95075                 return serializer.serializeToString(str);
95076             }
95077
95078             var t = {
95079                 kml: function(doc) {
95080
95081                     var gj = fc(),
95082                         // styleindex keeps track of hashed styles in order to match features
95083                         styleIndex = {}, styleByHash = {},
95084                         // stylemapindex keeps track of style maps to expose in properties
95085                         styleMapIndex = {},
95086                         // atomic geospatial types supported by KML - MultiGeometry is
95087                         // handled separately
95088                         geotypes = ['Polygon', 'LineString', 'Point', 'Track', 'gx:Track'],
95089                         // all root placemarks in the file
95090                         placemarks = get(doc, 'Placemark'),
95091                         styles = get(doc, 'Style'),
95092                         styleMaps = get(doc, 'StyleMap');
95093
95094                     for (var k = 0; k < styles.length; k++) {
95095                         var hash = okhash(xml2str(styles[k])).toString(16);
95096                         styleIndex['#' + attr(styles[k], 'id')] = hash;
95097                         styleByHash[hash] = styles[k];
95098                     }
95099                     for (var l = 0; l < styleMaps.length; l++) {
95100                         styleIndex['#' + attr(styleMaps[l], 'id')] = okhash(xml2str(styleMaps[l])).toString(16);
95101                         var pairs = get(styleMaps[l], 'Pair');
95102                         var pairsMap = {};
95103                         for (var m = 0; m < pairs.length; m++) {
95104                             pairsMap[nodeVal(get1(pairs[m], 'key'))] = nodeVal(get1(pairs[m], 'styleUrl'));
95105                         }
95106                         styleMapIndex['#' + attr(styleMaps[l], 'id')] = pairsMap;
95107
95108                     }
95109                     for (var j = 0; j < placemarks.length; j++) {
95110                         gj.features = gj.features.concat(getPlacemark(placemarks[j]));
95111                     }
95112                     function kmlColor(v) {
95113                         var color, opacity;
95114                         v = v || '';
95115                         if (v.substr(0, 1) === '#') { v = v.substr(1); }
95116                         if (v.length === 6 || v.length === 3) { color = v; }
95117                         if (v.length === 8) {
95118                             opacity = parseInt(v.substr(0, 2), 16) / 255;
95119                             color = '#' + v.substr(6, 2) +
95120                                 v.substr(4, 2) +
95121                                 v.substr(2, 2);
95122                         }
95123                         return [color, isNaN(opacity) ? undefined : opacity];
95124                     }
95125                     function gxCoord(v) { return numarray(v.split(' ')); }
95126                     function gxCoords(root) {
95127                         var elems = get(root, 'coord'), coords = [], times = [];
95128                         if (elems.length === 0) { elems = get(root, 'gx:coord'); }
95129                         for (var i = 0; i < elems.length; i++) { coords.push(gxCoord(nodeVal(elems[i]))); }
95130                         var timeElems = get(root, 'when');
95131                         for (var j = 0; j < timeElems.length; j++) { times.push(nodeVal(timeElems[j])); }
95132                         return {
95133                             coords: coords,
95134                             times: times
95135                         };
95136                     }
95137                     function getGeometry(root) {
95138                         var geomNode, geomNodes, i, j, k, geoms = [], coordTimes = [];
95139                         if (get1(root, 'MultiGeometry')) { return getGeometry(get1(root, 'MultiGeometry')); }
95140                         if (get1(root, 'MultiTrack')) { return getGeometry(get1(root, 'MultiTrack')); }
95141                         if (get1(root, 'gx:MultiTrack')) { return getGeometry(get1(root, 'gx:MultiTrack')); }
95142                         for (i = 0; i < geotypes.length; i++) {
95143                             geomNodes = get(root, geotypes[i]);
95144                             if (geomNodes) {
95145                                 for (j = 0; j < geomNodes.length; j++) {
95146                                     geomNode = geomNodes[j];
95147                                     if (geotypes[i] === 'Point') {
95148                                         geoms.push({
95149                                             type: 'Point',
95150                                             coordinates: coord1(nodeVal(get1(geomNode, 'coordinates')))
95151                                         });
95152                                     } else if (geotypes[i] === 'LineString') {
95153                                         geoms.push({
95154                                             type: 'LineString',
95155                                             coordinates: coord(nodeVal(get1(geomNode, 'coordinates')))
95156                                         });
95157                                     } else if (geotypes[i] === 'Polygon') {
95158                                         var rings = get(geomNode, 'LinearRing'),
95159                                             coords = [];
95160                                         for (k = 0; k < rings.length; k++) {
95161                                             coords.push(coord(nodeVal(get1(rings[k], 'coordinates'))));
95162                                         }
95163                                         geoms.push({
95164                                             type: 'Polygon',
95165                                             coordinates: coords
95166                                         });
95167                                     } else if (geotypes[i] === 'Track' ||
95168                                         geotypes[i] === 'gx:Track') {
95169                                         var track = gxCoords(geomNode);
95170                                         geoms.push({
95171                                             type: 'LineString',
95172                                             coordinates: track.coords
95173                                         });
95174                                         if (track.times.length) { coordTimes.push(track.times); }
95175                                     }
95176                                 }
95177                             }
95178                         }
95179                         return {
95180                             geoms: geoms,
95181                             coordTimes: coordTimes
95182                         };
95183                     }
95184                     function getPlacemark(root) {
95185                         var geomsAndTimes = getGeometry(root), i, properties = {},
95186                             name = nodeVal(get1(root, 'name')),
95187                             address = nodeVal(get1(root, 'address')),
95188                             styleUrl = nodeVal(get1(root, 'styleUrl')),
95189                             description = nodeVal(get1(root, 'description')),
95190                             timeSpan = get1(root, 'TimeSpan'),
95191                             timeStamp = get1(root, 'TimeStamp'),
95192                             extendedData = get1(root, 'ExtendedData'),
95193                             lineStyle = get1(root, 'LineStyle'),
95194                             polyStyle = get1(root, 'PolyStyle'),
95195                             visibility = get1(root, 'visibility');
95196
95197                         if (!geomsAndTimes.geoms.length) { return []; }
95198                         if (name) { properties.name = name; }
95199                         if (address) { properties.address = address; }
95200                         if (styleUrl) {
95201                             if (styleUrl[0] !== '#') {
95202                                 styleUrl = '#' + styleUrl;
95203                             }
95204
95205                             properties.styleUrl = styleUrl;
95206                             if (styleIndex[styleUrl]) {
95207                                 properties.styleHash = styleIndex[styleUrl];
95208                             }
95209                             if (styleMapIndex[styleUrl]) {
95210                                 properties.styleMapHash = styleMapIndex[styleUrl];
95211                                 properties.styleHash = styleIndex[styleMapIndex[styleUrl].normal];
95212                             }
95213                             // Try to populate the lineStyle or polyStyle since we got the style hash
95214                             var style = styleByHash[properties.styleHash];
95215                             if (style) {
95216                                 if (!lineStyle) { lineStyle = get1(style, 'LineStyle'); }
95217                                 if (!polyStyle) { polyStyle = get1(style, 'PolyStyle'); }
95218                             }
95219                         }
95220                         if (description) { properties.description = description; }
95221                         if (timeSpan) {
95222                             var begin = nodeVal(get1(timeSpan, 'begin'));
95223                             var end = nodeVal(get1(timeSpan, 'end'));
95224                             properties.timespan = { begin: begin, end: end };
95225                         }
95226                         if (timeStamp) {
95227                             properties.timestamp = nodeVal(get1(timeStamp, 'when'));
95228                         }
95229                         if (lineStyle) {
95230                             var linestyles = kmlColor(nodeVal(get1(lineStyle, 'color'))),
95231                                 color = linestyles[0],
95232                                 opacity = linestyles[1],
95233                                 width = parseFloat(nodeVal(get1(lineStyle, 'width')));
95234                             if (color) { properties.stroke = color; }
95235                             if (!isNaN(opacity)) { properties['stroke-opacity'] = opacity; }
95236                             if (!isNaN(width)) { properties['stroke-width'] = width; }
95237                         }
95238                         if (polyStyle) {
95239                             var polystyles = kmlColor(nodeVal(get1(polyStyle, 'color'))),
95240                                 pcolor = polystyles[0],
95241                                 popacity = polystyles[1],
95242                                 fill = nodeVal(get1(polyStyle, 'fill')),
95243                                 outline = nodeVal(get1(polyStyle, 'outline'));
95244                             if (pcolor) { properties.fill = pcolor; }
95245                             if (!isNaN(popacity)) { properties['fill-opacity'] = popacity; }
95246                             if (fill) { properties['fill-opacity'] = fill === '1' ? properties['fill-opacity'] || 1 : 0; }
95247                             if (outline) { properties['stroke-opacity'] = outline === '1' ? properties['stroke-opacity'] || 1 : 0; }
95248                         }
95249                         if (extendedData) {
95250                             var datas = get(extendedData, 'Data'),
95251                                 simpleDatas = get(extendedData, 'SimpleData');
95252
95253                             for (i = 0; i < datas.length; i++) {
95254                                 properties[datas[i].getAttribute('name')] = nodeVal(get1(datas[i], 'value'));
95255                             }
95256                             for (i = 0; i < simpleDatas.length; i++) {
95257                                 properties[simpleDatas[i].getAttribute('name')] = nodeVal(simpleDatas[i]);
95258                             }
95259                         }
95260                         if (visibility) {
95261                             properties.visibility = nodeVal(visibility);
95262                         }
95263                         if (geomsAndTimes.coordTimes.length) {
95264                             properties.coordTimes = (geomsAndTimes.coordTimes.length === 1) ?
95265                                 geomsAndTimes.coordTimes[0] : geomsAndTimes.coordTimes;
95266                         }
95267                         var feature = {
95268                             type: 'Feature',
95269                             geometry: (geomsAndTimes.geoms.length === 1) ? geomsAndTimes.geoms[0] : {
95270                                 type: 'GeometryCollection',
95271                                 geometries: geomsAndTimes.geoms
95272                             },
95273                             properties: properties
95274                         };
95275                         if (attr(root, 'id')) { feature.id = attr(root, 'id'); }
95276                         return [feature];
95277                     }
95278                     return gj;
95279                 },
95280                 gpx: function(doc) {
95281                     var i,
95282                         tracks = get(doc, 'trk'),
95283                         routes = get(doc, 'rte'),
95284                         waypoints = get(doc, 'wpt'),
95285                         // a feature collection
95286                         gj = fc(),
95287                         feature;
95288                     for (i = 0; i < tracks.length; i++) {
95289                         feature = getTrack(tracks[i]);
95290                         if (feature) { gj.features.push(feature); }
95291                     }
95292                     for (i = 0; i < routes.length; i++) {
95293                         feature = getRoute(routes[i]);
95294                         if (feature) { gj.features.push(feature); }
95295                     }
95296                     for (i = 0; i < waypoints.length; i++) {
95297                         gj.features.push(getPoint(waypoints[i]));
95298                     }
95299                     function getPoints(node, pointname) {
95300                         var pts = get(node, pointname),
95301                             line = [],
95302                             times = [],
95303                             heartRates = [],
95304                             l = pts.length;
95305                         if (l < 2) { return {}; }  // Invalid line in GeoJSON
95306                         for (var i = 0; i < l; i++) {
95307                             var c = coordPair(pts[i]);
95308                             line.push(c.coordinates);
95309                             if (c.time) { times.push(c.time); }
95310                             if (c.heartRate) { heartRates.push(c.heartRate); }
95311                         }
95312                         return {
95313                             line: line,
95314                             times: times,
95315                             heartRates: heartRates
95316                         };
95317                     }
95318                     function getTrack(node) {
95319                         var segments = get(node, 'trkseg'),
95320                             track = [],
95321                             times = [],
95322                             heartRates = [],
95323                             line;
95324                         for (var i = 0; i < segments.length; i++) {
95325                             line = getPoints(segments[i], 'trkpt');
95326                             if (line) {
95327                                 if (line.line) { track.push(line.line); }
95328                                 if (line.times && line.times.length) { times.push(line.times); }
95329                                 if (line.heartRates && line.heartRates.length) { heartRates.push(line.heartRates); }
95330                             }
95331                         }
95332                         if (track.length === 0) { return; }
95333                         var properties = getProperties(node);
95334                         extend(properties, getLineStyle(get1(node, 'extensions')));
95335                         if (times.length) { properties.coordTimes = track.length === 1 ? times[0] : times; }
95336                         if (heartRates.length) { properties.heartRates = track.length === 1 ? heartRates[0] : heartRates; }
95337                         return {
95338                             type: 'Feature',
95339                             properties: properties,
95340                             geometry: {
95341                                 type: track.length === 1 ? 'LineString' : 'MultiLineString',
95342                                 coordinates: track.length === 1 ? track[0] : track
95343                             }
95344                         };
95345                     }
95346                     function getRoute(node) {
95347                         var line = getPoints(node, 'rtept');
95348                         if (!line.line) { return; }
95349                         var prop = getProperties(node);
95350                         extend(prop, getLineStyle(get1(node, 'extensions')));
95351                         var routeObj = {
95352                             type: 'Feature',
95353                             properties: prop,
95354                             geometry: {
95355                                 type: 'LineString',
95356                                 coordinates: line.line
95357                             }
95358                         };
95359                         return routeObj;
95360                     }
95361                     function getPoint(node) {
95362                         var prop = getProperties(node);
95363                         extend(prop, getMulti(node, ['sym']));
95364                         return {
95365                             type: 'Feature',
95366                             properties: prop,
95367                             geometry: {
95368                                 type: 'Point',
95369                                 coordinates: coordPair(node).coordinates
95370                             }
95371                         };
95372                     }
95373                     function getLineStyle(extensions) {
95374                         var style = {};
95375                         if (extensions) {
95376                             var lineStyle = get1(extensions, 'line');
95377                             if (lineStyle) {
95378                                 var color = nodeVal(get1(lineStyle, 'color')),
95379                                     opacity = parseFloat(nodeVal(get1(lineStyle, 'opacity'))),
95380                                     width = parseFloat(nodeVal(get1(lineStyle, 'width')));
95381                                 if (color) { style.stroke = color; }
95382                                 if (!isNaN(opacity)) { style['stroke-opacity'] = opacity; }
95383                                 // GPX width is in mm, convert to px with 96 px per inch
95384                                 if (!isNaN(width)) { style['stroke-width'] = width * 96 / 25.4; }
95385                             }
95386                         }
95387                         return style;
95388                     }
95389                     function getProperties(node) {
95390                         var prop = getMulti(node, ['name', 'cmt', 'desc', 'type', 'time', 'keywords']),
95391                             links = get(node, 'link');
95392                         if (links.length) { prop.links = []; }
95393                         for (var i = 0, link; i < links.length; i++) {
95394                             link = { href: attr(links[i], 'href') };
95395                             extend(link, getMulti(links[i], ['text', 'type']));
95396                             prop.links.push(link);
95397                         }
95398                         return prop;
95399                     }
95400                     return gj;
95401                 }
95402             };
95403             return t;
95404         })();
95405
95406         { module.exports = toGeoJSON; }
95407         });
95408
95409         var _initialized = false;
95410         var _enabled = false;
95411         var _geojson;
95412
95413
95414         function svgData(projection, context, dispatch) {
95415             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
95416             var _showLabels = true;
95417             var detected = utilDetect();
95418             var layer = d3_select(null);
95419             var _vtService;
95420             var _fileList;
95421             var _template;
95422             var _src;
95423
95424
95425             function init() {
95426                 if (_initialized) { return; }  // run once
95427
95428                 _geojson = {};
95429                 _enabled = true;
95430
95431                 function over() {
95432                     event.stopPropagation();
95433                     event.preventDefault();
95434                     event.dataTransfer.dropEffect = 'copy';
95435                 }
95436
95437                 d3_select('body')
95438                     .attr('dropzone', 'copy')
95439                     .on('drop.svgData', function() {
95440                         event.stopPropagation();
95441                         event.preventDefault();
95442                         if (!detected.filedrop) { return; }
95443                         drawData.fileList(event.dataTransfer.files);
95444                     })
95445                     .on('dragenter.svgData', over)
95446                     .on('dragexit.svgData', over)
95447                     .on('dragover.svgData', over);
95448
95449                 _initialized = true;
95450             }
95451
95452
95453             function getService() {
95454                 if (services$1.vectorTile && !_vtService) {
95455                     _vtService = services$1.vectorTile;
95456                     _vtService.event.on('loadedData', throttledRedraw);
95457                 } else if (!services$1.vectorTile && _vtService) {
95458                     _vtService = null;
95459                 }
95460
95461                 return _vtService;
95462             }
95463
95464
95465             function showLayer() {
95466                 layerOn();
95467
95468                 layer
95469                     .style('opacity', 0)
95470                     .transition()
95471                     .duration(250)
95472                     .style('opacity', 1)
95473                     .on('end', function () { dispatch.call('change'); });
95474             }
95475
95476
95477             function hideLayer() {
95478                 throttledRedraw.cancel();
95479
95480                 layer
95481                     .transition()
95482                     .duration(250)
95483                     .style('opacity', 0)
95484                     .on('end', layerOff);
95485             }
95486
95487
95488             function layerOn() {
95489                 layer.style('display', 'block');
95490             }
95491
95492
95493             function layerOff() {
95494                 layer.selectAll('.viewfield-group').remove();
95495                 layer.style('display', 'none');
95496             }
95497
95498
95499             // ensure that all geojson features in a collection have IDs
95500             function ensureIDs(gj) {
95501                 if (!gj) { return null; }
95502
95503                 if (gj.type === 'FeatureCollection') {
95504                     for (var i = 0; i < gj.features.length; i++) {
95505                         ensureFeatureID(gj.features[i]);
95506                     }
95507                 } else {
95508                     ensureFeatureID(gj);
95509                 }
95510                 return gj;
95511             }
95512
95513
95514             // ensure that each single Feature object has a unique ID
95515             function ensureFeatureID(feature) {
95516                 if (!feature) { return; }
95517                 feature.__featurehash__ = utilHashcode(fastJsonStableStringify(feature));
95518                 return feature;
95519             }
95520
95521
95522             // Prefer an array of Features instead of a FeatureCollection
95523             function getFeatures(gj) {
95524                 if (!gj) { return []; }
95525
95526                 if (gj.type === 'FeatureCollection') {
95527                     return gj.features;
95528                 } else {
95529                     return [gj];
95530                 }
95531             }
95532
95533
95534             function featureKey(d) {
95535                 return d.__featurehash__;
95536             }
95537
95538
95539             function isPolygon(d) {
95540                 return d.geometry.type === 'Polygon' || d.geometry.type === 'MultiPolygon';
95541             }
95542
95543
95544             function clipPathID(d) {
95545                 return 'data-' + d.__featurehash__ + '-clippath';
95546             }
95547
95548
95549             function featureClasses(d) {
95550                 return [
95551                     'data' + d.__featurehash__,
95552                     d.geometry.type,
95553                     isPolygon(d) ? 'area' : '',
95554                     d.__layerID__ || ''
95555                 ].filter(Boolean).join(' ');
95556             }
95557
95558
95559             function drawData(selection) {
95560                 var vtService = getService();
95561                 var getPath = svgPath(projection).geojson;
95562                 var getAreaPath = svgPath(projection, null, true).geojson;
95563                 var hasData = drawData.hasData();
95564
95565                 layer = selection.selectAll('.layer-mapdata')
95566                     .data(_enabled && hasData ? [0] : []);
95567
95568                 layer.exit()
95569                     .remove();
95570
95571                 layer = layer.enter()
95572                     .append('g')
95573                     .attr('class', 'layer-mapdata')
95574                     .merge(layer);
95575
95576                 var surface = context.surface();
95577                 if (!surface || surface.empty()) { return; }  // not ready to draw yet, starting up
95578
95579
95580                 // Gather data
95581                 var geoData, polygonData;
95582                 if (_template && vtService) {   // fetch data from vector tile service
95583                     var sourceID = _template;
95584                     vtService.loadTiles(sourceID, _template, projection);
95585                     geoData = vtService.data(sourceID, projection);
95586                 } else {
95587                     geoData = getFeatures(_geojson);
95588                 }
95589                 geoData = geoData.filter(getPath);
95590                 polygonData = geoData.filter(isPolygon);
95591
95592
95593                 // Draw clip paths for polygons
95594                 var clipPaths = surface.selectAll('defs').selectAll('.clipPath-data')
95595                    .data(polygonData, featureKey);
95596
95597                 clipPaths.exit()
95598                    .remove();
95599
95600                 var clipPathsEnter = clipPaths.enter()
95601                    .append('clipPath')
95602                    .attr('class', 'clipPath-data')
95603                    .attr('id', clipPathID);
95604
95605                 clipPathsEnter
95606                    .append('path');
95607
95608                 clipPaths.merge(clipPathsEnter)
95609                    .selectAll('path')
95610                    .attr('d', getAreaPath);
95611
95612
95613                 // Draw fill, shadow, stroke layers
95614                 var datagroups = layer
95615                     .selectAll('g.datagroup')
95616                     .data(['fill', 'shadow', 'stroke']);
95617
95618                 datagroups = datagroups.enter()
95619                     .append('g')
95620                     .attr('class', function(d) { return 'datagroup datagroup-' + d; })
95621                     .merge(datagroups);
95622
95623
95624                 // Draw paths
95625                 var pathData = {
95626                     fill: polygonData,
95627                     shadow: geoData,
95628                     stroke: geoData
95629                 };
95630
95631                 var paths = datagroups
95632                     .selectAll('path')
95633                     .data(function(layer) { return pathData[layer]; }, featureKey);
95634
95635                 // exit
95636                 paths.exit()
95637                     .remove();
95638
95639                 // enter/update
95640                 paths = paths.enter()
95641                     .append('path')
95642                     .attr('class', function(d) {
95643                         var datagroup = this.parentNode.__data__;
95644                         return 'pathdata ' + datagroup + ' ' + featureClasses(d);
95645                     })
95646                     .attr('clip-path', function(d) {
95647                         var datagroup = this.parentNode.__data__;
95648                         return datagroup === 'fill' ? ('url(#' + clipPathID(d) + ')') : null;
95649                     })
95650                     .merge(paths)
95651                     .attr('d', function(d) {
95652                         var datagroup = this.parentNode.__data__;
95653                         return datagroup === 'fill' ? getAreaPath(d) : getPath(d);
95654                     });
95655
95656
95657                 // Draw labels
95658                 layer
95659                     .call(drawLabels, 'label-halo', geoData)
95660                     .call(drawLabels, 'label', geoData);
95661
95662
95663                 function drawLabels(selection, textClass, data) {
95664                     var labelPath = d3_geoPath(projection);
95665                     var labelData = data.filter(function(d) {
95666                         return _showLabels && d.properties && (d.properties.desc || d.properties.name);
95667                     });
95668
95669                     var labels = selection.selectAll('text.' + textClass)
95670                         .data(labelData, featureKey);
95671
95672                     // exit
95673                     labels.exit()
95674                         .remove();
95675
95676                     // enter/update
95677                     labels = labels.enter()
95678                         .append('text')
95679                         .attr('class', function(d) { return textClass + ' ' + featureClasses(d); })
95680                         .merge(labels)
95681                         .text(function(d) {
95682                             return d.properties.desc || d.properties.name;
95683                         })
95684                         .attr('x', function(d) {
95685                             var centroid = labelPath.centroid(d);
95686                             return centroid[0] + 11;
95687                         })
95688                         .attr('y', function(d) {
95689                             var centroid = labelPath.centroid(d);
95690                             return centroid[1];
95691                         });
95692                 }
95693             }
95694
95695
95696             function getExtension(fileName) {
95697                 if (!fileName) { return; }
95698
95699                 var re = /\.(gpx|kml|(geo)?json)$/i;
95700                 var match = fileName.toLowerCase().match(re);
95701                 return match && match.length && match[0];
95702             }
95703
95704
95705             function xmlToDom(textdata) {
95706                 return (new DOMParser()).parseFromString(textdata, 'text/xml');
95707             }
95708
95709
95710             drawData.setFile = function(extension, data) {
95711                 _template = null;
95712                 _fileList = null;
95713                 _geojson = null;
95714                 _src = null;
95715
95716                 var gj;
95717                 switch (extension) {
95718                     case '.gpx':
95719                         gj = togeojson.gpx(xmlToDom(data));
95720                         break;
95721                     case '.kml':
95722                         gj = togeojson.kml(xmlToDom(data));
95723                         break;
95724                     case '.geojson':
95725                     case '.json':
95726                         gj = JSON.parse(data);
95727                         break;
95728                 }
95729
95730                 gj = gj || {};
95731                 if (Object.keys(gj).length) {
95732                     _geojson = ensureIDs(gj);
95733                     _src = extension + ' data file';
95734                     this.fitZoom();
95735                 }
95736
95737                 dispatch.call('change');
95738                 return this;
95739             };
95740
95741
95742             drawData.showLabels = function(val) {
95743                 if (!arguments.length) { return _showLabels; }
95744
95745                 _showLabels = val;
95746                 return this;
95747             };
95748
95749
95750             drawData.enabled = function(val) {
95751                 if (!arguments.length) { return _enabled; }
95752
95753                 _enabled = val;
95754                 if (_enabled) {
95755                     showLayer();
95756                 } else {
95757                     hideLayer();
95758                 }
95759
95760                 dispatch.call('change');
95761                 return this;
95762             };
95763
95764
95765             drawData.hasData = function() {
95766                 var gj = _geojson || {};
95767                 return !!(_template || Object.keys(gj).length);
95768             };
95769
95770
95771             drawData.template = function(val, src) {
95772                 if (!arguments.length) { return _template; }
95773
95774                 // test source against OSM imagery blacklists..
95775                 var osm = context.connection();
95776                 if (osm) {
95777                     var blacklists = osm.imageryBlacklists();
95778                     var fail = false;
95779                     var tested = 0;
95780                     var regex;
95781
95782                     for (var i = 0; i < blacklists.length; i++) {
95783                         try {
95784                             regex = new RegExp(blacklists[i]);
95785                             fail = regex.test(val);
95786                             tested++;
95787                             if (fail) { break; }
95788                         } catch (e) {
95789                             /* noop */
95790                         }
95791                     }
95792
95793                     // ensure at least one test was run.
95794                     if (!tested) {
95795                         regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*');
95796                         fail = regex.test(val);
95797                     }
95798                 }
95799
95800                 _template = val;
95801                 _fileList = null;
95802                 _geojson = null;
95803
95804                 // strip off the querystring/hash from the template,
95805                 // it often includes the access token
95806                 _src = src || ('vectortile:' + val.split(/[?#]/)[0]);
95807
95808                 dispatch.call('change');
95809                 return this;
95810             };
95811
95812
95813             drawData.geojson = function(gj, src) {
95814                 if (!arguments.length) { return _geojson; }
95815
95816                 _template = null;
95817                 _fileList = null;
95818                 _geojson = null;
95819                 _src = null;
95820
95821                 gj = gj || {};
95822                 if (Object.keys(gj).length) {
95823                     _geojson = ensureIDs(gj);
95824                     _src = src || 'unknown.geojson';
95825                 }
95826
95827                 dispatch.call('change');
95828                 return this;
95829             };
95830
95831
95832             drawData.fileList = function(fileList) {
95833                 if (!arguments.length) { return _fileList; }
95834
95835                 _template = null;
95836                 _fileList = fileList;
95837                 _geojson = null;
95838                 _src = null;
95839
95840                 if (!fileList || !fileList.length) { return this; }
95841                 var f = fileList[0];
95842                 var extension = getExtension(f.name);
95843                 var reader = new FileReader();
95844                 reader.onload = (function() {
95845                     return function(e) {
95846                         drawData.setFile(extension, e.target.result);
95847                     };
95848                 })();
95849
95850                 reader.readAsText(f);
95851
95852                 return this;
95853             };
95854
95855
95856             drawData.url = function(url, defaultExtension) {
95857                 _template = null;
95858                 _fileList = null;
95859                 _geojson = null;
95860                 _src = null;
95861
95862                 // strip off any querystring/hash from the url before checking extension
95863                 var testUrl = url.split(/[?#]/)[0];
95864                 var extension = getExtension(testUrl) || defaultExtension;
95865                 if (extension) {
95866                     _template = null;
95867                     d3_text(url)
95868                         .then(function(data) {
95869                             drawData.setFile(extension, data);
95870                         })
95871                         .catch(function() {
95872                             /* ignore */
95873                         });
95874
95875                 } else {
95876                     drawData.template(url);
95877                 }
95878
95879                 return this;
95880             };
95881
95882
95883             drawData.getSrc = function() {
95884                 return _src || '';
95885             };
95886
95887
95888             drawData.fitZoom = function() {
95889                 var features = getFeatures(_geojson);
95890                 if (!features.length) { return; }
95891
95892                 var map = context.map();
95893                 var viewport = map.trimmedExtent().polygon();
95894                 var coords = features.reduce(function(coords, feature) {
95895                     var c = feature.geometry.coordinates;
95896
95897                     /* eslint-disable no-fallthrough */
95898                     switch (feature.geometry.type) {
95899                         case 'Point':
95900                             c = [c];
95901                         case 'MultiPoint':
95902                         case 'LineString':
95903                             break;
95904
95905                         case 'MultiPolygon':
95906                             c = utilArrayFlatten(c);
95907                         case 'Polygon':
95908                         case 'MultiLineString':
95909                             c = utilArrayFlatten(c);
95910                             break;
95911                     }
95912                     /* eslint-enable no-fallthrough */
95913
95914                     return utilArrayUnion(coords, c);
95915                 }, []);
95916
95917                 if (!geoPolygonIntersectsPolygon(viewport, coords, true)) {
95918                     var extent = geoExtent(d3_geoBounds({ type: 'LineString', coordinates: coords }));
95919                     map.centerZoom(extent.center(), map.trimmedExtentZoom(extent));
95920                 }
95921
95922                 return this;
95923             };
95924
95925
95926             init();
95927             return drawData;
95928         }
95929
95930         function svgDebug(projection, context) {
95931
95932             function drawDebug(selection) {
95933                 var showsTile = context.getDebug('tile');
95934                 var showsCollision = context.getDebug('collision');
95935                 var showsImagery = context.getDebug('imagery');
95936                 var showsCommunity = context.getDebug('community');
95937                 var showsTouchTargets = context.getDebug('target');
95938                 var showsDownloaded = context.getDebug('downloaded');
95939
95940                 var debugData = [];
95941                 if (showsTile) {
95942                     debugData.push({ class: 'red', label: 'tile' });
95943                 }
95944                 if (showsCollision) {
95945                     debugData.push({ class: 'yellow', label: 'collision' });
95946                 }
95947                 if (showsImagery) {
95948                     debugData.push({ class: 'orange', label: 'imagery' });
95949                 }
95950                 if (showsCommunity) {
95951                     debugData.push({ class: 'blue', label: 'community' });
95952                 }
95953                 if (showsTouchTargets) {
95954                     debugData.push({ class: 'pink', label: 'touchTargets' });
95955                 }
95956                 if (showsDownloaded) {
95957                     debugData.push({ class: 'purple', label: 'downloaded' });
95958                 }
95959
95960
95961                 var legend = d3_select('#content')
95962                     .selectAll('.debug-legend')
95963                     .data(debugData.length ? [0] : []);
95964
95965                 legend.exit()
95966                     .remove();
95967
95968                 legend = legend.enter()
95969                     .append('div')
95970                     .attr('class', 'fillD debug-legend')
95971                     .merge(legend);
95972
95973
95974                 var legendItems = legend.selectAll('.debug-legend-item')
95975                     .data(debugData, function(d) { return d.label; });
95976
95977                 legendItems.exit()
95978                     .remove();
95979
95980                 legendItems.enter()
95981                     .append('span')
95982                     .attr('class', function(d) { return 'debug-legend-item ' + d.class; })
95983                     .text(function(d) { return d.label; });
95984
95985
95986                 var layer = selection.selectAll('.layer-debug')
95987                     .data(showsImagery || showsCommunity || showsDownloaded ? [0] : []);
95988
95989                 layer.exit()
95990                     .remove();
95991
95992                 layer = layer.enter()
95993                     .append('g')
95994                     .attr('class', 'layer-debug')
95995                     .merge(layer);
95996
95997
95998                 // imagery
95999                 var extent = context.map().extent();
96000                 var matchImagery = (showsImagery && data.imagery.query.bbox(extent.rectangle(), true)) || [];
96001                 var features = matchImagery.map(function(d) { return data.imagery.features[d.id]; });
96002
96003                 var imagery = layer.selectAll('path.debug-imagery')
96004                     .data(features);
96005
96006                 imagery.exit()
96007                     .remove();
96008
96009                 imagery.enter()
96010                     .append('path')
96011                     .attr('class', 'debug-imagery debug orange');
96012
96013
96014                 // community index
96015                 var community = layer.selectAll('path.debug-community')
96016                     .data(showsCommunity ? Object.values(data.community.features) : []);
96017
96018                 community.exit()
96019                     .remove();
96020
96021                 community.enter()
96022                     .append('path')
96023                     .attr('class', 'debug-community debug blue');
96024
96025
96026                 // downloaded
96027                 var osm = context.connection();
96028                 var dataDownloaded = [];
96029
96030                 if (osm) {
96031                     var rtree = osm.caches('get').tile.rtree;
96032                     dataDownloaded = rtree.all().map(function(bbox) {
96033                         return {
96034                             type: 'Feature',
96035                             properties: { id: bbox.id },
96036                             geometry: {
96037                                 type: 'Polygon',
96038                                 coordinates: [[
96039                                     [ bbox.minX, bbox.minY ],
96040                                     [ bbox.minX, bbox.maxY ],
96041                                     [ bbox.maxX, bbox.maxY ],
96042                                     [ bbox.maxX, bbox.minY ],
96043                                     [ bbox.minX, bbox.minY ]
96044                                 ]]
96045                             }
96046                         };
96047                     });
96048                 }
96049
96050
96051                 var downloaded = layer
96052                     .selectAll('path.debug-downloaded')
96053                     .data(showsDownloaded ? dataDownloaded : []);
96054
96055                 downloaded.exit()
96056                     .remove();
96057
96058                 downloaded.enter()
96059                     .append('path')
96060                     .attr('class', 'debug-downloaded debug purple');
96061
96062
96063                 // update
96064                 layer.selectAll('path')
96065                     .attr('d', svgPath(projection).geojson);
96066             }
96067
96068
96069             // This looks strange because `enabled` methods on other layers are
96070             // chainable getter/setters, and this one is just a getter.
96071             drawDebug.enabled = function() {
96072                 if (!arguments.length) {
96073                     return context.getDebug('tile') ||
96074                         context.getDebug('collision') ||
96075                         context.getDebug('imagery') ||
96076                         context.getDebug('target') ||
96077                         context.getDebug('downloaded');
96078                 } else {
96079                     return this;
96080                 }
96081             };
96082
96083
96084             return drawDebug;
96085         }
96086
96087         var _keepRightEnabled = false;
96088         var _keepRightService;
96089
96090
96091         function svgKeepRight(projection, context, dispatch) {
96092             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
96093             var minZoom = 12;
96094             var touchLayer = d3_select(null);
96095             var drawLayer = d3_select(null);
96096             var _keepRightVisible = false;
96097
96098
96099             function markerPath(selection, klass) {
96100                 selection
96101                     .attr('class', klass)
96102                     .attr('transform', 'translate(-4, -24)')
96103                     .attr('d', 'M11.6,6.2H7.1l1.4-5.1C8.6,0.6,8.1,0,7.5,0H2.2C1.7,0,1.3,0.3,1.3,0.8L0,10.2c-0.1,0.6,0.4,1.1,0.9,1.1h4.6l-1.8,7.6C3.6,19.4,4.1,20,4.7,20c0.3,0,0.6-0.2,0.8-0.5l6.9-11.9C12.7,7,12.3,6.2,11.6,6.2z');
96104             }
96105
96106
96107             // Loosely-coupled keepRight service for fetching errors.
96108             function getService() {
96109                 if (services$1.keepRight && !_keepRightService) {
96110                     _keepRightService = services$1.keepRight;
96111                     _keepRightService.on('loaded', throttledRedraw);
96112                 } else if (!services$1.keepRight && _keepRightService) {
96113                     _keepRightService = null;
96114                 }
96115
96116                 return _keepRightService;
96117             }
96118
96119
96120             // Show the errors
96121             function editOn() {
96122                 if (!_keepRightVisible) {
96123                     _keepRightVisible = true;
96124                     drawLayer
96125                         .style('display', 'block');
96126                 }
96127             }
96128
96129
96130             // Immediately remove the errors and their touch targets
96131             function editOff() {
96132                 if (_keepRightVisible) {
96133                     _keepRightVisible = false;
96134                     drawLayer
96135                         .style('display', 'none');
96136                     drawLayer.selectAll('.qa_error.keepRight')
96137                         .remove();
96138                     touchLayer.selectAll('.qa_error.keepRight')
96139                         .remove();
96140                 }
96141             }
96142
96143
96144             // Enable the layer.  This shows the errors and transitions them to visible.
96145             function layerOn() {
96146                 editOn();
96147
96148                 drawLayer
96149                     .style('opacity', 0)
96150                     .transition()
96151                     .duration(250)
96152                     .style('opacity', 1)
96153                     .on('end interrupt', function () {
96154                         dispatch.call('change');
96155                     });
96156             }
96157
96158
96159             // Disable the layer.  This transitions the layer invisible and then hides the errors.
96160             function layerOff() {
96161                 throttledRedraw.cancel();
96162                 drawLayer.interrupt();
96163                 touchLayer.selectAll('.qa_error.keepRight')
96164                     .remove();
96165
96166                 drawLayer
96167                     .transition()
96168                     .duration(250)
96169                     .style('opacity', 0)
96170                     .on('end interrupt', function () {
96171                         editOff();
96172                         dispatch.call('change');
96173                     });
96174             }
96175
96176
96177             // Update the error markers
96178             function updateMarkers() {
96179                 if (!_keepRightVisible || !_keepRightEnabled) { return; }
96180
96181                 var service = getService();
96182                 var selectedID = context.selectedErrorID();
96183                 var data = (service ? service.getErrors(projection) : []);
96184                 var getTransform = svgPointTransform(projection);
96185
96186                 // Draw markers..
96187                 var markers = drawLayer.selectAll('.qa_error.keepRight')
96188                     .data(data, function(d) { return d.id; });
96189
96190                 // exit
96191                 markers.exit()
96192                     .remove();
96193
96194                 // enter
96195                 var markersEnter = markers.enter()
96196                     .append('g')
96197                     .attr('class', function(d) {
96198                         return [
96199                             'qa_error',
96200                             d.service,
96201                             'error_id-' + d.id,
96202                             'error_type-' + d.parent_error_type
96203                         ].join(' ');
96204                     });
96205
96206                 markersEnter
96207                     .append('ellipse')
96208                     .attr('cx', 0.5)
96209                     .attr('cy', 1)
96210                     .attr('rx', 6.5)
96211                     .attr('ry', 3)
96212                     .attr('class', 'stroke');
96213
96214                 markersEnter
96215                     .append('path')
96216                     .call(markerPath, 'shadow');
96217
96218                 markersEnter
96219                     .append('use')
96220                     .attr('class', 'qa_error-fill')
96221                     .attr('width', '20px')
96222                     .attr('height', '20px')
96223                     .attr('x', '-8px')
96224                     .attr('y', '-22px')
96225                     .attr('xlink:href', '#iD-icon-bolt');
96226
96227                 // update
96228                 markers
96229                     .merge(markersEnter)
96230                     .sort(sortY)
96231                     .classed('selected', function(d) { return d.id === selectedID; })
96232                     .attr('transform', getTransform);
96233
96234
96235                 // Draw targets..
96236                 if (touchLayer.empty()) { return; }
96237                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
96238
96239                 var targets = touchLayer.selectAll('.qa_error.keepRight')
96240                     .data(data, function(d) { return d.id; });
96241
96242                 // exit
96243                 targets.exit()
96244                     .remove();
96245
96246                 // enter/update
96247                 targets.enter()
96248                     .append('rect')
96249                     .attr('width', '20px')
96250                     .attr('height', '20px')
96251                     .attr('x', '-8px')
96252                     .attr('y', '-22px')
96253                     .merge(targets)
96254                     .sort(sortY)
96255                     .attr('class', function(d) {
96256                         return 'qa_error ' + d.service + ' target error_id-' + d.id + ' ' + fillClass;
96257                     })
96258                     .attr('transform', getTransform);
96259
96260
96261                 function sortY(a, b) {
96262                     return (a.id === selectedID) ? 1
96263                         : (b.id === selectedID) ? -1
96264                         : (a.severity === 'error' && b.severity !== 'error') ? 1
96265                         : (b.severity === 'error' && a.severity !== 'error') ? -1
96266                         : b.loc[1] - a.loc[1];
96267                 }
96268             }
96269
96270
96271             // Draw the keepRight layer and schedule loading errors and updating markers.
96272             function drawKeepRight(selection) {
96273                 var service = getService();
96274
96275                 var surface = context.surface();
96276                 if (surface && !surface.empty()) {
96277                     touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
96278                 }
96279
96280                 drawLayer = selection.selectAll('.layer-keepRight')
96281                     .data(service ? [0] : []);
96282
96283                 drawLayer.exit()
96284                     .remove();
96285
96286                 drawLayer = drawLayer.enter()
96287                     .append('g')
96288                     .attr('class', 'layer-keepRight')
96289                     .style('display', _keepRightEnabled ? 'block' : 'none')
96290                     .merge(drawLayer);
96291
96292                 if (_keepRightEnabled) {
96293                     if (service && ~~context.map().zoom() >= minZoom) {
96294                         editOn();
96295                         service.loadErrors(projection);
96296                         updateMarkers();
96297                     } else {
96298                         editOff();
96299                     }
96300                 }
96301             }
96302
96303
96304             // Toggles the layer on and off
96305             drawKeepRight.enabled = function(val) {
96306                 if (!arguments.length) { return _keepRightEnabled; }
96307
96308                 _keepRightEnabled = val;
96309                 if (_keepRightEnabled) {
96310                     layerOn();
96311                 } else {
96312                     layerOff();
96313                     if (context.selectedErrorID()) {
96314                         context.enter(modeBrowse(context));
96315                     }
96316                 }
96317
96318                 dispatch.call('change');
96319                 return this;
96320             };
96321
96322
96323             drawKeepRight.supported = function() {
96324                 return !!getService();
96325             };
96326
96327
96328             return drawKeepRight;
96329         }
96330
96331         function svgGeolocate(projection) {
96332             var layer = d3_select(null);
96333             var _position;
96334
96335
96336             function init() {
96337                 if (svgGeolocate.initialized) { return; }  // run once
96338                 svgGeolocate.enabled = false;
96339                 svgGeolocate.initialized = true;
96340             }
96341
96342             function showLayer() {
96343                 layer.style('display', 'block');
96344             }
96345
96346
96347             function hideLayer() {
96348                 layer
96349                     .transition()
96350                     .duration(250)
96351                     .style('opacity', 0);
96352             }
96353
96354             function layerOn() {
96355                 layer
96356                     .style('opacity', 0)
96357                     .transition()
96358                     .duration(250)
96359                     .style('opacity', 1);
96360
96361             }
96362
96363             function layerOff() {
96364                 layer.style('display', 'none');
96365             }
96366
96367             function transform(d) {
96368                 return svgPointTransform(projection)(d);
96369             }
96370
96371             function accuracy(accuracy, loc) { // converts accuracy to pixels...
96372                 var degreesRadius = geoMetersToLat(accuracy),
96373                     tangentLoc = [loc[0], loc[1] + degreesRadius],
96374                     projectedTangent = projection(tangentLoc),
96375                     projectedLoc = projection([loc[0], loc[1]]);
96376
96377                 // southern most point will have higher pixel value...
96378                return Math.round(projectedLoc[1] - projectedTangent[1]).toString();
96379             }
96380
96381             function update() {
96382                 var geolocation = { loc: [_position.coords.longitude, _position.coords.latitude] };
96383
96384                 var groups = layer.selectAll('.geolocations').selectAll('.geolocation')
96385                     .data([geolocation]);
96386
96387                 groups.exit()
96388                     .remove();
96389
96390                 var pointsEnter = groups.enter()
96391                     .append('g')
96392                     .attr('class', 'geolocation');
96393
96394                 pointsEnter
96395                     .append('circle')
96396                     .attr('id', 'geolocate-radius')
96397                     .attr('dx', '0')
96398                     .attr('dy', '0')
96399                     .attr('fill', 'rgb(15,128,225)')
96400                     .attr('fill-opacity', '0.3')
96401                     .attr('r', '0');
96402
96403                 pointsEnter
96404                     .append('circle')
96405                     .attr('dx', '0')
96406                     .attr('dy', '0')
96407                     .attr('fill', 'rgb(15,128,225)')
96408                     .attr('stroke', 'white')
96409                     .attr('stroke-width', '1.5')
96410                     .attr('r', '6');
96411
96412                 groups.merge(pointsEnter)
96413                     .attr('transform', transform);
96414
96415                 d3_select('#geolocate-radius').attr('r', accuracy(_position.coords.accuracy, geolocation.loc));
96416             }
96417
96418             function drawLocation(selection) {
96419                 var enabled = svgGeolocate.enabled;
96420
96421                 layer = selection.selectAll('.layer-geolocate')
96422                     .data([0]);
96423
96424                 layer.exit()
96425                     .remove();
96426
96427                 var layerEnter = layer.enter()
96428                     .append('g')
96429                     .attr('class', 'layer-geolocate')
96430                     .style('display', enabled ? 'block' : 'none');
96431
96432                 layerEnter
96433                     .append('g')
96434                     .attr('class', 'geolocations');
96435
96436                 layer = layerEnter
96437                     .merge(layer);
96438
96439                 if (enabled) {
96440                     update();
96441                 } else {
96442                     layerOff();
96443                 }
96444             }
96445
96446             drawLocation.enabled = function (position, enabled) {
96447                 if (!arguments.length) { return svgGeolocate.enabled; }
96448                 _position = position;
96449                 svgGeolocate.enabled = enabled;
96450                 if (svgGeolocate.enabled) {
96451                     showLayer();
96452                     layerOn();
96453                 } else {
96454                     hideLayer();
96455                 }
96456                 return this;
96457             };
96458
96459             init();
96460             return drawLocation;
96461         }
96462
96463         function svgLabels(projection, context) {
96464             var path = d3_geoPath(projection);
96465             var detected = utilDetect();
96466             var baselineHack = (detected.ie ||
96467                 detected.browser.toLowerCase() === 'edge' ||
96468                 (detected.browser.toLowerCase() === 'firefox' && detected.version >= 70));
96469             var _rdrawn = new RBush();
96470             var _rskipped = new RBush();
96471             var _textWidthCache = {};
96472             var _entitybboxes = {};
96473
96474             // Listed from highest to lowest priority
96475             var labelStack = [
96476                 ['line', 'aeroway', '*', 12],
96477                 ['line', 'highway', 'motorway', 12],
96478                 ['line', 'highway', 'trunk', 12],
96479                 ['line', 'highway', 'primary', 12],
96480                 ['line', 'highway', 'secondary', 12],
96481                 ['line', 'highway', 'tertiary', 12],
96482                 ['line', 'highway', '*', 12],
96483                 ['line', 'railway', '*', 12],
96484                 ['line', 'waterway', '*', 12],
96485                 ['area', 'aeroway', '*', 12],
96486                 ['area', 'amenity', '*', 12],
96487                 ['area', 'building', '*', 12],
96488                 ['area', 'historic', '*', 12],
96489                 ['area', 'leisure', '*', 12],
96490                 ['area', 'man_made', '*', 12],
96491                 ['area', 'natural', '*', 12],
96492                 ['area', 'shop', '*', 12],
96493                 ['area', 'tourism', '*', 12],
96494                 ['area', 'camp_site', '*', 12],
96495                 ['point', 'aeroway', '*', 10],
96496                 ['point', 'amenity', '*', 10],
96497                 ['point', 'building', '*', 10],
96498                 ['point', 'historic', '*', 10],
96499                 ['point', 'leisure', '*', 10],
96500                 ['point', 'man_made', '*', 10],
96501                 ['point', 'natural', '*', 10],
96502                 ['point', 'shop', '*', 10],
96503                 ['point', 'tourism', '*', 10],
96504                 ['point', 'camp_site', '*', 10],
96505                 ['line', 'name', '*', 12],
96506                 ['area', 'name', '*', 12],
96507                 ['point', 'name', '*', 10]
96508             ];
96509
96510
96511             function blacklisted(preset) {
96512                 var noIcons = ['building', 'landuse', 'natural'];
96513                 return noIcons.some(function(s) {
96514                     return preset.id.indexOf(s) >= 0;
96515                 });
96516             }
96517
96518
96519             function get(array, prop) {
96520                 return function(d, i) { return array[i][prop]; };
96521             }
96522
96523
96524             function textWidth(text, size, elem) {
96525                 var c = _textWidthCache[size];
96526                 if (!c) { c = _textWidthCache[size] = {}; }
96527
96528                 if (c[text]) {
96529                     return c[text];
96530
96531                 } else if (elem) {
96532                     c[text] = elem.getComputedTextLength();
96533                     return c[text];
96534
96535                 } else {
96536                     var str = encodeURIComponent(text).match(/%[CDEFcdef]/g);
96537                     if (str === null) {
96538                         return size / 3 * 2 * text.length;
96539                     } else {
96540                         return size / 3 * (2 * text.length + str.length);
96541                     }
96542                 }
96543             }
96544
96545
96546             function drawLinePaths(selection, entities, filter, classes, labels) {
96547                 var paths = selection.selectAll('path')
96548                     .filter(filter)
96549                     .data(entities, osmEntity.key);
96550
96551                 // exit
96552                 paths.exit()
96553                     .remove();
96554
96555                 // enter/update
96556                 paths.enter()
96557                     .append('path')
96558                     .style('stroke-width', get(labels, 'font-size'))
96559                     .attr('id', function(d) { return 'labelpath-' + d.id; })
96560                     .attr('class', classes)
96561                     .merge(paths)
96562                     .attr('d', get(labels, 'lineString'));
96563             }
96564
96565
96566             function drawLineLabels(selection, entities, filter, classes, labels) {
96567                 var texts = selection.selectAll('text.' + classes)
96568                     .filter(filter)
96569                     .data(entities, osmEntity.key);
96570
96571                 // exit
96572                 texts.exit()
96573                     .remove();
96574
96575                 // enter
96576                 texts.enter()
96577                     .append('text')
96578                     .attr('class', function(d, i) { return classes + ' ' + labels[i].classes + ' ' + d.id; })
96579                     .attr('dy', baselineHack ? '0.35em' : null)
96580                     .append('textPath')
96581                     .attr('class', 'textpath');
96582
96583                 // update
96584                 selection.selectAll('text.' + classes).selectAll('.textpath')
96585                     .filter(filter)
96586                     .data(entities, osmEntity.key)
96587                     .attr('startOffset', '50%')
96588                     .attr('xlink:href', function(d) { return '#labelpath-' + d.id; })
96589                     .text(utilDisplayNameForPath);
96590             }
96591
96592
96593             function drawPointLabels(selection, entities, filter, classes, labels) {
96594                 var texts = selection.selectAll('text.' + classes)
96595                     .filter(filter)
96596                     .data(entities, osmEntity.key);
96597
96598                 // exit
96599                 texts.exit()
96600                     .remove();
96601
96602                 // enter/update
96603                 texts.enter()
96604                     .append('text')
96605                     .attr('class', function(d, i) {
96606                         return classes + ' ' + labels[i].classes + ' ' + d.id;
96607                     })
96608                     .merge(texts)
96609                     .attr('x', get(labels, 'x'))
96610                     .attr('y', get(labels, 'y'))
96611                     .style('text-anchor', get(labels, 'textAnchor'))
96612                     .text(utilDisplayName)
96613                     .each(function(d, i) {
96614                         textWidth(utilDisplayName(d), labels[i].height, this);
96615                     });
96616             }
96617
96618
96619             function drawAreaLabels(selection, entities, filter, classes, labels) {
96620                 entities = entities.filter(hasText);
96621                 labels = labels.filter(hasText);
96622                 drawPointLabels(selection, entities, filter, classes, labels);
96623
96624                 function hasText(d, i) {
96625                     return labels[i].hasOwnProperty('x') && labels[i].hasOwnProperty('y');
96626                 }
96627             }
96628
96629
96630             function drawAreaIcons(selection, entities, filter, classes, labels) {
96631                 var icons = selection.selectAll('use.' + classes)
96632                     .filter(filter)
96633                     .data(entities, osmEntity.key);
96634
96635                 // exit
96636                 icons.exit()
96637                     .remove();
96638
96639                 // enter/update
96640                 icons.enter()
96641                     .append('use')
96642                     .attr('class', 'icon ' + classes)
96643                     .attr('width', '17px')
96644                     .attr('height', '17px')
96645                     .merge(icons)
96646                     .attr('transform', get(labels, 'transform'))
96647                     .attr('xlink:href', function(d) {
96648                         var preset = context.presets().match(d, context.graph());
96649                         var picon = preset && preset.icon;
96650
96651                         if (!picon) {
96652                             return '';
96653                         } else {
96654                             var isMaki = /^maki-/.test(picon);
96655                             return '#' + picon + (isMaki ? '-15' : '');
96656                         }
96657                     });
96658             }
96659
96660
96661             function drawCollisionBoxes(selection, rtree, which) {
96662                 var classes = 'debug ' + which + ' ' + (which === 'debug-skipped' ? 'orange' : 'yellow');
96663
96664                 var gj = [];
96665                 if (context.getDebug('collision')) {
96666                     gj = rtree.all().map(function(d) {
96667                         return { type: 'Polygon', coordinates: [[
96668                             [d.minX, d.minY],
96669                             [d.maxX, d.minY],
96670                             [d.maxX, d.maxY],
96671                             [d.minX, d.maxY],
96672                             [d.minX, d.minY]
96673                         ]]};
96674                     });
96675                 }
96676
96677                 var boxes = selection.selectAll('.' + which)
96678                     .data(gj);
96679
96680                 // exit
96681                 boxes.exit()
96682                     .remove();
96683
96684                 // enter/update
96685                 boxes.enter()
96686                     .append('path')
96687                     .attr('class', classes)
96688                     .merge(boxes)
96689                     .attr('d', d3_geoPath());
96690             }
96691
96692
96693             function drawLabels(selection, graph, entities, filter, dimensions, fullRedraw) {
96694                 var wireframe = context.surface().classed('fill-wireframe');
96695                 var zoom = geoScaleToZoom(projection.scale());
96696
96697                 var labelable = [];
96698                 var renderNodeAs = {};
96699                 var i, j, k, entity, geometry;
96700
96701                 for (i = 0; i < labelStack.length; i++) {
96702                     labelable.push([]);
96703                 }
96704
96705                 if (fullRedraw) {
96706                     _rdrawn.clear();
96707                     _rskipped.clear();
96708                     _entitybboxes = {};
96709
96710                 } else {
96711                     for (i = 0; i < entities.length; i++) {
96712                         entity = entities[i];
96713                         var toRemove = []
96714                             .concat(_entitybboxes[entity.id] || [])
96715                             .concat(_entitybboxes[entity.id + 'I'] || []);
96716
96717                         for (j = 0; j < toRemove.length; j++) {
96718                             _rdrawn.remove(toRemove[j]);
96719                             _rskipped.remove(toRemove[j]);
96720                         }
96721                     }
96722                 }
96723
96724                 // Loop through all the entities to do some preprocessing
96725                 for (i = 0; i < entities.length; i++) {
96726                     entity = entities[i];
96727                     geometry = entity.geometry(graph);
96728
96729                     // Insert collision boxes around interesting points/vertices
96730                     if (geometry === 'point' || (geometry === 'vertex' && isInterestingVertex(entity))) {
96731                         var hasDirections = entity.directions(graph, projection).length;
96732                         var markerPadding;
96733
96734                         if (!wireframe && geometry === 'point' && !(zoom >= 18 && hasDirections)) {
96735                             renderNodeAs[entity.id] = 'point';
96736                             markerPadding = 20;   // extra y for marker height
96737                         } else {
96738                             renderNodeAs[entity.id] = 'vertex';
96739                             markerPadding = 0;
96740                         }
96741
96742                         var coord = projection(entity.loc);
96743                         var nodePadding = 10;
96744                         var bbox = {
96745                             minX: coord[0] - nodePadding,
96746                             minY: coord[1] - nodePadding - markerPadding,
96747                             maxX: coord[0] + nodePadding,
96748                             maxY: coord[1] + nodePadding
96749                         };
96750
96751                         doInsert(bbox, entity.id + 'P');
96752                     }
96753
96754                     // From here on, treat vertices like points
96755                     if (geometry === 'vertex') {
96756                         geometry = 'point';
96757                     }
96758
96759                     // Determine which entities are label-able
96760                     var preset = geometry === 'area' && context.presets().match(entity, graph);
96761                     var icon = preset && !blacklisted(preset) && preset.icon;
96762
96763                     if (!icon && !utilDisplayName(entity))
96764                         { continue; }
96765
96766                     for (k = 0; k < labelStack.length; k++) {
96767                         var matchGeom = labelStack[k][0];
96768                         var matchKey = labelStack[k][1];
96769                         var matchVal = labelStack[k][2];
96770                         var hasVal = entity.tags[matchKey];
96771
96772                         if (geometry === matchGeom && hasVal && (matchVal === '*' || matchVal === hasVal)) {
96773                             labelable[k].push(entity);
96774                             break;
96775                         }
96776                     }
96777                 }
96778
96779                 var positions = {
96780                     point: [],
96781                     line: [],
96782                     area: []
96783                 };
96784
96785                 var labelled = {
96786                     point: [],
96787                     line: [],
96788                     area: []
96789                 };
96790
96791                 // Try and find a valid label for labellable entities
96792                 for (k = 0; k < labelable.length; k++) {
96793                     var fontSize = labelStack[k][3];
96794
96795                     for (i = 0; i < labelable[k].length; i++) {
96796                         entity = labelable[k][i];
96797                         geometry = entity.geometry(graph);
96798
96799                         var getName = (geometry === 'line') ? utilDisplayNameForPath : utilDisplayName;
96800                         var name = getName(entity);
96801                         var width = name && textWidth(name, fontSize);
96802                         var p = null;
96803
96804                         if (geometry === 'point' || geometry === 'vertex') {
96805                             // no point or vertex labels in wireframe mode
96806                             // no vertex labels at low zooms (vertices have no icons)
96807                             if (wireframe) { continue; }
96808                             var renderAs = renderNodeAs[entity.id];
96809                             if (renderAs === 'vertex' && zoom < 17) { continue; }
96810
96811                             p = getPointLabel(entity, width, fontSize, renderAs);
96812
96813                         } else if (geometry === 'line') {
96814                             p = getLineLabel(entity, width, fontSize);
96815
96816                         } else if (geometry === 'area') {
96817                             p = getAreaLabel(entity, width, fontSize);
96818                         }
96819
96820                         if (p) {
96821                             if (geometry === 'vertex') { geometry = 'point'; }  // treat vertex like point
96822                             p.classes = geometry + ' tag-' + labelStack[k][1];
96823                             positions[geometry].push(p);
96824                             labelled[geometry].push(entity);
96825                         }
96826                     }
96827                 }
96828
96829
96830                 function isInterestingVertex(entity) {
96831                     var selectedIDs = context.selectedIDs();
96832
96833                     return entity.hasInterestingTags() ||
96834                         entity.isEndpoint(graph) ||
96835                         entity.isConnected(graph) ||
96836                         selectedIDs.indexOf(entity.id) !== -1 ||
96837                         graph.parentWays(entity).some(function(parent) {
96838                             return selectedIDs.indexOf(parent.id) !== -1;
96839                         });
96840                 }
96841
96842
96843                 function getPointLabel(entity, width, height, geometry) {
96844                     var y = (geometry === 'point' ? -12 : 0);
96845                     var pointOffsets = {
96846                         ltr: [15, y, 'start'],
96847                         rtl: [-15, y, 'end']
96848                     };
96849
96850                     var coord = projection(entity.loc);
96851                     var textPadding = 2;
96852                     var offset = pointOffsets[textDirection];
96853                     var p = {
96854                         height: height,
96855                         width: width,
96856                         x: coord[0] + offset[0],
96857                         y: coord[1] + offset[1],
96858                         textAnchor: offset[2]
96859                     };
96860
96861                     // insert a collision box for the text label..
96862                     var bbox;
96863                     if (textDirection === 'rtl') {
96864                         bbox = {
96865                             minX: p.x - width - textPadding,
96866                             minY: p.y - (height / 2) - textPadding,
96867                             maxX: p.x + textPadding,
96868                             maxY: p.y + (height / 2) + textPadding
96869                         };
96870                     } else {
96871                         bbox = {
96872                             minX: p.x - textPadding,
96873                             minY: p.y - (height / 2) - textPadding,
96874                             maxX: p.x + width + textPadding,
96875                             maxY: p.y + (height / 2) + textPadding
96876                         };
96877                     }
96878
96879                     if (tryInsert([bbox], entity.id, true)) {
96880                         return p;
96881                     }
96882                 }
96883
96884
96885                 function getLineLabel(entity, width, height) {
96886                     var viewport = geoExtent(context.projection.clipExtent()).polygon();
96887                     var points = graph.childNodes(entity)
96888                         .map(function(node) { return projection(node.loc); });
96889                     var length = geoPathLength(points);
96890
96891                     if (length < width + 20) { return; }
96892
96893                     // todo: properly clip points to viewport
96894
96895                     // % along the line to attempt to place the label
96896                     var lineOffsets = [50, 45, 55, 40, 60, 35, 65, 30, 70,
96897                                        25, 75, 20, 80, 15, 95, 10, 90, 5, 95];
96898                     var padding = 3;
96899
96900                     for (var i = 0; i < lineOffsets.length; i++) {
96901                         var offset = lineOffsets[i];
96902                         var middle = offset / 100 * length;
96903                         var start = middle - width / 2;
96904
96905                         if (start < 0 || start + width > length) { continue; }
96906
96907                         // generate subpath and ignore paths that are invalid or don't cross viewport.
96908                         var sub = subpath(points, start, start + width);
96909                         if (!sub || !geoPolygonIntersectsPolygon(viewport, sub, true)) {
96910                             continue;
96911                         }
96912
96913                         var isReverse = reverse(sub);
96914                         if (isReverse) {
96915                             sub = sub.reverse();
96916                         }
96917
96918                         var bboxes = [];
96919                         var boxsize = (height + 2) / 2;
96920
96921                         for (var j = 0; j < sub.length - 1; j++) {
96922                             var a = sub[j];
96923                             var b = sub[j + 1];
96924
96925                             // split up the text into small collision boxes
96926                             var num = Math.max(1, Math.floor(geoVecLength(a, b) / boxsize / 2));
96927
96928                             for (var box = 0; box < num; box++) {
96929                                 var p = geoVecInterp(a, b, box / num);
96930                                 var x0 = p[0] - boxsize - padding;
96931                                 var y0 = p[1] - boxsize - padding;
96932                                 var x1 = p[0] + boxsize + padding;
96933                                 var y1 = p[1] + boxsize + padding;
96934
96935                                 bboxes.push({
96936                                     minX: Math.min(x0, x1),
96937                                     minY: Math.min(y0, y1),
96938                                     maxX: Math.max(x0, x1),
96939                                     maxY: Math.max(y0, y1)
96940                                 });
96941                             }
96942                         }
96943
96944                         if (tryInsert(bboxes, entity.id, false)) {   // accept this one
96945                             return {
96946                                 'font-size': height + 2,
96947                                 lineString: lineString(sub),
96948                                 startOffset: offset + '%'
96949                             };
96950                         }
96951                     }
96952
96953                     function reverse(p) {
96954                         var angle = Math.atan2(p[1][1] - p[0][1], p[1][0] - p[0][0]);
96955                         return !(p[0][0] < p[p.length - 1][0] && angle < Math.PI/2 && angle > -Math.PI/2);
96956                     }
96957
96958                     function lineString(points) {
96959                         return 'M' + points.join('L');
96960                     }
96961
96962                     function subpath(points, from, to) {
96963                         var sofar = 0;
96964                         var start, end, i0, i1;
96965
96966                         for (var i = 0; i < points.length - 1; i++) {
96967                             var a = points[i];
96968                             var b = points[i + 1];
96969                             var current = geoVecLength(a, b);
96970                             var portion;
96971                             if (!start && sofar + current >= from) {
96972                                 portion = (from - sofar) / current;
96973                                 start = [
96974                                     a[0] + portion * (b[0] - a[0]),
96975                                     a[1] + portion * (b[1] - a[1])
96976                                 ];
96977                                 i0 = i + 1;
96978                             }
96979                             if (!end && sofar + current >= to) {
96980                                 portion = (to - sofar) / current;
96981                                 end = [
96982                                     a[0] + portion * (b[0] - a[0]),
96983                                     a[1] + portion * (b[1] - a[1])
96984                                 ];
96985                                 i1 = i + 1;
96986                             }
96987                             sofar += current;
96988                         }
96989
96990                         var result = points.slice(i0, i1);
96991                         result.unshift(start);
96992                         result.push(end);
96993                         return result;
96994                     }
96995                 }
96996
96997
96998                 function getAreaLabel(entity, width, height) {
96999                     var centroid = path.centroid(entity.asGeoJSON(graph, true));
97000                     var extent = entity.extent(graph);
97001                     var areaWidth = projection(extent[1])[0] - projection(extent[0])[0];
97002
97003                     if (isNaN(centroid[0]) || areaWidth < 20) { return; }
97004
97005                     var preset = context.presets().match(entity, context.graph());
97006                     var picon = preset && preset.icon;
97007                     var iconSize = 17;
97008                     var padding = 2;
97009                     var p = {};
97010
97011                     if (picon) {  // icon and label..
97012                         if (addIcon()) {
97013                             addLabel(iconSize + padding);
97014                             return p;
97015                         }
97016                     } else {   // label only..
97017                         if (addLabel(0)) {
97018                             return p;
97019                         }
97020                     }
97021
97022
97023                     function addIcon() {
97024                         var iconX = centroid[0] - (iconSize / 2);
97025                         var iconY = centroid[1] - (iconSize / 2);
97026                         var bbox = {
97027                             minX: iconX,
97028                             minY: iconY,
97029                             maxX: iconX + iconSize,
97030                             maxY: iconY + iconSize
97031                         };
97032
97033                         if (tryInsert([bbox], entity.id + 'I', true)) {
97034                             p.transform = 'translate(' + iconX + ',' + iconY + ')';
97035                             return true;
97036                         }
97037                         return false;
97038                     }
97039
97040                     function addLabel(yOffset) {
97041                         if (width && areaWidth >= width + 20) {
97042                             var labelX = centroid[0];
97043                             var labelY = centroid[1] + yOffset;
97044                             var bbox = {
97045                                 minX: labelX - (width / 2) - padding,
97046                                 minY: labelY - (height / 2) - padding,
97047                                 maxX: labelX + (width / 2) + padding,
97048                                 maxY: labelY + (height / 2) + padding
97049                             };
97050
97051                             if (tryInsert([bbox], entity.id, true)) {
97052                                 p.x = labelX;
97053                                 p.y = labelY;
97054                                 p.textAnchor = 'middle';
97055                                 p.height = height;
97056                                 return true;
97057                             }
97058                         }
97059                         return false;
97060                     }
97061                 }
97062
97063
97064                 // force insert a singular bounding box
97065                 // singular box only, no array, id better be unique
97066                 function doInsert(bbox, id) {
97067                     bbox.id = id;
97068
97069                     var oldbox = _entitybboxes[id];
97070                     if (oldbox) {
97071                         _rdrawn.remove(oldbox);
97072                     }
97073                     _entitybboxes[id] = bbox;
97074                     _rdrawn.insert(bbox);
97075                 }
97076
97077
97078                 function tryInsert(bboxes, id, saveSkipped) {
97079                     var skipped = false;
97080
97081                     for (var i = 0; i < bboxes.length; i++) {
97082                         var bbox = bboxes[i];
97083                         bbox.id = id;
97084
97085                         // Check that label is visible
97086                         if (bbox.minX < 0 || bbox.minY < 0 || bbox.maxX > dimensions[0] || bbox.maxY > dimensions[1]) {
97087                             skipped = true;
97088                             break;
97089                         }
97090                         if (_rdrawn.collides(bbox)) {
97091                             skipped = true;
97092                             break;
97093                         }
97094                     }
97095
97096                     _entitybboxes[id] = bboxes;
97097
97098                     if (skipped) {
97099                         if (saveSkipped) {
97100                             _rskipped.load(bboxes);
97101                         }
97102                     } else {
97103                         _rdrawn.load(bboxes);
97104                     }
97105
97106                     return !skipped;
97107                 }
97108
97109
97110                 var layer = selection.selectAll('.layer-osm.labels');
97111                 layer.selectAll('.labels-group')
97112                     .data(['halo', 'label', 'debug'])
97113                     .enter()
97114                     .append('g')
97115                     .attr('class', function(d) { return 'labels-group ' + d; });
97116
97117                 var halo = layer.selectAll('.labels-group.halo');
97118                 var label = layer.selectAll('.labels-group.label');
97119                 var debug = layer.selectAll('.labels-group.debug');
97120
97121                 // points
97122                 drawPointLabels(label, labelled.point, filter, 'pointlabel', positions.point);
97123                 drawPointLabels(halo, labelled.point, filter, 'pointlabel-halo', positions.point);
97124
97125                 // lines
97126                 drawLinePaths(layer, labelled.line, filter, '', positions.line);
97127                 drawLineLabels(label, labelled.line, filter, 'linelabel', positions.line);
97128                 drawLineLabels(halo, labelled.line, filter, 'linelabel-halo', positions.line);
97129
97130                 // areas
97131                 drawAreaLabels(label, labelled.area, filter, 'arealabel', positions.area);
97132                 drawAreaLabels(halo, labelled.area, filter, 'arealabel-halo', positions.area);
97133                 drawAreaIcons(label, labelled.area, filter, 'areaicon', positions.area);
97134                 drawAreaIcons(halo, labelled.area, filter, 'areaicon-halo', positions.area);
97135
97136                 // debug
97137                 drawCollisionBoxes(debug, _rskipped, 'debug-skipped');
97138                 drawCollisionBoxes(debug, _rdrawn, 'debug-drawn');
97139
97140                 layer.call(filterLabels);
97141             }
97142
97143
97144             function filterLabels(selection) {
97145                 var drawLayer = selection.selectAll('.layer-osm.labels');
97146                 var layers = drawLayer.selectAll('.labels-group.halo, .labels-group.label');
97147
97148                 layers.selectAll('.nolabel')
97149                     .classed('nolabel', false);
97150
97151                 var mouse = context.mouse();
97152                 var graph = context.graph();
97153                 var selectedIDs = context.selectedIDs();
97154                 var ids = [];
97155                 var pad, bbox;
97156
97157                 // hide labels near the mouse
97158                 if (mouse) {
97159                     pad = 20;
97160                     bbox = { minX: mouse[0] - pad, minY: mouse[1] - pad, maxX: mouse[0] + pad, maxY: mouse[1] + pad };
97161                     var nearMouse = _rdrawn.search(bbox).map(function(entity) { return entity.id; });
97162                     ids.push.apply(ids, nearMouse);
97163                 }
97164
97165                 // hide labels on selected nodes (they look weird when dragging / haloed)
97166                 for (var i = 0; i < selectedIDs.length; i++) {
97167                     var entity = graph.hasEntity(selectedIDs[i]);
97168                     if (entity && entity.type === 'node') {
97169                         ids.push(selectedIDs[i]);
97170                     }
97171                 }
97172
97173                 layers.selectAll(utilEntitySelector(ids))
97174                     .classed('nolabel', true);
97175
97176
97177                 // draw the mouse bbox if debugging is on..
97178                 var debug = selection.selectAll('.labels-group.debug');
97179                 var gj = [];
97180                 if (context.getDebug('collision')) {
97181                     gj = bbox ? [{
97182                         type: 'Polygon',
97183                         coordinates: [[
97184                             [bbox.minX, bbox.minY],
97185                             [bbox.maxX, bbox.minY],
97186                             [bbox.maxX, bbox.maxY],
97187                             [bbox.minX, bbox.maxY],
97188                             [bbox.minX, bbox.minY]
97189                         ]]
97190                     }] : [];
97191                 }
97192
97193                 var box = debug.selectAll('.debug-mouse')
97194                     .data(gj);
97195
97196                 // exit
97197                 box.exit()
97198                     .remove();
97199
97200                 // enter/update
97201                 box.enter()
97202                     .append('path')
97203                     .attr('class', 'debug debug-mouse yellow')
97204                     .merge(box)
97205                     .attr('d', d3_geoPath());
97206             }
97207
97208
97209             var throttleFilterLabels = throttle(filterLabels, 100);
97210
97211
97212             drawLabels.observe = function(selection) {
97213                 var listener = function() { throttleFilterLabels(selection); };
97214                 selection.on('mousemove.hidelabels', listener);
97215                 context.on('enter.hidelabels', listener);
97216             };
97217
97218
97219             drawLabels.off = function(selection) {
97220                 throttleFilterLabels.cancel();
97221                 selection.on('mousemove.hidelabels', null);
97222                 context.on('enter.hidelabels', null);
97223             };
97224
97225
97226             return drawLabels;
97227         }
97228
97229         var _improveOsmEnabled = false;
97230         var _errorService;
97231
97232
97233         function svgImproveOSM(projection, context, dispatch) {
97234             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
97235             var minZoom = 12;
97236             var touchLayer = d3_select(null);
97237             var drawLayer = d3_select(null);
97238             var _improveOsmVisible = false;
97239
97240             function markerPath(selection, klass) {
97241                 selection
97242                     .attr('class', klass)
97243                     .attr('transform', 'translate(-10, -28)')
97244                     .attr('points', '16,3 4,3 1,6 1,17 4,20 7,20 10,27 13,20 16,20 19,17.033 19,6');
97245             }
97246
97247
97248             // Loosely-coupled improveOSM service for fetching errors.
97249             function getService() {
97250                 if (services$1.improveOSM && !_errorService) {
97251                     _errorService = services$1.improveOSM;
97252                     _errorService.on('loaded', throttledRedraw);
97253                 } else if (!services$1.improveOSM && _errorService) {
97254                     _errorService = null;
97255                 }
97256
97257                 return _errorService;
97258             }
97259
97260
97261             // Show the errors
97262             function editOn() {
97263                 if (!_improveOsmVisible) {
97264                     _improveOsmVisible = true;
97265                     drawLayer
97266                         .style('display', 'block');
97267                 }
97268             }
97269
97270
97271             // Immediately remove the errors and their touch targets
97272             function editOff() {
97273                 if (_improveOsmVisible) {
97274                     _improveOsmVisible = false;
97275                     drawLayer
97276                         .style('display', 'none');
97277                     drawLayer.selectAll('.qa_error.improveOSM')
97278                         .remove();
97279                     touchLayer.selectAll('.qa_error.improveOSM')
97280                         .remove();
97281                 }
97282             }
97283
97284
97285             // Enable the layer.  This shows the errors and transitions them to visible.
97286             function layerOn() {
97287                 editOn();
97288
97289                 drawLayer
97290                     .style('opacity', 0)
97291                     .transition()
97292                     .duration(250)
97293                     .style('opacity', 1)
97294                     .on('end interrupt', function () {
97295                         dispatch.call('change');
97296                     });
97297             }
97298
97299
97300             // Disable the layer.  This transitions the layer invisible and then hides the errors.
97301             function layerOff() {
97302                 throttledRedraw.cancel();
97303                 drawLayer.interrupt();
97304                 touchLayer.selectAll('.qa_error.improveOSM')
97305                     .remove();
97306
97307                 drawLayer
97308                     .transition()
97309                     .duration(250)
97310                     .style('opacity', 0)
97311                     .on('end interrupt', function () {
97312                         editOff();
97313                         dispatch.call('change');
97314                     });
97315             }
97316
97317
97318             // Update the error markers
97319             function updateMarkers() {
97320                 if (!_improveOsmVisible || !_improveOsmEnabled) { return; }
97321
97322                 var service = getService();
97323                 var selectedID = context.selectedErrorID();
97324                 var data = (service ? service.getErrors(projection) : []);
97325                 var getTransform = svgPointTransform(projection);
97326
97327                 // Draw markers..
97328                 var markers = drawLayer.selectAll('.qa_error.improveOSM')
97329                     .data(data, function(d) { return d.id; });
97330
97331                 // exit
97332                 markers.exit()
97333                     .remove();
97334
97335                 // enter
97336                 var markersEnter = markers.enter()
97337                     .append('g')
97338                     .attr('class', function(d) {
97339                         return [
97340                             'qa_error',
97341                             d.service,
97342                             'error_id-' + d.id,
97343                             'error_type-' + d.error_type,
97344                             'category-' + d.category
97345                         ].join(' ');
97346                     });
97347
97348                 markersEnter
97349                     .append('polygon')
97350                     .call(markerPath, 'shadow');
97351
97352                 markersEnter
97353                     .append('ellipse')
97354                     .attr('cx', 0)
97355                     .attr('cy', 0)
97356                     .attr('rx', 4.5)
97357                     .attr('ry', 2)
97358                     .attr('class', 'stroke');
97359
97360                 markersEnter
97361                     .append('polygon')
97362                     .attr('fill', 'currentColor')
97363                     .call(markerPath, 'qa_error-fill');
97364
97365                 markersEnter
97366                     .append('use')
97367                     .attr('transform', 'translate(-5.5, -21)')
97368                     .attr('class', 'icon-annotation')
97369                     .attr('width', '11px')
97370                     .attr('height', '11px')
97371                     .attr('xlink:href', function(d) {
97372                         var picon = d.icon;
97373
97374                         if (!picon) {
97375                             return '';
97376                         } else {
97377                             var isMaki = /^maki-/.test(picon);
97378                             return '#' + picon + (isMaki ? '-11' : '');
97379                         }
97380                     });
97381
97382                 // update
97383                 markers
97384                     .merge(markersEnter)
97385                     .sort(sortY)
97386                     .classed('selected', function(d) { return d.id === selectedID; })
97387                     .attr('transform', getTransform);
97388
97389
97390                 // Draw targets..
97391                 if (touchLayer.empty()) { return; }
97392                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
97393
97394                 var targets = touchLayer.selectAll('.qa_error.improveOSM')
97395                     .data(data, function(d) { return d.id; });
97396
97397                 // exit
97398                 targets.exit()
97399                     .remove();
97400
97401                 // enter/update
97402                 targets.enter()
97403                     .append('rect')
97404                     .attr('width', '20px')
97405                     .attr('height', '30px')
97406                     .attr('x', '-10px')
97407                     .attr('y', '-28px')
97408                     .merge(targets)
97409                     .sort(sortY)
97410                     .attr('class', function(d) {
97411                         return 'qa_error ' + d.service + ' target error_id-' + d.id + ' ' + fillClass;
97412                     })
97413                     .attr('transform', getTransform);
97414
97415
97416                 function sortY(a, b) {
97417                     return (a.id === selectedID) ? 1
97418                         : (b.id === selectedID) ? -1
97419                         : b.loc[1] - a.loc[1];
97420                 }
97421             }
97422
97423
97424             // Draw the ImproveOSM layer and schedule loading errors and updating markers.
97425             function drawImproveOSM(selection) {
97426                 var service = getService();
97427
97428                 var surface = context.surface();
97429                 if (surface && !surface.empty()) {
97430                     touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
97431                 }
97432
97433                 drawLayer = selection.selectAll('.layer-improveOSM')
97434                     .data(service ? [0] : []);
97435
97436                 drawLayer.exit()
97437                     .remove();
97438
97439                 drawLayer = drawLayer.enter()
97440                     .append('g')
97441                     .attr('class', 'layer-improveOSM')
97442                     .style('display', _improveOsmEnabled ? 'block' : 'none')
97443                     .merge(drawLayer);
97444
97445                 if (_improveOsmEnabled) {
97446                     if (service && ~~context.map().zoom() >= minZoom) {
97447                         editOn();
97448                         service.loadErrors(projection);
97449                         updateMarkers();
97450                     } else {
97451                         editOff();
97452                     }
97453                 }
97454             }
97455
97456
97457             // Toggles the layer on and off
97458             drawImproveOSM.enabled = function(val) {
97459                 if (!arguments.length) { return _improveOsmEnabled; }
97460
97461                 _improveOsmEnabled = val;
97462                 if (_improveOsmEnabled) {
97463                     layerOn();
97464                 } else {
97465                     layerOff();
97466                     if (context.selectedErrorID()) {
97467                         context.enter(modeBrowse(context));
97468                     }
97469                 }
97470
97471                 dispatch.call('change');
97472                 return this;
97473             };
97474
97475
97476             drawImproveOSM.supported = function() {
97477                 return !!getService();
97478             };
97479
97480
97481             return drawImproveOSM;
97482         }
97483
97484         function svgStreetside(projection, context, dispatch) {
97485             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
97486             var minZoom = 14;
97487             var minMarkerZoom = 16;
97488             var minViewfieldZoom = 18;
97489             var layer = d3_select(null);
97490             var _viewerYaw = 0;
97491             var _selectedSequence = null;
97492             var _streetside;
97493
97494             /**
97495              * init().
97496              */
97497             function init() {
97498                 if (svgStreetside.initialized) { return; }  // run once
97499                 svgStreetside.enabled = false;
97500                 svgStreetside.initialized = true;
97501             }
97502
97503             /**
97504              * getService().
97505              */
97506             function getService() {
97507                 if (services$1.streetside && !_streetside) {
97508                     _streetside = services$1.streetside;
97509                     _streetside.event
97510                         .on('viewerChanged', viewerChanged)
97511                         .on('loadedBubbles', throttledRedraw);
97512                 } else if (!services$1.streetside && _streetside) {
97513                     _streetside = null;
97514                 }
97515
97516                 return _streetside;
97517             }
97518
97519             /**
97520              * showLayer().
97521              */
97522             function showLayer() {
97523                 var service = getService();
97524                 if (!service) { return; }
97525
97526                 editOn();
97527
97528                 layer
97529                     .style('opacity', 0)
97530                     .transition()
97531                     .duration(250)
97532                     .style('opacity', 1)
97533                     .on('end', function () { dispatch.call('change'); });
97534             }
97535
97536             /**
97537              * hideLayer().
97538              */
97539             function hideLayer() {
97540                 throttledRedraw.cancel();
97541
97542                 layer
97543                     .transition()
97544                     .duration(250)
97545                     .style('opacity', 0)
97546                     .on('end', editOff);
97547             }
97548
97549             /**
97550              * editOn().
97551              */
97552             function editOn() {
97553                 layer.style('display', 'block');
97554             }
97555
97556             /**
97557              * editOff().
97558              */
97559             function editOff() {
97560                 layer.selectAll('.viewfield-group').remove();
97561                 layer.style('display', 'none');
97562             }
97563
97564             /**
97565              * click() Handles 'bubble' point click event.
97566              */
97567             function click(d) {
97568                 var service = getService();
97569                 if (!service) { return; }
97570
97571                 // try to preserve the viewer rotation when staying on the same sequence
97572                 if (d.sequenceKey !== _selectedSequence) {
97573                     _viewerYaw = 0;  // reset
97574                 }
97575                 _selectedSequence = d.sequenceKey;
97576
97577                 service
97578                     .selectImage(d)
97579                     .then(function (response) {
97580                         if (response.status === 'ok'){
97581                             service.showViewer(_viewerYaw);
97582                         }
97583                     });
97584
97585
97586                 context.map().centerEase(d.loc);
97587             }
97588
97589             /**
97590              * mouseover().
97591              */
97592             function mouseover(d) {
97593                 var service = getService();
97594                 if (service) { service.setStyles(d); }
97595             }
97596
97597             /**
97598              * mouseout().
97599              */
97600             function mouseout() {
97601                 var service = getService();
97602                 if (service) { service.setStyles(null); }
97603             }
97604
97605             /**
97606              * transform().
97607              */
97608             function transform(d) {
97609                 var t = svgPointTransform(projection)(d);
97610                 var rot = d.ca + _viewerYaw;
97611                 if (rot) {
97612                     t += ' rotate(' + Math.floor(rot) + ',0,0)';
97613                 }
97614                 return t;
97615             }
97616
97617
97618             function viewerChanged() {
97619                 var service = getService();
97620                 if (!service) { return; }
97621
97622                 var viewer = service.viewer();
97623                 if (!viewer) { return; }
97624
97625                 // update viewfield rotation
97626                 _viewerYaw = viewer.getYaw();
97627
97628                 // avoid updating if the map is currently transformed
97629                 // e.g. during drags or easing.
97630                 if (context.map().isTransformed()) { return; }
97631
97632                 layer.selectAll('.viewfield-group.currentView')
97633                     .attr('transform', transform);
97634             }
97635
97636
97637             context.photos().on('change.streetside', update);
97638
97639             /**
97640              * update().
97641              */
97642             function update() {
97643                 var viewer = d3_select('#photoviewer');
97644                 var selected = viewer.empty() ? undefined : viewer.datum();
97645                 var z = ~~context.map().zoom();
97646                 var showMarkers = (z >= minMarkerZoom);
97647                 var showViewfields = (z >= minViewfieldZoom);
97648                 var service = getService();
97649
97650                 var sequences = [];
97651                 var bubbles = [];
97652
97653                 if (context.photos().showsPanoramic()) {
97654                     sequences = (service ? service.sequences(projection) : []);
97655                     bubbles = (service && showMarkers ? service.bubbles(projection) : []);
97656                 }
97657
97658                 var traces = layer.selectAll('.sequences').selectAll('.sequence')
97659                     .data(sequences, function(d) { return d.properties.key; });
97660
97661                 // exit
97662                 traces.exit()
97663                     .remove();
97664
97665                 // enter/update
97666                 traces = traces.enter()
97667                     .append('path')
97668                     .attr('class', 'sequence')
97669                     .merge(traces)
97670                     .attr('d', svgPath(projection).geojson);
97671
97672
97673                 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
97674                     .data(bubbles, function(d) {
97675                         // force reenter once bubbles are attached to a sequence
97676                         return d.key + (d.sequenceKey ? 'v1' : 'v0');
97677                     });
97678
97679                 // exit
97680                 groups.exit()
97681                     .remove();
97682
97683                 // enter
97684                 var groupsEnter = groups.enter()
97685                     .append('g')
97686                     .attr('class', 'viewfield-group')
97687                     .on('mouseenter', mouseover)
97688                     .on('mouseleave', mouseout)
97689                     .on('click', click);
97690
97691                 groupsEnter
97692                     .append('g')
97693                     .attr('class', 'viewfield-scale');
97694
97695                 // update
97696                 var markers = groups
97697                     .merge(groupsEnter)
97698                     .sort(function(a, b) {
97699                         return (a === selected) ? 1
97700                             : (b === selected) ? -1
97701                             : b.loc[1] - a.loc[1];
97702                     })
97703                     .attr('transform', transform)
97704                     .select('.viewfield-scale');
97705
97706
97707                 markers.selectAll('circle')
97708                     .data([0])
97709                     .enter()
97710                     .append('circle')
97711                     .attr('dx', '0')
97712                     .attr('dy', '0')
97713                     .attr('r', '6');
97714
97715                 var viewfields = markers.selectAll('.viewfield')
97716                     .data(showViewfields ? [0] : []);
97717
97718                 viewfields.exit()
97719                     .remove();
97720
97721                 // viewfields may or may not be drawn...
97722                 // but if they are, draw below the circles
97723                 viewfields.enter()
97724                     .insert('path', 'circle')
97725                     .attr('class', 'viewfield')
97726                     .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
97727                     .attr('d', viewfieldPath);
97728
97729                 function viewfieldPath() {
97730                     var d = this.parentNode.__data__;
97731                     if (d.pano) {
97732                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
97733                     } else {
97734                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
97735                     }
97736                 }
97737
97738             }
97739
97740             /**
97741              * drawImages()
97742              * drawImages is the method that is returned (and that runs) everytime 'svgStreetside()' is called.
97743              * 'svgStreetside()' is called from index.js
97744              */
97745             function drawImages(selection) {
97746                 var enabled = svgStreetside.enabled;
97747                 var service = getService();
97748
97749                 layer = selection.selectAll('.layer-streetside-images')
97750                     .data(service ? [0] : []);
97751
97752                 layer.exit()
97753                     .remove();
97754
97755                 var layerEnter = layer.enter()
97756                     .append('g')
97757                     .attr('class', 'layer-streetside-images')
97758                     .style('display', enabled ? 'block' : 'none');
97759
97760                 layerEnter
97761                     .append('g')
97762                     .attr('class', 'sequences');
97763
97764                 layerEnter
97765                     .append('g')
97766                     .attr('class', 'markers');
97767
97768                 layer = layerEnter
97769                     .merge(layer);
97770
97771                 if (enabled) {
97772                     if (service && ~~context.map().zoom() >= minZoom) {
97773                         editOn();
97774                         update();
97775                         service.loadBubbles(projection);
97776                     } else {
97777                         editOff();
97778                     }
97779                 }
97780             }
97781
97782
97783             /**
97784              * drawImages.enabled().
97785              */
97786             drawImages.enabled = function(_) {
97787                 if (!arguments.length) { return svgStreetside.enabled; }
97788                 svgStreetside.enabled = _;
97789                 if (svgStreetside.enabled) {
97790                     showLayer();
97791                 } else {
97792                     hideLayer();
97793                 }
97794                 dispatch.call('change');
97795                 return this;
97796             };
97797
97798             /**
97799              * drawImages.supported().
97800              */
97801             drawImages.supported = function() {
97802                 return !!getService();
97803             };
97804
97805             init();
97806
97807             return drawImages;
97808         }
97809
97810         function svgMapillaryImages(projection, context, dispatch) {
97811             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
97812             var minZoom = 12;
97813             var minMarkerZoom = 16;
97814             var minViewfieldZoom = 18;
97815             var layer = d3_select(null);
97816             var _mapillary;
97817             var viewerCompassAngle;
97818
97819
97820             function init() {
97821                 if (svgMapillaryImages.initialized) { return; }  // run once
97822                 svgMapillaryImages.enabled = false;
97823                 svgMapillaryImages.initialized = true;
97824             }
97825
97826
97827             function getService() {
97828                 if (services$1.mapillary && !_mapillary) {
97829                     _mapillary = services$1.mapillary;
97830                     _mapillary.event.on('loadedImages', throttledRedraw);
97831                     _mapillary.event.on('bearingChanged', function(e) {
97832                         viewerCompassAngle = e;
97833
97834                         // avoid updating if the map is currently transformed
97835                         // e.g. during drags or easing.
97836                         if (context.map().isTransformed()) { return; }
97837
97838                         layer.selectAll('.viewfield-group.currentView')
97839                             .filter(function(d) {
97840                                 return d.pano;
97841                             })
97842                             .attr('transform', transform);
97843                     });
97844                 } else if (!services$1.mapillary && _mapillary) {
97845                     _mapillary = null;
97846                 }
97847
97848                 return _mapillary;
97849             }
97850
97851
97852             function showLayer() {
97853                 var service = getService();
97854                 if (!service) { return; }
97855
97856                 editOn();
97857
97858                 layer
97859                     .style('opacity', 0)
97860                     .transition()
97861                     .duration(250)
97862                     .style('opacity', 1)
97863                     .on('end', function () { dispatch.call('change'); });
97864             }
97865
97866
97867             function hideLayer() {
97868                 throttledRedraw.cancel();
97869
97870                 layer
97871                     .transition()
97872                     .duration(250)
97873                     .style('opacity', 0)
97874                     .on('end', editOff);
97875             }
97876
97877
97878             function editOn() {
97879                 layer.style('display', 'block');
97880             }
97881
97882
97883             function editOff() {
97884                 layer.selectAll('.viewfield-group').remove();
97885                 layer.style('display', 'none');
97886             }
97887
97888
97889             function click(d) {
97890                 var service = getService();
97891                 if (!service) { return; }
97892
97893                 service
97894                     .selectImage(d.key)
97895                     .updateViewer(d.key, context)
97896                     .showViewer();
97897
97898                 context.map().centerEase(d.loc);
97899             }
97900
97901
97902             function mouseover(d) {
97903                 var service = getService();
97904                 if (service) { service.setStyles(d); }
97905             }
97906
97907
97908             function mouseout() {
97909                 var service = getService();
97910                 if (service) { service.setStyles(null); }
97911             }
97912
97913
97914             function transform(d) {
97915                 var t = svgPointTransform(projection)(d);
97916                 if (d.pano && viewerCompassAngle !== null && isFinite(viewerCompassAngle)) {
97917                     t += ' rotate(' + Math.floor(viewerCompassAngle) + ',0,0)';
97918                 } else if (d.ca) {
97919                     t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
97920                 }
97921                 return t;
97922             }
97923
97924             context.photos().on('change.mapillary_images', update);
97925
97926             function filterImages(images) {
97927                 var showsPano = context.photos().showsPanoramic();
97928                 var showsFlat = context.photos().showsFlat();
97929                 if (!showsPano || !showsFlat) {
97930                     images = images.filter(function(image) {
97931                         if (image.pano) { return showsPano; }
97932                         return showsFlat;
97933                     });
97934                 }
97935                 return images;
97936             }
97937
97938             function filterSequences(sequences, service) {
97939                 var showsPano = context.photos().showsPanoramic();
97940                 var showsFlat = context.photos().showsFlat();
97941                 if (!showsPano || !showsFlat) {
97942                     sequences = sequences.filter(function(sequence) {
97943                         if (sequence.properties.hasOwnProperty('pano')) {
97944                             if (sequence.properties.pano) { return showsPano; }
97945                             return showsFlat;
97946                         } else {
97947                             // if the sequence doesn't specify pano or not, search its images
97948                             var cProps = sequence.properties.coordinateProperties;
97949                             if (cProps && cProps.image_keys && cProps.image_keys.length > 0) {
97950                                 for (var index in cProps.image_keys) {
97951                                     var imageKey = cProps.image_keys[index];
97952                                     var image = service.cachedImage(imageKey);
97953                                     if (image && image.hasOwnProperty('pano')) {
97954                                         if (image.pano) { return showsPano; }
97955                                         return showsFlat;
97956                                     }
97957                                 }
97958                             }
97959                         }
97960                     });
97961                 }
97962                 return sequences;
97963             }
97964
97965             function update() {
97966
97967                 var z = ~~context.map().zoom();
97968                 var showMarkers = (z >= minMarkerZoom);
97969                 var showViewfields = (z >= minViewfieldZoom);
97970
97971                 var service = getService();
97972                 var selectedKey = service && service.getSelectedImageKey();
97973                 var sequences = (service ? service.sequences(projection) : []);
97974                 var images = (service && showMarkers ? service.images(projection) : []);
97975
97976                 images = filterImages(images);
97977                 sequences = filterSequences(sequences, service);
97978
97979                 var traces = layer.selectAll('.sequences').selectAll('.sequence')
97980                     .data(sequences, function(d) { return d.properties.key; });
97981
97982                 // exit
97983                 traces.exit()
97984                     .remove();
97985
97986                 // enter/update
97987                 traces = traces.enter()
97988                     .append('path')
97989                     .attr('class', 'sequence')
97990                     .merge(traces)
97991                     .attr('d', svgPath(projection).geojson);
97992
97993
97994                 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
97995                     .data(images, function(d) { return d.key; });
97996
97997                 // exit
97998                 groups.exit()
97999                     .remove();
98000
98001                 // enter
98002                 var groupsEnter = groups.enter()
98003                     .append('g')
98004                     .attr('class', 'viewfield-group')
98005                     .on('mouseenter', mouseover)
98006                     .on('mouseleave', mouseout)
98007                     .on('click', click);
98008
98009                 groupsEnter
98010                     .append('g')
98011                     .attr('class', 'viewfield-scale');
98012
98013                 // update
98014                 var markers = groups
98015                     .merge(groupsEnter)
98016                     .sort(function(a, b) {
98017                         return (a.key === selectedKey) ? 1
98018                             : (b.key === selectedKey) ? -1
98019                             : b.loc[1] - a.loc[1];  // sort Y
98020                     })
98021                     .attr('transform', transform)
98022                     .select('.viewfield-scale');
98023
98024
98025                 markers.selectAll('circle')
98026                     .data([0])
98027                     .enter()
98028                     .append('circle')
98029                     .attr('dx', '0')
98030                     .attr('dy', '0')
98031                     .attr('r', '6');
98032
98033                 var viewfields = markers.selectAll('.viewfield')
98034                     .data(showViewfields ? [0] : []);
98035
98036                 viewfields.exit()
98037                     .remove();
98038
98039                 viewfields.enter()               // viewfields may or may not be drawn...
98040                     .insert('path', 'circle')    // but if they are, draw below the circles
98041                     .attr('class', 'viewfield')
98042                     .classed('pano', function() { return this.parentNode.__data__.pano; })
98043                     .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
98044                     .attr('d', viewfieldPath);
98045
98046                 function viewfieldPath() {
98047                     var d = this.parentNode.__data__;
98048                     if (d.pano) {
98049                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
98050                     } else {
98051                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
98052                     }
98053                 }
98054             }
98055
98056
98057             function drawImages(selection) {
98058                 var enabled = svgMapillaryImages.enabled;
98059                 var service = getService();
98060
98061                 layer = selection.selectAll('.layer-mapillary')
98062                     .data(service ? [0] : []);
98063
98064                 layer.exit()
98065                     .remove();
98066
98067                 var layerEnter = layer.enter()
98068                     .append('g')
98069                     .attr('class', 'layer-mapillary')
98070                     .style('display', enabled ? 'block' : 'none');
98071
98072                 layerEnter
98073                     .append('g')
98074                     .attr('class', 'sequences');
98075
98076                 layerEnter
98077                     .append('g')
98078                     .attr('class', 'markers');
98079
98080                 layer = layerEnter
98081                     .merge(layer);
98082
98083                 if (enabled) {
98084                     if (service && ~~context.map().zoom() >= minZoom) {
98085                         editOn();
98086                         update();
98087                         service.loadImages(projection);
98088                     } else {
98089                         editOff();
98090                     }
98091                 }
98092             }
98093
98094
98095             drawImages.enabled = function(_) {
98096                 if (!arguments.length) { return svgMapillaryImages.enabled; }
98097                 svgMapillaryImages.enabled = _;
98098                 if (svgMapillaryImages.enabled) {
98099                     showLayer();
98100                 } else {
98101                     hideLayer();
98102                 }
98103                 dispatch.call('change');
98104                 return this;
98105             };
98106
98107
98108             drawImages.supported = function() {
98109                 return !!getService();
98110             };
98111
98112
98113             init();
98114             return drawImages;
98115         }
98116
98117         function svgMapillarySigns(projection, context, dispatch) {
98118             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
98119             var minZoom = 12;
98120             var layer = d3_select(null);
98121             var _mapillary;
98122
98123
98124             function init() {
98125                 if (svgMapillarySigns.initialized) { return; }  // run once
98126                 svgMapillarySigns.enabled = false;
98127                 svgMapillarySigns.initialized = true;
98128             }
98129
98130
98131             function getService() {
98132                 if (services$1.mapillary && !_mapillary) {
98133                     _mapillary = services$1.mapillary;
98134                     _mapillary.event.on('loadedSigns', throttledRedraw);
98135                 } else if (!services$1.mapillary && _mapillary) {
98136                     _mapillary = null;
98137                 }
98138                 return _mapillary;
98139             }
98140
98141
98142             function showLayer() {
98143                 var service = getService();
98144                 if (!service) { return; }
98145
98146                 editOn();
98147             }
98148
98149
98150             function hideLayer() {
98151                 throttledRedraw.cancel();
98152                 editOff();
98153             }
98154
98155
98156             function editOn() {
98157                 layer.style('display', 'block');
98158             }
98159
98160
98161             function editOff() {
98162                 layer.selectAll('.icon-sign').remove();
98163                 layer.style('display', 'none');
98164             }
98165
98166
98167             function click(d) {
98168                 var service = getService();
98169                 if (!service) { return; }
98170
98171                 context.map().centerEase(d.loc);
98172
98173                 var selectedImageKey = service.getSelectedImageKey();
98174                 var imageKey;
98175
98176                 // Pick one of the images the sign was detected in,
98177                 // preference given to an image already selected.
98178                 d.detections.forEach(function(detection) {
98179                     if (!imageKey || selectedImageKey === detection.image_key) {
98180                         imageKey = detection.image_key;
98181                     }
98182                 });
98183
98184                 service
98185                     .selectImage(imageKey)
98186                     .updateViewer(imageKey, context)
98187                     .showViewer();
98188             }
98189
98190
98191             function update() {
98192                 var service = getService();
98193                 var data = (service ? service.signs(projection) : []);
98194                 var selectedImageKey = service.getSelectedImageKey();
98195                 var transform = svgPointTransform(projection);
98196
98197                 var signs = layer.selectAll('.icon-sign')
98198                     .data(data, function(d) { return d.key; });
98199
98200                 // exit
98201                 signs.exit()
98202                     .remove();
98203
98204                 // enter
98205                 var enter = signs.enter()
98206                     .append('g')
98207                     .attr('class', 'icon-sign icon-detected')
98208                     .on('click', click);
98209
98210                 enter
98211                     .append('use')
98212                     .attr('width', '24px')
98213                     .attr('height', '24px')
98214                     .attr('x', '-12px')
98215                     .attr('y', '-12px')
98216                     .attr('xlink:href', function(d) { return '#' + d.value; });
98217
98218                 enter
98219                     .append('rect')
98220                     .attr('width', '24px')
98221                     .attr('height', '24px')
98222                     .attr('x', '-12px')
98223                     .attr('y', '-12px');
98224
98225                 // update
98226                 signs
98227                     .merge(enter)
98228                     .attr('transform', transform)
98229                     .classed('currentView', function(d) {
98230                         return d.detections.some(function(detection) {
98231                             return detection.image_key === selectedImageKey;
98232                         });
98233                     })
98234                     .sort(function(a, b) {
98235                         var aSelected = a.detections.some(function(detection) {
98236                             return detection.image_key === selectedImageKey;
98237                         });
98238                         var bSelected = b.detections.some(function(detection) {
98239                             return detection.image_key === selectedImageKey;
98240                         });
98241                         if (aSelected === bSelected) {
98242                             return b.loc[1] - a.loc[1]; // sort Y
98243                         } else if (aSelected) {
98244                             return 1;
98245                         }
98246                         return -1;
98247                     });
98248             }
98249
98250
98251             function drawSigns(selection) {
98252                 var enabled = svgMapillarySigns.enabled;
98253                 var service = getService();
98254
98255                 layer = selection.selectAll('.layer-mapillary-signs')
98256                     .data(service ? [0] : []);
98257
98258                 layer.exit()
98259                     .remove();
98260
98261                 layer = layer.enter()
98262                     .append('g')
98263                     .attr('class', 'layer-mapillary-signs layer-mapillary-detections')
98264                     .style('display', enabled ? 'block' : 'none')
98265                     .merge(layer);
98266
98267                 if (enabled) {
98268                     if (service && ~~context.map().zoom() >= minZoom) {
98269                         editOn();
98270                         update();
98271                         service.loadSigns(projection);
98272                     } else {
98273                         editOff();
98274                     }
98275                 }
98276             }
98277
98278
98279             drawSigns.enabled = function(_) {
98280                 if (!arguments.length) { return svgMapillarySigns.enabled; }
98281                 svgMapillarySigns.enabled = _;
98282                 if (svgMapillarySigns.enabled) {
98283                     showLayer();
98284                 } else {
98285                     hideLayer();
98286                 }
98287                 dispatch.call('change');
98288                 return this;
98289             };
98290
98291
98292             drawSigns.supported = function() {
98293                 return !!getService();
98294             };
98295
98296
98297             init();
98298             return drawSigns;
98299         }
98300
98301         function svgMapillaryMapFeatures(projection, context, dispatch) {
98302             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
98303             var minZoom = 12;
98304             var layer = d3_select(null);
98305             var _mapillary;
98306
98307
98308             function init() {
98309                 if (svgMapillaryMapFeatures.initialized) { return; }  // run once
98310                 svgMapillaryMapFeatures.enabled = false;
98311                 svgMapillaryMapFeatures.initialized = true;
98312             }
98313
98314
98315             function getService() {
98316                 if (services$1.mapillary && !_mapillary) {
98317                     _mapillary = services$1.mapillary;
98318                     _mapillary.event.on('loadedMapFeatures', throttledRedraw);
98319                 } else if (!services$1.mapillary && _mapillary) {
98320                     _mapillary = null;
98321                 }
98322                 return _mapillary;
98323             }
98324
98325
98326             function showLayer() {
98327                 var service = getService();
98328                 if (!service) { return; }
98329
98330                 editOn();
98331             }
98332
98333
98334             function hideLayer() {
98335                 throttledRedraw.cancel();
98336                 editOff();
98337             }
98338
98339
98340             function editOn() {
98341                 layer.style('display', 'block');
98342             }
98343
98344
98345             function editOff() {
98346                 layer.selectAll('.icon-map-feature').remove();
98347                 layer.style('display', 'none');
98348             }
98349
98350
98351             function click(d) {
98352                 var service = getService();
98353                 if (!service) { return; }
98354
98355                 context.map().centerEase(d.loc);
98356
98357                 var selectedImageKey = service.getSelectedImageKey();
98358                 var imageKey;
98359
98360                 // Pick one of the images the map feature was detected in,
98361                 // preference given to an image already selected.
98362                 d.detections.forEach(function(detection) {
98363                     if (!imageKey || selectedImageKey === detection.image_key) {
98364                         imageKey = detection.image_key;
98365                     }
98366                 });
98367
98368                 service
98369                     .selectImage(imageKey)
98370                     .updateViewer(imageKey, context)
98371                     .showViewer();
98372             }
98373
98374
98375             function update() {
98376                 var service = getService();
98377                 var data = (service ? service.mapFeatures(projection) : []);
98378                 var selectedImageKey = service && service.getSelectedImageKey();
98379                 var transform = svgPointTransform(projection);
98380
98381                 var mapFeatures = layer.selectAll('.icon-map-feature')
98382                     .data(data, function(d) { return d.key; });
98383
98384                 // exit
98385                 mapFeatures.exit()
98386                     .remove();
98387
98388                 // enter
98389                 var enter = mapFeatures.enter()
98390                     .append('g')
98391                     .attr('class', 'icon-map-feature icon-detected')
98392                     .on('click', click);
98393
98394                 enter
98395                     .append('title')
98396                     .text(function(d) {
98397                         var id = d.value.replace(/--/g, '.').replace(/-/g, '_');
98398                         return t('mapillary_map_features.' + id);
98399                     });
98400
98401                 enter
98402                     .append('use')
98403                     .attr('width', '24px')
98404                     .attr('height', '24px')
98405                     .attr('x', '-12px')
98406                     .attr('y', '-12px')
98407                     .attr('xlink:href', function(d) {
98408                         if (d.value === 'object--billboard') {
98409                             // no billboard icon right now, so use the advertisement icon
98410                             return '#object--sign--advertisement';
98411                         }
98412                         return '#' + d.value;
98413                     });
98414
98415                 enter
98416                     .append('rect')
98417                     .attr('width', '24px')
98418                     .attr('height', '24px')
98419                     .attr('x', '-12px')
98420                     .attr('y', '-12px');
98421
98422                 // update
98423                 mapFeatures
98424                     .merge(enter)
98425                     .attr('transform', transform)
98426                     .classed('currentView', function(d) {
98427                         return d.detections.some(function(detection) {
98428                             return detection.image_key === selectedImageKey;
98429                         });
98430                     })
98431                     .sort(function(a, b) {
98432                         var aSelected = a.detections.some(function(detection) {
98433                             return detection.image_key === selectedImageKey;
98434                         });
98435                         var bSelected = b.detections.some(function(detection) {
98436                             return detection.image_key === selectedImageKey;
98437                         });
98438                         if (aSelected === bSelected) {
98439                             return b.loc[1] - a.loc[1]; // sort Y
98440                         } else if (aSelected) {
98441                             return 1;
98442                         }
98443                         return -1;
98444                     });
98445             }
98446
98447
98448             function drawMapFeatures(selection) {
98449                 var enabled = svgMapillaryMapFeatures.enabled;
98450                 var service = getService();
98451
98452                 layer = selection.selectAll('.layer-mapillary-map-features')
98453                     .data(service ? [0] : []);
98454
98455                 layer.exit()
98456                     .remove();
98457
98458                 layer = layer.enter()
98459                     .append('g')
98460                     .attr('class', 'layer-mapillary-map-features layer-mapillary-detections')
98461                     .style('display', enabled ? 'block' : 'none')
98462                     .merge(layer);
98463
98464                 if (enabled) {
98465                     if (service && ~~context.map().zoom() >= minZoom) {
98466                         editOn();
98467                         update();
98468                         service.loadMapFeatures(projection);
98469                     } else {
98470                         editOff();
98471                     }
98472                 }
98473             }
98474
98475
98476             drawMapFeatures.enabled = function(_) {
98477                 if (!arguments.length) { return svgMapillaryMapFeatures.enabled; }
98478                 svgMapillaryMapFeatures.enabled = _;
98479                 if (svgMapillaryMapFeatures.enabled) {
98480                     showLayer();
98481                 } else {
98482                     hideLayer();
98483                 }
98484                 dispatch.call('change');
98485                 return this;
98486             };
98487
98488
98489             drawMapFeatures.supported = function() {
98490                 return !!getService();
98491             };
98492
98493
98494             init();
98495             return drawMapFeatures;
98496         }
98497
98498         function svgOpenstreetcamImages(projection, context, dispatch) {
98499             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
98500             var minZoom = 12;
98501             var minMarkerZoom = 16;
98502             var minViewfieldZoom = 18;
98503             var layer = d3_select(null);
98504             var _openstreetcam;
98505
98506
98507             function init() {
98508                 if (svgOpenstreetcamImages.initialized) { return; }  // run once
98509                 svgOpenstreetcamImages.enabled = false;
98510                 svgOpenstreetcamImages.initialized = true;
98511             }
98512
98513
98514             function getService() {
98515                 if (services$1.openstreetcam && !_openstreetcam) {
98516                     _openstreetcam = services$1.openstreetcam;
98517                     _openstreetcam.event.on('loadedImages', throttledRedraw);
98518                 } else if (!services$1.openstreetcam && _openstreetcam) {
98519                     _openstreetcam = null;
98520                 }
98521
98522                 return _openstreetcam;
98523             }
98524
98525
98526             function showLayer() {
98527                 var service = getService();
98528                 if (!service) { return; }
98529
98530                 editOn();
98531
98532                 layer
98533                     .style('opacity', 0)
98534                     .transition()
98535                     .duration(250)
98536                     .style('opacity', 1)
98537                     .on('end', function () { dispatch.call('change'); });
98538             }
98539
98540
98541             function hideLayer() {
98542                 throttledRedraw.cancel();
98543
98544                 layer
98545                     .transition()
98546                     .duration(250)
98547                     .style('opacity', 0)
98548                     .on('end', editOff);
98549             }
98550
98551
98552             function editOn() {
98553                 layer.style('display', 'block');
98554             }
98555
98556
98557             function editOff() {
98558                 layer.selectAll('.viewfield-group').remove();
98559                 layer.style('display', 'none');
98560             }
98561
98562
98563             function click(d) {
98564                 var service = getService();
98565                 if (!service) { return; }
98566
98567                 service
98568                     .selectImage(d)
98569                     .updateViewer(d)
98570                     .showViewer();
98571
98572                 context.map().centerEase(d.loc);
98573             }
98574
98575
98576             function mouseover(d) {
98577                 var service = getService();
98578                 if (service) { service.setStyles(d); }
98579             }
98580
98581
98582             function mouseout() {
98583                 var service = getService();
98584                 if (service) { service.setStyles(null); }
98585             }
98586
98587
98588             function transform(d) {
98589                 var t = svgPointTransform(projection)(d);
98590                 if (d.ca) {
98591                     t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
98592                 }
98593                 return t;
98594             }
98595
98596
98597             context.photos().on('change.openstreetcam_images', update);
98598
98599             function update() {
98600                 var viewer = d3_select('#photoviewer');
98601                 var selected = viewer.empty() ? undefined : viewer.datum();
98602
98603                 var z = ~~context.map().zoom();
98604                 var showMarkers = (z >= minMarkerZoom);
98605                 var showViewfields = (z >= minViewfieldZoom);
98606
98607                 var service = getService();
98608                 var sequences = [];
98609                 var images = [];
98610
98611                 if (context.photos().showsFlat()) {
98612                     sequences = (service ? service.sequences(projection) : []);
98613                     images = (service && showMarkers ? service.images(projection) : []);
98614                 }
98615
98616                 var traces = layer.selectAll('.sequences').selectAll('.sequence')
98617                     .data(sequences, function(d) { return d.properties.key; });
98618
98619                 // exit
98620                 traces.exit()
98621                     .remove();
98622
98623                 // enter/update
98624                 traces = traces.enter()
98625                     .append('path')
98626                     .attr('class', 'sequence')
98627                     .merge(traces)
98628                     .attr('d', svgPath(projection).geojson);
98629
98630
98631                 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
98632                     .data(images, function(d) { return d.key; });
98633
98634                 // exit
98635                 groups.exit()
98636                     .remove();
98637
98638                 // enter
98639                 var groupsEnter = groups.enter()
98640                     .append('g')
98641                     .attr('class', 'viewfield-group')
98642                     .on('mouseenter', mouseover)
98643                     .on('mouseleave', mouseout)
98644                     .on('click', click);
98645
98646                 groupsEnter
98647                     .append('g')
98648                     .attr('class', 'viewfield-scale');
98649
98650                 // update
98651                 var markers = groups
98652                     .merge(groupsEnter)
98653                     .sort(function(a, b) {
98654                         return (a === selected) ? 1
98655                             : (b === selected) ? -1
98656                             : b.loc[1] - a.loc[1];  // sort Y
98657                     })
98658                     .attr('transform', transform)
98659                     .select('.viewfield-scale');
98660
98661
98662                 markers.selectAll('circle')
98663                     .data([0])
98664                     .enter()
98665                     .append('circle')
98666                     .attr('dx', '0')
98667                     .attr('dy', '0')
98668                     .attr('r', '6');
98669
98670                 var viewfields = markers.selectAll('.viewfield')
98671                     .data(showViewfields ? [0] : []);
98672
98673                 viewfields.exit()
98674                     .remove();
98675
98676                 viewfields.enter()               // viewfields may or may not be drawn...
98677                     .insert('path', 'circle')    // but if they are, draw below the circles
98678                     .attr('class', 'viewfield')
98679                     .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
98680                     .attr('d', 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z');
98681             }
98682
98683
98684             function drawImages(selection) {
98685                 var enabled = svgOpenstreetcamImages.enabled,
98686                     service = getService();
98687
98688                 layer = selection.selectAll('.layer-openstreetcam')
98689                     .data(service ? [0] : []);
98690
98691                 layer.exit()
98692                     .remove();
98693
98694                 var layerEnter = layer.enter()
98695                     .append('g')
98696                     .attr('class', 'layer-openstreetcam')
98697                     .style('display', enabled ? 'block' : 'none');
98698
98699                 layerEnter
98700                     .append('g')
98701                     .attr('class', 'sequences');
98702
98703                 layerEnter
98704                     .append('g')
98705                     .attr('class', 'markers');
98706
98707                 layer = layerEnter
98708                     .merge(layer);
98709
98710                 if (enabled) {
98711                     if (service && ~~context.map().zoom() >= minZoom) {
98712                         editOn();
98713                         update();
98714                         service.loadImages(projection);
98715                     } else {
98716                         editOff();
98717                     }
98718                 }
98719             }
98720
98721
98722             drawImages.enabled = function(_) {
98723                 if (!arguments.length) { return svgOpenstreetcamImages.enabled; }
98724                 svgOpenstreetcamImages.enabled = _;
98725                 if (svgOpenstreetcamImages.enabled) {
98726                     showLayer();
98727                 } else {
98728                     hideLayer();
98729                 }
98730                 dispatch.call('change');
98731                 return this;
98732             };
98733
98734
98735             drawImages.supported = function() {
98736                 return !!getService();
98737             };
98738
98739
98740             init();
98741             return drawImages;
98742         }
98743
98744         function svgOsm(projection, context, dispatch) {
98745             var enabled = true;
98746
98747
98748             function drawOsm(selection) {
98749                 selection.selectAll('.layer-osm')
98750                     .data(['covered', 'areas', 'lines', 'points', 'labels'])
98751                     .enter()
98752                     .append('g')
98753                     .attr('class', function(d) { return 'layer-osm ' + d; });
98754
98755                 selection.selectAll('.layer-osm.points').selectAll('.points-group')
98756                     .data(['points', 'midpoints', 'vertices', 'turns'])
98757                     .enter()
98758                     .append('g')
98759                     .attr('class', function(d) { return 'points-group ' + d; });
98760             }
98761
98762
98763             function showLayer() {
98764                 var layer = context.surface().selectAll('.data-layer.osm');
98765                 layer.interrupt();
98766
98767                 layer
98768                     .classed('disabled', false)
98769                     .style('opacity', 0)
98770                     .transition()
98771                     .duration(250)
98772                     .style('opacity', 1)
98773                     .on('end interrupt', function () {
98774                         dispatch.call('change');
98775                     });
98776             }
98777
98778
98779             function hideLayer() {
98780                 var layer = context.surface().selectAll('.data-layer.osm');
98781                 layer.interrupt();
98782
98783                 layer
98784                     .transition()
98785                     .duration(250)
98786                     .style('opacity', 0)
98787                     .on('end interrupt', function () {
98788                         layer.classed('disabled', true);
98789                         dispatch.call('change');
98790                     });
98791             }
98792
98793
98794             drawOsm.enabled = function(val) {
98795                 if (!arguments.length) { return enabled; }
98796                 enabled = val;
98797
98798                 if (enabled) {
98799                     showLayer();
98800                 } else {
98801                     hideLayer();
98802                 }
98803
98804                 dispatch.call('change');
98805                 return this;
98806             };
98807
98808
98809             return drawOsm;
98810         }
98811
98812         var _notesEnabled = false;
98813         var _osmService;
98814
98815
98816         function svgNotes(projection, context, dispatch$1) {
98817             if (!dispatch$1) { dispatch$1 = dispatch('change'); }
98818             var throttledRedraw = throttle(function () { dispatch$1.call('change'); }, 1000);
98819             var minZoom = 12;
98820             var touchLayer = d3_select(null);
98821             var drawLayer = d3_select(null);
98822             var _notesVisible = false;
98823
98824
98825             function markerPath(selection, klass) {
98826                 selection
98827                     .attr('class', klass)
98828                     .attr('transform', 'translate(-8, -22)')
98829                     .attr('d', 'm17.5,0l-15,0c-1.37,0 -2.5,1.12 -2.5,2.5l0,11.25c0,1.37 1.12,2.5 2.5,2.5l3.75,0l0,3.28c0,0.38 0.43,0.6 0.75,0.37l4.87,-3.65l5.62,0c1.37,0 2.5,-1.12 2.5,-2.5l0,-11.25c0,-1.37 -1.12,-2.5 -2.5,-2.5z');
98830             }
98831
98832
98833             // Loosely-coupled osm service for fetching notes.
98834             function getService() {
98835                 if (services$1.osm && !_osmService) {
98836                     _osmService = services$1.osm;
98837                     _osmService.on('loadedNotes', throttledRedraw);
98838                 } else if (!services$1.osm && _osmService) {
98839                     _osmService = null;
98840                 }
98841
98842                 return _osmService;
98843             }
98844
98845
98846             // Show the notes
98847             function editOn() {
98848                 if (!_notesVisible) {
98849                     _notesVisible = true;
98850                     drawLayer
98851                         .style('display', 'block');
98852                 }
98853             }
98854
98855
98856             // Immediately remove the notes and their touch targets
98857             function editOff() {
98858                 if (_notesVisible) {
98859                     _notesVisible = false;
98860                     drawLayer
98861                         .style('display', 'none');
98862                     drawLayer.selectAll('.note')
98863                         .remove();
98864                     touchLayer.selectAll('.note')
98865                         .remove();
98866                 }
98867             }
98868
98869
98870             // Enable the layer.  This shows the notes and transitions them to visible.
98871             function layerOn() {
98872                 editOn();
98873
98874                 drawLayer
98875                     .style('opacity', 0)
98876                     .transition()
98877                     .duration(250)
98878                     .style('opacity', 1)
98879                     .on('end interrupt', function () {
98880                         dispatch$1.call('change');
98881                     });
98882             }
98883
98884
98885             // Disable the layer.  This transitions the layer invisible and then hides the notes.
98886             function layerOff() {
98887                 throttledRedraw.cancel();
98888                 drawLayer.interrupt();
98889                 touchLayer.selectAll('.note')
98890                     .remove();
98891
98892                 drawLayer
98893                     .transition()
98894                     .duration(250)
98895                     .style('opacity', 0)
98896                     .on('end interrupt', function () {
98897                         editOff();
98898                         dispatch$1.call('change');
98899                     });
98900             }
98901
98902
98903             // Update the note markers
98904             function updateMarkers() {
98905                 if (!_notesVisible || !_notesEnabled) { return; }
98906
98907                 var service = getService();
98908                 var selectedID = context.selectedNoteID();
98909                 var data = (service ? service.notes(projection) : []);
98910                 var getTransform = svgPointTransform(projection);
98911
98912                 // Draw markers..
98913                 var notes = drawLayer.selectAll('.note')
98914                     .data(data, function(d) { return d.status + d.id; });
98915
98916                 // exit
98917                 notes.exit()
98918                     .remove();
98919
98920                 // enter
98921                 var notesEnter = notes.enter()
98922                     .append('g')
98923                     .attr('class', function(d) { return 'note note-' + d.id + ' ' + d.status; })
98924                     .classed('new', function(d) { return d.id < 0; });
98925
98926                 notesEnter
98927                     .append('ellipse')
98928                     .attr('cx', 0.5)
98929                     .attr('cy', 1)
98930                     .attr('rx', 6.5)
98931                     .attr('ry', 3)
98932                     .attr('class', 'stroke');
98933
98934                 notesEnter
98935                     .append('path')
98936                     .call(markerPath, 'shadow');
98937
98938                 notesEnter
98939                     .append('use')
98940                     .attr('class', 'note-fill')
98941                     .attr('width', '20px')
98942                     .attr('height', '20px')
98943                     .attr('x', '-8px')
98944                     .attr('y', '-22px')
98945                     .attr('xlink:href', '#iD-icon-note');
98946
98947                 notesEnter.selectAll('.icon-annotation')
98948                     .data(function(d) { return [d]; })
98949                     .enter()
98950                     .append('use')
98951                     .attr('class', 'icon-annotation')
98952                     .attr('width', '10px')
98953                     .attr('height', '10px')
98954                     .attr('x', '-3px')
98955                     .attr('y', '-19px')
98956                     .attr('xlink:href', function(d) {
98957                         return '#iD-icon-' + (d.id < 0 ? 'plus' : (d.status === 'open' ? 'close' : 'apply'));
98958                     });
98959
98960                 // update
98961                 notes
98962                     .merge(notesEnter)
98963                     .sort(sortY)
98964                     .classed('selected', function(d) {
98965                         var mode = context.mode();
98966                         var isMoving = mode && mode.id === 'drag-note';  // no shadows when dragging
98967                         return !isMoving && d.id === selectedID;
98968                     })
98969                     .attr('transform', getTransform);
98970
98971
98972                 // Draw targets..
98973                 if (touchLayer.empty()) { return; }
98974                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
98975
98976                 var targets = touchLayer.selectAll('.note')
98977                     .data(data, function(d) { return d.id; });
98978
98979                 // exit
98980                 targets.exit()
98981                     .remove();
98982
98983                 // enter/update
98984                 targets.enter()
98985                     .append('rect')
98986                     .attr('width', '20px')
98987                     .attr('height', '20px')
98988                     .attr('x', '-8px')
98989                     .attr('y', '-22px')
98990                     .merge(targets)
98991                     .sort(sortY)
98992                     .attr('class', function(d) {
98993                         var newClass = (d.id < 0 ? 'new' : '');
98994                         return 'note target note-' + d.id + ' ' + fillClass + newClass;
98995                     })
98996                     .attr('transform', getTransform);
98997
98998
98999                 function sortY(a, b) {
99000                     return (a.id === selectedID) ? 1 : (b.id === selectedID) ? -1 : b.loc[1] - a.loc[1];
99001                 }
99002             }
99003
99004
99005             // Draw the notes layer and schedule loading notes and updating markers.
99006             function drawNotes(selection) {
99007                 var service = getService();
99008
99009                 var surface = context.surface();
99010                 if (surface && !surface.empty()) {
99011                     touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
99012                 }
99013
99014                 drawLayer = selection.selectAll('.layer-notes')
99015                     .data(service ? [0] : []);
99016
99017                 drawLayer.exit()
99018                     .remove();
99019
99020                 drawLayer = drawLayer.enter()
99021                     .append('g')
99022                     .attr('class', 'layer-notes')
99023                     .style('display', _notesEnabled ? 'block' : 'none')
99024                     .merge(drawLayer);
99025
99026                 if (_notesEnabled) {
99027                     if (service && ~~context.map().zoom() >= minZoom) {
99028                         editOn();
99029                         service.loadNotes(projection);
99030                         updateMarkers();
99031                     } else {
99032                         editOff();
99033                     }
99034                 }
99035             }
99036
99037
99038             // Toggles the layer on and off
99039             drawNotes.enabled = function(val) {
99040                 if (!arguments.length) { return _notesEnabled; }
99041
99042                 _notesEnabled = val;
99043                 if (_notesEnabled) {
99044                     layerOn();
99045                 } else {
99046                     layerOff();
99047                     if (context.selectedNoteID()) {
99048                         context.enter(modeBrowse(context));
99049                     }
99050                 }
99051
99052                 dispatch$1.call('change');
99053                 return this;
99054             };
99055
99056
99057             return drawNotes;
99058         }
99059
99060         function svgTouch() {
99061
99062             function drawTouch(selection) {
99063                 selection.selectAll('.layer-touch')
99064                     .data(['areas', 'lines', 'points', 'turns', 'markers'])
99065                     .enter()
99066                     .append('g')
99067                     .attr('class', function(d) { return 'layer-touch ' + d; });
99068             }
99069
99070             return drawTouch;
99071         }
99072
99073         function svgLayers(projection, context) {
99074             var dispatch$1 = dispatch('change');
99075             var svg = d3_select(null);
99076             var _layers = [
99077                 { id: 'osm', layer: svgOsm(projection, context, dispatch$1) },
99078                 { id: 'notes', layer: svgNotes(projection, context, dispatch$1) },
99079                 { id: 'data', layer: svgData(projection, context, dispatch$1) },
99080                 { id: 'keepRight', layer: svgKeepRight(projection, context, dispatch$1) },
99081                 { id: 'improveOSM', layer: svgImproveOSM(projection, context, dispatch$1) },
99082                 { id: 'streetside', layer: svgStreetside(projection, context, dispatch$1)},
99083                 { id: 'mapillary', layer: svgMapillaryImages(projection, context, dispatch$1) },
99084                 { id: 'mapillary-map-features',  layer: svgMapillaryMapFeatures(projection, context, dispatch$1) },
99085                 { id: 'mapillary-signs',  layer: svgMapillarySigns(projection, context, dispatch$1) },
99086                 { id: 'openstreetcam', layer: svgOpenstreetcamImages(projection, context, dispatch$1) },
99087                 { id: 'debug', layer: svgDebug(projection, context) },
99088                 { id: 'geolocate', layer: svgGeolocate(projection) },
99089                 { id: 'touch', layer: svgTouch() }
99090             ];
99091
99092
99093             function drawLayers(selection) {
99094                 svg = selection.selectAll('.surface')
99095                     .data([0]);
99096
99097                 svg = svg.enter()
99098                     .append('svg')
99099                     .attr('class', 'surface')
99100                     .merge(svg);
99101
99102                 var defs = svg.selectAll('.surface-defs')
99103                     .data([0]);
99104
99105                 defs.enter()
99106                     .append('defs')
99107                     .attr('class', 'surface-defs');
99108
99109                 var groups = svg.selectAll('.data-layer')
99110                     .data(_layers);
99111
99112                 groups.exit()
99113                     .remove();
99114
99115                 groups.enter()
99116                     .append('g')
99117                     .attr('class', function(d) { return 'data-layer ' + d.id; })
99118                     .merge(groups)
99119                     .each(function(d) { d3_select(this).call(d.layer); });
99120             }
99121
99122
99123             drawLayers.all = function() {
99124                 return _layers;
99125             };
99126
99127
99128             drawLayers.layer = function(id) {
99129                 var obj = _layers.find(function(o) { return o.id === id; });
99130                 return obj && obj.layer;
99131             };
99132
99133
99134             drawLayers.only = function(what) {
99135                 var arr = [].concat(what);
99136                 var all = _layers.map(function(layer) { return layer.id; });
99137                 return drawLayers.remove(utilArrayDifference(all, arr));
99138             };
99139
99140
99141             drawLayers.remove = function(what) {
99142                 var arr = [].concat(what);
99143                 arr.forEach(function(id) {
99144                     _layers = _layers.filter(function(o) { return o.id !== id; });
99145                 });
99146                 dispatch$1.call('change');
99147                 return this;
99148             };
99149
99150
99151             drawLayers.add = function(what) {
99152                 var arr = [].concat(what);
99153                 arr.forEach(function(obj) {
99154                     if ('id' in obj && 'layer' in obj) {
99155                         _layers.push(obj);
99156                     }
99157                 });
99158                 dispatch$1.call('change');
99159                 return this;
99160             };
99161
99162
99163             drawLayers.dimensions = function(val) {
99164                 if (!arguments.length) { return utilGetDimensions(svg); }
99165                 utilSetDimensions(svg, val);
99166                 return this;
99167             };
99168
99169
99170             return utilRebind(drawLayers, dispatch$1, 'on');
99171         }
99172
99173         function svgLines(projection, context) {
99174             var detected = utilDetect();
99175
99176             var highway_stack = {
99177                 motorway: 0,
99178                 motorway_link: 1,
99179                 trunk: 2,
99180                 trunk_link: 3,
99181                 primary: 4,
99182                 primary_link: 5,
99183                 secondary: 6,
99184                 tertiary: 7,
99185                 unclassified: 8,
99186                 residential: 9,
99187                 service: 10,
99188                 footway: 11
99189             };
99190
99191
99192             function drawTargets(selection, graph, entities, filter) {
99193                 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
99194                 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
99195                 var getPath = svgPath(projection).geojson;
99196                 var activeID = context.activeID();
99197                 var base = context.history().base();
99198
99199                 // The targets and nopes will be MultiLineString sub-segments of the ways
99200                 var data = { targets: [], nopes: [] };
99201
99202                 entities.forEach(function(way) {
99203                     var features = svgSegmentWay(way, graph, activeID);
99204                     data.targets.push.apply(data.targets, features.passive);
99205                     data.nopes.push.apply(data.nopes, features.active);
99206                 });
99207
99208
99209                 // Targets allow hover and vertex snapping
99210                 var targetData = data.targets.filter(getPath);
99211                 var targets = selection.selectAll('.line.target-allowed')
99212                     .filter(function(d) { return filter(d.properties.entity); })
99213                     .data(targetData, function key(d) { return d.id; });
99214
99215                 // exit
99216                 targets.exit()
99217                     .remove();
99218
99219                 var segmentWasEdited = function(d) {
99220                     var wayID = d.properties.entity.id;
99221                     // if the whole line was edited, don't draw segment changes
99222                     if (!base.entities[wayID] ||
99223                         !fastDeepEqual(graph.entities[wayID].nodes, base.entities[wayID].nodes)) {
99224                         return false;
99225                     }
99226                     return d.properties.nodes.some(function(n) {
99227                         return !base.entities[n.id] ||
99228                                !fastDeepEqual(graph.entities[n.id].loc, base.entities[n.id].loc);
99229                     });
99230                 };
99231
99232                 // enter/update
99233                 targets.enter()
99234                     .append('path')
99235                     .merge(targets)
99236                     .attr('d', getPath)
99237                     .attr('class', function(d) {
99238                         return 'way line target target-allowed ' + targetClass + d.id;
99239                     })
99240                     .classed('segment-edited', segmentWasEdited);
99241
99242                 // NOPE
99243                 var nopeData = data.nopes.filter(getPath);
99244                 var nopes = selection.selectAll('.line.target-nope')
99245                     .filter(function(d) { return filter(d.properties.entity); })
99246                     .data(nopeData, function key(d) { return d.id; });
99247
99248                 // exit
99249                 nopes.exit()
99250                     .remove();
99251
99252                 // enter/update
99253                 nopes.enter()
99254                     .append('path')
99255                     .merge(nopes)
99256                     .attr('d', getPath)
99257                     .attr('class', function(d) {
99258                         return 'way line target target-nope ' + nopeClass + d.id;
99259                     })
99260                     .classed('segment-edited', segmentWasEdited);
99261             }
99262
99263
99264             function drawLines(selection, graph, entities, filter) {
99265                 var base = context.history().base();
99266
99267                 function waystack(a, b) {
99268                     var selected = context.selectedIDs();
99269                     var scoreA = selected.indexOf(a.id) !== -1 ? 20 : 0;
99270                     var scoreB = selected.indexOf(b.id) !== -1 ? 20 : 0;
99271
99272                     if (a.tags.highway) { scoreA -= highway_stack[a.tags.highway]; }
99273                     if (b.tags.highway) { scoreB -= highway_stack[b.tags.highway]; }
99274                     return scoreA - scoreB;
99275                 }
99276
99277
99278                 function drawLineGroup(selection, klass, isSelected) {
99279                     // Note: Don't add `.selected` class in draw modes
99280                     var mode = context.mode();
99281                     var isDrawing = mode && /^draw/.test(mode.id);
99282                     var selectedClass = (!isDrawing && isSelected) ? 'selected ' : '';
99283
99284                     var lines = selection
99285                         .selectAll('path')
99286                         .filter(filter)
99287                         .data(getPathData(isSelected), osmEntity.key);
99288
99289                     lines.exit()
99290                         .remove();
99291
99292                     // Optimization: Call expensive TagClasses only on enter selection. This
99293                     // works because osmEntity.key is defined to include the entity v attribute.
99294                     lines.enter()
99295                         .append('path')
99296                         .attr('class', function(d) {
99297
99298                             var prefix = 'way line';
99299
99300                             // if this line isn't styled by its own tags
99301                             if (!d.hasInterestingTags()) {
99302
99303                                 var parentRelations = graph.parentRelations(d);
99304                                 var parentMultipolygons = parentRelations.filter(function(relation) {
99305                                     return relation.isMultipolygon();
99306                                 });
99307
99308                                 // and if it's a member of at least one multipolygon relation
99309                                 if (parentMultipolygons.length > 0 &&
99310                                     // and only multipolygon relations
99311                                     parentRelations.length === parentMultipolygons.length) {
99312                                     // then fudge the classes to style this as an area edge
99313                                     prefix = 'relation area';
99314                                 }
99315                             }
99316
99317                             var oldMPClass = oldMultiPolygonOuters[d.id] ? 'old-multipolygon ' : '';
99318                             return prefix + ' ' + klass + ' ' + selectedClass + oldMPClass + d.id;
99319                         })
99320                         .classed('added', function(d) {
99321                             return !base.entities[d.id];
99322                         })
99323                         .classed('geometry-edited', function(d) {
99324                             return graph.entities[d.id] &&
99325                                 base.entities[d.id] &&
99326                                 !fastDeepEqual(graph.entities[d.id].nodes, base.entities[d.id].nodes);
99327                         })
99328                         .classed('retagged', function(d) {
99329                             return graph.entities[d.id] &&
99330                                 base.entities[d.id] &&
99331                                 !fastDeepEqual(graph.entities[d.id].tags, base.entities[d.id].tags);
99332                         })
99333                         .call(svgTagClasses())
99334                         .merge(lines)
99335                         .sort(waystack)
99336                         .attr('d', getPath)
99337                         .call(svgTagClasses().tags(svgRelationMemberTags(graph)));
99338
99339                     return selection;
99340                 }
99341
99342
99343                 function getPathData(isSelected) {
99344                     return function() {
99345                         var layer = this.parentNode.__data__;
99346                         var data = pathdata[layer] || [];
99347                         return data.filter(function(d) {
99348                             if (isSelected)
99349                                 { return context.selectedIDs().indexOf(d.id) !== -1; }
99350                             else
99351                                 { return context.selectedIDs().indexOf(d.id) === -1; }
99352                         });
99353                     };
99354                 }
99355
99356                 function addMarkers(layergroup, pathclass, groupclass, groupdata, marker) {
99357                     var markergroup = layergroup
99358                         .selectAll('g.' + groupclass)
99359                         .data([pathclass]);
99360
99361                     markergroup = markergroup.enter()
99362                         .append('g')
99363                         .attr('class', groupclass)
99364                         .merge(markergroup);
99365
99366                     var markers = markergroup
99367                         .selectAll('path')
99368                         .filter(filter)
99369                         .data(
99370                             function data() { return groupdata[this.parentNode.__data__] || []; },
99371                             function key(d) { return [d.id, d.index]; }
99372                         );
99373
99374                     markers.exit()
99375                         .remove();
99376
99377                     markers = markers.enter()
99378                         .append('path')
99379                         .attr('class', pathclass)
99380                         .merge(markers)
99381                         .attr('marker-mid', marker)
99382                         .attr('d', function(d) { return d.d; });
99383
99384                     if (detected.ie) {
99385                         markers.each(function() { this.parentNode.insertBefore(this, this); });
99386                     }
99387                 }
99388
99389
99390                 var getPath = svgPath(projection, graph);
99391                 var ways = [];
99392                 var onewaydata = {};
99393                 var sideddata = {};
99394                 var oldMultiPolygonOuters = {};
99395
99396                 for (var i = 0; i < entities.length; i++) {
99397                     var entity = entities[i];
99398                     var outer = osmOldMultipolygonOuterMember(entity, graph);
99399                     if (outer) {
99400                         ways.push(entity.mergeTags(outer.tags));
99401                         oldMultiPolygonOuters[outer.id] = true;
99402                     } else if (entity.geometry(graph) === 'line') {
99403                         ways.push(entity);
99404                     }
99405                 }
99406
99407                 ways = ways.filter(getPath);
99408                 var pathdata = utilArrayGroupBy(ways, function(way) { return way.layer(); });
99409
99410                 Object.keys(pathdata).forEach(function(k) {
99411                     var v = pathdata[k];
99412                     var onewayArr = v.filter(function(d) { return d.isOneWay(); });
99413                     var onewaySegments = svgMarkerSegments(
99414                         projection, graph, 35,
99415                         function shouldReverse(entity) { return entity.tags.oneway === '-1'; },
99416                         function bothDirections(entity) {
99417                             return entity.tags.oneway === 'reversible' || entity.tags.oneway === 'alternating';
99418                         }
99419                     );
99420                     onewaydata[k] = utilArrayFlatten(onewayArr.map(onewaySegments));
99421
99422                     var sidedArr = v.filter(function(d) { return d.isSided(); });
99423                     var sidedSegments = svgMarkerSegments(
99424                         projection, graph, 30,
99425                         function shouldReverse() { return false; },
99426                         function bothDirections() { return false; }
99427                     );
99428                     sideddata[k] = utilArrayFlatten(sidedArr.map(sidedSegments));
99429                 });
99430
99431
99432                 var covered = selection.selectAll('.layer-osm.covered');     // under areas
99433                 var uncovered = selection.selectAll('.layer-osm.lines');     // over areas
99434                 var touchLayer = selection.selectAll('.layer-touch.lines');
99435
99436                 // Draw lines..
99437                 [covered, uncovered].forEach(function(selection) {
99438                     var range = (selection === covered ? d3_range(-10,0) : d3_range(0,11));
99439                     var layergroup = selection
99440                         .selectAll('g.layergroup')
99441                         .data(range);
99442
99443                     layergroup = layergroup.enter()
99444                         .append('g')
99445                         .attr('class', function(d) { return 'layergroup layer' + String(d); })
99446                         .merge(layergroup);
99447
99448                     layergroup
99449                         .selectAll('g.linegroup')
99450                         .data(['shadow', 'casing', 'stroke', 'shadow-highlighted', 'casing-highlighted', 'stroke-highlighted'])
99451                         .enter()
99452                         .append('g')
99453                         .attr('class', function(d) { return 'linegroup line-' + d; });
99454
99455                     layergroup.selectAll('g.line-shadow')
99456                         .call(drawLineGroup, 'shadow', false);
99457                     layergroup.selectAll('g.line-casing')
99458                         .call(drawLineGroup, 'casing', false);
99459                     layergroup.selectAll('g.line-stroke')
99460                         .call(drawLineGroup, 'stroke', false);
99461
99462                     layergroup.selectAll('g.line-shadow-highlighted')
99463                         .call(drawLineGroup, 'shadow', true);
99464                     layergroup.selectAll('g.line-casing-highlighted')
99465                         .call(drawLineGroup, 'casing', true);
99466                     layergroup.selectAll('g.line-stroke-highlighted')
99467                         .call(drawLineGroup, 'stroke', true);
99468
99469                     addMarkers(layergroup, 'oneway', 'onewaygroup', onewaydata, 'url(#oneway-marker)');
99470                     addMarkers(layergroup, 'sided', 'sidedgroup', sideddata,
99471                         function marker(d) {
99472                             var category = graph.entity(d.id).sidednessIdentifier();
99473                             return 'url(#sided-marker-' + category + ')';
99474                         }
99475                     );
99476                 });
99477
99478                 // Draw touch targets..
99479                 touchLayer
99480                     .call(drawTargets, graph, ways, filter);
99481             }
99482
99483
99484             return drawLines;
99485         }
99486
99487         function svgMidpoints(projection, context) {
99488             var targetRadius = 8;
99489
99490             function drawTargets(selection, graph, entities, filter) {
99491                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
99492                 var getTransform = svgPointTransform(projection).geojson;
99493
99494                 var data = entities.map(function(midpoint) {
99495                     return {
99496                         type: 'Feature',
99497                         id: midpoint.id,
99498                         properties: {
99499                             target: true,
99500                             entity: midpoint
99501                         },
99502                         geometry: {
99503                             type: 'Point',
99504                             coordinates: midpoint.loc
99505                         }
99506                     };
99507                 });
99508
99509                 var targets = selection.selectAll('.midpoint.target')
99510                     .filter(function(d) { return filter(d.properties.entity); })
99511                     .data(data, function key(d) { return d.id; });
99512
99513                 // exit
99514                 targets.exit()
99515                     .remove();
99516
99517                 // enter/update
99518                 targets.enter()
99519                     .append('circle')
99520                     .attr('r', targetRadius)
99521                     .merge(targets)
99522                     .attr('class', function(d) { return 'node midpoint target ' + fillClass + d.id; })
99523                     .attr('transform', getTransform);
99524             }
99525
99526
99527             function drawMidpoints(selection, graph, entities, filter, extent) {
99528                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.midpoints');
99529                 var touchLayer = selection.selectAll('.layer-touch.points');
99530
99531                 var mode = context.mode();
99532                 if ((mode && mode.id !== 'select') || !context.map().withinEditableZoom()) {
99533                     drawLayer.selectAll('.midpoint').remove();
99534                     touchLayer.selectAll('.midpoint.target').remove();
99535                     return;
99536                 }
99537
99538                 var poly = extent.polygon();
99539                 var midpoints = {};
99540
99541                 for (var i = 0; i < entities.length; i++) {
99542                     var entity = entities[i];
99543
99544                     if (entity.type !== 'way') { continue; }
99545                     if (!filter(entity)) { continue; }
99546                     if (context.selectedIDs().indexOf(entity.id) < 0) { continue; }
99547
99548                     var nodes = graph.childNodes(entity);
99549                     for (var j = 0; j < nodes.length - 1; j++) {
99550                         var a = nodes[j];
99551                         var b = nodes[j + 1];
99552                         var id = [a.id, b.id].sort().join('-');
99553
99554                         if (midpoints[id]) {
99555                             midpoints[id].parents.push(entity);
99556                         } else if (geoVecLength(projection(a.loc), projection(b.loc)) > 40) {
99557                             var point = geoVecInterp(a.loc, b.loc, 0.5);
99558                             var loc = null;
99559
99560                             if (extent.intersects(point)) {
99561                                 loc = point;
99562                             } else {
99563                                 for (var k = 0; k < 4; k++) {
99564                                     point = geoLineIntersection([a.loc, b.loc], [poly[k], poly[k + 1]]);
99565                                     if (point &&
99566                                         geoVecLength(projection(a.loc), projection(point)) > 20 &&
99567                                         geoVecLength(projection(b.loc), projection(point)) > 20)
99568                                     {
99569                                         loc = point;
99570                                         break;
99571                                     }
99572                                 }
99573                             }
99574
99575                             if (loc) {
99576                                 midpoints[id] = {
99577                                     type: 'midpoint',
99578                                     id: id,
99579                                     loc: loc,
99580                                     edge: [a.id, b.id],
99581                                     parents: [entity]
99582                                 };
99583                             }
99584                         }
99585                     }
99586                 }
99587
99588
99589                 function midpointFilter(d) {
99590                     if (midpoints[d.id])
99591                         { return true; }
99592
99593                     for (var i = 0; i < d.parents.length; i++) {
99594                         if (filter(d.parents[i])) {
99595                             return true;
99596                         }
99597                     }
99598
99599                     return false;
99600                 }
99601
99602
99603                 var groups = drawLayer.selectAll('.midpoint')
99604                     .filter(midpointFilter)
99605                     .data(Object.values(midpoints), function(d) { return d.id; });
99606
99607                 groups.exit()
99608                     .remove();
99609
99610                 var enter = groups.enter()
99611                     .insert('g', ':first-child')
99612                     .attr('class', 'midpoint');
99613
99614                 enter
99615                     .append('polygon')
99616                     .attr('points', '-6,8 10,0 -6,-8')
99617                     .attr('class', 'shadow');
99618
99619                 enter
99620                     .append('polygon')
99621                     .attr('points', '-3,4 5,0 -3,-4')
99622                     .attr('class', 'fill');
99623
99624                 groups = groups
99625                     .merge(enter)
99626                     .attr('transform', function(d) {
99627                         var translate = svgPointTransform(projection);
99628                         var a = graph.entity(d.edge[0]);
99629                         var b = graph.entity(d.edge[1]);
99630                         var angle = geoAngle(a, b, projection) * (180 / Math.PI);
99631                         return translate(d) + ' rotate(' + angle + ')';
99632                     })
99633                     .call(svgTagClasses().tags(
99634                         function(d) { return d.parents[0].tags; }
99635                     ));
99636
99637                 // Propagate data bindings.
99638                 groups.select('polygon.shadow');
99639                 groups.select('polygon.fill');
99640
99641
99642                 // Draw touch targets..
99643                 touchLayer
99644                     .call(drawTargets, graph, Object.values(midpoints), midpointFilter);
99645             }
99646
99647             return drawMidpoints;
99648         }
99649
99650         function svgPoints(projection, context) {
99651
99652             function markerPath(selection, klass) {
99653                 selection
99654                     .attr('class', klass)
99655                     .attr('transform', 'translate(-8, -23)')
99656                     .attr('d', 'M 17,8 C 17,13 11,21 8.5,23.5 C 6,21 0,13 0,8 C 0,4 4,-0.5 8.5,-0.5 C 13,-0.5 17,4 17,8 z');
99657             }
99658
99659             function sortY(a, b) {
99660                 return b.loc[1] - a.loc[1];
99661             }
99662
99663
99664             // Avoid exit/enter if we're just moving stuff around.
99665             // The node will get a new version but we only need to run the update selection.
99666             function fastEntityKey(d) {
99667                 var mode = context.mode();
99668                 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
99669                 return isMoving ? d.id : osmEntity.key(d);
99670             }
99671
99672
99673             function drawTargets(selection, graph, entities, filter) {
99674                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
99675                 var getTransform = svgPointTransform(projection).geojson;
99676                 var activeID = context.activeID();
99677                 var data = [];
99678
99679                 entities.forEach(function(node) {
99680                     if (activeID === node.id) { return; }   // draw no target on the activeID
99681
99682                     data.push({
99683                         type: 'Feature',
99684                         id: node.id,
99685                         properties: {
99686                             target: true,
99687                             entity: node
99688                         },
99689                         geometry: node.asGeoJSON()
99690                     });
99691                 });
99692
99693                 var targets = selection.selectAll('.point.target')
99694                     .filter(function(d) { return filter(d.properties.entity); })
99695                     .data(data, function key(d) { return d.id; });
99696
99697                 // exit
99698                 targets.exit()
99699                     .remove();
99700
99701                 // enter/update
99702                 targets.enter()
99703                     .append('rect')
99704                     .attr('x', -10)
99705                     .attr('y', -26)
99706                     .attr('width', 20)
99707                     .attr('height', 30)
99708                     .merge(targets)
99709                     .attr('class', function(d) { return 'node point target ' + fillClass + d.id; })
99710                     .attr('transform', getTransform);
99711             }
99712
99713
99714             function drawPoints(selection, graph, entities, filter) {
99715                 var wireframe = context.surface().classed('fill-wireframe');
99716                 var zoom = geoScaleToZoom(projection.scale());
99717                 var base = context.history().base();
99718
99719                 // Points with a direction will render as vertices at higher zooms..
99720                 function renderAsPoint(entity) {
99721                     return entity.geometry(graph) === 'point' &&
99722                         !(zoom >= 18 && entity.directions(graph, projection).length);
99723                 }
99724
99725                 // All points will render as vertices in wireframe mode too..
99726                 var points = wireframe ? [] : entities.filter(renderAsPoint);
99727                 points.sort(sortY);
99728
99729
99730                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.points');
99731                 var touchLayer = selection.selectAll('.layer-touch.points');
99732
99733                 // Draw points..
99734                 var groups = drawLayer.selectAll('g.point')
99735                     .filter(filter)
99736                     .data(points, fastEntityKey);
99737
99738                 groups.exit()
99739                     .remove();
99740
99741                 var enter = groups.enter()
99742                     .append('g')
99743                     .attr('class', function(d) { return 'node point ' + d.id; })
99744                     .order();
99745
99746                 enter
99747                     .append('path')
99748                     .call(markerPath, 'shadow');
99749
99750                 enter
99751                     .append('ellipse')
99752                     .attr('cx', 0.5)
99753                     .attr('cy', 1)
99754                     .attr('rx', 6.5)
99755                     .attr('ry', 3)
99756                     .attr('class', 'stroke');
99757
99758                 enter
99759                     .append('path')
99760                     .call(markerPath, 'stroke');
99761
99762                 enter
99763                     .append('use')
99764                     .attr('transform', 'translate(-5, -19)')
99765                     .attr('class', 'icon')
99766                     .attr('width', '11px')
99767                     .attr('height', '11px');
99768
99769                 groups = groups
99770                     .merge(enter)
99771                     .attr('transform', svgPointTransform(projection))
99772                     .classed('added', function(d) {
99773                         return !base.entities[d.id]; // if it doesn't exist in the base graph, it's new
99774                     })
99775                     .classed('moved', function(d) {
99776                         return base.entities[d.id] && !fastDeepEqual(graph.entities[d.id].loc, base.entities[d.id].loc);
99777                     })
99778                     .classed('retagged', function(d) {
99779                         return base.entities[d.id] && !fastDeepEqual(graph.entities[d.id].tags, base.entities[d.id].tags);
99780                     })
99781                     .call(svgTagClasses());
99782
99783                 groups.select('.shadow');   // propagate bound data
99784                 groups.select('.stroke');   // propagate bound data
99785                 groups.select('.icon')      // propagate bound data
99786                     .attr('xlink:href', function(entity) {
99787                         var preset = context.presets().match(entity, graph);
99788                         var picon = preset && preset.icon;
99789
99790                         if (!picon) {
99791                             return '';
99792                         } else {
99793                             var isMaki = /^maki-/.test(picon);
99794                             return '#' + picon + (isMaki ? '-11' : '');
99795                         }
99796                     });
99797
99798
99799                 // Draw touch targets..
99800                 touchLayer
99801                     .call(drawTargets, graph, points, filter);
99802             }
99803
99804
99805             return drawPoints;
99806         }
99807
99808         function svgTurns(projection, context) {
99809
99810             function icon(turn) {
99811                 var u = turn.u ? '-u' : '';
99812                 if (turn.no) { return '#iD-turn-no' + u; }
99813                 if (turn.only) { return '#iD-turn-only' + u; }
99814                 return '#iD-turn-yes' + u;
99815             }
99816
99817             function drawTurns(selection, graph, turns) {
99818
99819                 function turnTransform(d) {
99820                     var pxRadius = 50;
99821                     var toWay = graph.entity(d.to.way);
99822                     var toPoints = graph.childNodes(toWay)
99823                         .map(function (n) { return n.loc; })
99824                         .map(projection);
99825                     var toLength = geoPathLength(toPoints);
99826                     var mid = toLength / 2;    // midpoint of destination way
99827
99828                     var toNode = graph.entity(d.to.node);
99829                     var toVertex = graph.entity(d.to.vertex);
99830                     var a = geoAngle(toVertex, toNode, projection);
99831                     var o = projection(toVertex.loc);
99832                     var r = d.u ? 0                  // u-turn: no radius
99833                         : !toWay.__via ? pxRadius    // leaf way: put marker at pxRadius
99834                         : Math.min(mid, pxRadius);   // via way: prefer pxRadius, fallback to mid for very short ways
99835
99836                     return 'translate(' + (r * Math.cos(a) + o[0]) + ',' + (r * Math.sin(a) + o[1]) + ') ' +
99837                         'rotate(' + a * 180 / Math.PI + ')';
99838                 }
99839
99840
99841                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.turns');
99842                 var touchLayer = selection.selectAll('.layer-touch.turns');
99843
99844                 // Draw turns..
99845                 var groups = drawLayer.selectAll('g.turn')
99846                     .data(turns, function(d) { return d.key; });
99847
99848                 // exit
99849                 groups.exit()
99850                     .remove();
99851
99852                 // enter
99853                 var groupsEnter = groups.enter()
99854                     .append('g')
99855                     .attr('class', function(d) { return 'turn ' + d.key; });
99856
99857                 var turnsEnter = groupsEnter
99858                     .filter(function(d) { return !d.u; });
99859
99860                 turnsEnter.append('rect')
99861                     .attr('transform', 'translate(-22, -12)')
99862                     .attr('width', '44')
99863                     .attr('height', '24');
99864
99865                 turnsEnter.append('use')
99866                     .attr('transform', 'translate(-22, -12)')
99867                     .attr('width', '44')
99868                     .attr('height', '24');
99869
99870                 var uEnter = groupsEnter
99871                     .filter(function(d) { return d.u; });
99872
99873                 uEnter.append('circle')
99874                     .attr('r', '16');
99875
99876                 uEnter.append('use')
99877                     .attr('transform', 'translate(-16, -16)')
99878                     .attr('width', '32')
99879                     .attr('height', '32');
99880
99881                 // update
99882                 groups = groups
99883                     .merge(groupsEnter)
99884                     .attr('opacity', function(d) { return d.direct === false ? '0.7' : null; })
99885                     .attr('transform', turnTransform);
99886
99887                 groups.select('use')
99888                     .attr('xlink:href', icon);
99889
99890                 groups.select('rect');      // propagate bound data
99891                 groups.select('circle');    // propagate bound data
99892
99893
99894                 // Draw touch targets..
99895                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
99896                 groups = touchLayer.selectAll('g.turn')
99897                     .data(turns, function(d) { return d.key; });
99898
99899                 // exit
99900                 groups.exit()
99901                     .remove();
99902
99903                 // enter
99904                 groupsEnter = groups.enter()
99905                     .append('g')
99906                     .attr('class', function(d) { return 'turn ' + d.key; });
99907
99908                 turnsEnter = groupsEnter
99909                     .filter(function(d) { return !d.u; });
99910
99911                 turnsEnter.append('rect')
99912                     .attr('class', 'target ' + fillClass)
99913                     .attr('transform', 'translate(-22, -12)')
99914                     .attr('width', '44')
99915                     .attr('height', '24');
99916
99917                 uEnter = groupsEnter
99918                     .filter(function(d) { return d.u; });
99919
99920                 uEnter.append('circle')
99921                     .attr('class', 'target ' + fillClass)
99922                     .attr('r', '16');
99923
99924                 // update
99925                 groups = groups
99926                     .merge(groupsEnter)
99927                     .attr('transform', turnTransform);
99928
99929                 groups.select('rect');      // propagate bound data
99930                 groups.select('circle');    // propagate bound data
99931
99932
99933                 return this;
99934             }
99935
99936             return drawTurns;
99937         }
99938
99939         function svgVertices(projection, context) {
99940             var radiuses = {
99941                 //       z16-, z17,   z18+,  w/icon
99942                 shadow: [6,    7.5,   7.5,   12],
99943                 stroke: [2.5,  3.5,   3.5,   8],
99944                 fill:   [1,    1.5,   1.5,   1.5]
99945             };
99946
99947             var _currHoverTarget;
99948             var _currPersistent = {};
99949             var _currHover = {};
99950             var _prevHover = {};
99951             var _currSelected = {};
99952             var _prevSelected = {};
99953             var _radii = {};
99954
99955
99956             function sortY(a, b) {
99957                 return b.loc[1] - a.loc[1];
99958             }
99959
99960             // Avoid exit/enter if we're just moving stuff around.
99961             // The node will get a new version but we only need to run the update selection.
99962             function fastEntityKey(d) {
99963                 var mode = context.mode();
99964                 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
99965                 return isMoving ? d.id : osmEntity.key(d);
99966             }
99967
99968
99969             function draw(selection, graph, vertices, sets, filter) {
99970                 sets = sets || { selected: {}, important: {}, hovered: {} };
99971
99972                 var icons = {};
99973                 var directions = {};
99974                 var wireframe = context.surface().classed('fill-wireframe');
99975                 var zoom = geoScaleToZoom(projection.scale());
99976                 var z = (zoom < 17 ? 0 : zoom < 18 ? 1 : 2);
99977                 var activeID = context.activeID();
99978                 var base = context.history().base();
99979
99980
99981                 function getIcon(d) {
99982                     // always check latest entity, as fastEntityKey avoids enter/exit now
99983                     var entity = graph.entity(d.id);
99984                     if (entity.id in icons) { return icons[entity.id]; }
99985
99986                     icons[entity.id] =
99987                         entity.hasInterestingTags() &&
99988                         context.presets().match(entity, graph).icon;
99989
99990                     return icons[entity.id];
99991                 }
99992
99993
99994                 // memoize directions results, return false for empty arrays (for use in filter)
99995                 function getDirections(entity) {
99996                     if (entity.id in directions) { return directions[entity.id]; }
99997
99998                     var angles = entity.directions(graph, projection);
99999                     directions[entity.id] = angles.length ? angles : false;
100000                     return angles;
100001                 }
100002
100003
100004                 function updateAttributes(selection) {
100005                     ['shadow', 'stroke', 'fill'].forEach(function(klass) {
100006                         var rads = radiuses[klass];
100007                         selection.selectAll('.' + klass)
100008                             .each(function(entity) {
100009                                 var i = z && getIcon(entity);
100010                                 var r = rads[i ? 3 : z];
100011
100012                                 // slightly increase the size of unconnected endpoints #3775
100013                                 if (entity.id !== activeID && entity.isEndpoint(graph) && !entity.isConnected(graph)) {
100014                                     r += 1.5;
100015                                 }
100016
100017                                 if (klass === 'shadow') {   // remember this value, so we don't need to
100018                                     _radii[entity.id] = r;  // recompute it when we draw the touch targets
100019                                 }
100020
100021                                 d3_select(this)
100022                                     .attr('r', r)
100023                                     .attr('visibility', (i && klass === 'fill') ? 'hidden' : null);
100024                             });
100025                     });
100026                 }
100027
100028                 vertices.sort(sortY);
100029
100030                 var groups = selection.selectAll('g.vertex')
100031                     .filter(filter)
100032                     .data(vertices, fastEntityKey);
100033
100034                 // exit
100035                 groups.exit()
100036                     .remove();
100037
100038                 // enter
100039                 var enter = groups.enter()
100040                     .append('g')
100041                     .attr('class', function(d) { return 'node vertex ' + d.id; })
100042                     .order();
100043
100044                 enter
100045                     .append('circle')
100046                     .attr('class', 'shadow');
100047
100048                 enter
100049                     .append('circle')
100050                     .attr('class', 'stroke');
100051
100052                 // Vertices with tags get a fill.
100053                 enter.filter(function(d) { return d.hasInterestingTags(); })
100054                     .append('circle')
100055                     .attr('class', 'fill');
100056
100057                 // update
100058                 groups = groups
100059                     .merge(enter)
100060                     .attr('transform', svgPointTransform(projection))
100061                     .classed('sibling', function(d) { return d.id in sets.selected; })
100062                     .classed('shared', function(d) { return graph.isShared(d); })
100063                     .classed('endpoint', function(d) { return d.isEndpoint(graph); })
100064                     .classed('added', function(d) {
100065                         return !base.entities[d.id]; // if it doesn't exist in the base graph, it's new
100066                     })
100067                     .classed('moved', function(d) {
100068                         return base.entities[d.id] && !fastDeepEqual(graph.entities[d.id].loc, base.entities[d.id].loc);
100069                     })
100070                     .classed('retagged', function(d) {
100071                         return base.entities[d.id] && !fastDeepEqual(graph.entities[d.id].tags, base.entities[d.id].tags);
100072                     })
100073                     .call(updateAttributes);
100074
100075                 // Vertices with icons get a `use`.
100076                 var iconUse = groups
100077                     .selectAll('.icon')
100078                     .data(function data(d) { return zoom >= 17 && getIcon(d) ? [d] : []; }, fastEntityKey);
100079
100080                 // exit
100081                 iconUse.exit()
100082                     .remove();
100083
100084                 // enter
100085                 iconUse.enter()
100086                     .append('use')
100087                     .attr('class', 'icon')
100088                     .attr('width', '11px')
100089                     .attr('height', '11px')
100090                     .attr('transform', 'translate(-5.5, -5.5)')
100091                     .attr('xlink:href', function(d) {
100092                         var picon = getIcon(d);
100093                         var isMaki = /^maki-/.test(picon);
100094                         return '#' + picon + (isMaki ? '-11' : '');
100095                     });
100096
100097
100098                 // Vertices with directions get viewfields
100099                 var dgroups = groups
100100                     .selectAll('.viewfieldgroup')
100101                     .data(function data(d) { return zoom >= 18 && getDirections(d) ? [d] : []; }, fastEntityKey);
100102
100103                 // exit
100104                 dgroups.exit()
100105                     .remove();
100106
100107                 // enter/update
100108                 dgroups = dgroups.enter()
100109                     .insert('g', '.shadow')
100110                     .attr('class', 'viewfieldgroup')
100111                     .merge(dgroups);
100112
100113                 var viewfields = dgroups.selectAll('.viewfield')
100114                     .data(getDirections, function key(d) { return osmEntity.key(d); });
100115
100116                 // exit
100117                 viewfields.exit()
100118                     .remove();
100119
100120                 // enter/update
100121                 viewfields.enter()
100122                     .append('path')
100123                     .attr('class', 'viewfield')
100124                     .attr('d', 'M0,0H0')
100125                     .merge(viewfields)
100126                     .attr('marker-start', 'url(#viewfield-marker' + (wireframe ? '-wireframe' : '') + ')')
100127                     .attr('transform', function(d) { return 'rotate(' + d + ')'; });
100128             }
100129
100130
100131             function drawTargets(selection, graph, entities, filter) {
100132                 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
100133                 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
100134                 var getTransform = svgPointTransform(projection).geojson;
100135                 var activeID = context.activeID();
100136                 var data = { targets: [], nopes: [] };
100137
100138                 entities.forEach(function(node) {
100139                     if (activeID === node.id) { return; }   // draw no target on the activeID
100140
100141                     var vertexType = svgPassiveVertex(node, graph, activeID);
100142                     if (vertexType !== 0) {     // passive or adjacent - allow to connect
100143                         data.targets.push({
100144                             type: 'Feature',
100145                             id: node.id,
100146                             properties: {
100147                                 target: true,
100148                                 entity: node
100149                             },
100150                             geometry: node.asGeoJSON()
100151                         });
100152                     } else {
100153                         data.nopes.push({
100154                             type: 'Feature',
100155                             id: node.id + '-nope',
100156                             properties: {
100157                                 nope: true,
100158                                 target: true,
100159                                 entity: node
100160                             },
100161                             geometry: node.asGeoJSON()
100162                         });
100163                     }
100164                 });
100165
100166                 // Targets allow hover and vertex snapping
100167                 var targets = selection.selectAll('.vertex.target-allowed')
100168                     .filter(function(d) { return filter(d.properties.entity); })
100169                     .data(data.targets, function key(d) { return d.id; });
100170
100171                 // exit
100172                 targets.exit()
100173                     .remove();
100174
100175                 // enter/update
100176                 targets.enter()
100177                     .append('circle')
100178                     .attr('r', function(d) {
100179                         return _radii[d.id]
100180                           || radiuses.shadow[3];
100181                     })
100182                     .merge(targets)
100183                     .attr('class', function(d) {
100184                         return 'node vertex target target-allowed '
100185                         + targetClass + d.id;
100186                     })
100187                     .attr('transform', getTransform);
100188
100189
100190                 // NOPE
100191                 var nopes = selection.selectAll('.vertex.target-nope')
100192                     .filter(function(d) { return filter(d.properties.entity); })
100193                     .data(data.nopes, function key(d) { return d.id; });
100194
100195                 // exit
100196                 nopes.exit()
100197                     .remove();
100198
100199                 // enter/update
100200                 nopes.enter()
100201                     .append('circle')
100202                     .attr('r', function(d) { return (_radii[d.properties.entity.id] || radiuses.shadow[3]); })
100203                     .merge(nopes)
100204                     .attr('class', function(d) { return 'node vertex target target-nope ' + nopeClass + d.id; })
100205                     .attr('transform', getTransform);
100206             }
100207
100208
100209             // Points can also render as vertices:
100210             // 1. in wireframe mode or
100211             // 2. at higher zooms if they have a direction
100212             function renderAsVertex(entity, graph, wireframe, zoom) {
100213                 var geometry = entity.geometry(graph);
100214                 return geometry === 'vertex' || (geometry === 'point' && (
100215                     wireframe || (zoom >= 18 && entity.directions(graph, projection).length)
100216                 ));
100217             }
100218
100219
100220             function isEditedNode(node, base, head) {
100221                 var baseNode = base.entities[node.id];
100222                 var headNode = head.entities[node.id];
100223                 return !headNode ||
100224                     !baseNode ||
100225                     !fastDeepEqual(headNode.tags, baseNode.tags) ||
100226                     !fastDeepEqual(headNode.loc, baseNode.loc);
100227             }
100228
100229
100230             function getSiblingAndChildVertices(ids, graph, wireframe, zoom) {
100231                 var results = {};
100232
100233                 function addChildVertices(entity) {
100234                     var geometry = entity.geometry(graph);
100235                     if (!context.features().isHiddenFeature(entity, graph, geometry)) {
100236                         var i;
100237                         if (entity.type === 'way') {
100238                             for (i = 0; i < entity.nodes.length; i++) {
100239                                 var child = graph.hasEntity(entity.nodes[i]);
100240                                 if (child) {
100241                                     addChildVertices(child);
100242                                 }
100243                             }
100244                         } else if (entity.type === 'relation') {
100245                             for (i = 0; i < entity.members.length; i++) {
100246                                 var member = graph.hasEntity(entity.members[i].id);
100247                                 if (member) {
100248                                     addChildVertices(member);
100249                                 }
100250                             }
100251                         } else if (renderAsVertex(entity, graph, wireframe, zoom)) {
100252                             results[entity.id] = entity;
100253                         }
100254                     }
100255                 }
100256
100257                 ids.forEach(function(id) {
100258                     var entity = graph.hasEntity(id);
100259                     if (!entity) { return; }
100260
100261                     if (entity.type === 'node') {
100262                         if (renderAsVertex(entity, graph, wireframe, zoom)) {
100263                             results[entity.id] = entity;
100264                             graph.parentWays(entity).forEach(function(entity) {
100265                                 addChildVertices(entity);
100266                             });
100267                         }
100268                     } else {  // way, relation
100269                         addChildVertices(entity);
100270                     }
100271                 });
100272
100273                 return results;
100274             }
100275
100276
100277             function drawVertices(selection, graph, entities, filter, extent, fullRedraw) {
100278                 var wireframe = context.surface().classed('fill-wireframe');
100279                 var visualDiff = context.surface().classed('highlight-edited');
100280                 var zoom = geoScaleToZoom(projection.scale());
100281                 var mode = context.mode();
100282                 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
100283                 var base = context.history().base();
100284
100285                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.vertices');
100286                 var touchLayer = selection.selectAll('.layer-touch.points');
100287
100288                 if (fullRedraw) {
100289                     _currPersistent = {};
100290                     _radii = {};
100291                 }
100292
100293                 // Collect important vertices from the `entities` list..
100294                 // (during a paritial redraw, it will not contain everything)
100295                 for (var i = 0; i < entities.length; i++) {
100296                     var entity = entities[i];
100297                     var geometry = entity.geometry(graph);
100298                     var keep = false;
100299
100300                     // a point that looks like a vertex..
100301                     if ((geometry === 'point') && renderAsVertex(entity, graph, wireframe, zoom)) {
100302                         _currPersistent[entity.id] = entity;
100303                         keep = true;
100304
100305                     // a vertex of some importance..
100306                     } else if (geometry === 'vertex' &&
100307                         (entity.hasInterestingTags() || entity.isEndpoint(graph) || entity.isConnected(graph)
100308                         || (visualDiff && isEditedNode(entity, base, graph)))) {
100309                         _currPersistent[entity.id] = entity;
100310                         keep = true;
100311                     }
100312
100313                     // whatever this is, it's not a persistent vertex..
100314                     if (!keep && !fullRedraw) {
100315                         delete _currPersistent[entity.id];
100316                     }
100317                 }
100318
100319                 // 3 sets of vertices to consider:
100320                 var sets = {
100321                     persistent: _currPersistent,  // persistent = important vertices (render always)
100322                     selected: _currSelected,      // selected + siblings of selected (render always)
100323                     hovered: _currHover           // hovered + siblings of hovered (render only in draw modes)
100324                 };
100325
100326                 var all = Object.assign({}, (isMoving ? _currHover : {}), _currSelected, _currPersistent);
100327
100328                 // Draw the vertices..
100329                 // The filter function controls the scope of what objects d3 will touch (exit/enter/update)
100330                 // Adjust the filter function to expand the scope beyond whatever entities were passed in.
100331                 var filterRendered = function(d) {
100332                     return d.id in _currPersistent || d.id in _currSelected || d.id in _currHover || filter(d);
100333                 };
100334                 drawLayer
100335                     .call(draw, graph, currentVisible(all), sets, filterRendered);
100336
100337                 // Draw touch targets..
100338                 // When drawing, render all targets (not just those affected by a partial redraw)
100339                 var filterTouch = function(d) {
100340                     return isMoving ? true : filterRendered(d);
100341                 };
100342                 touchLayer
100343                     .call(drawTargets, graph, currentVisible(all), filterTouch);
100344
100345
100346                 function currentVisible(which) {
100347                     return Object.keys(which)
100348                         .map(graph.hasEntity, graph)     // the current version of this entity
100349                         .filter(function (entity) { return entity && entity.intersects(extent, graph); });
100350                 }
100351             }
100352
100353
100354             // partial redraw - only update the selected items..
100355             drawVertices.drawSelected = function(selection, graph, extent) {
100356                 var wireframe = context.surface().classed('fill-wireframe');
100357                 var zoom = geoScaleToZoom(projection.scale());
100358
100359                 _prevSelected = _currSelected || {};
100360                 if (context.map().isInWideSelection()) {
100361                     _currSelected = {};
100362                     context.selectedIDs().forEach(function(id) {
100363                         var entity = graph.hasEntity(id);
100364                         if (!entity) { return; }
100365
100366                         if (entity.type === 'node') {
100367                             if (renderAsVertex(entity, graph, wireframe, zoom)) {
100368                                 _currSelected[entity.id] = entity;
100369                             }
100370                         }
100371                     });
100372
100373                 } else {
100374                     _currSelected = getSiblingAndChildVertices(context.selectedIDs(), graph, wireframe, zoom);
100375                 }
100376
100377                 // note that drawVertices will add `_currSelected` automatically if needed..
100378                 var filter = function(d) { return d.id in _prevSelected; };
100379                 drawVertices(selection, graph, Object.values(_prevSelected), filter, extent, false);
100380             };
100381
100382
100383             // partial redraw - only update the hovered items..
100384             drawVertices.drawHover = function(selection, graph, target, extent) {
100385                 if (target === _currHoverTarget) { return; }  // continue only if something changed
100386
100387                 var wireframe = context.surface().classed('fill-wireframe');
100388                 var zoom = geoScaleToZoom(projection.scale());
100389
100390                 _prevHover = _currHover || {};
100391                 _currHoverTarget = target;
100392                 var entity = target && target.properties && target.properties.entity;
100393
100394                 if (entity) {
100395                     _currHover = getSiblingAndChildVertices([entity.id], graph, wireframe, zoom);
100396                 } else {
100397                     _currHover = {};
100398                 }
100399
100400                 // note that drawVertices will add `_currHover` automatically if needed..
100401                 var filter = function(d) { return d.id in _prevHover; };
100402                 drawVertices(selection, graph, Object.values(_prevHover), filter, extent, false);
100403             };
100404
100405             return drawVertices;
100406         }
100407
100408         function utilBindOnce(target, type, listener, capture) {
100409             var typeOnce = type + '.once';
100410             function one() {
100411                 target.on(typeOnce, null);
100412                 listener.apply(this, arguments);
100413             }
100414             target.on(typeOnce, one, capture);
100415             return this;
100416         }
100417
100418         // constants
100419         var TILESIZE = 256;
100420         var minZoom = 2;
100421         var maxZoom = 24;
100422         var kMin = geoZoomToScale(minZoom, TILESIZE);
100423         var kMax = geoZoomToScale(maxZoom, TILESIZE);
100424
100425         function clamp(num, min, max) {
100426             return Math.max(min, Math.min(num, max));
100427         }
100428
100429
100430         function rendererMap(context) {
100431             var dispatch$1 = dispatch('move', 'drawn', 'crossEditableZoom');
100432             var projection = context.projection;
100433             var curtainProjection = context.curtainProjection;
100434             var drawLayers = svgLayers(projection, context);
100435             var drawPoints = svgPoints(projection, context);
100436             var drawVertices = svgVertices(projection, context);
100437             var drawLines = svgLines(projection, context);
100438             var drawAreas = svgAreas(projection, context);
100439             var drawMidpoints = svgMidpoints(projection, context);
100440             var drawLabels = svgLabels(projection, context);
100441
100442             var _selection = d3_select(null);
100443             var supersurface = d3_select(null);
100444             var wrapper = d3_select(null);
100445             var surface = d3_select(null);
100446
100447             var _dimensions = [1, 1];
100448             var _dblClickEnabled = true;
100449             var _redrawEnabled = true;
100450             var _gestureTransformStart;
100451             var _transformStart = projection.transform();
100452             var _transformLast;
100453             var _isTransformed = false;
100454             var _minzoom = 0;
100455             var _getMouseCoords;
100456             var _mouseEvent;
100457             var _lastWithinEditableZoom;
100458
100459             var zoom = d3_zoom()
100460                 .scaleExtent([kMin, kMax])
100461                 .interpolate(d3_interpolate)
100462                 .filter(zoomEventFilter)
100463                 .on('zoom', zoomPan);
100464
100465             var scheduleRedraw = throttle(redraw, 750);
100466             // var isRedrawScheduled = false;
100467             // var pendingRedrawCall;
100468             // function scheduleRedraw() {
100469             //     // Only schedule the redraw if one has not already been set.
100470             //     if (isRedrawScheduled) return;
100471             //     isRedrawScheduled = true;
100472             //     var that = this;
100473             //     var args = arguments;
100474             //     pendingRedrawCall = window.requestIdleCallback(function () {
100475             //         // Reset the boolean so future redraws can be set.
100476             //         isRedrawScheduled = false;
100477             //         redraw.apply(that, args);
100478             //     }, { timeout: 1400 });
100479             // }
100480
100481             function cancelPendingRedraw() {
100482                 scheduleRedraw.cancel();
100483                 // isRedrawScheduled = false;
100484                 // window.cancelIdleCallback(pendingRedrawCall);
100485             }
100486
100487
100488             function map(selection) {
100489                 _selection = selection;
100490
100491                 context
100492                     .on('change.map', immediateRedraw);
100493
100494                 var osm = context.connection();
100495                 if (osm) {
100496                     osm.on('change.map', immediateRedraw);
100497                 }
100498
100499                 function didUndoOrRedo(targetTransform) {
100500                     var mode = context.mode().id;
100501                     if (mode !== 'browse' && mode !== 'select') { return; }
100502                     if (targetTransform) {
100503                         map.transformEase(targetTransform);
100504                     }
100505                 }
100506
100507                 context.history()
100508                     .on('merge.map', function() { scheduleRedraw(); })
100509                     .on('change.map', immediateRedraw)
100510                     .on('undone.map', function(stack, fromStack) {
100511                         didUndoOrRedo(fromStack.transform);
100512                     })
100513                     .on('redone.map', function(stack) {
100514                         didUndoOrRedo(stack.transform);
100515                     });
100516
100517                 context.background()
100518                     .on('change.map', immediateRedraw);
100519
100520                 context.features()
100521                     .on('redraw.map', immediateRedraw);
100522
100523                 drawLayers
100524                     .on('change.map', function() {
100525                         context.background().updateImagery();
100526                         immediateRedraw();
100527                     });
100528
100529                 selection
100530                     .on('dblclick.map', dblClick)
100531                     .call(zoom)
100532                     .call(zoom.transform, projection.transform());
100533
100534                 supersurface = selection.append('div')
100535                     .attr('id', 'supersurface')
100536                     .call(utilSetTransform, 0, 0);
100537
100538                 // Need a wrapper div because Opera can't cope with an absolutely positioned
100539                 // SVG element: http://bl.ocks.org/jfirebaugh/6fbfbd922552bf776c16
100540                 wrapper = supersurface
100541                     .append('div')
100542                     .attr('class', 'layer layer-data');
100543
100544                 map.surface = surface = wrapper
100545                     .call(drawLayers)
100546                     .selectAll('.surface')
100547                     .attr('id', 'surface');
100548
100549                 surface
100550                     .call(drawLabels.observe)
100551                     .on('gesturestart.surface', function() {
100552                         _gestureTransformStart = projection.transform();
100553                     })
100554                     .on('gesturechange.surface', gestureChange)
100555                     .on('mousedown.zoom', function() {
100556                         if (event.button === 2) {
100557                             event.stopPropagation();
100558                         }
100559                     }, true)
100560                     .on('mouseup.zoom', function() {
100561                         if (resetTransform()) {
100562                             immediateRedraw();
100563                         }
100564                     })
100565                     .on('mousemove.map', function() {
100566                         _mouseEvent = event;
100567                     })
100568                     .on('mouseover.vertices', function() {
100569                         if (map.editableDataEnabled() && !_isTransformed) {
100570                             var hover = event.target.__data__;
100571                             surface.call(drawVertices.drawHover, context.graph(), hover, map.extent());
100572                             dispatch$1.call('drawn', this, { full: false });
100573                         }
100574                     })
100575                     .on('mouseout.vertices', function() {
100576                         if (map.editableDataEnabled() && !_isTransformed) {
100577                             var hover = event.relatedTarget && event.relatedTarget.__data__;
100578                             surface.call(drawVertices.drawHover, context.graph(), hover, map.extent());
100579                             dispatch$1.call('drawn', this, { full: false });
100580                         }
100581                     });
100582
100583                 context.on('enter.map',  function() {
100584                     if (map.editableDataEnabled(true /* skip zoom check */) && !_isTransformed) {
100585                         // redraw immediately any objects affected by a change in selectedIDs.
100586                         var graph = context.graph();
100587                         var selectedAndParents = {};
100588                         context.selectedIDs().forEach(function(id) {
100589                             var entity = graph.hasEntity(id);
100590                             if (entity) {
100591                                 selectedAndParents[entity.id] = entity;
100592                                 if (entity.type === 'node') {
100593                                     graph.parentWays(entity).forEach(function(parent) {
100594                                         selectedAndParents[parent.id] = parent;
100595                                     });
100596                                 }
100597                             }
100598                         });
100599                         var data = Object.values(selectedAndParents);
100600                         var filter = function(d) { return d.id in selectedAndParents; };
100601
100602                         data = context.features().filter(data, graph);
100603
100604                         surface
100605                             .call(drawVertices.drawSelected, graph, map.extent())
100606                             .call(drawLines, graph, data, filter)
100607                             .call(drawAreas, graph, data, filter)
100608                             .call(drawMidpoints, graph, data, filter, map.trimmedExtent());
100609
100610                         dispatch$1.call('drawn', this, { full: false });
100611
100612                         // redraw everything else later
100613                         scheduleRedraw();
100614                     }
100615                 });
100616
100617                 map.dimensions(utilGetDimensions(selection));
100618             }
100619
100620
100621             function zoomEventFilter() {
100622                 // Fix for #2151, (see also d3/d3-zoom#60, d3/d3-brush#18)
100623                 // Intercept `mousedown` and check if there is an orphaned zoom gesture.
100624                 // This can happen if a previous `mousedown` occurred without a `mouseup`.
100625                 // If we detect this, dispatch `mouseup` to complete the orphaned gesture,
100626                 // so that d3-zoom won't stop propagation of new `mousedown` events.
100627                 if (event.type === 'mousedown') {
100628                     var hasOrphan = false;
100629                     var listeners = window.__on;
100630                     for (var i = 0; i < listeners.length; i++) {
100631                         var listener = listeners[i];
100632                         if (listener.name === 'zoom' && listener.type === 'mouseup') {
100633                             hasOrphan = true;
100634                             break;
100635                         }
100636                     }
100637                     if (hasOrphan) {
100638                         var event$1 = window.CustomEvent;
100639                         if (event$1) {
100640                             event$1 = new event$1('mouseup');
100641                         } else {
100642                             event$1 = window.document.createEvent('Event');
100643                             event$1.initEvent('mouseup', false, false);
100644                         }
100645                         // Event needs to be dispatched with an event.view property.
100646                         event$1.view = window;
100647                         window.dispatchEvent(event$1);
100648                     }
100649                 }
100650
100651                 return event.button !== 2;   // ignore right clicks
100652             }
100653
100654
100655             function pxCenter() {
100656                 return [_dimensions[0] / 2, _dimensions[1] / 2];
100657             }
100658
100659
100660             function drawEditable(difference, extent) {
100661                 var mode = context.mode();
100662                 var graph = context.graph();
100663                 var features = context.features();
100664                 var all = context.intersects(map.extent());
100665                 var fullRedraw = false;
100666                 var data;
100667                 var set;
100668                 var filter;
100669
100670                 if (map.isInWideSelection()) {
100671                     data = [];
100672                     utilEntityAndDeepMemberIDs(mode.selectedIDs(), context.graph()).forEach(function(id) {
100673                         var entity = context.hasEntity(id);
100674                         if (entity) { data.push(entity); }
100675                     });
100676                     fullRedraw = true;
100677                     filter = utilFunctor(true);
100678
100679                 } else if (difference) {
100680                     var complete = difference.complete(map.extent());
100681                     data = Object.values(complete).filter(Boolean);
100682                     set = new Set(Object.keys(complete));
100683                     filter = function(d) { return set.has(d.id); };
100684                     features.clear(data);
100685
100686                 } else {
100687                     // force a full redraw if gatherStats detects that a feature
100688                     // should be auto-hidden (e.g. points or buildings)..
100689                     if (features.gatherStats(all, graph, _dimensions)) {
100690                         extent = undefined;
100691                     }
100692
100693                     if (extent) {
100694                         data = context.intersects(map.extent().intersection(extent));
100695                         set = new Set(data.map(function(entity) { return entity.id; }));
100696                         filter = function(d) { return set.has(d.id); };
100697
100698                     } else {
100699                         data = all;
100700                         fullRedraw = true;
100701                         filter = utilFunctor(true);
100702                     }
100703                 }
100704
100705                 data = features.filter(data, graph);
100706
100707                 if (mode && mode.id === 'select') {
100708                     // update selected vertices - the user might have just double-clicked a way,
100709                     // creating a new vertex, triggering a partial redraw without a mode change
100710                     surface.call(drawVertices.drawSelected, graph, map.extent());
100711                 }
100712
100713                 surface
100714                     .call(drawVertices, graph, data, filter, map.extent(), fullRedraw)
100715                     .call(drawLines, graph, data, filter)
100716                     .call(drawAreas, graph, data, filter)
100717                     .call(drawMidpoints, graph, data, filter, map.trimmedExtent())
100718                     .call(drawLabels, graph, data, filter, _dimensions, fullRedraw)
100719                     .call(drawPoints, graph, data, filter);
100720
100721                 dispatch$1.call('drawn', this, {full: true});
100722             }
100723
100724
100725             function editOff() {
100726                 context.features().resetStats();
100727                 surface.selectAll('.layer-osm *').remove();
100728                 surface.selectAll('.layer-touch:not(.markers) *').remove();
100729
100730                 var allowed = {
100731                     'browse': true,
100732                     'save': true,
100733                     'select-note': true,
100734                     'select-data': true,
100735                     'select-error': true
100736                 };
100737
100738                 var mode = context.mode();
100739                 if (mode && !allowed[mode.id]) {
100740                     context.enter(modeBrowse(context));
100741                 }
100742
100743                 dispatch$1.call('drawn', this, {full: true});
100744             }
100745
100746
100747             function dblClick() {
100748                 if (!_dblClickEnabled) {
100749                     event.preventDefault();
100750                     event.stopImmediatePropagation();
100751                 }
100752             }
100753
100754
100755             function gestureChange() {
100756                 // Remap Safari gesture events to wheel events - #5492
100757                 // We want these disabled most places, but enabled for zoom/unzoom on map surface
100758                 // https://developer.mozilla.org/en-US/docs/Web/API/GestureEvent
100759                 var e = event;
100760                 e.preventDefault();
100761
100762                 var props = {
100763                     deltaMode: 0,    // dummy values to ignore in zoomPan
100764                     deltaY: 1,       // dummy values to ignore in zoomPan
100765                     clientX: e.clientX,
100766                     clientY: e.clientY,
100767                     screenX: e.screenX,
100768                     screenY: e.screenY,
100769                     x: e.x,
100770                     y: e.y
100771                 };
100772
100773                 var e2 = new WheelEvent('wheel', props);
100774                 e2._scale = e.scale;         // preserve the original scale
100775                 e2._rotation = e.rotation;   // preserve the original rotation
100776
100777                 _selection.node().dispatchEvent(e2);
100778             }
100779
100780
100781             function zoomPan(manualEvent) {
100782                 var event$1 = (manualEvent || event);
100783                 var source = event$1.sourceEvent;
100784                 var eventTransform = event$1.transform;
100785                 var x = eventTransform.x;
100786                 var y = eventTransform.y;
100787                 var k = eventTransform.k;
100788
100789                 if (_transformStart.x === x &&
100790                     _transformStart.y === y &&
100791                     _transformStart.k === k) {
100792                     return;  // no change
100793                 }
100794
100795                 // Special handling of 'wheel' events:
100796                 // They might be triggered by the user scrolling the mouse wheel,
100797                 // or 2-finger pinch/zoom gestures, the transform may need adjustment.
100798                 if (source && source.type === 'wheel') {
100799                     var detected = utilDetect();
100800                     var dX = source.deltaX;
100801                     var dY = source.deltaY;
100802                     var x2 = x;
100803                     var y2 = y;
100804                     var k2 = k;
100805                     var t0, p0, p1;
100806
100807                     // Normalize mousewheel scroll speed (Firefox) - #3029
100808                     // If wheel delta is provided in LINE units, recalculate it in PIXEL units
100809                     // We are essentially redoing the calculations that occur here:
100810                     //   https://github.com/d3/d3-zoom/blob/78563a8348aa4133b07cac92e2595c2227ca7cd7/src/zoom.js#L203
100811                     // See this for more info:
100812                     //   https://github.com/basilfx/normalize-wheel/blob/master/src/normalizeWheel.js
100813                     if (source.deltaMode === 1 /* LINE */) {
100814                         // Convert from lines to pixels, more if the user is scrolling fast.
100815                         // (I made up the exp function to roughly match Firefox to what Chrome does)
100816                         // These numbers should be floats, because integers are treated as pan gesture below.
100817                         var lines = Math.abs(source.deltaY);
100818                         var sign = (source.deltaY > 0) ? 1 : -1;
100819                         dY = sign * clamp(
100820                             Math.exp((lines - 1) * 0.75) * 4.000244140625,
100821                             4.000244140625,    // min
100822                             350.000244140625   // max
100823                         );
100824
100825                         // On Firefox Windows and Linux we always get +/- the scroll line amount (default 3)
100826                         // There doesn't seem to be any scroll accelleration.
100827                         // This multiplier increases the speed a little bit - #5512
100828                         if (detected.os !== 'mac') {
100829                             dY *= 5;
100830                         }
100831
100832                         // recalculate x2,y2,k2
100833                         t0 = _isTransformed ? _transformLast : _transformStart;
100834                         p0 = _getMouseCoords(source);
100835                         p1 = t0.invert(p0);
100836                         k2 = t0.k * Math.pow(2, -dY / 500);
100837                         k2 = clamp(k2, kMin, kMax);
100838                         x2 = p0[0] - p1[0] * k2;
100839                         y2 = p0[1] - p1[1] * k2;
100840
100841                     // 2 finger map pinch zooming (Safari) - #5492
100842                     // These are fake `wheel` events we made from Safari `gesturechange` events..
100843                     } else if (source._scale) {
100844                         // recalculate x2,y2,k2
100845                         t0 = _gestureTransformStart;
100846                         p0 = _getMouseCoords(source);
100847                         p1 = t0.invert(p0);
100848                         k2 = t0.k * source._scale;
100849                         k2 = clamp(k2, kMin, kMax);
100850                         x2 = p0[0] - p1[0] * k2;
100851                         y2 = p0[1] - p1[1] * k2;
100852
100853                     // 2 finger map pinch zooming (all browsers except Safari) - #5492
100854                     // Pinch zooming via the `wheel` event will always have:
100855                     // - `ctrlKey = true`
100856                     // - `deltaY` is not round integer pixels (ignore `deltaX`)
100857                     } else if (source.ctrlKey && !isInteger(dY)) {
100858                         dY *= 6;   // slightly scale up whatever the browser gave us
100859
100860                         // recalculate x2,y2,k2
100861                         t0 = _isTransformed ? _transformLast : _transformStart;
100862                         p0 = _getMouseCoords(source);
100863                         p1 = t0.invert(p0);
100864                         k2 = t0.k * Math.pow(2, -dY / 500);
100865                         k2 = clamp(k2, kMin, kMax);
100866                         x2 = p0[0] - p1[0] * k2;
100867                         y2 = p0[1] - p1[1] * k2;
100868
100869                     // Trackpad scroll zooming with shift or alt/option key down
100870                     } else if ((source.altKey || source.shiftKey) && isInteger(dY)) {
100871                         // recalculate x2,y2,k2
100872                         t0 = _isTransformed ? _transformLast : _transformStart;
100873                         p0 = _getMouseCoords(source);
100874                         p1 = t0.invert(p0);
100875                         k2 = t0.k * Math.pow(2, -dY / 500);
100876                         k2 = clamp(k2, kMin, kMax);
100877                         x2 = p0[0] - p1[0] * k2;
100878                         y2 = p0[1] - p1[1] * k2;
100879
100880                     // 2 finger map panning (Mac only, all browsers) - #5492, #5512
100881                     // Panning via the `wheel` event will always have:
100882                     // - `ctrlKey = false`
100883                     // - `deltaX`,`deltaY` are round integer pixels
100884                     } else if (detected.os === 'mac' && !source.ctrlKey && isInteger(dX) && isInteger(dY)) {
100885                         p1 = projection.translate();
100886                         x2 = p1[0] - dX;
100887                         y2 = p1[1] - dY;
100888                         k2 = projection.scale();
100889                         k2 = clamp(k2, kMin, kMax);
100890                     }
100891
100892                     // something changed - replace the event transform
100893                     if (x2 !== x || y2 !== y || k2 !== k) {
100894                         x = x2;
100895                         y = y2;
100896                         k = k2;
100897                         eventTransform = identity$8.translate(x2, y2).scale(k2);
100898                         _selection.node().__zoom = eventTransform;
100899                     }
100900
100901                 }
100902
100903                 var withinEditableZoom = map.withinEditableZoom();
100904                 if (_lastWithinEditableZoom !== withinEditableZoom) {
100905                     if (_lastWithinEditableZoom !== undefined) {
100906                         // notify that the map zoomed in or out over the editable zoom threshold
100907                         dispatch$1.call('crossEditableZoom', this, map);
100908                     }
100909                     _lastWithinEditableZoom = withinEditableZoom;
100910                 }
100911
100912                 if (geoScaleToZoom(k, TILESIZE) < _minzoom) {
100913                     surface.interrupt();
100914                     uiFlash().text(t('cannot_zoom'))();
100915                     setCenterZoom(map.center(), context.minEditableZoom(), 0, true);
100916                     scheduleRedraw();
100917                     dispatch$1.call('move', this, map);
100918                     return;
100919                 }
100920
100921                 projection.transform(eventTransform);
100922
100923                 var scale = k / _transformStart.k;
100924                 var tX = (x / scale - _transformStart.x) * scale;
100925                 var tY = (y / scale - _transformStart.y) * scale;
100926
100927                 if (context.inIntro()) {
100928                     curtainProjection.transform({
100929                         x: x - tX,
100930                         y: y - tY,
100931                         k: k
100932                     });
100933                 }
100934
100935                 if (source) {
100936                     _mouseEvent = event$1;
100937                 }
100938                 _isTransformed = true;
100939                 _transformLast = eventTransform;
100940                 utilSetTransform(supersurface, tX, tY, scale);
100941                 scheduleRedraw();
100942
100943                 dispatch$1.call('move', this, map);
100944
100945
100946                 function isInteger(val) {
100947                     return typeof val === 'number' && isFinite(val) && Math.floor(val) === val;
100948                 }
100949             }
100950
100951
100952             function resetTransform() {
100953                 if (!_isTransformed) { return false; }
100954
100955                 // deprecation warning - Radial Menu to be removed in iD v3
100956                 surface.selectAll('.edit-menu, .radial-menu').interrupt().remove();
100957                 utilSetTransform(supersurface, 0, 0);
100958                 _isTransformed = false;
100959                 if (context.inIntro()) {
100960                     curtainProjection.transform(projection.transform());
100961                 }
100962                 return true;
100963             }
100964
100965
100966             function redraw(difference, extent) {
100967                 if (surface.empty() || !_redrawEnabled) { return; }
100968
100969                 // If we are in the middle of a zoom/pan, we can't do differenced redraws.
100970                 // It would result in artifacts where differenced entities are redrawn with
100971                 // one transform and unchanged entities with another.
100972                 if (resetTransform()) {
100973                     difference = extent = undefined;
100974                 }
100975
100976                 var zoom = map.zoom();
100977                 var z = String(~~zoom);
100978
100979                 if (surface.attr('data-zoom') !== z) {
100980                     surface.attr('data-zoom', z);
100981                 }
100982
100983                 // class surface as `lowzoom` around z17-z18.5 (based on latitude)
100984                 var lat = map.center()[1];
100985                 var lowzoom = linear$2()
100986                     .domain([-60, 0, 60])
100987                     .range([17, 18.5, 17])
100988                     .clamp(true);
100989
100990                 surface
100991                     .classed('low-zoom', zoom <= lowzoom(lat));
100992
100993
100994                 if (!difference) {
100995                     supersurface.call(context.background());
100996                     wrapper.call(drawLayers);
100997                 }
100998
100999                 // OSM
101000                 if (map.editableDataEnabled() || map.isInWideSelection()) {
101001                     context.loadTiles(projection);
101002                     drawEditable(difference, extent);
101003                 } else {
101004                     editOff();
101005                 }
101006
101007                 _transformStart = projection.transform();
101008
101009                 return map;
101010             }
101011
101012
101013
101014             var immediateRedraw = function(difference, extent) {
101015                 if (!difference && !extent) { cancelPendingRedraw(); }
101016                 redraw(difference, extent);
101017             };
101018
101019
101020             map.mouse = function() {
101021                 var event$1 = _mouseEvent || event;
101022                 if (event$1) {
101023                     var s;
101024                     while ((s = event$1.sourceEvent)) { event$1 = s; }
101025                     return _getMouseCoords(event$1);
101026                 }
101027                 return null;
101028             };
101029
101030
101031             // returns Lng/Lat
101032             map.mouseCoordinates = function() {
101033                 var coord = map.mouse() || pxCenter();
101034                 return projection.invert(coord);
101035             };
101036
101037
101038             map.dblclickEnable = function(val) {
101039                 if (!arguments.length) { return _dblClickEnabled; }
101040                 _dblClickEnabled = val;
101041                 return map;
101042             };
101043
101044
101045             map.redrawEnable = function(val) {
101046                 if (!arguments.length) { return _redrawEnabled; }
101047                 _redrawEnabled = val;
101048                 return map;
101049             };
101050
101051
101052             map.isTransformed = function() {
101053                 return _isTransformed;
101054             };
101055
101056
101057             function setTransform(t2, duration, force) {
101058                 var t = projection.transform();
101059                 if (!force && t2.k === t.k && t2.x === t.x && t2.y === t.y) { return false; }
101060
101061                 if (duration) {
101062                     _selection
101063                         .transition()
101064                         .duration(duration)
101065                         .on('start', function() { map.startEase(); })
101066                         .call(zoom.transform, identity$8.translate(t2.x, t2.y).scale(t2.k));
101067                 } else {
101068                     projection.transform(t2);
101069                     _transformStart = t2;
101070                     _selection.call(zoom.transform, _transformStart);
101071                 }
101072
101073                 return true;
101074             }
101075
101076
101077             function setCenterZoom(loc2, z2, duration, force) {
101078                 var c = map.center();
101079                 var z = map.zoom();
101080                 if (loc2[0] === c[0] && loc2[1] === c[1] && z2 === z && !force) { return false; }
101081
101082                 var proj = geoRawMercator().transform(projection.transform());  // copy projection
101083
101084                 var k2 = clamp(geoZoomToScale(z2, TILESIZE), kMin, kMax);
101085                 proj.scale(k2);
101086
101087                 var t = proj.translate();
101088                 var point = proj(loc2);
101089
101090                 var center = pxCenter();
101091                 t[0] += center[0] - point[0];
101092                 t[1] += center[1] - point[1];
101093
101094                 return setTransform(identity$8.translate(t[0], t[1]).scale(k2), duration, force);
101095             }
101096
101097
101098             map.pan = function(delta, duration) {
101099                 var t = projection.translate();
101100                 var k = projection.scale();
101101
101102                 t[0] += delta[0];
101103                 t[1] += delta[1];
101104
101105                 if (duration) {
101106                     _selection
101107                         .transition()
101108                         .duration(duration)
101109                         .on('start', function() { map.startEase(); })
101110                         .call(zoom.transform, identity$8.translate(t[0], t[1]).scale(k));
101111                 } else {
101112                     projection.translate(t);
101113                     _transformStart = projection.transform();
101114                     _selection.call(zoom.transform, _transformStart);
101115                     dispatch$1.call('move', this, map);
101116                     immediateRedraw();
101117                 }
101118
101119                 return map;
101120             };
101121
101122
101123             map.dimensions = function(val) {
101124                 if (!arguments.length) { return _dimensions; }
101125
101126                 _dimensions = val;
101127                 drawLayers.dimensions(_dimensions);
101128                 context.background().dimensions(_dimensions);
101129                 projection.clipExtent([[0, 0], _dimensions]);
101130                 _getMouseCoords = utilFastMouse(supersurface.node());
101131
101132                 scheduleRedraw();
101133                 return map;
101134             };
101135
101136
101137             function zoomIn(delta) {
101138                 setCenterZoom(map.center(), ~~map.zoom() + delta, 250, true);
101139             }
101140
101141             function zoomOut(delta) {
101142                 setCenterZoom(map.center(), ~~map.zoom() - delta, 250, true);
101143             }
101144
101145             map.zoomIn = function() { zoomIn(1); };
101146             map.zoomInFurther = function() { zoomIn(4); };
101147             map.canZoomIn = function() { return map.zoom() < maxZoom; };
101148
101149             map.zoomOut = function() { zoomOut(1); };
101150             map.zoomOutFurther = function() { zoomOut(4); };
101151             map.canZoomOut = function() { return map.zoom() > minZoom; };
101152
101153             map.center = function(loc2) {
101154                 if (!arguments.length) {
101155                     return projection.invert(pxCenter());
101156                 }
101157
101158                 if (setCenterZoom(loc2, map.zoom())) {
101159                     dispatch$1.call('move', this, map);
101160                 }
101161
101162                 scheduleRedraw();
101163                 return map;
101164             };
101165
101166             map.unobscuredCenterZoomEase = function(loc, zoom) {
101167                 var offset = map.unobscuredOffsetPx();
101168
101169                 var proj = geoRawMercator().transform(projection.transform());  // copy projection
101170                 // use the target zoom to calculate the offset center
101171                 proj.scale(geoZoomToScale(zoom, TILESIZE));
101172
101173                 var locPx = proj(loc);
101174                 var offsetLocPx = [locPx[0] + offset[0], locPx[1] + offset[1]];
101175                 var offsetLoc = proj.invert(offsetLocPx);
101176
101177                 map.centerZoomEase(offsetLoc, zoom);
101178             };
101179
101180             map.unobscuredOffsetPx = function() {
101181                 var openPane = d3_select('.map-panes .map-pane.shown');
101182                 if (!openPane.empty()) {
101183                     return [openPane.node().offsetWidth/2, 0];
101184                 }
101185                 return [0, 0];
101186             };
101187
101188             map.zoom = function(z2) {
101189                 if (!arguments.length) {
101190                     return Math.max(geoScaleToZoom(projection.scale(), TILESIZE), 0);
101191                 }
101192
101193                 if (z2 < _minzoom) {
101194                     surface.interrupt();
101195                     uiFlash().text(t('cannot_zoom'))();
101196                     z2 = context.minEditableZoom();
101197                 }
101198
101199                 if (setCenterZoom(map.center(), z2)) {
101200                     dispatch$1.call('move', this, map);
101201                 }
101202
101203                 scheduleRedraw();
101204                 return map;
101205             };
101206
101207
101208             map.centerZoom = function(loc2, z2) {
101209                 if (setCenterZoom(loc2, z2)) {
101210                     dispatch$1.call('move', this, map);
101211                 }
101212
101213                 scheduleRedraw();
101214                 return map;
101215             };
101216
101217
101218             map.zoomTo = function(entity) {
101219                 var extent = entity.extent(context.graph());
101220                 if (!isFinite(extent.area())) { return map; }
101221
101222                 var z2 = clamp(map.trimmedExtentZoom(extent), 0, 20);
101223                 return map.centerZoom(extent.center(), z2);
101224             };
101225
101226
101227             map.centerEase = function(loc2, duration) {
101228                 duration = duration || 250;
101229                 setCenterZoom(loc2, map.zoom(), duration);
101230                 return map;
101231             };
101232
101233
101234             map.zoomEase = function(z2, duration) {
101235                 duration = duration || 250;
101236                 setCenterZoom(map.center(), z2, duration, false);
101237                 return map;
101238             };
101239
101240
101241             map.centerZoomEase = function(loc2, z2, duration) {
101242                 duration = duration || 250;
101243                 setCenterZoom(loc2, z2, duration, false);
101244                 return map;
101245             };
101246
101247
101248             map.transformEase = function(t2, duration) {
101249                 duration = duration || 250;
101250                 setTransform(t2, duration, false);
101251                 return map;
101252             };
101253
101254
101255             map.zoomToEase = function(obj, duration) {
101256                 var extent;
101257                 if (Array.isArray(obj)) {
101258                     obj.forEach(function(entity) {
101259                         var entityExtent = entity.extent(context.graph());
101260                         if (!extent) {
101261                             extent = entityExtent;
101262                         } else {
101263                             extent = extent.extend(entityExtent);
101264                         }
101265                     });
101266                 } else {
101267                     extent = obj.extent(context.graph());
101268                 }
101269                 if (!isFinite(extent.area())) { return map; }
101270
101271                 var z2 = clamp(map.trimmedExtentZoom(extent), 0, 20);
101272                 return map.centerZoomEase(extent.center(), z2, duration);
101273             };
101274
101275
101276             map.startEase = function() {
101277                 utilBindOnce(surface, 'mousedown.ease', function() {
101278                     map.cancelEase();
101279                 });
101280                 return map;
101281             };
101282
101283
101284             map.cancelEase = function() {
101285                 _selection.interrupt();
101286                 return map;
101287             };
101288
101289
101290             map.extent = function(val) {
101291                 if (!arguments.length) {
101292                     return new geoExtent(
101293                         projection.invert([0, _dimensions[1]]),
101294                         projection.invert([_dimensions[0], 0])
101295                     );
101296                 } else {
101297                     var extent = geoExtent(val);
101298                     map.centerZoom(extent.center(), map.extentZoom(extent));
101299                 }
101300             };
101301
101302
101303             map.trimmedExtent = function(val) {
101304                 if (!arguments.length) {
101305                     var headerY = 60;
101306                     var footerY = 30;
101307                     var pad = 10;
101308                     return new geoExtent(
101309                         projection.invert([pad, _dimensions[1] - footerY - pad]),
101310                         projection.invert([_dimensions[0] - pad, headerY + pad])
101311                     );
101312                 } else {
101313                     var extent = geoExtent(val);
101314                     map.centerZoom(extent.center(), map.trimmedExtentZoom(extent));
101315                 }
101316             };
101317
101318
101319             function calcExtentZoom(extent, dim) {
101320                 var tl = projection([extent[0][0], extent[1][1]]);
101321                 var br = projection([extent[1][0], extent[0][1]]);
101322
101323                 // Calculate maximum zoom that fits extent
101324                 var hFactor = (br[0] - tl[0]) / dim[0];
101325                 var vFactor = (br[1] - tl[1]) / dim[1];
101326                 var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2;
101327                 var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2;
101328                 var newZoom = map.zoom() - Math.max(hZoomDiff, vZoomDiff);
101329
101330                 return newZoom;
101331             }
101332
101333
101334             map.extentZoom = function(val) {
101335                 return calcExtentZoom(geoExtent(val), _dimensions);
101336             };
101337
101338
101339             map.trimmedExtentZoom = function(val) {
101340                 var trimY = 120;
101341                 var trimX = 40;
101342                 var trimmed = [_dimensions[0] - trimX, _dimensions[1] - trimY];
101343                 return calcExtentZoom(geoExtent(val), trimmed);
101344             };
101345
101346
101347             map.withinEditableZoom = function() {
101348                 return map.zoom() >= context.minEditableZoom();
101349             };
101350
101351
101352             map.isInWideSelection = function() {
101353                 return !map.withinEditableZoom() && context.mode() && context.mode().id === 'select';
101354             };
101355
101356
101357             map.editableDataEnabled = function(skipZoomCheck) {
101358
101359                 var layer = context.layers().layer('osm');
101360                 if (!layer || !layer.enabled()) { return false; }
101361
101362                 return skipZoomCheck || map.withinEditableZoom();
101363             };
101364
101365
101366             map.notesEditable = function() {
101367                 var layer = context.layers().layer('notes');
101368                 if (!layer || !layer.enabled()) { return false; }
101369
101370                 return map.withinEditableZoom();
101371             };
101372
101373
101374             map.minzoom = function(val) {
101375                 if (!arguments.length) { return _minzoom; }
101376                 _minzoom = val;
101377                 return map;
101378             };
101379
101380
101381             map.layers = drawLayers;
101382
101383
101384             return utilRebind(map, dispatch$1, 'on');
101385         }
101386
101387         function rendererPhotos(context) {
101388             var dispatch$1 = dispatch('change');
101389             var _layerIDs = ['streetside', 'mapillary', 'mapillary-map-features', 'mapillary-signs', 'openstreetcam'];
101390             var _allPhotoTypes = ['flat', 'panoramic'];
101391             var _shownPhotoTypes = _allPhotoTypes.slice();   // shallow copy
101392
101393             function photos() {}
101394
101395             function updateStorage() {
101396                 if (window.mocha) { return; }
101397
101398                 var q = utilStringQs(window.location.hash.substring(1));
101399                 var enabled = context.layers().all().filter(function(d) {
101400                     return _layerIDs.indexOf(d.id) !== -1 && d.layer && d.layer.supported() && d.layer.enabled();
101401                 }).map(function(d) {
101402                     return d.id;
101403                 });
101404                 if (enabled.length) {
101405                     q.photo_overlay = enabled.join(',');
101406                 } else {
101407                     delete q.photo_overlay;
101408                 }
101409                 window.location.replace('#' + utilQsString(q, true));
101410             }
101411
101412             photos.overlayLayerIDs = function() {
101413                 return _layerIDs;
101414             };
101415
101416             photos.allPhotoTypes = function() {
101417                 return _allPhotoTypes;
101418             };
101419
101420             function showsLayer(id) {
101421                 var layer = context.layers().layer(id);
101422                 return layer && layer.supported() && layer.enabled();
101423             }
101424
101425             photos.shouldFilterByPhotoType = function() {
101426                 return showsLayer('mapillary') ||
101427                     (showsLayer('streetside') && showsLayer('openstreetcam'));
101428             };
101429
101430             photos.showsPhotoType = function(val) {
101431                 if (!photos.shouldFilterByPhotoType()) { return true; }
101432
101433                 return _shownPhotoTypes.indexOf(val) !== -1;
101434             };
101435
101436             photos.showsFlat = function() {
101437                 return photos.showsPhotoType('flat');
101438             };
101439
101440             photos.showsPanoramic = function() {
101441                 return photos.showsPhotoType('panoramic');
101442             };
101443
101444             photos.togglePhotoType = function(val) {
101445                 var index = _shownPhotoTypes.indexOf(val);
101446                 if (index !== -1) {
101447                     _shownPhotoTypes.splice(index, 1);
101448                 } else {
101449                     _shownPhotoTypes.push(val);
101450                 }
101451                 dispatch$1.call('change', this);
101452                 return photos;
101453             };
101454
101455             photos.init = function() {
101456                 var q = utilStringQs(window.location.hash.substring(1));
101457                 if (q.photo_overlay) {
101458                     var hashOverlayIDs = q.photo_overlay.replace(/;/g, ',').split(',');
101459                     hashOverlayIDs.forEach(function(id) {
101460                         var layer = context.layers().layer(id);
101461                         if (layer) { layer.enabled(true); }
101462                     });
101463                 }
101464
101465                 context.layers().on('change.rendererPhotos', updateStorage);
101466             };
101467
101468             return utilRebind(photos, dispatch$1, 'on');
101469         }
101470
101471         function uiAccount(context) {
101472             var osm = context.connection();
101473
101474
101475             function update(selection) {
101476                 if (!osm) { return; }
101477
101478                 if (!osm.authenticated()) {
101479                     selection.selectAll('#userLink, #logoutLink')
101480                         .classed('hide', true);
101481                     return;
101482                 }
101483
101484                 osm.userDetails(function(err, details) {
101485                     var userLink = selection.select('#userLink'),
101486                         logoutLink = selection.select('#logoutLink');
101487
101488                     userLink.html('');
101489                     logoutLink.html('');
101490
101491                     if (err || !details) { return; }
101492
101493                     selection.selectAll('#userLink, #logoutLink')
101494                         .classed('hide', false);
101495
101496                     // Link
101497                     userLink.append('a')
101498                         .attr('href', osm.userURL(details.display_name))
101499                         .attr('target', '_blank');
101500
101501                     // Add thumbnail or dont
101502                     if (details.image_url) {
101503                         userLink.append('img')
101504                             .attr('class', 'icon pre-text user-icon')
101505                             .attr('src', details.image_url);
101506                     } else {
101507                         userLink
101508                             .call(svgIcon('#iD-icon-avatar', 'pre-text light'));
101509                     }
101510
101511                     // Add user name
101512                     userLink.append('span')
101513                         .attr('class', 'label')
101514                         .text(details.display_name);
101515
101516                     logoutLink.append('a')
101517                         .attr('class', 'logout')
101518                         .attr('href', '#')
101519                         .text(t('logout'))
101520                         .on('click.logout', function() {
101521                             event.preventDefault();
101522                             osm.logout();
101523                         });
101524                 });
101525             }
101526
101527
101528             return function(selection) {
101529                 selection.append('li')
101530                     .attr('id', 'logoutLink')
101531                     .classed('hide', true);
101532
101533                 selection.append('li')
101534                     .attr('id', 'userLink')
101535                     .classed('hide', true);
101536
101537                 if (osm) {
101538                     osm.on('change.account', function() { update(selection); });
101539                     update(selection);
101540                 }
101541             };
101542         }
101543
101544         function uiAttribution(context) {
101545             var selection;
101546
101547
101548             function attribution(data, klass) {
101549                 var div = selection.selectAll('.' + klass)
101550                     .data([0]);
101551
101552                 div = div.enter()
101553                     .append('div')
101554                     .attr('class', klass)
101555                     .merge(div);
101556
101557
101558                 var background = div.selectAll('.attribution')
101559                     .data(data, function(d) { return d.name(); });
101560
101561                 background.exit()
101562                     .remove();
101563
101564                 background = background.enter()
101565                     .append('span')
101566                     .attr('class', 'attribution')
101567                     .each(function(d) {
101568                         if (d.terms_html) {
101569                             d3_select(this)
101570                                 .html(d.terms_html);
101571                             return;
101572                         }
101573
101574                         var selection;
101575                         if (d.terms_url) {
101576                             selection = d3_select(this)
101577                                 .append('a')
101578                                 .attr('href', d.terms_url)
101579                                 .attr('target', '_blank');
101580                         } else {
101581                             selection = d3_select(this);
101582                         }
101583
101584
101585                         var id_safe = d.id.replace(/\./g, '<TX_DOT>');
101586                         var terms_text = t('imagery.' + id_safe + '.attribution.text',
101587                             { default: d.terms_text || d.id || d.name() }
101588                         );
101589
101590                         if (d.icon && !d.overlay) {
101591                             selection
101592                                 .append('img')
101593                                 .attr('class', 'source-image')
101594                                 .attr('src', d.icon);
101595                         }
101596
101597                         selection
101598                             .append('span')
101599                             .attr('class', 'attribution-text')
101600                             .text(terms_text);
101601                     })
101602                     .merge(background);
101603
101604
101605                 var copyright = background.selectAll('.copyright-notice')
101606                     .data(function(d) {
101607                         var notice = d.copyrightNotices(context.map().zoom(), context.map().extent());
101608                         return notice ? [notice] : [];
101609                     });
101610
101611                 copyright.exit()
101612                     .remove();
101613
101614                 copyright = copyright.enter()
101615                     .append('span')
101616                     .attr('class', 'copyright-notice')
101617                     .merge(copyright);
101618
101619                 copyright
101620                     .text(String);
101621             }
101622
101623
101624             function update() {
101625                 attribution([context.background().baseLayerSource()], 'base-layer-attribution');
101626                 attribution(context.background().overlayLayerSources().filter(function (s) {
101627                     return s.validZoom(context.map().zoom());
101628                 }), 'overlay-layer-attribution');
101629             }
101630
101631
101632             return function(select) {
101633                 selection = select;
101634
101635                 context.background()
101636                     .on('change.attribution', update);
101637
101638                 context.map()
101639                     .on('move.attribution', throttle(update, 400, {leading: false}));
101640
101641                 update();
101642             };
101643         }
101644
101645         function uiBackgroundDisplayOptions(context) {
101646             var detected = utilDetect();
101647             var storedOpacity = context.storage('background-opacity');
101648             var minVal = 0.25;
101649             var maxVal = detected.cssfilters ? 2 : 1;
101650
101651             var sliders = detected.cssfilters
101652                 ? ['brightness', 'contrast', 'saturation', 'sharpness']
101653                 : ['brightness'];
101654
101655             var _options = {
101656                 brightness: (storedOpacity !== null ? (+storedOpacity) : 1),
101657                 contrast: 1,
101658                 saturation: 1,
101659                 sharpness: 1
101660             };
101661
101662             var _selection = d3_select(null);
101663
101664
101665             function clamp(x, min, max) {
101666                 return Math.max(min, Math.min(x, max));
101667             }
101668
101669
101670             function updateValue(d, val) {
101671                 if (!val && event && event.target) {
101672                     val = event.target.value;
101673                 }
101674
101675                 val = clamp(val, minVal, maxVal);
101676
101677                 _options[d] = val;
101678                 context.background()[d](val);
101679
101680                 if (d === 'brightness') {
101681                     context.storage('background-opacity', val);
101682                 }
101683
101684                 _selection
101685                     .call(render);
101686             }
101687
101688
101689             function render(selection) {
101690                 var container = selection.selectAll('.display-options-container')
101691                     .data([0]);
101692
101693                 var containerEnter = container.enter()
101694                     .append('div')
101695                     .attr('class', 'display-options-container controls-list');
101696
101697                 // add slider controls
101698                 var slidersEnter = containerEnter.selectAll('.display-control')
101699                     .data(sliders)
101700                     .enter()
101701                     .append('div')
101702                     .attr('class', function(d) { return 'display-control display-control-' + d; });
101703
101704                 slidersEnter
101705                     .append('h5')
101706                     .text(function(d) { return t('background.' + d); })
101707                     .append('span')
101708                     .attr('class', function(d) { return 'display-option-value display-option-value-' + d; });
101709
101710                 slidersEnter
101711                     .append('input')
101712                     .attr('class', function(d) { return 'display-option-input display-option-input-' + d; })
101713                     .attr('type', 'range')
101714                     .attr('min', minVal)
101715                     .attr('max', maxVal)
101716                     .attr('step', '0.05')
101717                     .on('input', function(d) {
101718                         var val = d3_select(this).property('value');
101719                         updateValue(d, val);
101720                     });
101721
101722                 slidersEnter
101723                     .append('button')
101724                     .attr('title', t('background.reset'))
101725                     .attr('class', function(d) { return 'display-option-reset display-option-reset-' + d; })
101726                     .on('click', function(d) {
101727                         if (event.button !== 0) { return; }
101728                         updateValue(d, 1);
101729                     })
101730                     .call(svgIcon('#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo')));
101731
101732                 // reset all button
101733                 containerEnter
101734                     .append('a')
101735                     .attr('class', 'display-option-resetlink')
101736                     .attr('href', '#')
101737                     .text(t('background.reset_all'))
101738                     .on('click', function() {
101739                         for (var i = 0; i < sliders.length; i++) {
101740                             updateValue(sliders[i],1);
101741                         }
101742                     });
101743
101744                 // update
101745                 container = containerEnter
101746                     .merge(container);
101747
101748                 container.selectAll('.display-option-input')
101749                     .property('value', function(d) { return _options[d]; });
101750
101751                 container.selectAll('.display-option-value')
101752                     .text(function(d) { return Math.floor(_options[d] * 100) + '%'; });
101753
101754                 container.selectAll('.display-option-reset')
101755                     .classed('disabled', function(d) { return _options[d] === 1; });
101756
101757                 // first time only, set brightness if needed
101758                 if (containerEnter.size() && _options.brightness !== 1) {
101759                     context.background().brightness(_options.brightness);
101760                 }
101761             }
101762
101763
101764             function backgroundDisplayOptions(selection) {
101765                 _selection = selection;
101766
101767                 selection
101768                     .call(uiDisclosure(context, 'background_display_options', true)
101769                         .title(t('background.display_options'))
101770                         .content(render)
101771                     );
101772             }
101773
101774
101775             return backgroundDisplayOptions;
101776         }
101777
101778         function uiBackgroundOffset(context) {
101779             var directions = [
101780                 ['right', [0.5, 0]],
101781                 ['top', [0, -0.5]],
101782                 ['left', [-0.5, 0]],
101783                 ['bottom', [0, 0.5]]
101784             ];
101785
101786
101787             function d3_eventCancel() {
101788                 event.stopPropagation();
101789                 event.preventDefault();
101790             }
101791
101792
101793             function updateValue() {
101794                 var meters = geoOffsetToMeters(context.background().offset());
101795                 var x = +meters[0].toFixed(2);
101796                 var y = +meters[1].toFixed(2);
101797
101798                 d3_selectAll('.nudge-inner-rect')
101799                     .select('input')
101800                     .classed('error', false)
101801                     .property('value', x + ', ' + y);
101802
101803                 d3_selectAll('.nudge-reset')
101804                     .classed('disabled', function() {
101805                         return (x === 0 && y === 0);
101806                     });
101807             }
101808
101809
101810             function resetOffset() {
101811                 context.background().offset([0, 0]);
101812                 updateValue();
101813             }
101814
101815
101816             function nudge(d) {
101817                 context.background().nudge(d, context.map().zoom());
101818                 updateValue();
101819             }
101820
101821
101822             function clickNudgeButton(d) {
101823                 var interval;
101824                 var timeout = window.setTimeout(function() {
101825                         interval = window.setInterval(nudge.bind(null, d), 100);
101826                     }, 500);
101827
101828                 function doneNudge() {
101829                     window.clearTimeout(timeout);
101830                     window.clearInterval(interval);
101831                     d3_select(window)
101832                         .on('mouseup.buttonoffset', null, true)
101833                         .on('mousedown.buttonoffset', null, true);
101834                 }
101835
101836                 d3_select(window)
101837                     .on('mouseup.buttonoffset', doneNudge, true)
101838                     .on('mousedown.buttonoffset', doneNudge, true);
101839
101840                 nudge(d);
101841             }
101842
101843
101844             function inputOffset() {
101845                 var input = d3_select(this);
101846                 var d = input.node().value;
101847
101848                 if (d === '') { return resetOffset(); }
101849
101850                 d = d.replace(/;/g, ',').split(',').map(function(n) {
101851                     // if n is NaN, it will always get mapped to false.
101852                     return !isNaN(n) && n;
101853                 });
101854
101855                 if (d.length !== 2 || !d[0] || !d[1]) {
101856                     input.classed('error', true);
101857                     return;
101858                 }
101859
101860                 context.background().offset(geoMetersToOffset(d));
101861                 updateValue();
101862             }
101863
101864
101865             function dragOffset() {
101866                 if (event.button !== 0) { return; }
101867
101868                 var origin = [event.clientX, event.clientY];
101869
101870                 context.container()
101871                     .append('div')
101872                     .attr('class', 'nudge-surface');
101873
101874                 d3_select(window)
101875                     .on('mousemove.offset', function() {
101876                         var latest = [event.clientX, event.clientY];
101877                         var d = [
101878                             -(origin[0] - latest[0]) / 4,
101879                             -(origin[1] - latest[1]) / 4
101880                         ];
101881
101882                         origin = latest;
101883                         nudge(d);
101884                     })
101885                     .on('mouseup.offset', function() {
101886                         if (event.button !== 0) { return; }
101887                         d3_selectAll('.nudge-surface')
101888                             .remove();
101889
101890                         d3_select(window)
101891                             .on('mousemove.offset', null)
101892                             .on('mouseup.offset', null);
101893                     });
101894             }
101895
101896
101897             function render(selection) {
101898                 var container = selection.selectAll('.nudge-container')
101899                     .data([0]);
101900
101901                 var containerEnter = container.enter()
101902                     .append('div')
101903                     .attr('class', 'nudge-container cf');
101904
101905                 containerEnter
101906                     .append('div')
101907                     .attr('class', 'nudge-instructions')
101908                     .text(t('background.offset'));
101909
101910                 var nudgeEnter = containerEnter
101911                     .append('div')
101912                     .attr('class', 'nudge-outer-rect')
101913                     .on('mousedown', dragOffset);
101914
101915                 nudgeEnter
101916                     .append('div')
101917                     .attr('class', 'nudge-inner-rect')
101918                     .append('input')
101919                     .on('change', inputOffset);
101920
101921                 containerEnter
101922                     .append('div')
101923                     .selectAll('button')
101924                     .data(directions).enter()
101925                     .append('button')
101926                     .attr('class', function(d) { return d[0] + ' nudge'; })
101927                     .on('contextmenu', d3_eventCancel)
101928                     .on('mousedown', function(d) {
101929                         if (event.button !== 0) { return; }
101930                         clickNudgeButton(d[1]);
101931                     });
101932
101933                 containerEnter
101934                     .append('button')
101935                     .attr('title', t('background.reset'))
101936                     .attr('class', 'nudge-reset disabled')
101937                     .on('contextmenu', d3_eventCancel)
101938                     .on('click', function() {
101939                         if (event.button !== 0) { return; }
101940                         resetOffset();
101941                     })
101942                     .call(svgIcon('#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo')));
101943
101944                 updateValue();
101945             }
101946
101947
101948             function backgroundOffset(selection) {
101949                 selection
101950                     .call(uiDisclosure(context, 'background_offset', false)
101951                         .title(t('background.fix_misalignment'))
101952                         .content(render)
101953                     );
101954             }
101955
101956
101957             context.background()
101958                 .on('change.backgroundOffset-update', updateValue);
101959
101960             return backgroundOffset;
101961         }
101962
101963         // import { utilGetDimensions } from '../util/dimensions';
101964
101965
101966         function uiMapInMap(context) {
101967
101968             function mapInMap(selection) {
101969                 var backgroundLayer = rendererTileLayer(context);
101970                 var overlayLayers = {};
101971                 var projection = geoRawMercator();
101972                 var dataLayer = svgData(projection, context).showLabels(false);
101973                 var debugLayer = svgDebug(projection, context);
101974                 var zoom = d3_zoom()
101975                     .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(24)])
101976                     .on('start', zoomStarted)
101977                     .on('zoom', zoomed)
101978                     .on('end', zoomEnded);
101979
101980                 var wrap = d3_select(null);
101981                 var tiles = d3_select(null);
101982                 var viewport = d3_select(null);
101983
101984                 var _isTransformed = false;
101985                 var _isHidden = true;
101986                 var _skipEvents = false;
101987                 var _gesture = null;
101988                 var _zDiff = 6;    // by default, minimap renders at (main zoom - 6)
101989                 var _dMini;        // dimensions of minimap
101990                 var _cMini;        // center pixel of minimap
101991                 var _tStart;       // transform at start of gesture
101992                 var _tCurr;        // transform at most recent event
101993                 var _timeoutID;
101994
101995
101996                 function zoomStarted() {
101997                     if (_skipEvents) { return; }
101998                     _tStart = _tCurr = projection.transform();
101999                     _gesture = null;
102000                 }
102001
102002
102003                 function zoomed() {
102004                     if (_skipEvents) { return; }
102005
102006                     var x = event.transform.x;
102007                     var y = event.transform.y;
102008                     var k = event.transform.k;
102009                     var isZooming = (k !== _tStart.k);
102010                     var isPanning = (x !== _tStart.x || y !== _tStart.y);
102011
102012                     if (!isZooming && !isPanning) {
102013                         return;  // no change
102014                     }
102015
102016                     // lock in either zooming or panning, don't allow both in minimap.
102017                     if (!_gesture) {
102018                         _gesture = isZooming ? 'zoom' : 'pan';
102019                     }
102020
102021                     var tMini = projection.transform();
102022                     var tX, tY, scale;
102023
102024                     if (_gesture === 'zoom') {
102025                         scale = k / tMini.k;
102026                         tX = (_cMini[0] / scale - _cMini[0]) * scale;
102027                         tY = (_cMini[1] / scale - _cMini[1]) * scale;
102028                     } else {
102029                         k = tMini.k;
102030                         scale = 1;
102031                         tX = x - tMini.x;
102032                         tY = y - tMini.y;
102033                     }
102034
102035                     utilSetTransform(tiles, tX, tY, scale);
102036                     utilSetTransform(viewport, 0, 0, scale);
102037                     _isTransformed = true;
102038                     _tCurr = identity$8.translate(x, y).scale(k);
102039
102040                     var zMain = geoScaleToZoom(context.projection.scale());
102041                     var zMini = geoScaleToZoom(k);
102042
102043                     _zDiff = zMain - zMini;
102044
102045                     queueRedraw();
102046                 }
102047
102048
102049                 function zoomEnded() {
102050                     if (_skipEvents) { return; }
102051                     if (_gesture !== 'pan') { return; }
102052
102053                     updateProjection();
102054                     _gesture = null;
102055                     context.map().center(projection.invert(_cMini));   // recenter main map..
102056                 }
102057
102058
102059                 function updateProjection() {
102060                     var loc = context.map().center();
102061                     var tMain = context.projection.transform();
102062                     var zMain = geoScaleToZoom(tMain.k);
102063                     var zMini = Math.max(zMain - _zDiff, 0.5);
102064                     var kMini = geoZoomToScale(zMini);
102065
102066                     projection
102067                         .translate([tMain.x, tMain.y])
102068                         .scale(kMini);
102069
102070                     var point = projection(loc);
102071                     var mouse = (_gesture === 'pan') ? geoVecSubtract([_tCurr.x, _tCurr.y], [_tStart.x, _tStart.y]) : [0, 0];
102072                     var xMini = _cMini[0] - point[0] + tMain.x + mouse[0];
102073                     var yMini = _cMini[1] - point[1] + tMain.y + mouse[1];
102074
102075                     projection
102076                         .translate([xMini, yMini])
102077                         .clipExtent([[0, 0], _dMini]);
102078
102079                     _tCurr = projection.transform();
102080
102081                     if (_isTransformed) {
102082                         utilSetTransform(tiles, 0, 0);
102083                         utilSetTransform(viewport, 0, 0);
102084                         _isTransformed = false;
102085                     }
102086
102087                     zoom
102088                         .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(zMain - 3)]);
102089
102090                     _skipEvents = true;
102091                     wrap.call(zoom.transform, _tCurr);
102092                     _skipEvents = false;
102093                 }
102094
102095
102096                 function redraw() {
102097                     clearTimeout(_timeoutID);
102098                     if (_isHidden) { return; }
102099
102100                     updateProjection();
102101                     var zMini = geoScaleToZoom(projection.scale());
102102
102103                     // setup tile container
102104                     tiles = wrap
102105                         .selectAll('.map-in-map-tiles')
102106                         .data([0]);
102107
102108                     tiles = tiles.enter()
102109                         .append('div')
102110                         .attr('class', 'map-in-map-tiles')
102111                         .merge(tiles);
102112
102113                     // redraw background
102114                     backgroundLayer
102115                         .source(context.background().baseLayerSource())
102116                         .projection(projection)
102117                         .dimensions(_dMini);
102118
102119                     var background = tiles
102120                         .selectAll('.map-in-map-background')
102121                         .data([0]);
102122
102123                     background.enter()
102124                         .append('div')
102125                         .attr('class', 'map-in-map-background')
102126                         .merge(background)
102127                         .call(backgroundLayer);
102128
102129
102130                     // redraw overlay
102131                     var overlaySources = context.background().overlayLayerSources();
102132                     var activeOverlayLayers = [];
102133                     for (var i = 0; i < overlaySources.length; i++) {
102134                         if (overlaySources[i].validZoom(zMini)) {
102135                             if (!overlayLayers[i]) { overlayLayers[i] = rendererTileLayer(context); }
102136                             activeOverlayLayers.push(overlayLayers[i]
102137                                 .source(overlaySources[i])
102138                                 .projection(projection)
102139                                 .dimensions(_dMini));
102140                         }
102141                     }
102142
102143                     var overlay = tiles
102144                         .selectAll('.map-in-map-overlay')
102145                         .data([0]);
102146
102147                     overlay = overlay.enter()
102148                         .append('div')
102149                         .attr('class', 'map-in-map-overlay')
102150                         .merge(overlay);
102151
102152
102153                     var overlays = overlay
102154                         .selectAll('div')
102155                         .data(activeOverlayLayers, function(d) { return d.source().name(); });
102156
102157                     overlays.exit()
102158                         .remove();
102159
102160                     overlays = overlays.enter()
102161                         .append('div')
102162                         .merge(overlays)
102163                         .each(function(layer) { d3_select(this).call(layer); });
102164
102165
102166                     var dataLayers = tiles
102167                         .selectAll('.map-in-map-data')
102168                         .data([0]);
102169
102170                     dataLayers.exit()
102171                         .remove();
102172
102173                     dataLayers = dataLayers.enter()
102174                         .append('svg')
102175                         .attr('class', 'map-in-map-data')
102176                         .merge(dataLayers)
102177                         .call(dataLayer)
102178                         .call(debugLayer);
102179
102180
102181                     // redraw viewport bounding box
102182                     if (_gesture !== 'pan') {
102183                         var getPath = d3_geoPath(projection);
102184                         var bbox = { type: 'Polygon', coordinates: [context.map().extent().polygon()] };
102185
102186                         viewport = wrap.selectAll('.map-in-map-viewport')
102187                             .data([0]);
102188
102189                         viewport = viewport.enter()
102190                             .append('svg')
102191                             .attr('class', 'map-in-map-viewport')
102192                             .merge(viewport);
102193
102194
102195                         var path = viewport.selectAll('.map-in-map-bbox')
102196                             .data([bbox]);
102197
102198                         path.enter()
102199                             .append('path')
102200                             .attr('class', 'map-in-map-bbox')
102201                             .merge(path)
102202                             .attr('d', getPath)
102203                             .classed('thick', function(d) { return getPath.area(d) < 30; });
102204                     }
102205                 }
102206
102207
102208                 function queueRedraw() {
102209                     clearTimeout(_timeoutID);
102210                     _timeoutID = setTimeout(function() { redraw(); }, 750);
102211                 }
102212
102213
102214                 function toggle() {
102215                     if (event) { event.preventDefault(); }
102216
102217                     _isHidden = !_isHidden;
102218
102219                     d3_select('.minimap-toggle-item')
102220                         .classed('active', !_isHidden)
102221                         .select('input')
102222                         .property('checked', !_isHidden);
102223
102224                     if (_isHidden) {
102225                         wrap
102226                             .style('display', 'block')
102227                             .style('opacity', '1')
102228                             .transition()
102229                             .duration(200)
102230                             .style('opacity', '0')
102231                             .on('end', function() {
102232                                 selection.selectAll('.map-in-map')
102233                                     .style('display', 'none');
102234                             });
102235                     } else {
102236                         wrap
102237                             .style('display', 'block')
102238                             .style('opacity', '0')
102239                             .transition()
102240                             .duration(200)
102241                             .style('opacity', '1')
102242                             .on('end', function() {
102243                                 redraw();
102244                             });
102245                     }
102246                 }
102247
102248
102249                 uiMapInMap.toggle = toggle;
102250
102251                 wrap = selection.selectAll('.map-in-map')
102252                     .data([0]);
102253
102254                 wrap = wrap.enter()
102255                     .append('div')
102256                     .attr('class', 'map-in-map')
102257                     .style('display', (_isHidden ? 'none' : 'block'))
102258                     .call(zoom)
102259                     .on('dblclick.zoom', null)
102260                     .merge(wrap);
102261
102262                 // reflow warning: Hardcode dimensions - currently can't resize it anyway..
102263                 _dMini = [200,150]; //utilGetDimensions(wrap);
102264                 _cMini = geoVecScale(_dMini, 0.5);
102265
102266                 context.map()
102267                     .on('drawn.map-in-map', function(drawn) {
102268                         if (drawn.full === true) {
102269                             redraw();
102270                         }
102271                     });
102272
102273                 redraw();
102274
102275                 context.keybinding()
102276                     .on(t('background.minimap.key'), toggle);
102277             }
102278
102279             return mapInMap;
102280         }
102281
102282         function uiConfirm(selection) {
102283             var modalSelection = uiModal(selection);
102284
102285             modalSelection.select('.modal')
102286                 .classed('modal-alert', true);
102287
102288             var section = modalSelection.select('.content');
102289
102290             section.append('div')
102291                 .attr('class', 'modal-section header');
102292
102293             section.append('div')
102294                 .attr('class', 'modal-section message-text');
102295
102296             var buttons = section.append('div')
102297                 .attr('class', 'modal-section buttons cf');
102298
102299
102300             modalSelection.okButton = function() {
102301                 buttons
102302                     .append('button')
102303                     .attr('class', 'button ok-button action')
102304                     .on('click.confirm', function() {
102305                         modalSelection.remove();
102306                     })
102307                     .text(t('confirm.okay'))
102308                     .node()
102309                     .focus();
102310
102311                 return modalSelection;
102312             };
102313
102314
102315             return modalSelection;
102316         }
102317
102318         function uiSettingsCustomBackground(context) {
102319             var dispatch$1 = dispatch('change');
102320
102321             function render(selection) {
102322                 // keep separate copies of original and current settings
102323                 var _origSettings = {
102324                     template: context.storage('background-custom-template')
102325                 };
102326                 var _currSettings = {
102327                     template: context.storage('background-custom-template')
102328                 };
102329
102330                 var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png';
102331                 var modal = uiConfirm(selection).okButton();
102332
102333                 modal
102334                     .classed('settings-modal settings-custom-background', true);
102335
102336                 modal.select('.modal-section.header')
102337                     .append('h3')
102338                     .text(t('settings.custom_background.header'));
102339
102340
102341                 var textSection = modal.select('.modal-section.message-text');
102342
102343                 textSection
102344                     .append('pre')
102345                     .attr('class', 'instructions-template')
102346                     .text(t('settings.custom_background.instructions', { example: example }));
102347
102348                 textSection
102349                     .append('textarea')
102350                     .attr('class', 'field-template')
102351                     .attr('placeholder', t('settings.custom_background.template.placeholder'))
102352                     .call(utilNoAuto)
102353                     .property('value', _currSettings.template);
102354
102355
102356                 // insert a cancel button
102357                 var buttonSection = modal.select('.modal-section.buttons');
102358
102359                 buttonSection
102360                     .insert('button', '.ok-button')
102361                     .attr('class', 'button cancel-button secondary-action')
102362                     .text(t('confirm.cancel'));
102363
102364
102365                 buttonSection.select('.cancel-button')
102366                     .on('click.cancel', clickCancel);
102367
102368                 buttonSection.select('.ok-button')
102369                     .attr('disabled', isSaveDisabled)
102370                     .on('click.save', clickSave);
102371
102372
102373                 function isSaveDisabled() {
102374                     return null;
102375                 }
102376
102377
102378                 // restore the original template
102379                 function clickCancel() {
102380                     textSection.select('.field-template').property('value', _origSettings.template);
102381                     context.storage('background-custom-template', _origSettings.template);
102382                     this.blur();
102383                     modal.close();
102384                 }
102385
102386                 // accept the current template
102387                 function clickSave() {
102388                     _currSettings.template = textSection.select('.field-template').property('value');
102389                     context.storage('background-custom-template', _currSettings.template);
102390                     this.blur();
102391                     modal.close();
102392                     dispatch$1.call('change', this, _currSettings);
102393                 }
102394             }
102395
102396             return utilRebind(render, dispatch$1, 'on');
102397         }
102398
102399         function uiBackground(context) {
102400             var key = t('background.key');
102401
102402             var _pane = d3_select(null);
102403
102404             var _customSource = context.background().findSource('custom');
102405             var _previousBackground = context.background().findSource(context.storage('background-last-used-toggle'));
102406
102407             var _backgroundList = d3_select(null);
102408             var _overlayList = d3_select(null);
102409             var _displayOptionsContainer = d3_select(null);
102410             var _offsetContainer = d3_select(null);
102411
102412             var backgroundDisplayOptions = uiBackgroundDisplayOptions(context);
102413             var backgroundOffset = uiBackgroundOffset(context);
102414
102415             var settingsCustomBackground = uiSettingsCustomBackground(context)
102416                 .on('change', customChanged);
102417
102418
102419             function setTooltips(selection) {
102420                 selection.each(function(d, i, nodes) {
102421                     var item = d3_select(this).select('label');
102422                     var span = item.select('span');
102423                     var placement = (i < nodes.length / 2) ? 'bottom' : 'top';
102424                     var description = d.description();
102425                     var isOverflowing = (span.property('clientWidth') !== span.property('scrollWidth'));
102426
102427                     item.call(tooltip().destroyAny);
102428
102429                     if (d === _previousBackground) {
102430                         item.call(tooltip()
102431                             .placement(placement)
102432                             .html(true)
102433                             .title(function() {
102434                                 var tip = '<div>' + t('background.switch') + '</div>';
102435                                 return uiTooltipHtml(tip, uiCmd('⌘' + key));
102436                             })
102437                         );
102438                     } else if (description || isOverflowing) {
102439                         item.call(tooltip()
102440                             .placement(placement)
102441                             .title(description || d.name())
102442                         );
102443                     }
102444                 });
102445             }
102446
102447
102448             function updateLayerSelections(selection) {
102449                 function active(d) {
102450                     return context.background().showsLayer(d);
102451                 }
102452
102453                 selection.selectAll('li')
102454                     .classed('active', active)
102455                     .classed('switch', function(d) { return d === _previousBackground; })
102456                     .call(setTooltips)
102457                     .selectAll('input')
102458                     .property('checked', active);
102459             }
102460
102461
102462             function chooseBackground(d) {
102463                 if (d.id === 'custom' && !d.template()) {
102464                     return editCustom();
102465                 }
102466
102467                 event.preventDefault();
102468                 _previousBackground = context.background().baseLayerSource();
102469                 context.storage('background-last-used-toggle', _previousBackground.id);
102470                 context.storage('background-last-used', d.id);
102471                 context.background().baseLayerSource(d);
102472                 _backgroundList.call(updateLayerSelections);
102473                 document.activeElement.blur();
102474             }
102475
102476
102477             function customChanged(d) {
102478                 if (d && d.template) {
102479                     _customSource.template(d.template);
102480                     chooseBackground(_customSource);
102481                 } else {
102482                     _customSource.template('');
102483                     chooseBackground(context.background().findSource('none'));
102484                 }
102485             }
102486
102487
102488             function editCustom() {
102489                 event.preventDefault();
102490                 context.container()
102491                     .call(settingsCustomBackground);
102492             }
102493
102494
102495             function chooseOverlay(d) {
102496                 event.preventDefault();
102497                 context.background().toggleOverlayLayer(d);
102498                 _overlayList.call(updateLayerSelections);
102499                 document.activeElement.blur();
102500             }
102501
102502
102503             function drawListItems(layerList, type, change, filter) {
102504                 var sources = context.background()
102505                     .sources(context.map().extent(), context.map().zoom(), true)
102506                     .filter(filter);
102507
102508                 var layerLinks = layerList.selectAll('li')
102509                     .data(sources, function(d) { return d.name(); });
102510
102511                 layerLinks.exit()
102512                     .remove();
102513
102514                 var enter = layerLinks.enter()
102515                     .append('li')
102516                     .classed('layer-custom', function(d) { return d.id === 'custom'; })
102517                     .classed('best', function(d) { return d.best(); });
102518
102519                 var label = enter
102520                     .append('label');
102521
102522                 label
102523                     .append('input')
102524                     .attr('type', type)
102525                     .attr('name', 'layers')
102526                     .on('change', change);
102527
102528                 label
102529                     .append('span')
102530                     .text(function(d) { return d.name(); });
102531
102532                 enter.filter(function(d) { return d.id === 'custom'; })
102533                     .append('button')
102534                     .attr('class', 'layer-browse')
102535                     .call(tooltip()
102536                         .title(t('settings.custom_background.tooltip'))
102537                         .placement((textDirection === 'rtl') ? 'right' : 'left')
102538                     )
102539                     .on('click', editCustom)
102540                     .call(svgIcon('#iD-icon-more'));
102541
102542                 enter.filter(function(d) { return d.best(); })
102543                     .append('div')
102544                     .attr('class', 'best')
102545                     .call(tooltip()
102546                         .title(t('background.best_imagery'))
102547                         .placement((textDirection === 'rtl') ? 'right' : 'left')
102548                     )
102549                     .append('span')
102550                     .html('&#9733;');
102551
102552
102553                 layerList.selectAll('li')
102554                     .sort(sortSources);
102555
102556                 layerList
102557                     .call(updateLayerSelections);
102558
102559
102560                 function sortSources(a, b) {
102561                     return a.best() && !b.best() ? -1
102562                         : b.best() && !a.best() ? 1
102563                         : d3_descending(a.area(), b.area()) || d3_ascending(a.name(), b.name()) || 0;
102564                 }
102565             }
102566
102567
102568             function renderBackgroundList(selection) {
102569
102570                 // the background list
102571                 var container = selection.selectAll('.layer-background-list')
102572                     .data([0]);
102573
102574                 _backgroundList = container.enter()
102575                     .append('ul')
102576                     .attr('class', 'layer-list layer-background-list')
102577                     .attr('dir', 'auto')
102578                     .merge(container);
102579
102580
102581                 // add minimap toggle below list
102582                 var bgExtrasListEnter = selection.selectAll('.bg-extras-list')
102583                     .data([0])
102584                     .enter()
102585                     .append('ul')
102586                     .attr('class', 'layer-list bg-extras-list');
102587
102588                 var minimapLabelEnter = bgExtrasListEnter
102589                     .append('li')
102590                     .attr('class', 'minimap-toggle-item')
102591                     .append('label')
102592                     .call(tooltip()
102593                         .html(true)
102594                         .title(uiTooltipHtml(t('background.minimap.tooltip'), t('background.minimap.key')))
102595                         .placement('top')
102596                     );
102597
102598                 minimapLabelEnter
102599                     .append('input')
102600                     .attr('type', 'checkbox')
102601                     .on('change', function() {
102602                         event.preventDefault();
102603                         uiMapInMap.toggle();
102604                     });
102605
102606                 minimapLabelEnter
102607                     .append('span')
102608                     .text(t('background.minimap.description'));
102609
102610
102611                 var panelLabelEnter = bgExtrasListEnter
102612                     .append('li')
102613                     .attr('class', 'background-panel-toggle-item')
102614                     .append('label')
102615                     .call(tooltip()
102616                         .html(true)
102617                         .title(uiTooltipHtml(t('background.panel.tooltip'), uiCmd('⌘⇧' + t('info_panels.background.key'))))
102618                         .placement('top')
102619                     );
102620
102621                 panelLabelEnter
102622                     .append('input')
102623                     .attr('type', 'checkbox')
102624                     .on('change', function() {
102625                         event.preventDefault();
102626                         context.ui().info.toggle('background');
102627                     });
102628
102629                 panelLabelEnter
102630                     .append('span')
102631                     .text(t('background.panel.description'));
102632
102633
102634                 // "Info / Report a Problem" link
102635                 selection.selectAll('.imagery-faq')
102636                     .data([0])
102637                     .enter()
102638                     .append('div')
102639                     .attr('class', 'imagery-faq')
102640                     .append('a')
102641                     .attr('target', '_blank')
102642                     .call(svgIcon('#iD-icon-out-link', 'inline'))
102643                     .attr('href', 'https://github.com/openstreetmap/iD/blob/master/FAQ.md#how-can-i-report-an-issue-with-background-imagery')
102644                     .append('span')
102645                     .text(t('background.imagery_problem_faq'));
102646
102647                 updateBackgroundList();
102648             }
102649
102650
102651             function renderOverlayList(selection) {
102652                 var container = selection.selectAll('.layer-overlay-list')
102653                     .data([0]);
102654
102655                 _overlayList = container.enter()
102656                     .append('ul')
102657                     .attr('class', 'layer-list layer-overlay-list')
102658                     .attr('dir', 'auto')
102659                     .merge(container);
102660
102661                 updateOverlayList();
102662             }
102663
102664             function updateBackgroundList() {
102665                 _backgroundList
102666                     .call(drawListItems, 'radio', chooseBackground, function(d) { return !d.isHidden() && !d.overlay; });
102667             }
102668
102669             function updateOverlayList() {
102670                 _overlayList
102671                     .call(drawListItems, 'checkbox', chooseOverlay, function(d) { return !d.isHidden() && d.overlay; });
102672             }
102673
102674
102675             function update() {
102676                 if (!_pane.select('.disclosure-wrap-background_list').classed('hide')) {
102677                     updateBackgroundList();
102678                 }
102679
102680                 if (!_pane.select('.disclosure-wrap-overlay_list').classed('hide')) {
102681                     updateOverlayList();
102682                 }
102683
102684                 _displayOptionsContainer
102685                     .call(backgroundDisplayOptions);
102686
102687                 _offsetContainer
102688                     .call(backgroundOffset);
102689             }
102690
102691
102692             function quickSwitch() {
102693                 if (event) {
102694                     event.stopImmediatePropagation();
102695                     event.preventDefault();
102696                 }
102697                 if (_previousBackground) {
102698                     chooseBackground(_previousBackground);
102699                 }
102700             }
102701
102702             var paneTooltip = tooltip()
102703                 .placement((textDirection === 'rtl') ? 'right' : 'left')
102704                 .html(true)
102705                 .title(uiTooltipHtml(t('background.description'), key));
102706
102707             uiBackground.togglePane = function() {
102708                 if (event) { event.preventDefault(); }
102709                 paneTooltip.hide();
102710                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
102711             };
102712
102713             function hidePane() {
102714                 context.ui().togglePanes();
102715             }
102716
102717             uiBackground.renderToggleButton = function(selection) {
102718
102719                 selection
102720                     .append('button')
102721                     .on('click', uiBackground.togglePane)
102722                     .call(svgIcon('#iD-icon-layers', 'light'))
102723                     .call(paneTooltip);
102724             };
102725
102726             uiBackground.renderPane = function(selection) {
102727
102728                 _pane = selection
102729                     .append('div')
102730                     .attr('class', 'fillL map-pane background-pane hide')
102731                     .attr('pane', 'background');
102732
102733
102734                 var heading = _pane
102735                     .append('div')
102736                     .attr('class', 'pane-heading');
102737
102738                 heading
102739                     .append('h2')
102740                     .text(t('background.title'));
102741
102742                 heading
102743                     .append('button')
102744                     .on('click', hidePane)
102745                     .call(svgIcon('#iD-icon-close'));
102746
102747
102748                 var content = _pane
102749                     .append('div')
102750                     .attr('class', 'pane-content');
102751
102752                 // background list
102753                 content
102754                     .append('div')
102755                     .attr('class', 'background-background-list-container')
102756                     .call(uiDisclosure(context, 'background_list', true)
102757                         .title(t('background.backgrounds'))
102758                         .content(renderBackgroundList)
102759                     );
102760
102761                 // overlay list
102762                 content
102763                     .append('div')
102764                     .attr('class', 'background-overlay-list-container')
102765                     .call(uiDisclosure(context, 'overlay_list', true)
102766                         .title(t('background.overlays'))
102767                         .content(renderOverlayList)
102768                     );
102769
102770                 // display options
102771                 _displayOptionsContainer = content
102772                     .append('div')
102773                     .attr('class', 'background-display-options');
102774
102775                 // offset controls
102776                 _offsetContainer = content
102777                     .append('div')
102778                     .attr('class', 'background-offset');
102779
102780
102781                 // add listeners
102782                 context.map()
102783                     .on('move.background-update',
102784                         debounce(function() { window.requestIdleCallback(update); }, 1000)
102785                     );
102786
102787
102788                 context.background()
102789                     .on('change.background-update', update);
102790
102791
102792                 update();
102793
102794                 context.keybinding()
102795                     .on(key, uiBackground.togglePane)
102796                     .on(uiCmd('⌘' + key), quickSwitch);
102797             };
102798
102799             return uiBackground;
102800         }
102801
102802         function uiContributors(context) {
102803             var osm = context.connection(),
102804                 debouncedUpdate = debounce(function() { update(); }, 1000),
102805                 limit = 4,
102806                 hidden = false,
102807                 wrap = d3_select(null);
102808
102809
102810             function update() {
102811                 if (!osm) { return; }
102812
102813                 var users = {},
102814                     entities = context.intersects(context.map().extent());
102815
102816                 entities.forEach(function(entity) {
102817                     if (entity && entity.user) { users[entity.user] = true; }
102818                 });
102819
102820                 var u = Object.keys(users),
102821                     subset = u.slice(0, u.length > limit ? limit - 1 : limit);
102822
102823                 wrap.html('')
102824                     .call(svgIcon('#iD-icon-nearby', 'pre-text light'));
102825
102826                 var userList = d3_select(document.createElement('span'));
102827
102828                 userList.selectAll()
102829                     .data(subset)
102830                     .enter()
102831                     .append('a')
102832                     .attr('class', 'user-link')
102833                     .attr('href', function(d) { return osm.userURL(d); })
102834                     .attr('target', '_blank')
102835                     .text(String);
102836
102837                 if (u.length > limit) {
102838                     var count = d3_select(document.createElement('span'));
102839
102840                     count.append('a')
102841                         .attr('target', '_blank')
102842                         .attr('href', function() {
102843                             return osm.changesetsURL(context.map().center(), context.map().zoom());
102844                         })
102845                         .text(u.length - limit + 1);
102846
102847                     wrap.append('span')
102848                         .html(t('contributors.truncated_list', { users: userList.html(), count: count.html() }));
102849
102850                 } else {
102851                     wrap.append('span')
102852                         .html(t('contributors.list', { users: userList.html() }));
102853                 }
102854
102855                 if (!u.length) {
102856                     hidden = true;
102857                     wrap
102858                         .transition()
102859                         .style('opacity', 0);
102860
102861                 } else if (hidden) {
102862                     wrap
102863                         .transition()
102864                         .style('opacity', 1);
102865                 }
102866             }
102867
102868
102869             return function(selection) {
102870                 if (!osm) { return; }
102871                 wrap = selection;
102872                 update();
102873
102874                 osm.on('loaded.contributors', debouncedUpdate);
102875                 context.map().on('move.contributors', debouncedUpdate);
102876             };
102877         }
102878
102879         function uiFeatureInfo(context) {
102880             function update(selection) {
102881                 var features = context.features();
102882                 var stats = features.stats();
102883                 var count = 0;
102884                 var hiddenList = features.hidden().map(function(k) {
102885                     if (stats[k]) {
102886                         count += stats[k];
102887                         return String(stats[k]) + ' ' + t('feature.' + k + '.description');
102888                     }
102889                 }).filter(Boolean);
102890
102891                 selection.html('');
102892
102893                 if (hiddenList.length) {
102894                     var tooltipBehavior = tooltip()
102895                         .placement('top')
102896                         .html(true)
102897                         .title(function() {
102898                             return uiTooltipHtml(hiddenList.join('<br/>'));
102899                         });
102900
102901                     selection.append('a')
102902                         .attr('class', 'chip')
102903                         .attr('href', '#')
102904                         .attr('tabindex', -1)
102905                         .html(t('feature_info.hidden_warning', { count: count }))
102906                         .call(tooltipBehavior)
102907                         .on('click', function() {
102908                             tooltipBehavior.hide();
102909                             event.preventDefault();
102910                             // open the Map Data pane
102911                             context.ui().togglePanes(d3_select('.map-panes .map-data-pane'));
102912                         });
102913                 }
102914
102915                 selection
102916                     .classed('hide', !hiddenList.length);
102917             }
102918
102919
102920             return function(selection) {
102921                 update(selection);
102922
102923                 context.features().on('change.feature_info', function() {
102924                     update(selection);
102925                 });
102926             };
102927         }
102928
102929         function uiFullScreen(context) {
102930             var element = context.container().node();
102931             // var button = d3_select(null);
102932
102933
102934             function getFullScreenFn() {
102935                 if (element.requestFullscreen) {
102936                     return element.requestFullscreen;
102937                 } else if (element.msRequestFullscreen) {
102938                     return element.msRequestFullscreen;
102939                 } else if (element.mozRequestFullScreen) {
102940                     return element.mozRequestFullScreen;
102941                 } else if (element.webkitRequestFullscreen) {
102942                     return element.webkitRequestFullscreen;
102943                 }
102944             }
102945
102946
102947             function getExitFullScreenFn() {
102948                 if (document.exitFullscreen) {
102949                     return document.exitFullscreen;
102950                 } else if (document.msExitFullscreen) {
102951                     return document.msExitFullscreen;
102952                 } else if (document.mozCancelFullScreen) {
102953                     return document.mozCancelFullScreen;
102954                 } else if (document.webkitExitFullscreen) {
102955                     return document.webkitExitFullscreen;
102956                 }
102957             }
102958
102959
102960             function isFullScreen() {
102961                 return document.fullscreenElement ||
102962                     document.mozFullScreenElement ||
102963                     document.webkitFullscreenElement ||
102964                     document.msFullscreenElement;
102965             }
102966
102967
102968             function isSupported() {
102969                 return !!getFullScreenFn();
102970             }
102971
102972
102973             function fullScreen() {
102974                 event.preventDefault();
102975                 if (!isFullScreen()) {
102976                     // button.classed('active', true);
102977                     getFullScreenFn().apply(element);
102978                 } else {
102979                     // button.classed('active', false);
102980                     getExitFullScreenFn().apply(document);
102981                 }
102982             }
102983
102984
102985             return function() { // selection) {
102986                 if (!isSupported()) { return; }
102987
102988                 // button = selection.append('button')
102989                 //     .attr('title', t('full_screen'))
102990                 //     .attr('tabindex', -1)
102991                 //     .on('click', fullScreen)
102992                 //     .call(tooltip);
102993
102994                 // button.append('span')
102995                 //     .attr('class', 'icon full-screen');
102996
102997                 var detected = utilDetect();
102998                 var keys = (detected.os === 'mac' ? [uiCmd('⌃⌘F'), 'f11'] : ['f11']);
102999                 context.keybinding().on(keys, fullScreen);
103000             };
103001         }
103002
103003         function uiGeolocate(context) {
103004             var geoOptions = { enableHighAccuracy: false, timeout: 6000 /* 6sec */ };
103005             var locating = uiLoading(context).message(t('geolocate.locating')).blocking(true);
103006             var layer = context.layers().layer('geolocate');
103007             var _position;
103008             var _extent;
103009             var _timeoutID;
103010
103011
103012             function click() {
103013                 if (context.inIntro()) { return; }
103014                 context.enter(modeBrowse(context));
103015                 if (!layer.enabled()) {
103016                     if (!_position) {
103017                         context.container().call(locating);
103018                         navigator.geolocation.getCurrentPosition(success, error, geoOptions);
103019                     } else {
103020                         zoomTo();
103021                     }
103022                 } else {
103023                     layer.enabled(null, false);
103024                 }
103025                 // This timeout ensures that we still call finish() even if
103026                 // the user declines to share their location in Firefox
103027                 _timeoutID = setTimeout(finish, 10000 /* 10sec */ );
103028             }
103029
103030             function zoomTo() {
103031                 var map = context.map();
103032                 layer.enabled(_position, true);
103033                 map.centerZoomEase(_extent.center(), Math.min(20, map.extentZoom(_extent)));
103034             }
103035
103036
103037             function success(geolocation) {
103038                 _position = geolocation;
103039                 var coords = _position.coords;
103040                 _extent = geoExtent([coords.longitude, coords.latitude]).padByMeters(coords.accuracy);
103041                 zoomTo();
103042                 finish();
103043             }
103044
103045
103046             function error() {
103047                 finish();
103048             }
103049
103050
103051             function finish() {
103052                 locating.close();  // unblock ui
103053                 if (_timeoutID) { clearTimeout(_timeoutID); }
103054                 _timeoutID = undefined;
103055             }
103056
103057
103058             return function(selection) {
103059                 if (!navigator.geolocation) { return; }
103060
103061                 selection
103062                     .append('button')
103063                     .attr('title', t('geolocate.title'))
103064                     .on('click', click)
103065                     .call(svgIcon('#iD-icon-geolocate', 'light'))
103066                     .call(tooltip()
103067                         .placement((textDirection === 'rtl') ? 'right' : 'left'));
103068             };
103069         }
103070
103071         var defaults$1 = createCommonjsModule(function (module) {
103072         function getDefaults() {
103073           return {
103074             baseUrl: null,
103075             breaks: false,
103076             gfm: true,
103077             headerIds: true,
103078             headerPrefix: '',
103079             highlight: null,
103080             langPrefix: 'language-',
103081             mangle: true,
103082             pedantic: false,
103083             renderer: null,
103084             sanitize: false,
103085             sanitizer: null,
103086             silent: false,
103087             smartLists: false,
103088             smartypants: false,
103089             xhtml: false
103090           };
103091         }
103092
103093         function changeDefaults(newDefaults) {
103094           module.exports.defaults = newDefaults;
103095         }
103096
103097         module.exports = {
103098           defaults: getDefaults(),
103099           getDefaults: getDefaults,
103100           changeDefaults: changeDefaults
103101         };
103102         });
103103         var defaults_1 = defaults$1.defaults;
103104         var defaults_2 = defaults$1.getDefaults;
103105         var defaults_3 = defaults$1.changeDefaults;
103106
103107         /**
103108          * Helpers
103109          */
103110         var escapeTest = /[&<>"']/;
103111         var escapeReplace = /[&<>"']/g;
103112         var escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/;
103113         var escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g;
103114         var escapeReplacements = {
103115           '&': '&amp;',
103116           '<': '&lt;',
103117           '>': '&gt;',
103118           '"': '&quot;',
103119           "'": '&#39;'
103120         };
103121         var getEscapeReplacement = function (ch) { return escapeReplacements[ch]; };
103122         function escape$1(html, encode) {
103123           if (encode) {
103124             if (escapeTest.test(html)) {
103125               return html.replace(escapeReplace, getEscapeReplacement);
103126             }
103127           } else {
103128             if (escapeTestNoEncode.test(html)) {
103129               return html.replace(escapeReplaceNoEncode, getEscapeReplacement);
103130             }
103131           }
103132
103133           return html;
103134         }
103135
103136         var unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;
103137
103138         function unescape$1(html) {
103139           // explicitly match decimal, hex, and named HTML entities
103140           return html.replace(unescapeTest, function (_, n) {
103141             n = n.toLowerCase();
103142             if (n === 'colon') { return ':'; }
103143             if (n.charAt(0) === '#') {
103144               return n.charAt(1) === 'x'
103145                 ? String.fromCharCode(parseInt(n.substring(2), 16))
103146                 : String.fromCharCode(+n.substring(1));
103147             }
103148             return '';
103149           });
103150         }
103151
103152         var caret = /(^|[^\[])\^/g;
103153         function edit(regex, opt) {
103154           regex = regex.source || regex;
103155           opt = opt || '';
103156           var obj = {
103157             replace: function (name, val) {
103158               val = val.source || val;
103159               val = val.replace(caret, '$1');
103160               regex = regex.replace(name, val);
103161               return obj;
103162             },
103163             getRegex: function () {
103164               return new RegExp(regex, opt);
103165             }
103166           };
103167           return obj;
103168         }
103169
103170         var nonWordAndColonTest = /[^\w:]/g;
103171         var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
103172         function cleanUrl(sanitize, base, href) {
103173           if (sanitize) {
103174             var prot;
103175             try {
103176               prot = decodeURIComponent(unescape$1(href))
103177                 .replace(nonWordAndColonTest, '')
103178                 .toLowerCase();
103179             } catch (e) {
103180               return null;
103181             }
103182             if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
103183               return null;
103184             }
103185           }
103186           if (base && !originIndependentUrl.test(href)) {
103187             href = resolveUrl$1(base, href);
103188           }
103189           try {
103190             href = encodeURI(href).replace(/%25/g, '%');
103191           } catch (e) {
103192             return null;
103193           }
103194           return href;
103195         }
103196
103197         var baseUrls = {};
103198         var justDomain = /^[^:]+:\/*[^/]*$/;
103199         var protocol = /^([^:]+:)[\s\S]*$/;
103200         var domain = /^([^:]+:\/*[^/]*)[\s\S]*$/;
103201
103202         function resolveUrl$1(base, href) {
103203           if (!baseUrls[' ' + base]) {
103204             // we can ignore everything in base after the last slash of its path component,
103205             // but we might need to add _that_
103206             // https://tools.ietf.org/html/rfc3986#section-3
103207             if (justDomain.test(base)) {
103208               baseUrls[' ' + base] = base + '/';
103209             } else {
103210               baseUrls[' ' + base] = rtrim(base, '/', true);
103211             }
103212           }
103213           base = baseUrls[' ' + base];
103214           var relativeBase = base.indexOf(':') === -1;
103215
103216           if (href.substring(0, 2) === '//') {
103217             if (relativeBase) {
103218               return href;
103219             }
103220             return base.replace(protocol, '$1') + href;
103221           } else if (href.charAt(0) === '/') {
103222             if (relativeBase) {
103223               return href;
103224             }
103225             return base.replace(domain, '$1') + href;
103226           } else {
103227             return base + href;
103228           }
103229         }
103230
103231         var noopTest = { exec: function noopTest() {} };
103232
103233         function merge$1(obj) {
103234           var arguments$1 = arguments;
103235
103236           var i = 1,
103237             target,
103238             key;
103239
103240           for (; i < arguments.length; i++) {
103241             target = arguments$1[i];
103242             for (key in target) {
103243               if (Object.prototype.hasOwnProperty.call(target, key)) {
103244                 obj[key] = target[key];
103245               }
103246             }
103247           }
103248
103249           return obj;
103250         }
103251
103252         function splitCells(tableRow, count) {
103253           // ensure that every cell-delimiting pipe has a space
103254           // before it to distinguish it from an escaped pipe
103255           var row = tableRow.replace(/\|/g, function (match, offset, str) {
103256               var escaped = false,
103257                 curr = offset;
103258               while (--curr >= 0 && str[curr] === '\\') { escaped = !escaped; }
103259               if (escaped) {
103260                 // odd number of slashes means | is escaped
103261                 // so we leave it alone
103262                 return '|';
103263               } else {
103264                 // add space before unescaped |
103265                 return ' |';
103266               }
103267             }),
103268             cells = row.split(/ \|/);
103269           var i = 0;
103270
103271           if (cells.length > count) {
103272             cells.splice(count);
103273           } else {
103274             while (cells.length < count) { cells.push(''); }
103275           }
103276
103277           for (; i < cells.length; i++) {
103278             // leading or trailing whitespace is ignored per the gfm spec
103279             cells[i] = cells[i].trim().replace(/\\\|/g, '|');
103280           }
103281           return cells;
103282         }
103283
103284         // Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
103285         // /c*$/ is vulnerable to REDOS.
103286         // invert: Remove suffix of non-c chars instead. Default falsey.
103287         function rtrim(str, c, invert) {
103288           var l = str.length;
103289           if (l === 0) {
103290             return '';
103291           }
103292
103293           // Length of suffix matching the invert condition.
103294           var suffLen = 0;
103295
103296           // Step left until we fail to match the invert condition.
103297           while (suffLen < l) {
103298             var currChar = str.charAt(l - suffLen - 1);
103299             if (currChar === c && !invert) {
103300               suffLen++;
103301             } else if (currChar !== c && invert) {
103302               suffLen++;
103303             } else {
103304               break;
103305             }
103306           }
103307
103308           return str.substr(0, l - suffLen);
103309         }
103310
103311         function findClosingBracket(str, b) {
103312           if (str.indexOf(b[1]) === -1) {
103313             return -1;
103314           }
103315           var l = str.length;
103316           var level = 0,
103317             i = 0;
103318           for (; i < l; i++) {
103319             if (str[i] === '\\') {
103320               i++;
103321             } else if (str[i] === b[0]) {
103322               level++;
103323             } else if (str[i] === b[1]) {
103324               level--;
103325               if (level < 0) {
103326                 return i;
103327               }
103328             }
103329           }
103330           return -1;
103331         }
103332
103333         function checkSanitizeDeprecation(opt) {
103334           if (opt && opt.sanitize && !opt.silent) {
103335             console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');
103336           }
103337         }
103338
103339         var helpers$1 = {
103340           escape: escape$1,
103341           unescape: unescape$1,
103342           edit: edit,
103343           cleanUrl: cleanUrl,
103344           resolveUrl: resolveUrl$1,
103345           noopTest: noopTest,
103346           merge: merge$1,
103347           splitCells: splitCells,
103348           rtrim: rtrim,
103349           findClosingBracket: findClosingBracket,
103350           checkSanitizeDeprecation: checkSanitizeDeprecation
103351         };
103352
103353         var noopTest$1 = helpers$1.noopTest;
103354         var edit$1 = helpers$1.edit;
103355         var merge$2 = helpers$1.merge;
103356
103357         /**
103358          * Block-Level Grammar
103359          */
103360         var block = {
103361           newline: /^\n+/,
103362           code: /^( {4}[^\n]+\n*)+/,
103363           fences: /^ {0,3}(`{3,}|~{3,})([^`~\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,
103364           hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
103365           heading: /^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/,
103366           blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
103367           list: /^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
103368           html: '^ {0,3}(?:' // optional indentation
103369             + '<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
103370             + '|comment[^\\n]*(\\n+|$)' // (2)
103371             + '|<\\?[\\s\\S]*?\\?>\\n*' // (3)
103372             + '|<![A-Z][\\s\\S]*?>\\n*' // (4)
103373             + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*' // (5)
103374             + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6)
103375             + '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag
103376             + '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag
103377             + ')',
103378           def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
103379           nptable: noopTest$1,
103380           table: noopTest$1,
103381           lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,
103382           // regex template, placeholders will be replaced according to different paragraph
103383           // interruption rules of commonmark and the original markdown spec:
103384           _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/,
103385           text: /^[^\n]+/
103386         };
103387
103388         block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/;
103389         block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
103390         block.def = edit$1(block.def)
103391           .replace('label', block._label)
103392           .replace('title', block._title)
103393           .getRegex();
103394
103395         block.bullet = /(?:[*+-]|\d{1,9}\.)/;
103396         block.item = /^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/;
103397         block.item = edit$1(block.item, 'gm')
103398           .replace(/bull/g, block.bullet)
103399           .getRegex();
103400
103401         block.list = edit$1(block.list)
103402           .replace(/bull/g, block.bullet)
103403           .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))')
103404           .replace('def', '\\n+(?=' + block.def.source + ')')
103405           .getRegex();
103406
103407         block._tag = 'address|article|aside|base|basefont|blockquote|body|caption'
103408           + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'
103409           + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'
103410           + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'
103411           + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'
103412           + '|track|ul';
103413         block._comment = /<!--(?!-?>)[\s\S]*?-->/;
103414         block.html = edit$1(block.html, 'i')
103415           .replace('comment', block._comment)
103416           .replace('tag', block._tag)
103417           .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
103418           .getRegex();
103419
103420         block.paragraph = edit$1(block._paragraph)
103421           .replace('hr', block.hr)
103422           .replace('heading', ' {0,3}#{1,6} +')
103423           .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs
103424           .replace('blockquote', ' {0,3}>')
103425           .replace('fences', ' {0,3}(?:`{3,}|~{3,})[^`\\n]*\\n')
103426           .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
103427           .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)')
103428           .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
103429           .getRegex();
103430
103431         block.blockquote = edit$1(block.blockquote)
103432           .replace('paragraph', block.paragraph)
103433           .getRegex();
103434
103435         /**
103436          * Normal Block Grammar
103437          */
103438
103439         block.normal = merge$2({}, block);
103440
103441         /**
103442          * GFM Block Grammar
103443          */
103444
103445         block.gfm = merge$2({}, block.normal, {
103446           nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
103447           table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/
103448         });
103449
103450         /**
103451          * Pedantic grammar (original John Gruber's loose markdown specification)
103452          */
103453
103454         block.pedantic = merge$2({}, block.normal, {
103455           html: edit$1(
103456             '^ *(?:comment *(?:\\n|\\s*$)'
103457             + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
103458             + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))')
103459             .replace('comment', block._comment)
103460             .replace(/tag/g, '(?!(?:'
103461               + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'
103462               + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'
103463               + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b')
103464             .getRegex(),
103465           def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
103466           heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
103467           fences: noopTest$1, // fences not supported
103468           paragraph: edit$1(block.normal._paragraph)
103469             .replace('hr', block.hr)
103470             .replace('heading', ' *#{1,6} *[^\n]')
103471             .replace('lheading', block.lheading)
103472             .replace('blockquote', ' {0,3}>')
103473             .replace('|fences', '')
103474             .replace('|list', '')
103475             .replace('|html', '')
103476             .getRegex()
103477         });
103478
103479         /**
103480          * Inline-Level Grammar
103481          */
103482         var inline = {
103483           escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
103484           autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
103485           url: noopTest$1,
103486           tag: '^comment'
103487             + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
103488             + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
103489             + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
103490             + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html>
103491             + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section
103492           link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,
103493           reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
103494           nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
103495           strong: /^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,
103496           em: /^_([^\s_])_(?!_)|^\*([^\s*<\[])\*(?!\*)|^_([^\s<][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_<][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s<"][\s\S]*?[^\s\*])\*(?!\*|[^\spunctuation])|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,
103497           code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
103498           br: /^( {2,}|\\)\n(?!\s*$)/,
103499           del: noopTest$1,
103500           text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n))|(?= {2,}\n))/
103501         };
103502
103503         // list of punctuation marks from common mark spec
103504         // without ` and ] to workaround Rule 17 (inline code blocks/links)
103505         inline._punctuation = '!"#$%&\'()*+,\\-./:;<=>?@\\[^_{|}~';
103506         inline.em = edit$1(inline.em).replace(/punctuation/g, inline._punctuation).getRegex();
103507
103508         inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;
103509
103510         inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
103511         inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;
103512         inline.autolink = edit$1(inline.autolink)
103513           .replace('scheme', inline._scheme)
103514           .replace('email', inline._email)
103515           .getRegex();
103516
103517         inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
103518
103519         inline.tag = edit$1(inline.tag)
103520           .replace('comment', block._comment)
103521           .replace('attribute', inline._attribute)
103522           .getRegex();
103523
103524         inline._label = /(?:\[[^\[\]]*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
103525         inline._href = /<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/;
103526         inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
103527
103528         inline.link = edit$1(inline.link)
103529           .replace('label', inline._label)
103530           .replace('href', inline._href)
103531           .replace('title', inline._title)
103532           .getRegex();
103533
103534         inline.reflink = edit$1(inline.reflink)
103535           .replace('label', inline._label)
103536           .getRegex();
103537
103538         /**
103539          * Normal Inline Grammar
103540          */
103541
103542         inline.normal = merge$2({}, inline);
103543
103544         /**
103545          * Pedantic Inline Grammar
103546          */
103547
103548         inline.pedantic = merge$2({}, inline.normal, {
103549           strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
103550           em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
103551           link: edit$1(/^!?\[(label)\]\((.*?)\)/)
103552             .replace('label', inline._label)
103553             .getRegex(),
103554           reflink: edit$1(/^!?\[(label)\]\s*\[([^\]]*)\]/)
103555             .replace('label', inline._label)
103556             .getRegex()
103557         });
103558
103559         /**
103560          * GFM Inline Grammar
103561          */
103562
103563         inline.gfm = merge$2({}, inline.normal, {
103564           escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),
103565           _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
103566           url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
103567           _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
103568           del: /^~+(?=\S)([\s\S]*?\S)~+/,
103569           text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?= {2,}\n|[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/
103570         });
103571
103572         inline.gfm.url = edit$1(inline.gfm.url, 'i')
103573           .replace('email', inline.gfm._extended_email)
103574           .getRegex();
103575         /**
103576          * GFM + Line Breaks Inline Grammar
103577          */
103578
103579         inline.breaks = merge$2({}, inline.gfm, {
103580           br: edit$1(inline.br).replace('{2,}', '*').getRegex(),
103581           text: edit$1(inline.gfm.text)
103582             .replace('\\b_', '\\b_| {2,}\\n')
103583             .replace(/\{2,\}/g, '*')
103584             .getRegex()
103585         });
103586
103587         var rules = {
103588           block: block,
103589           inline: inline
103590         };
103591
103592         var defaults$2 = defaults$1.defaults;
103593         var block$1 = rules.block;
103594         var rtrim$1 = helpers$1.rtrim;
103595         var splitCells$1 = helpers$1.splitCells;
103596         var escape$2 = helpers$1.escape;
103597
103598         /**
103599          * Block Lexer
103600          */
103601         var Lexer_1 = /*@__PURE__*/(function () {
103602           function Lexer(options) {
103603             this.tokens = [];
103604             this.tokens.links = Object.create(null);
103605             this.options = options || defaults$2;
103606             this.rules = block$1.normal;
103607
103608             if (this.options.pedantic) {
103609               this.rules = block$1.pedantic;
103610             } else if (this.options.gfm) {
103611               this.rules = block$1.gfm;
103612             }
103613           }
103614
103615           var staticAccessors = { rules: { configurable: true } };
103616
103617           /**
103618            * Expose Block Rules
103619            */
103620           staticAccessors.rules.get = function () {
103621             return block$1;
103622           };
103623
103624           /**
103625            * Static Lex Method
103626            */
103627           Lexer.lex = function lex (src, options) {
103628             var lexer = new Lexer(options);
103629             return lexer.lex(src);
103630           };
103631           /**
103632            * Preprocessing
103633            */
103634           Lexer.prototype.lex = function lex (src) {
103635             src = src
103636               .replace(/\r\n|\r/g, '\n')
103637               .replace(/\t/g, '    ');
103638
103639             return this.token(src, true);
103640           };
103641           /**
103642            * Lexing
103643            */
103644           Lexer.prototype.token = function token (src, top) {
103645             src = src.replace(/^ +$/gm, '');
103646             var next,
103647               loose,
103648               cap,
103649               bull,
103650               b,
103651               item,
103652               listStart,
103653               listItems,
103654               t,
103655               space,
103656               i,
103657               tag,
103658               l,
103659               isordered,
103660               istask,
103661               ischecked;
103662
103663             while (src) {
103664               // newline
103665               if (cap = this.rules.newline.exec(src)) {
103666                 src = src.substring(cap[0].length);
103667                 if (cap[0].length > 1) {
103668                   this.tokens.push({
103669                     type: 'space'
103670                   });
103671                 }
103672               }
103673
103674               // code
103675               if (cap = this.rules.code.exec(src)) {
103676                 var lastToken = this.tokens[this.tokens.length - 1];
103677                 src = src.substring(cap[0].length);
103678                 // An indented code block cannot interrupt a paragraph.
103679                 if (lastToken && lastToken.type === 'paragraph') {
103680                   lastToken.text += '\n' + cap[0].trimRight();
103681                 } else {
103682                   cap = cap[0].replace(/^ {4}/gm, '');
103683                   this.tokens.push({
103684                     type: 'code',
103685                     codeBlockStyle: 'indented',
103686                     text: !this.options.pedantic
103687                       ? rtrim$1(cap, '\n')
103688                       : cap
103689                   });
103690                 }
103691                 continue;
103692               }
103693
103694               // fences
103695               if (cap = this.rules.fences.exec(src)) {
103696                 src = src.substring(cap[0].length);
103697                 this.tokens.push({
103698                   type: 'code',
103699                   lang: cap[2] ? cap[2].trim() : cap[2],
103700                   text: cap[3] || ''
103701                 });
103702                 continue;
103703               }
103704
103705               // heading
103706               if (cap = this.rules.heading.exec(src)) {
103707                 src = src.substring(cap[0].length);
103708                 this.tokens.push({
103709                   type: 'heading',
103710                   depth: cap[1].length,
103711                   text: cap[2]
103712                 });
103713                 continue;
103714               }
103715
103716               // table no leading pipe (gfm)
103717               if (cap = this.rules.nptable.exec(src)) {
103718                 item = {
103719                   type: 'table',
103720                   header: splitCells$1(cap[1].replace(/^ *| *\| *$/g, '')),
103721                   align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
103722                   cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
103723                 };
103724
103725                 if (item.header.length === item.align.length) {
103726                   src = src.substring(cap[0].length);
103727
103728                   for (i = 0; i < item.align.length; i++) {
103729                     if (/^ *-+: *$/.test(item.align[i])) {
103730                       item.align[i] = 'right';
103731                     } else if (/^ *:-+: *$/.test(item.align[i])) {
103732                       item.align[i] = 'center';
103733                     } else if (/^ *:-+ *$/.test(item.align[i])) {
103734                       item.align[i] = 'left';
103735                     } else {
103736                       item.align[i] = null;
103737                     }
103738                   }
103739
103740                   for (i = 0; i < item.cells.length; i++) {
103741                     item.cells[i] = splitCells$1(item.cells[i], item.header.length);
103742                   }
103743
103744                   this.tokens.push(item);
103745
103746                   continue;
103747                 }
103748               }
103749
103750               // hr
103751               if (cap = this.rules.hr.exec(src)) {
103752                 src = src.substring(cap[0].length);
103753                 this.tokens.push({
103754                   type: 'hr'
103755                 });
103756                 continue;
103757               }
103758
103759               // blockquote
103760               if (cap = this.rules.blockquote.exec(src)) {
103761                 src = src.substring(cap[0].length);
103762
103763                 this.tokens.push({
103764                   type: 'blockquote_start'
103765                 });
103766
103767                 cap = cap[0].replace(/^ *> ?/gm, '');
103768
103769                 // Pass `top` to keep the current
103770                 // "toplevel" state. This is exactly
103771                 // how markdown.pl works.
103772                 this.token(cap, top);
103773
103774                 this.tokens.push({
103775                   type: 'blockquote_end'
103776                 });
103777
103778                 continue;
103779               }
103780
103781               // list
103782               if (cap = this.rules.list.exec(src)) {
103783                 src = src.substring(cap[0].length);
103784                 bull = cap[2];
103785                 isordered = bull.length > 1;
103786
103787                 listStart = {
103788                   type: 'list_start',
103789                   ordered: isordered,
103790                   start: isordered ? +bull : '',
103791                   loose: false
103792                 };
103793
103794                 this.tokens.push(listStart);
103795
103796                 // Get each top-level item.
103797                 cap = cap[0].match(this.rules.item);
103798
103799                 listItems = [];
103800                 next = false;
103801                 l = cap.length;
103802                 i = 0;
103803
103804                 for (; i < l; i++) {
103805                   item = cap[i];
103806
103807                   // Remove the list item's bullet
103808                   // so it is seen as the next token.
103809                   space = item.length;
103810                   item = item.replace(/^ *([*+-]|\d+\.) */, '');
103811
103812                   // Outdent whatever the
103813                   // list item contains. Hacky.
103814                   if (~item.indexOf('\n ')) {
103815                     space -= item.length;
103816                     item = !this.options.pedantic
103817                       ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')
103818                       : item.replace(/^ {1,4}/gm, '');
103819                   }
103820
103821                   // Determine whether the next list item belongs here.
103822                   // Backpedal if it does not belong in this list.
103823                   if (i !== l - 1) {
103824                     b = block$1.bullet.exec(cap[i + 1])[0];
103825                     if (bull.length > 1 ? b.length === 1
103826                       : (b.length > 1 || (this.options.smartLists && b !== bull))) {
103827                       src = cap.slice(i + 1).join('\n') + src;
103828                       i = l - 1;
103829                     }
103830                   }
103831
103832                   // Determine whether item is loose or not.
103833                   // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
103834                   // for discount behavior.
103835                   loose = next || /\n\n(?!\s*$)/.test(item);
103836                   if (i !== l - 1) {
103837                     next = item.charAt(item.length - 1) === '\n';
103838                     if (!loose) { loose = next; }
103839                   }
103840
103841                   if (loose) {
103842                     listStart.loose = true;
103843                   }
103844
103845                   // Check for task list items
103846                   istask = /^\[[ xX]\] /.test(item);
103847                   ischecked = undefined;
103848                   if (istask) {
103849                     ischecked = item[1] !== ' ';
103850                     item = item.replace(/^\[[ xX]\] +/, '');
103851                   }
103852
103853                   t = {
103854                     type: 'list_item_start',
103855                     task: istask,
103856                     checked: ischecked,
103857                     loose: loose
103858                   };
103859
103860                   listItems.push(t);
103861                   this.tokens.push(t);
103862
103863                   // Recurse.
103864                   this.token(item, false);
103865
103866                   this.tokens.push({
103867                     type: 'list_item_end'
103868                   });
103869                 }
103870
103871                 if (listStart.loose) {
103872                   l = listItems.length;
103873                   i = 0;
103874                   for (; i < l; i++) {
103875                     listItems[i].loose = true;
103876                   }
103877                 }
103878
103879                 this.tokens.push({
103880                   type: 'list_end'
103881                 });
103882
103883                 continue;
103884               }
103885
103886               // html
103887               if (cap = this.rules.html.exec(src)) {
103888                 src = src.substring(cap[0].length);
103889                 this.tokens.push({
103890                   type: this.options.sanitize
103891                     ? 'paragraph'
103892                     : 'html',
103893                   pre: !this.options.sanitizer
103894                     && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
103895                   text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$2(cap[0])) : cap[0]
103896                 });
103897                 continue;
103898               }
103899
103900               // def
103901               if (top && (cap = this.rules.def.exec(src))) {
103902                 src = src.substring(cap[0].length);
103903                 if (cap[3]) { cap[3] = cap[3].substring(1, cap[3].length - 1); }
103904                 tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
103905                 if (!this.tokens.links[tag]) {
103906                   this.tokens.links[tag] = {
103907                     href: cap[2],
103908                     title: cap[3]
103909                   };
103910                 }
103911                 continue;
103912               }
103913
103914               // table (gfm)
103915               if (cap = this.rules.table.exec(src)) {
103916                 item = {
103917                   type: 'table',
103918                   header: splitCells$1(cap[1].replace(/^ *| *\| *$/g, '')),
103919                   align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
103920                   cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
103921                 };
103922
103923                 if (item.header.length === item.align.length) {
103924                   src = src.substring(cap[0].length);
103925
103926                   for (i = 0; i < item.align.length; i++) {
103927                     if (/^ *-+: *$/.test(item.align[i])) {
103928                       item.align[i] = 'right';
103929                     } else if (/^ *:-+: *$/.test(item.align[i])) {
103930                       item.align[i] = 'center';
103931                     } else if (/^ *:-+ *$/.test(item.align[i])) {
103932                       item.align[i] = 'left';
103933                     } else {
103934                       item.align[i] = null;
103935                     }
103936                   }
103937
103938                   for (i = 0; i < item.cells.length; i++) {
103939                     item.cells[i] = splitCells$1(
103940                       item.cells[i].replace(/^ *\| *| *\| *$/g, ''),
103941                       item.header.length);
103942                   }
103943
103944                   this.tokens.push(item);
103945
103946                   continue;
103947                 }
103948               }
103949
103950               // lheading
103951               if (cap = this.rules.lheading.exec(src)) {
103952                 src = src.substring(cap[0].length);
103953                 this.tokens.push({
103954                   type: 'heading',
103955                   depth: cap[2].charAt(0) === '=' ? 1 : 2,
103956                   text: cap[1]
103957                 });
103958                 continue;
103959               }
103960
103961               // top-level paragraph
103962               if (top && (cap = this.rules.paragraph.exec(src))) {
103963                 src = src.substring(cap[0].length);
103964                 this.tokens.push({
103965                   type: 'paragraph',
103966                   text: cap[1].charAt(cap[1].length - 1) === '\n'
103967                     ? cap[1].slice(0, -1)
103968                     : cap[1]
103969                 });
103970                 continue;
103971               }
103972
103973               // text
103974               if (cap = this.rules.text.exec(src)) {
103975                 // Top-level should never reach here.
103976                 src = src.substring(cap[0].length);
103977                 this.tokens.push({
103978                   type: 'text',
103979                   text: cap[0]
103980                 });
103981                 continue;
103982               }
103983
103984               if (src) {
103985                 throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
103986               }
103987             }
103988
103989             return this.tokens;
103990           };
103991
103992           Object.defineProperties( Lexer, staticAccessors );
103993
103994           return Lexer;
103995         }());
103996
103997         var defaults$3 = defaults$1.defaults;
103998         var cleanUrl$1 = helpers$1.cleanUrl;
103999         var escape$3 = helpers$1.escape;
104000
104001         /**
104002          * Renderer
104003          */
104004         var Renderer_1 = /*@__PURE__*/(function () {
104005           function Renderer(options) {
104006             this.options = options || defaults$3;
104007           }
104008
104009           Renderer.prototype.code = function code (code$1, infostring, escaped) {
104010             var lang = (infostring || '').match(/\S*/)[0];
104011             if (this.options.highlight) {
104012               var out = this.options.highlight(code$1, lang);
104013               if (out != null && out !== code$1) {
104014                 escaped = true;
104015                 code$1 = out;
104016               }
104017             }
104018
104019             if (!lang) {
104020               return '<pre><code>'
104021                 + (escaped ? code$1 : escape$3(code$1, true))
104022                 + '</code></pre>';
104023             }
104024
104025             return '<pre><code class="'
104026               + this.options.langPrefix
104027               + escape$3(lang, true)
104028               + '">'
104029               + (escaped ? code$1 : escape$3(code$1, true))
104030               + '</code></pre>\n';
104031           };
104032           Renderer.prototype.blockquote = function blockquote (quote) {
104033             return '<blockquote>\n' + quote + '</blockquote>\n';
104034           };
104035           Renderer.prototype.html = function html (html$1) {
104036             return html$1;
104037           };
104038           Renderer.prototype.heading = function heading (text, level, raw, slugger) {
104039             if (this.options.headerIds) {
104040               return '<h'
104041                 + level
104042                 + ' id="'
104043                 + this.options.headerPrefix
104044                 + slugger.slug(raw)
104045                 + '">'
104046                 + text
104047                 + '</h'
104048                 + level
104049                 + '>\n';
104050             }
104051             // ignore IDs
104052             return '<h' + level + '>' + text + '</h' + level + '>\n';
104053           };
104054           Renderer.prototype.hr = function hr () {
104055             return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
104056           };
104057           Renderer.prototype.list = function list (body, ordered, start) {
104058             var type = ordered ? 'ol' : 'ul',
104059               startatt = (ordered && start !== 1) ? (' start="' + start + '"') : '';
104060             return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
104061           };
104062           Renderer.prototype.listitem = function listitem (text) {
104063             return '<li>' + text + '</li>\n';
104064           };
104065           Renderer.prototype.checkbox = function checkbox (checked) {
104066             return '<input '
104067               + (checked ? 'checked="" ' : '')
104068               + 'disabled="" type="checkbox"'
104069               + (this.options.xhtml ? ' /' : '')
104070               + '> ';
104071           };
104072           Renderer.prototype.paragraph = function paragraph (text) {
104073             return '<p>' + text + '</p>\n';
104074           };
104075           Renderer.prototype.table = function table (header, body) {
104076             if (body) { body = '<tbody>' + body + '</tbody>'; }
104077
104078             return '<table>\n'
104079               + '<thead>\n'
104080               + header
104081               + '</thead>\n'
104082               + body
104083               + '</table>\n';
104084           };
104085           Renderer.prototype.tablerow = function tablerow (content) {
104086             return '<tr>\n' + content + '</tr>\n';
104087           };
104088           Renderer.prototype.tablecell = function tablecell (content, flags) {
104089             var type = flags.header ? 'th' : 'td';
104090             var tag = flags.align
104091               ? '<' + type + ' align="' + flags.align + '">'
104092               : '<' + type + '>';
104093             return tag + content + '</' + type + '>\n';
104094           };
104095           // span level renderer
104096           Renderer.prototype.strong = function strong (text) {
104097             return '<strong>' + text + '</strong>';
104098           };
104099           Renderer.prototype.em = function em (text) {
104100             return '<em>' + text + '</em>';
104101           };
104102           Renderer.prototype.codespan = function codespan (text) {
104103             return '<code>' + text + '</code>';
104104           };
104105           Renderer.prototype.br = function br () {
104106             return this.options.xhtml ? '<br/>' : '<br>';
104107           };
104108           Renderer.prototype.del = function del (text) {
104109             return '<del>' + text + '</del>';
104110           };
104111           Renderer.prototype.link = function link (href, title, text) {
104112             href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);
104113             if (href === null) {
104114               return text;
104115             }
104116             var out = '<a href="' + escape$3(href) + '"';
104117             if (title) {
104118               out += ' title="' + title + '"';
104119             }
104120             out += '>' + text + '</a>';
104121             return out;
104122           };
104123           Renderer.prototype.image = function image (href, title, text) {
104124             href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);
104125             if (href === null) {
104126               return text;
104127             }
104128
104129             var out = '<img src="' + href + '" alt="' + text + '"';
104130             if (title) {
104131               out += ' title="' + title + '"';
104132             }
104133             out += this.options.xhtml ? '/>' : '>';
104134             return out;
104135           };
104136           Renderer.prototype.text = function text (text$1) {
104137             return text$1;
104138           };
104139
104140           return Renderer;
104141         }());
104142
104143         /**
104144          * Slugger generates header id
104145          */
104146         var Slugger_1 = /*@__PURE__*/(function () {
104147           function Slugger() {
104148             this.seen = {};
104149           }
104150
104151           /**
104152            * Convert string to unique id
104153            */
104154           Slugger.prototype.slug = function slug (value) {
104155             var slug = value
104156               .toLowerCase()
104157               .trim()
104158               .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '')
104159               .replace(/\s/g, '-');
104160
104161             if (this.seen.hasOwnProperty(slug)) {
104162               var originalSlug = slug;
104163               do {
104164                 this.seen[originalSlug]++;
104165                 slug = originalSlug + '-' + this.seen[originalSlug];
104166               } while (this.seen.hasOwnProperty(slug));
104167             }
104168             this.seen[slug] = 0;
104169
104170             return slug;
104171           };
104172
104173           return Slugger;
104174         }());
104175
104176         var defaults$4 = defaults$1.defaults;
104177         var inline$1 = rules.inline;
104178         var findClosingBracket$1 = helpers$1.findClosingBracket;
104179         var escape$4 = helpers$1.escape;
104180
104181         /**
104182          * Inline Lexer & Compiler
104183          */
104184         var InlineLexer_1 = /*@__PURE__*/(function () {
104185           function InlineLexer(links, options) {
104186             this.options = options || defaults$4;
104187             this.links = links;
104188             this.rules = inline$1.normal;
104189             this.options.renderer = this.options.renderer || new Renderer_1();
104190             this.renderer = this.options.renderer;
104191             this.renderer.options = this.options;
104192
104193             if (!this.links) {
104194               throw new Error('Tokens array requires a `links` property.');
104195             }
104196
104197             if (this.options.pedantic) {
104198               this.rules = inline$1.pedantic;
104199             } else if (this.options.gfm) {
104200               if (this.options.breaks) {
104201                 this.rules = inline$1.breaks;
104202               } else {
104203                 this.rules = inline$1.gfm;
104204               }
104205             }
104206           }
104207
104208           var staticAccessors = { rules: { configurable: true } };
104209
104210           /**
104211            * Expose Inline Rules
104212            */
104213           staticAccessors.rules.get = function () {
104214             return inline$1;
104215           };
104216
104217           /**
104218            * Static Lexing/Compiling Method
104219            */
104220           InlineLexer.output = function output (src, links, options) {
104221             var inline = new InlineLexer(links, options);
104222             return inline.output(src);
104223           };
104224
104225           /**
104226            * Lexing/Compiling
104227            */
104228           InlineLexer.prototype.output = function output (src) {
104229             var out = '',
104230               link,
104231               text,
104232               href,
104233               title,
104234               cap,
104235               prevCapZero;
104236
104237             while (src) {
104238               // escape
104239               if (cap = this.rules.escape.exec(src)) {
104240                 src = src.substring(cap[0].length);
104241                 out += escape$4(cap[1]);
104242                 continue;
104243               }
104244
104245               // tag
104246               if (cap = this.rules.tag.exec(src)) {
104247                 if (!this.inLink && /^<a /i.test(cap[0])) {
104248                   this.inLink = true;
104249                 } else if (this.inLink && /^<\/a>/i.test(cap[0])) {
104250                   this.inLink = false;
104251                 }
104252                 if (!this.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
104253                   this.inRawBlock = true;
104254                 } else if (this.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
104255                   this.inRawBlock = false;
104256                 }
104257
104258                 src = src.substring(cap[0].length);
104259                 out += this.options.sanitize
104260                   ? this.options.sanitizer
104261                     ? this.options.sanitizer(cap[0])
104262                     : escape$4(cap[0])
104263                   : cap[0];
104264                 continue;
104265               }
104266
104267               // link
104268               if (cap = this.rules.link.exec(src)) {
104269                 var lastParenIndex = findClosingBracket$1(cap[2], '()');
104270                 if (lastParenIndex > -1) {
104271                   var start = cap[0].indexOf('!') === 0 ? 5 : 4;
104272                   var linkLen = start + cap[1].length + lastParenIndex;
104273                   cap[2] = cap[2].substring(0, lastParenIndex);
104274                   cap[0] = cap[0].substring(0, linkLen).trim();
104275                   cap[3] = '';
104276                 }
104277                 src = src.substring(cap[0].length);
104278                 this.inLink = true;
104279                 href = cap[2];
104280                 if (this.options.pedantic) {
104281                   link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
104282
104283                   if (link) {
104284                     href = link[1];
104285                     title = link[3];
104286                   } else {
104287                     title = '';
104288                   }
104289                 } else {
104290                   title = cap[3] ? cap[3].slice(1, -1) : '';
104291                 }
104292                 href = href.trim().replace(/^<([\s\S]*)>$/, '$1');
104293                 out += this.outputLink(cap, {
104294                   href: InlineLexer.escapes(href),
104295                   title: InlineLexer.escapes(title)
104296                 });
104297                 this.inLink = false;
104298                 continue;
104299               }
104300
104301               // reflink, nolink
104302               if ((cap = this.rules.reflink.exec(src))
104303                   || (cap = this.rules.nolink.exec(src))) {
104304                 src = src.substring(cap[0].length);
104305                 link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
104306                 link = this.links[link.toLowerCase()];
104307                 if (!link || !link.href) {
104308                   out += cap[0].charAt(0);
104309                   src = cap[0].substring(1) + src;
104310                   continue;
104311                 }
104312                 this.inLink = true;
104313                 out += this.outputLink(cap, link);
104314                 this.inLink = false;
104315                 continue;
104316               }
104317
104318               // strong
104319               if (cap = this.rules.strong.exec(src)) {
104320                 src = src.substring(cap[0].length);
104321                 out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1]));
104322                 continue;
104323               }
104324
104325               // em
104326               if (cap = this.rules.em.exec(src)) {
104327                 src = src.substring(cap[0].length);
104328                 out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1]));
104329                 continue;
104330               }
104331
104332               // code
104333               if (cap = this.rules.code.exec(src)) {
104334                 src = src.substring(cap[0].length);
104335                 out += this.renderer.codespan(escape$4(cap[2].trim(), true));
104336                 continue;
104337               }
104338
104339               // br
104340               if (cap = this.rules.br.exec(src)) {
104341                 src = src.substring(cap[0].length);
104342                 out += this.renderer.br();
104343                 continue;
104344               }
104345
104346               // del (gfm)
104347               if (cap = this.rules.del.exec(src)) {
104348                 src = src.substring(cap[0].length);
104349                 out += this.renderer.del(this.output(cap[1]));
104350                 continue;
104351               }
104352
104353               // autolink
104354               if (cap = this.rules.autolink.exec(src)) {
104355                 src = src.substring(cap[0].length);
104356                 if (cap[2] === '@') {
104357                   text = escape$4(this.mangle(cap[1]));
104358                   href = 'mailto:' + text;
104359                 } else {
104360                   text = escape$4(cap[1]);
104361                   href = text;
104362                 }
104363                 out += this.renderer.link(href, null, text);
104364                 continue;
104365               }
104366
104367               // url (gfm)
104368               if (!this.inLink && (cap = this.rules.url.exec(src))) {
104369                 if (cap[2] === '@') {
104370                   text = escape$4(cap[0]);
104371                   href = 'mailto:' + text;
104372                 } else {
104373                   // do extended autolink path validation
104374                   do {
104375                     prevCapZero = cap[0];
104376                     cap[0] = this.rules._backpedal.exec(cap[0])[0];
104377                   } while (prevCapZero !== cap[0]);
104378                   text = escape$4(cap[0]);
104379                   if (cap[1] === 'www.') {
104380                     href = 'http://' + text;
104381                   } else {
104382                     href = text;
104383                   }
104384                 }
104385                 src = src.substring(cap[0].length);
104386                 out += this.renderer.link(href, null, text);
104387                 continue;
104388               }
104389
104390               // text
104391               if (cap = this.rules.text.exec(src)) {
104392                 src = src.substring(cap[0].length);
104393                 if (this.inRawBlock) {
104394                   out += this.renderer.text(this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$4(cap[0])) : cap[0]);
104395                 } else {
104396                   out += this.renderer.text(escape$4(this.smartypants(cap[0])));
104397                 }
104398                 continue;
104399               }
104400
104401               if (src) {
104402                 throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
104403               }
104404             }
104405
104406             return out;
104407           };
104408
104409           InlineLexer.escapes = function escapes (text) {
104410             return text ? text.replace(InlineLexer.rules._escapes, '$1') : text;
104411           };
104412
104413           /**
104414            * Compile Link
104415            */
104416           InlineLexer.prototype.outputLink = function outputLink (cap, link) {
104417             var href = link.href,
104418               title = link.title ? escape$4(link.title) : null;
104419
104420             return cap[0].charAt(0) !== '!'
104421               ? this.renderer.link(href, title, this.output(cap[1]))
104422               : this.renderer.image(href, title, escape$4(cap[1]));
104423           };
104424
104425           /**
104426            * Smartypants Transformations
104427            */
104428           InlineLexer.prototype.smartypants = function smartypants (text) {
104429             if (!this.options.smartypants) { return text; }
104430             return text
104431               // em-dashes
104432               .replace(/---/g, '\u2014')
104433               // en-dashes
104434               .replace(/--/g, '\u2013')
104435               // opening singles
104436               .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
104437               // closing singles & apostrophes
104438               .replace(/'/g, '\u2019')
104439               // opening doubles
104440               .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
104441               // closing doubles
104442               .replace(/"/g, '\u201d')
104443               // ellipses
104444               .replace(/\.{3}/g, '\u2026');
104445           };
104446
104447           /**
104448            * Mangle Links
104449            */
104450           InlineLexer.prototype.mangle = function mangle (text) {
104451             if (!this.options.mangle) { return text; }
104452             var l = text.length;
104453             var out = '',
104454               i = 0,
104455               ch;
104456
104457             for (; i < l; i++) {
104458               ch = text.charCodeAt(i);
104459               if (Math.random() > 0.5) {
104460                 ch = 'x' + ch.toString(16);
104461               }
104462               out += '&#' + ch + ';';
104463             }
104464
104465             return out;
104466           };
104467
104468           Object.defineProperties( InlineLexer, staticAccessors );
104469
104470           return InlineLexer;
104471         }());
104472
104473         /**
104474          * TextRenderer
104475          * returns only the textual part of the token
104476          */
104477         var TextRenderer_1 = /*@__PURE__*/(function () {
104478           function TextRenderer () {}
104479
104480           TextRenderer.prototype.strong = function strong (text) {
104481             return text;
104482           };
104483
104484           TextRenderer.prototype.em = function em (text) {
104485             return text;
104486           };
104487
104488           TextRenderer.prototype.codespan = function codespan (text) {
104489             return text;
104490           };
104491
104492           TextRenderer.prototype.del = function del (text) {
104493             return text;
104494           };
104495
104496           TextRenderer.prototype.text = function text (text$1) {
104497             return text$1;
104498           };
104499
104500           TextRenderer.prototype.link = function link (href, title, text) {
104501             return '' + text;
104502           };
104503
104504           TextRenderer.prototype.image = function image (href, title, text) {
104505             return '' + text;
104506           };
104507
104508           TextRenderer.prototype.br = function br () {
104509             return '';
104510           };
104511
104512           return TextRenderer;
104513         }());
104514
104515         var defaults$5 = defaults$1.defaults;
104516         var merge$3 = helpers$1.merge;
104517         var unescape$2 = helpers$1.unescape;
104518
104519         /**
104520          * Parsing & Compiling
104521          */
104522         var Parser_1 = /*@__PURE__*/(function () {
104523           function Parser(options) {
104524             this.tokens = [];
104525             this.token = null;
104526             this.options = options || defaults$5;
104527             this.options.renderer = this.options.renderer || new Renderer_1();
104528             this.renderer = this.options.renderer;
104529             this.renderer.options = this.options;
104530             this.slugger = new Slugger_1();
104531           }
104532
104533           /**
104534            * Static Parse Method
104535            */
104536           Parser.parse = function parse (tokens, options) {
104537             var parser = new Parser(options);
104538             return parser.parse(tokens);
104539           };
104540           /**
104541            * Parse Loop
104542            */
104543           Parser.prototype.parse = function parse (tokens) {
104544             this.inline = new InlineLexer_1(tokens.links, this.options);
104545             // use an InlineLexer with a TextRenderer to extract pure text
104546             this.inlineText = new InlineLexer_1(
104547               tokens.links,
104548               merge$3({}, this.options, { renderer: new TextRenderer_1() })
104549             );
104550             this.tokens = tokens.reverse();
104551
104552             var out = '';
104553             while (this.next()) {
104554               out += this.tok();
104555             }
104556
104557             return out;
104558           };
104559           /**
104560            * Next Token
104561            */
104562           Parser.prototype.next = function next () {
104563             this.token = this.tokens.pop();
104564             return this.token;
104565           };
104566           /**
104567            * Preview Next Token
104568            */
104569           Parser.prototype.peek = function peek () {
104570             return this.tokens[this.tokens.length - 1] || 0;
104571           };
104572           /**
104573            * Parse Text Tokens
104574            */
104575           Parser.prototype.parseText = function parseText () {
104576             var body = this.token.text;
104577
104578             while (this.peek().type === 'text') {
104579               body += '\n' + this.next().text;
104580             }
104581
104582             return this.inline.output(body);
104583           };
104584           /**
104585            * Parse Current Token
104586            */
104587           Parser.prototype.tok = function tok () {
104588             var body = '';
104589             switch (this.token.type) {
104590               case 'space': {
104591                 return '';
104592               }
104593               case 'hr': {
104594                 return this.renderer.hr();
104595               }
104596               case 'heading': {
104597                 return this.renderer.heading(
104598                   this.inline.output(this.token.text),
104599                   this.token.depth,
104600                   unescape$2(this.inlineText.output(this.token.text)),
104601                   this.slugger);
104602               }
104603               case 'code': {
104604                 return this.renderer.code(this.token.text,
104605                   this.token.lang,
104606                   this.token.escaped);
104607               }
104608               case 'table': {
104609                 var header = '',
104610                   i,
104611                   row,
104612                   cell,
104613                   j;
104614
104615                 // header
104616                 cell = '';
104617                 for (i = 0; i < this.token.header.length; i++) {
104618                   cell += this.renderer.tablecell(
104619                     this.inline.output(this.token.header[i]),
104620                     { header: true, align: this.token.align[i] }
104621                   );
104622                 }
104623                 header += this.renderer.tablerow(cell);
104624
104625                 for (i = 0; i < this.token.cells.length; i++) {
104626                   row = this.token.cells[i];
104627
104628                   cell = '';
104629                   for (j = 0; j < row.length; j++) {
104630                     cell += this.renderer.tablecell(
104631                       this.inline.output(row[j]),
104632                       { header: false, align: this.token.align[j] }
104633                     );
104634                   }
104635
104636                   body += this.renderer.tablerow(cell);
104637                 }
104638                 return this.renderer.table(header, body);
104639               }
104640               case 'blockquote_start': {
104641                 body = '';
104642
104643                 while (this.next().type !== 'blockquote_end') {
104644                   body += this.tok();
104645                 }
104646
104647                 return this.renderer.blockquote(body);
104648               }
104649               case 'list_start': {
104650                 body = '';
104651                 var ordered = this.token.ordered,
104652                   start = this.token.start;
104653
104654                 while (this.next().type !== 'list_end') {
104655                   body += this.tok();
104656                 }
104657
104658                 return this.renderer.list(body, ordered, start);
104659               }
104660               case 'list_item_start': {
104661                 body = '';
104662                 var loose = this.token.loose;
104663                 var checked = this.token.checked;
104664                 var task = this.token.task;
104665
104666                 if (this.token.task) {
104667                   if (loose) {
104668                     if (this.peek().type === 'text') {
104669                       var nextToken = this.peek();
104670                       nextToken.text = this.renderer.checkbox(checked) + ' ' + nextToken.text;
104671                     } else {
104672                       this.tokens.push({
104673                         type: 'text',
104674                         text: this.renderer.checkbox(checked)
104675                       });
104676                     }
104677                   } else {
104678                     body += this.renderer.checkbox(checked);
104679                   }
104680                 }
104681
104682                 while (this.next().type !== 'list_item_end') {
104683                   body += !loose && this.token.type === 'text'
104684                     ? this.parseText()
104685                     : this.tok();
104686                 }
104687                 return this.renderer.listitem(body, task, checked);
104688               }
104689               case 'html': {
104690                 // TODO parse inline content if parameter markdown=1
104691                 return this.renderer.html(this.token.text);
104692               }
104693               case 'paragraph': {
104694                 return this.renderer.paragraph(this.inline.output(this.token.text));
104695               }
104696               case 'text': {
104697                 return this.renderer.paragraph(this.parseText());
104698               }
104699               default: {
104700                 var errMsg = 'Token with "' + this.token.type + '" type was not found.';
104701                 if (this.options.silent) {
104702                   console.log(errMsg);
104703                 } else {
104704                   throw new Error(errMsg);
104705                 }
104706               }
104707             }
104708           };
104709
104710           return Parser;
104711         }());
104712
104713         var merge$4 = helpers$1.merge;
104714         var checkSanitizeDeprecation$1 = helpers$1.checkSanitizeDeprecation;
104715         var escape$5 = helpers$1.escape;
104716         var getDefaults = defaults$1.getDefaults;
104717         var changeDefaults = defaults$1.changeDefaults;
104718         var defaults$6 = defaults$1.defaults;
104719
104720         /**
104721          * Marked
104722          */
104723         function marked(src, opt, callback) {
104724           // throw error in case of non string input
104725           if (typeof src === 'undefined' || src === null) {
104726             throw new Error('marked(): input parameter is undefined or null');
104727           }
104728           if (typeof src !== 'string') {
104729             throw new Error('marked(): input parameter is of type '
104730               + Object.prototype.toString.call(src) + ', string expected');
104731           }
104732
104733           if (callback || typeof opt === 'function') {
104734             if (!callback) {
104735               callback = opt;
104736               opt = null;
104737             }
104738
104739             opt = merge$4({}, marked.defaults, opt || {});
104740             checkSanitizeDeprecation$1(opt);
104741             var highlight = opt.highlight;
104742             var tokens,
104743               pending,
104744               i = 0;
104745
104746             try {
104747               tokens = Lexer_1.lex(src, opt);
104748             } catch (e) {
104749               return callback(e);
104750             }
104751
104752             pending = tokens.length;
104753
104754             var done = function(err) {
104755               if (err) {
104756                 opt.highlight = highlight;
104757                 return callback(err);
104758               }
104759
104760               var out;
104761
104762               try {
104763                 out = Parser_1.parse(tokens, opt);
104764               } catch (e) {
104765                 err = e;
104766               }
104767
104768               opt.highlight = highlight;
104769
104770               return err
104771                 ? callback(err)
104772                 : callback(null, out);
104773             };
104774
104775             if (!highlight || highlight.length < 3) {
104776               return done();
104777             }
104778
104779             delete opt.highlight;
104780
104781             if (!pending) { return done(); }
104782
104783             for (; i < tokens.length; i++) {
104784               (function(token) {
104785                 if (token.type !== 'code') {
104786                   return --pending || done();
104787                 }
104788                 return highlight(token.text, token.lang, function(err, code) {
104789                   if (err) { return done(err); }
104790                   if (code == null || code === token.text) {
104791                     return --pending || done();
104792                   }
104793                   token.text = code;
104794                   token.escaped = true;
104795                   --pending || done();
104796                 });
104797               })(tokens[i]);
104798             }
104799
104800             return;
104801           }
104802           try {
104803             opt = merge$4({}, marked.defaults, opt || {});
104804             checkSanitizeDeprecation$1(opt);
104805             return Parser_1.parse(Lexer_1.lex(src, opt), opt);
104806           } catch (e) {
104807             e.message += '\nPlease report this to https://github.com/markedjs/marked.';
104808             if ((opt || marked.defaults).silent) {
104809               return '<p>An error occurred:</p><pre>'
104810                 + escape$5(e.message + '', true)
104811                 + '</pre>';
104812             }
104813             throw e;
104814           }
104815         }
104816
104817         /**
104818          * Options
104819          */
104820
104821         marked.options =
104822         marked.setOptions = function(opt) {
104823           merge$4(marked.defaults, opt);
104824           changeDefaults(marked.defaults);
104825           return marked;
104826         };
104827
104828         marked.getDefaults = getDefaults;
104829
104830         marked.defaults = defaults$6;
104831
104832         /**
104833          * Expose
104834          */
104835
104836         marked.Parser = Parser_1;
104837         marked.parser = Parser_1.parse;
104838
104839         marked.Renderer = Renderer_1;
104840         marked.TextRenderer = TextRenderer_1;
104841
104842         marked.Lexer = Lexer_1;
104843         marked.lexer = Lexer_1.lex;
104844
104845         marked.InlineLexer = InlineLexer_1;
104846         marked.inlineLexer = InlineLexer_1.output;
104847
104848         marked.Slugger = Slugger_1;
104849
104850         marked.parse = marked;
104851
104852         var marked_1 = marked;
104853
104854         function pointBox(loc, context) {
104855             var rect = context.surfaceRect();
104856             var point = context.curtainProjection(loc);
104857             return {
104858                 left: point[0] + rect.left - 40,
104859                 top: point[1] + rect.top - 60,
104860                 width: 80,
104861                 height: 90
104862             };
104863         }
104864
104865
104866         function pad$2(locOrBox, padding, context) {
104867             var box;
104868             if (locOrBox instanceof Array) {
104869                 var rect = context.surfaceRect();
104870                 var point = context.curtainProjection(locOrBox);
104871                 box = {
104872                     left: point[0] + rect.left,
104873                     top: point[1] + rect.top
104874                 };
104875             } else {
104876                 box = locOrBox;
104877             }
104878
104879             return {
104880                 left: box.left - padding,
104881                 top: box.top - padding,
104882                 width: (box.width || 0) + 2 * padding,
104883                 height: (box.width || 0) + 2 * padding
104884             };
104885         }
104886
104887
104888         function icon(name, svgklass, useklass) {
104889             return '<svg class="icon ' + (svgklass || '') + '">' +
104890                  '<use xlink:href="' + name + '"' +
104891                  (useklass ? ' class="' + useklass + '"' : '') + '></use></svg>';
104892         }
104893
104894
104895         function slugify(text) {
104896             return text.toString().toLowerCase()
104897                 .replace(/\s+/g, '-')           // Replace spaces with -
104898                 .replace(/[^\w\-]+/g, '')       // Remove all non-word chars
104899                 .replace(/\-\-+/g, '-')         // Replace multiple - with single -
104900                 .replace(/^-+/, '')             // Trim - from start of text
104901                 .replace(/-+$/, '');            // Trim - from end of text
104902         }
104903
104904
104905         // console warning for missing walkthrough names
104906         var missingStrings = {};
104907         function checkKey(key, text) {
104908             if (t(key, { default: undefined}) === undefined) {
104909                 if (missingStrings.hasOwnProperty(key)) { return; }  // warn once
104910                 missingStrings[key] = text;
104911                 var missing = key + ': ' + text;
104912                 if (typeof console !== 'undefined') { console.log(missing); } // eslint-disable-line
104913             }
104914         }
104915
104916
104917         function localize(obj) {
104918             var key;
104919
104920             // Assign name if entity has one..
104921             var name = obj.tags && obj.tags.name;
104922             if (name) {
104923                 key = 'intro.graph.name.' + slugify(name);
104924                 obj.tags.name = t(key, { default: name });
104925                 checkKey(key, name);
104926             }
104927
104928             // Assign street name if entity has one..
104929             var street = obj.tags && obj.tags['addr:street'];
104930             if (street) {
104931                 key = 'intro.graph.name.' + slugify(street);
104932                 obj.tags['addr:street'] = t(key, { default: street });
104933                 checkKey(key, street);
104934
104935                 // Add address details common across walkthrough..
104936                 var addrTags = [
104937                     'block_number', 'city', 'county', 'district', 'hamlet', 'neighbourhood',
104938                     'postcode', 'province', 'quarter', 'state', 'subdistrict', 'suburb'
104939                 ];
104940                 addrTags.forEach(function(k) {
104941                     var key = 'intro.graph.' + k;
104942                     var tag = 'addr:' + k;
104943                     var val = obj.tags && obj.tags[tag];
104944                     var str = t(key, { default: val });
104945
104946                     if (str) {
104947                         if (str.match(/^<.*>$/) !== null) {
104948                             delete obj.tags[tag];
104949                         } else {
104950                             obj.tags[tag] = str;
104951                         }
104952                     }
104953                 });
104954             }
104955
104956             return obj;
104957         }
104958
104959
104960         // Used to detect squareness.. some duplicataion of code from actionOrthogonalize.
104961         function isMostlySquare(points) {
104962             // note: uses 15 here instead of the 12 from actionOrthogonalize because
104963             // actionOrthogonalize can actually straighten some larger angles as it iterates
104964             var threshold = 15; // degrees within right or straight
104965             var lowerBound = Math.cos((90 - threshold) * Math.PI / 180);  // near right
104966             var upperBound = Math.cos(threshold * Math.PI / 180);         // near straight
104967
104968             for (var i = 0; i < points.length; i++) {
104969                 var a = points[(i - 1 + points.length) % points.length];
104970                 var origin = points[i];
104971                 var b = points[(i + 1) % points.length];
104972
104973                 var dotp = geoVecNormalizedDot(a, b, origin);
104974                 var mag = Math.abs(dotp);
104975                 if (mag > lowerBound && mag < upperBound) {
104976                     return false;
104977                 }
104978             }
104979
104980             return true;
104981         }
104982
104983
104984         function selectMenuItem(operation) {
104985             var selector = '.edit-menu .edit-menu-item-' + operation +
104986                 ', .radial-menu .radial-menu-item-' + operation;
104987             return d3_select(selector);
104988         }
104989
104990
104991         function transitionTime(point1, point2) {
104992             var distance = geoSphericalDistance(point1, point2);
104993             if (distance === 0)
104994                 { return 0; }
104995             else if (distance < 80)
104996                 { return 500; }
104997             else
104998                 { return 1000; }
104999         }
105000
105001         var dataIntroGraph = {n1:{id:"n1",loc:[-85.631039,41.948829]},n10:{id:"n10",loc:[-85.634733,41.941588]},n100:{id:"n100",loc:[-85.637395,41.942252]},n1000:{id:"n1000",loc:[-85.632699,41.944763]},n1001:{id:"n1001",loc:[-85.632685,41.944763]},n1002:{id:"n1002",loc:[-85.632673,41.944755]},n1003:{id:"n1003",loc:[-85.632595,41.944682]},n1004:{id:"n1004",loc:[-85.632576,41.944673]},n1005:{id:"n1005",loc:[-85.632551,41.944667]},n1006:{id:"n1006",loc:[-85.63253,41.944667]},n1007:{id:"n1007",loc:[-85.632502,41.944669]},n1008:{id:"n1008",loc:[-85.632483,41.944677]},n1009:{id:"n1009",loc:[-85.632383,41.944731]},n101:{id:"n101",loc:[-85.637357,41.942252]},n1010:{id:"n1010",loc:[-85.63349,41.944976],tags:{"addr:city":"Three Rivers","addr:housenumber":"31","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Sherwin Williams",shop:"paint",brand:"Sherwin Williams","brand:wikidata":"Q48881","brand:wikipedia":"en:Sherwin-Williams"}},n1011:{id:"n1011",loc:[-85.633548,41.945034],tags:{"addr:city":"Three Rivers","addr:housenumber":"33","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Unique Jewelry",shop:"jewelry"}},n1012:{id:"n1012",loc:[-85.633683,41.945129],tags:{"addr:city":"Three Rivers","addr:housenumber":"37","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"World Fare",shop:"gift"}},n1013:{id:"n1013",loc:[-85.634563,41.945469],tags:{"addr:city":"Three Rivers","addr:housenumber":"62","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Golden Finch Framing",shop:"frame"}},n1014:{id:"n1014",loc:[-85.634469,41.945379],tags:{"addr:city":"Three Rivers","addr:housenumber":"58","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Dollar Tree",brand:"Dollar Tree","brand:wikidata":"Q5289230","brand:wikipedia":"en:Dollar Tree",shop:"variety_store"}},n1015:{id:"n1015",loc:[-85.634227,41.945159],tags:{"addr:city":"Three Rivers","addr:housenumber":"48","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",amenity:"theatre",name:"Riviera Theatre"}},n1016:{id:"n1016",loc:[-85.634057,41.945012],tags:{"addr:city":"Three Rivers","addr:housenumber":"42","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"River City Appliance",shop:"appliance"}},n1017:{id:"n1017",loc:[-85.633879,41.945325],tags:{"addr:city":"Three Rivers","addr:housenumber":"45","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Paparazzi Tattoo",shop:"tattoo"}},n1018:{id:"n1018",loc:[-85.634914,41.945839],tags:{"addr:city":"Three Rivers","addr:housenumber":"88","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",amenity:"bank",name:"Southern Michigan Bank"}},n1019:{id:"n1019",loc:[-85.634513,41.946181]},n102:{id:"n102",loc:[-85.637357,41.942216]},n1020:{id:"n1020",loc:[-85.634079,41.946194]},n1021:{id:"n1021",loc:[-85.634357,41.945805]},n1022:{id:"n1022",loc:[-85.634389,41.945788]},n1023:{id:"n1023",loc:[-85.634491,41.94581]},n1024:{id:"n1024",loc:[-85.634513,41.945853]},n1025:{id:"n1025",loc:[-85.634506,41.94583]},n1026:{id:"n1026",loc:[-85.634762,41.946056],tags:{crossing:"marked",highway:"crossing"}},n1027:{id:"n1027",loc:[-85.634766,41.946178]},n1028:{id:"n1028",loc:[-85.634622,41.946179],tags:{crossing:"marked",highway:"crossing"}},n1029:{id:"n1029",loc:[-85.640655,41.942057]},n103:{id:"n103",loc:[-85.637386,41.942054]},n1030:{id:"n1030",loc:[-85.640947,41.942057]},n1031:{id:"n1031",loc:[-85.640957,41.942593]},n1032:{id:"n1032",loc:[-85.630953,41.960873]},n1033:{id:"n1033",loc:[-85.632174,41.960679]},n1034:{id:"n1034",loc:[-85.638785,41.943066]},n1035:{id:"n1035",loc:[-85.638853,41.943065]},n1036:{id:"n1036",loc:[-85.638855,41.943183]},n1037:{id:"n1037",loc:[-85.638552,41.943189]},n1038:{id:"n1038",loc:[-85.63855,41.943149]},n1039:{id:"n1039",loc:[-85.638638,41.943068]},n104:{id:"n104",loc:[-85.637387,41.942125]},n1040:{id:"n1040",loc:[-85.638638,41.943078]},n1041:{id:"n1041",loc:[-85.638813,41.943163]},n1042:{id:"n1042",loc:[-85.638684,41.943165]},n1043:{id:"n1043",loc:[-85.638682,41.943105]},n1044:{id:"n1044",loc:[-85.638706,41.943105]},n1045:{id:"n1045",loc:[-85.638707,41.943117]},n1046:{id:"n1046",loc:[-85.638812,41.943115]},n1047:{id:"n1047",loc:[-85.638769,41.943407]},n1048:{id:"n1048",loc:[-85.638549,41.943407]},n1049:{id:"n1049",loc:[-85.638567,41.943555]},n105:{id:"n105",loc:[-85.637319,41.942125]},n1050:{id:"n1050",loc:[-85.638426,41.943554]},n1051:{id:"n1051",loc:[-85.638427,41.94346]},n1052:{id:"n1052",loc:[-85.638568,41.943461]},n1053:{id:"n1053",loc:[-85.639264,41.943415]},n1054:{id:"n1054",loc:[-85.639082,41.943417]},n1055:{id:"n1055",loc:[-85.63908,41.943331]},n1056:{id:"n1056",loc:[-85.639136,41.94333]},n1057:{id:"n1057",loc:[-85.639158,41.943312]},n1058:{id:"n1058",loc:[-85.639188,41.943313]},n1059:{id:"n1059",loc:[-85.639211,41.943331]},n106:{id:"n106",loc:[-85.637319,41.942137]},n1060:{id:"n1060",loc:[-85.639262,41.943331]},n1061:{id:"n1061",loc:[-85.638986,41.943515]},n1062:{id:"n1062",loc:[-85.63888,41.943521]},n1063:{id:"n1063",loc:[-85.638871,41.943436]},n1064:{id:"n1064",loc:[-85.638958,41.943431]},n1065:{id:"n1065",loc:[-85.638979,41.943443]},n1066:{id:"n1066",loc:[-85.63926,41.943703]},n1067:{id:"n1067",loc:[-85.639152,41.943704]},n1068:{id:"n1068",loc:[-85.639152,41.943691]},n1069:{id:"n1069",loc:[-85.639063,41.943691]},n107:{id:"n107",loc:[-85.637259,41.942137]},n1070:{id:"n1070",loc:[-85.639062,41.943613]},n1071:{id:"n1071",loc:[-85.639259,41.943611]},n1072:{id:"n1072",loc:[-85.639117,41.943726]},n1073:{id:"n1073",loc:[-85.639118,41.943767]},n1074:{id:"n1074",loc:[-85.639051,41.943768]},n1075:{id:"n1075",loc:[-85.63905,41.943727]},n1076:{id:"n1076",loc:[-85.638627,41.943716]},n1077:{id:"n1077",loc:[-85.63863,41.943634]},n1078:{id:"n1078",loc:[-85.63844,41.943631]},n1079:{id:"n1079",loc:[-85.638437,41.943729]},n108:{id:"n108",loc:[-85.637259,41.942126]},n1080:{id:"n1080",loc:[-85.638533,41.94373]},n1081:{id:"n1081",loc:[-85.638534,41.943715]},n1082:{id:"n1082",loc:[-85.638678,41.943941]},n1083:{id:"n1083",loc:[-85.638522,41.943944]},n1084:{id:"n1084",loc:[-85.63852,41.943864]},n1085:{id:"n1085",loc:[-85.638676,41.943861]},n1086:{id:"n1086",loc:[-85.638663,41.944059]},n1087:{id:"n1087",loc:[-85.638513,41.944061]},n1088:{id:"n1088",loc:[-85.638511,41.943991]},n1089:{id:"n1089",loc:[-85.638661,41.943989]},n109:{id:"n109",loc:[-85.637193,41.942126]},n1090:{id:"n1090",loc:[-85.63865,41.944134]},n1091:{id:"n1091",loc:[-85.638429,41.944144]},n1092:{id:"n1092",loc:[-85.638426,41.944106]},n1093:{id:"n1093",loc:[-85.638476,41.944104]},n1094:{id:"n1094",loc:[-85.638475,41.94409]},n1095:{id:"n1095",loc:[-85.638594,41.944084]},n1096:{id:"n1096",loc:[-85.638595,41.944101]},n1097:{id:"n1097",loc:[-85.638647,41.944099]},n1098:{id:"n1098",loc:[-85.63829,41.944154]},n1099:{id:"n1099",loc:[-85.638558,41.944155]},n11:{id:"n11",loc:[-85.634602,41.941523]},n110:{id:"n110",loc:[-85.637192,41.942053]},n1100:{id:"n1100",loc:[-85.638558,41.944338]},n1101:{id:"n1101",loc:[-85.638851,41.944408]},n1102:{id:"n1102",loc:[-85.637771,41.943989]},n1103:{id:"n1103",loc:[-85.639345,41.943964]},n1104:{id:"n1104",loc:[-85.638515,41.94397]},n1105:{id:"n1105",loc:[-85.639256,41.943928]},n1106:{id:"n1106",loc:[-85.639157,41.943929]},n1107:{id:"n1107",loc:[-85.639156,41.9439]},n1108:{id:"n1108",loc:[-85.639118,41.9439]},n1109:{id:"n1109",loc:[-85.639116,41.94382]},n111:{id:"n111",loc:[-85.637248,41.942053]},n1110:{id:"n1110",loc:[-85.639202,41.943819]},n1111:{id:"n1111",loc:[-85.639202,41.943837]},n1112:{id:"n1112",loc:[-85.639293,41.943836]},n1113:{id:"n1113",loc:[-85.639295,41.943898]},n1114:{id:"n1114",loc:[-85.639255,41.943898]},n1115:{id:"n1115",loc:[-85.639296,41.944083]},n1116:{id:"n1116",loc:[-85.639144,41.944084]},n1117:{id:"n1117",loc:[-85.639143,41.944026]},n1118:{id:"n1118",loc:[-85.639162,41.944026]},n1119:{id:"n1119",loc:[-85.639162,41.944]},n112:{id:"n112",loc:[-85.637248,41.942042]},n1120:{id:"n1120",loc:[-85.639295,41.943999]},n1121:{id:"n1121",loc:[-85.639131,41.944139]},n1122:{id:"n1122",loc:[-85.63901,41.94414]},n1123:{id:"n1123",loc:[-85.63901,41.944076]},n1124:{id:"n1124",loc:[-85.63913,41.944075]},n1125:{id:"n1125",loc:[-85.639092,41.944155]},n1126:{id:"n1126",loc:[-85.639093,41.944308]},n1127:{id:"n1127",loc:[-85.639225,41.944308]},n1128:{id:"n1128",loc:[-85.639225,41.94429]},n1129:{id:"n1129",loc:[-85.639253,41.944289]},n113:{id:"n113",loc:[-85.637338,41.942041]},n1130:{id:"n1130",loc:[-85.639253,41.944269]},n1131:{id:"n1131",loc:[-85.639243,41.944269]},n1132:{id:"n1132",loc:[-85.639243,41.944229]},n1133:{id:"n1133",loc:[-85.639224,41.944229]},n1134:{id:"n1134",loc:[-85.639224,41.944196]},n1135:{id:"n1135",loc:[-85.639195,41.944196]},n1136:{id:"n1136",loc:[-85.639195,41.944155]},n1137:{id:"n1137",loc:[-85.639072,41.944154]},n1138:{id:"n1138",loc:[-85.638865,41.944154]},n1139:{id:"n1139",loc:[-85.638863,41.943967]},n114:{id:"n114",loc:[-85.637338,41.942055]},n1140:{id:"n1140",loc:[-85.6386,41.942698]},n1141:{id:"n1141",loc:[-85.639348,41.942698]},n1142:{id:"n1142",loc:[-85.639377,41.944984]},n1143:{id:"n1143",loc:[-85.63937,41.945013]},n1144:{id:"n1144",loc:[-85.639357,41.945033]},n1145:{id:"n1145",loc:[-85.639353,41.945053]},n1146:{id:"n1146",loc:[-85.639352,41.945084]},n1147:{id:"n1147",loc:[-85.638278,41.945516]},n1148:{id:"n1148",loc:[-85.637505,41.945801]},n1149:{id:"n1149",loc:[-85.637327,41.945857]},n115:{id:"n115",loc:[-85.637583,41.941943]},n1150:{id:"n1150",loc:[-85.637168,41.945899]},n1151:{id:"n1151",loc:[-85.637017,41.94593]},n1152:{id:"n1152",loc:[-85.637185,41.945938]},n1153:{id:"n1153",loc:[-85.63682,41.945963]},n1154:{id:"n1154",loc:[-85.636639,41.945984]},n1155:{id:"n1155",loc:[-85.636439,41.945999]},n1156:{id:"n1156",loc:[-85.635801,41.945999]},n1157:{id:"n1157",loc:[-85.635769,41.945908]},n1158:{id:"n1158",loc:[-85.635953,41.946154]},n1159:{id:"n1159",loc:[-85.635472,41.94598]},n116:{id:"n116",loc:[-85.637584,41.941983]},n1160:{id:"n1160",loc:[-85.635409,41.945981]},n1161:{id:"n1161",loc:[-85.635583,41.945987]},n1162:{id:"n1162",loc:[-85.636452,41.945805]},n1163:{id:"n1163",loc:[-85.636425,41.94582]},n1164:{id:"n1164",loc:[-85.636396,41.945817]},n1165:{id:"n1165",loc:[-85.636368,41.945797]},n1166:{id:"n1166",loc:[-85.636346,41.945767]},n1167:{id:"n1167",loc:[-85.636307,41.945745]},n1168:{id:"n1168",loc:[-85.636194,41.94565]},n1169:{id:"n1169",loc:[-85.636121,41.945579]},n117:{id:"n117",loc:[-85.63751,41.941983]},n1170:{id:"n1170",loc:[-85.635995,41.945432]},n1171:{id:"n1171",loc:[-85.637564,41.943538]},n1172:{id:"n1172",loc:[-85.63756,41.943505]},n1173:{id:"n1173",loc:[-85.637435,41.943489]},n1174:{id:"n1174",loc:[-85.637093,41.943556]},n1175:{id:"n1175",loc:[-85.634836,41.941574]},n1176:{id:"n1176",loc:[-85.634692,41.9415]},n1177:{id:"n1177",loc:[-85.634261,41.941337]},n1178:{id:"n1178",loc:[-85.634208,41.940962]},n1179:{id:"n1179",loc:[-85.635247,41.940968]},n118:{id:"n118",loc:[-85.637509,41.941944]},n1180:{id:"n1180",loc:[-85.63514,41.941205]},n1181:{id:"n1181",loc:[-85.634858,41.941511]},n1182:{id:"n1182",loc:[-85.630725,41.943465]},n1183:{id:"n1183",loc:[-85.632591,41.942826]},n1184:{id:"n1184",loc:[-85.634487,41.941928]},n1185:{id:"n1185",loc:[-85.634499,41.942056]},n1186:{id:"n1186",loc:[-85.63433,41.943102]},n1187:{id:"n1187",loc:[-85.634158,41.943151]},n1188:{id:"n1188",loc:[-85.634107,41.94305]},n1189:{id:"n1189",loc:[-85.634279,41.943002]},n119:{id:"n119",loc:[-85.637724,41.941973]},n1190:{id:"n1190",loc:[-85.634362,41.943762]},n1191:{id:"n1191",loc:[-85.634331,41.943731]},n1192:{id:"n1192",loc:[-85.634396,41.943695]},n1193:{id:"n1193",loc:[-85.634426,41.943726]},n1194:{id:"n1194",loc:[-85.621569,41.956021]},n1195:{id:"n1195",loc:[-85.621574,41.956164]},n1196:{id:"n1196",loc:[-85.621489,41.956165]},n1197:{id:"n1197",loc:[-85.621488,41.956136]},n1198:{id:"n1198",loc:[-85.621372,41.956139]},n1199:{id:"n1199",loc:[-85.621369,41.956049]},n12:{id:"n12",loc:[-85.63359,41.941093]},n120:{id:"n120",loc:[-85.637633,41.941973]},n1200:{id:"n1200",loc:[-85.621493,41.956047]},n1201:{id:"n1201",loc:[-85.621492,41.956022]},n1202:{id:"n1202",loc:[-85.619744,41.953192]},n1203:{id:"n1203",loc:[-85.619059,41.953902]},n1204:{id:"n1204",loc:[-85.623984,41.95469]},n1205:{id:"n1205",loc:[-85.630159,41.958208]},n1206:{id:"n1206",loc:[-85.63002,41.958208]},n1207:{id:"n1207",loc:[-85.630021,41.95814]},n1208:{id:"n1208",loc:[-85.63,41.95814]},n1209:{id:"n1209",loc:[-85.63,41.958043]},n121:{id:"n121",loc:[-85.637633,41.941853]},n1210:{id:"n1210",loc:[-85.630159,41.958043]},n1211:{id:"n1211",loc:[-85.630304,41.957566]},n1212:{id:"n1212",loc:[-85.630303,41.957684]},n1213:{id:"n1213",loc:[-85.630073,41.957683]},n1214:{id:"n1214",loc:[-85.630072,41.957721]},n1215:{id:"n1215",loc:[-85.629993,41.95772]},n1216:{id:"n1216",loc:[-85.629993,41.95768]},n1217:{id:"n1217",loc:[-85.629968,41.95768]},n1218:{id:"n1218",loc:[-85.629969,41.957588]},n1219:{id:"n1219",loc:[-85.630219,41.95759]},n122:{id:"n122",loc:[-85.637724,41.941853]},n1220:{id:"n1220",loc:[-85.630219,41.957566]},n1221:{id:"n1221",loc:[-85.630717,41.957744]},n1222:{id:"n1222",loc:[-85.630596,41.957745]},n1223:{id:"n1223",loc:[-85.630598,41.957553]},n1224:{id:"n1224",loc:[-85.630717,41.957555]},n1225:{id:"n1225",loc:[-85.630609,41.957745]},n1226:{id:"n1226",loc:[-85.63061,41.957789]},n1227:{id:"n1227",loc:[-85.630327,41.957791]},n1228:{id:"n1228",loc:[-85.630324,41.95752]},n1229:{id:"n1229",loc:[-85.630325,41.95756]},n123:{id:"n123",loc:[-85.637773,41.941988]},n1230:{id:"n1230",loc:[-85.63057,41.95756]},n1231:{id:"n1231",loc:[-85.63069,41.958016]},n1232:{id:"n1232",loc:[-85.630586,41.958017]},n1233:{id:"n1233",loc:[-85.630584,41.957956]},n1234:{id:"n1234",loc:[-85.630614,41.957956]},n1235:{id:"n1235",loc:[-85.630611,41.957835]},n1236:{id:"n1236",loc:[-85.630737,41.957833]},n1237:{id:"n1237",loc:[-85.630739,41.957921]},n1238:{id:"n1238",loc:[-85.630688,41.957922]},n1239:{id:"n1239",loc:[-85.630719,41.958291]},n124:{id:"n124",loc:[-85.637773,41.942046]},n1240:{id:"n1240",loc:[-85.630592,41.958291]},n1241:{id:"n1241",loc:[-85.630593,41.958108]},n1242:{id:"n1242",loc:[-85.630701,41.958109]},n1243:{id:"n1243",loc:[-85.6307,41.958173]},n1244:{id:"n1244",loc:[-85.630711,41.958173]},n1245:{id:"n1245",loc:[-85.630711,41.958233]},n1246:{id:"n1246",loc:[-85.630719,41.958233]},n1247:{id:"n1247",loc:[-85.630523,41.958329]},n1248:{id:"n1248",loc:[-85.630388,41.958329]},n1249:{id:"n1249",loc:[-85.630387,41.958262]},n125:{id:"n125",loc:[-85.637693,41.942047]},n1250:{id:"n1250",loc:[-85.630523,41.958261]},n1251:{id:"n1251",loc:[-85.63072,41.958636]},n1252:{id:"n1252",loc:[-85.630721,41.958709]},n1253:{id:"n1253",loc:[-85.630503,41.958712]},n1254:{id:"n1254",loc:[-85.630498,41.958511]},n1255:{id:"n1255",loc:[-85.630635,41.95851]},n1256:{id:"n1256",loc:[-85.630638,41.958636]},n1257:{id:"n1257",loc:[-85.630437,41.958822]},n1258:{id:"n1258",loc:[-85.630437,41.958849]},n1259:{id:"n1259",loc:[-85.630393,41.958849]},n126:{id:"n126",loc:[-85.637692,41.941988]},n1260:{id:"n1260",loc:[-85.630393,41.958822]},n1261:{id:"n1261",loc:[-85.630605,41.959102]},n1262:{id:"n1262",loc:[-85.63049,41.959104]},n1263:{id:"n1263",loc:[-85.630487,41.958996]},n1264:{id:"n1264",loc:[-85.630462,41.958996]},n1265:{id:"n1265",loc:[-85.63046,41.958922]},n1266:{id:"n1266",loc:[-85.630562,41.958921]},n1267:{id:"n1267",loc:[-85.630564,41.958992]},n1268:{id:"n1268",loc:[-85.630602,41.958992]},n1269:{id:"n1269",loc:[-85.630126,41.957096]},n127:{id:"n127",loc:[-85.637604,41.941994]},n1270:{id:"n1270",loc:[-85.630129,41.957283]},n1271:{id:"n1271",loc:[-85.629993,41.957284]},n1272:{id:"n1272",loc:[-85.629992,41.957216]},n1273:{id:"n1273",loc:[-85.630015,41.957215]},n1274:{id:"n1274",loc:[-85.630013,41.957097]},n1275:{id:"n1275",loc:[-85.630211,41.956592]},n1276:{id:"n1276",loc:[-85.630211,41.956676]},n1277:{id:"n1277",loc:[-85.630162,41.956676]},n1278:{id:"n1278",loc:[-85.630162,41.95676]},n1279:{id:"n1279",loc:[-85.630037,41.956761]},n128:{id:"n128",loc:[-85.637604,41.942057]},n1280:{id:"n1280",loc:[-85.630037,41.956592]},n1281:{id:"n1281",loc:[-85.630309,41.95653]},n1282:{id:"n1282",loc:[-85.630326,41.957065]},n1283:{id:"n1283",loc:[-85.630118,41.957065]},n1284:{id:"n1284",loc:[-85.630119,41.957096]},n1285:{id:"n1285",loc:[-85.63067,41.957307]},n1286:{id:"n1286",loc:[-85.630536,41.957308]},n1287:{id:"n1287",loc:[-85.630533,41.957111]},n1288:{id:"n1288",loc:[-85.630667,41.95711]},n1289:{id:"n1289",loc:[-85.630676,41.956808]},n129:{id:"n129",loc:[-85.63748,41.942057]},n1290:{id:"n1290",loc:[-85.630551,41.956808]},n1291:{id:"n1291",loc:[-85.630552,41.956982]},n1292:{id:"n1292",loc:[-85.63059,41.956982]},n1293:{id:"n1293",loc:[-85.63059,41.957001]},n1294:{id:"n1294",loc:[-85.630692,41.957001]},n1295:{id:"n1295",loc:[-85.630692,41.956936]},n1296:{id:"n1296",loc:[-85.630676,41.956936]},n1297:{id:"n1297",loc:[-85.630496,41.956889]},n1298:{id:"n1298",loc:[-85.630501,41.956947]},n1299:{id:"n1299",loc:[-85.630377,41.956953]},n13:{id:"n13",loc:[-85.633643,41.941143]},n130:{id:"n130",loc:[-85.63748,41.941994]},n1300:{id:"n1300",loc:[-85.630359,41.956938]},n1301:{id:"n1301",loc:[-85.630359,41.956912]},n1302:{id:"n1302",loc:[-85.63038,41.956894]},n1303:{id:"n1303",loc:[-85.630679,41.956747]},n1304:{id:"n1304",loc:[-85.630572,41.956748]},n1305:{id:"n1305",loc:[-85.63057,41.956668]},n1306:{id:"n1306",loc:[-85.630501,41.956669]},n1307:{id:"n1307",loc:[-85.630499,41.95659]},n1308:{id:"n1308",loc:[-85.630565,41.956589]},n1309:{id:"n1309",loc:[-85.630564,41.956541]},n131:{id:"n131",loc:[-85.637431,41.941832]},n1310:{id:"n1310",loc:[-85.630686,41.956539]},n1311:{id:"n1311",loc:[-85.630688,41.956631]},n1312:{id:"n1312",loc:[-85.630676,41.956631]},n1313:{id:"n1313",loc:[-85.630686,41.956487]},n1314:{id:"n1314",loc:[-85.63059,41.956487]},n1315:{id:"n1315",loc:[-85.63059,41.956396]},n1316:{id:"n1316",loc:[-85.630686,41.956396]},n1317:{id:"n1317",loc:[-85.630643,41.9563]},n1318:{id:"n1318",loc:[-85.630548,41.956301]},n1319:{id:"n1319",loc:[-85.630545,41.956217]},n132:{id:"n132",loc:[-85.637432,41.94189]},n1320:{id:"n1320",loc:[-85.630529,41.956214]},n1321:{id:"n1321",loc:[-85.630521,41.956202]},n1322:{id:"n1322",loc:[-85.63052,41.95618]},n1323:{id:"n1323",loc:[-85.630527,41.956169]},n1324:{id:"n1324",loc:[-85.630544,41.956163]},n1325:{id:"n1325",loc:[-85.630543,41.956094]},n1326:{id:"n1326",loc:[-85.630641,41.956093]},n1327:{id:"n1327",loc:[-85.630642,41.956134]},n1328:{id:"n1328",loc:[-85.630656,41.956134]},n1329:{id:"n1329",loc:[-85.630657,41.956252]},n133:{id:"n133",loc:[-85.637412,41.94189]},n1330:{id:"n1330",loc:[-85.630643,41.956252]},n1331:{id:"n1331",loc:[-85.630409,41.956044]},n1332:{id:"n1332",loc:[-85.630409,41.956075]},n1333:{id:"n1333",loc:[-85.630195,41.956078]},n1334:{id:"n1334",loc:[-85.630195,41.9561]},n1335:{id:"n1335",loc:[-85.630088,41.956101]},n1336:{id:"n1336",loc:[-85.630087,41.956048]},n1337:{id:"n1337",loc:[-85.630345,41.956114]},n1338:{id:"n1338",loc:[-85.630328,41.956113]},n1339:{id:"n1339",loc:[-85.63034,41.956189]},n134:{id:"n134",loc:[-85.637413,41.941938]},n1340:{id:"n1340",loc:[-85.630355,41.956185]},n1341:{id:"n1341",loc:[-85.630311,41.956117]},n1342:{id:"n1342",loc:[-85.630297,41.956125]},n1343:{id:"n1343",loc:[-85.630287,41.956136]},n1344:{id:"n1344",loc:[-85.630283,41.956149]},n1345:{id:"n1345",loc:[-85.630285,41.956162]},n1346:{id:"n1346",loc:[-85.630293,41.956174]},n1347:{id:"n1347",loc:[-85.630306,41.956183]},n1348:{id:"n1348",loc:[-85.630322,41.956188]},n1349:{id:"n1349",loc:[-85.630368,41.956179]},n135:{id:"n135",loc:[-85.637342,41.941939]},n1350:{id:"n1350",loc:[-85.630378,41.95617]},n1351:{id:"n1351",loc:[-85.630384,41.956159]},n1352:{id:"n1352",loc:[-85.630385,41.956147]},n1353:{id:"n1353",loc:[-85.630381,41.956136]},n1354:{id:"n1354",loc:[-85.630372,41.956126]},n1355:{id:"n1355",loc:[-85.63036,41.956118]},n1356:{id:"n1356",loc:[-85.630776,41.956041]},n1357:{id:"n1357",loc:[-85.630195,41.956036]},n1358:{id:"n1358",loc:[-85.630137,41.956037]},n1359:{id:"n1359",loc:[-85.630136,41.956006]},n136:{id:"n136",loc:[-85.637342,41.941914]},n1360:{id:"n1360",loc:[-85.630194,41.956005]},n1361:{id:"n1361",loc:[-85.629864,41.956039]},n1362:{id:"n1362",loc:[-85.629864,41.955862]},n1363:{id:"n1363",loc:[-85.629541,41.958291]},n1364:{id:"n1364",loc:[-85.629419,41.958292]},n1365:{id:"n1365",loc:[-85.629417,41.958168]},n1366:{id:"n1366",loc:[-85.629445,41.958168]},n1367:{id:"n1367",loc:[-85.629444,41.958109]},n1368:{id:"n1368",loc:[-85.629537,41.958108]},n1369:{id:"n1369",loc:[-85.629351,41.958136]},n137:{id:"n137",loc:[-85.637212,41.941916]},n1370:{id:"n1370",loc:[-85.629352,41.958202]},n1371:{id:"n1371",loc:[-85.629365,41.958202]},n1372:{id:"n1372",loc:[-85.629365,41.958223]},n1373:{id:"n1373",loc:[-85.629291,41.958224]},n1374:{id:"n1374",loc:[-85.62929,41.958137]},n1375:{id:"n1375",loc:[-85.629443,41.958073]},n1376:{id:"n1376",loc:[-85.629252,41.958075]},n1377:{id:"n1377",loc:[-85.629253,41.95827]},n1378:{id:"n1378",loc:[-85.629566,41.957585]},n1379:{id:"n1379",loc:[-85.629566,41.957692]},n138:{id:"n138",loc:[-85.637211,41.941835]},n1380:{id:"n1380",loc:[-85.629281,41.957693]},n1381:{id:"n1381",loc:[-85.62928,41.957585]},n1382:{id:"n1382",loc:[-85.629004,41.957599]},n1383:{id:"n1383",loc:[-85.629004,41.957682]},n1384:{id:"n1384",loc:[-85.628902,41.957682]},n1385:{id:"n1385",loc:[-85.628902,41.957723]},n1386:{id:"n1386",loc:[-85.628731,41.957724]},n1387:{id:"n1387",loc:[-85.628731,41.9576]},n1388:{id:"n1388",loc:[-85.62836,41.957679]},n1389:{id:"n1389",loc:[-85.628359,41.957759]},n139:{id:"n139",loc:[-85.637293,41.941834]},n1390:{id:"n1390",loc:[-85.628062,41.957757]},n1391:{id:"n1391",loc:[-85.628063,41.957657]},n1392:{id:"n1392",loc:[-85.628198,41.957657]},n1393:{id:"n1393",loc:[-85.628198,41.957678]},n1394:{id:"n1394",loc:[-85.627775,41.958095]},n1395:{id:"n1395",loc:[-85.627608,41.958095]},n1396:{id:"n1396",loc:[-85.627606,41.957829]},n1397:{id:"n1397",loc:[-85.627774,41.957829]},n1398:{id:"n1398",loc:[-85.626816,41.957636]},n1399:{id:"n1399",loc:[-85.626787,41.957681]},n14:{id:"n14",loc:[-85.633643,41.940122]},n140:{id:"n140",loc:[-85.637293,41.941823]},n1400:{id:"n1400",loc:[-85.626673,41.95764]},n1401:{id:"n1401",loc:[-85.626703,41.957594]},n1402:{id:"n1402",loc:[-85.62694,41.95752]},n1403:{id:"n1403",loc:[-85.62688,41.957611]},n1404:{id:"n1404",loc:[-85.626798,41.957582]},n1405:{id:"n1405",loc:[-85.626793,41.95759]},n1406:{id:"n1406",loc:[-85.626657,41.95754]},n1407:{id:"n1407",loc:[-85.626666,41.957526]},n1408:{id:"n1408",loc:[-85.626584,41.957497]},n1409:{id:"n1409",loc:[-85.626638,41.957415]},n141:{id:"n141",loc:[-85.637363,41.941822]},n1410:{id:"n1410",loc:[-85.626731,41.957449]},n1411:{id:"n1411",loc:[-85.626725,41.957457]},n1412:{id:"n1412",loc:[-85.626843,41.9575]},n1413:{id:"n1413",loc:[-85.626851,41.957487]},n1414:{id:"n1414",loc:[-85.626579,41.957521]},n1415:{id:"n1415",loc:[-85.626537,41.957587]},n1416:{id:"n1416",loc:[-85.626427,41.957551]},n1417:{id:"n1417",loc:[-85.626468,41.957483]},n1418:{id:"n1418",loc:[-85.626592,41.957639]},n1419:{id:"n1419",loc:[-85.626807,41.957713]},n142:{id:"n142",loc:[-85.637364,41.941833]},n1420:{id:"n1420",loc:[-85.627129,41.957401]},n1421:{id:"n1421",loc:[-85.627209,41.95742]},n1422:{id:"n1422",loc:[-85.627302,41.957435]},n1423:{id:"n1423",loc:[-85.629566,41.957048]},n1424:{id:"n1424",loc:[-85.629568,41.957215]},n1425:{id:"n1425",loc:[-85.629383,41.957216]},n1426:{id:"n1426",loc:[-85.629384,41.95727]},n1427:{id:"n1427",loc:[-85.629231,41.957271]},n1428:{id:"n1428",loc:[-85.62923,41.957198]},n1429:{id:"n1429",loc:[-85.629322,41.957198]},n143:{id:"n143",loc:[-85.637559,41.942448]},n1430:{id:"n1430",loc:[-85.629321,41.957108]},n1431:{id:"n1431",loc:[-85.629441,41.957108]},n1432:{id:"n1432",loc:[-85.62944,41.957049]},n1433:{id:"n1433",loc:[-85.629337,41.957018]},n1434:{id:"n1434",loc:[-85.629366,41.957028]},n1435:{id:"n1435",loc:[-85.629375,41.957044]},n1436:{id:"n1436",loc:[-85.629354,41.957071]},n1437:{id:"n1437",loc:[-85.629317,41.957071]},n1438:{id:"n1438",loc:[-85.62929,41.957074]},n1439:{id:"n1439",loc:[-85.62927,41.957084]},n144:{id:"n144",loc:[-85.637036,41.942454]},n1440:{id:"n1440",loc:[-85.629232,41.957081]},n1441:{id:"n1441",loc:[-85.629222,41.957057]},n1442:{id:"n1442",loc:[-85.629259,41.957025]},n1443:{id:"n1443",loc:[-85.629293,41.957017]},n1444:{id:"n1444",loc:[-85.629251,41.957085]},n1445:{id:"n1445",loc:[-85.629235,41.957041]},n1446:{id:"n1446",loc:[-85.62937,41.95706]},n1447:{id:"n1447",loc:[-85.629531,41.956909]},n1448:{id:"n1448",loc:[-85.629408,41.956909]},n1449:{id:"n1449",loc:[-85.629402,41.956681]},n145:{id:"n145",loc:[-85.636692,41.942828]},n1450:{id:"n1450",loc:[-85.62953,41.956681]},n1451:{id:"n1451",loc:[-85.629402,41.956728]},n1452:{id:"n1452",loc:[-85.629408,41.956845]},n1453:{id:"n1453",loc:[-85.629385,41.956845]},n1454:{id:"n1454",loc:[-85.629384,41.956728]},n1455:{id:"n1455",loc:[-85.629063,41.956973]},n1456:{id:"n1456",loc:[-85.629064,41.957009]},n1457:{id:"n1457",loc:[-85.62902,41.957009]},n1458:{id:"n1458",loc:[-85.629019,41.956973]},n1459:{id:"n1459",loc:[-85.629136,41.956633]},n146:{id:"n146",loc:[-85.635929,41.942826]},n1460:{id:"n1460",loc:[-85.629084,41.956632]},n1461:{id:"n1461",loc:[-85.629084,41.956605]},n1462:{id:"n1462",loc:[-85.629136,41.956605]},n1463:{id:"n1463",loc:[-85.629153,41.956657]},n1464:{id:"n1464",loc:[-85.627914,41.956661]},n1465:{id:"n1465",loc:[-85.630096,41.956101]},n1466:{id:"n1466",loc:[-85.630097,41.95612]},n1467:{id:"n1467",loc:[-85.630011,41.956121]},n1468:{id:"n1468",loc:[-85.630015,41.956374]},n1469:{id:"n1469",loc:[-85.629148,41.95626]},n147:{id:"n147",loc:[-85.636433,41.942828]},n1470:{id:"n1470",loc:[-85.629527,41.956591]},n1471:{id:"n1471",loc:[-85.629405,41.956591]},n1472:{id:"n1472",loc:[-85.629405,41.956459]},n1473:{id:"n1473",loc:[-85.629369,41.956459]},n1474:{id:"n1474",loc:[-85.629369,41.956424]},n1475:{id:"n1475",loc:[-85.629413,41.956424]},n1476:{id:"n1476",loc:[-85.629414,41.956326]},n1477:{id:"n1477",loc:[-85.629522,41.956326]},n1478:{id:"n1478",loc:[-85.629522,41.956487]},n1479:{id:"n1479",loc:[-85.629527,41.956487]},n148:{id:"n148",loc:[-85.636435,41.942864],tags:{entrance:"yes"}},n1480:{id:"n1480",loc:[-85.629414,41.95634]},n1481:{id:"n1481",loc:[-85.629149,41.956338]},n1482:{id:"n1482",loc:[-85.62931,41.956531]},n1483:{id:"n1483",loc:[-85.629291,41.95655]},n1484:{id:"n1484",loc:[-85.629255,41.95655]},n1485:{id:"n1485",loc:[-85.629236,41.956533]},n1486:{id:"n1486",loc:[-85.629237,41.956461]},n1487:{id:"n1487",loc:[-85.629257,41.956445]},n1488:{id:"n1488",loc:[-85.629257,41.956428]},n1489:{id:"n1489",loc:[-85.629287,41.956428]},n149:{id:"n149",loc:[-85.637235,41.942622]},n1490:{id:"n1490",loc:[-85.629287,41.956445]},n1491:{id:"n1491",loc:[-85.62931,41.95646]},n1492:{id:"n1492",loc:[-85.629049,41.956425]},n1493:{id:"n1493",loc:[-85.628907,41.956427]},n1494:{id:"n1494",loc:[-85.628907,41.956455]},n1495:{id:"n1495",loc:[-85.628841,41.956455]},n1496:{id:"n1496",loc:[-85.62884,41.956424]},n1497:{id:"n1497",loc:[-85.628764,41.956425]},n1498:{id:"n1498",loc:[-85.628762,41.956323]},n1499:{id:"n1499",loc:[-85.628808,41.956323]},n15:{id:"n15",loc:[-85.633477,41.940187]},n150:{id:"n150",loc:[-85.637247,41.943116]},n1500:{id:"n1500",loc:[-85.628808,41.956314]},n1501:{id:"n1501",loc:[-85.628911,41.956313]},n1502:{id:"n1502",loc:[-85.628911,41.956322]},n1503:{id:"n1503",loc:[-85.62896,41.956322]},n1504:{id:"n1504",loc:[-85.62896,41.956348]},n1505:{id:"n1505",loc:[-85.629047,41.956347]},n1506:{id:"n1506",loc:[-85.628893,41.957263]},n1507:{id:"n1507",loc:[-85.628788,41.957264]},n1508:{id:"n1508",loc:[-85.628786,41.95711]},n1509:{id:"n1509",loc:[-85.628894,41.957109]},n151:{id:"n151",loc:[-85.637564,41.943116]},n1510:{id:"n1510",loc:[-85.628893,41.957075]},n1511:{id:"n1511",loc:[-85.628965,41.957075]},n1512:{id:"n1512",loc:[-85.628965,41.957111]},n1513:{id:"n1513",loc:[-85.629035,41.95711]},n1514:{id:"n1514",loc:[-85.629036,41.957209]},n1515:{id:"n1515",loc:[-85.628893,41.95721]},n1516:{id:"n1516",loc:[-85.631348,41.95773]},n1517:{id:"n1517",loc:[-85.631101,41.957732]},n1518:{id:"n1518",loc:[-85.631099,41.957558]},n1519:{id:"n1519",loc:[-85.63123,41.957557]},n152:{id:"n152",loc:[-85.637552,41.942619]},n1520:{id:"n1520",loc:[-85.631231,41.957618]},n1521:{id:"n1521",loc:[-85.63129,41.957618]},n1522:{id:"n1522",loc:[-85.63129,41.957651]},n1523:{id:"n1523",loc:[-85.631346,41.957651]},n1524:{id:"n1524",loc:[-85.631366,41.95802]},n1525:{id:"n1525",loc:[-85.631141,41.958021]},n1526:{id:"n1526",loc:[-85.63114,41.957943]},n1527:{id:"n1527",loc:[-85.631167,41.957943]},n1528:{id:"n1528",loc:[-85.631166,41.957808]},n1529:{id:"n1529",loc:[-85.631301,41.957807]},n153:{id:"n153",loc:[-85.63763,41.942528]},n1530:{id:"n1530",loc:[-85.631302,41.95789]},n1531:{id:"n1531",loc:[-85.631364,41.95789]},n1532:{id:"n1532",loc:[-85.631539,41.957754]},n1533:{id:"n1533",loc:[-85.631069,41.957756]},n1534:{id:"n1534",loc:[-85.631536,41.957518]},n1535:{id:"n1535",loc:[-85.631543,41.957995]},n1536:{id:"n1536",loc:[-85.631531,41.957748]},n1537:{id:"n1537",loc:[-85.631485,41.957748]},n1538:{id:"n1538",loc:[-85.631484,41.957698]},n1539:{id:"n1539",loc:[-85.631531,41.957698]},n154:{id:"n154",loc:[-85.637151,41.94253]},n1540:{id:"n1540",loc:[-85.631586,41.957742]},n1541:{id:"n1541",loc:[-85.63155,41.957742]},n1542:{id:"n1542",loc:[-85.631551,41.957702]},n1543:{id:"n1543",loc:[-85.631587,41.957702]},n1544:{id:"n1544",loc:[-85.631534,41.95807]},n1545:{id:"n1545",loc:[-85.631534,41.958097]},n1546:{id:"n1546",loc:[-85.631491,41.958097]},n1547:{id:"n1547",loc:[-85.631491,41.95807]},n1548:{id:"n1548",loc:[-85.631304,41.958861]},n1549:{id:"n1549",loc:[-85.631186,41.958862]},n155:{id:"n155",loc:[-85.63715,41.942424]},n1550:{id:"n1550",loc:[-85.631182,41.958653]},n1551:{id:"n1551",loc:[-85.6313,41.958651]},n1552:{id:"n1552",loc:[-85.631293,41.95854]},n1553:{id:"n1553",loc:[-85.631176,41.958539]},n1554:{id:"n1554",loc:[-85.631176,41.958377]},n1555:{id:"n1555",loc:[-85.631297,41.958377]},n1556:{id:"n1556",loc:[-85.631297,41.958422]},n1557:{id:"n1557",loc:[-85.631333,41.958422]},n1558:{id:"n1558",loc:[-85.631333,41.958479]},n1559:{id:"n1559",loc:[-85.631293,41.958479]},n156:{id:"n156",loc:[-85.637629,41.942422]},n1560:{id:"n1560",loc:[-85.631951,41.958908]},n1561:{id:"n1561",loc:[-85.631838,41.958909]},n1562:{id:"n1562",loc:[-85.631837,41.958847]},n1563:{id:"n1563",loc:[-85.631859,41.958847]},n1564:{id:"n1564",loc:[-85.631858,41.958746]},n1565:{id:"n1565",loc:[-85.631961,41.958745]},n1566:{id:"n1566",loc:[-85.631962,41.958812]},n1567:{id:"n1567",loc:[-85.631949,41.958813]},n1568:{id:"n1568",loc:[-85.631579,41.958913]},n1569:{id:"n1569",loc:[-85.631567,41.95864]},n157:{id:"n157",loc:[-85.638232,41.942477]},n1570:{id:"n1570",loc:[-85.631942,41.958639]},n1571:{id:"n1571",loc:[-85.631543,41.958594]},n1572:{id:"n1572",loc:[-85.631543,41.958065]},n1573:{id:"n1573",loc:[-85.631888,41.958546]},n1574:{id:"n1574",loc:[-85.631804,41.958546]},n1575:{id:"n1575",loc:[-85.631803,41.95841]},n1576:{id:"n1576",loc:[-85.631886,41.958409]},n1577:{id:"n1577",loc:[-85.631897,41.958125]},n1578:{id:"n1578",loc:[-85.631755,41.958126]},n1579:{id:"n1579",loc:[-85.631756,41.958174]},n158:{id:"n158",loc:[-85.637775,41.942483]},n1580:{id:"n1580",loc:[-85.63178,41.958174]},n1581:{id:"n1581",loc:[-85.631782,41.958272]},n1582:{id:"n1582",loc:[-85.631922,41.958271]},n1583:{id:"n1583",loc:[-85.631922,41.958244]},n1584:{id:"n1584",loc:[-85.631883,41.958245]},n1585:{id:"n1585",loc:[-85.631882,41.958175]},n1586:{id:"n1586",loc:[-85.631898,41.958175]},n1587:{id:"n1587",loc:[-85.631924,41.958032]},n1588:{id:"n1588",loc:[-85.631762,41.958032]},n1589:{id:"n1589",loc:[-85.63176,41.957827]},n159:{id:"n159",loc:[-85.638107,41.942512]},n1590:{id:"n1590",loc:[-85.631888,41.957826]},n1591:{id:"n1591",loc:[-85.631888,41.957892]},n1592:{id:"n1592",loc:[-85.631871,41.957892]},n1593:{id:"n1593",loc:[-85.631872,41.957949]},n1594:{id:"n1594",loc:[-85.631923,41.957949]},n1595:{id:"n1595",loc:[-85.631695,41.95795]},n1596:{id:"n1596",loc:[-85.631666,41.957975]},n1597:{id:"n1597",loc:[-85.63163,41.957975]},n1598:{id:"n1598",loc:[-85.6316,41.957951]},n1599:{id:"n1599",loc:[-85.6316,41.95785]},n16:{id:"n16",loc:[-85.63341,41.94032]},n160:{id:"n160",loc:[-85.637763,41.942514]},n1600:{id:"n1600",loc:[-85.63166,41.95785]},n1601:{id:"n1601",loc:[-85.631696,41.957873]},n1602:{id:"n1602",loc:[-85.631924,41.957762]},n1603:{id:"n1603",loc:[-85.631762,41.957762]},n1604:{id:"n1604",loc:[-85.631762,41.957708]},n1605:{id:"n1605",loc:[-85.631785,41.957708]},n1606:{id:"n1606",loc:[-85.631785,41.957606]},n1607:{id:"n1607",loc:[-85.631734,41.957606]},n1608:{id:"n1608",loc:[-85.631734,41.957538]},n1609:{id:"n1609",loc:[-85.631821,41.957538]},n161:{id:"n161",loc:[-85.637763,41.942445]},n1610:{id:"n1610",loc:[-85.631935,41.957545]},n1611:{id:"n1611",loc:[-85.631821,41.957544]},n1612:{id:"n1612",loc:[-85.631935,41.957645]},n1613:{id:"n1613",loc:[-85.631924,41.957645]},n1614:{id:"n1614",loc:[-85.627135,41.953828]},n1615:{id:"n1615",loc:[-85.633517,41.941353],tags:{man_made:"lighthouse","seamark:type":"light_major"}},n1616:{id:"n1616",loc:[-85.633659,41.942041],tags:{amenity:"bbq"}},n1617:{id:"n1617",loc:[-85.63662,41.942911],tags:{amenity:"toilets"}},n1618:{id:"n1618",loc:[-85.637487,41.943876],tags:{amenity:"toilets"}},n1619:{id:"n1619",loc:[-85.634938,41.941917],tags:{amenity:"toilets"}},n162:{id:"n162",loc:[-85.638107,41.942443]},n1620:{id:"n1620",loc:[-85.632427,41.941678],tags:{amenity:"bbq"}},n1621:{id:"n1621",loc:[-85.638033,41.944568],tags:{amenity:"bbq"}},n1622:{id:"n1622",loc:[-85.638052,41.944522],tags:{amenity:"bbq"}},n1623:{id:"n1623",loc:[-85.635001,41.941965]},n1624:{id:"n1624",loc:[-85.634635,41.941884]},n1625:{id:"n1625",loc:[-85.634667,41.941894]},n1626:{id:"n1626",loc:[-85.634791,41.942011]},n1627:{id:"n1627",loc:[-85.634749,41.941938]},n1628:{id:"n1628",loc:[-85.627295,41.953946],tags:{barrier:"gate"}},n1629:{id:"n1629",loc:[-85.629076,41.954689]},n163:{id:"n163",loc:[-85.638813,41.942475]},n1630:{id:"n1630",loc:[-85.640667,41.942595]},n1631:{id:"n1631",loc:[-85.639455,41.94261]},n1632:{id:"n1632",loc:[-85.643407,41.942336]},n1633:{id:"n1633",loc:[-85.641845,41.941316]},n1634:{id:"n1634",loc:[-85.643322,41.942224]},n1635:{id:"n1635",loc:[-85.643301,41.942124]},n1636:{id:"n1636",loc:[-85.640639,41.941326]},n1637:{id:"n1637",loc:[-85.640614,41.940058]},n1638:{id:"n1638",loc:[-85.639428,41.941335]},n1639:{id:"n1639",loc:[-85.643078,41.941293]},n164:{id:"n164",loc:[-85.63883,41.942422]},n1640:{id:"n1640",loc:[-85.64371,41.942302]},n1641:{id:"n1641",loc:[-85.643056,41.94001]},n1642:{id:"n1642",loc:[-85.643097,41.942575],tags:{highway:"traffic_signals",traffic_signals:"signal","traffic_signals:direction":"both"}},n1643:{id:"n1643",loc:[-85.641855,41.942586]},n1644:{id:"n1644",loc:[-85.643549,41.942209]},n1645:{id:"n1645",loc:[-85.639359,41.94007]},n1646:{id:"n1646",loc:[-85.642797,41.940522]},n1647:{id:"n1647",loc:[-85.642589,41.940523]},n1648:{id:"n1648",loc:[-85.642587,41.940287]},n1649:{id:"n1649",loc:[-85.642797,41.940286]},n165:{id:"n165",loc:[-85.63883,41.942508]},n1650:{id:"n1650",loc:[-85.642571,41.940523]},n1651:{id:"n1651",loc:[-85.642568,41.940286]},n1652:{id:"n1652",loc:[-85.642316,41.940289]},n1653:{id:"n1653",loc:[-85.642321,41.940436]},n1654:{id:"n1654",loc:[-85.642292,41.940458]},n1655:{id:"n1655",loc:[-85.642287,41.940483]},n1656:{id:"n1656",loc:[-85.642323,41.940509]},n1657:{id:"n1657",loc:[-85.642385,41.940511]},n1658:{id:"n1658",loc:[-85.642408,41.940526]},n1659:{id:"n1659",loc:[-85.641962,41.94109]},n166:{id:"n166",loc:[-85.638364,41.942508]},n1660:{id:"n1660",loc:[-85.642753,41.941084]},n1661:{id:"n1661",loc:[-85.642752,41.941004]},n1662:{id:"n1662",loc:[-85.642806,41.941003]},n1663:{id:"n1663",loc:[-85.642803,41.940731]},n1664:{id:"n1664",loc:[-85.642741,41.940732]},n1665:{id:"n1665",loc:[-85.64274,41.940645]},n1666:{id:"n1666",loc:[-85.641957,41.940651]},n1667:{id:"n1667",loc:[-85.642937,41.941241]},n1668:{id:"n1668",loc:[-85.641776,41.941253]},n1669:{id:"n1669",loc:[-85.641766,41.940598]},n167:{id:"n167",loc:[-85.638836,41.942167]},n1670:{id:"n1670",loc:[-85.64198,41.940598]},n1671:{id:"n1671",loc:[-85.641961,41.940137]},n1672:{id:"n1672",loc:[-85.642934,41.94012]},n1673:{id:"n1673",loc:[-85.643074,41.941173]},n1674:{id:"n1674",loc:[-85.642841,41.940997]},n1675:{id:"n1675",loc:[-85.642839,41.940721]},n1676:{id:"n1676",loc:[-85.643065,41.940552]},n1677:{id:"n1677",loc:[-85.642732,41.94124]},n1678:{id:"n1678",loc:[-85.641815,41.941246]},n1679:{id:"n1679",loc:[-85.641813,41.941132]},n168:{id:"n168",loc:[-85.638836,41.94229]},n1680:{id:"n1680",loc:[-85.641839,41.941111]},n1681:{id:"n1681",loc:[-85.641884,41.941098]},n1682:{id:"n1682",loc:[-85.642732,41.941092]},n1683:{id:"n1683",loc:[-85.642776,41.941302]},n1684:{id:"n1684",loc:[-85.632788,41.946236]},n1685:{id:"n1685",loc:[-85.622342,41.953127]},n1686:{id:"n1686",loc:[-85.641848,41.941167]},n1687:{id:"n1687",loc:[-85.643753,41.941503]},n1688:{id:"n1688",loc:[-85.643762,41.942119]},n1689:{id:"n1689",loc:[-85.64238,41.942262]},n169:{id:"n169",loc:[-85.638594,41.94229]},n1690:{id:"n1690",loc:[-85.642374,41.941944]},n1691:{id:"n1691",loc:[-85.642518,41.941943]},n1692:{id:"n1692",loc:[-85.642519,41.94198]},n1693:{id:"n1693",loc:[-85.642831,41.941977]},n1694:{id:"n1694",loc:[-85.642837,41.942312]},n1695:{id:"n1695",loc:[-85.642495,41.942315]},n1696:{id:"n1696",loc:[-85.642494,41.942261]},n1697:{id:"n1697",loc:[-85.641087,41.942433]},n1698:{id:"n1698",loc:[-85.641081,41.942006]},n1699:{id:"n1699",loc:[-85.641244,41.942005]},n17:{id:"n17",loc:[-85.633478,41.94081]},n170:{id:"n170",loc:[-85.638594,41.942422]},n1700:{id:"n1700",loc:[-85.64125,41.942431]},n1701:{id:"n1701",loc:[-85.641331,41.942968]},n1702:{id:"n1702",loc:[-85.641328,41.942713]},n1703:{id:"n1703",loc:[-85.641521,41.942712]},n1704:{id:"n1704",loc:[-85.641523,41.942924]},n1705:{id:"n1705",loc:[-85.641504,41.942924]},n1706:{id:"n1706",loc:[-85.641505,41.942967]},n1707:{id:"n1707",loc:[-85.638612,41.942408]},n1708:{id:"n1708",loc:[-85.638612,41.942327]},n1709:{id:"n1709",loc:[-85.638775,41.942327]},n171:{id:"n171",loc:[-85.638364,41.942356]},n1710:{id:"n1710",loc:[-85.638775,41.942299]},n1711:{id:"n1711",loc:[-85.638835,41.942298]},n1712:{id:"n1712",loc:[-85.638835,41.942407]},n1713:{id:"n1713",loc:[-85.639116,41.942444]},n1714:{id:"n1714",loc:[-85.639114,41.942362]},n1715:{id:"n1715",loc:[-85.639294,41.94236]},n1716:{id:"n1716",loc:[-85.639296,41.942442]},n1717:{id:"n1717",loc:[-85.639808,41.942385]},n1718:{id:"n1718",loc:[-85.639805,41.942285]},n1719:{id:"n1719",loc:[-85.639988,41.942283]},n172:{id:"n172",loc:[-85.638364,41.942167]},n1720:{id:"n1720",loc:[-85.63999,41.942383]},n1721:{id:"n1721",loc:[-85.639633,41.943023]},n1722:{id:"n1722",loc:[-85.639867,41.943019]},n1723:{id:"n1723",loc:[-85.639866,41.942964]},n1724:{id:"n1724",loc:[-85.639888,41.942963]},n1725:{id:"n1725",loc:[-85.639883,41.942779]},n1726:{id:"n1726",loc:[-85.639851,41.94278]},n1727:{id:"n1727",loc:[-85.63985,41.94274]},n1728:{id:"n1728",loc:[-85.639789,41.942741]},n1729:{id:"n1729",loc:[-85.639789,41.942753]},n173:{id:"n173",loc:[-85.639038,41.942463]},n1730:{id:"n1730",loc:[-85.639698,41.942754]},n1731:{id:"n1731",loc:[-85.639699,41.942788]},n1732:{id:"n1732",loc:[-85.639675,41.942789]},n1733:{id:"n1733",loc:[-85.639676,41.94283]},n1734:{id:"n1734",loc:[-85.639701,41.942829]},n1735:{id:"n1735",loc:[-85.639702,41.942869]},n1736:{id:"n1736",loc:[-85.639629,41.94287]},n1737:{id:"n1737",loc:[-85.643568,41.942946]},n1738:{id:"n1738",loc:[-85.643568,41.942777]},n1739:{id:"n1739",loc:[-85.643401,41.942777]},n174:{id:"n174",loc:[-85.638897,41.942464]},n1740:{id:"n1740",loc:[-85.643401,41.942863]},n1741:{id:"n1741",loc:[-85.643448,41.942863]},n1742:{id:"n1742",loc:[-85.643448,41.942946]},n1743:{id:"n1743",loc:[-85.642836,41.942981]},n1744:{id:"n1744",loc:[-85.642917,41.942979]},n1745:{id:"n1745",loc:[-85.642914,41.942904]},n1746:{id:"n1746",loc:[-85.642938,41.942903]},n1747:{id:"n1747",loc:[-85.642935,41.942813]},n1748:{id:"n1748",loc:[-85.642775,41.942816]},n1749:{id:"n1749",loc:[-85.642778,41.942906]},n175:{id:"n175",loc:[-85.638897,41.942423]},n1750:{id:"n1750",loc:[-85.642833,41.942905]},n1751:{id:"n1751",loc:[-85.642302,41.942886]},n1752:{id:"n1752",loc:[-85.642299,41.942721]},n1753:{id:"n1753",loc:[-85.642422,41.94272]},n1754:{id:"n1754",loc:[-85.642425,41.942868]},n1755:{id:"n1755",loc:[-85.642385,41.942869]},n1756:{id:"n1756",loc:[-85.642385,41.942885]},n1757:{id:"n1757",loc:[-85.641533,41.942939]},n1758:{id:"n1758",loc:[-85.64161,41.942877]},n1759:{id:"n1759",loc:[-85.641676,41.942922]},n176:{id:"n176",loc:[-85.638853,41.942423]},n1760:{id:"n1760",loc:[-85.6416,41.942985]},n1761:{id:"n1761",loc:[-85.64206,41.942802]},n1762:{id:"n1762",loc:[-85.642059,41.942741]},n1763:{id:"n1763",loc:[-85.642196,41.942741]},n1764:{id:"n1764",loc:[-85.642196,41.942818]},n1765:{id:"n1765",loc:[-85.642128,41.942819]},n1766:{id:"n1766",loc:[-85.642128,41.942801]},n1767:{id:"n1767",loc:[-85.640943,41.942934]},n1768:{id:"n1768",loc:[-85.641035,41.942933]},n1769:{id:"n1769",loc:[-85.641032,41.942797]},n177:{id:"n177",loc:[-85.638852,41.94237]},n1770:{id:"n1770",loc:[-85.640997,41.942798]},n1771:{id:"n1771",loc:[-85.640996,41.942764]},n1772:{id:"n1772",loc:[-85.640861,41.942766]},n1773:{id:"n1773",loc:[-85.640862,41.942848]},n1774:{id:"n1774",loc:[-85.640941,41.942847]},n1775:{id:"n1775",loc:[-85.643766,41.942226]},n1776:{id:"n1776",loc:[-85.643768,41.942407]},n1777:{id:"n1777",loc:[-85.643218,41.94177]},n1778:{id:"n1778",loc:[-85.64321,41.941327]},n1779:{id:"n1779",loc:[-85.643649,41.941323]},n178:{id:"n178",loc:[-85.638892,41.94237]},n1780:{id:"n1780",loc:[-85.643656,41.941716]},n1781:{id:"n1781",loc:[-85.64358,41.941717]},n1782:{id:"n1782",loc:[-85.64358,41.941767]},n1783:{id:"n1783",loc:[-85.64382,41.941495]},n1784:{id:"n1784",loc:[-85.643817,41.941317]},n1785:{id:"n1785",loc:[-85.643235,41.941833]},n1786:{id:"n1786",loc:[-85.64335,41.941842]},n1787:{id:"n1787",loc:[-85.643504,41.941903]},n1788:{id:"n1788",loc:[-85.643554,41.941946]},n1789:{id:"n1789",loc:[-85.643618,41.942015]},n179:{id:"n179",loc:[-85.638891,41.942334]},n1790:{id:"n1790",loc:[-85.64346,41.941971]},n1791:{id:"n1791",loc:[-85.643528,41.942468]},n1792:{id:"n1792",loc:[-85.643621,41.942363]},n1793:{id:"n1793",loc:[-85.643496,41.942297]},n1794:{id:"n1794",loc:[-85.643446,41.942246]},n1795:{id:"n1795",loc:[-85.643398,41.942177]},n1796:{id:"n1796",loc:[-85.643398,41.942031]},n1797:{id:"n1797",loc:[-85.621531,41.952693]},n1798:{id:"n1798",loc:[-85.643221,41.942028]},n1799:{id:"n1799",loc:[-85.643225,41.942276]},n18:{id:"n18",loc:[-85.63345,41.94071]},n180:{id:"n180",loc:[-85.639037,41.942334]},n1800:{id:"n1800",loc:[-85.643265,41.942347]},n1801:{id:"n1801",loc:[-85.643323,41.942413]},n1802:{id:"n1802",loc:[-85.643411,41.94247]},n1803:{id:"n1803",loc:[-85.643459,41.942435]},n1804:{id:"n1804",loc:[-85.643767,41.942307]},n1805:{id:"n1805",loc:[-85.643661,41.942293]},n1806:{id:"n1806",loc:[-85.643578,41.942247]},n1807:{id:"n1807",loc:[-85.643522,41.942125]},n1808:{id:"n1808",loc:[-85.643515,41.942061]},n1809:{id:"n1809",loc:[-85.643346,41.941924]},n181:{id:"n181",loc:[-85.638074,41.941839]},n1810:{id:"n1810",loc:[-85.643086,41.94192]},n1811:{id:"n1811",loc:[-85.643529,41.94217]},n1812:{id:"n1812",loc:[-85.643489,41.942003]},n1813:{id:"n1813",loc:[-85.643295,41.941919]},n1814:{id:"n1814",loc:[-85.643305,41.942163]},n1815:{id:"n1815",loc:[-85.643354,41.942285]},n1816:{id:"n1816",loc:[-85.643472,41.942389]},n1817:{id:"n1817",loc:[-85.643608,41.942271]},n1818:{id:"n1818",loc:[-85.643876,41.941402]},n1819:{id:"n1819",loc:[-85.643818,41.941369]},n182:{id:"n182",loc:[-85.638076,41.941942]},n1820:{id:"n1820",loc:[-85.643682,41.941304]},n1821:{id:"n1821",loc:[-85.64359,41.941286]},n1822:{id:"n1822",loc:[-85.643317,41.941727]},n1823:{id:"n1823",loc:[-85.643301,41.941286]},n1824:{id:"n1824",loc:[-85.643553,41.941698]},n1825:{id:"n1825",loc:[-85.643543,41.941286]},n1826:{id:"n1826",loc:[-85.636967,41.940118]},n1827:{id:"n1827",loc:[-85.63378,41.940114]},n1828:{id:"n1828",loc:[-85.637254,41.940075]},n1829:{id:"n1829",loc:[-85.637002,41.941355]},n183:{id:"n183",loc:[-85.637955,41.941944]},n1830:{id:"n1830",loc:[-85.643532,41.94204]},n1831:{id:"n1831",loc:[-85.638235,41.942615]},n1832:{id:"n1832",loc:[-85.637039,41.942624]},n1833:{id:"n1833",loc:[-85.636369,41.94266]},n1834:{id:"n1834",loc:[-85.63582,41.942771],tags:{highway:"traffic_signals",traffic_signals:"emergency","traffic_signals:direction":"both"}},n1835:{id:"n1835",loc:[-85.634873,41.943044]},n1836:{id:"n1836",loc:[-85.643482,41.941976]},n1837:{id:"n1837",loc:[-85.64345,41.941945]},n1838:{id:"n1838",loc:[-85.641885,41.943851]},n1839:{id:"n1839",loc:[-85.641915,41.945121]},n184:{id:"n184",loc:[-85.637953,41.94184]},n1840:{id:"n1840",loc:[-85.639454,41.943871]},n1841:{id:"n1841",loc:[-85.639491,41.945191]},n1842:{id:"n1842",loc:[-85.635775,41.940113]},n1843:{id:"n1843",loc:[-85.638206,41.941345]},n1844:{id:"n1844",loc:[-85.640721,41.94513]},n1845:{id:"n1845",loc:[-85.643137,41.945103]},n1846:{id:"n1846",loc:[-85.638199,41.940079]},n1847:{id:"n1847",loc:[-85.640688,41.943861]},n1848:{id:"n1848",loc:[-85.643397,41.941924]},n1849:{id:"n1849",loc:[-85.643117,41.943841]},n185:{id:"n185",loc:[-85.637953,41.941866]},n1850:{id:"n1850",loc:[-85.636731,41.94263]},n1851:{id:"n1851",loc:[-85.63518,41.942955],tags:{highway:"crossing",crossing:"unmarked"}},n1852:{id:"n1852",loc:[-85.636152,41.942695]},n1853:{id:"n1853",loc:[-85.644202,41.941499]},n1854:{id:"n1854",loc:[-85.644211,41.942116]},n1855:{id:"n1855",loc:[-85.644233,41.942404]},n1856:{id:"n1856",loc:[-85.644231,41.942223]},n1857:{id:"n1857",loc:[-85.644133,41.941315]},n1858:{id:"n1858",loc:[-85.644136,41.941493]},n1859:{id:"n1859",loc:[-85.644345,41.942307]},n186:{id:"n186",loc:[-85.637873,41.941867]},n1860:{id:"n1860",loc:[-85.644232,41.942304]},n1861:{id:"n1861",loc:[-85.644134,41.941403]},n1862:{id:"n1862",loc:[-85.63607,41.943005],tags:{"addr:city":"Three Rivers","addr:housenumber":"333","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",amenity:"fire_station",name:"Three Rivers Fire Department"}},n1863:{id:"n1863",loc:[-85.637,41.941236]},n1864:{id:"n1864",loc:[-85.634476,41.941475]},n1865:{id:"n1865",loc:[-85.635036,41.941858]},n1866:{id:"n1866",loc:[-85.635362,41.941962]},n1867:{id:"n1867",loc:[-85.635806,41.941962]},n1868:{id:"n1868",loc:[-85.63295,41.943006]},n1869:{id:"n1869",loc:[-85.634692,41.943098]},n187:{id:"n187",loc:[-85.637877,41.941975]},n1870:{id:"n1870",loc:[-85.633128,41.940484]},n1871:{id:"n1871",loc:[-85.633117,41.942798]},n1872:{id:"n1872",loc:[-85.633303,41.942412]},n1873:{id:"n1873",loc:[-85.633482,41.941912]},n1874:{id:"n1874",loc:[-85.633455,41.941359]},n1875:{id:"n1875",loc:[-85.633162,41.942679]},n1876:{id:"n1876",loc:[-85.634274,41.943479]},n1877:{id:"n1877",loc:[-85.634678,41.942909]},n1878:{id:"n1878",loc:[-85.6339,41.941453]},n1879:{id:"n1879",loc:[-85.634571,41.942774]},n188:{id:"n188",loc:[-85.636855,41.942488]},n1880:{id:"n1880",loc:[-85.63419,41.941732]},n1881:{id:"n1881",loc:[-85.634067,41.941565]},n1882:{id:"n1882",loc:[-85.63436,41.942358]},n1883:{id:"n1883",loc:[-85.634327,41.942247]},n1884:{id:"n1884",loc:[-85.633391,41.941231]},n1885:{id:"n1885",loc:[-85.634303,41.941972]},n1886:{id:"n1886",loc:[-85.633541,41.940147]},n1887:{id:"n1887",loc:[-85.633433,41.940252]},n1888:{id:"n1888",loc:[-85.633402,41.940411]},n1889:{id:"n1889",loc:[-85.633551,41.941023]},n189:{id:"n189",loc:[-85.636702,41.942488]},n1890:{id:"n1890",loc:[-85.633719,41.941186]},n1891:{id:"n1891",loc:[-85.633067,41.941845]},n1892:{id:"n1892",loc:[-85.634902,41.942766]},n1893:{id:"n1893",loc:[-85.634603,41.942202]},n1894:{id:"n1894",loc:[-85.634858,41.942152]},n1895:{id:"n1895",loc:[-85.634842,41.942269]},n1896:{id:"n1896",loc:[-85.634907,41.942313]},n1897:{id:"n1897",loc:[-85.635049,41.942331]},n1898:{id:"n1898",loc:[-85.635101,41.942281]},n1899:{id:"n1899",loc:[-85.635129,41.942144]},n19:{id:"n19",loc:[-85.633009,41.942229]},n190:{id:"n190",loc:[-85.636702,41.942434]},n1900:{id:"n1900",loc:[-85.635531,41.942143]},n1901:{id:"n1901",loc:[-85.635534,41.942577]},n1902:{id:"n1902",loc:[-85.635158,41.942656]},n1903:{id:"n1903",loc:[-85.635121,41.942703]},n1904:{id:"n1904",loc:[-85.635087,41.941508]},n1905:{id:"n1905",loc:[-85.63536,41.941106]},n1906:{id:"n1906",loc:[-85.635442,41.941094]},n1907:{id:"n1907",loc:[-85.635508,41.941104]},n1908:{id:"n1908",loc:[-85.635569,41.941125]},n1909:{id:"n1909",loc:[-85.635583,41.941106]},n191:{id:"n191",loc:[-85.636761,41.942434]},n1910:{id:"n1910",loc:[-85.635555,41.940976]},n1911:{id:"n1911",loc:[-85.635501,41.940915]},n1912:{id:"n1912",loc:[-85.635392,41.940922]},n1913:{id:"n1913",loc:[-85.635276,41.940974]},n1914:{id:"n1914",loc:[-85.63517,41.941204]},n1915:{id:"n1915",loc:[-85.634888,41.941517]},n1916:{id:"n1916",loc:[-85.634897,41.941576]},n1917:{id:"n1917",loc:[-85.634961,41.94164]},n1918:{id:"n1918",loc:[-85.635028,41.941659]},n1919:{id:"n1919",loc:[-85.635118,41.941621]},n192:{id:"n192",loc:[-85.636761,41.942369]},n1920:{id:"n1920",loc:[-85.635085,41.941558]},n1921:{id:"n1921",loc:[-85.63504,41.94136]},n1922:{id:"n1922",loc:[-85.635221,41.941077]},n1923:{id:"n1923",loc:[-85.634387,41.941559]},n1924:{id:"n1924",loc:[-85.634351,41.941587]},n1925:{id:"n1925",loc:[-85.634416,41.941756]},n1926:{id:"n1926",loc:[-85.634461,41.941797]},n1927:{id:"n1927",loc:[-85.634501,41.941819]},n1928:{id:"n1928",loc:[-85.634597,41.941816]},n1929:{id:"n1929",loc:[-85.634732,41.941724]},n193:{id:"n193",loc:[-85.636855,41.942369]},n1930:{id:"n1930",loc:[-85.634672,41.941775]},n1931:{id:"n1931",loc:[-85.633403,41.939101]},n1932:{id:"n1932",loc:[-85.633297,41.939397]},n1933:{id:"n1933",loc:[-85.633205,41.939674]},n1934:{id:"n1934",loc:[-85.63322,41.939777]},n1935:{id:"n1935",loc:[-85.633345,41.939936]},n1936:{id:"n1936",loc:[-85.633376,41.940002]},n1937:{id:"n1937",loc:[-85.633266,41.940228]},n1938:{id:"n1938",loc:[-85.633236,41.940352]},n1939:{id:"n1939",loc:[-85.633282,41.94063]},n194:{id:"n194",loc:[-85.636645,41.94249]},n1940:{id:"n1940",loc:[-85.633364,41.940874]},n1941:{id:"n1941",loc:[-85.633439,41.941052]},n1942:{id:"n1942",loc:[-85.633582,41.941172]},n1943:{id:"n1943",loc:[-85.633748,41.941273]},n1944:{id:"n1944",loc:[-85.634317,41.941527]},n1945:{id:"n1945",loc:[-85.634389,41.94174]},n1946:{id:"n1946",loc:[-85.634441,41.941801]},n1947:{id:"n1947",loc:[-85.634514,41.941837]},n1948:{id:"n1948",loc:[-85.634485,41.942005]},n1949:{id:"n1949",loc:[-85.63457,41.942202]},n195:{id:"n195",loc:[-85.636565,41.94249]},n1950:{id:"n1950",loc:[-85.634869,41.942769]},n1951:{id:"n1951",loc:[-85.634943,41.942792]},n1952:{id:"n1952",loc:[-85.635139,41.942882]},n1953:{id:"n1953",loc:[-85.634962,41.943161]},n1954:{id:"n1954",loc:[-85.635002,41.943131]},n1955:{id:"n1955",loc:[-85.635005,41.943091]},n1956:{id:"n1956",loc:[-85.635216,41.943033]},n1957:{id:"n1957",loc:[-85.634817,41.94267]},n1958:{id:"n1958",loc:[-85.634614,41.942599]},n1959:{id:"n1959",loc:[-85.634494,41.942381]},n196:{id:"n196",loc:[-85.636565,41.942474]},n1960:{id:"n1960",loc:[-85.634486,41.9423]},n1961:{id:"n1961",loc:[-85.634671,41.941795]},n1962:{id:"n1962",loc:[-85.634595,41.941831]},n1963:{id:"n1963",loc:[-85.634332,41.941866]},n1964:{id:"n1964",loc:[-85.634207,41.941885]},n1965:{id:"n1965",loc:[-85.634133,41.941892]},n1966:{id:"n1966",loc:[-85.634131,41.942203]},n1967:{id:"n1967",loc:[-85.634047,41.942327]},n1968:{id:"n1968",loc:[-85.634219,41.942793]},n1969:{id:"n1969",loc:[-85.634061,41.942392]},n197:{id:"n197",loc:[-85.636514,41.942474]},n1970:{id:"n1970",loc:[-85.633989,41.942407]},n1971:{id:"n1971",loc:[-85.633971,41.942356]},n1972:{id:"n1972",loc:[-85.63361,41.942423]},n1973:{id:"n1973",loc:[-85.633714,41.942682]},n1974:{id:"n1974",loc:[-85.633698,41.942863]},n1975:{id:"n1975",loc:[-85.633882,41.942865]},n1976:{id:"n1976",loc:[-85.633941,41.943007]},n1977:{id:"n1977",loc:[-85.633887,41.943035]},n1978:{id:"n1978",loc:[-85.633768,41.942815]},n1979:{id:"n1979",loc:[-85.633682,41.942351]},n198:{id:"n198",loc:[-85.636514,41.942326]},n1980:{id:"n1980",loc:[-85.634037,41.942273]},n1981:{id:"n1981",loc:[-85.634029,41.942252]},n1982:{id:"n1982",loc:[-85.633673,41.942331]},n1983:{id:"n1983",loc:[-85.634219,41.942571]},n1984:{id:"n1984",loc:[-85.634252,41.942565]},n1985:{id:"n1985",loc:[-85.634144,41.942299]},n1986:{id:"n1986",loc:[-85.634115,41.942306]},n1987:{id:"n1987",loc:[-85.634059,41.943094]},n1988:{id:"n1988",loc:[-85.633944,41.942903]},n1989:{id:"n1989",loc:[-85.634311,41.942821]},n199:{id:"n199",loc:[-85.636561,41.942326]},n1990:{id:"n1990",loc:[-85.634351,41.94277]},n1991:{id:"n1991",loc:[-85.634153,41.942254]},n1992:{id:"n1992",loc:[-85.634092,41.94222]},n1993:{id:"n1993",loc:[-85.633571,41.942336]},n1994:{id:"n1994",loc:[-85.633513,41.942387]},n1995:{id:"n1995",loc:[-85.633509,41.942455]},n1996:{id:"n1996",loc:[-85.63363,41.942665]},n1997:{id:"n1997",loc:[-85.63414,41.94286]},n1998:{id:"n1998",loc:[-85.63397,41.942449]},n1999:{id:"n1999",loc:[-85.633551,41.942529]},n2:{id:"n2",loc:[-85.627421,41.953877]},n20:{id:"n20",loc:[-85.633013,41.941438]},n200:{id:"n200",loc:[-85.636561,41.942311]},n2000:{id:"n2000",loc:[-85.633741,41.942493]},n2001:{id:"n2001",loc:[-85.633894,41.942869]},n2002:{id:"n2002",loc:[-85.634132,41.941954]},n2003:{id:"n2003",loc:[-85.634032,41.942038]},n2004:{id:"n2004",loc:[-85.633765,41.942238]},n2005:{id:"n2005",loc:[-85.63376,41.942268]},n2006:{id:"n2006",loc:[-85.633768,41.942293]},n2007:{id:"n2007",loc:[-85.633808,41.942386]},n2008:{id:"n2008",loc:[-85.634946,41.941663]},n2009:{id:"n2009",loc:[-85.63511,41.941697]},n201:{id:"n201",loc:[-85.636621,41.942311]},n2010:{id:"n2010",loc:[-85.635337,41.94168]},n2011:{id:"n2011",loc:[-85.634997,41.942251]},n2012:{id:"n2012",loc:[-85.635013,41.942173]},n2013:{id:"n2013",loc:[-85.634876,41.942157]},n2014:{id:"n2014",loc:[-85.634859,41.942235]},n2015:{id:"n2015",loc:[-85.634992,41.941951]},n2016:{id:"n2016",loc:[-85.634952,41.941877]},n2017:{id:"n2017",loc:[-85.634844,41.94191]},n2018:{id:"n2018",loc:[-85.634884,41.941983]},n2019:{id:"n2019",loc:[-85.635189,41.941691]},n202:{id:"n202",loc:[-85.636621,41.942351]},n2020:{id:"n2020",loc:[-85.635089,41.941896]},n2021:{id:"n2021",loc:[-85.635077,41.941964]},n2022:{id:"n2022",loc:[-85.635058,41.942147]},n2023:{id:"n2023",loc:[-85.635099,41.942161]},n2024:{id:"n2024",loc:[-85.635099,41.942213]},n2025:{id:"n2025",loc:[-85.635079,41.942285]},n2026:{id:"n2026",loc:[-85.635047,41.942316]},n2027:{id:"n2027",loc:[-85.634925,41.9423]},n2028:{id:"n2028",loc:[-85.634911,41.942276]},n2029:{id:"n2029",loc:[-85.634917,41.942242]},n203:{id:"n203",loc:[-85.63666,41.942351]},n2030:{id:"n2030",loc:[-85.634698,41.941898]},n2031:{id:"n2031",loc:[-85.634964,41.941878]},n2032:{id:"n2032",loc:[-85.635025,41.941929]},n2033:{id:"n2033",loc:[-85.634862,41.941887]},n2034:{id:"n2034",loc:[-85.634811,41.94181]},n2035:{id:"n2035",loc:[-85.634731,41.941745]},n2036:{id:"n2036",loc:[-85.634933,41.94176]},n2037:{id:"n2037",loc:[-85.634942,41.942145]},n2038:{id:"n2038",loc:[-85.634944,41.942065]},n2039:{id:"n2039",loc:[-85.634914,41.941996]},n204:{id:"n204",loc:[-85.63666,41.942453]},n2040:{id:"n2040",loc:[-85.634981,41.941979]},n2041:{id:"n2041",loc:[-85.633419,41.942172]},n2042:{id:"n2042",loc:[-85.633509,41.941631]},n2043:{id:"n2043",loc:[-85.633686,41.942937]},n2044:{id:"n2044",loc:[-85.633371,41.942722]},n2045:{id:"n2045",loc:[-85.633291,41.942538]},n2046:{id:"n2046",loc:[-85.633902,41.940941]},n2047:{id:"n2047",loc:[-85.635254,41.940939]},n2048:{id:"n2048",loc:[-85.635686,41.940829]},n2049:{id:"n2049",loc:[-85.635712,41.942681]},n205:{id:"n205",loc:[-85.636645,41.942453]},n2050:{id:"n2050",loc:[-85.633721,41.942118]},n2051:{id:"n2051",loc:[-85.633698,41.942057]},n2052:{id:"n2052",loc:[-85.633591,41.942079]},n2053:{id:"n2053",loc:[-85.633614,41.94214]},n2054:{id:"n2054",loc:[-85.633968,41.941099]},n2055:{id:"n2055",loc:[-85.633907,41.941138]},n2056:{id:"n2056",loc:[-85.633968,41.941197]},n2057:{id:"n2057",loc:[-85.63404,41.941162]},n2058:{id:"n2058",loc:[-85.634839,41.941665]},n2059:{id:"n2059",loc:[-85.635314,41.943035]},n206:{id:"n206",loc:[-85.636394,41.942471]},n2060:{id:"n2060",loc:[-85.634919,41.943142]},n2061:{id:"n2061",loc:[-85.636433,41.942959],tags:{"addr:city":"Three Rivers","addr:housenumber":"333","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",amenity:"townhall",name:"Three Rivers City Hall"}},n2062:{id:"n2062",loc:[-85.637039,41.942789]},n2063:{id:"n2063",loc:[-85.636333,41.94279]},n2064:{id:"n2064",loc:[-85.634484,41.940726]},n2065:{id:"n2065",loc:[-85.634483,41.940603]},n2066:{id:"n2066",loc:[-85.634908,41.940601]},n2067:{id:"n2067",loc:[-85.634908,41.94053]},n2068:{id:"n2068",loc:[-85.634934,41.94053]},n2069:{id:"n2069",loc:[-85.634934,41.940496]},n207:{id:"n207",loc:[-85.636262,41.942472]},n2070:{id:"n2070",loc:[-85.63504,41.940495]},n2071:{id:"n2071",loc:[-85.63504,41.940531]},n2072:{id:"n2072",loc:[-85.635068,41.940531]},n2073:{id:"n2073",loc:[-85.635071,41.940794]},n2074:{id:"n2074",loc:[-85.635183,41.940793]},n2075:{id:"n2075",loc:[-85.635185,41.940916]},n2076:{id:"n2076",loc:[-85.634799,41.940919]},n2077:{id:"n2077",loc:[-85.634798,41.940798]},n2078:{id:"n2078",loc:[-85.634925,41.940797]},n2079:{id:"n2079",loc:[-85.634924,41.940724]},n208:{id:"n208",loc:[-85.636261,41.94233]},n2080:{id:"n2080",loc:[-85.637448,41.938233]},n2081:{id:"n2081",loc:[-85.634168,41.943279]},n2082:{id:"n2082",loc:[-85.635744,41.938248]},n2083:{id:"n2083",loc:[-85.638744,41.951211]},n2084:{id:"n2084",loc:[-85.636421,41.946392]},n2085:{id:"n2085",loc:[-85.635965,41.945809]},n2086:{id:"n2086",loc:[-85.635683,41.945449]},n2087:{id:"n2087",loc:[-85.635281,41.945025]},n2088:{id:"n2088",loc:[-85.632443,41.942574]},n2089:{id:"n2089",loc:[-85.638243,41.943674]},n209:{id:"n209",loc:[-85.636353,41.942329]},n2090:{id:"n2090",loc:[-85.638228,41.943747]},n2091:{id:"n2091",loc:[-85.638163,41.943797]},n2092:{id:"n2092",loc:[-85.638089,41.943832]},n2093:{id:"n2093",loc:[-85.637969,41.943841]},n2094:{id:"n2094",loc:[-85.637841,41.943833]},n2095:{id:"n2095",loc:[-85.637342,41.943734]},n2096:{id:"n2096",loc:[-85.637232,41.943707]},n2097:{id:"n2097",loc:[-85.637163,41.943668]},n2098:{id:"n2098",loc:[-85.637118,41.943615]},n2099:{id:"n2099",loc:[-85.637078,41.943494]},n21:{id:"n21",loc:[-85.634126,41.942228]},n210:{id:"n210",loc:[-85.636354,41.94239]},n2100:{id:"n2100",loc:[-85.632903,41.998429],tags:{railway:"level_crossing"}},n2101:{id:"n2101",loc:[-85.633616,41.943581],tags:{railway:"level_crossing"}},n2102:{id:"n2102",loc:[-85.636943,41.947311]},n2103:{id:"n2103",loc:[-85.6376,41.94854]},n2104:{id:"n2104",loc:[-85.634565,41.93631]},n2105:{id:"n2105",loc:[-85.629597,41.942562]},n2106:{id:"n2106",loc:[-85.630821,41.943077]},n2107:{id:"n2107",loc:[-85.627473,41.940659]},n2108:{id:"n2108",loc:[-85.629708,41.942872]},n2109:{id:"n2109",loc:[-85.634093,41.935448]},n211:{id:"n211",loc:[-85.636393,41.94239]},n2110:{id:"n2110",loc:[-85.630413,41.94366]},n2111:{id:"n2111",loc:[-85.630488,41.942662]},n2112:{id:"n2112",loc:[-85.63361,41.936749]},n2113:{id:"n2113",loc:[-85.630038,41.941808]},n2114:{id:"n2114",loc:[-85.632016,41.942922]},n2115:{id:"n2115",loc:[-85.631525,41.944303]},n2116:{id:"n2116",loc:[-85.626862,41.94022]},n2117:{id:"n2117",loc:[-85.629673,41.94121]},n2118:{id:"n2118",loc:[-85.632752,41.943101]},n2119:{id:"n2119",loc:[-85.631147,41.943201]},n212:{id:"n212",loc:[-85.63444,41.943176]},n2120:{id:"n2120",loc:[-85.624974,41.940579]},n2121:{id:"n2121",loc:[-85.629518,41.941783]},n2122:{id:"n2122",loc:[-85.632349,41.942699]},n2123:{id:"n2123",loc:[-85.628418,41.940356]},n2124:{id:"n2124",loc:[-85.629147,41.94129]},n2125:{id:"n2125",loc:[-85.631111,41.943979]},n2126:{id:"n2126",loc:[-85.632087,41.940013]},n2127:{id:"n2127",loc:[-85.634469,41.935057]},n2128:{id:"n2128",loc:[-85.630097,41.943449]},n2129:{id:"n2129",loc:[-85.6331,41.937878]},n213:{id:"n213",loc:[-85.63375,41.942814]},n2130:{id:"n2130",loc:[-85.625274,41.941114]},n2131:{id:"n2131",loc:[-85.632632,41.941217]},n2132:{id:"n2132",loc:[-85.632739,41.941926]},n2133:{id:"n2133",loc:[-85.631647,41.94366]},n2134:{id:"n2134",loc:[-85.635059,41.935456]},n2135:{id:"n2135",loc:[-85.631259,41.944349]},n2136:{id:"n2136",loc:[-85.626336,41.940811]},n2137:{id:"n2137",loc:[-85.631507,41.943875]},n2138:{id:"n2138",loc:[-85.625081,41.940859]},n2139:{id:"n2139",loc:[-85.625778,41.940093]},n214:{id:"n214",loc:[-85.633674,41.942869]},n2140:{id:"n2140",loc:[-85.632641,41.942436]},n2141:{id:"n2141",loc:[-85.628825,41.941034]},n2142:{id:"n2142",loc:[-85.627913,41.940292]},n2143:{id:"n2143",loc:[-85.628943,41.940516]},n2144:{id:"n2144",loc:[-85.63139,41.943941]},n2145:{id:"n2145",loc:[-85.630081,41.94204]},n2146:{id:"n2146",loc:[-85.632194,41.93963]},n2147:{id:"n2147",loc:[-85.632913,41.93939]},n2148:{id:"n2148",loc:[-85.632001,41.943492]},n2149:{id:"n2149",loc:[-85.63149,41.943154]},n215:{id:"n215",loc:[-85.633542,41.942768]},n2150:{id:"n2150",loc:[-85.625167,41.940117]},n2151:{id:"n2151",loc:[-85.63287,41.939941]},n2152:{id:"n2152",loc:[-85.630789,41.943732]},n2153:{id:"n2153",loc:[-85.632173,41.940348]},n2154:{id:"n2154",loc:[-85.626587,41.940113]},n2155:{id:"n2155",loc:[-85.62684,41.940667]},n2156:{id:"n2156",loc:[-85.632527,41.938904]},n2157:{id:"n2157",loc:[-85.624866,41.94018]},n2158:{id:"n2158",loc:[-85.633267,41.93872]},n2159:{id:"n2159",loc:[-85.62934,41.940843]},n216:{id:"n216",loc:[-85.633618,41.942714]},n2160:{id:"n2160",loc:[-85.62272,41.953817]},n2161:{id:"n2161",loc:[-85.622555,41.954453]},n2162:{id:"n2162",loc:[-85.637225,41.944128]},n2163:{id:"n2163",loc:[-85.622628,41.953683]},n2164:{id:"n2164",loc:[-85.635441,41.943989]},n2165:{id:"n2165",loc:[-85.622629,41.953807]},n2166:{id:"n2166",loc:[-85.62262,41.953807]},n2167:{id:"n2167",loc:[-85.62262,41.953837]},n2168:{id:"n2168",loc:[-85.622532,41.953838]},n2169:{id:"n2169",loc:[-85.637469,41.944579]},n217:{id:"n217",loc:[-85.634001,41.942336]},n2170:{id:"n2170",loc:[-85.63688,41.943935]},n2171:{id:"n2171",loc:[-85.638263,41.946367]},n2172:{id:"n2172",loc:[-85.622532,41.953807]},n2173:{id:"n2173",loc:[-85.622353,41.953808]},n2174:{id:"n2174",loc:[-85.622352,41.953685]},n2175:{id:"n2175",loc:[-85.622464,41.953684]},n2176:{id:"n2176",loc:[-85.622464,41.953648]},n2177:{id:"n2177",loc:[-85.637136,41.94576]},n2178:{id:"n2178",loc:[-85.622521,41.953648]},n2179:{id:"n2179",loc:[-85.637129,41.945415]},n218:{id:"n218",loc:[-85.633825,41.942376]},n2180:{id:"n2180",loc:[-85.637473,41.94607]},n2181:{id:"n2181",loc:[-85.622521,41.953683]},n2182:{id:"n2182",loc:[-85.622717,41.954104]},n2183:{id:"n2183",loc:[-85.637769,41.946095]},n2184:{id:"n2184",loc:[-85.623872,41.953515]},n2185:{id:"n2185",loc:[-85.623851,41.953588]},n2186:{id:"n2186",loc:[-85.631385,41.94433]},n2187:{id:"n2187",loc:[-85.623608,41.953543]},n2188:{id:"n2188",loc:[-85.637308,41.944882]},n2189:{id:"n2189",loc:[-85.634898,41.944041]},n219:{id:"n219",loc:[-85.633807,41.942334]},n2190:{id:"n2190",loc:[-85.623604,41.953442]},n2191:{id:"n2191",loc:[-85.623705,41.953442]},n2192:{id:"n2192",loc:[-85.623708,41.953493]},n2193:{id:"n2193",loc:[-85.624064,41.952655]},n2194:{id:"n2194",loc:[-85.62395,41.952654]},n2195:{id:"n2195",loc:[-85.623951,41.952579]},n2196:{id:"n2196",loc:[-85.637435,41.944342]},n2197:{id:"n2197",loc:[-85.624064,41.952579]},n2198:{id:"n2198",loc:[-85.623812,41.952648]},n2199:{id:"n2199",loc:[-85.623813,41.952705]},n22:{id:"n22",loc:[-85.633531,41.942357]},n220:{id:"n220",loc:[-85.633983,41.942294]},n2200:{id:"n2200",loc:[-85.637169,41.945098]},n2201:{id:"n2201",loc:[-85.623552,41.952707]},n2202:{id:"n2202",loc:[-85.623551,41.95263]},n2203:{id:"n2203",loc:[-85.623701,41.952629]},n2204:{id:"n2204",loc:[-85.635894,41.943719]},n2205:{id:"n2205",loc:[-85.637297,41.945992]},n2206:{id:"n2206",loc:[-85.623724,41.952648]},n2207:{id:"n2207",loc:[-85.623812,41.952438]},n2208:{id:"n2208",loc:[-85.625239,41.952197]},n2209:{id:"n2209",loc:[-85.625232,41.952257]},n221:{id:"n221",loc:[-85.634182,41.942495]},n2210:{id:"n2210",loc:[-85.635175,41.94408]},n2211:{id:"n2211",loc:[-85.636381,41.943761]},n2212:{id:"n2212",loc:[-85.625115,41.952249]},n2213:{id:"n2213",loc:[-85.638578,41.946644]},n2214:{id:"n2214",loc:[-85.625122,41.952189]},n2215:{id:"n2215",loc:[-85.625085,41.952031]},n2216:{id:"n2216",loc:[-85.636126,41.943713]},n2217:{id:"n2217",loc:[-85.635005,41.944041]},n2218:{id:"n2218",loc:[-85.63714,41.945328]},n2219:{id:"n2219",loc:[-85.634871,41.943292]},n222:{id:"n222",loc:[-85.634149,41.942503]},n2220:{id:"n2220",loc:[-85.635705,41.943799]},n2221:{id:"n2221",loc:[-85.634995,41.943576]},n2222:{id:"n2222",loc:[-85.635026,41.943829]},n2223:{id:"n2223",loc:[-85.632874,41.941031]},n2224:{id:"n2224",loc:[-85.632531,41.940233]},n2225:{id:"n2225",loc:[-85.634247,41.936003]},n2226:{id:"n2226",loc:[-85.62929,41.941127]},n2227:{id:"n2227",loc:[-85.630428,41.943266]},n2228:{id:"n2228",loc:[-85.631608,41.943425]},n2229:{id:"n2229",loc:[-85.632316,41.943042]},n223:{id:"n223",loc:[-85.634098,41.942373]},n2230:{id:"n2230",loc:[-85.628711,41.940744]},n2231:{id:"n2231",loc:[-85.627831,41.940536]},n2232:{id:"n2232",loc:[-85.625514,41.94052]},n2233:{id:"n2233",loc:[-85.631127,41.943545]},n2234:{id:"n2234",loc:[-85.632909,41.942531]},n2235:{id:"n2235",loc:[-85.632917,41.938796]},n2236:{id:"n2236",loc:[-85.626716,41.94044]},n2237:{id:"n2237",loc:[-85.630122,41.942852]},n2238:{id:"n2238",loc:[-85.632509,41.939674]},n2239:{id:"n2239",loc:[-85.634762,41.935237]},n224:{id:"n224",loc:[-85.634131,41.942366]},n2240:{id:"n2240",loc:[-85.63384,41.937025]},n2241:{id:"n2241",loc:[-85.629741,41.941909]},n2242:{id:"n2242",loc:[-85.635254,41.945001],tags:{railway:"level_crossing"}},n2243:{id:"n2243",loc:[-85.634005,41.938168]},n2244:{id:"n2244",loc:[-85.63393,41.938335]},n2245:{id:"n2245",loc:[-85.633859,41.93846]},n2246:{id:"n2246",loc:[-85.633663,41.938776]},n2247:{id:"n2247",loc:[-85.633513,41.938936]},n2248:{id:"n2248",loc:[-85.635295,41.943225]},n2249:{id:"n2249",loc:[-85.635393,41.943293]},n225:{id:"n225",loc:[-85.635986,41.94177]},n2250:{id:"n2250",loc:[-85.635645,41.94332]},n2251:{id:"n2251",loc:[-85.63629,41.943328]},n2252:{id:"n2252",loc:[-85.636554,41.943372]},n2253:{id:"n2253",loc:[-85.636869,41.943526]},n2254:{id:"n2254",loc:[-85.637099,41.943704]},n2255:{id:"n2255",loc:[-85.637268,41.943773]},n2256:{id:"n2256",loc:[-85.637483,41.943821]},n2257:{id:"n2257",loc:[-85.637616,41.943929]},n2258:{id:"n2258",loc:[-85.637752,41.944114]},n2259:{id:"n2259",loc:[-85.638399,41.944308]},n226:{id:"n226",loc:[-85.635982,41.941523]},n2260:{id:"n2260",loc:[-85.638573,41.944451]},n2261:{id:"n2261",loc:[-85.638702,41.944574]},n2262:{id:"n2262",loc:[-85.638718,41.944652]},n2263:{id:"n2263",loc:[-85.638715,41.944809]},n2264:{id:"n2264",loc:[-85.638766,41.944988]},n2265:{id:"n2265",loc:[-85.638773,41.945136]},n2266:{id:"n2266",loc:[-85.638705,41.945251]},n2267:{id:"n2267",loc:[-85.638335,41.944291]},n2268:{id:"n2268",loc:[-85.638474,41.944352]},n2269:{id:"n2269",loc:[-85.635408,41.943429]},n227:{id:"n227",loc:[-85.636108,41.941521]},n2270:{id:"n2270",loc:[-85.635271,41.943654]},n2271:{id:"n2271",loc:[-85.635266,41.943744]},n2272:{id:"n2272",loc:[-85.635271,41.943819]},n2273:{id:"n2273",loc:[-85.635192,41.943876]},n2274:{id:"n2274",loc:[-85.635129,41.943857]},n2275:{id:"n2275",loc:[-85.635122,41.943764]},n2276:{id:"n2276",loc:[-85.635124,41.943664]},n2277:{id:"n2277",loc:[-85.63515,41.943611]},n2278:{id:"n2278",loc:[-85.635106,41.943534]},n2279:{id:"n2279",loc:[-85.634972,41.943197]},n228:{id:"n228",loc:[-85.636109,41.941559]},n2280:{id:"n2280",loc:[-85.633978,41.938227]},n2281:{id:"n2281",loc:[-85.634216,41.943255]},n2282:{id:"n2282",loc:[-85.634434,41.943622]},n2283:{id:"n2283",loc:[-85.632406,41.940854]},n2284:{id:"n2284",loc:[-85.632488,41.941063],tags:{leisure:"slipway"}},n2285:{id:"n2285",loc:[-85.632726,41.941537]},n2286:{id:"n2286",loc:[-85.632639,41.94136]},n2287:{id:"n2287",loc:[-85.632704,41.941439]},n2288:{id:"n2288",loc:[-85.632289,41.940601]},n2289:{id:"n2289",loc:[-85.632541,41.942526]},n229:{id:"n229",loc:[-85.636145,41.941559]},n2290:{id:"n2290",loc:[-85.634058,41.943173]},n2291:{id:"n2291",loc:[-85.636175,41.945974]},n2292:{id:"n2292",loc:[-85.636528,41.945975]},n2293:{id:"n2293",loc:[-85.637092,41.945893]},n2294:{id:"n2294",loc:[-85.637881,41.945647]},n2295:{id:"n2295",loc:[-85.639329,41.945162]},n2296:{id:"n2296",loc:[-85.639323,41.945026]},n2297:{id:"n2297",loc:[-85.638826,41.945032]},n2298:{id:"n2298",loc:[-85.638817,41.944174]},n2299:{id:"n2299",loc:[-85.638291,41.94418]},n23:{id:"n23",loc:[-85.633504,41.942418]},n230:{id:"n230",loc:[-85.636145,41.941551]},n2300:{id:"n2300",loc:[-85.63828,41.943811]},n2301:{id:"n2301",loc:[-85.638195,41.943601]},n2302:{id:"n2302",loc:[-85.63719,41.943592]},n2303:{id:"n2303",loc:[-85.636697,41.943273]},n2304:{id:"n2304",loc:[-85.635375,41.943274]},n2305:{id:"n2305",loc:[-85.635091,41.943547]},n2306:{id:"n2306",loc:[-85.63442,41.944117]},n2307:{id:"n2307",loc:[-85.635117,41.943717]},n2308:{id:"n2308",loc:[-85.635601,41.945177]},n2309:{id:"n2309",loc:[-85.635819,41.945494]},n231:{id:"n231",loc:[-85.636312,41.941549]},n2310:{id:"n2310",loc:[-85.635303,41.944891]},n2311:{id:"n2311",loc:[-85.637674,41.943802]},n2312:{id:"n2312",loc:[-85.638263,41.944272]},n2313:{id:"n2313",loc:[-85.634267,41.935266]},n2314:{id:"n2314",loc:[-85.639788,41.945152]},n2315:{id:"n2315",loc:[-85.639645,41.945167]},n2316:{id:"n2316",loc:[-85.639362,41.945233]},n2317:{id:"n2317",loc:[-85.638616,41.945163]},n2318:{id:"n2318",loc:[-85.638514,41.944936]},n2319:{id:"n2319",loc:[-85.638578,41.94503]},n232:{id:"n232",loc:[-85.636314,41.941649]},n2320:{id:"n2320",loc:[-85.638578,41.945215]},n2321:{id:"n2321",loc:[-85.640495,41.947015]},n2322:{id:"n2322",loc:[-85.639577,41.946495]},n2323:{id:"n2323",loc:[-85.638935,41.946087]},n2324:{id:"n2324",loc:[-85.637535,41.94584]},n2325:{id:"n2325",loc:[-85.638357,41.945404]},n2326:{id:"n2326",loc:[-85.638051,41.94553]},n2327:{id:"n2327",loc:[-85.637732,41.945555]},n2328:{id:"n2328",loc:[-85.637657,41.945524]},n2329:{id:"n2329",loc:[-85.637598,41.945467]},n233:{id:"n233",loc:[-85.636152,41.94165]},n2330:{id:"n2330",loc:[-85.637669,41.945318]},n2331:{id:"n2331",loc:[-85.637894,41.945171]},n2332:{id:"n2332",loc:[-85.637923,41.945082]},n2333:{id:"n2333",loc:[-85.63793,41.944756]},n2334:{id:"n2334",loc:[-85.637976,41.944696]},n2335:{id:"n2335",loc:[-85.638044,41.944671]},n2336:{id:"n2336",loc:[-85.638129,41.944597]},n2337:{id:"n2337",loc:[-85.638252,41.944413]},n2338:{id:"n2338",loc:[-85.638092,41.945442]},n2339:{id:"n2339",loc:[-85.638409,41.945315]},n234:{id:"n234",loc:[-85.636152,41.941628]},n2340:{id:"n2340",loc:[-85.638325,41.944771]},n2341:{id:"n2341",loc:[-85.638103,41.944744]},n2342:{id:"n2342",loc:[-85.637976,41.944781]},n2343:{id:"n2343",loc:[-85.637983,41.944865]},n2344:{id:"n2344",loc:[-85.638063,41.945074]},n2345:{id:"n2345",loc:[-85.638041,41.945206]},n2346:{id:"n2346",loc:[-85.637907,41.945309]},n2347:{id:"n2347",loc:[-85.637925,41.94539]},n2348:{id:"n2348",loc:[-85.637998,41.94545]},n2349:{id:"n2349",loc:[-85.637135,41.946254]},n235:{id:"n235",loc:[-85.63611,41.941628]},n2350:{id:"n2350",loc:[-85.636837,41.946615]},n2351:{id:"n2351",loc:[-85.637954,41.948909]},n2352:{id:"n2352",loc:[-85.638382,41.949786]},n2353:{id:"n2353",loc:[-85.639367,41.951242]},n2354:{id:"n2354",loc:[-85.640554,41.951777]},n2355:{id:"n2355",loc:[-85.6411,41.952234]},n2356:{id:"n2356",loc:[-85.641742,41.952657]},n2357:{id:"n2357",loc:[-85.642321,41.952941]},n2358:{id:"n2358",loc:[-85.64277,41.953228]},n2359:{id:"n2359",loc:[-85.643333,41.953825]},n236:{id:"n236",loc:[-85.636113,41.941768]},n2360:{id:"n2360",loc:[-85.643579,41.954365]},n2361:{id:"n2361",loc:[-85.644439,41.954105]},n2362:{id:"n2362",loc:[-85.64506,41.954]},n2363:{id:"n2363",loc:[-85.645483,41.953911]},n2364:{id:"n2364",loc:[-85.646046,41.953853]},n2365:{id:"n2365",loc:[-85.646318,41.953717]},n2366:{id:"n2366",loc:[-85.646276,41.953414]},n2367:{id:"n2367",loc:[-85.631063,41.957478],tags:{emergency:"fire_hydrant"}},n2368:{id:"n2368",loc:[-85.630996,41.955857],tags:{emergency:"fire_hydrant"}},n2369:{id:"n2369",loc:[-85.630976,41.954608],tags:{emergency:"fire_hydrant"}},n237:{id:"n237",loc:[-85.635983,41.941589],tags:{entrance:"yes"}},n2370:{id:"n2370",loc:[-85.646,41.953154]},n2371:{id:"n2371",loc:[-85.645222,41.953193]},n2372:{id:"n2372",loc:[-85.644732,41.953181]},n2373:{id:"n2373",loc:[-85.644064,41.953298]},n2374:{id:"n2374",loc:[-85.643818,41.953177]},n2375:{id:"n2375",loc:[-85.644001,41.95284]},n2376:{id:"n2376",loc:[-85.628174,41.95456],tags:{emergency:"fire_hydrant"}},n2377:{id:"n2377",loc:[-85.644267,41.952591]},n2378:{id:"n2378",loc:[-85.644288,41.952328]},n2379:{id:"n2379",loc:[-85.627276,41.953987],tags:{emergency:"fire_hydrant"}},n238:{id:"n238",loc:[-85.635906,41.94159]},n2380:{id:"n2380",loc:[-85.644262,41.952153]},n2381:{id:"n2381",loc:[-85.644168,41.95204]},n2382:{id:"n2382",loc:[-85.64421,41.951749]},n2383:{id:"n2383",loc:[-85.64385,41.951586]},n2384:{id:"n2384",loc:[-85.62736,41.955964],tags:{emergency:"fire_hydrant"}},n2385:{id:"n2385",loc:[-85.626307,41.957198],tags:{emergency:"fire_hydrant"}},n2386:{id:"n2386",loc:[-85.643589,41.951323]},n2387:{id:"n2387",loc:[-85.62747,41.957509],tags:{emergency:"fire_hydrant"}},n2388:{id:"n2388",loc:[-85.628665,41.957492],tags:{emergency:"fire_hydrant"}},n2389:{id:"n2389",loc:[-85.642535,41.951031]},n239:{id:"n239",loc:[-85.635883,41.940182]},n2390:{id:"n2390",loc:[-85.642269,41.95088]},n2391:{id:"n2391",loc:[-85.641878,41.950814]},n2392:{id:"n2392",loc:[-85.641549,41.950806]},n2393:{id:"n2393",loc:[-85.641103,41.950549]},n2394:{id:"n2394",loc:[-85.630864,41.959046],tags:{emergency:"fire_hydrant"}},n2395:{id:"n2395",loc:[-85.632249,41.958969],tags:{emergency:"fire_hydrant"}},n2396:{id:"n2396",loc:[-85.641037,41.949821]},n2397:{id:"n2397",loc:[-85.641006,41.949433]},n2398:{id:"n2398",loc:[-85.632232,41.95859],tags:{emergency:"fire_hydrant"}},n2399:{id:"n2399",loc:[-85.632071,41.958345],tags:{emergency:"fire_hydrant"}},n24:{id:"n24",loc:[-85.634346,41.942792]},n240:{id:"n240",loc:[-85.635916,41.942648]},n2400:{id:"n2400",loc:[-85.632228,41.9573],tags:{emergency:"fire_hydrant"}},n2401:{id:"n2401",loc:[-85.641152,41.948257]},n2402:{id:"n2402",loc:[-85.641055,41.947304]},n2403:{id:"n2403",loc:[-85.638022,41.945897]},n2404:{id:"n2404",loc:[-85.638672,41.950778]},n2405:{id:"n2405",loc:[-85.63666,41.944492],tags:{name:"Memory Isle",place:"island"}},n2406:{id:"n2406",loc:[-85.634982,41.946262],tags:{amenity:"post_office",name:"Three Rivers Post Office"}},n2407:{id:"n2407",loc:[-85.633676,41.946036]},n2408:{id:"n2408",loc:[-85.633736,41.946078]},n2409:{id:"n2409",loc:[-85.633997,41.946185]},n241:{id:"n241",loc:[-85.635805,41.941906]},n2410:{id:"n2410",loc:[-85.634448,41.945626],tags:{highway:"traffic_signals",traffic_signals:"signal"}},n2411:{id:"n2411",loc:[-85.63456,41.945731],tags:{crossing:"marked",highway:"crossing"}},n2412:{id:"n2412",loc:[-85.634592,41.94578]},n2413:{id:"n2413",loc:[-85.634607,41.945815]},n2414:{id:"n2414",loc:[-85.634614,41.945864]},n2415:{id:"n2415",loc:[-85.636066,41.946185]},n2416:{id:"n2416",loc:[-85.636128,41.946352]},n2417:{id:"n2417",loc:[-85.636142,41.946452]},n2418:{id:"n2418",loc:[-85.635327,41.945292]},n2419:{id:"n2419",loc:[-85.635648,41.94558]},n242:{id:"n242",loc:[-85.635909,41.941906]},n2420:{id:"n2420",loc:[-85.635769,41.945729]},n2421:{id:"n2421",loc:[-85.637349,41.945897]},n2422:{id:"n2422",loc:[-85.632211,41.95596],tags:{emergency:"fire_hydrant"}},n2423:{id:"n2423",loc:[-85.635942,41.94598]},n2424:{id:"n2424",loc:[-85.636443,41.946042]},n2425:{id:"n2425",loc:[-85.635819,41.946052]},n2426:{id:"n2426",loc:[-85.636669,41.946025]},n2427:{id:"n2427",loc:[-85.636832,41.946005]},n2428:{id:"n2428",loc:[-85.637039,41.945968]},n2429:{id:"n2429",loc:[-85.636291,41.946046]},n243:{id:"n243",loc:[-85.636359,41.941904]},n2430:{id:"n2430",loc:[-85.634005,41.943367]},n2431:{id:"n2431",loc:[-85.633366,41.943724]},n2432:{id:"n2432",loc:[-85.634617,41.946057]},n2433:{id:"n2433",loc:[-85.636534,41.944793]},n2434:{id:"n2434",loc:[-85.637055,41.945188]},n2435:{id:"n2435",loc:[-85.636153,41.944618]},n2436:{id:"n2436",loc:[-85.636803,41.944944]},n2437:{id:"n2437",loc:[-85.633389,41.945735]},n2438:{id:"n2438",loc:[-85.633536,41.94585]},n2439:{id:"n2439",loc:[-85.63363,41.945993]},n244:{id:"n244",loc:[-85.636351,41.941438]},n2440:{id:"n2440",loc:[-85.633268,41.94568]},n2441:{id:"n2441",loc:[-85.635947,41.94546]},n2442:{id:"n2442",loc:[-85.636277,41.945268]},n2443:{id:"n2443",loc:[-85.635203,41.944287]},n2444:{id:"n2444",loc:[-85.634876,41.944477]},n2445:{id:"n2445",loc:[-85.634975,41.944419]},n2446:{id:"n2446",loc:[-85.633877,41.943438]},n2447:{id:"n2447",loc:[-85.63508,41.945113]},n2448:{id:"n2448",loc:[-85.635372,41.944932]},n2449:{id:"n2449",loc:[-85.636594,41.945935]},n245:{id:"n245",loc:[-85.635903,41.941436]},n2450:{id:"n2450",loc:[-85.636901,41.945747]},n2451:{id:"n2451",loc:[-85.636329,41.945228]},n2452:{id:"n2452",loc:[-85.636025,41.945417]},n2453:{id:"n2453",loc:[-85.634002,41.944644]},n2454:{id:"n2454",loc:[-85.63407,41.944692]},n2455:{id:"n2455",loc:[-85.634114,41.944756]},n2456:{id:"n2456",loc:[-85.633762,41.944809]},n2457:{id:"n2457",loc:[-85.634184,41.944807]},n2458:{id:"n2458",loc:[-85.634291,41.944819]},n2459:{id:"n2459",loc:[-85.634639,41.944845]},n246:{id:"n246",loc:[-85.635798,41.941436]},n2460:{id:"n2460",loc:[-85.633822,41.944861]},n2461:{id:"n2461",loc:[-85.63411,41.944855]},n2462:{id:"n2462",loc:[-85.63435,41.944872]},n2463:{id:"n2463",loc:[-85.63441,41.944903]},n2464:{id:"n2464",loc:[-85.633883,41.944913]},n2465:{id:"n2465",loc:[-85.634164,41.944896]},n2466:{id:"n2466",loc:[-85.633487,41.944926]},n2467:{id:"n2467",loc:[-85.634736,41.944929]},n2468:{id:"n2468",loc:[-85.633944,41.944965]},n2469:{id:"n2469",loc:[-85.633555,41.944983]},n247:{id:"n247",loc:[-85.635929,41.941511]},n2470:{id:"n2470",loc:[-85.633995,41.945013]},n2471:{id:"n2471",loc:[-85.633614,41.945037]},n2472:{id:"n2472",loc:[-85.634848,41.945031]},n2473:{id:"n2473",loc:[-85.634049,41.945061]},n2474:{id:"n2474",loc:[-85.633678,41.945094]},n2475:{id:"n2475",loc:[-85.63317,41.945111]},n2476:{id:"n2476",loc:[-85.633357,41.945103]},n2477:{id:"n2477",loc:[-85.633728,41.945136]},n2478:{id:"n2478",loc:[-85.634146,41.945148]},n2479:{id:"n2479",loc:[-85.633416,41.945157]},n248:{id:"n248",loc:[-85.635929,41.941317]},n2480:{id:"n2480",loc:[-85.634625,41.945172]},n2481:{id:"n2481",loc:[-85.633239,41.945174]},n2482:{id:"n2482",loc:[-85.63469,41.945185]},n2483:{id:"n2483",loc:[-85.634661,41.945203]},n2484:{id:"n2484",loc:[-85.63348,41.945214]},n2485:{id:"n2485",loc:[-85.633578,41.945221]},n2486:{id:"n2486",loc:[-85.634742,41.945231]},n2487:{id:"n2487",loc:[-85.634251,41.94525]},n2488:{id:"n2488",loc:[-85.633524,41.945254]},n2489:{id:"n2489",loc:[-85.63468,41.945271]},n249:{id:"n249",loc:[-85.636414,41.941316]},n2490:{id:"n2490",loc:[-85.633885,41.945272]},n2491:{id:"n2491",loc:[-85.634795,41.945288]},n2492:{id:"n2492",loc:[-85.634742,41.94532]},n2493:{id:"n2493",loc:[-85.633946,41.945327]},n2494:{id:"n2494",loc:[-85.634844,41.945331]},n2495:{id:"n2495",loc:[-85.63435,41.945349]},n2496:{id:"n2496",loc:[-85.633733,41.945357]},n2497:{id:"n2497",loc:[-85.633987,41.945375]},n2498:{id:"n2498",loc:[-85.634911,41.945419]},n2499:{id:"n2499",loc:[-85.634049,41.945431]},n25:{id:"n25",loc:[-85.634333,41.942809]},n250:{id:"n250",loc:[-85.636414,41.941511]},n2500:{id:"n2500",loc:[-85.633705,41.945461]},n2501:{id:"n2501",loc:[-85.633642,41.945408]},n2502:{id:"n2502",loc:[-85.634493,41.945475]},n2503:{id:"n2503",loc:[-85.634106,41.945484]},n2504:{id:"n2504",loc:[-85.635008,41.945505]},n2505:{id:"n2505",loc:[-85.633757,41.945506]},n2506:{id:"n2506",loc:[-85.634542,41.945519]},n2507:{id:"n2507",loc:[-85.634162,41.945536]},n2508:{id:"n2508",loc:[-85.633843,41.945547]},n2509:{id:"n2509",loc:[-85.634919,41.94556]},n251:{id:"n251",loc:[-85.636819,41.941617]},n2510:{id:"n2510",loc:[-85.633818,41.945561]},n2511:{id:"n2511",loc:[-85.634638,41.94559]},n2512:{id:"n2512",loc:[-85.633901,41.945598]},n2513:{id:"n2513",loc:[-85.634257,41.945626]},n2514:{id:"n2514",loc:[-85.633967,41.945652]},n2515:{id:"n2515",loc:[-85.634735,41.945676]},n2516:{id:"n2516",loc:[-85.635057,41.945683]},n2517:{id:"n2517",loc:[-85.635296,41.945703]},n2518:{id:"n2518",loc:[-85.635112,41.945703]},n2519:{id:"n2519",loc:[-85.634782,41.945729]},n252:{id:"n252",loc:[-85.636718,41.941619]},n2520:{id:"n2520",loc:[-85.634052,41.945747]},n2521:{id:"n2521",loc:[-85.635296,41.945757]},n2522:{id:"n2522",loc:[-85.635314,41.945757]},n2523:{id:"n2523",loc:[-85.635112,41.945761]},n2524:{id:"n2524",loc:[-85.634841,41.945778]},n2525:{id:"n2525",loc:[-85.635315,41.945939]},n2526:{id:"n2526",loc:[-85.634841,41.945921]},n2527:{id:"n2527",loc:[-85.635461,41.944879]},n2528:{id:"n2528",loc:[-85.636024,41.945384]},n2529:{id:"n2529",loc:[-85.636145,41.945312]},n253:{id:"n253",loc:[-85.636716,41.941509]},n2530:{id:"n2530",loc:[-85.6356,41.944797]},n2531:{id:"n2531",loc:[-85.635135,41.944354]},n2532:{id:"n2532",loc:[-85.632988,41.945369]},n2533:{id:"n2533",loc:[-85.633376,41.94563]},n2534:{id:"n2534",loc:[-85.633539,41.945534]},n2535:{id:"n2535",loc:[-85.633238,41.945248]},n2536:{id:"n2536",loc:[-85.633166,41.945216]},n2537:{id:"n2537",loc:[-85.633114,41.945188]},n2538:{id:"n2538",loc:[-85.633078,41.945127]},n2539:{id:"n2539",loc:[-85.633066,41.94508]},n254:{id:"n254",loc:[-85.636732,41.941509]},n2540:{id:"n2540",loc:[-85.633222,41.945358]},n2541:{id:"n2541",loc:[-85.633425,41.945541]},n2542:{id:"n2542",loc:[-85.63299,41.9455]},n2543:{id:"n2543",loc:[-85.634374,41.944327]},n2544:{id:"n2544",loc:[-85.633648,41.943697]},n2545:{id:"n2545",loc:[-85.633533,41.943764]},n2546:{id:"n2546",loc:[-85.634239,41.944417]},n2547:{id:"n2547",loc:[-85.634122,41.944395]},n2548:{id:"n2548",loc:[-85.634235,41.944326]},n2549:{id:"n2549",loc:[-85.633613,41.943787]},n255:{id:"n255",loc:[-85.636731,41.941461]},n2550:{id:"n2550",loc:[-85.633915,41.943613]},n2551:{id:"n2551",loc:[-85.634015,41.943555]},n2552:{id:"n2552",loc:[-85.63433,41.943839]},n2553:{id:"n2553",loc:[-85.634236,41.943894]},n2554:{id:"n2554",loc:[-85.635413,41.946052]},n2555:{id:"n2555",loc:[-85.635405,41.94569]},n2556:{id:"n2556",loc:[-85.635684,41.945925]},n2557:{id:"n2557",loc:[-85.635614,41.945742]},n2558:{id:"n2558",loc:[-85.635401,41.945745]},n2559:{id:"n2559",loc:[-85.635406,41.945928]},n256:{id:"n256",loc:[-85.636799,41.941461]},n2560:{id:"n2560",loc:[-85.633478,41.943663]},n2561:{id:"n2561",loc:[-85.633291,41.943526]},n2562:{id:"n2562",loc:[-85.633094,41.943541]},n2563:{id:"n2563",loc:[-85.633302,41.943492]},n2564:{id:"n2564",loc:[-85.633047,41.943623]},n2565:{id:"n2565",loc:[-85.633275,41.943562]},n2566:{id:"n2566",loc:[-85.633351,41.943518]},n2567:{id:"n2567",loc:[-85.633224,41.9434]},n2568:{id:"n2568",loc:[-85.633235,41.943369]},n2569:{id:"n2569",loc:[-85.635179,41.943911]},n257:{id:"n257",loc:[-85.6368,41.9415]},n2570:{id:"n2570",loc:[-85.635146,41.943918]},n2571:{id:"n2571",loc:[-85.634888,41.943905]},n2572:{id:"n2572",loc:[-85.634832,41.943911]},n2573:{id:"n2573",loc:[-85.634638,41.944007]},n2574:{id:"n2574",loc:[-85.634568,41.94405]},n2575:{id:"n2575",loc:[-85.635994,41.94501]},n2576:{id:"n2576",loc:[-85.636388,41.944608]},n2577:{id:"n2577",loc:[-85.636215,41.944787]},n2578:{id:"n2578",loc:[-85.637948,41.944587]},n2579:{id:"n2579",loc:[-85.637849,41.944567]},n258:{id:"n258",loc:[-85.636814,41.9415]},n2580:{id:"n2580",loc:[-85.637895,41.944455]},n2581:{id:"n2581",loc:[-85.637996,41.944477]},n2582:{id:"n2582",loc:[-85.635525,41.94337]},n2583:{id:"n2583",loc:[-85.637847,41.943923]},n2584:{id:"n2584",loc:[-85.637891,41.944124]},n2585:{id:"n2585",loc:[-85.638167,41.944229]},n2586:{id:"n2586",loc:[-85.638236,41.944097]},n2587:{id:"n2587",loc:[-85.638207,41.944025]},n2588:{id:"n2588",loc:[-85.638141,41.943997]},n2589:{id:"n2589",loc:[-85.638057,41.944015]},n259:{id:"n259",loc:[-85.636815,41.941538]},n2590:{id:"n2590",loc:[-85.637902,41.944231]},n2591:{id:"n2591",loc:[-85.638134,41.944307]},n2592:{id:"n2592",loc:[-85.638242,41.944294]},n2593:{id:"n2593",loc:[-85.638274,41.944222]},n2594:{id:"n2594",loc:[-85.638236,41.944174]},n2595:{id:"n2595",loc:[-85.638207,41.944157]},n2596:{id:"n2596",loc:[-85.637818,41.943984]},n2597:{id:"n2597",loc:[-85.634996,41.944439]},n2598:{id:"n2598",loc:[-85.633946,41.945804]},n2599:{id:"n2599",loc:[-85.634102,41.945864]},n26:{id:"n26",loc:[-85.634346,41.942744]},n260:{id:"n260",loc:[-85.636827,41.941538]},n2600:{id:"n2600",loc:[-85.633819,41.945756]},n2601:{id:"n2601",loc:[-85.634025,41.945975]},n2602:{id:"n2602",loc:[-85.633742,41.945867]},n2603:{id:"n2603",loc:[-85.63373,41.946004]},n2604:{id:"n2604",loc:[-85.633947,41.946081]},n2605:{id:"n2605",loc:[-85.633872,41.945917]},n2606:{id:"n2606",loc:[-85.633825,41.945985]},n2607:{id:"n2607",loc:[-85.633762,41.94596]},n2608:{id:"n2608",loc:[-85.634224,41.946037]},n2609:{id:"n2609",loc:[-85.634357,41.945851]},n261:{id:"n261",loc:[-85.636828,41.941584]},n2610:{id:"n2610",loc:[-85.634398,41.945813]},n2611:{id:"n2611",loc:[-85.634461,41.945812]},n2612:{id:"n2612",loc:[-85.634501,41.945852]},n2613:{id:"n2613",loc:[-85.634503,41.94597]},n2614:{id:"n2614",loc:[-85.634462,41.945971]},n2615:{id:"n2615",loc:[-85.634465,41.946036]},n2616:{id:"n2616",loc:[-85.634235,41.946072]},n2617:{id:"n2617",loc:[-85.634447,41.946036]},n2618:{id:"n2618",loc:[-85.634448,41.946052]},n2619:{id:"n2619",loc:[-85.634494,41.946051]},n262:{id:"n262",loc:[-85.636819,41.941585]},n2620:{id:"n2620",loc:[-85.634497,41.946144]},n2621:{id:"n2621",loc:[-85.634453,41.946144]},n2622:{id:"n2622",loc:[-85.634454,41.94616]},n2623:{id:"n2623",loc:[-85.634393,41.946161]},n2624:{id:"n2624",loc:[-85.634394,41.94618]},n2625:{id:"n2625",loc:[-85.634345,41.94618]},n2626:{id:"n2626",loc:[-85.634344,41.946162]},n2627:{id:"n2627",loc:[-85.63427,41.946163]},n2628:{id:"n2628",loc:[-85.634266,41.946071]},n2629:{id:"n2629",loc:[-85.634148,41.946163]},n263:{id:"n263",loc:[-85.636854,41.941714]},n2630:{id:"n2630",loc:[-85.634213,41.946072]},n2631:{id:"n2631",loc:[-85.633293,41.946309]},n2632:{id:"n2632",loc:[-85.633122,41.946239]},n2633:{id:"n2633",loc:[-85.633295,41.946005]},n2634:{id:"n2634",loc:[-85.633395,41.946047]},n2635:{id:"n2635",loc:[-85.633404,41.946035]},n2636:{id:"n2636",loc:[-85.633459,41.946057]},n2637:{id:"n2637",loc:[-85.633387,41.946154]},n2638:{id:"n2638",loc:[-85.633403,41.946161]},n2639:{id:"n2639",loc:[-85.634176,41.946415]},n264:{id:"n264",loc:[-85.636855,41.941774]},n2640:{id:"n2640",loc:[-85.634179,41.946339]},n2641:{id:"n2641",loc:[-85.634455,41.946345]},n2642:{id:"n2642",loc:[-85.634452,41.946422]},n2643:{id:"n2643",loc:[-85.63437,41.946421]},n2644:{id:"n2644",loc:[-85.634367,41.946497]},n2645:{id:"n2645",loc:[-85.634289,41.946495]},n2646:{id:"n2646",loc:[-85.634291,41.946448]},n2647:{id:"n2647",loc:[-85.634269,41.946448]},n2648:{id:"n2648",loc:[-85.63427,41.946417]},n2649:{id:"n2649",loc:[-85.63484,41.946328]},n265:{id:"n265",loc:[-85.636822,41.941774]},n2650:{id:"n2650",loc:[-85.634839,41.946187]},n2651:{id:"n2651",loc:[-85.635148,41.946186]},n2652:{id:"n2652",loc:[-85.635148,41.946216]},n2653:{id:"n2653",loc:[-85.63521,41.946216]},n2654:{id:"n2654",loc:[-85.63521,41.946348]},n2655:{id:"n2655",loc:[-85.635154,41.946348]},n2656:{id:"n2656",loc:[-85.635153,41.946327]},n2657:{id:"n2657",loc:[-85.634037,41.946957]},n2658:{id:"n2658",loc:[-85.634253,41.946953]},n2659:{id:"n2659",loc:[-85.63481,41.946543]},n266:{id:"n266",loc:[-85.636822,41.941778]},n2660:{id:"n2660",loc:[-85.634809,41.946459]},n2661:{id:"n2661",loc:[-85.635154,41.946458]},n2662:{id:"n2662",loc:[-85.635155,41.946554]},n2663:{id:"n2663",loc:[-85.635022,41.946547]},n2664:{id:"n2664",loc:[-85.635022,41.946573]},n2665:{id:"n2665",loc:[-85.634909,41.946574]},n2666:{id:"n2666",loc:[-85.634909,41.946561]},n2667:{id:"n2667",loc:[-85.634896,41.947159]},n2668:{id:"n2668",loc:[-85.634894,41.947032]},n2669:{id:"n2669",loc:[-85.635024,41.947031]},n267:{id:"n267",loc:[-85.636756,41.941779]},n2670:{id:"n2670",loc:[-85.635026,41.947158]},n2671:{id:"n2671",loc:[-85.635233,41.947105]},n2672:{id:"n2672",loc:[-85.635236,41.946991]},n2673:{id:"n2673",loc:[-85.635369,41.946993]},n2674:{id:"n2674",loc:[-85.635366,41.947107]},n2675:{id:"n2675",loc:[-85.634824,41.946929]},n2676:{id:"n2676",loc:[-85.634825,41.946818]},n2677:{id:"n2677",loc:[-85.63512,41.946819]},n2678:{id:"n2678",loc:[-85.635119,41.94693]},n2679:{id:"n2679",loc:[-85.634796,41.946806]},n268:{id:"n268",loc:[-85.636756,41.941774]},n2680:{id:"n2680",loc:[-85.634792,41.946604]},n2681:{id:"n2681",loc:[-85.634948,41.946602]},n2682:{id:"n2682",loc:[-85.634949,41.946645]},n2683:{id:"n2683",loc:[-85.634975,41.946644]},n2684:{id:"n2684",loc:[-85.634974,41.946599]},n2685:{id:"n2685",loc:[-85.635117,41.946598]},n2686:{id:"n2686",loc:[-85.635122,41.946801]},n2687:{id:"n2687",loc:[-85.634981,41.946803]},n2688:{id:"n2688",loc:[-85.634979,41.946752]},n2689:{id:"n2689",loc:[-85.634952,41.946752]},n269:{id:"n269",loc:[-85.636721,41.941774]},n2690:{id:"n2690",loc:[-85.634953,41.946804]},n2691:{id:"n2691",loc:[-85.634649,41.946841]},n2692:{id:"n2692",loc:[-85.634331,41.94684]},n2693:{id:"n2693",loc:[-85.634183,41.946809]},n2694:{id:"n2694",loc:[-85.633699,41.946607]},n2695:{id:"n2695",loc:[-85.634487,41.946664]},n2696:{id:"n2696",loc:[-85.634486,41.946598]},n2697:{id:"n2697",loc:[-85.63423,41.946599]},n2698:{id:"n2698",loc:[-85.634231,41.946662]},n2699:{id:"n2699",loc:[-85.634284,41.946662]},n27:{id:"n27",loc:[-85.634136,41.943183]},n270:{id:"n270",loc:[-85.63672,41.941714]},n2700:{id:"n2700",loc:[-85.634284,41.946679]},n2701:{id:"n2701",loc:[-85.634365,41.946679]},n2702:{id:"n2702",loc:[-85.634365,41.946664]},n2703:{id:"n2703",loc:[-85.635443,41.947015]},n2704:{id:"n2704",loc:[-85.635442,41.946801]},n2705:{id:"n2705",loc:[-85.63603,41.9468]},n2706:{id:"n2706",loc:[-85.636028,41.947016]},n2707:{id:"n2707",loc:[-85.635457,41.946582]},n2708:{id:"n2708",loc:[-85.635455,41.946211]},n2709:{id:"n2709",loc:[-85.635636,41.946579]},n271:{id:"n271",loc:[-85.636767,41.941713]},n2710:{id:"n2710",loc:[-85.635716,41.9468]},n2711:{id:"n2711",loc:[-85.635969,41.9468]},n2712:{id:"n2712",loc:[-85.635973,41.946295]},n2713:{id:"n2713",loc:[-85.636019,41.946484]},n2714:{id:"n2714",loc:[-85.636022,41.946388]},n2715:{id:"n2715",loc:[-85.635961,41.946493]},n2716:{id:"n2716",loc:[-85.635713,41.94621]},n2717:{id:"n2717",loc:[-85.635416,41.946142]},n2718:{id:"n2718",loc:[-85.635759,41.946203]},n2719:{id:"n2719",loc:[-85.636153,41.946747]},n272:{id:"n272",loc:[-85.636767,41.941706]},n2720:{id:"n2720",loc:[-85.635417,41.946915]},n2721:{id:"n2721",loc:[-85.636154,41.946915]},n2722:{id:"n2722",loc:[-85.635866,41.946473]},n2723:{id:"n2723",loc:[-85.635717,41.946633]},n2724:{id:"n2724",loc:[-85.635556,41.946166]},n2725:{id:"n2725",loc:[-85.63556,41.946556]},n2726:{id:"n2726",loc:[-85.635731,41.946594]},n2727:{id:"n2727",loc:[-85.635866,41.946595]},n2728:{id:"n2728",loc:[-85.635456,41.947028]},n2729:{id:"n2729",loc:[-85.635796,41.947023]},n273:{id:"n273",loc:[-85.636779,41.941698]},n2730:{id:"n2730",loc:[-85.635798,41.947091]},n2731:{id:"n2731",loc:[-85.63573,41.947092]},n2732:{id:"n2732",loc:[-85.635733,41.947233]},n2733:{id:"n2733",loc:[-85.636283,41.946863]},n2734:{id:"n2734",loc:[-85.63628,41.946706]},n2735:{id:"n2735",loc:[-85.636341,41.946705]},n2736:{id:"n2736",loc:[-85.636273,41.946584]},n2737:{id:"n2737",loc:[-85.636396,41.946545]},n2738:{id:"n2738",loc:[-85.636474,41.946684]},n2739:{id:"n2739",loc:[-85.636511,41.946861]},n274:{id:"n274",loc:[-85.636798,41.941697]},n2740:{id:"n2740",loc:[-85.633713,41.947184]},n2741:{id:"n2741",loc:[-85.633651,41.94716]},n2742:{id:"n2742",loc:[-85.633704,41.947085]},n2743:{id:"n2743",loc:[-85.6336,41.947044]},n2744:{id:"n2744",loc:[-85.633506,41.947177]},n2745:{id:"n2745",loc:[-85.629586,41.952469]},n2746:{id:"n2746",loc:[-85.634723,41.953681]},n2747:{id:"n2747",loc:[-85.63478,41.959007]},n2748:{id:"n2748",loc:[-85.632793,41.94405],tags:{highway:"traffic_signals",traffic_signals:"signal","traffic_signals:direction":"both"}},n2749:{id:"n2749",loc:[-85.634648,41.947325]},n275:{id:"n275",loc:[-85.63681,41.941705]},n2750:{id:"n2750",loc:[-85.625078,41.952097]},n2751:{id:"n2751",loc:[-85.633195,41.94734]},n2752:{id:"n2752",loc:[-85.626447,41.957168]},n2753:{id:"n2753",loc:[-85.632023,41.949012]},n2754:{id:"n2754",loc:[-85.630835,41.950656]},n2755:{id:"n2755",loc:[-85.634655,41.948612]},n2756:{id:"n2756",loc:[-85.636182,41.948605]},n2757:{id:"n2757",loc:[-85.634729,41.954667]},n2758:{id:"n2758",loc:[-85.634686,41.951159]},n2759:{id:"n2759",loc:[-85.636206,41.951146]},n276:{id:"n276",loc:[-85.63681,41.941714]},n2760:{id:"n2760",loc:[-85.634668,41.949891]},n2761:{id:"n2761",loc:[-85.634701,41.952422]},n2762:{id:"n2762",loc:[-85.634747,41.955907]},n2763:{id:"n2763",loc:[-85.627975,41.954695]},n2764:{id:"n2764",loc:[-85.626832,41.954698]},n2765:{id:"n2765",loc:[-85.632278,41.948624]},n2766:{id:"n2766",loc:[-85.628639,41.953725]},n2767:{id:"n2767",loc:[-85.636233,41.95241]},n2768:{id:"n2768",loc:[-85.631385,41.949913]},n2769:{id:"n2769",loc:[-85.630486,41.951194]},n277:{id:"n277",loc:[-85.636861,41.942041]},n2770:{id:"n2770",loc:[-85.624937,41.952088]},n2771:{id:"n2771",loc:[-85.624945,41.952022]},n2772:{id:"n2772",loc:[-85.636162,41.94731]},n2773:{id:"n2773",loc:[-85.636188,41.949881]},n2774:{id:"n2774",loc:[-85.631422,41.948294]},n2775:{id:"n2775",loc:[-85.632844,41.945547]},n2776:{id:"n2776",loc:[-85.632484,41.945344]},n2777:{id:"n2777",loc:[-85.631775,41.944636]},n2778:{id:"n2778",loc:[-85.632656,41.945471]},n2779:{id:"n2779",loc:[-85.631959,41.944827]},n278:{id:"n278",loc:[-85.636862,41.942099]},n2780:{id:"n2780",loc:[-85.631679,41.94438]},n2781:{id:"n2781",loc:[-85.625129,41.959272]},n2782:{id:"n2782",loc:[-85.632446,41.944861]},n2783:{id:"n2783",loc:[-85.632804,41.945477]},n2784:{id:"n2784",loc:[-85.632255,41.944962]},n2785:{id:"n2785",loc:[-85.632736,41.944757]},n2786:{id:"n2786",loc:[-85.632543,41.94486]},n2787:{id:"n2787",loc:[-85.632889,41.945561]},n2788:{id:"n2788",loc:[-85.632091,41.944949]},n2789:{id:"n2789",loc:[-85.632537,41.944713]},n279:{id:"n279",loc:[-85.636807,41.942099]},n2790:{id:"n2790",loc:[-85.632279,41.94485]},n2791:{id:"n2791",loc:[-85.632749,41.943247]},n2792:{id:"n2792",loc:[-85.632824,41.943152]},n2793:{id:"n2793",loc:[-85.632929,41.94317]},n2794:{id:"n2794",loc:[-85.632897,41.943078]},n2795:{id:"n2795",loc:[-85.632626,41.943231]},n2796:{id:"n2796",loc:[-85.634048,41.947257]},n2797:{id:"n2797",loc:[-85.634264,41.947252]},n2798:{id:"n2798",loc:[-85.635418,41.947317]},n2799:{id:"n2799",loc:[-85.635461,41.947237]},n28:{id:"n28",loc:[-85.63821,41.944308]},n280:{id:"n280",loc:[-85.636807,41.942126]},n2800:{id:"n2800",loc:[-85.632868,41.946229]},n2801:{id:"n2801",loc:[-85.633673,41.947242]},n2802:{id:"n2802",loc:[-85.623604,41.945881],tags:{amenity:"school",name:"Barrows School"}},n2803:{id:"n2803",loc:[-85.627401,41.943496]},n2804:{id:"n2804",loc:[-85.627403,41.943625]},n2805:{id:"n2805",loc:[-85.626409,41.943215]},n2806:{id:"n2806",loc:[-85.624884,41.943508]},n2807:{id:"n2807",loc:[-85.625191,41.943509]},n2808:{id:"n2808",loc:[-85.624882,41.94382]},n2809:{id:"n2809",loc:[-85.624893,41.945618]},n281:{id:"n281",loc:[-85.636726,41.942126]},n2810:{id:"n2810",loc:[-85.624912,41.946524]},n2811:{id:"n2811",loc:[-85.622721,41.946535]},n2812:{id:"n2812",loc:[-85.627399,41.94469]},n2813:{id:"n2813",loc:[-85.622716,41.945622]},n2814:{id:"n2814",loc:[-85.624886,41.944724]},n2815:{id:"n2815",loc:[-85.622674,41.944737]},n2816:{id:"n2816",loc:[-85.625092,41.945063]},n2817:{id:"n2817",loc:[-85.625233,41.945064]},n2818:{id:"n2818",loc:[-85.625229,41.944871]},n2819:{id:"n2819",loc:[-85.625066,41.944871]},n282:{id:"n282",loc:[-85.636726,41.942098]},n2820:{id:"n2820",loc:[-85.625024,41.944901]},n2821:{id:"n2821",loc:[-85.625025,41.944924]},n2822:{id:"n2822",loc:[-85.625087,41.944926]},n2823:{id:"n2823",loc:[-85.625349,41.944506]},n2824:{id:"n2824",loc:[-85.625347,41.944388]},n2825:{id:"n2825",loc:[-85.625152,41.94439]},n2826:{id:"n2826",loc:[-85.625152,41.944431]},n2827:{id:"n2827",loc:[-85.625134,41.944431]},n2828:{id:"n2828",loc:[-85.625136,41.944508]},n2829:{id:"n2829",loc:[-85.623236,41.946341]},n283:{id:"n283",loc:[-85.636708,41.942098]},n2830:{id:"n2830",loc:[-85.623241,41.946067]},n2831:{id:"n2831",loc:[-85.623207,41.946067]},n2832:{id:"n2832",loc:[-85.623212,41.945827]},n2833:{id:"n2833",loc:[-85.622981,41.945825]},n2834:{id:"n2834",loc:[-85.622976,41.946063]},n2835:{id:"n2835",loc:[-85.623006,41.946063]},n2836:{id:"n2836",loc:[-85.623002,41.946256]},n2837:{id:"n2837",loc:[-85.623075,41.946256]},n2838:{id:"n2838",loc:[-85.623074,41.946339]},n2839:{id:"n2839",loc:[-85.624574,41.951755]},n284:{id:"n284",loc:[-85.636708,41.942041]},n2840:{id:"n2840",loc:[-85.62498,41.951844]},n2841:{id:"n2841",loc:[-85.625086,41.95188]},n2842:{id:"n2842",loc:[-85.625135,41.951922]},n2843:{id:"n2843",loc:[-85.615273,41.945637]},n2844:{id:"n2844",loc:[-85.620172,41.945627]},n2845:{id:"n2845",loc:[-85.625167,41.951985]},n2846:{id:"n2846",loc:[-85.622741,41.947437]},n2847:{id:"n2847",loc:[-85.624907,41.947428]},n2848:{id:"n2848",loc:[-85.627046,41.940995]},n2849:{id:"n2849",loc:[-85.627295,41.941304]},n285:{id:"n285",loc:[-85.635618,41.941852]},n2850:{id:"n2850",loc:[-85.627352,41.94148]},n2851:{id:"n2851",loc:[-85.62737,41.942261]},n2852:{id:"n2852",loc:[-85.6264,41.942263]},n2853:{id:"n2853",loc:[-85.622769,41.949228]},n2854:{id:"n2854",loc:[-85.624937,41.949218]},n2855:{id:"n2855",loc:[-85.630001,41.944664]},n2856:{id:"n2856",loc:[-85.624873,41.942022]},n2857:{id:"n2857",loc:[-85.622761,41.948333]},n2858:{id:"n2858",loc:[-85.624924,41.948334]},n2859:{id:"n2859",loc:[-85.620051,41.94383]},n286:{id:"n286",loc:[-85.635621,41.94202]},n2860:{id:"n2860",loc:[-85.627629,41.946498]},n2861:{id:"n2861",loc:[-85.622757,41.950111]},n2862:{id:"n2862",loc:[-85.623685,41.954624]},n2863:{id:"n2863",loc:[-85.621459,41.944756]},n2864:{id:"n2864",loc:[-85.628637,41.944676]},n2865:{id:"n2865",loc:[-85.630125,41.944654]},n2866:{id:"n2866",loc:[-85.625196,41.952097]},n2867:{id:"n2867",loc:[-85.630257,41.944637]},n2868:{id:"n2868",loc:[-85.631247,41.944459]},n2869:{id:"n2869",loc:[-85.624867,41.94159]},n287:{id:"n287",loc:[-85.63524,41.942023]},n2870:{id:"n2870",loc:[-85.624958,41.950343]},n2871:{id:"n2871",loc:[-85.624948,41.950484]},n2872:{id:"n2872",loc:[-85.624813,41.950983]},n2873:{id:"n2873",loc:[-85.624723,41.951789]},n2874:{id:"n2874",loc:[-85.624262,41.9512]},n2875:{id:"n2875",loc:[-85.62414,41.951201]},n2876:{id:"n2876",loc:[-85.624139,41.95112]},n2877:{id:"n2877",loc:[-85.628481,41.945611]},n2878:{id:"n2878",loc:[-85.620072,41.946538]},n2879:{id:"n2879",loc:[-85.622763,41.95099]},n288:{id:"n288",loc:[-85.635237,41.941855]},n2880:{id:"n2880",loc:[-85.62814,41.946963]},n2881:{id:"n2881",loc:[-85.628245,41.947031]},n2882:{id:"n2882",loc:[-85.628331,41.947066]},n2883:{id:"n2883",loc:[-85.629722,41.944444],tags:{leisure:"park",name:"Scouter Park"}},n2884:{id:"n2884",loc:[-85.629977,41.943907]},n2885:{id:"n2885",loc:[-85.629947,41.943775]},n2886:{id:"n2886",loc:[-85.629899,41.943625]},n2887:{id:"n2887",loc:[-85.632286,41.944257]},n2888:{id:"n2888",loc:[-85.632523,41.944179]},n2889:{id:"n2889",loc:[-85.632141,41.944293]},n289:{id:"n289",loc:[-85.635568,41.940475]},n2890:{id:"n2890",loc:[-85.631571,41.9444]},n2891:{id:"n2891",loc:[-85.643236,41.941895]},n2892:{id:"n2892",loc:[-85.62865,41.945353]},n2893:{id:"n2893",loc:[-85.628594,41.945481]},n2894:{id:"n2894",loc:[-85.628581,41.947169]},n2895:{id:"n2895",loc:[-85.631843,41.943793]},n2896:{id:"n2896",loc:[-85.632299,41.943472]},n2897:{id:"n2897",loc:[-85.631519,41.944881]},n2898:{id:"n2898",loc:[-85.628429,41.947219]},n2899:{id:"n2899",loc:[-85.63145,41.945162]},n29:{id:"n29",loc:[-85.637963,41.944263]},n290:{id:"n290",loc:[-85.634584,41.940477]},n2900:{id:"n2900",loc:[-85.630939,41.945519]},n2901:{id:"n2901",loc:[-85.62903,41.945719]},n2902:{id:"n2902",loc:[-85.630521,41.945559]},n2903:{id:"n2903",loc:[-85.629294,41.945585]},n2904:{id:"n2904",loc:[-85.629845,41.945543]},n2905:{id:"n2905",loc:[-85.631497,41.944625]},n2906:{id:"n2906",loc:[-85.630281,41.945553]},n2907:{id:"n2907",loc:[-85.628553,41.946973]},n2908:{id:"n2908",loc:[-85.631383,41.945338]},n2909:{id:"n2909",loc:[-85.628843,41.946103]},n291:{id:"n291",loc:[-85.634583,41.940203]},n2910:{id:"n2910",loc:[-85.631193,41.945473]},n2911:{id:"n2911",loc:[-85.628897,41.945944]},n2912:{id:"n2912",loc:[-85.628789,41.946454]},n2913:{id:"n2913",loc:[-85.632548,41.944563]},n2914:{id:"n2914",loc:[-85.627527,41.944555]},n2915:{id:"n2915",loc:[-85.62752,41.943726]},n2916:{id:"n2916",loc:[-85.627894,41.943723]},n2917:{id:"n2917",loc:[-85.627897,41.943919]},n2918:{id:"n2918",loc:[-85.627991,41.943934]},n2919:{id:"n2919",loc:[-85.628082,41.943966]},n292:{id:"n292",loc:[-85.635567,41.940201]},n2920:{id:"n2920",loc:[-85.628177,41.944015]},n2921:{id:"n2921",loc:[-85.628193,41.944048]},n2922:{id:"n2922",loc:[-85.628167,41.944054]},n2923:{id:"n2923",loc:[-85.628193,41.944094]},n2924:{id:"n2924",loc:[-85.628213,41.944144]},n2925:{id:"n2925",loc:[-85.628214,41.944199]},n2926:{id:"n2926",loc:[-85.62833,41.944196]},n2927:{id:"n2927",loc:[-85.628328,41.944262]},n2928:{id:"n2928",loc:[-85.628173,41.944262]},n2929:{id:"n2929",loc:[-85.628171,41.944293]},n293:{id:"n293",loc:[-85.635818,41.942677],tags:{crossing:"marked",highway:"crossing"}},n2930:{id:"n2930",loc:[-85.628039,41.944296]},n2931:{id:"n2931",loc:[-85.62804,41.944329]},n2932:{id:"n2932",loc:[-85.627829,41.944335]},n2933:{id:"n2933",loc:[-85.627835,41.94455]},n2936:{id:"n2936",loc:[-85.632823,41.945994]},n294:{id:"n294",loc:[-85.635696,41.942712]},n2940:{id:"n2940",loc:[-85.632192,41.945973]},n2941:{id:"n2941",loc:[-85.63226,41.94587]},n2942:{id:"n2942",loc:[-85.632721,41.946036]},n2943:{id:"n2943",loc:[-85.632641,41.946142]},n2944:{id:"n2944",loc:[-85.62937,41.947467]},n2945:{id:"n2945",loc:[-85.62959,41.942936]},n2946:{id:"n2946",loc:[-85.629551,41.94284]},n2947:{id:"n2947",loc:[-85.629501,41.942704]},n2948:{id:"n2948",loc:[-85.629472,41.942578]},n2949:{id:"n2949",loc:[-85.629361,41.941801]},n295:{id:"n295",loc:[-85.635679,41.941962]},n2950:{id:"n2950",loc:[-85.629339,41.941716]},n2951:{id:"n2951",loc:[-85.629315,41.94166]},n2952:{id:"n2952",loc:[-85.629279,41.941602]},n2953:{id:"n2953",loc:[-85.629227,41.941556]},n2954:{id:"n2954",loc:[-85.624261,41.95112]},n2955:{id:"n2955",loc:[-85.629153,41.941524]},n2956:{id:"n2956",loc:[-85.626904,41.941098]},n2957:{id:"n2957",loc:[-85.624588,41.951294]},n2958:{id:"n2958",loc:[-85.631844,41.942945]},n2959:{id:"n2959",loc:[-85.625854,41.949222]},n296:{id:"n296",loc:[-85.635672,41.941337]},n2960:{id:"n2960",loc:[-85.625146,41.955238]},n2961:{id:"n2961",loc:[-85.626745,41.948296]},n2962:{id:"n2962",loc:[-85.625721,41.95524]},n2963:{id:"n2963",loc:[-85.624706,41.952317]},n2964:{id:"n2964",loc:[-85.62609,41.956147]},n2965:{id:"n2965",loc:[-85.624401,41.954928]},n2966:{id:"n2966",loc:[-85.626558,41.955367]},n2967:{id:"n2967",loc:[-85.62468,41.955096]},n2968:{id:"n2968",loc:[-85.624159,41.953929]},n2969:{id:"n2969",loc:[-85.62506,41.951113]},n297:{id:"n297",loc:[-85.635658,41.941284]},n2970:{id:"n2970",loc:[-85.624942,41.951591]},n2971:{id:"n2971",loc:[-85.627399,41.947546]},n2972:{id:"n2972",loc:[-85.627695,41.947404]},n2973:{id:"n2973",loc:[-85.625925,41.94896]},n2974:{id:"n2974",loc:[-85.625725,41.950211]},n2975:{id:"n2975",loc:[-85.627008,41.947963]},n2976:{id:"n2976",loc:[-85.624373,41.953458]},n2977:{id:"n2977",loc:[-85.624137,41.954392]},n2978:{id:"n2978",loc:[-85.628257,41.947307]},n2979:{id:"n2979",loc:[-85.625281,41.95066]},n298:{id:"n298",loc:[-85.635602,41.941166]},n2980:{id:"n2980",loc:[-85.625865,41.949804]},n2981:{id:"n2981",loc:[-85.626508,41.955932]},n2982:{id:"n2982",loc:[-85.626333,41.955216]},n2983:{id:"n2983",loc:[-85.626637,41.955676]},n2984:{id:"n2984",loc:[-85.624223,41.954599]},n2985:{id:"n2985",loc:[-85.626219,41.948671]},n2986:{id:"n2986",loc:[-85.624556,41.953043]},n2987:{id:"n2987",loc:[-85.625598,41.956302]},n2988:{id:"n2988",loc:[-85.624571,41.952971]},n2989:{id:"n2989",loc:[-85.627141,41.940727]},n299:{id:"n299",loc:[-85.635598,41.941138]},n2990:{id:"n2990",loc:[-85.627102,41.939144]},n2991:{id:"n2991",loc:[-85.627127,41.940086]},n2992:{id:"n2992",loc:[-85.627116,41.940843]},n2993:{id:"n2993",loc:[-85.627132,41.9402]},n2994:{id:"n2994",loc:[-85.629734,41.940078]},n2995:{id:"n2995",loc:[-85.6276,41.937412]},n2996:{id:"n2996",loc:[-85.627451,41.937549]},n2997:{id:"n2997",loc:[-85.627375,41.937618]},n2998:{id:"n2998",loc:[-85.627278,41.937728]},n2999:{id:"n2999",loc:[-85.627199,41.937842]},n3:{id:"n3",loc:[-85.627345,41.953983]},n30:{id:"n30",loc:[-85.637882,41.944205]},n300:{id:"n300",loc:[-85.635614,41.941076]},n3000:{id:"n3000",loc:[-85.627141,41.937981]},n3001:{id:"n3001",loc:[-85.627109,41.938153]},n3002:{id:"n3002",loc:[-85.627101,41.938699]},n3003:{id:"n3003",loc:[-85.628311,41.942261]},n3004:{id:"n3004",loc:[-85.628439,41.940082]},n3005:{id:"n3005",loc:[-85.619538,41.942622],tags:{leisure:"slipway"}},n3006:{id:"n3006",loc:[-85.619872,41.942618]},n3007:{id:"n3007",loc:[-85.619755,41.942612]},n3008:{id:"n3008",loc:[-85.619647,41.942628]},n3009:{id:"n3009",loc:[-85.619415,41.942626]},n301:{id:"n301",loc:[-85.635659,41.940956]},n3010:{id:"n3010",loc:[-85.619212,41.942623]},n3011:{id:"n3011",loc:[-85.631485,41.942472]},n3012:{id:"n3012",loc:[-85.630986,41.941786]},n3013:{id:"n3013",loc:[-85.631797,41.942006]},n3014:{id:"n3014",loc:[-85.630972,41.941162]},n3015:{id:"n3015",loc:[-85.631396,41.941611],tags:{railway:"level_crossing"}},n3016:{id:"n3016",loc:[-85.631878,41.941545]},n3017:{id:"n3017",loc:[-85.630461,41.94055]},n3018:{id:"n3018",loc:[-85.629751,41.939539],tags:{railway:"level_crossing"}},n3019:{id:"n3019",loc:[-85.631663,41.941513]},n302:{id:"n302",loc:[-85.635666,41.940922]},n3020:{id:"n3020",loc:[-85.631328,41.941375]},n3021:{id:"n3021",loc:[-85.632554,41.941779]},n3022:{id:"n3022",loc:[-85.63245,41.941769]},n3023:{id:"n3023",loc:[-85.632475,41.941644]},n3024:{id:"n3024",loc:[-85.632581,41.941654]},n3025:{id:"n3025",loc:[-85.631957,41.941352]},n3026:{id:"n3026",loc:[-85.632293,41.941139]},n3027:{id:"n3027",loc:[-85.632315,41.941153]},n3028:{id:"n3028",loc:[-85.632302,41.941262]},n3029:{id:"n3029",loc:[-85.63237,41.941267]},n303:{id:"n303",loc:[-85.635667,41.940877]},n3030:{id:"n3030",loc:[-85.632356,41.941538]},n3031:{id:"n3031",loc:[-85.632134,41.941678]},n3032:{id:"n3032",loc:[-85.631942,41.941687]},n3033:{id:"n3033",loc:[-85.63203,41.941694]},n3034:{id:"n3034",loc:[-85.632166,41.941555]},n3035:{id:"n3035",loc:[-85.632412,41.941416]},n3036:{id:"n3036",loc:[-85.63248,41.941342]},n3037:{id:"n3037",loc:[-85.632502,41.941259]},n3038:{id:"n3038",loc:[-85.632453,41.941161]},n3039:{id:"n3039",loc:[-85.63235,41.941103]},n304:{id:"n304",loc:[-85.635668,41.940655]},n3040:{id:"n3040",loc:[-85.632236,41.941118]},n3041:{id:"n3041",loc:[-85.631894,41.941355]},n3042:{id:"n3042",loc:[-85.631859,41.941411]},n3043:{id:"n3043",loc:[-85.632011,41.941587]},n3044:{id:"n3044",loc:[-85.632446,41.941379]},n3045:{id:"n3045",loc:[-85.632511,41.941416]},n3046:{id:"n3046",loc:[-85.632545,41.941634]},n3047:{id:"n3047",loc:[-85.632612,41.94164]},n3048:{id:"n3048",loc:[-85.632595,41.942197]},n3049:{id:"n3049",loc:[-85.632565,41.942241]},n305:{id:"n305",loc:[-85.635628,41.940617]},n3050:{id:"n3050",loc:[-85.632515,41.942256]},n3051:{id:"n3051",loc:[-85.63245,41.94223]},n3052:{id:"n3052",loc:[-85.632401,41.942174]},n3053:{id:"n3053",loc:[-85.632391,41.942115]},n3054:{id:"n3054",loc:[-85.632029,41.941859]},n3055:{id:"n3055",loc:[-85.631828,41.941639]},n3056:{id:"n3056",loc:[-85.631829,41.941508]},n3057:{id:"n3057",loc:[-85.631281,41.94312]},n3058:{id:"n3058",loc:[-85.631421,41.943065]},n3059:{id:"n3059",loc:[-85.631339,41.942949]},n306:{id:"n306",loc:[-85.635623,41.940272]},n3060:{id:"n3060",loc:[-85.631199,41.943004]},n3061:{id:"n3061",loc:[-85.631102,41.942931]},n3062:{id:"n3062",loc:[-85.631009,41.942809]},n3063:{id:"n3063",loc:[-85.631383,41.94265]},n3064:{id:"n3064",loc:[-85.631477,41.942773]},n3065:{id:"n3065",loc:[-85.630638,41.942809]},n3066:{id:"n3066",loc:[-85.630738,41.942943]},n3067:{id:"n3067",loc:[-85.630841,41.9429]},n3068:{id:"n3068",loc:[-85.630741,41.942766]},n3069:{id:"n3069",loc:[-85.63054,41.942603]},n307:{id:"n307",loc:[-85.635651,41.940183]},n3070:{id:"n3070",loc:[-85.630498,41.942619]},n3071:{id:"n3071",loc:[-85.630567,41.942718]},n3072:{id:"n3072",loc:[-85.630616,41.942698]},n3073:{id:"n3073",loc:[-85.630642,41.94273]},n3074:{id:"n3074",loc:[-85.630686,41.942714]},n3075:{id:"n3075",loc:[-85.630715,41.942754]},n3076:{id:"n3076",loc:[-85.6309,41.942681]},n3077:{id:"n3077",loc:[-85.630843,41.942605]},n3078:{id:"n3078",loc:[-85.6309,41.942581]},n3079:{id:"n3079",loc:[-85.630832,41.942487]},n308:{id:"n308",loc:[-85.635777,41.940183],tags:{crossing:"marked",highway:"crossing"}},n3080:{id:"n3080",loc:[-85.630773,41.942509]},n3081:{id:"n3081",loc:[-85.630718,41.942436]},n3082:{id:"n3082",loc:[-85.630485,41.942524]},n3083:{id:"n3083",loc:[-85.631468,41.941233]},n3084:{id:"n3084",loc:[-85.631334,41.94114]},n3085:{id:"n3085",loc:[-85.632052,41.940568]},n3086:{id:"n3086",loc:[-85.63219,41.940663]},n3087:{id:"n3087",loc:[-85.631323,41.940834]},n3088:{id:"n3088",loc:[-85.631122,41.941002]},n3089:{id:"n3089",loc:[-85.631321,41.941133]},n309:{id:"n309",loc:[-85.636939,41.942544]},n3090:{id:"n3090",loc:[-85.631521,41.940966]},n3091:{id:"n3091",loc:[-85.631103,41.940253]},n3092:{id:"n3092",loc:[-85.631226,41.940211]},n3093:{id:"n3093",loc:[-85.631597,41.940805]},n3094:{id:"n3094",loc:[-85.631474,41.940847]},n3095:{id:"n3095",loc:[-85.631811,41.940534]},n3096:{id:"n3096",loc:[-85.631588,41.94061]},n3097:{id:"n3097",loc:[-85.631438,41.940366]},n3098:{id:"n3098",loc:[-85.631661,41.94029]},n3099:{id:"n3099",loc:[-85.630621,41.940041]},n31:{id:"n31",loc:[-85.63827,41.944203]},n310:{id:"n310",loc:[-85.636323,41.942552]},n3100:{id:"n3100",loc:[-85.630436,41.939773]},n3101:{id:"n3101",loc:[-85.63059,41.939714]},n3102:{id:"n3102",loc:[-85.630775,41.939983]},n3103:{id:"n3103",loc:[-85.63047,41.940167]},n3104:{id:"n3104",loc:[-85.63013,41.939686]},n3105:{id:"n3105",loc:[-85.630302,41.939618]},n3106:{id:"n3106",loc:[-85.630641,41.9401]},n3107:{id:"n3107",loc:[-85.630966,41.940619]},n3108:{id:"n3108",loc:[-85.630874,41.940493]},n3109:{id:"n3109",loc:[-85.630933,41.940469]},n311:{id:"n311",loc:[-85.636257,41.942555]},n3110:{id:"n3110",loc:[-85.630763,41.940236]},n3111:{id:"n3111",loc:[-85.63088,41.940189]},n3112:{id:"n3112",loc:[-85.631142,41.940548]},n3113:{id:"n3113",loc:[-85.630958,41.940871]},n3114:{id:"n3114",loc:[-85.630874,41.940778]},n3115:{id:"n3115",loc:[-85.631062,41.940684]},n3116:{id:"n3116",loc:[-85.631146,41.940777]},n3117:{id:"n3117",loc:[-85.632031,41.940575]},n3118:{id:"n3118",loc:[-85.631777,41.940186]},n3119:{id:"n3119",loc:[-85.631346,41.940179]},n312:{id:"n312",loc:[-85.636208,41.942561]},n3120:{id:"n3120",loc:[-85.631342,41.94012]},n3121:{id:"n3121",loc:[-85.631831,41.940118]},n3122:{id:"n3122",loc:[-85.632115,41.940543]},n3123:{id:"n3123",loc:[-85.631031,41.941683]},n3124:{id:"n3124",loc:[-85.630981,41.941608]},n3125:{id:"n3125",loc:[-85.631209,41.941516]},n3126:{id:"n3126",loc:[-85.631264,41.941586]},n3127:{id:"n3127",loc:[-85.630938,41.94155]},n3128:{id:"n3128",loc:[-85.631156,41.941462]},n3129:{id:"n3129",loc:[-85.631197,41.94152]},n313:{id:"n313",loc:[-85.636159,41.942573]},n3130:{id:"n3130",loc:[-85.630895,41.941485]},n3131:{id:"n3131",loc:[-85.630824,41.941389]},n3132:{id:"n3132",loc:[-85.630986,41.941323]},n3133:{id:"n3133",loc:[-85.631057,41.941419]},n3134:{id:"n3134",loc:[-85.630777,41.941328]},n3135:{id:"n3135",loc:[-85.630907,41.941274]},n3136:{id:"n3136",loc:[-85.630953,41.941335]},n3137:{id:"n3137",loc:[-85.630797,41.941247]},n3138:{id:"n3138",loc:[-85.630701,41.94117]},n3139:{id:"n3139",loc:[-85.630829,41.941113]},n314:{id:"n314",loc:[-85.635743,41.942881]},n3140:{id:"n3140",loc:[-85.6309,41.941201]},n3141:{id:"n3141",loc:[-85.630765,41.941206]},n3142:{id:"n3142",loc:[-85.630739,41.941218]},n3143:{id:"n3143",loc:[-85.630582,41.941039]},n3144:{id:"n3144",loc:[-85.630412,41.940818]},n3145:{id:"n3145",loc:[-85.630509,41.940777]},n3146:{id:"n3146",loc:[-85.630678,41.941004]},n3147:{id:"n3147",loc:[-85.630773,41.942166]},n3148:{id:"n3148",loc:[-85.630708,41.942074]},n3149:{id:"n3149",loc:[-85.630863,41.942013]},n315:{id:"n315",loc:[-85.635452,41.942966]},n3150:{id:"n3150",loc:[-85.630928,41.942105]},n3151:{id:"n3151",loc:[-85.630701,41.942026]},n3152:{id:"n3152",loc:[-85.630665,41.941971]},n3153:{id:"n3153",loc:[-85.630793,41.941918]},n3154:{id:"n3154",loc:[-85.630837,41.94197]},n3155:{id:"n3155",loc:[-85.630757,41.941871]},n3156:{id:"n3156",loc:[-85.630629,41.941923]},n3157:{id:"n3157",loc:[-85.630694,41.941783]},n3158:{id:"n3158",loc:[-85.630534,41.941847]},n3159:{id:"n3159",loc:[-85.630598,41.941935]},n316:{id:"n316",loc:[-85.634911,41.943118]},n3160:{id:"n3160",loc:[-85.631548,41.93938]},n3161:{id:"n3161",loc:[-85.631525,41.939919]},n3162:{id:"n3162",loc:[-85.631648,41.940043]},n3163:{id:"n3163",loc:[-85.624586,41.951121]},n3164:{id:"n3164",loc:[-85.622139,41.952064]},n3165:{id:"n3165",loc:[-85.622141,41.952144]},n3166:{id:"n3166",loc:[-85.621977,41.952146]},n3167:{id:"n3167",loc:[-85.621978,41.952211]},n3168:{id:"n3168",loc:[-85.62191,41.952212]},n3169:{id:"n3169",loc:[-85.633628,41.935437]},n317:{id:"n317",loc:[-85.634743,41.943167]},n3170:{id:"n3170",loc:[-85.632849,41.935518]},n3171:{id:"n3171",loc:[-85.632376,41.93574]},n3172:{id:"n3172",loc:[-85.631517,41.935897]},n3173:{id:"n3173",loc:[-85.630433,41.936124]},n3174:{id:"n3174",loc:[-85.630207,41.936427]},n3175:{id:"n3175",loc:[-85.630346,41.936795]},n3176:{id:"n3176",loc:[-85.62996,41.936974]},n3177:{id:"n3177",loc:[-85.629916,41.937488]},n3178:{id:"n3178",loc:[-85.629946,41.937802]},n3179:{id:"n3179",loc:[-85.629977,41.937905]},n318:{id:"n318",loc:[-85.634401,41.94328]},n3180:{id:"n3180",loc:[-85.63016,41.937909]},n3181:{id:"n3181",loc:[-85.630804,41.937791]},n3182:{id:"n3182",loc:[-85.631688,41.937808]},n3183:{id:"n3183",loc:[-85.631685,41.938008]},n3184:{id:"n3184",loc:[-85.631845,41.938116]},n3185:{id:"n3185",loc:[-85.63207,41.938181]},n3186:{id:"n3186",loc:[-85.632143,41.938371]},n3187:{id:"n3187",loc:[-85.632056,41.938435]},n3188:{id:"n3188",loc:[-85.631787,41.938457]},n3189:{id:"n3189",loc:[-85.631657,41.938728]},n319:{id:"n319",loc:[-85.634345,41.943299]},n3190:{id:"n3190",loc:[-85.631595,41.93775]},n3191:{id:"n3191",loc:[-85.630264,41.937839]},n3192:{id:"n3192",loc:[-85.628591,41.948536]},n3193:{id:"n3193",loc:[-85.63205,41.951181]},n3194:{id:"n3194",loc:[-85.632034,41.949909]},n3195:{id:"n3195",loc:[-85.630841,41.951191]},n3196:{id:"n3196",loc:[-85.632083,41.9537]},n3197:{id:"n3197",loc:[-85.630929,41.959037]},n3198:{id:"n3198",loc:[-85.632151,41.959028]},n3199:{id:"n3199",loc:[-85.630911,41.957428]},n32:{id:"n32",loc:[-85.638273,41.944246]},n320:{id:"n320",loc:[-85.634287,41.943326]},n3200:{id:"n3200",loc:[-85.63213,41.957427]},n3201:{id:"n3201",loc:[-85.632072,41.952447]},n3202:{id:"n3202",loc:[-85.632095,41.954677]},n3203:{id:"n3203",loc:[-85.632111,41.955911]},n3204:{id:"n3204",loc:[-85.630855,41.952457]},n3205:{id:"n3205",loc:[-85.630869,41.953709]},n3206:{id:"n3206",loc:[-85.63088,41.954682]},n3207:{id:"n3207",loc:[-85.630894,41.955913]},n3208:{id:"n3208",loc:[-85.633214,41.948619]},n3209:{id:"n3209",loc:[-85.633253,41.951171]},n321:{id:"n321",loc:[-85.634233,41.943354]},n3210:{id:"n3210",loc:[-85.633234,41.949901]},n3211:{id:"n3211",loc:[-85.633922,41.948616]},n3212:{id:"n3212",loc:[-85.625188,41.947832]},n3213:{id:"n3213",loc:[-85.625208,41.947775]},n3214:{id:"n3214",loc:[-85.625229,41.94776]},n3215:{id:"n3215",loc:[-85.625201,41.947749]},n3216:{id:"n3216",loc:[-85.625168,41.947707]},n3217:{id:"n3217",loc:[-85.625171,41.947609]},n3218:{id:"n3218",loc:[-85.625213,41.947564]},n3219:{id:"n3219",loc:[-85.62529,41.94756]},n322:{id:"n322",loc:[-85.634099,41.943429]},n3220:{id:"n3220",loc:[-85.625303,41.947533]},n3221:{id:"n3221",loc:[-85.625344,41.947482]},n3222:{id:"n3222",loc:[-85.625442,41.947468]},n3223:{id:"n3223",loc:[-85.62565,41.947494]},n3224:{id:"n3224",loc:[-85.625726,41.947613]},n3225:{id:"n3225",loc:[-85.625703,41.947728]},n3226:{id:"n3226",loc:[-85.625534,41.94781]},n3227:{id:"n3227",loc:[-85.625391,41.947822]},n3228:{id:"n3228",loc:[-85.625304,41.947859]},n3229:{id:"n3229",loc:[-85.625203,41.947885]},n323:{id:"n323",loc:[-85.633958,41.943507],tags:{highway:"crossing"}},n3230:{id:"n3230",loc:[-85.624691,41.948659]},n3231:{id:"n3231",loc:[-85.624328,41.948661]},n3232:{id:"n3232",loc:[-85.624331,41.949046]},n3233:{id:"n3233",loc:[-85.624694,41.949045]},n3234:{id:"n3234",loc:[-85.623623,41.949606]},n3235:{id:"n3235",loc:[-85.623623,41.9497]},n3236:{id:"n3236",loc:[-85.623357,41.9497]},n3237:{id:"n3237",loc:[-85.623357,41.949614]},n3238:{id:"n3238",loc:[-85.623974,41.949429]},n3239:{id:"n3239",loc:[-85.623974,41.949605]},n324:{id:"n324",loc:[-85.633698,41.943651],tags:{railway:"crossing"}},n3240:{id:"n3240",loc:[-85.624501,41.951226]},n3241:{id:"n3241",loc:[-85.624501,41.951123]},n3242:{id:"n3242",loc:[-85.624319,41.951123]},n3243:{id:"n3243",loc:[-85.624319,41.951226]},n3244:{id:"n3244",loc:[-85.624121,41.950866]},n3245:{id:"n3245",loc:[-85.624115,41.950525]},n3246:{id:"n3246",loc:[-85.624315,41.950523]},n3247:{id:"n3247",loc:[-85.62432,41.950865]},n3248:{id:"n3248",loc:[-85.624393,41.950867]},n3249:{id:"n3249",loc:[-85.62439,41.950596]},n325:{id:"n325",loc:[-85.633508,41.943757]},n3250:{id:"n3250",loc:[-85.624673,41.950594]},n3251:{id:"n3251",loc:[-85.624675,41.95082]},n3252:{id:"n3252",loc:[-85.62451,41.950821]},n3253:{id:"n3253",loc:[-85.62451,41.950866]},n3254:{id:"n3254",loc:[-85.624101,41.949346]},n3255:{id:"n3255",loc:[-85.624244,41.949346]},n3256:{id:"n3256",loc:[-85.624244,41.949368]},n3257:{id:"n3257",loc:[-85.62434,41.949368]},n3258:{id:"n3258",loc:[-85.624342,41.949351]},n3259:{id:"n3259",loc:[-85.624725,41.949348]},n326:{id:"n326",loc:[-85.634839,41.942974]},n3260:{id:"n3260",loc:[-85.624755,41.950495]},n3261:{id:"n3261",loc:[-85.624121,41.950502]},n3262:{id:"n3262",loc:[-85.625453,41.950163]},n3263:{id:"n3263",loc:[-85.625454,41.949976]},n3264:{id:"n3264",loc:[-85.625549,41.949977]},n3265:{id:"n3265",loc:[-85.62555,41.949833]},n3266:{id:"n3266",loc:[-85.625577,41.949833]},n3267:{id:"n3267",loc:[-85.625578,41.949656]},n3268:{id:"n3268",loc:[-85.625195,41.949655]},n3269:{id:"n3269",loc:[-85.625192,41.950162]},n327:{id:"n327",loc:[-85.634657,41.943028]},n3270:{id:"n3270",loc:[-85.622992,41.949614]},n3271:{id:"n3271",loc:[-85.622991,41.949431]},n3272:{id:"n3272",loc:[-85.620103,41.951]},n3273:{id:"n3273",loc:[-85.605644,41.947468]},n3274:{id:"n3274",loc:[-85.617421,41.947457]},n3275:{id:"n3275",loc:[-85.620078,41.947444]},n3276:{id:"n3276",loc:[-85.620087,41.94924]},n3277:{id:"n3277",loc:[-85.62156,41.948333]},n3278:{id:"n3278",loc:[-85.620106,41.950132]},n3279:{id:"n3279",loc:[-85.637412,41.951136]},n328:{id:"n328",loc:[-85.634222,41.943152]},n3280:{id:"n3280",loc:[-85.635429,41.948608]},n3281:{id:"n3281",loc:[-85.635047,41.947788]},n3282:{id:"n3282",loc:[-85.635048,41.947796]},n3283:{id:"n3283",loc:[-85.635002,41.947797]},n3284:{id:"n3284",loc:[-85.635002,41.947788]},n3285:{id:"n3285",loc:[-85.634914,41.94779]},n3286:{id:"n3286",loc:[-85.634913,41.947753]},n3287:{id:"n3287",loc:[-85.63494,41.947753]},n3288:{id:"n3288",loc:[-85.634938,41.947708]},n3289:{id:"n3289",loc:[-85.635124,41.947705]},n329:{id:"n329",loc:[-85.634099,41.943202]},n3290:{id:"n3290",loc:[-85.635126,41.947787]},n3291:{id:"n3291",loc:[-85.634972,41.947599]},n3292:{id:"n3292",loc:[-85.634921,41.9476]},n3293:{id:"n3293",loc:[-85.63485,41.947546]},n3294:{id:"n3294",loc:[-85.63485,41.947508]},n3295:{id:"n3295",loc:[-85.634924,41.947457]},n3296:{id:"n3296",loc:[-85.634967,41.947456]},n3297:{id:"n3297",loc:[-85.635041,41.947512]},n3298:{id:"n3298",loc:[-85.635041,41.947542]},n3299:{id:"n3299",loc:[-85.634244,41.947839]},n33:{id:"n33",loc:[-85.638257,41.944188]},n330:{id:"n330",loc:[-85.634093,41.943138]},n3300:{id:"n3300",loc:[-85.634243,41.947793]},n3301:{id:"n3301",loc:[-85.634244,41.947686]},n3302:{id:"n3302",loc:[-85.634243,41.947657]},n3303:{id:"n3303",loc:[-85.634462,41.947653]},n3304:{id:"n3304",loc:[-85.634468,41.947835]},n3305:{id:"n3305",loc:[-85.634416,41.948006]},n3306:{id:"n3306",loc:[-85.634415,41.947898]},n3307:{id:"n3307",loc:[-85.634275,41.947899]},n3308:{id:"n3308",loc:[-85.634275,41.947927]},n3309:{id:"n3309",loc:[-85.63425,41.947927]},n331:{id:"n331",loc:[-85.633938,41.943291]},n3310:{id:"n3310",loc:[-85.63425,41.947976]},n3311:{id:"n3311",loc:[-85.634274,41.947976]},n3312:{id:"n3312",loc:[-85.634275,41.948007]},n3313:{id:"n3313",loc:[-85.634342,41.947635]},n3314:{id:"n3314",loc:[-85.634339,41.947497]},n3315:{id:"n3315",loc:[-85.634313,41.94748]},n3316:{id:"n3316",loc:[-85.634287,41.947474]},n3317:{id:"n3317",loc:[-85.63498,41.94815]},n3318:{id:"n3318",loc:[-85.634891,41.94815]},n3319:{id:"n3319",loc:[-85.634892,41.948169]},n332:{id:"n332",loc:[-85.633535,41.943511],tags:{railway:"crossing"}},n3320:{id:"n3320",loc:[-85.634852,41.948169]},n3321:{id:"n3321",loc:[-85.634853,41.948268]},n3322:{id:"n3322",loc:[-85.634832,41.948268]},n3323:{id:"n3323",loc:[-85.634832,41.948296]},n3324:{id:"n3324",loc:[-85.634965,41.948295]},n3325:{id:"n3325",loc:[-85.634966,41.948321]},n3326:{id:"n3326",loc:[-85.634999,41.948321]},n3327:{id:"n3327",loc:[-85.634999,41.948295]},n3328:{id:"n3328",loc:[-85.635175,41.948293]},n3329:{id:"n3329",loc:[-85.635175,41.948262]},n333:{id:"n333",loc:[-85.63339,41.943596]},n3330:{id:"n3330",loc:[-85.635159,41.948262]},n3331:{id:"n3331",loc:[-85.635158,41.948152]},n3332:{id:"n3332",loc:[-85.635067,41.948152]},n3333:{id:"n3333",loc:[-85.635065,41.947966]},n3334:{id:"n3334",loc:[-85.634979,41.947966]},n3335:{id:"n3335",loc:[-85.634307,41.948326]},n3336:{id:"n3336",loc:[-85.634305,41.948298]},n3337:{id:"n3337",loc:[-85.634331,41.948055]},n3338:{id:"n3338",loc:[-85.634331,41.948046]},n3339:{id:"n3339",loc:[-85.634435,41.948047]},n334:{id:"n334",loc:[-85.632842,41.943895]},n3340:{id:"n3340",loc:[-85.634434,41.948375]},n3341:{id:"n3341",loc:[-85.634463,41.948373]},n3342:{id:"n3342",loc:[-85.634464,41.948456]},n3343:{id:"n3343",loc:[-85.63443,41.948457]},n3344:{id:"n3344",loc:[-85.634432,41.948505]},n3345:{id:"n3345",loc:[-85.637386,41.94906]},n3346:{id:"n3346",loc:[-85.637113,41.9486]},n3347:{id:"n3347",loc:[-85.635448,41.949424]},n335:{id:"n335",loc:[-85.633856,41.943315]},n3352:{id:"n3352",loc:[-85.635457,41.949787]},n3353:{id:"n3353",loc:[-85.635459,41.949886]},n336:{id:"n336",loc:[-85.633697,41.943405]},n337:{id:"n337",loc:[-85.63347,41.943181]},n3372:{id:"n3372",loc:[-85.634423,41.950964]},n3373:{id:"n3373",loc:[-85.634424,41.95074]},n3374:{id:"n3374",loc:[-85.634394,41.950284]},n3375:{id:"n3375",loc:[-85.634398,41.950626]},n3376:{id:"n3376",loc:[-85.63452,41.951063]},n3377:{id:"n3377",loc:[-85.634511,41.949977]},n3378:{id:"n3378",loc:[-85.637409,41.949873]},n3379:{id:"n3379",loc:[-85.634824,41.94996]},n338:{id:"n338",loc:[-85.633597,41.943109]},n3380:{id:"n3380",loc:[-85.635437,41.949954]},n3381:{id:"n3381",loc:[-85.634844,41.951064]},n3382:{id:"n3382",loc:[-85.635458,41.951058]},n3383:{id:"n3383",loc:[-85.633921,41.947333]},n3384:{id:"n3384",loc:[-85.634208,41.947793]},n3385:{id:"n3385",loc:[-85.634204,41.947687]},n3386:{id:"n3386",loc:[-85.63424,41.947475]},n3387:{id:"n3387",loc:[-85.63424,41.947635]},n3388:{id:"n3388",loc:[-85.634089,41.948328]},n3389:{id:"n3389",loc:[-85.63424,41.948299]},n339:{id:"n339",loc:[-85.633673,41.943184]},n3390:{id:"n3390",loc:[-85.634239,41.948212]},n3391:{id:"n3391",loc:[-85.634086,41.948214]},n3392:{id:"n3392",loc:[-85.63408,41.948056]},n3393:{id:"n3393",loc:[-85.634093,41.948506]},n3394:{id:"n3394",loc:[-85.64344,41.941866]},n3395:{id:"n3395",loc:[-85.63378,41.95099]},n3396:{id:"n3396",loc:[-85.633779,41.950967]},n3397:{id:"n3397",loc:[-85.63375,41.950746]},n3398:{id:"n3398",loc:[-85.63375,41.950697]},n3399:{id:"n3399",loc:[-85.633903,41.950696]},n34:{id:"n34",loc:[-85.638176,41.944312]},n340:{id:"n340",loc:[-85.633714,41.94316]},n3400:{id:"n3400",loc:[-85.633901,41.950436]},n3401:{id:"n3401",loc:[-85.633492,41.950438]},n3402:{id:"n3402",loc:[-85.633494,41.950756]},n3403:{id:"n3403",loc:[-85.633454,41.950756]},n3404:{id:"n3404",loc:[-85.633456,41.950992]},n3405:{id:"n3405",loc:[-85.633994,41.950284]},n3406:{id:"n3406",loc:[-85.633998,41.950628]},n3407:{id:"n3407",loc:[-85.633364,41.951068]},n3408:{id:"n3408",loc:[-85.633356,41.949982]},n3409:{id:"n3409",loc:[-85.643327,41.941903]},n341:{id:"n341",loc:[-85.633811,41.943256]},n3410:{id:"n3410",loc:[-85.633292,41.953691]},n3411:{id:"n3411",loc:[-85.637432,41.952399]},n3412:{id:"n3412",loc:[-85.633349,41.957422]},n3413:{id:"n3413",loc:[-85.633326,41.955909]},n3414:{id:"n3414",loc:[-85.633307,41.954673]},n3415:{id:"n3415",loc:[-85.633273,41.952436]},n3416:{id:"n3416",loc:[-85.633361,41.95823],tags:{highway:"turning_circle"}},n3417:{id:"n3417",loc:[-85.619899,41.945527]},n3418:{id:"n3418",loc:[-85.643422,41.941946]},n3419:{id:"n3419",loc:[-85.643505,41.942033]},n342:{id:"n342",loc:[-85.633801,41.943261]},n3420:{id:"n3420",loc:[-85.620088,41.945571]},n3421:{id:"n3421",loc:[-85.620051,41.945505]},n3422:{id:"n3422",loc:[-85.62001,41.94541]},n3423:{id:"n3423",loc:[-85.620982,41.944742]},n3424:{id:"n3424",loc:[-85.621305,41.944782]},n3425:{id:"n3425",loc:[-85.621174,41.944819]},n3426:{id:"n3426",loc:[-85.621029,41.944871]},n3427:{id:"n3427",loc:[-85.620741,41.945011]},n3428:{id:"n3428",loc:[-85.620616,41.945085]},n3429:{id:"n3429",loc:[-85.620506,41.945172]},n343:{id:"n343",loc:[-85.63374,41.943514]},n3430:{id:"n3430",loc:[-85.620394,41.945273]},n3431:{id:"n3431",loc:[-85.620316,41.94536]},n3432:{id:"n3432",loc:[-85.620257,41.945452]},n3433:{id:"n3433",loc:[-85.620212,41.945535]},n3434:{id:"n3434",loc:[-85.620101,41.945811]},n3435:{id:"n3435",loc:[-85.620081,41.945937]},n3436:{id:"n3436",loc:[-85.619899,41.943718]},n3437:{id:"n3437",loc:[-85.619969,41.943211]},n3438:{id:"n3438",loc:[-85.619894,41.943292]},n3439:{id:"n3439",loc:[-85.620047,41.944738]},n344:{id:"n344",loc:[-85.633665,41.943441]},n3440:{id:"n3440",loc:[-85.620226,41.946088]},n3441:{id:"n3441",loc:[-85.620225,41.945864]},n3442:{id:"n3442",loc:[-85.620518,41.945863]},n3443:{id:"n3443",loc:[-85.620519,41.945944]},n3444:{id:"n3444",loc:[-85.620388,41.945944]},n3445:{id:"n3445",loc:[-85.620389,41.946088]},n3446:{id:"n3446",loc:[-85.618405,41.946566]},n3447:{id:"n3447",loc:[-85.619156,41.946562]},n3448:{id:"n3448",loc:[-85.619154,41.946319]},n3449:{id:"n3449",loc:[-85.618736,41.946322]},n345:{id:"n345",loc:[-85.633162,41.942947]},n3450:{id:"n3450",loc:[-85.618733,41.94612]},n3451:{id:"n3451",loc:[-85.619317,41.946116]},n3452:{id:"n3452",loc:[-85.619316,41.946023]},n3453:{id:"n3453",loc:[-85.619622,41.946021]},n3454:{id:"n3454",loc:[-85.619624,41.946171]},n3455:{id:"n3455",loc:[-85.61977,41.94617]},n3456:{id:"n3456",loc:[-85.619769,41.94602]},n3457:{id:"n3457",loc:[-85.619732,41.94602]},n3458:{id:"n3458",loc:[-85.619731,41.945856]},n3459:{id:"n3459",loc:[-85.619617,41.945857]},n346:{id:"n346",loc:[-85.633598,41.943083]},n3460:{id:"n3460",loc:[-85.619616,41.945776]},n3461:{id:"n3461",loc:[-85.619447,41.945777]},n3462:{id:"n3462",loc:[-85.619415,41.945778]},n3463:{id:"n3463",loc:[-85.618378,41.945788]},n3464:{id:"n3464",loc:[-85.618384,41.946132]},n3465:{id:"n3465",loc:[-85.618503,41.94613]},n3466:{id:"n3466",loc:[-85.618506,41.946319]},n3467:{id:"n3467",loc:[-85.6184,41.94632]},n3468:{id:"n3468",loc:[-85.618248,41.946416]},n3469:{id:"n3469",loc:[-85.618247,41.946319]},n347:{id:"n347",loc:[-85.63343,41.943179]},n3470:{id:"n3470",loc:[-85.618039,41.946321]},n3471:{id:"n3471",loc:[-85.61804,41.946418]},n3472:{id:"n3472",loc:[-85.620118,41.951895]},n3473:{id:"n3473",loc:[-85.617075,41.95469]},n3474:{id:"n3474",loc:[-85.620107,41.952113]},n3475:{id:"n3475",loc:[-85.620091,41.95232]},n3476:{id:"n3476",loc:[-85.620047,41.952505]},n3477:{id:"n3477",loc:[-85.61998,41.952715]},n3478:{id:"n3478",loc:[-85.619861,41.952986]},n3479:{id:"n3479",loc:[-85.619622,41.953365]},n348:{id:"n348",loc:[-85.633669,41.94341]},n3480:{id:"n3480",loc:[-85.619441,41.953567]},n3481:{id:"n3481",loc:[-85.619259,41.953741]},n3482:{id:"n3482",loc:[-85.618835,41.954056]},n3483:{id:"n3483",loc:[-85.618602,41.954194]},n3484:{id:"n3484",loc:[-85.618305,41.954347]},n3485:{id:"n3485",loc:[-85.618006,41.954466]},n3486:{id:"n3486",loc:[-85.617611,41.954587]},n3487:{id:"n3487",loc:[-85.615094,41.943412]},n3488:{id:"n3488",loc:[-85.619337,41.943025]},n3489:{id:"n3489",loc:[-85.610477,41.945527]},n349:{id:"n349",loc:[-85.633566,41.943466]},n3490:{id:"n3490",loc:[-85.610477,41.943718]},n3491:{id:"n3491",loc:[-85.619804,41.942976]},n3492:{id:"n3492",loc:[-85.61921,41.942672]},n3493:{id:"n3493",loc:[-85.619862,41.942836]},n3494:{id:"n3494",loc:[-85.616326,41.942769]},n3495:{id:"n3495",loc:[-85.617953,41.942917]},n3496:{id:"n3496",loc:[-85.61972,41.942728]},n3497:{id:"n3497",loc:[-85.61944,41.942784]},n3498:{id:"n3498",loc:[-85.615323,41.942841]},n3499:{id:"n3499",loc:[-85.612923,41.943718]},n35:{id:"n35",loc:[-85.637928,41.944249]},n350:{id:"n350",loc:[-85.633031,41.942986]},n3500:{id:"n3500",loc:[-85.61958,41.942756]},n3501:{id:"n3501",loc:[-85.619643,41.942647],tags:{leisure:"fishing"}},n3502:{id:"n3502",loc:[-85.619935,41.942962]},n3503:{id:"n3503",loc:[-85.629677,41.954687]},n3504:{id:"n3504",loc:[-85.629083,41.953722]},n3505:{id:"n3505",loc:[-85.621907,41.952067]},n3506:{id:"n3506",loc:[-85.621788,41.952058]},n3507:{id:"n3507",loc:[-85.629665,41.953718]},n3508:{id:"n3508",loc:[-85.624454,41.954707]},n3509:{id:"n3509",loc:[-85.634609,41.954585]},n351:{id:"n351",loc:[-85.633238,41.94283]},n3510:{id:"n3510",loc:[-85.634595,41.953772]},n3511:{id:"n3511",loc:[-85.633425,41.953783]},n3512:{id:"n3512",loc:[-85.633439,41.954596]},n3517:{id:"n3517",loc:[-85.621789,41.952179]},n3518:{id:"n3518",loc:[-85.624105,41.954704]},n3519:{id:"n3519",loc:[-85.623306,41.954542]},n352:{id:"n352",loc:[-85.633173,41.943556]},n3520:{id:"n3520",loc:[-85.623123,41.954502]},n3521:{id:"n3521",loc:[-85.622965,41.954473]},n3522:{id:"n3522",loc:[-85.622822,41.954455]},n3523:{id:"n3523",loc:[-85.62269,41.954448]},n3524:{id:"n3524",loc:[-85.622388,41.954467]},n3525:{id:"n3525",loc:[-85.62403,41.954895]},n3526:{id:"n3526",loc:[-85.623579,41.954855]},n3527:{id:"n3527",loc:[-85.623836,41.954951]},n3528:{id:"n3528",loc:[-85.622473,41.954592]},n3529:{id:"n3529",loc:[-85.622753,41.95458]},n353:{id:"n353",loc:[-85.633127,41.943552]},n3530:{id:"n3530",loc:[-85.62404,41.955078]},n3531:{id:"n3531",loc:[-85.624126,41.954999]},n3532:{id:"n3532",loc:[-85.623171,41.954687]},n3533:{id:"n3533",loc:[-85.624276,41.955206]},n3534:{id:"n3534",loc:[-85.62491,41.952801]},n3535:{id:"n3535",loc:[-85.625186,41.952756]},n3536:{id:"n3536",loc:[-85.625552,41.952792]},n3537:{id:"n3537",loc:[-85.626001,41.952948]},n3538:{id:"n3538",loc:[-85.626528,41.952984]},n3539:{id:"n3539",loc:[-85.626942,41.952886]},n354:{id:"n354",loc:[-85.632745,41.943222]},n3540:{id:"n3540",loc:[-85.627092,41.952685]},n3541:{id:"n3541",loc:[-85.627212,41.95244]},n3542:{id:"n3542",loc:[-85.627158,41.952226]},n3543:{id:"n3543",loc:[-85.627002,41.951972]},n3544:{id:"n3544",loc:[-85.626822,41.951838]},n3545:{id:"n3545",loc:[-85.626528,41.951807]},n3546:{id:"n3546",loc:[-85.625653,41.951852]},n3547:{id:"n3547",loc:[-85.625348,41.951834]},n3548:{id:"n3548",loc:[-85.625114,41.951767]},n3549:{id:"n3549",loc:[-85.620627,41.954682]},n355:{id:"n355",loc:[-85.632756,41.943199]},n3550:{id:"n3550",loc:[-85.622758,41.951884]},n3551:{id:"n3551",loc:[-85.618135,41.954734]},n3552:{id:"n3552",loc:[-85.620229,41.95472]},n3553:{id:"n3553",loc:[-85.624491,41.955573]},n3554:{id:"n3554",loc:[-85.621792,41.958314]},n3555:{id:"n3555",loc:[-85.623395,41.960001]},n3556:{id:"n3556",loc:[-85.620461,41.956212]},n3557:{id:"n3557",loc:[-85.62109,41.956766]},n3558:{id:"n3558",loc:[-85.620246,41.956224]},n3559:{id:"n3559",loc:[-85.625017,41.956068]},n356:{id:"n356",loc:[-85.632855,41.943147]},n3560:{id:"n3560",loc:[-85.622795,41.959702]},n3561:{id:"n3561",loc:[-85.621573,41.958457]},n3562:{id:"n3562",loc:[-85.619631,41.9573]},n3563:{id:"n3563",loc:[-85.62095,41.956311]},n3564:{id:"n3564",loc:[-85.619694,41.957408]},n3565:{id:"n3565",loc:[-85.621079,41.957751]},n3566:{id:"n3566",loc:[-85.622426,41.961142]},n3567:{id:"n3567",loc:[-85.623251,41.960484]},n3568:{id:"n3568",loc:[-85.619084,41.956291]},n3569:{id:"n3569",loc:[-85.622227,41.959303]},n357:{id:"n357",loc:[-85.632888,41.94315]},n3570:{id:"n3570",loc:[-85.620976,41.959104]},n3571:{id:"n3571",loc:[-85.621208,41.95653]},n3572:{id:"n3572",loc:[-85.623531,41.95951]},n3573:{id:"n3573",loc:[-85.623556,41.957935]},n3574:{id:"n3574",loc:[-85.623037,41.95746]},n3575:{id:"n3575",loc:[-85.621175,41.956427]},n3576:{id:"n3576",loc:[-85.622651,41.960109]},n3577:{id:"n3577",loc:[-85.621803,41.960747]},n3578:{id:"n3578",loc:[-85.620791,41.961874]},n3579:{id:"n3579",loc:[-85.625295,41.956786]},n358:{id:"n358",loc:[-85.633232,41.943547]},n3580:{id:"n3580",loc:[-85.619662,41.956894]},n3581:{id:"n3581",loc:[-85.622442,41.958708]},n3582:{id:"n3582",loc:[-85.621744,41.955864]},n3583:{id:"n3583",loc:[-85.621336,41.959212]},n3584:{id:"n3584",loc:[-85.622801,41.957304]},n3585:{id:"n3585",loc:[-85.619973,41.957433]},n3586:{id:"n3586",loc:[-85.619556,41.955717]},n3587:{id:"n3587",loc:[-85.622978,41.958601]},n3588:{id:"n3588",loc:[-85.625396,41.956264]},n3589:{id:"n3589",loc:[-85.623525,41.958034]},n359:{id:"n359",loc:[-85.633302,41.94351]},n3590:{id:"n3590",loc:[-85.623299,41.959631]},n3591:{id:"n3591",loc:[-85.622678,41.959873]},n3592:{id:"n3592",loc:[-85.625553,41.956179]},n3593:{id:"n3593",loc:[-85.623557,41.959231]},n3594:{id:"n3594",loc:[-85.622843,41.957373]},n3595:{id:"n3595",loc:[-85.619378,41.955677]},n3596:{id:"n3596",loc:[-85.620092,41.955425]},n3597:{id:"n3597",loc:[-85.622666,41.96044]},n3598:{id:"n3598",loc:[-85.621996,41.960256]},n3599:{id:"n3599",loc:[-85.623273,41.959997]},n36:{id:"n36",loc:[-85.637894,41.945551]},n360:{id:"n360",loc:[-85.633442,41.943794],tags:{highway:"crossing"}},n3600:{id:"n3600",loc:[-85.62477,41.95689]},n3601:{id:"n3601",loc:[-85.621641,41.955015]},n3602:{id:"n3602",loc:[-85.622495,41.960392]},n3603:{id:"n3603",loc:[-85.61918,41.955565]},n3604:{id:"n3604",loc:[-85.620017,41.955505]},n3605:{id:"n3605",loc:[-85.621739,41.956315]},n3606:{id:"n3606",loc:[-85.622957,41.959837]},n3607:{id:"n3607",loc:[-85.620912,41.960919]},n3608:{id:"n3608",loc:[-85.625231,41.956235]},n3609:{id:"n3609",loc:[-85.620976,41.961868]},n361:{id:"n361",loc:[-85.633381,41.94383]},n3610:{id:"n3610",loc:[-85.620956,41.958908]},n3611:{id:"n3611",loc:[-85.619035,41.956139]},n3612:{id:"n3612",loc:[-85.623643,41.958669]},n3613:{id:"n3613",loc:[-85.61949,41.956539]},n3614:{id:"n3614",loc:[-85.621927,41.958242]},n3615:{id:"n3615",loc:[-85.620826,41.955721]},n3616:{id:"n3616",loc:[-85.621202,41.961321]},n3617:{id:"n3617",loc:[-85.624877,41.95594]},n3618:{id:"n3618",loc:[-85.62065,41.958369]},n3619:{id:"n3619",loc:[-85.621524,41.956279]},n362:{id:"n362",loc:[-85.632977,41.944053]},n3620:{id:"n3620",loc:[-85.624662,41.955932]},n3621:{id:"n3621",loc:[-85.623048,41.958509]},n3622:{id:"n3622",loc:[-85.62111,41.95754]},n3623:{id:"n3623",loc:[-85.621508,41.954847]},n3624:{id:"n3624",loc:[-85.620655,41.958601]},n3625:{id:"n3625",loc:[-85.62154,41.954971]},n3626:{id:"n3626",loc:[-85.621691,41.955521]},n3627:{id:"n3627",loc:[-85.62154,41.954739]},n3628:{id:"n3628",loc:[-85.621996,41.959913]},n3629:{id:"n3629",loc:[-85.622286,41.960699]},n363:{id:"n363",loc:[-85.632915,41.943981],tags:{crossing:"marked",highway:"crossing"}},n3630:{id:"n3630",loc:[-85.622844,41.9572]},n3631:{id:"n3631",loc:[-85.620252,41.955446]},n3632:{id:"n3632",loc:[-85.623434,41.957528]},n3633:{id:"n3633",loc:[-85.623429,41.956858]},n3634:{id:"n3634",loc:[-85.622957,41.957137]},n3635:{id:"n3635",loc:[-85.622554,41.959027]},n3636:{id:"n3636",loc:[-85.623289,41.958314]},n3637:{id:"n3637",loc:[-85.622977,41.960855]},n3638:{id:"n3638",loc:[-85.624008,41.956953]},n3639:{id:"n3639",loc:[-85.621278,41.960855]},n364:{id:"n364",loc:[-85.632724,41.943969],tags:{crossing:"marked",highway:"crossing"}},n3640:{id:"n3640",loc:[-85.623128,41.956993]},n3641:{id:"n3641",loc:[-85.622452,41.959183]},n3642:{id:"n3642",loc:[-85.621095,41.961082]},n3643:{id:"n3643",loc:[-85.622011,41.960544]},n3644:{id:"n3644",loc:[-85.621637,41.955385]},n3645:{id:"n3645",loc:[-85.620999,41.959271]},n3646:{id:"n3646",loc:[-85.620044,41.956347]},n3647:{id:"n3647",loc:[-85.621936,41.959682]},n3648:{id:"n3648",loc:[-85.623761,41.95685]},n3649:{id:"n3649",loc:[-85.621239,41.959343]},n365:{id:"n365",loc:[-85.632621,41.944034]},n3650:{id:"n3650",loc:[-85.621073,41.956012]},n3651:{id:"n3651",loc:[-85.621271,41.956184]},n3652:{id:"n3652",loc:[-85.623444,41.95778]},n3653:{id:"n3653",loc:[-85.62125,41.96186]},n3654:{id:"n3654",loc:[-85.62169,41.961059]},n3655:{id:"n3655",loc:[-85.620012,41.955637]},n3656:{id:"n3656",loc:[-85.621058,41.9573]},n3657:{id:"n3657",loc:[-85.621138,41.957663]},n3658:{id:"n3658",loc:[-85.620773,41.957895]},n3659:{id:"n3659",loc:[-85.62007,41.957157]},n366:{id:"n366",loc:[-85.632684,41.944109],tags:{crossing:"marked",highway:"crossing"}},n3660:{id:"n3660",loc:[-85.624534,41.955844]},n3661:{id:"n3661",loc:[-85.621932,41.960807]},n3662:{id:"n3662",loc:[-85.623358,41.958138]},n3663:{id:"n3663",loc:[-85.620456,41.955514]},n3664:{id:"n3664",loc:[-85.623504,41.957607]},n3665:{id:"n3665",loc:[-85.621444,41.960751]},n3666:{id:"n3666",loc:[-85.623492,41.960213]},n3667:{id:"n3667",loc:[-85.621669,41.954655]},n3668:{id:"n3668",loc:[-85.623106,41.958685]},n3669:{id:"n3669",loc:[-85.620922,41.957867]},n367:{id:"n367",loc:[-85.632738,41.944172]},n3670:{id:"n3670",loc:[-85.620092,41.957296]},n3671:{id:"n3671",loc:[-85.621669,41.955222]},n3672:{id:"n3672",loc:[-85.621614,41.960967]},n3673:{id:"n3673",loc:[-85.621691,41.955732]},n3674:{id:"n3674",loc:[-85.619207,41.956419]},n3675:{id:"n3675",loc:[-85.621116,41.956603]},n3676:{id:"n3676",loc:[-85.623311,41.956929]},n3677:{id:"n3677",loc:[-85.625671,41.956499]},n3678:{id:"n3678",loc:[-85.623525,41.956738]},n3679:{id:"n3679",loc:[-85.625381,41.956634]},n368:{id:"n368",loc:[-85.63287,41.944135],tags:{crossing:"marked",highway:"crossing"}},n3680:{id:"n3680",loc:[-85.620096,41.95677]},n3681:{id:"n3681",loc:[-85.623803,41.958745]},n3682:{id:"n3682",loc:[-85.623498,41.958457]},n3683:{id:"n3683",loc:[-85.624223,41.957009]},n3684:{id:"n3684",loc:[-85.620026,41.956946]},n3685:{id:"n3685",loc:[-85.623005,41.960124]},n3686:{id:"n3686",loc:[-85.619073,41.955832]},n3687:{id:"n3687",loc:[-85.621744,41.95501]},n3688:{id:"n3688",loc:[-85.620804,41.958781]},n3689:{id:"n3689",loc:[-85.619844,41.957448]},n369:{id:"n369",loc:[-85.63298,41.944076]},n3690:{id:"n3690",loc:[-85.623713,41.958872]},n3691:{id:"n3691",loc:[-85.622329,41.960507]},n3692:{id:"n3692",loc:[-85.620804,41.956244]},n3693:{id:"n3693",loc:[-85.621818,41.955968]},n3694:{id:"n3694",loc:[-85.621405,41.958697]},n3695:{id:"n3695",loc:[-85.620998,41.960996]},n3696:{id:"n3696",loc:[-85.621621,41.960444]},n3697:{id:"n3697",loc:[-85.620941,41.961637]},n3698:{id:"n3698",loc:[-85.622195,41.958333]},n3699:{id:"n3699",loc:[-85.621668,41.961529]},n37:{id:"n37",loc:[-85.637611,41.945383]},n370:{id:"n370",loc:[-85.633191,41.944471]},n3700:{id:"n3700",loc:[-85.621015,41.957049]},n3701:{id:"n3701",loc:[-85.619368,41.955521]},n3702:{id:"n3702",loc:[-85.651578,41.942534]},n3703:{id:"n3703",loc:[-85.651541,41.943847]},n3704:{id:"n3704",loc:[-85.651365,41.944817]},n3705:{id:"n3705",loc:[-85.651076,41.945985]},n3706:{id:"n3706",loc:[-85.650626,41.947213]},n3707:{id:"n3707",loc:[-85.649669,41.949161]},n3708:{id:"n3708",loc:[-85.641802,41.961801]},n3709:{id:"n3709",loc:[-85.623333,41.961987]},n371:{id:"n371",loc:[-85.633132,41.94372]},n3710:{id:"n3710",loc:[-85.620621,41.965658]},n3711:{id:"n3711",loc:[-85.605673,41.965764]},n3712:{id:"n3712",loc:[-85.605664,41.962094]},n3713:{id:"n3713",loc:[-85.583774,41.962178]},n3714:{id:"n3714",loc:[-85.583774,41.961789]},n3715:{id:"n3715",loc:[-85.581303,41.961783]},n3716:{id:"n3716",loc:[-85.581245,41.958394]},n3717:{id:"n3717",loc:[-85.585299,41.955483]},n3718:{id:"n3718",loc:[-85.585588,41.955331]},n3719:{id:"n3719",loc:[-85.586053,41.955163]},n372:{id:"n372",loc:[-85.633011,41.943788]},n3720:{id:"n3720",loc:[-85.58632,41.955076]},n3721:{id:"n3721",loc:[-85.586478,41.955025]},n3722:{id:"n3722",loc:[-85.58692,41.954947]},n3723:{id:"n3723",loc:[-85.587345,41.954913]},n3724:{id:"n3724",loc:[-85.605592,41.954766]},n3725:{id:"n3725",loc:[-85.605303,41.936236]},n3726:{id:"n3726",loc:[-85.606941,41.936117]},n3727:{id:"n3727",loc:[-85.60876,41.935856]},n3728:{id:"n3728",loc:[-85.610092,41.935451]},n3729:{id:"n3729",loc:[-85.610681,41.935247]},n373:{id:"n373",loc:[-85.632854,41.943632]},n3730:{id:"n3730",loc:[-85.611446,41.934955]},n3731:{id:"n3731",loc:[-85.612057,41.934696]},n3732:{id:"n3732",loc:[-85.613256,41.934084]},n3733:{id:"n3733",loc:[-85.613948,41.933682]},n3734:{id:"n3734",loc:[-85.614638,41.933212]},n3735:{id:"n3735",loc:[-85.619801,41.929305]},n3736:{id:"n3736",loc:[-85.619768,41.925548]},n3737:{id:"n3737",loc:[-85.625761,41.925597]},n3738:{id:"n3738",loc:[-85.6263,41.927323]},n3739:{id:"n3739",loc:[-85.633708,41.927402]},n374:{id:"n374",loc:[-85.632974,41.943565]},n3740:{id:"n3740",loc:[-85.633927,41.929109]},n3741:{id:"n3741",loc:[-85.639213,41.929088]},n3742:{id:"n3742",loc:[-85.639204,41.925488]},n3743:{id:"n3743",loc:[-85.651425,41.925406]},n3744:{id:"n3744",loc:[-85.643386,41.941933]},n3745:{id:"n3745",loc:[-85.642776,41.941161]},n3746:{id:"n3746",loc:[-85.637277,41.948812]},n3747:{id:"n3747",loc:[-85.637366,41.94897]},n3748:{id:"n3748",loc:[-85.637329,41.94889]},n3749:{id:"n3749",loc:[-85.629649,41.952596]},n375:{id:"n375",loc:[-85.632741,41.943351]},n3750:{id:"n3750",loc:[-85.630291,41.954684]},n3751:{id:"n3751",loc:[-85.630284,41.953713]},n3752:{id:"n3752",loc:[-85.630269,41.952463]},n3753:{id:"n3753",loc:[-85.633933,41.949896]},n3754:{id:"n3754",loc:[-85.629339,41.941467]},n3755:{id:"n3755",loc:[-85.629857,41.94316]},n3756:{id:"n3756",loc:[-85.629987,41.944025]},n3757:{id:"n3757",loc:[-85.628538,41.948604]},n3758:{id:"n3758",loc:[-85.627415,41.957442]},n3759:{id:"n3759",loc:[-85.627019,41.957369]},n376:{id:"n376",loc:[-85.63251,41.943481]},n3760:{id:"n3760",loc:[-85.62167,41.952179]},n3761:{id:"n3761",loc:[-85.62167,41.952138]},n3762:{id:"n3762",loc:[-85.621562,41.952139]},n3763:{id:"n3763",loc:[-85.621562,41.952058]},n3764:{id:"n3764",loc:[-85.621476,41.952043]},n3765:{id:"n3765",loc:[-85.621477,41.952132]},n3766:{id:"n3766",loc:[-85.621386,41.952132]},n3767:{id:"n3767",loc:[-85.621387,41.95214]},n3768:{id:"n3768",loc:[-85.621262,41.95214]},n3769:{id:"n3769",loc:[-85.621261,41.952038]},n377:{id:"n377",loc:[-85.632706,41.943715]},n3770:{id:"n3770",loc:[-85.621389,41.952038]},n3771:{id:"n3771",loc:[-85.621389,41.952043]},n3772:{id:"n3772",loc:[-85.620898,41.952024]},n3773:{id:"n3773",loc:[-85.620898,41.952085]},n3774:{id:"n3774",loc:[-85.620774,41.952084]},n3775:{id:"n3775",loc:[-85.620774,41.952023]},n3776:{id:"n3776",loc:[-85.620749,41.952036]},n3777:{id:"n3777",loc:[-85.620723,41.952097]},n3778:{id:"n3778",loc:[-85.626158,41.958996]},n3779:{id:"n3779",loc:[-85.626319,41.958686]},n378:{id:"n378",loc:[-85.638683,41.943295]},n3780:{id:"n3780",loc:[-85.626119,41.958629]},n3781:{id:"n3781",loc:[-85.626064,41.958733]},n3782:{id:"n3782",loc:[-85.626155,41.958759]},n3783:{id:"n3783",loc:[-85.626048,41.958965]},n3784:{id:"n3784",loc:[-85.620648,41.952079]},n3785:{id:"n3785",loc:[-85.63826,41.961213]},n3786:{id:"n3786",loc:[-85.638003,41.961614]},n3787:{id:"n3787",loc:[-85.638817,41.961902]},n3788:{id:"n3788",loc:[-85.639073,41.961501]},n3789:{id:"n3789",loc:[-85.620674,41.952018]},n379:{id:"n379",loc:[-85.638684,41.94323]},n3790:{id:"n3790",loc:[-85.62082,41.952106]},n3791:{id:"n3791",loc:[-85.620819,41.952143]},n3792:{id:"n3792",loc:[-85.620778,41.952143]},n3793:{id:"n3793",loc:[-85.620778,41.952106]},n3794:{id:"n3794",loc:[-85.620563,41.952276]},n3795:{id:"n3795",loc:[-85.620543,41.95238]},n3796:{id:"n3796",loc:[-85.620422,41.952367]},n3797:{id:"n3797",loc:[-85.620441,41.952263]},n3798:{id:"n3798",loc:[-85.620561,41.952266]},n3799:{id:"n3799",loc:[-85.620444,41.952254]},n38:{id:"n38",loc:[-85.63879,41.943295]},n380:{id:"n380",loc:[-85.638627,41.94322]},n3800:{id:"n3800",loc:[-85.620773,41.955585]},n3801:{id:"n3801",loc:[-85.621265,41.955989]},n3802:{id:"n3802",loc:[-85.620692,41.954969]},n3803:{id:"n3803",loc:[-85.620691,41.955367]},n3804:{id:"n3804",loc:[-85.620458,41.952178]},n3805:{id:"n3805",loc:[-85.620575,41.95219]},n3806:{id:"n3806",loc:[-85.617609,41.952712]},n3807:{id:"n3807",loc:[-85.617533,41.952801],tags:{entrance:"yes"}},n3808:{id:"n3808",loc:[-85.616816,41.952911]},n3809:{id:"n3809",loc:[-85.616797,41.952901]},n381:{id:"n381",loc:[-85.638624,41.943294]},n3810:{id:"n3810",loc:[-85.616343,41.952694]},n3811:{id:"n3811",loc:[-85.616336,41.952729]},n3812:{id:"n3812",loc:[-85.616343,41.952772]},n3813:{id:"n3813",loc:[-85.628479,41.948649]},n3814:{id:"n3814",loc:[-85.628413,41.948679]},n3815:{id:"n3815",loc:[-85.628336,41.948694]},n3816:{id:"n3816",loc:[-85.62826,41.948694]},n3817:{id:"n3817",loc:[-85.628185,41.948679]},n3818:{id:"n3818",loc:[-85.628103,41.948649]},n3819:{id:"n3819",loc:[-85.627482,41.948395]},n382:{id:"n382",loc:[-85.638437,41.943291]},n3820:{id:"n3820",loc:[-85.619957,41.951168]},n3821:{id:"n3821",loc:[-85.619955,41.952077]},n3822:{id:"n3822",loc:[-85.619843,41.952666]},n3823:{id:"n3823",loc:[-85.619513,41.95324]},n3824:{id:"n3824",loc:[-85.619163,41.953668]},n3825:{id:"n3825",loc:[-85.618813,41.953947]},n3826:{id:"n3826",loc:[-85.618265,41.954252]},n3827:{id:"n3827",loc:[-85.617691,41.954458]},n3828:{id:"n3828",loc:[-85.616978,41.95459]},n3829:{id:"n3829",loc:[-85.615408,41.954628]},n383:{id:"n383",loc:[-85.63844,41.943209]},n3830:{id:"n3830",loc:[-85.615374,41.951076]},n3831:{id:"n3831",loc:[-85.61932,41.947564]},n3832:{id:"n3832",loc:[-85.610553,41.94755]},n3833:{id:"n3833",loc:[-85.610572,41.951065]},n3834:{id:"n3834",loc:[-85.617548,41.94757]},n3835:{id:"n3835",loc:[-85.619842,41.947939]},n3836:{id:"n3836",loc:[-85.619874,41.950905]},n3837:{id:"n3837",loc:[-85.619695,41.950911]},n3838:{id:"n3838",loc:[-85.617591,41.951078]},n3839:{id:"n3839",loc:[-85.619551,41.951065]},n384:{id:"n384",loc:[-85.632616,41.944021]},n3840:{id:"n3840",loc:[-85.626813,41.947337]},n3841:{id:"n3841",loc:[-85.616371,41.952814]},n3842:{id:"n3842",loc:[-85.617205,41.951308]},n3843:{id:"n3843",loc:[-85.616795,41.950953]},n3844:{id:"n3844",loc:[-85.617441,41.950889]},n3845:{id:"n3845",loc:[-85.619155,41.949377]},n3846:{id:"n3846",loc:[-85.618556,41.949377]},n3847:{id:"n3847",loc:[-85.618557,41.948372]},n3848:{id:"n3848",loc:[-85.619156,41.948372]},n3849:{id:"n3849",loc:[-85.61927,41.949796]},n385:{id:"n385",loc:[-85.632319,41.944172]},n3850:{id:"n3850",loc:[-85.61926,41.948344]},n3851:{id:"n3851",loc:[-85.619219,41.948264]},n3852:{id:"n3852",loc:[-85.619147,41.948196]},n3853:{id:"n3853",loc:[-85.619049,41.948144]},n3854:{id:"n3854",loc:[-85.618942,41.948116]},n3855:{id:"n3855",loc:[-85.618822,41.948109]},n3856:{id:"n3856",loc:[-85.618699,41.94813]},n3857:{id:"n3857",loc:[-85.618937,41.951943]},n3858:{id:"n3858",loc:[-85.616762,41.952222]},n3859:{id:"n3859",loc:[-85.616799,41.95472]},n386:{id:"n386",loc:[-85.63221,41.944066]},n3860:{id:"n3860",loc:[-85.616458,41.954735]},n3861:{id:"n3861",loc:[-85.61763,41.951515]},n3862:{id:"n3862",loc:[-85.617735,41.951572]},n3863:{id:"n3863",loc:[-85.61929,41.951573]},n3864:{id:"n3864",loc:[-85.617134,41.951348]},n3865:{id:"n3865",loc:[-85.616598,41.95192]},n3866:{id:"n3866",loc:[-85.616557,41.951997]},n3867:{id:"n3867",loc:[-85.61658,41.952093]},n3868:{id:"n3868",loc:[-85.616636,41.952145]},n3869:{id:"n3869",loc:[-85.616918,41.952276]},n387:{id:"n387",loc:[-85.632524,41.943912]},n3870:{id:"n3870",loc:[-85.617098,41.952235]},n3871:{id:"n3871",loc:[-85.61892,41.951467]},n3872:{id:"n3872",loc:[-85.618035,41.951473]},n3873:{id:"n3873",loc:[-85.618036,41.951572]},n3874:{id:"n3874",loc:[-85.61892,41.951573]},n3875:{id:"n3875",loc:[-85.618919,41.951957]},n3876:{id:"n3876",loc:[-85.619457,41.952237]},n3877:{id:"n3877",loc:[-85.618178,41.953618]},n3878:{id:"n3878",loc:[-85.617658,41.953366]},n3879:{id:"n3879",loc:[-85.617987,41.953024]},n388:{id:"n388",loc:[-85.632268,41.943621]},n3880:{id:"n3880",loc:[-85.618429,41.953248]},n3881:{id:"n3881",loc:[-85.618554,41.953119]},n3882:{id:"n3882",loc:[-85.618077,41.952868]},n3883:{id:"n3883",loc:[-85.618039,41.952886]},n3884:{id:"n3884",loc:[-85.619375,41.952169]},n3885:{id:"n3885",loc:[-85.618137,41.953538]},n3886:{id:"n3886",loc:[-85.61799,41.953555]},n3887:{id:"n3887",loc:[-85.617729,41.953423]},n3888:{id:"n3888",loc:[-85.618101,41.953029]},n3889:{id:"n3889",loc:[-85.618516,41.953119]},n389:{id:"n389",loc:[-85.631951,41.943773]},n3890:{id:"n3890",loc:[-85.619132,41.952042]},n3891:{id:"n3891",loc:[-85.618235,41.952981]},n3892:{id:"n3892",loc:[-85.618485,41.952425]},n3893:{id:"n3893",loc:[-85.618676,41.952519]},n3894:{id:"n3894",loc:[-85.618942,41.952648]},n3895:{id:"n3895",loc:[-85.618287,41.953122]},n3896:{id:"n3896",loc:[-85.617914,41.953516]},n3897:{id:"n3897",loc:[-85.617836,41.953573]},n3898:{id:"n3898",loc:[-85.616477,41.95289]},n3899:{id:"n3899",loc:[-85.618441,41.953201]},n39:{id:"n39",loc:[-85.619931,41.951013]},n390:{id:"n390",loc:[-85.631981,41.943654]},n3900:{id:"n3900",loc:[-85.617537,41.953335]},n3901:{id:"n3901",loc:[-85.617221,41.953166]},n3902:{id:"n3902",loc:[-85.617253,41.953135]},n3903:{id:"n3903",loc:[-85.617211,41.953114]},n3904:{id:"n3904",loc:[-85.617197,41.95313]},n3905:{id:"n3905",loc:[-85.616802,41.952925]},n3906:{id:"n3906",loc:[-85.616771,41.952928]},n3907:{id:"n3907",loc:[-85.616493,41.952785]},n3908:{id:"n3908",loc:[-85.616823,41.952426]},n3909:{id:"n3909",loc:[-85.617191,41.952616]},n391:{id:"n391",loc:[-85.631886,41.943699]},n3910:{id:"n3910",loc:[-85.61724,41.952559]},n3911:{id:"n3911",loc:[-85.61721,41.952542]},n3912:{id:"n3912",loc:[-85.617395,41.952351]},n3913:{id:"n3913",loc:[-85.617426,41.952368]},n3914:{id:"n3914",loc:[-85.617483,41.952309]},n3915:{id:"n3915",loc:[-85.617332,41.952229]},n3916:{id:"n3916",loc:[-85.617451,41.952102]},n3917:{id:"n3917",loc:[-85.617477,41.952115]},n3918:{id:"n3918",loc:[-85.617658,41.951923]},n3919:{id:"n3919",loc:[-85.617634,41.95191]},n392:{id:"n392",loc:[-85.631807,41.943606]},n3920:{id:"n3920",loc:[-85.617747,41.951786]},n3921:{id:"n3921",loc:[-85.618268,41.952056]},n3922:{id:"n3922",loc:[-85.618211,41.952122]},n3923:{id:"n3923",loc:[-85.618386,41.95222]},n3924:{id:"n3924",loc:[-85.618098,41.952527]},n3925:{id:"n3925",loc:[-85.617916,41.95243]},n3926:{id:"n3926",loc:[-85.617854,41.952498]},n3927:{id:"n3927",loc:[-85.617769,41.952453]},n3928:{id:"n3928",loc:[-85.617476,41.952773]},n3929:{id:"n3929",loc:[-85.617876,41.952973]},n393:{id:"n393",loc:[-85.631902,41.943561]},n3930:{id:"n3930",loc:[-85.617174,41.953638]},n3931:{id:"n3931",loc:[-85.618016,41.953578]},n3932:{id:"n3932",loc:[-85.618107,41.953628]},n3933:{id:"n3933",loc:[-85.618067,41.954268]},n3934:{id:"n3934",loc:[-85.617864,41.954263]},n3935:{id:"n3935",loc:[-85.61762,41.954205]},n3936:{id:"n3936",loc:[-85.617437,41.954103]},n3937:{id:"n3937",loc:[-85.617294,41.953978]},n3938:{id:"n3938",loc:[-85.617217,41.95384]},n3939:{id:"n3939",loc:[-85.616814,41.954327]},n394:{id:"n394",loc:[-85.63236,41.943543]},n3940:{id:"n3940",loc:[-85.616778,41.95381]},n3941:{id:"n3941",loc:[-85.616585,41.953707]},n3942:{id:"n3942",loc:[-85.616458,41.954318]},n3943:{id:"n3943",loc:[-85.616643,41.954345]},n3944:{id:"n3944",loc:[-85.618133,41.951412]},n3945:{id:"n3945",loc:[-85.618326,41.951411]},n3946:{id:"n3946",loc:[-85.618503,41.95141]},n3947:{id:"n3947",loc:[-85.618681,41.951409]},n3948:{id:"n3948",loc:[-85.618868,41.951408]},n3949:{id:"n3949",loc:[-85.617047,41.95136]},n395:{id:"n395",loc:[-85.633839,41.944082]},n3950:{id:"n3950",loc:[-85.616502,41.951946]},n3951:{id:"n3951",loc:[-85.616497,41.952072]},n3952:{id:"n3952",loc:[-85.616565,41.952165]},n3953:{id:"n3953",loc:[-85.616663,41.952218]},n3954:{id:"n3954",loc:[-85.616733,41.952255]},n3955:{id:"n3955",loc:[-85.617238,41.952512],tags:{entrance:"yes"}},n3956:{id:"n3956",loc:[-85.617043,41.952406]},n3957:{id:"n3957",loc:[-85.617691,41.951711]},n3958:{id:"n3958",loc:[-85.617773,41.951679]},n3959:{id:"n3959",loc:[-85.619085,41.951681]},n396:{id:"n396",loc:[-85.63376,41.944097]},n3960:{id:"n3960",loc:[-85.617943,41.952895]},n3961:{id:"n3961",loc:[-85.618039,41.952938]},n3962:{id:"n3962",loc:[-85.61763,41.95336]},n3963:{id:"n3963",loc:[-85.617554,41.95344]},n3964:{id:"n3964",loc:[-85.617381,41.952366],tags:{entrance:"yes"}},n3965:{id:"n3965",loc:[-85.617184,41.952254]},n3966:{id:"n3966",loc:[-85.617208,41.952496]},n3967:{id:"n3967",loc:[-85.617124,41.952581],tags:{entrance:"yes"}},n3968:{id:"n3968",loc:[-85.618094,41.952735]},n3969:{id:"n3969",loc:[-85.617702,41.952525],tags:{entrance:"yes"}},n397:{id:"n397",loc:[-85.63361,41.943957]},n3970:{id:"n3970",loc:[-85.617554,41.952686],tags:{entrance:"yes"}},n3971:{id:"n3971",loc:[-85.617959,41.952878]},n3972:{id:"n3972",loc:[-85.616367,41.952655]},n3973:{id:"n3973",loc:[-85.616416,41.952851]},n3974:{id:"n3974",loc:[-85.619777,41.951075]},n3975:{id:"n3975",loc:[-85.618611,41.94817]},n3976:{id:"n3976",loc:[-85.618538,41.948229]},n3977:{id:"n3977",loc:[-85.617421,41.947559]},n3978:{id:"n3978",loc:[-85.617395,41.951039]},n3979:{id:"n3979",loc:[-85.618488,41.94829]},n398:{id:"n398",loc:[-85.633309,41.943886]},n3980:{id:"n3980",loc:[-85.610238,41.954774]},n3981:{id:"n3981",loc:[-85.617449,41.950756]},n3982:{id:"n3982",loc:[-85.617288,41.951286]},n3983:{id:"n3983",loc:[-85.61745,41.950197]},n3984:{id:"n3984",loc:[-85.617436,41.948908]},n3985:{id:"n3985",loc:[-85.615915,41.953804]},n3986:{id:"n3986",loc:[-85.615953,41.953968]},n3987:{id:"n3987",loc:[-85.616031,41.954085]},n3988:{id:"n3988",loc:[-85.616135,41.954181]},n3989:{id:"n3989",loc:[-85.616273,41.954263]},n399:{id:"n399",loc:[-85.633226,41.943931]},n3990:{id:"n3990",loc:[-85.618327,41.951083]},n3991:{id:"n3991",loc:[-85.618135,41.951084]},n3992:{id:"n3992",loc:[-85.618503,41.951082]},n3993:{id:"n3993",loc:[-85.618682,41.951081]},n3994:{id:"n3994",loc:[-85.618864,41.951082]},n3995:{id:"n3995",loc:[-85.616761,41.950101]},n3996:{id:"n3996",loc:[-85.617317,41.947558]},n3997:{id:"n3997",loc:[-85.617336,41.948883]},n3998:{id:"n3998",loc:[-85.616779,41.949295]},n3999:{id:"n3999",loc:[-85.616754,41.949349]},n4:{id:"n4",loc:[-85.622764,41.950892],tags:{highway:"stop",direction:"forward",stop:"minor"}},n40:{id:"n40",loc:[-85.619841,41.951037]},n400:{id:"n400",loc:[-85.63326,41.943966]},n4000:{id:"n4000",loc:[-85.616761,41.950865]},n4001:{id:"n4001",loc:[-85.616883,41.951041]},n4002:{id:"n4002",loc:[-85.617004,41.951142]},n4003:{id:"n4003",loc:[-85.617062,41.951248]},n4004:{id:"n4004",loc:[-85.616809,41.949273]},n4005:{id:"n4005",loc:[-85.616755,41.949489]},n4006:{id:"n4006",loc:[-85.616759,41.949971]},n4007:{id:"n4007",loc:[-85.616757,41.949702]},n4008:{id:"n4008",loc:[-85.618456,41.94836]},n4009:{id:"n4009",loc:[-85.618447,41.948428]},n401:{id:"n401",loc:[-85.63324,41.943976]},n4010:{id:"n4010",loc:[-85.618437,41.949322]},n4011:{id:"n4011",loc:[-85.618447,41.949418]},n4012:{id:"n4012",loc:[-85.618478,41.949491]},n4013:{id:"n4013",loc:[-85.618535,41.949559]},n4014:{id:"n4014",loc:[-85.618623,41.94962]},n4015:{id:"n4015",loc:[-85.618721,41.94966]},n4016:{id:"n4016",loc:[-85.618838,41.949674]},n4017:{id:"n4017",loc:[-85.618967,41.949667]},n4018:{id:"n4018",loc:[-85.619065,41.949632]},n4019:{id:"n4019",loc:[-85.61915,41.949578]},n402:{id:"n402",loc:[-85.63327,41.944006]},n4020:{id:"n4020",loc:[-85.619216,41.949507]},n4021:{id:"n4021",loc:[-85.61927,41.949399]},n4022:{id:"n4022",loc:[-85.619074,41.947639]},n4023:{id:"n4023",loc:[-85.619073,41.947793]},n4024:{id:"n4024",loc:[-85.618912,41.947793]},n4025:{id:"n4025",loc:[-85.618911,41.947947]},n4026:{id:"n4026",loc:[-85.618752,41.947947]},n4027:{id:"n4027",loc:[-85.618754,41.947637]},n4028:{id:"n4028",loc:[-85.617896,41.947599]},n4029:{id:"n4029",loc:[-85.617898,41.947811]},n403:{id:"n403",loc:[-85.633278,41.944002]},n4030:{id:"n4030",loc:[-85.617717,41.947812]},n4031:{id:"n4031",loc:[-85.617715,41.9476]},n4032:{id:"n4032",loc:[-85.619003,41.949828]},n4033:{id:"n4033",loc:[-85.619003,41.949882]},n4034:{id:"n4034",loc:[-85.618926,41.949882]},n4035:{id:"n4035",loc:[-85.618926,41.949828]},n4036:{id:"n4036",loc:[-85.618861,41.949809]},n4037:{id:"n4037",loc:[-85.618861,41.949898]},n4038:{id:"n4038",loc:[-85.618688,41.949898]},n4039:{id:"n4039",loc:[-85.618687,41.94981]},n404:{id:"n404",loc:[-85.63331,41.944036]},n4040:{id:"n4040",loc:[-85.618349,41.949473]},n4041:{id:"n4041",loc:[-85.618287,41.949473]},n4042:{id:"n4042",loc:[-85.618287,41.94942]},n4043:{id:"n4043",loc:[-85.618348,41.949419]},n4044:{id:"n4044",loc:[-85.62316,41.951604]},n4045:{id:"n4045",loc:[-85.623026,41.951605]},n4046:{id:"n4046",loc:[-85.623023,41.951466]},n4047:{id:"n4047",loc:[-85.623134,41.951465]},n4048:{id:"n4048",loc:[-85.623136,41.951539]},n4049:{id:"n4049",loc:[-85.623159,41.951539]},n405:{id:"n405",loc:[-85.633348,41.944015]},n4050:{id:"n4050",loc:[-85.623025,41.95155]},n4051:{id:"n4051",loc:[-85.622955,41.951551]},n4052:{id:"n4052",loc:[-85.622953,41.951507]},n4053:{id:"n4053",loc:[-85.623024,41.951506]},n4054:{id:"n4054",loc:[-85.623318,41.951242]},n4055:{id:"n4055",loc:[-85.623175,41.951241]},n4056:{id:"n4056",loc:[-85.623176,41.951153]},n4057:{id:"n4057",loc:[-85.623319,41.951154]},n4058:{id:"n4058",loc:[-85.623077,41.951191]},n4059:{id:"n4059",loc:[-85.622973,41.951191]},n406:{id:"n406",loc:[-85.63338,41.944048]},n4060:{id:"n4060",loc:[-85.622972,41.951349]},n4061:{id:"n4061",loc:[-85.623059,41.95135]},n4062:{id:"n4062",loc:[-85.62306,41.951301]},n4063:{id:"n4063",loc:[-85.623077,41.951301]},n4064:{id:"n4064",loc:[-85.623117,41.951405]},n4065:{id:"n4065",loc:[-85.62312,41.951087]},n4066:{id:"n4066",loc:[-85.623118,41.951274]},n4067:{id:"n4067",loc:[-85.62328,41.951275]},n4068:{id:"n4068",loc:[-85.62328,41.951242]},n4069:{id:"n4069",loc:[-85.623179,41.951392]},n407:{id:"n407",loc:[-85.633431,41.94402]},n4070:{id:"n4070",loc:[-85.623141,41.951392]},n4071:{id:"n4071",loc:[-85.623142,41.95136]},n4072:{id:"n4072",loc:[-85.623179,41.951361]},n4073:{id:"n4073",loc:[-85.622565,41.951639]},n4074:{id:"n4074",loc:[-85.622565,41.951741]},n4075:{id:"n4075",loc:[-85.622463,41.95174]},n4076:{id:"n4076",loc:[-85.622463,41.95173]},n4077:{id:"n4077",loc:[-85.622442,41.95173]},n4078:{id:"n4078",loc:[-85.622442,41.951742]},n4079:{id:"n4079",loc:[-85.622361,41.951742]},n408:{id:"n408",loc:[-85.633425,41.944014]},n4080:{id:"n4080",loc:[-85.622362,41.951667]},n4081:{id:"n4081",loc:[-85.622441,41.951667]},n4082:{id:"n4082",loc:[-85.622441,41.951688]},n4083:{id:"n4083",loc:[-85.622461,41.951688]},n4084:{id:"n4084",loc:[-85.622461,41.951638]},n4085:{id:"n4085",loc:[-85.62255,41.951587]},n4086:{id:"n4086",loc:[-85.622449,41.95159]},n4087:{id:"n4087",loc:[-85.622441,41.951448]},n4088:{id:"n4088",loc:[-85.62253,41.951445]},n4089:{id:"n4089",loc:[-85.622532,41.951486]},n409:{id:"n409",loc:[-85.633457,41.943997]},n4090:{id:"n4090",loc:[-85.622555,41.951485]},n4091:{id:"n4091",loc:[-85.622558,41.951531]},n4092:{id:"n4092",loc:[-85.622547,41.951531]},n4093:{id:"n4093",loc:[-85.622451,41.95159]},n4094:{id:"n4094",loc:[-85.622452,41.95161]},n4095:{id:"n4095",loc:[-85.622106,41.951617]},n4096:{id:"n4096",loc:[-85.622133,41.951443]},n4097:{id:"n4097",loc:[-85.622552,41.951379]},n4098:{id:"n4098",loc:[-85.622443,41.95138]},n4099:{id:"n4099",loc:[-85.622441,41.951281]},n41:{id:"n41",loc:[-85.636233,41.942764]},n410:{id:"n410",loc:[-85.633429,41.943969]},n4100:{id:"n4100",loc:[-85.62255,41.95128]},n4101:{id:"n4101",loc:[-85.622541,41.951437]},n4102:{id:"n4102",loc:[-85.622441,41.951438]},n4103:{id:"n4103",loc:[-85.621561,41.951444]},n4104:{id:"n4104",loc:[-85.622302,41.951479]},n4105:{id:"n4105",loc:[-85.6223,41.95152]},n4106:{id:"n4106",loc:[-85.622169,41.951517]},n4107:{id:"n4107",loc:[-85.622171,41.951476]},n4108:{id:"n4108",loc:[-85.622543,41.951228]},n4109:{id:"n4109",loc:[-85.622433,41.951228]},n411:{id:"n411",loc:[-85.633442,41.943962]},n4110:{id:"n4110",loc:[-85.622433,41.951133]},n4111:{id:"n4111",loc:[-85.622543,41.951133]},n4112:{id:"n4112",loc:[-85.622356,41.951256]},n4113:{id:"n4113",loc:[-85.622293,41.951256]},n4114:{id:"n4114",loc:[-85.622292,41.9512]},n4115:{id:"n4115",loc:[-85.622313,41.9512]},n4116:{id:"n4116",loc:[-85.622312,41.951173]},n4117:{id:"n4117",loc:[-85.622364,41.951173]},n4118:{id:"n4118",loc:[-85.622365,41.951231]},n4119:{id:"n4119",loc:[-85.622355,41.951231]},n412:{id:"n412",loc:[-85.633411,41.943932]},n4120:{id:"n4120",loc:[-85.62197,41.951155]},n4121:{id:"n4121",loc:[-85.62197,41.951213]},n4122:{id:"n4122",loc:[-85.621848,41.951213]},n4123:{id:"n4123",loc:[-85.621848,41.951155]},n4124:{id:"n4124",loc:[-85.622193,41.951268]},n4125:{id:"n4125",loc:[-85.622194,41.951305]},n4126:{id:"n4126",loc:[-85.622121,41.951306]},n4127:{id:"n4127",loc:[-85.622121,41.951322]},n4128:{id:"n4128",loc:[-85.621984,41.951324]},n4129:{id:"n4129",loc:[-85.621983,41.951271]},n413:{id:"n413",loc:[-85.633421,41.943926]},n4130:{id:"n4130",loc:[-85.622171,41.9514]},n4131:{id:"n4131",loc:[-85.622148,41.951382]},n4132:{id:"n4132",loc:[-85.6221,41.951414]},n4133:{id:"n4133",loc:[-85.622122,41.951433]},n4134:{id:"n4134",loc:[-85.621782,41.951148]},n4135:{id:"n4135",loc:[-85.621783,41.951219]},n4136:{id:"n4136",loc:[-85.62164,41.951221]},n4137:{id:"n4137",loc:[-85.62164,41.951236]},n4138:{id:"n4138",loc:[-85.621556,41.951237]},n4139:{id:"n4139",loc:[-85.621555,41.95117]},n414:{id:"n414",loc:[-85.633376,41.94388]},n4140:{id:"n4140",loc:[-85.621644,41.951169]},n4141:{id:"n4141",loc:[-85.621643,41.951139]},n4142:{id:"n4142",loc:[-85.621719,41.951138]},n4143:{id:"n4143",loc:[-85.621719,41.951148]},n4144:{id:"n4144",loc:[-85.621409,41.951322]},n4145:{id:"n4145",loc:[-85.621338,41.951322]},n4146:{id:"n4146",loc:[-85.621336,41.95115]},n4147:{id:"n4147",loc:[-85.621521,41.951149]},n4148:{id:"n4148",loc:[-85.621522,41.951228]},n4149:{id:"n4149",loc:[-85.621408,41.951228]},n415:{id:"n415",loc:[-85.633348,41.943895]},n4150:{id:"n4150",loc:[-85.621284,41.951219]},n4151:{id:"n4151",loc:[-85.621153,41.951219]},n4152:{id:"n4152",loc:[-85.621152,41.951152]},n4153:{id:"n4153",loc:[-85.621283,41.951152]},n4154:{id:"n4154",loc:[-85.621159,41.951241]},n4155:{id:"n4155",loc:[-85.62116,41.951301]},n4156:{id:"n4156",loc:[-85.621088,41.951302]},n4157:{id:"n4157",loc:[-85.621088,41.951241]},n4158:{id:"n4158",loc:[-85.621049,41.951158]},n4159:{id:"n4159",loc:[-85.62105,41.951229]},n416:{id:"n416",loc:[-85.633341,41.943888]},n4160:{id:"n4160",loc:[-85.620976,41.951229]},n4161:{id:"n4161",loc:[-85.620977,41.951295]},n4162:{id:"n4162",loc:[-85.620887,41.951296]},n4163:{id:"n4163",loc:[-85.620886,41.951229]},n4164:{id:"n4164",loc:[-85.620862,41.951229]},n4165:{id:"n4165",loc:[-85.620861,41.951159]},n4166:{id:"n4166",loc:[-85.620626,41.951133]},n4167:{id:"n4167",loc:[-85.620626,41.951205]},n4168:{id:"n4168",loc:[-85.620412,41.951206]},n4169:{id:"n4169",loc:[-85.620411,41.951134]},n417:{id:"n417",loc:[-85.633321,41.943898]},n4170:{id:"n4170",loc:[-85.621775,41.951443]},n4171:{id:"n4171",loc:[-85.621777,41.951264]},n4172:{id:"n4172",loc:[-85.621565,41.951654]},n4173:{id:"n4173",loc:[-85.621331,41.951439]},n4174:{id:"n4174",loc:[-85.621031,41.951443]},n4175:{id:"n4175",loc:[-85.621836,41.951724]},n4176:{id:"n4176",loc:[-85.621834,41.951621]},n4177:{id:"n4177",loc:[-85.62197,41.951619]},n4178:{id:"n4178",loc:[-85.621972,41.951722]},n4179:{id:"n4179",loc:[-85.621772,41.951638]},n418:{id:"n418",loc:[-85.633547,41.943896]},n4180:{id:"n4180",loc:[-85.621772,41.951715]},n4181:{id:"n4181",loc:[-85.621699,41.951716]},n4182:{id:"n4182",loc:[-85.6217,41.951722]},n4183:{id:"n4183",loc:[-85.621641,41.951722]},n4184:{id:"n4184",loc:[-85.62164,41.951639]},n4185:{id:"n4185",loc:[-85.621505,41.951655]},n4186:{id:"n4186",loc:[-85.621505,41.951729]},n4187:{id:"n4187",loc:[-85.621389,41.951729]},n4188:{id:"n4188",loc:[-85.62139,41.951654]},n4189:{id:"n4189",loc:[-85.621105,41.951635]},n419:{id:"n419",loc:[-85.633467,41.944075]},n4190:{id:"n4190",loc:[-85.621104,41.951576]},n4191:{id:"n4191",loc:[-85.621168,41.951576]},n4192:{id:"n4192",loc:[-85.621168,41.951595]},n4193:{id:"n4193",loc:[-85.621261,41.951595]},n4194:{id:"n4194",loc:[-85.621261,41.951646]},n4195:{id:"n4195",loc:[-85.621294,41.951646]},n4196:{id:"n4196",loc:[-85.621294,41.951732]},n4197:{id:"n4197",loc:[-85.621251,41.951732]},n4198:{id:"n4198",loc:[-85.621251,41.95174]},n4199:{id:"n4199",loc:[-85.621175,41.951741]},n42:{id:"n42",loc:[-85.635996,41.942727]},n420:{id:"n420",loc:[-85.633578,41.944055]},n4200:{id:"n4200",loc:[-85.621175,41.951651]},n4201:{id:"n4201",loc:[-85.621189,41.951651]},n4202:{id:"n4202",loc:[-85.621189,41.951635]},n4203:{id:"n4203",loc:[-85.620554,41.951641]},n4204:{id:"n4204",loc:[-85.620555,41.951742]},n4205:{id:"n4205",loc:[-85.620719,41.951742]},n4206:{id:"n4206",loc:[-85.620719,41.951731]},n4207:{id:"n4207",loc:[-85.620803,41.95173]},n4208:{id:"n4208",loc:[-85.620803,41.951603]},n4209:{id:"n4209",loc:[-85.62072,41.951603]},n421:{id:"n421",loc:[-85.633462,41.944125]},n4210:{id:"n4210",loc:[-85.620721,41.951641]},n4211:{id:"n4211",loc:[-85.620269,41.953053]},n4212:{id:"n4212",loc:[-85.620229,41.953051]},n4213:{id:"n4213",loc:[-85.620231,41.953013]},n4214:{id:"n4214",loc:[-85.620271,41.953015]},n4215:{id:"n4215",loc:[-85.620215,41.953133]},n4216:{id:"n4216",loc:[-85.62013,41.953134]},n4217:{id:"n4217",loc:[-85.620129,41.953083]},n4218:{id:"n4218",loc:[-85.620214,41.953082]},n4219:{id:"n4219",loc:[-85.62016,41.953272]},n422:{id:"n422",loc:[-85.633372,41.944061]},n4220:{id:"n4220",loc:[-85.620046,41.953273]},n4221:{id:"n4221",loc:[-85.620045,41.953171]},n4222:{id:"n4222",loc:[-85.620088,41.953171]},n4223:{id:"n4223",loc:[-85.620087,41.953162]},n4224:{id:"n4224",loc:[-85.620121,41.953162]},n4225:{id:"n4225",loc:[-85.620121,41.953173]},n4226:{id:"n4226",loc:[-85.620157,41.953173]},n4227:{id:"n4227",loc:[-85.620158,41.953196]},n4228:{id:"n4228",loc:[-85.620189,41.953196]},n4229:{id:"n4229",loc:[-85.620189,41.953246]},n423:{id:"n423",loc:[-85.633509,41.943981]},n4230:{id:"n4230",loc:[-85.62016,41.953246]},n4231:{id:"n4231",loc:[-85.6195,41.954012]},n4232:{id:"n4232",loc:[-85.619438,41.954057]},n4233:{id:"n4233",loc:[-85.619418,41.954043]},n4234:{id:"n4234",loc:[-85.619381,41.954069]},n4235:{id:"n4235",loc:[-85.619399,41.954083]},n4236:{id:"n4236",loc:[-85.619339,41.954126]},n4237:{id:"n4237",loc:[-85.619584,41.954313]},n4238:{id:"n4238",loc:[-85.619743,41.954198]},n4239:{id:"n4239",loc:[-85.619453,41.954727]},n424:{id:"n424",loc:[-85.635421,41.945367]},n4240:{id:"n4240",loc:[-85.619503,41.954581]},n4241:{id:"n4241",loc:[-85.619597,41.954472]},n4242:{id:"n4242",loc:[-85.619862,41.95419]},n4243:{id:"n4243",loc:[-85.619506,41.953907]},n4244:{id:"n4244",loc:[-85.619261,41.9541]},n4245:{id:"n4245",loc:[-85.619246,41.954139]},n4246:{id:"n4246",loc:[-85.619244,41.9542]},n4247:{id:"n4247",loc:[-85.619259,41.954243]},n4248:{id:"n4248",loc:[-85.619285,41.954274]},n4249:{id:"n4249",loc:[-85.619123,41.954381]},n425:{id:"n425",loc:[-85.634425,41.943552]},n4250:{id:"n4250",loc:[-85.619641,41.954607]},n4251:{id:"n4251",loc:[-85.619383,41.954615]},n4252:{id:"n4252",loc:[-85.61896,41.954391]},n4253:{id:"n4253",loc:[-85.619211,41.954178]},n4254:{id:"n4254",loc:[-85.619115,41.954102]},n4255:{id:"n4255",loc:[-85.619519,41.953821]},n4256:{id:"n4256",loc:[-85.619956,41.954156]},n4257:{id:"n4257",loc:[-85.619851,41.954266]},n4258:{id:"n4258",loc:[-85.619779,41.95436]},n4259:{id:"n4259",loc:[-85.620525,41.954364]},n426:{id:"n426",loc:[-85.634248,41.943654]},n4260:{id:"n4260",loc:[-85.620398,41.954365]},n4261:{id:"n4261",loc:[-85.620398,41.954324]},n4262:{id:"n4262",loc:[-85.620525,41.954323]},n4263:{id:"n4263",loc:[-85.620359,41.954588]},n4264:{id:"n4264",loc:[-85.620321,41.954588]},n4265:{id:"n4265",loc:[-85.620321,41.954599]},n4266:{id:"n4266",loc:[-85.620296,41.954599]},n4267:{id:"n4267",loc:[-85.620296,41.954587]},n4268:{id:"n4268",loc:[-85.620262,41.954588]},n4269:{id:"n4269",loc:[-85.620261,41.954516]},n427:{id:"n427",loc:[-85.634177,41.943585]},n4270:{id:"n4270",loc:[-85.620282,41.954516]},n4271:{id:"n4271",loc:[-85.620282,41.954373]},n4272:{id:"n4272",loc:[-85.620378,41.954373]},n4273:{id:"n4273",loc:[-85.620379,41.954486]},n4274:{id:"n4274",loc:[-85.620348,41.954486]},n4275:{id:"n4275",loc:[-85.620348,41.954537]},n4276:{id:"n4276",loc:[-85.620359,41.954537]},n4277:{id:"n4277",loc:[-85.620463,41.95521]},n4278:{id:"n4278",loc:[-85.620409,41.955273]},n4279:{id:"n4279",loc:[-85.620205,41.955177]},n428:{id:"n428",loc:[-85.634354,41.943484]},n4280:{id:"n4280",loc:[-85.620288,41.955079]},n4281:{id:"n4281",loc:[-85.620379,41.955121]},n4282:{id:"n4282",loc:[-85.620349,41.955157]},n4283:{id:"n4283",loc:[-85.620083,41.955101]},n4284:{id:"n4284",loc:[-85.620083,41.954986]},n4285:{id:"n4285",loc:[-85.620016,41.954986]},n4286:{id:"n4286",loc:[-85.620016,41.954999]},n4287:{id:"n4287",loc:[-85.619941,41.954999]},n4288:{id:"n4288",loc:[-85.619941,41.954988]},n4289:{id:"n4289",loc:[-85.619815,41.954988]},n429:{id:"n429",loc:[-85.638577,41.943212]},n4290:{id:"n4290",loc:[-85.619815,41.955075]},n4291:{id:"n4291",loc:[-85.619948,41.955075]},n4292:{id:"n4292",loc:[-85.619948,41.955082]},n4293:{id:"n4293",loc:[-85.620004,41.955082]},n4294:{id:"n4294",loc:[-85.620004,41.955101]},n4295:{id:"n4295",loc:[-85.619293,41.955127]},n4296:{id:"n4296",loc:[-85.619208,41.955124]},n4297:{id:"n4297",loc:[-85.619212,41.955061]},n4298:{id:"n4298",loc:[-85.619297,41.955064]},n4299:{id:"n4299",loc:[-85.619068,41.954936]},n43:{id:"n43",loc:[-85.637047,41.943054]},n430:{id:"n430",loc:[-85.638576,41.943219]},n4300:{id:"n4300",loc:[-85.619003,41.954936]},n4301:{id:"n4301",loc:[-85.619004,41.955003]},n4302:{id:"n4302",loc:[-85.618994,41.955003]},n4303:{id:"n4303",loc:[-85.618994,41.955016]},n4304:{id:"n4304",loc:[-85.618973,41.955016]},n4305:{id:"n4305",loc:[-85.618973,41.955071]},n4306:{id:"n4306",loc:[-85.619061,41.955071]},n4307:{id:"n4307",loc:[-85.61906,41.955024]},n4308:{id:"n4308",loc:[-85.619105,41.955024]},n4309:{id:"n4309",loc:[-85.619105,41.954956]},n431:{id:"n431",loc:[-85.638653,41.943078]},n4310:{id:"n4310",loc:[-85.619068,41.954956]},n4311:{id:"n4311",loc:[-85.618294,41.954596]},n4312:{id:"n4312",loc:[-85.618235,41.954602]},n4313:{id:"n4313",loc:[-85.618222,41.954535]},n4314:{id:"n4314",loc:[-85.618281,41.954529]},n4315:{id:"n4315",loc:[-85.618593,41.954556]},n4316:{id:"n4316",loc:[-85.618551,41.954565]},n4317:{id:"n4317",loc:[-85.618545,41.954552]},n4318:{id:"n4318",loc:[-85.618493,41.954563]},n4319:{id:"n4319",loc:[-85.618449,41.954455]},n432:{id:"n432",loc:[-85.638654,41.943148]},n4320:{id:"n4320",loc:[-85.618544,41.954434]},n4321:{id:"n4321",loc:[-85.622545,41.950775]},n4322:{id:"n4322",loc:[-85.622546,41.950843]},n4323:{id:"n4323",loc:[-85.622503,41.950844]},n4324:{id:"n4324",loc:[-85.622503,41.950853]},n4325:{id:"n4325",loc:[-85.622479,41.950853]},n4326:{id:"n4326",loc:[-85.622478,41.950843]},n4327:{id:"n4327",loc:[-85.622425,41.950843]},n4328:{id:"n4328",loc:[-85.622425,41.950808]},n4329:{id:"n4329",loc:[-85.622366,41.950809]},n433:{id:"n433",loc:[-85.638387,41.943151]},n4330:{id:"n4330",loc:[-85.622364,41.950673]},n4331:{id:"n4331",loc:[-85.622448,41.950673]},n4332:{id:"n4332",loc:[-85.622449,41.950732]},n4333:{id:"n4333",loc:[-85.622479,41.950731]},n4334:{id:"n4334",loc:[-85.622479,41.950775]},n4335:{id:"n4335",loc:[-85.621909,41.950641]},n4336:{id:"n4336",loc:[-85.621864,41.950641]},n4337:{id:"n4337",loc:[-85.621865,41.950567]},n4338:{id:"n4338",loc:[-85.62191,41.950567]},n4339:{id:"n4339",loc:[-85.621787,41.950829]},n434:{id:"n434",loc:[-85.638386,41.94308]},n4340:{id:"n4340",loc:[-85.621786,41.950775]},n4341:{id:"n4341",loc:[-85.621588,41.950776]},n4342:{id:"n4342",loc:[-85.621589,41.950848]},n4343:{id:"n4343",loc:[-85.621737,41.950847]},n4344:{id:"n4344",loc:[-85.621737,41.950829]},n4345:{id:"n4345",loc:[-85.621509,41.950846]},n4346:{id:"n4346",loc:[-85.621399,41.950846]},n4347:{id:"n4347",loc:[-85.621398,41.95073]},n4348:{id:"n4348",loc:[-85.621509,41.95073]},n4349:{id:"n4349",loc:[-85.621217,41.950841]},n435:{id:"n435",loc:[-85.634427,41.943533]},n4350:{id:"n4350",loc:[-85.6211,41.95084]},n4351:{id:"n4351",loc:[-85.6211,41.950777]},n4352:{id:"n4352",loc:[-85.621218,41.950778]},n4353:{id:"n4353",loc:[-85.621055,41.950764]},n4354:{id:"n4354",loc:[-85.621054,41.950826]},n4355:{id:"n4355",loc:[-85.620988,41.950826]},n4356:{id:"n4356",loc:[-85.620988,41.950843]},n4357:{id:"n4357",loc:[-85.620842,41.950843]},n4358:{id:"n4358",loc:[-85.620842,41.950764]},n4359:{id:"n4359",loc:[-85.620825,41.950922]},n436:{id:"n436",loc:[-85.63428,41.943229]},n4360:{id:"n4360",loc:[-85.620824,41.950553]},n4361:{id:"n4361",loc:[-85.620543,41.950771]},n4362:{id:"n4362",loc:[-85.620431,41.950772]},n4363:{id:"n4363",loc:[-85.62043,41.950585]},n4364:{id:"n4364",loc:[-85.620542,41.950585]},n4365:{id:"n4365",loc:[-85.62068,41.950505]},n4366:{id:"n4366",loc:[-85.620681,41.950552]},n4367:{id:"n4367",loc:[-85.620589,41.950553]},n4368:{id:"n4368",loc:[-85.620588,41.950506]},n4369:{id:"n4369",loc:[-85.620539,41.950407]},n437:{id:"n437",loc:[-85.634499,41.943461]},n4370:{id:"n4370",loc:[-85.62054,41.950504]},n4371:{id:"n4371",loc:[-85.620416,41.950504]},n4372:{id:"n4372",loc:[-85.620416,41.950408]},n4373:{id:"n4373",loc:[-85.620742,41.95038]},n4374:{id:"n4374",loc:[-85.620527,41.95038]},n4375:{id:"n4375",loc:[-85.620528,41.950408]},n4376:{id:"n4376",loc:[-85.622449,41.950373]},n4377:{id:"n4377",loc:[-85.622452,41.950397]},n4378:{id:"n4378",loc:[-85.622336,41.950404]},n4379:{id:"n4379",loc:[-85.622333,41.950379]},n438:{id:"n438",loc:[-85.634514,41.943486]},n4380:{id:"n4380",loc:[-85.622263,41.950324]},n4381:{id:"n4381",loc:[-85.622261,41.950256]},n4382:{id:"n4382",loc:[-85.62236,41.950254]},n4383:{id:"n4383",loc:[-85.62236,41.95027]},n4384:{id:"n4384",loc:[-85.622402,41.950281]},n4385:{id:"n4385",loc:[-85.622403,41.9503]},n4386:{id:"n4386",loc:[-85.622439,41.950299]},n4387:{id:"n4387",loc:[-85.62244,41.950334]},n4388:{id:"n4388",loc:[-85.622414,41.950335]},n4389:{id:"n4389",loc:[-85.622414,41.95036]},n439:{id:"n439",loc:[-85.63452,41.943511]},n4390:{id:"n4390",loc:[-85.62231,41.950362]},n4391:{id:"n4391",loc:[-85.622309,41.950323]},n4392:{id:"n4392",loc:[-85.622015,41.950539]},n4393:{id:"n4393",loc:[-85.621909,41.95054]},n4394:{id:"n4394",loc:[-85.621909,41.950472]},n4395:{id:"n4395",loc:[-85.622015,41.950471]},n4396:{id:"n4396",loc:[-85.62199,41.950439]},n4397:{id:"n4397",loc:[-85.621956,41.95044]},n4398:{id:"n4398",loc:[-85.621955,41.950405]},n4399:{id:"n4399",loc:[-85.621988,41.950404]},n44:{id:"n44",loc:[-85.636799,41.943055]},n440:{id:"n440",loc:[-85.63451,41.943534]},n4400:{id:"n4400",loc:[-85.621668,41.950418]},n4401:{id:"n4401",loc:[-85.621667,41.950343]},n4402:{id:"n4402",loc:[-85.621745,41.950342]},n4403:{id:"n4403",loc:[-85.621744,41.950306]},n4404:{id:"n4404",loc:[-85.621764,41.950306]},n4405:{id:"n4405",loc:[-85.621763,41.950254]},n4406:{id:"n4406",loc:[-85.621861,41.950253]},n4407:{id:"n4407",loc:[-85.621861,41.950274]},n4408:{id:"n4408",loc:[-85.621896,41.950273]},n4409:{id:"n4409",loc:[-85.621898,41.950389]},n441:{id:"n441",loc:[-85.634483,41.943556]},n4410:{id:"n4410",loc:[-85.621843,41.95039]},n4411:{id:"n4411",loc:[-85.621843,41.950425]},n4412:{id:"n4412",loc:[-85.621789,41.950425]},n4413:{id:"n4413",loc:[-85.621789,41.950386]},n4414:{id:"n4414",loc:[-85.621752,41.950387]},n4415:{id:"n4415",loc:[-85.621753,41.950417]},n4416:{id:"n4416",loc:[-85.621556,41.950562]},n4417:{id:"n4417",loc:[-85.621552,41.950217]},n4418:{id:"n4418",loc:[-85.621788,41.950562]},n4419:{id:"n4419",loc:[-85.621155,41.950562]},n442:{id:"n442",loc:[-85.63419,41.943713]},n4420:{id:"n4420",loc:[-85.622473,41.950551]},n4421:{id:"n4421",loc:[-85.622043,41.950551]},n4422:{id:"n4422",loc:[-85.62142,41.950454]},n4423:{id:"n4423",loc:[-85.621315,41.950455]},n4424:{id:"n4424",loc:[-85.621313,41.950311]},n4425:{id:"n4425",loc:[-85.621388,41.950311]},n4426:{id:"n4426",loc:[-85.621387,41.950261]},n4427:{id:"n4427",loc:[-85.621468,41.95026]},n4428:{id:"n4428",loc:[-85.621468,41.950271]},n4429:{id:"n4429",loc:[-85.621503,41.95027]},n443:{id:"n443",loc:[-85.634462,41.943294]},n4430:{id:"n4430",loc:[-85.621505,41.950353]},n4431:{id:"n4431",loc:[-85.621483,41.950354]},n4432:{id:"n4432",loc:[-85.621483,41.950392]},n4433:{id:"n4433",loc:[-85.621419,41.950393]},n4434:{id:"n4434",loc:[-85.621213,41.95039]},n4435:{id:"n4435",loc:[-85.621127,41.950391]},n4436:{id:"n4436",loc:[-85.621126,41.950357]},n4437:{id:"n4437",loc:[-85.621094,41.950357]},n4438:{id:"n4438",loc:[-85.621094,41.950391]},n4439:{id:"n4439",loc:[-85.620977,41.950392]},n444:{id:"n444",loc:[-85.634298,41.943389]},n4440:{id:"n4440",loc:[-85.620975,41.950278]},n4441:{id:"n4441",loc:[-85.621087,41.950277]},n4442:{id:"n4442",loc:[-85.621088,41.950331]},n4443:{id:"n4443",loc:[-85.621211,41.950312]},n4444:{id:"n4444",loc:[-85.621104,41.950313]},n4445:{id:"n4445",loc:[-85.621105,41.950331]},n4446:{id:"n4446",loc:[-85.620706,41.950328]},n4447:{id:"n4447",loc:[-85.620606,41.950327]},n4448:{id:"n4448",loc:[-85.620607,41.950261]},n4449:{id:"n4449",loc:[-85.620707,41.950262]},n445:{id:"n445",loc:[-85.634527,41.943623]},n4450:{id:"n4450",loc:[-85.620599,41.950336]},n4451:{id:"n4451",loc:[-85.620559,41.950336]},n4452:{id:"n4452",loc:[-85.620559,41.950299]},n4453:{id:"n4453",loc:[-85.620599,41.950299]},n4454:{id:"n4454",loc:[-85.620545,41.950357]},n4455:{id:"n4455",loc:[-85.620418,41.950357]},n4456:{id:"n4456",loc:[-85.620417,41.950257]},n4457:{id:"n4457",loc:[-85.620544,41.950256]},n4458:{id:"n4458",loc:[-85.620246,41.950131],tags:{highway:"crossing"}},n4459:{id:"n4459",loc:[-85.620252,41.950956]},n446:{id:"n446",loc:[-85.634608,41.943577]},n4460:{id:"n4460",loc:[-85.620245,41.950179]},n4461:{id:"n4461",loc:[-85.620246,41.950088]},n4462:{id:"n4462",loc:[-85.620251,41.950885]},n4463:{id:"n4463",loc:[-85.620103,41.950884],tags:{crossing:"marked",highway:"crossing"}},n4464:{id:"n4464",loc:[-85.619992,41.950884]},n4465:{id:"n4465",loc:[-85.619704,41.951008]},n4466:{id:"n4466",loc:[-85.619599,41.951122]},n4467:{id:"n4467",loc:[-85.619264,41.951486]},n4468:{id:"n4468",loc:[-85.619179,41.951573],tags:{highway:"crossing"}},n4469:{id:"n4469",loc:[-85.620251,41.950999],tags:{highway:"crossing"}},n447:{id:"n447",loc:[-85.634555,41.943531]},n4470:{id:"n4470",loc:[-85.620249,41.951066]},n4471:{id:"n4471",loc:[-85.620256,41.951374]},n4472:{id:"n4472",loc:[-85.620249,41.951389]},n4473:{id:"n4473",loc:[-85.620249,41.951407]},n4474:{id:"n4474",loc:[-85.620255,41.951423]},n4475:{id:"n4475",loc:[-85.62026,41.951853]},n4476:{id:"n4476",loc:[-85.620262,41.951894],tags:{highway:"crossing"}},n4477:{id:"n4477",loc:[-85.620265,41.951957]},n4478:{id:"n4478",loc:[-85.620262,41.952135]},n4479:{id:"n4479",loc:[-85.620241,41.952424]},n448:{id:"n448",loc:[-85.634555,41.943482]},n4480:{id:"n4480",loc:[-85.620213,41.952583]},n4481:{id:"n4481",loc:[-85.620158,41.952754]},n4482:{id:"n4482",loc:[-85.620065,41.952942]},n4483:{id:"n4483",loc:[-85.619753,41.953439]},n4484:{id:"n4484",loc:[-85.619605,41.953626]},n4485:{id:"n4485",loc:[-85.619381,41.953834]},n4486:{id:"n4486",loc:[-85.619069,41.954066]},n4487:{id:"n4487",loc:[-85.618674,41.95429]},n4488:{id:"n4488",loc:[-85.621816,41.952389]},n4489:{id:"n4489",loc:[-85.6217,41.952386]},n449:{id:"n449",loc:[-85.634509,41.943427]},n4490:{id:"n4490",loc:[-85.621705,41.952306]},n4491:{id:"n4491",loc:[-85.621821,41.95231]},n4492:{id:"n4492",loc:[-85.621819,41.952272]},n4493:{id:"n4493",loc:[-85.621778,41.952272]},n4494:{id:"n4494",loc:[-85.621778,41.952199]},n4495:{id:"n4495",loc:[-85.621818,41.952199]},n4496:{id:"n4496",loc:[-85.621754,41.952281]},n4497:{id:"n4497",loc:[-85.621701,41.95228]},n4498:{id:"n4498",loc:[-85.621702,41.952197]},n4499:{id:"n4499",loc:[-85.621755,41.952197]},n45:{id:"n45",loc:[-85.636791,41.942792]},n450:{id:"n450",loc:[-85.63453,41.943365]},n4500:{id:"n4500",loc:[-85.628201,41.954694],tags:{highway:"stop",stop:"all",direction:"forward"}},n4501:{id:"n4501",loc:[-85.627921,41.954783],tags:{highway:"stop",stop:"all",direction:"backward"}},n4502:{id:"n4502",loc:[-85.62775,41.954696],tags:{highway:"stop",stop:"all",direction:"backward"}},n4503:{id:"n4503",loc:[-85.628046,41.954591],tags:{highway:"stop",stop:"all",direction:"forward"}},n4504:{id:"n4504",loc:[-85.631074,41.957428],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4505:{id:"n4505",loc:[-85.630768,41.957429],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4506:{id:"n4506",loc:[-85.629888,41.957432],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4507:{id:"n4507",loc:[-85.629565,41.957433],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4508:{id:"n4508",loc:[-85.629559,41.957343]},n4509:{id:"n4509",loc:[-85.628723,41.95735]},n451:{id:"n451",loc:[-85.634356,41.943468]},n4510:{id:"n4510",loc:[-85.62842,41.957515]},n4511:{id:"n4511",loc:[-85.627561,41.957525]},n4512:{id:"n4512",loc:[-85.630323,41.957508]},n4513:{id:"n4513",loc:[-85.630811,41.957506]},n4514:{id:"n4514",loc:[-85.630839,41.960874]},n4515:{id:"n4515",loc:[-85.631035,41.957506]},n4516:{id:"n4516",loc:[-85.632027,41.9575]},n4517:{id:"n4517",loc:[-85.631038,41.958066]},n4518:{id:"n4518",loc:[-85.630787,41.954769]},n4519:{id:"n4519",loc:[-85.630806,41.957342]},n452:{id:"n452",loc:[-85.634123,41.943596]},n4520:{id:"n4520",loc:[-85.630809,41.957428],tags:{highway:"crossing"}},n4521:{id:"n4521",loc:[-85.630912,41.957506],tags:{highway:"crossing"}},n4522:{id:"n4522",loc:[-85.631033,41.957428],tags:{highway:"crossing"}},n4523:{id:"n4523",loc:[-85.631032,41.957341]},n4524:{id:"n4524",loc:[-85.63091,41.957341],tags:{highway:"crossing"}},n4525:{id:"n4525",loc:[-85.631027,41.95597]},n4526:{id:"n4526",loc:[-85.631027,41.955913],tags:{highway:"crossing"}},n4527:{id:"n4527",loc:[-85.631025,41.955873]},n4528:{id:"n4528",loc:[-85.631073,41.955913],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4529:{id:"n4529",loc:[-85.631007,41.954766]},n453:{id:"n453",loc:[-85.634709,41.943926]},n4530:{id:"n4530",loc:[-85.630881,41.954768],tags:{highway:"crossing"}},n4531:{id:"n4531",loc:[-85.628022,41.954776]},n4532:{id:"n4532",loc:[-85.627385,41.95584]},n4533:{id:"n4533",loc:[-85.627329,41.955937]},n4534:{id:"n4534",loc:[-85.626583,41.957153]},n4535:{id:"n4535",loc:[-85.629675,41.954564],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4536:{id:"n4536",loc:[-85.630881,41.954806],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4537:{id:"n4537",loc:[-85.630879,41.954564],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4538:{id:"n4538",loc:[-85.630784,41.954682],tags:{highway:"crossing"}},n4539:{id:"n4539",loc:[-85.63078,41.954595]},n454:{id:"n454",loc:[-85.63525,41.943855]},n4540:{id:"n4540",loc:[-85.630879,41.954595],tags:{highway:"crossing"}},n4541:{id:"n4541",loc:[-85.631004,41.954594]},n4542:{id:"n4542",loc:[-85.631006,41.954681],tags:{highway:"crossing"}},n4543:{id:"n4543",loc:[-85.631045,41.959036],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4544:{id:"n4544",loc:[-85.632071,41.959029],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4545:{id:"n4545",loc:[-85.632257,41.959027],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4546:{id:"n4546",loc:[-85.631966,41.957427],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4547:{id:"n4547",loc:[-85.632297,41.957426],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4548:{id:"n4548",loc:[-85.631976,41.955911],tags:{highway:"give_way",direction:"forward"}},n4549:{id:"n4549",loc:[-85.632272,41.955911],tags:{highway:"give_way",direction:"backward"}},n455:{id:"n455",loc:[-85.635224,41.943869]},n4550:{id:"n4550",loc:[-85.632097,41.954805],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4551:{id:"n4551",loc:[-85.632094,41.954566],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4552:{id:"n4552",loc:[-85.626519,41.957256]},n4553:{id:"n4553",loc:[-85.625334,41.959165]},n4554:{id:"n4554",loc:[-85.626483,41.95806]},n4555:{id:"n4555",loc:[-85.626481,41.958175]},n4556:{id:"n4556",loc:[-85.626412,41.958174]},n4557:{id:"n4557",loc:[-85.626412,41.958202]},n4558:{id:"n4558",loc:[-85.62628,41.958201]},n4559:{id:"n4559",loc:[-85.626283,41.958057]},n456:{id:"n456",loc:[-85.638854,41.943104]},n4560:{id:"n4560",loc:[-85.622763,41.95109],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4561:{id:"n4561",loc:[-85.622858,41.950876],tags:{emergency:"fire_hydrant"}},n4562:{id:"n4562",loc:[-85.624073,41.950393]},n4563:{id:"n4563",loc:[-85.624077,41.950924]},n4564:{id:"n4564",loc:[-85.624599,41.950984],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4565:{id:"n4565",loc:[-85.624831,41.95119],tags:{emergency:"fire_hydrant"}},n4566:{id:"n4566",loc:[-85.624437,41.952568],tags:{emergency:"fire_hydrant"}},n4567:{id:"n4567",loc:[-85.624077,41.954606],tags:{emergency:"fire_hydrant"}},n4568:{id:"n4568",loc:[-85.624263,41.954888]},n4569:{id:"n4569",loc:[-85.624206,41.954919]},n457:{id:"n457",loc:[-85.635186,41.943901]},n4570:{id:"n4570",loc:[-85.624154,41.954865]},n4571:{id:"n4571",loc:[-85.624212,41.954835]},n4572:{id:"n4572",loc:[-85.622442,41.954401],tags:{emergency:"fire_hydrant"}},n4573:{id:"n4573",loc:[-85.619751,41.954658],tags:{emergency:"fire_hydrant"}},n4574:{id:"n4574",loc:[-85.617785,41.954534]},n4575:{id:"n4575",loc:[-85.617416,41.954721]},n4576:{id:"n4576",loc:[-85.617662,41.95474]},n4577:{id:"n4577",loc:[-85.618014,41.954717]},n4578:{id:"n4578",loc:[-85.617886,41.954671]},n4579:{id:"n4579",loc:[-85.617831,41.954612]},n458:{id:"n458",loc:[-85.635162,41.943917]},n4580:{id:"n4580",loc:[-85.617968,41.954752]},n4581:{id:"n4581",loc:[-85.617815,41.954752]},n4582:{id:"n4582",loc:[-85.617938,41.954695]},n4583:{id:"n4583",loc:[-85.617856,41.954642],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4584:{id:"n4584",loc:[-85.619116,41.954164],tags:{man_made:"flagpole"}},n4585:{id:"n4585",loc:[-85.619569,41.953255],tags:{emergency:"fire_hydrant"}},n4586:{id:"n4586",loc:[-85.620352,41.951894],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4587:{id:"n4587",loc:[-85.620485,41.951948],tags:{emergency:"fire_hydrant"}},n4588:{id:"n4588",loc:[-85.620316,41.950999],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4589:{id:"n4589",loc:[-85.620311,41.950131],tags:{highway:"stop",direction:"backward",stop:"minor"}},n459:{id:"n459",loc:[-85.634856,41.943905]},n4590:{id:"n4590",loc:[-85.620374,41.95018],tags:{emergency:"fire_hydrant"}},n4591:{id:"n4591",loc:[-85.620301,41.949239],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4592:{id:"n4592",loc:[-85.620278,41.947443],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4593:{id:"n4593",loc:[-85.619844,41.947444],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4594:{id:"n4594",loc:[-85.620191,41.947352],tags:{emergency:"fire_hydrant"}},n4595:{id:"n4595",loc:[-85.622819,41.947493],tags:{emergency:"fire_hydrant"}},n4596:{id:"n4596",loc:[-85.622744,41.947541],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4597:{id:"n4597",loc:[-85.622739,41.947316],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4598:{id:"n4598",loc:[-85.622909,41.948333],tags:{highway:"give_way"}},n4599:{id:"n4599",loc:[-85.622593,41.948333],tags:{highway:"give_way"}},n46:{id:"n46",loc:[-85.637131,41.94307]},n460:{id:"n460",loc:[-85.634811,41.944007]},n4600:{id:"n4600",loc:[-85.622835,41.948387],tags:{emergency:"fire_hydrant"}},n4601:{id:"n4601",loc:[-85.622768,41.949125],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4602:{id:"n4602",loc:[-85.622769,41.949325],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4603:{id:"n4603",loc:[-85.622837,41.949329],tags:{emergency:"fire_hydrant"}},n4604:{id:"n4604",loc:[-85.622614,41.950113],tags:{highway:"give_way",direction:"forward"}},n4605:{id:"n4605",loc:[-85.624777,41.949219],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4606:{id:"n4606",loc:[-85.624849,41.949106],tags:{emergency:"fire_hydrant"}},n4607:{id:"n4607",loc:[-85.624858,41.950119],tags:{emergency:"fire_hydrant"}},n4608:{id:"n4608",loc:[-85.624752,41.948334],tags:{highway:"give_way"}},n4609:{id:"n4609",loc:[-85.624845,41.948422],tags:{emergency:"fire_hydrant"}},n461:{id:"n461",loc:[-85.634987,41.943112]},n4610:{id:"n4610",loc:[-85.62484,41.947539],tags:{emergency:"fire_hydrant"}},n4611:{id:"n4611",loc:[-85.62476,41.947428],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4612:{id:"n4612",loc:[-85.620286,41.950926]},n4613:{id:"n4613",loc:[-85.618237,41.950963]},n4614:{id:"n4614",loc:[-85.618107,41.950876]},n4615:{id:"n4615",loc:[-85.618131,41.950393]},n4616:{id:"n4616",loc:[-85.618232,41.949913]},n4617:{id:"n4617",loc:[-85.619138,41.950212]},n4618:{id:"n4618",loc:[-85.619299,41.950388]},n4619:{id:"n4619",loc:[-85.619306,41.950897]},n462:{id:"n462",loc:[-85.634698,41.943194]},n4620:{id:"n4620",loc:[-85.619155,41.950958]},n4621:{id:"n4621",loc:[-85.620079,41.947715]},n4622:{id:"n4622",loc:[-85.619674,41.947728]},n4623:{id:"n4623",loc:[-85.619634,41.947735]},n4624:{id:"n4624",loc:[-85.619587,41.947756],tags:{barrier:"gate"}},n4625:{id:"n4625",loc:[-85.61953,41.947796]},n4626:{id:"n4626",loc:[-85.619475,41.947847]},n4627:{id:"n4627",loc:[-85.619433,41.947903]},n4628:{id:"n4628",loc:[-85.619402,41.947982]},n4629:{id:"n4629",loc:[-85.619394,41.948043]},n463:{id:"n463",loc:[-85.634632,41.943219]},n4630:{id:"n4630",loc:[-85.619395,41.948476]},n4631:{id:"n4631",loc:[-85.618367,41.947452]},n4632:{id:"n4632",loc:[-85.618371,41.947567],tags:{barrier:"gate"}},n4633:{id:"n4633",loc:[-85.618341,41.947622]},n4634:{id:"n4634",loc:[-85.618138,41.94773]},n4635:{id:"n4635",loc:[-85.618078,41.947814]},n4636:{id:"n4636",loc:[-85.618072,41.948009]},n4637:{id:"n4637",loc:[-85.618269,41.947666]},n4638:{id:"n4638",loc:[-85.618099,41.947765]},n4639:{id:"n4639",loc:[-85.618378,41.954453]},n464:{id:"n464",loc:[-85.63459,41.943239]},n4640:{id:"n4640",loc:[-85.618198,41.95453]},n4641:{id:"n4641",loc:[-85.618212,41.954623]},n4642:{id:"n4642",loc:[-85.635211,41.943103],tags:{leisure:"picnic_table"}},n4643:{id:"n4643",loc:[-85.635345,41.943448],tags:{leisure:"picnic_table"}},n4644:{id:"n4644",loc:[-85.635901,41.943353],tags:{amenity:"bench"}},n4645:{id:"n4645",loc:[-85.635818,41.942638],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4646:{id:"n4646",loc:[-85.635355,41.942044],tags:{leisure:"picnic_table"}},n4647:{id:"n4647",loc:[-85.635206,41.942045],tags:{leisure:"picnic_table"}},n4648:{id:"n4648",loc:[-85.63504,41.941992],tags:{leisure:"picnic_table"}},n4649:{id:"n4649",loc:[-85.635185,41.942001]},n465:{id:"n465",loc:[-85.634555,41.943263]},n4650:{id:"n4650",loc:[-85.635176,41.942021]},n4651:{id:"n4651",loc:[-85.635127,41.942008]},n4652:{id:"n4652",loc:[-85.635136,41.941988]},n4653:{id:"n4653",loc:[-85.635,41.941709],tags:{emergency:"fire_hydrant"}},n4654:{id:"n4654",loc:[-85.634893,41.941801]},n4655:{id:"n4655",loc:[-85.634937,41.941843]},n4656:{id:"n4656",loc:[-85.634963,41.941859]},n4657:{id:"n4657",loc:[-85.635027,41.941904]},n4658:{id:"n4658",loc:[-85.63494,41.94187]},n4659:{id:"n4659",loc:[-85.634951,41.941871]},n466:{id:"n466",loc:[-85.634526,41.943289]},n4660:{id:"n4660",loc:[-85.634753,41.941701],tags:{amenity:"drinking_water"}},n4661:{id:"n4661",loc:[-85.634717,41.941804],tags:{amenity:"bench"}},n4662:{id:"n4662",loc:[-85.634554,41.941883],tags:{amenity:"bench"}},n4663:{id:"n4663",loc:[-85.635002,41.941579],tags:{amenity:"fountain"}},n4664:{id:"n4664",loc:[-85.635258,41.94188],tags:{amenity:"waste_basket"}},n4665:{id:"n4665",loc:[-85.635262,41.941581],tags:{amenity:"bench"}},n4666:{id:"n4666",loc:[-85.635319,41.941744],tags:{amenity:"bench"}},n4667:{id:"n4667",loc:[-85.634702,41.941473],tags:{amenity:"waste_basket"}},n4668:{id:"n4668",loc:[-85.633981,41.941966],tags:{amenity:"bench"}},n4669:{id:"n4669",loc:[-85.63388,41.941743]},n467:{id:"n467",loc:[-85.635163,41.944985]},n4670:{id:"n4670",loc:[-85.633746,41.941741]},n4671:{id:"n4671",loc:[-85.633749,41.941664]},n4672:{id:"n4672",loc:[-85.633883,41.941667]},n4673:{id:"n4673",loc:[-85.634283,41.941183],tags:{leisure:"picnic_table"}},n4674:{id:"n4674",loc:[-85.634046,41.941102],tags:{amenity:"bbq"}},n4675:{id:"n4675",loc:[-85.63401,41.941093],tags:{amenity:"bbq"}},n4676:{id:"n4676",loc:[-85.633408,41.940862],tags:{amenity:"bench"}},n4677:{id:"n4677",loc:[-85.633359,41.940651],tags:{amenity:"bench"}},n4678:{id:"n4678",loc:[-85.634109,41.940831]},n4679:{id:"n4679",loc:[-85.63396,41.940867]},n468:{id:"n468",loc:[-85.635095,41.945035]},n4680:{id:"n4680",loc:[-85.633816,41.940913]},n4681:{id:"n4681",loc:[-85.633237,41.940455]},n4682:{id:"n4682",loc:[-85.634453,41.940025],tags:{emergency:"fire_hydrant"}},n4683:{id:"n4683",loc:[-85.635692,41.940218],tags:{emergency:"fire_hydrant"}},n4684:{id:"n4684",loc:[-85.635566,41.940102],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4685:{id:"n4685",loc:[-85.635961,41.940125],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4686:{id:"n4686",loc:[-85.635883,41.94012],tags:{crossing:"marked",highway:"crossing"}},n4687:{id:"n4687",loc:[-85.635883,41.94006]},n4688:{id:"n4688",loc:[-85.635774,41.940051],tags:{crossing:"marked",highway:"crossing"}},n4689:{id:"n4689",loc:[-85.635669,41.940043]},n469:{id:"n469",loc:[-85.634269,41.944431]},n4690:{id:"n4690",loc:[-85.635661,41.940107],tags:{crossing:"marked",highway:"crossing"}},n4691:{id:"n4691",loc:[-85.635424,41.941005],tags:{amenity:"fountain"}},n4692:{id:"n4692",loc:[-85.635542,41.941371],tags:{amenity:"bench"}},n4693:{id:"n4693",loc:[-85.635709,41.941341],tags:{emergency:"fire_hydrant"}},n4694:{id:"n4694",loc:[-85.637038,41.942513],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4695:{id:"n4695",loc:[-85.637174,41.941354],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4696:{id:"n4696",loc:[-85.637091,41.941273],tags:{emergency:"fire_hydrant"}},n4697:{id:"n4697",loc:[-85.638058,41.941346],tags:{highway:"give_way",direction:"forward"}},n4698:{id:"n4698",loc:[-85.638359,41.941344],tags:{highway:"give_way",direction:"backward"}},n4699:{id:"n4699",loc:[-85.638288,41.941236],tags:{emergency:"fire_hydrant"}},n47:{id:"n47",loc:[-85.636693,41.943073]},n470:{id:"n470",loc:[-85.634352,41.944376]},n4700:{id:"n4700",loc:[-85.63935,41.94128],tags:{emergency:"fire_hydrant"}},n4701:{id:"n4701",loc:[-85.639277,41.941337],tags:{highway:"give_way",direction:"forward"}},n4702:{id:"n4702",loc:[-85.639548,41.941334],tags:{highway:"give_way",direction:"backward"}},n4703:{id:"n4703",loc:[-85.642191,41.940039]},n4704:{id:"n4704",loc:[-85.640585,41.941263],tags:{emergency:"fire_hydrant"}},n4705:{id:"n4705",loc:[-85.64049,41.941327],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4706:{id:"n4706",loc:[-85.640803,41.941324],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4707:{id:"n4707",loc:[-85.641717,41.941317],tags:{highway:"stop",direction:"forward",stop:"all"}},n4708:{id:"n4708",loc:[-85.641846,41.941415],tags:{highway:"stop",direction:"backward",stop:"all"}},n4709:{id:"n4709",loc:[-85.641756,41.941392],tags:{emergency:"fire_hydrant"}},n471:{id:"n471",loc:[-85.634747,41.944561],tags:{railway:"crossing"}},n4710:{id:"n4710",loc:[-85.642014,41.941313],tags:{highway:"stop",direction:"forward",stop:"all"}},n4711:{id:"n4711",loc:[-85.641854,41.942455],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4712:{id:"n4712",loc:[-85.641859,41.942739],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4713:{id:"n4713",loc:[-85.640754,41.942707],tags:{emergency:"fire_hydrant"}},n4714:{id:"n4714",loc:[-85.640669,41.942716],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4715:{id:"n4715",loc:[-85.640664,41.942478],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4716:{id:"n4716",loc:[-85.63964,41.94274],tags:{man_made:"flagpole"}},n4717:{id:"n4717",loc:[-85.639455,41.942731],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4718:{id:"n4718",loc:[-85.63945,41.942492],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4719:{id:"n4719",loc:[-85.639527,41.942505],tags:{emergency:"fire_hydrant"}},n472:{id:"n472",loc:[-85.634667,41.944613]},n4720:{id:"n4720",loc:[-85.638238,41.942745],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4721:{id:"n4721",loc:[-85.638233,41.942511],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4722:{id:"n4722",loc:[-85.638018,41.94299],tags:{amenity:"waste_disposal"}},n4723:{id:"n4723",loc:[-85.637918,41.944152],tags:{amenity:"waste_basket"}},n4724:{id:"n4724",loc:[-85.635902,41.943291],tags:{leisure:"picnic_table"}},n4725:{id:"n4725",loc:[-85.63704,41.942741],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4726:{id:"n4726",loc:[-85.633467,41.943818],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4727:{id:"n4727",loc:[-85.633987,41.943531],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4728:{id:"n4728",loc:[-85.632154,41.943539],tags:{emergency:"fire_hydrant"}},n4729:{id:"n4729",loc:[-85.633567,41.944641],tags:{amenity:"bench"}},n473:{id:"n473",loc:[-85.634161,41.944371]},n4730:{id:"n4730",loc:[-85.633127,41.944574],tags:{amenity:"bench"}},n4731:{id:"n4731",loc:[-85.633439,41.944871],tags:{amenity:"bench"}},n4732:{id:"n4732",loc:[-85.633676,41.944799],tags:{amenity:"waste_basket"}},n4733:{id:"n4733",loc:[-85.633466,41.944862],tags:{amenity:"waste_basket"}},n4734:{id:"n4734",loc:[-85.633451,41.944847],tags:{emergency:"fire_hydrant"}},n4735:{id:"n4735",loc:[-85.634202,41.945543],tags:{amenity:"waste_basket"}},n4736:{id:"n4736",loc:[-85.634652,41.945472],tags:{leisure:"picnic_table"}},n4737:{id:"n4737",loc:[-85.6347,41.945445],tags:{leisure:"picnic_table"}},n4738:{id:"n4738",loc:[-85.634646,41.945662],tags:{emergency:"fire_hydrant"}},n4739:{id:"n4739",loc:[-85.634673,41.945687],tags:{amenity:"waste_basket"}},n474:{id:"n474",loc:[-85.633861,41.944117]},n4740:{id:"n4740",loc:[-85.63449,41.945827],tags:{amenity:"clock",display:"analog"}},n4741:{id:"n4741",loc:[-85.63481,41.946056],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4742:{id:"n4742",loc:[-85.634814,41.946176],tags:{amenity:"post_box"}},n4743:{id:"n4743",loc:[-85.638744,41.945328]},n4744:{id:"n4744",loc:[-85.63867,41.945228],tags:{amenity:"bench"}},n4745:{id:"n4745",loc:[-85.639487,41.945042],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4746:{id:"n4746",loc:[-85.639635,41.94387],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4747:{id:"n4747",loc:[-85.639549,41.943756],tags:{emergency:"fire_hydrant"}},n4748:{id:"n4748",loc:[-85.64055,41.943862],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4749:{id:"n4749",loc:[-85.640864,41.943859],tags:{highway:"stop",stop:"minor",direction:"backward"}},n475:{id:"n475",loc:[-85.633906,41.943535]},n4750:{id:"n4750",loc:[-85.640718,41.945022],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4751:{id:"n4751",loc:[-85.640664,41.945076],tags:{emergency:"fire_hydrant"}},n4752:{id:"n4752",loc:[-85.641913,41.94502],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4753:{id:"n4753",loc:[-85.641838,41.945076],tags:{emergency:"fire_hydrant"}},n4754:{id:"n4754",loc:[-85.642045,41.94385],tags:{highway:"give_way",direction:"backward"}},n4755:{id:"n4755",loc:[-85.641738,41.943852],tags:{highway:"give_way",direction:"forward"}},n4756:{id:"n4756",loc:[-85.642928,41.943843],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4757:{id:"n4757",loc:[-85.64305,41.943902],tags:{emergency:"fire_hydrant"}},n4758:{id:"n4758",loc:[-85.642986,41.945105],tags:{highway:"stop",direction:"backward",stop:"all"}},n4759:{id:"n4759",loc:[-85.643136,41.94502],tags:{highway:"stop",stop:"all",direction:"forward"}},n476:{id:"n476",loc:[-85.63423,41.943692]},n4760:{id:"n4760",loc:[-85.63169,41.947812]},n4761:{id:"n4761",loc:[-85.631307,41.947655]},n4762:{id:"n4762",loc:[-85.631407,41.947413]},n4763:{id:"n4763",loc:[-85.631173,41.947306]},n4764:{id:"n4764",loc:[-85.631316,41.947145]},n4765:{id:"n4765",loc:[-85.631476,41.947087]},n4766:{id:"n4766",loc:[-85.631793,41.946871]},n4767:{id:"n4767",loc:[-85.631884,41.946723]},n4768:{id:"n4768",loc:[-85.631814,41.946397]},n4769:{id:"n4769",loc:[-85.631382,41.947685]},n477:{id:"n477",loc:[-85.635096,41.942814]},n4770:{id:"n4770",loc:[-85.63109,41.947819]},n4771:{id:"n4771",loc:[-85.630921,41.947961]},n4772:{id:"n4772",loc:[-85.630249,41.947709]},n4773:{id:"n4773",loc:[-85.630149,41.947451]},n4774:{id:"n4774",loc:[-85.629733,41.947339]},n4775:{id:"n4775",loc:[-85.629755,41.946948]},n4776:{id:"n4776",loc:[-85.630457,41.947103]},n4777:{id:"n4777",loc:[-85.630934,41.946939]},n4778:{id:"n4778",loc:[-85.631277,41.946852]},n4779:{id:"n4779",loc:[-85.63142,41.946781]},n478:{id:"n478",loc:[-85.635058,41.942795]},n4780:{id:"n4780",loc:[-85.631116,41.946474]},n4781:{id:"n4781",loc:[-85.63073,41.945965]},n4782:{id:"n4782",loc:[-85.631337,41.94571]},n4783:{id:"n4783",loc:[-85.631589,41.945487]},n4784:{id:"n4784",loc:[-85.632278,41.945784]},n4785:{id:"n4785",loc:[-85.632105,41.946034]},n4786:{id:"n4786",loc:[-85.632532,41.946198]},n4787:{id:"n4787",loc:[-85.632566,41.946151]},n4788:{id:"n4788",loc:[-85.632684,41.946196]},n4789:{id:"n4789",loc:[-85.628676,41.947106]},n479:{id:"n479",loc:[-85.635002,41.94279]},n4790:{id:"n4790",loc:[-85.628973,41.946476]},n4791:{id:"n4791",loc:[-85.629094,41.946079]},n4792:{id:"n4792",loc:[-85.629226,41.94578]},n4793:{id:"n4793",loc:[-85.629479,41.945682]},n4794:{id:"n4794",loc:[-85.630606,41.94569]},n4795:{id:"n4795",loc:[-85.631255,41.945588]},n4796:{id:"n4796",loc:[-85.631546,41.945281]},n4797:{id:"n4797",loc:[-85.631629,41.944823]},n4798:{id:"n4798",loc:[-85.631766,41.944958]},n4799:{id:"n4799",loc:[-85.631689,41.945318]},n48:{id:"n48",loc:[-85.636689,41.94276]},n480:{id:"n480",loc:[-85.634908,41.94279]},n4800:{id:"n4800",loc:[-85.615069,41.945527]},n4801:{id:"n4801",loc:[-85.615058,41.946677]},n4802:{id:"n4802",loc:[-85.613692,41.946689]},n4803:{id:"n4803",loc:[-85.613475,41.946531]},n4804:{id:"n4804",loc:[-85.611717,41.946252]},n4805:{id:"n4805",loc:[-85.611353,41.946385]},n4806:{id:"n4806",loc:[-85.611304,41.947397]},n4807:{id:"n4807",loc:[-85.610564,41.947401]},n4808:{id:"n4808",loc:[-85.610553,41.947122]},n4809:{id:"n4809",loc:[-85.610194,41.946992]},n481:{id:"n481",loc:[-85.634478,41.942342]},n4810:{id:"n4810",loc:[-85.609976,41.946628]},n4811:{id:"n4811",loc:[-85.609769,41.946523]},n4812:{id:"n4812",loc:[-85.609307,41.946523]},n4813:{id:"n4813",loc:[-85.609035,41.946462]},n4814:{id:"n4814",loc:[-85.609018,41.943277]},n4815:{id:"n4815",loc:[-85.609617,41.943423]},n4816:{id:"n4816",loc:[-85.610471,41.943447]},n4817:{id:"n4817",loc:[-85.621491,41.949168]},n4818:{id:"n4818",loc:[-85.620266,41.94917]},n4819:{id:"n4819",loc:[-85.620262,41.947557]},n482:{id:"n482",loc:[-85.634521,41.942254]},n4820:{id:"n4820",loc:[-85.620825,41.947556]},n4821:{id:"n4821",loc:[-85.620827,41.948371]},n4822:{id:"n4822",loc:[-85.621489,41.94837]},n4823:{id:"n4823",loc:[-85.622865,41.950928]},n4824:{id:"n4824",loc:[-85.622858,41.949744]},n4825:{id:"n4825",loc:[-85.623696,41.949714]},n4826:{id:"n4826",loc:[-85.623696,41.949647]},n4827:{id:"n4827",loc:[-85.624019,41.949647]},n4828:{id:"n4828",loc:[-85.624024,41.950093]},n4829:{id:"n4829",loc:[-85.622885,41.949711]},n483:{id:"n483",loc:[-85.63425,41.941819]},n4830:{id:"n4830",loc:[-85.624584,41.951049]},n4831:{id:"n4831",loc:[-85.624669,41.9511]},n4832:{id:"n4832",loc:[-85.624316,41.952218]},n4833:{id:"n4833",loc:[-85.623819,41.952094]},n4834:{id:"n4834",loc:[-85.623385,41.952101]},n4835:{id:"n4835",loc:[-85.623456,41.951238]},n4836:{id:"n4836",loc:[-85.623535,41.951051]},n4837:{id:"n4837",loc:[-85.624693,41.950921]},n4838:{id:"n4838",loc:[-85.624727,41.950897]},n4839:{id:"n4839",loc:[-85.624869,41.950341]},n484:{id:"n484",loc:[-85.634324,41.942131]},n4840:{id:"n4840",loc:[-85.624859,41.949284]},n4841:{id:"n4841",loc:[-85.624788,41.949262]},n4842:{id:"n4842",loc:[-85.62402,41.949265]},n4843:{id:"n4843",loc:[-85.610382,41.954663]},n4844:{id:"n4844",loc:[-85.605675,41.954667]},n4845:{id:"n4845",loc:[-85.605669,41.949407]},n4846:{id:"n4846",loc:[-85.610376,41.949404]},n4847:{id:"n4847",loc:[-85.605552,41.958536]},n4848:{id:"n4848",loc:[-85.595755,41.958588]},n4849:{id:"n4849",loc:[-85.595732,41.956419]},n485:{id:"n485",loc:[-85.634211,41.941374]},n4850:{id:"n4850",loc:[-85.596908,41.955605]},n4851:{id:"n4851",loc:[-85.597723,41.955596]},n4852:{id:"n4852",loc:[-85.597715,41.954967]},n4853:{id:"n4853",loc:[-85.5874,41.955018]},n4854:{id:"n4854",loc:[-85.586615,41.955124]},n4855:{id:"n4855",loc:[-85.58613,41.955293]},n4856:{id:"n4856",loc:[-85.586166,41.962122]},n4857:{id:"n4857",loc:[-85.587008,41.955052]},n4858:{id:"n4858",loc:[-85.591685,41.95499]},n4859:{id:"n4859",loc:[-85.591718,41.956649]},n486:{id:"n486",loc:[-85.634085,41.940704]},n4860:{id:"n4860",loc:[-85.591133,41.956649]},n4861:{id:"n4861",loc:[-85.591061,41.95582]},n4862:{id:"n4862",loc:[-85.590677,41.95613]},n4863:{id:"n4863",loc:[-85.590826,41.956369]},n4864:{id:"n4864",loc:[-85.591016,41.954991]},n4865:{id:"n4865",loc:[-85.587656,41.954855]},n4866:{id:"n4866",loc:[-85.5964,41.955274]},n4867:{id:"n4867",loc:[-85.58776,41.96178]},n4868:{id:"n4868",loc:[-85.601172,41.960448]},n4869:{id:"n4869",loc:[-85.589489,41.960478]},n487:{id:"n487",loc:[-85.635567,41.940944]},n4870:{id:"n4870",loc:[-85.586664,41.960493]},n4871:{id:"n4871",loc:[-85.591227,41.95676]},n4872:{id:"n4872",loc:[-85.589424,41.958093]},n4873:{id:"n4873",loc:[-85.588779,41.957611]},n4874:{id:"n4874",loc:[-85.590583,41.956278]},n4875:{id:"n4875",loc:[-85.590759,41.957106]},n4876:{id:"n4876",loc:[-85.592213,41.958218]},n4877:{id:"n4877",loc:[-85.592262,41.958279]},n4878:{id:"n4878",loc:[-85.592304,41.958358]},n4879:{id:"n4879",loc:[-85.592351,41.95849]},n488:{id:"n488",loc:[-85.635542,41.940919]},n4880:{id:"n4880",loc:[-85.592363,41.958605]},n4881:{id:"n4881",loc:[-85.592383,41.96047]},n4882:{id:"n4882",loc:[-85.592376,41.959808]},n4883:{id:"n4883",loc:[-85.600825,41.959779]},n4884:{id:"n4884",loc:[-85.601084,41.959844]},n4885:{id:"n4885",loc:[-85.601144,41.959908]},n4886:{id:"n4886",loc:[-85.601164,41.960008]},n4887:{id:"n4887",loc:[-85.601162,41.960125]},n4888:{id:"n4888",loc:[-85.601134,41.960221]},n4889:{id:"n4889",loc:[-85.600993,41.960353]},n489:{id:"n489",loc:[-85.635514,41.940906]},n4890:{id:"n4890",loc:[-85.600794,41.960449]},n4891:{id:"n4891",loc:[-85.60098,41.959792]},n4892:{id:"n4892",loc:[-85.601067,41.960294]},n4893:{id:"n4893",loc:[-85.596829,41.959793]},n4894:{id:"n4894",loc:[-85.596839,41.960459]},n4895:{id:"n4895",loc:[-85.589364,41.958048]},n4896:{id:"n4896",loc:[-85.587374,41.959511]},n4897:{id:"n4897",loc:[-85.587286,41.959564]},n4898:{id:"n4898",loc:[-85.587163,41.959632]},n4899:{id:"n4899",loc:[-85.586694,41.959865]},n49:{id:"n49",loc:[-85.637127,41.942757]},n490:{id:"n490",loc:[-85.635469,41.940896]},n4900:{id:"n4900",loc:[-85.586634,41.959921]},n4901:{id:"n4901",loc:[-85.586607,41.960001]},n4902:{id:"n4902",loc:[-85.586599,41.960099]},n4903:{id:"n4903",loc:[-85.586602,41.96034]},n4904:{id:"n4904",loc:[-85.586669,41.960439]},n4905:{id:"n4905",loc:[-85.586758,41.960493]},n4906:{id:"n4906",loc:[-85.586618,41.960391]},n4907:{id:"n4907",loc:[-85.591201,41.956352]},n4908:{id:"n4908",loc:[-85.59112,41.954843]},n4909:{id:"n4909",loc:[-85.591536,41.956349]},n491:{id:"n491",loc:[-85.635667,41.940826]},n4910:{id:"n4910",loc:[-85.590953,41.956354]},n4911:{id:"n4911",loc:[-85.591468,41.956406]},n4912:{id:"n4912",loc:[-85.591469,41.956478]},n4913:{id:"n4913",loc:[-85.591123,41.956481]},n4914:{id:"n4914",loc:[-85.591121,41.956409]},n4915:{id:"n4915",loc:[-85.590826,41.955954]},n4916:{id:"n4916",loc:[-85.590612,41.956115]},n4917:{id:"n4917",loc:[-85.590402,41.955962]},n4918:{id:"n4918",loc:[-85.590622,41.955804]},n4919:{id:"n4919",loc:[-85.59011,41.956502]},n492:{id:"n492",loc:[-85.636197,41.940599]},n4920:{id:"n4920",loc:[-85.589877,41.956668]},n4921:{id:"n4921",loc:[-85.589777,41.95659]},n4922:{id:"n4922",loc:[-85.59001,41.956424]},n4923:{id:"n4923",loc:[-85.589595,41.956427]},n4924:{id:"n4924",loc:[-85.589434,41.956549]},n4925:{id:"n4925",loc:[-85.589262,41.956424]},n4926:{id:"n4926",loc:[-85.589422,41.956302]},n4927:{id:"n4927",loc:[-85.589358,41.956286]},n4928:{id:"n4928",loc:[-85.5892,41.956408]},n4929:{id:"n4929",loc:[-85.589032,41.956288]},n493:{id:"n493",loc:[-85.6362,41.940686]},n4930:{id:"n4930",loc:[-85.58919,41.956166]},n4931:{id:"n4931",loc:[-85.589165,41.956132]},n4932:{id:"n4932",loc:[-85.589002,41.956253]},n4933:{id:"n4933",loc:[-85.588826,41.956122]},n4934:{id:"n4934",loc:[-85.588989,41.956001]},n4935:{id:"n4935",loc:[-85.588673,41.955757]},n4936:{id:"n4936",loc:[-85.588502,41.955882]},n4937:{id:"n4937",loc:[-85.588339,41.955759]},n4938:{id:"n4938",loc:[-85.58851,41.955633]},n4939:{id:"n4939",loc:[-85.590382,41.955892]},n494:{id:"n494",loc:[-85.635969,41.94069]},n4940:{id:"n4940",loc:[-85.589923,41.956231]},n4941:{id:"n4941",loc:[-85.58984,41.956168]},n4942:{id:"n4942",loc:[-85.5903,41.95583]},n4943:{id:"n4943",loc:[-85.589636,41.956038]},n4944:{id:"n4944",loc:[-85.589546,41.956105]},n4945:{id:"n4945",loc:[-85.589045,41.955729]},n4946:{id:"n4946",loc:[-85.589135,41.955662]},n4947:{id:"n4947",loc:[-85.590718,41.955293]},n4948:{id:"n4948",loc:[-85.590718,41.955374]},n4949:{id:"n4949",loc:[-85.589211,41.955369]},n495:{id:"n495",loc:[-85.635965,41.940561]},n4950:{id:"n4950",loc:[-85.589212,41.955287]},n4951:{id:"n4951",loc:[-85.589675,41.956817]},n4952:{id:"n4952",loc:[-85.58947,41.95697]},n4953:{id:"n4953",loc:[-85.589219,41.956784]},n4954:{id:"n4954",loc:[-85.589425,41.95663]},n4955:{id:"n4955",loc:[-85.589373,41.95702]},n4956:{id:"n4956",loc:[-85.589171,41.957172]},n4957:{id:"n4957",loc:[-85.588962,41.957019]},n4958:{id:"n4958",loc:[-85.589164,41.956867]},n4959:{id:"n4959",loc:[-85.588881,41.955006]},n496:{id:"n496",loc:[-85.636031,41.94056]},n4960:{id:"n4960",loc:[-85.588804,41.955006]},n4961:{id:"n4961",loc:[-85.604773,41.954521]},n4962:{id:"n4962",loc:[-85.601603,41.954527]},n4963:{id:"n4963",loc:[-85.600823,41.954169]},n4964:{id:"n4964",loc:[-85.600828,41.950191]},n4965:{id:"n4965",loc:[-85.601673,41.949457]},n4966:{id:"n4966",loc:[-85.604464,41.949488]},n4967:{id:"n4967",loc:[-85.60538,41.950212]},n4968:{id:"n4968",loc:[-85.605395,41.954108]},n4969:{id:"n4969",loc:[-85.604771,41.954109]},n497:{id:"n497",loc:[-85.636032,41.940602]},n4970:{id:"n4970",loc:[-85.600613,41.953916]},n4971:{id:"n4971",loc:[-85.599758,41.954649]},n4972:{id:"n4972",loc:[-85.591194,41.954663]},n4973:{id:"n4973",loc:[-85.591182,41.950465]},n4974:{id:"n4974",loc:[-85.591871,41.950464]},n4975:{id:"n4975",loc:[-85.591868,41.949209]},n4976:{id:"n4976",loc:[-85.592155,41.949209]},n4977:{id:"n4977",loc:[-85.592155,41.94848]},n4978:{id:"n4978",loc:[-85.600615,41.948482]},n4979:{id:"n4979",loc:[-85.605421,41.949378]},n498:{id:"n498",loc:[-85.635783,41.940583]},n4980:{id:"n4980",loc:[-85.600614,41.949373]},n4981:{id:"n4981",loc:[-85.601316,41.94849]},n4982:{id:"n4982",loc:[-85.601592,41.947641]},n4983:{id:"n4983",loc:[-85.60395,41.947618]},n4984:{id:"n4984",loc:[-85.603973,41.948114]},n4985:{id:"n4985",loc:[-85.605398,41.948103]},n4986:{id:"n4986",loc:[-85.614017,41.965566]},n4987:{id:"n4987",loc:[-85.605787,41.965619]},n4988:{id:"n4988",loc:[-85.60577,41.963821]},n4989:{id:"n4989",loc:[-85.612886,41.963808]},n499:{id:"n499",loc:[-85.63589,41.940578]},n4990:{id:"n4990",loc:[-85.613207,41.963705]},n4991:{id:"n4991",loc:[-85.613511,41.963525]},n4992:{id:"n4992",loc:[-85.613667,41.963305]},n4993:{id:"n4993",loc:[-85.613779,41.962983]},n4994:{id:"n4994",loc:[-85.613797,41.959709]},n4995:{id:"n4995",loc:[-85.613663,41.95936]},n4996:{id:"n4996",loc:[-85.61339,41.959064]},n4997:{id:"n4997",loc:[-85.610503,41.956898]},n4998:{id:"n4998",loc:[-85.610485,41.956595]},n4999:{id:"n4999",loc:[-85.613892,41.956621]},n5:{id:"n5",loc:[-85.622744,41.95268]},n50:{id:"n50",loc:[-85.636673,41.943143]},n500:{id:"n500",loc:[-85.636198,41.940578]},n5000:{id:"n5000",loc:[-85.613866,41.958574]},n5001:{id:"n5001",loc:[-85.615262,41.958561]},n5002:{id:"n5002",loc:[-85.615279,41.959541]},n5003:{id:"n5003",loc:[-85.615314,41.95597]},n5004:{id:"n5004",loc:[-85.613887,41.955988]},n5005:{id:"n5005",loc:[-85.613074,41.962244]},n5006:{id:"n5006",loc:[-85.611678,41.963354]},n5007:{id:"n5007",loc:[-85.611678,41.963487]},n5008:{id:"n5008",loc:[-85.606906,41.963502]},n5009:{id:"n5009",loc:[-85.605777,41.962657]},n501:{id:"n501",loc:[-85.636251,41.940584]},n5010:{id:"n5010",loc:[-85.605711,41.9599]},n5011:{id:"n5011",loc:[-85.608139,41.9585]},n5012:{id:"n5012",loc:[-85.60814,41.956306]},n5013:{id:"n5013",loc:[-85.608854,41.95581]},n5014:{id:"n5014",loc:[-85.610039,41.955883]},n5015:{id:"n5015",loc:[-85.610068,41.956754]},n5016:{id:"n5016",loc:[-85.613058,41.959411]},n5017:{id:"n5017",loc:[-85.610234,41.957068]},n5018:{id:"n5018",loc:[-85.609826,41.95581]},n5019:{id:"n5019",loc:[-85.606987,41.958505]},n502:{id:"n502",loc:[-85.636279,41.940605]},n5020:{id:"n5020",loc:[-85.606498,41.958846]},n5021:{id:"n5021",loc:[-85.606013,41.959342]},n5022:{id:"n5022",loc:[-85.614553,41.961581]},n5023:{id:"n5023",loc:[-85.61465,41.96214]},n5024:{id:"n5024",loc:[-85.615277,41.962442]},n5025:{id:"n5025",loc:[-85.615451,41.962972]},n5026:{id:"n5026",loc:[-85.614355,41.964826]},n5027:{id:"n5027",loc:[-85.615133,41.964589]},n5028:{id:"n5028",loc:[-85.615342,41.963818]},n5029:{id:"n5029",loc:[-85.615971,41.963792]},n503:{id:"n503",loc:[-85.636285,41.940633]},n5030:{id:"n5030",loc:[-85.615751,41.963122]},n5031:{id:"n5031",loc:[-85.616575,41.963123]},n5032:{id:"n5032",loc:[-85.612527,41.963846]},n5033:{id:"n5033",loc:[-85.630653,41.940709]},n5034:{id:"n5034",loc:[-85.629858,41.939568]},n5035:{id:"n5035",loc:[-85.629847,41.937926]},n504:{id:"n504",loc:[-85.636281,41.940662]},n505:{id:"n505",loc:[-85.636266,41.940688]},n506:{id:"n506",loc:[-85.636236,41.940701]},n507:{id:"n507",loc:[-85.63619,41.940706]},n508:{id:"n508",loc:[-85.635892,41.940707]},n509:{id:"n509",loc:[-85.635785,41.9407]},n51:{id:"n51",loc:[-85.636673,41.942864]},n510:{id:"n510",loc:[-85.636044,41.940578]},n511:{id:"n511",loc:[-85.635946,41.940578]},n512:{id:"n512",loc:[-85.636475,41.940732]},n513:{id:"n513",loc:[-85.636475,41.940777]},n514:{id:"n514",loc:[-85.636405,41.940777]},n515:{id:"n515",loc:[-85.636405,41.940732]},n516:{id:"n516",loc:[-85.636471,41.940916]},n517:{id:"n517",loc:[-85.636471,41.940961]},n518:{id:"n518",loc:[-85.636404,41.940961]},n519:{id:"n519",loc:[-85.636404,41.940916]},n52:{id:"n52",loc:[-85.636227,41.942864]},n520:{id:"n520",loc:[-85.636286,41.941127]},n521:{id:"n521",loc:[-85.636203,41.941126]},n522:{id:"n522",loc:[-85.636204,41.941083]},n523:{id:"n523",loc:[-85.636287,41.941083]},n524:{id:"n524",loc:[-85.636124,41.941064]},n525:{id:"n525",loc:[-85.636,41.941065]},n526:{id:"n526",loc:[-85.636,41.940964]},n527:{id:"n527",loc:[-85.636045,41.940964]},n528:{id:"n528",loc:[-85.636045,41.940928]},n529:{id:"n529",loc:[-85.636111,41.940928]},n53:{id:"n53",loc:[-85.636227,41.943143]},n530:{id:"n530",loc:[-85.636111,41.940961]},n531:{id:"n531",loc:[-85.636123,41.940961]},n532:{id:"n532",loc:[-85.636124,41.940997]},n533:{id:"n533",loc:[-85.636164,41.940997]},n534:{id:"n534",loc:[-85.636164,41.941044]},n535:{id:"n535",loc:[-85.636124,41.941044]},n536:{id:"n536",loc:[-85.636534,41.941256]},n537:{id:"n537",loc:[-85.63645,41.941246]},n538:{id:"n538",loc:[-85.636462,41.941189]},n539:{id:"n539",loc:[-85.636546,41.941199]},n54:{id:"n54",loc:[-85.636198,41.943119]},n540:{id:"n540",loc:[-85.636802,41.941226]},n541:{id:"n541",loc:[-85.636701,41.941215]},n542:{id:"n542",loc:[-85.636709,41.941174]},n543:{id:"n543",loc:[-85.636656,41.941168]},n544:{id:"n544",loc:[-85.636666,41.941122]},n545:{id:"n545",loc:[-85.636781,41.941136]},n546:{id:"n546",loc:[-85.636774,41.94117]},n547:{id:"n547",loc:[-85.636812,41.941175]},n548:{id:"n548",loc:[-85.636803,41.941047]},n549:{id:"n549",loc:[-85.636785,41.941047]},n55:{id:"n55",loc:[-85.635945,41.94312]},n550:{id:"n550",loc:[-85.636785,41.941058]},n551:{id:"n551",loc:[-85.636644,41.941059]},n552:{id:"n552",loc:[-85.636644,41.941038]},n553:{id:"n553",loc:[-85.636581,41.941039]},n554:{id:"n554",loc:[-85.636581,41.940995]},n555:{id:"n555",loc:[-85.636746,41.940995]},n556:{id:"n556",loc:[-85.636746,41.940978]},n557:{id:"n557",loc:[-85.636803,41.940978]},n558:{id:"n558",loc:[-85.636781,41.940768]},n559:{id:"n559",loc:[-85.636783,41.940828]},n56:{id:"n56",loc:[-85.635943,41.942909]},n560:{id:"n560",loc:[-85.636761,41.940828]},n561:{id:"n561",loc:[-85.636762,41.940857]},n562:{id:"n562",loc:[-85.636641,41.940859]},n563:{id:"n563",loc:[-85.63664,41.940805]},n564:{id:"n564",loc:[-85.636676,41.940804]},n565:{id:"n565",loc:[-85.636675,41.940769]},n566:{id:"n566",loc:[-85.636733,41.94033]},n567:{id:"n567",loc:[-85.636471,41.940334]},n568:{id:"n568",loc:[-85.636469,41.940262]},n569:{id:"n569",loc:[-85.636731,41.940257]},n57:{id:"n57",loc:[-85.636227,41.942909]},n570:{id:"n570",loc:[-85.636798,41.940419]},n571:{id:"n571",loc:[-85.6368,41.940524]},n572:{id:"n572",loc:[-85.63664,41.940526]},n573:{id:"n573",loc:[-85.636638,41.940421]},n574:{id:"n574",loc:[-85.636372,41.940551]},n575:{id:"n575",loc:[-85.636338,41.94055]},n576:{id:"n576",loc:[-85.636339,41.940524]},n577:{id:"n577",loc:[-85.636373,41.940525]},n578:{id:"n578",loc:[-85.636388,41.940435]},n579:{id:"n579",loc:[-85.636222,41.940436]},n58:{id:"n58",loc:[-85.63627,41.943175]},n580:{id:"n580",loc:[-85.636222,41.940366]},n581:{id:"n581",loc:[-85.636387,41.940365]},n582:{id:"n582",loc:[-85.636158,41.940482]},n583:{id:"n583",loc:[-85.635963,41.940484]},n584:{id:"n584",loc:[-85.635961,41.940399]},n585:{id:"n585",loc:[-85.636156,41.940397]},n586:{id:"n586",loc:[-85.635987,41.940314]},n587:{id:"n587",loc:[-85.635987,41.940268]},n588:{id:"n588",loc:[-85.635968,41.940268]},n589:{id:"n589",loc:[-85.635967,41.940212]},n59:{id:"n59",loc:[-85.635531,41.943176]},n590:{id:"n590",loc:[-85.636082,41.940211]},n591:{id:"n591",loc:[-85.636083,41.94027]},n592:{id:"n592",loc:[-85.636064,41.94027]},n593:{id:"n593",loc:[-85.636064,41.940313]},n594:{id:"n594",loc:[-85.638071,41.941562]},n595:{id:"n595",loc:[-85.637953,41.941562]},n596:{id:"n596",loc:[-85.637952,41.941522]},n597:{id:"n597",loc:[-85.637876,41.941523]},n598:{id:"n598",loc:[-85.637876,41.941471]},n599:{id:"n599",loc:[-85.638035,41.94147]},n6:{id:"n6",loc:[-85.624925,41.950604]},n60:{id:"n60",loc:[-85.63542,41.942883]},n600:{id:"n600",loc:[-85.638035,41.941513]},n601:{id:"n601",loc:[-85.638071,41.941512]},n602:{id:"n602",loc:[-85.637038,41.942543],tags:{crossing:"marked",highway:"crossing"}},n603:{id:"n603",loc:[-85.637134,41.942542]},n604:{id:"n604",loc:[-85.638122,41.942532]},n605:{id:"n605",loc:[-85.638121,41.942478]},n606:{id:"n606",loc:[-85.638104,41.941424]},n607:{id:"n607",loc:[-85.637115,41.941438]},n608:{id:"n608",loc:[-85.637133,41.942453]},n609:{id:"n609",loc:[-85.637429,41.942004]},n61:{id:"n61",loc:[-85.635701,41.942802]},n610:{id:"n610",loc:[-85.637125,41.942004]},n611:{id:"n611",loc:[-85.637022,41.942004]},n612:{id:"n612",loc:[-85.635952,41.943579]},n613:{id:"n613",loc:[-85.635872,41.943594]},n614:{id:"n614",loc:[-85.635857,41.943551]},n615:{id:"n615",loc:[-85.635937,41.943535]},n616:{id:"n616",loc:[-85.63671,41.94344]},n617:{id:"n617",loc:[-85.636427,41.94334]},n618:{id:"n618",loc:[-85.635353,41.943279]},n619:{id:"n619",loc:[-85.635319,41.943257]},n62:{id:"n62",loc:[-85.6358,41.942997]},n620:{id:"n620",loc:[-85.638786,41.943105]},n621:{id:"n621",loc:[-85.634957,41.943146]},n622:{id:"n622",loc:[-85.635012,41.943119]},n623:{id:"n623",loc:[-85.632409,41.944222]},n624:{id:"n624",loc:[-85.631863,41.944749]},n625:{id:"n625",loc:[-85.631915,41.944722]},n626:{id:"n626",loc:[-85.631884,41.94464]},n627:{id:"n627",loc:[-85.631792,41.944359]},n628:{id:"n628",loc:[-85.631817,41.944703]},n629:{id:"n629",loc:[-85.633464,41.945787]},n63:{id:"n63",loc:[-85.635808,41.943176]},n630:{id:"n630",loc:[-85.633583,41.945919]},n631:{id:"n631",loc:[-85.63382,41.945698]},n632:{id:"n632",loc:[-85.633681,41.945571]},n633:{id:"n633",loc:[-85.634217,41.946824]},n634:{id:"n634",loc:[-85.634271,41.946836]},n635:{id:"n635",loc:[-85.634319,41.94573]},n636:{id:"n636",loc:[-85.634377,41.945672]},n637:{id:"n637",loc:[-85.634909,41.945354]},n638:{id:"n638",loc:[-85.634726,41.945493],tags:{artwork_type:"mural",tourism:"artwork"}},n639:{id:"n639",loc:[-85.63546,41.945612]},n64:{id:"n64",loc:[-85.63631,41.943253]},n640:{id:"n640",loc:[-85.635561,41.945493]},n641:{id:"n641",loc:[-85.635417,41.945565]},n642:{id:"n642",loc:[-85.635315,41.945583]},n643:{id:"n643",loc:[-85.63506,41.945383]},n644:{id:"n644",loc:[-85.635198,41.945199]},n645:{id:"n645",loc:[-85.635361,41.94558]},n646:{id:"n646",loc:[-85.635017,41.945066]},n647:{id:"n647",loc:[-85.634779,41.945206]},n648:{id:"n648",loc:[-85.63425,41.945655]},n649:{id:"n649",loc:[-85.634247,41.945631]},n65:{id:"n65",loc:[-85.635398,41.943259]},n650:{id:"n650",loc:[-85.634889,41.945921]},n651:{id:"n651",loc:[-85.634889,41.945939]},n652:{id:"n652",loc:[-85.634889,41.945761]},n653:{id:"n653",loc:[-85.63489,41.945778]},n654:{id:"n654",loc:[-85.635112,41.945715]},n655:{id:"n655",loc:[-85.635025,41.945714]},n656:{id:"n656",loc:[-85.635027,41.945761]},n657:{id:"n657",loc:[-85.635438,41.945665]},n658:{id:"n658",loc:[-85.635416,41.945676]},n659:{id:"n659",loc:[-85.635401,41.945709]},n66:{id:"n66",loc:[-85.635336,41.943036]},n660:{id:"n660",loc:[-85.635271,41.945566]},n661:{id:"n661",loc:[-85.636106,41.946268]},n662:{id:"n662",loc:[-85.635867,41.946747]},n663:{id:"n663",loc:[-85.636476,41.946797]},n664:{id:"n664",loc:[-85.63651,41.946796]},n665:{id:"n665",loc:[-85.635367,41.946389]},n666:{id:"n666",loc:[-85.635367,41.946437]},n667:{id:"n667",loc:[-85.634787,41.946441]},n668:{id:"n668",loc:[-85.6358,41.946243]},n669:{id:"n669",loc:[-85.635784,41.94622]},n67:{id:"n67",loc:[-85.635911,41.942899]},n670:{id:"n670",loc:[-85.635727,41.946195]},n671:{id:"n671",loc:[-85.635708,41.946588]},n672:{id:"n672",loc:[-85.635648,41.946561]},n673:{id:"n673",loc:[-85.635624,41.946555]},n674:{id:"n674",loc:[-85.635417,41.946559]},n675:{id:"n675",loc:[-85.634866,41.946561]},n676:{id:"n676",loc:[-85.634866,41.946543]},n677:{id:"n677",loc:[-85.635085,41.946546]},n678:{id:"n678",loc:[-85.635085,41.946554]},n679:{id:"n679",loc:[-85.634584,41.94488]},n68:{id:"n68",loc:[-85.635915,41.943156]},n680:{id:"n680",loc:[-85.634557,41.944882]},n681:{id:"n681",loc:[-85.634455,41.944943]},n682:{id:"n682",loc:[-85.634305,41.944968]},n683:{id:"n683",loc:[-85.634261,41.944927]},n684:{id:"n684",loc:[-85.634132,41.944741]},n685:{id:"n685",loc:[-85.633705,41.944759]},n686:{id:"n686",loc:[-85.633918,41.944616]},n687:{id:"n687",loc:[-85.633974,41.944663]},n688:{id:"n688",loc:[-85.6336,41.944665]},n689:{id:"n689",loc:[-85.633817,41.944528]},n69:{id:"n69",loc:[-85.63631,41.943157]},n690:{id:"n690",loc:[-85.633889,41.944485]},n691:{id:"n691",loc:[-85.633931,41.944525]},n692:{id:"n692",loc:[-85.633864,41.944563]},n693:{id:"n693",loc:[-85.633456,41.944524]},n694:{id:"n694",loc:[-85.633676,41.944399]},n695:{id:"n695",loc:[-85.633352,41.944415]},n696:{id:"n696",loc:[-85.633655,41.944234]},n697:{id:"n697",loc:[-85.633761,41.94435]},n698:{id:"n698",loc:[-85.633254,41.944318]},n699:{id:"n699",loc:[-85.633472,41.944188]},n7:{id:"n7",loc:[-85.638791,41.943231]},n70:{id:"n70",loc:[-85.63579,41.942967]},n700:{id:"n700",loc:[-85.633524,41.944237]},n701:{id:"n701",loc:[-85.633583,41.944202]},n702:{id:"n702",loc:[-85.633632,41.944247]},n703:{id:"n703",loc:[-85.633165,41.944228]},n704:{id:"n704",loc:[-85.633388,41.944105]},n705:{id:"n705",loc:[-85.633117,41.944175]},n706:{id:"n706",loc:[-85.633302,41.944077]},n707:{id:"n707",loc:[-85.633352,41.944126]},n708:{id:"n708",loc:[-85.633052,41.944107]},n709:{id:"n709",loc:[-85.633237,41.944009]},n71:{id:"n71",loc:[-85.637506,41.942824]},n710:{id:"n710",loc:[-85.633187,41.943955]},n711:{id:"n711",loc:[-85.633,41.944054]},n712:{id:"n712",loc:[-85.633155,41.944265]},n713:{id:"n713",loc:[-85.633669,41.944765]},n714:{id:"n714",loc:[-85.634468,41.945503]},n715:{id:"n715",loc:[-85.63455,41.945566]},n716:{id:"n716",loc:[-85.634737,41.945729]},n717:{id:"n717",loc:[-85.634753,41.945752]},n718:{id:"n718",loc:[-85.634756,41.945781]},n719:{id:"n719",loc:[-85.634758,41.945978]},n72:{id:"n72",loc:[-85.637511,41.943056]},n720:{id:"n720",loc:[-85.634363,41.945548],tags:{crossing:"marked",highway:"crossing"}},n721:{id:"n721",loc:[-85.634245,41.945599]},n722:{id:"n722",loc:[-85.633474,41.944889]},n723:{id:"n723",loc:[-85.632997,41.944418]},n724:{id:"n724",loc:[-85.63278,41.944183]},n725:{id:"n725",loc:[-85.63331,41.944429]},n726:{id:"n726",loc:[-85.633568,41.944829],tags:{crossing:"marked",highway:"crossing"}},n727:{id:"n727",loc:[-85.634669,41.94567]},n728:{id:"n728",loc:[-85.634462,41.945787]},n729:{id:"n729",loc:[-85.634272,41.945625]},n73:{id:"n73",loc:[-85.637361,41.943058]},n730:{id:"n730",loc:[-85.634344,41.945699],tags:{crossing:"marked",highway:"crossing"}},n731:{id:"n731",loc:[-85.634426,41.945783]},n732:{id:"n732",loc:[-85.632425,41.944137]},n733:{id:"n733",loc:[-85.632302,41.944192]},n734:{id:"n734",loc:[-85.632762,41.944174]},n735:{id:"n735",loc:[-85.632713,41.944179]},n736:{id:"n736",loc:[-85.632411,41.944327]},n737:{id:"n737",loc:[-85.632362,41.944341]},n738:{id:"n738",loc:[-85.632236,41.944204]},n739:{id:"n739",loc:[-85.634939,41.942165]},n74:{id:"n74",loc:[-85.637356,41.942825]},n740:{id:"n740",loc:[-85.635079,41.941535]},n741:{id:"n741",loc:[-85.635112,41.941595]},n742:{id:"n742",loc:[-85.635113,41.941633]},n743:{id:"n743",loc:[-85.635067,41.941652]},n744:{id:"n744",loc:[-85.634989,41.941651]},n745:{id:"n745",loc:[-85.634921,41.941609]},n746:{id:"n746",loc:[-85.634881,41.941544]},n747:{id:"n747",loc:[-85.635537,41.940939]},n748:{id:"n748",loc:[-85.635573,41.941048]},n749:{id:"n749",loc:[-85.635453,41.94091]},n75:{id:"n75",loc:[-85.638097,41.942833]},n750:{id:"n750",loc:[-85.635319,41.940943]},n751:{id:"n751",loc:[-85.637057,41.943224]},n752:{id:"n752",loc:[-85.636989,41.943296]},n753:{id:"n753",loc:[-85.636851,41.943299]},n754:{id:"n754",loc:[-85.636848,41.94322]},n755:{id:"n755",loc:[-85.636986,41.943217]},n756:{id:"n756",loc:[-85.637569,41.943454]},n757:{id:"n757",loc:[-85.637437,41.943458]},n758:{id:"n758",loc:[-85.637432,41.943384]},n759:{id:"n759",loc:[-85.637564,41.94338]},n76:{id:"n76",loc:[-85.638098,41.942912]},n760:{id:"n760",loc:[-85.637213,41.943378]},n761:{id:"n761",loc:[-85.637217,41.943435]},n762:{id:"n762",loc:[-85.637235,41.943434]},n763:{id:"n763",loc:[-85.637237,41.943465]},n764:{id:"n764",loc:[-85.637424,41.943459]},n765:{id:"n765",loc:[-85.637418,41.943371]},n766:{id:"n766",loc:[-85.638094,41.943149]},n767:{id:"n767",loc:[-85.638096,41.943201]},n768:{id:"n768",loc:[-85.638041,41.943202]},n769:{id:"n769",loc:[-85.638042,41.943216]},n77:{id:"n77",loc:[-85.637705,41.942913]},n770:{id:"n770",loc:[-85.637927,41.943218]},n771:{id:"n771",loc:[-85.637926,41.943201]},n772:{id:"n772",loc:[-85.637897,41.943201]},n773:{id:"n773",loc:[-85.637896,41.943155]},n774:{id:"n774",loc:[-85.637962,41.943153]},n775:{id:"n775",loc:[-85.637962,41.943134]},n776:{id:"n776",loc:[-85.638017,41.943132]},n777:{id:"n777",loc:[-85.638018,41.943151]},n778:{id:"n778",loc:[-85.638045,41.943289]},n779:{id:"n779",loc:[-85.638048,41.943363]},n78:{id:"n78",loc:[-85.637705,41.942834]},n780:{id:"n780",loc:[-85.637842,41.943367]},n781:{id:"n781",loc:[-85.637839,41.943296]},n782:{id:"n782",loc:[-85.637896,41.943295]},n783:{id:"n783",loc:[-85.637897,41.943314]},n784:{id:"n784",loc:[-85.637957,41.943312]},n785:{id:"n785",loc:[-85.637957,41.943291]},n786:{id:"n786",loc:[-85.637816,41.943375]},n787:{id:"n787",loc:[-85.637815,41.943416]},n788:{id:"n788",loc:[-85.637715,41.943415]},n789:{id:"n789",loc:[-85.637716,41.943374]},n79:{id:"n79",loc:[-85.638071,41.942298]},n790:{id:"n790",loc:[-85.637912,41.943545]},n791:{id:"n791",loc:[-85.637909,41.943479]},n792:{id:"n792",loc:[-85.637967,41.943477]},n793:{id:"n793",loc:[-85.637967,41.94346]},n794:{id:"n794",loc:[-85.638077,41.943457]},n795:{id:"n795",loc:[-85.638078,41.943473]},n796:{id:"n796",loc:[-85.638124,41.943471]},n797:{id:"n797",loc:[-85.638126,41.943514]},n798:{id:"n798",loc:[-85.638079,41.943515]},n799:{id:"n799",loc:[-85.638079,41.943532]},n8:{id:"n8",loc:[-85.635241,41.941948]},n80:{id:"n80",loc:[-85.638074,41.942431]},n800:{id:"n800",loc:[-85.638028,41.943534]},n801:{id:"n801",loc:[-85.638028,41.943542]},n802:{id:"n802",loc:[-85.638845,41.942983]},n803:{id:"n803",loc:[-85.638846,41.94305]},n804:{id:"n804",loc:[-85.638661,41.943052]},n805:{id:"n805",loc:[-85.63866,41.942984]},n806:{id:"n806",loc:[-85.638579,41.942753]},n807:{id:"n807",loc:[-85.638445,41.942755]},n808:{id:"n808",loc:[-85.638452,41.942978]},n809:{id:"n809",loc:[-85.638545,41.942976]},n81:{id:"n81",loc:[-85.637836,41.942433]},n810:{id:"n810",loc:[-85.638543,41.942935]},n811:{id:"n811",loc:[-85.638571,41.942934]},n812:{id:"n812",loc:[-85.63857,41.942901]},n813:{id:"n813",loc:[-85.638611,41.9429]},n814:{id:"n814",loc:[-85.638607,41.942769]},n815:{id:"n815",loc:[-85.63858,41.94277]},n816:{id:"n816",loc:[-85.638597,41.942614]},n817:{id:"n817",loc:[-85.638601,41.94273]},n818:{id:"n818",loc:[-85.638686,41.942731]},n819:{id:"n819",loc:[-85.638689,41.942917]},n82:{id:"n82",loc:[-85.637835,41.94242]},n820:{id:"n820",loc:[-85.638558,41.943018]},n821:{id:"n821",loc:[-85.638243,41.943019]},n822:{id:"n822",loc:[-85.637536,41.943887]},n823:{id:"n823",loc:[-85.63749,41.943926]},n824:{id:"n824",loc:[-85.63743,41.943886]},n825:{id:"n825",loc:[-85.637476,41.943847]},n826:{id:"n826",loc:[-85.637527,41.943846]},n827:{id:"n827",loc:[-85.637141,41.943728]},n828:{id:"n828",loc:[-85.637201,41.943755]},n829:{id:"n829",loc:[-85.636987,41.943608]},n83:{id:"n83",loc:[-85.63776,41.942421]},n830:{id:"n830",loc:[-85.637441,41.943807]},n831:{id:"n831",loc:[-85.637673,41.94399]},n832:{id:"n832",loc:[-85.637783,41.944137]},n833:{id:"n833",loc:[-85.63845,41.944333]},n834:{id:"n834",loc:[-85.638159,41.944248]},n835:{id:"n835",loc:[-85.637859,41.94416]},n836:{id:"n836",loc:[-85.638685,41.944542]},n837:{id:"n837",loc:[-85.638714,41.944611]},n838:{id:"n838",loc:[-85.638711,41.944757]},n839:{id:"n839",loc:[-85.638774,41.945069]},n84:{id:"n84",loc:[-85.637758,41.942339]},n840:{id:"n840",loc:[-85.638742,41.945205]},n841:{id:"n841",loc:[-85.640267,41.942403]},n842:{id:"n842",loc:[-85.640154,41.942404]},n843:{id:"n843",loc:[-85.640152,41.942249]},n844:{id:"n844",loc:[-85.640266,41.942248]},n845:{id:"n845",loc:[-85.640366,41.942599]},n846:{id:"n846",loc:[-85.640362,41.942192]},n847:{id:"n847",loc:[-85.640146,41.942191]},n848:{id:"n848",loc:[-85.640122,41.942196]},n849:{id:"n849",loc:[-85.640108,41.942211]},n85:{id:"n85",loc:[-85.637836,41.942339]},n850:{id:"n850",loc:[-85.640101,41.942236]},n851:{id:"n851",loc:[-85.640103,41.94241]},n852:{id:"n852",loc:[-85.64011,41.942435]},n853:{id:"n853",loc:[-85.640126,41.942445]},n854:{id:"n854",loc:[-85.640153,41.942451]},n855:{id:"n855",loc:[-85.640183,41.942452]},n856:{id:"n856",loc:[-85.640364,41.942452]},n857:{id:"n857",loc:[-85.640007,41.942452]},n858:{id:"n858",loc:[-85.639449,41.942461]},n859:{id:"n859",loc:[-85.640049,41.942391]},n86:{id:"n86",loc:[-85.637835,41.942301]},n860:{id:"n860",loc:[-85.640052,41.942503]},n861:{id:"n861",loc:[-85.639575,41.94251]},n862:{id:"n862",loc:[-85.639572,41.942398]},n863:{id:"n863",loc:[-85.638782,41.942227]},n864:{id:"n864",loc:[-85.63843,41.942226]},n865:{id:"n865",loc:[-85.63823,41.942183]},n866:{id:"n866",loc:[-85.638363,41.942216],tags:{barrier:"gate"}},n867:{id:"n867",loc:[-85.6384,41.942223]},n868:{id:"n868",loc:[-85.636042,41.942797]},n869:{id:"n869",loc:[-85.636308,41.942752]},n87:{id:"n87",loc:[-85.637566,41.942367]},n870:{id:"n870",loc:[-85.636516,41.942729]},n871:{id:"n871",loc:[-85.636782,41.942712]},n872:{id:"n872",loc:[-85.636944,41.942706]},n873:{id:"n873",loc:[-85.63704,41.942706]},n874:{id:"n874",loc:[-85.637237,41.942703]},n875:{id:"n875",loc:[-85.637553,41.9427]},n876:{id:"n876",loc:[-85.638236,41.942697]},n877:{id:"n877",loc:[-85.636284,41.942781]},n878:{id:"n878",loc:[-85.636551,41.942641]},n879:{id:"n879",loc:[-85.633914,41.943693]},n88:{id:"n88",loc:[-85.637566,41.94241]},n880:{id:"n880",loc:[-85.63389,41.943708]},n881:{id:"n881",loc:[-85.633866,41.943686]},n882:{id:"n882",loc:[-85.63389,41.943671]},n883:{id:"n883",loc:[-85.633857,41.943609]},n884:{id:"n884",loc:[-85.634858,41.944474]},n885:{id:"n885",loc:[-85.633988,41.943234]},n886:{id:"n886",loc:[-85.633999,41.943485]},n887:{id:"n887",loc:[-85.634109,41.943449],tags:{emergency:"fire_hydrant"}},n888:{id:"n888",loc:[-85.635728,41.942655],tags:{emergency:"fire_hydrant"}},n889:{id:"n889",loc:[-85.636499,41.942845],tags:{man_made:"flagpole"}},n89:{id:"n89",loc:[-85.637455,41.94241]},n890:{id:"n890",loc:[-85.636197,41.943073]},n891:{id:"n891",loc:[-85.636227,41.943073]},n892:{id:"n892",loc:[-85.637433,41.942933],tags:{"addr:city":"Three Rivers","addr:housenumber":"401","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",amenity:"restaurant",cuisine:"pizza",name:"Pizza Hut",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut"}},n893:{id:"n893",loc:[-85.637907,41.942879],tags:{amenity:"car_wash"}},n894:{id:"n894",loc:[-85.637661,41.943018]},n895:{id:"n895",loc:[-85.636933,41.942733],tags:{emergency:"fire_hydrant"}},n896:{id:"n896",loc:[-85.637661,41.94304]},n897:{id:"n897",loc:[-85.637562,41.943041]},n898:{id:"n898",loc:[-85.637556,41.942725]},n899:{id:"n899",loc:[-85.637656,41.942724]},n9:{id:"n9",loc:[-85.635159,41.941926]},n90:{id:"n90",loc:[-85.637454,41.942367]},n900:{id:"n900",loc:[-85.637657,41.942779]},n901:{id:"n901",loc:[-85.637983,41.942777]},n902:{id:"n902",loc:[-85.637982,41.942616]},n903:{id:"n903",loc:[-85.637777,41.942778]},n904:{id:"n904",loc:[-85.637775,41.942699]},n905:{id:"n905",loc:[-85.637772,41.942618]},n906:{id:"n906",loc:[-85.637982,41.942698]},n907:{id:"n907",loc:[-85.637941,41.942378],tags:{"addr:city":"Three Rivers","addr:housenumber":"416","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",name:"Gem Pawnbroker",shop:"pawnbroker"}},n908:{id:"n908",loc:[-85.637515,41.942394],tags:{second_hand:"only",shop:"car"}},n909:{id:"n909",loc:[-85.638743,41.942374],tags:{"addr:city":"Three Rivers","addr:housenumber":"500","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",name:"William Towing","service:vehicle:towing":"yes","service:vehicle:tyres":"yes",shop:"car_repair"}},n91:{id:"n91",loc:[-85.637565,41.942341]},n910:{id:"n910",loc:[-85.638594,41.942357]},n911:{id:"n911",loc:[-85.634312,41.943562],tags:{"addr:city":"Three Rivers","addr:housenumber":"145","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",amenity:"cafe",cuisine:"coffee_shop",name:"L.A.'s Coffee Cafe",outdoor_seating:"yes"}},n912:{id:"n912",loc:[-85.634404,41.943512]},n913:{id:"n913",loc:[-85.634391,41.943519],tags:{entrance:"yes"}},n914:{id:"n914",loc:[-85.634259,41.943538],tags:{entrance:"yes"}},n915:{id:"n915",loc:[-85.634247,41.943528]},n916:{id:"n916",loc:[-85.633747,41.943322],tags:{"addr:city":"Three Rivers","addr:housenumber":"132","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",name:"Preferred Insurance Services",office:"insurance"}},n917:{id:"n917",loc:[-85.63299,41.943686],tags:{"addr:city":"Three Rivers","addr:housenumber":"101","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Lynn's Garage","service:vehicle:tyres":"yes",shop:"car_repair"}},n918:{id:"n918",loc:[-85.633438,41.944883]},n919:{id:"n919",loc:[-85.633265,41.944983]},n92:{id:"n92",loc:[-85.637481,41.942341]},n920:{id:"n920",loc:[-85.633315,41.945027]},n921:{id:"n921",loc:[-85.633376,41.944827]},n922:{id:"n922",loc:[-85.633199,41.944922]},n923:{id:"n923",loc:[-85.633316,41.944772]},n924:{id:"n924",loc:[-85.633147,41.944867]},n925:{id:"n925",loc:[-85.633261,41.944719]},n926:{id:"n926",loc:[-85.633096,41.944812]},n927:{id:"n927",loc:[-85.633191,41.944645]},n928:{id:"n928",loc:[-85.632981,41.94476]},n929:{id:"n929",loc:[-85.633062,41.94483]},n93:{id:"n93",loc:[-85.637481,41.94226]},n930:{id:"n930",loc:[-85.633146,41.944602]},n931:{id:"n931",loc:[-85.632969,41.944703]},n932:{id:"n932",loc:[-85.633008,41.944745]},n933:{id:"n933",loc:[-85.633088,41.944545]},n934:{id:"n934",loc:[-85.632868,41.944655]},n935:{id:"n935",loc:[-85.632941,41.944718]},n936:{id:"n936",loc:[-85.633028,41.944483]},n937:{id:"n937",loc:[-85.632817,41.944605]},n938:{id:"n938",loc:[-85.632923,41.944373]},n939:{id:"n939",loc:[-85.632692,41.944485]},n94:{id:"n94",loc:[-85.637565,41.94226]},n940:{id:"n940",loc:[-85.632871,41.944316]},n941:{id:"n941",loc:[-85.632655,41.944421]},n942:{id:"n942",loc:[-85.632711,41.944478]},n943:{id:"n943",loc:[-85.632825,41.94426]},n944:{id:"n944",loc:[-85.632606,41.944363]},n945:{id:"n945",loc:[-85.63275,41.94418]},n946:{id:"n946",loc:[-85.632588,41.944256]},n947:{id:"n947",loc:[-85.632611,41.944279]},n948:{id:"n948",loc:[-85.632548,41.944306]},n949:{id:"n949",loc:[-85.632512,41.944406]},n95:{id:"n95",loc:[-85.637188,41.942217]},n950:{id:"n950",loc:[-85.632565,41.944463]},n951:{id:"n951",loc:[-85.632579,41.944456]},n952:{id:"n952",loc:[-85.632634,41.944518]},n953:{id:"n953",loc:[-85.632686,41.944569]},n954:{id:"n954",loc:[-85.632745,41.944537]},n955:{id:"n955",loc:[-85.632659,41.944587]},n956:{id:"n956",loc:[-85.632778,41.944705]},n957:{id:"n957",loc:[-85.632815,41.944301],tags:{"addr:city":"Three Rivers","addr:housenumber":"5","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Access Point Employment",office:"employment_agency"}},n958:{id:"n958",loc:[-85.6332,41.944174],tags:{"addr:city":"Three Rivers","addr:housenumber":"6","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Paisley Emporium",shop:"second_hand"}},n959:{id:"n959",loc:[-85.633578,41.944568],tags:{"addr:city":"Three Rivers","addr:housenumber":"22","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Lowry's Books",shop:"books"}},n96:{id:"n96",loc:[-85.637189,41.942303]},n960:{id:"n960",loc:[-85.63344,41.944443],tags:{"addr:city":"Three Rivers","addr:housenumber":"16","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",amenity:"restaurant",cuisine:"pizza",name:"Paisano's Bar and Grill"}},n961:{id:"n961",loc:[-85.633009,41.944542],tags:{"addr:city":"Three Rivers","addr:housenumber":"13","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",amenity:"cafe",cuisine:"american",internet_access:"yes",name:"Main Street Cafe"}},n962:{id:"n962",loc:[-85.633674,41.944682],tags:{"addr:city":"Three Rivers","addr:housenumber":"28","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",leisure:"fitness_centre",name:"Main Street Fitness"}},n963:{id:"n963",loc:[-85.633376,41.944868],tags:{"addr:city":"Three Rivers","addr:housenumber":"27","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",leisure:"fitness_centre",name:"Main Street Barbell"}},n964:{id:"n964",loc:[-85.633366,41.944783]},n965:{id:"n965",loc:[-85.633296,41.94482]},n966:{id:"n966",loc:[-85.633214,41.94487]},n967:{id:"n967",loc:[-85.633005,41.944988]},n968:{id:"n968",loc:[-85.633269,41.944816]},n969:{id:"n969",loc:[-85.633215,41.944842]},n97:{id:"n97",loc:[-85.637299,41.942302]},n970:{id:"n970",loc:[-85.633245,41.944871]},n971:{id:"n971",loc:[-85.633296,41.944845]},n972:{id:"n972",loc:[-85.633254,41.944845],tags:{natural:"tree"}},n973:{id:"n973",loc:[-85.633557,41.945515]},n974:{id:"n974",loc:[-85.633279,41.945246]},n975:{id:"n975",loc:[-85.63324,41.945226]},n976:{id:"n976",loc:[-85.6332,41.945213]},n977:{id:"n977",loc:[-85.633133,41.945164]},n978:{id:"n978",loc:[-85.63312,41.945132]},n979:{id:"n979",loc:[-85.633095,41.945081]},n98:{id:"n98",loc:[-85.637299,41.942314]},n980:{id:"n980",loc:[-85.633064,41.945047]},n981:{id:"n981",loc:[-85.632739,41.944742]},n982:{id:"n982",loc:[-85.633281,41.945026]},n983:{id:"n983",loc:[-85.633155,41.944903]},n984:{id:"n984",loc:[-85.633079,41.944829]},n985:{id:"n985",loc:[-85.63304,41.944853]},n986:{id:"n986",loc:[-85.632949,41.944776]},n987:{id:"n987",loc:[-85.632921,41.944725]},n988:{id:"n988",loc:[-85.632859,41.944673]},n989:{id:"n989",loc:[-85.632895,41.94505]},n99:{id:"n99",loc:[-85.637396,41.942313]},n990:{id:"n990",loc:[-85.633336,41.945138]},n991:{id:"n991",loc:[-85.633466,41.945265]},n992:{id:"n992",loc:[-85.633367,41.945327]},n993:{id:"n993",loc:[-85.633163,41.945189]},n994:{id:"n994",loc:[-85.633678,41.945309]},n995:{id:"n995",loc:[-85.633619,41.945261]},n996:{id:"n996",loc:[-85.63355,41.945301]},n997:{id:"n997",loc:[-85.633607,41.945352]},n998:{id:"n998",loc:[-85.633579,41.945327],tags:{entrance:"yes"}},n999:{id:"n999",loc:[-85.633445,41.945404]},r2:{id:"r2",members:[{id:"w225",role:"outer",type:"way"}],tags:{type:"multipolygon",natural:"water",water:"river"}},r5:{id:"r5",members:[{id:"w642",role:"outer",type:"way"}],tags:{admin_level:"8",border_type:"city",boundary:"administrative",name:"Three Rivers",place:"city",type:"boundary"}},w1:{id:"w1",nodes:["n5","n1797"],tags:{highway:"residential",name:"12th Avenue"}},w10:{id:"w10",nodes:["n54","n55","n56","n57","n891","n890","n54"],tags:{building:"yes"}},w100:{id:"w100",nodes:["n451","n915","n452"],tags:{highway:"footway"}},w101:{id:"w101",nodes:["n461","n462","n463","n464","n465","n466"],tags:{barrier:"fence"}},w102:{id:"w102",nodes:["n467","n468","n469","n470","n472","n467"],tags:{amenity:"parking"}},w103:{id:"w103",nodes:["n2597","n2444","n471","n472"],tags:{highway:"footway"}},w104:{id:"w104",nodes:["n473","n474","n325"],tags:{footway:"sidewalk",highway:"footway"}},w105:{id:"w105",nodes:["n475","n324","n325"],tags:{footway:"sidewalk",highway:"footway"}},w106:{id:"w106",nodes:["n886","n452","n476"],tags:{footway:"sidewalk",highway:"footway"}},w107:{id:"w107",nodes:["n485","n4678","n486","n18"],tags:{highway:"service"}},w108:{id:"w108",nodes:["n300","n487","n488","n489","n490"],tags:{highway:"footway"}},w109:{id:"w109",nodes:["n490","n491"],tags:{highway:"footway"}},w11:{id:"w11",nodes:["n58","n63","n59","n315","n60"],tags:{highway:"service"}},w110:{id:"w110",nodes:["n492","n493","n494","n495","n496","n497","n492"],tags:{building:"yes"}},w111:{id:"w111",nodes:["n498","n499","n511"],tags:{highway:"service"}},w112:{id:"w112",nodes:["n510","n500","n501","n502","n503","n504","n505","n506","n507","n508","n509"],tags:{highway:"service"}},w113:{id:"w113",nodes:["n511","n510"],tags:{covered:"yes",highway:"service"}},w114:{id:"w114",nodes:["n512","n513","n514","n515","n512"],tags:{building:"yes"}},w115:{id:"w115",nodes:["n516","n517","n518","n519","n516"],tags:{building:"yes"}},w116:{id:"w116",nodes:["n520","n521","n522","n523","n520"],tags:{building:"yes"}},w117:{id:"w117",nodes:["n524","n525","n526","n527","n528","n529","n530","n531","n532","n533","n534","n535","n524"],tags:{building:"yes"}},w118:{id:"w118",nodes:["n536","n537","n538","n539","n536"],tags:{building:"yes"}},w119:{id:"w119",nodes:["n540","n541","n542","n543","n544","n545","n546","n547","n540"],tags:{building:"yes"}},w12:{id:"w12",nodes:["n61","n314","n70","n62","n63"],tags:{highway:"service"}},w120:{id:"w120",nodes:["n548","n549","n550","n551","n552","n553","n554","n555","n556","n557","n548"],tags:{building:"yes"}},w121:{id:"w121",nodes:["n558","n559","n560","n561","n562","n563","n564","n565","n558"],tags:{building:"yes"}},w122:{id:"w122",nodes:["n566","n567","n568","n569","n566"],tags:{building:"yes"}},w123:{id:"w123",nodes:["n570","n571","n572","n573","n570"],tags:{building:"yes"}},w124:{id:"w124",nodes:["n574","n575","n576","n577","n574"],tags:{building:"yes"}},w125:{id:"w125",nodes:["n578","n579","n580","n581","n578"],tags:{building:"yes"}},w126:{id:"w126",nodes:["n582","n583","n584","n585","n582"],tags:{building:"yes"}},w127:{id:"w127",nodes:["n586","n587","n588","n589","n590","n591","n592","n593","n586"],tags:{building:"yes"}},w128:{id:"w128",nodes:["n594","n595","n596","n597","n598","n599","n600","n601","n594"],tags:{building:"yes"}},w129:{id:"w129",nodes:["n309","n602","n603"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w13:{id:"w13",nodes:["n64","n65","n66","n67","n68","n69","n64"],tags:{amenity:"parking"}},w130:{id:"w130",nodes:["n603","n604"],tags:{footway:"sidewalk",highway:"footway"}},w131:{id:"w131",nodes:["n604","n605","n606"],tags:{footway:"sidewalk",highway:"footway"}},w132:{id:"w132",nodes:["n606","n607"],tags:{footway:"sidewalk",highway:"footway"}},w133:{id:"w133",nodes:["n607","n610","n608","n603"],tags:{footway:"sidewalk",highway:"footway"}},w134:{id:"w134",nodes:["n609","n610","n611"],tags:{highway:"service",service:"driveway",surface:"unpaved"}},w135:{id:"w135",nodes:["n244","n245","n246"],tags:{highway:"service"}},w136:{id:"w136",nodes:["n612","n613","n614","n615","n612"],tags:{amenity:"shelter",building:"yes"}},w137:{id:"w137",nodes:["n2779","n2788","n2776","n2778","n2775","n2787","n2440","n2437","n629","n2438","n630","n2439","n2407","n2408","n2409"],tags:{highway:"residential",name:"Foster Street"}},w138:{id:"w138",nodes:["n2779","n625","n626","n627"],tags:{highway:"residential",name:"Foster Street",oneway:"yes"}},w139:{id:"w139",nodes:["n630","n631","n632","n2437"],tags:{highway:"service"}},w14:{id:"w14",nodes:["n71","n72","n73","n74","n71"],tags:{building:"yes"}},w140:{id:"w140",nodes:["n643","n637","n715","n2410"],tags:{highway:"footway",name:"Mural Mall"}},w141:{id:"w141",nodes:["n639","n2516"],tags:{barrier:"wall"}},w142:{id:"w142",nodes:["n640","n641","n645","n642","n660","n643","n644"],tags:{highway:"service"}},w143:{id:"w143",nodes:["n646","n647"],tags:{highway:"service"}},w144:{id:"w144",nodes:["n654","n655","n656"],tags:{barrier:"wall"}},w145:{id:"w145",nodes:["n665","n666","n667"],tags:{barrier:"wall"}},w146:{id:"w146",nodes:["n2727","n662","n2719"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w147:{id:"w147",nodes:["n2725","n674"],tags:{highway:"service",oneway:"yes"}},w148:{id:"w148",nodes:["n2464","n2460","n2454","n684","n2455","n2464"],tags:{building:"yes"}},w149:{id:"w149",nodes:["n2456","n685","n686","n687","n2456"],tags:{building:"yes"}},w15:{id:"w15",nodes:["n75","n76","n77","n78","n75"],tags:{building:"yes"}},w150:{id:"w150",nodes:["n685","n688","n689","n690","n691","n692","n686","n685"],tags:{building:"yes"}},w151:{id:"w151",nodes:["n688","n693","n694","n689","n688"],tags:{building:"yes"}},w152:{id:"w152",nodes:["n693","n695","n702","n696","n697","n694","n693"],tags:{building:"yes"}},w153:{id:"w153",nodes:["n695","n698","n699","n700","n701","n702","n695"],tags:{building:"yes"}},w154:{id:"w154",nodes:["n698","n703","n707","n704","n699","n698"],tags:{building:"yes"}},w155:{id:"w155",nodes:["n703","n705","n706","n707","n703"],tags:{building:"yes"}},w156:{id:"w156",nodes:["n705","n708","n709","n706","n705"],tags:{building:"yes"}},w157:{id:"w157",nodes:["n709","n710","n711","n708","n709"],tags:{building:"yes"}},w158:{id:"w158",nodes:["n369","n712","n725","n713","n714","n715","n727","n716","n717","n718","n719"],tags:{footway:"sidewalk",highway:"footway"}},w159:{id:"w159",nodes:["n714","n720","n721"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w16:{id:"w16",nodes:["n79","n80","n81","n82","n83","n84","n85","n86","n79"],tags:{building:"yes"}},w160:{id:"w160",nodes:["n729","n721","n722","n964","n723","n724"],tags:{footway:"sidewalk",highway:"footway"}},w161:{id:"w161",nodes:["n713","n726","n722"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w162:{id:"w162",nodes:["n727","n2411","n728"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w163:{id:"w163",nodes:["n729","n730","n731"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w164:{id:"w164",nodes:["n365","n732","n733","n738"],tags:{footway:"sidewalk",highway:"footway"}},w165:{id:"w165",nodes:["n724","n734","n367","n735","n736","n737"],tags:{footway:"sidewalk",highway:"footway"}},w166:{id:"w166",nodes:["n739","n2037","n2038","n2039","n2040","n1623","n2032"],tags:{highway:"footway"}},w167:{id:"w167",nodes:["n150","n751"],tags:{highway:"service"}},w168:{id:"w168",nodes:["n752","n753","n754","n755","n752"],tags:{building:"yes"}},w169:{id:"w169",nodes:["n756","n757","n758","n759","n756"],tags:{building:"yes"}},w17:{id:"w17",nodes:["n87","n88","n89","n90","n87"],tags:{building:"yes"}},w170:{id:"w170",nodes:["n760","n761","n762","n763","n764","n765","n760"],tags:{building:"yes"}},w171:{id:"w171",nodes:["n766","n767","n768","n769","n770","n771","n772","n773","n774","n775","n776","n777","n766"],tags:{building:"yes"}},w172:{id:"w172",nodes:["n778","n779","n780","n781","n782","n783","n784","n785","n778"],tags:{building:"yes"}},w173:{id:"w173",nodes:["n786","n787","n788","n789","n786"],tags:{building:"yes"}},w174:{id:"w174",nodes:["n790","n791","n792","n793","n794","n795","n796","n797","n798","n799","n800","n801","n790"],tags:{building:"yes"}},w175:{id:"w175",nodes:["n802","n803","n804","n805","n802"],tags:{building:"yes"}},w176:{id:"w176",nodes:["n806","n807","n808","n809","n810","n811","n812","n813","n814","n815","n806"],tags:{building:"yes"}},w177:{id:"w177",nodes:["n816","n1140","n817","n818","n819","n820","n821"],tags:{highway:"service"}},w178:{id:"w178",nodes:["n822","n823","n824","n825","n822"],tags:{building:"yes"}},w179:{id:"w179",nodes:["n841","n842","n843","n844","n841"],tags:{building:"yes"}},w18:{id:"w18",nodes:["n91","n92","n93","n94","n91"],tags:{building:"yes"}},w180:{id:"w180",nodes:["n845","n856","n846"],tags:{highway:"service"}},w181:{id:"w181",nodes:["n846","n847","n848","n849","n850","n851","n852","n853","n854","n855","n856"],tags:{highway:"service",oneway:"yes",service:"drive-through"}},w182:{id:"w182",nodes:["n857","n858"],tags:{highway:"service"}},w183:{id:"w183",nodes:["n859","n860","n861","n862","n859"],tags:{amenity:"parking"}},w184:{id:"w184",nodes:["n863","n864","n867","n866","n865"],tags:{highway:"service"}},w185:{id:"w185",nodes:["n883","n884"],tags:{barrier:"fence"}},w186:{id:"w186",nodes:["n1954","n622","n1955"],tags:{highway:"path",name:"Riverwalk Trail"}},w187:{id:"w187",nodes:["n621","n1954"],tags:{highway:"steps",incline:"up",name:"Riverwalk Trail",surface:"wood"}},w188:{id:"w188",nodes:["n2274","n2275","n2276","n2277","n2278","n2279","n1953","n621"],tags:{highway:"path",name:"Riverwalk Trail",surface:"wood"}},w189:{id:"w189",nodes:["n2273","n2274"],tags:{highway:"steps",incline:"down",name:"Riverwalk Trail",surface:"wood"}},w19:{id:"w19",nodes:["n95","n96","n97","n98","n99","n100","n101","n102","n95"],tags:{building:"yes"}},w190:{id:"w190",nodes:["n821","n894","n900","n903","n901"],tags:{highway:"service"}},w191:{id:"w191",nodes:["n896","n897","n898","n899","n900","n894","n896"],tags:{amenity:"parking"}},w192:{id:"w192",nodes:["n903","n904","n905"],tags:{highway:"service"}},w193:{id:"w193",nodes:["n901","n906","n902"],tags:{highway:"service"}},w194:{id:"w194",nodes:["n912","n913"],tags:{highway:"footway"}},w195:{id:"w195",nodes:["n914","n915"],tags:{highway:"footway"}},w196:{id:"w196",nodes:["n2466","n918","n919","n920","n2466"],tags:{building:"yes"}},w197:{id:"w197",nodes:["n918","n921","n922","n919","n918"],tags:{building:"yes"}},w198:{id:"w198",nodes:["n923","n925","n926","n924","n923"],tags:{building:"yes"}},w199:{id:"w199",nodes:["n925","n927","n932","n928","n929","n926","n925"],tags:{building:"yes"}},w2:{id:"w2",nodes:["n3523","n2182","n2160"],tags:{highway:"service"}},w20:{id:"w20",nodes:["n103","n104","n105","n106","n107","n108","n109","n110","n111","n112","n113","n114","n103"],tags:{building:"yes"}},w200:{id:"w200",nodes:["n927","n930","n931","n932","n927"],tags:{building:"yes"}},w201:{id:"w201",nodes:["n930","n933","n934","n935","n931","n930"],tags:{building:"yes"}},w202:{id:"w202",nodes:["n933","n936","n937","n934","n933"],tags:{building:"yes"}},w203:{id:"w203",nodes:["n936","n938","n942","n939","n954","n937","n936"],tags:{building:"yes"}},w204:{id:"w204",nodes:["n938","n940","n941","n942","n938"],tags:{building:"yes"}},w205:{id:"w205",nodes:["n940","n943","n944","n941","n940"],tags:{building:"yes"}},w206:{id:"w206",nodes:["n943","n945","n946","n947","n948","n944","n943"],tags:{building:"yes"}},w207:{id:"w207",nodes:["n944","n949","n950","n951","n941","n944"],tags:{building:"yes"}},w208:{id:"w208",nodes:["n941","n951","n952","n939","n942","n941"],tags:{building:"yes"}},w209:{id:"w209",nodes:["n952","n953","n954","n939","n952"],tags:{building:"yes"}},w21:{id:"w21",nodes:["n115","n116","n117","n118","n115"],tags:{building:"yes"}},w210:{id:"w210",nodes:["n953","n955","n956","n934","n937","n954","n953"],tags:{building:"yes"}},w211:{id:"w211",nodes:["n964","n965"],tags:{highway:"footway"}},w212:{id:"w212",nodes:["n966","n983","n967","n989"],tags:{highway:"footway"}},w213:{id:"w213",nodes:["n965","n968","n969","n966","n970","n971","n965"],tags:{highway:"footway"}},w214:{id:"w214",nodes:["n973","n999","n992","n974","n975","n976","n993","n977","n978","n979","n980","n967","n981","n1000","n1001","n1002","n1003","n1004","n1005","n1006","n1007","n1008","n1009"],tags:{footway:"sidewalk",highway:"footway"}},w215:{id:"w215",nodes:["n978","n982","n983","n984","n985","n986","n987","n988","n981"],tags:{highway:"footway"}},w216:{id:"w216",nodes:["n976","n990","n991","n992"],tags:{highway:"footway"}},w217:{id:"w217",nodes:["n998","n999"],tags:{highway:"footway"}},w218:{id:"w218",nodes:["n1019","n3355","n1020"],tags:{footway:"sidewalk",highway:"footway"}},w219:{id:"w219",nodes:["n719","n1026","n1027"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w22:{id:"w22",nodes:["n119","n120","n121","n122","n119"],tags:{building:"yes"}},w220:{id:"w220",nodes:["n1027","n1028","n1019"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w221:{id:"w221",nodes:["n2080","n1828","n1863","n1829"],tags:{highway:"tertiary",name:"Constantine Street"}},w222:{id:"w222",nodes:["n1029","n1030","n1031"],tags:{highway:"service"}},w223:{id:"w223",nodes:["n2213","n2171","n2183","n2180","n2205","n2177","n2179","n2218","n2200","n2188","n2169","n2196","n2162","n2170","n2211","n2216","n2204","n2220","n2164","n2210","n2217","n2189","n460","n453","n2282"],tags:{name:"Rocky River",waterway:"river"}},w224:{id:"w224",nodes:["n3750","n3751","n3752"],tags:{highway:"service",service:"alley",surface:"unpaved"}},w225:{id:"w225",nodes:["n2134","n2127","n2313","n2109","n2112","n2129","n2156","n2146","n2126","n2153","n2288","n2283","n2284","n2131","n2286","n2287","n2285","n2132","n2140","n2289","n2122","n2114","n2149","n2119","n2106","n2111","n2145","n2113","n2117","n2159","n2143","n2123","n2142","n2116","n2154","n2139","n2150","n2157","n2120","n2138","n2130","n2136","n2155","n2107","n2141","n2124","n3754","n2121","n2105","n2108","n3755","n2128","n2110","n2152","n2125","n2135","n2186","n2115","n2144","n2137","n2133","n2148","n2118","n1871","n1875","n1872","n2041","n1873","n2042","n1874","n1884","n1870","n2151","n2147","n2158","n2104","n2134"]},w226:{id:"w226",nodes:["n2243","n2280","n2244","n2245","n2246","n2247","n1931","n1932","n1933","n1934","n1935","n1936","n1937","n1938","n4681","n1939","n1940","n1941","n1942","n1943","n1944","n1945","n1946","n1947"],tags:{highway:"path",name:"Riverwalk Trail",surface:"asphalt",width:"3"}},w227:{id:"w227",nodes:["n2994","n3012","n3011","n2958"],tags:{highway:"secondary",name:"Main Street"}},w228:{id:"w228",nodes:["n2747","n2762","n2757","n2746","n2761","n2758","n2760","n2755","n2749","n2691","n1028","n2432","n2414","n2413","n2412","n2411","n2410","n720","n726","n370","n368","n2748"],tags:{highway:"primary",name:"Main Street"}},w229:{id:"w229",nodes:["n2083","n2103","n2102","n2084","n2085","n2086","n2087","n2242","n471","n324","n2101","n332","n1868"],tags:{name:"Conrail Railroad",railway:"rail"}},w23:{id:"w23",nodes:["n123","n124","n125","n126","n123"],tags:{building:"yes"}},w230:{id:"w230",nodes:["n2232","n2236","n2231","n2230","n2226","n2241","n2237","n2227","n1182","n2233","n2228","n2229","n1183","n2234","n19","n1891","n20","n2223","n2224","n2238","n2235","n2240","n2225","n2239"],tags:{name:"Saint Joseph River",waterway:"river"}},w231:{id:"w231",nodes:["n456","n1036","n1037","n1038"],tags:{barrier:"wall"}},w232:{id:"w232",nodes:["n1034","n1039","n1040"],tags:{barrier:"wall"}},w233:{id:"w233",nodes:["n1041","n1042","n1043","n1044","n1045","n1046","n1041"],tags:{access:"private",leisure:"swimming_pool"}},w234:{id:"w234",nodes:["n1047","n1048"],tags:{barrier:"hedge"}},w235:{id:"w235",nodes:["n1049","n1050","n1051","n1052","n1049"],tags:{building:"yes"}},w236:{id:"w236",nodes:["n1053","n1054","n1055","n1056","n1057","n1058","n1059","n1060","n1053"],tags:{building:"yes"}},w237:{id:"w237",nodes:["n1061","n1062","n1063","n1064","n1065","n1061"],tags:{building:"yes"}},w238:{id:"w238",nodes:["n1066","n1067","n1068","n1069","n1070","n1071","n1066"],tags:{building:"yes"}},w239:{id:"w239",nodes:["n1072","n1073","n1074","n1075","n1072"],tags:{building:"yes"}},w24:{id:"w24",nodes:["n127","n128","n129","n130","n127"],tags:{building:"yes"}},w240:{id:"w240",nodes:["n1076","n1077","n1078","n1079","n1080","n1081","n1076"],tags:{building:"yes"}},w241:{id:"w241",nodes:["n1082","n1083","n1084","n1085","n1082"],tags:{building:"yes"}},w242:{id:"w242",nodes:["n1086","n1087","n1088","n1089","n1086"],tags:{building:"yes"}},w243:{id:"w243",nodes:["n1090","n1091","n1092","n1093","n1094","n1095","n1096","n1097","n1090"],tags:{building:"yes"}},w244:{id:"w244",nodes:["n1098","n1099","n1100","n1101"],tags:{barrier:"fence"}},w245:{id:"w245",nodes:["n1102","n835","n30","n2590","n35","n29","n2591","n34","n28","n2592","n2312","n32","n2593","n31","n33","n2594","n2595","n1102"],tags:{highway:"service"}},w246:{id:"w246",nodes:["n1103","n1139","n1104"],tags:{barrier:"fence"}},w247:{id:"w247",nodes:["n1105","n1106","n1107","n1108","n1109","n1110","n1111","n1112","n1113","n1114","n1105"],tags:{building:"yes"}},w248:{id:"w248",nodes:["n1115","n1116","n1117","n1118","n1119","n1120","n1115"],tags:{building:"yes"}},w249:{id:"w249",nodes:["n1121","n1122","n1123","n1124","n1121"],tags:{building:"yes"}},w25:{id:"w25",nodes:["n131","n132","n133","n134","n135","n136","n137","n138","n139","n140","n141","n142","n131"],tags:{building:"yes"}},w250:{id:"w250",nodes:["n1125","n1126","n1127","n1128","n1129","n1130","n1131","n1132","n1133","n1134","n1135","n1136","n1125"],tags:{building:"yes"}},w251:{id:"w251",nodes:["n1137","n1138","n1139"],tags:{barrier:"fence"}},w252:{id:"w252",nodes:["n876","n1140","n1141"],tags:{footway:"sidewalk",highway:"footway"}},w253:{id:"w253",nodes:["n1141","n1142","n1143","n1144","n1145","n1146"],tags:{footway:"sidewalk",highway:"footway"}},w254:{id:"w254",nodes:["n1146","n4743","n1147","n1148"],tags:{footway:"sidewalk",highway:"footway"}},w255:{id:"w255",nodes:["n1148","n1149","n1150","n1151"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w256:{id:"w256",nodes:["n1151","n1153","n1154","n1155"],tags:{footway:"sidewalk",highway:"footway"}},w257:{id:"w257",nodes:["n1155","n1156"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w258:{id:"w258",nodes:["n1157","n1158"],tags:{barrier:"retaining_wall"}},w259:{id:"w259",nodes:["n1156","n1161","n1159","n1160","n719"],tags:{footway:"sidewalk",highway:"footway"}},w26:{id:"w26",nodes:["n143","n608","n144"],tags:{highway:"service"}},w260:{id:"w260",nodes:["n1162","n1163","n1164","n1165","n1166","n1167","n1168","n1169","n1170","n2528"],tags:{highway:"footway"}},w261:{id:"w261",nodes:["n1171","n1172","n1173"],tags:{barrier:"wall"}},w262:{id:"w262",nodes:["n1175","n1176","n1177","n1178","n1179","n1180","n1181","n1175"],tags:{natural:"wood"}},w263:{id:"w263",nodes:["n1947","n1184","n1948","n1185","n1949","n1957","n1950","n480","n1951","n479","n478","n477","n1952","n1851","n1956","n2248","n619","n618","n2249","n2250","n2251","n617","n2252","n616","n2253","n829","n2254","n827","n828","n2255","n830","n2256","n826","n2257","n831","n2258","n832","n835","n834","n2312","n2267","n2259","n833","n2268","n2260","n836","n2261","n837","n2262","n838","n2263","n2264","n839","n2265","n840","n2266"],tags:{highway:"path",name:"Riverwalk Trail",surface:"asphalt",width:"3"}},w264:{id:"w264",nodes:["n1186","n1187","n1188","n1189","n1186"],tags:{building:"yes"}},w265:{id:"w265",nodes:["n1190","n1191","n1192","n1193","n1190"],tags:{building:"yes"}},w266:{id:"w266",nodes:["n1194","n1195","n1196","n1197","n1198","n1199","n1200","n1201","n1194"],tags:{building:"yes"}},w267:{id:"w267",nodes:["n1205","n1206","n1207","n1208","n1209","n1210","n1205"],tags:{building:"house"}},w268:{id:"w268",nodes:["n1211","n1212","n1213","n1214","n1215","n1216","n1217","n1218","n1219","n1220","n1211"],tags:{building:"house"}},w269:{id:"w269",nodes:["n1221","n1225","n1222","n1223","n1224","n1221"],tags:{building:"house"}},w27:{id:"w27",nodes:["n145","n147","n146"],tags:{highway:"footway"}},w270:{id:"w270",nodes:["n1225","n1226","n1227","n1229","n1228"],tags:{barrier:"fence"}},w271:{id:"w271",nodes:["n1229","n1230"],tags:{barrier:"fence"}},w272:{id:"w272",nodes:["n1231","n1232","n1233","n1234","n1235","n1236","n1237","n1238","n1231"],tags:{building:"house"}},w273:{id:"w273",nodes:["n1239","n1240","n1241","n1242","n1243","n1244","n1245","n1246","n1239"],tags:{building:"house"}},w274:{id:"w274",nodes:["n1247","n1248","n1249","n1250","n1247"],tags:{building:"house"}},w275:{id:"w275",nodes:["n1251","n1252","n1253","n1254","n1255","n1256","n1251"],tags:{building:"house"}},w276:{id:"w276",nodes:["n1257","n1258","n1259","n1260","n1257"],tags:{building:"shed"}},w277:{id:"w277",nodes:["n1261","n1262","n1263","n1264","n1265","n1266","n1267","n1268","n1261"],tags:{building:"house"}},w278:{id:"w278",nodes:["n1269","n1270","n1271","n1272","n1273","n1274","n1284","n1269"],tags:{building:"house"}},w279:{id:"w279",nodes:["n1275","n1276","n1277","n1278","n1279","n1280","n1275"],tags:{building:"house"}},w28:{id:"w28",nodes:["n147","n148"],tags:{highway:"footway"}},w280:{id:"w280",nodes:["n1281","n1282","n1283","n1284"],tags:{barrier:"fence"}},w281:{id:"w281",nodes:["n1285","n1286","n1287","n1288","n1285"],tags:{building:"house"}},w282:{id:"w282",nodes:["n1289","n1290","n1291","n1292","n1293","n1294","n1295","n1296","n1289"],tags:{building:"house"}},w283:{id:"w283",nodes:["n1297","n1298","n1299","n1300","n1301","n1302","n1297"],tags:{access:"private",leisure:"swimming_pool"}},w284:{id:"w284",nodes:["n1303","n1304","n1305","n1306","n1307","n1308","n1309","n1310","n1311","n1312","n1303"],tags:{building:"house"}},w285:{id:"w285",nodes:["n1313","n1314","n1315","n1316","n1313"],tags:{building:"house"}},w286:{id:"w286",nodes:["n1317","n1318","n1319","n1320","n1321","n1322","n1323","n1324","n1325","n1326","n1327","n1328","n1329","n1330","n1317"],tags:{building:"house"}},w287:{id:"w287",nodes:["n1331","n1332","n1333","n1334","n1465","n1335","n1336","n1331"],tags:{building:"yes"}},w288:{id:"w288",nodes:["n1349","n1350","n1351","n1352","n1353","n1354","n1355","n1337","n1338","n1341","n1342","n1343","n1344","n1345","n1346","n1347","n1348","n1339","n1340","n1349"],tags:{access:"private",leisure:"swimming_pool"}},w289:{id:"w289",nodes:["n1356","n1331"],tags:{barrier:"fence"}},w29:{id:"w29",nodes:["n149","n874","n150","n151","n897","n898","n875","n152"],tags:{highway:"service",oneway:"yes"}},w290:{id:"w290",nodes:["n1357","n1358","n1359","n1360","n1357"],tags:{building:"shed"}},w291:{id:"w291",nodes:["n1358","n1361","n1362"],tags:{barrier:"fence"}},w292:{id:"w292",nodes:["n1363","n1364","n1365","n1366","n1367","n1368","n1363"],tags:{building:"house"}},w293:{id:"w293",nodes:["n1369","n1370","n1371","n1372","n1373","n1374","n1369"],tags:{leisure:"swimming_pool"}},w294:{id:"w294",nodes:["n1367","n1375","n1376","n1377"],tags:{barrier:"fence"}},w295:{id:"w295",nodes:["n1378","n1379","n1380","n1381","n1378"],tags:{building:"house"}},w296:{id:"w296",nodes:["n1382","n1383","n1384","n1385","n1386","n1387","n1382"],tags:{building:"house"}},w297:{id:"w297",nodes:["n1388","n1389","n1390","n1391","n1392","n1393","n1388"],tags:{building:"house"}},w298:{id:"w298",nodes:["n1394","n1395","n1396","n1397","n1394"],tags:{building:"house"}},w299:{id:"w299",nodes:["n1398","n1399","n1400","n1401","n1398"],tags:{access:"private3",leisure:"swimming_pool"}},w3:{id:"w3",nodes:["n1","n2"],tags:{highway:"track",name:"Water Street"}},w30:{id:"w30",nodes:["n153","n154","n155","n156","n153"],tags:{amenity:"parking"}},w300:{id:"w300",nodes:["n1402","n1403","n1404","n1405","n1406","n1407","n1408","n1409","n1410","n1411","n1412","n1413","n1402"],tags:{building:"house"}},w301:{id:"w301",nodes:["n1414","n1415","n1416","n1417","n1414"],tags:{building:"garage"}},w302:{id:"w302",nodes:["n1406","n1418","n1419","n1403"],tags:{barrier:"fence"}},w303:{id:"w303",nodes:["n1423","n1424","n1425","n1426","n1427","n1428","n1429","n1430","n1431","n1432","n1423"],tags:{building:"house"}},w304:{id:"w304",nodes:["n1433","n1434","n1435","n1446","n1436","n1437","n1438","n1439","n1444","n1440","n1441","n1445","n1442","n1443","n1433"],tags:{access:"private",leisure:"swimming_pool"}},w305:{id:"w305",nodes:["n1447","n1448","n1452","n1453","n1454","n1451","n1449","n1450","n1447"],tags:{building:"house"}},w306:{id:"w306",nodes:["n1455","n1456","n1457","n1458","n1455"],tags:{building:"shed"}},w307:{id:"w307",nodes:["n1459","n1460","n1461","n1462","n1459"],tags:{building:"shed"}},w308:{id:"w308",nodes:["n1463","n1464"],tags:{barrier:"fence"}},w309:{id:"w309",nodes:["n1465","n1466","n1467","n1468"],tags:{barrier:"fence"}},w31:{id:"w31",nodes:["n157","n605","n158"],tags:{highway:"service"}},w310:{id:"w310",nodes:["n1469","n1481","n1463"],tags:{barrier:"hedge"}},w311:{id:"w311",nodes:["n1470","n1471","n1472","n1473","n1474","n1475","n1480","n1476","n1477","n1478","n1479","n1470"],tags:{building:"house"}},w312:{id:"w312",nodes:["n1480","n1481"],tags:{barrier:"wall"}},w313:{id:"w313",nodes:["n1482","n1483","n1484","n1485","n1486","n1487","n1488","n1489","n1490","n1491","n1482"],tags:{access:"private",leisure:"swimming_pool"}},w314:{id:"w314",nodes:["n1492","n1493","n1494","n1495","n1496","n1497","n1498","n1499","n1500","n1501","n1502","n1503","n1504","n1505","n1492"],tags:{building:"house"}},w315:{id:"w315",nodes:["n1506","n1507","n1508","n1509","n1510","n1511","n1512","n1513","n1514","n1515","n1506"],tags:{building:"house"}},w316:{id:"w316",nodes:["n1516","n1517","n1518","n1519","n1520","n1521","n1522","n1523","n1516"],tags:{building:"house"}},w317:{id:"w317",nodes:["n1524","n1525","n1526","n1527","n1528","n1529","n1530","n1531","n1524"],tags:{building:"house"}},w318:{id:"w318",nodes:["n1532","n1533"],tags:{barrier:"fence"}},w319:{id:"w319",nodes:["n1534","n1532","n1535"],tags:{barrier:"fence"}},w32:{id:"w32",nodes:["n159","n160","n161","n162","n159"],tags:{amenity:"parking"}},w320:{id:"w320",nodes:["n1536","n1537","n1538","n1539","n1536"],tags:{building:"shed"}},w321:{id:"w321",nodes:["n1540","n1541","n1542","n1543","n1540"],tags:{building:"shed"}},w322:{id:"w322",nodes:["n1544","n1545","n1546","n1547","n1544"],tags:{building:"shed"}},w323:{id:"w323",nodes:["n1548","n1549","n1550","n1551","n1548"],tags:{building:"house"}},w324:{id:"w324",nodes:["n1552","n1553","n1554","n1555","n1556","n1557","n1558","n1559","n1552"],tags:{building:"house"}},w325:{id:"w325",nodes:["n1560","n1561","n1562","n1563","n1564","n1565","n1566","n1567","n1560"],tags:{building:"house"}},w326:{id:"w326",nodes:["n1561","n1568","n1569","n1570"],tags:{barrier:"wall"}},w327:{id:"w327",nodes:["n1571","n1572"],tags:{barrier:"fence"}},w328:{id:"w328",nodes:["n1573","n1574","n1575","n1576","n1573"],tags:{building:"house"}},w329:{id:"w329",nodes:["n1577","n1578","n1579","n1580","n1581","n1582","n1583","n1584","n1585","n1586","n1577"],tags:{building:"house"}},w33:{id:"w33",nodes:["n157","n163"],tags:{highway:"service"}},w330:{id:"w330",nodes:["n1587","n1588","n1589","n1590","n1591","n1592","n1593","n1594","n1587"],tags:{building:"house"}},w331:{id:"w331",nodes:["n1595","n1596","n1597","n1598","n1599","n1600","n1601","n1595"],tags:{access:"private",leisure:"swimming_pool"}},w332:{id:"w332",nodes:["n1602","n1603","n1604","n1605","n1606","n1607","n1608","n1609","n1611","n1610","n1612","n1613","n1602"],tags:{building:"house"}},w333:{id:"w333",nodes:["n2018","n1626","n1627","n2017","n2018"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w334:{id:"w334",nodes:["n2","n3","n2764"],tags:{highway:"service",name:"Water Street"}},w335:{id:"w335",nodes:["n3","n1628","n1614"],tags:{highway:"service"}},w336:{id:"w336",nodes:["n3198","n4545","n2747"],tags:{highway:"residential",name:"Morris Avenue"}},w337:{id:"w337",nodes:["n1629","n3504"],tags:{highway:"service",service:"alley",surface:"unpaved"}},w338:{id:"w338",nodes:["n1813","n1635","n1814","n1634","n1815","n1632","n1816","n1817"],tags:{highway:"service",service:"parking_aisle"}},w339:{id:"w339",nodes:["n1827","n4684","n4690","n1842","n4686","n4685","n1826","n1828","n1846","n1645","n1637","n4703","n1641"],tags:{highway:"residential",name:"Millard Street"}},w34:{id:"w34",nodes:["n164","n165","n166","n171","n866","n172","n167","n168","n169","n910","n170","n164"],tags:{amenity:"parking"}},w340:{id:"w340",nodes:["n1824","n1825"],tags:{highway:"service",service:"parking_aisle"}},w341:{id:"w341",nodes:["n1701","n1702","n1703","n1704","n1705","n1706","n1701"],tags:{building:"yes"}},w342:{id:"w342",nodes:["n1855","n1860","n1856","n1775","n1804","n1776","n1855"],tags:{amenity:"parking",fee:"no"}},w343:{id:"w343",nodes:["n1757","n1758","n1759","n1760","n1757"],tags:{building:"yes"}},w344:{id:"w344",nodes:["n1659","n1660","n1661","n1662","n1663","n1664","n1665","n1666","n1659"],tags:{building:"school"}},w345:{id:"w345",nodes:["n1751","n1752","n1753","n1754","n1755","n1756","n1751"],tags:{building:"yes"}},w346:{id:"w346",nodes:["n1641","n1676","n1673","n1639","n1810","n1642","n1849","n4759","n1845"],tags:{highway:"residential",name:"Douglas Avenue"}},w347:{id:"w347",nodes:["n1642","n1643","n1031","n1630","n845","n1631","n816","n1831","n902","n905","n152","n149","n1832","n1850","n878","n1833","n1852","n42","n1834","n61","n60","n1851","n1835"],tags:{highway:"primary",name:"Michigan Avenue"}},w348:{id:"w348",nodes:["n1650","n1651","n1652","n1653","n1654","n1655","n1656","n1657","n1658","n1650"],tags:{leisure:"playground"}},w349:{id:"w349",nodes:["n1861","n1818","n1819","n1820","n1821","n1825","n1823","n1639"],tags:{highway:"service"}},w35:{id:"w35",nodes:["n168","n167","n172"],tags:{barrier:"fence",fence_type:"chain_link"}},w350:{id:"w350",nodes:["n1783","n1819","n1784","n1857","n1861","n1858","n1783"],tags:{amenity:"parking"}},w351:{id:"w351",nodes:["n1717","n1718","n1719","n1720","n1717"],tags:{building:"yes"}},w352:{id:"w352",nodes:["n1743","n1744","n1745","n1746","n1747","n1748","n1749","n1750","n1743"],tags:{building:"yes"}},w353:{id:"w353",nodes:["n1637","n1636","n1029","n4715","n1630"],tags:{highway:"residential",name:"Lincoln Avenue"}},w354:{id:"w354",nodes:["n1713","n1714","n1715","n1716","n1713"],tags:{building:"yes"}},w355:{id:"w355",nodes:["n1689","n1690","n1691","n1692","n1693","n1694","n1695","n1696","n1689"],tags:{building:"yes"}},w356:{id:"w356",nodes:["n1631","n4717","n1840","n4745","n1841"],tags:{highway:"residential",name:"Hook Avenue"}},w357:{id:"w357",nodes:["n1737","n1738","n1739","n1740","n1741","n1742","n1737"],tags:{building:"yes"}},w358:{id:"w358",nodes:["n1707","n1708","n1709","n1710","n1711","n1712","n1707"],tags:{building:"yes"}},w359:{id:"w359",nodes:["n1829","n4695","n4697","n1843","n4698","n4701","n1638","n4702","n4705","n1636","n4706","n4707","n1633"],tags:{highway:"residential",name:"South Street"}},w36:{id:"w36",nodes:["n910","n171","n866","n172"],tags:{barrier:"fence",fence_type:"chain_link"}},w360:{id:"w360",nodes:["n1767","n1768","n1769","n1770","n1771","n1772","n1773","n1774","n1767"],tags:{building:"yes"}},w361:{id:"w361",nodes:["n1859","n1860","n1804","n1640","n1805","n1817","n1806","n1644","n1811","n1807","n1808","n3419","n1812","n1790","n3418","n3744","n1809","n1813","n1810"],tags:{highway:"service"}},w362:{id:"w362",nodes:["n1639","n1683","n4710","n1633"],tags:{highway:"residential",name:"South Street",oneway:"yes"}},w363:{id:"w363",nodes:["n1646","n1647","n1648","n1649","n1646"],tags:{leisure:"pitch",pitch:"basketball"}},w364:{id:"w364",nodes:["n3820","n3821","n3822","n3823","n3824","n3825","n3826","n3827","n3828","n3829","n3830","n3838","n3839","n3820"],tags:{amenity:"school",name:"Three Rivers Middle School"}},w365:{id:"w365",nodes:["n1721","n1722","n1723","n1724","n1725","n1726","n1727","n1728","n1729","n1730","n1731","n1732","n1733","n1734","n1735","n1736","n1721"],tags:{building:"yes"}},w366:{id:"w366",nodes:["n1791","n1792","n1793","n1794","n1795","n1796","n1798","n1799","n1800","n1801","n1802","n1803","n1791"],tags:{amenity:"parking"}},w367:{id:"w367",nodes:["n1633","n4708","n4711","n1643","n4712","n1838","n4752","n1839"],tags:{highway:"residential",name:"Grant Avenue"}},w368:{id:"w368",nodes:["n1853","n1687","n1688","n1854","n1853"],tags:{amenity:"library",building:"yes",name:"Three Rivers Public Library"}},w369:{id:"w369",nodes:["n1777","n1778","n1779","n1780","n1781","n1782","n1777"],tags:{amenity:"parking"}},w37:{id:"w37",nodes:["n173","n174","n175","n176","n177","n178","n179","n180","n173"],tags:{building:"yes"}},w370:{id:"w370",nodes:["n1645","n1638","n858","n4718","n1631"],tags:{highway:"residential",name:"Hook Avenue"}},w371:{id:"w371",nodes:["n3836","n3835","n4624","n3831","n4632","n3834","n3832","n3833","n3830","n3838","n3839","n3837","n3836"],tags:{amenity:"school",name:"Three Rivers High School"}},w372:{id:"w372",nodes:["n1697","n1698","n1699","n1700","n1697"],tags:{building:"yes"}},w373:{id:"w373",nodes:["n2891","n1785","n1786","n3394","n1787","n1788","n1789","n1830","n1836","n1837","n1848","n3409","n2891"],tags:{amenity:"parking"}},w374:{id:"w374",nodes:["n1761","n1762","n1763","n1764","n1765","n1766","n1761"],tags:{building:"yes"}},w375:{id:"w375",nodes:["n1822","n1823"],tags:{highway:"service",service:"parking_aisle"}},w376:{id:"w376",nodes:["n1677","n1678","n1679","n1680","n1681","n1682","n1677"],tags:{amenity:"parking"}},w377:{id:"w377",nodes:["n1676","n1675","n1674","n1673"],tags:{highway:"service",oneway:"yes"}},w378:{id:"w378",nodes:["n1667","n1668","n1669","n1670","n1671","n1672","n1667"],tags:{amenity:"school",name:"Andrews Elementary School"}},w379:{id:"w379",nodes:["n1630","n4714","n1847","n4750","n1844"],tags:{highway:"residential",name:"Lincoln Avenue"}},w38:{id:"w38",nodes:["n181","n182","n183","n185","n184","n181"],tags:{building:"yes"}},w380:{id:"w380",nodes:["n1683","n3745","n1686","n1633"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w381:{id:"w381",nodes:["n2022","n2037"],tags:{highway:"footway"}},w382:{id:"w382",nodes:["n1826","n1863"],tags:{highway:"residential"}},w383:{id:"w383",nodes:["n2011","n2012","n739","n2013","n2014","n2029","n2011"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w384:{id:"w384",nodes:["n2064","n2065","n2066","n2067","n2068","n2069","n2070","n2071","n2072","n2073","n2074","n2075","n2076","n2077","n2078","n2079","n2064"],tags:{building:"yes"}},w385:{id:"w385",nodes:["n1923","n1924","n1925","n1926","n1927","n1928","n1930","n1929","n1923"],tags:{natural:"water"}},w386:{id:"w386",nodes:["n1827","n14","n1886","n15","n1887","n16","n1888","n18","n17","n1889","n12","n13","n1890","n485","n1864","n11","n10","n2058","n2036","n1865","n2020","n9","n8","n1866","n295","n1867"],tags:{highway:"service"}},w387:{id:"w387",nodes:["n1846","n1843","n865","n157","n4721","n1831"],tags:{highway:"residential",name:"Andrews Street"}},w388:{id:"w388",nodes:["n2019","n2020","n2021","n2022","n2023","n2024","n2025","n2026","n2027","n2028","n2029"],tags:{highway:"footway"}},w389:{id:"w389",nodes:["n2217","n2222","n2221","n2219","n1877","n1879","n1882","n1883","n484","n1885","n483","n1880","n1881","n1878","n1884","n2223"],tags:{name:"Rocky River",waterway:"river"}},w39:{id:"w39",nodes:["n185","n186","n187"],tags:{barrier:"fence"}},w390:{id:"w390",nodes:["n2050","n2051","n2052","n2053","n2050"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w391:{id:"w391",nodes:["n2089","n2090","n2091","n2092","n2093","n2094","n2311","n2095","n2096","n2097","n2098","n1174","n2099","n751","n43","n2062","n4725","n873","n1832"],tags:{highway:"residential",name:"Constantine Street"}},w392:{id:"w392",nodes:["n1869","n212","n436","n2281","n2081"],tags:{highway:"primary",name:"Michigan Avenue"}},w393:{id:"w393",nodes:["n1829","n611","n144","n4694","n602","n1832"],tags:{highway:"tertiary",name:"Constantine Street"}},w394:{id:"w394",nodes:["n1997","n1998","n2000","n1999"],tags:{highway:"service",service:"parking_aisle"}},w395:{id:"w395",nodes:["n1835","n1869"],tags:{bridge:"yes",highway:"primary",name:"Michigan Avenue"}},w396:{id:"w396",nodes:["n2000","n2001"],tags:{highway:"service",service:"parking_aisle"}},w397:{id:"w397",nodes:["n2082","n4688","n1842","n308","n498","n509","n246","n241","n1867","n4645","n293","n1834"],tags:{highway:"residential",name:"Spring Street"}},w398:{id:"w398",nodes:["n2015","n2016","n2017","n2018","n2015"],tags:{building:"yes"}},w399:{id:"w399",nodes:["n2062","n45","n2063","n877","n41","n1852"],tags:{highway:"service"}},w4:{id:"w4",nodes:["n7","n38","n378","n379","n7"],tags:{building:"yes"}},w40:{id:"w40",nodes:["n188","n189","n190","n191","n192","n193","n188"],tags:{building:"house"}},w400:{id:"w400",nodes:["n1968","n1969","n1970","n1971","n2007","n1972","n1973","n1978","n1974","n1977","n1976","n1975","n1968"],tags:{amenity:"parking"}},w401:{id:"w401",nodes:["n1963","n1964"],tags:{bridge:"yes",highway:"footway"}},w402:{id:"w402",nodes:["n1892","n1893","n1894","n1895","n1896","n1897","n1898","n1899","n1900","n1901","n1902","n1903","n1892"],tags:{"addr:city":"Three Rivers","addr:housenumber":"112","addr:postcode":"49093","addr:state":"MI","addr:street":"Spring Street",barrier:"fence",name:"Scidmore Park Petting Zoo",tourism:"zoo",zoo:"petting_zoo"}},w403:{id:"w403",nodes:["n1957","n1958","n1959","n481","n1960","n482","n1949"],tags:{highway:"path"}},w404:{id:"w404",nodes:["n2281","n27","n330","n1987","n1988"],tags:{highway:"service"}},w405:{id:"w405",nodes:["n2249","n2269","n2270","n2271","n2272","n454","n455","n2273"],tags:{highway:"path",name:"Riverwalk Trail"}},w406:{id:"w406",nodes:["n1947","n1624","n1625","n2030","n2033","n4658","n4659","n2031","n2032","n2021"],tags:{highway:"footway"}},w407:{id:"w407",nodes:["n2034","n2036","n2009"],tags:{highway:"footway"}},w408:{id:"w408",nodes:["n1964","n1965","n2002","n1966","n21","n1967","n1969"],tags:{highway:"footway"}},w409:{id:"w409",nodes:["n1904","n1905","n1906","n1907","n1908","n1909","n748","n1910","n747","n1911","n749","n1912","n750","n1913","n1922","n1914","n1921","n1915","n746","n1916","n745","n1917","n744","n1918","n743","n742","n1919","n741","n1920","n740","n1904"],tags:{natural:"water"}},w41:{id:"w41",nodes:["n194","n195","n196","n197","n198","n199","n200","n201","n202","n203","n204","n205","n194"],tags:{building:"house"}},w410:{id:"w410",nodes:["n1868","n2088"],tags:{bridge:"yes",name:"Conrail Railroad",railway:"rail"}},w411:{id:"w411",nodes:["n2010","n2019","n2009","n2008","n2058","n2035","n1961","n1962","n1947","n1963"],tags:{highway:"footway"}},w412:{id:"w412",nodes:["n2290","n2043","n2044","n2045","n1872","n2041","n1873","n2042","n1874","n2046","n2047","n2048","n2049","n2290"],tags:{"addr:city":"Three Rivers","addr:housenumber":"112","addr:postcode":"49093","addr:state":"MI","addr:street":"Spring Street",leisure:"park",name:"Scidmore Park"}},w413:{id:"w413",nodes:["n1831","n876","n4720","n821","n2089"],tags:{highway:"residential",name:"Andrews Street"}},w414:{id:"w414",nodes:["n2002","n2003","n2004","n2005","n2006","n2007"],tags:{highway:"footway"}},w415:{id:"w415",nodes:["n1979","n1980","n1981","n1982","n1979"],tags:{amenity:"parking"}},w416:{id:"w416",nodes:["n2054","n2055","n2056","n2057","n2054"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w417:{id:"w417",nodes:["n2291","n2292","n2293","n2294","n2295","n2296","n2297","n2298","n2299","n1098","n2300","n2301","n2302","n2303","n2304","n2059","n2060","n2305","n2307","n2306","n2310","n2308","n2309","n2291"],tags:{leisure:"park",name:"Memory Isle Park"}},w418:{id:"w418",nodes:["n2033","n2034","n2035"],tags:{highway:"footway"}},w419:{id:"w419",nodes:["n1983","n1984","n1985","n1986","n1983"],tags:{amenity:"parking"}},w42:{id:"w42",nodes:["n206","n207","n208","n209","n210","n211","n206"],tags:{building:"house"}},w420:{id:"w420",nodes:["n1840","n4746","n4748","n1847","n4749","n4755","n1838","n4754","n4756","n1849"],tags:{highway:"residential",name:"French Street"}},w421:{id:"w421",nodes:["n2337","n2268"],tags:{highway:"path"}},w422:{id:"w422",nodes:["n2338","n2339","n2320","n2317","n2319","n2318","n2340","n2341","n2342","n2343","n2344","n2345","n2346","n2347","n2348","n2338"],tags:{natural:"water"}},w423:{id:"w423",nodes:["n2180","n2349","n2350","n2351","n2352","n2404","n2353","n2354","n2355","n2356","n2357","n2358","n2359","n2360","n2361","n2362","n2363","n2364","n2365","n2366","n2370","n2371","n2372","n2373","n2374","n2375","n2377","n2378","n2380","n2381","n2382","n2383","n2386","n2389","n2390","n2391","n2392","n2393","n2396","n2397","n2401","n2402","n2321","n2322","n2323","n2403","n2180"],tags:{natural:"wetland"}},w424:{id:"w424",nodes:["n2324","n2316","n1841","n2315","n2314","n1844","n1839","n4758","n1845"],tags:{highway:"residential",name:"Pealer Street"}},w425:{id:"w425",nodes:["n2267","n2337","n2336","n2335","n2334","n2333","n2332","n2331","n2330","n37","n2329","n2328","n2327","n36","n2326","n2325","n2266"],tags:{highway:"path",name:"Riverwalk Trail"}},w426:{id:"w426",nodes:["n2478","n681","n680","n679","n2459","n2467","n2487","n2478"],tags:{building:"yes"}},w427:{id:"w427",nodes:["n2671","n2672","n2673","n2674","n2671"],tags:{building:"yes"}},w428:{id:"w428",nodes:["n2483","n2482","n2486","n2489","n2492","n2502","n2495","n2480","n2483"],tags:{building:"yes"}},w429:{id:"w429",nodes:["n2707","n2708","n2716","n2712","n2714","n2713","n2715","n2711","n2710","n2723","n2709","n2707"],tags:{amenity:"parking"}},w43:{id:"w43",nodes:["n1955","n1956"],tags:{footway:"sidewalk",highway:"footway",name:"Riverwalk Trail"}},w430:{id:"w430",nodes:["n2471","n2474","n2484","n2479","n2471"],tags:{building:"yes"}},w431:{id:"w431",nodes:["n2218","n2434","n2436","n2433","n2435","n2210"],tags:{name:"Rocky River",waterway:"river"}},w432:{id:"w432",nodes:["n2782","n2532","n2783","n2784","n2782"],tags:{amenity:"parking"}},w433:{id:"w433",nodes:["n2513","n649","n2520","n2514","n2507","n2513"],tags:{building:"yes"}},w434:{id:"w434",nodes:["n2470","n2468","n2461","n2465","n2470"],tags:{building:"yes"}},w435:{id:"w435",nodes:["n2598","n2599","n648","n649","n2520","n2598"],tags:{building:"yes"}},w436:{id:"w436",nodes:["n2639","n2640","n2641","n2642","n2643","n2644","n2645","n2646","n2647","n2648","n2639"],tags:{building:"yes"}},w437:{id:"w437",nodes:["n2503","n2512","n2508","n2499","n2503"],tags:{building:"yes"}},w438:{id:"w438",nodes:["n2440","n2800","n2774","n1"],tags:{highway:"residential",name:"Water Street"}},w439:{id:"w439",nodes:["n2675","n2676","n2677","n2678","n2675"],tags:{building:"yes"}},w44:{id:"w44",nodes:["n213","n214","n215","n216","n213"],tags:{building:"yes"}},w440:{id:"w440",nodes:["n2512","n2503","n2507","n2514","n2512"],tags:{building:"yes"}},w441:{id:"w441",nodes:["n2554","n2717","n674","n2720","n2798"],tags:{highway:"service",oneway:"yes"}},w442:{id:"w442",nodes:["n2583","n2596","n2584","n2585","n2595","n2586","n2587","n2588","n2589","n2583"],tags:{amenity:"parking"}},w443:{id:"w443",nodes:["n2629","n2627","n2628","n2616","n2630","n2629"],tags:{building:"yes"}},w444:{id:"w444",nodes:["n2717","n2724","n670","n2718","n669","n668","n2722","n2727"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w445:{id:"w445",nodes:["n2572","n2573"],tags:{bridge:"yes",highway:"path",name:"Riverwalk Trail"}},w446:{id:"w446",nodes:["n2603","n2604","n2601","n2605","n2606","n2607","n2603"],tags:{building:"yes"}},w447:{id:"w447",nodes:["n2780","n2777","n628","n624","n2779"],tags:{highway:"residential",name:"Foster Street",oneway:"yes"}},w448:{id:"w448",nodes:["n2733","n2734","n2735","n2736","n2737","n2738","n663","n664","n2739","n2733"],tags:{building:"yes"}},w449:{id:"w449",nodes:["n2564","n2565","n2566","n2567","n2568","n2794","n2795","n2564"],tags:{amenity:"parking"}},w45:{id:"w45",nodes:["n217","n218","n219","n220","n217"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w450:{id:"w450",nodes:["n2799","n2728","n2729","n2730","n2731","n2732","n2799"],tags:{building:"yes"}},w451:{id:"w451",nodes:["n2441","n1170","n2442","n2575","n2443","n2445","n2444","n2448","n2441"],tags:{amenity:"parking"}},w452:{id:"w452",nodes:["n2273","n457","n2569","n458","n2570"],tags:{highway:"path",name:"Riverwalk Trail"}},w453:{id:"w453",nodes:["n2447","n2242","n2448","n2527","n2530"],tags:{highway:"service"}},w454:{id:"w454",nodes:["n2560","n333","n2561"],tags:{highway:"service",service:"parking_aisle"}},w455:{id:"w455",nodes:["n2679","n2680","n2681","n2682","n2683","n2684","n2685","n2686","n2687","n2688","n2689","n2690","n2679"],tags:{building:"yes"}},w456:{id:"w456",nodes:["n2425","n2429","n2424"],tags:{bridge:"yes",highway:"residential",name:"Moore Street"}},w457:{id:"w457",nodes:["n2487","n2467","n2472","n2480","n2495","n2487"],tags:{building:"yes"}},w458:{id:"w458",nodes:["n2659","n2660","n2661","n2662","n678","n677","n2663","n2664","n2665","n2666","n675","n676","n2659"],tags:{building:"yes"}},w459:{id:"w459",nodes:["n2600","n2598","n2599","n2601","n2605","n2602","n2600"],tags:{building:"yes"}},w46:{id:"w46",nodes:["n221","n222","n223","n224","n221"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w460:{id:"w460",nodes:["n2468","n2464","n2455","n2457","n2461","n2468"],tags:{building:"yes"}},w461:{id:"w461",nodes:["n2478","n2473","n683","n682","n2463","n681","n2478"],tags:{building:"yes"}},w462:{id:"w462",nodes:["n2547","n473","n2548","n2549"],tags:{highway:"service",service:"parking_aisle"}},w463:{id:"w463",nodes:["n2573","n2574"],tags:{highway:"path",name:"Riverwalk Trail"}},w464:{id:"w464",nodes:["n2445","n2597","n2527","n2528","n2529","n2530","n2531","n2597"],tags:{highway:"service",service:"parking_aisle"}},w465:{id:"w465",nodes:["n2571","n459","n2572"],tags:{highway:"path",name:"Riverwalk Trail"}},w466:{id:"w466",nodes:["n2445","n2574","n2552","n442","n2551","n4727","n323","n2446"],tags:{highway:"service"}},w467:{id:"w467",nodes:["n2484","n2474","n2477","n2485","n2488","n2484"],tags:{building:"yes"}},w468:{id:"w468",nodes:["n2695","n2696","n2697","n2698","n2699","n2700","n2701","n2702","n2695"],tags:{building:"yes"}},w469:{id:"w469",nodes:["n2469","n2476","n2481","n2475","n920","n2466","n2469"],tags:{building:"yes"}},w47:{id:"w47",nodes:["n1988","n1997","n1989","n25","n24","n1990","n26","n1991","n21","n1992","n2006","n1993","n22","n1994","n23","n1995","n1999","n1996","n2001","n1988"],tags:{highway:"service"}},w470:{id:"w470",nodes:["n2473","n2470","n2465","n2458","n2462","n683","n2473"],tags:{building:"yes"}},w471:{id:"w471",nodes:["n2490","n2496","n994","n997","n998","n996","n995","n2485","n2477","n2490"],tags:{building:"yes"}},w472:{id:"w472",nodes:["n2424","n2426","n2427","n2428"],tags:{highway:"residential",name:"Moore Street"}},w473:{id:"w473",nodes:["n2432","n1026","n4741","n2554","n2425"],tags:{highway:"residential",name:"Moore Street"}},w474:{id:"w474",nodes:["n2577","n2576"],tags:{bridge:"yes",highway:"footway"}},w475:{id:"w475",nodes:["n2497","n2505","n2500","n2493","n2497"],tags:{building:"yes"}},w476:{id:"w476",nodes:["n2493","n2500","n2501","n2496","n2490","n2493"],tags:{building:"yes"}},w477:{id:"w477",nodes:["n2431","n360","n4726","n418","n397","n396","n2547","n646","n2447","n644","n2418","n424","n640","n2419","n2420","n2423"],tags:{highway:"residential",name:"Railroad Drive"}},w478:{id:"w478",nodes:["n2515","n2511","n2498","n2504","n2509","n2515"],tags:{building:"yes"}},w479:{id:"w479",nodes:["n2525","n651","n650","n2526","n2524","n653","n652","n656","n2523","n654","n2518","n2517","n2521","n2522","n2525"],tags:{building:"yes"}},w48:{id:"w48",nodes:["n225","n237","n226","n227","n228","n229","n230","n231","n232","n233","n234","n235","n236","n225"],tags:{building:"yes"}},w480:{id:"w480",nodes:["n2703","n2704","n2710","n2711","n2705","n2706","n2703"],tags:{amenity:"parking"}},w481:{id:"w481",nodes:["n2796","n2657","n2658","n2797","n2796"],tags:{building:"yes"}},w482:{id:"w482",nodes:["n2550","n2551","n442","n2552","n2553","n2550"],tags:{amenity:"parking"}},w483:{id:"w483",nodes:["n2790","n2542"],tags:{highway:"service",service:"parking_aisle"}},w484:{id:"w484",nodes:["n2311","n1102"],tags:{highway:"service"}},w485:{id:"w485",nodes:["n2515","n2509","n2516","n2519","n2515"],tags:{building:"yes"}},w486:{id:"w486",nodes:["n2506","n2502","n2492","n2491","n2494","n2506"],tags:{building:"yes"}},w487:{id:"w487",nodes:["n2667","n2668","n2669","n2670","n2667"],tags:{building:"yes"}},w488:{id:"w488",nodes:["n2616","n2608","n2617","n2618","n2619","n2620","n2621","n2622","n2623","n2624","n2625","n2626","n2627","n2628","n2616"],tags:{building:"yes"}},w489:{id:"w489",nodes:["n2081","n2430"],tags:{bridge:"yes",highway:"primary",name:"Michigan Avenue"}},w49:{id:"w49",nodes:["n237","n238"],tags:{highway:"footway"}},w490:{id:"w490",nodes:["n2410","n636","n730","n635","n2409","n2694","n2751","n2765","n2753","n2768","n2754","n2769","n2745","n2766","n4503","n2763","n4501","n2752","n2781"],tags:{highway:"residential",name:"Portage Avenue"}},w491:{id:"w491",nodes:["n2578","n2579","n2580","n2581","n2578"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w492:{id:"w492",nodes:["n2556","n2557","n2558","n2559","n2556"],tags:{amenity:"parking"}},w493:{id:"w493",nodes:["n2460","n2456","n687","n2453","n2454","n2460"],tags:{building:"yes"}},w494:{id:"w494",nodes:["n2471","n2479","n2476","n2469","n2471"],tags:{building:"yes"}},w495:{id:"w495",nodes:["n2724","n2725","n673","n672","n671","n2726","n2727"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w496:{id:"w496",nodes:["n2649","n2650","n2651","n2652","n2653","n2654","n2655","n2656","n2649"],tags:{building:"yes"}},w497:{id:"w497",nodes:["n2430","n2446","n343","n2101","n2560","n2431","n363","n2748"],tags:{highway:"primary",name:"Michigan Avenue"}},w498:{id:"w498",nodes:["n2691","n2692","n634","n633","n2693","n2694"],tags:{highway:"service"}},w499:{id:"w499",nodes:["n2423","n2415","n661","n2416","n2417","n2719","n2721","n2772","n2756","n2773","n2759","n2767"],tags:{highway:"residential",name:"West Street"}},w5:{id:"w5",nodes:["n380","n381","n382","n383","n429","n430","n380"],tags:{building:"yes"}},w50:{id:"w50",nodes:["n239","n499","n508","n245","n238","n242","n240"],tags:{footway:"sidewalk",highway:"footway"}},w500:{id:"w500",nodes:["n2428","n1152","n2421","n2324"],tags:{bridge:"yes",highway:"residential",name:"Moore Street"}},w501:{id:"w501",nodes:["n2608","n2609","n2610","n2611","n2612","n2613","n2614","n2615","n2617","n2608"],tags:{building:"yes"}},w502:{id:"w502",nodes:["n2570","n2571"],tags:{bridge:"yes",highway:"path",name:"Riverwalk Trail"}},w503:{id:"w503",nodes:["n2540","n2542","n2787"],tags:{highway:"service"}},w504:{id:"w504",nodes:["n2269","n2582","n2250"],tags:{highway:"path"}},w505:{id:"w505",nodes:["n2631","n2632","n2633","n2634","n2635","n2636","n2637","n2638","n2631"],tags:{building:"yes"}},w506:{id:"w506",nodes:["n2543","n2544","n2545","n395","n2546","n2543"],tags:{amenity:"parking"}},w507:{id:"w507",nodes:["n2449","n2450","n2451","n2452","n1162","n2449"],tags:{leisure:"pitch",sport:"tennis"}},w508:{id:"w508",nodes:["n2554","n1160","n2559","n2558","n659","n2555","n658","n657","n2419"],tags:{highway:"service"}},w509:{id:"w509",nodes:["n2499","n2508","n2510","n2505","n2497","n2499"],tags:{building:"yes"}},w51:{id:"w51",nodes:["n241","n242","n243","n244"],tags:{highway:"service",surface:"unpaved"}},w510:{id:"w510",nodes:["n2575","n2577"],tags:{highway:"footway"}},w511:{id:"w511",nodes:["n2533","n2534","n2535","n2536","n2537","n2538","n2539","n2785","n2786","n2533"],tags:{amenity:"parking"}},w512:{id:"w512",nodes:["n2801","n2740","n2741","n2742","n2743","n2744","n2801"],tags:{building:"yes"}},w513:{id:"w513",nodes:["n2720","n2721"],tags:{highway:"service",service:"parking_aisle"}},w514:{id:"w514",nodes:["n2788","n2790","n2789","n989","n2540","n2541"],tags:{highway:"service",service:"parking_aisle"}},w515:{id:"w515",nodes:["n2848","n2849","n2850","n2851","n2803","n2804","n2812"],tags:{highway:"residential",name:"Middle Street"}},w516:{id:"w516",nodes:["n2852","n2805"],tags:{access:"private",highway:"service",name:"Battle Street"}},w517:{id:"w517",nodes:["n2863","n2815","n2814","n2812","n2864","n2855","n2865","n2867","n2868"],tags:{highway:"secondary",name:"Michigan Avenue",name_1:"State Highway 60",ref:"M 60"}},w518:{id:"w518",nodes:["n2859","n2808"],tags:{highway:"residential",name:"2nd Avenue"}},w519:{id:"w519",nodes:["n2823","n2824","n2825","n2826","n2827","n2828","n2823"],tags:{building:"yes"}},w52:{id:"w52",nodes:["n247","n248","n249","n250","n247"],tags:{amenity:"parking"}},w520:{id:"w520",nodes:["n2806","n2807","n2803"],tags:{highway:"residential",name:"2nd Avenue"}},w521:{id:"w521",nodes:["n2829","n2830","n2831","n2832","n2833","n2834","n2835","n2836","n2837","n2838","n2829"],tags:{building:"yes"}},w522:{id:"w522",nodes:["n2815","n2813","n2811","n4597","n2846","n4596","n2857","n4601","n2853","n4602","n2861","n4","n2879","n4560","n3550","n5","n1685"],tags:{highway:"residential",name:"Washington Street"}},w523:{id:"w523",nodes:["n2878","n2811","n2810","n2860","n2880","n2881","n2882"],tags:{highway:"residential",name:"5th Avenue"}},w524:{id:"w524",nodes:["n2816","n2817","n2818","n2819","n2820","n2821","n2822","n2816"],tags:{building:"yes"}},w525:{id:"w525",nodes:["n2869","n2856","n2806","n2808","n2814","n2809","n2810","n2847","n2858","n2854","n2870","n2871","n6","n2872","n2839","n2862"],tags:{highway:"residential",name:"Wood Street"}},w526:{id:"w526",nodes:["n2877","n2809","n2813","n2844","n2843"],tags:{highway:"residential",name:"4th Avenue"}},w527:{id:"w527",nodes:["n4785","n4784","n2936","n4788","n4787","n4786","n4785"],tags:{amenity:"parking"}},w528:{id:"w528",nodes:["n2864","n2892","n2893","n2877","n2860","n3840"],tags:{highway:"residential",name:"Garden Street"}},w529:{id:"w529",nodes:["n2868","n2890"],tags:{bridge:"yes",highway:"secondary",name:"Michigan Avenue",name_1:"State Highway 60",ref:"M 60"}},w53:{id:"w53",nodes:["n251","n252","n253","n254","n255","n256","n257","n258","n259","n260","n261","n262","n251"],tags:{building:"yes"}},w530:{id:"w530",nodes:["n2914","n2915","n2916","n2917","n2918","n2919","n2920","n2921","n2922","n2923","n2924","n2925","n2926","n2927","n2928","n2929","n2930","n2931","n2932","n2933","n2914"],tags:{building:"yes"}},w531:{id:"w531",nodes:["n2958","n2896"],tags:{bridge:"yes",highway:"secondary",name:"Main Street"}},w532:{id:"w532",nodes:["n2896","n394","n364","n2748"],tags:{highway:"secondary",name:"Main Street"}},w533:{id:"w533",nodes:["n2800","n2943","n2940","n2941","n2942","n2943"],tags:{highway:"service",service:"parking_aisle"}},w534:{id:"w534",nodes:["n3836","n3837","n3839","n3838","n3834","n4632","n3831","n4624","n3835","n3836"],tags:{barrier:"fence"}},w535:{id:"w535",nodes:["n2894","n2944","n2774","n2765"],tags:{highway:"residential",name:"5th Avenue"}},w536:{id:"w536",nodes:["n2890","n2780","n627","n2889","n2887","n623","n2888","n366","n2748"],tags:{highway:"secondary",name:"Michigan Avenue",name_1:"State Highway 60",ref:"M 60"}},w537:{id:"w537",nodes:["n2895","n738","n2887","n737","n2913"],tags:{highway:"residential",name:"Water Street"}},w538:{id:"w538",nodes:["n2855","n3756","n2884","n2885","n2886","n2945","n2946","n2947","n2948","n2949","n2950","n2951","n2952","n2953","n2955","n2848","n2956","n2856"],tags:{highway:"residential",name:"River Drive"}},w539:{id:"w539",nodes:["n2882","n2894"],tags:{bridge:"yes",highway:"residential",name:"5th Avenue"}},w54:{id:"w54",nodes:["n263","n264","n265","n266","n267","n268","n269","n270","n271","n272","n273","n274","n275","n276","n263"],tags:{building:"yes"}},w540:{id:"w540",nodes:["n2987","n2964","n2981","n2983","n2966","n2982","n2962","n2960","n2967","n2965","n2984","n2977","n2968","n2976","n2986","n2988","n2963","n2970","n2969","n2979","n2974","n2980","n2959","n2973","n2985","n2961","n2975","n2971","n2972","n2978","n2898","n2907","n2912","n2909","n2911","n2901","n2903","n2904","n2906","n2902","n2900","n2910","n2908","n2899","n2897","n2905","n2186","n2233"],tags:{name:"Portage River",waterway:"river"}},w541:{id:"w541",nodes:["n2852","n2851","n3003"],tags:{highway:"residential",name:"1st Avenue"}},w542:{id:"w542",nodes:["n2991","n3004","n2994"],tags:{highway:"residential",name:"River Street"}},w543:{id:"w543",nodes:["n2993","n2989"],tags:{bridge:"yes",highway:"residential",name:"6th Street"}},w544:{id:"w544",nodes:["n2995","n2996","n2997","n2998","n2999","n3000","n3001","n3002","n2990","n2991","n2993"],tags:{highway:"residential",name:"6th Street"}},w545:{id:"w545",nodes:["n2989","n2992","n2848"],tags:{highway:"residential",name:"6th Street"}},w546:{id:"w546",nodes:["n2313","n3169","n3170","n3171","n3172","n3173","n3174","n3175","n3176","n3177","n3178","n3179","n3180","n3191","n3181","n3190","n3182","n3183","n3184","n3185","n3186","n3187","n3188","n3189","n3160","n3161","n3162","n2126","n2146","n2156","n2129","n2112","n2109","n2313"],tags:{natural:"wetland"}},w547:{id:"w547",nodes:["n2088","n3013","n3015","n3014","n3017","n3018"],tags:{name:"Conrail Railroad",railway:"rail"}},w548:{id:"w548",nodes:["n3083","n3084","n3085","n3086","n3083"],tags:{building:"yes"}},w549:{id:"w549",nodes:["n3020","n2288","n2283","n2284","n2131","n2286","n2287","n2285","n2132","n2140","n2289","n3020"],tags:{leisure:"park",name:"Conservation Park"}},w55:{id:"w55",nodes:["n277","n278","n279","n280","n281","n282","n283","n284","n277"],tags:{building:"yes"}},w550:{id:"w550",nodes:["n3056","n3042","n3041","n3040","n3039","n3038","n3037","n3036","n3044","n3035","n3034","n3043","n3016","n3056","n3019","n3015","n3012"],tags:{highway:"service"}},w551:{id:"w551",nodes:["n3044","n3045","n3046","n3047","n3048","n3049","n3050","n3051","n3052","n3053","n3054","n3055","n3016"],tags:{highway:"footway"}},w552:{id:"w552",nodes:["n3117","n3118","n3119","n3120","n3121","n3122","n3117"],tags:{building:"yes"}},w553:{id:"w553",nodes:["n3123","n3124","n3129","n3125","n3126","n3123"],tags:{building:"yes"}},w554:{id:"w554",nodes:["n3069","n3070","n3071","n3072","n3073","n3074","n3075","n3076","n3077","n3078","n3079","n3080","n3081","n3082","n3069"],tags:{building:"yes"}},w555:{id:"w555",nodes:["n3087","n3088","n3089","n3090","n3087"],tags:{building:"yes"}},w556:{id:"w556",nodes:["n3113","n3114","n3115","n3116","n3113"],tags:{building:"yes"}},w557:{id:"w557",nodes:["n3103","n3104","n3105","n3106","n3103"],tags:{building:"yes"}},w558:{id:"w558",nodes:["n3127","n3128","n3129","n3124","n3127"],tags:{building:"yes"}},w559:{id:"w559",nodes:["n3137","n3141","n3142","n3138","n3139","n3140","n3137"],tags:{building:"yes"}},w56:{id:"w56",nodes:["n285","n286","n287","n288","n285"],tags:{amenity:"parking"}},w560:{id:"w560",nodes:["n3091","n3092","n3093","n3094","n3091"],tags:{building:"yes"}},w561:{id:"w561",nodes:["n3155","n3157","n3158","n3159","n3156","n3155"],tags:{building:"yes"}},w562:{id:"w562",nodes:["n3057","n3058","n3059","n3060","n3057"],tags:{building:"yes"}},w563:{id:"w563",nodes:["n3107","n3108","n3109","n3110","n3111","n3112","n3107"],tags:{building:"yes"}},w564:{id:"w564",nodes:["n3134","n3135","n3136","n3131","n3134"],tags:{building:"yes"}},w565:{id:"w565",nodes:["n3143","n3144","n3145","n3146","n3143"],tags:{building:"yes"}},w566:{id:"w566",nodes:["n3095","n3096","n3097","n3098","n3095"],tags:{building:"yes"}},w567:{id:"w567",nodes:["n3130","n3131","n3136","n3132","n3133","n3130"],tags:{building:"yes"}},w568:{id:"w568",nodes:["n3025","n3026","n3027","n3028","n3029","n3030","n3031","n3033","n3032","n3025"],tags:{amenity:"parking"}},w569:{id:"w569",nodes:["n3061","n3062","n3063","n3064","n3061"],tags:{building:"yes"}},w57:{id:"w57",nodes:["n289","n290","n291","n292","n289"],tags:{amenity:"parking"}},w570:{id:"w570",nodes:["n3155","n3156","n3152","n3153","n3155"],tags:{building:"yes"}},w571:{id:"w571",nodes:["n3099","n3100","n3101","n3102","n3099"],tags:{building:"yes"}},w572:{id:"w572",nodes:["n3147","n3148","n3149","n3150","n3147"],tags:{building:"yes"}},w573:{id:"w573",nodes:["n3039","n2284"],tags:{highway:"service"}},w574:{id:"w574",nodes:["n3151","n3152","n3153","n3154","n3151"],tags:{building:"yes"}},w575:{id:"w575",nodes:["n3021","n3022","n3023","n3024","n3021"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w576:{id:"w576",nodes:["n3065","n3066","n3067","n3068","n3065"],tags:{building:"yes"}},w577:{id:"w577",nodes:["n2944","n3192","n3757","n3813","n3814","n3815","n3816","n3817","n3818","n3819"],tags:{highway:"service",name:"Willow Drive",service:"driveway",surface:"unpaved"}},w578:{id:"w578",nodes:["n2163","n2165","n2166","n2167","n2168","n2172","n2173","n2174","n2175","n2176","n2178","n2181","n2163"],tags:{building:"yes"}},w579:{id:"w579",nodes:["n2754","n3195","n3204","n3205","n4537","n4540","n3206","n4530","n4536","n3207","n4524","n3199","n4521","n3197","n1032"],tags:{highway:"residential",name:"Elm Street"}},w58:{id:"w58",nodes:["n240","n293","n294"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w580:{id:"w580",nodes:["n2184","n2185","n2187","n2190","n2191","n2192","n2184"],tags:{building:"yes"}},w581:{id:"w581",nodes:["n2765","n3208","n3211","n2755","n3280","n2756","n3346"],tags:{highway:"residential",name:"Kelsey Street"}},w582:{id:"w582",nodes:["n2753","n3194","n3193","n3201","n3196","n4551","n3202","n4550","n3203","n3200","n3198","n1033"],tags:{highway:"residential",name:"Walnut Street"}},w583:{id:"w583",nodes:["n3272","n4469","n4588","n2879","n4564","n2872"],tags:{highway:"residential",name:"10th Avenue"}},w584:{id:"w584",nodes:["n3243","n3242","n3241","n3240","n3243"],tags:{building:"industrial"}},w585:{id:"w585",nodes:["n3273","n3274","n4631","n4593","n3275","n4592","n2846","n4611","n2847"],tags:{highway:"residential",name:"6th Avenue"}},w586:{id:"w586",nodes:["n3276","n4591","n2853","n4605","n2854"],tags:{highway:"residential",name:"8th Avenue"}},w587:{id:"w587",nodes:["n3269","n3268","n3267","n3266","n3265","n3264","n3263","n3262","n3269"],tags:{building:"industrial"}},w588:{id:"w588",nodes:["n3277","n4599","n2857","n4598","n4608","n2858"],tags:{highway:"residential",name:"7th Avenue"}},w589:{id:"w589",nodes:["n3239","n3238","n3271","n3270","n3237","n3236","n3235","n3234","n3239"],tags:{building:"yes"}},w59:{id:"w59",nodes:["n294","n295","n296","n297","n298","n299","n300","n301","n302","n303","n491","n304","n305","n306","n307"],tags:{footway:"sidewalk",highway:"footway"}},w590:{id:"w590",nodes:["n3278","n4458","n4589","n4604","n2861"],tags:{highway:"residential",name:"9th Avenue"}},w591:{id:"w591",nodes:["n3253","n3252","n3251","n3250","n3249","n3248","n3253"],tags:{building:"industrial"}},w592:{id:"w592",nodes:["n3229","n3228","n3227","n3226","n3225","n3224","n3223","n3222","n3221","n3220","n3219","n3218","n3217","n3216","n3215","n3214","n3213","n3212","n3229"],tags:{natural:"water",water:"pond"}},w593:{id:"w593",nodes:["n3261","n3260","n3259","n3258","n3257","n3256","n3255","n3254","n3261"],tags:{building:"industrial"}},w594:{id:"w594",nodes:["n3233","n3232","n3231","n3230","n3233"],tags:{building:"yes"}},w595:{id:"w595",nodes:["n3247","n3246","n3245","n3244","n3247"],tags:{building:"industrial"}},w596:{id:"w596",nodes:["n2769","n3195","n3193","n3209","n2758","n2759","n3279"],tags:{highway:"residential",name:"Armitage Street"}},w597:{id:"w597",nodes:["n2193","n2194","n2195","n2197","n2193"],tags:{building:"yes"}},w598:{id:"w598",nodes:["n3404","n3403","n3402","n3401","n3400","n3399","n3398","n3397","n3373","n3372","n3396","n3395","n3404"],tags:{building:"school"}},w6:{id:"w6",nodes:["n879","n880","n881","n882","n879"],tags:{building:"shed"}},w60:{id:"w60",nodes:["n239","n308","n307"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w600:{id:"w600",nodes:["n3387","n3386","n3316","n3315","n3314","n3313","n3387"],tags:{building:"yes"}},w601:{id:"w601",nodes:["n3304","n3303","n3302","n3301","n3385","n3384","n3300","n3299","n3304"],tags:{building:"yes"}},w602:{id:"w602",nodes:["n3334","n3333","n3332","n3331","n3330","n3329","n3328","n3327","n3326","n3325","n3324","n3323","n3322","n3321","n3320","n3319","n3318","n3317","n3334"],tags:{building:"yes"}},w603:{id:"w603",nodes:["n3353","n3352","n3347","n3280","n2798"],tags:{highway:"service",service:"alley",surface:"unpaved"}},w604:{id:"w604",nodes:["n3753","n3211","n3383"],tags:{highway:"service",service:"alley"}},w605:{id:"w605",nodes:["n3290","n3289","n3288","n3287","n3286","n3285","n3284","n3283","n3282","n3281","n3290"],tags:{building:"yes"}},w606:{id:"w606",nodes:["n2198","n2199","n2201","n2202","n2203","n2206","n2198"],tags:{building:"yes"}},w607:{id:"w607",nodes:["n2198","n2207"],tags:{barrier:"wall"}},w608:{id:"w608",nodes:["n2751","n3208","n3210","n3209","n3415","n3410","n3414","n3413","n3412","n3416"],tags:{highway:"residential",name:"East Street"}},w609:{id:"w609",nodes:["n2772","n3346","n3746","n3748","n3747","n3345","n3378","n3279","n3411"],tags:{highway:"residential",name:"Maple Street"}},w61:{id:"w61",nodes:["n309","n310","n311","n312","n313","n240"],tags:{footway:"sidewalk",highway:"footway"}},w610:{id:"w610",nodes:["n3379","n3380","n3382","n3381","n3379"],tags:{leisure:"park",name:"LaFayette Park"}},w611:{id:"w611",nodes:["n2768","n3194","n3210","n3753","n2760","n3353","n2773","n3378"],tags:{highway:"residential",name:"Bennett Street"}},w612:{id:"w612",nodes:["n2751","n3383","n2749","n2798","n2772"],tags:{highway:"residential",name:"Market Street"}},w613:{id:"w613",nodes:["n3298","n3297","n3296","n3295","n3294","n3293","n3292","n3291","n3298"],tags:{building:"yes"}},w614:{id:"w614",nodes:["n3375","n3406","n3405","n3374","n3375"],tags:{leisure:"playground"}},w615:{id:"w615",nodes:["n3393","n3344","n3343","n3342","n3341","n3340","n3339","n3338","n3337","n3392","n3391","n3390","n3389","n3336","n3335","n3388","n3393"],tags:{building:"yes"}},w616:{id:"w616",nodes:["n3376","n3407","n3408","n3377","n3376"],tags:{amenity:"school",name:"Three Rivers Elementary School"}},w617:{id:"w617",nodes:["n3312","n3311","n3310","n3309","n3308","n3307","n3306","n3305","n3312"],tags:{building:"yes"}},w619:{id:"w619",nodes:["n2863","n3424","n3425","n3426","n3427","n3428","n3429","n3430","n3431","n3432","n3433","n2844"],tags:{highway:"secondary",name:"Michigan Avenue",ref:"M 60"}},w62:{id:"w62",nodes:["n876","n906","n904","n875","n874","n873","n872","n871","n870","n869","n41","n868","n146","n314","n315","n1956"],tags:{footway:"sidewalk",highway:"footway"}},w620:{id:"w620",nodes:["n2844","n3420","n3421","n3422","n3439","n2859","n3437","n3493","n3496","n3500","n3497"],tags:{highway:"residential"}},w621:{id:"w621",nodes:["n3468","n3469","n3470","n3471","n3468"],tags:{building:"yes"}},w622:{id:"w622",nodes:["n3417","n3436","n3438","n3491","n3488","n3492","n3495","n3494","n3498","n3487","n3499","n3490","n3489","n4800","n3417"],tags:{landuse:"cemetery",name:"Riverside Cemetery"}},w623:{id:"w623",nodes:["n3440","n3441","n3442","n3443","n3444","n3445","n3440"],tags:{building:"yes"}},w624:{id:"w624",nodes:["n3446","n3447","n3448","n3449","n3450","n3451","n3452","n3453","n3454","n3455","n3456","n3457","n3458","n3459","n3460","n3461","n3462","n3463","n3464","n3465","n3466","n3467","n3446"],tags:{building:"yes"}},w625:{id:"w625",nodes:["n2844","n3434","n3435","n2878","n3275","n4621","n3276","n3278","n4463","n3272","n3472","n3474","n3475","n3476","n3477","n3478","n1202","n3479","n3480","n3481","n1203","n3482","n3483","n3484","n3485","n4574","n3486","n3473"],tags:{highway:"secondary",name:"Jefferson Street",name_1:"State Highway 60",ref:"M 60"}},w626:{id:"w626",nodes:["n3439","n3423","n2863"],tags:{highway:"unclassified",name:"Michigan Avenue",name_1:"State Highway 60"}},w627:{id:"w627",nodes:["n3500","n3005"],tags:{highway:"service"}},w628:{id:"w628",nodes:["n3491","n3488","n3492","n3010","n3009","n3005","n3008","n3007","n3006","n3502","n3491"],tags:{leisure:"park",name:"Marina Park"}},w629:{id:"w629",nodes:["n2208","n2209","n2212","n2214","n2208"],tags:{building:"yes"}},w63:{id:"w63",nodes:["n1955","n316"],tags:{footway:"sidewalk",highway:"footway"}},w630:{id:"w630",nodes:["n2757","n3414","n3202","n4542","n3206","n4538","n3750","n3503","n1629","n4500","n2763","n4502","n2764","n3508"],tags:{highway:"residential",name:"Hoffman Street"}},w631:{id:"w631",nodes:["n2215","n2750","n2770","n2771","n2215"],tags:{building:"yes"}},w632:{id:"w632",nodes:["n2766","n3504","n3507","n3751","n3205","n3196","n3410","n2746"],tags:{highway:"residential",name:"Cushman Street"}},w633:{id:"w633",nodes:["n2745","n3749","n3507","n4535","n3503"],tags:{highway:"residential",name:"Pine Street"}},w634:{id:"w634",nodes:["n3510","n3511","n3512","n3509","n3510"],tags:{leisure:"park",name:"Bowman Park"}},w636:{id:"w636",nodes:["n2745","n3752","n3204","n3201","n3415","n2761","n2767","n3411"],tags:{highway:"residential",name:"Wheeler Street"}},w637:{id:"w637",nodes:["n3550","n4586","n4476","n3472"],tags:{highway:"residential",name:"11th Avenue"}},w638:{id:"w638",nodes:["n3508","n3518"],tags:{bridge:"yes",highway:"residential",name:"Hoffman Street"}},w639:{id:"w639",nodes:["n3518","n1204","n2862","n3519","n3520","n3521","n3522","n3523","n2161","n3524","n3549","n3552","n4239","n3551","n4577","n4582","n4578","n4583","n4579","n4574"],tags:{highway:"residential",name:"Hoffman Street"}},w64:{id:"w64",nodes:["n316","n317"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w640:{id:"w640",nodes:["n3634","n3640","n3676","n3633","n3678","n3648","n3638","n3683","n3600","n3579","n3679","n3677","n2987","n3592","n3588","n3608","n3559","n3617","n3620","n3660","n3553","n3533","n3530","n3531","n3525","n3527","n3526","n3532","n3529","n3528","n3667","n3627","n3623","n3625","n3601","n3687","n3671","n3644","n3626","n3673","n3582","n3693","n3605","n3619","n3651","n3650","n3615","n3663","n3631","n3596","n3604","n3655","n3586","n3595","n3701","n3603","n3686","n3611","n3568","n3674","n3613","n3580","n3562","n3564","n3689","n3585","n3670","n3659","n3684","n3680","n3646","n3558","n3556","n3692","n3563","n3575","n3571","n3675","n3557","n3700","n3656","n3622","n3657","n3565","n3669","n3658","n3618","n3624","n3688","n3610","n3570","n3645","n3649","n3583","n3694","n3561","n3554","n3614","n3698","n3581","n3635","n3641","n3569","n3647","n3628","n3598","n3696","n3665","n3639","n3607","n3695","n3642","n3672","n3577","n3643","n3691","n3602","n3576","n3591","n3560","n3606","n3685","n3597","n3629","n3661","n3654","n3616","n3697","n3578","n3609","n3653","n3699","n3566","n3637","n3567","n3666","n3555","n3599","n3590","n3572","n3593","n3690","n3681","n3612","n3682","n3668","n3587","n3621","n3636","n3662","n3589","n3573","n3652","n3664","n3632","n3574","n3594","n3584","n3630","n3634"],tags:{name:"Hoffman Pond",natural:"water",water:"reservoir"}},w641:{id:"w641",nodes:["n2988","n3534","n3535","n3536","n3537","n3538","n3539","n3540","n3541","n3542","n3543","n3544","n3545","n3546","n3547","n3548","n2970"],tags:{waterway:"river"}},w642:{id:"w642",nodes:["n3702","n3703","n3704","n3705","n3706","n3707","n3708","n3709","n3710","n3711","n3712","n3713","n3714","n3715","n3716","n3717","n3718","n3719","n3720","n3721","n3722","n3723","n3724","n3725","n3726","n3727","n3728","n3729","n3730","n3731","n3732","n3733","n3734","n3735","n3736","n3737","n3738","n3739","n3740","n3741","n3742","n3743","n3702"],tags:{admin_level:"8",boundary:"administrative"}},w643:{id:"w643",nodes:["n2839","n2873"],tags:{highway:"service",service:"driveway"}},w644:{id:"w644",nodes:["n2873","n2840"],tags:{bridge:"yes",highway:"service",layer:"1",service:"driveway"}},w645:{id:"w645",nodes:["n2840","n2841","n2842","n2845","n2866"],tags:{highway:"service",service:"driveway",surface:"unpaved"}},w646:{id:"w646",nodes:["n2752","n3759","n1420","n1421","n1422","n3758","n4507","n4506","n4505","n4520","n3199","n4522","n4504","n4546","n3200","n4547","n3412"],tags:{highway:"residential",name:"Flower Street"}},w647:{id:"w647",nodes:["n2874","n2875","n2876","n2954","n2874"],tags:{building:"industrial"}},w648:{id:"w648",nodes:["n3778","n3779","n3780","n3781","n3782","n3783","n3778"],tags:{building:"yes"}},w649:{id:"w649",nodes:["n3197","n4543","n4544","n3198"],tags:{highway:"residential",name:"Morris Avenue",surface:"unpaved"}},w65:{id:"w65",nodes:["n317","n318","n319","n320","n321"],tags:{footway:"sidewalk",highway:"footway"}},w650:{id:"w650",nodes:["n3207","n4526","n4528","n4548","n3203","n4549","n3413","n2762"],tags:{highway:"residential",name:"Adams Street"}},w651:{id:"w651",nodes:["n3788","n3785","n3786","n3787","n3788"],tags:{power:"station"}},w652:{id:"w652",nodes:["n2957","n3163","n3241"],tags:{barrier:"wall"}},w653:{id:"w653",nodes:["n3549","n3802","n3803","n3800","n3801"],tags:{highway:"service",surface:"unpaved"}},w654:{id:"w654",nodes:["n3164","n3165","n3166","n3167","n3168","n3505","n3164"],tags:{building:"yes"}},w655:{id:"w655",nodes:["n3506","n3517","n3760","n3761","n3762","n3763","n3506"],tags:{building:"yes"}},w656:{id:"w656",nodes:["n3764","n3765","n3766","n3767","n3768","n3769","n3770","n3771","n3764"],tags:{building:"yes"}},w657:{id:"w657",nodes:["n3772","n3773","n3774","n3775","n3772"],tags:{building:"yes"}},w658:{id:"w658",nodes:["n3776","n3777","n3784","n3789","n3776"],tags:{building:"yes"}},w659:{id:"w659",nodes:["n3930","n3931","n3932","n3933","n3934","n3935","n3936","n3937","n3938","n3930"],tags:{leisure:"pitch",sport:"baseball"}},w66:{id:"w66",nodes:["n321","n322"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w660:{id:"w660",nodes:["n3982","n3842","n3864","n3865","n2938","n3866","n2939","n3867","n3868","n3858","n2937","n3869","n2935","n2934","n3870","n3348","n3862"],tags:{highway:"service"}},w661:{id:"w661",nodes:["n3968","n3969"],tags:{highway:"footway"}},w662:{id:"w662",nodes:["n3875","n3876","n3877","n3878","n3879","n3880","n3881","n3882","n3875"],tags:{amenity:"parking"}},w663:{id:"w663",nodes:["n3964","n3965"],tags:{highway:"footway"}},w664:{id:"w664",nodes:["n3966","n3967"],tags:{highway:"footway"}},w665:{id:"w665",nodes:["n3857","n3890","n3884","n3894","n3889","n3899","n3885","n3886","n3896","n3887"],tags:{highway:"service",service:"parking_aisle"}},w666:{id:"w666",nodes:["n3895","n3896"],tags:{highway:"service",service:"parking_aisle"}},w667:{id:"w667",nodes:["n3274","n3977","n3984","n3983","n3981","n3844","n3978","n3982","n3861","n3862","n3873","n3874","n4468","n3863"],tags:{access:"private",highway:"service",name:"Collins Drive"}},w668:{id:"w668",nodes:["n3900","n3901","n3902","n3903","n3904","n3905","n3808","n3809","n3906","n3907","n3908","n3967","n3909","n3910","n3911","n3955","n3964","n3912","n3913","n3914","n3915","n3916","n3917","n3918","n3919","n3920","n3921","n3922","n3923","n3924","n3925","n3926","n3927","n3969","n3970","n3928","n3807","n3929","n3900"],tags:{building:"school"}},w669:{id:"w669",nodes:["n3272","n39","n40","n3974","n3863","n3857","n3892","n3883","n3891","n3889"],tags:{highway:"service"}},w67:{id:"w67",nodes:["n322","n886","n323","n475"],tags:{footway:"crossing",highway:"footway"}},w670:{id:"w670",nodes:["n3473","n3859","n3860","n3980","n4908","n4865"],tags:{highway:"secondary",name:"Hoffman Street",ref:"M 60"}},w671:{id:"w671",nodes:["n3970","n3806","n3971"],tags:{highway:"footway"}},w672:{id:"w672",nodes:["n3892","n3893","n3894"],tags:{highway:"service",service:"parking_aisle"}},w673:{id:"w673",nodes:["n3945","n3946","n3992","n3990","n3945"],tags:{leisure:"pitch",sport:"tennis"}},w674:{id:"w674",nodes:["n3890","n3893","n3891"],tags:{highway:"service",service:"parking_aisle"}},w675:{id:"w675",nodes:["n3947","n3948","n3994","n3993","n3947"],tags:{leisure:"pitch",sport:"tennis"}},w676:{id:"w676",nodes:["n3858","n3954","n3972","n3810","n3811","n3812","n3841","n3973","n3898","n3963","n3897","n3896"],tags:{highway:"service"}},w677:{id:"w677",nodes:["n3977","n3996","n3997","n4004","n3998","n3999","n4005","n4007","n4006","n3995","n4000","n3843","n4001","n4002","n4003","n3949","n3351","n3950","n3354","n3350","n3951","n3349","n3952","n3953","n3954","n3956","n3966","n3955"],tags:{highway:"footway"}},w678:{id:"w678",nodes:["n3887","n3888","n3895","n3899"],tags:{highway:"service",service:"parking_aisle"}},w679:{id:"w679",nodes:["n3946","n3947","n3993","n3992","n3946"],tags:{leisure:"pitch",sport:"tennis"}},w68:{id:"w68",nodes:["n294","n1952","n326"],tags:{footway:"sidewalk",highway:"footway"}},w680:{id:"w680",nodes:["n3939","n3940","n3941","n3985","n3986","n3987","n3988","n3989","n3942","n3943","n3939"],tags:{leisure:"pitch",sport:"baseball"}},w681:{id:"w681",nodes:["n3990","n3991","n3944","n3945","n3990"],tags:{leisure:"pitch",sport:"tennis"}},w682:{id:"w682",nodes:["n3871","n3872","n3873","n3874","n3871"],tags:{amenity:"parking"}},w683:{id:"w683",nodes:["n3956","n3965","n3957","n3958","n3959"],tags:{footway:"sidewalk",highway:"footway"}},w684:{id:"w684",nodes:["n3790","n3791","n3792","n3793","n3790"],tags:{building:"shed"}},w685:{id:"w685",nodes:["n3794","n3795","n3796","n3797","n3794"],tags:{building:"yes"}},w686:{id:"w686",nodes:["n3798","n3799","n3804","n3805","n3798"],tags:{building:"yes"}},w687:{id:"w687",nodes:["n3806","n3807"],tags:{highway:"footway"}},w688:{id:"w688",nodes:["n3845","n3846","n3847","n3848","n3845"],tags:{leisure:"pitch",sport:"american_football"}},w689:{id:"w689",nodes:["n3849","n4021","n3850","n3851","n3852","n3853","n3854","n3855","n3856","n3975","n3976","n3979","n4008","n4009","n4010","n4011","n4012","n4013","n4014","n4015","n4016","n4017","n4018","n4019","n4020","n4021"],tags:{leisure:"track",sport:"running",highway:"footway"}},w69:{id:"w69",nodes:["n326","n327"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w690:{id:"w690",nodes:["n4022","n4023","n4024","n4025","n4026","n4027","n4022"],tags:{building:"yes"}},w691:{id:"w691",nodes:["n4028","n4029","n4030","n4031","n4028"],tags:{building:"yes"}},w692:{id:"w692",nodes:["n4032","n4033","n4034","n4035","n4032"],tags:{building:"yes"}},w693:{id:"w693",nodes:["n4036","n4037","n4038","n4039","n4036"],tags:{building:"yes"}},w694:{id:"w694",nodes:["n4040","n4041","n4042","n4043","n4040"],tags:{building:"yes"}},w695:{id:"w695",nodes:["n4044","n4045","n4050","n4053","n4046","n4047","n4048","n4049","n4044"],tags:{building:"yes"}},w696:{id:"w696",nodes:["n4050","n4051","n4052","n4053","n4050"],tags:{building:"roof"}},w697:{id:"w697",nodes:["n4054","n4068","n4055","n4056","n4057","n4054"],tags:{building:"yes"}},w698:{id:"w698",nodes:["n4058","n4059","n4060","n4061","n4062","n4063","n4058"],tags:{building:"yes"}},w699:{id:"w699",nodes:["n4064","n4066","n4065"],tags:{barrier:"fence"}},w7:{id:"w7",nodes:["n43","n44","n45"],tags:{highway:"service"}},w70:{id:"w70",nodes:["n327","n328","n27","n329"],tags:{footway:"sidewalk",highway:"footway"}},w700:{id:"w700",nodes:["n4066","n4067","n4068"],tags:{barrier:"fence"}},w701:{id:"w701",nodes:["n4069","n4070","n4071","n4072","n4069"],tags:{building:"shed"}},w702:{id:"w702",nodes:["n4073","n4074","n4075","n4076","n4077","n4078","n4079","n4080","n4081","n4082","n4083","n4084","n4073"],tags:{building:"yes"}},w703:{id:"w703",nodes:["n4085","n4093","n4086","n4087","n4088","n4089","n4090","n4091","n4092","n4085"],tags:{building:"yes"}},w704:{id:"w704",nodes:["n4093","n4094","n4095","n4096"],tags:{barrier:"fence"}},w705:{id:"w705",nodes:["n4097","n4098","n4099","n4100","n4097"],tags:{building:"yes"}},w706:{id:"w706",nodes:["n4098","n4102","n4087"],tags:{barrier:"fence"}},w707:{id:"w707",nodes:["n4101","n4102","n4096","n4170","n4103"],tags:{barrier:"fence"}},w708:{id:"w708",nodes:["n4104","n4105","n4106","n4107","n4104"],tags:{access:"private",leisure:"swimming_pool"}},w709:{id:"w709",nodes:["n4108","n4109","n4110","n4111","n4108"],tags:{building:"yes"}},w71:{id:"w71",nodes:["n329","n331"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w710:{id:"w710",nodes:["n4112","n4113","n4114","n4115","n4116","n4117","n4118","n4119","n4112"],tags:{building:"yes"}},w711:{id:"w711",nodes:["n4120","n4121","n4122","n4123","n4120"],tags:{building:"yes"}},w712:{id:"w712",nodes:["n4124","n4125","n4126","n4127","n4128","n4129","n4124"],tags:{building:"yes"}},w713:{id:"w713",nodes:["n4130","n4131","n4132","n4133","n4130"],tags:{building:"shed"}},w714:{id:"w714",nodes:["n4134","n4135","n4136","n4137","n4138","n4139","n4140","n4141","n4142","n4143","n4134"],tags:{building:"yes"}},w715:{id:"w715",nodes:["n4144","n4145","n4146","n4147","n4148","n4149","n4144"],tags:{building:"yes"}},w716:{id:"w716",nodes:["n4150","n4151","n4152","n4153","n4150"],tags:{building:"yes"}},w717:{id:"w717",nodes:["n4154","n4155","n4156","n4157","n4154"],tags:{building:"yes"}},w718:{id:"w718",nodes:["n4158","n4159","n4160","n4161","n4162","n4163","n4164","n4165","n4158"],tags:{building:"yes"}},w719:{id:"w719",nodes:["n4166","n4167","n4168","n4169","n4166"],tags:{building:"yes"}},w72:{id:"w72",nodes:["n331","n344","n332","n333","n334"],tags:{footway:"sidewalk",highway:"footway"}},w720:{id:"w720",nodes:["n4170","n4171"],tags:{barrier:"fence"}},w721:{id:"w721",nodes:["n4138","n4103"],tags:{barrier:"fence"}},w722:{id:"w722",nodes:["n4103","n4172"],tags:{barrier:"fence"}},w723:{id:"w723",nodes:["n4173","n4174"],tags:{barrier:"fence"}},w724:{id:"w724",nodes:["n4175","n4176","n4177","n4178","n4175"],tags:{building:"yes"}},w725:{id:"w725",nodes:["n4179","n4180","n4181","n4182","n4183","n4184","n4179"],tags:{building:"yes"}},w726:{id:"w726",nodes:["n4185","n4186","n4187","n4188","n4185"],tags:{building:"yes"}},w727:{id:"w727",nodes:["n4189","n4190","n4191","n4192","n4193","n4194","n4195","n4196","n4197","n4198","n4199","n4200","n4201","n4202","n4189"],tags:{building:"yes"}},w728:{id:"w728",nodes:["n4203","n4204","n4205","n4206","n4207","n4208","n4209","n4210","n4203"],tags:{building:"yes"}},w729:{id:"w729",nodes:["n4211","n4212","n4213","n4214","n4211"],tags:{building:"shed"}},w73:{id:"w73",nodes:["n335","n336","n337","n338","n339","n340","n341","n342","n335"],tags:{building:"yes"}},w730:{id:"w730",nodes:["n4215","n4216","n4217","n4218","n4215"],tags:{building:"yes"}},w731:{id:"w731",nodes:["n4219","n4220","n4221","n4222","n4223","n4224","n4225","n4226","n4227","n4228","n4229","n4230","n4219"],tags:{building:"yes"}},w732:{id:"w732",nodes:["n4231","n4232","n4233","n4234","n4235","n4236","n4237","n4238","n4231"],tags:{building:"yes"}},w733:{id:"w733",nodes:["n4239","n4240","n4241","n4242","n4243","n4244","n4245","n4246","n4247","n4248","n4241"],tags:{highway:"service"}},w734:{id:"w734",nodes:["n4240","n4249","n4248"],tags:{highway:"service",service:"parking_aisle"}},w735:{id:"w735",nodes:["n4250","n4251","n4252","n4253","n4254","n4255","n4256","n4257","n4258","n4250"],tags:{amenity:"parking"}},w736:{id:"w736",nodes:["n4259","n4260","n4261","n4262","n4259"],tags:{building:"yes"}},w737:{id:"w737",nodes:["n4263","n4264","n4265","n4266","n4267","n4268","n4269","n4270","n4271","n4272","n4273","n4274","n4275","n4276","n4263"],tags:{building:"yes"}},w738:{id:"w738",nodes:["n4277","n4278","n4279","n4280","n4281","n4282","n4277"],tags:{building:"yes"}},w739:{id:"w739",nodes:["n4283","n4284","n4285","n4286","n4287","n4288","n4289","n4290","n4291","n4292","n4293","n4294","n4283"],tags:{building:"yes"}},w74:{id:"w74",nodes:["n343","n344","n345"],tags:{highway:"service"}},w740:{id:"w740",nodes:["n4295","n4296","n4297","n4298","n4295"],tags:{building:"yes"}},w741:{id:"w741",nodes:["n4299","n4300","n4301","n4302","n4303","n4304","n4305","n4306","n4307","n4308","n4309","n4310","n4299"],tags:{building:"yes"}},w742:{id:"w742",nodes:["n4311","n4312","n4313","n4314","n4311"],tags:{building:"shed"}},w743:{id:"w743",nodes:["n4315","n4316","n4317","n4318","n4319","n4320","n4315"],tags:{building:"yes"}},w744:{id:"w744",nodes:["n4321","n4322","n4323","n4324","n4325","n4326","n4327","n4328","n4329","n4330","n4331","n4332","n4333","n4334","n4321"],tags:{building:"yes"}},w745:{id:"w745",nodes:["n4335","n4336","n4337","n4338","n4335"],tags:{building:"shed"}},w746:{id:"w746",nodes:["n4339","n4340","n4341","n4342","n4343","n4344","n4339"],tags:{building:"yes"}},w747:{id:"w747",nodes:["n4345","n4346","n4347","n4348","n4345"],tags:{building:"yes"}},w748:{id:"w748",nodes:["n4349","n4350","n4351","n4352","n4349"],tags:{building:"yes"}},w749:{id:"w749",nodes:["n4353","n4354","n4355","n4356","n4357","n4358","n4353"],tags:{building:"yes"}},w75:{id:"w75",nodes:["n346","n347","n348","n349","n350","n351","n346"],tags:{amenity:"parking"}},w750:{id:"w750",nodes:["n4612","n4359","n4360"],tags:{barrier:"fence"}},w751:{id:"w751",nodes:["n4361","n4362","n4363","n4364","n4361"],tags:{building:"yes"}},w752:{id:"w752",nodes:["n4365","n4366","n4367","n4368","n4365"],tags:{building:"yes"}},w753:{id:"w753",nodes:["n4369","n4370","n4371","n4372","n4375","n4369"],tags:{building:"yes"}},w754:{id:"w754",nodes:["n4373","n4374","n4375"],tags:{barrier:"fence"}},w755:{id:"w755",nodes:["n4376","n4377","n4378","n4379","n4376"],tags:{building:"shed"}},w756:{id:"w756",nodes:["n4380","n4381","n4382","n4383","n4384","n4385","n4386","n4387","n4388","n4389","n4390","n4391","n4380"],tags:{building:"yes"}},w757:{id:"w757",nodes:["n4392","n4393","n4394","n4395","n4392"],tags:{building:"yes"}},w758:{id:"w758",nodes:["n4396","n4397","n4398","n4399","n4396"],tags:{building:"shed"}},w759:{id:"w759",nodes:["n4400","n4401","n4402","n4403","n4404","n4405","n4406","n4407","n4408","n4409","n4410","n4411","n4412","n4413","n4414","n4415","n4400"],tags:{building:"yes"}},w76:{id:"w76",nodes:["n2561","n359","n2563","n2793","n357","n356","n2792","n355","n354","n2791","n2562","n353","n352","n358","n2561"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w760:{id:"w760",nodes:["n4416","n4417"],tags:{barrier:"fence"}},w761:{id:"w761",nodes:["n4418","n4416","n4419"],tags:{barrier:"fence"}},w762:{id:"w762",nodes:["n4420","n4421"],tags:{barrier:"fence"}},w763:{id:"w763",nodes:["n4422","n4423","n4424","n4425","n4426","n4427","n4428","n4429","n4430","n4431","n4432","n4433","n4422"],tags:{building:"yes"}},w764:{id:"w764",nodes:["n4434","n4435","n4436","n4437","n4438","n4439","n4440","n4441","n4442","n4445","n4444","n4443","n4434"],tags:{building:"yes"}},w765:{id:"w765",nodes:["n4446","n4447","n4448","n4449","n4446"],tags:{building:"yes"}},w766:{id:"w766",nodes:["n4450","n4451","n4452","n4453","n4450"],tags:{building:"yes"}},w767:{id:"w767",nodes:["n4454","n4455","n4456","n4457","n4454"],tags:{building:"yes"}},w768:{id:"w768",nodes:["n4461","n4458","n4460"],tags:{footway:"crossing",highway:"footway"}},w769:{id:"w769",nodes:["n4460","n4462","n4459"],tags:{footway:"sidewalk",highway:"footway"}},w77:{id:"w77",nodes:["n325","n360","n361"],tags:{footway:"crossing",highway:"footway"}},w770:{id:"w770",nodes:["n4462","n4463","n4464"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w771:{id:"w771",nodes:["n4464","n4465","n4466","n4467"],tags:{footway:"sidewalk",highway:"footway"}},w772:{id:"w772",nodes:["n3959","n3968","n3971","n3960","n3961","n3962","n3963"],tags:{footway:"sidewalk",highway:"footway"}},w773:{id:"w773",nodes:["n4467","n4468","n3959"],tags:{footway:"crossing",highway:"footway"}},w774:{id:"w774",nodes:["n4459","n4469","n4470"],tags:{footway:"crossing",highway:"footway"}},w775:{id:"w775",nodes:["n4470","n4471","n4472","n4473","n4474","n4475"],tags:{footway:"sidewalk",highway:"footway"}},w776:{id:"w776",nodes:["n4475","n4476","n4477"],tags:{footway:"crossing",highway:"footway"}},w777:{id:"w777",nodes:["n4477","n4478","n4479","n4480","n4481","n4482","n4483","n4484","n4485","n4486","n4487"],tags:{footway:"sidewalk",highway:"footway"}},w778:{id:"w778",nodes:["n4488","n4489","n4490","n4491","n4488"],tags:{building:"yes"}},w779:{id:"w779",nodes:["n4492","n4493","n4494","n4495","n4492"],tags:{building:"yes"}},w78:{id:"w78",nodes:["n361","n362","n369"],tags:{footway:"sidewalk",highway:"footway"}},w780:{id:"w780",nodes:["n4496","n4497","n4498","n4499","n4496"],tags:{access:"private",leisure:"swimming_pool"}},w781:{id:"w781",nodes:["n4508","n4509"],tags:{footway:"sidewalk",highway:"footway"}},w782:{id:"w782",nodes:["n4510","n4511"],tags:{footway:"sidewalk",highway:"footway"}},w783:{id:"w783",nodes:["n4512","n4513"],tags:{footway:"sidewalk",highway:"footway"}},w784:{id:"w784",nodes:["n4513","n4514"],tags:{footway:"sidewalk",highway:"footway"}},w785:{id:"w785",nodes:["n4515","n4516"],tags:{footway:"sidewalk",highway:"footway"}},w786:{id:"w786",nodes:["n4517","n4515"],tags:{footway:"sidewalk",highway:"footway"}},w787:{id:"w787",nodes:["n4518","n4519"],tags:{footway:"sidewalk",highway:"footway"}},w788:{id:"w788",nodes:["n4519","n4520","n4513"],tags:{footway:"crossing",highway:"footway"}},w789:{id:"w789",nodes:["n4515","n4521","n4513"],tags:{footway:"crossing",highway:"footway"}},w79:{id:"w79",nodes:["n362","n363","n334"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w790:{id:"w790",nodes:["n4515","n4522","n4523"],tags:{footway:"crossing",highway:"footway"}},w791:{id:"w791",nodes:["n4523","n4524","n4519"],tags:{footway:"crossing",highway:"footway"}},w792:{id:"w792",nodes:["n4523","n4525"],tags:{footway:"sidewalk",highway:"footway"}},w793:{id:"w793",nodes:["n4525","n4526","n4527"],tags:{footway:"crossing",highway:"footway"}},w794:{id:"w794",nodes:["n4527","n4529"],tags:{footway:"sidewalk",highway:"footway"}},w795:{id:"w795",nodes:["n4529","n4530","n4518"],tags:{footway:"crossing",highway:"footway"}},w796:{id:"w796",nodes:["n4518","n4531"],tags:{footway:"sidewalk",highway:"footway"}},w797:{id:"w797",nodes:["n4531","n4532"],tags:{footway:"sidewalk",highway:"footway"}},w798:{id:"w798",nodes:["n4533","n4534"],tags:{footway:"sidewalk",highway:"footway"}},w799:{id:"w799",nodes:["n4518","n4538","n4539"],tags:{footway:"crossing",highway:"footway"}},w8:{id:"w8",nodes:["n46","n47","n145","n48","n49","n46"],tags:{amenity:"parking"}},w80:{id:"w80",nodes:["n334","n364","n365"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w800:{id:"w800",nodes:["n4539","n4540","n4541"],tags:{footway:"crossing",highway:"footway"}},w801:{id:"w801",nodes:["n4541","n4542","n4529"],tags:{footway:"crossing",highway:"footway"}},w802:{id:"w802",nodes:["n4552","n4553"],tags:{footway:"sidewalk",highway:"footway"}},w803:{id:"w803",nodes:["n4554","n4555","n4556","n4557","n4558","n4559","n4554"],tags:{building:"yes"}},w804:{id:"w804",nodes:["n4562","n4563"],tags:{barrier:"retaining_wall"}},w805:{id:"w805",nodes:["n4568","n4569","n4570","n4571","n4568"],tags:{building:"yes"}},w806:{id:"w806",nodes:["n3473","n4575","n4576","n4581","n4580","n3551"],tags:{highway:"residential",oneway:"yes"}},w807:{id:"w807",nodes:["n4613","n4614","n4615","n4616","n4617","n4618","n4619","n4620","n4613"],tags:{leisure:"pitch",sport:"baseball"}},w808:{id:"w808",nodes:["n4621","n4622","n4623","n4624","n4625","n4626","n4627","n4628","n4629","n4630"],tags:{highway:"service"}},w809:{id:"w809",nodes:["n4631","n4632","n4633","n4637","n4634","n4638","n4635","n4636"],tags:{highway:"service"}},w81:{id:"w81",nodes:["n365","n366","n367"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w810:{id:"w810",nodes:["n4639","n4640","n4641"],tags:{barrier:"fence"}},w811:{id:"w811",nodes:["n4649","n4650","n4651","n4652","n4649"],tags:{building:"yes"}},w812:{id:"w812",nodes:["n4654","n4655"],tags:{barrier:"fence"}},w813:{id:"w813",nodes:["n4656","n4657"],tags:{barrier:"fence"}},w814:{id:"w814",nodes:["n4669","n4670","n4671","n4672","n4669"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w815:{id:"w815",nodes:["n4678","n4679","n4680","n1889"],tags:{highway:"service"}},w816:{id:"w816",nodes:["n239","n4686","n4687"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w817:{id:"w817",nodes:["n4687","n4688","n4689"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w818:{id:"w818",nodes:["n4689","n4690","n307"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w819:{id:"w819",nodes:["n2266","n4743"],tags:{highway:"path"}},w82:{id:"w82",nodes:["n724","n368","n369"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w820:{id:"w820",nodes:["n4785","n4786","n4787","n4788","n1684","n4760","n4769","n4761","n4762","n4763","n4764","n4765","n4766","n4767","n4768","n4785"],tags:{natural:"wood"}},w821:{id:"w821",nodes:["n4769","n4770","n4771","n4772","n4773","n4774","n4775","n4776","n4777","n4778","n4779","n4780","n4781","n4782","n4783","n4784","n4785","n4768","n4767","n4766","n4765","n4764","n4763","n4762","n4761","n4769"],tags:{natural:"scrub"}},w822:{id:"w822",nodes:["n4772","n4789","n4790","n4791","n4792","n4793","n4794","n4795","n4796","n4797","n4798","n4799","n4783","n4782","n4781","n4780","n4779","n4778","n4777","n4776","n4775","n4774","n4773","n4772"],tags:{natural:"wood"}},w823:{id:"w823",nodes:["n4800","n4801","n4802","n4803","n4804","n4805","n4806","n4807","n4808","n4809","n4810","n4811","n4812","n4813","n4814","n4815","n4816","n3490","n3489","n4800"],tags:{natural:"wood"}},w824:{id:"w824",nodes:["n4817","n4818","n4819","n4820","n4821","n4822","n4817"],tags:{landuse:"recreation_ground"}},w825:{id:"w825",nodes:["n4563","n4823","n4824","n4829","n4825","n4826","n4827","n4828","n4562","n4563"],tags:{landuse:"recreation_ground"}},w826:{id:"w826",nodes:["n4830","n4831","n4832","n4833","n4834","n4835","n4836","n4830"],tags:{landuse:"industrial"}},w827:{id:"w827",nodes:["n4563","n4837","n4838","n4839","n4840","n4841","n4842","n4827","n4828","n4562","n4563"],tags:{landuse:"industrial"}},w828:{id:"w828",nodes:["n4843","n4844","n4845","n4846","n4843"],tags:{landuse:"farmland"}},w829:{id:"w829",nodes:["n3712","n4847","n4848","n4849","n4850","n4851","n4852","n4858","n4864","n4959","n4960","n4853","n4857","n4854","n4855","n4856","n3712"],tags:{aeroway:"aerodrome",name:"Three Rivers Municipal Airport"}},w83:{id:"w83",nodes:["n371","n372","n373","n374","n371"],tags:{building:"yes"}},w830:{id:"w830",nodes:["n4855","n4854","n4857","n4853","n4960"],tags:{barrier:"fence"}},w831:{id:"w831",nodes:["n4860","n4859","n4858","n4852","n4851"],tags:{barrier:"fence"}},w832:{id:"w832",nodes:["n4866","n4878","n4869","n4867"],tags:{aeroway:"runway",ref:"5/23"}},w833:{id:"w833",nodes:["n4868","n4890","n4894","n4881","n4869","n4905","n4870"],tags:{aeroway:"runway",ref:"9/27"}},w834:{id:"w834",nodes:["n4871","n4875","n4872","n4895","n4873","n4874","n4871"],tags:{aeroway:"apron"}},w835:{id:"w835",nodes:["n4875","n4876","n4877","n4878","n4879","n4880","n4882","n4881"],tags:{aeroway:"taxiway"}},w836:{id:"w836",nodes:["n4882","n4893","n4883","n4891","n4884","n4885","n4886","n4887","n4888","n4892","n4889","n4890"],tags:{aeroway:"taxiway"}},w837:{id:"w837",nodes:["n4893","n4894"],tags:{aeroway:"taxiway"}},w838:{id:"w838",nodes:["n4895","n4896","n4897","n4898","n4899","n4900","n4901","n4902","n4903","n4906","n4904","n4905"],tags:{aeroway:"taxiway"}},w839:{id:"w839",nodes:["n4907","n4908"],tags:{highway:"service"}},w84:{id:"w84",nodes:["n374","n375","n376","n377","n373","n374"],tags:{building:"yes"}},w840:{id:"w840",nodes:["n4909","n4907","n4910"],tags:{highway:"service"}},w841:{id:"w841",nodes:["n4911","n4912","n4913","n4914","n4911"],tags:{building:"yes"}},w842:{id:"w842",nodes:["n4915","n4916","n4917","n4918","n4915"],tags:{aeroway:"hangar",building:"yes"}},w843:{id:"w843",nodes:["n4919","n4920","n4921","n4922","n4919"],tags:{building:"yes"}},w844:{id:"w844",nodes:["n4923","n4924","n4925","n4926","n4923"],tags:{aeroway:"hangar",building:"yes"}},w845:{id:"w845",nodes:["n4927","n4928","n4929","n4930","n4927"],tags:{aeroway:"hangar",building:"yes"}},w846:{id:"w846",nodes:["n4931","n4932","n4933","n4934","n4931"],tags:{aeroway:"hangar",building:"yes"}},w847:{id:"w847",nodes:["n4935","n4936","n4937","n4938","n4935"],tags:{aeroway:"hangar",building:"yes"}},w848:{id:"w848",nodes:["n4939","n4940","n4941","n4942","n4939"],tags:{aeroway:"hangar",building:"yes"}},w849:{id:"w849",nodes:["n4943","n4944","n4945","n4946","n4943"],tags:{aeroway:"hangar",building:"yes"}},w85:{id:"w85",nodes:["n431","n432","n1038","n433","n434","n1040","n431"],tags:{building:"yes"}},w850:{id:"w850",nodes:["n4947","n4948","n4949","n4950","n4947"],tags:{aeroway:"hangar",building:"yes"}},w851:{id:"w851",nodes:["n4951","n4952","n4953","n4954","n4951"],tags:{aeroway:"hangar",building:"yes"}},w852:{id:"w852",nodes:["n4955","n4956","n4957","n4958","n4955"],tags:{aeroway:"hangar",building:"yes"}},w853:{id:"w853",nodes:["n4959","n4864","n4861","n4862","n4863"],tags:{barrier:"fence"}},w854:{id:"w854",nodes:["n4961","n4962","n4963","n4964","n4965","n4966","n4967","n4968","n4969","n4961"],tags:{landuse:"farmland"}},w855:{id:"w855",nodes:["n4970","n4971","n4972","n4973","n4974","n4975","n4976","n4977","n4978","n4980","n4970"],tags:{landuse:"farmland"}},w856:{id:"w856",nodes:["n4979","n4980","n4978","n4981","n4982","n4983","n4984","n4985","n4979"],tags:{natural:"scrub"}},w857:{id:"w857",nodes:["n4986","n4987","n4988","n5032","n4989","n4990","n4991","n4992","n4993","n4994","n4995","n4996","n4997","n4998","n4999","n5000","n5001","n5002","n5022","n5023","n5024","n5025","n5030","n5031","n5029","n5028","n5027","n5026","n4986"],tags:{landuse:"farmland"}},w858:{id:"w858",nodes:["n5001","n5003","n5004","n4999","n5000","n5001"],tags:{natural:"scrub"}},w859:{id:"w859",nodes:["n5005","n5006","n5007","n5008","n5009","n5010","n5021","n5020","n5019","n5011","n5012","n5013","n5018","n5014","n5015","n5017","n5016","n5005"],tags:{landuse:"farmland"}},w86:{id:"w86",nodes:["n384","n385","n386","n387","n384"],tags:{building:"yes"}},w860:{id:"w860",nodes:["n3020","n5033","n5034","n5035","n3179","n3180","n3191","n3181","n3190","n3182","n3183","n3184","n3185","n3186","n3187","n3188","n3189","n3160","n3161","n3162","n2126","n2153","n2288","n3020"],tags:{landuse:"industrial"}},w87:{id:"w87",nodes:["n387","n388","n389","n386","n387"],tags:{building:"yes"}},w88:{id:"w88",nodes:["n390","n391","n392","n393","n390"],tags:{building:"yes"}},w89:{id:"w89",nodes:["n394","n2895"],tags:{highway:"service"}},w9:{id:"w9",nodes:["n50","n51","n148","n52","n57","n891","n53","n50"],tags:{building:"yes"}},w90:{id:"w90",nodes:["n398","n399","n400","n401","n402","n403","n404","n405","n406","n407","n408","n409","n410","n411","n412","n413","n414","n415","n416","n417","n398"],tags:{building:"yes"}},w91:{id:"w91",nodes:["n418","n423","n419"],tags:{highway:"service"}},w92:{id:"w92",nodes:["n420","n421","n422","n423","n420"],tags:{amenity:"parking"}},w93:{id:"w93",nodes:["n2282","n1876"],tags:{name:"Rocky River",tunnel:"building_passage",waterway:"river"}},w94:{id:"w94",nodes:["n1876","n885","n1875","n2234"],tags:{name:"Rocky River",waterway:"river"}},w95:{id:"w95",nodes:["n425","n426","n427","n914","n428","n913","n425"],tags:{building:"yes"}},w96:{id:"w96",nodes:["n456","n620","n1034","n1035","n456"],tags:{building:"yes"}},w97:{id:"w97",nodes:["n435","n912","n451","n321"],tags:{highway:"footway"}},w98:{id:"w98",nodes:["n436","n319","n437","n438","n439","n440","n441","n476","n442"],tags:{highway:"service"}},w99:{id:"w99",nodes:["n443","n444","n445","n446","n447","n448","n449","n450","n443"],tags:{amenity:"parking"}},n2934:{id:"n2934",loc:[-85.617051,41.952263]},n2935:{id:"n2935",loc:[-85.61699,41.952276]},n2937:{id:"n2937",loc:[-85.616847,41.952262]},n2938:{id:"n2938",loc:[-85.616577,41.951956]},n2939:{id:"n2939",loc:[-85.61656,41.952044]},n3348:{id:"n3348",loc:[-85.61714,41.9522]},n3349:{id:"n3349",loc:[-85.616517,41.95212]},n3350:{id:"n3350",loc:[-85.616489,41.952033]},n3351:{id:"n3351",loc:[-85.616529,41.951907]},n3354:{id:"n3354",loc:[-85.616488,41.951994]},w599:{tags:{footway:"sidewalk",highway:"footway"},id:"w599",nodes:["n1021","n1022","n731","n728","n1023","n1025","n1024","n1019"]},w618:{tags:{footway:"sidewalk",highway:"footway"},id:"w618",nodes:["n1020","n1021"]},n3355:{id:"n3355",loc:[-85.634489,41.946193]}};
105002
105003         // Tooltips and svg mask used to highlight certain features
105004         function uiCurtain() {
105005
105006             var surface = d3_select(null),
105007                 tooltip = d3_select(null),
105008                 darkness = d3_select(null);
105009
105010             function curtain(selection) {
105011                 surface = selection
105012                     .append('svg')
105013                     .attr('id', 'curtain')
105014                     .style('z-index', 1000)
105015                     .style('pointer-events', 'none')
105016                     .style('position', 'absolute')
105017                     .style('top', 0)
105018                     .style('left', 0);
105019
105020                 darkness = surface.append('path')
105021                     .attr('x', 0)
105022                     .attr('y', 0)
105023                     .attr('class', 'curtain-darkness');
105024
105025                 d3_select(window).on('resize.curtain', resize);
105026
105027                 tooltip = selection.append('div')
105028                     .attr('class', 'tooltip')
105029                     .style('z-index', 1002);
105030
105031                 tooltip
105032                     .append('div')
105033                     .attr('class', 'popover-arrow');
105034
105035                 tooltip
105036                     .append('div')
105037                     .attr('class', 'popover-inner');
105038
105039                 resize();
105040
105041
105042                 function resize() {
105043                     surface
105044                         .attr('width', window.innerWidth)
105045                         .attr('height', window.innerHeight);
105046                     curtain.cut(darkness.datum());
105047                 }
105048             }
105049
105050
105051             /**
105052              * Reveal cuts the curtain to highlight the given box,
105053              * and shows a tooltip with instructions next to the box.
105054              *
105055              * @param  {String|ClientRect} [box]   box used to cut the curtain
105056              * @param  {String}    [text]          text for a tooltip
105057              * @param  {Object}    [options]
105058              * @param  {string}    [options.tooltipClass]    optional class to add to the tooltip
105059              * @param  {integer}   [options.duration]        transition time in milliseconds
105060              * @param  {string}    [options.buttonText]      if set, create a button with this text label
105061              * @param  {function}  [options.buttonCallback]  if set, the callback for the button
105062              * @param  {String|ClientRect} [options.tooltipBox]  box for tooltip position, if different from box for the curtain
105063              */
105064             curtain.reveal = function(box, text, options) {
105065                 if (typeof box === 'string') {
105066                     box = d3_select(box).node();
105067                 }
105068                 if (box && box.getBoundingClientRect) {
105069                     box = copyBox(box.getBoundingClientRect());
105070                 }
105071
105072                 options = options || {};
105073
105074                 var tooltipBox;
105075                 if (options.tooltipBox) {
105076                     tooltipBox = options.tooltipBox;
105077                     if (typeof tooltipBox === 'string') {
105078                         tooltipBox = d3_select(tooltipBox).node();
105079                     }
105080                     if (tooltipBox && tooltipBox.getBoundingClientRect) {
105081                         tooltipBox = copyBox(tooltipBox.getBoundingClientRect());
105082                     }
105083                 } else {
105084                     tooltipBox = box;
105085                 }
105086
105087                 if (tooltipBox && text) {
105088                     // pseudo markdown bold text for the instruction section..
105089                     var parts = text.split('**');
105090                     var html = parts[0] ? '<span>' + parts[0] + '</span>' : '';
105091                     if (parts[1]) {
105092                         html += '<span class="instruction">' + parts[1] + '</span>';
105093                     }
105094
105095                     html = html.replace(/\*(.*?)\*/g, '<em>$1</em>');   // emphasis
105096                     html = html.replace(/\{br\}/g, '<br/><br/>');       // linebreak
105097
105098                     if (options.buttonText && options.buttonCallback) {
105099                         html += '<div class="button-section">' +
105100                             '<button href="#" class="button action">' + options.buttonText + '</button></div>';
105101                     }
105102
105103                     var classes = 'curtain-tooltip popover tooltip arrowed in ' + (options.tooltipClass || '');
105104                     tooltip
105105                         .classed(classes, true)
105106                         .selectAll('.popover-inner')
105107                         .html(html);
105108
105109                     if (options.buttonText && options.buttonCallback) {
105110                         var button = tooltip.selectAll('.button-section .button.action');
105111                         button
105112                             .on('click', function() {
105113                                 event.preventDefault();
105114                                 options.buttonCallback();
105115                             });
105116                     }
105117
105118                     var tip = copyBox(tooltip.node().getBoundingClientRect()),
105119                         w = window.innerWidth,
105120                         h = window.innerHeight,
105121                         tooltipWidth = 200,
105122                         tooltipArrow = 5,
105123                         side, pos;
105124
105125
105126                     // hack: this will have bottom placement,
105127                     // so need to reserve extra space for the tooltip illustration.
105128                     if (options.tooltipClass === 'intro-mouse') {
105129                         tip.height += 80;
105130                     }
105131
105132                     // trim box dimensions to just the portion that fits in the window..
105133                     if (tooltipBox.top + tooltipBox.height > h) {
105134                         tooltipBox.height -= (tooltipBox.top + tooltipBox.height - h);
105135                     }
105136                     if (tooltipBox.left + tooltipBox.width > w) {
105137                         tooltipBox.width -= (tooltipBox.left + tooltipBox.width - w);
105138                     }
105139
105140                     // determine tooltip placement..
105141
105142                     if (tooltipBox.top + tooltipBox.height < 100) {
105143                         // tooltip below box..
105144                         side = 'bottom';
105145                         pos = [
105146                             tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
105147                             tooltipBox.top + tooltipBox.height
105148                         ];
105149
105150                     } else if (tooltipBox.top > h - 140) {
105151                         // tooltip above box..
105152                         side = 'top';
105153                         pos = [
105154                             tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
105155                             tooltipBox.top - tip.height
105156                         ];
105157
105158                     } else {
105159                         // tooltip to the side of the tooltipBox..
105160                         var tipY = tooltipBox.top + tooltipBox.height / 2 - tip.height / 2;
105161
105162                         if (textDirection === 'rtl') {
105163                             if (tooltipBox.left - tooltipWidth - tooltipArrow < 70) {
105164                                 side = 'right';
105165                                 pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY];
105166
105167                             } else {
105168                                 side = 'left';
105169                                 pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY];
105170                             }
105171
105172                         } else {
105173                             if (tooltipBox.left + tooltipBox.width + tooltipArrow + tooltipWidth > w - 70) {
105174                                 side = 'left';
105175                                 pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY];
105176                             }
105177                             else {
105178                                 side = 'right';
105179                                 pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY];
105180                             }
105181                         }
105182                     }
105183
105184                     if (options.duration !== 0 || !tooltip.classed(side)) {
105185                         tooltip.call(uiToggle(true));
105186                     }
105187
105188                     tooltip
105189                         .style('top', pos[1] + 'px')
105190                         .style('left', pos[0] + 'px')
105191                         .attr('class', classes + ' ' + side);
105192
105193
105194                     // shift popover-inner if it is very close to the top or bottom edge
105195                     // (doesn't affect the placement of the popover-arrow)
105196                     var shiftY = 0;
105197                     if (side === 'left' || side === 'right') {
105198                         if (pos[1] < 60) {
105199                             shiftY = 60 - pos[1];
105200                         }
105201                         else if (pos[1] + tip.height > h - 100) {
105202                             shiftY = h - pos[1] - tip.height - 100;
105203                         }
105204                     }
105205                     tooltip.selectAll('.popover-inner')
105206                         .style('top', shiftY + 'px');
105207
105208                 } else {
105209                     tooltip
105210                         .classed('in', false)
105211                         .call(uiToggle(false));
105212                 }
105213
105214                 curtain.cut(box, options.duration);
105215
105216                 return tooltip;
105217             };
105218
105219
105220             curtain.cut = function(datum, duration) {
105221                 darkness.datum(datum)
105222                     .interrupt();
105223
105224                 var selection;
105225                 if (duration === 0) {
105226                     selection = darkness;
105227                 } else {
105228                     selection = darkness
105229                         .transition()
105230                         .duration(duration || 600)
105231                         .ease(linear$1);
105232                 }
105233
105234                 selection
105235                     .attr('d', function(d) {
105236                         var string = 'M 0,0 L 0,' + window.innerHeight + ' L ' +
105237                             window.innerWidth + ',' + window.innerHeight + 'L' +
105238                             window.innerWidth + ',0 Z';
105239
105240                         if (!d) { return string; }
105241                         return string + 'M' +
105242                             d.left + ',' + d.top + 'L' +
105243                             d.left + ',' + (d.top + d.height) + 'L' +
105244                             (d.left + d.width) + ',' + (d.top + d.height) + 'L' +
105245                             (d.left + d.width) + ',' + (d.top) + 'Z';
105246
105247                     });
105248             };
105249
105250
105251             curtain.remove = function() {
105252                 surface.remove();
105253                 tooltip.remove();
105254                 d3_select(window).on('resize.curtain', null);
105255             };
105256
105257
105258             // ClientRects are immutable, so copy them to an object,
105259             // in case we need to trim the height/width.
105260             function copyBox(src) {
105261                 return {
105262                     top: src.top,
105263                     right: src.right,
105264                     bottom: src.bottom,
105265                     left: src.left,
105266                     width: src.width,
105267                     height: src.height
105268                 };
105269             }
105270
105271
105272             return curtain;
105273         }
105274
105275         function uiIntroWelcome(context, reveal) {
105276             var dispatch$1 = dispatch('done');
105277             var listener = clickListener();
105278
105279             var chapter = {
105280                 title: 'intro.welcome.title'
105281             };
105282
105283
105284             function welcome() {
105285                 context.map().centerZoom([-85.63591, 41.94285], 19);
105286                 reveal('.intro-nav-wrap .chapter-welcome',
105287                     t('intro.welcome.welcome'),
105288                     { buttonText: t('intro.ok'), buttonCallback: practice }
105289                 );
105290             }
105291
105292             function practice() {
105293                 reveal('.intro-nav-wrap .chapter-welcome',
105294                     t('intro.welcome.practice'),
105295                     { buttonText: t('intro.ok'), buttonCallback: words }
105296                 );
105297             }
105298
105299             function words() {
105300                 reveal('.intro-nav-wrap .chapter-welcome',
105301                     t('intro.welcome.words'),
105302                     { buttonText: t('intro.ok'), buttonCallback: mouse }
105303                 );
105304             }
105305
105306
105307             function mouse() {
105308                 reveal('.intro-nav-wrap .chapter-welcome',
105309                     t('intro.welcome.mouse'),
105310                     { buttonText: t('intro.ok'), buttonCallback: leftClick }
105311                 );
105312             }
105313
105314
105315             function leftClick() {
105316                 var counter = 0;
105317                 var times = 5;
105318
105319                 var tooltip = reveal('.intro-nav-wrap .chapter-welcome',
105320                     t('intro.welcome.leftclick', { num: times }),
105321                     { tooltipClass: 'intro-mouse' }
105322                 );
105323
105324                 tooltip.selectAll('.popover-inner')
105325                     .insert('svg', 'span')
105326                     .attr('class', 'tooltip-illustration')
105327                     .append('use')
105328                     .attr('xlink:href', '#iD-walkthrough-mouse');
105329
105330                 tooltip
105331                     .append('div')
105332                     .attr('class', 'counter');
105333
105334                 tooltip.call(listener);
105335
105336                 listener.on('click', function(which) {
105337                     if (which === 'left') {
105338                         d3_select('.curtain-tooltip.intro-mouse .counter')
105339                             .text(String(++counter));
105340
105341                         if (counter === times) {
105342                             window.setTimeout(function() { continueTo(rightClick); }, 1000);
105343                         }
105344                     }
105345                 });
105346
105347                 function continueTo(nextStep) {
105348                     listener.on('click', null);
105349                     tooltip.call(listener.off);
105350                     tooltip.select('.counter').remove();
105351                     nextStep();
105352                 }
105353             }
105354
105355
105356             function rightClick() {
105357                 var counter = 0;
105358                 var times = 5;
105359
105360                 var tooltip = reveal('.intro-nav-wrap .chapter-welcome',
105361                     t('intro.welcome.rightclick', { num: times }),
105362                     { tooltipClass: 'intro-mouse' }
105363                 );
105364
105365                 tooltip.selectAll('.popover-inner')
105366                     .insert('svg', 'span')
105367                     .attr('class', 'tooltip-illustration')
105368                     .append('use')
105369                     .attr('xlink:href', '#iD-walkthrough-mouse');
105370
105371                 tooltip
105372                     .append('div')
105373                     .attr('class', 'counter');
105374
105375                 tooltip.call(listener);
105376
105377                 listener.on('click', function(which) {
105378                     if (which === 'right') {
105379                         d3_select('.curtain-tooltip.intro-mouse .counter')
105380                             .text(String(++counter));
105381
105382                         if (counter === times) {
105383                             window.setTimeout(function() { continueTo(chapters); }, 1000);
105384                         }
105385                     }
105386                 });
105387
105388                 function continueTo(nextStep) {
105389                     listener.on('click', null);
105390                     tooltip.call(listener.off);
105391                     tooltip.select('.counter').remove();
105392                     nextStep();
105393                 }
105394             }
105395
105396
105397             function chapters() {
105398                 dispatch$1.call('done');
105399                 reveal('.intro-nav-wrap .chapter-navigation',
105400                     t('intro.welcome.chapters', { next: t('intro.navigation.title') })
105401                 );
105402             }
105403
105404
105405             chapter.enter = function() {
105406                 welcome();
105407             };
105408
105409
105410             chapter.exit = function() {
105411                 listener.off();
105412                 d3_select('.curtain-tooltip.intro-mouse')
105413                     .selectAll('.counter')
105414                     .remove();
105415             };
105416
105417
105418             chapter.restart = function() {
105419                 chapter.exit();
105420                 chapter.enter();
105421             };
105422
105423
105424             return utilRebind(chapter, dispatch$1, 'on');
105425         }
105426
105427
105428
105429         function clickListener() {
105430             var dispatch$1 = dispatch('click');
105431             var minTime = 120;
105432             var tooltip = d3_select(null);
105433             var down = {};
105434
105435             // `down` keeps track of which buttons/keys are down.
105436             // Setting a property in `down` happens immediately.
105437             // Unsetting a property in `down` is delayed because
105438             //   on Windows a contextmenu event happens after keyup/mouseup
105439
105440             function keydown() {
105441                 if (event.keyCode === 93)  {   // context menu
105442                     event.preventDefault();
105443                     event.stopPropagation();
105444                     down.menu = event.timeStamp;
105445                     tooltip.classed('rightclick', true);
105446                 }
105447             }
105448
105449
105450             function keyup() {
105451                 if (event.keyCode === 93)  {   // context menu
105452                     event.preventDefault();
105453                     event.stopPropagation();
105454                     var endTime = event.timeStamp;
105455                     var startTime = down.menu || endTime;
105456                     var delay = (endTime - startTime < minTime) ? minTime : 0;
105457
105458                     window.setTimeout(function() {
105459                         tooltip.classed('rightclick', false);
105460                         down.menu = undefined;  // delayed, for Windows
105461                     }, delay);
105462
105463                     dispatch$1.call('click', this, 'right');
105464                 }
105465             }
105466
105467
105468             function mousedown() {
105469                 var button = event.button;
105470                 if (button === 0 && !event.ctrlKey) {
105471                     tooltip.classed('leftclick', true);
105472                 } else if (button === 2) {
105473                     tooltip.classed('rightclick', true);
105474                 }
105475                 down[button] = event.timeStamp;
105476             }
105477
105478
105479             function mouseup() {
105480                 var button = event.button;
105481                 var endTime = event.timeStamp;
105482                 var startTime = down[button] || endTime;
105483                 var delay = (endTime - startTime < minTime) ? minTime : 0;
105484
105485                 if (button === 0 && !event.ctrlKey) {
105486                     window.setTimeout(function() {
105487                         tooltip.classed('leftclick', false);
105488                         down[button] = undefined;  // delayed, for Windows
105489                     }, delay);
105490
105491                     dispatch$1.call('click', this, 'left');
105492
105493                 } else if (button === 2) {
105494                     window.setTimeout(function() {
105495                         tooltip.classed('rightclick', false);
105496                         down[button] = undefined;  // delayed, for Windows
105497                     }, delay);
105498
105499                     dispatch$1.call('click', this, 'right');
105500
105501                 } else {
105502                     window.setTimeout(function() {
105503                         down[button] = undefined;  // delayed, for Windows
105504                     }, delay);
105505                 }
105506             }
105507
105508
105509             function contextmenu() {
105510                 event.preventDefault();
105511                 event.stopPropagation();
105512                 if (!down[2] && !down.menu) {
105513                     tooltip.classed('rightclick', true);
105514                     window.setTimeout(function() {
105515                         tooltip.classed('rightclick', false);
105516                     }, minTime);
105517                     dispatch$1.call('click', this, 'right');
105518                 }
105519             }
105520
105521
105522             var behavior = function(selection) {
105523                 tooltip = selection;
105524                 down = {};
105525
105526                 d3_select(window)
105527                     .on('keydown.intro', keydown)
105528                     .on('keyup.intro', keyup)
105529                     .on('mousedown.intro', mousedown)
105530                     .on('mouseup.intro', mouseup)
105531                     .on('contextmenu.intro', contextmenu);
105532             };
105533
105534
105535             behavior.off = function() {
105536                 d3_select(window)
105537                     .on('keydown.intro', null)
105538                     .on('keyup.intro', null)
105539                     .on('mousedown.intro', null)
105540                     .on('mouseup.intro', null)
105541                     .on('contextmenu.intro', null);
105542
105543                 tooltip
105544                     .classed('leftclick', false)
105545                     .classed('rightclick', false);
105546             };
105547
105548             return utilRebind(behavior, dispatch$1, 'on');
105549         }
105550
105551         function uiIntroNavigation(context, reveal) {
105552             var dispatch$1 = dispatch('done');
105553             var timeouts = [];
105554             var hallId = 'n2061';
105555             var townHall = [-85.63591, 41.94285];
105556             var springStreetId = 'w397';
105557             var springStreetEndId = 'n1834';
105558             var springStreet = [-85.63582, 41.94255];
105559             var onewayField = context.presets().field('oneway');
105560             var maxspeedField = context.presets().field('maxspeed');
105561
105562
105563             var chapter = {
105564                 title: 'intro.navigation.title'
105565             };
105566
105567
105568             function timeout(f, t) {
105569                 timeouts.push(window.setTimeout(f, t));
105570             }
105571
105572
105573             function eventCancel() {
105574                 event.stopPropagation();
105575                 event.preventDefault();
105576             }
105577
105578
105579             function isTownHallSelected() {
105580                 var ids = context.selectedIDs();
105581                 return ids.length === 1 && ids[0] === hallId;
105582             }
105583
105584
105585             function dragMap() {
105586                 context.enter(modeBrowse(context));
105587                 context.history().reset('initial');
105588
105589                 var msec = transitionTime(townHall, context.map().center());
105590                 if (msec) { reveal(null, null, { duration: 0 }); }
105591                 context.map().centerZoomEase(townHall, 19, msec);
105592
105593                 timeout(function() {
105594                     var centerStart = context.map().center();
105595
105596                     reveal('#surface', t('intro.navigation.drag'));
105597                     context.map().on('drawn.intro', function() {
105598                         reveal('#surface', t('intro.navigation.drag'), { duration: 0 });
105599                     });
105600
105601                     context.map().on('move.intro', function() {
105602                         var centerNow = context.map().center();
105603                         if (centerStart[0] !== centerNow[0] || centerStart[1] !== centerNow[1]) {
105604                             context.map().on('move.intro', null);
105605                             timeout(function() { continueTo(zoomMap); }, 3000);
105606                         }
105607                     });
105608
105609                 }, msec + 100);
105610
105611                 function continueTo(nextStep) {
105612                     context.map().on('move.intro drawn.intro', null);
105613                     nextStep();
105614                 }
105615             }
105616
105617
105618             function zoomMap() {
105619                 var zoomStart = context.map().zoom();
105620
105621                 reveal('#surface',
105622                     t('intro.navigation.zoom', {
105623                         plus: icon('#iD-icon-plus', 'pre-text'),
105624                         minus: icon('#iD-icon-minus', 'pre-text')
105625                     })
105626                 );
105627
105628                 context.map().on('drawn.intro', function() {
105629                     reveal('#surface',
105630                         t('intro.navigation.zoom', {
105631                             plus: icon('#iD-icon-plus', 'pre-text'),
105632                             minus: icon('#iD-icon-minus', 'pre-text')
105633                         }), { duration: 0 }
105634                     );
105635                 });
105636
105637                 context.map().on('move.intro', function() {
105638                     if (context.map().zoom() !== zoomStart) {
105639                         context.map().on('move.intro', null);
105640                         timeout(function() { continueTo(features); }, 3000);
105641                     }
105642                 });
105643
105644                 function continueTo(nextStep) {
105645                     context.map().on('move.intro drawn.intro', null);
105646                     nextStep();
105647                 }
105648             }
105649
105650
105651             function features() {
105652                 var onClick = function() { continueTo(pointsLinesAreas); };
105653
105654                 reveal('#surface', t('intro.navigation.features'),
105655                     { buttonText: t('intro.ok'), buttonCallback: onClick }
105656                 );
105657
105658                 context.map().on('drawn.intro', function() {
105659                     reveal('#surface', t('intro.navigation.features'),
105660                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
105661                     );
105662                 });
105663
105664                 function continueTo(nextStep) {
105665                     context.map().on('drawn.intro', null);
105666                     nextStep();
105667                 }
105668             }
105669
105670             function pointsLinesAreas() {
105671                 var onClick = function() { continueTo(nodesWays); };
105672
105673                 reveal('#surface', t('intro.navigation.points_lines_areas'),
105674                     { buttonText: t('intro.ok'), buttonCallback: onClick }
105675                 );
105676
105677                 context.map().on('drawn.intro', function() {
105678                     reveal('#surface', t('intro.navigation.points_lines_areas'),
105679                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
105680                     );
105681                 });
105682
105683                 function continueTo(nextStep) {
105684                     context.map().on('drawn.intro', null);
105685                     nextStep();
105686                 }
105687             }
105688
105689             function nodesWays() {
105690                 var onClick = function() { continueTo(clickTownHall); };
105691
105692                 reveal('#surface', t('intro.navigation.nodes_ways'),
105693                     { buttonText: t('intro.ok'), buttonCallback: onClick }
105694                 );
105695
105696                 context.map().on('drawn.intro', function() {
105697                     reveal('#surface', t('intro.navigation.nodes_ways'),
105698                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
105699                     );
105700                 });
105701
105702                 function continueTo(nextStep) {
105703                     context.map().on('drawn.intro', null);
105704                     nextStep();
105705                 }
105706             }
105707
105708             function clickTownHall() {
105709                 context.enter(modeBrowse(context));
105710                 context.history().reset('initial');
105711
105712                 var entity = context.hasEntity(hallId);
105713                 if (!entity) { return; }
105714                 reveal(null, null, { duration: 0 });
105715                 context.map().centerZoomEase(entity.loc, 19, 500);
105716
105717                 timeout(function() {
105718                     var entity = context.hasEntity(hallId);
105719                     if (!entity) { return; }
105720                     var box = pointBox(entity.loc, context);
105721                     reveal(box, t('intro.navigation.click_townhall'));
105722
105723                     context.map().on('move.intro drawn.intro', function() {
105724                         var entity = context.hasEntity(hallId);
105725                         if (!entity) { return; }
105726                         var box = pointBox(entity.loc, context);
105727                         reveal(box, t('intro.navigation.click_townhall'), { duration: 0 });
105728                     });
105729
105730                     context.on('enter.intro', function() {
105731                         if (isTownHallSelected()) { continueTo(selectedTownHall); }
105732                     });
105733
105734                 }, 550);  // after centerZoomEase
105735
105736                 context.history().on('change.intro', function() {
105737                     if (!context.hasEntity(hallId)) {
105738                         continueTo(clickTownHall);
105739                     }
105740                 });
105741
105742                 function continueTo(nextStep) {
105743                     context.on('enter.intro', null);
105744                     context.map().on('move.intro drawn.intro', null);
105745                     context.history().on('change.intro', null);
105746                     nextStep();
105747                 }
105748             }
105749
105750
105751             function selectedTownHall() {
105752                 if (!isTownHallSelected()) { return clickTownHall(); }
105753
105754                 var entity = context.hasEntity(hallId);
105755                 if (!entity) { return clickTownHall(); }
105756
105757                 var box = pointBox(entity.loc, context);
105758                 var onClick = function() { continueTo(editorTownHall); };
105759
105760                 reveal(box, t('intro.navigation.selected_townhall'),
105761                     { buttonText: t('intro.ok'), buttonCallback: onClick }
105762                 );
105763
105764                 context.map().on('move.intro drawn.intro', function() {
105765                     var entity = context.hasEntity(hallId);
105766                     if (!entity) { return; }
105767                     var box = pointBox(entity.loc, context);
105768                     reveal(box, t('intro.navigation.selected_townhall'),
105769                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
105770                     );
105771                 });
105772
105773                 context.history().on('change.intro', function() {
105774                     if (!context.hasEntity(hallId)) {
105775                         continueTo(clickTownHall);
105776                     }
105777                 });
105778
105779                 function continueTo(nextStep) {
105780                     context.map().on('move.intro drawn.intro', null);
105781                     context.history().on('change.intro', null);
105782                     nextStep();
105783                 }
105784             }
105785
105786
105787             function editorTownHall() {
105788                 if (!isTownHallSelected()) { return clickTownHall(); }
105789
105790                 // disallow scrolling
105791                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
105792
105793                 var onClick = function() { continueTo(presetTownHall); };
105794
105795                 reveal('.entity-editor-pane',
105796                     t('intro.navigation.editor_townhall'),
105797                     { buttonText: t('intro.ok'), buttonCallback: onClick }
105798                 );
105799
105800                 context.on('exit.intro', function() {
105801                     continueTo(clickTownHall);
105802                 });
105803
105804                 context.history().on('change.intro', function() {
105805                     if (!context.hasEntity(hallId)) {
105806                         continueTo(clickTownHall);
105807                     }
105808                 });
105809
105810                 function continueTo(nextStep) {
105811                     context.on('exit.intro', null);
105812                     context.history().on('change.intro', null);
105813                     d3_select('.inspector-wrap').on('wheel.intro', null);
105814                     nextStep();
105815                 }
105816             }
105817
105818
105819             function presetTownHall() {
105820                 if (!isTownHallSelected()) { return clickTownHall(); }
105821
105822                 // reset pane, in case user happened to change it..
105823                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
105824                 // disallow scrolling
105825                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
105826
105827                 // preset match, in case the user happened to change it.
105828                 var entity = context.entity(context.selectedIDs()[0]);
105829                 var preset = context.presets().match(entity, context.graph());
105830
105831                 var onClick = function() { continueTo(fieldsTownHall); };
105832
105833                 context.on('exit.intro', function() {
105834                     continueTo(clickTownHall);
105835                 });
105836
105837                 context.history().on('change.intro', function() {
105838                     if (!context.hasEntity(hallId)) {
105839                         continueTo(clickTownHall);
105840                     }
105841                 });
105842
105843                 reveal('.inspector-body .preset-list-item.inspector-inner',
105844                     t('intro.navigation.preset_townhall', { preset: preset.name() }),
105845                     { buttonText: t('intro.ok'), buttonCallback: onClick }
105846                 );
105847
105848                 function continueTo(nextStep) {
105849                     context.on('exit.intro', null);
105850                     context.history().on('change.intro', null);
105851                     d3_select('.inspector-wrap').on('wheel.intro', null);
105852                     nextStep();
105853                 }
105854             }
105855
105856
105857             function fieldsTownHall() {
105858                 if (!isTownHallSelected()) { return clickTownHall(); }
105859
105860                 // reset pane, in case user happened to change it..
105861                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
105862                 // disallow scrolling
105863                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
105864
105865                 var onClick = function() { continueTo(closeTownHall); };
105866
105867                 reveal('.inspector-body .preset-editor',
105868                     t('intro.navigation.fields_townhall'),
105869                     { buttonText: t('intro.ok'), buttonCallback: onClick }
105870                 );
105871
105872                 context.on('exit.intro', function() {
105873                     continueTo(clickTownHall);
105874                 });
105875
105876                 context.history().on('change.intro', function() {
105877                     if (!context.hasEntity(hallId)) {
105878                         continueTo(clickTownHall);
105879                     }
105880                 });
105881
105882                 function continueTo(nextStep) {
105883                     context.on('exit.intro', null);
105884                     context.history().on('change.intro', null);
105885                     d3_select('.inspector-wrap').on('wheel.intro', null);
105886                     nextStep();
105887                 }
105888             }
105889
105890
105891             function closeTownHall() {
105892                 if (!isTownHallSelected()) { return clickTownHall(); }
105893
105894                 var selector = '.entity-editor-pane button.preset-close svg use';
105895                 var href = d3_select(selector).attr('href') || '#iD-icon-close';
105896
105897                 reveal('.entity-editor-pane',
105898                     t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') })
105899                 );
105900
105901                 context.on('exit.intro', function() {
105902                     continueTo(searchStreet);
105903                 });
105904
105905                 context.history().on('change.intro', function() {
105906                     // update the close icon in the tooltip if the user edits something.
105907                     var selector = '.entity-editor-pane button.preset-close svg use';
105908                     var href = d3_select(selector).attr('href') || '#iD-icon-close';
105909
105910                     reveal('.entity-editor-pane',
105911                         t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') }),
105912                         { duration: 0 }
105913                     );
105914                 });
105915
105916                 function continueTo(nextStep) {
105917                     context.on('exit.intro', null);
105918                     context.history().on('change.intro', null);
105919                     nextStep();
105920                 }
105921             }
105922
105923
105924             function searchStreet() {
105925                 context.enter(modeBrowse(context));
105926                 context.history().reset('initial');  // ensure spring street exists
105927
105928                 var msec = transitionTime(springStreet, context.map().center());
105929                 if (msec) { reveal(null, null, { duration: 0 }); }
105930                 context.map().centerZoomEase(springStreet, 19, msec);  // ..and user can see it
105931
105932                 timeout(function() {
105933                     reveal('.search-header input',
105934                         t('intro.navigation.search_street', { name: t('intro.graph.name.spring-street') })
105935                     );
105936
105937                     d3_select('.search-header input')
105938                         .on('keyup.intro', checkSearchResult);
105939                 }, msec + 100);
105940             }
105941
105942
105943             function checkSearchResult() {
105944                 var first = d3_select('.feature-list-item:nth-child(0n+2)');  // skip "No Results" item
105945                 var firstName = first.select('.entity-name');
105946                 var name = t('intro.graph.name.spring-street');
105947
105948                 if (!firstName.empty() && firstName.text() === name) {
105949                     reveal(first.node(),
105950                         t('intro.navigation.choose_street', { name: name }),
105951                         { duration: 300 }
105952                     );
105953
105954                     context.on('exit.intro', function() {
105955                         continueTo(selectedStreet);
105956                     });
105957
105958                     d3_select('.search-header input')
105959                         .on('keydown.intro', eventCancel, true)
105960                         .on('keyup.intro', null);
105961                 }
105962
105963                 function continueTo(nextStep) {
105964                     context.on('exit.intro', null);
105965                     d3_select('.search-header input')
105966                         .on('keydown.intro', null)
105967                         .on('keyup.intro', null);
105968                     nextStep();
105969                 }
105970             }
105971
105972
105973             function selectedStreet() {
105974                 if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
105975                     return searchStreet();
105976                 }
105977
105978                 var onClick = function() { continueTo(editorStreet); };
105979                 var entity = context.entity(springStreetEndId);
105980                 var box = pointBox(entity.loc, context);
105981                 box.height = 500;
105982
105983                 reveal(box,
105984                     t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }),
105985                     { duration: 600, buttonText: t('intro.ok'), buttonCallback: onClick }
105986                 );
105987
105988                 timeout(function() {
105989                     context.map().on('move.intro drawn.intro', function() {
105990                         var entity = context.hasEntity(springStreetEndId);
105991                         if (!entity) { return; }
105992                         var box = pointBox(entity.loc, context);
105993                         box.height = 500;
105994                         reveal(box,
105995                             t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }),
105996                             { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
105997                         );
105998                     });
105999                 }, 600);  // after reveal.
106000
106001                 context.on('enter.intro', function(mode) {
106002                     if (!context.hasEntity(springStreetId)) {
106003                         return continueTo(searchStreet);
106004                     }
106005                     var ids = context.selectedIDs();
106006                     if (mode.id !== 'select' || !ids.length || ids[0] !== springStreetId) {
106007                         // keep Spring Street selected..
106008                         context.enter(modeSelect(context, [springStreetId]));
106009                     }
106010                 });
106011
106012                 context.history().on('change.intro', function() {
106013                     if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
106014                         timeout(function() {
106015                             continueTo(searchStreet);
106016                         }, 300);  // after any transition (e.g. if user deleted intersection)
106017                     }
106018                 });
106019
106020                 function continueTo(nextStep) {
106021                     context.map().on('move.intro drawn.intro', null);
106022                     context.on('enter.intro', null);
106023                     context.history().on('change.intro', null);
106024                     nextStep();
106025                 }
106026             }
106027
106028
106029             function editorStreet() {
106030                 var selector = '.entity-editor-pane button.preset-close svg use';
106031                 var href = d3_select(selector).attr('href') || '#iD-icon-close';
106032
106033                 reveal('.entity-editor-pane',
106034                     t('intro.navigation.editor_street', {
106035                         button: icon(href, 'pre-text'),
106036                         field1: onewayField.label(),
106037                         field2: maxspeedField.label()
106038                     })
106039                 );
106040
106041                 context.on('exit.intro', function() {
106042                     continueTo(play);
106043                 });
106044
106045                 context.history().on('change.intro', function() {
106046                     // update the close icon in the tooltip if the user edits something.
106047                     var selector = '.entity-editor-pane button.preset-close svg use';
106048                     var href = d3_select(selector).attr('href') || '#iD-icon-close';
106049
106050                     reveal('.entity-editor-pane',
106051                         t('intro.navigation.editor_street', {
106052                             button: icon(href, 'pre-text'),
106053                             field1: onewayField.label().toLowerCase(),
106054                             field2: maxspeedField.label().toLowerCase()
106055                         }), { duration: 0 }
106056                     );
106057                 });
106058
106059                 function continueTo(nextStep) {
106060                     context.on('exit.intro', null);
106061                     context.history().on('change.intro', null);
106062                     nextStep();
106063                 }
106064             }
106065
106066
106067             function play() {
106068                 dispatch$1.call('done');
106069                 reveal('#id-container',
106070                     t('intro.navigation.play', { next: t('intro.points.title') }), {
106071                         tooltipBox: '.intro-nav-wrap .chapter-point',
106072                         buttonText: t('intro.ok'),
106073                         buttonCallback: function() { reveal('#id-container'); }
106074                     }
106075                 );
106076             }
106077
106078
106079             chapter.enter = function() {
106080                 dragMap();
106081             };
106082
106083
106084             chapter.exit = function() {
106085                 timeouts.forEach(window.clearTimeout);
106086                 context.on('enter.intro exit.intro', null);
106087                 context.map().on('move.intro drawn.intro', null);
106088                 context.history().on('change.intro', null);
106089                 d3_select('.inspector-wrap').on('wheel.intro', null);
106090                 d3_select('.search-header input').on('keydown.intro keyup.intro', null);
106091             };
106092
106093
106094             chapter.restart = function() {
106095                 chapter.exit();
106096                 chapter.enter();
106097             };
106098
106099
106100             return utilRebind(chapter, dispatch$1, 'on');
106101         }
106102
106103         function uiIntroPoint(context, reveal) {
106104             var dispatch$1 = dispatch('done');
106105             var timeouts = [];
106106             var intersection = [-85.63279, 41.94394];
106107             var building = [-85.632422, 41.944045];
106108             var cafePreset = context.presets().item('amenity/cafe');
106109             var _pointID = null;
106110
106111
106112             var chapter = {
106113                 title: 'intro.points.title'
106114             };
106115
106116
106117             function timeout(f, t) {
106118                 timeouts.push(window.setTimeout(f, t));
106119             }
106120
106121
106122             function revealEditMenu(loc, text, options) {
106123                 var rect = context.surfaceRect();
106124                 var point = context.curtainProjection(loc);
106125                 var pad = 40;
106126                 var width = 250 + (2 * pad);
106127                 var height = 250;
106128                 var startX = rect.left + point[0];
106129                 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
106130                 var box = {
106131                     left: left,
106132                     top: point[1] + rect.top - 60,
106133                     width: width,
106134                     height: height
106135                 };
106136                 reveal(box, text, options);
106137             }
106138
106139
106140             function eventCancel() {
106141                 event.stopPropagation();
106142                 event.preventDefault();
106143             }
106144
106145
106146             function addPoint() {
106147                 context.enter(modeBrowse(context));
106148                 context.history().reset('initial');
106149
106150                 var msec = transitionTime(intersection, context.map().center());
106151                 if (msec) { reveal(null, null, { duration: 0 }); }
106152                 context.map().centerZoomEase(intersection, 19, msec);
106153
106154                 timeout(function() {
106155                     var tooltip = reveal('button.add-point',
106156                         t('intro.points.add_point', { button: icon('#iD-icon-point', 'pre-text') }));
106157
106158                     _pointID = null;
106159
106160                     tooltip.selectAll('.popover-inner')
106161                         .insert('svg', 'span')
106162                         .attr('class', 'tooltip-illustration')
106163                         .append('use')
106164                         .attr('xlink:href', '#iD-graphic-points');
106165
106166                     context.on('enter.intro', function(mode) {
106167                         if (mode.id !== 'add-point') { return; }
106168                         continueTo(placePoint);
106169                     });
106170                 }, msec + 100);
106171
106172                 function continueTo(nextStep) {
106173                     context.on('enter.intro', null);
106174                     nextStep();
106175                 }
106176             }
106177
106178
106179             function placePoint() {
106180                 if (context.mode().id !== 'add-point') {
106181                     return chapter.restart();
106182                 }
106183
106184                 var pointBox = pad$2(building, 150, context);
106185                 reveal(pointBox, t('intro.points.place_point'));
106186
106187                 context.map().on('move.intro drawn.intro', function() {
106188                     pointBox = pad$2(building, 150, context);
106189                     reveal(pointBox, t('intro.points.place_point'), { duration: 0 });
106190                 });
106191
106192                 context.on('enter.intro', function(mode) {
106193                     if (mode.id !== 'select') { return chapter.restart(); }
106194                     _pointID = context.mode().selectedIDs()[0];
106195                     continueTo(searchPreset);
106196                 });
106197
106198                 function continueTo(nextStep) {
106199                     context.map().on('move.intro drawn.intro', null);
106200                     context.on('enter.intro', null);
106201                     nextStep();
106202                 }
106203             }
106204
106205
106206             function searchPreset() {
106207                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
106208                     return addPoint();
106209                 }
106210
106211                 // disallow scrolling
106212                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
106213
106214                 d3_select('.preset-search-input')
106215                     .on('keydown.intro', null)
106216                     .on('keyup.intro', checkPresetSearch);
106217
106218                 reveal('.preset-search-input',
106219                     t('intro.points.search_cafe', { preset: cafePreset.name() })
106220                 );
106221
106222                 context.on('enter.intro', function(mode) {
106223                     if (!_pointID || !context.hasEntity(_pointID)) {
106224                         return continueTo(addPoint);
106225                     }
106226
106227                     var ids = context.selectedIDs();
106228                     if (mode.id !== 'select' || !ids.length || ids[0] !== _pointID) {
106229                         // keep the user's point selected..
106230                         context.enter(modeSelect(context, [_pointID]));
106231
106232                         // disallow scrolling
106233                         d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
106234
106235                         d3_select('.preset-search-input')
106236                             .on('keydown.intro', null)
106237                             .on('keyup.intro', checkPresetSearch);
106238
106239                         reveal('.preset-search-input',
106240                             t('intro.points.search_cafe', { preset: cafePreset.name() })
106241                         );
106242
106243                         context.history().on('change.intro', null);
106244                     }
106245                 });
106246
106247
106248                 function checkPresetSearch() {
106249                     var first = d3_select('.preset-list-item:first-child');
106250
106251                     if (first.classed('preset-amenity-cafe')) {
106252                         d3_select('.preset-search-input')
106253                             .on('keydown.intro', eventCancel, true)
106254                             .on('keyup.intro', null);
106255
106256                         reveal(first.select('.preset-list-button').node(),
106257                             t('intro.points.choose_cafe', { preset: cafePreset.name() }),
106258                             { duration: 300 }
106259                         );
106260
106261                         context.history().on('change.intro', function() {
106262                             continueTo(aboutFeatureEditor);
106263                         });
106264                     }
106265                 }
106266
106267                 function continueTo(nextStep) {
106268                     context.on('enter.intro', null);
106269                     context.history().on('change.intro', null);
106270                     d3_select('.inspector-wrap').on('wheel.intro', null);
106271                     d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
106272                     nextStep();
106273                 }
106274             }
106275
106276
106277             function aboutFeatureEditor() {
106278                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
106279                     return addPoint();
106280                 }
106281
106282                 timeout(function() {
106283                     reveal('.entity-editor-pane', t('intro.points.feature_editor'), {
106284                         tooltipClass: 'intro-points-describe',
106285                         buttonText: t('intro.ok'),
106286                         buttonCallback: function() { continueTo(addName); }
106287                     });
106288                 }, 400);
106289
106290                 context.on('exit.intro', function() {
106291                     // if user leaves select mode here, just continue with the tutorial.
106292                     continueTo(reselectPoint);
106293                 });
106294
106295                 function continueTo(nextStep) {
106296                     context.on('exit.intro', null);
106297                     nextStep();
106298                 }
106299             }
106300
106301
106302             function addName() {
106303                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
106304                     return addPoint();
106305                 }
106306
106307                 // reset pane, in case user happened to change it..
106308                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
106309
106310                 timeout(function() {
106311                     // It's possible for the user to add a name in a previous step..
106312                     // If so, don't tell them to add the name in this step.
106313                     // Give them an OK button instead.
106314                     var entity = context.entity(_pointID);
106315                     if (entity.tags.name) {
106316                         var tooltip = reveal('.entity-editor-pane', t('intro.points.add_name'), {
106317                             tooltipClass: 'intro-points-describe',
106318                             buttonText: t('intro.ok'),
106319                             buttonCallback: function() { continueTo(addCloseEditor); }
106320                         });
106321                         tooltip.select('.instruction').style('display', 'none');
106322
106323                     } else {
106324                         reveal('.entity-editor-pane', t('intro.points.add_name'),
106325                             { tooltipClass: 'intro-points-describe' }
106326                         );
106327                     }
106328                 }, 400);
106329
106330                 context.history().on('change.intro', function() {
106331                     continueTo(addCloseEditor);
106332                 });
106333
106334                 context.on('exit.intro', function() {
106335                     // if user leaves select mode here, just continue with the tutorial.
106336                     continueTo(reselectPoint);
106337                 });
106338
106339                 function continueTo(nextStep) {
106340                     context.on('exit.intro', null);
106341                     context.history().on('change.intro', null);
106342                     nextStep();
106343                 }
106344             }
106345
106346
106347             function addCloseEditor() {
106348                 // reset pane, in case user happened to change it..
106349                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
106350
106351                 var selector = '.entity-editor-pane button.preset-close svg use';
106352                 var href = d3_select(selector).attr('href') || '#iD-icon-close';
106353
106354                 context.on('exit.intro', function() {
106355                     continueTo(reselectPoint);
106356                 });
106357
106358                 reveal('.entity-editor-pane',
106359                     t('intro.points.add_close', { button: icon(href, 'pre-text') })
106360                 );
106361
106362                 function continueTo(nextStep) {
106363                     context.on('exit.intro', null);
106364                     nextStep();
106365                 }
106366             }
106367
106368
106369             function reselectPoint() {
106370                 if (!_pointID) { return chapter.restart(); }
106371                 var entity = context.hasEntity(_pointID);
106372                 if (!entity) { return chapter.restart(); }
106373
106374                 // make sure it's still a cafe, in case user somehow changed it..
106375                 var oldPreset = context.presets().match(entity, context.graph());
106376                 context.replace(actionChangePreset(_pointID, oldPreset, cafePreset));
106377
106378                 context.enter(modeBrowse(context));
106379
106380                 var msec = transitionTime(entity.loc, context.map().center());
106381                 if (msec) { reveal(null, null, { duration: 0 }); }
106382                 context.map().centerEase(entity.loc, msec);
106383
106384                 timeout(function() {
106385                     var box = pointBox(entity.loc, context);
106386                     reveal(box, t('intro.points.reselect'), { duration: 600 });
106387
106388                     timeout(function() {
106389                         context.map().on('move.intro drawn.intro', function() {
106390                             var entity = context.hasEntity(_pointID);
106391                             if (!entity) { return chapter.restart(); }
106392                             var box = pointBox(entity.loc, context);
106393                             reveal(box, t('intro.points.reselect'), { duration: 0 });
106394                         });
106395                     }, 600); // after reveal..
106396
106397                     context.on('enter.intro', function(mode) {
106398                         if (mode.id !== 'select') { return; }
106399                         continueTo(updatePoint);
106400                     });
106401
106402                 }, msec + 100);
106403
106404                 function continueTo(nextStep) {
106405                     context.map().on('move.intro drawn.intro', null);
106406                     context.on('enter.intro', null);
106407                     nextStep();
106408                 }
106409             }
106410
106411
106412             function updatePoint() {
106413                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
106414                     return continueTo(reselectPoint);
106415                 }
106416
106417                 // reset pane, in case user happened to untag the point..
106418                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
106419
106420                 context.on('exit.intro', function() {
106421                     continueTo(reselectPoint);
106422                 });
106423
106424                 context.history().on('change.intro', function() {
106425                     continueTo(updateCloseEditor);
106426                 });
106427
106428                 timeout(function() {
106429                     reveal('.entity-editor-pane', t('intro.points.update'),
106430                         { tooltipClass: 'intro-points-describe' }
106431                     );
106432                 }, 400);
106433
106434                 function continueTo(nextStep) {
106435                     context.on('exit.intro', null);
106436                     context.history().on('change.intro', null);
106437                     nextStep();
106438                 }
106439             }
106440
106441
106442             function updateCloseEditor() {
106443                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
106444                     return continueTo(reselectPoint);
106445                 }
106446
106447                 // reset pane, in case user happened to change it..
106448                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
106449
106450                 context.on('exit.intro', function() {
106451                     continueTo(rightClickPoint);
106452                 });
106453
106454                 timeout(function() {
106455                     reveal('.entity-editor-pane',
106456                         t('intro.points.update_close', { button: icon('#iD-icon-apply', 'pre-text') })
106457                     );
106458                 }, 500);
106459
106460                 function continueTo(nextStep) {
106461                     context.on('exit.intro', null);
106462                     nextStep();
106463                 }
106464             }
106465
106466
106467             function rightClickPoint() {
106468                 if (!_pointID) { return chapter.restart(); }
106469                 var entity = context.hasEntity(_pointID);
106470                 if (!entity) { return chapter.restart(); }
106471
106472                 context.enter(modeBrowse(context));
106473
106474                 var box = pointBox(entity.loc, context);
106475                 reveal(box, t('intro.points.rightclick'), { duration: 600 });
106476
106477                 timeout(function() {
106478                     context.map().on('move.intro drawn.intro', function() {
106479                         var entity = context.hasEntity(_pointID);
106480                         if (!entity) { return chapter.restart(); }
106481                         var box = pointBox(entity.loc, context);
106482                         reveal(box, t('intro.points.rightclick'), { duration: 0 });
106483                     });
106484                 }, 600); // after reveal
106485
106486                 context.on('enter.intro', function(mode) {
106487                     if (mode.id !== 'select') { return; }
106488                     var ids = context.selectedIDs();
106489                     if (ids.length !== 1 || ids[0] !== _pointID) { return; }
106490
106491                     timeout(function() {
106492                         var node = selectMenuItem('delete').node();
106493                         if (!node) { return; }
106494                         continueTo(enterDelete);
106495                     }, 300);  // after menu visible
106496                 });
106497
106498                 function continueTo(nextStep) {
106499                     context.on('enter.intro', null);
106500                     context.map().on('move.intro drawn.intro', null);
106501                     nextStep();
106502                 }
106503             }
106504
106505
106506             function enterDelete() {
106507                 if (!_pointID) { return chapter.restart(); }
106508                 var entity = context.hasEntity(_pointID);
106509                 if (!entity) { return chapter.restart(); }
106510
106511                 var node = selectMenuItem('delete').node();
106512                 if (!node) { return continueTo(rightClickPoint); }
106513
106514                 revealEditMenu(entity.loc,
106515                     t('intro.points.delete', { button: icon('#iD-operation-delete', 'pre-text') })
106516                 );
106517
106518                 timeout(function() {
106519                     context.map().on('move.intro drawn.intro', function() {
106520                         revealEditMenu(entity.loc,
106521                             t('intro.points.delete', { button: icon('#iD-operation-delete', 'pre-text') }),
106522                             { duration: 0}
106523                         );
106524                     });
106525                 }, 300); // after menu visible
106526
106527                 context.on('exit.intro', function() {
106528                     if (!_pointID) { return chapter.restart(); }
106529                     var entity = context.hasEntity(_pointID);
106530                     if (entity) { return continueTo(rightClickPoint); }  // point still exists
106531                 });
106532
106533                 context.history().on('change.intro', function(changed) {
106534                     if (changed.deleted().length) {
106535                         continueTo(undo);
106536                     }
106537                 });
106538
106539                 function continueTo(nextStep) {
106540                     context.map().on('move.intro drawn.intro', null);
106541                     context.history().on('change.intro', null);
106542                     context.on('exit.intro', null);
106543                     nextStep();
106544                 }
106545             }
106546
106547
106548             function undo() {
106549                 context.history().on('change.intro', function() {
106550                     continueTo(play);
106551                 });
106552
106553                 var iconName = '#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo');
106554                 reveal('#bar button.undo-button',
106555                     t('intro.points.undo', { button: icon(iconName, 'pre-text') })
106556                 );
106557
106558                 function continueTo(nextStep) {
106559                     context.history().on('change.intro', null);
106560                     nextStep();
106561                 }
106562             }
106563
106564
106565             function play() {
106566                 dispatch$1.call('done');
106567                 reveal('#id-container',
106568                     t('intro.points.play', { next: t('intro.areas.title') }), {
106569                         tooltipBox: '.intro-nav-wrap .chapter-area',
106570                         buttonText: t('intro.ok'),
106571                         buttonCallback: function() { reveal('#id-container'); }
106572                     }
106573                 );
106574             }
106575
106576
106577             chapter.enter = function() {
106578                 addPoint();
106579             };
106580
106581
106582             chapter.exit = function() {
106583                 timeouts.forEach(window.clearTimeout);
106584                 context.on('enter.intro exit.intro', null);
106585                 context.map().on('move.intro drawn.intro', null);
106586                 context.history().on('change.intro', null);
106587                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
106588                 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
106589             };
106590
106591
106592             chapter.restart = function() {
106593                 chapter.exit();
106594                 chapter.enter();
106595             };
106596
106597
106598             return utilRebind(chapter, dispatch$1, 'on');
106599         }
106600
106601         function uiIntroArea(context, reveal) {
106602             var dispatch$1 = dispatch('done');
106603             var playground = [-85.63552, 41.94159];
106604             var playgroundPreset = context.presets().item('leisure/playground');
106605             var descriptionField = context.presets().field('description');
106606             var timeouts = [];
106607             var _areaID;
106608
106609
106610             var chapter = {
106611                 title: 'intro.areas.title'
106612             };
106613
106614
106615             function timeout(f, t) {
106616                 timeouts.push(window.setTimeout(f, t));
106617             }
106618
106619
106620             function eventCancel() {
106621                 event.stopPropagation();
106622                 event.preventDefault();
106623             }
106624
106625
106626             function revealPlayground(center, text, options) {
106627                 var padding = 180 * Math.pow(2, context.map().zoom() - 19.5);
106628                 var box = pad$2(center, padding, context);
106629                 reveal(box, text, options);
106630             }
106631
106632
106633             function addArea() {
106634                 context.enter(modeBrowse(context));
106635                 context.history().reset('initial');
106636                 _areaID = null;
106637
106638                 var msec = transitionTime(playground, context.map().center());
106639                 if (msec) { reveal(null, null, { duration: 0 }); }
106640                 context.map().centerZoomEase(playground, 19, msec);
106641
106642                 timeout(function() {
106643                     var tooltip = reveal('button.add-area',
106644                         t('intro.areas.add_playground', { button: icon('#iD-icon-area', 'pre-text') }));
106645
106646                     tooltip.selectAll('.popover-inner')
106647                         .insert('svg', 'span')
106648                         .attr('class', 'tooltip-illustration')
106649                         .append('use')
106650                         .attr('xlink:href', '#iD-graphic-areas');
106651
106652                     context.on('enter.intro', function(mode) {
106653                         if (mode.id !== 'add-area') { return; }
106654                         continueTo(startPlayground);
106655                     });
106656                 }, msec + 100);
106657
106658                 function continueTo(nextStep) {
106659                     context.on('enter.intro', null);
106660                     nextStep();
106661                 }
106662             }
106663
106664
106665             function startPlayground() {
106666                 if (context.mode().id !== 'add-area') {
106667                     return chapter.restart();
106668                 }
106669
106670                 _areaID = null;
106671                 context.map().zoomEase(19.5, 500);
106672
106673                 timeout(function() {
106674                     revealPlayground(playground,
106675                         t('intro.areas.start_playground'), { duration: 250 }
106676                     );
106677
106678                     timeout(function() {
106679                         context.map().on('move.intro drawn.intro', function() {
106680                             revealPlayground(playground,
106681                                 t('intro.areas.start_playground'), { duration: 0 }
106682                             );
106683                         });
106684                         context.on('enter.intro', function(mode) {
106685                             if (mode.id !== 'draw-area') { return chapter.restart(); }
106686                             continueTo(continuePlayground);
106687                         });
106688                     }, 250);  // after reveal
106689
106690                 }, 550);  // after easing
106691
106692                 function continueTo(nextStep) {
106693                     context.map().on('move.intro drawn.intro', null);
106694                     context.on('enter.intro', null);
106695                     nextStep();
106696                 }
106697             }
106698
106699
106700             function continuePlayground() {
106701                 if (context.mode().id !== 'draw-area') {
106702                     return chapter.restart();
106703                 }
106704
106705                 _areaID = null;
106706                 revealPlayground(playground,
106707                     t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }),
106708                     { duration: 250 }
106709                 );
106710
106711                 timeout(function() {
106712                     context.map().on('move.intro drawn.intro', function() {
106713                         revealPlayground(playground,
106714                             t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }),
106715                             { duration: 0 }
106716                         );
106717                     });
106718                 }, 250);  // after reveal
106719
106720                 context.on('enter.intro', function(mode) {
106721                     if (mode.id === 'draw-area') {
106722                         var entity = context.hasEntity(context.selectedIDs()[0]);
106723                         if (entity && entity.nodes.length >= 6) {
106724                             return continueTo(finishPlayground);
106725                         } else {
106726                             return;
106727                         }
106728                     } else if (mode.id === 'select') {
106729                         _areaID = context.selectedIDs()[0];
106730                         return continueTo(searchPresets);
106731                     } else {
106732                         return chapter.restart();
106733                     }
106734                 });
106735
106736                 function continueTo(nextStep) {
106737                     context.map().on('move.intro drawn.intro', null);
106738                     context.on('enter.intro', null);
106739                     nextStep();
106740                 }
106741             }
106742
106743
106744             function finishPlayground() {
106745                 if (context.mode().id !== 'draw-area') {
106746                     return chapter.restart();
106747                 }
106748
106749                 _areaID = null;
106750                 revealPlayground(playground,
106751                     t('intro.areas.finish_playground'), { duration: 250 }
106752                 );
106753
106754                 timeout(function() {
106755                     context.map().on('move.intro drawn.intro', function() {
106756                         revealPlayground(playground,
106757                             t('intro.areas.finish_playground'), { duration: 0 }
106758                         );
106759                     });
106760                 }, 250);  // after reveal
106761
106762                 context.on('enter.intro', function(mode) {
106763                     if (mode.id === 'draw-area') {
106764                         return;
106765                     } else if (mode.id === 'select') {
106766                         _areaID = context.selectedIDs()[0];
106767                         return continueTo(searchPresets);
106768                     } else {
106769                         return chapter.restart();
106770                     }
106771                 });
106772
106773                 function continueTo(nextStep) {
106774                     context.map().on('move.intro drawn.intro', null);
106775                     context.on('enter.intro', null);
106776                     nextStep();
106777                 }
106778             }
106779
106780
106781             function searchPresets() {
106782                 if (!_areaID || !context.hasEntity(_areaID)) {
106783                     return addArea();
106784                 }
106785                 var ids = context.selectedIDs();
106786                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
106787                     context.enter(modeSelect(context, [_areaID]));
106788                 }
106789
106790                 // disallow scrolling
106791                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
106792
106793                 timeout(function() {
106794                     // reset pane, in case user somehow happened to change it..
106795                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
106796
106797                     d3_select('.preset-search-input')
106798                         .on('keydown.intro', null)
106799                         .on('keyup.intro', checkPresetSearch);
106800
106801                     reveal('.preset-search-input',
106802                         t('intro.areas.search_playground', { preset: playgroundPreset.name() })
106803                     );
106804                 }, 400);  // after preset list pane visible..
106805
106806                 context.on('enter.intro', function(mode) {
106807                     if (!_areaID || !context.hasEntity(_areaID)) {
106808                         return continueTo(addArea);
106809                     }
106810
106811                     var ids = context.selectedIDs();
106812                     if (mode.id !== 'select' || !ids.length || ids[0] !== _areaID) {
106813                         // keep the user's area selected..
106814                         context.enter(modeSelect(context, [_areaID]));
106815
106816                         // reset pane, in case user somehow happened to change it..
106817                         d3_select('.inspector-wrap .panewrap').style('right', '-100%');
106818                         // disallow scrolling
106819                         d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
106820
106821                         d3_select('.preset-search-input')
106822                             .on('keydown.intro', null)
106823                             .on('keyup.intro', checkPresetSearch);
106824
106825                         reveal('.preset-search-input',
106826                             t('intro.areas.search_playground', { preset: playgroundPreset.name() })
106827                         );
106828
106829                         context.history().on('change.intro', null);
106830                     }
106831                 });
106832
106833                 function checkPresetSearch() {
106834                     var first = d3_select('.preset-list-item:first-child');
106835
106836                     if (first.classed('preset-leisure-playground')) {
106837                         reveal(first.select('.preset-list-button').node(),
106838                             t('intro.areas.choose_playground', { preset: playgroundPreset.name() }),
106839                             { duration: 300 }
106840                         );
106841
106842                         d3_select('.preset-search-input')
106843                             .on('keydown.intro', eventCancel, true)
106844                             .on('keyup.intro', null);
106845
106846                         context.history().on('change.intro', function() {
106847                             continueTo(clickAddField);
106848                         });
106849                     }
106850                 }
106851
106852                 function continueTo(nextStep) {
106853                     d3_select('.inspector-wrap').on('wheel.intro', null);
106854                     context.on('enter.intro', null);
106855                     context.history().on('change.intro', null);
106856                     d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
106857                     nextStep();
106858                 }
106859             }
106860
106861
106862             function clickAddField() {
106863                 if (!_areaID || !context.hasEntity(_areaID)) {
106864                     return addArea();
106865                 }
106866                 var ids = context.selectedIDs();
106867                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
106868                     return searchPresets();
106869                 }
106870
106871                 if (!d3_select('.form-field-description').empty()) {
106872                     return continueTo(describePlayground);
106873                 }
106874
106875                 // disallow scrolling
106876                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
106877
106878                 timeout(function() {
106879                     // reset pane, in case user somehow happened to change it..
106880                     d3_select('.inspector-wrap .panewrap').style('right', '0%');
106881
106882                     // It's possible for the user to add a description in a previous step..
106883                     // If they did this already, just continue to next step.
106884                     var entity = context.entity(_areaID);
106885                     if (entity.tags.description) {
106886                         return continueTo(play);
106887                     }
106888
106889                     // scroll "Add field" into view
106890                     var box = d3_select('.more-fields').node().getBoundingClientRect();
106891                     if (box.top > 300) {
106892                         var pane = d3_select('.entity-editor-pane .inspector-body');
106893                         var start = pane.node().scrollTop;
106894                         var end = start + (box.top - 300);
106895
106896                         pane
106897                             .transition()
106898                             .duration(250)
106899                             .tween('scroll.inspector', function() {
106900                                 var node = this;
106901                                 var i = d3_interpolateNumber(start, end);
106902                                 return function(t) {
106903                                     node.scrollTop = i(t);
106904                                 };
106905                             });
106906                     }
106907
106908                     timeout(function() {
106909                         reveal('.more-fields .combobox-input',
106910                             t('intro.areas.add_field'),
106911                             { duration: 300 }
106912                         );
106913
106914                         d3_select('.more-fields .combobox-input')
106915                             .on('click.intro', function() {
106916                                 // Watch for the combobox to appear...
106917                                 var watcher;
106918                                 watcher = window.setInterval(function() {
106919                                     if (!d3_select('div.combobox').empty()) {
106920                                         window.clearInterval(watcher);
106921                                         continueTo(chooseDescriptionField);
106922                                     }
106923                                 }, 300);
106924                             });
106925                     }, 300);  // after "Add Field" visible
106926
106927                 }, 400);  // after editor pane visible
106928
106929                 context.on('exit.intro', function() {
106930                     return continueTo(searchPresets);
106931                 });
106932
106933                 function continueTo(nextStep) {
106934                     d3_select('.inspector-wrap').on('wheel.intro', null);
106935                     d3_select('.more-fields .combobox-input').on('click.intro', null);
106936                     context.on('exit.intro', null);
106937                     nextStep();
106938                 }
106939             }
106940
106941
106942             function chooseDescriptionField() {
106943                 if (!_areaID || !context.hasEntity(_areaID)) {
106944                     return addArea();
106945                 }
106946                 var ids = context.selectedIDs();
106947                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
106948                     return searchPresets();
106949                 }
106950
106951                 if (!d3_select('.form-field-description').empty()) {
106952                     return continueTo(describePlayground);
106953                 }
106954
106955                 // Make sure combobox is ready..
106956                 if (d3_select('div.combobox').empty()) {
106957                     return continueTo(clickAddField);
106958                 }
106959                 // Watch for the combobox to go away..
106960                 var watcher;
106961                 watcher = window.setInterval(function() {
106962                     if (d3_select('div.combobox').empty()) {
106963                         window.clearInterval(watcher);
106964                         timeout(function() {
106965                             if (d3_select('.form-field-description').empty()) {
106966                                 continueTo(retryChooseDescription);
106967                             } else {
106968                                 continueTo(describePlayground);
106969                             }
106970                         }, 300);  // after description field added.
106971                     }
106972                 }, 300);
106973
106974                 reveal('div.combobox',
106975                     t('intro.areas.choose_field', { field: descriptionField.label() }),
106976                     { duration: 300 }
106977                 );
106978
106979                 context.on('exit.intro', function() {
106980                     return continueTo(searchPresets);
106981                 });
106982
106983                 function continueTo(nextStep) {
106984                     if (watcher) { window.clearInterval(watcher); }
106985                     context.on('exit.intro', null);
106986                     nextStep();
106987                 }
106988             }
106989
106990
106991             function describePlayground() {
106992                 if (!_areaID || !context.hasEntity(_areaID)) {
106993                     return addArea();
106994                 }
106995                 var ids = context.selectedIDs();
106996                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
106997                     return searchPresets();
106998                 }
106999
107000                 // reset pane, in case user happened to change it..
107001                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
107002
107003                 if (d3_select('.form-field-description').empty()) {
107004                     return continueTo(retryChooseDescription);
107005                 }
107006
107007                 context.on('exit.intro', function() {
107008                     continueTo(play);
107009                 });
107010
107011                 reveal('.entity-editor-pane',
107012                     t('intro.areas.describe_playground', { button: icon('#iD-icon-apply', 'pre-text') }),
107013                     { duration: 300 }
107014                 );
107015
107016                 function continueTo(nextStep) {
107017                     context.on('exit.intro', null);
107018                     nextStep();
107019                 }
107020             }
107021
107022
107023             function retryChooseDescription() {
107024                 if (!_areaID || !context.hasEntity(_areaID)) {
107025                     return addArea();
107026                 }
107027                 var ids = context.selectedIDs();
107028                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
107029                     return searchPresets();
107030                 }
107031
107032                 // reset pane, in case user happened to change it..
107033                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
107034
107035                 reveal('.entity-editor-pane',
107036                     t('intro.areas.retry_add_field', { field: descriptionField.label() }), {
107037                     buttonText: t('intro.ok'),
107038                     buttonCallback: function() { continueTo(clickAddField); }
107039                 });
107040
107041                 context.on('exit.intro', function() {
107042                     return continueTo(searchPresets);
107043                 });
107044
107045                 function continueTo(nextStep) {
107046                     context.on('exit.intro', null);
107047                     nextStep();
107048                 }
107049             }
107050
107051
107052             function play() {
107053                 dispatch$1.call('done');
107054                 reveal('#id-container',
107055                     t('intro.areas.play', { next: t('intro.lines.title') }), {
107056                         tooltipBox: '.intro-nav-wrap .chapter-line',
107057                         buttonText: t('intro.ok'),
107058                         buttonCallback: function() { reveal('#id-container'); }
107059                     }
107060                 );
107061             }
107062
107063
107064             chapter.enter = function() {
107065                 addArea();
107066             };
107067
107068
107069             chapter.exit = function() {
107070                 timeouts.forEach(window.clearTimeout);
107071                 context.on('enter.intro exit.intro', null);
107072                 context.map().on('move.intro drawn.intro', null);
107073                 context.history().on('change.intro', null);
107074                 d3_select('.inspector-wrap').on('wheel.intro', null);
107075                 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
107076                 d3_select('.more-fields .combobox-input').on('click.intro', null);
107077             };
107078
107079
107080             chapter.restart = function() {
107081                 chapter.exit();
107082                 chapter.enter();
107083             };
107084
107085
107086             return utilRebind(chapter, dispatch$1, 'on');
107087         }
107088
107089         function uiIntroLine(context, reveal) {
107090             var dispatch$1 = dispatch('done');
107091             var timeouts = [];
107092             var _tulipRoadID = null;
107093             var flowerRoadID = 'w646';
107094             var tulipRoadStart = [-85.6297754121684, 41.95805253325314];
107095             var tulipRoadMidpoint = [-85.62975395449628, 41.95787501510204];
107096             var tulipRoadIntersection = [-85.62974496187628, 41.95742515554585];
107097             var roadCategory = context.presets().item('category-road_minor');
107098             var residentialPreset = context.presets().item('highway/residential');
107099             var woodRoadID = 'w525';
107100             var woodRoadEndID = 'n2862';
107101             var woodRoadAddNode = [-85.62390110349587, 41.95397111462291];
107102             var woodRoadDragEndpoint = [-85.623867390213, 41.95466987786487];
107103             var woodRoadDragMidpoint = [-85.62386254803509, 41.95430395953872];
107104             var washingtonStreetID = 'w522';
107105             var twelfthAvenueID = 'w1';
107106             var eleventhAvenueEndID = 'n3550';
107107             var twelfthAvenueEndID = 'n5';
107108             var _washingtonSegmentID = null;
107109             var eleventhAvenueEnd = context.entity(eleventhAvenueEndID).loc;
107110             var twelfthAvenueEnd = context.entity(twelfthAvenueEndID).loc;
107111             var deleteLinesLoc = [-85.6219395542764, 41.95228033922477];
107112             var twelfthAvenue = [-85.62219310052491, 41.952505413152956];
107113
107114
107115             var chapter = {
107116                 title: 'intro.lines.title'
107117             };
107118
107119
107120             function timeout(f, t) {
107121                 timeouts.push(window.setTimeout(f, t));
107122             }
107123
107124
107125             function eventCancel() {
107126                 event.stopPropagation();
107127                 event.preventDefault();
107128             }
107129
107130
107131             function revealEditMenu(loc, text, options) {
107132                 var rect = context.surfaceRect();
107133                 var point = context.curtainProjection(loc);
107134                 var pad = 40;
107135                 var width = 250 + (2 * pad);
107136                 var height = 350;
107137                 var startX = rect.left + point[0];
107138                 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
107139                 var box = {
107140                     left: left,
107141                     top: point[1] + rect.top - 60,
107142                     width: width,
107143                     height: height
107144                 };
107145                 reveal(box, text, options);
107146             }
107147
107148
107149             function addLine() {
107150                 context.enter(modeBrowse(context));
107151                 context.history().reset('initial');
107152
107153                 var msec = transitionTime(tulipRoadStart, context.map().center());
107154                 if (msec) { reveal(null, null, { duration: 0 }); }
107155                 context.map().centerZoomEase(tulipRoadStart, 18.5, msec);
107156
107157                 timeout(function() {
107158                     var tooltip = reveal('button.add-line',
107159                         t('intro.lines.add_line', { button: icon('#iD-icon-line', 'pre-text') }));
107160
107161                     tooltip.selectAll('.popover-inner')
107162                         .insert('svg', 'span')
107163                         .attr('class', 'tooltip-illustration')
107164                         .append('use')
107165                         .attr('xlink:href', '#iD-graphic-lines');
107166
107167                     context.on('enter.intro', function(mode) {
107168                         if (mode.id !== 'add-line') { return; }
107169                         continueTo(startLine);
107170                     });
107171                 }, msec + 100);
107172
107173                 function continueTo(nextStep) {
107174                     context.on('enter.intro', null);
107175                     nextStep();
107176                 }
107177             }
107178
107179
107180             function startLine() {
107181                 if (context.mode().id !== 'add-line') { return chapter.restart(); }
107182
107183                 _tulipRoadID = null;
107184
107185                 var padding = 70 * Math.pow(2, context.map().zoom() - 18);
107186                 var box = pad$2(tulipRoadStart, padding, context);
107187                 box.height = box.height + 100;
107188                 reveal(box, t('intro.lines.start_line'));
107189
107190                 context.map().on('move.intro drawn.intro', function() {
107191                     padding = 70 * Math.pow(2, context.map().zoom() - 18);
107192                     box = pad$2(tulipRoadStart, padding, context);
107193                     box.height = box.height + 100;
107194                     reveal(box, t('intro.lines.start_line'), { duration: 0 });
107195                 });
107196
107197                 context.on('enter.intro', function(mode) {
107198                     if (mode.id !== 'draw-line') { return chapter.restart(); }
107199                     continueTo(drawLine);
107200                 });
107201
107202                 function continueTo(nextStep) {
107203                     context.map().on('move.intro drawn.intro', null);
107204                     context.on('enter.intro', null);
107205                     nextStep();
107206                 }
107207             }
107208
107209
107210             function drawLine() {
107211                 if (context.mode().id !== 'draw-line') { return chapter.restart(); }
107212
107213                 _tulipRoadID = context.mode().selectedIDs()[0];
107214                 context.map().centerEase(tulipRoadMidpoint, 500);
107215
107216                 timeout(function() {
107217                     var padding = 200 * Math.pow(2, context.map().zoom() - 18.5);
107218                     var box = pad$2(tulipRoadMidpoint, padding, context);
107219                     box.height = box.height * 2;
107220                     reveal(box,
107221                         t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') })
107222                     );
107223
107224                     context.map().on('move.intro drawn.intro', function() {
107225                         padding = 200 * Math.pow(2, context.map().zoom() - 18.5);
107226                         box = pad$2(tulipRoadMidpoint, padding, context);
107227                         box.height = box.height * 2;
107228                         reveal(box,
107229                             t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') }),
107230                             { duration: 0 }
107231                         );
107232                     });
107233                 }, 550);  // after easing..
107234
107235                 context.history().on('change.intro', function() {
107236                     if (isLineConnected()) {
107237                         continueTo(continueLine);
107238                     }
107239                 });
107240
107241                 context.on('enter.intro', function(mode) {
107242                     if (mode.id === 'draw-line') {
107243                         return;
107244                     } else if (mode.id === 'select') {
107245                         continueTo(retryIntersect);
107246                         return;
107247                     } else {
107248                         return chapter.restart();
107249                     }
107250                 });
107251
107252                 function continueTo(nextStep) {
107253                     context.map().on('move.intro drawn.intro', null);
107254                     context.history().on('change.intro', null);
107255                     context.on('enter.intro', null);
107256                     nextStep();
107257                 }
107258             }
107259
107260
107261             function isLineConnected() {
107262                 var entity = _tulipRoadID && context.hasEntity(_tulipRoadID);
107263                 if (!entity) { return false; }
107264
107265                 var drawNodes = context.graph().childNodes(entity);
107266                 return drawNodes.some(function(node) {
107267                     return context.graph().parentWays(node).some(function(parent) {
107268                         return parent.id === flowerRoadID;
107269                     });
107270                 });
107271             }
107272
107273
107274             function retryIntersect() {
107275                 d3_select(window).on('mousedown.intro', eventCancel, true);
107276
107277                 var box = pad$2(tulipRoadIntersection, 80, context);
107278                 reveal(box,
107279                     t('intro.lines.retry_intersect', { name: t('intro.graph.name.flower-street') })
107280                 );
107281
107282                 timeout(chapter.restart, 3000);
107283             }
107284
107285
107286             function continueLine() {
107287                 if (context.mode().id !== 'draw-line') { return chapter.restart(); }
107288                 var entity = _tulipRoadID && context.hasEntity(_tulipRoadID);
107289                 if (!entity) { return chapter.restart(); }
107290
107291                 context.map().centerEase(tulipRoadIntersection, 500);
107292
107293                 reveal('#surface', t('intro.lines.continue_line'));
107294
107295                 context.on('enter.intro', function(mode) {
107296                     if (mode.id === 'draw-line')
107297                         { return; }
107298                     else if (mode.id === 'select')
107299                         { return continueTo(chooseCategoryRoad); }
107300                     else
107301                         { return chapter.restart(); }
107302                 });
107303
107304                 function continueTo(nextStep) {
107305                     context.on('enter.intro', null);
107306                     nextStep();
107307                 }
107308             }
107309
107310
107311             function chooseCategoryRoad() {
107312                 if (context.mode().id !== 'select') { return chapter.restart(); }
107313
107314                 context.on('exit.intro', function() {
107315                     return chapter.restart();
107316                 });
107317
107318                 var button = d3_select('.preset-category-road_minor .preset-list-button');
107319                 if (button.empty()) { return chapter.restart(); }
107320
107321                 // disallow scrolling
107322                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
107323
107324                 timeout(function() {
107325                     // reset pane, in case user somehow happened to change it..
107326                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
107327
107328                     reveal(button.node(),
107329                         t('intro.lines.choose_category_road', { category: roadCategory.name() })
107330                     );
107331
107332                     button.on('click.intro', function() {
107333                         continueTo(choosePresetResidential);
107334                     });
107335
107336                 }, 400);  // after editor pane visible
107337
107338                 function continueTo(nextStep) {
107339                     d3_select('.inspector-wrap').on('wheel.intro', null);
107340                     d3_select('.preset-list-button').on('click.intro', null);
107341                     context.on('exit.intro', null);
107342                     nextStep();
107343                 }
107344             }
107345
107346
107347             function choosePresetResidential() {
107348                 if (context.mode().id !== 'select') { return chapter.restart(); }
107349
107350                 context.on('exit.intro', function() {
107351                     return chapter.restart();
107352                 });
107353
107354                 var subgrid = d3_select('.preset-category-road_minor .subgrid');
107355                 if (subgrid.empty()) { return chapter.restart(); }
107356
107357                 subgrid.selectAll(':not(.preset-highway-residential) .preset-list-button')
107358                     .on('click.intro', function() {
107359                         continueTo(retryPresetResidential);
107360                     });
107361
107362                 subgrid.selectAll('.preset-highway-residential .preset-list-button')
107363                     .on('click.intro', function() {
107364                         continueTo(nameRoad);
107365                     });
107366
107367                 timeout(function() {
107368                     reveal(subgrid.node(),
107369                         t('intro.lines.choose_preset_residential', { preset: residentialPreset.name() }),
107370                         { tooltipBox: '.preset-highway-residential .preset-list-button', duration: 300 }
107371                     );
107372                 }, 300);
107373
107374                 function continueTo(nextStep) {
107375                     d3_select('.preset-list-button').on('click.intro', null);
107376                     context.on('exit.intro', null);
107377                     nextStep();
107378                 }
107379             }
107380
107381
107382             // selected wrong road type
107383             function retryPresetResidential() {
107384                 if (context.mode().id !== 'select') { return chapter.restart(); }
107385
107386                 context.on('exit.intro', function() {
107387                     return chapter.restart();
107388                 });
107389
107390                 // disallow scrolling
107391                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
107392
107393                 timeout(function() {
107394                     var button = d3_select('.entity-editor-pane .preset-list-button');
107395
107396                     reveal(button.node(),
107397                         t('intro.lines.retry_preset_residential', { preset: residentialPreset.name() })
107398                     );
107399
107400                     button.on('click.intro', function() {
107401                         continueTo(chooseCategoryRoad);
107402                     });
107403
107404                 }, 500);
107405
107406                 function continueTo(nextStep) {
107407                     d3_select('.inspector-wrap').on('wheel.intro', null);
107408                     d3_select('.preset-list-button').on('click.intro', null);
107409                     context.on('exit.intro', null);
107410                     nextStep();
107411                 }
107412             }
107413
107414
107415             function nameRoad() {
107416                 context.on('exit.intro', function() {
107417                     continueTo(didNameRoad);
107418                 });
107419
107420                 timeout(function() {
107421                     reveal('.entity-editor-pane',
107422                         t('intro.lines.name_road', { button: icon('#iD-icon-apply', 'pre-text') }),
107423                         { tooltipClass: 'intro-lines-name_road' }
107424                     );
107425                 }, 500);
107426
107427                 function continueTo(nextStep) {
107428                     context.on('exit.intro', null);
107429                     nextStep();
107430                 }
107431             }
107432
107433
107434             function didNameRoad() {
107435                 context.history().checkpoint('doneAddLine');
107436
107437                 timeout(function() {
107438                     reveal('#surface', t('intro.lines.did_name_road'), {
107439                         buttonText: t('intro.ok'),
107440                         buttonCallback: function() { continueTo(updateLine); }
107441                     });
107442                 }, 500);
107443
107444                 function continueTo(nextStep) {
107445                     nextStep();
107446                 }
107447             }
107448
107449
107450             function updateLine() {
107451                 context.history().reset('doneAddLine');
107452                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
107453                     return chapter.restart();
107454                 }
107455
107456                 var msec = transitionTime(woodRoadDragMidpoint, context.map().center());
107457                 if (msec) { reveal(null, null, { duration: 0 }); }
107458                 context.map().centerZoomEase(woodRoadDragMidpoint, 19, msec);
107459
107460                 timeout(function() {
107461                     var padding = 250 * Math.pow(2, context.map().zoom() - 19);
107462                     var box = pad$2(woodRoadDragMidpoint, padding, context);
107463                     var advance = function() { continueTo(addNode); };
107464
107465                     reveal(box, t('intro.lines.update_line'),
107466                         { buttonText: t('intro.ok'), buttonCallback: advance }
107467                     );
107468
107469                     context.map().on('move.intro drawn.intro', function() {
107470                         var padding = 250 * Math.pow(2, context.map().zoom() - 19);
107471                         var box = pad$2(woodRoadDragMidpoint, padding, context);
107472                         reveal(box, t('intro.lines.update_line'),
107473                             { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
107474                         );
107475                     });
107476                 }, msec + 100);
107477
107478                 function continueTo(nextStep) {
107479                     context.map().on('move.intro drawn.intro', null);
107480                     nextStep();
107481                 }
107482             }
107483
107484
107485             function addNode() {
107486                 context.history().reset('doneAddLine');
107487                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
107488                     return chapter.restart();
107489                 }
107490
107491                 var padding = 40 * Math.pow(2, context.map().zoom() - 19);
107492                 var box = pad$2(woodRoadAddNode, padding, context);
107493                 reveal(box, t('intro.lines.add_node'));
107494
107495                 context.map().on('move.intro drawn.intro', function() {
107496                     var padding = 40 * Math.pow(2, context.map().zoom() - 19);
107497                     var box = pad$2(woodRoadAddNode, padding, context);
107498                     reveal(box, t('intro.lines.add_node'), { duration: 0 });
107499                 });
107500
107501                 context.history().on('change.intro', function(changed) {
107502                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
107503                         return continueTo(updateLine);
107504                     }
107505                     if (changed.created().length === 1) {
107506                         timeout(function() { continueTo(startDragEndpoint); }, 500);
107507                     }
107508                 });
107509
107510                 context.on('enter.intro', function(mode) {
107511                     if (mode.id !== 'select') {
107512                         continueTo(updateLine);
107513                     }
107514                 });
107515
107516                 function continueTo(nextStep) {
107517                     context.map().on('move.intro drawn.intro', null);
107518                     context.history().on('change.intro', null);
107519                     context.on('enter.intro', null);
107520                     nextStep();
107521                 }
107522             }
107523
107524
107525             function startDragEndpoint() {
107526                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
107527                     return continueTo(updateLine);
107528                 }
107529                 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
107530                 var box = pad$2(woodRoadDragEndpoint, padding, context);
107531                 reveal(box, t('intro.lines.start_drag_endpoint'));
107532
107533                 context.map().on('move.intro drawn.intro', function() {
107534                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
107535                         return continueTo(updateLine);
107536                     }
107537                     var padding = 100 * Math.pow(2, context.map().zoom() - 19);
107538                     var box = pad$2(woodRoadDragEndpoint, padding, context);
107539                     reveal(box, t('intro.lines.start_drag_endpoint'), { duration: 0 });
107540
107541                     var entity = context.entity(woodRoadEndID);
107542                     if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) <= 4) {
107543                         continueTo(finishDragEndpoint);
107544                     }
107545                 });
107546
107547                 function continueTo(nextStep) {
107548                     context.map().on('move.intro drawn.intro', null);
107549                     nextStep();
107550                 }
107551             }
107552
107553
107554             function finishDragEndpoint() {
107555                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
107556                     return continueTo(updateLine);
107557                 }
107558
107559                 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
107560                 var box = pad$2(woodRoadDragEndpoint, padding, context);
107561                 reveal(box, t('intro.lines.finish_drag_endpoint'));
107562
107563                 context.map().on('move.intro drawn.intro', function() {
107564                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
107565                         return continueTo(updateLine);
107566                     }
107567                     var padding = 100 * Math.pow(2, context.map().zoom() - 19);
107568                     var box = pad$2(woodRoadDragEndpoint, padding, context);
107569                     reveal(box, t('intro.lines.finish_drag_endpoint'), { duration: 0 });
107570
107571                     var entity = context.entity(woodRoadEndID);
107572                     if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) > 4) {
107573                         continueTo(startDragEndpoint);
107574                     }
107575                 });
107576
107577                 context.on('enter.intro', function() {
107578                     continueTo(startDragMidpoint);
107579                 });
107580
107581                 function continueTo(nextStep) {
107582                     context.map().on('move.intro drawn.intro', null);
107583                     context.on('enter.intro', null);
107584                     nextStep();
107585                 }
107586             }
107587
107588
107589             function startDragMidpoint() {
107590                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
107591                     return continueTo(updateLine);
107592                 }
107593                 if (context.selectedIDs().indexOf(woodRoadID) === -1) {
107594                     context.enter(modeSelect(context, [woodRoadID]));
107595                 }
107596
107597                 var padding = 80 * Math.pow(2, context.map().zoom() - 19);
107598                 var box = pad$2(woodRoadDragMidpoint, padding, context);
107599                 reveal(box, t('intro.lines.start_drag_midpoint'));
107600
107601                 context.map().on('move.intro drawn.intro', function() {
107602                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
107603                         return continueTo(updateLine);
107604                     }
107605                     var padding = 80 * Math.pow(2, context.map().zoom() - 19);
107606                     var box = pad$2(woodRoadDragMidpoint, padding, context);
107607                     reveal(box, t('intro.lines.start_drag_midpoint'), { duration: 0 });
107608                 });
107609
107610                 context.history().on('change.intro', function(changed) {
107611                     if (changed.created().length === 1) {
107612                         continueTo(continueDragMidpoint);
107613                     }
107614                 });
107615
107616                 context.on('enter.intro', function(mode) {
107617                     if (mode.id !== 'select') {
107618                         // keep Wood Road selected so midpoint triangles are drawn..
107619                         context.enter(modeSelect(context, [woodRoadID]));
107620                     }
107621                 });
107622
107623                 function continueTo(nextStep) {
107624                     context.map().on('move.intro drawn.intro', null);
107625                     context.history().on('change.intro', null);
107626                     context.on('enter.intro', null);
107627                     nextStep();
107628                 }
107629             }
107630
107631
107632             function continueDragMidpoint() {
107633                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
107634                     return continueTo(updateLine);
107635                 }
107636
107637                 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
107638                 var box = pad$2(woodRoadDragEndpoint, padding, context);
107639                 box.height += 400;
107640
107641                 var advance = function() {
107642                     context.history().checkpoint('doneUpdateLine');
107643                     continueTo(deleteLines);
107644                 };
107645
107646                 reveal(box, t('intro.lines.continue_drag_midpoint'),
107647                     { buttonText: t('intro.ok'), buttonCallback: advance }
107648                 );
107649
107650                 context.map().on('move.intro drawn.intro', function() {
107651                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
107652                         return continueTo(updateLine);
107653                     }
107654                     var padding = 100 * Math.pow(2, context.map().zoom() - 19);
107655                     var box = pad$2(woodRoadDragEndpoint, padding, context);
107656                     box.height += 400;
107657                     reveal(box, t('intro.lines.continue_drag_midpoint'),
107658                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
107659                     );
107660                 });
107661
107662                 function continueTo(nextStep) {
107663                     context.map().on('move.intro drawn.intro', null);
107664                     nextStep();
107665                 }
107666             }
107667
107668
107669             function deleteLines() {
107670                 context.history().reset('doneUpdateLine');
107671                 context.enter(modeBrowse(context));
107672
107673                 if (!context.hasEntity(washingtonStreetID) ||
107674                     !context.hasEntity(twelfthAvenueID) ||
107675                     !context.hasEntity(eleventhAvenueEndID)) {
107676                     return chapter.restart();
107677                 }
107678
107679                 var msec = transitionTime(deleteLinesLoc, context.map().center());
107680                 if (msec) { reveal(null, null, { duration: 0 }); }
107681                 context.map().centerZoomEase(deleteLinesLoc, 18, msec);
107682
107683                 timeout(function() {
107684                     var padding = 200 * Math.pow(2, context.map().zoom() - 18);
107685                     var box = pad$2(deleteLinesLoc, padding, context);
107686                     box.top -= 200;
107687                     box.height += 400;
107688                     var advance = function() { continueTo(rightClickIntersection); };
107689
107690                     reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }),
107691                         { buttonText: t('intro.ok'), buttonCallback: advance }
107692                     );
107693
107694                     context.map().on('move.intro drawn.intro', function() {
107695                         var padding = 200 * Math.pow(2, context.map().zoom() - 18);
107696                         var box = pad$2(deleteLinesLoc, padding, context);
107697                         box.top -= 200;
107698                         box.height += 400;
107699                         reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }),
107700                             { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
107701                         );
107702                     });
107703
107704                     context.history().on('change.intro', function() {
107705                         timeout(function() {
107706                             continueTo(deleteLines);
107707                         }, 500);  // after any transition (e.g. if user deleted intersection)
107708                     });
107709
107710                 }, msec + 100);
107711
107712                 function continueTo(nextStep) {
107713                     context.map().on('move.intro drawn.intro', null);
107714                     context.history().on('change.intro', null);
107715                     nextStep();
107716                 }
107717             }
107718
107719
107720             function rightClickIntersection() {
107721                 context.history().reset('doneUpdateLine');
107722                 context.enter(modeBrowse(context));
107723
107724                 context.map().centerZoomEase(eleventhAvenueEnd, 18, 500);
107725
107726                 timeout(function() {
107727                     var padding = 60 * Math.pow(2, context.map().zoom() - 18);
107728                     var box = pad$2(eleventhAvenueEnd, padding, context);
107729                     reveal(box, t('intro.lines.rightclick_intersection',
107730                         { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') })
107731                     );
107732
107733                     context.map().on('move.intro drawn.intro', function() {
107734                         var padding = 60 * Math.pow(2, context.map().zoom() - 18);
107735                         var box = pad$2(eleventhAvenueEnd, padding, context);
107736                         reveal(box, t('intro.lines.rightclick_intersection',
107737                             { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') }),
107738                             { duration: 0 }
107739                         );
107740                     });
107741
107742                     context.on('enter.intro', function(mode) {
107743                         if (mode.id !== 'select') { return; }
107744                         var ids = context.selectedIDs();
107745                         if (ids.length !== 1 || ids[0] !== eleventhAvenueEndID) { return; }
107746
107747                         timeout(function() {
107748                             var node = selectMenuItem('split').node();
107749                             if (!node) { return; }
107750                             continueTo(splitIntersection);
107751                         }, 300);  // after menu visible
107752                     });
107753
107754                     context.history().on('change.intro', function() {
107755                         timeout(function() {
107756                             continueTo(deleteLines);
107757                         }, 300);  // after any transition (e.g. if user deleted intersection)
107758                     });
107759
107760                 }, 600);
107761
107762                 function continueTo(nextStep) {
107763                     context.map().on('move.intro drawn.intro', null);
107764                     context.on('enter.intro', null);
107765                     context.history().on('change.intro', null);
107766                     nextStep();
107767                 }
107768             }
107769
107770
107771             function splitIntersection() {
107772                 if (!context.hasEntity(washingtonStreetID) ||
107773                     !context.hasEntity(twelfthAvenueID) ||
107774                     !context.hasEntity(eleventhAvenueEndID)) {
107775                     return continueTo(deleteLines);
107776                 }
107777
107778                 var node = selectMenuItem('split').node();
107779                 if (!node) { return continueTo(rightClickIntersection); }
107780
107781                 var wasChanged = false;
107782                 var menuCoords = context.map().mouseCoordinates();
107783                 _washingtonSegmentID = null;
107784
107785                 revealEditMenu(menuCoords, t('intro.lines.split_intersection',
107786                     { button: icon('#iD-operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') })
107787                 );
107788
107789                 context.map().on('move.intro drawn.intro', function() {
107790                     var node = selectMenuItem('split').node();
107791                     if (!wasChanged && !node) { return continueTo(rightClickIntersection); }
107792
107793                     revealEditMenu(menuCoords, t('intro.lines.split_intersection',
107794                         { button: icon('#iD-operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') }),
107795                         { duration: 0 }
107796                     );
107797                 });
107798
107799                 context.history().on('change.intro', function(changed) {
107800                     wasChanged = true;
107801                     timeout(function() {
107802                         if (context.history().undoAnnotation() === t('operations.split.annotation.line')) {
107803                             _washingtonSegmentID = changed.created()[0].id;
107804                             continueTo(didSplit);
107805                         } else {
107806                             _washingtonSegmentID = null;
107807                             continueTo(retrySplit);
107808                         }
107809                     }, 300);  // after any transition (e.g. if user deleted intersection)
107810                 });
107811
107812                 function continueTo(nextStep) {
107813                     context.map().on('move.intro drawn.intro', null);
107814                     context.history().on('change.intro', null);
107815                     nextStep();
107816                 }
107817             }
107818
107819
107820             function retrySplit() {
107821                 context.enter(modeBrowse(context));
107822                 context.map().centerZoomEase(eleventhAvenueEnd, 18, 500);
107823                 var advance = function() { continueTo(rightClickIntersection); };
107824
107825                 var padding = 60 * Math.pow(2, context.map().zoom() - 18);
107826                 var box = pad$2(eleventhAvenueEnd, padding, context);
107827                 reveal(box, t('intro.lines.retry_split'),
107828                     { buttonText: t('intro.ok'), buttonCallback: advance }
107829                 );
107830
107831                 context.map().on('move.intro drawn.intro', function() {
107832                     var padding = 60 * Math.pow(2, context.map().zoom() - 18);
107833                     var box = pad$2(eleventhAvenueEnd, padding, context);
107834                     reveal(box, t('intro.lines.retry_split'),
107835                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
107836                     );
107837                 });
107838
107839                 function continueTo(nextStep) {
107840                     context.map().on('move.intro drawn.intro', null);
107841                     nextStep();
107842                 }
107843             }
107844
107845
107846             function didSplit() {
107847                 if (!_washingtonSegmentID ||
107848                     !context.hasEntity(_washingtonSegmentID) ||
107849                     !context.hasEntity(washingtonStreetID) ||
107850                     !context.hasEntity(twelfthAvenueID) ||
107851                     !context.hasEntity(eleventhAvenueEndID)) {
107852                     return continueTo(rightClickIntersection);
107853                 }
107854
107855                 var ids = context.selectedIDs();
107856                 var string = 'intro.lines.did_split_' + (ids.length > 1 ? 'multi' : 'single');
107857                 var street = t('intro.graph.name.washington-street');
107858
107859                 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
107860                 var box = pad$2(twelfthAvenue, padding, context);
107861                 box.width = box.width / 2;
107862                 reveal(box, t(string, { street1: street, street2: street }),
107863                     { duration: 500 }
107864                 );
107865
107866                 timeout(function() {
107867                     context.map().centerZoomEase(twelfthAvenue, 18, 500);
107868
107869                     context.map().on('move.intro drawn.intro', function() {
107870                         var padding = 200 * Math.pow(2, context.map().zoom() - 18);
107871                         var box = pad$2(twelfthAvenue, padding, context);
107872                         box.width = box.width / 2;
107873                         reveal(box, t(string, { street1: street, street2: street }),
107874                             { duration: 0 }
107875                         );
107876                     });
107877                 }, 600);  // after initial reveal and curtain cut
107878
107879                 context.on('enter.intro', function() {
107880                     var ids = context.selectedIDs();
107881                     if (ids.length === 1 && ids[0] === _washingtonSegmentID) {
107882                         continueTo(multiSelect);
107883                     }
107884                 });
107885
107886                 context.history().on('change.intro', function() {
107887                     if (!_washingtonSegmentID ||
107888                         !context.hasEntity(_washingtonSegmentID) ||
107889                         !context.hasEntity(washingtonStreetID) ||
107890                         !context.hasEntity(twelfthAvenueID) ||
107891                         !context.hasEntity(eleventhAvenueEndID)) {
107892                         return continueTo(rightClickIntersection);
107893                     }
107894                 });
107895
107896                 function continueTo(nextStep) {
107897                     context.map().on('move.intro drawn.intro', null);
107898                     context.on('enter.intro', null);
107899                     context.history().on('change.intro', null);
107900                     nextStep();
107901                 }
107902             }
107903
107904
107905             function multiSelect() {
107906                 if (!_washingtonSegmentID ||
107907                     !context.hasEntity(_washingtonSegmentID) ||
107908                     !context.hasEntity(washingtonStreetID) ||
107909                     !context.hasEntity(twelfthAvenueID) ||
107910                     !context.hasEntity(eleventhAvenueEndID)) {
107911                     return continueTo(rightClickIntersection);
107912                 }
107913
107914                 var ids = context.selectedIDs();
107915                 var hasWashington = ids.indexOf(_washingtonSegmentID) !== -1;
107916                 var hasTwelfth = ids.indexOf(twelfthAvenueID) !== -1;
107917
107918                 if (hasWashington && hasTwelfth) {
107919                     return continueTo(multiRightClick);
107920                 } else if (!hasWashington && !hasTwelfth) {
107921                     return continueTo(didSplit);
107922                 }
107923
107924                 context.map().centerZoomEase(twelfthAvenue, 18, 500);
107925
107926                 timeout(function() {
107927                     var selected, other, padding, box;
107928                     if (hasWashington) {
107929                         selected = t('intro.graph.name.washington-street');
107930                         other = t('intro.graph.name.12th-avenue');
107931                         padding = 60 * Math.pow(2, context.map().zoom() - 18);
107932                         box = pad$2(twelfthAvenueEnd, padding, context);
107933                         box.width *= 3;
107934                     } else {
107935                         selected = t('intro.graph.name.12th-avenue');
107936                         other = t('intro.graph.name.washington-street');
107937                         padding = 200 * Math.pow(2, context.map().zoom() - 18);
107938                         box = pad$2(twelfthAvenue, padding, context);
107939                         box.width /= 2;
107940                     }
107941
107942                     reveal(box,
107943                         t('intro.lines.multi_select', { selected: selected, other1: other, other2: other })
107944                     );
107945
107946                     context.map().on('move.intro drawn.intro', function() {
107947                         if (hasWashington) {
107948                             selected = t('intro.graph.name.washington-street');
107949                             other = t('intro.graph.name.12th-avenue');
107950                             padding = 60 * Math.pow(2, context.map().zoom() - 18);
107951                             box = pad$2(twelfthAvenueEnd, padding, context);
107952                             box.width *= 3;
107953                         } else {
107954                             selected = t('intro.graph.name.12th-avenue');
107955                             other = t('intro.graph.name.washington-street');
107956                             padding = 200 * Math.pow(2, context.map().zoom() - 18);
107957                             box = pad$2(twelfthAvenue, padding, context);
107958                             box.width /= 2;
107959                         }
107960
107961                         reveal(box,
107962                             t('intro.lines.multi_select', { selected: selected, other1: other, other2: other }),
107963                             { duration: 0 }
107964                         );
107965                     });
107966
107967                     context.on('enter.intro', function() {
107968                         continueTo(multiSelect);
107969                     });
107970
107971                     context.history().on('change.intro', function() {
107972                         if (!_washingtonSegmentID ||
107973                             !context.hasEntity(_washingtonSegmentID) ||
107974                             !context.hasEntity(washingtonStreetID) ||
107975                             !context.hasEntity(twelfthAvenueID) ||
107976                             !context.hasEntity(eleventhAvenueEndID)) {
107977                             return continueTo(rightClickIntersection);
107978                         }
107979                     });
107980                 }, 600);
107981
107982                 function continueTo(nextStep) {
107983                     context.map().on('move.intro drawn.intro', null);
107984                     context.on('enter.intro', null);
107985                     context.history().on('change.intro', null);
107986                     nextStep();
107987                 }
107988             }
107989
107990
107991             function multiRightClick() {
107992                 if (!_washingtonSegmentID ||
107993                     !context.hasEntity(_washingtonSegmentID) ||
107994                     !context.hasEntity(washingtonStreetID) ||
107995                     !context.hasEntity(twelfthAvenueID) ||
107996                     !context.hasEntity(eleventhAvenueEndID)) {
107997                     return continueTo(rightClickIntersection);
107998                 }
107999
108000                 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
108001                 var box = pad$2(twelfthAvenue, padding, context);
108002                 reveal(box, t('intro.lines.multi_rightclick'));
108003
108004                 context.map().on('move.intro drawn.intro', function() {
108005                     var padding = 200 * Math.pow(2, context.map().zoom() - 18);
108006                     var box = pad$2(twelfthAvenue, padding, context);
108007                     reveal(box, t('intro.lines.multi_rightclick'), { duration: 0 });
108008                 });
108009
108010                 d3_select(window).on('click.intro contextmenu.intro', function() {
108011                     timeout(function() {
108012                         var ids = context.selectedIDs();
108013                         if (ids.length === 2 &&
108014                             ids.indexOf(twelfthAvenueID) !== -1 &&
108015                             ids.indexOf(_washingtonSegmentID) !== -1) {
108016                                 var node = selectMenuItem('delete').node();
108017                                 if (!node) { return; }
108018                                 continueTo(multiDelete);
108019                         } else if (ids.length === 1 &&
108020                             ids.indexOf(_washingtonSegmentID) !== -1) {
108021                             return continueTo(multiSelect);
108022                         } else {
108023                             return continueTo(didSplit);
108024                         }
108025                     }, 300);  // after edit menu visible
108026                 }, true);
108027
108028                 context.history().on('change.intro', function() {
108029                     if (!_washingtonSegmentID ||
108030                         !context.hasEntity(_washingtonSegmentID) ||
108031                         !context.hasEntity(washingtonStreetID) ||
108032                         !context.hasEntity(twelfthAvenueID) ||
108033                         !context.hasEntity(eleventhAvenueEndID)) {
108034                         return continueTo(rightClickIntersection);
108035                     }
108036                 });
108037
108038                 function continueTo(nextStep) {
108039                     context.map().on('move.intro drawn.intro', null);
108040                     d3_select(window).on('click.intro contextmenu.intro', null, true);
108041                     context.history().on('change.intro', null);
108042                     nextStep();
108043                 }
108044             }
108045
108046
108047             function multiDelete() {
108048                 if (!_washingtonSegmentID ||
108049                     !context.hasEntity(_washingtonSegmentID) ||
108050                     !context.hasEntity(washingtonStreetID) ||
108051                     !context.hasEntity(twelfthAvenueID) ||
108052                     !context.hasEntity(eleventhAvenueEndID)) {
108053                     return continueTo(rightClickIntersection);
108054                 }
108055
108056                 var node = selectMenuItem('delete').node();
108057                 if (!node) { return continueTo(multiRightClick); }
108058
108059                 var menuCoords = context.map().mouseCoordinates();
108060                 revealEditMenu(menuCoords,
108061                     t('intro.lines.multi_delete', { button: icon('#iD-operation-delete', 'pre-text') })
108062                 );
108063
108064                 context.map().on('move.intro drawn.intro', function() {
108065                     revealEditMenu(menuCoords,
108066                         t('intro.lines.multi_delete', { button: icon('#iD-operation-delete', 'pre-text') }),
108067                         { duration: 0 }
108068                     );
108069                 });
108070
108071                 context.on('exit.intro', function() {
108072                     if (context.hasEntity(_washingtonSegmentID) || context.hasEntity(twelfthAvenueID)) {
108073                         return continueTo(multiSelect);  // left select mode but roads still exist
108074                     }
108075                 });
108076
108077                 context.history().on('change.intro', function() {
108078                     if (context.hasEntity(_washingtonSegmentID) || context.hasEntity(twelfthAvenueID)) {
108079                         continueTo(retryDelete);         // changed something but roads still exist
108080                     } else {
108081                         continueTo(play);
108082                     }
108083                 });
108084
108085                 function continueTo(nextStep) {
108086                     context.map().on('move.intro drawn.intro', null);
108087                     context.on('exit.intro', null);
108088                     context.history().on('change.intro', null);
108089                     nextStep();
108090                 }
108091             }
108092
108093
108094             function retryDelete() {
108095                 context.enter(modeBrowse(context));
108096
108097                 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
108098                 var box = pad$2(twelfthAvenue, padding, context);
108099                 reveal(box, t('intro.lines.retry_delete'), {
108100                     buttonText: t('intro.ok'),
108101                     buttonCallback: function() { continueTo(multiSelect); }
108102                 });
108103
108104                 function continueTo(nextStep) {
108105                     nextStep();
108106                 }
108107             }
108108
108109
108110             function play() {
108111                 dispatch$1.call('done');
108112                 reveal('#id-container',
108113                     t('intro.lines.play', { next: t('intro.buildings.title') }), {
108114                         tooltipBox: '.intro-nav-wrap .chapter-building',
108115                         buttonText: t('intro.ok'),
108116                         buttonCallback: function() { reveal('#id-container'); }
108117                     }
108118                 );
108119            }
108120
108121
108122             chapter.enter = function() {
108123                 addLine();
108124             };
108125
108126
108127             chapter.exit = function() {
108128                 timeouts.forEach(window.clearTimeout);
108129                 d3_select(window).on('mousedown.intro', null, true);
108130                 context.on('enter.intro exit.intro', null);
108131                 context.map().on('move.intro drawn.intro', null);
108132                 context.history().on('change.intro', null);
108133                 d3_select('.inspector-wrap').on('wheel.intro', null);
108134                 d3_select('.preset-list-button').on('click.intro', null);
108135             };
108136
108137
108138             chapter.restart = function() {
108139                 chapter.exit();
108140                 chapter.enter();
108141             };
108142
108143
108144             return utilRebind(chapter, dispatch$1, 'on');
108145         }
108146
108147         function uiIntroBuilding(context, reveal) {
108148             var dispatch$1 = dispatch('done');
108149             var house = [-85.62815, 41.95638];
108150             var tank = [-85.62732, 41.95347];
108151             var buildingCatetory = context.presets().item('category-building');
108152             var housePreset = context.presets().item('building/house');
108153             var tankPreset = context.presets().item('man_made/storage_tank');
108154             var timeouts = [];
108155             var _houseID = null;
108156             var _tankID = null;
108157
108158
108159             var chapter = {
108160                 title: 'intro.buildings.title'
108161             };
108162
108163
108164             function timeout(f, t) {
108165                 timeouts.push(window.setTimeout(f, t));
108166             }
108167
108168
108169             function eventCancel() {
108170                 event.stopPropagation();
108171                 event.preventDefault();
108172             }
108173
108174
108175             function revealHouse(center, text, options) {
108176                 var padding = 160 * Math.pow(2, context.map().zoom() - 20);
108177                 var box = pad$2(center, padding, context);
108178                 reveal(box, text, options);
108179             }
108180
108181
108182             function revealTank(center, text, options) {
108183                 var padding = 190 * Math.pow(2, context.map().zoom() - 19.5);
108184                 var box = pad$2(center, padding, context);
108185                 reveal(box, text, options);
108186             }
108187
108188
108189             function revealEditMenu(loc, text, options) {
108190                 var rect = context.surfaceRect();
108191                 var point = context.curtainProjection(loc);
108192                 var pad = 40;
108193                 var width = 250 + (2 * pad);
108194                 var height = 350;
108195                 var startX = rect.left + point[0];
108196                 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
108197                 var box = {
108198                     left: left,
108199                     top: point[1] + rect.top - 60,
108200                     width: width,
108201                     height: height
108202                 };
108203                 reveal(box, text, options);
108204             }
108205
108206
108207             function addHouse() {
108208                 context.enter(modeBrowse(context));
108209                 context.history().reset('initial');
108210                 _houseID = null;
108211
108212                 var msec = transitionTime(house, context.map().center());
108213                 if (msec) { reveal(null, null, { duration: 0 }); }
108214                 context.map().centerZoomEase(house, 19, msec);
108215
108216                 timeout(function() {
108217                     var tooltip = reveal('button.add-area',
108218                         t('intro.buildings.add_building', { button: icon('#iD-icon-area', 'pre-text') }));
108219
108220                     tooltip.selectAll('.popover-inner')
108221                         .insert('svg', 'span')
108222                         .attr('class', 'tooltip-illustration')
108223                         .append('use')
108224                         .attr('xlink:href', '#iD-graphic-buildings');
108225
108226                     context.on('enter.intro', function(mode) {
108227                         if (mode.id !== 'add-area') { return; }
108228                         continueTo(startHouse);
108229                     });
108230                 }, msec + 100);
108231
108232                 function continueTo(nextStep) {
108233                     context.on('enter.intro', null);
108234                     nextStep();
108235                 }
108236             }
108237
108238
108239             function startHouse() {
108240                 if (context.mode().id !== 'add-area') {
108241                     return continueTo(addHouse);
108242                 }
108243
108244                 _houseID = null;
108245                 context.map().zoomEase(20, 500);
108246
108247                 timeout(function() {
108248                     revealHouse(house, t('intro.buildings.start_building'));
108249
108250                     context.map().on('move.intro drawn.intro', function() {
108251                         revealHouse(house, t('intro.buildings.start_building'), { duration: 0 });
108252                     });
108253
108254                     context.on('enter.intro', function(mode) {
108255                         if (mode.id !== 'draw-area') { return chapter.restart(); }
108256                         continueTo(continueHouse);
108257                     });
108258
108259                 }, 550);  // after easing
108260
108261                 function continueTo(nextStep) {
108262                     context.map().on('move.intro drawn.intro', null);
108263                     context.on('enter.intro', null);
108264                     nextStep();
108265                 }
108266             }
108267
108268
108269             function continueHouse() {
108270                 if (context.mode().id !== 'draw-area') {
108271                     return continueTo(addHouse);
108272                 }
108273
108274                 _houseID = null;
108275
108276                 revealHouse(house, t('intro.buildings.continue_building'));
108277
108278                 context.map().on('move.intro drawn.intro', function() {
108279                     revealHouse(house, t('intro.buildings.continue_building'), { duration: 0 });
108280                 });
108281
108282                 context.on('enter.intro', function(mode) {
108283                     if (mode.id === 'draw-area') {
108284                         return;
108285                     } else if (mode.id === 'select') {
108286                         var graph = context.graph();
108287                         var way = context.entity(context.selectedIDs()[0]);
108288                         var nodes = graph.childNodes(way);
108289                         var points = utilArrayUniq(nodes)
108290                             .map(function(n) { return context.projection(n.loc); });
108291
108292                         if (isMostlySquare(points)) {
108293                             _houseID = way.id;
108294                             return continueTo(chooseCategoryBuilding);
108295                         } else {
108296                             return continueTo(retryHouse);
108297                         }
108298
108299                     } else {
108300                         return chapter.restart();
108301                     }
108302                 });
108303
108304                 function continueTo(nextStep) {
108305                     context.map().on('move.intro drawn.intro', null);
108306                     context.on('enter.intro', null);
108307                     nextStep();
108308                 }
108309             }
108310
108311
108312             function retryHouse() {
108313                 var onClick = function() { continueTo(addHouse); };
108314
108315                 revealHouse(house, t('intro.buildings.retry_building'),
108316                     { buttonText: t('intro.ok'), buttonCallback: onClick }
108317                 );
108318
108319                 context.map().on('move.intro drawn.intro', function() {
108320                     revealHouse(house, t('intro.buildings.retry_building'),
108321                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
108322                     );
108323                 });
108324
108325                 function continueTo(nextStep) {
108326                     context.map().on('move.intro drawn.intro', null);
108327                     nextStep();
108328                 }
108329             }
108330
108331
108332             function chooseCategoryBuilding() {
108333                 if (!_houseID || !context.hasEntity(_houseID)) {
108334                     return addHouse();
108335                 }
108336                 var ids = context.selectedIDs();
108337                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
108338                     context.enter(modeSelect(context, [_houseID]));
108339                 }
108340
108341                 // disallow scrolling
108342                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
108343
108344                 timeout(function() {
108345                     // reset pane, in case user somehow happened to change it..
108346                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
108347
108348                     var button = d3_select('.preset-category-building .preset-list-button');
108349
108350                     reveal(button.node(),
108351                         t('intro.buildings.choose_category_building', { category: buildingCatetory.name() })
108352                     );
108353
108354                     button.on('click.intro', function() {
108355                         button.on('click.intro', null);
108356                         continueTo(choosePresetHouse);
108357                     });
108358
108359                 }, 400);  // after preset list pane visible..
108360
108361
108362                 context.on('enter.intro', function(mode) {
108363                     if (!_houseID || !context.hasEntity(_houseID)) {
108364                         return continueTo(addHouse);
108365                     }
108366                     var ids = context.selectedIDs();
108367                     if (mode.id !== 'select' || !ids.length || ids[0] !== _houseID) {
108368                         return continueTo(chooseCategoryBuilding);
108369                     }
108370                 });
108371
108372                 function continueTo(nextStep) {
108373                     d3_select('.inspector-wrap').on('wheel.intro', null);
108374                     d3_select('.preset-list-button').on('click.intro', null);
108375                     context.on('enter.intro', null);
108376                     nextStep();
108377                 }
108378             }
108379
108380
108381             function choosePresetHouse() {
108382                 if (!_houseID || !context.hasEntity(_houseID)) {
108383                     return addHouse();
108384                 }
108385                 var ids = context.selectedIDs();
108386                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
108387                     context.enter(modeSelect(context, [_houseID]));
108388                 }
108389
108390                 // disallow scrolling
108391                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
108392
108393                 timeout(function() {
108394                     // reset pane, in case user somehow happened to change it..
108395                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
108396
108397                     var button = d3_select('.preset-building-house .preset-list-button');
108398
108399                     reveal(button.node(),
108400                         t('intro.buildings.choose_preset_house', { preset: housePreset.name() }),
108401                         { duration: 300 }
108402                     );
108403
108404                     button.on('click.intro', function() {
108405                         button.on('click.intro', null);
108406                         continueTo(closeEditorHouse);
108407                     });
108408
108409                 }, 400);  // after preset list pane visible..
108410
108411                 context.on('enter.intro', function(mode) {
108412                     if (!_houseID || !context.hasEntity(_houseID)) {
108413                         return continueTo(addHouse);
108414                     }
108415                     var ids = context.selectedIDs();
108416                     if (mode.id !== 'select' || !ids.length || ids[0] !== _houseID) {
108417                         return continueTo(chooseCategoryBuilding);
108418                     }
108419                 });
108420
108421                 function continueTo(nextStep) {
108422                     d3_select('.inspector-wrap').on('wheel.intro', null);
108423                     d3_select('.preset-list-button').on('click.intro', null);
108424                     context.on('enter.intro', null);
108425                     nextStep();
108426                 }
108427             }
108428
108429
108430             function closeEditorHouse() {
108431                 if (!_houseID || !context.hasEntity(_houseID)) {
108432                     return addHouse();
108433                 }
108434                 var ids = context.selectedIDs();
108435                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
108436                     context.enter(modeSelect(context, [_houseID]));
108437                 }
108438
108439                 context.history().checkpoint('hasHouse');
108440
108441                 context.on('exit.intro', function() {
108442                     continueTo(rightClickHouse);
108443                 });
108444
108445                 timeout(function() {
108446                     reveal('.entity-editor-pane',
108447                         t('intro.buildings.close', { button: icon('#iD-icon-apply', 'pre-text') })
108448                     );
108449                 }, 500);
108450
108451                 function continueTo(nextStep) {
108452                     context.on('exit.intro', null);
108453                     nextStep();
108454                 }
108455             }
108456
108457
108458             function rightClickHouse() {
108459                 if (!_houseID) { return chapter.restart(); }
108460
108461                 context.enter(modeBrowse(context));
108462                 context.history().reset('hasHouse');
108463                 var zoom = context.map().zoom();
108464                 if (zoom < 20) {
108465                     zoom = 20;
108466                 }
108467                 context.map().centerZoomEase(house, zoom, 500);
108468
108469                 context.on('enter.intro', function(mode) {
108470                     if (mode.id !== 'select') { return; }
108471                     var ids = context.selectedIDs();
108472                     if (ids.length !== 1 || ids[0] !== _houseID) { return; }
108473
108474                     timeout(function() {
108475                         var node = selectMenuItem('orthogonalize').node();
108476                         if (!node) { return; }
108477                         continueTo(clickSquare);
108478                     }, 300);  // after menu visible
108479                 });
108480
108481                 context.map().on('move.intro drawn.intro', function() {
108482                     revealHouse(house, t('intro.buildings.rightclick_building'), { duration: 0 });
108483                 });
108484
108485                 context.history().on('change.intro', function() {
108486                     continueTo(rightClickHouse);
108487                 });
108488
108489                 function continueTo(nextStep) {
108490                     context.on('enter.intro', null);
108491                     context.map().on('move.intro drawn.intro', null);
108492                     context.history().on('change.intro', null);
108493                     nextStep();
108494                 }
108495             }
108496
108497
108498             function clickSquare() {
108499                 if (!_houseID) { return chapter.restart(); }
108500                 var entity = context.hasEntity(_houseID);
108501                 if (!entity) { return continueTo(rightClickHouse); }
108502
108503                 var node = selectMenuItem('orthogonalize').node();
108504                 if (!node) { return continueTo(rightClickHouse); }
108505
108506                 var wasChanged = false;
108507                 var menuCoords = context.map().mouseCoordinates();
108508
108509                 revealEditMenu(menuCoords,
108510                     t('intro.buildings.square_building', { button: icon('#iD-operation-orthogonalize', 'pre-text') })
108511                 );
108512
108513                 context.on('enter.intro', function(mode) {
108514                     if (mode.id === 'browse') {
108515                         continueTo(rightClickHouse);
108516                     } else if (mode.id === 'move' || mode.id === 'rotate') {
108517                         continueTo(retryClickSquare);
108518                     }
108519                 });
108520
108521                 context.map().on('move.intro drawn.intro', function() {
108522                     var node = selectMenuItem('orthogonalize').node();
108523                     if (!wasChanged && !node) { return continueTo(rightClickHouse); }
108524
108525                     revealEditMenu(menuCoords,
108526                         t('intro.buildings.square_building', { button: icon('#iD-operation-orthogonalize', 'pre-text') }),
108527                         { duration: 0 }
108528                     );
108529                 });
108530
108531                 context.history().on('change.intro', function() {
108532                     wasChanged = true;
108533                     context.history().on('change.intro', null);
108534
108535                     // Something changed.  Wait for transition to complete and check undo annotation.
108536                     timeout(function() {
108537                         if (context.history().undoAnnotation() === t('operations.orthogonalize.annotation.feature.single')) {
108538                             continueTo(doneSquare);
108539                         } else {
108540                             continueTo(retryClickSquare);
108541                         }
108542                     }, 500);  // after transitioned actions
108543                 });
108544
108545                 function continueTo(nextStep) {
108546                     context.on('enter.intro', null);
108547                     context.map().on('move.intro drawn.intro', null);
108548                     context.history().on('change.intro', null);
108549                     nextStep();
108550                 }
108551             }
108552
108553
108554             function retryClickSquare() {
108555                 context.enter(modeBrowse(context));
108556
108557                 revealHouse(house, t('intro.buildings.retry_square'), {
108558                     buttonText: t('intro.ok'),
108559                     buttonCallback: function() { continueTo(rightClickHouse); }
108560                 });
108561
108562                 function continueTo(nextStep) {
108563                     nextStep();
108564                 }
108565             }
108566
108567
108568             function doneSquare() {
108569                 context.history().checkpoint('doneSquare');
108570
108571                 revealHouse(house, t('intro.buildings.done_square'), {
108572                     buttonText: t('intro.ok'),
108573                     buttonCallback: function() { continueTo(addTank); }
108574                 });
108575
108576                 function continueTo(nextStep) {
108577                     nextStep();
108578                 }
108579             }
108580
108581
108582             function addTank() {
108583                 context.enter(modeBrowse(context));
108584                 context.history().reset('doneSquare');
108585                 _tankID = null;
108586
108587                 var msec = transitionTime(tank, context.map().center());
108588                 if (msec) { reveal(null, null, { duration: 0 }); }
108589                 context.map().centerZoomEase(tank, 19.5, msec);
108590
108591                 timeout(function() {
108592                     reveal('button.add-area',
108593                         t('intro.buildings.add_tank', { button: icon('#iD-icon-area', 'pre-text') })
108594                     );
108595
108596                     context.on('enter.intro', function(mode) {
108597                         if (mode.id !== 'add-area') { return; }
108598                         continueTo(startTank);
108599                     });
108600                 }, msec + 100);
108601
108602                 function continueTo(nextStep) {
108603                     context.on('enter.intro', null);
108604                     nextStep();
108605                 }
108606             }
108607
108608
108609             function startTank() {
108610                 if (context.mode().id !== 'add-area') {
108611                     return continueTo(addTank);
108612                 }
108613
108614                 _tankID = null;
108615
108616                 timeout(function() {
108617                     revealTank(tank, t('intro.buildings.start_tank'));
108618
108619                     context.map().on('move.intro drawn.intro', function() {
108620                         revealTank(tank, t('intro.buildings.start_tank'), { duration: 0 });
108621                     });
108622
108623                     context.on('enter.intro', function(mode) {
108624                         if (mode.id !== 'draw-area') { return chapter.restart(); }
108625                         continueTo(continueTank);
108626                     });
108627
108628                 }, 550);  // after easing
108629
108630                 function continueTo(nextStep) {
108631                     context.map().on('move.intro drawn.intro', null);
108632                     context.on('enter.intro', null);
108633                     nextStep();
108634                 }
108635             }
108636
108637
108638             function continueTank() {
108639                 if (context.mode().id !== 'draw-area') {
108640                     return continueTo(addTank);
108641                 }
108642
108643                 _tankID = null;
108644
108645                 revealTank(tank, t('intro.buildings.continue_tank'));
108646
108647                 context.map().on('move.intro drawn.intro', function() {
108648                     revealTank(tank, t('intro.buildings.continue_tank'), { duration: 0 });
108649                 });
108650
108651                 context.on('enter.intro', function(mode) {
108652                     if (mode.id === 'draw-area') {
108653                         return;
108654                     } else if (mode.id === 'select') {
108655                         _tankID = context.selectedIDs()[0];
108656                         return continueTo(searchPresetTank);
108657                     } else {
108658                         return continueTo(addTank);
108659                     }
108660                 });
108661
108662                 function continueTo(nextStep) {
108663                     context.map().on('move.intro drawn.intro', null);
108664                     context.on('enter.intro', null);
108665                     nextStep();
108666                 }
108667             }
108668
108669
108670             function searchPresetTank() {
108671                 if (!_tankID || !context.hasEntity(_tankID)) {
108672                     return addTank();
108673                 }
108674                 var ids = context.selectedIDs();
108675                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _tankID) {
108676                     context.enter(modeSelect(context, [_tankID]));
108677                 }
108678
108679                 // disallow scrolling
108680                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
108681
108682                 timeout(function() {
108683                     // reset pane, in case user somehow happened to change it..
108684                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
108685
108686                     d3_select('.preset-search-input')
108687                         .on('keydown.intro', null)
108688                         .on('keyup.intro', checkPresetSearch);
108689
108690                     reveal('.preset-search-input',
108691                         t('intro.buildings.search_tank', { preset: tankPreset.name() })
108692                     );
108693                 }, 400);  // after preset list pane visible..
108694
108695                 context.on('enter.intro', function(mode) {
108696                     if (!_tankID || !context.hasEntity(_tankID)) {
108697                         return continueTo(addTank);
108698                     }
108699
108700                     var ids = context.selectedIDs();
108701                     if (mode.id !== 'select' || !ids.length || ids[0] !== _tankID) {
108702                         // keep the user's area selected..
108703                         context.enter(modeSelect(context, [_tankID]));
108704
108705                         // reset pane, in case user somehow happened to change it..
108706                         d3_select('.inspector-wrap .panewrap').style('right', '-100%');
108707                         // disallow scrolling
108708                         d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
108709
108710                         d3_select('.preset-search-input')
108711                             .on('keydown.intro', null)
108712                             .on('keyup.intro', checkPresetSearch);
108713
108714                         reveal('.preset-search-input',
108715                             t('intro.buildings.search_tank', { preset: tankPreset.name() })
108716                         );
108717
108718                         context.history().on('change.intro', null);
108719                     }
108720                 });
108721
108722                 function checkPresetSearch() {
108723                     var first = d3_select('.preset-list-item:first-child');
108724
108725                     if (first.classed('preset-man_made-storage_tank')) {
108726                         reveal(first.select('.preset-list-button').node(),
108727                             t('intro.buildings.choose_tank', { preset: tankPreset.name() }),
108728                             { duration: 300 }
108729                         );
108730
108731                         d3_select('.preset-search-input')
108732                             .on('keydown.intro', eventCancel, true)
108733                             .on('keyup.intro', null);
108734
108735                         context.history().on('change.intro', function() {
108736                             continueTo(closeEditorTank);
108737                         });
108738                     }
108739                 }
108740
108741                 function continueTo(nextStep) {
108742                     d3_select('.inspector-wrap').on('wheel.intro', null);
108743                     context.on('enter.intro', null);
108744                     context.history().on('change.intro', null);
108745                     d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
108746                     nextStep();
108747                 }
108748             }
108749
108750
108751             function closeEditorTank() {
108752                 if (!_tankID || !context.hasEntity(_tankID)) {
108753                     return addTank();
108754                 }
108755                 var ids = context.selectedIDs();
108756                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _tankID) {
108757                     context.enter(modeSelect(context, [_tankID]));
108758                 }
108759
108760                 context.history().checkpoint('hasTank');
108761
108762                 context.on('exit.intro', function() {
108763                     continueTo(rightClickTank);
108764                 });
108765
108766                 timeout(function() {
108767                     reveal('.entity-editor-pane',
108768                         t('intro.buildings.close', { button: icon('#iD-icon-apply', 'pre-text') })
108769                     );
108770                 }, 500);
108771
108772                 function continueTo(nextStep) {
108773                     context.on('exit.intro', null);
108774                     nextStep();
108775                 }
108776             }
108777
108778
108779             function rightClickTank() {
108780                 if (!_tankID) { return continueTo(addTank); }
108781
108782                 context.enter(modeBrowse(context));
108783                 context.history().reset('hasTank');
108784                 context.map().centerEase(tank, 500);
108785
108786                 timeout(function() {
108787                     context.on('enter.intro', function(mode) {
108788                         if (mode.id !== 'select') { return; }
108789                         var ids = context.selectedIDs();
108790                         if (ids.length !== 1 || ids[0] !== _tankID) { return; }
108791
108792                         timeout(function() {
108793                             var node = selectMenuItem('circularize').node();
108794                             if (!node) { return; }
108795                             continueTo(clickCircle);
108796                         }, 300);  // after menu visible
108797                     });
108798
108799                     revealTank(tank, t('intro.buildings.rightclick_tank'));
108800
108801                     context.map().on('move.intro drawn.intro', function() {
108802                         revealTank(tank, t('intro.buildings.rightclick_tank'), { duration: 0 });
108803                     });
108804
108805                     context.history().on('change.intro', function() {
108806                         continueTo(rightClickTank);
108807                     });
108808
108809                 }, 600);
108810
108811                 function continueTo(nextStep) {
108812                     context.on('enter.intro', null);
108813                     context.map().on('move.intro drawn.intro', null);
108814                     context.history().on('change.intro', null);
108815                     nextStep();
108816                 }
108817             }
108818
108819
108820             function clickCircle() {
108821                 if (!_tankID) { return chapter.restart(); }
108822                 var entity = context.hasEntity(_tankID);
108823                 if (!entity) { return continueTo(rightClickTank); }
108824
108825                 var node = selectMenuItem('circularize').node();
108826                 if (!node) { return continueTo(rightClickTank); }
108827
108828                 var wasChanged = false;
108829                 var menuCoords = context.map().mouseCoordinates();
108830
108831                 revealEditMenu(menuCoords,
108832                     t('intro.buildings.circle_tank', { button: icon('#iD-operation-circularize', 'pre-text') })
108833                 );
108834
108835                 context.on('enter.intro', function(mode) {
108836                     if (mode.id === 'browse') {
108837                         continueTo(rightClickTank);
108838                     } else if (mode.id === 'move' || mode.id === 'rotate') {
108839                         continueTo(retryClickCircle);
108840                     }
108841                 });
108842
108843                 context.map().on('move.intro drawn.intro', function() {
108844                     var node = selectMenuItem('circularize').node();
108845                     if (!wasChanged && !node) { return continueTo(rightClickTank); }
108846
108847                     revealEditMenu(menuCoords,
108848                         t('intro.buildings.circle_tank', { button: icon('#iD-operation-circularize', 'pre-text') }),
108849                         { duration: 0 }
108850                     );
108851                 });
108852
108853                 context.history().on('change.intro', function() {
108854                     wasChanged = true;
108855                     context.history().on('change.intro', null);
108856
108857                     // Something changed.  Wait for transition to complete and check undo annotation.
108858                     timeout(function() {
108859                         if (context.history().undoAnnotation() === t('operations.circularize.annotation.area')) {
108860                             continueTo(play);
108861                         } else {
108862                             continueTo(retryClickCircle);
108863                         }
108864                     }, 500);  // after transitioned actions
108865                 });
108866
108867                 function continueTo(nextStep) {
108868                     context.on('enter.intro', null);
108869                     context.map().on('move.intro drawn.intro', null);
108870                     context.history().on('change.intro', null);
108871                     nextStep();
108872                 }
108873             }
108874
108875
108876             function retryClickCircle() {
108877                 context.enter(modeBrowse(context));
108878
108879                 revealTank(tank, t('intro.buildings.retry_circle'), {
108880                     buttonText: t('intro.ok'),
108881                     buttonCallback: function() { continueTo(rightClickTank); }
108882                 });
108883
108884                 function continueTo(nextStep) {
108885                     nextStep();
108886                 }
108887             }
108888
108889
108890             function play() {
108891                 dispatch$1.call('done');
108892                 reveal('#id-container',
108893                     t('intro.buildings.play', { next: t('intro.startediting.title') }), {
108894                         tooltipBox: '.intro-nav-wrap .chapter-startEditing',
108895                         buttonText: t('intro.ok'),
108896                         buttonCallback: function() { reveal('#id-container'); }
108897                     }
108898                 );
108899             }
108900
108901
108902             chapter.enter = function() {
108903                 addHouse();
108904             };
108905
108906
108907             chapter.exit = function() {
108908                 timeouts.forEach(window.clearTimeout);
108909                 context.on('enter.intro exit.intro', null);
108910                 context.map().on('move.intro drawn.intro', null);
108911                 context.history().on('change.intro', null);
108912                 d3_select('.inspector-wrap').on('wheel.intro', null);
108913                 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
108914                 d3_select('.more-fields .combobox-input').on('click.intro', null);
108915             };
108916
108917
108918             chapter.restart = function() {
108919                 chapter.exit();
108920                 chapter.enter();
108921             };
108922
108923
108924             return utilRebind(chapter, dispatch$1, 'on');
108925         }
108926
108927         function uiIntroStartEditing(context, reveal) {
108928             var dispatch$1 = dispatch('done', 'startEditing');
108929             var modalSelection = d3_select(null);
108930
108931
108932             var chapter = {
108933                 title: 'intro.startediting.title'
108934             };
108935
108936             function showHelp() {
108937                 reveal('.map-control.help-control',
108938                     t('intro.startediting.help', { button: icon('#iD-icon-help', 'pre-text'), key: t('help.key') }), {
108939                         buttonText: t('intro.ok'),
108940                         buttonCallback: function() { shortcuts(); }
108941                     }
108942                 );
108943             }
108944
108945             function shortcuts() {
108946                 reveal('.map-control.help-control',
108947                     t('intro.startediting.shortcuts', { key: t('shortcuts.toggle.key') }), {
108948                         buttonText: t('intro.ok'),
108949                         buttonCallback: function() { showSave(); }
108950                     }
108951                 );
108952             }
108953
108954             function showSave() {
108955                 d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
108956                 reveal('#bar button.save',
108957                     t('intro.startediting.save'), {
108958                         buttonText: t('intro.ok'),
108959                         buttonCallback: function() { showStart(); }
108960                     }
108961                 );
108962             }
108963
108964             function showStart() {
108965                 d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
108966
108967                 modalSelection = uiModal(context.container());
108968
108969                 modalSelection.select('.modal')
108970                     .attr('class', 'modal-splash modal col6');
108971
108972                 modalSelection.selectAll('.close').remove();
108973
108974                 var startbutton = modalSelection.select('.content')
108975                     .attr('class', 'fillL')
108976                     .append('button')
108977                         .attr('class', 'modal-section huge-modal-button')
108978                         .on('click', function() {
108979                             modalSelection.remove();
108980                         });
108981
108982                     startbutton
108983                         .append('svg')
108984                         .attr('class', 'illustration')
108985                         .append('use')
108986                         .attr('xlink:href', '#iD-logo-walkthrough');
108987
108988                     startbutton
108989                         .append('h2')
108990                         .text(t('intro.startediting.start'));
108991
108992                 dispatch$1.call('startEditing');
108993             }
108994
108995
108996             chapter.enter = function() {
108997                 showHelp();
108998             };
108999
109000
109001             chapter.exit = function() {
109002                 modalSelection.remove();
109003                 d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
109004             };
109005
109006
109007             return utilRebind(chapter, dispatch$1, 'on');
109008         }
109009
109010         var chapterUi = {
109011             welcome: uiIntroWelcome,
109012             navigation: uiIntroNavigation,
109013             point: uiIntroPoint,
109014             area: uiIntroArea,
109015             line: uiIntroLine,
109016             building: uiIntroBuilding,
109017             startEditing: uiIntroStartEditing
109018         };
109019
109020         var chapterFlow = [
109021             'welcome',
109022             'navigation',
109023             'point',
109024             'area',
109025             'line',
109026             'building',
109027             'startEditing'
109028         ];
109029
109030
109031         function uiIntro(context) {
109032             var INTRO_IMAGERY = 'EsriWorldImageryClarity';
109033             var introGraph = {};
109034             var _currChapter;
109035
109036             // create entities for intro graph and localize names
109037             for (var id in dataIntroGraph) {
109038                 introGraph[id] = osmEntity(localize(dataIntroGraph[id]));
109039             }
109040
109041
109042             function intro(selection) {
109043                 context.enter(modeBrowse(context));
109044
109045                 // Save current map state
109046                 var osm = context.connection();
109047                 var history = context.history().toJSON();
109048                 var hash = window.location.hash;
109049                 var center = context.map().center();
109050                 var zoom = context.map().zoom();
109051                 var background = context.background().baseLayerSource();
109052                 var overlays = context.background().overlayLayerSources();
109053                 var opacity = d3_selectAll('#map .layer-background').style('opacity');
109054                 var caches = osm && osm.caches();
109055                 var baseEntities = context.history().graph().base().entities;
109056
109057                 // Show sidebar and disable the sidebar resizing button
109058                 // (this needs to be before `context.inIntro(true)`)
109059                 context.ui().sidebar.expand();
109060                 d3_selectAll('button.sidebar-toggle').classed('disabled', true);
109061
109062                 // Block saving
109063                 context.inIntro(true);
109064
109065                 // Load semi-real data used in intro
109066                 if (osm) { osm.toggle(false).reset(); }
109067                 context.history().reset();
109068                 context.history().merge(Object.values(coreGraph().load(introGraph).entities));
109069                 context.history().checkpoint('initial');
109070
109071                 // Setup imagery
109072                 var imagery = context.background().findSource(INTRO_IMAGERY);
109073                 if (imagery) {
109074                     context.background().baseLayerSource(imagery);
109075                 } else {
109076                     context.background().bing();
109077                 }
109078                 overlays.forEach(function(d) {
109079                     context.background().toggleOverlayLayer(d);
109080                 });
109081
109082                 // Setup data layers (only OSM)
109083                 var layers = context.layers();
109084                 layers.all().forEach(function(item) {
109085                     // if the layer has the function `enabled`
109086                     if (typeof item.layer.enabled === 'function') {
109087                         item.layer.enabled(item.id === 'osm');
109088                     }
109089                 });
109090
109091
109092                 d3_selectAll('#map .layer-background').style('opacity', 1);
109093
109094                 var curtain = uiCurtain();
109095                 selection.call(curtain);
109096
109097                 // Store that the user started the walkthrough..
109098                 context.storage('walkthrough_started', 'yes');
109099
109100                 // Restore previous walkthrough progress..
109101                 var storedProgress = context.storage('walkthrough_progress') || '';
109102                 var progress = storedProgress.split(';').filter(Boolean);
109103
109104                 var chapters = chapterFlow.map(function(chapter, i) {
109105                     var s = chapterUi[chapter](context, curtain.reveal)
109106                         .on('done', function() {
109107                             context.presets().init();  // clear away "recent" presets
109108
109109                             buttons.filter(function(d) {
109110                                 return d.title === s.title;
109111                             }).classed('finished', true);
109112
109113                             if (i < chapterFlow.length - 1) {
109114                                 var next = chapterFlow[i + 1];
109115                                 d3_select('button.chapter-' + next)
109116                                     .classed('next', true);
109117                             }
109118
109119                             // Store walkthrough progress..
109120                             progress.push(chapter);
109121                             context.storage('walkthrough_progress', utilArrayUniq(progress).join(';'));
109122                         });
109123                     return s;
109124                 });
109125
109126                 chapters[chapters.length - 1].on('startEditing', function() {
109127                     // Store walkthrough progress..
109128                     progress.push('startEditing');
109129                     context.storage('walkthrough_progress', utilArrayUniq(progress).join(';'));
109130
109131                     // Store if walkthrough is completed..
109132                     var incomplete = utilArrayDifference(chapterFlow, progress);
109133                     if (!incomplete.length) {
109134                         context.storage('walkthrough_completed', 'yes');
109135                     }
109136
109137                     curtain.remove();
109138                     navwrap.remove();
109139                     d3_selectAll('#map .layer-background').style('opacity', opacity);
109140                     d3_selectAll('button.sidebar-toggle').classed('disabled', false);
109141                     if (osm) { osm.toggle(true).reset().caches(caches); }
109142                     context.history().reset().merge(Object.values(baseEntities));
109143                     context.background().baseLayerSource(background);
109144                     overlays.forEach(function(d) { context.background().toggleOverlayLayer(d); });
109145                     if (history) { context.history().fromJSON(history, false); }
109146                     context.map().centerZoom(center, zoom);
109147                     window.location.replace(hash);
109148                     context.inIntro(false);
109149                 });
109150
109151                 var navwrap = selection
109152                     .append('div')
109153                     .attr('class', 'intro-nav-wrap fillD');
109154
109155                 navwrap
109156                     .append('svg')
109157                     .attr('class', 'intro-nav-wrap-logo')
109158                     .append('use')
109159                     .attr('xlink:href', '#iD-logo-walkthrough');
109160
109161                 var buttonwrap = navwrap
109162                     .append('div')
109163                     .attr('class', 'joined')
109164                     .selectAll('button.chapter');
109165
109166                 var buttons = buttonwrap
109167                     .data(chapters)
109168                     .enter()
109169                     .append('button')
109170                     .attr('class', function(d, i) { return 'chapter chapter-' + chapterFlow[i]; })
109171                     .on('click', enterChapter);
109172
109173                 buttons
109174                     .append('span')
109175                     .text(function(d) { return t(d.title); });
109176
109177                 buttons
109178                     .append('span')
109179                     .attr('class', 'status')
109180                     .call(svgIcon((textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'));
109181
109182                 enterChapter(chapters[0]);
109183
109184
109185                 function enterChapter(newChapter) {
109186                     if (_currChapter) { _currChapter.exit(); }
109187                     context.enter(modeBrowse(context));
109188
109189                     _currChapter = newChapter;
109190                     _currChapter.enter();
109191
109192                     buttons
109193                         .classed('next', false)
109194                         .classed('active', function(d) {
109195                             return d.title === _currChapter.title;
109196                         });
109197                 }
109198             }
109199
109200
109201             return intro;
109202         }
109203
109204         function uiShortcuts(context) {
109205             var detected = utilDetect();
109206             var _activeTab = 0;
109207             var _modalSelection;
109208             var _selection = d3_select(null);
109209
109210
109211             context.keybinding()
109212                 .on([t('shortcuts.toggle.key'), '?'], function () {
109213                     if (d3_selectAll('.modal-shortcuts').size()) {  // already showing
109214                         if (_modalSelection) {
109215                             _modalSelection.close();
109216                             _modalSelection = null;
109217                         }
109218                     } else {
109219                         _modalSelection = uiModal(_selection);
109220                         shortcutsModal(_modalSelection);
109221                     }
109222                 });
109223
109224
109225             function shortcutsModal(_modalSelection) {
109226                 _modalSelection.select('.modal')
109227                     .classed('modal-shortcuts', true);
109228
109229                 var shortcutsModal = _modalSelection.select('.content');
109230
109231                 shortcutsModal
109232                     .append('div')
109233                     .attr('class', 'modal-section')
109234                     .append('h3')
109235                     .text(t('shortcuts.title'));
109236
109237                 shortcutsModal
109238                     .call(render);
109239             }
109240
109241
109242             function render(selection) {
109243                 var wrapper = selection
109244                     .selectAll('.wrapper')
109245                     .data([0]);
109246
109247                 var wrapperEnter = wrapper
109248                     .enter()
109249                     .append('div')
109250                     .attr('class', 'wrapper modal-section');
109251
109252                 var tabsBar = wrapperEnter
109253                     .append('div')
109254                     .attr('class', 'tabs-bar');
109255
109256                 var shortcutsList = wrapperEnter
109257                     .append('div')
109258                     .attr('class', 'shortcuts-list');
109259
109260                 wrapper = wrapper.merge(wrapperEnter);
109261
109262                 var tabs = tabsBar
109263                     .selectAll('.tab')
109264                     .data(dataShortcuts);
109265
109266                 var tabsEnter = tabs
109267                     .enter()
109268                     .append('div')
109269                     .attr('class', 'tab')
109270                     .on('click', function (d, i) {
109271                         _activeTab = i;
109272                         render(selection);
109273                     });
109274
109275                 tabsEnter
109276                     .append('span')
109277                     .text(function (d) { return t(d.text); });
109278
109279                 tabs = tabs
109280                     .merge(tabsEnter);
109281
109282                 // Update
109283                 wrapper.selectAll('.tab')
109284                     .classed('active', function (d, i) {
109285                         return i === _activeTab;
109286                     });
109287
109288
109289                 var shortcuts = shortcutsList
109290                     .selectAll('.shortcut-tab')
109291                     .data(dataShortcuts);
109292
109293                 var shortcutsEnter = shortcuts
109294                     .enter()
109295                     .append('div')
109296                     .attr('class', function(d) { return 'shortcut-tab shortcut-tab-' + d.tab; });
109297
109298                 var columnsEnter = shortcutsEnter
109299                     .selectAll('.shortcut-column')
109300                     .data(function (d) { return d.columns; })
109301                     .enter()
109302                     .append('table')
109303                     .attr('class', 'shortcut-column');
109304
109305                 var rowsEnter = columnsEnter
109306                     .selectAll('.shortcut-row')
109307                     .data(function (d) { return d.rows; })
109308                     .enter()
109309                     .append('tr')
109310                     .attr('class', 'shortcut-row');
109311
109312
109313                 var sectionRows = rowsEnter
109314                     .filter(function (d) { return !d.shortcuts; });
109315
109316                 sectionRows
109317                     .append('td');
109318
109319                 sectionRows
109320                     .append('td')
109321                     .attr('class', 'shortcut-section')
109322                     .append('h3')
109323                     .text(function (d) { return t(d.text); });
109324
109325
109326                 var shortcutRows = rowsEnter
109327                     .filter(function (d) { return d.shortcuts; });
109328
109329                 var shortcutKeys = shortcutRows
109330                     .append('td')
109331                     .attr('class', 'shortcut-keys');
109332
109333                 var modifierKeys = shortcutKeys
109334                     .filter(function (d) { return d.modifiers; });
109335
109336                 modifierKeys
109337                     .selectAll('kbd.modifier')
109338                     .data(function (d) {
109339                         if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') {
109340                             return ['⌘'];
109341                         } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') {
109342                             return [];
109343                         } else {
109344                             return d.modifiers;
109345                         }
109346                     })
109347                     .enter()
109348                     .each(function () {
109349                         var selection = d3_select(this);
109350
109351                         selection
109352                             .append('kbd')
109353                             .attr('class', 'modifier')
109354                             .text(function (d) { return uiCmd.display(d); });
109355
109356                         selection
109357                             .append('span')
109358                             .text('+');
109359                     });
109360
109361
109362                 shortcutKeys
109363                     .selectAll('kbd.shortcut')
109364                     .data(function (d) {
109365                         var arr = d.shortcuts;
109366                         if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') {
109367                             arr = ['Y'];
109368                         } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') {
109369                             arr = ['F11'];
109370                         }
109371
109372                         // replace translations
109373                         arr = arr.map(function(s) {
109374                             return uiCmd.display(s.indexOf('.') !== -1 ? t(s) : s);
109375                         });
109376
109377                         return utilArrayUniq(arr).map(function(s) {
109378                             return {
109379                                 shortcut: s,
109380                                 separator: d.separator,
109381                                 suffix: d.suffix
109382                             };
109383                         });
109384                     })
109385                     .enter()
109386                     .each(function (d, i, nodes) {
109387                         var selection = d3_select(this);
109388                         var click = d.shortcut.toLowerCase().match(/(.*).click/);
109389
109390                         if (click && click[1]) {   // replace "left_click", "right_click" with mouse icon
109391                             selection
109392                                 .call(svgIcon('#iD-walkthrough-mouse', 'mouseclick', click[1]));
109393                         } else {
109394                             selection
109395                                 .append('kbd')
109396                                 .attr('class', 'shortcut')
109397                                 .text(function (d) { return d.shortcut; });
109398                         }
109399
109400                         if (i < nodes.length - 1) {
109401                             selection
109402                                 .append('span')
109403                                 .text(d.separator || '\u00a0' + t('shortcuts.or') + '\u00a0');
109404                         } else if (i === nodes.length - 1 && d.suffix) {
109405                             selection
109406                                 .append('span')
109407                                 .text(d.suffix);
109408                         }
109409                     });
109410
109411
109412                 shortcutKeys
109413                     .filter(function(d) { return d.gesture; })
109414                     .each(function () {
109415                         var selection = d3_select(this);
109416
109417                         selection
109418                             .append('span')
109419                             .text('+');
109420
109421                         selection
109422                             .append('span')
109423                             .attr('class', 'gesture')
109424                             .text(function (d) { return t(d.gesture); });
109425                     });
109426
109427
109428                 shortcutRows
109429                     .append('td')
109430                     .attr('class', 'shortcut-desc')
109431                     .text(function (d) { return d.text ? t(d.text) : '\u00a0'; });
109432
109433
109434                 shortcuts = shortcuts
109435                     .merge(shortcutsEnter);
109436
109437                 // Update
109438                 wrapper.selectAll('.shortcut-tab')
109439                     .style('display', function (d, i) {
109440                         return i === _activeTab ? 'flex' : 'none';
109441                     });
109442             }
109443
109444
109445             return function(selection, show) {
109446                 _selection = selection;
109447                 if (show) {
109448                     _modalSelection = uiModal(selection);
109449                     shortcutsModal(_modalSelection);
109450                 }
109451             };
109452         }
109453
109454         function uiHelp(context) {
109455             var key = t('help.key');
109456
109457             var _pane = d3_select(null);
109458
109459             var docKeys = [
109460                 ['help', [
109461                     'welcome',
109462                     'open_data_h',
109463                     'open_data',
109464                     'before_start_h',
109465                     'before_start',
109466                     'open_source_h',
109467                     'open_source',
109468                     'open_source_help'
109469                 ]],
109470                 ['overview', [
109471                     'navigation_h',
109472                     'navigation_drag',
109473                     'navigation_zoom',
109474                     'features_h',
109475                     'features',
109476                     'nodes_ways'
109477                 ]],
109478                 ['editing', [
109479                     'select_h',
109480                     'select_left_click',
109481                     'select_right_click',
109482                     'multiselect_h',
109483                     'multiselect_shift_click',
109484                     'multiselect_lasso',
109485                     'undo_redo_h',
109486                     'undo_redo',
109487                     'save_h',
109488                     'save',
109489                     'save_validation',
109490                     'upload_h',
109491                     'upload',
109492                     'backups_h',
109493                     'backups',
109494                     'keyboard_h',
109495                     'keyboard'
109496                 ]],
109497                 ['feature_editor', [
109498                     'intro',
109499                     'definitions',
109500                     'type_h',
109501                     'type',
109502                     'type_picker',
109503                     'fields_h',
109504                     'fields_all_fields',
109505                     'fields_example',
109506                     'fields_add_field',
109507                     'tags_h',
109508                     'tags_all_tags',
109509                     'tags_resources'
109510                 ]],
109511                 ['points', [
109512                     'intro',
109513                     'add_point_h',
109514                     'add_point',
109515                     'add_point_finish',
109516                     'move_point_h',
109517                     'move_point',
109518                     'delete_point_h',
109519                     'delete_point',
109520                     'delete_point_command'
109521                 ]],
109522                 ['lines', [
109523                     'intro',
109524                     'add_line_h',
109525                     'add_line',
109526                     'add_line_draw',
109527                     'add_line_finish',
109528                     'modify_line_h',
109529                     'modify_line_dragnode',
109530                     'modify_line_addnode',
109531                     'connect_line_h',
109532                     'connect_line',
109533                     'connect_line_display',
109534                     'connect_line_drag',
109535                     'connect_line_tag',
109536                     'disconnect_line_h',
109537                     'disconnect_line_command',
109538                     'move_line_h',
109539                     'move_line_command',
109540                     'move_line_connected',
109541                     'delete_line_h',
109542                     'delete_line',
109543                     'delete_line_command'
109544                 ]],
109545                 ['areas', [
109546                     'intro',
109547                     'point_or_area_h',
109548                     'point_or_area',
109549                     'add_area_h',
109550                     'add_area_command',
109551                     'add_area_draw',
109552                     'add_area_finish',
109553                     'square_area_h',
109554                     'square_area_command',
109555                     'modify_area_h',
109556                     'modify_area_dragnode',
109557                     'modify_area_addnode',
109558                     'delete_area_h',
109559                     'delete_area',
109560                     'delete_area_command'
109561                 ]],
109562                 ['relations', [
109563                     'intro',
109564                     'edit_relation_h',
109565                     'edit_relation',
109566                     'edit_relation_add',
109567                     'edit_relation_delete',
109568                     'maintain_relation_h',
109569                     'maintain_relation',
109570                     'relation_types_h',
109571                     'multipolygon_h',
109572                     'multipolygon',
109573                     'multipolygon_create',
109574                     'multipolygon_merge',
109575                     'turn_restriction_h',
109576                     'turn_restriction',
109577                     'turn_restriction_field',
109578                     'turn_restriction_editing',
109579                     'route_h',
109580                     'route',
109581                     'route_add',
109582                     'boundary_h',
109583                     'boundary',
109584                     'boundary_add'
109585                 ]],
109586                 ['notes', [
109587                     'intro',
109588                     'add_note_h',
109589                     'add_note',
109590                     'move_note',
109591                     'update_note_h',
109592                     'update_note',
109593                     'save_note_h',
109594                     'save_note'
109595                 ]],
109596
109597                 ['imagery', [
109598                     'intro',
109599                     'sources_h',
109600                     'choosing',
109601                     'sources',
109602                     'offsets_h',
109603                     'offset',
109604                     'offset_change'
109605                 ]],
109606                 ['streetlevel', [
109607                     'intro',
109608                     'using_h',
109609                     'using',
109610                     'photos',
109611                     'viewer'
109612                 ]],
109613                 ['gps', [
109614                     'intro',
109615                     'survey',
109616                     'using_h',
109617                     'using',
109618                     'tracing',
109619                     'upload'
109620                 ]],
109621                 ['qa', [
109622                     'intro',
109623                     'tools_h',
109624                     'tools',
109625                     'issues_h',
109626                     'issues'
109627                 ]]
109628             ];
109629
109630             var headings = {
109631                 'help.help.open_data_h': 3,
109632                 'help.help.before_start_h': 3,
109633                 'help.help.open_source_h': 3,
109634                 'help.overview.navigation_h': 3,
109635                 'help.overview.features_h': 3,
109636                 'help.editing.select_h': 3,
109637                 'help.editing.multiselect_h': 3,
109638                 'help.editing.undo_redo_h': 3,
109639                 'help.editing.save_h': 3,
109640                 'help.editing.upload_h': 3,
109641                 'help.editing.backups_h': 3,
109642                 'help.editing.keyboard_h': 3,
109643                 'help.feature_editor.type_h': 3,
109644                 'help.feature_editor.fields_h': 3,
109645                 'help.feature_editor.tags_h': 3,
109646                 'help.points.add_point_h': 3,
109647                 'help.points.move_point_h': 3,
109648                 'help.points.delete_point_h': 3,
109649                 'help.lines.add_line_h': 3,
109650                 'help.lines.modify_line_h': 3,
109651                 'help.lines.connect_line_h': 3,
109652                 'help.lines.disconnect_line_h': 3,
109653                 'help.lines.move_line_h': 3,
109654                 'help.lines.delete_line_h': 3,
109655                 'help.areas.point_or_area_h': 3,
109656                 'help.areas.add_area_h': 3,
109657                 'help.areas.square_area_h': 3,
109658                 'help.areas.modify_area_h': 3,
109659                 'help.areas.delete_area_h': 3,
109660                 'help.relations.edit_relation_h': 3,
109661                 'help.relations.maintain_relation_h': 3,
109662                 'help.relations.relation_types_h': 2,
109663                 'help.relations.multipolygon_h': 3,
109664                 'help.relations.turn_restriction_h': 3,
109665                 'help.relations.route_h': 3,
109666                 'help.relations.boundary_h': 3,
109667                 'help.notes.add_note_h': 3,
109668                 'help.notes.update_note_h': 3,
109669                 'help.notes.save_note_h': 3,
109670                 'help.imagery.sources_h': 3,
109671                 'help.imagery.offsets_h': 3,
109672                 'help.streetlevel.using_h': 3,
109673                 'help.gps.using_h': 3,
109674                 'help.qa.tools_h': 3,
109675                 'help.qa.issues_h': 3
109676             };
109677
109678             var replacements = {
109679                 point: icon('#iD-icon-point', 'pre-text'),
109680                 line: icon('#iD-icon-line', 'pre-text'),
109681                 area: icon('#iD-icon-area', 'pre-text'),
109682                 note: icon('#iD-icon-note', 'pre-text add-note'),
109683                 plus: icon('#iD-icon-plus', 'pre-text'),
109684                 minus: icon('#iD-icon-minus', 'pre-text'),
109685                 orthogonalize: icon('#iD-operation-orthogonalize', 'pre-text'),
109686                 disconnect: icon('#iD-operation-disconnect', 'pre-text'),
109687                 layers: icon('#iD-icon-layers', 'pre-text'),
109688                 data: icon('#iD-icon-data', 'pre-text'),
109689                 inspect: icon('#iD-icon-inspect', 'pre-text'),
109690                 move: icon('#iD-operation-move', 'pre-text'),
109691                 merge: icon('#iD-operation-merge', 'pre-text'),
109692                 delete: icon('#iD-operation-delete', 'pre-text'),
109693                 close: icon('#iD-icon-close', 'pre-text'),
109694                 undo: icon(textDirection === 'rtl' ? '#iD-icon-redo' : '#iD-icon-undo', 'pre-text'),
109695                 redo: icon(textDirection === 'rtl' ? '#iD-icon-undo' : '#iD-icon-redo', 'pre-text'),
109696                 save: icon('#iD-icon-save', 'pre-text'),
109697                 leftclick: icon('#iD-walkthrough-mouse', 'pre-text mouseclick', 'left'),
109698                 rightclick: icon('#iD-walkthrough-mouse', 'pre-text mouseclick', 'right'),
109699                 shift: uiCmd.display('⇧'),
109700                 alt: uiCmd.display('⌥'),
109701                 return: uiCmd.display('↵'),
109702                 version: context.version
109703             };
109704
109705             // For each section, squash all the texts into a single markdown document
109706             var docs = docKeys.map(function(key) {
109707                 var helpkey = 'help.' + key[0];
109708                 var text = key[1].reduce(function(all, part) {
109709                     var subkey = helpkey + '.' + part;
109710                     var depth = headings[subkey];                              // is this subkey a heading?
109711                     var hhh = depth ? Array(depth + 1).join('#') + ' ' : '';   // if so, prepend with some ##'s
109712                     return all + hhh + t(subkey, replacements) + '\n\n';
109713                 }, '');
109714
109715                 return {
109716                     title: t(helpkey + '.title'),
109717                     html: marked_1(text.trim())
109718                 };
109719             });
109720
109721             var paneTooltip = tooltip()
109722                 .placement((textDirection === 'rtl') ? 'right' : 'left')
109723                 .html(true)
109724                 .title(uiTooltipHtml(t('help.title'), key));
109725
109726             function hidePane() {
109727                 context.ui().togglePanes();
109728             }
109729
109730             uiHelp.togglePane = function() {
109731                 if (event) { event.preventDefault(); }
109732                 paneTooltip.hide();
109733                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
109734             };
109735
109736             uiHelp.renderToggleButton = function(selection) {
109737
109738                 selection.append('button')
109739                     .on('click', uiHelp.togglePane)
109740                     .call(svgIcon('#iD-icon-help', 'light'))
109741                     .call(paneTooltip);
109742             };
109743
109744
109745             uiHelp.renderPane = function(selection) {
109746
109747                 function clickHelp(d, i) {
109748                     var rtl = (textDirection === 'rtl');
109749                     content.property('scrollTop', 0);
109750                     doctitle.html(d.title);
109751
109752                     body.html(d.html);
109753                     body.selectAll('a')
109754                         .attr('target', '_blank');
109755                     menuItems.classed('selected', function(m) {
109756                         return m.title === d.title;
109757                     });
109758
109759                     nav.html('');
109760                     if (rtl) {
109761                         nav.call(drawNext).call(drawPrevious);
109762                     } else {
109763                         nav.call(drawPrevious).call(drawNext);
109764                     }
109765
109766
109767                     function drawNext(selection) {
109768                         if (i < docs.length - 1) {
109769                             var nextLink = selection
109770                                 .append('a')
109771                                 .attr('class', 'next')
109772                                 .on('click', function() {
109773                                     clickHelp(docs[i + 1], i + 1);
109774                                 });
109775
109776                             nextLink
109777                                 .append('span')
109778                                 .text(docs[i + 1].title)
109779                                 .call(svgIcon((rtl ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'));
109780                         }
109781                     }
109782
109783
109784                     function drawPrevious(selection) {
109785                         if (i > 0) {
109786                             var prevLink = selection
109787                                 .append('a')
109788                                 .attr('class', 'previous')
109789                                 .on('click', function() {
109790                                     clickHelp(docs[i - 1], i - 1);
109791                                 });
109792
109793                             prevLink
109794                                 .call(svgIcon((rtl ? '#iD-icon-forward' : '#iD-icon-backward'), 'inline'))
109795                                 .append('span')
109796                                 .text(docs[i - 1].title);
109797                         }
109798                     }
109799                 }
109800
109801
109802                 function clickWalkthrough() {
109803                     if (context.inIntro()) { return; }
109804                     context.container().call(uiIntro(context));
109805                     context.ui().togglePanes();
109806                 }
109807
109808
109809                 function clickShortcuts() {
109810                     context.container().call(uiShortcuts(context), true);
109811                 }
109812
109813
109814                 _pane = selection.append('div')
109815                     .attr('class', 'help-wrap map-pane fillL hide')
109816                     .attr('pane', 'help');
109817
109818                 var heading = _pane
109819                     .append('div')
109820                     .attr('class', 'pane-heading');
109821
109822                 var doctitle = heading
109823                     .append('h2')
109824                     .text(t('help.title'));
109825
109826                 heading
109827                     .append('button')
109828                     .on('click', hidePane)
109829                     .call(svgIcon('#iD-icon-close'));
109830
109831
109832                 var content = _pane
109833                     .append('div')
109834                     .attr('class', 'pane-content');
109835
109836                 var toc = content
109837                     .append('ul')
109838                     .attr('class', 'toc');
109839
109840                 var menuItems = toc.selectAll('li')
109841                     .data(docs)
109842                     .enter()
109843                     .append('li')
109844                     .append('a')
109845                     .html(function(d) { return d.title; })
109846                     .on('click', clickHelp);
109847
109848                 var shortcuts = toc
109849                     .append('li')
109850                     .attr('class', 'shortcuts')
109851                     .call(tooltip()
109852                         .html(true)
109853                         .title(uiTooltipHtml(t('shortcuts.tooltip'), '?'))
109854                         .placement('top')
109855                     )
109856                     .append('a')
109857                     .on('click', clickShortcuts);
109858
109859                 shortcuts
109860                     .append('div')
109861                     .text(t('shortcuts.title'));
109862
109863                 var walkthrough = toc
109864                     .append('li')
109865                     .attr('class', 'walkthrough')
109866                     .append('a')
109867                     .on('click', clickWalkthrough);
109868
109869                 walkthrough
109870                     .append('svg')
109871                     .attr('class', 'logo logo-walkthrough')
109872                     .append('use')
109873                     .attr('xlink:href', '#iD-logo-walkthrough');
109874
109875                 walkthrough
109876                     .append('div')
109877                     .text(t('splash.walkthrough'));
109878
109879
109880                 var helpContent = content
109881                     .append('div')
109882                     .attr('class', 'left-content');
109883
109884                 var body = helpContent
109885                     .append('div')
109886                     .attr('class', 'body');
109887
109888                 var nav = helpContent
109889                     .append('div')
109890                     .attr('class', 'nav');
109891
109892                 clickHelp(docs[0], 0);
109893
109894                 context.keybinding()
109895                     .on(key, uiHelp.togglePane);
109896
109897             };
109898
109899             return uiHelp;
109900         }
109901
109902         function uiPanelBackground(context) {
109903             var background = context.background();
109904             var currSourceName = null;
109905             var metadata = {};
109906             var metadataKeys = [
109907                 'zoom', 'vintage', 'source', 'description', 'resolution', 'accuracy'
109908             ];
109909
109910             var debouncedRedraw = debounce(redraw, 250);
109911
109912             function redraw(selection) {
109913                 var source = background.baseLayerSource();
109914                 var isDG = (source.id.match(/^DigitalGlobe/i) !== null);
109915
109916                 if (currSourceName !== source.name()) {
109917                     currSourceName = source.name();
109918                     metadata = {};
109919                 }
109920
109921                 selection.html('');
109922
109923                 var list = selection
109924                     .append('ul')
109925                     .attr('class', 'background-info');
109926
109927                 list
109928                     .append('li')
109929                     .text(currSourceName);
109930
109931                 metadataKeys.forEach(function(k) {
109932                     // DigitalGlobe vintage is available in raster layers for now.
109933                     if (isDG && k === 'vintage') { return; }
109934
109935                     list
109936                         .append('li')
109937                         .attr('class', 'background-info-list-' + k)
109938                         .classed('hide', !metadata[k])
109939                         .text(t('info_panels.background.' + k) + ':')
109940                         .append('span')
109941                         .attr('class', 'background-info-span-' + k)
109942                         .text(metadata[k]);
109943                 });
109944
109945                 debouncedGetMetadata(selection);
109946
109947                 var toggleTiles = context.getDebug('tile') ? 'hide_tiles' : 'show_tiles';
109948
109949                 selection
109950                     .append('a')
109951                     .text(t('info_panels.background.' + toggleTiles))
109952                     .attr('href', '#')
109953                     .attr('class', 'button button-toggle-tiles')
109954                     .on('click', function() {
109955                         event.preventDefault();
109956                         context.setDebug('tile', !context.getDebug('tile'));
109957                         selection.call(redraw);
109958                     });
109959
109960                 if (isDG) {
109961                     var key = source.id + '-vintage';
109962                     var sourceVintage = context.background().findSource(key);
109963                     var showsVintage = context.background().showsLayer(sourceVintage);
109964                     var toggleVintage = showsVintage ? 'hide_vintage' : 'show_vintage';
109965                     selection
109966                         .append('a')
109967                         .text(t('info_panels.background.' + toggleVintage))
109968                         .attr('href', '#')
109969                         .attr('class', 'button button-toggle-vintage')
109970                         .on('click', function() {
109971                             event.preventDefault();
109972                             context.background().toggleOverlayLayer(sourceVintage);
109973                             selection.call(redraw);
109974                         });
109975                 }
109976
109977                 // disable if necessary
109978                 ['DigitalGlobe-Premium', 'DigitalGlobe-Standard'].forEach(function(layerId) {
109979                     if (source.id !== layerId) {
109980                         var key = layerId + '-vintage';
109981                         var sourceVintage = context.background().findSource(key);
109982                         if (context.background().showsLayer(sourceVintage)) {
109983                             context.background().toggleOverlayLayer(sourceVintage);
109984                         }
109985                     }
109986                 });
109987             }
109988
109989
109990             var debouncedGetMetadata = debounce(getMetadata, 250);
109991
109992             function getMetadata(selection) {
109993                 var tile = d3_select('.layer-background img.tile-center');   // tile near viewport center
109994                 if (tile.empty()) { return; }
109995
109996                 var sourceName = currSourceName;
109997                 var d = tile.datum();
109998                 var zoom = (d && d.length >= 3 && d[2]) || Math.floor(context.map().zoom());
109999                 var center = context.map().center();
110000
110001                 // update zoom
110002                 metadata.zoom = String(zoom);
110003                 selection.selectAll('.background-info-list-zoom')
110004                     .classed('hide', false)
110005                     .selectAll('.background-info-span-zoom')
110006                     .text(metadata.zoom);
110007
110008                 if (!d || !d.length >= 3) { return; }
110009
110010                 background.baseLayerSource().getMetadata(center, d, function(err, result) {
110011                     if (err || currSourceName !== sourceName) { return; }
110012
110013                     // update vintage
110014                     var vintage = result.vintage;
110015                     metadata.vintage = (vintage && vintage.range) || t('info_panels.background.unknown');
110016                     selection.selectAll('.background-info-list-vintage')
110017                         .classed('hide', false)
110018                         .selectAll('.background-info-span-vintage')
110019                         .text(metadata.vintage);
110020
110021                     // update other metdata
110022                     metadataKeys.forEach(function(k) {
110023                         if (k === 'zoom' || k === 'vintage') { return; }  // done already
110024                         var val = result[k];
110025                         metadata[k] = val;
110026                         selection.selectAll('.background-info-list-' + k)
110027                             .classed('hide', !val)
110028                             .selectAll('.background-info-span-' + k)
110029                             .text(val);
110030                     });
110031                 });
110032             }
110033
110034
110035             var panel = function(selection) {
110036                 selection.call(redraw);
110037
110038                 context.map()
110039                     .on('drawn.info-background', function() {
110040                         selection.call(debouncedRedraw);
110041                     })
110042                     .on('move.info-background', function() {
110043                         selection.call(debouncedGetMetadata);
110044                     });
110045
110046             };
110047
110048             panel.off = function() {
110049                 context.map()
110050                     .on('drawn.info-background', null)
110051                     .on('move.info-background', null);
110052             };
110053
110054             panel.id = 'background';
110055             panel.title = t('info_panels.background.title');
110056             panel.key = t('info_panels.background.key');
110057
110058
110059             return panel;
110060         }
110061
110062         function uiPanelHistory(context) {
110063             var osm;
110064
110065             function displayTimestamp(timestamp) {
110066                 if (!timestamp) { return t('info_panels.history.unknown'); }
110067                 var detected = utilDetect();
110068                 var options = {
110069                     day: 'numeric', month: 'short', year: 'numeric',
110070                     hour: 'numeric', minute: 'numeric', second: 'numeric'
110071                 };
110072                 var d = new Date(timestamp);
110073                 if (isNaN(d.getTime())) { return t('info_panels.history.unknown'); }
110074                 return d.toLocaleString(detected.locale, options);
110075             }
110076
110077
110078             function displayUser(selection, userName) {
110079                 if (!userName) {
110080                     selection
110081                         .append('span')
110082                         .text(t('info_panels.history.unknown'));
110083                     return;
110084                 }
110085
110086                 selection
110087                     .append('span')
110088                     .attr('class', 'user-name')
110089                     .text(userName);
110090
110091                 var links = selection
110092                     .append('div')
110093                     .attr('class', 'links');
110094
110095                 if (osm) {
110096                     links
110097                         .append('a')
110098                         .attr('class', 'user-osm-link')
110099                         .attr('href', osm.userURL(userName))
110100                         .attr('target', '_blank')
110101                         .attr('tabindex', -1)
110102                         .text('OSM');
110103                 }
110104
110105                 links
110106                     .append('a')
110107                     .attr('class', 'user-hdyc-link')
110108                     .attr('href', 'https://hdyc.neis-one.org/?' + userName)
110109                     .attr('target', '_blank')
110110                     .attr('tabindex', -1)
110111                     .text('HDYC');
110112             }
110113
110114
110115             function displayChangeset(selection, changeset) {
110116                 if (!changeset) {
110117                     selection
110118                         .append('span')
110119                         .text(t('info_panels.history.unknown'));
110120                     return;
110121                 }
110122
110123                 selection
110124                     .append('span')
110125                     .attr('class', 'changeset-id')
110126                     .text(changeset);
110127
110128                 var links = selection
110129                     .append('div')
110130                     .attr('class', 'links');
110131
110132                 if (osm) {
110133                     links
110134                         .append('a')
110135                         .attr('class', 'changeset-osm-link')
110136                         .attr('href', osm.changesetURL(changeset))
110137                         .attr('target', '_blank')
110138                         .attr('tabindex', -1)
110139                         .text('OSM');
110140                 }
110141
110142                 links
110143                     .append('a')
110144                     .attr('class', 'changeset-osmcha-link')
110145                     .attr('href', 'https://osmcha.mapbox.com/changesets/' + changeset)
110146                     .attr('target', '_blank')
110147                     .attr('tabindex', -1)
110148                     .text('OSMCha');
110149
110150                 links
110151                     .append('a')
110152                     .attr('class', 'changeset-achavi-link')
110153                     .attr('href', 'https://overpass-api.de/achavi/?changeset=' + changeset)
110154                     .attr('target', '_blank')
110155                     .attr('tabindex', -1)
110156                     .text('Achavi');
110157             }
110158
110159
110160             function redraw(selection) {
110161                 var selectedNoteID = context.selectedNoteID();
110162                 osm = context.connection();
110163
110164                 var selected, note, entity;
110165                 if (selectedNoteID && osm) {       // selected 1 note
110166                     selected = [ t('note.note') + ' ' + selectedNoteID ];
110167                     note = osm.getNote(selectedNoteID);
110168                 } else {                           // selected 1..n entities
110169                     selected = context.selectedIDs()
110170                         .filter(function(e) { return context.hasEntity(e); });
110171                     if (selected.length) {
110172                         entity = context.entity(selected[0]);
110173                     }
110174                 }
110175
110176                 var singular = selected.length === 1 ? selected[0] : null;
110177
110178                 selection.html('');
110179
110180                 selection
110181                     .append('h4')
110182                     .attr('class', 'history-heading')
110183                     .text(singular || t('info_panels.history.selected', { n: selected.length }));
110184
110185                 if (!singular) { return; }
110186
110187                 if (entity) {
110188                     selection.call(redrawEntity, entity);
110189                 } else if (note) {
110190                     selection.call(redrawNote, note);
110191                 }
110192             }
110193
110194
110195             function redrawNote(selection, note) {
110196                 if (!note || note.isNew()) {
110197                     selection
110198                         .append('div')
110199                         .text(t('info_panels.history.note_no_history'));
110200                     return;
110201                 }
110202
110203                 var list = selection
110204                     .append('ul');
110205
110206                 list
110207                     .append('li')
110208                     .text(t('info_panels.history.note_comments') + ':')
110209                     .append('span')
110210                     .text(note.comments.length);
110211
110212                 if (note.comments.length) {
110213                     list
110214                         .append('li')
110215                         .text(t('info_panels.history.note_created_date') + ':')
110216                         .append('span')
110217                         .text(displayTimestamp(note.comments[0].date));
110218
110219                     list
110220                         .append('li')
110221                         .text(t('info_panels.history.note_created_user') + ':')
110222                         .call(displayUser, note.comments[0].user);
110223                 }
110224
110225                 if (osm) {
110226                     selection
110227                         .append('a')
110228                         .attr('class', 'view-history-on-osm')
110229                         .attr('target', '_blank')
110230                         .attr('tabindex', -1)
110231                         .attr('href', osm.noteURL(note))
110232                         .call(svgIcon('#iD-icon-out-link', 'inline'))
110233                         .append('span')
110234                         .text(t('info_panels.history.note_link_text'));
110235                 }
110236             }
110237
110238
110239             function redrawEntity(selection, entity) {
110240                 if (!entity || entity.isNew()) {
110241                     selection
110242                         .append('div')
110243                         .text(t('info_panels.history.no_history'));
110244                     return;
110245                 }
110246
110247                 var links = selection
110248                     .append('div')
110249                     .attr('class', 'links');
110250
110251                 if (osm) {
110252                     links
110253                         .append('a')
110254                         .attr('class', 'view-history-on-osm')
110255                         .attr('href', osm.historyURL(entity))
110256                         .attr('target', '_blank')
110257                         .attr('tabindex', -1)
110258                         .attr('title', t('info_panels.history.link_text'))
110259                         .text('OSM');
110260                 }
110261                 links
110262                     .append('a')
110263                     .attr('class', 'pewu-history-viewer-link')
110264                     .attr('href', 'https://pewu.github.io/osm-history/#/' + entity.type + '/' + entity.osmId())
110265                     .attr('target', '_blank')
110266                     .attr('tabindex', -1)
110267                     .text('PeWu');
110268
110269                 var list = selection
110270                     .append('ul');
110271
110272                 list
110273                     .append('li')
110274                     .text(t('info_panels.history.version') + ':')
110275                     .append('span')
110276                     .text(entity.version);
110277
110278                 list
110279                     .append('li')
110280                     .text(t('info_panels.history.last_edit') + ':')
110281                     .append('span')
110282                     .text(displayTimestamp(entity.timestamp));
110283
110284                 list
110285                     .append('li')
110286                     .text(t('info_panels.history.edited_by') + ':')
110287                     .call(displayUser, entity.user);
110288
110289                 list
110290                     .append('li')
110291                     .text(t('info_panels.history.changeset') + ':')
110292                     .call(displayChangeset, entity.changeset);
110293             }
110294
110295
110296             var panel = function(selection) {
110297                 selection.call(redraw);
110298
110299                 context.map()
110300                     .on('drawn.info-history', function() {
110301                         selection.call(redraw);
110302                     });
110303
110304                 context
110305                     .on('enter.info-history', function() {
110306                         selection.call(redraw);
110307                     });
110308             };
110309
110310             panel.off = function() {
110311                 context.map().on('drawn.info-history', null);
110312                 context.on('enter.info-history', null);
110313             };
110314
110315             panel.id = 'history';
110316             panel.title = t('info_panels.history.title');
110317             panel.key = t('info_panels.history.key');
110318
110319
110320             return panel;
110321         }
110322
110323         var OSM_PRECISION = 7;
110324         var locale$2 = utilDetect().locale;
110325
110326         /**
110327          * Returns a localized representation of the given length measurement.
110328          *
110329          * @param {Number} m area in meters
110330          * @param {Boolean} isImperial true for U.S. customary units; false for metric
110331          */
110332         function displayLength(m, isImperial) {
110333             var d = m * (isImperial ? 3.28084 : 1);
110334             var unit;
110335
110336             if (isImperial) {
110337                 if (d >= 5280) {
110338                     d /= 5280;
110339                     unit = 'miles';
110340                 } else {
110341                     unit = 'feet';
110342                 }
110343             } else {
110344                 if (d >= 1000) {
110345                     d /= 1000;
110346                     unit = 'kilometers';
110347                 } else {
110348                     unit = 'meters';
110349                 }
110350             }
110351
110352             return t('units.' + unit, {
110353                 quantity: d.toLocaleString(locale$2, {
110354                     maximumSignificantDigits: 4
110355                 })
110356             });
110357         }
110358
110359         /**
110360          * Returns a localized representation of the given area measurement.
110361          *
110362          * @param {Number} m2 area in square meters
110363          * @param {Boolean} isImperial true for U.S. customary units; false for metric
110364          */
110365         function displayArea(m2, isImperial) {
110366             var d = m2 * (isImperial ? 10.7639111056 : 1);
110367             var d1, d2, area;
110368             var unit1 = '';
110369             var unit2 = '';
110370
110371             if (isImperial) {
110372                 if (d >= 6969600) { // > 0.25mi² show mi²
110373                     d1 = d / 27878400;
110374                     unit1 = 'square_miles';
110375                 } else {
110376                     d1 = d;
110377                     unit1 = 'square_feet';
110378                 }
110379
110380                 if (d > 4356 && d < 43560000) { // 0.1 - 1000 acres
110381                     d2 = d / 43560;
110382                     unit2 = 'acres';
110383                 }
110384
110385             } else {
110386                 if (d >= 250000) { // > 0.25km² show km²
110387                     d1 = d / 1000000;
110388                     unit1 = 'square_kilometers';
110389                 } else {
110390                     d1 = d;
110391                     unit1 = 'square_meters';
110392                 }
110393
110394                 if (d > 1000 && d < 10000000) { // 0.1 - 1000 hectares
110395                     d2 = d / 10000;
110396                     unit2 = 'hectares';
110397                 }
110398             }
110399
110400             area = t('units.' + unit1, {
110401                 quantity: d1.toLocaleString(locale$2, {
110402                     maximumSignificantDigits: 4
110403                 })
110404             });
110405
110406             if (d2) {
110407                 return t('units.area_pair', {
110408                     area1: area,
110409                     area2: t('units.' + unit2, {
110410                         quantity: d2.toLocaleString(locale$2, {
110411                             maximumSignificantDigits: 2
110412                         })
110413                     })
110414                 });
110415             } else {
110416                 return area;
110417             }
110418         }
110419
110420         function wrap(x, min, max) {
110421             var d = max - min;
110422             return ((x - min) % d + d) % d + min;
110423         }
110424
110425         function clamp$1(x, min, max) {
110426             return Math.max(min, Math.min(x, max));
110427         }
110428
110429         function displayCoordinate(deg, pos, neg) {
110430             var min = (Math.abs(deg) - Math.floor(Math.abs(deg))) * 60;
110431             var sec = (min - Math.floor(min)) * 60;
110432             var displayDegrees = t('units.arcdegrees', {
110433                 quantity: Math.floor(Math.abs(deg)).toLocaleString(locale$2)
110434             });
110435             var displayCoordinate;
110436
110437             if (Math.floor(sec) > 0) {
110438                 displayCoordinate = displayDegrees +
110439                     t('units.arcminutes', {
110440                         quantity: Math.floor(min).toLocaleString(locale$2)
110441                     }) +
110442                     t('units.arcseconds', {
110443                         quantity: Math.round(sec).toLocaleString(locale$2)
110444                     });
110445             } else if (Math.floor(min) > 0) {
110446                 displayCoordinate = displayDegrees +
110447                     t('units.arcminutes', {
110448                         quantity: Math.round(min).toLocaleString(locale$2)
110449                     });
110450             } else {
110451                 displayCoordinate = t('units.arcdegrees', {
110452                     quantity: Math.round(Math.abs(deg)).toLocaleString(locale$2)
110453                 });
110454             }
110455
110456             if (deg === 0) {
110457                 return displayCoordinate;
110458             } else {
110459                 return t('units.coordinate', {
110460                     coordinate: displayCoordinate,
110461                     direction: t('units.' + (deg > 0 ? pos : neg))
110462                 });
110463             }
110464         }
110465
110466         /**
110467          * Returns given coordinate pair in degree-minute-second format.
110468          *
110469          * @param {Array<Number>} coord longitude and latitude
110470          */
110471         function dmsCoordinatePair(coord) {
110472             return t('units.coordinate_pair', {
110473                 latitude: displayCoordinate(clamp$1(coord[1], -90, 90), 'north', 'south'),
110474                 longitude: displayCoordinate(wrap(coord[0], -180, 180), 'east', 'west')
110475             });
110476         }
110477
110478         /**
110479          * Returns the given coordinate pair in decimal format.
110480          * note: unlocalized to avoid comma ambiguity - see #4765
110481          *
110482          * @param {Array<Number>} coord longitude and latitude
110483          */
110484         function decimalCoordinatePair(coord) {
110485             return t('units.coordinate_pair', {
110486                 latitude: clamp$1(coord[1], -90, 90).toFixed(OSM_PRECISION),
110487                 longitude: wrap(coord[0], -180, 180).toFixed(OSM_PRECISION)
110488             });
110489         }
110490
110491         function uiPanelLocation(context) {
110492             var currLocation = '';
110493
110494
110495             function redraw(selection) {
110496                 selection.html('');
110497
110498                 var list = selection
110499                     .append('ul');
110500
110501                 // Mouse coordinates
110502                 var coord = context.map().mouseCoordinates();
110503                 if (coord.some(isNaN)) {
110504                     coord = context.map().center();
110505                 }
110506
110507                 list
110508                     .append('li')
110509                     .text(dmsCoordinatePair(coord))
110510                     .append('li')
110511                     .text(decimalCoordinatePair(coord));
110512
110513                 // Location Info
110514                 selection
110515                     .append('div')
110516                     .attr('class', 'location-info')
110517                     .text(currLocation || ' ');
110518
110519                 debouncedGetLocation(selection, coord);
110520             }
110521
110522
110523             var debouncedGetLocation = debounce(getLocation, 250);
110524             function getLocation(selection, coord) {
110525                 if (!services$1.geocoder) {
110526                     currLocation = t('info_panels.location.unknown_location');
110527                     selection.selectAll('.location-info')
110528                         .text(currLocation);
110529                 } else {
110530                     services$1.geocoder.reverse(coord, function(err, result) {
110531                         currLocation = result ? result.display_name : t('info_panels.location.unknown_location');
110532                         selection.selectAll('.location-info')
110533                             .text(currLocation);
110534                     });
110535                 }
110536             }
110537
110538
110539             var panel = function(selection) {
110540                 selection.call(redraw);
110541
110542                 context.surface()
110543                     .on('mousemove.info-location', function() {
110544                         selection.call(redraw);
110545                     });
110546             };
110547
110548             panel.off = function() {
110549                 context.surface()
110550                     .on('mousemove.info-location', null);
110551             };
110552
110553             panel.id = 'location';
110554             panel.title = t('info_panels.location.title');
110555             panel.key = t('info_panels.location.key');
110556
110557
110558             return panel;
110559         }
110560
110561         function uiPanelMeasurement(context) {
110562             var locale = utilDetect().locale;
110563             var isImperial = (locale.toLowerCase() === 'en-us');
110564
110565
110566             function radiansToMeters(r) {
110567                 // using WGS84 authalic radius (6371007.1809 m)
110568                 return r * 6371007.1809;
110569             }
110570
110571             function steradiansToSqmeters(r) {
110572                 // http://gis.stackexchange.com/a/124857/40446
110573                 return r / (4 * Math.PI) * 510065621724000;
110574             }
110575
110576
110577             function toLineString(feature) {
110578                 if (feature.type === 'LineString') { return feature; }
110579
110580                 var result = { type: 'LineString', coordinates: [] };
110581                 if (feature.type === 'Polygon') {
110582                     result.coordinates = feature.coordinates[0];
110583                 } else if (feature.type === 'MultiPolygon') {
110584                     result.coordinates = feature.coordinates[0][0];
110585                 }
110586
110587                 return result;
110588             }
110589
110590
110591             function nodeCount(feature) {
110592               if (feature.type === 'LineString') { return feature.coordinates.length; }
110593               if (feature.type === 'Polygon') { return feature.coordinates[0].length - 1; }
110594             }
110595
110596
110597             function redraw(selection) {
110598                 var resolver = context.graph();
110599                 var selectedNoteID = context.selectedNoteID();
110600                 var osm = services$1.osm;
110601
110602                 var selected, center, entity, note, geometry;
110603
110604                 if (selectedNoteID && osm) {       // selected 1 note
110605                     selected = [ t('note.note') + ' ' + selectedNoteID ];
110606                     note = osm.getNote(selectedNoteID);
110607                     center = note.loc;
110608                     geometry = 'note';
110609
110610                 } else {                           // selected 1..n entities
110611                     var extent = geoExtent();
110612                     selected = context.selectedIDs()
110613                         .filter(function(e) { return context.hasEntity(e); });
110614                     if (selected.length) {
110615                         for (var i = 0; i < selected.length; i++) {
110616                             entity = context.entity(selected[i]);
110617                             extent._extend(entity.extent(resolver));
110618                         }
110619                         center = extent.center();
110620                         geometry = entity.geometry(resolver);
110621                     }
110622                 }
110623
110624                 var singular = selected.length === 1 ? selected[0] : null;
110625
110626                 selection.html('');
110627
110628                 selection
110629                     .append('h4')
110630                     .attr('class', 'measurement-heading')
110631                     .text(singular || t('info_panels.measurement.selected', { n: selected.length.toLocaleString(locale) }));
110632
110633                 if (!selected.length) { return; }
110634
110635
110636                 var list = selection
110637                     .append('ul');
110638                 var coordItem;
110639
110640                 // multiple selected features, just display extent center..
110641                 if (!singular) {
110642                     coordItem = list
110643                         .append('li')
110644                         .text(t('info_panels.measurement.center') + ':');
110645                     coordItem.append('span')
110646                         .text(dmsCoordinatePair(center));
110647                     coordItem.append('span')
110648                         .text(decimalCoordinatePair(center));
110649                     return;
110650                 }
110651
110652                 // single selected feature, display details..
110653                 if (geometry === 'line' || geometry === 'area') {
110654                     var closed = (entity.type === 'relation') || (entity.isClosed() && !entity.isDegenerate());
110655                     var feature = entity.asGeoJSON(resolver);
110656                     var length = radiansToMeters(d3_geoLength(toLineString(feature)));
110657                     var lengthLabel = t('info_panels.measurement.' + (closed ? 'perimeter' : 'length'));
110658                     var centroid = d3_geoCentroid(feature);
110659
110660                     list
110661                         .append('li')
110662                         .text(t('info_panels.measurement.geometry') + ':')
110663                         .append('span')
110664                         .text(
110665                             closed ? t('info_panels.measurement.closed_' + geometry) : t('geometry.' + geometry)
110666                         );
110667
110668                     if (entity.type !== 'relation') {
110669                         list
110670                             .append('li')
110671                             .text(t('info_panels.measurement.node_count') + ':')
110672                             .append('span')
110673                             .text(nodeCount(feature).toLocaleString(locale));
110674                     }
110675
110676                     if (closed) {
110677                         var area = steradiansToSqmeters(entity.area(resolver));
110678                         list
110679                             .append('li')
110680                             .text(t('info_panels.measurement.area') + ':')
110681                             .append('span')
110682                             .text(displayArea(area, isImperial));
110683                     }
110684
110685
110686                     list
110687                         .append('li')
110688                         .text(lengthLabel + ':')
110689                         .append('span')
110690                         .text(displayLength(length, isImperial));
110691
110692                     coordItem = list
110693                         .append('li')
110694                         .text(t('info_panels.measurement.centroid') + ':');
110695                     coordItem.append('span')
110696                         .text(dmsCoordinatePair(centroid));
110697                     coordItem.append('span')
110698                         .text(decimalCoordinatePair(centroid));
110699
110700                     var toggle  = isImperial ? 'imperial' : 'metric';
110701
110702                     selection
110703                         .append('a')
110704                         .text(t('info_panels.measurement.' + toggle))
110705                         .attr('href', '#')
110706                         .attr('class', 'button button-toggle-units')
110707                         .on('click', function() {
110708                             event.preventDefault();
110709                             isImperial = !isImperial;
110710                             selection.call(redraw);
110711                         });
110712
110713                 } else {
110714                     var centerLabel = t('info_panels.measurement.' +
110715                         (note || entity.type === 'node' ? 'location' : 'center'));
110716
110717                     list
110718                         .append('li')
110719                         .text(t('info_panels.measurement.geometry') + ':')
110720                         .append('span')
110721                         .text(t('geometry.' + geometry));
110722
110723                     coordItem = list
110724                         .append('li')
110725                         .text(centerLabel + ':');
110726                     coordItem.append('span')
110727                         .text(dmsCoordinatePair(center));
110728                     coordItem.append('span')
110729                         .text(decimalCoordinatePair(center));
110730                 }
110731             }
110732
110733
110734             var panel = function(selection) {
110735                 selection.call(redraw);
110736
110737                 context.map()
110738                     .on('drawn.info-measurement', function() {
110739                         selection.call(redraw);
110740                     });
110741
110742                 context
110743                     .on('enter.info-measurement', function() {
110744                         selection.call(redraw);
110745                     });
110746             };
110747
110748             panel.off = function() {
110749                 context.map().on('drawn.info-measurement', null);
110750                 context.on('enter.info-measurement', null);
110751             };
110752
110753             panel.id = 'measurement';
110754             panel.title = t('info_panels.measurement.title');
110755             panel.key = t('info_panels.measurement.key');
110756
110757
110758             return panel;
110759         }
110760
110761         var uiInfoPanels = {
110762             background: uiPanelBackground,
110763             history: uiPanelHistory,
110764             location: uiPanelLocation,
110765             measurement: uiPanelMeasurement,
110766         };
110767
110768         function uiInfo(context) {
110769             var ids = Object.keys(uiInfoPanels);
110770             var wasActive = ['measurement'];
110771             var panels = {};
110772             var active = {};
110773
110774             // create panels
110775             ids.forEach(function(k) {
110776                 if (!panels[k]) {
110777                     panels[k] = uiInfoPanels[k](context);
110778                     active[k] = false;
110779                 }
110780             });
110781
110782
110783             function info(selection) {
110784
110785                 function redraw() {
110786                     var activeids = ids.filter(function(k) { return active[k]; }).sort();
110787
110788                     var containers = infoPanels.selectAll('.panel-container')
110789                         .data(activeids, function(k) { return k; });
110790
110791                     containers.exit()
110792                         .style('opacity', 1)
110793                         .transition()
110794                         .duration(200)
110795                         .style('opacity', 0)
110796                         .on('end', function(d) {
110797                             d3_select(this)
110798                                 .call(panels[d].off)
110799                                 .remove();
110800                         });
110801
110802                     var enter = containers.enter()
110803                         .append('div')
110804                         .attr('class', function(d) { return 'fillD2 panel-container panel-container-' + d; });
110805
110806                     enter
110807                         .style('opacity', 0)
110808                         .transition()
110809                         .duration(200)
110810                         .style('opacity', 1);
110811
110812                     var title = enter
110813                         .append('div')
110814                         .attr('class', 'panel-title fillD2');
110815
110816                     title
110817                         .append('h3')
110818                         .text(function(d) { return panels[d].title; });
110819
110820                     title
110821                         .append('button')
110822                         .attr('class', 'close')
110823                         .on('click', function (d) { info.toggle(d); })
110824                         .call(svgIcon('#iD-icon-close'));
110825
110826                     enter
110827                         .append('div')
110828                         .attr('class', function(d) { return 'panel-content panel-content-' + d; });
110829
110830
110831                     // redraw the panels
110832                     infoPanels.selectAll('.panel-content')
110833                         .each(function(d) {
110834                             d3_select(this).call(panels[d]);
110835                         });
110836                 }
110837
110838
110839                 info.toggle = function(which) {
110840                     if (event) {
110841                         event.stopImmediatePropagation();
110842                         event.preventDefault();
110843                     }
110844
110845                     var activeids = ids.filter(function(k) { return active[k]; });
110846
110847                     if (which) {  // toggle one
110848                         active[which] = !active[which];
110849                         if (activeids.length === 1 && activeids[0] === which) {  // none active anymore
110850                             wasActive = [which];
110851                         }
110852
110853                         d3_select('.' + which + '-panel-toggle-item')
110854                             .classed('active', active[which])
110855                             .select('input')
110856                             .property('checked', active[which]);
110857
110858                     } else {      // toggle all
110859                         if (activeids.length) {
110860                             wasActive = activeids;
110861                             activeids.forEach(function(k) { active[k] = false; });
110862                         } else {
110863                             wasActive.forEach(function(k) { active[k] = true; });
110864                         }
110865                     }
110866
110867                     redraw();
110868                 };
110869
110870
110871                 var infoPanels = selection.selectAll('.info-panels')
110872                     .data([0]);
110873
110874                 infoPanels = infoPanels.enter()
110875                     .append('div')
110876                     .attr('class', 'info-panels')
110877                     .merge(infoPanels);
110878
110879                 redraw();
110880
110881                 context.keybinding()
110882                     .on(uiCmd('⌘' + t('info_panels.key')), info.toggle);
110883
110884                 ids.forEach(function(k) {
110885                     var key = t('info_panels.' + k + '.key', { default: null });
110886                     if (!key) { return; }
110887                     context.keybinding()
110888                         .on(uiCmd('⌘⇧' + key), function() { info.toggle(k); });
110889                 });
110890             }
110891
110892             return info;
110893         }
110894
110895         function uiIssues(context) {
110896             var key = t('issues.key');
110897
110898             var MINSQUARE = 0;
110899             var MAXSQUARE = 20;
110900             var DEFAULTSQUARE = 5;  // see also unsquare_way.js
110901
110902             var _errorsSelection = d3_select(null);
110903             var _warningsSelection = d3_select(null);
110904             var _rulesList = d3_select(null);
110905             var _pane = d3_select(null);
110906             var _toggleButton = d3_select(null);
110907
110908             var _errors = [];
110909             var _warnings = [];
110910             var _options = {
110911                 what: context.storage('validate-what') || 'edited',    // 'all', 'edited'
110912                 where: context.storage('validate-where') || 'all'  // 'all', 'visible'
110913             };
110914
110915             // listeners
110916             context.validator().on('validated.uiIssues',
110917                 function() { window.requestIdleCallback(update); }
110918             );
110919             context.map().on('move.uiIssues',
110920                 debounce(function() { window.requestIdleCallback(update); }, 1000)
110921             );
110922
110923
110924             function addNotificationBadge(selection) {
110925                 var d = 10;
110926                 selection.selectAll('svg.notification-badge')
110927                     .data([0])
110928                     .enter()
110929                     .append('svg')
110930                     .attr('viewbox', '0 0 ' + d + ' ' + d)
110931                     .attr('class', 'notification-badge hide')
110932                     .append('circle')
110933                     .attr('cx', d / 2)
110934                     .attr('cy', d / 2)
110935                     .attr('r', (d / 2) - 1)
110936                     .attr('fill', 'currentColor');
110937             }
110938
110939
110940             function renderErrorsList(selection) {
110941                 _errorsSelection = selection
110942                     .call(drawIssuesList, 'errors', _errors);
110943             }
110944
110945
110946             function renderWarningsList(selection) {
110947                 _warningsSelection = selection
110948                     .call(drawIssuesList, 'warnings', _warnings);
110949             }
110950
110951
110952             function drawIssuesList(selection, which, issues) {
110953                 var list = selection.selectAll('.issues-list')
110954                     .data([0]);
110955
110956                 list = list.enter()
110957                     .append('ul')
110958                     .attr('class', 'layer-list issues-list ' + which + '-list')
110959                     .merge(list);
110960
110961
110962                 var items = list.selectAll('li')
110963                     .data(issues, function(d) { return d.id; });
110964
110965                 // Exit
110966                 items.exit()
110967                     .remove();
110968
110969                 // Enter
110970                 var itemsEnter = items.enter()
110971                     .append('li')
110972                     .attr('class', function (d) { return 'issue severity-' + d.severity; })
110973                     .on('click', function(d) {
110974                         context.validator().focusIssue(d);
110975                     })
110976                     .on('mouseover', function(d) {
110977                         utilHighlightEntities(d.entityIds, true, context);
110978                     })
110979                     .on('mouseout', function(d) {
110980                         utilHighlightEntities(d.entityIds, false, context);
110981                     });
110982
110983
110984                 var labelsEnter = itemsEnter
110985                     .append('div')
110986                     .attr('class', 'issue-label');
110987
110988                 var textEnter = labelsEnter
110989                     .append('span')
110990                     .attr('class', 'issue-text');
110991
110992                 textEnter
110993                     .append('span')
110994                     .attr('class', 'issue-icon')
110995                     .each(function(d) {
110996                         var iconName = '#iD-icon-' + (d.severity === 'warning' ? 'alert' : 'error');
110997                         d3_select(this)
110998                             .call(svgIcon(iconName));
110999                     });
111000
111001                 textEnter
111002                     .append('span')
111003                     .attr('class', 'issue-message');
111004
111005                 /*
111006                 labelsEnter
111007                     .append('span')
111008                     .attr('class', 'issue-autofix')
111009                     .each(function(d) {
111010                         if (!d.autoFix) return;
111011
111012                         d3_select(this)
111013                             .append('button')
111014                             .attr('title', t('issues.fix_one.title'))
111015                             .datum(d.autoFix)  // set button datum to the autofix
111016                             .attr('class', 'autofix action')
111017                             .on('click', function(d) {
111018                                 d3_event.preventDefault();
111019                                 d3_event.stopPropagation();
111020
111021                                 var issuesEntityIDs = d.issue.entityIds;
111022                                 utilHighlightEntities(issuesEntityIDs.concat(d.entityIds), false, context);
111023
111024                                 context.perform.apply(context, d.autoArgs);
111025                                 context.validator().validate();
111026                             })
111027                             .call(svgIcon('#iD-icon-wrench'));
111028                     });
111029                 */
111030
111031                 // Update
111032                 items = items
111033                     .merge(itemsEnter)
111034                     .order();
111035
111036                 items.selectAll('.issue-message')
111037                     .text(function(d) {
111038                         return d.message(context);
111039                     });
111040
111041                 /*
111042                 // autofix
111043                 var canAutoFix = issues.filter(function(issue) { return issue.autoFix; });
111044
111045                 var autoFixAll = selection.selectAll('.autofix-all')
111046                     .data(canAutoFix.length ? [0] : []);
111047
111048                 // exit
111049                 autoFixAll.exit()
111050                     .remove();
111051
111052                 // enter
111053                 var autoFixAllEnter = autoFixAll.enter()
111054                     .insert('div', '.issues-list')
111055                     .attr('class', 'autofix-all');
111056
111057                 var linkEnter = autoFixAllEnter
111058                     .append('a')
111059                     .attr('class', 'autofix-all-link')
111060                     .attr('href', '#');
111061
111062                 linkEnter
111063                     .append('span')
111064                     .attr('class', 'autofix-all-link-text')
111065                     .text(t('issues.fix_all.title'));
111066
111067                 linkEnter
111068                     .append('span')
111069                     .attr('class', 'autofix-all-link-icon')
111070                     .call(svgIcon('#iD-icon-wrench'));
111071
111072                 if (which === 'warnings') {
111073                     renderIgnoredIssuesReset(selection);
111074                 }
111075
111076                 // update
111077                 autoFixAll = autoFixAll
111078                     .merge(autoFixAllEnter);
111079
111080                 autoFixAll.selectAll('.autofix-all-link')
111081                     .on('click', function() {
111082                         context.pauseChangeDispatch();
111083                         context.perform(actionNoop());
111084                         canAutoFix.forEach(function(issue) {
111085                             var args = issue.autoFix.autoArgs.slice();  // copy
111086                             if (typeof args[args.length - 1] !== 'function') {
111087                                 args.pop();
111088                             }
111089                             args.push(t('issues.fix_all.annotation'));
111090                             context.replace.apply(context, args);
111091                         });
111092                         context.resumeChangeDispatch();
111093                         context.validator().validate();
111094                     });
111095                 */
111096             }
111097
111098
111099             function updateOptionValue(d, val) {
111100                 if (!val && event && event.target) {
111101                     val = event.target.value;
111102                 }
111103
111104                 _options[d] = val;
111105                 context.storage('validate-' + d, val);
111106                 context.validator().validate();
111107             }
111108
111109
111110             function renderIssuesOptions(selection) {
111111                 var container = selection.selectAll('.issues-options-container')
111112                     .data([0]);
111113
111114                 container = container.enter()
111115                     .append('div')
111116                     .attr('class', 'issues-options-container')
111117                     .merge(container);
111118
111119                 var data = [
111120                     { key: 'what', values: ['edited', 'all'] },
111121                     { key: 'where', values: ['visible', 'all'] }
111122                 ];
111123
111124                 var options = container.selectAll('.issues-option')
111125                     .data(data, function(d) { return d.key; });
111126
111127                 var optionsEnter = options.enter()
111128                     .append('div')
111129                     .attr('class', function(d) { return 'issues-option issues-option-' + d.key; });
111130
111131                 optionsEnter
111132                     .append('div')
111133                     .attr('class', 'issues-option-title')
111134                     .text(function(d) { return t('issues.options.' + d.key + '.title'); });
111135
111136                 var valuesEnter = optionsEnter.selectAll('label')
111137                     .data(function(d) {
111138                         return d.values.map(function(val) { return { value: val, key: d.key }; });
111139                     })
111140                     .enter()
111141                     .append('label');
111142
111143                 valuesEnter
111144                     .append('input')
111145                     .attr('type', 'radio')
111146                     .attr('name', function(d) { return 'issues-option-' + d.key; })
111147                     .attr('value', function(d) { return d.value; })
111148                     .property('checked', function(d) { return _options[d.key] === d.value; })
111149                     .on('change', function(d) { updateOptionValue(d.key, d.value); });
111150
111151                 valuesEnter
111152                     .append('span')
111153                     .text(function(d) { return t('issues.options.' + d.key + '.' + d.value); });
111154             }
111155
111156
111157             function renderNoIssuesBox(selection) {
111158
111159                 var box = selection.append('div')
111160                     .attr('class', 'box');
111161
111162                 box
111163                     .append('div')
111164                     .call(svgIcon('#iD-icon-apply', 'pre-text'));
111165
111166                 var noIssuesMessage = box
111167                     .append('span');
111168
111169                 noIssuesMessage
111170                     .append('strong')
111171                     .attr('class', 'message');
111172
111173                 noIssuesMessage
111174                     .append('br');
111175
111176                 noIssuesMessage
111177                     .append('span')
111178                     .attr('class', 'details');
111179             }
111180
111181             function renderIgnoredIssuesReset(selection) {
111182
111183                 var ignoredIssues = context.validator()
111184                     .getIssues({ what: 'all', where: 'all', includeDisabledRules: true, includeIgnored: 'only' });
111185
111186                 var resetIgnored = selection.selectAll('.reset-ignored')
111187                     .data(ignoredIssues.length ? [0] : []);
111188
111189                 // exit
111190                 resetIgnored.exit()
111191                     .remove();
111192
111193                 // enter
111194                 var resetIgnoredEnter = resetIgnored.enter()
111195                     .append('div')
111196                     .attr('class', 'reset-ignored section-footer');
111197
111198                 resetIgnoredEnter
111199                     .append('a')
111200                     .attr('href', '#');
111201
111202                 // update
111203                 resetIgnored = resetIgnored
111204                     .merge(resetIgnoredEnter);
111205
111206                 resetIgnored.select('a')
111207                     .text(t('issues.reset_ignored', { count: ignoredIssues.length.toString() }));
111208
111209                 resetIgnored.on('click', function() {
111210                     context.validator().resetIgnoredIssues();
111211                 });
111212             }
111213
111214
111215             function renderRulesList(selection) {
111216                 var container = selection.selectAll('.issues-rulelist-container')
111217                     .data([0]);
111218
111219                 var containerEnter = container.enter()
111220                     .append('div')
111221                     .attr('class', 'issues-rulelist-container');
111222
111223                 containerEnter
111224                     .append('ul')
111225                     .attr('class', 'layer-list issue-rules-list');
111226
111227                 var ruleLinks = containerEnter
111228                     .append('div')
111229                     .attr('class', 'issue-rules-links section-footer');
111230
111231                 ruleLinks
111232                     .append('a')
111233                     .attr('class', 'issue-rules-link')
111234                     .attr('href', '#')
111235                     .text(t('issues.enable_all'))
111236                     .on('click', function() {
111237                         context.validator().disableRules([]);
111238                     });
111239
111240                 ruleLinks
111241                     .append('a')
111242                     .attr('class', 'issue-rules-link')
111243                     .attr('href', '#')
111244                     .text(t('issues.disable_all'))
111245                     .on('click', function() {
111246                         var keys = context.validator().getRuleKeys();
111247                         context.validator().disableRules(keys);
111248                     });
111249
111250
111251                 // Update
111252                 container = container
111253                     .merge(containerEnter);
111254
111255                 _rulesList = container.selectAll('.issue-rules-list');
111256
111257                 updateRulesList();
111258             }
111259
111260
111261             function updateRulesList() {
111262                 var ruleKeys = context.validator().getRuleKeys();
111263                 _rulesList
111264                     .call(drawListItems, ruleKeys, 'checkbox', 'rule', toggleRule, isRuleEnabled);
111265             }
111266
111267
111268             function isRuleEnabled(d) {
111269                 return context.validator().isRuleEnabled(d);
111270             }
111271
111272
111273             function toggleRule(d) {
111274                 context.validator().toggleRule(d);
111275             }
111276
111277             function setNoIssuesText() {
111278
111279                 function checkForHiddenIssues(cases) {
111280                     for (var type in cases) {
111281                         var opts = cases[type];
111282                         var hiddenIssues = context.validator().getIssues(opts);
111283                         if (hiddenIssues.length) {
111284                             _pane.select('.issues-none .details')
111285                                 .text(t(
111286                                     'issues.no_issues.hidden_issues.' + type,
111287                                     { count: hiddenIssues.length.toString() }
111288                                 ));
111289                             return;
111290                         }
111291                     }
111292                     _pane.select('.issues-none .details')
111293                         .text(t('issues.no_issues.hidden_issues.none'));
111294                 }
111295
111296                 var messageType;
111297
111298                 if (_options.what === 'edited' && _options.where === 'visible') {
111299
111300                     messageType = 'edits_in_view';
111301
111302                     checkForHiddenIssues({
111303                         elsewhere: { what: 'edited', where: 'all' },
111304                         everything_else: { what: 'all', where: 'visible' },
111305                         disabled_rules: { what: 'edited', where: 'visible', includeDisabledRules: 'only' },
111306                         everything_else_elsewhere: { what: 'all', where: 'all' },
111307                         disabled_rules_elsewhere: { what: 'edited', where: 'all', includeDisabledRules: 'only' },
111308                         ignored_issues: { what: 'edited', where: 'visible', includeIgnored: 'only' },
111309                         ignored_issues_elsewhere: { what: 'edited', where: 'all', includeIgnored: 'only' }
111310                     });
111311
111312                 } else if (_options.what === 'edited' && _options.where === 'all') {
111313
111314                     messageType = 'edits';
111315
111316                     checkForHiddenIssues({
111317                         everything_else: { what: 'all', where: 'all' },
111318                         disabled_rules: { what: 'edited', where: 'all', includeDisabledRules: 'only' },
111319                         ignored_issues: { what: 'edited', where: 'all', includeIgnored: 'only' }
111320                     });
111321
111322                 } else if (_options.what === 'all' && _options.where === 'visible') {
111323
111324                     messageType = 'everything_in_view';
111325
111326                     checkForHiddenIssues({
111327                         elsewhere: { what: 'all', where: 'all' },
111328                         disabled_rules: { what: 'all', where: 'visible', includeDisabledRules: 'only' },
111329                         disabled_rules_elsewhere: { what: 'all', where: 'all', includeDisabledRules: 'only' },
111330                         ignored_issues: { what: 'all', where: 'visible', includeIgnored: 'only' },
111331                         ignored_issues_elsewhere: { what: 'all', where: 'all', includeIgnored: 'only' }
111332                     });
111333                 } else if (_options.what === 'all' && _options.where === 'all') {
111334
111335                     messageType = 'everything';
111336
111337                     checkForHiddenIssues({
111338                         disabled_rules: { what: 'all', where: 'all', includeDisabledRules: 'only' },
111339                         ignored_issues: { what: 'all', where: 'all', includeIgnored: 'only' }
111340                     });
111341                 }
111342
111343                 if (_options.what === 'edited' && context.history().difference().summary().length === 0) {
111344                     messageType = 'no_edits';
111345                 }
111346
111347                 _pane.select('.issues-none .message')
111348                     .text(t('issues.no_issues.message.' + messageType));
111349
111350             }
111351
111352
111353             function update() {
111354                 var issuesBySeverity = context.validator().getIssuesBySeverity(_options);
111355
111356                 // sort issues by distance away from the center of the map
111357                 var center = context.map().center();
111358                 var graph = context.graph();
111359                 _errors = issuesBySeverity.error.map(withDistance).sort(byDistance);
111360                 _warnings = issuesBySeverity.warning.map(withDistance).sort(byDistance);
111361
111362                 // cut off at 1000
111363                 var errorCount = _errors.length > 1000 ? '1000+' : String(_errors.length);
111364                 var warningCount = _warnings.length > 1000 ? '1000+' : String(_warnings.length);
111365                 _errors = _errors.slice(0, 1000);
111366                 _warnings = _warnings.slice(0, 1000);
111367
111368
111369                 _toggleButton.selectAll('.notification-badge')
111370                     .classed('error', (_errors.length > 0))
111371                     .classed('warning', (_errors.length === 0 && _warnings.length > 0))
111372                     .classed('hide', (_errors.length === 0 && _warnings.length === 0));
111373
111374
111375                 _pane.selectAll('.issues-errors')
111376                     .classed('hide', _errors.length === 0);
111377
111378                 if (_errors.length > 0) {
111379                     _pane.selectAll('.hide-toggle-issues_errors .hide-toggle-text')
111380                         .text(t('issues.errors.list_title', { count: errorCount }));
111381                     if (!_pane.select('.disclosure-wrap-issues_errors').classed('hide')) {
111382                         _errorsSelection
111383                             .call(drawIssuesList, 'errors', _errors);
111384                     }
111385                 }
111386
111387                 _pane.selectAll('.issues-warnings')
111388                     .classed('hide', _warnings.length === 0);
111389
111390                 if (_warnings.length > 0) {
111391                     _pane.selectAll('.hide-toggle-issues_warnings .hide-toggle-text')
111392                         .text(t('issues.warnings.list_title', { count: warningCount }));
111393                     if (!_pane.select('.disclosure-wrap-issues_warnings').classed('hide')) {
111394                         _warningsSelection
111395                             .call(drawIssuesList, 'warnings', _warnings);
111396                         renderIgnoredIssuesReset(_warningsSelection);
111397                     }
111398                 }
111399
111400                 var hasIssues = _warnings.length > 0 || _errors.length > 0;
111401
111402                 var issuesNone = _pane.select('.issues-none');
111403                 issuesNone.classed('hide', hasIssues);
111404                 if (!hasIssues) {
111405                     renderIgnoredIssuesReset(issuesNone);
111406                     setNoIssuesText();
111407                 }
111408
111409                 if (!_pane.select('.disclosure-wrap-issues_rules').classed('hide')) {
111410                     updateRulesList();
111411                 }
111412
111413
111414                 function byDistance(a, b) {
111415                     return a.dist - b.dist;
111416                 }
111417
111418                 function withDistance(issue) {
111419                     var extent = issue.extent(graph);
111420                     var dist = extent ? geoSphericalDistance(center, extent.center()) : 0;
111421                     return Object.assign(issue, { dist: dist });
111422                 }
111423             }
111424
111425
111426             function drawListItems(selection, data, type, name, change, active) {
111427                 var items = selection.selectAll('li')
111428                     .data(data);
111429
111430                 // Exit
111431                 items.exit()
111432                     .remove();
111433
111434                 // Enter
111435                 var enter = items.enter()
111436                     .append('li');
111437
111438                 if (name === 'rule') {
111439                     enter
111440                         .call(tooltip()
111441                             .title(function(d) { return t('issues.' + d + '.tip'); })
111442                             .placement('top')
111443                         );
111444                 }
111445
111446                 var label = enter
111447                     .append('label');
111448
111449                 label
111450                     .append('input')
111451                     .attr('type', type)
111452                     .attr('name', name)
111453                     .on('change', change);
111454
111455                 label
111456                     .append('span')
111457                     .html(function(d) {
111458                         var params = {};
111459                         if (d === 'unsquare_way') {
111460                             params.val = '<span class="square-degrees"></span>';
111461                         }
111462                         return t('issues.' + d + '.title', params);
111463                     });
111464
111465                 // Update
111466                 items = items
111467                     .merge(enter);
111468
111469                 items
111470                     .classed('active', active)
111471                     .selectAll('input')
111472                     .property('checked', active)
111473                     .property('indeterminate', false);
111474
111475
111476                 // user-configurable square threshold
111477                 var degStr = context.storage('validate-square-degrees');
111478                 if (degStr === null) {
111479                     degStr = '' + DEFAULTSQUARE;
111480                 }
111481
111482                 var span = items.selectAll('.square-degrees');
111483                 var input = span.selectAll('.square-degrees-input')
111484                     .data([0]);
111485
111486                 // enter / update
111487                 input.enter()
111488                     .append('input')
111489                     .attr('type', 'number')
111490                     .attr('min', '' + MINSQUARE)
111491                     .attr('max', '' + MAXSQUARE)
111492                     .attr('step', '0.5')
111493                     .attr('class', 'square-degrees-input')
111494                     .call(utilNoAuto)
111495                     .on('click', function () {
111496                         event.preventDefault();
111497                         event.stopPropagation();
111498                         this.select();
111499                     })
111500                     .on('keyup', function () {
111501                         if (event.keyCode === 13) { // enter
111502                             this.blur();
111503                             this.select();
111504                         }
111505                     })
111506                     .on('blur', changeSquare)
111507                     .merge(input)
111508                     .property('value', degStr);
111509             }
111510
111511
111512             function changeSquare() {
111513                 var input = d3_select(this);
111514                 var degStr = utilGetSetValue(input).trim();
111515                 var degNum = parseFloat(degStr, 10);
111516
111517                 if (!isFinite(degNum)) {
111518                     degNum = DEFAULTSQUARE;
111519                 } else if (degNum > MAXSQUARE) {
111520                     degNum = MAXSQUARE;
111521                 } else if (degNum < MINSQUARE) {
111522                     degNum = MINSQUARE;
111523                 }
111524
111525                 degNum = Math.round(degNum * 10 ) / 10;   // round to 1 decimal
111526                 degStr = '' + degNum;
111527
111528                 input
111529                     .property('value', degStr);
111530
111531                 context.storage('validate-square-degrees', degStr);
111532                 context.validator().reloadUnsquareIssues();
111533             }
111534
111535
111536             function hidePane() {
111537                 context.ui().togglePanes();
111538             }
111539
111540
111541
111542             var paneTooltip = tooltip()
111543                 .placement((textDirection === 'rtl') ? 'right' : 'left')
111544                 .html(true)
111545                 .title(uiTooltipHtml(t('issues.title'), key));
111546
111547
111548
111549             uiIssues.togglePane = function() {
111550                 if (event) { event.preventDefault(); }
111551                 paneTooltip.hide();
111552                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
111553             };
111554
111555
111556             uiIssues.renderToggleButton = function(selection) {
111557                 _toggleButton = selection
111558                     .append('button')
111559                     .on('click', uiIssues.togglePane)
111560                     .call(svgIcon('#iD-icon-alert', 'light'))
111561                     .call(addNotificationBadge)
111562                     .call(paneTooltip);
111563             };
111564
111565
111566             uiIssues.renderPane = function(selection) {
111567                 _pane = selection
111568                     .append('div')
111569                     .attr('class', 'fillL map-pane issues-pane hide')
111570                     .attr('pane', 'map-issues');
111571
111572                 var heading = _pane
111573                     .append('div')
111574                     .attr('class', 'pane-heading');
111575
111576                 heading
111577                     .append('h2')
111578                     .text(t('issues.title'));
111579
111580                 heading
111581                     .append('button')
111582                     .on('click', hidePane)
111583                     .call(svgIcon('#iD-icon-close'));
111584
111585                 var content = _pane
111586                     .append('div')
111587                     .attr('class', 'pane-content');
111588
111589                 content
111590                     .append('div')
111591                     .attr('class', 'issues-options')
111592                     .call(renderIssuesOptions);
111593
111594                 content
111595                     .append('div')
111596                     .attr('class', 'issues-none')
111597                     .call(renderNoIssuesBox);
111598
111599                 // errors
111600                 content
111601                     .append('div')
111602                     .attr('class', 'issues-errors')
111603                     .call(uiDisclosure(context, 'issues_errors', true)
111604                         .content(renderErrorsList)
111605                     );
111606
111607                 // warnings
111608                 content
111609                     .append('div')
111610                     .attr('class', 'issues-warnings')
111611                     .call(uiDisclosure(context, 'issues_warnings', true)
111612                         .content(renderWarningsList)
111613                     );
111614
111615                 // rules
111616                 content
111617                     .append('div')
111618                     .attr('class', 'issues-rules')
111619                     .call(uiDisclosure(context, 'issues_rules', false)
111620                         .title(t('issues.rules.title'))
111621                         .content(renderRulesList)
111622                     );
111623
111624                 // update();
111625
111626                 context.keybinding()
111627                     .on(key, uiIssues.togglePane);
111628             };
111629
111630             return uiIssues;
111631         }
111632
111633         function uiIssuesInfo(context) {
111634
111635             var warningsItem = {
111636                 id: 'warnings',
111637                 count: 0,
111638                 iconID: 'iD-icon-alert',
111639                 descriptionID: 'issues.warnings_and_errors'
111640             };
111641
111642             var resolvedItem = {
111643                 id: 'resolved',
111644                 count: 0,
111645                 iconID: 'iD-icon-apply',
111646                 descriptionID: 'issues.user_resolved_issues'
111647             };
111648
111649             function update(selection) {
111650
111651                 var shownItems = [];
111652
111653                 if (context.storage('validate-what') === 'all') {
111654
111655                     var liveIssues = context.validator().getIssues({
111656                         what: context.storage('validate-what') || 'edited',
111657                         where: context.storage('validate-where') || 'all'
111658                     });
111659                     if (liveIssues.length) {
111660                         warningsItem.count = liveIssues.length;
111661                         shownItems.push(warningsItem);
111662                     }
111663
111664                     var resolvedIssues = context.validator().getResolvedIssues();
111665                     if (resolvedIssues.length) {
111666                         resolvedItem.count = resolvedIssues.length;
111667                         shownItems.push(resolvedItem);
111668                     }
111669                 }
111670
111671                 var chips = selection.selectAll('.chip')
111672                     .data(shownItems, function(d) {
111673                         return d.id;
111674                     });
111675
111676                 chips.exit().remove();
111677
111678                 var enter = chips.enter()
111679                     .append('a')
111680                     .attr('class', function(d) {
111681                         return 'chip ' + d.id + '-count';
111682                     })
111683                     .attr('href', '#')
111684                     .attr('tabindex', -1)
111685                     .each(function(d) {
111686
111687                         var chipSelection = d3_select(this);
111688
111689                         var tooltipBehavior = tooltip()
111690                             .placement('top')
111691                             .title(t(d.descriptionID));
111692
111693                         chipSelection
111694                             .call(tooltipBehavior)
111695                             .on('click', function() {
111696                                 event.preventDefault();
111697
111698                                 tooltipBehavior.hide(d3_select(this));
111699                                 // open the Issues pane
111700                                 context.ui().togglePanes(d3_select('.map-panes .issues-pane'));
111701                             });
111702
111703                         chipSelection.call(svgIcon('#' + d.iconID));
111704
111705                     });
111706
111707                 enter.append('span')
111708                     .attr('class', 'count');
111709
111710                 enter.merge(chips)
111711                     .selectAll('span.count')
111712                     .text(function(d) {
111713                         return d.count.toString();
111714                     });
111715             }
111716
111717
111718             return function(selection) {
111719                 update(selection);
111720
111721                 context.validator().on('validated.infobox', function() {
111722                     update(selection);
111723                 });
111724             };
111725         }
111726
111727         function uiSettingsCustomData(context) {
111728             var dispatch$1 = dispatch('change');
111729
111730             function render(selection) {
111731                 var dataLayer = context.layers().layer('data');
111732
111733                 // keep separate copies of original and current settings
111734                 var _origSettings = {
111735                     fileList: (dataLayer && dataLayer.fileList()) || null,
111736                     url: context.storage('settings-custom-data-url')
111737                 };
111738                 var _currSettings = {
111739                     fileList: (dataLayer && dataLayer.fileList()) || null,
111740                     url: context.storage('settings-custom-data-url')
111741                 };
111742
111743                 // var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png';
111744                 var modal = uiConfirm(selection).okButton();
111745
111746                 modal
111747                     .classed('settings-modal settings-custom-data', true);
111748
111749                 modal.select('.modal-section.header')
111750                     .append('h3')
111751                     .text(t('settings.custom_data.header'));
111752
111753
111754                 var textSection = modal.select('.modal-section.message-text');
111755
111756                 textSection
111757                     .append('pre')
111758                     .attr('class', 'instructions-file')
111759                     .text(t('settings.custom_data.file.instructions'));
111760
111761                 textSection
111762                     .append('input')
111763                     .attr('class', 'field-file')
111764                     .attr('type', 'file')
111765                     .property('files', _currSettings.fileList)  // works for all except IE11
111766                     .on('change', function() {
111767                         var files = event.target.files;
111768                         if (files && files.length) {
111769                             _currSettings.url = '';
111770                             textSection.select('.field-url').property('value', '');
111771                             _currSettings.fileList = files;
111772                         } else {
111773                             _currSettings.fileList = null;
111774                         }
111775                     });
111776
111777                 textSection
111778                     .append('h4')
111779                     .text(t('settings.custom_data.or'));
111780
111781                 textSection
111782                     .append('pre')
111783                     .attr('class', 'instructions-url')
111784                     .text(t('settings.custom_data.url.instructions'));
111785
111786                 textSection
111787                     .append('textarea')
111788                     .attr('class', 'field-url')
111789                     .attr('placeholder', t('settings.custom_data.url.placeholder'))
111790                     .call(utilNoAuto)
111791                     .property('value', _currSettings.url);
111792
111793
111794                 // insert a cancel button
111795                 var buttonSection = modal.select('.modal-section.buttons');
111796
111797                 buttonSection
111798                     .insert('button', '.ok-button')
111799                     .attr('class', 'button cancel-button secondary-action')
111800                     .text(t('confirm.cancel'));
111801
111802
111803                 buttonSection.select('.cancel-button')
111804                     .on('click.cancel', clickCancel);
111805
111806                 buttonSection.select('.ok-button')
111807                     .attr('disabled', isSaveDisabled)
111808                     .on('click.save', clickSave);
111809
111810
111811                 function isSaveDisabled() {
111812                     return null;
111813                 }
111814
111815
111816                 // restore the original url
111817                 function clickCancel() {
111818                     textSection.select('.field-url').property('value', _origSettings.url);
111819                     context.storage('settings-custom-data-url', _origSettings.url);
111820                     this.blur();
111821                     modal.close();
111822                 }
111823
111824                 // accept the current url
111825                 function clickSave() {
111826                     _currSettings.url = textSection.select('.field-url').property('value').trim();
111827
111828                     // one or the other but not both
111829                     if (_currSettings.url) { _currSettings.fileList = null; }
111830                     if (_currSettings.fileList) { _currSettings.url = ''; }
111831
111832                     context.storage('settings-custom-data-url', _currSettings.url);
111833                     this.blur();
111834                     modal.close();
111835                     dispatch$1.call('change', this, _currSettings);
111836                 }
111837             }
111838
111839             return utilRebind(render, dispatch$1, 'on');
111840         }
111841
111842         function uiMapData(context) {
111843             var key = t('map_data.key');
111844             var osmDataToggleKey = uiCmd('⌥' + t('area_fill.wireframe.key'));
111845             var features = context.features().keys();
111846             var layers = context.layers();
111847             var fills = ['wireframe', 'partial', 'full'];
111848
111849             var settingsCustomData = uiSettingsCustomData(context)
111850                 .on('change', customChanged);
111851
111852             var _pane = d3_select(null);
111853
111854             var _fillSelected = context.storage('area-fill') || 'partial';
111855             var _dataLayerContainer = d3_select(null);
111856             var _photoOverlayContainer = d3_select(null);
111857             var _fillList = d3_select(null);
111858             var _featureList = d3_select(null);
111859             var _visualDiffList = d3_select(null);
111860             var _QAList = d3_select(null);
111861
111862
111863             function showsFeature(d) {
111864                 return context.features().enabled(d);
111865             }
111866
111867
111868             function autoHiddenFeature(d) {
111869                 if (d.type === 'kr_error') { return context.errors().autoHidden(d); }
111870                 return context.features().autoHidden(d);
111871             }
111872
111873
111874             function clickFeature(d) {
111875                 context.features().toggle(d);
111876                 update();
111877             }
111878
111879
111880             function showsQA(d) {
111881                 var QAKeys = [d];
111882                 var QALayers = layers.all().filter(function(obj) { return QAKeys.indexOf(obj.id) !== -1; });
111883                 var data = QALayers.filter(function(obj) { return obj.layer.supported(); });
111884
111885                 function layerSupported(d) {
111886                     return d.layer && d.layer.supported();
111887                 }
111888                 function layerEnabled(d) {
111889                     return layerSupported(d) && d.layer.enabled();
111890                 }
111891
111892                 return layerEnabled(data[0]);
111893             }
111894
111895
111896             function showsFill(d) {
111897                 return _fillSelected === d;
111898             }
111899
111900
111901             function setFill(d) {
111902                 fills.forEach(function(opt) {
111903                     context.surface().classed('fill-' + opt, Boolean(opt === d));
111904                 });
111905
111906                 _fillSelected = d;
111907                 context.storage('area-fill', d);
111908                 if (d !== 'wireframe') {
111909                     context.storage('area-fill-toggle', d);
111910                 }
111911                 update();
111912             }
111913
111914
111915             function toggleHighlightEdited() {
111916                 event.preventDefault();
111917                 var surface = context.surface();
111918                 surface.classed('highlight-edited', !surface.classed('highlight-edited'));
111919                 updateVisualDiffList();
111920
111921                 context.map().pan([0,0]);  // trigger a redraw
111922             }
111923
111924
111925             function showsLayer(which) {
111926                 var layer = layers.layer(which);
111927                 if (layer) {
111928                     return layer.enabled();
111929                 }
111930                 return false;
111931             }
111932
111933
111934             function setLayer(which, enabled) {
111935                 // Don't allow layer changes while drawing - #6584
111936                 var mode = context.mode();
111937                 if (mode && /^draw/.test(mode.id)) { return; }
111938
111939                 var layer = layers.layer(which);
111940                 if (layer) {
111941                     layer.enabled(enabled);
111942
111943                     if (!enabled && (which === 'osm' || which === 'notes')) {
111944                         context.enter(modeBrowse(context));
111945                     }
111946
111947                     update();
111948                 }
111949             }
111950
111951
111952             function toggleLayer(which) {
111953                 setLayer(which, !showsLayer(which));
111954             }
111955
111956
111957             function drawPhotoItems(selection) {
111958                 var photoKeys = context.photos().overlayLayerIDs();
111959                 var photoLayers = layers.all().filter(function(obj) { return photoKeys.indexOf(obj.id) !== -1; });
111960                 var data = photoLayers.filter(function(obj) { return obj.layer.supported(); });
111961
111962                 function layerSupported(d) {
111963                     return d.layer && d.layer.supported();
111964                 }
111965                 function layerEnabled(d) {
111966                     return layerSupported(d) && d.layer.enabled();
111967                 }
111968
111969                 var ul = selection
111970                     .selectAll('.layer-list-photos')
111971                     .data([0]);
111972
111973                 ul = ul.enter()
111974                     .append('ul')
111975                     .attr('class', 'layer-list layer-list-photos')
111976                     .merge(ul);
111977
111978                 var li = ul.selectAll('.list-item-photos')
111979                     .data(data);
111980
111981                 li.exit()
111982                     .remove();
111983
111984                 var liEnter = li.enter()
111985                     .append('li')
111986                     .attr('class', function(d) {
111987                         var classes = 'list-item-photos list-item-' + d.id;
111988                         if (d.id === 'mapillary-signs' || d.id === 'mapillary-map-features') {
111989                             classes += ' indented';
111990                         }
111991                         return classes;
111992                     });
111993
111994                 var labelEnter = liEnter
111995                     .append('label')
111996                     .each(function(d) {
111997                         var titleID;
111998                         if (d.id === 'mapillary-signs') { titleID = 'mapillary.signs.tooltip'; }
111999                         else if (d.id === 'mapillary') { titleID = 'mapillary_images.tooltip'; }
112000                         else if (d.id === 'openstreetcam') { titleID = 'openstreetcam_images.tooltip'; }
112001                         else { titleID = d.id.replace(/-/g, '_') + '.tooltip'; }
112002                         d3_select(this)
112003                             .call(tooltip()
112004                                 .title(t(titleID))
112005                                 .placement('top')
112006                             );
112007                     });
112008
112009                 labelEnter
112010                     .append('input')
112011                     .attr('type', 'checkbox')
112012                     .on('change', function(d) { toggleLayer(d.id); });
112013
112014                 labelEnter
112015                     .append('span')
112016                     .text(function(d) {
112017                         var id = d.id;
112018                         if (id === 'mapillary-signs') { id = 'photo_overlays.traffic_signs'; }
112019                         return t(id.replace(/-/g, '_') + '.title');
112020                     });
112021
112022                 labelEnter
112023                     .filter(function(d) { return d.id === 'mapillary-map-features'; })
112024                     .append('a')
112025                     .attr('class', 'request-data-link')
112026                     .attr('target', '_blank')
112027                     .attr('tabindex', -1)
112028                     .call(svgIcon('#iD-icon-out-link', 'inline'))
112029                     .attr('href', 'https://mapillary.github.io/mapillary_solutions/data-request')
112030                     .append('span')
112031                     .text(t('mapillary_map_features.request_data'));
112032
112033
112034                 // Update
112035                 li
112036                     .merge(liEnter)
112037                     .classed('active', layerEnabled)
112038                     .selectAll('input')
112039                     .property('checked', layerEnabled);
112040             }
112041
112042             function drawPhotoTypeItems(selection) {
112043                 var data = context.photos().allPhotoTypes();
112044
112045                 function typeEnabled(d) {
112046                     return context.photos().showsPhotoType(d);
112047                 }
112048
112049                 var ul = selection
112050                     .selectAll('.layer-list-photo-types')
112051                     .data(context.photos().shouldFilterByPhotoType() ? [0] : []);
112052
112053                 ul.exit()
112054                     .remove();
112055
112056                 ul = ul.enter()
112057                     .append('ul')
112058                     .attr('class', 'layer-list layer-list-photo-types')
112059                     .merge(ul);
112060
112061                 var li = ul.selectAll('.list-item-photo-types')
112062                     .data(data);
112063
112064                 li.exit()
112065                     .remove();
112066
112067                 var liEnter = li.enter()
112068                     .append('li')
112069                     .attr('class', function(d) {
112070                         return 'list-item-photo-types list-item-' + d;
112071                     });
112072
112073                 var labelEnter = liEnter
112074                     .append('label')
112075                     .each(function(d) {
112076                         d3_select(this)
112077                             .call(tooltip()
112078                                 .title(t('photo_overlays.photo_type.' + d + '.tooltip'))
112079                                 .placement('top')
112080                             );
112081                     });
112082
112083                 labelEnter
112084                     .append('input')
112085                     .attr('type', 'checkbox')
112086                     .on('change', function(d) {
112087                         context.photos().togglePhotoType(d);
112088                         update();
112089                     });
112090
112091                 labelEnter
112092                     .append('span')
112093                     .text(function(d) {
112094                         return t('photo_overlays.photo_type.' + d + '.title');
112095                     });
112096
112097
112098                 // Update
112099                 li
112100                     .merge(liEnter)
112101                     .classed('active', typeEnabled)
112102                     .selectAll('input')
112103                     .property('checked', typeEnabled);
112104             }
112105
112106
112107             function drawOsmItems(selection) {
112108                 var osmKeys = ['osm', 'notes'];
112109                 var osmLayers = layers.all().filter(function(obj) { return osmKeys.indexOf(obj.id) !== -1; });
112110
112111                 var ul = selection
112112                     .selectAll('.layer-list-osm')
112113                     .data([0]);
112114
112115                 ul = ul.enter()
112116                     .append('ul')
112117                     .attr('class', 'layer-list layer-list-osm')
112118                     .merge(ul);
112119
112120                 var li = ul.selectAll('.list-item')
112121                     .data(osmLayers);
112122
112123                 li.exit()
112124                     .remove();
112125
112126                 var liEnter = li.enter()
112127                     .append('li')
112128                     .attr('class', function(d) { return 'list-item list-item-' + d.id; });
112129
112130                 var labelEnter = liEnter
112131                     .append('label')
112132                     .each(function(d) {
112133                         if (d.id === 'osm') {
112134                             d3_select(this)
112135                                 .call(tooltip()
112136                                     .html(true)
112137                                     .title(uiTooltipHtml(t('map_data.layers.' + d.id + '.tooltip'), osmDataToggleKey))
112138                                     .placement('bottom')
112139                                 );
112140                         } else {
112141                             d3_select(this)
112142                                 .call(tooltip()
112143                                     .title(t('map_data.layers.' + d.id + '.tooltip'))
112144                                     .placement('bottom')
112145                                 );
112146                         }
112147                     });
112148
112149                 labelEnter
112150                     .append('input')
112151                     .attr('type', 'checkbox')
112152                     .on('change', function(d) { toggleLayer(d.id); });
112153
112154                 labelEnter
112155                     .append('span')
112156                     .text(function(d) { return t('map_data.layers.' + d.id + '.title'); });
112157
112158
112159                 // Update
112160                 li
112161                     .merge(liEnter)
112162                     .classed('active', function (d) { return d.layer.enabled(); })
112163                     .selectAll('input')
112164                     .property('checked', function (d) { return d.layer.enabled(); });
112165             }
112166
112167
112168             function drawQAItems(selection) {
112169                 var qaKeys = ['keepRight', 'improveOSM'];
112170                 var qaLayers = layers.all().filter(function(obj) { return qaKeys.indexOf(obj.id) !== -1; });
112171
112172                 var ul = selection
112173                     .selectAll('.layer-list-qa')
112174                     .data([0]);
112175
112176                 ul = ul.enter()
112177                     .append('ul')
112178                     .attr('class', 'layer-list layer-list-qa')
112179                     .merge(ul);
112180
112181                 var li = ul.selectAll('.list-item')
112182                     .data(qaLayers);
112183
112184                 li.exit()
112185                     .remove();
112186
112187                 var liEnter = li.enter()
112188                     .append('li')
112189                     .attr('class', function(d) { return 'list-item list-item-' + d.id; });
112190
112191                 var labelEnter = liEnter
112192                     .append('label')
112193                     .each(function(d) {
112194                         d3_select(this)
112195                             .call(tooltip()
112196                                 .title(t('map_data.layers.' + d.id + '.tooltip'))
112197                                 .placement('bottom')
112198                             );
112199                     });
112200
112201                 labelEnter
112202                     .append('input')
112203                     .attr('type', 'checkbox')
112204                     .on('change', function(d) { toggleLayer(d.id); });
112205
112206                 labelEnter
112207                     .append('span')
112208                     .text(function(d) { return t('map_data.layers.' + d.id + '.title'); });
112209
112210
112211                 // Update
112212                 li
112213                     .merge(liEnter)
112214                     .classed('active', function (d) { return d.layer.enabled(); })
112215                     .selectAll('input')
112216                     .property('checked', function (d) { return d.layer.enabled(); });
112217             }
112218
112219
112220             // Beta feature - sample vector layers to support Detroit Mapping Challenge
112221             // https://github.com/osmus/detroit-mapping-challenge
112222             function drawVectorItems(selection) {
112223                 var dataLayer = layers.layer('data');
112224                 var vtData = [
112225                     {
112226                         name: 'Detroit Neighborhoods/Parks',
112227                         src: 'neighborhoods-parks',
112228                         tooltip: 'Neighborhood boundaries and parks as compiled by City of Detroit in concert with community groups.',
112229                         template: 'https://{switch:a,b,c,d}.tiles.mapbox.com/v4/jonahadkins.cjksmur6x34562qp9iv1u3ksf-54hev,jonahadkins.cjksmqxdx33jj2wp90xd9x2md-4e5y2/{z}/{x}/{y}.vector.pbf?access_token=pk.eyJ1Ijoiam9uYWhhZGtpbnMiLCJhIjoiRlVVVkx3VSJ9.9sdVEK_B_VkEXPjssU5MqA'
112230                     }, {
112231                         name: 'Detroit Composite POIs',
112232                         src: 'composite-poi',
112233                         tooltip: 'Fire Inspections, Business Licenses, and other public location data collated from the City of Detroit.',
112234                         template: 'https://{switch:a,b,c,d}.tiles.mapbox.com/v4/jonahadkins.cjksmm6a02sli31myxhsr7zf3-2sw8h/{z}/{x}/{y}.vector.pbf?access_token=pk.eyJ1Ijoiam9uYWhhZGtpbnMiLCJhIjoiRlVVVkx3VSJ9.9sdVEK_B_VkEXPjssU5MqA'
112235                     }, {
112236                         name: 'Detroit All-The-Places POIs',
112237                         src: 'alltheplaces-poi',
112238                         tooltip: 'Public domain business location data created by web scrapers.',
112239                         template: 'https://{switch:a,b,c,d}.tiles.mapbox.com/v4/jonahadkins.cjksmswgk340g2vo06p1w9w0j-8fjjc/{z}/{x}/{y}.vector.pbf?access_token=pk.eyJ1Ijoiam9uYWhhZGtpbnMiLCJhIjoiRlVVVkx3VSJ9.9sdVEK_B_VkEXPjssU5MqA'
112240                     }
112241                 ];
112242
112243                 // Only show this if the map is around Detroit..
112244                 var detroit = geoExtent([-83.5, 42.1], [-82.8, 42.5]);
112245                 var showVectorItems = (context.map().zoom() > 9 && detroit.contains(context.map().center()));
112246
112247                 var container = selection.selectAll('.vectortile-container')
112248                     .data(showVectorItems ? [0] : []);
112249
112250                 container.exit()
112251                     .remove();
112252
112253                 var containerEnter = container.enter()
112254                     .append('div')
112255                     .attr('class', 'vectortile-container');
112256
112257                 containerEnter
112258                     .append('h4')
112259                     .attr('class', 'vectortile-header')
112260                     .text('Detroit Vector Tiles (Beta)');
112261
112262                 containerEnter
112263                     .append('ul')
112264                     .attr('class', 'layer-list layer-list-vectortile');
112265
112266                 containerEnter
112267                     .append('div')
112268                     .attr('class', 'vectortile-footer')
112269                     .append('a')
112270                     .attr('target', '_blank')
112271                     .attr('tabindex', -1)
112272                     .call(svgIcon('#iD-icon-out-link', 'inline'))
112273                     .attr('href', 'https://github.com/osmus/detroit-mapping-challenge')
112274                     .append('span')
112275                     .text('About these layers');
112276
112277                 container = container
112278                     .merge(containerEnter);
112279
112280
112281                 var ul = container.selectAll('.layer-list-vectortile');
112282
112283                 var li = ul.selectAll('.list-item')
112284                     .data(vtData);
112285
112286                 li.exit()
112287                     .remove();
112288
112289                 var liEnter = li.enter()
112290                     .append('li')
112291                     .attr('class', function(d) { return 'list-item list-item-' + d.src; });
112292
112293                 var labelEnter = liEnter
112294                     .append('label')
112295                     .each(function(d) {
112296                         d3_select(this).call(
112297                             tooltip().title(d.tooltip).placement('top')
112298                         );
112299                     });
112300
112301                 labelEnter
112302                     .append('input')
112303                     .attr('type', 'radio')
112304                     .attr('name', 'vectortile')
112305                     .on('change', selectVTLayer);
112306
112307                 labelEnter
112308                     .append('span')
112309                     .text(function(d) { return d.name; });
112310
112311                 // Update
112312                 li
112313                     .merge(liEnter)
112314                     .classed('active', isVTLayerSelected)
112315                     .selectAll('input')
112316                     .property('checked', isVTLayerSelected);
112317
112318
112319                 function isVTLayerSelected(d) {
112320                     return dataLayer && dataLayer.template() === d.template;
112321                 }
112322
112323                 function selectVTLayer(d) {
112324                     context.storage('settings-custom-data-url', d.template);
112325                     if (dataLayer) {
112326                         dataLayer.template(d.template, d.src);
112327                         dataLayer.enabled(true);
112328                     }
112329                 }
112330             }
112331
112332
112333             function drawCustomDataItems(selection) {
112334                 var dataLayer = layers.layer('data');
112335                 var hasData = dataLayer && dataLayer.hasData();
112336                 var showsData = hasData && dataLayer.enabled();
112337
112338                 var ul = selection
112339                     .selectAll('.layer-list-data')
112340                     .data(dataLayer ? [0] : []);
112341
112342                 // Exit
112343                 ul.exit()
112344                     .remove();
112345
112346                 // Enter
112347                 var ulEnter = ul.enter()
112348                     .append('ul')
112349                     .attr('class', 'layer-list layer-list-data');
112350
112351                 var liEnter = ulEnter
112352                     .append('li')
112353                     .attr('class', 'list-item-data');
112354
112355                 var labelEnter = liEnter
112356                     .append('label')
112357                     .call(tooltip()
112358                         .title(t('map_data.layers.custom.tooltip'))
112359                         .placement('top')
112360                     );
112361
112362                 labelEnter
112363                     .append('input')
112364                     .attr('type', 'checkbox')
112365                     .on('change', function() { toggleLayer('data'); });
112366
112367                 labelEnter
112368                     .append('span')
112369                     .text(t('map_data.layers.custom.title'));
112370
112371                 liEnter
112372                     .append('button')
112373                     .call(tooltip()
112374                         .title(t('settings.custom_data.tooltip'))
112375                         .placement((textDirection === 'rtl') ? 'right' : 'left')
112376                     )
112377                     .on('click', editCustom)
112378                     .call(svgIcon('#iD-icon-more'));
112379
112380                 liEnter
112381                     .append('button')
112382                     .call(tooltip()
112383                         .title(t('map_data.layers.custom.zoom'))
112384                         .placement((textDirection === 'rtl') ? 'right' : 'left')
112385                     )
112386                     .on('click', function() {
112387                         event.preventDefault();
112388                         event.stopPropagation();
112389                         dataLayer.fitZoom();
112390                     })
112391                     .call(svgIcon('#iD-icon-search'));
112392
112393                 // Update
112394                 ul = ul
112395                     .merge(ulEnter);
112396
112397                 ul.selectAll('.list-item-data')
112398                     .classed('active', showsData)
112399                     .selectAll('label')
112400                     .classed('deemphasize', !hasData)
112401                     .selectAll('input')
112402                     .property('disabled', !hasData)
112403                     .property('checked', showsData);
112404             }
112405
112406
112407             function editCustom() {
112408                 event.preventDefault();
112409                 context.container()
112410                     .call(settingsCustomData);
112411             }
112412
112413
112414             function customChanged(d) {
112415                 var dataLayer = layers.layer('data');
112416
112417                 if (d && d.url) {
112418                     dataLayer.url(d.url);
112419                 } else if (d && d.fileList) {
112420                     dataLayer.fileList(d.fileList);
112421                 }
112422             }
112423
112424
112425             function drawListItems(selection, data, type, name, change, active) {
112426                 var items = selection.selectAll('li')
112427                     .data(data);
112428
112429                 // Exit
112430                 items.exit()
112431                     .remove();
112432
112433                 // Enter
112434                 var enter = items.enter()
112435                     .append('li')
112436                     .call(tooltip()
112437                         .html(true)
112438                         .title(function(d) {
112439                             var tip = t(name + '.' + d + '.tooltip');
112440                             var key = (d === 'wireframe' ? t('area_fill.wireframe.key') : null);
112441                             if (d === 'highlight_edits') { key = t('map_data.highlight_edits.key'); }
112442
112443                             if ((name === 'feature' || name === 'keepRight') && autoHiddenFeature(d)) {
112444                                 var msg = showsLayer('osm') ? t('map_data.autohidden') : t('map_data.osmhidden');
112445                                 tip += '<div>' + msg + '</div>';
112446                             }
112447                             return uiTooltipHtml(tip, key);
112448                         })
112449                         .placement('top')
112450                     );
112451
112452                 var label = enter
112453                     .append('label');
112454
112455                 label
112456                     .append('input')
112457                     .attr('type', type)
112458                     .attr('name', name)
112459                     .on('change', change);
112460
112461                 label
112462                     .append('span')
112463                     .text(function(d) { return t(name + '.' + d + '.description'); });
112464
112465                 // Update
112466                 items = items
112467                     .merge(enter);
112468
112469                 items
112470                     .classed('active', active)
112471                     .selectAll('input')
112472                     .property('checked', active)
112473                     .property('indeterminate', function(d) {
112474                         return ((name === 'feature' || name === 'keepRight') && autoHiddenFeature(d));
112475                     });
112476             }
112477
112478
112479             function renderDataLayers(selection) {
112480                 var container = selection.selectAll('.data-layer-container')
112481                     .data([0]);
112482
112483                 _dataLayerContainer = container.enter()
112484                     .append('div')
112485                     .attr('class', 'data-layer-container')
112486                     .merge(container);
112487
112488                 updateDataLayers();
112489             }
112490
112491             function renderPhotoOverlays(selection) {
112492                 var container = selection.selectAll('.photo-overlay-container')
112493                     .data([0]);
112494
112495                 _photoOverlayContainer = container.enter()
112496                     .append('div')
112497                     .attr('class', 'photo-overlay-container')
112498                     .merge(container);
112499
112500                 updatePhotoOverlays();
112501             }
112502
112503
112504             function renderStyleOptions(selection) {
112505                 var container = selection.selectAll('.layer-fill-list')
112506                     .data([0]);
112507
112508                 _fillList = container.enter()
112509                     .append('ul')
112510                     .attr('class', 'layer-list layer-fill-list')
112511                     .merge(container);
112512
112513                 updateFillList();
112514
112515                 var container2 = selection.selectAll('.layer-visual-diff-list')
112516                     .data([0]);
112517
112518                 _visualDiffList = container2.enter()
112519                     .append('ul')
112520                     .attr('class', 'layer-list layer-visual-diff-list')
112521                     .merge(container2);
112522
112523                 updateVisualDiffList();
112524             }
112525
112526
112527             function renderFeatureList(selection) {
112528                 var container = selection.selectAll('.layer-feature-list-container')
112529                     .data([0]);
112530
112531                 var containerEnter = container.enter()
112532                     .append('div')
112533                     .attr('class', 'layer-feature-list-container');
112534
112535                 containerEnter
112536                     .append('ul')
112537                     .attr('class', 'layer-list layer-feature-list');
112538
112539                 var footer = containerEnter
112540                     .append('div')
112541                     .attr('class', 'feature-list-links section-footer');
112542
112543                 footer
112544                     .append('a')
112545                     .attr('class', 'feature-list-link')
112546                     .attr('href', '#')
112547                     .text(t('issues.enable_all'))
112548                     .on('click', function() {
112549                         context.features().enableAll();
112550                     });
112551
112552                 footer
112553                     .append('a')
112554                     .attr('class', 'feature-list-link')
112555                     .attr('href', '#')
112556                     .text(t('issues.disable_all'))
112557                     .on('click', function() {
112558                         context.features().disableAll();
112559                     });
112560
112561                 // Update
112562                 container = container
112563                     .merge(containerEnter);
112564
112565                 _featureList = container.selectAll('.layer-feature-list');
112566
112567                 updateFeatureList();
112568             }
112569
112570             function updatePhotoOverlays() {
112571                 _photoOverlayContainer
112572                     .call(drawPhotoItems)
112573                     .call(drawPhotoTypeItems);
112574             }
112575
112576             function updateDataLayers() {
112577                 _dataLayerContainer
112578                     .call(drawOsmItems)
112579                     .call(drawQAItems)
112580                     .call(drawCustomDataItems)
112581                     .call(drawVectorItems);      // Beta - Detroit mapping challenge
112582             }
112583
112584             function updateFillList() {
112585                 _fillList
112586                     .call(drawListItems, fills, 'radio', 'area_fill', setFill, showsFill);
112587             }
112588
112589             function updateVisualDiffList() {
112590                 _visualDiffList
112591                     .call(drawListItems, ['highlight_edits'], 'checkbox', 'visual_diff', toggleHighlightEdited, function() {
112592                         return context.surface().classed('highlight-edited');
112593                     });
112594             }
112595
112596             function updateFeatureList() {
112597                 _featureList
112598                     .call(drawListItems, features, 'checkbox', 'feature', clickFeature, showsFeature);
112599             }
112600
112601             function update() {
112602
112603                 if (!_pane.select('.disclosure-wrap-data_layers').classed('hide')) {
112604                     updateDataLayers();
112605                 }
112606                 if (!_pane.select('.disclosure-wrap-photo_overlays').classed('hide')) {
112607                     updatePhotoOverlays();
112608                 }
112609                 if (!_pane.select('.disclosure-wrap-fill_area').classed('hide')) {
112610                     updateFillList();
112611                 }
112612                 if (!_pane.select('.disclosure-wrap-map_features').classed('hide')) {
112613                     updateFeatureList();
112614                 }
112615
112616                 _QAList
112617                     .call(drawListItems, ['keep-right'], 'checkbox', 'QA', function(d) { toggleLayer(d); }, showsQA);
112618             }
112619
112620
112621             function toggleWireframe() {
112622                 if (event) {
112623                     event.preventDefault();
112624                     event.stopPropagation();
112625                 }
112626
112627                 if (_fillSelected === 'wireframe') {
112628                     _fillSelected = context.storage('area-fill-toggle') || 'partial';
112629                 } else {
112630                     _fillSelected = 'wireframe';
112631                 }
112632
112633                 setFill(_fillSelected);
112634                 context.map().pan([0,0]);  // trigger a redraw
112635             }
112636
112637             var paneTooltip = tooltip()
112638                 .placement((textDirection === 'rtl') ? 'right' : 'left')
112639                 .html(true)
112640                 .title(uiTooltipHtml(t('map_data.description'), key));
112641
112642             function hidePane() {
112643                 context.ui().togglePanes();
112644             }
112645
112646             uiMapData.togglePane = function() {
112647                 if (event) { event.preventDefault(); }
112648                 paneTooltip.hide();
112649                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
112650             };
112651
112652             uiMapData.renderToggleButton = function(selection) {
112653
112654                 selection
112655                     .append('button')
112656                     .on('click', uiMapData.togglePane)
112657                     .call(svgIcon('#iD-icon-data', 'light'))
112658                     .call(paneTooltip);
112659             };
112660
112661
112662             uiMapData.renderPane = function(selection) {
112663
112664                 _pane = selection
112665                     .append('div')
112666                     .attr('class', 'fillL map-pane map-data-pane hide')
112667                     .attr('pane', 'map-data');
112668
112669                 var heading = _pane
112670                     .append('div')
112671                     .attr('class', 'pane-heading');
112672
112673                 heading
112674                     .append('h2')
112675                     .text(t('map_data.title'));
112676
112677                 heading
112678                     .append('button')
112679                     .on('click', hidePane)
112680                     .call(svgIcon('#iD-icon-close'));
112681
112682
112683                 var content = _pane
112684                     .append('div')
112685                     .attr('class', 'pane-content');
112686
112687
112688                 // data layers
112689                 content
112690                     .append('div')
112691                     .attr('class', 'map-data-data-layers')
112692                     .call(uiDisclosure(context, 'data_layers', true)
112693                         .title(t('map_data.data_layers'))
112694                         .content(renderDataLayers)
112695                     );
112696
112697                 // photo overlays
112698                 content
112699                     .append('div')
112700                     .attr('class', 'map-data-photo-overlays')
112701                     .call(uiDisclosure(context, 'photo_overlays', false)
112702                         .title(t('photo_overlays.title'))
112703                         .content(renderPhotoOverlays)
112704                     );
112705
112706                 // area fills
112707                 content
112708                     .append('div')
112709                     .attr('class', 'map-data-area-fills')
112710                     .call(uiDisclosure(context, 'fill_area', false)
112711                         .title(t('map_data.style_options'))
112712                         .content(renderStyleOptions)
112713                     );
112714
112715                 // feature filters
112716                 content
112717                     .append('div')
112718                     .attr('class', 'map-data-feature-filters')
112719                     .call(uiDisclosure(context, 'map_features', false)
112720                         .title(t('map_data.map_features'))
112721                         .content(renderFeatureList)
112722                     );
112723
112724
112725                 // add listeners
112726                 context.features()
112727                     .on('change.map_data-update', update);
112728
112729                 update();
112730                 setFill(_fillSelected);
112731
112732                 context.keybinding()
112733                     .on(key, uiMapData.togglePane)
112734                     .on(t('area_fill.wireframe.key'), toggleWireframe)
112735                     .on(osmDataToggleKey, function() {
112736                         event.preventDefault();
112737                         event.stopPropagation();
112738                         toggleLayer('osm');
112739                     })
112740                     .on(t('map_data.highlight_edits.key'), toggleHighlightEdited);
112741             };
112742
112743             return uiMapData;
112744         }
112745
112746         function uiNotice(context) {
112747
112748             return function(selection) {
112749                 var div = selection
112750                     .append('div')
112751                     .attr('class', 'notice');
112752
112753                 var button = div
112754                     .append('button')
112755                     .attr('class', 'zoom-to notice fillD')
112756                     .on('click', function() {
112757                         context.map().zoomEase(context.minEditableZoom());
112758                     })
112759                     .on('wheel', function() {   // let wheel events pass through #4482
112760                         var e2 = new WheelEvent(event.type, event);
112761                         context.surface().node().dispatchEvent(e2);
112762                     });
112763
112764                 button
112765                     .call(svgIcon('#iD-icon-plus', 'pre-text'))
112766                     .append('span')
112767                     .attr('class', 'label')
112768                     .text(t('zoom_in_edit'));
112769
112770
112771                 function disableTooHigh() {
112772                     var canEdit = context.map().zoom() >= context.minEditableZoom();
112773                     div.style('display', canEdit ? 'none' : 'block');
112774                 }
112775
112776                 context.map()
112777                     .on('move.notice', debounce(disableTooHigh, 500));
112778
112779                 disableTooHigh();
112780             };
112781         }
112782
112783         function uiPhotoviewer(context) {
112784
112785             var dispatch$1 = dispatch('resize');
112786
112787             function photoviewer(selection) {
112788                 selection
112789                     .append('button')
112790                     .attr('class', 'thumb-hide')
112791                     .on('click', function () {
112792                         if (services$1.streetside) { services$1.streetside.hideViewer(); }
112793                         if (services$1.mapillary) { services$1.mapillary.hideViewer(); }
112794                         if (services$1.openstreetcam) { services$1.openstreetcam.hideViewer(); }
112795                     })
112796                     .append('div')
112797                     .call(svgIcon('#iD-icon-close'));
112798
112799                 selection
112800                     .append('button')
112801                     .attr('class', 'resize-handle-xy')
112802                     .on(
112803                         'mousedown',
112804                         buildResizeListener(selection, 'resize', dispatch$1, { resizeOnX: true, resizeOnY: true })
112805                     );
112806
112807                 selection
112808                     .append('button')
112809                     .attr('class', 'resize-handle-x')
112810                     .on(
112811                         'mousedown',
112812                         buildResizeListener(selection, 'resize', dispatch$1, { resizeOnX: true })
112813                     );
112814
112815                 selection
112816                     .append('button')
112817                     .attr('class', 'resize-handle-y')
112818                     .on(
112819                         'mousedown',
112820                         buildResizeListener(selection, 'resize', dispatch$1, { resizeOnY: true })
112821                     );
112822
112823                 services$1.streetside.loadViewer(context);
112824                 services$1.mapillary.loadViewer(context);
112825                 services$1.openstreetcam.loadViewer(context);
112826
112827                 function buildResizeListener(target, eventName, dispatch, options) {
112828                     var resizeOnX = !!options.resizeOnX;
112829                     var resizeOnY = !!options.resizeOnY;
112830                     var minHeight = options.minHeight || 240;
112831                     var minWidth = options.minWidth || 320;
112832                     var startX;
112833                     var startY;
112834                     var startWidth;
112835                     var startHeight;
112836
112837                     function startResize() {
112838                         var mapSize = context.map().dimensions();
112839
112840                         if (resizeOnX) {
112841                             var maxWidth = mapSize[0];
112842                             var newWidth = clamp((startWidth + event.clientX - startX), minWidth, maxWidth);
112843                             target.style('width', newWidth + 'px');
112844                         }
112845
112846                         if (resizeOnY) {
112847                             var maxHeight = mapSize[1] - 90;  // preserve space at top/bottom of map
112848                             var newHeight = clamp((startHeight + startY - event.clientY), minHeight, maxHeight);
112849                             target.style('height', newHeight + 'px');
112850                         }
112851
112852                         dispatch.call(eventName, target, utilGetDimensions(target, true));
112853                     }
112854
112855                     function clamp(num, min, max) {
112856                         return Math.max(min, Math.min(num, max));
112857                     }
112858
112859                     function stopResize() {
112860                         d3_select(window)
112861                             .on('.' + eventName, null);
112862                     }
112863
112864                     return function initResize() {
112865                         startX = event.clientX;
112866                         startY = event.clientY;
112867                         startWidth = target.node().getBoundingClientRect().width;
112868                         startHeight = target.node().getBoundingClientRect().height;
112869
112870                         d3_select(window)
112871                             .on('mousemove.' + eventName, startResize, false)
112872                             .on('mouseup.' + eventName, stopResize, false);
112873                     };
112874                 }
112875             }
112876
112877             photoviewer.onMapResize = function() {
112878                 var photoviewer = d3_select('#photoviewer');
112879                 var content = d3_select('#content');
112880                 var mapDimensions = utilGetDimensions(content, true);
112881                 // shrink photo viewer if it is too big
112882                 // (-90 preserves space at top and bottom of map used by menus)
112883                 var photoDimensions = utilGetDimensions(photoviewer, true);
112884                 if (photoDimensions[0] > mapDimensions[0] || photoDimensions[1] > (mapDimensions[1] - 90)) {
112885                     var setPhotoDimensions = [
112886                         Math.min(photoDimensions[0], mapDimensions[0]),
112887                         Math.min(photoDimensions[1], mapDimensions[1] - 90) ];
112888
112889                     photoviewer
112890                         .style('width', setPhotoDimensions[0] + 'px')
112891                         .style('height', setPhotoDimensions[1] + 'px');
112892
112893                     dispatch$1.call('resize', photoviewer, setPhotoDimensions);
112894                 }
112895             };
112896
112897             return utilRebind(photoviewer, dispatch$1, 'on');
112898         }
112899
112900         function uiPreferences(context) {
112901           var key = t('preferences.key');
112902           var _pane = d3_select(null);
112903           var _showThirdPartyIcons = context.storage('preferences.privacy.thirdpartyicons') || 'true';
112904
112905           var paneTooltip = tooltip()
112906             .placement((textDirection === 'rtl') ? 'right' : 'left')
112907             .html(true)
112908             .title(uiTooltipHtml(t('preferences.description'), key));
112909
112910
112911           function renderPrivacyOptions(selection) {
112912             // enter
112913             var privacyOptionsListEnter = selection.selectAll('.privacy-options-list')
112914               .data([0])
112915               .enter()
112916               .append('ul')
112917               .attr('class', 'layer-list privacy-options-list');
112918
112919             var thirdPartyIconsEnter = privacyOptionsListEnter
112920               .append('li')
112921               .attr('class', 'privacy-third-party-icons-item')
112922               .append('label')
112923               .call(tooltip()
112924                 .title(t('preferences.privacy.third_party_icons.tooltip'))
112925                 .placement('bottom')
112926               );
112927
112928             thirdPartyIconsEnter
112929               .append('input')
112930               .attr('type', 'checkbox')
112931               .on('change', function () {
112932                 event.preventDefault();
112933                 _showThirdPartyIcons = (_showThirdPartyIcons === 'true') ? 'false' : 'true';
112934                 context.storage('preferences.privacy.thirdpartyicons', _showThirdPartyIcons);
112935                 update();
112936               });
112937
112938             thirdPartyIconsEnter
112939               .append('span')
112940               .text(t('preferences.privacy.third_party_icons.description'));
112941
112942
112943             // Privacy Policy link
112944             selection.selectAll('.privacy-link')
112945               .data([0])
112946               .enter()
112947               .append('div')
112948               .attr('class', 'privacy-link')
112949               .append('a')
112950               .attr('target', '_blank')
112951               .call(svgIcon('#iD-icon-out-link', 'inline'))
112952               .attr('href', 'https://github.com/openstreetmap/iD/blob/master/PRIVACY.md')
112953               .append('span')
112954               .text(t('preferences.privacy.privacy_link'));
112955
112956             update();
112957
112958
112959             function update() {
112960               selection.selectAll('.privacy-third-party-icons-item')
112961                 .classed('active', (_showThirdPartyIcons === 'true'))
112962                 .select('input')
112963                 .property('checked', (_showThirdPartyIcons === 'true'));
112964             }
112965           }
112966
112967
112968           uiPreferences.togglePane = function () {
112969             if (event) { event.preventDefault(); }
112970             paneTooltip.hide();
112971             context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
112972           };
112973
112974
112975           uiPreferences.renderToggleButton = function (selection) {
112976             selection
112977               .append('button')
112978               .on('click', uiPreferences.togglePane)
112979               .call(svgIcon('#fas-user-cog', 'light'))
112980               .call(paneTooltip);
112981           };
112982
112983
112984           uiPreferences.renderPane = function (selection) {
112985             _pane = selection
112986               .append('div')
112987               .attr('class', 'fillL map-pane preferences-pane hide')
112988               .attr('pane', 'preferences');
112989
112990             var heading = _pane
112991               .append('div')
112992               .attr('class', 'pane-heading');
112993
112994             heading
112995               .append('h2')
112996               .text(t('preferences.title'));
112997
112998             heading
112999               .append('button')
113000               .on('click', function () { return context.ui().togglePanes(); })
113001               .call(svgIcon('#iD-icon-close'));
113002
113003
113004             var content = _pane
113005               .append('div')
113006               .attr('class', 'pane-content');
113007
113008             content
113009               .append('div')
113010               .attr('class', 'preferences-privacy')
113011               .call(uiDisclosure(context, 'preferences_third_party', true)
113012                 .title(t('preferences.privacy.title'))
113013                 .content(renderPrivacyOptions)
113014               );
113015
113016             context.keybinding()
113017               .on(key, uiPreferences.togglePane);
113018           };
113019
113020           return uiPreferences;
113021         }
113022
113023         function uiRestore(context) {
113024           return function(selection) {
113025             if (!context.history().hasRestorableChanges()) { return; }
113026
113027             var modalSelection = uiModal(selection, true);
113028
113029             modalSelection.select('.modal')
113030               .attr('class', 'modal fillL');
113031
113032             var introModal = modalSelection.select('.content');
113033
113034             introModal
113035               .append('div')
113036               .attr('class', 'modal-section')
113037               .append('h3')
113038               .text(t('restore.heading'));
113039
113040             introModal
113041               .append('div')
113042               .attr('class','modal-section')
113043               .append('p')
113044               .text(t('restore.description'));
113045
113046             var buttonWrap = introModal
113047               .append('div')
113048               .attr('class', 'modal-actions');
113049
113050             var restore = buttonWrap
113051               .append('button')
113052               .attr('class', 'restore')
113053               .on('click', function () {
113054                 context.history().restore();
113055                 modalSelection.remove();
113056               });
113057
113058             restore
113059               .append('svg')
113060               .attr('class', 'logo logo-restore')
113061               .append('use')
113062               .attr('xlink:href', '#iD-logo-restore');
113063
113064             restore
113065               .append('div')
113066               .text(t('restore.restore'));
113067
113068             var reset = buttonWrap
113069               .append('button')
113070               .attr('class', 'reset')
113071               .on('click', function () {
113072                 context.history().clearSaved();
113073                 modalSelection.remove();
113074               });
113075
113076             reset
113077               .append('svg')
113078               .attr('class', 'logo logo-reset')
113079               .append('use')
113080               .attr('xlink:href', '#iD-logo-reset');
113081
113082             reset
113083               .append('div')
113084               .text(t('restore.reset'));
113085
113086             restore.node().focus();
113087           };
113088         }
113089
113090         function uiScale(context) {
113091             var projection = context.projection,
113092                 isImperial = (utilDetect().locale.toLowerCase() === 'en-us'),
113093                 maxLength = 180,
113094                 tickHeight = 8;
113095
113096
113097             function scaleDefs(loc1, loc2) {
113098                 var lat = (loc2[1] + loc1[1]) / 2,
113099                     conversion = (isImperial ? 3.28084 : 1),
113100                     dist = geoLonToMeters(loc2[0] - loc1[0], lat) * conversion,
113101                     scale = { dist: 0, px: 0, text: '' },
113102                     buckets, i, val, dLon;
113103
113104                 if (isImperial) {
113105                     buckets = [5280000, 528000, 52800, 5280, 500, 50, 5, 1];
113106                 } else {
113107                     buckets = [5000000, 500000, 50000, 5000, 500, 50, 5, 1];
113108                 }
113109
113110                 // determine a user-friendly endpoint for the scale
113111                 for (i = 0; i < buckets.length; i++) {
113112                     val = buckets[i];
113113                     if (dist >= val) {
113114                         scale.dist = Math.floor(dist / val) * val;
113115                         break;
113116                     } else {
113117                         scale.dist = +dist.toFixed(2);
113118                     }
113119                 }
113120
113121                 dLon = geoMetersToLon(scale.dist / conversion, lat);
113122                 scale.px = Math.round(projection([loc1[0] + dLon, loc1[1]])[0]);
113123
113124                 scale.text = displayLength(scale.dist / conversion, isImperial);
113125
113126                 return scale;
113127             }
113128
113129
113130             function update(selection) {
113131                 // choose loc1, loc2 along bottom of viewport (near where the scale will be drawn)
113132                 var dims = context.map().dimensions(),
113133                     loc1 = projection.invert([0, dims[1]]),
113134                     loc2 = projection.invert([maxLength, dims[1]]),
113135                     scale = scaleDefs(loc1, loc2);
113136
113137                 selection.select('#scale-path')
113138                     .attr('d', 'M0.5,0.5v' + tickHeight + 'h' + scale.px + 'v-' + tickHeight);
113139
113140                 selection.select('#scale-textgroup')
113141                     .attr('transform', 'translate(' + (scale.px + 8) + ',' + tickHeight + ')');
113142
113143                 selection.select('#scale-text')
113144                     .text(scale.text);
113145             }
113146
113147
113148             return function(selection) {
113149                 function switchUnits() {
113150                     isImperial = !isImperial;
113151                     selection.call(update);
113152                 }
113153
113154                 var scalegroup = selection.append('svg')
113155                     .attr('id', 'scale')
113156                     .on('click', switchUnits)
113157                     .append('g')
113158                     .attr('transform', 'translate(10,11)');
113159
113160                 scalegroup
113161                     .append('path')
113162                     .attr('id', 'scale-path');
113163
113164                 scalegroup
113165                     .append('g')
113166                     .attr('id', 'scale-textgroup')
113167                     .append('text')
113168                     .attr('id', 'scale-text');
113169
113170                 selection.call(update);
113171
113172                 context.map().on('move.scale', function() {
113173                     update(selection);
113174                 });
113175             };
113176         }
113177
113178         var pair_1 = pair$1;
113179
113180
113181         function search(input, dims) {
113182           if (!dims) { dims = 'NSEW'; }
113183           if (typeof input !== 'string') { return null; }
113184
113185           input = input.toUpperCase();
113186           var regex = /^[\s\,]*([NSEW])?\s*([\-|\—|\―]?[0-9.]+)[°º˚]?\s*(?:([0-9.]+)['’′‘]\s*)?(?:([0-9.]+)(?:''|"|”|″)\s*)?([NSEW])?/;
113187
113188           var m = input.match(regex);
113189           if (!m) { return null; }  // no match
113190
113191           var matched = m[0];
113192
113193           // extract dimension.. m[1] = leading, m[5] = trailing
113194           var dim;
113195           if (m[1] && m[5]) {                 // if matched both..
113196             dim = m[1];                       // keep leading
113197             matched = matched.slice(0, -1);   // remove trailing dimension from match
113198           } else {
113199             dim = m[1] || m[5];
113200           }
113201
113202           // if unrecognized dimension
113203           if (dim && dims.indexOf(dim) === -1) { return null; }
113204
113205           // extract DMS
113206           var deg = m[2] ? parseFloat(m[2]) : 0;
113207           var min = m[3] ? parseFloat(m[3]) / 60 : 0;
113208           var sec = m[4] ? parseFloat(m[4]) / 3600 : 0;
113209           var sign = (deg < 0) ? -1 : 1;
113210           if (dim === 'S' || dim === 'W') { sign *= -1; }
113211
113212           return {
113213             val: (Math.abs(deg) + min + sec) * sign,
113214             dim: dim,
113215             matched: matched,
113216             remain: input.slice(matched.length)
113217           };
113218         }
113219
113220
113221         function pair$1(input, dims) {
113222           input = input.trim();
113223           var one = search(input, dims);
113224           if (!one) { return null; }
113225
113226           input = one.remain.trim();
113227           var two = search(input, dims);
113228           if (!two || two.remain) { return null; }
113229
113230           if (one.dim) {
113231             return swapdim(one.val, two.val, one.dim);
113232           } else {
113233             return [one.val, two.val];
113234           }
113235         }
113236
113237
113238         function swapdim(a, b, dim) {
113239           if (dim === 'N' || dim === 'S') { return [a, b]; }
113240           if (dim === 'W' || dim === 'E') { return [b, a]; }
113241         }
113242
113243         function uiFeatureList(context) {
113244             var _geocodeResults;
113245
113246
113247             function featureList(selection) {
113248                 var header = selection
113249                     .append('div')
113250                     .attr('class', 'header fillL cf');
113251
113252                 header
113253                     .append('h3')
113254                     .text(t('inspector.feature_list'));
113255
113256                 var searchWrap = selection
113257                     .append('div')
113258                     .attr('class', 'search-header');
113259
113260                 var search = searchWrap
113261                     .append('input')
113262                     .attr('placeholder', t('inspector.search'))
113263                     .attr('type', 'search')
113264                     .call(utilNoAuto)
113265                     .on('keypress', keypress)
113266                     .on('keydown', keydown)
113267                     .on('input', inputevent);
113268
113269                 searchWrap
113270                     .call(svgIcon('#iD-icon-search', 'pre-text'));
113271
113272                 var listWrap = selection
113273                     .append('div')
113274                     .attr('class', 'inspector-body');
113275
113276                 var list = listWrap
113277                     .append('div')
113278                     .attr('class', 'feature-list cf');
113279
113280                 context
113281                     .on('exit.feature-list', clearSearch);
113282                 context.map()
113283                     .on('drawn.feature-list', mapDrawn);
113284
113285                 context.keybinding()
113286                     .on(uiCmd('⌘F'), focusSearch);
113287
113288
113289                 function focusSearch() {
113290                     var mode = context.mode() && context.mode().id;
113291                     if (mode !== 'browse') { return; }
113292
113293                     event.preventDefault();
113294                     search.node().focus();
113295                 }
113296
113297
113298                 function keydown() {
113299                     if (event.keyCode === 27) {  // escape
113300                         search.node().blur();
113301                     }
113302                 }
113303
113304
113305                 function keypress() {
113306                     var q = search.property('value'),
113307                         items = list.selectAll('.feature-list-item');
113308                     if (event.keyCode === 13 && q.length && items.size()) {  // return
113309                         click(items.datum());
113310                     }
113311                 }
113312
113313
113314                 function inputevent() {
113315                     _geocodeResults = undefined;
113316                     drawList();
113317                 }
113318
113319
113320                 function clearSearch() {
113321                     search.property('value', '');
113322                     drawList();
113323                 }
113324
113325
113326                 function mapDrawn(e) {
113327                     if (e.full) {
113328                         drawList();
113329                     }
113330                 }
113331
113332
113333                 function features() {
113334                     var result = [];
113335                     var graph = context.graph();
113336                     var visibleCenter = context.map().extent().center();
113337                     var q = search.property('value').toLowerCase();
113338
113339                     if (!q) { return result; }
113340
113341                     var idMatch = q.match(/^([nwr])([0-9]+)$/);
113342
113343                     if (idMatch) {
113344                         result.push({
113345                             id: idMatch[0],
113346                             geometry: idMatch[1] === 'n' ? 'point' : idMatch[1] === 'w' ? 'line' : 'relation',
113347                             type: idMatch[1] === 'n' ? t('inspector.node') : idMatch[1] === 'w' ? t('inspector.way') : t('inspector.relation'),
113348                             name: idMatch[2]
113349                         });
113350                     }
113351
113352                     var locationMatch = pair_1(q.toUpperCase()) || q.match(/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)$/);
113353
113354                     if (locationMatch) {
113355                         var loc = [parseFloat(locationMatch[0]), parseFloat(locationMatch[1])];
113356                         result.push({
113357                             id: -1,
113358                             geometry: 'point',
113359                             type: t('inspector.location'),
113360                             name: dmsCoordinatePair([loc[1], loc[0]]),
113361                             location: loc
113362                         });
113363                     }
113364
113365                     var allEntities = graph.entities;
113366                     var localResults = [];
113367                     for (var id in allEntities) {
113368                         var entity = allEntities[id];
113369                         if (!entity) { continue; }
113370
113371                         var name = utilDisplayName(entity) || '';
113372                         if (name.toLowerCase().indexOf(q) < 0) { continue; }
113373                         
113374                         var matched = context.presets().match(entity, graph);
113375                         var type = (matched && matched.name()) || utilDisplayType(entity.id);
113376                         var extent = entity.extent(graph);
113377                         var distance = extent ? geoSphericalDistance(visibleCenter, extent.center()) : 0;
113378
113379                         localResults.push({
113380                             id: entity.id,
113381                             entity: entity,
113382                             geometry: context.geometry(entity.id),
113383                             type: type,
113384                             name: name,
113385                             distance: distance
113386                         });
113387
113388                         if (localResults.length > 100) { break; }
113389                     }
113390                     localResults = localResults.sort(function byDistance(a, b) {
113391                         return a.distance - b.distance;
113392                     });
113393                     result = result.concat(localResults);
113394
113395                     (_geocodeResults || []).forEach(function(d) {
113396                         if (d.osm_type && d.osm_id) {    // some results may be missing these - #1890
113397
113398                             // Make a temporary osmEntity so we can preset match
113399                             // and better localize the search result - #4725
113400                             var id = osmEntity.id.fromOSM(d.osm_type, d.osm_id);
113401                             var tags = {};
113402                             tags[d.class] = d.type;
113403
113404                             var attrs = { id: id, type: d.osm_type, tags: tags };
113405                             if (d.osm_type === 'way') {   // for ways, add some fake closed nodes
113406                                 attrs.nodes = ['a','a'];  // so that geometry area is possible
113407                             }
113408
113409                             var tempEntity = osmEntity(attrs);
113410                             var tempGraph = coreGraph([tempEntity]);
113411                             var matched = context.presets().match(tempEntity, tempGraph);
113412                             var type = (matched && matched.name()) || utilDisplayType(id);
113413
113414                             result.push({
113415                                 id: tempEntity.id,
113416                                 geometry: tempEntity.geometry(tempGraph),
113417                                 type: type,
113418                                 name: d.display_name,
113419                                 extent: new geoExtent(
113420                                     [parseFloat(d.boundingbox[3]), parseFloat(d.boundingbox[0])],
113421                                     [parseFloat(d.boundingbox[2]), parseFloat(d.boundingbox[1])])
113422                             });
113423                         }
113424                     });
113425
113426                     if (q.match(/^[0-9]+$/)) {
113427                         // if query is just a number, possibly an OSM ID without a prefix
113428                         result.push({
113429                             id: 'n' + q,
113430                             geometry: 'point',
113431                             type: t('inspector.node'),
113432                             name: q
113433                         });
113434                         result.push({
113435                             id: 'w' + q,
113436                             geometry: 'line',
113437                             type: t('inspector.way'),
113438                             name: q
113439                         });
113440                         result.push({
113441                             id: 'r' + q,
113442                             geometry: 'relation',
113443                             type: t('inspector.relation'),
113444                             name: q
113445                         });
113446                     }
113447
113448                     return result;
113449                 }
113450
113451
113452                 function drawList() {
113453                     var value = search.property('value');
113454                     var results = features();
113455
113456                     list.classed('filtered', value.length);
113457
113458                     var resultsIndicator = list.selectAll('.no-results-item')
113459                         .data([0])
113460                         .enter()
113461                         .append('button')
113462                         .property('disabled', true)
113463                         .attr('class', 'no-results-item')
113464                         .call(svgIcon('#iD-icon-alert', 'pre-text'));
113465
113466                     resultsIndicator.append('span')
113467                         .attr('class', 'entity-name');
113468
113469                     list.selectAll('.no-results-item .entity-name')
113470                         .text(t('geocoder.no_results_worldwide'));
113471
113472                     if (services$1.geocoder) {
113473                       list.selectAll('.geocode-item')
113474                           .data([0])
113475                           .enter()
113476                           .append('button')
113477                           .attr('class', 'geocode-item')
113478                           .on('click', geocoderSearch)
113479                           .append('div')
113480                           .attr('class', 'label')
113481                           .append('span')
113482                           .attr('class', 'entity-name')
113483                           .text(t('geocoder.search'));
113484                     }
113485
113486                     list.selectAll('.no-results-item')
113487                         .style('display', (value.length && !results.length) ? 'block' : 'none');
113488
113489                     list.selectAll('.geocode-item')
113490                         .style('display', (value && _geocodeResults === undefined) ? 'block' : 'none');
113491
113492                     list.selectAll('.feature-list-item')
113493                         .data([-1])
113494                         .remove();
113495
113496                     var items = list.selectAll('.feature-list-item')
113497                         .data(results, function(d) { return d.id; });
113498
113499                     var enter = items.enter()
113500                         .insert('button', '.geocode-item')
113501                         .attr('class', 'feature-list-item')
113502                         .on('mouseover', mouseover)
113503                         .on('mouseout', mouseout)
113504                         .on('click', click);
113505
113506                     var label = enter
113507                         .append('div')
113508                         .attr('class', 'label');
113509
113510                     label
113511                         .each(function(d) {
113512                             d3_select(this)
113513                                 .call(svgIcon('#iD-icon-' + d.geometry, 'pre-text'));
113514                         });
113515
113516                     label
113517                         .append('span')
113518                         .attr('class', 'entity-type')
113519                         .text(function(d) { return d.type; });
113520
113521                     label
113522                         .append('span')
113523                         .attr('class', 'entity-name')
113524                         .text(function(d) { return d.name; });
113525
113526                     enter
113527                         .style('opacity', 0)
113528                         .transition()
113529                         .style('opacity', 1);
113530
113531                     items.order();
113532
113533                     items.exit()
113534                         .remove();
113535                 }
113536
113537
113538                 function mouseover(d) {
113539                     if (d.id === -1) { return; }
113540
113541                     context.surface().selectAll(utilEntityOrMemberSelector([d.id], context.graph()))
113542                         .classed('hover', true);
113543                 }
113544
113545
113546                 function mouseout() {
113547                     context.surface().selectAll('.hover')
113548                         .classed('hover', false);
113549                 }
113550
113551
113552                 function click(d) {
113553                     event.preventDefault();
113554                     if (d.location) {
113555                         context.map().centerZoomEase([d.location[1], d.location[0]], 19);
113556                     }
113557                     else if (d.entity) {
113558                         if (d.entity.type === 'node') {
113559                             context.map().center(d.entity.loc);
113560                         } else if (d.entity.type === 'way') {
113561                             var center = context.projection(context.map().center());
113562                             var edge = geoChooseEdge(context.childNodes(d.entity), center, context.projection);
113563                             context.map().center(edge.loc);
113564                         }
113565                         context.enter(modeSelect(context, [d.entity.id]));
113566                     } else {
113567                         context.zoomToEntity(d.id);
113568                     }
113569                 }
113570
113571
113572                 function geocoderSearch() {
113573                     services$1.geocoder.search(search.property('value'), function (err, resp) {
113574                         _geocodeResults = resp || [];
113575                         drawList();
113576                     });
113577                 }
113578             }
113579
113580
113581             return featureList;
113582         }
113583
113584         function uiPresetIcon(context) {
113585           var arguments$1 = arguments;
113586
113587           var _preset;
113588           var _geometry;
113589           var _sizeClass = 'medium';
113590
113591
113592           function isSmall() {
113593             return _sizeClass === 'small';
113594           }
113595
113596
113597           function presetIcon(selection) {
113598             selection.each(render);
113599           }
113600
113601
113602           function getIcon(p, geom) {
113603             if (isSmall() && p.isFallback && p.isFallback())
113604               { return 'iD-icon-' + p.id; }
113605             else if (p.icon)
113606               { return p.icon; }
113607             else if (geom === 'line')
113608               { return 'iD-other-line'; }
113609             else if (geom === 'vertex')
113610               { return p.isFallback() ? '' : 'temaki-vertex'; }
113611             else if (isSmall() && geom === 'point')
113612               { return ''; }
113613             else
113614               { return 'maki-marker-stroked'; }
113615           }
113616
113617
113618           function renderPointBorder(enter) {
113619             var w = 40;
113620             var h = 40;
113621
113622             enter
113623               .append('svg')
113624               .attr('class', 'preset-icon-fill preset-icon-point-border')
113625               .attr('width', w)
113626               .attr('height', h)
113627               .attr('viewBox', ("0 0 " + w + " " + h))
113628               .append('path')
113629               .attr('transform', 'translate(11.5, 8)')
113630               .attr('d', 'M 17,8 C 17,13 11,21 8.5,23.5 C 6,21 0,13 0,8 C 0,4 4,-0.5 8.5,-0.5 C 13,-0.5 17,4 17,8 z');
113631           }
113632
113633
113634           function renderCircleFill(fillEnter) {
113635             var w = 60;
113636             var h = 60;
113637             var d = 40;
113638
113639             fillEnter
113640               .append('svg')
113641               .attr('class', 'preset-icon-fill preset-icon-fill-vertex')
113642               .attr('width', w)
113643               .attr('height', h)
113644               .attr('viewBox', ("0 0 " + w + " " + h))
113645               .append('circle')
113646               .attr('cx', w / 2)
113647               .attr('cy', h / 2)
113648               .attr('r', d / 2);
113649           }
113650
113651
113652           function renderSquareFill(fillEnter) {
113653             var d = isSmall() ? 40 : 60;
113654             var w = d;
113655             var h = d;
113656             var l = d * 2/3;
113657             var c1 = (w-l) / 2;
113658             var c2 = c1 + l;
113659
113660             fillEnter = fillEnter
113661               .append('svg')
113662               .attr('class', 'preset-icon-fill preset-icon-fill-area')
113663               .attr('width', w)
113664               .attr('height', h)
113665               .attr('viewBox', ("0 0 " + w + " " + h));
113666
113667             ['fill', 'stroke'].forEach(function (klass) {
113668               fillEnter
113669                 .append('path')
113670                 .attr('d', ("M" + c1 + " " + c1 + " L" + c1 + " " + c2 + " L" + c2 + " " + c2 + " L" + c2 + " " + c1 + " Z"))
113671                 .attr('class', ("line area " + klass));
113672             });
113673
113674             var rVertex = 2.5;
113675             [[c1, c1], [c1, c2], [c2, c2], [c2, c1]].forEach(function (point) {
113676               fillEnter
113677                 .append('circle')
113678                 .attr('class', 'vertex')
113679                 .attr('cx', point[0])
113680                 .attr('cy', point[1])
113681                 .attr('r', rVertex);
113682             });
113683
113684             if (!isSmall()) {
113685               var rMidpoint = 1.25;
113686               [[c1, w/2], [c2, w/2], [h/2, c1], [h/2, c2]].forEach(function (point) {
113687                 fillEnter
113688                   .append('circle')
113689                   .attr('class', 'midpoint')
113690                   .attr('cx', point[0])
113691                   .attr('cy', point[1])
113692                   .attr('r', rMidpoint);
113693               });
113694             }
113695           }
113696
113697
113698           function renderLine(lineEnter) {
113699             var d = isSmall() ? 40 : 60;
113700             // draw the line parametrically
113701             var w = d;
113702             var h = d;
113703             var y = Math.round(d * 0.72);
113704             var l = Math.round(d * 0.6);
113705             var r = 2.5;
113706             var x1 = (w - l) / 2;
113707             var x2 = x1 + l;
113708
113709             lineEnter = lineEnter
113710               .append('svg')
113711               .attr('class', 'preset-icon-line')
113712               .attr('width', w)
113713               .attr('height', h)
113714               .attr('viewBox', ("0 0 " + w + " " + h));
113715
113716             ['casing', 'stroke'].forEach(function (klass) {
113717               lineEnter
113718                 .append('path')
113719                 .attr('d', ("M" + x1 + " " + y + " L" + x2 + " " + y))
113720                 .attr('class', ("line " + klass));
113721             });
113722
113723             [[x1-1, y], [x2+1, y]].forEach(function (point) {
113724               lineEnter
113725                 .append('circle')
113726                 .attr('class', 'vertex')
113727                 .attr('cx', point[0])
113728                 .attr('cy', point[1])
113729                 .attr('r', r);
113730             });
113731           }
113732
113733
113734           function renderRoute(routeEnter) {
113735             var d = isSmall() ? 40 : 60;
113736             // draw the route parametrically
113737             var w = d;
113738             var h = d;
113739             var y1 = Math.round(d * 0.80);
113740             var y2 = Math.round(d * 0.68);
113741             var l = Math.round(d * 0.6);
113742             var r = 2;
113743             var x1 = (w - l) / 2;
113744             var x2 = x1 + l / 3;
113745             var x3 = x2 + l / 3;
113746             var x4 = x3 + l / 3;
113747
113748             routeEnter = routeEnter
113749               .append('svg')
113750               .attr('class', 'preset-icon-route')
113751               .attr('width', w)
113752               .attr('height', h)
113753               .attr('viewBox', ("0 0 " + w + " " + h));
113754
113755             ['casing', 'stroke'].forEach(function (klass) {
113756               routeEnter
113757                 .append('path')
113758                 .attr('d', ("M" + x1 + " " + y1 + " L" + x2 + " " + y2))
113759                 .attr('class', ("segment0 line " + klass));
113760               routeEnter
113761                 .append('path')
113762                 .attr('d', ("M" + x2 + " " + y2 + " L" + x3 + " " + y1))
113763                 .attr('class', ("segment1 line " + klass));
113764               routeEnter
113765                 .append('path')
113766                 .attr('d', ("M" + x3 + " " + y1 + " L" + x4 + " " + y2))
113767                 .attr('class', ("segment2 line " + klass));
113768             });
113769
113770             [[x1, y1], [x2, y2], [x3, y1], [x4, y2]].forEach(function (point) {
113771               routeEnter
113772                 .append('circle')
113773                 .attr('class', 'vertex')
113774                 .attr('cx', point[0])
113775                 .attr('cy', point[1])
113776                 .attr('r', r);
113777             });
113778           }
113779
113780
113781           // Route icons are drawn with a zigzag annotation underneath:
113782           //     o   o
113783           //    / \ /
113784           //   o   o
113785           // This dataset defines the styles that are used to draw the zigzag segments.
113786           var routeSegments = {
113787             bicycle: ['highway/cycleway', 'highway/cycleway', 'highway/cycleway'],
113788             bus: ['highway/unclassified', 'highway/secondary', 'highway/primary'],
113789             detour: ['highway/tertiary', 'highway/residential', 'highway/unclassified'],
113790             ferry: ['route/ferry', 'route/ferry', 'route/ferry'],
113791             foot: ['highway/footway', 'highway/footway', 'highway/footway'],
113792             hiking: ['highway/path', 'highway/path', 'highway/path'],
113793             horse: ['highway/bridleway', 'highway/bridleway', 'highway/bridleway'],
113794             light_rail: ['railway/light_rail', 'railway/light_rail', 'railway/light_rail'],
113795             monorail: ['railway/monorail', 'railway/monorail', 'railway/monorail'],
113796             pipeline: ['man_made/pipeline', 'man_made/pipeline', 'man_made/pipeline'],
113797             piste: ['piste/downhill', 'piste/hike', 'piste/nordic'],
113798             power: ['power/line', 'power/line', 'power/line'],
113799             road: ['highway/secondary', 'highway/primary', 'highway/trunk'],
113800             subway: ['railway/subway', 'railway/subway', 'railway/subway'],
113801             train: ['railway/rail', 'railway/rail', 'railway/rail'],
113802             tram: ['railway/tram', 'railway/tram', 'railway/tram'],
113803             waterway: ['waterway/stream', 'waterway/stream', 'waterway/stream']
113804           };
113805
113806
113807           function render() {
113808             var p = _preset.apply(this, arguments);
113809             var geom = _geometry ? _geometry.apply(this, arguments) : null;
113810             if (geom === 'relation' && p.tags && ((p.tags.type === 'route' && p.tags.route && routeSegments[p.tags.route]) || p.tags.type === 'waterway')) {
113811               geom = 'route';
113812             }
113813
113814             var showThirdPartyIcons = context.storage('preferences.privacy.thirdpartyicons') || 'true';
113815             var isFallback = isSmall() && p.isFallback && p.isFallback();
113816             var imageURL = (showThirdPartyIcons === 'true') && p.imageURL;
113817             var picon = getIcon(p, geom);
113818             var isMaki = picon && /^maki-/.test(picon);
113819             var isTemaki = picon && /^temaki-/.test(picon);
113820             var isFa = picon && /^fa[srb]-/.test(picon);
113821             var isTnp = picon && /^tnp-/.test(picon);
113822             var isiDIcon = picon && !(isMaki || isTemaki || isFa || isTnp);
113823             var isCategory = !p.setTags;
113824             var drawPoint = picon && geom === 'point' && isSmall() && !isFallback;
113825             var drawVertex = picon !== null && geom === 'vertex' && (!isSmall() || !isFallback);
113826             var drawLine = picon && geom === 'line' && !isFallback && !isCategory;
113827             var drawArea = picon && geom === 'area' && !isFallback;
113828             var drawRoute = picon && geom === 'route';
113829             var isFramed = (drawVertex || drawArea || drawLine || drawRoute);
113830
113831             var tags = !isCategory ? p.setTags({}, geom) : {};
113832             for (var k in tags) {
113833               if (tags[k] === '*') {
113834                 tags[k] = 'yes';
113835               }
113836             }
113837
113838             var tagClasses = svgTagClasses().getClassesString(tags, '');
113839             var selection = d3_select(this);
113840
113841             var container = selection.selectAll('.preset-icon-container')
113842               .data([0]);
113843
113844             container = container.enter()
113845               .append('div')
113846               .attr('class', ("preset-icon-container " + _sizeClass))
113847               .merge(container);
113848
113849             container
113850               .classed('showing-img', !!imageURL)
113851               .classed('fallback', isFallback);
113852
113853
113854             var pointBorder = container.selectAll('.preset-icon-point-border')
113855               .data(drawPoint ? [0] : []);
113856
113857             pointBorder.exit()
113858               .remove();
113859
113860             var pointBorderEnter = pointBorder.enter();
113861             renderPointBorder(pointBorderEnter);
113862             pointBorder = pointBorderEnter.merge(pointBorder);
113863
113864
113865             var vertexFill = container.selectAll('.preset-icon-fill-vertex')
113866               .data(drawVertex ? [0] : []);
113867
113868             vertexFill.exit()
113869               .remove();
113870
113871             var vertexFillEnter = vertexFill.enter();
113872             renderCircleFill(vertexFillEnter);
113873             vertexFill = vertexFillEnter.merge(vertexFill);
113874
113875
113876             var fill = container.selectAll('.preset-icon-fill-area')
113877               .data(drawArea ? [0] : []);
113878
113879             fill.exit()
113880               .remove();
113881
113882             var fillEnter = fill.enter();
113883             renderSquareFill(fillEnter);
113884             fill = fillEnter.merge(fill);
113885
113886             fill.selectAll('path.stroke')
113887               .attr('class', ("area stroke " + tagClasses));
113888             fill.selectAll('path.fill')
113889               .attr('class', ("area fill " + tagClasses));
113890
113891
113892             var line = container.selectAll('.preset-icon-line')
113893               .data(drawLine ? [0] : []);
113894
113895             line.exit()
113896               .remove();
113897
113898             var lineEnter = line.enter();
113899             renderLine(lineEnter);
113900             line = lineEnter.merge(line);
113901
113902             line.selectAll('path.stroke')
113903               .attr('class', ("line stroke " + tagClasses));
113904             line.selectAll('path.casing')
113905               .attr('class', ("line casing " + tagClasses));
113906
113907
113908             var route = container.selectAll('.preset-icon-route')
113909               .data(drawRoute ? [0] : []);
113910
113911             route.exit()
113912               .remove();
113913
113914             var routeEnter = route.enter();
113915             renderRoute(routeEnter);
113916             route = routeEnter.merge(route);
113917
113918             if (drawRoute) {
113919               var routeType = p.tags.type === 'waterway' ? 'waterway' : p.tags.route;
113920               var segmentPresetIDs = routeSegments[routeType];
113921               for (var i in segmentPresetIDs) {
113922                 var segmentPreset = context.presets().item(segmentPresetIDs[i]);
113923                 var segmentTagClasses = svgTagClasses().getClassesString(segmentPreset.tags, '');
113924                 route.selectAll(("path.stroke.segment" + i))
113925                   .attr('class', ("segment" + i + " line stroke " + segmentTagClasses));
113926                 route.selectAll(("path.casing.segment" + i))
113927                   .attr('class', ("segment" + i + " line casing " + segmentTagClasses));
113928               }
113929             }
113930
113931
113932             var icon = container.selectAll('.preset-icon')
113933               .data(picon ? [0] : []);
113934
113935             icon.exit()
113936               .remove();
113937
113938             icon = icon.enter()
113939               .append('div')
113940               .attr('class', 'preset-icon')
113941               .call(svgIcon(''))
113942               .merge(icon);
113943
113944             icon
113945               .attr('class', 'preset-icon ' + (geom ? geom + '-geom' : ''))
113946               .classed('framed', isFramed)
113947               .classed('preset-icon-iD', isiDIcon);
113948
113949             icon.selectAll('svg')
113950               .attr('class', 'icon ' + picon + ' ' + (!isiDIcon && geom !== 'line'  ? '' : tagClasses));
113951
113952             icon.selectAll('use')
113953               .attr('href', '#' + picon + (isMaki ? (isSmall() && geom === 'point' ? '-11' : '-15') : ''));
113954
113955             var imageIcon = container.selectAll('img.image-icon')
113956               .data(imageURL ? [0] : []);
113957
113958             imageIcon.exit()
113959               .remove();
113960
113961             imageIcon = imageIcon.enter()
113962               .append('img')
113963               .attr('class', 'image-icon')
113964               .on('load', function () { return container.classed('showing-img', true); } )
113965               .on('error', function () { return container.classed('showing-img', false); } )
113966               .merge(imageIcon);
113967
113968             imageIcon
113969               .attr('src', imageURL);
113970           }
113971
113972
113973           presetIcon.preset = function (val) {
113974             if (!arguments$1.length) { return _preset; }
113975             _preset = utilFunctor(val);
113976             return presetIcon;
113977           };
113978
113979
113980           presetIcon.geometry = function (val) {
113981             if (!arguments$1.length) { return _geometry; }
113982             _geometry = utilFunctor(val);
113983             return presetIcon;
113984           };
113985
113986
113987           presetIcon.sizeClass = function (val) {
113988             if (!arguments$1.length) { return _sizeClass; }
113989             _sizeClass = val;
113990             return presetIcon;
113991           };
113992
113993           return presetIcon;
113994         }
113995
113996         function uiRawMemberEditor(context) {
113997             var taginfo = services$1.taginfo;
113998             var _entityID;
113999             var _contentSelection = d3_select(null);
114000             var _maxMembers = 1000;
114001
114002             function downloadMember(d) {
114003                 event.preventDefault();
114004
114005                 // display the loading indicator
114006                 d3_select(this.parentNode).classed('tag-reference-loading', true);
114007                 context.loadEntity(d.id, function() {
114008                     updateDisclosureContent(_contentSelection);
114009                 });
114010             }
114011
114012             function zoomToMember(d) {
114013                 event.preventDefault();
114014
114015                 var entity = context.entity(d.id);
114016                 context.map().zoomTo(entity);
114017
114018                 // highlight the feature in case it wasn't previously on-screen
114019                 utilHighlightEntities([d.id], true, context);
114020             }
114021
114022
114023             function selectMember(d) {
114024                 event.preventDefault();
114025
114026                 // remove the hover-highlight styling
114027                 utilHighlightEntities([d.id], false, context);
114028
114029                 var entity = context.entity(d.id);
114030                 var mapExtent = context.map().extent();
114031                 if (!entity.intersects(mapExtent, context.graph())) {
114032                     // zoom to the entity if its extent is not visible now
114033                     context.map().zoomToEase(entity);
114034                 }
114035
114036                 context.enter(modeSelect(context, [d.id]));
114037             }
114038
114039
114040             function changeRole(d) {
114041                 var oldRole = d.role;
114042                 var newRole = d3_select(this).property('value');
114043
114044                 if (oldRole !== newRole) {
114045                     var member = { id: d.id, type: d.type, role: newRole };
114046                     context.perform(
114047                         actionChangeMember(d.relation.id, member, d.index),
114048                         t('operations.change_role.annotation')
114049                     );
114050                 }
114051             }
114052
114053
114054             function deleteMember(d) {
114055
114056                 // remove the hover-highlight styling
114057                 utilHighlightEntities([d.id], false, context);
114058
114059                 context.perform(
114060                     actionDeleteMember(d.relation.id, d.index),
114061                     t('operations.delete_member.annotation')
114062                 );
114063
114064                 if (!context.hasEntity(d.relation.id)) {
114065                     context.enter(modeBrowse(context));
114066                 }
114067             }
114068
114069             function updateDisclosureContent(selection) {
114070                 _contentSelection = selection;
114071
114072                 var memberships = [];
114073                 var entity = context.entity(_entityID);
114074                 entity.members.slice(0, _maxMembers).forEach(function(member, index) {
114075                     memberships.push({
114076                         index: index,
114077                         id: member.id,
114078                         type: member.type,
114079                         role: member.role,
114080                         relation: entity,
114081                         member: context.hasEntity(member.id)
114082                     });
114083                 });
114084
114085                 var list = selection.selectAll('.member-list')
114086                     .data([0]);
114087
114088                 list = list.enter()
114089                     .append('ul')
114090                     .attr('class', 'member-list')
114091                     .merge(list);
114092
114093
114094                 var items = list.selectAll('li')
114095                     .data(memberships, function(d) {
114096                         return osmEntity.key(d.relation) + ',' + d.index + ',' +
114097                             (d.member ? osmEntity.key(d.member) : 'incomplete');
114098                     });
114099
114100                 items.exit()
114101                     .each(unbind)
114102                     .remove();
114103
114104                 var itemsEnter = items.enter()
114105                     .append('li')
114106                     .attr('class', 'member-row form-field')
114107                     .classed('member-incomplete', function(d) { return !d.member; });
114108
114109                 itemsEnter
114110                     .each(function(d) {
114111                         var item = d3_select(this);
114112
114113                         var label = item
114114                             .append('label')
114115                             .attr('class', 'field-label');
114116
114117                         if (d.member) {
114118                             // highlight the member feature in the map while hovering on the list item
114119                             item
114120                                 .on('mouseover', function() {
114121                                     utilHighlightEntities([d.id], true, context);
114122                                 })
114123                                 .on('mouseout', function() {
114124                                     utilHighlightEntities([d.id], false, context);
114125                                 });
114126
114127                             var labelLink = label
114128                                 .append('span')
114129                                 .attr('class', 'label-text')
114130                                 .append('a')
114131                                 .attr('href', '#')
114132                                 .on('click', selectMember);
114133
114134                             labelLink
114135                                 .append('span')
114136                                 .attr('class', 'member-entity-type')
114137                                 .text(function(d) {
114138                                     var matched = context.presets().match(d.member, context.graph());
114139                                     return (matched && matched.name()) || utilDisplayType(d.member.id);
114140                                 });
114141
114142                             labelLink
114143                                 .append('span')
114144                                 .attr('class', 'member-entity-name')
114145                                 .text(function(d) { return utilDisplayName(d.member); });
114146
114147                             label
114148                                 .append('button')
114149                                 .attr('class', 'member-zoom')
114150                                 .attr('title', t('icons.zoom_to'))
114151                                 .call(svgIcon('#iD-icon-geolocate'))
114152                                 .on('click', zoomToMember);
114153
114154                         } else {
114155                             var labelText = label
114156                                 .append('span')
114157                                 .attr('class', 'label-text');
114158
114159                             labelText
114160                                 .append('span')
114161                                 .attr('class', 'member-entity-type')
114162                                 .text(t('inspector.' + d.type, { id: d.id }));
114163
114164                             labelText
114165                                 .append('span')
114166                                 .attr('class', 'member-entity-name')
114167                                 .text(t('inspector.incomplete', { id: d.id }));
114168
114169                             label
114170                                 .append('button')
114171                                 .attr('class', 'member-download')
114172                                 .attr('title', t('icons.download'))
114173                                 .attr('tabindex', -1)
114174                                 .call(svgIcon('#iD-icon-load'))
114175                                 .on('click', downloadMember);
114176                         }
114177                     });
114178
114179                 var wrapEnter = itemsEnter
114180                     .append('div')
114181                     .attr('class', 'form-field-input-wrap form-field-input-member');
114182
114183                 wrapEnter
114184                     .append('input')
114185                     .attr('class', 'member-role')
114186                     .property('type', 'text')
114187                     .attr('maxlength', 255)
114188                     .attr('placeholder', t('inspector.role'))
114189                     .call(utilNoAuto);
114190
114191                 wrapEnter
114192                     .append('button')
114193                     .attr('tabindex', -1)
114194                     .attr('title', t('icons.remove'))
114195                     .attr('class', 'remove form-field-button member-delete')
114196                     .call(svgIcon('#iD-operation-delete'));
114197
114198                 if (taginfo) {
114199                     wrapEnter.each(bindTypeahead);
114200                 }
114201
114202                 var dragOrigin, targetIndex;
114203
114204                 itemsEnter.call(d3_drag()
114205                     .on('start', function() {
114206                         dragOrigin = {
114207                             x: event.x,
114208                             y: event.y
114209                         };
114210                         targetIndex = null;
114211                     })
114212                     .on('drag', function(d, index) {
114213                         var x = event.x - dragOrigin.x,
114214                             y = event.y - dragOrigin.y;
114215
114216                         if (!d3_select(this).classed('dragging') &&
114217                             // don't display drag until dragging beyond a distance threshold
114218                             Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)) <= 5) { return; }
114219
114220                         d3_select(this)
114221                             .classed('dragging', true);
114222
114223                         targetIndex = null;
114224
114225                         selection.selectAll('li.member-row')
114226                             .style('transform', function(d2, index2) {
114227                                 var node = d3_select(this).node();
114228                                 if (index === index2) {
114229                                     return 'translate(' + x + 'px, ' + y + 'px)';
114230                                 } else if (index2 > index && event.y > node.offsetTop - node.offsetHeight) {
114231                                     if (targetIndex === null || index2 > targetIndex) {
114232                                         targetIndex = index2;
114233                                     }
114234                                     return 'translateY(-100%)';
114235                                 } else if (index2 < index && event.y < node.offsetTop) {
114236                                     if (targetIndex === null || index2 < targetIndex) {
114237                                         targetIndex = index2;
114238                                     }
114239                                     return 'translateY(100%)';
114240                                 }
114241                                 return null;
114242                             });
114243                     })
114244                     .on('end', function(d, index) {
114245
114246                         if (!d3_select(this).classed('dragging')) {
114247                             return;
114248                         }
114249
114250                         d3_select(this)
114251                             .classed('dragging', false);
114252
114253                         selection.selectAll('li.member-row')
114254                             .style('transform', null);
114255
114256                         if (targetIndex !== null) {
114257                             // dragged to a new position, reorder
114258                             context.perform(
114259                                 actionMoveMember(d.relation.id, index, targetIndex),
114260                                 t('operations.reorder_members.annotation')
114261                             );
114262                         }
114263                     })
114264                 );
114265
114266
114267                 // update
114268                 items = items
114269                     .merge(itemsEnter);
114270
114271                 items.select('input.member-role')
114272                     .property('value', function(d) { return d.role; })
114273                     .on('blur', changeRole)
114274                     .on('change', changeRole);
114275
114276                 items.select('button.member-delete')
114277                     .on('click', deleteMember);
114278
114279
114280
114281                 function bindTypeahead(d) {
114282                     var row = d3_select(this);
114283                     var role = row.selectAll('input.member-role');
114284                     var origValue = role.property('value');
114285
114286                     function sort(value, data) {
114287                         var sameletter = [];
114288                         var other = [];
114289                         for (var i = 0; i < data.length; i++) {
114290                             if (data[i].value.substring(0, value.length) === value) {
114291                                 sameletter.push(data[i]);
114292                             } else {
114293                                 other.push(data[i]);
114294                             }
114295                         }
114296                         return sameletter.concat(other);
114297                     }
114298
114299                     role.call(uiCombobox(context, 'member-role')
114300                         .fetcher(function(role, callback) {
114301                             // The `geometry` param is used in the `taginfo.js` interface for
114302                             // filtering results, as a key into the `tag_members_fractions`
114303                             // object.  If we don't know the geometry because the member is
114304                             // not yet downloaded, it's ok to guess based on type.
114305                             var geometry;
114306                             if (d.member) {
114307                                 geometry = context.geometry(d.member.id);
114308                             } else if (d.type === 'relation') {
114309                                 geometry = 'relation';
114310                             } else if (d.type === 'way') {
114311                                 geometry = 'line';
114312                             } else {
114313                                 geometry = 'point';
114314                             }
114315
114316                             var rtype = entity.tags.type;
114317                             taginfo.roles({
114318                                 debounce: true,
114319                                 rtype: rtype || '',
114320                                 geometry: geometry,
114321                                 query: role
114322                             }, function(err, data) {
114323                                 if (!err) { callback(sort(role, data)); }
114324                             });
114325                         })
114326                         .on('cancel', function() {
114327                             role.property('value', origValue);
114328                         })
114329                     );
114330                 }
114331
114332
114333                 function unbind() {
114334                     var row = d3_select(this);
114335
114336                     row.selectAll('input.member-role')
114337                         .call(uiCombobox.off);
114338                 }
114339             }
114340
114341             function rawMemberEditor(selection) {
114342                 var entity = context.entity(_entityID);
114343
114344                 var gt = entity.members.length > _maxMembers ? '>' : '';
114345                 selection.call(uiDisclosure(context, 'raw_member_editor', true)
114346                     .title(t('inspector.all_members') + ' (' + gt + entity.members.slice(0, _maxMembers).length + ')')
114347                     .expanded(true)
114348                     .updatePreference(false)
114349                     .on('toggled', function(expanded) {
114350                         if (expanded) {
114351                             selection.node().parentNode.scrollTop += 200;
114352                         }
114353                     })
114354                     .content(updateDisclosureContent)
114355                 );
114356             }
114357
114358             rawMemberEditor.entityID = function(val) {
114359                 if (!arguments.length) { return _entityID; }
114360                 _entityID = val;
114361                 return rawMemberEditor;
114362             };
114363
114364
114365             return rawMemberEditor;
114366         }
114367
114368         function uiRawMembershipEditor(context) {
114369             var taginfo = services$1.taginfo;
114370             var nearbyCombo = uiCombobox(context, 'parent-relation')
114371                 .minItems(1)
114372                 .fetcher(fetchNearbyRelations)
114373                 .itemsMouseEnter(function(d) {
114374                     if (d.relation) { utilHighlightEntities([d.relation.id], true, context); }
114375                 })
114376                 .itemsMouseLeave(function(d) {
114377                     if (d.relation) { utilHighlightEntities([d.relation.id], false, context); }
114378                 });
114379             var _inChange = false;
114380             var _entityID;
114381             var _showBlank;
114382
114383
114384             function selectRelation(d) {
114385                 event.preventDefault();
114386
114387                 // remove the hover-highlight styling
114388                 utilHighlightEntities([d.relation.id], false, context);
114389
114390                 context.enter(modeSelect(context, [d.relation.id]));
114391             }
114392
114393
114394             function changeRole(d) {
114395                 if (d === 0) { return; }    // called on newrow (shoudn't happen)
114396                 if (_inChange) { return; }  // avoid accidental recursive call #5731
114397
114398                 var oldRole = d.member.role;
114399                 var newRole = d3_select(this).property('value');
114400
114401                 if (oldRole !== newRole) {
114402                     _inChange = true;
114403                     context.perform(
114404                         actionChangeMember(d.relation.id, Object.assign({}, d.member, { role: newRole }), d.index),
114405                         t('operations.change_role.annotation')
114406                     );
114407                 }
114408                 _inChange = false;
114409             }
114410
114411
114412             function addMembership(d, role) {
114413                 this.blur();           // avoid keeping focus on the button
114414                 _showBlank = false;
114415
114416                 var member = { id: _entityID, type: context.entity(_entityID).type, role: role };
114417
114418                 if (d.relation) {
114419                     context.perform(
114420                         actionAddMember(d.relation.id, member),
114421                         t('operations.add_member.annotation')
114422                     );
114423
114424                 } else {
114425                     var relation = osmRelation();
114426                     context.perform(
114427                         actionAddEntity(relation),
114428                         actionAddMember(relation.id, member),
114429                         t('operations.add.annotation.relation')
114430                     );
114431
114432                     context.enter(modeSelect(context, [relation.id]).newFeature(true));
114433                 }
114434             }
114435
114436
114437             function deleteMembership(d) {
114438                 this.blur();           // avoid keeping focus on the button
114439                 if (d === 0) { return; }   // called on newrow (shoudn't happen)
114440
114441                 // remove the hover-highlight styling
114442                 utilHighlightEntities([d.relation.id], false, context);
114443
114444                 context.perform(
114445                     actionDeleteMember(d.relation.id, d.index),
114446                     t('operations.delete_member.annotation')
114447                 );
114448             }
114449
114450
114451             function fetchNearbyRelations(q, callback) {
114452                 var newRelation = { relation: null, value: t('inspector.new_relation') };
114453
114454                 var result = [];
114455
114456                 var graph = context.graph();
114457
114458                 function baseDisplayLabel(entity) {
114459                     var matched = context.presets().match(entity, graph);
114460                     var presetName = (matched && matched.name()) || t('inspector.relation');
114461                     var entityName = utilDisplayName(entity) || '';
114462
114463                     return presetName + ' ' + entityName;
114464                 }
114465
114466                 var explicitRelation = q && context.hasEntity(q.toLowerCase());
114467                 if (explicitRelation && explicitRelation.type === 'relation' && explicitRelation.id !== _entityID) {
114468                     // loaded relation is specified explicitly, only show that
114469
114470                     result.push({
114471                         relation: explicitRelation,
114472                         value: baseDisplayLabel(explicitRelation) + ' ' + explicitRelation.id
114473                     });
114474                 } else {
114475
114476                     context.intersects(context.extent()).forEach(function(entity) {
114477                         if (entity.type !== 'relation' || entity.id === _entityID) { return; }
114478
114479                         var value = baseDisplayLabel(entity);
114480                         if (q && (value + ' ' + entity.id).toLowerCase().indexOf(q.toLowerCase()) === -1) { return; }
114481
114482                         result.push({ relation: entity, value: value });
114483                     });
114484
114485                     result.sort(function(a, b) {
114486                         return osmRelation.creationOrder(a.relation, b.relation);
114487                     });
114488
114489                     // Dedupe identical names by appending relation id - see #2891
114490                     var dupeGroups = Object.values(utilArrayGroupBy(result, 'value'))
114491                         .filter(function(v) { return v.length > 1; });
114492
114493                     dupeGroups.forEach(function(group) {
114494                         group.forEach(function(obj) {
114495                             obj.value += ' ' + obj.relation.id;
114496                         });
114497                     });
114498                 }
114499
114500                 result.forEach(function(obj) {
114501                     obj.title = obj.value;
114502                 });
114503
114504                 result.unshift(newRelation);
114505                 callback(result);
114506             }
114507
114508
114509             function rawMembershipEditor(selection) {
114510                 var entity = context.entity(_entityID);
114511                 var parents = context.graph().parentRelations(entity);
114512                 var memberships = [];
114513
114514                 parents.slice(0, 1000).forEach(function(relation) {
114515                     relation.members.forEach(function(member, index) {
114516                         if (member.id === entity.id) {
114517                             memberships.push({ relation: relation, member: member, index: index });
114518                         }
114519                     });
114520                 });
114521
114522                 var gt = parents.length > 1000 ? '>' : '';
114523                 selection.call(uiDisclosure(context, 'raw_membership_editor', true)
114524                     .title(t('inspector.all_relations') + ' (' + gt + memberships.length + ')')
114525                     .expanded(true)
114526                     .updatePreference(false)
114527                     .on('toggled', function(expanded) {
114528                         if (expanded) { selection.node().parentNode.scrollTop += 200; }
114529                     })
114530                     .content(content)
114531                 );
114532
114533
114534                 function content(selection) {
114535                     var list = selection.selectAll('.member-list')
114536                         .data([0]);
114537
114538                     list = list.enter()
114539                         .append('ul')
114540                         .attr('class', 'member-list')
114541                         .merge(list);
114542
114543
114544                     var items = list.selectAll('li.member-row-normal')
114545                         .data(memberships, function(d) {
114546                             return osmEntity.key(d.relation) + ',' + d.index;
114547                         });
114548
114549                     items.exit()
114550                         .each(unbind)
114551                         .remove();
114552
114553                     // Enter
114554                     var itemsEnter = items.enter()
114555                         .append('li')
114556                         .attr('class', 'member-row member-row-normal form-field');
114557
114558                     // highlight the relation in the map while hovering on the list item
114559                     itemsEnter.on('mouseover', function(d) {
114560                             utilHighlightEntities([d.relation.id], true, context);
114561                         })
114562                         .on('mouseout', function(d) {
114563                             utilHighlightEntities([d.relation.id], false, context);
114564                         });
114565
114566                     var labelEnter = itemsEnter
114567                         .append('label')
114568                         .attr('class', 'field-label')
114569                         .append('span')
114570                         .attr('class', 'label-text')
114571                         .append('a')
114572                         .attr('href', '#')
114573                         .on('click', selectRelation);
114574
114575                     labelEnter
114576                         .append('span')
114577                         .attr('class', 'member-entity-type')
114578                         .text(function(d) {
114579                             var matched = context.presets().match(d.relation, context.graph());
114580                             return (matched && matched.name()) || t('inspector.relation');
114581                         });
114582
114583                     labelEnter
114584                         .append('span')
114585                         .attr('class', 'member-entity-name')
114586                         .text(function(d) { return utilDisplayName(d.relation); });
114587
114588                     var wrapEnter = itemsEnter
114589                         .append('div')
114590                         .attr('class', 'form-field-input-wrap form-field-input-member');
114591
114592                     wrapEnter
114593                         .append('input')
114594                         .attr('class', 'member-role')
114595                         .property('type', 'text')
114596                         .attr('maxlength', 255)
114597                         .attr('placeholder', t('inspector.role'))
114598                         .call(utilNoAuto)
114599                         .property('value', function(d) { return d.member.role; })
114600                         .on('blur', changeRole)
114601                         .on('change', changeRole);
114602
114603                     wrapEnter
114604                         .append('button')
114605                         .attr('tabindex', -1)
114606                         .attr('class', 'remove form-field-button member-delete')
114607                         .call(svgIcon('#iD-operation-delete'))
114608                         .on('click', deleteMembership);
114609
114610                     if (taginfo) {
114611                         wrapEnter.each(bindTypeahead);
114612                     }
114613
114614
114615                     var newMembership = list.selectAll('.member-row-new')
114616                         .data(_showBlank ? [0] : []);
114617
114618                     // Exit
114619                     newMembership.exit()
114620                         .remove();
114621
114622                     // Enter
114623                     var newMembershipEnter = newMembership.enter()
114624                         .append('li')
114625                         .attr('class', 'member-row member-row-new form-field');
114626
114627                     newMembershipEnter
114628                         .append('label')
114629                         .attr('class', 'field-label')
114630                         .append('input')
114631                         .attr('placeholder', t('inspector.choose_relation'))
114632                         .attr('type', 'text')
114633                         .attr('class', 'member-entity-input')
114634                         .call(utilNoAuto);
114635
114636                     var newWrapEnter = newMembershipEnter
114637                         .append('div')
114638                         .attr('class', 'form-field-input-wrap form-field-input-member');
114639
114640                     newWrapEnter
114641                         .append('input')
114642                         .attr('class', 'member-role')
114643                         .property('type', 'text')
114644                         .attr('maxlength', 255)
114645                         .attr('placeholder', t('inspector.role'))
114646                         .call(utilNoAuto);
114647
114648                     newWrapEnter
114649                         .append('button')
114650                         .attr('tabindex', -1)
114651                         .attr('class', 'remove form-field-button member-delete')
114652                         .call(svgIcon('#iD-operation-delete'))
114653                         .on('click', function() {
114654                             list.selectAll('.member-row-new')
114655                                 .remove();
114656                         });
114657
114658                     // Update
114659                     newMembership = newMembership
114660                         .merge(newMembershipEnter);
114661
114662                     newMembership.selectAll('.member-entity-input')
114663                         .on('blur', cancelEntity)   // if it wasn't accepted normally, cancel it
114664                         .call(nearbyCombo
114665                             .on('accept', acceptEntity)
114666                             .on('cancel', cancelEntity)
114667                         );
114668
114669
114670                     // Container for the Add button
114671                     var addRow = selection.selectAll('.add-row')
114672                         .data([0]);
114673
114674                     // enter
114675                     var addRowEnter = addRow.enter()
114676                         .append('div')
114677                         .attr('class', 'add-row');
114678
114679                     var addRelationButton = addRowEnter
114680                         .append('button')
114681                         .attr('class', 'add-relation');
114682
114683                     addRelationButton
114684                         .call(svgIcon('#iD-icon-plus', 'light'));
114685                     addRelationButton
114686                         .call(tooltip().title(t('inspector.add_to_relation')).placement(textDirection === 'ltr' ? 'right' : 'left'));
114687
114688                     addRowEnter
114689                         .append('div')
114690                         .attr('class', 'space-value');   // preserve space
114691
114692                     addRowEnter
114693                         .append('div')
114694                         .attr('class', 'space-buttons');  // preserve space
114695
114696                     // update
114697                     addRow = addRow
114698                         .merge(addRowEnter);
114699
114700                     addRow.select('.add-relation')
114701                         .on('click', function() {
114702                             _showBlank = true;
114703                             content(selection);
114704                             list.selectAll('.member-entity-input').node().focus();
114705                         });
114706
114707
114708                     function acceptEntity(d) {
114709                         if (!d) {
114710                             cancelEntity();
114711                             return;
114712                         }
114713                         // remove hover-higlighting
114714                         if (d.relation) { utilHighlightEntities([d.relation.id], false, context); }
114715
114716                         var role = list.selectAll('.member-row-new .member-role').property('value');
114717                         addMembership(d, role);
114718                     }
114719
114720
114721                     function cancelEntity() {
114722                         var input = newMembership.selectAll('.member-entity-input');
114723                         input.property('value', '');
114724
114725                         // remove hover-higlighting
114726                         context.surface().selectAll('.highlighted')
114727                             .classed('highlighted', false);
114728                     }
114729
114730
114731                     function bindTypeahead(d) {
114732                         var row = d3_select(this);
114733                         var role = row.selectAll('input.member-role');
114734                         var origValue = role.property('value');
114735
114736                         function sort(value, data) {
114737                             var sameletter = [];
114738                             var other = [];
114739                             for (var i = 0; i < data.length; i++) {
114740                                 if (data[i].value.substring(0, value.length) === value) {
114741                                     sameletter.push(data[i]);
114742                                 } else {
114743                                     other.push(data[i]);
114744                                 }
114745                             }
114746                             return sameletter.concat(other);
114747                         }
114748
114749                         role.call(uiCombobox(context, 'member-role')
114750                             .fetcher(function(role, callback) {
114751                                 var rtype = d.relation.tags.type;
114752                                 taginfo.roles({
114753                                     debounce: true,
114754                                     rtype: rtype || '',
114755                                     geometry: context.geometry(_entityID),
114756                                     query: role
114757                                 }, function(err, data) {
114758                                     if (!err) { callback(sort(role, data)); }
114759                                 });
114760                             })
114761                             .on('cancel', function() {
114762                                 role.property('value', origValue);
114763                             })
114764                         );
114765                     }
114766
114767
114768                     function unbind() {
114769                         var row = d3_select(this);
114770
114771                         row.selectAll('input.member-role')
114772                             .call(uiCombobox.off);
114773                     }
114774                 }
114775             }
114776
114777
114778             rawMembershipEditor.entityID = function(val) {
114779                 if (!arguments.length) { return _entityID; }
114780                 _entityID = val;
114781                 _showBlank = false;
114782                 return rawMembershipEditor;
114783             };
114784
114785
114786             return rawMembershipEditor;
114787         }
114788
114789         // This currently only works with the 'restrictions' field
114790         // It borrows some code from uiHelp
114791
114792         function uiFieldHelp(context, fieldName) {
114793             var fieldHelp = {};
114794             var _inspector = d3_select(null);
114795             var _wrap = d3_select(null);
114796             var _body = d3_select(null);
114797
114798             var fieldHelpKeys = {
114799                 restrictions: [
114800                     ['about',[
114801                         'about',
114802                         'from_via_to',
114803                         'maxdist',
114804                         'maxvia'
114805                     ]],
114806                     ['inspecting',[
114807                         'about',
114808                         'from_shadow',
114809                         'allow_shadow',
114810                         'restrict_shadow',
114811                         'only_shadow',
114812                         'restricted',
114813                         'only'
114814                     ]],
114815                     ['modifying',[
114816                         'about',
114817                         'indicators',
114818                         'allow_turn',
114819                         'restrict_turn',
114820                         'only_turn'
114821                     ]],
114822                     ['tips',[
114823                         'simple',
114824                         'simple_example',
114825                         'indirect',
114826                         'indirect_example',
114827                         'indirect_noedit'
114828                     ]]
114829                 ]
114830             };
114831
114832             var fieldHelpHeadings = {};
114833
114834             var replacements = {
114835                 distField: t('restriction.controls.distance'),
114836                 viaField: t('restriction.controls.via'),
114837                 fromShadow: icon('#iD-turn-shadow', 'pre-text shadow from'),
114838                 allowShadow: icon('#iD-turn-shadow', 'pre-text shadow allow'),
114839                 restrictShadow: icon('#iD-turn-shadow', 'pre-text shadow restrict'),
114840                 onlyShadow: icon('#iD-turn-shadow', 'pre-text shadow only'),
114841                 allowTurn: icon('#iD-turn-yes', 'pre-text turn'),
114842                 restrictTurn: icon('#iD-turn-no', 'pre-text turn'),
114843                 onlyTurn: icon('#iD-turn-only', 'pre-text turn')
114844             };
114845
114846
114847             // For each section, squash all the texts into a single markdown document
114848             var docs = fieldHelpKeys[fieldName].map(function(key) {
114849                 var helpkey = 'help.field.' + fieldName + '.' + key[0];
114850                 var text = key[1].reduce(function(all, part) {
114851                     var subkey = helpkey + '.' + part;
114852                     var depth = fieldHelpHeadings[subkey];                     // is this subkey a heading?
114853                     var hhh = depth ? Array(depth + 1).join('#') + ' ' : '';   // if so, prepend with some ##'s
114854                     return all + hhh + t(subkey, replacements) + '\n\n';
114855                 }, '');
114856
114857                 return {
114858                     key: helpkey,
114859                     title: t(helpkey + '.title'),
114860                     html: marked_1(text.trim())
114861                 };
114862             });
114863
114864
114865             function show() {
114866                 updatePosition();
114867
114868                 _body
114869                     .classed('hide', false)
114870                     .style('opacity', '0')
114871                     .transition()
114872                     .duration(200)
114873                     .style('opacity', '1');
114874             }
114875
114876
114877             function hide() {
114878                 _body
114879                     .classed('hide', true)
114880                     .transition()
114881                     .duration(200)
114882                     .style('opacity', '0')
114883                     .on('end', function () {
114884                         _body.classed('hide', true);
114885                     });
114886             }
114887
114888
114889             function clickHelp(index) {
114890                 var d = docs[index];
114891                 var tkeys = fieldHelpKeys[fieldName][index][1];
114892
114893                 _body.selectAll('.field-help-nav-item')
114894                     .classed('active', function(d, i) { return i === index; });
114895
114896                 var content = _body.selectAll('.field-help-content')
114897                     .html(d.html);
114898
114899                 // class the paragraphs so we can find and style them
114900                 content.selectAll('p')
114901                     .attr('class', function(d, i) { return tkeys[i]; });
114902
114903                 // insert special content for certain help sections
114904                 if (d.key === 'help.field.restrictions.inspecting') {
114905                     content
114906                         .insert('img', 'p.from_shadow')
114907                         .attr('class', 'field-help-image cf')
114908                         .attr('src', context.imagePath('tr_inspect.gif'));
114909
114910                 } else if (d.key === 'help.field.restrictions.modifying') {
114911                     content
114912                         .insert('img', 'p.allow_turn')
114913                         .attr('class', 'field-help-image cf')
114914                         .attr('src', context.imagePath('tr_modify.gif'));
114915                 }
114916             }
114917
114918
114919             fieldHelp.button = function(selection) {
114920                 if (_body.empty()) { return; }
114921
114922                 var button = selection.selectAll('.field-help-button')
114923                     .data([0]);
114924
114925                 // enter/update
114926                 button.enter()
114927                     .append('button')
114928                     .attr('class', 'field-help-button')
114929                     .attr('tabindex', -1)
114930                     .call(svgIcon('#iD-icon-help'))
114931                     .merge(button)
114932                     .on('click', function () {
114933                         event.stopPropagation();
114934                         event.preventDefault();
114935                         if (_body.classed('hide')) {
114936                             show();
114937                         } else {
114938                             hide();
114939                         }
114940                     });
114941             };
114942
114943
114944             function updatePosition() {
114945                 var wrap = _wrap.node();
114946                 var inspector = _inspector.node();
114947                 var wRect = wrap.getBoundingClientRect();
114948                 var iRect = inspector.getBoundingClientRect();
114949
114950                 _body
114951                     .style('top', wRect.top + inspector.scrollTop - iRect.top + 'px');
114952             }
114953
114954
114955             fieldHelp.body = function(selection) {
114956                 // This control expects the field to have a form-field-input-wrap div
114957                 _wrap = selection.selectAll('.form-field-input-wrap');
114958                 if (_wrap.empty()) { return; }
114959
114960                 // absolute position relative to the inspector, so it "floats" above the fields
114961                 _inspector = d3_select('#sidebar .entity-editor-pane .inspector-body');
114962                 if (_inspector.empty()) { return; }
114963
114964                 _body = _inspector.selectAll('.field-help-body')
114965                     .data([0]);
114966
114967                 var enter = _body.enter()
114968                     .append('div')
114969                     .attr('class', 'field-help-body hide');   // initially hidden
114970
114971                 var titleEnter = enter
114972                     .append('div')
114973                     .attr('class', 'field-help-title cf');
114974
114975                 titleEnter
114976                     .append('h2')
114977                     .attr('class', ((textDirection === 'rtl') ? 'fr' : 'fl'))
114978                     .text(t('help.field.' + fieldName + '.title'));
114979
114980                 titleEnter
114981                     .append('button')
114982                     .attr('class', 'fr close')
114983                     .on('click', function() {
114984                         event.stopPropagation();
114985                         event.preventDefault();
114986                         hide();
114987                     })
114988                     .call(svgIcon('#iD-icon-close'));
114989
114990                 var navEnter = enter
114991                     .append('div')
114992                     .attr('class', 'field-help-nav cf');
114993
114994                 var titles = docs.map(function(d) { return d.title; });
114995                 navEnter.selectAll('.field-help-nav-item')
114996                     .data(titles)
114997                     .enter()
114998                     .append('div')
114999                     .attr('class', 'field-help-nav-item')
115000                     .text(function(d) { return d; })
115001                     .on('click', function(d, i) {
115002                         event.stopPropagation();
115003                         event.preventDefault();
115004                         clickHelp(i);
115005                     });
115006
115007                 enter
115008                     .append('div')
115009                     .attr('class', 'field-help-content');
115010
115011                 _body = _body
115012                     .merge(enter);
115013
115014                 clickHelp(0);
115015             };
115016
115017
115018             return fieldHelp;
115019         }
115020
115021         function uiFieldCheck(field, context) {
115022             var dispatch$1 = dispatch('change');
115023             var options = field.strings && field.strings.options;
115024             var values = [];
115025             var texts = [];
115026
115027             var input = d3_select(null);
115028             var text = d3_select(null);
115029             var label = d3_select(null);
115030             var reverser = d3_select(null);
115031
115032             var _impliedYes;
115033             var _entityID;
115034             var _value;
115035
115036
115037             if (options) {
115038                 for (var k in options) {
115039                     values.push(k === 'undefined' ? undefined : k);
115040                     texts.push(field.t('options.' + k, { 'default': options[k] }));
115041                 }
115042             } else {
115043                 values = [undefined, 'yes'];
115044                 texts = [t('inspector.unknown'), t('inspector.check.yes')];
115045                 if (field.type !== 'defaultCheck') {
115046                     values.push('no');
115047                     texts.push(t('inspector.check.no'));
115048                 }
115049             }
115050
115051
115052             // Checks tags to see whether an undefined value is "Assumed to be Yes"
115053             function checkImpliedYes() {
115054                 _impliedYes = (field.id === 'oneway_yes');
115055
115056                 // hack: pretend `oneway` field is a `oneway_yes` field
115057                 // where implied oneway tag exists (e.g. `junction=roundabout`) #2220, #1841
115058                 if (field.id === 'oneway') {
115059                     var entity = context.entity(_entityID);
115060                     for (var key in entity.tags) {
115061                         if (key in osmOneWayTags && (entity.tags[key] in osmOneWayTags[key])) {
115062                             _impliedYes = true;
115063                             texts[0] = t('presets.fields.oneway_yes.options.undefined');
115064                             break;
115065                         }
115066                     }
115067                 }
115068             }
115069
115070
115071             function reverserHidden() {
115072                 if (!d3_select('div.inspector-hover').empty()) { return true; }
115073                 return !(_value === 'yes' || (_impliedYes && !_value));
115074             }
115075
115076
115077             function reverserSetText(selection) {
115078                 var entity = context.hasEntity(_entityID);
115079                 if (reverserHidden() || !entity) { return selection; }
115080
115081                 var first = entity.first();
115082                 var last = entity.isClosed() ? entity.nodes[entity.nodes.length - 2] : entity.last();
115083                 var pseudoDirection = first < last;
115084                 var icon = pseudoDirection ? '#iD-icon-forward' : '#iD-icon-backward';
115085
115086                 selection.selectAll('.reverser-span')
115087                     .text(t('inspector.check.reverser'))
115088                     .call(svgIcon(icon, 'inline'));
115089
115090                 return selection;
115091             }
115092
115093
115094             var check = function(selection) {
115095                 checkImpliedYes();
115096
115097                 label = selection.selectAll('.form-field-input-wrap')
115098                     .data([0]);
115099
115100                 var enter = label.enter()
115101                     .append('label')
115102                     .attr('class', 'form-field-input-wrap form-field-input-check');
115103
115104                 enter
115105                     .append('input')
115106                     .property('indeterminate', field.type !== 'defaultCheck')
115107                     .attr('type', 'checkbox')
115108                     .attr('id', 'preset-input-' + field.safeid);
115109
115110                 enter
115111                     .append('span')
115112                     .text(texts[0])
115113                     .attr('class', 'value');
115114
115115                 if (field.type === 'onewayCheck') {
115116                     enter
115117                         .append('a')
115118                         .attr('id', 'preset-input-' + field.safeid + '-reverser')
115119                         .attr('class', 'reverser button' + (reverserHidden() ? ' hide' : ''))
115120                         .attr('href', '#')
115121                         .append('span')
115122                         .attr('class', 'reverser-span');
115123                 }
115124
115125                 label = label.merge(enter);
115126                 input = label.selectAll('input');
115127                 text = label.selectAll('span.value');
115128
115129                 input
115130                     .on('click', function() {
115131                         event.stopPropagation();
115132                         var t = {};
115133                         t[field.key] = values[(values.indexOf(_value) + 1) % values.length];
115134
115135                         // Don't cycle through `alternating` or `reversible` states - #4970
115136                         // (They are supported as translated strings, but should not toggle with clicks)
115137                         if (t[field.key] === 'reversible' || t[field.key] === 'alternating') {
115138                             t[field.key] = values[0];
115139                         }
115140
115141                         dispatch$1.call('change', this, t);
115142                     });
115143
115144                 if (field.type === 'onewayCheck') {
115145                     reverser = label.selectAll('.reverser');
115146
115147                     reverser
115148                         .call(reverserSetText)
115149                         .on('click', function() {
115150                             event.preventDefault();
115151                             event.stopPropagation();
115152                             context.perform(
115153                                 actionReverse(_entityID),
115154                                 t('operations.reverse.annotation')
115155                             );
115156                             
115157                             // must manually revalidate since no 'change' event was called
115158                             context.validator().validate();
115159
115160                             d3_select(this)
115161                                 .call(reverserSetText);
115162                         });
115163                 }
115164             };
115165
115166
115167             check.entity = function(_) {
115168                 if (!arguments.length) { return context.hasEntity(_entityID); }
115169                 _entityID = _.id;
115170                 return check;
115171             };
115172
115173
115174             check.tags = function(tags) {
115175
115176                 function isChecked(val) {
115177                     return val !== 'no' && val !== '' && val !== undefined && val !== null;
115178                 }
115179
115180                 function textFor(val) {
115181                     if (val === '') { val = undefined; }
115182                     var index = values.indexOf(val);
115183                     return (index !== -1 ? texts[index] : ('"' + val + '"'));
115184                 }
115185
115186                 checkImpliedYes();
115187                 _value = tags[field.key] && tags[field.key].toLowerCase();
115188
115189                 if (field.type === 'onewayCheck' && (_value === '1' || _value === '-1')) {
115190                     _value = 'yes';
115191                 }
115192
115193                 input
115194                     .property('indeterminate', field.type !== 'defaultCheck' && !_value)
115195                     .property('checked', isChecked(_value));
115196
115197                 text
115198                     .text(textFor(_value));
115199
115200                 label
115201                     .classed('set', !!_value);
115202
115203                 if (field.type === 'onewayCheck') {
115204                     reverser
115205                         .classed('hide', reverserHidden())
115206                         .call(reverserSetText);
115207                 }
115208             };
115209
115210
115211             check.focus = function() {
115212                 input.node().focus();
115213             };
115214
115215             return utilRebind(check, dispatch$1, 'on');
115216         }
115217
115218         function uiFieldCombo(field, context) {
115219             var dispatch$1 = dispatch('change');
115220             var taginfo = services$1.taginfo;
115221             var isMulti = (field.type === 'multiCombo');
115222             var isNetwork = (field.type === 'networkCombo');
115223             var isSemi = (field.type === 'semiCombo');
115224             var optstrings = field.strings && field.strings.options;
115225             var optarray = field.options;
115226             var snake_case = (field.snake_case || (field.snake_case === undefined));
115227             var caseSensitive = field.caseSensitive;
115228             var combobox = uiCombobox(context, 'combo-' + field.safeid)
115229                 .caseSensitive(caseSensitive)
115230                 .minItems(isMulti || isSemi ? 1 : 2);
115231             var container = d3_select(null);
115232             var inputWrap = d3_select(null);
115233             var input = d3_select(null);
115234             var _comboData = [];
115235             var _multiData = [];
115236             var _entity;
115237             var _countryCode;
115238
115239             // ensure multiCombo field.key ends with a ':'
115240             if (isMulti && /[^:]$/.test(field.key)) {
115241                 field.key += ':';
115242             }
115243
115244
115245             function snake(s) {
115246                 return s.replace(/\s+/g, '_');
115247             }
115248
115249             function unsnake(s) {
115250                 return s.replace(/_+/g, ' ');
115251             }
115252
115253             function clean(s) {
115254                 return s.split(';')
115255                     .map(function(s) { return s.trim(); })
115256                     .join(';');
115257             }
115258
115259
115260             // returns the tag value for a display value
115261             // (for multiCombo, dval should be the key suffix, not the entire key)
115262             function tagValue(dval) {
115263                 dval = clean(dval || '');
115264
115265                 if (optstrings) {
115266                     var found = _comboData.find(function(o) {
115267                         return o.key && clean(o.value) === dval;
115268                     });
115269                     if (found) {
115270                         return found.key;
115271                     }
115272                 }
115273
115274                 if (field.type === 'typeCombo' && !dval) {
115275                     return 'yes';
115276                 }
115277
115278                 return (snake_case ? snake(dval) : dval) || undefined;
115279             }
115280
115281
115282             // returns the display value for a tag value
115283             // (for multiCombo, tval should be the key suffix, not the entire key)
115284             function displayValue(tval) {
115285                 tval = tval || '';
115286
115287                 if (optstrings) {
115288                     var found = _comboData.find(function(o) {
115289                         return o.key === tval && o.value;
115290                     });
115291                     if (found) {
115292                         return found.value;
115293                     }
115294                 }
115295
115296                 if (field.type === 'typeCombo' && tval.toLowerCase() === 'yes') {
115297                     return '';
115298                 }
115299
115300                 return snake_case ? unsnake(tval) : tval;
115301             }
115302
115303
115304             // Compute the difference between arrays of objects by `value` property
115305             //
115306             // objectDifference([{value:1}, {value:2}, {value:3}], [{value:2}])
115307             // > [{value:1}, {value:3}]
115308             //
115309             function objectDifference(a, b) {
115310                 return a.filter(function(d1) {
115311                     return !b.some(function(d2) { return d1.value === d2.value; });
115312                 });
115313             }
115314
115315
115316             function initCombo(selection, attachTo) {
115317                 if (optstrings) {
115318                     selection.attr('readonly', 'readonly');
115319                     selection.call(combobox, attachTo);
115320                     setStaticValues(setPlaceholder);
115321
115322                 } else if (optarray) {
115323                     selection.call(combobox, attachTo);
115324                     setStaticValues(setPlaceholder);
115325
115326                 } else if (taginfo) {
115327                     selection.call(combobox.fetcher(setTaginfoValues), attachTo);
115328                     setTaginfoValues('', setPlaceholder);
115329                 }
115330             }
115331
115332
115333             function setStaticValues(callback) {
115334                 if (!(optstrings || optarray)) { return; }
115335
115336                 if (optstrings) {
115337                     _comboData = Object.keys(optstrings).map(function(k) {
115338                         var v = field.t('options.' + k, { 'default': optstrings[k] });
115339                         return {
115340                             key: k,
115341                             value: v,
115342                             title: v
115343                         };
115344                     });
115345
115346                 } else if (optarray) {
115347                     _comboData = optarray.map(function(k) {
115348                         var v = snake_case ? unsnake(k) : k;
115349                         return {
115350                             key: k,
115351                             value: v,
115352                             title: v
115353                         };
115354                     });
115355                 }
115356
115357                 combobox.data(objectDifference(_comboData, _multiData));
115358                 if (callback) { callback(_comboData); }
115359             }
115360
115361
115362             function setTaginfoValues(q, callback) {
115363                 var fn = isMulti ? 'multikeys' : 'values';
115364                 var query = (isMulti ? field.key : '') + q;
115365                 var hasCountryPrefix = isNetwork && _countryCode && _countryCode.indexOf(q.toLowerCase()) === 0;
115366                 if (hasCountryPrefix) {
115367                     query = _countryCode + ':';
115368                 }
115369
115370                 var params = {
115371                     debounce: (q !== ''),
115372                     key: field.key,
115373                     query: query
115374                 };
115375
115376                 if (_entity) {
115377                     params.geometry = context.geometry(_entity.id);
115378                 }
115379
115380                 taginfo[fn](params, function(err, data) {
115381                     if (err) { return; }
115382
115383                     data = data.filter(function(d) {
115384
115385                         if (field.type === 'typeCombo' && d.value === 'yes') {
115386                             // don't show the fallback value
115387                             return false;
115388                         }
115389
115390                         // don't show values with very low usage
115391                         return !d.count || d.count > 10;
115392                     });
115393
115394                     var deprecatedValues = osmEntity.deprecatedTagValuesByKey()[field.key];
115395                     if (deprecatedValues) {
115396                         // don't suggest deprecated tag values
115397                         data = data.filter(function(d) {
115398                             return deprecatedValues.indexOf(d.value) === -1;
115399                         });
115400                     }
115401
115402                     if (hasCountryPrefix) {
115403                         data = data.filter(function(d) {
115404                             return d.value.toLowerCase().indexOf(_countryCode + ':') === 0;
115405                         });
115406                     }
115407
115408                     // hide the caret if there are no suggestions
115409                     container.classed('empty-combobox', data.length === 0);
115410
115411                     _comboData = data.map(function(d) {
115412                         var k = d.value;
115413                         if (isMulti) { k = k.replace(field.key, ''); }
115414                         var v = snake_case ? unsnake(k) : k;
115415                         return {
115416                             key: k,
115417                             value: v,
115418                             title: isMulti ? v : d.title
115419                         };
115420                     });
115421
115422                     _comboData = objectDifference(_comboData, _multiData);
115423                     if (callback) { callback(_comboData); }
115424                 });
115425             }
115426
115427
115428             function setPlaceholder(values) {
115429                 var ph;
115430
115431                 if (isMulti || isSemi) {
115432                     ph = field.placeholder() || t('inspector.add');
115433                 } else {
115434                     var vals = values
115435                         .map(function(d) { return d.value; })
115436                         .filter(function(s) { return s.length < 20; });
115437
115438                     var placeholders = vals.length > 1 ? vals : values.map(function(d) { return d.key; });
115439                     ph = field.placeholder() || placeholders.slice(0, 3).join(', ');
115440                 }
115441
115442                 if (!/(…|\.\.\.)$/.test(ph)) {
115443                     ph += '…';
115444                 }
115445
115446                 container.selectAll('input')
115447                     .attr('placeholder', ph);
115448             }
115449
115450
115451             function change() {
115452                 var t = {};
115453                 var val;
115454
115455                 if (isMulti || isSemi) {
115456                     val = tagValue(utilGetSetValue(input).replace(/,/g, ';')) || '';
115457                     container.classed('active', false);
115458                     utilGetSetValue(input, '');
115459
115460                     var vals = val.split(';').filter(Boolean);
115461                     if (!vals.length) { return; }
115462
115463                     if (isMulti) {
115464                         utilArrayUniq(vals).forEach(function(v) {
115465                             var key = field.key + v;
115466                             if (_entity) {
115467                                 // don't set a multicombo value to 'yes' if it already has a non-'no' value
115468                                 // e.g. `language:de=main`
115469                                 var old = _entity.tags[key] || '';
115470                                 if (old && old.toLowerCase() !== 'no') { return; }
115471                             }
115472                             field.keys.push(key);
115473                             t[key] = 'yes';
115474                         });
115475
115476                     } else if (isSemi) {
115477                         var arr = _multiData.map(function(d) { return d.key; });
115478                         arr = arr.concat(vals);
115479                         t[field.key] = utilArrayUniq(arr).filter(Boolean).join(';');
115480                     }
115481
115482                     window.setTimeout(function() { input.node().focus(); }, 10);
115483
115484                 } else {
115485                     val = tagValue(utilGetSetValue(input));
115486                     t[field.key] = val;
115487                 }
115488
115489                 dispatch$1.call('change', this, t);
115490             }
115491
115492
115493             function removeMultikey(d) {
115494                 event.stopPropagation();
115495                 var t = {};
115496                 if (isMulti) {
115497                     t[d.key] = undefined;
115498                 } else if (isSemi) {
115499                     var arr = _multiData.map(function(md) {
115500                         return md.key === d.key ? null : md.key;
115501                     }).filter(Boolean);
115502
115503                     arr = utilArrayUniq(arr);
115504                     t[field.key] = arr.length ? arr.join(';') : undefined;
115505                 }
115506                 dispatch$1.call('change', this, t);
115507             }
115508
115509
115510             function combo(selection) {
115511                 container = selection.selectAll('.form-field-input-wrap')
115512                     .data([0]);
115513
115514                 var type = (isMulti || isSemi) ? 'multicombo': 'combo';
115515                 container = container.enter()
115516                     .append('div')
115517                     .attr('class', 'form-field-input-wrap form-field-input-' + type)
115518                     .merge(container);
115519
115520                 if (isMulti || isSemi) {
115521                     container = container.selectAll('.chiplist')
115522                         .data([0]);
115523
115524                     var listClass = 'chiplist';
115525
115526                     // Use a separate line for each value in the Destinations field
115527                     // to mimic highway exit signs
115528                     if (field.id === 'destination_oneway') {
115529                         listClass += ' full-line-chips';
115530                     }
115531
115532                     container = container.enter()
115533                         .append('ul')
115534                         .attr('class', listClass)
115535                         .on('click', function() {
115536                             window.setTimeout(function() { input.node().focus(); }, 10);
115537                         })
115538                         .merge(container);
115539
115540
115541                     inputWrap = container.selectAll('.input-wrap')
115542                         .data([0]);
115543
115544                     inputWrap = inputWrap.enter()
115545                         .append('li')
115546                         .attr('class', 'input-wrap')
115547                         .merge(inputWrap);
115548
115549                     input = inputWrap.selectAll('input')
115550                         .data([0]);
115551                 } else {
115552                     input = container.selectAll('input')
115553                         .data([0]);
115554                 }
115555
115556                 input = input.enter()
115557                     .append('input')
115558                     .attr('type', 'text')
115559                     .attr('id', 'preset-input-' + field.safeid)
115560                     .call(utilNoAuto)
115561                     .call(initCombo, selection)
115562                     .merge(input);
115563
115564                 if (isNetwork && _entity) {
115565                     var center = _entity.extent(context.graph()).center();
115566                     var countryCode = iso1A2Code(center);
115567                     _countryCode = countryCode && countryCode.toLowerCase();
115568                 }
115569
115570                 input
115571                     .on('change', change)
115572                     .on('blur', change);
115573
115574                 input
115575                     .on('keydown.field', function() {
115576                         switch (event.keyCode) {
115577                             case 13: // ↩ Return
115578                                 input.node().blur(); // blurring also enters the value
115579                                 event.stopPropagation();
115580                                 break;
115581                         }
115582                     });
115583
115584                 if (isMulti || isSemi) {
115585                     combobox
115586                         .on('accept', function() {
115587                             input.node().blur();
115588                             input.node().focus();
115589                         });
115590
115591                     input
115592                         .on('focus', function() { container.classed('active', true); });
115593                 }
115594             }
115595
115596
115597             combo.tags = function(tags) {
115598                 if (isMulti || isSemi) {
115599                     _multiData = [];
115600
115601                     if (isMulti) {
115602                         // Build _multiData array containing keys already set..
115603                         for (var k in tags) {
115604                             if (k.indexOf(field.key) !== 0) { continue; }
115605                             var v = (tags[k] || '').toLowerCase();
115606                             if (v === '' || v === 'no') { continue; }
115607
115608                             var suffix = k.substring(field.key.length);
115609                             _multiData.push({
115610                                 key: k,
115611                                 value: displayValue(suffix)
115612                             });
115613                         }
115614
115615                         // Set keys for form-field modified (needed for undo and reset buttons)..
115616                         field.keys = _multiData.map(function(d) { return d.key; });
115617
115618                     } else if (isSemi) {
115619                         var arr = utilArrayUniq((tags[field.key] || '').split(';')).filter(Boolean);
115620                         _multiData = arr.map(function(k) {
115621                             return {
115622                                 key: k,
115623                                 value: displayValue(k)
115624                             };
115625                         });
115626                     }
115627
115628                     // Exclude existing multikeys from combo options..
115629                     var available = objectDifference(_comboData, _multiData);
115630                     combobox.data(available);
115631
115632                     // Hide 'Add' button if this field uses fixed set of
115633                     // translateable optstrings and they're all currently used..
115634                     container.selectAll('.combobox-input, .combobox-caret')
115635                         .classed('hide', optstrings && !available.length);
115636
115637
115638                     // Render chips
115639                     var chips = container.selectAll('.chip')
115640                         .data(_multiData);
115641
115642                     chips.exit()
115643                         .remove();
115644
115645                     var enter = chips.enter()
115646                         .insert('li', '.input-wrap')
115647                         .attr('class', 'chip')
115648                         .classed('draggable', isSemi);
115649
115650                     enter.append('span');
115651                     enter.append('a');
115652
115653                     chips = chips.merge(enter)
115654                         .order();
115655
115656                     if (isSemi) { // only semiCombo values are ordered
115657                         registerDragAndDrop(chips);
115658                     }
115659
115660                     chips.select('span')
115661                         .text(function(d) { return d.value; });
115662
115663                     chips.select('a')
115664                         .on('click', removeMultikey)
115665                         .attr('class', 'remove')
115666                         .text('×');
115667
115668                 } else {
115669                     utilGetSetValue(input, displayValue(tags[field.key]));
115670                 }
115671             };
115672
115673             function registerDragAndDrop(selection) {
115674
115675                 // allow drag and drop re-ordering of chips
115676                 var dragOrigin, targetIndex;
115677                 selection.call(d3_drag()
115678                     .on('start', function() {
115679                         dragOrigin = {
115680                             x: event.x,
115681                             y: event.y
115682                         };
115683                         targetIndex = null;
115684                     })
115685                     .on('drag', function(d, index) {
115686                         var x = event.x - dragOrigin.x,
115687                             y = event.y - dragOrigin.y;
115688
115689                         if (!d3_select(this).classed('dragging') &&
115690                             // don't display drag until dragging beyond a distance threshold
115691                             Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)) <= 5) { return; }
115692
115693                         d3_select(this)
115694                             .classed('dragging', true);
115695
115696                         targetIndex = null;
115697                         var targetIndexOffsetTop = null;
115698                         var draggedTagWidth = d3_select(this).node().offsetWidth;
115699
115700                         if (field.id === 'destination_oneway') { // meaning tags are full width
115701                             container.selectAll('.chip')
115702                                 .style('transform', function(d2, index2) {
115703                                     var node = d3_select(this).node();
115704
115705                                     if (index === index2) {
115706                                         return 'translate(' + x + 'px, ' + y + 'px)';
115707                                     // move the dragged tag up the order
115708                                     } else if (index2 > index && event.y > node.offsetTop) {
115709                                         if (targetIndex === null || index2 > targetIndex) {
115710                                             targetIndex = index2;
115711                                         }
115712                                         return 'translateY(-100%)';
115713                                     // move the dragged tag down the order
115714                                     } else if (index2 < index && event.y < node.offsetTop + node.offsetHeight) {
115715                                         if (targetIndex === null || index2 < targetIndex) {
115716                                             targetIndex = index2;
115717                                         }
115718                                         return 'translateY(100%)';
115719                                     }
115720                                     return null;
115721                                 });
115722                         } else {
115723                             container.selectAll('.chip')
115724                                 .each(function(d2, index2) {
115725                                     var node = d3_select(this).node();
115726
115727                                     // check the cursor is in the bounding box
115728                                     if (
115729                                         index !== index2 &&
115730                                         event.x < node.offsetLeft + node.offsetWidth + 5 &&
115731                                         event.x > node.offsetLeft &&
115732                                         event.y < node.offsetTop + node.offsetHeight &&
115733                                         event.y > node.offsetTop
115734                                     ) {
115735                                         targetIndex = index2;
115736                                         targetIndexOffsetTop = node.offsetTop;
115737                                     }
115738                                 })
115739                                 .style('transform', function(d2, index2) {
115740                                     var node = d3_select(this).node();
115741
115742                                     if (index === index2) {
115743                                         return 'translate(' + x + 'px, ' + y + 'px)';
115744                                     }
115745
115746                                     // only translate tags in the same row
115747                                     if (node.offsetTop === targetIndexOffsetTop) {
115748                                         if (index2 < index && index2 >= targetIndex) {
115749                                             return 'translateX(' + draggedTagWidth + 'px)';
115750                                         } else if (index2 > index && index2 <= targetIndex) {
115751                                             return 'translateX(-' + draggedTagWidth + 'px)';
115752                                         }
115753                                     }
115754                                     return null;
115755                                 });
115756                             }
115757                     })
115758                     .on('end', function(d, index) {
115759                         if (!d3_select(this).classed('dragging')) {
115760                             return;
115761                         }
115762
115763                         d3_select(this)
115764                             .classed('dragging', false);
115765
115766                         container.selectAll('.chip')
115767                             .style('transform', null);
115768
115769                         if (typeof targetIndex === 'number') {
115770                             var element = _multiData[index];
115771                             _multiData.splice(index, 1);
115772                             _multiData.splice(targetIndex, 0, element);
115773
115774                             var t = {};
115775
115776                             if (_multiData.length) {
115777                                 t[field.key] = _multiData.map(function(element) {
115778                                     return element.key;
115779                                 }).join(';');
115780                             } else {
115781                                 t[field.key] = undefined;
115782                             }
115783
115784                             dispatch$1.call('change', this, t);
115785                         }
115786                         dragOrigin = undefined;
115787                         targetIndex = undefined;
115788                     })
115789                 );
115790             }
115791
115792
115793             combo.focus = function() {
115794                 input.node().focus();
115795             };
115796
115797
115798             combo.entity = function(val) {
115799                 if (!arguments.length) { return _entity; }
115800                 _entity = val;
115801                 return combo;
115802             };
115803
115804
115805             return utilRebind(combo, dispatch$1, 'on');
115806         }
115807
115808         function uiFieldText(field, context) {
115809             var dispatch$1 = dispatch('change');
115810             var input = d3_select(null);
115811             var outlinkButton = d3_select(null);
115812             var _entity;
115813
115814             function i(selection) {
115815                 var preset = _entity && context.presets().match(_entity, context.graph());
115816                 var isLocked = preset && preset.suggestion && field.id === 'brand';
115817                 field.locked(isLocked);
115818
115819                 var wrap = selection.selectAll('.form-field-input-wrap')
115820                     .data([0]);
115821
115822                 wrap = wrap.enter()
115823                     .append('div')
115824                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
115825                     .merge(wrap);
115826
115827                 var fieldID = 'preset-input-' + field.safeid;
115828
115829                 input = wrap.selectAll('input')
115830                     .data([0]);
115831
115832                 input = input.enter()
115833                     .append('input')
115834                     .attr('type', field.type === 'identifier' ? 'text' : field.type)
115835                     .attr('id', fieldID)
115836                     .attr('placeholder', field.placeholder() || t('inspector.unknown'))
115837                     .classed(field.type, true)
115838                     .call(utilNoAuto)
115839                     .merge(input);
115840
115841                 input
115842                     .classed('disabled', !!isLocked)
115843                     .attr('readonly', isLocked || null)
115844                     .on('input', change(true))
115845                     .on('blur', change())
115846                     .on('change', change());
115847
115848
115849                 if (field.type === 'tel' && _entity) {
115850                     var center = _entity.extent(context.graph()).center();
115851                     var countryCode = iso1A2Code(center);
115852                     var format = countryCode && dataPhoneFormats[countryCode.toLowerCase()];
115853                     if (format) {
115854                         wrap.selectAll('#' + fieldID)
115855                             .attr('placeholder', format);
115856                     }
115857
115858                 } else if (field.type === 'number') {
115859                     var rtl = (textDirection === 'rtl');
115860
115861                     input.attr('type', 'text');
115862
115863                     var buttons = wrap.selectAll('.increment, .decrement')
115864                         .data(rtl ? [1, -1] : [-1, 1]);
115865
115866                     buttons.enter()
115867                         .append('button')
115868                         .attr('tabindex', -1)
115869                         .attr('class', function(d) {
115870                             var which = (d === 1 ? 'increment' : 'decrement');
115871                             return 'form-field-button ' + which;
115872                         })
115873                         .merge(buttons)
115874                         .on('click', function(d) {
115875                             event.preventDefault();
115876                             var raw_vals = input.node().value || '0';
115877                             var vals = raw_vals.split(';');
115878                             vals = vals.map(function(v) {
115879                                 var num = parseFloat(v.trim(), 10);
115880                                 return isFinite(num) ? clamped(num + d) : v.trim();
115881                             });
115882                             input.node().value = vals.join(';');
115883                             change()();
115884                         });
115885                 } else if (field.type === 'identifier' && field.urlFormat && field.pattern) {
115886
115887                     input.attr('type', 'text');
115888
115889                     outlinkButton = wrap.selectAll('.foreign-id-permalink')
115890                         .data([0]);
115891
115892                     outlinkButton.enter()
115893                         .append('button')
115894                         .attr('tabindex', -1)
115895                         .call(svgIcon('#iD-icon-out-link'))
115896                         .attr('class', 'form-field-button foreign-id-permalink')
115897                         .classed('disabled', !validIdentifierValueForLink())
115898                         .attr('title', function() {
115899                             var domainResults = /^https?:\/\/(.{1,}?)\//.exec(field.urlFormat);
115900                             if (domainResults.length >= 2 && domainResults[1]) {
115901                                 var domain = domainResults[1];
115902                                 return t('icons.view_on', { domain: domain });
115903                             }
115904                             return '';
115905                         })
115906                         .on('click', function() {
115907                             event.preventDefault();
115908
115909                             var value = validIdentifierValueForLink();
115910                             if (value) {
115911                                 var url = field.urlFormat.replace(/{value}/, encodeURIComponent(value));
115912                                 window.open(url, '_blank');
115913                             }
115914                         })
115915                         .merge(outlinkButton);
115916                 }
115917             }
115918
115919
115920             function validIdentifierValueForLink() {
115921                 if (field.type === 'identifier' && field.pattern) {
115922                     var value = utilGetSetValue(input).trim().split(';')[0];
115923                     return value && value.match(new RegExp(field.pattern));
115924                 }
115925                 return null;
115926             }
115927
115928
115929             // clamp number to min/max
115930             function clamped(num) {
115931                 if (field.minValue !== undefined) {
115932                     num = Math.max(num, field.minValue);
115933                 }
115934                 if (field.maxValue !== undefined) {
115935                     num = Math.min(num, field.maxValue);
115936                 }
115937                 return num;
115938             }
115939
115940
115941             function change(onInput) {
115942                 return function() {
115943                     var t = {};
115944                     var val = utilGetSetValue(input).trim() || undefined;
115945
115946                     if (!onInput) {
115947                         if (field.type === 'number' && val !== undefined) {
115948                             var vals = val.split(';');
115949                             vals = vals.map(function(v) {
115950                                 var num = parseFloat(v.trim(), 10);
115951                                 return isFinite(num) ? clamped(num) : v.trim();
115952                             });
115953                             val = vals.join(';');
115954                         }
115955                         utilGetSetValue(input, val || '');
115956                     }
115957                     t[field.key] = val;
115958                     dispatch$1.call('change', this, t, onInput);
115959                 };
115960             }
115961
115962
115963             i.entity = function(val) {
115964                 if (!arguments.length) { return _entity; }
115965                 _entity = val;
115966                 return i;
115967             };
115968
115969
115970             i.tags = function(tags) {
115971                 utilGetSetValue(input, tags[field.key] || '');
115972
115973                 if (outlinkButton && !outlinkButton.empty()) {
115974                     var disabled = !validIdentifierValueForLink();
115975                     outlinkButton.classed('disabled', disabled);
115976                 }
115977             };
115978
115979
115980             i.focus = function() {
115981                 var node = input.node();
115982                 if (node) { node.focus(); }
115983             };
115984
115985             return utilRebind(i, dispatch$1, 'on');
115986         }
115987
115988         function uiFieldAccess(field, context) {
115989             var dispatch$1 = dispatch('change');
115990             var items = d3_select(null);
115991
115992             function access(selection) {
115993                 var wrap = selection.selectAll('.form-field-input-wrap')
115994                     .data([0]);
115995
115996                 wrap = wrap.enter()
115997                     .append('div')
115998                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
115999                     .merge(wrap);
116000
116001                 var list = wrap.selectAll('ul')
116002                     .data([0]);
116003
116004                 list = list.enter()
116005                     .append('ul')
116006                     .attr('class', 'rows')
116007                     .merge(list);
116008
116009
116010                 items = list.selectAll('li')
116011                     .data(field.keys);
116012
116013                 // Enter
116014                 var enter = items.enter()
116015                     .append('li')
116016                     .attr('class', function(d) { return 'labeled-input preset-access-' + d; });
116017
116018                 enter
116019                     .append('span')
116020                     .attr('class', 'label preset-label-access')
116021                     .attr('for', function(d) { return 'preset-input-access-' + d; })
116022                     .text(function(d) { return field.t('types.' + d); });
116023
116024                 enter
116025                     .append('div')
116026                     .attr('class', 'preset-input-access-wrap')
116027                     .append('input')
116028                     .attr('type', 'text')
116029                     .attr('class', function(d) { return 'preset-input-access preset-input-access-' + d; })
116030                     .call(utilNoAuto)
116031                     .each(function(d) {
116032                         d3_select(this)
116033                             .call(uiCombobox(context, 'access-' + d)
116034                                 .data(access.options(d))
116035                             );
116036                     });
116037
116038
116039                 // Update
116040                 items = items.merge(enter);
116041
116042                 wrap.selectAll('.preset-input-access')
116043                     .on('change', change)
116044                     .on('blur', change);
116045             }
116046
116047
116048             function change(d) {
116049                 var tag = {};
116050                 tag[d] = utilGetSetValue(d3_select(this)) || undefined;
116051                 dispatch$1.call('change', this, tag);
116052             }
116053
116054
116055             access.options = function(type) {
116056                 var options = ['no', 'permissive', 'private', 'permit', 'destination'];
116057
116058                 if (type !== 'access') {
116059                     options.unshift('yes');
116060                     options.push('designated');
116061
116062                     if (type === 'bicycle') {
116063                         options.push('dismount');
116064                     }
116065                 }
116066
116067                 return options.map(function(option) {
116068                     return {
116069                         title: field.t('options.' + option + '.description'),
116070                         value: option
116071                     };
116072                 });
116073             };
116074
116075
116076             var placeholders = {
116077                 footway: {
116078                     foot: 'designated',
116079                     motor_vehicle: 'no'
116080                 },
116081                 steps: {
116082                     foot: 'yes',
116083                     motor_vehicle: 'no',
116084                     bicycle: 'no',
116085                     horse: 'no'
116086                 },
116087                 pedestrian: {
116088                     foot: 'yes',
116089                     motor_vehicle: 'no'
116090                 },
116091                 cycleway: {
116092                     motor_vehicle: 'no',
116093                     bicycle: 'designated'
116094                 },
116095                 bridleway: {
116096                     motor_vehicle: 'no',
116097                     horse: 'designated'
116098                 },
116099                 path: {
116100                     foot: 'yes',
116101                     motor_vehicle: 'no',
116102                     bicycle: 'yes',
116103                     horse: 'yes'
116104                 },
116105                 motorway: {
116106                     foot: 'no',
116107                     motor_vehicle: 'yes',
116108                     bicycle: 'no',
116109                     horse: 'no'
116110                 },
116111                 trunk: {
116112                     motor_vehicle: 'yes'
116113                 },
116114                 primary: {
116115                     foot: 'yes',
116116                     motor_vehicle: 'yes',
116117                     bicycle: 'yes',
116118                     horse: 'yes'
116119                 },
116120                 secondary: {
116121                     foot: 'yes',
116122                     motor_vehicle: 'yes',
116123                     bicycle: 'yes',
116124                     horse: 'yes'
116125                 },
116126                 tertiary: {
116127                     foot: 'yes',
116128                     motor_vehicle: 'yes',
116129                     bicycle: 'yes',
116130                     horse: 'yes'
116131                 },
116132                 residential: {
116133                     foot: 'yes',
116134                     motor_vehicle: 'yes',
116135                     bicycle: 'yes',
116136                     horse: 'yes'
116137                 },
116138                 unclassified: {
116139                     foot: 'yes',
116140                     motor_vehicle: 'yes',
116141                     bicycle: 'yes',
116142                     horse: 'yes'
116143                 },
116144                 service: {
116145                     foot: 'yes',
116146                     motor_vehicle: 'yes',
116147                     bicycle: 'yes',
116148                     horse: 'yes'
116149                 },
116150                 motorway_link: {
116151                     foot: 'no',
116152                     motor_vehicle: 'yes',
116153                     bicycle: 'no',
116154                     horse: 'no'
116155                 },
116156                 trunk_link: {
116157                     motor_vehicle: 'yes'
116158                 },
116159                 primary_link: {
116160                     foot: 'yes',
116161                     motor_vehicle: 'yes',
116162                     bicycle: 'yes',
116163                     horse: 'yes'
116164                 },
116165                 secondary_link: {
116166                     foot: 'yes',
116167                     motor_vehicle: 'yes',
116168                     bicycle: 'yes',
116169                     horse: 'yes'
116170                 },
116171                 tertiary_link: {
116172                     foot: 'yes',
116173                     motor_vehicle: 'yes',
116174                     bicycle: 'yes',
116175                     horse: 'yes'
116176                 }
116177             };
116178
116179
116180             access.tags = function(tags) {
116181                 utilGetSetValue(items.selectAll('.preset-input-access'),
116182                     function(d) { return tags[d] || ''; })
116183                     .attr('placeholder', function() {
116184                         return tags.access ? tags.access : field.placeholder();
116185                     });
116186
116187                 items.selectAll('.preset-input-access-access')
116188                     .attr('placeholder', 'yes');
116189
116190                 var which = tags.highway;
116191                 if (!placeholders[which]) { return; }
116192
116193                 var keys = Object.keys(placeholders[which]);
116194                 keys.forEach(function(k) {
116195                     var v = placeholders[which][k];
116196                     items.selectAll('.preset-input-access-' + k)
116197                         .attr('placeholder', tags.access || v);
116198                 });
116199             };
116200
116201
116202             access.focus = function() {
116203                 items.selectAll('.preset-input-access')
116204                     .node().focus();
116205             };
116206
116207
116208             return utilRebind(access, dispatch$1, 'on');
116209         }
116210
116211         function uiFieldAddress(field, context) {
116212             var dispatch$1 = dispatch('init', 'change');
116213             var wrap = d3_select(null);
116214             var _isInitialized = false;
116215             var _entity;
116216             // needed for placeholder strings
116217             var addrField = context.presets().field('address');
116218
116219             function getNearStreets() {
116220                 var extent = _entity.extent(context.graph());
116221                 var l = extent.center();
116222                 var box = geoExtent(l).padByMeters(200);
116223
116224                 var streets = context.intersects(box)
116225                     .filter(isAddressable)
116226                     .map(function(d) {
116227                         var loc = context.projection([
116228                             (extent[0][0] + extent[1][0]) / 2,
116229                             (extent[0][1] + extent[1][1]) / 2
116230                         ]);
116231                         var choice = geoChooseEdge(context.childNodes(d), loc, context.projection);
116232
116233                         return {
116234                             title: d.tags.name,
116235                             value: d.tags.name,
116236                             dist: choice.distance
116237                         };
116238                     })
116239                     .sort(function(a, b) {
116240                         return a.dist - b.dist;
116241                     });
116242
116243                 return utilArrayUniqBy(streets, 'value');
116244
116245                 function isAddressable(d) {
116246                     return d.tags.highway && d.tags.name && d.type === 'way';
116247                 }
116248             }
116249
116250
116251             function getNearCities() {
116252                 var extent = _entity.extent(context.graph());
116253                 var l = extent.center();
116254                 var box = geoExtent(l).padByMeters(200);
116255
116256                 var cities = context.intersects(box)
116257                     .filter(isAddressable)
116258                     .map(function(d) {
116259                         return {
116260                             title: d.tags['addr:city'] || d.tags.name,
116261                             value: d.tags['addr:city'] || d.tags.name,
116262                             dist: geoSphericalDistance(d.extent(context.graph()).center(), l)
116263                         };
116264                     })
116265                     .sort(function(a, b) {
116266                         return a.dist - b.dist;
116267                     });
116268
116269                 return utilArrayUniqBy(cities, 'value');
116270
116271
116272                 function isAddressable(d) {
116273                     if (d.tags.name) {
116274                         if (d.tags.admin_level === '8' && d.tags.boundary === 'administrative')
116275                             { return true; }
116276                         if (d.tags.border_type === 'city')
116277                             { return true; }
116278                         if (d.tags.place === 'city' || d.tags.place === 'town' || d.tags.place === 'village')
116279                             { return true; }
116280                     }
116281
116282                     if (d.tags['addr:city'])
116283                         { return true; }
116284
116285                     return false;
116286                 }
116287             }
116288
116289             function getNearValues(key) {
116290                 var extent = _entity.extent(context.graph());
116291                 var l = extent.center();
116292                 var box = geoExtent(l).padByMeters(200);
116293
116294                 var results = context.intersects(box)
116295                     .filter(function hasTag(d) { return d.id !== _entity.id && d.tags[key]; })
116296                     .map(function(d) {
116297                         return {
116298                             title: d.tags[key],
116299                             value: d.tags[key],
116300                             dist: geoSphericalDistance(d.extent(context.graph()).center(), l)
116301                         };
116302                     })
116303                     .sort(function(a, b) {
116304                         return a.dist - b.dist;
116305                     });
116306
116307                 return utilArrayUniqBy(results, 'value');
116308             }
116309
116310
116311             function updateForCountryCode(countryCode) {
116312                 countryCode = countryCode.toLowerCase();
116313
116314                 var addressFormat;
116315                 for (var i = 0; i < dataAddressFormats.length; i++) {
116316                     var format = dataAddressFormats[i];
116317                     if (!format.countryCodes) {
116318                         addressFormat = format;   // choose the default format, keep going
116319                     } else if (format.countryCodes.indexOf(countryCode) !== -1) {
116320                         addressFormat = format;   // choose the country format, stop here
116321                         break;
116322                     }
116323                 }
116324
116325                 var dropdowns = addressFormat.dropdowns || [
116326                     'city', 'county', 'country', 'district', 'hamlet',
116327                     'neighbourhood', 'place', 'postcode', 'province',
116328                     'quarter', 'state', 'street', 'subdistrict', 'suburb'
116329                 ];
116330
116331                 var widths = addressFormat.widths || {
116332                     housenumber: 1/3, street: 2/3,
116333                     city: 2/3, state: 1/4, postcode: 1/3
116334                 };
116335
116336                 function row(r) {
116337                     // Normalize widths.
116338                     var total = r.reduce(function(sum, key) {
116339                         return sum + (widths[key] || 0.5);
116340                     }, 0);
116341
116342                     return r.map(function(key) {
116343                         return {
116344                             id: key,
116345                             width: (widths[key] || 0.5) / total
116346                         };
116347                     });
116348                 }
116349
116350                 wrap.selectAll('.addr-row')
116351                     .data(addressFormat.format)
116352                     .enter()
116353                     .append('div')
116354                     .attr('class', 'addr-row')
116355                     .selectAll('input')
116356                     .data(row)
116357                     .enter()
116358                     .append('input')
116359                     .property('type', 'text')
116360                     .attr('placeholder', function (d) {
116361                         var localkey = d.id + '!' + countryCode;
116362                         var tkey = addrField.strings.placeholders[localkey] ? localkey : d.id;
116363                         return addrField.t('placeholders.' + tkey);
116364                     })
116365                     .attr('class', function (d) { return 'addr-' + d.id; })
116366                     .call(utilNoAuto)
116367                     .each(addDropdown)
116368                     .style('width', function (d) { return d.width * 100 + '%'; });
116369
116370
116371                 function addDropdown(d) {
116372                     if (dropdowns.indexOf(d.id) === -1) { return; }  // not a dropdown
116373
116374                     var nearValues = (d.id === 'street') ? getNearStreets
116375                         : (d.id === 'city') ? getNearCities
116376                         : getNearValues;
116377
116378                     d3_select(this)
116379                         .call(uiCombobox(context, 'address-' + d.id)
116380                             .minItems(1)
116381                             .caseSensitive(true)
116382                             .fetcher(function(value, callback) {
116383                                 callback(nearValues('addr:' + d.id));
116384                             })
116385                         );
116386                 }
116387
116388                 wrap.selectAll('input')
116389                     .on('blur', change())
116390                     .on('change', change());
116391
116392                 wrap.selectAll('input:not(.combobox-input)')
116393                     .on('input', change(true));
116394
116395                 dispatch$1.call('init');
116396                 _isInitialized = true;
116397             }
116398
116399
116400             function address(selection) {
116401                 _isInitialized = false;
116402
116403                 wrap = selection.selectAll('.form-field-input-wrap')
116404                     .data([0]);
116405
116406                 wrap = wrap.enter()
116407                     .append('div')
116408                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
116409                     .merge(wrap);
116410
116411                 if (_entity) {
116412                     var countryCode;
116413                     if (context.inIntro()) {
116414                         // localize the address format for the walkthrough
116415                         countryCode = t('intro.graph.countrycode');
116416                     } else {
116417                         var center = _entity.extent(context.graph()).center();
116418                         countryCode = iso1A2Code(center);
116419                     }
116420                     if (countryCode) { updateForCountryCode(countryCode); }
116421                 }
116422             }
116423
116424
116425             function change(onInput) {
116426                 return function() {
116427                     var tags = {};
116428
116429                     wrap.selectAll('input')
116430                         .each(function (subfield) {
116431                             tags[field.key + ':' + subfield.id] = this.value || undefined;
116432                         });
116433
116434                     dispatch$1.call('change', this, tags, onInput);
116435                 };
116436             }
116437
116438
116439             function updateTags(tags) {
116440                 utilGetSetValue(wrap.selectAll('input'), function (subfield) {
116441                     return tags[field.key + ':' + subfield.id] || '';
116442                 });
116443             }
116444
116445
116446             address.entity = function(val) {
116447                 if (!arguments.length) { return _entity; }
116448                 _entity = val;
116449                 return address;
116450             };
116451
116452
116453             address.tags = function(tags) {
116454                 if (_isInitialized) {
116455                     updateTags(tags);
116456                 } else {
116457                     dispatch$1.on('init', function () {
116458                         dispatch$1.on('init', null);
116459                         updateTags(tags);
116460                     });
116461                 }
116462             };
116463
116464
116465             address.focus = function() {
116466                 var node = wrap.selectAll('input').node();
116467                 if (node) { node.focus(); }
116468             };
116469
116470
116471             return utilRebind(address, dispatch$1, 'on');
116472         }
116473
116474         function uiFieldCycleway(field, context) {
116475             var dispatch$1 = dispatch('change');
116476             var items = d3_select(null);
116477             var wrap = d3_select(null);
116478
116479             function cycleway(selection) {
116480
116481                 function stripcolon(s) {
116482                     return s.replace(':', '');
116483                 }
116484
116485
116486                 wrap = selection.selectAll('.form-field-input-wrap')
116487                     .data([0]);
116488
116489                 wrap = wrap.enter()
116490                     .append('div')
116491                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
116492                     .merge(wrap);
116493
116494
116495                 var div = wrap.selectAll('ul')
116496                     .data([0]);
116497
116498                 div = div.enter()
116499                     .append('ul')
116500                     .attr('class', 'rows')
116501                     .merge(div);
116502
116503                 var keys = ['cycleway:left', 'cycleway:right'];
116504
116505                 items = div.selectAll('li')
116506                     .data(keys);
116507
116508                 var enter = items.enter()
116509                     .append('li')
116510                     .attr('class', function(d) { return 'labeled-input preset-cycleway-' + stripcolon(d); });
116511
116512                 enter
116513                     .append('span')
116514                     .attr('class', 'label preset-label-cycleway')
116515                     .attr('for', function(d) { return 'preset-input-cycleway-' + stripcolon(d); })
116516                     .text(function(d) { return field.t('types.' + d); });
116517
116518                 enter
116519                     .append('div')
116520                     .attr('class', 'preset-input-cycleway-wrap')
116521                     .append('input')
116522                     .attr('type', 'text')
116523                     .attr('class', function(d) { return 'preset-input-cycleway preset-input-' + stripcolon(d); })
116524                     .call(utilNoAuto)
116525                     .each(function(d) {
116526                         d3_select(this)
116527                             .call(uiCombobox(context, 'cycleway-' + stripcolon(d))
116528                                 .data(cycleway.options(d))
116529                             );
116530                     });
116531
116532                 items = items.merge(enter);
116533
116534                 // Update
116535                 wrap.selectAll('.preset-input-cycleway')
116536                     .on('change', change)
116537                     .on('blur', change);
116538             }
116539
116540
116541             function change() {
116542                 var left = utilGetSetValue(d3_select('.preset-input-cyclewayleft'));
116543                 var right = utilGetSetValue(d3_select('.preset-input-cyclewayright'));
116544                 var tag = {};
116545
116546                 if (left === 'none' || left === '') { left = undefined; }
116547                 if (right === 'none' || right === '') { right = undefined; }
116548
116549                 // Always set both left and right as changing one can affect the other
116550                 tag = {
116551                     cycleway: undefined,
116552                     'cycleway:left': left,
116553                     'cycleway:right': right
116554                 };
116555
116556                 // If the left and right tags match, use the cycleway tag to tag both
116557                 // sides the same way
116558                 if (left === right) {
116559                     tag = {
116560                         cycleway: left,
116561                         'cycleway:left': undefined,
116562                         'cycleway:right': undefined
116563                     };
116564                 }
116565
116566                 dispatch$1.call('change', this, tag);
116567             }
116568
116569
116570             cycleway.options = function() {
116571                 return Object.keys(field.strings.options).map(function(option) {
116572                     return {
116573                         title: field.t('options.' + option + '.description'),
116574                         value: option
116575                     };
116576                 });
116577             };
116578
116579
116580             cycleway.tags = function(tags) {
116581                 utilGetSetValue(items.selectAll('.preset-input-cycleway'), function(d) {
116582                         // If cycleway is set, always return that
116583                         if (tags.cycleway) {
116584                             return tags.cycleway;
116585                         }
116586                         return tags[d] || '';
116587                     })
116588                     .attr('placeholder', field.placeholder());
116589             };
116590
116591
116592             cycleway.focus = function() {
116593                 var node = wrap.selectAll('input').node();
116594                 if (node) { node.focus(); }
116595             };
116596
116597
116598             return utilRebind(cycleway, dispatch$1, 'on');
116599         }
116600
116601         function uiFieldLanes(field, context) {
116602             var dispatch$1 = dispatch('change');
116603             var LANE_WIDTH = 40;
116604             var LANE_HEIGHT = 200;
116605             var _entityID;
116606
116607             function lanes(selection) {
116608                 var lanesData = context.entity(_entityID).lanes();
116609
116610                 if (!d3_select('.inspector-wrap.inspector-hidden').empty() || !selection.node().parentNode) {
116611                     selection.call(lanes.off);
116612                     return;
116613                 }
116614
116615                 var wrap = selection.selectAll('.form-field-input-wrap')
116616                     .data([0]);
116617
116618                 wrap = wrap.enter()
116619                     .append('div')
116620                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
116621                     .merge(wrap);
116622
116623                 var surface =  wrap.selectAll('.surface')
116624                     .data([0]);
116625
116626                 var d = utilGetDimensions(wrap);
116627                 var freeSpace = d[0] - lanesData.lanes.length * LANE_WIDTH * 1.5 + LANE_WIDTH * 0.5;
116628
116629                 surface = surface.enter()
116630                     .append('svg')
116631                     .attr('width', d[0])
116632                     .attr('height', 300)
116633                     .attr('class', 'surface')
116634                     .merge(surface);
116635
116636
116637                 var lanesSelection = surface.selectAll('.lanes')
116638                     .data([0]);
116639
116640                 lanesSelection = lanesSelection.enter()
116641                     .append('g')
116642                     .attr('class', 'lanes')
116643                     .merge(lanesSelection);
116644
116645                 lanesSelection
116646                     .attr('transform', function () {
116647                         return 'translate(' + (freeSpace / 2) + ', 0)';
116648                     });
116649
116650
116651                 var lane = lanesSelection.selectAll('.lane')
116652                    .data(lanesData.lanes);
116653
116654                 lane.exit()
116655                     .remove();
116656
116657                 var enter = lane.enter()
116658                     .append('g')
116659                     .attr('class', 'lane');
116660
116661                 enter
116662                     .append('g')
116663                     .append('rect')
116664                     .attr('y', 50)
116665                     .attr('width', LANE_WIDTH)
116666                     .attr('height', LANE_HEIGHT);
116667
116668                 enter
116669                     .append('g')
116670                     .attr('class', 'forward')
116671                     .append('text')
116672                     .attr('y', 40)
116673                     .attr('x', 14)
116674                     .text('▲');
116675
116676                 enter
116677                     .append('g')
116678                     .attr('class', 'bothways')
116679                     .append('text')
116680                     .attr('y', 40)
116681                     .attr('x', 14)
116682                     .text('▲▼');
116683
116684                 enter
116685                     .append('g')
116686                     .attr('class', 'backward')
116687                     .append('text')
116688                     .attr('y', 40)
116689                     .attr('x', 14)
116690                     .text('▼');
116691
116692
116693                 lane = lane
116694                     .merge(enter);
116695
116696                 lane
116697                     .attr('transform', function(d) {
116698                         return 'translate(' + (LANE_WIDTH * d.index * 1.5) + ', 0)';
116699                     });
116700
116701                 lane.select('.forward')
116702                     .style('visibility', function(d) {
116703                         return d.direction === 'forward' ? 'visible' : 'hidden';
116704                     });
116705
116706                 lane.select('.bothways')
116707                     .style('visibility', function(d) {
116708                         return d.direction === 'bothways' ? 'visible' : 'hidden';
116709                     });
116710
116711                 lane.select('.backward')
116712                     .style('visibility', function(d) {
116713                         return d.direction === 'backward' ? 'visible' : 'hidden';
116714                     });
116715             }
116716
116717
116718             lanes.entity = function(val) {
116719                 if (!_entityID || _entityID !== val.id) {
116720                     _entityID = val.id;
116721                 }
116722             };
116723
116724             lanes.tags = function() {};
116725             lanes.focus = function() {};
116726             lanes.off = function() {};
116727
116728             return utilRebind(lanes, dispatch$1, 'on');
116729         }
116730
116731         var languagesArray = [];
116732         function loadLanguagesArray() {
116733             if (languagesArray.length !== 0) { return; }
116734
116735             // some conversion is needed to ensure correct OSM tags are used
116736             var replacements = {
116737                 sr: 'sr-Cyrl',      // in OSM, `sr` implies Cyrillic
116738                 'sr-Cyrl': false    // `sr-Cyrl` isn't used in OSM
116739             };
116740
116741             for (var code in dataLanguages) {
116742                 if (replacements[code] === false) { continue; }
116743                 var metaCode = code;
116744                 if (replacements[code]) { metaCode = replacements[code]; }
116745
116746                 languagesArray.push({
116747                     localName: languageName(metaCode, { localOnly: true }),
116748                     nativeName: dataLanguages[metaCode].nativeName,
116749                     code: code,
116750                     label: languageName(metaCode)
116751                 });
116752             }
116753         }
116754
116755
116756         function uiFieldLocalized(field, context) {
116757             var dispatch$1 = dispatch('change', 'input');
116758             var wikipedia = services$1.wikipedia;
116759             var input = d3_select(null);
116760             var localizedInputs = d3_select(null);
116761             var _countryCode;
116762
116763             var allSuggestions = context.presets().collection.filter(function(p) {
116764                 return p.suggestion === true;
116765             });
116766
116767             // reuse these combos
116768             var langCombo = uiCombobox(context, 'localized-lang')
116769                 .fetcher(fetchLanguages)
116770                 .minItems(0);
116771
116772             var brandCombo = uiCombobox(context, 'localized-brand')
116773                 .canAutocomplete(false)
116774                 .minItems(1);
116775
116776             var _selection = d3_select(null);
116777             var _multilingual = [];
116778             var _buttonTip = tooltip()
116779                 .title(t('translate.translate'))
116780                 .placement('left');
116781             var _wikiTitles;
116782             var _entity;
116783
116784
116785             function calcLocked() {
116786                 if (!_entity) {    // the original entity
116787                     field.locked(false);
116788                     return;
116789                 }
116790
116791                 var latest = context.hasEntity(_entity.id);
116792                 if (!latest) {    // get current entity, possibly edited
116793                     field.locked(false);
116794                     return;
116795                 }
116796
116797                 var hasOriginalName = (latest.tags.name && latest.tags.name === _entity.tags.name);
116798                 var hasWikidata = latest.tags.wikidata || latest.tags['name:etymology:wikidata'];
116799                 var preset = context.presets().match(latest, context.graph());
116800                 var isSuggestion = preset && preset.suggestion;
116801                 var showsBrand = preset && preset.fields
116802                     .filter(function(d) { return d.id === 'brand'; }).length;
116803
116804                 var isLocked = !!(field.id === 'name' && hasOriginalName &&
116805                     (hasWikidata || (isSuggestion && !showsBrand)));
116806
116807                 field.locked(isLocked);
116808             }
116809
116810             // update _multilingual, maintaining the existing order
116811             function calcMultilingual(tags) {
116812                 var existingLangsOrdered = _multilingual.map(function(item) {
116813                     return item.lang;
116814                 });
116815                 var existingLangs = new Set(existingLangsOrdered.filter(Boolean));
116816
116817                 for (var k in tags) {
116818                     var m = k.match(/^(.*):([a-zA-Z_-]+)$/);
116819                     if (m && m[1] === field.key && m[2]) {
116820                         var item = { lang: m[2], value: tags[k] };
116821                         if (existingLangs.has(item.lang)) {
116822                             // update the value
116823                             _multilingual[existingLangsOrdered.indexOf(item.lang)].value = item.value;
116824                             existingLangs.delete(item.lang);
116825                         } else {
116826                             _multilingual.push(item);
116827                         }
116828                     }
116829                 }
116830
116831                 _multilingual = _multilingual.filter(function(item) {
116832                     return !item.lang || !existingLangs.has(item.lang);
116833                 });
116834             }
116835
116836
116837             function localized(selection) {
116838                 // load if needed
116839                 loadLanguagesArray();
116840
116841                 _selection = selection;
116842                 calcLocked();
116843                 var isLocked = field.locked();
116844                 var entity = _entity && context.hasEntity(_entity.id);  // get latest
116845                 var preset = entity && context.presets().match(entity, context.graph());
116846
116847                 var wrap = selection.selectAll('.form-field-input-wrap')
116848                     .data([0]);
116849
116850                 // enter/update
116851                 wrap = wrap.enter()
116852                     .append('div')
116853                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
116854                     .merge(wrap);
116855
116856                 input = wrap.selectAll('.localized-main')
116857                     .data([0]);
116858
116859                 // enter/update
116860                 input = input.enter()
116861                     .append('input')
116862                     .attr('type', 'text')
116863                     .attr('id', 'preset-input-' + field.safeid)
116864                     .attr('class', 'localized-main')
116865                     .attr('placeholder', field.placeholder())
116866                     .call(utilNoAuto)
116867                     .merge(input);
116868
116869                 if (preset && field.id === 'name') {
116870                     var pTag = preset.id.split('/', 2);
116871                     var pKey = pTag[0];
116872                     var pValue = pTag[1];
116873
116874                     if (!preset.suggestion) {
116875                         // Not a suggestion preset - Add a suggestions dropdown if it makes sense to.
116876                         // This code attempts to determine if the matched preset is the
116877                         // kind of preset that even can benefit from name suggestions..
116878                         // - true = shops, cafes, hotels, etc. (also generic and fallback presets)
116879                         // - false = churches, parks, hospitals, etc. (things not in the index)
116880                         var isFallback = preset.isFallback();
116881                         var goodSuggestions = allSuggestions.filter(function(s) {
116882                             if (isFallback) { return true; }
116883                             var sTag = s.id.split('/', 2);
116884                             var sKey = sTag[0];
116885                             var sValue = sTag[1];
116886                             return pKey === sKey && (!pValue || pValue === sValue);
116887                         });
116888
116889                         // Show the suggestions.. If the user picks one, change the tags..
116890                         if (allSuggestions.length && goodSuggestions.length) {
116891                             input
116892                                 .on('blur.localized', checkBrandOnBlur)
116893                                 .call(brandCombo
116894                                     .fetcher(fetchBrandNames(preset, allSuggestions))
116895                                     .on('accept', acceptBrand)
116896                                     .on('cancel', cancelBrand)
116897                                 );
116898                         }
116899                     }
116900                 }
116901
116902                 input
116903                     .classed('disabled', !!isLocked)
116904                     .attr('readonly', isLocked || null)
116905                     .on('input', change(true))
116906                     .on('blur', change())
116907                     .on('change', change());
116908
116909
116910                 var translateButton = wrap.selectAll('.localized-add')
116911                     .data([0]);
116912
116913                 translateButton = translateButton.enter()
116914                     .append('button')
116915                     .attr('class', 'localized-add form-field-button')
116916                     .attr('tabindex', -1)
116917                     .call(svgIcon('#iD-icon-plus'))
116918                     .merge(translateButton);
116919
116920                 translateButton
116921                     .classed('disabled', !!isLocked)
116922                     .call(isLocked ? _buttonTip.destroy : _buttonTip)
116923                     .on('click', addNew);
116924
116925
116926                 if (entity && !_multilingual.length) {
116927                     calcMultilingual(entity.tags);
116928                 }
116929
116930                 localizedInputs = selection.selectAll('.localized-multilingual')
116931                     .data([0]);
116932
116933                 localizedInputs = localizedInputs.enter()
116934                     .append('div')
116935                     .attr('class', 'localized-multilingual')
116936                     .merge(localizedInputs);
116937
116938                 localizedInputs
116939                     .call(renderMultilingual);
116940
116941                 localizedInputs.selectAll('button, input')
116942                     .classed('disabled', !!isLocked)
116943                     .attr('readonly', isLocked || null);
116944
116945
116946
116947                 // We are not guaranteed to get an `accept` or `cancel` when blurring the field.
116948                 // (This can happen if the user actives the combo, arrows down, and then clicks off to blur)
116949                 // So compare the current field value against the suggestions one last time.
116950                 function checkBrandOnBlur() {
116951                     var latest = context.hasEntity(_entity.id);
116952                     if (!latest) { return; }   // deleting the entity blurred the field?
116953
116954                     var preset = context.presets().match(latest, context.graph());
116955                     if (preset && preset.suggestion) { return; }   // already accepted
116956
116957                     // note: here we are testing against "decorated" names, i.e. 'Starbucks – Cafe'
116958                     var name = utilGetSetValue(input).trim();
116959                     var matched = allSuggestions.filter(function(s) { return name === s.name(); });
116960
116961                     if (matched.length === 1) {
116962                         acceptBrand({ suggestion: matched[0] });
116963                     } else {
116964                         cancelBrand();
116965                     }
116966                 }
116967
116968
116969                 function acceptBrand(d) {
116970                     if (!d) {
116971                         cancelBrand();
116972                         return;
116973                     }
116974
116975                     var entity = context.entity(_entity.id);  // get latest
116976                     var tags = entity.tags;
116977                     var geometry = entity.geometry(context.graph());
116978                     var removed = preset.unsetTags(tags, geometry);
116979                     for (var k in tags) {
116980                         tags[k] = removed[k];  // set removed tags to `undefined`
116981                     }
116982                     tags = d.suggestion.setTags(tags, geometry);
116983                     utilGetSetValue(input, tags.name);
116984                     dispatch$1.call('change', this, tags);
116985                 }
116986
116987
116988                 // user hit escape, clean whatever preset name appears after the last ' – '
116989                 function cancelBrand() {
116990                     var name = utilGetSetValue(input);
116991                     var clean = cleanName(name);
116992                     if (clean !== name) {
116993                         utilGetSetValue(input, clean);
116994                         dispatch$1.call('change', this, { name: clean });
116995                     }
116996                 }
116997
116998                 // Remove whatever is after the last ' – '
116999                 // NOTE: split/join on en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
117000                 function cleanName(name) {
117001                     var parts = name.split(' – ');
117002                     if (parts.length > 1) {
117003                         parts.pop();
117004                         name = parts.join(' – ');
117005                     }
117006                     return name;
117007                 }
117008
117009
117010                 function fetchBrandNames(preset, suggestions) {
117011                     var pTag = preset.id.split('/', 2);
117012                     var pKey = pTag[0];
117013                     var pValue = pTag[1];
117014
117015                     return function(value, callback) {
117016                         var results = [];
117017                         if (value && value.length > 2) {
117018                             for (var i = 0; i < suggestions.length; i++) {
117019                                 var s = suggestions[i];
117020
117021                                 // don't suggest brands from incompatible countries
117022                                 if (_countryCode && s.countryCodes &&
117023                                     s.countryCodes.indexOf(_countryCode) === -1) { continue; }
117024
117025                                 var sTag = s.id.split('/', 2);
117026                                 var sKey = sTag[0];
117027                                 var sValue = sTag[1];
117028                                 var name = s.name();
117029                                 var dist = utilEditDistance(value, name.substring(0, value.length));
117030                                 var matchesPreset = (pKey === sKey && (!pValue || pValue === sValue));
117031
117032                                 if (dist < 1 || (matchesPreset && dist < 3)) {
117033                                     var obj = {
117034                                         title: name,
117035                                         value: name,
117036                                         suggestion: s,
117037                                         dist: dist + (matchesPreset ? 0 : 1)  // penalize if not matched preset
117038                                     };
117039                                     results.push(obj);
117040                                 }
117041                             }
117042                             results.sort(function(a, b) { return a.dist - b.dist; });
117043                         }
117044                         results = results.slice(0, 10);
117045                         callback(results);
117046                     };
117047                 }
117048
117049
117050                 function addNew() {
117051                     event.preventDefault();
117052                     if (field.locked()) { return; }
117053
117054                     var defaultLang = utilDetect().locale.toLowerCase().split('-')[0];
117055                     var langExists = _multilingual.find(function(datum) { return datum.lang === defaultLang; });
117056                     var isLangEn = defaultLang.indexOf('en') > -1;
117057                     if (isLangEn || langExists) {
117058                         defaultLang = '';
117059                         langExists = _multilingual.find(function(datum) { return datum.lang === defaultLang; });
117060                     }
117061
117062                     if (!langExists) {
117063                         // prepend the value so it appears at the top
117064                         _multilingual.unshift({ lang: defaultLang, value: '' });
117065
117066                         localizedInputs
117067                             .call(renderMultilingual);
117068                     }
117069                 }
117070
117071
117072                 function change(onInput) {
117073                     return function() {
117074                         if (field.locked()) {
117075                             event.preventDefault();
117076                             return;
117077                         }
117078                         var t = {};
117079                         t[field.key] = utilGetSetValue(d3_select(this)) || undefined;
117080                         dispatch$1.call('change', this, t, onInput);
117081                     };
117082                 }
117083             }
117084
117085
117086             function key(lang) {
117087                 return field.key + ':' + lang;
117088             }
117089
117090
117091             function changeLang(d) {
117092                 var lang = utilGetSetValue(d3_select(this));
117093                 var t = {};
117094                 var language = languagesArray.find(function(d) {
117095                     return (d.localName && d.localName.toLowerCase() === lang.toLowerCase()) ||
117096                         d.label.toLowerCase() === lang.toLowerCase() ||
117097                         (d.nativeName && d.nativeName.toLowerCase() === lang.toLowerCase());
117098                 });
117099
117100                 if (language) { lang = language.code; }
117101
117102                 if (d.lang && d.lang !== lang) {
117103                     t[key(d.lang)] = undefined;
117104                 }
117105
117106                 var value = utilGetSetValue(d3_select(this.parentNode)
117107                     .selectAll('.localized-value'));
117108
117109                 if (lang && value) {
117110                     t[key(lang)] = value;
117111                 } else if (lang && _wikiTitles && _wikiTitles[d.lang]) {
117112                     t[key(lang)] = _wikiTitles[d.lang];
117113                 }
117114
117115                 d.lang = lang;
117116                 dispatch$1.call('change', this, t);
117117             }
117118
117119
117120             function changeValue(d) {
117121                 if (!d.lang) { return; }
117122                 var value = utilGetSetValue(d3_select(this)) || undefined;
117123                 var t = {};
117124                 t[key(d.lang)] = value;
117125                 d.value = value;
117126                 dispatch$1.call('change', this, t);
117127             }
117128
117129
117130             function fetchLanguages(value, cb) {
117131                 var v = value.toLowerCase();
117132
117133                 // show the user's language first
117134                 var langCodes = [currentLocale, currentLocale.split('-')[0]];
117135
117136                 if (_countryCode && dataTerritoryLanguages[_countryCode]) {
117137                     langCodes = langCodes.concat(dataTerritoryLanguages[_countryCode]);
117138                 }
117139
117140                 var langItems = [];
117141                 langCodes.forEach(function(code) {
117142                     var langItem = languagesArray.find(function(item) {
117143                         return item.code === code;
117144                     });
117145                     if (langItem) { langItems.push(langItem); }
117146                 });
117147                 langItems = utilArrayUniq(langItems.concat(languagesArray));
117148
117149                 cb(langItems.filter(function(d) {
117150                     return d.label.toLowerCase().indexOf(v) >= 0 ||
117151                         (d.localName && d.localName.toLowerCase().indexOf(v) >= 0) ||
117152                         (d.nativeName && d.nativeName.toLowerCase().indexOf(v) >= 0) ||
117153                         d.code.toLowerCase().indexOf(v) >= 0;
117154                 }).map(function(d) {
117155                     return { value: d.label };
117156                 }));
117157             }
117158
117159
117160             function renderMultilingual(selection) {
117161                 var entries = selection.selectAll('div.entry')
117162                     .data(_multilingual, function(d) { return d.lang; });
117163
117164                 entries.exit()
117165                     .style('top', '0')
117166                     .style('max-height', '240px')
117167                     .transition()
117168                     .duration(200)
117169                     .style('opacity', '0')
117170                     .style('max-height', '0px')
117171                     .remove();
117172
117173                 var entriesEnter = entries.enter()
117174                     .append('div')
117175                     .attr('class', 'entry')
117176                     .each(function() {
117177                         var wrap = d3_select(this);
117178
117179                         var label = wrap
117180                             .append('label')
117181                             .attr('class', 'field-label');
117182
117183                         var text = label
117184                             .append('span')
117185                             .attr('class', 'label-text');
117186
117187                         text
117188                             .append('span')
117189                             .attr('class', 'label-textvalue')
117190                             .text(t('translate.localized_translation_label'));
117191
117192                         text
117193                             .append('span')
117194                             .attr('class', 'label-textannotation');
117195
117196                         label
117197                             .append('button')
117198                             .attr('class', 'remove-icon-multilingual')
117199                             .on('click', function(d, index) {
117200                                 if (field.locked()) { return; }
117201                                 event.preventDefault();
117202
117203                                 if (!d.lang || !d.value) {
117204                                     _multilingual.splice(index, 1);
117205                                     renderMultilingual(selection);
117206                                 } else {
117207                                     // remove from entity tags
117208                                     var t = {};
117209                                     t[key(d.lang)] = undefined;
117210                                     dispatch$1.call('change', this, t);
117211                                 }
117212
117213                             })
117214                             .call(svgIcon('#iD-operation-delete'));
117215
117216                         wrap
117217                             .append('input')
117218                             .attr('class', 'localized-lang')
117219                             .attr('type', 'text')
117220                             .attr('placeholder', t('translate.localized_translation_language'))
117221                             .on('blur', changeLang)
117222                             .on('change', changeLang)
117223                             .call(langCombo);
117224
117225                         wrap
117226                             .append('input')
117227                             .attr('type', 'text')
117228                             .attr('placeholder', t('translate.localized_translation_name'))
117229                             .attr('class', 'localized-value')
117230                             .on('blur', changeValue)
117231                             .on('change', changeValue);
117232                     });
117233
117234                 entriesEnter
117235                     .style('margin-top', '0px')
117236                     .style('max-height', '0px')
117237                     .style('opacity', '0')
117238                     .transition()
117239                     .duration(200)
117240                     .style('margin-top', '10px')
117241                     .style('max-height', '240px')
117242                     .style('opacity', '1')
117243                     .on('end', function() {
117244                         d3_select(this)
117245                             .style('max-height', '')
117246                             .style('overflow', 'visible');
117247                     });
117248
117249                 entries = entries.merge(entriesEnter);
117250
117251                 entries.order();
117252
117253                 utilGetSetValue(entries.select('.localized-lang'), function(d) {
117254                     return languageName(d.lang);
117255                 });
117256
117257                 utilGetSetValue(entries.select('.localized-value'),
117258                     function(d) { return d.value; });
117259             }
117260
117261
117262             localized.tags = function(tags) {
117263                 // Fetch translations from wikipedia
117264                 if (tags.wikipedia && !_wikiTitles) {
117265                     _wikiTitles = {};
117266                     var wm = tags.wikipedia.match(/([^:]+):(.+)/);
117267                     if (wm && wm[0] && wm[1]) {
117268                         wikipedia.translations(wm[1], wm[2], function(err, d) {
117269                             if (err || !d) { return; }
117270                             _wikiTitles = d;
117271                         });
117272                     }
117273                 }
117274
117275                 utilGetSetValue(input, tags[field.key] || '');
117276
117277                 calcMultilingual(tags);
117278
117279                 _selection
117280                     .call(localized);
117281             };
117282
117283
117284             localized.focus = function() {
117285                 input.node().focus();
117286             };
117287
117288
117289             localized.entity = function(val) {
117290                 if (!arguments.length) { return _entity; }
117291                 _entity = val;
117292                 _multilingual = [];
117293                 loadCountryCode();
117294                 return localized;
117295             };
117296
117297             function loadCountryCode() {
117298                 var center = _entity.extent(context.graph()).center();
117299                 var countryCode = iso1A2Code(center);
117300                 _countryCode = countryCode && countryCode.toLowerCase();
117301             }
117302
117303             return utilRebind(localized, dispatch$1, 'on');
117304         }
117305
117306         function uiFieldMaxspeed(field, context) {
117307             var dispatch$1 = dispatch('change');
117308             var unitInput = d3_select(null);
117309             var input = d3_select(null);
117310             var _entity;
117311             var _isImperial;
117312
117313             var speedCombo = uiCombobox(context, 'maxspeed');
117314             var unitCombo = uiCombobox(context, 'maxspeed-unit')
117315                     .data(['km/h', 'mph'].map(comboValues));
117316
117317             var metricValues = [20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120];
117318             var imperialValues = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80];
117319
117320
117321             function maxspeed(selection) {
117322
117323                 var wrap = selection.selectAll('.form-field-input-wrap')
117324                     .data([0]);
117325
117326                 wrap = wrap.enter()
117327                     .append('div')
117328                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
117329                     .merge(wrap);
117330
117331
117332                 input = wrap.selectAll('#preset-input-' + field.safeid)
117333                     .data([0]);
117334
117335                 input = input.enter()
117336                     .append('input')
117337                     .attr('type', 'text')
117338                     .attr('id', 'preset-input-' + field.safeid)
117339                     .attr('placeholder', field.placeholder())
117340                     .call(utilNoAuto)
117341                     .call(speedCombo)
117342                     .merge(input);
117343
117344                 input
117345                     .on('change', change)
117346                     .on('blur', change);
117347
117348                 var loc = _entity.extent(context.graph()).center();
117349
117350                 _isImperial = roadSpeedUnit(loc) === 'mph';
117351
117352                 unitInput = wrap.selectAll('input.maxspeed-unit')
117353                     .data([0]);
117354
117355                 unitInput = unitInput.enter()
117356                     .append('input')
117357                     .attr('type', 'text')
117358                     .attr('class', 'maxspeed-unit')
117359                     .call(unitCombo)
117360                     .merge(unitInput);
117361
117362                 unitInput
117363                     .on('blur', changeUnits)
117364                     .on('change', changeUnits);
117365
117366
117367                 function changeUnits() {
117368                     _isImperial = utilGetSetValue(unitInput) === 'mph';
117369                     utilGetSetValue(unitInput, _isImperial ? 'mph' : 'km/h');
117370                     setSuggestions();
117371                     change();
117372                 }
117373             }
117374
117375
117376             function setSuggestions() {
117377                 speedCombo.data((_isImperial ? imperialValues : metricValues).map(comboValues));
117378                 utilGetSetValue(unitInput, _isImperial ? 'mph' : 'km/h');
117379             }
117380
117381
117382             function comboValues(d) {
117383                 return {
117384                     value: d.toString(),
117385                     title: d.toString()
117386                 };
117387             }
117388
117389
117390             function change() {
117391                 var tag = {};
117392                 var value = utilGetSetValue(input);
117393
117394                 if (!value) {
117395                     tag[field.key] = undefined;
117396                 } else if (isNaN(value) || !_isImperial) {
117397                     tag[field.key] = value;
117398                 } else {
117399                     tag[field.key] = value + ' mph';
117400                 }
117401
117402                 dispatch$1.call('change', this, tag);
117403             }
117404
117405
117406             maxspeed.tags = function(tags) {
117407                 var value = tags[field.key];
117408
117409                 if (value && value.indexOf('mph') >= 0) {
117410                     value = parseInt(value, 10);
117411                     _isImperial = true;
117412                 } else if (value) {
117413                     _isImperial = false;
117414                 }
117415
117416                 setSuggestions();
117417                 utilGetSetValue(input, value || '');
117418             };
117419
117420
117421             maxspeed.focus = function() {
117422                 input.node().focus();
117423             };
117424
117425
117426             maxspeed.entity = function(val) {
117427                 _entity = val;
117428             };
117429
117430
117431             return utilRebind(maxspeed, dispatch$1, 'on');
117432         }
117433
117434         function uiFieldRadio(field, context) {
117435             var dispatch$1 = dispatch('change');
117436             var placeholder = d3_select(null);
117437             var wrap = d3_select(null);
117438             var labels = d3_select(null);
117439             var radios = d3_select(null);
117440             var radioData = (field.options || (field.strings && field.strings.options && Object.keys(field.strings.options)) || field.keys).slice();  // shallow copy
117441             var typeField;
117442             var layerField;
117443             var _oldType = {};
117444             var _entity;
117445
117446
117447             function selectedKey() {
117448                 var node = wrap.selectAll('.form-field-input-radio label.active input');
117449                 return !node.empty() && node.datum();
117450             }
117451
117452
117453             function radio(selection) {
117454                 selection.classed('preset-radio', true);
117455
117456                 wrap = selection.selectAll('.form-field-input-wrap')
117457                     .data([0]);
117458
117459                 var enter = wrap.enter()
117460                     .append('div')
117461                     .attr('class', 'form-field-input-wrap form-field-input-radio');
117462
117463                 enter
117464                     .append('span')
117465                     .attr('class', 'placeholder');
117466
117467                 wrap = wrap
117468                     .merge(enter);
117469
117470
117471                 placeholder = wrap.selectAll('.placeholder');
117472
117473                 labels = wrap.selectAll('label')
117474                     .data(radioData);
117475
117476                 enter = labels.enter()
117477                     .append('label');
117478
117479                 enter
117480                     .append('input')
117481                     .attr('type', 'radio')
117482                     .attr('name', field.id)
117483                     .attr('value', function(d) { return field.t('options.' + d, { 'default': d }); })
117484                     .attr('checked', false);
117485
117486                 enter
117487                     .append('span')
117488                     .text(function(d) { return field.t('options.' + d, { 'default': d }); });
117489
117490                 labels = labels
117491                     .merge(enter);
117492
117493                 radios = labels.selectAll('input')
117494                     .on('change', changeRadio);
117495
117496             }
117497
117498
117499             function structureExtras(selection, tags) {
117500                 var selected = selectedKey() || tags.layer !== undefined;
117501                 var type = context.presets().field(selected);
117502                 var layer = context.presets().field('layer');
117503                 var showLayer = (selected === 'bridge' || selected === 'tunnel' || tags.layer !== undefined);
117504
117505
117506                 var extrasWrap = selection.selectAll('.structure-extras-wrap')
117507                     .data(selected ? [0] : []);
117508
117509                 extrasWrap.exit()
117510                     .remove();
117511
117512                 extrasWrap = extrasWrap.enter()
117513                     .append('div')
117514                     .attr('class', 'structure-extras-wrap')
117515                     .merge(extrasWrap);
117516
117517                 var list = extrasWrap.selectAll('ul')
117518                     .data([0]);
117519
117520                 list = list.enter()
117521                     .append('ul')
117522                     .attr('class', 'rows')
117523                     .merge(list);
117524
117525
117526                 // Type
117527                 if (type) {
117528                     if (!typeField || typeField.id !== selected) {
117529                         typeField = uiField(context, type, _entity, { wrap: false })
117530                             .on('change', changeType);
117531                     }
117532                     typeField.tags(tags);
117533                 } else {
117534                     typeField = null;
117535                 }
117536
117537                 var typeItem = list.selectAll('.structure-type-item')
117538                     .data(typeField ? [typeField] : [], function(d) { return d.id; });
117539
117540                 // Exit
117541                 typeItem.exit()
117542                     .remove();
117543
117544                 // Enter
117545                 var typeEnter = typeItem.enter()
117546                     .insert('li', ':first-child')
117547                     .attr('class', 'labeled-input structure-type-item');
117548
117549                 typeEnter
117550                     .append('span')
117551                     .attr('class', 'label structure-label-type')
117552                     .attr('for', 'preset-input-' + selected)
117553                     .text(t('inspector.radio.structure.type'));
117554
117555                 typeEnter
117556                     .append('div')
117557                     .attr('class', 'structure-input-type-wrap');
117558
117559                 // Update
117560                 typeItem = typeItem
117561                     .merge(typeEnter);
117562
117563                 if (typeField) {
117564                     typeItem.selectAll('.structure-input-type-wrap')
117565                         .call(typeField.render);
117566                 }
117567
117568
117569                 // Layer
117570                 if (layer && showLayer) {
117571                     if (!layerField) {
117572                         layerField = uiField(context, layer, _entity, { wrap: false })
117573                             .on('change', changeLayer);
117574                     }
117575                     layerField.tags(tags);
117576                     field.keys = utilArrayUnion(field.keys, ['layer']);
117577                 } else {
117578                     layerField = null;
117579                     field.keys = field.keys.filter(function(k) { return k !== 'layer'; });
117580                 }
117581
117582                 var layerItem = list.selectAll('.structure-layer-item')
117583                     .data(layerField ? [layerField] : []);
117584
117585                 // Exit
117586                 layerItem.exit()
117587                     .remove();
117588
117589                 // Enter
117590                 var layerEnter = layerItem.enter()
117591                     .append('li')
117592                     .attr('class', 'labeled-input structure-layer-item');
117593
117594                 layerEnter
117595                     .append('span')
117596                     .attr('class', 'label structure-label-layer')
117597                     .attr('for', 'preset-input-layer')
117598                     .text(t('inspector.radio.structure.layer'));
117599
117600                 layerEnter
117601                     .append('div')
117602                     .attr('class', 'structure-input-layer-wrap');
117603
117604                 // Update
117605                 layerItem = layerItem
117606                     .merge(layerEnter);
117607
117608                 if (layerField) {
117609                     layerItem.selectAll('.structure-input-layer-wrap')
117610                         .call(layerField.render);
117611                 }
117612             }
117613
117614
117615             function changeType(t, onInput) {
117616                 var key = selectedKey();
117617                 if (!key) { return; }
117618
117619                 var val = t[key];
117620                 if (val !== 'no') {
117621                     _oldType[key] = val;
117622                 }
117623
117624                 if (field.type === 'structureRadio') {
117625                     // remove layer if it should not be set
117626                     if (val === 'no' ||
117627                         (key !== 'bridge' && key !== 'tunnel') ||
117628                         (key === 'tunnel' && val === 'building_passage')) {
117629                         t.layer = undefined;
117630                     }
117631                     // add layer if it should be set
117632                     if (t.layer === undefined) {
117633                         if (key === 'bridge' && val !== 'no') {
117634                             t.layer = '1';
117635                         }
117636                         if (key === 'tunnel' && val !== 'no' && val !== 'building_passage') {
117637                             t.layer = '-1';
117638                         }
117639                     }
117640                  }
117641
117642                 dispatch$1.call('change', this, t, onInput);
117643             }
117644
117645
117646             function changeLayer(t, onInput) {
117647                 if (t.layer === '0') {
117648                     t.layer = undefined;
117649                 }
117650                 dispatch$1.call('change', this, t, onInput);
117651             }
117652
117653
117654             function changeRadio() {
117655                 var t = {};
117656                 var activeKey;
117657
117658                 if (field.key) {
117659                     t[field.key] = undefined;
117660                 }
117661
117662                 radios.each(function(d) {
117663                     var active = d3_select(this).property('checked');
117664                     if (active) { activeKey = d; }
117665
117666                     if (field.key) {
117667                         if (active) { t[field.key] = d; }
117668                     } else {
117669                         var val = _oldType[activeKey] || 'yes';
117670                         t[d] = active ? val : undefined;
117671                     }
117672                 });
117673
117674                 if (field.type === 'structureRadio') {
117675                     if (activeKey === 'bridge') {
117676                         t.layer = '1';
117677                     } else if (activeKey === 'tunnel' && t.tunnel !== 'building_passage') {
117678                         t.layer = '-1';
117679                     } else {
117680                         t.layer = undefined;
117681                     }
117682                 }
117683
117684                 dispatch$1.call('change', this, t);
117685             }
117686
117687
117688             radio.tags = function(tags) {
117689                 function checked(d) {
117690                     if (field.key) {
117691                         return tags[field.key] === d;
117692                     } else {
117693                         return !!(tags[d] && tags[d].toLowerCase() !== 'no');
117694                     }
117695                 }
117696
117697                 labels.classed('active', checked);
117698                 radios.property('checked', checked);
117699
117700                 var selection = radios.filter(function() { return this.checked; });
117701
117702                 if (selection.empty()) {
117703                     placeholder.text(t('inspector.none'));
117704                 } else {
117705                     placeholder.text(selection.attr('value'));
117706                     _oldType[selection.datum()] = tags[selection.datum()];
117707                 }
117708
117709                 if (field.type === 'structureRadio') {
117710                     // For waterways without a tunnel tag, set 'culvert' as
117711                     // the _oldType to default to if the user picks 'tunnel'
117712                     if (!!tags.waterway && !_oldType.tunnel) {
117713                         _oldType.tunnel = 'culvert';
117714                     }
117715
117716                     wrap.call(structureExtras, tags);
117717                 }
117718             };
117719
117720
117721             radio.focus = function() {
117722                 radios.node().focus();
117723             };
117724
117725
117726             radio.entity = function(val) {
117727                 if (!arguments.length) { return _entity; }
117728                 _entity = val;
117729                 _oldType = {};
117730                 return radio;
117731             };
117732
117733
117734             return utilRebind(radio, dispatch$1, 'on');
117735         }
117736
117737         function uiFieldRestrictions(field, context) {
117738             var dispatch$1 = dispatch('change');
117739             var breathe = behaviorBreathe();
117740
117741             context.storage('turn-restriction-via-way', null);                 // remove old key
117742             var storedViaWay = context.storage('turn-restriction-via-way0');   // use new key #6922
117743             var storedDistance = context.storage('turn-restriction-distance');
117744
117745             var _maxViaWay = storedViaWay !== null ? (+storedViaWay) : 0;
117746             var _maxDistance = storedDistance ? (+storedDistance) : 30;
117747             var _initialized = false;
117748             var _parent = d3_select(null);       // the entire field
117749             var _container = d3_select(null);    // just the map
117750             var _oldTurns;
117751             var _graph;
117752             var _vertexID;
117753             var _intersection;
117754             var _fromWayID;
117755
117756             var _lastXPos;
117757
117758
117759             function restrictions(selection) {
117760                 _parent = selection;
117761
117762                 // try to reuse the intersection, but always rebuild it if the graph has changed
117763                 if (_vertexID && (context.graph() !== _graph || !_intersection)) {
117764                     _graph = context.graph();
117765                     _intersection = osmIntersection(_graph, _vertexID, _maxDistance);
117766                 }
117767
117768                 // It's possible for there to be no actual intersection here.
117769                 // for example, a vertex of two `highway=path`
117770                 // In this case, hide the field.
117771                 var isOK = (
117772                     _intersection &&
117773                     _intersection.vertices.length &&           // has vertices
117774                     _intersection.vertices                     // has the vertex that the user selected
117775                         .filter(function(vertex) { return vertex.id === _vertexID; }).length &&
117776                     _intersection.ways.length > 2 &&           // has more than 2 ways
117777                     _intersection.ways                         // has more than 1 TO way
117778                         .filter(function(way) { return way.__to; }).length > 1
117779                 );
117780
117781                 // Also hide in the case where
117782                 d3_select(selection.node().parentNode).classed('hide', !isOK);
117783
117784                 // if form field is hidden or has detached from dom, clean up.
117785                 if (!isOK ||
117786                     !d3_select('.inspector-wrap.inspector-hidden').empty() ||
117787                     !selection.node().parentNode ||
117788                     !selection.node().parentNode.parentNode) {
117789                     selection.call(restrictions.off);
117790                     return;
117791                 }
117792
117793
117794                 var wrap = selection.selectAll('.form-field-input-wrap')
117795                     .data([0]);
117796
117797                 wrap = wrap.enter()
117798                     .append('div')
117799                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
117800                     .merge(wrap);
117801
117802                 var container = wrap.selectAll('.restriction-container')
117803                     .data([0]);
117804
117805                 // enter
117806                 var containerEnter = container.enter()
117807                     .append('div')
117808                     .attr('class', 'restriction-container');
117809
117810                 containerEnter
117811                     .append('div')
117812                     .attr('class', 'restriction-help');
117813
117814                 // update
117815                 _container = containerEnter
117816                     .merge(container)
117817                     .call(renderViewer);
117818
117819                 var controls = wrap.selectAll('.restriction-controls')
117820                     .data([0]);
117821
117822                 // enter/update
117823                 controls.enter()
117824                     .append('div')
117825                     .attr('class', 'restriction-controls-container')
117826                     .append('div')
117827                     .attr('class', 'restriction-controls')
117828                     .merge(controls)
117829                     .call(renderControls);
117830             }
117831
117832
117833             function renderControls(selection) {
117834                 var distControl = selection.selectAll('.restriction-distance')
117835                     .data([0]);
117836
117837                 distControl.exit()
117838                     .remove();
117839
117840                 var distControlEnter = distControl.enter()
117841                     .append('div')
117842                     .attr('class', 'restriction-control restriction-distance');
117843
117844                 distControlEnter
117845                     .append('span')
117846                     .attr('class', 'restriction-control-label restriction-distance-label')
117847                     .text(t('restriction.controls.distance') + ':');
117848
117849                 distControlEnter
117850                     .append('input')
117851                     .attr('class', 'restriction-distance-input')
117852                     .attr('type', 'range')
117853                     .attr('min', '20')
117854                     .attr('max', '50')
117855                     .attr('step', '5');
117856
117857                 distControlEnter
117858                     .append('span')
117859                     .attr('class', 'restriction-distance-text');
117860
117861                 // update
117862                 selection.selectAll('.restriction-distance-input')
117863                     .property('value', _maxDistance)
117864                     .on('input', function() {
117865                         var val = d3_select(this).property('value');
117866                         _maxDistance = +val;
117867                         _intersection = null;
117868                         _container.selectAll('.layer-osm .layer-turns *').remove();
117869                         context.storage('turn-restriction-distance', _maxDistance);
117870                         _parent.call(restrictions);
117871                     });
117872
117873                 selection.selectAll('.restriction-distance-text')
117874                     .text(displayMaxDistance(_maxDistance));
117875
117876
117877                 var viaControl = selection.selectAll('.restriction-via-way')
117878                     .data([0]);
117879
117880                 viaControl.exit()
117881                     .remove();
117882
117883                 var viaControlEnter = viaControl.enter()
117884                     .append('div')
117885                     .attr('class', 'restriction-control restriction-via-way');
117886
117887                 viaControlEnter
117888                     .append('span')
117889                     .attr('class', 'restriction-control-label restriction-via-way-label')
117890                     .text(t('restriction.controls.via') + ':');
117891
117892                 viaControlEnter
117893                     .append('input')
117894                     .attr('class', 'restriction-via-way-input')
117895                     .attr('type', 'range')
117896                     .attr('min', '0')
117897                     .attr('max', '2')
117898                     .attr('step', '1');
117899
117900                 viaControlEnter
117901                     .append('span')
117902                     .attr('class', 'restriction-via-way-text');
117903
117904                 // update
117905                 selection.selectAll('.restriction-via-way-input')
117906                     .property('value', _maxViaWay)
117907                     .on('input', function() {
117908                         var val = d3_select(this).property('value');
117909                         _maxViaWay = +val;
117910                         _container.selectAll('.layer-osm .layer-turns *').remove();
117911                         context.storage('turn-restriction-via-way0', _maxViaWay);
117912                         _parent.call(restrictions);
117913                     });
117914
117915                 selection.selectAll('.restriction-via-way-text')
117916                     .text(displayMaxVia(_maxViaWay));
117917             }
117918
117919
117920             function renderViewer(selection) {
117921                 if (!_intersection) { return; }
117922
117923                 var vgraph = _intersection.graph;
117924                 var filter = utilFunctor(true);
117925                 var projection = geoRawMercator();
117926
117927                 // Reflow warning: `utilGetDimensions` calls `getBoundingClientRect`
117928                 // Instead of asking the restriction-container for its dimensions,
117929                 //  we can ask the #sidebar, which can have its dimensions cached.
117930                 // width: calc as sidebar - padding
117931                 // height: hardcoded (from `80_app.css`)
117932                 // var d = utilGetDimensions(selection);
117933                 var sdims = utilGetDimensions(d3_select('#sidebar'));
117934                 var d = [ sdims[0] - 50, 370 ];
117935                 var c = geoVecScale(d, 0.5);
117936                 var z = 22;
117937
117938                 projection.scale(geoZoomToScale(z));
117939
117940                 // Calculate extent of all key vertices
117941                 var extent = geoExtent();
117942                 for (var i = 0; i < _intersection.vertices.length; i++) {
117943                     extent._extend(_intersection.vertices[i].extent());
117944                 }
117945
117946                 // If this is a large intersection, adjust zoom to fit extent
117947                 if (_intersection.vertices.length > 1) {
117948                     var padding = 180;   // in z22 pixels
117949                     var tl = projection([extent[0][0], extent[1][1]]);
117950                     var br = projection([extent[1][0], extent[0][1]]);
117951                     var hFactor = (br[0] - tl[0]) / (d[0] - padding);
117952                     var vFactor = (br[1] - tl[1]) / (d[1] - padding);
117953                     var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2;
117954                     var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2;
117955                     z = z - Math.max(hZoomDiff, vZoomDiff);
117956                     projection.scale(geoZoomToScale(z));
117957                 }
117958
117959                 var padTop = 35;   // reserve top space for hint text
117960                 var extentCenter = projection(extent.center());
117961                 extentCenter[1] = extentCenter[1] - padTop;
117962
117963                 projection
117964                     .translate(geoVecSubtract(c, extentCenter))
117965                     .clipExtent([[0, 0], d]);
117966
117967                 var drawLayers = svgLayers(projection, context).only(['osm','touch']).dimensions(d);
117968                 var drawVertices = svgVertices(projection, context);
117969                 var drawLines = svgLines(projection, context);
117970                 var drawTurns = svgTurns(projection, context);
117971
117972                 var firstTime = selection.selectAll('.surface').empty();
117973
117974                 selection
117975                     .call(drawLayers);
117976
117977                 var surface = selection.selectAll('.surface')
117978                     .classed('tr', true);
117979
117980                 if (firstTime) {
117981                     _initialized = true;
117982
117983                     surface
117984                         .call(breathe);
117985                 }
117986
117987                 // This can happen if we've lowered the detail while a FROM way
117988                 // is selected, and that way is no longer part of the intersection.
117989                 if (_fromWayID && !vgraph.hasEntity(_fromWayID)) {
117990                     _fromWayID = null;
117991                     _oldTurns = null;
117992                 }
117993
117994                 surface
117995                     .call(utilSetDimensions, d)
117996                     .call(drawVertices, vgraph, _intersection.vertices, filter, extent, z)
117997                     .call(drawLines, vgraph, _intersection.ways, filter)
117998                     .call(drawTurns, vgraph, _intersection.turns(_fromWayID, _maxViaWay));
117999
118000                 surface
118001                     .on('click.restrictions', click)
118002                     .on('mouseover.restrictions', mouseover);
118003
118004                 surface
118005                     .selectAll('.selected')
118006                     .classed('selected', false);
118007
118008                 surface
118009                     .selectAll('.related')
118010                     .classed('related', false);
118011
118012                 if (_fromWayID) {
118013                     var way = vgraph.entity(_fromWayID);
118014                     surface
118015                         .selectAll('.' + _fromWayID)
118016                         .classed('selected', true)
118017                         .classed('related', true);
118018                 }
118019
118020                 document.addEventListener('resizeWindow', function () {
118021                     utilSetDimensions(_container, null);
118022                     redraw(1);
118023                 }, false);
118024
118025                 updateHints(null);
118026
118027
118028                 function click() {
118029                     surface
118030                         .call(breathe.off)
118031                         .call(breathe);
118032
118033                     var datum = event.target.__data__;
118034                     var entity = datum && datum.properties && datum.properties.entity;
118035                     if (entity) {
118036                         datum = entity;
118037                     }
118038
118039                     if (datum instanceof osmWay && (datum.__from || datum.__via)) {
118040                         _fromWayID = datum.id;
118041                         _oldTurns = null;
118042                         redraw();
118043
118044                     } else if (datum instanceof osmTurn) {
118045                         var actions, extraActions, turns, i;
118046                         var restrictionType = osmInferRestriction(vgraph, datum, projection);
118047
118048                         if (datum.restrictionID && !datum.direct) {
118049                             return;
118050
118051                         } else if (datum.restrictionID && !datum.only) {    // NO -> ONLY
118052                             var seen = {};
118053                             var datumOnly = JSON.parse(JSON.stringify(datum));   // deep clone the datum
118054                             datumOnly.only = true;                               // but change this property
118055                             restrictionType = restrictionType.replace(/^no/, 'only');
118056
118057                             // Adding an ONLY restriction should destroy all other direct restrictions from the FROM towards the VIA.
118058                             // We will remember them in _oldTurns, and restore them if the user clicks again.
118059                             turns = _intersection.turns(_fromWayID, 2);
118060                             extraActions = [];
118061                             _oldTurns = [];
118062                             for (i = 0; i < turns.length; i++) {
118063                                 var turn = turns[i];
118064                                 if (seen[turn.restrictionID]) { continue; }  // avoid deleting the turn twice (#4968, #4928)
118065
118066                                 if (turn.direct && turn.path[1] === datum.path[1]) {
118067                                     seen[turns[i].restrictionID] = true;
118068                                     turn.restrictionType = osmInferRestriction(vgraph, turn, projection);
118069                                     _oldTurns.push(turn);
118070                                     extraActions.push(actionUnrestrictTurn(turn));
118071                                 }
118072                             }
118073
118074                             actions = _intersection.actions.concat(extraActions, [
118075                                 actionRestrictTurn(datumOnly, restrictionType),
118076                                 t('operations.restriction.annotation.create')
118077                             ]);
118078
118079                         } else if (datum.restrictionID) {   // ONLY -> Allowed
118080                             // Restore whatever restrictions we might have destroyed by cycling thru the ONLY state.
118081                             // This relies on the assumption that the intersection was already split up when we
118082                             // performed the previous action (NO -> ONLY), so the IDs in _oldTurns shouldn't have changed.
118083                             turns = _oldTurns || [];
118084                             extraActions = [];
118085                             for (i = 0; i < turns.length; i++) {
118086                                 if (turns[i].key !== datum.key) {
118087                                     extraActions.push(actionRestrictTurn(turns[i], turns[i].restrictionType));
118088                                 }
118089                             }
118090                             _oldTurns = null;
118091
118092                             actions = _intersection.actions.concat(extraActions, [
118093                                 actionUnrestrictTurn(datum),
118094                                 t('operations.restriction.annotation.delete')
118095                             ]);
118096
118097                         } else {    // Allowed -> NO
118098                             actions = _intersection.actions.concat([
118099                                 actionRestrictTurn(datum, restrictionType),
118100                                 t('operations.restriction.annotation.create')
118101                             ]);
118102                         }
118103
118104                         context.perform.apply(context, actions);
118105
118106                         // At this point the datum will be changed, but will have same key..
118107                         // Refresh it and update the help..
118108                         var s = surface.selectAll('.' + datum.key);
118109                         datum = s.empty() ? null : s.datum();
118110                         updateHints(datum);
118111
118112                     } else {
118113                         _fromWayID = null;
118114                         _oldTurns = null;
118115                         redraw();
118116                     }
118117                 }
118118
118119
118120                 function mouseover() {
118121                     var datum = event.target.__data__;
118122                     updateHints(datum);
118123                 }
118124
118125                 _lastXPos = _lastXPos || sdims[0];
118126
118127                 function redraw(minChange) {
118128                     var xPos = -1;
118129
118130                     if (minChange) {
118131                         xPos = utilGetDimensions(d3_select('#sidebar'))[0];
118132                     }
118133
118134                     if (!minChange || (minChange && Math.abs(xPos - _lastXPos) >= minChange)) {
118135                         if (context.hasEntity(_vertexID)) {
118136                             _lastXPos = xPos;
118137                             _container.call(renderViewer);
118138                         }
118139                     }
118140                 }
118141
118142
118143                 function highlightPathsFrom(wayID) {
118144                     surface.selectAll('.related')
118145                         .classed('related', false)
118146                         .classed('allow', false)
118147                         .classed('restrict', false)
118148                         .classed('only', false);
118149
118150                     surface.selectAll('.' + wayID)
118151                         .classed('related', true);
118152
118153                     if (wayID) {
118154                         var turns = _intersection.turns(wayID, _maxViaWay);
118155                         for (var i = 0; i < turns.length; i++) {
118156                             var turn = turns[i];
118157                             var ids = [turn.to.way];
118158                             var klass = (turn.no ? 'restrict' : (turn.only ? 'only' : 'allow'));
118159
118160                             if (turn.only || turns.length === 1) {
118161                                 if (turn.via.ways) {
118162                                     ids = ids.concat(turn.via.ways);
118163                                 }
118164                             } else if (turn.to.way === wayID) {
118165                                 continue;
118166                             }
118167
118168                             surface.selectAll(utilEntitySelector(ids))
118169                                 .classed('related', true)
118170                                 .classed('allow', (klass === 'allow'))
118171                                 .classed('restrict', (klass === 'restrict'))
118172                                 .classed('only', (klass === 'only'));
118173                         }
118174                     }
118175                 }
118176
118177
118178                 function updateHints(datum) {
118179                     var help = _container.selectAll('.restriction-help').html('');
118180
118181                     var placeholders = {};
118182                     ['from', 'via', 'to'].forEach(function(k) {
118183                         placeholders[k] = '<span class="qualifier">' + t('restriction.help.' + k) + '</span>';
118184                     });
118185
118186                     var entity = datum && datum.properties && datum.properties.entity;
118187                     if (entity) {
118188                         datum = entity;
118189                     }
118190
118191                     if (_fromWayID) {
118192                         way = vgraph.entity(_fromWayID);
118193                         surface
118194                             .selectAll('.' + _fromWayID)
118195                             .classed('selected', true)
118196                             .classed('related', true);
118197                     }
118198
118199                     // Hovering a way
118200                     if (datum instanceof osmWay && datum.__from) {
118201                         way = datum;
118202
118203                         highlightPathsFrom(_fromWayID ? null : way.id);
118204                         surface.selectAll('.' + way.id)
118205                             .classed('related', true);
118206
118207                         var clickSelect = (!_fromWayID || _fromWayID !== way.id);
118208                         help
118209                             .append('div')      // "Click to select FROM {fromName}." / "FROM {fromName}"
118210                             .html(t('restriction.help.' + (clickSelect ? 'select_from_name' : 'from_name'), {
118211                                 from: placeholders.from,
118212                                 fromName: displayName(way.id, vgraph)
118213                             }));
118214
118215
118216                     // Hovering a turn arrow
118217                     } else if (datum instanceof osmTurn) {
118218                         var restrictionType = osmInferRestriction(vgraph, datum, projection);
118219                         var turnType = restrictionType.replace(/^(only|no)\_/, '');
118220                         var indirect = (datum.direct === false ? t('restriction.help.indirect') : '');
118221                         var klass, turnText, nextText;
118222
118223                         if (datum.no) {
118224                             klass = 'restrict';
118225                             turnText = t('restriction.help.turn.no_' + turnType, { indirect: indirect });
118226                             nextText = t('restriction.help.turn.only_' + turnType, { indirect: '' });
118227                         } else if (datum.only) {
118228                             klass = 'only';
118229                             turnText = t('restriction.help.turn.only_' + turnType, { indirect: indirect });
118230                             nextText = t('restriction.help.turn.allowed_' + turnType, { indirect: '' });
118231                         } else {
118232                             klass = 'allow';
118233                             turnText = t('restriction.help.turn.allowed_' + turnType, { indirect: indirect });
118234                             nextText = t('restriction.help.turn.no_' + turnType, { indirect: '' });
118235                         }
118236
118237                         help
118238                             .append('div')      // "NO Right Turn (indirect)"
118239                             .attr('class', 'qualifier ' + klass)
118240                             .text(turnText);
118241
118242                         help
118243                             .append('div')      // "FROM {fromName} TO {toName}"
118244                             .html(t('restriction.help.from_name_to_name', {
118245                                 from: placeholders.from,
118246                                 fromName: displayName(datum.from.way, vgraph),
118247                                 to: placeholders.to,
118248                                 toName: displayName(datum.to.way, vgraph)
118249                             }));
118250
118251                         if (datum.via.ways && datum.via.ways.length) {
118252                             var names = [];
118253                             for (var i = 0; i < datum.via.ways.length; i++) {
118254                                 var prev = names[names.length - 1];
118255                                 var curr = displayName(datum.via.ways[i], vgraph);
118256                                 if (!prev || curr !== prev)   // collapse identical names
118257                                     { names.push(curr); }
118258                             }
118259
118260                             help
118261                                 .append('div')      // "VIA {viaNames}"
118262                                 .html(t('restriction.help.via_names', {
118263                                     via: placeholders.via,
118264                                     viaNames: names.join(', ')
118265                                 }));
118266                         }
118267
118268                         if (!indirect) {
118269                             help
118270                                 .append('div')      // Click for "No Right Turn"
118271                                 .text(t('restriction.help.toggle', { turn: nextText.trim() }));
118272                         }
118273
118274                         highlightPathsFrom(null);
118275                         var alongIDs = datum.path.slice();
118276                         surface.selectAll(utilEntitySelector(alongIDs))
118277                             .classed('related', true)
118278                             .classed('allow', (klass === 'allow'))
118279                             .classed('restrict', (klass === 'restrict'))
118280                             .classed('only', (klass === 'only'));
118281
118282
118283                     // Hovering empty surface
118284                     } else {
118285                         highlightPathsFrom(null);
118286                         if (_fromWayID) {
118287                             help
118288                                 .append('div')      // "FROM {fromName}"
118289                                 .html(t('restriction.help.from_name', {
118290                                     from: placeholders.from,
118291                                     fromName: displayName(_fromWayID, vgraph)
118292                                 }));
118293
118294                         } else {
118295                             help
118296                                 .append('div')      // "Click to select a FROM segment."
118297                                 .html(t('restriction.help.select_from', {
118298                                     from: placeholders.from
118299                                 }));
118300                         }
118301                     }
118302                 }
118303             }
118304
118305
118306             function displayMaxDistance(maxDist) {
118307                 var isImperial = (utilDetect().locale.toLowerCase() === 'en-us');
118308                 var opts;
118309
118310                 if (isImperial) {
118311                     var distToFeet = {   // imprecise conversion for prettier display
118312                         20: 70, 25: 85, 30: 100, 35: 115, 40: 130, 45: 145, 50: 160
118313                     }[maxDist];
118314                     opts = { distance: t('units.feet', { quantity: distToFeet }) };
118315                 } else {
118316                     opts = { distance: t('units.meters', { quantity: maxDist }) };
118317                 }
118318
118319                 return t('restriction.controls.distance_up_to', opts);
118320             }
118321
118322
118323             function displayMaxVia(maxVia) {
118324                 return maxVia === 0 ? t('restriction.controls.via_node_only')
118325                     : maxVia === 1 ? t('restriction.controls.via_up_to_one')
118326                     : t('restriction.controls.via_up_to_two');
118327             }
118328
118329
118330             function displayName(entityID, graph) {
118331                 var entity = graph.entity(entityID);
118332                 var name = utilDisplayName(entity) || '';
118333                 var matched = context.presets().match(entity, graph);
118334                 var type = (matched && matched.name()) || utilDisplayType(entity.id);
118335                 return name || type;
118336             }
118337
118338
118339             restrictions.entity = function(val) {
118340                 _intersection = null;
118341                 _fromWayID = null;
118342                 _oldTurns = null;
118343                 _vertexID = val.id;
118344             };
118345
118346
118347             restrictions.tags = function() {};
118348             restrictions.focus = function() {};
118349
118350
118351             restrictions.off = function(selection) {
118352                 if (!_initialized) { return; }
118353
118354                 selection.selectAll('.surface')
118355                     .call(breathe.off)
118356                     .on('click.restrictions', null)
118357                     .on('mouseover.restrictions', null);
118358
118359                 d3_select(window)
118360                     .on('resize.restrictions', null);
118361             };
118362
118363
118364             return utilRebind(restrictions, dispatch$1, 'on');
118365         }
118366
118367         function uiFieldTextarea(field) {
118368             var dispatch$1 = dispatch('change');
118369             var input = d3_select(null);
118370
118371
118372             function textarea(selection) {
118373                 var wrap = selection.selectAll('.form-field-input-wrap')
118374                     .data([0]);
118375
118376                 wrap = wrap.enter()
118377                     .append('div')
118378                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
118379                     .merge(wrap);
118380
118381                 input = wrap.selectAll('textarea')
118382                     .data([0]);
118383
118384                 input = input.enter()
118385                     .append('textarea')
118386                     .attr('id', 'preset-input-' + field.safeid)
118387                     .attr('placeholder', field.placeholder() || t('inspector.unknown'))
118388                     .attr('maxlength', 255)
118389                     .call(utilNoAuto)
118390                     .on('input', change(true))
118391                     .on('blur', change())
118392                     .on('change', change())
118393                     .merge(input);
118394             }
118395
118396
118397             function change(onInput) {
118398                 return function() {
118399                     var t = {};
118400                     t[field.key] = utilGetSetValue(input) || undefined;
118401                     dispatch$1.call('change', this, t, onInput);
118402                 };
118403             }
118404
118405
118406             textarea.tags = function(tags) {
118407                 utilGetSetValue(input, tags[field.key] || '');
118408             };
118409
118410
118411             textarea.focus = function() {
118412                 input.node().focus();
118413             };
118414
118415
118416             return utilRebind(textarea, dispatch$1, 'on');
118417         }
118418
118419         function uiFieldWikidata(field, context) {
118420             var wikidata = services$1.wikidata;
118421             var dispatch$1 = dispatch('change');
118422             var searchInput = d3_select(null);
118423             var _qid = null;
118424             var _wikidataEntity = null;
118425             var _wikiURL = '';
118426             var _entity;
118427
118428             var _wikipediaKey = field.keys && field.keys.find(function(key) {
118429                     return key.includes('wikipedia');
118430                 }),
118431                 _hintKey = field.key === 'wikidata' ? 'name' : field.key.split(':')[0];
118432
118433             var combobox = uiCombobox(context, 'combo-' + field.safeid)
118434                 .caseSensitive(true)
118435                 .minItems(1);
118436
118437             function wiki(selection) {
118438
118439                 var wrap = selection.selectAll('.form-field-input-wrap')
118440                     .data([0]);
118441
118442                 wrap = wrap.enter()
118443                     .append('div')
118444                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
118445                     .merge(wrap);
118446
118447
118448                 var list = wrap.selectAll('ul')
118449                     .data([0]);
118450
118451                 list = list.enter()
118452                     .append('ul')
118453                     .attr('class', 'rows')
118454                     .merge(list);
118455
118456                 var searchRow = list.selectAll('li.wikidata-search')
118457                     .data([0]);
118458
118459                 var searchRowEnter = searchRow.enter()
118460                     .append('li')
118461                     .attr('class', 'wikidata-search');
118462
118463                 searchInput = searchRowEnter
118464                     .append('input')
118465                     .attr('type', 'text')
118466                     .style('flex', '1')
118467                     .call(utilNoAuto);
118468
118469                 searchInput
118470                     .on('focus', function() {
118471                         var node = d3_select(this).node();
118472                         node.setSelectionRange(0, node.value.length);
118473                     })
118474                     .on('blur', function() {
118475                         setLabelForEntity();
118476                     })
118477                     .call(combobox.fetcher(fetchWikidataItems));
118478
118479                 combobox.on('accept', function(d) {
118480                     _qid = d.id;
118481                     change();
118482                 }).on('cancel', function() {
118483                     setLabelForEntity();
118484                 });
118485
118486                 searchRowEnter
118487                     .append('button')
118488                     .attr('class', 'form-field-button wiki-link')
118489                     .attr('title', t('icons.view_on', { domain: 'wikidata.org' }))
118490                     .attr('tabindex', -1)
118491                     .call(svgIcon('#iD-icon-out-link'))
118492                     .on('click', function() {
118493                         event.preventDefault();
118494                         if (_wikiURL) { window.open(_wikiURL, '_blank'); }
118495                     });
118496
118497                 var wikidataProperties = ['description', 'identifier'];
118498
118499                 var items = list.selectAll('li.labeled-input')
118500                     .data(wikidataProperties);
118501
118502                 // Enter
118503                 var enter = items.enter()
118504                     .append('li')
118505                     .attr('class', function(d) { return 'labeled-input preset-wikidata-' + d; });
118506
118507                 enter
118508                     .append('span')
118509                     .attr('class', 'label')
118510                     .attr('for', function(d) { return 'preset-input-wikidata-' + d; })
118511                     .text(function(d) { return t('wikidata.' + d); });
118512
118513                 enter
118514                     .append('input')
118515                     .attr('type', 'text')
118516                     .attr('id', function(d) { return 'preset-input-wikidata-' + d; })
118517                     .call(utilNoAuto)
118518                     .classed('disabled', 'true')
118519                     .attr('readonly', 'true');
118520
118521                 enter
118522                     .append('button')
118523                     .attr('class', 'form-field-button')
118524                     .attr('title', t('icons.copy'))
118525                     .attr('tabindex', -1)
118526                     .call(svgIcon('#iD-operation-copy'))
118527                     .on('click', function() {
118528                         event.preventDefault();
118529                         d3_select(this.parentNode)
118530                             .select('input')
118531                             .node()
118532                             .select();
118533                         document.execCommand('copy');
118534                     });
118535
118536             }
118537
118538             function fetchWikidataItems(q, callback) {
118539
118540                 if (!q && _entity) {
118541                     q = (_hintKey && context.entity(_entity.id).tags[_hintKey]) || '';
118542                 }
118543
118544                 wikidata.itemsForSearchQuery(q, function(err, data) {
118545                     if (err) { return; }
118546
118547                     for (var i in data) {
118548                         data[i].value = data[i].label + ' (' +  data[i].id + ')';
118549                         data[i].title = data[i].description;
118550                     }
118551
118552                     if (callback) { callback(data); }
118553                 });
118554             }
118555
118556
118557             function change() {
118558                 var syncTags = {};
118559                 syncTags[field.key] = _qid;
118560                 dispatch$1.call('change', this, syncTags);
118561
118562                 // attempt asynchronous update of wikidata tag..
118563                 var initGraph = context.graph();
118564                 var initEntityID = _entity.id;
118565
118566                 wikidata.entityByQID(_qid, function(err, entity) {
118567                     if (err) { return; }
118568
118569                     // If graph has changed, we can't apply this update.
118570                     if (context.graph() !== initGraph) { return; }
118571
118572                     if (!entity.sitelinks) { return; }
118573
118574                     var langs = wikidata.languagesToQuery();
118575                     // use the label and description languages as fallbacks
118576                     ['labels', 'descriptions'].forEach(function(key) {
118577                         if (!entity[key]) { return; }
118578
118579                         var valueLangs = Object.keys(entity[key]);
118580                         if (valueLangs.length === 0) { return; }
118581                         var valueLang = valueLangs[0];
118582
118583                         if (langs.indexOf(valueLang) === -1) {
118584                             langs.push(valueLang);
118585                         }
118586                     });
118587
118588                     var currTags = Object.assign({}, context.entity(initEntityID).tags);  // shallow copy
118589
118590                     if (_wikipediaKey) {
118591                         var foundPreferred;
118592                         for (var i in langs) {
118593                             var lang = langs[i];
118594                             var siteID = lang.replace('-', '_') + 'wiki';
118595                             if (entity.sitelinks[siteID]) {
118596                                 foundPreferred = true;
118597                                 currTags[_wikipediaKey] = lang + ':' + entity.sitelinks[siteID].title;
118598                                 // use the first match
118599                                 break;
118600                             }
118601                         }
118602
118603                         if (!foundPreferred) {
118604                             // No wikipedia sites available in the user's language or the fallback languages,
118605                             // default to any wikipedia sitelink
118606
118607                             var wikiSiteKeys = Object.keys(entity.sitelinks).filter(function(site) {
118608                                 return site.endsWith('wiki');
118609                             });
118610
118611                             if (wikiSiteKeys.length === 0) {
118612                                 // if no wikipedia pages are linked to this wikidata entity, delete that tag
118613                                 if (currTags[_wikipediaKey]) {
118614                                     delete currTags[_wikipediaKey];
118615                                 }
118616                             } else {
118617                                 var wikiLang = wikiSiteKeys[0].slice(0, -4).replace('_', '-');
118618                                 var wikiTitle = entity.sitelinks[wikiSiteKeys[0]].title;
118619                                 currTags[_wikipediaKey] = wikiLang + ':' + wikiTitle;
118620                             }
118621                         }
118622                     }
118623
118624                     // Coalesce the update of wikidata tag into the previous tag change
118625                     context.overwrite(
118626                         actionChangeTags(initEntityID, currTags),
118627                         context.history().undoAnnotation()
118628                     );
118629
118630                     // do not dispatch.call('change') here, because entity_editor
118631                     // changeTags() is not intended to be called asynchronously
118632
118633                 });
118634             }
118635
118636             function setLabelForEntity() {
118637                 var label = '';
118638                 if (_wikidataEntity) {
118639                     label = entityPropertyForDisplay(_wikidataEntity, 'labels');
118640                     if (label.length === 0) {
118641                         label = _wikidataEntity.id.toString();
118642                     }
118643                 }
118644                 utilGetSetValue(d3_select('li.wikidata-search input'), label);
118645             }
118646
118647
118648             wiki.tags = function(tags) {
118649                 _qid = tags[field.key] || '';
118650
118651                 if (!/^Q[0-9]*$/.test(_qid)) {   // not a proper QID
118652                     unrecognized();
118653                     return;
118654                 }
118655
118656                 // QID value in correct format
118657                 _wikiURL = 'https://wikidata.org/wiki/' + _qid;
118658                 wikidata.entityByQID(_qid, function(err, entity) {
118659                     if (err) {
118660                         unrecognized();
118661                         return;
118662                     }
118663                     _wikidataEntity = entity;
118664
118665                     setLabelForEntity();
118666
118667                     var description = entityPropertyForDisplay(entity, 'descriptions');
118668
118669                     d3_select('.form-field-wikidata button.wiki-link')
118670                         .classed('disabled', false);
118671
118672                     d3_select('.preset-wikidata-description')
118673                         .style('display', function(){
118674                             return description.length > 0 ? 'flex' : 'none';
118675                         })
118676                         .select('input')
118677                         .attr('value', description);
118678
118679                     d3_select('.preset-wikidata-identifier')
118680                         .style('display', function(){
118681                             return entity.id ? 'flex' : 'none';
118682                         })
118683                         .select('input')
118684                         .attr('value', entity.id);
118685                 });
118686
118687
118688                 // not a proper QID
118689                 function unrecognized() {
118690                     _wikidataEntity = null;
118691                     setLabelForEntity();
118692
118693                     d3_select('.preset-wikidata-description')
118694                         .style('display', 'none');
118695                     d3_select('.preset-wikidata-identifier')
118696                         .style('display', 'none');
118697
118698                     d3_select('.form-field-wikidata button.wiki-link')
118699                         .classed('disabled', true);
118700
118701                     if (_qid && _qid !== '') {
118702                         _wikiURL = 'https://wikidata.org/wiki/Special:Search?search=' + _qid;
118703                     } else {
118704                         _wikiURL = '';
118705                     }
118706                 }
118707             };
118708
118709             function entityPropertyForDisplay(wikidataEntity, propKey) {
118710                 if (!wikidataEntity[propKey]) { return ''; }
118711                 var propObj = wikidataEntity[propKey];
118712                 var langKeys = Object.keys(propObj);
118713                 if (langKeys.length === 0) { return ''; }
118714                 // sorted by priority, since we want to show the user's language first if possible
118715                 var langs = wikidata.languagesToQuery();
118716                 for (var i in langs) {
118717                     var lang = langs[i];
118718                     var valueObj = propObj[lang];
118719                     if (valueObj && valueObj.value && valueObj.value.length > 0) { return valueObj.value; }
118720                 }
118721                 // default to any available value
118722                 return propObj[langKeys[0]].value;
118723             }
118724
118725
118726             wiki.entity = function(val) {
118727                 if (!arguments.length) { return _entity; }
118728                 _entity = val;
118729                 return wiki;
118730             };
118731
118732
118733             wiki.focus = function() {
118734                 searchInput.node().focus();
118735             };
118736
118737
118738             return utilRebind(wiki, dispatch$1, 'on');
118739         }
118740
118741         function uiFieldWikipedia(field, context) {
118742             var dispatch$1 = dispatch('change');
118743             var wikipedia = services$1.wikipedia;
118744             var wikidata = services$1.wikidata;
118745             var lang = d3_select(null);
118746             var title = d3_select(null);
118747             var _wikiURL = '';
118748             var _entity;
118749
118750             var langCombo = uiCombobox(context, 'wikipedia-lang')
118751                 .fetcher(function(value, cb) {
118752                     var v = value.toLowerCase();
118753
118754                     cb(wikipedia$2.filter(function(d) {
118755                         return d[0].toLowerCase().indexOf(v) >= 0 ||
118756                             d[1].toLowerCase().indexOf(v) >= 0 ||
118757                             d[2].toLowerCase().indexOf(v) >= 0;
118758                     }).map(function(d) {
118759                         return { value: d[1] };
118760                     }));
118761                 });
118762
118763             var titleCombo = uiCombobox(context, 'wikipedia-title')
118764                 .fetcher(function(value, cb) {
118765                     if (!value && _entity) {
118766                         value = context.entity(_entity.id).tags.name || '';
118767                     }
118768
118769                     var searchfn = value.length > 7 ? wikipedia.search : wikipedia.suggestions;
118770                     searchfn(language()[2], value, function(query, data) {
118771                         cb(data.map(function(d) {
118772                             return { value: d };
118773                         }));
118774                     });
118775                 });
118776
118777
118778             function wiki(selection) {
118779                 var wrap = selection.selectAll('.form-field-input-wrap')
118780                     .data([0]);
118781
118782                 wrap = wrap.enter()
118783                     .append('div')
118784                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
118785                     .merge(wrap);
118786
118787
118788                 var langRow = wrap.selectAll('.wiki-lang-container')
118789                     .data([0]);
118790
118791                 langRow = langRow.enter()
118792                     .append('div')
118793                     .attr('class', 'wiki-lang-container')
118794                     .merge(langRow);
118795
118796
118797                 lang = langRow.selectAll('input.wiki-lang')
118798                     .data([0]);
118799
118800                 lang = lang.enter()
118801                     .append('input')
118802                     .attr('type', 'text')
118803                     .attr('class', 'wiki-lang')
118804                     .attr('placeholder', t('translate.localized_translation_language'))
118805                     .call(utilNoAuto)
118806                     .call(langCombo)
118807                     .merge(lang);
118808
118809                 utilGetSetValue(lang, language()[1]);
118810
118811                 lang
118812                     .on('blur', changeLang)
118813                     .on('change', changeLang);
118814
118815
118816                 var titleRow = wrap.selectAll('.wiki-title-container')
118817                     .data([0]);
118818
118819                 titleRow = titleRow.enter()
118820                     .append('div')
118821                     .attr('class', 'wiki-title-container')
118822                     .merge(titleRow);
118823
118824                 title = titleRow.selectAll('input.wiki-title')
118825                     .data([0]);
118826
118827                 title = title.enter()
118828                     .append('input')
118829                     .attr('type', 'text')
118830                     .attr('class', 'wiki-title')
118831                     .attr('id', 'preset-input-' + field.safeid)
118832                     .call(utilNoAuto)
118833                     .call(titleCombo)
118834                     .merge(title);
118835
118836                 title
118837                     .on('blur', blur)
118838                     .on('change', change);
118839
118840
118841                 var link = titleRow.selectAll('.wiki-link')
118842                     .data([0]);
118843
118844                 link = link.enter()
118845                     .append('button')
118846                     .attr('class', 'form-field-button wiki-link')
118847                     .attr('tabindex', -1)
118848                     .attr('title', t('icons.view_on', { domain: 'wikipedia.org' }))
118849                     .call(svgIcon('#iD-icon-out-link'))
118850                     .merge(link);
118851
118852                 link
118853                     .on('click', function() {
118854                         event.preventDefault();
118855                         if (_wikiURL) { window.open(_wikiURL, '_blank'); }
118856                     });
118857             }
118858
118859
118860             function language() {
118861                 var value = utilGetSetValue(lang).toLowerCase();
118862                 var locale = utilDetect().locale.toLowerCase();
118863                 var localeLanguage;
118864                 return wikipedia$2.find(function(d) {
118865                     if (d[2] === locale) { localeLanguage = d; }
118866                     return d[0].toLowerCase() === value ||
118867                         d[1].toLowerCase() === value ||
118868                         d[2] === value;
118869                 }) || localeLanguage || ['English', 'English', 'en'];
118870             }
118871
118872
118873             function changeLang() {
118874                 utilGetSetValue(lang, language()[1]);
118875                 change(true);
118876             }
118877
118878
118879             function blur() {
118880                 change(true);
118881             }
118882
118883
118884             function change(skipWikidata) {
118885                 var value = utilGetSetValue(title);
118886                 var m = value.match(/https?:\/\/([-a-z]+)\.wikipedia\.org\/(?:wiki|\1-[-a-z]+)\/([^#]+)(?:#(.+))?/);
118887                 var l = m && wikipedia$2.find(function(d) { return m[1] === d[2]; });
118888                 var syncTags = {};
118889
118890                 if (l) {
118891                     // Normalize title http://www.mediawiki.org/wiki/API:Query#Title_normalization
118892                     value = decodeURIComponent(m[2]).replace(/_/g, ' ');
118893                     if (m[3]) {
118894                         var anchor;
118895                         // try {
118896                         // leave this out for now - #6232
118897                             // Best-effort `anchordecode:` implementation
118898                             // anchor = decodeURIComponent(m[3].replace(/\.([0-9A-F]{2})/g, '%$1'));
118899                         // } catch (e) {
118900                             anchor = decodeURIComponent(m[3]);
118901                         // }
118902                         value += '#' + anchor.replace(/_/g, ' ');
118903                     }
118904                     value = value.slice(0, 1).toUpperCase() + value.slice(1);
118905                     utilGetSetValue(lang, l[1]);
118906                     utilGetSetValue(title, value);
118907                 }
118908
118909                 if (value) {
118910                     syncTags.wikipedia = language()[2] + ':' + value;
118911                 } else {
118912                     syncTags.wikipedia = undefined;
118913                 }
118914
118915                 dispatch$1.call('change', this, syncTags);
118916
118917
118918                 if (skipWikidata || !value || !language()[2]) { return; }
118919
118920                 // attempt asynchronous update of wikidata tag..
118921                 var initGraph = context.graph();
118922                 var initEntityID = _entity.id;
118923
118924                 wikidata.itemsByTitle(language()[2], value, function(err, data) {
118925                     if (err) { return; }
118926
118927                     // If graph has changed, we can't apply this update.
118928                     if (context.graph() !== initGraph) { return; }
118929
118930                     if (!data || !Object.keys(data).length) { return; }
118931
118932                     var qids = Object.keys(data);
118933                     var value = qids && qids.find(function(id) { return id.match(/^Q\d+$/); });
118934                     var currTags = Object.assign({}, context.entity(initEntityID).tags);  // shallow copy
118935
118936                     currTags.wikidata = value;
118937
118938                     // Coalesce the update of wikidata tag into the previous tag change
118939                     context.overwrite(
118940                         actionChangeTags(initEntityID, currTags),
118941                         context.history().undoAnnotation()
118942                     );
118943
118944                     // do not dispatch.call('change') here, because entity_editor
118945                     // changeTags() is not intended to be called asynchronously
118946                 });
118947             }
118948
118949
118950             wiki.tags = function(tags) {
118951                 var value = tags[field.key] || '';
118952                 var m = value.match(/([^:]+):([^#]+)(?:#(.+))?/);
118953                 var l = m && wikipedia$2.find(function(d) { return m[1] === d[2]; });
118954                 var anchor = m && m[3];
118955
118956                 // value in correct format
118957                 if (l) {
118958                     utilGetSetValue(lang, l[1]);
118959                     utilGetSetValue(title, m[2] + (anchor ? ('#' + anchor) : ''));
118960                     if (anchor) {
118961                         try {
118962                             // Best-effort `anchorencode:` implementation
118963                             anchor = encodeURIComponent(anchor.replace(/ /g, '_')).replace(/%/g, '.');
118964                         } catch (e) {
118965                             anchor = anchor.replace(/ /g, '_');
118966                         }
118967                     }
118968                     _wikiURL = 'https://' + m[1] + '.wikipedia.org/wiki/' +
118969                         m[2].replace(/ /g, '_') + (anchor ? ('#' + anchor) : '');
118970
118971                 // unrecognized value format
118972                 } else {
118973                     utilGetSetValue(title, value);
118974                     if (value && value !== '') {
118975                         utilGetSetValue(lang, '');
118976                         _wikiURL = 'https://en.wikipedia.org/wiki/Special:Search?search=' + value;
118977                     } else {
118978                         _wikiURL = '';
118979                     }
118980                 }
118981             };
118982
118983
118984             wiki.entity = function(val) {
118985                 if (!arguments.length) { return _entity; }
118986                 _entity = val;
118987                 return wiki;
118988             };
118989
118990
118991             wiki.focus = function() {
118992                 title.node().focus();
118993             };
118994
118995
118996             return utilRebind(wiki, dispatch$1, 'on');
118997         }
118998
118999         var uiFields = {
119000             access: uiFieldAccess,
119001             address: uiFieldAddress,
119002             check: uiFieldCheck,
119003             combo: uiFieldCombo,
119004             cycleway: uiFieldCycleway,
119005             defaultCheck: uiFieldCheck,
119006             email: uiFieldText,
119007             identifier: uiFieldText,
119008             lanes: uiFieldLanes,
119009             localized: uiFieldLocalized,
119010             maxspeed: uiFieldMaxspeed,
119011             multiCombo: uiFieldCombo,
119012             networkCombo: uiFieldCombo,
119013             number: uiFieldText,
119014             onewayCheck: uiFieldCheck,
119015             radio: uiFieldRadio,
119016             restrictions: uiFieldRestrictions,
119017             semiCombo: uiFieldCombo,
119018             structureRadio: uiFieldRadio,
119019             tel: uiFieldText,
119020             text: uiFieldText,
119021             textarea: uiFieldTextarea,
119022             typeCombo: uiFieldCombo,
119023             url: uiFieldText,
119024             wikidata: uiFieldWikidata,
119025             wikipedia: uiFieldWikipedia
119026         };
119027
119028         function uiField(context, presetField, entity, options) {
119029             options = Object.assign({
119030                 show: true,
119031                 wrap: true,
119032                 remove: true,
119033                 revert: true,
119034                 info: true
119035             }, options);
119036
119037             var dispatch$1 = dispatch('change');
119038             var field = Object.assign({}, presetField);   // shallow copy
119039             var _show = options.show;
119040             var _state = '';
119041             var _tags = {};
119042
119043             var _locked = false;
119044             var _lockedTip = tooltip()
119045                 .title(t('inspector.lock.suggestion', { label: field.label }))
119046                 .placement('bottom');
119047
119048
119049             field.keys = field.keys || [field.key];
119050
119051             // only create the fields that are actually being shown
119052             if (_show && !field.impl) {
119053                 createField();
119054             }
119055
119056             // Creates the field.. This is done lazily,
119057             // once we know that the field will be shown.
119058             function createField() {
119059                 field.impl = uiFields[field.type](field, context)
119060                     .on('change', function(t, onInput) {
119061                         dispatch$1.call('change', field, t, onInput);
119062                     });
119063
119064                 if (entity) {
119065                     field.entityID = entity.id;
119066                     // if this field cares about the entity, pass it along
119067                     if (field.impl.entity) {
119068                         field.impl.entity(entity);
119069                     }
119070                 }
119071             }
119072
119073
119074             function isModified() {
119075                 if (!entity) { return false; }
119076                 var original = context.graph().base().entities[entity.id];
119077                 return field.keys.some(function(key) {
119078                     return original ? _tags[key] !== original.tags[key] : _tags[key];
119079                 });
119080             }
119081
119082
119083             function tagsContainFieldKey() {
119084                 return field.keys.some(function(key) {
119085                     if (field.type === 'multiCombo') {
119086                         for (var tagKey in _tags) {
119087                             if (tagKey.indexOf(key) === 0) {
119088                                 return true;
119089                             }
119090                         }
119091                         return false;
119092                     }
119093                     return _tags[key] !== undefined;
119094                 });
119095             }
119096
119097
119098             function revert(d) {
119099                 event.stopPropagation();
119100                 event.preventDefault();
119101                 if (!entity || _locked) { return; }
119102
119103                 var original = context.graph().base().entities[entity.id];
119104                 var t = {};
119105                 d.keys.forEach(function(key) {
119106                     t[key] = original ? original.tags[key] : undefined;
119107                 });
119108
119109                 dispatch$1.call('change', d, t);
119110             }
119111
119112
119113             function remove(d) {
119114                 event.stopPropagation();
119115                 event.preventDefault();
119116                 if (_locked) { return; }
119117
119118                 var t = {};
119119                 d.keys.forEach(function(key) {
119120                     t[key] = undefined;
119121                 });
119122
119123                 dispatch$1.call('change', d, t);
119124             }
119125
119126
119127             field.render = function(selection) {
119128                 var container = selection.selectAll('.form-field')
119129                     .data([field]);
119130
119131                 // Enter
119132                 var enter = container.enter()
119133                     .append('div')
119134                     .attr('class', function(d) { return 'form-field form-field-' + d.safeid; })
119135                     .classed('nowrap', !options.wrap);
119136
119137                 if (options.wrap) {
119138                     var labelEnter = enter
119139                         .append('label')
119140                         .attr('class', 'field-label')
119141                         .attr('for', function(d) { return 'preset-input-' + d.safeid; });
119142
119143                     var textEnter = labelEnter
119144                         .append('span')
119145                         .attr('class', 'label-text');
119146
119147                     textEnter
119148                         .append('span')
119149                         .attr('class', 'label-textvalue')
119150                         .text(function(d) { return d.label(); });
119151
119152                     textEnter
119153                         .append('span')
119154                         .attr('class', 'label-textannotation');
119155
119156                     if (options.remove) {
119157                         labelEnter
119158                             .append('button')
119159                             .attr('class', 'remove-icon')
119160                             .attr('title', t('icons.remove'))
119161                             .attr('tabindex', -1)
119162                             .call(svgIcon('#iD-operation-delete'));
119163                     }
119164
119165                     if (options.revert) {
119166                         labelEnter
119167                             .append('button')
119168                             .attr('class', 'modified-icon')
119169                             .attr('title', t('icons.undo'))
119170                             .attr('tabindex', -1)
119171                             .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-redo' : '#iD-icon-undo'));
119172                     }
119173                 }
119174
119175
119176                 // Update
119177                 container = container
119178                     .merge(enter);
119179
119180                 container.select('.field-label > .remove-icon')  // propagate bound data
119181                     .on('click', remove);
119182
119183                 container.select('.field-label > .modified-icon')  // propagate bound data
119184                     .on('click', revert);
119185
119186                 container
119187                     .each(function(d) {
119188                         var selection = d3_select(this);
119189
119190                         if (!d.impl) {
119191                             createField();
119192                         }
119193
119194                         var reference, help;
119195
119196                         // instantiate field help
119197                         if (options.wrap && field.type === 'restrictions') {
119198                             help = uiFieldHelp(context, 'restrictions');
119199                         }
119200
119201                         // instantiate tag reference
119202                         if (options.wrap && options.info) {
119203                             var referenceKey = d.key;
119204                             if (d.type === 'multiCombo') {   // lookup key without the trailing ':'
119205                                 referenceKey = referenceKey.replace(/:$/, '');
119206                             }
119207
119208                             reference = uiTagReference(d.reference || { key: referenceKey });
119209                             if (_state === 'hover') {
119210                                 reference.showing(false);
119211                             }
119212                         }
119213
119214                         selection
119215                             .call(d.impl);
119216
119217                         // add field help components
119218                         if (help) {
119219                             selection
119220                                 .call(help.body)
119221                                 .select('.field-label')
119222                                 .call(help.button);
119223                         }
119224
119225                         // add tag reference components
119226                         if (reference) {
119227                             selection
119228                                 .call(reference.body)
119229                                 .select('.field-label')
119230                                 .call(reference.button);
119231                         }
119232
119233                         d.impl.tags(_tags);
119234                     });
119235
119236
119237                     container
119238                         .classed('locked', _locked)
119239                         .classed('modified', isModified())
119240                         .classed('present', tagsContainFieldKey());
119241
119242
119243                     // show a tip and lock icon if the field is locked
119244                     var annotation = container.selectAll('.field-label .label-textannotation');
119245                     var icon = annotation.selectAll('.icon')
119246                         .data(_locked ? [0]: []);
119247
119248                     icon.exit()
119249                         .remove();
119250
119251                     icon.enter()
119252                         .append('svg')
119253                         .attr('class', 'icon')
119254                         .append('use')
119255                         .attr('xlink:href', '#fas-lock');
119256
119257                     container.call(_locked ? _lockedTip : _lockedTip.destroy);
119258             };
119259
119260
119261             field.state = function(val) {
119262                 if (!arguments.length) { return _state; }
119263                 _state = val;
119264                 return field;
119265             };
119266
119267
119268             field.tags = function(val) {
119269                 if (!arguments.length) { return _tags; }
119270                 _tags = val;
119271
119272                 if (tagsContainFieldKey() && !_show) {
119273                     // always show a field if it has a value to display
119274                     _show = true;
119275                     if (!field.impl) {
119276                         createField();
119277                     }
119278                 }
119279
119280                 return field;
119281             };
119282
119283
119284             field.locked = function(val) {
119285                 if (!arguments.length) { return _locked; }
119286                 _locked = val;
119287                 return field;
119288             };
119289
119290
119291             field.show = function() {
119292                 _show = true;
119293                 if (!field.impl) {
119294                     createField();
119295                 }
119296                 if (field.default && field.key && _tags[field.key] !== field.default) {
119297                     var t = {};
119298                     t[field.key] = field.default;
119299                     dispatch$1.call('change', this, t);
119300                 }
119301             };
119302
119303             // A shown field has a visible UI, a non-shown field is in the 'Add field' dropdown
119304             field.isShown = function() {
119305                 return _show;
119306             };
119307
119308
119309             // An allowed field can appear in the UI or in the 'Add field' dropdown.
119310             // A non-allowed field is hidden from the user altogether
119311             field.isAllowed = function() {
119312
119313                 var latest = entity && context.hasEntity(entity.id);   // check the most current copy of the entity
119314                 if (!latest) { return true; }
119315
119316                 if (field.countryCodes || field.notCountryCodes) {
119317                     var center = latest.extent(context.graph()).center();
119318                     var countryCode = iso1A2Code(center);
119319
119320                     if (!countryCode) { return false; }
119321
119322                     countryCode = countryCode.toLowerCase();
119323
119324                     if (field.countryCodes && field.countryCodes.indexOf(countryCode) === -1) {
119325                         return false;
119326                     }
119327                     if (field.notCountryCodes && field.notCountryCodes.indexOf(countryCode) !== -1) {
119328                         return false;
119329                     }
119330                 }
119331
119332                 var prerequisiteTag = field.prerequisiteTag;
119333
119334                 if (!tagsContainFieldKey() && // ignore tagging prerequisites if a value is already present
119335                     prerequisiteTag) {
119336                     if (prerequisiteTag.key) {
119337                         var value = latest.tags[prerequisiteTag.key];
119338                         if (!value) { return false; }
119339
119340                         if (prerequisiteTag.valueNot) {
119341                             return prerequisiteTag.valueNot !== value;
119342                         }
119343                         if (prerequisiteTag.value) {
119344                             return prerequisiteTag.value === value;
119345                         }
119346                     } else if (prerequisiteTag.keyNot) {
119347                         if (latest.tags[prerequisiteTag.keyNot]) { return false; }
119348                     }
119349                 }
119350
119351                 return true;
119352             };
119353
119354
119355             field.focus = function() {
119356                 if (field.impl) {
119357                     field.impl.focus();
119358                 }
119359             };
119360
119361
119362             return utilRebind(field, dispatch$1, 'on');
119363         }
119364
119365         function uiFormFields(context) {
119366             var moreCombo = uiCombobox(context, 'more-fields').minItems(1);
119367             var _fieldsArr = [];
119368             var _lastPlaceholder = '';
119369             var _state = '';
119370             var _klass = '';
119371
119372
119373             function formFields(selection) {
119374                 var allowedFields = _fieldsArr.filter(function(field) { return field.isAllowed(); });
119375                 var shown = allowedFields.filter(function(field) { return field.isShown(); });
119376                 var notShown = allowedFields.filter(function(field) { return !field.isShown(); });
119377
119378                 var container = selection.selectAll('.form-fields-container')
119379                     .data([0]);
119380
119381                 container = container.enter()
119382                     .append('div')
119383                     .attr('class', 'form-fields-container ' + (_klass || ''))
119384                     .merge(container);
119385
119386
119387                 var fields = container.selectAll('.wrap-form-field')
119388                     .data(shown, function(d) { return d.id + (d.entityID || ''); });
119389
119390                 fields.exit()
119391                     .remove();
119392
119393                 // Enter
119394                 var enter = fields.enter()
119395                     .append('div')
119396                     .attr('class', function(d) { return 'wrap-form-field wrap-form-field-' + d.safeid; });
119397
119398                 // Update
119399                 fields = fields
119400                     .merge(enter);
119401
119402                 fields
119403                     .order()
119404                     .each(function(d) {
119405                         d3_select(this)
119406                             .call(d.render);
119407                     });
119408
119409
119410                 var titles = [];
119411                 var moreFields = notShown.map(function(field) {
119412                     var label = field.label();
119413                     titles.push(label);
119414                     
119415                     var terms = field.terms();
119416                     if (field.key) { terms.push(field.key); }
119417                     if (field.keys) { terms = terms.concat(field.keys); }
119418
119419                     return {
119420                         title: label,
119421                         value: label,
119422                         field: field,
119423                         terms: terms
119424                     };
119425                 });
119426
119427                 var placeholder = titles.slice(0,3).join(', ') + ((titles.length > 3) ? '…' : '');
119428
119429
119430                 var more = selection.selectAll('.more-fields')
119431                     .data((_state === 'hover' || moreFields.length === 0) ? [] : [0]);
119432
119433                 more.exit()
119434                     .remove();
119435
119436                 more = more.enter()
119437                     .append('div')
119438                     .attr('class', 'more-fields')
119439                     .append('label')
119440                     .text(t('inspector.add_fields'))
119441                     .merge(more);
119442
119443
119444                 var input = more.selectAll('.value')
119445                     .data([0]);
119446
119447                 input.exit()
119448                     .remove();
119449
119450                 input = input.enter()
119451                     .append('input')
119452                     .attr('class', 'value')
119453                     .attr('type', 'text')
119454                     .attr('placeholder', placeholder)
119455                     .call(utilNoAuto)
119456                     .merge(input);
119457
119458                 input
119459                     .call(utilGetSetValue, '')
119460                     .call(moreCombo
119461                         .data(moreFields)
119462                         .on('accept', function (d) {
119463                             if (!d) { return; }  // user entered something that was not matched
119464                             var field = d.field;
119465                             field.show();
119466                             selection.call(formFields);  // rerender
119467                             if (field.type !== 'semiCombo' && field.type !== 'multiCombo') {
119468                                 field.focus();
119469                             }
119470                         })
119471                     );
119472
119473                 // avoid updating placeholder excessively (triggers style recalc)
119474                 if (_lastPlaceholder !== placeholder) {
119475                     input.attr('placeholder', placeholder);
119476                     _lastPlaceholder = placeholder;
119477                 }
119478             }
119479
119480
119481             formFields.fieldsArr = function(val) {
119482                 if (!arguments.length) { return _fieldsArr; }
119483                 _fieldsArr = val || [];
119484                 return formFields;
119485             };
119486
119487             formFields.state = function(val) {
119488                 if (!arguments.length) { return _state; }
119489                 _state = val;
119490                 return formFields;
119491             };
119492
119493             formFields.klass = function(val) {
119494                 if (!arguments.length) { return _klass; }
119495                 _klass = val;
119496                 return formFields;
119497             };
119498
119499
119500             return formFields;
119501         }
119502
119503         function uiPresetEditor(context) {
119504             var dispatch$1 = dispatch('change');
119505             var formFields = uiFormFields(context);
119506             var _state;
119507             var _fieldsArr;
119508             var _preset;
119509             var _tags;
119510             var _entityID;
119511
119512
119513             function presetEditor(selection) {
119514                 selection.call(uiDisclosure(context, 'preset_fields', true)
119515                     .title(t('inspector.all_fields'))
119516                     .content(render)
119517                 );
119518             }
119519
119520
119521             function render(selection) {
119522                 if (!_fieldsArr) {
119523                     var entity = context.entity(_entityID);
119524                     var geometry = context.geometry(_entityID);
119525                     var presets = context.presets();
119526
119527                     _fieldsArr = [];
119528
119529                     _preset.fields.forEach(function(field) {
119530                         if (field.matchGeometry(geometry)) {
119531                             _fieldsArr.push(
119532                                 uiField(context, field, entity)
119533                             );
119534                         }
119535                     });
119536
119537                     if (entity.isHighwayIntersection(context.graph()) && presets.field('restrictions')) {
119538                         _fieldsArr.push(
119539                             uiField(context, presets.field('restrictions'), entity)
119540                         );
119541                     }
119542
119543                     var additionalFields = utilArrayUnion(_preset.moreFields, presets.universal());
119544                     additionalFields.sort(function(field1, field2) {
119545                         return field1.label().localeCompare(field2.label(), currentLocale);
119546                     });
119547
119548                     additionalFields.forEach(function(field) {
119549                         if (_preset.fields.indexOf(field) === -1 &&
119550                             field.matchGeometry(geometry)) {
119551                             _fieldsArr.push(
119552                                 uiField(context, field, entity, { show: false })
119553                             );
119554                         }
119555                     });
119556
119557                     _fieldsArr.forEach(function(field) {
119558                         field
119559                             .on('change', function(t, onInput) {
119560                                 dispatch$1.call('change', field, t, onInput);
119561                             });
119562                     });
119563                 }
119564
119565                 _fieldsArr.forEach(function(field) {
119566                     field
119567                         .state(_state)
119568                         .tags(_tags);
119569                 });
119570
119571
119572                 selection
119573                     .call(formFields
119574                         .fieldsArr(_fieldsArr)
119575                         .state(_state)
119576                         .klass('inspector-inner fillL3')
119577                     );
119578
119579
119580                 selection.selectAll('.wrap-form-field input')
119581                     .on('keydown', function() {
119582                         // if user presses enter, and combobox is not active, accept edits..
119583                         if (event.keyCode === 13 && d3_select('.combobox').empty()) {
119584                             context.enter(modeBrowse(context));
119585                         }
119586                     });
119587             }
119588
119589
119590             presetEditor.preset = function(val) {
119591                 if (!arguments.length) { return _preset; }
119592                 if (_preset && _preset.id === val.id) { return presetEditor; }
119593                 _preset = val;
119594                 _fieldsArr = null;
119595                 return presetEditor;
119596             };
119597
119598
119599             presetEditor.state = function(val) {
119600                 if (!arguments.length) { return _state; }
119601                 _state = val;
119602                 return presetEditor;
119603             };
119604
119605
119606             presetEditor.tags = function(val) {
119607                 if (!arguments.length) { return _tags; }
119608                 _tags = val;
119609                 // Don't reset _fieldsArr here.
119610                 return presetEditor;
119611             };
119612
119613
119614             presetEditor.entityID = function(val) {
119615                 if (!arguments.length) { return _entityID; }
119616                 if (_entityID === val) { return presetEditor; }
119617                 _entityID = val;
119618                 _fieldsArr = null;
119619                 return presetEditor;
119620             };
119621
119622
119623             return utilRebind(presetEditor, dispatch$1, 'on');
119624         }
119625
119626         function uiEntityIssues(context) {
119627             var _selection = d3_select(null);
119628             var _activeIssueID;
119629             var _entityID;
119630
119631             // Refresh on validated events
119632             context.validator()
119633                 .on('validated.entity_issues', function() {
119634                      _selection.selectAll('.disclosure-wrap-entity_issues')
119635                          .call(render);
119636
119637                     update();
119638                 })
119639                 .on('focusedIssue.entity_issues', function(issue) {
119640                      makeActiveIssue(issue.id);
119641                 });
119642
119643
119644             function entityIssues(selection) {
119645                 _selection = selection;
119646
119647                 selection
119648                     .call(uiDisclosure(context, 'entity_issues', true)
119649                         .content(render)
119650                     );
119651
119652                 update();
119653             }
119654
119655             function getIssues() {
119656                 return context.validator().getEntityIssues(_entityID, { includeDisabledRules: true });
119657             }
119658
119659             function makeActiveIssue(issueID) {
119660                 _activeIssueID = issueID;
119661                 _selection.selectAll('.issue-container')
119662                     .classed('active', function(d) { return d.id === _activeIssueID; });
119663             }
119664
119665             function update() {
119666
119667                 var issues = getIssues();
119668
119669                 _selection
119670                     .classed('hide', issues.length === 0);
119671
119672                 _selection.selectAll('.hide-toggle-entity_issues span')
119673                     .text(t('issues.list_title', { count: issues.length }));
119674             }
119675
119676
119677             function render(selection) {
119678                 var issues = getIssues();
119679                 _activeIssueID = issues.length > 0 ? issues[0].id : null;
119680
119681
119682                 var containers = selection.selectAll('.issue-container')
119683                     .data(issues, function(d) { return d.id; });
119684
119685                 // Exit
119686                 containers.exit()
119687                     .remove();
119688
119689                 // Enter
119690                 var containersEnter = containers.enter()
119691                     .append('div')
119692                     .attr('class', 'issue-container');
119693
119694
119695                 var itemsEnter = containersEnter
119696                     .append('div')
119697                     .attr('class', function(d) { return 'issue severity-' + d.severity; })
119698                     .on('mouseover.highlight', function(d) {
119699                         // don't hover-highlight the selected entity
119700                         var ids = d.entityIds
119701                             .filter(function(e) { return e !== _entityID; });
119702
119703                         utilHighlightEntities(ids, true, context);
119704                     })
119705                     .on('mouseout.highlight', function(d) {
119706                         var ids = d.entityIds
119707                             .filter(function(e) { return e !== _entityID; });
119708
119709                         utilHighlightEntities(ids, false, context);
119710                     });
119711
119712                 var labelsEnter = itemsEnter
119713                     .append('div')
119714                     .attr('class', 'issue-label')
119715                     .on('click', function(d) {
119716
119717                         makeActiveIssue(d.id); // expand only the clicked item
119718
119719                         var extent = d.extent(context.graph());
119720                         if (extent) {
119721                             var setZoom = Math.max(context.map().zoom(), 19);
119722                             context.map().unobscuredCenterZoomEase(extent.center(), setZoom);
119723                         }
119724                     });
119725
119726                 var textEnter = labelsEnter
119727                     .append('span')
119728                     .attr('class', 'issue-text');
119729
119730                 textEnter
119731                     .append('span')
119732                     .attr('class', 'issue-icon')
119733                     .each(function(d) {
119734                         var iconName = '#iD-icon-' + (d.severity === 'warning' ? 'alert' : 'error');
119735                         d3_select(this)
119736                             .call(svgIcon(iconName));
119737                     });
119738
119739                 textEnter
119740                     .append('span')
119741                     .attr('class', 'issue-message');
119742
119743
119744                 var infoButton = labelsEnter
119745                     .append('button')
119746                     .attr('class', 'issue-info-button')
119747                     .attr('title', t('icons.information'))
119748                     .attr('tabindex', -1)
119749                     .call(svgIcon('#iD-icon-inspect'));
119750
119751                 infoButton
119752                     .on('click', function () {
119753                         event.stopPropagation();
119754                         event.preventDefault();
119755                         this.blur();    // avoid keeping focus on the button - #4641
119756
119757                         var container = d3_select(this.parentNode.parentNode.parentNode);
119758                         var info = container.selectAll('.issue-info');
119759                         var isExpanded = info.classed('expanded');
119760
119761                         if (isExpanded) {
119762                             info
119763                                 .transition()
119764                                 .duration(200)
119765                                 .style('max-height', '0px')
119766                                 .style('opacity', '0')
119767                                 .on('end', function () {
119768                                     info.classed('expanded', false);
119769                                 });
119770                         } else {
119771                             info
119772                                 .classed('expanded', true)
119773                                 .transition()
119774                                 .duration(200)
119775                                 .style('max-height', '200px')
119776                                 .style('opacity', '1')
119777                                 .on('end', function () {
119778                                     info.style('max-height', null);
119779                                 });
119780                         }
119781                     });
119782
119783                 itemsEnter
119784                     .append('ul')
119785                     .attr('class', 'issue-fix-list');
119786
119787                 containersEnter
119788                     .append('div')
119789                     .attr('class', 'issue-info')
119790                     .style('max-height', '0')
119791                     .style('opacity', '0')
119792                     .each(function(d) {
119793                         if (typeof d.reference === 'function') {
119794                             d3_select(this)
119795                                 .call(d.reference);
119796                         } else {
119797                             d3_select(this)
119798                                 .text(t('inspector.no_documentation_key'));
119799                         }
119800                     });
119801
119802
119803                 // Update
119804                 containers = containers
119805                     .merge(containersEnter)
119806                     .classed('active', function(d) { return d.id === _activeIssueID; });
119807
119808                 containers.selectAll('.issue-message')
119809                     .text(function(d) {
119810                         return d.message(context);
119811                     });
119812
119813                 // fixes
119814                 var fixLists = containers.selectAll('.issue-fix-list');
119815
119816                 var fixes = fixLists.selectAll('.issue-fix-item')
119817                     .data(function(d) { return d.fixes ? d.fixes(context) : []; }, function(fix) { return fix.id; });
119818
119819                 fixes.exit()
119820                     .remove();
119821
119822                 var fixesEnter = fixes.enter()
119823                     .append('li')
119824                     .attr('class', 'issue-fix-item')
119825                     .on('click', function(d) {
119826                         // not all fixes are actionable
119827                         if (!d3_select(this).classed('actionable') || !d.onClick) { return; }
119828
119829                         // Don't run another fix for this issue within a second of running one
119830                         // (Necessary for "Select a feature type" fix. Most fixes should only ever run once)
119831                         if (d.issue.dateLastRanFix && new Date() - d.issue.dateLastRanFix < 1000) { return; }
119832                         d.issue.dateLastRanFix = new Date();
119833
119834                         // remove hover-highlighting
119835                         utilHighlightEntities(d.issue.entityIds.concat(d.entityIds), false, context);
119836
119837                         new Promise(function(resolve, reject) {
119838                             d.onClick(context, resolve, reject);
119839                             if (d.onClick.length <= 1) {
119840                                 // if the fix doesn't take any completion parameters then consider it resolved
119841                                 resolve();
119842                             }
119843                         })
119844                         .then(function() {
119845                             // revalidate whenever the fix has finished running successfully
119846                             context.validator().validate();
119847                         });
119848                     })
119849                     .on('mouseover.highlight', function(d) {
119850                         utilHighlightEntities(d.entityIds, true, context);
119851                     })
119852                     .on('mouseout.highlight', function(d) {
119853                         utilHighlightEntities(d.entityIds, false, context);
119854                     });
119855
119856                 fixesEnter
119857                     .append('span')
119858                     .attr('class', 'fix-icon')
119859                     .each(function(d) {
119860                         var iconName = d.icon || 'iD-icon-wrench';
119861                         if (iconName.startsWith('maki')) {
119862                             iconName += '-15';
119863                         }
119864                         d3_select(this).call(svgIcon('#' + iconName));
119865                     });
119866
119867                 fixesEnter
119868                     .append('span')
119869                     .attr('class', 'fix-message')
119870                     .text(function(d) { return d.title; });
119871
119872                 fixesEnter.merge(fixes)
119873                     .classed('actionable', function(d) {
119874                         return d.onClick;
119875                     })
119876                     .attr('title', function(d) {
119877                         if (d.disabledReason) {
119878                             return d.disabledReason;
119879                         }
119880                         return null;
119881                     });
119882             }
119883
119884
119885             entityIssues.entityID = function(val) {
119886                 if (!arguments.length) { return _entityID; }
119887                 if (_entityID !== val) {
119888                     _entityID = val;
119889                     _activeIssueID = null;
119890                 }
119891                 return entityIssues;
119892             };
119893
119894
119895             return entityIssues;
119896         }
119897
119898         function uiEntityEditor(context) {
119899             var dispatch$1 = dispatch('choose');
119900             var _state = 'select';
119901             var _coalesceChanges = false;
119902             var _modified = false;
119903             var _scrolled = false;
119904             var _base;
119905             var _entityID;
119906             var _activePreset;
119907             var _tagReference;
119908
119909             var entityIssues = uiEntityIssues(context);
119910             var quickLinks = uiQuickLinks();
119911             var presetEditor = uiPresetEditor(context).on('change', changeTags);
119912             var rawTagEditor = uiRawTagEditor(context).on('change', changeTags);
119913             var rawMemberEditor = uiRawMemberEditor(context);
119914             var rawMembershipEditor = uiRawMembershipEditor(context);
119915
119916             function entityEditor(selection) {
119917                 var entity = context.entity(_entityID);
119918                 var tags = Object.assign({}, entity.tags);  // shallow copy
119919
119920                 // Header
119921                 var header = selection.selectAll('.header')
119922                     .data([0]);
119923
119924                 // Enter
119925                 var headerEnter = header.enter()
119926                     .append('div')
119927                     .attr('class', 'header fillL cf');
119928
119929                 headerEnter
119930                     .append('button')
119931                     .attr('class', 'fl preset-reset preset-choose')
119932                     .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-forward' : '#iD-icon-backward'));
119933
119934                 headerEnter
119935                     .append('button')
119936                     .attr('class', 'fr preset-close')
119937                     .on('click', function() { context.enter(modeBrowse(context)); })
119938                     .call(svgIcon(_modified ? '#iD-icon-apply' : '#iD-icon-close'));
119939
119940                 headerEnter
119941                     .append('h3')
119942                     .text(t('inspector.edit'));
119943
119944                 // Update
119945                 header = header
119946                     .merge(headerEnter);
119947
119948                 header.selectAll('.preset-reset')
119949                     .on('click', function() {
119950                         dispatch$1.call('choose', this, _activePreset);
119951                     });
119952
119953
119954                 // Body
119955                 var body = selection.selectAll('.inspector-body')
119956                     .data([0]);
119957
119958                 // Enter
119959                 var bodyEnter = body.enter()
119960                     .append('div')
119961                     .attr('class', 'inspector-body')
119962                     .on('scroll.entity-editor', function() { _scrolled = true; });
119963
119964                 bodyEnter
119965                     .append('div')
119966                     .attr('class', 'preset-list-item inspector-inner')
119967                     .append('div')
119968                     .attr('class', 'preset-list-button-wrap')
119969                     .append('button')
119970                     .attr('class', 'preset-list-button preset-reset')
119971                     .call(tooltip().title(t('inspector.back_tooltip')).placement('bottom'))
119972                     .append('div')
119973                     .attr('class', 'label')
119974                     .append('div')
119975                     .attr('class', 'label-inner');
119976
119977                 bodyEnter
119978                     .append('div')
119979                     .attr('class', 'preset-quick-links');
119980
119981                 bodyEnter
119982                     .append('div')
119983                     .attr('class', 'entity-issues');
119984
119985                 bodyEnter
119986                     .append('div')
119987                     .attr('class', 'preset-editor');
119988
119989                 bodyEnter
119990                     .append('div')
119991                     .attr('class', 'raw-tag-editor inspector-inner');
119992
119993                 bodyEnter
119994                     .append('div')
119995                     .attr('class', 'raw-member-editor inspector-inner');
119996
119997                 bodyEnter
119998                     .append('div')
119999                     .attr('class', 'raw-membership-editor inspector-inner');
120000
120001                 bodyEnter
120002                     .append('input')
120003                     .attr('type', 'text')
120004                     .attr('class', 'key-trap');
120005
120006
120007                 // Update
120008                 body = body
120009                     .merge(bodyEnter);
120010
120011                 // update header
120012                 if (_tagReference) {
120013                     body.selectAll('.preset-list-button-wrap')
120014                         .call(_tagReference.button);
120015
120016                     body.selectAll('.preset-list-item')
120017                         .call(_tagReference.body);
120018                 }
120019
120020                 body.selectAll('.preset-reset')
120021                     .on('click', function() {
120022                         dispatch$1.call('choose', this, _activePreset);
120023                     });
120024
120025                 body.select('.preset-list-item button')
120026                     .call(uiPresetIcon(context)
120027                         .geometry(context.geometry(_entityID))
120028                         .preset(_activePreset)
120029                     );
120030
120031                 // NOTE: split on en-dash, not a hypen (to avoid conflict with hyphenated names)
120032                 var label = body.select('.label-inner');
120033                 var nameparts = label.selectAll('.namepart')
120034                     .data(_activePreset.name().split(' – '), function(d) { return d; });
120035
120036                 nameparts.exit()
120037                     .remove();
120038
120039                 nameparts
120040                     .enter()
120041                     .append('div')
120042                     .attr('class', 'namepart')
120043                     .text(function(d) { return d; });
120044
120045                 // update quick links
120046                 var choices = [{
120047                     id: 'zoom_to',
120048                     label: 'inspector.zoom_to.title',
120049                     tooltip: function() {
120050                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_feature'), t('inspector.zoom_to.key'));
120051                     },
120052                     click: function zoomTo() {
120053                         context.mode().zoomToSelected();
120054                     }
120055                 }];
120056
120057                 body.select('.preset-quick-links')
120058                     .call(quickLinks.choices(choices));
120059
120060
120061                 // update editor sections
120062                 body.select('.entity-issues')
120063                     .call(entityIssues
120064                         .entityID(_entityID)
120065                     );
120066
120067                 body.select('.preset-editor')
120068                     .call(presetEditor
120069                         .preset(_activePreset)
120070                         .entityID(_entityID)
120071                         .tags(tags)
120072                         .state(_state)
120073                     );
120074
120075                 body.select('.raw-tag-editor')
120076                     .call(rawTagEditor
120077                         .preset(_activePreset)
120078                         .entityID(_entityID)
120079                         .tags(tags)
120080                         .state(_state)
120081                     );
120082
120083                 if (entity.type === 'relation') {
120084                     body.select('.raw-member-editor')
120085                         .style('display', 'block')
120086                         .call(rawMemberEditor
120087                             .entityID(_entityID)
120088                         );
120089                 } else {
120090                     body.select('.raw-member-editor')
120091                         .style('display', 'none');
120092                 }
120093
120094                 body.select('.raw-membership-editor')
120095                     .call(rawMembershipEditor
120096                         .entityID(_entityID)
120097                     );
120098
120099                 body.select('.key-trap')
120100                     .on('keydown.key-trap', function() {
120101                         // On tabbing, send focus back to the first field on the inspector-body
120102                         // (probably the `name` field) #4159
120103                         if (event.keyCode === 9 && !event.shiftKey) {
120104                             event.preventDefault();
120105                             body.select('input').node().focus();
120106                         }
120107                     });
120108
120109                 context.history()
120110                     .on('change.entity-editor', historyChanged);
120111
120112
120113                 function historyChanged(difference) {
120114                     if (_state === 'hide') { return; }
120115                     var significant = !difference ||
120116                             difference.didChange.properties ||
120117                             difference.didChange.addition ||
120118                             difference.didChange.deletion;
120119                     if (!significant) { return; }
120120
120121                     var entity = context.hasEntity(_entityID);
120122                     var graph = context.graph();
120123                     if (!entity) { return; }
120124
120125                     var match = context.presets().match(entity, graph);
120126                     var activePreset = entityEditor.preset();
120127                     var weakPreset = activePreset &&
120128                         Object.keys(activePreset.addTags || {}).length === 0;
120129
120130                     // A "weak" preset doesn't set any tags. (e.g. "Address")
120131                     // Don't replace a weak preset with a fallback preset (e.g. "Point")
120132                     if (!(weakPreset && match.isFallback())) {
120133                         entityEditor.preset(match);
120134
120135                         if (match.id !== activePreset.id) {
120136                             // flash the button to indicate the preset changed
120137                             selection
120138                                 .selectAll('button.preset-reset .label')
120139                                 .style('background-color', '#fff')
120140                                 .transition()
120141                                 .duration(500)
120142                                 .style('background-color', null);
120143                         }
120144                     }
120145                     entityEditor.modified(_base !== graph);
120146                     entityEditor(selection);
120147                 }
120148             }
120149
120150
120151             // Tag changes that fire on input can all get coalesced into a single
120152             // history operation when the user leaves the field.  #2342
120153             function changeTags(changed, onInput) {
120154                 var entity = context.entity(_entityID);
120155                 var annotation = t('operations.change_tags.annotation');
120156                 var tags = Object.assign({}, entity.tags);   // shallow copy
120157
120158                 for (var k in changed) {
120159                     if (!k) { continue; }
120160                     var v = changed[k];
120161                     if (v !== undefined || tags.hasOwnProperty(k)) {
120162                         tags[k] = v;
120163                     }
120164                 }
120165
120166                 if (!onInput) {
120167                     tags = utilCleanTags(tags);
120168                 }
120169
120170                 if (!fastDeepEqual(entity.tags, tags)) {
120171                     if (_coalesceChanges) {
120172                         context.overwrite(actionChangeTags(_entityID, tags), annotation);
120173                     } else {
120174                         context.perform(actionChangeTags(_entityID, tags), annotation);
120175                         _coalesceChanges = !!onInput;
120176                     }
120177                 }
120178
120179                 // if leaving field (blur event), rerun validation
120180                 if (!onInput) {
120181                     context.validator().validate();
120182                 }
120183             }
120184
120185
120186             entityEditor.modified = function(val) {
120187                 if (!arguments.length) { return _modified; }
120188                 _modified = val;
120189                 d3_selectAll('button.preset-close use')
120190                     .attr('xlink:href', (_modified ? '#iD-icon-apply' : '#iD-icon-close'));
120191                 return entityEditor;
120192             };
120193
120194
120195             entityEditor.state = function(val) {
120196                 if (!arguments.length) { return _state; }
120197                 _state = val;
120198                 return entityEditor;
120199             };
120200
120201
120202             entityEditor.entityID = function(val) {
120203                 if (!arguments.length) { return _entityID; }
120204                 if (_entityID === val) { return entityEditor; }  // exit early if no change
120205
120206                 _entityID = val;
120207                 _base = context.graph();
120208                 _coalesceChanges = false;
120209
120210                 // reset the scroll to the top of the inspector (warning: triggers reflow)
120211                 if (_scrolled) {
120212                     window.requestIdleCallback(function() {
120213                         var body = d3_selectAll('.entity-editor-pane .inspector-body');
120214                         if (!body.empty()) {
120215                             _scrolled = false;
120216                             body.node().scrollTop = 0;
120217                         }
120218                     });
120219                 }
120220
120221                 var presetMatch = context.presets().match(context.entity(_entityID), _base);
120222
120223                 return entityEditor
120224                     .preset(presetMatch)
120225                     .modified(false);
120226             };
120227
120228
120229             entityEditor.preset = function(val) {
120230                 if (!arguments.length) { return _activePreset; }
120231                 if (val !== _activePreset) {
120232                     _activePreset = val;
120233                     _tagReference = uiTagReference(_activePreset.reference(context.geometry(_entityID)))
120234                         .showing(false);
120235                 }
120236                 return entityEditor;
120237             };
120238
120239
120240             return utilRebind(entityEditor, dispatch$1, 'on');
120241         }
120242
120243         function uiPresetList(context) {
120244             var dispatch$1 = dispatch('choose');
120245             var _entityID;
120246             var _currentPreset;
120247             var _autofocus = false;
120248
120249
120250             function presetList(selection) {
120251                 var entity = context.entity(_entityID);
120252                 var geometry = context.geometry(_entityID);
120253
120254                 // Treat entities on addr:interpolation lines as points, not vertices (#3241)
120255                 if (geometry === 'vertex' && entity.isOnAddressLine(context.graph())) {
120256                     geometry = 'point';
120257                 }
120258
120259                 var presets = context.presets().matchGeometry(geometry);
120260
120261                 selection.html('');
120262
120263                 var messagewrap = selection
120264                     .append('div')
120265                     .attr('class', 'header fillL');
120266
120267                 var message = messagewrap
120268                     .append('h3')
120269                     .text(t('inspector.choose'));
120270
120271                 messagewrap
120272                     .append('button')
120273                     .attr('class', 'preset-choose')
120274                     .on('click', function() { dispatch$1.call('choose', this, _currentPreset); })
120275                     .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'));
120276
120277                 function initialKeydown() {
120278                     // hack to let delete shortcut work when search is autofocused
120279                     if (search.property('value').length === 0 &&
120280                         (event.keyCode === utilKeybinding.keyCodes['⌫'] ||
120281                          event.keyCode === utilKeybinding.keyCodes['⌦'])) {
120282                         event.preventDefault();
120283                         event.stopPropagation();
120284                         operationDelete([_entityID], context)();
120285
120286                     // hack to let undo work when search is autofocused
120287                     } else if (search.property('value').length === 0 &&
120288                         (event.ctrlKey || event.metaKey) &&
120289                         event.keyCode === utilKeybinding.keyCodes.z) {
120290                         event.preventDefault();
120291                         event.stopPropagation();
120292                         context.undo();
120293                     } else if (!event.ctrlKey && !event.metaKey) {
120294                         // don't check for delete/undo hack on future keydown events
120295                         d3_select(this).on('keydown', keydown);
120296                         keydown.call(this);
120297                     }
120298                 }
120299
120300                 function keydown() {
120301                     // down arrow
120302                     if (event.keyCode === utilKeybinding.keyCodes['↓'] &&
120303                         // if insertion point is at the end of the string
120304                         search.node().selectionStart === search.property('value').length) {
120305                         event.preventDefault();
120306                         event.stopPropagation();
120307                         // move focus to the first item in the preset list
120308                         var buttons = list.selectAll('.preset-list-button');
120309                         if (!buttons.empty()) { buttons.nodes()[0].focus(); }
120310                     }
120311                 }
120312
120313                 function keypress() {
120314                     // enter
120315                     var value = search.property('value');
120316                     if (event.keyCode === 13 && value.length) {
120317                         list.selectAll('.preset-list-item:first-child')
120318                             .each(function(d) { d.choose.call(this); });
120319                     }
120320                 }
120321
120322                 function inputevent() {
120323                     var value = search.property('value');
120324                     list.classed('filtered', value.length);
120325                     var entity = context.entity(_entityID);
120326                     var results, messageText;
120327                     if (value.length && entity) {
120328                         var center = entity.extent(context.graph()).center();
120329                         var countryCode = iso1A2Code(center);
120330
120331                         results = presets.search(value, geometry, countryCode && countryCode.toLowerCase());
120332                         messageText = t('inspector.results', {
120333                             n: results.collection.length,
120334                             search: value
120335                         });
120336                     } else {
120337                         results = context.presets().defaults(geometry, 36);
120338                         messageText = t('inspector.choose');
120339                     }
120340                     list.call(drawList, results);
120341                     message.text(messageText);
120342                 }
120343
120344                 var searchWrap = selection
120345                     .append('div')
120346                     .attr('class', 'search-header');
120347
120348                 var search = searchWrap
120349                     .append('input')
120350                     .attr('class', 'preset-search-input')
120351                     .attr('placeholder', t('inspector.search'))
120352                     .attr('type', 'search')
120353                     .call(utilNoAuto)
120354                     .on('keydown', initialKeydown)
120355                     .on('keypress', keypress)
120356                     .on('input', inputevent);
120357
120358                 searchWrap
120359                     .call(svgIcon('#iD-icon-search', 'pre-text'));
120360
120361                 if (_autofocus) {
120362                     search.node().focus();
120363                 }
120364
120365                 var listWrap = selection
120366                     .append('div')
120367                     .attr('class', 'inspector-body');
120368
120369                 var list = listWrap
120370                     .append('div')
120371                     .attr('class', 'preset-list fillL cf')
120372                     .call(drawList, context.presets().defaults(geometry, 36));
120373
120374                 context.features().on('change.preset-list', updateForFeatureHiddenState);
120375             }
120376
120377
120378             function drawList(list, presets) {
120379                 var collection = presets.collection.reduce(function(collection, preset) {
120380                     if (preset.members) {
120381                         if (preset.members.collection.filter(function(preset) {
120382                             return preset.addable();
120383                         }).length > 1) {
120384                             collection.push(CategoryItem(preset));
120385                         }
120386                     } else if (preset.addable()) {
120387                         collection.push(PresetItem(preset));
120388                     }
120389                     return collection;
120390                 }, []);
120391
120392                 var items = list.selectAll('.preset-list-item')
120393                     .data(collection, function(d) { return d.preset.id; });
120394
120395                 items.order();
120396
120397                 items.exit()
120398                     .remove();
120399
120400                 items.enter()
120401                     .append('div')
120402                     .attr('class', function(item) { return 'preset-list-item preset-' + item.preset.id.replace('/', '-'); })
120403                     .classed('current', function(item) { return item.preset === _currentPreset; })
120404                     .each(function(item) { d3_select(this).call(item); })
120405                     .style('opacity', 0)
120406                     .transition()
120407                     .style('opacity', 1);
120408
120409                 updateForFeatureHiddenState();
120410             }
120411
120412             function itemKeydown(){
120413                 // the actively focused item
120414                 var item = d3_select(this.closest('.preset-list-item'));
120415                 var parentItem = d3_select(item.node().parentNode.closest('.preset-list-item'));
120416
120417                 // arrow down, move focus to the next, lower item
120418                 if (event.keyCode === utilKeybinding.keyCodes['↓']) {
120419                     event.preventDefault();
120420                     event.stopPropagation();
120421                     // the next item in the list at the same level
120422                     var nextItem = d3_select(item.node().nextElementSibling);
120423                     // if there is no next item in this list
120424                     if (nextItem.empty()) {
120425                         // if there is a parent item
120426                         if (!parentItem.empty()) {
120427                             // the item is the last item of a sublist,
120428                             // select the next item at the parent level
120429                             nextItem = d3_select(parentItem.node().nextElementSibling);
120430                         }
120431                     // if the focused item is expanded
120432                     } else if (d3_select(this).classed('expanded')) {
120433                         // select the first subitem instead
120434                         nextItem = item.select('.subgrid .preset-list-item:first-child');
120435                     }
120436                     if (!nextItem.empty()) {
120437                         // focus on the next item
120438                         nextItem.select('.preset-list-button').node().focus();
120439                     }
120440
120441                 // arrow up, move focus to the previous, higher item
120442                 } else if (event.keyCode === utilKeybinding.keyCodes['↑']) {
120443                     event.preventDefault();
120444                     event.stopPropagation();
120445                     // the previous item in the list at the same level
120446                     var previousItem = d3_select(item.node().previousElementSibling);
120447
120448                     // if there is no previous item in this list
120449                     if (previousItem.empty()) {
120450                         // if there is a parent item
120451                         if (!parentItem.empty()) {
120452                             // the item is the first subitem of a sublist select the parent item
120453                             previousItem = parentItem;
120454                         }
120455                     // if the previous item is expanded
120456                     } else if (previousItem.select('.preset-list-button').classed('expanded')) {
120457                         // select the last subitem of the sublist of the previous item
120458                         previousItem = previousItem.select('.subgrid .preset-list-item:last-child');
120459                     }
120460
120461                     if (!previousItem.empty()) {
120462                         // focus on the previous item
120463                         previousItem.select('.preset-list-button').node().focus();
120464                     } else {
120465                         // the focus is at the top of the list, move focus back to the search field
120466                         var search = d3_select(this.closest('.preset-list-pane')).select('.preset-search-input');
120467                         search.node().focus();
120468                     }
120469
120470                 // arrow left, move focus to the parent item if there is one
120471                 } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '→' : '←']) {
120472                     event.preventDefault();
120473                     event.stopPropagation();
120474                     // if there is a parent item, focus on the parent item
120475                     if (!parentItem.empty()) {
120476                         parentItem.select('.preset-list-button').node().focus();
120477                     }
120478
120479                 // arrow right, choose this item
120480                 } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '←' : '→']) {
120481                     event.preventDefault();
120482                     event.stopPropagation();
120483                     item.datum().choose.call(d3_select(this).node());
120484                 }
120485             }
120486
120487
120488             function CategoryItem(preset) {
120489                 var box, sublist, shown = false;
120490
120491                 function item(selection) {
120492                     var wrap = selection.append('div')
120493                         .attr('class', 'preset-list-button-wrap category');
120494
120495                     function click() {
120496                         var isExpanded = d3_select(this).classed('expanded');
120497                         var iconName = isExpanded ?
120498                             (textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward') : '#iD-icon-down';
120499                         d3_select(this)
120500                             .classed('expanded', !isExpanded);
120501                         d3_select(this).selectAll('div.label-inner svg.icon use')
120502                             .attr('href', iconName);
120503                         item.choose();
120504                     }
120505
120506                     var button = wrap
120507                         .append('button')
120508                         .attr('class', 'preset-list-button')
120509                         .classed('expanded', false)
120510                         .call(uiPresetIcon(context)
120511                             .geometry(context.geometry(_entityID))
120512                             .preset(preset))
120513                         .on('click', click)
120514                         .on('keydown', function() {
120515                             // right arrow, expand the focused item
120516                             if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '←' : '→']) {
120517                                 event.preventDefault();
120518                                 event.stopPropagation();
120519                                 // if the item isn't expanded
120520                                 if (!d3_select(this).classed('expanded')) {
120521                                     // toggle expansion (expand the item)
120522                                     click.call(this);
120523                                 }
120524                             // left arrow, collapse the focused item
120525                             } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '→' : '←']) {
120526                                 event.preventDefault();
120527                                 event.stopPropagation();
120528                                 // if the item is expanded
120529                                 if (d3_select(this).classed('expanded')) {
120530                                     // toggle expansion (collapse the item)
120531                                     click.call(this);
120532                                 }
120533                             } else {
120534                                 itemKeydown.call(this);
120535                             }
120536                         });
120537
120538                     var label = button
120539                         .append('div')
120540                         .attr('class', 'label')
120541                         .append('div')
120542                         .attr('class', 'label-inner');
120543
120544                     label
120545                         .append('div')
120546                         .attr('class', 'namepart')
120547                         .call(svgIcon((textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'))
120548                         .append('span')
120549                         .html(function() { return preset.name() + '&hellip;'; });
120550
120551                     box = selection.append('div')
120552                         .attr('class', 'subgrid')
120553                         .style('max-height', '0px')
120554                         .style('opacity', 0);
120555
120556                     box.append('div')
120557                         .attr('class', 'arrow');
120558
120559                     sublist = box.append('div')
120560                         .attr('class', 'preset-list fillL3');
120561                 }
120562
120563
120564                 item.choose = function() {
120565                     if (!box || !sublist) { return; }
120566
120567                     if (shown) {
120568                         shown = false;
120569                         box.transition()
120570                             .duration(200)
120571                             .style('opacity', '0')
120572                             .style('max-height', '0px')
120573                             .style('padding-bottom', '0px');
120574                     } else {
120575                         shown = true;
120576                         var members = preset.members.matchGeometry(context.geometry(_entityID));
120577                         sublist.call(drawList, members);
120578                         box.transition()
120579                             .duration(200)
120580                             .style('opacity', '1')
120581                             .style('max-height', 200 + members.collection.length * 190 + 'px')
120582                             .style('padding-bottom', '10px');
120583                     }
120584                 };
120585
120586                 item.preset = preset;
120587                 return item;
120588             }
120589
120590
120591             function PresetItem(preset) {
120592                 function item(selection) {
120593                     var wrap = selection.append('div')
120594                         .attr('class', 'preset-list-button-wrap');
120595
120596                     var button = wrap.append('button')
120597                         .attr('class', 'preset-list-button')
120598                         .call(uiPresetIcon(context)
120599                             .geometry(context.geometry(_entityID))
120600                             .preset(preset))
120601                         .on('click', item.choose)
120602                         .on('keydown', itemKeydown);
120603
120604                     var label = button
120605                         .append('div')
120606                         .attr('class', 'label')
120607                         .append('div')
120608                         .attr('class', 'label-inner');
120609
120610                     // NOTE: split/join on en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
120611                     label.selectAll('.namepart')
120612                         .data(preset.name().split(' – '))
120613                         .enter()
120614                         .append('div')
120615                         .attr('class', 'namepart')
120616                         .text(function(d) { return d; });
120617
120618                     wrap.call(item.reference.button);
120619                     selection.call(item.reference.body);
120620                 }
120621
120622                 item.choose = function() {
120623                     if (d3_select(this).classed('disabled')) { return; }
120624
120625                     context.presets().setMostRecent(preset, context.geometry(_entityID));
120626                     context.perform(
120627                         actionChangePreset(_entityID, _currentPreset, preset),
120628                         t('operations.change_tags.annotation')
120629                     );
120630
120631                     context.validator().validate();  // rerun validation
120632                     dispatch$1.call('choose', this, preset);
120633                 };
120634
120635                 item.help = function() {
120636                     event.stopPropagation();
120637                     item.reference.toggle();
120638                 };
120639
120640                 item.preset = preset;
120641                 item.reference = uiTagReference(preset.reference(context.geometry(_entityID)));
120642
120643                 return item;
120644             }
120645
120646
120647             function updateForFeatureHiddenState() {
120648                 if (!context.hasEntity(_entityID)) { return; }
120649
120650                 var geometry = context.geometry(_entityID);
120651                 var button = d3_selectAll('.preset-list .preset-list-button');
120652
120653                 // remove existing tooltips
120654                 button.call(tooltip().destroyAny);
120655
120656                 button.each(function(item, index) {
120657                     var hiddenPresetFeaturesId = context.features().isHiddenPreset(item.preset, geometry);
120658                     var isHiddenPreset = !context.inIntro() &&
120659                         !!hiddenPresetFeaturesId &&
120660                         item.preset !== _currentPreset;
120661
120662                     d3_select(this)
120663                         .classed('disabled', isHiddenPreset);
120664
120665                     if (isHiddenPreset) {
120666                         var isAutoHidden = context.features().autoHidden(hiddenPresetFeaturesId);
120667                         var tooltipIdSuffix = isAutoHidden ? 'zoom' : 'manual';
120668                         var tooltipObj = { features: t('feature.' + hiddenPresetFeaturesId + '.description') };
120669                         d3_select(this).call(tooltip()
120670                             .title(t('inspector.hidden_preset.' + tooltipIdSuffix, tooltipObj))
120671                             .placement(index < 2 ? 'bottom' : 'top')
120672                         );
120673                     }
120674                 });
120675             }
120676
120677             presetList.autofocus = function(val) {
120678                 if (!arguments.length) { return _autofocus; }
120679                 _autofocus = val;
120680                 return presetList;
120681             };
120682
120683
120684             presetList.entityID = function(val) {
120685                 if (!arguments.length) { return _entityID; }
120686                 _entityID = val;
120687                 presetList.preset(context.presets().match(context.entity(_entityID), context.graph()));
120688                 return presetList;
120689             };
120690
120691
120692             presetList.preset = function(val) {
120693                 if (!arguments.length) { return _currentPreset; }
120694                 _currentPreset = val;
120695                 return presetList;
120696             };
120697
120698
120699             return utilRebind(presetList, dispatch$1, 'on');
120700         }
120701
120702         function uiInspector(context) {
120703             var presetList = uiPresetList(context);
120704             var entityEditor = uiEntityEditor(context);
120705             var wrap = d3_select(null),
120706                 presetPane = d3_select(null),
120707                 editorPane = d3_select(null);
120708             var _state = 'select';
120709             var _entityID;
120710             var _newFeature = false;
120711
120712
120713             function inspector(selection, newFeature) {
120714                 presetList
120715                     .entityID(_entityID)
120716                     .autofocus(_newFeature)
120717                     .on('choose', inspector.setPreset);
120718
120719                 entityEditor
120720                     .state(_state)
120721                     .entityID(_entityID)
120722                     .on('choose', inspector.showList);
120723
120724                 wrap = selection.selectAll('.panewrap')
120725                     .data([0]);
120726
120727                 var enter = wrap.enter()
120728                     .append('div')
120729                     .attr('class', 'panewrap');
120730
120731                 enter
120732                     .append('div')
120733                     .attr('class', 'preset-list-pane pane');
120734
120735                 enter
120736                     .append('div')
120737                     .attr('class', 'entity-editor-pane pane');
120738
120739                 wrap = wrap.merge(enter);
120740                 presetPane = wrap.selectAll('.preset-list-pane');
120741                 editorPane = wrap.selectAll('.entity-editor-pane');
120742
120743                 var entity = context.entity(_entityID);
120744
120745                 var hasNonGeometryTags = entity.hasNonGeometryTags();
120746                 var isTaglessOrIntersectionVertex = entity.geometry(context.graph()) === 'vertex' &&
120747                     (!hasNonGeometryTags && !entity.isHighwayIntersection(context.graph()));
120748                 var issues = context.validator().getEntityIssues(_entityID);
120749                 // start with the preset list if the feature is new and untagged or is an uninteresting vertex
120750                 var showPresetList = (newFeature && !hasNonGeometryTags) || (isTaglessOrIntersectionVertex && !issues.length);
120751
120752                 if (showPresetList) {
120753                     wrap.style('right', '-100%');
120754                     presetPane.call(presetList);
120755                 } else {
120756                     wrap.style('right', '0%');
120757                     editorPane.call(entityEditor);
120758                 }
120759
120760                 var footer = selection.selectAll('.footer')
120761                     .data([0]);
120762
120763                 footer = footer.enter()
120764                     .append('div')
120765                     .attr('class', 'footer')
120766                     .merge(footer);
120767
120768                 footer
120769                     .call(uiViewOnOSM(context)
120770                         .what(context.hasEntity(_entityID))
120771                     );
120772             }
120773
120774             inspector.showList = function(preset) {
120775                 wrap.transition()
120776                     .styleTween('right', function() { return d3_interpolate('0%', '-100%'); });
120777
120778                 presetPane
120779                     .call(presetList.preset(preset).autofocus(true));
120780             };
120781
120782             inspector.setPreset = function(preset) {
120783
120784                 // upon setting multipolygon, go to the area preset list instead of the editor
120785                 if (preset.id === 'type/multipolygon') {
120786                     presetPane
120787                         .call(presetList.preset(preset).autofocus(true));
120788
120789                 } else {
120790                     wrap.transition()
120791                         .styleTween('right', function() { return d3_interpolate('-100%', '0%'); });
120792
120793                     editorPane
120794                         .call(entityEditor.preset(preset));
120795                 }
120796
120797             };
120798
120799             inspector.state = function(val) {
120800                 if (!arguments.length) { return _state; }
120801                 _state = val;
120802                 entityEditor.state(_state);
120803
120804                 // remove any old field help overlay that might have gotten attached to the inspector
120805                 d3_selectAll('.field-help-body').remove();
120806
120807                 return inspector;
120808             };
120809
120810
120811             inspector.entityID = function(val) {
120812                 if (!arguments.length) { return _entityID; }
120813                 _entityID = val;
120814                 return inspector;
120815             };
120816
120817
120818             inspector.newFeature = function(val) {
120819                 if (!arguments.length) { return _newFeature; }
120820                 _newFeature = val;
120821                 return inspector;
120822             };
120823
120824
120825             return inspector;
120826         }
120827
120828         function uiSidebar(context) {
120829             var inspector = uiInspector(context);
120830             var dataEditor = uiDataEditor(context);
120831             var noteEditor = uiNoteEditor(context);
120832             var improveOsmEditor = uiImproveOsmEditor(context);
120833             var keepRightEditor = uiKeepRightEditor(context);
120834             var _current;
120835             var _wasData = false;
120836             var _wasNote = false;
120837             var _wasQAError = false;
120838
120839
120840             function sidebar(selection) {
120841                 var container = d3_select('#id-container');
120842                 var minWidth = 280;
120843                 var sidebarWidth;
120844                 var containerWidth;
120845                 var dragOffset;
120846
120847                 var resizer = selection
120848                     .append('div')
120849                     .attr('id', 'sidebar-resizer');
120850
120851                 // Set the initial width constraints
120852                 selection
120853                     .style('min-width', minWidth + 'px')
120854                     .style('max-width', '400px')
120855                     .style('width', '33.3333%');
120856
120857                 resizer.call(d3_drag()
120858                     .container(container.node())
120859                     .on('start', function() {
120860                         // offset from edge of sidebar-resizer
120861                         dragOffset = event.sourceEvent.offsetX - 1;
120862
120863                         sidebarWidth = selection.node().getBoundingClientRect().width;
120864                         containerWidth = container.node().getBoundingClientRect().width;
120865                         var widthPct = (sidebarWidth / containerWidth) * 100;
120866                         selection
120867                             .style('width', widthPct + '%')    // lock in current width
120868                             .style('max-width', '85%');        // but allow larger widths
120869
120870                         resizer.classed('dragging', true);
120871                     })
120872                     .on('drag', function() {
120873                         var isRTL = (textDirection === 'rtl');
120874                         var scaleX = isRTL ? 0 : 1;
120875                         var xMarginProperty = isRTL ? 'margin-right' : 'margin-left';
120876
120877                         var x = event.x - dragOffset;
120878                         sidebarWidth = isRTL ? containerWidth - x : x;
120879
120880                         var isCollapsed = selection.classed('collapsed');
120881                         var shouldCollapse = sidebarWidth < minWidth;
120882
120883                         selection.classed('collapsed', shouldCollapse);
120884
120885                         if (shouldCollapse) {
120886                             if (!isCollapsed) {
120887                                 selection
120888                                     .style(xMarginProperty, '-400px')
120889                                     .style('width', '400px');
120890
120891                                 context.ui().onResize([(sidebarWidth - event.dx) * scaleX, 0]);
120892                             }
120893
120894                         } else {
120895                             var widthPct = (sidebarWidth / containerWidth) * 100;
120896                             selection
120897                                 .style(xMarginProperty, null)
120898                                 .style('width', widthPct + '%');
120899
120900                             if (isCollapsed) {
120901                                 context.ui().onResize([-sidebarWidth * scaleX, 0]);
120902                             } else {
120903                                 context.ui().onResize([-event.dx * scaleX, 0]);
120904                             }
120905                         }
120906                     })
120907                     .on('end', function() {
120908                         resizer.classed('dragging', false);
120909                     })
120910                 );
120911
120912                 var featureListWrap = selection
120913                     .append('div')
120914                     .attr('class', 'feature-list-pane')
120915                     .call(uiFeatureList(context));
120916
120917                 var inspectorWrap = selection
120918                     .append('div')
120919                     .attr('class', 'inspector-hidden inspector-wrap fr');
120920
120921
120922                 function hover(datum) {
120923                     if (datum && datum.__featurehash__) {   // hovering on data
120924                         _wasData = true;
120925                         sidebar
120926                             .show(dataEditor.datum(datum));
120927
120928                         selection.selectAll('.sidebar-component')
120929                             .classed('inspector-hover', true);
120930
120931                     } else if (datum instanceof osmNote) {
120932                         if (context.mode().id === 'drag-note') { return; }
120933                         _wasNote = true;
120934
120935                         var osm = services$1.osm;
120936                         if (osm) {
120937                             datum = osm.getNote(datum.id);   // marker may contain stale data - get latest
120938                         }
120939
120940                         sidebar
120941                             .show(noteEditor.note(datum));
120942
120943                         selection.selectAll('.sidebar-component')
120944                             .classed('inspector-hover', true);
120945
120946                     } else if (datum instanceof qaError) {
120947                         _wasQAError = true;
120948
120949                         var errService = services$1[datum.service];
120950                         if (errService) {
120951                             // marker may contain stale data - get latest
120952                             datum = errService.getError(datum.id);
120953                         }
120954
120955                         // Temporary solution while only two services
120956                         var errEditor = (datum.service === 'keepRight') ? keepRightEditor : improveOsmEditor;
120957
120958                         d3_selectAll('.qa_error.' + datum.service)
120959                             .classed('hover', function(d) { return d.id === datum.id; });
120960
120961                         sidebar
120962                             .show(errEditor.error(datum));
120963
120964                         selection.selectAll('.sidebar-component')
120965                             .classed('inspector-hover', true);
120966
120967                     } else if (!_current && (datum instanceof osmEntity)) {
120968                         featureListWrap
120969                             .classed('inspector-hidden', true);
120970
120971                         inspectorWrap
120972                             .classed('inspector-hidden', false)
120973                             .classed('inspector-hover', true);
120974
120975                         if (inspector.entityID() !== datum.id || inspector.state() !== 'hover') {
120976                             inspector
120977                                 .state('hover')
120978                                 .entityID(datum.id);
120979
120980                             inspectorWrap
120981                                 .call(inspector);
120982                         }
120983
120984                     } else if (!_current) {
120985                         featureListWrap
120986                             .classed('inspector-hidden', false);
120987                         inspectorWrap
120988                             .classed('inspector-hidden', true);
120989                         inspector
120990                             .state('hide');
120991
120992                     } else if (_wasData || _wasNote || _wasQAError) {
120993                         _wasNote = false;
120994                         _wasData = false;
120995                         _wasQAError = false;
120996                         d3_selectAll('.note').classed('hover', false);
120997                         d3_selectAll('.qa_error').classed('hover', false);
120998                         sidebar.hide();
120999                     }
121000                 }
121001
121002                 sidebar.hover = throttle(hover, 200);
121003
121004
121005                 sidebar.intersects = function(extent) {
121006                     var rect = selection.node().getBoundingClientRect();
121007                     return extent.intersects([
121008                         context.projection.invert([0, rect.height]),
121009                         context.projection.invert([rect.width, 0])
121010                     ]);
121011                 };
121012
121013
121014                 sidebar.select = function(id, newFeature) {
121015                     sidebar.hide();
121016
121017                     if (id) {
121018                         var entity = context.entity(id);
121019                         // uncollapse the sidebar
121020                         if (selection.classed('collapsed')) {
121021                             if (newFeature) {
121022                                 var extent = entity.extent(context.graph());
121023                                 sidebar.expand(sidebar.intersects(extent));
121024                             }
121025                         }
121026
121027                         featureListWrap
121028                             .classed('inspector-hidden', true);
121029
121030                         inspectorWrap
121031                             .classed('inspector-hidden', false)
121032                             .classed('inspector-hover', false);
121033
121034                         if (inspector.entityID() !== id || inspector.state() !== 'select') {
121035                             inspector
121036                                 .state('select')
121037                                 .entityID(id)
121038                                 .newFeature(newFeature);
121039
121040                             inspectorWrap
121041                                 .call(inspector, newFeature);
121042                         }
121043
121044                         sidebar.showPresetList = function() {
121045                             inspector.showList(context.presets().match(entity, context.graph()));
121046                         };
121047
121048                     } else {
121049                         inspector
121050                             .state('hide');
121051                     }
121052                 };
121053
121054
121055                 sidebar.show = function(component, element) {
121056                     featureListWrap
121057                         .classed('inspector-hidden', true);
121058                     inspectorWrap
121059                         .classed('inspector-hidden', true);
121060
121061                     if (_current) { _current.remove(); }
121062                     _current = selection
121063                         .append('div')
121064                         .attr('class', 'sidebar-component')
121065                         .call(component, element);
121066                 };
121067
121068
121069                 sidebar.hide = function() {
121070                     featureListWrap
121071                         .classed('inspector-hidden', false);
121072                     inspectorWrap
121073                         .classed('inspector-hidden', true);
121074
121075                     if (_current) { _current.remove(); }
121076                     _current = null;
121077                 };
121078
121079
121080                 sidebar.expand = function(moveMap) {
121081                     if (selection.classed('collapsed')) {
121082                         sidebar.toggle(moveMap);
121083                     }
121084                 };
121085
121086
121087                 sidebar.collapse = function(moveMap) {
121088                     if (!selection.classed('collapsed')) {
121089                         sidebar.toggle(moveMap);
121090                     }
121091                 };
121092
121093
121094                 sidebar.toggle = function(moveMap) {
121095                     var e = event;
121096                     if (e && e.sourceEvent) {
121097                         e.sourceEvent.preventDefault();
121098                     } else if (e) {
121099                         e.preventDefault();
121100                     }
121101
121102                     // Don't allow sidebar to toggle when the user is in the walkthrough.
121103                     if (context.inIntro()) { return; }
121104
121105                     var isCollapsed = selection.classed('collapsed');
121106                     var isCollapsing = !isCollapsed;
121107                     var isRTL = (textDirection === 'rtl');
121108                     var scaleX = isRTL ? 0 : 1;
121109                     var xMarginProperty = isRTL ? 'margin-right' : 'margin-left';
121110
121111                     sidebarWidth = selection.node().getBoundingClientRect().width;
121112
121113                     // switch from % to px
121114                     selection.style('width', sidebarWidth + 'px');
121115
121116                     var startMargin, endMargin, lastMargin;
121117                     if (isCollapsing) {
121118                         startMargin = lastMargin = 0;
121119                         endMargin = -sidebarWidth;
121120                     } else {
121121                         startMargin = lastMargin = -sidebarWidth;
121122                         endMargin = 0;
121123                     }
121124
121125                     selection.transition()
121126                         .style(xMarginProperty, endMargin + 'px')
121127                         .tween('panner', function() {
121128                             var i = d3_interpolateNumber(startMargin, endMargin);
121129                             return function(t) {
121130                                 var dx = lastMargin - Math.round(i(t));
121131                                 lastMargin = lastMargin - dx;
121132                                 context.ui().onResize(moveMap ? undefined : [dx * scaleX, 0]);
121133                             };
121134                         })
121135                         .on('end', function() {
121136                             selection.classed('collapsed', isCollapsing);
121137
121138                             // switch back from px to %
121139                             if (!isCollapsing) {
121140                                 var containerWidth = container.node().getBoundingClientRect().width;
121141                                 var widthPct = (sidebarWidth / containerWidth) * 100;
121142                                 selection
121143                                     .style(xMarginProperty, null)
121144                                     .style('width', widthPct + '%');
121145                             }
121146                         });
121147                 };
121148
121149                 // toggle the sidebar collapse when double-clicking the resizer
121150                 resizer.on('dblclick', sidebar.toggle);
121151             }
121152
121153             sidebar.showPresetList = function() {};
121154             sidebar.hover = function() {};
121155             sidebar.hover.cancel = function() {};
121156             sidebar.intersects = function() {};
121157             sidebar.select = function() {};
121158             sidebar.show = function() {};
121159             sidebar.hide = function() {};
121160             sidebar.expand = function() {};
121161             sidebar.collapse = function() {};
121162             sidebar.toggle = function() {};
121163
121164             return sidebar;
121165         }
121166
121167         function uiSpinner(context) {
121168             var osm = context.connection();
121169
121170
121171             return function(selection) {
121172                 var img = selection
121173                     .append('img')
121174                     .attr('src', context.imagePath('loader-black.gif'))
121175                     .style('opacity', 0);
121176
121177                 if (osm) {
121178                     osm
121179                         .on('loading.spinner', function() {
121180                             img.transition()
121181                                 .style('opacity', 1);
121182                         })
121183                         .on('loaded.spinner', function() {
121184                             img.transition()
121185                                 .style('opacity', 0);
121186                         });
121187                 }
121188             };
121189         }
121190
121191         function uiSplash(context) {
121192           return function (selection) {
121193             // Exception - if there are restorable changes, skip this splash screen.
121194             // This is because we currently only support one `uiModal` at a time
121195             //  and we need to show them `uiRestore`` instead of this one.
121196             if (context.history().hasRestorableChanges()) { return; }
121197
121198             // If user has not seen this version of the privacy policy, show the splash again.
121199             var updateMessage = '';
121200             var sawPrivacyVersion = context.storage('sawPrivacyVersion');
121201             if (sawPrivacyVersion !== context.privacyVersion) {
121202               updateMessage = t('splash.privacy_update');
121203               context.storage('sawSplash', null);
121204             }
121205
121206             if (context.storage('sawSplash')) { return; }
121207
121208             context.storage('sawSplash', true);
121209             context.storage('sawPrivacyVersion', context.privacyVersion);
121210
121211             var modalSelection = uiModal(selection);
121212
121213             modalSelection.select('.modal')
121214               .attr('class', 'modal-splash modal');
121215
121216             var introModal = modalSelection.select('.content')
121217               .append('div')
121218               .attr('class', 'fillL');
121219
121220             introModal
121221               .append('div')
121222               .attr('class','modal-section')
121223               .append('h3')
121224               .text(t('splash.welcome'));
121225
121226             var modalSection = introModal
121227               .append('div')
121228               .attr('class','modal-section');
121229
121230             modalSection
121231               .append('p')
121232               .html(t('splash.text', {
121233                 version: context.version,
121234                 website: '<a target="_blank" href="http://ideditor.blog/">ideditor.blog</a>',
121235                 github: '<a target="_blank" href="https://github.com/openstreetmap/iD">github.com</a>'
121236               }));
121237
121238             modalSection
121239               .append('p')
121240               .html(t('splash.privacy', {
121241                 updateMessage: updateMessage,
121242                 privacyLink: '<a target="_blank" href="https://github.com/openstreetmap/iD/blob/master/PRIVACY.md">' +
121243                   t('splash.privacy_policy') + '</a>'
121244               }));
121245
121246             var buttonWrap = introModal
121247               .append('div')
121248               .attr('class', 'modal-actions');
121249
121250             var walkthrough = buttonWrap
121251               .append('button')
121252               .attr('class', 'walkthrough')
121253               .on('click', function () {
121254                 context.container().call(uiIntro(context));
121255                 modalSelection.close();
121256               });
121257
121258             walkthrough
121259               .append('svg')
121260               .attr('class', 'logo logo-walkthrough')
121261               .append('use')
121262               .attr('xlink:href', '#iD-logo-walkthrough');
121263
121264             walkthrough
121265               .append('div')
121266               .text(t('splash.walkthrough'));
121267
121268             var startEditing = buttonWrap
121269               .append('button')
121270               .attr('class', 'start-editing')
121271               .on('click', modalSelection.close);
121272
121273             startEditing
121274               .append('svg')
121275               .attr('class', 'logo logo-features')
121276               .append('use')
121277               .attr('xlink:href', '#iD-logo-features');
121278
121279             startEditing
121280               .append('div')
121281               .text(t('splash.start'));
121282
121283             modalSelection.select('button.close')
121284               .attr('class','hide');
121285           };
121286         }
121287
121288         function uiStatus(context) {
121289             var osm = context.connection();
121290
121291
121292             return function(selection) {
121293                 if (!osm) { return; }
121294
121295                 function update(err, apiStatus) {
121296                     selection.html('');
121297
121298                     if (err) {
121299                         if (apiStatus === 'connectionSwitched') {
121300                             // if the connection was just switched, we can't rely on
121301                             // the status (we're getting the status of the previous api)
121302                             return;
121303
121304                         } else if (apiStatus === 'rateLimited') {
121305                             selection
121306                                 .text(t('osm_api_status.message.rateLimit'))
121307                                 .append('a')
121308                                 .attr('class', 'api-status-login')
121309                                 .attr('target', '_blank')
121310                                 .call(svgIcon('#iD-icon-out-link', 'inline'))
121311                                 .append('span')
121312                                 .text(t('login'))
121313                                 .on('click.login', function() {
121314                                     event.preventDefault();
121315                                     osm.authenticate();
121316                                 });
121317                         } else {
121318
121319                             // don't allow retrying too rapidly
121320                             var throttledRetry = throttle(function() {
121321                                 // try loading the visible tiles
121322                                 context.loadTiles(context.projection);
121323                                 // manually reload the status too in case all visible tiles were already loaded
121324                                 osm.reloadApiStatus();
121325                             }, 2000);
121326
121327                             // eslint-disable-next-line no-warning-comments
121328                             // TODO: nice messages for different error types
121329                             selection
121330                                 .text(t('osm_api_status.message.error') + ' ')
121331                                 .append('a')
121332                                 // let the user manually retry their connection directly
121333                                 .text(t('osm_api_status.retry'))
121334                                 .on('click.retry', function() {
121335                                     event.preventDefault();
121336                                     throttledRetry();
121337                                 });
121338                         }
121339
121340                     } else if (apiStatus === 'readonly') {
121341                         selection.text(t('osm_api_status.message.readonly'));
121342                     } else if (apiStatus === 'offline') {
121343                         selection.text(t('osm_api_status.message.offline'));
121344                     }
121345
121346                     selection.attr('class', 'api-status ' + (err ? 'error' : apiStatus));
121347                 }
121348
121349                 osm.on('apiStatusChange.uiStatus', update);
121350
121351                 // reload the status periodically regardless of other factors
121352                 window.setInterval(function() {
121353                     osm.reloadApiStatus();
121354                 }, 90000);
121355
121356                 // load the initial status in case no OSM data was loaded yet
121357                 osm.reloadApiStatus();
121358             };
121359         }
121360
121361         function modeDrawArea(context, wayID, startGraph, baselineGraph, button) {
121362             var mode = {
121363                 button: button,
121364                 id: 'draw-area'
121365             };
121366
121367             var behavior;
121368
121369             mode.wayID = wayID;
121370
121371             mode.enter = function() {
121372                 var way = context.entity(wayID);
121373
121374                 behavior = behaviorDrawWay(context, wayID, undefined, mode, startGraph, baselineGraph)
121375                     .tail(t('modes.draw_area.tail'));
121376
121377                 var addNode = behavior.addNode;
121378
121379                 behavior.addNode = function(node, d) {
121380                     var length = way.nodes.length;
121381                     var penultimate = length > 2 ? way.nodes[length - 2] : null;
121382
121383                     if (node.id === way.first() || node.id === penultimate) {
121384                         behavior.finish();
121385                     } else {
121386                         addNode(node, d);
121387                     }
121388                 };
121389
121390                 context.install(behavior);
121391             };
121392
121393
121394             mode.exit = function() {
121395                 context.uninstall(behavior);
121396             };
121397
121398
121399             mode.selectedIDs = function() {
121400                 return [wayID];
121401             };
121402
121403
121404             mode.activeID = function() {
121405                 return (behavior && behavior.activeID()) || [];
121406             };
121407
121408
121409             return mode;
121410         }
121411
121412         function modeAddArea(context, mode) {
121413             mode.id = 'add-area';
121414
121415             var behavior = behaviorAddWay(context)
121416                 .tail(t('modes.add_area.tail'))
121417                 .on('start', start)
121418                 .on('startFromWay', startFromWay)
121419                 .on('startFromNode', startFromNode);
121420
121421             var defaultTags = { area: 'yes' };
121422             if (mode.preset) { defaultTags = mode.preset.setTags(defaultTags, 'area'); }
121423
121424
121425             function actionClose(wayId) {
121426                 return function (graph) {
121427                     return graph.replace(graph.entity(wayId).close());
121428                 };
121429             }
121430
121431
121432             function start(loc) {
121433                 var startGraph = context.graph();
121434                 var node = osmNode({ loc: loc });
121435                 var way = osmWay({ tags: defaultTags });
121436
121437                 context.perform(
121438                     actionAddEntity(node),
121439                     actionAddEntity(way),
121440                     actionAddVertex(way.id, node.id),
121441                     actionClose(way.id)
121442                 );
121443
121444                 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
121445             }
121446
121447
121448             function startFromWay(loc, edge) {
121449                 var startGraph = context.graph();
121450                 var node = osmNode({ loc: loc });
121451                 var way = osmWay({ tags: defaultTags });
121452
121453                 context.perform(
121454                     actionAddEntity(node),
121455                     actionAddEntity(way),
121456                     actionAddVertex(way.id, node.id),
121457                     actionClose(way.id),
121458                     actionAddMidpoint({ loc: loc, edge: edge }, node)
121459                 );
121460
121461                 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
121462             }
121463
121464
121465             function startFromNode(node) {
121466                 var startGraph = context.graph();
121467                 var way = osmWay({ tags: defaultTags });
121468
121469                 context.perform(
121470                     actionAddEntity(way),
121471                     actionAddVertex(way.id, node.id),
121472                     actionClose(way.id)
121473                 );
121474
121475                 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
121476             }
121477
121478
121479             mode.enter = function() {
121480                 context.install(behavior);
121481             };
121482
121483
121484             mode.exit = function() {
121485                 context.uninstall(behavior);
121486             };
121487
121488
121489             return mode;
121490         }
121491
121492         function modeAddLine(context, mode) {
121493             mode.id = 'add-line';
121494
121495             var behavior = behaviorAddWay(context)
121496                 .tail(t('modes.add_line.tail'))
121497                 .on('start', start)
121498                 .on('startFromWay', startFromWay)
121499                 .on('startFromNode', startFromNode);
121500
121501             var defaultTags = {};
121502             if (mode.preset) { defaultTags = mode.preset.setTags(defaultTags, 'line'); }
121503
121504
121505             function start(loc) {
121506                 var startGraph = context.graph();
121507                 var node = osmNode({ loc: loc });
121508                 var way = osmWay({ tags: defaultTags });
121509
121510                 context.perform(
121511                     actionAddEntity(node),
121512                     actionAddEntity(way),
121513                     actionAddVertex(way.id, node.id)
121514                 );
121515
121516                 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
121517             }
121518
121519
121520             function startFromWay(loc, edge) {
121521                 var startGraph = context.graph();
121522                 var node = osmNode({ loc: loc });
121523                 var way = osmWay({ tags: defaultTags });
121524
121525                 context.perform(
121526                     actionAddEntity(node),
121527                     actionAddEntity(way),
121528                     actionAddVertex(way.id, node.id),
121529                     actionAddMidpoint({ loc: loc, edge: edge }, node)
121530                 );
121531
121532                 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
121533             }
121534
121535
121536             function startFromNode(node) {
121537                 var startGraph = context.graph();
121538                 var way = osmWay({ tags: defaultTags });
121539
121540                 context.perform(
121541                     actionAddEntity(way),
121542                     actionAddVertex(way.id, node.id)
121543                 );
121544
121545                 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
121546             }
121547
121548
121549             mode.enter = function() {
121550                 context.install(behavior);
121551             };
121552
121553
121554             mode.exit = function() {
121555                 context.uninstall(behavior);
121556             };
121557
121558             return mode;
121559         }
121560
121561         function modeAddPoint(context, mode) {
121562
121563             mode.id = 'add-point';
121564
121565             var behavior = behaviorDraw(context)
121566                 .tail(t('modes.add_point.tail'))
121567                 .on('click', add)
121568                 .on('clickWay', addWay)
121569                 .on('clickNode', addNode)
121570                 .on('cancel', cancel)
121571                 .on('finish', cancel);
121572
121573             var defaultTags = {};
121574             if (mode.preset) { defaultTags = mode.preset.setTags(defaultTags, 'point'); }
121575
121576
121577             function add(loc) {
121578                 var node = osmNode({ loc: loc, tags: defaultTags });
121579
121580                 context.perform(
121581                     actionAddEntity(node),
121582                     t('operations.add.annotation.point')
121583                 );
121584
121585                 enterSelectMode(node);
121586             }
121587
121588
121589             function addWay(loc, edge) {
121590                 var node = osmNode({ tags: defaultTags });
121591
121592                 context.perform(
121593                     actionAddMidpoint({loc: loc, edge: edge}, node),
121594                     t('operations.add.annotation.vertex')
121595                 );
121596
121597                 enterSelectMode(node);
121598             }
121599
121600             function enterSelectMode(node) {
121601                 context.enter(
121602                     modeSelect(context, [node.id]).newFeature(true)
121603                 );
121604             }
121605
121606
121607             function addNode(node) {
121608                 if (Object.keys(defaultTags).length === 0) {
121609                     enterSelectMode(node);
121610                     return;
121611                 }
121612
121613                 var tags = Object.assign({}, node.tags);  // shallow copy
121614                 for (var key in defaultTags) {
121615                     tags[key] = defaultTags[key];
121616                 }
121617
121618                 context.perform(
121619                     actionChangeTags(node.id, tags),
121620                     t('operations.add.annotation.point')
121621                 );
121622
121623                 enterSelectMode(node);
121624             }
121625
121626
121627             function cancel() {
121628                 context.enter(modeBrowse(context));
121629             }
121630
121631
121632             mode.enter = function() {
121633                 context.install(behavior);
121634             };
121635
121636
121637             mode.exit = function() {
121638                 context.uninstall(behavior);
121639             };
121640
121641
121642             return mode;
121643         }
121644
121645         function modeAddNote(context) {
121646             var mode = {
121647                 id: 'add-note',
121648                 button: 'note',
121649                 title: t('modes.add_note.title'),
121650                 description: t('modes.add_note.description'),
121651                 key: t('modes.add_note.key')
121652             };
121653
121654             var behavior = behaviorDraw(context)
121655                 .tail(t('modes.add_note.tail'))
121656                 .on('click', add)
121657                 .on('cancel', cancel)
121658                 .on('finish', cancel);
121659
121660
121661             function add(loc) {
121662                 var osm = services$1.osm;
121663                 if (!osm) { return; }
121664
121665                 var note = osmNote({ loc: loc, status: 'open', comments: [] });
121666                 osm.replaceNote(note);
121667
121668                 // force a reraw (there is no history change that would otherwise do this)
121669                 context.pan([0,0]);
121670
121671                 context
121672                     .selectedNoteID(note.id)
121673                     .enter(modeSelectNote(context, note.id).newFeature(true));
121674             }
121675
121676
121677             function cancel() {
121678                 context.enter(modeBrowse(context));
121679             }
121680
121681
121682             mode.enter = function() {
121683                 context.install(behavior);
121684             };
121685
121686
121687             mode.exit = function() {
121688                 context.uninstall(behavior);
121689             };
121690
121691
121692             return mode;
121693         }
121694
121695         function uiConflicts(context) {
121696             var dispatch$1 = dispatch('cancel', 'save');
121697             var keybinding = utilKeybinding('conflicts');
121698             var _origChanges;
121699             var _conflictList;
121700
121701
121702             function keybindingOn() {
121703                 d3_select(document)
121704                     .call(keybinding.on('⎋', cancel, true));
121705             }
121706
121707             function keybindingOff() {
121708                 d3_select(document)
121709                     .call(keybinding.unbind);
121710             }
121711
121712             function tryAgain() {
121713                 keybindingOff();
121714                 dispatch$1.call('save');
121715             }
121716
121717             function cancel() {
121718                 keybindingOff();
121719                 dispatch$1.call('cancel');
121720             }
121721
121722
121723             function conflicts(selection) {
121724                 keybindingOn();
121725
121726                 var headerEnter = selection.selectAll('.header')
121727                     .data([0])
121728                     .enter()
121729                     .append('div')
121730                     .attr('class', 'header fillL');
121731
121732                 headerEnter
121733                     .append('button')
121734                     .attr('class', 'fr')
121735                     .on('click', cancel)
121736                     .call(svgIcon('#iD-icon-close'));
121737
121738                 headerEnter
121739                     .append('h3')
121740                     .text(t('save.conflict.header'));
121741
121742                 var bodyEnter = selection.selectAll('.body')
121743                     .data([0])
121744                     .enter()
121745                     .append('div')
121746                     .attr('class', 'body fillL');
121747
121748                 var conflictsHelpEnter = bodyEnter
121749                     .append('div')
121750                     .attr('class', 'conflicts-help')
121751                     .text(t('save.conflict.help'));
121752
121753
121754                 // Download changes link
121755                 var detected = utilDetect();
121756                 var changeset = new osmChangeset();
121757
121758                 delete changeset.id;  // Export without changeset_id
121759
121760                 var data = JXON.stringify(changeset.osmChangeJXON(_origChanges));
121761                 var blob = new Blob([data], { type: 'text/xml;charset=utf-8;' });
121762                 var fileName = 'changes.osc';
121763
121764                 var linkEnter = conflictsHelpEnter.selectAll('.download-changes')
121765                     .append('a')
121766                     .attr('class', 'download-changes');
121767
121768                 if (detected.download) {      // All except IE11 and Edge
121769                     linkEnter                 // download the data as a file
121770                         .attr('href', window.URL.createObjectURL(blob))
121771                         .attr('download', fileName);
121772
121773                 } else {                      // IE11 and Edge
121774                     linkEnter                 // open data uri in a new tab
121775                         .attr('target', '_blank')
121776                         .on('click.download', function() {
121777                             navigator.msSaveBlob(blob, fileName);
121778                         });
121779                 }
121780
121781                 linkEnter
121782                     .call(svgIcon('#iD-icon-load', 'inline'))
121783                     .append('span')
121784                     .text(t('save.conflict.download_changes'));
121785
121786
121787                 bodyEnter
121788                     .append('div')
121789                     .attr('class', 'conflict-container fillL3')
121790                     .call(showConflict, 0);
121791
121792                 bodyEnter
121793                     .append('div')
121794                     .attr('class', 'conflicts-done')
121795                     .attr('opacity', 0)
121796                     .style('display', 'none')
121797                     .text(t('save.conflict.done'));
121798
121799                 var buttonsEnter = bodyEnter
121800                     .append('div')
121801                     .attr('class','buttons col12 joined conflicts-buttons');
121802
121803                 buttonsEnter
121804                     .append('button')
121805                     .attr('disabled', _conflictList.length > 1)
121806                     .attr('class', 'action conflicts-button col6')
121807                     .text(t('save.title'))
121808                     .on('click.try_again', tryAgain);
121809
121810                 buttonsEnter
121811                     .append('button')
121812                     .attr('class', 'secondary-action conflicts-button col6')
121813                     .text(t('confirm.cancel'))
121814                     .on('click.cancel', cancel);
121815             }
121816
121817
121818             function showConflict(selection, index) {
121819                 index = utilWrap(index, _conflictList.length);
121820
121821                 var parent = d3_select(selection.node().parentNode);
121822
121823                 // enable save button if this is the last conflict being reviewed..
121824                 if (index === _conflictList.length - 1) {
121825                     window.setTimeout(function() {
121826                         parent.select('.conflicts-button')
121827                             .attr('disabled', null);
121828
121829                         parent.select('.conflicts-done')
121830                             .transition()
121831                             .attr('opacity', 1)
121832                             .style('display', 'block');
121833                     }, 250);
121834                 }
121835
121836                 var conflict = selection
121837                     .selectAll('.conflict')
121838                     .data([_conflictList[index]]);
121839
121840                 conflict.exit()
121841                     .remove();
121842
121843                 var conflictEnter = conflict.enter()
121844                     .append('div')
121845                     .attr('class', 'conflict');
121846
121847                 conflictEnter
121848                     .append('h4')
121849                     .attr('class', 'conflict-count')
121850                     .text(t('save.conflict.count', { num: index + 1, total: _conflictList.length }));
121851
121852                 conflictEnter
121853                     .append('a')
121854                     .attr('class', 'conflict-description')
121855                     .attr('href', '#')
121856                     .text(function(d) { return d.name; })
121857                     .on('click', function(d) {
121858                         event.preventDefault();
121859                         zoomToEntity(d.id);
121860                     });
121861
121862                 var details = conflictEnter
121863                     .append('div')
121864                     .attr('class', 'conflict-detail-container');
121865
121866                 details
121867                     .append('ul')
121868                     .attr('class', 'conflict-detail-list')
121869                     .selectAll('li')
121870                     .data(function(d) { return d.details || []; })
121871                     .enter()
121872                     .append('li')
121873                     .attr('class', 'conflict-detail-item')
121874                     .html(function(d) { return d; });
121875
121876                 details
121877                     .append('div')
121878                     .attr('class', 'conflict-choices')
121879                     .call(addChoices);
121880
121881                 details
121882                     .append('div')
121883                     .attr('class', 'conflict-nav-buttons joined cf')
121884                     .selectAll('button')
121885                     .data(['previous', 'next'])
121886                     .enter()
121887                     .append('button')
121888                     .text(function(d) { return t('save.conflict.' + d); })
121889                     .attr('class', 'conflict-nav-button action col6')
121890                     .attr('disabled', function(d, i) {
121891                         return (i === 0 && index === 0) ||
121892                             (i === 1 && index === _conflictList.length - 1) || null;
121893                     })
121894                     .on('click', function(d, i) {
121895                         event.preventDefault();
121896
121897                         var container = parent.selectAll('.conflict-container');
121898                         var sign = (i === 0 ? -1 : 1);
121899
121900                         container
121901                             .selectAll('.conflict')
121902                             .remove();
121903
121904                         container
121905                             .call(showConflict, index + sign);
121906                     });
121907
121908             }
121909
121910
121911             function addChoices(selection) {
121912                 var choices = selection
121913                     .append('ul')
121914                     .attr('class', 'layer-list')
121915                     .selectAll('li')
121916                     .data(function(d) { return d.choices || []; });
121917
121918                 // enter
121919                 var choicesEnter = choices.enter()
121920                     .append('li')
121921                     .attr('class', 'layer');
121922
121923                 var labelEnter = choicesEnter
121924                     .append('label');
121925
121926                 labelEnter
121927                     .append('input')
121928                     .attr('type', 'radio')
121929                     .attr('name', function(d) { return d.id; })
121930                     .on('change', function(d, i) {
121931                         var ul = this.parentNode.parentNode.parentNode;
121932                         ul.__data__.chosen = i;
121933                         choose(ul, d);
121934                     });
121935
121936                 labelEnter
121937                     .append('span')
121938                     .text(function(d) { return d.text; });
121939
121940                 // update
121941                 choicesEnter
121942                     .merge(choices)
121943                     .each(function(d, i) {
121944                         var ul = this.parentNode;
121945                         if (ul.__data__.chosen === i) {
121946                             choose(ul, d);
121947                         }
121948                     });
121949             }
121950
121951
121952             function choose(ul, datum) {
121953                 if (event) { event.preventDefault(); }
121954
121955                 d3_select(ul)
121956                     .selectAll('li')
121957                     .classed('active', function(d) { return d === datum; })
121958                     .selectAll('input')
121959                     .property('checked', function(d) { return d === datum; });
121960
121961                 var extent = geoExtent();
121962                 var entity;
121963
121964                 entity = context.graph().hasEntity(datum.id);
121965                 if (entity) { extent._extend(entity.extent(context.graph())); }
121966
121967                 datum.action();
121968
121969                 entity = context.graph().hasEntity(datum.id);
121970                 if (entity) { extent._extend(entity.extent(context.graph())); }
121971
121972                 zoomToEntity(datum.id, extent);
121973             }
121974
121975
121976             function zoomToEntity(id, extent) {
121977                 context.surface().selectAll('.hover')
121978                     .classed('hover', false);
121979
121980                 var entity = context.graph().hasEntity(id);
121981                 if (entity) {
121982                     if (extent) {
121983                         context.map().trimmedExtent(extent);
121984                     } else {
121985                         context.map().zoomToEase(entity);
121986                     }
121987                     context.surface().selectAll(utilEntityOrMemberSelector([entity.id], context.graph()))
121988                         .classed('hover', true);
121989                 }
121990             }
121991
121992
121993             // The conflict list should be an array of objects like:
121994             // {
121995             //     id: id,
121996             //     name: entityName(local),
121997             //     details: merge.conflicts(),
121998             //     chosen: 1,
121999             //     choices: [
122000             //         choice(id, keepMine, forceLocal),
122001             //         choice(id, keepTheirs, forceRemote)
122002             //     ]
122003             // }
122004             conflicts.conflictList = function(_) {
122005                 if (!arguments.length) { return _conflictList; }
122006                 _conflictList = _;
122007                 return conflicts;
122008             };
122009
122010
122011             conflicts.origChanges = function(_) {
122012                 if (!arguments.length) { return _origChanges; }
122013                 _origChanges = _;
122014                 return conflicts;
122015             };
122016
122017
122018             return utilRebind(conflicts, dispatch$1, 'on');
122019         }
122020
122021         function uiChangesetEditor(context) {
122022             var dispatch$1 = dispatch('change');
122023             var formFields = uiFormFields(context);
122024             var commentCombo = uiCombobox(context, 'comment').caseSensitive(true);
122025             var _fieldsArr;
122026             var _tags;
122027             var _changesetID;
122028
122029
122030             function changesetEditor(selection) {
122031                 render(selection);
122032             }
122033
122034
122035             function render(selection) {
122036                 var initial = false;
122037
122038                 if (!_fieldsArr) {
122039                     initial = true;
122040                     var presets = context.presets();
122041
122042                     _fieldsArr = [
122043                         uiField(context, presets.field('comment'), null, { show: true, revert: false }),
122044                         uiField(context, presets.field('source'), null, { show: false, revert: false }),
122045                         uiField(context, presets.field('hashtags'), null, { show: false, revert: false }) ];
122046
122047                     _fieldsArr.forEach(function(field) {
122048                         field
122049                             .on('change', function(t, onInput) {
122050                                 dispatch$1.call('change', field, t, onInput);
122051                             });
122052                     });
122053                 }
122054
122055                 _fieldsArr.forEach(function(field) {
122056                     field
122057                         .tags(_tags);
122058                 });
122059
122060
122061                 selection
122062                     .call(formFields.fieldsArr(_fieldsArr));
122063
122064
122065                 if (initial) {
122066                     var commentField = selection.select('#preset-input-comment');
122067                     var commentNode = commentField.node();
122068
122069                     if (commentNode) {
122070                         commentNode.focus();
122071                         commentNode.select();
122072                     }
122073
122074                     // trigger a 'blur' event so that comment field can be cleaned
122075                     // and checked for hashtags, even if retrieved from localstorage
122076                     utilTriggerEvent(commentField, 'blur');
122077
122078                     var osm = context.connection();
122079                     if (osm) {
122080                         osm.userChangesets(function (err, changesets) {
122081                             if (err) { return; }
122082
122083                             var comments = changesets.map(function(changeset) {
122084                                 var comment = changeset.tags.comment;
122085                                 return comment ? { title: comment, value: comment } : null;
122086                             }).filter(Boolean);
122087
122088                             commentField
122089                                 .call(commentCombo
122090                                     .data(utilArrayUniqBy(comments, 'title'))
122091                                 );
122092                         });
122093                     }
122094                 }
122095
122096                 // Add warning if comment mentions Google
122097                 var hasGoogle = _tags.comment.match(/google/i);
122098                 var commentWarning = selection.select('.form-field-comment').selectAll('.comment-warning')
122099                     .data(hasGoogle ? [0] : []);
122100
122101                 commentWarning.exit()
122102                     .transition()
122103                     .duration(200)
122104                     .style('opacity', 0)
122105                     .remove();
122106
122107                 var commentEnter = commentWarning.enter()
122108                     .insert('div', '.tag-reference-body')
122109                     .attr('class', 'field-warning comment-warning')
122110                     .style('opacity', 0);
122111
122112                 commentEnter
122113                     .append('a')
122114                     .attr('target', '_blank')
122115                     .attr('tabindex', -1)
122116                     .call(svgIcon('#iD-icon-alert', 'inline'))
122117                     .attr('href', t('commit.google_warning_link'))
122118                     .append('span')
122119                     .text(t('commit.google_warning'));
122120
122121                 commentEnter
122122                     .transition()
122123                     .duration(200)
122124                     .style('opacity', 1);
122125             }
122126
122127
122128             changesetEditor.tags = function(_) {
122129                 if (!arguments.length) { return _tags; }
122130                 _tags = _;
122131                 // Don't reset _fieldsArr here.
122132                 return changesetEditor;
122133             };
122134
122135
122136             changesetEditor.changesetID = function(_) {
122137                 if (!arguments.length) { return _changesetID; }
122138                 if (_changesetID === _) { return changesetEditor; }
122139                 _changesetID = _;
122140                 _fieldsArr = null;
122141                 return changesetEditor;
122142             };
122143
122144
122145             return utilRebind(changesetEditor, dispatch$1, 'on');
122146         }
122147
122148         function uiCommitChanges(context) {
122149             var detected = utilDetect();
122150             var _entityID;
122151
122152
122153             function commitChanges(selection) {
122154                 var history = context.history();
122155                 var summary = history.difference().summary();
122156
122157                 var container = selection.selectAll('.modal-section.commit-section')
122158                     .data([0]);
122159
122160                 var containerEnter = container.enter()
122161                     .append('div')
122162                     .attr('class', 'commit-section modal-section fillL2');
122163
122164                 containerEnter
122165                     .append('h3')
122166                     .text(t('commit.changes', { count: summary.length }));
122167
122168                 containerEnter
122169                     .append('ul')
122170                     .attr('class', 'changeset-list');
122171
122172                 container = containerEnter
122173                     .merge(container);
122174
122175
122176                 var items = container.select('ul').selectAll('li')
122177                     .data(summary);
122178
122179                 var itemsEnter = items.enter()
122180                     .append('li')
122181                     .attr('class', 'change-item');
122182
122183                 itemsEnter
122184                     .each(function(d) {
122185                         d3_select(this)
122186                             .call(svgIcon('#iD-icon-' + d.entity.geometry(d.graph), 'pre-text ' + d.changeType));
122187                     });
122188
122189                 itemsEnter
122190                     .append('span')
122191                     .attr('class', 'change-type')
122192                     .text(function(d) { return t('commit.' + d.changeType) + ' '; });
122193
122194                 itemsEnter
122195                     .append('strong')
122196                     .attr('class', 'entity-type')
122197                     .text(function(d) {
122198                         var matched = context.presets().match(d.entity, d.graph);
122199                         return (matched && matched.name()) || utilDisplayType(d.entity.id);
122200                     });
122201
122202                 itemsEnter
122203                     .append('span')
122204                     .attr('class', 'entity-name')
122205                     .text(function(d) {
122206                         var name = utilDisplayName(d.entity) || '',
122207                             string = '';
122208                         if (name !== '') {
122209                             string += ':';
122210                         }
122211                         return string += ' ' + name;
122212                     });
122213
122214                 itemsEnter
122215                     .style('opacity', 0)
122216                     .transition()
122217                     .style('opacity', 1);
122218
122219                 items = itemsEnter
122220                     .merge(items);
122221
122222                 items
122223                     .on('mouseover', mouseover)
122224                     .on('mouseout', mouseout)
122225                     .on('click', click);
122226
122227
122228                 // Download changeset link
122229                 var changeset = new osmChangeset().update({ id: undefined });
122230                 var changes = history.changes(actionDiscardTags(history.difference()));
122231
122232                 delete changeset.id;  // Export without chnageset_id
122233
122234                 var data = JXON.stringify(changeset.osmChangeJXON(changes));
122235                 var blob = new Blob([data], {type: 'text/xml;charset=utf-8;'});
122236                 var fileName = 'changes.osc';
122237
122238                 var linkEnter = container.selectAll('.download-changes')
122239                     .data([0])
122240                     .enter()
122241                     .append('a')
122242                     .attr('class', 'download-changes');
122243
122244                 if (detected.download) {      // All except IE11 and Edge
122245                     linkEnter                 // download the data as a file
122246                         .attr('href', window.URL.createObjectURL(blob))
122247                         .attr('download', fileName);
122248
122249                 } else {                      // IE11 and Edge
122250                     linkEnter                 // open data uri in a new tab
122251                         .attr('target', '_blank')
122252                         .on('click.download', function() {
122253                             navigator.msSaveBlob(blob, fileName);
122254                         });
122255                 }
122256
122257                 linkEnter
122258                     .call(svgIcon('#iD-icon-load', 'inline'))
122259                     .append('span')
122260                     .text(t('commit.download_changes'));
122261
122262
122263                 function mouseover(d) {
122264                     if (d.entity) {
122265                         context.surface().selectAll(
122266                             utilEntityOrMemberSelector([d.entity.id], context.graph())
122267                         ).classed('hover', true);
122268                     }
122269                 }
122270
122271
122272                 function mouseout() {
122273                     context.surface().selectAll('.hover')
122274                         .classed('hover', false);
122275                 }
122276
122277
122278                 function click(change) {
122279                     if (change.changeType === 'deleted') {
122280                         _entityID = null;
122281                     } else {
122282                         var entity = change.entity;
122283                         _entityID = change.entity.id;
122284                         context.map().zoomToEase(entity);
122285                         context.surface().selectAll(utilEntityOrMemberSelector([_entityID], context.graph()))
122286                             .classed('hover', true);
122287                     }
122288                 }
122289             }
122290
122291
122292             commitChanges.entityID = function(_) {
122293                 if (!arguments.length) { return _entityID; }
122294                 _entityID = _;
122295                 return commitChanges;
122296             };
122297
122298
122299             return commitChanges;
122300         }
122301
122302         function uiCommitWarnings(context) {
122303
122304             function commitWarnings(selection) {
122305                 var issuesBySeverity = context.validator()
122306                     .getIssuesBySeverity({ what: 'edited', where: 'all', includeDisabledRules: true });
122307
122308                 for (var severity in issuesBySeverity) {
122309                     var issues = issuesBySeverity[severity];
122310                     var section = severity + '-section';
122311                     var issueItem = severity + '-item';
122312
122313                     var container = selection.selectAll('.' + section)
122314                         .data(issues.length ? [0] : []);
122315
122316                     container.exit()
122317                         .remove();
122318
122319                     var containerEnter = container.enter()
122320                         .append('div')
122321                         .attr('class', 'modal-section ' + section + ' fillL2');
122322
122323                     containerEnter
122324                         .append('h3')
122325                         .text(severity === 'warning' ? t('commit.warnings') : t('commit.errors'));
122326
122327                     containerEnter
122328                         .append('ul')
122329                         .attr('class', 'changeset-list');
122330
122331                     container = containerEnter
122332                         .merge(container);
122333
122334
122335                     var items = container.select('ul').selectAll('li')
122336                         .data(issues, function(d) { return d.id; });
122337
122338                     items.exit()
122339                         .remove();
122340
122341                     var itemsEnter = items.enter()
122342                         .append('li')
122343                         .attr('class', issueItem);
122344
122345                     itemsEnter
122346                         .call(svgIcon('#iD-icon-alert', 'pre-text'));
122347
122348                     itemsEnter
122349                         .append('strong')
122350                         .attr('class', 'issue-message');
122351
122352                     itemsEnter.filter(function(d) { return d.tooltip; })
122353                         .call(tooltip()
122354                             .title(function(d) { return d.tooltip; })
122355                             .placement('top')
122356                         );
122357
122358                     items = itemsEnter
122359                         .merge(items);
122360
122361                     items.selectAll('.issue-message')
122362                         .text(function(d) {
122363                             return d.message(context);
122364                         });
122365
122366                     items
122367                         .on('mouseover', function(d) {
122368                             if (d.entityIds) {
122369                                 context.surface().selectAll(
122370                                     utilEntityOrMemberSelector(
122371                                         d.entityIds,
122372                                         context.graph()
122373                                     )
122374                                 ).classed('hover', true);
122375                             }
122376                         })
122377                         .on('mouseout', function() {
122378                             context.surface().selectAll('.hover')
122379                                 .classed('hover', false);
122380                         })
122381                         .on('click', function(d) {
122382                             context.validator().focusIssue(d);
122383                         });
122384                 }
122385             }
122386
122387
122388             return commitWarnings;
122389         }
122390
122391         var _changeset$1;
122392         var readOnlyTags = [
122393             /^changesets_count$/,
122394             /^created_by$/,
122395             /^ideditor:/,
122396             /^imagery_used$/,
122397             /^host$/,
122398             /^locale$/,
122399             /^warnings:/,
122400             /^resolved:/
122401         ];
122402
122403         // treat most punctuation (except -, _, +, &) as hashtag delimiters - #4398
122404         // from https://stackoverflow.com/a/25575009
122405         var hashtagRegex = /(#[^\u2000-\u206F\u2E00-\u2E7F\s\\'!"#$%()*,.\/:;<=>?@\[\]^`{|}~]+)/g;
122406
122407
122408         function uiCommit(context) {
122409             var dispatch$1 = dispatch('cancel', 'save');
122410             var _userDetails;
122411             var _selection;
122412
122413             var changesetEditor = uiChangesetEditor(context)
122414                 .on('change', changeTags);
122415             var rawTagEditor = uiRawTagEditor(context)
122416                 .on('change', changeTags);
122417             var commitChanges = uiCommitChanges(context);
122418             var commitWarnings = uiCommitWarnings(context);
122419
122420
122421             function commit(selection) {
122422                 _selection = selection;
122423
122424                 var osm = context.connection();
122425                 if (!osm) { return; }
122426
122427                 // expire stored comment, hashtags, source after cutoff datetime - #3947 #4899
122428                 var commentDate = +context.storage('commentDate') || 0;
122429                 var currDate = Date.now();
122430                 var cutoff = 2 * 86400 * 1000;   // 2 days
122431                 if (commentDate > currDate || currDate - commentDate > cutoff) {
122432                     context.storage('comment', null);
122433                     context.storage('hashtags', null);
122434                     context.storage('source', null);
122435                 }
122436
122437                 var tags;
122438                 // Initialize changeset if one does not exist yet.
122439                 // Also pull values from local storage.
122440                 if (!_changeset$1) {
122441
122442                     // load in the URL hash values, if any
122443                     var hash = context.ui().hash;
122444                     if (hash.comment) {
122445                         context.storage('comment', hash.comment);
122446                         context.storage('commentDate', Date.now());
122447                     }
122448                     if (hash.source) {
122449                         context.storage('source', hash.source);
122450                         context.storage('commentDate', Date.now());
122451                     }
122452                     if (hash.hashtags) {
122453                         context.storage('hashtags', hash.hashtags);
122454                     }
122455
122456                     var detected = utilDetect();
122457                     tags = {
122458                         comment: context.storage('comment') || '',
122459                         created_by: ('iD ' + context.version).substr(0, 255),
122460                         host: detected.host.substr(0, 255),
122461                         locale: detected.locale.substr(0, 255)
122462                     };
122463
122464                     // call findHashtags initially - this will remove stored
122465                     // hashtags if any hashtags are found in the comment - #4304
122466                     findHashtags(tags, true);
122467
122468                     var hashtags = context.storage('hashtags');
122469                     if (hashtags) {
122470                         tags.hashtags = hashtags;
122471                     }
122472
122473                     var source = context.storage('source');
122474                     if (source) {
122475                         tags.source = source;
122476                     }
122477                     var photoOverlaysUsed = context.history().photoOverlaysUsed();
122478                     if (photoOverlaysUsed.length) {
122479                         var sources = (tags.source || '').split(';');
122480
122481                         // include this tag for any photo layer
122482                         if (sources.indexOf('streetlevel imagery') === -1) {
122483                             sources.push('streetlevel imagery');
122484                         }
122485
122486                         // add the photo overlays used during editing as sources
122487                         photoOverlaysUsed.forEach(function(photoOverlay) {
122488                             if (sources.indexOf(photoOverlay) === -1) {
122489                                 sources.push(photoOverlay);
122490                             }
122491                         });
122492
122493                         tags.source = sources.join(';').substr(0, 255);
122494                     }
122495
122496                     _changeset$1 = new osmChangeset({ tags: tags });
122497                 }
122498
122499                 tags = Object.assign({}, _changeset$1.tags);   // shallow copy
122500
122501                 // assign tags for imagery used
122502                 var imageryUsed = context.history().imageryUsed().join(';').substr(0, 255);
122503                 tags.imagery_used = imageryUsed || 'None';
122504
122505                 // assign tags for closed issues and notes
122506                 var osmClosed = osm.getClosedIDs();
122507                 if (osmClosed.length) {
122508                     tags['closed:note'] = osmClosed.join(';').substr(0, 255);
122509                 }
122510                 if (services$1.keepRight) {
122511                     var krClosed = services$1.keepRight.getClosedIDs();
122512                     if (krClosed.length) {
122513                         tags['closed:keepright'] = krClosed.join(';').substr(0, 255);
122514                     }
122515                 }
122516                 if (services$1.improveOSM) {
122517                     var iOsmClosed = services$1.improveOSM.getClosedIDs();
122518                     if (iOsmClosed.length) {
122519                         tags['closed:improveosm'] = iOsmClosed.join(';').substr(0, 255);
122520                     }
122521                 }
122522
122523                 // remove existing issue counts
122524                 for (var key in tags) {
122525                     if (key.match(/(^warnings:)|(^resolved:)/)) {
122526                         delete tags[key];
122527                     }
122528                 }
122529
122530                 function addIssueCounts(issues, prefix) {
122531                     var issuesByType = utilArrayGroupBy(issues, 'type');
122532                     for (var issueType in issuesByType) {
122533                         var issuesOfType = issuesByType[issueType];
122534                         if (issuesOfType[0].subtype) {
122535                             var issuesBySubtype = utilArrayGroupBy(issuesOfType, 'subtype');
122536                             for (var issueSubtype in issuesBySubtype) {
122537                                 var issuesOfSubtype = issuesBySubtype[issueSubtype];
122538                                 tags[prefix + ':' + issueType + ':' + issueSubtype] = issuesOfSubtype.length.toString().substr(0, 255);
122539                             }
122540                         } else {
122541                             tags[prefix + ':' + issueType] = issuesOfType.length.toString().substr(0, 255);
122542                         }
122543                     }
122544                 }
122545
122546                 // add counts of warnings generated by the user's edits
122547                 var warnings = context.validator()
122548                     .getIssuesBySeverity({ what: 'edited', where: 'all', includeIgnored: true, includeDisabledRules: true }).warning;
122549                 addIssueCounts(warnings, 'warnings');
122550
122551                 // add counts of issues resolved by the user's edits
122552                 var resolvedIssues = context.validator().getResolvedIssues();
122553                 addIssueCounts(resolvedIssues, 'resolved');
122554
122555                 _changeset$1 = _changeset$1.update({ tags: tags });
122556
122557                 var header = selection.selectAll('.header')
122558                     .data([0]);
122559
122560                 var headerTitle = header.enter()
122561                     .append('div')
122562                     .attr('class', 'header fillL header-container');
122563
122564                 headerTitle
122565                     .append('div')
122566                     .attr('class', 'header-block header-block-outer');
122567
122568                 headerTitle
122569                     .append('div')
122570                     .attr('class', 'header-block')
122571                     .append('h3')
122572                     .text(t('commit.title'));
122573
122574                 headerTitle
122575                     .append('div')
122576                     .attr('class', 'header-block header-block-outer header-block-close')
122577                     .append('button')
122578                     .attr('class', 'close')
122579                     .on('click', function() { context.enter(modeBrowse(context)); })
122580                     .call(svgIcon('#iD-icon-close'));
122581
122582                 var body = selection.selectAll('.body')
122583                     .data([0]);
122584
122585                 body = body.enter()
122586                     .append('div')
122587                     .attr('class', 'body')
122588                     .merge(body);
122589
122590
122591                 // Changeset Section
122592                 var changesetSection = body.selectAll('.changeset-editor')
122593                     .data([0]);
122594
122595                 changesetSection = changesetSection.enter()
122596                     .append('div')
122597                     .attr('class', 'modal-section changeset-editor')
122598                     .merge(changesetSection);
122599
122600                 changesetSection
122601                     .call(changesetEditor
122602                         .changesetID(_changeset$1.id)
122603                         .tags(tags)
122604                     );
122605
122606
122607                 // Warnings
122608                 body.call(commitWarnings);
122609
122610
122611                 // Upload Explanation
122612                 var saveSection = body.selectAll('.save-section')
122613                     .data([0]);
122614
122615                 saveSection = saveSection.enter()
122616                     .append('div')
122617                     .attr('class','modal-section save-section fillL cf')
122618                     .merge(saveSection);
122619
122620                 var prose = saveSection.selectAll('.commit-info')
122621                     .data([0]);
122622
122623                 if (prose.enter().size()) {   // first time, make sure to update user details in prose
122624                     _userDetails = null;
122625                 }
122626
122627                 prose = prose.enter()
122628                     .append('p')
122629                     .attr('class', 'commit-info')
122630                     .text(t('commit.upload_explanation'))
122631                     .merge(prose);
122632
122633                 // always check if this has changed, but only update prose.html()
122634                 // if needed, because it can trigger a style recalculation
122635                 osm.userDetails(function(err, user) {
122636                     if (err) { return; }
122637
122638                     if (_userDetails === user) { return; }  // no change
122639                     _userDetails = user;
122640
122641                     var userLink = d3_select(document.createElement('div'));
122642
122643                     if (user.image_url) {
122644                         userLink
122645                             .append('img')
122646                             .attr('src', user.image_url)
122647                             .attr('class', 'icon pre-text user-icon');
122648                     }
122649
122650                     userLink
122651                         .append('a')
122652                         .attr('class', 'user-info')
122653                         .text(user.display_name)
122654                         .attr('href', osm.userURL(user.display_name))
122655                         .attr('target', '_blank');
122656
122657                     prose
122658                         .html(t('commit.upload_explanation_with_user', { user: userLink.html() }));
122659                 });
122660
122661
122662                 // Request Review
122663                 var requestReview = saveSection.selectAll('.request-review')
122664                     .data([0]);
122665
122666                 // Enter
122667                 var requestReviewEnter = requestReview.enter()
122668                     .append('div')
122669                     .attr('class', 'request-review');
122670
122671                 var labelEnter = requestReviewEnter
122672                     .append('label')
122673                     .attr('for', 'commit-input-request-review');
122674
122675                 labelEnter
122676                     .append('input')
122677                     .attr('type', 'checkbox')
122678                     .attr('id', 'commit-input-request-review');
122679
122680                 labelEnter
122681                     .append('span')
122682                     .text(t('commit.request_review'));
122683
122684                 // Update
122685                 requestReview = requestReview
122686                     .merge(requestReviewEnter);
122687
122688                 var requestReviewInput = requestReview.selectAll('input')
122689                     .property('checked', isReviewRequested(_changeset$1.tags))
122690                     .on('change', toggleRequestReview);
122691
122692
122693                 // Buttons
122694                 var buttonSection = saveSection.selectAll('.buttons')
122695                     .data([0]);
122696
122697                 // enter
122698                 var buttonEnter = buttonSection.enter()
122699                     .append('div')
122700                     .attr('class', 'buttons fillL cf');
122701
122702                 buttonEnter
122703                     .append('button')
122704                     .attr('class', 'secondary-action button cancel-button')
122705                     .append('span')
122706                     .attr('class', 'label')
122707                     .text(t('commit.cancel'));
122708
122709                 var uploadButton = buttonEnter
122710                     .append('button')
122711                     .attr('class', 'action button save-button');
122712
122713                 uploadButton.append('span')
122714                     .attr('class', 'label')
122715                     .text(t('commit.save'));
122716
122717                 var uploadBlockerTooltipText = getUploadBlockerMessage();
122718
122719                 // update
122720                 buttonSection = buttonSection
122721                     .merge(buttonEnter);
122722
122723                 buttonSection.selectAll('.cancel-button')
122724                     .on('click.cancel', function() {
122725                         var selectedID = commitChanges.entityID();
122726                         dispatch$1.call('cancel', this, selectedID);
122727                     });
122728
122729                 buttonSection.selectAll('.save-button')
122730                     .classed('disabled', uploadBlockerTooltipText !== null)
122731                     .on('click.save', function() {
122732                         if (!d3_select(this).classed('disabled')) {
122733                             this.blur();    // avoid keeping focus on the button - #4641
122734                             dispatch$1.call('save', this, _changeset$1);
122735                         }
122736                     });
122737
122738                 // remove any existing tooltip
122739                 tooltip().destroyAny(buttonSection.selectAll('.save-button'));
122740
122741                 if (uploadBlockerTooltipText) {
122742                     buttonSection.selectAll('.save-button')
122743                         .call(tooltip().title(uploadBlockerTooltipText).placement('top'));
122744                 }
122745
122746                 // Raw Tag Editor
122747                 var tagSection = body.selectAll('.tag-section.raw-tag-editor')
122748                     .data([0]);
122749
122750                 tagSection = tagSection.enter()
122751                     .append('div')
122752                     .attr('class', 'modal-section tag-section raw-tag-editor')
122753                     .merge(tagSection);
122754
122755                 var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty();
122756                 tagSection
122757                     .call(rawTagEditor
122758                         .expanded(expanded)
122759                         .readOnlyTags(readOnlyTags)
122760                         .tags(Object.assign({}, _changeset$1.tags))   // shallow copy
122761                     );
122762
122763
122764                 // Change summary
122765                 body.call(commitChanges);
122766
122767
122768                 function toggleRequestReview() {
122769                     var rr = requestReviewInput.property('checked');
122770                     updateChangeset({ review_requested: (rr ? 'yes' : undefined) });
122771
122772                     var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty();
122773                     tagSection
122774                         .call(rawTagEditor
122775                             .expanded(expanded)
122776                             .readOnlyTags(readOnlyTags)
122777                             .tags(Object.assign({}, _changeset$1.tags))   // shallow copy
122778                         );
122779                 }
122780             }
122781
122782
122783             function getUploadBlockerMessage() {
122784                 var errors = context.validator()
122785                     .getIssuesBySeverity({ what: 'edited', where: 'all' }).error;
122786
122787                 if (errors.length) {
122788                     return t('commit.outstanding_errors_message', { count: errors.length });
122789
122790                 } else {
122791                     var n = d3_select('#preset-input-comment').node();
122792                     var hasChangesetComment = n && n.value.length > 0;
122793                     if (!hasChangesetComment) {
122794                         return t('commit.comment_needed_message');
122795                     }
122796                 }
122797                 return null;
122798             }
122799
122800
122801             function changeTags(changed, onInput) {
122802                 if (changed.hasOwnProperty('comment')) {
122803                     if (changed.comment === undefined) {
122804                         changed.comment = '';
122805                     }
122806                     if (!onInput) {
122807                         context.storage('comment', changed.comment);
122808                         context.storage('commentDate', Date.now());
122809                     }
122810                 }
122811                 if (changed.hasOwnProperty('source')) {
122812                     if (changed.source === undefined) {
122813                         context.storage('source', null);
122814                     } else if (!onInput) {
122815                         context.storage('source', changed.source);
122816                         context.storage('commentDate', Date.now());
122817                     }
122818                 }
122819
122820                 updateChangeset(changed, onInput);
122821
122822                 if (_selection) {
122823                     _selection.call(commit);
122824                 }
122825             }
122826
122827
122828             function findHashtags(tags, commentOnly) {
122829                 var inComment = commentTags();
122830                 var inHashTags = hashTags();
122831
122832                 if (inComment !== null) {                    // when hashtags are detected in comment...
122833                     context.storage('hashtags', null);       // always remove stored hashtags - #4304
122834                     if (commentOnly) { inHashTags = []; }    // optionally override hashtags field
122835                 }
122836
122837                 // keep only one copy of the tags
122838                 var all = new Set();
122839                 var keepTags = [];
122840                 inComment.forEach(checkTag);
122841                 inHashTags.forEach(checkTag);
122842                 return keepTags;
122843
122844                 // Compare tags as lowercase strings, but keep original case tags
122845                 function checkTag(s) {
122846                     var compare = s.toLowerCase();
122847                     if (!all.has(compare)) {
122848                         all.add(compare);
122849                         keepTags.push(s);
122850                     }
122851                 }
122852
122853                 // Extract hashtags from `comment`
122854                 function commentTags() {
122855                     var matches = (tags.comment || '')
122856                         .replace(/http\S*/g, '')  // drop anything that looks like a URL - #4289
122857                         .match(hashtagRegex);
122858
122859                     return (matches || []);
122860                 }
122861
122862                 // Extract and clean hashtags from `hashtags`
122863                 function hashTags() {
122864                     var matches = (tags.hashtags || '')
122865                         .split(/[,;\s]+/)
122866                         .map(function (s) {
122867                             if (s[0] !== '#') { s = '#' + s; }    // prepend '#'
122868                             var matched = s.match(hashtagRegex);
122869                             return matched && matched[0];
122870                         }).filter(Boolean);                       // exclude falsy
122871
122872                     return (matches || []);
122873                 }
122874             }
122875
122876
122877             function isReviewRequested(tags) {
122878                 var rr = tags.review_requested;
122879                 if (rr === undefined) { return false; }
122880                 rr = rr.trim().toLowerCase();
122881                 return !(rr === '' || rr === 'no');
122882             }
122883
122884
122885             function updateChangeset(changed, onInput) {
122886                 var tags = Object.assign({}, _changeset$1.tags);   // shallow copy
122887
122888                 Object.keys(changed).forEach(function(k) {
122889                     var v = changed[k];
122890                     k = k.trim().substr(0, 255);
122891                     if (readOnlyTags.indexOf(k) !== -1) { return; }
122892
122893                     if (k !== '' && v !== undefined) {
122894                         if (onInput) {
122895                             tags[k] = v;
122896                         } else {
122897                             tags[k] = v.trim().substr(0, 255);
122898                         }
122899                     } else {
122900                         delete tags[k];
122901                     }
122902                 });
122903
122904                 if (!onInput) {
122905                     // when changing the comment, override hashtags with any found in comment.
122906                     var commentOnly = changed.hasOwnProperty('comment') && (changed.comment !== '');
122907                     var arr = findHashtags(tags, commentOnly);
122908                     if (arr.length) {
122909                         tags.hashtags = arr.join(';').substr(0, 255);
122910                         context.storage('hashtags', tags.hashtags);
122911                     } else {
122912                         delete tags.hashtags;
122913                         context.storage('hashtags', null);
122914                     }
122915                 }
122916
122917                 // always update userdetails, just in case user reauthenticates as someone else
122918                 if (_userDetails && _userDetails.changesets_count !== undefined) {
122919                     var changesetsCount = parseInt(_userDetails.changesets_count, 10) + 1;  // #4283
122920                     tags.changesets_count = String(changesetsCount);
122921
122922                     // first 100 edits - new user
122923                     if (changesetsCount <= 100) {
122924                         var s;
122925                         s = context.storage('walkthrough_completed');
122926                         if (s) {
122927                             tags['ideditor:walkthrough_completed'] = s;
122928                         }
122929
122930                         s = context.storage('walkthrough_progress');
122931                         if (s) {
122932                             tags['ideditor:walkthrough_progress'] = s;
122933                         }
122934
122935                         s = context.storage('walkthrough_started');
122936                         if (s) {
122937                             tags['ideditor:walkthrough_started'] = s;
122938                         }
122939                     }
122940                 } else {
122941                     delete tags.changesets_count;
122942                 }
122943
122944                 if (!fastDeepEqual(_changeset$1.tags, tags)) {
122945                     _changeset$1 = _changeset$1.update({ tags: tags });
122946                 }
122947             }
122948
122949
122950             commit.reset = function() {
122951                 _changeset$1 = null;
122952             };
122953
122954
122955             return utilRebind(commit, dispatch$1, 'on');
122956         }
122957
122958         function uiSuccess(context) {
122959           var arguments$1 = arguments;
122960
122961           var MAXEVENTS = 2;
122962           var detected = utilDetect();
122963           var dispatch$1 = dispatch('cancel');
122964           var _changeset;
122965           var _location;
122966
122967
122968           // string-to-date parsing in JavaScript is weird
122969           function parseEventDate(when) {
122970             if (!when) { return; }
122971
122972             var raw = when.trim();
122973             if (!raw) { return; }
122974
122975             if (!/Z$/.test(raw)) {   // if no trailing 'Z', add one
122976               raw += 'Z';            // this forces date to be parsed as a UTC date
122977             }
122978
122979             var parsed = new Date(raw);
122980             return new Date(parsed.toUTCString().substr(0, 25));  // convert to local timezone
122981           }
122982
122983
122984           function success(selection) {
122985             var header = selection
122986               .append('div')
122987               .attr('class', 'header fillL');
122988
122989             header
122990               .append('button')
122991               .attr('class', 'fr')
122992               .on('click', function () { return dispatch$1.call('cancel'); })
122993               .call(svgIcon('#iD-icon-close'));
122994
122995             header
122996               .append('h3')
122997               .text(t('success.just_edited'));
122998
122999             var body = selection
123000               .append('div')
123001               .attr('class', 'body save-success fillL');
123002
123003             var summary = body
123004               .append('div')
123005               .attr('class', 'save-summary');
123006
123007             summary
123008               .append('h3')
123009               .text(t('success.thank_you' + (_location ? '_location' : ''), { where: _location }));
123010
123011             summary
123012               .append('p')
123013               .text(t('success.help_html'))
123014               .append('a')
123015               .attr('class', 'link-out')
123016               .attr('target', '_blank')
123017               .attr('tabindex', -1)
123018               .attr('href', t('success.help_link_url'))
123019               .call(svgIcon('#iD-icon-out-link', 'inline'))
123020               .append('span')
123021               .text(t('success.help_link_text'));
123022
123023             var osm = context.connection();
123024             if (!osm) { return; }
123025
123026             var changesetURL = osm.changesetURL(_changeset.id);
123027
123028             var table = summary
123029               .append('table')
123030               .attr('class', 'summary-table');
123031
123032             var row = table
123033               .append('tr')
123034               .attr('class', 'summary-row');
123035
123036             row
123037               .append('td')
123038               .attr('class', 'cell-icon summary-icon')
123039               .append('a')
123040               .attr('target', '_blank')
123041               .attr('href', changesetURL)
123042               .append('svg')
123043               .attr('class', 'logo-small')
123044               .append('use')
123045               .attr('xlink:href', '#iD-logo-osm');
123046
123047             var summaryDetail = row
123048               .append('td')
123049               .attr('class', 'cell-detail summary-detail');
123050
123051             summaryDetail
123052               .append('a')
123053               .attr('class', 'cell-detail summary-view-on-osm')
123054               .attr('target', '_blank')
123055               .attr('href', changesetURL)
123056               .text(t('success.view_on_osm'));
123057
123058             summaryDetail
123059               .append('div')
123060               .html(t('success.changeset_id', {
123061                 changeset_id: ("<a href=\"" + changesetURL + "\" target=\"_blank\">" + (_changeset.id) + "</a>")
123062               }));
123063
123064
123065             // Get community index features intersecting the map..
123066             var communities = [];
123067             var properties = data.community.query(context.map().center(), true) || [];
123068
123069             // Gather the communities from the result
123070             properties.forEach(function (props) {
123071               var resourceIDs = Array.from(props.resourceIDs);
123072               resourceIDs.forEach(function (resourceID) {
123073                 var resource = data.community.resources[resourceID];
123074                 communities.push({
123075                   area: props.area || Infinity,
123076                   order: resource.order || 0,
123077                   resource: resource
123078                 });
123079               });
123080             });
123081
123082             // sort communities by feature area ascending, community order descending
123083             communities.sort(function (a, b) { return a.area - b.area || b.order - a.order; });
123084
123085             body
123086               .call(showCommunityLinks, communities.map(function (c) { return c.resource; }));
123087           }
123088
123089
123090           function showCommunityLinks(selection, resources) {
123091             var communityLinks = selection
123092               .append('div')
123093               .attr('class', 'save-communityLinks');
123094
123095             communityLinks
123096               .append('h3')
123097               .text(t('success.like_osm'));
123098
123099             var table = communityLinks
123100               .append('table')
123101               .attr('class', 'community-table');
123102
123103             var row = table.selectAll('.community-row')
123104               .data(resources);
123105
123106             var rowEnter = row.enter()
123107               .append('tr')
123108               .attr('class', 'community-row');
123109
123110             rowEnter
123111               .append('td')
123112               .attr('class', 'cell-icon community-icon')
123113               .append('a')
123114               .attr('target', '_blank')
123115               .attr('href', function (d) { return d.url; })
123116               .append('svg')
123117               .attr('class', 'logo-small')
123118               .append('use')
123119               .attr('xlink:href', function (d) { return ("#community-" + (d.type)); });
123120
123121             var communityDetail = rowEnter
123122               .append('td')
123123               .attr('class', 'cell-detail community-detail');
123124
123125             communityDetail
123126               .each(showCommunityDetails);
123127
123128             communityLinks
123129               .append('div')
123130               .attr('class', 'community-missing')
123131               .text(t('success.missing'))
123132               .append('a')
123133               .attr('class', 'link-out')
123134               .attr('target', '_blank')
123135               .attr('tabindex', -1)
123136               .call(svgIcon('#iD-icon-out-link', 'inline'))
123137               .attr('href', 'https://github.com/osmlab/osm-community-index/issues')
123138               .append('span')
123139               .text(t('success.tell_us'));
123140           }
123141
123142
123143           function showCommunityDetails(d) {
123144             var selection = d3_select(this);
123145             var communityID = d.id;
123146             var replacements = {
123147               url: linkify(d.url),
123148               signupUrl: linkify(d.signupUrl || d.url)
123149             };
123150
123151             selection
123152               .append('div')
123153               .attr('class', 'community-name')
123154               .append('a')
123155               .attr('target', '_blank')
123156               .attr('href', d.url)
123157               .text(t(("community." + (d.id) + ".name")));
123158
123159             var descriptionHTML = t(("community." + (d.id) + ".description"), replacements);
123160
123161             if (d.type === 'reddit') {   // linkify subreddits  #4997
123162               descriptionHTML = descriptionHTML
123163                 .replace(/(\/r\/\w*\/*)/i, function (match) { return linkify(d.url, match); });
123164             }
123165
123166             selection
123167               .append('div')
123168               .attr('class', 'community-description')
123169               .html(descriptionHTML);
123170
123171             if (d.extendedDescription || (d.languageCodes && d.languageCodes.length)) {
123172               selection
123173                 .append('div')
123174                 .call(uiDisclosure(context, ("community-more-" + (d.id)), false)
123175                   .expanded(false)
123176                   .updatePreference(false)
123177                   .title(t('success.more'))
123178                   .content(showMore)
123179                 );
123180             }
123181
123182             var nextEvents = (d.events || [])
123183               .map(function (event) {
123184                 event.date = parseEventDate(event.when);
123185                 return event;
123186               })
123187               .filter(function (event) {      // date is valid and future (or today)
123188                 var t = event.date.getTime();
123189                 var now = (new Date()).setHours(0,0,0,0);
123190                 return !isNaN(t) && t >= now;
123191               })
123192               .sort(function (a, b) {       // sort by date ascending
123193                 return a.date < b.date ? -1 : a.date > b.date ? 1 : 0;
123194               })
123195               .slice(0, MAXEVENTS);   // limit number of events shown
123196
123197             if (nextEvents.length) {
123198               selection
123199                 .append('div')
123200                 .call(uiDisclosure(context, ("community-events-" + (d.id)), false)
123201                   .expanded(false)
123202                   .updatePreference(false)
123203                   .title(t('success.events'))
123204                   .content(showNextEvents)
123205                 )
123206                 .select('.hide-toggle')
123207                 .append('span')
123208                 .attr('class', 'badge-text')
123209                 .text(nextEvents.length);
123210             }
123211
123212
123213             function showMore(selection) {
123214               var more = selection.selectAll('.community-more')
123215                 .data([0]);
123216
123217               var moreEnter = more.enter()
123218                 .append('div')
123219                 .attr('class', 'community-more');
123220
123221               if (d.extendedDescription) {
123222                 moreEnter
123223                   .append('div')
123224                   .attr('class', 'community-extended-description')
123225                   .html(t(("community." + (d.id) + ".extendedDescription"), replacements));
123226               }
123227
123228               if (d.languageCodes && d.languageCodes.length) {
123229                 var languageList = d.languageCodes
123230                   .map(function (code) { return languageName(code); })
123231                   .join(', ');
123232
123233                 moreEnter
123234                   .append('div')
123235                   .attr('class', 'community-languages')
123236                   .text(t('success.languages', { languages: languageList }));
123237               }
123238             }
123239
123240
123241             function showNextEvents(selection) {
123242               var events = selection
123243                 .append('div')
123244                 .attr('class', 'community-events');
123245
123246               var item = events.selectAll('.community-event')
123247                 .data(nextEvents);
123248
123249               var itemEnter = item.enter()
123250                 .append('div')
123251                 .attr('class', 'community-event');
123252
123253               itemEnter
123254                 .append('div')
123255                 .attr('class', 'community-event-name')
123256                 .append('a')
123257                 .attr('target', '_blank')
123258                 .attr('href', function (d) { return d.url; })
123259                 .text(function (d) {
123260                   var name = d.name;
123261                   if (d.i18n && d.id) {
123262                     name = t(("community." + communityID + ".events." + (d.id) + ".name"), { default: name });
123263                   }
123264                   return name;
123265                 });
123266
123267               itemEnter
123268                 .append('div')
123269                 .attr('class', 'community-event-when')
123270                 .text(function (d) {
123271                   var options = { weekday: 'short', day: 'numeric', month: 'short', year: 'numeric' };
123272                   if (d.date.getHours() || d.date.getMinutes()) {   // include time if it has one
123273                     options.hour = 'numeric';
123274                     options.minute = 'numeric';
123275                   }
123276                   return d.date.toLocaleString(detected.locale, options);
123277                 });
123278
123279               itemEnter
123280                 .append('div')
123281                 .attr('class', 'community-event-where')
123282                 .text(function (d) {
123283                   var where = d.where;
123284                   if (d.i18n && d.id) {
123285                     where = t(("community." + communityID + ".events." + (d.id) + ".where"), { default: where });
123286                   }
123287                   return where;
123288                 });
123289
123290               itemEnter
123291                 .append('div')
123292                 .attr('class', 'community-event-description')
123293                 .text(function (d) {
123294                   var description = d.description;
123295                   if (d.i18n && d.id) {
123296                     description = t(("community." + communityID + ".events." + (d.id) + ".description"), { default: description });
123297                   }
123298                   return description;
123299                 });
123300             }
123301
123302
123303             function linkify(url, text) {
123304               text = text || url;
123305               return ("<a target=\"_blank\" href=\"" + url + "\">" + text + "</a>");
123306             }
123307           }
123308
123309
123310           success.changeset = function (val) {
123311             if (!arguments$1.length) { return _changeset; }
123312             _changeset = val;
123313             return success;
123314           };
123315
123316
123317           success.location = function (val) {
123318             if (!arguments$1.length) { return _location; }
123319             _location = val;
123320             return success;
123321           };
123322
123323
123324           return utilRebind(success, dispatch$1, 'on');
123325         }
123326
123327         var _isSaving = false;
123328
123329
123330         function modeSave(context) {
123331             var mode = { id: 'save' };
123332             var keybinding = utilKeybinding('modeSave');
123333
123334             var loading = uiLoading(context)
123335                 .message(t('save.uploading'))
123336                 .blocking(true);
123337
123338             var commit = uiCommit(context)
123339                 .on('cancel', cancel)
123340                 .on('save', save);
123341
123342             var _toCheck = [];
123343             var _toLoad = [];
123344             var _loaded = {};
123345             var _toLoadCount = 0;
123346             var _toLoadTotal = 0;
123347
123348             var _conflicts = [];
123349             var _errors = [];
123350             var _origChanges;
123351             var _location;
123352
123353
123354             function cancel(selectedID) {
123355                 if (selectedID) {
123356                     context.enter(modeSelect(context, [selectedID]));
123357                 } else {
123358                     context.enter(modeBrowse(context));
123359                 }
123360             }
123361
123362
123363             function save(changeset, tryAgain, checkConflicts) {
123364                 // Guard against accidentally entering save code twice - #4641
123365                 if (_isSaving && !tryAgain) {
123366                     return;
123367                 }
123368
123369                 var osm = context.connection();
123370                 if (!osm) {
123371                     cancel();
123372                     return;
123373                 }
123374
123375                 // If user somehow got logged out mid-save, try to reauthenticate..
123376                 // This can happen if they were logged in from before, but the tokens are no longer valid.
123377                 if (!osm.authenticated()) {
123378                     osm.authenticate(function(err) {
123379                         if (err) {
123380                             cancel();   // quit save mode..
123381                         } else {
123382                             save(changeset, tryAgain, checkConflicts);  // continue where we left off..
123383                         }
123384                     });
123385                     return;
123386                 }
123387
123388                 if (!_isSaving) {
123389                     keybindingOff();
123390                     context.container().call(loading);  // block input
123391                     _isSaving = true;
123392                 }
123393
123394                 var history = context.history();
123395                 var localGraph = context.graph();
123396                 var remoteGraph = coreGraph(history.base(), true);
123397
123398                 _conflicts = [];
123399                 _errors = [];
123400
123401                 // Store original changes, in case user wants to download them as an .osc file
123402                 _origChanges = history.changes(actionDiscardTags(history.difference()));
123403
123404                 // First time, `history.perform` a no-op action.
123405                 // Any conflict resolutions will be done as `history.replace`
123406                 if (!tryAgain) {
123407                     history.perform(actionNoop());
123408                 }
123409
123410                 // Attempt a fast upload.. If there are conflicts, re-enter with `checkConflicts = true`
123411                 if (!checkConflicts) {
123412                     upload(changeset);
123413
123414                 // Do the full (slow) conflict check..
123415                 } else {
123416                     var summary = history.difference().summary();
123417                     _toCheck = [];
123418                     for (var i = 0; i < summary.length; i++) {
123419                         var item = summary[i];
123420                         if (item.changeType === 'modified') {
123421                             _toCheck.push(item.entity.id);
123422                         }
123423                     }
123424
123425                     _toLoad = withChildNodes(_toCheck, localGraph);
123426                     _loaded = {};
123427                     _toLoadCount = 0;
123428                     _toLoadTotal = _toLoad.length;
123429
123430                     if (_toCheck.length) {
123431                         showProgress(_toLoadCount, _toLoadTotal);
123432                         _toLoad.forEach(function(id) { _loaded[id] = false; });
123433                         osm.loadMultiple(_toLoad, loaded);
123434                     } else {
123435                         upload(changeset);
123436                     }
123437                 }
123438
123439                 return;
123440
123441
123442                 function withChildNodes(ids, graph) {
123443                     var s = new Set(ids);
123444                     ids.forEach(function(id) {
123445                         var entity = graph.entity(id);
123446                         if (entity.type !== 'way') { return; }
123447
123448                         graph.childNodes(entity).forEach(function(child) {
123449                             if (child.version !== undefined) {
123450                                 s.add(child.id);
123451                             }
123452                         });
123453                     });
123454
123455                     return Array.from(s);
123456                 }
123457
123458
123459                 // Reload modified entities into an alternate graph and check for conflicts..
123460                 function loaded(err, result) {
123461                     if (_errors.length) { return; }
123462
123463                     if (err) {
123464                         _errors.push({
123465                             msg: err.message || err.responseText,
123466                             details: [ t('save.status_code', { code: err.status }) ]
123467                         });
123468                         showErrors();
123469
123470                     } else {
123471                         var loadMore = [];
123472
123473                         result.data.forEach(function(entity) {
123474                             remoteGraph.replace(entity);
123475                             _loaded[entity.id] = true;
123476                             _toLoad = _toLoad.filter(function(val) { return val !== entity.id; });
123477
123478                             if (!entity.visible) { return; }
123479
123480                             // Because loadMultiple doesn't download /full like loadEntity,
123481                             // need to also load children that aren't already being checked..
123482                             var i, id;
123483                             if (entity.type === 'way') {
123484                                 for (i = 0; i < entity.nodes.length; i++) {
123485                                     id = entity.nodes[i];
123486                                     if (_loaded[id] === undefined) {
123487                                         _loaded[id] = false;
123488                                         loadMore.push(id);
123489                                     }
123490                                 }
123491                             } else if (entity.type === 'relation' && entity.isMultipolygon()) {
123492                                 for (i = 0; i < entity.members.length; i++) {
123493                                     id = entity.members[i].id;
123494                                     if (_loaded[id] === undefined) {
123495                                         _loaded[id] = false;
123496                                         loadMore.push(id);
123497                                     }
123498                                 }
123499                             }
123500                         });
123501
123502                         _toLoadCount += result.data.length;
123503                         _toLoadTotal += loadMore.length;
123504                         showProgress(_toLoadCount, _toLoadTotal);
123505
123506                         if (loadMore.length) {
123507                             _toLoad.push.apply(_toLoad, loadMore);
123508                             osm.loadMultiple(loadMore, loaded);
123509                         }
123510
123511                         if (!_toLoad.length) {
123512                             detectConflicts();
123513                         }
123514                     }
123515                 }
123516
123517
123518                 function detectConflicts() {
123519                     function choice(id, text, action) {
123520                         return { id: id, text: text, action: function() { history.replace(action); } };
123521                     }
123522                     function formatUser(d) {
123523                         return '<a href="' + osm.userURL(d) + '" target="_blank">' + d + '</a>';
123524                     }
123525                     function entityName(entity) {
123526                         return utilDisplayName(entity) || (utilDisplayType(entity.id) + ' ' + entity.id);
123527                     }
123528
123529                     function sameVersions(local, remote) {
123530                         if (local.version !== remote.version) { return false; }
123531
123532                         if (local.type === 'way') {
123533                             var children = utilArrayUnion(local.nodes, remote.nodes);
123534                             for (var i = 0; i < children.length; i++) {
123535                                 var a = localGraph.hasEntity(children[i]);
123536                                 var b = remoteGraph.hasEntity(children[i]);
123537                                 if (a && b && a.version !== b.version) { return false; }
123538                             }
123539                         }
123540
123541                         return true;
123542                     }
123543
123544                     _toCheck.forEach(function(id) {
123545                         var local = localGraph.entity(id);
123546                         var remote = remoteGraph.entity(id);
123547
123548                         if (sameVersions(local, remote)) { return; }
123549
123550                         var action = actionMergeRemoteChanges;
123551                         var merge = action(id, localGraph, remoteGraph, formatUser);
123552
123553                         history.replace(merge);
123554
123555                         var mergeConflicts = merge.conflicts();
123556                         if (!mergeConflicts.length) { return; }  // merged safely
123557
123558                         var forceLocal = action(id, localGraph, remoteGraph).withOption('force_local');
123559                         var forceRemote = action(id, localGraph, remoteGraph).withOption('force_remote');
123560                         var keepMine = t('save.conflict.' + (remote.visible ? 'keep_local' : 'restore'));
123561                         var keepTheirs = t('save.conflict.' + (remote.visible ? 'keep_remote' : 'delete'));
123562
123563                         _conflicts.push({
123564                             id: id,
123565                             name: entityName(local),
123566                             details: mergeConflicts,
123567                             chosen: 1,
123568                             choices: [
123569                                 choice(id, keepMine, forceLocal),
123570                                 choice(id, keepTheirs, forceRemote)
123571                             ]
123572                         });
123573                     });
123574
123575                     upload(changeset);
123576                 }
123577             }
123578
123579
123580             function upload(changeset) {
123581                 var osm = context.connection();
123582                 if (!osm) {
123583                     _errors.push({ msg: 'No OSM Service' });
123584                 }
123585
123586                 if (_conflicts.length) {
123587                     _conflicts.sort(function(a, b) { return b.id.localeCompare(a.id); });
123588                     showConflicts(changeset);
123589
123590                 } else if (_errors.length) {
123591                     showErrors();
123592
123593                 } else {
123594                     var history = context.history();
123595                     var changes = history.changes(actionDiscardTags(history.difference()));
123596                     if (changes.modified.length || changes.created.length || changes.deleted.length) {
123597                         loadLocation();  // so it is ready when we display the save screen
123598                         osm.putChangeset(changeset, changes, uploadCallback);
123599                     } else {        // changes were insignificant or reverted by user
123600                         d3_select('.inspector-wrap *').remove();
123601                         loading.close();
123602                         _isSaving = false;
123603                         context.flush();
123604                         cancel();
123605                     }
123606                 }
123607             }
123608
123609
123610             function uploadCallback(err, changeset) {
123611                 if (err) {
123612                     if (err.status === 409) {          // 409 Conflict
123613                         save(changeset, true, true);   // tryAgain = true, checkConflicts = true
123614                     } else {
123615                         _errors.push({
123616                             msg: err.message || err.responseText,
123617                             details: [ t('save.status_code', { code: err.status }) ]
123618                         });
123619                         showErrors();
123620                     }
123621
123622                 } else {
123623                     context.history().clearSaved();
123624                     success(changeset);
123625                     // Add delay to allow for postgres replication #1646 #2678
123626                     window.setTimeout(function() {
123627                         d3_select('.inspector-wrap *').remove();
123628                         loading.close();
123629                         _isSaving = false;
123630                         context.flush();
123631                     }, 2500);
123632                 }
123633             }
123634
123635
123636             function showProgress(num, total) {
123637                 var modal = context.container().select('.loading-modal .modal-section');
123638                 var progress = modal.selectAll('.progress')
123639                     .data([0]);
123640
123641                 // enter/update
123642                 progress.enter()
123643                     .append('div')
123644                     .attr('class', 'progress')
123645                     .merge(progress)
123646                     .text(t('save.conflict_progress', { num: num, total: total }));
123647             }
123648
123649
123650             function showConflicts(changeset) {
123651                 var history = context.history();
123652                 var selection = context.container()
123653                     .select('#sidebar')
123654                     .append('div')
123655                     .attr('class','sidebar-component');
123656
123657                 loading.close();
123658                 _isSaving = false;
123659
123660                 var ui = uiConflicts(context)
123661                     .conflictList(_conflicts)
123662                     .origChanges(_origChanges)
123663                     .on('cancel', function() {
123664                         history.pop();
123665                         selection.remove();
123666                         keybindingOn();
123667                     })
123668                     .on('save', function() {
123669                         for (var i = 0; i < _conflicts.length; i++) {
123670                             if (_conflicts[i].chosen === 1) {  // user chose "keep theirs"
123671                                 var entity = context.hasEntity(_conflicts[i].id);
123672                                 if (entity && entity.type === 'way') {
123673                                     var children = utilArrayUniq(entity.nodes);
123674                                     for (var j = 0; j < children.length; j++) {
123675                                         history.replace(actionRevert(children[j]));
123676                                     }
123677                                 }
123678                                 history.replace(actionRevert(_conflicts[i].id));
123679                             }
123680                         }
123681
123682                         selection.remove();
123683                         save(changeset, true, false);  // tryAgain = true, checkConflicts = false
123684                     });
123685
123686                 selection.call(ui);
123687             }
123688
123689
123690             function showErrors() {
123691                 keybindingOn();
123692                 context.history().pop();
123693                 loading.close();
123694                 _isSaving = false;
123695
123696                 var selection = uiConfirm(context.container());
123697                 selection
123698                     .select('.modal-section.header')
123699                     .append('h3')
123700                     .text(t('save.error'));
123701
123702                 addErrors(selection, _errors);
123703                 selection.okButton();
123704             }
123705
123706
123707             function addErrors(selection, data) {
123708                 var message = selection
123709                     .select('.modal-section.message-text');
123710
123711                 var items = message
123712                     .selectAll('.error-container')
123713                     .data(data);
123714
123715                 var enter = items.enter()
123716                     .append('div')
123717                     .attr('class', 'error-container');
123718
123719                 enter
123720                     .append('a')
123721                     .attr('class', 'error-description')
123722                     .attr('href', '#')
123723                     .classed('hide-toggle', true)
123724                     .text(function(d) { return d.msg || t('save.unknown_error_details'); })
123725                     .on('click', function() {
123726                         event.preventDefault();
123727
123728                         var error = d3_select(this);
123729                         var detail = d3_select(this.nextElementSibling);
123730                         var exp = error.classed('expanded');
123731
123732                         detail.style('display', exp ? 'none' : 'block');
123733                         error.classed('expanded', !exp);
123734                     });
123735
123736                 var details = enter
123737                     .append('div')
123738                     .attr('class', 'error-detail-container')
123739                     .style('display', 'none');
123740
123741                 details
123742                     .append('ul')
123743                     .attr('class', 'error-detail-list')
123744                     .selectAll('li')
123745                     .data(function(d) { return d.details || []; })
123746                     .enter()
123747                     .append('li')
123748                     .attr('class', 'error-detail-item')
123749                     .text(function(d) { return d; });
123750
123751                 items.exit()
123752                     .remove();
123753             }
123754
123755
123756             function success(changeset) {
123757                 commit.reset();
123758
123759                 var ui = uiSuccess(context)
123760                     .changeset(changeset)
123761                     .location(_location)
123762                     .on('cancel', function() { context.ui().sidebar.hide(); });
123763
123764                 context.enter(modeBrowse(context).sidebar(ui));
123765             }
123766
123767
123768             function keybindingOn() {
123769                 d3_select(document)
123770                     .call(keybinding.on('⎋', cancel, true));
123771             }
123772
123773
123774             function keybindingOff() {
123775                 d3_select(document)
123776                     .call(keybinding.unbind);
123777             }
123778
123779
123780             // Reverse geocode current map location so we can display a message on
123781             // the success screen like "Thank you for editing around place, region."
123782             function loadLocation() {
123783                 _location = null;
123784                 if (!services$1.geocoder) { return; }
123785
123786                 services$1.geocoder.reverse(context.map().center(), function(err, result) {
123787                     if (err || !result || !result.address) { return; }
123788
123789                     var addr = result.address;
123790                     var place = (addr && (addr.town || addr.city || addr.county)) || '';
123791                     var region = (addr && (addr.state || addr.country)) || '';
123792                     var separator = (place && region) ? t('success.thank_you_where.separator') : '';
123793
123794                     _location = t('success.thank_you_where.format',
123795                         { place: place, separator: separator, region: region }
123796                     );
123797                 });
123798             }
123799
123800
123801             mode.enter = function() {
123802                 // Show sidebar
123803                 context.ui().sidebar.expand();
123804
123805                 function done() {
123806                     context.ui().sidebar.show(commit);
123807                 }
123808
123809                 keybindingOn();
123810
123811                 context.container().selectAll('#content')
123812                     .attr('class', 'inactive');
123813
123814                 var osm = context.connection();
123815                 if (!osm) {
123816                     cancel();
123817                     return;
123818                 }
123819
123820                 if (osm.authenticated()) {
123821                     done();
123822                 } else {
123823                     osm.authenticate(function(err) {
123824                         if (err) {
123825                             cancel();
123826                         } else {
123827                             done();
123828                         }
123829                     });
123830                 }
123831             };
123832
123833
123834             mode.exit = function() {
123835                 _isSaving = false;
123836
123837                 keybindingOff();
123838
123839                 context.container().selectAll('#content')
123840                     .attr('class', 'active');
123841
123842                 context.ui().sidebar.hide();
123843             };
123844
123845             return mode;
123846         }
123847
123848         function uiToolOldDrawModes(context) {
123849
123850             var tool = {
123851                 id: 'old_modes',
123852                 label: t('toolbar.add_feature')
123853             };
123854
123855             var modes = [
123856                 modeAddPoint(context, {
123857                     title: t('modes.add_point.title'),
123858                     button: 'point',
123859                     description: t('modes.add_point.description'),
123860                     preset: context.presets().item('point'),
123861                     key: '1'
123862                 }),
123863                 modeAddLine(context, {
123864                     title: t('modes.add_line.title'),
123865                     button: 'line',
123866                     description: t('modes.add_line.description'),
123867                     preset: context.presets().item('line'),
123868                     key: '2'
123869                 }),
123870                 modeAddArea(context, {
123871                     title: t('modes.add_area.title'),
123872                     button: 'area',
123873                     description: t('modes.add_area.description'),
123874                     preset: context.presets().item('area'),
123875                     key: '3'
123876                 })
123877             ];
123878
123879
123880             function enabled() {
123881                 return osmEditable();
123882             }
123883
123884             function osmEditable() {
123885                 return context.editable();
123886             }
123887
123888             modes.forEach(function(mode) {
123889                 context.keybinding().on(mode.key, function() {
123890                     if (!enabled()) { return; }
123891
123892                     if (mode.id === context.mode().id) {
123893                         context.enter(modeBrowse(context));
123894                     } else {
123895                         context.enter(mode);
123896                     }
123897                 });
123898             });
123899
123900             tool.render = function(selection) {
123901
123902                 var wrap = selection
123903                     .append('div')
123904                     .attr('class', 'joined')
123905                     .style('display', 'flex');
123906
123907                 context
123908                     .on('enter.editor', function(entered) {
123909                         selection.selectAll('button.add-button')
123910                             .classed('active', function(mode) { return entered.button === mode.button; });
123911                         context.container()
123912                             .classed('mode-' + entered.id, true);
123913                     });
123914
123915                 context
123916                     .on('exit.editor', function(exited) {
123917                         context.container()
123918                             .classed('mode-' + exited.id, false);
123919                     });
123920
123921
123922                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
123923
123924                 context.map()
123925                     .on('move.modes', debouncedUpdate)
123926                     .on('drawn.modes', debouncedUpdate);
123927
123928                 context
123929                     .on('enter.modes', update);
123930
123931                 update();
123932
123933
123934                 function update() {
123935
123936                     var buttons = wrap.selectAll('button.add-button')
123937                         .data(modes, function(d) { return d.id; });
123938
123939                     // exit
123940                     buttons.exit()
123941                         .remove();
123942
123943                     // enter
123944                     var buttonsEnter = buttons.enter()
123945                         .append('button')
123946                         .attr('class', function(d) { return d.id + ' add-button bar-button'; })
123947                         .on('click.mode-buttons', function(d) {
123948                             if (!enabled()) { return; }
123949
123950                             // When drawing, ignore accidental clicks on mode buttons - #4042
123951                             var currMode = context.mode().id;
123952                             if (/^draw/.test(currMode)) { return; }
123953
123954                             if (d.id === currMode) {
123955                                 context.enter(modeBrowse(context));
123956                             } else {
123957                                 context.enter(d);
123958                             }
123959                         })
123960                         .call(tooltip()
123961                             .placement('bottom')
123962                             .html(true)
123963                             .title(function(d) { return uiTooltipHtml(d.description, d.key); })
123964                             .scrollContainer(d3_select('#bar'))
123965                         );
123966
123967                     buttonsEnter
123968                         .each(function(d) {
123969                             d3_select(this)
123970                                 .call(svgIcon('#iD-icon-' + d.button));
123971                         });
123972
123973                     buttonsEnter
123974                         .append('span')
123975                         .attr('class', 'label')
123976                         .text(function(mode) { return mode.title; });
123977
123978                     // if we are adding/removing the buttons, check if toolbar has overflowed
123979                     if (buttons.enter().size() || buttons.exit().size()) {
123980                         context.ui().checkOverflow('#bar', true);
123981                     }
123982
123983                     // update
123984                     buttons = buttons
123985                         .merge(buttonsEnter)
123986                         .classed('disabled', function(d) { return !enabled(); });
123987                 }
123988             };
123989
123990             return tool;
123991         }
123992
123993         function uiToolNotes(context) {
123994
123995             var tool = {
123996                 id: 'notes',
123997                 label: t('modes.add_note.label')
123998             };
123999
124000             var mode = modeAddNote(context);
124001
124002             function enabled() {
124003                 return notesEnabled() && notesEditable();
124004             }
124005
124006             function notesEnabled() {
124007                 var noteLayer = context.layers().layer('notes');
124008                 return noteLayer && noteLayer.enabled();
124009             }
124010
124011             function notesEditable() {
124012                 var mode = context.mode();
124013                 return context.map().notesEditable() && mode && mode.id !== 'save';
124014             }
124015
124016             context.keybinding().on(mode.key, function() {
124017                 if (!enabled()) { return; }
124018
124019                 if (mode.id === context.mode().id) {
124020                     context.enter(modeBrowse(context));
124021                 } else {
124022                     context.enter(mode);
124023                 }
124024             });
124025
124026             tool.render = function(selection) {
124027
124028                 context
124029                     .on('enter.editor.notes', function(entered) {
124030                         selection.selectAll('button.add-button')
124031                             .classed('active', function(mode) { return entered.button === mode.button; });
124032                         context.container()
124033                             .classed('mode-' + entered.id, true);
124034                     });
124035
124036                 context
124037                     .on('exit.editor.notes', function(exited) {
124038                         context.container()
124039                             .classed('mode-' + exited.id, false);
124040                     });
124041
124042
124043                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
124044
124045                 context.map()
124046                     .on('move.notes', debouncedUpdate)
124047                     .on('drawn.notes', debouncedUpdate);
124048
124049                 context
124050                     .on('enter.notes', update);
124051
124052                 update();
124053
124054
124055                 function update() {
124056                     var showNotes = notesEnabled();
124057                     var data = showNotes ? [mode] : [];
124058
124059                     var buttons = selection.selectAll('button.add-button')
124060                         .data(data, function(d) { return d.id; });
124061
124062                     // exit
124063                     buttons.exit()
124064                         .remove();
124065
124066                     // enter
124067                     var buttonsEnter = buttons.enter()
124068                         .append('button')
124069                         .attr('tabindex', -1)
124070                         .attr('class', function(d) { return d.id + ' add-button bar-button'; })
124071                         .on('click.notes', function(d) {
124072                             if (!enabled()) { return; }
124073
124074                             // When drawing, ignore accidental clicks on mode buttons - #4042
124075                             var currMode = context.mode().id;
124076                             if (/^draw/.test(currMode)) { return; }
124077
124078                             if (d.id === currMode) {
124079                                 context.enter(modeBrowse(context));
124080                             } else {
124081                                 context.enter(d);
124082                             }
124083                         })
124084                         .call(tooltip()
124085                             .placement('bottom')
124086                             .html(true)
124087                             .title(function(d) { return uiTooltipHtml(d.description, d.key); })
124088                             .scrollContainer(d3_select('#bar'))
124089                         );
124090
124091                     buttonsEnter
124092                         .each(function(d) {
124093                             d3_select(this)
124094                                 .call(svgIcon(d.icon || '#iD-icon-' + d.button));
124095                         });
124096
124097                     // if we are adding/removing the buttons, check if toolbar has overflowed
124098                     if (buttons.enter().size() || buttons.exit().size()) {
124099                         context.ui().checkOverflow('#bar', true);
124100                     }
124101
124102                     // update
124103                     buttons = buttons
124104                         .merge(buttonsEnter)
124105                         .classed('disabled', function(d) { return !enabled(); });
124106                 }
124107             };
124108
124109             tool.uninstall = function() {
124110                 context
124111                     .on('enter.editor.notes', null)
124112                     .on('exit.editor.notes', null)
124113                     .on('enter.notes', null);
124114
124115                 context.map()
124116                     .on('move.notes', null)
124117                     .on('drawn.notes', null);
124118             };
124119
124120             return tool;
124121         }
124122
124123         function uiToolSave(context) {
124124
124125             var tool = {
124126                 id: 'save',
124127                 label: t('save.title')
124128             };
124129
124130             var button = null;
124131             var tooltipBehavior = null;
124132             var history = context.history();
124133             var key = uiCmd('⌘S');
124134             var _numChanges = 0;
124135
124136             function isSaving() {
124137                 var mode = context.mode();
124138                 return mode && mode.id === 'save';
124139             }
124140
124141             function isDisabled() {
124142                 return _numChanges === 0 || isSaving();
124143             }
124144
124145             function save() {
124146                 event.preventDefault();
124147                 if (!context.inIntro() && !isSaving() && history.hasChanges()) {
124148                     context.enter(modeSave(context));
124149                 }
124150             }
124151
124152             function bgColor() {
124153                 var step;
124154                 if (_numChanges === 0) {
124155                     return null;
124156                 } else if (_numChanges <= 50) {
124157                     step = _numChanges / 50;
124158                     return d3_interpolateRgb('#fff', '#ff8')(step);  // white -> yellow
124159                 } else {
124160                     step = Math.min((_numChanges - 50) / 50, 1.0);
124161                     return d3_interpolateRgb('#ff8', '#f88')(step);  // yellow -> red
124162                 }
124163             }
124164
124165
124166             function updateCount() {
124167                 var val = history.difference().summary().length;
124168                 if (val === _numChanges) { return; }
124169                 _numChanges = val;
124170
124171                 if (tooltipBehavior) {
124172                     tooltipBehavior
124173                         .title(uiTooltipHtml(
124174                             t(_numChanges > 0 ? 'save.help' : 'save.no_changes'), key)
124175                         );
124176                 }
124177
124178                 if (button) {
124179                     button
124180                         .classed('disabled', isDisabled())
124181                         .style('background', bgColor());
124182
124183                     button.select('span.count')
124184                         .text(_numChanges);
124185                 }
124186             }
124187
124188
124189             tool.render = function(selection) {
124190                 tooltipBehavior = tooltip()
124191                     .placement('bottom')
124192                     .html(true)
124193                     .title(uiTooltipHtml(t('save.no_changes'), key))
124194                     .scrollContainer(d3_select('#bar'));
124195
124196                 button = selection
124197                     .append('button')
124198                     .attr('class', 'save disabled bar-button')
124199                     .on('click', save)
124200                     .call(tooltipBehavior);
124201
124202                 button
124203                     .call(svgIcon('#iD-icon-save'));
124204
124205                 button
124206                     .append('span')
124207                     .attr('class', 'count')
124208                     .attr('aria-hidden', 'true')
124209                     .text('0');
124210
124211                 updateCount();
124212
124213
124214                 context.keybinding()
124215                     .on(key, save, true);
124216
124217
124218                 context.history()
124219                     .on('change.save', updateCount);
124220
124221                 context
124222                     .on('enter.save', function() {
124223                         if (button) {
124224                             button
124225                                 .classed('disabled', isDisabled());
124226
124227                             if (isSaving()) {
124228                                 button.call(tooltipBehavior.hide);
124229                             }
124230                         }
124231                     });
124232             };
124233
124234
124235             tool.uninstall = function() {
124236                 context.keybinding()
124237                     .off(key, true);
124238
124239                 context.history()
124240                     .on('change.save', null);
124241
124242                 context
124243                     .on('enter.save', null);
124244
124245                 button = null;
124246                 tooltipBehavior = null;
124247             };
124248
124249             return tool;
124250         }
124251
124252         function uiToolSidebarToggle(context) {
124253
124254             var tool = {
124255                 id: 'sidebar_toggle',
124256                 label: t('toolbar.inspect')
124257             };
124258
124259             tool.render = function(selection) {
124260                 selection
124261                     .append('button')
124262                     .attr('class', 'bar-button')
124263                     .on('click', function() {
124264                         context.ui().sidebar.toggle();
124265                     })
124266                     .call(tooltip()
124267                         .placement('bottom')
124268                         .html(true)
124269                         .title(uiTooltipHtml(t('sidebar.tooltip'), t('sidebar.key')))
124270                         .scrollContainer(d3_select('#bar'))
124271                     )
124272                     .call(svgIcon('#iD-icon-sidebar-' + (textDirection === 'rtl' ? 'right' : 'left')));
124273             };
124274
124275             return tool;
124276         }
124277
124278         function uiToolUndoRedo(context) {
124279
124280             var tool = {
124281                 id: 'undo_redo',
124282                 label: t('toolbar.undo_redo')
124283             };
124284
124285             var commands = [{
124286                 id: 'undo',
124287                 cmd: uiCmd('⌘Z'),
124288                 action: function() { if (editable()) { context.undo(); } },
124289                 annotation: function() { return context.history().undoAnnotation(); }
124290             }, {
124291                 id: 'redo',
124292                 cmd: uiCmd('⌘⇧Z'),
124293                 action: function() { if (editable()) { context.redo(); } },
124294                 annotation: function() { return context.history().redoAnnotation(); }
124295             }];
124296
124297
124298             function editable() {
124299                 return context.mode() && context.mode().id !== 'save' && context.map().editableDataEnabled(true /* ignore min zoom */);
124300             }
124301
124302
124303             tool.render = function(selection) {
124304                 var tooltipBehavior = tooltip()
124305                     .placement('bottom')
124306                     .html(true)
124307                     .title(function (d) {
124308                         return uiTooltipHtml(d.annotation() ?
124309                             t(d.id + '.tooltip', {action: d.annotation()}) :
124310                             t(d.id + '.nothing'), d.cmd);
124311                     })
124312                     .scrollContainer(d3_select('#bar'));
124313
124314                 var buttons = selection.selectAll('button')
124315                     .data(commands)
124316                     .enter()
124317                     .append('button')
124318                     .attr('class', function(d) { return 'disabled ' + d.id + '-button bar-button'; })
124319                     .on('click', function(d) { return d.action(); })
124320                     .call(tooltipBehavior);
124321
124322                 buttons.each(function(d) {
124323                     var iconName = d.id;
124324                     if (textDirection === 'rtl') {
124325                         if (iconName === 'undo') {
124326                             iconName = 'redo';
124327                         } else if (iconName === 'redo') {
124328                             iconName = 'undo';
124329                         }
124330                     }
124331                     d3_select(this)
124332                         .call(svgIcon('#iD-icon-' + iconName));
124333                 });
124334
124335                 context.keybinding()
124336                     .on(commands[0].cmd, function() { event.preventDefault(); commands[0].action(); })
124337                     .on(commands[1].cmd, function() { event.preventDefault(); commands[1].action(); });
124338
124339
124340                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
124341
124342                 context.map()
124343                     .on('move.undo_redo', debouncedUpdate)
124344                     .on('drawn.undo_redo', debouncedUpdate);
124345
124346                 context.history()
124347                     .on('change.undo_redo', function(difference) {
124348                         if (difference) { update(); }
124349                     });
124350
124351                 context
124352                     .on('enter.undo_redo', update);
124353
124354
124355                 function update() {
124356                     buttons
124357                         .property('disabled', !editable())
124358                         .classed('disabled', function(d) {
124359                             return !editable() || !d.annotation();
124360                         })
124361                         .each(function() {
124362                             var selection = d3_select(this);
124363                             if (!selection.select('.tooltip.in').empty()) {
124364                                 selection.call(tooltipBehavior.updateContent);
124365                             }
124366                         });
124367                 }
124368             };
124369
124370             tool.uninstall = function() {
124371                 context.keybinding()
124372                     .off(commands[0].cmd)
124373                     .off(commands[1].cmd);
124374
124375                 context.map()
124376                     .on('move.undo_redo', null)
124377                     .on('drawn.undo_redo', null);
124378
124379                 context.history()
124380                     .on('change.undo_redo', null);
124381
124382                 context
124383                     .on('enter.undo_redo', null);
124384             };
124385
124386             return tool;
124387         }
124388
124389         function uiTopToolbar(context) {
124390
124391             var sidebarToggle = uiToolSidebarToggle(context),
124392                 modes = uiToolOldDrawModes(context),
124393                 notes = uiToolNotes(context),
124394                 undoRedo = uiToolUndoRedo(context),
124395                 save = uiToolSave(context);
124396
124397             function notesEnabled() {
124398                 var noteLayer = context.layers().layer('notes');
124399                 return noteLayer && noteLayer.enabled();
124400             }
124401
124402             function topToolbar(bar) {
124403
124404                 bar.on('wheel.topToolbar', function() {
124405                     if (!event.deltaX) {
124406                         // translate vertical scrolling into horizontal scrolling in case
124407                         // the user doesn't have an input device that can scroll horizontally
124408                         bar.node().scrollLeft += event.deltaY;
124409                     }
124410                 });
124411
124412                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
124413                 context.layers()
124414                     .on('change.topToolbar', debouncedUpdate);
124415
124416                 update();
124417
124418                 function update() {
124419
124420                     var tools = [
124421                         sidebarToggle,
124422                         'spacer',
124423                         modes
124424                     ];
124425
124426                     tools.push('spacer');
124427
124428                     if (notesEnabled()) {
124429                         tools = tools.concat([notes, 'spacer']);
124430                     }
124431
124432                     tools = tools.concat([undoRedo, save]);
124433
124434                     var toolbarItems = bar.selectAll('.toolbar-item')
124435                         .data(tools, function(d) {
124436                             return d.id || d;
124437                         });
124438
124439                     toolbarItems.exit()
124440                         .each(function(d) {
124441                             if (d.uninstall) {
124442                                 d.uninstall();
124443                             }
124444                         })
124445                         .remove();
124446
124447                     var itemsEnter = toolbarItems
124448                         .enter()
124449                         .append('div')
124450                         .attr('class', function(d) {
124451                             var classes = 'toolbar-item ' + (d.id || d).replace('_', '-');
124452                             if (d.klass) { classes += ' ' + d.klass; }
124453                             return classes;
124454                         });
124455
124456                     var actionableItems = itemsEnter.filter(function(d) { return d !== 'spacer'; });
124457
124458                     actionableItems
124459                         .append('div')
124460                         .attr('class', 'item-content')
124461                         .each(function(d) {
124462                             d3_select(this).call(d.render, bar);
124463                         });
124464
124465                     actionableItems
124466                         .append('div')
124467                         .attr('class', 'item-label')
124468                         .text(function(d) {
124469                             return d.label;
124470                         });
124471                 }
124472
124473             }
124474
124475             return topToolbar;
124476         }
124477
124478         // these are module variables so they are preserved through a ui.restart()
124479         var sawVersion = null;
124480         var isNewVersion = false;
124481         var isNewUser = false;
124482
124483
124484         function uiVersion(context) {
124485
124486             var currVersion = context.version;
124487             var matchedVersion = currVersion.match(/\d+\.\d+\.\d+.*/);
124488
124489             if (sawVersion === null && matchedVersion !== null) {
124490                 isNewVersion = (context.storage('sawVersion') !== currVersion);
124491                 isNewUser = !context.storage('sawSplash');
124492                 context.storage('sawVersion', currVersion);
124493                 sawVersion = currVersion;
124494             }
124495
124496             return function(selection) {
124497                 selection
124498                     .append('a')
124499                     .attr('target', '_blank')
124500                     .attr('href', 'https://github.com/openstreetmap/iD')
124501                     .text(currVersion);
124502
124503                 // only show new version indicator to users that have used iD before
124504                 if (isNewVersion && !isNewUser) {
124505                     selection
124506                         .append('div')
124507                         .attr('class', 'badge')
124508                         .append('a')
124509                         .attr('target', '_blank')
124510                         .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CHANGELOG.md#whats-new')
124511                         .call(svgIcon('#maki-gift-11'))
124512                         .call(tooltip()
124513                             .title(t('version.whats_new', { version: currVersion }))
124514                             .placement('top')
124515                         );
124516                 }
124517             };
124518         }
124519
124520         function uiZoom(context) {
124521             var zooms = [{
124522                 id: 'zoom-in',
124523                 icon: 'plus',
124524                 title: t('zoom.in'),
124525                 action: context.zoomIn,
124526                 key: '+'
124527             }, {
124528                 id: 'zoom-out',
124529                 icon: 'minus',
124530                 title: t('zoom.out'),
124531                 action: context.zoomOut,
124532                 key: '-'
124533             }];
124534
124535
124536             function zoomIn() {
124537                 event.preventDefault();
124538                 context.zoomIn();
124539             }
124540
124541
124542             function zoomOut() {
124543                 event.preventDefault();
124544                 context.zoomOut();
124545             }
124546
124547
124548             function zoomInFurther() {
124549                 event.preventDefault();
124550                 context.zoomInFurther();
124551             }
124552
124553
124554             function zoomOutFurther() {
124555                 event.preventDefault();
124556                 context.zoomOutFurther();
124557             }
124558
124559
124560             return function(selection) {
124561                 var button = selection.selectAll('button')
124562                     .data(zooms)
124563                     .enter()
124564                     .append('button')
124565                     .attr('class', function(d) { return d.id; })
124566                     .on('click.editor', function(d) {
124567                         if (!d3_select(this).classed('disabled')) {
124568                             d.action();
124569                         }
124570                     })
124571                     .call(tooltip()
124572                         .placement((textDirection === 'rtl') ? 'right' : 'left')
124573                         .html(true)
124574                         .title(function(d) {
124575                             return uiTooltipHtml(d.title, d.key);
124576                         })
124577                     );
124578
124579                 button.each(function(d) {
124580                     d3_select(this)
124581                         .call(svgIcon('#iD-icon-' + d.icon, 'light'));
124582                 });
124583
124584                 ['plus', 'ffplus', '=', 'ffequals'].forEach(function(key) {
124585                     context.keybinding().on([key], zoomIn);
124586                     context.keybinding().on([uiCmd('⌘' + key)], zoomInFurther);
124587                 });
124588
124589                 ['_', '-', 'ffminus', 'dash'].forEach(function(key) {
124590                     context.keybinding().on([key], zoomOut);
124591                     context.keybinding().on([uiCmd('⌘' + key)], zoomOutFurther);
124592                 });
124593
124594                 function updateButtonStates() {
124595                     var canZoomIn = context.map().canZoomIn();
124596                     selection.select('button.zoom-in')
124597                         .classed('disabled', !canZoomIn);
124598
124599                     var canZoomOut = context.map().canZoomOut();
124600                     selection.select('button.zoom-out')
124601                         .classed('disabled', !canZoomOut);
124602                 }
124603
124604                 updateButtonStates();
124605
124606                 context.map().on('move.uiZoom', updateButtonStates);
124607             };
124608         }
124609
124610         function uiInit(context) {
124611             var _initCounter = 0;
124612             var _initCallback;
124613             var _needWidth = {};
124614
124615
124616             function render(container) {
124617                 container
124618                     .attr('dir', textDirection);
124619
124620                 // setup fullscreen keybindings (no button shown at this time)
124621                 container
124622                     .call(uiFullScreen(context));
124623
124624                 var map = context.map();
124625                 map.redrawEnable(false);  // don't draw until we've set zoom/lat/long
124626
124627                 container
124628                     .append('svg')
124629                     .attr('id', 'defs')
124630                     .call(svgDefs(context));
124631
124632                 container
124633                     .append('div')
124634                     .attr('id', 'sidebar')
124635                     .call(ui.sidebar);
124636
124637                 var content = container
124638                     .append('div')
124639                     .attr('id', 'content')
124640                     .attr('class', 'active');
124641
124642                 // Top toolbar
124643                 content
124644                     .append('div')
124645                     .attr('id', 'bar-wrap')
124646                     .append('div')
124647                     .attr('id', 'bar')
124648                     .attr('class', 'fillD')
124649                     .call(uiTopToolbar(context));
124650
124651                 content
124652                     .append('div')
124653                     .attr('id', 'map')
124654                     .attr('dir', 'ltr')
124655                     .call(map);
124656
124657
124658                 // Map controls
124659                 var controls = content
124660                     .append('div')
124661                     .attr('class', 'map-controls');
124662
124663                 controls
124664                     .append('div')
124665                     .attr('class', 'map-control zoombuttons')
124666                     .call(uiZoom(context));
124667
124668                 controls
124669                     .append('div')
124670                     .attr('class', 'map-control geolocate-control')
124671                     .call(uiGeolocate(context));
124672
124673                 var background = uiBackground(context);
124674                 controls
124675                     .append('div')
124676                     .attr('class', 'map-control background-control')
124677                     .call(background.renderToggleButton);
124678
124679                 var mapData = uiMapData(context);
124680                 controls
124681                     .append('div')
124682                     .attr('class', 'map-control map-data-control')
124683                     .call(mapData.renderToggleButton);
124684
124685                 var issues = uiIssues(context);
124686                 controls
124687                     .append('div')
124688                     .attr('class', 'map-control map-issues-control')
124689                     .call(issues.renderToggleButton);
124690
124691                 var preferences = uiPreferences(context);
124692                 controls
124693                     .append('div')
124694                     .attr('class', 'map-control preferences-control')
124695                     .call(preferences.renderToggleButton);
124696
124697                 var help = uiHelp(context);
124698                 controls
124699                     .append('div')
124700                     .attr('class', 'map-control help-control')
124701                     .call(help.renderToggleButton);
124702
124703                 content
124704                     .append('div')
124705                     .attr('class', 'spinner')
124706                     .call(uiSpinner(context));
124707
124708                 // Add attribution and footer
124709                 var about = content
124710                     .append('div')
124711                     .attr('id', 'about');
124712
124713                 about
124714                     .append('div')
124715                     .attr('id', 'attrib')
124716                     .attr('dir', 'ltr')
124717                     .call(uiAttribution(context));
124718
124719                 about
124720                     .append('div')
124721                     .attr('class', 'api-status')
124722                     .call(uiStatus(context));
124723
124724
124725                 var footer = about
124726                     .append('div')
124727                     .attr('id', 'footer')
124728                     .attr('class', 'fillD');
124729
124730                 footer
124731                     .append('div')
124732                     .attr('id', 'flash-wrap')
124733                     .attr('class', 'footer-hide');
124734
124735                 var footerWrap = footer
124736                     .append('div')
124737                     .attr('id', 'footer-wrap')
124738                     .attr('class', 'footer-show');
124739
124740                 footerWrap
124741                     .append('div')
124742                     .attr('id', 'scale-block')
124743                     .call(uiScale(context));
124744
124745                 var aboutList = footerWrap
124746                     .append('div')
124747                     .attr('id', 'info-block')
124748                     .append('ul')
124749                     .attr('id', 'about-list');
124750
124751                 if (!context.embed()) {
124752                     aboutList
124753                         .call(uiAccount(context));
124754                 }
124755
124756                 aboutList
124757                     .append('li')
124758                     .attr('class', 'version')
124759                     .call(uiVersion(context));
124760
124761                 var issueLinks = aboutList
124762                     .append('li');
124763
124764                 issueLinks
124765                     .append('a')
124766                     .attr('target', '_blank')
124767                     .attr('href', 'https://github.com/openstreetmap/iD/issues')
124768                     .call(svgIcon('#iD-icon-bug', 'light'))
124769                     .call(tooltip().title(t('report_a_bug')).placement('top'));
124770
124771                 issueLinks
124772                     .append('a')
124773                     .attr('target', '_blank')
124774                     .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating')
124775                     .call(svgIcon('#iD-icon-translate', 'light'))
124776                     .call(tooltip().title(t('help_translate')).placement('top'));
124777
124778                 aboutList
124779                     .append('li')
124780                     .attr('class', 'feature-warning')
124781                     .attr('tabindex', -1)
124782                     .call(uiFeatureInfo(context));
124783
124784                 aboutList
124785                     .append('li')
124786                     .attr('class', 'issues-info')
124787                     .attr('tabindex', -1)
124788                     .call(uiIssuesInfo(context));
124789
124790                 aboutList
124791                     .append('li')
124792                     .attr('class', 'user-list')
124793                     .attr('tabindex', -1)
124794                     .call(uiContributors(context));
124795
124796
124797                 // Setup map dimensions and move map to initial center/zoom.
124798                 // This should happen after #content and toolbars exist.
124799                 ui.onResize();
124800                 map.redrawEnable(true);
124801
124802                 ui.hash = behaviorHash(context);
124803                 ui.hash();
124804                 if (!ui.hash.hadHash) {
124805                     map.centerZoom([0, 0], 2);
124806                 }
124807
124808
124809                 var overMap = content
124810                     .append('div')
124811                     .attr('class', 'over-map');
124812
124813                 // Add panes
124814                 // This should happen after map is initialized, as some require surface()
124815                 var panes = overMap
124816                     .append('div')
124817                     .attr('class', 'map-panes');
124818
124819                 panes
124820                     .call(background.renderPane)
124821                     .call(mapData.renderPane)
124822                     .call(issues.renderPane)
124823                     .call(preferences.renderPane)
124824                     .call(help.renderPane);
124825
124826                 ui.info = uiInfo(context);
124827
124828                 // Add absolutely-positioned elements that sit on top of the map
124829                 // This should happen after the map is ready (center/zoom)
124830                 overMap
124831                     .call(uiMapInMap(context))
124832                     .call(ui.info)
124833                     .call(uiNotice(context));
124834
124835
124836                 overMap
124837                     .append('div')
124838                     .attr('id', 'photoviewer')
124839                     .classed('al', true)       // 'al'=left,  'ar'=right
124840                     .classed('hide', true)
124841                     .call(ui.photoviewer);
124842
124843
124844                 // Bind events
124845                 window.onbeforeunload = function() {
124846                     return context.save();
124847                 };
124848                 window.onunload = function() {
124849                     context.history().unlock();
124850                 };
124851
124852                 d3_select(window)
124853                     .on('gesturestart.editor', eventCancel)
124854                     .on('gesturechange.editor', eventCancel)
124855                     .on('gestureend.editor', eventCancel)
124856                     .on('resize.editor', ui.onResize);
124857
124858
124859                 var panPixels = 80;
124860                 context.keybinding()
124861                     .on('⌫', function() { event.preventDefault(); })
124862                     .on([t('sidebar.key'), '`', '²', '@'], ui.sidebar.toggle)   // #5663, #6864 - common QWERTY, AZERTY
124863                     .on('←', pan([panPixels, 0]))
124864                     .on('↑', pan([0, panPixels]))
124865                     .on('→', pan([-panPixels, 0]))
124866                     .on('↓', pan([0, -panPixels]))
124867                     .on(['⇧←', uiCmd('⌘←')], pan([map.dimensions()[0], 0]))
124868                     .on(['⇧↑', uiCmd('⌘↑')], pan([0, map.dimensions()[1]]))
124869                     .on(['⇧→', uiCmd('⌘→')], pan([-map.dimensions()[0], 0]))
124870                     .on(['⇧↓', uiCmd('⌘↓')], pan([0, -map.dimensions()[1]]));
124871
124872                 context.enter(modeBrowse(context));
124873
124874                 if (!_initCounter++) {
124875                     if (!ui.hash.startWalkthrough) {
124876                         context.container()
124877                             .call(uiSplash(context))
124878                             .call(uiRestore(context));
124879                     }
124880
124881                     context.container()
124882                         .call(uiShortcuts(context));
124883                 }
124884
124885                 var osm = context.connection();
124886                 var auth = uiLoading(context).message(t('loading_auth')).blocking(true);
124887
124888                 if (osm && auth) {
124889                     osm
124890                         .on('authLoading.ui', function() {
124891                             context.container()
124892                                 .call(auth);
124893                         })
124894                         .on('authDone.ui', function() {
124895                             auth.close();
124896                         });
124897                 }
124898
124899                 _initCounter++;
124900
124901                 if (ui.hash.startWalkthrough) {
124902                     ui.hash.startWalkthrough = false;
124903                     context.container().call(uiIntro(context));
124904                 }
124905
124906
124907                 function pan(d) {
124908                     return function() {
124909                         if (d3_select('.combobox').size()) { return; }
124910                         event.preventDefault();
124911                         context.pan(d, 100);
124912                     };
124913                 }
124914
124915                 function eventCancel() {
124916                     event.preventDefault();
124917                 }
124918             }
124919
124920
124921             function ui(node, callback) {
124922                 _initCallback = callback;
124923                 var container = d3_select(node);
124924                 context.container(container);
124925                 context.loadLocale(function(err) {
124926                     if (!err) {
124927                         render(container);
124928                     }
124929                     if (callback) {
124930                         callback(err);
124931                     }
124932                 });
124933             }
124934
124935
124936             ui.restart = function(arg) {
124937                 context.keybinding().clear();
124938                 context.locale(arg);
124939                 context.loadLocale(function(err) {
124940                     if (!err) {
124941                         context.container().selectAll('*').remove();
124942                         render(context.container());
124943                         if (_initCallback) { _initCallback(); }
124944                     }
124945                 });
124946             };
124947
124948             ui.sidebar = uiSidebar(context);
124949
124950             ui.photoviewer = uiPhotoviewer(context);
124951
124952             ui.onResize = function(withPan) {
124953                 var map = context.map();
124954
124955                 // Recalc dimensions of map and sidebar.. (`true` = force recalc)
124956                 // This will call `getBoundingClientRect` and trigger reflow,
124957                 //  but the values will be cached for later use.
124958                 var mapDimensions = utilGetDimensions(d3_select('#content'), true);
124959                 utilGetDimensions(d3_select('#sidebar'), true);
124960
124961                 if (withPan !== undefined) {
124962                     map.redrawEnable(false);
124963                     map.pan(withPan);
124964                     map.redrawEnable(true);
124965                 }
124966                 map.dimensions(mapDimensions);
124967
124968                 ui.photoviewer.onMapResize();
124969
124970                 // check if header or footer have overflowed
124971                 ui.checkOverflow('#bar');
124972                 ui.checkOverflow('#footer');
124973
124974                 // Use outdated code so it works on Explorer
124975                 var resizeWindowEvent = document.createEvent('Event');
124976
124977                 resizeWindowEvent.initEvent('resizeWindow', true, true);
124978
124979                 document.dispatchEvent(resizeWindowEvent);
124980             };
124981
124982
124983             // Call checkOverflow when resizing or whenever the contents change.
124984             ui.checkOverflow = function(selector, reset) {
124985                 if (reset) {
124986                     delete _needWidth[selector];
124987                 }
124988
124989                 var element = d3_select(selector);
124990                 var scrollWidth = element.property('scrollWidth');
124991                 var clientWidth = element.property('clientWidth');
124992                 var needed = _needWidth[selector] || scrollWidth;
124993
124994                 if (scrollWidth > clientWidth) {    // overflow happening
124995                     element.classed('narrow', true);
124996                     if (!_needWidth[selector]) {
124997                         _needWidth[selector] = scrollWidth;
124998                     }
124999
125000                 } else if (scrollWidth >= needed) {
125001                     element.classed('narrow', false);
125002                 }
125003             };
125004
125005             ui.togglePanes = function(showPane) {
125006                 var shownPanes = d3_selectAll('.map-pane.shown');
125007
125008                 var side = textDirection === 'ltr' ? 'right' : 'left';
125009
125010                 shownPanes
125011                     .classed('shown', false);
125012
125013                 d3_selectAll('.map-control button')
125014                     .classed('active', false);
125015
125016                 if (showPane) {
125017                     shownPanes
125018                         .style('display', 'none')
125019                         .style(side, '-500px');
125020
125021                     d3_selectAll('.' + showPane.attr('pane') + '-control button')
125022                         .classed('active', true);
125023
125024                     showPane
125025                         .classed('shown', true)
125026                         .style('display', 'block');
125027                     if (shownPanes.empty()) {
125028                         showPane
125029                             .style('display', 'block')
125030                             .style(side, '-500px')
125031                             .transition()
125032                             .duration(200)
125033                             .style(side, '0px');
125034                     } else {
125035                         showPane
125036                             .style(side, '0px');
125037                     }
125038                 } else {
125039                     shownPanes
125040                         .style('display', 'block')
125041                         .style(side, '0px')
125042                         .transition()
125043                         .duration(200)
125044                         .style(side, '-500px')
125045                         .on('end', function() {
125046                             d3_select(this).style('display', 'none');
125047                         });
125048                 }
125049             };
125050
125051             return ui;
125052         }
125053
125054         function coreContext() {
125055             var dispatch$1 = dispatch('enter', 'exit', 'change');
125056             var context = utilRebind({}, dispatch$1, 'on');
125057             var _deferred = new Set();
125058
125059             context.version = '2.17.1';
125060             context.privacyVersion = '20191217';
125061
125062             // create a special translation that contains the keys in place of the strings
125063             var tkeys = JSON.parse(JSON.stringify(en));  // clone deep
125064             var parents = [];
125065
125066             function traverser(v, k, obj) {
125067                 parents.push(k);
125068                 if (typeof v === 'object') {
125069                     forOwn(v, traverser);
125070                 } else if (typeof v === 'string') {
125071                     obj[k] = parents.join('.');
125072                 }
125073                 parents.pop();
125074             }
125075
125076             function forOwn(obj, fn) {
125077                 Object.keys(obj).forEach(function(k) { fn(obj[k], k, obj); });
125078             }
125079
125080             forOwn(tkeys, traverser);
125081             addTranslation('_tkeys_', tkeys);
125082
125083             addTranslation('en', en);
125084             setLocale('en');
125085
125086
125087             // https://github.com/openstreetmap/iD/issues/772
125088             // http://mathiasbynens.be/notes/localstorage-pattern#comment-9
125089             var storage;
125090             try { storage = localStorage; } catch (e) {}  // eslint-disable-line no-empty
125091             storage = storage || (function() {
125092                 var s = {};
125093                 return {
125094                     getItem: function(k) { return s[k]; },
125095                     setItem: function(k, v) { s[k] = v; },
125096                     removeItem: function(k) { delete s[k]; }
125097                 };
125098             })();
125099
125100             context.storage = function(k, v) {
125101                 try {
125102                     if (arguments.length === 1) { return storage.getItem(k); }
125103                     else if (v === null) { storage.removeItem(k); }
125104                     else { storage.setItem(k, v); }
125105                 } catch (e) {
125106                     // localstorage quota exceeded
125107                     /* eslint-disable no-console */
125108                     if (typeof console !== 'undefined') { console.error('localStorage quota exceeded'); }
125109                     /* eslint-enable no-console */
125110                 }
125111             };
125112
125113
125114             /* User interface and keybinding */
125115             var ui;
125116             context.ui = function() { return ui; };
125117
125118             var keybinding = utilKeybinding('context');
125119             context.keybinding = function() { return keybinding; };
125120             d3_select(document).call(keybinding);
125121
125122
125123             /* Straight accessors. Avoid using these if you can. */
125124             var connection, history, validator;
125125             context.connection = function() { return connection; };
125126             context.history = function() { return history; };
125127             context.validator = function() { return validator; };
125128
125129             /* Connection */
125130             context.preauth = function(options) {
125131                 if (connection) {
125132                     connection.switch(options);
125133                 }
125134                 return context;
125135             };
125136
125137
125138             function afterLoad(cid, callback) {
125139                 return function(err, result) {
125140                     if (err) {
125141                         // 400 Bad Request, 401 Unauthorized, 403 Forbidden..
125142                         if (err.status === 400 || err.status === 401 || err.status === 403) {
125143                             if (connection) {
125144                                 connection.logout();
125145                             }
125146                         }
125147                         if (typeof callback === 'function') {
125148                             callback(err);
125149                         }
125150                         return;
125151
125152                     } else if (connection && connection.getConnectionId() !== cid) {
125153                         if (typeof callback === 'function') {
125154                             callback({ message: 'Connection Switched', status: -1 });
125155                         }
125156                         return;
125157
125158                     } else {
125159                         history.merge(result.data, result.extent);
125160                         if (typeof callback === 'function') {
125161                             callback(err, result);
125162                         }
125163                         return;
125164                     }
125165                 };
125166             }
125167
125168
125169             context.loadTiles = function(projection, callback) {
125170                 var handle = window.requestIdleCallback(function() {
125171                     _deferred.delete(handle);
125172                     if (connection && context.editableDataEnabled()) {
125173                         var cid = connection.getConnectionId();
125174                         connection.loadTiles(projection, afterLoad(cid, callback));
125175                     }
125176                 });
125177                 _deferred.add(handle);
125178             };
125179
125180             context.loadTileAtLoc = function(loc, callback) {
125181                 var handle = window.requestIdleCallback(function() {
125182                     _deferred.delete(handle);
125183                     if (connection && context.editableDataEnabled()) {
125184                         var cid = connection.getConnectionId();
125185                         connection.loadTileAtLoc(loc, afterLoad(cid, callback));
125186                     }
125187                 });
125188                 _deferred.add(handle);
125189             };
125190
125191             context.loadEntity = function(entityID, callback) {
125192                 if (connection) {
125193                     var cid = connection.getConnectionId();
125194                     connection.loadEntity(entityID, afterLoad(cid, callback));
125195                 }
125196             };
125197
125198             context.zoomToEntity = function(entityID, zoomTo) {
125199                 if (zoomTo !== false) {
125200                     this.loadEntity(entityID, function(err, result) {
125201                         if (err) { return; }
125202                         var entity = result.data.find(function(e) { return e.id === entityID; });
125203                         if (entity) {
125204                             map.zoomTo(entity);
125205                         }
125206                     });
125207                 }
125208
125209                 map.on('drawn.zoomToEntity', function() {
125210                     if (!context.hasEntity(entityID)) { return; }
125211                     map.on('drawn.zoomToEntity', null);
125212                     context.on('enter.zoomToEntity', null);
125213                     context.enter(modeSelect(context, [entityID]));
125214                 });
125215
125216                 context.on('enter.zoomToEntity', function() {
125217                     if (mode.id !== 'browse') {
125218                         map.on('drawn.zoomToEntity', null);
125219                         context.on('enter.zoomToEntity', null);
125220                     }
125221                 });
125222             };
125223
125224             var minEditableZoom = 16;
125225             context.minEditableZoom = function(val) {
125226                 if (!arguments.length) { return minEditableZoom; }
125227                 minEditableZoom = val;
125228                 if (connection) {
125229                     connection.tileZoom(val);
125230                 }
125231                 return context;
125232             };
125233
125234
125235             /* History */
125236             var inIntro = false;
125237             context.inIntro = function(val) {
125238                 if (!arguments.length) { return inIntro; }
125239                 inIntro = val;
125240                 return context;
125241             };
125242
125243             context.save = function() {
125244                 // no history save, no message onbeforeunload
125245                 if (inIntro || d3_select('.modal').size()) { return; }
125246
125247                 var canSave;
125248                 if (mode && mode.id === 'save') {
125249                     canSave = false;
125250
125251                     // Attempt to prevent user from creating duplicate changes - see #5200
125252                     if (services$1.osm && services$1.osm.isChangesetInflight()) {
125253                         history.clearSaved();
125254                         return;
125255                     }
125256
125257                 } else {
125258                     canSave = context.selectedIDs().every(function(id) {
125259                         var entity = context.hasEntity(id);
125260                         return entity && !entity.isDegenerate();
125261                     });
125262                 }
125263
125264                 if (canSave) {
125265                     history.save();
125266                 }
125267                 if (history.hasChanges()) {
125268                     return t('save.unsaved_changes');
125269                 }
125270             };
125271
125272
125273             /* Graph */
125274             context.hasEntity = function(id) {
125275                 return history.graph().hasEntity(id);
125276             };
125277             context.entity = function(id) {
125278                 return history.graph().entity(id);
125279             };
125280             context.childNodes = function(way) {
125281                 return history.graph().childNodes(way);
125282             };
125283             context.geometry = function(id) {
125284                 return context.entity(id).geometry(history.graph());
125285             };
125286
125287
125288             /* Modes */
125289             var mode;
125290             context.mode = function() {
125291                 return mode;
125292             };
125293             context.enter = function(newMode) {
125294                 if (mode) {
125295                     mode.exit();
125296                     dispatch$1.call('exit', this, mode);
125297                 }
125298
125299                 mode = newMode;
125300                 mode.enter();
125301                 dispatch$1.call('enter', this, mode);
125302             };
125303
125304             context.selectedIDs = function() {
125305                 if (mode && mode.selectedIDs) {
125306                     return mode.selectedIDs();
125307                 } else {
125308                     return [];
125309                 }
125310             };
125311
125312             context.activeID = function() {
125313                 return mode && mode.activeID && mode.activeID();
125314             };
125315
125316             var _selectedNoteID;
125317             context.selectedNoteID = function(noteID) {
125318                 if (!arguments.length) { return _selectedNoteID; }
125319                 _selectedNoteID = noteID;
125320                 return context;
125321             };
125322
125323             var _selectedErrorID;
125324             context.selectedErrorID = function(errorID) {
125325                 if (!arguments.length) { return _selectedErrorID; }
125326                 _selectedErrorID = errorID;
125327                 return context;
125328             };
125329
125330
125331             /* Behaviors */
125332             context.install = function(behavior) {
125333                 context.surface().call(behavior);
125334             };
125335             context.uninstall = function(behavior) {
125336                 context.surface().call(behavior.off);
125337             };
125338
125339
125340             /* Copy/Paste */
125341             var copyIDs = [], copyGraph;
125342             context.copyGraph = function() { return copyGraph; };
125343             context.copyIDs = function(val) {
125344                 if (!arguments.length) { return copyIDs; }
125345                 copyIDs = val;
125346                 copyGraph = history.graph();
125347                 return context;
125348             };
125349
125350
125351             /* Background */
125352             var background;
125353             context.background = function() { return background; };
125354
125355
125356             /* Features */
125357             var features;
125358             context.features = function() { return features; };
125359             context.hasHiddenConnections = function(id) {
125360                 var graph = history.graph();
125361                 var entity = graph.entity(id);
125362                 return features.hasHiddenConnections(entity, graph);
125363             };
125364
125365
125366             /* Photos */
125367             var photos;
125368             context.photos = function() { return photos; };
125369
125370
125371             /* Presets */
125372             var presets;
125373             context.presets = function() { return presets; };
125374
125375
125376             /* Map */
125377             var map;
125378             context.map = function() { return map; };
125379             context.layers = function() { return map.layers; };
125380             context.surface = function() { return map.surface; };
125381             context.editableDataEnabled = function() { return map.editableDataEnabled(); };
125382             context.editable = function() {
125383
125384                // don't allow editing during save
125385                var mode = context.mode();
125386                if (!mode || mode.id === 'save') { return false; }
125387
125388                return map.editableDataEnabled();
125389             };
125390             context.surfaceRect = function() {
125391                 return map.surface.node().getBoundingClientRect();
125392             };
125393
125394
125395             /* Debug */
125396             var debugFlags = {
125397                 tile: false,        // tile boundaries
125398                 collision: false,   // label collision bounding boxes
125399                 imagery: false,     // imagery bounding polygons
125400                 community: false,   // community bounding polygons
125401                 imperial: false,    // imperial (not metric) bounding polygons
125402                 driveLeft: false,   // driveLeft bounding polygons
125403                 target: false,      // touch targets
125404                 downloaded: false   // downloaded data from osm
125405             };
125406             context.debugFlags = function() {
125407                 return debugFlags;
125408             };
125409             context.setDebug = function(flag, val) {
125410                 if (arguments.length === 1) { val = true; }
125411                 debugFlags[flag] = val;
125412                 dispatch$1.call('change');
125413                 return context;
125414             };
125415             context.getDebug = function(flag) {
125416                 return flag && debugFlags[flag];
125417             };
125418
125419
125420             /* Container */
125421             var container = d3_select(document.body);
125422             context.container = function(val) {
125423                 if (!arguments.length) { return container; }
125424                 container = val;
125425                 container.classed('id-container', true);
125426                 return context;
125427             };
125428             var embed;
125429             context.embed = function(val) {
125430                 if (!arguments.length) { return embed; }
125431                 embed = val;
125432                 return context;
125433             };
125434
125435
125436             /* Assets */
125437             var assetPath = '';
125438             context.assetPath = function(val) {
125439                 if (!arguments.length) { return assetPath; }
125440                 assetPath = val;
125441                 return context;
125442             };
125443
125444             var assetMap = {};
125445             context.assetMap = function(val) {
125446                 if (!arguments.length) { return assetMap; }
125447                 assetMap = val;
125448                 return context;
125449             };
125450
125451             context.asset = function(val) {
125452                 var filename = assetPath + val;
125453                 return assetMap[filename] || filename;
125454             };
125455
125456             context.imagePath = function(val) {
125457                 return context.asset('img/' + val);
125458             };
125459
125460
125461             /* locales */
125462             // `locale` variable contains a "requested locale".
125463             // It won't become the `currentLocale` until after loadLocale() is called.
125464             var locale, localePath;
125465
125466             context.locale = function(loc, path) {
125467                 if (!arguments.length) { return currentLocale; }
125468                 locale = loc;
125469                 localePath = path;
125470                 return context;
125471             };
125472
125473             context.loadLocale = function(callback) {
125474                 if (locale && locale !== 'en' && dataLocales.hasOwnProperty(locale)) {
125475                     localePath = localePath || context.asset('locales/' + locale + '.json');
125476                     d3_json(localePath)
125477                         .then(function(result) {
125478                             addTranslation(locale, result[locale]);
125479                             setLocale(locale);
125480                             utilDetect(true);
125481                             if (callback) { callback(); }
125482                         })
125483                         .catch(function(err) {
125484                             if (callback) { callback(err.message); }
125485                         });
125486                 } else {
125487                     if (locale) {
125488                         setLocale(locale);
125489                         utilDetect(true);
125490                     }
125491                     if (callback) {
125492                         callback();
125493                     }
125494                 }
125495             };
125496
125497
125498             /* reset (aka flush) */
125499             context.reset = context.flush = function() {
125500                 context.debouncedSave.cancel();
125501
125502                 Array.from(_deferred).forEach(function(handle) {
125503                     window.cancelIdleCallback(handle);
125504                     _deferred.delete(handle);
125505                 });
125506
125507                 Object.values(services$1).forEach(function(service) {
125508                     if (service && typeof service.reset === 'function') {
125509                         service.reset(context);
125510                     }
125511                 });
125512
125513                 validator.reset();
125514                 features.reset();
125515                 history.reset();
125516
125517                 return context;
125518             };
125519
125520
125521             /* Init */
125522
125523             context.projection = geoRawMercator();
125524             context.curtainProjection = geoRawMercator();
125525
125526             locale = utilDetect().locale;
125527             if (locale && !dataLocales.hasOwnProperty(locale)) {
125528                 locale = locale.split('-')[0];
125529             }
125530
125531             history = coreHistory(context);
125532             validator = coreValidator(context);
125533
125534             context.graph = history.graph;
125535             context.changes = history.changes;
125536             context.intersects = history.intersects;
125537             context.pauseChangeDispatch = history.pauseChangeDispatch;
125538             context.resumeChangeDispatch = history.resumeChangeDispatch;
125539
125540             // Debounce save, since it's a synchronous localStorage write,
125541             // and history changes can happen frequently (e.g. when dragging).
125542             context.debouncedSave = debounce(context.save, 350);
125543             function withDebouncedSave(fn) {
125544                 return function() {
125545                     var result = fn.apply(history, arguments);
125546                     context.debouncedSave();
125547                     return result;
125548                 };
125549             }
125550
125551             context.perform = withDebouncedSave(history.perform);
125552             context.replace = withDebouncedSave(history.replace);
125553             context.pop = withDebouncedSave(history.pop);
125554             context.overwrite = withDebouncedSave(history.overwrite);
125555             context.undo = withDebouncedSave(history.undo);
125556             context.redo = withDebouncedSave(history.redo);
125557
125558             ui = uiInit(context);
125559
125560             connection = services$1.osm;
125561             background = rendererBackground(context);
125562             features = rendererFeatures(context);
125563             photos = rendererPhotos(context);
125564             presets = presetIndex(context);
125565
125566             if (services$1.maprules && utilStringQs(window.location.hash).maprules) {
125567                 var maprules = utilStringQs(window.location.hash).maprules;
125568                 d3_json(maprules)
125569                     .then(function(mapcss) {
125570                         services$1.maprules.init();
125571                         mapcss.forEach(function(mapcssSelector) {
125572                             return services$1.maprules.addRule(mapcssSelector);
125573                         });
125574                     })
125575                     .catch(function() {
125576                         /* ignore */
125577                     });
125578             }
125579
125580             map = rendererMap(context);
125581             context.mouse = map.mouse;
125582             context.extent = map.extent;
125583             context.pan = map.pan;
125584             context.zoomIn = map.zoomIn;
125585             context.zoomOut = map.zoomOut;
125586             context.zoomInFurther = map.zoomInFurther;
125587             context.zoomOutFurther = map.zoomOutFurther;
125588             context.redrawEnable = map.redrawEnable;
125589
125590             Object.values(services$1).forEach(function(service) {
125591                 if (service && typeof service.init === 'function') {
125592                     service.init(context);
125593                 }
125594             });
125595
125596             validator.init();
125597             background.init();
125598             features.init();
125599             photos.init();
125600
125601             var presetsParameter = utilStringQs(window.location.hash).presets;
125602             if (presetsParameter && presetsParameter.indexOf('://') !== -1) {
125603                 // assume URL of external presets file
125604
125605                 presets.fromExternal(external, function(externalPresets) {
125606                     context.presets = function() { return externalPresets; }; // default + external presets...
125607                     osmSetAreaKeys(presets.areaKeys());
125608                     osmSetPointTags(presets.pointTags());
125609                     osmSetVertexTags(presets.vertexTags());
125610                 });
125611             } else {
125612                 var addablePresetIDs;
125613                 if (presetsParameter) {
125614                     // assume list of allowed preset IDs
125615                     addablePresetIDs = presetsParameter.split(',');
125616                 }
125617                 presets.init(addablePresetIDs);
125618                 osmSetAreaKeys(presets.areaKeys());
125619                 osmSetPointTags(presets.pointTags());
125620                 osmSetVertexTags(presets.vertexTags());
125621             }
125622
125623             return context;
125624         }
125625
125626         function uiSourceSwitch(context) {
125627             var keys;
125628
125629
125630             function click() {
125631                 event.preventDefault();
125632
125633                 var osm = context.connection();
125634                 if (!osm) { return; }
125635
125636                 if (context.inIntro()) { return; }
125637
125638                 if (context.history().hasChanges() &&
125639                     !window.confirm(t('source_switch.lose_changes'))) { return; }
125640
125641                 var isLive = d3_select(this)
125642                     .classed('live');
125643
125644                 isLive = !isLive;
125645                 context.enter(modeBrowse(context));
125646                 context.history().clearSaved();          // remove saved history
125647                 context.flush();                         // remove stored data
125648
125649                 d3_select(this)
125650                     .text(isLive ? t('source_switch.live') : t('source_switch.dev'))
125651                     .classed('live', isLive)
125652                     .classed('chip', isLive);
125653
125654                 osm.switch(isLive ? keys[0] : keys[1]);  // switch connection (warning: dispatches 'change' event)
125655             }
125656
125657             var sourceSwitch = function(selection) {
125658                 selection
125659                     .append('a')
125660                     .attr('href', '#')
125661                     .text(t('source_switch.live'))
125662                     .attr('class', 'live chip')
125663                     .on('click', click);
125664             };
125665
125666
125667             sourceSwitch.keys = function(_) {
125668                 if (!arguments.length) { return keys; }
125669                 keys = _;
125670                 return sourceSwitch;
125671             };
125672
125673
125674             return sourceSwitch;
125675         }
125676
125677         var Connection = services$1.osm;
125678
125679         var debug = false;
125680
125681         var iD = /*#__PURE__*/Object.freeze({
125682                 __proto__: null,
125683                 Connection: Connection,
125684                 debug: debug,
125685                 d3: index$3,
125686                 Context: coreContext,
125687                 setAreaKeys: osmSetAreaKeys,
125688                 get areaKeys () { return osmAreaKeys; },
125689                 Difference: coreDifference,
125690                 Graph: coreGraph,
125691                 History: coreHistory,
125692                 Tree: coreTree,
125693                 geoCross: geoVecCross,
125694                 geoInterp: geoVecInterp,
125695                 geoRoundCoordinates: geoVecFloor,
125696                 geoEuclideanDistance: geoVecLength,
125697                 Entity: osmEntity,
125698                 Node: osmNode,
125699                 Relation: osmRelation,
125700                 Way: osmWay,
125701                 BackgroundSource: rendererBackgroundSource,
125702                 Background: rendererBackground,
125703                 Features: rendererFeatures,
125704                 Map: rendererMap,
125705                 TileLayer: rendererTileLayer,
125706                 Detect: utilDetect,
125707                 uiPreset: uiPresetEditor,
125708                 actionAddEntity: actionAddEntity,
125709                 actionAddMember: actionAddMember,
125710                 actionAddMidpoint: actionAddMidpoint,
125711                 actionAddVertex: actionAddVertex,
125712                 actionChangeMember: actionChangeMember,
125713                 actionChangePreset: actionChangePreset,
125714                 actionChangeTags: actionChangeTags,
125715                 actionCircularize: actionCircularize,
125716                 actionConnect: actionConnect,
125717                 actionCopyEntities: actionCopyEntities,
125718                 actionDeleteMember: actionDeleteMember,
125719                 actionDeleteMultiple: actionDeleteMultiple,
125720                 actionDeleteNode: actionDeleteNode,
125721                 actionDeleteRelation: actionDeleteRelation,
125722                 actionDeleteWay: actionDeleteWay,
125723                 actionDiscardTags: actionDiscardTags,
125724                 actionDisconnect: actionDisconnect,
125725                 actionExtract: actionExtract,
125726                 actionJoin: actionJoin,
125727                 actionMerge: actionMerge,
125728                 actionMergeNodes: actionMergeNodes,
125729                 actionMergePolygon: actionMergePolygon,
125730                 actionMergeRemoteChanges: actionMergeRemoteChanges,
125731                 actionMove: actionMove,
125732                 actionMoveMember: actionMoveMember,
125733                 actionMoveNode: actionMoveNode,
125734                 actionNoop: actionNoop,
125735                 actionOrthogonalize: actionOrthogonalize,
125736                 actionRestrictTurn: actionRestrictTurn,
125737                 actionReverse: actionReverse,
125738                 actionRevert: actionRevert,
125739                 actionRotate: actionRotate,
125740                 actionSplit: actionSplit,
125741                 actionStraightenNodes: actionStraightenNodes,
125742                 actionStraightenWay: actionStraightenWay,
125743                 actionUnrestrictTurn: actionUnrestrictTurn,
125744                 actionReflect: actionReflect,
125745                 actionUpgradeTags: actionUpgradeTags,
125746                 behaviorAddWay: behaviorAddWay,
125747                 behaviorBreathe: behaviorBreathe,
125748                 behaviorCopy: behaviorCopy,
125749                 behaviorDrag: behaviorDrag,
125750                 behaviorDrawWay: behaviorDrawWay,
125751                 behaviorDraw: behaviorDraw,
125752                 behaviorEdit: behaviorEdit,
125753                 behaviorHash: behaviorHash,
125754                 behaviorHover: behaviorHover,
125755                 behaviorLasso: behaviorLasso,
125756                 behaviorOperation: behaviorOperation,
125757                 behaviorPaste: behaviorPaste,
125758                 behaviorSelect: behaviorSelect,
125759                 behaviorTail: behaviorTail,
125760                 coreContext: coreContext,
125761                 coreDifference: coreDifference,
125762                 coreGraph: coreGraph,
125763                 coreHistory: coreHistory,
125764                 coreTree: coreTree,
125765                 coreValidator: coreValidator,
125766                 data: data,
125767                 dataWikipedia: wikipedia$2,
125768                 dataAddressFormats: dataAddressFormats,
125769                 dataDeprecated: dataDeprecated,
125770                 dataDiscarded: dataDiscarded,
125771                 dataLanguages: dataLanguages,
125772                 dataLocales: dataLocales,
125773                 dataPhoneFormats: dataPhoneFormats,
125774                 dataShortcuts: dataShortcuts,
125775                 dataTerritoryLanguages: dataTerritoryLanguages,
125776                 dataEn: en,
125777                 geoExtent: geoExtent,
125778                 geoLatToMeters: geoLatToMeters,
125779                 geoLonToMeters: geoLonToMeters,
125780                 geoMetersToLat: geoMetersToLat,
125781                 geoMetersToLon: geoMetersToLon,
125782                 geoMetersToOffset: geoMetersToOffset,
125783                 geoOffsetToMeters: geoOffsetToMeters,
125784                 geoScaleToZoom: geoScaleToZoom,
125785                 geoSphericalClosestNode: geoSphericalClosestNode,
125786                 geoSphericalDistance: geoSphericalDistance,
125787                 geoZoomToScale: geoZoomToScale,
125788                 geoAngle: geoAngle,
125789                 geoChooseEdge: geoChooseEdge,
125790                 geoEdgeEqual: geoEdgeEqual,
125791                 geoGetSmallestSurroundingRectangle: geoGetSmallestSurroundingRectangle,
125792                 geoHasLineIntersections: geoHasLineIntersections,
125793                 geoHasSelfIntersections: geoHasSelfIntersections,
125794                 geoRotate: geoRotate,
125795                 geoLineIntersection: geoLineIntersection,
125796                 geoPathHasIntersections: geoPathHasIntersections,
125797                 geoPathIntersections: geoPathIntersections,
125798                 geoPathLength: geoPathLength,
125799                 geoPointInPolygon: geoPointInPolygon,
125800                 geoPolygonContainsPolygon: geoPolygonContainsPolygon,
125801                 geoPolygonIntersectsPolygon: geoPolygonIntersectsPolygon,
125802                 geoViewportEdge: geoViewportEdge,
125803                 geoRawMercator: geoRawMercator,
125804                 geoVecAdd: geoVecAdd,
125805                 geoVecAngle: geoVecAngle,
125806                 geoVecCross: geoVecCross,
125807                 geoVecDot: geoVecDot,
125808                 geoVecEqual: geoVecEqual,
125809                 geoVecFloor: geoVecFloor,
125810                 geoVecInterp: geoVecInterp,
125811                 geoVecLength: geoVecLength,
125812                 geoVecLengthSquare: geoVecLengthSquare,
125813                 geoVecNormalize: geoVecNormalize,
125814                 geoVecNormalizedDot: geoVecNormalizedDot,
125815                 geoVecProject: geoVecProject,
125816                 geoVecSubtract: geoVecSubtract,
125817                 geoVecScale: geoVecScale,
125818                 geoOrthoNormalizedDotProduct: geoOrthoNormalizedDotProduct,
125819                 geoOrthoCalcScore: geoOrthoCalcScore,
125820                 geoOrthoMaxOffsetAngle: geoOrthoMaxOffsetAngle,
125821                 geoOrthoCanOrthogonalize: geoOrthoCanOrthogonalize,
125822                 modeAddArea: modeAddArea,
125823                 modeAddLine: modeAddLine,
125824                 modeAddPoint: modeAddPoint,
125825                 modeAddNote: modeAddNote,
125826                 modeBrowse: modeBrowse,
125827                 modeDragNode: modeDragNode,
125828                 modeDragNote: modeDragNote,
125829                 modeDrawArea: modeDrawArea,
125830                 modeDrawLine: modeDrawLine,
125831                 modeMove: modeMove,
125832                 modeRotate: modeRotate,
125833                 modeSave: modeSave,
125834                 modeSelect: modeSelect,
125835                 modeSelectData: modeSelectData,
125836                 modeSelectError: modeSelectError,
125837                 modeSelectNote: modeSelectNote,
125838                 operationCircularize: operationCircularize,
125839                 operationContinue: operationContinue,
125840                 operationDelete: operationDelete,
125841                 operationDisconnect: operationDisconnect,
125842                 operationDowngrade: operationDowngrade,
125843                 operationExtract: operationExtract,
125844                 operationMerge: operationMerge,
125845                 operationMove: operationMove,
125846                 operationOrthogonalize: operationOrthogonalize,
125847                 operationReflectShort: operationReflectShort,
125848                 operationReflectLong: operationReflectLong,
125849                 operationReverse: operationReverse,
125850                 operationRotate: operationRotate,
125851                 operationSplit: operationSplit,
125852                 operationStraighten: operationStraighten,
125853                 osmChangeset: osmChangeset,
125854                 osmEntity: osmEntity,
125855                 osmNode: osmNode,
125856                 osmNote: osmNote,
125857                 osmRelation: osmRelation,
125858                 osmWay: osmWay,
125859                 qaError: qaError,
125860                 osmIntersection: osmIntersection,
125861                 osmTurn: osmTurn,
125862                 osmInferRestriction: osmInferRestriction,
125863                 osmLanes: osmLanes,
125864                 osmOldMultipolygonOuterMemberOfRelation: osmOldMultipolygonOuterMemberOfRelation,
125865                 osmIsOldMultipolygonOuterMember: osmIsOldMultipolygonOuterMember,
125866                 osmOldMultipolygonOuterMember: osmOldMultipolygonOuterMember,
125867                 osmJoinWays: osmJoinWays,
125868                 get osmAreaKeys () { return osmAreaKeys; },
125869                 osmSetAreaKeys: osmSetAreaKeys,
125870                 get osmPointTags () { return osmPointTags; },
125871                 osmSetPointTags: osmSetPointTags,
125872                 get osmVertexTags () { return osmVertexTags; },
125873                 osmSetVertexTags: osmSetVertexTags,
125874                 osmNodeGeometriesForTags: osmNodeGeometriesForTags,
125875                 osmOneWayTags: osmOneWayTags,
125876                 osmPavedTags: osmPavedTags,
125877                 osmIsInterestingTag: osmIsInterestingTag,
125878                 osmRoutableHighwayTagValues: osmRoutableHighwayTagValues,
125879                 osmFlowingWaterwayTagValues: osmFlowingWaterwayTagValues,
125880                 osmRailwayTrackTagValues: osmRailwayTrackTagValues,
125881                 presetCategory: presetCategory,
125882                 presetCollection: presetCollection,
125883                 presetField: presetField,
125884                 presetPreset: presetPreset,
125885                 presetIndex: presetIndex,
125886                 rendererBackgroundSource: rendererBackgroundSource,
125887                 rendererBackground: rendererBackground,
125888                 rendererFeatures: rendererFeatures,
125889                 rendererMap: rendererMap,
125890                 rendererPhotos: rendererPhotos,
125891                 rendererTileLayer: rendererTileLayer,
125892                 services: services$1,
125893                 serviceKeepRight: serviceKeepRight,
125894                 serviceImproveOSM: serviceImproveOSM,
125895                 serviceMapillary: serviceMapillary,
125896                 serviceMapRules: serviceMapRules,
125897                 serviceNominatim: serviceNominatim,
125898                 serviceOpenstreetcam: serviceOpenstreetcam,
125899                 serviceOsm: serviceOsm,
125900                 serviceOsmWikibase: serviceOsmWikibase,
125901                 serviceStreetside: serviceStreetside,
125902                 serviceTaginfo: serviceTaginfo,
125903                 serviceVectorTile: serviceVectorTile,
125904                 serviceWikidata: serviceWikidata,
125905                 serviceWikipedia: serviceWikipedia,
125906                 svgAreas: svgAreas,
125907                 svgData: svgData,
125908                 svgDebug: svgDebug,
125909                 svgDefs: svgDefs,
125910                 svgKeepRight: svgKeepRight,
125911                 svgIcon: svgIcon,
125912                 svgGeolocate: svgGeolocate,
125913                 svgLabels: svgLabels,
125914                 svgLayers: svgLayers,
125915                 svgLines: svgLines,
125916                 svgMapillaryImages: svgMapillaryImages,
125917                 svgMapillarySigns: svgMapillarySigns,
125918                 svgMidpoints: svgMidpoints,
125919                 svgNotes: svgNotes,
125920                 svgMarkerSegments: svgMarkerSegments,
125921                 svgOpenstreetcamImages: svgOpenstreetcamImages,
125922                 svgOsm: svgOsm,
125923                 svgPassiveVertex: svgPassiveVertex,
125924                 svgPath: svgPath,
125925                 svgPointTransform: svgPointTransform,
125926                 svgPoints: svgPoints,
125927                 svgRelationMemberTags: svgRelationMemberTags,
125928                 svgSegmentWay: svgSegmentWay,
125929                 svgStreetside: svgStreetside,
125930                 svgTagClasses: svgTagClasses,
125931                 svgTagPattern: svgTagPattern,
125932                 svgTouch: svgTouch,
125933                 svgTurns: svgTurns,
125934                 svgVertices: svgVertices,
125935                 uiFields: uiFields,
125936                 uiFieldDefaultCheck: uiFieldCheck,
125937                 uiFieldOnewayCheck: uiFieldCheck,
125938                 uiFieldCheck: uiFieldCheck,
125939                 uiFieldMultiCombo: uiFieldCombo,
125940                 uiFieldNetworkCombo: uiFieldCombo,
125941                 uiFieldSemiCombo: uiFieldCombo,
125942                 uiFieldTypeCombo: uiFieldCombo,
125943                 uiFieldCombo: uiFieldCombo,
125944                 uiFieldUrl: uiFieldText,
125945                 uiFieldIdentifier: uiFieldText,
125946                 uiFieldNumber: uiFieldText,
125947                 uiFieldTel: uiFieldText,
125948                 uiFieldEmail: uiFieldText,
125949                 uiFieldText: uiFieldText,
125950                 uiFieldAccess: uiFieldAccess,
125951                 uiFieldAddress: uiFieldAddress,
125952                 uiFieldCycleway: uiFieldCycleway,
125953                 uiFieldLanes: uiFieldLanes,
125954                 uiFieldLocalized: uiFieldLocalized,
125955                 uiFieldMaxspeed: uiFieldMaxspeed,
125956                 uiFieldStructureRadio: uiFieldRadio,
125957                 uiFieldRadio: uiFieldRadio,
125958                 uiFieldRestrictions: uiFieldRestrictions,
125959                 uiFieldTextarea: uiFieldTextarea,
125960                 uiFieldWikidata: uiFieldWikidata,
125961                 uiFieldWikipedia: uiFieldWikipedia,
125962                 uiIntro: uiIntro,
125963                 uiInfoPanels: uiInfoPanels,
125964                 uiPanelBackground: uiPanelBackground,
125965                 uiPanelHistory: uiPanelHistory,
125966                 uiPanelLocation: uiPanelLocation,
125967                 uiPanelMeasurement: uiPanelMeasurement,
125968                 uiSettingsCustomBackground: uiSettingsCustomBackground,
125969                 uiSettingsCustomData: uiSettingsCustomData,
125970                 uiInit: uiInit,
125971                 uiAccount: uiAccount,
125972                 uiAttribution: uiAttribution,
125973                 uiBackground: uiBackground,
125974                 uiBackgroundDisplayOptions: uiBackgroundDisplayOptions,
125975                 uiBackgroundOffset: uiBackgroundOffset,
125976                 uiChangesetEditor: uiChangesetEditor,
125977                 uiCmd: uiCmd,
125978                 uiCombobox: uiCombobox,
125979                 uiCommit: uiCommit,
125980                 uiCommitChanges: uiCommitChanges,
125981                 uiCommitWarnings: uiCommitWarnings,
125982                 uiConfirm: uiConfirm,
125983                 uiConflicts: uiConflicts,
125984                 uiContributors: uiContributors,
125985                 uiCurtain: uiCurtain,
125986                 uiDataEditor: uiDataEditor,
125987                 uiDataHeader: uiDataHeader,
125988                 uiDisclosure: uiDisclosure,
125989                 uiEditMenu: uiEditMenu,
125990                 uiEntityEditor: uiEntityEditor,
125991                 uiFeatureInfo: uiFeatureInfo,
125992                 uiFeatureList: uiFeatureList,
125993                 uiField: uiField,
125994                 uiFieldHelp: uiFieldHelp,
125995                 uiFlash: uiFlash,
125996                 uiFormFields: uiFormFields,
125997                 uiFullScreen: uiFullScreen,
125998                 uiGeolocate: uiGeolocate,
125999                 uiHelp: uiHelp,
126000                 uiImproveOsmComments: uiImproveOsmComments,
126001                 uiImproveOsmDetails: uiImproveOsmDetails,
126002                 uiImproveOsmEditor: uiImproveOsmEditor,
126003                 uiImproveOsmHeader: uiImproveOsmHeader,
126004                 uiInfo: uiInfo,
126005                 uiInspector: uiInspector,
126006                 uiIssuesInfo: uiIssuesInfo,
126007                 uiKeepRightDetails: uiKeepRightDetails,
126008                 uiKeepRightEditor: uiKeepRightEditor,
126009                 uiKeepRightHeader: uiKeepRightHeader,
126010                 uiLasso: uiLasso,
126011                 uiLoading: uiLoading,
126012                 uiMapData: uiMapData,
126013                 uiMapInMap: uiMapInMap,
126014                 uiModal: uiModal,
126015                 uiNotice: uiNotice,
126016                 uiNoteComments: uiNoteComments,
126017                 uiNoteEditor: uiNoteEditor,
126018                 uiNoteHeader: uiNoteHeader,
126019                 uiNoteReport: uiNoteReport,
126020                 uiPreferences: uiPreferences,
126021                 uiPresetEditor: uiPresetEditor,
126022                 uiPresetIcon: uiPresetIcon,
126023                 uiPresetList: uiPresetList,
126024                 uiQuickLinks: uiQuickLinks,
126025                 uiRadialMenu: uiRadialMenu,
126026                 uiRawMemberEditor: uiRawMemberEditor,
126027                 uiRawMembershipEditor: uiRawMembershipEditor,
126028                 uiRawTagEditor: uiRawTagEditor,
126029                 uiRestore: uiRestore,
126030                 uiScale: uiScale,
126031                 uiSelectionList: uiSelectionList,
126032                 uiSidebar: uiSidebar,
126033                 uiSourceSwitch: uiSourceSwitch,
126034                 uiSpinner: uiSpinner,
126035                 uiSplash: uiSplash,
126036                 uiStatus: uiStatus,
126037                 uiSuccess: uiSuccess,
126038                 uiTagReference: uiTagReference,
126039                 uiToggle: uiToggle,
126040                 uiTooltipHtml: uiTooltipHtml,
126041                 uiVersion: uiVersion,
126042                 uiViewOnOSM: uiViewOnOSM,
126043                 uiViewOnKeepRight: uiViewOnKeepRight,
126044                 uiZoom: uiZoom,
126045                 utilArrayChunk: utilArrayChunk,
126046                 utilArrayDifference: utilArrayDifference,
126047                 utilArrayFlatten: utilArrayFlatten,
126048                 utilArrayGroupBy: utilArrayGroupBy,
126049                 utilArrayIntersection: utilArrayIntersection,
126050                 utilArrayUnion: utilArrayUnion,
126051                 utilArrayUniq: utilArrayUniq,
126052                 utilArrayUniqBy: utilArrayUniqBy,
126053                 utilAsyncMap: utilAsyncMap,
126054                 utilCleanTags: utilCleanTags,
126055                 utilDeepMemberSelector: utilDeepMemberSelector,
126056                 utilDetect: utilDetect,
126057                 utilDisplayName: utilDisplayName,
126058                 utilDisplayNameForPath: utilDisplayNameForPath,
126059                 utilDisplayType: utilDisplayType,
126060                 utilDisplayLabel: utilDisplayLabel,
126061                 utilEntityRoot: utilEntityRoot,
126062                 utilEditDistance: utilEditDistance,
126063                 utilEntitySelector: utilEntitySelector,
126064                 utilEntityOrMemberSelector: utilEntityOrMemberSelector,
126065                 utilEntityOrDeepMemberSelector: utilEntityOrDeepMemberSelector,
126066                 utilFastMouse: utilFastMouse,
126067                 utilFunctor: utilFunctor,
126068                 utilGetAllNodes: utilGetAllNodes,
126069                 utilGetSetValue: utilGetSetValue,
126070                 utilHashcode: utilHashcode,
126071                 utilHighlightEntities: utilHighlightEntities,
126072                 utilKeybinding: utilKeybinding,
126073                 utilNoAuto: utilNoAuto,
126074                 utilObjectOmit: utilObjectOmit,
126075                 utilPrefixCSSProperty: utilPrefixCSSProperty,
126076                 utilPrefixDOMProperty: utilPrefixDOMProperty,
126077                 utilPreset: utilPreset,
126078                 utilQsString: utilQsString,
126079                 utilRebind: utilRebind,
126080                 utilSafeClassName: utilSafeClassName,
126081                 utilSetTransform: utilSetTransform,
126082                 utilSessionMutex: utilSessionMutex,
126083                 utilStringQs: utilStringQs,
126084                 utilTagDiff: utilTagDiff,
126085                 utilTagText: utilTagText,
126086                 utilTiler: utilTiler,
126087                 utilTriggerEvent: utilTriggerEvent,
126088                 utilWrap: utilWrap,
126089                 validationAlmostJunction: validationAlmostJunction,
126090                 validationCloseNodes: validationCloseNodes,
126091                 validationCrossingWays: validationCrossingWays,
126092                 validationDisconnectedWay: validationDisconnectedWay,
126093                 validationFormatting: validationFormatting,
126094                 validationHelpRequest: validationHelpRequest,
126095                 validationImpossibleOneway: validationImpossibleOneway,
126096                 validationIncompatibleSource: validationIncompatibleSource,
126097                 validationMaprules: validationMaprules,
126098                 validationMismatchedGeometry: validationMismatchedGeometry,
126099                 validationMissingRole: validationMissingRole,
126100                 validationMissingTag: validationMissingTag,
126101                 validationOutdatedTags: validationOutdatedTags,
126102                 validationPrivateData: validationPrivateData,
126103                 validationSuspiciousName: validationSuspiciousName,
126104                 validationUnsquareWay: validationUnsquareWay
126105         });
126106
126107         // polyfill requestIdleCallback
126108         window.requestIdleCallback = window.requestIdleCallback ||
126109             function(cb) {
126110                 var start = Date.now();
126111                 return window.requestAnimationFrame(function() {
126112                     cb({
126113                         didTimeout: false,
126114                         timeRemaining: function() {
126115                             return Math.max(0, 50 - (Date.now() - start));
126116                         }
126117                     });
126118                 });
126119             };
126120
126121         window.cancelIdleCallback = window.cancelIdleCallback ||
126122             function(id) {
126123                 window.cancelAnimationFrame(id);
126124             };
126125         window.iD = iD;
126126
126127 }());
126128 //# sourceMappingURL=iD.js.map